diff --git a/src/main/resources/resources/bpmnjs/dist/index.js b/src/main/resources/resources/bpmnjs/dist/index.js index 459bf0ac6cc5554a2c9f242fce58c822a1102fc9..8bd9a6a45c68c9d80e8d961f480c21f6201a56b6 100644 --- a/src/main/resources/resources/bpmnjs/dist/index.js +++ b/src/main/resources/resources/bpmnjs/dist/index.js @@ -15626,9 +15626,9 @@ ReplaceMenuProvider.prototype.getEntries = function (element) { return []; } - var differentType = (0, _TypeUtil.isDifferentType)(element); // start events outside event sub processes + var differentType = (0, _TypeUtil.isDifferentType)(element); // start events outside sub processes - if ((0, _ModelUtil.is)(businessObject, 'bpmn:StartEvent') && !(0, _DiUtil.isEventSubProcess)(businessObject.$parent)) { + if ((0, _ModelUtil.is)(businessObject, 'bpmn:StartEvent') && !(0, _ModelUtil.is)(businessObject.$parent, 'bpmn:SubProcess')) { entries = (0, _minDash.filter)(replaceOptions.START_EVENT, differentType); return this._createEntries(element, entries); } // expanded/collapsed pools @@ -15651,6 +15651,12 @@ ReplaceMenuProvider.prototype.getEntries = function (element) { return differentType(entry) || !differentType(entry) && !isInterruptingEqual; }); return this._createEntries(element, entries); + } // start events inside sub processes + + + if ((0, _ModelUtil.is)(businessObject, 'bpmn:StartEvent') && !(0, _DiUtil.isEventSubProcess)(businessObject.$parent) && (0, _ModelUtil.is)(businessObject.$parent, 'bpmn:SubProcess')) { + entries = (0, _minDash.filter)(replaceOptions.START_EVENT_SUB_PROCESS, differentType); + return this._createEntries(element, entries); } // end events @@ -16410,7 +16416,7 @@ function intersection(a1, a2) { Object.defineProperty(exports, "__esModule", { value: true }); -exports.PARTICIPANT = exports.SEQUENCE_FLOW = exports.EVENT_SUB_PROCESS_START_EVENT = exports.BOUNDARY_EVENT = exports.TASK = exports.EVENT_SUB_PROCESS = exports.TRANSACTION = exports.SUBPROCESS_EXPANDED = exports.GATEWAY = exports.END_EVENT = exports.INTERMEDIATE_EVENT = exports.START_EVENT = void 0; +exports.PARTICIPANT = exports.SEQUENCE_FLOW = exports.EVENT_SUB_PROCESS_START_EVENT = exports.BOUNDARY_EVENT = exports.TASK = exports.EVENT_SUB_PROCESS = exports.TRANSACTION = exports.SUBPROCESS_EXPANDED = exports.GATEWAY = exports.END_EVENT = exports.INTERMEDIATE_EVENT = exports.START_EVENT_SUB_PROCESS = exports.START_EVENT = void 0; var START_EVENT = [{ label: 'Start Event', actionName: 'replace-with-none-start', @@ -16466,6 +16472,29 @@ var START_EVENT = [{ } }]; exports.START_EVENT = START_EVENT; +var START_EVENT_SUB_PROCESS = [{ + label: 'Start Event', + actionName: 'replace-with-none-start', + className: 'bpmn-icon-start-event-none', + target: { + type: 'bpmn:StartEvent' + } +}, { + label: 'Intermediate Throw Event', + actionName: 'replace-with-none-intermediate-throwing', + className: 'bpmn-icon-intermediate-event-none', + target: { + type: 'bpmn:IntermediateThrowEvent' + } +}, { + label: 'End Event', + actionName: 'replace-with-none-end', + className: 'bpmn-icon-end-event-none', + target: { + type: 'bpmn:EndEvent' + } +}]; +exports.START_EVENT_SUB_PROCESS = START_EVENT_SUB_PROCESS; var INTERMEDIATE_EVENT = [{ label: 'Start Event', actionName: 'replace-with-none-start', @@ -17328,11 +17357,11 @@ function isSameOrganization(a, b) { } function isMessageFlowSource(element) { - return (0, _ModelUtil.is)(element, 'bpmn:InteractionNode') && (!(0, _ModelUtil.is)(element, 'bpmn:Event') || (0, _ModelUtil.is)(element, 'bpmn:ThrowEvent') && hasEventDefinitionOrNone(element, 'bpmn:MessageEventDefinition')); + return (0, _ModelUtil.is)(element, 'bpmn:InteractionNode') && !(0, _ModelUtil.is)(element, 'bpmn:BoundaryEvent') && (!(0, _ModelUtil.is)(element, 'bpmn:Event') || (0, _ModelUtil.is)(element, 'bpmn:ThrowEvent') && hasEventDefinitionOrNone(element, 'bpmn:MessageEventDefinition')); } function isMessageFlowTarget(element) { - return (0, _ModelUtil.is)(element, 'bpmn:InteractionNode') && !isForCompensation(element) && (!(0, _ModelUtil.is)(element, 'bpmn:Event') || (0, _ModelUtil.is)(element, 'bpmn:CatchEvent') && hasEventDefinitionOrNone(element, 'bpmn:MessageEventDefinition')); + return (0, _ModelUtil.is)(element, 'bpmn:InteractionNode') && !(0, _ModelUtil.is)(element, 'bpmn:BoundaryEvent') && !isForCompensation(element) && (!(0, _ModelUtil.is)(element, 'bpmn:Event') || (0, _ModelUtil.is)(element, 'bpmn:CatchEvent') && hasEventDefinitionOrNone(element, 'bpmn:MessageEventDefinition')); } function getScopeParent(element) { @@ -17653,6 +17682,15 @@ function canReplace(elements, target, position) { oldElementId: element.id, newElementType: 'bpmn:StartEvent' }); + } // replace a typed start event by a blank interrupting start event + // when the target is a sub process but not an event sub process + + + if (hasOneOfEventDefinitions(element, ['bpmn:MessageEventDefinition', 'bpmn:TimerEventDefinition', 'bpmn:SignalEventDefinition', 'bpmn:ConditionalEventDefinition']) && (0, _ModelUtil.is)(target, 'bpmn:SubProcess')) { + canExecute.replacements.push({ + oldElementId: element.id, + newElementType: 'bpmn:StartEvent' + }); } } } @@ -24825,7 +24863,7 @@ function createParallelDragger(parentGfx, segmentStart, segmentEnd, alignment) { (0, _tinySvg.append)(parentGfx, draggerGfx); var width = 14, height = 3, - padding = 6, + padding = 11, hitWidth = calculateHitWidth(segmentStart, segmentEnd, alignment), hitHeight = height + padding; var visual = (0, _tinySvg.create)('rect'); @@ -64356,10 +64394,11 @@ function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { if (arrLength != othLength && !(isPartial && othLength > arrLength)) { return false; } - // Assume cyclic values are equal. - var stacked = stack.get(array); - if (stacked && stack.get(other)) { - return stacked == other; + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; } var index = -1, result = true, @@ -64567,10 +64606,11 @@ function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { return false; } } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked && stack.get(other)) { - return stacked == other; + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; } var result = true; stack.set(object, other); @@ -66816,6 +66856,10 @@ var arrayFilter = require('./_arrayFilter'), * // The `_.property` iteratee shorthand. * _.filter(users, 'active'); * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] */ function filter(collection, predicate) { var func = isArray(collection) ? arrayFilter : baseFilter; @@ -77266,7 +77310,7 @@ var _default = { exports.default = _default; },{}],574:[function(require,module,exports){ -module.exports = "\n\n \n \n \n \n \n \n \n \n \n \n"; +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"; },{}],575:[function(require,module,exports){ 'use strict'; @@ -77337,8 +77381,259 @@ PropertiesActivator.prototype.isPropertyEditable = function(entry, propertyName, return true; }; },{}],576:[function(require,module,exports){ -arguments[4][4][0].apply(exports,arguments) -},{"bpmn-js/lib/util/ModelUtil":141,"dup":4,"ids":346,"lodash/forEach":522,"min-dom":556}],577:[function(require,module,exports){ +'use strict'; + +var domQuery = require('min-dom').query, + domClear = require('min-dom').clear, + is = require('bpmn-js/lib/util/ModelUtil').is, + forEach = require('lodash/forEach'), + domify = require('min-dom').domify, + Ids = require('ids').default; + +var SPACE_REGEX = /\s/; + +// for QName validation as per http://www.w3.org/TR/REC-xml/#NT-NameChar +var QNAME_REGEX = /^([a-z][\w-.]*:)?[a-z_][\w-.]*$/i; + +// for ID validation as per BPMN Schema (QName - Namespace) +var ID_REGEX = /^[a-z_][\w-.]*$/i; + +var PLACEHOLDER_REGEX = /\$\{([^}]*)\}/g; + +var HTML_ESCAPE_MAP = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + '\'': ''' +}; + +function selectedOption(selectBox) { + if (selectBox.selectedIndex >= 0) { + return selectBox.options[selectBox.selectedIndex].value; + } +} + +module.exports.selectedOption = selectedOption; + + +function selectedType(elementSyntax, inputNode) { + var typeSelect = domQuery(elementSyntax, inputNode); + return selectedOption(typeSelect); +} + +module.exports.selectedType = selectedType; + + +/** + * Retrieve the root element the document this + * business object is contained in. + * + * @return {ModdleElement} + */ +function getRoot(businessObject) { + var parent = businessObject; + while (parent.$parent) { + parent = parent.$parent; + } + return parent; +} + +module.exports.getRoot = getRoot; + + +/** + * filters all elements in the list which have a given type. + * removes a new list + */ +function filterElementsByType(objectList, type) { + var list = objectList || []; + var result = []; + forEach(list, function(obj) { + if (is(obj, type)) { + result.push(obj); + } + }); + return result; +} + +module.exports.filterElementsByType = filterElementsByType; + + +function findRootElementsByType(businessObject, referencedType) { + var root = getRoot(businessObject); + + return filterElementsByType(root.rootElements, referencedType); +} + +module.exports.findRootElementsByType = findRootElementsByType; + + +function removeAllChildren(domElement) { + while (domElement.firstChild) { + domElement.removeChild(domElement.firstChild); + } +} + +module.exports.removeAllChildren = removeAllChildren; + + +/** + * adds an empty option to the list + */ +function addEmptyParameter(list) { + return list.push({ 'label': '', 'value': '', 'name': '' }); +} + +module.exports.addEmptyParameter = addEmptyParameter; + + +/** + * returns a list with all root elements for the given parameter 'referencedType' + */ +function refreshOptionsModel(businessObject, referencedType) { + var model = []; + var referableObjects = findRootElementsByType(businessObject, referencedType); + forEach(referableObjects, function(obj) { + model.push({ + label: (obj.name || '') + ' (id='+obj.id+')', + value: obj.id, + name: obj.name + }); + }); + return model; +} + +module.exports.refreshOptionsModel = refreshOptionsModel; + + +/** + * fills the drop down with options + */ +function updateOptionsDropDown(domSelector, businessObject, referencedType, entryNode) { + var options = refreshOptionsModel(businessObject, referencedType); + addEmptyParameter(options); + var selectBox = domQuery(domSelector, entryNode); + domClear(selectBox); + + forEach(options, function(option) { + var optionEntry = domify(''); + selectBox.appendChild(optionEntry); + }); + return options; +} + +module.exports.updateOptionsDropDown = updateOptionsDropDown; + + +/** + * checks whether the id value is valid + * + * @param {ModdleElement} bo + * @param {String} idValue + * @param {Function} translate + * + * @return {String} error message + */ +function isIdValid(bo, idValue, translate) { + var assigned = bo.$model.ids.assigned(idValue); + + var idExists = assigned && assigned !== bo; + + if (!idValue || idExists) { + return translate('Element must have an unique id.'); + } + + return validateId(idValue, translate); +} + +module.exports.isIdValid = isIdValid; + + +function validateId(idValue, translate) { + + idValue = stripPlaceholders(idValue); + + if (containsSpace(idValue)) { + return translate('Id must not contain spaces.'); + } + + if (!ID_REGEX.test(idValue)) { + + if (QNAME_REGEX.test(idValue)) { + return translate('Id must not contain prefix.'); + } + + return translate('Id must be a valid QName.'); + } +} + +module.exports.validateId = validateId; + + +function containsSpace(value) { + return SPACE_REGEX.test(value); +} + +module.exports.containsSpace = containsSpace; + + +function stripPlaceholders(idValue) { + + // replace expression e.g. ${VERSION_TAG} + // use only the content between ${} + // for the REGEX check + return idValue.replace(PLACEHOLDER_REGEX, '$1'); +} + +/** + * generate a semantic id with given prefix + */ +function nextId(prefix) { + var ids = new Ids([32,32,1]); + + return ids.nextPrefixed(prefix); +} + +module.exports.nextId = nextId; + + +function triggerClickEvent(element) { + var evt; + var eventType = 'click'; + + if (document.createEvent) { + try { + // Chrome, Safari, Firefox + evt = new MouseEvent((eventType), { view: window, bubbles: true, cancelable: true }); + } catch (e) { + // IE 11, PhantomJS (wat!) + evt = document.createEvent('MouseEvent'); + + evt.initEvent((eventType), true, true); + } + return element.dispatchEvent(evt); + } else { + // Welcome IE + evt = document.createEventObject(); + + return element.fireEvent('on' + eventType, evt); + } +} + +module.exports.triggerClickEvent = triggerClickEvent; + + +function escapeHTML(str) { + str = '' + str; + + return str && str.replace(/[&<>"']/g, function(match) { + return HTML_ESCAPE_MAP[match]; + }); +} + +module.exports.escapeHTML = escapeHTML; +},{"bpmn-js/lib/util/ModelUtil":141,"ids":346,"lodash/forEach":522,"min-dom":556}],577:[function(require,module,exports){ 'use strict'; var getBusinessObject = require('bpmn-js/lib/util/ModelUtil').getBusinessObject, @@ -78729,8 +79024,31 @@ CmdHelper.setList = function(element, businessObject, listPropertyName, updatedO }; },{}],591:[function(require,module,exports){ -arguments[4][11][0].apply(exports,arguments) -},{"dup":11}],592:[function(require,module,exports){ +'use strict'; + +var ElementHelper = {}; +module.exports = ElementHelper; + +/** + * Creates a new element and set the parent to it + * + * @method ElementHelper#createElement + * + * @param {String} elementType of the new element + * @param {Object} properties of the new element in key-value pairs + * @param {moddle.object} parent of the new element + * @param {BpmnFactory} factory which creates the new element + * + * @returns {djs.model.Base} element which is created + */ +ElementHelper.createElement = function(elementType, properties, parent, factory) { + var element = factory.create(elementType, properties); + element.$parent = parent; + + return element; +}; + +},{}],592:[function(require,module,exports){ 'use strict'; var getBusinessObject = require('bpmn-js/lib/util/ModelUtil').getBusinessObject, @@ -89690,4 +90008,4 @@ var _default = tools; exports.default = _default; },{"jquery":348}]},{},[1]) -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJhcHAvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMtcHJvcGVydGllcy1wYW5lbC9saWIvUHJvcGVydGllc1BhbmVsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMtcHJvcGVydGllcy1wYW5lbC9saWIvVXRpbHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2xpYi9jbWQvQ3JlYXRlQW5kUmVmZXJlbmNlSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzLXByb3BlcnRpZXMtcGFuZWwvbGliL2NtZC9DcmVhdGVCdXNpbmVzc09iamVjdExpc3RIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMtcHJvcGVydGllcy1wYW5lbC9saWIvY21kL011bHRpQ29tbWFuZEhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2xpYi9jbWQvVXBkYXRlQnVzaW5lc3NPYmplY3RIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMtcHJvcGVydGllcy1wYW5lbC9saWIvY21kL1VwZGF0ZUJ1c2luZXNzT2JqZWN0TGlzdEhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2xpYi9jbWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2xpYi9oZWxwZXIvRWxlbWVudEhlbHBlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzLXByb3BlcnRpZXMtcGFuZWwvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL0Jhc2VNb2RlbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL0Jhc2VWaWV3ZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvTW9kZWxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9OYXZpZ2F0ZWRWaWV3ZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvVmlld2VyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2NvcmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZHJhdy9CcG1uUmVuZGVyVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9kcmF3L0JwbW5SZW5kZXJlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9kcmF3L1BhdGhNYXAuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZHJhdy9UZXh0UmVuZGVyZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZHJhdy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXBsYWNlL0JwbW5BdXRvUGxhY2UuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvYXV0by1wbGFjZS9CcG1uQXV0b1BsYWNlVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXBsYWNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2F1dG8tcmVzaXplL0JwbW5BdXRvUmVzaXplLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2F1dG8tcmVzaXplL0JwbW5BdXRvUmVzaXplUHJvdmlkZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvYXV0by1yZXNpemUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvY29udGV4dC1wYWQvQ29udGV4dFBhZFByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2NvbnRleHQtcGFkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2NvcHktcGFzdGUvQnBtbkNvcHlQYXN0ZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9jb3B5LXBhc3RlL01vZGRsZUNvcHkuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvY29weS1wYXN0ZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kaS1vcmRlcmluZy9CcG1uRGlPcmRlcmluZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kaS1vcmRlcmluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kaXN0cmlidXRlLWVsZW1lbnRzL0JwbW5EaXN0cmlidXRlRWxlbWVudHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZGlzdHJpYnV0ZS1lbGVtZW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucy9CcG1uRWRpdG9yQWN0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL0JwbW5HcmlkU25hcHBpbmcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9iZWhhdmlvci9BdXRvUGxhY2VCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2JlaGF2aW9yL0NyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9iZWhhdmlvci9MYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9iZWhhdmlvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2ludGVyYWN0aW9uLWV2ZW50cy9CcG1uSW50ZXJhY3Rpb25FdmVudHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvaW50ZXJhY3Rpb24tZXZlbnRzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2tleWJvYXJkL0JwbW5LZXlib2FyZEJpbmRpbmdzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2tleWJvYXJkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2xhYmVsLWVkaXRpbmcvTGFiZWxFZGl0aW5nUHJldmlldy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1lZGl0aW5nL0xhYmVsRWRpdGluZ1Byb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2xhYmVsLWVkaXRpbmcvTGFiZWxVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2xhYmVsLWVkaXRpbmcvY21kL1VwZGF0ZUxhYmVsSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1lZGl0aW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL0JwbW5GYWN0b3J5LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL0JwbW5MYXlvdXRlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9CcG1uVXBkYXRlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9FbGVtZW50RmFjdG9yeS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9Nb2RlbGluZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9BZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9BcHBlbmRCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Bc3NvY2lhdGlvbkJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0F0dGFjaEV2ZW50QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvQm91bmRhcnlFdmVudEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0NyZWF0ZUJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0NyZWF0ZURhdGFPYmplY3RCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9DcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0RhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvRGF0YVN0b3JlQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvRGVsZXRlTGFuZUJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0RldGFjaEV2ZW50QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvRHJvcE9uRmxvd0JlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0V2ZW50QmFzZWRHYXRld2F5QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvRml4SG92ZXJCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Hcm91cEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0ltcG9ydERvY2tpbmdGaXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvSXNIb3Jpem9udGFsRml4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0xhYmVsQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvTW9kZWxpbmdGZWVkYmFjay5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9SZW1vdmVFbGVtZW50QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvUmVtb3ZlUGFydGljaXBhbnRCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9SZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1JlcGxhY2VFbGVtZW50QmVoYXZpb3VyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1Jlc2l6ZUJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1Jlc2l6ZUxhbmVCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Sb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1NwYWNlVG9vbEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1N1YlByb2Nlc3NTdGFydEV2ZW50QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvVG9nZ2xlRWxlbWVudENvbGxhcHNlQmVoYXZpb3VyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1VuY2xhaW1JZEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1Vuc2V0RGVmYXVsdEZsb3dCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9VcGRhdGVGbG93Tm9kZVJlZnNCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci91dGlsL0NhdGVnb3J5VXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci91dGlsL0dlb21ldHJpY1V0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvdXRpbC9MYWJlbExheW91dFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvdXRpbC9MaW5lQXR0YWNobWVudFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvdXRpbC9MaW5lSW50ZXJzZWN0LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL3V0aWwvUmVzaXplVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvQWRkTGFuZUhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL0lkQ2xhaW1IYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9SZXNpemVMYW5lSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvU2V0Q29sb3JIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9TcGxpdExhbmVIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9VcGRhdGVDYW52YXNSb290SGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvVXBkYXRlRmxvd05vZGVSZWZzSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvVXBkYXRlUHJvcGVydGllc0hhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL1VwZGF0ZVNlbWFudGljUGFyZW50SGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy91dGlsL0xhbmVVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL29yZGVyaW5nL0JwbW5PcmRlcmluZ1Byb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL29yZGVyaW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3BhbGV0dGUvUGFsZXR0ZVByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3BhbGV0dGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvcG9wdXAtbWVudS9SZXBsYWNlTWVudVByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3BvcHVwLW1lbnUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvcG9wdXAtbWVudS91dGlsL1R5cGVVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3JlcGxhY2UtcHJldmlldy9CcG1uUmVwbGFjZVByZXZpZXcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvcmVwbGFjZS1wcmV2aWV3L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3JlcGxhY2UvQnBtblJlcGxhY2UuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvcmVwbGFjZS9SZXBsYWNlT3B0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9yZXBsYWNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3J1bGVzL0JwbW5SdWxlcy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ydWxlcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9zZWFyY2gvQnBtblNlYXJjaFByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3NlYXJjaC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9CcG1uQ29ubmVjdFNuYXBwaW5nLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3NuYXBwaW5nL0JwbW5DcmVhdGVNb3ZlU25hcHBpbmcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvc25hcHBpbmcvQnBtblNuYXBwaW5nVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9pbXBvcnQvQnBtbkltcG9ydGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ltcG9ydC9CcG1uVHJlZVdhbGtlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9pbXBvcnQvSW1wb3J0ZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvaW1wb3J0L1V0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvaW1wb3J0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL3V0aWwvQ29tcGF0aWJpbGl0eVV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9EaVV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9MYWJlbFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9Qb3dlcmVkQnlVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvRGlhZ3JhbS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRTdGFjay5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9jb21tYW5kL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2NvcmUvQ2FudmFzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2NvcmUvRWxlbWVudEZhY3RvcnkuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvY29yZS9FbGVtZW50UmVnaXN0cnkuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9jb3JlL0dyYXBoaWNzRmFjdG9yeS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9jb3JlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2RyYXcvQmFzZVJlbmRlcmVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2RyYXcvRGVmYXVsdFJlbmRlcmVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2RyYXcvU3R5bGVzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2RyYXcvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYWxpZ24tZWxlbWVudHMvQWxpZ25FbGVtZW50cy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hbGlnbi1lbGVtZW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdHRhY2gtc3VwcG9ydC9BdHRhY2hTdXBwb3J0LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F0dGFjaC1zdXBwb3J0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcGxhY2UvQXV0b1BsYWNlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcGxhY2UvQXV0b1BsYWNlU2VsZWN0aW9uQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYXV0by1wbGFjZS9BdXRvUGxhY2VVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcGxhY2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYXV0by1yZXNpemUvQXV0b1Jlc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXJlc2l6ZS9BdXRvUmVzaXplUHJvdmlkZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYXV0by1zY3JvbGwvQXV0b1Njcm9sbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXNjcm9sbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9iZW5kcG9pbnRzL0JlbmRwb2ludE1vdmUuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYmVuZHBvaW50cy9CZW5kcG9pbnRNb3ZlUHJldmlldy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9iZW5kcG9pbnRzL0JlbmRwb2ludFNuYXBwaW5nLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2JlbmRwb2ludHMvQmVuZHBvaW50VXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9iZW5kcG9pbnRzL0JlbmRwb2ludHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYmVuZHBvaW50cy9Db25uZWN0aW9uU2VnbWVudE1vdmUuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYmVuZHBvaW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jaGFuZ2Utc3VwcG9ydC9DaGFuZ2VTdXBwb3J0LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NoYW5nZS1zdXBwb3J0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NsaXBib2FyZC9DbGlwYm9hcmQuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY2xpcGJvYXJkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2Nvbm5lY3QvQ29ubmVjdC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb25uZWN0L0Nvbm5lY3RQcmV2aWV3LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2Nvbm5lY3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY29ubmVjdGlvbi1wcmV2aWV3L0Nvbm5lY3Rpb25QcmV2aWV3LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2Nvbm5lY3Rpb24tcHJldmlldy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb250ZXh0LXBhZC9Db250ZXh0UGFkLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NvbnRleHQtcGFkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NvcHktcGFzdGUvQ29weVBhc3RlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NvcHktcGFzdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY3JlYXRlL0NyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jcmVhdGUvQ3JlYXRlUHJldmlldy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jcmVhdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZGlzdHJpYnV0ZS1lbGVtZW50cy9EaXN0cmlidXRlRWxlbWVudHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZGlzdHJpYnV0ZS1lbGVtZW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9kcmFnZ2luZy9EcmFnZ2luZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9kcmFnZ2luZy9Ib3ZlckZpeC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9kcmFnZ2luZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucy9FZGl0b3JBY3Rpb25zLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2VkaXRvci1hY3Rpb25zL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2dsb2JhbC1jb25uZWN0L0dsb2JhbENvbm5lY3QuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ2xvYmFsLWNvbm5lY3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9HcmlkU25hcHBpbmcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9HcmlkVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2JlaGF2aW9yL1Jlc2l6ZUJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2dyaWQtc25hcHBpbmcvYmVoYXZpb3IvU3BhY2VUb29sQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9iZWhhdmlvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2hhbmQtdG9vbC9IYW5kVG9vbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9oYW5kLXRvb2wvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvaW50ZXJhY3Rpb24tZXZlbnRzL0ludGVyYWN0aW9uRXZlbnRzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2ludGVyYWN0aW9uLWV2ZW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9rZXlib2FyZC1tb3ZlLXNlbGVjdGlvbi9LZXlib2FyZE1vdmVTZWxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQtbW92ZS1zZWxlY3Rpb24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQvS2V5Ym9hcmQuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQvS2V5Ym9hcmRCaW5kaW5ncy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9rZXlib2FyZC9LZXlib2FyZFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbGFiZWwtc3VwcG9ydC9MYWJlbFN1cHBvcnQuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbGFiZWwtc3VwcG9ydC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9sYXNzby10b29sL0xhc3NvVG9vbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9sYXNzby10b29sL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL01vZGVsaW5nLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9BbGlnbkVsZW1lbnRzSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvQXBwZW5kU2hhcGVIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9DcmVhdGVDb25uZWN0aW9uSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvQ3JlYXRlRWxlbWVudHNIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9DcmVhdGVMYWJlbEhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL0NyZWF0ZVNoYXBlSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvRGVsZXRlQ29ubmVjdGlvbkhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL0RlbGV0ZUVsZW1lbnRzSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvRGVsZXRlU2hhcGVIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9EaXN0cmlidXRlRWxlbWVudHNIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9MYXlvdXRDb25uZWN0aW9uSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvTW92ZUNvbm5lY3Rpb25IYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9Nb3ZlRWxlbWVudHNIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9Nb3ZlU2hhcGVIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9SZWNvbm5lY3RDb25uZWN0aW9uSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvUmVwbGFjZVNoYXBlSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvUmVzaXplU2hhcGVIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9TcGFjZVRvb2xIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9Ub2dnbGVTaGFwZUNvbGxhcHNlSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvVXBkYXRlQXR0YWNobWVudEhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL1VwZGF0ZVdheXBvaW50c0hhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL2hlbHBlci9BbmNob3JzSGVscGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9oZWxwZXIvTW92ZUNsb3N1cmUuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL2hlbHBlci9Nb3ZlSGVscGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vdXNlL01vdXNlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vdXNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vdmUvTW92ZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb3ZlL01vdmVQcmV2aWV3LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vdmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvb3JkZXJpbmcvT3JkZXJpbmdQcm92aWRlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9vdXRsaW5lL091dGxpbmUuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvb3V0bGluZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9vdmVybGF5cy9PdmVybGF5cy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9vdmVybGF5cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wYWxldHRlL1BhbGV0dGUuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcGFsZXR0ZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wb3B1cC1tZW51L1BvcHVwTWVudS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wb3B1cC1tZW51L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3ByZXZpZXctc3VwcG9ydC9QcmV2aWV3U3VwcG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wcmV2aWV3LXN1cHBvcnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcmVwbGFjZS9SZXBsYWNlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3JlcGxhY2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcmVzaXplL1Jlc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvUmVzaXplSGFuZGxlcy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvUmVzaXplUHJldmlldy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvUmVzaXplVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcnVsZXMvUnVsZVByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3J1bGVzL1J1bGVzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3J1bGVzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NlYXJjaC1wYWQvU2VhcmNoUGFkLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NlYXJjaC1wYWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uL1NlbGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zZWxlY3Rpb24vU2VsZWN0aW9uQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uL1NlbGVjdGlvblZpc3VhbHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NuYXBwaW5nL0NyZWF0ZU1vdmVTbmFwcGluZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9SZXNpemVTbmFwcGluZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9TbmFwQ29udGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9TbmFwVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9TbmFwcGluZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zcGFjZS10b29sL1NwYWNlVG9vbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zcGFjZS10b29sL1NwYWNlVG9vbFByZXZpZXcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc3BhY2UtdG9vbC9TcGFjZVV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc3BhY2UtdG9vbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy90b29sLW1hbmFnZXIvVG9vbE1hbmFnZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvdG9vbC1tYW5hZ2VyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3Rvb2x0aXBzL1Rvb2x0aXBzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3Rvb2x0aXBzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3RvdWNoL1RvdWNoRml4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3RvdWNoL1RvdWNoSW50ZXJhY3Rpb25FdmVudHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvdG91Y2gvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUvdHJhbnNsYXRlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2xheW91dC9CYXNlTGF5b3V0ZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0Nyb3BwaW5nQ29ubmVjdGlvbkRvY2tpbmcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvbGF5b3V0L01hbmhhdHRhbkxheW91dC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9tb2RlbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL2tleWJvYXJkLW1vdmUvS2V5Ym9hcmRNb3ZlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL25hdmlnYXRpb24va2V5Ym9hcmQtbW92ZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL21vdmVjYW52YXMvTW92ZUNhbnZhcy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL21vdmVjYW52YXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi90b3VjaC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL3pvb21zY3JvbGwvWm9vbVNjcm9sbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL3pvb21zY3JvbGwvWm9vbVV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi96b29tc2Nyb2xsL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvQXR0YWNoVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL0NsaWNrVHJhcC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvQ3Vyc29yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvRWxlbWVudHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvdXRpbC9Fc2NhcGVVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvRXZlbnQuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvdXRpbC9HZW9tZXRyeS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL0dyYXBoaWNzVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL0lkR2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvTGluZUludGVyc2VjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL01hdGguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvdXRpbC9Nb3VzZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL1BsYXRmb3JtLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvUG9zaXRpb25VdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvUmVtb3ZhbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL1JlbmRlclV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvdXRpbC9TdmdUcmFuc2Zvcm1VdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvVGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLW1vZGRsZS9kaXN0L2luZGV4LmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9jc3MuZXNjYXBlL2Nzcy5lc2NhcGUuanMiLCJub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy1kaXJlY3QtZWRpdGluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kaWFncmFtLWpzLWRpcmVjdC1lZGl0aW5nL2xpYi9EaXJlY3RFZGl0aW5nLmpzIiwibm9kZV9tb2R1bGVzL2RpYWdyYW0tanMtZGlyZWN0LWVkaXRpbmcvbGliL1RleHRCb3guanMiLCJub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvaW50ZXJhY3Rpb24tZXZlbnRzL0ludGVyYWN0aW9uRXZlbnRzLmpzIiwibm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2kxOG4vdHJhbnNsYXRlL3RyYW5zbGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zLmpzIiwibm9kZV9tb2R1bGVzL2RpZGkvZGlzdC9pbmRleC5lc20uanMiLCJub2RlX21vZHVsZXMvaGFtbWVyanMvaGFtbWVyLmpzIiwibm9kZV9tb2R1bGVzL2lkcy9ub2RlX21vZHVsZXMvaGF0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2lkcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2pxdWVyeS9kaXN0L2pxdWVyeS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX0xhenlXcmFwcGVyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fTG9kYXNoV3JhcHBlci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcENhY2hlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fUHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldENhY2hlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19VaW50OEFycmF5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2FwcGx5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlBZ2dyZWdhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlFYWNoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlGaWx0ZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlJbmNsdWRlc1dpdGguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlNYXAuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hc3NpZ25WYWx1ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBZ2dyZWdhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnblZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VEaWZmZXJlbmNlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUVhY2guanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGbGF0dGVuLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZvci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3JPd24uanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldEFsbEtleXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUhhc0luLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUluZGV4T2YuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hdGNoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmFOLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJdGVyYXRlZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUxvZGFzaC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXAuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWF0Y2hlcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXRjaGVzUHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHlEZWVwLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVJlc3QuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2V0RGF0YS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXRUb1N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUb1N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmlxLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVZhbHVlcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VYb3IuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jYWNoZUhhcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RGdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RQYXRoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY29tcG9zZUFyZ3MuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jb21wb3NlQXJnc1JpZ2h0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jb3VudEhvbGRlcnMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVBZ2dyZWdhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQXNzaWduZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCYXNlRWFjaC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUJhc2VGb3IuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCaW5kLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQ3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUN1cnJ5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlRmluZC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUh5YnJpZC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZVBhcnRpYWwuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVSZWN1cnJ5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlU2V0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlV3JhcC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEJ5VGFnLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxPYmplY3RzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZnJlZUdsb2JhbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19nZXREYXRhLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0RnVuY05hbWUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19nZXRIb2xkZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19nZXRNYXBEYXRhLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWF0Y2hEYXRhLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0U3ltYm9scy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFRhZy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0V3JhcERldGFpbHMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19oYXNQYXRoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaENsZWFyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaERlbGV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoSGFzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaFNldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2luc2VydFdyYXBEZXRhaWxzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faXNGbGF0dGVuYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSW5kZXguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19pc0l0ZXJhdGVlQ2FsbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faXNMYXppYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzTWFza2VkLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19pc1N0cmljdENvbXBhcmFibGUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVDbGVhci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUdldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUhhcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlR2V0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVIYXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcFRvQXJyYXkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX21lbW9pemVDYXBwZWQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tZXJnZURhdGEuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tZXRhTWFwLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlS2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyQXJnLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlclJlc3QuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19yZWFsTmFtZXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19yZW9yZGVyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fcmVwbGFjZUhvbGRlcnMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldERhdGEuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb0FycmF5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9TdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zZXRXcmFwVG9TdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zaG9ydE91dC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrR2V0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmljdEluZGV4T2YuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb1BhdGguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fdXBkYXRlV3JhcERldGFpbHMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL193cmFwcGVyQ2xvbmUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2Fzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvYmluZC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvY29uc3RhbnQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2RlYm91bmNlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9lcS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvZmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9maW5kLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9maW5kSW5kZXguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2ZsYXR0ZW5EZWVwLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9mb3JFYWNoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9nZXQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2hhc0luLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzRW1wdHkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlCeS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gva2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvbWFwLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9tZW1vaXplLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9ub29wLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9ub3cuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL3Byb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViQXJyYXkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJGYWxzZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvdG9GaW5pdGUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL3RvSW50ZWdlci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvdG9OdW1iZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL3RvU3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC90cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL3ZhbHVlcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvd3JhcHBlckxvZGFzaC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gveG9yLmpzIiwibm9kZV9tb2R1bGVzL21pbi1kYXNoL2Rpc3QvaW5kZXguZXNtLmpzIiwibm9kZV9tb2R1bGVzL21pbi1kb20vZGlzdC9pbmRleC5lc20uanMiLCJub2RlX21vZHVsZXMvbWl0dC9kaXN0L21pdHQuZXMuanMiLCJub2RlX21vZHVsZXMvbW9kZGxlLXhtbC9kaXN0L2luZGV4LmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9tb2RkbGUvZGlzdC9pbmRleC5lc20uanMiLCJub2RlX21vZHVsZXMvb2JqZWN0LXJlZnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvb2JqZWN0LXJlZnMvbGliL2NvbGxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvb2JqZWN0LXJlZnMvbGliL3JlZnMuanMiLCJub2RlX21vZHVsZXMvcGF0aC1pbnRlcnNlY3Rpb24vaW50ZXJzZWN0LmpzIiwibm9kZV9tb2R1bGVzL3NheGVuL2Rpc3QvaW5kZXguZXNtLmpzIiwibm9kZV9tb2R1bGVzL3Njcm9sbC10YWJzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NlbGVjdGlvbi11cGRhdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvdGlueS1zdmcvZGlzdC9pbmRleC5lc20uanMiLCJyZXNvdXJjZXMvYWN0aXZpdGkuanNvbiIsInJlc291cmNlcy9jdXN0b21Db250cm9scy9DdXN0b21Db250ZXh0UGFkLmpzIiwicmVzb3VyY2VzL2N1c3RvbUNvbnRyb2xzL0N1c3RvbVBhbGV0dGUuanMiLCJyZXNvdXJjZXMvY3VzdG9tQ29udHJvbHMvaW5kZXguanMiLCJyZXNvdXJjZXMvY3VzdG9tVHJhbnNsYXRlL2N1c3RvbVRyYW5zbGF0ZS5qcyIsInJlc291cmNlcy9jdXN0b21UcmFuc2xhdGUvdHJhbnNsYXRpb25zR2VybWFuLmpzIiwicmVzb3VyY2VzL25ld0RpYWdyYW0uYnBtbiIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL1Byb3BlcnRpZXNBY3RpdmF0b3IuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9mYWN0b3J5L0NoZWNrYm94RW50cnlGYWN0b3J5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvZmFjdG9yeS9Db21ib0VudHJ5RmFjdG9yeS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL2ZhY3RvcnkvRW50cnlGYWN0b3J5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvZmFjdG9yeS9FbnRyeUZpZWxkRGVzY3JpcHRpb24uanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9mYWN0b3J5L0xhYmVsRmFjdG9yeS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL2ZhY3RvcnkvTGlua0VudHJ5RmFjdG9yeS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL2ZhY3RvcnkvU2VsZWN0RW50cnlGYWN0b3J5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvZmFjdG9yeS9UYWJsZUVudHJ5RmFjdG9yeS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL2ZhY3RvcnkvVGV4dEJveEVudHJ5RmFjdG9yeS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL2ZhY3RvcnkvVGV4dElucHV0RW50cnlGYWN0b3J5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvZmFjdG9yeS9WYWxpZGF0aW9uQXdhcmVUZXh0SW5wdXQuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9oZWxwZXIvQXN5bmNDYXBhYmxlSGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvaGVscGVyL0NhdGVnb3J5SGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvaGVscGVyL0NtZEhlbHBlci5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL2hlbHBlci9FdmVudERlZmluaXRpb25IZWxwZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9oZWxwZXIvRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9oZWxwZXIvRm9ybUhlbHBlci5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL2hlbHBlci9JbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9oZWxwZXIvSW5wdXRPdXRwdXRIZWxwZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9oZWxwZXIvUGFydGljaXBhbnRIZWxwZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9BY3Rpdml0aVByb3BlcnRpZXNQcm92aWRlci5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL2VsZW1lbnQtdGVtcGxhdGVzL0NyZWF0ZUhlbHBlci5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL2VsZW1lbnQtdGVtcGxhdGVzL0N1c3RvbUVsZW1lbnRzUHJvcGVydGllc0FjdGl2YXRvci5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL2VsZW1lbnQtdGVtcGxhdGVzL0VsZW1lbnRUZW1wbGF0ZXMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9lbGVtZW50LXRlbXBsYXRlcy9FbGVtZW50VGVtcGxhdGVzTG9hZGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvZWxlbWVudC10ZW1wbGF0ZXMvSGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvZWxlbWVudC10ZW1wbGF0ZXMvVmFsaWRhdG9yLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvZWxlbWVudC10ZW1wbGF0ZXMvY21kL0NoYW5nZUVsZW1lbnRUZW1wbGF0ZUhhbmRsZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9lbGVtZW50LXRlbXBsYXRlcy9jbWQvaW5kZXguanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9lbGVtZW50LXRlbXBsYXRlcy9pbmRleC5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL2VsZW1lbnQtdGVtcGxhdGVzL3BhcnRzL0Nob29zZXJQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL2VsZW1lbnQtdGVtcGxhdGVzL3BhcnRzL0N1c3RvbVByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvaW5kZXguanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9Bc3luY2hyb25vdXNDb250aW51YXRpb25Qcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0NhbGxBY3Rpdml0eVByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvQ2FuZGlkYXRlU3RhcnRlclByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvQ29uZGl0aW9uYWxQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0Nvbm5lY3RvckRldGFpbFByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvQ29ubmVjdG9ySW5wdXRPdXRwdXRQYXJhbWV0ZXJQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0Nvbm5lY3RvcklucHV0T3V0cHV0UHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9FcnJvckV2ZW50UHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9FeHRlcm5hbFRhc2tDb25maWd1cmF0aW9uUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9GaWVsZEluamVjdGlvblByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvRm9ybVByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvSGlzdG9yeVRpbWVUb0xpdmVQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0lucHV0T3V0cHV0UGFyYW1ldGVyUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9JbnB1dE91dHB1dFByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvSm9iQ29uZmlndXJhdGlvblByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvTGlzdGVuZXJEZXRhaWxQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0xpc3RlbmVyRmllbGRJbmplY3Rpb25Qcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0xpc3RlbmVyUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9NdWx0aUluc3RhbmNlTG9vcFByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvUHJvcGVydGllc1Byb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvU2NyaXB0VGFza1Byb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvU2VydmljZVRhc2tEZWxlZ2F0ZVByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvU3RhcnRFdmVudEluaXRpYXRvci5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL1Rhc2tsaXN0UHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9Vc2VyVGFza1Byb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvVmFyaWFibGVNYXBwaW5nUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9WZXJzaW9uVGFnUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9Bc3luY0NvbnRpbnVhdGlvbi5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0NhbGxhYmxlLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vQ2FuZGlkYXRlU3RhcnRlci5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0RlbGVnYXRlLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vRXJyb3JFdmVudERlZmluaXRpb24uanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9FeHRlbnNpb25FbGVtZW50cy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0V4dGVybmFsLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vRXh0ZXJuYWxUYXNrUHJpb3JpdHkuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9GaWVsZEluamVjdGlvbi5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0hpc3RvcnlUaW1lVG9MaXZlLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vSW1wbGVtZW50YXRpb25UeXBlLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vSW5wdXRPdXRwdXQuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9JbnB1dE91dHB1dFBhcmFtZXRlci5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0pvYlByaW9yaXR5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vSm9iUmV0cnlUaW1lQ3ljbGUuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9MaXN0ZW5lci5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL011bHRpSW5zdGFuY2VMb29wQ2hhcmFjdGVyaXN0aWNzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vUHJvcGVydGllcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL1Jlc3VsdFZhcmlhYmxlLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vU2NyaXB0LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vVGFza2xpc3QuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL0RvY3VtZW50YXRpb25Qcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvRXZlbnRQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvRXhlY3V0YWJsZVByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYnBtbi9wYXJ0cy9JZFByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYnBtbi9wYXJ0cy9MaW5rUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL05hbWVQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvUHJvY2Vzc1Byb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYnBtbi9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9Db21wZW5zYXRlRXZlbnREZWZpbml0aW9uLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYnBtbi9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9Db25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbi5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vRWxlbWVudFJlZmVyZW5jZVByb3BlcnR5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYnBtbi9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9FcnJvckV2ZW50RGVmaW5pdGlvbi5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vRXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbi5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vRXZlbnREZWZpbml0aW9uUmVmZXJlbmNlLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYnBtbi9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9NZXNzYWdlRXZlbnREZWZpbml0aW9uLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYnBtbi9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9OYW1lLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYnBtbi9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9TaWduYWxFdmVudERlZmluaXRpb24uanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL2ltcGxlbWVudGF0aW9uL1RpbWVyRXZlbnREZWZpbml0aW9uLmpzIiwicmVzb3VyY2VzL3Rvb2xzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7QUNDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQVBBO0FBUUEsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVAsQ0FBZ0IsUUFBaEIsR0FBMkIsSUFBM0IsR0FBa0MsTUFBTSxDQUFDLFFBQVAsQ0FBZ0IsSUFBbEU7QUFDQSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUCxDQUFnQixJQUFoQixDQUFxQixLQUFyQixDQUEyQixRQUEzQixFQUFxQyxDQUFyQyxDQUFiO0FBQ0EsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUwsQ0FBVyxNQUFNLENBQUMsUUFBUCxDQUFnQixJQUEzQixFQUFpQyxDQUFqQyxDQUFaO0FBQ0EsTUFBTSxTQUFTLEdBQUcsT0FBTyxHQUFHLEdBQTVCLEMsQ0FFQTs7QUFDQSxJQUFJLHFCQUFxQixHQUFHO0FBQ3hCLEVBQUEsU0FBUyxFQUFFLENBQUMsT0FBRCxFQUFVLHdCQUFWO0FBRGEsQ0FBNUI7QUFHQTtBQUNBLElBQUksU0FBUyxHQUFHLHFCQUFFLGVBQUYsQ0FBaEI7QUFDQSxJQUFJLE1BQU0sR0FBRyxxQkFBRSxZQUFGLENBQWI7QUFDQSxJQUFJLFdBQVcsR0FBRyxJQUFJLGdCQUFKLENBQWdCO0FBQzlCLEVBQUEsU0FBUyxFQUFFLE1BRG1CO0FBRTlCLEVBQUEsZUFBZSxFQUFFO0FBQ2IsSUFBQSxNQUFNLEVBQUU7QUFESyxHQUZhO0FBSzlCLEVBQUEsaUJBQWlCLEVBQUUsQ0FDZiw4QkFEZSxFQUVmLGlCQUZlLEVBR2YsdUJBSGUsRUFJZixxQkFKZSxDQUxXO0FBVzlCLEVBQUEsZ0JBQWdCLEVBQUU7QUFDZCxJQUFBLFFBQVEsRUFBQztBQURLO0FBWFksQ0FBaEIsQ0FBbEI7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REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcnZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeG5WQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25KQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUMvakNlLE1BQU0sZ0JBQU4sQ0FBdUI7QUFDcEMsRUFBQSxXQUFXLENBQUMsTUFBRCxFQUFTLFVBQVQsRUFBcUIsTUFBckIsRUFBNkIsY0FBN0IsRUFBNkMsUUFBN0MsRUFBdUQsU0FBdkQsRUFBa0U7QUFDM0UsU0FBSyxNQUFMLEdBQWMsTUFBZDtBQUNBLFNBQUssY0FBTCxHQUFzQixjQUF0QjtBQUNBLFNBQUssU0FBTCxHQUFpQixTQUFqQixDQUgyRSxDQUkzRTs7QUFDQSxRQUFJLE1BQU0sQ0FBQyxTQUFQLEtBQXFCLEtBQXpCLEVBQWdDO0FBQzlCLFdBQUssU0FBTCxHQUFpQixRQUFRLENBQUMsR0FBVCxDQUFhLFdBQWIsRUFBMEIsS0FBMUIsQ0FBakI7QUFDRCxLQVAwRSxDQVEzRTs7O0FBQ0EsSUFBQSxVQUFVLENBQUMsZ0JBQVgsQ0FBNEIsSUFBNUI7QUFDRDs7QUFDRCxFQUFBLG9CQUFvQixDQUFDLE9BQUQsRUFBVTtBQUM1QixVQUFNO0FBQ0osTUFBQSxTQURJO0FBRUosTUFBQSxNQUZJO0FBR0osTUFBQSxjQUhJO0FBSUosTUFBQTtBQUpJLFFBS0YsSUFMSjs7QUFPQSxhQUFTLGNBQVQsQ0FBd0IsS0FBeEIsRUFBK0IsT0FBL0IsRUFBd0M7QUFDdEMsVUFBSSxTQUFKLEVBQWU7QUFDYixjQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsV0FBZixDQUEyQjtBQUFFLFVBQUEsSUFBSSxFQUFFO0FBQVIsU0FBM0IsQ0FBZDtBQUNBLFFBQUEsU0FBUyxDQUFDLE1BQVYsQ0FBaUIsT0FBakIsRUFBMEIsS0FBMUI7QUFDRCxPQUhELE1BR087QUFDTCxRQUFBLG1CQUFtQixDQUFDLEtBQUQsRUFBUSxPQUFSLENBQW5CO0FBQ0Q7QUFDRjs7QUFFRCxhQUFTLG1CQUFULENBQTZCLEtBQTdCLEVBQW9DO0FBQzlCLFlBQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxXQUFmLENBQTJCO0FBQUUsUUFBQSxJQUFJLEVBQUU7QUFBUixPQUEzQixDQUFkO0FBQ0EsTUFBQSxNQUFNLENBQUMsS0FBUCxDQUFhLEtBQWIsRUFBb0IsS0FBcEIsRUFBMkIsT0FBM0I7QUFDTDs7QUFDRCxhQUFTLHVCQUFULENBQWlDLEtBQWpDLEVBQXdDO0FBQ3RDLFlBQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxXQUFmLENBQTJCO0FBQUUsUUFBQSxJQUFJLEVBQUU7QUFBUixPQUEzQixDQUFkO0FBQ0EsTUFBQSxNQUFNLENBQUMsS0FBUCxDQUFhLEtBQWIsRUFBb0IsS0FBcEIsRUFBMkIsT0FBM0I7QUFDRDs7QUFFRCxhQUFTLGtCQUFULENBQTRCLEtBQTVCLEVBQW1DLE9BQW5DLEVBQTRDO0FBQ3hDLFVBQUksU0FBSixFQUFlO0FBQ1gsY0FBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLFdBQWYsQ0FBMkI7QUFBRSxVQUFBLElBQUksRUFBRTtBQUFSLFNBQTNCLENBQWQ7QUFDQSxRQUFBLFNBQVMsQ0FBQyxNQUFWLENBQWlCLE9BQWpCLEVBQTBCLEtBQTFCO0FBQ0gsT0FIRCxNQUdPO0FBQ0gsUUFBQSx1QkFBdUIsQ0FBQyxLQUFELEVBQVEsT0FBUixDQUF2QjtBQUNIO0FBQ0o7O0FBQ0QsV0FBTztBQUNMLDBCQUFvQjtBQUNsQixRQUFBLEtBQUssRUFBRSxPQURXO0FBRWxCLFFBQUEsU0FBUyxFQUFFLHFCQUZPO0FBR2xCLFFBQUEsS0FBSyxFQUFFLFNBQVMsQ0FBQyxvQkFBRCxDQUhFO0FBSWxCLFFBQUEsTUFBTSxFQUFFO0FBQ04sVUFBQSxLQUFLLEVBQUUsY0FERDtBQUVOLFVBQUEsU0FBUyxFQUFFO0FBRkw7QUFKVSxPQURmO0FBVUwsOEJBQXVCO0FBQ25CLFFBQUEsS0FBSyxFQUFFLE9BRFk7QUFFbkIsUUFBQSxTQUFTLEVBQUUseUJBRlE7QUFHbkIsUUFBQSxLQUFLLEVBQUUsU0FBUyxDQUFDLHFCQUFELENBSEc7QUFJbkIsUUFBQSxNQUFNLEVBQUU7QUFDSixVQUFBLEtBQUssRUFBRSxrQkFESDtBQUVKLFVBQUEsU0FBUyxFQUFFO0FBRlA7QUFKVztBQVZsQixLQUFQO0FBb0JEOztBQWxFbUM7OztBQW9FdEMsZ0JBQWdCLENBQUMsT0FBakIsR0FBMkIsQ0FDekIsUUFEeUIsRUFFekIsWUFGeUIsRUFHekIsUUFIeUIsRUFJekIsZ0JBSnlCLEVBS3pCLFVBTHlCLEVBTXpCLFdBTnlCLENBQTNCOzs7Ozs7Ozs7O0FDcEVlLE1BQU0sYUFBTixDQUFvQjtBQUNqQyxFQUFBLFdBQVcsQ0FBQyxNQUFELEVBQVMsY0FBVCxFQUF5QixPQUF6QixFQUFrQyxTQUFsQyxFQUE2QztBQUN0RCxTQUFLLE1BQUwsR0FBYyxNQUFkO0FBQ0EsU0FBSyxjQUFMLEdBQXNCLGNBQXRCO0FBQ0EsU0FBSyxTQUFMLEdBQWlCLFNBQWpCO0FBQ0EsSUFBQSxPQUFPLENBQUMsZ0JBQVIsQ0FBeUIsSUFBekI7QUFDRDs7QUFFRCxFQUFBLGlCQUFpQixDQUFDLE9BQUQsRUFBVTtBQUN6QixVQUFNO0FBQ0osTUFBQSxNQURJO0FBRUosTUFBQSxjQUZJO0FBR0osTUFBQTtBQUhJLFFBSUYsSUFKSjs7QUFNQSxhQUFTLGlCQUFULENBQTJCLEtBQTNCLEVBQWtDO0FBQ2hDLFlBQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxXQUFmLENBQTJCO0FBQUUsUUFBQSxJQUFJLEVBQUU7QUFBUixPQUEzQixDQUFkO0FBQ0EsTUFBQSxNQUFNLENBQUMsS0FBUCxDQUFhLEtBQWIsRUFBb0IsS0FBcEI7QUFDRDs7QUFDQyxhQUFTLGtCQUFULENBQTRCLEtBQTVCLEVBQW1DO0FBQy9CLFlBQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxXQUFmLENBQTJCO0FBQUUsUUFBQSxJQUFJLEVBQUU7QUFBUixPQUEzQixDQUFkO0FBQ0EsTUFBQSxNQUFNLENBQUMsS0FBUCxDQUFhLEtBQWIsRUFBb0IsS0FBcEI7QUFDSDs7QUFHSCxXQUFPO0FBQ0wsMEJBQW9CO0FBQ2xCLFFBQUEsS0FBSyxFQUFFLFVBRFc7QUFFbEIsUUFBQSxTQUFTLEVBQUUscUJBRk87QUFHbEIsUUFBQSxLQUFLLEVBQUUsU0FBUyxDQUFDLGlCQUFELENBSEU7QUFJbEIsUUFBQSxNQUFNLEVBQUU7QUFDTixVQUFBLFNBQVMsRUFBRSxpQkFETDtBQUVOLFVBQUEsS0FBSyxFQUFFO0FBRkQ7QUFKVSxPQURmO0FBVUgsOEJBQXdCO0FBQ3BCLFFBQUEsS0FBSyxFQUFFLFVBRGE7QUFFcEIsUUFBQSxTQUFTLEVBQUUseUJBRlM7QUFHcEIsUUFBQSxLQUFLLEVBQUUsU0FBUyxDQUFDLHFCQUFELENBSEk7QUFJcEIsUUFBQSxNQUFNLEVBQUU7QUFDSixVQUFBLFNBQVMsRUFBRSxrQkFEUDtBQUVKLFVBQUEsS0FBSyxFQUFFO0FBRkg7QUFKWTtBQVZyQixLQUFQO0FBb0JEOztBQTdDZ0M7OztBQWdEbkMsYUFBYSxDQUFDLE9BQWQsR0FBd0IsQ0FDdEIsUUFEc0IsRUFFdEIsZ0JBRnNCLEVBR3RCLFNBSHNCLEVBSXRCLFdBSnNCLENBQXhCOzs7Ozs7Ozs7O0FDaERBOztBQUNBOzs7O2VBRWU7QUFDYixFQUFBLFFBQVEsRUFBRSxDQUFFLGtCQUFGLEVBQXNCLGVBQXRCLENBREc7QUFFYixFQUFBLGdCQUFnQixFQUFFLENBQUUsTUFBRixFQUFVLHlCQUFWLENBRkw7QUFHYixFQUFBLGFBQWEsRUFBRSxDQUFFLE1BQUYsRUFBVSxzQkFBVjtBQUhGLEM7Ozs7Ozs7Ozs7O0FDSGY7Ozs7QUFDZSxTQUFTLGVBQVQsQ0FBeUIsUUFBekIsRUFBbUMsWUFBbkMsRUFBaUQ7QUFDOUQsRUFBQSxZQUFZLEdBQUcsWUFBWSxJQUFJLEVBQS9CO0FBQ0EsRUFBQSxRQUFRLEdBQUcsNEJBQWEsUUFBYixLQUEwQixRQUFyQztBQUNBLFNBQU8sUUFBUSxDQUFDLE9BQVQsQ0FBaUIsWUFBakIsRUFBK0IsVUFBUyxDQUFULEVBQVksR0FBWixFQUFpQjtBQUN2RCxRQUFJLEdBQUcsR0FBRyxZQUFZLENBQUMsR0FBRCxDQUF0Qjs7QUFDQyxRQUFHLDRCQUFhLFlBQVksQ0FBQyxHQUFELENBQXpCLEtBQW1DLElBQW5DLElBQTJDLDRCQUFjLFlBQVksQ0FBQyxHQUFELENBQTFCLEtBQW9DLFdBQWxGLEVBQThGO0FBQzdGLE1BQUEsR0FBRyxHQUFHLDRCQUFhLFlBQVksQ0FBQyxHQUFELENBQXpCLENBQU47QUFDQTs7QUFDQSxXQUFRLEdBQUcsSUFBSSxNQUFNLEdBQU4sR0FBWSxHQUEzQjtBQUNELEdBTk0sQ0FBUDtBQU9EOzs7Ozs7Ozs7ZUNYYztBQUNYO0FBQ0Esc0NBQXFDLFVBRjFCO0FBR1gsbUJBQWlCLFdBSE47QUFJWCxxQkFBbUIsVUFKUjtBQUtYLGlCQUFjLE9BTEg7QUFNWCxvQkFBaUIsT0FOTjtBQU9YLHdDQUFxQyxhQVAxQjtBQVFYLG9CQUFrQixRQVJQO0FBU1gsMkJBQXlCLFFBVGQ7QUFVWCw2QkFBMkIsUUFWaEI7QUFXWCxvQkFBa0IsUUFYUDtBQVlYLGtDQUFnQyxRQVpyQjtBQWFYLGlCQUFlLE1BYko7QUFjWCwrQkFBNkIsUUFkbEI7QUFlWCx1REFBcUQsZ0JBZjFDO0FBZ0JYLHdDQUFzQyxZQWhCM0I7QUFpQlgsWUFBVSxJQWpCQztBQWtCWCw0QkFBMEIsUUFsQmY7QUFtQlgsNkJBQTJCLFFBbkJoQjtBQW9CWCwyQ0FBeUMsYUFwQjlCO0FBcUJYLGdDQUE4QixTQXJCbkI7QUFzQlgsaURBQWdELGVBdEJyQztBQXVCWCw2QkFBMkIsU0F2QmhCO0FBd0JYLDZCQUEyQixRQXhCaEI7QUF5QlgsK0JBQTZCLFFBekJsQjtBQTBCWCx5QkFBc0IsUUExQlg7QUEyQlgsd0JBQXFCLFFBM0JWO0FBNEJYLFVBQVEsSUE1Qkc7QUE2QlgsWUFBVSxJQTdCQztBQThCWCxtQkFBaUIsV0E5Qk47QUErQlgsaUJBQWMsTUEvQkg7QUFnQ1gsdUJBQW9CLFFBaENUO0FBaUNYLHFCQUFrQixRQWpDUDtBQWtDWCxrQkFBZSxLQWxDSjtBQW1DWCxVQUFRLElBbkNHO0FBb0NYLGVBQWEsTUFwQ0Y7QUFxQ1gsa0JBQWdCLE1BckNMO0FBc0NYLGVBQWEsTUF0Q0Y7QUF1Q1gsaUJBQWUsTUF2Q0o7QUF3Q1gsd0JBQXNCLFFBeENYO0FBeUNYLGtCQUFnQixNQXpDTDtBQTBDWCxpQkFBZSxNQTFDSjtBQTJDWCxtQkFBaUIsTUEzQ047QUE0Q1gsNkJBQTJCLFVBNUNoQjtBQTZDWCw0QkFBMEIsVUE3Q2Y7QUE4Q1gsaUJBQWUsTUE5Q0o7QUErQ1gsZ0JBQWMsTUEvQ0g7QUFnRFgsOEJBQTRCLE1BaERqQjtBQWlEWCxlQUFhLE1BakRGO0FBa0RYLGNBQVksTUFsREQ7QUFtRFgsb0JBQWtCLE1BbkRQO0FBb0RYLGFBQVUsSUFwREM7QUFxRFgsd0NBQXNDLFdBckQzQjtBQXNEWCx5QkFBdUIsUUF0RFo7QUF1RFgsdUJBQXFCLFFBdkRWO0FBd0RYLDZCQUEyQixRQXhEaEI7QUF5RFgsd0JBQXNCLFFBekRYO0FBMERYLHVCQUFxQixRQTFEVjtBQTJEWCw0QkFBMEIsUUEzRGY7QUE0RFgsOEJBQTRCLFFBNURqQjtBQTZEWCw0Q0FBMEMsYUE3RC9CO0FBOERYLDBDQUF3QyxhQTlEN0I7QUErRFgsZ0RBQThDLGFBL0RuQztBQWdFWCwyQ0FBeUMsYUFoRTlCO0FBaUVYLCtDQUE2QyxhQWpFbEM7QUFrRVgsc0NBQW9DLFVBbEV6QjtBQW1FWCxzQ0FBb0MsVUFuRXpCO0FBb0VYLG9DQUFrQyxVQXBFdkI7QUFxRVgseUNBQXVDLFVBckU1QjtBQXNFWCwwQ0FBd0MsVUF0RTdCO0FBdUVYLG1DQUFpQyxVQXZFdEI7QUF3RVgsbUNBQWlDLFVBeEV0QjtBQXlFWCwyQ0FBeUMsVUF6RTlCO0FBMEVYLHFDQUFtQyxVQTFFeEI7QUEyRVgscUNBQW1DLFVBM0V4QjtBQTRFWCx1QkFBcUIsUUE1RVY7QUE2RVgsMEJBQXdCLFFBN0ViO0FBOEVYLHFCQUFtQixRQTlFUjtBQStFWCxzQkFBb0IsUUEvRVQ7QUFnRlgsNEJBQTBCLFFBaEZmO0FBaUZYLHNCQUFvQixRQWpGVDtBQWtGWCx5QkFBdUIsUUFsRlo7QUFtRlgsNEJBQTBCLFFBbkZmO0FBb0ZYLCtDQUE2QyxhQXBGbEM7QUFxRlgsMEJBQXdCLFFBckZiO0FBc0ZYLDZDQUEyQyxhQXRGaEM7QUF1RlgsK0JBQTZCLFFBdkZsQjtBQXdGWCxrREFBZ0QsYUF4RnJDO0FBeUZYLGdDQUE4QixRQXpGbkI7QUEwRlgsbURBQWlELGFBMUZ0QztBQTJGWCwwQkFBd0IsUUEzRmI7QUE0RlgsMkJBQXlCLFFBNUZkO0FBNkZYLDJCQUF5QixRQTdGZDtBQThGWCw4Q0FBNEMsYUE5RmpDO0FBK0ZYLGlDQUErQixRQS9GcEI7QUFnR1gsdUJBQXFCLE1BaEdWO0FBaUdYLHNCQUFvQixNQWpHVDtBQWtHWCx1QkFBcUIsTUFsR1Y7QUFtR1gscUJBQW1CLE1BbkdSO0FBb0dYLHlCQUF1QixNQXBHWjtBQXFHWCxpQkFBZSxJQXJHSjtBQXNHWCxpQkFBZSxLQXRHSjtBQXVHWCx1QkFBcUIsT0F2R1Y7QUF3R1gsb0JBQWtCLEtBeEdQO0FBeUdYLG1CQUFpQixLQXpHTjtBQTBHWDtBQUNBLHlDQUF1QywwQkEzRzVCO0FBNEdYLDZCQUEyQixXQTVHaEI7QUE2R1gsMERBQXdELGdCQTdHN0M7QUE4R1gsMkJBQXlCLHVCQTlHZDtBQStHWCxtQ0FBaUMsY0EvR3RCO0FBZ0hYLHNCQUFvQixRQWhIVDtBQWlIWCwwQ0FBd0MsY0FqSDdCO0FBa0hYLDJCQUF5QixXQWxIZDtBQW1IWCw0Q0FBMEMsYUFuSC9CO0FBb0hYLDJFQUF5RSw0Q0FwSDlEO0FBcUhYLGdDQUE4QixnQkFySG5CO0FBc0hYLGdDQUE4QixlQXRIbkI7QUF1SFg7QUFDQSxRQUFLLElBeEhNO0FBeUhYLFVBQU8sSUF6SEk7QUEwSFgsYUFBVSxJQTFIQztBQTJIWCxhQUFVLElBM0hDO0FBNEhYLGtCQUFlLE1BNUhKO0FBNkhYLGFBQVUsSUE3SEM7QUE4SFgsZUFBWSxLQTlIRDtBQStIWCxnQ0FBNkIsTUEvSGxCO0FBZ0lYLHlCQUFzQixLQWhJWDtBQWlJWCx3QkFBcUIsS0FqSVY7QUFrSVgsdUJBQW9CLE1BbElUO0FBbUlYLGVBQVksSUFuSUQ7QUFvSVgsa0JBQWUsT0FwSUo7QUFxSVgsc0JBQW1CLFFBcklSO0FBc0lYLG1CQUFnQixJQXRJTDtBQXVJWCwyQkFBd0IsTUF2SWI7QUF3SVgsMkJBQXdCLE1BeEliO0FBeUlYLDBCQUF1QixTQXpJWjtBQTBJWCxXQUFRLElBMUlHO0FBMklYLGNBQVcsT0EzSUE7QUE0SVgsaUJBQWMsTUE1SUg7QUE2SVgsa0JBQWUsT0E3SUo7QUE4SVgsZ0JBQWEsTUE5SUY7QUErSVgsUUFBSyxJQS9JTTtBQWdKWCxVQUFPLElBaEpJO0FBaUpYLFdBQVEsSUFqSkc7QUFrSlgsbUJBQWdCLEtBbEpMO0FBbUpYLGdCQUFhLElBbkpGO0FBb0pYLG9CQUFpQixNQXBKTjtBQXFKWCxZQUFTLElBckpFO0FBc0pYLGdCQUFhLElBdEpGO0FBdUpYLGtCQUFlLE1BdkpKO0FBd0pYLFdBQVEsR0F4Skc7QUF5SlgsU0FBTSxJQXpKSztBQTBKWCxZQUFTLEdBMUpFO0FBMkpYLGVBQVksS0EzSkQ7QUE0SlgsZUFBWSxLQTVKRDtBQTZKWCx3QkFBcUIsTUE3SlY7QUE4SlgsZ0JBQWEsTUE5SkY7QUErSlgsbUJBQWdCLE9BL0pMO0FBZ0tYLGdCQUFhLE9BaEtGO0FBaUtYLGdCQUFhLEtBaktGO0FBa0tYLDBCQUF1QixTQWxLWjtBQW1LWCx5QkFBc0IsT0FuS1g7QUFvS1gsWUFBUyxJQXBLRTtBQXFLWCxtQkFBZ0IsTUFyS0w7QUFzS1gsaUJBQWMsTUF0S0g7QUF1S1gsbUJBQWdCLE1BdktMO0FBd0tYLHFCQUFrQixNQXhLUDtBQXlLWCxjQUFXLElBektBO0FBMEtYLHFCQUFrQixNQTFLUDtBQTJLWCxnQkFBYSxJQTNLRjtBQTRLWCxrQkFBZSxPQTVLSjtBQTZLWCxzQkFBbUIsTUE3S1I7QUE4S1gsdUJBQW9CLE1BOUtUO0FBK0tYLGdCQUFhLElBL0tGO0FBZ0xYLHNCQUFtQixNQWhMUjtBQWlMWCwyQkFBd0IsU0FqTGI7QUFrTFgsc0JBQW1CLE9BbExSO0FBbUxYLFVBQU8sSUFuTEk7QUFvTFgsY0FBVyxJQXBMQTtBQXFMWCxXQUFRLElBckxHO0FBc0xYLFlBQVMsSUF0TEU7QUF1TFgsaUJBQWMsTUF2TEg7QUF3TFgsZ0JBQWEsSUF4TEY7QUF5TFgsV0FBUSxJQXpMRztBQTBMWCxlQUFZLE1BMUxEO0FBMkxYLGVBQVksTUEzTEQ7QUE0TFgsbUJBQWdCLE1BNUxMO0FBNkxYLG9CQUFpQixNQTdMTjtBQThMWCw0RUFBeUUsYUE5TDlEO0FBK0xYLHlCQUFzQixNQS9MWDtBQWdNWCxrQkFBZSxNQWhNSjtBQWlNWCxpQkFBYyxNQWpNSDtBQWtNWCxnQkFBYSxPQWxNRjtBQW1NWCxpQ0FBOEIsUUFuTW5CO0FBb01YLG1CQUFnQixPQXBNTDtBQXFNWCxjQUFXLElBck1BO0FBc01YLGVBQVksS0F0TUQ7QUF1TVgsOEJBQTJCLFNBdk1oQjtBQXdNWCxrQkFBZSxPQXhNSjtBQXlNWCxvQkFBaUIsTUF6TU47QUEwTVgsc0JBQW1CLE1BMU1SO0FBMk1YLFlBQVMsSUEzTUU7QUE0TVgscUJBQWtCLE1BNU1QO0FBNk1YLFdBQVEsSUE3TUc7QUE4TVgseUJBQXNCLE9BOU1YO0FBK01YLHFCQUFrQixNQS9NUDtBQWdOWCxjQUFXLEtBaE5BO0FBaU5YLHFCQUFrQixNQWpOUDtBQWtOWCxzQkFBbUIsS0FsTlI7QUFtTlgsY0FBVyxNQW5OQTtBQW9OWCxvQkFBaUIsTUFwTk47QUFxTlgsY0FBVyxLQXJOQTtBQXNOWCx3R0FBcUcsaUVBdE4xRjtBQXVOWCxrR0FBK0YsaUVBdk5wRjtBQXdOWCxlQUFZLElBeE5EO0FBeU5YLHFDQUFrQyxRQXpOdkI7QUEwTlgsbUJBQWdCLE9BMU5MO0FBMk5YLDhCQUEyQixPQTNOaEI7QUE0TlgsNkJBQTBCLFFBNU5mO0FBNk5YLDRCQUF5QixRQTdOZDtBQThOWCxlQUFZLElBOU5EO0FBK05YLDREQUF5RCxhQS9OOUM7QUFnT1gsMkRBQXdELGNBaE83QztBQWlPWCw4Q0FBMkMsYUFqT2hDO0FBa09YLHVCQUFvQixRQWxPVDtBQW1PWCxvQkFBaUIsTUFuT047QUFvT1gscUJBQWtCLFFBcE9QO0FBcU9YLHlCQUFzQixRQXJPWDtBQXNPWCxvQkFBaUIsTUF0T047QUF1T1gsZ0NBQTZCLFVBdk9sQjtBQXdPWCwrQkFBNEIsVUF4T2pCO0FBeU9YLG9CQUFpQixLQXpPTjtBQTBPWCxzQkFBbUIsTUExT1I7QUEyT1gsZ0JBQWEsU0EzT0Y7QUE0T1gsc0JBQW1CLE1BNU9SO0FBNk9YLDBCQUF1QjtBQTdPWixDOzs7O0FDQWY7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2xFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbktBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOWhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL1NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbHdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1ZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUNyQixVQUFJLEdBQUcsR0FBQztBQUNKLGdCQUFRLElBQUksQ0FBQyxLQUFELENBQUosQ0FBWSxDQUFaLENBREo7QUFFSixrQkFBUyxPQUZMO0FBR0osZ0JBQU87QUFISCxPQUFSO0FBS0EsTUFBQSxTQUFTLENBQUMsSUFBVixDQUFlLEdBQWY7QUFDSDs7QUFDRCxTQUFJLElBQUksQ0FBUixJQUFhLElBQUksQ0FBQyxhQUFELENBQWpCLEVBQWlDO0FBQzdCLFVBQUksR0FBRyxHQUFDO0FBQ0osZ0JBQVEsSUFBSSxDQUFDLGFBQUQsQ0FBSixDQUFvQixDQUFwQixDQURKO0FBRUosa0JBQVMsT0FGTDtBQUdKLGdCQUFPO0FBSEgsT0FBUjtBQUtBLE1BQUEsU0FBUyxDQUFDLElBQVYsQ0FBZSxHQUFmO0FBQ0g7O0FBQ0QsV0FBTyxTQUFQO0FBQ0g7O0FBL1BTLENBQWQ7ZUFxUWUsSyIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIlxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBCcG1uTW9kZWxlciBmcm9tICdicG1uLWpzL2xpYi9Nb2RlbGVyJztcbi8vaW1wb3J0IHByb3BlcnRpZXNQYW5lbE1vZHVsZSBmcm9tICcuLi9yZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbCc7XG5pbXBvcnQgcHJvcGVydGllc1BhbmVsTW9kdWxlIGZyb20gJ2JwbW4tanMtcHJvcGVydGllcy1wYW5lbCc7XG5pbXBvcnQgcHJvcGVydGllc1Byb3ZpZGVyTW9kdWxlIGZyb20gJy4uL3Jlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpJztcbmltcG9ydCBhY3Rpdml0aU1vZGRsZURlc2NyaXB0b3IgZnJvbSAnLi4vcmVzb3VyY2VzL2FjdGl2aXRpLmpzb24nO1xuaW1wb3J0IGN1c3RvbVRyYW5zbGF0ZSBmcm9tICcuLi9yZXNvdXJjZXMvY3VzdG9tVHJhbnNsYXRlL2N1c3RvbVRyYW5zbGF0ZSc7XG5pbXBvcnQgY3VzdG9tQ29udHJvbHNNb2R1bGUgZnJvbSAnLi4vcmVzb3VyY2VzL2N1c3RvbUNvbnRyb2xzJztcbmltcG9ydCB0b29scyBmcm9tICcuLi9yZXNvdXJjZXMvdG9vbHMnXG5pbXBvcnQgZGlhZ3JhbVhNTCBmcm9tICcuLi9yZXNvdXJjZXMvbmV3RGlhZ3JhbS5icG1uJztcbmNvbnN0IHByb0hvc3QgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyB3aW5kb3cubG9jYXRpb24uaG9zdDtcbmNvbnN0IGhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdChcImJwbW5qc1wiKVswXTtcbmNvbnN0IGtleSA9IGhyZWYuc3BsaXQod2luZG93LmxvY2F0aW9uLmhvc3QpWzFdO1xuY29uc3QgcHVibGljdXJsID0gcHJvSG9zdCArIGtleTtcblxuLy8g5re75Yqg57+76K+R57uE5Lu2XG52YXIgY3VzdG9tVHJhbnNsYXRlTW9kdWxlID0ge1xuICAgIHRyYW5zbGF0ZTogWyd2YWx1ZScsIGN1c3RvbVRyYW5zbGF0ZV1cbn07XG5kZWJ1Z2dlclxudmFyIGNvbnRhaW5lciA9ICQoJyNqcy1kcm9wLXpvbmUnKTtcbnZhciBjYW52YXMgPSAkKCcjanMtY2FudmFzJyk7XG52YXIgYnBtbk1vZGVsZXIgPSBuZXcgQnBtbk1vZGVsZXIoe1xuICAgIGNvbnRhaW5lcjogY2FudmFzLFxuICAgIHByb3BlcnRpZXNQYW5lbDoge1xuICAgICAgICBwYXJlbnQ6ICcjanMtcHJvcGVydGllcy1wYW5lbCdcbiAgICB9LFxuICAgIGFkZGl0aW9uYWxNb2R1bGVzOiBbXG4gICAgICAgIHByb3BlcnRpZXNQYW5lbE1vZHVsZSxcbiAgICAgICAgcHJvcGVydGllc1Byb3ZpZGVyTW9kdWxlLFxuICAgICAgICBjdXN0b21Db250cm9sc01vZHVsZSxcbiAgICAgICAgY3VzdG9tVHJhbnNsYXRlTW9kdWxlXG4gICAgXSxcbiAgICBtb2RkbGVFeHRlbnNpb25zOiB7XG4gICAgICAgIGFjdGl2aXRpOmFjdGl2aXRpTW9kZGxlRGVzY3JpcHRvclxuICAgIH1cbn0pO1xuY29udGFpbmVyLnJlbW92ZUNsYXNzKCd3aXRoLWRpYWdyYW0nKTtcbi8vIOWIpOaWrea1j+iniOWZqOaUr+aMgeeoi+W6plxuaWYgKCF3aW5kb3cuRmlsZUxpc3QgfHwgIXdpbmRvdy5GaWxlUmVhZGVyKSB7XG4gICAgd2luZG93LmFsZXJ0KCfor7fkvb/nlKjosLfmrYzjgIHngavni5DjgIFJRTEwK+a1j+iniOWZqCcpO1xufSBlbHNlIHtcbiAgICB0b29scy5yZWdpc3RlckZpbGVEcm9wKGNvbnRhaW5lciwgdG9vbHMuY3JlYXRlRGlhZ3JhbShkaWFncmFtWE1MLCBicG1uTW9kZWxlciwgY29udGFpbmVyKSk7XG59XG5cblxuJChmdW5jdGlvbiAoKSB7XG4gICAgLy8g5Yib5bu6YnBtblxuICAgIHZhciBwYXJhbSA9IHRvb2xzLmdldFVybFBhcmFtKHdpbmRvdy5sb2NhdGlvbi5ocmVmKVxuICAgICAgICAkKCcuaXRlbScpLnNob3coKVxuICAgIGlmIChwYXJhbS50eXBlID09PSAnYWRkQnBtbicpIHtcbiAgICAgICAgdG9vbHMuY3JlYXRlRGlhZ3JhbShkaWFncmFtWE1MLCBicG1uTW9kZWxlciwgY29udGFpbmVyKTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09ICdsb29rQnBtbicpIHsgLy/nvJbovpFicG1uXG4gICAgICAgIGRlYnVnZ2VyXG4gICAgICAgICQoJy5pdGVtJykuaGlkZSgpXG4gICAgICAgICQoJy5kb3dubG9hZCcpLnNob3coKVxuICAgICAgICBjb25zdCBJZCA9IHBhcmFtLmRlcGxveW1lbnRGaWxlVVVJRCB8fCAnNmQ0YWYyZGMtYmFiMC0xMWVhLWI1ODQtM2NmMDExZWFhZmNhJ1xuICAgICAgICBjb25zdCBOYW1lPXBhcmFtLmRlcGxveW1lbnROYW1lIHx8ICdTdHJpbmcuYnBtbidcbiAgICAgICAgY29uc3QgaW5zdGFuY2VJZD1wYXJhbS5pbnN0YW5jZUlkXG4gICAgICAgIHZhciBwYXJhbT17XG4gICAgICAgICAgICBcImRlcGxveW1lbnRJZFwiOklkLFxuICAgICAgICAgICAgXCJyZXNvdXJjZU5hbWVcIjpkZWNvZGVVUkkoTmFtZSlcbiAgICAgICAgfVxuICAgICAgICBpZihpbnN0YW5jZUlkKXtcbiAgICAgICAgICAgIHZhciBwYXJhbTE9e1xuICAgICAgICAgICAgICAgIGluc3RhbmNlSWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiBwdWJsaWN1cmwrJ2FjdGl2aXRpSGlzdG9yeS9nZXRoaWdoTGluZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGF0YTogcGFyYW0xLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOidqc29uJyxcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICB2YXIgQ29sb3JKc29uPXRvb2xzLmdldEJ5Q29sb3IocmVzdWx0Lm9iailcbiAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogcHVibGljdXJsKydwcm9jZXNzRGVmaW5pdGlvbi9nZXREZWZpbml0aW9uWE1MJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdHRVQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogcGFyYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTondGV4dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1htbERhdGEgPSByZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29scy5jcmVhdGVEaWFncmFtKG5ld1htbERhdGEsIGJwbW5Nb2RlbGVyLCBjb250YWluZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIENvbG9ySnNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHMuc2V0Q29sb3IoQ29sb3JKc29uW2ldLGJwbW5Nb2RlbGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAvL+WKoOi9veWQjuWPsOaWueazleiOt+WPlnhtbFxuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICB1cmw6IHB1YmxpY3VybCsncHJvY2Vzc0RlZmluaXRpb24vZ2V0RGVmaW5pdGlvblhNTCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGF0YTogcGFyYW0sXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6J3RleHQnLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1htbERhdGEgPSByZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgdG9vbHMuY3JlYXRlRGlhZ3JhbShuZXdYbWxEYXRhLCBicG1uTW9kZWxlciwgY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZihwYXJhbS50eXBlID09PSBcImhpc3RvcnlCcG1uXCIpIHsgLy8gYnBtbuWOhuWPslxuICAgICAgICAkKCcuaXRlbScpLmhpZGUoKVxuICAgICAgICAkKCcuZG93bmxvYWQnKS5zaG93KClcbiAgICB9XG4gICAgLy8g54K55Ye75paw5aKeXG4gICAgJCgnI2pzLWRvd25sb2FkLWRpYWdyYW0nKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICB0b29scy5zeW9wZW4oJ2FsZXJ0JylcbiAgICB9KVxuXG4gICAgLy8g54K55Ye75Y+W5raIXG4gICAgJCgnLmNhbmNlbCcpLm9uKFwiY2xpY2tcIixmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRvb2xzLnN5aGlkZSgnYWxlcnQnKVxuICAgIH0pXG4gICAgLy8g54K55Ye756Gu5a6aXG4gICAgJCgnI3N1cmUnKS5vbignY2xpY2snLGZ1bmN0aW9uKCl7XG4gICAgICAgLy8gY29uc3QgdGV4dD0kKFwiI2RlcGxveW1lbnROYW1lXCIpLnZhbCgpXG4gICAgICAgIHRvb2xzLnNhdmVCcG1uKGJwbW5Nb2RlbGVyKVxuICAgIH0pXG5cblxuXG4gICAgLy8g54K55Ye75LiL6L29XG4gICAgJChcIiNkb3dubG9hZEJwbW5cIikub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRvb2xzLmRvd25Mb2FkKGJwbW5Nb2RlbGVyKVxuICAgIH0pXG4gICAgLy8g54K55Ye75LiK5LygXG4gICAgJChcIiN1cGxvYWRGaWxlXCIpLm9uKFwiY2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdG9vbHMudXBsb2FkKGJwbW5Nb2RlbGVyLGNvbnRhaW5lcilcbiAgICB9KVxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlc2NhcGVIVE1MID0gcmVxdWlyZSgnLi9VdGlscycpLmVzY2FwZUhUTUw7XG5cbnZhciBkb21pZnkgPSByZXF1aXJlKCdtaW4tZG9tJykuZG9taWZ5LFxuICAgIGRvbVF1ZXJ5ID0gcmVxdWlyZSgnbWluLWRvbScpLnF1ZXJ5LFxuICAgIGRvbVF1ZXJ5QWxsID0gcmVxdWlyZSgnbWluLWRvbScpLnF1ZXJ5QWxsLFxuICAgIGRvbVJlbW92ZSA9IHJlcXVpcmUoJ21pbi1kb20nKS5yZW1vdmUsXG4gICAgZG9tQ2xhc3NlcyA9IHJlcXVpcmUoJ21pbi1kb20nKS5jbGFzc2VzLFxuICAgIGRvbUNsb3Nlc3QgPSByZXF1aXJlKCdtaW4tZG9tJykuY2xvc2VzdCxcbiAgICBkb21BdHRyID0gcmVxdWlyZSgnbWluLWRvbScpLmF0dHIsXG4gICAgZG9tRGVsZWdhdGUgPSByZXF1aXJlKCdtaW4tZG9tJykuZGVsZWdhdGUsXG4gICAgZG9tTWF0Y2hlcyA9IHJlcXVpcmUoJ21pbi1kb20nKS5tYXRjaGVzO1xuXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyksXG4gICAgZmlsdGVyID0gcmVxdWlyZSgnbG9kYXNoL2ZpbHRlcicpLFxuICAgIGdldCA9IHJlcXVpcmUoJ2xvZGFzaC9nZXQnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnbG9kYXNoL2tleXMnKSxcbiAgICBpc0VtcHR5ID0gcmVxdWlyZSgnbG9kYXNoL2lzRW1wdHknKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnbG9kYXNoL2lzQXJyYXknKSxcbiAgICB4b3IgPSByZXF1aXJlKCdsb2Rhc2gveG9yJyksXG4gICAgZGVib3VuY2UgPSByZXF1aXJlKCdsb2Rhc2gvZGVib3VuY2UnKTtcblxudmFyIHVwZGF0ZVNlbGVjdGlvbiA9IHJlcXVpcmUoJ3NlbGVjdGlvbi11cGRhdGUnKTtcblxudmFyIHNjcm9sbFRhYnMgPSByZXF1aXJlKCdzY3JvbGwtdGFicycpLmRlZmF1bHQ7XG5cbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XG5cbnZhciBISURFX0NMQVNTID0gJ2JwcC1oaWRkZW4nO1xudmFyIERFQk9VTkNFX0RFTEFZID0gMzAwO1xuXG5cbmZ1bmN0aW9uIGlzVG9nZ2xlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBub2RlLnR5cGUgPT09ICdyYWRpbyc7XG59XG5cbmZ1bmN0aW9uIGlzU2VsZWN0KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ3NlbGVjdC1vbmUnO1xufVxuXG5mdW5jdGlvbiBpc0NvbnRlbnRFZGl0YWJsZShub2RlKSB7XG4gIHJldHVybiBkb21BdHRyKG5vZGUsICdjb250ZW50ZWRpdGFibGUnKTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHlQbGFjZWhvbGRlcnMobm9kZSkge1xuICB2YXIgc2VsZWN0b3IgPSAnaW5wdXRbbmFtZV0sIHRleHRhcmVhW25hbWVdLCBbZGF0YS12YWx1ZV0sIFtjb250ZW50ZWRpdGFibGVdJztcbiAgdmFyIHBsYWNlaG9sZGVycyA9IGRvbVF1ZXJ5QWxsKHNlbGVjdG9yLCBub2RlKTtcbiAgaWYgKCghcGxhY2Vob2xkZXJzIHx8ICFwbGFjZWhvbGRlcnMubGVuZ3RoKSAmJiBkb21NYXRjaGVzKG5vZGUsIHNlbGVjdG9yKSkge1xuICAgIHBsYWNlaG9sZGVycyA9IFsgbm9kZSBdO1xuICB9XG4gIHJldHVybiBwbGFjZWhvbGRlcnM7XG59XG5cbi8qKlxuICogUmV0dXJuIGFsbCBhY3RpdmUgZm9ybSBjb250cm9scy5cbiAqIFRoaXMgZXhjbHVkZXMgdGhlIGludmlzaWJsZSBjb250cm9scyB1bmxlc3MgYWxsIGlzIHRydWVcbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbD1mYWxzZV1cbiAqL1xuZnVuY3Rpb24gZ2V0Rm9ybUNvbnRyb2xzKG5vZGUsIGFsbCkge1xuICB2YXIgY29udHJvbHMgPSBkb21RdWVyeUFsbCgnaW5wdXRbbmFtZV0sIHRleHRhcmVhW25hbWVdLCBzZWxlY3RbbmFtZV0sIFtjb250ZW50ZWRpdGFibGVdJywgbm9kZSk7XG5cbiAgaWYgKCFjb250cm9scyB8fCAhY29udHJvbHMubGVuZ3RoKSB7XG4gICAgY29udHJvbHMgPSBkb21NYXRjaGVzKG5vZGUsICdvcHRpb24nKSA/IFsgbm9kZSBdIDogY29udHJvbHM7XG4gIH1cblxuICBpZiAoIWFsbCkge1xuICAgIGNvbnRyb2xzID0gZmlsdGVyKGNvbnRyb2xzLCBmdW5jdGlvbihub2RlKSB7XG4gICAgICByZXR1cm4gIWRvbUNsb3Nlc3Qobm9kZSwgJy4nICsgSElERV9DTEFTUyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gY29udHJvbHM7XG59XG5cbmZ1bmN0aW9uIGdldEZvcm1Db250cm9sVmFsdWVzSW5TY29wZShlbnRyeU5vZGUpIHtcbiAgdmFyIHZhbHVlcyA9IHt9O1xuXG4gIHZhciBjb250cm9sTm9kZXMgPSBnZXRGb3JtQ29udHJvbHMoZW50cnlOb2RlKTtcblxuICBmb3JFYWNoKGNvbnRyb2xOb2RlcywgZnVuY3Rpb24oY29udHJvbE5vZGUpIHtcbiAgICB2YXIgdmFsdWUgPSBjb250cm9sTm9kZS52YWx1ZTtcblxuICAgIHZhciBuYW1lID0gZG9tQXR0cihjb250cm9sTm9kZSwgJ25hbWUnKSB8fCBkb21BdHRyKGNvbnRyb2xOb2RlLCAnZGF0YS1uYW1lJyk7XG5cbiAgICAvLyB0YWtlIHRvZ2dsZSBzdGF0ZSBpbnRvIGFjY291bnQgZm9yIHJhZGlvIC8gY2hlY2tib3hlc1xuICAgIGlmIChpc1RvZ2dsZShjb250cm9sTm9kZSkpIHtcbiAgICAgIGlmIChjb250cm9sTm9kZS5jaGVja2VkKSB7XG4gICAgICAgIGlmICghZG9tQXR0cihjb250cm9sTm9kZSwgJ3ZhbHVlJykpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSBjb250cm9sTm9kZS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZVxuICAgIGlmIChpc0NvbnRlbnRFZGl0YWJsZShjb250cm9sTm9kZSkpIHtcbiAgICAgIHZhbHVlID0gY29udHJvbE5vZGUuaW5uZXJUZXh0O1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgLy8gcmV0dXJuIHRoZSBhY3R1YWwgdmFsdWVcbiAgICAgIC8vIGhhbmRsZSBzZXJpYWxpemF0aW9uIGluIGVudHJ5IHByb3ZpZGVyXG4gICAgICAvLyAoaWUuIGlmIGVtcHR5IHN0cmluZyBzaG91bGQgYmUgc2VyaWFsaXplZCBvciBub3QpXG4gICAgICB2YWx1ZXNbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB2YWx1ZXM7XG5cbn1cblxuLyoqXG4gKiBFeHRyYWN0IGlucHV0IHZhbHVlcyBmcm9tIGVudHJ5IG5vZGVcbiAqXG4gKiBAcGFyYW0gIHtET01FbGVtZW50fSBlbnRyeU5vZGVcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldEZvcm1Db250cm9sVmFsdWVzKGVudHJ5Tm9kZSkge1xuXG4gIHZhciB2YWx1ZXM7XG5cbiAgdmFyIGxpc3RDb250YWluZXIgPSBkb21RdWVyeSgnW2RhdGEtbGlzdC1lbnRyeS1jb250YWluZXJdJywgZW50cnlOb2RlKTtcbiAgaWYgKGxpc3RDb250YWluZXIpIHtcbiAgICB2YWx1ZXMgPSBbXTtcbiAgICB2YXIgbGlzdE5vZGVzID0gbGlzdENvbnRhaW5lci5jaGlsZHJlbiB8fCBbXTtcbiAgICBmb3JFYWNoKGxpc3ROb2RlcywgZnVuY3Rpb24obGlzdE5vZGUpIHtcbiAgICAgIHZhbHVlcy5wdXNoKGdldEZvcm1Db250cm9sVmFsdWVzSW5TY29wZShsaXN0Tm9kZSkpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlcyA9IGdldEZvcm1Db250cm9sVmFsdWVzSW5TY29wZShlbnRyeU5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gZm9ybSBleHRyYWN0ZWQgdmFsdWUgZXF1YWxzXG4gKiB0byBhbiBvbGQgY2FjaGVkIHZlcnNpb24uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gb2xkVmFsdWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHZhbHVlRXF1YWwodmFsdWUsIG9sZFZhbHVlKSB7XG5cbiAgaWYgKHZhbHVlICYmICFvbGRWYWx1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBhbGxLZXlzID0ga2V5cyh2YWx1ZSkuY29uY2F0KGtleXMob2xkVmFsdWUpKTtcblxuICByZXR1cm4gYWxsS2V5cy5ldmVyeShmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gdmFsdWVba2V5XSA9PT0gb2xkVmFsdWVba2V5XTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIGZvcm0gZXh0cmFjdGVkIHZhbHVlKHMpXG4gKiBlcXVhbCBhbiBvbGQgY2FjaGVkIHZlcnNpb24uXG4gKlxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fE9iamVjdH0gdmFsdWVzXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD58T2JqZWN0fSBvbGRWYWx1ZXNcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHZhbHVlc0VxdWFsKHZhbHVlcywgb2xkVmFsdWVzKSB7XG5cbiAgaWYgKGlzQXJyYXkodmFsdWVzKSkge1xuXG4gICAgaWYgKHZhbHVlcy5sZW5ndGggIT09IG9sZFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVzLmV2ZXJ5KGZ1bmN0aW9uKHYsIGlkeCkge1xuICAgICAgcmV0dXJuIHZhbHVlRXF1YWwodiwgb2xkVmFsdWVzW2lkeF0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlRXF1YWwodmFsdWVzLCBvbGRWYWx1ZXMpO1xufVxuXG4vKipcbiAqIFJldHVybiBhIG1hcHBpbmcgb2YgeyBpZDogZW50cnkgfSBmb3IgYWxsIGVudHJpZXMgaW4gdGhlIGdpdmVuIGdyb3VwcyBpbiB0aGUgZ2l2ZW4gdGFicy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGFic1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBleHRyYWN0RW50cmllcyh0YWJzKSB7XG4gIHJldHVybiBrZXlCeShmbGF0dGVuRGVlcChtYXAoZmxhdHRlbkRlZXAobWFwKHRhYnMsICdncm91cHMnKSksICdlbnRyaWVzJykpLCAnaWQnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSBtYXBwaW5nIG9mIHsgaWQ6IGdyb3VwIH0gZm9yIGFsbCBncm91cHMgaW4gdGhlIGdpdmVuIHRhYnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRhYnNcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdEdyb3Vwcyh0YWJzKSB7XG4gIHJldHVybiBrZXlCeShmbGF0dGVuRGVlcChtYXAodGFicywgJ2dyb3VwcycpKSwgJ2lkJyk7XG59XG5cbi8qKlxuICogQSBwcm9wZXJ0aWVzIHBhbmVsIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIFRvIHVzZSBpdCBwcm92aWRlIGEgYHByb3BlcnRpZXNQcm92aWRlcmAgY29tcG9uZW50IHRoYXQga25vd3NcbiAqIGFib3V0IHdoaWNoIHByb3BlcnRpZXMgdG8gZGlzcGxheS5cbiAqXG4gKiBQcm9wZXJ0aWVzIGVkaXQgc3RhdGUgLyB2aXNpYmlsaXR5IGNhbiBiZSBpbnRlcmNlcHRlZFxuICogdmlhIGEgY3VzdG9tIHtAbGluayBQcm9wZXJ0aWVzQWN0aXZhdG9yfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBjb25zdHJ1Y3RvclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWdcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICogQHBhcmFtIHtQcm9wZXJ0aWVzUHJvdmlkZXJ9IHByb3BlcnRpZXNQcm92aWRlclxuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICogQHBhcmFtIHtDb21tYW5kU3RhY2t9IGNvbW1hbmRTdGFja1xuICovXG5mdW5jdGlvbiBQcm9wZXJ0aWVzUGFuZWwoY29uZmlnLCBldmVudEJ1cywgbW9kZWxpbmcsIHByb3BlcnRpZXNQcm92aWRlciwgY29tbWFuZFN0YWNrLCBjYW52YXMpIHtcblxuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl9jb21tYW5kU3RhY2sgPSBjb21tYW5kU3RhY2s7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcbiAgdGhpcy5fcHJvcGVydGllc1Byb3ZpZGVyID0gcHJvcGVydGllc1Byb3ZpZGVyO1xuXG4gIHRoaXMuX2luaXQoY29uZmlnKTtcbn1cblxuUHJvcGVydGllc1BhbmVsLiRpbmplY3QgPSBbXG4gICdjb25maWcucHJvcGVydGllc1BhbmVsJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3Byb3BlcnRpZXNQcm92aWRlcicsXG4gICdjb21tYW5kU3RhY2snLFxuICAnY2FudmFzJ1xuXTtcblxubW9kdWxlLmV4cG9ydHMgPSBQcm9wZXJ0aWVzUGFuZWw7XG5cblxuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uKGNvbmZpZykge1xuXG4gIHZhciBjYW52YXMgPSB0aGlzLl9jYW52YXMsXG4gICAgICBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvKipcbiAgICogU2VsZWN0IHRoZSByb290IGVsZW1lbnQgb25jZSBpdCBpcyBhZGRlZCB0byB0aGUgY2FudmFzXG4gICAqL1xuICBldmVudEJ1cy5vbigncm9vdC5hZGRlZCcsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgZWxlbWVudCA9IGUuZWxlbWVudDtcblxuICAgIGlmIChpc0ltcGxpY2l0Um9vdChlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYudXBkYXRlKGVsZW1lbnQpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignc2VsZWN0aW9uLmNoYW5nZWQnLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG5ld0VsZW1lbnQgPSBlLm5ld1NlbGVjdGlvblswXTtcblxuICAgIHZhciByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpO1xuXG4gICAgaWYgKGlzSW1wbGljaXRSb290KHJvb3RFbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYudXBkYXRlKG5ld0VsZW1lbnQpO1xuICB9KTtcblxuICAvLyBhZGQgLyB1cGRhdGUgdGFiLWJhciBzY3JvbGxpbmdcbiAgZXZlbnRCdXMub24oW1xuICAgICdwcm9wZXJ0aWVzUGFuZWwuY2hhbmdlZCcsXG4gICAgJ3Byb3BlcnRpZXNQYW5lbC5yZXNpemVkJ1xuICBdLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIHRhYkJhck5vZGUgPSBkb21RdWVyeSgnLmJwcC1wcm9wZXJ0aWVzLXRhYi1iYXInLCBzZWxmLl9jb250YWluZXIpO1xuXG4gICAgaWYgKCF0YWJCYXJOb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHNjcm9sbGVyID0gc2Nyb2xsVGFicy5nZXQodGFiQmFyTm9kZSk7XG5cbiAgICBpZiAoIXNjcm9sbGVyKSB7XG5cbiAgICAgIC8vIHdlIGRpZCBub3QgaW5pdGlhbGl6ZSB5ZXQsIGRvIHRoYXRcbiAgICAgIC8vIG5vdyBhbmQgbWFrZSBzdXJlIHdlIHNlbGVjdCB0aGUgYWN0aXZlXG4gICAgICAvLyB0YWIgb24gc2Nyb2xsIHVwZGF0ZVxuICAgICAgc2Nyb2xsZXIgPSBzY3JvbGxUYWJzKHRhYkJhck5vZGUsIHtcbiAgICAgICAgc2VsZWN0b3JzOiB7XG4gICAgICAgICAgdGFic0NvbnRhaW5lcjogJy5icHAtcHJvcGVydGllcy10YWJzLWxpbmtzJyxcbiAgICAgICAgICB0YWI6ICcuYnBwLXByb3BlcnRpZXMtdGFicy1saW5rcyBsaScsXG4gICAgICAgICAgaWdub3JlOiAnLmJwcC1oaWRkZW4nLFxuICAgICAgICAgIGFjdGl2ZTogJy5icHAtYWN0aXZlJ1xuICAgICAgICB9XG4gICAgICB9KTtcblxuXG4gICAgICBzY3JvbGxlci5vbignc2Nyb2xsJywgZnVuY3Rpb24obmV3QWN0aXZlTm9kZSwgb2xkQWN0aXZlTm9kZSwgZGlyZWN0aW9uKSB7XG5cbiAgICAgICAgdmFyIGxpbmtOb2RlID0gZG9tUXVlcnkoJ1tkYXRhLXRhYi10YXJnZXRdJywgbmV3QWN0aXZlTm9kZSk7XG5cbiAgICAgICAgdmFyIHRhYklkID0gZG9tQXR0cihsaW5rTm9kZSwgJ2RhdGEtdGFiLXRhcmdldCcpO1xuXG4gICAgICAgIHNlbGYuYWN0aXZhdGVUYWIodGFiSWQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcmVhY3Qgb24gdGFiIGNoYW5nZXMgYW5kIG9yIHRhYkNvbnRhaW5lciByZXNpemVcbiAgICAvLyBhbmQgbWFrZSBzdXJlIHRoZSBhY3RpdmUgdGFiIGlzIHNob3duIGNvbXBsZXRlbHlcbiAgICBzY3JvbGxlci51cGRhdGUoKTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnRzLmNoYW5nZWQnLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgY3VycmVudCA9IHNlbGYuX2N1cnJlbnQ7XG4gICAgdmFyIGVsZW1lbnQgPSBjdXJyZW50ICYmIGN1cnJlbnQuZWxlbWVudDtcblxuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBpZiAoZS5lbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpICE9PSAtMSkge1xuICAgICAgICBzZWxmLnVwZGF0ZShlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50VGVtcGxhdGVzLmNoYW5nZWQnLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgY3VycmVudCA9IHNlbGYuX2N1cnJlbnQ7XG4gICAgdmFyIGVsZW1lbnQgPSBjdXJyZW50ICYmIGN1cnJlbnQuZWxlbWVudDtcblxuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBzZWxmLnVwZGF0ZShlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdkaWFncmFtLmRlc3Ryb3knLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLmRldGFjaCgpO1xuICB9KTtcblxuICB0aGlzLl9jb250YWluZXIgPSBkb21pZnkoJzxkaXYgY2xhc3M9XCJicHAtcHJvcGVydGllcy1wYW5lbFwiPjwvZGl2PicpO1xuXG4gIHRoaXMuX2JpbmRMaXN0ZW5lcnModGhpcy5fY29udGFpbmVyKTtcblxuICBpZiAoY29uZmlnICYmIGNvbmZpZy5wYXJlbnQpIHtcbiAgICB0aGlzLmF0dGFjaFRvKGNvbmZpZy5wYXJlbnQpO1xuICB9XG59O1xuXG5cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUuYXR0YWNoVG8gPSBmdW5jdGlvbihwYXJlbnROb2RlKSB7XG5cbiAgaWYgKCFwYXJlbnROb2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnROb2RlIHJlcXVpcmVkJyk7XG4gIH1cblxuICAvLyBlbnN1cmUgd2UgZGV0YWNoIGZyb20gdGhlXG4gIC8vIHByZXZpb3VzLCBvbGQgcGFyZW50XG4gIHRoaXMuZGV0YWNoKCk7XG5cbiAgLy8gdW53cmFwIGpRdWVyeSBpZiBwcm92aWRlZFxuICBpZiAocGFyZW50Tm9kZS5nZXQgJiYgcGFyZW50Tm9kZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuanF1ZXJ5KSB7XG4gICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUuZ2V0KDApO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwYXJlbnROb2RlID09PSAnc3RyaW5nJykge1xuICAgIHBhcmVudE5vZGUgPSBkb21RdWVyeShwYXJlbnROb2RlKTtcbiAgfVxuXG4gIHZhciBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXI7XG5cbiAgcGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuXG4gIHRoaXMuX2VtaXQoJ2F0dGFjaCcpO1xufTtcblxuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5kZXRhY2ggPSBmdW5jdGlvbigpIHtcblxuICB2YXIgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyLFxuICAgICAgcGFyZW50Tm9kZSA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xuXG4gIGlmICghcGFyZW50Tm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX2VtaXQoJ2RldGFjaCcpO1xuXG4gIHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29udGFpbmVyKTtcbn07XG5cblxuLyoqXG4gKiBTZWxlY3QgdGhlIGdpdmVuIHRhYiB3aXRoaW4gdGhlIHByb3BlcnRpZXMgcGFuZWwuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSB0YWJcbiAqL1xuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5hY3RpdmF0ZVRhYiA9IGZ1bmN0aW9uKHRhYikge1xuXG4gIHZhciB0YWJJZCA9IHR5cGVvZiB0YWIgPT09ICdzdHJpbmcnID8gdGFiIDogdGFiLmlkO1xuXG4gIHZhciBjdXJyZW50ID0gdGhpcy5fY3VycmVudDtcblxuICB2YXIgcGFuZWxOb2RlID0gY3VycmVudC5wYW5lbDtcblxuICB2YXIgYWxsVGFiTm9kZXMgPSBkb21RdWVyeUFsbCgnLmJwcC1wcm9wZXJ0aWVzLXRhYicsIHBhbmVsTm9kZSksXG4gICAgICBhbGxUYWJMaW5rTm9kZXMgPSBkb21RdWVyeUFsbCgnLmJwcC1wcm9wZXJ0aWVzLXRhYi1saW5rJywgcGFuZWxOb2RlKTtcblxuICBmb3JFYWNoKGFsbFRhYk5vZGVzLCBmdW5jdGlvbih0YWJOb2RlKSB7XG5cbiAgICB2YXIgY3VycmVudFRhYklkID0gZG9tQXR0cih0YWJOb2RlLCAnZGF0YS10YWInKTtcblxuICAgIGRvbUNsYXNzZXModGFiTm9kZSkudG9nZ2xlKCdicHAtYWN0aXZlJywgdGFiSWQgPT09IGN1cnJlbnRUYWJJZCk7XG4gIH0pO1xuXG4gIGZvckVhY2goYWxsVGFiTGlua05vZGVzLCBmdW5jdGlvbih0YWJMaW5rTm9kZSkge1xuXG4gICAgdmFyIHRhYkxpbmsgPSBkb21RdWVyeSgnW2RhdGEtdGFiLXRhcmdldF0nLCB0YWJMaW5rTm9kZSksXG4gICAgICAgIGN1cnJlbnRUYWJJZCA9IGRvbUF0dHIodGFiTGluaywgJ2RhdGEtdGFiLXRhcmdldCcpO1xuXG4gICAgZG9tQ2xhc3Nlcyh0YWJMaW5rTm9kZSkudG9nZ2xlKCdicHAtYWN0aXZlJywgdGFiSWQgPT09IGN1cnJlbnRUYWJJZCk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIERPTSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcHJvcGVydGllcyBwYW5lbFxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIGN1cnJlbnQgPSB0aGlzLl9jdXJyZW50O1xuXG4gIC8vIG5vIGFjdHVhbCBzZWxlY3Rpb24gY2hhbmdlXG4gIHZhciBuZWVkc0NyZWF0ZSA9IHRydWU7XG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAndW5kZWZpbmVkJykge1xuXG4gICAgLy8gdXNlIFJvb3RFbGVtZW50IG9mIEJQTU4gZGlhZ3JhbSB0byBnZW5lcmF0ZSBwcm9wZXJ0aWVzIHBhbmVsIGlmIG5vIGVsZW1lbnQgaXMgc2VsZWN0ZWRcbiAgICBlbGVtZW50ID0gdGhpcy5fY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XG4gIH1cblxuICB2YXIgbmV3VGFicyA9IHRoaXMuX3Byb3BlcnRpZXNQcm92aWRlci5nZXRUYWJzKGVsZW1lbnQpO1xuXG4gIGlmIChjdXJyZW50ICYmIGN1cnJlbnQuZWxlbWVudCA9PT0gZWxlbWVudCkge1xuICAgIC8vIHNlZSBpZiB3ZSBjYW4gcmV1c2UgdGhlIGV4aXN0aW5nIHBhbmVsXG5cbiAgICBuZWVkc0NyZWF0ZSA9IHRoaXMuX2VudHJpZXNDaGFuZ2VkKGN1cnJlbnQsIG5ld1RhYnMpO1xuICB9XG5cbiAgaWYgKG5lZWRzQ3JlYXRlKSB7XG5cbiAgICBpZiAoY3VycmVudCkge1xuXG4gICAgICAvLyBnZXQgYWN0aXZlIHRhYiBmcm9tIHRoZSBleGlzdGluZyBwYW5lbCBiZWZvcmUgcmVtb3ZlIGl0XG4gICAgICB2YXIgYWN0aXZlVGFiTm9kZSA9IGRvbVF1ZXJ5KCcuYnBwLXByb3BlcnRpZXMtdGFiLmJwcC1hY3RpdmUnLCBjdXJyZW50LnBhbmVsKTtcblxuICAgICAgdmFyIGFjdGl2ZVRhYklkO1xuICAgICAgaWYgKGFjdGl2ZVRhYk5vZGUpIHtcbiAgICAgICAgYWN0aXZlVGFiSWQgPSBkb21BdHRyKGFjdGl2ZVRhYk5vZGUsICdkYXRhLXRhYicpO1xuICAgICAgfVxuXG4gICAgICAvLyByZW1vdmUgb2xkIHBhbmVsXG4gICAgICBkb21SZW1vdmUoY3VycmVudC5wYW5lbCk7XG4gICAgfVxuXG4gICAgdGhpcy5fY3VycmVudCA9IHRoaXMuX2NyZWF0ZShlbGVtZW50LCBuZXdUYWJzKTtcblxuICAgIC8vIGFjdGl2YXRlIHRoZSBzYXZlZCBhY3RpdmUgdGFiIGZyb20gdGhlIHJlbW92ZSBwYW5lbCBvciB0aGUgZmlyc3QgdGFiXG4gICAgKGFjdGl2ZVRhYklkKSA/IHRoaXMuYWN0aXZhdGVUYWIoYWN0aXZlVGFiSWQpIDogdGhpcy5hY3RpdmF0ZVRhYih0aGlzLl9jdXJyZW50LnRhYnNbMF0pO1xuXG4gIH1cblxuICBpZiAodGhpcy5fY3VycmVudCkge1xuICAgIC8vIG1ha2Ugc3VyZSBjb3JyZWN0IHRhYiBjb250ZW50cyBhcmUgdmlzaWJsZVxuICAgIHRoaXMuX3VwZGF0ZUFjdGl2YXRpb24odGhpcy5fY3VycmVudCk7XG5cbiAgfVxuXG4gIHRoaXMuX2VtaXQoJ2NoYW5nZWQnKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgb25lIG9mIHR3byBncm91cHMgaGFzIGRpZmZlcmVudCBlbnRyaWVzIHRoYW4gdGhlIG90aGVyLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gY3VycmVudFxuICogQHBhcmFtICB7T2JqZWN0fSBuZXdUYWJzXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLl9lbnRyaWVzQ2hhbmdlZCA9IGZ1bmN0aW9uKGN1cnJlbnQsIG5ld1RhYnMpIHtcblxuICB2YXIgb2xkRW50cnlJZHMgPSBrZXlzKGN1cnJlbnQuZW50cmllcyksXG4gICAgICBuZXdFbnRyeUlkcyA9IGtleXMoZXh0cmFjdEVudHJpZXMobmV3VGFicykpO1xuXG4gIHJldHVybiAhaXNFbXB0eSh4b3Iob2xkRW50cnlJZHMsIG5ld0VudHJ5SWRzKSk7XG59O1xuXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLl9lbWl0ID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgncHJvcGVydGllc1BhbmVsLicgKyBldmVudCwgeyBwYW5lbDogdGhpcywgY3VycmVudDogdGhpcy5fY3VycmVudCB9KTtcbn07XG5cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUuX2JpbmRMaXN0ZW5lcnMgPSBmdW5jdGlvbihjb250YWluZXIpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLy8gaGFuZGxlcyBhIGNoYW5nZSBmb3IgYSBnaXZlbiBldmVudFxuICB2YXIgaGFuZGxlQ2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKGV2ZW50KSB7XG5cbiAgICAvLyBzZWUgaWYgd2UgaGFuZGxlIGEgY2hhbmdlIGluc2lkZSBhIFtkYXRhLWVudHJ5XSBlbGVtZW50LlxuICAgIC8vIGlmIG5vdCwgZHJvcCBvdXRcbiAgICB2YXIgaW5wdXROb2RlID0gZXZlbnQuZGVsZWdhdGVUYXJnZXQsXG4gICAgICAgIGVudHJ5Tm9kZSA9IGRvbUNsb3Nlc3QoaW5wdXROb2RlLCAnW2RhdGEtZW50cnldJyksXG4gICAgICAgIGVudHJ5SWQsIGVudHJ5O1xuXG4gICAgLy8gY2hhbmdlIGZyb20gb3V0c2lkZSBhIFtkYXRhLWVudHJ5XSBlbGVtZW50LCBzaW1wbHkgaWdub3JlXG4gICAgaWYgKCFlbnRyeU5vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlbnRyeUlkID0gZG9tQXR0cihlbnRyeU5vZGUsICdkYXRhLWVudHJ5Jyk7XG4gICAgZW50cnkgPSBzZWxmLmdldEVudHJ5KGVudHJ5SWQpO1xuXG4gICAgdmFyIHZhbHVlcyA9IGdldEZvcm1Db250cm9sVmFsdWVzKGVudHJ5Tm9kZSk7XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2NoYW5nZScpIHtcblxuICAgICAgLy8gLSBpZiB0aGUgXCJkYXRhLW9uLWNoYW5nZVwiIGF0dHJpYnV0ZSBpcyBwcmVzZW50IGFuZCBhIHZhbHVlIGlzIGNoYW5nZWQsXG4gICAgICAvLyAgIHRoZW4gdGhlIGFzc29jaWF0ZWQgYWN0aW9uIGlzIHBlcmZvcm1lZC5cbiAgICAgIC8vIC0gaWYgdGhlIGFzc29jaWF0ZWQgYWN0aW9uIHJldHVybnMgXCJ0cnVlXCIgdGhlbiBhbiB1cGRhdGUgdG8gdGhlIGJ1c2luZXNzXG4gICAgICAvLyAgIG9iamVjdCBpcyBkb25lXG4gICAgICAvLyAtIGlmIGl0IGRvZXMgbm90IHJldHVybiBcInRydWVcIiwgdGhlbiBvbmx5IHRoZSBET00gY29udGVudCBpcyB1cGRhdGVkXG4gICAgICB2YXIgb25DaGFuZ2VBY3Rpb24gPSBkb21BdHRyKGlucHV0Tm9kZSwgJ2RhdGEtb24tY2hhbmdlJyk7XG5cbiAgICAgIGlmIChvbkNoYW5nZUFjdGlvbikge1xuICAgICAgICB2YXIgaXNFbnRyeURpcnR5ID0gc2VsZi5leGVjdXRlQWN0aW9uKGVudHJ5LCBlbnRyeU5vZGUsIG9uQ2hhbmdlQWN0aW9uLCBldmVudCk7XG5cbiAgICAgICAgaWYgKCFpc0VudHJ5RGlydHkpIHtcbiAgICAgICAgICByZXR1cm4gc2VsZi51cGRhdGUoc2VsZi5fY3VycmVudC5lbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBzZWxmLmFwcGx5Q2hhbmdlcyhlbnRyeSwgdmFsdWVzLCBlbnRyeU5vZGUpO1xuICAgIHNlbGYudXBkYXRlU3RhdGUoZW50cnksIGVudHJ5Tm9kZSk7XG4gIH07XG5cbiAgLy8gZGVib3VuY2UgdXBkYXRlIG9ubHkgZWxlbWVudHMgdGhhdCBhcmUgdGFyZ2V0IG9mIGtleSBldmVudHMsXG4gIC8vIGkuZS4gSU5QVVQgYW5kIFRFWFRBUkVBLiBTRUxFQ1RzIHdpbGwgdHJpZ2dlciBhbiBpbW1lZGlhdGUgdXBkYXRlIGFueXdheS5cbiAgZG9tRGVsZWdhdGUuYmluZChjb250YWluZXIsICdpbnB1dCwgdGV4dGFyZWEsIFtjb250ZW50ZWRpdGFibGVdJywgJ2lucHV0JywgZGVib3VuY2UoaGFuZGxlQ2hhbmdlLCBERUJPVU5DRV9ERUxBWSkpO1xuICBkb21EZWxlZ2F0ZS5iaW5kKGNvbnRhaW5lciwgJ2lucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBbY29udGVudGVkaXRhYmxlXScsICdjaGFuZ2UnLCBoYW5kbGVDaGFuZ2UpO1xuXG4gIC8vIGhhbmRsZSBrZXkgZXZlbnRzXG4gIGRvbURlbGVnYXRlLmJpbmQoY29udGFpbmVyLCAnc2VsZWN0JywgJ2tleWRvd24nLCBmdW5jdGlvbihlKSB7XG5cbiAgICAvLyBERUxcbiAgICBpZiAoZS5rZXlDb2RlID09PSA0Nikge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGRvbURlbGVnYXRlLmJpbmQoY29udGFpbmVyLCAnW2RhdGEtYWN0aW9uXScsICdjbGljaycsIGZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcblxuICAgIC8vIHRyaWdnZXJzIG9uIGFsbCBpbnB1dHNcbiAgICB2YXIgaW5wdXROb2RlID0gZXZlbnQuZGVsZWdhdGVUYXJnZXQsXG4gICAgICAgIGVudHJ5Tm9kZSA9IGRvbUNsb3Nlc3QoaW5wdXROb2RlLCAnW2RhdGEtZW50cnldJyk7XG5cbiAgICB2YXIgYWN0aW9uSWQgPSBkb21BdHRyKGlucHV0Tm9kZSwgJ2RhdGEtYWN0aW9uJyksXG4gICAgICAgIGVudHJ5SWQgPSBkb21BdHRyKGVudHJ5Tm9kZSwgJ2RhdGEtZW50cnknKTtcblxuICAgIHZhciBlbnRyeSA9IHNlbGYuZ2V0RW50cnkoZW50cnlJZCk7XG5cbiAgICB2YXIgaXNFbnRyeURpcnR5ID0gc2VsZi5leGVjdXRlQWN0aW9uKGVudHJ5LCBlbnRyeU5vZGUsIGFjdGlvbklkLCBldmVudCk7XG5cbiAgICBpZiAoaXNFbnRyeURpcnR5KSB7XG4gICAgICB2YXIgdmFsdWVzID0gZ2V0Rm9ybUNvbnRyb2xWYWx1ZXMoZW50cnlOb2RlKTtcblxuICAgICAgc2VsZi5hcHBseUNoYW5nZXMoZW50cnksIHZhbHVlcywgZW50cnlOb2RlKTtcbiAgICB9XG5cbiAgICBzZWxmLnVwZGF0ZVN0YXRlKGVudHJ5LCBlbnRyeU5vZGUpO1xuICB9KTtcblxuICBmdW5jdGlvbiBoYW5kbGVJbnB1dChldmVudCwgZWxlbWVudCkge1xuICAgIC8vIHRyaWdnZXJzIG9uIGFsbCBpbnB1dHNcbiAgICB2YXIgaW5wdXROb2RlID0gZXZlbnQuZGVsZWdhdGVUYXJnZXQ7XG5cbiAgICB2YXIgZW50cnlOb2RlID0gZG9tQ2xvc2VzdChpbnB1dE5vZGUsICdbZGF0YS1lbnRyeV0nKTtcblxuICAgIC8vIG9ubHkgd29yayBvbiBkYXRhIGVudHJpZXNcbiAgICBpZiAoIWVudHJ5Tm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBldmVudEhhbmRsZXJJZCA9IGRvbUF0dHIoaW5wdXROb2RlLCAnZGF0YS1ibHVyJyksXG4gICAgICAgIGVudHJ5SWQgPSBkb21BdHRyKGVudHJ5Tm9kZSwgJ2RhdGEtZW50cnknKTtcblxuICAgIHZhciBlbnRyeSA9IHNlbGYuZ2V0RW50cnkoZW50cnlJZCk7XG5cbiAgICB2YXIgaXNFbnRyeURpcnR5ID0gc2VsZi5leGVjdXRlQWN0aW9uKGVudHJ5LCBlbnRyeU5vZGUsIGV2ZW50SGFuZGxlcklkLCBldmVudCk7XG5cbiAgICBpZiAoaXNFbnRyeURpcnR5KSB7XG4gICAgICB2YXIgdmFsdWVzID0gZ2V0Rm9ybUNvbnRyb2xWYWx1ZXMoZW50cnlOb2RlKTtcblxuICAgICAgc2VsZi5hcHBseUNoYW5nZXMoZW50cnksIHZhbHVlcywgZW50cnlOb2RlKTtcbiAgICB9XG5cbiAgICBzZWxmLnVwZGF0ZVN0YXRlKGVudHJ5LCBlbnRyeU5vZGUpO1xuICB9XG5cbiAgZG9tRGVsZWdhdGUuYmluZChjb250YWluZXIsICdbZGF0YS1ibHVyXScsICdibHVyJywgaGFuZGxlSW5wdXQsIHRydWUpO1xuXG4gIC8vIG1ha2UgdGFiIGxpbmtzIGludGVyYWN0aXZlXG4gIGRvbURlbGVnYXRlLmJpbmQoY29udGFpbmVyLCAnLmJwcC1wcm9wZXJ0aWVzLXRhYnMtbGlua3MgW2RhdGEtdGFiLXRhcmdldF0nLCAnY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICB2YXIgZGVsZWdhdGVUYXJnZXQgPSBldmVudC5kZWxlZ2F0ZVRhcmdldDtcblxuICAgIHZhciB0YWJJZCA9IGRvbUF0dHIoZGVsZWdhdGVUYXJnZXQsICdkYXRhLXRhYi10YXJnZXQnKTtcblxuICAgIC8vIGFjdGl2YXRlIHRhYiBvbiBsaW5rIGNsaWNrXG4gICAgc2VsZi5hY3RpdmF0ZVRhYih0YWJJZCk7XG4gIH0pO1xuXG59O1xuXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLnVwZGF0ZVN0YXRlID0gZnVuY3Rpb24oZW50cnksIGVudHJ5Tm9kZSkge1xuICB0aGlzLnVwZGF0ZVNob3coZW50cnksIGVudHJ5Tm9kZSk7XG4gIHRoaXMudXBkYXRlRGlzYWJsZShlbnRyeSwgZW50cnlOb2RlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBlbnRyeSBub2RlIGluIHRoZSBET01cbiAqL1xuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS51cGRhdGVTaG93ID0gZnVuY3Rpb24oZW50cnksIG5vZGUpIHtcblxuICB2YXIgY3VycmVudCA9IHRoaXMuX2N1cnJlbnQ7XG5cbiAgaWYgKCFjdXJyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNob3dOb2RlcyA9IGRvbVF1ZXJ5QWxsKCdbZGF0YS1zaG93XScsIG5vZGUpIHx8IFtdO1xuXG4gIGZvckVhY2goc2hvd05vZGVzLCBmdW5jdGlvbihzaG93Tm9kZSkge1xuXG4gICAgdmFyIGV4cHIgPSBkb21BdHRyKHNob3dOb2RlLCAnZGF0YS1zaG93Jyk7XG4gICAgdmFyIGZuID0gZ2V0KGVudHJ5LCBleHByKTtcbiAgICBpZiAoZm4pIHtcbiAgICAgIHZhciBzY29wZSA9IGRvbUNsb3Nlc3Qoc2hvd05vZGUsICdbZGF0YS1zY29wZV0nKSB8fCBub2RlO1xuICAgICAgdmFyIHNob3VsZFNob3cgPSBmbihjdXJyZW50LmVsZW1lbnQsIG5vZGUsIHNob3dOb2RlLCBzY29wZSkgfHwgZmFsc2U7XG4gICAgICBpZiAoc2hvdWxkU2hvdykge1xuICAgICAgICBkb21DbGFzc2VzKHNob3dOb2RlKS5yZW1vdmUoSElERV9DTEFTUyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb21DbGFzc2VzKHNob3dOb2RlKS5hZGQoSElERV9DTEFTUyk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKlxuICogRXZhbHVhdGVzIGEgZ2l2ZW4gZnVuY3Rpb24uIElmIGl0IHJldHVybnMgdHJ1ZSwgdGhlbiB0aGVcbiAqIG5vZGUgaXMgbWFya2VkIGFzIFwiZGlzYWJsZWRcIi5cbiAqL1xuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS51cGRhdGVEaXNhYmxlID0gZnVuY3Rpb24oZW50cnksIG5vZGUpIHtcbiAgdmFyIGN1cnJlbnQgPSB0aGlzLl9jdXJyZW50O1xuXG4gIGlmICghY3VycmVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBub2RlcyA9IGRvbVF1ZXJ5QWxsKCdbZGF0YS1kaXNhYmxlXScsIG5vZGUpIHx8IFtdO1xuXG4gIGZvckVhY2gobm9kZXMsIGZ1bmN0aW9uKGN1cnJlbnROb2RlKSB7XG4gICAgdmFyIGV4cHIgPSBkb21BdHRyKGN1cnJlbnROb2RlLCAnZGF0YS1kaXNhYmxlJyk7XG4gICAgdmFyIGZuID0gZ2V0KGVudHJ5LCBleHByKTtcbiAgICBpZiAoZm4pIHtcbiAgICAgIHZhciBzY29wZSA9IGRvbUNsb3Nlc3QoY3VycmVudE5vZGUsICdbZGF0YS1zY29wZV0nKSB8fCBub2RlO1xuICAgICAgdmFyIHNob3VsZERpc2FibGUgPSBmbihjdXJyZW50LmVsZW1lbnQsIG5vZGUsIGN1cnJlbnROb2RlLCBzY29wZSkgfHwgZmFsc2U7XG4gICAgICBkb21BdHRyKGN1cnJlbnROb2RlLCAnZGlzYWJsZWQnLCBzaG91bGREaXNhYmxlID8gJycgOiBudWxsKTtcbiAgICB9XG4gIH0pO1xufTtcblxuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5leGVjdXRlQWN0aW9uID0gZnVuY3Rpb24oZW50cnksIGVudHJ5Tm9kZSwgYWN0aW9uSWQsIGV2ZW50KSB7XG4gIHZhciBjdXJyZW50ID0gdGhpcy5fY3VycmVudDtcblxuICBpZiAoIWN1cnJlbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZm4gPSBnZXQoZW50cnksIGFjdGlvbklkKTtcbiAgaWYgKGZuKSB7XG4gICAgdmFyIHNjb3BlTm9kZSA9IGRvbUNsb3Nlc3QoZXZlbnQudGFyZ2V0LCAnW2RhdGEtc2NvcGVdJykgfHwgZW50cnlOb2RlO1xuICAgIHJldHVybiBmbi5hcHBseShlbnRyeSwgWyBjdXJyZW50LmVsZW1lbnQsIGVudHJ5Tm9kZSwgZXZlbnQsIHNjb3BlTm9kZSBdKTtcbiAgfVxufTtcblxuLyoqXG4gKiBBcHBseSBjaGFuZ2VzIHRvIHRoZSBidXNpbmVzcyBvYmplY3QgYnkgZXhlY3V0aW5nIGEgY29tbWFuZFxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLmFwcGx5Q2hhbmdlcyA9IGZ1bmN0aW9uKGVudHJ5LCB2YWx1ZXMsIGNvbnRhaW5lckVsZW1lbnQpIHtcblxuICB2YXIgZWxlbWVudCA9IHRoaXMuX2N1cnJlbnQuZWxlbWVudDtcblxuICAvLyBlbnN1cmUgd2Ugb25seSB1cGRhdGUgdGhlIG1vZGVsIGlmIHdlIGdvdCBkaXJ0eSBjaGFuZ2VzXG4gIGlmICh2YWx1ZXNFcXVhbCh2YWx1ZXMsIGVudHJ5Lm9sZFZhbHVlcykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY29tbWFuZCA9IGVudHJ5LnNldChlbGVtZW50LCB2YWx1ZXMsIGNvbnRhaW5lckVsZW1lbnQpO1xuXG4gIHZhciBjb21tYW5kVG9FeGVjdXRlO1xuXG4gIGlmIChpc0FycmF5KGNvbW1hbmQpKSB7XG4gICAgaWYgKGNvbW1hbmQubGVuZ3RoKSB7XG4gICAgICBjb21tYW5kVG9FeGVjdXRlID0ge1xuICAgICAgICBjbWQ6ICdwcm9wZXJ0aWVzLXBhbmVsLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLFxuICAgICAgICBjb250ZXh0OiBmbGF0dGVuRGVlcChjb21tYW5kKVxuICAgICAgfTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29tbWFuZFRvRXhlY3V0ZSA9IGNvbW1hbmQ7XG4gIH1cblxuICBpZiAoY29tbWFuZFRvRXhlY3V0ZSkge1xuICAgIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKGNvbW1hbmRUb0V4ZWN1dGUuY21kLCBjb21tYW5kVG9FeGVjdXRlLmNvbnRleHQgfHwgeyBlbGVtZW50IDogZWxlbWVudCB9KTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnVwZGF0ZShlbGVtZW50KTtcbiAgfVxufTtcblxuXG4vKipcbiAqIGFwcGx5IHZhbGlkYXRpb24gZXJyb3JzIGluIHRoZSBET00gYW5kIHNob3cgb3IgcmVtb3ZlIGFuIGVycm9yIG1lc3NhZ2UgbmVhciB0aGUgZW50cnkgbm9kZS5cbiAqL1xuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5hcHBseVZhbGlkYXRpb25FcnJvcnMgPSBmdW5jdGlvbih2YWxpZGF0aW9uRXJyb3JzLCBlbnRyeU5vZGUpIHtcblxuICB2YXIgdmFsaWQgPSB0cnVlO1xuXG4gIHZhciBjb250cm9sTm9kZXMgPSBnZXRGb3JtQ29udHJvbHMoZW50cnlOb2RlLCB0cnVlKTtcblxuICBmb3JFYWNoKGNvbnRyb2xOb2RlcywgZnVuY3Rpb24oY29udHJvbE5vZGUpIHtcblxuICAgIHZhciBuYW1lID0gZG9tQXR0cihjb250cm9sTm9kZSwgJ25hbWUnKSB8fCBkb21BdHRyKGNvbnRyb2xOb2RlLCAnZGF0YS1uYW1lJyk7XG5cbiAgICB2YXIgZXJyb3IgPSB2YWxpZGF0aW9uRXJyb3JzICYmIHZhbGlkYXRpb25FcnJvcnNbbmFtZV07XG5cbiAgICB2YXIgZXJyb3JNZXNzYWdlTm9kZSA9IGRvbVF1ZXJ5KCcuYnBwLWVycm9yLW1lc3NhZ2UnLCBjb250cm9sTm9kZS5wYXJlbnROb2RlKTtcblxuICAgIGlmIChlcnJvcikge1xuICAgICAgdmFsaWQgPSBmYWxzZTtcblxuICAgICAgaWYgKCFlcnJvck1lc3NhZ2VOb2RlKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZU5vZGUgPSBkb21pZnkoJzxkaXY+PC9kaXY+Jyk7XG5cbiAgICAgICAgZG9tQ2xhc3NlcyhlcnJvck1lc3NhZ2VOb2RlKS5hZGQoJ2JwcC1lcnJvci1tZXNzYWdlJyk7XG5cbiAgICAgICAgLy8gaW5zZXJ0IGVycm9yTWVzc2FnZU5vZGUgYWZ0ZXIgY29udHJvbE5vZGVcbiAgICAgICAgY29udHJvbE5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZXJyb3JNZXNzYWdlTm9kZSwgY29udHJvbE5vZGUubmV4dFNpYmxpbmcpO1xuICAgICAgfVxuXG4gICAgICBlcnJvck1lc3NhZ2VOb2RlLnRleHRDb250ZW50ID0gZXJyb3I7XG5cbiAgICAgIGRvbUNsYXNzZXMoY29udHJvbE5vZGUpLmFkZCgnaW52YWxpZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb21DbGFzc2VzKGNvbnRyb2xOb2RlKS5yZW1vdmUoJ2ludmFsaWQnKTtcblxuICAgICAgaWYgKGVycm9yTWVzc2FnZU5vZGUpIHtcbiAgICAgICAgY29udHJvbE5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlcnJvck1lc3NhZ2VOb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB2YWxpZDtcbn07XG5cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZW50cnkgY29udGFpbnMgdmFsaWQgaW5wdXRcbiAqL1xuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudHJ5LCB2YWx1ZXMsIGVudHJ5Tm9kZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIGN1cnJlbnQgPSB0aGlzLl9jdXJyZW50O1xuXG4gIHZhciB2YWxpZCA9IHRydWU7XG5cbiAgZW50cnlOb2RlID0gZW50cnlOb2RlIHx8IGRvbVF1ZXJ5KCdbZGF0YS1lbnRyeT1cIicgKyBlbnRyeS5pZCArICdcIl0nLCBjdXJyZW50LnBhbmVsKTtcblxuICBpZiAodmFsdWVzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICB2YXIgbGlzdENvbnRhaW5lciA9IGRvbVF1ZXJ5KCdbZGF0YS1saXN0LWVudHJ5LWNvbnRhaW5lcl0nLCBlbnRyeU5vZGUpLFxuICAgICAgICBsaXN0RW50cnlOb2RlcyA9IGxpc3RDb250YWluZXIuY2hpbGRyZW4gfHwgW107XG5cbiAgICAvLyBjcmVhdGUgbmV3IGVsZW1lbnRzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBsaXN0VmFsdWUgPSB2YWx1ZXNbaV07XG5cbiAgICAgIGlmIChlbnRyeS52YWxpZGF0ZUxpc3RJdGVtKSB7XG5cbiAgICAgICAgdmFyIHZhbGlkYXRpb25FcnJvcnMgPSBlbnRyeS52YWxpZGF0ZUxpc3RJdGVtKGN1cnJlbnQuZWxlbWVudCwgbGlzdFZhbHVlLCBlbnRyeU5vZGUsIGkpLFxuICAgICAgICAgICAgbGlzdEVudHJ5Tm9kZSA9IGxpc3RFbnRyeU5vZGVzW2ldO1xuXG4gICAgICAgIHZhbGlkID0gc2VsZi5hcHBseVZhbGlkYXRpb25FcnJvcnModmFsaWRhdGlvbkVycm9ycywgbGlzdEVudHJ5Tm9kZSkgJiYgdmFsaWQ7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChlbnRyeS52YWxpZGF0ZSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzID0gZW50cnkudmFsaWRhdGUoY3VycmVudC5lbGVtZW50LCB2YWx1ZXMsIGVudHJ5Tm9kZSk7XG5cbiAgICAgIHZhbGlkID0gc2VsZi5hcHBseVZhbGlkYXRpb25FcnJvcnModGhpcy52YWxpZGF0aW9uRXJyb3JzLCBlbnRyeU5vZGUpICYmIHZhbGlkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZDtcbn07XG5cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUuZ2V0RW50cnkgPSBmdW5jdGlvbihpZCkge1xuICByZXR1cm4gdGhpcy5fY3VycmVudCAmJiB0aGlzLl9jdXJyZW50LmVudHJpZXNbaWRdO1xufTtcblxudmFyIGZsYXR0ZW5EZWVwID0gcmVxdWlyZSgnbG9kYXNoL2ZsYXR0ZW5EZWVwJyksXG4gICAga2V5QnkgPSByZXF1aXJlKCdsb2Rhc2gva2V5QnknKSxcbiAgICBtYXAgPSByZXF1aXJlKCdsb2Rhc2gvbWFwJyk7XG5cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUuX2NyZWF0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIHRhYnMpIHtcblxuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBjb250YWluZXJOb2RlID0gdGhpcy5fY29udGFpbmVyO1xuXG4gIHZhciBwYW5lbE5vZGUgPSB0aGlzLl9jcmVhdGVQYW5lbChlbGVtZW50LCB0YWJzKTtcblxuICBjb250YWluZXJOb2RlLmFwcGVuZENoaWxkKHBhbmVsTm9kZSk7XG5cbiAgdmFyIGVudHJpZXMgPSBleHRyYWN0RW50cmllcyh0YWJzKTtcbiAgdmFyIGdyb3VwcyA9IGV4dHJhY3RHcm91cHModGFicyk7XG5cbiAgcmV0dXJuIHtcbiAgICB0YWJzOiB0YWJzLFxuICAgIGdyb3VwczogZ3JvdXBzLFxuICAgIGVudHJpZXM6IGVudHJpZXMsXG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBwYW5lbDogcGFuZWxOb2RlXG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB2YXJpYWJsZSBwYXJ0cyBvZiB0aGUgZW50cnkgbm9kZSBvbiBlbGVtZW50IGNoYW5nZXMuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtFbnRyeURlc2NyaXB0b3J9IGVudHJ5XG4gKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbnRyeU5vZGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZHhcbiAqL1xuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5fYmluZFRlbXBsYXRlID0gZnVuY3Rpb24oZWxlbWVudCwgZW50cnksIHZhbHVlcywgZW50cnlOb2RlLCBpZHgpIHtcblxuICB2YXIgZXZlbnRCdXMgPSB0aGlzLl9ldmVudEJ1cztcblxuICBmdW5jdGlvbiBpc1Byb3BlcnR5RWRpdGFibGUoZW50cnksIHByb3BlcnR5TmFtZSkge1xuICAgIHJldHVybiBldmVudEJ1cy5maXJlKCdwcm9wZXJ0aWVzUGFuZWwuaXNQcm9wZXJ0eUVkaXRhYmxlJywge1xuICAgICAgZW50cnk6IGVudHJ5LFxuICAgICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWUsXG4gICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgfSk7XG4gIH1cblxuICB2YXIgaW5wdXROb2RlcyA9IGdldFByb3BlcnR5UGxhY2Vob2xkZXJzKGVudHJ5Tm9kZSk7XG5cbiAgZm9yRWFjaChpbnB1dE5vZGVzLCBmdW5jdGlvbihub2RlKSB7XG5cbiAgICB2YXIgbmFtZSxcbiAgICAgICAgbmV3VmFsdWUsXG4gICAgICAgIGVkaXRhYmxlO1xuXG4gICAgLy8gd2UgZGVhbCB3aXRoIGFuIGlucHV0IGVsZW1lbnRcbiAgICBpZiAoJ3ZhbHVlJyBpbiBub2RlIHx8IGlzQ29udGVudEVkaXRhYmxlKG5vZGUpID09PSAndHJ1ZScpIHtcbiAgICAgIG5hbWUgPSBkb21BdHRyKG5vZGUsICduYW1lJykgfHwgZG9tQXR0cihub2RlLCAnZGF0YS1uYW1lJyk7XG4gICAgICBuZXdWYWx1ZSA9IHZhbHVlc1tuYW1lXTtcblxuICAgICAgZWRpdGFibGUgPSBpc1Byb3BlcnR5RWRpdGFibGUoZW50cnksIG5hbWUpO1xuICAgICAgaWYgKGVkaXRhYmxlICYmIGVudHJ5LmVkaXRhYmxlKSB7XG4gICAgICAgIGVkaXRhYmxlID0gZW50cnkuZWRpdGFibGUoZWxlbWVudCwgZW50cnlOb2RlLCBub2RlLCBuYW1lLCBuZXdWYWx1ZSwgaWR4KTtcbiAgICAgIH1cblxuICAgICAgZG9tQXR0cihub2RlLCAncmVhZG9ubHknLCBlZGl0YWJsZSA/IG51bGwgOiAnJyk7XG4gICAgICBkb21BdHRyKG5vZGUsICdkaXNhYmxlZCcsIGVkaXRhYmxlID8gbnVsbCA6ICcnKTtcblxuICAgICAgLy8gdGFrZSBmdWxsIGNvbnRyb2wgb3ZlciBzZXR0aW5nIHRoZSB2YWx1ZVxuICAgICAgLy8gYW5kIHBvc3NpYmx5IHVwZGF0aW5nIHRoZSBpbnB1dCBpbiBlbnRyeSNzZXRDb250cm9sVmFsdWVcbiAgICAgIGlmIChlbnRyeS5zZXRDb250cm9sVmFsdWUpIHtcbiAgICAgICAgZW50cnkuc2V0Q29udHJvbFZhbHVlKGVsZW1lbnQsIGVudHJ5Tm9kZSwgbm9kZSwgbmFtZSwgbmV3VmFsdWUsIGlkeCk7XG4gICAgICB9IGVsc2UgaWYgKGlzVG9nZ2xlKG5vZGUpKSB7XG4gICAgICAgIHNldFRvZ2dsZVZhbHVlKG5vZGUsIG5ld1ZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNTZWxlY3Qobm9kZSkpIHtcbiAgICAgICAgc2V0U2VsZWN0VmFsdWUobm9kZSwgbmV3VmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0SW5wdXRWYWx1ZShub2RlLCBuZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gd2UgZGVhbCB3aXRoIHNvbWUgbm9uLWVkaXRhYmxlIGh0bWwgZWxlbWVudFxuICAgIGVsc2Uge1xuICAgICAgbmFtZSA9IGRvbUF0dHIobm9kZSwgJ2RhdGEtdmFsdWUnKTtcbiAgICAgIG5ld1ZhbHVlID0gdmFsdWVzW25hbWVdO1xuICAgICAgaWYgKGVudHJ5LnNldENvbnRyb2xWYWx1ZSkge1xuICAgICAgICBlbnRyeS5zZXRDb250cm9sVmFsdWUoZWxlbWVudCwgZW50cnlOb2RlLCBub2RlLCBuYW1lLCBuZXdWYWx1ZSwgaWR4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFRleHRWYWx1ZShub2RlLCBuZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn07XG5cbi8vIFRPRE8obmlra3UpOiBXVEYgZnJlYWtpbmcgbmFtZT8gQ2hhbmdlIC8gY2xhcmlmeS5cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUuX3VwZGF0ZUFjdGl2YXRpb24gPSBmdW5jdGlvbihjdXJyZW50KSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICB2YXIgZXZlbnRCdXMgPSB0aGlzLl9ldmVudEJ1cztcblxuICB2YXIgZWxlbWVudCA9IGN1cnJlbnQuZWxlbWVudDtcblxuICBmdW5jdGlvbiBpc0VudHJ5VmlzaWJsZShlbnRyeSkge1xuICAgIHJldHVybiBldmVudEJ1cy5maXJlKCdwcm9wZXJ0aWVzUGFuZWwuaXNFbnRyeVZpc2libGUnLCB7XG4gICAgICBlbnRyeTogZW50cnksXG4gICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc0dyb3VwVmlzaWJsZShncm91cCwgZWxlbWVudCwgZ3JvdXBOb2RlKSB7XG4gICAgaWYgKHR5cGVvZiBncm91cC5lbmFibGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gZ3JvdXAuZW5hYmxlZChlbGVtZW50LCBncm91cE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1RhYlZpc2libGUodGFiLCBlbGVtZW50KSB7XG4gICAgaWYgKHR5cGVvZiB0YWIuZW5hYmxlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHRhYi5lbmFibGVkKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGVWaXNpYmxlKG5vZGUsIHZpc2libGUpIHtcbiAgICBkb21DbGFzc2VzKG5vZGUpLnRvZ2dsZShISURFX0NMQVNTLCAhdmlzaWJsZSk7XG4gIH1cblxuICAvLyBjaGVjayB3aGV0aGVyIHRoZSBhY3RpdmUgdGFiIGlzIHZpc2libGVcbiAgLy8gaWYgbm90OiBzZXQgdGhlIGZpcnN0IHRhYiBhcyBhY3RpdmUgdGFiXG4gIGZ1bmN0aW9uIGNoZWNrQWN0aXZlVGFiVmlzaWJpbGl0eShub2RlLCB2aXNpYmxlKSB7XG4gICAgdmFyIGlzQWN0aXZlID0gZG9tQ2xhc3Nlcyhub2RlKS5oYXMoJ2JwcC1hY3RpdmUnKTtcbiAgICBpZiAoIXZpc2libGUgJiYgaXNBY3RpdmUpIHtcbiAgICAgIHNlbGYuYWN0aXZhdGVUYWIoY3VycmVudC50YWJzWzBdKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVMYWJlbChlbGVtZW50LCBzZWxlY3RvciwgdGV4dCkge1xuICAgIHZhciBsYWJlbE5vZGUgPSBkb21RdWVyeShzZWxlY3RvciwgZWxlbWVudCk7XG5cbiAgICBpZiAoIWxhYmVsTm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxhYmVsTm9kZS50ZXh0Q29udGVudCA9IHRleHQ7XG4gIH1cblxuICB2YXIgcGFuZWxOb2RlID0gY3VycmVudC5wYW5lbDtcblxuICBmb3JFYWNoKGN1cnJlbnQudGFicywgZnVuY3Rpb24odGFiKSB7XG5cbiAgICB2YXIgdGFiTm9kZSA9IGRvbVF1ZXJ5KCdbZGF0YS10YWI9JyArIHRhYi5pZCArICddJywgcGFuZWxOb2RlKTtcbiAgICB2YXIgdGFiTGlua05vZGUgPSBkb21RdWVyeSgnW2RhdGEtdGFiLXRhcmdldD0nICsgdGFiLmlkICsgJ10nLCBwYW5lbE5vZGUpLnBhcmVudE5vZGU7XG5cbiAgICB2YXIgdGFiVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgZm9yRWFjaCh0YWIuZ3JvdXBzLCBmdW5jdGlvbihncm91cCkge1xuXG4gICAgICB2YXIgZ3JvdXBWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgIHZhciBncm91cE5vZGUgPSBkb21RdWVyeSgnW2RhdGEtZ3JvdXA9JyArIGdyb3VwLmlkICsgJ10nLCB0YWJOb2RlKTtcblxuICAgICAgZm9yRWFjaChncm91cC5lbnRyaWVzLCBmdW5jdGlvbihlbnRyeSkge1xuXG4gICAgICAgIHZhciBlbnRyeU5vZGUgPSBkb21RdWVyeSgnW2RhdGEtZW50cnk9XCInICsgZW50cnkuaWQgKyAnXCJdJywgZ3JvdXBOb2RlKTtcblxuICAgICAgICB2YXIgZW50cnlWaXNpYmxlID0gaXNFbnRyeVZpc2libGUoZW50cnkpO1xuXG4gICAgICAgIGdyb3VwVmlzaWJsZSA9IGdyb3VwVmlzaWJsZSB8fCBlbnRyeVZpc2libGU7XG5cbiAgICAgICAgdG9nZ2xlVmlzaWJsZShlbnRyeU5vZGUsIGVudHJ5VmlzaWJsZSk7XG5cbiAgICAgICAgdmFyIHZhbHVlcyA9ICdnZXQnIGluIGVudHJ5ID8gZW50cnkuZ2V0KGVsZW1lbnQsIGVudHJ5Tm9kZSkgOiB7fTtcblxuICAgICAgICBpZiAodmFsdWVzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICB2YXIgbGlzdEVudHJ5Q29udGFpbmVyID0gZG9tUXVlcnkoJ1tkYXRhLWxpc3QtZW50cnktY29udGFpbmVyXScsIGVudHJ5Tm9kZSk7XG4gICAgICAgICAgdmFyIGV4aXN0aW5nRWxlbWVudHMgPSBsaXN0RW50cnlDb250YWluZXIuY2hpbGRyZW4gfHwgW107XG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGxpc3RWYWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAgICAgICAgIHZhciBsaXN0SXRlbU5vZGUgPSBleGlzdGluZ0VsZW1lbnRzW2ldO1xuICAgICAgICAgICAgaWYgKCFsaXN0SXRlbU5vZGUpIHtcbiAgICAgICAgICAgICAgbGlzdEl0ZW1Ob2RlID0gZG9taWZ5KGVudHJ5LmNyZWF0ZUxpc3RFbnRyeVRlbXBsYXRlKGxpc3RWYWx1ZSwgaSwgbGlzdEVudHJ5Q29udGFpbmVyKSk7XG4gICAgICAgICAgICAgIGxpc3RFbnRyeUNvbnRhaW5lci5hcHBlbmRDaGlsZChsaXN0SXRlbU5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG9tQXR0cihsaXN0SXRlbU5vZGUsICdkYXRhLWluZGV4JywgaSk7XG5cbiAgICAgICAgICAgIHNlbGYuX2JpbmRUZW1wbGF0ZShlbGVtZW50LCBlbnRyeSwgbGlzdFZhbHVlLCBsaXN0SXRlbU5vZGUsIGkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBlbnRyaWVzVG9SZW1vdmUgPSBleGlzdGluZ0VsZW1lbnRzLmxlbmd0aCAtIHZhbHVlcy5sZW5ndGg7XG5cbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGVudHJpZXNUb1JlbW92ZTsgaisrKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgb3JwaGFuZWQgZWxlbWVudFxuICAgICAgICAgICAgbGlzdEVudHJ5Q29udGFpbmVyLnJlbW92ZUNoaWxkKGxpc3RFbnRyeUNvbnRhaW5lci5sYXN0Q2hpbGQpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlbGYuX2JpbmRUZW1wbGF0ZShlbGVtZW50LCBlbnRyeSwgdmFsdWVzLCBlbnRyeU5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXBkYXRlIGNvbmRpdGlvbmFsbHkgdmlzaWJsZSBlbGVtZW50c1xuICAgICAgICBzZWxmLnVwZGF0ZVN0YXRlKGVudHJ5LCBlbnRyeU5vZGUpO1xuICAgICAgICBzZWxmLnZhbGlkYXRlKGVudHJ5LCB2YWx1ZXMsIGVudHJ5Tm9kZSk7XG5cbiAgICAgICAgLy8gcmVtZW1iZXIgaW5pdGlhbCBzdGF0ZSBmb3IgbGF0ZXIgZGlydHkgY2hlY2tpbmdcbiAgICAgICAgZW50cnkub2xkVmFsdWVzID0gZ2V0Rm9ybUNvbnRyb2xWYWx1ZXMoZW50cnlOb2RlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodHlwZW9mIGdyb3VwLmxhYmVsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHVwZGF0ZUxhYmVsKGdyb3VwTm9kZSwgJy5ncm91cC1sYWJlbCcsIGdyb3VwLmxhYmVsKGVsZW1lbnQsIGdyb3VwTm9kZSkpO1xuICAgICAgfVxuXG4gICAgICBncm91cFZpc2libGUgPSBncm91cFZpc2libGUgJiYgaXNHcm91cFZpc2libGUoZ3JvdXAsIGVsZW1lbnQsIGdyb3VwTm9kZSk7XG5cbiAgICAgIHRhYlZpc2libGUgPSB0YWJWaXNpYmxlIHx8IGdyb3VwVmlzaWJsZTtcblxuICAgICAgdG9nZ2xlVmlzaWJsZShncm91cE5vZGUsIGdyb3VwVmlzaWJsZSk7XG4gICAgfSk7XG5cbiAgICB0YWJWaXNpYmxlID0gdGFiVmlzaWJsZSAmJiBpc1RhYlZpc2libGUodGFiLCBlbGVtZW50KTtcblxuICAgIHRvZ2dsZVZpc2libGUodGFiTm9kZSwgdGFiVmlzaWJsZSk7XG4gICAgdG9nZ2xlVmlzaWJsZSh0YWJMaW5rTm9kZSwgdGFiVmlzaWJsZSk7XG5cbiAgICBjaGVja0FjdGl2ZVRhYlZpc2liaWxpdHkodGFiTm9kZSwgdGFiVmlzaWJsZSk7XG4gIH0pO1xuXG4gIC8vIGluamVjdCBlbGVtZW50cyBpZCBpbnRvIGhlYWRlclxuICB1cGRhdGVMYWJlbChwYW5lbE5vZGUsICdbZGF0YS1sYWJlbC1pZF0nLCBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5pZCB8fCAnJyk7XG59O1xuXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLl9jcmVhdGVQYW5lbCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHRhYnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBwYW5lbE5vZGUgPSBkb21pZnkoJzxkaXYgY2xhc3M9XCJicHAtcHJvcGVydGllc1wiPjwvZGl2PicpLFxuICAgICAgaGVhZGVyTm9kZSA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImJwcC1wcm9wZXJ0aWVzLWhlYWRlclwiPicgK1xuICAgICAgICAnPGRpdiBjbGFzcz1cImxhYmVsXCIgZGF0YS1sYWJlbC1pZD48L2Rpdj4nICtcbiAgICAgICAgJzxkaXYgY2xhc3M9XCJzZWFyY2hcIj4nICtcbiAgICAgICAgICAnPGlucHV0IHR5cGU9XCJzZWFyY2hcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBmb3IgcHJvcGVydHlcIiAvPicgK1xuICAgICAgICAgICc8YnV0dG9uPjxzcGFuPlNlYXJjaDwvc3Bhbj48L2J1dHRvbj4nICtcbiAgICAgICAgJzwvZGl2PicgK1xuICAgICAgJzwvZGl2PicpLFxuICAgICAgdGFiQmFyTm9kZSA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImJwcC1wcm9wZXJ0aWVzLXRhYi1iYXJcIj48L2Rpdj4nKSxcbiAgICAgIHRhYkxpbmtzTm9kZSA9IGRvbWlmeSgnPHVsIGNsYXNzPVwiYnBwLXByb3BlcnRpZXMtdGFicy1saW5rc1wiPjwvdWw+JyksXG4gICAgICB0YWJDb250YWluZXJOb2RlID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiYnBwLXByb3BlcnRpZXMtdGFicy1jb250YWluZXJcIj48L2Rpdj4nKTtcblxuICBwYW5lbE5vZGUuYXBwZW5kQ2hpbGQoaGVhZGVyTm9kZSk7XG5cbiAgZm9yRWFjaCh0YWJzLCBmdW5jdGlvbih0YWIsIHRhYkluZGV4KSB7XG5cbiAgICBpZiAoIXRhYi5pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0YWIgbXVzdCBoYXZlIGFuIGlkJyk7XG4gICAgfVxuXG4gICAgdmFyIHRhYk5vZGUgPSBkb21pZnkoJzxkaXYgY2xhc3M9XCJicHAtcHJvcGVydGllcy10YWJcIiBkYXRhLXRhYj1cIicgKyBlc2NhcGVIVE1MKHRhYi5pZCkgKyAnXCI+PC9kaXY+JyksXG4gICAgICAgIHRhYkxpbmtOb2RlID0gZG9taWZ5KCc8bGkgY2xhc3M9XCJicHAtcHJvcGVydGllcy10YWItbGlua1wiPicgK1xuICAgICAgICAgICc8YSBocmVmIGRhdGEtdGFiLXRhcmdldD1cIicgKyBlc2NhcGVIVE1MKHRhYi5pZCkgKyAnXCI+JyArIGVzY2FwZUhUTUwodGFiLmxhYmVsKSArICc8L2E+JyArXG4gICAgICAgICc8L2xpPicpO1xuXG4gICAgdmFyIGdyb3VwcyA9IHRhYi5ncm91cHM7XG5cbiAgICBmb3JFYWNoKGdyb3VwcywgZnVuY3Rpb24oZ3JvdXApIHtcblxuICAgICAgaWYgKCFncm91cC5pZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dyb3VwIG11c3QgaGF2ZSBhbiBpZCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZ3JvdXBOb2RlID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiYnBwLXByb3BlcnRpZXMtZ3JvdXBcIiBkYXRhLWdyb3VwPVwiJyArIGVzY2FwZUhUTUwoZ3JvdXAuaWQpICsgJ1wiPicgK1xuICAgICAgICAgICc8c3BhbiBjbGFzcz1cImdyb3VwLXRvZ2dsZVwiPjwvc3Bhbj4nICtcbiAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJncm91cC1sYWJlbFwiPicgKyBlc2NhcGVIVE1MKGdyb3VwLmxhYmVsKSArICc8L3NwYW4+JyArXG4gICAgICAgICc8L2Rpdj4nKTtcblxuICAgICAgLy8gVE9ETyhucmUpOiB1c2UgZXZlbnQgZGVsZWdhdGlvbiB0byBoYW5kbGUgdGhhdC4uLlxuICAgICAgZ3JvdXBOb2RlLnF1ZXJ5U2VsZWN0b3IoJy5ncm91cC10b2dnbGUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGV2dCkge1xuICAgICAgICBkb21DbGFzc2VzKGdyb3VwTm9kZSkudG9nZ2xlKCdncm91cC1jbG9zZWQnKTtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH0pO1xuICAgICAgZ3JvdXBOb2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZXZ0KSB7XG4gICAgICAgIGlmICghZXZ0LmRlZmF1bHRQcmV2ZW50ZWQgJiYgZG9tQ2xhc3Nlcyhncm91cE5vZGUpLmhhcygnZ3JvdXAtY2xvc2VkJykpIHtcbiAgICAgICAgICBkb21DbGFzc2VzKGdyb3VwTm9kZSkucmVtb3ZlKCdncm91cC1jbG9zZWQnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGZvckVhY2goZ3JvdXAuZW50cmllcywgZnVuY3Rpb24oZW50cnkpIHtcblxuICAgICAgICBpZiAoIWVudHJ5LmlkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdlbnRyeSBtdXN0IGhhdmUgYW4gaWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBodG1sID0gZW50cnkuaHRtbDtcblxuICAgICAgICBpZiAodHlwZW9mIGh0bWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaHRtbCA9IGRvbWlmeShodG1sKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVud3JhcCBqcXVlcnlcbiAgICAgICAgaWYgKGh0bWwuZ2V0ICYmIGh0bWwuY29uc3RydWN0b3IucHJvdG90eXBlLmpxdWVyeSkge1xuICAgICAgICAgIGh0bWwgPSBodG1sLmdldCgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBlbnRyeU5vZGUgPSBkb21pZnkoJzxkaXYgY2xhc3M9XCJicHAtcHJvcGVydGllcy1lbnRyeVwiIGRhdGEtZW50cnk9XCInICsgZXNjYXBlSFRNTChlbnRyeS5pZCkgKyAnXCI+PC9kaXY+Jyk7XG5cbiAgICAgICAgZm9yRWFjaChlbnRyeS5jc3NDbGFzc2VzIHx8IFtdLCBmdW5jdGlvbihjc3NDbGFzcykge1xuICAgICAgICAgIGRvbUNsYXNzZXMoZW50cnlOb2RlKS5hZGQoY3NzQ2xhc3MpO1xuICAgICAgICB9KTtcblxuICAgICAgICBlbnRyeU5vZGUuYXBwZW5kQ2hpbGQoaHRtbCk7XG5cbiAgICAgICAgZ3JvdXBOb2RlLmFwcGVuZENoaWxkKGVudHJ5Tm9kZSk7XG5cbiAgICAgICAgLy8gdXBkYXRlIGNvbmRpdGlvbmFsbHkgdmlzaWJsZSBlbGVtZW50c1xuICAgICAgICBzZWxmLnVwZGF0ZVN0YXRlKGVudHJ5LCBlbnRyeU5vZGUpO1xuICAgICAgfSk7XG5cbiAgICAgIHRhYk5vZGUuYXBwZW5kQ2hpbGQoZ3JvdXBOb2RlKTtcbiAgICB9KTtcblxuICAgIHRhYkxpbmtzTm9kZS5hcHBlbmRDaGlsZCh0YWJMaW5rTm9kZSk7XG4gICAgdGFiQ29udGFpbmVyTm9kZS5hcHBlbmRDaGlsZCh0YWJOb2RlKTtcbiAgfSk7XG5cbiAgdGFiQmFyTm9kZS5hcHBlbmRDaGlsZCh0YWJMaW5rc05vZGUpO1xuXG4gIHBhbmVsTm9kZS5hcHBlbmRDaGlsZCh0YWJCYXJOb2RlKTtcbiAgcGFuZWxOb2RlLmFwcGVuZENoaWxkKHRhYkNvbnRhaW5lck5vZGUpO1xuXG4gIHJldHVybiBwYW5lbE5vZGU7XG59O1xuXG5cblxuZnVuY3Rpb24gc2V0SW5wdXRWYWx1ZShub2RlLCB2YWx1ZSkge1xuXG4gIHZhciBjb250ZW50RWRpdGFibGUgPSBpc0NvbnRlbnRFZGl0YWJsZShub2RlKTtcblxuICB2YXIgb2xkVmFsdWUgPSBjb250ZW50RWRpdGFibGUgPyBub2RlLmlubmVyVGV4dCA6IG5vZGUudmFsdWU7XG5cbiAgdmFyIHNlbGVjdGlvbjtcblxuICAvLyBwcmV2ZW50cyBpbnB1dCBmaWVsZHMgZnJvbSBoYXZpbmcgdGhlIHZhbHVlICd1bmRlZmluZWQnXG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsdWUgPSAnJztcbiAgfVxuXG4gIGlmIChvbGRWYWx1ZSA9PT0gdmFsdWUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyB1cGRhdGUgc2VsZWN0aW9uIG9uIHVuZG8vcmVkb1xuICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gbm9kZSkge1xuICAgIHNlbGVjdGlvbiA9IHVwZGF0ZVNlbGVjdGlvbihnZXRTZWxlY3Rpb24obm9kZSksIG9sZFZhbHVlLCB2YWx1ZSk7XG4gIH1cblxuICBpZiAoY29udGVudEVkaXRhYmxlKSB7XG4gICAgbm9kZS5pbm5lclRleHQgPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBub2RlLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgc2V0U2VsZWN0aW9uKG5vZGUsIHNlbGVjdGlvbik7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0U2VsZWN0VmFsdWUobm9kZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICBub2RlLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0VG9nZ2xlVmFsdWUobm9kZSwgdmFsdWUpIHtcbiAgdmFyIG5vZGVWYWx1ZSA9IG5vZGUudmFsdWU7XG5cbiAgbm9kZS5jaGVja2VkID0gKHZhbHVlID09PSBub2RlVmFsdWUpIHx8ICghZG9tQXR0cihub2RlLCAndmFsdWUnKSAmJiB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHNldFRleHRWYWx1ZShub2RlLCB2YWx1ZSkge1xuICBub2RlLnRleHRDb250ZW50ID0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbihub2RlKSB7XG5cbiAgcmV0dXJuIGlzQ29udGVudEVkaXRhYmxlKG5vZGUpID8gZ2V0Q29udGVudEVkaXRhYmxlU2VsZWN0aW9uKG5vZGUpIDoge1xuICAgIHN0YXJ0OiBub2RlLnNlbGVjdGlvblN0YXJ0LFxuICAgIGVuZDogbm9kZS5zZWxlY3Rpb25FbmRcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGVudEVkaXRhYmxlU2VsZWN0aW9uKG5vZGUpIHtcblxuICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gIHZhciBmb2N1c05vZGUgPSBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgZm9jdXNPZmZzZXQgPSBzZWxlY3Rpb24uZm9jdXNPZmZzZXQsXG4gICAgICBhbmNob3JPZmZzZXQgPSBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0O1xuXG4gIGlmICghZm9jdXNOb2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3Qgc2VsZWN0ZWQnKTtcbiAgfVxuXG4gIC8vIHZlcmlmeSB3ZSBoYXZlIHNlbGVjdGlvbiBvbiB0aGUgY3VycmVudCBlbGVtZW50XG4gIGlmICghbm9kZS5jb250YWlucyhmb2N1c05vZGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3Qgc2VsZWN0ZWQnKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IE1hdGgubWluKGZvY3VzT2Zmc2V0LCBhbmNob3JPZmZzZXQpLFxuICAgIGVuZDogTWF0aC5tYXgoZm9jdXNPZmZzZXQsIGFuY2hvck9mZnNldClcbiAgfTtcbn1cblxuZnVuY3Rpb24gc2V0U2VsZWN0aW9uKG5vZGUsIHNlbGVjdGlvbikge1xuXG4gIGlmIChpc0NvbnRlbnRFZGl0YWJsZShub2RlKSkge1xuICAgIHNldENvbnRlbnRFZGl0YWJsZVNlbGVjdGlvbihub2RlLCBzZWxlY3Rpb24pO1xuICB9IGVsc2Uge1xuICAgIG5vZGUuc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQ7XG4gICAgbm9kZS5zZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24uZW5kO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRFZGl0YWJsZVNlbGVjdGlvbihub2RlLCBzZWxlY3Rpb24pIHtcblxuICB2YXIgZm9jdXNOb2RlLFxuICAgICAgZG9tUmFuZ2UsXG4gICAgICBkb21TZWxlY3Rpb247XG5cbiAgZm9jdXNOb2RlID0gbm9kZS5maXJzdENoaWxkIHx8IG5vZGUsXG4gIGRvbVJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgZG9tUmFuZ2Uuc2V0U3RhcnQoZm9jdXNOb2RlLCBzZWxlY3Rpb24uc3RhcnQpO1xuICBkb21SYW5nZS5zZXRFbmQoZm9jdXNOb2RlLCBzZWxlY3Rpb24uZW5kKTtcblxuICBkb21TZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGRvbVNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgZG9tU2VsZWN0aW9uLmFkZFJhbmdlKGRvbVJhbmdlKTtcbn1cblxuZnVuY3Rpb24gaXNJbXBsaWNpdFJvb3QoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5pZCA9PT0gJ19faW1wbGljaXRyb290Jztcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRvbVF1ZXJ5ID0gcmVxdWlyZSgnbWluLWRvbScpLnF1ZXJ5LFxuICAgIGRvbUNsZWFyID0gcmVxdWlyZSgnbWluLWRvbScpLmNsZWFyLFxuICAgIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcbiAgICBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKSxcbiAgICBkb21pZnkgPSByZXF1aXJlKCdtaW4tZG9tJykuZG9taWZ5LFxuICAgIElkcyA9IHJlcXVpcmUoJ2lkcycpLmRlZmF1bHQ7XG5cbnZhciBTUEFDRV9SRUdFWCA9IC9cXHMvO1xuXG4vLyBmb3IgUU5hbWUgdmFsaWRhdGlvbiBhcyBwZXIgaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbC8jTlQtTmFtZUNoYXJcbnZhciBRTkFNRV9SRUdFWCA9IC9eKFthLXpdW1xcdy0uXSo6KT9bYS16X11bXFx3LS5dKiQvaTtcblxuLy8gZm9yIElEIHZhbGlkYXRpb24gYXMgcGVyIEJQTU4gU2NoZW1hIChRTmFtZSAtIE5hbWVzcGFjZSlcbnZhciBJRF9SRUdFWCA9IC9eW2Etel9dW1xcdy0uXSokL2k7XG5cbnZhciBQTEFDRUhPTERFUl9SRUdFWCA9IC9cXCRcXHsoW159XSopXFx9L2c7XG5cbnZhciBIVE1MX0VTQ0FQRV9NQVAgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgJ1xcJyc6ICcmIzM5Oydcbn07XG5cbmZ1bmN0aW9uIHNlbGVjdGVkT3B0aW9uKHNlbGVjdEJveCkge1xuICBpZiAoc2VsZWN0Qm94LnNlbGVjdGVkSW5kZXggPj0gMCkge1xuICAgIHJldHVybiBzZWxlY3RCb3gub3B0aW9uc1tzZWxlY3RCb3guc2VsZWN0ZWRJbmRleF0udmFsdWU7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMuc2VsZWN0ZWRPcHRpb24gPSBzZWxlY3RlZE9wdGlvbjtcblxuXG5mdW5jdGlvbiBzZWxlY3RlZFR5cGUoZWxlbWVudFN5bnRheCwgaW5wdXROb2RlKSB7XG4gIHZhciB0eXBlU2VsZWN0ID0gZG9tUXVlcnkoZWxlbWVudFN5bnRheCwgaW5wdXROb2RlKTtcbiAgcmV0dXJuIHNlbGVjdGVkT3B0aW9uKHR5cGVTZWxlY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5zZWxlY3RlZFR5cGUgPSBzZWxlY3RlZFR5cGU7XG5cblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgcm9vdCBlbGVtZW50IHRoZSBkb2N1bWVudCB0aGlzXG4gKiBidXNpbmVzcyBvYmplY3QgaXMgY29udGFpbmVkIGluLlxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGdldFJvb3QoYnVzaW5lc3NPYmplY3QpIHtcbiAgdmFyIHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xuICB3aGlsZSAocGFyZW50LiRwYXJlbnQpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgfVxuICByZXR1cm4gcGFyZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cy5nZXRSb290ID0gZ2V0Um9vdDtcblxuXG4vKipcbiAqIGZpbHRlcnMgYWxsIGVsZW1lbnRzIGluIHRoZSBsaXN0IHdoaWNoIGhhdmUgYSBnaXZlbiB0eXBlLlxuICogcmVtb3ZlcyBhIG5ldyBsaXN0XG4gKi9cbmZ1bmN0aW9uIGZpbHRlckVsZW1lbnRzQnlUeXBlKG9iamVjdExpc3QsIHR5cGUpIHtcbiAgdmFyIGxpc3QgPSBvYmplY3RMaXN0IHx8IFtdO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvckVhY2gobGlzdCwgZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKGlzKG9iaiwgdHlwZSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKG9iaik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMuZmlsdGVyRWxlbWVudHNCeVR5cGUgPSBmaWx0ZXJFbGVtZW50c0J5VHlwZTtcblxuXG5mdW5jdGlvbiBmaW5kUm9vdEVsZW1lbnRzQnlUeXBlKGJ1c2luZXNzT2JqZWN0LCByZWZlcmVuY2VkVHlwZSkge1xuICB2YXIgcm9vdCA9IGdldFJvb3QoYnVzaW5lc3NPYmplY3QpO1xuXG4gIHJldHVybiBmaWx0ZXJFbGVtZW50c0J5VHlwZShyb290LnJvb3RFbGVtZW50cywgcmVmZXJlbmNlZFR5cGUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5maW5kUm9vdEVsZW1lbnRzQnlUeXBlID0gZmluZFJvb3RFbGVtZW50c0J5VHlwZTtcblxuXG5mdW5jdGlvbiByZW1vdmVBbGxDaGlsZHJlbihkb21FbGVtZW50KSB7XG4gIHdoaWxlIChkb21FbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICBkb21FbGVtZW50LnJlbW92ZUNoaWxkKGRvbUVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMucmVtb3ZlQWxsQ2hpbGRyZW4gPSByZW1vdmVBbGxDaGlsZHJlbjtcblxuXG4vKipcbiAqIGFkZHMgYW4gZW1wdHkgb3B0aW9uIHRvIHRoZSBsaXN0XG4gKi9cbmZ1bmN0aW9uIGFkZEVtcHR5UGFyYW1ldGVyKGxpc3QpIHtcbiAgcmV0dXJuIGxpc3QucHVzaCh7ICdsYWJlbCc6ICcnLCAndmFsdWUnOiAnJywgJ25hbWUnOiAnJyB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuYWRkRW1wdHlQYXJhbWV0ZXIgPSBhZGRFbXB0eVBhcmFtZXRlcjtcblxuXG4vKipcbiAqIHJldHVybnMgYSBsaXN0IHdpdGggYWxsIHJvb3QgZWxlbWVudHMgZm9yIHRoZSBnaXZlbiBwYXJhbWV0ZXIgJ3JlZmVyZW5jZWRUeXBlJ1xuICovXG5mdW5jdGlvbiByZWZyZXNoT3B0aW9uc01vZGVsKGJ1c2luZXNzT2JqZWN0LCByZWZlcmVuY2VkVHlwZSkge1xuICB2YXIgbW9kZWwgPSBbXTtcbiAgdmFyIHJlZmVyYWJsZU9iamVjdHMgPSBmaW5kUm9vdEVsZW1lbnRzQnlUeXBlKGJ1c2luZXNzT2JqZWN0LCByZWZlcmVuY2VkVHlwZSk7XG4gIGZvckVhY2gocmVmZXJhYmxlT2JqZWN0cywgZnVuY3Rpb24ob2JqKSB7XG4gICAgbW9kZWwucHVzaCh7XG4gICAgICBsYWJlbDogKG9iai5uYW1lIHx8ICcnKSArICcgKGlkPScrb2JqLmlkKycpJyxcbiAgICAgIHZhbHVlOiBvYmouaWQsXG4gICAgICBuYW1lOiBvYmoubmFtZVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG1vZGVsO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5yZWZyZXNoT3B0aW9uc01vZGVsID0gcmVmcmVzaE9wdGlvbnNNb2RlbDtcblxuXG4vKipcbiAqIGZpbGxzIHRoZSBkcm9wIGRvd24gd2l0aCBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnNEcm9wRG93bihkb21TZWxlY3RvciwgYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlLCBlbnRyeU5vZGUpIHtcbiAgdmFyIG9wdGlvbnMgPSByZWZyZXNoT3B0aW9uc01vZGVsKGJ1c2luZXNzT2JqZWN0LCByZWZlcmVuY2VkVHlwZSk7XG4gIGFkZEVtcHR5UGFyYW1ldGVyKG9wdGlvbnMpO1xuICB2YXIgc2VsZWN0Qm94ID0gZG9tUXVlcnkoZG9tU2VsZWN0b3IsIGVudHJ5Tm9kZSk7XG4gIGRvbUNsZWFyKHNlbGVjdEJveCk7XG5cbiAgZm9yRWFjaChvcHRpb25zLCBmdW5jdGlvbihvcHRpb24pIHtcbiAgICB2YXIgb3B0aW9uRW50cnkgPSBkb21pZnkoJzxvcHRpb24gdmFsdWU9XCInICsgZXNjYXBlSFRNTChvcHRpb24udmFsdWUpICsgJ1wiPicgKyBlc2NhcGVIVE1MKG9wdGlvbi5sYWJlbCkgKyAnPC9vcHRpb24+Jyk7XG4gICAgc2VsZWN0Qm94LmFwcGVuZENoaWxkKG9wdGlvbkVudHJ5KTtcbiAgfSk7XG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5tb2R1bGUuZXhwb3J0cy51cGRhdGVPcHRpb25zRHJvcERvd24gPSB1cGRhdGVPcHRpb25zRHJvcERvd247XG5cblxuLyoqXG4gKiBjaGVja3Mgd2hldGhlciB0aGUgaWQgdmFsdWUgaXMgdmFsaWRcbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGJvXG4gKiBAcGFyYW0ge1N0cmluZ30gaWRWYWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNsYXRlXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSBlcnJvciBtZXNzYWdlXG4gKi9cbmZ1bmN0aW9uIGlzSWRWYWxpZChibywgaWRWYWx1ZSwgdHJhbnNsYXRlKSB7XG4gIHZhciBhc3NpZ25lZCA9IGJvLiRtb2RlbC5pZHMuYXNzaWduZWQoaWRWYWx1ZSk7XG5cbiAgdmFyIGlkRXhpc3RzID0gYXNzaWduZWQgJiYgYXNzaWduZWQgIT09IGJvO1xuXG4gIGlmICghaWRWYWx1ZSB8fCBpZEV4aXN0cykge1xuICAgIHJldHVybiB0cmFuc2xhdGUoJ0VsZW1lbnQgbXVzdCBoYXZlIGFuIHVuaXF1ZSBpZC4nKTtcbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZUlkKGlkVmFsdWUsIHRyYW5zbGF0ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmlzSWRWYWxpZCA9IGlzSWRWYWxpZDtcblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUlkKGlkVmFsdWUsIHRyYW5zbGF0ZSkge1xuXG4gIGlkVmFsdWUgPSBzdHJpcFBsYWNlaG9sZGVycyhpZFZhbHVlKTtcblxuICBpZiAoY29udGFpbnNTcGFjZShpZFZhbHVlKSkge1xuICAgIHJldHVybiB0cmFuc2xhdGUoJ0lkIG11c3Qgbm90IGNvbnRhaW4gc3BhY2VzLicpO1xuICB9XG5cbiAgaWYgKCFJRF9SRUdFWC50ZXN0KGlkVmFsdWUpKSB7XG5cbiAgICBpZiAoUU5BTUVfUkVHRVgudGVzdChpZFZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnSWQgbXVzdCBub3QgY29udGFpbiBwcmVmaXguJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYW5zbGF0ZSgnSWQgbXVzdCBiZSBhIHZhbGlkIFFOYW1lLicpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLnZhbGlkYXRlSWQgPSB2YWxpZGF0ZUlkO1xuXG5cbmZ1bmN0aW9uIGNvbnRhaW5zU3BhY2UodmFsdWUpIHtcbiAgcmV0dXJuIFNQQUNFX1JFR0VYLnRlc3QodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5jb250YWluc1NwYWNlID0gY29udGFpbnNTcGFjZTtcblxuXG5mdW5jdGlvbiBzdHJpcFBsYWNlaG9sZGVycyhpZFZhbHVlKSB7XG5cbiAgLy8gcmVwbGFjZSBleHByZXNzaW9uIGUuZy4gJHtWRVJTSU9OX1RBR31cbiAgLy8gdXNlIG9ubHkgdGhlIGNvbnRlbnQgYmV0d2VlbiAke31cbiAgLy8gZm9yIHRoZSBSRUdFWCBjaGVja1xuICByZXR1cm4gaWRWYWx1ZS5yZXBsYWNlKFBMQUNFSE9MREVSX1JFR0VYLCAnJDEnKTtcbn1cblxuLyoqXG4gKiBnZW5lcmF0ZSBhIHNlbWFudGljIGlkIHdpdGggZ2l2ZW4gcHJlZml4XG4gKi9cbmZ1bmN0aW9uIG5leHRJZChwcmVmaXgpIHtcbiAgdmFyIGlkcyA9IG5ldyBJZHMoWzMyLDMyLDFdKTtcblxuICByZXR1cm4gaWRzLm5leHRQcmVmaXhlZChwcmVmaXgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5uZXh0SWQgPSBuZXh0SWQ7XG5cblxuZnVuY3Rpb24gdHJpZ2dlckNsaWNrRXZlbnQoZWxlbWVudCkge1xuICB2YXIgZXZ0O1xuICB2YXIgZXZlbnRUeXBlID0gJ2NsaWNrJztcblxuICBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnQpIHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2hyb21lLCBTYWZhcmksIEZpcmVmb3hcbiAgICAgIGV2dCA9IG5ldyBNb3VzZUV2ZW50KChldmVudFR5cGUpLCB7IHZpZXc6IHdpbmRvdywgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBJRSAxMSwgUGhhbnRvbUpTICh3YXQhKVxuICAgICAgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ01vdXNlRXZlbnQnKTtcblxuICAgICAgZXZ0LmluaXRFdmVudCgoZXZlbnRUeXBlKSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZWxjb21lIElFXG4gICAgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QoKTtcblxuICAgIHJldHVybiBlbGVtZW50LmZpcmVFdmVudCgnb24nICsgZXZlbnRUeXBlLCBldnQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLnRyaWdnZXJDbGlja0V2ZW50ID0gdHJpZ2dlckNsaWNrRXZlbnQ7XG5cblxuZnVuY3Rpb24gZXNjYXBlSFRNTChzdHIpIHtcbiAgc3RyID0gJycgKyBzdHI7XG5cbiAgcmV0dXJuIHN0ciAmJiBzdHIucmVwbGFjZSgvWyY8PlwiJ10vZywgZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gSFRNTF9FU0NBUEVfTUFQW21hdGNoXTtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmVzY2FwZUhUTUwgPSBlc2NhcGVIVE1MOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpO1xuXG4vKipcbiAqIEEgaGFuZGxlciBjYXBhYmxlIG9mIGNyZWF0aW5nIGEgbmV3IGVsZW1lbnQgdW5kZXIgYSBwcm92aWRlZCBwYXJlbnRcbiAqIGFuZCB1cGRhdGluZyAvIGNyZWF0aW5nIGEgcmVmZXJlbmNlIHRvIGl0IGluIG9uZSBhdG9taWMgYWN0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIENyZWF0ZUFuZFJlZmVyZW5jZUVsZW1lbnRIYW5kbGVyKGVsZW1lbnRSZWdpc3RyeSwgYnBtbkZhY3RvcnkpIHtcbiAgdGhpcy5fZWxlbWVudFJlZ2lzdHJ5ID0gZWxlbWVudFJlZ2lzdHJ5O1xuICB0aGlzLl9icG1uRmFjdG9yeSA9IGJwbW5GYWN0b3J5O1xufVxuXG5DcmVhdGVBbmRSZWZlcmVuY2VFbGVtZW50SGFuZGxlci4kaW5qZWN0ID0gWyAnZWxlbWVudFJlZ2lzdHJ5JywgJ2JwbW5GYWN0b3J5JyBdO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENyZWF0ZUFuZFJlZmVyZW5jZUVsZW1lbnRIYW5kbGVyO1xuXG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZWxlbWVudCB1bmRlciBhIHByb3ZpZGVkIHBhcmVudCBhbmQgdXBkYXRlcyAvIGNyZWF0ZXMgYSByZWZlcmVuY2UgdG8gaXQgaW5cbiAqIG9uZSBhdG9taWMgYWN0aW9uLlxuICpcbiAqIEBtZXRob2QgIENyZWF0ZUFuZFJlZmVyZW5jZUVsZW1lbnRIYW5kbGVyI2V4ZWN1dGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gY29udGV4dC5lbGVtZW50IHdoaWNoIGlzIHRoZSBjb250ZXh0IGZvciB0aGUgcmVmZXJlbmNlXG4gKiBAcGFyYW0ge21vZGRsZS5yZWZlcmVuY2luZ09iamVjdH0gY29udGV4dC5yZWZlcmVuY2luZ09iamVjdCB0aGUgb2JqZWN0IHdoaWNoIGNyZWF0ZXMgdGhlIHJlZmVyZW5jZVxuICogQHBhcmFtIHtTdHJpbmd9IGNvbnRleHQucmVmZXJlbmNlUHJvcGVydHkgdGhlIHByb3BlcnR5IG9mIHRoZSByZWZlcmVuY2luZ09iamVjdCB3aGljaCBtYWtlcyB0aGUgcmVmZXJlbmNlXG4gKiBAcGFyYW0ge21vZGRsZS5uZXdPYmplY3R9IGNvbnRleHQubmV3T2JqZWN0IHRoZSBuZXcgb2JqZWN0IHRvIGFkZFxuICogQHBhcmFtIHttb2RkbGUubmV3T2JqZWN0Q29udGFpbmVyfSBjb250ZXh0Lm5ld09iamVjdENvbnRhaW5lciB0aGUgY29udGFpbmVyIGZvciB0aGUgbmV3IG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxkanMubW9kZS5CYXNlPn0gdGhlIHVwZGF0ZWQgZWxlbWVudFxuICovXG5DcmVhdGVBbmRSZWZlcmVuY2VFbGVtZW50SGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgcmVmZXJlbmNpbmdPYmplY3QgPSBlbnN1cmVOb3ROdWxsKGNvbnRleHQucmVmZXJlbmNpbmdPYmplY3QsICdyZWZlcmVuY2luZ09iamVjdCcpLFxuICAgICAgcmVmZXJlbmNlUHJvcGVydHkgPSBlbnN1cmVOb3ROdWxsKGNvbnRleHQucmVmZXJlbmNlUHJvcGVydHksICdyZWZlcmVuY2VQcm9wZXJ0eScpLFxuICAgICAgbmV3T2JqZWN0ID0gZW5zdXJlTm90TnVsbChjb250ZXh0Lm5ld09iamVjdCwgJ25ld09iamVjdCcpLFxuICAgICAgbmV3T2JqZWN0Q29udGFpbmVyID0gZW5zdXJlTm90TnVsbChjb250ZXh0Lm5ld09iamVjdENvbnRhaW5lciwgJ25ld09iamVjdENvbnRhaW5lcicpLFxuICAgICAgbmV3T2JqZWN0UGFyZW50ID0gZW5zdXJlTm90TnVsbChjb250ZXh0Lm5ld09iamVjdFBhcmVudCwgJ25ld09iamVjdFBhcmVudCcpLFxuICAgICAgY2hhbmdlZCA9IFsgY29udGV4dC5lbGVtZW50IF07IC8vIHRoaXMgd2lsbCBub3QgY2hhbmdlIGFueSBkaWFncmFtLWpzIGVsZW1lbnRzXG5cbiAgLy8gY3JlYXRlIG5ldyBvYmplY3RcbiAgdmFyIHJlZmVyZW5jZWRPYmplY3QgPSBlbGVtZW50SGVscGVyXG4gICAgLmNyZWF0ZUVsZW1lbnQobmV3T2JqZWN0LnR5cGUsIG5ld09iamVjdC5wcm9wZXJ0aWVzLCBuZXdPYmplY3RQYXJlbnQsIHRoaXMuX2JwbW5GYWN0b3J5KTtcbiAgY29udGV4dC5yZWZlcmVuY2VkT2JqZWN0ID0gcmVmZXJlbmNlZE9iamVjdDtcblxuICAvLyBhZGQgdG8gY29udGFpbmluZyBsaXN0XG4gIG5ld09iamVjdENvbnRhaW5lci5wdXNoKHJlZmVyZW5jZWRPYmplY3QpO1xuXG4gIC8vIGFkanVzdCByZWZlcmVuY2UgYXR0cmlidXRlXG4gIGNvbnRleHQucHJldmlvdXNSZWZlcmVuY2UgPSByZWZlcmVuY2luZ09iamVjdFtyZWZlcmVuY2VQcm9wZXJ0eV07XG4gIHJlZmVyZW5jaW5nT2JqZWN0W3JlZmVyZW5jZVByb3BlcnR5XSA9IHJlZmVyZW5jZWRPYmplY3Q7XG5cbiAgY29udGV4dC5jaGFuZ2VkID0gY2hhbmdlZDtcblxuICAvLyBpbmRpY2F0ZSBjaGFuZ2VkIG9uIG9iamVjdHMgYWZmZWN0ZWQgYnkgdGhlIHVwZGF0ZVxuICByZXR1cm4gY2hhbmdlZDtcbn07XG5cbi8qKlxuICogUmV2ZXJ0cyB0aGUgdXBkYXRlXG4gKlxuICogQG1ldGhvZCAgQ3JlYXRlQW5kUmVmZXJlbmNlRWxlbWVudEhhbmRsZXIjcmV2ZXJ0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqXG4gKiBAcmV0dXJucyB7ZGpzLm1vZGUuQmFzZX0gdGhlIHVwZGF0ZWQgZWxlbWVudFxuICovXG5DcmVhdGVBbmRSZWZlcmVuY2VFbGVtZW50SGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciByZWZlcmVuY2luZ09iamVjdCA9IGNvbnRleHQucmVmZXJlbmNpbmdPYmplY3QsXG4gICAgICByZWZlcmVuY2VQcm9wZXJ0eSA9IGNvbnRleHQucmVmZXJlbmNlUHJvcGVydHksXG4gICAgICBwcmV2aW91c1JlZmVyZW5jZSA9IGNvbnRleHQucHJldmlvdXNSZWZlcmVuY2UsXG4gICAgICByZWZlcmVuY2VkT2JqZWN0ID0gY29udGV4dC5yZWZlcmVuY2VkT2JqZWN0LFxuICAgICAgbmV3T2JqZWN0Q29udGFpbmVyID0gY29udGV4dC5uZXdPYmplY3RDb250YWluZXI7XG5cbiAgLy8gcmVzZXQgcmVmZXJlbmNlXG4gIHJlZmVyZW5jaW5nT2JqZWN0LnNldChyZWZlcmVuY2VQcm9wZXJ0eSwgcHJldmlvdXNSZWZlcmVuY2UpO1xuXG4gIC8vIHJlbW92ZSBuZXcgZWxlbWVudFxuICBuZXdPYmplY3RDb250YWluZXIuc3BsaWNlKG5ld09iamVjdENvbnRhaW5lci5pbmRleE9mKHJlZmVyZW5jZWRPYmplY3QpLCAxKTtcblxuICByZXR1cm4gY29udGV4dC5jaGFuZ2VkO1xufTtcblxuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZW5zdXJlTm90TnVsbChwcm9wLCBuYW1lKSB7XG4gIGlmICghcHJvcCkge1xuICAgIHRocm93IG5ldyBFcnJvcihuYW1lICsgJyByZXF1aXJlZCcpO1xuICB9XG4gIHJldHVybiBwcm9wO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XG5cbnZhciBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKTtcblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIGEgQlBNTiAyLjAgcHJvcGVydHkgdXBkYXRlXG4gKiBmb3IgYnVzaW5lc3Mgb2JqZWN0cyB3aGljaCBhcmUgbm90IHJlcHJlc2VudGVkIGluIHRoZVxuICogZGlhZ3JhbS5cbiAqXG4gKiBUaGlzIGlzIHVzZWZ1bCBpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvcGVydGllcyBwYW5lbCBpblxuICogb3JkZXIgdG8gdXBkYXRlIGNoaWxkIGVsZW1lbnRzIG9mIGVsZW1lbnRzIHZpc2libGUgaW5cbiAqIHRoZSBkaWFncmFtLlxuICpcbiAqIEV4YW1wbGU6IHBlcmZvcm0gYW4gdXBkYXRlIG9mIGEgc3BlY2lmaWMgZXZlbnQgZGVmaW5pdGlvblxuICogb2YgYW4gaW50ZXJtZWRpYXRlIGV2ZW50LlxuICpcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIENyZWF0ZUJ1c2luZXNzT2JqZWN0TGlzdEhhbmRsZXIoZWxlbWVudFJlZ2lzdHJ5LCBicG1uRmFjdG9yeSkge1xuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG4gIHRoaXMuX2JwbW5GYWN0b3J5ID0gYnBtbkZhY3Rvcnk7XG59XG5cbkNyZWF0ZUJ1c2luZXNzT2JqZWN0TGlzdEhhbmRsZXIuJGluamVjdCA9IFsgJ2VsZW1lbnRSZWdpc3RyeScsICdicG1uRmFjdG9yeScgXTtcblxubW9kdWxlLmV4cG9ydHMgPSBDcmVhdGVCdXNpbmVzc09iamVjdExpc3RIYW5kbGVyO1xuXG5mdW5jdGlvbiBlbnN1cmVOb3ROdWxsKHByb3AsIG5hbWUpIHtcbiAgaWYgKCFwcm9wKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG5hbWUgKyAnIHJlcXVpcmVkJyk7XG4gIH1cbiAgcmV0dXJuIHByb3A7XG5cbn1cbmZ1bmN0aW9uIGVuc3VyZUxpc3QocHJvcCwgbmFtZSkge1xuICBpZiAoIXByb3AgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb3ApICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG5hbWUgKyAnIG5lZWRzIHRvIGJlIGEgbGlzdCcpO1xuICB9XG4gIHJldHVybiBwcm9wO1xufVxuXG4vLyBhcGkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBlbGVtZW50IHVuZGVyIGEgcHJvdmlkZWQgcGFyZW50IGFuZCB1cGRhdGVzIC8gY3JlYXRlcyBhIHJlZmVyZW5jZSB0byBpdCBpblxuICogb25lIGF0b21pYyBhY3Rpb24uXG4gKlxuICogQG1ldGhvZCAgQ3JlYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlciNleGVjdXRlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGNvbnRleHQuZWxlbWVudCB3aGljaCBpcyB0aGUgY29udGV4dCBmb3IgdGhlIHJlZmVyZW5jZVxuICogQHBhcmFtIHttb2RkbGUucmVmZXJlbmNpbmdPYmplY3R9IGNvbnRleHQucmVmZXJlbmNpbmdPYmplY3QgdGhlIG9iamVjdCB3aGljaCBjcmVhdGVzIHRoZSByZWZlcmVuY2VcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZXh0LnJlZmVyZW5jZVByb3BlcnR5IHRoZSBwcm9wZXJ0eSBvZiB0aGUgcmVmZXJlbmNpbmdPYmplY3Qgd2hpY2ggbWFrZXMgdGhlIHJlZmVyZW5jZVxuICogQHBhcmFtIHttb2RkbGUubmV3T2JqZWN0fSBjb250ZXh0Lm5ld09iamVjdCB0aGUgbmV3IG9iamVjdCB0byBhZGRcbiAqIEBwYXJhbSB7bW9kZGxlLm5ld09iamVjdENvbnRhaW5lcn0gY29udGV4dC5uZXdPYmplY3RDb250YWluZXIgdGhlIGNvbnRhaW5lciBmb3IgdGhlIG5ldyBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZS5CYXNlPn0gdGhlIHVwZGF0ZWQgZWxlbWVudFxuICovXG5DcmVhdGVCdXNpbmVzc09iamVjdExpc3RIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjdXJyZW50T2JqZWN0ID0gZW5zdXJlTm90TnVsbChjb250ZXh0LmN1cnJlbnRPYmplY3QsICdjdXJyZW50T2JqZWN0JyksXG4gICAgICBwcm9wZXJ0eU5hbWUgPSBlbnN1cmVOb3ROdWxsKGNvbnRleHQucHJvcGVydHlOYW1lLCAncHJvcGVydHlOYW1lJyksXG4gICAgICBuZXdPYmplY3RzID0gZW5zdXJlTGlzdChjb250ZXh0Lm5ld09iamVjdHMsICduZXdPYmplY3RzJyksXG4gICAgICBjaGFuZ2VkID0gWyBjb250ZXh0LmVsZW1lbnQgXTsgLy8gdGhpcyB3aWxsIG5vdCBjaGFuZ2UgYW55IGRpYWdyYW0tanMgZWxlbWVudHNcblxuXG4gIHZhciBjaGlsZE9iamVjdHMgPSBbXTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8vIGNyZWF0ZSBuZXcgYXJyYXkgb2YgYnVzaW5lc3Mgb2JqZWN0c1xuICBmb3JFYWNoKG5ld09iamVjdHMsIGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBlbGVtZW50ID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KG9iai50eXBlLCBvYmoucHJvcGVydGllcywgY3VycmVudE9iamVjdCwgc2VsZi5fYnBtbkZhY3RvcnkpO1xuXG4gICAgY2hpbGRPYmplY3RzLnB1c2goZWxlbWVudCk7XG4gIH0pO1xuICBjb250ZXh0LmNoaWxkT2JqZWN0ID0gY2hpbGRPYmplY3RzO1xuXG4gIC8vIGFkanVzdCBhcnJheSByZWZlcmVuY2UgaW4gdGhlIHBhcmVudCBidXNpbmVzcyBvYmplY3RcbiAgY29udGV4dC5wcmV2aW91c0NoaWxkcyA9IGN1cnJlbnRPYmplY3RbcHJvcGVydHlOYW1lXTtcbiAgY3VycmVudE9iamVjdFtwcm9wZXJ0eU5hbWVdID0gY2hpbGRPYmplY3RzO1xuXG4gIGNvbnRleHQuY2hhbmdlZCA9IGNoYW5nZWQ7XG5cbiAgLy8gaW5kaWNhdGUgY2hhbmdlZCBvbiBvYmplY3RzIGFmZmVjdGVkIGJ5IHRoZSB1cGRhdGVcbiAgcmV0dXJuIGNoYW5nZWQ7XG59O1xuXG4vKipcbiAqIFJldmVydHMgdGhlIHVwZGF0ZVxuICpcbiAqIEBtZXRob2QgIENyZWF0ZUJ1c2luZXNzT2JqZWN0TGlzdEhhbmRsZXIjcmV2ZXJ0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZS5CYXNlfSB0aGUgdXBkYXRlZCBlbGVtZW50XG4gKi9cbkNyZWF0ZUJ1c2luZXNzT2JqZWN0TGlzdEhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY3VycmVudE9iamVjdCA9IGNvbnRleHQuY3VycmVudE9iamVjdCxcbiAgICAgIHByb3BlcnR5TmFtZSA9IGNvbnRleHQucHJvcGVydHlOYW1lLFxuICAgICAgcHJldmlvdXNDaGlsZHMgPSBjb250ZXh0LnByZXZpb3VzQ2hpbGRzO1xuXG4gIC8vIHJlbW92ZSBuZXcgZWxlbWVudFxuICBjdXJyZW50T2JqZWN0LnNldChwcm9wZXJ0eU5hbWUsIHByZXZpb3VzQ2hpbGRzKTtcblxuICByZXR1cm4gY29udGV4dC5jaGFuZ2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpO1xuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGNvbWJpbmVzIGFuZCBleGVjdXRlcyBtdWx0aXBsZSBjb21tYW5kcy5cbiAqXG4gKiBBbGwgdXBkYXRlcyBhcmUgYnVuZGxlZCBvbiB0aGUgY29tbWFuZCBzdGFjayBhbmQgZXhlY3V0ZWQgaW4gb25lIHN0ZXAuXG4gKiBUaGlzIGFsc28gbWFrZXMgaXQgcG9zc2libGUgdG8gcmV2ZXJ0IHRoZSBjaGFuZ2VzIGluIG9uZSBzdGVwLlxuICpcbiAqIEV4YW1wbGUgdXNlIGNhc2U6IHJlbW92ZSB0aGUgY2FtdW5kYTpmb3JtS2V5IGF0dHJpYnV0ZSBhbmQgaW4gYWRkaXRpb25cbiAqIGFkZCBhbGwgZm9ybSBmaWVsZHMgbmVlZGVkIGZvciB0aGUgY2FtdW5kYTpmb3JtRGF0YSBwcm9wZXJ0eS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBNdWx0aUNvbW1hbmRIYW5kbGVyKGNvbW1hbmRTdGFjaykge1xuICB0aGlzLl9jb21tYW5kU3RhY2sgPSBjb21tYW5kU3RhY2s7XG59XG5cbk11bHRpQ29tbWFuZEhhbmRsZXIuJGluamVjdCA9IFsgJ2NvbW1hbmRTdGFjaycgXTtcblxubW9kdWxlLmV4cG9ydHMgPSBNdWx0aUNvbW1hbmRIYW5kbGVyO1xuXG5NdWx0aUNvbW1hbmRIYW5kbGVyLnByb3RvdHlwZS5wcmVFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjb21tYW5kU3RhY2sgPSB0aGlzLl9jb21tYW5kU3RhY2s7XG5cbiAgZm9yRWFjaChjb250ZXh0LCBmdW5jdGlvbihjb21tYW5kKSB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoY29tbWFuZC5jbWQsIGNvbW1hbmQuY29udGV4dCk7XG4gIH0pO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciByZWR1Y2UgPSByZXF1aXJlKCdsb2Rhc2gvdHJhbnNmb3JtJyksXG4gICAgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxuICAgIGtleXMgPSByZXF1aXJlKCdsb2Rhc2gva2V5cycpLFxuICAgIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpO1xuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgYSBCUE1OIDIuMCBwcm9wZXJ0eSB1cGRhdGVcbiAqIGZvciBidXNpbmVzcyBvYmplY3RzIHdoaWNoIGFyZSBub3QgcmVwcmVzZW50ZWQgaW4gdGhlXG4gKiBkaWFncmFtLlxuICpcbiAqIFRoaXMgaXMgdXNlZnVsIGluIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9wZXJ0aWVzIHBhbmVsIGluXG4gKiBvcmRlciB0byB1cGRhdGUgY2hpbGQgZWxlbWVudHMgb2YgZWxlbWVudHMgdmlzaWJsZSBpblxuICogdGhlIGRpYWdyYW0uXG4gKlxuICogRXhhbXBsZTogcGVyZm9ybSBhbiB1cGRhdGUgb2YgYSBzcGVjaWZpYyBldmVudCBkZWZpbml0aW9uXG4gKiBvZiBhbiBpbnRlcm1lZGlhdGUgZXZlbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gVXBkYXRlQnVzaW5lc3NPYmplY3RIYW5kbGVyKGVsZW1lbnRSZWdpc3RyeSkge1xuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG59XG5cblVwZGF0ZUJ1c2luZXNzT2JqZWN0SGFuZGxlci4kaW5qZWN0ID0gWyAnZWxlbWVudFJlZ2lzdHJ5JyBdO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVwZGF0ZUJ1c2luZXNzT2JqZWN0SGFuZGxlcjtcblxuLyoqXG4gKiByZXR1cm5zIHRoZSByb290IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0Um9vdChidXNpbmVzc09iamVjdCkge1xuICB2YXIgcGFyZW50ID0gYnVzaW5lc3NPYmplY3Q7XG4gIHdoaWxlIChwYXJlbnQuJHBhcmVudCkge1xuICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICB9XG4gIHJldHVybiBwYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnRpZXMoYnVzaW5lc3NPYmplY3QsIHByb3BlcnR5TmFtZXMpIHtcbiAgcmV0dXJuIHJlZHVjZShwcm9wZXJ0eU5hbWVzLCBmdW5jdGlvbihyZXN1bHQsIGtleSkge1xuICAgIHJlc3VsdFtrZXldID0gYnVzaW5lc3NPYmplY3QuZ2V0KGtleSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xufVxuXG5cbmZ1bmN0aW9uIHNldFByb3BlcnRpZXMoYnVzaW5lc3NPYmplY3QsIHByb3BlcnRpZXMpIHtcbiAgZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgYnVzaW5lc3NPYmplY3Quc2V0KGtleSwgdmFsdWUpO1xuICB9KTtcbn1cblxuXG4vLyBhcGkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogVXBkYXRlcyBhIGJ1c2luZXNzIG9iamVjdCB3aXRoIGEgbGlzdCBvZiBuZXcgcHJvcGVydGllc1xuICpcbiAqIEBtZXRob2QgIFVwZGF0ZUJ1c2luZXNzT2JqZWN0SGFuZGxlciNleGVjdXRlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGNvbnRleHQuZWxlbWVudCB0aGUgZWxlbWVudCB3aGljaCBoYXMgYSBjaGlsZCBidXNpbmVzcyBvYmplY3QgdXBkYXRlZFxuICogQHBhcmFtIHttb2RkbGUuYnVzaW5lc3NPYmplY3R9IGNvbnRleHQuYnVzaW5lc3NPYmplY3QgdGhlIGJ1c2luZXNzT2JqZWN0IHRvIHVwZGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQucHJvcGVydGllcyBhIGxpc3Qgb2YgcHJvcGVydGllcyB0byBzZXQgb24gdGhlIGJ1c2luZXNzT2JqZWN0XG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGUuQmFzZT59IHRoZSB1cGRhdGVkIGVsZW1lbnRcbiAqL1xuVXBkYXRlQnVzaW5lc3NPYmplY3RIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50LFxuICAgICAgYnVzaW5lc3NPYmplY3QgPSBjb250ZXh0LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgcm9vdEVsZW1lbnRzID0gZ2V0Um9vdChidXNpbmVzc09iamVjdCkucm9vdEVsZW1lbnRzLFxuICAgICAgcmVmZXJlbmNlVHlwZSA9IGNvbnRleHQucmVmZXJlbmNlVHlwZSxcbiAgICAgIHJlZmVyZW5jZVByb3BlcnR5ID0gY29udGV4dC5yZWZlcmVuY2VQcm9wZXJ0eSxcbiAgICAgIGNoYW5nZWQgPSBbIGVsZW1lbnQgXTsgLy8gdGhpcyB3aWxsIG5vdCBjaGFuZ2UgYW55IGRpYWdyYW0tanMgZWxlbWVudHNcblxuICBpZiAoIWVsZW1lbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VsZW1lbnQgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGlmICghYnVzaW5lc3NPYmplY3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1c2luZXNzT2JqZWN0IHJlcXVpcmVkJyk7XG4gIH1cblxuICB2YXIgcHJvcGVydGllcyA9IGNvbnRleHQucHJvcGVydGllcyxcbiAgICAgIG9sZFByb3BlcnRpZXMgPSBjb250ZXh0Lm9sZFByb3BlcnRpZXMgfHwgZ2V0UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwga2V5cyhwcm9wZXJ0aWVzKSk7XG5cbiAgLy8gY2hlY2sgaWYgdGhlcmUgdGhlIHVwZGF0ZSBuZWVkcyBhbiBleHRlcm5hbCBlbGVtZW50IGZvciByZWZlcmVuY2VcbiAgaWYgKHR5cGVvZiByZWZlcmVuY2VUeXBlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcmVmZXJlbmNlUHJvcGVydHkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZm9yRWFjaChyb290RWxlbWVudHMsIGZ1bmN0aW9uKHJvb3RFbGVtZW50KSB7XG4gICAgICBpZiAoaXMocm9vdEVsZW1lbnQsIHJlZmVyZW5jZVR5cGUpKSB7XG4gICAgICAgIGlmIChyb290RWxlbWVudC5pZCA9PT0gcHJvcGVydGllc1tyZWZlcmVuY2VQcm9wZXJ0eV0pIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzW3JlZmVyZW5jZVByb3BlcnR5XSA9IHJvb3RFbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyB1cGRhdGUgcHJvcGVydGllc1xuICBzZXRQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LCBwcm9wZXJ0aWVzKTtcblxuICAvLyBzdG9yZSBvbGQgdmFsdWVzXG4gIGNvbnRleHQub2xkUHJvcGVydGllcyA9IG9sZFByb3BlcnRpZXM7XG4gIGNvbnRleHQuY2hhbmdlZCA9IGNoYW5nZWQ7XG5cbiAgLy8gaW5kaWNhdGUgY2hhbmdlZCBvbiBvYmplY3RzIGFmZmVjdGVkIGJ5IHRoZSB1cGRhdGVcbiAgcmV0dXJuIGNoYW5nZWQ7XG59O1xuXG4vKipcbiAqIFJldmVydHMgdGhlIHVwZGF0ZVxuICpcbiAqIEBtZXRob2QgIFVwZGF0ZUJ1c2luZXNzT2JqZWN0SGFuZGxlciNyZXZlcnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICpcbiAqIEByZXR1cm4ge2Rqcy5tb2RlLkJhc2V9IHRoZSB1cGRhdGVkIGVsZW1lbnRcbiAqL1xuVXBkYXRlQnVzaW5lc3NPYmplY3RIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIG9sZFByb3BlcnRpZXMgPSBjb250ZXh0Lm9sZFByb3BlcnRpZXMsXG4gICAgICBidXNpbmVzc09iamVjdCA9IGNvbnRleHQuYnVzaW5lc3NPYmplY3Q7XG5cbiAgLy8gdXBkYXRlIHByb3BlcnRpZXNcbiAgc2V0UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwgb2xkUHJvcGVydGllcyk7XG5cbiAgcmV0dXJuIGNvbnRleHQuY2hhbmdlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKTtcblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIGEgQlBNTiAyLjAgcHJvcGVydHkgdXBkYXRlXG4gKiBmb3IgYnVzaW5lc3Mgb2JqZWN0IGxpc3RzIHdoaWNoIGFyZSBub3QgcmVwcmVzZW50ZWQgaW4gdGhlXG4gKiBkaWFncmFtLlxuICpcbiAqIFRoaXMgaXMgdXNlZnVsIGluIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9wZXJ0aWVzIHBhbmVsIGluXG4gKiBvcmRlciB0byB1cGRhdGUgY2hpbGQgZWxlbWVudHMgb2YgZWxlbWVudHMgdmlzaWJsZSBpblxuICogdGhlIGRpYWdyYW0uXG4gKlxuICogRXhhbXBsZTogcGVyZm9ybSBhbiB1cGRhdGUgb2YgYSBzcGVjaWZpYyBldmVudCBkZWZpbml0aW9uXG4gKiBvZiBhbiBpbnRlcm1lZGlhdGUgZXZlbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gVXBkYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlcihlbGVtZW50UmVnaXN0cnksIGJwbW5GYWN0b3J5KSB7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fYnBtbkZhY3RvcnkgPSBicG1uRmFjdG9yeTtcbn1cblxuVXBkYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlci4kaW5qZWN0ID0gWyAnZWxlbWVudFJlZ2lzdHJ5JywgJ2JwbW5GYWN0b3J5JyBdO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVwZGF0ZUJ1c2luZXNzT2JqZWN0TGlzdEhhbmRsZXI7XG5cbmZ1bmN0aW9uIGVuc3VyZU5vdE51bGwocHJvcCwgbmFtZSkge1xuICBpZiAoIXByb3ApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobmFtZSArICdyZXF1aXJlZCcpO1xuICB9XG4gIHJldHVybiBwcm9wO1xufVxuXG4vLyBhcGkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogVXBkYXRlcyBhIGVsZW1lbnQgdW5kZXIgYSBwcm92aWRlZCBwYXJlbnQuXG4gKi9cblVwZGF0ZUJ1c2luZXNzT2JqZWN0TGlzdEhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGN1cnJlbnRPYmplY3QgPSBlbnN1cmVOb3ROdWxsKGNvbnRleHQuY3VycmVudE9iamVjdCwgJ2N1cnJlbnRPYmplY3QnKSxcbiAgICAgIHByb3BlcnR5TmFtZSA9IGVuc3VyZU5vdE51bGwoY29udGV4dC5wcm9wZXJ0eU5hbWUsICdwcm9wZXJ0eU5hbWUnKSxcbiAgICAgIHVwZGF0ZWRPYmplY3RMaXN0ID0gY29udGV4dC51cGRhdGVkT2JqZWN0TGlzdCxcbiAgICAgIG9iamVjdHNUb1JlbW92ZSA9IGNvbnRleHQub2JqZWN0c1RvUmVtb3ZlIHx8IFtdLFxuICAgICAgb2JqZWN0c1RvQWRkID0gY29udGV4dC5vYmplY3RzVG9BZGQgfHwgW10sXG4gICAgICBjaGFuZ2VkID0gWyBjb250ZXh0LmVsZW1lbnRdLCAvLyB0aGlzIHdpbGwgbm90IGNoYW5nZSBhbnkgZGlhZ3JhbS1qcyBlbGVtZW50c1xuICAgICAgcmVmZXJlbmNlUHJvcGVydHlOYW1lO1xuXG4gIGlmIChjb250ZXh0LnJlZmVyZW5jZVByb3BlcnR5TmFtZSkge1xuICAgIHJlZmVyZW5jZVByb3BlcnR5TmFtZSA9IGNvbnRleHQucmVmZXJlbmNlUHJvcGVydHlOYW1lO1xuICB9XG5cbiAgdmFyIG9iamVjdExpc3QgPSBjdXJyZW50T2JqZWN0W3Byb3BlcnR5TmFtZV07XG4gIC8vIGFkanVzdCBhcnJheSByZWZlcmVuY2UgaW4gdGhlIHBhcmVudCBidXNpbmVzcyBvYmplY3RcbiAgY29udGV4dC5wcmV2aW91c0xpc3QgPSBjdXJyZW50T2JqZWN0W3Byb3BlcnR5TmFtZV07XG5cbiAgaWYgKHVwZGF0ZWRPYmplY3RMaXN0KSB7XG4gICAgY3VycmVudE9iamVjdFtwcm9wZXJ0eU5hbWVdID0gdXBkYXRlZE9iamVjdExpc3Q7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxpc3RDb3B5ID0gW107XG4gICAgLy8gcmVtb3ZlIGFsbCBvYmplY3RzIHdoaWNoIHNob3VsZCBiZSByZW1vdmVkXG4gICAgZm9yRWFjaChvYmplY3RMaXN0LCBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgIGlmIChvYmplY3RzVG9SZW1vdmUuaW5kZXhPZihvYmplY3QpID09IC0xKSB7XG4gICAgICAgIGxpc3RDb3B5LnB1c2gob2JqZWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBhZGQgYWxsIG9iamVjdHMgd2hpY2ggc2hvdWxkIGJlIGFkZGVkXG4gICAgbGlzdENvcHkgPSBsaXN0Q29weS5jb25jYXQob2JqZWN0c1RvQWRkKTtcblxuICAgIC8vIHNldCBwcm9wZXJ0eSB0byBuZXcgbGlzdFxuICAgIGlmIChsaXN0Q29weS5sZW5ndGggPiAwIHx8ICFyZWZlcmVuY2VQcm9wZXJ0eU5hbWUpIHtcblxuICAgICAgLy8gYXMgbG9uZyBhcyB0aGVyZSBhcmUgZWxlbWVudHMgaW4gdGhlIGxpc3QgdXBkYXRlIHRoZSBsaXN0XG4gICAgICBjdXJyZW50T2JqZWN0W3Byb3BlcnR5TmFtZV0gPSBsaXN0Q29weTtcbiAgICB9IGVsc2UgaWYgKHJlZmVyZW5jZVByb3BlcnR5TmFtZSkge1xuXG4gICAgICAvLyByZW1vdmUgdGhlIGxpc3Qgd2hlbiBpdCBpcyBlbXB0eVxuICAgICAgdmFyIHBhcmVudE9iamVjdCA9IGN1cnJlbnRPYmplY3QuJHBhcmVudDtcbiAgICAgIHBhcmVudE9iamVjdC5zZXQocmVmZXJlbmNlUHJvcGVydHlOYW1lLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnRleHQuY2hhbmdlZCA9IGNoYW5nZWQ7XG5cbiAgLy8gaW5kaWNhdGUgY2hhbmdlZCBvbiBvYmplY3RzIGFmZmVjdGVkIGJ5IHRoZSB1cGRhdGVcbiAgcmV0dXJuIGNoYW5nZWQ7XG59O1xuXG4vKipcbiAqIFJldmVydHMgdGhlIHVwZGF0ZVxuICpcbiAqIEBtZXRob2QgIENyZWF0ZUJ1c2luZXNzT2JqZWN0TGlzdEhhbmRsZXIjcmV2ZXJ0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZS5CYXNlfSB0aGUgdXBkYXRlZCBlbGVtZW50XG4gKi9cblVwZGF0ZUJ1c2luZXNzT2JqZWN0TGlzdEhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY3VycmVudE9iamVjdCA9IGNvbnRleHQuY3VycmVudE9iamVjdCxcbiAgICAgIHByb3BlcnR5TmFtZSA9IGNvbnRleHQucHJvcGVydHlOYW1lLFxuICAgICAgcHJldmlvdXNMaXN0ID0gY29udGV4dC5wcmV2aW91c0xpc3QsXG4gICAgICBwYXJlbnRPYmplY3QgPSBjdXJyZW50T2JqZWN0LiRwYXJlbnQ7XG5cbiAgaWYgKGNvbnRleHQucmVmZXJlbmNlUHJvcGVydHlOYW1lKSB7XG4gICAgcGFyZW50T2JqZWN0LnNldChjb250ZXh0LnJlZmVyZW5jZVByb3BlcnR5TmFtZSwgY3VycmVudE9iamVjdCk7XG4gIH1cblxuICAvLyByZW1vdmUgbmV3IGVsZW1lbnRcbiAgY3VycmVudE9iamVjdC5zZXQocHJvcGVydHlOYW1lLCBwcmV2aW91c0xpc3QpO1xuXG4gIHJldHVybiBjb250ZXh0LmNoYW5nZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XG5cbnZhciBIQU5ETEVSUyA9IHtcbiAgJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0JzogcmVxdWlyZSgnLi9VcGRhdGVCdXNpbmVzc09iamVjdEhhbmRsZXInKSxcbiAgJ3Byb3BlcnRpZXMtcGFuZWwuY3JlYXRlLWFuZC1yZWZlcmVuY2UnOiByZXF1aXJlKCcuL0NyZWF0ZUFuZFJlZmVyZW5jZUhhbmRsZXInKSxcbiAgJ3Byb3BlcnRpZXMtcGFuZWwuY3JlYXRlLWJ1c2luZXNzb2JqZWN0LWxpc3QnOiByZXF1aXJlKCcuL0NyZWF0ZUJ1c2luZXNzT2JqZWN0TGlzdEhhbmRsZXInKSxcbiAgJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0LWxpc3QnOiByZXF1aXJlKCcuL1VwZGF0ZUJ1c2luZXNzT2JqZWN0TGlzdEhhbmRsZXInKSxcbiAgJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcic6IHJlcXVpcmUoJy4vTXVsdGlDb21tYW5kSGFuZGxlcicpXG59O1xuXG5cbmZ1bmN0aW9uIENvbW1hbmRJbml0aWFsaXplcihldmVudEJ1cywgY29tbWFuZFN0YWNrKSB7XG5cbiAgZXZlbnRCdXMub24oJ2RpYWdyYW0uaW5pdCcsIGZ1bmN0aW9uKCkge1xuICAgIGZvckVhY2goSEFORExFUlMsIGZ1bmN0aW9uKGhhbmRsZXIsIGlkKSB7XG4gICAgICBjb21tYW5kU3RhY2sucmVnaXN0ZXJIYW5kbGVyKGlkLCBoYW5kbGVyKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbkNvbW1hbmRJbml0aWFsaXplci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnLCAnY29tbWFuZFN0YWNrJyBdO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgX19pbml0X186IFsgQ29tbWFuZEluaXRpYWxpemVyIF1cbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgRWxlbWVudEhlbHBlciA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBFbGVtZW50SGVscGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZWxlbWVudCBhbmQgc2V0IHRoZSBwYXJlbnQgdG8gaXRcbiAqXG4gKiBAbWV0aG9kIEVsZW1lbnRIZWxwZXIjY3JlYXRlRWxlbWVudFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBlbGVtZW50VHlwZSBvZiB0aGUgbmV3IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIG9mIHRoZSBuZXcgZWxlbWVudCBpbiBrZXktdmFsdWUgcGFpcnNcbiAqIEBwYXJhbSB7bW9kZGxlLm9iamVjdH0gcGFyZW50IG9mIHRoZSBuZXcgZWxlbWVudFxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gZmFjdG9yeSB3aGljaCBjcmVhdGVzIHRoZSBuZXcgZWxlbWVudFxuICpcbiAqIEByZXR1cm5zIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudCB3aGljaCBpcyBjcmVhdGVkXG4gKi9cbkVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnRUeXBlLCBwcm9wZXJ0aWVzLCBwYXJlbnQsIGZhY3RvcnkpIHtcbiAgdmFyIGVsZW1lbnQgPSBmYWN0b3J5LmNyZWF0ZShlbGVtZW50VHlwZSwgcHJvcGVydGllcyk7XG4gIGVsZW1lbnQuJHBhcmVudCA9IHBhcmVudDtcblxuICByZXR1cm4gZWxlbWVudDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICByZXF1aXJlKCcuL2NtZCcpLFxuICAgIHJlcXVpcmUoJ2RpYWdyYW0tanMvbGliL2kxOG4vdHJhbnNsYXRlJykuZGVmYXVsdFxuICBdLFxuICBfX2luaXRfXzogWyAncHJvcGVydGllc1BhbmVsJyBdLFxuICBwcm9wZXJ0aWVzUGFuZWw6IFsgJ3R5cGUnLCByZXF1aXJlKCcuL1Byb3BlcnRpZXNQYW5lbCcpIF1cbn07XG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgSWRzIGZyb20gJ2lkcyc7XG5cbmltcG9ydCBCYXNlVmlld2VyIGZyb20gJy4vQmFzZVZpZXdlcic7XG5cblxuLyoqXG4gKiBBIGJhc2UgbW9kZWxlciBmb3IgQlBNTiAyLjAgZGlhZ3JhbXMuXG4gKlxuICogSGF2ZSBhIGxvb2sgYXQge0BsaW5rIE1vZGVsZXJ9IGZvciBhIGJ1bmRsZSB0aGF0IGluY2x1ZGVzIGFjdHVhbCBmZWF0dXJlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBwYXNzIHRvIHRoZSB2aWV3ZXJcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gW29wdGlvbnMuY29udGFpbmVyXSB0aGUgY29udGFpbmVyIHRvIHJlbmRlciB0aGUgdmlld2VyIGluLCBkZWZhdWx0cyB0byBib2R5LlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy53aWR0aF0gdGhlIHdpZHRoIG9mIHRoZSB2aWV3ZXJcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaGVpZ2h0XSB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3ZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5tb2RkbGVFeHRlbnNpb25zXSBleHRlbnNpb24gcGFja2FnZXMgdG8gcHJvdmlkZVxuICogQHBhcmFtIHtBcnJheTxkaWRpLk1vZHVsZT59IFtvcHRpb25zLm1vZHVsZXNdIGEgbGlzdCBvZiBtb2R1bGVzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG1vZHVsZXNcbiAqIEBwYXJhbSB7QXJyYXk8ZGlkaS5Nb2R1bGU+fSBbb3B0aW9ucy5hZGRpdGlvbmFsTW9kdWxlc10gYSBsaXN0IG9mIG1vZHVsZXMgdG8gdXNlIHdpdGggdGhlIGRlZmF1bHQgbW9kdWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCYXNlTW9kZWxlcihvcHRpb25zKSB7XG4gIEJhc2VWaWV3ZXIuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICAvLyBob29rIElEIGNvbGxlY3Rpb24gaW50byB0aGUgbW9kZWxlclxuICB0aGlzLm9uKCdpbXBvcnQucGFyc2UuY29tcGxldGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIGlmICghZXZlbnQuZXJyb3IpIHtcbiAgICAgIHRoaXMuX2NvbGxlY3RJZHMoZXZlbnQuZGVmaW5pdGlvbnMsIGV2ZW50LmVsZW1lbnRzQnlJZCk7XG4gICAgfVxuICB9LCB0aGlzKTtcblxuICB0aGlzLm9uKCdkaWFncmFtLmRlc3Ryb3knLCBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmdldCgnbW9kZGxlJykuaWRzLmNsZWFyKCk7XG4gIH0sIHRoaXMpO1xufVxuXG5pbmhlcml0cyhCYXNlTW9kZWxlciwgQmFzZVZpZXdlcik7XG5cblxuLyoqXG4gKiBDcmVhdGUgYSBtb2RkbGUgaW5zdGFuY2UsIGF0dGFjaGluZyBpZHMgdG8gaXQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqL1xuQmFzZU1vZGVsZXIucHJvdG90eXBlLl9jcmVhdGVNb2RkbGUgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIHZhciBtb2RkbGUgPSBCYXNlVmlld2VyLnByb3RvdHlwZS5fY3JlYXRlTW9kZGxlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgLy8gYXR0YWNoIGlkcyB0byBtb2RkbGUgdG8gYmUgYWJsZSB0byB0cmFja1xuICAvLyBhbmQgdmFsaWRhdGVkIGlkcyBpbiB0aGUgQlBNTiAyLjAgWE1MIGRvY3VtZW50XG4gIC8vIHRyZWVcbiAgbW9kZGxlLmlkcyA9IG5ldyBJZHMoWyAzMiwgMzYsIDEgXSk7XG5cbiAgcmV0dXJuIG1vZGRsZTtcbn07XG5cbi8qKlxuICogQ29sbGVjdCBpZHMgcHJvY2Vzc2VkIGR1cmluZyBwYXJzaW5nIG9mIHRoZVxuICogZGVmaW5pdGlvbnMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZGVmaW5pdGlvbnNcbiAqIEBwYXJhbSB7Q29udGV4dH0gY29udGV4dFxuICovXG5CYXNlTW9kZWxlci5wcm90b3R5cGUuX2NvbGxlY3RJZHMgPSBmdW5jdGlvbihkZWZpbml0aW9ucywgZWxlbWVudHNCeUlkKSB7XG5cbiAgdmFyIG1vZGRsZSA9IGRlZmluaXRpb25zLiRtb2RlbCxcbiAgICAgIGlkcyA9IG1vZGRsZS5pZHMsXG4gICAgICBpZDtcblxuICAvLyByZW1vdmUgcmVmZXJlbmNlcyBmcm9tIHByZXZpb3VzIGltcG9ydFxuICBpZHMuY2xlYXIoKTtcblxuICBmb3IgKGlkIGluIGVsZW1lbnRzQnlJZCkge1xuICAgIGlkcy5jbGFpbShpZCwgZWxlbWVudHNCeUlkW2lkXSk7XG4gIH1cbn07XG4iLCIvKipcbiAqIFRoZSBjb2RlIGluIHRoZSA8cHJvamVjdC1sb2dvPjwvcHJvamVjdC1sb2dvPiBhcmVhXG4gKiBtdXN0IG5vdCBiZSBjaGFuZ2VkLlxuICpcbiAqIEBzZWUgaHR0cDovL2JwbW4uaW8vbGljZW5zZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqL1xuaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmaW5kLFxuICBpc051bWJlcixcbiAgb21pdFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGRvbWlmeSxcbiAgcXVlcnkgYXMgZG9tUXVlcnksXG4gIHJlbW92ZSBhcyBkb21SZW1vdmVcbn0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7XG4gIGlubmVyU1ZHXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IERpYWdyYW0gZnJvbSAnZGlhZ3JhbS1qcyc7XG5pbXBvcnQgQnBtbk1vZGRsZSBmcm9tICdicG1uLW1vZGRsZSc7XG5cbmltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7XG4gIGltcG9ydEJwbW5EaWFncmFtXG59IGZyb20gJy4vaW1wb3J0L0ltcG9ydGVyJztcblxuaW1wb3J0IHtcbiAgd3JhcEZvckNvbXBhdGliaWxpdHlcbn0gZnJvbSAnLi91dGlsL0NvbXBhdGliaWxpdHlVdGlsJztcblxuLyoqXG4gKiBBIGJhc2Ugdmlld2VyIGZvciBCUE1OIDIuMCBkaWFncmFtcy5cbiAqXG4gKiBIYXZlIGEgbG9vayBhdCB7QGxpbmsgVmlld2VyfSwge0BsaW5rIE5hdmlnYXRlZFZpZXdlcn0gb3Ige0BsaW5rIE1vZGVsZXJ9IGZvclxuICogYnVuZGxlcyB0aGF0IGluY2x1ZGUgYWN0dWFsIGZlYXR1cmVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIHZpZXdlclxuICogQHBhcmFtIHtET01FbGVtZW50fSBbb3B0aW9ucy5jb250YWluZXJdIHRoZSBjb250YWluZXIgdG8gcmVuZGVyIHRoZSB2aWV3ZXIgaW4sIGRlZmF1bHRzIHRvIGJvZHkuXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLndpZHRoXSB0aGUgd2lkdGggb2YgdGhlIHZpZXdlclxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5oZWlnaHRdIHRoZSBoZWlnaHQgb2YgdGhlIHZpZXdlclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLm1vZGRsZUV4dGVuc2lvbnNdIGV4dGVuc2lvbiBwYWNrYWdlcyB0byBwcm92aWRlXG4gKiBAcGFyYW0ge0FycmF5PGRpZGkuTW9kdWxlPn0gW29wdGlvbnMubW9kdWxlc10gYSBsaXN0IG9mIG1vZHVsZXMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbW9kdWxlc1xuICogQHBhcmFtIHtBcnJheTxkaWRpLk1vZHVsZT59IFtvcHRpb25zLmFkZGl0aW9uYWxNb2R1bGVzXSBhIGxpc3Qgb2YgbW9kdWxlcyB0byB1c2Ugd2l0aCB0aGUgZGVmYXVsdCBtb2R1bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJhc2VWaWV3ZXIob3B0aW9ucykge1xuXG4gIG9wdGlvbnMgPSBhc3NpZ24oe30sIERFRkFVTFRfT1BUSU9OUywgb3B0aW9ucyk7XG5cbiAgdGhpcy5fbW9kZGxlID0gdGhpcy5fY3JlYXRlTW9kZGxlKG9wdGlvbnMpO1xuXG4gIHRoaXMuX2NvbnRhaW5lciA9IHRoaXMuX2NyZWF0ZUNvbnRhaW5lcihvcHRpb25zKTtcblxuICAvKiA8cHJvamVjdC1sb2dvPiAqL1xuXG4gIGFkZFByb2plY3RMb2dvKHRoaXMuX2NvbnRhaW5lcik7XG5cbiAgLyogPC9wcm9qZWN0LWxvZ28+ICovXG5cbiAgdGhpcy5faW5pdCh0aGlzLl9jb250YWluZXIsIHRoaXMuX21vZGRsZSwgb3B0aW9ucyk7XG59XG5cbmluaGVyaXRzKEJhc2VWaWV3ZXIsIERpYWdyYW0pO1xuXG4vKipcbiogVGhlIGltcG9ydFhNTCByZXN1bHQuXG4qXG4qIEB0eXBlZGVmIHtPYmplY3R9IEltcG9ydFhNTFJlc3VsdFxuKlxuKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IHdhcm5pbmdzXG4qL1xuXG4vKipcbiogVGhlIGltcG9ydFhNTCBlcnJvci5cbipcbiogQHR5cGVkZWYge0Vycm9yfSBJbXBvcnRYTUxFcnJvclxuKlxuKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IHdhcm5pbmdzXG4qL1xuXG4vKipcbiAqIFBhcnNlIGFuZCByZW5kZXIgYSBCUE1OIDIuMCBkaWFncmFtLlxuICpcbiAqIE9uY2UgZmluaXNoZWQgdGhlIHZpZXdlciByZXBvcnRzIGJhY2sgdGhlIHJlc3VsdCB0byB0aGVcbiAqIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggKGVyciwgd2FybmluZ3MpLlxuICpcbiAqICMjIExpZmUtQ3ljbGUgRXZlbnRzXG4gKlxuICogRHVyaW5nIGltcG9ydCB0aGUgdmlld2VyIHdpbGwgZmlyZSBsaWZlLWN5Y2xlIGV2ZW50czpcbiAqXG4gKiAgICogaW1wb3J0LnBhcnNlLnN0YXJ0IChhYm91dCB0byByZWFkIG1vZGVsIGZyb20geG1sKVxuICogICAqIGltcG9ydC5wYXJzZS5jb21wbGV0ZSAobW9kZWwgcmVhZDsgbWF5IGhhdmUgd29ya2VkIG9yIG5vdClcbiAqICAgKiBpbXBvcnQucmVuZGVyLnN0YXJ0IChncmFwaGljYWwgaW1wb3J0IHN0YXJ0KVxuICogICAqIGltcG9ydC5yZW5kZXIuY29tcGxldGUgKGdyYXBoaWNhbCBpbXBvcnQgZmluaXNoZWQpXG4gKiAgICogaW1wb3J0LmRvbmUgKGV2ZXJ5dGhpbmcgZG9uZSlcbiAqXG4gKiBZb3UgY2FuIHVzZSB0aGVzZSBldmVudHMgdG8gaG9vayBpbnRvIHRoZSBsaWZlLWN5Y2xlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB4bWwgdGhlIEJQTU4gMi4wIHhtbFxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50PEJQTU5EaWFncmFtPnxzdHJpbmd9IFticG1uRGlhZ3JhbV0gQlBNTiBkaWFncmFtIG9yIGlkIG9mIGRpYWdyYW0gdG8gcmVuZGVyIChpZiBub3QgcHJvdmlkZWQsIHRoZSBmaXJzdCBvbmUgd2lsbCBiZSByZW5kZXJlZClcbiAqXG4gKiBSZXR1cm5zIHtQcm9taXNlPEltcG9ydFhNTFJlc3VsdCwgSW1wb3J0WE1MRXJyb3I+fVxuICovXG5CYXNlVmlld2VyLnByb3RvdHlwZS5pbXBvcnRYTUwgPSB3cmFwRm9yQ29tcGF0aWJpbGl0eShmdW5jdGlvbiBpbXBvcnRYTUwoeG1sLCBicG1uRGlhZ3JhbSkge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBmdW5jdGlvbiBQYXJzZUNvbXBsZXRlRXZlbnQoZGF0YSkge1xuXG4gICAgdmFyIGV2ZW50ID0gc2VsZi5nZXQoJ2V2ZW50QnVzJykuY3JlYXRlRXZlbnQoZGF0YSk7XG5cbiAgICAvLyBUT0RPKG5pa2t1KTogcmVtb3ZlIHdpdGggZnV0dXJlIGJwbW4tanMgdmVyc2lvblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudCwgJ2NvbnRleHQnLCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcblxuICAgICAgICBjb25zb2xlLndhcm4obmV3IEVycm9yKFxuICAgICAgICAgICdpbXBvcnQucGFyc2UuY29tcGxldGUgPGNvbnRleHQ+IGlzIGRlcHJlY2F0ZWQgJyArXG4gICAgICAgICAgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIGxpYnJhcnkgdmVyc2lvbnMnXG4gICAgICAgICkpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgd2FybmluZ3M6IGRhdGEud2FybmluZ3MsXG4gICAgICAgICAgcmVmZXJlbmNlczogZGF0YS5yZWZlcmVuY2VzLFxuICAgICAgICAgIGVsZW1lbnRzQnlJZDogZGF0YS5lbGVtZW50c0J5SWRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBldmVudDtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblxuICAgIC8vIGhvb2sgaW4gcHJlLXBhcnNlIGxpc3RlbmVycyArXG4gICAgLy8gYWxsb3cgeG1sIG1hbmlwdWxhdGlvblxuICAgIHhtbCA9IHNlbGYuX2VtaXQoJ2ltcG9ydC5wYXJzZS5zdGFydCcsIHsgeG1sOiB4bWwgfSkgfHwgeG1sO1xuXG4gICAgc2VsZi5fbW9kZGxlLmZyb21YTUwoeG1sLCAnYnBtbjpEZWZpbml0aW9ucycpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICB2YXIgZGVmaW5pdGlvbnMgPSByZXN1bHQucm9vdEVsZW1lbnQ7XG4gICAgICB2YXIgcmVmZXJlbmNlcyA9IHJlc3VsdC5yZWZlcmVuY2VzO1xuICAgICAgdmFyIHBhcnNlV2FybmluZ3MgPSByZXN1bHQud2FybmluZ3M7XG4gICAgICB2YXIgZWxlbWVudHNCeUlkID0gcmVzdWx0LmVsZW1lbnRzQnlJZDtcblxuICAgICAgLy8gaG9vayBpbiBwb3N0IHBhcnNlIGxpc3RlbmVycyArXG4gICAgICAvLyBhbGxvdyBkZWZpbml0aW9ucyBtYW5pcHVsYXRpb25cbiAgICAgIGRlZmluaXRpb25zID0gc2VsZi5fZW1pdCgnaW1wb3J0LnBhcnNlLmNvbXBsZXRlJywgUGFyc2VDb21wbGV0ZUV2ZW50KHtcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIGRlZmluaXRpb25zOiBkZWZpbml0aW9ucyxcbiAgICAgICAgZWxlbWVudHNCeUlkOiBlbGVtZW50c0J5SWQsXG4gICAgICAgIHJlZmVyZW5jZXM6IHJlZmVyZW5jZXMsXG4gICAgICAgIHdhcm5pbmdzOiBwYXJzZVdhcm5pbmdzXG4gICAgICB9KSkgfHwgZGVmaW5pdGlvbnM7XG5cbiAgICAgIHNlbGYuaW1wb3J0RGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMsIGJwbW5EaWFncmFtKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICB2YXIgYWxsV2FybmluZ3MgPSBbXS5jb25jYXQocGFyc2VXYXJuaW5ncywgcmVzdWx0Lndhcm5pbmdzIHx8IFtdKTtcblxuICAgICAgICBzZWxmLl9lbWl0KCdpbXBvcnQuZG9uZScsIHsgZXJyb3I6IG51bGwsIHdhcm5pbmdzOiBhbGxXYXJuaW5ncyB9KTtcblxuICAgICAgICByZXR1cm4gcmVzb2x2ZSh7IHdhcm5pbmdzOiBhbGxXYXJuaW5ncyB9KTtcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuICAgICAgICB2YXIgYWxsV2FybmluZ3MgPSBbXS5jb25jYXQocGFyc2VXYXJuaW5ncywgZXJyLndhcm5pbmdzIHx8IFtdKTtcblxuICAgICAgICBzZWxmLl9lbWl0KCdpbXBvcnQuZG9uZScsIHsgZXJyb3I6IGVyciwgd2FybmluZ3M6IGFsbFdhcm5pbmdzIH0pO1xuXG4gICAgICAgIHJldHVybiByZWplY3QoYWRkV2FybmluZ3NUb0Vycm9yKGVyciwgYWxsV2FybmluZ3MpKTtcbiAgICAgIH0pO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuXG4gICAgICBzZWxmLl9lbWl0KCdpbXBvcnQucGFyc2UuY29tcGxldGUnLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuXG4gICAgICBlcnIgPSBjaGVja1ZhbGlkYXRpb25FcnJvcihlcnIpO1xuXG4gICAgICBzZWxmLl9lbWl0KCdpbXBvcnQuZG9uZScsIHsgZXJyb3I6IGVyciwgd2FybmluZ3M6IGVyci53YXJuaW5ncyB9KTtcblxuICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG4vKipcbiogVGhlIGltcG9ydERlZmluaXRpb25zIHJlc3VsdC5cbipcbiogQHR5cGVkZWYge09iamVjdH0gSW1wb3J0RGVmaW5pdGlvbnNSZXN1bHRcbipcbiogQHByb3BlcnR5IHtBcnJheTxzdHJpbmc+fSB3YXJuaW5nc1xuKi9cblxuLyoqXG4qIFRoZSBpbXBvcnREZWZpbml0aW9ucyBlcnJvci5cbipcbiogQHR5cGVkZWYge0Vycm9yfSBJbXBvcnREZWZpbml0aW9uc0Vycm9yXG4qXG4qIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gd2FybmluZ3NcbiovXG5cbi8qKlxuICogSW1wb3J0IHBhcnNlZCBkZWZpbml0aW9ucyBhbmQgcmVuZGVyIGEgQlBNTiAyLjAgZGlhZ3JhbS5cbiAqXG4gKiBPbmNlIGZpbmlzaGVkIHRoZSB2aWV3ZXIgcmVwb3J0cyBiYWNrIHRoZSByZXN1bHQgdG8gdGhlXG4gKiBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIChlcnIsIHdhcm5pbmdzKS5cbiAqXG4gKiAjIyBMaWZlLUN5Y2xlIEV2ZW50c1xuICpcbiAqIER1cmluZyBpbXBvcnQgdGhlIHZpZXdlciB3aWxsIGZpcmUgbGlmZS1jeWNsZSBldmVudHM6XG4gKlxuICogICAqIGltcG9ydC5yZW5kZXIuc3RhcnQgKGdyYXBoaWNhbCBpbXBvcnQgc3RhcnQpXG4gKiAgICogaW1wb3J0LnJlbmRlci5jb21wbGV0ZSAoZ3JhcGhpY2FsIGltcG9ydCBmaW5pc2hlZClcbiAqXG4gKiBZb3UgY2FuIHVzZSB0aGVzZSBldmVudHMgdG8gaG9vayBpbnRvIHRoZSBsaWZlLWN5Y2xlLlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudDxEZWZpbml0aW9ucz59IGRlZmluaXRpb25zIHBhcnNlZCBCUE1OIDIuMCBkZWZpbml0aW9uc1xuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50PEJQTU5EaWFncmFtPnxzdHJpbmd9IFticG1uRGlhZ3JhbV0gQlBNTiBkaWFncmFtIG9yIGlkIG9mIGRpYWdyYW0gdG8gcmVuZGVyIChpZiBub3QgcHJvdmlkZWQsIHRoZSBmaXJzdCBvbmUgd2lsbCBiZSByZW5kZXJlZClcbiAqXG4gKiBSZXR1cm5zIHtQcm9taXNlPEltcG9ydERlZmluaXRpb25zUmVzdWx0LCBJbXBvcnREZWZpbml0aW9uc0Vycm9yPn1cbiAqL1xuQmFzZVZpZXdlci5wcm90b3R5cGUuaW1wb3J0RGVmaW5pdGlvbnMgPSB3cmFwRm9yQ29tcGF0aWJpbGl0eShmdW5jdGlvbiBpbXBvcnREZWZpbml0aW9ucyhkZWZpbml0aW9ucywgYnBtbkRpYWdyYW0pIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXG4gICAgc2VsZi5fc2V0RGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMpO1xuXG4gICAgc2VsZi5vcGVuKGJwbW5EaWFncmFtKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuXG4gICAgICB2YXIgd2FybmluZ3MgPSByZXN1bHQud2FybmluZ3M7XG5cbiAgICAgIHJldHVybiByZXNvbHZlKHsgd2FybmluZ3M6IHdhcm5pbmdzIH0pO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuXG4gICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbi8qKlxuICogVGhlIG9wZW4gcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE9wZW5SZXN1bHRcbiAqXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IHdhcm5pbmdzXG4gKi9cblxuLyoqXG4qIFRoZSBvcGVuIGVycm9yLlxuKlxuKiBAdHlwZWRlZiB7RXJyb3J9IE9wZW5FcnJvclxuKlxuKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IHdhcm5pbmdzXG4qL1xuXG4vKipcbiAqIE9wZW4gZGlhZ3JhbSBvZiBwcmV2aW91c2x5IGltcG9ydGVkIFhNTC5cbiAqXG4gKiBPbmNlIGZpbmlzaGVkIHRoZSB2aWV3ZXIgcmVwb3J0cyBiYWNrIHRoZSByZXN1bHQgdG8gdGhlXG4gKiBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIChlcnIsIHdhcm5pbmdzKS5cbiAqXG4gKiAjIyBMaWZlLUN5Y2xlIEV2ZW50c1xuICpcbiAqIER1cmluZyBzd2l0Y2ggdGhlIHZpZXdlciB3aWxsIGZpcmUgbGlmZS1jeWNsZSBldmVudHM6XG4gKlxuICogICAqIGltcG9ydC5yZW5kZXIuc3RhcnQgKGdyYXBoaWNhbCBpbXBvcnQgc3RhcnQpXG4gKiAgICogaW1wb3J0LnJlbmRlci5jb21wbGV0ZSAoZ3JhcGhpY2FsIGltcG9ydCBmaW5pc2hlZClcbiAqXG4gKiBZb3UgY2FuIHVzZSB0aGVzZSBldmVudHMgdG8gaG9vayBpbnRvIHRoZSBsaWZlLWN5Y2xlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfE1vZGRsZUVsZW1lbnQ8QlBNTkRpYWdyYW0+fSBbYnBtbkRpYWdyYW1PcklkXSBpZCBvciB0aGUgZGlhZ3JhbSB0byBvcGVuXG4gKlxuICogUmV0dXJucyB7UHJvbWlzZTxPcGVuUmVzdWx0LCBPcGVuRXJyb3I+fVxuICovXG5CYXNlVmlld2VyLnByb3RvdHlwZS5vcGVuID0gd3JhcEZvckNvbXBhdGliaWxpdHkoZnVuY3Rpb24gb3BlbihicG1uRGlhZ3JhbU9ySWQpIHtcblxuICB2YXIgZGVmaW5pdGlvbnMgPSB0aGlzLl9kZWZpbml0aW9ucztcbiAgdmFyIGJwbW5EaWFncmFtID0gYnBtbkRpYWdyYW1PcklkO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgaWYgKCFkZWZpbml0aW9ucykge1xuICAgICAgdmFyIGVycjEgPSBuZXcgRXJyb3IoJ25vIFhNTCBpbXBvcnRlZCcpO1xuXG4gICAgICByZXR1cm4gcmVqZWN0KGFkZFdhcm5pbmdzVG9FcnJvcihlcnIxLCBbXSkpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYnBtbkRpYWdyYW1PcklkID09PSAnc3RyaW5nJykge1xuICAgICAgYnBtbkRpYWdyYW0gPSBmaW5kQlBNTkRpYWdyYW0oZGVmaW5pdGlvbnMsIGJwbW5EaWFncmFtT3JJZCk7XG5cbiAgICAgIGlmICghYnBtbkRpYWdyYW0pIHtcbiAgICAgICAgdmFyIGVycjIgPSBuZXcgRXJyb3IoJ0JQTU5EaWFncmFtIDwnICsgYnBtbkRpYWdyYW1PcklkICsgJz4gbm90IGZvdW5kJyk7XG5cbiAgICAgICAgcmV0dXJuIHJlamVjdChhZGRXYXJuaW5nc1RvRXJyb3IoZXJyMiwgW10pKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjbGVhciBleGlzdGluZyByZW5kZXJlZCBkaWFncmFtXG4gICAgLy8gY2F0Y2ggc3luY2hyb25vdXMgZXhjZXB0aW9ucyBkdXJpbmcgI2NsZWFyKClcbiAgICB0cnkge1xuICAgICAgc2VsZi5jbGVhcigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG5cbiAgICAgIHJldHVybiByZWplY3QoYWRkV2FybmluZ3NUb0Vycm9yKGVycm9yLCBbXSkpO1xuICAgIH1cblxuICAgIC8vIHBlcmZvcm0gZ3JhcGhpY2FsIGltcG9ydFxuICAgIGltcG9ydEJwbW5EaWFncmFtKHNlbGYsIGRlZmluaXRpb25zLCBicG1uRGlhZ3JhbSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcblxuICAgICAgdmFyIHdhcm5pbmdzID0gcmVzdWx0Lndhcm5pbmdzO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh7IHdhcm5pbmdzOiB3YXJuaW5ncyB9KTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpIHtcblxuICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG4vKipcbiAqIFRoZSBzYXZlWE1MIHJlc3VsdC5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTYXZlWE1MUmVzdWx0XG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHhtbFxuICovXG5cbi8qKlxuICogRXhwb3J0IHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIEJQTU4gMi4wIGRpYWdyYW0gYXNcbiAqIGEgQlBNTiAyLjAgWE1MIGRvY3VtZW50LlxuICpcbiAqICMjIExpZmUtQ3ljbGUgRXZlbnRzXG4gKlxuICogRHVyaW5nIFhNTCBzYXZpbmcgdGhlIHZpZXdlciB3aWxsIGZpcmUgbGlmZS1jeWNsZSBldmVudHM6XG4gKlxuICogICAqIHNhdmVYTUwuc3RhcnQgKGJlZm9yZSBzZXJpYWxpemF0aW9uKVxuICogICAqIHNhdmVYTUwuc2VyaWFsaXplZCAoYWZ0ZXIgeG1sIGdlbmVyYXRpb24pXG4gKiAgICogc2F2ZVhNTC5kb25lIChldmVyeXRoaW5nIGRvbmUpXG4gKlxuICogWW91IGNhbiB1c2UgdGhlc2UgZXZlbnRzIHRvIGhvb2sgaW50byB0aGUgbGlmZS1jeWNsZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIGV4cG9ydCBvcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmZvcm1hdD1mYWxzZV0gb3V0cHV0IGZvcm1hdHRlZCBYTUxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucHJlYW1ibGU9dHJ1ZV0gb3V0cHV0IHByZWFtYmxlXG4gKlxuICogUmV0dXJucyB7UHJvbWlzZTxTYXZlWE1MUmVzdWx0LCBFcnJvcj59XG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLnNhdmVYTUwgPSB3cmFwRm9yQ29tcGF0aWJpbGl0eShmdW5jdGlvbiBzYXZlWE1MKG9wdGlvbnMpIHtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIGRlZmluaXRpb25zID0gdGhpcy5fZGVmaW5pdGlvbnM7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXG4gICAgaWYgKCFkZWZpbml0aW9ucykge1xuICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignbm8gZGVmaW5pdGlvbnMgbG9hZGVkJyk7XG5cbiAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICAvLyBhbGxvdyB0byBmaWRkbGUgYXJvdW5kIHdpdGggZGVmaW5pdGlvbnNcbiAgICBkZWZpbml0aW9ucyA9IHNlbGYuX2VtaXQoJ3NhdmVYTUwuc3RhcnQnLCB7XG4gICAgICBkZWZpbml0aW9uczogZGVmaW5pdGlvbnNcbiAgICB9KSB8fCBkZWZpbml0aW9ucztcblxuICAgIHNlbGYuX21vZGRsZS50b1hNTChkZWZpbml0aW9ucywgb3B0aW9ucykudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcblxuICAgICAgdmFyIHhtbCA9IHJlc3VsdC54bWw7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHhtbCA9IHNlbGYuX2VtaXQoJ3NhdmVYTUwuc2VyaWFsaXplZCcsIHtcbiAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICB4bWw6IHhtbFxuICAgICAgICB9KSB8fCB4bWw7XG5cbiAgICAgICAgc2VsZi5fZW1pdCgnc2F2ZVhNTC5kb25lJywge1xuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIHhtbDogeG1sXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdlcnJvciBpbiBzYXZlWE1MIGxpZmUtY3ljbGUgbGlzdGVuZXInLCBlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc29sdmUoeyB4bWw6IHhtbCB9KTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpIHtcblxuICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG4vKipcbiAqIFRoZSBzYXZlU1ZHIHJlc3VsdC5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTYXZlU1ZHUmVzdWx0XG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN2Z1xuICovXG5cbi8qKlxuICogRXhwb3J0IHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIEJQTU4gMi4wIGRpYWdyYW0gYXNcbiAqIGFuIFNWRyBpbWFnZS5cbiAqXG4gKiAjIyBMaWZlLUN5Y2xlIEV2ZW50c1xuICpcbiAqIER1cmluZyBTVkcgc2F2aW5nIHRoZSB2aWV3ZXIgd2lsbCBmaXJlIGxpZmUtY3ljbGUgZXZlbnRzOlxuICpcbiAqICAgKiBzYXZlU1ZHLnN0YXJ0IChiZWZvcmUgc2VyaWFsaXphdGlvbilcbiAqICAgKiBzYXZlU1ZHLmRvbmUgKGV2ZXJ5dGhpbmcgZG9uZSlcbiAqXG4gKiBZb3UgY2FuIHVzZSB0aGVzZSBldmVudHMgdG8gaG9vayBpbnRvIHRoZSBsaWZlLWN5Y2xlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqXG4gKiBSZXR1cm5zIHtQcm9taXNlPFNhdmVTVkdSZXN1bHQsIEVycm9yPn1cbiAqL1xuQmFzZVZpZXdlci5wcm90b3R5cGUuc2F2ZVNWRyA9IHdyYXBGb3JDb21wYXRpYmlsaXR5KGZ1bmN0aW9uIHNhdmVTVkcob3B0aW9ucykge1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cbiAgICBzZWxmLl9lbWl0KCdzYXZlU1ZHLnN0YXJ0Jyk7XG5cbiAgICB2YXIgc3ZnLCBlcnI7XG5cbiAgICB0cnkge1xuICAgICAgdmFyIGNhbnZhcyA9IHNlbGYuZ2V0KCdjYW52YXMnKTtcblxuICAgICAgdmFyIGNvbnRlbnROb2RlID0gY2FudmFzLmdldERlZmF1bHRMYXllcigpLFxuICAgICAgICAgIGRlZnNOb2RlID0gZG9tUXVlcnkoJ2RlZnMnLCBjYW52YXMuX3N2Zyk7XG5cbiAgICAgIHZhciBjb250ZW50cyA9IGlubmVyU1ZHKGNvbnRlbnROb2RlKSxcbiAgICAgICAgICBkZWZzID0gZGVmc05vZGUgPyAnPGRlZnM+JyArIGlubmVyU1ZHKGRlZnNOb2RlKSArICc8L2RlZnM+JyA6ICcnO1xuXG4gICAgICB2YXIgYmJveCA9IGNvbnRlbnROb2RlLmdldEJCb3goKTtcblxuICAgICAgc3ZnID1cbiAgICAgICAgJzw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cInV0Zi04XCI/PlxcbicgK1xuICAgICAgICAnPCEtLSBjcmVhdGVkIHdpdGggYnBtbi1qcyAvIGh0dHA6Ly9icG1uLmlvIC0tPlxcbicgK1xuICAgICAgICAnPCFET0NUWVBFIHN2ZyBQVUJMSUMgXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlwiIFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXCI+XFxuJyArXG4gICAgICAgICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiAnICtcbiAgICAgICAgICAgICAnd2lkdGg9XCInICsgYmJveC53aWR0aCArICdcIiBoZWlnaHQ9XCInICsgYmJveC5oZWlnaHQgKyAnXCIgJyArXG4gICAgICAgICAgICAgJ3ZpZXdCb3g9XCInICsgYmJveC54ICsgJyAnICsgYmJveC55ICsgJyAnICsgYmJveC53aWR0aCArICcgJyArIGJib3guaGVpZ2h0ICsgJ1wiIHZlcnNpb249XCIxLjFcIj4nICtcbiAgICAgICAgICBkZWZzICsgY29udGVudHMgK1xuICAgICAgICAnPC9zdmc+JztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnIgPSBlO1xuICAgIH1cblxuICAgIHNlbGYuX2VtaXQoJ3NhdmVTVkcuZG9uZScsIHtcbiAgICAgIGVycm9yOiBlcnIsXG4gICAgICBzdmc6IHN2Z1xuICAgIH0pO1xuXG4gICAgaWYgKCFlcnIpIHtcbiAgICAgIHJldHVybiByZXNvbHZlKHsgc3ZnOiBzdmcgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICB9KTtcbn0pO1xuXG4vKipcbiAqIEdldCBhIG5hbWVkIGRpYWdyYW0gc2VydmljZS5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBlbGVtZW50UmVnaXN0cnkgPSB2aWV3ZXIuZ2V0KCdlbGVtZW50UmVnaXN0cnknKTtcbiAqIHZhciBzdGFydEV2ZW50U2hhcGUgPSBlbGVtZW50UmVnaXN0cnkuZ2V0KCdTdGFydEV2ZW50XzEnKTtcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gZGlhZ3JhbSBzZXJ2aWNlIGluc3RhbmNlXG4gKlxuICogQG1ldGhvZCBCYXNlVmlld2VyI2dldFxuICovXG5cbi8qKlxuICogSW52b2tlIGEgZnVuY3Rpb24gaW4gdGhlIGNvbnRleHQgb2YgdGhpcyB2aWV3ZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiB2aWV3ZXIuaW52b2tlKGZ1bmN0aW9uKGVsZW1lbnRSZWdpc3RyeSkge1xuICogICB2YXIgc3RhcnRFdmVudFNoYXBlID0gZWxlbWVudFJlZ2lzdHJ5LmdldCgnU3RhcnRFdmVudF8xJyk7XG4gKiB9KTtcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiB0byBiZSBpbnZva2VkXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB0aGUgZnVuY3Rpb25zIHJldHVybiB2YWx1ZVxuICpcbiAqIEBtZXRob2QgQmFzZVZpZXdlciNpbnZva2VcbiAqL1xuXG5cbkJhc2VWaWV3ZXIucHJvdG90eXBlLl9zZXREZWZpbml0aW9ucyA9IGZ1bmN0aW9uKGRlZmluaXRpb25zKSB7XG4gIHRoaXMuX2RlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG59O1xuXG5CYXNlVmlld2VyLnByb3RvdHlwZS5nZXRNb2R1bGVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9tb2R1bGVzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGRyYXduIGVsZW1lbnRzIGZyb20gdGhlIHZpZXdlci5cbiAqXG4gKiBBZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIHRoZSB2aWV3ZXIgY2FuIHN0aWxsXG4gKiBiZSByZXVzZWQgZm9yIG9wZW5pbmcgYW5vdGhlciBkaWFncmFtLlxuICpcbiAqIEBtZXRob2QgQmFzZVZpZXdlciNjbGVhclxuICovXG5CYXNlVmlld2VyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuZ2V0RGVmaW5pdGlvbnMoKSkge1xuXG4gICAgLy8gbm8gZGlhZ3JhbSB0byBjbGVhclxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHJlbW92ZSBidXNpbmVzc09iamVjdCNkaSBiaW5kaW5nXG4gIC8vXG4gIC8vIHRoaXMgaXMgbmVjZXNzYXJ5LCBhcyB3ZSBlc3RhYmxpc2ggdGhlIGJpbmRpbmdzXG4gIC8vIGluIHRoZSBCcG1uVHJlZVdhbGtlciAoYW5kIGFzc3VtZSBub25lIGFyZSBnaXZlblxuICAvLyBvbiByZWltcG9ydClcbiAgdGhpcy5nZXQoJ2VsZW1lbnRSZWdpc3RyeScpLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHZhciBibyA9IGVsZW1lbnQuYnVzaW5lc3NPYmplY3Q7XG5cbiAgICBpZiAoYm8gJiYgYm8uZGkpIHtcbiAgICAgIGRlbGV0ZSBiby5kaTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHJlbW92ZSBkcmF3biBlbGVtZW50c1xuICBEaWFncmFtLnByb3RvdHlwZS5jbGVhci5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95IHRoZSB2aWV3ZXIgaW5zdGFuY2UgYW5kIHJlbW92ZSBhbGwgaXRzXG4gKiByZW1haW5kZXJzIGZyb20gdGhlIGRvY3VtZW50IHRyZWUuXG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcblxuICAvLyBkaWFncmFtIGRlc3Ryb3lcbiAgRGlhZ3JhbS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gIC8vIGRvbSBkZXRhY2hcbiAgZG9tUmVtb3ZlKHRoaXMuX2NvbnRhaW5lcik7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGFuIGV2ZW50IGxpc3RlbmVyXG4gKlxuICogUmVtb3ZlIGEgcHJldmlvdXNseSBhZGRlZCBsaXN0ZW5lciB2aWEge0BsaW5rICNvZmYoZXZlbnQsIGNhbGxiYWNrKX0uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gKiBAcGFyYW0ge251bWJlcn0gW3ByaW9yaXR5XVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBwYXJhbSB7T2JqZWN0fSBbdGhhdF1cbiAqL1xuQmFzZVZpZXdlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbihldmVudCwgcHJpb3JpdHksIGNhbGxiYWNrLCB0YXJnZXQpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0KCdldmVudEJ1cycpLm9uKGV2ZW50LCBwcmlvcml0eSwgY2FsbGJhY2ssIHRhcmdldCk7XG59O1xuXG4vKipcbiAqIERlLXJlZ2lzdGVyIGFuIGV2ZW50IGxpc3RlbmVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5CYXNlVmlld2VyLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbihldmVudCwgY2FsbGJhY2spIHtcbiAgdGhpcy5nZXQoJ2V2ZW50QnVzJykub2ZmKGV2ZW50LCBjYWxsYmFjayk7XG59O1xuXG5CYXNlVmlld2VyLnByb3RvdHlwZS5hdHRhY2hUbyA9IGZ1bmN0aW9uKHBhcmVudE5vZGUpIHtcblxuICBpZiAoIXBhcmVudE5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudE5vZGUgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIC8vIGVuc3VyZSB3ZSBkZXRhY2ggZnJvbSB0aGVcbiAgLy8gcHJldmlvdXMsIG9sZCBwYXJlbnRcbiAgdGhpcy5kZXRhY2goKTtcblxuICAvLyB1bndyYXAgalF1ZXJ5IGlmIHByb3ZpZGVkXG4gIGlmIChwYXJlbnROb2RlLmdldCAmJiBwYXJlbnROb2RlLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5qcXVlcnkpIHtcbiAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5nZXQoMCk7XG4gIH1cblxuICBpZiAodHlwZW9mIHBhcmVudE5vZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcGFyZW50Tm9kZSA9IGRvbVF1ZXJ5KHBhcmVudE5vZGUpO1xuICB9XG5cbiAgcGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpO1xuXG4gIHRoaXMuX2VtaXQoJ2F0dGFjaCcsIHt9KTtcblxuICB0aGlzLmdldCgnY2FudmFzJykucmVzaXplZCgpO1xufTtcblxuQmFzZVZpZXdlci5wcm90b3R5cGUuZ2V0RGVmaW5pdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2RlZmluaXRpb25zO1xufTtcblxuQmFzZVZpZXdlci5wcm90b3R5cGUuZGV0YWNoID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lcixcbiAgICAgIHBhcmVudE5vZGUgPSBjb250YWluZXIucGFyZW50Tm9kZTtcblxuICBpZiAoIXBhcmVudE5vZGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9lbWl0KCdkZXRhY2gnLCB7fSk7XG5cbiAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjb250YWluZXIpO1xufTtcblxuQmFzZVZpZXdlci5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbihjb250YWluZXIsIG1vZGRsZSwgb3B0aW9ucykge1xuXG4gIHZhciBiYXNlTW9kdWxlcyA9IG9wdGlvbnMubW9kdWxlcyB8fCB0aGlzLmdldE1vZHVsZXMoKSxcbiAgICAgIGFkZGl0aW9uYWxNb2R1bGVzID0gb3B0aW9ucy5hZGRpdGlvbmFsTW9kdWxlcyB8fCBbXSxcbiAgICAgIHN0YXRpY01vZHVsZXMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBicG1uanM6IFsgJ3ZhbHVlJywgdGhpcyBdLFxuICAgICAgICAgIG1vZGRsZTogWyAndmFsdWUnLCBtb2RkbGUgXVxuICAgICAgICB9XG4gICAgICBdO1xuXG4gIHZhciBkaWFncmFtTW9kdWxlcyA9IFtdLmNvbmNhdChzdGF0aWNNb2R1bGVzLCBiYXNlTW9kdWxlcywgYWRkaXRpb25hbE1vZHVsZXMpO1xuXG4gIHZhciBkaWFncmFtT3B0aW9ucyA9IGFzc2lnbihvbWl0KG9wdGlvbnMsIFsgJ2FkZGl0aW9uYWxNb2R1bGVzJyBdKSwge1xuICAgIGNhbnZhczogYXNzaWduKHt9LCBvcHRpb25zLmNhbnZhcywgeyBjb250YWluZXI6IGNvbnRhaW5lciB9KSxcbiAgICBtb2R1bGVzOiBkaWFncmFtTW9kdWxlc1xuICB9KTtcblxuICAvLyBpbnZva2UgZGlhZ3JhbSBjb25zdHJ1Y3RvclxuICBEaWFncmFtLmNhbGwodGhpcywgZGlhZ3JhbU9wdGlvbnMpO1xuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY29udGFpbmVyKSB7XG4gICAgdGhpcy5hdHRhY2hUbyhvcHRpb25zLmNvbnRhaW5lcik7XG4gIH1cbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCBvbiB0aGUgdW5kZXJseWluZyB7QGxpbmsgRXZlbnRCdXN9XG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0gIHtPYmplY3R9IGV2ZW50XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBldmVudCBwcm9jZXNzaW5nIHJlc3VsdCAoaWYgYW55KVxuICovXG5CYXNlVmlld2VyLnByb3RvdHlwZS5fZW1pdCA9IGZ1bmN0aW9uKHR5cGUsIGV2ZW50KSB7XG4gIHJldHVybiB0aGlzLmdldCgnZXZlbnRCdXMnKS5maXJlKHR5cGUsIGV2ZW50KTtcbn07XG5cbkJhc2VWaWV3ZXIucHJvdG90eXBlLl9jcmVhdGVDb250YWluZXIgPSBmdW5jdGlvbihvcHRpb25zKSB7XG5cbiAgdmFyIGNvbnRhaW5lciA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImJqcy1jb250YWluZXJcIj48L2Rpdj4nKTtcblxuICBhc3NpZ24oY29udGFpbmVyLnN0eWxlLCB7XG4gICAgd2lkdGg6IGVuc3VyZVVuaXQob3B0aW9ucy53aWR0aCksXG4gICAgaGVpZ2h0OiBlbnN1cmVVbml0KG9wdGlvbnMuaGVpZ2h0KSxcbiAgICBwb3NpdGlvbjogb3B0aW9ucy5wb3NpdGlvblxuICB9KTtcblxuICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuQmFzZVZpZXdlci5wcm90b3R5cGUuX2NyZWF0ZU1vZGRsZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgdmFyIG1vZGRsZU9wdGlvbnMgPSBhc3NpZ24oe30sIHRoaXMuX21vZGRsZUV4dGVuc2lvbnMsIG9wdGlvbnMubW9kZGxlRXh0ZW5zaW9ucyk7XG5cbiAgcmV0dXJuIG5ldyBCcG1uTW9kZGxlKG1vZGRsZU9wdGlvbnMpO1xufTtcblxuQmFzZVZpZXdlci5wcm90b3R5cGUuX21vZHVsZXMgPSBbXTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gYWRkV2FybmluZ3NUb0Vycm9yKGVyciwgd2FybmluZ3NBcnkpIHtcbiAgZXJyLndhcm5pbmdzID0gd2FybmluZ3NBcnk7XG4gIHJldHVybiBlcnI7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVmFsaWRhdGlvbkVycm9yKGVycikge1xuXG4gIC8vIGNoZWNrIGlmIHdlIGNhbiBoZWxwIHRoZSB1c2VyIGJ5IGluZGljYXRpbmcgd3JvbmcgQlBNTiAyLjAgeG1sXG4gIC8vIChpbiBjYXNlIGhlIG9yIHRoZSBleHBvcnRpbmcgdG9vbCBkaWQgbm90IGdldCB0aGF0IHJpZ2h0KVxuXG4gIHZhciBwYXR0ZXJuID0gL3VucGFyc2FibGUgY29udGVudCA8KFtePl0rKT4gZGV0ZWN0ZWQoW1xcc1xcU10qKSQvO1xuICB2YXIgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoZXJyLm1lc3NhZ2UpO1xuXG4gIGlmIChtYXRjaCkge1xuICAgIGVyci5tZXNzYWdlID1cbiAgICAgICd1bnBhcnNhYmxlIGNvbnRlbnQgPCcgKyBtYXRjaFsxXSArICc+IGRldGVjdGVkOyAnICtcbiAgICAgICd0aGlzIG1heSBpbmRpY2F0ZSBhbiBpbnZhbGlkIEJQTU4gMi4wIGRpYWdyYW0gZmlsZScgKyBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiBlcnI7XG59XG5cbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIHdpZHRoOiAnMTAwJScsXG4gIGhlaWdodDogJzEwMCUnLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xufTtcblxuXG4vKipcbiAqIEVuc3VyZSB0aGUgcGFzc2VkIGFyZ3VtZW50IGlzIGEgcHJvcGVyIHVuaXQgKGRlZmF1bHRpbmcgdG8gcHgpXG4gKi9cbmZ1bmN0aW9uIGVuc3VyZVVuaXQodmFsKSB7XG4gIHJldHVybiB2YWwgKyAoaXNOdW1iZXIodmFsKSA/ICdweCcgOiAnJyk7XG59XG5cblxuLyoqXG4gKiBGaW5kIEJQTU5EaWFncmFtIGluIGRlZmluaXRpb25zIGJ5IElEXG4gKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50PERlZmluaXRpb25zPn0gZGVmaW5pdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaWFncmFtSWRcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50PEJQTU5EaWFncmFtPnxudWxsfVxuICovXG5mdW5jdGlvbiBmaW5kQlBNTkRpYWdyYW0oZGVmaW5pdGlvbnMsIGRpYWdyYW1JZCkge1xuICBpZiAoIWRpYWdyYW1JZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGZpbmQoZGVmaW5pdGlvbnMuZGlhZ3JhbXMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5pZCA9PT0gZGlhZ3JhbUlkO1xuICB9KSB8fCBudWxsO1xufVxuXG5cbi8qIDxwcm9qZWN0LWxvZ28+ICovXG5cbmltcG9ydCB7XG4gIG9wZW4gYXMgb3BlblBvd2VyZWRCeSxcbiAgQlBNTklPX0lNRyxcbiAgTElOS19TVFlMRVMgYXMgQlBNTklPX0xJTktfU1RZTEVTXG59IGZyb20gJy4vdXRpbC9Qb3dlcmVkQnlVdGlsJztcblxuaW1wb3J0IHtcbiAgZXZlbnQgYXMgZG9tRXZlbnRcbn0gZnJvbSAnbWluLWRvbSc7XG5cbi8qKlxuICogQWRkcyB0aGUgcHJvamVjdCBsb2dvIHRvIHRoZSBkaWFncmFtIGNvbnRhaW5lciBhc1xuICogcmVxdWlyZWQgYnkgdGhlIGJwbW4uaW8gbGljZW5zZS5cbiAqXG4gKiBAc2VlIGh0dHA6Ly9icG1uLmlvL2xpY2Vuc2VcbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lclxuICovXG5mdW5jdGlvbiBhZGRQcm9qZWN0TG9nbyhjb250YWluZXIpIHtcbiAgdmFyIGltZyA9IEJQTU5JT19JTUc7XG5cbiAgdmFyIGxpbmtNYXJrdXAgPVxuICAgICc8YSBocmVmPVwiaHR0cDovL2JwbW4uaW9cIiAnICtcbiAgICAgICAndGFyZ2V0PVwiX2JsYW5rXCIgJyArXG4gICAgICAgJ2NsYXNzPVwiYmpzLXBvd2VyZWQtYnlcIiAnICtcbiAgICAgICAndGl0bGU9XCJQb3dlcmVkIGJ5IGJwbW4uaW9cIiAnICtcbiAgICAgICAnc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IGJvdHRvbTogMTVweDsgcmlnaHQ6IDE1cHg7IHotaW5kZXg6IDEwMDsgJyArIEJQTU5JT19MSU5LX1NUWUxFUyArICdcIj4nICtcbiAgICAgIGltZyArXG4gICAgJzwvYT4nO1xuXG4gIHZhciBsaW5rRWxlbWVudCA9IGRvbWlmeShsaW5rTWFya3VwKTtcblxuICBjb250YWluZXIuYXBwZW5kQ2hpbGQobGlua0VsZW1lbnQpO1xuXG4gIGRvbUV2ZW50LmJpbmQobGlua0VsZW1lbnQsICdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgb3BlblBvd2VyZWRCeSgpO1xuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfSk7XG59XG5cbi8qIDwvcHJvamVjdC1sb2dvPiAqL1xuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IEJhc2VNb2RlbGVyIGZyb20gJy4vQmFzZU1vZGVsZXInO1xuXG5pbXBvcnQgVmlld2VyIGZyb20gJy4vVmlld2VyJztcbmltcG9ydCBOYXZpZ2F0ZWRWaWV3ZXIgZnJvbSAnLi9OYXZpZ2F0ZWRWaWV3ZXInO1xuXG5pbXBvcnQgS2V5Ym9hcmRNb3ZlTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL25hdmlnYXRpb24va2V5Ym9hcmQtbW92ZSc7XG5pbXBvcnQgTW92ZUNhbnZhc01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL21vdmVjYW52YXMnO1xuaW1wb3J0IFRvdWNoTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL25hdmlnYXRpb24vdG91Y2gnO1xuaW1wb3J0IFpvb21TY3JvbGxNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi96b29tc2Nyb2xsJztcblxuaW1wb3J0IEFsaWduRWxlbWVudHNNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYWxpZ24tZWxlbWVudHMnO1xuaW1wb3J0IEF1dG9QbGFjZU1vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL2F1dG8tcGxhY2UnO1xuaW1wb3J0IEF1dG9SZXNpemVNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9hdXRvLXJlc2l6ZSc7XG5pbXBvcnQgQXV0b1Njcm9sbE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXNjcm9sbCc7XG5pbXBvcnQgQmVuZHBvaW50c01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9iZW5kcG9pbnRzJztcbmltcG9ydCBDb25uZWN0TW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2Nvbm5lY3QnO1xuaW1wb3J0IENvbm5lY3Rpb25QcmV2aWV3TW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2Nvbm5lY3Rpb24tcHJldmlldyc7XG5pbXBvcnQgQ29udGV4dFBhZE1vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL2NvbnRleHQtcGFkJztcbmltcG9ydCBDb3B5UGFzdGVNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9jb3B5LXBhc3RlJztcbmltcG9ydCBDcmVhdGVNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY3JlYXRlJztcbmltcG9ydCBEaXN0cmlidXRlRWxlbWVudHNNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9kaXN0cmlidXRlLWVsZW1lbnRzJztcbmltcG9ydCBFZGl0b3JBY3Rpb25zTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvZWRpdG9yLWFjdGlvbnMnO1xuaW1wb3J0IEdyaWRTbmFwcGluZ01vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL2dyaWQtc25hcHBpbmcnO1xuaW1wb3J0IEludGVyYWN0aW9uRXZlbnRzTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvaW50ZXJhY3Rpb24tZXZlbnRzJztcbmltcG9ydCBLZXlib2FyZE1vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL2tleWJvYXJkJztcbmltcG9ydCBLZXlib2FyZE1vdmVTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQtbW92ZS1zZWxlY3Rpb24nO1xuaW1wb3J0IExhYmVsRWRpdGluZ01vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL2xhYmVsLWVkaXRpbmcnO1xuaW1wb3J0IE1vZGVsaW5nTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvbW9kZWxpbmcnO1xuaW1wb3J0IE1vdmVNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW92ZSc7XG5pbXBvcnQgUGFsZXR0ZU1vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL3BhbGV0dGUnO1xuaW1wb3J0IFJlcGxhY2VQcmV2aWV3TW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvcmVwbGFjZS1wcmV2aWV3JztcbmltcG9ydCBSZXNpemVNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcmVzaXplJztcbmltcG9ydCBTbmFwcGluZ01vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL3NuYXBwaW5nJztcbmltcG9ydCBTZWFyY2hNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9zZWFyY2gnO1xuXG5pbXBvcnQge1xuICB3cmFwRm9yQ29tcGF0aWJpbGl0eVxufSBmcm9tICcuL3V0aWwvQ29tcGF0aWJpbGl0eVV0aWwnO1xuXG52YXIgaW5pdGlhbERpYWdyYW0gPVxuICAnPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+JyArXG4gICc8YnBtbjpkZWZpbml0aW9ucyB4bWxuczp4c2k9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZVwiICcgK1xuICAgICAgICAgICAgICAgICAgICAneG1sbnM6YnBtbj1cImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0JQTU4vMjAxMDA1MjQvTU9ERUxcIiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ3htbG5zOmJwbW5kaT1cImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0JQTU4vMjAxMDA1MjQvRElcIiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ3htbG5zOmRjPVwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvREQvMjAxMDA1MjQvRENcIiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ3RhcmdldE5hbWVzcGFjZT1cImh0dHA6Ly9icG1uLmlvL3NjaGVtYS9icG1uXCIgJyArXG4gICAgICAgICAgICAgICAgICAgICdpZD1cIkRlZmluaXRpb25zXzFcIj4nICtcbiAgICAnPGJwbW46cHJvY2VzcyBpZD1cIlByb2Nlc3NfMVwiIGlzRXhlY3V0YWJsZT1cImZhbHNlXCI+JyArXG4gICAgICAnPGJwbW46c3RhcnRFdmVudCBpZD1cIlN0YXJ0RXZlbnRfMVwiLz4nICtcbiAgICAnPC9icG1uOnByb2Nlc3M+JyArXG4gICAgJzxicG1uZGk6QlBNTkRpYWdyYW0gaWQ9XCJCUE1ORGlhZ3JhbV8xXCI+JyArXG4gICAgICAnPGJwbW5kaTpCUE1OUGxhbmUgaWQ9XCJCUE1OUGxhbmVfMVwiIGJwbW5FbGVtZW50PVwiUHJvY2Vzc18xXCI+JyArXG4gICAgICAgICc8YnBtbmRpOkJQTU5TaGFwZSBpZD1cIl9CUE1OU2hhcGVfU3RhcnRFdmVudF8yXCIgYnBtbkVsZW1lbnQ9XCJTdGFydEV2ZW50XzFcIj4nICtcbiAgICAgICAgICAnPGRjOkJvdW5kcyBoZWlnaHQ9XCIzNi4wXCIgd2lkdGg9XCIzNi4wXCIgeD1cIjE3My4wXCIgeT1cIjEwMi4wXCIvPicgK1xuICAgICAgICAnPC9icG1uZGk6QlBNTlNoYXBlPicgK1xuICAgICAgJzwvYnBtbmRpOkJQTU5QbGFuZT4nICtcbiAgICAnPC9icG1uZGk6QlBNTkRpYWdyYW0+JyArXG4gICc8L2JwbW46ZGVmaW5pdGlvbnM+JztcblxuXG4vKipcbiAqIEEgbW9kZWxlciBmb3IgQlBNTiAyLjAgZGlhZ3JhbXMuXG4gKlxuICpcbiAqICMjIEV4dGVuZGluZyB0aGUgTW9kZWxlclxuICpcbiAqIEluIG9yZGVyIHRvIGV4dGVuZCB0aGUgdmlld2VyIHBhc3MgZXh0ZW5zaW9uIG1vZHVsZXMgdG8gYm9vdHN0cmFwIHZpYSB0aGVcbiAqIGBhZGRpdGlvbmFsTW9kdWxlc2Agb3B0aW9uLiBBbiBleHRlbnNpb24gbW9kdWxlIGlzIGFuIG9iamVjdCB0aGF0IGV4cG9zZXNcbiAqIG5hbWVkIHNlcnZpY2VzLlxuICpcbiAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBkZXBpY3RzIHRoZSBpbnRlZ3JhdGlvbiBvZiBhIHNpbXBsZVxuICogbG9nZ2luZyBjb21wb25lbnQgdGhhdCBpbnRlZ3JhdGVzIHdpdGggaW50ZXJhY3Rpb24gZXZlbnRzOlxuICpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKlxuICogLy8gbG9nZ2luZyBjb21wb25lbnRcbiAqIGZ1bmN0aW9uIEludGVyYWN0aW9uTG9nZ2VyKGV2ZW50QnVzKSB7XG4gKiAgIGV2ZW50QnVzLm9uKCdlbGVtZW50LmhvdmVyJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAqICAgICBjb25zb2xlLmxvZygpXG4gKiAgIH0pXG4gKiB9XG4gKlxuICogSW50ZXJhY3Rpb25Mb2dnZXIuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdOyAvLyBtaW5pZmljYXRpb24gc2F2ZVxuICpcbiAqIC8vIGV4dGVuc2lvbiBtb2R1bGVcbiAqIHZhciBleHRlbnNpb25Nb2R1bGUgPSB7XG4gKiAgIF9faW5pdF9fOiBbICdpbnRlcmFjdGlvbkxvZ2dlcicgXSxcbiAqICAgaW50ZXJhY3Rpb25Mb2dnZXI6IFsgJ3R5cGUnLCBJbnRlcmFjdGlvbkxvZ2dlciBdXG4gKiB9O1xuICpcbiAqIC8vIGV4dGVuZCB0aGUgdmlld2VyXG4gKiB2YXIgYnBtbk1vZGVsZXIgPSBuZXcgTW9kZWxlcih7IGFkZGl0aW9uYWxNb2R1bGVzOiBbIGV4dGVuc2lvbk1vZHVsZSBdIH0pO1xuICogYnBtbk1vZGVsZXIuaW1wb3J0WE1MKC4uLik7XG4gKiBgYGBcbiAqXG4gKlxuICogIyMgQ3VzdG9taXppbmcgLyBSZXBsYWNpbmcgQ29tcG9uZW50c1xuICpcbiAqIFlvdSBjYW4gcmVwbGFjZSBpbmRpdmlkdWFsIGRpYWdyYW0gY29tcG9uZW50cyBieSByZWRlZmluaW5nIHRoZW0gaW4gb3ZlcnJpZGUgbW9kdWxlcy5cbiAqIFRoaXMgd29ya3MgZm9yIGFsbCBjb21wb25lbnRzLCBpbmNsdWRpbmcgdGhvc2UgZGVmaW5lZCBpbiB0aGUgY29yZS5cbiAqXG4gKiBQYXNzIGluIG92ZXJyaWRlIG1vZHVsZXMgdmlhIHRoZSBgb3B0aW9ucy5hZGRpdGlvbmFsTW9kdWxlc2AgZmxhZyBsaWtlIHRoaXM6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogZnVuY3Rpb24gQ3VzdG9tQ29udGV4dFBhZFByb3ZpZGVyKGNvbnRleHRQYWQpIHtcbiAqXG4gKiAgIGNvbnRleHRQYWQucmVnaXN0ZXJQcm92aWRlcih0aGlzKTtcbiAqXG4gKiAgIHRoaXMuZ2V0Q29udGV4dFBhZEVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gKiAgICAgLy8gbm8gZW50cmllcywgZWZmZWN0aXZlbHkgZGlzYWJsZSB0aGUgY29udGV4dCBwYWRcbiAqICAgICByZXR1cm4ge307XG4gKiAgIH07XG4gKiB9XG4gKlxuICogQ3VzdG9tQ29udGV4dFBhZFByb3ZpZGVyLiRpbmplY3QgPSBbICdjb250ZXh0UGFkJyBdO1xuICpcbiAqIHZhciBvdmVycmlkZU1vZHVsZSA9IHtcbiAqICAgY29udGV4dFBhZFByb3ZpZGVyOiBbICd0eXBlJywgQ3VzdG9tQ29udGV4dFBhZFByb3ZpZGVyIF1cbiAqIH07XG4gKlxuICogdmFyIGJwbW5Nb2RlbGVyID0gbmV3IE1vZGVsZXIoeyBhZGRpdGlvbmFsTW9kdWxlczogWyBvdmVycmlkZU1vZHVsZSBdfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBwYXNzIHRvIHRoZSB2aWV3ZXJcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gW29wdGlvbnMuY29udGFpbmVyXSB0aGUgY29udGFpbmVyIHRvIHJlbmRlciB0aGUgdmlld2VyIGluLCBkZWZhdWx0cyB0byBib2R5LlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy53aWR0aF0gdGhlIHdpZHRoIG9mIHRoZSB2aWV3ZXJcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaGVpZ2h0XSB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3ZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5tb2RkbGVFeHRlbnNpb25zXSBleHRlbnNpb24gcGFja2FnZXMgdG8gcHJvdmlkZVxuICogQHBhcmFtIHtBcnJheTxkaWRpLk1vZHVsZT59IFtvcHRpb25zLm1vZHVsZXNdIGEgbGlzdCBvZiBtb2R1bGVzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG1vZHVsZXNcbiAqIEBwYXJhbSB7QXJyYXk8ZGlkaS5Nb2R1bGU+fSBbb3B0aW9ucy5hZGRpdGlvbmFsTW9kdWxlc10gYSBsaXN0IG9mIG1vZHVsZXMgdG8gdXNlIHdpdGggdGhlIGRlZmF1bHQgbW9kdWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb2RlbGVyKG9wdGlvbnMpIHtcbiAgQmFzZU1vZGVsZXIuY2FsbCh0aGlzLCBvcHRpb25zKTtcbn1cblxuaW5oZXJpdHMoTW9kZWxlciwgQmFzZU1vZGVsZXIpO1xuXG5cbk1vZGVsZXIuVmlld2VyID0gVmlld2VyO1xuTW9kZWxlci5OYXZpZ2F0ZWRWaWV3ZXIgPSBOYXZpZ2F0ZWRWaWV3ZXI7XG5cbi8qKlxuKiBUaGUgY3JlYXRlRGlhZ3JhbSByZXN1bHQuXG4qXG4qIEB0eXBlZGVmIHtPYmplY3R9IENyZWF0ZURpYWdyYW1SZXN1bHRcbipcbiogQHByb3BlcnR5IHtBcnJheTxzdHJpbmc+fSB3YXJuaW5nc1xuKi9cblxuLyoqXG4qIFRoZSBjcmVhdGVEaWFncmFtIGVycm9yLlxuKlxuKiBAdHlwZWRlZiB7RXJyb3J9IENyZWF0ZURpYWdyYW1FcnJvclxuKlxuKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IHdhcm5pbmdzXG4qL1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBkaWFncmFtIHRvIHN0YXJ0IG1vZGVsaW5nLlxuICpcbiAqIFJldHVybnMge1Byb21pc2U8Q3JlYXRlRGlhZ3JhbVJlc3VsdCwgQ3JlYXRlRGlhZ3JhbUVycm9yPn1cbiAqL1xuTW9kZWxlci5wcm90b3R5cGUuY3JlYXRlRGlhZ3JhbSA9IHdyYXBGb3JDb21wYXRpYmlsaXR5KGZ1bmN0aW9uIGNyZWF0ZURpYWdyYW0oKSB7XG4gIHJldHVybiB0aGlzLmltcG9ydFhNTChpbml0aWFsRGlhZ3JhbSk7XG59KTtcblxuXG5Nb2RlbGVyLnByb3RvdHlwZS5faW50ZXJhY3Rpb25Nb2R1bGVzID0gW1xuXG4gIC8vIG5vbi1tb2RlbGluZyBjb21wb25lbnRzXG4gIEtleWJvYXJkTW92ZU1vZHVsZSxcbiAgTW92ZUNhbnZhc01vZHVsZSxcbiAgVG91Y2hNb2R1bGUsXG4gIFpvb21TY3JvbGxNb2R1bGVcbl07XG5cbk1vZGVsZXIucHJvdG90eXBlLl9tb2RlbGluZ01vZHVsZXMgPSBbXG5cbiAgLy8gbW9kZWxpbmcgY29tcG9uZW50c1xuICBBbGlnbkVsZW1lbnRzTW9kdWxlLFxuICBBdXRvUGxhY2VNb2R1bGUsXG4gIEF1dG9TY3JvbGxNb2R1bGUsXG4gIEF1dG9SZXNpemVNb2R1bGUsXG4gIEJlbmRwb2ludHNNb2R1bGUsXG4gIENvbm5lY3RNb2R1bGUsXG4gIENvbm5lY3Rpb25QcmV2aWV3TW9kdWxlLFxuICBDb250ZXh0UGFkTW9kdWxlLFxuICBDb3B5UGFzdGVNb2R1bGUsXG4gIENyZWF0ZU1vZHVsZSxcbiAgRGlzdHJpYnV0ZUVsZW1lbnRzTW9kdWxlLFxuICBFZGl0b3JBY3Rpb25zTW9kdWxlLFxuICBHcmlkU25hcHBpbmdNb2R1bGUsXG4gIEludGVyYWN0aW9uRXZlbnRzTW9kdWxlLFxuICBLZXlib2FyZE1vZHVsZSxcbiAgS2V5Ym9hcmRNb3ZlU2VsZWN0aW9uTW9kdWxlLFxuICBMYWJlbEVkaXRpbmdNb2R1bGUsXG4gIE1vZGVsaW5nTW9kdWxlLFxuICBNb3ZlTW9kdWxlLFxuICBQYWxldHRlTW9kdWxlLFxuICBSZXBsYWNlUHJldmlld01vZHVsZSxcbiAgUmVzaXplTW9kdWxlLFxuICBTbmFwcGluZ01vZHVsZSxcbiAgU2VhcmNoTW9kdWxlXG5dO1xuXG5cbi8vIG1vZHVsZXMgdGhlIG1vZGVsZXIgaXMgY29tcG9zZWQgb2Zcbi8vXG4vLyAtIHZpZXdlciBtb2R1bGVzXG4vLyAtIGludGVyYWN0aW9uIG1vZHVsZXNcbi8vIC0gbW9kZWxpbmcgbW9kdWxlc1xuXG5Nb2RlbGVyLnByb3RvdHlwZS5fbW9kdWxlcyA9IFtdLmNvbmNhdChcbiAgVmlld2VyLnByb3RvdHlwZS5fbW9kdWxlcyxcbiAgTW9kZWxlci5wcm90b3R5cGUuX2ludGVyYWN0aW9uTW9kdWxlcyxcbiAgTW9kZWxlci5wcm90b3R5cGUuX21vZGVsaW5nTW9kdWxlc1xuKTtcbiIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBWaWV3ZXIgZnJvbSAnLi9WaWV3ZXInO1xuXG5pbXBvcnQgS2V5Ym9hcmRNb3ZlTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL25hdmlnYXRpb24va2V5Ym9hcmQtbW92ZSc7XG5pbXBvcnQgTW92ZUNhbnZhc01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL21vdmVjYW52YXMnO1xuaW1wb3J0IFpvb21TY3JvbGxNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi96b29tc2Nyb2xsJztcblxuXG4vKipcbiAqIEEgdmlld2VyIHRoYXQgaW5jbHVkZXMgbW91c2UgbmF2aWdhdGlvbiBmYWNpbGl0aWVzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTmF2aWdhdGVkVmlld2VyKG9wdGlvbnMpIHtcbiAgVmlld2VyLmNhbGwodGhpcywgb3B0aW9ucyk7XG59XG5cbmluaGVyaXRzKE5hdmlnYXRlZFZpZXdlciwgVmlld2VyKTtcblxuXG5OYXZpZ2F0ZWRWaWV3ZXIucHJvdG90eXBlLl9uYXZpZ2F0aW9uTW9kdWxlcyA9IFtcbiAgS2V5Ym9hcmRNb3ZlTW9kdWxlLFxuICBNb3ZlQ2FudmFzTW9kdWxlLFxuICBab29tU2Nyb2xsTW9kdWxlXG5dO1xuXG5OYXZpZ2F0ZWRWaWV3ZXIucHJvdG90eXBlLl9tb2R1bGVzID0gW10uY29uY2F0KFxuICBWaWV3ZXIucHJvdG90eXBlLl9tb2R1bGVzLFxuICBOYXZpZ2F0ZWRWaWV3ZXIucHJvdG90eXBlLl9uYXZpZ2F0aW9uTW9kdWxlc1xuKTsiLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29yZU1vZHVsZSBmcm9tICcuL2NvcmUnO1xuaW1wb3J0IFRyYW5zbGF0ZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9pMThuL3RyYW5zbGF0ZSc7XG5pbXBvcnQgU2VsZWN0aW9uTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NlbGVjdGlvbic7XG5pbXBvcnQgT3ZlcmxheXNNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvb3ZlcmxheXMnO1xuXG5pbXBvcnQgQmFzZVZpZXdlciBmcm9tICcuL0Jhc2VWaWV3ZXInO1xuXG5cbi8qKlxuICogQSB2aWV3ZXIgZm9yIEJQTU4gMi4wIGRpYWdyYW1zLlxuICpcbiAqIEhhdmUgYSBsb29rIGF0IHtAbGluayBOYXZpZ2F0ZWRWaWV3ZXJ9IG9yIHtAbGluayBNb2RlbGVyfSBmb3IgYnVuZGxlcyB0aGF0IGluY2x1ZGVcbiAqIGFkZGl0aW9uYWwgZmVhdHVyZXMuXG4gKlxuICpcbiAqICMjIEV4dGVuZGluZyB0aGUgVmlld2VyXG4gKlxuICogSW4gb3JkZXIgdG8gZXh0ZW5kIHRoZSB2aWV3ZXIgcGFzcyBleHRlbnNpb24gbW9kdWxlcyB0byBib290c3RyYXAgdmlhIHRoZVxuICogYGFkZGl0aW9uYWxNb2R1bGVzYCBvcHRpb24uIEFuIGV4dGVuc2lvbiBtb2R1bGUgaXMgYW4gb2JqZWN0IHRoYXQgZXhwb3Nlc1xuICogbmFtZWQgc2VydmljZXMuXG4gKlxuICogVGhlIGZvbGxvd2luZyBleGFtcGxlIGRlcGljdHMgdGhlIGludGVncmF0aW9uIG9mIGEgc2ltcGxlXG4gKiBsb2dnaW5nIGNvbXBvbmVudCB0aGF0IGludGVncmF0ZXMgd2l0aCBpbnRlcmFjdGlvbiBldmVudHM6XG4gKlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqXG4gKiAvLyBsb2dnaW5nIGNvbXBvbmVudFxuICogZnVuY3Rpb24gSW50ZXJhY3Rpb25Mb2dnZXIoZXZlbnRCdXMpIHtcbiAqICAgZXZlbnRCdXMub24oJ2VsZW1lbnQuaG92ZXInLCBmdW5jdGlvbihldmVudCkge1xuICogICAgIGNvbnNvbGUubG9nKClcbiAqICAgfSlcbiAqIH1cbiAqXG4gKiBJbnRlcmFjdGlvbkxvZ2dlci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07IC8vIG1pbmlmaWNhdGlvbiBzYXZlXG4gKlxuICogLy8gZXh0ZW5zaW9uIG1vZHVsZVxuICogdmFyIGV4dGVuc2lvbk1vZHVsZSA9IHtcbiAqICAgX19pbml0X186IFsgJ2ludGVyYWN0aW9uTG9nZ2VyJyBdLFxuICogICBpbnRlcmFjdGlvbkxvZ2dlcjogWyAndHlwZScsIEludGVyYWN0aW9uTG9nZ2VyIF1cbiAqIH07XG4gKlxuICogLy8gZXh0ZW5kIHRoZSB2aWV3ZXJcbiAqIHZhciBicG1uVmlld2VyID0gbmV3IFZpZXdlcih7IGFkZGl0aW9uYWxNb2R1bGVzOiBbIGV4dGVuc2lvbk1vZHVsZSBdIH0pO1xuICogYnBtblZpZXdlci5pbXBvcnRYTUwoLi4uKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIHZpZXdlclxuICogQHBhcmFtIHtET01FbGVtZW50fSBbb3B0aW9ucy5jb250YWluZXJdIHRoZSBjb250YWluZXIgdG8gcmVuZGVyIHRoZSB2aWV3ZXIgaW4sIGRlZmF1bHRzIHRvIGJvZHkuXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLndpZHRoXSB0aGUgd2lkdGggb2YgdGhlIHZpZXdlclxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5oZWlnaHRdIHRoZSBoZWlnaHQgb2YgdGhlIHZpZXdlclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLm1vZGRsZUV4dGVuc2lvbnNdIGV4dGVuc2lvbiBwYWNrYWdlcyB0byBwcm92aWRlXG4gKiBAcGFyYW0ge0FycmF5PGRpZGkuTW9kdWxlPn0gW29wdGlvbnMubW9kdWxlc10gYSBsaXN0IG9mIG1vZHVsZXMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbW9kdWxlc1xuICogQHBhcmFtIHtBcnJheTxkaWRpLk1vZHVsZT59IFtvcHRpb25zLmFkZGl0aW9uYWxNb2R1bGVzXSBhIGxpc3Qgb2YgbW9kdWxlcyB0byB1c2Ugd2l0aCB0aGUgZGVmYXVsdCBtb2R1bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFZpZXdlcihvcHRpb25zKSB7XG4gIEJhc2VWaWV3ZXIuY2FsbCh0aGlzLCBvcHRpb25zKTtcbn1cblxuaW5oZXJpdHMoVmlld2VyLCBCYXNlVmlld2VyKTtcblxuLy8gbW9kdWxlcyB0aGUgdmlld2VyIGlzIGNvbXBvc2VkIG9mXG5WaWV3ZXIucHJvdG90eXBlLl9tb2R1bGVzID0gW1xuICBDb3JlTW9kdWxlLFxuICBUcmFuc2xhdGVNb2R1bGUsXG4gIFNlbGVjdGlvbk1vZHVsZSxcbiAgT3ZlcmxheXNNb2R1bGVcbl07XG5cbi8vIGRlZmF1bHQgbW9kZGxlIGV4dGVuc2lvbnMgdGhlIHZpZXdlciBpcyBjb21wb3NlZCBvZlxuVmlld2VyLnByb3RvdHlwZS5fbW9kZGxlRXh0ZW5zaW9ucyA9IHt9OyIsImltcG9ydCBEcmF3TW9kdWxlIGZyb20gJy4uL2RyYXcnO1xuaW1wb3J0IEltcG9ydE1vZHVsZSBmcm9tICcuLi9pbXBvcnQnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgRHJhd01vZHVsZSxcbiAgICBJbXBvcnRNb2R1bGVcbiAgXVxufTsiLCJpbXBvcnQge1xuICBldmVyeSxcbiAgc29tZVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGNvbXBvbmVudHNUb1BhdGhcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9SZW5kZXJVdGlsJztcblxuXG4vLyBlbGVtZW50IHV0aWxzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBDaGVja3MgaWYgZXZlbnREZWZpbml0aW9uIG9mIHRoZSBnaXZlbiBlbGVtZW50IG1hdGNoZXMgd2l0aCBzZW1hbnRpYyB0eXBlLlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgZWxlbWVudCBpcyBvZiB0aGUgZ2l2ZW4gc2VtYW50aWMgdHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUeXBlZEV2ZW50KGV2ZW50LCBldmVudERlZmluaXRpb25UeXBlLCBmaWx0ZXIpIHtcblxuICBmdW5jdGlvbiBtYXRjaGVzKGRlZmluaXRpb24sIGZpbHRlcikge1xuICAgIHJldHVybiBldmVyeShmaWx0ZXIsIGZ1bmN0aW9uKHZhbCwga2V5KSB7XG5cbiAgICAgIC8vIHdlIHdhbnQgYSA9PSBjb252ZXJzaW9uIGhlcmUsIHRvIGJlIGFibGUgdG8gY2F0Y2hcbiAgICAgIC8vIHVuZGVmaW5lZCA9PSBmYWxzZSBhbmQgZnJpZW5kc1xuICAgICAgLyoganNoaW50IC1XMTE2ICovXG4gICAgICByZXR1cm4gZGVmaW5pdGlvbltrZXldID09IHZhbDtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBzb21lKGV2ZW50LmV2ZW50RGVmaW5pdGlvbnMsIGZ1bmN0aW9uKGRlZmluaXRpb24pIHtcbiAgICByZXR1cm4gZGVmaW5pdGlvbi4kdHlwZSA9PT0gZXZlbnREZWZpbml0aW9uVHlwZSAmJiBtYXRjaGVzKGV2ZW50LCBmaWx0ZXIpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGhyb3dFdmVudChldmVudCkge1xuICByZXR1cm4gKGV2ZW50LiR0eXBlID09PSAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JykgfHwgKGV2ZW50LiR0eXBlID09PSAnYnBtbjpFbmRFdmVudCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb2xsZWN0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIGRhdGFPYmplY3QgPSBlbGVtZW50LmRhdGFPYmplY3RSZWY7XG5cbiAgcmV0dXJuIGVsZW1lbnQuaXNDb2xsZWN0aW9uIHx8IChkYXRhT2JqZWN0ICYmIGRhdGFPYmplY3QuaXNDb2xsZWN0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQuYnVzaW5lc3NPYmplY3QuZGk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZW1hbnRpYyhlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LmJ1c2luZXNzT2JqZWN0O1xufVxuXG5cbi8vIGNvbG9yIGFjY2VzcyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdENvbG9yKSB7XG4gIHJldHVybiBnZXREaShlbGVtZW50KS5nZXQoJ2Jpb2M6ZmlsbCcpIHx8IGRlZmF1bHRDb2xvciB8fCAnd2hpdGUnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdENvbG9yKSB7XG4gIHJldHVybiBnZXREaShlbGVtZW50KS5nZXQoJ2Jpb2M6c3Ryb2tlJykgfHwgZGVmYXVsdENvbG9yIHx8ICdibGFjayc7XG59XG5cblxuLy8gY3JvcHBpbmcgcGF0aCBjdXN0b21pemF0aW9ucyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaXJjbGVQYXRoKHNoYXBlKSB7XG5cbiAgdmFyIGN4ID0gc2hhcGUueCArIHNoYXBlLndpZHRoIC8gMixcbiAgICAgIGN5ID0gc2hhcGUueSArIHNoYXBlLmhlaWdodCAvIDIsXG4gICAgICByYWRpdXMgPSBzaGFwZS53aWR0aCAvIDI7XG5cbiAgdmFyIGNpcmNsZVBhdGggPSBbXG4gICAgWydNJywgY3gsIGN5XSxcbiAgICBbJ20nLCAwLCAtcmFkaXVzXSxcbiAgICBbJ2EnLCByYWRpdXMsIHJhZGl1cywgMCwgMSwgMSwgMCwgMiAqIHJhZGl1c10sXG4gICAgWydhJywgcmFkaXVzLCByYWRpdXMsIDAsIDEsIDEsIDAsIC0yICogcmFkaXVzXSxcbiAgICBbJ3onXVxuICBdO1xuXG4gIHJldHVybiBjb21wb25lbnRzVG9QYXRoKGNpcmNsZVBhdGgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um91bmRSZWN0UGF0aChzaGFwZSwgYm9yZGVyUmFkaXVzKSB7XG5cbiAgdmFyIHggPSBzaGFwZS54LFxuICAgICAgeSA9IHNoYXBlLnksXG4gICAgICB3aWR0aCA9IHNoYXBlLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuXG4gIHZhciByb3VuZFJlY3RQYXRoID0gW1xuICAgIFsnTScsIHggKyBib3JkZXJSYWRpdXMsIHldLFxuICAgIFsnbCcsIHdpZHRoIC0gYm9yZGVyUmFkaXVzICogMiwgMF0sXG4gICAgWydhJywgYm9yZGVyUmFkaXVzLCBib3JkZXJSYWRpdXMsIDAsIDAsIDEsIGJvcmRlclJhZGl1cywgYm9yZGVyUmFkaXVzXSxcbiAgICBbJ2wnLCAwLCBoZWlnaHQgLSBib3JkZXJSYWRpdXMgKiAyXSxcbiAgICBbJ2EnLCBib3JkZXJSYWRpdXMsIGJvcmRlclJhZGl1cywgMCwgMCwgMSwgLWJvcmRlclJhZGl1cywgYm9yZGVyUmFkaXVzXSxcbiAgICBbJ2wnLCBib3JkZXJSYWRpdXMgKiAyIC0gd2lkdGgsIDBdLFxuICAgIFsnYScsIGJvcmRlclJhZGl1cywgYm9yZGVyUmFkaXVzLCAwLCAwLCAxLCAtYm9yZGVyUmFkaXVzLCAtYm9yZGVyUmFkaXVzXSxcbiAgICBbJ2wnLCAwLCBib3JkZXJSYWRpdXMgKiAyIC0gaGVpZ2h0XSxcbiAgICBbJ2EnLCBib3JkZXJSYWRpdXMsIGJvcmRlclJhZGl1cywgMCwgMCwgMSwgYm9yZGVyUmFkaXVzLCAtYm9yZGVyUmFkaXVzXSxcbiAgICBbJ3onXVxuICBdO1xuXG4gIHJldHVybiBjb21wb25lbnRzVG9QYXRoKHJvdW5kUmVjdFBhdGgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlhbW9uZFBhdGgoc2hhcGUpIHtcblxuICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aCxcbiAgICAgIGhlaWdodCA9IHNoYXBlLmhlaWdodCxcbiAgICAgIHggPSBzaGFwZS54LFxuICAgICAgeSA9IHNoYXBlLnksXG4gICAgICBoYWxmV2lkdGggPSB3aWR0aCAvIDIsXG4gICAgICBoYWxmSGVpZ2h0ID0gaGVpZ2h0IC8gMjtcblxuICB2YXIgZGlhbW9uZFBhdGggPSBbXG4gICAgWydNJywgeCArIGhhbGZXaWR0aCwgeV0sXG4gICAgWydsJywgaGFsZldpZHRoLCBoYWxmSGVpZ2h0XSxcbiAgICBbJ2wnLCAtaGFsZldpZHRoLCBoYWxmSGVpZ2h0XSxcbiAgICBbJ2wnLCAtaGFsZldpZHRoLCAtaGFsZkhlaWdodF0sXG4gICAgWyd6J11cbiAgXTtcblxuICByZXR1cm4gY29tcG9uZW50c1RvUGF0aChkaWFtb25kUGF0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWN0UGF0aChzaGFwZSkge1xuICB2YXIgeCA9IHNoYXBlLngsXG4gICAgICB5ID0gc2hhcGUueSxcbiAgICAgIHdpZHRoID0gc2hhcGUud2lkdGgsXG4gICAgICBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG5cbiAgdmFyIHJlY3RQYXRoID0gW1xuICAgIFsnTScsIHgsIHldLFxuICAgIFsnbCcsIHdpZHRoLCAwXSxcbiAgICBbJ2wnLCAwLCBoZWlnaHRdLFxuICAgIFsnbCcsIC13aWR0aCwgMF0sXG4gICAgWyd6J11cbiAgXTtcblxuICByZXR1cm4gY29tcG9uZW50c1RvUGF0aChyZWN0UGF0aCk7XG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGFzc2lnbixcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBCYXNlUmVuZGVyZXIgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZHJhdy9CYXNlUmVuZGVyZXInO1xuXG5pbXBvcnQge1xuICBpc0V4cGFuZGVkLFxuICBpc0V2ZW50U3ViUHJvY2Vzc1xufSBmcm9tICcuLi91dGlsL0RpVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldExhYmVsXG59IGZyb20gJy4uL2ZlYXR1cmVzL2xhYmVsLWVkaXRpbmcvTGFiZWxVdGlsJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGNyZWF0ZUxpbmVcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9SZW5kZXJVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNUeXBlZEV2ZW50LFxuICBpc1Rocm93RXZlbnQsXG4gIGlzQ29sbGVjdGlvbixcbiAgZ2V0RGksXG4gIGdldFNlbWFudGljLFxuICBnZXRDaXJjbGVQYXRoLFxuICBnZXRSb3VuZFJlY3RQYXRoLFxuICBnZXREaWFtb25kUGF0aCxcbiAgZ2V0UmVjdFBhdGgsXG4gIGdldEZpbGxDb2xvcixcbiAgZ2V0U3Ryb2tlQ29sb3Jcbn0gZnJvbSAnLi9CcG1uUmVuZGVyVXRpbCc7XG5cbmltcG9ydCB7XG4gIHF1ZXJ5IGFzIGRvbVF1ZXJ5XG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGUsXG4gIGNsYXNzZXMgYXMgc3ZnQ2xhc3Nlc1xufSBmcm9tICd0aW55LXN2Zyc7XG5cbmltcG9ydCB7XG4gIHJvdGF0ZSxcbiAgdHJhbnNmb3JtLFxuICB0cmFuc2xhdGVcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9TdmdUcmFuc2Zvcm1VdGlsJztcblxuaW1wb3J0IElkcyBmcm9tICdpZHMnO1xuXG52YXIgUkVOREVSRVJfSURTID0gbmV3IElkcygpO1xuXG52YXIgVEFTS19CT1JERVJfUkFESVVTID0gMTA7XG52YXIgSU5ORVJfT1VURVJfRElTVCA9IDM7XG5cbnZhciBERUZBVUxUX0ZJTExfT1BBQ0lUWSA9IC45NSxcbiAgICBISUdIX0ZJTExfT1BBQ0lUWSA9IC4zNTtcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uUmVuZGVyZXIoXG4gICAgY29uZmlnLCBldmVudEJ1cywgc3R5bGVzLCBwYXRoTWFwLFxuICAgIGNhbnZhcywgdGV4dFJlbmRlcmVyLCBwcmlvcml0eSkge1xuXG4gIEJhc2VSZW5kZXJlci5jYWxsKHRoaXMsIGV2ZW50QnVzLCBwcmlvcml0eSk7XG5cbiAgdmFyIGRlZmF1bHRGaWxsQ29sb3IgPSBjb25maWcgJiYgY29uZmlnLmRlZmF1bHRGaWxsQ29sb3IsXG4gICAgICBkZWZhdWx0U3Ryb2tlQ29sb3IgPSBjb25maWcgJiYgY29uZmlnLmRlZmF1bHRTdHJva2VDb2xvcjtcblxuICB2YXIgcmVuZGVyZXJJZCA9IFJFTkRFUkVSX0lEUy5uZXh0KCk7XG5cbiAgdmFyIG1hcmtlcnMgPSB7fTtcblxuICB2YXIgY29tcHV0ZVN0eWxlID0gc3R5bGVzLmNvbXB1dGVTdHlsZTtcblxuICBmdW5jdGlvbiBhZGRNYXJrZXIoaWQsIG9wdGlvbnMpIHtcbiAgICB2YXIgYXR0cnMgPSBhc3NpZ24oe1xuICAgICAgZmlsbDogJ2JsYWNrJyxcbiAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgc3Ryb2tlTGluZWNhcDogJ3JvdW5kJyxcbiAgICAgIHN0cm9rZURhc2hhcnJheTogJ25vbmUnXG4gICAgfSwgb3B0aW9ucy5hdHRycyk7XG5cbiAgICB2YXIgcmVmID0gb3B0aW9ucy5yZWYgfHwgeyB4OiAwLCB5OiAwIH07XG5cbiAgICB2YXIgc2NhbGUgPSBvcHRpb25zLnNjYWxlIHx8IDE7XG5cbiAgICAvLyBmaXggZm9yIHNhZmFyaSAvIGNocm9tZSAvIGZpcmVmb3ggYnVnIG5vdCBjb3JyZWN0bHlcbiAgICAvLyByZXNldHRpbmcgc3Ryb2tlIGRhc2ggYXJyYXlcbiAgICBpZiAoYXR0cnMuc3Ryb2tlRGFzaGFycmF5ID09PSAnbm9uZScpIHtcbiAgICAgIGF0dHJzLnN0cm9rZURhc2hhcnJheSA9IFsxMDAwMCwgMV07XG4gICAgfVxuXG4gICAgdmFyIG1hcmtlciA9IHN2Z0NyZWF0ZSgnbWFya2VyJyk7XG5cbiAgICBzdmdBdHRyKG9wdGlvbnMuZWxlbWVudCwgYXR0cnMpO1xuXG4gICAgc3ZnQXBwZW5kKG1hcmtlciwgb3B0aW9ucy5lbGVtZW50KTtcblxuICAgIHN2Z0F0dHIobWFya2VyLCB7XG4gICAgICBpZDogaWQsXG4gICAgICB2aWV3Qm94OiAnMCAwIDIwIDIwJyxcbiAgICAgIHJlZlg6IHJlZi54LFxuICAgICAgcmVmWTogcmVmLnksXG4gICAgICBtYXJrZXJXaWR0aDogMjAgKiBzY2FsZSxcbiAgICAgIG1hcmtlckhlaWdodDogMjAgKiBzY2FsZSxcbiAgICAgIG9yaWVudDogJ2F1dG8nXG4gICAgfSk7XG5cbiAgICB2YXIgZGVmcyA9IGRvbVF1ZXJ5KCdkZWZzJywgY2FudmFzLl9zdmcpO1xuXG4gICAgaWYgKCFkZWZzKSB7XG4gICAgICBkZWZzID0gc3ZnQ3JlYXRlKCdkZWZzJyk7XG5cbiAgICAgIHN2Z0FwcGVuZChjYW52YXMuX3N2ZywgZGVmcyk7XG4gICAgfVxuXG4gICAgc3ZnQXBwZW5kKGRlZnMsIG1hcmtlcik7XG5cbiAgICBtYXJrZXJzW2lkXSA9IG1hcmtlcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbG9yRXNjYXBlKHN0cikge1xuXG4gICAgLy8gb25seSBhbGxvdyBjaGFyYWN0ZXJzIGFuZCBudW1iZXJzXG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXjAtOWEtekEtel0rL2csICdfJyk7XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrZXIodHlwZSwgZmlsbCwgc3Ryb2tlKSB7XG4gICAgdmFyIGlkID0gdHlwZSArICctJyArIGNvbG9yRXNjYXBlKGZpbGwpICsgJy0nICsgY29sb3JFc2NhcGUoc3Ryb2tlKSArICctJyArIHJlbmRlcmVySWQ7XG5cbiAgICBpZiAoIW1hcmtlcnNbaWRdKSB7XG4gICAgICBjcmVhdGVNYXJrZXIoaWQsIHR5cGUsIGZpbGwsIHN0cm9rZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICd1cmwoIycgKyBpZCArICcpJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU1hcmtlcihpZCwgdHlwZSwgZmlsbCwgc3Ryb2tlKSB7XG5cbiAgICBpZiAodHlwZSA9PT0gJ3NlcXVlbmNlZmxvdy1lbmQnKSB7XG4gICAgICB2YXIgc2VxdWVuY2VmbG93RW5kID0gc3ZnQ3JlYXRlKCdwYXRoJyk7XG4gICAgICBzdmdBdHRyKHNlcXVlbmNlZmxvd0VuZCwgeyBkOiAnTSAxIDUgTCAxMSAxMCBMIDEgMTUgWicgfSk7XG5cbiAgICAgIGFkZE1hcmtlcihpZCwge1xuICAgICAgICBlbGVtZW50OiBzZXF1ZW5jZWZsb3dFbmQsXG4gICAgICAgIHJlZjogeyB4OiAxMSwgeTogMTAgfSxcbiAgICAgICAgc2NhbGU6IDAuNSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBmaWxsOiBzdHJva2UsXG4gICAgICAgICAgc3Ryb2tlOiBzdHJva2VcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdtZXNzYWdlZmxvdy1zdGFydCcpIHtcbiAgICAgIHZhciBtZXNzYWdlZmxvd1N0YXJ0ID0gc3ZnQ3JlYXRlKCdjaXJjbGUnKTtcbiAgICAgIHN2Z0F0dHIobWVzc2FnZWZsb3dTdGFydCwgeyBjeDogNiwgY3k6IDYsIHI6IDMuNSB9KTtcblxuICAgICAgYWRkTWFya2VyKGlkLCB7XG4gICAgICAgIGVsZW1lbnQ6IG1lc3NhZ2VmbG93U3RhcnQsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgZmlsbDogZmlsbCxcbiAgICAgICAgICBzdHJva2U6IHN0cm9rZVxuICAgICAgICB9LFxuICAgICAgICByZWY6IHsgeDogNiwgeTogNiB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ21lc3NhZ2VmbG93LWVuZCcpIHtcbiAgICAgIHZhciBtZXNzYWdlZmxvd0VuZCA9IHN2Z0NyZWF0ZSgncGF0aCcpO1xuICAgICAgc3ZnQXR0cihtZXNzYWdlZmxvd0VuZCwgeyBkOiAnbSAxIDUgbCAwIC0zIGwgNyAzIGwgLTcgMyB6JyB9KTtcblxuICAgICAgYWRkTWFya2VyKGlkLCB7XG4gICAgICAgIGVsZW1lbnQ6IG1lc3NhZ2VmbG93RW5kLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGZpbGw6IGZpbGwsXG4gICAgICAgICAgc3Ryb2tlOiBzdHJva2UsXG4gICAgICAgICAgc3Ryb2tlTGluZWNhcDogJ2J1dHQnXG4gICAgICAgIH0sXG4gICAgICAgIHJlZjogeyB4OiA4LjUsIHk6IDUgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdhc3NvY2lhdGlvbi1zdGFydCcpIHtcbiAgICAgIHZhciBhc3NvY2lhdGlvblN0YXJ0ID0gc3ZnQ3JlYXRlKCdwYXRoJyk7XG4gICAgICBzdmdBdHRyKGFzc29jaWF0aW9uU3RhcnQsIHsgZDogJ00gMTEgNSBMIDEgMTAgTCAxMSAxNScgfSk7XG5cbiAgICAgIGFkZE1hcmtlcihpZCwge1xuICAgICAgICBlbGVtZW50OiBhc3NvY2lhdGlvblN0YXJ0LFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGZpbGw6ICdub25lJyxcbiAgICAgICAgICBzdHJva2U6IHN0cm9rZSxcbiAgICAgICAgICBzdHJva2VXaWR0aDogMS41XG4gICAgICAgIH0sXG4gICAgICAgIHJlZjogeyB4OiAxLCB5OiAxMCB9LFxuICAgICAgICBzY2FsZTogMC41XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ2Fzc29jaWF0aW9uLWVuZCcpIHtcbiAgICAgIHZhciBhc3NvY2lhdGlvbkVuZCA9IHN2Z0NyZWF0ZSgncGF0aCcpO1xuICAgICAgc3ZnQXR0cihhc3NvY2lhdGlvbkVuZCwgeyBkOiAnTSAxIDUgTCAxMSAxMCBMIDEgMTUnIH0pO1xuXG4gICAgICBhZGRNYXJrZXIoaWQsIHtcbiAgICAgICAgZWxlbWVudDogYXNzb2NpYXRpb25FbmQsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgZmlsbDogJ25vbmUnLFxuICAgICAgICAgIHN0cm9rZTogc3Ryb2tlLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLjVcbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiB7IHg6IDEyLCB5OiAxMCB9LFxuICAgICAgICBzY2FsZTogMC41XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ2NvbmRpdGlvbmFsLWZsb3ctbWFya2VyJykge1xuICAgICAgdmFyIGNvbmRpdGlvbmFsZmxvd01hcmtlciA9IHN2Z0NyZWF0ZSgncGF0aCcpO1xuICAgICAgc3ZnQXR0cihjb25kaXRpb25hbGZsb3dNYXJrZXIsIHsgZDogJ00gMCAxMCBMIDggNiBMIDE2IDEwIEwgOCAxNCBaJyB9KTtcblxuICAgICAgYWRkTWFya2VyKGlkLCB7XG4gICAgICAgIGVsZW1lbnQ6IGNvbmRpdGlvbmFsZmxvd01hcmtlcixcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBmaWxsOiBmaWxsLFxuICAgICAgICAgIHN0cm9rZTogc3Ryb2tlXG4gICAgICAgIH0sXG4gICAgICAgIHJlZjogeyB4OiAtMSwgeTogMTAgfSxcbiAgICAgICAgc2NhbGU6IDAuNVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdjb25kaXRpb25hbC1kZWZhdWx0LWZsb3ctbWFya2VyJykge1xuICAgICAgdmFyIGNvbmRpdGlvbmFsZGVmYXVsdGZsb3dNYXJrZXIgPSBzdmdDcmVhdGUoJ3BhdGgnKTtcbiAgICAgIHN2Z0F0dHIoY29uZGl0aW9uYWxkZWZhdWx0Zmxvd01hcmtlciwgeyBkOiAnTSA2IDQgTCAxMCAxNicgfSk7XG5cbiAgICAgIGFkZE1hcmtlcihpZCwge1xuICAgICAgICBlbGVtZW50OiBjb25kaXRpb25hbGRlZmF1bHRmbG93TWFya2VyLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHN0cm9rZTogc3Ryb2tlXG4gICAgICAgIH0sXG4gICAgICAgIHJlZjogeyB4OiAwLCB5OiAxMCB9LFxuICAgICAgICBzY2FsZTogMC41XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkcmF3Q2lyY2xlKHBhcmVudEdmeCwgd2lkdGgsIGhlaWdodCwgb2Zmc2V0LCBhdHRycykge1xuXG4gICAgaWYgKGlzT2JqZWN0KG9mZnNldCkpIHtcbiAgICAgIGF0dHJzID0gb2Zmc2V0O1xuICAgICAgb2Zmc2V0ID0gMDtcbiAgICB9XG5cbiAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgIGF0dHJzID0gY29tcHV0ZVN0eWxlKGF0dHJzLCB7XG4gICAgICBzdHJva2U6ICdibGFjaycsXG4gICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgIGZpbGw6ICd3aGl0ZSdcbiAgICB9KTtcblxuICAgIGlmIChhdHRycy5maWxsID09PSAnbm9uZScpIHtcbiAgICAgIGRlbGV0ZSBhdHRycy5maWxsT3BhY2l0eTtcbiAgICB9XG5cbiAgICB2YXIgY3ggPSB3aWR0aCAvIDIsXG4gICAgICAgIGN5ID0gaGVpZ2h0IC8gMjtcblxuICAgIHZhciBjaXJjbGUgPSBzdmdDcmVhdGUoJ2NpcmNsZScpO1xuICAgIHN2Z0F0dHIoY2lyY2xlLCB7XG4gICAgICBjeDogY3gsXG4gICAgICBjeTogY3ksXG4gICAgICByOiBNYXRoLnJvdW5kKCh3aWR0aCArIGhlaWdodCkgLyA0IC0gb2Zmc2V0KVxuICAgIH0pO1xuICAgIHN2Z0F0dHIoY2lyY2xlLCBhdHRycyk7XG5cbiAgICBzdmdBcHBlbmQocGFyZW50R2Z4LCBjaXJjbGUpO1xuXG4gICAgcmV0dXJuIGNpcmNsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYXdSZWN0KHBhcmVudEdmeCwgd2lkdGgsIGhlaWdodCwgciwgb2Zmc2V0LCBhdHRycykge1xuXG4gICAgaWYgKGlzT2JqZWN0KG9mZnNldCkpIHtcbiAgICAgIGF0dHJzID0gb2Zmc2V0O1xuICAgICAgb2Zmc2V0ID0gMDtcbiAgICB9XG5cbiAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgIGF0dHJzID0gY29tcHV0ZVN0eWxlKGF0dHJzLCB7XG4gICAgICBzdHJva2U6ICdibGFjaycsXG4gICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgIGZpbGw6ICd3aGl0ZSdcbiAgICB9KTtcblxuICAgIHZhciByZWN0ID0gc3ZnQ3JlYXRlKCdyZWN0Jyk7XG4gICAgc3ZnQXR0cihyZWN0LCB7XG4gICAgICB4OiBvZmZzZXQsXG4gICAgICB5OiBvZmZzZXQsXG4gICAgICB3aWR0aDogd2lkdGggLSBvZmZzZXQgKiAyLFxuICAgICAgaGVpZ2h0OiBoZWlnaHQgLSBvZmZzZXQgKiAyLFxuICAgICAgcng6IHIsXG4gICAgICByeTogclxuICAgIH0pO1xuICAgIHN2Z0F0dHIocmVjdCwgYXR0cnMpO1xuXG4gICAgc3ZnQXBwZW5kKHBhcmVudEdmeCwgcmVjdCk7XG5cbiAgICByZXR1cm4gcmVjdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYXdEaWFtb25kKHBhcmVudEdmeCwgd2lkdGgsIGhlaWdodCwgYXR0cnMpIHtcblxuICAgIHZhciB4XzIgPSB3aWR0aCAvIDI7XG4gICAgdmFyIHlfMiA9IGhlaWdodCAvIDI7XG5cbiAgICB2YXIgcG9pbnRzID0gW3sgeDogeF8yLCB5OiAwIH0sIHsgeDogd2lkdGgsIHk6IHlfMiB9LCB7IHg6IHhfMiwgeTogaGVpZ2h0IH0sIHsgeDogMCwgeTogeV8yIH1dO1xuXG4gICAgdmFyIHBvaW50c1N0cmluZyA9IHBvaW50cy5tYXAoZnVuY3Rpb24ocG9pbnQpIHtcbiAgICAgIHJldHVybiBwb2ludC54ICsgJywnICsgcG9pbnQueTtcbiAgICB9KS5qb2luKCcgJyk7XG5cbiAgICBhdHRycyA9IGNvbXB1dGVTdHlsZShhdHRycywge1xuICAgICAgc3Ryb2tlOiAnYmxhY2snLFxuICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICBmaWxsOiAnd2hpdGUnXG4gICAgfSk7XG5cbiAgICB2YXIgcG9seWdvbiA9IHN2Z0NyZWF0ZSgncG9seWdvbicpO1xuICAgIHN2Z0F0dHIocG9seWdvbiwge1xuICAgICAgcG9pbnRzOiBwb2ludHNTdHJpbmdcbiAgICB9KTtcbiAgICBzdmdBdHRyKHBvbHlnb24sIGF0dHJzKTtcblxuICAgIHN2Z0FwcGVuZChwYXJlbnRHZngsIHBvbHlnb24pO1xuXG4gICAgcmV0dXJuIHBvbHlnb247XG4gIH1cblxuICBmdW5jdGlvbiBkcmF3TGluZShwYXJlbnRHZngsIHdheXBvaW50cywgYXR0cnMpIHtcbiAgICBhdHRycyA9IGNvbXB1dGVTdHlsZShhdHRycywgWyAnbm8tZmlsbCcgXSwge1xuICAgICAgc3Ryb2tlOiAnYmxhY2snLFxuICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICBmaWxsOiAnbm9uZSdcbiAgICB9KTtcblxuICAgIHZhciBsaW5lID0gY3JlYXRlTGluZSh3YXlwb2ludHMsIGF0dHJzKTtcblxuICAgIHN2Z0FwcGVuZChwYXJlbnRHZngsIGxpbmUpO1xuXG4gICAgcmV0dXJuIGxpbmU7XG4gIH1cblxuICBmdW5jdGlvbiBkcmF3UGF0aChwYXJlbnRHZngsIGQsIGF0dHJzKSB7XG5cbiAgICBhdHRycyA9IGNvbXB1dGVTdHlsZShhdHRycywgWyAnbm8tZmlsbCcgXSwge1xuICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICBzdHJva2U6ICdibGFjaydcbiAgICB9KTtcblxuICAgIHZhciBwYXRoID0gc3ZnQ3JlYXRlKCdwYXRoJyk7XG4gICAgc3ZnQXR0cihwYXRoLCB7IGQ6IGQgfSk7XG4gICAgc3ZnQXR0cihwYXRoLCBhdHRycyk7XG5cbiAgICBzdmdBcHBlbmQocGFyZW50R2Z4LCBwYXRoKTtcblxuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgZnVuY3Rpb24gZHJhd01hcmtlcih0eXBlLCBwYXJlbnRHZngsIHBhdGgsIGF0dHJzKSB7XG4gICAgcmV0dXJuIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aCwgYXNzaWduKHsgJ2RhdGEtbWFya2VyJzogdHlwZSB9LCBhdHRycykpO1xuICB9XG5cbiAgZnVuY3Rpb24gYXModHlwZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBoYW5kbGVyc1t0eXBlXShwYXJlbnRHZngsIGVsZW1lbnQpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJlcih0eXBlKSB7XG4gICAgcmV0dXJuIGhhbmRsZXJzW3R5cGVdO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyRXZlbnRDb250ZW50KGVsZW1lbnQsIHBhcmVudEdmeCkge1xuXG4gICAgdmFyIGV2ZW50ID0gZ2V0U2VtYW50aWMoZWxlbWVudCk7XG4gICAgdmFyIGlzVGhyb3dpbmcgPSBpc1Rocm93RXZlbnQoZXZlbnQpO1xuXG4gICAgaWYgKGV2ZW50LmV2ZW50RGVmaW5pdGlvbnMgJiYgZXZlbnQuZXZlbnREZWZpbml0aW9ucy5sZW5ndGg+MSkge1xuICAgICAgaWYgKGV2ZW50LnBhcmFsbGVsTXVsdGlwbGUpIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOlBhcmFsbGVsTXVsdGlwbGVFdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJldHVybiByZW5kZXJlcignYnBtbjpNdWx0aXBsZUV2ZW50RGVmaW5pdGlvbicpKHBhcmVudEdmeCwgZWxlbWVudCwgaXNUaHJvd2luZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzVHlwZWRFdmVudChldmVudCwgJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicpKSB7XG4gICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicpKHBhcmVudEdmeCwgZWxlbWVudCwgaXNUaHJvd2luZyk7XG4gICAgfVxuXG4gICAgaWYgKGlzVHlwZWRFdmVudChldmVudCwgJ2JwbW46VGltZXJFdmVudERlZmluaXRpb24nKSkge1xuICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJykocGFyZW50R2Z4LCBlbGVtZW50LCBpc1Rocm93aW5nKTtcbiAgICB9XG5cbiAgICBpZiAoaXNUeXBlZEV2ZW50KGV2ZW50LCAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbicpKSB7XG4gICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoZXZlbnQsICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicpKSB7XG4gICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJykocGFyZW50R2Z4LCBlbGVtZW50LCBpc1Rocm93aW5nKTtcbiAgICB9XG5cbiAgICBpZiAoaXNUeXBlZEV2ZW50KGV2ZW50LCAnYnBtbjpFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uJykpIHtcbiAgICAgIHJldHVybiByZW5kZXJlcignYnBtbjpFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uJykocGFyZW50R2Z4LCBlbGVtZW50LCBpc1Rocm93aW5nKTtcbiAgICB9XG5cbiAgICBpZiAoaXNUeXBlZEV2ZW50KGV2ZW50LCAnYnBtbjpMaW5rRXZlbnREZWZpbml0aW9uJykpIHtcbiAgICAgIHJldHVybiByZW5kZXJlcignYnBtbjpMaW5rRXZlbnREZWZpbml0aW9uJykocGFyZW50R2Z4LCBlbGVtZW50LCBpc1Rocm93aW5nKTtcbiAgICB9XG5cbiAgICBpZiAoaXNUeXBlZEV2ZW50KGV2ZW50LCAnYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbicpKSB7XG4gICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46RXJyb3JFdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoZXZlbnQsICdicG1uOkNhbmNlbEV2ZW50RGVmaW5pdGlvbicpKSB7XG4gICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46Q2FuY2VsRXZlbnREZWZpbml0aW9uJykocGFyZW50R2Z4LCBlbGVtZW50LCBpc1Rocm93aW5nKTtcbiAgICB9XG5cbiAgICBpZiAoaXNUeXBlZEV2ZW50KGV2ZW50LCAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJykpIHtcbiAgICAgIHJldHVybiByZW5kZXJlcignYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJykocGFyZW50R2Z4LCBlbGVtZW50LCBpc1Rocm93aW5nKTtcbiAgICB9XG5cbiAgICBpZiAoaXNUeXBlZEV2ZW50KGV2ZW50LCAnYnBtbjpUZXJtaW5hdGVFdmVudERlZmluaXRpb24nKSkge1xuICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOlRlcm1pbmF0ZUV2ZW50RGVmaW5pdGlvbicpKHBhcmVudEdmeCwgZWxlbWVudCwgaXNUaHJvd2luZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJMYWJlbChwYXJlbnRHZngsIGxhYmVsLCBvcHRpb25zKSB7XG5cbiAgICBvcHRpb25zID0gYXNzaWduKHtcbiAgICAgIHNpemU6IHtcbiAgICAgICAgd2lkdGg6IDEwMFxuICAgICAgfVxuICAgIH0sIG9wdGlvbnMpO1xuXG4gICAgdmFyIHRleHQgPSB0ZXh0UmVuZGVyZXIuY3JlYXRlVGV4dChsYWJlbCB8fCAnJywgb3B0aW9ucyk7XG5cbiAgICBzdmdDbGFzc2VzKHRleHQpLmFkZCgnZGpzLWxhYmVsJyk7XG5cbiAgICBzdmdBcHBlbmQocGFyZW50R2Z4LCB0ZXh0KTtcblxuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyRW1iZWRkZWRMYWJlbChwYXJlbnRHZngsIGVsZW1lbnQsIGFsaWduKSB7XG4gICAgdmFyIHNlbWFudGljID0gZ2V0U2VtYW50aWMoZWxlbWVudCk7XG5cbiAgICByZXR1cm4gcmVuZGVyTGFiZWwocGFyZW50R2Z4LCBzZW1hbnRpYy5uYW1lLCB7XG4gICAgICBib3g6IGVsZW1lbnQsXG4gICAgICBhbGlnbjogYWxpZ24sXG4gICAgICBwYWRkaW5nOiA1LFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyRXh0ZXJuYWxMYWJlbChwYXJlbnRHZngsIGVsZW1lbnQpIHtcblxuICAgIHZhciBib3ggPSB7XG4gICAgICB3aWR0aDogOTAsXG4gICAgICBoZWlnaHQ6IDMwLFxuICAgICAgeDogZWxlbWVudC53aWR0aCAvIDIgKyBlbGVtZW50LngsXG4gICAgICB5OiBlbGVtZW50LmhlaWdodCAvIDIgKyBlbGVtZW50LnlcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlbmRlckxhYmVsKHBhcmVudEdmeCwgZ2V0TGFiZWwoZWxlbWVudCksIHtcbiAgICAgIGJveDogYm94LFxuICAgICAgZml0Qm94OiB0cnVlLFxuICAgICAgc3R5bGU6IGFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIHRleHRSZW5kZXJlci5nZXRFeHRlcm5hbFN0eWxlKCksXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxsOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlckxhbmVMYWJlbChwYXJlbnRHZngsIHRleHQsIGVsZW1lbnQpIHtcbiAgICB2YXIgdGV4dEJveCA9IHJlbmRlckxhYmVsKHBhcmVudEdmeCwgdGV4dCwge1xuICAgICAgYm94OiB7XG4gICAgICAgIGhlaWdodDogMzAsXG4gICAgICAgIHdpZHRoOiBlbGVtZW50LmhlaWdodFxuICAgICAgfSxcbiAgICAgIGFsaWduOiAnY2VudGVyLW1pZGRsZScsXG4gICAgICBzdHlsZToge1xuICAgICAgICBmaWxsOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgdG9wID0gLTEgKiBlbGVtZW50LmhlaWdodDtcblxuICAgIHRyYW5zZm9ybSh0ZXh0Qm94LCAwLCAtdG9wLCAyNzApO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUGF0aEZyb21Db25uZWN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICB2YXIgd2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHM7XG5cbiAgICB2YXIgcGF0aERhdGEgPSAnbSAgJyArIHdheXBvaW50c1swXS54ICsgJywnICsgd2F5cG9pbnRzWzBdLnk7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCB3YXlwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhdGhEYXRhICs9ICdMJyArIHdheXBvaW50c1tpXS54ICsgJywnICsgd2F5cG9pbnRzW2ldLnkgKyAnICc7XG4gICAgfVxuICAgIHJldHVybiBwYXRoRGF0YTtcbiAgfVxuXG4gIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnMgPSB7XG4gICAgJ2JwbW46RXZlbnQnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKSB7XG5cbiAgICAgIGlmICghKCdmaWxsT3BhY2l0eScgaW4gYXR0cnMpKSB7XG4gICAgICAgIGF0dHJzLmZpbGxPcGFjaXR5ID0gREVGQVVMVF9GSUxMX09QQUNJVFk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkcmF3Q2lyY2xlKHBhcmVudEdmeCwgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQsIGF0dHJzKTtcbiAgICB9LFxuICAgICdicG1uOlN0YXJ0RXZlbnQnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBhdHRycyA9IHtcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH07XG5cbiAgICAgIHZhciBzZW1hbnRpYyA9IGdldFNlbWFudGljKGVsZW1lbnQpO1xuXG4gICAgICBpZiAoIXNlbWFudGljLmlzSW50ZXJydXB0aW5nKSB7XG4gICAgICAgIGF0dHJzID0ge1xuICAgICAgICAgIHN0cm9rZURhc2hhcnJheTogJzYnLFxuICAgICAgICAgIHN0cm9rZUxpbmVjYXA6ICdyb3VuZCcsXG4gICAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgY2lyY2xlID0gcmVuZGVyZXIoJ2JwbW46RXZlbnQnKShwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKTtcblxuICAgICAgcmVuZGVyRXZlbnRDb250ZW50KGVsZW1lbnQsIHBhcmVudEdmeCk7XG5cbiAgICAgIHJldHVybiBjaXJjbGU7XG4gICAgfSxcbiAgICAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBpc1Rocm93aW5nKSB7XG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0VWRU5UX01FU1NBR0UnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMC45LFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDAuOSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuMjM1LFxuICAgICAgICAgIG15OiAwLjMxNVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGZpbGwgPSBpc1Rocm93aW5nID8gZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSA6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKTtcbiAgICAgIHZhciBzdHJva2UgPSBpc1Rocm93aW5nID8gZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpIDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKTtcblxuICAgICAgdmFyIG1lc3NhZ2VQYXRoID0gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZmlsbCxcbiAgICAgICAgc3Ryb2tlOiBzdHJva2VcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbWVzc2FnZVBhdGg7XG4gICAgfSxcbiAgICAnYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIGNpcmNsZSA9IGRyYXdDaXJjbGUocGFyZW50R2Z4LCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgMC4yICogZWxlbWVudC5oZWlnaHQsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9USU1FUl9XSCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAwLjc1LFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDAuNzUsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjUsXG4gICAgICAgICAgbXk6IDAuNVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgc3Ryb2tlTGluZWNhcDogJ3NxdWFyZScsXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwO2kgPCAxMjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIGxpbmVQYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnRVZFTlRfVElNRVJfTElORScsIHtcbiAgICAgICAgICB4U2NhbGVGYWN0b3I6IDAuNzUsXG4gICAgICAgICAgeVNjYWxlRmFjdG9yOiAwLjc1LFxuICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIG14OiAwLjUsXG4gICAgICAgICAgICBteTogMC41XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgd2lkdGggPSBlbGVtZW50LndpZHRoIC8gMjtcbiAgICAgICAgdmFyIGhlaWdodCA9IGVsZW1lbnQuaGVpZ2h0IC8gMjtcblxuICAgICAgICBkcmF3UGF0aChwYXJlbnRHZngsIGxpbmVQYXRoRGF0YSwge1xuICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICAgIHN0cm9rZUxpbmVjYXA6ICdzcXVhcmUnLFxuICAgICAgICAgIHRyYW5zZm9ybTogJ3JvdGF0ZSgnICsgKGkgKiAzMCkgKyAnLCcgKyBoZWlnaHQgKyAnLCcgKyB3aWR0aCArICcpJyxcbiAgICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaXJjbGU7XG4gICAgfSxcbiAgICAnYnBtbjpFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBldmVudCwgaXNUaHJvd2luZykge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9FU0NBTEFUSU9OJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGV2ZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGV2ZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC41LFxuICAgICAgICAgIG15OiAwLjJcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBmaWxsID0gaXNUaHJvd2luZyA/IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpIDogJ25vbmUnO1xuXG4gICAgICByZXR1cm4gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZmlsbCxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZXZlbnQpIHtcbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnRVZFTlRfQ09ORElUSU9OQUwnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZXZlbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZXZlbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjUsXG4gICAgICAgICAgbXk6IDAuMjIyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnYnBtbjpMaW5rRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBldmVudCwgaXNUaHJvd2luZykge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9MSU5LJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGV2ZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGV2ZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC41NyxcbiAgICAgICAgICBteTogMC4yNjNcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBmaWxsID0gaXNUaHJvd2luZyA/IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpIDogJ25vbmUnO1xuXG4gICAgICByZXR1cm4gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZmlsbCxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZXZlbnQsIGlzVGhyb3dpbmcpIHtcbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnRVZFTlRfRVJST1InLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMS4xLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEuMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGV2ZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGV2ZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4yLFxuICAgICAgICAgIG15OiAwLjcyMlxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGZpbGwgPSBpc1Rocm93aW5nID8gZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvcikgOiAnbm9uZSc7XG5cbiAgICAgIHJldHVybiBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBmaWxsLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcbiAgICB9LFxuICAgICdicG1uOkNhbmNlbEV2ZW50RGVmaW5pdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZXZlbnQsIGlzVGhyb3dpbmcpIHtcbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnRVZFTlRfQ0FOQ0VMXzQ1Jywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEuMCxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLjAsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBldmVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBldmVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuNjM4LFxuICAgICAgICAgIG15OiAtMC4wNTVcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBmaWxsID0gaXNUaHJvd2luZyA/IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpIDogJ25vbmUnO1xuXG4gICAgICB2YXIgcGF0aCA9IGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGZpbGwsXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByb3RhdGUocGF0aCwgNDUpO1xuXG4gICAgICByZXR1cm4gcGF0aDtcbiAgICB9LFxuICAgICdicG1uOkNvbXBlbnNhdGVFdmVudERlZmluaXRpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGV2ZW50LCBpc1Rocm93aW5nKSB7XG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0VWRU5UX0NPTVBFTlNBVElPTicsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBldmVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBldmVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuMjIsXG4gICAgICAgICAgbXk6IDAuNVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGZpbGwgPSBpc1Rocm93aW5nID8gZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvcikgOiAnbm9uZSc7XG5cbiAgICAgIHJldHVybiBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBmaWxsLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcbiAgICB9LFxuICAgICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZXZlbnQsIGlzVGhyb3dpbmcpIHtcbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnRVZFTlRfU0lHTkFMJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDAuOSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAwLjksXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBldmVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBldmVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuNSxcbiAgICAgICAgICBteTogMC4yXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZmlsbCA9IGlzVGhyb3dpbmcgPyBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSA6ICdub25lJztcblxuICAgICAgcmV0dXJuIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGZpbGwsXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46TXVsdGlwbGVFdmVudERlZmluaXRpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGV2ZW50LCBpc1Rocm93aW5nKSB7XG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0VWRU5UX01VTFRJUExFJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEuMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLjEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBldmVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBldmVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuMjIyLFxuICAgICAgICAgIG15OiAwLjM2XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZmlsbCA9IGlzVGhyb3dpbmcgPyBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSA6ICdub25lJztcblxuICAgICAgcmV0dXJuIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGZpbGxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46UGFyYWxsZWxNdWx0aXBsZUV2ZW50RGVmaW5pdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZXZlbnQpIHtcbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnRVZFTlRfUEFSQUxMRUxfTVVMVElQTEUnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMS4yLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEuMixcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGV2ZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGV2ZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC40NTgsXG4gICAgICAgICAgbXk6IDAuMTk0XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46RW5kRXZlbnQnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBjaXJjbGUgPSByZW5kZXJlcignYnBtbjpFdmVudCcpKHBhcmVudEdmeCwgZWxlbWVudCwge1xuICAgICAgICBzdHJva2VXaWR0aDogNCxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByZW5kZXJFdmVudENvbnRlbnQoZWxlbWVudCwgcGFyZW50R2Z4LCB0cnVlKTtcblxuICAgICAgcmV0dXJuIGNpcmNsZTtcbiAgICB9LFxuICAgICdicG1uOlRlcm1pbmF0ZUV2ZW50RGVmaW5pdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIGNpcmNsZSA9IGRyYXdDaXJjbGUocGFyZW50R2Z4LCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgOCwge1xuICAgICAgICBzdHJva2VXaWR0aDogNCxcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGNpcmNsZTtcbiAgICB9LFxuICAgICdicG1uOkludGVybWVkaWF0ZUV2ZW50JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgb3V0ZXIgPSByZW5kZXJlcignYnBtbjpFdmVudCcpKHBhcmVudEdmeCwgZWxlbWVudCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICAvKiBpbm5lciAqL1xuICAgICAgZHJhd0NpcmNsZShwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCBJTk5FUl9PVVRFUl9ESVNULCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgJ25vbmUnKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgcmVuZGVyRXZlbnRDb250ZW50KGVsZW1lbnQsIHBhcmVudEdmeCk7XG5cbiAgICAgIHJldHVybiBvdXRlcjtcbiAgICB9LFxuICAgICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnOiBhcygnYnBtbjpJbnRlcm1lZGlhdGVFdmVudCcpLFxuICAgICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnOiBhcygnYnBtbjpJbnRlcm1lZGlhdGVFdmVudCcpLFxuXG4gICAgJ2JwbW46QWN0aXZpdHknOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKSB7XG5cbiAgICAgIGF0dHJzID0gYXR0cnMgfHwge307XG5cbiAgICAgIGlmICghKCdmaWxsT3BhY2l0eScgaW4gYXR0cnMpKSB7XG4gICAgICAgIGF0dHJzLmZpbGxPcGFjaXR5ID0gREVGQVVMVF9GSUxMX09QQUNJVFk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkcmF3UmVjdChwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCBUQVNLX0JPUkRFUl9SQURJVVMsIGF0dHJzKTtcbiAgICB9LFxuXG4gICAgJ2JwbW46VGFzayc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIGF0dHJzID0ge1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfTtcblxuICAgICAgdmFyIHJlY3QgPSByZW5kZXJlcignYnBtbjpBY3Rpdml0eScpKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpO1xuXG4gICAgICByZW5kZXJFbWJlZGRlZExhYmVsKHBhcmVudEdmeCwgZWxlbWVudCwgJ2NlbnRlci1taWRkbGUnKTtcbiAgICAgIGF0dGFjaFRhc2tNYXJrZXJzKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIHJldHVybiByZWN0O1xuICAgIH0sXG4gICAgJ2JwbW46U2VydmljZVRhc2snOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciB0YXNrID0gcmVuZGVyZXIoJ2JwbW46VGFzaycpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIHZhciBwYXRoRGF0YUJHID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfU0VSVklDRScsIHtcbiAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgeDogMTIsXG4gICAgICAgICAgeTogMThcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qIHNlcnZpY2UgYmcgKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YUJHLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBmaWxsUGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9TRVJWSUNFX0ZJTEwnLCB7XG4gICAgICAgIGFic3Bvczoge1xuICAgICAgICAgIHg6IDE3LjIsXG4gICAgICAgICAgeTogMThcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qIHNlcnZpY2UgZmlsbCAqLyBkcmF3UGF0aChwYXJlbnRHZngsIGZpbGxQYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMCxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfU0VSVklDRScsIHtcbiAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgeDogMTcsXG4gICAgICAgICAgeTogMjJcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qIHNlcnZpY2UgKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGFzaztcbiAgICB9LFxuICAgICdicG1uOlVzZXJUYXNrJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgdGFzayA9IHJlbmRlcmVyKCdicG1uOlRhc2snKShwYXJlbnRHZngsIGVsZW1lbnQpO1xuXG4gICAgICB2YXIgeCA9IDE1O1xuICAgICAgdmFyIHkgPSAxMjtcblxuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfVVNFUl8xJywge1xuICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICB4OiB4LFxuICAgICAgICAgIHk6IHlcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qIHVzZXIgcGF0aCAqLyBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjUsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgdmFyIHBhdGhEYXRhMiA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEFTS19UWVBFX1VTRVJfMicsIHtcbiAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgeDogeCxcbiAgICAgICAgICB5OiB5XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKiB1c2VyMiBwYXRoICovIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEyLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjUsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgdmFyIHBhdGhEYXRhMyA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEFTS19UWVBFX1VTRVJfMycsIHtcbiAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgeDogeCxcbiAgICAgICAgICB5OiB5XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKiB1c2VyMyBwYXRoICovIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEzLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjUsXG4gICAgICAgIGZpbGw6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0YXNrO1xuICAgIH0sXG4gICAgJ2JwbW46TWFudWFsVGFzayc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIHRhc2sgPSByZW5kZXJlcignYnBtbjpUYXNrJykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfTUFOVUFMJywge1xuICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICB4OiAxNyxcbiAgICAgICAgICB5OiAxNVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyogbWFudWFsIHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMC41LCAvLyAwLjI1LFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0YXNrO1xuICAgIH0sXG4gICAgJ2JwbW46U2VuZFRhc2snOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciB0YXNrID0gcmVuZGVyZXIoJ2JwbW46VGFzaycpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEFTS19UWVBFX1NFTkQnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogMjEsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogMTQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuMjg1LFxuICAgICAgICAgIG15OiAwLjM1N1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyogc2VuZCBwYXRoICovIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRhc2s7XG4gICAgfSxcbiAgICAnYnBtbjpSZWNlaXZlVGFzaycgOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBzZW1hbnRpYyA9IGdldFNlbWFudGljKGVsZW1lbnQpO1xuXG4gICAgICB2YXIgdGFzayA9IHJlbmRlcmVyKCdicG1uOlRhc2snKShwYXJlbnRHZngsIGVsZW1lbnQpO1xuICAgICAgdmFyIHBhdGhEYXRhO1xuXG4gICAgICBpZiAoc2VtYW50aWMuaW5zdGFudGlhdGUpIHtcbiAgICAgICAgZHJhd0NpcmNsZShwYXJlbnRHZngsIDI4LCAyOCwgMjAgKiAwLjIyLCB7IHN0cm9rZVdpZHRoOiAxIH0pO1xuXG4gICAgICAgIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfSU5TVEFOVElBVElOR19TRU5EJywge1xuICAgICAgICAgIGFic3Bvczoge1xuICAgICAgICAgICAgeDogNy43NyxcbiAgICAgICAgICAgIHk6IDkuNTJcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEFTS19UWVBFX1NFTkQnLCB7XG4gICAgICAgICAgeFNjYWxlRmFjdG9yOiAwLjksXG4gICAgICAgICAgeVNjYWxlRmFjdG9yOiAwLjksXG4gICAgICAgICAgY29udGFpbmVyV2lkdGg6IDIxLFxuICAgICAgICAgIGNvbnRhaW5lckhlaWdodDogMTQsXG4gICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIG14OiAwLjMsXG4gICAgICAgICAgICBteTogMC40XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLyogcmVjZWl2ZSBwYXRoICovIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRhc2s7XG4gICAgfSxcbiAgICAnYnBtbjpTY3JpcHRUYXNrJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgdGFzayA9IHJlbmRlcmVyKCdicG1uOlRhc2snKShwYXJlbnRHZngsIGVsZW1lbnQpO1xuXG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9TQ1JJUFQnLCB7XG4gICAgICAgIGFic3Bvczoge1xuICAgICAgICAgIHg6IDE1LFxuICAgICAgICAgIHk6IDIwXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKiBzY3JpcHQgcGF0aCAqLyBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGFzaztcbiAgICB9LFxuICAgICdicG1uOkJ1c2luZXNzUnVsZVRhc2snOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciB0YXNrID0gcmVuZGVyZXIoJ2JwbW46VGFzaycpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIHZhciBoZWFkZXJQYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEFTS19UWVBFX0JVU0lORVNTX1JVTEVfSEVBREVSJywge1xuICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICB4OiA4LFxuICAgICAgICAgIHk6IDhcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBidXNpbmVzc0hlYWRlclBhdGggPSBkcmF3UGF0aChwYXJlbnRHZngsIGhlYWRlclBhdGhEYXRhKTtcbiAgICAgIHN2Z0F0dHIoYnVzaW5lc3NIZWFkZXJQYXRoLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgJyNhYWFhYWEnKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgdmFyIGhlYWRlckRhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9CVVNJTkVTU19SVUxFX01BSU4nLCB7XG4gICAgICAgIGFic3Bvczoge1xuICAgICAgICAgIHg6IDgsXG4gICAgICAgICAgeTogOFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGJ1c2luZXNzUGF0aCA9IGRyYXdQYXRoKHBhcmVudEdmeCwgaGVhZGVyRGF0YSk7XG4gICAgICBzdmdBdHRyKGJ1c2luZXNzUGF0aCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRhc2s7XG4gICAgfSxcbiAgICAnYnBtbjpTdWJQcm9jZXNzJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycykge1xuICAgICAgYXR0cnMgPSBhc3NpZ24oe1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSwgYXR0cnMpO1xuXG4gICAgICB2YXIgcmVjdCA9IHJlbmRlcmVyKCdicG1uOkFjdGl2aXR5JykocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyk7XG5cbiAgICAgIHZhciBleHBhbmRlZCA9IGlzRXhwYW5kZWQoZWxlbWVudCk7XG5cbiAgICAgIGlmIChpc0V2ZW50U3ViUHJvY2VzcyhlbGVtZW50KSkge1xuICAgICAgICBzdmdBdHRyKHJlY3QsIHtcbiAgICAgICAgICBzdHJva2VEYXNoYXJyYXk6ICcxLDInXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZW5kZXJFbWJlZGRlZExhYmVsKHBhcmVudEdmeCwgZWxlbWVudCwgZXhwYW5kZWQgPyAnY2VudGVyLXRvcCcgOiAnY2VudGVyLW1pZGRsZScpO1xuXG4gICAgICBpZiAoZXhwYW5kZWQpIHtcbiAgICAgICAgYXR0YWNoVGFza01hcmtlcnMocGFyZW50R2Z4LCBlbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF0dGFjaFRhc2tNYXJrZXJzKHBhcmVudEdmeCwgZWxlbWVudCwgWydTdWJQcm9jZXNzTWFya2VyJ10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVjdDtcbiAgICB9LFxuICAgICdicG1uOkFkSG9jU3ViUHJvY2Vzcyc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOlN1YlByb2Nlc3MnKShwYXJlbnRHZngsIGVsZW1lbnQpO1xuICAgIH0sXG4gICAgJ2JwbW46VHJhbnNhY3Rpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBvdXRlciA9IHJlbmRlcmVyKCdicG1uOlN1YlByb2Nlc3MnKShwYXJlbnRHZngsIGVsZW1lbnQpO1xuXG4gICAgICB2YXIgaW5uZXJBdHRycyA9IHN0eWxlcy5zdHlsZShbICduby1maWxsJywgJ25vLWV2ZW50cycgXSwge1xuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICAvKiBpbm5lciBwYXRoICovIGRyYXdSZWN0KHBhcmVudEdmeCwgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQsIFRBU0tfQk9SREVSX1JBRElVUyAtIDIsIElOTkVSX09VVEVSX0RJU1QsIGlubmVyQXR0cnMpO1xuXG4gICAgICByZXR1cm4gb3V0ZXI7XG4gICAgfSxcbiAgICAnYnBtbjpDYWxsQWN0aXZpdHknOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiByZW5kZXJlcignYnBtbjpTdWJQcm9jZXNzJykocGFyZW50R2Z4LCBlbGVtZW50LCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiA1XG4gICAgICB9KTtcbiAgICB9LFxuICAgICdicG1uOlBhcnRpY2lwYW50JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG5cbiAgICAgIHZhciBhdHRycyA9IHtcbiAgICAgICAgZmlsbE9wYWNpdHk6IERFRkFVTFRfRklMTF9PUEFDSVRZLFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfTtcblxuICAgICAgdmFyIGxhbmUgPSByZW5kZXJlcignYnBtbjpMYW5lJykocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyk7XG5cbiAgICAgIHZhciBleHBhbmRlZFBvb2wgPSBpc0V4cGFuZGVkKGVsZW1lbnQpO1xuXG4gICAgICBpZiAoZXhwYW5kZWRQb29sKSB7XG4gICAgICAgIGRyYXdMaW5lKHBhcmVudEdmeCwgW1xuICAgICAgICAgIHsgeDogMzAsIHk6IDAgfSxcbiAgICAgICAgICB7IHg6IDMwLCB5OiBlbGVtZW50LmhlaWdodCB9XG4gICAgICAgIF0sIHtcbiAgICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciB0ZXh0ID0gZ2V0U2VtYW50aWMoZWxlbWVudCkubmFtZTtcbiAgICAgICAgcmVuZGVyTGFuZUxhYmVsKHBhcmVudEdmeCwgdGV4dCwgZWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIC8vIENvbGxhcHNlZCBwb29sIGRyYXcgdGV4dCBpbmxpbmVcbiAgICAgICAgdmFyIHRleHQyID0gZ2V0U2VtYW50aWMoZWxlbWVudCkubmFtZTtcbiAgICAgICAgcmVuZGVyTGFiZWwocGFyZW50R2Z4LCB0ZXh0Miwge1xuICAgICAgICAgIGJveDogZWxlbWVudCwgYWxpZ246ICdjZW50ZXItbWlkZGxlJyxcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXJ0aWNpcGFudE11bHRpcGxpY2l0eSA9ICEhKGdldFNlbWFudGljKGVsZW1lbnQpLnBhcnRpY2lwYW50TXVsdGlwbGljaXR5KTtcblxuICAgICAgaWYgKHBhcnRpY2lwYW50TXVsdGlwbGljaXR5KSB7XG4gICAgICAgIHJlbmRlcmVyKCdQYXJ0aWNpcGFudE11bHRpcGxpY2l0eU1hcmtlcicpKHBhcmVudEdmeCwgZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsYW5lO1xuICAgIH0sXG4gICAgJ2JwbW46TGFuZSc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpIHtcbiAgICAgIHZhciByZWN0ID0gZHJhd1JlY3QocGFyZW50R2Z4LCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgMCwgYXNzaWduKHtcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBmaWxsT3BhY2l0eTogSElHSF9GSUxMX09QQUNJVFksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSwgYXR0cnMpKTtcblxuICAgICAgdmFyIHNlbWFudGljID0gZ2V0U2VtYW50aWMoZWxlbWVudCk7XG5cbiAgICAgIGlmIChzZW1hbnRpYy4kdHlwZSA9PT0gJ2JwbW46TGFuZScpIHtcbiAgICAgICAgdmFyIHRleHQgPSBzZW1hbnRpYy5uYW1lO1xuICAgICAgICByZW5kZXJMYW5lTGFiZWwocGFyZW50R2Z4LCB0ZXh0LCBlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlY3Q7XG4gICAgfSxcbiAgICAnYnBtbjpJbmNsdXNpdmVHYXRld2F5JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgZGlhbW9uZCA9IHJlbmRlcmVyKCdicG1uOkdhdGV3YXknKShwYXJlbnRHZngsIGVsZW1lbnQpO1xuXG4gICAgICAvKiBjaXJjbGUgcGF0aCAqL1xuICAgICAgZHJhd0NpcmNsZShwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCBlbGVtZW50LmhlaWdodCAqIDAuMjQsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDIuNSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZGlhbW9uZDtcbiAgICB9LFxuICAgICdicG1uOkV4Y2x1c2l2ZUdhdGV3YXknOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBkaWFtb25kID0gcmVuZGVyZXIoJ2JwbW46R2F0ZXdheScpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnR0FURVdBWV9FWENMVVNJVkUnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMC40LFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDAuNCxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuMzIsXG4gICAgICAgICAgbXk6IDAuM1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKChnZXREaShlbGVtZW50KS5pc01hcmtlclZpc2libGUpKSB7XG4gICAgICAgIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgICBmaWxsOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpLFxuICAgICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpYW1vbmQ7XG4gICAgfSxcbiAgICAnYnBtbjpDb21wbGV4R2F0ZXdheSc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIGRpYW1vbmQgPSByZW5kZXJlcignYnBtbjpHYXRld2F5JykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdHQVRFV0FZX0NPTVBMRVgnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMC41LFxuICAgICAgICB5U2NhbGVGYWN0b3I6MC41LFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC40NixcbiAgICAgICAgICBteTogMC4yNlxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyogY29tcGxleCBwYXRoICovIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBkaWFtb25kO1xuICAgIH0sXG4gICAgJ2JwbW46UGFyYWxsZWxHYXRld2F5JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgZGlhbW9uZCA9IHJlbmRlcmVyKCdicG1uOkdhdGV3YXknKShwYXJlbnRHZngsIGVsZW1lbnQpO1xuXG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0dBVEVXQVlfUEFSQUxMRUwnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMC42LFxuICAgICAgICB5U2NhbGVGYWN0b3I6MC42LFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC40NixcbiAgICAgICAgICBteTogMC4yXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKiBwYXJhbGxlbCBwYXRoICovIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBkaWFtb25kO1xuICAgIH0sXG4gICAgJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcblxuICAgICAgdmFyIHNlbWFudGljID0gZ2V0U2VtYW50aWMoZWxlbWVudCk7XG5cbiAgICAgIHZhciBkaWFtb25kID0gcmVuZGVyZXIoJ2JwbW46R2F0ZXdheScpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIC8qIG91dGVyIGNpcmNsZSBwYXRoICovIGRyYXdDaXJjbGUocGFyZW50R2Z4LCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgZWxlbWVudC5oZWlnaHQgKiAwLjIwLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiAnbm9uZScsXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHZhciB0eXBlID0gc2VtYW50aWMuZXZlbnRHYXRld2F5VHlwZTtcbiAgICAgIHZhciBpbnN0YW50aWF0ZSA9ICEhc2VtYW50aWMuaW5zdGFudGlhdGU7XG5cbiAgICAgIGZ1bmN0aW9uIGRyYXdFdmVudCgpIHtcblxuICAgICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0dBVEVXQVlfRVZFTlRfQkFTRUQnLCB7XG4gICAgICAgICAgeFNjYWxlRmFjdG9yOiAwLjE4LFxuICAgICAgICAgIHlTY2FsZUZhY3RvcjogMC4xOCxcbiAgICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICBteDogMC4zNixcbiAgICAgICAgICAgIG15OiAwLjQ0XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgYXR0cnMgPSB7XG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsICdub25lJyksXG4gICAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICAgIH07XG5cbiAgICAgICAgLyogZXZlbnQgcGF0aCAqLyBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCBhdHRycyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlID09PSAnUGFyYWxsZWwnKSB7XG5cbiAgICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdHQVRFV0FZX1BBUkFMTEVMJywge1xuICAgICAgICAgIHhTY2FsZUZhY3RvcjogMC40LFxuICAgICAgICAgIHlTY2FsZUZhY3RvcjowLjQsXG4gICAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgbXg6IDAuNDc0LFxuICAgICAgICAgICAgbXk6IDAuMjk2XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgcGFyYWxsZWxQYXRoID0gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSk7XG4gICAgICAgIHN2Z0F0dHIocGFyYWxsZWxQYXRoLCB7XG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgICAgZmlsbDogJ25vbmUnXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnRXhjbHVzaXZlJykge1xuXG4gICAgICAgIGlmICghaW5zdGFudGlhdGUpIHtcbiAgICAgICAgICB2YXIgaW5uZXJDaXJjbGUgPSBkcmF3Q2lyY2xlKHBhcmVudEdmeCwgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQsIGVsZW1lbnQuaGVpZ2h0ICogMC4yNik7XG4gICAgICAgICAgc3ZnQXR0cihpbm5lckNpcmNsZSwge1xuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgICAgICBmaWxsOiAnbm9uZScsXG4gICAgICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRyYXdFdmVudCgpO1xuICAgICAgfVxuXG5cbiAgICAgIHJldHVybiBkaWFtb25kO1xuICAgIH0sXG4gICAgJ2JwbW46R2F0ZXdheSc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIGF0dHJzID0ge1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIGZpbGxPcGFjaXR5OiBERUZBVUxUX0ZJTExfT1BBQ0lUWSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gZHJhd0RpYW1vbmQocGFyZW50R2Z4LCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgYXR0cnMpO1xuICAgIH0sXG4gICAgJ2JwbW46U2VxdWVuY2VGbG93JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgcGF0aERhdGEgPSBjcmVhdGVQYXRoRnJvbUNvbm5lY3Rpb24oZWxlbWVudCk7XG5cbiAgICAgIHZhciBmaWxsID0gZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICAgIHN0cm9rZSA9IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcik7XG5cbiAgICAgIHZhciBhdHRycyA9IHtcbiAgICAgICAgc3Ryb2tlTGluZWpvaW46ICdyb3VuZCcsXG4gICAgICAgIG1hcmtlckVuZDogbWFya2VyKCdzZXF1ZW5jZWZsb3ctZW5kJywgZmlsbCwgc3Ryb2tlKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9O1xuXG4gICAgICB2YXIgcGF0aCA9IGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIGF0dHJzKTtcblxuICAgICAgdmFyIHNlcXVlbmNlRmxvdyA9IGdldFNlbWFudGljKGVsZW1lbnQpO1xuXG4gICAgICB2YXIgc291cmNlO1xuXG4gICAgICBpZiAoZWxlbWVudC5zb3VyY2UpIHtcbiAgICAgICAgc291cmNlID0gZWxlbWVudC5zb3VyY2UuYnVzaW5lc3NPYmplY3Q7XG5cbiAgICAgICAgLy8gY29uZGl0aW9uYWwgZmxvdyBtYXJrZXJcbiAgICAgICAgaWYgKHNlcXVlbmNlRmxvdy5jb25kaXRpb25FeHByZXNzaW9uICYmIHNvdXJjZS4kaW5zdGFuY2VPZignYnBtbjpBY3Rpdml0eScpKSB7XG4gICAgICAgICAgc3ZnQXR0cihwYXRoLCB7XG4gICAgICAgICAgICBtYXJrZXJTdGFydDogbWFya2VyKCdjb25kaXRpb25hbC1mbG93LW1hcmtlcicsIGZpbGwsIHN0cm9rZSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRlZmF1bHQgbWFya2VyXG4gICAgICAgIGlmIChzb3VyY2UuZGVmYXVsdCAmJiAoc291cmNlLiRpbnN0YW5jZU9mKCdicG1uOkdhdGV3YXknKSB8fCBzb3VyY2UuJGluc3RhbmNlT2YoJ2JwbW46QWN0aXZpdHknKSkgJiZcbiAgICAgICAgICAgIHNvdXJjZS5kZWZhdWx0ID09PSBzZXF1ZW5jZUZsb3cpIHtcbiAgICAgICAgICBzdmdBdHRyKHBhdGgsIHtcbiAgICAgICAgICAgIG1hcmtlclN0YXJ0OiBtYXJrZXIoJ2NvbmRpdGlvbmFsLWRlZmF1bHQtZmxvdy1tYXJrZXInLCBmaWxsLCBzdHJva2UpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfSxcbiAgICAnYnBtbjpBc3NvY2lhdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpIHtcblxuICAgICAgdmFyIHNlbWFudGljID0gZ2V0U2VtYW50aWMoZWxlbWVudCk7XG5cbiAgICAgIHZhciBmaWxsID0gZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICAgIHN0cm9rZSA9IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcik7XG5cbiAgICAgIGF0dHJzID0gYXNzaWduKHtcbiAgICAgICAgc3Ryb2tlRGFzaGFycmF5OiAnMC41LCA1JyxcbiAgICAgICAgc3Ryb2tlTGluZWNhcDogJ3JvdW5kJyxcbiAgICAgICAgc3Ryb2tlTGluZWpvaW46ICdyb3VuZCcsXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSwgYXR0cnMgfHwge30pO1xuXG4gICAgICBpZiAoc2VtYW50aWMuYXNzb2NpYXRpb25EaXJlY3Rpb24gPT09ICdPbmUnIHx8XG4gICAgICAgICAgc2VtYW50aWMuYXNzb2NpYXRpb25EaXJlY3Rpb24gPT09ICdCb3RoJykge1xuICAgICAgICBhdHRycy5tYXJrZXJFbmQgPSBtYXJrZXIoJ2Fzc29jaWF0aW9uLWVuZCcsIGZpbGwsIHN0cm9rZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZW1hbnRpYy5hc3NvY2lhdGlvbkRpcmVjdGlvbiA9PT0gJ0JvdGgnKSB7XG4gICAgICAgIGF0dHJzLm1hcmtlclN0YXJ0ID0gbWFya2VyKCdhc3NvY2lhdGlvbi1zdGFydCcsIGZpbGwsIHN0cm9rZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkcmF3TGluZShwYXJlbnRHZngsIGVsZW1lbnQud2F5cG9pbnRzLCBhdHRycyk7XG4gICAgfSxcbiAgICAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIGZpbGwgPSBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgICAgc3Ryb2tlID0gZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKTtcblxuICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOkFzc29jaWF0aW9uJykocGFyZW50R2Z4LCBlbGVtZW50LCB7XG4gICAgICAgIG1hcmtlckVuZDogbWFya2VyKCdhc3NvY2lhdGlvbi1lbmQnLCBmaWxsLCBzdHJva2UpXG4gICAgICB9KTtcbiAgICB9LFxuICAgICdicG1uOkRhdGFPdXRwdXRBc3NvY2lhdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIGZpbGwgPSBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgICAgc3Ryb2tlID0gZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKTtcblxuICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOkFzc29jaWF0aW9uJykocGFyZW50R2Z4LCBlbGVtZW50LCB7XG4gICAgICAgIG1hcmtlckVuZDogbWFya2VyKCdhc3NvY2lhdGlvbi1lbmQnLCBmaWxsLCBzdHJva2UpXG4gICAgICB9KTtcbiAgICB9LFxuICAgICdicG1uOk1lc3NhZ2VGbG93JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG5cbiAgICAgIHZhciBzZW1hbnRpYyA9IGdldFNlbWFudGljKGVsZW1lbnQpLFxuICAgICAgICAgIGRpID0gZ2V0RGkoZWxlbWVudCk7XG5cbiAgICAgIHZhciBmaWxsID0gZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICAgIHN0cm9rZSA9IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcik7XG5cbiAgICAgIHZhciBwYXRoRGF0YSA9IGNyZWF0ZVBhdGhGcm9tQ29ubmVjdGlvbihlbGVtZW50KTtcblxuICAgICAgdmFyIGF0dHJzID0ge1xuICAgICAgICBtYXJrZXJFbmQ6IG1hcmtlcignbWVzc2FnZWZsb3ctZW5kJywgZmlsbCwgc3Ryb2tlKSxcbiAgICAgICAgbWFya2VyU3RhcnQ6IG1hcmtlcignbWVzc2FnZWZsb3ctc3RhcnQnLCBmaWxsLCBzdHJva2UpLFxuICAgICAgICBzdHJva2VEYXNoYXJyYXk6ICcxMCwgMTInLFxuICAgICAgICBzdHJva2VMaW5lY2FwOiAncm91bmQnLFxuICAgICAgICBzdHJva2VMaW5lam9pbjogJ3JvdW5kJyxcbiAgICAgICAgc3Ryb2tlV2lkdGg6ICcxLjVweCcsXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfTtcblxuICAgICAgdmFyIHBhdGggPSBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCBhdHRycyk7XG5cbiAgICAgIGlmIChzZW1hbnRpYy5tZXNzYWdlUmVmKSB7XG4gICAgICAgIHZhciBtaWRQb2ludCA9IHBhdGguZ2V0UG9pbnRBdExlbmd0aChwYXRoLmdldFRvdGFsTGVuZ3RoKCkgLyAyKTtcblxuICAgICAgICB2YXIgbWFya2VyUGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ01FU1NBR0VfRkxPV19NQVJLRVInLCB7XG4gICAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgICB4OiBtaWRQb2ludC54LFxuICAgICAgICAgICAgeTogbWlkUG9pbnQueVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIG1lc3NhZ2VBdHRycyA9IHsgc3Ryb2tlV2lkdGg6IDEgfTtcblxuICAgICAgICBpZiAoZGkubWVzc2FnZVZpc2libGVLaW5kID09PSAnaW5pdGlhdGluZycpIHtcbiAgICAgICAgICBtZXNzYWdlQXR0cnMuZmlsbCA9ICd3aGl0ZSc7XG4gICAgICAgICAgbWVzc2FnZUF0dHJzLnN0cm9rZSA9ICdibGFjayc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVzc2FnZUF0dHJzLmZpbGwgPSAnIzg4OCc7XG4gICAgICAgICAgbWVzc2FnZUF0dHJzLnN0cm9rZSA9ICd3aGl0ZSc7XG4gICAgICAgIH1cblxuICAgICAgICBkcmF3UGF0aChwYXJlbnRHZngsIG1hcmtlclBhdGhEYXRhLCBtZXNzYWdlQXR0cnMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGF0aDtcbiAgICB9LFxuICAgICdicG1uOkRhdGFPYmplY3QnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnREFUQV9PQkpFQ1RfUEFUSCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjQ3NCxcbiAgICAgICAgICBteTogMC4yOTZcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBlbGVtZW50T2JqZWN0ID0gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIGZpbGxPcGFjaXR5OiBERUZBVUxUX0ZJTExfT1BBQ0lUWSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgdmFyIHNlbWFudGljID0gZ2V0U2VtYW50aWMoZWxlbWVudCk7XG5cbiAgICAgIGlmIChpc0NvbGxlY3Rpb24oc2VtYW50aWMpKSB7XG4gICAgICAgIHJlbmRlckRhdGFJdGVtQ29sbGVjdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZWxlbWVudE9iamVjdDtcbiAgICB9LFxuICAgICdicG1uOkRhdGFPYmplY3RSZWZlcmVuY2UnOiBhcygnYnBtbjpEYXRhT2JqZWN0JyksXG4gICAgJ2JwbW46RGF0YUlucHV0JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG5cbiAgICAgIHZhciBhcnJvd1BhdGhEYXRhID0gcGF0aE1hcC5nZXRSYXdQYXRoKCdEQVRBX0FSUk9XJyk7XG5cbiAgICAgIC8vIHBhZ2VcbiAgICAgIHZhciBlbGVtZW50T2JqZWN0ID0gcmVuZGVyZXIoJ2JwbW46RGF0YU9iamVjdCcpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIC8qIGlucHV0IGFycm93IHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBhcnJvd1BhdGhEYXRhLCB7IHN0cm9rZVdpZHRoOiAxIH0pO1xuXG4gICAgICByZXR1cm4gZWxlbWVudE9iamVjdDtcbiAgICB9LFxuICAgICdicG1uOkRhdGFPdXRwdXQnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBhcnJvd1BhdGhEYXRhID0gcGF0aE1hcC5nZXRSYXdQYXRoKCdEQVRBX0FSUk9XJyk7XG5cbiAgICAgIC8vIHBhZ2VcbiAgICAgIHZhciBlbGVtZW50T2JqZWN0ID0gcmVuZGVyZXIoJ2JwbW46RGF0YU9iamVjdCcpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIC8qIG91dHB1dCBhcnJvdyBwYXRoICovIGRyYXdQYXRoKHBhcmVudEdmeCwgYXJyb3dQYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogJ2JsYWNrJ1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBlbGVtZW50T2JqZWN0O1xuICAgIH0sXG4gICAgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgREFUQV9TVE9SRV9QQVRIID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdEQVRBX1NUT1JFJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAsXG4gICAgICAgICAgbXk6IDAuMTMzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZWxlbWVudFN0b3JlID0gZHJhd1BhdGgocGFyZW50R2Z4LCBEQVRBX1NUT1JFX1BBVEgsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgZmlsbE9wYWNpdHk6IERFRkFVTFRfRklMTF9PUEFDSVRZLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZWxlbWVudFN0b3JlO1xuICAgIH0sXG4gICAgJ2JwbW46Qm91bmRhcnlFdmVudCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuXG4gICAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KSxcbiAgICAgICAgICBjYW5jZWwgPSBzZW1hbnRpYy5jYW5jZWxBY3Rpdml0eTtcblxuICAgICAgdmFyIGF0dHJzID0ge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH07XG5cbiAgICAgIGlmICghY2FuY2VsKSB7XG4gICAgICAgIGF0dHJzLnN0cm9rZURhc2hhcnJheSA9ICc2JztcbiAgICAgICAgYXR0cnMuc3Ryb2tlTGluZWNhcCA9ICdyb3VuZCc7XG4gICAgICB9XG5cbiAgICAgIC8vIGFwcGx5IGZpbGxPcGFjaXR5XG4gICAgICB2YXIgb3V0ZXJBdHRycyA9IGFzc2lnbih7fSwgYXR0cnMsIHtcbiAgICAgICAgZmlsbE9wYWNpdHk6IDFcbiAgICAgIH0pO1xuXG4gICAgICAvLyBhcHBseSBuby1maWxsXG4gICAgICB2YXIgaW5uZXJBdHRycyA9IGFzc2lnbih7fSwgYXR0cnMsIHtcbiAgICAgICAgZmlsbDogJ25vbmUnXG4gICAgICB9KTtcblxuICAgICAgdmFyIG91dGVyID0gcmVuZGVyZXIoJ2JwbW46RXZlbnQnKShwYXJlbnRHZngsIGVsZW1lbnQsIG91dGVyQXR0cnMpO1xuXG4gICAgICAvKiBpbm5lciBwYXRoICovIGRyYXdDaXJjbGUocGFyZW50R2Z4LCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgSU5ORVJfT1VURVJfRElTVCwgaW5uZXJBdHRycyk7XG5cbiAgICAgIHJlbmRlckV2ZW50Q29udGVudChlbGVtZW50LCBwYXJlbnRHZngpO1xuXG4gICAgICByZXR1cm4gb3V0ZXI7XG4gICAgfSxcbiAgICAnYnBtbjpHcm91cCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuXG4gICAgICB2YXIgZ3JvdXAgPSBkcmF3UmVjdChwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCBUQVNLX0JPUkRFUl9SQURJVVMsIHtcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpLFxuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgc3Ryb2tlRGFzaGFycmF5OiAnOCwzLDEsMycsXG4gICAgICAgIGZpbGw6ICdub25lJyxcbiAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGdyb3VwO1xuICAgIH0sXG4gICAgJ2xhYmVsJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICByZXR1cm4gcmVuZGVyRXh0ZXJuYWxMYWJlbChwYXJlbnRHZngsIGVsZW1lbnQpO1xuICAgIH0sXG4gICAgJ2JwbW46VGV4dEFubm90YXRpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBzdHlsZSA9IHtcbiAgICAgICAgJ2ZpbGwnOiAnbm9uZScsXG4gICAgICAgICdzdHJva2UnOiAnbm9uZSdcbiAgICAgIH07XG5cbiAgICAgIHZhciB0ZXh0RWxlbWVudCA9IGRyYXdSZWN0KHBhcmVudEdmeCwgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQsIDAsIDAsIHN0eWxlKTtcblxuICAgICAgdmFyIHRleHRQYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEVYVF9BTk5PVEFUSU9OJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuMCxcbiAgICAgICAgICBteTogMC4wXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkcmF3UGF0aChwYXJlbnRHZngsIHRleHRQYXRoRGF0YSwge1xuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgdGV4dCA9IGdldFNlbWFudGljKGVsZW1lbnQpLnRleHQgfHwgJyc7XG4gICAgICByZW5kZXJMYWJlbChwYXJlbnRHZngsIHRleHQsIHtcbiAgICAgICAgYm94OiBlbGVtZW50LFxuICAgICAgICBhbGlnbjogJ2xlZnQtdG9wJyxcbiAgICAgICAgcGFkZGluZzogNSxcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBmaWxsOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGV4dEVsZW1lbnQ7XG4gICAgfSxcbiAgICAnUGFydGljaXBhbnRNdWx0aXBsaWNpdHlNYXJrZXInOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBtYXJrZXJQYXRoID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdNQVJLRVJfUEFSQUxMRUwnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogKChlbGVtZW50LndpZHRoIC8gMikgLyBlbGVtZW50LndpZHRoKSxcbiAgICAgICAgICBteTogKGVsZW1lbnQuaGVpZ2h0IC0gMTUpIC8gZWxlbWVudC5oZWlnaHRcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRyYXdNYXJrZXIoJ3BhcnRpY2lwYW50LW11bHRpcGxpY2l0eScsIHBhcmVudEdmeCwgbWFya2VyUGF0aCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ1N1YlByb2Nlc3NNYXJrZXInOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBtYXJrZXJSZWN0ID0gZHJhd1JlY3QocGFyZW50R2Z4LCAxNCwgMTQsIDAsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgLy8gUHJvY2VzcyBtYXJrZXIgaXMgcGxhY2VkIGluIHRoZSBtaWRkbGUgb2YgdGhlIGJveFxuICAgICAgLy8gdGhlcmVmb3JlIGZpeGVkIHZhbHVlcyBjYW4gYmUgdXNlZCBoZXJlXG4gICAgICB0cmFuc2xhdGUobWFya2VyUmVjdCwgZWxlbWVudC53aWR0aCAvIDIgLSA3LjUsIGVsZW1lbnQuaGVpZ2h0IC0gMjApO1xuXG4gICAgICB2YXIgbWFya2VyUGF0aCA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnTUFSS0VSX1NVQl9QUk9DRVNTJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEuNSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLjUsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAoZWxlbWVudC53aWR0aCAvIDIgLSA3LjUpIC8gZWxlbWVudC53aWR0aCxcbiAgICAgICAgICBteTogKGVsZW1lbnQuaGVpZ2h0IC0gMjApIC8gZWxlbWVudC5oZWlnaHRcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRyYXdNYXJrZXIoJ3N1Yi1wcm9jZXNzJywgcGFyZW50R2Z4LCBtYXJrZXJQYXRoLCB7XG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcbiAgICB9LFxuICAgICdQYXJhbGxlbE1hcmtlcic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgcG9zaXRpb24pIHtcbiAgICAgIHZhciBtYXJrZXJQYXRoID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdNQVJLRVJfUEFSQUxMRUwnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogKChlbGVtZW50LndpZHRoIC8gMiArIHBvc2l0aW9uLnBhcmFsbGVsKSAvIGVsZW1lbnQud2lkdGgpLFxuICAgICAgICAgIG15OiAoZWxlbWVudC5oZWlnaHQgLSAyMCkgLyBlbGVtZW50LmhlaWdodFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZHJhd01hcmtlcigncGFyYWxsZWwnLCBwYXJlbnRHZngsIG1hcmtlclBhdGgsIHtcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ1NlcXVlbnRpYWxNYXJrZXInOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIHBvc2l0aW9uKSB7XG4gICAgICB2YXIgbWFya2VyUGF0aCA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnTUFSS0VSX1NFUVVFTlRJQUwnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogKChlbGVtZW50LndpZHRoIC8gMiArIHBvc2l0aW9uLnNlcSkgLyBlbGVtZW50LndpZHRoKSxcbiAgICAgICAgICBteTogKGVsZW1lbnQuaGVpZ2h0IC0gMTkpIC8gZWxlbWVudC5oZWlnaHRcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRyYXdNYXJrZXIoJ3NlcXVlbnRpYWwnLCBwYXJlbnRHZngsIG1hcmtlclBhdGgsIHtcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ0NvbXBlbnNhdGlvbk1hcmtlcic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgcG9zaXRpb24pIHtcbiAgICAgIHZhciBtYXJrZXJNYXRoID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdNQVJLRVJfQ09NUEVOU0FUSU9OJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6ICgoZWxlbWVudC53aWR0aCAvIDIgKyBwb3NpdGlvbi5jb21wZW5zYXRpb24pIC8gZWxlbWVudC53aWR0aCksXG4gICAgICAgICAgbXk6IChlbGVtZW50LmhlaWdodCAtIDEzKSAvIGVsZW1lbnQuaGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkcmF3TWFya2VyKCdjb21wZW5zYXRpb24nLCBwYXJlbnRHZngsIG1hcmtlck1hdGgsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcbiAgICB9LFxuICAgICdMb29wTWFya2VyJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBwb3NpdGlvbikge1xuICAgICAgdmFyIG1hcmtlclBhdGggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ01BUktFUl9MT09QJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6ICgoZWxlbWVudC53aWR0aCAvIDIgKyBwb3NpdGlvbi5sb29wKSAvIGVsZW1lbnQud2lkdGgpLFxuICAgICAgICAgIG15OiAoZWxlbWVudC5oZWlnaHQgLSA3KSAvIGVsZW1lbnQuaGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkcmF3TWFya2VyKCdsb29wJywgcGFyZW50R2Z4LCBtYXJrZXJQYXRoLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSxcbiAgICAgICAgc3Ryb2tlTGluZWNhcDogJ3JvdW5kJyxcbiAgICAgICAgc3Ryb2tlTWl0ZXJsaW1pdDogMC41XG4gICAgICB9KTtcbiAgICB9LFxuICAgICdBZGhvY01hcmtlcic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgcG9zaXRpb24pIHtcbiAgICAgIHZhciBtYXJrZXJQYXRoID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdNQVJLRVJfQURIT0MnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogKChlbGVtZW50LndpZHRoIC8gMiArIHBvc2l0aW9uLmFkaG9jKSAvIGVsZW1lbnQud2lkdGgpLFxuICAgICAgICAgIG15OiAoZWxlbWVudC5oZWlnaHQgLSAxNSkgLyBlbGVtZW50LmhlaWdodFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZHJhd01hcmtlcignYWRob2MnLCBwYXJlbnRHZngsIG1hcmtlclBhdGgsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGF0dGFjaFRhc2tNYXJrZXJzKHBhcmVudEdmeCwgZWxlbWVudCwgdGFza01hcmtlcnMpIHtcbiAgICB2YXIgb2JqID0gZ2V0U2VtYW50aWMoZWxlbWVudCk7XG5cbiAgICB2YXIgc3VicHJvY2VzcyA9IHRhc2tNYXJrZXJzICYmIHRhc2tNYXJrZXJzLmluZGV4T2YoJ1N1YlByb2Nlc3NNYXJrZXInKSAhPT0gLTE7XG4gICAgdmFyIHBvc2l0aW9uO1xuXG4gICAgaWYgKHN1YnByb2Nlc3MpIHtcbiAgICAgIHBvc2l0aW9uID0ge1xuICAgICAgICBzZXE6IC0yMSxcbiAgICAgICAgcGFyYWxsZWw6IC0yMixcbiAgICAgICAgY29tcGVuc2F0aW9uOiAtNDIsXG4gICAgICAgIGxvb3A6IC0xOCxcbiAgICAgICAgYWRob2M6IDEwXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3NpdGlvbiA9IHtcbiAgICAgICAgc2VxOiAtMyxcbiAgICAgICAgcGFyYWxsZWw6IC02LFxuICAgICAgICBjb21wZW5zYXRpb246IC0yNyxcbiAgICAgICAgbG9vcDogMCxcbiAgICAgICAgYWRob2M6IDEwXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZvckVhY2godGFza01hcmtlcnMsIGZ1bmN0aW9uKG1hcmtlcikge1xuICAgICAgcmVuZGVyZXIobWFya2VyKShwYXJlbnRHZngsIGVsZW1lbnQsIHBvc2l0aW9uKTtcbiAgICB9KTtcblxuICAgIGlmIChvYmouaXNGb3JDb21wZW5zYXRpb24pIHtcbiAgICAgIHJlbmRlcmVyKCdDb21wZW5zYXRpb25NYXJrZXInKShwYXJlbnRHZngsIGVsZW1lbnQsIHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAob2JqLiR0eXBlID09PSAnYnBtbjpBZEhvY1N1YlByb2Nlc3MnKSB7XG4gICAgICByZW5kZXJlcignQWRob2NNYXJrZXInKShwYXJlbnRHZngsIGVsZW1lbnQsIHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICB2YXIgbG9vcENoYXJhY3RlcmlzdGljcyA9IG9iai5sb29wQ2hhcmFjdGVyaXN0aWNzLFxuICAgICAgICBpc1NlcXVlbnRpYWwgPSBsb29wQ2hhcmFjdGVyaXN0aWNzICYmIGxvb3BDaGFyYWN0ZXJpc3RpY3MuaXNTZXF1ZW50aWFsO1xuXG4gICAgaWYgKGxvb3BDaGFyYWN0ZXJpc3RpY3MpIHtcblxuICAgICAgaWYgKGlzU2VxdWVudGlhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlbmRlcmVyKCdMb29wTWFya2VyJykocGFyZW50R2Z4LCBlbGVtZW50LCBwb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1NlcXVlbnRpYWwgPT09IGZhbHNlKSB7XG4gICAgICAgIHJlbmRlcmVyKCdQYXJhbGxlbE1hcmtlcicpKHBhcmVudEdmeCwgZWxlbWVudCwgcG9zaXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNTZXF1ZW50aWFsID09PSB0cnVlKSB7XG4gICAgICAgIHJlbmRlcmVyKCdTZXF1ZW50aWFsTWFya2VyJykocGFyZW50R2Z4LCBlbGVtZW50LCBwb3NpdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyRGF0YUl0ZW1Db2xsZWN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuXG4gICAgdmFyIHlQb3NpdGlvbiA9IChlbGVtZW50LmhlaWdodCAtIDE2KSAvIGVsZW1lbnQuaGVpZ2h0O1xuXG4gICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdEQVRBX09CSkVDVF9DT0xMRUNUSU9OX1BBVEgnLCB7XG4gICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICBwb3NpdGlvbjoge1xuICAgICAgICBteDogMC40NTEsXG4gICAgICAgIG15OiB5UG9zaXRpb25cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qIGNvbGxlY3Rpb24gcGF0aCAqLyBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICBzdHJva2VXaWR0aDogMlxuICAgIH0pO1xuICB9XG5cblxuICAvLyBleHRlbnNpb24gQVBJLCB1c2UgYXQgeW91ciBvd24gcmlza1xuICB0aGlzLl9kcmF3UGF0aCA9IGRyYXdQYXRoO1xuXG59XG5cblxuaW5oZXJpdHMoQnBtblJlbmRlcmVyLCBCYXNlUmVuZGVyZXIpO1xuXG5CcG1uUmVuZGVyZXIuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5icG1uUmVuZGVyZXInLFxuICAnZXZlbnRCdXMnLFxuICAnc3R5bGVzJyxcbiAgJ3BhdGhNYXAnLFxuICAnY2FudmFzJyxcbiAgJ3RleHRSZW5kZXJlcidcbl07XG5cblxuQnBtblJlbmRlcmVyLnByb3RvdHlwZS5jYW5SZW5kZXIgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpCYXNlRWxlbWVudCcpO1xufTtcblxuQnBtblJlbmRlcmVyLnByb3RvdHlwZS5kcmF3U2hhcGUgPSBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG4gIHZhciBoID0gdGhpcy5oYW5kbGVyc1t0eXBlXTtcblxuICAvKiBqc2hpbnQgLVcwNDAgKi9cbiAgcmV0dXJuIGgocGFyZW50R2Z4LCBlbGVtZW50KTtcbn07XG5cbkJwbW5SZW5kZXJlci5wcm90b3R5cGUuZHJhd0Nvbm5lY3Rpb24gPSBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG4gIHZhciBoID0gdGhpcy5oYW5kbGVyc1t0eXBlXTtcblxuICAvKiBqc2hpbnQgLVcwNDAgKi9cbiAgcmV0dXJuIGgocGFyZW50R2Z4LCBlbGVtZW50KTtcbn07XG5cbkJwbW5SZW5kZXJlci5wcm90b3R5cGUuZ2V0U2hhcGVQYXRoID0gZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpFdmVudCcpKSB7XG4gICAgcmV0dXJuIGdldENpcmNsZVBhdGgoZWxlbWVudCk7XG4gIH1cblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46QWN0aXZpdHknKSkge1xuICAgIHJldHVybiBnZXRSb3VuZFJlY3RQYXRoKGVsZW1lbnQsIFRBU0tfQk9SREVSX1JBRElVUyk7XG4gIH1cblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46R2F0ZXdheScpKSB7XG4gICAgcmV0dXJuIGdldERpYW1vbmRQYXRoKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGdldFJlY3RQYXRoKGVsZW1lbnQpO1xufTtcbiIsIi8qKlxuICogTWFwIGNvbnRhaW5pbmcgU1ZHIHBhdGhzIG5lZWRlZCBieSBCcG1uUmVuZGVyZXIuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUGF0aE1hcCgpIHtcblxuICAvKipcbiAgICogQ29udGFpbnMgYSBtYXAgb2YgcGF0aCBlbGVtZW50c1xuICAgKlxuICAgKiA8aDE+UGF0aCBkZWZpbml0aW9uPC9oMT5cbiAgICogQSBwYXJhbWV0ZXJpemVkIHBhdGggaXMgZGVmaW5lZCBsaWtlIHRoaXM6XG4gICAqIDxwcmU+XG4gICAqICdHQVRFV0FZX1BBUkFMTEVMJzoge1xuICAgKiAgIGQ6ICdtIHtteH0se215fSB7ZS54MH0sMCAwLHtlLngxfSB7ZS54MX0sMCAwLHtlLnkwfSAte2UueDF9LDAgMCx7ZS55MX0gJyArXG4gICAgICAgICAgJy17ZS54MH0sMCAwLC17ZS55MX0gLXtlLngxfSwwIDAsLXtlLnkwfSB7ZS54MX0sMCB6JyxcbiAgICogICBoZWlnaHQ6IDE3LjUsXG4gICAqICAgd2lkdGg6ICAxNy41LFxuICAgKiAgIGhlaWdodEVsZW1lbnRzOiBbMi41LCA3LjVdLFxuICAgKiAgIHdpZHRoRWxlbWVudHM6IFsyLjUsIDcuNV1cbiAgICogfVxuICAgKiA8L3ByZT5cbiAgICogPHA+SXQncyBpbXBvcnRhbnQgdG8gc3BlY2lmeSBhIGNvcnJlY3QgPGI+aGVpZ2h0IGFuZCB3aWR0aDwvYj4gZm9yIHRoZSBwYXRoIGFzIHRoZSBzY2FsaW5nXG4gICAqIGlzIGJhc2VkIG9uIHRoZSByYXRpbyBiZXR3ZWVuIHRoZSBzcGVjaWZpZWQgaGVpZ2h0IGFuZCB3aWR0aCBpbiB0aGlzIG9iamVjdCBhbmQgdGhlXG4gICAqIGhlaWdodCBhbmQgd2lkdGggdGhhdCBpcyBzZXQgYXMgc2NhbGUgdGFyZ2V0IChOb3RlIHgseSBjb29yZGluYXRlcyB3aWxsIGJlIHNjYWxlZCB3aXRoXG4gICAqIGluZGl2aWR1YWwgcmF0aW9zKS48L3A+XG4gICAqIDxwPlRoZSAnPGI+aGVpZ2h0RWxlbWVudHM8L2I+JyBhbmQgJzxiPndpZHRoRWxlbWVudHM8L2I+JyBhcnJheSBtdXN0IGNvbnRhaW4gdGhlIHZhbHVlcyB0aGF0IHdpbGwgYmUgc2NhbGVkLlxuICAgKiBUaGUgc2NhbGluZyBpcyBiYXNlZCBvbiB0aGUgY29tcHV0ZWQgcmF0aW9zLlxuICAgKiBDb29yZGluYXRlcyBvbiB0aGUgeSBheGlzIHNob3VsZCBiZSBpbiB0aGUgPGI+aGVpZ2h0RWxlbWVudDwvYj4ncyBhcnJheSwgdGhleSB3aWxsIGJlIHNjYWxlZCB1c2luZ1xuICAgKiB0aGUgY29tcHV0ZWQgcmF0aW8gY29lZmZpY2llbnQuXG4gICAqIEluIHRoZSBwYXJhbWV0ZXJpemVkIHBhdGggdGhlIHNjYWxlZCB2YWx1ZXMgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlICdlJyBvYmplY3QgaW4ge30gYnJhY2tldHMuXG4gICAqICAgPHVsPlxuICAgKiAgICA8bGk+VGhlIHZhbHVlcyBmb3IgdGhlIHkgYXhpcyBjYW4gYmUgYWNjZXNzZWQgaW4gdGhlIHBhdGggc3RyaW5nIHVzaW5nIHtlLnkwfSwge2UueTF9LCAuLi4uPC9saT5cbiAgICogICAgPGxpPlRoZSB2YWx1ZXMgZm9yIHRoZSB4IGF4aXMgY2FuIGJlIGFjY2Vzc2VkIGluIHRoZSBwYXRoIHN0cmluZyB1c2luZyB7ZS54MH0sIHtlLngxfSwgLi4uLjwvbGk+XG4gICAqICAgPC91bD5cbiAgICogICBUaGUgbnVtYmVycyB4MCwgeDEgcmVzcGVjdGl2ZWx5IHkwLCB5MSwgLi4uIG1hcCB0byB0aGUgY29ycmVzcG9uZGluZyBhcnJheSBpbmRleC5cbiAgICogPC9wPlxuICAgKi9cbiAgdGhpcy5wYXRoTWFwID0ge1xuICAgICdFVkVOVF9NRVNTQUdFJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IGwgMCx7ZS55MX0gbCB7ZS54MX0sMCBsIDAsLXtlLnkxfSB6IGwge2UueDB9LHtlLnkwfSBsIHtlLngwfSwte2UueTB9JyxcbiAgICAgIGhlaWdodDogMzYsXG4gICAgICB3aWR0aDogIDM2LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFs2LCAxNF0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbMTAuNSwgMjFdXG4gICAgfSxcbiAgICAnRVZFTlRfU0lHTkFMJzoge1xuICAgICAgZDogJ00ge214fSx7bXl9IGwge2UueDB9LHtlLnkwfSBsIC17ZS54MX0sMCBaJyxcbiAgICAgIGhlaWdodDogMzYsXG4gICAgICB3aWR0aDogMzYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzE4XSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFsxMCwgMjBdXG4gICAgfSxcbiAgICAnRVZFTlRfRVNDQUxBVElPTic6IHtcbiAgICAgIGQ6ICdNIHtteH0se215fSBsIHtlLngwfSx7ZS55MH0gbCAte2UueDB9LC17ZS55MX0gbCAte2UueDB9LHtlLnkxfSBaJyxcbiAgICAgIGhlaWdodDogMzYsXG4gICAgICB3aWR0aDogMzYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzIwLCA3XSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFs4XVxuICAgIH0sXG4gICAgJ0VWRU5UX0NPTkRJVElPTkFMJzoge1xuICAgICAgZDogJ00ge2UueDB9LHtlLnkwfSBsIHtlLngxfSwwIGwgMCx7ZS55Mn0gbCAte2UueDF9LDAgWiAnICtcbiAgICAgICAgICdNIHtlLngyfSx7ZS55M30gbCB7ZS54MH0sMCAnICtcbiAgICAgICAgICdNIHtlLngyfSx7ZS55NH0gbCB7ZS54MH0sMCAnICtcbiAgICAgICAgICdNIHtlLngyfSx7ZS55NX0gbCB7ZS54MH0sMCAnICtcbiAgICAgICAgICdNIHtlLngyfSx7ZS55Nn0gbCB7ZS54MH0sMCAnICtcbiAgICAgICAgICdNIHtlLngyfSx7ZS55N30gbCB7ZS54MH0sMCAnICtcbiAgICAgICAgICdNIHtlLngyfSx7ZS55OH0gbCB7ZS54MH0sMCAnLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAgMzYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzguNSwgMTQuNSwgMTgsIDExLjUsIDE0LjUsIDE3LjUsIDIwLjUsIDIzLjUsIDI2LjVdLFxuICAgICAgd2lkdGhFbGVtZW50czogIFsxMC41LCAxNC41LCAxMi41XVxuICAgIH0sXG4gICAgJ0VWRU5UX0xJTksnOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gMCx7ZS55MH0gLXtlLngxfSwwIDAse2UueTF9IHtlLngxfSwwIDAse2UueTB9IHtlLngwfSwte2UueTJ9IC17ZS54MH0sLXtlLnkyfSB6JyxcbiAgICAgIGhlaWdodDogMzYsXG4gICAgICB3aWR0aDogMzYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzQuNDM3NSwgNi43NSwgNy44MTI1XSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFs5Ljg0Mzc1LCAxMy41XVxuICAgIH0sXG4gICAgJ0VWRU5UX0VSUk9SJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IHtlLngwfSwte2UueTB9IHtlLngxfSwte2UueTF9IHtlLngyfSx7ZS55Mn0ge2UueDN9LC17ZS55M30gLXtlLng0fSx7ZS55NH0gLXtlLng1fSwte2UueTV9IHonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbMC4wMjMsIDguNzM3LCA4LjE1MSwgMTYuNTY0LCAxMC41OTEsIDguNzE0XSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFswLjA4NSwgNi42NzIsIDYuOTcsIDQuMjczLCA1LjMzNywgNi42MzZdXG4gICAgfSxcbiAgICAnRVZFTlRfQ0FOQ0VMXzQ1Jzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IC17ZS54MX0sMCAwLHtlLngwfSB7ZS54MX0sMCAwLHtlLnkxfSB7ZS54MH0sMCAnICtcbiAgICAgICAgJzAsLXtlLnkxfSB7ZS54MX0sMCAwLC17ZS55MH0gLXtlLngxfSwwIDAsLXtlLnkxfSAte2UueDB9LDAgeicsXG4gICAgICBoZWlnaHQ6IDM2LFxuICAgICAgd2lkdGg6IDM2LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFs0Ljc1LCA4LjVdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzQuNzUsIDguNV1cbiAgICB9LFxuICAgICdFVkVOVF9DT01QRU5TQVRJT04nOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0ge2UueDB9LC17ZS55MH0gMCx7ZS55MX0geiBtIHtlLngxfSwte2UueTJ9IHtlLngyfSwte2UueTN9IDAse2UueTF9IC17ZS54Mn0sLXtlLnkzfSB6JyxcbiAgICAgIGhlaWdodDogMzYsXG4gICAgICB3aWR0aDogMzYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzYuNSwgMTMsIDAuNCwgNi4xXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFs5LCA5LjMsIDguN11cbiAgICB9LFxuICAgICdFVkVOVF9USU1FUl9XSCc6IHtcbiAgICAgIGQ6ICdNIHtteH0se215fSBsIHtlLngwfSwte2UueTB9IG0gLXtlLngwfSx7ZS55MH0gbCB7ZS54MX0se2UueTF9ICcsXG4gICAgICBoZWlnaHQ6IDM2LFxuICAgICAgd2lkdGg6ICAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbMTAsIDJdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzMsIDddXG4gICAgfSxcbiAgICAnRVZFTlRfVElNRVJfTElORSc6IHtcbiAgICAgIGQ6ICAnTSB7bXh9LHtteX0gJyArXG4gICAgICAgICAgJ20ge2UueDB9LHtlLnkwfSBsIC17ZS54MX0se2UueTF9ICcsXG4gICAgICBoZWlnaHQ6IDM2LFxuICAgICAgd2lkdGg6ICAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbMTAsIDNdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzAsIDBdXG4gICAgfSxcbiAgICAnRVZFTlRfTVVMVElQTEUnOiB7XG4gICAgICBkOidtIHtteH0se215fSB7ZS54MX0sLXtlLnkwfSB7ZS54MX0se2UueTB9IC17ZS54MH0se2UueTF9IC17ZS54Mn0sMCB6JyxcbiAgICAgIGhlaWdodDogMzYsXG4gICAgICB3aWR0aDogIDM2LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFs2LjI4MDk5LCAxMi41NjE5OV0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbMy4xNDA1LCA5LjQyMTQ5LCAxMi41NjE5OF1cbiAgICB9LFxuICAgICdFVkVOVF9QQVJBTExFTF9NVUxUSVBMRSc6IHtcbiAgICAgIGQ6J20ge214fSx7bXl9IHtlLngwfSwwIDAse2UueTF9IHtlLngxfSwwIDAse2UueTB9IC17ZS54MX0sMCAwLHtlLnkxfSAnICtcbiAgICAgICAgJy17ZS54MH0sMCAwLC17ZS55MX0gLXtlLngxfSwwIDAsLXtlLnkwfSB7ZS54MX0sMCB6JyxcbiAgICAgIGhlaWdodDogMzYsXG4gICAgICB3aWR0aDogIDM2LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFsyLjU2MjI4LCA3LjY4NjgzXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFsyLjU2MjI4LCA3LjY4NjgzXVxuICAgIH0sXG4gICAgJ0dBVEVXQVlfRVhDTFVTSVZFJzoge1xuICAgICAgZDonbSB7bXh9LHtteX0ge2UueDB9LHtlLnkwfSB7ZS54MX0se2UueTB9IHtlLngyfSwwIHtlLng0fSx7ZS55Mn0gJyArXG4gICAgICAgICAgICAgICAgICAgICd7ZS54NH0se2UueTF9IHtlLngyfSwwIHtlLngxfSx7ZS55M30ge2UueDB9LHtlLnkzfSAnICtcbiAgICAgICAgICAgICAgICAgICAgJ3tlLngzfSwwIHtlLng1fSx7ZS55MX0ge2UueDV9LHtlLnkyfSB7ZS54M30sMCB6JyxcbiAgICAgIGhlaWdodDogMTcuNSxcbiAgICAgIHdpZHRoOiAgMTcuNSxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbOC41LCA2LjUzMTIsIC02LjUzMTIsIC04LjVdLFxuICAgICAgd2lkdGhFbGVtZW50czogIFs2LjUsIC02LjUsIDMsIC0zLCA1LCAtNV1cbiAgICB9LFxuICAgICdHQVRFV0FZX1BBUkFMTEVMJzoge1xuICAgICAgZDonbSB7bXh9LHtteX0gMCx7ZS55MX0gLXtlLngxfSwwIDAse2UueTB9IHtlLngxfSwwIDAse2UueTF9IHtlLngwfSwwICcgK1xuICAgICAgICAnMCwte2UueTF9IHtlLngxfSwwIDAsLXtlLnkwfSAte2UueDF9LDAgMCwte2UueTF9IC17ZS54MH0sMCB6JyxcbiAgICAgIGhlaWdodDogMzAsXG4gICAgICB3aWR0aDogIDMwLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFs1LCAxMi41XSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFs1LCAxMi41XVxuICAgIH0sXG4gICAgJ0dBVEVXQVlfRVZFTlRfQkFTRUQnOiB7XG4gICAgICBkOidtIHtteH0se215fSB7ZS54MH0se2UueTB9IHtlLngwfSx7ZS55MX0ge2UueDF9LHtlLnkyfSB7ZS54Mn0sMCB6JyxcbiAgICAgIGhlaWdodDogMTEsXG4gICAgICB3aWR0aDogIDExLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFstNiwgNiwgMTIsIC0xMl0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbOSwgLTMsIC0xMl1cbiAgICB9LFxuICAgICdHQVRFV0FZX0NPTVBMRVgnOiB7XG4gICAgICBkOidtIHtteH0se215fSAwLHtlLnkwfSAte2UueDB9LC17ZS55MX0gLXtlLngxfSx7ZS55Mn0ge2UueDB9LHtlLnkxfSAte2UueDJ9LDAgMCx7ZS55M30gJyArXG4gICAgICAgICd7ZS54Mn0sMCAgLXtlLngwfSx7ZS55MX0gbCB7ZS54MX0se2UueTJ9IHtlLngwfSwte2UueTF9IDAse2UueTB9IHtlLngzfSwwIDAsLXtlLnkwfSB7ZS54MH0se2UueTF9ICcgK1xuICAgICAgICAne2UueDF9LC17ZS55Mn0gLXtlLngwfSwte2UueTF9IHtlLngyfSwwIDAsLXtlLnkzfSAte2UueDJ9LDAge2UueDB9LC17ZS55MX0gLXtlLngxfSwte2UueTJ9ICcgK1xuICAgICAgICAnLXtlLngwfSx7ZS55MX0gMCwte2UueTB9IC17ZS54M30sMCB6JyxcbiAgICAgIGhlaWdodDogMTcuMTI1LFxuICAgICAgd2lkdGg6ICAxNy4xMjUsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzQuODc1LCAzLjQzNzUsIDIuMTI1LCAzXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFszLjQzNzUsIDIuMTI1LCA0Ljg3NSwgM11cbiAgICB9LFxuICAgICdEQVRBX09CSkVDVF9QQVRIJzoge1xuICAgICAgZDonbSAwLDAge2UueDF9LDAge2UueDB9LHtlLnkwfSAwLHtlLnkxfSAte2UueDJ9LDAgMCwte2UueTJ9IHtlLngxfSwwIDAse2UueTB9IHtlLngwfSwwJyxcbiAgICAgIGhlaWdodDogNjEsXG4gICAgICB3aWR0aDogIDUxLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFsxMCwgNTAsIDYwXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFsxMCwgNDAsIDUwLCA2MF1cbiAgICB9LFxuICAgICdEQVRBX09CSkVDVF9DT0xMRUNUSU9OX1BBVEgnOiB7XG4gICAgICBkOidtIHtteH0sIHtteX0gJyArXG4gICAgICAgICdtICAwIDE1ICBsIDAgLTE1ICcgK1xuICAgICAgICAnbSAgNCAxNSAgbCAwIC0xNSAnICtcbiAgICAgICAgJ20gIDQgMTUgIGwgMCAtMTUgJyxcbiAgICAgIGhlaWdodDogNjEsXG4gICAgICB3aWR0aDogIDUxLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFsxMl0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbMSwgNiwgMTIsIDE1XVxuICAgIH0sXG4gICAgJ0RBVEFfQVJST1cnOiB7XG4gICAgICBkOidtIDUsOSA5LDAgMCwtMyA1LDUgLTUsNSAwLC0zIC05LDAgeicsXG4gICAgICBoZWlnaHQ6IDYxLFxuICAgICAgd2lkdGg6ICA1MSxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFtdXG4gICAgfSxcbiAgICAnREFUQV9TVE9SRSc6IHtcbiAgICAgIGQ6J20gIHtteH0se215fSAnICtcbiAgICAgICAgJ2wgIDAse2UueTJ9ICcgK1xuICAgICAgICAnYyAge2UueDB9LHtlLnkxfSB7ZS54MX0se2UueTF9ICB7ZS54Mn0sMCAnICtcbiAgICAgICAgJ2wgIDAsLXtlLnkyfSAnICtcbiAgICAgICAgJ2MgLXtlLngwfSwte2UueTF9IC17ZS54MX0sLXtlLnkxfSAte2UueDJ9LDAnICtcbiAgICAgICAgJ2MgIHtlLngwfSx7ZS55MX0ge2UueDF9LHtlLnkxfSAge2UueDJ9LDAgJyArXG4gICAgICAgICdtICAte2UueDJ9LHtlLnkwfScgK1xuICAgICAgICAnYyAge2UueDB9LHtlLnkxfSB7ZS54MX0se2UueTF9IHtlLngyfSwwJyArXG4gICAgICAgICdtICAte2UueDJ9LHtlLnkwfScgK1xuICAgICAgICAnYyAge2UueDB9LHtlLnkxfSB7ZS54MX0se2UueTF9ICB7ZS54Mn0sMCcsXG4gICAgICBoZWlnaHQ6IDYxLFxuICAgICAgd2lkdGg6ICA2MSxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbNywgMTAsIDQ1XSxcbiAgICAgIHdpZHRoRWxlbWVudHM6ICBbMiwgNTgsIDYwXVxuICAgIH0sXG4gICAgJ1RFWFRfQU5OT1RBVElPTic6IHtcbiAgICAgIGQ6ICdtIHtteH0sIHtteX0gbSAxMCwwIGwgLTEwLDAgbCAwLHtlLnkwfSBsIDEwLDAnLFxuICAgICAgaGVpZ2h0OiAzMCxcbiAgICAgIHdpZHRoOiAxMCxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbMzBdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzEwXVxuICAgIH0sXG4gICAgJ01BUktFUl9TVUJfUFJPQ0VTUyc6IHtcbiAgICAgIGQ6ICdte214fSx7bXl9IG0gNywyIGwgMCwxMCBtIC01LC01IGwgMTAsMCcsXG4gICAgICBoZWlnaHQ6IDEwLFxuICAgICAgd2lkdGg6IDEwLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFtdLFxuICAgICAgd2lkdGhFbGVtZW50czogW11cbiAgICB9LFxuICAgICdNQVJLRVJfUEFSQUxMRUwnOiB7XG4gICAgICBkOiAnbXtteH0se215fSBtIDMsMiBsIDAsMTAgbSAzLC0xMCBsIDAsMTAgbSAzLC0xMCBsIDAsMTAnLFxuICAgICAgaGVpZ2h0OiAxMCxcbiAgICAgIHdpZHRoOiAxMCxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFtdXG4gICAgfSxcbiAgICAnTUFSS0VSX1NFUVVFTlRJQUwnOiB7XG4gICAgICBkOiAnbXtteH0se215fSBtIDAsMyBsIDEwLDAgbSAtMTAsMyBsIDEwLDAgbSAtMTAsMyBsIDEwLDAnLFxuICAgICAgaGVpZ2h0OiAxMCxcbiAgICAgIHdpZHRoOiAxMCxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFtdXG4gICAgfSxcbiAgICAnTUFSS0VSX0NPTVBFTlNBVElPTic6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSA3LC01IDAsMTAgeiBtIDcuMSwtMC4zIDYuOSwtNC43IDAsMTAgLTYuOSwtNC43IHonLFxuICAgICAgaGVpZ2h0OiAxMCxcbiAgICAgIHdpZHRoOiAyMSxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFtdXG4gICAgfSxcbiAgICAnTUFSS0VSX0xPT1AnOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gYyAzLjUyNjk3OSwwIDYuMzg2MTYxLC0yLjgyOTg1OCA2LjM4NjE2MSwtNi4zMjA2NjEgMCwtMy40OTA4MDYgLTIuODU5MTgyLC02LjMyMDY2MSAnICtcbiAgICAgICAgJy02LjM4NjE2MSwtNi4zMjA2NjEgLTMuNTI2OTc4LDAgLTYuMzg2MTYsMi44Mjk4NTUgLTYuMzg2MTYsNi4zMjA2NjEgMCwxLjc0NTQwMiAnICtcbiAgICAgICAgJzAuNzE0Nzk3LDMuMzI1NTY3IDEuODcwNDYzLDQuNDY5MzgxIDAuNTc3ODM0LDAuNTcxOTA4IDEuMjY1ODg1LDEuMDM0NzI4IDIuMDI5OTE2LDEuMzU0NTcgJyArXG4gICAgICAgICdsIC0wLjcxODE2MywtMy45MDk3OTMgbSAwLjcxODE2MywzLjkwOTc5MyAtMy44ODUyMTEsMC44MDI5MDInLFxuICAgICAgaGVpZ2h0OiAxMy45LFxuICAgICAgd2lkdGg6IDEzLjcsXG4gICAgICBoZWlnaHRFbGVtZW50czogW10sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbXVxuICAgIH0sXG4gICAgJ01BUktFUl9BREhPQyc6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBtIDAuODQ0NjEsMi42NDQxMSBjIDEuMDU1MzMsLTEuMjM3ODA5OTYgMi42NDMzNywtMi4wNzg4MiA0LjI5NjUzLC0xLjk3OTk3OTk2IDIuMDUxNjMsMC4wODA1ICcgK1xuICAgICAgICAnMy44NTU3OSwxLjE1ODAzIDUuNzYwODIsMS43OTEwNyAxLjA2Mzg1LDAuMzQxMzk5OTYgMi4yNDQ1NCwwLjE0MzggMy4xODc1OSwtMC40Mzc2NyAwLjYxNzQzLC0wLjMzNjQyICcgK1xuICAgICAgICAnMS4yNzc1LC0wLjY0MDc4IDEuNzU0MiwtMS4xNzUxMSAwLDAuNTYwMjMgMCwxLjEyMDQ2IDAsMS42ODA3IC0wLjk4NzA2LDAuOTYyMzc5OTYgLTIuMjk3OTIsMS42MjM5Mzk5NiAnICtcbiAgICAgICAgJy0zLjY5MTgsMS42NjE4MTk5NiAtMS4yNDQ1OSwwLjA5MjcgLTIuNDY2NzEsLTAuMjQ5MSAtMy41OTUwNSwtMC43NDgxMiAtMS4zNTc4OSwtMC41NTk2NSAnICtcbiAgICAgICAgJy0yLjc1MTMzLC0xLjMzNDM2OTk2IC00LjI3MDI3LC0xLjE4MTIxOTk2IC0xLjM3NzQxLDAuMTQ2MDEgLTIuNDE4NDIsMS4xMzY4NTk5NiAtMy40NDI4OCwxLjk2NzgyOTk2IHonLFxuICAgICAgaGVpZ2h0OiA0LFxuICAgICAgd2lkdGg6IDE1LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFtdLFxuICAgICAgd2lkdGhFbGVtZW50czogW11cbiAgICB9LFxuICAgICdUQVNLX1RZUEVfU0VORCc6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBsIDAse2UueTF9IGwge2UueDF9LDAgbCAwLC17ZS55MX0geiBsIHtlLngwfSx7ZS55MH0gbCB7ZS54MH0sLXtlLnkwfScsXG4gICAgICBoZWlnaHQ6IDE0LFxuICAgICAgd2lkdGg6ICAyMSxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbNiwgMTRdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzEwLjUsIDIxXVxuICAgIH0sXG4gICAgJ1RBU0tfVFlQRV9TQ1JJUFQnOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gYyA5Ljk2NjU1MywtNi4yNzI3NiAtOC4wMDA5MjYsLTcuOTE5MzIgMi45Njg5NjgsLTE0LjkzOCBsIC04LjgwMjcyOCwwICcgK1xuICAgICAgICAnYyAtMTAuOTY5ODk0LDcuMDE4NjggNi45OTc1ODUsOC42NjUyNCAtMi45Njg5NjcsMTQuOTM4IHogJyArXG4gICAgICAgICdtIC03LC0xMiBsIDUsMCAnICtcbiAgICAgICAgJ20gLTQuNSwzIGwgNC41LDAgJyArXG4gICAgICAgICdtIC0zLDMgbCA1LDAnICtcbiAgICAgICAgJ20gLTQsMyBsIDUsMCcsXG4gICAgICBoZWlnaHQ6IDE1LFxuICAgICAgd2lkdGg6ICAxMi42LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFs2LCAxNF0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbMTAuNSwgMjFdXG4gICAgfSxcbiAgICAnVEFTS19UWVBFX1VTRVJfMSc6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBjIDAuOTA5LC0wLjg0NSAxLjU5NCwtMi4wNDkgMS41OTQsLTMuMzg1IDAsLTIuNTU0IC0xLjgwNSwtNC42MjE5OTk5OSAnICtcbiAgICAgICAgJy00LjM1NywtNC42MjE5OTk5OSAtMi41NTE5OTk5OCwwIC00LjI4Nzk5OTk4LDIuMDY3OTk5OTkgLTQuMjg3OTk5OTgsNC42MjE5OTk5OSAwLDEuMzQ4ICcgK1xuICAgICAgICAnMC45NzQsMi41NjIgMS44OTU5OTk5OCwzLjQwNSAtMC41Mjg5OTk5OCwwLjE4NyAtNS42NjksMi4wOTcgLTUuNzk0LDQuNzU2MDAwNSB2IDYuNzE4ICcgK1xuICAgICAgICAnaCAxNyB2IC02LjcxOCBjIDAsLTIuMjk4MDAwNSAtNS41Mjc5OTk2LC00LjU5NTAwMDUgLTYuMDUwOTk5NiwtNC43NzYwMDA1IHonICtcbiAgICAgICAgJ20gLTgsNiBsIDAsNS41IG0gMTEsMCBsIDAsLTUnXG4gICAgfSxcbiAgICAnVEFTS19UWVBFX1VTRVJfMic6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBtIDIuMTYyLDEuMDA5IGMgMCwyLjQ0NzAwMDUgLTIuMTU4LDQuNDMxMDAwNSAtNC44MjEsNC40MzEwMDA1ICcgK1xuICAgICAgICAnLTIuNjY0OTk5OTgsMCAtNC44MjIsLTEuOTgxIC00LjgyMiwtNC40MzEwMDA1ICdcbiAgICB9LFxuICAgICdUQVNLX1RZUEVfVVNFUl8zJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IG0gLTYuOSwtMy44MCBjIDAsMCAyLjI1MDk5OTk4LC0yLjM1OCA0LjI3Mzk5OTk4LC0xLjE3NyAyLjAyNCwxLjE4MSA0LjIyMSwxLjUzNyAnICtcbiAgICAgICAgJzQuMTI0LDAuOTY1IC0wLjA5OCwtMC41NyAtMC4xMTcsLTMuNzkwOTk5OTkgLTQuMTkxLC00LjEzNTk5OTk5IC0zLjU3NDk5OTk4LDAuMDAxICcgK1xuICAgICAgICAnLTQuMjA3OTk5OTgsMy4zNjY5OTk5OSAtNC4yMDY5OTk5OCw0LjM0Nzk5OTk5IHonXG4gICAgfSxcbiAgICAnVEFTS19UWVBFX01BTlVBTCc6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBjIDAuMjM0LC0wLjAxIDUuNjA0LDAuMDA4IDguMDI5LDAuMDA0IDAuODA4LDAgMS4yNzEsLTAuMTcyIDEuNDE3LC0wLjc1MiAwLjIyNywtMC44OTggJyArXG4gICAgICAgICctMC4zMzQsLTEuMzE0IC0xLjMzOCwtMS4zMTYgLTIuNDY3LC0wLjAxIC03Ljg4NiwtMC4wMDQgLTguMTA4LC0wLjAwNCAtMC4wMTQsLTAuMDc5IDAuMDE2LC0wLjUzMyAwLC0wLjYxICcgK1xuICAgICAgICAnMC4xOTUsLTAuMDQyIDguNTA3LDAuMDA2IDkuNjE2LDAuMDAyIDAuODc3LC0wLjAwNyAxLjM1LC0wLjQzOCAxLjM1MywtMS4yMDggMC4wMDMsLTAuNzY4IC0wLjQ3OSwtMS4wOSAnICtcbiAgICAgICAgJy0xLjM1LC0xLjA5MSAtMi45NjgsLTAuMDAyIC05LjYxOSwtMC4wMTMgLTkuNjE5LC0wLjAxMyB2IC0wLjU5MSBjIDAsMCA1LjA1MiwtMC4wMTYgNy4yMjUsLTAuMDE2ICcgK1xuICAgICAgICAnMC44ODgsLTAuMDAyIDEuMzU0LC0wLjQxNiAxLjM1MSwtMS4xOTMgLTAuMDA2LC0wLjc2MSAtMC40OTIsLTEuMTk2IC0xLjM2MSwtMS4xOTYgLTMuNDczLC0wLjAwNSAnICtcbiAgICAgICAgJy0xMC44NiwtMC4wMDMgLTExLjA4Mjk5OTUsLTAuMDAzIC0wLjAyMiwtMC4wNDcgLTAuMDQ1LC0wLjA5NCAtMC4wNjksLTAuMTM5IDAuMzkzOTk5NSwtMC4zMTkgJyArXG4gICAgICAgICcyLjA0MDk5OTUsLTEuNjI2IDIuNDE0OTk5NSwtMi4wMTcgMC40NjksLTAuNDg3MDAwNSAwLjUxOSwtMS4xNjUwMDA1IDAuMTYyLC0xLjYwNDAwMDUgLTAuNDE0LC0wLjUxMSAnICtcbiAgICAgICAgJy0wLjk3MywtMC41IC0xLjQ4LC0wLjIzNiAtMS40NjA5OTk1LDAuNzY0IC02LjU5OTk5OTUsMy42NDMwMDA1IC03LjczMjk5OTUsNC4yNzEwMDA1IC0wLjksMC40OTkgJyArXG4gICAgICAgICctMS41MTYsMS4yNTMgLTEuODgyLDIuMTkgLTAuMzcwMDAwMDIsMC45NSAtMC4xNywyLjAxIC0wLjE2NiwyLjk3OSAwLjAwNCwwLjcxOCAtMC4yNzMwMDAwMiwxLjM0NSAnICtcbiAgICAgICAgJy0wLjA1NSwyLjA2MyAwLjYyOSwyLjA4NyAyLjQyNSwzLjMxMiA0Ljg1OSwzLjMxOCA0LjYxNzk5OTUsMC4wMTQgOS4yMzc5OTk1LC0wLjEzOSAxMy44NTY5OTk1LC0wLjE1OCAnICtcbiAgICAgICAgJzAuNzU1LC0wLjAwNCAxLjE3MSwtMC4zMDEgMS4xODIsLTEuMDMzIDAuMDEyLC0wLjc1NCAtMC40MjMsLTAuOTY5IC0xLjE4MywtMC45NzMgLTEuNzc4LC0wLjAxICcgK1xuICAgICAgICAnLTUuODI0LC0wLjAwNCAtNi4wNCwtMC4wMDQgMTBlLTQsLTAuMDg0IDAuMDAzLC0wLjU4NiAxMGUtNCwtMC42NyB6J1xuICAgIH0sXG4gICAgJ1RBU0tfVFlQRV9JTlNUQU5USUFUSU5HX1NFTkQnOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gbCAwLDguNCBsIDEyLjYsMCBsIDAsLTguNCB6IGwgNi4zLDMuNiBsIDYuMywtMy42J1xuICAgIH0sXG4gICAgJ1RBU0tfVFlQRV9TRVJWSUNFJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IHYgLTEuNzEzMzUgYyAwLjM1MjMyNiwtMC4wNzA1IDAuNzAzOTMyLC0wLjE3ODM4IDEuMDQ3NjI4LC0wLjMyMTMzICcgK1xuICAgICAgICAnMC4zNDQ0MTYsLTAuMTQ0NjUgMC42NjU4MjIsLTAuMzIxMzMgMC45NjYzNzcsLTAuNTIxNDUgbCAxLjE5NDMxLDEuMTgwMDUgMS41Njc0ODcsLTEuNTc2ODggJyArXG4gICAgICAgICctMS4xOTUwMjgsLTEuMTgwMTQgYyAwLjQwMzM3NiwtMC42MTM5NCAwLjY4MzA3OSwtMS4yOTkwOCAwLjgyNTQ0NywtMi4wMTgyNCBsIDEuNjIyMTMzLC0wLjAxICcgK1xuICAgICAgICAndiAtMi4yMTk2IGwgLTEuNjM2NTE0LDAuMDEgYyAtMC4wNzMzMywtMC4zNTE1MyAtMC4xNzgzMTksLTAuNzAwMjQgLTAuMzIzNTY0LC0xLjA0MzcyICcgK1xuICAgICAgICAnLTAuMTQ1MjQ0LC0wLjM0NDA2IC0wLjMyMTQwNywtMC42NjQ0IC0wLjUyMjczNSwtMC45NjIxNyBsIDEuMTMxMDM1LC0xLjEzNjMxIC0xLjU4MzMwNSwtMS41NjI5MyAnICtcbiAgICAgICAgJy0xLjEyOTU5OCwxLjEzNTg5IGMgLTAuNjE0MDUyLC0wLjQwMTA4IC0xLjMwMjg4MywtMC42ODA5MyAtMi4wMjI2MzMsLTAuODIyNDcgbCAwLjAwOTMsLTEuNjE4NTIgJyArXG4gICAgICAgICdoIC0yLjI0MTE3MyBsIDAuMDA0MiwxLjYzMTI0IGMgLTAuMzUzNzYzLDAuMDczNiAtMC43MDUzNjksMC4xNzk3NyAtMS4wNDk3ODUsMC4zMjM3MSAtMC4zNDQ0MTUsMC4xNDQzNyAnICtcbiAgICAgICAgJy0wLjY2NTEwMiwwLjMyMDkyIC0wLjk2MzUwMDYsMC41MjA0NiBsIC0xLjE2OTg2MjgsLTEuMTU4MjMgLTEuNTY2NzY5MSwxLjU3OTIgMS4xNjg0MjY1LDEuMTU2NjkgJyArXG4gICAgICAgICdjIC0wLjQwMjY1NzMsMC42MTI4MyAtMC42ODMwOCwxLjI5Nzk3IC0wLjgyNDcyODcsMi4wMTcxMyBsIC0xLjY1ODgwNDEsMC4wMDMgdiAyLjIyMTc0ICcgK1xuICAgICAgICAnbCAxLjY3MjQ2NDgsLTAuMDA2IGMgMC4wNzMzMjcsMC4zNTA3NyAwLjE3OTc1OTgsMC43MDI0MyAwLjMyNDI4NTEsMS4wNDQ3MiAwLjE0NTI0MjgsMC4zNDQ0OCAnICtcbiAgICAgICAgJzAuMzIxNDA2NCwwLjY2NDQgMC41MjI3MzM5LDAuOTYwNjYgbCAtMS4xOTkzNDMxLDEuMTk3MjMgMS41ODQwMjU2LDEuNTYwMTEgMS4xOTY0NjY4LC0xLjE5MzQ4ICcgK1xuICAgICAgICAnYyAwLjYxNDA1MTcsMC40MDM0NiAxLjMwMjg4MjcsMC42ODIzMiAyLjAyMzM1MTcsMC44MjMzMSBsIDcuMTllLTQsMS42OTg5MiBoIDIuMjI2ODQ4IHogJyArXG4gICAgICAgICdtIDAuMjIxNDYyLC0zLjk5NTcgYyAtMS43ODg5NDgsMC43NTAyIC0zLjg1NzYsLTAuMDkyOCAtNC42MDk3MDU1LC0xLjg3NDM4IC0wLjc1MjEwNjUsLTEuNzgzMjEgJyArXG4gICAgICAgICcwLjA5MDU5OCwtMy44NDYyNyAxLjg4MDI2NDUsLTQuNTk2MDQgMS43ODgyMywtMC43NDkzNiAzLjg1Njg4MSwwLjA5MjkgNC42MDg5ODcsMS44NzQzNyAnICtcbiAgICAgICAgJzAuNzUyMTA2LDEuNzgxNjUgLTAuMDkwNiwzLjg0NjEyIC0xLjg3OTU0Niw0LjU5NjA1IHonXG4gICAgfSxcbiAgICAnVEFTS19UWVBFX1NFUlZJQ0VfRklMTCc6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBjIC0xLjc4ODk0OCwwLjc1MDIgLTMuODU3NiwtMC4wOTI4IC00LjYwOTcwNTUsLTEuODc0MzggLTAuNzUyMTA2NSwtMS43ODMyMSAnICtcbiAgICAgICAgJzAuMDkwNTk4LC0zLjg0NjI3IDEuODgwMjY0NSwtNC41OTYwNCAxLjc4ODIzLC0wLjc0OTM2IDMuODU2ODgxLDAuMDkyOSA0LjYwODk4NywxLjg3NDM3ICcgK1xuICAgICAgICAnMC43NTIxMDYsMS43ODE2NSAtMC4wOTA2LDMuODQ2MTIgLTEuODc5NTQ2LDQuNTk2MDUgeidcbiAgICB9LFxuICAgICdUQVNLX1RZUEVfQlVTSU5FU1NfUlVMRV9IRUFERVInOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gMCw0IDIwLDAgMCwtNCB6J1xuICAgIH0sXG4gICAgJ1RBU0tfVFlQRV9CVVNJTkVTU19SVUxFX01BSU4nOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gMCwxMiAyMCwwIDAsLTEyIHonICtcbiAgICAgICAgJ20gMCw4IGwgMjAsMCAnICtcbiAgICAgICAgJ20gLTEzLC00IGwgMCw4J1xuICAgIH0sXG4gICAgJ01FU1NBR0VfRkxPV19NQVJLRVInOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gbSAtMTAuNSAsLTcgbCAwLDE0IGwgMjEsMCBsIDAsLTE0IHogbCAxMC41LDYgbCAxMC41LC02J1xuICAgIH1cbiAgfTtcblxuICB0aGlzLmdldFJhd1BhdGggPSBmdW5jdGlvbiBnZXRSYXdQYXRoKHBhdGhJZCkge1xuICAgIHJldHVybiB0aGlzLnBhdGhNYXBbcGF0aElkXS5kO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTY2FsZXMgdGhlIHBhdGggdG8gdGhlIGdpdmVuIGhlaWdodCBhbmQgd2lkdGguXG4gICAqIDxoMT5Vc2UgY2FzZTwvaDE+XG4gICAqIDxwPlVzZSBjYXNlIGlzIHRvIHNjYWxlIHRoZSBjb250ZW50IG9mIGVsZW1lbnRzIChldmVudCwgZ2F0ZXdheXMpIGJhc2VkXG4gICAqIG9uIHRoZSBlbGVtZW50IGJvdW5kaW5nIGJveCdzIHNpemUuXG4gICAqIDwvcD5cbiAgICogPGgxPldoeSBub3QgdHJhbnNmb3JtPC9oMT5cbiAgICogPHA+U2NhbGluZyBhIHBhdGggd2l0aCB0cmFuc2Zvcm0oKSB3aWxsIGFsc28gc2NhbGUgdGhlIHN0cm9rZSBhbmQgSUUgZG9lcyBub3Qgc3VwcG9ydFxuICAgKiB0aGUgb3B0aW9uICdub24tc2NhbGluZy1zdHJva2UnIHRvIHByZXZlbnQgdGhpcy5cbiAgICogQWxzbyB0aGVyZSBhcmUgdXNlIGNhc2VzIHdoZXJlIG9ubHkgc29tZSBwYXJ0cyBvZiBhIHBhdGggc2hvdWxkIGJlXG4gICAqIHNjYWxlZC48L3A+XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoSWQgVGhlIElEIG9mIHRoZSBwYXRoLlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW0gPHA+XG4gICAqICAgRXhhbXBsZSBwYXJhbSBvYmplY3Qgc2NhbGVzIHRoZSBwYXRoIHRvIDYwJSBzaXplIG9mIHRoZSBjb250YWluZXIgKGRhdGEud2lkdGgsIGRhdGEuaGVpZ2h0KS5cbiAgICogICA8cHJlPlxuICAgKiAgIHtcbiAgICogICAgIHhTY2FsZUZhY3RvcjogMC42LFxuICAgKiAgICAgeVNjYWxlRmFjdG9yOjAuNixcbiAgICogICAgIGNvbnRhaW5lcldpZHRoOiBkYXRhLndpZHRoLFxuICAgKiAgICAgY29udGFpbmVySGVpZ2h0OiBkYXRhLmhlaWdodCxcbiAgICogICAgIHBvc2l0aW9uOiB7XG4gICAqICAgICAgIG14OiAwLjQ2LFxuICAgKiAgICAgICBteTogMC4yLFxuICAgKiAgICAgfVxuICAgKiAgIH1cbiAgICogICA8L3ByZT5cbiAgICogICA8dWw+XG4gICAqICAgIDxsaT50YXJnZXRwYXRod2lkdGggPSB4U2NhbGVGYWN0b3IgKiBjb250YWluZXJXaWR0aDwvbGk+XG4gICAqICAgIDxsaT50YXJnZXRwYXRoaGVpZ2h0ID0geVNjYWxlRmFjdG9yICogY29udGFpbmVySGVpZ2h0PC9saT5cbiAgICogICAgPGxpPlBvc2l0aW9uIGlzIHVzZWQgdG8gc2V0IHRoZSBzdGFydGluZyBjb29yZGluYXRlIG9mIHRoZSBwYXRoLiBNIGlzIGNvbXB1dGVkOlxuICAgICogICAgPHVsPlxuICAgICogICAgICA8bGk+cG9zaXRpb24ueCAqIGNvbnRhaW5lcldpZHRoPC9saT5cbiAgICAqICAgICAgPGxpPnBvc2l0aW9uLnkgKiBjb250YWluZXJIZWlnaHQ8L2xpPlxuICAgICogICAgPC91bD5cbiAgICAqICAgIENlbnRlciBvZiB0aGUgY29udGFpbmVyIDxwcmU+IHBvc2l0aW9uOiB7XG4gICAqICAgICAgIG14OiAwLjUsXG4gICAqICAgICAgIG15OiAwLjUsXG4gICAqICAgICB9PC9wcmU+XG4gICAqICAgICBVcHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgY29udGFpbmVyXG4gICAqICAgICA8cHJlPiBwb3NpdGlvbjoge1xuICAgKiAgICAgICBteDogMC4wLFxuICAgKiAgICAgICBteTogMC4wLFxuICAgKiAgICAgfTwvcHJlPlxuICAgKiAgICA8L2xpPlxuICAgKiAgIDwvdWw+XG4gICAqIDwvcD5cbiAgICpcbiAgICovXG4gIHRoaXMuZ2V0U2NhbGVkUGF0aCA9IGZ1bmN0aW9uIGdldFNjYWxlZFBhdGgocGF0aElkLCBwYXJhbSkge1xuICAgIHZhciByYXdQYXRoID0gdGhpcy5wYXRoTWFwW3BhdGhJZF07XG5cbiAgICAvLyBwb3NpdGlvbmluZ1xuICAgIC8vIGNvbXB1dGUgdGhlIHN0YXJ0IHBvaW50IG9mIHRoZSBwYXRoXG4gICAgdmFyIG14LCBteTtcblxuICAgIGlmIChwYXJhbS5hYnNwb3MpIHtcbiAgICAgIG14ID0gcGFyYW0uYWJzcG9zLng7XG4gICAgICBteSA9IHBhcmFtLmFic3Bvcy55O1xuICAgIH0gZWxzZSB7XG4gICAgICBteCA9IHBhcmFtLmNvbnRhaW5lcldpZHRoICogcGFyYW0ucG9zaXRpb24ubXg7XG4gICAgICBteSA9IHBhcmFtLmNvbnRhaW5lckhlaWdodCAqIHBhcmFtLnBvc2l0aW9uLm15O1xuICAgIH1cblxuICAgIHZhciBjb29yZGluYXRlcyA9IHt9OyAvLyBtYXAgZm9yIHRoZSBzY2FsZWQgY29vcmRpbmF0ZXNcbiAgICBpZiAocGFyYW0ucG9zaXRpb24pIHtcblxuICAgICAgLy8gcGF0aFxuICAgICAgdmFyIGhlaWdodFJhdGlvID0gKHBhcmFtLmNvbnRhaW5lckhlaWdodCAvIHJhd1BhdGguaGVpZ2h0KSAqIHBhcmFtLnlTY2FsZUZhY3RvcjtcbiAgICAgIHZhciB3aWR0aFJhdGlvID0gKHBhcmFtLmNvbnRhaW5lcldpZHRoIC8gcmF3UGF0aC53aWR0aCkgKiBwYXJhbS54U2NhbGVGYWN0b3I7XG5cblxuICAgICAgLy8gQXBwbHkgaGVpZ2h0IHJhdGlvXG4gICAgICBmb3IgKHZhciBoZWlnaHRJbmRleCA9IDA7IGhlaWdodEluZGV4IDwgcmF3UGF0aC5oZWlnaHRFbGVtZW50cy5sZW5ndGg7IGhlaWdodEluZGV4KyspIHtcbiAgICAgICAgY29vcmRpbmF0ZXNbJ3knICsgaGVpZ2h0SW5kZXhdID0gcmF3UGF0aC5oZWlnaHRFbGVtZW50c1toZWlnaHRJbmRleF0gKiBoZWlnaHRSYXRpbztcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgd2lkdGggcmF0aW9cbiAgICAgIGZvciAodmFyIHdpZHRoSW5kZXggPSAwOyB3aWR0aEluZGV4IDwgcmF3UGF0aC53aWR0aEVsZW1lbnRzLmxlbmd0aDsgd2lkdGhJbmRleCsrKSB7XG4gICAgICAgIGNvb3JkaW5hdGVzWyd4JyArIHdpZHRoSW5kZXhdID0gcmF3UGF0aC53aWR0aEVsZW1lbnRzW3dpZHRoSW5kZXhdICogd2lkdGhSYXRpbztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSB2YWx1ZSB0byByYXcgcGF0aFxuICAgIHZhciBwYXRoID0gZm9ybWF0KFxuICAgICAgcmF3UGF0aC5kLCB7XG4gICAgICAgIG14OiBteCxcbiAgICAgICAgbXk6IG15LFxuICAgICAgICBlOiBjb29yZGluYXRlc1xuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH07XG59XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vLyBjb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWRvYmUtd2VicGxhdGZvcm0vU25hcC5zdmcvYmxvYi9tYXN0ZXIvc3JjL3N2Zy5qc1xudmFyIHRva2VuUmVnZXggPSAvXFx7KFtefV0rKVxcfS9nLFxuICAgIG9iak5vdGF0aW9uUmVnZXggPSAvKD86KD86XnxcXC4pKC4rPykoPz1cXFt8XFwufCR8XFwoKXxcXFsoJ3xcIikoLis/KVxcMlxcXSkoXFwoXFwpKT8vZzsgLy8gbWF0Y2hlcyAueHh4eHggb3IgW1wieHh4eHhcIl0gdG8gcnVuIG92ZXIgb2JqZWN0IHByb3BlcnRpZXNcblxuZnVuY3Rpb24gcmVwbGFjZXIoYWxsLCBrZXksIG9iaikge1xuICB2YXIgcmVzID0gb2JqO1xuICBrZXkucmVwbGFjZShvYmpOb3RhdGlvblJlZ2V4LCBmdW5jdGlvbihhbGwsIG5hbWUsIHF1b3RlLCBxdW90ZWROYW1lLCBpc0Z1bmMpIHtcbiAgICBuYW1lID0gbmFtZSB8fCBxdW90ZWROYW1lO1xuICAgIGlmIChyZXMpIHtcbiAgICAgIGlmIChuYW1lIGluIHJlcykge1xuICAgICAgICByZXMgPSByZXNbbmFtZV07XG4gICAgICB9XG4gICAgICB0eXBlb2YgcmVzID09ICdmdW5jdGlvbicgJiYgaXNGdW5jICYmIChyZXMgPSByZXMoKSk7XG4gICAgfVxuICB9KTtcbiAgcmVzID0gKHJlcyA9PSBudWxsIHx8IHJlcyA9PSBvYmogPyBhbGwgOiByZXMpICsgJyc7XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gZm9ybWF0KHN0ciwgb2JqKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyKS5yZXBsYWNlKHRva2VuUmVnZXgsIGZ1bmN0aW9uKGFsbCwga2V5KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VyKGFsbCwga2V5LCBvYmopO1xuICB9KTtcbn1cbiIsImltcG9ydCB7IGFzc2lnbiB9IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IFRleHRVdGlsIGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvVGV4dCc7XG5cbnZhciBERUZBVUxUX0ZPTlRfU0laRSA9IDEyO1xudmFyIExJTkVfSEVJR0hUX1JBVElPID0gMS4yO1xuXG52YXIgTUlOX1RFWFRfQU5OT1RBVElPTl9IRUlHSFQgPSAzMDtcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUZXh0UmVuZGVyZXIoY29uZmlnKSB7XG5cbiAgdmFyIGRlZmF1bHRTdHlsZSA9IGFzc2lnbih7XG4gICAgZm9udEZhbWlseTogJ0FyaWFsLCBzYW5zLXNlcmlmJyxcbiAgICBmb250U2l6ZTogREVGQVVMVF9GT05UX1NJWkUsXG4gICAgZm9udFdlaWdodDogJ25vcm1hbCcsXG4gICAgbGluZUhlaWdodDogTElORV9IRUlHSFRfUkFUSU9cbiAgfSwgY29uZmlnICYmIGNvbmZpZy5kZWZhdWx0U3R5bGUgfHwge30pO1xuXG4gIHZhciBmb250U2l6ZSA9IHBhcnNlSW50KGRlZmF1bHRTdHlsZS5mb250U2l6ZSwgMTApIC0gMTtcblxuICB2YXIgZXh0ZXJuYWxTdHlsZSA9IGFzc2lnbih7fSwgZGVmYXVsdFN0eWxlLCB7XG4gICAgZm9udFNpemU6IGZvbnRTaXplXG4gIH0sIGNvbmZpZyAmJiBjb25maWcuZXh0ZXJuYWxTdHlsZSB8fCB7fSk7XG5cbiAgdmFyIHRleHRVdGlsID0gbmV3IFRleHRVdGlsKHtcbiAgICBzdHlsZTogZGVmYXVsdFN0eWxlXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG5ldyBib3VuZHMgb2YgYW4gZXh0ZXJuYWxseSByZW5kZXJlZCxcbiAgICogbGF5b3V0ZWQgbGFiZWwuXG4gICAqXG4gICAqIEBwYXJhbSAge0JvdW5kc30gYm91bmRzXG4gICAqIEBwYXJhbSAge3N0cmluZ30gdGV4dFxuICAgKlxuICAgKiBAcmV0dXJuIHtCb3VuZHN9XG4gICAqL1xuICB0aGlzLmdldEV4dGVybmFsTGFiZWxCb3VuZHMgPSBmdW5jdGlvbihib3VuZHMsIHRleHQpIHtcblxuICAgIHZhciBsYXlvdXRlZERpbWVuc2lvbnMgPSB0ZXh0VXRpbC5nZXREaW1lbnNpb25zKHRleHQsIHtcbiAgICAgIGJveDoge1xuICAgICAgICB3aWR0aDogOTAsXG4gICAgICAgIGhlaWdodDogMzAsXG4gICAgICAgIHg6IGJvdW5kcy53aWR0aCAvIDIgKyBib3VuZHMueCxcbiAgICAgICAgeTogYm91bmRzLmhlaWdodCAvIDIgKyBib3VuZHMueVxuICAgICAgfSxcbiAgICAgIHN0eWxlOiBleHRlcm5hbFN0eWxlXG4gICAgfSk7XG5cbiAgICAvLyByZXNpemUgbGFiZWwgc2hhcGUgdG8gZml0IGxhYmVsIHRleHRcbiAgICByZXR1cm4ge1xuICAgICAgeDogTWF0aC5yb3VuZChib3VuZHMueCArIGJvdW5kcy53aWR0aCAvIDIgLSBsYXlvdXRlZERpbWVuc2lvbnMud2lkdGggLyAyKSxcbiAgICAgIHk6IE1hdGgucm91bmQoYm91bmRzLnkpLFxuICAgICAgd2lkdGg6IE1hdGguY2VpbChsYXlvdXRlZERpbWVuc2lvbnMud2lkdGgpLFxuICAgICAgaGVpZ2h0OiBNYXRoLmNlaWwobGF5b3V0ZWREaW1lbnNpb25zLmhlaWdodClcbiAgICB9O1xuXG4gIH07XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbmV3IGJvdW5kcyBvZiB0ZXh0IGFubm90YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSAge0JvdW5kc30gYm91bmRzXG4gICAqIEBwYXJhbSAge3N0cmluZ30gdGV4dFxuICAgKlxuICAgKiBAcmV0dXJuIHtCb3VuZHN9XG4gICAqL1xuICB0aGlzLmdldFRleHRBbm5vdGF0aW9uQm91bmRzID0gZnVuY3Rpb24oYm91bmRzLCB0ZXh0KSB7XG5cbiAgICB2YXIgbGF5b3V0ZWREaW1lbnNpb25zID0gdGV4dFV0aWwuZ2V0RGltZW5zaW9ucyh0ZXh0LCB7XG4gICAgICBib3g6IGJvdW5kcyxcbiAgICAgIHN0eWxlOiBkZWZhdWx0U3R5bGUsXG4gICAgICBhbGlnbjogJ2xlZnQtdG9wJyxcbiAgICAgIHBhZGRpbmc6IDVcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB4OiBib3VuZHMueCxcbiAgICAgIHk6IGJvdW5kcy55LFxuICAgICAgd2lkdGg6IGJvdW5kcy53aWR0aCxcbiAgICAgIGhlaWdodDogTWF0aC5tYXgoTUlOX1RFWFRfQU5OT1RBVElPTl9IRUlHSFQsIE1hdGgucm91bmQobGF5b3V0ZWREaW1lbnNpb25zLmhlaWdodCkpXG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbGF5b3V0ZWQgdGV4dCBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqXG4gICAqIEByZXR1cm4ge1NWR0VsZW1lbnR9IHJlbmRlcmVkIHRleHRcbiAgICovXG4gIHRoaXMuY3JlYXRlVGV4dCA9IGZ1bmN0aW9uKHRleHQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGV4dFV0aWwuY3JlYXRlVGV4dCh0ZXh0LCBvcHRpb25zIHx8IHt9KTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0IGRlZmF1bHQgdGV4dCBzdHlsZS5cbiAgICovXG4gIHRoaXMuZ2V0RGVmYXVsdFN0eWxlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRTdHlsZTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0IHRoZSBleHRlcm5hbCB0ZXh0IHN0eWxlLlxuICAgKi9cbiAgdGhpcy5nZXRFeHRlcm5hbFN0eWxlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGV4dGVybmFsU3R5bGU7XG4gIH07XG5cbn1cblxuVGV4dFJlbmRlcmVyLiRpbmplY3QgPSBbXG4gICdjb25maWcudGV4dFJlbmRlcmVyJ1xuXTsiLCJpbXBvcnQgQnBtblJlbmRlcmVyIGZyb20gJy4vQnBtblJlbmRlcmVyJztcbmltcG9ydCBUZXh0UmVuZGVyZXIgZnJvbSAnLi9UZXh0UmVuZGVyZXInO1xuXG5pbXBvcnQgUGF0aE1hcCBmcm9tICcuL1BhdGhNYXAnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdicG1uUmVuZGVyZXInIF0sXG4gIGJwbW5SZW5kZXJlcjogWyAndHlwZScsIEJwbW5SZW5kZXJlciBdLFxuICB0ZXh0UmVuZGVyZXI6IFsgJ3R5cGUnLCBUZXh0UmVuZGVyZXIgXSxcbiAgcGF0aE1hcDogWyAndHlwZScsIFBhdGhNYXAgXVxufTtcbiIsImltcG9ydCB7IGdldE5ld1NoYXBlUG9zaXRpb24gfSBmcm9tICcuL0JwbW5BdXRvUGxhY2VVdGlsJztcblxuXG4vKipcbiAqIEJQTU4gYXV0by1wbGFjZSBiZWhhdmlvci5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBdXRvUGxhY2UoZXZlbnRCdXMpIHtcbiAgZXZlbnRCdXMub24oJ2F1dG9QbGFjZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZTtcblxuICAgIHJldHVybiBnZXROZXdTaGFwZVBvc2l0aW9uKHNvdXJjZSwgc2hhcGUpO1xuICB9KTtcbn1cblxuQXV0b1BsYWNlLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTsiLCJpbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcbmltcG9ydCB7IGlzQW55IH0gZnJvbSAnLi4vbW9kZWxpbmcvdXRpbC9Nb2RlbGluZ1V0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRNaWQsXG4gIGFzVFJCTCxcbiAgZ2V0T3JpZW50YXRpb25cbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQge1xuICBmaW5kRnJlZVBvc2l0aW9uLFxuICBnZW5lcmF0ZUdldE5leHRQb3NpdGlvbixcbiAgZ2V0Q29ubmVjdGVkRGlzdGFuY2Vcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYXV0by1wbGFjZS9BdXRvUGxhY2VVdGlsJztcblxuXG4vKipcbiAqIEZpbmQgdGhlIG5ldyBwb3NpdGlvbiBmb3IgdGhlIHRhcmdldCBlbGVtZW50IHRvXG4gKiBjb25uZWN0IHRvIHNvdXJjZS5cbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuU2hhcGV9IHNvdXJjZVxuICogQHBhcmFtICB7ZGpzLm1vZGVsLlNoYXBlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7UG9pbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdTaGFwZVBvc2l0aW9uKHNvdXJjZSwgZWxlbWVudCkge1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XG4gICAgcmV0dXJuIGdldFRleHRBbm5vdGF0aW9uUG9zaXRpb24oc291cmNlLCBlbGVtZW50KTtcbiAgfVxuXG4gIGlmIChpc0FueShlbGVtZW50LCBbICdicG1uOkRhdGFPYmplY3RSZWZlcmVuY2UnLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnIF0pKSB7XG4gICAgcmV0dXJuIGdldERhdGFFbGVtZW50UG9zaXRpb24oc291cmNlLCBlbGVtZW50KTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpGbG93Tm9kZScpKSB7XG4gICAgcmV0dXJuIGdldEZsb3dOb2RlUG9zaXRpb24oc291cmNlLCBlbGVtZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIEFsd2F5cyB0cnkgdG8gcGxhY2UgZWxlbWVudCByaWdodCBvZiBzb3VyY2U7XG4gKiBjb21wdXRlIGFjdHVhbCBkaXN0YW5jZSBmcm9tIHByZXZpb3VzIG5vZGVzIGluIGZsb3cuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbG93Tm9kZVBvc2l0aW9uKHNvdXJjZSwgZWxlbWVudCkge1xuXG4gIHZhciBzb3VyY2VUcmJsID0gYXNUUkJMKHNvdXJjZSk7XG4gIHZhciBzb3VyY2VNaWQgPSBnZXRNaWQoc291cmNlKTtcblxuICB2YXIgaG9yaXpvbnRhbERpc3RhbmNlID0gZ2V0Q29ubmVjdGVkRGlzdGFuY2Uoc291cmNlLCB7XG4gICAgZmlsdGVyOiBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICByZXR1cm4gaXMoY29ubmVjdGlvbiwgJ2JwbW46U2VxdWVuY2VGbG93Jyk7XG4gICAgfVxuICB9KTtcblxuICB2YXIgbWFyZ2luID0gMzAsXG4gICAgICBtaW5EaXN0YW5jZSA9IDgwLFxuICAgICAgb3JpZW50YXRpb24gPSAnbGVmdCc7XG5cbiAgaWYgKGlzKHNvdXJjZSwgJ2JwbW46Qm91bmRhcnlFdmVudCcpKSB7XG4gICAgb3JpZW50YXRpb24gPSBnZXRPcmllbnRhdGlvbihzb3VyY2UsIHNvdXJjZS5ob3N0LCAtMjUpO1xuXG4gICAgaWYgKG9yaWVudGF0aW9uLmluZGV4T2YoJ3RvcCcpICE9PSAtMSkge1xuICAgICAgbWFyZ2luICo9IC0xO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwb3NpdGlvbiA9IHtcbiAgICB4OiBzb3VyY2VUcmJsLnJpZ2h0ICsgaG9yaXpvbnRhbERpc3RhbmNlICsgZWxlbWVudC53aWR0aCAvIDIsXG4gICAgeTogc291cmNlTWlkLnkgKyBnZXRWZXJ0aWNhbERpc3RhbmNlKG9yaWVudGF0aW9uLCBtaW5EaXN0YW5jZSlcbiAgfTtcblxuICB2YXIgbmV4dFBvc2l0aW9uRGlyZWN0aW9uID0ge1xuICAgIHk6IHtcbiAgICAgIG1hcmdpbjogbWFyZ2luLFxuICAgICAgbWluRGlzdGFuY2U6IG1pbkRpc3RhbmNlXG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBmaW5kRnJlZVBvc2l0aW9uKHNvdXJjZSwgZWxlbWVudCwgcG9zaXRpb24sIGdlbmVyYXRlR2V0TmV4dFBvc2l0aW9uKG5leHRQb3NpdGlvbkRpcmVjdGlvbikpO1xufVxuXG5cbmZ1bmN0aW9uIGdldFZlcnRpY2FsRGlzdGFuY2Uob3JpZW50YXRpb24sIG1pbkRpc3RhbmNlKSB7XG4gIGlmIChvcmllbnRhdGlvbi5pbmRleE9mKCd0b3AnKSAhPSAtMSkge1xuICAgIHJldHVybiAtMSAqIG1pbkRpc3RhbmNlO1xuICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uLmluZGV4T2YoJ2JvdHRvbScpICE9IC0xKSB7XG4gICAgcmV0dXJuIG1pbkRpc3RhbmNlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59XG5cblxuLyoqXG4gKiBBbHdheXMgdHJ5IHRvIHBsYWNlIHRleHQgYW5ub3RhdGlvbnMgdG9wIHJpZ2h0IG9mIHNvdXJjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRBbm5vdGF0aW9uUG9zaXRpb24oc291cmNlLCBlbGVtZW50KSB7XG5cbiAgdmFyIHNvdXJjZVRyYmwgPSBhc1RSQkwoc291cmNlKTtcblxuICB2YXIgcG9zaXRpb24gPSB7XG4gICAgeDogc291cmNlVHJibC5yaWdodCArIGVsZW1lbnQud2lkdGggLyAyLFxuICAgIHk6IHNvdXJjZVRyYmwudG9wIC0gNTAgLSBlbGVtZW50LmhlaWdodCAvIDJcbiAgfTtcblxuICB2YXIgbmV4dFBvc2l0aW9uRGlyZWN0aW9uID0ge1xuICAgIHk6IHtcbiAgICAgIG1hcmdpbjogLTMwLFxuICAgICAgbWluRGlzdGFuY2U6IDIwXG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBmaW5kRnJlZVBvc2l0aW9uKHNvdXJjZSwgZWxlbWVudCwgcG9zaXRpb24sIGdlbmVyYXRlR2V0TmV4dFBvc2l0aW9uKG5leHRQb3NpdGlvbkRpcmVjdGlvbikpO1xufVxuXG5cbi8qKlxuICogQWx3YXlzIHB1dCBlbGVtZW50IGJvdHRvbSByaWdodCBvZiBzb3VyY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRhRWxlbWVudFBvc2l0aW9uKHNvdXJjZSwgZWxlbWVudCkge1xuXG4gIHZhciBzb3VyY2VUcmJsID0gYXNUUkJMKHNvdXJjZSk7XG5cbiAgdmFyIHBvc2l0aW9uID0ge1xuICAgIHg6IHNvdXJjZVRyYmwucmlnaHQgLSAxMCArIGVsZW1lbnQud2lkdGggLyAyLFxuICAgIHk6IHNvdXJjZVRyYmwuYm90dG9tICsgNDAgKyBlbGVtZW50LndpZHRoIC8gMlxuICB9O1xuXG4gIHZhciBuZXh0UG9zaXRpb25EaXJlY3Rpb24gPSB7XG4gICAgeDoge1xuICAgICAgbWFyZ2luOiAzMCxcbiAgICAgIG1pbkRpc3RhbmNlOiAzMFxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gZmluZEZyZWVQb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQsIHBvc2l0aW9uLCBnZW5lcmF0ZUdldE5leHRQb3NpdGlvbihuZXh0UG9zaXRpb25EaXJlY3Rpb24pKTtcbn0iLCJpbXBvcnQgQXV0b1BsYWNlTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcGxhY2UnO1xuXG5pbXBvcnQgQnBtbkF1dG9QbGFjZSBmcm9tICcuL0JwbW5BdXRvUGxhY2UnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbIEF1dG9QbGFjZU1vZHVsZSBdLFxuICBfX2luaXRfXzogWyAnYnBtbkF1dG9QbGFjZScgXSxcbiAgYnBtbkF1dG9QbGFjZTogWyAndHlwZScsIEJwbW5BdXRvUGxhY2UgXVxufTsiLCJpbXBvcnQgQXV0b1Jlc2l6ZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXJlc2l6ZS9BdXRvUmVzaXplJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cblxuLyoqXG4gKiBTdWIgY2xhc3Mgb2YgdGhlIEF1dG9SZXNpemUgbW9kdWxlIHdoaWNoIGltcGxlbWVudHMgYSBCUE1OXG4gKiBzcGVjaWZpYyByZXNpemUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5BdXRvUmVzaXplKGluamVjdG9yKSB7XG5cbiAgaW5qZWN0b3IuaW52b2tlKEF1dG9SZXNpemUsIHRoaXMpO1xufVxuXG5CcG1uQXV0b1Jlc2l6ZS4kaW5qZWN0ID0gW1xuICAnaW5qZWN0b3InXG5dO1xuXG5pbmhlcml0cyhCcG1uQXV0b1Jlc2l6ZSwgQXV0b1Jlc2l6ZSk7XG5cblxuLyoqXG4gKiBSZXNpemUgc2hhcGVzIGFuZCBsYW5lcy5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gdGFyZ2V0XG4gKiBAcGFyYW0ge0JvdW5kc30gbmV3Qm91bmRzXG4gKiBAcGFyYW0ge09iamVjdH0gaGludHNcbiAqL1xuQnBtbkF1dG9SZXNpemUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHRhcmdldCwgbmV3Qm91bmRzLCBoaW50cykge1xuXG4gIGlmIChpcyh0YXJnZXQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICB0aGlzLl9tb2RlbGluZy5yZXNpemVMYW5lKHRhcmdldCwgbmV3Qm91bmRzLCBudWxsLCBoaW50cyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fbW9kZWxpbmcucmVzaXplU2hhcGUodGFyZ2V0LCBuZXdCb3VuZHMsIG51bGwsIGhpbnRzKTtcbiAgfVxufTsiLCJpbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IEF1dG9SZXNpemVQcm92aWRlciBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXJlc2l6ZS9BdXRvUmVzaXplUHJvdmlkZXInO1xuXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgaXMgYSBwcm92aWRlciBmb3IgYXV0b21hdGljYWxseSByZXNpemluZyBwYXJlbnQgQlBNTiBlbGVtZW50c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uQXV0b1Jlc2l6ZVByb3ZpZGVyKGV2ZW50QnVzLCBtb2RlbGluZykge1xuICBBdXRvUmVzaXplUHJvdmlkZXIuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbn1cblxuaW5oZXJpdHMoQnBtbkF1dG9SZXNpemVQcm92aWRlciwgQXV0b1Jlc2l6ZVByb3ZpZGVyKTtcblxuQnBtbkF1dG9SZXNpemVQcm92aWRlci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIHRhcmdldCBjYW4gYmUgZXhwYW5kZWRcbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuU2hhcGV9IHRhcmdldFxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbkJwbW5BdXRvUmVzaXplUHJvdmlkZXIucHJvdG90eXBlLmNhblJlc2l6ZSA9IGZ1bmN0aW9uKGVsZW1lbnRzLCB0YXJnZXQpIHtcblxuICBpZiAoIWlzKHRhcmdldCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiAhaXModGFyZ2V0LCAnYnBtbjpMYW5lJykgJiYgIShpcyh0YXJnZXQsICdicG1uOlN1YlByb2Nlc3MnKSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgY2FuUmVzaXplID0gdHJ1ZTtcblxuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46TGFuZScpIHx8IGVsZW1lbnQubGFiZWxUYXJnZXQpIHtcbiAgICAgIGNhblJlc2l6ZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNhblJlc2l6ZTtcbn07XG4iLCJpbXBvcnQgQnBtbkF1dG9SZXNpemUgZnJvbSAnLi9CcG1uQXV0b1Jlc2l6ZSc7XG5pbXBvcnQgQnBtbkF1dG9SZXNpemVQcm92aWRlciBmcm9tICcuL0JwbW5BdXRvUmVzaXplUHJvdmlkZXInO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFtcbiAgICAnYnBtbkF1dG9SZXNpemUnLFxuICAgICdicG1uQXV0b1Jlc2l6ZVByb3ZpZGVyJ1xuICBdLFxuICBicG1uQXV0b1Jlc2l6ZTogWyAndHlwZScsIEJwbW5BdXRvUmVzaXplIF0sXG4gIGJwbW5BdXRvUmVzaXplUHJvdmlkZXI6IFsgJ3R5cGUnLCBCcG1uQXV0b1Jlc2l6ZVByb3ZpZGVyIF1cbn07XG4iLCJpbXBvcnQge1xuICBhc3NpZ24sXG4gIGZvckVhY2gsXG4gIGlzQXJyYXlcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBpc1xufSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzRXhwYW5kZWQsXG4gIGlzRXZlbnRTdWJQcm9jZXNzXG59IGZyb20gJy4uLy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNBbnlcbn0gZnJvbSAnLi4vbW9kZWxpbmcvdXRpbC9Nb2RlbGluZ1V0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRDaGlsZExhbmVzXG59IGZyb20gJy4uL21vZGVsaW5nL3V0aWwvTGFuZVV0aWwnO1xuXG5pbXBvcnQge1xuICBoYXNQcmltYXJ5TW9kaWZpZXJcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9Nb3VzZSc7XG5cblxuLyoqXG4gKiBBIHByb3ZpZGVyIGZvciBCUE1OIDIuMCBlbGVtZW50cyBjb250ZXh0IHBhZFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDb250ZXh0UGFkUHJvdmlkZXIoXG4gICAgY29uZmlnLCBpbmplY3RvciwgZXZlbnRCdXMsXG4gICAgY29udGV4dFBhZCwgbW9kZWxpbmcsIGVsZW1lbnRGYWN0b3J5LFxuICAgIGNvbm5lY3QsIGNyZWF0ZSwgcG9wdXBNZW51LFxuICAgIGNhbnZhcywgcnVsZXMsIHRyYW5zbGF0ZSkge1xuXG4gIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcblxuICBjb250ZXh0UGFkLnJlZ2lzdGVyUHJvdmlkZXIodGhpcyk7XG5cbiAgdGhpcy5fY29udGV4dFBhZCA9IGNvbnRleHRQYWQ7XG5cbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcblxuICB0aGlzLl9lbGVtZW50RmFjdG9yeSA9IGVsZW1lbnRGYWN0b3J5O1xuICB0aGlzLl9jb25uZWN0ID0gY29ubmVjdDtcbiAgdGhpcy5fY3JlYXRlID0gY3JlYXRlO1xuICB0aGlzLl9wb3B1cE1lbnUgPSBwb3B1cE1lbnU7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcbiAgdGhpcy5fcnVsZXMgPSBydWxlcztcbiAgdGhpcy5fdHJhbnNsYXRlID0gdHJhbnNsYXRlO1xuXG4gIGlmIChjb25maWcuYXV0b1BsYWNlICE9PSBmYWxzZSkge1xuICAgIHRoaXMuX2F1dG9QbGFjZSA9IGluamVjdG9yLmdldCgnYXV0b1BsYWNlJywgZmFsc2UpO1xuICB9XG5cbiAgZXZlbnRCdXMub24oJ2NyZWF0ZS5lbmQnLCAyNTAsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAoIWhhc1ByaW1hcnlNb2RpZmllcihldmVudCkgfHwgIWNvbnRleHRQYWQuaXNPcGVuKHNoYXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBlbnRyaWVzID0gY29udGV4dFBhZC5nZXRFbnRyaWVzKHNoYXBlKTtcblxuICAgIGlmIChlbnRyaWVzLnJlcGxhY2UpIHtcbiAgICAgIGVudHJpZXMucmVwbGFjZS5hY3Rpb24uY2xpY2soZXZlbnQsIHNoYXBlKTtcbiAgICB9XG4gIH0pO1xufVxuXG5Db250ZXh0UGFkUHJvdmlkZXIuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5jb250ZXh0UGFkJyxcbiAgJ2luamVjdG9yJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NvbnRleHRQYWQnLFxuICAnbW9kZWxpbmcnLFxuICAnZWxlbWVudEZhY3RvcnknLFxuICAnY29ubmVjdCcsXG4gICdjcmVhdGUnLFxuICAncG9wdXBNZW51JyxcbiAgJ2NhbnZhcycsXG4gICdydWxlcycsXG4gICd0cmFuc2xhdGUnXG5dO1xuXG5cbkNvbnRleHRQYWRQcm92aWRlci5wcm90b3R5cGUuZ2V0Q29udGV4dFBhZEVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgdmFyIGNvbnRleHRQYWQgPSB0aGlzLl9jb250ZXh0UGFkLFxuICAgICAgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZyxcblxuICAgICAgZWxlbWVudEZhY3RvcnkgPSB0aGlzLl9lbGVtZW50RmFjdG9yeSxcbiAgICAgIGNvbm5lY3QgPSB0aGlzLl9jb25uZWN0LFxuICAgICAgY3JlYXRlID0gdGhpcy5fY3JlYXRlLFxuICAgICAgcG9wdXBNZW51ID0gdGhpcy5fcG9wdXBNZW51LFxuICAgICAgY2FudmFzID0gdGhpcy5fY2FudmFzLFxuICAgICAgcnVsZXMgPSB0aGlzLl9ydWxlcyxcbiAgICAgIGF1dG9QbGFjZSA9IHRoaXMuX2F1dG9QbGFjZSxcbiAgICAgIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcblxuICB2YXIgYWN0aW9ucyA9IHt9O1xuXG4gIGlmIChlbGVtZW50LnR5cGUgPT09ICdsYWJlbCcpIHtcbiAgICByZXR1cm4gYWN0aW9ucztcbiAgfVxuXG4gIHZhciBidXNpbmVzc09iamVjdCA9IGVsZW1lbnQuYnVzaW5lc3NPYmplY3Q7XG5cbiAgZnVuY3Rpb24gc3RhcnRDb25uZWN0KGV2ZW50LCBlbGVtZW50KSB7XG4gICAgY29ubmVjdC5zdGFydChldmVudCwgZWxlbWVudCk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVFbGVtZW50KGUpIHtcbiAgICBtb2RlbGluZy5yZW1vdmVFbGVtZW50cyhbIGVsZW1lbnQgXSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRSZXBsYWNlTWVudVBvc2l0aW9uKGVsZW1lbnQpIHtcblxuICAgIHZhciBZX09GRlNFVCA9IDU7XG5cbiAgICB2YXIgZGlhZ3JhbUNvbnRhaW5lciA9IGNhbnZhcy5nZXRDb250YWluZXIoKSxcbiAgICAgICAgcGFkID0gY29udGV4dFBhZC5nZXRQYWQoZWxlbWVudCkuaHRtbDtcblxuICAgIHZhciBkaWFncmFtUmVjdCA9IGRpYWdyYW1Db250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgIHBhZFJlY3QgPSBwYWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB2YXIgdG9wID0gcGFkUmVjdC50b3AgLSBkaWFncmFtUmVjdC50b3A7XG4gICAgdmFyIGxlZnQgPSBwYWRSZWN0LmxlZnQgLSBkaWFncmFtUmVjdC5sZWZ0O1xuXG4gICAgdmFyIHBvcyA9IHtcbiAgICAgIHg6IGxlZnQsXG4gICAgICB5OiB0b3AgKyBwYWRSZWN0LmhlaWdodCArIFlfT0ZGU0VUXG4gICAgfTtcblxuICAgIHJldHVybiBwb3M7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYXBwZW5kIGFjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbdGl0bGVdXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICpcbiAgICogQHJldHVybiB7T2JqZWN0fSBkZXNjcmlwdG9yXG4gICAqL1xuICBmdW5jdGlvbiBhcHBlbmRBY3Rpb24odHlwZSwgY2xhc3NOYW1lLCB0aXRsZSwgb3B0aW9ucykge1xuXG4gICAgaWYgKHR5cGVvZiB0aXRsZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMgPSB0aXRsZTtcbiAgICAgIHRpdGxlID0gdHJhbnNsYXRlKCdBcHBlbmQge3R5cGV9JywgeyB0eXBlOiB0eXBlLnJlcGxhY2UoL15icG1uOi8sICcnKSB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcHBlbmRTdGFydChldmVudCwgZWxlbWVudCkge1xuXG4gICAgICB2YXIgc2hhcGUgPSBlbGVtZW50RmFjdG9yeS5jcmVhdGVTaGFwZShhc3NpZ24oeyB0eXBlOiB0eXBlIH0sIG9wdGlvbnMpKTtcbiAgICAgIGNyZWF0ZS5zdGFydChldmVudCwgc2hhcGUsIHtcbiAgICAgICAgc291cmNlOiBlbGVtZW50XG4gICAgICB9KTtcbiAgICB9XG5cblxuICAgIHZhciBhcHBlbmQgPSBhdXRvUGxhY2UgPyBmdW5jdGlvbihldmVudCwgZWxlbWVudCkge1xuICAgICAgdmFyIHNoYXBlID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoYXNzaWduKHsgdHlwZTogdHlwZSB9LCBvcHRpb25zKSk7XG5cbiAgICAgIGF1dG9QbGFjZS5hcHBlbmQoZWxlbWVudCwgc2hhcGUpO1xuICAgIH0gOiBhcHBlbmRTdGFydDtcblxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdyb3VwOiAnbW9kZWwnLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICB0aXRsZTogdGl0bGUsXG4gICAgICBhY3Rpb246IHtcbiAgICAgICAgZHJhZ3N0YXJ0OiBhcHBlbmRTdGFydCxcbiAgICAgICAgY2xpY2s6IGFwcGVuZFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzcGxpdExhbmVIYW5kbGVyKGNvdW50KSB7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oZXZlbnQsIGVsZW1lbnQpIHtcblxuICAgICAgLy8gYWN0dWFsIHNwbGl0XG4gICAgICBtb2RlbGluZy5zcGxpdExhbmUoZWxlbWVudCwgY291bnQpO1xuXG4gICAgICAvLyByZWZyZXNoIGNvbnRleHQgcGFkIGFmdGVyIHNwbGl0IHRvXG4gICAgICAvLyBnZXQgcmlkIG9mIHNwbGl0IGljb25zXG4gICAgICBjb250ZXh0UGFkLm9wZW4oZWxlbWVudCwgdHJ1ZSk7XG4gICAgfTtcbiAgfVxuXG5cbiAgaWYgKGlzQW55KGJ1c2luZXNzT2JqZWN0LCBbICdicG1uOkxhbmUnLCAnYnBtbjpQYXJ0aWNpcGFudCcgXSkgJiYgaXNFeHBhbmRlZChidXNpbmVzc09iamVjdCkpIHtcblxuICAgIHZhciBjaGlsZExhbmVzID0gZ2V0Q2hpbGRMYW5lcyhlbGVtZW50KTtcblxuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAnbGFuZS1pbnNlcnQtYWJvdmUnOiB7XG4gICAgICAgIGdyb3VwOiAnbGFuZS1pbnNlcnQtYWJvdmUnLFxuICAgICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbGFuZS1pbnNlcnQtYWJvdmUnLFxuICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdBZGQgTGFuZSBhYm92ZScpLFxuICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICBjbGljazogZnVuY3Rpb24oZXZlbnQsIGVsZW1lbnQpIHtcbiAgICAgICAgICAgIG1vZGVsaW5nLmFkZExhbmUoZWxlbWVudCwgJ3RvcCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGNoaWxkTGFuZXMubGVuZ3RoIDwgMikge1xuXG4gICAgICBpZiAoZWxlbWVudC5oZWlnaHQgPj0gMTIwKSB7XG4gICAgICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAgICAgJ2xhbmUtZGl2aWRlLXR3byc6IHtcbiAgICAgICAgICAgIGdyb3VwOiAnbGFuZS1kaXZpZGUnLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWxhbmUtZGl2aWRlLXR3bycsXG4gICAgICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdEaXZpZGUgaW50byB0d28gTGFuZXMnKSxcbiAgICAgICAgICAgIGFjdGlvbjoge1xuICAgICAgICAgICAgICBjbGljazogc3BsaXRMYW5lSGFuZGxlcigyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50LmhlaWdodCA+PSAxODApIHtcbiAgICAgICAgYXNzaWduKGFjdGlvbnMsIHtcbiAgICAgICAgICAnbGFuZS1kaXZpZGUtdGhyZWUnOiB7XG4gICAgICAgICAgICBncm91cDogJ2xhbmUtZGl2aWRlJyxcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1sYW5lLWRpdmlkZS10aHJlZScsXG4gICAgICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdEaXZpZGUgaW50byB0aHJlZSBMYW5lcycpLFxuICAgICAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgICAgIGNsaWNrOiBzcGxpdExhbmVIYW5kbGVyKDMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhc3NpZ24oYWN0aW9ucywge1xuICAgICAgJ2xhbmUtaW5zZXJ0LWJlbG93Jzoge1xuICAgICAgICBncm91cDogJ2xhbmUtaW5zZXJ0LWJlbG93JyxcbiAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWxhbmUtaW5zZXJ0LWJlbG93JyxcbiAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQWRkIExhbmUgYmVsb3cnKSxcbiAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgICAgICAgICBtb2RlbGluZy5hZGRMYW5lKGVsZW1lbnQsICdib3R0b20nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpGbG93Tm9kZScpKSB7XG5cbiAgICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkV2ZW50QmFzZWRHYXRld2F5JykpIHtcblxuICAgICAgYXNzaWduKGFjdGlvbnMsIHtcbiAgICAgICAgJ2FwcGVuZC5yZWNlaXZlLXRhc2snOiBhcHBlbmRBY3Rpb24oXG4gICAgICAgICAgJ2JwbW46UmVjZWl2ZVRhc2snLFxuICAgICAgICAgICdicG1uLWljb24tcmVjZWl2ZS10YXNrJyxcbiAgICAgICAgICB0cmFuc2xhdGUoJ0FwcGVuZCBSZWNlaXZlVGFzaycpXG4gICAgICAgICksXG4gICAgICAgICdhcHBlbmQubWVzc2FnZS1pbnRlcm1lZGlhdGUtZXZlbnQnOiBhcHBlbmRBY3Rpb24oXG4gICAgICAgICAgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsXG4gICAgICAgICAgJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtbWVzc2FnZScsXG4gICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgTWVzc2FnZUludGVybWVkaWF0ZUNhdGNoRXZlbnQnKSxcbiAgICAgICAgICB7IGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nIH1cbiAgICAgICAgKSxcbiAgICAgICAgJ2FwcGVuZC50aW1lci1pbnRlcm1lZGlhdGUtZXZlbnQnOiBhcHBlbmRBY3Rpb24oXG4gICAgICAgICAgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsXG4gICAgICAgICAgJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtdGltZXInLFxuICAgICAgICAgIHRyYW5zbGF0ZSgnQXBwZW5kIFRpbWVySW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcpLFxuICAgICAgICAgIHsgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46VGltZXJFdmVudERlZmluaXRpb24nIH1cbiAgICAgICAgKSxcbiAgICAgICAgJ2FwcGVuZC5jb25kaXRpb24taW50ZXJtZWRpYXRlLWV2ZW50JzogYXBwZW5kQWN0aW9uKFxuICAgICAgICAgICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnLFxuICAgICAgICAgICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLWNvbmRpdGlvbicsXG4gICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgQ29uZGl0aW9uSW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcpLFxuICAgICAgICAgIHsgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nIH1cbiAgICAgICAgKSxcbiAgICAgICAgJ2FwcGVuZC5zaWduYWwtaW50ZXJtZWRpYXRlLWV2ZW50JzogYXBwZW5kQWN0aW9uKFxuICAgICAgICAgICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnLFxuICAgICAgICAgICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLXNpZ25hbCcsXG4gICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgU2lnbmFsSW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcpLFxuICAgICAgICAgIHsgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJyB9XG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH0gZWxzZVxuXG4gICAgaWYgKGlzRXZlbnRUeXBlKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpCb3VuZGFyeUV2ZW50JywgJ2JwbW46Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbicpKSB7XG5cbiAgICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAgICdhcHBlbmQuY29tcGVuc2F0aW9uLWFjdGl2aXR5JzpcbiAgICAgICAgICAgIGFwcGVuZEFjdGlvbihcbiAgICAgICAgICAgICAgJ2JwbW46VGFzaycsXG4gICAgICAgICAgICAgICdicG1uLWljb24tdGFzaycsXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZSgnQXBwZW5kIGNvbXBlbnNhdGlvbiBhY3Rpdml0eScpLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNGb3JDb21wZW5zYXRpb246IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfSBlbHNlXG5cbiAgICBpZiAoIWlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpFbmRFdmVudCcpICYmXG4gICAgICAgICFidXNpbmVzc09iamVjdC5pc0ZvckNvbXBlbnNhdGlvbiAmJlxuICAgICAgICAhaXNFdmVudFR5cGUoYnVzaW5lc3NPYmplY3QsICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLCAnYnBtbjpMaW5rRXZlbnREZWZpbml0aW9uJykgJiZcbiAgICAgICAgIWlzRXZlbnRTdWJQcm9jZXNzKGJ1c2luZXNzT2JqZWN0KSkge1xuXG4gICAgICBhc3NpZ24oYWN0aW9ucywge1xuICAgICAgICAnYXBwZW5kLmVuZC1ldmVudCc6IGFwcGVuZEFjdGlvbihcbiAgICAgICAgICAnYnBtbjpFbmRFdmVudCcsXG4gICAgICAgICAgJ2JwbW4taWNvbi1lbmQtZXZlbnQtbm9uZScsXG4gICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgRW5kRXZlbnQnKVxuICAgICAgICApLFxuICAgICAgICAnYXBwZW5kLmdhdGV3YXknOiBhcHBlbmRBY3Rpb24oXG4gICAgICAgICAgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheScsXG4gICAgICAgICAgJ2JwbW4taWNvbi1nYXRld2F5LW5vbmUnLFxuICAgICAgICAgIHRyYW5zbGF0ZSgnQXBwZW5kIEdhdGV3YXknKVxuICAgICAgICApLFxuICAgICAgICAnYXBwZW5kLmFwcGVuZC10YXNrJzogYXBwZW5kQWN0aW9uKFxuICAgICAgICAgICdicG1uOlRhc2snLFxuICAgICAgICAgICdicG1uLWljb24tdGFzaycsXG4gICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgVGFzaycpXG4gICAgICAgICksXG4gICAgICAgICdhcHBlbmQuaW50ZXJtZWRpYXRlLWV2ZW50JzogYXBwZW5kQWN0aW9uKFxuICAgICAgICAgICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLFxuICAgICAgICAgICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LW5vbmUnLFxuICAgICAgICAgIHRyYW5zbGF0ZSgnQXBwZW5kIEludGVybWVkaWF0ZS9Cb3VuZGFyeSBFdmVudCcpXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmICghcG9wdXBNZW51LmlzRW1wdHkoZWxlbWVudCwgJ2JwbW4tcmVwbGFjZScpKSB7XG5cbiAgICAvLyBSZXBsYWNlIG1lbnUgZW50cnlcbiAgICBhc3NpZ24oYWN0aW9ucywge1xuICAgICAgJ3JlcGxhY2UnOiB7XG4gICAgICAgIGdyb3VwOiAnZWRpdCcsXG4gICAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zY3Jldy13cmVuY2gnLFxuICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdDaGFuZ2UgdHlwZScpLFxuICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICBjbGljazogZnVuY3Rpb24oZXZlbnQsIGVsZW1lbnQpIHtcblxuICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gYXNzaWduKGdldFJlcGxhY2VNZW51UG9zaXRpb24oZWxlbWVudCksIHtcbiAgICAgICAgICAgICAgY3Vyc29yOiB7IHg6IGV2ZW50LngsIHk6IGV2ZW50LnkgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHBvcHVwTWVudS5vcGVuKGVsZW1lbnQsICdicG1uLXJlcGxhY2UnLCBwb3NpdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaXNBbnkoYnVzaW5lc3NPYmplY3QsIFtcbiAgICAnYnBtbjpGbG93Tm9kZScsXG4gICAgJ2JwbW46SW50ZXJhY3Rpb25Ob2RlJyxcbiAgICAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJyxcbiAgICAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnXG4gIF0pKSB7XG5cbiAgICBhc3NpZ24oYWN0aW9ucywge1xuICAgICAgJ2FwcGVuZC50ZXh0LWFubm90YXRpb24nOiBhcHBlbmRBY3Rpb24oJ2JwbW46VGV4dEFubm90YXRpb24nLCAnYnBtbi1pY29uLXRleHQtYW5ub3RhdGlvbicpLFxuXG4gICAgICAnY29ubmVjdCc6IHtcbiAgICAgICAgZ3JvdXA6ICdjb25uZWN0JyxcbiAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWNvbm5lY3Rpb24tbXVsdGknLFxuICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdDb25uZWN0IHVzaW5nICcgK1xuICAgICAgICAgICAgICAgICAgKGJ1c2luZXNzT2JqZWN0LmlzRm9yQ29tcGVuc2F0aW9uID8gJycgOiAnU2VxdWVuY2UvTWVzc2FnZUZsb3cgb3IgJykgK1xuICAgICAgICAgICAgICAgICAgJ0Fzc29jaWF0aW9uJyksXG4gICAgICAgIGFjdGlvbjoge1xuICAgICAgICAgIGNsaWNrOiBzdGFydENvbm5lY3QsXG4gICAgICAgICAgZHJhZ3N0YXJ0OiBzdGFydENvbm5lY3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGlzQW55KGJ1c2luZXNzT2JqZWN0LCBbICdicG1uOkRhdGFPYmplY3RSZWZlcmVuY2UnLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnIF0pKSB7XG4gICAgYXNzaWduKGFjdGlvbnMsIHtcbiAgICAgICdjb25uZWN0Jzoge1xuICAgICAgICBncm91cDogJ2Nvbm5lY3QnLFxuICAgICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY29ubmVjdGlvbi1tdWx0aScsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0Nvbm5lY3QgdXNpbmcgRGF0YUlucHV0QXNzb2NpYXRpb24nKSxcbiAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgY2xpY2s6IHN0YXJ0Q29ubmVjdCxcbiAgICAgICAgICBkcmFnc3RhcnQ6IHN0YXJ0Q29ubmVjdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkdyb3VwJykpIHtcbiAgICBhc3NpZ24oYWN0aW9ucywge1xuICAgICAgJ2FwcGVuZC50ZXh0LWFubm90YXRpb24nOiBhcHBlbmRBY3Rpb24oJ2JwbW46VGV4dEFubm90YXRpb24nLCAnYnBtbi1pY29uLXRleHQtYW5ub3RhdGlvbicpXG4gICAgfSk7XG4gIH1cblxuICAvLyBkZWxldGUgZWxlbWVudCBlbnRyeSwgb25seSBzaG93IGlmIGFsbG93ZWQgYnkgcnVsZXNcbiAgdmFyIGRlbGV0ZUFsbG93ZWQgPSBydWxlcy5hbGxvd2VkKCdlbGVtZW50cy5kZWxldGUnLCB7IGVsZW1lbnRzOiBbIGVsZW1lbnQgXSB9KTtcblxuICBpZiAoaXNBcnJheShkZWxldGVBbGxvd2VkKSkge1xuXG4gICAgLy8gd2FzIHRoZSBlbGVtZW50IHJldHVybmVkIGFzIGEgZGVsZXRpb24gY2FuZGlkYXRlP1xuICAgIGRlbGV0ZUFsbG93ZWQgPSBkZWxldGVBbGxvd2VkWzBdID09PSBlbGVtZW50O1xuICB9XG5cbiAgaWYgKGRlbGV0ZUFsbG93ZWQpIHtcbiAgICBhc3NpZ24oYWN0aW9ucywge1xuICAgICAgJ2RlbGV0ZSc6IHtcbiAgICAgICAgZ3JvdXA6ICdlZGl0JyxcbiAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXRyYXNoJyxcbiAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnUmVtb3ZlJyksXG4gICAgICAgIGFjdGlvbjoge1xuICAgICAgICAgIGNsaWNrOiByZW1vdmVFbGVtZW50XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBhY3Rpb25zO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc0V2ZW50VHlwZShldmVudEJvLCB0eXBlLCBkZWZpbml0aW9uKSB7XG5cbiAgdmFyIGlzVHlwZSA9IGV2ZW50Qm8uJGluc3RhbmNlT2YodHlwZSk7XG4gIHZhciBpc0RlZmluaXRpb24gPSBmYWxzZTtcblxuICB2YXIgZGVmaW5pdGlvbnMgPSBldmVudEJvLmV2ZW50RGVmaW5pdGlvbnMgfHwgW107XG4gIGZvckVhY2goZGVmaW5pdGlvbnMsIGZ1bmN0aW9uKGRlZikge1xuICAgIGlmIChkZWYuJHR5cGUgPT09IGRlZmluaXRpb24pIHtcbiAgICAgIGlzRGVmaW5pdGlvbiA9IHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gaXNUeXBlICYmIGlzRGVmaW5pdGlvbjtcbn1cbiIsImltcG9ydCBEaXJlY3RFZGl0aW5nTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMtZGlyZWN0LWVkaXRpbmcnO1xuaW1wb3J0IENvbnRleHRQYWRNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY29udGV4dC1wYWQnO1xuaW1wb3J0IFNlbGVjdGlvbk1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zZWxlY3Rpb24nO1xuaW1wb3J0IENvbm5lY3RNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY29ubmVjdCc7XG5pbXBvcnQgQ3JlYXRlTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NyZWF0ZSc7XG5pbXBvcnQgUG9wdXBNZW51TW9kdWxlIGZyb20gJy4uL3BvcHVwLW1lbnUnO1xuXG5pbXBvcnQgQ29udGV4dFBhZFByb3ZpZGVyIGZyb20gJy4vQ29udGV4dFBhZFByb3ZpZGVyJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIERpcmVjdEVkaXRpbmdNb2R1bGUsXG4gICAgQ29udGV4dFBhZE1vZHVsZSxcbiAgICBTZWxlY3Rpb25Nb2R1bGUsXG4gICAgQ29ubmVjdE1vZHVsZSxcbiAgICBDcmVhdGVNb2R1bGUsXG4gICAgUG9wdXBNZW51TW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdjb250ZXh0UGFkUHJvdmlkZXInIF0sXG4gIGNvbnRleHRQYWRQcm92aWRlcjogWyAndHlwZScsIENvbnRleHRQYWRQcm92aWRlciBdXG59OyIsImltcG9ydCB7XG4gIGdldEJ1c2luZXNzT2JqZWN0LFxuICBpc1xufSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGZvckVhY2gsXG4gIGlzQXJyYXksXG4gIGlzVW5kZWZpbmVkLFxuICBvbWl0LFxuICByZWR1Y2Vcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5mdW5jdGlvbiBjb3B5UHJvcGVydGllcyhzb3VyY2UsIHRhcmdldCwgcHJvcGVydGllcykge1xuICBpZiAoIWlzQXJyYXkocHJvcGVydGllcykpIHtcbiAgICBwcm9wZXJ0aWVzID0gWyBwcm9wZXJ0aWVzIF07XG4gIH1cblxuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHByb3BlcnR5KSB7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChzb3VyY2VbcHJvcGVydHldKSkge1xuICAgICAgdGFyZ2V0W3Byb3BlcnR5XSA9IHNvdXJjZVtwcm9wZXJ0eV07XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlUHJvcGVydGllcyhlbGVtZW50LCBwcm9wZXJ0aWVzKSB7XG4gIGlmICghaXNBcnJheShwcm9wZXJ0aWVzKSkge1xuICAgIHByb3BlcnRpZXMgPSBbIHByb3BlcnRpZXMgXTtcbiAgfVxuXG4gIGZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24ocHJvcGVydHkpIHtcbiAgICBpZiAoZWxlbWVudFtwcm9wZXJ0eV0pIHtcbiAgICAgIGRlbGV0ZSBlbGVtZW50W3Byb3BlcnR5XTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgTE9XX1BSSU9SSVRZID0gNzUwO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5Db3B5UGFzdGUoYnBtbkZhY3RvcnksIGV2ZW50QnVzLCBtb2RkbGVDb3B5KSB7XG5cbiAgZXZlbnRCdXMub24oJ2NvcHlQYXN0ZS5jb3B5RWxlbWVudCcsIExPV19QUklPUklUWSwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBkZXNjcmlwdG9yID0gY29udGV4dC5kZXNjcmlwdG9yLFxuICAgICAgICBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50O1xuXG4gICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZGVzY3JpcHRvci5vbGRCdXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gICAgZGVzY3JpcHRvci50eXBlID0gZWxlbWVudC50eXBlO1xuXG4gICAgY29weVByb3BlcnRpZXMoYnVzaW5lc3NPYmplY3QsIGRlc2NyaXB0b3IsICduYW1lJyk7XG5cbiAgICBkZXNjcmlwdG9yLmRpID0ge307XG5cbiAgICAvLyBmaWxsIGFuZCBzdHJva2Ugd2lsbCBiZSBzZXQgdG8gRElcbiAgICBjb3B5UHJvcGVydGllcyhidXNpbmVzc09iamVjdC5kaSwgZGVzY3JpcHRvci5kaSwgW1xuICAgICAgJ2ZpbGwnLFxuICAgICAgJ3N0cm9rZSdcbiAgICBdKTtcblxuICAgIGNvcHlQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LmRpLCBkZXNjcmlwdG9yLCAnaXNFeHBhbmRlZCcpO1xuXG4gICAgaWYgKGlzTGFiZWwoZGVzY3JpcHRvcikpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIC8vIGRlZmF1bHQgc2VxdWVuY2UgZmxvd1xuICAgIGlmIChidXNpbmVzc09iamVjdC5kZWZhdWx0KSB7XG4gICAgICBkZXNjcmlwdG9yLmRlZmF1bHQgPSBidXNpbmVzc09iamVjdC5kZWZhdWx0LmlkO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ21vZGRsZUNvcHkuY2FuQ29weVByb3BlcnR5JywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcbiAgICAgICAgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5LFxuICAgICAgICBwcm9wZXJ0eU5hbWUgPSBjb250ZXh0LnByb3BlcnR5TmFtZSxcbiAgICAgICAgYnBtblByb2Nlc3M7XG5cbiAgICBpZiAoXG4gICAgICBwcm9wZXJ0eU5hbWUgPT09ICdwcm9jZXNzUmVmJyAmJlxuICAgICAgaXMocGFyZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmXG4gICAgICBpcyhwcm9wZXJ0eSwgJ2JwbW46UHJvY2VzcycpXG4gICAgKSB7XG4gICAgICBicG1uUHJvY2VzcyA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpQcm9jZXNzJyk7XG5cbiAgICAgIC8vIHJldHVybiBjb3B5IG9mIHByb2Nlc3NcbiAgICAgIHJldHVybiBtb2RkbGVDb3B5LmNvcHlFbGVtZW50KHByb3BlcnR5LCBicG1uUHJvY2Vzcyk7XG4gICAgfVxuICB9KTtcblxuICB2YXIgcmVmZXJlbmNlcztcblxuICBmdW5jdGlvbiByZXNvbHZlUmVmZXJlbmNlcyhkZXNjcmlwdG9yLCBjYWNoZSkge1xuICAgIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGRlc2NyaXB0b3IpO1xuXG4gICAgLy8gZGVmYXVsdCBzZXF1ZW5jZSBmbG93c1xuICAgIGlmIChkZXNjcmlwdG9yLmRlZmF1bHQpIHtcblxuICAgICAgLy8gcmVsYXRpb25zaGlwIGNhbm5vdCBiZSByZXNvbHZlZCBpbW1lZGlhdGVseVxuICAgICAgcmVmZXJlbmNlc1sgZGVzY3JpcHRvci5kZWZhdWx0IF0gPSB7XG4gICAgICAgIGVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICBwcm9wZXJ0eTogJ2RlZmF1bHQnXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGJvdW5kYXJ5IGV2ZW50c1xuICAgIGlmIChkZXNjcmlwdG9yLmhvc3QpIHtcblxuICAgICAgLy8gcmVsYXRpb25zaGlwIGNhbiBiZSByZXNvbHZlZCBpbW1lZGlhdGVseVxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3QoZGVzY3JpcHRvcikuYXR0YWNoZWRUb1JlZiA9IGdldEJ1c2luZXNzT2JqZWN0KGNhY2hlWyBkZXNjcmlwdG9yLmhvc3QgXSk7XG4gICAgfVxuXG4gICAgcmVmZXJlbmNlcyA9IG9taXQocmVmZXJlbmNlcywgcmVkdWNlKHJlZmVyZW5jZXMsIGZ1bmN0aW9uKGFycmF5LCByZWZlcmVuY2UsIGtleSkge1xuICAgICAgdmFyIGVsZW1lbnQgPSByZWZlcmVuY2UuZWxlbWVudCxcbiAgICAgICAgICBwcm9wZXJ0eSA9IHJlZmVyZW5jZS5wcm9wZXJ0eTtcblxuICAgICAgaWYgKGtleSA9PT0gZGVzY3JpcHRvci5pZCkge1xuICAgICAgICBlbGVtZW50WyBwcm9wZXJ0eSBdID0gYnVzaW5lc3NPYmplY3Q7XG5cbiAgICAgICAgYXJyYXkucHVzaChkZXNjcmlwdG9yLmlkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH0sIFtdKSk7XG4gIH1cblxuICBldmVudEJ1cy5vbignY29weVBhc3RlLnBhc3RlRWxlbWVudHMnLCBmdW5jdGlvbigpIHtcbiAgICByZWZlcmVuY2VzID0ge307XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjb3B5UGFzdGUucGFzdGVFbGVtZW50JywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBjYWNoZSA9IGNvbnRleHQuY2FjaGUsXG4gICAgICAgIGRlc2NyaXB0b3IgPSBjb250ZXh0LmRlc2NyaXB0b3IsXG4gICAgICAgIG9sZEJ1c2luZXNzT2JqZWN0ID0gZGVzY3JpcHRvci5vbGRCdXNpbmVzc09iamVjdCxcbiAgICAgICAgbmV3QnVzaW5lc3NPYmplY3Q7XG5cbiAgICAvLyBkbyBOT1QgY29weSBidXNpbmVzcyBvYmplY3QgaWYgZXh0ZXJuYWwgbGFiZWxcbiAgICBpZiAoaXNMYWJlbChkZXNjcmlwdG9yKSkge1xuICAgICAgZGVzY3JpcHRvci5idXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGNhY2hlWyBkZXNjcmlwdG9yLmxhYmVsVGFyZ2V0IF0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbmV3QnVzaW5lc3NPYmplY3QgPSBicG1uRmFjdG9yeS5jcmVhdGUob2xkQnVzaW5lc3NPYmplY3QuJHR5cGUpO1xuXG4gICAgZGVzY3JpcHRvci5idXNpbmVzc09iamVjdCA9IG1vZGRsZUNvcHkuY29weUVsZW1lbnQoXG4gICAgICBvbGRCdXNpbmVzc09iamVjdCxcbiAgICAgIG5ld0J1c2luZXNzT2JqZWN0XG4gICAgKTtcblxuICAgIC8vIHJlc29sdmUgcmVmZXJlbmNlcyBlLmcuIGRlZmF1bHQgc2VxdWVuY2UgZmxvd1xuICAgIHJlc29sdmVSZWZlcmVuY2VzKGRlc2NyaXB0b3IsIGNhY2hlKTtcblxuICAgIGNvcHlQcm9wZXJ0aWVzKGRlc2NyaXB0b3IsIG5ld0J1c2luZXNzT2JqZWN0LCBbXG4gICAgICAnaXNFeHBhbmRlZCcsXG4gICAgICAnbmFtZSdcbiAgICBdKTtcblxuICAgIHJlbW92ZVByb3BlcnRpZXMoZGVzY3JpcHRvciwgJ29sZEJ1c2luZXNzT2JqZWN0Jyk7XG4gIH0pO1xuXG59XG5cblxuQnBtbkNvcHlQYXN0ZS4kaW5qZWN0ID0gW1xuICAnYnBtbkZhY3RvcnknLFxuICAnZXZlbnRCdXMnLFxuICAnbW9kZGxlQ29weSdcbl07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc0xhYmVsKGVsZW1lbnQpIHtcbiAgcmV0dXJuICEhZWxlbWVudC5sYWJlbFRhcmdldDtcbn1cbiIsImltcG9ydCB7XG4gIGZpbmQsXG4gIGZvckVhY2gsXG4gIGlzQXJyYXksXG4gIGlzRGVmaW5lZCxcbiAgaXNPYmplY3QsXG4gIG1hdGNoUGF0dGVybixcbiAgcmVkdWNlLFxuICBoYXMsXG4gIHNvcnRCeVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciBESVNBTExPV0VEX1BST1BFUlRJRVMgPSBbXG4gICdhcnRpZmFjdHMnLFxuICAnZGF0YUlucHV0QXNzb2NpYXRpb25zJyxcbiAgJ2RhdGFPdXRwdXRBc3NvY2lhdGlvbnMnLFxuICAnZGVmYXVsdCcsXG4gICdmbG93RWxlbWVudHMnLFxuICAnbGFuZXMnLFxuICAnaW5jb21pbmcnLFxuICAnb3V0Z29pbmcnXG5dO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gPG1vZGRsZUNvcHkuY2FuQ29weVByb3BlcnRpZXM+IGxpc3RlbmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gY29udGV4dC5wcm9wZXJ0eU5hbWVzXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGNvbnRleHQuc291cmNlRWxlbWVudFxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBjb250ZXh0LnRhcmdldEVsZW1lbnRcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPnxib29sZWFufSAtIFJldHVybiBwcm9wZXJ0aWVzIHRvIGJlIGNvcGllZCBvciBmYWxzZSB0byBkaXNhbGxvd1xuICogY29weWluZy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gPG1vZGRsZUNvcHkuY2FuQ29weVByb3BlcnR5PiBsaXN0ZW5lclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGNvbnRleHQucGFyZW50XG4gKiBAcGFyYW0geyp9IGNvbnRleHQucHJvcGVydHlcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZXh0LnByb3BlcnR5TmFtZVxuICpcbiAqIEByZXR1cm5zIHsqfGJvb2xlYW59IC0gUmV0dXJuIGNvcGllZCBwcm9wZXJ0eSBvciBmYWxzZSB0byBkaXNhbGxvd1xuICogY29weWluZy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gPG1vZGRsZUNvcHkuY2FuU2V0Q29waWVkUHJvcGVydHk+IGxpc3RlbmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gY29udGV4dC5wYXJlbnRcbiAqIEBwYXJhbSB7Kn0gY29udGV4dC5wcm9wZXJ0eVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRleHQucHJvcGVydHlOYW1lXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IC0gUmV0dXJuIGZhbHNlIHRvIGRpc2FsbG93XG4gKiBzZXR0aW5nIGNvcGllZCBwcm9wZXJ0eS5cbiAqL1xuXG4vKipcbiAqIFV0aWxpdHkgZm9yIGNvcHlpbmcgbW9kZWwgcHJvcGVydGllcyBmcm9tIHNvdXJjZSBlbGVtZW50IHRvIHRhcmdldCBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICogQHBhcmFtIHtCcG1uTW9kZGxlfSBtb2RkbGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW9kZGxlQ29weShldmVudEJ1cywgYnBtbkZhY3RvcnksIG1vZGRsZSkge1xuICB0aGlzLl9icG1uRmFjdG9yeSA9IGJwbW5GYWN0b3J5O1xuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB0aGlzLl9tb2RkbGUgPSBtb2RkbGU7XG5cbiAgLy8gY29weSBleHRlbnNpb24gZWxlbWVudHMgbGFzdFxuICBldmVudEJ1cy5vbignbW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydGllcycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgcHJvcGVydHlOYW1lcyA9IGNvbnRleHQucHJvcGVydHlOYW1lcztcblxuICAgIGlmICghcHJvcGVydHlOYW1lcyB8fCAhcHJvcGVydHlOYW1lcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gc29ydEJ5KHByb3BlcnR5TmFtZXMsIGZ1bmN0aW9uKHByb3BlcnR5TmFtZSkge1xuICAgICAgcmV0dXJuIHByb3BlcnR5TmFtZSA9PT0gJ2V4dGVuc2lvbkVsZW1lbnRzJztcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gZGVmYXVsdCBjaGVjayB3aGV0aGVyIHByb3BlcnR5IGNhbiBiZSBjb3BpZWRcbiAgZXZlbnRCdXMub24oJ21vZGRsZUNvcHkuY2FuQ29weVByb3BlcnR5JywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcbiAgICAgICAgcGFyZW50RGVzY3JpcHRvciA9IGlzT2JqZWN0KHBhcmVudCkgJiYgcGFyZW50LiRkZXNjcmlwdG9yLFxuICAgICAgICBwcm9wZXJ0eU5hbWUgPSBjb250ZXh0LnByb3BlcnR5TmFtZTtcblxuICAgIGlmIChwcm9wZXJ0eU5hbWUgJiYgRElTQUxMT1dFRF9QUk9QRVJUSUVTLmluZGV4T2YocHJvcGVydHlOYW1lKSAhPT0gLTEpIHtcblxuICAgICAgLy8gZGlzYWxsb3cgY29weWluZyBwcm9wZXJ0eVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChwcm9wZXJ0eU5hbWUgJiZcbiAgICAgIHBhcmVudERlc2NyaXB0b3IgJiZcbiAgICAgICFmaW5kKHBhcmVudERlc2NyaXB0b3IucHJvcGVydGllcywgbWF0Y2hQYXR0ZXJuKHsgbmFtZTogcHJvcGVydHlOYW1lIH0pKSkge1xuXG4gICAgICAvLyBkaXNhbGxvdyBjb3B5aW5nIHByb3BlcnR5XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcblxuICAvLyBkbyBOT1QgYWxsb3cgdG8gY29weSBlbXB0eSBleHRlbnNpb24gZWxlbWVudHNcbiAgZXZlbnRCdXMub24oJ21vZGRsZUNvcHkuY2FuU2V0Q29waWVkUHJvcGVydHknLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHByb3BlcnR5ID0gY29udGV4dC5wcm9wZXJ0eTtcblxuICAgIGlmIChpcyhwcm9wZXJ0eSwgJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnKSAmJiAoIXByb3BlcnR5LnZhbHVlcyB8fCAhcHJvcGVydHkudmFsdWVzLmxlbmd0aCkpIHtcblxuICAgICAgLy8gZGlzYWxsb3cgc2V0dGluZyBjb3BpZWQgcHJvcGVydHlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xufVxuXG5Nb2RkbGVDb3B5LiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdicG1uRmFjdG9yeScsXG4gICdtb2RkbGUnXG5dO1xuXG4vKipcbiAqIENvcHkgbW9kZWwgcHJvcGVydGllcyBvZiBzb3VyY2UgZWxlbWVudCB0byB0YXJnZXQgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IHNvdXJjZUVsZW1lbnRcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gdGFyZ2V0RWxlbWVudFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBbcHJvcGVydHlOYW1lc11cbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9XG4gKi9cbk1vZGRsZUNvcHkucHJvdG90eXBlLmNvcHlFbGVtZW50ID0gZnVuY3Rpb24oc291cmNlRWxlbWVudCwgdGFyZ2V0RWxlbWVudCwgcHJvcGVydHlOYW1lcykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgaWYgKHByb3BlcnR5TmFtZXMgJiYgIWlzQXJyYXkocHJvcGVydHlOYW1lcykpIHtcbiAgICBwcm9wZXJ0eU5hbWVzID0gWyBwcm9wZXJ0eU5hbWVzIF07XG4gIH1cblxuICBwcm9wZXJ0eU5hbWVzID0gcHJvcGVydHlOYW1lcyB8fCBnZXRQcm9wZXJ0eU5hbWVzKHNvdXJjZUVsZW1lbnQuJGRlc2NyaXB0b3IpO1xuXG4gIHZhciBjYW5Db3B5UHJvcGVydGllcyA9IHRoaXMuX2V2ZW50QnVzLmZpcmUoJ21vZGRsZUNvcHkuY2FuQ29weVByb3BlcnRpZXMnLCB7XG4gICAgcHJvcGVydHlOYW1lczogcHJvcGVydHlOYW1lcyxcbiAgICBzb3VyY2VFbGVtZW50OiBzb3VyY2VFbGVtZW50LFxuICAgIHRhcmdldEVsZW1lbnQ6IHRhcmdldEVsZW1lbnRcbiAgfSk7XG5cbiAgaWYgKGNhbkNvcHlQcm9wZXJ0aWVzID09PSBmYWxzZSkge1xuICAgIHJldHVybiB0YXJnZXRFbGVtZW50O1xuICB9XG5cbiAgaWYgKGlzQXJyYXkoY2FuQ29weVByb3BlcnRpZXMpKSB7XG4gICAgcHJvcGVydHlOYW1lcyA9IGNhbkNvcHlQcm9wZXJ0aWVzO1xuICB9XG5cbiAgLy8gY29weSBwcm9wZXJ0aWVzXG4gIGZvckVhY2gocHJvcGVydHlOYW1lcywgZnVuY3Rpb24ocHJvcGVydHlOYW1lKSB7XG4gICAgdmFyIHNvdXJjZVByb3BlcnR5O1xuXG4gICAgaWYgKGhhcyhzb3VyY2VFbGVtZW50LCBwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZUVsZW1lbnQuZ2V0KHByb3BlcnR5TmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIGNvcGllZFByb3BlcnR5ID0gc2VsZi5jb3B5UHJvcGVydHkoc291cmNlUHJvcGVydHksIHRhcmdldEVsZW1lbnQsIHByb3BlcnR5TmFtZSk7XG5cbiAgICB2YXIgY2FuU2V0UHJvcGVydHkgPSBzZWxmLl9ldmVudEJ1cy5maXJlKCdtb2RkbGVDb3B5LmNhblNldENvcGllZFByb3BlcnR5Jywge1xuICAgICAgcGFyZW50OiB0YXJnZXRFbGVtZW50LFxuICAgICAgcHJvcGVydHk6IGNvcGllZFByb3BlcnR5LFxuICAgICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWVcbiAgICB9KTtcblxuICAgIGlmIChjYW5TZXRQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNEZWZpbmVkKGNvcGllZFByb3BlcnR5KSkge1xuICAgICAgdGFyZ2V0RWxlbWVudC5zZXQocHJvcGVydHlOYW1lLCBjb3BpZWRQcm9wZXJ0eSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGFyZ2V0RWxlbWVudDtcbn07XG5cbi8qKlxuICogQ29weSBtb2RlbCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0geyp9IHByb3BlcnR5XG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5TmFtZVxuICpcbiAqIEByZXR1cm5zIHsqfVxuICovXG5Nb2RkbGVDb3B5LnByb3RvdHlwZS5jb3B5UHJvcGVydHkgPSBmdW5jdGlvbihwcm9wZXJ0eSwgcGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8vIGFsbG93IG90aGVycyB0byBjb3B5IHByb3BlcnR5XG4gIHZhciBjb3BpZWRQcm9wZXJ0eSA9IHRoaXMuX2V2ZW50QnVzLmZpcmUoJ21vZGRsZUNvcHkuY2FuQ29weVByb3BlcnR5Jywge1xuICAgIHBhcmVudDogcGFyZW50LFxuICAgIHByb3BlcnR5OiBwcm9wZXJ0eSxcbiAgICBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5TmFtZVxuICB9KTtcblxuICAvLyByZXR1cm4gaWYgY29weWluZyBpcyBOT1QgYWxsb3dlZFxuICBpZiAoY29waWVkUHJvcGVydHkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNvcGllZFByb3BlcnR5KSB7XG4gICAgaWYgKGlzT2JqZWN0KGNvcGllZFByb3BlcnR5KSAmJiBjb3BpZWRQcm9wZXJ0eS4kdHlwZSAmJiAhY29waWVkUHJvcGVydHkuJHBhcmVudCkge1xuICAgICAgY29waWVkUHJvcGVydHkuJHBhcmVudCA9IHBhcmVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29waWVkUHJvcGVydHk7XG4gIH1cblxuICB2YXIgcHJvcGVydHlEZXNjcmlwdG9yID0gdGhpcy5fbW9kZGxlLmdldFByb3BlcnR5RGVzY3JpcHRvcihwYXJlbnQsIHByb3BlcnR5TmFtZSk7XG5cbiAgLy8gZG8gTk9UIGNvcHkgSWRzIGFuZCByZWZlcmVuY2VzXG4gIGlmIChwcm9wZXJ0eURlc2NyaXB0b3IuaXNJZCB8fCBwcm9wZXJ0eURlc2NyaXB0b3IuaXNSZWZlcmVuY2UpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBjb3B5IGFycmF5c1xuICBpZiAoaXNBcnJheShwcm9wZXJ0eSkpIHtcbiAgICByZXR1cm4gcmVkdWNlKHByb3BlcnR5LCBmdW5jdGlvbihjaGlsZFByb3BlcnRpZXMsIGNoaWxkUHJvcGVydHkpIHtcblxuICAgICAgLy8gcmVjdXJzaW9uXG4gICAgICBjb3BpZWRQcm9wZXJ0eSA9IHNlbGYuY29weVByb3BlcnR5KGNoaWxkUHJvcGVydHksIHBhcmVudCwgcHJvcGVydHlOYW1lKTtcblxuICAgICAgLy8gY29weWluZyBtaWdodCBOT1QgYmUgYWxsb3dlZFxuICAgICAgaWYgKGNvcGllZFByb3BlcnR5KSB7XG4gICAgICAgIGNvcGllZFByb3BlcnR5LiRwYXJlbnQgPSBwYXJlbnQ7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkUHJvcGVydGllcy5jb25jYXQoY29waWVkUHJvcGVydHkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2hpbGRQcm9wZXJ0aWVzO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIC8vIGNvcHkgbW9kZWwgZWxlbWVudHNcbiAgaWYgKGlzT2JqZWN0KHByb3BlcnR5KSAmJiBwcm9wZXJ0eS4kdHlwZSkge1xuICAgIGlmICh0aGlzLl9tb2RkbGUuZ2V0RWxlbWVudERlc2NyaXB0b3IocHJvcGVydHkpLmlzR2VuZXJpYykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcGllZFByb3BlcnR5ID0gc2VsZi5fYnBtbkZhY3RvcnkuY3JlYXRlKHByb3BlcnR5LiR0eXBlKTtcblxuICAgIGNvcGllZFByb3BlcnR5LiRwYXJlbnQgPSBwYXJlbnQ7XG5cbiAgICAvLyByZWN1cnNpb25cbiAgICBjb3BpZWRQcm9wZXJ0eSA9IHNlbGYuY29weUVsZW1lbnQocHJvcGVydHksIGNvcGllZFByb3BlcnR5KTtcblxuICAgIHJldHVybiBjb3BpZWRQcm9wZXJ0eTtcbiAgfVxuXG4gIC8vIGNvcHkgcHJpbWl0aXZlIHByb3BlcnRpZXNcbiAgcmV0dXJuIHByb3BlcnR5O1xufTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wZXJ0eU5hbWVzKGRlc2NyaXB0b3IsIGtlZXBEZWZhdWx0UHJvcGVydGllcykge1xuICByZXR1cm4gcmVkdWNlKGRlc2NyaXB0b3IucHJvcGVydGllcywgZnVuY3Rpb24ocHJvcGVydGllcywgcHJvcGVydHkpIHtcblxuICAgIGlmIChrZWVwRGVmYXVsdFByb3BlcnRpZXMgJiYgcHJvcGVydHkuZGVmYXVsdCkge1xuICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXMuY29uY2F0KHByb3BlcnR5Lm5hbWUpO1xuICB9LCBbXSk7XG59XG5cbmZ1bmN0aW9uIGlzKGVsZW1lbnQsIHR5cGUpIHtcbiAgcmV0dXJuIGVsZW1lbnQgJiYgKHR5cGVvZiBlbGVtZW50LiRpbnN0YW5jZU9mID09PSAnZnVuY3Rpb24nKSAmJiBlbGVtZW50LiRpbnN0YW5jZU9mKHR5cGUpO1xufSIsImltcG9ydCBDb3B5UGFzdGVNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY29weS1wYXN0ZSc7XG5cbmltcG9ydCBCcG1uQ29weVBhc3RlIGZyb20gJy4vQnBtbkNvcHlQYXN0ZSc7XG5pbXBvcnQgTW9kZGxlQ29weSBmcm9tICcuL01vZGRsZUNvcHknO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgQ29weVBhc3RlTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdicG1uQ29weVBhc3RlJywgJ21vZGRsZUNvcHknIF0sXG4gIGJwbW5Db3B5UGFzdGU6IFsgJ3R5cGUnLCBCcG1uQ29weVBhc3RlIF0sXG4gIG1vZGRsZUNvcHk6IFsgJ3R5cGUnLCBNb2RkbGVDb3B5IF1cbn07XG4iLCJpbXBvcnQgeyBnZXREaSB9IGZyb20gJy4uLy4uL2RyYXcvQnBtblJlbmRlclV0aWwnO1xuaW1wb3J0IHsgZ2V0QnVzaW5lc3NPYmplY3QgfSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGZpbHRlcixcbiAgbWFwXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHsgc2VsZkFuZEFsbENoaWxkcmVuIH0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9FbGVtZW50cyc7XG5cblxudmFyIEhJR0hfUFJJT1JJVFkgPSAyMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uRGlPcmRlcmluZyhldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgZXZlbnRCdXMub24oJ3NhdmVYTUwuc3RhcnQnLCBISUdIX1BSSU9SSVRZLCBvcmRlckRpKTtcblxuICBmdW5jdGlvbiBvcmRlckRpKCkge1xuICAgIHZhciByb290ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgICAgIHJvb3REaSA9IGdldEJ1c2luZXNzT2JqZWN0KHJvb3QpLmRpLFxuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgZGlFbGVtZW50cztcblxuICAgIGVsZW1lbnRzID0gc2VsZkFuZEFsbENoaWxkcmVuKFsgcm9vdCBdLCBmYWxzZSk7XG5cbiAgICAvLyBvbmx5IGJwbW5kaTpTaGFwZSBhbmQgYnBtbmRpOkVkZ2UgY2FuIGJlIGRpcmVjdCBjaGlsZHJlbiBvZiBicG1uZGk6UGxhbmVcbiAgICBlbGVtZW50cyA9IGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQgIT09IHJvb3QgJiYgIWVsZW1lbnQubGFiZWxUYXJnZXQ7XG4gICAgfSk7XG5cbiAgICBkaUVsZW1lbnRzID0gbWFwKGVsZW1lbnRzLCBnZXREaSk7XG5cbiAgICByb290RGkuc2V0KCdwbGFuZUVsZW1lbnQnLCBkaUVsZW1lbnRzKTtcbiAgfVxufVxuXG5CcG1uRGlPcmRlcmluZy4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnLCAnY2FudmFzJyBdO1xuIiwiaW1wb3J0IEJwbW5EaU9yZGVyaW5nIGZyb20gJy4uL2RpLW9yZGVyaW5nL0JwbW5EaU9yZGVyaW5nJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogW1xuICAgICdicG1uRGlPcmRlcmluZydcbiAgXSxcbiAgYnBtbkRpT3JkZXJpbmc6IFsgJ3R5cGUnLCBCcG1uRGlPcmRlcmluZyBdXG59OyIsImltcG9ydCB7XG4gIGZpbHRlclxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGlzQW55XG59IGZyb20gJy4uL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsJztcblxuXG4vKipcbiAqIFJlZ2lzdGVycyBlbGVtZW50IGV4Y2x1ZGUgZmlsdGVycyBmb3IgZWxlbWVudHMgdGhhdFxuICogY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IGRpc3RyaWJ1dGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkRpc3RyaWJ1dGVFbGVtZW50cyhkaXN0cmlidXRlRWxlbWVudHMpIHtcblxuICBkaXN0cmlidXRlRWxlbWVudHMucmVnaXN0ZXJGaWx0ZXIoZnVuY3Rpb24oZWxlbWVudHMpIHtcbiAgICByZXR1cm4gZmlsdGVyKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICB2YXIgY2Fubm90RGlzdHJpYnV0ZSA9IGlzQW55KGVsZW1lbnQsIFtcbiAgICAgICAgJ2JwbW46QXNzb2NpYXRpb24nLFxuICAgICAgICAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgICAgJ2JwbW46RGF0YUlucHV0QXNzb2NpYXRpb24nLFxuICAgICAgICAnYnBtbjpEYXRhT3V0cHV0QXNzb2NpYXRpb24nLFxuICAgICAgICAnYnBtbjpMYW5lJyxcbiAgICAgICAgJ2JwbW46TWVzc2FnZUZsb3cnLFxuICAgICAgICAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgICAgICdicG1uOlNlcXVlbmNlRmxvdycsXG4gICAgICAgICdicG1uOlRleHRBbm5vdGF0aW9uJ1xuICAgICAgXSk7XG5cbiAgICAgIHJldHVybiAhKGVsZW1lbnQubGFiZWxUYXJnZXQgfHwgY2Fubm90RGlzdHJpYnV0ZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5CcG1uRGlzdHJpYnV0ZUVsZW1lbnRzLiRpbmplY3QgPSBbICdkaXN0cmlidXRlRWxlbWVudHMnIF07IiwiaW1wb3J0IERpc3RyaWJ1dGVFbGVtZW50c01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9kaXN0cmlidXRlLWVsZW1lbnRzJztcblxuaW1wb3J0IEJwbW5EaXN0cmlidXRlRWxlbWVudHMgZnJvbSAnLi9CcG1uRGlzdHJpYnV0ZUVsZW1lbnRzJztcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgRGlzdHJpYnV0ZUVsZW1lbnRzTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdicG1uRGlzdHJpYnV0ZUVsZW1lbnRzJyBdLFxuICBicG1uRGlzdHJpYnV0ZUVsZW1lbnRzOiBbICd0eXBlJywgQnBtbkRpc3RyaWJ1dGVFbGVtZW50cyBdXG59O1xuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IEVkaXRvckFjdGlvbnMgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZWRpdG9yLWFjdGlvbnMvRWRpdG9yQWN0aW9ucyc7XG5cbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldEJCb3hcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9FbGVtZW50cyc7XG5cblxuLyoqXG4gKiBSZWdpc3RlcnMgYW5kIGV4ZWN1dGVzIEJQTU4gc3BlY2lmaWMgZWRpdG9yIGFjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkVkaXRvckFjdGlvbnMoaW5qZWN0b3IpIHtcbiAgaW5qZWN0b3IuaW52b2tlKEVkaXRvckFjdGlvbnMsIHRoaXMpO1xufVxuXG5pbmhlcml0cyhCcG1uRWRpdG9yQWN0aW9ucywgRWRpdG9yQWN0aW9ucyk7XG5cbkJwbW5FZGl0b3JBY3Rpb25zLiRpbmplY3QgPSBbXG4gICdpbmplY3Rvcidcbl07XG5cbi8qKlxuICogUmVnaXN0ZXIgZGVmYXVsdCBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXG4gKi9cbkJwbW5FZGl0b3JBY3Rpb25zLnByb3RvdHlwZS5fcmVnaXN0ZXJEZWZhdWx0QWN0aW9ucyA9IGZ1bmN0aW9uKGluamVjdG9yKSB7XG5cbiAgLy8gKDApIGludm9rZSBzdXBlciBtZXRob2RcblxuICBFZGl0b3JBY3Rpb25zLnByb3RvdHlwZS5fcmVnaXN0ZXJEZWZhdWx0QWN0aW9ucy5jYWxsKHRoaXMsIGluamVjdG9yKTtcblxuICAvLyAoMSkgcmV0cmlldmUgb3B0aW9uYWwgY29tcG9uZW50cyB0byBpbnRlZ3JhdGUgd2l0aFxuXG4gIHZhciBjYW52YXMgPSBpbmplY3Rvci5nZXQoJ2NhbnZhcycsIGZhbHNlKTtcbiAgdmFyIGVsZW1lbnRSZWdpc3RyeSA9IGluamVjdG9yLmdldCgnZWxlbWVudFJlZ2lzdHJ5JywgZmFsc2UpO1xuICB2YXIgc2VsZWN0aW9uID0gaW5qZWN0b3IuZ2V0KCdzZWxlY3Rpb24nLCBmYWxzZSk7XG4gIHZhciBzcGFjZVRvb2wgPSBpbmplY3Rvci5nZXQoJ3NwYWNlVG9vbCcsIGZhbHNlKTtcbiAgdmFyIGxhc3NvVG9vbCA9IGluamVjdG9yLmdldCgnbGFzc29Ub29sJywgZmFsc2UpO1xuICB2YXIgaGFuZFRvb2wgPSBpbmplY3Rvci5nZXQoJ2hhbmRUb29sJywgZmFsc2UpO1xuICB2YXIgZ2xvYmFsQ29ubmVjdCA9IGluamVjdG9yLmdldCgnZ2xvYmFsQ29ubmVjdCcsIGZhbHNlKTtcbiAgdmFyIGRpc3RyaWJ1dGVFbGVtZW50cyA9IGluamVjdG9yLmdldCgnZGlzdHJpYnV0ZUVsZW1lbnRzJywgZmFsc2UpO1xuICB2YXIgYWxpZ25FbGVtZW50cyA9IGluamVjdG9yLmdldCgnYWxpZ25FbGVtZW50cycsIGZhbHNlKTtcbiAgdmFyIGRpcmVjdEVkaXRpbmcgPSBpbmplY3Rvci5nZXQoJ2RpcmVjdEVkaXRpbmcnLCBmYWxzZSk7XG4gIHZhciBzZWFyY2hQYWQgPSBpbmplY3Rvci5nZXQoJ3NlYXJjaFBhZCcsIGZhbHNlKTtcbiAgdmFyIG1vZGVsaW5nID0gaW5qZWN0b3IuZ2V0KCdtb2RlbGluZycsIGZhbHNlKTtcblxuICAvLyAoMikgY2hlY2sgY29tcG9uZW50cyBhbmQgcmVnaXN0ZXIgYWN0aW9uc1xuXG4gIGlmIChjYW52YXMgJiYgZWxlbWVudFJlZ2lzdHJ5ICYmIHNlbGVjdGlvbikge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdzZWxlY3RFbGVtZW50cycsIGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBzZWxlY3QgYWxsIGVsZW1lbnRzIGV4Y2VwdCBmb3IgdGhlIGludmlzaWJsZVxuICAgICAgLy8gcm9vdCBlbGVtZW50XG4gICAgICB2YXIgcm9vdEVsZW1lbnQgPSBjYW52YXMuZ2V0Um9vdEVsZW1lbnQoKTtcblxuICAgICAgdmFyIGVsZW1lbnRzID0gZWxlbWVudFJlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50ICE9PSByb290RWxlbWVudDtcbiAgICAgIH0pO1xuXG4gICAgICBzZWxlY3Rpb24uc2VsZWN0KGVsZW1lbnRzKTtcblxuICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHNwYWNlVG9vbCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdzcGFjZVRvb2wnLCBmdW5jdGlvbigpIHtcbiAgICAgIHNwYWNlVG9vbC50b2dnbGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChsYXNzb1Rvb2wpIHtcbiAgICB0aGlzLl9yZWdpc3RlckFjdGlvbignbGFzc29Ub29sJywgZnVuY3Rpb24oKSB7XG4gICAgICBsYXNzb1Rvb2wudG9nZ2xlKCk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaGFuZFRvb2wpIHtcbiAgICB0aGlzLl9yZWdpc3RlckFjdGlvbignaGFuZFRvb2wnLCBmdW5jdGlvbigpIHtcbiAgICAgIGhhbmRUb29sLnRvZ2dsZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGdsb2JhbENvbm5lY3QpIHtcbiAgICB0aGlzLl9yZWdpc3RlckFjdGlvbignZ2xvYmFsQ29ubmVjdFRvb2wnLCBmdW5jdGlvbigpIHtcbiAgICAgIGdsb2JhbENvbm5lY3QudG9nZ2xlKCk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoc2VsZWN0aW9uICYmIGRpc3RyaWJ1dGVFbGVtZW50cykge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdkaXN0cmlidXRlRWxlbWVudHMnLCBmdW5jdGlvbihvcHRzKSB7XG4gICAgICB2YXIgY3VycmVudFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5nZXQoKSxcbiAgICAgICAgICB0eXBlID0gb3B0cy50eXBlO1xuXG4gICAgICBpZiAoY3VycmVudFNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgZGlzdHJpYnV0ZUVsZW1lbnRzLnRyaWdnZXIoY3VycmVudFNlbGVjdGlvbiwgdHlwZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoc2VsZWN0aW9uICYmIGFsaWduRWxlbWVudHMpIHtcbiAgICB0aGlzLl9yZWdpc3RlckFjdGlvbignYWxpZ25FbGVtZW50cycsIGZ1bmN0aW9uKG9wdHMpIHtcbiAgICAgIHZhciBjdXJyZW50U2VsZWN0aW9uID0gc2VsZWN0aW9uLmdldCgpLFxuICAgICAgICAgIGFsaWduZWFibGVFbGVtZW50cyA9IFtdLFxuICAgICAgICAgIHR5cGUgPSBvcHRzLnR5cGU7XG5cbiAgICAgIGlmIChjdXJyZW50U2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICBhbGlnbmVhYmxlRWxlbWVudHMgPSBmaWx0ZXIoY3VycmVudFNlbGVjdGlvbiwgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgIHJldHVybiAhaXMoZWxlbWVudCwgJ2JwbW46TGFuZScpO1xuICAgICAgICB9KTtcblxuICAgICAgICBhbGlnbkVsZW1lbnRzLnRyaWdnZXIoYWxpZ25lYWJsZUVsZW1lbnRzLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChzZWxlY3Rpb24gJiYgbW9kZWxpbmcpIHtcbiAgICB0aGlzLl9yZWdpc3RlckFjdGlvbignc2V0Q29sb3InLCBmdW5jdGlvbihvcHRzKSB7XG4gICAgICB2YXIgY3VycmVudFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5nZXQoKTtcblxuICAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgIG1vZGVsaW5nLnNldENvbG9yKGN1cnJlbnRTZWxlY3Rpb24sIG9wdHMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHNlbGVjdGlvbiAmJiBkaXJlY3RFZGl0aW5nKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJBY3Rpb24oJ2RpcmVjdEVkaXRpbmcnLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjdXJyZW50U2VsZWN0aW9uID0gc2VsZWN0aW9uLmdldCgpO1xuXG4gICAgICBpZiAoY3VycmVudFNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgZGlyZWN0RWRpdGluZy5hY3RpdmF0ZShjdXJyZW50U2VsZWN0aW9uWzBdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChzZWFyY2hQYWQpIHtcbiAgICB0aGlzLl9yZWdpc3RlckFjdGlvbignZmluZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgc2VhcmNoUGFkLnRvZ2dsZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGNhbnZhcyAmJiBtb2RlbGluZykge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdtb3ZlVG9PcmlnaW4nLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpLFxuICAgICAgICAgIGJvdW5kaW5nQm94LFxuICAgICAgICAgIGVsZW1lbnRzO1xuXG4gICAgICBpZiAoaXMocm9vdEVsZW1lbnQsICdicG1uOkNvbGxhYm9yYXRpb24nKSkge1xuICAgICAgICBlbGVtZW50cyA9IGVsZW1lbnRSZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgIHJldHVybiBpcyhlbGVtZW50LnBhcmVudCwgJ2JwbW46Q29sbGFib3JhdGlvbicpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnRzID0gZWxlbWVudFJlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnQgIT09IHJvb3RFbGVtZW50ICYmICFpcyhlbGVtZW50LnBhcmVudCwgJ2JwbW46U3ViUHJvY2VzcycpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgYm91bmRpbmdCb3ggPSBnZXRCQm94KGVsZW1lbnRzKTtcblxuICAgICAgbW9kZWxpbmcubW92ZUVsZW1lbnRzKFxuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgeyB4OiAtYm91bmRpbmdCb3gueCwgeTogLWJvdW5kaW5nQm94LnkgfSxcbiAgICAgICAgcm9vdEVsZW1lbnRcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxufTsiLCJpbXBvcnQgRWRpdG9yQWN0aW9uc01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucyc7XG5cbmltcG9ydCBCcG1uRWRpdG9yQWN0aW9ucyBmcm9tICcuL0JwbW5FZGl0b3JBY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIEVkaXRvckFjdGlvbnNNb2R1bGVcbiAgXSxcbiAgZWRpdG9yQWN0aW9uczogWyAndHlwZScsIEJwbW5FZGl0b3JBY3Rpb25zIF1cbn07XG4iLCJpbXBvcnQgeyBpc0FueSB9IGZyb20gJy4uL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5HcmlkU25hcHBpbmcoZXZlbnRCdXMpIHtcclxuICBldmVudEJ1cy5vbihbXHJcbiAgICAnY3JlYXRlLmluaXQnLFxyXG4gICAgJ3NoYXBlLm1vdmUuaW5pdCdcclxuICBdLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIHNoYXBlID0gZXZlbnQuc2hhcGU7XHJcblxyXG4gICAgaWYgKGlzQW55KHNoYXBlLCBbXHJcbiAgICAgICdicG1uOlBhcnRpY2lwYW50JyxcclxuICAgICAgJ2JwbW46U3ViUHJvY2VzcycsXHJcbiAgICAgICdicG1uOlRleHRBbm5vdGF0aW9uJ1xyXG4gICAgXSkpIHtcclxuICAgICAgaWYgKCFjb250ZXh0LmdyaWRTbmFwcGluZ0NvbnRleHQpIHtcclxuICAgICAgICBjb250ZXh0LmdyaWRTbmFwcGluZ0NvbnRleHQgPSB7fTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29udGV4dC5ncmlkU25hcHBpbmdDb250ZXh0LnNuYXBMb2NhdGlvbiA9ICd0b3AtbGVmdCc7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbkJwbW5HcmlkU25hcHBpbmcuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdOyIsImltcG9ydCB7IGdldE5ld1NoYXBlUG9zaXRpb24gfSBmcm9tICcuLi8uLi9hdXRvLXBsYWNlL0JwbW5BdXRvUGxhY2VVdGlsJztcclxuXHJcbmltcG9ydCB7IGdldE1pZCB9IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcclxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG52YXIgSElHSF9QUklPUklUWSA9IDIwMDA7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQXV0b1BsYWNlQmVoYXZpb3IoZXZlbnRCdXMsIGdyaWRTbmFwcGluZykge1xyXG4gIGV2ZW50QnVzLm9uKCdhdXRvUGxhY2UnLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICB2YXIgc291cmNlID0gY29udGV4dC5zb3VyY2UsXHJcbiAgICAgICAgc291cmNlTWlkID0gZ2V0TWlkKHNvdXJjZSksXHJcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xyXG5cclxuICAgIHZhciBwb3NpdGlvbiA9IGdldE5ld1NoYXBlUG9zaXRpb24oc291cmNlLCBzaGFwZSk7XHJcblxyXG4gICAgWyAneCcsICd5JyBdLmZvckVhY2goZnVuY3Rpb24oYXhpcykge1xyXG4gICAgICB2YXIgb3B0aW9ucyA9IHt9O1xyXG5cclxuICAgICAgLy8gZG8gbm90IHNuYXAgaWYgeC95IGVxdWFsXHJcbiAgICAgIGlmIChwb3NpdGlvblsgYXhpcyBdID09PSBzb3VyY2VNaWRbIGF4aXMgXSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHBvc2l0aW9uWyBheGlzIF0gPiBzb3VyY2VNaWRbIGF4aXMgXSkge1xyXG4gICAgICAgIG9wdGlvbnMubWluID0gcG9zaXRpb25bIGF4aXMgXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvcHRpb25zLm1heCA9IHBvc2l0aW9uWyBheGlzIF07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xyXG5cclxuICAgICAgICBpZiAoaXNIb3Jpem9udGFsKGF4aXMpKSB7XHJcbiAgICAgICAgICBvcHRpb25zLm9mZnNldCA9IC1zaGFwZS53aWR0aCAvIDI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9wdGlvbnMub2Zmc2V0ID0gLXNoYXBlLmhlaWdodCAvIDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgcG9zaXRpb25bIGF4aXMgXSA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUocG9zaXRpb25bIGF4aXMgXSwgb3B0aW9ucyk7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gbXVzdCBiZSByZXR1cm5lZCB0byBiZSBjb25zaWRlcmVkIGJ5IGF1dG8gcGxhY2VcclxuICAgIHJldHVybiBwb3NpdGlvbjtcclxuICB9KTtcclxufVxyXG5cclxuQXV0b1BsYWNlQmVoYXZpb3IuJGluamVjdCA9IFtcclxuICAnZXZlbnRCdXMnLFxyXG4gICdncmlkU25hcHBpbmcnXHJcbl07XHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cclxuXHJcbmZ1bmN0aW9uIGlzSG9yaXpvbnRhbChheGlzKSB7XHJcbiAgcmV0dXJuIGF4aXMgPT09ICd4JztcclxufSIsImltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxudmFyIEhJR0hFUl9QUklPUklUWSA9IDE3NTA7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvcihjYW52YXMsIGV2ZW50QnVzLCBncmlkU25hcHBpbmcpIHtcclxuICBldmVudEJ1cy5vbihbXHJcbiAgICAnY3JlYXRlLnN0YXJ0JyxcclxuICAgICdzaGFwZS5tb3ZlLnN0YXJ0J1xyXG4gIF0sIEhJR0hFUl9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXHJcbiAgICAgICAgcm9vdEVsZW1lbnQgPSBjYW52YXMuZ2V0Um9vdEVsZW1lbnQoKTtcclxuXHJcbiAgICBpZiAoIWlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpIHx8XHJcbiAgICAgICFpcyhyb290RWxlbWVudCwgJ2JwbW46UHJvY2VzcycpIHx8XHJcbiAgICAgICFyb290RWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjcmVhdGVDb25zdHJhaW50cyA9IGNvbnRleHQuY3JlYXRlQ29uc3RyYWludHM7XHJcblxyXG4gICAgaWYgKCFjcmVhdGVDb25zdHJhaW50cykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgc2hhcGUud2lkdGggPSBncmlkU25hcHBpbmcuc25hcFZhbHVlKHNoYXBlLndpZHRoLCB7IG1pbjogc2hhcGUud2lkdGggfSk7XHJcbiAgICBzaGFwZS5oZWlnaHQgPSBncmlkU25hcHBpbmcuc25hcFZhbHVlKHNoYXBlLmhlaWdodCwgeyBtaW46IHNoYXBlLmhlaWdodCB9KTtcclxuICB9KTtcclxufVxyXG5cclxuQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvci4kaW5qZWN0ID0gW1xyXG4gICdjYW52YXMnLFxyXG4gICdldmVudEJ1cycsXHJcbiAgJ2dyaWRTbmFwcGluZydcclxuXTsiLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHsgcG9pbnRzQWxpZ25lZCB9IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvR2VvbWV0cnknO1xuXG5pbXBvcnQge1xuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG52YXIgSElHSF9QUklPUklUWSA9IDMwMDA7XG5cblxuLyoqXG4gKiBTbmFwcyBjb25uZWN0aW9ucyB3aXRoIE1hbmhhdHRhbiBsYXlvdXQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExheW91dENvbm5lY3Rpb25CZWhhdmlvcihldmVudEJ1cywgZ3JpZFNuYXBwaW5nLCBtb2RlbGluZykge1xuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgdGhpcy5fZ3JpZFNuYXBwaW5nID0gZ3JpZFNuYXBwaW5nO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLnBvc3RFeGVjdXRlZChbXG4gICAgJ2Nvbm5lY3Rpb24uY3JlYXRlJyxcbiAgICAnY29ubmVjdGlvbi5sYXlvdXQnXG4gIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge30sXG4gICAgICAgIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzO1xuXG4gICAgaWYgKGhpbnRzLmNvbm5lY3Rpb25TdGFydCB8fCBoaW50cy5jb25uZWN0aW9uRW5kIHx8IGhpbnRzLmNyZWF0ZUVsZW1lbnRzQmVoYXZpb3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFoYXNNaWRkbGVTZWdtZW50cyh3YXlwb2ludHMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbW9kZWxpbmcudXBkYXRlV2F5cG9pbnRzKGNvbm5lY3Rpb24sIHNlbGYuc25hcE1pZGRsZVNlZ21lbnRzKHdheXBvaW50cykpO1xuICB9KTtcbn1cblxuTGF5b3V0Q29ubmVjdGlvbkJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdncmlkU25hcHBpbmcnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5pbmhlcml0cyhMYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbi8qKlxuICogU25hcCBtaWRkbGUgc2VnbWVudHMgb2YgYSBnaXZlbiBjb25uZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8UG9pbnQ+fSB3YXlwb2ludHNcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8UG9pbnQ+fVxuICovXG5MYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IucHJvdG90eXBlLnNuYXBNaWRkbGVTZWdtZW50cyA9IGZ1bmN0aW9uKHdheXBvaW50cykge1xuICB2YXIgZ3JpZFNuYXBwaW5nID0gdGhpcy5fZ3JpZFNuYXBwaW5nLFxuICAgICAgc25hcHBlZDtcblxuICB3YXlwb2ludHMgPSB3YXlwb2ludHMuc2xpY2UoKTtcblxuICBmb3IgKHZhciBpID0gMTsgaSA8IHdheXBvaW50cy5sZW5ndGggLSAyOyBpKyspIHtcblxuICAgIHNuYXBwZWQgPSBzbmFwU2VnbWVudChncmlkU25hcHBpbmcsIHdheXBvaW50c1tpXSwgd2F5cG9pbnRzW2kgKyAxXSk7XG5cbiAgICB3YXlwb2ludHNbaV0gPSBzbmFwcGVkWzBdO1xuICAgIHdheXBvaW50c1tpICsgMV0gPSBzbmFwcGVkWzFdO1xuICB9XG5cbiAgcmV0dXJuIHdheXBvaW50cztcbn07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIGNvbm5lY3Rpb24gaGFzIGEgbWlkZGxlIHNlZ21lbnRzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHdheXBvaW50c1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBoYXNNaWRkbGVTZWdtZW50cyh3YXlwb2ludHMpIHtcbiAgcmV0dXJuIHdheXBvaW50cy5sZW5ndGggPiAzO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYW4gYWxpZ25tZW50IGlzIGhvcml6b250YWwuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFsaWduZWRcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaG9yaXpvbnRhbGx5QWxpZ25lZChhbGlnbmVkKSB7XG4gIHJldHVybiBhbGlnbmVkID09PSAnaCc7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhbiBhbGlnbm1lbnQgaXMgdmVydGljYWwuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFsaWduZWRcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gdmVydGljYWxseUFsaWduZWQoYWxpZ25lZCkge1xuICByZXR1cm4gYWxpZ25lZCA9PT0gJ3YnO1xufVxuXG4vKipcbiAqIEdldCBtaWRkbGUgc2VnbWVudHMgZnJvbSBhIGdpdmVuIGNvbm5lY3Rpb24uXG4gKlxuICogQHBhcmFtIHtBcnJheX0gd2F5cG9pbnRzXG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICovXG5mdW5jdGlvbiBzbmFwU2VnbWVudChncmlkU25hcHBpbmcsIHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCkge1xuXG4gIHZhciBhbGlnbmVkID0gcG9pbnRzQWxpZ25lZChzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQpO1xuXG4gIHZhciBzbmFwcGVkID0ge307XG5cbiAgaWYgKGhvcml6b250YWxseUFsaWduZWQoYWxpZ25lZCkpIHtcblxuICAgIC8vIHNuYXAgaG9yaXpvbnRhbGx5XG4gICAgc25hcHBlZC55ID0gZ3JpZFNuYXBwaW5nLnNuYXBWYWx1ZShzZWdtZW50U3RhcnQueSk7XG4gIH1cblxuICBpZiAodmVydGljYWxseUFsaWduZWQoYWxpZ25lZCkpIHtcblxuICAgIC8vIHNuYXAgdmVydGljYWxseVxuICAgIHNuYXBwZWQueCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUoc2VnbWVudFN0YXJ0LngpO1xuICB9XG5cbiAgaWYgKCd4JyBpbiBzbmFwcGVkIHx8ICd5JyBpbiBzbmFwcGVkKSB7XG4gICAgc2VnbWVudFN0YXJ0ID0gYXNzaWduKHt9LCBzZWdtZW50U3RhcnQsIHNuYXBwZWQpO1xuICAgIHNlZ21lbnRFbmQgPSBhc3NpZ24oe30sIHNlZ21lbnRFbmQsIHNuYXBwZWQpO1xuICB9XG5cbiAgcmV0dXJuIFsgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kIF07XG59IiwiaW1wb3J0IEF1dG9QbGFjZUJlaGF2aW9yIGZyb20gJy4vQXV0b1BsYWNlQmVoYXZpb3InO1xyXG5pbXBvcnQgQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvciBmcm9tICcuL0NyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3InO1xyXG5pbXBvcnQgTGF5b3V0Q29ubmVjdGlvbkJlaGF2aW9yIGZyb20gJy4vTGF5b3V0Q29ubmVjdGlvbkJlaGF2aW9yJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBfX2luaXRfXzogW1xyXG4gICAgJ2dyaWRTbmFwcGluZ0F1dG9QbGFjZUJlaGF2aW9yJyxcclxuICAgICdncmlkU25hcHBpbmdDcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yJyxcclxuICAgICdncmlkU25hcHBpbmdMYXlvdXRDb25uZWN0aW9uQmVoYXZpb3InLFxyXG4gIF0sXHJcbiAgZ3JpZFNuYXBwaW5nQXV0b1BsYWNlQmVoYXZpb3I6IFsgJ3R5cGUnLCBBdXRvUGxhY2VCZWhhdmlvciBdLFxyXG4gIGdyaWRTbmFwcGluZ0NyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3I6IFsgJ3R5cGUnLCBDcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yIF0sXHJcbiAgZ3JpZFNuYXBwaW5nTGF5b3V0Q29ubmVjdGlvbkJlaGF2aW9yOiBbICd0eXBlJywgTGF5b3V0Q29ubmVjdGlvbkJlaGF2aW9yIF1cclxufTsiLCJpbXBvcnQgQnBtbkdyaWRTbmFwcGluZyBmcm9tICcuL0JwbW5HcmlkU25hcHBpbmcnO1xyXG5pbXBvcnQgR3JpZFNuYXBwaW5nTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2dyaWQtc25hcHBpbmcnO1xyXG5cclxuaW1wb3J0IEdyaWRTbmFwcGluZ0JlaGF2aW9yTW9kdWxlIGZyb20gJy4vYmVoYXZpb3InO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIF9fZGVwZW5kc19fOiBbXHJcbiAgICBHcmlkU25hcHBpbmdNb2R1bGUsXHJcbiAgICBHcmlkU25hcHBpbmdCZWhhdmlvck1vZHVsZVxyXG4gIF0sXHJcbiAgX19pbml0X186IFsgJ2JwbW5HcmlkU25hcHBpbmcnIF0sXHJcbiAgYnBtbkdyaWRTbmFwcGluZzogWyAndHlwZScsIEJwbW5HcmlkU25hcHBpbmcgXVxyXG59OyIsImltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQgeyBpc0V4cGFuZGVkIH0gZnJvbSAnLi4vLi4vdXRpbC9EaVV0aWwnO1xuXG52YXIgTEFCRUxfV0lEVEggPSAzMCxcbiAgICBMQUJFTF9IRUlHSFQgPSAzMDtcblxuXG4vKipcbiAqIEJQTU4tc3BlY2lmaWMgaGl0IHpvbmVzIGFuZCBpbnRlcmFjdGlvbiBmaXhlcy5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtJbnRlcmFjdGlvbkV2ZW50c30gaW50ZXJhY3Rpb25FdmVudHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkludGVyYWN0aW9uRXZlbnRzKGV2ZW50QnVzLCBpbnRlcmFjdGlvbkV2ZW50cykge1xuXG4gIHRoaXMuX2ludGVyYWN0aW9uRXZlbnRzID0gaW50ZXJhY3Rpb25FdmVudHM7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnaW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlSGl0JyxcbiAgICAnaW50ZXJhY3Rpb25FdmVudHMudXBkYXRlSGl0J1xuICBdLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICAgIGdmeCA9IGNvbnRleHQuZ2Z4O1xuXG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkxhbmUnKSkge1xuICAgICAgcmV0dXJuIHNlbGYuY3JlYXRlUGFydGljaXBhbnRIaXQoZWxlbWVudCwgZ2Z4KTtcbiAgICB9IGVsc2VcblxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgICBpZiAoaXNFeHBhbmRlZChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gc2VsZi5jcmVhdGVQYXJ0aWNpcGFudEhpdChlbGVtZW50LCBnZngpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuY3JlYXRlRGVmYXVsdEhpdChlbGVtZW50LCBnZngpO1xuICAgICAgfVxuICAgIH0gZWxzZVxuXG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlN1YlByb2Nlc3MnKSkge1xuICAgICAgaWYgKGlzRXhwYW5kZWQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuY3JlYXRlU3ViUHJvY2Vzc0hpdChlbGVtZW50LCBnZngpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuY3JlYXRlRGVmYXVsdEhpdChlbGVtZW50LCBnZngpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbn1cblxuQnBtbkludGVyYWN0aW9uRXZlbnRzLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdpbnRlcmFjdGlvbkV2ZW50cydcbl07XG5cblxuQnBtbkludGVyYWN0aW9uRXZlbnRzLnByb3RvdHlwZS5jcmVhdGVEZWZhdWx0SGl0ID0gZnVuY3Rpb24oZWxlbWVudCwgZ2Z4KSB7XG4gIHRoaXMuX2ludGVyYWN0aW9uRXZlbnRzLnJlbW92ZUhpdHMoZ2Z4KTtcblxuICB0aGlzLl9pbnRlcmFjdGlvbkV2ZW50cy5jcmVhdGVEZWZhdWx0SGl0KGVsZW1lbnQsIGdmeCk7XG5cbiAgLy8gaW5kaWNhdGUgdGhhdCB3ZSBjcmVhdGVkIGEgaGl0XG4gIHJldHVybiB0cnVlO1xufTtcblxuQnBtbkludGVyYWN0aW9uRXZlbnRzLnByb3RvdHlwZS5jcmVhdGVQYXJ0aWNpcGFudEhpdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGdmeCkge1xuXG4gIC8vIHJlbW92ZSBleGlzdGluZyBoaXRzXG4gIHRoaXMuX2ludGVyYWN0aW9uRXZlbnRzLnJlbW92ZUhpdHMoZ2Z4KTtcblxuICAvLyBhZGQgb3V0bGluZSBoaXRcbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlQm94SGl0KGdmeCwgJ2NsaWNrLXN0cm9rZScsIHtcbiAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0XG4gIH0pO1xuXG4gIC8vIGFkZCBsYWJlbCBoaXRcbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlQm94SGl0KGdmeCwgJ2FsbCcsIHtcbiAgICB3aWR0aDogTEFCRUxfV0lEVEgsXG4gICAgaGVpZ2h0OiBlbGVtZW50LmhlaWdodFxuICB9KTtcblxuICAvLyBpbmRpY2F0ZSB0aGF0IHdlIGNyZWF0ZWQgYSBoaXRcbiAgcmV0dXJuIHRydWU7XG59O1xuXG5CcG1uSW50ZXJhY3Rpb25FdmVudHMucHJvdG90eXBlLmNyZWF0ZVN1YlByb2Nlc3NIaXQgPSBmdW5jdGlvbihlbGVtZW50LCBnZngpIHtcblxuICAvLyByZW1vdmUgZXhpc3RpbmcgaGl0c1xuICB0aGlzLl9pbnRlcmFjdGlvbkV2ZW50cy5yZW1vdmVIaXRzKGdmeCk7XG5cbiAgLy8gYWRkIG91dGxpbmUgaGl0XG4gIHRoaXMuX2ludGVyYWN0aW9uRXZlbnRzLmNyZWF0ZUJveEhpdChnZngsICdjbGljay1zdHJva2UnLCB7XG4gICAgd2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgaGVpZ2h0OiBlbGVtZW50LmhlaWdodFxuICB9KTtcblxuICAvLyBhZGQgbGFiZWwgaGl0XG4gIHRoaXMuX2ludGVyYWN0aW9uRXZlbnRzLmNyZWF0ZUJveEhpdChnZngsICdhbGwnLCB7XG4gICAgd2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgaGVpZ2h0OiBMQUJFTF9IRUlHSFRcbiAgfSk7XG5cbiAgLy8gaW5kaWNhdGUgdGhhdCB3ZSBjcmVhdGVkIGEgaGl0XG4gIHJldHVybiB0cnVlO1xufTsiLCJpbXBvcnQgQnBtbkludGVyYWN0aW9uRXZlbnRzIGZyb20gJy4vQnBtbkludGVyYWN0aW9uRXZlbnRzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAnYnBtbkludGVyYWN0aW9uRXZlbnRzJyBdLFxuICBicG1uSW50ZXJhY3Rpb25FdmVudHM6IFsgJ3R5cGUnLCBCcG1uSW50ZXJhY3Rpb25FdmVudHMgXVxufTsiLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgS2V5Ym9hcmRCaW5kaW5ncyBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9rZXlib2FyZC9LZXlib2FyZEJpbmRpbmdzJztcblxuXG4vKipcbiAqIEJQTU4gMi4wIHNwZWNpZmljIGtleWJvYXJkIGJpbmRpbmdzLlxuICpcbiAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5LZXlib2FyZEJpbmRpbmdzKGluamVjdG9yKSB7XG4gIGluamVjdG9yLmludm9rZShLZXlib2FyZEJpbmRpbmdzLCB0aGlzKTtcbn1cblxuaW5oZXJpdHMoQnBtbktleWJvYXJkQmluZGluZ3MsIEtleWJvYXJkQmluZGluZ3MpO1xuXG5CcG1uS2V5Ym9hcmRCaW5kaW5ncy4kaW5qZWN0ID0gW1xuICAnaW5qZWN0b3InXG5dO1xuXG5cbi8qKlxuICogUmVnaXN0ZXIgYXZhaWxhYmxlIGtleWJvYXJkIGJpbmRpbmdzLlxuICpcbiAqIEBwYXJhbSB7S2V5Ym9hcmR9IGtleWJvYXJkXG4gKiBAcGFyYW0ge0VkaXRvckFjdGlvbnN9IGVkaXRvckFjdGlvbnNcbiAqL1xuQnBtbktleWJvYXJkQmluZGluZ3MucHJvdG90eXBlLnJlZ2lzdGVyQmluZGluZ3MgPSBmdW5jdGlvbihrZXlib2FyZCwgZWRpdG9yQWN0aW9ucykge1xuXG4gIC8vIGluaGVyaXQgZGVmYXVsdCBiaW5kaW5nc1xuICBLZXlib2FyZEJpbmRpbmdzLnByb3RvdHlwZS5yZWdpc3RlckJpbmRpbmdzLmNhbGwodGhpcywga2V5Ym9hcmQsIGVkaXRvckFjdGlvbnMpO1xuXG4gIC8qKlxuICAgKiBBZGQga2V5Ym9hcmQgYmluZGluZyBpZiByZXNwZWN0aXZlIGVkaXRvciBhY3Rpb25cbiAgICogaXMgcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbiBuYW1lXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRoYXQgaW1wbGVtZW50cyB0aGUga2V5IGJpbmRpbmdcbiAgICovXG4gIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGFjdGlvbiwgZm4pIHtcblxuICAgIGlmIChlZGl0b3JBY3Rpb25zLmlzUmVnaXN0ZXJlZChhY3Rpb24pKSB7XG4gICAgICBrZXlib2FyZC5hZGRMaXN0ZW5lcihmbik7XG4gICAgfVxuICB9XG5cbiAgLy8gc2VsZWN0IGFsbCBlbGVtZW50c1xuICAvLyBDVFJMICsgQVxuICBhZGRMaXN0ZW5lcignc2VsZWN0RWxlbWVudHMnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGtleWJvYXJkLmlzS2V5KFsnYScsICdBJ10sIGV2ZW50KSAmJiBrZXlib2FyZC5pc0NtZChldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignc2VsZWN0RWxlbWVudHMnKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyBzZWFyY2ggbGFiZWxzXG4gIC8vIENUUkwgKyBGXG4gIGFkZExpc3RlbmVyKCdmaW5kJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChrZXlib2FyZC5pc0tleShbJ2YnLCAnRiddLCBldmVudCkgJiYga2V5Ym9hcmQuaXNDbWQoZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ2ZpbmQnKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyBhY3RpdmF0ZSBzcGFjZSB0b29sXG4gIC8vIFNcbiAgYWRkTGlzdGVuZXIoJ3NwYWNlVG9vbCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoa2V5Ym9hcmQuaGFzTW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleWJvYXJkLmlzS2V5KFsncycsICdTJ10sIGV2ZW50KSkge1xuICAgICAgZWRpdG9yQWN0aW9ucy50cmlnZ2VyKCdzcGFjZVRvb2wnKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyBhY3RpdmF0ZSBsYXNzbyB0b29sXG4gIC8vIExcbiAgYWRkTGlzdGVuZXIoJ2xhc3NvVG9vbCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoa2V5Ym9hcmQuaGFzTW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleWJvYXJkLmlzS2V5KFsnbCcsICdMJ10sIGV2ZW50KSkge1xuICAgICAgZWRpdG9yQWN0aW9ucy50cmlnZ2VyKCdsYXNzb1Rvb2wnKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyBhY3RpdmF0ZSBoYW5kIHRvb2xcbiAgLy8gSFxuICBhZGRMaXN0ZW5lcignaGFuZFRvb2wnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGtleWJvYXJkLmhhc01vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXlib2FyZC5pc0tleShbJ2gnLCAnSCddLCBldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignaGFuZFRvb2wnKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyBhY3RpdmF0ZSBnbG9iYWwgY29ubmVjdCB0b29sXG4gIC8vIENcbiAgYWRkTGlzdGVuZXIoJ2dsb2JhbENvbm5lY3RUb29sJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChrZXlib2FyZC5oYXNNb2RpZmllcihldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNLZXkoWydjJywgJ0MnXSwgZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ2dsb2JhbENvbm5lY3RUb29sJyk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gYWN0aXZhdGUgZGlyZWN0IGVkaXRpbmdcbiAgLy8gRVxuICBhZGRMaXN0ZW5lcignZGlyZWN0RWRpdGluZycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoa2V5Ym9hcmQuaGFzTW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleWJvYXJkLmlzS2V5KFsnZScsICdFJ10sIGV2ZW50KSkge1xuICAgICAgZWRpdG9yQWN0aW9ucy50cmlnZ2VyKCdkaXJlY3RFZGl0aW5nJyk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbn07IiwiaW1wb3J0IEtleWJvYXJkTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2tleWJvYXJkJztcblxuaW1wb3J0IEJwbW5LZXlib2FyZEJpbmRpbmdzIGZyb20gJy4vQnBtbktleWJvYXJkQmluZGluZ3MnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgS2V5Ym9hcmRNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFsgJ2tleWJvYXJkQmluZGluZ3MnIF0sXG4gIGtleWJvYXJkQmluZGluZ3M6IFsgJ3R5cGUnLCBCcG1uS2V5Ym9hcmRCaW5kaW5ncyBdXG59O1xuIiwiaW1wb3J0IHtcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgZ2V0QnVzaW5lc3NPYmplY3QsXG4gIGlzXG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgdHJhbnNsYXRlXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvU3ZnVHJhbnNmb3JtVXRpbCc7XG5cbnZhciBNQVJLRVJfSElEREVOID0gJ2Rqcy1lbGVtZW50LWhpZGRlbicsXG4gICAgTUFSS0VSX0xBQkVMX0hJRERFTiA9ICdkanMtbGFiZWwtaGlkZGVuJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMYWJlbEVkaXRpbmdQcmV2aWV3KFxuICAgIGV2ZW50QnVzLCBjYW52YXMsIGVsZW1lbnRSZWdpc3RyeSxcbiAgICBwYXRoTWFwKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBkZWZhdWx0TGF5ZXIgPSBjYW52YXMuZ2V0RGVmYXVsdExheWVyKCk7XG5cbiAgdmFyIGVsZW1lbnQsIGFic29sdXRlRWxlbWVudEJCb3gsIGdmeDtcblxuICBldmVudEJ1cy5vbignZGlyZWN0RWRpdGluZy5hY3RpdmF0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgYWN0aXZlUHJvdmlkZXIgPSBjb250ZXh0LmFjdGl2ZTtcblxuICAgIGVsZW1lbnQgPSBhY3RpdmVQcm92aWRlci5lbGVtZW50LmxhYmVsIHx8IGFjdGl2ZVByb3ZpZGVyLmVsZW1lbnQ7XG5cbiAgICAvLyB0ZXh0IGFubm90YXRpb25cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgICAgYWJzb2x1dGVFbGVtZW50QkJveCA9IGNhbnZhcy5nZXRBYnNvbHV0ZUJCb3goZWxlbWVudCk7XG5cbiAgICAgIGdmeCA9IHN2Z0NyZWF0ZSgnZycpO1xuXG4gICAgICB2YXIgdGV4dFBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdURVhUX0FOTk9UQVRJT04nLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4wLFxuICAgICAgICAgIG15OiAwLjBcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBwYXRoID0gc2VsZi5wYXRoID0gc3ZnQ3JlYXRlKCdwYXRoJyk7XG5cbiAgICAgIHN2Z0F0dHIocGF0aCwge1xuICAgICAgICBkOiB0ZXh0UGF0aERhdGEsXG4gICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQpXG4gICAgICB9KTtcblxuICAgICAgc3ZnQXBwZW5kKGdmeCwgcGF0aCk7XG5cbiAgICAgIHN2Z0FwcGVuZChkZWZhdWx0TGF5ZXIsIGdmeCk7XG5cbiAgICAgIHRyYW5zbGF0ZShnZngsIGVsZW1lbnQueCwgZWxlbWVudC55KTtcbiAgICB9XG5cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46VGV4dEFubm90YXRpb24nKSB8fFxuICAgICAgICBlbGVtZW50LmxhYmVsVGFyZ2V0KSB7XG4gICAgICBjYW52YXMuYWRkTWFya2VyKGVsZW1lbnQsIE1BUktFUl9ISURERU4pO1xuICAgIH0gZWxzZSBpZiAoaXMoZWxlbWVudCwgJ2JwbW46VGFzaycpIHx8XG4gICAgICAgICAgICAgICBpcyhlbGVtZW50LCAnYnBtbjpDYWxsQWN0aXZpdHknKSB8fFxuICAgICAgICAgICAgICAgaXMoZWxlbWVudCwgJ2JwbW46U3ViUHJvY2VzcycpIHx8XG4gICAgICAgICAgICAgICBpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgICBjYW52YXMuYWRkTWFya2VyKGVsZW1lbnQsIE1BUktFUl9MQUJFTF9ISURERU4pO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2RpcmVjdEVkaXRpbmcucmVzaXplJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgLy8gdGV4dCBhbm5vdGF0aW9uXG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcbiAgICAgIHZhciBoZWlnaHQgPSBjb250ZXh0LmhlaWdodCxcbiAgICAgICAgICBkeSA9IGNvbnRleHQuZHk7XG5cbiAgICAgIHZhciBuZXdFbGVtZW50SGVpZ2h0ID0gTWF0aC5tYXgoZWxlbWVudC5oZWlnaHQgLyBhYnNvbHV0ZUVsZW1lbnRCQm94LmhlaWdodCAqIChoZWlnaHQgKyBkeSksIDApO1xuXG4gICAgICB2YXIgdGV4dFBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdURVhUX0FOTk9UQVRJT04nLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBuZXdFbGVtZW50SGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjAsXG4gICAgICAgICAgbXk6IDAuMFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc3ZnQXR0cihzZWxmLnBhdGgsIHtcbiAgICAgICAgZDogdGV4dFBhdGhEYXRhXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKFsgJ2RpcmVjdEVkaXRpbmcuY29tcGxldGUnLCAnZGlyZWN0RWRpdGluZy5jYW5jZWwnIF0sIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgYWN0aXZlUHJvdmlkZXIgPSBjb250ZXh0LmFjdGl2ZTtcblxuICAgIGlmIChhY3RpdmVQcm92aWRlcikge1xuICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihhY3RpdmVQcm92aWRlci5lbGVtZW50LmxhYmVsIHx8IGFjdGl2ZVByb3ZpZGVyLmVsZW1lbnQsIE1BUktFUl9ISURERU4pO1xuICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihlbGVtZW50LCBNQVJLRVJfTEFCRUxfSElEREVOKTtcbiAgICB9XG5cbiAgICBlbGVtZW50ID0gdW5kZWZpbmVkO1xuICAgIGFic29sdXRlRWxlbWVudEJCb3ggPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ2Z4KSB7XG4gICAgICBzdmdSZW1vdmUoZ2Z4KTtcblxuICAgICAgZ2Z4ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSk7XG59XG5cbkxhYmVsRWRpdGluZ1ByZXZpZXcuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdlbGVtZW50UmVnaXN0cnknLFxuICAncGF0aE1hcCdcbl07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRDb2xvcikge1xuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICByZXR1cm4gYm8uZGkuZ2V0KCdzdHJva2UnKSB8fCBkZWZhdWx0Q29sb3IgfHwgJ2JsYWNrJztcbn0iLCJpbXBvcnQge1xuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBnZXRMYWJlbFxufSBmcm9tICcuL0xhYmVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldEJ1c2luZXNzT2JqZWN0LFxuICBpc1xufSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGNyZWF0ZUNhdGVnb3J5VmFsdWVcbn0gZnJvbSAnLi4vbW9kZWxpbmcvYmVoYXZpb3IvdXRpbC9DYXRlZ29yeVV0aWwnO1xuXG5pbXBvcnQgeyBpc0FueSB9IGZyb20gJy4uL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsJztcbmltcG9ydCB7IGlzRXhwYW5kZWQgfSBmcm9tICcuLi8uLi91dGlsL0RpVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldEV4dGVybmFsTGFiZWxNaWQsXG4gIGlzTGFiZWxFeHRlcm5hbCxcbiAgaGFzRXh0ZXJuYWxMYWJlbCxcbiAgaXNMYWJlbFxufSBmcm9tICcuLi8uLi91dGlsL0xhYmVsVXRpbCc7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTGFiZWxFZGl0aW5nUHJvdmlkZXIoXG4gICAgZXZlbnRCdXMsIGJwbW5GYWN0b3J5LCBjYW52YXMsIGRpcmVjdEVkaXRpbmcsXG4gICAgbW9kZWxpbmcsIHJlc2l6ZUhhbmRsZXMsIHRleHRSZW5kZXJlcikge1xuXG4gIHRoaXMuX2JwbW5GYWN0b3J5ID0gYnBtbkZhY3Rvcnk7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbiAgdGhpcy5fdGV4dFJlbmRlcmVyID0gdGV4dFJlbmRlcmVyO1xuXG4gIGRpcmVjdEVkaXRpbmcucmVnaXN0ZXJQcm92aWRlcih0aGlzKTtcblxuICAvLyBsaXN0ZW4gdG8gZGJsY2xpY2sgb24gbm9uLXJvb3QgZWxlbWVudHNcbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQuZGJsY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuICAgIGFjdGl2YXRlRGlyZWN0RWRpdChldmVudC5lbGVtZW50LCB0cnVlKTtcbiAgfSk7XG5cbiAgLy8gY29tcGxldGUgb24gZm9sbG93dXAgY2FudmFzIG9wZXJhdGlvblxuICBldmVudEJ1cy5vbihbXG4gICAgJ2F1dG9QbGFjZS5zdGFydCcsXG4gICAgJ2NhbnZhcy52aWV3Ym94LmNoYW5naW5nJyxcbiAgICAnZHJhZy5pbml0JyxcbiAgICAnZWxlbWVudC5tb3VzZWRvd24nLFxuICAgICdwb3B1cE1lbnUub3BlbidcbiAgXSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIGlmIChkaXJlY3RFZGl0aW5nLmlzQWN0aXZlKCkpIHtcbiAgICAgIGRpcmVjdEVkaXRpbmcuY29tcGxldGUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGNhbmNlbCBvbiBjb21tYW5kIHN0YWNrIGNoYW5nZXNcbiAgZXZlbnRCdXMub24oWyAnY29tbWFuZFN0YWNrLmNoYW5nZWQnIF0sIGZ1bmN0aW9uKGUpIHtcbiAgICBpZiAoZGlyZWN0RWRpdGluZy5pc0FjdGl2ZSgpKSB7XG4gICAgICBkaXJlY3RFZGl0aW5nLmNhbmNlbCgpO1xuICAgIH1cbiAgfSk7XG5cblxuICBldmVudEJ1cy5vbignZGlyZWN0RWRpdGluZy5hY3RpdmF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmVzaXplSGFuZGxlcy5yZW1vdmVSZXNpemVycygpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignY3JlYXRlLmVuZCcsIDUwMCwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIGNhbkV4ZWN1dGUgPSBldmVudC5jb250ZXh0LmNhbkV4ZWN1dGUsXG4gICAgICAgIGlzVG91Y2ggPSBldmVudC5pc1RvdWNoO1xuXG4gICAgLy8gVE9ETyhuaWtrdSk6IHdlIG5lZWQgdG8gZmluZCBhIHdheSB0byBzdXBwb3J0IHRoZVxuICAgIC8vIGRpcmVjdCBlZGl0aW5nIG9uIG1vYmlsZSBkZXZpY2VzOyByaWdodCBub3cgdGhpcyB3aWxsXG4gICAgLy8gYnJlYWsgZm9yIGRlc3dvcmtmbG93ZWRpdGluZyBvbiBtb2JpbGUgZGV2aWNlc1xuICAgIC8vIGFzIGl0IGJyZWFrcyB0aGUgdXNlciBpbnRlcmFjdGlvbiB3b3JrZmxvd1xuXG4gICAgLy8gVE9ETyhucmUpOiB3ZSBzaG91bGQgdGVtcG9yYXJpbHkgZm9jdXMgdGhlIGVkaXRlZCBlbGVtZW50XG4gICAgLy8gaGVyZSBhbmQgcmVsZWFzZSB0aGUgZm9jdXNlZCB2aWV3cG9ydCBhZnRlciB0aGUgZGlyZWN0IGVkaXRcbiAgICAvLyBvcGVyYXRpb24gaXMgZmluaXNoZWRcbiAgICBpZiAoaXNUb3VjaCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghY2FuRXhlY3V0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjb250ZXh0LmhpbnRzICYmIGNvbnRleHQuaGludHMuY3JlYXRlRWxlbWVudHNCZWhhdmlvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhY3RpdmF0ZURpcmVjdEVkaXQoZWxlbWVudCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdhdXRvUGxhY2UuZW5kJywgNTAwLCBmdW5jdGlvbihldmVudCkge1xuICAgIGFjdGl2YXRlRGlyZWN0RWRpdChldmVudC5zaGFwZSk7XG4gIH0pO1xuXG5cbiAgZnVuY3Rpb24gYWN0aXZhdGVEaXJlY3RFZGl0KGVsZW1lbnQsIGZvcmNlKSB7XG4gICAgaWYgKGZvcmNlIHx8XG4gICAgICAgIGlzQW55KGVsZW1lbnQsIFsgJ2JwbW46VGFzaycsICdicG1uOlRleHRBbm5vdGF0aW9uJywgJ2JwbW46R3JvdXAnIF0pIHx8XG4gICAgICAgIGlzQ29sbGFwc2VkU3ViUHJvY2VzcyhlbGVtZW50KSkge1xuXG4gICAgICBkaXJlY3RFZGl0aW5nLmFjdGl2YXRlKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG59XG5cbkxhYmVsRWRpdGluZ1Byb3ZpZGVyLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdicG1uRmFjdG9yeScsXG4gICdjYW52YXMnLFxuICAnZGlyZWN0RWRpdGluZycsXG4gICdtb2RlbGluZycsXG4gICdyZXNpemVIYW5kbGVzJyxcbiAgJ3RleHRSZW5kZXJlcidcbl07XG5cblxuLyoqXG4gKiBBY3RpdmF0ZSBkaXJlY3QgZWRpdGluZyBmb3IgYWN0aXZpdGllcyBhbmQgdGV4dCBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gYW4gb2JqZWN0IHdpdGggcHJvcGVydGllcyBib3VuZHMgKHBvc2l0aW9uIGFuZCBzaXplKSwgdGV4dCBhbmQgb3B0aW9uc1xuICovXG5MYWJlbEVkaXRpbmdQcm92aWRlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgLy8gdGV4dFxuICB2YXIgdGV4dCA9IGdldExhYmVsKGVsZW1lbnQpO1xuXG4gIGlmICh0ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY29udGV4dCA9IHtcbiAgICB0ZXh0OiB0ZXh0XG4gIH07XG5cbiAgLy8gYm91bmRzXG4gIHZhciBib3VuZHMgPSB0aGlzLmdldEVkaXRpbmdCQm94KGVsZW1lbnQpO1xuXG4gIGFzc2lnbihjb250ZXh0LCBib3VuZHMpO1xuXG4gIHZhciBvcHRpb25zID0ge307XG5cbiAgLy8gdGFza3NcbiAgaWYgKFxuICAgIGlzQW55KGVsZW1lbnQsIFtcbiAgICAgICdicG1uOlRhc2snLFxuICAgICAgJ2JwbW46UGFydGljaXBhbnQnLFxuICAgICAgJ2JwbW46TGFuZScsXG4gICAgICAnYnBtbjpDYWxsQWN0aXZpdHknXG4gICAgXSkgfHxcbiAgICBpc0NvbGxhcHNlZFN1YlByb2Nlc3MoZWxlbWVudClcbiAgKSB7XG4gICAgYXNzaWduKG9wdGlvbnMsIHtcbiAgICAgIGNlbnRlclZlcnRpY2FsbHk6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGV4dGVybmFsIGxhYmVsc1xuICBpZiAoaXNMYWJlbEV4dGVybmFsKGVsZW1lbnQpKSB7XG4gICAgYXNzaWduKG9wdGlvbnMsIHtcbiAgICAgIGF1dG9SZXNpemU6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHRleHQgYW5ub3RhdGlvbnNcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcbiAgICBhc3NpZ24ob3B0aW9ucywge1xuICAgICAgcmVzaXphYmxlOiB0cnVlLFxuICAgICAgYXV0b1Jlc2l6ZTogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgYXNzaWduKGNvbnRleHQsIHtcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH0pO1xuXG4gIHJldHVybiBjb250ZXh0O1xufTtcblxuXG4vKipcbiAqIEdldCB0aGUgZWRpdGluZyBib3VuZGluZyBib3ggYmFzZWQgb24gdGhlIGVsZW1lbnQncyBzaXplIGFuZCBwb3NpdGlvblxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCBwb3NpdGlvblxuICogICAgICAgICAgICAgICAgICBhbmQgc2l6ZSAoZml4ZWQgb3IgbWluaW11bSBhbmQvb3IgbWF4aW11bSlcbiAqL1xuTGFiZWxFZGl0aW5nUHJvdmlkZXIucHJvdG90eXBlLmdldEVkaXRpbmdCQm94ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgY2FudmFzID0gdGhpcy5fY2FudmFzO1xuXG4gIHZhciB0YXJnZXQgPSBlbGVtZW50LmxhYmVsIHx8IGVsZW1lbnQ7XG5cbiAgdmFyIGJib3ggPSBjYW52YXMuZ2V0QWJzb2x1dGVCQm94KHRhcmdldCk7XG5cbiAgdmFyIG1pZCA9IHtcbiAgICB4OiBiYm94LnggKyBiYm94LndpZHRoIC8gMixcbiAgICB5OiBiYm94LnkgKyBiYm94LmhlaWdodCAvIDJcbiAgfTtcblxuICAvLyBkZWZhdWx0IHBvc2l0aW9uXG4gIHZhciBib3VuZHMgPSB7IHg6IGJib3gueCwgeTogYmJveC55IH07XG5cbiAgdmFyIHpvb20gPSBjYW52YXMuem9vbSgpO1xuXG4gIHZhciBkZWZhdWx0U3R5bGUgPSB0aGlzLl90ZXh0UmVuZGVyZXIuZ2V0RGVmYXVsdFN0eWxlKCksXG4gICAgICBleHRlcm5hbFN0eWxlID0gdGhpcy5fdGV4dFJlbmRlcmVyLmdldEV4dGVybmFsU3R5bGUoKTtcblxuICAvLyB0YWtlIHpvb20gaW50byBhY2NvdW50XG4gIHZhciBleHRlcm5hbEZvbnRTaXplID0gZXh0ZXJuYWxTdHlsZS5mb250U2l6ZSAqIHpvb20sXG4gICAgICBleHRlcm5hbExpbmVIZWlnaHQgPSBleHRlcm5hbFN0eWxlLmxpbmVIZWlnaHQsXG4gICAgICBkZWZhdWx0Rm9udFNpemUgPSBkZWZhdWx0U3R5bGUuZm9udFNpemUgKiB6b29tLFxuICAgICAgZGVmYXVsdExpbmVIZWlnaHQgPSBkZWZhdWx0U3R5bGUubGluZUhlaWdodDtcblxuICB2YXIgc3R5bGUgPSB7XG4gICAgZm9udEZhbWlseTogdGhpcy5fdGV4dFJlbmRlcmVyLmdldERlZmF1bHRTdHlsZSgpLmZvbnRGYW1pbHksXG4gICAgZm9udFdlaWdodDogdGhpcy5fdGV4dFJlbmRlcmVyLmdldERlZmF1bHRTdHlsZSgpLmZvbnRXZWlnaHRcbiAgfTtcblxuICAvLyBhZGp1c3QgZm9yIGV4cGFuZGVkIHBvb2xzIEFORCBsYW5lc1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46TGFuZScpIHx8IGlzRXhwYW5kZWRQb29sKGVsZW1lbnQpKSB7XG5cbiAgICBhc3NpZ24oYm91bmRzLCB7XG4gICAgICB3aWR0aDogYmJveC5oZWlnaHQsXG4gICAgICBoZWlnaHQ6IDMwICogem9vbSxcbiAgICAgIHg6IGJib3gueCAtIGJib3guaGVpZ2h0IC8gMiArICgxNSAqIHpvb20pLFxuICAgICAgeTogbWlkLnkgLSAoMzAgKiB6b29tKSAvIDJcbiAgICB9KTtcblxuICAgIGFzc2lnbihzdHlsZSwge1xuICAgICAgZm9udFNpemU6IGRlZmF1bHRGb250U2l6ZSArICdweCcsXG4gICAgICBsaW5lSGVpZ2h0OiBkZWZhdWx0TGluZUhlaWdodCxcbiAgICAgIHBhZGRpbmdUb3A6ICg3ICogem9vbSkgKyAncHgnLFxuICAgICAgcGFkZGluZ0JvdHRvbTogKDcgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nTGVmdDogKDUgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nUmlnaHQ6ICg1ICogem9vbSkgKyAncHgnLFxuICAgICAgdHJhbnNmb3JtOiAncm90YXRlKC05MGRlZyknXG4gICAgfSk7XG4gIH1cblxuXG4gIC8vIGludGVybmFsIGxhYmVscyBmb3IgdGFza3MgYW5kIGNvbGxhcHNlZCBjYWxsIGFjdGl2aXRpZXMsXG4gIC8vIHN1YiBwcm9jZXNzZXMgYW5kIHBhcnRpY2lwYW50c1xuICBpZiAoaXNBbnkoZWxlbWVudCwgWyAnYnBtbjpUYXNrJywgJ2JwbW46Q2FsbEFjdGl2aXR5J10pIHx8XG4gICAgICBpc0NvbGxhcHNlZFBvb2woZWxlbWVudCkgfHxcbiAgICAgIGlzQ29sbGFwc2VkU3ViUHJvY2VzcyhlbGVtZW50KSkge1xuXG4gICAgYXNzaWduKGJvdW5kcywge1xuICAgICAgd2lkdGg6IGJib3gud2lkdGgsXG4gICAgICBoZWlnaHQ6IGJib3guaGVpZ2h0XG4gICAgfSk7XG5cbiAgICBhc3NpZ24oc3R5bGUsIHtcbiAgICAgIGZvbnRTaXplOiBkZWZhdWx0Rm9udFNpemUgKyAncHgnLFxuICAgICAgbGluZUhlaWdodDogZGVmYXVsdExpbmVIZWlnaHQsXG4gICAgICBwYWRkaW5nVG9wOiAoNyAqIHpvb20pICsgJ3B4JyxcbiAgICAgIHBhZGRpbmdCb3R0b206ICg3ICogem9vbSkgKyAncHgnLFxuICAgICAgcGFkZGluZ0xlZnQ6ICg1ICogem9vbSkgKyAncHgnLFxuICAgICAgcGFkZGluZ1JpZ2h0OiAoNSAqIHpvb20pICsgJ3B4J1xuICAgIH0pO1xuICB9XG5cblxuICAvLyBpbnRlcm5hbCBsYWJlbHMgZm9yIGV4cGFuZGVkIHN1YiBwcm9jZXNzZXNcbiAgaWYgKGlzRXhwYW5kZWRTdWJQcm9jZXNzKGVsZW1lbnQpKSB7XG4gICAgYXNzaWduKGJvdW5kcywge1xuICAgICAgd2lkdGg6IGJib3gud2lkdGgsXG4gICAgICB4OiBiYm94LnhcbiAgICB9KTtcblxuICAgIGFzc2lnbihzdHlsZSwge1xuICAgICAgZm9udFNpemU6IGRlZmF1bHRGb250U2l6ZSArICdweCcsXG4gICAgICBsaW5lSGVpZ2h0OiBkZWZhdWx0TGluZUhlaWdodCxcbiAgICAgIHBhZGRpbmdUb3A6ICg3ICogem9vbSkgKyAncHgnLFxuICAgICAgcGFkZGluZ0JvdHRvbTogKDcgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nTGVmdDogKDUgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nUmlnaHQ6ICg1ICogem9vbSkgKyAncHgnXG4gICAgfSk7XG4gIH1cblxuICB2YXIgd2lkdGggPSA5MCAqIHpvb20sXG4gICAgICBwYWRkaW5nVG9wID0gNyAqIHpvb20sXG4gICAgICBwYWRkaW5nQm90dG9tID0gNCAqIHpvb207XG5cbiAgLy8gZXh0ZXJuYWwgbGFiZWxzIGZvciBldmVudHMsIGRhdGEgZWxlbWVudHMsIGdhdGV3YXlzLCBncm91cHMgYW5kIGNvbm5lY3Rpb25zXG4gIGlmICh0YXJnZXQubGFiZWxUYXJnZXQpIHtcbiAgICBhc3NpZ24oYm91bmRzLCB7XG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGJib3guaGVpZ2h0ICsgcGFkZGluZ1RvcCArIHBhZGRpbmdCb3R0b20sXG4gICAgICB4OiBtaWQueCAtIHdpZHRoIC8gMixcbiAgICAgIHk6IGJib3gueSAtIHBhZGRpbmdUb3BcbiAgICB9KTtcblxuICAgIGFzc2lnbihzdHlsZSwge1xuICAgICAgZm9udFNpemU6IGV4dGVybmFsRm9udFNpemUgKyAncHgnLFxuICAgICAgbGluZUhlaWdodDogZXh0ZXJuYWxMaW5lSGVpZ2h0LFxuICAgICAgcGFkZGluZ1RvcDogcGFkZGluZ1RvcCArICdweCcsXG4gICAgICBwYWRkaW5nQm90dG9tOiBwYWRkaW5nQm90dG9tICsgJ3B4J1xuICAgIH0pO1xuICB9XG5cbiAgLy8gZXh0ZXJuYWwgbGFiZWwgbm90IHlldCBjcmVhdGVkXG4gIGlmIChpc0xhYmVsRXh0ZXJuYWwodGFyZ2V0KVxuICAgICAgJiYgIWhhc0V4dGVybmFsTGFiZWwodGFyZ2V0KVxuICAgICAgJiYgIWlzTGFiZWwodGFyZ2V0KSkge1xuXG4gICAgdmFyIGV4dGVybmFsTGFiZWxNaWQgPSBnZXRFeHRlcm5hbExhYmVsTWlkKGVsZW1lbnQpO1xuXG4gICAgdmFyIGFic29sdXRlQkJveCA9IGNhbnZhcy5nZXRBYnNvbHV0ZUJCb3goe1xuICAgICAgeDogZXh0ZXJuYWxMYWJlbE1pZC54LFxuICAgICAgeTogZXh0ZXJuYWxMYWJlbE1pZC55LFxuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9KTtcblxuICAgIHZhciBoZWlnaHQgPSBleHRlcm5hbEZvbnRTaXplICsgcGFkZGluZ1RvcCArIHBhZGRpbmdCb3R0b207XG5cbiAgICBhc3NpZ24oYm91bmRzLCB7XG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgIHg6IGFic29sdXRlQkJveC54IC0gd2lkdGggLyAyLFxuICAgICAgeTogYWJzb2x1dGVCQm94LnkgLSBoZWlnaHQgLyAyXG4gICAgfSk7XG5cbiAgICBhc3NpZ24oc3R5bGUsIHtcbiAgICAgIGZvbnRTaXplOiBleHRlcm5hbEZvbnRTaXplICsgJ3B4JyxcbiAgICAgIGxpbmVIZWlnaHQ6IGV4dGVybmFsTGluZUhlaWdodCxcbiAgICAgIHBhZGRpbmdUb3A6IHBhZGRpbmdUb3AgKyAncHgnLFxuICAgICAgcGFkZGluZ0JvdHRvbTogcGFkZGluZ0JvdHRvbSArICdweCdcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHRleHQgYW5ub3RhdGlvbnNcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcbiAgICBhc3NpZ24oYm91bmRzLCB7XG4gICAgICB3aWR0aDogYmJveC53aWR0aCxcbiAgICAgIGhlaWdodDogYmJveC5oZWlnaHQsXG4gICAgICBtaW5XaWR0aDogMzAgKiB6b29tLFxuICAgICAgbWluSGVpZ2h0OiAxMCAqIHpvb21cbiAgICB9KTtcblxuICAgIGFzc2lnbihzdHlsZSwge1xuICAgICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgICBwYWRkaW5nVG9wOiAoNSAqIHpvb20pICsgJ3B4JyxcbiAgICAgIHBhZGRpbmdCb3R0b206ICg3ICogem9vbSkgKyAncHgnLFxuICAgICAgcGFkZGluZ0xlZnQ6ICg3ICogem9vbSkgKyAncHgnLFxuICAgICAgcGFkZGluZ1JpZ2h0OiAoNSAqIHpvb20pICsgJ3B4JyxcbiAgICAgIGZvbnRTaXplOiBkZWZhdWx0Rm9udFNpemUgKyAncHgnLFxuICAgICAgbGluZUhlaWdodDogZGVmYXVsdExpbmVIZWlnaHRcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7IGJvdW5kczogYm91bmRzLCBzdHlsZTogc3R5bGUgfTtcbn07XG5cblxuTGFiZWxFZGl0aW5nUHJvdmlkZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKFxuICAgIGVsZW1lbnQsIG5ld0xhYmVsLFxuICAgIGFjdGl2ZUNvbnRleHRUZXh0LCBib3VuZHMpIHtcblxuICB2YXIgbmV3Qm91bmRzLFxuICAgICAgYmJveDtcblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuXG4gICAgYmJveCA9IHRoaXMuX2NhbnZhcy5nZXRBYnNvbHV0ZUJCb3goZWxlbWVudCk7XG5cbiAgICBuZXdCb3VuZHMgPSB7XG4gICAgICB4OiBlbGVtZW50LngsXG4gICAgICB5OiBlbGVtZW50LnksXG4gICAgICB3aWR0aDogZWxlbWVudC53aWR0aCAvIGJib3gud2lkdGggKiBib3VuZHMud2lkdGgsXG4gICAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0IC8gYmJveC5oZWlnaHQgKiBib3VuZHMuaGVpZ2h0XG4gICAgfTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpHcm91cCcpKSB7XG5cbiAgICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICAgIC8vIGluaXRpYWxpemUgY2F0ZWdvcnlWYWx1ZSBpZiBub3QgZXhpc3RpbmdcbiAgICBpZiAoIWJ1c2luZXNzT2JqZWN0LmNhdGVnb3J5VmFsdWVSZWYpIHtcblxuICAgICAgdmFyIHJvb3RFbGVtZW50ID0gdGhpcy5fY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBnZXRCdXNpbmVzc09iamVjdChyb290RWxlbWVudCkuJHBhcmVudDtcblxuICAgICAgdmFyIGNhdGVnb3J5VmFsdWUgPSBjcmVhdGVDYXRlZ29yeVZhbHVlKGRlZmluaXRpb25zLCB0aGlzLl9icG1uRmFjdG9yeSk7XG5cbiAgICAgIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmNhdGVnb3J5VmFsdWVSZWYgPSBjYXRlZ29yeVZhbHVlO1xuICAgIH1cblxuICB9XG5cbiAgaWYgKGlzRW1wdHlUZXh0KG5ld0xhYmVsKSkge1xuICAgIG5ld0xhYmVsID0gbnVsbDtcbiAgfVxuXG4gIHRoaXMuX21vZGVsaW5nLnVwZGF0ZUxhYmVsKGVsZW1lbnQsIG5ld0xhYmVsLCBuZXdCb3VuZHMpO1xufTtcblxuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc0NvbGxhcHNlZFN1YlByb2Nlc3MoZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46U3ViUHJvY2VzcycpICYmICFpc0V4cGFuZGVkKGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBpc0V4cGFuZGVkU3ViUHJvY2VzcyhlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgaXNFeHBhbmRlZChlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gaXNDb2xsYXBzZWRQb29sKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgIWlzRXhwYW5kZWQoZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGlzRXhwYW5kZWRQb29sKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgaXNFeHBhbmRlZChlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eVRleHQobGFiZWwpIHtcbiAgcmV0dXJuICFsYWJlbCB8fCAhbGFiZWwudHJpbSgpO1xufSIsImltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5mdW5jdGlvbiBnZXRMYWJlbEF0dHIoc2VtYW50aWMpIHtcbiAgaWYgKFxuICAgIGlzKHNlbWFudGljLCAnYnBtbjpGbG93RWxlbWVudCcpIHx8XG4gICAgaXMoc2VtYW50aWMsICdicG1uOlBhcnRpY2lwYW50JykgfHxcbiAgICBpcyhzZW1hbnRpYywgJ2JwbW46TGFuZScpIHx8XG4gICAgaXMoc2VtYW50aWMsICdicG1uOlNlcXVlbmNlRmxvdycpIHx8XG4gICAgaXMoc2VtYW50aWMsICdicG1uOk1lc3NhZ2VGbG93JykgfHxcbiAgICBpcyhzZW1hbnRpYywgJ2JwbW46RGF0YUlucHV0JykgfHxcbiAgICBpcyhzZW1hbnRpYywgJ2JwbW46RGF0YU91dHB1dCcpXG4gICkge1xuICAgIHJldHVybiAnbmFtZSc7XG4gIH1cblxuICBpZiAoaXMoc2VtYW50aWMsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcbiAgICByZXR1cm4gJ3RleHQnO1xuICB9XG5cbiAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpHcm91cCcpKSB7XG4gICAgcmV0dXJuICdjYXRlZ29yeVZhbHVlUmVmJztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDYXRlZ29yeVZhbHVlKHNlbWFudGljKSB7XG4gIHZhciBjYXRlZ29yeVZhbHVlUmVmID0gc2VtYW50aWNbJ2NhdGVnb3J5VmFsdWVSZWYnXTtcblxuICBpZiAoIWNhdGVnb3J5VmFsdWVSZWYpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuXG4gIHJldHVybiBjYXRlZ29yeVZhbHVlUmVmLnZhbHVlIHx8ICcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFiZWwoZWxlbWVudCkge1xuICB2YXIgc2VtYW50aWMgPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgYXR0ciA9IGdldExhYmVsQXR0cihzZW1hbnRpYyk7XG5cbiAgaWYgKGF0dHIpIHtcblxuICAgIGlmIChhdHRyID09PSAnY2F0ZWdvcnlWYWx1ZVJlZicpIHtcblxuICAgICAgcmV0dXJuIGdldENhdGVnb3J5VmFsdWUoc2VtYW50aWMpO1xuICAgIH1cblxuICAgIHJldHVybiBzZW1hbnRpY1thdHRyXSB8fCAnJztcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYWJlbChlbGVtZW50LCB0ZXh0LCBpc0V4dGVybmFsKSB7XG4gIHZhciBzZW1hbnRpYyA9IGVsZW1lbnQuYnVzaW5lc3NPYmplY3QsXG4gICAgICBhdHRyID0gZ2V0TGFiZWxBdHRyKHNlbWFudGljKTtcblxuICBpZiAoYXR0cikge1xuXG4gICAgaWYgKGF0dHIgPT09ICdjYXRlZ29yeVZhbHVlUmVmJykge1xuICAgICAgc2VtYW50aWNbJ2NhdGVnb3J5VmFsdWVSZWYnXS52YWx1ZSA9IHRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbWFudGljW2F0dHJdID0gdGV4dDtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufSIsImltcG9ydCB7XG4gIHNldExhYmVsLFxuICBnZXRMYWJlbFxufSBmcm9tICcuLi9MYWJlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRFeHRlcm5hbExhYmVsTWlkLFxuICBpc0xhYmVsRXh0ZXJuYWwsXG4gIGhhc0V4dGVybmFsTGFiZWwsXG4gIGlzTGFiZWxcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc1xufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbnZhciBOVUxMX0RJTUVOU0lPTlMgPSB7XG4gIHdpZHRoOiAwLFxuICBoZWlnaHQ6IDBcbn07XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCB1cGRhdGVzIHRoZSB0ZXh0IG9mIGEgQlBNTiBlbGVtZW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBVcGRhdGVMYWJlbEhhbmRsZXIobW9kZWxpbmcsIHRleHRSZW5kZXJlcikge1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGxhYmVsIGFuZCByZXR1cm4gdGhlIGNoYW5nZWQgZWxlbWVudHMuXG4gICAqXG4gICAqIEVsZW1lbnQgcGFyYW1ldGVyIGNhbiBiZSBsYWJlbCBpdHNlbGYgb3IgY29ubmVjdGlvbiAoaS5lLiBzZXF1ZW5jZSBmbG93KS5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKi9cbiAgZnVuY3Rpb24gc2V0VGV4dChlbGVtZW50LCB0ZXh0KSB7XG5cbiAgICAvLyBleHRlcm5hbCBsYWJlbCBpZiBwcmVzZW50XG4gICAgdmFyIGxhYmVsID0gZWxlbWVudC5sYWJlbCB8fCBlbGVtZW50O1xuXG4gICAgdmFyIGxhYmVsVGFyZ2V0ID0gZWxlbWVudC5sYWJlbFRhcmdldCB8fCBlbGVtZW50O1xuXG4gICAgc2V0TGFiZWwobGFiZWwsIHRleHQsIGxhYmVsVGFyZ2V0ICE9PSBsYWJlbCk7XG5cbiAgICByZXR1cm4gWyBsYWJlbCwgbGFiZWxUYXJnZXQgXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZUV4ZWN1dGUoY3R4KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBjdHguZWxlbWVudCxcbiAgICAgICAgYnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgICBuZXdMYWJlbCA9IGN0eC5uZXdMYWJlbDtcblxuICAgIGlmICghaXNMYWJlbChlbGVtZW50KVxuICAgICAgICAmJiBpc0xhYmVsRXh0ZXJuYWwoZWxlbWVudClcbiAgICAgICAgJiYgIWhhc0V4dGVybmFsTGFiZWwoZWxlbWVudClcbiAgICAgICAgJiYgIWlzRW1wdHlUZXh0KG5ld0xhYmVsKSkge1xuXG4gICAgICAvLyBjcmVhdGUgbGFiZWxcbiAgICAgIHZhciBwYWRkaW5nVG9wID0gNztcblxuICAgICAgdmFyIGxhYmVsQ2VudGVyID0gZ2V0RXh0ZXJuYWxMYWJlbE1pZChlbGVtZW50KTtcblxuICAgICAgbGFiZWxDZW50ZXIgPSB7XG4gICAgICAgIHg6IGxhYmVsQ2VudGVyLngsXG4gICAgICAgIHk6IGxhYmVsQ2VudGVyLnkgKyBwYWRkaW5nVG9wXG4gICAgICB9O1xuXG4gICAgICBtb2RlbGluZy5jcmVhdGVMYWJlbChlbGVtZW50LCBsYWJlbENlbnRlciwge1xuICAgICAgICBpZDogYnVzaW5lc3NPYmplY3QuaWQgKyAnX2xhYmVsJyxcbiAgICAgICAgYnVzaW5lc3NPYmplY3Q6IGJ1c2luZXNzT2JqZWN0XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBleGVjdXRlKGN0eCkge1xuICAgIGN0eC5vbGRMYWJlbCA9IGdldExhYmVsKGN0eC5lbGVtZW50KTtcbiAgICByZXR1cm4gc2V0VGV4dChjdHguZWxlbWVudCwgY3R4Lm5ld0xhYmVsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJldmVydChjdHgpIHtcbiAgICByZXR1cm4gc2V0VGV4dChjdHguZWxlbWVudCwgY3R4Lm9sZExhYmVsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBvc3RFeGVjdXRlKGN0eCkge1xuICAgIHZhciBlbGVtZW50ID0gY3R4LmVsZW1lbnQsXG4gICAgICAgIGxhYmVsID0gZWxlbWVudC5sYWJlbCB8fCBlbGVtZW50LFxuICAgICAgICBuZXdMYWJlbCA9IGN0eC5uZXdMYWJlbCxcbiAgICAgICAgbmV3Qm91bmRzID0gY3R4Lm5ld0JvdW5kcyxcbiAgICAgICAgaGludHMgPSBjdHguaGludHMgfHwge307XG5cbiAgICAvLyBpZ25vcmUgaW50ZXJuYWwgbGFiZWxzIGZvciBlbGVtZW50cyBleGNlcHQgdGV4dCBhbm5vdGF0aW9uc1xuICAgIGlmICghaXNMYWJlbChsYWJlbCkgJiYgIWlzKGxhYmVsLCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzTGFiZWwobGFiZWwpICYmIGlzRW1wdHlUZXh0KG5ld0xhYmVsKSkge1xuXG4gICAgICBpZiAoaGludHMucmVtb3ZlU2hhcGUgIT09IGZhbHNlKSB7XG4gICAgICAgIG1vZGVsaW5nLnJlbW92ZVNoYXBlKGxhYmVsLCB7IHVuc2V0TGFiZWw6IGZhbHNlIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRleHQgPSBnZXRMYWJlbChsYWJlbCk7XG5cbiAgICAvLyByZXNpemUgZWxlbWVudCBiYXNlZCBvbiBsYWJlbCBfb3JfIHByZS1kZWZpbmVkIGJvdW5kc1xuICAgIGlmICh0eXBlb2YgbmV3Qm91bmRzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgbmV3Qm91bmRzID0gdGV4dFJlbmRlcmVyLmdldEV4dGVybmFsTGFiZWxCb3VuZHMobGFiZWwsIHRleHQpO1xuICAgIH1cblxuICAgIC8vIHNldHRpbmcgbmV3Qm91bmRzIHRvIGZhbHNlIG9yIF9udWxsXyB3aWxsXG4gICAgLy8gZGlzYWJsZSB0aGUgcG9zdEV4ZWN1dGUgcmVzaXplIG9wZXJhdGlvblxuICAgIGlmIChuZXdCb3VuZHMpIHtcbiAgICAgIG1vZGVsaW5nLnJlc2l6ZVNoYXBlKGxhYmVsLCBuZXdCb3VuZHMsIE5VTExfRElNRU5TSU9OUyk7XG4gICAgfVxuICB9XG5cbiAgLy8gQVBJXG5cbiAgdGhpcy5wcmVFeGVjdXRlID0gcHJlRXhlY3V0ZTtcbiAgdGhpcy5leGVjdXRlID0gZXhlY3V0ZTtcbiAgdGhpcy5yZXZlcnQgPSByZXZlcnQ7XG4gIHRoaXMucG9zdEV4ZWN1dGUgPSBwb3N0RXhlY3V0ZTtcbn1cblxuVXBkYXRlTGFiZWxIYW5kbGVyLiRpbmplY3QgPSBbXG4gICdtb2RlbGluZycsXG4gICd0ZXh0UmVuZGVyZXInXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gaXNFbXB0eVRleHQobGFiZWwpIHtcbiAgcmV0dXJuICFsYWJlbCB8fCAhbGFiZWwudHJpbSgpO1xufSIsImltcG9ydCBDaGFuZ2VTdXBwb3J0TW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NoYW5nZS1zdXBwb3J0JztcbmltcG9ydCBSZXNpemVNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcmVzaXplJztcbmltcG9ydCBEaXJlY3RFZGl0aW5nTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMtZGlyZWN0LWVkaXRpbmcnO1xuXG5pbXBvcnQgTGFiZWxFZGl0aW5nUHJvdmlkZXIgZnJvbSAnLi9MYWJlbEVkaXRpbmdQcm92aWRlcic7XG5pbXBvcnQgTGFiZWxFZGl0aW5nUHJldmlldyBmcm9tICcuL0xhYmVsRWRpdGluZ1ByZXZpZXcnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBDaGFuZ2VTdXBwb3J0TW9kdWxlLFxuICAgIFJlc2l6ZU1vZHVsZSxcbiAgICBEaXJlY3RFZGl0aW5nTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbXG4gICAgJ2xhYmVsRWRpdGluZ1Byb3ZpZGVyJyxcbiAgICAnbGFiZWxFZGl0aW5nUHJldmlldydcbiAgXSxcbiAgbGFiZWxFZGl0aW5nUHJvdmlkZXI6IFsgJ3R5cGUnLCBMYWJlbEVkaXRpbmdQcm92aWRlciBdLFxuICBsYWJlbEVkaXRpbmdQcmV2aWV3OiBbICd0eXBlJywgTGFiZWxFZGl0aW5nUHJldmlldyBdXG59O1xuIiwiaW1wb3J0IHtcbiAgbWFwLFxuICBhc3NpZ24sXG4gIHBpY2tcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBpc0FueVxufSBmcm9tICcuL3V0aWwvTW9kZWxpbmdVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNcbn0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5GYWN0b3J5KG1vZGRsZSkge1xuICB0aGlzLl9tb2RlbCA9IG1vZGRsZTtcbn1cblxuQnBtbkZhY3RvcnkuJGluamVjdCA9IFsgJ21vZGRsZScgXTtcblxuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuX25lZWRzSWQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBpc0FueShlbGVtZW50LCBbXG4gICAgJ2JwbW46Um9vdEVsZW1lbnQnLFxuICAgICdicG1uOkZsb3dFbGVtZW50JyxcbiAgICAnYnBtbjpNZXNzYWdlRmxvdycsXG4gICAgJ2JwbW46RGF0YUFzc29jaWF0aW9uJyxcbiAgICAnYnBtbjpBcnRpZmFjdCcsXG4gICAgJ2JwbW46UGFydGljaXBhbnQnLFxuICAgICdicG1uOkxhbmUnLFxuICAgICdicG1uOkxhbmVTZXQnLFxuICAgICdicG1uOlByb2Nlc3MnLFxuICAgICdicG1uOkNvbGxhYm9yYXRpb24nLFxuICAgICdicG1uZGk6QlBNTlNoYXBlJyxcbiAgICAnYnBtbmRpOkJQTU5FZGdlJyxcbiAgICAnYnBtbmRpOkJQTU5EaWFncmFtJyxcbiAgICAnYnBtbmRpOkJQTU5QbGFuZScsXG4gICAgJ2JwbW46UHJvcGVydHknLFxuICAgICdicG1uOkNhdGVnb3J5VmFsdWUnXG4gIF0pO1xufTtcblxuQnBtbkZhY3RvcnkucHJvdG90eXBlLl9lbnN1cmVJZCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAvLyBnZW5lcmF0ZSBzZW1hbnRpYyBpZHMgZm9yIGVsZW1lbnRzXG4gIC8vIGJwbW46U2VxdWVuY2VGbG93IC0+IFNlcXVlbmNlRmxvd19JRFxuICB2YXIgcHJlZml4O1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpBY3Rpdml0eScpKSB7XG4gICAgcHJlZml4ID0gJ0FjdGl2aXR5JztcbiAgfSBlbHNlIGlmIChpcyhlbGVtZW50LCAnYnBtbjpFdmVudCcpKSB7XG4gICAgcHJlZml4ID0gJ0V2ZW50JztcbiAgfSBlbHNlIGlmIChpcyhlbGVtZW50LCAnYnBtbjpHYXRld2F5JykpIHtcbiAgICBwcmVmaXggPSAnR2F0ZXdheSc7XG4gIH0gZWxzZSBpZiAoaXNBbnkoZWxlbWVudCwgWyAnYnBtbjpTZXF1ZW5jZUZsb3cnLCAnYnBtbjpNZXNzYWdlRmxvdycgXSkpIHtcbiAgICBwcmVmaXggPSAnRmxvdyc7XG4gIH0gZWxzZSB7XG4gICAgcHJlZml4ID0gKGVsZW1lbnQuJHR5cGUgfHwgJycpLnJlcGxhY2UoL15bXjpdKjovZywgJycpO1xuICB9XG5cbiAgcHJlZml4ICs9ICdfJztcblxuICBpZiAoIWVsZW1lbnQuaWQgJiYgdGhpcy5fbmVlZHNJZChlbGVtZW50KSkge1xuICAgIGVsZW1lbnQuaWQgPSB0aGlzLl9tb2RlbC5pZHMubmV4dFByZWZpeGVkKHByZWZpeCwgZWxlbWVudCk7XG4gIH1cbn07XG5cblxuQnBtbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uKHR5cGUsIGF0dHJzKSB7XG4gIHZhciBlbGVtZW50ID0gdGhpcy5fbW9kZWwuY3JlYXRlKHR5cGUsIGF0dHJzIHx8IHt9KTtcblxuICB0aGlzLl9lbnN1cmVJZChlbGVtZW50KTtcblxuICByZXR1cm4gZWxlbWVudDtcbn07XG5cblxuQnBtbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZURpTGFiZWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuY3JlYXRlKCdicG1uZGk6QlBNTkxhYmVsJywge1xuICAgIGJvdW5kczogdGhpcy5jcmVhdGVEaUJvdW5kcygpXG4gIH0pO1xufTtcblxuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlRGlTaGFwZSA9IGZ1bmN0aW9uKHNlbWFudGljLCBib3VuZHMsIGF0dHJzKSB7XG5cbiAgcmV0dXJuIHRoaXMuY3JlYXRlKCdicG1uZGk6QlBNTlNoYXBlJywgYXNzaWduKHtcbiAgICBicG1uRWxlbWVudDogc2VtYW50aWMsXG4gICAgYm91bmRzOiB0aGlzLmNyZWF0ZURpQm91bmRzKGJvdW5kcylcbiAgfSwgYXR0cnMpKTtcbn07XG5cblxuQnBtbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZURpQm91bmRzID0gZnVuY3Rpb24oYm91bmRzKSB7XG4gIHJldHVybiB0aGlzLmNyZWF0ZSgnZGM6Qm91bmRzJywgYm91bmRzKTtcbn07XG5cblxuQnBtbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZURpV2F5cG9pbnRzID0gZnVuY3Rpb24od2F5cG9pbnRzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICByZXR1cm4gbWFwKHdheXBvaW50cywgZnVuY3Rpb24ocG9zKSB7XG4gICAgcmV0dXJuIHNlbGYuY3JlYXRlRGlXYXlwb2ludChwb3MpO1xuICB9KTtcbn07XG5cbkJwbW5GYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVEaVdheXBvaW50ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgcmV0dXJuIHRoaXMuY3JlYXRlKCdkYzpQb2ludCcsIHBpY2socG9pbnQsIFsgJ3gnLCAneScgXSkpO1xufTtcblxuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlRGlFZGdlID0gZnVuY3Rpb24oc2VtYW50aWMsIHdheXBvaW50cywgYXR0cnMpIHtcbiAgcmV0dXJuIHRoaXMuY3JlYXRlKCdicG1uZGk6QlBNTkVkZ2UnLCBhc3NpZ24oe1xuICAgIGJwbW5FbGVtZW50OiBzZW1hbnRpY1xuICB9LCBhdHRycykpO1xufTtcblxuQnBtbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZURpUGxhbmUgPSBmdW5jdGlvbihzZW1hbnRpYykge1xuICByZXR1cm4gdGhpcy5jcmVhdGUoJ2JwbW5kaTpCUE1OUGxhbmUnLCB7XG4gICAgYnBtbkVsZW1lbnQ6IHNlbWFudGljXG4gIH0pO1xufTsiLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQge1xuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgQmFzZUxheW91dGVyIGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9CYXNlTGF5b3V0ZXInO1xuXG5pbXBvcnQge1xuICByZXBhaXJDb25uZWN0aW9uLFxuICB3aXRob3V0UmVkdW5kYW50UG9pbnRzXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9NYW5oYXR0YW5MYXlvdXQnO1xuXG5pbXBvcnQge1xuICBnZXRNaWQsXG4gIGdldE9yaWVudGF0aW9uXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNFeHBhbmRlZFxufSBmcm9tICcuLi8uLi91dGlsL0RpVXRpbCc7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG52YXIgQVRUQUNIX09SSUVOVEFUSU9OX1BBRERJTkcgPSAtMTAsXG4gICAgQk9VTkRBUllfVE9fSE9TVF9USFJFU0hPTEQgPSA0MDtcblxudmFyIG9wcG9zaXRlT3JpZW50YXRpb25NYXBwaW5nID0ge1xuICAndG9wJzogJ2JvdHRvbScsXG4gICd0b3AtcmlnaHQnOiAnYm90dG9tLWxlZnQnLFxuICAndG9wLWxlZnQnOiAnYm90dG9tLXJpZ2h0JyxcbiAgJ3JpZ2h0JzogJ2xlZnQnLFxuICAnYm90dG9tJzogJ3RvcCcsXG4gICdib3R0b20tcmlnaHQnOiAndG9wLWxlZnQnLFxuICAnYm90dG9tLWxlZnQnOiAndG9wLXJpZ2h0JyxcbiAgJ2xlZnQnOiAncmlnaHQnXG59O1xuXG52YXIgb3JpZW50YXRpb25EaXJlY3Rpb25NYXBwaW5nID0ge1xuICB0b3A6ICd0JyxcbiAgcmlnaHQ6ICdyJyxcbiAgYm90dG9tOiAnYicsXG4gIGxlZnQ6ICdsJ1xufTtcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uTGF5b3V0ZXIoKSB7fVxuXG5pbmhlcml0cyhCcG1uTGF5b3V0ZXIsIEJhc2VMYXlvdXRlcik7XG5cblxuQnBtbkxheW91dGVyLnByb3RvdHlwZS5sYXlvdXRDb25uZWN0aW9uID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgaGludHMpIHtcbiAgaWYgKCFoaW50cykge1xuICAgIGhpbnRzID0ge307XG4gIH1cblxuICB2YXIgc291cmNlID0gaGludHMuc291cmNlIHx8IGNvbm5lY3Rpb24uc291cmNlLFxuICAgICAgdGFyZ2V0ID0gaGludHMudGFyZ2V0IHx8IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgd2F5cG9pbnRzID0gaGludHMud2F5cG9pbnRzIHx8IGNvbm5lY3Rpb24ud2F5cG9pbnRzLFxuICAgICAgY29ubmVjdGlvblN0YXJ0ID0gaGludHMuY29ubmVjdGlvblN0YXJ0LFxuICAgICAgY29ubmVjdGlvbkVuZCA9IGhpbnRzLmNvbm5lY3Rpb25FbmQ7XG5cbiAgdmFyIG1hbmhhdHRhbk9wdGlvbnMsXG4gICAgICB1cGRhdGVkV2F5cG9pbnRzO1xuXG4gIGlmICghY29ubmVjdGlvblN0YXJ0KSB7XG4gICAgY29ubmVjdGlvblN0YXJ0ID0gZ2V0Q29ubmVjdGlvbkRvY2tpbmcod2F5cG9pbnRzICYmIHdheXBvaW50c1sgMCBdLCBzb3VyY2UpO1xuICB9XG5cbiAgaWYgKCFjb25uZWN0aW9uRW5kKSB7XG4gICAgY29ubmVjdGlvbkVuZCA9IGdldENvbm5lY3Rpb25Eb2NraW5nKHdheXBvaW50cyAmJiB3YXlwb2ludHNbIHdheXBvaW50cy5sZW5ndGggLSAxIF0sIHRhcmdldCk7XG4gIH1cblxuICAvLyBUT0RPKG5pa2t1KTogc3VwcG9ydCB2ZXJ0aWNhbCBtb2RlbGluZ1xuICAvLyBhbmQgaW52ZXJ0IHByZWZlcnJlZExheW91dHMgYWNjb3JkaW5nbHlcblxuICBpZiAoaXMoY29ubmVjdGlvbiwgJ2JwbW46QXNzb2NpYXRpb24nKSB8fFxuICAgICAgaXMoY29ubmVjdGlvbiwgJ2JwbW46RGF0YUFzc29jaWF0aW9uJykpIHtcblxuICAgIGlmICh3YXlwb2ludHMgJiYgIWlzQ29tcGVuc2F0aW9uQXNzb2NpYXRpb24oc291cmNlLCB0YXJnZXQpKSB7XG4gICAgICByZXR1cm4gW10uY29uY2F0KFsgY29ubmVjdGlvblN0YXJ0IF0sIHdheXBvaW50cy5zbGljZSgxLCAtMSksIFsgY29ubmVjdGlvbkVuZCBdKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXMoY29ubmVjdGlvbiwgJ2JwbW46TWVzc2FnZUZsb3cnKSkge1xuICAgIG1hbmhhdHRhbk9wdGlvbnMgPSBnZXRNZXNzYWdlRmxvd01hbmhhdHRhbk9wdGlvbnMoc291cmNlLCB0YXJnZXQpO1xuICB9IGVsc2UgaWYgKGlzKGNvbm5lY3Rpb24sICdicG1uOlNlcXVlbmNlRmxvdycpIHx8IGlzQ29tcGVuc2F0aW9uQXNzb2NpYXRpb24oc291cmNlLCB0YXJnZXQpKSB7XG5cbiAgICAvLyBsYXlvdXQgYWxsIGNvbm5lY3Rpb24gYmV0d2VlbiBmbG93IGVsZW1lbnRzIGg6aCwgZXhjZXB0IGZvclxuICAgIC8vICgxKSBvdXRnb2luZyBvZiBib3VuZGFyeSBldmVudHMgLT4gbGF5b3V0IGJhc2VkIG9uIGF0dGFjaCBvcmllbnRhdGlvbiBhbmQgdGFyZ2V0IG9yaWVudGF0aW9uXG4gICAgLy8gKDIpIGluY29taW5nL291dGdvaW5nIG9mIGdhdGV3YXlzIC0+IHY6aCBmb3Igb3V0Z29pbmcsIGg6diBmb3IgaW5jb21pbmdcbiAgICAvLyAoMykgbG9vcHNcbiAgICBpZiAoc291cmNlID09PSB0YXJnZXQpIHtcbiAgICAgIG1hbmhhdHRhbk9wdGlvbnMgPSB7XG4gICAgICAgIHByZWZlcnJlZExheW91dHM6IGdldExvb3BQcmVmZXJyZWRMYXlvdXQoc291cmNlLCBjb25uZWN0aW9uKVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGlzKHNvdXJjZSwgJ2JwbW46Qm91bmRhcnlFdmVudCcpKSB7XG4gICAgICBtYW5oYXR0YW5PcHRpb25zID0ge1xuICAgICAgICBwcmVmZXJyZWRMYXlvdXRzOiBnZXRCb3VuZGFyeUV2ZW50UHJlZmVycmVkTGF5b3V0cyhzb3VyY2UsIHRhcmdldCwgY29ubmVjdGlvbkVuZClcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChpc0V4cGFuZGVkU3ViUHJvY2Vzcyhzb3VyY2UpIHx8IGlzRXhwYW5kZWRTdWJQcm9jZXNzKHRhcmdldCkpIHtcbiAgICAgIG1hbmhhdHRhbk9wdGlvbnMgPSBnZXRTdWJQcm9jZXNzTWFuaGF0dGFuT3B0aW9ucyhzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAoaXMoc291cmNlLCAnYnBtbjpHYXRld2F5JykpIHtcbiAgICAgIG1hbmhhdHRhbk9wdGlvbnMgPSB7XG4gICAgICAgIHByZWZlcnJlZExheW91dHM6IFsgJ3Y6aCcgXVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGlzKHRhcmdldCwgJ2JwbW46R2F0ZXdheScpKSB7XG4gICAgICBtYW5oYXR0YW5PcHRpb25zID0ge1xuICAgICAgICBwcmVmZXJyZWRMYXlvdXRzOiBbICdoOnYnIF1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hbmhhdHRhbk9wdGlvbnMgPSB7XG4gICAgICAgIHByZWZlcnJlZExheW91dHM6IFsgJ2g6aCcgXVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBpZiAobWFuaGF0dGFuT3B0aW9ucykge1xuICAgIG1hbmhhdHRhbk9wdGlvbnMgPSBhc3NpZ24obWFuaGF0dGFuT3B0aW9ucywgaGludHMpO1xuXG4gICAgdXBkYXRlZFdheXBvaW50cyA9IHdpdGhvdXRSZWR1bmRhbnRQb2ludHMocmVwYWlyQ29ubmVjdGlvbihcbiAgICAgIHNvdXJjZSxcbiAgICAgIHRhcmdldCxcbiAgICAgIGNvbm5lY3Rpb25TdGFydCxcbiAgICAgIGNvbm5lY3Rpb25FbmQsXG4gICAgICB3YXlwb2ludHMsXG4gICAgICBtYW5oYXR0YW5PcHRpb25zXG4gICAgKSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlZFdheXBvaW50cyB8fCBbIGNvbm5lY3Rpb25TdGFydCwgY29ubmVjdGlvbkVuZCBdO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0QXR0YWNoT3JpZW50YXRpb24oYXR0YWNoZWRFbGVtZW50KSB7XG4gIHZhciBob3N0RWxlbWVudCA9IGF0dGFjaGVkRWxlbWVudC5ob3N0O1xuXG4gIHJldHVybiBnZXRPcmllbnRhdGlvbihnZXRNaWQoYXR0YWNoZWRFbGVtZW50KSwgaG9zdEVsZW1lbnQsIEFUVEFDSF9PUklFTlRBVElPTl9QQURESU5HKTtcbn1cblxuZnVuY3Rpb24gZ2V0TWVzc2FnZUZsb3dNYW5oYXR0YW5PcHRpb25zKHNvdXJjZSwgdGFyZ2V0KSB7XG4gIHJldHVybiB7XG4gICAgcHJlZmVycmVkTGF5b3V0czogWyAnc3RyYWlnaHQnLCAndjp2JyBdLFxuICAgIHByZXNlcnZlRG9ja2luZzogZ2V0TWVzc2FnZUZsb3dQcmVzZXJ2ZURvY2tpbmcoc291cmNlLCB0YXJnZXQpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldE1lc3NhZ2VGbG93UHJlc2VydmVEb2NraW5nKHNvdXJjZSwgdGFyZ2V0KSB7XG5cbiAgLy8gKDEpIGRvY2tpbmcgZWxlbWVudCBjb25uZWN0ZWQgdG8gcGFydGljaXBhbnQgaGFzIHByZWNlZGVuY2VcbiAgaWYgKGlzKHRhcmdldCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIHJldHVybiAnc291cmNlJztcbiAgfVxuXG4gIGlmIChpcyhzb3VyY2UsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICByZXR1cm4gJ3RhcmdldCc7XG4gIH1cblxuICAvLyAoMikgZG9ja2luZyBlbGVtZW50IGNvbm5lY3RlZCB0byBleHBhbmRlZCBzdWItcHJvY2VzcyBoYXMgcHJlY2VkZW5jZVxuICBpZiAoaXNFeHBhbmRlZFN1YlByb2Nlc3ModGFyZ2V0KSkge1xuICAgIHJldHVybiAnc291cmNlJztcbiAgfVxuXG4gIGlmIChpc0V4cGFuZGVkU3ViUHJvY2Vzcyhzb3VyY2UpKSB7XG4gICAgcmV0dXJuICd0YXJnZXQnO1xuICB9XG5cbiAgLy8gKDMpIGRvY2tpbmcgZXZlbnQgaGFzIHByZWNlZGVuY2VcbiAgaWYgKGlzKHRhcmdldCwgJ2JwbW46RXZlbnQnKSkge1xuICAgIHJldHVybiAndGFyZ2V0JztcbiAgfVxuXG4gIGlmIChpcyhzb3VyY2UsICdicG1uOkV2ZW50JykpIHtcbiAgICByZXR1cm4gJ3NvdXJjZSc7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0U3ViUHJvY2Vzc01hbmhhdHRhbk9wdGlvbnMoc291cmNlKSB7XG4gIHJldHVybiB7XG4gICAgcHJlZmVycmVkTGF5b3V0czogWyAnc3RyYWlnaHQnLCAnaDpoJyBdLFxuICAgIHByZXNlcnZlRG9ja2luZzogZ2V0U3ViUHJvY2Vzc1ByZXNlcnZlRG9ja2luZyhzb3VyY2UpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFN1YlByb2Nlc3NQcmVzZXJ2ZURvY2tpbmcoc291cmNlKSB7XG4gIHJldHVybiBpc0V4cGFuZGVkU3ViUHJvY2Vzcyhzb3VyY2UpID8gJ3RhcmdldCcgOiAnc291cmNlJztcbn1cblxuZnVuY3Rpb24gZ2V0Q29ubmVjdGlvbkRvY2tpbmcocG9pbnQsIHNoYXBlKSB7XG4gIHJldHVybiBwb2ludCA/IChwb2ludC5vcmlnaW5hbCB8fCBwb2ludCkgOiBnZXRNaWQoc2hhcGUpO1xufVxuXG5mdW5jdGlvbiBpc0NvbXBlbnNhdGlvbkFzc29jaWF0aW9uKHNvdXJjZSwgdGFyZ2V0KSB7XG4gIHJldHVybiBpcyh0YXJnZXQsICdicG1uOkFjdGl2aXR5JykgJiZcbiAgICBpcyhzb3VyY2UsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSAmJlxuICAgIHRhcmdldC5idXNpbmVzc09iamVjdC5pc0ZvckNvbXBlbnNhdGlvbjtcbn1cblxuZnVuY3Rpb24gaXNFeHBhbmRlZFN1YlByb2Nlc3MoZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46U3ViUHJvY2VzcycpICYmIGlzRXhwYW5kZWQoZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGlzU2FtZShhLCBiKSB7XG4gIHJldHVybiBhID09PSBiO1xufVxuXG5mdW5jdGlvbiBpc0FueU9yaWVudGF0aW9uKG9yaWVudGF0aW9uLCBvcmllbnRhdGlvbnMpIHtcbiAgcmV0dXJuIG9yaWVudGF0aW9ucy5pbmRleE9mKG9yaWVudGF0aW9uKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIGdldEhvcml6b250YWxPcmllbnRhdGlvbihvcmllbnRhdGlvbikge1xuICB2YXIgbWF0Y2hlcyA9IC9yaWdodHxsZWZ0Ly5leGVjKG9yaWVudGF0aW9uKTtcblxuICByZXR1cm4gbWF0Y2hlcyAmJiBtYXRjaGVzWzBdO1xufVxuXG5mdW5jdGlvbiBnZXRWZXJ0aWNhbE9yaWVudGF0aW9uKG9yaWVudGF0aW9uKSB7XG4gIHZhciBtYXRjaGVzID0gL3RvcHxib3R0b20vLmV4ZWMob3JpZW50YXRpb24pO1xuXG4gIHJldHVybiBtYXRjaGVzICYmIG1hdGNoZXNbMF07XG59XG5cbmZ1bmN0aW9uIGlzT3Bwb3NpdGVPcmllbnRhdGlvbihhLCBiKSB7XG4gIHJldHVybiBvcHBvc2l0ZU9yaWVudGF0aW9uTWFwcGluZ1thXSA9PT0gYjtcbn1cblxuZnVuY3Rpb24gaXNPcHBvc2l0ZUhvcml6b250YWxPcmllbnRhdGlvbihhLCBiKSB7XG4gIHZhciBob3Jpem9udGFsT3JpZW50YXRpb24gPSBnZXRIb3Jpem9udGFsT3JpZW50YXRpb24oYSk7XG5cbiAgdmFyIG9wcG9zaXRlSG9yaXpvbnRhbE9yaWVudGF0aW9uID0gb3Bwb3NpdGVPcmllbnRhdGlvbk1hcHBpbmdbaG9yaXpvbnRhbE9yaWVudGF0aW9uXTtcblxuICByZXR1cm4gYi5pbmRleE9mKG9wcG9zaXRlSG9yaXpvbnRhbE9yaWVudGF0aW9uKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIGlzT3Bwb3NpdGVWZXJ0aWNhbE9yaWVudGF0aW9uKGEsIGIpIHtcbiAgdmFyIHZlcnRpY2FsT3JpZW50YXRpb24gPSBnZXRWZXJ0aWNhbE9yaWVudGF0aW9uKGEpO1xuXG4gIHZhciBvcHBvc2l0ZVZlcnRpY2FsT3JpZW50YXRpb24gPSBvcHBvc2l0ZU9yaWVudGF0aW9uTWFwcGluZ1t2ZXJ0aWNhbE9yaWVudGF0aW9uXTtcblxuICByZXR1cm4gYi5pbmRleE9mKG9wcG9zaXRlVmVydGljYWxPcmllbnRhdGlvbikgIT09IC0xO1xufVxuXG5mdW5jdGlvbiBpc0hvcml6b250YWxPcmllbnRhdGlvbihvcmllbnRhdGlvbikge1xuICByZXR1cm4gb3JpZW50YXRpb24gPT09ICdyaWdodCcgfHwgb3JpZW50YXRpb24gPT09ICdsZWZ0Jztcbn1cblxuZnVuY3Rpb24gZ2V0TG9vcFByZWZlcnJlZExheW91dChzb3VyY2UsIGNvbm5lY3Rpb24pIHtcbiAgdmFyIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzO1xuXG4gIHZhciBvcmllbnRhdGlvbiA9IHdheXBvaW50cyAmJiB3YXlwb2ludHMubGVuZ3RoICYmIGdldE9yaWVudGF0aW9uKHdheXBvaW50c1swXSwgc291cmNlKTtcblxuICBpZiAob3JpZW50YXRpb24gPT09ICd0b3AnKSB7XG4gICAgcmV0dXJuIFsgJ3Q6cicgXTtcbiAgfSBlbHNlIGlmIChvcmllbnRhdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgIHJldHVybiBbICdyOmInIF07XG4gIH0gZWxzZSBpZiAob3JpZW50YXRpb24gPT09ICdsZWZ0Jykge1xuICAgIHJldHVybiBbICdsOnQnIF07XG4gIH1cblxuICByZXR1cm4gWyAnYjpsJyBdO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGFyeUV2ZW50UHJlZmVycmVkTGF5b3V0cyhzb3VyY2UsIHRhcmdldCwgZW5kKSB7XG4gIHZhciBzb3VyY2VNaWQgPSBnZXRNaWQoc291cmNlKSxcbiAgICAgIHRhcmdldE1pZCA9IGdldE1pZCh0YXJnZXQpLFxuICAgICAgYXR0YWNoT3JpZW50YXRpb24gPSBnZXRBdHRhY2hPcmllbnRhdGlvbihzb3VyY2UpLFxuICAgICAgc291cmNlTGF5b3V0LFxuICAgICAgdGFyZ2V0TGF5b3V0O1xuXG4gIHZhciBpc0xvb3AgPSBpc1NhbWUoc291cmNlLmhvc3QsIHRhcmdldCk7XG5cbiAgdmFyIGF0dGFjaGVkVG9TaWRlID0gaXNBbnlPcmllbnRhdGlvbihhdHRhY2hPcmllbnRhdGlvbiwgWyAndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0JyBdKTtcblxuICB2YXIgdGFyZ2V0T3JpZW50YXRpb24gPSBnZXRPcmllbnRhdGlvbih0YXJnZXRNaWQsIHNvdXJjZU1pZCwge1xuICAgIHg6IHNvdXJjZS53aWR0aCAvIDIgKyB0YXJnZXQud2lkdGggLyAyLFxuICAgIHk6IHNvdXJjZS5oZWlnaHQgLyAyICsgdGFyZ2V0LmhlaWdodCAvIDJcbiAgfSk7XG5cbiAgaWYgKGlzTG9vcCkge1xuICAgIHJldHVybiBnZXRCb3VuZGFyeUV2ZW50TG9vcExheW91dChhdHRhY2hPcmllbnRhdGlvbiwgYXR0YWNoZWRUb1NpZGUsIHNvdXJjZSwgdGFyZ2V0LCBlbmQpO1xuICB9XG5cbiAgLy8gc291cmNlIGxheW91dFxuICBzb3VyY2VMYXlvdXQgPSBnZXRCb3VuZGFyeUV2ZW50U291cmNlTGF5b3V0KGF0dGFjaE9yaWVudGF0aW9uLCB0YXJnZXRPcmllbnRhdGlvbiwgYXR0YWNoZWRUb1NpZGUpO1xuXG4gIC8vIHRhcmdldCBsYXlvdXRcbiAgdGFyZ2V0TGF5b3V0ID0gZ2V0Qm91bmRhcnlFdmVudFRhcmdldExheW91dChhdHRhY2hPcmllbnRhdGlvbiwgdGFyZ2V0T3JpZW50YXRpb24sIGF0dGFjaGVkVG9TaWRlKTtcblxuICByZXR1cm4gWyBzb3VyY2VMYXlvdXQgKyAnOicgKyB0YXJnZXRMYXlvdXQgXTtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRhcnlFdmVudExvb3BMYXlvdXQoYXR0YWNoT3JpZW50YXRpb24sIGF0dGFjaGVkVG9TaWRlLCBzb3VyY2UsIHRhcmdldCwgZW5kKSB7XG4gIHZhciBvcmllbnRhdGlvbiA9IGF0dGFjaGVkVG9TaWRlID8gYXR0YWNoT3JpZW50YXRpb24gOiBnZXRWZXJ0aWNhbE9yaWVudGF0aW9uKGF0dGFjaE9yaWVudGF0aW9uKSxcbiAgICAgIHNvdXJjZUxheW91dCA9IG9yaWVudGF0aW9uRGlyZWN0aW9uTWFwcGluZ1sgb3JpZW50YXRpb24gXSxcbiAgICAgIHRhcmdldExheW91dDtcblxuICBpZiAoYXR0YWNoZWRUb1NpZGUpIHtcbiAgICBpZiAoaXNIb3Jpem9udGFsT3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24pKSB7XG4gICAgICB0YXJnZXRMYXlvdXQgPSBzaG91bGRDb25uZWN0VG9TYW1lU2lkZSgneScsIHNvdXJjZSwgdGFyZ2V0LCBlbmQpID8gJ2gnIDogJ2InO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRMYXlvdXQgPSBzaG91bGRDb25uZWN0VG9TYW1lU2lkZSgneCcsIHNvdXJjZSwgdGFyZ2V0LCBlbmQpID8gJ3YnIDogJ2wnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0YXJnZXRMYXlvdXQgPSAndic7XG4gIH1cblxuICByZXR1cm4gWyBzb3VyY2VMYXlvdXQgKyAnOicgKyB0YXJnZXRMYXlvdXQgXTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkQ29ubmVjdFRvU2FtZVNpZGUoYXhpcywgc291cmNlLCB0YXJnZXQsIGVuZCkge1xuICB2YXIgdGhyZXNob2xkID0gQk9VTkRBUllfVE9fSE9TVF9USFJFU0hPTEQ7XG5cbiAgcmV0dXJuICEoXG4gICAgYXJlQ2xvc2VPbkF4aXMoYXhpcywgZW5kLCB0YXJnZXQsIHRocmVzaG9sZCkgfHxcbiAgICBhcmVDbG9zZU9uQXhpcyhheGlzLCBlbmQsIHtcbiAgICAgIHg6IHRhcmdldC54ICsgdGFyZ2V0LndpZHRoLFxuICAgICAgeTogdGFyZ2V0LnkgKyB0YXJnZXQuaGVpZ2h0XG4gICAgfSwgdGhyZXNob2xkKSB8fFxuICAgIGFyZUNsb3NlT25BeGlzKGF4aXMsIGVuZCwgZ2V0TWlkKHNvdXJjZSksIHRocmVzaG9sZClcbiAgKTtcbn1cblxuZnVuY3Rpb24gYXJlQ2xvc2VPbkF4aXMoYXhpcywgYSwgYiwgdGhyZXNob2xkKSB7XG4gIHJldHVybiBNYXRoLmFicyhhWyBheGlzIF0gLSBiWyBheGlzIF0pIDwgdGhyZXNob2xkO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGFyeUV2ZW50U291cmNlTGF5b3V0KGF0dGFjaE9yaWVudGF0aW9uLCB0YXJnZXRPcmllbnRhdGlvbiwgYXR0YWNoZWRUb1NpZGUpIHtcblxuICAvLyBhdHRhY2hlZCB0byBlaXRoZXIgdG9wLCByaWdodCwgYm90dG9tIG9yIGxlZnQgc2lkZVxuICBpZiAoYXR0YWNoZWRUb1NpZGUpIHtcbiAgICByZXR1cm4gb3JpZW50YXRpb25EaXJlY3Rpb25NYXBwaW5nWyBhdHRhY2hPcmllbnRhdGlvbiBdO1xuICB9XG5cbiAgLy8gYXR0YWNoZWQgdG8gZWl0aGVyIHRvcC1yaWdodCwgdG9wLWxlZnQsIGJvdHRvbS1yaWdodCBvciBib3R0b20tbGVmdCBjb3JuZXJcblxuICAvLyBzYW1lIHZlcnRpY2FsIG9yIG9wcG9zaXRlIGhvcml6b250YWwgb3JpZW50YXRpb25cbiAgaWYgKGlzU2FtZShcbiAgICBnZXRWZXJ0aWNhbE9yaWVudGF0aW9uKGF0dGFjaE9yaWVudGF0aW9uKSwgZ2V0VmVydGljYWxPcmllbnRhdGlvbih0YXJnZXRPcmllbnRhdGlvbilcbiAgKSB8fCBpc09wcG9zaXRlT3JpZW50YXRpb24oXG4gICAgZ2V0SG9yaXpvbnRhbE9yaWVudGF0aW9uKGF0dGFjaE9yaWVudGF0aW9uKSwgZ2V0SG9yaXpvbnRhbE9yaWVudGF0aW9uKHRhcmdldE9yaWVudGF0aW9uKVxuICApKSB7XG4gICAgcmV0dXJuIG9yaWVudGF0aW9uRGlyZWN0aW9uTWFwcGluZ1sgZ2V0VmVydGljYWxPcmllbnRhdGlvbihhdHRhY2hPcmllbnRhdGlvbikgXTtcbiAgfVxuXG4gIC8vIGZhbGxiYWNrXG4gIHJldHVybiBvcmllbnRhdGlvbkRpcmVjdGlvbk1hcHBpbmdbIGdldEhvcml6b250YWxPcmllbnRhdGlvbihhdHRhY2hPcmllbnRhdGlvbikgXTtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRhcnlFdmVudFRhcmdldExheW91dChhdHRhY2hPcmllbnRhdGlvbiwgdGFyZ2V0T3JpZW50YXRpb24sIGF0dGFjaGVkVG9TaWRlKSB7XG5cbiAgLy8gYXR0YWNoZWQgdG8gZWl0aGVyIHRvcCwgcmlnaHQsIGJvdHRvbSBvciBsZWZ0IHNpZGVcbiAgaWYgKGF0dGFjaGVkVG9TaWRlKSB7XG4gICAgaWYgKGlzSG9yaXpvbnRhbE9yaWVudGF0aW9uKGF0dGFjaE9yaWVudGF0aW9uKSkge1xuXG4gICAgICAvLyBvcmllbnRhdGlvbiBpcyByaWdodCBvciBsZWZ0XG5cbiAgICAgIC8vIG9wcG9zaXRlIGhvcml6b250YWwgb3JpZW50YXRpb24gb3Igc2FtZSBvcmllbnRhdGlvblxuICAgICAgaWYgKFxuICAgICAgICBpc09wcG9zaXRlSG9yaXpvbnRhbE9yaWVudGF0aW9uKGF0dGFjaE9yaWVudGF0aW9uLCB0YXJnZXRPcmllbnRhdGlvbikgfHxcbiAgICAgICAgaXNTYW1lKGF0dGFjaE9yaWVudGF0aW9uLCB0YXJnZXRPcmllbnRhdGlvbilcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gJ2gnO1xuICAgICAgfVxuXG4gICAgICAvLyBmYWxsYmFja1xuICAgICAgcmV0dXJuICd2JztcbiAgICB9IGVsc2Uge1xuXG4gICAgICAvLyBvcmllbnRhdGlvbiBpcyB0b3Agb3IgYm90dG9tXG5cbiAgICAgIC8vIG9wcG9zaXRlIHZlcnRpY2FsIG9yaWVudGF0aW9uIG9yIHNhbWUgb3JpZW50YXRpb25cbiAgICAgIGlmIChcbiAgICAgICAgaXNPcHBvc2l0ZVZlcnRpY2FsT3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24sIHRhcmdldE9yaWVudGF0aW9uKSB8fFxuICAgICAgICBpc1NhbWUoYXR0YWNoT3JpZW50YXRpb24sIHRhcmdldE9yaWVudGF0aW9uKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiAndic7XG4gICAgICB9XG5cbiAgICAgIC8vIGZhbGxiYWNrXG4gICAgICByZXR1cm4gJ2gnO1xuICAgIH1cbiAgfVxuXG4gIC8vIGF0dGFjaGVkIHRvIGVpdGhlciB0b3AtcmlnaHQsIHRvcC1sZWZ0LCBib3R0b20tcmlnaHQgb3IgYm90dG9tLWxlZnQgY29ybmVyXG5cbiAgLy8gb3JpZW50YXRpb24gaXMgcmlnaHQsIGxlZnRcbiAgLy8gb3Igc2FtZSB2ZXJ0aWNhbCBvcmllbnRhdGlvbiBidXQgYWxzbyByaWdodCBvciBsZWZ0XG4gIGlmIChpc0hvcml6b250YWxPcmllbnRhdGlvbih0YXJnZXRPcmllbnRhdGlvbikgfHxcbiAgICAoaXNTYW1lKGdldFZlcnRpY2FsT3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24pLCBnZXRWZXJ0aWNhbE9yaWVudGF0aW9uKHRhcmdldE9yaWVudGF0aW9uKSkgJiZcbiAgICAgIGdldEhvcml6b250YWxPcmllbnRhdGlvbih0YXJnZXRPcmllbnRhdGlvbikpKSB7XG4gICAgcmV0dXJuICdoJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJ3YnO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBhc3NpZ24sXG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQge1xuICByZW1vdmUgYXMgY29sbGVjdGlvblJlbW92ZSxcbiAgYWRkIGFzIGNvbGxlY3Rpb25BZGRcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9Db2xsZWN0aW9ucyc7XG5cbmltcG9ydCB7XG4gIExhYmVsXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL21vZGVsJztcblxuaW1wb3J0IHtcbiAgZ2V0QnVzaW5lc3NPYmplY3QsXG4gIGlzXG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNBbnlcbn0gZnJvbSAnLi91dGlsL01vZGVsaW5nVXRpbCc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG4vKipcbiAqIEEgaGFuZGxlciByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgdGhlIHVuZGVybHlpbmcgQlBNTiAyLjAgWE1MICsgRElcbiAqIG9uY2UgY2hhbmdlcyBvbiB0aGUgZGlhZ3JhbSBoYXBwZW5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtblVwZGF0ZXIoXG4gICAgZXZlbnRCdXMsIGJwbW5GYWN0b3J5LCBjb25uZWN0aW9uRG9ja2luZyxcbiAgICB0cmFuc2xhdGUpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgdGhpcy5fYnBtbkZhY3RvcnkgPSBicG1uRmFjdG9yeTtcbiAgdGhpcy5fdHJhbnNsYXRlID0gdHJhbnNsYXRlO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuXG5cbiAgLy8gY29ubmVjdGlvbiBjcm9wcGluZyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgLy8gY3JvcCBjb25uZWN0aW9uIGVuZHMgZHVyaW5nIGNyZWF0ZS91cGRhdGVcbiAgZnVuY3Rpb24gY3JvcENvbm5lY3Rpb24oZSkge1xuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge30sXG4gICAgICAgIGNvbm5lY3Rpb247XG5cbiAgICBpZiAoIWNvbnRleHQuY3JvcHBlZCAmJiBoaW50cy5jcmVhdGVFbGVtZW50c0JlaGF2aW9yICE9PSBmYWxzZSkge1xuICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbjtcbiAgICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gY29ubmVjdGlvbkRvY2tpbmcuZ2V0Q3JvcHBlZFdheXBvaW50cyhjb25uZWN0aW9uKTtcbiAgICAgIGNvbnRleHQuY3JvcHBlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5leGVjdXRlZChbXG4gICAgJ2Nvbm5lY3Rpb24ubGF5b3V0JyxcbiAgICAnY29ubmVjdGlvbi5jcmVhdGUnXG4gIF0sIGNyb3BDb25uZWN0aW9uKTtcblxuICB0aGlzLnJldmVydGVkKFsgJ2Nvbm5lY3Rpb24ubGF5b3V0JyBdLCBmdW5jdGlvbihlKSB7XG4gICAgZGVsZXRlIGUuY29udGV4dC5jcm9wcGVkO1xuICB9KTtcblxuXG5cbiAgLy8gQlBNTiArIERJIHVwZGF0ZSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxuICAvLyB1cGRhdGUgcGFyZW50XG4gIGZ1bmN0aW9uIHVwZGF0ZVBhcmVudChlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQ7XG5cbiAgICBzZWxmLnVwZGF0ZVBhcmVudChjb250ZXh0LnNoYXBlIHx8IGNvbnRleHQuY29ubmVjdGlvbiwgY29udGV4dC5vbGRQYXJlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmV2ZXJzZVVwZGF0ZVBhcmVudChlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQ7XG5cbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHQuc2hhcGUgfHwgY29udGV4dC5jb25uZWN0aW9uLFxuXG4gICAgICAgIC8vIG9sZFBhcmVudCBpcyB0aGUgKG9sZCkgbmV3IHBhcmVudCwgYmVjYXVzZSB3ZSBhcmUgdW5kb2luZ1xuICAgICAgICBvbGRQYXJlbnQgPSBjb250ZXh0LnBhcmVudCB8fCBjb250ZXh0Lm5ld1BhcmVudDtcblxuICAgIHNlbGYudXBkYXRlUGFyZW50KGVsZW1lbnQsIG9sZFBhcmVudCk7XG4gIH1cblxuICB0aGlzLmV4ZWN1dGVkKFtcbiAgICAnc2hhcGUubW92ZScsXG4gICAgJ3NoYXBlLmNyZWF0ZScsXG4gICAgJ3NoYXBlLmRlbGV0ZScsXG4gICAgJ2Nvbm5lY3Rpb24uY3JlYXRlJyxcbiAgICAnY29ubmVjdGlvbi5tb3ZlJyxcbiAgICAnY29ubmVjdGlvbi5kZWxldGUnXG4gIF0sIGlmQnBtbih1cGRhdGVQYXJlbnQpKTtcblxuICB0aGlzLnJldmVydGVkKFtcbiAgICAnc2hhcGUubW92ZScsXG4gICAgJ3NoYXBlLmNyZWF0ZScsXG4gICAgJ3NoYXBlLmRlbGV0ZScsXG4gICAgJ2Nvbm5lY3Rpb24uY3JlYXRlJyxcbiAgICAnY29ubmVjdGlvbi5tb3ZlJyxcbiAgICAnY29ubmVjdGlvbi5kZWxldGUnXG4gIF0sIGlmQnBtbihyZXZlcnNlVXBkYXRlUGFyZW50KSk7XG5cbiAgLypcbiAgICogIyMgVXBkYXRpbmcgUGFyZW50XG4gICAqXG4gICAqIFdoZW4gbW9ycGhpbmcgYSBQcm9jZXNzIGludG8gYSBDb2xsYWJvcmF0aW9uIG9yIHZpY2UtdmVyc2EsXG4gICAqIG1ha2Ugc3VyZSB0aGF0IGJvdGggdGhlICpzZW1hbnRpYyogYW5kICpkaSogcGFyZW50IG9mIGVhY2ggZWxlbWVudFxuICAgKiBpcyB1cGRhdGVkLlxuICAgKlxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlUm9vdChldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgb2xkUm9vdCA9IGNvbnRleHQub2xkUm9vdCxcbiAgICAgICAgY2hpbGRyZW4gPSBvbGRSb290LmNoaWxkcmVuO1xuXG4gICAgZm9yRWFjaChjaGlsZHJlbiwgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgIGlmIChpcyhjaGlsZCwgJ2JwbW46QmFzZUVsZW1lbnQnKSkge1xuICAgICAgICBzZWxmLnVwZGF0ZVBhcmVudChjaGlsZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB0aGlzLmV4ZWN1dGVkKFsgJ2NhbnZhcy51cGRhdGVSb290JyBdLCB1cGRhdGVSb290KTtcbiAgdGhpcy5yZXZlcnRlZChbICdjYW52YXMudXBkYXRlUm9vdCcgXSwgdXBkYXRlUm9vdCk7XG5cblxuICAvLyB1cGRhdGUgYm91bmRzXG4gIGZ1bmN0aW9uIHVwZGF0ZUJvdW5kcyhlKSB7XG4gICAgdmFyIHNoYXBlID0gZS5jb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKCFpcyhzaGFwZSwgJ2JwbW46QmFzZUVsZW1lbnQnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYudXBkYXRlQm91bmRzKHNoYXBlKTtcbiAgfVxuXG4gIHRoaXMuZXhlY3V0ZWQoWyAnc2hhcGUubW92ZScsICdzaGFwZS5jcmVhdGUnLCAnc2hhcGUucmVzaXplJyBdLCBpZkJwbW4oZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIC8vIGV4Y2x1ZGUgbGFiZWxzIGJlY2F1c2UgdGhleSdyZSBoYW5kbGVkIHNlcGFyYXRlbHkgZHVyaW5nIHNoYXBlLmNoYW5nZWRcbiAgICBpZiAoZXZlbnQuY29udGV4dC5zaGFwZS50eXBlID09PSAnbGFiZWwnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXBkYXRlQm91bmRzKGV2ZW50KTtcbiAgfSkpO1xuXG4gIHRoaXMucmV2ZXJ0ZWQoWyAnc2hhcGUubW92ZScsICdzaGFwZS5jcmVhdGUnLCAnc2hhcGUucmVzaXplJyBdLCBpZkJwbW4oZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIC8vIGV4Y2x1ZGUgbGFiZWxzIGJlY2F1c2UgdGhleSdyZSBoYW5kbGVkIHNlcGFyYXRlbHkgZHVyaW5nIHNoYXBlLmNoYW5nZWRcbiAgICBpZiAoZXZlbnQuY29udGV4dC5zaGFwZS50eXBlID09PSAnbGFiZWwnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXBkYXRlQm91bmRzKGV2ZW50KTtcbiAgfSkpO1xuXG4gIC8vIEhhbmRsZSBsYWJlbHMgc2VwYXJhdGVseS4gVGhpcyBpcyBuZWNlc3NhcnksIGJlY2F1c2UgdGhlIGxhYmVsIGJvdW5kcyBoYXZlIHRvIGJlIHVwZGF0ZWRcbiAgLy8gZXZlcnkgdGltZSBpdHMgc2hhcGUgY2hhbmdlcywgbm90IG9ubHkgb24gbW92ZSwgY3JlYXRlIGFuZCByZXNpemUuXG4gIGV2ZW50QnVzLm9uKCdzaGFwZS5jaGFuZ2VkJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuZWxlbWVudC50eXBlID09PSAnbGFiZWwnKSB7XG4gICAgICB1cGRhdGVCb3VuZHMoeyBjb250ZXh0OiB7IHNoYXBlOiBldmVudC5lbGVtZW50IH0gfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBhdHRhY2ggLyBkZXRhY2ggY29ubmVjdGlvblxuICBmdW5jdGlvbiB1cGRhdGVDb25uZWN0aW9uKGUpIHtcbiAgICBzZWxmLnVwZGF0ZUNvbm5lY3Rpb24oZS5jb250ZXh0KTtcbiAgfVxuXG4gIHRoaXMuZXhlY3V0ZWQoW1xuICAgICdjb25uZWN0aW9uLmNyZWF0ZScsXG4gICAgJ2Nvbm5lY3Rpb24ubW92ZScsXG4gICAgJ2Nvbm5lY3Rpb24uZGVsZXRlJyxcbiAgICAnY29ubmVjdGlvbi5yZWNvbm5lY3QnXG4gIF0sIGlmQnBtbih1cGRhdGVDb25uZWN0aW9uKSk7XG5cbiAgdGhpcy5yZXZlcnRlZChbXG4gICAgJ2Nvbm5lY3Rpb24uY3JlYXRlJyxcbiAgICAnY29ubmVjdGlvbi5tb3ZlJyxcbiAgICAnY29ubmVjdGlvbi5kZWxldGUnLFxuICAgICdjb25uZWN0aW9uLnJlY29ubmVjdCdcbiAgXSwgaWZCcG1uKHVwZGF0ZUNvbm5lY3Rpb24pKTtcblxuXG4gIC8vIHVwZGF0ZSB3YXlwb2ludHNcbiAgZnVuY3Rpb24gdXBkYXRlQ29ubmVjdGlvbldheXBvaW50cyhlKSB7XG4gICAgc2VsZi51cGRhdGVDb25uZWN0aW9uV2F5cG9pbnRzKGUuY29udGV4dC5jb25uZWN0aW9uKTtcbiAgfVxuXG4gIHRoaXMuZXhlY3V0ZWQoW1xuICAgICdjb25uZWN0aW9uLmxheW91dCcsXG4gICAgJ2Nvbm5lY3Rpb24ubW92ZScsXG4gICAgJ2Nvbm5lY3Rpb24udXBkYXRlV2F5cG9pbnRzJyxcbiAgXSwgaWZCcG1uKHVwZGF0ZUNvbm5lY3Rpb25XYXlwb2ludHMpKTtcblxuICB0aGlzLnJldmVydGVkKFtcbiAgICAnY29ubmVjdGlvbi5sYXlvdXQnLFxuICAgICdjb25uZWN0aW9uLm1vdmUnLFxuICAgICdjb25uZWN0aW9uLnVwZGF0ZVdheXBvaW50cycsXG4gIF0sIGlmQnBtbih1cGRhdGVDb25uZWN0aW9uV2F5cG9pbnRzKSk7XG5cbiAgLy8gdXBkYXRlIGNvbmRpdGlvbmFsL2RlZmF1bHQgZmxvd3NcbiAgdGhpcy5leGVjdXRlZCgnY29ubmVjdGlvbi5yZWNvbm5lY3QnLCBpZkJwbW4oZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIG9sZFNvdXJjZSA9IGNvbnRleHQub2xkU291cmNlLFxuICAgICAgICBuZXdTb3VyY2UgPSBjb250ZXh0Lm5ld1NvdXJjZSxcbiAgICAgICAgY29ubmVjdGlvbkJvID0gZ2V0QnVzaW5lc3NPYmplY3QoY29ubmVjdGlvbiksXG4gICAgICAgIG9sZFNvdXJjZUJvID0gZ2V0QnVzaW5lc3NPYmplY3Qob2xkU291cmNlKSxcbiAgICAgICAgbmV3U291cmNlQm8gPSBnZXRCdXNpbmVzc09iamVjdChuZXdTb3VyY2UpO1xuXG4gICAgLy8gcmVtb3ZlIGNvbmRpdGlvbiBmcm9tIGNvbm5lY3Rpb24gb24gcmVjb25uZWN0IHRvIG5ldyBzb3VyY2VcbiAgICAvLyBpZiBuZXcgc291cmNlIGNhbiBOT1QgaGF2ZSBjb25kaW9uYWwgc2VxdWVuY2UgZmxvd1xuICAgIGlmIChjb25uZWN0aW9uQm8uY29uZGl0aW9uRXhwcmVzc2lvbiAmJiAhaXNBbnkobmV3U291cmNlQm8sIFtcbiAgICAgICdicG1uOkFjdGl2aXR5JyxcbiAgICAgICdicG1uOkV4Y2x1c2l2ZUdhdGV3YXknLFxuICAgICAgJ2JwbW46SW5jbHVzaXZlR2F0ZXdheSdcbiAgICBdKSkge1xuICAgICAgY29udGV4dC5vbGRDb25kaXRpb25FeHByZXNzaW9uID0gY29ubmVjdGlvbkJvLmNvbmRpdGlvbkV4cHJlc3Npb247XG5cbiAgICAgIGRlbGV0ZSBjb25uZWN0aW9uQm8uY29uZGl0aW9uRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgZGVmYXVsdCBmcm9tIG9sZCBzb3VyY2UgZmxvdyBvbiByZWNvbm5lY3QgdG8gbmV3IHNvdXJjZVxuICAgIC8vIGlmIHNvdXJjZSBjaGFuZ2VkXG4gICAgaWYgKG9sZFNvdXJjZSAhPT0gbmV3U291cmNlICYmIG9sZFNvdXJjZUJvLmRlZmF1bHQgPT09IGNvbm5lY3Rpb25Cbykge1xuICAgICAgY29udGV4dC5vbGREZWZhdWx0ID0gb2xkU291cmNlQm8uZGVmYXVsdDtcblxuICAgICAgZGVsZXRlIG9sZFNvdXJjZUJvLmRlZmF1bHQ7XG4gICAgfVxuICB9KSk7XG5cbiAgdGhpcy5yZXZlcnRlZCgnY29ubmVjdGlvbi5yZWNvbm5lY3QnLCBpZkJwbW4oZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIG9sZFNvdXJjZSA9IGNvbnRleHQub2xkU291cmNlLFxuICAgICAgICBuZXdTb3VyY2UgPSBjb250ZXh0Lm5ld1NvdXJjZSxcbiAgICAgICAgY29ubmVjdGlvbkJvID0gZ2V0QnVzaW5lc3NPYmplY3QoY29ubmVjdGlvbiksXG4gICAgICAgIG9sZFNvdXJjZUJvID0gZ2V0QnVzaW5lc3NPYmplY3Qob2xkU291cmNlKSxcbiAgICAgICAgbmV3U291cmNlQm8gPSBnZXRCdXNpbmVzc09iamVjdChuZXdTb3VyY2UpO1xuXG4gICAgLy8gYWRkIGNvbmRpdGlvbiB0byBjb25uZWN0aW9uIG9uIHJldmVydCByZWNvbm5lY3QgdG8gbmV3IHNvdXJjZVxuICAgIGlmIChjb250ZXh0Lm9sZENvbmRpdGlvbkV4cHJlc3Npb24pIHtcbiAgICAgIGNvbm5lY3Rpb25Cby5jb25kaXRpb25FeHByZXNzaW9uID0gY29udGV4dC5vbGRDb25kaXRpb25FeHByZXNzaW9uO1xuICAgIH1cblxuICAgIC8vIGFkZCBkZWZhdWx0IHRvIG9sZCBzb3VyY2Ugb24gcmV2ZXJ0IHJlY29ubmVjdCB0byBuZXcgc291cmNlXG4gICAgaWYgKGNvbnRleHQub2xkRGVmYXVsdCkge1xuICAgICAgb2xkU291cmNlQm8uZGVmYXVsdCA9IGNvbnRleHQub2xkRGVmYXVsdDtcblxuICAgICAgZGVsZXRlIG5ld1NvdXJjZUJvLmRlZmF1bHQ7XG4gICAgfVxuICB9KSk7XG5cbiAgLy8gdXBkYXRlIGF0dGFjaG1lbnRzXG4gIGZ1bmN0aW9uIHVwZGF0ZUF0dGFjaG1lbnQoZSkge1xuICAgIHNlbGYudXBkYXRlQXR0YWNobWVudChlLmNvbnRleHQpO1xuICB9XG5cbiAgdGhpcy5leGVjdXRlZChbICdlbGVtZW50LnVwZGF0ZUF0dGFjaG1lbnQnIF0sIGlmQnBtbih1cGRhdGVBdHRhY2htZW50KSk7XG4gIHRoaXMucmV2ZXJ0ZWQoWyAnZWxlbWVudC51cGRhdGVBdHRhY2htZW50JyBdLCBpZkJwbW4odXBkYXRlQXR0YWNobWVudCkpO1xufVxuXG5pbmhlcml0cyhCcG1uVXBkYXRlciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuQnBtblVwZGF0ZXIuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2JwbW5GYWN0b3J5JyxcbiAgJ2Nvbm5lY3Rpb25Eb2NraW5nJyxcbiAgJ3RyYW5zbGF0ZSdcbl07XG5cblxuLy8gaW1wbGVtZW50YXRpb24gLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5CcG1uVXBkYXRlci5wcm90b3R5cGUudXBkYXRlQXR0YWNobWVudCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgYnVzaW5lc3NPYmplY3QgPSBzaGFwZS5idXNpbmVzc09iamVjdCxcbiAgICAgIGhvc3QgPSBzaGFwZS5ob3N0O1xuXG4gIGJ1c2luZXNzT2JqZWN0LmF0dGFjaGVkVG9SZWYgPSBob3N0ICYmIGhvc3QuYnVzaW5lc3NPYmplY3Q7XG59O1xuXG5CcG1uVXBkYXRlci5wcm90b3R5cGUudXBkYXRlUGFyZW50ID0gZnVuY3Rpb24oZWxlbWVudCwgb2xkUGFyZW50KSB7XG5cbiAgLy8gZG8gbm90IHVwZGF0ZSBCUE1OIDIuMCBsYWJlbCBwYXJlbnRcbiAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBMYWJlbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGRhdGEgc3RvcmVzIGluIGNvbGxhYm9yYXRpb25zIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkgYnkgRGF0YVN0b3JlQmVoYXZpb3JcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScpICYmXG4gICAgICBlbGVtZW50LnBhcmVudCAmJlxuICAgICAgaXMoZWxlbWVudC5wYXJlbnQsICdicG1uOkNvbGxhYm9yYXRpb24nKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwYXJlbnRTaGFwZSA9IGVsZW1lbnQucGFyZW50O1xuXG4gIHZhciBidXNpbmVzc09iamVjdCA9IGVsZW1lbnQuYnVzaW5lc3NPYmplY3QsXG4gICAgICBwYXJlbnRCdXNpbmVzc09iamVjdCA9IHBhcmVudFNoYXBlICYmIHBhcmVudFNoYXBlLmJ1c2luZXNzT2JqZWN0LFxuICAgICAgcGFyZW50RGkgPSBwYXJlbnRCdXNpbmVzc09iamVjdCAmJiBwYXJlbnRCdXNpbmVzc09iamVjdC5kaTtcblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46Rmxvd05vZGUnKSkge1xuICAgIHRoaXMudXBkYXRlRmxvd05vZGVSZWZzKGJ1c2luZXNzT2JqZWN0LCBwYXJlbnRCdXNpbmVzc09iamVjdCwgb2xkUGFyZW50ICYmIG9sZFBhcmVudC5idXNpbmVzc09iamVjdCk7XG4gIH1cblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46RGF0YU91dHB1dEFzc29jaWF0aW9uJykpIHtcbiAgICBpZiAoZWxlbWVudC5zb3VyY2UpIHtcbiAgICAgIHBhcmVudEJ1c2luZXNzT2JqZWN0ID0gZWxlbWVudC5zb3VyY2UuYnVzaW5lc3NPYmplY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudEJ1c2luZXNzT2JqZWN0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46RGF0YUlucHV0QXNzb2NpYXRpb24nKSkge1xuICAgIGlmIChlbGVtZW50LnRhcmdldCkge1xuICAgICAgcGFyZW50QnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LnRhcmdldC5idXNpbmVzc09iamVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50QnVzaW5lc3NPYmplY3QgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMudXBkYXRlU2VtYW50aWNQYXJlbnQoYnVzaW5lc3NPYmplY3QsIHBhcmVudEJ1c2luZXNzT2JqZWN0KTtcblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScpICYmIGJ1c2luZXNzT2JqZWN0LmRhdGFPYmplY3RSZWYpIHtcbiAgICB0aGlzLnVwZGF0ZVNlbWFudGljUGFyZW50KGJ1c2luZXNzT2JqZWN0LmRhdGFPYmplY3RSZWYsIHBhcmVudEJ1c2luZXNzT2JqZWN0KTtcbiAgfVxuXG4gIHRoaXMudXBkYXRlRGlQYXJlbnQoYnVzaW5lc3NPYmplY3QuZGksIHBhcmVudERpKTtcbn07XG5cblxuQnBtblVwZGF0ZXIucHJvdG90eXBlLnVwZGF0ZUJvdW5kcyA9IGZ1bmN0aW9uKHNoYXBlKSB7XG5cbiAgdmFyIGRpID0gc2hhcGUuYnVzaW5lc3NPYmplY3QuZGk7XG5cbiAgdmFyIHRhcmdldCA9IChzaGFwZSBpbnN0YW5jZW9mIExhYmVsKSA/IHRoaXMuX2dldExhYmVsKGRpKSA6IGRpO1xuXG4gIHZhciBib3VuZHMgPSB0YXJnZXQuYm91bmRzO1xuXG4gIGlmICghYm91bmRzKSB7XG4gICAgYm91bmRzID0gdGhpcy5fYnBtbkZhY3RvcnkuY3JlYXRlRGlCb3VuZHMoKTtcbiAgICB0YXJnZXQuc2V0KCdib3VuZHMnLCBib3VuZHMpO1xuICB9XG5cbiAgYXNzaWduKGJvdW5kcywge1xuICAgIHg6IHNoYXBlLngsXG4gICAgeTogc2hhcGUueSxcbiAgICB3aWR0aDogc2hhcGUud2lkdGgsXG4gICAgaGVpZ2h0OiBzaGFwZS5oZWlnaHRcbiAgfSk7XG59O1xuXG5CcG1uVXBkYXRlci5wcm90b3R5cGUudXBkYXRlRmxvd05vZGVSZWZzID0gZnVuY3Rpb24oYnVzaW5lc3NPYmplY3QsIG5ld0NvbnRhaW5tZW50LCBvbGRDb250YWlubWVudCkge1xuXG4gIGlmIChvbGRDb250YWlubWVudCA9PT0gbmV3Q29udGFpbm1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgb2xkUmVmcywgbmV3UmVmcztcblxuICBpZiAoaXMgKG9sZENvbnRhaW5tZW50LCAnYnBtbjpMYW5lJykpIHtcbiAgICBvbGRSZWZzID0gb2xkQ29udGFpbm1lbnQuZ2V0KCdmbG93Tm9kZVJlZicpO1xuICAgIGNvbGxlY3Rpb25SZW1vdmUob2xkUmVmcywgYnVzaW5lc3NPYmplY3QpO1xuICB9XG5cbiAgaWYgKGlzKG5ld0NvbnRhaW5tZW50LCAnYnBtbjpMYW5lJykpIHtcbiAgICBuZXdSZWZzID0gbmV3Q29udGFpbm1lbnQuZ2V0KCdmbG93Tm9kZVJlZicpO1xuICAgIGNvbGxlY3Rpb25BZGQobmV3UmVmcywgYnVzaW5lc3NPYmplY3QpO1xuICB9XG59O1xuXG5cbi8vIHVwZGF0ZSBleGlzdGluZyBzb3VyY2VFbGVtZW50IGFuZCB0YXJnZXRFbGVtZW50IGRpIGluZm9ybWF0aW9uXG5CcG1uVXBkYXRlci5wcm90b3R5cGUudXBkYXRlRGlDb25uZWN0aW9uID0gZnVuY3Rpb24oZGksIG5ld1NvdXJjZSwgbmV3VGFyZ2V0KSB7XG5cbiAgaWYgKGRpLnNvdXJjZUVsZW1lbnQgJiYgZGkuc291cmNlRWxlbWVudC5icG1uRWxlbWVudCAhPT0gbmV3U291cmNlKSB7XG4gICAgZGkuc291cmNlRWxlbWVudCA9IG5ld1NvdXJjZSAmJiBuZXdTb3VyY2UuZGk7XG4gIH1cblxuICBpZiAoZGkudGFyZ2V0RWxlbWVudCAmJiBkaS50YXJnZXRFbGVtZW50LmJwbW5FbGVtZW50ICE9PSBuZXdUYXJnZXQpIHtcbiAgICBkaS50YXJnZXRFbGVtZW50ID0gbmV3VGFyZ2V0ICYmIG5ld1RhcmdldC5kaTtcbiAgfVxuXG59O1xuXG5cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVEaVBhcmVudCA9IGZ1bmN0aW9uKGRpLCBwYXJlbnREaSkge1xuXG4gIGlmIChwYXJlbnREaSAmJiAhaXMocGFyZW50RGksICdicG1uZGk6QlBNTlBsYW5lJykpIHtcbiAgICBwYXJlbnREaSA9IHBhcmVudERpLiRwYXJlbnQ7XG4gIH1cblxuICBpZiAoZGkuJHBhcmVudCA9PT0gcGFyZW50RGkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGxhbmVFbGVtZW50cyA9IChwYXJlbnREaSB8fCBkaS4kcGFyZW50KS5nZXQoJ3BsYW5lRWxlbWVudCcpO1xuXG4gIGlmIChwYXJlbnREaSkge1xuICAgIHBsYW5lRWxlbWVudHMucHVzaChkaSk7XG4gICAgZGkuJHBhcmVudCA9IHBhcmVudERpO1xuICB9IGVsc2Uge1xuICAgIGNvbGxlY3Rpb25SZW1vdmUocGxhbmVFbGVtZW50cywgZGkpO1xuICAgIGRpLiRwYXJlbnQgPSBudWxsO1xuICB9XG59O1xuXG5mdW5jdGlvbiBnZXREZWZpbml0aW9ucyhlbGVtZW50KSB7XG4gIHdoaWxlIChlbGVtZW50ICYmICFpcyhlbGVtZW50LCAnYnBtbjpEZWZpbml0aW9ucycpKSB7XG4gICAgZWxlbWVudCA9IGVsZW1lbnQuJHBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5CcG1uVXBkYXRlci5wcm90b3R5cGUuZ2V0TGFuZVNldCA9IGZ1bmN0aW9uKGNvbnRhaW5lcikge1xuXG4gIHZhciBsYW5lU2V0LCBsYW5lU2V0cztcblxuICAvLyBicG1uOkxhbmVcbiAgaWYgKGlzKGNvbnRhaW5lciwgJ2JwbW46TGFuZScpKSB7XG4gICAgbGFuZVNldCA9IGNvbnRhaW5lci5jaGlsZExhbmVTZXQ7XG5cbiAgICBpZiAoIWxhbmVTZXQpIHtcbiAgICAgIGxhbmVTZXQgPSB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46TGFuZVNldCcpO1xuICAgICAgY29udGFpbmVyLmNoaWxkTGFuZVNldCA9IGxhbmVTZXQ7XG4gICAgICBsYW5lU2V0LiRwYXJlbnQgPSBjb250YWluZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhbmVTZXQ7XG4gIH1cblxuICAvLyBicG1uOlBhcnRpY2lwYW50XG4gIGlmIChpcyhjb250YWluZXIsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICBjb250YWluZXIgPSBjb250YWluZXIucHJvY2Vzc1JlZjtcbiAgfVxuXG4gIC8vIGJwbW46Rmxvd0VsZW1lbnRzQ29udGFpbmVyXG4gIGxhbmVTZXRzID0gY29udGFpbmVyLmdldCgnbGFuZVNldHMnKTtcbiAgbGFuZVNldCA9IGxhbmVTZXRzWzBdO1xuXG4gIGlmICghbGFuZVNldCkge1xuICAgIGxhbmVTZXQgPSB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46TGFuZVNldCcpO1xuICAgIGxhbmVTZXQuJHBhcmVudCA9IGNvbnRhaW5lcjtcbiAgICBsYW5lU2V0cy5wdXNoKGxhbmVTZXQpO1xuICB9XG5cbiAgcmV0dXJuIGxhbmVTZXQ7XG59O1xuXG5CcG1uVXBkYXRlci5wcm90b3R5cGUudXBkYXRlU2VtYW50aWNQYXJlbnQgPSBmdW5jdGlvbihidXNpbmVzc09iamVjdCwgbmV3UGFyZW50LCB2aXN1YWxQYXJlbnQpIHtcblxuICB2YXIgY29udGFpbm1lbnQsXG4gICAgICB0cmFuc2xhdGUgPSB0aGlzLl90cmFuc2xhdGU7XG5cbiAgaWYgKGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQgPT09IG5ld1BhcmVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RGF0YUlucHV0JykgfHwgaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkRhdGFPdXRwdXQnKSkge1xuXG4gICAgaWYgKGlzKG5ld1BhcmVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiAncHJvY2Vzc1JlZicgaW4gbmV3UGFyZW50KSB7XG4gICAgICBuZXdQYXJlbnQgPSBuZXdQYXJlbnQucHJvY2Vzc1JlZjtcbiAgICB9XG5cbiAgICAvLyBhbHJlYWR5IGluIGNvcnJlY3QgaW9TcGVjaWZpY2F0aW9uXG4gICAgaWYgKCdpb1NwZWNpZmljYXRpb24nIGluIG5ld1BhcmVudCAmJiBuZXdQYXJlbnQuaW9TcGVjaWZpY2F0aW9uID09PSBidXNpbmVzc09iamVjdC4kcGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpMYW5lJykpIHtcblxuICAgIGlmIChuZXdQYXJlbnQpIHtcbiAgICAgIG5ld1BhcmVudCA9IHRoaXMuZ2V0TGFuZVNldChuZXdQYXJlbnQpO1xuICAgIH1cblxuICAgIGNvbnRhaW5tZW50ID0gJ2xhbmVzJztcbiAgfSBlbHNlXG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpGbG93RWxlbWVudCcpKSB7XG5cbiAgICBpZiAobmV3UGFyZW50KSB7XG5cbiAgICAgIGlmIChpcyhuZXdQYXJlbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICAgICAgbmV3UGFyZW50ID0gbmV3UGFyZW50LnByb2Nlc3NSZWY7XG4gICAgICB9IGVsc2VcblxuICAgICAgaWYgKGlzKG5ld1BhcmVudCwgJ2JwbW46TGFuZScpKSB7XG4gICAgICAgIGRvIHtcblxuICAgICAgICAgIC8vIHVud3JhcCBMYW5lIC0+IExhbmVTZXQgLT4gKExhbmUgfCBGbG93RWxlbWVudHNDb250YWluZXIpXG4gICAgICAgICAgbmV3UGFyZW50ID0gbmV3UGFyZW50LiRwYXJlbnQuJHBhcmVudDtcbiAgICAgICAgfSB3aGlsZSAoaXMobmV3UGFyZW50LCAnYnBtbjpMYW5lJykpO1xuXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29udGFpbm1lbnQgPSAnZmxvd0VsZW1lbnRzJztcblxuICB9IGVsc2VcblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkFydGlmYWN0JykpIHtcblxuICAgIHdoaWxlIChuZXdQYXJlbnQgJiZcbiAgICAgICAgICAgIWlzKG5ld1BhcmVudCwgJ2JwbW46UHJvY2VzcycpICYmXG4gICAgICAgICAgICFpcyhuZXdQYXJlbnQsICdicG1uOlN1YlByb2Nlc3MnKSAmJlxuICAgICAgICAgICAhaXMobmV3UGFyZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJykpIHtcblxuICAgICAgaWYgKGlzKG5ld1BhcmVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgICAgICBuZXdQYXJlbnQgPSBuZXdQYXJlbnQucHJvY2Vzc1JlZjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdQYXJlbnQgPSBuZXdQYXJlbnQuJHBhcmVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb250YWlubWVudCA9ICdhcnRpZmFjdHMnO1xuICB9IGVsc2VcblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOk1lc3NhZ2VGbG93JykpIHtcbiAgICBjb250YWlubWVudCA9ICdtZXNzYWdlRmxvd3MnO1xuXG4gIH0gZWxzZVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIGNvbnRhaW5tZW50ID0gJ3BhcnRpY2lwYW50cyc7XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHBhcnRpY2lwYW50cyBwcm9jZXNzIGlzIHByb3Blcmx5IGF0dGFjaGVkIC8gZGV0YWNoZWRcbiAgICAvLyBmcm9tIHRoZSBYTUwgZG9jdW1lbnRcblxuICAgIHZhciBwcm9jZXNzID0gYnVzaW5lc3NPYmplY3QucHJvY2Vzc1JlZixcbiAgICAgICAgZGVmaW5pdGlvbnM7XG5cbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgZGVmaW5pdGlvbnMgPSBnZXREZWZpbml0aW9ucyhidXNpbmVzc09iamVjdC4kcGFyZW50IHx8IG5ld1BhcmVudCk7XG5cbiAgICAgIGlmIChidXNpbmVzc09iamVjdC4kcGFyZW50KSB7XG4gICAgICAgIGNvbGxlY3Rpb25SZW1vdmUoZGVmaW5pdGlvbnMuZ2V0KCdyb290RWxlbWVudHMnKSwgcHJvY2Vzcyk7XG4gICAgICAgIHByb2Nlc3MuJHBhcmVudCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdQYXJlbnQpIHtcbiAgICAgICAgY29sbGVjdGlvbkFkZChkZWZpbml0aW9ucy5nZXQoJ3Jvb3RFbGVtZW50cycpLCBwcm9jZXNzKTtcbiAgICAgICAgcHJvY2Vzcy4kcGFyZW50ID0gZGVmaW5pdGlvbnM7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2VcblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkRhdGFPdXRwdXRBc3NvY2lhdGlvbicpKSB7XG4gICAgY29udGFpbm1lbnQgPSAnZGF0YU91dHB1dEFzc29jaWF0aW9ucyc7XG4gIH0gZWxzZVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RGF0YUlucHV0QXNzb2NpYXRpb24nKSkge1xuICAgIGNvbnRhaW5tZW50ID0gJ2RhdGFJbnB1dEFzc29jaWF0aW9ucyc7XG4gIH1cblxuICBpZiAoIWNvbnRhaW5tZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZShcbiAgICAgICdubyBwYXJlbnQgZm9yIHtlbGVtZW50fSBpbiB7cGFyZW50fScsXG4gICAgICB7XG4gICAgICAgIGVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LmlkLFxuICAgICAgICBwYXJlbnQ6IG5ld1BhcmVudC5pZFxuICAgICAgfVxuICAgICkpO1xuICB9XG5cbiAgdmFyIGNoaWxkcmVuO1xuXG4gIGlmIChidXNpbmVzc09iamVjdC4kcGFyZW50KSB7XG5cbiAgICAvLyByZW1vdmUgZnJvbSBvbGQgcGFyZW50XG4gICAgY2hpbGRyZW4gPSBidXNpbmVzc09iamVjdC4kcGFyZW50LmdldChjb250YWlubWVudCk7XG4gICAgY29sbGVjdGlvblJlbW92ZShjaGlsZHJlbiwgYnVzaW5lc3NPYmplY3QpO1xuICB9XG5cbiAgaWYgKCFuZXdQYXJlbnQpIHtcbiAgICBidXNpbmVzc09iamVjdC4kcGFyZW50ID0gbnVsbDtcbiAgfSBlbHNlIHtcblxuICAgIC8vIGFkZCB0byBuZXcgcGFyZW50XG4gICAgY2hpbGRyZW4gPSBuZXdQYXJlbnQuZ2V0KGNvbnRhaW5tZW50KTtcbiAgICBjaGlsZHJlbi5wdXNoKGJ1c2luZXNzT2JqZWN0KTtcbiAgICBidXNpbmVzc09iamVjdC4kcGFyZW50ID0gbmV3UGFyZW50O1xuICB9XG5cbiAgaWYgKHZpc3VhbFBhcmVudCkge1xuICAgIHZhciBkaUNoaWxkcmVuID0gdmlzdWFsUGFyZW50LmdldChjb250YWlubWVudCk7XG5cbiAgICBjb2xsZWN0aW9uUmVtb3ZlKGNoaWxkcmVuLCBidXNpbmVzc09iamVjdCk7XG5cbiAgICBpZiAobmV3UGFyZW50KSB7XG5cbiAgICAgIGlmICghZGlDaGlsZHJlbikge1xuICAgICAgICBkaUNoaWxkcmVuID0gW107XG4gICAgICAgIG5ld1BhcmVudC5zZXQoY29udGFpbm1lbnQsIGRpQ2hpbGRyZW4pO1xuICAgICAgfVxuXG4gICAgICBkaUNoaWxkcmVuLnB1c2goYnVzaW5lc3NPYmplY3QpO1xuICAgIH1cbiAgfVxufTtcblxuXG5CcG1uVXBkYXRlci5wcm90b3R5cGUudXBkYXRlQ29ubmVjdGlvbldheXBvaW50cyA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgY29ubmVjdGlvbi5idXNpbmVzc09iamVjdC5kaS5zZXQoJ3dheXBvaW50JywgdGhpcy5fYnBtbkZhY3RvcnkuY3JlYXRlRGlXYXlwb2ludHMoY29ubmVjdGlvbi53YXlwb2ludHMpKTtcbn07XG5cblxuQnBtblVwZGF0ZXIucHJvdG90eXBlLnVwZGF0ZUNvbm5lY3Rpb24gPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGNvbm5lY3Rpb24pLFxuICAgICAgbmV3U291cmNlID0gZ2V0QnVzaW5lc3NPYmplY3QoY29ubmVjdGlvbi5zb3VyY2UpLFxuICAgICAgbmV3VGFyZ2V0ID0gZ2V0QnVzaW5lc3NPYmplY3QoY29ubmVjdGlvbi50YXJnZXQpLFxuICAgICAgdmlzdWFsUGFyZW50O1xuXG4gIGlmICghaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkRhdGFBc3NvY2lhdGlvbicpKSB7XG5cbiAgICB2YXIgaW52ZXJzZVNldCA9IGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpTZXF1ZW5jZUZsb3cnKTtcblxuICAgIGlmIChidXNpbmVzc09iamVjdC5zb3VyY2VSZWYgIT09IG5ld1NvdXJjZSkge1xuICAgICAgaWYgKGludmVyc2VTZXQpIHtcbiAgICAgICAgY29sbGVjdGlvblJlbW92ZShidXNpbmVzc09iamVjdC5zb3VyY2VSZWYgJiYgYnVzaW5lc3NPYmplY3Quc291cmNlUmVmLmdldCgnb3V0Z29pbmcnKSwgYnVzaW5lc3NPYmplY3QpO1xuXG4gICAgICAgIGlmIChuZXdTb3VyY2UgJiYgbmV3U291cmNlLmdldCgnb3V0Z29pbmcnKSkge1xuICAgICAgICAgIG5ld1NvdXJjZS5nZXQoJ291dGdvaW5nJykucHVzaChidXNpbmVzc09iamVjdCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYnVzaW5lc3NPYmplY3Quc291cmNlUmVmID0gbmV3U291cmNlO1xuICAgIH1cblxuICAgIGlmIChidXNpbmVzc09iamVjdC50YXJnZXRSZWYgIT09IG5ld1RhcmdldCkge1xuICAgICAgaWYgKGludmVyc2VTZXQpIHtcbiAgICAgICAgY29sbGVjdGlvblJlbW92ZShidXNpbmVzc09iamVjdC50YXJnZXRSZWYgJiYgYnVzaW5lc3NPYmplY3QudGFyZ2V0UmVmLmdldCgnaW5jb21pbmcnKSwgYnVzaW5lc3NPYmplY3QpO1xuXG4gICAgICAgIGlmIChuZXdUYXJnZXQgJiYgbmV3VGFyZ2V0LmdldCgnaW5jb21pbmcnKSkge1xuICAgICAgICAgIG5ld1RhcmdldC5nZXQoJ2luY29taW5nJykucHVzaChidXNpbmVzc09iamVjdCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYnVzaW5lc3NPYmplY3QudGFyZ2V0UmVmID0gbmV3VGFyZ2V0O1xuICAgIH1cbiAgfSBlbHNlXG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbicpKSB7XG5cbiAgICAvLyBoYW5kbGUgb2Jub3hpb3VzIGlzTXNvbWUgc291cmNlUmVmXG4gICAgYnVzaW5lc3NPYmplY3QuZ2V0KCdzb3VyY2VSZWYnKVswXSA9IG5ld1NvdXJjZTtcblxuICAgIHZpc3VhbFBhcmVudCA9IGNvbnRleHQucGFyZW50IHx8IGNvbnRleHQubmV3UGFyZW50IHx8IG5ld1RhcmdldDtcblxuICAgIHRoaXMudXBkYXRlU2VtYW50aWNQYXJlbnQoYnVzaW5lc3NPYmplY3QsIG5ld1RhcmdldCwgdmlzdWFsUGFyZW50KTtcbiAgfSBlbHNlXG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpEYXRhT3V0cHV0QXNzb2NpYXRpb24nKSkge1xuICAgIHZpc3VhbFBhcmVudCA9IGNvbnRleHQucGFyZW50IHx8IGNvbnRleHQubmV3UGFyZW50IHx8IG5ld1NvdXJjZTtcblxuICAgIHRoaXMudXBkYXRlU2VtYW50aWNQYXJlbnQoYnVzaW5lc3NPYmplY3QsIG5ld1NvdXJjZSwgdmlzdWFsUGFyZW50KTtcblxuICAgIC8vIHRhcmdldFJlZiA9IG5ldyB0YXJnZXRcbiAgICBidXNpbmVzc09iamVjdC50YXJnZXRSZWYgPSBuZXdUYXJnZXQ7XG4gIH1cblxuICB0aGlzLnVwZGF0ZUNvbm5lY3Rpb25XYXlwb2ludHMoY29ubmVjdGlvbik7XG5cbiAgdGhpcy51cGRhdGVEaUNvbm5lY3Rpb24oYnVzaW5lc3NPYmplY3QuZGksIG5ld1NvdXJjZSwgbmV3VGFyZ2V0KTtcbn07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS5fZ2V0TGFiZWwgPSBmdW5jdGlvbihkaSkge1xuICBpZiAoIWRpLmxhYmVsKSB7XG4gICAgZGkubGFiZWwgPSB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGVEaUxhYmVsKCk7XG4gIH1cblxuICByZXR1cm4gZGkubGFiZWw7XG59O1xuXG5cbi8qKlxuICogTWFrZSBzdXJlIHRoZSBldmVudCBsaXN0ZW5lciBpcyBvbmx5IGNhbGxlZFxuICogaWYgdGhlIHRvdWNoZWQgZWxlbWVudCBpcyBhIEJQTU4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBndWFyZGVkIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIGlmQnBtbihmbikge1xuXG4gIHJldHVybiBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBlbGVtZW50ID0gY29udGV4dC5zaGFwZSB8fCBjb250ZXh0LmNvbm5lY3Rpb247XG5cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46QmFzZUVsZW1lbnQnKSkge1xuICAgICAgZm4oZXZlbnQpO1xuICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZm9yRWFjaCxcbiAgaXNPYmplY3Rcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNFeHBhbmRlZFxufSBmcm9tICcuLi8uLi91dGlsL0RpVXRpbCc7XG5cbmltcG9ydCBCYXNlRWxlbWVudEZhY3RvcnkgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29yZS9FbGVtZW50RmFjdG9yeSc7XG5cbmltcG9ydCB7XG4gIERFRkFVTFRfTEFCRUxfU0laRVxufSBmcm9tICcuLi8uLi91dGlsL0xhYmVsVXRpbCc7XG5cblxuLyoqXG4gKiBBIGJwbW4tYXdhcmUgZmFjdG9yeSBmb3IgZGlhZ3JhbS1qcyBzaGFwZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRWxlbWVudEZhY3RvcnkoYnBtbkZhY3RvcnksIG1vZGRsZSwgdHJhbnNsYXRlKSB7XG4gIEJhc2VFbGVtZW50RmFjdG9yeS5jYWxsKHRoaXMpO1xuXG4gIHRoaXMuX2JwbW5GYWN0b3J5ID0gYnBtbkZhY3Rvcnk7XG4gIHRoaXMuX21vZGRsZSA9IG1vZGRsZTtcbiAgdGhpcy5fdHJhbnNsYXRlID0gdHJhbnNsYXRlO1xufVxuXG5pbmhlcml0cyhFbGVtZW50RmFjdG9yeSwgQmFzZUVsZW1lbnRGYWN0b3J5KTtcblxuRWxlbWVudEZhY3RvcnkuJGluamVjdCA9IFtcbiAgJ2JwbW5GYWN0b3J5JyxcbiAgJ21vZGRsZScsXG4gICd0cmFuc2xhdGUnXG5dO1xuXG5FbGVtZW50RmFjdG9yeS5wcm90b3R5cGUuYmFzZUNyZWF0ZSA9IEJhc2VFbGVtZW50RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlO1xuXG5FbGVtZW50RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24oZWxlbWVudFR5cGUsIGF0dHJzKSB7XG5cbiAgLy8gbm8gc3BlY2lhbCBtYWdpYyBmb3IgbGFiZWxzLFxuICAvLyB3ZSBhc3N1bWUgdGhlaXIgYnVzaW5lc3NPYmplY3RzIGhhdmUgYWxyZWFkeSBiZWVuIGNyZWF0ZWRcbiAgLy8gYW5kIHdpcmVkIHZpYSBhdHRyc1xuICBpZiAoZWxlbWVudFR5cGUgPT09ICdsYWJlbCcpIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlQ3JlYXRlKGVsZW1lbnRUeXBlLCBhc3NpZ24oeyB0eXBlOiAnbGFiZWwnIH0sIERFRkFVTFRfTEFCRUxfU0laRSwgYXR0cnMpKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmNyZWF0ZUJwbW5FbGVtZW50KGVsZW1lbnRUeXBlLCBhdHRycyk7XG59O1xuXG5FbGVtZW50RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlQnBtbkVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50VHlwZSwgYXR0cnMpIHtcbiAgdmFyIHNpemUsXG4gICAgICB0cmFuc2xhdGUgPSB0aGlzLl90cmFuc2xhdGU7XG5cbiAgYXR0cnMgPSBhdHRycyB8fCB7fTtcblxuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBhdHRycy5idXNpbmVzc09iamVjdDtcblxuICBpZiAoIWJ1c2luZXNzT2JqZWN0KSB7XG4gICAgaWYgKCFhdHRycy50eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdubyBzaGFwZSB0eXBlIHNwZWNpZmllZCcpKTtcbiAgICB9XG5cbiAgICBidXNpbmVzc09iamVjdCA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZShhdHRycy50eXBlKTtcbiAgfVxuXG4gIGlmICghYnVzaW5lc3NPYmplY3QuZGkpIHtcbiAgICBpZiAoZWxlbWVudFR5cGUgPT09ICdyb290Jykge1xuICAgICAgYnVzaW5lc3NPYmplY3QuZGkgPSB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGVEaVBsYW5lKGJ1c2luZXNzT2JqZWN0LCBbXSwge1xuICAgICAgICBpZDogYnVzaW5lc3NPYmplY3QuaWQgKyAnX2RpJ1xuICAgICAgfSk7XG4gICAgfSBlbHNlXG4gICAgaWYgKGVsZW1lbnRUeXBlID09PSAnY29ubmVjdGlvbicpIHtcbiAgICAgIGJ1c2luZXNzT2JqZWN0LmRpID0gdGhpcy5fYnBtbkZhY3RvcnkuY3JlYXRlRGlFZGdlKGJ1c2luZXNzT2JqZWN0LCBbXSwge1xuICAgICAgICBpZDogYnVzaW5lc3NPYmplY3QuaWQgKyAnX2RpJ1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1c2luZXNzT2JqZWN0LmRpID0gdGhpcy5fYnBtbkZhY3RvcnkuY3JlYXRlRGlTaGFwZShidXNpbmVzc09iamVjdCwge30sIHtcbiAgICAgICAgaWQ6IGJ1c2luZXNzT2JqZWN0LmlkICsgJ19kaSdcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46R3JvdXAnKSkge1xuICAgIGF0dHJzID0gYXNzaWduKHtcbiAgICAgIGlzRnJhbWU6IHRydWVcbiAgICB9LCBhdHRycyk7XG4gIH1cblxuICBpZiAoYXR0cnMuZGkpIHtcbiAgICBhc3NpZ24oYnVzaW5lc3NPYmplY3QuZGksIGF0dHJzLmRpKTtcblxuICAgIGRlbGV0ZSBhdHRycy5kaTtcbiAgfVxuXG4gIGFwcGx5QXR0cmlidXRlcyhidXNpbmVzc09iamVjdCwgYXR0cnMsIFtcbiAgICAncHJvY2Vzc1JlZicsXG4gICAgJ2lzSW50ZXJydXB0aW5nJyxcbiAgICAnYXNzb2NpYXRpb25EaXJlY3Rpb24nLFxuICAgICdpc0ZvckNvbXBlbnNhdGlvbidcbiAgXSk7XG5cbiAgaWYgKGF0dHJzLmlzRXhwYW5kZWQpIHtcbiAgICBhcHBseUF0dHJpYnV0ZShidXNpbmVzc09iamVjdC5kaSwgYXR0cnMsICdpc0V4cGFuZGVkJyk7XG4gIH1cblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkV4Y2x1c2l2ZUdhdGV3YXknKSkge1xuICAgIGJ1c2luZXNzT2JqZWN0LmRpLmlzTWFya2VyVmlzaWJsZSA9IHRydWU7XG4gIH1cblxuICB2YXIgZXZlbnREZWZpbml0aW9ucyxcbiAgICAgIG5ld0V2ZW50RGVmaW5pdGlvbjtcblxuICBpZiAoYXR0cnMuZXZlbnREZWZpbml0aW9uVHlwZSkge1xuICAgIGV2ZW50RGVmaW5pdGlvbnMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V2ZW50RGVmaW5pdGlvbnMnKSB8fCBbXTtcbiAgICBuZXdFdmVudERlZmluaXRpb24gPSB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGUoYXR0cnMuZXZlbnREZWZpbml0aW9uVHlwZSwgYXR0cnMuZXZlbnREZWZpbml0aW9uQXR0cnMpO1xuXG4gICAgaWYgKGF0dHJzLmV2ZW50RGVmaW5pdGlvblR5cGUgPT09ICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJykge1xuICAgICAgbmV3RXZlbnREZWZpbml0aW9uLmNvbmRpdGlvbiA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpGb3JtYWxFeHByZXNzaW9uJyk7XG4gICAgfVxuXG4gICAgZXZlbnREZWZpbml0aW9ucy5wdXNoKG5ld0V2ZW50RGVmaW5pdGlvbik7XG5cbiAgICBuZXdFdmVudERlZmluaXRpb24uJHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xuICAgIGJ1c2luZXNzT2JqZWN0LmV2ZW50RGVmaW5pdGlvbnMgPSBldmVudERlZmluaXRpb25zO1xuXG4gICAgZGVsZXRlIGF0dHJzLmV2ZW50RGVmaW5pdGlvblR5cGU7XG4gIH1cblxuICBzaXplID0gdGhpcy5fZ2V0RGVmYXVsdFNpemUoYnVzaW5lc3NPYmplY3QpO1xuXG4gIGF0dHJzID0gYXNzaWduKHtcbiAgICBidXNpbmVzc09iamVjdDogYnVzaW5lc3NPYmplY3QsXG4gICAgaWQ6IGJ1c2luZXNzT2JqZWN0LmlkXG4gIH0sIHNpemUsIGF0dHJzKTtcblxuICByZXR1cm4gdGhpcy5iYXNlQ3JlYXRlKGVsZW1lbnRUeXBlLCBhdHRycyk7XG59O1xuXG5cbkVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5fZ2V0RGVmYXVsdFNpemUgPSBmdW5jdGlvbihzZW1hbnRpYykge1xuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46U3ViUHJvY2VzcycpKSB7XG5cbiAgICBpZiAoaXNFeHBhbmRlZChzZW1hbnRpYykpIHtcbiAgICAgIHJldHVybiB7IHdpZHRoOiAzNTAsIGhlaWdodDogMjAwIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7IHdpZHRoOiAxMDAsIGhlaWdodDogODAgfTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXMoc2VtYW50aWMsICdicG1uOlRhc2snKSkge1xuICAgIHJldHVybiB7IHdpZHRoOiAxMDAsIGhlaWdodDogODAgfTtcbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46R2F0ZXdheScpKSB7XG4gICAgcmV0dXJuIHsgd2lkdGg6IDUwLCBoZWlnaHQ6IDUwIH07XG4gIH1cblxuICBpZiAoaXMoc2VtYW50aWMsICdicG1uOkV2ZW50JykpIHtcbiAgICByZXR1cm4geyB3aWR0aDogMzYsIGhlaWdodDogMzYgfTtcbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIGlmIChpc0V4cGFuZGVkKHNlbWFudGljKSkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6IDYwMCwgaGVpZ2h0OiAyNTAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6IDQwMCwgaGVpZ2h0OiA2MCB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46TGFuZScpKSB7XG4gICAgcmV0dXJuIHsgd2lkdGg6IDQwMCwgaGVpZ2h0OiAxMDAgfTtcbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScpKSB7XG4gICAgcmV0dXJuIHsgd2lkdGg6IDM2LCBoZWlnaHQ6IDUwIH07XG4gIH1cblxuICBpZiAoaXMoc2VtYW50aWMsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScpKSB7XG4gICAgcmV0dXJuIHsgd2lkdGg6IDUwLCBoZWlnaHQ6IDUwIH07XG4gIH1cblxuICBpZiAoaXMoc2VtYW50aWMsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcbiAgICByZXR1cm4geyB3aWR0aDogMTAwLCBoZWlnaHQ6IDMwIH07XG4gIH1cblxuICBpZiAoaXMoc2VtYW50aWMsICdicG1uOkdyb3VwJykpIHtcbiAgICByZXR1cm4geyB3aWR0aDogMzAwLCBoZWlnaHQ6IDMwMCB9O1xuICB9XG5cbiAgcmV0dXJuIHsgd2lkdGg6IDEwMCwgaGVpZ2h0OiA4MCB9O1xufTtcblxuXG4vKipcbiAqIENyZWF0ZSBwYXJ0aWNpcGFudC5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW58T2JqZWN0fSBbYXR0cnNdIGF0dHJzXG4gKlxuICogQHJldHVybnMge2Rqcy5tb2RlbC5TaGFwZX1cbiAqL1xuRWxlbWVudEZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZVBhcnRpY2lwYW50U2hhcGUgPSBmdW5jdGlvbihhdHRycykge1xuXG4gIGlmICghaXNPYmplY3QoYXR0cnMpKSB7XG4gICAgYXR0cnMgPSB7IGlzRXhwYW5kZWQ6IGF0dHJzIH07XG4gIH1cblxuICBhdHRycyA9IGFzc2lnbih7IHR5cGU6ICdicG1uOlBhcnRpY2lwYW50JyB9LCBhdHRycyB8fCB7fSk7XG5cbiAgLy8gcGFydGljaXBhbnRzIGFyZSBleHBhbmRlZCBieSBkZWZhdWx0XG4gIGlmIChhdHRycy5pc0V4cGFuZGVkICE9PSBmYWxzZSkge1xuICAgIGF0dHJzLnByb2Nlc3NSZWYgPSB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46UHJvY2VzcycpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuY3JlYXRlU2hhcGUoYXR0cnMpO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBBcHBseSBhdHRyaWJ1dGVzIGZyb20gYSBtYXAgdG8gdGhlIGdpdmVuIGVsZW1lbnQsXG4gKiByZW1vdmUgYXR0cmlidXRlIGZyb20gdGhlIG1hcCBvbiBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Jhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBhdHRycyAoaW4vb3V0IG1hcCBvZiBhdHRyaWJ1dGVzKVxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBhdHRyaWJ1dGVOYW1lcyBuYW1lIG9mIGF0dHJpYnV0ZXMgdG8gYXBwbHlcbiAqL1xuZnVuY3Rpb24gYXBwbHlBdHRyaWJ1dGVzKGVsZW1lbnQsIGF0dHJzLCBhdHRyaWJ1dGVOYW1lcykge1xuXG4gIGZvckVhY2goYXR0cmlidXRlTmFtZXMsIGZ1bmN0aW9uKHByb3BlcnR5KSB7XG4gICAgaWYgKGF0dHJzW3Byb3BlcnR5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhcHBseUF0dHJpYnV0ZShlbGVtZW50LCBhdHRycywgcHJvcGVydHkpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQXBwbHkgbmFtZWQgcHJvcGVydHkgdG8gZWxlbWVudCBhbmQgZHJhaW4gaXQgZnJvbSB0aGUgYXR0cnNcbiAqIGNvbGxlY3Rpb24uXG4gKlxuICogQHBhcmFtIHtCYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gYXR0cnMgKGluL291dCBtYXAgb2YgYXR0cmlidXRlcylcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIHRvIGFwcGx5XG4gKi9cbmZ1bmN0aW9uIGFwcGx5QXR0cmlidXRlKGVsZW1lbnQsIGF0dHJzLCBhdHRyaWJ1dGVOYW1lKSB7XG4gIGVsZW1lbnRbYXR0cmlidXRlTmFtZV0gPSBhdHRyc1thdHRyaWJ1dGVOYW1lXTtcblxuICBkZWxldGUgYXR0cnNbYXR0cmlidXRlTmFtZV07XG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IEJhc2VNb2RlbGluZyBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9Nb2RlbGluZyc7XG5cbmltcG9ydCBVcGRhdGVQcm9wZXJ0aWVzSGFuZGxlciBmcm9tICcuL2NtZC9VcGRhdGVQcm9wZXJ0aWVzSGFuZGxlcic7XG5pbXBvcnQgVXBkYXRlQ2FudmFzUm9vdEhhbmRsZXIgZnJvbSAnLi9jbWQvVXBkYXRlQ2FudmFzUm9vdEhhbmRsZXInO1xuaW1wb3J0IEFkZExhbmVIYW5kbGVyIGZyb20gJy4vY21kL0FkZExhbmVIYW5kbGVyJztcbmltcG9ydCBTcGxpdExhbmVIYW5kbGVyIGZyb20gJy4vY21kL1NwbGl0TGFuZUhhbmRsZXInO1xuaW1wb3J0IFJlc2l6ZUxhbmVIYW5kbGVyIGZyb20gJy4vY21kL1Jlc2l6ZUxhbmVIYW5kbGVyJztcbmltcG9ydCBVcGRhdGVGbG93Tm9kZVJlZnNIYW5kbGVyIGZyb20gJy4vY21kL1VwZGF0ZUZsb3dOb2RlUmVmc0hhbmRsZXInO1xuaW1wb3J0IElkQ2xhaW1IYW5kbGVyIGZyb20gJy4vY21kL0lkQ2xhaW1IYW5kbGVyJztcbmltcG9ydCBTZXRDb2xvckhhbmRsZXIgZnJvbSAnLi9jbWQvU2V0Q29sb3JIYW5kbGVyJztcblxuaW1wb3J0IFVwZGF0ZUxhYmVsSGFuZGxlciBmcm9tICcuLi9sYWJlbC1lZGl0aW5nL2NtZC9VcGRhdGVMYWJlbEhhbmRsZXInO1xuXG5cbi8qKlxuICogQlBNTiAyLjAgbW9kZWxpbmcgZmVhdHVyZXMgYWN0aXZhdG9yXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RWxlbWVudEZhY3Rvcnl9IGVsZW1lbnRGYWN0b3J5XG4gKiBAcGFyYW0ge0NvbW1hbmRTdGFja30gY29tbWFuZFN0YWNrXG4gKiBAcGFyYW0ge0JwbW5SdWxlc30gYnBtblJ1bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vZGVsaW5nKFxuICAgIGV2ZW50QnVzLCBlbGVtZW50RmFjdG9yeSwgY29tbWFuZFN0YWNrLFxuICAgIGJwbW5SdWxlcykge1xuXG4gIEJhc2VNb2RlbGluZy5jYWxsKHRoaXMsIGV2ZW50QnVzLCBlbGVtZW50RmFjdG9yeSwgY29tbWFuZFN0YWNrKTtcblxuICB0aGlzLl9icG1uUnVsZXMgPSBicG1uUnVsZXM7XG59XG5cbmluaGVyaXRzKE1vZGVsaW5nLCBCYXNlTW9kZWxpbmcpO1xuXG5Nb2RlbGluZy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnZWxlbWVudEZhY3RvcnknLFxuICAnY29tbWFuZFN0YWNrJyxcbiAgJ2JwbW5SdWxlcydcbl07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLmdldEhhbmRsZXJzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBoYW5kbGVycyA9IEJhc2VNb2RlbGluZy5wcm90b3R5cGUuZ2V0SGFuZGxlcnMuY2FsbCh0aGlzKTtcblxuICBoYW5kbGVyc1snZWxlbWVudC51cGRhdGVQcm9wZXJ0aWVzJ10gPSBVcGRhdGVQcm9wZXJ0aWVzSGFuZGxlcjtcbiAgaGFuZGxlcnNbJ2NhbnZhcy51cGRhdGVSb290J10gPSBVcGRhdGVDYW52YXNSb290SGFuZGxlcjtcbiAgaGFuZGxlcnNbJ2xhbmUuYWRkJ10gPSBBZGRMYW5lSGFuZGxlcjtcbiAgaGFuZGxlcnNbJ2xhbmUucmVzaXplJ10gPSBSZXNpemVMYW5lSGFuZGxlcjtcbiAgaGFuZGxlcnNbJ2xhbmUuc3BsaXQnXSA9IFNwbGl0TGFuZUhhbmRsZXI7XG4gIGhhbmRsZXJzWydsYW5lLnVwZGF0ZVJlZnMnXSA9IFVwZGF0ZUZsb3dOb2RlUmVmc0hhbmRsZXI7XG4gIGhhbmRsZXJzWydpZC51cGRhdGVDbGFpbSddID0gSWRDbGFpbUhhbmRsZXI7XG4gIGhhbmRsZXJzWydlbGVtZW50LnNldENvbG9yJ10gPSBTZXRDb2xvckhhbmRsZXI7XG4gIGhhbmRsZXJzWydlbGVtZW50LnVwZGF0ZUxhYmVsJ10gPSBVcGRhdGVMYWJlbEhhbmRsZXI7XG5cbiAgcmV0dXJuIGhhbmRsZXJzO1xufTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUudXBkYXRlTGFiZWwgPSBmdW5jdGlvbihlbGVtZW50LCBuZXdMYWJlbCwgbmV3Qm91bmRzLCBoaW50cykge1xuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVMYWJlbCcsIHtcbiAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgIG5ld0xhYmVsOiBuZXdMYWJlbCxcbiAgICBuZXdCb3VuZHM6IG5ld0JvdW5kcyxcbiAgICBoaW50czogaGludHMgfHwge31cbiAgfSk7XG59O1xuXG5cbk1vZGVsaW5nLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24oc291cmNlLCB0YXJnZXQsIGF0dHJzLCBoaW50cykge1xuXG4gIHZhciBicG1uUnVsZXMgPSB0aGlzLl9icG1uUnVsZXM7XG5cbiAgaWYgKCFhdHRycykge1xuICAgIGF0dHJzID0gYnBtblJ1bGVzLmNhbkNvbm5lY3Qoc291cmNlLCB0YXJnZXQpO1xuICB9XG5cbiAgaWYgKCFhdHRycykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmNyZWF0ZUNvbm5lY3Rpb24oc291cmNlLCB0YXJnZXQsIGF0dHJzLCBzb3VyY2UucGFyZW50LCBoaW50cyk7XG59O1xuXG5cbk1vZGVsaW5nLnByb3RvdHlwZS51cGRhdGVQcm9wZXJ0aWVzID0gZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydGllcykge1xuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVQcm9wZXJ0aWVzJywge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgcHJvcGVydGllczogcHJvcGVydGllc1xuICB9KTtcbn07XG5cbk1vZGVsaW5nLnByb3RvdHlwZS5yZXNpemVMYW5lID0gZnVuY3Rpb24obGFuZVNoYXBlLCBuZXdCb3VuZHMsIGJhbGFuY2VkKSB7XG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdsYW5lLnJlc2l6ZScsIHtcbiAgICBzaGFwZTogbGFuZVNoYXBlLFxuICAgIG5ld0JvdW5kczogbmV3Qm91bmRzLFxuICAgIGJhbGFuY2VkOiBiYWxhbmNlZFxuICB9KTtcbn07XG5cbk1vZGVsaW5nLnByb3RvdHlwZS5hZGRMYW5lID0gZnVuY3Rpb24odGFyZ2V0TGFuZVNoYXBlLCBsb2NhdGlvbikge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBzaGFwZTogdGFyZ2V0TGFuZVNoYXBlLFxuICAgIGxvY2F0aW9uOiBsb2NhdGlvblxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdsYW5lLmFkZCcsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0Lm5ld0xhbmU7XG59O1xuXG5Nb2RlbGluZy5wcm90b3R5cGUuc3BsaXRMYW5lID0gZnVuY3Rpb24odGFyZ2V0TGFuZSwgY291bnQpIHtcbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2xhbmUuc3BsaXQnLCB7XG4gICAgc2hhcGU6IHRhcmdldExhbmUsXG4gICAgY291bnQ6IGNvdW50XG4gIH0pO1xufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGN1cnJlbnQgZGlhZ3JhbSBpbnRvIGEgY29sbGFib3JhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuUm9vdH0gdGhlIG5ldyByb290IGVsZW1lbnRcbiAqL1xuTW9kZWxpbmcucHJvdG90eXBlLm1ha2VDb2xsYWJvcmF0aW9uID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIGNvbGxhYm9yYXRpb25FbGVtZW50ID0gdGhpcy5fY3JlYXRlKCdyb290Jywge1xuICAgIHR5cGU6ICdicG1uOkNvbGxhYm9yYXRpb24nXG4gIH0pO1xuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgIG5ld1Jvb3Q6IGNvbGxhYm9yYXRpb25FbGVtZW50XG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2NhbnZhcy51cGRhdGVSb290JywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbGxhYm9yYXRpb25FbGVtZW50O1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLnVwZGF0ZUxhbmVSZWZzID0gZnVuY3Rpb24oZmxvd05vZGVTaGFwZXMsIGxhbmVTaGFwZXMpIHtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnbGFuZS51cGRhdGVSZWZzJywge1xuICAgIGZsb3dOb2RlU2hhcGVzOiBmbG93Tm9kZVNoYXBlcyxcbiAgICBsYW5lU2hhcGVzOiBsYW5lU2hhcGVzXG4gIH0pO1xufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGN1cnJlbnQgZGlhZ3JhbSBpbnRvIGEgcHJvY2Vzcy5cbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuUm9vdH0gdGhlIG5ldyByb290IGVsZW1lbnRcbiAqL1xuTW9kZWxpbmcucHJvdG90eXBlLm1ha2VQcm9jZXNzID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIHByb2Nlc3NFbGVtZW50ID0gdGhpcy5fY3JlYXRlKCdyb290Jywge1xuICAgIHR5cGU6ICdicG1uOlByb2Nlc3MnXG4gIH0pO1xuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgIG5ld1Jvb3Q6IHByb2Nlc3NFbGVtZW50XG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2NhbnZhcy51cGRhdGVSb290JywgY29udGV4dCk7XG59O1xuXG5cbk1vZGVsaW5nLnByb3RvdHlwZS5jbGFpbUlkID0gZnVuY3Rpb24oaWQsIG1vZGRsZUVsZW1lbnQpIHtcbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2lkLnVwZGF0ZUNsYWltJywge1xuICAgIGlkOiBpZCxcbiAgICBlbGVtZW50OiBtb2RkbGVFbGVtZW50LFxuICAgIGNsYWltaW5nOiB0cnVlXG4gIH0pO1xufTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUudW5jbGFpbUlkID0gZnVuY3Rpb24oaWQsIG1vZGRsZUVsZW1lbnQpIHtcbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2lkLnVwZGF0ZUNsYWltJywge1xuICAgIGlkOiBpZCxcbiAgICBlbGVtZW50OiBtb2RkbGVFbGVtZW50XG4gIH0pO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLnNldENvbG9yID0gZnVuY3Rpb24oZWxlbWVudHMsIGNvbG9ycykge1xuICBpZiAoIWVsZW1lbnRzLmxlbmd0aCkge1xuICAgIGVsZW1lbnRzID0gWyBlbGVtZW50cyBdO1xuICB9XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQuc2V0Q29sb3InLCB7XG4gICAgZWxlbWVudHM6IGVsZW1lbnRzLFxuICAgIGNvbG9yczogY29sb3JzXG4gIH0pO1xufTtcbiIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7XG4gIGdldE9yaWVudGF0aW9uLFxuICBnZXRNaWQsXG4gIGFzVFJCTFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIHN1YnN0cmFjdFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL01hdGgnO1xuXG5pbXBvcnQge1xuICBoYXNFeHRlcm5hbExhYmVsXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTGFiZWxVdGlsJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbnZhciBBTElHTk1FTlRTID0gW1xuICAndG9wJyxcbiAgJ2JvdHRvbScsXG4gICdsZWZ0JyxcbiAgJ3JpZ2h0J1xuXTtcblxudmFyIEVMRU1FTlRfTEFCRUxfRElTVEFOQ0UgPSAxMDtcblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IG1ha2VzIHN1cmUgdGhhdCBleHRlcm5hbCBsYWJlbHMgYXJlIGFkZGVkXG4gKiB0b2dldGhlciB3aXRoIHJlc3BlY3RpdmUgZWxlbWVudHMgYW5kIHByb3Blcmx5IHVwZGF0ZWQgKERJIHdpc2UpXG4gKiBkdXJpbmcgbW92ZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQWRhcHRpdmVMYWJlbFBvc2l0aW9uaW5nQmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFtcbiAgICAnY29ubmVjdGlvbi5jcmVhdGUnLFxuICAgICdjb25uZWN0aW9uLmxheW91dCcsXG4gICAgJ2Nvbm5lY3Rpb24udXBkYXRlV2F5cG9pbnRzJ1xuICBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgc291cmNlID0gY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgIHRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge307XG5cbiAgICBpZiAoaGludHMuY3JlYXRlRWxlbWVudHNCZWhhdmlvciAhPT0gZmFsc2UpIHtcbiAgICAgIGNoZWNrTGFiZWxBZGp1c3RtZW50KHNvdXJjZSk7XG4gICAgICBjaGVja0xhYmVsQWRqdXN0bWVudCh0YXJnZXQpO1xuICAgIH1cbiAgfSk7XG5cblxuICB0aGlzLnBvc3RFeGVjdXRlZChbXG4gICAgJ2xhYmVsLmNyZWF0ZSdcbiAgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9O1xuXG4gICAgaWYgKGhpbnRzLmNyZWF0ZUVsZW1lbnRzQmVoYXZpb3IgIT09IGZhbHNlKSB7XG4gICAgICBjaGVja0xhYmVsQWRqdXN0bWVudChzaGFwZS5sYWJlbFRhcmdldCk7XG4gICAgfVxuICB9KTtcblxuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFtcbiAgICAnZWxlbWVudHMuY3JlYXRlJ1xuICBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzLFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge307XG5cbiAgICBpZiAoaGludHMuY3JlYXRlRWxlbWVudHNCZWhhdmlvciAhPT0gZmFsc2UpIHtcbiAgICAgIGVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICBjaGVja0xhYmVsQWRqdXN0bWVudChlbGVtZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gY2hlY2tMYWJlbEFkanVzdG1lbnQoZWxlbWVudCkge1xuXG4gICAgLy8gc2tpcCBub24tZXhpc3RpbmcgbGFiZWxzXG4gICAgaWYgKCFoYXNFeHRlcm5hbExhYmVsKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG9wdGltYWxQb3NpdGlvbiA9IGdldE9wdGltYWxQb3NpdGlvbihlbGVtZW50KTtcblxuICAgIC8vIG5vIG9wdGltYWwgcG9zaXRpb24gZm91bmRcbiAgICBpZiAoIW9wdGltYWxQb3NpdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFkanVzdExhYmVsUG9zaXRpb24oZWxlbWVudCwgb3B0aW1hbFBvc2l0aW9uKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkanVzdExhYmVsUG9zaXRpb24oZWxlbWVudCwgb3JpZW50YXRpb24pIHtcblxuICAgIHZhciBlbGVtZW50TWlkID0gZ2V0TWlkKGVsZW1lbnQpLFxuICAgICAgICBsYWJlbCA9IGVsZW1lbnQubGFiZWwsXG4gICAgICAgIGxhYmVsTWlkID0gZ2V0TWlkKGxhYmVsKTtcblxuICAgIC8vIGlnbm9yZSBsYWJlbHMgdGhhdCBhcmUgYmVpbmcgY3JlYXRlZFxuICAgIGlmICghbGFiZWwucGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnRUcmJsID0gYXNUUkJMKGVsZW1lbnQpO1xuXG4gICAgdmFyIG5ld0xhYmVsTWlkO1xuXG4gICAgc3dpdGNoIChvcmllbnRhdGlvbikge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgICBuZXdMYWJlbE1pZCA9IHtcbiAgICAgICAgeDogZWxlbWVudE1pZC54LFxuICAgICAgICB5OiBlbGVtZW50VHJibC50b3AgLSBFTEVNRU5UX0xBQkVMX0RJU1RBTkNFIC0gbGFiZWwuaGVpZ2h0IC8gMlxuICAgICAgfTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdsZWZ0JzpcblxuICAgICAgbmV3TGFiZWxNaWQgPSB7XG4gICAgICAgIHg6IGVsZW1lbnRUcmJsLmxlZnQgLSBFTEVNRU5UX0xBQkVMX0RJU1RBTkNFIC0gbGFiZWwud2lkdGggLyAyLFxuICAgICAgICB5OiBlbGVtZW50TWlkLnlcbiAgICAgIH07XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYm90dG9tJzpcblxuICAgICAgbmV3TGFiZWxNaWQgPSB7XG4gICAgICAgIHg6IGVsZW1lbnRNaWQueCxcbiAgICAgICAgeTogZWxlbWVudFRyYmwuYm90dG9tICsgRUxFTUVOVF9MQUJFTF9ESVNUQU5DRSArIGxhYmVsLmhlaWdodCAvIDJcbiAgICAgIH07XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncmlnaHQnOlxuXG4gICAgICBuZXdMYWJlbE1pZCA9IHtcbiAgICAgICAgeDogZWxlbWVudFRyYmwucmlnaHQgKyBFTEVNRU5UX0xBQkVMX0RJU1RBTkNFICsgbGFiZWwud2lkdGggLyAyLFxuICAgICAgICB5OiBlbGVtZW50TWlkLnlcbiAgICAgIH07XG5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBkZWx0YSA9IHN1YnN0cmFjdChuZXdMYWJlbE1pZCwgbGFiZWxNaWQpO1xuXG4gICAgbW9kZWxpbmcubW92ZVNoYXBlKGxhYmVsLCBkZWx0YSk7XG4gIH1cblxufVxuXG5pbmhlcml0cyhBZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuQWRhcHRpdmVMYWJlbFBvc2l0aW9uaW5nQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBSZXR1cm4gYWxpZ25tZW50cyB3aGljaCBhcmUgdGFrZW4gYnkgYSBib3VuZGFyeSdzIGhvc3QgZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7U2hhcGV9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBnZXRUYWtlbkhvc3RBbGlnbm1lbnRzKGVsZW1lbnQpIHtcblxuICB2YXIgaG9zdEVsZW1lbnQgPSBlbGVtZW50Lmhvc3QsXG4gICAgICBlbGVtZW50TWlkID0gZ2V0TWlkKGVsZW1lbnQpLFxuICAgICAgaG9zdE9yaWVudGF0aW9uID0gZ2V0T3JpZW50YXRpb24oZWxlbWVudE1pZCwgaG9zdEVsZW1lbnQpO1xuXG4gIHZhciBmcmVlQWxpZ25tZW50cztcblxuICAvLyBjaGVjayB3aGV0aGVyIHRoZXJlIGlzIGEgbXVsdGktb3JpZW50YXRpb24sIGUuZy4gJ3RvcC1sZWZ0J1xuICBpZiAoaG9zdE9yaWVudGF0aW9uLmluZGV4T2YoJy0nKSA+PSAwKSB7XG4gICAgZnJlZUFsaWdubWVudHMgPSBob3N0T3JpZW50YXRpb24uc3BsaXQoJy0nKTtcbiAgfSBlbHNlIHtcbiAgICBmcmVlQWxpZ25tZW50cyA9IFsgaG9zdE9yaWVudGF0aW9uIF07XG4gIH1cblxuICB2YXIgdGFrZW5BbGlnbm1lbnRzID0gQUxJR05NRU5UUy5maWx0ZXIoZnVuY3Rpb24oYWxpZ25tZW50KSB7XG5cbiAgICByZXR1cm4gZnJlZUFsaWdubWVudHMuaW5kZXhPZihhbGlnbm1lbnQpID09PSAtMTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRha2VuQWxpZ25tZW50cztcblxufVxuXG4vKipcbiAqIFJldHVybiBhbGlnbm1lbnRzIHdoaWNoIGFyZSB0YWtlbiBieSByZWxhdGVkIGNvbm5lY3Rpb25zXG4gKlxuICogQHBhcmFtIHtTaGFwZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge0FycmF5PHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGdldFRha2VuQ29ubmVjdGlvbkFsaWdubWVudHMoZWxlbWVudCkge1xuXG4gIHZhciBlbGVtZW50TWlkID0gZ2V0TWlkKGVsZW1lbnQpO1xuXG4gIHZhciB0YWtlbkFsaWdubWVudHMgPSBbXS5jb25jYXQoXG4gICAgZWxlbWVudC5pbmNvbWluZy5tYXAoZnVuY3Rpb24oYykge1xuICAgICAgcmV0dXJuIGMud2F5cG9pbnRzW2Mud2F5cG9pbnRzLmxlbmd0aCAtIDIgXTtcbiAgICB9KSxcbiAgICBlbGVtZW50Lm91dGdvaW5nLm1hcChmdW5jdGlvbihjKSB7XG4gICAgICByZXR1cm4gYy53YXlwb2ludHNbMV07XG4gICAgfSlcbiAgKS5tYXAoZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gZ2V0QXBwcm94aW1hdGVPcmllbnRhdGlvbihlbGVtZW50TWlkLCBwb2ludCk7XG4gIH0pO1xuXG4gIHJldHVybiB0YWtlbkFsaWdubWVudHM7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBvcHRpbWFsIGxhYmVsIHBvc2l0aW9uIGFyb3VuZCBhbiBlbGVtZW50XG4gKiBvciBfdW5kZWZpbmVkXywgaWYgbm9uZSB3YXMgZm91bmQuXG4gKlxuICogQHBhcmFtICB7U2hhcGV9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHBvc2l0aW9uaW5nIGlkZW50aWZpZXJcbiAqL1xuZnVuY3Rpb24gZ2V0T3B0aW1hbFBvc2l0aW9uKGVsZW1lbnQpIHtcblxuICB2YXIgbGFiZWxNaWQgPSBnZXRNaWQoZWxlbWVudC5sYWJlbCk7XG5cbiAgdmFyIGVsZW1lbnRNaWQgPSBnZXRNaWQoZWxlbWVudCk7XG5cbiAgdmFyIGxhYmVsT3JpZW50YXRpb24gPSBnZXRBcHByb3hpbWF0ZU9yaWVudGF0aW9uKGVsZW1lbnRNaWQsIGxhYmVsTWlkKTtcblxuICBpZiAoIWlzQWxpZ25lZChsYWJlbE9yaWVudGF0aW9uKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0YWtlbkFsaWdubWVudHMgPSBnZXRUYWtlbkNvbm5lY3Rpb25BbGlnbm1lbnRzKGVsZW1lbnQpO1xuXG4gIGlmIChlbGVtZW50Lmhvc3QpIHtcbiAgICB2YXIgdGFrZW5Ib3N0QWxpZ25tZW50cyA9IGdldFRha2VuSG9zdEFsaWdubWVudHMoZWxlbWVudCk7XG5cbiAgICB0YWtlbkFsaWdubWVudHMgPSB0YWtlbkFsaWdubWVudHMuY29uY2F0KHRha2VuSG9zdEFsaWdubWVudHMpO1xuICB9XG5cbiAgdmFyIGZyZWVBbGlnbm1lbnRzID0gQUxJR05NRU5UUy5maWx0ZXIoZnVuY3Rpb24oYWxpZ25tZW50KSB7XG5cbiAgICByZXR1cm4gdGFrZW5BbGlnbm1lbnRzLmluZGV4T2YoYWxpZ25tZW50KSA9PT0gLTE7XG4gIH0pO1xuXG4gIC8vIE5PVEhJTkcgVE8gRE87IGxhYmVsIGFscmVhZHkgYWxpZ25lZCBhLk8uSy5cbiAgaWYgKGZyZWVBbGlnbm1lbnRzLmluZGV4T2YobGFiZWxPcmllbnRhdGlvbikgIT09IC0xKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGZyZWVBbGlnbm1lbnRzWzBdO1xufVxuXG5mdW5jdGlvbiBnZXRBcHByb3hpbWF0ZU9yaWVudGF0aW9uKHAwLCBwMSkge1xuICByZXR1cm4gZ2V0T3JpZW50YXRpb24ocDEsIHAwLCA1KTtcbn1cblxuZnVuY3Rpb24gaXNBbGlnbmVkKG9yaWVudGF0aW9uKSB7XG4gIHJldHVybiBBTElHTk1FTlRTLmluZGV4T2Yob3JpZW50YXRpb24pICE9PSAtMTtcbn1cbiIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBcHBlbmRCZWhhdmlvcihldmVudEJ1cywgZWxlbWVudEZhY3RvcnksIGJwbW5SdWxlcykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICAvLyBhc3NpZ24gY29ycmVjdCBzaGFwZSBwb3NpdGlvbiB1bmxlc3MgYWxyZWFkeSBzZXRcblxuICB0aGlzLnByZUV4ZWN1dGUoJ3NoYXBlLmFwcGVuZCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKCFjb250ZXh0LnBvc2l0aW9uKSB7XG5cbiAgICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgICAgICBjb250ZXh0LnBvc2l0aW9uID0ge1xuICAgICAgICAgIHg6IHNvdXJjZS54ICsgc291cmNlLndpZHRoIC8gMiArIDc1LFxuICAgICAgICAgIHk6IHNvdXJjZS55IC0gKDUwKSAtIHNoYXBlLmhlaWdodCAvIDJcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQucG9zaXRpb24gPSB7XG4gICAgICAgICAgeDogc291cmNlLnggKyBzb3VyY2Uud2lkdGggKyA4MCArIHNoYXBlLndpZHRoIC8gMixcbiAgICAgICAgICB5OiBzb3VyY2UueSArIHNvdXJjZS5oZWlnaHQgLyAyXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9LCB0cnVlKTtcbn1cblxuaW5oZXJpdHMoQXBwZW5kQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbkFwcGVuZEJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdlbGVtZW50RmFjdG9yeScsXG4gICdicG1uUnVsZXMnXG5dOyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XHJcblxyXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcclxuXHJcbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xyXG5cclxuaW1wb3J0IHtcclxuICBmaWx0ZXIsXHJcbiAgZm9yRWFjaFxyXG59IGZyb20gJ21pbi1kYXNoJztcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBc3NvY2lhdGlvbkJlaGF2aW9yKGluamVjdG9yLCBtb2RlbGluZykge1xyXG4gIGluamVjdG9yLmludm9rZShDb21tYW5kSW50ZXJjZXB0b3IsIHRoaXMpO1xyXG5cclxuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5tb3ZlJywgZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgdmFyIG5ld1BhcmVudCA9IGNvbnRleHQubmV3UGFyZW50LFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcclxuXHJcbiAgICB2YXIgYXNzb2NpYXRpb25zID0gZmlsdGVyKHNoYXBlLmluY29taW5nLmNvbmNhdChzaGFwZS5vdXRnb2luZyksIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIGlzKGNvbm5lY3Rpb24sICdicG1uOkFzc29jaWF0aW9uJyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmb3JFYWNoKGFzc29jaWF0aW9ucywgZnVuY3Rpb24oYXNzb2NpYXRpb24pIHtcclxuICAgICAgbW9kZWxpbmcubW92ZUNvbm5lY3Rpb24oYXNzb2NpYXRpb24sIHsgeDogMCwgeTogMCB9LCBuZXdQYXJlbnQpO1xyXG4gICAgfSk7XHJcbiAgfSwgdHJ1ZSk7XHJcbn1cclxuXHJcbmluaGVyaXRzKEFzc29jaWF0aW9uQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XHJcblxyXG5Bc3NvY2lhdGlvbkJlaGF2aW9yLiRpbmplY3QgPSBbXHJcbiAgJ2luamVjdG9yJyxcclxuICAnbW9kZWxpbmcnXHJcbl07IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGdldEJ1c2luZXNzT2JqZWN0IH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQgeyBpc0FueSB9IGZyb20gJy4uL3V0aWwvTW9kZWxpbmdVdGlsJztcblxuaW1wb3J0IHsgaXNMYWJlbCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTGFiZWxVdGlsJztcblxudmFyIExPV19QUklPUklUWSA9IDUwMDtcblxuXG4vKipcbiAqIFJlcGxhY2UgaW50ZXJtZWRpYXRlIGV2ZW50IHdpdGggYm91bmRhcnkgZXZlbnQgd2hlbiBjcmVhdGluZyBvciBtb3ZpbmcgcmVzdWx0cyBpbiBhdHRhY2hlZCBldmVudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQXR0YWNoRXZlbnRCZWhhdmlvcihicG1uUmVwbGFjZSwgaW5qZWN0b3IpIHtcbiAgaW5qZWN0b3IuaW52b2tlKENvbW1hbmRJbnRlcmNlcHRvciwgdGhpcyk7XG5cbiAgdGhpcy5fYnBtblJlcGxhY2UgPSBicG1uUmVwbGFjZTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ2VsZW1lbnRzLmNyZWF0ZScsIExPV19QUklPUklUWSwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHM7XG5cbiAgICBlbGVtZW50cyA9IGVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbihzaGFwZSkge1xuICAgICAgdmFyIGhvc3QgPSBzaGFwZS5ob3N0O1xuXG4gICAgICByZXR1cm4gc2hvdWxkUmVwbGFjZShzaGFwZSwgaG9zdCk7XG4gICAgfSk7XG5cbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWxlbWVudHMubWFwKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpO1xuICAgIH0pLmZvckVhY2goZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgIHZhciBob3N0ID0gZWxlbWVudHNbIGluZGV4IF07XG5cbiAgICAgIGNvbnRleHQuZWxlbWVudHNbIGluZGV4IF0gPSBzZWxmLnJlcGxhY2VTaGFwZShlbGVtZW50c1sgaW5kZXggXSwgaG9zdCk7XG4gICAgfSk7XG4gIH0sIHRydWUpO1xuXG5cbiAgdGhpcy5wcmVFeGVjdXRlKCdlbGVtZW50cy5tb3ZlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzLFxuICAgICAgICBob3N0ID0gY29udGV4dC5uZXdIb3N0O1xuXG4gICAgaWYgKHNoYXBlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc2hhcGUgPSBzaGFwZXNbMF07XG5cbiAgICBpZiAoc2hvdWxkUmVwbGFjZShzaGFwZSwgaG9zdCkpIHtcbiAgICAgIGNvbnRleHQuc2hhcGVzID0gWyBzZWxmLnJlcGxhY2VTaGFwZShzaGFwZSwgaG9zdCkgXTtcbiAgICB9XG4gIH0sIHRydWUpO1xufVxuXG5BdHRhY2hFdmVudEJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdicG1uUmVwbGFjZScsXG4gICdpbmplY3Rvcidcbl07XG5cbmluaGVyaXRzKEF0dGFjaEV2ZW50QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbkF0dGFjaEV2ZW50QmVoYXZpb3IucHJvdG90eXBlLnJlcGxhY2VTaGFwZSA9IGZ1bmN0aW9uKHNoYXBlLCBob3N0KSB7XG4gIHZhciBldmVudERlZmluaXRpb24gPSBnZXRFdmVudERlZmluaXRpb24oc2hhcGUpO1xuXG4gIHZhciBib3VuZGFyeUV2ZW50ID0ge1xuICAgIHR5cGU6ICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgIGhvc3Q6IGhvc3RcbiAgfTtcblxuICBpZiAoZXZlbnREZWZpbml0aW9uKSB7XG4gICAgYm91bmRhcnlFdmVudC5ldmVudERlZmluaXRpb25UeXBlID0gZXZlbnREZWZpbml0aW9uLiR0eXBlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2JwbW5SZXBsYWNlLnJlcGxhY2VFbGVtZW50KHNoYXBlLCBib3VuZGFyeUV2ZW50LCB7IGxheW91dENvbm5lY3Rpb246IGZhbHNlIH0pO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0RXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXG4gICAgICBldmVudERlZmluaXRpb25zID0gYnVzaW5lc3NPYmplY3QuZXZlbnREZWZpbml0aW9ucztcblxuICByZXR1cm4gZXZlbnREZWZpbml0aW9ucyAmJiBldmVudERlZmluaXRpb25zWzBdO1xufVxuXG5mdW5jdGlvbiBzaG91bGRSZXBsYWNlKHNoYXBlLCBob3N0KSB7XG4gIHJldHVybiAhaXNMYWJlbChzaGFwZSkgJiZcbiAgICBpc0FueShzaGFwZSwgWyAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JywgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcgXSkgJiYgISFob3N0O1xufVxuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBmaWx0ZXIsXG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbi8qKlxuICogQlBNTiBzcGVjaWZpYyBib3VuZGFyeSBldmVudCBiZWhhdmlvclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCb3VuZGFyeUV2ZW50QmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIGZ1bmN0aW9uIGdldEJvdW5kYXJ5RXZlbnRzKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZmlsdGVyKGVsZW1lbnQuYXR0YWNoZXJzLCBmdW5jdGlvbihhdHRhY2hlcikge1xuICAgICAgcmV0dXJuIGlzKGF0dGFjaGVyLCAnYnBtbjpCb3VuZGFyeUV2ZW50Jyk7XG4gICAgfSk7XG4gIH1cblxuICAvLyByZW1vdmUgYWZ0ZXIgY29ubmVjdGluZyB0byBldmVudC1iYXNlZCBnYXRld2F5XG4gIHRoaXMucG9zdEV4ZWN1dGUoJ2Nvbm5lY3Rpb24uY3JlYXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgc291cmNlID0gZXZlbnQuY29udGV4dC5zb3VyY2UsXG4gICAgICAgIHRhcmdldCA9IGV2ZW50LmNvbnRleHQudGFyZ2V0LFxuICAgICAgICBib3VuZGFyeUV2ZW50cyA9IGdldEJvdW5kYXJ5RXZlbnRzKHRhcmdldCk7XG5cbiAgICBpZiAoXG4gICAgICBpcyhzb3VyY2UsICdicG1uOkV2ZW50QmFzZWRHYXRld2F5JykgJiZcbiAgICAgIGlzKHRhcmdldCwgJ2JwbW46UmVjZWl2ZVRhc2snKSAmJlxuICAgICAgYm91bmRhcnlFdmVudHMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgbW9kZWxpbmcucmVtb3ZlRWxlbWVudHMoYm91bmRhcnlFdmVudHMpO1xuICAgIH1cblxuICB9KTtcblxuICAvLyByZW1vdmUgYWZ0ZXIgcmVwbGFjaW5nIGNvbm5lY3RlZCBnYXRld2F5IHdpdGggZXZlbnQtYmFzZWQgZ2F0ZXdheVxuICB0aGlzLnBvc3RFeGVjdXRlKCdjb25uZWN0aW9uLnJlY29ubmVjdCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIG9sZFNvdXJjZSA9IGV2ZW50LmNvbnRleHQub2xkU291cmNlLFxuICAgICAgICBuZXdTb3VyY2UgPSBldmVudC5jb250ZXh0Lm5ld1NvdXJjZTtcblxuICAgIGlmIChpcyhvbGRTb3VyY2UsICdicG1uOkdhdGV3YXknKSAmJlxuICAgICAgICBpcyhuZXdTb3VyY2UsICdicG1uOkV2ZW50QmFzZWRHYXRld2F5JykpIHtcbiAgICAgIGZvckVhY2gobmV3U291cmNlLm91dGdvaW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSBjb25uZWN0aW9uLnRhcmdldCxcbiAgICAgICAgICAgIGF0dGFjaGVkYm91bmRhcnlFdmVudHMgPSBnZXRCb3VuZGFyeUV2ZW50cyh0YXJnZXQpO1xuXG4gICAgICAgIGlmIChpcyh0YXJnZXQsICdicG1uOlJlY2VpdmVUYXNrJykgJiZcbiAgICAgICAgICAgIGF0dGFjaGVkYm91bmRhcnlFdmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIG1vZGVsaW5nLnJlbW92ZUVsZW1lbnRzKGF0dGFjaGVkYm91bmRhcnlFdmVudHMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5Cb3VuZGFyeUV2ZW50QmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuaW5oZXJpdHMoQm91bmRhcnlFdmVudEJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBnZXRQYXJlbnQgfSBmcm9tICcuLi91dGlsL01vZGVsaW5nVXRpbCc7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3JlYXRlQmVoYXZpb3IoaW5qZWN0b3IpIHtcbiAgaW5qZWN0b3IuaW52b2tlKENvbW1hbmRJbnRlcmNlcHRvciwgdGhpcyk7XG5cbiAgdGhpcy5wcmVFeGVjdXRlKCdzaGFwZS5jcmVhdGUnLCAxNTAwLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgcGFyZW50ID0gY29udGV4dC5wYXJlbnQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChpcyhwYXJlbnQsICdicG1uOkxhbmUnKSAmJiAhaXMoc2hhcGUsICdicG1uOkxhbmUnKSkge1xuICAgICAgY29udGV4dC5wYXJlbnQgPSBnZXRQYXJlbnQocGFyZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpO1xuICAgIH1cbiAgfSk7XG5cbn1cblxuXG5DcmVhdGVCZWhhdmlvci4kaW5qZWN0ID0gWyAnaW5qZWN0b3InIF07XG5cbmluaGVyaXRzKENyZWF0ZUJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpOyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuXG4vKipcbiAqIEJQTU4gc3BlY2lmaWMgY3JlYXRlIGRhdGEgb2JqZWN0IGJlaGF2aW9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENyZWF0ZURhdGFPYmplY3RCZWhhdmlvcihldmVudEJ1cywgYnBtbkZhY3RvcnksIG1vZGRsZSkge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLnByZUV4ZWN1dGUoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScpICYmIHNoYXBlLnR5cGUgIT09ICdsYWJlbCcpIHtcblxuICAgICAgLy8gY3JlYXRlIGEgRGF0YU9iamVjdCBldmVyeSB0aW1lIGEgRGF0YU9iamVjdFJlZmVyZW5jZSBpcyBjcmVhdGVkXG4gICAgICB2YXIgZGF0YU9iamVjdCA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpEYXRhT2JqZWN0Jyk7XG5cbiAgICAgIC8vIHNldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBEYXRhT2JqZWN0XG4gICAgICBzaGFwZS5idXNpbmVzc09iamVjdC5kYXRhT2JqZWN0UmVmID0gZGF0YU9iamVjdDtcbiAgICB9XG4gIH0pO1xuXG59XG5cbkNyZWF0ZURhdGFPYmplY3RCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnYnBtbkZhY3RvcnknLFxuICAnbW9kZGxlJ1xuXTtcblxuaW5oZXJpdHMoQ3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpOyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHsgaXNMYWJlbCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTGFiZWxVdGlsJztcblxuaW1wb3J0IHsgZ2V0QkJveCB9IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvRWxlbWVudHMnO1xuXG5pbXBvcnQge1xuICBhc3NpZ24sXG4gIGZpbmRcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBhc1RSQkwgfSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbnZhciBIT1JJWk9OVEFMX1BBUlRJQ0lQQU5UX1BBRERJTkcgPSAyMCxcbiAgICBWRVJUSUNBTF9QQVJUSUNJUEFOVF9QQURESU5HID0gMjA7XG5cbmV4cG9ydCB2YXIgUEFSVElDSVBBTlRfQk9SREVSX1dJRFRIID0gMzA7XG5cbnZhciBISUdIX1BSSU9SSVRZID0gMjAwMDtcblxuXG4vKipcbiAqIEJQTU4tc3BlY2lmaWMgYmVoYXZpb3IgZm9yIGNyZWF0aW5nIHBhcnRpY2lwYW50cy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvcihjYW52YXMsIGV2ZW50QnVzLCBtb2RlbGluZykge1xuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgLy8gZml0IHBhcnRpY2lwYW50XG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnY3JlYXRlLnN0YXJ0JyxcbiAgICAnc2hhcGUubW92ZS5zdGFydCdcbiAgXSwgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgcm9vdEVsZW1lbnQgPSBjYW52YXMuZ2V0Um9vdEVsZW1lbnQoKTtcblxuICAgIGlmICghaXMoc2hhcGUsICdicG1uOlBhcnRpY2lwYW50JykgfHxcbiAgICAgICFpcyhyb290RWxlbWVudCwgJ2JwbW46UHJvY2VzcycpIHx8XG4gICAgICAhcm9vdEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWdub3JlIGNvbm5lY3Rpb25zLCBncm91cHMgYW5kIGxhYmVsc1xuICAgIHZhciBjaGlsZHJlbiA9IHJvb3RFbGVtZW50LmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICByZXR1cm4gIWlzKGVsZW1lbnQsICdicG1uOkdyb3VwJykgJiZcbiAgICAgICAgIWlzTGFiZWwoZWxlbWVudCkgJiZcbiAgICAgICAgIWlzQ29ubmVjdGlvbihlbGVtZW50KTtcbiAgICB9KTtcblxuICAgIC8vIGVuc3VyZSBmb3IgYXZhaWxhYmxlIGNoaWxkcmVuIHRvIGNhbGN1bGF0ZSBib3VuZHNcbiAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjaGlsZHJlbkJCb3ggPSBnZXRCQm94KGNoaWxkcmVuKTtcblxuICAgIHZhciBwYXJ0aWNpcGFudEJvdW5kcyA9IGdldFBhcnRpY2lwYW50Qm91bmRzKHNoYXBlLCBjaGlsZHJlbkJCb3gpO1xuXG4gICAgLy8gYXNzaWduIHdpZHRoIGFuZCBoZWlnaHRcbiAgICBhc3NpZ24oc2hhcGUsIHBhcnRpY2lwYW50Qm91bmRzKTtcblxuICAgIC8vIGFzc2lnbiBjcmVhdGUgY29uc3RyYWludHNcbiAgICBjb250ZXh0LmNyZWF0ZUNvbnN0cmFpbnRzID0gZ2V0UGFydGljaXBhbnRDcmVhdGVDb25zdHJhaW50cyhzaGFwZSwgY2hpbGRyZW5CQm94KTtcbiAgfSk7XG5cbiAgLy8gZm9yY2UgaG92ZXJpbmcgcHJvY2VzcyB3aGVuIGNyZWF0aW5nIGZpcnN0IHBhcnRpY2lwYW50XG4gIGV2ZW50QnVzLm9uKCdjcmVhdGUuc3RhcnQnLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpLFxuICAgICAgICByb290RWxlbWVudEdmeCA9IGNhbnZhcy5nZXRHcmFwaGljcyhyb290RWxlbWVudCk7XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVIb3ZlcmluZ1Byb2Nlc3MoZXZlbnQpIHtcbiAgICAgIGV2ZW50LmVsZW1lbnQgPSByb290RWxlbWVudDtcbiAgICAgIGV2ZW50LmdmeCA9IHJvb3RFbGVtZW50R2Z4O1xuICAgIH1cblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBpcyhyb290RWxlbWVudCwgJ2JwbW46UHJvY2VzcycpKSB7XG4gICAgICBldmVudEJ1cy5vbignZWxlbWVudC5ob3ZlcicsIEhJR0hfUFJJT1JJVFksIGVuc3VyZUhvdmVyaW5nUHJvY2Vzcyk7XG5cbiAgICAgIGV2ZW50QnVzLm9uY2UoJ2NyZWF0ZS5jbGVhbnVwJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGV2ZW50QnVzLm9mZignZWxlbWVudC5ob3ZlcicsIGVuc3VyZUhvdmVyaW5nUHJvY2Vzcyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGVuc3VyZUNvbGxhYm9yYXRpb24oY29udGV4dCkge1xuICAgIHZhciBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcbiAgICAgICAgY29sbGFib3JhdGlvbjtcblxuICAgIHZhciByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpO1xuXG4gICAgaWYgKGlzKHJvb3RFbGVtZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJykpIHtcbiAgICAgIGNvbGxhYm9yYXRpb24gPSByb290RWxlbWVudDtcbiAgICB9IGVsc2Uge1xuXG4gICAgICAvLyB1cGRhdGUgcm9vdCBlbGVtZW50IGJ5IG1ha2luZyBjb2xsYWJvcmF0aW9uXG4gICAgICBjb2xsYWJvcmF0aW9uID0gbW9kZWxpbmcubWFrZUNvbGxhYm9yYXRpb24oKTtcblxuICAgICAgLy8gcmUtdXNlIHByb2Nlc3Mgd2hlbiBjcmVhdGluZyBmaXJzdCBwYXJ0aWNpcGFudFxuICAgICAgY29udGV4dC5wcm9jZXNzID0gcGFyZW50O1xuICAgIH1cblxuICAgIGNvbnRleHQucGFyZW50ID0gY29sbGFib3JhdGlvbjtcbiAgfVxuXG4gIC8vIHR1cm4gcHJvY2VzcyBpbnRvIGNvbGxhYm9yYXRpb24gYmVmb3JlIGFkZGluZyBwYXJ0aWNpcGFudFxuICB0aGlzLnByZUV4ZWN1dGUoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgcGFyZW50ID0gY29udGV4dC5wYXJlbnQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBpcyhwYXJlbnQsICdicG1uOlByb2Nlc3MnKSkge1xuICAgICAgZW5zdXJlQ29sbGFib3JhdGlvbihjb250ZXh0KTtcbiAgICB9XG4gIH0sIHRydWUpO1xuXG4gIHRoaXMuZXhlY3V0ZSgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBwcm9jZXNzID0gY29udGV4dC5wcm9jZXNzLFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgY29udGV4dC5vbGRQcm9jZXNzUmVmID0gc2hhcGUuYnVzaW5lc3NPYmplY3QucHJvY2Vzc1JlZjtcblxuICAgICAgLy8gcmUtdXNlIHByb2Nlc3Mgd2hlbiBjcmVhdGluZyBmaXJzdCBwYXJ0aWNpcGFudFxuICAgICAgc2hhcGUuYnVzaW5lc3NPYmplY3QucHJvY2Vzc1JlZiA9IHByb2Nlc3MuYnVzaW5lc3NPYmplY3Q7XG4gICAgfVxuICB9LCB0cnVlKTtcblxuICB0aGlzLnJldmVydCgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBwcm9jZXNzID0gY29udGV4dC5wcm9jZXNzLFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAocHJvY2Vzcykge1xuXG4gICAgICAvLyByZS11c2UgcHJvY2VzcyB3aGVuIGNyZWF0aW5nIGZpcnN0IHBhcnRpY2lwYW50XG4gICAgICBzaGFwZS5idXNpbmVzc09iamVjdC5wcm9jZXNzUmVmID0gY29udGV4dC5vbGRQcm9jZXNzUmVmO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5wb3N0RXhlY3V0ZSgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBwcm9jZXNzID0gY29udGV4dC5wcm9jZXNzLFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAocHJvY2Vzcykge1xuXG4gICAgICAvLyBtb3ZlIGNoaWxkcmVuIGZyb20gcHJvY2VzcyB0byBwYXJ0aWNpcGFudFxuICAgICAgdmFyIHByb2Nlc3NDaGlsZHJlbiA9IHByb2Nlc3MuY2hpbGRyZW4uc2xpY2UoKTtcblxuICAgICAgbW9kZWxpbmcubW92ZUVsZW1lbnRzKHByb2Nlc3NDaGlsZHJlbiwgeyB4OiAwLCB5OiAwIH0sIHNoYXBlKTtcbiAgICB9XG5cbiAgfSwgdHJ1ZSk7XG5cbiAgLy8gdHVybiBwcm9jZXNzIGludG8gY29sbGFib3JhdGlvbiB3aGVuIGNyZWF0aW5nIHBhcnRpY2lwYW50c1xuICB0aGlzLnByZUV4ZWN1dGUoJ2VsZW1lbnRzLmNyZWF0ZScsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzLFxuICAgICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcbiAgICAgICAgcGFydGljaXBhbnQ7XG5cbiAgICB2YXIgaGFzUGFydGljaXBhbnRzID0gZmluZFBhcnRpY2lwYW50KGVsZW1lbnRzKTtcblxuICAgIGlmIChoYXNQYXJ0aWNpcGFudHMgJiYgaXMocGFyZW50LCAnYnBtbjpQcm9jZXNzJykpIHtcbiAgICAgIGVuc3VyZUNvbGxhYm9yYXRpb24oY29udGV4dCk7XG5cbiAgICAgIHBhcnRpY2lwYW50ID0gZmluZFBhcnRpY2lwYW50KGVsZW1lbnRzKTtcblxuICAgICAgY29udGV4dC5vbGRQcm9jZXNzUmVmID0gcGFydGljaXBhbnQuYnVzaW5lc3NPYmplY3QucHJvY2Vzc1JlZjtcblxuICAgICAgLy8gcmUtdXNlIHByb2Nlc3Mgd2hlbiBjcmVhdGluZyBmaXJzdCBwYXJ0aWNpcGFudFxuICAgICAgcGFydGljaXBhbnQuYnVzaW5lc3NPYmplY3QucHJvY2Vzc1JlZiA9IHBhcmVudC5idXNpbmVzc09iamVjdDtcbiAgICB9XG4gIH0sIHRydWUpO1xuXG4gIHRoaXMucmV2ZXJ0KCdlbGVtZW50cy5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cyxcbiAgICAgICAgcHJvY2VzcyA9IGNvbnRleHQucHJvY2VzcyxcbiAgICAgICAgcGFydGljaXBhbnQ7XG5cbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgcGFydGljaXBhbnQgPSBmaW5kUGFydGljaXBhbnQoZWxlbWVudHMpO1xuXG4gICAgICAvLyByZS11c2UgcHJvY2VzcyB3aGVuIGNyZWF0aW5nIGZpcnN0IHBhcnRpY2lwYW50XG4gICAgICBwYXJ0aWNpcGFudC5idXNpbmVzc09iamVjdC5wcm9jZXNzUmVmID0gY29udGV4dC5vbGRQcm9jZXNzUmVmO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5wb3N0RXhlY3V0ZSgnZWxlbWVudHMuY3JlYXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHMsXG4gICAgICAgIHByb2Nlc3MgPSBjb250ZXh0LnByb2Nlc3MsXG4gICAgICAgIHBhcnRpY2lwYW50O1xuXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIHBhcnRpY2lwYW50ID0gZmluZFBhcnRpY2lwYW50KGVsZW1lbnRzKTtcblxuICAgICAgLy8gbW92ZSBjaGlsZHJlbiBmcm9tIHByb2Nlc3MgdG8gZmlyc3QgcGFydGljaXBhbnRcbiAgICAgIHZhciBwcm9jZXNzQ2hpbGRyZW4gPSBwcm9jZXNzLmNoaWxkcmVuLnNsaWNlKCk7XG5cbiAgICAgIG1vZGVsaW5nLm1vdmVFbGVtZW50cyhwcm9jZXNzQ2hpbGRyZW4sIHsgeDogMCwgeTogMCB9LCBwYXJ0aWNpcGFudCk7XG4gICAgfVxuXG4gIH0sIHRydWUpO1xuXG59XG5cbkNyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2NhbnZhcycsXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZydcbl07XG5cbmluaGVyaXRzKENyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRQYXJ0aWNpcGFudEJvdW5kcyhzaGFwZSwgY2hpbGRyZW5CQm94KSB7XG4gIGNoaWxkcmVuQkJveCA9IHtcbiAgICB3aWR0aDogY2hpbGRyZW5CQm94LndpZHRoICsgSE9SSVpPTlRBTF9QQVJUSUNJUEFOVF9QQURESU5HICogMiArIFBBUlRJQ0lQQU5UX0JPUkRFUl9XSURUSCxcbiAgICBoZWlnaHQ6IGNoaWxkcmVuQkJveC5oZWlnaHQgKyBWRVJUSUNBTF9QQVJUSUNJUEFOVF9QQURESU5HICogMlxuICB9O1xuXG4gIHZhciB3aWR0aCA9IE1hdGgubWF4KHNoYXBlLndpZHRoLCBjaGlsZHJlbkJCb3gud2lkdGgpLFxuICAgICAgaGVpZ2h0ID0gTWF0aC5tYXgoc2hhcGUuaGVpZ2h0LCBjaGlsZHJlbkJCb3guaGVpZ2h0KTtcblxuICByZXR1cm4ge1xuICAgIHg6IC13aWR0aCAvIDIsXG4gICAgeTogLWhlaWdodCAvIDIsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFBhcnRpY2lwYW50Q3JlYXRlQ29uc3RyYWludHMoc2hhcGUsIGNoaWxkcmVuQkJveCkge1xuICBjaGlsZHJlbkJCb3ggPSBhc1RSQkwoY2hpbGRyZW5CQm94KTtcblxuICByZXR1cm4ge1xuICAgIGJvdHRvbTogY2hpbGRyZW5CQm94LnRvcCArIHNoYXBlLmhlaWdodCAvIDIgLSBWRVJUSUNBTF9QQVJUSUNJUEFOVF9QQURESU5HLFxuICAgIGxlZnQ6IGNoaWxkcmVuQkJveC5yaWdodCAtIHNoYXBlLndpZHRoIC8gMiArIEhPUklaT05UQUxfUEFSVElDSVBBTlRfUEFERElORyxcbiAgICB0b3A6IGNoaWxkcmVuQkJveC5ib3R0b20gLSBzaGFwZS5oZWlnaHQgLyAyICsgVkVSVElDQUxfUEFSVElDSVBBTlRfUEFERElORyxcbiAgICByaWdodDogY2hpbGRyZW5CQm94LmxlZnQgKyBzaGFwZS53aWR0aCAvIDIgLSBIT1JJWk9OVEFMX1BBUlRJQ0lQQU5UX1BBRERJTkcgLSBQQVJUSUNJUEFOVF9CT1JERVJfV0lEVEhcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNDb25uZWN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuICEhZWxlbWVudC53YXlwb2ludHM7XG59XG5cbmZ1bmN0aW9uIGZpbmRQYXJ0aWNpcGFudChlbGVtZW50cykge1xuICByZXR1cm4gZmluZChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpO1xuICB9KTtcbn0iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHtcbiAgYWRkIGFzIGNvbGxlY3Rpb25BZGQsXG4gIHJlbW92ZSBhcyBjb2xsZWN0aW9uUmVtb3ZlXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvQ29sbGVjdGlvbnMnO1xuXG5pbXBvcnQge1xuICBmaW5kXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgaXNcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG52YXIgVEFSR0VUX1JFRl9QTEFDRUhPTERFUl9OQU1FID0gJ19fdGFyZ2V0UmVmX3BsYWNlaG9sZGVyJztcblxuXG4vKipcbiAqIFRoaXMgYmVoYXZpb3IgbWFrZXMgc3VyZSB3ZSBhbHdheXMgc2V0IGEgZmFrZVxuICogRGF0YUlucHV0QXNzb2NpYXRpb24jdGFyZ2V0UmVmIGFzIGRlbWFuZGVkIGJ5IHRoZSBCUE1OIDIuMFxuICogWFNEIHNjaGVtYS5cbiAqXG4gKiBUaGUgcmVmZXJlbmNlIGlzIHNldCB0byBhIGJwbW46UHJvcGVydHl7IG5hbWU6ICdfX3RhcmdldFJlZl9wbGFjZWhvbGRlcicgfVxuICogd2hpY2ggaXMgY3JlYXRlZCBvbiB0aGUgZmx5IGFuZCBjbGVhbmVkIHVwIGFmdGVyd2FyZHMgaWYgbm90IG5lZWRlZFxuICogYW55bW9yZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGF0YUlucHV0QXNzb2NpYXRpb25CZWhhdmlvcihldmVudEJ1cywgYnBtbkZhY3RvcnkpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cblxuICB0aGlzLmV4ZWN1dGVkKFtcbiAgICAnY29ubmVjdGlvbi5jcmVhdGUnLFxuICAgICdjb25uZWN0aW9uLmRlbGV0ZScsXG4gICAgJ2Nvbm5lY3Rpb24ubW92ZScsXG4gICAgJ2Nvbm5lY3Rpb24ucmVjb25uZWN0J1xuICBdLCBpZkRhdGFJbnB1dEFzc29jaWF0aW9uKGZpeFRhcmdldFJlZikpO1xuXG4gIHRoaXMucmV2ZXJ0ZWQoW1xuICAgICdjb25uZWN0aW9uLmNyZWF0ZScsXG4gICAgJ2Nvbm5lY3Rpb24uZGVsZXRlJyxcbiAgICAnY29ubmVjdGlvbi5tb3ZlJyxcbiAgICAnY29ubmVjdGlvbi5yZWNvbm5lY3QnXG4gIF0sIGlmRGF0YUlucHV0QXNzb2NpYXRpb24oZml4VGFyZ2V0UmVmKSk7XG5cblxuICBmdW5jdGlvbiB1c2VzVGFyZ2V0UmVmKGVsZW1lbnQsIHRhcmdldFJlZiwgcmVtb3ZlZENvbm5lY3Rpb24pIHtcblxuICAgIHZhciBpbnB1dEFzc29jaWF0aW9ucyA9IGVsZW1lbnQuZ2V0KCdkYXRhSW5wdXRBc3NvY2lhdGlvbnMnKTtcblxuICAgIHJldHVybiBmaW5kKGlucHV0QXNzb2NpYXRpb25zLCBmdW5jdGlvbihhc3NvY2lhdGlvbikge1xuICAgICAgcmV0dXJuIGFzc29jaWF0aW9uICE9PSByZW1vdmVkQ29ubmVjdGlvbiAmJlxuICAgICAgICAgICAgIGFzc29jaWF0aW9uLnRhcmdldFJlZiA9PT0gdGFyZ2V0UmVmO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VGFyZ2V0UmVmKGVsZW1lbnQsIGNyZWF0ZSkge1xuXG4gICAgdmFyIHByb3BlcnRpZXMgPSBlbGVtZW50LmdldCgncHJvcGVydGllcycpO1xuXG4gICAgdmFyIHRhcmdldFJlZlByb3AgPSBmaW5kKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHApIHtcbiAgICAgIHJldHVybiBwLm5hbWUgPT09IFRBUkdFVF9SRUZfUExBQ0VIT0xERVJfTkFNRTtcbiAgICB9KTtcblxuICAgIGlmICghdGFyZ2V0UmVmUHJvcCAmJiBjcmVhdGUpIHtcbiAgICAgIHRhcmdldFJlZlByb3AgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46UHJvcGVydHknLCB7XG4gICAgICAgIG5hbWU6IFRBUkdFVF9SRUZfUExBQ0VIT0xERVJfTkFNRVxuICAgICAgfSk7XG5cbiAgICAgIGNvbGxlY3Rpb25BZGQocHJvcGVydGllcywgdGFyZ2V0UmVmUHJvcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldFJlZlByb3A7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhbnVwVGFyZ2V0UmVmKGVsZW1lbnQsIGNvbm5lY3Rpb24pIHtcblxuICAgIHZhciB0YXJnZXRSZWZQcm9wID0gZ2V0VGFyZ2V0UmVmKGVsZW1lbnQpO1xuXG4gICAgaWYgKCF0YXJnZXRSZWZQcm9wKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF1c2VzVGFyZ2V0UmVmKGVsZW1lbnQsIHRhcmdldFJlZlByb3AsIGNvbm5lY3Rpb24pKSB7XG4gICAgICBjb2xsZWN0aW9uUmVtb3ZlKGVsZW1lbnQuZ2V0KCdwcm9wZXJ0aWVzJyksIHRhcmdldFJlZlByb3ApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHN1cmUgdGFyZ2V0UmVmIGlzIHNldCB0byBhIHZhbGlkIHByb3BlcnR5IG9yXG4gICAqIGBudWxsYCBpZiB0aGUgY29ubmVjdGlvbiBpcyBkZXRhY2hlZC5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICovXG4gIGZ1bmN0aW9uIGZpeFRhcmdldFJlZihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBjb25uZWN0aW9uQm8gPSBjb25uZWN0aW9uLmJ1c2luZXNzT2JqZWN0LFxuICAgICAgICB0YXJnZXQgPSBjb25uZWN0aW9uLnRhcmdldCxcbiAgICAgICAgdGFyZ2V0Qm8gPSB0YXJnZXQgJiYgdGFyZ2V0LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgICBuZXdUYXJnZXQgPSBjb250ZXh0Lm5ld1RhcmdldCxcbiAgICAgICAgbmV3VGFyZ2V0Qm8gPSBuZXdUYXJnZXQgJiYgbmV3VGFyZ2V0LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgICBvbGRUYXJnZXQgPSBjb250ZXh0Lm9sZFRhcmdldCB8fCBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgb2xkVGFyZ2V0Qm8gPSBvbGRUYXJnZXQgJiYgb2xkVGFyZ2V0LmJ1c2luZXNzT2JqZWN0O1xuXG4gICAgdmFyIGRhdGFBc3NvY2lhdGlvbiA9IGNvbm5lY3Rpb24uYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHRhcmdldFJlZlByb3A7XG5cbiAgICBpZiAob2xkVGFyZ2V0Qm8gJiYgb2xkVGFyZ2V0Qm8gIT09IHRhcmdldEJvKSB7XG4gICAgICBjbGVhbnVwVGFyZ2V0UmVmKG9sZFRhcmdldEJvLCBjb25uZWN0aW9uQm8pO1xuICAgIH1cblxuICAgIGlmIChuZXdUYXJnZXRCbyAmJiBuZXdUYXJnZXRCbyAhPT0gdGFyZ2V0Qm8pIHtcbiAgICAgIGNsZWFudXBUYXJnZXRSZWYobmV3VGFyZ2V0Qm8sIGNvbm5lY3Rpb25Cbyk7XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldEJvKSB7XG4gICAgICB0YXJnZXRSZWZQcm9wID0gZ2V0VGFyZ2V0UmVmKHRhcmdldEJvLCB0cnVlKTtcbiAgICAgIGRhdGFBc3NvY2lhdGlvbi50YXJnZXRSZWYgPSB0YXJnZXRSZWZQcm9wO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhQXNzb2NpYXRpb24udGFyZ2V0UmVmID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuRGF0YUlucHV0QXNzb2NpYXRpb25CZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnYnBtbkZhY3RvcnknXG5dO1xuXG5pbmhlcml0cyhEYXRhSW5wdXRBc3NvY2lhdGlvbkJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5cbi8qKlxuICogT25seSBjYWxsIHRoZSBnaXZlbiBmdW5jdGlvbiB3aGVuIHRoZSBldmVudFxuICogdG91Y2hlcyBhIGJwbW46RGF0YUlucHV0QXNzb2NpYXRpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBpZkRhdGFJbnB1dEFzc29jaWF0aW9uKGZuKSB7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uO1xuXG4gICAgaWYgKGlzKGNvbm5lY3Rpb24sICdicG1uOkRhdGFJbnB1dEFzc29jaWF0aW9uJykpIHtcbiAgICAgIHJldHVybiBmbihldmVudCk7XG4gICAgfVxuICB9O1xufSIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XHJcblxyXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcclxuXHJcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNBbnkgfSBmcm9tICcuLi91dGlsL01vZGVsaW5nVXRpbCc7XHJcblxyXG5pbXBvcnQgVXBkYXRlU2VtYW50aWNQYXJlbnRIYW5kbGVyIGZyb20gJy4uL2NtZC9VcGRhdGVTZW1hbnRpY1BhcmVudEhhbmRsZXInO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBCUE1OIHNwZWNpZmljIGRhdGEgc3RvcmUgYmVoYXZpb3JcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERhdGFTdG9yZUJlaGF2aW9yKFxyXG4gICAgY2FudmFzLCBjb21tYW5kU3RhY2ssIGVsZW1lbnRSZWdpc3RyeSxcclxuICAgIGV2ZW50QnVzKSB7XHJcblxyXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcclxuXHJcbiAgY29tbWFuZFN0YWNrLnJlZ2lzdGVySGFuZGxlcignZGF0YVN0b3JlLnVwZGF0ZUNvbnRhaW5tZW50JywgVXBkYXRlU2VtYW50aWNQYXJlbnRIYW5kbGVyKTtcclxuXHJcbiAgZnVuY3Rpb24gZ2V0Rmlyc3RQYXJ0aWNpcGFudCgpIHtcclxuICAgIHJldHVybiBlbGVtZW50UmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50Jyk7XHJcbiAgICB9KVswXTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldERhdGFTdG9yZXMoZWxlbWVudCkge1xyXG4gICAgcmV0dXJuIGVsZW1lbnQuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGNoaWxkKSB7XHJcbiAgICAgIHJldHVybiBpcyhjaGlsZCwgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJykgJiYgIWNoaWxkLmxhYmVsVGFyZ2V0O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1cGRhdGVEYXRhU3RvcmVQYXJlbnQoZGF0YVN0b3JlLCBuZXdEYXRhU3RvcmVQYXJlbnQpIHtcclxuICAgIHZhciBkYXRhU3RvcmVCbyA9IGRhdGFTdG9yZS5idXNpbmVzc09iamVjdCB8fCBkYXRhU3RvcmU7XHJcblxyXG4gICAgbmV3RGF0YVN0b3JlUGFyZW50ID0gbmV3RGF0YVN0b3JlUGFyZW50IHx8IGdldEZpcnN0UGFydGljaXBhbnQoKTtcclxuXHJcbiAgICBpZiAobmV3RGF0YVN0b3JlUGFyZW50KSB7XHJcbiAgICAgIHZhciBuZXdEYXRhU3RvcmVQYXJlbnRCbyA9IG5ld0RhdGFTdG9yZVBhcmVudC5idXNpbmVzc09iamVjdCB8fCBuZXdEYXRhU3RvcmVQYXJlbnQ7XHJcblxyXG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZGF0YVN0b3JlLnVwZGF0ZUNvbnRhaW5tZW50Jywge1xyXG4gICAgICAgIGRhdGFTdG9yZUJvOiBkYXRhU3RvcmVCbyxcclxuICAgICAgICBuZXdTZW1hbnRpY1BhcmVudDogbmV3RGF0YVN0b3JlUGFyZW50Qm8ucHJvY2Vzc1JlZiB8fCBuZXdEYXRhU3RvcmVQYXJlbnRCbyxcclxuICAgICAgICBuZXdEaVBhcmVudDogbmV3RGF0YVN0b3JlUGFyZW50Qm8uZGlcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gZGlzYWJsZSBhdXRvLXJlc2l6ZSBmb3IgZGF0YSBzdG9yZXNcclxuICB0aGlzLnByZUV4ZWN1dGUoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcblxyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcclxuXHJcbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScpICYmXHJcbiAgICAgICAgc2hhcGUudHlwZSAhPT0gJ2xhYmVsJykge1xyXG5cclxuICAgICAgaWYgKCFjb250ZXh0LmhpbnRzKSB7XHJcbiAgICAgICAgY29udGV4dC5oaW50cyA9IHt9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBwcmV2ZW50IGF1dG8gcmVzaXppbmdcclxuICAgICAgY29udGV4dC5oaW50cy5hdXRvUmVzaXplID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyBkaXNhYmxlIGF1dG8tcmVzaXplIGZvciBkYXRhIHN0b3Jlc1xyXG4gIHRoaXMucHJlRXhlY3V0ZSgnZWxlbWVudHMubW92ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc2hhcGVzID0gY29udGV4dC5zaGFwZXM7XHJcblxyXG4gICAgdmFyIGRhdGFTdG9yZVJlZmVyZW5jZXMgPSBzaGFwZXMuZmlsdGVyKGZ1bmN0aW9uKHNoYXBlKSB7XHJcbiAgICAgIHJldHVybiBpcyhzaGFwZSwgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoZGF0YVN0b3JlUmVmZXJlbmNlcy5sZW5ndGgpIHtcclxuICAgICAgaWYgKCFjb250ZXh0LmhpbnRzKSB7XHJcbiAgICAgICAgY29udGV4dC5oaW50cyA9IHt9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBwcmV2ZW50IGF1dG8gcmVzaXppbmcgZm9yIGRhdGEgc3RvcmUgcmVmZXJlbmNlc1xyXG4gICAgICBjb250ZXh0LmhpbnRzLmF1dG9SZXNpemUgPSBzaGFwZXMuZmlsdGVyKGZ1bmN0aW9uKHNoYXBlKSB7XHJcbiAgICAgICAgcmV0dXJuICFpcyhzaGFwZSwgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuXHJcbiAgLy8gdXBkYXRlIHBhcmVudCBvbiBkYXRhIHN0b3JlIGNyZWF0ZWRcclxuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcclxuICAgICAgICBwYXJlbnQgPSBzaGFwZS5wYXJlbnQ7XHJcblxyXG5cclxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJykgJiZcclxuICAgICAgICBzaGFwZS50eXBlICE9PSAnbGFiZWwnICYmXHJcbiAgICAgICAgaXMocGFyZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJykpIHtcclxuXHJcbiAgICAgIHVwZGF0ZURhdGFTdG9yZVBhcmVudChzaGFwZSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyB1cGRhdGUgcGFyZW50IG9uIGRhdGEgc3RvcmUgbW92ZWRcclxuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5tb3ZlJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXHJcbiAgICAgICAgb2xkUGFyZW50ID0gY29udGV4dC5vbGRQYXJlbnQsXHJcbiAgICAgICAgcGFyZW50ID0gc2hhcGUucGFyZW50O1xyXG5cclxuICAgIGlmIChpcyhvbGRQYXJlbnQsICdicG1uOkNvbGxhYm9yYXRpb24nKSkge1xyXG5cclxuICAgICAgLy8gZG8gbm90aGluZyBpZiBub3QgbmVjZXNzYXJ5XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScpICYmXHJcbiAgICAgICAgc2hhcGUudHlwZSAhPT0gJ2xhYmVsJyAmJlxyXG4gICAgICAgIGlzKHBhcmVudCwgJ2JwbW46Q29sbGFib3JhdGlvbicpKSB7XHJcblxyXG4gICAgICB2YXIgcGFydGljaXBhbnQgPSBpcyhvbGRQYXJlbnQsICdicG1uOlBhcnRpY2lwYW50JykgP1xyXG4gICAgICAgIG9sZFBhcmVudCA6XHJcbiAgICAgICAgZ2V0QW5jZXN0b3Iob2xkUGFyZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpO1xyXG5cclxuICAgICAgdXBkYXRlRGF0YVN0b3JlUGFyZW50KHNoYXBlLCBwYXJ0aWNpcGFudCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyB1cGRhdGUgZGF0YSBzdG9yZSBwYXJlbnRzIG9uIHBhcnRpY2lwYW50IG9yIHN1YnByb2Nlc3MgZGVsZXRlZFxyXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxyXG4gICAgICAgIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XHJcblxyXG4gICAgaWYgKGlzQW55KHNoYXBlLCBbICdicG1uOlBhcnRpY2lwYW50JywgJ2JwbW46U3ViUHJvY2VzcycgXSlcclxuICAgICAgICAmJiBpcyhyb290RWxlbWVudCwgJ2JwbW46Q29sbGFib3JhdGlvbicpKSB7XHJcbiAgICAgIGdldERhdGFTdG9yZXMocm9vdEVsZW1lbnQpXHJcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbihkYXRhU3RvcmUpIHtcclxuICAgICAgICAgIHJldHVybiBpc0Rlc2NlbmRhbnQoZGF0YVN0b3JlLCBzaGFwZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuZm9yRWFjaChmdW5jdGlvbihkYXRhU3RvcmUpIHtcclxuICAgICAgICAgIHVwZGF0ZURhdGFTdG9yZVBhcmVudChkYXRhU3RvcmUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAvLyB1cGRhdGUgZGF0YSBzdG9yZSBwYXJlbnRzIG9uIGNvbGxhYm9yYXRpb24gLT4gcHJvY2Vzc1xyXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ2NhbnZhcy51cGRhdGVSb290JywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBvbGRSb290ID0gY29udGV4dC5vbGRSb290LFxyXG4gICAgICAgIG5ld1Jvb3QgPSBjb250ZXh0Lm5ld1Jvb3Q7XHJcblxyXG4gICAgdmFyIGRhdGFTdG9yZXMgPSBnZXREYXRhU3RvcmVzKG9sZFJvb3QpO1xyXG5cclxuICAgIGRhdGFTdG9yZXMuZm9yRWFjaChmdW5jdGlvbihkYXRhU3RvcmUpIHtcclxuXHJcbiAgICAgIGlmIChpcyhuZXdSb290LCAnYnBtbjpQcm9jZXNzJykpIHtcclxuICAgICAgICB1cGRhdGVEYXRhU3RvcmVQYXJlbnQoZGF0YVN0b3JlLCBuZXdSb290KTtcclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG4gIH0pO1xyXG59XHJcblxyXG5EYXRhU3RvcmVCZWhhdmlvci4kaW5qZWN0ID0gW1xyXG4gICdjYW52YXMnLFxyXG4gICdjb21tYW5kU3RhY2snLFxyXG4gICdlbGVtZW50UmVnaXN0cnknLFxyXG4gICdldmVudEJ1cycsXHJcbl07XHJcblxyXG5pbmhlcml0cyhEYXRhU3RvcmVCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcclxuXHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cclxuXHJcbmZ1bmN0aW9uIGlzRGVzY2VuZGFudChkZXNjZW5kYW50LCBhbmNlc3Rvcikge1xyXG4gIHZhciBkZXNjZW5kYW50Qm8gPSBkZXNjZW5kYW50LmJ1c2luZXNzT2JqZWN0IHx8IGRlc2NlbmRhbnQsXHJcbiAgICAgIGFuY2VzdG9yQm8gPSBhbmNlc3Rvci5idXNpbmVzc09iamVjdCB8fCBhbmNlc3RvcjtcclxuXHJcbiAgd2hpbGUgKGRlc2NlbmRhbnRCby4kcGFyZW50KSB7XHJcbiAgICBpZiAoZGVzY2VuZGFudEJvLiRwYXJlbnQgPT09IGFuY2VzdG9yQm8ucHJvY2Vzc1JlZiB8fCBhbmNlc3RvckJvKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGRlc2NlbmRhbnRCbyA9IGRlc2NlbmRhbnRCby4kcGFyZW50O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRBbmNlc3RvcihlbGVtZW50LCB0eXBlKSB7XHJcblxyXG4gIHdoaWxlIChlbGVtZW50LnBhcmVudCkge1xyXG4gICAgaWYgKGlzKGVsZW1lbnQucGFyZW50LCB0eXBlKSkge1xyXG4gICAgICByZXR1cm4gZWxlbWVudC5wYXJlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50O1xyXG4gIH1cclxufSIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0Q2hpbGRMYW5lc1xufSBmcm9tICcuLi91dGlsL0xhbmVVdGlsJztcblxuaW1wb3J0IHtcbiAgZWFjaEVsZW1lbnRcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9FbGVtZW50cyc7XG5cblxudmFyIExPV19QUklPUklUWSA9IDUwMDtcblxuXG4vKipcbiAqIEJQTU4gc3BlY2lmaWMgZGVsZXRlIGxhbmUgYmVoYXZpb3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGVsZXRlTGFuZUJlaGF2aW9yKGV2ZW50QnVzLCBtb2RlbGluZywgc3BhY2VUb29sKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG5cbiAgZnVuY3Rpb24gY29tcGVuc2F0ZUxhbmVEZWxldGUoc2hhcGUsIG9sZFBhcmVudCkge1xuXG4gICAgdmFyIHNpYmxpbmdzID0gZ2V0Q2hpbGRMYW5lcyhvbGRQYXJlbnQpO1xuXG4gICAgdmFyIHRvcEFmZmVjdGVkID0gW107XG4gICAgdmFyIGJvdHRvbUFmZmVjdGVkID0gW107XG5cbiAgICBlYWNoRWxlbWVudChzaWJsaW5ncywgZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gICAgICBpZiAoZWxlbWVudC55ID4gc2hhcGUueSkge1xuICAgICAgICBib3R0b21BZmZlY3RlZC5wdXNoKGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9wQWZmZWN0ZWQucHVzaChlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVsZW1lbnQuY2hpbGRyZW47XG4gICAgfSk7XG5cbiAgICBpZiAoIXNpYmxpbmdzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBvZmZzZXQ7XG5cbiAgICBpZiAoYm90dG9tQWZmZWN0ZWQubGVuZ3RoICYmIHRvcEFmZmVjdGVkLmxlbmd0aCkge1xuICAgICAgb2Zmc2V0ID0gc2hhcGUuaGVpZ2h0IC8gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gc2hhcGUuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3BBZGp1c3RtZW50cyxcbiAgICAgICAgYm90dG9tQWRqdXN0bWVudHM7XG5cbiAgICBpZiAodG9wQWZmZWN0ZWQubGVuZ3RoKSB7XG4gICAgICB0b3BBZGp1c3RtZW50cyA9IHNwYWNlVG9vbC5jYWxjdWxhdGVBZGp1c3RtZW50cyhcbiAgICAgICAgdG9wQWZmZWN0ZWQsICd5Jywgb2Zmc2V0LCBzaGFwZS55IC0gMTApO1xuXG4gICAgICBzcGFjZVRvb2wubWFrZVNwYWNlKFxuICAgICAgICB0b3BBZGp1c3RtZW50cy5tb3ZpbmdTaGFwZXMsXG4gICAgICAgIHRvcEFkanVzdG1lbnRzLnJlc2l6aW5nU2hhcGVzLFxuICAgICAgICB7IHg6IDAsIHk6IG9mZnNldCB9LCAncycpO1xuICAgIH1cblxuICAgIGlmIChib3R0b21BZmZlY3RlZC5sZW5ndGgpIHtcbiAgICAgIGJvdHRvbUFkanVzdG1lbnRzID0gc3BhY2VUb29sLmNhbGN1bGF0ZUFkanVzdG1lbnRzKFxuICAgICAgICBib3R0b21BZmZlY3RlZCwgJ3knLCAtb2Zmc2V0LCBzaGFwZS55ICsgc2hhcGUuaGVpZ2h0ICsgMTApO1xuXG4gICAgICBzcGFjZVRvb2wubWFrZVNwYWNlKFxuICAgICAgICBib3R0b21BZGp1c3RtZW50cy5tb3ZpbmdTaGFwZXMsXG4gICAgICAgIGJvdHRvbUFkanVzdG1lbnRzLnJlc2l6aW5nU2hhcGVzLFxuICAgICAgICB7IHg6IDAsIHk6IC1vZmZzZXQgfSwgJ24nKTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBBZGp1c3Qgc2l6ZXMgb2Ygb3RoZXIgbGFuZXMgYWZ0ZXIgbGFuZSBkZWxldGlvblxuICAgKi9cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ3NoYXBlLmRlbGV0ZScsIExPV19QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzLFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIG9sZFBhcmVudCA9IGNvbnRleHQub2xkUGFyZW50O1xuXG4gICAgLy8gb25seSBjb21wZW5zYXRlIGxhbmUgZGVsZXRlc1xuICAgIGlmICghaXMoc2hhcGUsICdicG1uOkxhbmUnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNvbXBlbnNhdGUgcm9vdCBkZWxldGVzIG9ubHlcbiAgICBpZiAoaGludHMgJiYgaGludHMubmVzdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29tcGVuc2F0ZUxhbmVEZWxldGUoc2hhcGUsIG9sZFBhcmVudCk7XG4gIH0pO1xufVxuXG5EZWxldGVMYW5lQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3NwYWNlVG9vbCdcbl07XG5cbmluaGVyaXRzKERlbGV0ZUxhbmVCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTsiLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHtcbiAgZ2V0QnVzaW5lc3NPYmplY3QsXG4gIGlzXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHsgaXNMYWJlbCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTGFiZWxVdGlsJztcblxudmFyIExPV19QUklPUklUWSA9IDUwMDtcblxuXG4vKipcbiAqIFJlcGxhY2UgYm91bmRhcnkgZXZlbnQgd2l0aCBpbnRlcm1lZGlhdGUgZXZlbnQgd2hlbiBjcmVhdGluZyBvciBtb3ZpbmcgcmVzdWx0cyBpbiBkZXRhY2hlZCBldmVudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGV0YWNoRXZlbnRCZWhhdmlvcihicG1uUmVwbGFjZSwgaW5qZWN0b3IpIHtcbiAgaW5qZWN0b3IuaW52b2tlKENvbW1hbmRJbnRlcmNlcHRvciwgdGhpcyk7XG5cbiAgdGhpcy5fYnBtblJlcGxhY2UgPSBicG1uUmVwbGFjZTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ2VsZW1lbnRzLmNyZWF0ZScsIExPV19QUklPUklUWSwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHM7XG5cbiAgICBlbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24oc2hhcGUpIHtcbiAgICAgIHZhciBob3N0ID0gc2hhcGUuaG9zdDtcblxuICAgICAgcmV0dXJuIHNob3VsZFJlcGxhY2Uoc2hhcGUsIGhvc3QpO1xuICAgIH0pLm1hcChmdW5jdGlvbihzaGFwZSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRzLmluZGV4T2Yoc2hhcGUpO1xuICAgIH0pLmZvckVhY2goZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgIGNvbnRleHQuZWxlbWVudHNbIGluZGV4IF0gPSBzZWxmLnJlcGxhY2VTaGFwZShlbGVtZW50c1sgaW5kZXggXSk7XG4gICAgfSk7XG4gIH0sIHRydWUpO1xuXG4gIHRoaXMucHJlRXhlY3V0ZSgnZWxlbWVudHMubW92ZScsIExPV19QUklPUklUWSwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcyxcbiAgICAgICAgbmV3SG9zdCA9IGNvbnRleHQubmV3SG9zdDtcblxuICAgIHNoYXBlcy5mb3JFYWNoKGZ1bmN0aW9uKHNoYXBlLCBpbmRleCkge1xuICAgICAgdmFyIGhvc3QgPSBzaGFwZS5ob3N0O1xuXG4gICAgICBpZiAoc2hvdWxkUmVwbGFjZShzaGFwZSwgaW5jbHVkZXMoc2hhcGVzLCBob3N0KSA/IGhvc3QgOiBuZXdIb3N0KSkge1xuICAgICAgICBzaGFwZXNbIGluZGV4IF0gPSBzZWxmLnJlcGxhY2VTaGFwZShzaGFwZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHRydWUpO1xufVxuXG5EZXRhY2hFdmVudEJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdicG1uUmVwbGFjZScsXG4gICdpbmplY3Rvcidcbl07XG5cbmluaGVyaXRzKERldGFjaEV2ZW50QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbkRldGFjaEV2ZW50QmVoYXZpb3IucHJvdG90eXBlLnJlcGxhY2VTaGFwZSA9IGZ1bmN0aW9uKHNoYXBlKSB7XG4gIHZhciBldmVudERlZmluaXRpb24gPSBnZXRFdmVudERlZmluaXRpb24oc2hhcGUpLFxuICAgICAgaW50ZXJtZWRpYXRlRXZlbnQ7XG5cbiAgaWYgKGV2ZW50RGVmaW5pdGlvbikge1xuICAgIGludGVybWVkaWF0ZUV2ZW50ID0ge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiBldmVudERlZmluaXRpb24uJHR5cGVcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGludGVybWVkaWF0ZUV2ZW50ID0ge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2JwbW5SZXBsYWNlLnJlcGxhY2VFbGVtZW50KHNoYXBlLCBpbnRlcm1lZGlhdGVFdmVudCwgeyBsYXlvdXRDb25uZWN0aW9uOiBmYWxzZSB9KTtcbn07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldEV2ZW50RGVmaW5pdGlvbihlbGVtZW50KSB7XG4gIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxuICAgICAgZXZlbnREZWZpbml0aW9ucyA9IGJ1c2luZXNzT2JqZWN0LmV2ZW50RGVmaW5pdGlvbnM7XG5cbiAgcmV0dXJuIGV2ZW50RGVmaW5pdGlvbnMgJiYgZXZlbnREZWZpbml0aW9uc1swXTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkUmVwbGFjZShzaGFwZSwgaG9zdCkge1xuICByZXR1cm4gIWlzTGFiZWwoc2hhcGUpICYmIGlzKHNoYXBlLCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiYgIWhvc3Q7XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCBpdGVtKSB7XG4gIHJldHVybiBhcnJheS5pbmRleE9mKGl0ZW0pICE9PSAtMTtcbn0iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQge1xuICBhc3NpZ24sXG4gIGZpbHRlcixcbiAgZmluZCxcbiAgaXNOdW1iZXJcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBnZXRNaWQgfSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBnZXRBcHByb3hJbnRlcnNlY3Rpb25cbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9MaW5lSW50ZXJzZWN0aW9uJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEcm9wT25GbG93QmVoYXZpb3IoZXZlbnRCdXMsIGJwbW5SdWxlcywgbW9kZWxpbmcpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgLyoqXG4gICAqIFJlY29ubmVjdCBzdGFydCAvIGVuZCBvZiBhIGNvbm5lY3Rpb24gYWZ0ZXJcbiAgICogZHJvcHBpbmcgYW4gZWxlbWVudCBvbiBhIGZsb3cuXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGluc2VydFNoYXBlKHNoYXBlLCB0YXJnZXRGbG93LCBwb3NpdGlvbk9yQm91bmRzKSB7XG4gICAgdmFyIHdheXBvaW50cyA9IHRhcmdldEZsb3cud2F5cG9pbnRzLFxuICAgICAgICB3YXlwb2ludHNCZWZvcmUsXG4gICAgICAgIHdheXBvaW50c0FmdGVyLFxuICAgICAgICBkb2NraW5nUG9pbnQsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICBpbmNvbWluZ0Nvbm5lY3Rpb24sXG4gICAgICAgIG91dGdvaW5nQ29ubmVjdGlvbixcbiAgICAgICAgb2xkT3V0Z29pbmcgPSBzaGFwZS5vdXRnb2luZy5zbGljZSgpLFxuICAgICAgICBvbGRJbmNvbWluZyA9IHNoYXBlLmluY29taW5nLnNsaWNlKCk7XG5cbiAgICB2YXIgbWlkO1xuXG4gICAgaWYgKGlzTnVtYmVyKHBvc2l0aW9uT3JCb3VuZHMud2lkdGgpKSB7XG4gICAgICBtaWQgPSBnZXRNaWQocG9zaXRpb25PckJvdW5kcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pZCA9IHBvc2l0aW9uT3JCb3VuZHM7XG4gICAgfVxuXG4gICAgdmFyIGludGVyc2VjdGlvbiA9IGdldEFwcHJveEludGVyc2VjdGlvbih3YXlwb2ludHMsIG1pZCk7XG5cbiAgICBpZiAoaW50ZXJzZWN0aW9uKSB7XG4gICAgICB3YXlwb2ludHNCZWZvcmUgPSB3YXlwb2ludHMuc2xpY2UoMCwgaW50ZXJzZWN0aW9uLmluZGV4KTtcbiAgICAgIHdheXBvaW50c0FmdGVyID0gd2F5cG9pbnRzLnNsaWNlKGludGVyc2VjdGlvbi5pbmRleCArIChpbnRlcnNlY3Rpb24uYmVuZHBvaW50ID8gMSA6IDApKTtcblxuICAgICAgLy8gZHVlIHRvIGluYWNjdXJhY3kgaW50ZXJzZWN0aW9uIG1pZ2h0IGhhdmUgYmVlbiBmb3VuZFxuICAgICAgaWYgKCF3YXlwb2ludHNCZWZvcmUubGVuZ3RoIHx8ICF3YXlwb2ludHNBZnRlci5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkb2NraW5nUG9pbnQgPSBpbnRlcnNlY3Rpb24uYmVuZHBvaW50ID8gd2F5cG9pbnRzW2ludGVyc2VjdGlvbi5pbmRleF0gOiBtaWQ7XG5cbiAgICAgIC8vIGlmIGxhc3Qgd2F5cG9pbnRCZWZvcmUgaXMgaW5zaWRlIHNoYXBlJ3MgYm91bmRzLCBpZ25vcmUgZG9ja2luZyBwb2ludFxuICAgICAgaWYgKCFpc1BvaW50SW5zaWRlQkJveChzaGFwZSwgd2F5cG9pbnRzQmVmb3JlW3dheXBvaW50c0JlZm9yZS5sZW5ndGgtMV0pKSB7XG4gICAgICAgIHdheXBvaW50c0JlZm9yZS5wdXNoKGNvcHkoZG9ja2luZ1BvaW50KSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIGZpcnN0IHdheXBvaW50QWZ0ZXIgaXMgaW5zaWRlIHNoYXBlJ3MgYm91bmRzLCBpZ25vcmUgZG9ja2luZyBwb2ludFxuICAgICAgaWYgKCFpc1BvaW50SW5zaWRlQkJveChzaGFwZSwgd2F5cG9pbnRzQWZ0ZXJbMF0pKSB7XG4gICAgICAgIHdheXBvaW50c0FmdGVyLnVuc2hpZnQoY29weShkb2NraW5nUG9pbnQpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzb3VyY2UgPSB0YXJnZXRGbG93LnNvdXJjZTtcbiAgICB0YXJnZXQgPSB0YXJnZXRGbG93LnRhcmdldDtcblxuICAgIGlmIChicG1uUnVsZXMuY2FuQ29ubmVjdChzb3VyY2UsIHNoYXBlLCB0YXJnZXRGbG93KSkge1xuXG4gICAgICAvLyByZWNvbm5lY3Qgc291cmNlIC0+IGluc2VydGVkIHNoYXBlXG4gICAgICBtb2RlbGluZy5yZWNvbm5lY3RFbmQodGFyZ2V0Rmxvdywgc2hhcGUsIHdheXBvaW50c0JlZm9yZSB8fCBtaWQpO1xuXG4gICAgICBpbmNvbWluZ0Nvbm5lY3Rpb24gPSB0YXJnZXRGbG93O1xuICAgIH1cblxuICAgIGlmIChicG1uUnVsZXMuY2FuQ29ubmVjdChzaGFwZSwgdGFyZ2V0LCB0YXJnZXRGbG93KSkge1xuXG4gICAgICBpZiAoIWluY29taW5nQ29ubmVjdGlvbikge1xuXG4gICAgICAgIC8vIHJlY29ubmVjdCBpbnNlcnRlZCBzaGFwZSAtPiBlbmRcbiAgICAgICAgbW9kZWxpbmcucmVjb25uZWN0U3RhcnQodGFyZ2V0Rmxvdywgc2hhcGUsIHdheXBvaW50c0FmdGVyIHx8IG1pZCk7XG5cbiAgICAgICAgb3V0Z29pbmdDb25uZWN0aW9uID0gdGFyZ2V0RmxvdztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dGdvaW5nQ29ubmVjdGlvbiA9IG1vZGVsaW5nLmNvbm5lY3QoXG4gICAgICAgICAgc2hhcGUsIHRhcmdldCwgeyB0eXBlOiB0YXJnZXRGbG93LnR5cGUsIHdheXBvaW50czogd2F5cG9pbnRzQWZ0ZXIgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkdXBsaWNhdGVDb25uZWN0aW9ucyA9IFtdLmNvbmNhdChcblxuICAgICAgaW5jb21pbmdDb25uZWN0aW9uICYmIGZpbHRlcihvbGRJbmNvbWluZywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgICAgICByZXR1cm4gY29ubmVjdGlvbi5zb3VyY2UgPT09IGluY29taW5nQ29ubmVjdGlvbi5zb3VyY2U7XG4gICAgICB9KSB8fCBbXSxcblxuICAgICAgb3V0Z29pbmdDb25uZWN0aW9uICYmIGZpbHRlcihvbGRPdXRnb2luZywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgICAgICByZXR1cm4gY29ubmVjdGlvbi50YXJnZXQgPT09IG91dGdvaW5nQ29ubmVjdGlvbi50YXJnZXQ7XG4gICAgICB9KSB8fCBbXVxuICAgICk7XG5cbiAgICBpZiAoZHVwbGljYXRlQ29ubmVjdGlvbnMubGVuZ3RoKSB7XG4gICAgICBtb2RlbGluZy5yZW1vdmVFbGVtZW50cyhkdXBsaWNhdGVDb25uZWN0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5wcmVFeGVjdXRlKCdlbGVtZW50cy5tb3ZlJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIG5ld1BhcmVudCA9IGNvbnRleHQubmV3UGFyZW50LFxuICAgICAgICBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcyxcbiAgICAgICAgZGVsdGEgPSBjb250ZXh0LmRlbHRhLFxuICAgICAgICBzaGFwZSA9IHNoYXBlc1swXTtcblxuICAgIGlmICghc2hhcGUgfHwgIW5ld1BhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBuZXcgcGFyZW50IGlzIGEgY29ubmVjdGlvbixcbiAgICAvLyBjaGFuZ2UgaXQgdG8gdGhlIG5ldyBwYXJlbnQncyBwYXJlbnRcbiAgICBpZiAobmV3UGFyZW50ICYmIG5ld1BhcmVudC53YXlwb2ludHMpIHtcbiAgICAgIGNvbnRleHQubmV3UGFyZW50ID0gbmV3UGFyZW50ID0gbmV3UGFyZW50LnBhcmVudDtcbiAgICB9XG5cbiAgICB2YXIgc2hhcGVNaWQgPSBnZXRNaWQoc2hhcGUpO1xuICAgIHZhciBuZXdTaGFwZU1pZCA9IHtcbiAgICAgIHg6IHNoYXBlTWlkLnggKyBkZWx0YS54LFxuICAgICAgeTogc2hhcGVNaWQueSArIGRlbHRhLnlcbiAgICB9O1xuXG4gICAgLy8gZmluZCBhIGNvbm5lY3Rpb24gd2hpY2ggaW50ZXJzZWN0cyB3aXRoIHRoZVxuICAgIC8vIGVsZW1lbnQncyBtaWQgcG9pbnRcbiAgICB2YXIgY29ubmVjdGlvbiA9IGZpbmQobmV3UGFyZW50LmNoaWxkcmVuLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICB2YXIgY2FuSW5zZXJ0ID0gYnBtblJ1bGVzLmNhbkluc2VydChzaGFwZXMsIGVsZW1lbnQpO1xuXG4gICAgICByZXR1cm4gY2FuSW5zZXJ0ICYmIGdldEFwcHJveEludGVyc2VjdGlvbihlbGVtZW50LndheXBvaW50cywgbmV3U2hhcGVNaWQpO1xuICAgIH0pO1xuXG4gICAgaWYgKGNvbm5lY3Rpb24pIHtcbiAgICAgIGNvbnRleHQudGFyZ2V0RmxvdyA9IGNvbm5lY3Rpb247XG4gICAgICBjb250ZXh0LnBvc2l0aW9uID0gbmV3U2hhcGVNaWQ7XG4gICAgfVxuXG4gIH0sIHRydWUpO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKCdlbGVtZW50cy5tb3ZlJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzLFxuICAgICAgICB0YXJnZXRGbG93ID0gY29udGV4dC50YXJnZXRGbG93LFxuICAgICAgICBwb3NpdGlvbiA9IGNvbnRleHQucG9zaXRpb247XG5cbiAgICBpZiAodGFyZ2V0Rmxvdykge1xuICAgICAgaW5zZXJ0U2hhcGUoc2hhcGVzWzBdLCB0YXJnZXRGbG93LCBwb3NpdGlvbik7XG4gICAgfVxuXG4gIH0sIHRydWUpO1xuXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIHBhcmVudCA9IGNvbnRleHQucGFyZW50LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAoYnBtblJ1bGVzLmNhbkluc2VydChzaGFwZSwgcGFyZW50KSkge1xuICAgICAgY29udGV4dC50YXJnZXRGbG93ID0gcGFyZW50O1xuICAgICAgY29udGV4dC5wYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIHRhcmdldEZsb3cgPSBjb250ZXh0LnRhcmdldEZsb3csXG4gICAgICAgIHBvc2l0aW9uT3JCb3VuZHMgPSBjb250ZXh0LnBvc2l0aW9uO1xuXG4gICAgaWYgKHRhcmdldEZsb3cpIHtcbiAgICAgIGluc2VydFNoYXBlKHNoYXBlLCB0YXJnZXRGbG93LCBwb3NpdGlvbk9yQm91bmRzKTtcbiAgICB9XG4gIH0sIHRydWUpO1xufVxuXG5pbmhlcml0cyhEcm9wT25GbG93QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbkRyb3BPbkZsb3dCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnYnBtblJ1bGVzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc1BvaW50SW5zaWRlQkJveChiYm94LCBwb2ludCkge1xuICB2YXIgeCA9IHBvaW50LngsXG4gICAgICB5ID0gcG9pbnQueTtcblxuICByZXR1cm4geCA+PSBiYm94LnggJiZcbiAgICB4IDw9IGJib3gueCArIGJib3gud2lkdGggJiZcbiAgICB5ID49IGJib3gueSAmJlxuICAgIHkgPD0gYmJveC55ICsgYmJveC5oZWlnaHQ7XG59XG5cbmZ1bmN0aW9uIGNvcHkob2JqKSB7XG4gIHJldHVybiBhc3NpZ24oe30sIG9iaik7XG59XG5cbiIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRXZlbnRCYXNlZEdhdGV3YXlCZWhhdmlvcihldmVudEJ1cywgbW9kZWxpbmcpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBleGlzdGluZyBzZXF1ZW5jZSBmbG93cyBvZiBldmVudC1iYXNlZCB0YXJnZXQgYmVmb3JlIGNvbm5lY3RpbmdcbiAgICogZnJvbSBldmVudC1iYXNlZCBnYXRld2F5LlxuICAgKi9cbiAgdGhpcy5wcmVFeGVjdXRlZCgnY29ubmVjdGlvbi5jcmVhdGUnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQsXG4gICAgICAgIGV4aXN0aW5nSW5jb21pbmdDb25uZWN0aW9ucyA9IHRhcmdldC5pbmNvbWluZy5zbGljZSgpO1xuXG4gICAgaWYgKGNvbnRleHQuaGludHMgJiYgY29udGV4dC5oaW50cy5jcmVhdGVFbGVtZW50c0JlaGF2aW9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGlzKHNvdXJjZSwgJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknKSAmJlxuICAgICAgdGFyZ2V0LmluY29taW5nLmxlbmd0aFxuICAgICkge1xuXG4gICAgICBleGlzdGluZ0luY29taW5nQ29ubmVjdGlvbnMuZmlsdGVyKGlzU2VxdWVuY2VGbG93KVxuICAgICAgICAuZm9yRWFjaChmdW5jdGlvbihzZXF1ZW5jZUZsb3cpIHtcbiAgICAgICAgICBtb2RlbGluZy5yZW1vdmVDb25uZWN0aW9uKHNlcXVlbmNlRmxvdyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqICBBZnRlciByZXBsYWNpbmcgc2hhcGUgd2l0aCBldmVudC1iYXNlZCBnYXRld2F5LCByZW1vdmUgaW5jb21pbmcgc2VxdWVuY2VcbiAgICogIGZsb3dzIG9mIGV2ZW50LWJhc2VkIHRhcmdldHMgd2hpY2ggZG8gbm90IGJlbG9uZyB0byBldmVudC1iYXNlZCBnYXRld2F5XG4gICAqICBzb3VyY2UuXG4gICAqL1xuICB0aGlzLnByZUV4ZWN1dGVkKCdzaGFwZS5yZXBsYWNlJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBuZXdTaGFwZSA9IGV2ZW50LmNvbnRleHQubmV3U2hhcGUsXG4gICAgICAgIG5ld1NoYXBlVGFyZ2V0cyxcbiAgICAgICAgbmV3U2hhcGVUYXJnZXRzSW5jb21pbmdTZXF1ZW5jZUZsb3dzO1xuXG4gICAgaWYgKCFpcyhuZXdTaGFwZSwgJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5ld1NoYXBlVGFyZ2V0cyA9IG5ld1NoYXBlLm91dGdvaW5nLmZpbHRlcihpc1NlcXVlbmNlRmxvdylcbiAgICAgIC5tYXAoZnVuY3Rpb24oc2VxdWVuY2VGbG93KSB7XG4gICAgICAgIHJldHVybiBzZXF1ZW5jZUZsb3cudGFyZ2V0O1xuICAgICAgfSk7XG5cbiAgICBuZXdTaGFwZVRhcmdldHNJbmNvbWluZ1NlcXVlbmNlRmxvd3MgPSBuZXdTaGFwZVRhcmdldHMucmVkdWNlKGZ1bmN0aW9uKHNlcXVlbmNlRmxvd3MsIHRhcmdldCkge1xuICAgICAgdmFyIGluY29taW5nU2VxdWVuY2VGbG93cyA9IHRhcmdldC5pbmNvbWluZy5maWx0ZXIoaXNTZXF1ZW5jZUZsb3cpO1xuXG4gICAgICByZXR1cm4gc2VxdWVuY2VGbG93cy5jb25jYXQoaW5jb21pbmdTZXF1ZW5jZUZsb3dzKTtcbiAgICB9LCBbXSk7XG5cbiAgICBuZXdTaGFwZVRhcmdldHNJbmNvbWluZ1NlcXVlbmNlRmxvd3MuZm9yRWFjaChmdW5jdGlvbihzZXF1ZW5jZUZsb3cpIHtcbiAgICAgIGlmIChzZXF1ZW5jZUZsb3cuc291cmNlICE9PSBuZXdTaGFwZSkge1xuICAgICAgICBtb2RlbGluZy5yZW1vdmVDb25uZWN0aW9uKHNlcXVlbmNlRmxvdyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5FdmVudEJhc2VkR2F0ZXdheUJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZydcbl07XG5cbmluaGVyaXRzKEV2ZW50QmFzZWRHYXRld2F5QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gaXNTZXF1ZW5jZUZsb3coY29ubmVjdGlvbikge1xuICByZXR1cm4gaXMoY29ubmVjdGlvbiwgJ2JwbW46U2VxdWVuY2VGbG93Jyk7XG59XG4iLCJpbXBvcnQgeyBnZXRMYW5lc1Jvb3QgfSBmcm9tICcuLi91dGlsL0xhbmVVdGlsJztcclxuXHJcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNBbnkgfSBmcm9tICcuLi91dGlsL01vZGVsaW5nVXRpbCc7XHJcblxyXG52YXIgSElHSF9QUklPUklUWSA9IDE1MDA7XHJcbnZhciBISUdIRVNUX1BSSU9SSVRZID0gMjAwMDtcclxuXHJcblxyXG4vKipcclxuICogQ29ycmVjdCBob3ZlciB0YXJnZXRzIGluIGNlcnRhaW4gc2l0dWF0aW9ucyB0byBpbXByb3ZlIGRpYWdyYW0gaW50ZXJhY3Rpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcclxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcclxuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRml4SG92ZXJCZWhhdmlvcihlbGVtZW50UmVnaXN0cnksIGV2ZW50QnVzLCBjYW52YXMpIHtcclxuXHJcbiAgZXZlbnRCdXMub24oW1xyXG4gICAgJ2NyZWF0ZS5ob3ZlcicsXHJcbiAgICAnY3JlYXRlLm1vdmUnLFxyXG4gICAgJ2NyZWF0ZS5lbmQnLFxyXG4gICAgJ3NoYXBlLm1vdmUuaG92ZXInLFxyXG4gICAgJ3NoYXBlLm1vdmUubW92ZScsXHJcbiAgICAnc2hhcGUubW92ZS5lbmQnXHJcbiAgXSwgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUgfHwgZXZlbnQuc2hhcGUsXHJcbiAgICAgICAgaG92ZXIgPSBldmVudC5ob3ZlcjtcclxuXHJcbiAgICAvLyBlbnN1cmUgZWxlbWVudHMgYXJlIG5vdCBkcm9wcGVkIG9udG8gYSBicG1uOkxhbmUgYnV0IG9udG9cclxuICAgIC8vIHRoZSB1bmRlcmx5aW5nIGJwbW46UGFydGljaXBhbnRcclxuICAgIGlmIChpcyhob3ZlciwgJ2JwbW46TGFuZScpICYmICFpc0FueShzaGFwZSwgWyAnYnBtbjpMYW5lJywgJ2JwbW46UGFydGljaXBhbnQnIF0pKSB7XHJcbiAgICAgIGV2ZW50LmhvdmVyID0gZ2V0TGFuZXNSb290KGhvdmVyKTtcclxuICAgICAgZXZlbnQuaG92ZXJHZnggPSBlbGVtZW50UmVnaXN0cnkuZ2V0R3JhcGhpY3MoZXZlbnQuaG92ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpO1xyXG5cclxuICAgIC8vIGVuc3VyZSBicG1uOkdyb3VwIGFuZCBsYWJlbCBlbGVtZW50cyBhcmUgZHJvcHBlZFxyXG4gICAgLy8gYWx3YXlzIG9udG8gdGhlIHJvb3RcclxuICAgIGlmIChob3ZlciAhPT0gcm9vdEVsZW1lbnQgJiYgKHNoYXBlLmxhYmVsVGFyZ2V0IHx8IGlzKHNoYXBlLCAnYnBtbjpHcm91cCcpKSkge1xyXG4gICAgICBldmVudC5ob3ZlciA9IHJvb3RFbGVtZW50O1xyXG4gICAgICBldmVudC5ob3ZlckdmeCA9IGVsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhldmVudC5ob3Zlcik7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG5cclxuICBldmVudEJ1cy5vbihbXHJcbiAgICAnY29ubmVjdC5ob3ZlcicsXHJcbiAgICAnY29ubmVjdC5vdXQnLFxyXG4gICAgJ2Nvbm5lY3QuZW5kJyxcclxuICAgICdjb25uZWN0LmNsZWFudXAnLFxyXG4gICAgJ2dsb2JhbC1jb25uZWN0LmhvdmVyJyxcclxuICAgICdnbG9iYWwtY29ubmVjdC5vdXQnLFxyXG4gICAgJ2dsb2JhbC1jb25uZWN0LmVuZCcsXHJcbiAgICAnZ2xvYmFsLWNvbm5lY3QuY2xlYW51cCdcclxuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGhvdmVyID0gZXZlbnQuaG92ZXI7XHJcblxyXG4gICAgLy8gZW5zdXJlIGNvbm5lY3Rpb25zIHN0YXJ0L2VuZCBvbiBicG1uOlBhcnRpY2lwYW50LFxyXG4gICAgLy8gbm90IHRoZSB1bmRlcmx5aW5nIGJwbW46TGFuZVxyXG4gICAgaWYgKGlzKGhvdmVyLCAnYnBtbjpMYW5lJykpIHtcclxuICAgICAgZXZlbnQuaG92ZXIgPSBnZXRMYW5lc1Jvb3QoaG92ZXIpIHx8IGhvdmVyO1xyXG4gICAgICBldmVudC5ob3ZlckdmeCA9IGVsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhldmVudC5ob3Zlcik7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG5cclxuICBldmVudEJ1cy5vbihbXHJcbiAgICAnYmVuZHBvaW50Lm1vdmUuaG92ZXInXHJcbiAgXSwgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBob3ZlciA9IGV2ZW50LmhvdmVyLFxyXG4gICAgICAgIHR5cGUgPSBjb250ZXh0LnR5cGU7XHJcblxyXG4gICAgLy8gZW5zdXJlIHJlY29ubmVjdCBzdGFydC9lbmQgb24gYnBtbjpQYXJ0aWNpcGFudCxcclxuICAgIC8vIG5vdCB0aGUgdW5kZXJseWluZyBicG1uOkxhbmVcclxuICAgIGlmIChpcyhob3ZlciwgJ2JwbW46TGFuZScpICYmIC9yZWNvbm5lY3QvLnRlc3QodHlwZSkpIHtcclxuICAgICAgZXZlbnQuaG92ZXIgPSBnZXRMYW5lc1Jvb3QoaG92ZXIpIHx8IGhvdmVyO1xyXG4gICAgICBldmVudC5ob3ZlckdmeCA9IGVsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhldmVudC5ob3Zlcik7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG5cclxuICBldmVudEJ1cy5vbihbXHJcbiAgICAnY29ubmVjdC5zdGFydCdcclxuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIHN0YXJ0ID0gY29udGV4dC5zdGFydDtcclxuXHJcbiAgICAvLyBlbnN1cmUgY29ubmVjdCBzdGFydCBvbiBicG1uOlBhcnRpY2lwYW50LFxyXG4gICAgLy8gbm90IHRoZSB1bmRlcmx5aW5nIGJwbW46TGFuZVxyXG4gICAgaWYgKGlzKHN0YXJ0LCAnYnBtbjpMYW5lJykpIHtcclxuICAgICAgY29udGV4dC5zdGFydCA9IGdldExhbmVzUm9vdChzdGFydCkgfHwgc3RhcnQ7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyBhbGxvdyBtb3ZlbWVudCBvZiBwYXJ0aWNpcGFudHMgZnJvbSBsYW5lc1xyXG4gIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLnN0YXJ0JywgSElHSEVTVF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBzaGFwZSA9IGV2ZW50LnNoYXBlO1xyXG5cclxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46TGFuZScpKSB7XHJcbiAgICAgIGV2ZW50LnNoYXBlID0gZ2V0TGFuZXNSb290KHNoYXBlKSB8fCBzaGFwZTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbn1cclxuXHJcbkZpeEhvdmVyQmVoYXZpb3IuJGluamVjdCA9IFtcclxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcclxuICAnZXZlbnRCdXMnLFxyXG4gICdjYW52YXMnXHJcbl07IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICByZW1vdmUgYXMgY29sbGVjdGlvblJlbW92ZVxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zJztcblxuaW1wb3J0IHtcbiAgZ2V0QnVzaW5lc3NPYmplY3QsXG4gIGlzXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgY3JlYXRlQ2F0ZWdvcnlWYWx1ZVxufSBmcm9tICcuL3V0aWwvQ2F0ZWdvcnlVdGlsJztcblxudmFyIEhJR0hfUFJJT1JJVFkgPSAyMDAwO1xuXG5cbi8qKlxuICogQlBNTiBzcGVjaWZpYyBHcm91cCBiZWhhdmlvclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHcm91cEJlaGF2aW9yKFxuICAgIGJwbW5GYWN0b3J5LFxuICAgIGNhbnZhcyxcbiAgICBlbGVtZW50UmVnaXN0cnksXG4gICAgZXZlbnRCdXMsXG4gICAgaW5qZWN0b3IsXG4gICAgbW9kZGxlQ29weVxuKSB7XG4gIGluamVjdG9yLmludm9rZShDb21tYW5kSW50ZXJjZXB0b3IsIHRoaXMpO1xuXG4gIC8qKlxuICAgKiBHZXRzIHByb2Nlc3MgZGVmaW5pdGlvbnNcbiAgICpcbiAgICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gZGVmaW5pdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIGdldERlZmluaXRpb25zKCkge1xuICAgIHZhciByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpLFxuICAgICAgICBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KHJvb3RFbGVtZW50KTtcblxuICAgIHJldHVybiBidXNpbmVzc09iamVjdC4kcGFyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSByZWZlcmVuY2VkIGNhdGVnb3J5IHZhbHVlIGZvciBhIGdpdmVuIGdyb3VwIHNoYXBlXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBzaGFwZVxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlUmVmZXJlbmNlZENhdGVnb3J5VmFsdWUoc2hhcGUpIHtcblxuICAgIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KHNoYXBlKSxcbiAgICAgICAgY2F0ZWdvcnlWYWx1ZSA9IGJ1c2luZXNzT2JqZWN0LmNhdGVnb3J5VmFsdWVSZWY7XG5cbiAgICBpZiAoIWNhdGVnb3J5VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY2F0ZWdvcnkgPSBjYXRlZ29yeVZhbHVlLiRwYXJlbnQ7XG5cbiAgICBpZiAoIWNhdGVnb3J5VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb2xsZWN0aW9uUmVtb3ZlKGNhdGVnb3J5LmNhdGVnb3J5VmFsdWUsIGNhdGVnb3J5VmFsdWUpO1xuXG4gICAgLy8gY2xlYW51cCBjYXRlZ29yeSBpZiBpdCBpcyBlbXB0eVxuICAgIGlmIChjYXRlZ29yeSAmJiAhY2F0ZWdvcnkuY2F0ZWdvcnlWYWx1ZS5sZW5ndGgpIHtcbiAgICAgIHJlbW92ZUNhdGVnb3J5KGNhdGVnb3J5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGdpdmVuIGNhdGVnb3J5IGZyb20gdGhlIGRlZmluaXRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gY2F0ZWdvcnlcbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZUNhdGVnb3J5KGNhdGVnb3J5KSB7XG5cbiAgICB2YXIgZGVmaW5pdGlvbnMgPSBnZXREZWZpbml0aW9ucygpO1xuXG4gICAgY29sbGVjdGlvblJlbW92ZShkZWZpbml0aW9ucy5nZXQoJ3Jvb3RFbGVtZW50cycpLCBjYXRlZ29yeSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgZ3JvdXAgZWxlbWVudCBpbiB0aGUgY3VycmVudCByZWdpc3RyeVxuICAgKlxuICAgKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuc2hhcGU+fSBhIGxpc3Qgb2YgZ3JvdXAgc2hhcGVzXG4gICAqL1xuICBmdW5jdGlvbiBnZXRHcm91cEVsZW1lbnRzKCkge1xuICAgIHJldHVybiBlbGVtZW50UmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiBpcyhlLCAnYnBtbjpHcm91cCcpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBnaXZlbiBjYXRlZ29yeVZhbHVlIGlzIHJlZmVyZW5jZWQgaW4gb25lIG9mIHRoZSBnaXZlbiBlbGVtZW50c1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5zaGFwZT59IGVsZW1lbnRzXG4gICAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gY2F0ZWdvcnlWYWx1ZVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gaXNSZWZlcmVuY2VkKGVsZW1lbnRzLCBjYXRlZ29yeVZhbHVlKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRzLnNvbWUoZnVuY3Rpb24oZSkge1xuXG4gICAgICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlKTtcblxuICAgICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmNhdGVnb3J5VmFsdWVSZWZcbiAgICAgICAgJiYgYnVzaW5lc3NPYmplY3QuY2F0ZWdvcnlWYWx1ZVJlZiA9PT0gY2F0ZWdvcnlWYWx1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZW1vdmUgcmVmZXJlbmNlZCBjYXRlZ29yeSArIHZhbHVlIHdoZW4gZ3JvdXAgd2FzIGRlbGV0ZWRcbiAgICovXG4gIHRoaXMuZXhlY3V0ZWQoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46R3JvdXAnKSkge1xuXG4gICAgICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChzaGFwZSksXG4gICAgICAgICAgY2F0ZWdvcnlWYWx1ZVJlZiA9IGJ1c2luZXNzT2JqZWN0LmNhdGVnb3J5VmFsdWVSZWYsXG4gICAgICAgICAgZ3JvdXBFbGVtZW50cyA9IGdldEdyb3VwRWxlbWVudHMoKTtcblxuICAgICAgaWYgKCFpc1JlZmVyZW5jZWQoZ3JvdXBFbGVtZW50cywgY2F0ZWdvcnlWYWx1ZVJlZikpIHtcbiAgICAgICAgcmVtb3ZlUmVmZXJlbmNlZENhdGVnb3J5VmFsdWUoc2hhcGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIHJlLWF0dGFjaCByZW1vdmVkIGNhdGVnb3J5XG4gICAqL1xuICB0aGlzLnJldmVydGVkKCdzaGFwZS5kZWxldGUnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOkdyb3VwJykpIHtcblxuICAgICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpLFxuICAgICAgICAgIGNhdGVnb3J5VmFsdWVSZWYgPSBidXNpbmVzc09iamVjdC5jYXRlZ29yeVZhbHVlUmVmLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gZ2V0RGVmaW5pdGlvbnMoKSxcbiAgICAgICAgICBjYXRlZ29yeSA9IGNhdGVnb3J5VmFsdWVSZWYgPyBjYXRlZ29yeVZhbHVlUmVmLiRwYXJlbnQgOiBudWxsO1xuXG4gICAgICBjb2xsZWN0aW9uQWRkKGNhdGVnb3J5LmdldCgnY2F0ZWdvcnlWYWx1ZScpLCBjYXRlZ29yeVZhbHVlUmVmKTtcbiAgICAgIGNvbGxlY3Rpb25BZGQoZGVmaW5pdGlvbnMuZ2V0KCdyb290RWxlbWVudHMnKSwgY2F0ZWdvcnkpO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBuZXcgY2F0ZWdvcnkgKyB2YWx1ZSB3aGVuIGdyb3VwIHdhcyBjcmVhdGVkXG4gICAqL1xuICB0aGlzLmV4ZWN1dGUoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpO1xuXG4gICAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpHcm91cCcpICYmICFidXNpbmVzc09iamVjdC5jYXRlZ29yeVZhbHVlUmVmKSB7XG5cbiAgICAgIHZhciBkZWZpbml0aW9ucyA9IGdldERlZmluaXRpb25zKCksXG4gICAgICAgICAgY2F0ZWdvcnlWYWx1ZSA9IGNyZWF0ZUNhdGVnb3J5VmFsdWUoZGVmaW5pdGlvbnMsIGJwbW5GYWN0b3J5KTtcblxuICAgICAgLy8gbGluayB0aGUgcmVmZXJlbmNlIHRvIHRoZSBHcm91cFxuICAgICAgYnVzaW5lc3NPYmplY3QuY2F0ZWdvcnlWYWx1ZVJlZiA9IGNhdGVnb3J5VmFsdWU7XG4gICAgfVxuICB9KTtcblxuXG4gIHRoaXMucmV2ZXJ0KCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOkdyb3VwJykpIHtcbiAgICAgIHJlbW92ZVJlZmVyZW5jZWRDYXRlZ29yeVZhbHVlKHNoYXBlKTtcblxuICAgICAgZGVsZXRlIGdldEJ1c2luZXNzT2JqZWN0KHNoYXBlKS5jYXRlZ29yeVZhbHVlUmVmO1xuXG4gICAgfVxuICB9KTtcblxuICAvLyBjb3B5IGJwbW46Q2F0ZWdvcnlWYWx1ZSB3aGVuIGNvcHlpbmcgZWxlbWVudFxuICBldmVudEJ1cy5vbignbW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydHknLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHByb3BlcnR5ID0gY29udGV4dC5wcm9wZXJ0eSxcbiAgICAgICAgY2F0ZWdvcnlWYWx1ZTtcblxuICAgIGlmIChpcyhwcm9wZXJ0eSwgJ2JwbW46Q2F0ZWdvcnlWYWx1ZScpKSB7XG4gICAgICBjYXRlZ29yeVZhbHVlID0gY3JlYXRlQ2F0ZWdvcnlWYWx1ZShnZXREZWZpbml0aW9ucygpLCBicG1uRmFjdG9yeSk7XG5cbiAgICAgIC8vIHJldHVybiBjb3B5IG9mIGNhdGVnb3J5XG4gICAgICByZXR1cm4gbW9kZGxlQ29weS5jb3B5RWxlbWVudChwcm9wZXJ0eSwgY2F0ZWdvcnlWYWx1ZSk7XG4gICAgfVxuICB9KTtcblxufVxuXG5Hcm91cEJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdicG1uRmFjdG9yeScsXG4gICdjYW52YXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2luamVjdG9yJyxcbiAgJ21vZGRsZUNvcHknXG5dO1xuXG5pbmhlcml0cyhHcm91cEJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpOyIsImltcG9ydCB7XG4gIGdldE1pZFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCBsaW5lSW50ZXJzZWN0IGZyb20gJy4vdXRpbC9MaW5lSW50ZXJzZWN0JztcblxuXG4vKipcbiAqIEZpeCBicm9rZW4gZG9ja2luZ3MgYWZ0ZXIgREkgaW1wb3J0cy5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBJbXBvcnREb2NraW5nRml4KGV2ZW50QnVzKSB7XG5cbiAgZnVuY3Rpb24gYWRqdXN0RG9ja2luZyhzdGFydFBvaW50LCBuZXh0UG9pbnQsIGVsZW1lbnRNaWQpIHtcblxuICAgIHZhciBlbGVtZW50VG9wID0ge1xuICAgICAgeDogZWxlbWVudE1pZC54LFxuICAgICAgeTogZWxlbWVudE1pZC55IC0gNTBcbiAgICB9O1xuXG4gICAgdmFyIGVsZW1lbnRMZWZ0ID0ge1xuICAgICAgeDogZWxlbWVudE1pZC54IC0gNTAsXG4gICAgICB5OiBlbGVtZW50TWlkLnlcbiAgICB9O1xuXG4gICAgdmFyIHZlcnRpY2FsSW50ZXJzZWN0ID0gbGluZUludGVyc2VjdChzdGFydFBvaW50LCBuZXh0UG9pbnQsIGVsZW1lbnRNaWQsIGVsZW1lbnRUb3ApLFxuICAgICAgICBob3Jpem9udGFsSW50ZXJzZWN0ID0gbGluZUludGVyc2VjdChzdGFydFBvaW50LCBuZXh0UG9pbnQsIGVsZW1lbnRNaWQsIGVsZW1lbnRMZWZ0KTtcblxuICAgIC8vIG9yaWdpbmFsIGlzIGhvcml6b250YWwgb3IgdmVydGljYWwgY2VudGVyIGNyb3NzIGludGVyc2VjdGlvblxuICAgIHZhciBjZW50ZXJJbnRlcnNlY3Q7XG5cbiAgICBpZiAodmVydGljYWxJbnRlcnNlY3QgJiYgaG9yaXpvbnRhbEludGVyc2VjdCkge1xuICAgICAgaWYgKGdldERpc3RhbmNlKHZlcnRpY2FsSW50ZXJzZWN0LCBlbGVtZW50TWlkKSA+IGdldERpc3RhbmNlKGhvcml6b250YWxJbnRlcnNlY3QsIGVsZW1lbnRNaWQpKSB7XG4gICAgICAgIGNlbnRlckludGVyc2VjdCA9IGhvcml6b250YWxJbnRlcnNlY3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjZW50ZXJJbnRlcnNlY3QgPSB2ZXJ0aWNhbEludGVyc2VjdDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2VudGVySW50ZXJzZWN0ID0gdmVydGljYWxJbnRlcnNlY3QgfHwgaG9yaXpvbnRhbEludGVyc2VjdDtcbiAgICB9XG5cbiAgICBzdGFydFBvaW50Lm9yaWdpbmFsID0gY2VudGVySW50ZXJzZWN0O1xuICB9XG5cbiAgZnVuY3Rpb24gZml4RG9ja2luZ3MoY29ubmVjdGlvbikge1xuICAgIHZhciB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cztcblxuICAgIGFkanVzdERvY2tpbmcoXG4gICAgICB3YXlwb2ludHNbMF0sXG4gICAgICB3YXlwb2ludHNbMV0sXG4gICAgICBnZXRNaWQoY29ubmVjdGlvbi5zb3VyY2UpXG4gICAgKTtcblxuICAgIGFkanVzdERvY2tpbmcoXG4gICAgICB3YXlwb2ludHNbd2F5cG9pbnRzLmxlbmd0aCAtIDFdLFxuICAgICAgd2F5cG9pbnRzW3dheXBvaW50cy5sZW5ndGggLSAyXSxcbiAgICAgIGdldE1pZChjb25uZWN0aW9uLnRhcmdldClcbiAgICApO1xuICB9XG5cbiAgZXZlbnRCdXMub24oJ2JwbW5FbGVtZW50LmFkZGVkJywgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIGVsZW1lbnQgPSBlLmVsZW1lbnQ7XG5cbiAgICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcbiAgICAgIGZpeERvY2tpbmdzKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG59XG5cbkltcG9ydERvY2tpbmdGaXguJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJ1xuXTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0RGlzdGFuY2UocDEsIHAyKSB7XG4gIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3cocDEueCAtIHAyLngsIDIpICsgTWF0aC5wb3cocDEueSAtIHAyLnksIDIpKTtcbn0iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHtcbiAgZ2V0QnVzaW5lc3NPYmplY3Rcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0FueVxufSBmcm9tICcuLi91dGlsL01vZGVsaW5nVXRpbCc7XG5cbi8qKlxuICogQSBjb21wb25lbnQgdGhhdCBtYWtlcyBzdXJlIHRoYXQgZWFjaCBjcmVhdGVkIG9yIHVwZGF0ZWRcbiAqIFBvb2wgYW5kIExhbmUgaXMgYXNzaWduZWQgYW4gaXNIb3Jpem9udGFsIHByb3BlcnR5IHNldCB0byB0cnVlLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIElzSG9yaXpvbnRhbEZpeChldmVudEJ1cykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB2YXIgZWxlbWVudFR5cGVzVG9VcGRhdGUgPSBbXG4gICAgJ2JwbW46UGFydGljaXBhbnQnLFxuICAgICdicG1uOkxhbmUnXG4gIF07XG5cbiAgdGhpcy5leGVjdXRlZChbICdzaGFwZS5tb3ZlJywgJ3NoYXBlLmNyZWF0ZScsICdzaGFwZS5yZXNpemUnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZXZlbnQuY29udGV4dC5zaGFwZSk7XG5cbiAgICBpZiAoaXNBbnkoYm8sIGVsZW1lbnRUeXBlc1RvVXBkYXRlKSAmJiAhYm8uZGkuZ2V0KCdpc0hvcml6b250YWwnKSkge1xuXG4gICAgICAvLyBzZXQgYXR0cmlidXRlIGRpcmVjdGx5IHRvIGF2b2lkIG1vZGVsaW5nI3VwZGF0ZVByb3BlcnR5IHNpZGUgZWZmZWN0c1xuICAgICAgYm8uZGkuc2V0KCdpc0hvcml6b250YWwnLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuXG59XG5cbklzSG9yaXpvbnRhbEZpeC4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07XG5cbmluaGVyaXRzKElzSG9yaXpvbnRhbEZpeCwgQ29tbWFuZEludGVyY2VwdG9yKTtcbiIsImltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7XG4gIGlzLFxuICBnZXRCdXNpbmVzc09iamVjdFxufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzTGFiZWxFeHRlcm5hbCxcbiAgZ2V0RXh0ZXJuYWxMYWJlbE1pZCxcbiAgaGFzRXh0ZXJuYWxMYWJlbCxcbiAgaXNMYWJlbFxufSBmcm9tICcuLi8uLi8uLi91dGlsL0xhYmVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldExhYmVsXG59IGZyb20gJy4uLy4uL2xhYmVsLWVkaXRpbmcvTGFiZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0TGFiZWxBZGp1c3RtZW50XG59IGZyb20gJy4vdXRpbC9MYWJlbExheW91dFV0aWwnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHtcbiAgZ2V0TmV3QXR0YWNoUG9pbnRcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9BdHRhY2hVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0TWlkLFxuICByb3VuZFBvaW50XG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgZGVsdGFcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9Qb3NpdGlvblV0aWwnO1xuXG5pbXBvcnQge1xuICBzb3J0Qnlcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBnZXREaXN0YW5jZVBvaW50TGluZSxcbiAgcGVycGVuZGljdWxhckZvb3Rcbn0gZnJvbSAnLi91dGlsL0dlb21ldHJpY1V0aWwnO1xuXG52YXIgREVGQVVMVF9MQUJFTF9ESU1FTlNJT05TID0ge1xuICB3aWR0aDogOTAsXG4gIGhlaWdodDogMjBcbn07XG5cbnZhciBOQU1FX1BST1BFUlRZID0gJ25hbWUnO1xudmFyIFRFWFRfUFJPUEVSVFkgPSAndGV4dCc7XG5cbi8qKlxuICogQSBjb21wb25lbnQgdGhhdCBtYWtlcyBzdXJlIHRoYXQgZXh0ZXJuYWwgbGFiZWxzIGFyZSBhZGRlZFxuICogdG9nZXRoZXIgd2l0aCByZXNwZWN0aXZlIGVsZW1lbnRzIGFuZCBwcm9wZXJseSB1cGRhdGVkIChESSB3aXNlKVxuICogZHVyaW5nIG1vdmUuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICogQHBhcmFtIHtUZXh0UmVuZGVyZXJ9IHRleHRSZW5kZXJlclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMYWJlbEJlaGF2aW9yKFxuICAgIGV2ZW50QnVzLCBtb2RlbGluZywgYnBtbkZhY3RvcnksXG4gICAgdGV4dFJlbmRlcmVyKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIC8vIHVwZGF0ZSBsYWJlbCBpZiBuYW1lIHByb3BlcnR5IHdhcyB1cGRhdGVkXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlUHJvcGVydGllcycsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgcHJvcGVydGllcyA9IGNvbnRleHQucHJvcGVydGllcztcblxuICAgIGlmIChOQU1FX1BST1BFUlRZIGluIHByb3BlcnRpZXMpIHtcbiAgICAgIG1vZGVsaW5nLnVwZGF0ZUxhYmVsKGVsZW1lbnQsIHByb3BlcnRpZXNbTkFNRV9QUk9QRVJUWV0pO1xuICAgIH1cblxuICAgIGlmIChURVhUX1BST1BFUlRZIGluIHByb3BlcnRpZXNcbiAgICAgICAgJiYgaXMoZWxlbWVudCwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuXG4gICAgICB2YXIgbmV3Qm91bmRzID0gdGV4dFJlbmRlcmVyLmdldFRleHRBbm5vdGF0aW9uQm91bmRzKFxuICAgICAgICB7XG4gICAgICAgICAgeDogZWxlbWVudC54LFxuICAgICAgICAgIHk6IGVsZW1lbnQueSxcbiAgICAgICAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0XG4gICAgICAgIH0sXG4gICAgICAgIHByb3BlcnRpZXNbVEVYVF9QUk9QRVJUWV0gfHwgJydcbiAgICAgICk7XG5cbiAgICAgIG1vZGVsaW5nLnVwZGF0ZUxhYmVsKGVsZW1lbnQsIHByb3BlcnRpZXMudGV4dCwgbmV3Qm91bmRzKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGNyZWF0ZSBsYWJlbCBzaGFwZSBhZnRlciBzaGFwZS9jb25uZWN0aW9uIHdhcyBjcmVhdGVkXG4gIHRoaXMucG9zdEV4ZWN1dGUoWyAnc2hhcGUuY3JlYXRlJywgJ2Nvbm5lY3Rpb24uY3JlYXRlJyBdLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICAgIGlmIChoaW50cy5jcmVhdGVFbGVtZW50c0JlaGF2aW9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBlbGVtZW50ID0gY29udGV4dC5zaGFwZSB8fCBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIGJ1c2luZXNzT2JqZWN0ID0gZWxlbWVudC5idXNpbmVzc09iamVjdDtcblxuICAgIGlmIChpc0xhYmVsKGVsZW1lbnQpIHx8ICFpc0xhYmVsRXh0ZXJuYWwoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBvbmx5IGNyZWF0ZSBsYWJlbCBpZiBhdHRyaWJ1dGUgYXZhaWxhYmxlXG4gICAgaWYgKCFnZXRMYWJlbChlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYWJlbENlbnRlciA9IGdldEV4dGVybmFsTGFiZWxNaWQoZWxlbWVudCk7XG5cbiAgICAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IHggYW5kIHlcbiAgICB2YXIgbGFiZWxEaW1lbnNpb25zID0gdGV4dFJlbmRlcmVyLmdldEV4dGVybmFsTGFiZWxCb3VuZHMoXG4gICAgICBERUZBVUxUX0xBQkVMX0RJTUVOU0lPTlMsXG4gICAgICBnZXRMYWJlbChlbGVtZW50KVxuICAgICk7XG5cbiAgICBtb2RlbGluZy5jcmVhdGVMYWJlbChlbGVtZW50LCBsYWJlbENlbnRlciwge1xuICAgICAgaWQ6IGJ1c2luZXNzT2JqZWN0LmlkICsgJ19sYWJlbCcsXG4gICAgICBidXNpbmVzc09iamVjdDogYnVzaW5lc3NPYmplY3QsXG4gICAgICB3aWR0aDogbGFiZWxEaW1lbnNpb25zLndpZHRoLFxuICAgICAgaGVpZ2h0OiBsYWJlbERpbWVuc2lvbnMuaGVpZ2h0XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIHVwZGF0ZSBsYWJlbCBhZnRlciBsYWJlbCBzaGFwZSB3YXMgZGVsZXRlZFxuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5kZWxldGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgbGFiZWxUYXJnZXQgPSBjb250ZXh0LmxhYmVsVGFyZ2V0LFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge307XG5cbiAgICAvLyBjaGVjayBpZiBsYWJlbFxuICAgIGlmIChsYWJlbFRhcmdldCAmJiBoaW50cy51bnNldExhYmVsICE9PSBmYWxzZSkge1xuICAgICAgbW9kZWxpbmcudXBkYXRlTGFiZWwobGFiZWxUYXJnZXQsIG51bGwsIG51bGwsIHsgcmVtb3ZlU2hhcGU6IGZhbHNlIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gdXBkYXRlIGRpIGluZm9ybWF0aW9uIG9uIGxhYmVsIGNyZWF0aW9uXG4gIHRoaXMucG9zdEV4ZWN1dGUoWyAnbGFiZWwuY3JlYXRlJyBdLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBlbGVtZW50ID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIGRpO1xuXG4gICAgLy8gd2Ugd2FudCB0byB0cmlnZ2VyIG9uIHJlYWwgbGFiZWxzIG9ubHlcbiAgICBpZiAoIWVsZW1lbnQubGFiZWxUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB3ZSB3YW50IHRvIHRyaWdnZXIgb24gQlBNTiBlbGVtZW50cyBvbmx5XG4gICAgaWYgKCFpcyhlbGVtZW50LmxhYmVsVGFyZ2V0IHx8IGVsZW1lbnQsICdicG1uOkJhc2VFbGVtZW50JykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBidXNpbmVzc09iamVjdCA9IGVsZW1lbnQuYnVzaW5lc3NPYmplY3QsXG4gICAgZGkgPSBidXNpbmVzc09iamVjdC5kaTtcblxuXG4gICAgaWYgKCFkaS5sYWJlbCkge1xuICAgICAgZGkubGFiZWwgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW5kaTpCUE1OTGFiZWwnLCB7XG4gICAgICAgIGJvdW5kczogYnBtbkZhY3RvcnkuY3JlYXRlKCdkYzpCb3VuZHMnKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXNzaWduKGRpLmxhYmVsLmJvdW5kcywge1xuICAgICAgeDogZWxlbWVudC54LFxuICAgICAgeTogZWxlbWVudC55LFxuICAgICAgd2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0XG4gICAgfSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGdldFZpc2libGVMYWJlbEFkanVzdG1lbnQoZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgbGFiZWwgPSBjb25uZWN0aW9uLmxhYmVsLFxuICAgICAgICBoaW50cyA9IGFzc2lnbih7fSwgY29udGV4dC5oaW50cyksXG4gICAgICAgIG5ld1dheXBvaW50cyA9IGNvbnRleHQubmV3V2F5cG9pbnRzIHx8IGNvbm5lY3Rpb24ud2F5cG9pbnRzLFxuICAgICAgICBvbGRXYXlwb2ludHMgPSBjb250ZXh0Lm9sZFdheXBvaW50cztcblxuXG4gICAgaWYgKHR5cGVvZiBoaW50cy5zdGFydENoYW5nZWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaW50cy5zdGFydENoYW5nZWQgPSAhIWhpbnRzLmNvbm5lY3Rpb25TdGFydDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhpbnRzLmVuZENoYW5nZWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaW50cy5lbmRDaGFuZ2VkID0gISFoaW50cy5jb25uZWN0aW9uRW5kO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRMYWJlbEFkanVzdG1lbnQobGFiZWwsIG5ld1dheXBvaW50cywgb2xkV2F5cG9pbnRzLCBoaW50cyk7XG4gIH1cblxuICB0aGlzLnBvc3RFeGVjdXRlKFtcbiAgICAnY29ubmVjdGlvbi5sYXlvdXQnLFxuICAgICdjb25uZWN0aW9uLnVwZGF0ZVdheXBvaW50cydcbiAgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICAgIGlmIChoaW50cy5sYWJlbEJlaGF2aW9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBsYWJlbCA9IGNvbm5lY3Rpb24ubGFiZWwsXG4gICAgICAgIGxhYmVsQWRqdXN0bWVudDtcblxuICAgIC8vIGhhbmRsZSBtaXNzaW5nIGxhYmVsIGFzIHdlbGwgYXMgdGhlIGNhc2VcbiAgICAvLyB0aGF0IHRoZSBsYWJlbCBwYXJlbnQgZG9lcyBub3QgZXhpc3QgKHlldCksXG4gICAgLy8gYmVjYXVzZSBpdCBpcyBiZWluZyBwYXN0ZWQgLyBjcmVhdGVkIHZpYSBtdWx0aSBlbGVtZW50IGNyZWF0ZVxuICAgIC8vXG4gICAgLy8gQ2YuIGh0dHBzOi8vZ2l0aHViLmNvbS9icG1uLWlvL2JwbW4tanMvcHVsbC8xMjI3XG4gICAgaWYgKCFsYWJlbCB8fCAhbGFiZWwucGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGFiZWxBZGp1c3RtZW50ID0gZ2V0VmlzaWJsZUxhYmVsQWRqdXN0bWVudChldmVudCk7XG5cbiAgICBtb2RlbGluZy5tb3ZlU2hhcGUobGFiZWwsIGxhYmVsQWRqdXN0bWVudCk7XG4gIH0pO1xuXG5cbiAgLy8ga2VlcCBsYWJlbCBwb3NpdGlvbiBvbiBzaGFwZSByZXBsYWNlXG4gIHRoaXMucG9zdEV4ZWN1dGUoWyAnc2hhcGUucmVwbGFjZScgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIG5ld1NoYXBlID0gY29udGV4dC5uZXdTaGFwZSxcbiAgICAgICAgb2xkU2hhcGUgPSBjb250ZXh0Lm9sZFNoYXBlO1xuXG4gICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QobmV3U2hhcGUpO1xuXG4gICAgaWYgKGJ1c2luZXNzT2JqZWN0XG4gICAgICAmJiBpc0xhYmVsRXh0ZXJuYWwoYnVzaW5lc3NPYmplY3QpXG4gICAgICAmJiBvbGRTaGFwZS5sYWJlbFxuICAgICAgJiYgbmV3U2hhcGUubGFiZWwpIHtcbiAgICAgIG5ld1NoYXBlLmxhYmVsLnggPSBvbGRTaGFwZS5sYWJlbC54O1xuICAgICAgbmV3U2hhcGUubGFiZWwueSA9IG9sZFNoYXBlLmxhYmVsLnk7XG4gICAgfVxuICB9KTtcblxuXG4gIC8vIG1vdmUgZXh0ZXJuYWwgbGFiZWwgYWZ0ZXIgcmVzaXppbmdcbiAgdGhpcy5wb3N0RXhlY3V0ZSgnc2hhcGUucmVzaXplJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBuZXdCb3VuZHMgPSBjb250ZXh0Lm5ld0JvdW5kcyxcbiAgICAgICAgb2xkQm91bmRzID0gY29udGV4dC5vbGRCb3VuZHM7XG5cbiAgICBpZiAoaGFzRXh0ZXJuYWxMYWJlbChzaGFwZSkpIHtcblxuICAgICAgdmFyIGxhYmVsID0gc2hhcGUubGFiZWwsXG4gICAgICAgICAgbGFiZWxNaWQgPSBnZXRNaWQobGFiZWwpLFxuICAgICAgICAgIGVkZ2VzID0gYXNFZGdlcyhvbGRCb3VuZHMpO1xuXG4gICAgICAvLyBnZXQgbmVhcmVzdCBib3JkZXIgcG9pbnQgdG8gbGFiZWwgYXMgcmVmZXJlbmNlIHBvaW50XG4gICAgICB2YXIgcmVmZXJlbmNlUG9pbnQgPSBnZXRSZWZlcmVuY2VQb2ludChsYWJlbE1pZCwgZWRnZXMpO1xuXG4gICAgICB2YXIgZGVsdGEgPSBnZXRSZWZlcmVuY2VQb2ludERlbHRhKHJlZmVyZW5jZVBvaW50LCBvbGRCb3VuZHMsIG5ld0JvdW5kcyk7XG5cbiAgICAgIG1vZGVsaW5nLm1vdmVTaGFwZShsYWJlbCwgZGVsdGEpO1xuXG4gICAgfVxuXG4gIH0pO1xuXG59XG5cbmluaGVyaXRzKExhYmVsQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbkxhYmVsQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ2JwbW5GYWN0b3J5JyxcbiAgJ3RleHRSZW5kZXJlcidcbl07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgYSByZWZlcmVuY2UgcG9pbnQgZGVsdGEgcmVsYXRpdmUgdG8gYSBuZXcgcG9zaXRpb25cbiAqIG9mIGEgY2VydGFpbiBlbGVtZW50J3MgYm91bmRzXG4gKlxuICogQHBhcmFtIHtQb2ludH0gcG9pbnRcbiAqIEBwYXJhbSB7Qm91bmRzfSBvbGRCb3VuZHNcbiAqIEBwYXJhbSB7Qm91bmRzfSBuZXdCb3VuZHNcbiAqXG4gKiBAcmV0dXJuIHtEZWx0YX0gZGVsdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlZmVyZW5jZVBvaW50RGVsdGEocmVmZXJlbmNlUG9pbnQsIG9sZEJvdW5kcywgbmV3Qm91bmRzKSB7XG5cbiAgdmFyIG5ld1JlZmVyZW5jZVBvaW50ID0gZ2V0TmV3QXR0YWNoUG9pbnQocmVmZXJlbmNlUG9pbnQsIG9sZEJvdW5kcywgbmV3Qm91bmRzKTtcblxuICByZXR1cm4gcm91bmRQb2ludChkZWx0YShuZXdSZWZlcmVuY2VQb2ludCwgcmVmZXJlbmNlUG9pbnQpKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIG5lYXJlc3QgcG9pbnQgKHJlZmVyZW5jZSBwb2ludCkgZm9yIGEgZ2l2ZW4gcG9pbnRcbiAqIG9udG8gZ2l2ZW4gc2V0IG9mIGxpbmVzXG4gKlxuICogQHBhcmFtIHtBcnJheTxQb2ludCwgUG9pbnQ+fSBsaW5lc1xuICogQHBhcmFtIHtQb2ludH0gcG9pbnRcbiAqXG4gKiBAcGFyYW0ge1BvaW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVmZXJlbmNlUG9pbnQocG9pbnQsIGxpbmVzKSB7XG5cbiAgaWYgKCFsaW5lcy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbmVhcmVzdExpbmUgPSBnZXROZWFyZXN0TGluZShwb2ludCwgbGluZXMpO1xuXG4gIHJldHVybiBwZXJwZW5kaWN1bGFyRm9vdChwb2ludCwgbmVhcmVzdExpbmUpO1xufVxuXG4vKipcbiAqIENvbnZlcnQgdGhlIGdpdmVuIGJvdW5kcyB0byBhIGxpbmVzIGFycmF5IGNvbnRhaW5pbmcgYWxsIGVkZ2VzXG4gKlxuICogQHBhcmFtIHtCb3VuZHN8UG9pbnR9IGJvdW5kc1xuICpcbiAqIEByZXR1cm4gQXJyYXk8UG9pbnQ+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc0VkZ2VzKGJvdW5kcykge1xuICByZXR1cm4gW1xuICAgIFsgLy8gdG9wXG4gICAgICB7XG4gICAgICAgIHg6IGJvdW5kcy54LFxuICAgICAgICB5OiBib3VuZHMueVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgeDogYm91bmRzLnggKyAoYm91bmRzLndpZHRoIHx8IDApLFxuICAgICAgICB5OiBib3VuZHMueVxuICAgICAgfVxuICAgIF0sXG4gICAgWyAvLyByaWdodFxuICAgICAge1xuICAgICAgICB4OiBib3VuZHMueCArIChib3VuZHMud2lkdGggfHwgMCksXG4gICAgICAgIHk6IGJvdW5kcy55XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB4OiBib3VuZHMueCArIChib3VuZHMud2lkdGggfHwgMCksXG4gICAgICAgIHk6IGJvdW5kcy55ICsgKGJvdW5kcy5oZWlnaHQgfHwgMClcbiAgICAgIH1cbiAgICBdLFxuICAgIFsgLy8gYm90dG9tXG4gICAgICB7XG4gICAgICAgIHg6IGJvdW5kcy54LFxuICAgICAgICB5OiBib3VuZHMueSArIChib3VuZHMuaGVpZ2h0IHx8IDApXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB4OiBib3VuZHMueCArIChib3VuZHMud2lkdGggfHwgMCksXG4gICAgICAgIHk6IGJvdW5kcy55ICsgKGJvdW5kcy5oZWlnaHQgfHwgMClcbiAgICAgIH1cbiAgICBdLFxuICAgIFsgLy8gbGVmdFxuICAgICAge1xuICAgICAgICB4OiBib3VuZHMueCxcbiAgICAgICAgeTogYm91bmRzLnlcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHg6IGJvdW5kcy54LFxuICAgICAgICB5OiBib3VuZHMueSArIChib3VuZHMuaGVpZ2h0IHx8IDApXG4gICAgICB9XG4gICAgXVxuICBdO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG5lYXJlc3QgbGluZSBmb3IgYSBnaXZlbiBwb2ludCBieSBkaXN0YW5jZVxuICogQHBhcmFtIHtQb2ludH0gcG9pbnRcbiAqIEBwYXJhbSBBcnJheTxQb2ludD4gbGluZXNcbiAqXG4gKiBAcmV0dXJuIEFycmF5PFBvaW50PlxuICovXG5mdW5jdGlvbiBnZXROZWFyZXN0TGluZShwb2ludCwgbGluZXMpIHtcblxuICB2YXIgZGlzdGFuY2VzID0gbGluZXMubWFwKGZ1bmN0aW9uKGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbCxcbiAgICAgIGRpc3RhbmNlOiBnZXREaXN0YW5jZVBvaW50TGluZShwb2ludCwgbClcbiAgICB9O1xuICB9KTtcblxuICB2YXIgc29ydGVkID0gc29ydEJ5KGRpc3RhbmNlcywgJ2Rpc3RhbmNlJyk7XG5cbiAgcmV0dXJuIHNvcnRlZFswXS5saW5lO1xufVxuIiwiaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbnZhciBDT0xMQUJfRVJSX01TRyA9ICdmbG93IGVsZW1lbnRzIG11c3QgYmUgY2hpbGRyZW4gb2YgcG9vbHMvcGFydGljaXBhbnRzJyxcbiAgICBQUk9DRVNTX0VSUl9NU0cgPSAncGFydGljaXBhbnRzIGNhbm5vdCBiZSBwYXN0ZWQgb250byBhIG5vbi1lbXB0eSBwcm9jZXNzIGRpYWdyYW0nO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vZGVsaW5nRmVlZGJhY2soZXZlbnRCdXMsIHRvb2x0aXBzLCB0cmFuc2xhdGUpIHtcblxuICBmdW5jdGlvbiBzaG93RXJyb3IocG9zaXRpb24sIG1lc3NhZ2UsIHRpbWVvdXQpIHtcbiAgICB0b29sdGlwcy5hZGQoe1xuICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgeDogcG9zaXRpb24ueCArIDUsXG4gICAgICAgIHk6IHBvc2l0aW9uLnkgKyA1XG4gICAgICB9LFxuICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgIHRpbWVvdXQ6IHRpbWVvdXQgfHwgMjAwMCxcbiAgICAgIGh0bWw6ICc8ZGl2PicgKyBtZXNzYWdlICsgJzwvZGl2PidcbiAgICB9KTtcbiAgfVxuXG4gIGV2ZW50QnVzLm9uKFsgJ3NoYXBlLm1vdmUucmVqZWN0ZWQnLCAnY3JlYXRlLnJlamVjdGVkJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldDtcblxuICAgIGlmIChpcyh0YXJnZXQsICdicG1uOkNvbGxhYm9yYXRpb24nKSAmJiBpcyhzaGFwZSwgJ2JwbW46Rmxvd05vZGUnKSkge1xuICAgICAgc2hvd0Vycm9yKGV2ZW50LCB0cmFuc2xhdGUoQ09MTEFCX0VSUl9NU0cpKTtcbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKFsgJ2VsZW1lbnRzLnBhc3RlLnJlamVjdGVkJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgcG9zaXRpb24gPSBjb250ZXh0LnBvc2l0aW9uLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldDtcblxuICAgIGlmIChpcyh0YXJnZXQsICdicG1uOkNvbGxhYm9yYXRpb24nKSkge1xuICAgICAgc2hvd0Vycm9yKHBvc2l0aW9uLCB0cmFuc2xhdGUoQ09MTEFCX0VSUl9NU0cpKTtcbiAgICB9XG5cbiAgICBpZiAoaXModGFyZ2V0LCAnYnBtbjpQcm9jZXNzJykpIHtcbiAgICAgIHNob3dFcnJvcihwb3NpdGlvbiwgdHJhbnNsYXRlKFBST0NFU1NfRVJSX01TRyksIDMwMDApO1xuICAgIH1cbiAgfSk7XG59XG5cbk1vZGVsaW5nRmVlZGJhY2suJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ3Rvb2x0aXBzJyxcbiAgJ3RyYW5zbGF0ZSdcbl07XG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCBsaW5lSW50ZXJzZWN0IGZyb20gJy4vdXRpbC9MaW5lSW50ZXJzZWN0JztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZW1vdmVFbGVtZW50QmVoYXZpb3IoZXZlbnRCdXMsIGJwbW5SdWxlcywgbW9kZWxpbmcpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgLyoqXG4gICAqIENvbWJpbmUgc2VxdWVuY2UgZmxvd3Mgd2hlbiBkZWxldGluZyBhbiBlbGVtZW50XG4gICAqIGlmIHRoZXJlIGlzIG9uZSBpbmNvbWluZyBhbmQgb25lIG91dGdvaW5nXG4gICAqIHNlcXVlbmNlIGZsb3dcbiAgICovXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuZGVsZXRlJywgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIHNoYXBlID0gZS5jb250ZXh0LnNoYXBlO1xuXG4gICAgLy8gb25seSBoYW5kbGUgW2FdIC0+IFtzaGFwZV0gLT4gW2JdIHBhdHRlcm5zXG4gICAgaWYgKHNoYXBlLmluY29taW5nLmxlbmd0aCAhPT0gMSB8fCBzaGFwZS5vdXRnb2luZy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW5Db25uZWN0aW9uID0gc2hhcGUuaW5jb21pbmdbMF0sXG4gICAgICAgIG91dENvbm5lY3Rpb24gPSBzaGFwZS5vdXRnb2luZ1swXTtcblxuICAgIC8vIG9ubHkgaGFuZGxlIHNlcXVlbmNlIGZsb3dzXG4gICAgaWYgKCFpcyhpbkNvbm5lY3Rpb24sICdicG1uOlNlcXVlbmNlRmxvdycpIHx8ICFpcyhvdXRDb25uZWN0aW9uLCAnYnBtbjpTZXF1ZW5jZUZsb3cnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChicG1uUnVsZXMuY2FuQ29ubmVjdChpbkNvbm5lY3Rpb24uc291cmNlLCBvdXRDb25uZWN0aW9uLnRhcmdldCwgaW5Db25uZWN0aW9uKSkge1xuXG4gICAgICAvLyBjb21wdXRlIG5ldywgY29tYmluZWQgd2F5cG9pbnRzXG4gICAgICB2YXIgbmV3V2F5cG9pbnRzID0gZ2V0TmV3V2F5cG9pbnRzKGluQ29ubmVjdGlvbi53YXlwb2ludHMsIG91dENvbm5lY3Rpb24ud2F5cG9pbnRzKTtcblxuICAgICAgbW9kZWxpbmcucmVjb25uZWN0RW5kKGluQ29ubmVjdGlvbiwgb3V0Q29ubmVjdGlvbi50YXJnZXQsIG5ld1dheXBvaW50cyk7XG4gICAgfVxuICB9KTtcblxufVxuXG5pbmhlcml0cyhSZW1vdmVFbGVtZW50QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cblJlbW92ZUVsZW1lbnRCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnYnBtblJ1bGVzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0RG9ja2luZyhwb2ludCkge1xuICByZXR1cm4gcG9pbnQub3JpZ2luYWwgfHwgcG9pbnQ7XG59XG5cblxuZnVuY3Rpb24gZ2V0TmV3V2F5cG9pbnRzKGluV2F5cG9pbnRzLCBvdXRXYXlwb2ludHMpIHtcblxuICB2YXIgaW50ZXJzZWN0aW9uID0gbGluZUludGVyc2VjdChcbiAgICBnZXREb2NraW5nKGluV2F5cG9pbnRzW2luV2F5cG9pbnRzLmxlbmd0aCAtIDJdKSxcbiAgICBnZXREb2NraW5nKGluV2F5cG9pbnRzW2luV2F5cG9pbnRzLmxlbmd0aCAtIDFdKSxcbiAgICBnZXREb2NraW5nKG91dFdheXBvaW50c1sxXSksXG4gICAgZ2V0RG9ja2luZyhvdXRXYXlwb2ludHNbMF0pKTtcblxuICBpZiAoaW50ZXJzZWN0aW9uKSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdChcbiAgICAgIGluV2F5cG9pbnRzLnNsaWNlKDAsIGluV2F5cG9pbnRzLmxlbmd0aCAtIDEpLFxuICAgICAgWyBpbnRlcnNlY3Rpb24gXSxcbiAgICAgIG91dFdheXBvaW50cy5zbGljZSgxKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGdldERvY2tpbmcoaW5XYXlwb2ludHNbMF0pLFxuICAgICAgZ2V0RG9ja2luZyhvdXRXYXlwb2ludHNbb3V0V2F5cG9pbnRzLmxlbmd0aCAtIDFdKVxuICAgIF07XG4gIH1cbn0iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cblxuLyoqXG4gKiBCUE1OIHNwZWNpZmljIHJlbW92ZSBiZWhhdmlvclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZW1vdmVQYXJ0aWNpcGFudEJlaGF2aW9yKGV2ZW50QnVzLCBtb2RlbGluZykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuXG4gIC8qKlxuICAgKiBtb3JwaCBjb2xsYWJvcmF0aW9uIGRpYWdyYW0gaW50byBwcm9jZXNzIGRpYWdyYW1cbiAgICogYWZ0ZXIgdGhlIGxhc3QgcGFydGljaXBhbnQgaGFzIGJlZW4gcmVtb3ZlZFxuICAgKi9cblxuICB0aGlzLnByZUV4ZWN1dGUoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIHBhcmVudCA9IHNoYXBlLnBhcmVudDtcblxuICAgIC8vIGFjdGl2YXRlIHRoZSBiZWhhdmlvciBpZiB0aGUgc2hhcGUgdG8gYmUgcmVtb3ZlZFxuICAgIC8vIGlzIGEgcGFydGljaXBhbnRcbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICAgIGNvbnRleHQuY29sbGFib3JhdGlvblJvb3QgPSBwYXJlbnQ7XG4gICAgfVxuICB9LCB0cnVlKTtcblxuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5kZWxldGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgY29sbGFib3JhdGlvblJvb3QgPSBjb250ZXh0LmNvbGxhYm9yYXRpb25Sb290O1xuXG4gICAgaWYgKGNvbGxhYm9yYXRpb25Sb290ICYmICFjb2xsYWJvcmF0aW9uUm9vdC5idXNpbmVzc09iamVjdC5wYXJ0aWNpcGFudHMubGVuZ3RoKSB7XG5cbiAgICAgIC8vIHJlcGxhY2UgZW1wdHkgY29sbGFib3JhdGlvbiB3aXRoIHByb2Nlc3MgZGlhZ3JhbVxuICAgICAgbW9kZWxpbmcubWFrZVByb2Nlc3MoKTtcbiAgICB9XG4gIH0sIHRydWUpO1xuXG59XG5cblJlbW92ZVBhcnRpY2lwYW50QmVoYXZpb3IuJGluamVjdCA9IFsgJ2V2ZW50QnVzJywgJ21vZGVsaW5nJyBdO1xuXG5pbmhlcml0cyhSZW1vdmVQYXJ0aWNpcGFudEJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpOyIsImltcG9ydCB7XG4gIGZvckVhY2gsXG4gIGZpbmQsXG4gIG1hdGNoUGF0dGVyblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yKGV2ZW50QnVzLCBtb2RlbGluZywgYnBtblJ1bGVzLCBpbmplY3Rvcikge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB2YXIgZHJhZ2dpbmcgPSBpbmplY3Rvci5nZXQoJ2RyYWdnaW5nJywgZmFsc2UpO1xuXG4gIGZ1bmN0aW9uIGZpeENvbm5lY3Rpb24oY29ubmVjdGlvbikge1xuXG4gICAgdmFyIHNvdXJjZSA9IGNvbm5lY3Rpb24uc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb25uZWN0aW9uLnRhcmdldCxcbiAgICAgICAgcGFyZW50ID0gY29ubmVjdGlvbi5wYXJlbnQ7XG5cbiAgICAvLyBkbyBub3QgZG8gYW55dGhpbmcgaWYgY29ubmVjdGlvblxuICAgIC8vIGlzIGFscmVhZHkgZGVsZXRlZCAobWF5IGhhcHBlbiBkdWUgdG8gb3RoZXJcbiAgICAvLyBiZWhhdmlvcnMgcGx1Z2dlZC1pbiBiZWZvcmUpXG4gICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcmVwbGFjZW1lbnRUeXBlLFxuICAgICAgICByZW1vdmU7XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBpbmNvbWluZyBvciBvdXRnb2luZyBjb25uZWN0aW9uc1xuICAgICAqIGNhbiBzdGF5IG9yIGNvdWxkIGJlIHN1YnN0aXR1dGVkIHdpdGggYW5cbiAgICAgKiBhcHByb3ByaWF0ZSByZXBsYWNlbWVudC5cbiAgICAgKlxuICAgICAqIFRoaXMgaG9sZHMgdHJ1ZSBmb3IgU2VxdWVuY2VGbG93IDw+IE1lc3NhZ2VGbG93LlxuICAgICAqL1xuXG4gICAgaWYgKGlzKGNvbm5lY3Rpb24sICdicG1uOlNlcXVlbmNlRmxvdycpKSB7XG4gICAgICBpZiAoIWJwbW5SdWxlcy5jYW5Db25uZWN0U2VxdWVuY2VGbG93KHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgICAgICByZW1vdmUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoYnBtblJ1bGVzLmNhbkNvbm5lY3RNZXNzYWdlRmxvdyhzb3VyY2UsIHRhcmdldCkpIHtcbiAgICAgICAgcmVwbGFjZW1lbnRUeXBlID0gJ2JwbW46TWVzc2FnZUZsb3cnO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRyYW5zZm9ybSBtZXNzYWdlIGZsb3dzIGludG8gc2VxdWVuY2UgZmxvd3MsIGlmIHBvc3NpYmxlXG5cbiAgICBpZiAoaXMoY29ubmVjdGlvbiwgJ2JwbW46TWVzc2FnZUZsb3cnKSkge1xuXG4gICAgICBpZiAoIWJwbW5SdWxlcy5jYW5Db25uZWN0TWVzc2FnZUZsb3coc291cmNlLCB0YXJnZXQpKSB7XG4gICAgICAgIHJlbW92ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChicG1uUnVsZXMuY2FuQ29ubmVjdFNlcXVlbmNlRmxvdyhzb3VyY2UsIHRhcmdldCkpIHtcbiAgICAgICAgcmVwbGFjZW1lbnRUeXBlID0gJ2JwbW46U2VxdWVuY2VGbG93JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXMoY29ubmVjdGlvbiwgJ2JwbW46QXNzb2NpYXRpb24nKSAmJiAhYnBtblJ1bGVzLmNhbkNvbm5lY3RBc3NvY2lhdGlvbihzb3VyY2UsIHRhcmdldCkpIHtcbiAgICAgIHJlbW92ZSA9IHRydWU7XG4gICAgfVxuXG5cbiAgICAvLyByZW1vdmUgaW52YWxpZCBjb25uZWN0aW9uLFxuICAgIC8vIHVubGVzcyBpdCBoYXMgYmVlbiByZW1vdmVkIGFscmVhZHlcbiAgICBpZiAocmVtb3ZlKSB7XG4gICAgICBtb2RlbGluZy5yZW1vdmVDb25uZWN0aW9uKGNvbm5lY3Rpb24pO1xuICAgIH1cblxuICAgIC8vIHJlcGxhY2UgU2VxdWVuY2VGbG93IDw+IE1lc3NhZ2VGbG93XG5cbiAgICBpZiAocmVwbGFjZW1lbnRUeXBlKSB7XG4gICAgICBtb2RlbGluZy5jb25uZWN0KHNvdXJjZSwgdGFyZ2V0LCB7XG4gICAgICAgIHR5cGU6IHJlcGxhY2VtZW50VHlwZSxcbiAgICAgICAgd2F5cG9pbnRzOiBjb25uZWN0aW9uLndheXBvaW50cy5zbGljZSgpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZXBsYWNlUmVjb25uZWN0ZWRDb25uZWN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIHNvdXJjZSA9IGNvbnRleHQubmV3U291cmNlIHx8IGNvbm5lY3Rpb24uc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0Lm5ld1RhcmdldCB8fCBjb25uZWN0aW9uLnRhcmdldCxcbiAgICAgICAgYWxsb3dlZCxcbiAgICAgICAgcmVwbGFjZW1lbnQ7XG5cbiAgICBhbGxvd2VkID0gYnBtblJ1bGVzLmNhbkNvbm5lY3Qoc291cmNlLCB0YXJnZXQpO1xuXG4gICAgaWYgKCFhbGxvd2VkIHx8IGFsbG93ZWQudHlwZSA9PT0gY29ubmVjdGlvbi50eXBlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVwbGFjZW1lbnQgPSBtb2RlbGluZy5jb25uZWN0KHNvdXJjZSwgdGFyZ2V0LCB7XG4gICAgICB0eXBlOiBhbGxvd2VkLnR5cGUsXG4gICAgICB3YXlwb2ludHM6IGNvbm5lY3Rpb24ud2F5cG9pbnRzLnNsaWNlKClcbiAgICB9KTtcblxuICAgIC8vIHJlbW92ZSBvbGQgY29ubmVjdGlvblxuICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7XG5cbiAgICAvLyByZXBsYWNlIGNvbm5lY3Rpb24gaW4gY29udGV4dCB0byByZWNvbm5lY3QgZW5kL3N0YXJ0XG4gICAgY29udGV4dC5jb25uZWN0aW9uID0gcmVwbGFjZW1lbnQ7XG5cbiAgICBpZiAoZHJhZ2dpbmcpIHtcbiAgICAgIGNsZWFuRHJhZ2dpbmdTZWxlY3Rpb24oY29ubmVjdGlvbiwgcmVwbGFjZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG1vbmtleS1wYXRjaCBzZWxlY3Rpb24gc2F2ZWQgaW4gZHJhZ2dpbmcgaW4gb3JkZXIgdG8gcmUtc2VsZWN0IGl0IHdoZW4gb3BlcmF0aW9uIGlzIGZpbmlzaGVkXG4gIGZ1bmN0aW9uIGNsZWFuRHJhZ2dpbmdTZWxlY3Rpb24ob2xkQ29ubmVjdGlvbiwgbmV3Q29ubmVjdGlvbikge1xuICAgIHZhciBjb250ZXh0ID0gZHJhZ2dpbmcuY29udGV4dCgpLFxuICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IGNvbnRleHQgJiYgY29udGV4dC5wYXlsb2FkLnByZXZpb3VzU2VsZWN0aW9uLFxuICAgICAgICBpbmRleDtcblxuICAgIC8vIGRvIG5vdGhpbmcgaWYgbm90IGRyYWdnaW5nIG9yIG5vIHNlbGVjdGlvbiB3YXMgcHJlc2VudFxuICAgIGlmICghcHJldmlvdXNTZWxlY3Rpb24gfHwgIXByZXZpb3VzU2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGluZGV4ID0gcHJldmlvdXNTZWxlY3Rpb24uaW5kZXhPZihvbGRDb25uZWN0aW9uKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcmV2aW91c1NlbGVjdGlvbi5zcGxpY2UoaW5kZXgsIDEsIG5ld0Nvbm5lY3Rpb24pO1xuICB9XG5cbiAgLy8gbGlmZWN5Y2xlIGhvb2tzXG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ2VsZW1lbnRzLm1vdmUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgY2xvc3VyZSA9IGNvbnRleHQuY2xvc3VyZSxcbiAgICAgICAgYWxsQ29ubmVjdGlvbnMgPSBjbG9zdXJlLmFsbENvbm5lY3Rpb25zO1xuXG4gICAgZm9yRWFjaChhbGxDb25uZWN0aW9ucywgZml4Q29ubmVjdGlvbik7XG4gIH0sIHRydWUpO1xuXG4gIHRoaXMucHJlRXhlY3V0ZSgnY29ubmVjdGlvbi5yZWNvbm5lY3QnLCByZXBsYWNlUmVjb25uZWN0ZWRDb25uZWN0aW9uKTtcblxuICB0aGlzLnBvc3RFeGVjdXRlZCgnZWxlbWVudC51cGRhdGVQcm9wZXJ0aWVzJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHByb3BlcnRpZXMgPSBjb250ZXh0LnByb3BlcnRpZXMsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICAgIGJ1c2luZXNzT2JqZWN0ID0gZWxlbWVudC5idXNpbmVzc09iamVjdCxcbiAgICAgICAgY29ubmVjdGlvbjtcblxuICAgIC8vIHJlbW92ZSBjb25kaXRpb24gb24gY2hhbmdlIHRvIGRlZmF1bHRcbiAgICBpZiAocHJvcGVydGllcy5kZWZhdWx0KSB7XG4gICAgICBjb25uZWN0aW9uID0gZmluZChcbiAgICAgICAgZWxlbWVudC5vdXRnb2luZyxcbiAgICAgICAgbWF0Y2hQYXR0ZXJuKHsgaWQ6IGVsZW1lbnQuYnVzaW5lc3NPYmplY3QuZGVmYXVsdC5pZCB9KVxuICAgICAgKTtcblxuICAgICAgaWYgKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhjb25uZWN0aW9uLCB7IGNvbmRpdGlvbkV4cHJlc3Npb246IHVuZGVmaW5lZCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZW1vdmUgZGVmYXVsdCBmcm9tIHNvdXJjZSBvbiBjaGFuZ2UgdG8gY29uZGl0aW9uYWxcbiAgICBpZiAocHJvcGVydGllcy5jb25kaXRpb25FeHByZXNzaW9uICYmIGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZi5kZWZhdWx0ID09PSBidXNpbmVzc09iamVjdCkge1xuICAgICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LnNvdXJjZSwgeyBkZWZhdWx0OiB1bmRlZmluZWQgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuaW5oZXJpdHMoUmVwbGFjZUNvbm5lY3Rpb25CZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuUmVwbGFjZUNvbm5lY3Rpb25CZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnLFxuICAnYnBtblJ1bGVzJyxcbiAgJ2luamVjdG9yJ1xuXTtcbiIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7IGZvckVhY2ggfSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBpc0V2ZW50U3ViUHJvY2VzcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvRGlVdGlsJztcblxuXG4vKipcbiAqIEJQTU4tc3BlY2lmaWMgcmVwbGFjZSBiZWhhdmlvci5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVwbGFjZUVsZW1lbnRCZWhhdmlvdXIoXG4gICAgYnBtblJlcGxhY2UsXG4gICAgYnBtblJ1bGVzLFxuICAgIGVsZW1lbnRSZWdpc3RyeSxcbiAgICBpbmplY3RvcixcbiAgICBtb2RlbGluZyxcbiAgICBzZWxlY3Rpb25cbikge1xuICBpbmplY3Rvci5pbnZva2UoQ29tbWFuZEludGVyY2VwdG9yLCB0aGlzKTtcblxuICB0aGlzLl9icG1uUmVwbGFjZSA9IGJwbW5SZXBsYWNlO1xuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG4gIHRoaXMuX3NlbGVjdGlvbiA9IHNlbGVjdGlvbjtcblxuICAvLyByZXBsYWNlIGVsZW1lbnRzIG9uIG1vdmVcbiAgdGhpcy5wb3N0RXhlY3V0ZWQoWyAnZWxlbWVudHMubW92ZScgXSwgNTAwLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC5uZXdQYXJlbnQsXG4gICAgICAgIG5ld0hvc3QgPSBjb250ZXh0Lm5ld0hvc3QsXG4gICAgICAgIGVsZW1lbnRzID0gW107XG5cbiAgICBmb3JFYWNoKGNvbnRleHQuY2xvc3VyZS50b3BMZXZlbCwgZnVuY3Rpb24odG9wTGV2ZWxFbGVtZW50cykge1xuICAgICAgaWYgKGlzRXZlbnRTdWJQcm9jZXNzKHRvcExldmVsRWxlbWVudHMpKSB7XG4gICAgICAgIGVsZW1lbnRzID0gZWxlbWVudHMuY29uY2F0KHRvcExldmVsRWxlbWVudHMuY2hpbGRyZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudHMgPSBlbGVtZW50cy5jb25jYXQodG9wTGV2ZWxFbGVtZW50cyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBzZXQgdGFyZ2V0IHRvIGhvc3QgaWYgYXR0YWNoaW5nXG4gICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiBuZXdIb3N0KSB7XG4gICAgICB0YXJnZXQgPSBuZXdIb3N0O1xuICAgIH1cblxuICAgIHZhciBjYW5SZXBsYWNlID0gYnBtblJ1bGVzLmNhblJlcGxhY2UoZWxlbWVudHMsIHRhcmdldCk7XG5cbiAgICBpZiAoY2FuUmVwbGFjZSkge1xuICAgICAgdGhpcy5yZXBsYWNlRWxlbWVudHMoZWxlbWVudHMsIGNhblJlcGxhY2UucmVwbGFjZW1lbnRzLCBuZXdIb3N0KTtcbiAgICB9XG4gIH0sIHRoaXMpO1xuXG4gIC8vIHVwZGF0ZSBhdHRhY2htZW50cyBvbiBob3N0IHJlcGxhY2VcbiAgdGhpcy5wb3N0RXhlY3V0ZShbICdzaGFwZS5yZXBsYWNlJyBdLCAxNTAwLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIG9sZFNoYXBlID0gY29udGV4dC5vbGRTaGFwZSxcbiAgICAgICAgbmV3U2hhcGUgPSBjb250ZXh0Lm5ld1NoYXBlLFxuICAgICAgICBhdHRhY2hlcnMgPSBvbGRTaGFwZS5hdHRhY2hlcnMsXG4gICAgICAgIGNhblJlcGxhY2U7XG5cbiAgICBpZiAoYXR0YWNoZXJzICYmIGF0dGFjaGVycy5sZW5ndGgpIHtcbiAgICAgIGNhblJlcGxhY2UgPSBicG1uUnVsZXMuY2FuUmVwbGFjZShhdHRhY2hlcnMsIG5ld1NoYXBlKTtcblxuICAgICAgdGhpcy5yZXBsYWNlRWxlbWVudHMoYXR0YWNoZXJzLCBjYW5SZXBsYWNlLnJlcGxhY2VtZW50cyk7XG4gICAgfVxuXG4gIH0sIHRoaXMpO1xuXG4gIC8vIGtlZXAgSUQgb24gc2hhcGUgcmVwbGFjZVxuICB0aGlzLnBvc3RFeGVjdXRlZChbICdzaGFwZS5yZXBsYWNlJyBdLCAxNTAwLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIG9sZFNoYXBlID0gY29udGV4dC5vbGRTaGFwZSxcbiAgICAgICAgbmV3U2hhcGUgPSBjb250ZXh0Lm5ld1NoYXBlO1xuXG4gICAgbW9kZWxpbmcudW5jbGFpbUlkKG9sZFNoYXBlLmJ1c2luZXNzT2JqZWN0LmlkLCBvbGRTaGFwZS5idXNpbmVzc09iamVjdCk7XG4gICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhuZXdTaGFwZSwgeyBpZDogb2xkU2hhcGUuaWQgfSk7XG4gIH0pO1xufVxuXG5pbmhlcml0cyhSZXBsYWNlRWxlbWVudEJlaGF2aW91ciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuUmVwbGFjZUVsZW1lbnRCZWhhdmlvdXIucHJvdG90eXBlLnJlcGxhY2VFbGVtZW50cyA9IGZ1bmN0aW9uKGVsZW1lbnRzLCBuZXdFbGVtZW50cykge1xuICB2YXIgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LFxuICAgICAgYnBtblJlcGxhY2UgPSB0aGlzLl9icG1uUmVwbGFjZSxcbiAgICAgIHNlbGVjdGlvbiA9IHRoaXMuX3NlbGVjdGlvbjtcblxuICBmb3JFYWNoKG5ld0VsZW1lbnRzLCBmdW5jdGlvbihyZXBsYWNlbWVudCkge1xuICAgIHZhciBuZXdFbGVtZW50ID0ge1xuICAgICAgdHlwZTogcmVwbGFjZW1lbnQubmV3RWxlbWVudFR5cGVcbiAgICB9O1xuXG4gICAgdmFyIG9sZEVsZW1lbnQgPSBlbGVtZW50UmVnaXN0cnkuZ2V0KHJlcGxhY2VtZW50Lm9sZEVsZW1lbnRJZCk7XG5cbiAgICB2YXIgaWR4ID0gZWxlbWVudHMuaW5kZXhPZihvbGRFbGVtZW50KTtcblxuICAgIGVsZW1lbnRzW2lkeF0gPSBicG1uUmVwbGFjZS5yZXBsYWNlRWxlbWVudChvbGRFbGVtZW50LCBuZXdFbGVtZW50LCB7IHNlbGVjdDogZmFsc2UgfSk7XG4gIH0pO1xuXG4gIGlmIChuZXdFbGVtZW50cykge1xuICAgIHNlbGVjdGlvbi5zZWxlY3QoZWxlbWVudHMpO1xuICB9XG59O1xuXG5SZXBsYWNlRWxlbWVudEJlaGF2aW91ci4kaW5qZWN0ID0gW1xuICAnYnBtblJlcGxhY2UnLFxuICAnYnBtblJ1bGVzJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdpbmplY3RvcicsXG4gICdtb2RlbGluZycsXG4gICdzZWxlY3Rpb24nXG5dO1xuIiwiaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBpc0V4cGFuZGVkIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9EaVV0aWwnO1xyXG5cclxuaW1wb3J0IHsgZ2V0UGFydGljaXBhbnRSZXNpemVDb25zdHJhaW50cyB9IGZyb20gJy4vdXRpbC9SZXNpemVVdGlsJztcclxuXHJcbnZhciBISUdIX1BSSU9SSVRZID0gMTUwMDtcclxuXHJcbmV4cG9ydCB2YXIgTEFORV9NSU5fRElNRU5TSU9OUyA9IHsgd2lkdGg6IDMwMCwgaGVpZ2h0OiA2MCB9O1xyXG5cclxuZXhwb3J0IHZhciBQQVJUSUNJUEFOVF9NSU5fRElNRU5TSU9OUyA9IHsgd2lkdGg6IDMwMCwgaGVpZ2h0OiAxNTAgfTtcclxuXHJcbmV4cG9ydCB2YXIgU1VCX1BST0NFU1NfTUlOX0RJTUVOU0lPTlMgPSB7IHdpZHRoOiAxNDAsIGhlaWdodDogMTIwIH07XHJcblxyXG5leHBvcnQgdmFyIFRFWFRfQU5OT1RBVElPTl9NSU5fRElNRU5TSU9OUyA9IHsgd2lkdGg6IDUwLCBoZWlnaHQ6IDMwIH07XHJcblxyXG5cclxuLyoqXHJcbiAqIFNldCBtaW5pbXVtIGJvdW5kcy9yZXNpemUgY29uc3RyYWludHMgb24gcmVzaXplLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzaXplQmVoYXZpb3IoZXZlbnRCdXMpIHtcclxuICBldmVudEJ1cy5vbigncmVzaXplLnN0YXJ0JywgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXHJcbiAgICAgICAgZGlyZWN0aW9uID0gY29udGV4dC5kaXJlY3Rpb24sXHJcbiAgICAgICAgYmFsYW5jZWQgPSBjb250ZXh0LmJhbGFuY2VkO1xyXG5cclxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46TGFuZScpIHx8IGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XHJcbiAgICAgIGNvbnRleHQucmVzaXplQ29uc3RyYWludHMgPSBnZXRQYXJ0aWNpcGFudFJlc2l6ZUNvbnN0cmFpbnRzKHNoYXBlLCBkaXJlY3Rpb24sIGJhbGFuY2VkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOlBhcnRpY2lwYW50JykpIHtcclxuICAgICAgY29udGV4dC5taW5EaW1lbnNpb25zID0gUEFSVElDSVBBTlRfTUlOX0RJTUVOU0lPTlM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgaXNFeHBhbmRlZChzaGFwZSkpIHtcclxuICAgICAgY29udGV4dC5taW5EaW1lbnNpb25zID0gU1VCX1BST0NFU1NfTUlOX0RJTUVOU0lPTlM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XHJcbiAgICAgIGNvbnRleHQubWluRGltZW5zaW9ucyA9IFRFWFRfQU5OT1RBVElPTl9NSU5fRElNRU5TSU9OUztcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuUmVzaXplQmVoYXZpb3IuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdOyIsImltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICByb3VuZEJvdW5kc1xufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIGhhc1ByaW1hcnlNb2RpZmllclxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL01vdXNlJztcblxudmFyIFNMSUdIVExZX0hJR0hFUl9QUklPUklUWSA9IDEwMDE7XG5cblxuLyoqXG4gKiBJbnZva2Uge0BsaW5rIE1vZGVsaW5nI3Jlc2l6ZUxhbmV9IGluc3RlYWQgb2ZcbiAqIHtAbGluayBNb2RlbGluZyNyZXNpemVTaGFwZX0gd2hlbiByZXNpemluZyBhIExhbmVcbiAqIG9yIFBhcnRpY2lwYW50IHNoYXBlLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXNpemVMYW5lQmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nKSB7XG5cbiAgZXZlbnRCdXMub24oJ3Jlc2l6ZS5zdGFydCcsIFNMSUdIVExZX0hJR0hFUl9QUklPUklUWSArIDUwMCwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46TGFuZScpIHx8IGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG5cbiAgICAgIC8vIHNob3VsZCB3ZSByZXNpemUgdGhlIG9wcG9zaXRlIGxhbmUocykgaW5cbiAgICAgIC8vIG9yZGVyIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSByZXNpemUgb3BlcmF0aW9uP1xuICAgICAgY29udGV4dC5iYWxhbmNlZCA9ICFoYXNQcmltYXJ5TW9kaWZpZXIoZXZlbnQpO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIEludGVyY2VwdCByZXNpemUgZW5kIGFuZCBjYWxsIHJlc2l6ZSBsYW5lIGZ1bmN0aW9uIGluc3RlYWQuXG4gICAqL1xuICBldmVudEJ1cy5vbigncmVzaXplLmVuZCcsIFNMSUdIVExZX0hJR0hFUl9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgY2FuRXhlY3V0ZSA9IGNvbnRleHQuY2FuRXhlY3V0ZSxcbiAgICAgICAgbmV3Qm91bmRzID0gY29udGV4dC5uZXdCb3VuZHM7XG5cbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOkxhbmUnKSB8fCBpcyhzaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuXG4gICAgICBpZiAoY2FuRXhlY3V0ZSkge1xuXG4gICAgICAgIC8vIGVuc3VyZSB3ZSBoYXZlIGFjdHVhbCBwaXhlbCB2YWx1ZXMgZm9yIG5ldyBib3VuZHNcbiAgICAgICAgLy8gKGltcG9ydGFudCB3aGVuIHpvb20gbGV2ZWwgd2FzID4gMSBkdXJpbmcgbW92ZSlcbiAgICAgICAgbmV3Qm91bmRzID0gcm91bmRCb3VuZHMobmV3Qm91bmRzKTtcblxuICAgICAgICAvLyBwZXJmb3JtIHRoZSBhY3R1YWwgcmVzaXplXG4gICAgICAgIG1vZGVsaW5nLnJlc2l6ZUxhbmUoc2hhcGUsIG5ld0JvdW5kcywgY29udGV4dC5iYWxhbmNlZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIHN0b3AgcHJvcGFnYXRpb25cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xufVxuXG5SZXNpemVMYW5lQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcbiIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGZpbmQsXHJcbiAgaXNBcnJheSxcclxuICBtYXRjaFBhdHRlcm4sXHJcbiAgc29tZVxyXG59IGZyb20gJ21pbi1kYXNoJztcclxuXHJcbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xyXG5cclxuaW1wb3J0IHtcclxuICBhZGQgYXMgY29sbGVjdGlvbkFkZCxcclxuICByZW1vdmUgYXMgY29sbGVjdGlvblJlbW92ZVxyXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvQ29sbGVjdGlvbnMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBnZXRCdXNpbmVzc09iamVjdCxcclxuICBpc1xyXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcclxuXHJcbmltcG9ydCB7IGlzQW55IH0gZnJvbSAnLi4vdXRpbC9Nb2RlbGluZ1V0aWwnO1xyXG5cclxuaW1wb3J0IHsgaGFzRXZlbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9EaVV0aWwnO1xyXG5cclxudmFyIExPV19QUklPUklUWSA9IDUwMDtcclxuXHJcblxyXG4vKipcclxuICogQWRkIHJlZmVyZW5jZWQgcm9vdCBlbGVtZW50cyAoZXJyb3IsIGVzY2FsYXRpb24sIG1lc3NhZ2UsIHNpZ25hbCkgaWYgdGhleSBkb24ndCBleGlzdC5cclxuICogQ29weSByZWZlcmVuY2VkIHJvb3QgZWxlbWVudHMgb24gY29weSAmIHBhc3RlLlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUm9vdEVsZW1lbnRSZWZlcmVuY2VCZWhhdmlvcihcclxuICAgIGJwbW5qcywgZXZlbnRCdXMsIGluamVjdG9yLCBtb2RkbGVDb3B5LCBicG1uRmFjdG9yeVxyXG4pIHtcclxuICBpbmplY3Rvci5pbnZva2UoQ29tbWFuZEludGVyY2VwdG9yLCB0aGlzKTtcclxuXHJcbiAgZnVuY3Rpb24gY2FuSGF2ZVJvb3RFbGVtZW50UmVmZXJlbmNlKGVsZW1lbnQpIHtcclxuICAgIHJldHVybiBpc0FueShlbGVtZW50LCBbICdicG1uOlJlY2VpdmVUYXNrJywgJ2JwbW46U2VuZFRhc2snIF0pIHx8XHJcbiAgICAgIGhhc0FueUV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCBbXHJcbiAgICAgICAgJ2JwbW46RXJyb3JFdmVudERlZmluaXRpb24nLFxyXG4gICAgICAgICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nLFxyXG4gICAgICAgICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nLFxyXG4gICAgICAgICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbidcclxuICAgICAgXSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBoYXNSb290RWxlbWVudChyb290RWxlbWVudCkge1xyXG4gICAgdmFyIGRlZmluaXRpb25zID0gYnBtbmpzLmdldERlZmluaXRpb25zKCksXHJcbiAgICAgICAgcm9vdEVsZW1lbnRzID0gZGVmaW5pdGlvbnMuZ2V0KCdyb290RWxlbWVudHMnKTtcclxuXHJcbiAgICByZXR1cm4gISFmaW5kKHJvb3RFbGVtZW50cywgbWF0Y2hQYXR0ZXJuKHsgaWQ6IHJvb3RFbGVtZW50LmlkIH0pKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldFJvb3RFbGVtZW50UmVmZXJlbmNlUHJvcGVydHlOYW1lKGV2ZW50RGVmaW5pdGlvbikge1xyXG4gICAgaWYgKGlzKGV2ZW50RGVmaW5pdGlvbiwgJ2JwbW46RXJyb3JFdmVudERlZmluaXRpb24nKSkge1xyXG4gICAgICByZXR1cm4gJ2Vycm9yUmVmJztcclxuICAgIH0gZWxzZSBpZiAoaXMoZXZlbnREZWZpbml0aW9uLCAnYnBtbjpFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uJykpIHtcclxuICAgICAgcmV0dXJuICdlc2NhbGF0aW9uUmVmJztcclxuICAgIH0gZWxzZSBpZiAoaXMoZXZlbnREZWZpbml0aW9uLCAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJykpIHtcclxuICAgICAgcmV0dXJuICdtZXNzYWdlUmVmJztcclxuICAgIH0gZWxzZSBpZiAoaXMoZXZlbnREZWZpbml0aW9uLCAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nKSkge1xyXG4gICAgICByZXR1cm4gJ3NpZ25hbFJlZic7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXRSb290RWxlbWVudChidXNpbmVzc09iamVjdCkge1xyXG4gICAgaWYgKGlzQW55KGJ1c2luZXNzT2JqZWN0LCBbICdicG1uOlJlY2VpdmVUYXNrJywgJ2JwbW46U2VuZFRhc2snIF0pKSB7XHJcbiAgICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ21lc3NhZ2VSZWYnKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZXZlbnREZWZpbml0aW9ucyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXZlbnREZWZpbml0aW9ucycpLFxyXG4gICAgICAgIGV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbnNbIDAgXTtcclxuXHJcbiAgICByZXR1cm4gZXZlbnREZWZpbml0aW9uLmdldChnZXRSb290RWxlbWVudFJlZmVyZW5jZVByb3BlcnR5TmFtZShldmVudERlZmluaXRpb24pKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNldFJvb3RFbGVtZW50KGJ1c2luZXNzT2JqZWN0LCByb290RWxlbWVudCkge1xyXG4gICAgaWYgKGlzQW55KGJ1c2luZXNzT2JqZWN0LCBbICdicG1uOlJlY2VpdmVUYXNrJywgJ2JwbW46U2VuZFRhc2snIF0pKSB7XHJcbiAgICAgIHJldHVybiBidXNpbmVzc09iamVjdC5zZXQoJ21lc3NhZ2VSZWYnLCByb290RWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGV2ZW50RGVmaW5pdGlvbnMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V2ZW50RGVmaW5pdGlvbnMnKSxcclxuICAgICAgICBldmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25zWyAwIF07XHJcblxyXG4gICAgcmV0dXJuIGV2ZW50RGVmaW5pdGlvbi5zZXQoZ2V0Um9vdEVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eU5hbWUoZXZlbnREZWZpbml0aW9uKSwgcm9vdEVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgLy8gY3JlYXRlIHNoYXBlXHJcbiAgdGhpcy5leGVjdXRlZCgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZTtcclxuXHJcbiAgICBpZiAoIWNhbkhhdmVSb290RWxlbWVudFJlZmVyZW5jZShzaGFwZSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KHNoYXBlKSxcclxuICAgICAgICByb290RWxlbWVudCA9IGdldFJvb3RFbGVtZW50KGJ1c2luZXNzT2JqZWN0KSxcclxuICAgICAgICByb290RWxlbWVudHM7XHJcblxyXG4gICAgaWYgKHJvb3RFbGVtZW50ICYmICFoYXNSb290RWxlbWVudChyb290RWxlbWVudCkpIHtcclxuICAgICAgcm9vdEVsZW1lbnRzID0gYnBtbmpzLmdldERlZmluaXRpb25zKCkuZ2V0KCdyb290RWxlbWVudHMnKTtcclxuXHJcbiAgICAgIC8vIGFkZCByb290IGVsZW1lbnRcclxuICAgICAgY29sbGVjdGlvbkFkZChyb290RWxlbWVudHMsIHJvb3RFbGVtZW50KTtcclxuXHJcbiAgICAgIGNvbnRleHQuYWRkZWRSb290RWxlbWVudCA9IHJvb3RFbGVtZW50O1xyXG4gICAgfVxyXG4gIH0sIHRydWUpO1xyXG5cclxuICB0aGlzLnJldmVydGVkKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICB2YXIgYWRkZWRSb290RWxlbWVudCA9IGNvbnRleHQuYWRkZWRSb290RWxlbWVudDtcclxuXHJcbiAgICBpZiAoIWFkZGVkUm9vdEVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciByb290RWxlbWVudHMgPSBicG1uanMuZ2V0RGVmaW5pdGlvbnMoKS5nZXQoJ3Jvb3RFbGVtZW50cycpO1xyXG5cclxuICAgIC8vIHJlbW92ZSByb290IGVsZW1lbnRcclxuICAgIGNvbGxlY3Rpb25SZW1vdmUocm9vdEVsZW1lbnRzLCBhZGRlZFJvb3RFbGVtZW50KTtcclxuICB9LCB0cnVlKTtcclxuXHJcbiAgZXZlbnRCdXMub24oJ2NvcHlQYXN0ZS5jb3B5RWxlbWVudCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgIHZhciBkZXNjcmlwdG9yID0gY29udGV4dC5kZXNjcmlwdG9yLFxyXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQ7XHJcblxyXG4gICAgaWYgKCFjYW5IYXZlUm9vdEVsZW1lbnRSZWZlcmVuY2UoZWxlbWVudCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxyXG4gICAgICAgIHJvb3RFbGVtZW50ID0gZ2V0Um9vdEVsZW1lbnQoYnVzaW5lc3NPYmplY3QpO1xyXG5cclxuICAgIGlmIChyb290RWxlbWVudCkge1xyXG4gICAgICBkZXNjcmlwdG9yLnJlZmVyZW5jZWRSb290RWxlbWVudCA9IHJvb3RFbGVtZW50O1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBldmVudEJ1cy5vbignY29weVBhc3RlLnBhc3RlRWxlbWVudCcsIExPV19QUklPUklUWSwgZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBjb250ZXh0LmRlc2NyaXB0b3IsXHJcbiAgICAgICAgYnVzaW5lc3NPYmplY3QgPSBkZXNjcmlwdG9yLmJ1c2luZXNzT2JqZWN0O1xyXG5cclxuICAgIGlmICghY2FuSGF2ZVJvb3RFbGVtZW50UmVmZXJlbmNlKGJ1c2luZXNzT2JqZWN0KSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJlZmVyZW5jZWRSb290RWxlbWVudCA9IGRlc2NyaXB0b3IucmVmZXJlbmNlZFJvb3RFbGVtZW50O1xyXG5cclxuICAgIGlmICghcmVmZXJlbmNlZFJvb3RFbGVtZW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWhhc1Jvb3RFbGVtZW50KHJlZmVyZW5jZWRSb290RWxlbWVudCkpIHtcclxuICAgICAgcmVmZXJlbmNlZFJvb3RFbGVtZW50ID0gbW9kZGxlQ29weS5jb3B5RWxlbWVudChcclxuICAgICAgICByZWZlcmVuY2VkUm9vdEVsZW1lbnQsXHJcbiAgICAgICAgYnBtbkZhY3RvcnkuY3JlYXRlKHJlZmVyZW5jZWRSb290RWxlbWVudC4kdHlwZSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRSb290RWxlbWVudChidXNpbmVzc09iamVjdCwgcmVmZXJlbmNlZFJvb3RFbGVtZW50KTtcclxuICB9KTtcclxufVxyXG5cclxuUm9vdEVsZW1lbnRSZWZlcmVuY2VCZWhhdmlvci4kaW5qZWN0ID0gW1xyXG4gICdicG1uanMnLFxyXG4gICdldmVudEJ1cycsXHJcbiAgJ2luamVjdG9yJyxcclxuICAnbW9kZGxlQ29weScsXHJcbiAgJ2JwbW5GYWN0b3J5J1xyXG5dO1xyXG5cclxuaW5oZXJpdHMoUm9vdEVsZW1lbnRSZWZlcmVuY2VCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5cclxuZnVuY3Rpb24gaGFzQW55RXZlbnREZWZpbml0aW9uKGVsZW1lbnQsIHR5cGVzKSB7XHJcbiAgaWYgKCFpc0FycmF5KHR5cGVzKSkge1xyXG4gICAgdHlwZXMgPSBbIHR5cGVzIF07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gc29tZSh0eXBlcywgZnVuY3Rpb24odHlwZSkge1xyXG4gICAgcmV0dXJuIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCB0eXBlKTtcclxuICB9KTtcclxufSIsImltcG9ydCB7IGZvckVhY2ggfSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcclxuXHJcbmltcG9ydCB7IGlzRXhwYW5kZWQgfSBmcm9tICcuLi8uLi8uLi91dGlsL0RpVXRpbCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIExBTkVfTUlOX0RJTUVOU0lPTlMsXHJcbiAgUEFSVElDSVBBTlRfTUlOX0RJTUVOU0lPTlMsXHJcbiAgU1VCX1BST0NFU1NfTUlOX0RJTUVOU0lPTlMsXHJcbiAgVEVYVF9BTk5PVEFUSU9OX01JTl9ESU1FTlNJT05TXHJcbn0gZnJvbSAnLi9SZXNpemVCZWhhdmlvcic7XHJcblxyXG5pbXBvcnQgeyBnZXRDaGlsZExhbmVzIH0gZnJvbSAnLi4vdXRpbC9MYW5lVXRpbCc7XHJcblxyXG52YXIgbWF4ID0gTWF0aC5tYXg7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3BhY2VUb29sQmVoYXZpb3IoZXZlbnRCdXMpIHtcclxuICBldmVudEJ1cy5vbignc3BhY2VUb29sLmdldE1pbkRpbWVuc2lvbnMnLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICB2YXIgc2hhcGVzID0gY29udGV4dC5zaGFwZXMsXHJcbiAgICAgICAgYXhpcyA9IGNvbnRleHQuYXhpcyxcclxuICAgICAgICBzdGFydCA9IGNvbnRleHQuc3RhcnQsXHJcbiAgICAgICAgbWluRGltZW5zaW9ucyA9IHt9O1xyXG5cclxuICAgIGZvckVhY2goc2hhcGVzLCBmdW5jdGlvbihzaGFwZSkge1xyXG4gICAgICB2YXIgaWQgPSBzaGFwZS5pZDtcclxuXHJcbiAgICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG5cclxuICAgICAgICBpZiAoaXNIb3Jpem9udGFsKGF4aXMpKSB7XHJcbiAgICAgICAgICBtaW5EaW1lbnNpb25zWyBpZCBdID0gUEFSVElDSVBBTlRfTUlOX0RJTUVOU0lPTlM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG1pbkRpbWVuc2lvbnNbIGlkIF0gPSB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBQQVJUSUNJUEFOVF9NSU5fRElNRU5TSU9OUy53aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBnZXRQYXJ0aWNpcGFudE1pbkhlaWdodChzaGFwZSwgc3RhcnQpXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46U3ViUHJvY2VzcycpICYmIGlzRXhwYW5kZWQoc2hhcGUpKSB7XHJcbiAgICAgICAgbWluRGltZW5zaW9uc1sgaWQgXSA9IFNVQl9QUk9DRVNTX01JTl9ESU1FTlNJT05TO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXMoc2hhcGUsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcclxuICAgICAgICBtaW5EaW1lbnNpb25zWyBpZCBdID0gVEVYVF9BTk5PVEFUSU9OX01JTl9ESU1FTlNJT05TO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbWluRGltZW5zaW9ucztcclxuICB9KTtcclxufVxyXG5cclxuU3BhY2VUb29sQmVoYXZpb3IuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdO1xyXG5cclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5mdW5jdGlvbiBpc0hvcml6b250YWwoYXhpcykge1xyXG4gIHJldHVybiBheGlzID09PSAneCc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgbWluaW11bSBoZWlnaHQgZm9yIHBhcnRpY2lwYW50IHRha2luZyBsYW5lcyBpbnRvIGFjY291bnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7PGRqcy5tb2RlbC5TaGFwZT59IHBhcnRpY2lwYW50XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UGFydGljaXBhbnRNaW5IZWlnaHQocGFydGljaXBhbnQsIHN0YXJ0KSB7XHJcbiAgdmFyIGxhbmVzTWluSGVpZ2h0O1xyXG5cclxuICBpZiAoIWhhc0NoaWxkTGFuZXMocGFydGljaXBhbnQpKSB7XHJcbiAgICByZXR1cm4gUEFSVElDSVBBTlRfTUlOX0RJTUVOU0lPTlMuaGVpZ2h0O1xyXG4gIH1cclxuXHJcbiAgbGFuZXNNaW5IZWlnaHQgPSBnZXRMYW5lc01pbkhlaWdodChwYXJ0aWNpcGFudCwgc3RhcnQpO1xyXG5cclxuICByZXR1cm4gbWF4KFBBUlRJQ0lQQU5UX01JTl9ESU1FTlNJT05TLmhlaWdodCwgbGFuZXNNaW5IZWlnaHQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYXNDaGlsZExhbmVzKGVsZW1lbnQpIHtcclxuICByZXR1cm4gISFnZXRDaGlsZExhbmVzKGVsZW1lbnQpLmxlbmd0aDtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TGFuZXNNaW5IZWlnaHQocGFydGljaXBhbnQsIHJlc2l6ZVN0YXJ0KSB7XHJcbiAgdmFyIGxhbmVzID0gZ2V0Q2hpbGRMYW5lcyhwYXJ0aWNpcGFudCksXHJcbiAgICAgIHJlc2l6ZWRMYW5lO1xyXG5cclxuICAvLyBmaW5kIHRoZSBuZXN0ZWQgbGFuZSB3aGljaCBpcyBjdXJyZW50bHkgcmVzaXplZFxyXG4gIHJlc2l6ZWRMYW5lID0gZmluZFJlc2l6ZWRMYW5lKGxhbmVzLCByZXNpemVTdGFydCk7XHJcblxyXG4gIC8vIHJlc2l6ZWQgbGFuZSBjYW5ub3Qgc2hyaW5rIGJlbG93IHRoZSBtaW5pbXVtIGhlaWdodFxyXG4gIC8vIGJ1dCByZW1haW5pbmcgbGFuZXMnIGRpbWVuc2lvbnMgYXJlIGtlcHQgaW50YWN0XHJcbiAgcmV0dXJuIHBhcnRpY2lwYW50LmhlaWdodCAtIHJlc2l6ZWRMYW5lLmhlaWdodCArIExBTkVfTUlOX0RJTUVOU0lPTlMuaGVpZ2h0O1xyXG59XHJcblxyXG4vKipcclxuICogRmluZCBuZXN0ZWQgbGFuZSB3aGljaCBpcyBjdXJyZW50bHkgcmVzaXplZC5cclxuICpcclxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fSBsYW5lc1xyXG4gKiBAcGFyYW0ge251bWJlcn0gcmVzaXplU3RhcnRcclxuICovXHJcbmZ1bmN0aW9uIGZpbmRSZXNpemVkTGFuZShsYW5lcywgcmVzaXplU3RhcnQpIHtcclxuICB2YXIgaSwgbGFuZSwgY2hpbGRMYW5lcztcclxuXHJcbiAgZm9yIChpID0gMDsgaSA8IGxhbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBsYW5lID0gbGFuZXNbaV07XHJcblxyXG4gICAgLy8gcmVzaXppbmcgY3VycmVudCBsYW5lIG9yIGEgbGFuZSBuZXN0ZWRcclxuICAgIGlmIChyZXNpemVTdGFydCA+PSBsYW5lLnkgJiYgcmVzaXplU3RhcnQgPD0gbGFuZS55ICsgbGFuZS5oZWlnaHQpIHtcclxuICAgICAgY2hpbGRMYW5lcyA9IGdldENoaWxkTGFuZXMobGFuZSk7XHJcblxyXG4gICAgICAvLyBhIG5lc3RlZCBsYW5lIGlzIHJlc2l6ZWRcclxuICAgICAgaWYgKGNoaWxkTGFuZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZpbmRSZXNpemVkTGFuZShjaGlsZExhbmVzLCByZXNpemVTdGFydCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGN1cnJlbnQgbGFuZSBpcyB0aGUgcmVzaXplZCBvbmVcclxuICAgICAgcmV0dXJuIGxhbmU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcbmltcG9ydCB7IGlzRXhwYW5kZWQgfSBmcm9tICcuLi8uLi8uLi91dGlsL0RpVXRpbC5qcyc7XG5cbi8qKlxuICogQWRkIHN0YXJ0IGV2ZW50IHJlcGxhY2luZyBlbGVtZW50IHdpdGggZXhwYW5kZWQgc3ViIHByb2Nlc3MuXG4gKlxuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFN1YlByb2Nlc3NTdGFydEV2ZW50QmVoYXZpb3IoaW5qZWN0b3IsIG1vZGVsaW5nKSB7XG4gIGluamVjdG9yLmludm9rZShDb21tYW5kSW50ZXJjZXB0b3IsIHRoaXMpO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKCdzaGFwZS5yZXBsYWNlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgb2xkU2hhcGUgPSBldmVudC5jb250ZXh0Lm9sZFNoYXBlLFxuICAgICAgICBuZXdTaGFwZSA9IGV2ZW50LmNvbnRleHQubmV3U2hhcGU7XG5cbiAgICBpZiAoXG4gICAgICAhaXMobmV3U2hhcGUsICdicG1uOlN1YlByb2Nlc3MnKSB8fFxuICAgICAgIWlzKG9sZFNoYXBlLCAnYnBtbjpUYXNrJykgfHxcbiAgICAgICFpc0V4cGFuZGVkKG5ld1NoYXBlKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwb3NpdGlvbiA9IGdldFN0YXJ0RXZlbnRQb3NpdGlvbihuZXdTaGFwZSk7XG5cbiAgICBtb2RlbGluZy5jcmVhdGVTaGFwZSh7IHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnIH0sIHBvc2l0aW9uLCBuZXdTaGFwZSk7XG4gIH0pO1xufVxuXG5TdWJQcm9jZXNzU3RhcnRFdmVudEJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdpbmplY3RvcicsXG4gICdtb2RlbGluZydcbl07XG5cbmluaGVyaXRzKFN1YlByb2Nlc3NTdGFydEV2ZW50QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRTdGFydEV2ZW50UG9zaXRpb24oc2hhcGUpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBzaGFwZS54ICsgc2hhcGUud2lkdGggLyA2LFxuICAgIHk6IHNoYXBlLnkgKyBzaGFwZS5oZWlnaHQgLyAyXG4gIH07XG59XG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHtcbiAgZ2V0QnVzaW5lc3NPYmplY3QsXG4gIGlzXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgY29tcHV0ZUNoaWxkcmVuQkJveFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvUmVzaXplVXRpbCc7XG5cblxudmFyIExPV19QUklPUklUWSA9IDUwMDtcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUb2dnbGVFbGVtZW50Q29sbGFwc2VCZWhhdmlvdXIoXG4gICAgZXZlbnRCdXMsIGVsZW1lbnRGYWN0b3J5LCBtb2RlbGluZyxcbiAgICByZXNpemUpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cblxuICBmdW5jdGlvbiBoaWRlRW1wdHlMYWJlbHMoY2hpbGRyZW4pIHtcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgIGlmIChjaGlsZC50eXBlID09PSAnbGFiZWwnICYmICFjaGlsZC5idXNpbmVzc09iamVjdC5uYW1lKSB7XG4gICAgICAgICAgY2hpbGQuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZXhwYW5kZWRCb3VuZHMoc2hhcGUsIGRlZmF1bHRTaXplKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gc2hhcGUuY2hpbGRyZW4sXG4gICAgICAgIG5ld0JvdW5kcyA9IGRlZmF1bHRTaXplLFxuICAgICAgICB2aXNpYmxlRWxlbWVudHMsXG4gICAgICAgIHZpc2libGVCQm94O1xuXG4gICAgdmlzaWJsZUVsZW1lbnRzID0gZmlsdGVyVmlzaWJsZShjaGlsZHJlbikuY29uY2F0KFsgc2hhcGUgXSk7XG5cbiAgICB2aXNpYmxlQkJveCA9IGNvbXB1dGVDaGlsZHJlbkJCb3godmlzaWJsZUVsZW1lbnRzKTtcblxuICAgIGlmICh2aXNpYmxlQkJveCkge1xuXG4gICAgICAvLyBjZW50ZXIgdG8gdmlzaWJsZUJCb3ggd2l0aCBtYXgoZGVmYXVsdFNpemUsIGNoaWxkcmVuQm91bmRzKVxuICAgICAgbmV3Qm91bmRzLndpZHRoID0gTWF0aC5tYXgodmlzaWJsZUJCb3gud2lkdGgsIG5ld0JvdW5kcy53aWR0aCk7XG4gICAgICBuZXdCb3VuZHMuaGVpZ2h0ID0gTWF0aC5tYXgodmlzaWJsZUJCb3guaGVpZ2h0LCBuZXdCb3VuZHMuaGVpZ2h0KTtcblxuICAgICAgbmV3Qm91bmRzLnggPSB2aXNpYmxlQkJveC54ICsgKHZpc2libGVCQm94LndpZHRoIC0gbmV3Qm91bmRzLndpZHRoKSAvIDI7XG4gICAgICBuZXdCb3VuZHMueSA9IHZpc2libGVCQm94LnkgKyAodmlzaWJsZUJCb3guaGVpZ2h0IC0gbmV3Qm91bmRzLmhlaWdodCkgLyAyO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIGNlbnRlciB0byBjb2xsYXBzZWQgc2hhcGUgd2l0aCBkZWZhdWx0U2l6ZVxuICAgICAgbmV3Qm91bmRzLnggPSBzaGFwZS54ICsgKHNoYXBlLndpZHRoIC0gbmV3Qm91bmRzLndpZHRoKSAvIDI7XG4gICAgICBuZXdCb3VuZHMueSA9IHNoYXBlLnkgKyAoc2hhcGUuaGVpZ2h0IC0gbmV3Qm91bmRzLmhlaWdodCkgLyAyO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdCb3VuZHM7XG4gIH1cblxuICBmdW5jdGlvbiBjb2xsYXBzZWRCb3VuZHMoc2hhcGUsIGRlZmF1bHRTaXplKSB7XG5cbiAgICByZXR1cm4ge1xuICAgICAgeDogc2hhcGUueCArIChzaGFwZS53aWR0aCAtIGRlZmF1bHRTaXplLndpZHRoKSAvIDIsXG4gICAgICB5OiBzaGFwZS55ICsgKHNoYXBlLmhlaWdodCAtIGRlZmF1bHRTaXplLmhlaWdodCkgLyAyLFxuICAgICAgd2lkdGg6IGRlZmF1bHRTaXplLndpZHRoLFxuICAgICAgaGVpZ2h0OiBkZWZhdWx0U2l6ZS5oZWlnaHRcbiAgICB9O1xuICB9XG5cbiAgdGhpcy5leGVjdXRlZChbICdzaGFwZS50b2dnbGVDb2xsYXBzZScgXSwgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKCFpcyhzaGFwZSwgJ2JwbW46U3ViUHJvY2VzcycpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFzaGFwZS5jb2xsYXBzZWQpIHtcblxuICAgICAgLy8gYWxsIGNoaWxkcmVuIGdvdCBtYWRlIHZpc2libGUgdGhyb3VnaCBkanMsIGhpZGUgZW1wdHkgbGFiZWxzXG4gICAgICBoaWRlRW1wdHlMYWJlbHMoc2hhcGUuY2hpbGRyZW4pO1xuXG4gICAgICAvLyByZW1vdmUgY29sbGFwc2VkIG1hcmtlclxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpLmRpLmlzRXhwYW5kZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIHBsYWNlIGNvbGxhcHNlZCBtYXJrZXJcbiAgICAgIGdldEJ1c2luZXNzT2JqZWN0KHNoYXBlKS5kaS5pc0V4cGFuZGVkID0gZmFsc2U7XG4gICAgfVxuICB9KTtcblxuICB0aGlzLnJldmVydGVkKFsgJ3NoYXBlLnRvZ2dsZUNvbGxhcHNlJyBdLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0O1xuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cblxuICAgIC8vIHJldmVydCByZW1vdmluZy9wbGFjaW5nIGNvbGxhcHNlZCBtYXJrZXJcbiAgICBpZiAoIXNoYXBlLmNvbGxhcHNlZCkge1xuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpLmRpLmlzRXhwYW5kZWQgPSB0cnVlO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIGdldEJ1c2luZXNzT2JqZWN0KHNoYXBlKS5kaS5pc0V4cGFuZGVkID0gZmFsc2U7XG4gICAgfVxuICB9KTtcblxuICB0aGlzLnBvc3RFeGVjdXRlZChbICdzaGFwZS50b2dnbGVDb2xsYXBzZScgXSwgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIHNoYXBlID0gZS5jb250ZXh0LnNoYXBlLFxuICAgICAgICBkZWZhdWx0U2l6ZSA9IGVsZW1lbnRGYWN0b3J5Ll9nZXREZWZhdWx0U2l6ZShzaGFwZSksXG4gICAgICAgIG5ld0JvdW5kcztcblxuICAgIGlmIChzaGFwZS5jb2xsYXBzZWQpIHtcblxuICAgICAgLy8gcmVzaXplIHRvIGRlZmF1bHQgc2l6ZSBvZiBjb2xsYXBzZWQgc2hhcGVzXG4gICAgICBuZXdCb3VuZHMgPSBjb2xsYXBzZWRCb3VuZHMoc2hhcGUsIGRlZmF1bHRTaXplKTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICAvLyByZXNpemUgdG8gYm91bmRzIG9mIG1heCh2aXNpYmxlIGNoaWxkcmVuLCBkZWZhdWx0U2l6ZSlcbiAgICAgIG5ld0JvdW5kcyA9IGV4cGFuZGVkQm91bmRzKHNoYXBlLCBkZWZhdWx0U2l6ZSk7XG4gICAgfVxuXG4gICAgbW9kZWxpbmcucmVzaXplU2hhcGUoc2hhcGUsIG5ld0JvdW5kcywgbnVsbCwge1xuICAgICAgYXV0b1Jlc2l6ZTogc2hhcGUuY29sbGFwc2VkID8gZmFsc2UgOiAnbndzZSdcbiAgICB9KTtcbiAgfSk7XG5cbn1cblxuXG5pbmhlcml0cyhUb2dnbGVFbGVtZW50Q29sbGFwc2VCZWhhdmlvdXIsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cblRvZ2dsZUVsZW1lbnRDb2xsYXBzZUJlaGF2aW91ci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnZWxlbWVudEZhY3RvcnknLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBmaWx0ZXJWaXNpYmxlKGVsZW1lbnRzKSB7XG4gIHJldHVybiBlbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiAhZS5oaWRkZW47XG4gIH0pO1xufSIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcbmltcG9ydCB7IGlzRXhwYW5kZWQgfSBmcm9tICcuLi8uLi8uLi91dGlsL0RpVXRpbCc7XG5pbXBvcnQgeyBpc0xhYmVsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG5cbi8qKlxuICogVW5jbGFpbXMgbW9kZWwgSURzIG9uIGVsZW1lbnQgZGVsZXRpb24uXG4gKlxuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcbiAqIEBwYXJhbSB7TW9kZGxlfSBtb2RkbGVcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVuY2xhaW1JZEJlaGF2aW9yKGNhbnZhcywgaW5qZWN0b3IsIG1vZGRsZSwgbW9kZWxpbmcpIHtcbiAgaW5qZWN0b3IuaW52b2tlKENvbW1hbmRJbnRlcmNlcHRvciwgdGhpcyk7XG5cbiAgdGhpcy5wcmVFeGVjdXRlKCdzaGFwZS5kZWxldGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBzaGFwZUJvID0gc2hhcGUuYnVzaW5lc3NPYmplY3Q7XG5cbiAgICBpZiAoaXNMYWJlbChzaGFwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOlBhcnRpY2lwYW50JykgJiYgaXNFeHBhbmRlZChzaGFwZSkpIHtcbiAgICAgIG1vZGRsZS5pZHMudW5jbGFpbShzaGFwZUJvLnByb2Nlc3NSZWYuaWQpO1xuICAgIH1cblxuICAgIG1vZGVsaW5nLnVuY2xhaW1JZChzaGFwZUJvLmlkLCBzaGFwZUJvKTtcbiAgfSk7XG5cblxuICB0aGlzLnByZUV4ZWN1dGUoJ2Nvbm5lY3Rpb24uZGVsZXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIGNvbm5lY3Rpb25CbyA9IGNvbm5lY3Rpb24uYnVzaW5lc3NPYmplY3Q7XG5cbiAgICBtb2RlbGluZy51bmNsYWltSWQoY29ubmVjdGlvbkJvLmlkLCBjb25uZWN0aW9uQm8pO1xuICB9KTtcblxuICB0aGlzLnByZUV4ZWN1dGUoJ2NhbnZhcy51cGRhdGVSb290JywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgICAgIHJvb3RFbGVtZW50Qm8gPSByb290RWxlbWVudC5idXNpbmVzc09iamVjdDtcblxuICAgIG1vZGRsZS5pZHMudW5jbGFpbShyb290RWxlbWVudEJvLmlkKTtcbiAgfSk7XG59XG5cbmluaGVyaXRzKFVuY2xhaW1JZEJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5VbmNsYWltSWRCZWhhdmlvci4kaW5qZWN0ID0gWyAnY2FudmFzJywgJ2luamVjdG9yJywgJ21vZGRsZScsICdtb2RlbGluZycgXTsiLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHtcbiAgZ2V0QnVzaW5lc3NPYmplY3QsXG4gIGlzXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuXG4vKipcbiAqIEEgYmVoYXZpb3IgdGhhdCB1bnNldHMgdGhlIERlZmF1bHQgcHJvcGVydHkgb2ZcbiAqIHNlcXVlbmNlIGZsb3cgc291cmNlIG9uIGVsZW1lbnQgZGVsZXRlLCBpZiB0aGVcbiAqIHJlbW92ZWQgZWxlbWVudCBpcyB0aGUgR2F0ZXdheSBvciBUYXNrJ3MgZGVmYXVsdCBmbG93LlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEZWxldGVTZXF1ZW5jZUZsb3dCZWhhdmlvcihldmVudEJ1cywgbW9kZWxpbmcpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cblxuICB0aGlzLnByZUV4ZWN1dGUoJ2Nvbm5lY3Rpb24uZGVsZXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIHNvdXJjZSA9IGNvbm5lY3Rpb24uc291cmNlO1xuXG4gICAgaWYgKGlzRGVmYXVsdEZsb3coY29ubmVjdGlvbiwgc291cmNlKSkge1xuICAgICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhzb3VyY2UsIHtcbiAgICAgICAgJ2RlZmF1bHQnOiBudWxsXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5pbmhlcml0cyhEZWxldGVTZXF1ZW5jZUZsb3dCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuRGVsZXRlU2VxdWVuY2VGbG93QmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gaXNEZWZhdWx0Rmxvdyhjb25uZWN0aW9uLCBzb3VyY2UpIHtcblxuICBpZiAoIWlzKGNvbm5lY3Rpb24sICdicG1uOlNlcXVlbmNlRmxvdycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHNvdXJjZUJvID0gZ2V0QnVzaW5lc3NPYmplY3Qoc291cmNlKSxcbiAgICAgIHNlcXVlbmNlRmxvdyA9IGdldEJ1c2luZXNzT2JqZWN0KGNvbm5lY3Rpb24pO1xuXG4gIHJldHVybiBzb3VyY2VCby5nZXQoJ2RlZmF1bHQnKSA9PT0gc2VxdWVuY2VGbG93O1xufSIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBpc1xufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbnZhciBMT1dfUFJJT1JJVFkgPSA1MDAsXG4gICAgSElHSF9QUklPUklUWSA9IDUwMDA7XG5cblxuLyoqXG4gKiBCUE1OIHNwZWNpZmljIGRlbGV0ZSBsYW5lIGJlaGF2aW9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVwZGF0ZUZsb3dOb2RlUmVmc0JlaGF2aW9yKGV2ZW50QnVzLCBtb2RlbGluZywgdHJhbnNsYXRlKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIC8qKlxuICAgKiBPaywgdGhpcyBpcyBpdDpcbiAgICpcbiAgICogV2UgaGF2ZSB0byB1cGRhdGUgdGhlIExhbmUjZmxvd05vZGVSZWZzIF9hbmRfXG4gICAqIEZsb3dOb2RlI2xhbmVzIHdpdGggZXZlcnkgRmxvd05vZGUgbW92ZS9yZXNpemUgYW5kXG4gICAqIExhbmUgbW92ZS9yZXNpemUuXG4gICAqXG4gICAqIFdlIHdhbnQgdG8gZ3JvdXAgdGhhdCBzdHVmZiB0byByZWNvbXB1dGUgY29udGFpbm1lbnRzXG4gICAqIGFzIGVmZmljaWVudCBhcyBwb3NzaWJsZS5cbiAgICpcbiAgICogWWVhIVxuICAgKi9cblxuICAvLyB0aGUgdXBkYXRlIGNvbnRleHRcbiAgdmFyIGNvbnRleHQ7XG5cblxuICBmdW5jdGlvbiBpbml0Q29udGV4dCgpIHtcbiAgICBjb250ZXh0ID0gY29udGV4dCB8fCBuZXcgVXBkYXRlQ29udGV4dCgpO1xuICAgIGNvbnRleHQuZW50ZXIoKTtcblxuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q29udGV4dCgpIHtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ291dCBvZiBib3VuZHMgcmVsZWFzZScpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbGVhc2VDb250ZXh0KCkge1xuXG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdvdXQgb2YgYm91bmRzIHJlbGVhc2UnKSk7XG4gICAgfVxuXG4gICAgdmFyIHRyaWdnZXJVcGRhdGUgPSBjb250ZXh0LmxlYXZlKCk7XG5cbiAgICBpZiAodHJpZ2dlclVwZGF0ZSkge1xuICAgICAgbW9kZWxpbmcudXBkYXRlTGFuZVJlZnMoY29udGV4dC5mbG93Tm9kZXMsIGNvbnRleHQubGFuZXMpO1xuXG4gICAgICBjb250ZXh0ID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJpZ2dlclVwZGF0ZTtcbiAgfVxuXG5cbiAgdmFyIGxhbmVSZWZVcGRhdGVFdmVudHMgPSBbXG4gICAgJ3NwYWNlVG9vbCcsXG4gICAgJ2xhbmUuYWRkJyxcbiAgICAnbGFuZS5yZXNpemUnLFxuICAgICdsYW5lLnNwbGl0JyxcbiAgICAnZWxlbWVudHMuY3JlYXRlJyxcbiAgICAnZWxlbWVudHMuZGVsZXRlJyxcbiAgICAnZWxlbWVudHMubW92ZScsXG4gICAgJ3NoYXBlLmNyZWF0ZScsXG4gICAgJ3NoYXBlLmRlbGV0ZScsXG4gICAgJ3NoYXBlLm1vdmUnLFxuICAgICdzaGFwZS5yZXNpemUnXG4gIF07XG5cblxuICAvLyBsaXN0ZW4gdG8gYSBsb3Qgb2Ygc3R1ZmYgdG8gZ3JvdXAgbGFuZSB1cGRhdGVzXG5cbiAgdGhpcy5wcmVFeGVjdXRlKGxhbmVSZWZVcGRhdGVFdmVudHMsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaW5pdENvbnRleHQoKTtcbiAgfSk7XG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQobGFuZVJlZlVwZGF0ZUV2ZW50cywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHJlbGVhc2VDb250ZXh0KCk7XG4gIH0pO1xuXG5cbiAgLy8gTWFyayBmbG93IG5vZGVzICsgbGFuZXMgdGhhdCBuZWVkIGFuIHVwZGF0ZVxuXG4gIHRoaXMucHJlRXhlY3V0ZShbXG4gICAgJ3NoYXBlLmNyZWF0ZScsXG4gICAgJ3NoYXBlLm1vdmUnLFxuICAgICdzaGFwZS5kZWxldGUnLFxuICAgICdzaGFwZS5yZXNpemUnXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIHZhciB1cGRhdGVDb250ZXh0ID0gZ2V0Q29udGV4dCgpO1xuXG4gICAgLy8gbm8gbmVlZCB0byB1cGRhdGUgbGFiZWxzXG4gICAgaWYgKHNoYXBlLmxhYmVsVGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpMYW5lJykpIHtcbiAgICAgIHVwZGF0ZUNvbnRleHQuYWRkTGFuZShzaGFwZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpGbG93Tm9kZScpKSB7XG4gICAgICB1cGRhdGVDb250ZXh0LmFkZEZsb3dOb2RlKHNoYXBlKTtcbiAgICB9XG4gIH0pO1xufVxuXG5VcGRhdGVGbG93Tm9kZVJlZnNCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnICxcbiAgJ3RyYW5zbGF0ZSdcbl07XG5cbmluaGVyaXRzKFVwZGF0ZUZsb3dOb2RlUmVmc0JlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5cbmZ1bmN0aW9uIFVwZGF0ZUNvbnRleHQoKSB7XG5cbiAgdGhpcy5mbG93Tm9kZXMgPSBbXTtcbiAgdGhpcy5sYW5lcyA9IFtdO1xuXG4gIHRoaXMuY291bnRlciA9IDA7XG5cbiAgdGhpcy5hZGRMYW5lID0gZnVuY3Rpb24obGFuZSkge1xuICAgIHRoaXMubGFuZXMucHVzaChsYW5lKTtcbiAgfTtcblxuICB0aGlzLmFkZEZsb3dOb2RlID0gZnVuY3Rpb24oZmxvd05vZGUpIHtcbiAgICB0aGlzLmZsb3dOb2Rlcy5wdXNoKGZsb3dOb2RlKTtcbiAgfTtcblxuICB0aGlzLmVudGVyID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jb3VudGVyKys7XG4gIH07XG5cbiAgdGhpcy5sZWF2ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY291bnRlci0tO1xuXG4gICAgcmV0dXJuICF0aGlzLmNvdW50ZXI7XG4gIH07XG59IiwiaW1wb3J0IEFkYXB0aXZlTGFiZWxQb3NpdGlvbmluZ0JlaGF2aW9yIGZyb20gJy4vQWRhcHRpdmVMYWJlbFBvc2l0aW9uaW5nQmVoYXZpb3InO1xuaW1wb3J0IEFwcGVuZEJlaGF2aW9yIGZyb20gJy4vQXBwZW5kQmVoYXZpb3InO1xuaW1wb3J0IEFzc29jaWF0aW9uQmVoYXZpb3IgZnJvbSAnLi9Bc3NvY2lhdGlvbkJlaGF2aW9yJztcbmltcG9ydCBBdHRhY2hFdmVudEJlaGF2aW9yIGZyb20gJy4vQXR0YWNoRXZlbnRCZWhhdmlvcic7XG5pbXBvcnQgQm91bmRhcnlFdmVudEJlaGF2aW9yIGZyb20gJy4vQm91bmRhcnlFdmVudEJlaGF2aW9yJztcbmltcG9ydCBSb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yIGZyb20gJy4vUm9vdEVsZW1lbnRSZWZlcmVuY2VCZWhhdmlvcic7XG5pbXBvcnQgQ3JlYXRlQmVoYXZpb3IgZnJvbSAnLi9DcmVhdGVCZWhhdmlvcic7XG5pbXBvcnQgRml4SG92ZXJCZWhhdmlvciBmcm9tICcuL0ZpeEhvdmVyQmVoYXZpb3InO1xuaW1wb3J0IENyZWF0ZURhdGFPYmplY3RCZWhhdmlvciBmcm9tICcuL0NyZWF0ZURhdGFPYmplY3RCZWhhdmlvcic7XG5pbXBvcnQgQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvciBmcm9tICcuL0NyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3InO1xuaW1wb3J0IERhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3IgZnJvbSAnLi9EYXRhSW5wdXRBc3NvY2lhdGlvbkJlaGF2aW9yJztcbmltcG9ydCBEYXRhU3RvcmVCZWhhdmlvciBmcm9tICcuL0RhdGFTdG9yZUJlaGF2aW9yJztcbmltcG9ydCBEZWxldGVMYW5lQmVoYXZpb3IgZnJvbSAnLi9EZWxldGVMYW5lQmVoYXZpb3InO1xuaW1wb3J0IERldGFjaEV2ZW50QmVoYXZpb3IgZnJvbSAnLi9EZXRhY2hFdmVudEJlaGF2aW9yJztcbmltcG9ydCBEcm9wT25GbG93QmVoYXZpb3IgZnJvbSAnLi9Ecm9wT25GbG93QmVoYXZpb3InO1xuaW1wb3J0IEV2ZW50QmFzZWRHYXRld2F5QmVoYXZpb3IgZnJvbSAnLi9FdmVudEJhc2VkR2F0ZXdheUJlaGF2aW9yJztcbmltcG9ydCBHcm91cEJlaGF2aW9yIGZyb20gJy4vR3JvdXBCZWhhdmlvcic7XG5pbXBvcnQgSW1wb3J0RG9ja2luZ0ZpeCBmcm9tICcuL0ltcG9ydERvY2tpbmdGaXgnO1xuaW1wb3J0IElzSG9yaXpvbnRhbEZpeCBmcm9tICcuL0lzSG9yaXpvbnRhbEZpeCc7XG5pbXBvcnQgTGFiZWxCZWhhdmlvciBmcm9tICcuL0xhYmVsQmVoYXZpb3InO1xuaW1wb3J0IE1vZGVsaW5nRmVlZGJhY2sgZnJvbSAnLi9Nb2RlbGluZ0ZlZWRiYWNrJztcbmltcG9ydCBSZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yIGZyb20gJy4vUmVwbGFjZUNvbm5lY3Rpb25CZWhhdmlvcic7XG5pbXBvcnQgUmVtb3ZlUGFydGljaXBhbnRCZWhhdmlvciBmcm9tICcuL1JlbW92ZVBhcnRpY2lwYW50QmVoYXZpb3InO1xuaW1wb3J0IFJlcGxhY2VFbGVtZW50QmVoYXZpb3VyIGZyb20gJy4vUmVwbGFjZUVsZW1lbnRCZWhhdmlvdXInO1xuaW1wb3J0IFJlc2l6ZUJlaGF2aW9yIGZyb20gJy4vUmVzaXplQmVoYXZpb3InO1xuaW1wb3J0IFJlc2l6ZUxhbmVCZWhhdmlvciBmcm9tICcuL1Jlc2l6ZUxhbmVCZWhhdmlvcic7XG5pbXBvcnQgUmVtb3ZlRWxlbWVudEJlaGF2aW9yIGZyb20gJy4vUmVtb3ZlRWxlbWVudEJlaGF2aW9yJztcbmltcG9ydCBTcGFjZVRvb2xCZWhhdmlvciBmcm9tICcuL1NwYWNlVG9vbEJlaGF2aW9yJztcbmltcG9ydCBTdWJQcm9jZXNzU3RhcnRFdmVudEJlaGF2aW9yIGZyb20gJy4vU3ViUHJvY2Vzc1N0YXJ0RXZlbnRCZWhhdmlvcic7XG5pbXBvcnQgVG9nZ2xlRWxlbWVudENvbGxhcHNlQmVoYXZpb3VyIGZyb20gJy4vVG9nZ2xlRWxlbWVudENvbGxhcHNlQmVoYXZpb3VyJztcbmltcG9ydCBVbmNsYWltSWRCZWhhdmlvciBmcm9tICcuL1VuY2xhaW1JZEJlaGF2aW9yJztcbmltcG9ydCBVcGRhdGVGbG93Tm9kZVJlZnNCZWhhdmlvciBmcm9tICcuL1VwZGF0ZUZsb3dOb2RlUmVmc0JlaGF2aW9yJztcbmltcG9ydCBVbnNldERlZmF1bHRGbG93QmVoYXZpb3IgZnJvbSAnLi9VbnNldERlZmF1bHRGbG93QmVoYXZpb3InO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbXG4gICAgJ2FkYXB0aXZlTGFiZWxQb3NpdGlvbmluZ0JlaGF2aW9yJyxcbiAgICAnYXBwZW5kQmVoYXZpb3InLFxuICAgICdhc3NvY2lhdGlvbkJlaGF2aW9yJyxcbiAgICAnYXR0YWNoRXZlbnRCZWhhdmlvcicsXG4gICAgJ2JvdW5kYXJ5RXZlbnRCZWhhdmlvcicsXG4gICAgJ3Jvb3RFbGVtZW50UmVmZXJlbmNlQmVoYXZpb3InLFxuICAgICdjcmVhdGVCZWhhdmlvcicsXG4gICAgJ2ZpeEhvdmVyQmVoYXZpb3InLFxuICAgICdjcmVhdGVEYXRhT2JqZWN0QmVoYXZpb3InLFxuICAgICdjcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yJyxcbiAgICAnZGF0YVN0b3JlQmVoYXZpb3InLFxuICAgICdkYXRhSW5wdXRBc3NvY2lhdGlvbkJlaGF2aW9yJyxcbiAgICAnZGVsZXRlTGFuZUJlaGF2aW9yJyxcbiAgICAnZGV0YWNoRXZlbnRCZWhhdmlvcicsXG4gICAgJ2Ryb3BPbkZsb3dCZWhhdmlvcicsXG4gICAgJ2V2ZW50QmFzZWRHYXRld2F5QmVoYXZpb3InLFxuICAgICdncm91cEJlaGF2aW9yJyxcbiAgICAnaW1wb3J0RG9ja2luZ0ZpeCcsXG4gICAgJ2lzSG9yaXpvbnRhbEZpeCcsXG4gICAgJ2xhYmVsQmVoYXZpb3InLFxuICAgICdtb2RlbGluZ0ZlZWRiYWNrJyxcbiAgICAncmVtb3ZlRWxlbWVudEJlaGF2aW9yJyxcbiAgICAncmVtb3ZlUGFydGljaXBhbnRCZWhhdmlvcicsXG4gICAgJ3JlcGxhY2VDb25uZWN0aW9uQmVoYXZpb3InLFxuICAgICdyZXBsYWNlRWxlbWVudEJlaGF2aW91cicsXG4gICAgJ3Jlc2l6ZUJlaGF2aW9yJyxcbiAgICAncmVzaXplTGFuZUJlaGF2aW9yJyxcbiAgICAndG9nZ2xlRWxlbWVudENvbGxhcHNlQmVoYXZpb3VyJyxcbiAgICAnc3BhY2VUb29sQmVoYXZpb3InLFxuICAgICdzdWJQcm9jZXNzU3RhcnRFdmVudEJlaGF2aW9yJyxcbiAgICAndW5jbGFpbUlkQmVoYXZpb3InLFxuICAgICd1bnNldERlZmF1bHRGbG93QmVoYXZpb3InLFxuICAgICd1cGRhdGVGbG93Tm9kZVJlZnNCZWhhdmlvcidcbiAgXSxcbiAgYWRhcHRpdmVMYWJlbFBvc2l0aW9uaW5nQmVoYXZpb3I6IFsgJ3R5cGUnLCBBZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvciBdLFxuICBhcHBlbmRCZWhhdmlvcjogWyAndHlwZScsIEFwcGVuZEJlaGF2aW9yIF0sXG4gIGFzc29jaWF0aW9uQmVoYXZpb3I6IFsgJ3R5cGUnLCBBc3NvY2lhdGlvbkJlaGF2aW9yIF0sXG4gIGF0dGFjaEV2ZW50QmVoYXZpb3I6IFsgJ3R5cGUnLCBBdHRhY2hFdmVudEJlaGF2aW9yIF0sXG4gIGJvdW5kYXJ5RXZlbnRCZWhhdmlvcjogWyAndHlwZScsIEJvdW5kYXJ5RXZlbnRCZWhhdmlvciBdLFxuICByb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yOiBbICd0eXBlJywgUm9vdEVsZW1lbnRSZWZlcmVuY2VCZWhhdmlvciBdLFxuICBjcmVhdGVCZWhhdmlvcjogWyAndHlwZScsIENyZWF0ZUJlaGF2aW9yIF0sXG4gIGZpeEhvdmVyQmVoYXZpb3I6IFsgJ3R5cGUnLCBGaXhIb3ZlckJlaGF2aW9yIF0sXG4gIGNyZWF0ZURhdGFPYmplY3RCZWhhdmlvcjogWyAndHlwZScsIENyZWF0ZURhdGFPYmplY3RCZWhhdmlvciBdLFxuICBjcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yOiBbICd0eXBlJywgQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvciBdLFxuICBkYXRhSW5wdXRBc3NvY2lhdGlvbkJlaGF2aW9yOiBbICd0eXBlJywgRGF0YUlucHV0QXNzb2NpYXRpb25CZWhhdmlvciBdLFxuICBkYXRhU3RvcmVCZWhhdmlvcjogWyAndHlwZScsIERhdGFTdG9yZUJlaGF2aW9yIF0sXG4gIGRlbGV0ZUxhbmVCZWhhdmlvcjogWyAndHlwZScsIERlbGV0ZUxhbmVCZWhhdmlvciBdLFxuICBkZXRhY2hFdmVudEJlaGF2aW9yOiBbICd0eXBlJywgRGV0YWNoRXZlbnRCZWhhdmlvciBdLFxuICBkcm9wT25GbG93QmVoYXZpb3I6IFsgJ3R5cGUnLCBEcm9wT25GbG93QmVoYXZpb3IgXSxcbiAgZXZlbnRCYXNlZEdhdGV3YXlCZWhhdmlvcjogWyAndHlwZScsIEV2ZW50QmFzZWRHYXRld2F5QmVoYXZpb3IgXSxcbiAgZ3JvdXBCZWhhdmlvcjogWyAndHlwZScsIEdyb3VwQmVoYXZpb3IgXSxcbiAgaW1wb3J0RG9ja2luZ0ZpeDogWyAndHlwZScsIEltcG9ydERvY2tpbmdGaXggXSxcbiAgaXNIb3Jpem9udGFsRml4OiBbICd0eXBlJywgSXNIb3Jpem9udGFsRml4IF0sXG4gIGxhYmVsQmVoYXZpb3I6IFsgJ3R5cGUnLCBMYWJlbEJlaGF2aW9yIF0sXG4gIG1vZGVsaW5nRmVlZGJhY2s6IFsgJ3R5cGUnLCBNb2RlbGluZ0ZlZWRiYWNrIF0sXG4gIHJlcGxhY2VDb25uZWN0aW9uQmVoYXZpb3I6IFsgJ3R5cGUnLCBSZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yIF0sXG4gIHJlbW92ZVBhcnRpY2lwYW50QmVoYXZpb3I6IFsgJ3R5cGUnLCBSZW1vdmVQYXJ0aWNpcGFudEJlaGF2aW9yIF0sXG4gIHJlcGxhY2VFbGVtZW50QmVoYXZpb3VyOiBbICd0eXBlJywgUmVwbGFjZUVsZW1lbnRCZWhhdmlvdXIgXSxcbiAgcmVzaXplQmVoYXZpb3I6IFsgJ3R5cGUnLCBSZXNpemVCZWhhdmlvciBdLFxuICByZXNpemVMYW5lQmVoYXZpb3I6IFsgJ3R5cGUnLCBSZXNpemVMYW5lQmVoYXZpb3IgXSxcbiAgcmVtb3ZlRWxlbWVudEJlaGF2aW9yOiBbICd0eXBlJywgUmVtb3ZlRWxlbWVudEJlaGF2aW9yIF0sXG4gIHRvZ2dsZUVsZW1lbnRDb2xsYXBzZUJlaGF2aW91ciA6IFsgJ3R5cGUnLCBUb2dnbGVFbGVtZW50Q29sbGFwc2VCZWhhdmlvdXIgXSxcbiAgc3BhY2VUb29sQmVoYXZpb3I6IFsgJ3R5cGUnLCBTcGFjZVRvb2xCZWhhdmlvciBdLFxuICBzdWJQcm9jZXNzU3RhcnRFdmVudEJlaGF2aW9yOiBbICd0eXBlJywgU3ViUHJvY2Vzc1N0YXJ0RXZlbnRCZWhhdmlvciBdLFxuICB1bmNsYWltSWRCZWhhdmlvcjogWyAndHlwZScsIFVuY2xhaW1JZEJlaGF2aW9yIF0sXG4gIHVwZGF0ZUZsb3dOb2RlUmVmc0JlaGF2aW9yOiBbICd0eXBlJywgVXBkYXRlRmxvd05vZGVSZWZzQmVoYXZpb3IgXSxcbiAgdW5zZXREZWZhdWx0Rmxvd0JlaGF2aW9yOiBbICd0eXBlJywgVW5zZXREZWZhdWx0Rmxvd0JlaGF2aW9yIF1cbn07XG4iLCJpbXBvcnQge1xuICBhZGQgYXMgY29sbGVjdGlvbkFkZFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zJztcblxuaW1wb3J0IHtcbiAgZ2V0QnVzaW5lc3NPYmplY3Rcbn0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgYnBtbjpDYXRlZ29yeVZhbHVlIGluc2lkZSBhIG5ldyBicG1uOkNhdGVnb3J5XG4gKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBkZWZpbml0aW9uc1xuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSBjYXRlZ29yeVZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2F0ZWdvcnlWYWx1ZShkZWZpbml0aW9ucywgYnBtbkZhY3RvcnkpIHtcbiAgdmFyIGNhdGVnb3J5VmFsdWUgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46Q2F0ZWdvcnlWYWx1ZScpLFxuICAgICAgY2F0ZWdvcnkgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46Q2F0ZWdvcnknLCB7XG4gICAgICAgIGNhdGVnb3J5VmFsdWU6IFsgY2F0ZWdvcnlWYWx1ZSBdXG4gICAgICB9KTtcblxuICAvLyBhZGQgdG8gY29ycmVjdCBwbGFjZVxuICBjb2xsZWN0aW9uQWRkKGRlZmluaXRpb25zLmdldCgncm9vdEVsZW1lbnRzJyksIGNhdGVnb3J5KTtcbiAgZ2V0QnVzaW5lc3NPYmplY3QoY2F0ZWdvcnkpLiRwYXJlbnQgPSBkZWZpbml0aW9ucztcbiAgZ2V0QnVzaW5lc3NPYmplY3QoY2F0ZWdvcnlWYWx1ZSkuJHBhcmVudCA9IGNhdGVnb3J5O1xuXG4gIHJldHVybiBjYXRlZ29yeVZhbHVlO1xuXG59IiwiLyoqXG4gKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgYSB2ZWN0b3JcbiAqXG4gKiBAcGFyYW0ge1ZlY3Rvcn1cbiAqIEByZXR1cm4ge0Zsb2F0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVjdG9yTGVuZ3RoKHYpIHtcbiAgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh2LngsIDIpICsgTWF0aC5wb3codi55LCAyKSk7XG59XG5cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhbmdsZSBiZXR3ZWVuIGEgbGluZSBhIHRoZSB5QXhpc1xuICpcbiAqIEBwYXJhbSB7QXJyYXl9XG4gKiBAcmV0dXJuIHtGbG9hdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFuZ2xlKGxpbmUpIHtcblxuICAvLyByZXR1cm4gdmFsdWUgaXMgYmV0d2VlbiAwLCAxODAgYW5kIC0xODAsIC0wXG4gIC8vIEBqYW5zdHVlbW1lbDogbWF5YmUgcmVwbGFjZSByZXR1cm4gYS9iIHdpdGggYi9hXG4gIHJldHVybiBNYXRoLmF0YW4oKGxpbmVbMV0ueSAtIGxpbmVbMF0ueSkgLyAobGluZVsxXS54IC0gbGluZVswXS54KSk7XG59XG5cblxuLyoqXG4gKiBSb3RhdGVzIGEgdmVjdG9yIGJ5IGEgZ2l2ZW4gYW5nbGVcbiAqXG4gKiBAcGFyYW0ge1ZlY3Rvcn1cbiAqIEBwYXJhbSB7RmxvYXR9IEFuZ2xlIGluIHJhZGlhbnNcbiAqIEByZXR1cm4ge1ZlY3Rvcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVZlY3Rvcih2ZWN0b3IsIGFuZ2xlKSB7XG4gIHJldHVybiAoIWFuZ2xlKSA/IHZlY3RvciA6IHtcbiAgICB4OiBNYXRoLmNvcyhhbmdsZSkgKiB2ZWN0b3IueCAtIE1hdGguc2luKGFuZ2xlKSAqIHZlY3Rvci55LFxuICAgIHk6IE1hdGguc2luKGFuZ2xlKSAqIHZlY3Rvci54ICsgTWF0aC5jb3MoYW5nbGUpICogdmVjdG9yLnlcbiAgfTtcbn1cblxuXG4vKipcbiAqIFNvbHZlcyBhIDJEIGVxdWF0aW9uIHN5c3RlbVxuICogYSArIHIqYiA9IGMsIHdoZXJlIGEsYixjIGFyZSAyRCB2ZWN0b3JzXG4gKlxuICogQHBhcmFtIHtWZWN0b3J9XG4gKiBAcGFyYW0ge1ZlY3Rvcn1cbiAqIEBwYXJhbSB7VmVjdG9yfVxuICogQHJldHVybiB7RmxvYXR9XG4gKi9cbmZ1bmN0aW9uIHNvbHZlTGFtYmFTeXN0ZW0oYSwgYiwgYykge1xuXG4gIC8vIHRoZSAyZCBzeXN0ZW1cbiAgdmFyIHN5c3RlbSA9IFtcbiAgICB7IG46IGFbMF0gLSBjWzBdLCBsYW1iZGE6IGJbMF0gfSxcbiAgICB7IG46IGFbMV0gLSBjWzFdLCBsYW1iZGE6IGJbMV0gfVxuICBdO1xuXG4gIC8vIHNvbHZlXG4gIHZhciBuID0gc3lzdGVtWzBdLm4gKiBiWzBdICsgc3lzdGVtWzFdLm4gKiBiWzFdLFxuICAgICAgbCA9IHN5c3RlbVswXS5sYW1iZGEgKiBiWzBdICsgc3lzdGVtWzFdLmxhbWJkYSAqIGJbMV07XG5cbiAgcmV0dXJuIC1uL2w7XG59XG5cblxuLyoqXG4gKiBQb3NpdGlvbiBvZiBwZXJwZW5kaWN1bGFyIGZvb3RcbiAqXG4gKiBAcGFyYW0ge1BvaW50fVxuICogQHBhcmFtIFsge1BvaW50fSwge1BvaW50fSBdIGxpbmUgZGVmaW5lZCB0aHJvdWdoIHR3byBwb2ludHNcbiAqIEByZXR1cm4ge1BvaW50fSB0aGUgcGVycGVuZGljdWxhciBmb290IHBvc2l0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwZXJwZW5kaWN1bGFyRm9vdChwb2ludCwgbGluZSkge1xuXG4gIHZhciBhID0gbGluZVswXSwgYiA9IGxpbmVbMV07XG5cbiAgLy8gcmVsYXRpdmUgcG9zaXRpb24gb2YgYiBmcm9tIGFcbiAgdmFyIGJkID0geyB4OiBiLnggLSBhLngsIHk6IGIueSAtIGEueSB9O1xuXG4gIC8vIHNvbHZlIGVxdWF0aW9uIHN5c3RlbSB0byB0aGUgcGFyYW1ldHJpemVkIHZlY3RvcnMgcGFyYW0gcmVhbCB2YWx1ZVxuICB2YXIgciA9IHNvbHZlTGFtYmFTeXN0ZW0oWyBhLngsIGEueSBdLCBbIGJkLngsIGJkLnkgXSwgWyBwb2ludC54LCBwb2ludC55IF0pO1xuXG4gIHJldHVybiB7IHg6IGEueCArIHIqYmQueCwgeTogYS55ICsgcipiZC55IH07XG59XG5cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGEgcG9pbnQgYW5kIGEgbGluZVxuICpcbiAqIEBwYXJhbSB7UG9pbnR9XG4gKiBAcGFyYW0gWyB7UG9pbnR9LCB7UG9pbnR9IF0gbGluZSBkZWZpbmVkIHRocm91Z2ggdHdvIHBvaW50c1xuICogQHJldHVybiB7RmxvYXR9IGRpc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXN0YW5jZVBvaW50TGluZShwb2ludCwgbGluZSkge1xuXG4gIHZhciBwZlBvaW50ID0gcGVycGVuZGljdWxhckZvb3QocG9pbnQsIGxpbmUpO1xuXG4gIC8vIGRpc3RhbmNlIHZlY3RvclxuICB2YXIgY29ubmVjdGlvblZlY3RvciA9IHtcbiAgICB4OiBwZlBvaW50LnggLSBwb2ludC54LFxuICAgIHk6IHBmUG9pbnQueSAtIHBvaW50LnlcbiAgfTtcblxuICByZXR1cm4gdmVjdG9yTGVuZ3RoKGNvbm5lY3Rpb25WZWN0b3IpO1xufVxuXG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzXG4gKlxuICogQHBhcmFtIHtQb2ludH1cbiAqIEBwYXJhbSB7UG9pbnR9XG4gKiBAcmV0dXJuIHtGbG9hdH0gZGlzdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpc3RhbmNlUG9pbnRQb2ludChwb2ludDEsIHBvaW50Mikge1xuXG4gIHJldHVybiB2ZWN0b3JMZW5ndGgoe1xuICAgIHg6IHBvaW50MS54IC0gcG9pbnQyLngsXG4gICAgeTogcG9pbnQxLnkgLSBwb2ludDIueVxuICB9KTtcbn0iLCJpbXBvcnQge1xuICBnZXREaXN0YW5jZVBvaW50UG9pbnQsXG4gIHJvdGF0ZVZlY3RvcixcbiAgZ2V0QW5nbGVcbn0gZnJvbSAnLi9HZW9tZXRyaWNVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0QXR0YWNobWVudFxufSBmcm9tICcuL0xpbmVBdHRhY2htZW50VXRpbCc7XG5cbmltcG9ydCB7XG4gIHJvdW5kUG9pbnRcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTmV3TGFiZWxMaW5lU3RhcnRJbmRleChvbGRXYXlwb2ludHMsIG5ld1dheXBvaW50cywgYXR0YWNobWVudCwgaGludHMpIHtcblxuICB2YXIgaW5kZXggPSBhdHRhY2htZW50LnNlZ21lbnRJbmRleDtcblxuICB2YXIgb2Zmc2V0ID0gbmV3V2F5cG9pbnRzLmxlbmd0aCAtIG9sZFdheXBvaW50cy5sZW5ndGg7XG5cbiAgLy8gc2VnbWVudE1vdmUgaGFwcGVuZWRcbiAgaWYgKGhpbnRzLnNlZ21lbnRNb3ZlKSB7XG5cbiAgICB2YXIgb2xkU2VnbWVudFN0YXJ0SW5kZXggPSBoaW50cy5zZWdtZW50TW92ZS5zZWdtZW50U3RhcnRJbmRleCxcbiAgICAgICAgbmV3U2VnbWVudFN0YXJ0SW5kZXggPSBoaW50cy5zZWdtZW50TW92ZS5uZXdTZWdtZW50U3RhcnRJbmRleDtcblxuICAgIC8vIGlmIGxhYmVsIHdhcyBvbiBtb3ZlZCBzZWdtZW50IHJldHVybiBuZXcgc2VnbWVudCBpbmRleFxuICAgIGlmIChpbmRleCA9PT0gb2xkU2VnbWVudFN0YXJ0SW5kZXgpIHtcbiAgICAgIHJldHVybiBuZXdTZWdtZW50U3RhcnRJbmRleDtcbiAgICB9XG5cbiAgICAvLyBsYWJlbCBpcyBhZnRlciBuZXcgc2VnbWVudCBpbmRleFxuICAgIGlmIChpbmRleCA+PSBuZXdTZWdtZW50U3RhcnRJbmRleCkge1xuICAgICAgcmV0dXJuIChpbmRleCtvZmZzZXQgPCBuZXdTZWdtZW50U3RhcnRJbmRleCkgPyBuZXdTZWdtZW50U3RhcnRJbmRleCA6IGluZGV4K29mZnNldDtcbiAgICB9XG5cbiAgICAvLyBpZiBsYWJlbCBpcyBiZWZvcmUgbmV3IHNlZ21lbnQgaW5kZXhcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvLyBiZW5kcG9pbnRNb3ZlIGhhcHBlbmVkXG4gIGlmIChoaW50cy5iZW5kcG9pbnRNb3ZlKSB7XG5cbiAgICB2YXIgaW5zZXJ0ID0gaGludHMuYmVuZHBvaW50TW92ZS5pbnNlcnQsXG4gICAgICAgIGJlbmRwb2ludEluZGV4ID0gaGludHMuYmVuZHBvaW50TW92ZS5iZW5kcG9pbnRJbmRleCxcbiAgICAgICAgbmV3SW5kZXg7XG5cbiAgICAvLyB3YXlwb2ludHMgbGVuZ3RoIGRpZG50IGNoYW5nZVxuICAgIGlmIChvZmZzZXQgPT09IDApIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICAvLyBsYWJlbCBiZWhpbmQgbmV3L3JlbW92ZWQgYmVuZHBvaW50XG4gICAgaWYgKGluZGV4ID49IGJlbmRwb2ludEluZGV4KSB7XG4gICAgICBuZXdJbmRleCA9IGluc2VydCA/IGluZGV4ICsgMSA6IGluZGV4IC0gMTtcbiAgICB9XG5cbiAgICAvLyBsYWJlbCBiZWZvcmUgbmV3L3JlbW92ZWQgYmVuZHBvaW50XG4gICAgaWYgKGluZGV4IDwgYmVuZHBvaW50SW5kZXgpIHtcblxuICAgICAgbmV3SW5kZXggPSBpbmRleDtcblxuICAgICAgLy8gZGVjaWRlIGxhYmVsIHNob3VsZCB0YWtlIHJpZ2h0IG9yIGxlZnQgc2VnbWVudFxuICAgICAgaWYgKGluc2VydCAmJiBhdHRhY2htZW50LnR5cGUgIT09ICdiZW5kcG9pbnQnICYmIGJlbmRwb2ludEluZGV4LTEgPT09IGluZGV4KSB7XG5cbiAgICAgICAgdmFyIHJlbCA9IHJlbGF0aXZlUG9zaXRpb25NaWRXYXlwb2ludChuZXdXYXlwb2ludHMsIGJlbmRwb2ludEluZGV4KTtcblxuICAgICAgICBpZiAocmVsIDwgYXR0YWNobWVudC5yZWxhdGl2ZUxvY2F0aW9uKSB7XG4gICAgICAgICAgbmV3SW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXdJbmRleDtcbiAgfVxuXG4gIC8vIHN0YXJ0L2VuZCBjaGFuZ2VkXG4gIGlmIChvZmZzZXQgPT09IDApIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBpZiAoaGludHMuY29ubmVjdGlvblN0YXJ0KSB7XG4gICAgcmV0dXJuIChpbmRleCA9PT0gMCkgPyAwIDogbnVsbDtcbiAgfVxuXG4gIGlmIChoaW50cy5jb25uZWN0aW9uRW5kKSB7XG4gICAgcmV0dXJuIChpbmRleCA9PT0gb2xkV2F5cG9pbnRzLmxlbmd0aCAtIDIpID8gbmV3V2F5cG9pbnRzLmxlbmd0aCAtIDIgOiBudWxsO1xuICB9XG5cbiAgLy8gaWYgbm90aGluZyBmaXRzLCByZXR1cm4gbnVsbFxuICByZXR1cm4gbnVsbDtcbn1cblxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcmVxdWlyZWQgYWRqdXN0bWVudCAobW92ZSBkZWx0YSkgZm9yIHRoZSBnaXZlbiBsYWJlbFxuICogYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gd2F5cG9pbnRzIGdvdCB1cGRhdGVkLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkxhYmVsfSBsYWJlbFxuICogQHBhcmFtIHtBcnJheTxQb2ludD59IG5ld1dheXBvaW50c1xuICogQHBhcmFtIHtBcnJheTxQb2ludD59IG9sZFdheXBvaW50c1xuICogQHBhcmFtIHtPYmplY3R9IGhpbnRzXG4gKlxuICogQHJldHVybiB7UG9pbnR9IGRlbHRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYWJlbEFkanVzdG1lbnQobGFiZWwsIG5ld1dheXBvaW50cywgb2xkV2F5cG9pbnRzLCBoaW50cykge1xuXG4gIHZhciB4ID0gMCxcbiAgICAgIHkgPSAwO1xuXG4gIHZhciBsYWJlbFBvc2l0aW9uID0gZ2V0TGFiZWxNaWQobGFiZWwpO1xuXG4gIC8vIGdldCBjbG9zZXN0IGF0dGFjaG1lbnRcbiAgdmFyIGF0dGFjaG1lbnQgPSBnZXRBdHRhY2htZW50KGxhYmVsUG9zaXRpb24sIG9sZFdheXBvaW50cyksXG4gICAgICBvbGRMYWJlbExpbmVJbmRleCA9IGF0dGFjaG1lbnQuc2VnbWVudEluZGV4LFxuICAgICAgbmV3TGFiZWxMaW5lSW5kZXggPSBmaW5kTmV3TGFiZWxMaW5lU3RhcnRJbmRleChvbGRXYXlwb2ludHMsIG5ld1dheXBvaW50cywgYXR0YWNobWVudCwgaGludHMpO1xuXG4gIGlmIChuZXdMYWJlbExpbmVJbmRleCA9PT0gbnVsbCkge1xuICAgIHJldHVybiB7IHg6IHgsIHk6IHkgfTtcbiAgfVxuXG4gIC8vIHNob3VsZCBuZXZlciBoYXBwZW5cbiAgLy8gVE9ETyhAamFuc3R1ZW1tZWwpOiB0aHJvdyBhbiBlcnJvciBoZXJlIHdoZW4gY29ubmVjdGlvblNlZ21lbnRNb3ZlIGlzIHJlZmFjdG9yZWRcbiAgaWYgKG5ld0xhYmVsTGluZUluZGV4IDwgMCB8fFxuICAgICAgbmV3TGFiZWxMaW5lSW5kZXggPiBuZXdXYXlwb2ludHMubGVuZ3RoIC0gMikge1xuICAgIHJldHVybiB7IHg6IHgsIHk6IHkgfTtcbiAgfVxuXG4gIHZhciBvbGRMYWJlbExpbmUgPSBnZXRMaW5lKG9sZFdheXBvaW50cywgb2xkTGFiZWxMaW5lSW5kZXgpLFxuICAgICAgbmV3TGFiZWxMaW5lID0gZ2V0TGluZShuZXdXYXlwb2ludHMsIG5ld0xhYmVsTGluZUluZGV4KSxcbiAgICAgIG9sZEZvb3QgPSBhdHRhY2htZW50LnBvc2l0aW9uO1xuXG4gIHZhciByZWxhdGl2ZUZvb3RQb3NpdGlvbiA9IGdldFJlbGF0aXZlRm9vdFBvc2l0aW9uKG9sZExhYmVsTGluZSwgb2xkRm9vdCksXG4gICAgICBhbmdsZURlbHRhID0gZ2V0QW5nbGVEZWx0YShvbGRMYWJlbExpbmUsIG5ld0xhYmVsTGluZSk7XG5cbiAgLy8gc3BlY2lhbCBydWxlIGlmIGxhYmVsIG9uIGJlbmRwb2ludFxuICBpZiAoYXR0YWNobWVudC50eXBlID09PSAnYmVuZHBvaW50Jykge1xuXG4gICAgdmFyIG9mZnNldCA9IG5ld1dheXBvaW50cy5sZW5ndGggLSBvbGRXYXlwb2ludHMubGVuZ3RoLFxuICAgICAgICBvbGRCZW5kcG9pbnRJbmRleCA9IGF0dGFjaG1lbnQuYmVuZHBvaW50SW5kZXgsXG4gICAgICAgIG9sZEJlbmRwb2ludCA9IG9sZFdheXBvaW50c1tvbGRCZW5kcG9pbnRJbmRleF07XG5cbiAgICAvLyBiZW5kcG9pbnQgcG9zaXRpb24gaGFzbid0IGNoYW5nZWQsIHJldHVybiBzYW1lIHBvc2l0aW9uXG4gICAgaWYgKG5ld1dheXBvaW50cy5pbmRleE9mKG9sZEJlbmRwb2ludCkgIT09IC0xKSB7XG4gICAgICByZXR1cm4geyB4OiB4LCB5OiB5IH07XG4gICAgfVxuXG4gICAgLy8gbmV3IGJlbmRwb2ludCBhbmQgb2xkIGJlbmRwb2ludCBoYXZlIHNhbWUgaW5kZXgsIHRoZW4ganVzdCByZXR1cm4gdGhlIG9mZnNldFxuICAgIGlmIChvZmZzZXQgPT09IDApIHtcbiAgICAgIHZhciBuZXdCZW5kcG9pbnQgPSBuZXdXYXlwb2ludHNbb2xkQmVuZHBvaW50SW5kZXhdO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBuZXdCZW5kcG9pbnQueCAtIGF0dGFjaG1lbnQucG9zaXRpb24ueCxcbiAgICAgICAgeTogbmV3QmVuZHBvaW50LnkgLSBhdHRhY2htZW50LnBvc2l0aW9uLnlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gaWYgYmVuZHBvaW50cyBnZXQgcmVtb3ZlZFxuICAgIGlmIChvZmZzZXQgPCAwICYmIG9sZEJlbmRwb2ludEluZGV4ICE9PSAwICYmIG9sZEJlbmRwb2ludEluZGV4IDwgb2xkV2F5cG9pbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHJlbGF0aXZlRm9vdFBvc2l0aW9uID0gcmVsYXRpdmVQb3NpdGlvbk1pZFdheXBvaW50KG9sZFdheXBvaW50cywgb2xkQmVuZHBvaW50SW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBuZXdGb290ID0ge1xuICAgIHg6IChuZXdMYWJlbExpbmVbMV0ueCAtIG5ld0xhYmVsTGluZVswXS54KSAqIHJlbGF0aXZlRm9vdFBvc2l0aW9uICsgbmV3TGFiZWxMaW5lWzBdLngsXG4gICAgeTogKG5ld0xhYmVsTGluZVsxXS55IC0gbmV3TGFiZWxMaW5lWzBdLnkpICogcmVsYXRpdmVGb290UG9zaXRpb24gKyBuZXdMYWJlbExpbmVbMF0ueVxuICB9O1xuXG4gIC8vIHRoZSByb3RhdGVkIHZlY3RvciB0byBsYWJlbFxuICB2YXIgbmV3TGFiZWxWZWN0b3IgPSByb3RhdGVWZWN0b3Ioe1xuICAgIHg6IGxhYmVsUG9zaXRpb24ueCAtIG9sZEZvb3QueCxcbiAgICB5OiBsYWJlbFBvc2l0aW9uLnkgLSBvbGRGb290LnlcbiAgfSwgYW5nbGVEZWx0YSk7XG5cbiAgLy8gdGhlIG5ldyByZWxhdGl2ZSBwb3NpdGlvblxuICB4ID0gbmV3Rm9vdC54ICsgbmV3TGFiZWxWZWN0b3IueCAtIGxhYmVsUG9zaXRpb24ueDtcbiAgeSA9IG5ld0Zvb3QueSArIG5ld0xhYmVsVmVjdG9yLnkgLSBsYWJlbFBvc2l0aW9uLnk7XG5cbiAgcmV0dXJuIHJvdW5kUG9pbnQoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9KTtcbn1cblxuXG4vLyBIRUxQRVJTIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gcmVsYXRpdmVQb3NpdGlvbk1pZFdheXBvaW50KHdheXBvaW50cywgaWR4KSB7XG5cbiAgdmFyIGRpc3RhbmNlU2VnbWVudDEgPSBnZXREaXN0YW5jZVBvaW50UG9pbnQod2F5cG9pbnRzW2lkeC0xXSwgd2F5cG9pbnRzW2lkeF0pLFxuICAgICAgZGlzdGFuY2VTZWdtZW50MiA9IGdldERpc3RhbmNlUG9pbnRQb2ludCh3YXlwb2ludHNbaWR4XSwgd2F5cG9pbnRzW2lkeCsxXSk7XG5cbiAgdmFyIHJlbGF0aXZlUG9zaXRpb24gPSBkaXN0YW5jZVNlZ21lbnQxIC8gKGRpc3RhbmNlU2VnbWVudDEgKyBkaXN0YW5jZVNlZ21lbnQyKTtcblxuICByZXR1cm4gcmVsYXRpdmVQb3NpdGlvbjtcbn1cblxuZnVuY3Rpb24gZ2V0TGFiZWxNaWQobGFiZWwpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBsYWJlbC54ICsgbGFiZWwud2lkdGggLyAyLFxuICAgIHk6IGxhYmVsLnkgKyBsYWJlbC5oZWlnaHQgLyAyXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEFuZ2xlRGVsdGEobDEsIGwyKSB7XG4gIHZhciBhMSA9IGdldEFuZ2xlKGwxKSxcbiAgICAgIGEyID0gZ2V0QW5nbGUobDIpO1xuICByZXR1cm4gYTIgLSBhMTtcbn1cblxuZnVuY3Rpb24gZ2V0TGluZSh3YXlwb2ludHMsIGlkeCkge1xuICByZXR1cm4gWyB3YXlwb2ludHNbaWR4XSwgd2F5cG9pbnRzW2lkeCsxXSBdO1xufVxuXG5mdW5jdGlvbiBnZXRSZWxhdGl2ZUZvb3RQb3NpdGlvbihsaW5lLCBmb290KSB7XG5cbiAgdmFyIGxlbmd0aCA9IGdldERpc3RhbmNlUG9pbnRQb2ludChsaW5lWzBdLCBsaW5lWzFdKSxcbiAgICAgIGxlbmd0aFRvRm9vdCA9IGdldERpc3RhbmNlUG9pbnRQb2ludChsaW5lWzBdLCBmb290KTtcblxuICByZXR1cm4gbGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aFRvRm9vdCAvIGxlbmd0aDtcbn1cbiIsInZhciBzcXJ0ID0gTWF0aC5zcXJ0LFxuICAgIG1pbiA9IE1hdGgubWluLFxuICAgIG1heCA9IE1hdGgubWF4LFxuICAgIGFicyA9IE1hdGguYWJzO1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgc3F1YXJlIChwb3dlciB0byB0d28pIG9mIGEgbnVtYmVyLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBuXG4gKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBzcShuKSB7XG4gIHJldHVybiBNYXRoLnBvdyhuLCAyKTtcbn1cblxuLyoqXG4gKiBHZXQgZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzLlxuICpcbiAqIEBwYXJhbSB7UG9pbnR9IHAxXG4gKiBAcGFyYW0ge1BvaW50fSBwMlxuICpcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0RGlzdGFuY2UocDEsIHAyKSB7XG4gIHJldHVybiBzcXJ0KHNxKHAxLnggLSBwMi54KSArIHNxKHAxLnkgLSBwMi55KSk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBhdHRhY2htZW50IG9mIHRoZSBnaXZlbiBwb2ludCBvbiB0aGUgc3BlY2lmaWVkIGxpbmUuXG4gKlxuICogVGhlIGF0dGFjaG1lbnQgaXMgZWl0aGVyIGEgYmVuZHBvaW50IChhdHRhY2hlZCB0byB0aGUgZ2l2ZW4gcG9pbnQpXG4gKiBvciBzZWdtZW50IChhdHRhY2hlZCB0byBhIGxvY2F0aW9uIG9uIGEgbGluZSBzZWdtZW50KSBhdHRhY2htZW50OlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIHZhciBwb2ludEF0dGFjaG1lbnQgPSB7XG4gKiAgIHR5cGU6ICdiZW5kcG9pbnQnLFxuICogICBiZW5kcG9pbnRJbmRleDogMyxcbiAqICAgcG9zaXRpb246IHsgeDogMTAsIHk6IDEwIH0gLy8gdGhlIGF0dGFjaCBwb2ludCBvbiB0aGUgbGluZVxuICogfTtcbiAqXG4gKiB2YXIgc2VnbWVudEF0dGFjaG1lbnQgPSB7XG4gKiAgIHR5cGU6ICdzZWdtZW50JyxcbiAqICAgc2VnbWVudEluZGV4OiAyLFxuICogICByZWxhdGl2ZUxvY2F0aW9uOiAwLjMxLCAvLyBhdHRhY2ggcG9pbnQgbG9jYXRpb24gYmV0d2VlbiAwIChhdCBzdGFydCkgYW5kIDEgKGF0IGVuZClcbiAqICAgcG9zaXRpb246IHsgeDogMTAsIHk6IDEwIH0gLy8gdGhlIGF0dGFjaCBwb2ludCBvbiB0aGUgbGluZVxuICogfTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7UG9pbnR9IHBvaW50XG4gKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gbGluZVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gYXR0YWNobWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXR0YWNobWVudChwb2ludCwgbGluZSkge1xuXG4gIHZhciBpZHggPSAwLFxuICAgICAgc2VnbWVudFN0YXJ0LFxuICAgICAgc2VnbWVudEVuZCxcbiAgICAgIHNlZ21lbnRTdGFydERpc3RhbmNlLFxuICAgICAgc2VnbWVudEVuZERpc3RhbmNlLFxuICAgICAgYXR0YWNobWVudFBvc2l0aW9uLFxuICAgICAgbWluRGlzdGFuY2UsXG4gICAgICBpbnRlcnNlY3Rpb25zLFxuICAgICAgYXR0YWNobWVudCxcbiAgICAgIGF0dGFjaG1lbnREaXN0YW5jZSxcbiAgICAgIGNsb3Nlc3RBdHRhY2htZW50RGlzdGFuY2UsXG4gICAgICBjbG9zZXN0QXR0YWNobWVudDtcblxuICBmb3IgKGlkeCA9IDA7IGlkeCA8IGxpbmUubGVuZ3RoIC0gMTsgaWR4KyspIHtcblxuICAgIHNlZ21lbnRTdGFydCA9IGxpbmVbaWR4XTtcbiAgICBzZWdtZW50RW5kID0gbGluZVtpZHggKyAxXTtcblxuICAgIGlmIChwb2ludHNFcXVhbChzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQpKSB7XG4gICAgICBpbnRlcnNlY3Rpb25zID0gWyBzZWdtZW50U3RhcnQgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VnbWVudFN0YXJ0RGlzdGFuY2UgPSBnZXREaXN0YW5jZShwb2ludCwgc2VnbWVudFN0YXJ0KTtcbiAgICAgIHNlZ21lbnRFbmREaXN0YW5jZSA9IGdldERpc3RhbmNlKHBvaW50LCBzZWdtZW50RW5kKTtcblxuICAgICAgbWluRGlzdGFuY2UgPSBtaW4oc2VnbWVudFN0YXJ0RGlzdGFuY2UsIHNlZ21lbnRFbmREaXN0YW5jZSk7XG5cbiAgICAgIGludGVyc2VjdGlvbnMgPSBnZXRDaXJjbGVTZWdtZW50SW50ZXJzZWN0aW9ucyhzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQsIHBvaW50LCBtaW5EaXN0YW5jZSk7XG4gICAgfVxuXG4gICAgaWYgKGludGVyc2VjdGlvbnMubGVuZ3RoIDwgMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBiZXR3ZWVuIFsxLCAyXSBjaXJjbGUgLT4gbGluZSBpbnRlcnNlY3Rpb25zJyk7XG4gICAgfVxuXG4gICAgLy8gb25lIGludGVyc2VjdGlvbiAtPiBiZW5kcG9pbnQgYXR0YWNobWVudFxuICAgIGlmIChpbnRlcnNlY3Rpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgYXR0YWNobWVudCA9IHtcbiAgICAgICAgdHlwZTogJ2JlbmRwb2ludCcsXG4gICAgICAgIHBvc2l0aW9uOiBpbnRlcnNlY3Rpb25zWzBdLFxuICAgICAgICBzZWdtZW50SW5kZXg6IGlkeCxcbiAgICAgICAgYmVuZHBvaW50SW5kZXg6IHBvaW50c0VxdWFsKHNlZ21lbnRTdGFydCwgaW50ZXJzZWN0aW9uc1swXSkgPyBpZHggOiBpZHggKyAxXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIHR3byBpbnRlcnNlY3Rpb25zIC0+IHNlZ21lbnQgYXR0YWNobWVudFxuICAgIGlmIChpbnRlcnNlY3Rpb25zLmxlbmd0aCA9PT0gMikge1xuXG4gICAgICBhdHRhY2htZW50UG9zaXRpb24gPSBtaWQoaW50ZXJzZWN0aW9uc1swXSwgaW50ZXJzZWN0aW9uc1sxXSk7XG5cbiAgICAgIGF0dGFjaG1lbnQgPSB7XG4gICAgICAgIHR5cGU6ICdzZWdtZW50JyxcbiAgICAgICAgcG9zaXRpb246IGF0dGFjaG1lbnRQb3NpdGlvbixcbiAgICAgICAgc2VnbWVudEluZGV4OiBpZHgsXG4gICAgICAgIHJlbGF0aXZlTG9jYXRpb246IGdldERpc3RhbmNlKHNlZ21lbnRTdGFydCwgYXR0YWNobWVudFBvc2l0aW9uKSAvIGdldERpc3RhbmNlKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZClcbiAgICAgIH07XG4gICAgfVxuXG4gICAgYXR0YWNobWVudERpc3RhbmNlID0gZ2V0RGlzdGFuY2UoYXR0YWNobWVudC5wb3NpdGlvbiwgcG9pbnQpO1xuXG4gICAgaWYgKCFjbG9zZXN0QXR0YWNobWVudCB8fCBjbG9zZXN0QXR0YWNobWVudERpc3RhbmNlID4gYXR0YWNobWVudERpc3RhbmNlKSB7XG4gICAgICBjbG9zZXN0QXR0YWNobWVudCA9IGF0dGFjaG1lbnQ7XG4gICAgICBjbG9zZXN0QXR0YWNobWVudERpc3RhbmNlID0gYXR0YWNobWVudERpc3RhbmNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbG9zZXN0QXR0YWNobWVudDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiBhIGNpcmNsZSBhbmQgYSBsaW5lIHNlZ21lbnQuXG4gKlxuICogQHBhcmFtIHtQb2ludH0gczEgc2VnbWVudCBzdGFydFxuICogQHBhcmFtIHtQb2ludH0gczIgc2VnbWVudCBlbmRcbiAqIEBwYXJhbSB7UG9pbnR9IGNjIGNpcmNsZSBjZW50ZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjciBjaXJjbGUgcmFkaXVzXG4gKlxuICogQHJldHVybiB7QXJyYXk8UG9pbnQ+fSBpbnRlcnNlY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldENpcmNsZVNlZ21lbnRJbnRlcnNlY3Rpb25zKHMxLCBzMiwgY2MsIGNyKSB7XG5cbiAgdmFyIGJhWCA9IHMyLnggLSBzMS54O1xuICB2YXIgYmFZID0gczIueSAtIHMxLnk7XG4gIHZhciBjYVggPSBjYy54IC0gczEueDtcbiAgdmFyIGNhWSA9IGNjLnkgLSBzMS55O1xuXG4gIHZhciBhID0gYmFYICogYmFYICsgYmFZICogYmFZO1xuICB2YXIgYkJ5MiA9IGJhWCAqIGNhWCArIGJhWSAqIGNhWTtcbiAgdmFyIGMgPSBjYVggKiBjYVggKyBjYVkgKiBjYVkgLSBjciAqIGNyO1xuXG4gIHZhciBwQnkyID0gYkJ5MiAvIGE7XG4gIHZhciBxID0gYyAvIGE7XG5cbiAgdmFyIGRpc2MgPSBwQnkyICogcEJ5MiAtIHE7XG5cbiAgLy8gY2hlY2sgYWdhaW5zdCBuZWdhdGl2ZSB2YWx1ZSB0byB3b3JrIGFyb3VuZFxuICAvLyBuZWdhdGl2ZSwgdmVyeSBjbG9zZSB0byB6ZXJvIHJlc3VsdHMgKC00ZS0xNSlcbiAgLy8gYmVpbmcgcHJvZHVjZWQgaW4gc29tZSBlbnZpcm9ubWVudHNcbiAgaWYgKGRpc2MgPCAwICYmIGRpc2MgPiAtMC4wMDAwMDEpIHtcbiAgICBkaXNjID0gMDtcbiAgfVxuXG4gIGlmIChkaXNjIDwgMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIGlmIGRpc2MgPT0gMCAuLi4gZGVhbHQgd2l0aCBsYXRlclxuICB2YXIgdG1wU3FydCA9IHNxcnQoZGlzYyk7XG4gIHZhciBhYlNjYWxpbmdGYWN0b3IxID0gLXBCeTIgKyB0bXBTcXJ0O1xuICB2YXIgYWJTY2FsaW5nRmFjdG9yMiA9IC1wQnkyIC0gdG1wU3FydDtcblxuICB2YXIgaTEgPSB7XG4gICAgeDogczEueCAtIGJhWCAqIGFiU2NhbGluZ0ZhY3RvcjEsXG4gICAgeTogczEueSAtIGJhWSAqIGFiU2NhbGluZ0ZhY3RvcjFcbiAgfTtcblxuICBpZiAoZGlzYyA9PT0gMCkgeyAvLyBhYlNjYWxpbmdGYWN0b3IxID09IGFiU2NhbGluZ0ZhY3RvcjJcbiAgICByZXR1cm4gWyBpMSBdO1xuICB9XG5cbiAgdmFyIGkyID0ge1xuICAgIHg6IHMxLnggLSBiYVggKiBhYlNjYWxpbmdGYWN0b3IyLFxuICAgIHk6IHMxLnkgLSBiYVkgKiBhYlNjYWxpbmdGYWN0b3IyXG4gIH07XG5cbiAgLy8gcmV0dXJuIG9ubHkgcG9pbnRzIG9uIGxpbmUgc2VnbWVudFxuICByZXR1cm4gWyBpMSwgaTIgXS5maWx0ZXIoZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiBpc1BvaW50SW5TZWdtZW50KHAsIHMxLCBzMik7XG4gIH0pO1xufVxuXG5cbmZ1bmN0aW9uIGlzUG9pbnRJblNlZ21lbnQocCwgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kKSB7XG4gIHJldHVybiAoXG4gICAgZmVuY2VkKHAueCwgc2VnbWVudFN0YXJ0LngsIHNlZ21lbnRFbmQueCkgJiZcbiAgICBmZW5jZWQocC55LCBzZWdtZW50U3RhcnQueSwgc2VnbWVudEVuZC55KVxuICApO1xufVxuXG5mdW5jdGlvbiBmZW5jZWQobiwgcmFuZ2VTdGFydCwgcmFuZ2VFbmQpIHtcblxuICAvLyB1c2UgbWF0Y2hpbmcgdGhyZXNob2xkIHRvIHdvcmsgYXJvdW5kXG4gIC8vIHByZWNpc2lvbiBlcnJvcnMgaW4gaW50ZXJzZWN0aW9uIGNvbXB1dGF0aW9uXG5cbiAgcmV0dXJuIChcbiAgICBuID49IG1pbihyYW5nZVN0YXJ0LCByYW5nZUVuZCkgLSBFUVVBTF9USFJFU0hPTEQgJiZcbiAgICBuIDw9IG1heChyYW5nZVN0YXJ0LCByYW5nZUVuZCkgKyBFUVVBTF9USFJFU0hPTERcbiAgKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgbWlkIG9mIHR3byBwb2ludHMuXG4gKlxuICogQHBhcmFtIHtQb2ludH0gcDFcbiAqIEBwYXJhbSB7UG9pbnR9IHAyXG4gKlxuICogQHJldHVybiB7UG9pbnR9XG4gKi9cbmZ1bmN0aW9uIG1pZChwMSwgcDIpIHtcblxuICByZXR1cm4ge1xuICAgIHg6IChwMS54ICsgcDIueCkgLyAyLFxuICAgIHk6IChwMS55ICsgcDIueSkgLyAyXG4gIH07XG59XG5cbnZhciBFUVVBTF9USFJFU0hPTEQgPSAwLjE7XG5cbmZ1bmN0aW9uIHBvaW50c0VxdWFsKHAxLCBwMikge1xuXG4gIHJldHVybiAoXG4gICAgYWJzKHAxLnggLSBwMi54KSA8PSBFUVVBTF9USFJFU0hPTEQgJiZcbiAgICBhYnMocDEueSAtIHAyLnkpIDw9IEVRVUFMX1RIUkVTSE9MRFxuICApO1xufVxuIiwiLyoqXG4gKiBSZXR1cm5zIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0d28gbGluZSBzZWdtZW50cyBhIGFuZCBiLlxuICpcbiAqIEBwYXJhbSB7UG9pbnR9IGwxc1xuICogQHBhcmFtIHtQb2ludH0gbDFlXG4gKiBAcGFyYW0ge1BvaW50fSBsMnNcbiAqIEBwYXJhbSB7UG9pbnR9IGwyZVxuICpcbiAqIEByZXR1cm4ge1BvaW50fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaW5lSW50ZXJzZWN0KGwxcywgbDFlLCBsMnMsIGwyZSkge1xuXG4gIC8vIGlmIHRoZSBsaW5lcyBpbnRlcnNlY3QsIHRoZSByZXN1bHQgY29udGFpbnMgdGhlIHggYW5kIHkgb2YgdGhlXG4gIC8vIGludGVyc2VjdGlvbiAodHJlYXRpbmcgdGhlIGxpbmVzIGFzIGluZmluaXRlKSBhbmQgYm9vbGVhbnMgZm9yXG4gIC8vIHdoZXRoZXIgbGluZSBzZWdtZW50IDEgb3IgbGluZSBzZWdtZW50IDIgY29udGFpbiB0aGUgcG9pbnRcbiAgdmFyIGRlbm9taW5hdG9yLCBhLCBiLCBjLCBudW1lcmF0b3I7XG5cbiAgZGVub21pbmF0b3IgPSAoKGwyZS55IC0gbDJzLnkpICogKGwxZS54IC0gbDFzLngpKSAtICgobDJlLnggLSBsMnMueCkgKiAobDFlLnkgLSBsMXMueSkpO1xuXG4gIGlmIChkZW5vbWluYXRvciA9PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhID0gbDFzLnkgLSBsMnMueTtcbiAgYiA9IGwxcy54IC0gbDJzLng7XG4gIG51bWVyYXRvciA9ICgobDJlLnggLSBsMnMueCkgKiBhKSAtICgobDJlLnkgLSBsMnMueSkgKiBiKTtcblxuICBjID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3I7XG5cbiAgLy8gaWYgd2UgY2FzdCB0aGVzZSBsaW5lcyBpbmZpbml0ZWx5IGluXG4gIC8vIGJvdGggZGlyZWN0aW9ucywgdGhleSBpbnRlcnNlY3QgaGVyZVxuICByZXR1cm4ge1xuICAgIHg6IE1hdGgucm91bmQobDFzLnggKyAoYyAqIChsMWUueCAtIGwxcy54KSkpLFxuICAgIHk6IE1hdGgucm91bmQobDFzLnkgKyAoYyAqIChsMWUueSAtIGwxcy55KSkpXG4gIH07XG59IiwiaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGFzVFJCTFxyXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcclxuXHJcbmltcG9ydCB7XHJcbiAgY29sbGVjdExhbmVzLFxyXG4gIGdldExhbmVzUm9vdFxyXG59IGZyb20gJy4uLy4uLy4uL21vZGVsaW5nL3V0aWwvTGFuZVV0aWwnO1xyXG5cclxuaW1wb3J0IHsgTEFORV9NSU5fRElNRU5TSU9OUyB9IGZyb20gJy4uL1Jlc2l6ZUJlaGF2aW9yJztcclxuXHJcbnZhciBhYnMgPSBNYXRoLmFicyxcclxuICAgIG1pbiA9IE1hdGgubWluLFxyXG4gICAgbWF4ID0gTWF0aC5tYXg7XHJcblxyXG5cclxuZnVuY3Rpb24gYWRkVG9UcmJsKHRyYmwsIGF0dHIsIHZhbHVlLCBjaG9pY2UpIHtcclxuICB2YXIgY3VycmVudCA9IHRyYmxbYXR0cl07XHJcblxyXG4gIC8vIG1ha2Ugc3VyZSB0byBzZXQgdGhlIHZhbHVlIGlmIGl0IGRvZXMgbm90IGV4aXN0XHJcbiAgLy8gb3IgYXBwbHkgdGhlIGNvcnJlY3QgdmFsdWUgYnkgY29tcGFyaW5nIGFnYWluc3RcclxuICAvLyBjaG9pY2UodmFsdWUsIGN1cnJlbnRWYWx1ZSlcclxuICB0cmJsW2F0dHJdID0gY3VycmVudCA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBjaG9pY2UodmFsdWUsIGN1cnJlbnQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRNaW4odHJibCwgYXR0ciwgdmFsdWUpIHtcclxuICByZXR1cm4gYWRkVG9UcmJsKHRyYmwsIGF0dHIsIHZhbHVlLCBtaW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRNYXgodHJibCwgYXR0ciwgdmFsdWUpIHtcclxuICByZXR1cm4gYWRkVG9UcmJsKHRyYmwsIGF0dHIsIHZhbHVlLCBtYXgpO1xyXG59XHJcblxyXG52YXIgTEFORV9SSUdIVF9QQURESU5HID0gMjAsXHJcbiAgICBMQU5FX0xFRlRfUEFERElORyA9IDUwLFxyXG4gICAgTEFORV9UT1BfUEFERElORyA9IDIwLFxyXG4gICAgTEFORV9CT1RUT01fUEFERElORyA9IDIwO1xyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJ0aWNpcGFudFJlc2l6ZUNvbnN0cmFpbnRzKGxhbmVTaGFwZSwgcmVzaXplRGlyZWN0aW9uLCBiYWxhbmNlZCkge1xyXG4gIHZhciBsYW5lc1Jvb3QgPSBnZXRMYW5lc1Jvb3QobGFuZVNoYXBlKTtcclxuXHJcbiAgdmFyIGlzRmlyc3QgPSB0cnVlLFxyXG4gICAgICBpc0xhc3QgPSB0cnVlO1xyXG5cclxuICAvLyBtYXggdG9wL2JvdHRvbSBzaXplIGZvciBsYW5lc1xyXG4gIHZhciBhbGxMYW5lcyA9IGNvbGxlY3RMYW5lcyhsYW5lc1Jvb3QsIFsgbGFuZXNSb290IF0pO1xyXG5cclxuICB2YXIgbGFuZVRyYmwgPSBhc1RSQkwobGFuZVNoYXBlKTtcclxuXHJcbiAgdmFyIG1heFRyYmwgPSB7fSxcclxuICAgICAgbWluVHJibCA9IHt9O1xyXG5cclxuICBpZiAoL2UvLnRlc3QocmVzaXplRGlyZWN0aW9uKSkge1xyXG4gICAgbWluVHJibC5yaWdodCA9IGxhbmVUcmJsLmxlZnQgKyBMQU5FX01JTl9ESU1FTlNJT05TLndpZHRoO1xyXG4gIH0gZWxzZVxyXG4gIGlmICgvdy8udGVzdChyZXNpemVEaXJlY3Rpb24pKSB7XHJcbiAgICBtaW5UcmJsLmxlZnQgPSBsYW5lVHJibC5yaWdodCAtIExBTkVfTUlOX0RJTUVOU0lPTlMud2lkdGg7XHJcbiAgfVxyXG5cclxuICBhbGxMYW5lcy5mb3JFYWNoKGZ1bmN0aW9uKG90aGVyKSB7XHJcblxyXG4gICAgdmFyIG90aGVyVHJibCA9IGFzVFJCTChvdGhlcik7XHJcblxyXG4gICAgaWYgKC9uLy50ZXN0KHJlc2l6ZURpcmVjdGlvbikpIHtcclxuXHJcbiAgICAgIGlmIChvdGhlclRyYmwudG9wIDwgKGxhbmVUcmJsLnRvcCAtIDEwKSkge1xyXG4gICAgICAgIGlzRmlyc3QgPSBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gbWF4IHRvcCBzaXplIChiYXNlZCBvbiBuZXh0IGVsZW1lbnQpXHJcbiAgICAgIGlmIChiYWxhbmNlZCAmJiBhYnMobGFuZVRyYmwudG9wIC0gb3RoZXJUcmJsLmJvdHRvbSkgPCAxMCkge1xyXG4gICAgICAgIGFkZE1heChtYXhUcmJsLCAndG9wJywgb3RoZXJUcmJsLnRvcCArIExBTkVfTUlOX0RJTUVOU0lPTlMuaGVpZ2h0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gbWluIHRvcCBzaXplIChiYXNlZCBvbiBzZWxmIG9yIG5lc3RlZCBlbGVtZW50KVxyXG4gICAgICBpZiAoYWJzKGxhbmVUcmJsLnRvcCAtIG90aGVyVHJibC50b3ApIDwgNSkge1xyXG4gICAgICAgIGFkZE1pbihtaW5UcmJsLCAndG9wJywgb3RoZXJUcmJsLmJvdHRvbSAtIExBTkVfTUlOX0RJTUVOU0lPTlMuaGVpZ2h0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICgvcy8udGVzdChyZXNpemVEaXJlY3Rpb24pKSB7XHJcblxyXG4gICAgICBpZiAob3RoZXJUcmJsLmJvdHRvbSA+IChsYW5lVHJibC5ib3R0b20gKyAxMCkpIHtcclxuICAgICAgICBpc0xhc3QgPSBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gbWF4IGJvdHRvbSBzaXplIChiYXNlZCBvbiBwcmV2aW91cyBlbGVtZW50KVxyXG4gICAgICBpZiAoYmFsYW5jZWQgJiYgYWJzKGxhbmVUcmJsLmJvdHRvbSAtIG90aGVyVHJibC50b3ApIDwgMTApIHtcclxuICAgICAgICBhZGRNaW4obWF4VHJibCwgJ2JvdHRvbScsIG90aGVyVHJibC5ib3R0b20gLSBMQU5FX01JTl9ESU1FTlNJT05TLmhlaWdodCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIG1pbiBib3R0b20gc2l6ZSAoYmFzZWQgb24gc2VsZiBvciBuZXN0ZWQgZWxlbWVudClcclxuICAgICAgaWYgKGFicyhsYW5lVHJibC5ib3R0b20gLSBvdGhlclRyYmwuYm90dG9tKSA8IDUpIHtcclxuICAgICAgICBhZGRNYXgobWluVHJibCwgJ2JvdHRvbScsIG90aGVyVHJibC50b3AgKyBMQU5FX01JTl9ESU1FTlNJT05TLmhlaWdodCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgLy8gbWF4IHRvcC9ib3R0b20vbGVmdC9yaWdodCBzaXplIGJhc2VkIG9uIGZsb3cgbm9kZXNcclxuICB2YXIgZmxvd0VsZW1lbnRzID0gbGFuZXNSb290LmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihzKSB7XHJcbiAgICByZXR1cm4gIXMuaGlkZGVuICYmICFzLndheXBvaW50cyAmJiAoaXMocywgJ2JwbW46Rmxvd0VsZW1lbnQnKSB8fCBpcyhzLCAnYnBtbjpBcnRpZmFjdCcpKTtcclxuICB9KTtcclxuXHJcbiAgZmxvd0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZmxvd0VsZW1lbnQpIHtcclxuXHJcbiAgICB2YXIgZmxvd0VsZW1lbnRUcmJsID0gYXNUUkJMKGZsb3dFbGVtZW50KTtcclxuXHJcbiAgICBpZiAoaXNGaXJzdCAmJiAvbi8udGVzdChyZXNpemVEaXJlY3Rpb24pKSB7XHJcbiAgICAgIGFkZE1pbihtaW5UcmJsLCAndG9wJywgZmxvd0VsZW1lbnRUcmJsLnRvcCAtIExBTkVfVE9QX1BBRERJTkcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgvZS8udGVzdChyZXNpemVEaXJlY3Rpb24pKSB7XHJcbiAgICAgIGFkZE1heChtaW5UcmJsLCAncmlnaHQnLCBmbG93RWxlbWVudFRyYmwucmlnaHQgKyBMQU5FX1JJR0hUX1BBRERJTkcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0xhc3QgJiYgL3MvLnRlc3QocmVzaXplRGlyZWN0aW9uKSkge1xyXG4gICAgICBhZGRNYXgobWluVHJibCwgJ2JvdHRvbScsIGZsb3dFbGVtZW50VHJibC5ib3R0b20gKyBMQU5FX0JPVFRPTV9QQURESU5HKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoL3cvLnRlc3QocmVzaXplRGlyZWN0aW9uKSkge1xyXG4gICAgICBhZGRNaW4obWluVHJibCwgJ2xlZnQnLCBmbG93RWxlbWVudFRyYmwubGVmdCAtIExBTkVfTEVGVF9QQURESU5HKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIG1pbjogbWluVHJibCxcclxuICAgIG1heDogbWF4VHJibFxyXG4gIH07XHJcbn0iLCJpbXBvcnQge1xuICBmaWx0ZXJcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBlYWNoRWxlbWVudFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0VsZW1lbnRzJztcblxuaW1wb3J0IHtcbiAgZ2V0TGFuZXNSb290LFxuICBnZXRDaGlsZExhbmVzLFxuICBMQU5FX0lOREVOVEFUSU9OXG59IGZyb20gJy4uL3V0aWwvTGFuZVV0aWwnO1xuXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgYWxsb3dzIHVzIHRvIGFkZCBhIG5ldyBsYW5lXG4gKiBhYm92ZSBvciBiZWxvdyBhbiBleGlzdGluZyBvbmUuXG4gKlxuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7U3BhY2VUb29sfSBzcGFjZVRvb2xcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQWRkTGFuZUhhbmRsZXIobW9kZWxpbmcsIHNwYWNlVG9vbCkge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl9zcGFjZVRvb2wgPSBzcGFjZVRvb2w7XG59XG5cbkFkZExhbmVIYW5kbGVyLiRpbmplY3QgPSBbXG4gICdtb2RlbGluZycsXG4gICdzcGFjZVRvb2wnXG5dO1xuXG5cbkFkZExhbmVIYW5kbGVyLnByb3RvdHlwZS5wcmVFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzcGFjZVRvb2wgPSB0aGlzLl9zcGFjZVRvb2wsXG4gICAgICBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nO1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBsb2NhdGlvbiA9IGNvbnRleHQubG9jYXRpb247XG5cbiAgdmFyIGxhbmVzUm9vdCA9IGdldExhbmVzUm9vdChzaGFwZSk7XG5cbiAgdmFyIGlzUm9vdCA9IGxhbmVzUm9vdCA9PT0gc2hhcGUsXG4gICAgICBsYW5lUGFyZW50ID0gaXNSb290ID8gc2hhcGUgOiBzaGFwZS5wYXJlbnQ7XG5cbiAgdmFyIGV4aXN0aW5nQ2hpbGRMYW5lcyA9IGdldENoaWxkTGFuZXMobGFuZVBhcmVudCk7XG5cbiAgLy8gKDApIGFkZCBhIGxhbmUgaWYgd2UgY3VycmVudGx5IGdvdCBub25lIGFuZCBhcmUgYWRkaW5nIHRvIHJvb3RcbiAgaWYgKCFleGlzdGluZ0NoaWxkTGFuZXMubGVuZ3RoKSB7XG4gICAgbW9kZWxpbmcuY3JlYXRlU2hhcGUoeyB0eXBlOiAnYnBtbjpMYW5lJyB9LCB7XG4gICAgICB4OiBzaGFwZS54ICsgTEFORV9JTkRFTlRBVElPTixcbiAgICAgIHk6IHNoYXBlLnksXG4gICAgICB3aWR0aDogc2hhcGUud2lkdGggLSBMQU5FX0lOREVOVEFUSU9OLFxuICAgICAgaGVpZ2h0OiBzaGFwZS5oZWlnaHRcbiAgICB9LCBsYW5lUGFyZW50KTtcbiAgfVxuXG4gIC8vICgxKSBjb2xsZWN0IGFmZmVjdGVkIGVsZW1lbnRzIHRvIGNyZWF0ZSBuZWNlc3Nhcnkgc3BhY2VcbiAgdmFyIGFsbEFmZmVjdGVkID0gW107XG5cbiAgZWFjaEVsZW1lbnQobGFuZXNSb290LCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgYWxsQWZmZWN0ZWQucHVzaChlbGVtZW50KTtcblxuICAgIC8vIGhhbmRsZSBlbGVtZW50IGxhYmVscyBpbiB0aGUgZGlhZ3JhbSByb290XG4gICAgaWYgKGVsZW1lbnQubGFiZWwpIHtcbiAgICAgIGFsbEFmZmVjdGVkLnB1c2goZWxlbWVudC5sYWJlbCk7XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQgPT09IHNoYXBlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlcihlbGVtZW50LmNoaWxkcmVuLCBmdW5jdGlvbihjKSB7XG4gICAgICByZXR1cm4gYyAhPT0gc2hhcGU7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHZhciBvZmZzZXQgPSBsb2NhdGlvbiA9PT0gJ3RvcCcgPyAtMTIwIDogMTIwLFxuICAgICAgbGFuZVBvc2l0aW9uID0gbG9jYXRpb24gPT09ICd0b3AnID8gc2hhcGUueSA6IHNoYXBlLnkgKyBzaGFwZS5oZWlnaHQsXG4gICAgICBzcGFjZVBvcyA9IGxhbmVQb3NpdGlvbiArIChsb2NhdGlvbiA9PT0gJ3RvcCcgPyAxMCA6IC0xMCksXG4gICAgICBkaXJlY3Rpb24gPSBsb2NhdGlvbiA9PT0gJ3RvcCcgPyAnbicgOiAncyc7XG5cbiAgdmFyIGFkanVzdG1lbnRzID0gc3BhY2VUb29sLmNhbGN1bGF0ZUFkanVzdG1lbnRzKGFsbEFmZmVjdGVkLCAneScsIG9mZnNldCwgc3BhY2VQb3MpO1xuXG4gIHNwYWNlVG9vbC5tYWtlU3BhY2UoXG4gICAgYWRqdXN0bWVudHMubW92aW5nU2hhcGVzLFxuICAgIGFkanVzdG1lbnRzLnJlc2l6aW5nU2hhcGVzLFxuICAgIHsgeDogMCwgeTogb2Zmc2V0IH0sXG4gICAgZGlyZWN0aW9uLFxuICAgIHNwYWNlUG9zXG4gICk7XG5cbiAgLy8gKDIpIGNyZWF0ZSBuZXcgbGFuZSBhdCBvcGVuIHNwYWNlXG4gIGNvbnRleHQubmV3TGFuZSA9IG1vZGVsaW5nLmNyZWF0ZVNoYXBlKHsgdHlwZTogJ2JwbW46TGFuZScgfSwge1xuICAgIHg6IHNoYXBlLnggKyAoaXNSb290ID8gTEFORV9JTkRFTlRBVElPTiA6IDApLFxuICAgIHk6IGxhbmVQb3NpdGlvbiAtIChsb2NhdGlvbiA9PT0gJ3RvcCcgPyAxMjAgOiAwKSxcbiAgICB3aWR0aDogc2hhcGUud2lkdGggLSAoaXNSb290ID8gTEFORV9JTkRFTlRBVElPTiA6IDApLFxuICAgIGhlaWdodDogMTIwXG4gIH0sIGxhbmVQYXJlbnQpO1xufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIElkQ2xhaW1IYW5kbGVyKG1vZGRsZSkge1xuICB0aGlzLl9tb2RkbGUgPSBtb2RkbGU7XG59XG5cbklkQ2xhaW1IYW5kbGVyLiRpbmplY3QgPSBbICdtb2RkbGUnIF07XG5cblxuSWRDbGFpbUhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBpZHMgPSB0aGlzLl9tb2RkbGUuaWRzLFxuICAgICAgaWQgPSBjb250ZXh0LmlkLFxuICAgICAgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgIGNsYWltaW5nID0gY29udGV4dC5jbGFpbWluZztcblxuICBpZiAoY2xhaW1pbmcpIHtcbiAgICBpZHMuY2xhaW0oaWQsIGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIGlkcy51bmNsYWltKGlkKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDb21tYW5kIHJldmVydCBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuSWRDbGFpbUhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIGlkcyA9IHRoaXMuX21vZGRsZS5pZHMsXG4gICAgICBpZCA9IGNvbnRleHQuaWQsXG4gICAgICBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50LFxuICAgICAgY2xhaW1pbmcgPSBjb250ZXh0LmNsYWltaW5nO1xuXG4gIGlmIChjbGFpbWluZykge1xuICAgIGlkcy51bmNsYWltKGlkKTtcbiAgfSBlbHNlIHtcbiAgICBpZHMuY2xhaW0oaWQsIGVsZW1lbnQpO1xuICB9XG59O1xuXG4iLCJpbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0TGFuZXNSb290LFxuICBjb21wdXRlTGFuZXNSZXNpemVcbn0gZnJvbSAnLi4vdXRpbC9MYW5lVXRpbCc7XG5cbmltcG9ydCB7XG4gIGVhY2hFbGVtZW50XG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvRWxlbWVudHMnO1xuXG5pbXBvcnQge1xuICBhc1RSQkxcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQge1xuICBzdWJzdHJhY3RUUkJMXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3Jlc2l6ZS9SZXNpemVVdGlsJztcblxuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IHJlc2l6ZXMgYSBsYW5lLlxuICpcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlc2l6ZUxhbmVIYW5kbGVyKG1vZGVsaW5nLCBzcGFjZVRvb2wpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbiAgdGhpcy5fc3BhY2VUb29sID0gc3BhY2VUb29sO1xufVxuXG5SZXNpemVMYW5lSGFuZGxlci4kaW5qZWN0ID0gW1xuICAnbW9kZWxpbmcnLFxuICAnc3BhY2VUb29sJ1xuXTtcblxuXG5SZXNpemVMYW5lSGFuZGxlci5wcm90b3R5cGUucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgbmV3Qm91bmRzID0gY29udGV4dC5uZXdCb3VuZHMsXG4gICAgICBiYWxhbmNlZCA9IGNvbnRleHQuYmFsYW5jZWQ7XG5cbiAgaWYgKGJhbGFuY2VkICE9PSBmYWxzZSkge1xuICAgIHRoaXMucmVzaXplQmFsYW5jZWQoc2hhcGUsIG5ld0JvdW5kcyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZXNpemVTcGFjZShzaGFwZSwgbmV3Qm91bmRzKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIFJlc2l6ZSBiYWxhbmNlZCwgYWRqdXN0aW5nIG5leHQgLyBwcmV2aW91cyBsYW5lIHNpemVzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBzaGFwZVxuICogQHBhcmFtIHtCb3VuZHN9IG5ld0JvdW5kc1xuICovXG5SZXNpemVMYW5lSGFuZGxlci5wcm90b3R5cGUucmVzaXplQmFsYW5jZWQgPSBmdW5jdGlvbihzaGFwZSwgbmV3Qm91bmRzKSB7XG5cbiAgdmFyIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG5cbiAgdmFyIHJlc2l6ZU5lZWRlZCA9IGNvbXB1dGVMYW5lc1Jlc2l6ZShzaGFwZSwgbmV3Qm91bmRzKTtcblxuICAvLyByZXNpemUgdGhlIGxhbmVcbiAgbW9kZWxpbmcucmVzaXplU2hhcGUoc2hhcGUsIG5ld0JvdW5kcyk7XG5cbiAgLy8gcmVzaXplIG90aGVyIGxhbmVzIGFzIG5lZWRlZFxuICByZXNpemVOZWVkZWQuZm9yRWFjaChmdW5jdGlvbihyKSB7XG4gICAgbW9kZWxpbmcucmVzaXplU2hhcGUoci5zaGFwZSwgci5uZXdCb3VuZHMpO1xuICB9KTtcbn07XG5cblxuLyoqXG4gKiBSZXNpemUsIG1ha2luZyBhY3R1YWwgc3BhY2UgYW5kIG1vdmluZyBiZWxvdyAvIGFib3ZlIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBzaGFwZVxuICogQHBhcmFtIHtCb3VuZHN9IG5ld0JvdW5kc1xuICovXG5SZXNpemVMYW5lSGFuZGxlci5wcm90b3R5cGUucmVzaXplU3BhY2UgPSBmdW5jdGlvbihzaGFwZSwgbmV3Qm91bmRzKSB7XG4gIHZhciBzcGFjZVRvb2wgPSB0aGlzLl9zcGFjZVRvb2w7XG5cbiAgdmFyIHNoYXBlVHJibCA9IGFzVFJCTChzaGFwZSksXG4gICAgICBuZXdUcmJsID0gYXNUUkJMKG5ld0JvdW5kcyk7XG5cbiAgdmFyIHRyYmxEaWZmID0gc3Vic3RyYWN0VFJCTChuZXdUcmJsLCBzaGFwZVRyYmwpO1xuXG4gIHZhciBsYW5lc1Jvb3QgPSBnZXRMYW5lc1Jvb3Qoc2hhcGUpO1xuXG4gIHZhciBhbGxBZmZlY3RlZCA9IFtdLFxuICAgICAgYWxsTGFuZXMgPSBbXTtcblxuICBlYWNoRWxlbWVudChsYW5lc1Jvb3QsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICBhbGxBZmZlY3RlZC5wdXNoKGVsZW1lbnQpO1xuXG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkxhbmUnKSB8fCBpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgICBhbGxMYW5lcy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50LmNoaWxkcmVuO1xuICB9KTtcblxuICB2YXIgY2hhbmdlLFxuICAgICAgc3BhY2VQb3MsXG4gICAgICBkaXJlY3Rpb24sXG4gICAgICBvZmZzZXQsXG4gICAgICBhZGp1c3RtZW50cztcblxuICBpZiAodHJibERpZmYuYm90dG9tIHx8IHRyYmxEaWZmLnRvcCkge1xuXG4gICAgY2hhbmdlID0gdHJibERpZmYuYm90dG9tIHx8IHRyYmxEaWZmLnRvcDtcbiAgICBzcGFjZVBvcyA9IHNoYXBlLnkgKyAodHJibERpZmYuYm90dG9tID8gc2hhcGUuaGVpZ2h0IDogMCkgKyAodHJibERpZmYuYm90dG9tID8gLTEwIDogMTApO1xuICAgIGRpcmVjdGlvbiA9IHRyYmxEaWZmLmJvdHRvbSA/ICdzJyA6ICduJztcblxuICAgIG9mZnNldCA9IHRyYmxEaWZmLnRvcCA+IDAgfHwgdHJibERpZmYuYm90dG9tIDwgMCA/IC1jaGFuZ2UgOiBjaGFuZ2U7XG5cbiAgICBhZGp1c3RtZW50cyA9IHNwYWNlVG9vbC5jYWxjdWxhdGVBZGp1c3RtZW50cyhhbGxBZmZlY3RlZCwgJ3knLCBvZmZzZXQsIHNwYWNlUG9zKTtcblxuICAgIHNwYWNlVG9vbC5tYWtlU3BhY2UoYWRqdXN0bWVudHMubW92aW5nU2hhcGVzLCBhZGp1c3RtZW50cy5yZXNpemluZ1NoYXBlcywgeyB4OiAwLCB5OiBjaGFuZ2UgfSwgZGlyZWN0aW9uKTtcbiAgfVxuXG5cbiAgaWYgKHRyYmxEaWZmLmxlZnQgfHwgdHJibERpZmYucmlnaHQpIHtcblxuICAgIGNoYW5nZSA9IHRyYmxEaWZmLnJpZ2h0IHx8IHRyYmxEaWZmLmxlZnQ7XG4gICAgc3BhY2VQb3MgPSBzaGFwZS54ICsgKHRyYmxEaWZmLnJpZ2h0ID8gc2hhcGUud2lkdGggOiAwKSArICh0cmJsRGlmZi5yaWdodCA/IC0xMCA6IDEwMCk7XG4gICAgZGlyZWN0aW9uID0gdHJibERpZmYucmlnaHQgPyAnZScgOiAndyc7XG5cbiAgICBvZmZzZXQgPSB0cmJsRGlmZi5sZWZ0ID4gMCB8fCB0cmJsRGlmZi5yaWdodCA8IDAgPyAtY2hhbmdlIDogY2hhbmdlO1xuXG4gICAgYWRqdXN0bWVudHMgPSBzcGFjZVRvb2wuY2FsY3VsYXRlQWRqdXN0bWVudHMoYWxsTGFuZXMsICd4Jywgb2Zmc2V0LCBzcGFjZVBvcyk7XG5cbiAgICBzcGFjZVRvb2wubWFrZVNwYWNlKGFkanVzdG1lbnRzLm1vdmluZ1NoYXBlcywgYWRqdXN0bWVudHMucmVzaXppbmdTaGFwZXMsIHsgeDogY2hhbmdlLCB5OiAwIH0sIGRpcmVjdGlvbik7XG4gIH1cbn07IiwiaW1wb3J0IHtcclxuICBhc3NpZ24sXHJcbiAgZm9yRWFjaFxyXG59IGZyb20gJ21pbi1kYXNoJztcclxuXHJcblxyXG52YXIgREVGQVVMVF9DT0xPUlMgPSB7XHJcbiAgZmlsbDogdW5kZWZpbmVkLFxyXG4gIHN0cm9rZTogdW5kZWZpbmVkXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU2V0Q29sb3JIYW5kbGVyKGNvbW1hbmRTdGFjaykge1xyXG4gIHRoaXMuX2NvbW1hbmRTdGFjayA9IGNvbW1hbmRTdGFjaztcclxufVxyXG5cclxuU2V0Q29sb3JIYW5kbGVyLiRpbmplY3QgPSBbXHJcbiAgJ2NvbW1hbmRTdGFjaydcclxuXTtcclxuXHJcblxyXG5TZXRDb2xvckhhbmRsZXIucHJvdG90eXBlLnBvc3RFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xyXG4gIHZhciBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHMsXHJcbiAgICAgIGNvbG9ycyA9IGNvbnRleHQuY29sb3JzIHx8IERFRkFVTFRfQ09MT1JTO1xyXG5cclxuICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gIHZhciBkaSA9IHt9O1xyXG5cclxuICBpZiAoJ2ZpbGwnIGluIGNvbG9ycykge1xyXG4gICAgYXNzaWduKGRpLCB7IGZpbGw6IGNvbG9ycy5maWxsIH0pO1xyXG4gIH1cclxuXHJcbiAgaWYgKCdzdHJva2UnIGluIGNvbG9ycykge1xyXG4gICAgYXNzaWduKGRpLCB7IHN0cm9rZTogY29sb3JzLnN0cm9rZSB9KTtcclxuICB9XHJcblxyXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHJcbiAgICBzZWxmLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVQcm9wZXJ0aWVzJywge1xyXG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICBwcm9wZXJ0aWVzOiB7XHJcbiAgICAgICAgZGk6IGRpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH0pO1xyXG5cclxufTsiLCJpbXBvcnQge1xuICBnZXRDaGlsZExhbmVzLFxuICBMQU5FX0lOREVOVEFUSU9OXG59IGZyb20gJy4uL3V0aWwvTGFuZVV0aWwnO1xuXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgc3BsaXRzIGEgbGFuZSBpbnRvIGEgbnVtYmVyIG9mIHN1Yi1sYW5lcyxcbiAqIGNyZWF0aW5nIG5ldyBzdWIgbGFuZXMsIGlmIG5lY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTcGxpdExhbmVIYW5kbGVyKG1vZGVsaW5nLCB0cmFuc2xhdGUpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbiAgdGhpcy5fdHJhbnNsYXRlID0gdHJhbnNsYXRlO1xufVxuXG5TcGxpdExhbmVIYW5kbGVyLiRpbmplY3QgPSBbXG4gICdtb2RlbGluZycsXG4gICd0cmFuc2xhdGUnXG5dO1xuXG5cblNwbGl0TGFuZUhhbmRsZXIucHJvdG90eXBlLnByZUV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmcsXG4gICAgICB0cmFuc2xhdGUgPSB0aGlzLl90cmFuc2xhdGU7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIG5ld0xhbmVzQ291bnQgPSBjb250ZXh0LmNvdW50O1xuXG4gIHZhciBjaGlsZExhbmVzID0gZ2V0Q2hpbGRMYW5lcyhzaGFwZSksXG4gICAgICBleGlzdGluZ0xhbmVzQ291bnQgPSBjaGlsZExhbmVzLmxlbmd0aDtcblxuICBpZiAoZXhpc3RpbmdMYW5lc0NvdW50ID4gbmV3TGFuZXNDb3VudCkge1xuICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ21vcmUgdGhhbiB7Y291bnR9IGNoaWxkIGxhbmVzJywgeyBjb3VudDogbmV3TGFuZXNDb3VudCB9KSk7XG4gIH1cblxuICB2YXIgbmV3TGFuZXNIZWlnaHQgPSBNYXRoLnJvdW5kKHNoYXBlLmhlaWdodCAvIG5ld0xhbmVzQ291bnQpO1xuXG4gIC8vIEl0ZXJhdGUgZnJvbSB0b3AgdG8gYm90dG9tIGluIGNoaWxkIGxhbmUgb3JkZXIsXG4gIC8vIHJlc2l6aW5nIGV4aXN0aW5nIGxhbmVzIGFuZCBjcmVhdGluZyBuZXcgb25lc1xuICAvLyBzbyB0aGF0IHRoZXkgc3BsaXQgdGhlIHBhcmVudCBwcm9wb3J0aW9uYWxseS5cbiAgLy9cbiAgLy8gRHVlIHRvIHJvdW5kaW5nIHJlbGF0ZWQgZXJyb3JzLCB0aGUgYm90dG9tIGxhbmVcbiAgLy8gbmVlZHMgdG8gdGFrZSB1cCBhbGwgdGhlIHJlbWFpbmluZyBzcGFjZS5cbiAgdmFyIGxhbmVZLFxuICAgICAgbGFuZUhlaWdodCxcbiAgICAgIGxhbmVCb3VuZHMsXG4gICAgICBuZXdMYW5lQXR0cnMsXG4gICAgICBpZHg7XG5cbiAgZm9yIChpZHggPSAwOyBpZHggPCBuZXdMYW5lc0NvdW50OyBpZHgrKykge1xuXG4gICAgbGFuZVkgPSBzaGFwZS55ICsgaWR4ICogbmV3TGFuZXNIZWlnaHQ7XG5cbiAgICAvLyBpZiBib3R0b20gbGFuZVxuICAgIGlmIChpZHggPT09IG5ld0xhbmVzQ291bnQgLSAxKSB7XG4gICAgICBsYW5lSGVpZ2h0ID0gc2hhcGUuaGVpZ2h0IC0gKG5ld0xhbmVzSGVpZ2h0ICogaWR4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFuZUhlaWdodCA9IG5ld0xhbmVzSGVpZ2h0O1xuICAgIH1cblxuICAgIGxhbmVCb3VuZHMgPSB7XG4gICAgICB4OiBzaGFwZS54ICsgTEFORV9JTkRFTlRBVElPTixcbiAgICAgIHk6IGxhbmVZLFxuICAgICAgd2lkdGg6IHNoYXBlLndpZHRoIC0gTEFORV9JTkRFTlRBVElPTixcbiAgICAgIGhlaWdodDogbGFuZUhlaWdodFxuICAgIH07XG5cbiAgICBpZiAoaWR4IDwgZXhpc3RpbmdMYW5lc0NvdW50KSB7XG5cbiAgICAgIC8vIHJlc2l6ZSBleGlzdGluZyBsYW5lXG4gICAgICBtb2RlbGluZy5yZXNpemVTaGFwZShjaGlsZExhbmVzW2lkeF0sIGxhbmVCb3VuZHMpO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIGNyZWF0ZSBhIG5ldyBsYW5lIGF0IHBvc2l0aW9uXG4gICAgICBuZXdMYW5lQXR0cnMgPSB7XG4gICAgICAgIHR5cGU6ICdicG1uOkxhbmUnXG4gICAgICB9O1xuXG4gICAgICBtb2RlbGluZy5jcmVhdGVTaGFwZShuZXdMYW5lQXR0cnMsIGxhbmVCb3VuZHMsIHNoYXBlKTtcbiAgICB9XG4gIH1cbn07XG4iLCJpbXBvcnQge1xuICBhZGQgYXMgY29sbGVjdGlvbkFkZCxcbiAgcmVtb3ZlIGFzIGNvbGxlY3Rpb25SZW1vdmVcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9Db2xsZWN0aW9ucyc7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVXBkYXRlQ2FudmFzUm9vdEhhbmRsZXIoY2FudmFzLCBtb2RlbGluZykge1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG59XG5cblVwZGF0ZUNhbnZhc1Jvb3RIYW5kbGVyLiRpbmplY3QgPSBbXG4gICdjYW52YXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cblVwZGF0ZUNhbnZhc1Jvb3RIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjYW52YXMgPSB0aGlzLl9jYW52YXM7XG5cbiAgdmFyIG5ld1Jvb3QgPSBjb250ZXh0Lm5ld1Jvb3QsXG4gICAgICBuZXdSb290QnVzaW5lc3NPYmplY3QgPSBuZXdSb290LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgb2xkUm9vdCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpLFxuICAgICAgb2xkUm9vdEJ1c2luZXNzT2JqZWN0ID0gb2xkUm9vdC5idXNpbmVzc09iamVjdCxcbiAgICAgIGJwbW5EZWZpbml0aW9ucyA9IG9sZFJvb3RCdXNpbmVzc09iamVjdC4kcGFyZW50LFxuICAgICAgZGlQbGFuZSA9IG9sZFJvb3RCdXNpbmVzc09iamVjdC5kaTtcblxuICAvLyAoMSkgcmVwbGFjZSBwcm9jZXNzIG9sZCA8PiBuZXcgcm9vdFxuICBjYW52YXMuc2V0Um9vdEVsZW1lbnQobmV3Um9vdCwgdHJ1ZSk7XG5cbiAgLy8gKDIpIHVwZGF0ZSByb290IGVsZW1lbnRzXG4gIGNvbGxlY3Rpb25BZGQoYnBtbkRlZmluaXRpb25zLnJvb3RFbGVtZW50cywgbmV3Um9vdEJ1c2luZXNzT2JqZWN0KTtcbiAgbmV3Um9vdEJ1c2luZXNzT2JqZWN0LiRwYXJlbnQgPSBicG1uRGVmaW5pdGlvbnM7XG5cbiAgY29sbGVjdGlvblJlbW92ZShicG1uRGVmaW5pdGlvbnMucm9vdEVsZW1lbnRzLCBvbGRSb290QnVzaW5lc3NPYmplY3QpO1xuICBvbGRSb290QnVzaW5lc3NPYmplY3QuJHBhcmVudCA9IG51bGw7XG5cbiAgLy8gKDMpIHdpcmUgZGlcbiAgb2xkUm9vdEJ1c2luZXNzT2JqZWN0LmRpID0gbnVsbDtcblxuICBkaVBsYW5lLmJwbW5FbGVtZW50ID0gbmV3Um9vdEJ1c2luZXNzT2JqZWN0O1xuICBuZXdSb290QnVzaW5lc3NPYmplY3QuZGkgPSBkaVBsYW5lO1xuXG4gIGNvbnRleHQub2xkUm9vdCA9IG9sZFJvb3Q7XG5cbiAgLy8gVE9ETyhuaWtrdSk6IHJldHVybiBjaGFuZ2VkIGVsZW1lbnRzP1xuICAvLyByZXR1cm4gWyBuZXdSb290LCBvbGRSb290IF07XG59O1xuXG5cblVwZGF0ZUNhbnZhc1Jvb3RIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGNhbnZhcyA9IHRoaXMuX2NhbnZhcztcblxuICB2YXIgbmV3Um9vdCA9IGNvbnRleHQubmV3Um9vdCxcbiAgICAgIG5ld1Jvb3RCdXNpbmVzc09iamVjdCA9IG5ld1Jvb3QuYnVzaW5lc3NPYmplY3QsXG4gICAgICBvbGRSb290ID0gY29udGV4dC5vbGRSb290LFxuICAgICAgb2xkUm9vdEJ1c2luZXNzT2JqZWN0ID0gb2xkUm9vdC5idXNpbmVzc09iamVjdCxcbiAgICAgIGJwbW5EZWZpbml0aW9ucyA9IG5ld1Jvb3RCdXNpbmVzc09iamVjdC4kcGFyZW50LFxuICAgICAgZGlQbGFuZSA9IG5ld1Jvb3RCdXNpbmVzc09iamVjdC5kaTtcblxuICAvLyAoMSkgcmVwbGFjZSBwcm9jZXNzIG9sZCA8PiBuZXcgcm9vdFxuICBjYW52YXMuc2V0Um9vdEVsZW1lbnQob2xkUm9vdCwgdHJ1ZSk7XG5cbiAgLy8gKDIpIHVwZGF0ZSByb290IGVsZW1lbnRzXG4gIGNvbGxlY3Rpb25SZW1vdmUoYnBtbkRlZmluaXRpb25zLnJvb3RFbGVtZW50cywgbmV3Um9vdEJ1c2luZXNzT2JqZWN0KTtcbiAgbmV3Um9vdEJ1c2luZXNzT2JqZWN0LiRwYXJlbnQgPSBudWxsO1xuXG4gIGNvbGxlY3Rpb25BZGQoYnBtbkRlZmluaXRpb25zLnJvb3RFbGVtZW50cywgb2xkUm9vdEJ1c2luZXNzT2JqZWN0KTtcbiAgb2xkUm9vdEJ1c2luZXNzT2JqZWN0LiRwYXJlbnQgPSBicG1uRGVmaW5pdGlvbnM7XG5cbiAgLy8gKDMpIHdpcmUgZGlcbiAgbmV3Um9vdEJ1c2luZXNzT2JqZWN0LmRpID0gbnVsbDtcblxuICBkaVBsYW5lLmJwbW5FbGVtZW50ID0gb2xkUm9vdEJ1c2luZXNzT2JqZWN0O1xuICBvbGRSb290QnVzaW5lc3NPYmplY3QuZGkgPSBkaVBsYW5lO1xuXG4gIC8vIFRPRE8obmlra3UpOiByZXR1cm4gY2hhbmdlZCBlbGVtZW50cz9cbiAgLy8gcmV0dXJuIFsgbmV3Um9vdCwgb2xkUm9vdCBdO1xufTsiLCJpbXBvcnQge1xuICBjb2xsZWN0TGFuZXMsXG4gIGdldExhbmVzUm9vdFxufSBmcm9tICcuLi91dGlsL0xhbmVVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBhZGQgYXMgY29sbGVjdGlvbkFkZCxcbiAgcmVtb3ZlIGFzIGNvbGxlY3Rpb25SZW1vdmVcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9Db2xsZWN0aW9ucyc7XG5cbmltcG9ydCB7XG4gIGFzVFJCTFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbnZhciBGTE9XX05PREVfUkVGU19BVFRSID0gJ2Zsb3dOb2RlUmVmJyxcbiAgICBMQU5FU19BVFRSID0gJ2xhbmVzJztcblxuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IHVwZGF0ZXMgbGFuZSByZWZzIG9uIGNoYW5nZWQgZWxlbWVudHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVXBkYXRlRmxvd05vZGVSZWZzSGFuZGxlcihlbGVtZW50UmVnaXN0cnkpIHtcbiAgdGhpcy5fZWxlbWVudFJlZ2lzdHJ5ID0gZWxlbWVudFJlZ2lzdHJ5O1xufVxuXG5VcGRhdGVGbG93Tm9kZVJlZnNIYW5kbGVyLiRpbmplY3QgPSBbXG4gICdlbGVtZW50UmVnaXN0cnknXG5dO1xuXG5cblVwZGF0ZUZsb3dOb2RlUmVmc0hhbmRsZXIucHJvdG90eXBlLmNvbXB1dGVVcGRhdGVzID0gZnVuY3Rpb24oZmxvd05vZGVTaGFwZXMsIGxhbmVTaGFwZXMpIHtcblxuICB2YXIgaGFuZGxlZE5vZGVzID0gW107XG5cbiAgdmFyIHVwZGF0ZXMgPSBbXTtcblxuICB2YXIgcGFydGljaXBhbnRDYWNoZSA9IHt9O1xuXG4gIHZhciBhbGxGbG93Tm9kZVNoYXBlcyA9IFtdO1xuXG4gIGZ1bmN0aW9uIGlzSW5MYW5lU2hhcGUoZWxlbWVudCwgbGFuZVNoYXBlKSB7XG5cbiAgICB2YXIgbGFuZVRyYmwgPSBhc1RSQkwobGFuZVNoYXBlKTtcblxuICAgIHZhciBlbGVtZW50TWlkID0ge1xuICAgICAgeDogZWxlbWVudC54ICsgZWxlbWVudC53aWR0aCAvIDIsXG4gICAgICB5OiBlbGVtZW50LnkgKyBlbGVtZW50LmhlaWdodCAvIDJcbiAgICB9O1xuXG4gICAgcmV0dXJuIGVsZW1lbnRNaWQueCA+IGxhbmVUcmJsLmxlZnQgJiZcbiAgICAgICAgICAgZWxlbWVudE1pZC54IDwgbGFuZVRyYmwucmlnaHQgJiZcbiAgICAgICAgICAgZWxlbWVudE1pZC55ID4gbGFuZVRyYmwudG9wICYmXG4gICAgICAgICAgIGVsZW1lbnRNaWQueSA8IGxhbmVUcmJsLmJvdHRvbTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZEZsb3dOb2RlU2hhcGUoZmxvd05vZGVTaGFwZSkge1xuICAgIGlmIChoYW5kbGVkTm9kZXMuaW5kZXhPZihmbG93Tm9kZVNoYXBlKSA9PT0gLTEpIHtcbiAgICAgIGFsbEZsb3dOb2RlU2hhcGVzLnB1c2goZmxvd05vZGVTaGFwZSk7XG4gICAgICBoYW5kbGVkTm9kZXMucHVzaChmbG93Tm9kZVNoYXBlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRBbGxMYW5lU2hhcGVzKGZsb3dOb2RlU2hhcGUpIHtcblxuICAgIHZhciByb290ID0gZ2V0TGFuZXNSb290KGZsb3dOb2RlU2hhcGUpO1xuXG4gICAgaWYgKCFwYXJ0aWNpcGFudENhY2hlW3Jvb3QuaWRdKSB7XG4gICAgICBwYXJ0aWNpcGFudENhY2hlW3Jvb3QuaWRdID0gY29sbGVjdExhbmVzKHJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0aWNpcGFudENhY2hlW3Jvb3QuaWRdO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TmV3TGFuZXMoZmxvd05vZGVTaGFwZSkge1xuICAgIGlmICghZmxvd05vZGVTaGFwZS5wYXJlbnQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB2YXIgYWxsTGFuZVNoYXBlcyA9IGdldEFsbExhbmVTaGFwZXMoZmxvd05vZGVTaGFwZSk7XG5cbiAgICByZXR1cm4gYWxsTGFuZVNoYXBlcy5maWx0ZXIoZnVuY3Rpb24obCkge1xuICAgICAgcmV0dXJuIGlzSW5MYW5lU2hhcGUoZmxvd05vZGVTaGFwZSwgbCk7XG4gICAgfSkubWFwKGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICByZXR1cm4gc2hhcGUuYnVzaW5lc3NPYmplY3Q7XG4gICAgfSk7XG4gIH1cblxuICBsYW5lU2hhcGVzLmZvckVhY2goZnVuY3Rpb24obGFuZVNoYXBlKSB7XG4gICAgdmFyIHJvb3QgPSBnZXRMYW5lc1Jvb3QobGFuZVNoYXBlKTtcblxuICAgIGlmICghcm9vdCB8fCBoYW5kbGVkTm9kZXMuaW5kZXhPZihyb290KSAhPT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRyZW4gPSByb290LmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihjKSB7XG4gICAgICByZXR1cm4gaXMoYywgJ2JwbW46Rmxvd05vZGUnKTtcbiAgICB9KTtcblxuICAgIGNoaWxkcmVuLmZvckVhY2goYWRkRmxvd05vZGVTaGFwZSk7XG5cbiAgICBoYW5kbGVkTm9kZXMucHVzaChyb290KTtcbiAgfSk7XG5cbiAgZmxvd05vZGVTaGFwZXMuZm9yRWFjaChhZGRGbG93Tm9kZVNoYXBlKTtcblxuXG4gIGFsbEZsb3dOb2RlU2hhcGVzLmZvckVhY2goZnVuY3Rpb24oZmxvd05vZGVTaGFwZSkge1xuXG4gICAgdmFyIGZsb3dOb2RlID0gZmxvd05vZGVTaGFwZS5idXNpbmVzc09iamVjdDtcblxuICAgIHZhciBsYW5lcyA9IGZsb3dOb2RlLmdldChMQU5FU19BVFRSKSxcbiAgICAgICAgcmVtb3ZlID0gbGFuZXMuc2xpY2UoKSxcbiAgICAgICAgYWRkID0gZ2V0TmV3TGFuZXMoZmxvd05vZGVTaGFwZSk7XG5cbiAgICB1cGRhdGVzLnB1c2goeyBmbG93Tm9kZTogZmxvd05vZGUsIHJlbW92ZTogcmVtb3ZlLCBhZGQ6IGFkZCB9KTtcbiAgfSk7XG5cbiAgbGFuZVNoYXBlcy5mb3JFYWNoKGZ1bmN0aW9uKGxhbmVTaGFwZSkge1xuXG4gICAgdmFyIGxhbmUgPSBsYW5lU2hhcGUuYnVzaW5lc3NPYmplY3Q7XG5cbiAgICAvLyBsYW5lIGdvdCByZW1vdmVkIFhYLSlcbiAgICBpZiAoIWxhbmVTaGFwZS5wYXJlbnQpIHtcbiAgICAgIGxhbmUuZ2V0KEZMT1dfTk9ERV9SRUZTX0FUVFIpLmZvckVhY2goZnVuY3Rpb24oZmxvd05vZGUpIHtcbiAgICAgICAgdXBkYXRlcy5wdXNoKHsgZmxvd05vZGU6IGZsb3dOb2RlLCByZW1vdmU6IFsgbGFuZSBdLCBhZGQ6IFtdIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdXBkYXRlcztcbn07XG5cblVwZGF0ZUZsb3dOb2RlUmVmc0hhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHVwZGF0ZXMgPSBjb250ZXh0LnVwZGF0ZXM7XG5cbiAgaWYgKCF1cGRhdGVzKSB7XG4gICAgdXBkYXRlcyA9IGNvbnRleHQudXBkYXRlcyA9IHRoaXMuY29tcHV0ZVVwZGF0ZXMoY29udGV4dC5mbG93Tm9kZVNoYXBlcywgY29udGV4dC5sYW5lU2hhcGVzKTtcbiAgfVxuXG5cbiAgdXBkYXRlcy5mb3JFYWNoKGZ1bmN0aW9uKHVwZGF0ZSkge1xuXG4gICAgdmFyIGZsb3dOb2RlID0gdXBkYXRlLmZsb3dOb2RlLFxuICAgICAgICBsYW5lcyA9IGZsb3dOb2RlLmdldChMQU5FU19BVFRSKTtcblxuICAgIC8vIHVud2lyZSBvbGRcbiAgICB1cGRhdGUucmVtb3ZlLmZvckVhY2goZnVuY3Rpb24ob2xkTGFuZSkge1xuICAgICAgY29sbGVjdGlvblJlbW92ZShsYW5lcywgb2xkTGFuZSk7XG4gICAgICBjb2xsZWN0aW9uUmVtb3ZlKG9sZExhbmUuZ2V0KEZMT1dfTk9ERV9SRUZTX0FUVFIpLCBmbG93Tm9kZSk7XG4gICAgfSk7XG5cbiAgICAvLyB3aXJlIG5ld1xuICAgIHVwZGF0ZS5hZGQuZm9yRWFjaChmdW5jdGlvbihuZXdMYW5lKSB7XG4gICAgICBjb2xsZWN0aW9uQWRkKGxhbmVzLCBuZXdMYW5lKTtcbiAgICAgIGNvbGxlY3Rpb25BZGQobmV3TGFuZS5nZXQoRkxPV19OT0RFX1JFRlNfQVRUUiksIGZsb3dOb2RlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gVE9ETyhuaWtrdSk6IHJldHVybiBjaGFuZ2VkIGVsZW1lbnRzXG4gIC8vIHJldHVybiBbIC4uLiBdO1xufTtcblxuXG5VcGRhdGVGbG93Tm9kZVJlZnNIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHVwZGF0ZXMgPSBjb250ZXh0LnVwZGF0ZXM7XG5cbiAgdXBkYXRlcy5mb3JFYWNoKGZ1bmN0aW9uKHVwZGF0ZSkge1xuXG4gICAgdmFyIGZsb3dOb2RlID0gdXBkYXRlLmZsb3dOb2RlLFxuICAgICAgICBsYW5lcyA9IGZsb3dOb2RlLmdldChMQU5FU19BVFRSKTtcblxuICAgIC8vIHVud2lyZSBuZXdcbiAgICB1cGRhdGUuYWRkLmZvckVhY2goZnVuY3Rpb24obmV3TGFuZSkge1xuICAgICAgY29sbGVjdGlvblJlbW92ZShsYW5lcywgbmV3TGFuZSk7XG4gICAgICBjb2xsZWN0aW9uUmVtb3ZlKG5ld0xhbmUuZ2V0KEZMT1dfTk9ERV9SRUZTX0FUVFIpLCBmbG93Tm9kZSk7XG4gICAgfSk7XG5cbiAgICAvLyB3aXJlIG9sZFxuICAgIHVwZGF0ZS5yZW1vdmUuZm9yRWFjaChmdW5jdGlvbihvbGRMYW5lKSB7XG4gICAgICBjb2xsZWN0aW9uQWRkKGxhbmVzLCBvbGRMYW5lKTtcbiAgICAgIGNvbGxlY3Rpb25BZGQob2xkTGFuZS5nZXQoRkxPV19OT0RFX1JFRlNfQVRUUiksIGZsb3dOb2RlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gVE9ETyhuaWtrdSk6IHJldHVybiBjaGFuZ2VkIGVsZW1lbnRzXG4gIC8vIHJldHVybiBbIC4uLiBdO1xufTtcbiIsImltcG9ydCB7XG4gIHJlZHVjZSxcbiAga2V5cyxcbiAgZm9yRWFjaCxcbiAgYXNzaWduXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0QnVzaW5lc3NPYmplY3Rcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG52YXIgREVGQVVMVF9GTE9XID0gJ2RlZmF1bHQnLFxuICAgIElEID0gJ2lkJyxcbiAgICBESSA9ICdkaSc7XG5cbnZhciBOVUxMX0RJTUVOU0lPTlMgPSB7XG4gIHdpZHRoOiAwLFxuICBoZWlnaHQ6IDBcbn07XG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgaW1wbGVtZW50cyBhIEJQTU4gMi4wIHByb3BlcnR5IHVwZGF0ZS5cbiAqXG4gKiBUaGlzIHNob3VsZCBiZSB1c2VkIHRvIHNldCBzaW1wbGUgcHJvcGVydGllcyBvbiBlbGVtZW50cyB3aXRoXG4gKiBhbiB1bmRlcmx5aW5nIEJQTU4gYnVzaW5lc3Mgb2JqZWN0LlxuICpcbiAqIFVzZSByZXNwZWN0aXZlIGRpYWdyYW0tanMgcHJvdmlkZWQgaGFuZGxlcnMgaWYgeW91IHdvdWxkXG4gKiBsaWtlIHRvIHBlcmZvcm0gYXV0b21hdGVkIG1vZGVsaW5nLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBVcGRhdGVQcm9wZXJ0aWVzSGFuZGxlcihcbiAgICBlbGVtZW50UmVnaXN0cnksIG1vZGRsZSwgdHJhbnNsYXRlLFxuICAgIG1vZGVsaW5nLCB0ZXh0UmVuZGVyZXIpIHtcblxuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG4gIHRoaXMuX21vZGRsZSA9IG1vZGRsZTtcbiAgdGhpcy5fdHJhbnNsYXRlID0gdHJhbnNsYXRlO1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl90ZXh0UmVuZGVyZXIgPSB0ZXh0UmVuZGVyZXI7XG59XG5cblVwZGF0ZVByb3BlcnRpZXNIYW5kbGVyLiRpbmplY3QgPSBbXG4gICdlbGVtZW50UmVnaXN0cnknLFxuICAnbW9kZGxlJyxcbiAgJ3RyYW5zbGF0ZScsXG4gICdtb2RlbGluZycsXG4gICd0ZXh0UmVuZGVyZXInXG5dO1xuXG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogVXBkYXRlcyBhIEJQTU4gZWxlbWVudCB3aXRoIGEgbGlzdCBvZiBuZXcgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBjb250ZXh0LmVsZW1lbnQgdGhlIGVsZW1lbnQgdG8gdXBkYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5wcm9wZXJ0aWVzIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIHRvIHNldCBvbiB0aGUgZWxlbWVudCdzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c2luZXNzT2JqZWN0ICh0aGUgQlBNTiBtb2RlbCBlbGVtZW50KVxuICpcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gdGhlIHVwZGF0ZWQgZWxlbWVudFxuICovXG5VcGRhdGVQcm9wZXJ0aWVzSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgIGNoYW5nZWQgPSBbIGVsZW1lbnQgXSxcbiAgICAgIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcblxuICBpZiAoIWVsZW1lbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdlbGVtZW50IHJlcXVpcmVkJykpO1xuICB9XG5cbiAgdmFyIGVsZW1lbnRSZWdpc3RyeSA9IHRoaXMuX2VsZW1lbnRSZWdpc3RyeSxcbiAgICAgIGlkcyA9IHRoaXMuX21vZGRsZS5pZHM7XG5cbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZWxlbWVudC5idXNpbmVzc09iamVjdCxcbiAgICAgIHByb3BlcnRpZXMgPSB1bndyYXBCdXNpbmVzc09iamVjdHMoY29udGV4dC5wcm9wZXJ0aWVzKSxcbiAgICAgIG9sZFByb3BlcnRpZXMgPSBjb250ZXh0Lm9sZFByb3BlcnRpZXMgfHwgZ2V0UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwgcHJvcGVydGllcyk7XG5cbiAgaWYgKGlzSWRDaGFuZ2UocHJvcGVydGllcywgYnVzaW5lc3NPYmplY3QpKSB7XG4gICAgaWRzLnVuY2xhaW0oYnVzaW5lc3NPYmplY3RbSURdKTtcblxuICAgIGVsZW1lbnRSZWdpc3RyeS51cGRhdGVJZChlbGVtZW50LCBwcm9wZXJ0aWVzW0lEXSk7XG5cbiAgICBpZHMuY2xhaW0ocHJvcGVydGllc1tJRF0sIGJ1c2luZXNzT2JqZWN0KTtcbiAgfVxuXG4gIC8vIGNvcnJlY3RseSBpbmRpY2F0ZSB2aXN1YWwgY2hhbmdlcyBvbiBkZWZhdWx0IGZsb3cgdXBkYXRlc1xuICBpZiAoREVGQVVMVF9GTE9XIGluIHByb3BlcnRpZXMpIHtcblxuICAgIGlmIChwcm9wZXJ0aWVzW0RFRkFVTFRfRkxPV10pIHtcbiAgICAgIGNoYW5nZWQucHVzaChlbGVtZW50UmVnaXN0cnkuZ2V0KHByb3BlcnRpZXNbREVGQVVMVF9GTE9XXS5pZCkpO1xuICAgIH1cblxuICAgIGlmIChidXNpbmVzc09iamVjdFtERUZBVUxUX0ZMT1ddKSB7XG4gICAgICBjaGFuZ2VkLnB1c2goZWxlbWVudFJlZ2lzdHJ5LmdldChidXNpbmVzc09iamVjdFtERUZBVUxUX0ZMT1ddLmlkKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gdXBkYXRlIHByb3BlcnRpZXNcbiAgc2V0UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwgcHJvcGVydGllcyk7XG5cbiAgLy8gc3RvcmUgb2xkIHZhbHVlc1xuICBjb250ZXh0Lm9sZFByb3BlcnRpZXMgPSBvbGRQcm9wZXJ0aWVzO1xuICBjb250ZXh0LmNoYW5nZWQgPSBjaGFuZ2VkO1xuXG4gIC8vIGluZGljYXRlIGNoYW5nZWQgb24gb2JqZWN0cyBhZmZlY3RlZCBieSB0aGUgdXBkYXRlXG4gIHJldHVybiBjaGFuZ2VkO1xufTtcblxuXG5VcGRhdGVQcm9wZXJ0aWVzSGFuZGxlci5wcm90b3R5cGUucG9zdEV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50LFxuICAgICAgbGFiZWwgPSBlbGVtZW50LmxhYmVsO1xuXG4gIHZhciB0ZXh0ID0gbGFiZWwgJiYgZ2V0QnVzaW5lc3NPYmplY3QobGFiZWwpLm5hbWU7XG5cbiAgaWYgKCF0ZXh0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZ2V0IGxheW91dGVkIHRleHQgYm91bmRzIGFuZCByZXNpemUgZXh0ZXJuYWxcbiAgLy8gZXh0ZXJuYWwgbGFiZWwgYWNjb3JkaW5nbHlcbiAgdmFyIG5ld0xhYmVsQm91bmRzID0gdGhpcy5fdGV4dFJlbmRlcmVyLmdldEV4dGVybmFsTGFiZWxCb3VuZHMobGFiZWwsIHRleHQpO1xuXG4gIHRoaXMuX21vZGVsaW5nLnJlc2l6ZVNoYXBlKGxhYmVsLCBuZXdMYWJlbEJvdW5kcywgTlVMTF9ESU1FTlNJT05TKTtcbn07XG5cbi8qKlxuICogUmV2ZXJ0cyB0aGUgdXBkYXRlIG9uIGEgQlBNTiBlbGVtZW50cyBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gY29udGV4dFxuICpcbiAqIEByZXR1cm4ge2Rqcy5tb2RlbC5CYXNlfSB0aGUgdXBkYXRlZCBlbGVtZW50XG4gKi9cblVwZGF0ZVByb3BlcnRpZXNIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICBwcm9wZXJ0aWVzID0gY29udGV4dC5wcm9wZXJ0aWVzLFxuICAgICAgb2xkUHJvcGVydGllcyA9IGNvbnRleHQub2xkUHJvcGVydGllcyxcbiAgICAgIGJ1c2luZXNzT2JqZWN0ID0gZWxlbWVudC5idXNpbmVzc09iamVjdCxcbiAgICAgIGVsZW1lbnRSZWdpc3RyeSA9IHRoaXMuX2VsZW1lbnRSZWdpc3RyeSxcbiAgICAgIGlkcyA9IHRoaXMuX21vZGRsZS5pZHM7XG5cbiAgLy8gdXBkYXRlIHByb3BlcnRpZXNcbiAgc2V0UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwgb2xkUHJvcGVydGllcyk7XG5cbiAgaWYgKGlzSWRDaGFuZ2UocHJvcGVydGllcywgYnVzaW5lc3NPYmplY3QpKSB7XG4gICAgaWRzLnVuY2xhaW0ocHJvcGVydGllc1tJRF0pO1xuXG4gICAgZWxlbWVudFJlZ2lzdHJ5LnVwZGF0ZUlkKGVsZW1lbnQsIG9sZFByb3BlcnRpZXNbSURdKTtcblxuICAgIGlkcy5jbGFpbShvbGRQcm9wZXJ0aWVzW0lEXSwgYnVzaW5lc3NPYmplY3QpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRleHQuY2hhbmdlZDtcbn07XG5cblxuZnVuY3Rpb24gaXNJZENoYW5nZShwcm9wZXJ0aWVzLCBidXNpbmVzc09iamVjdCkge1xuICByZXR1cm4gSUQgaW4gcHJvcGVydGllcyAmJiBwcm9wZXJ0aWVzW0lEXSAhPT0gYnVzaW5lc3NPYmplY3RbSURdO1xufVxuXG5cbmZ1bmN0aW9uIGdldFByb3BlcnRpZXMoYnVzaW5lc3NPYmplY3QsIHByb3BlcnRpZXMpIHtcbiAgdmFyIHByb3BlcnR5TmFtZXMgPSBrZXlzKHByb3BlcnRpZXMpO1xuXG4gIHJldHVybiByZWR1Y2UocHJvcGVydHlOYW1lcywgZnVuY3Rpb24ocmVzdWx0LCBrZXkpIHtcblxuICAgIC8vIGhhbmRsZSBESSBzZXBhcmF0ZWx5XG4gICAgaWYgKGtleSAhPT0gREkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gYnVzaW5lc3NPYmplY3QuZ2V0KGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gZ2V0RGlQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LmRpLCBrZXlzKHByb3BlcnRpZXMuZGkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG59XG5cblxuZnVuY3Rpb24gZ2V0RGlQcm9wZXJ0aWVzKGRpLCBwcm9wZXJ0eU5hbWVzKSB7XG4gIHJldHVybiByZWR1Y2UocHJvcGVydHlOYW1lcywgZnVuY3Rpb24ocmVzdWx0LCBrZXkpIHtcbiAgICByZXN1bHRba2V5XSA9IGRpLmdldChrZXkpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xufVxuXG5cbmZ1bmN0aW9uIHNldFByb3BlcnRpZXMoYnVzaW5lc3NPYmplY3QsIHByb3BlcnRpZXMpIHtcbiAgZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG5cbiAgICBpZiAoa2V5ICE9PSBESSkge1xuICAgICAgYnVzaW5lc3NPYmplY3Quc2V0KGtleSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIG9ubHkgdXBkYXRlLCBpZiBidXNpbmVzc09iamVjdC5kaSBleGlzdHNcbiAgICAgIGlmIChidXNpbmVzc09iamVjdC5kaSkge1xuICAgICAgICBzZXREaVByb3BlcnRpZXMoYnVzaW5lc3NPYmplY3QuZGksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG5cbmZ1bmN0aW9uIHNldERpUHJvcGVydGllcyhkaSwgcHJvcGVydGllcykge1xuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICBkaS5zZXQoa2V5LCB2YWx1ZSk7XG4gIH0pO1xufVxuXG5cbnZhciByZWZlcmVuY2VQcm9wZXJ0eU5hbWVzID0gWyAnZGVmYXVsdCcgXTtcblxuLyoqXG4gKiBNYWtlIHN1cmUgd2UgdW53cmFwIHRoZSBhY3R1YWwgYnVzaW5lc3Mgb2JqZWN0XG4gKiBiZWhpbmQgZGlhZ3JhbSBlbGVtZW50IHRoYXQgbWF5IGhhdmUgYmVlblxuICogcGFzc2VkIGFzIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IHByb3BlcnRpZXNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHVud3JhcHBlZFByb3BzXG4gKi9cbmZ1bmN0aW9uIHVud3JhcEJ1c2luZXNzT2JqZWN0cyhwcm9wZXJ0aWVzKSB7XG5cbiAgdmFyIHVud3JhcHBlZFByb3BzID0gYXNzaWduKHt9LCBwcm9wZXJ0aWVzKTtcblxuICByZWZlcmVuY2VQcm9wZXJ0eU5hbWVzLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgIGlmIChuYW1lIGluIHByb3BlcnRpZXMpIHtcbiAgICAgIHVud3JhcHBlZFByb3BzW25hbWVdID0gZ2V0QnVzaW5lc3NPYmplY3QodW53cmFwcGVkUHJvcHNbbmFtZV0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHVud3JhcHBlZFByb3BzO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVwZGF0ZVNlbWFudGljUGFyZW50SGFuZGxlcihicG1uVXBkYXRlcikge1xyXG4gIHRoaXMuX2JwbW5VcGRhdGVyID0gYnBtblVwZGF0ZXI7XHJcbn1cclxuXHJcblVwZGF0ZVNlbWFudGljUGFyZW50SGFuZGxlci4kaW5qZWN0ID0gWyAnYnBtblVwZGF0ZXInIF07XHJcblxyXG5cclxuVXBkYXRlU2VtYW50aWNQYXJlbnRIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xyXG4gIHZhciBkYXRhU3RvcmVCbyA9IGNvbnRleHQuZGF0YVN0b3JlQm8sXHJcbiAgICAgIG5ld1NlbWFudGljUGFyZW50ID0gY29udGV4dC5uZXdTZW1hbnRpY1BhcmVudCxcclxuICAgICAgbmV3RGlQYXJlbnQgPSBjb250ZXh0Lm5ld0RpUGFyZW50O1xyXG5cclxuICBjb250ZXh0Lm9sZFNlbWFudGljUGFyZW50ID0gZGF0YVN0b3JlQm8uJHBhcmVudDtcclxuICBjb250ZXh0Lm9sZERpUGFyZW50ID0gZGF0YVN0b3JlQm8uZGkuJHBhcmVudDtcclxuXHJcbiAgLy8gdXBkYXRlIHNlbWFudGljIHBhcmVudFxyXG4gIHRoaXMuX2JwbW5VcGRhdGVyLnVwZGF0ZVNlbWFudGljUGFyZW50KGRhdGFTdG9yZUJvLCBuZXdTZW1hbnRpY1BhcmVudCk7XHJcblxyXG4gIC8vIHVwZGF0ZSBESSBwYXJlbnRcclxuICB0aGlzLl9icG1uVXBkYXRlci51cGRhdGVEaVBhcmVudChkYXRhU3RvcmVCby5kaSwgbmV3RGlQYXJlbnQpO1xyXG59O1xyXG5cclxuVXBkYXRlU2VtYW50aWNQYXJlbnRIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgdmFyIGRhdGFTdG9yZUJvID0gY29udGV4dC5kYXRhU3RvcmVCbyxcclxuICAgICAgb2xkU2VtYW50aWNQYXJlbnQgPSBjb250ZXh0Lm9sZFNlbWFudGljUGFyZW50LFxyXG4gICAgICBvbGREaVBhcmVudCA9IGNvbnRleHQub2xkRGlQYXJlbnQ7XHJcblxyXG4gIC8vIHVwZGF0ZSBzZW1hbnRpYyBwYXJlbnRcclxuICB0aGlzLl9icG1uVXBkYXRlci51cGRhdGVTZW1hbnRpY1BhcmVudChkYXRhU3RvcmVCbywgb2xkU2VtYW50aWNQYXJlbnQpO1xyXG5cclxuICAvLyB1cGRhdGUgREkgcGFyZW50XHJcbiAgdGhpcy5fYnBtblVwZGF0ZXIudXBkYXRlRGlQYXJlbnQoZGF0YVN0b3JlQm8uZGksIG9sZERpUGFyZW50KTtcclxufTtcclxuXHJcbiIsImltcG9ydCBCZWhhdmlvck1vZHVsZSBmcm9tICcuL2JlaGF2aW9yJztcbmltcG9ydCBSdWxlc01vZHVsZSBmcm9tICcuLi9ydWxlcyc7XG5pbXBvcnQgRGlPcmRlcmluZ01vZHVsZSBmcm9tICcuLi9kaS1vcmRlcmluZyc7XG5pbXBvcnQgT3JkZXJpbmdNb2R1bGUgZnJvbSAnLi4vb3JkZXJpbmcnO1xuaW1wb3J0IFJlcGxhY2VNb2R1bGUgZnJvbSAnLi4vcmVwbGFjZSc7XG5cbmltcG9ydCBDb21tYW5kTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQnO1xuaW1wb3J0IFRvb2x0aXBzTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3Rvb2x0aXBzJztcbmltcG9ydCBMYWJlbFN1cHBvcnRNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbGFiZWwtc3VwcG9ydCc7XG5pbXBvcnQgQXR0YWNoU3VwcG9ydE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdHRhY2gtc3VwcG9ydCc7XG5pbXBvcnQgU2VsZWN0aW9uTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NlbGVjdGlvbic7XG5pbXBvcnQgQ2hhbmdlU3VwcG9ydE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jaGFuZ2Utc3VwcG9ydCc7XG5pbXBvcnQgU3BhY2VUb29sTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NwYWNlLXRvb2wnO1xuXG5pbXBvcnQgQnBtbkZhY3RvcnkgZnJvbSAnLi9CcG1uRmFjdG9yeSc7XG5pbXBvcnQgQnBtblVwZGF0ZXIgZnJvbSAnLi9CcG1uVXBkYXRlcic7XG5pbXBvcnQgRWxlbWVudEZhY3RvcnkgZnJvbSAnLi9FbGVtZW50RmFjdG9yeSc7XG5pbXBvcnQgTW9kZWxpbmcgZnJvbSAnLi9Nb2RlbGluZyc7XG5pbXBvcnQgQnBtbkxheW91dGVyIGZyb20gJy4vQnBtbkxheW91dGVyJztcbmltcG9ydCBDcm9wcGluZ0Nvbm5lY3Rpb25Eb2NraW5nIGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9Dcm9wcGluZ0Nvbm5lY3Rpb25Eb2NraW5nJztcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbXG4gICAgJ21vZGVsaW5nJyxcbiAgICAnYnBtblVwZGF0ZXInXG4gIF0sXG4gIF9fZGVwZW5kc19fOiBbXG4gICAgQmVoYXZpb3JNb2R1bGUsXG4gICAgUnVsZXNNb2R1bGUsXG4gICAgRGlPcmRlcmluZ01vZHVsZSxcbiAgICBPcmRlcmluZ01vZHVsZSxcbiAgICBSZXBsYWNlTW9kdWxlLFxuICAgIENvbW1hbmRNb2R1bGUsXG4gICAgVG9vbHRpcHNNb2R1bGUsXG4gICAgTGFiZWxTdXBwb3J0TW9kdWxlLFxuICAgIEF0dGFjaFN1cHBvcnRNb2R1bGUsXG4gICAgU2VsZWN0aW9uTW9kdWxlLFxuICAgIENoYW5nZVN1cHBvcnRNb2R1bGUsXG4gICAgU3BhY2VUb29sTW9kdWxlXG4gIF0sXG4gIGJwbW5GYWN0b3J5OiBbICd0eXBlJywgQnBtbkZhY3RvcnkgXSxcbiAgYnBtblVwZGF0ZXI6IFsgJ3R5cGUnLCBCcG1uVXBkYXRlciBdLFxuICBlbGVtZW50RmFjdG9yeTogWyAndHlwZScsIEVsZW1lbnRGYWN0b3J5IF0sXG4gIG1vZGVsaW5nOiBbICd0eXBlJywgTW9kZWxpbmcgXSxcbiAgbGF5b3V0ZXI6IFsgJ3R5cGUnLCBCcG1uTGF5b3V0ZXIgXSxcbiAgY29ubmVjdGlvbkRvY2tpbmc6IFsgJ3R5cGUnLCBDcm9wcGluZ0Nvbm5lY3Rpb25Eb2NraW5nIF1cbn07IiwiaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldFBhcmVudFxufSBmcm9tICcuL01vZGVsaW5nVXRpbCc7XG5cbmltcG9ydCB7XG4gIGFzVFJCTFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIHN1YnN0cmFjdFRSQkwsXG4gIHJlc2l6ZVRSQkxcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcmVzaXplL1Jlc2l6ZVV0aWwnO1xuXG52YXIgYWJzID0gTWF0aC5hYnM7XG5cblxuZnVuY3Rpb24gZ2V0VFJCTFJlc2l6ZShvbGRCb3VuZHMsIG5ld0JvdW5kcykge1xuICByZXR1cm4gc3Vic3RyYWN0VFJCTChhc1RSQkwobmV3Qm91bmRzKSwgYXNUUkJMKG9sZEJvdW5kcykpO1xufVxuXG5cbnZhciBMQU5FX1BBUkVOVFMgPSBbXG4gICdicG1uOlBhcnRpY2lwYW50JyxcbiAgJ2JwbW46UHJvY2VzcycsXG4gICdicG1uOlN1YlByb2Nlc3MnXG5dO1xuXG5leHBvcnQgdmFyIExBTkVfSU5ERU5UQVRJT04gPSAzMDtcblxuXG4vKipcbiAqIENvbGxlY3QgYWxsIGxhbmUgc2hhcGVzIGluIHRoZSBnaXZlbiBwYXJlblxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5TaGFwZX0gc2hhcGVcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gW2NvbGxlY3RlZFNoYXBlc11cbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuQmFzZT59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0TGFuZXMoc2hhcGUsIGNvbGxlY3RlZFNoYXBlcykge1xuXG4gIGNvbGxlY3RlZFNoYXBlcyA9IGNvbGxlY3RlZFNoYXBlcyB8fCBbXTtcblxuICBzaGFwZS5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24ocykge1xuICAgIGlmIChpcyhzLCAnYnBtbjpMYW5lJykpIHtcbiAgICAgIGNvbGxlY3RMYW5lcyhzLCBjb2xsZWN0ZWRTaGFwZXMpO1xuXG4gICAgICBjb2xsZWN0ZWRTaGFwZXMucHVzaChzKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBjb2xsZWN0ZWRTaGFwZXM7XG59XG5cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGxhbmUgY2hpbGRyZW4gb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlPn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoaWxkTGFuZXMoc2hhcGUpIHtcbiAgcmV0dXJuIHNoYXBlLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihjKSB7XG4gICAgcmV0dXJuIGlzKGMsICdicG1uOkxhbmUnKTtcbiAgfSk7XG59XG5cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHJvb3QgZWxlbWVudCBjb250YWluaW5nIHRoZSBnaXZlbiBsYW5lIHNoYXBlXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gKlxuICogQHJldHVybiB7ZGpzLm1vZGVsLlNoYXBlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFuZXNSb290KHNoYXBlKSB7XG4gIHJldHVybiBnZXRQYXJlbnQoc2hhcGUsIExBTkVfUEFSRU5UUykgfHwgc2hhcGU7XG59XG5cblxuLyoqXG4gKiBDb21wdXRlIHRoZSByZXF1aXJlZCByZXNpemUgb3BlcmF0aW9ucyBmb3IgbGFuZXNcbiAqIGFkamFjZW50IHRvIHRoZSBnaXZlbiBzaGFwZSwgYXNzdW1pbmcgaXQgd2lsbCBiZVxuICogcmVzaXplZCB0byB0aGUgZ2l2ZW4gbmV3IGJvdW5kcy5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gc2hhcGVcbiAqIEBwYXJhbSB7Qm91bmRzfSBuZXdCb3VuZHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxPYmplY3Q+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUxhbmVzUmVzaXplKHNoYXBlLCBuZXdCb3VuZHMpIHtcblxuICB2YXIgcm9vdEVsZW1lbnQgPSBnZXRMYW5lc1Jvb3Qoc2hhcGUpO1xuXG4gIHZhciBpbml0aWFsU2hhcGVzID0gaXMocm9vdEVsZW1lbnQsICdicG1uOlByb2Nlc3MnKSA/IFtdIDogWyByb290RWxlbWVudCBdO1xuXG4gIHZhciBhbGxMYW5lcyA9IGNvbGxlY3RMYW5lcyhyb290RWxlbWVudCwgaW5pdGlhbFNoYXBlcyksXG4gICAgICBzaGFwZVRyYmwgPSBhc1RSQkwoc2hhcGUpLFxuICAgICAgc2hhcGVOZXdUcmJsID0gYXNUUkJMKG5ld0JvdW5kcyksXG4gICAgICB0cmJsUmVzaXplID0gZ2V0VFJCTFJlc2l6ZShzaGFwZSwgbmV3Qm91bmRzKSxcbiAgICAgIHJlc2l6ZU5lZWRlZCA9IFtdO1xuXG4gIGFsbExhbmVzLmZvckVhY2goZnVuY3Rpb24ob3RoZXIpIHtcblxuICAgIGlmIChvdGhlciA9PT0gc2hhcGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdG9wUmVzaXplID0gMCxcbiAgICAgICAgcmlnaHRSZXNpemUgPSB0cmJsUmVzaXplLnJpZ2h0LFxuICAgICAgICBib3R0b21SZXNpemUgPSAwLFxuICAgICAgICBsZWZ0UmVzaXplID0gdHJibFJlc2l6ZS5sZWZ0O1xuXG4gICAgdmFyIG90aGVyVHJibCA9IGFzVFJCTChvdGhlcik7XG5cbiAgICBpZiAodHJibFJlc2l6ZS50b3ApIHtcbiAgICAgIGlmIChhYnMob3RoZXJUcmJsLmJvdHRvbSAtIHNoYXBlVHJibC50b3ApIDwgMTApIHtcbiAgICAgICAgYm90dG9tUmVzaXplID0gc2hhcGVOZXdUcmJsLnRvcCAtIG90aGVyVHJibC5ib3R0b207XG4gICAgICB9XG5cbiAgICAgIGlmIChhYnMob3RoZXJUcmJsLnRvcCAtIHNoYXBlVHJibC50b3ApIDwgNSkge1xuICAgICAgICB0b3BSZXNpemUgPSBzaGFwZU5ld1RyYmwudG9wIC0gb3RoZXJUcmJsLnRvcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHJibFJlc2l6ZS5ib3R0b20pIHtcbiAgICAgIGlmIChhYnMob3RoZXJUcmJsLnRvcCAtIHNoYXBlVHJibC5ib3R0b20pIDwgMTApIHtcbiAgICAgICAgdG9wUmVzaXplID0gc2hhcGVOZXdUcmJsLmJvdHRvbSAtIG90aGVyVHJibC50b3A7XG4gICAgICB9XG5cbiAgICAgIGlmIChhYnMob3RoZXJUcmJsLmJvdHRvbSAtIHNoYXBlVHJibC5ib3R0b20pIDwgNSkge1xuICAgICAgICBib3R0b21SZXNpemUgPSBzaGFwZU5ld1RyYmwuYm90dG9tIC0gb3RoZXJUcmJsLmJvdHRvbTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodG9wUmVzaXplIHx8IHJpZ2h0UmVzaXplIHx8IGJvdHRvbVJlc2l6ZSB8fCBsZWZ0UmVzaXplKSB7XG5cbiAgICAgIHJlc2l6ZU5lZWRlZC5wdXNoKHtcbiAgICAgICAgc2hhcGU6IG90aGVyLFxuICAgICAgICBuZXdCb3VuZHM6IHJlc2l6ZVRSQkwob3RoZXIsIHtcbiAgICAgICAgICB0b3A6IHRvcFJlc2l6ZSxcbiAgICAgICAgICByaWdodDogcmlnaHRSZXNpemUsXG4gICAgICAgICAgYm90dG9tOiBib3R0b21SZXNpemUsXG4gICAgICAgICAgbGVmdDogbGVmdFJlc2l6ZVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuXG4gIH0pO1xuXG4gIHJldHVybiByZXNpemVOZWVkZWQ7XG59IiwiaW1wb3J0IHtcbiAgc29tZVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgZWxlbWVudCBoYXMgYW55IG9mIHRoZSBnaXZlbiB0eXBlcy5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHR5cGVzXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW55KGVsZW1lbnQsIHR5cGVzKSB7XG4gIHJldHVybiBzb21lKHR5cGVzLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGlzKGVsZW1lbnQsIHQpO1xuICB9KTtcbn1cblxuXG4vKipcbiAqIFJldHVybiB0aGUgcGFyZW50IG9mIHRoZSBlbGVtZW50IHdpdGggYW55IG9mIHRoZSBnaXZlbiB0eXBlcy5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheTxzdHJpbmc+fSBhbnlUeXBlXG4gKlxuICogQHJldHVybiB7ZGpzLm1vZGVsLkJhc2V9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnQoZWxlbWVudCwgYW55VHlwZSkge1xuXG4gIGlmICh0eXBlb2YgYW55VHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICBhbnlUeXBlID0gWyBhbnlUeXBlIF07XG4gIH1cblxuICB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudCkpIHtcbiAgICBpZiAoaXNBbnkoZWxlbWVudCwgYW55VHlwZSkpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBPcmRlcmluZ1Byb3ZpZGVyIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL29yZGVyaW5nL09yZGVyaW5nUHJvdmlkZXInO1xuXG5pbXBvcnQge1xuICBpc0FueVxufSBmcm9tICcuLi9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCc7XG5cbmltcG9ydCB7XG4gIGZpbmRJbmRleCxcbiAgZmluZFxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBhIHNpbXBsZSBvcmRlcmluZyBwcm92aWRlciB0aGF0IG1ha2VzIHN1cmU6XG4gKlxuICogKDApIGxhYmVscyBhbmQgZ3JvdXBzIGFyZSByZW5kZXJlZCBhbHdheXMgb24gdG9wXG4gKiAoMSkgZWxlbWVudHMgYXJlIG9yZGVyZWQgYnkgYSB7bGV2ZWx9IHByb3BlcnR5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5PcmRlcmluZ1Byb3ZpZGVyKGV2ZW50QnVzLCBjYW52YXMsIHRyYW5zbGF0ZSkge1xuXG4gIE9yZGVyaW5nUHJvdmlkZXIuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgdmFyIG9yZGVycyA9IFtcbiAgICB7IHR5cGU6ICdicG1uOlN1YlByb2Nlc3MnLCBvcmRlcjogeyBsZXZlbDogNiB9IH0sXG4gICAge1xuICAgICAgdHlwZTogJ2JwbW46U2VxdWVuY2VGbG93JyxcbiAgICAgIG9yZGVyOiB7XG4gICAgICAgIGxldmVsOiAzLFxuICAgICAgICBjb250YWluZXJzOiBbXG4gICAgICAgICAgJ2JwbW46UGFydGljaXBhbnQnLFxuICAgICAgICAgICdicG1uOkZsb3dFbGVtZW50c0NvbnRhaW5lcidcbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBoYW5kbGUgRGF0YUFzc29jaWF0aW9uKHMpIGxpa2UgbWVzc2FnZSBmbG93cyBhbmQgcmVuZGVyIHRoZW0gYWx3YXlzIG9uIHRvcFxuICAgIHtcbiAgICAgIHR5cGU6ICdicG1uOkRhdGFBc3NvY2lhdGlvbicsXG4gICAgICBvcmRlcjoge1xuICAgICAgICBsZXZlbDogOSxcbiAgICAgICAgY29udGFpbmVyczogW1xuICAgICAgICAgICdicG1uOkNvbGxhYm9yYXRpb24nLFxuICAgICAgICAgICdicG1uOlByb2Nlc3MnXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6ICdicG1uOk1lc3NhZ2VGbG93Jywgb3JkZXI6IHtcbiAgICAgICAgbGV2ZWw6IDksXG4gICAgICAgIGNvbnRhaW5lcnM6IFsgJ2JwbW46Q29sbGFib3JhdGlvbicgXVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogJ2JwbW46QXNzb2NpYXRpb24nLFxuICAgICAgb3JkZXI6IHtcbiAgICAgICAgbGV2ZWw6IDYsXG4gICAgICAgIGNvbnRhaW5lcnM6IFtcbiAgICAgICAgICAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgICAgICAgJ2JwbW46Rmxvd0VsZW1lbnRzQ29udGFpbmVyJyxcbiAgICAgICAgICAnYnBtbjpDb2xsYWJvcmF0aW9uJ1xuICAgICAgICBdXG4gICAgICB9XG4gICAgfSxcbiAgICB7IHR5cGU6ICdicG1uOkJvdW5kYXJ5RXZlbnQnLCBvcmRlcjogeyBsZXZlbDogOCB9IH0sXG4gICAge1xuICAgICAgdHlwZTogJ2JwbW46R3JvdXAnLFxuICAgICAgb3JkZXI6IHtcbiAgICAgICAgbGV2ZWw6IDEwLFxuICAgICAgICBjb250YWluZXJzOiBbXG4gICAgICAgICAgJ2JwbW46Q29sbGFib3JhdGlvbicsXG4gICAgICAgICAgJ2JwbW46UHJvY2VzcydcbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0sXG4gICAgeyB0eXBlOiAnYnBtbjpGbG93RWxlbWVudCcsIG9yZGVyOiB7IGxldmVsOiA1IH0gfSxcbiAgICB7IHR5cGU6ICdicG1uOlBhcnRpY2lwYW50Jywgb3JkZXI6IHsgbGV2ZWw6IC0yIH0gfSxcbiAgICB7IHR5cGU6ICdicG1uOkxhbmUnLCBvcmRlcjogeyBsZXZlbDogLTEgfSB9XG4gIF07XG5cbiAgZnVuY3Rpb24gY29tcHV0ZU9yZGVyKGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudC5sYWJlbFRhcmdldCkge1xuICAgICAgcmV0dXJuIHsgbGV2ZWw6IDEwIH07XG4gICAgfVxuXG4gICAgdmFyIGVudHJ5ID0gZmluZChvcmRlcnMsIGZ1bmN0aW9uKG8pIHtcbiAgICAgIHJldHVybiBpc0FueShlbGVtZW50LCBbIG8udHlwZSBdKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS5vcmRlciB8fCB7IGxldmVsOiAxIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRPcmRlcihlbGVtZW50KSB7XG5cbiAgICB2YXIgb3JkZXIgPSBlbGVtZW50Lm9yZGVyO1xuXG4gICAgaWYgKCFvcmRlcikge1xuICAgICAgZWxlbWVudC5vcmRlciA9IG9yZGVyID0gY29tcHV0ZU9yZGVyKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBvcmRlcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRBY3R1YWxQYXJlbnQoZWxlbWVudCwgbmV3UGFyZW50LCBjb250YWluZXJzKSB7XG5cbiAgICB2YXIgYWN0dWFsUGFyZW50ID0gbmV3UGFyZW50O1xuXG4gICAgd2hpbGUgKGFjdHVhbFBhcmVudCkge1xuXG4gICAgICBpZiAoaXNBbnkoYWN0dWFsUGFyZW50LCBjb250YWluZXJzKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgYWN0dWFsUGFyZW50ID0gYWN0dWFsUGFyZW50LnBhcmVudDtcbiAgICB9XG5cbiAgICBpZiAoIWFjdHVhbFBhcmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgnbm8gcGFyZW50IGZvciB7ZWxlbWVudH0gaW4ge3BhcmVudH0nLCB7XG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQuaWQsXG4gICAgICAgIHBhcmVudDogbmV3UGFyZW50LmlkXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdHVhbFBhcmVudDtcbiAgfVxuXG4gIHRoaXMuZ2V0T3JkZXJpbmcgPSBmdW5jdGlvbihlbGVtZW50LCBuZXdQYXJlbnQpIHtcblxuICAgIC8vIHJlbmRlciBsYWJlbHMgYWx3YXlzIG9uIHRvcFxuICAgIGlmIChlbGVtZW50LmxhYmVsVGFyZ2V0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXJlbnQ6IGNhbnZhcy5nZXRSb290RWxlbWVudCgpLFxuICAgICAgICBpbmRleDogLTFcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnRPcmRlciA9IGdldE9yZGVyKGVsZW1lbnQpO1xuXG5cbiAgICBpZiAoZWxlbWVudE9yZGVyLmNvbnRhaW5lcnMpIHtcbiAgICAgIG5ld1BhcmVudCA9IGZpbmRBY3R1YWxQYXJlbnQoZWxlbWVudCwgbmV3UGFyZW50LCBlbGVtZW50T3JkZXIuY29udGFpbmVycyk7XG4gICAgfVxuXG5cbiAgICB2YXIgY3VycmVudEluZGV4ID0gbmV3UGFyZW50LmNoaWxkcmVuLmluZGV4T2YoZWxlbWVudCk7XG5cbiAgICB2YXIgaW5zZXJ0SW5kZXggPSBmaW5kSW5kZXgobmV3UGFyZW50LmNoaWxkcmVuLCBmdW5jdGlvbihjaGlsZCkge1xuXG4gICAgICAvLyBkbyBub3QgY29tcGFyZSB3aXRoIGxhYmVscywgdGhleSBhcmUgY3JlYXRlZFxuICAgICAgLy8gaW4gdGhlIHdyb25nIG9yZGVyIChyaWdodCBhZnRlciBlbGVtZW50cykgZHVyaW5nIGltcG9ydCBhbmRcbiAgICAgIC8vIG1lc3MgdXAgdGhlIHBvc2l0aW9uaW5nLlxuICAgICAgaWYgKCFlbGVtZW50LmxhYmVsVGFyZ2V0ICYmIGNoaWxkLmxhYmVsVGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVsZW1lbnRPcmRlci5sZXZlbCA8IGdldE9yZGVyKGNoaWxkKS5sZXZlbDtcbiAgICB9KTtcblxuXG4gICAgLy8gaWYgdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSBpbiB0aGUgY2hpbGQgbGlzdCBhdFxuICAgIC8vIGEgc21hbGxlciBpbmRleCwgd2UgbmVlZCB0byBhZGp1c3QgdGhlIGluc2VydCBpbmRleC5cbiAgICAvLyB0aGlzIHRha2VzIGludG8gYWNjb3VudCB0aGF0IHRoZSBlbGVtZW50IGlzIGJlaW5nIHJlbW92ZWRcbiAgICAvLyBiZWZvcmUgYmVpbmcgcmUtaW5zZXJ0ZWRcbiAgICBpZiAoaW5zZXJ0SW5kZXggIT09IC0xKSB7XG4gICAgICBpZiAoY3VycmVudEluZGV4ICE9PSAtMSAmJiBjdXJyZW50SW5kZXggPCBpbnNlcnRJbmRleCkge1xuICAgICAgICBpbnNlcnRJbmRleCAtPSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpbmRleDogaW5zZXJ0SW5kZXgsXG4gICAgICBwYXJlbnQ6IG5ld1BhcmVudFxuICAgIH07XG4gIH07XG59XG5cbkJwbW5PcmRlcmluZ1Byb3ZpZGVyLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdjYW52YXMnLCAndHJhbnNsYXRlJyBdO1xuXG5pbmhlcml0cyhCcG1uT3JkZXJpbmdQcm92aWRlciwgT3JkZXJpbmdQcm92aWRlcik7IiwiaW1wb3J0IHRyYW5zbGF0ZSBmcm9tICdkaWFncmFtLWpzL2xpYi9pMThuL3RyYW5zbGF0ZSc7XG5cbmltcG9ydCBCcG1uT3JkZXJpbmdQcm92aWRlciBmcm9tICcuL0JwbW5PcmRlcmluZ1Byb3ZpZGVyJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIHRyYW5zbGF0ZVxuICBdLFxuICBfX2luaXRfXzogWyAnYnBtbk9yZGVyaW5nUHJvdmlkZXInIF0sXG4gIGJwbW5PcmRlcmluZ1Byb3ZpZGVyOiBbICd0eXBlJywgQnBtbk9yZGVyaW5nUHJvdmlkZXIgXVxufTsiLCJpbXBvcnQge1xuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbi8qKlxuICogQSBwYWxldHRlIHByb3ZpZGVyIGZvciBCUE1OIDIuMCBlbGVtZW50cy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUGFsZXR0ZVByb3ZpZGVyKFxuICAgIHBhbGV0dGUsIGNyZWF0ZSwgZWxlbWVudEZhY3RvcnksXG4gICAgc3BhY2VUb29sLCBsYXNzb1Rvb2wsIGhhbmRUb29sLFxuICAgIGdsb2JhbENvbm5lY3QsIHRyYW5zbGF0ZSkge1xuXG4gIHRoaXMuX3BhbGV0dGUgPSBwYWxldHRlO1xuICB0aGlzLl9jcmVhdGUgPSBjcmVhdGU7XG4gIHRoaXMuX2VsZW1lbnRGYWN0b3J5ID0gZWxlbWVudEZhY3Rvcnk7XG4gIHRoaXMuX3NwYWNlVG9vbCA9IHNwYWNlVG9vbDtcbiAgdGhpcy5fbGFzc29Ub29sID0gbGFzc29Ub29sO1xuICB0aGlzLl9oYW5kVG9vbCA9IGhhbmRUb29sO1xuICB0aGlzLl9nbG9iYWxDb25uZWN0ID0gZ2xvYmFsQ29ubmVjdDtcbiAgdGhpcy5fdHJhbnNsYXRlID0gdHJhbnNsYXRlO1xuXG4gIHBhbGV0dGUucmVnaXN0ZXJQcm92aWRlcih0aGlzKTtcbn1cblxuUGFsZXR0ZVByb3ZpZGVyLiRpbmplY3QgPSBbXG4gICdwYWxldHRlJyxcbiAgJ2NyZWF0ZScsXG4gICdlbGVtZW50RmFjdG9yeScsXG4gICdzcGFjZVRvb2wnLFxuICAnbGFzc29Ub29sJyxcbiAgJ2hhbmRUb29sJyxcbiAgJ2dsb2JhbENvbm5lY3QnLFxuICAndHJhbnNsYXRlJ1xuXTtcblxuXG5QYWxldHRlUHJvdmlkZXIucHJvdG90eXBlLmdldFBhbGV0dGVFbnRyaWVzID0gZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gIHZhciBhY3Rpb25zID0ge30sXG4gICAgICBjcmVhdGUgPSB0aGlzLl9jcmVhdGUsXG4gICAgICBlbGVtZW50RmFjdG9yeSA9IHRoaXMuX2VsZW1lbnRGYWN0b3J5LFxuICAgICAgc3BhY2VUb29sID0gdGhpcy5fc3BhY2VUb29sLFxuICAgICAgbGFzc29Ub29sID0gdGhpcy5fbGFzc29Ub29sLFxuICAgICAgaGFuZFRvb2wgPSB0aGlzLl9oYW5kVG9vbCxcbiAgICAgIGdsb2JhbENvbm5lY3QgPSB0aGlzLl9nbG9iYWxDb25uZWN0LFxuICAgICAgdHJhbnNsYXRlID0gdGhpcy5fdHJhbnNsYXRlO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFjdGlvbih0eXBlLCBncm91cCwgY2xhc3NOYW1lLCB0aXRsZSwgb3B0aW9ucykge1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlTGlzdGVuZXIoZXZlbnQpIHtcbiAgICAgIHZhciBzaGFwZSA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKGFzc2lnbih7IHR5cGU6IHR5cGUgfSwgb3B0aW9ucykpO1xuXG4gICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBzaGFwZS5idXNpbmVzc09iamVjdC5kaS5pc0V4cGFuZGVkID0gb3B0aW9ucy5pc0V4cGFuZGVkO1xuICAgICAgfVxuXG4gICAgICBjcmVhdGUuc3RhcnQoZXZlbnQsIHNoYXBlKTtcbiAgICB9XG5cbiAgICB2YXIgc2hvcnRUeXBlID0gdHlwZS5yZXBsYWNlKC9eYnBtbjovLCAnJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3JvdXA6IGdyb3VwLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICB0aXRsZTogdGl0bGUgfHwgdHJhbnNsYXRlKCdDcmVhdGUge3R5cGV9JywgeyB0eXBlOiBzaG9ydFR5cGUgfSksXG4gICAgICBhY3Rpb246IHtcbiAgICAgICAgZHJhZ3N0YXJ0OiBjcmVhdGVMaXN0ZW5lcixcbiAgICAgICAgY2xpY2s6IGNyZWF0ZUxpc3RlbmVyXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN1YnByb2Nlc3MoZXZlbnQpIHtcbiAgICB2YXIgc3ViUHJvY2VzcyA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKHtcbiAgICAgIHR5cGU6ICdicG1uOlN1YlByb2Nlc3MnLFxuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICBpc0V4cGFuZGVkOiB0cnVlXG4gICAgfSk7XG5cbiAgICB2YXIgc3RhcnRFdmVudCA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgeDogNDAsXG4gICAgICB5OiA4MixcbiAgICAgIHBhcmVudDogc3ViUHJvY2Vzc1xuICAgIH0pO1xuXG4gICAgY3JlYXRlLnN0YXJ0KGV2ZW50LCBbIHN1YlByb2Nlc3MsIHN0YXJ0RXZlbnQgXSwge1xuICAgICAgaGludHM6IHtcbiAgICAgICAgYXV0b1NlbGVjdDogWyBzdGFydEV2ZW50IF1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVBhcnRpY2lwYW50KGV2ZW50KSB7XG4gICAgY3JlYXRlLnN0YXJ0KGV2ZW50LCBlbGVtZW50RmFjdG9yeS5jcmVhdGVQYXJ0aWNpcGFudFNoYXBlKCkpO1xuICB9XG5cbiAgYXNzaWduKGFjdGlvbnMsIHtcbiAgICAnaGFuZC10b29sJzoge1xuICAgICAgZ3JvdXA6ICd0b29scycsXG4gICAgICBjbGFzc05hbWU6ICdicG1uLWljb24taGFuZC10b29sJyxcbiAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0FjdGl2YXRlIHRoZSBoYW5kIHRvb2wnKSxcbiAgICAgIGFjdGlvbjoge1xuICAgICAgICBjbGljazogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICBoYW5kVG9vbC5hY3RpdmF0ZUhhbmQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICAnbGFzc28tdG9vbCc6IHtcbiAgICAgIGdyb3VwOiAndG9vbHMnLFxuICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWxhc3NvLXRvb2wnLFxuICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQWN0aXZhdGUgdGhlIGxhc3NvIHRvb2wnKSxcbiAgICAgIGFjdGlvbjoge1xuICAgICAgICBjbGljazogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICBsYXNzb1Rvb2wuYWN0aXZhdGVTZWxlY3Rpb24oZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICAnc3BhY2UtdG9vbCc6IHtcbiAgICAgIGdyb3VwOiAndG9vbHMnLFxuICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXNwYWNlLXRvb2wnLFxuICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQWN0aXZhdGUgdGhlIGNyZWF0ZS9yZW1vdmUgc3BhY2UgdG9vbCcpLFxuICAgICAgYWN0aW9uOiB7XG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgIHNwYWNlVG9vbC5hY3RpdmF0ZVNlbGVjdGlvbihldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgICdnbG9iYWwtY29ubmVjdC10b29sJzoge1xuICAgICAgZ3JvdXA6ICd0b29scycsXG4gICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY29ubmVjdGlvbi1tdWx0aScsXG4gICAgICB0aXRsZTogdHJhbnNsYXRlKCdBY3RpdmF0ZSB0aGUgZ2xvYmFsIGNvbm5lY3QgdG9vbCcpLFxuICAgICAgYWN0aW9uOiB7XG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgIGdsb2JhbENvbm5lY3QudG9nZ2xlKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgJ3Rvb2wtc2VwYXJhdG9yJzoge1xuICAgICAgZ3JvdXA6ICd0b29scycsXG4gICAgICBzZXBhcmF0b3I6IHRydWVcbiAgICB9LFxuICAgICdjcmVhdGUuc3RhcnQtZXZlbnQnOiBjcmVhdGVBY3Rpb24oXG4gICAgICAnYnBtbjpTdGFydEV2ZW50JywgJ2V2ZW50JywgJ2JwbW4taWNvbi1zdGFydC1ldmVudC1ub25lJyxcbiAgICAgIHRyYW5zbGF0ZSgnQ3JlYXRlIFN0YXJ0RXZlbnQnKVxuICAgICksXG4gICAgJ2NyZWF0ZS5pbnRlcm1lZGlhdGUtZXZlbnQnOiBjcmVhdGVBY3Rpb24oXG4gICAgICAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JywgJ2V2ZW50JywgJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtbm9uZScsXG4gICAgICB0cmFuc2xhdGUoJ0NyZWF0ZSBJbnRlcm1lZGlhdGUvQm91bmRhcnkgRXZlbnQnKVxuICAgICksXG4gICAgJ2NyZWF0ZS5lbmQtZXZlbnQnOiBjcmVhdGVBY3Rpb24oXG4gICAgICAnYnBtbjpFbmRFdmVudCcsICdldmVudCcsICdicG1uLWljb24tZW5kLWV2ZW50LW5vbmUnLFxuICAgICAgdHJhbnNsYXRlKCdDcmVhdGUgRW5kRXZlbnQnKVxuICAgICksXG4gICAgJ2NyZWF0ZS5leGNsdXNpdmUtZ2F0ZXdheSc6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdicG1uOkV4Y2x1c2l2ZUdhdGV3YXknLCAnZ2F0ZXdheScsICdicG1uLWljb24tZ2F0ZXdheS1ub25lJyxcbiAgICAgIHRyYW5zbGF0ZSgnQ3JlYXRlIEdhdGV3YXknKVxuICAgICksXG4gICAgJ2NyZWF0ZS50YXNrJzogY3JlYXRlQWN0aW9uKFxuICAgICAgJ2JwbW46VGFzaycsICdhY3Rpdml0eScsICdicG1uLWljb24tdGFzaycsXG4gICAgICB0cmFuc2xhdGUoJ0NyZWF0ZSBUYXNrJylcbiAgICApLFxuICAgICdjcmVhdGUuZGF0YS1vYmplY3QnOiBjcmVhdGVBY3Rpb24oXG4gICAgICAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJywgJ2RhdGEtb2JqZWN0JywgJ2JwbW4taWNvbi1kYXRhLW9iamVjdCcsXG4gICAgICB0cmFuc2xhdGUoJ0NyZWF0ZSBEYXRhT2JqZWN0UmVmZXJlbmNlJylcbiAgICApLFxuICAgICdjcmVhdGUuZGF0YS1zdG9yZSc6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScsICdkYXRhLXN0b3JlJywgJ2JwbW4taWNvbi1kYXRhLXN0b3JlJyxcbiAgICAgIHRyYW5zbGF0ZSgnQ3JlYXRlIERhdGFTdG9yZVJlZmVyZW5jZScpXG4gICAgKSxcbiAgICAnY3JlYXRlLnN1YnByb2Nlc3MtZXhwYW5kZWQnOiB7XG4gICAgICBncm91cDogJ2FjdGl2aXR5JyxcbiAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdWJwcm9jZXNzLWV4cGFuZGVkJyxcbiAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0NyZWF0ZSBleHBhbmRlZCBTdWJQcm9jZXNzJyksXG4gICAgICBhY3Rpb246IHtcbiAgICAgICAgZHJhZ3N0YXJ0OiBjcmVhdGVTdWJwcm9jZXNzLFxuICAgICAgICBjbGljazogY3JlYXRlU3VicHJvY2Vzc1xuICAgICAgfVxuICAgIH0sXG4gICAgJ2NyZWF0ZS5wYXJ0aWNpcGFudC1leHBhbmRlZCc6IHtcbiAgICAgIGdyb3VwOiAnY29sbGFib3JhdGlvbicsXG4gICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tcGFydGljaXBhbnQnLFxuICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQ3JlYXRlIFBvb2wvUGFydGljaXBhbnQnKSxcbiAgICAgIGFjdGlvbjoge1xuICAgICAgICBkcmFnc3RhcnQ6IGNyZWF0ZVBhcnRpY2lwYW50LFxuICAgICAgICBjbGljazogY3JlYXRlUGFydGljaXBhbnRcbiAgICAgIH1cbiAgICB9LFxuICAgICdjcmVhdGUuZ3JvdXAnOiBjcmVhdGVBY3Rpb24oXG4gICAgICAnYnBtbjpHcm91cCcsICdhcnRpZmFjdCcsICdicG1uLWljb24tZ3JvdXAnLFxuICAgICAgdHJhbnNsYXRlKCdDcmVhdGUgR3JvdXAnKVxuICAgICksXG4gIH0pO1xuXG4gIHJldHVybiBhY3Rpb25zO1xufTtcbiIsImltcG9ydCBQYWxldHRlTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3BhbGV0dGUnO1xuaW1wb3J0IENyZWF0ZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jcmVhdGUnO1xuaW1wb3J0IFNwYWNlVG9vbE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zcGFjZS10b29sJztcbmltcG9ydCBMYXNzb1Rvb2xNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbGFzc28tdG9vbCc7XG5pbXBvcnQgSGFuZFRvb2xNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvaGFuZC10b29sJztcbmltcG9ydCBHbG9iYWxDb25uZWN0TW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2dsb2JhbC1jb25uZWN0JztcbmltcG9ydCB0cmFuc2xhdGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUnO1xuXG5pbXBvcnQgUGFsZXR0ZVByb3ZpZGVyIGZyb20gJy4vUGFsZXR0ZVByb3ZpZGVyJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIFBhbGV0dGVNb2R1bGUsXG4gICAgQ3JlYXRlTW9kdWxlLFxuICAgIFNwYWNlVG9vbE1vZHVsZSxcbiAgICBMYXNzb1Rvb2xNb2R1bGUsXG4gICAgSGFuZFRvb2xNb2R1bGUsXG4gICAgR2xvYmFsQ29ubmVjdE1vZHVsZSxcbiAgICB0cmFuc2xhdGVcbiAgXSxcbiAgX19pbml0X186IFsgJ3BhbGV0dGVQcm92aWRlcicgXSxcbiAgcGFsZXR0ZVByb3ZpZGVyOiBbICd0eXBlJywgUGFsZXR0ZVByb3ZpZGVyIF1cbn07XG4iLCJpbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0V2ZW50U3ViUHJvY2VzcyxcbiAgaXNFeHBhbmRlZFxufSBmcm9tICcuLi8uLi91dGlsL0RpVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzRGlmZmVyZW50VHlwZVxufSBmcm9tICcuL3V0aWwvVHlwZVV0aWwnO1xuXG5pbXBvcnQge1xuICBmb3JFYWNoLFxuICBmaWx0ZXJcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgKiBhcyByZXBsYWNlT3B0aW9ucyBmcm9tICcuLi9yZXBsYWNlL1JlcGxhY2VPcHRpb25zJztcblxuXG4vKipcbiAqIFRoaXMgbW9kdWxlIGlzIGFuIGVsZW1lbnQgYWdub3N0aWMgcmVwbGFjZSBtZW51IHByb3ZpZGVyIGZvciB0aGUgcG9wdXAgbWVudS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVwbGFjZU1lbnVQcm92aWRlcihcbiAgICBwb3B1cE1lbnUsIG1vZGVsaW5nLCBtb2RkbGUsXG4gICAgYnBtblJlcGxhY2UsIHJ1bGVzLCB0cmFuc2xhdGUpIHtcblxuICB0aGlzLl9wb3B1cE1lbnUgPSBwb3B1cE1lbnU7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gIHRoaXMuX21vZGRsZSA9IG1vZGRsZTtcbiAgdGhpcy5fYnBtblJlcGxhY2UgPSBicG1uUmVwbGFjZTtcbiAgdGhpcy5fcnVsZXMgPSBydWxlcztcbiAgdGhpcy5fdHJhbnNsYXRlID0gdHJhbnNsYXRlO1xuXG4gIHRoaXMucmVnaXN0ZXIoKTtcbn1cblxuUmVwbGFjZU1lbnVQcm92aWRlci4kaW5qZWN0ID0gW1xuICAncG9wdXBNZW51JyxcbiAgJ21vZGVsaW5nJyxcbiAgJ21vZGRsZScsXG4gICdicG1uUmVwbGFjZScsXG4gICdydWxlcycsXG4gICd0cmFuc2xhdGUnXG5dO1xuXG5cbi8qKlxuICogUmVnaXN0ZXIgcmVwbGFjZSBtZW51IHByb3ZpZGVyIGluIHRoZSBwb3B1cCBtZW51XG4gKi9cblJlcGxhY2VNZW51UHJvdmlkZXIucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3BvcHVwTWVudS5yZWdpc3RlclByb3ZpZGVyKCdicG1uLXJlcGxhY2UnLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBHZXQgYWxsIGVudHJpZXMgZnJvbSByZXBsYWNlT3B0aW9ucyBmb3IgdGhlIGdpdmVuIGVsZW1lbnQgYW5kIGFwcGx5IGZpbHRlcnNcbiAqIG9uIHRoZW0uIEdldCBmb3IgZXhhbXBsZSBvbmx5IGVsZW1lbnRzLCB3aGljaCBhcmUgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgb25lLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxPYmplY3Q+fSBhIGxpc3Qgb2YgbWVudSBlbnRyeSBpdGVtc1xuICovXG5SZXBsYWNlTWVudVByb3ZpZGVyLnByb3RvdHlwZS5nZXRFbnRyaWVzID0gZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gIHZhciBidXNpbmVzc09iamVjdCA9IGVsZW1lbnQuYnVzaW5lc3NPYmplY3Q7XG5cbiAgdmFyIHJ1bGVzID0gdGhpcy5fcnVsZXM7XG5cbiAgdmFyIGVudHJpZXM7XG5cbiAgaWYgKCFydWxlcy5hbGxvd2VkKCdzaGFwZS5yZXBsYWNlJywgeyBlbGVtZW50OiBlbGVtZW50IH0pKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdmFyIGRpZmZlcmVudFR5cGUgPSBpc0RpZmZlcmVudFR5cGUoZWxlbWVudCk7XG5cbiAgLy8gc3RhcnQgZXZlbnRzIG91dHNpZGUgZXZlbnQgc3ViIHByb2Nlc3Nlc1xuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOlN0YXJ0RXZlbnQnKSAmJiAhaXNFdmVudFN1YlByb2Nlc3MoYnVzaW5lc3NPYmplY3QuJHBhcmVudCkpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuU1RBUlRfRVZFTlQsIGRpZmZlcmVudFR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBleHBhbmRlZC9jb2xsYXBzZWQgcG9vbHNcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG5cbiAgICBlbnRyaWVzID0gZmlsdGVyKHJlcGxhY2VPcHRpb25zLlBBUlRJQ0lQQU5ULCBmdW5jdGlvbihlbnRyeSkge1xuICAgICAgcmV0dXJuIGlzRXhwYW5kZWQoYnVzaW5lc3NPYmplY3QpICE9PSBlbnRyeS50YXJnZXQuaXNFeHBhbmRlZDtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbnRyaWVzKGVsZW1lbnQsIGVudHJpZXMpO1xuICB9XG5cbiAgLy8gc3RhcnQgZXZlbnRzIGluc2lkZSBldmVudCBzdWIgcHJvY2Vzc2VzXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46U3RhcnRFdmVudCcpICYmIGlzRXZlbnRTdWJQcm9jZXNzKGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQpKSB7XG5cbiAgICBlbnRyaWVzID0gZmlsdGVyKHJlcGxhY2VPcHRpb25zLkVWRU5UX1NVQl9QUk9DRVNTX1NUQVJUX0VWRU5ULCBmdW5jdGlvbihlbnRyeSkge1xuXG4gICAgICB2YXIgdGFyZ2V0ID0gZW50cnkudGFyZ2V0O1xuXG4gICAgICB2YXIgaXNJbnRlcnJ1cHRpbmcgPSB0YXJnZXQuaXNJbnRlcnJ1cHRpbmcgIT09IGZhbHNlO1xuXG4gICAgICB2YXIgaXNJbnRlcnJ1cHRpbmdFcXVhbCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmlzSW50ZXJydXB0aW5nID09PSBpc0ludGVycnVwdGluZztcblxuICAgICAgLy8gZmlsdGVycyBlbGVtZW50cyB3aGljaCB0eXBlcyBhbmQgZXZlbnQgZGVmaW5pdGlvbiBhcmUgZXF1YWwgYnV0IGhhdmUgaGF2ZSBkaWZmZXJlbnQgaW50ZXJydXB0aW5nIHR5cGVzXG4gICAgICByZXR1cm4gZGlmZmVyZW50VHlwZShlbnRyeSkgfHwgIWRpZmZlcmVudFR5cGUoZW50cnkpICYmICFpc0ludGVycnVwdGluZ0VxdWFsO1xuXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW50cmllcyhlbGVtZW50LCBlbnRyaWVzKTtcbiAgfVxuXG4gIC8vIGVuZCBldmVudHNcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpFbmRFdmVudCcpKSB7XG5cbiAgICBlbnRyaWVzID0gZmlsdGVyKHJlcGxhY2VPcHRpb25zLkVORF9FVkVOVCwgZnVuY3Rpb24oZW50cnkpIHtcbiAgICAgIHZhciB0YXJnZXQgPSBlbnRyeS50YXJnZXQ7XG5cbiAgICAgIC8vIGhpZGUgY2FuY2VsIGVuZCBldmVudHMgb3V0c2lkZSB0cmFuc2FjdGlvbnNcbiAgICAgIGlmICh0YXJnZXQuZXZlbnREZWZpbml0aW9uVHlwZSA9PSAnYnBtbjpDYW5jZWxFdmVudERlZmluaXRpb24nICYmICFpcyhidXNpbmVzc09iamVjdC4kcGFyZW50LCAnYnBtbjpUcmFuc2FjdGlvbicpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpZmZlcmVudFR5cGUoZW50cnkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBib3VuZGFyeSBldmVudHNcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpCb3VuZGFyeUV2ZW50JykpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuQk9VTkRBUllfRVZFTlQsIGZ1bmN0aW9uKGVudHJ5KSB7XG5cbiAgICAgIHZhciB0YXJnZXQgPSBlbnRyeS50YXJnZXQ7XG5cbiAgICAgIGlmICh0YXJnZXQuZXZlbnREZWZpbml0aW9uID09ICdicG1uOkNhbmNlbEV2ZW50RGVmaW5pdGlvbicgJiZcbiAgICAgICAgICFpcyhidXNpbmVzc09iamVjdC5hdHRhY2hlZFRvUmVmLCAnYnBtbjpUcmFuc2FjdGlvbicpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciBjYW5jZWxBY3Rpdml0eSA9IHRhcmdldC5jYW5jZWxBY3Rpdml0eSAhPT0gZmFsc2U7XG5cbiAgICAgIHZhciBpc0NhbmNlbEFjdGl2aXR5RXF1YWwgPSBidXNpbmVzc09iamVjdC5jYW5jZWxBY3Rpdml0eSA9PSBjYW5jZWxBY3Rpdml0eTtcblxuICAgICAgcmV0dXJuIGRpZmZlcmVudFR5cGUoZW50cnkpIHx8ICFkaWZmZXJlbnRUeXBlKGVudHJ5KSAmJiAhaXNDYW5jZWxBY3Rpdml0eUVxdWFsO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBpbnRlcm1lZGlhdGUgZXZlbnRzXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcpIHx8XG4gICAgICBpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcpKSB7XG5cbiAgICBlbnRyaWVzID0gZmlsdGVyKHJlcGxhY2VPcHRpb25zLklOVEVSTUVESUFURV9FVkVOVCwgZGlmZmVyZW50VHlwZSk7XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW50cmllcyhlbGVtZW50LCBlbnRyaWVzKTtcbiAgfVxuXG4gIC8vIGdhdGV3YXlzXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46R2F0ZXdheScpKSB7XG5cbiAgICBlbnRyaWVzID0gZmlsdGVyKHJlcGxhY2VPcHRpb25zLkdBVEVXQVksIGRpZmZlcmVudFR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyB0cmFuc2FjdGlvbnNcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpUcmFuc2FjdGlvbicpKSB7XG5cbiAgICBlbnRyaWVzID0gZmlsdGVyKHJlcGxhY2VPcHRpb25zLlRSQU5TQUNUSU9OLCBkaWZmZXJlbnRUeXBlKTtcblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbnRyaWVzKGVsZW1lbnQsIGVudHJpZXMpO1xuICB9XG5cbiAgLy8gZXhwYW5kZWQgZXZlbnQgc3ViIHByb2Nlc3Nlc1xuICBpZiAoaXNFdmVudFN1YlByb2Nlc3MoYnVzaW5lc3NPYmplY3QpICYmIGlzRXhwYW5kZWQoYnVzaW5lc3NPYmplY3QpKSB7XG5cbiAgICBlbnRyaWVzID0gZmlsdGVyKHJlcGxhY2VPcHRpb25zLkVWRU5UX1NVQl9QUk9DRVNTLCBkaWZmZXJlbnRUeXBlKTtcblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbnRyaWVzKGVsZW1lbnQsIGVudHJpZXMpO1xuICB9XG5cbiAgLy8gZXhwYW5kZWQgc3ViIHByb2Nlc3Nlc1xuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOlN1YlByb2Nlc3MnKSAmJiBpc0V4cGFuZGVkKGJ1c2luZXNzT2JqZWN0KSkge1xuXG4gICAgZW50cmllcyA9IGZpbHRlcihyZXBsYWNlT3B0aW9ucy5TVUJQUk9DRVNTX0VYUEFOREVELCBkaWZmZXJlbnRUeXBlKTtcblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbnRyaWVzKGVsZW1lbnQsIGVudHJpZXMpO1xuICB9XG5cbiAgLy8gY29sbGFwc2VkIGFkIGhvYyBzdWIgcHJvY2Vzc2VzXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46QWRIb2NTdWJQcm9jZXNzJykgJiYgIWlzRXhwYW5kZWQoYnVzaW5lc3NPYmplY3QpKSB7XG5cbiAgICBlbnRyaWVzID0gZmlsdGVyKHJlcGxhY2VPcHRpb25zLlRBU0ssIGZ1bmN0aW9uKGVudHJ5KSB7XG5cbiAgICAgIHZhciB0YXJnZXQgPSBlbnRyeS50YXJnZXQ7XG5cbiAgICAgIHZhciBpc1RhcmdldFN1YlByb2Nlc3MgPSB0YXJnZXQudHlwZSA9PT0gJ2JwbW46U3ViUHJvY2Vzcyc7XG5cbiAgICAgIHZhciBpc1RhcmdldEV4cGFuZGVkID0gdGFyZ2V0LmlzRXhwYW5kZWQgPT09IHRydWU7XG5cbiAgICAgIHJldHVybiBpc0RpZmZlcmVudFR5cGUoZWxlbWVudCwgdGFyZ2V0KSAmJiAoIWlzVGFyZ2V0U3ViUHJvY2VzcyB8fCBpc1RhcmdldEV4cGFuZGVkKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbnRyaWVzKGVsZW1lbnQsIGVudHJpZXMpO1xuICB9XG5cbiAgLy8gc2VxdWVuY2UgZmxvd3NcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpTZXF1ZW5jZUZsb3cnKSkge1xuICAgIHJldHVybiB0aGlzLl9jcmVhdGVTZXF1ZW5jZUZsb3dFbnRyaWVzKGVsZW1lbnQsIHJlcGxhY2VPcHRpb25zLlNFUVVFTkNFX0ZMT1cpO1xuICB9XG5cbiAgLy8gZmxvdyBub2Rlc1xuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkZsb3dOb2RlJykpIHtcbiAgICBlbnRyaWVzID0gZmlsdGVyKHJlcGxhY2VPcHRpb25zLlRBU0ssIGRpZmZlcmVudFR5cGUpO1xuXG4gICAgLy8gY29sbGFwc2VkIFN1YlByb2Nlc3MgY2FuIG5vdCBiZSByZXBsYWNlZCB3aXRoIGl0c2VsZlxuICAgIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46U3ViUHJvY2VzcycpICYmICFpc0V4cGFuZGVkKGJ1c2luZXNzT2JqZWN0KSkge1xuICAgICAgZW50cmllcyA9IGZpbHRlcihlbnRyaWVzLCBmdW5jdGlvbihlbnRyeSkge1xuICAgICAgICByZXR1cm4gZW50cnkubGFiZWwgIT09ICdTdWIgUHJvY2VzcyAoY29sbGFwc2VkKSc7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW50cmllcyhlbGVtZW50LCBlbnRyaWVzKTtcbiAgfVxuXG4gIHJldHVybiBbXTtcbn07XG5cblxuLyoqXG4gKiBHZXQgYSBsaXN0IG9mIGhlYWRlciBpdGVtcyBmb3IgdGhlIGdpdmVuIGVsZW1lbnQuIFRoaXMgaW5jbHVkZXMgYnV0dG9uc1xuICogZm9yIG11bHRpIGluc3RhbmNlIG1hcmtlcnMgYW5kIGZvciB0aGUgYWQgaG9jIG1hcmtlci5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gYSBsaXN0IG9mIG1lbnUgZW50cnkgaXRlbXNcbiAqL1xuUmVwbGFjZU1lbnVQcm92aWRlci5wcm90b3R5cGUuZ2V0SGVhZGVyRW50cmllcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICB2YXIgaGVhZGVyRW50cmllcyA9IFtdO1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpBY3Rpdml0eScpICYmICFpc0V2ZW50U3ViUHJvY2VzcyhlbGVtZW50KSkge1xuICAgIGhlYWRlckVudHJpZXMgPSBoZWFkZXJFbnRyaWVzLmNvbmNhdCh0aGlzLl9nZXRMb29wRW50cmllcyhlbGVtZW50KSk7XG4gIH1cblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46U3ViUHJvY2VzcycpICYmXG4gICAgICAhaXMoZWxlbWVudCwgJ2JwbW46VHJhbnNhY3Rpb24nKSAmJlxuICAgICAgIWlzRXZlbnRTdWJQcm9jZXNzKGVsZW1lbnQpKSB7XG4gICAgaGVhZGVyRW50cmllcy5wdXNoKHRoaXMuX2dldEFkSG9jRW50cnkoZWxlbWVudCkpO1xuICB9XG5cbiAgcmV0dXJuIGhlYWRlckVudHJpZXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBtZW51IGVudHJ5IG9iamVjdHMgZm9yIGEgZ2l2ZW4gZWxlbWVudCBhbmQgZmlsdGVycyB0aGUgcmVwbGFjZU9wdGlvbnNcbiAqIGFjY29yZGluZyB0byBhIGZpbHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtICB7T2JqZWN0fSByZXBsYWNlT3B0aW9uc1xuICpcbiAqIEByZXR1cm4ge0FycmF5PE9iamVjdD59IGEgbGlzdCBvZiBtZW51IGl0ZW1zXG4gKi9cblJlcGxhY2VNZW51UHJvdmlkZXIucHJvdG90eXBlLl9jcmVhdGVFbnRyaWVzID0gZnVuY3Rpb24oZWxlbWVudCwgcmVwbGFjZU9wdGlvbnMpIHtcbiAgdmFyIG1lbnVFbnRyaWVzID0gW107XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGZvckVhY2gocmVwbGFjZU9wdGlvbnMsIGZ1bmN0aW9uKGRlZmluaXRpb24pIHtcbiAgICB2YXIgZW50cnkgPSBzZWxmLl9jcmVhdGVNZW51RW50cnkoZGVmaW5pdGlvbiwgZWxlbWVudCk7XG5cbiAgICBtZW51RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfSk7XG5cbiAgcmV0dXJuIG1lbnVFbnRyaWVzO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG1lbnUgZW50cnkgb2JqZWN0cyBmb3IgYSBnaXZlbiBzZXF1ZW5jZSBmbG93LlxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0gIHtPYmplY3R9IHJlcGxhY2VPcHRpb25zXG5cbiAqIEByZXR1cm4ge0FycmF5PE9iamVjdD59IGEgbGlzdCBvZiBtZW51IGl0ZW1zXG4gKi9cblJlcGxhY2VNZW51UHJvdmlkZXIucHJvdG90eXBlLl9jcmVhdGVTZXF1ZW5jZUZsb3dFbnRyaWVzID0gZnVuY3Rpb24oZWxlbWVudCwgcmVwbGFjZU9wdGlvbnMpIHtcblxuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICB2YXIgbWVudUVudHJpZXMgPSBbXTtcblxuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZyxcbiAgICAgIG1vZGRsZSA9IHRoaXMuX21vZGRsZTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZm9yRWFjaChyZXBsYWNlT3B0aW9ucywgZnVuY3Rpb24oZW50cnkpIHtcblxuICAgIHN3aXRjaCAoZW50cnkuYWN0aW9uTmFtZSkge1xuICAgIGNhc2UgJ3JlcGxhY2Utd2l0aC1kZWZhdWx0LWZsb3cnOlxuICAgICAgaWYgKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZi5kZWZhdWx0ICE9PSBidXNpbmVzc09iamVjdCAmJlxuICAgICAgICAgICAgKGlzKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiwgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheScpIHx8XG4gICAgICAgICAgICAgaXMoYnVzaW5lc3NPYmplY3Quc291cmNlUmVmLCAnYnBtbjpJbmNsdXNpdmVHYXRld2F5JykgfHxcbiAgICAgICAgICAgICBpcyhidXNpbmVzc09iamVjdC5zb3VyY2VSZWYsICdicG1uOkNvbXBsZXhHYXRld2F5JykgfHxcbiAgICAgICAgICAgICBpcyhidXNpbmVzc09iamVjdC5zb3VyY2VSZWYsICdicG1uOkFjdGl2aXR5JykpKSB7XG5cbiAgICAgICAgbWVudUVudHJpZXMucHVzaChzZWxmLl9jcmVhdGVNZW51RW50cnkoZW50cnksIGVsZW1lbnQsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudC5zb3VyY2UsIHsgZGVmYXVsdDogYnVzaW5lc3NPYmplY3QgfSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JlcGxhY2Utd2l0aC1jb25kaXRpb25hbC1mbG93JzpcbiAgICAgIGlmICghYnVzaW5lc3NPYmplY3QuY29uZGl0aW9uRXhwcmVzc2lvbiAmJiBpcyhidXNpbmVzc09iamVjdC5zb3VyY2VSZWYsICdicG1uOkFjdGl2aXR5JykpIHtcblxuICAgICAgICBtZW51RW50cmllcy5wdXNoKHNlbGYuX2NyZWF0ZU1lbnVFbnRyeShlbnRyeSwgZWxlbWVudCwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGNvbmRpdGlvbkV4cHJlc3Npb24gPSBtb2RkbGUuY3JlYXRlKCdicG1uOkZvcm1hbEV4cHJlc3Npb24nLCB7IGJvZHk6ICcnIH0pO1xuXG4gICAgICAgICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7IGNvbmRpdGlvbkV4cHJlc3Npb246IGNvbmRpdGlvbkV4cHJlc3Npb24gfSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG5cbiAgICAgIC8vIGRlZmF1bHQgZmxvd3NcbiAgICAgIGlmIChpcyhidXNpbmVzc09iamVjdC5zb3VyY2VSZWYsICdicG1uOkFjdGl2aXR5JykgJiYgYnVzaW5lc3NPYmplY3QuY29uZGl0aW9uRXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gbWVudUVudHJpZXMucHVzaChzZWxmLl9jcmVhdGVNZW51RW50cnkoZW50cnksIGVsZW1lbnQsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgeyBjb25kaXRpb25FeHByZXNzaW9uOiB1bmRlZmluZWQgfSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgLy8gY29uZGl0aW9uYWwgZmxvd3NcbiAgICAgIGlmICgoaXMoYnVzaW5lc3NPYmplY3Quc291cmNlUmVmLCAnYnBtbjpFeGNsdXNpdmVHYXRld2F5JykgfHxcbiAgICAgICAgICAgaXMoYnVzaW5lc3NPYmplY3Quc291cmNlUmVmLCAnYnBtbjpJbmNsdXNpdmVHYXRld2F5JykgfHxcbiAgICAgICAgICAgaXMoYnVzaW5lc3NPYmplY3Quc291cmNlUmVmLCAnYnBtbjpDb21wbGV4R2F0ZXdheScpIHx8XG4gICAgICAgICAgIGlzKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiwgJ2JwbW46QWN0aXZpdHknKSkgJiZcbiAgICAgICAgICAgYnVzaW5lc3NPYmplY3Quc291cmNlUmVmLmRlZmF1bHQgPT09IGJ1c2luZXNzT2JqZWN0KSB7XG5cbiAgICAgICAgcmV0dXJuIG1lbnVFbnRyaWVzLnB1c2goc2VsZi5fY3JlYXRlTWVudUVudHJ5KGVudHJ5LCBlbGVtZW50LCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQuc291cmNlLCB7IGRlZmF1bHQ6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG1lbnVFbnRyaWVzO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBzaW5nbGUgbWVudSBlbnRyeSBpdGVtLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gZGVmaW5pdGlvbiBhIHNpbmdsZSByZXBsYWNlIG9wdGlvbnMgZGVmaW5pdGlvbiBvYmplY3RcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gW2FjdGlvbl0gYW4gYWN0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIGdldHMgY2FsbGVkIHdoZW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWVudSBlbnRyeSBpcyBiZWluZyB0cmlnZ2VyZWQuXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBtZW51IGVudHJ5IGl0ZW1cbiAqL1xuUmVwbGFjZU1lbnVQcm92aWRlci5wcm90b3R5cGUuX2NyZWF0ZU1lbnVFbnRyeSA9IGZ1bmN0aW9uKGRlZmluaXRpb24sIGVsZW1lbnQsIGFjdGlvbikge1xuICB2YXIgdHJhbnNsYXRlID0gdGhpcy5fdHJhbnNsYXRlO1xuICB2YXIgcmVwbGFjZUVsZW1lbnQgPSB0aGlzLl9icG1uUmVwbGFjZS5yZXBsYWNlRWxlbWVudDtcblxuICB2YXIgcmVwbGFjZUFjdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiByZXBsYWNlRWxlbWVudChlbGVtZW50LCBkZWZpbml0aW9uLnRhcmdldCk7XG4gIH07XG5cbiAgYWN0aW9uID0gYWN0aW9uIHx8IHJlcGxhY2VBY3Rpb247XG5cbiAgdmFyIG1lbnVFbnRyeSA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKGRlZmluaXRpb24ubGFiZWwpLFxuICAgIGNsYXNzTmFtZTogZGVmaW5pdGlvbi5jbGFzc05hbWUsXG4gICAgaWQ6IGRlZmluaXRpb24uYWN0aW9uTmFtZSxcbiAgICBhY3Rpb246IGFjdGlvblxuICB9O1xuXG4gIHJldHVybiBtZW51RW50cnk7XG59O1xuXG4vKipcbiAqIEdldCBhIGxpc3Qgb2YgbWVudSBpdGVtcyBjb250YWluaW5nIGJ1dHRvbnMgZm9yIG11bHRpIGluc3RhbmNlIG1hcmtlcnNcbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge0FycmF5PE9iamVjdD59IGEgbGlzdCBvZiBtZW51IGl0ZW1zXG4gKi9cblJlcGxhY2VNZW51UHJvdmlkZXIucHJvdG90eXBlLl9nZXRMb29wRW50cmllcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciB0cmFuc2xhdGUgPSB0aGlzLl90cmFuc2xhdGU7XG5cbiAgZnVuY3Rpb24gdG9nZ2xlTG9vcEVudHJ5KGV2ZW50LCBlbnRyeSkge1xuICAgIHZhciBsb29wQ2hhcmFjdGVyaXN0aWNzO1xuXG4gICAgaWYgKGVudHJ5LmFjdGl2ZSkge1xuICAgICAgbG9vcENoYXJhY3RlcmlzdGljcyA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9vcENoYXJhY3RlcmlzdGljcyA9IHNlbGYuX21vZGRsZS5jcmVhdGUoZW50cnkub3B0aW9ucy5sb29wQ2hhcmFjdGVyaXN0aWNzKTtcblxuICAgICAgaWYgKGVudHJ5Lm9wdGlvbnMuaXNTZXF1ZW50aWFsKSB7XG4gICAgICAgIGxvb3BDaGFyYWN0ZXJpc3RpY3MuaXNTZXF1ZW50aWFsID0gZW50cnkub3B0aW9ucy5pc1NlcXVlbnRpYWw7XG4gICAgICB9XG4gICAgfVxuICAgIHNlbGYuX21vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgeyBsb29wQ2hhcmFjdGVyaXN0aWNzOiBsb29wQ2hhcmFjdGVyaXN0aWNzIH0pO1xuICB9XG5cbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXG4gICAgICBsb29wQ2hhcmFjdGVyaXN0aWNzID0gYnVzaW5lc3NPYmplY3QubG9vcENoYXJhY3RlcmlzdGljcztcblxuICB2YXIgaXNTZXF1ZW50aWFsLFxuICAgICAgaXNMb29wLFxuICAgICAgaXNQYXJhbGxlbDtcblxuICBpZiAobG9vcENoYXJhY3RlcmlzdGljcykge1xuICAgIGlzU2VxdWVudGlhbCA9IGxvb3BDaGFyYWN0ZXJpc3RpY3MuaXNTZXF1ZW50aWFsO1xuICAgIGlzTG9vcCA9IGxvb3BDaGFyYWN0ZXJpc3RpY3MuaXNTZXF1ZW50aWFsID09PSB1bmRlZmluZWQ7XG4gICAgaXNQYXJhbGxlbCA9IGxvb3BDaGFyYWN0ZXJpc3RpY3MuaXNTZXF1ZW50aWFsICE9PSB1bmRlZmluZWQgJiYgIWxvb3BDaGFyYWN0ZXJpc3RpY3MuaXNTZXF1ZW50aWFsO1xuICB9XG5cblxuICB2YXIgbG9vcEVudHJpZXMgPSBbXG4gICAge1xuICAgICAgaWQ6ICd0b2dnbGUtcGFyYWxsZWwtbWknLFxuICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXBhcmFsbGVsLW1pLW1hcmtlcicsXG4gICAgICB0aXRsZTogdHJhbnNsYXRlKCdQYXJhbGxlbCBNdWx0aSBJbnN0YW5jZScpLFxuICAgICAgYWN0aXZlOiBpc1BhcmFsbGVsLFxuICAgICAgYWN0aW9uOiB0b2dnbGVMb29wRW50cnksXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGxvb3BDaGFyYWN0ZXJpc3RpY3M6ICdicG1uOk11bHRpSW5zdGFuY2VMb29wQ2hhcmFjdGVyaXN0aWNzJyxcbiAgICAgICAgaXNTZXF1ZW50aWFsOiBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICd0b2dnbGUtc2VxdWVudGlhbC1taScsXG4gICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc2VxdWVudGlhbC1taS1tYXJrZXInLFxuICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnU2VxdWVudGlhbCBNdWx0aSBJbnN0YW5jZScpLFxuICAgICAgYWN0aXZlOiBpc1NlcXVlbnRpYWwsXG4gICAgICBhY3Rpb246IHRvZ2dsZUxvb3BFbnRyeSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgbG9vcENoYXJhY3RlcmlzdGljczogJ2JwbW46TXVsdGlJbnN0YW5jZUxvb3BDaGFyYWN0ZXJpc3RpY3MnLFxuICAgICAgICBpc1NlcXVlbnRpYWw6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAndG9nZ2xlLWxvb3AnLFxuICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWxvb3AtbWFya2VyJyxcbiAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0xvb3AnKSxcbiAgICAgIGFjdGl2ZTogaXNMb29wLFxuICAgICAgYWN0aW9uOiB0b2dnbGVMb29wRW50cnksXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGxvb3BDaGFyYWN0ZXJpc3RpY3M6ICdicG1uOlN0YW5kYXJkTG9vcENoYXJhY3RlcmlzdGljcydcbiAgICAgIH1cbiAgICB9XG4gIF07XG4gIHJldHVybiBsb29wRW50cmllcztcbn07XG5cblxuLyoqXG4gKiBHZXQgdGhlIG1lbnUgaXRlbXMgY29udGFpbmluZyBhIGJ1dHRvbiBmb3IgdGhlIGFkIGhvYyBtYXJrZXJcbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gYSBtZW51IGl0ZW1cbiAqL1xuUmVwbGFjZU1lbnVQcm92aWRlci5wcm90b3R5cGUuX2dldEFkSG9jRW50cnkgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHZhciB0cmFuc2xhdGUgPSB0aGlzLl90cmFuc2xhdGU7XG4gIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIHZhciBpc0FkSG9jID0gaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkFkSG9jU3ViUHJvY2VzcycpO1xuXG4gIHZhciByZXBsYWNlRWxlbWVudCA9IHRoaXMuX2JwbW5SZXBsYWNlLnJlcGxhY2VFbGVtZW50O1xuXG4gIHZhciBhZEhvY0VudHJ5ID0ge1xuICAgIGlkOiAndG9nZ2xlLWFkaG9jJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tYWQtaG9jLW1hcmtlcicsXG4gICAgdGl0bGU6IHRyYW5zbGF0ZSgnQWQtaG9jJyksXG4gICAgYWN0aXZlOiBpc0FkSG9jLFxuICAgIGFjdGlvbjogZnVuY3Rpb24oZXZlbnQsIGVudHJ5KSB7XG4gICAgICBpZiAoaXNBZEhvYykge1xuICAgICAgICByZXR1cm4gcmVwbGFjZUVsZW1lbnQoZWxlbWVudCwgeyB0eXBlOiAnYnBtbjpTdWJQcm9jZXNzJyB9LCB7XG4gICAgICAgICAgYXV0b1Jlc2l6ZTogZmFsc2UsXG4gICAgICAgICAgbGF5b3V0Q29ubmVjdGlvbjogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVwbGFjZUVsZW1lbnQoZWxlbWVudCwgeyB0eXBlOiAnYnBtbjpBZEhvY1N1YlByb2Nlc3MnIH0sIHtcbiAgICAgICAgICBhdXRvUmVzaXplOiBmYWxzZSxcbiAgICAgICAgICBsYXlvdXRDb25uZWN0aW9uOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGFkSG9jRW50cnk7XG59O1xuIiwiaW1wb3J0IFBvcHVwTWVudU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wb3B1cC1tZW51JztcbmltcG9ydCBSZXBsYWNlTW9kdWxlIGZyb20gJy4uL3JlcGxhY2UnO1xuXG5pbXBvcnQgUmVwbGFjZU1lbnVQcm92aWRlciBmcm9tICcuL1JlcGxhY2VNZW51UHJvdmlkZXInO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBQb3B1cE1lbnVNb2R1bGUsXG4gICAgUmVwbGFjZU1vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAncmVwbGFjZU1lbnVQcm92aWRlcicgXSxcbiAgcmVwbGFjZU1lbnVQcm92aWRlcjogWyAndHlwZScsIFJlcGxhY2VNZW51UHJvdmlkZXIgXVxufTsiLCJpbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdFxufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzRXhwYW5kZWRcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9EaVV0aWwnO1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlLCBpZiBhbiBlbGVtZW50IGlzIGZyb20gYSBkaWZmZXJlbnQgdHlwZVxuICogdGhhbiBhIHRhcmdldCBkZWZpbml0aW9uLiBUYWtlcyBpbnRvIGFjY291bnQgdGhlIHR5cGUsXG4gKiBldmVudCBkZWZpbml0aW9uIHR5cGUgYW5kIHRyaWdnZXJlZEJ5RXZlbnQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RpZmZlcmVudFR5cGUoZWxlbWVudCkge1xuXG4gIHJldHVybiBmdW5jdGlvbihlbnRyeSkge1xuICAgIHZhciB0YXJnZXQgPSBlbnRyeS50YXJnZXQ7XG5cbiAgICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICAgICAgZXZlbnREZWZpbml0aW9uID0gYnVzaW5lc3NPYmplY3QuZXZlbnREZWZpbml0aW9ucyAmJiBidXNpbmVzc09iamVjdC5ldmVudERlZmluaXRpb25zWzBdO1xuXG4gICAgdmFyIGlzVHlwZUVxdWFsID0gYnVzaW5lc3NPYmplY3QuJHR5cGUgPT09IHRhcmdldC50eXBlO1xuXG4gICAgdmFyIGlzRXZlbnREZWZpbml0aW9uRXF1YWwgPSAoXG4gICAgICAoZXZlbnREZWZpbml0aW9uICYmIGV2ZW50RGVmaW5pdGlvbi4kdHlwZSkgPT09IHRhcmdldC5ldmVudERlZmluaXRpb25UeXBlXG4gICAgKTtcblxuICAgIHZhciBpc1RyaWdnZXJlZEJ5RXZlbnRFcXVhbCA9IChcbiAgICAgIGJ1c2luZXNzT2JqZWN0LnRyaWdnZXJlZEJ5RXZlbnQgPT09IHRhcmdldC50cmlnZ2VyZWRCeUV2ZW50XG4gICAgKTtcblxuICAgIHZhciBpc0V4cGFuZGVkRXF1YWwgPSAoXG4gICAgICB0YXJnZXQuaXNFeHBhbmRlZCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0YXJnZXQuaXNFeHBhbmRlZCA9PT0gaXNFeHBhbmRlZChidXNpbmVzc09iamVjdClcbiAgICApO1xuXG4gICAgcmV0dXJuICFpc1R5cGVFcXVhbCB8fCAhaXNFdmVudERlZmluaXRpb25FcXVhbCB8fCAhaXNUcmlnZ2VyZWRCeUV2ZW50RXF1YWwgfHwgIWlzRXhwYW5kZWRFcXVhbDtcbiAgfTtcbn0iLCJpbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IGNzc0VzY2FwZSBmcm9tICdjc3MuZXNjYXBlJztcblxuaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgcXVlcnkgYXMgZG9tUXVlcnlcbn0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7XG4gIGF0dHIgYXMgc3ZnQXR0clxufSBmcm9tICd0aW55LXN2Zyc7XG5cbnZhciBMT1dfUFJJT1JJVFkgPSAyNTA7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtblJlcGxhY2VQcmV2aWV3KFxuICAgIGV2ZW50QnVzLCBlbGVtZW50UmVnaXN0cnksIGVsZW1lbnRGYWN0b3J5LFxuICAgIGNhbnZhcywgcHJldmlld1N1cHBvcnQpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgdGhlIHZpc3VhbHMgb2YgYWxsIGVsZW1lbnRzIGluIHRoZSBjb250ZXh0IHdoaWNoIGNhbiBiZSByZXBsYWNlZFxuICAgKlxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGNvbnRleHRcbiAgICovXG4gIGZ1bmN0aW9uIHJlcGxhY2VWaXN1YWwoY29udGV4dCkge1xuXG4gICAgdmFyIHJlcGxhY2VtZW50cyA9IGNvbnRleHQuY2FuRXhlY3V0ZS5yZXBsYWNlbWVudHM7XG5cbiAgICBmb3JFYWNoKHJlcGxhY2VtZW50cywgZnVuY3Rpb24ocmVwbGFjZW1lbnQpIHtcblxuICAgICAgdmFyIGlkID0gcmVwbGFjZW1lbnQub2xkRWxlbWVudElkO1xuXG4gICAgICB2YXIgbmV3RWxlbWVudCA9IHtcbiAgICAgICAgdHlwZTogcmVwbGFjZW1lbnQubmV3RWxlbWVudFR5cGVcbiAgICAgIH07XG5cbiAgICAgIC8vIGlmIHRoZSB2aXN1YWwgb2YgdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSByZXBsYWNlZFxuICAgICAgaWYgKGNvbnRleHQudmlzdWFsUmVwbGFjZW1lbnRzW2lkXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBlbGVtZW50ID0gZWxlbWVudFJlZ2lzdHJ5LmdldChpZCk7XG5cbiAgICAgIGFzc2lnbihuZXdFbGVtZW50LCB7IHg6IGVsZW1lbnQueCwgeTogZWxlbWVudC55IH0pO1xuXG4gICAgICAvLyBjcmVhdGUgYSB0ZW1wb3Jhcnkgc2hhcGVcbiAgICAgIHZhciB0ZW1wU2hhcGUgPSBlbGVtZW50RmFjdG9yeS5jcmVhdGVTaGFwZShuZXdFbGVtZW50KTtcblxuICAgICAgY2FudmFzLmFkZFNoYXBlKHRlbXBTaGFwZSwgZWxlbWVudC5wYXJlbnQpO1xuXG4gICAgICAvLyBzZWxlY3QgdGhlIG9yaWdpbmFsIFNWRyBlbGVtZW50IHJlbGF0ZWQgdG8gdGhlIGVsZW1lbnQgYW5kIGhpZGUgaXRcbiAgICAgIHZhciBnZnggPSBkb21RdWVyeSgnW2RhdGEtZWxlbWVudC1pZD1cIicgKyBjc3NFc2NhcGUoZWxlbWVudC5pZCkgKyAnXCJdJywgY29udGV4dC5kcmFnR3JvdXApO1xuXG4gICAgICBpZiAoZ2Z4KSB7XG4gICAgICAgIHN2Z0F0dHIoZ2Z4LCB7IGRpc3BsYXk6ICdub25lJyB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gY2xvbmUgdGhlIGdmeCBvZiB0aGUgdGVtcG9yYXJ5IHNoYXBlIGFuZCBhZGQgaXQgdG8gdGhlIGRyYWcgZ3JvdXBcbiAgICAgIHZhciBkcmFnZ2VyID0gcHJldmlld1N1cHBvcnQuYWRkRHJhZ2dlcih0ZW1wU2hhcGUsIGNvbnRleHQuZHJhZ0dyb3VwKTtcblxuICAgICAgY29udGV4dC52aXN1YWxSZXBsYWNlbWVudHNbaWRdID0gZHJhZ2dlcjtcblxuICAgICAgY2FudmFzLnJlbW92ZVNoYXBlKHRlbXBTaGFwZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZSB0aGUgb3JpZ2luYWwgdmlzdWFscyBvZiB0aGUgcHJldmlvdXNseSByZXBsYWNlZCBlbGVtZW50c1xuICAgKlxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGNvbnRleHRcbiAgICovXG4gIGZ1bmN0aW9uIHJlc3RvcmVWaXN1YWwoY29udGV4dCkge1xuXG4gICAgdmFyIHZpc3VhbFJlcGxhY2VtZW50cyA9IGNvbnRleHQudmlzdWFsUmVwbGFjZW1lbnRzO1xuXG4gICAgZm9yRWFjaCh2aXN1YWxSZXBsYWNlbWVudHMsIGZ1bmN0aW9uKGRyYWdnZXIsIGlkKSB7XG5cbiAgICAgIHZhciBvcmlnaW5hbEdmeCA9IGRvbVF1ZXJ5KCdbZGF0YS1lbGVtZW50LWlkPVwiJyArIGNzc0VzY2FwZShpZCkgKyAnXCJdJywgY29udGV4dC5kcmFnR3JvdXApO1xuXG4gICAgICBpZiAob3JpZ2luYWxHZngpIHtcbiAgICAgICAgc3ZnQXR0cihvcmlnaW5hbEdmeCwgeyBkaXNwbGF5OiAnaW5saW5lJyB9KTtcbiAgICAgIH1cblxuICAgICAgZHJhZ2dlci5yZW1vdmUoKTtcblxuICAgICAgaWYgKHZpc3VhbFJlcGxhY2VtZW50c1tpZF0pIHtcbiAgICAgICAgZGVsZXRlIHZpc3VhbFJlcGxhY2VtZW50c1tpZF07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBldmVudEJ1cy5vbignc2hhcGUubW92ZS5tb3ZlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlO1xuXG4gICAgaWYgKCFjb250ZXh0LnZpc3VhbFJlcGxhY2VtZW50cykge1xuICAgICAgY29udGV4dC52aXN1YWxSZXBsYWNlbWVudHMgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAoY2FuRXhlY3V0ZSAmJiBjYW5FeGVjdXRlLnJlcGxhY2VtZW50cykge1xuICAgICAgcmVwbGFjZVZpc3VhbChjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdG9yZVZpc3VhbChjb250ZXh0KTtcbiAgICB9XG4gIH0pO1xufVxuXG5CcG1uUmVwbGFjZVByZXZpZXcuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdlbGVtZW50RmFjdG9yeScsXG4gICdjYW52YXMnLFxuICAncHJldmlld1N1cHBvcnQnXG5dO1xuXG5pbmhlcml0cyhCcG1uUmVwbGFjZVByZXZpZXcsIENvbW1hbmRJbnRlcmNlcHRvcik7IiwiaW1wb3J0IFByZXZpZXdTdXBwb3J0TW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3ByZXZpZXctc3VwcG9ydCc7XG5cbmltcG9ydCBCcG1uUmVwbGFjZVByZXZpZXcgZnJvbSAnLi9CcG1uUmVwbGFjZVByZXZpZXcnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgUHJldmlld1N1cHBvcnRNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFsgJ2JwbW5SZXBsYWNlUHJldmlldycgXSxcbiAgYnBtblJlcGxhY2VQcmV2aWV3OiBbICd0eXBlJywgQnBtblJlcGxhY2VQcmV2aWV3IF1cbn07XG4iLCJpbXBvcnQge1xuICBwaWNrLFxuICBhc3NpZ24sXG4gIGZpbHRlcixcbiAgZm9yRWFjaCxcbiAgaXNBcnJheSxcbiAgaXNVbmRlZmluZWQsXG4gIGhhc1xufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGlzLFxuICBnZXRCdXNpbmVzc09iamVjdFxufSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzQW55XG59IGZyb20gJy4uL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNFeHBhbmRlZCxcbiAgaXNFdmVudFN1YlByb2Nlc3Ncbn0gZnJvbSAnLi4vLi4vdXRpbC9EaVV0aWwnO1xuXG5pbXBvcnQgeyBnZXRQcm9wZXJ0eU5hbWVzIH0gZnJvbSAnLi4vY29weS1wYXN0ZS9Nb2RkbGVDb3B5JztcblxuZnVuY3Rpb24gY29weVByb3BlcnRpZXMoc291cmNlLCB0YXJnZXQsIHByb3BlcnRpZXMpIHtcbiAgaWYgKCFpc0FycmF5KHByb3BlcnRpZXMpKSB7XG4gICAgcHJvcGVydGllcyA9IFsgcHJvcGVydGllcyBdO1xuICB9XG5cbiAgZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihwcm9wZXJ0eSkge1xuICAgIGlmICghaXNVbmRlZmluZWQoc291cmNlW3Byb3BlcnR5XSkpIHtcbiAgICAgIHRhcmdldFtwcm9wZXJ0eV0gPSBzb3VyY2VbcHJvcGVydHldO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBDVVNUT01fUFJPUEVSVElFUyA9IFtcbiAgJ2NhbmNlbEFjdGl2aXR5JyxcbiAgJ2luc3RhbnRpYXRlJyxcbiAgJ2V2ZW50R2F0ZXdheVR5cGUnLFxuICAndHJpZ2dlcmVkQnlFdmVudCcsXG4gICdpc0ludGVycnVwdGluZydcbl07XG5cblxuZnVuY3Rpb24gdG9nZ2VsaW5nKGVsZW1lbnQsIHRhcmdldCkge1xuXG4gIHZhciBvbGRDb2xsYXBzZWQgPSAoXG4gICAgZWxlbWVudCAmJiBoYXMoZWxlbWVudCwgJ2NvbGxhcHNlZCcpID8gZWxlbWVudC5jb2xsYXBzZWQgOiAhaXNFeHBhbmRlZChlbGVtZW50KVxuICApO1xuXG4gIHZhciB0YXJnZXRDb2xsYXBzZWQ7XG5cbiAgaWYgKHRhcmdldCAmJiAoaGFzKHRhcmdldCwgJ2NvbGxhcHNlZCcpIHx8IGhhcyh0YXJnZXQsICdpc0V4cGFuZGVkJykpKSB7XG5cbiAgICAvLyBwcm9wZXJ0eSBpcyBleHBsaWNpdGx5IHNldCBzbyB1c2UgaXRcbiAgICB0YXJnZXRDb2xsYXBzZWQgPSAoXG4gICAgICBoYXModGFyZ2V0LCAnY29sbGFwc2VkJykgPyB0YXJnZXQuY29sbGFwc2VkIDogIXRhcmdldC5pc0V4cGFuZGVkXG4gICAgKTtcbiAgfSBlbHNlIHtcblxuICAgIC8vIGtlZXAgb2xkIHN0YXRlXG4gICAgdGFyZ2V0Q29sbGFwc2VkID0gb2xkQ29sbGFwc2VkO1xuICB9XG5cbiAgaWYgKG9sZENvbGxhcHNlZCAhPT0gdGFyZ2V0Q29sbGFwc2VkKSB7XG4gICAgZWxlbWVudC5jb2xsYXBzZWQgPSBvbGRDb2xsYXBzZWQ7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cblxuXG4vKipcbiAqIFRoaXMgbW9kdWxlIHRha2VzIGNhcmUgb2YgcmVwbGFjaW5nIEJQTU4gZWxlbWVudHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtblJlcGxhY2UoXG4gICAgYnBtbkZhY3RvcnksXG4gICAgZWxlbWVudEZhY3RvcnksXG4gICAgbW9kZGxlQ29weSxcbiAgICBtb2RlbGluZyxcbiAgICByZXBsYWNlLFxuICAgIHNlbGVjdGlvblxuKSB7XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGEgbmV3IGJ1c2luZXNzIG9iamVjdCBmb3IgdGhlIHJlcGxhY2VtZW50IGVsZW1lbnRcbiAgICogYW5kIHRyaWdnZXJzIHRoZSByZXBsYWNlIG9wZXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcbiAgICogQHBhcmFtICB7T2JqZWN0fSBbaGludHNdXG4gICAqXG4gICAqIEByZXR1cm4ge2Rqcy5tb2RlbC5CYXNlfSB0aGUgbmV3bHkgY3JlYXRlZCBlbGVtZW50XG4gICAqL1xuICBmdW5jdGlvbiByZXBsYWNlRWxlbWVudChlbGVtZW50LCB0YXJnZXQsIGhpbnRzKSB7XG5cbiAgICBoaW50cyA9IGhpbnRzIHx8IHt9O1xuXG4gICAgdmFyIHR5cGUgPSB0YXJnZXQudHlwZSxcbiAgICAgICAgb2xkQnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0O1xuXG4gICAgaWYgKGlzU3ViUHJvY2VzcyhvbGRCdXNpbmVzc09iamVjdCkpIHtcbiAgICAgIGlmICh0eXBlID09PSAnYnBtbjpTdWJQcm9jZXNzJykge1xuICAgICAgICBpZiAodG9nZ2VsaW5nKGVsZW1lbnQsIHRhcmdldCkpIHtcblxuICAgICAgICAgIC8vIGV4cGFuZGluZyBvciBjb2xsYXBzaW5nIHByb2Nlc3NcbiAgICAgICAgICBtb2RlbGluZy50b2dnbGVDb2xsYXBzZShlbGVtZW50KTtcblxuICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG5ld0J1c2luZXNzT2JqZWN0ID0gYnBtbkZhY3RvcnkuY3JlYXRlKHR5cGUpO1xuXG4gICAgdmFyIG5ld0VsZW1lbnQgPSB7XG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgYnVzaW5lc3NPYmplY3Q6IG5ld0J1c2luZXNzT2JqZWN0XG4gICAgfTtcblxuICAgIHZhciBlbGVtZW50UHJvcHMgPSBnZXRQcm9wZXJ0eU5hbWVzKG9sZEJ1c2luZXNzT2JqZWN0LiRkZXNjcmlwdG9yKSxcbiAgICAgICAgbmV3RWxlbWVudFByb3BzID0gZ2V0UHJvcGVydHlOYW1lcyhuZXdCdXNpbmVzc09iamVjdC4kZGVzY3JpcHRvciwgdHJ1ZSksXG4gICAgICAgIGNvcHlQcm9wcyA9IGludGVyc2VjdGlvbihlbGVtZW50UHJvcHMsIG5ld0VsZW1lbnRQcm9wcyk7XG5cbiAgICAvLyBpbml0aWFsaXplIHNwZWNpYWwgcHJvcGVydGllcyBkZWZpbmVkIGluIHRhcmdldCBkZWZpbml0aW9uXG4gICAgYXNzaWduKG5ld0J1c2luZXNzT2JqZWN0LCBwaWNrKHRhcmdldCwgQ1VTVE9NX1BST1BFUlRJRVMpKTtcblxuICAgIHZhciBwcm9wZXJ0aWVzID0gZmlsdGVyKGNvcHlQcm9wcywgZnVuY3Rpb24ocHJvcGVydHlOYW1lKSB7XG5cbiAgICAgIC8vIGNvcHlpbmcgZXZlbnQgZGVmaW5pdGlvbnMsIHVubGVzcyB3ZSByZXBsYWNlXG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAnZXZlbnREZWZpbml0aW9ucycpIHtcbiAgICAgICAgcmV0dXJuIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCB0YXJnZXQuZXZlbnREZWZpbml0aW9uVHlwZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHJldGFpbiBsb29wIGNoYXJhY3RlcmlzdGljcyBpZiB0aGUgdGFyZ2V0IGVsZW1lbnRcbiAgICAgIC8vIGlzIG5vdCBhbiBldmVudCBzdWIgcHJvY2Vzc1xuICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gJ2xvb3BDaGFyYWN0ZXJpc3RpY3MnKSB7XG4gICAgICAgIHJldHVybiAhaXNFdmVudFN1YlByb2Nlc3MobmV3QnVzaW5lc3NPYmplY3QpO1xuICAgICAgfVxuXG4gICAgICAvLyBzbyB0aGUgYXBwbGllZCBwcm9wZXJ0aWVzIGZyb20gJ3RhcmdldCcgZG9uJ3QgZ2V0IGxvc3RcbiAgICAgIGlmIChuZXdCdXNpbmVzc09iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gJ3Byb2Nlc3NSZWYnICYmIHRhcmdldC5pc0V4cGFuZGVkID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09ICd0cmlnZ2VyZWRCeUV2ZW50Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgbmV3QnVzaW5lc3NPYmplY3QgPSBtb2RkbGVDb3B5LmNvcHlFbGVtZW50KFxuICAgICAgb2xkQnVzaW5lc3NPYmplY3QsXG4gICAgICBuZXdCdXNpbmVzc09iamVjdCxcbiAgICAgIHByb3BlcnRpZXNcbiAgICApO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSBjdXN0b20gQlBNTiBleHRlbnNpb25zXG4gICAgaWYgKHRhcmdldC5ldmVudERlZmluaXRpb25UeXBlKSB7XG5cbiAgICAgIC8vIG9ubHkgaW5pdGlhbGl6ZSB3aXRoIG5ldyBldmVudERlZmluaXRpb25cbiAgICAgIC8vIGlmIHdlIGRpZCBub3Qgc2V0IGFuIGV2ZW50IGRlZmluaXRpb24geWV0LFxuICAgICAgLy8gaS5lLiBiZWNhdXNlIHdlIGNvcGllZCBpdFxuICAgICAgaWYgKCFoYXNFdmVudERlZmluaXRpb24obmV3QnVzaW5lc3NPYmplY3QsIHRhcmdldC5ldmVudERlZmluaXRpb25UeXBlKSkge1xuICAgICAgICBuZXdFbGVtZW50LmV2ZW50RGVmaW5pdGlvblR5cGUgPSB0YXJnZXQuZXZlbnREZWZpbml0aW9uVHlwZTtcbiAgICAgICAgbmV3RWxlbWVudC5ldmVudERlZmluaXRpb25BdHRycyA9IHRhcmdldC5ldmVudERlZmluaXRpb25BdHRycztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXMob2xkQnVzaW5lc3NPYmplY3QsICdicG1uOkFjdGl2aXR5JykpIHtcblxuICAgICAgaWYgKGlzU3ViUHJvY2VzcyhvbGRCdXNpbmVzc09iamVjdCkpIHtcblxuICAgICAgICAvLyBubyB0b2dnZWxpbmcsIHNvIGtlZXAgb2xkIHN0YXRlXG4gICAgICAgIG5ld0VsZW1lbnQuaXNFeHBhbmRlZCA9IGlzRXhwYW5kZWQob2xkQnVzaW5lc3NPYmplY3QpO1xuICAgICAgfVxuXG4gICAgICAvLyBlbHNlIGlmIHByb3BlcnR5IGlzIGV4cGxpY2l0bHkgc2V0LCB1c2UgaXRcbiAgICAgIGVsc2UgaWYgKHRhcmdldCAmJiBoYXModGFyZ2V0LCAnaXNFeHBhbmRlZCcpKSB7XG4gICAgICAgIG5ld0VsZW1lbnQuaXNFeHBhbmRlZCA9IHRhcmdldC5pc0V4cGFuZGVkO1xuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBuZWVkIGFsc28gdG8gcmVzcGVjdCBtaW4vbWF4IFNpemVcbiAgICAgIC8vIGNvcHkgc2l6ZSwgZnJvbSBhbiBleHBhbmRlZCBzdWJwcm9jZXNzIHRvIGFuIGV4cGFuZGVkIGFsdGVybmF0aXZlIHN1YnByb2Nlc3NcbiAgICAgIC8vIGV4Y2VwdCBicG1uOlRhc2ssIGJlY2F1c2UgVGFzayBpcyBhbHdheXMgZXhwYW5kZWRcbiAgICAgIGlmICgoaXNFeHBhbmRlZChvbGRCdXNpbmVzc09iamVjdCkgJiYgIWlzKG9sZEJ1c2luZXNzT2JqZWN0LCAnYnBtbjpUYXNrJykpICYmIG5ld0VsZW1lbnQuaXNFeHBhbmRlZCkge1xuICAgICAgICBuZXdFbGVtZW50LndpZHRoID0gZWxlbWVudC53aWR0aDtcbiAgICAgICAgbmV3RWxlbWVudC5oZWlnaHQgPSBlbGVtZW50LmhlaWdodDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZW1vdmUgY2hpbGRyZW4gaWYgbm90IGV4cGFuZGluZyBzdWIgcHJvY2Vzc1xuICAgIGlmIChpc1N1YlByb2Nlc3Mob2xkQnVzaW5lc3NPYmplY3QpICYmICFpc1N1YlByb2Nlc3MobmV3QnVzaW5lc3NPYmplY3QpKSB7XG4gICAgICBoaW50cy5tb3ZlQ2hpbGRyZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyB0cmFuc2Zvcm0gY29sbGFwc2VkL2V4cGFuZGVkIHBvb2xzXG4gICAgaWYgKGlzKG9sZEJ1c2luZXNzT2JqZWN0LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG5cbiAgICAgIC8vIGNyZWF0ZSBleHBhbmRlZCBwb29sXG4gICAgICBpZiAodGFyZ2V0LmlzRXhwYW5kZWQgPT09IHRydWUpIHtcbiAgICAgICAgbmV3QnVzaW5lc3NPYmplY3QucHJvY2Vzc1JlZiA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpQcm9jZXNzJyk7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIC8vIHJlbW92ZSBjaGlsZHJlbiB3aGVuIHRyYW5zZm9ybWluZyB0byBjb2xsYXBzZWQgcG9vbFxuICAgICAgICBoaW50cy5tb3ZlQ2hpbGRyZW4gPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gYXBwbHkgc2FtZSB3aWR0aCBhbmQgZGVmYXVsdCBoZWlnaHRcbiAgICAgIG5ld0VsZW1lbnQud2lkdGggPSBlbGVtZW50LndpZHRoO1xuICAgICAgbmV3RWxlbWVudC5oZWlnaHQgPSBlbGVtZW50RmFjdG9yeS5fZ2V0RGVmYXVsdFNpemUobmV3QnVzaW5lc3NPYmplY3QpLmhlaWdodDtcbiAgICB9XG5cbiAgICBuZXdCdXNpbmVzc09iamVjdC5uYW1lID0gb2xkQnVzaW5lc3NPYmplY3QubmFtZTtcblxuICAgIC8vIHJldGFpbiBkZWZhdWx0IGZsb3cncyByZWZlcmVuY2UgYmV0d2VlbiBpbmNsdXNpdmUgPC0+IGV4Y2x1c2l2ZSBnYXRld2F5cyBhbmQgYWN0aXZpdGllc1xuICAgIGlmIChcbiAgICAgIGlzQW55KG9sZEJ1c2luZXNzT2JqZWN0LCBbXG4gICAgICAgICdicG1uOkV4Y2x1c2l2ZUdhdGV3YXknLFxuICAgICAgICAnYnBtbjpJbmNsdXNpdmVHYXRld2F5JyxcbiAgICAgICAgJ2JwbW46QWN0aXZpdHknXG4gICAgICBdKSAmJlxuICAgICAgaXNBbnkobmV3QnVzaW5lc3NPYmplY3QsIFtcbiAgICAgICAgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheScsXG4gICAgICAgICdicG1uOkluY2x1c2l2ZUdhdGV3YXknLFxuICAgICAgICAnYnBtbjpBY3Rpdml0eSdcbiAgICAgIF0pXG4gICAgKSB7XG4gICAgICBuZXdCdXNpbmVzc09iamVjdC5kZWZhdWx0ID0gb2xkQnVzaW5lc3NPYmplY3QuZGVmYXVsdDtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0YXJnZXQuaG9zdCAmJlxuICAgICAgIWlzKG9sZEJ1c2luZXNzT2JqZWN0LCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiZcbiAgICAgIGlzKG5ld0J1c2luZXNzT2JqZWN0LCAnYnBtbjpCb3VuZGFyeUV2ZW50JylcbiAgICApIHtcbiAgICAgIG5ld0VsZW1lbnQuaG9zdCA9IHRhcmdldC5ob3N0O1xuICAgIH1cblxuICAgIG5ld0VsZW1lbnQuZGkgPSB7fTtcblxuICAgIC8vIGZpbGwgYW5kIHN0cm9rZSB3aWxsIGJlIHNldCB0byBESVxuICAgIGNvcHlQcm9wZXJ0aWVzKG9sZEJ1c2luZXNzT2JqZWN0LmRpLCBuZXdFbGVtZW50LmRpLCBbXG4gICAgICAnZmlsbCcsXG4gICAgICAnc3Ryb2tlJ1xuICAgIF0pO1xuXG4gICAgbmV3RWxlbWVudCA9IHJlcGxhY2UucmVwbGFjZUVsZW1lbnQoZWxlbWVudCwgbmV3RWxlbWVudCwgaGludHMpO1xuXG4gICAgaWYgKGhpbnRzLnNlbGVjdCAhPT0gZmFsc2UpIHtcbiAgICAgIHNlbGVjdGlvbi5zZWxlY3QobmV3RWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0VsZW1lbnQ7XG4gIH1cblxuICB0aGlzLnJlcGxhY2VFbGVtZW50ID0gcmVwbGFjZUVsZW1lbnQ7XG59XG5cbkJwbW5SZXBsYWNlLiRpbmplY3QgPSBbXG4gICdicG1uRmFjdG9yeScsXG4gICdlbGVtZW50RmFjdG9yeScsXG4gICdtb2RkbGVDb3B5JyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3JlcGxhY2UnLFxuICAnc2VsZWN0aW9uJ1xuXTtcblxuXG5mdW5jdGlvbiBpc1N1YlByb2Nlc3MoYm8pIHtcbiAgcmV0dXJuIGlzKGJvLCAnYnBtbjpTdWJQcm9jZXNzJyk7XG59XG5cbmZ1bmN0aW9uIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCB0eXBlKSB7XG5cbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgcmV0dXJuIHR5cGUgJiYgYm8uZ2V0KCdldmVudERlZmluaXRpb25zJykuc29tZShmdW5jdGlvbihkZWZpbml0aW9uKSB7XG4gICAgcmV0dXJuIGlzKGRlZmluaXRpb24sIHR5cGUpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb21wdXRlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHR3byBhcnJheXMuXG4gKi9cbmZ1bmN0aW9uIGludGVyc2VjdGlvbihhMSwgYTIpIHtcbiAgcmV0dXJuIGExLmZpbHRlcihmdW5jdGlvbihlbCkge1xuICAgIHJldHVybiBhMi5pbmRleE9mKGVsKSAhPT0gLTE7XG4gIH0pO1xufVxuIiwiZXhwb3J0IHZhciBTVEFSVF9FVkVOVCA9IFtcbiAge1xuICAgIGxhYmVsOiAnU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW5vbmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0ludGVybWVkaWF0ZSBUaHJvdyBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub25lLWludGVybWVkaWF0ZS10aHJvd2luZycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFbmQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1lbmQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01lc3NhZ2UgU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbWVzc2FnZS1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW1lc3NhZ2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVGltZXIgU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdGltZXItc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29uZGl0aW9uYWwgU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29uZGl0aW9uYWwtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1jb25kaXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NpZ25hbCBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zaWduYWwtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1zaWduYWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIElOVEVSTUVESUFURV9FVkVOVCA9IFtcbiAge1xuICAgIGxhYmVsOiAnU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW5vbmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0ludGVybWVkaWF0ZSBUaHJvdyBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub25lLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFbmQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1lbmQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01lc3NhZ2UgSW50ZXJtZWRpYXRlIENhdGNoIEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW1lc3NhZ2UtaW50ZXJtZWRpYXRlLWNhdGNoJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLW1lc3NhZ2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTWVzc2FnZSBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbWVzc2FnZS1pbnRlcm1lZGlhdGUtdGhyb3cnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtdGhyb3ctbWVzc2FnZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdUaW1lciBJbnRlcm1lZGlhdGUgQ2F0Y2ggRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdGltZXItaW50ZXJtZWRpYXRlLWNhdGNoJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLXRpbWVyJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46VGltZXJFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFc2NhbGF0aW9uIEludGVybWVkaWF0ZSBUaHJvdyBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lc2NhbGF0aW9uLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC10aHJvdy1lc2NhbGF0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbmRpdGlvbmFsIEludGVybWVkaWF0ZSBDYXRjaCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb25kaXRpb25hbC1pbnRlcm1lZGlhdGUtY2F0Y2gnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtY29uZGl0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdMaW5rIEludGVybWVkaWF0ZSBDYXRjaCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1saW5rLWludGVybWVkaWF0ZS1jYXRjaCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1saW5rJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TGlua0V2ZW50RGVmaW5pdGlvbicsXG4gICAgICBldmVudERlZmluaXRpb25BdHRyczoge1xuICAgICAgICBuYW1lOiAnJ1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTGluayBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbGluay1pbnRlcm1lZGlhdGUtdGhyb3cnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtdGhyb3ctbGluaycsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nLFxuICAgICAgZXZlbnREZWZpbml0aW9uQXR0cnM6IHtcbiAgICAgICAgbmFtZTogJydcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbXBlbnNhdGlvbiBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29tcGVuc2F0aW9uLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC10aHJvdy1jb21wZW5zYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2lnbmFsIEludGVybWVkaWF0ZSBDYXRjaCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zaWduYWwtaW50ZXJtZWRpYXRlLWNhdGNoJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLXNpZ25hbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NpZ25hbCBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtc2lnbmFsLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC10aHJvdy1zaWduYWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIEVORF9FVkVOVCA9IFtcbiAge1xuICAgIGxhYmVsOiAnU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW5vbmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0ludGVybWVkaWF0ZSBUaHJvdyBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub25lLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFbmQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1lbmQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01lc3NhZ2UgRW5kIEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW1lc3NhZ2UtZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LW1lc3NhZ2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0VzY2FsYXRpb24gRW5kIEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWVzY2FsYXRpb24tZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LWVzY2FsYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0Vycm9yIEVuZCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lcnJvci1lbmQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtZXJyb3InLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXJyb3JFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDYW5jZWwgRW5kIEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWNhbmNlbC1lbmQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtY2FuY2VsJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkVuZEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNhbmNlbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbXBlbnNhdGlvbiBFbmQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29tcGVuc2F0aW9uLWVuZCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWVuZC1ldmVudC1jb21wZW5zYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NpZ25hbCBFbmQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtc2lnbmFsLWVuZCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWVuZC1ldmVudC1zaWduYWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVGVybWluYXRlIEVuZCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC10ZXJtaW5hdGUtZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LXRlcm1pbmF0ZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpUZXJtaW5hdGVFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIEdBVEVXQVkgPSBbXG4gIHtcbiAgICBsYWJlbDogJ0V4Y2x1c2l2ZSBHYXRld2F5JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWV4Y2x1c2l2ZS1nYXRld2F5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZ2F0ZXdheS14b3InLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RXhjbHVzaXZlR2F0ZXdheSdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1BhcmFsbGVsIEdhdGV3YXknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtcGFyYWxsZWwtZ2F0ZXdheScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWdhdGV3YXktcGFyYWxsZWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46UGFyYWxsZWxHYXRld2F5J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnSW5jbHVzaXZlIEdhdGV3YXknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtaW5jbHVzaXZlLWdhdGV3YXknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1nYXRld2F5LW9yJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkluY2x1c2l2ZUdhdGV3YXknXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb21wbGV4IEdhdGV3YXknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29tcGxleC1nYXRld2F5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZ2F0ZXdheS1jb21wbGV4JyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkNvbXBsZXhHYXRld2F5J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXZlbnQgYmFzZWQgR2F0ZXdheScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ldmVudC1iYXNlZC1nYXRld2F5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZ2F0ZXdheS1ldmVudGJhc2VkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkV2ZW50QmFzZWRHYXRld2F5JyxcbiAgICAgIGluc3RhbnRpYXRlOiBmYWxzZSxcbiAgICAgIGV2ZW50R2F0ZXdheVR5cGU6ICdFeGNsdXNpdmUnXG4gICAgfVxuICB9XG5cbiAgLy8gR2F0ZXdheXMgZGVhY3RpdmF0ZWQgdW50aWwgaHR0cHM6Ly9naXRodWIuY29tL2JwbW4taW8vYnBtbi1qcy9pc3N1ZXMvMTk0XG4gIC8vIHtcbiAgLy8gICBsYWJlbDogJ0V2ZW50IGJhc2VkIGluc3RhbnRpYXRpbmcgR2F0ZXdheScsXG4gIC8vICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1leGNsdXNpdmUtZXZlbnQtYmFzZWQtZ2F0ZXdheScsXG4gIC8vICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWV4Y2x1c2l2ZS1ldmVudC1iYXNlZCcsXG4gIC8vICAgdGFyZ2V0OiB7XG4gIC8vICAgICB0eXBlOiAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheSdcbiAgLy8gICB9LFxuICAvLyAgIG9wdGlvbnM6IHtcbiAgLy8gICAgIGJ1c2luZXNzT2JqZWN0OiB7IGluc3RhbnRpYXRlOiB0cnVlLCBldmVudEdhdGV3YXlUeXBlOiAnRXhjbHVzaXZlJyB9XG4gIC8vICAgfVxuICAvLyB9LFxuICAvLyB7XG4gIC8vICAgbGFiZWw6ICdQYXJhbGxlbCBFdmVudCBiYXNlZCBpbnN0YW50aWF0aW5nIEdhdGV3YXknLFxuICAvLyAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtcGFyYWxsZWwtZXZlbnQtYmFzZWQtaW5zdGFudGlhdGUtZ2F0ZXdheScsXG4gIC8vICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXBhcmFsbGVsLWV2ZW50LWJhc2VkLWluc3RhbnRpYXRlLWdhdGV3YXknLFxuICAvLyAgIHRhcmdldDoge1xuICAvLyAgICAgdHlwZTogJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknXG4gIC8vICAgfSxcbiAgLy8gICBvcHRpb25zOiB7XG4gIC8vICAgICBidXNpbmVzc09iamVjdDogeyBpbnN0YW50aWF0ZTogdHJ1ZSwgZXZlbnRHYXRld2F5VHlwZTogJ1BhcmFsbGVsJyB9XG4gIC8vICAgfVxuICAvLyB9XG5dO1xuXG5leHBvcnQgdmFyIFNVQlBST0NFU1NfRVhQQU5ERUQgPSBbXG4gIHtcbiAgICBsYWJlbDogJ1RyYW5zYWN0aW9uJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXRyYW5zYWN0aW9uJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tdHJhbnNhY3Rpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46VHJhbnNhY3Rpb24nLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXZlbnQgU3ViIFByb2Nlc3MnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtZXZlbnQtc3VicHJvY2VzcycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWV2ZW50LXN1YnByb2Nlc3MtZXhwYW5kZWQnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3ViUHJvY2VzcycsXG4gICAgICB0cmlnZ2VyZWRCeUV2ZW50OiB0cnVlLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU3ViIFByb2Nlc3MgKGNvbGxhcHNlZCknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29sbGFwc2VkLXN1YnByb2Nlc3MnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdWJwcm9jZXNzLWNvbGxhcHNlZCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdWJQcm9jZXNzJyxcbiAgICAgIGlzRXhwYW5kZWQ6IGZhbHNlXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIFRSQU5TQUNUSU9OID0gW1xuICB7XG4gICAgbGFiZWw6ICdTdWIgUHJvY2VzcycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zdWJwcm9jZXNzJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3VicHJvY2Vzcy1leHBhbmRlZCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdWJQcm9jZXNzJyxcbiAgICAgIGlzRXhwYW5kZWQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0V2ZW50IFN1YiBQcm9jZXNzJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWV2ZW50LXN1YnByb2Nlc3MnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1ldmVudC1zdWJwcm9jZXNzLWV4cGFuZGVkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN1YlByb2Nlc3MnLFxuICAgICAgdHJpZ2dlcmVkQnlFdmVudDogdHJ1ZSxcbiAgICAgIGlzRXhwYW5kZWQ6IHRydWVcbiAgICB9XG4gIH1cbl07XG5cbmV4cG9ydCB2YXIgRVZFTlRfU1VCX1BST0NFU1MgPSBbXG4gIHtcbiAgICBsYWJlbDogJ1N1YiBQcm9jZXNzJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXN1YnByb2Nlc3MnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdWJwcm9jZXNzLWV4cGFuZGVkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN1YlByb2Nlc3MnLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVHJhbnNhY3Rpb24nLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdHJhbnNhY3Rpb24nLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi10cmFuc2FjdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpUcmFuc2FjdGlvbicsXG4gICAgICBpc0V4cGFuZGVkOiB0cnVlXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIFRBU0sgPSBbXG4gIHtcbiAgICBsYWJlbDogJ1Rhc2snLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdGFzaycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXRhc2snLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46VGFzaydcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NlbmQgVGFzaycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zZW5kLXRhc2snLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zZW5kJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlNlbmRUYXNrJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUmVjZWl2ZSBUYXNrJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXJlY2VpdmUtdGFzaycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXJlY2VpdmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46UmVjZWl2ZVRhc2snXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdVc2VyIFRhc2snLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdXNlci10YXNrJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tdXNlcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpVc2VyVGFzaydcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01hbnVhbCBUYXNrJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW1hbnVhbC10YXNrJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbWFudWFsJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOk1hbnVhbFRhc2snXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdCdXNpbmVzcyBSdWxlIFRhc2snLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtcnVsZS10YXNrJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tYnVzaW5lc3MtcnVsZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCdXNpbmVzc1J1bGVUYXNrJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2VydmljZSBUYXNrJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXNlcnZpY2UtdGFzaycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXNlcnZpY2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U2VydmljZVRhc2snXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTY3JpcHQgVGFzaycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zY3JpcHQtdGFzaycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXNjcmlwdCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTY3JpcHRUYXNrJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ2FsbCBBY3Rpdml0eScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jYWxsLWFjdGl2aXR5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY2FsbC1hY3Rpdml0eScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpDYWxsQWN0aXZpdHknXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTdWIgUHJvY2VzcyAoY29sbGFwc2VkKScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb2xsYXBzZWQtc3VicHJvY2VzcycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN1YnByb2Nlc3MtY29sbGFwc2VkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN1YlByb2Nlc3MnLFxuICAgICAgaXNFeHBhbmRlZDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1N1YiBQcm9jZXNzIChleHBhbmRlZCknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtZXhwYW5kZWQtc3VicHJvY2VzcycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN1YnByb2Nlc3MtZXhwYW5kZWQnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3ViUHJvY2VzcycsXG4gICAgICBpc0V4cGFuZGVkOiB0cnVlXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIEJPVU5EQVJZX0VWRU5UID0gW1xuICB7XG4gICAgbGFiZWw6ICdNZXNzYWdlIEJvdW5kYXJ5IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW1lc3NhZ2UtYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtbWVzc2FnZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdUaW1lciBCb3VuZGFyeSBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC10aW1lci1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXNjYWxhdGlvbiBCb3VuZGFyeSBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lc2NhbGF0aW9uLWJvdW5kYXJ5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLWVzY2FsYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29uZGl0aW9uYWwgQm91bmRhcnkgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29uZGl0aW9uYWwtYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtY29uZGl0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFcnJvciBCb3VuZGFyeSBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lcnJvci1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1lcnJvcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkVycm9yRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ2FuY2VsIEJvdW5kYXJ5IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWNhbmNlbC1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1jYW5jZWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDYW5jZWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTaWduYWwgQm91bmRhcnkgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtc2lnbmFsLWJvdW5kYXJ5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLXNpZ25hbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbXBlbnNhdGlvbiBCb3VuZGFyeSBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb21wZW5zYXRpb24tYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtY29tcGVuc2F0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01lc3NhZ2UgQm91bmRhcnkgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbi1pbnRlcnJ1cHRpbmctbWVzc2FnZS1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1ub24taW50ZXJydXB0aW5nLW1lc3NhZ2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGNhbmNlbEFjdGl2aXR5OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVGltZXIgQm91bmRhcnkgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbi1pbnRlcnJ1cHRpbmctdGltZXItYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtbm9uLWludGVycnVwdGluZy10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGNhbmNlbEFjdGl2aXR5OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXNjYWxhdGlvbiBCb3VuZGFyeSBFdmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uLWludGVycnVwdGluZy1lc2NhbGF0aW9uLWJvdW5kYXJ5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLW5vbi1pbnRlcnJ1cHRpbmctZXNjYWxhdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nLFxuICAgICAgY2FuY2VsQWN0aXZpdHk6IGZhbHNlXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb25kaXRpb25hbCBCb3VuZGFyeSBFdmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uLWludGVycnVwdGluZy1jb25kaXRpb25hbC1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1ub24taW50ZXJydXB0aW5nLWNvbmRpdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGNhbmNlbEFjdGl2aXR5OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2lnbmFsIEJvdW5kYXJ5IEV2ZW50IChub24taW50ZXJydXB0aW5nKScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub24taW50ZXJydXB0aW5nLXNpZ25hbC1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1ub24taW50ZXJydXB0aW5nLXNpZ25hbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBjYW5jZWxBY3Rpdml0eTogZmFsc2VcbiAgICB9XG4gIH1cbl07XG5cbmV4cG9ydCB2YXIgRVZFTlRfU1VCX1BST0NFU1NfU1RBUlRfRVZFTlQgPSBbXG4gIHtcbiAgICBsYWJlbDogJ01lc3NhZ2UgU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbWVzc2FnZS1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW1lc3NhZ2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVGltZXIgU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdGltZXItc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29uZGl0aW9uYWwgU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29uZGl0aW9uYWwtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1jb25kaXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NpZ25hbCBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zaWduYWwtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1zaWduYWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFcnJvciBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lcnJvci1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LWVycm9yJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXJyb3JFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFc2NhbGF0aW9uIFN0YXJ0IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWVzY2FsYXRpb24tc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1lc2NhbGF0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbXBlbnNhdGlvbiBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb21wZW5zYXRpb24tc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1jb21wZW5zYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTWVzc2FnZSBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uLWludGVycnVwdGluZy1tZXNzYWdlLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbm9uLWludGVycnVwdGluZy1tZXNzYWdlJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBpc0ludGVycnVwdGluZzogZmFsc2VcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1RpbWVyIFN0YXJ0IEV2ZW50IChub24taW50ZXJydXB0aW5nKScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub24taW50ZXJydXB0aW5nLXRpbWVyLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbm9uLWludGVycnVwdGluZy10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGlzSW50ZXJydXB0aW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29uZGl0aW9uYWwgU3RhcnQgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbi1pbnRlcnJ1cHRpbmctY29uZGl0aW9uYWwtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1ub24taW50ZXJydXB0aW5nLWNvbmRpdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGlzSW50ZXJydXB0aW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2lnbmFsIFN0YXJ0IEV2ZW50IChub24taW50ZXJydXB0aW5nKScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub24taW50ZXJydXB0aW5nLXNpZ25hbC1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW5vbi1pbnRlcnJ1cHRpbmctc2lnbmFsJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGlzSW50ZXJydXB0aW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXNjYWxhdGlvbiBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uLWludGVycnVwdGluZy1lc2NhbGF0aW9uLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbm9uLWludGVycnVwdGluZy1lc2NhbGF0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBpc0ludGVycnVwdGluZzogZmFsc2VcbiAgICB9XG4gIH1cbl07XG5cbmV4cG9ydCB2YXIgU0VRVUVOQ0VfRkxPVyA9IFtcbiAge1xuICAgIGxhYmVsOiAnU2VxdWVuY2UgRmxvdycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zZXF1ZW5jZS1mbG93JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY29ubmVjdGlvbidcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRGVmYXVsdCBGbG93JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWRlZmF1bHQtZmxvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWRlZmF1bHQtZmxvdydcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29uZGl0aW9uYWwgRmxvdycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb25kaXRpb25hbC1mbG93JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY29uZGl0aW9uYWwtZmxvdydcbiAgfVxuXTtcblxuZXhwb3J0IHZhciBQQVJUSUNJUEFOVCA9IFtcbiAge1xuICAgIGxhYmVsOiAnRXhwYW5kZWQgUG9vbCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1leHBhbmRlZC1wb29sJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tcGFydGljaXBhbnQnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46UGFydGljaXBhbnQnLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29sbGFwc2VkIFBvb2wnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29sbGFwc2VkLXBvb2wnLFxuXG4gICAgLy8gVE9ETyhAamFuc3R1ZW1tZWwpOiBtYXliZSBkZXNpZ24gbmV3IGljb25cbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbGFuZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgICBpc0V4cGFuZGVkOiBmYWxzZVxuICAgIH1cbiAgfVxuXTtcbiIsImltcG9ydCBDb3B5UGFzdGVNb2R1bGUgZnJvbSAnLi4vY29weS1wYXN0ZSc7XG5pbXBvcnQgUmVwbGFjZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXBsYWNlJztcbmltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uJztcblxuaW1wb3J0IEJwbW5SZXBsYWNlIGZyb20gJy4vQnBtblJlcGxhY2UnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgQ29weVBhc3RlTW9kdWxlLFxuICAgIFJlcGxhY2VNb2R1bGUsXG4gICAgU2VsZWN0aW9uTW9kdWxlXG4gIF0sXG4gIGJwbW5SZXBsYWNlOiBbICd0eXBlJywgQnBtblJlcGxhY2UgXVxufTtcbiIsImltcG9ydCB7XG4gIGV2ZXJ5LFxuICBmaW5kLFxuICBmb3JFYWNoLFxuICBzb21lXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHtcbiAgaXMsXG4gIGdldEJ1c2luZXNzT2JqZWN0XG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0UGFyZW50LFxuICBpc0FueVxufSBmcm9tICcuLi9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzTGFiZWxcbn0gZnJvbSAnLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0V4cGFuZGVkLFxuICBpc0V2ZW50U3ViUHJvY2VzcyxcbiAgaXNJbnRlcnJ1cHRpbmcsXG4gIGhhc0Vycm9yRXZlbnREZWZpbml0aW9uLFxuICBoYXNFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uLFxuICBoYXNDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uXG59IGZyb20gJy4uLy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IFJ1bGVQcm92aWRlciBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9ydWxlcy9SdWxlUHJvdmlkZXInO1xuXG5pbXBvcnQge1xuICBnZXRCb3VuZGFyeUF0dGFjaG1lbnQgYXMgaXNCb3VuZGFyeUF0dGFjaG1lbnRcbn0gZnJvbSAnLi4vc25hcHBpbmcvQnBtblNuYXBwaW5nVXRpbCc7XG5cblxuLyoqXG4gKiBCUE1OIHNwZWNpZmljIG1vZGVsaW5nIHJ1bGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtblJ1bGVzKGV2ZW50QnVzKSB7XG4gIFJ1bGVQcm92aWRlci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcbn1cblxuaW5oZXJpdHMoQnBtblJ1bGVzLCBSdWxlUHJvdmlkZXIpO1xuXG5CcG1uUnVsZXMuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdO1xuXG5CcG1uUnVsZXMucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICB0aGlzLmFkZFJ1bGUoJ2Nvbm5lY3Rpb24uc3RhcnQnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHNvdXJjZSA9IGNvbnRleHQuc291cmNlO1xuXG4gICAgcmV0dXJuIGNhblN0YXJ0Q29ubmVjdGlvbihzb3VyY2UpO1xuICB9KTtcblxuICB0aGlzLmFkZFJ1bGUoJ2Nvbm5lY3Rpb24uY3JlYXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgdGFyZ2V0UGFyZW50ID0gaGludHMudGFyZ2V0UGFyZW50LFxuICAgICAgICB0YXJnZXRBdHRhY2ggPSBoaW50cy50YXJnZXRBdHRhY2g7XG5cbiAgICAvLyBkb24ndCBhbGxvdyBpbmNvbWluZyBjb25uZWN0aW9ucyBvblxuICAgIC8vIG5ld2x5IGNyZWF0ZWQgYm91bmRhcnkgZXZlbnRzXG4gICAgLy8gdG8gYm91bmRhcnkgZXZlbnRzXG4gICAgaWYgKHRhcmdldEF0dGFjaCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIHRlbXBvcmFyaWx5IHNldCB0YXJnZXQgcGFyZW50IGZvciBzY29waW5nXG4gICAgLy8gY2hlY2tzIHRvIHdvcmtcbiAgICBpZiAodGFyZ2V0UGFyZW50KSB7XG4gICAgICB0YXJnZXQucGFyZW50ID0gdGFyZ2V0UGFyZW50O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2FuQ29ubmVjdChzb3VyY2UsIHRhcmdldCk7XG4gICAgfSBmaW5hbGx5IHtcblxuICAgICAgLy8gdW5zZXQgdGVtcG9yYXJ5IHRhcmdldCBwYXJlbnRcbiAgICAgIGlmICh0YXJnZXRQYXJlbnQpIHtcbiAgICAgICAgdGFyZ2V0LnBhcmVudCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICB0aGlzLmFkZFJ1bGUoJ2Nvbm5lY3Rpb24ucmVjb25uZWN0JywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldDtcblxuICAgIHJldHVybiBjYW5Db25uZWN0KHNvdXJjZSwgdGFyZ2V0LCBjb25uZWN0aW9uKTtcbiAgfSk7XG5cbiAgdGhpcy5hZGRSdWxlKCdjb25uZWN0aW9uLnVwZGF0ZVdheXBvaW50cycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogY29udGV4dC5jb25uZWN0aW9uLnR5cGVcbiAgICB9O1xuICB9KTtcblxuICB0aGlzLmFkZFJ1bGUoJ3NoYXBlLnJlc2l6ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIG5ld0JvdW5kcyA9IGNvbnRleHQubmV3Qm91bmRzO1xuXG4gICAgcmV0dXJuIGNhblJlc2l6ZShzaGFwZSwgbmV3Qm91bmRzKTtcbiAgfSk7XG5cbiAgdGhpcy5hZGRSdWxlKCdlbGVtZW50cy5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cyxcbiAgICAgICAgcG9zaXRpb24gPSBjb250ZXh0LnBvc2l0aW9uLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldDtcblxuICAgIHJldHVybiBldmVyeShlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgaWYgKGlzQ29ubmVjdGlvbihlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gY2FuQ29ubmVjdChlbGVtZW50LnNvdXJjZSwgZWxlbWVudC50YXJnZXQsIGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudC5ob3N0KSB7XG4gICAgICAgIHJldHVybiBjYW5BdHRhY2goZWxlbWVudCwgZWxlbWVudC5ob3N0LCBudWxsLCBwb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjYW5DcmVhdGUoZWxlbWVudCwgdGFyZ2V0LCBudWxsLCBwb3NpdGlvbik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRoaXMuYWRkUnVsZSgnZWxlbWVudHMubW92ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgc2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIHBvc2l0aW9uID0gY29udGV4dC5wb3NpdGlvbjtcblxuICAgIHJldHVybiBjYW5BdHRhY2goc2hhcGVzLCB0YXJnZXQsIG51bGwsIHBvc2l0aW9uKSB8fFxuICAgICAgICAgICBjYW5SZXBsYWNlKHNoYXBlcywgdGFyZ2V0LCBwb3NpdGlvbikgfHxcbiAgICAgICAgICAgY2FuTW92ZShzaGFwZXMsIHRhcmdldCwgcG9zaXRpb24pIHx8XG4gICAgICAgICAgIGNhbkluc2VydChzaGFwZXMsIHRhcmdldCwgcG9zaXRpb24pO1xuICB9KTtcblxuICB0aGlzLmFkZFJ1bGUoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICByZXR1cm4gY2FuQ3JlYXRlKFxuICAgICAgY29udGV4dC5zaGFwZSxcbiAgICAgIGNvbnRleHQudGFyZ2V0LFxuICAgICAgY29udGV4dC5zb3VyY2UsXG4gICAgICBjb250ZXh0LnBvc2l0aW9uXG4gICAgKTtcbiAgfSk7XG5cbiAgdGhpcy5hZGRSdWxlKCdzaGFwZS5hdHRhY2gnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICByZXR1cm4gY2FuQXR0YWNoKFxuICAgICAgY29udGV4dC5zaGFwZSxcbiAgICAgIGNvbnRleHQudGFyZ2V0LFxuICAgICAgbnVsbCxcbiAgICAgIGNvbnRleHQucG9zaXRpb25cbiAgICApO1xuICB9KTtcblxuICB0aGlzLmFkZFJ1bGUoJ2VsZW1lbnQuY29weScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzO1xuXG4gICAgcmV0dXJuIGNhbkNvcHkoZWxlbWVudHMsIGVsZW1lbnQpO1xuICB9KTtcbn07XG5cbkJwbW5SdWxlcy5wcm90b3R5cGUuY2FuQ29ubmVjdE1lc3NhZ2VGbG93ID0gY2FuQ29ubmVjdE1lc3NhZ2VGbG93O1xuXG5CcG1uUnVsZXMucHJvdG90eXBlLmNhbkNvbm5lY3RTZXF1ZW5jZUZsb3cgPSBjYW5Db25uZWN0U2VxdWVuY2VGbG93O1xuXG5CcG1uUnVsZXMucHJvdG90eXBlLmNhbkNvbm5lY3REYXRhQXNzb2NpYXRpb24gPSBjYW5Db25uZWN0RGF0YUFzc29jaWF0aW9uO1xuXG5CcG1uUnVsZXMucHJvdG90eXBlLmNhbkNvbm5lY3RBc3NvY2lhdGlvbiA9IGNhbkNvbm5lY3RBc3NvY2lhdGlvbjtcblxuQnBtblJ1bGVzLnByb3RvdHlwZS5jYW5Nb3ZlID0gY2FuTW92ZTtcblxuQnBtblJ1bGVzLnByb3RvdHlwZS5jYW5BdHRhY2ggPSBjYW5BdHRhY2g7XG5cbkJwbW5SdWxlcy5wcm90b3R5cGUuY2FuUmVwbGFjZSA9IGNhblJlcGxhY2U7XG5cbkJwbW5SdWxlcy5wcm90b3R5cGUuY2FuRHJvcCA9IGNhbkRyb3A7XG5cbkJwbW5SdWxlcy5wcm90b3R5cGUuY2FuSW5zZXJ0ID0gY2FuSW5zZXJ0O1xuXG5CcG1uUnVsZXMucHJvdG90eXBlLmNhbkNyZWF0ZSA9IGNhbkNyZWF0ZTtcblxuQnBtblJ1bGVzLnByb3RvdHlwZS5jYW5Db25uZWN0ID0gY2FuQ29ubmVjdDtcblxuQnBtblJ1bGVzLnByb3RvdHlwZS5jYW5SZXNpemUgPSBjYW5SZXNpemU7XG5cbkJwbW5SdWxlcy5wcm90b3R5cGUuY2FuQ29weSA9IGNhbkNvcHk7XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHJ1bGUgY2hlY2tpbmdcbiAqL1xuXG4vKipcbiAqIENoZWNrcyBpZiBnaXZlbiBlbGVtZW50IGNhbiBiZSB1c2VkIGZvciBzdGFydGluZyBjb25uZWN0aW9uLlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IHNvdXJjZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY2FuU3RhcnRDb25uZWN0aW9uKGVsZW1lbnQpIHtcbiAgaWYgKG5vbkV4aXN0aW5nT3JMYWJlbChlbGVtZW50KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIFtcbiAgICAnYnBtbjpGbG93Tm9kZScsXG4gICAgJ2JwbW46SW50ZXJhY3Rpb25Ob2RlJyxcbiAgICAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJyxcbiAgICAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnLFxuICAgICdicG1uOkdyb3VwJ1xuICBdKTtcbn1cblxuZnVuY3Rpb24gbm9uRXhpc3RpbmdPckxhYmVsKGVsZW1lbnQpIHtcbiAgcmV0dXJuICFlbGVtZW50IHx8IGlzTGFiZWwoZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGlzU2FtZShhLCBiKSB7XG4gIHJldHVybiBhID09PSBiO1xufVxuXG5mdW5jdGlvbiBnZXRPcmdhbml6YXRpb25hbFBhcmVudChlbGVtZW50KSB7XG5cbiAgZG8ge1xuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykpIHtcbiAgICAgIHJldHVybiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkucHJvY2Vzc1JlZiB8fFxuICAgICAgICBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KVxuICAgICAgKTtcbiAgICB9XG4gIH0gd2hpbGUgKChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnQpKTtcblxufVxuXG5mdW5jdGlvbiBpc1RleHRBbm5vdGF0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlRleHRBbm5vdGF0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIGlzR3JvdXAoZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46R3JvdXAnKSAmJiAhZWxlbWVudC5sYWJlbFRhcmdldDtcbn1cblxuZnVuY3Rpb24gaXNDb21wZW5zYXRpb25Cb3VuZGFyeShlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiZcbiAgICAgICAgIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIGlzRm9yQ29tcGVuc2F0aW9uKGUpIHtcbiAgcmV0dXJuIGdldEJ1c2luZXNzT2JqZWN0KGUpLmlzRm9yQ29tcGVuc2F0aW9uO1xufVxuXG5mdW5jdGlvbiBpc1NhbWVPcmdhbml6YXRpb24oYSwgYikge1xuICB2YXIgcGFyZW50QSA9IGdldE9yZ2FuaXphdGlvbmFsUGFyZW50KGEpLFxuICAgICAgcGFyZW50QiA9IGdldE9yZ2FuaXphdGlvbmFsUGFyZW50KGIpO1xuXG4gIHJldHVybiBwYXJlbnRBID09PSBwYXJlbnRCO1xufVxuXG5mdW5jdGlvbiBpc01lc3NhZ2VGbG93U291cmNlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBpcyhlbGVtZW50LCAnYnBtbjpJbnRlcmFjdGlvbk5vZGUnKSAmJiAoXG4gICAgICAhaXMoZWxlbWVudCwgJ2JwbW46RXZlbnQnKSB8fCAoXG4gICAgICAgIGlzKGVsZW1lbnQsICdicG1uOlRocm93RXZlbnQnKSAmJlxuICAgICAgICBoYXNFdmVudERlZmluaXRpb25Pck5vbmUoZWxlbWVudCwgJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicpXG4gICAgICApXG4gICAgKVxuICApO1xufVxuXG5mdW5jdGlvbiBpc01lc3NhZ2VGbG93VGFyZ2V0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBpcyhlbGVtZW50LCAnYnBtbjpJbnRlcmFjdGlvbk5vZGUnKSAmJlxuICAgICFpc0ZvckNvbXBlbnNhdGlvbihlbGVtZW50KSAmJiAoXG4gICAgICAhaXMoZWxlbWVudCwgJ2JwbW46RXZlbnQnKSB8fCAoXG4gICAgICAgIGlzKGVsZW1lbnQsICdicG1uOkNhdGNoRXZlbnQnKSAmJlxuICAgICAgICBoYXNFdmVudERlZmluaXRpb25Pck5vbmUoZWxlbWVudCwgJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicpXG4gICAgICApXG4gICAgKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRTY29wZVBhcmVudChlbGVtZW50KSB7XG5cbiAgdmFyIHBhcmVudCA9IGVsZW1lbnQ7XG5cbiAgd2hpbGUgKChwYXJlbnQgPSBwYXJlbnQucGFyZW50KSkge1xuXG4gICAgaWYgKGlzKHBhcmVudCwgJ2JwbW46Rmxvd0VsZW1lbnRzQ29udGFpbmVyJykpIHtcbiAgICAgIHJldHVybiBnZXRCdXNpbmVzc09iamVjdChwYXJlbnQpO1xuICAgIH1cblxuICAgIGlmIChpcyhwYXJlbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICAgIHJldHVybiBnZXRCdXNpbmVzc09iamVjdChwYXJlbnQpLnByb2Nlc3NSZWY7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzU2FtZVNjb3BlKGEsIGIpIHtcbiAgdmFyIHNjb3BlUGFyZW50QSA9IGdldFNjb3BlUGFyZW50KGEpLFxuICAgICAgc2NvcGVQYXJlbnRCID0gZ2V0U2NvcGVQYXJlbnQoYik7XG5cbiAgcmV0dXJuIHNjb3BlUGFyZW50QSA9PT0gc2NvcGVQYXJlbnRCO1xufVxuXG5mdW5jdGlvbiBoYXNFdmVudERlZmluaXRpb24oZWxlbWVudCwgZXZlbnREZWZpbml0aW9uKSB7XG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIHJldHVybiAhIWZpbmQoYm8uZXZlbnREZWZpbml0aW9ucyB8fCBbXSwgZnVuY3Rpb24oZGVmaW5pdGlvbikge1xuICAgIHJldHVybiBpcyhkZWZpbml0aW9uLCBldmVudERlZmluaXRpb24pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGFzRXZlbnREZWZpbml0aW9uT3JOb25lKGVsZW1lbnQsIGV2ZW50RGVmaW5pdGlvbikge1xuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICByZXR1cm4gKGJvLmV2ZW50RGVmaW5pdGlvbnMgfHwgW10pLmV2ZXJ5KGZ1bmN0aW9uKGRlZmluaXRpb24pIHtcbiAgICByZXR1cm4gaXMoZGVmaW5pdGlvbiwgZXZlbnREZWZpbml0aW9uKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzU2VxdWVuY2VGbG93U291cmNlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBpcyhlbGVtZW50LCAnYnBtbjpGbG93Tm9kZScpICYmXG4gICAgIWlzKGVsZW1lbnQsICdicG1uOkVuZEV2ZW50JykgJiZcbiAgICAhaXNFdmVudFN1YlByb2Nlc3MoZWxlbWVudCkgJiZcbiAgICAhKGlzKGVsZW1lbnQsICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnKSAmJlxuICAgICAgaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nKVxuICAgICkgJiZcbiAgICAhaXNDb21wZW5zYXRpb25Cb3VuZGFyeShlbGVtZW50KSAmJlxuICAgICFpc0ZvckNvbXBlbnNhdGlvbihlbGVtZW50KVxuICApO1xufVxuXG5mdW5jdGlvbiBpc1NlcXVlbmNlRmxvd1RhcmdldChlbGVtZW50KSB7XG4gIHJldHVybiAoXG4gICAgaXMoZWxlbWVudCwgJ2JwbW46Rmxvd05vZGUnKSAmJlxuICAgICFpcyhlbGVtZW50LCAnYnBtbjpTdGFydEV2ZW50JykgJiZcbiAgICAhaXMoZWxlbWVudCwgJ2JwbW46Qm91bmRhcnlFdmVudCcpICYmXG4gICAgIWlzRXZlbnRTdWJQcm9jZXNzKGVsZW1lbnQpICYmXG4gICAgIShpcyhlbGVtZW50LCAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JykgJiZcbiAgICAgIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpMaW5rRXZlbnREZWZpbml0aW9uJylcbiAgICApICYmXG4gICAgIWlzRm9yQ29tcGVuc2F0aW9uKGVsZW1lbnQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzRXZlbnRCYXNlZFRhcmdldChlbGVtZW50KSB7XG4gIHJldHVybiAoXG4gICAgaXMoZWxlbWVudCwgJ2JwbW46UmVjZWl2ZVRhc2snKSB8fCAoXG4gICAgICBpcyhlbGVtZW50LCAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JykgJiYgKFxuICAgICAgICBoYXNFdmVudERlZmluaXRpb24oZWxlbWVudCwgJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicpIHx8XG4gICAgICAgIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbicpIHx8XG4gICAgICAgIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbicpIHx8XG4gICAgICAgIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nKVxuICAgICAgKVxuICAgIClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNDb25uZWN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQud2F5cG9pbnRzO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJlbnRzKGVsZW1lbnQpIHtcblxuICB2YXIgcGFyZW50cyA9IFtdO1xuXG4gIHdoaWxlIChlbGVtZW50KSB7XG4gICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50O1xuXG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHBhcmVudHMucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyZW50cztcbn1cblxuZnVuY3Rpb24gaXNQYXJlbnQocG9zc2libGVQYXJlbnQsIGVsZW1lbnQpIHtcbiAgdmFyIGFsbFBhcmVudHMgPSBnZXRQYXJlbnRzKGVsZW1lbnQpO1xuICByZXR1cm4gYWxsUGFyZW50cy5pbmRleE9mKHBvc3NpYmxlUGFyZW50KSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIGNhbkNvbm5lY3Qoc291cmNlLCB0YXJnZXQsIGNvbm5lY3Rpb24pIHtcblxuICBpZiAobm9uRXhpc3RpbmdPckxhYmVsKHNvdXJjZSkgfHwgbm9uRXhpc3RpbmdPckxhYmVsKHRhcmdldCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICghaXMoY29ubmVjdGlvbiwgJ2JwbW46RGF0YUFzc29jaWF0aW9uJykpIHtcblxuICAgIGlmIChjYW5Db25uZWN0TWVzc2FnZUZsb3coc291cmNlLCB0YXJnZXQpKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiAnYnBtbjpNZXNzYWdlRmxvdycgfTtcbiAgICB9XG5cbiAgICBpZiAoY2FuQ29ubmVjdFNlcXVlbmNlRmxvdyhzb3VyY2UsIHRhcmdldCkpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdicG1uOlNlcXVlbmNlRmxvdycgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29ubmVjdERhdGFBc3NvY2lhdGlvbiA9IGNhbkNvbm5lY3REYXRhQXNzb2NpYXRpb24oc291cmNlLCB0YXJnZXQpO1xuXG4gIGlmIChjb25uZWN0RGF0YUFzc29jaWF0aW9uKSB7XG4gICAgcmV0dXJuIGNvbm5lY3REYXRhQXNzb2NpYXRpb247XG4gIH1cblxuICBpZiAoaXNDb21wZW5zYXRpb25Cb3VuZGFyeShzb3VyY2UpICYmIGlzRm9yQ29tcGVuc2F0aW9uKHRhcmdldCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2JwbW46QXNzb2NpYXRpb24nLFxuICAgICAgYXNzb2NpYXRpb25EaXJlY3Rpb246ICdPbmUnXG4gICAgfTtcbiAgfVxuXG4gIGlmIChjYW5Db25uZWN0QXNzb2NpYXRpb24oc291cmNlLCB0YXJnZXQpKSB7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2JwbW46QXNzb2NpYXRpb24nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDYW4gYW4gZWxlbWVudCBiZSBkcm9wcGVkIGludG8gdGhlIHRhcmdldCBlbGVtZW50XG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY2FuRHJvcChlbGVtZW50LCB0YXJnZXQsIHBvc2l0aW9uKSB7XG5cbiAgLy8gY2FuIG1vdmUgbGFiZWxzIGFuZCBncm91cHMgZXZlcnl3aGVyZVxuICBpZiAoaXNMYWJlbChlbGVtZW50KSB8fCBpc0dyb3VwKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuXG4gIC8vIGRpc2FsbG93IHRvIGNyZWF0ZSBlbGVtZW50cyBvbiBjb2xsYXBzZWQgcG9vbHNcbiAgaWYgKGlzKHRhcmdldCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiAhaXNFeHBhbmRlZCh0YXJnZXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gYWxsb3cgdG8gY3JlYXRlIG5ldyBwYXJ0aWNpcGFudHMgb25cbiAgLy8gZXhpc3RpbmcgY29sbGFib3JhdGlvbiBhbmQgcHJvY2VzcyBkaWFncmFtc1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIHJldHVybiBpcyh0YXJnZXQsICdicG1uOlByb2Nlc3MnKSB8fCBpcyh0YXJnZXQsICdicG1uOkNvbGxhYm9yYXRpb24nKTtcbiAgfVxuXG4gIC8vIGFsbG93IG1vdmluZyBEYXRhSW5wdXQgLyBEYXRhT3V0cHV0IHdpdGhpbiBpdHMgb3JpZ2luYWwgY29udGFpbmVyIG9ubHlcbiAgaWYgKGlzQW55KGVsZW1lbnQsIFsgJ2JwbW46RGF0YUlucHV0JywgJ2JwbW46RGF0YU91dHB1dCcgXSkpIHtcblxuICAgIGlmIChlbGVtZW50LnBhcmVudCkge1xuICAgICAgcmV0dXJuIHRhcmdldCA9PT0gZWxlbWVudC5wYXJlbnQ7XG4gICAgfVxuICB9XG5cbiAgLy8gYWxsb3cgY3JlYXRpbmcgbGFuZXMgb24gcGFydGljaXBhbnRzIGFuZCBvdGhlciBsYW5lcyBvbmx5XG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpMYW5lJykpIHtcbiAgICByZXR1cm4gaXModGFyZ2V0LCAnYnBtbjpQYXJ0aWNpcGFudCcpIHx8IGlzKHRhcmdldCwgJ2JwbW46TGFuZScpO1xuICB9XG5cbiAgLy8gZGlzYWxsb3cgZHJvcHBpbmcgYm91bmRhcnkgZXZlbnRzIHdoaWNoIGNhbm5vdCByZXBsYWNlIHdpdGggaW50ZXJtZWRpYXRlIGV2ZW50XG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiYgIWlzRHJvcHBhYmxlQm91bmRhcnlFdmVudChlbGVtZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGRyb3AgZmxvdyBlbGVtZW50cyBvbnRvIGZsb3cgZWxlbWVudCBjb250YWluZXJzXG4gIC8vIGFuZCBwYXJ0aWNpcGFudHNcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkZsb3dFbGVtZW50JykgJiYgIWlzKGVsZW1lbnQsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScpKSB7XG4gICAgaWYgKGlzKHRhcmdldCwgJ2JwbW46Rmxvd0VsZW1lbnRzQ29udGFpbmVyJykpIHtcbiAgICAgIHJldHVybiBpc0V4cGFuZGVkKHRhcmdldCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzQW55KHRhcmdldCwgWyAnYnBtbjpQYXJ0aWNpcGFudCcsICdicG1uOkxhbmUnIF0pO1xuICB9XG5cbiAgLy8gYWNjb3VudCBmb3IgdGhlIGZhY3QgdGhhdCBkYXRhIGFzc29jaWF0aW9ucyBhcmUgYWx3YXlzXG4gIC8vIHJlbmRlcmVkIGFuZCBtb3ZlZCB0byB0b3AgKFByb2Nlc3Mgb3IgQ29sbGFib3JhdGlvbiBsZXZlbClcbiAgLy9cbiAgLy8gYXJ0aWZhY3RzIG1heSBiZSBwbGFjZWQgd2hlcmV2ZXIsIHRvb1xuICBpZiAoaXNBbnkoZWxlbWVudCwgWyAnYnBtbjpBcnRpZmFjdCcsICdicG1uOkRhdGFBc3NvY2lhdGlvbicsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScgXSkpIHtcbiAgICByZXR1cm4gaXNBbnkodGFyZ2V0LCBbXG4gICAgICAnYnBtbjpDb2xsYWJvcmF0aW9uJyxcbiAgICAgICdicG1uOkxhbmUnLFxuICAgICAgJ2JwbW46UGFydGljaXBhbnQnLFxuICAgICAgJ2JwbW46UHJvY2VzcycsXG4gICAgICAnYnBtbjpTdWJQcm9jZXNzJyBdKTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpNZXNzYWdlRmxvdycpKSB7XG4gICAgcmV0dXJuIGlzKHRhcmdldCwgJ2JwbW46Q29sbGFib3JhdGlvbicpXG4gICAgICB8fCBlbGVtZW50LnNvdXJjZS5wYXJlbnQgPT0gdGFyZ2V0XG4gICAgICB8fCBlbGVtZW50LnRhcmdldC5wYXJlbnQgPT0gdGFyZ2V0O1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0Ryb3BwYWJsZUJvdW5kYXJ5RXZlbnQoZXZlbnQpIHtcbiAgcmV0dXJuIGdldEJ1c2luZXNzT2JqZWN0KGV2ZW50KS5jYW5jZWxBY3Rpdml0eSAmJiAoXG4gICAgaGFzTm9FdmVudERlZmluaXRpb24oZXZlbnQpIHx8IGhhc0NvbW1vbkJvdW5kYXJ5SW50ZXJtZWRpYXRlRXZlbnREZWZpbml0aW9uKGV2ZW50KVxuICApO1xufVxuXG5mdW5jdGlvbiBpc0JvdW5kYXJ5RXZlbnQoZWxlbWVudCkge1xuICByZXR1cm4gIWlzTGFiZWwoZWxlbWVudCkgJiYgaXMoZWxlbWVudCwgJ2JwbW46Qm91bmRhcnlFdmVudCcpO1xufVxuXG5mdW5jdGlvbiBpc0xhbmUoZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46TGFuZScpO1xufVxuXG4vKipcbiAqIFdlIHRyZWF0IEludGVybWVkaWF0ZVRocm93RXZlbnRzIGFzIGJvdW5kYXJ5IGV2ZW50cyBkdXJpbmcgY3JlYXRlLFxuICogdGhpcyBtdXN0IGJlIHJlZmxlY3RlZCBpbiB0aGUgcnVsZXMuXG4gKi9cbmZ1bmN0aW9uIGlzQm91bmRhcnlDYW5kaWRhdGUoZWxlbWVudCkge1xuICBpZiAoaXNCb3VuZGFyeUV2ZW50KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcpICYmIGhhc05vRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGlzKGVsZW1lbnQsICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnKSAmJlxuICAgIGhhc0NvbW1vbkJvdW5kYXJ5SW50ZXJtZWRpYXRlRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGhhc05vRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgcmV0dXJuIGJvICYmICEoYm8uZXZlbnREZWZpbml0aW9ucyAmJiBiby5ldmVudERlZmluaXRpb25zLmxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGhhc0NvbW1vbkJvdW5kYXJ5SW50ZXJtZWRpYXRlRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGhhc09uZU9mRXZlbnREZWZpbml0aW9ucyhlbGVtZW50LCBbXG4gICAgJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicsXG4gICAgJ2JwbW46VGltZXJFdmVudERlZmluaXRpb24nLFxuICAgICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicsXG4gICAgJ2JwbW46Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBoYXNPbmVPZkV2ZW50RGVmaW5pdGlvbnMoZWxlbWVudCwgZXZlbnREZWZpbml0aW9ucykge1xuICByZXR1cm4gZXZlbnREZWZpbml0aW9ucy5zb21lKGZ1bmN0aW9uKGRlZmluaXRpb24pIHtcbiAgICByZXR1cm4gaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsIGRlZmluaXRpb24pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNSZWNlaXZlVGFza0FmdGVyRXZlbnRCYXNlZEdhdGV3YXkoZWxlbWVudCkge1xuICByZXR1cm4gKFxuICAgIGlzKGVsZW1lbnQsICdicG1uOlJlY2VpdmVUYXNrJykgJiZcbiAgICBmaW5kKGVsZW1lbnQuaW5jb21pbmcsIGZ1bmN0aW9uKGluY29taW5nKSB7XG4gICAgICByZXR1cm4gaXMoaW5jb21pbmcuc291cmNlLCAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheScpO1xuICAgIH0pXG4gICk7XG59XG5cblxuZnVuY3Rpb24gY2FuQXR0YWNoKGVsZW1lbnRzLCB0YXJnZXQsIHNvdXJjZSwgcG9zaXRpb24pIHtcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoZWxlbWVudHMpKSB7XG4gICAgZWxlbWVudHMgPSBbIGVsZW1lbnRzIF07XG4gIH1cblxuICAvLyBvbmx5IChyZS0pYXR0YWNoIG9uZSBlbGVtZW50IGF0IGEgdGltZVxuICBpZiAoZWxlbWVudHMubGVuZ3RoICE9PSAxKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGVsZW1lbnQgPSBlbGVtZW50c1swXTtcblxuICAvLyBkbyBub3QgYXR0YWNoIGxhYmVsc1xuICBpZiAoaXNMYWJlbChlbGVtZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIG9ubHkgaGFuZGxlIGJvdW5kYXJ5IGV2ZW50c1xuICBpZiAoIWlzQm91bmRhcnlDYW5kaWRhdGUoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBkaXNhbGxvdyBkcm9wIG9uIGV2ZW50IHN1YiBwcm9jZXNzZXNcbiAgaWYgKGlzRXZlbnRTdWJQcm9jZXNzKHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBvbmx5IGFsbG93IGRyb3Agb24gbm9uIGNvbXBlbnNhdGlvbiBhY3Rpdml0aWVzXG4gIGlmICghaXModGFyZ2V0LCAnYnBtbjpBY3Rpdml0eScpIHx8IGlzRm9yQ29tcGVuc2F0aW9uKHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBvbmx5IGF0dGFjaCB0byBzdWJwcm9jZXNzIGJvcmRlclxuICBpZiAocG9zaXRpb24gJiYgIWlzQm91bmRhcnlBdHRhY2htZW50KHBvc2l0aW9uLCB0YXJnZXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gZG8gbm90IGF0dGFjaCBvbiByZWNlaXZlIHRhc2tzIGFmdGVyIGV2ZW50IGJhc2VkIGdhdGV3YXlzXG4gIGlmIChpc1JlY2VpdmVUYXNrQWZ0ZXJFdmVudEJhc2VkR2F0ZXdheSh0YXJnZXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuICdhdHRhY2gnO1xufVxuXG5cbi8qKlxuICogRGVmaW5lcyBob3cgdG8gcmVwbGFjZSBlbGVtZW50cyBmb3IgYSBnaXZlbiB0YXJnZXQuXG4gKlxuICogUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIGFsbCBlbGVtZW50cyB3aGljaCB3aWxsIGJlIHJlcGxhY2VkLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogIFt7IGlkOiAnSW50ZXJtZWRpYXRlRXZlbnRfMicsXG4gKiAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCdcbiAqICAgfSxcbiAqICAgeyBpZDogJ0ludGVybWVkaWF0ZUV2ZW50XzUnLFxuICogICAgIHR5cGU6ICdicG1uOkVuZEV2ZW50J1xuICogICB9XVxuICpcbiAqIEBwYXJhbSAge0FycmF5fSBlbGVtZW50c1xuICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCBlbGVtZW50cyB3aGljaCBoYXZlIHRvIGJlIHJlcGxhY2VkXG4gKi9cbmZ1bmN0aW9uIGNhblJlcGxhY2UoZWxlbWVudHMsIHRhcmdldCwgcG9zaXRpb24pIHtcblxuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBjYW5FeGVjdXRlID0ge1xuICAgIHJlcGxhY2VtZW50czogW11cbiAgfTtcblxuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICBpZiAoIWlzRXZlbnRTdWJQcm9jZXNzKHRhcmdldCkpIHtcblxuICAgICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlN0YXJ0RXZlbnQnKSAmJlxuICAgICAgICAgIGVsZW1lbnQudHlwZSAhPT0gJ2xhYmVsJyAmJlxuICAgICAgICAgIGNhbkRyb3AoZWxlbWVudCwgdGFyZ2V0KSkge1xuXG4gICAgICAgIC8vIHJlcGxhY2UgYSBub24taW50ZXJydXB0aW5nIHN0YXJ0IGV2ZW50IGJ5IGEgYmxhbmsgaW50ZXJydXB0aW5nIHN0YXJ0IGV2ZW50XG4gICAgICAgIC8vIHdoZW4gdGhlIHRhcmdldCBpcyBub3QgYW4gZXZlbnQgc3ViIHByb2Nlc3NcbiAgICAgICAgaWYgKCFpc0ludGVycnVwdGluZyhlbGVtZW50KSkge1xuICAgICAgICAgIGNhbkV4ZWN1dGUucmVwbGFjZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgb2xkRWxlbWVudElkOiBlbGVtZW50LmlkLFxuICAgICAgICAgICAgbmV3RWxlbWVudFR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXBsYWNlIGFuIGVycm9yL2VzY2FsYXRpb24vY29tcGVuc2F0ZSBzdGFydCBldmVudCBieSBhIGJsYW5rIGludGVycnVwdGluZyBzdGFydCBldmVudFxuICAgICAgICAvLyB3aGVuIHRoZSB0YXJnZXQgaXMgbm90IGFuIGV2ZW50IHN1YiBwcm9jZXNzXG4gICAgICAgIGlmIChoYXNFcnJvckV2ZW50RGVmaW5pdGlvbihlbGVtZW50KSB8fFxuICAgICAgICAgICAgaGFzRXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbihlbGVtZW50KSB8fFxuICAgICAgICAgICAgaGFzQ29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbihlbGVtZW50KSkge1xuICAgICAgICAgIGNhbkV4ZWN1dGUucmVwbGFjZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgb2xkRWxlbWVudElkOiBlbGVtZW50LmlkLFxuICAgICAgICAgICAgbmV3RWxlbWVudFR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWlzKHRhcmdldCwgJ2JwbW46VHJhbnNhY3Rpb24nKSkge1xuICAgICAgaWYgKGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpDYW5jZWxFdmVudERlZmluaXRpb24nKSAmJlxuICAgICAgICAgIGVsZW1lbnQudHlwZSAhPT0gJ2xhYmVsJykge1xuXG4gICAgICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpFbmRFdmVudCcpICYmIGNhbkRyb3AoZWxlbWVudCwgdGFyZ2V0KSkge1xuICAgICAgICAgIGNhbkV4ZWN1dGUucmVwbGFjZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgb2xkRWxlbWVudElkOiBlbGVtZW50LmlkLFxuICAgICAgICAgICAgbmV3RWxlbWVudFR5cGU6ICdicG1uOkVuZEV2ZW50J1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSAmJiBjYW5BdHRhY2goZWxlbWVudCwgdGFyZ2V0LCBudWxsLCBwb3NpdGlvbikpIHtcbiAgICAgICAgICBjYW5FeGVjdXRlLnJlcGxhY2VtZW50cy5wdXNoKHtcbiAgICAgICAgICAgIG9sZEVsZW1lbnRJZDogZWxlbWVudC5pZCxcbiAgICAgICAgICAgIG5ld0VsZW1lbnRUeXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50J1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY2FuRXhlY3V0ZS5yZXBsYWNlbWVudHMubGVuZ3RoID8gY2FuRXhlY3V0ZSA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjYW5Nb3ZlKGVsZW1lbnRzLCB0YXJnZXQpIHtcblxuICAvLyBkbyBub3QgbW92ZSBzZWxlY3Rpb24gY29udGFpbmluZyBsYW5lc1xuICBpZiAoc29tZShlbGVtZW50cywgaXNMYW5lKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGFsbG93IGRlZmF1bHQgbW92ZSBjaGVjayB0byBzdGFydCBtb3ZlIG9wZXJhdGlvblxuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRzLmV2ZXJ5KGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gY2FuRHJvcChlbGVtZW50LCB0YXJnZXQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2FuQ3JlYXRlKHNoYXBlLCB0YXJnZXQsIHNvdXJjZSwgcG9zaXRpb24pIHtcblxuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc0xhYmVsKHNoYXBlKSB8fCBpc0dyb3VwKHNoYXBlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGlzU2FtZShzb3VyY2UsIHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBlbnN1cmUgd2UgZG8gbm90IGRyb3AgdGhlIGVsZW1lbnRcbiAgLy8gaW50byBzb3VyY2VcbiAgaWYgKHNvdXJjZSAmJiBpc1BhcmVudChzb3VyY2UsIHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gY2FuRHJvcChzaGFwZSwgdGFyZ2V0LCBwb3NpdGlvbikgfHwgY2FuSW5zZXJ0KHNoYXBlLCB0YXJnZXQsIHBvc2l0aW9uKTtcbn1cblxuZnVuY3Rpb24gY2FuUmVzaXplKHNoYXBlLCBuZXdCb3VuZHMpIHtcbiAgaWYgKGlzKHNoYXBlLCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcbiAgICByZXR1cm4gKFxuICAgICAgaXNFeHBhbmRlZChzaGFwZSkgJiYgKFxuICAgICAgICAhbmV3Qm91bmRzIHx8IChuZXdCb3VuZHMud2lkdGggPj0gMTAwICYmIG5ld0JvdW5kcy5oZWlnaHQgPj0gODApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGlmIChpcyhzaGFwZSwgJ2JwbW46TGFuZScpKSB7XG4gICAgcmV0dXJuICFuZXdCb3VuZHMgfHwgKG5ld0JvdW5kcy53aWR0aCA+PSAxMzAgJiYgbmV3Qm91bmRzLmhlaWdodCA+PSA2MCk7XG4gIH1cblxuICBpZiAoaXMoc2hhcGUsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICByZXR1cm4gIW5ld0JvdW5kcyB8fCAobmV3Qm91bmRzLndpZHRoID49IDI1MCAmJiBuZXdCb3VuZHMuaGVpZ2h0ID49IDUwKTtcbiAgfVxuXG4gIGlmIChpc1RleHRBbm5vdGF0aW9uKHNoYXBlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGlzR3JvdXAoc2hhcGUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2ssIHdoZXRoZXIgb25lIHNpZGUgb2YgdGhlIHJlbGF0aW9uc2hpcFxuICogaXMgYSB0ZXh0IGFubm90YXRpb24uXG4gKi9cbmZ1bmN0aW9uIGlzT25lVGV4dEFubm90YXRpb24oc291cmNlLCB0YXJnZXQpIHtcblxuICB2YXIgc291cmNlVGV4dEFubm90YXRpb24gPSBpc1RleHRBbm5vdGF0aW9uKHNvdXJjZSksXG4gICAgICB0YXJnZXRUZXh0QW5ub3RhdGlvbiA9IGlzVGV4dEFubm90YXRpb24odGFyZ2V0KTtcblxuICByZXR1cm4gKFxuICAgIChzb3VyY2VUZXh0QW5ub3RhdGlvbiB8fCB0YXJnZXRUZXh0QW5ub3RhdGlvbikgJiZcbiAgICAoc291cmNlVGV4dEFubm90YXRpb24gIT09IHRhcmdldFRleHRBbm5vdGF0aW9uKVxuICApO1xufVxuXG5cbmZ1bmN0aW9uIGNhbkNvbm5lY3RBc3NvY2lhdGlvbihzb3VyY2UsIHRhcmdldCkge1xuXG4gIC8vIGRvIG5vdCBjb25uZWN0IGNvbm5lY3Rpb25zXG4gIGlmIChpc0Nvbm5lY3Rpb24oc291cmNlKSB8fCBpc0Nvbm5lY3Rpb24odGFyZ2V0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGNvbXBlbnNhdGlvbiBib3VuZGFyeSBldmVudHMgYXJlIGV4Y2VwdGlvblxuICBpZiAoaXNDb21wZW5zYXRpb25Cb3VuZGFyeShzb3VyY2UpICYmIGlzRm9yQ29tcGVuc2F0aW9uKHRhcmdldCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIGRvbid0IGNvbm5lY3QgcGFyZW50IDwtPiBjaGlsZFxuICBpZiAoaXNQYXJlbnQodGFyZ2V0LCBzb3VyY2UpIHx8IGlzUGFyZW50KHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGFsbG93IGNvbm5lY3Rpb24gb2YgYXNzb2NpYXRpb25zIGJldHdlZW4gPCFUZXh0QW5ub3RhdGlvbj4gYW5kIDxUZXh0QW5ub3RhdGlvbj5cbiAgaWYgKGlzT25lVGV4dEFubm90YXRpb24oc291cmNlLCB0YXJnZXQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBjYW4gY29ubmVjdCBhc3NvY2lhdGlvbnMgd2hlcmUgd2UgY2FuIGNvbm5lY3RcbiAgLy8gZGF0YSBhc3NvY2lhdGlvbnMsIHRvbyAoISlcbiAgcmV0dXJuICEhY2FuQ29ubmVjdERhdGFBc3NvY2lhdGlvbihzb3VyY2UsIHRhcmdldCk7XG59XG5cbmZ1bmN0aW9uIGNhbkNvbm5lY3RNZXNzYWdlRmxvdyhzb3VyY2UsIHRhcmdldCkge1xuXG4gIC8vIGR1cmluZyBjb25uZWN0IHVzZXIgbWlnaHQgbW92ZSBtb3VzZSBvdXQgb2YgY2FudmFzXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9icG1uLWlvL2JwbW4tanMvaXNzdWVzLzEwMzNcbiAgaWYgKGdldFJvb3RFbGVtZW50KHNvdXJjZSkgJiYgIWdldFJvb3RFbGVtZW50KHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGlzTWVzc2FnZUZsb3dTb3VyY2Uoc291cmNlKSAmJlxuICAgIGlzTWVzc2FnZUZsb3dUYXJnZXQodGFyZ2V0KSAmJlxuICAgICFpc1NhbWVPcmdhbml6YXRpb24oc291cmNlLCB0YXJnZXQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNhbkNvbm5lY3RTZXF1ZW5jZUZsb3coc291cmNlLCB0YXJnZXQpIHtcblxuICBpZiAoXG4gICAgaXNFdmVudEJhc2VkVGFyZ2V0KHRhcmdldCkgJiZcbiAgICB0YXJnZXQuaW5jb21pbmcubGVuZ3RoID4gMCAmJlxuICAgIGFyZU91dGdvaW5nRXZlbnRCYXNlZEdhdGV3YXlDb25uZWN0aW9ucyh0YXJnZXQuaW5jb21pbmcpICYmXG4gICAgIWlzKHNvdXJjZSwgJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaXNTZXF1ZW5jZUZsb3dTb3VyY2Uoc291cmNlKSAmJlxuICAgICAgICAgaXNTZXF1ZW5jZUZsb3dUYXJnZXQodGFyZ2V0KSAmJlxuICAgICAgICAgaXNTYW1lU2NvcGUoc291cmNlLCB0YXJnZXQpICYmXG4gICAgICAgICAhKGlzKHNvdXJjZSwgJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknKSAmJiAhaXNFdmVudEJhc2VkVGFyZ2V0KHRhcmdldCkpO1xufVxuXG5cbmZ1bmN0aW9uIGNhbkNvbm5lY3REYXRhQXNzb2NpYXRpb24oc291cmNlLCB0YXJnZXQpIHtcblxuICBpZiAoaXNBbnkoc291cmNlLCBbICdicG1uOkRhdGFPYmplY3RSZWZlcmVuY2UnLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnIF0pICYmXG4gICAgICBpc0FueSh0YXJnZXQsIFsgJ2JwbW46QWN0aXZpdHknLCAnYnBtbjpUaHJvd0V2ZW50JyBdKSkge1xuICAgIHJldHVybiB7IHR5cGU6ICdicG1uOkRhdGFJbnB1dEFzc29jaWF0aW9uJyB9O1xuICB9XG5cbiAgaWYgKGlzQW55KHRhcmdldCwgWyAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJywgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJyBdKSAmJlxuICAgICAgaXNBbnkoc291cmNlLCBbICdicG1uOkFjdGl2aXR5JywgJ2JwbW46Q2F0Y2hFdmVudCcgXSkpIHtcbiAgICByZXR1cm4geyB0eXBlOiAnYnBtbjpEYXRhT3V0cHV0QXNzb2NpYXRpb24nIH07XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNhbkluc2VydChzaGFwZSwgZmxvdywgcG9zaXRpb24pIHtcblxuICBpZiAoIWZsb3cpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShzaGFwZSkpIHtcbiAgICBpZiAoc2hhcGUubGVuZ3RoICE9PSAxKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2hhcGUgPSBzaGFwZVswXTtcbiAgfVxuXG4gIGlmIChmbG93LnNvdXJjZSA9PT0gc2hhcGUgfHxcbiAgICAgIGZsb3cudGFyZ2V0ID09PSBzaGFwZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIHJldHVybiB0cnVlIGlmIHdlIGNhbiBkcm9wIG9uIHRoZVxuICAvLyB1bmRlcmx5aW5nIGZsb3cgcGFyZW50XG4gIC8vXG4gIC8vIGF0IHRoaXMgcG9pbnQgd2UgYXJlIG5vdCByZWFsbHkgYWJsZSB0byB0YWxrXG4gIC8vIGFib3V0IGNvbm5lY3Rpb24gcnVsZXMgKHlldClcblxuICByZXR1cm4gKFxuICAgIGlzQW55KGZsb3csIFsgJ2JwbW46U2VxdWVuY2VGbG93JywgJ2JwbW46TWVzc2FnZUZsb3cnIF0pICYmXG4gICAgIWlzTGFiZWwoZmxvdykgJiZcbiAgICBpcyhzaGFwZSwgJ2JwbW46Rmxvd05vZGUnKSAmJlxuICAgICFpcyhzaGFwZSwgJ2JwbW46Qm91bmRhcnlFdmVudCcpICYmXG4gICAgY2FuRHJvcChzaGFwZSwgZmxvdy5wYXJlbnQsIHBvc2l0aW9uKSk7XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVzKGVsZW1lbnRzLCBlbGVtZW50KSB7XG4gIHJldHVybiAoZWxlbWVudHMgJiYgZWxlbWVudCkgJiYgZWxlbWVudHMuaW5kZXhPZihlbGVtZW50KSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIGNhbkNvcHkoZWxlbWVudHMsIGVsZW1lbnQpIHtcbiAgaWYgKGlzTGFiZWwoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpMYW5lJykgJiYgIWluY2x1ZGVzKGVsZW1lbnRzLCBlbGVtZW50LnBhcmVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNPdXRnb2luZ0V2ZW50QmFzZWRHYXRld2F5Q29ubmVjdGlvbihjb25uZWN0aW9uKSB7XG5cbiAgaWYgKGNvbm5lY3Rpb24gJiYgY29ubmVjdGlvbi5zb3VyY2UpIHtcbiAgICByZXR1cm4gaXMoY29ubmVjdGlvbi5zb3VyY2UsICdicG1uOkV2ZW50QmFzZWRHYXRld2F5Jyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXJlT3V0Z29pbmdFdmVudEJhc2VkR2F0ZXdheUNvbm5lY3Rpb25zKGNvbm5lY3Rpb25zKSB7XG4gIGNvbm5lY3Rpb25zID0gY29ubmVjdGlvbnMgfHwgW107XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb25zLnNvbWUoaXNPdXRnb2luZ0V2ZW50QmFzZWRHYXRld2F5Q29ubmVjdGlvbik7XG59XG5cbmZ1bmN0aW9uIGdldFJvb3RFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFBhcmVudChlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgfHwgZ2V0UGFyZW50KGVsZW1lbnQsICdicG1uOkNvbGxhYm9yYXRpb24nKTtcbn1cbiIsImltcG9ydCBSdWxlc01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9ydWxlcyc7XG5cbmltcG9ydCBCcG1uUnVsZXMgZnJvbSAnLi9CcG1uUnVsZXMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgUnVsZXNNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFsgJ2JwbW5SdWxlcycgXSxcbiAgYnBtblJ1bGVzOiBbICd0eXBlJywgQnBtblJ1bGVzIF1cbn07XG4iLCJpbXBvcnQge1xuICBtYXAsXG4gIGZpbHRlcixcbiAgc29ydEJ5XG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0TGFiZWxcbn0gZnJvbSAnLi4vbGFiZWwtZWRpdGluZy9MYWJlbFV0aWwnO1xuXG5cbi8qKlxuICogUHJvdmlkZXMgYWJpbGl0eSB0byBzZWFyY2ggdGhyb3VnaCBCUE1OIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5TZWFyY2hQcm92aWRlcihlbGVtZW50UmVnaXN0cnksIHNlYXJjaFBhZCwgY2FudmFzKSB7XG5cbiAgdGhpcy5fZWxlbWVudFJlZ2lzdHJ5ID0gZWxlbWVudFJlZ2lzdHJ5O1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG5cbiAgc2VhcmNoUGFkLnJlZ2lzdGVyUHJvdmlkZXIodGhpcyk7XG59XG5cbkJwbW5TZWFyY2hQcm92aWRlci4kaW5qZWN0ID0gW1xuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ3NlYXJjaFBhZCcsXG4gICdjYW52YXMnXG5dO1xuXG5cbi8qKlxuICogRmluZHMgYWxsIGVsZW1lbnRzIHRoYXQgbWF0Y2ggZ2l2ZW4gcGF0dGVyblxuICpcbiAqIDxSZXN1bHQ+IDpcbiAqICB7XG4gKiAgICBwcmltYXJ5VG9rZW5zOiA8QXJyYXk8VG9rZW4+PixcbiAqICAgIHNlY29uZGFyeVRva2VuczogPEFycmF5PFRva2VuPj4sXG4gKiAgICBlbGVtZW50OiA8RWxlbWVudD5cbiAqICB9XG4gKlxuICogPFRva2VuPiA6XG4gKiAge1xuICogICAgbm9ybWFsfG1hdGNoZWQ6IDxzdHJpbmc+XG4gKiAgfVxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gcGF0dGVyblxuICogQHJldHVybiB7QXJyYXk8UmVzdWx0Pn1cbiAqL1xuQnBtblNlYXJjaFByb3ZpZGVyLnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24ocGF0dGVybikge1xuICB2YXIgcm9vdEVsZW1lbnQgPSB0aGlzLl9jYW52YXMuZ2V0Um9vdEVsZW1lbnQoKTtcblxuICB2YXIgZWxlbWVudHMgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudC5sYWJlbFRhcmdldCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG5cbiAgLy8gZG8gbm90IGluY2x1ZGUgcm9vdCBlbGVtZW50XG4gIGVsZW1lbnRzID0gZmlsdGVyKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQgIT09IHJvb3RFbGVtZW50O1xuICB9KTtcblxuICBlbGVtZW50cyA9IG1hcChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiB7XG4gICAgICBwcmltYXJ5VG9rZW5zOiBtYXRjaEFuZFNwbGl0KGdldExhYmVsKGVsZW1lbnQpLCBwYXR0ZXJuKSxcbiAgICAgIHNlY29uZGFyeVRva2VuczogbWF0Y2hBbmRTcGxpdChlbGVtZW50LmlkLCBwYXR0ZXJuKSxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICB9O1xuICB9KTtcblxuICAvLyBleGNsdWRlIG5vbi1tYXRjaGVkIGVsZW1lbnRzXG4gIGVsZW1lbnRzID0gZmlsdGVyKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGhhc01hdGNoZWQoZWxlbWVudC5wcmltYXJ5VG9rZW5zKSB8fCBoYXNNYXRjaGVkKGVsZW1lbnQuc2Vjb25kYXJ5VG9rZW5zKTtcbiAgfSk7XG5cbiAgZWxlbWVudHMgPSBzb3J0QnkoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0TGFiZWwoZWxlbWVudC5lbGVtZW50KSArIGVsZW1lbnQuZWxlbWVudC5pZDtcbiAgfSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufTtcblxuXG5mdW5jdGlvbiBoYXNNYXRjaGVkKHRva2Vucykge1xuICB2YXIgbWF0Y2hlZCA9IGZpbHRlcih0b2tlbnMsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gISF0Lm1hdGNoZWQ7XG4gIH0pO1xuXG4gIHJldHVybiBtYXRjaGVkLmxlbmd0aCA+IDA7XG59XG5cblxuZnVuY3Rpb24gbWF0Y2hBbmRTcGxpdCh0ZXh0LCBwYXR0ZXJuKSB7XG4gIHZhciB0b2tlbnMgPSBbXSxcbiAgICAgIG9yaWdpbmFsVGV4dCA9IHRleHQ7XG5cbiAgaWYgKCF0ZXh0KSB7XG4gICAgcmV0dXJuIHRva2VucztcbiAgfVxuXG4gIHRleHQgPSB0ZXh0LnRvTG93ZXJDYXNlKCk7XG4gIHBhdHRlcm4gPSBwYXR0ZXJuLnRvTG93ZXJDYXNlKCk7XG5cbiAgdmFyIGkgPSB0ZXh0LmluZGV4T2YocGF0dGVybik7XG5cbiAgaWYgKGkgPiAtMSkge1xuICAgIGlmIChpICE9PSAwKSB7XG4gICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgIG5vcm1hbDogb3JpZ2luYWxUZXh0LnN1YnN0cigwLCBpKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdG9rZW5zLnB1c2goe1xuICAgICAgbWF0Y2hlZDogb3JpZ2luYWxUZXh0LnN1YnN0cihpLCBwYXR0ZXJuLmxlbmd0aClcbiAgICB9KTtcblxuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCArIGkgPCB0ZXh0Lmxlbmd0aCkge1xuICAgICAgdG9rZW5zLnB1c2goe1xuICAgICAgICBub3JtYWw6IG9yaWdpbmFsVGV4dC5zdWJzdHIocGF0dGVybi5sZW5ndGggKyBpLCB0ZXh0Lmxlbmd0aClcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0b2tlbnMucHVzaCh7XG4gICAgICBub3JtYWw6IG9yaWdpbmFsVGV4dFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn0iLCJpbXBvcnQgU2VhcmNoUGFkTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NlYXJjaC1wYWQnO1xuXG5pbXBvcnQgQnBtblNlYXJjaFByb3ZpZGVyIGZyb20gJy4vQnBtblNlYXJjaFByb3ZpZGVyJztcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgU2VhcmNoUGFkTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdicG1uU2VhcmNoJ10sXG4gIGJwbW5TZWFyY2g6IFsgJ3R5cGUnLCBCcG1uU2VhcmNoUHJvdmlkZXIgXVxufTtcbiIsImltcG9ydCB7XHJcbiAgbWlkLFxyXG4gIHNldFNuYXBwZWRcclxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9TbmFwVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBpc0NtZCB9IGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2tleWJvYXJkL0tleWJvYXJkVXRpbCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGdldE9yaWVudGF0aW9uXHJcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBpc0FueSB9IGZyb20gJy4uL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsJztcclxuXHJcbmltcG9ydCB7IHNvbWUgfSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG52YXIgSElHSEVSX1BSSU9SSVRZID0gMTI1MDtcclxuXHJcbnZhciBCT1VOREFSWV9UT19IT1NUX1RIUkVTSE9MRCA9IDQwO1xyXG5cclxudmFyIFRBUkdFVF9CT1VORFNfUEFERElORyA9IDIwLFxyXG4gICAgVEFTS19CT1VORFNfUEFERElORyA9IDEwO1xyXG5cclxudmFyIFRBUkdFVF9DRU5URVJfUEFERElORyA9IDIwO1xyXG5cclxudmFyIEFYRVMgPSBbICd4JywgJ3knIF07XHJcblxyXG52YXIgYWJzID0gTWF0aC5hYnM7XHJcblxyXG4vKipcclxuICogU25hcCBkdXJpbmcgY29ubmVjdC5cclxuICpcclxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5Db25uZWN0U25hcHBpbmcoZXZlbnRCdXMpIHtcclxuICBldmVudEJ1cy5vbihbXHJcbiAgICAnY29ubmVjdC5ob3ZlcicsXHJcbiAgICAnY29ubmVjdC5tb3ZlJyxcclxuICAgICdjb25uZWN0LmVuZCcsXHJcbiAgXSwgSElHSEVSX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGUsXHJcbiAgICAgICAgc3RhcnQgPSBjb250ZXh0LnN0YXJ0LFxyXG4gICAgICAgIGhvdmVyID0gY29udGV4dC5ob3ZlcixcclxuICAgICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcclxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldDtcclxuXHJcbiAgICAvLyBkbyBOT1Qgc25hcCBvbiBDTURcclxuICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50ICYmIGlzQ21kKGV2ZW50Lm9yaWdpbmFsRXZlbnQpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWNvbnRleHQuaW5pdGlhbENvbm5lY3Rpb25TdGFydCkge1xyXG4gICAgICBjb250ZXh0LmluaXRpYWxDb25uZWN0aW9uU3RhcnQgPSBjb250ZXh0LmNvbm5lY3Rpb25TdGFydDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzbmFwIGhvdmVyXHJcbiAgICBpZiAoY2FuRXhlY3V0ZSAmJiBob3Zlcikge1xyXG4gICAgICBzbmFwVG9TaGFwZShldmVudCwgaG92ZXIsIGdldFRhcmdldEJvdW5kc1BhZGRpbmcoaG92ZXIpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaG92ZXIgJiYgaXNBbnlUeXBlKGNhbkV4ZWN1dGUsIFtcclxuICAgICAgJ2JwbW46QXNzb2NpYXRpb24nLFxyXG4gICAgICAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbicsXHJcbiAgICAgICdicG1uOkRhdGFPdXRwdXRBc3NvY2lhdGlvbicsXHJcbiAgICAgICdicG1uOlNlcXVlbmNlRmxvdydcclxuICAgIF0pKSB7XHJcbiAgICAgIGNvbnRleHQuY29ubmVjdGlvblN0YXJ0ID0gbWlkKHN0YXJ0KTtcclxuXHJcbiAgICAgIC8vIHNuYXAgaG92ZXJcclxuICAgICAgaWYgKGlzQW55KGhvdmVyLCBbICdicG1uOkV2ZW50JywgJ2JwbW46R2F0ZXdheScgXSkpIHtcclxuICAgICAgICBzbmFwVG9Qb3NpdGlvbihldmVudCwgbWlkKGhvdmVyKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHNuYXAgaG92ZXJcclxuICAgICAgaWYgKGlzQW55KGhvdmVyLCBbICdicG1uOlRhc2snLCAnYnBtbjpTdWJQcm9jZXNzJyBdKSkge1xyXG4gICAgICAgIHNuYXBUb1RhcmdldE1pZChldmVudCwgaG92ZXIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBzbmFwIHNvdXJjZSBhbmQgdGFyZ2V0XHJcbiAgICAgIGlmIChpcyhzb3VyY2UsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSAmJiB0YXJnZXQgPT09IHNvdXJjZS5ob3N0KSB7XHJcbiAgICAgICAgc25hcEJvdW5kYXJ5RXZlbnRMb29wKGV2ZW50KTtcclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSBpZiAoaXNUeXBlKGNhbkV4ZWN1dGUsICdicG1uOk1lc3NhZ2VGbG93JykpIHtcclxuXHJcbiAgICAgIGlmIChpcyhzdGFydCwgJ2JwbW46RXZlbnQnKSkge1xyXG5cclxuICAgICAgICAvLyBzbmFwIHN0YXJ0XHJcbiAgICAgICAgY29udGV4dC5jb25uZWN0aW9uU3RhcnQgPSBtaWQoc3RhcnQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXMoaG92ZXIsICdicG1uOkV2ZW50JykpIHtcclxuXHJcbiAgICAgICAgLy8gc25hcCBob3ZlclxyXG4gICAgICAgIHNuYXBUb1Bvc2l0aW9uKGV2ZW50LCBtaWQoaG92ZXIpKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyB1bi1zbmFwIHNvdXJjZVxyXG4gICAgICBjb250ZXh0LmNvbm5lY3Rpb25TdGFydCA9IGNvbnRleHQuaW5pdGlhbENvbm5lY3Rpb25TdGFydDtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuQnBtbkNvbm5lY3RTbmFwcGluZy4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07XHJcblxyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcblxyXG4vLyBzbmFwIHRvIHRhcmdldCBpZiBldmVudCBpbiB0YXJnZXRcclxuZnVuY3Rpb24gc25hcFRvU2hhcGUoZXZlbnQsIHRhcmdldCwgcGFkZGluZykge1xyXG4gIEFYRVMuZm9yRWFjaChmdW5jdGlvbihheGlzKSB7XHJcbiAgICB2YXIgZGltZW5zaW9uRm9yQXhpcyA9IGdldERpbWVuc2lvbkZvckF4aXMoYXhpcywgdGFyZ2V0KTtcclxuXHJcbiAgICBpZiAoZXZlbnRbIGF4aXMgXSA8IHRhcmdldFsgYXhpcyBdICsgcGFkZGluZykge1xyXG4gICAgICBzZXRTbmFwcGVkKGV2ZW50LCBheGlzLCB0YXJnZXRbIGF4aXMgXSArIHBhZGRpbmcpO1xyXG4gICAgfSBlbHNlIGlmIChldmVudFsgYXhpcyBdID4gdGFyZ2V0WyBheGlzIF0gKyBkaW1lbnNpb25Gb3JBeGlzIC0gcGFkZGluZykge1xyXG4gICAgICBzZXRTbmFwcGVkKGV2ZW50LCBheGlzLCB0YXJnZXRbIGF4aXMgXSArIGRpbWVuc2lvbkZvckF4aXMgLSBwYWRkaW5nKTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuLy8gc25hcCB0byB0YXJnZXQgbWlkIGlmIGV2ZW50IGluIHRhcmdldCBtaWRcclxuZnVuY3Rpb24gc25hcFRvVGFyZ2V0TWlkKGV2ZW50LCB0YXJnZXQpIHtcclxuICB2YXIgdGFyZ2V0TWlkID0gbWlkKHRhcmdldCk7XHJcblxyXG4gIEFYRVMuZm9yRWFjaChmdW5jdGlvbihheGlzKSB7XHJcbiAgICBpZiAoaXNNaWQoZXZlbnQsIHRhcmdldCwgYXhpcykpIHtcclxuICAgICAgc2V0U25hcHBlZChldmVudCwgYXhpcywgdGFyZ2V0TWlkWyBheGlzIF0pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG4vLyBzbmFwIHRvIHByZXZlbnQgbG9vcCBvdmVybGFwcGluZyBib3VuZGFyeSBldmVudFxyXG5mdW5jdGlvbiBzbmFwQm91bmRhcnlFdmVudExvb3AoZXZlbnQpIHtcclxuICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxyXG4gICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldDtcclxuXHJcbiAgaWYgKGlzUmV2ZXJzZShjb250ZXh0KSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgdmFyIHNvdXJjZU1pZCA9IG1pZChzb3VyY2UpLFxyXG4gICAgICBvcmllbnRhdGlvbiA9IGdldE9yaWVudGF0aW9uKHNvdXJjZU1pZCwgdGFyZ2V0LCAtMTApLFxyXG4gICAgICBheGVzID0gW107XHJcblxyXG4gIGlmICgvdG9wfGJvdHRvbS8udGVzdChvcmllbnRhdGlvbikpIHtcclxuICAgIGF4ZXMucHVzaCgneCcpO1xyXG4gIH1cclxuXHJcbiAgaWYgKC9sZWZ0fHJpZ2h0Ly50ZXN0KG9yaWVudGF0aW9uKSkge1xyXG4gICAgYXhlcy5wdXNoKCd5Jyk7XHJcbiAgfVxyXG5cclxuICBheGVzLmZvckVhY2goZnVuY3Rpb24oYXhpcykge1xyXG4gICAgdmFyIGNvb3JkaW5hdGUgPSBldmVudFsgYXhpcyBdLCBuZXdDb29yZGluYXRlO1xyXG5cclxuICAgIGlmIChhYnMoY29vcmRpbmF0ZSAtIHNvdXJjZU1pZFsgYXhpcyBdKSA8IEJPVU5EQVJZX1RPX0hPU1RfVEhSRVNIT0xEKSB7XHJcbiAgICAgIGlmIChjb29yZGluYXRlID4gc291cmNlTWlkWyBheGlzIF0pIHtcclxuICAgICAgICBuZXdDb29yZGluYXRlID0gc291cmNlTWlkWyBheGlzIF0gKyBCT1VOREFSWV9UT19IT1NUX1RIUkVTSE9MRDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBuZXdDb29yZGluYXRlID0gc291cmNlTWlkWyBheGlzIF0gLSBCT1VOREFSWV9UT19IT1NUX1RIUkVTSE9MRDtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2V0U25hcHBlZChldmVudCwgYXhpcywgbmV3Q29vcmRpbmF0ZSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNuYXBUb1Bvc2l0aW9uKGV2ZW50LCBwb3NpdGlvbikge1xyXG4gIHNldFNuYXBwZWQoZXZlbnQsICd4JywgcG9zaXRpb24ueCk7XHJcbiAgc2V0U25hcHBlZChldmVudCwgJ3knLCBwb3NpdGlvbi55KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNUeXBlKGF0dHJzLCB0eXBlKSB7XHJcbiAgcmV0dXJuIGF0dHJzICYmIGF0dHJzLnR5cGUgPT09IHR5cGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQW55VHlwZShhdHRycywgdHlwZXMpIHtcclxuICByZXR1cm4gc29tZSh0eXBlcywgZnVuY3Rpb24odHlwZSkge1xyXG4gICAgcmV0dXJuIGlzVHlwZShhdHRycywgdHlwZSk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldERpbWVuc2lvbkZvckF4aXMoYXhpcywgZWxlbWVudCkge1xyXG4gIHJldHVybiBheGlzID09PSAneCcgPyBlbGVtZW50LndpZHRoIDogZWxlbWVudC5oZWlnaHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFRhcmdldEJvdW5kc1BhZGRpbmcodGFyZ2V0KSB7XHJcbiAgaWYgKGlzKHRhcmdldCwgJ2JwbW46VGFzaycpKSB7XHJcbiAgICByZXR1cm4gVEFTS19CT1VORFNfUEFERElORztcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIFRBUkdFVF9CT1VORFNfUEFERElORztcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTWlkKGV2ZW50LCB0YXJnZXQsIGF4aXMpIHtcclxuICByZXR1cm4gZXZlbnRbIGF4aXMgXSA+IHRhcmdldFsgYXhpcyBdICsgVEFSR0VUX0NFTlRFUl9QQURESU5HXHJcbiAgICAmJiBldmVudFsgYXhpcyBdIDwgdGFyZ2V0WyBheGlzIF0gKyBnZXREaW1lbnNpb25Gb3JBeGlzKGF4aXMsIHRhcmdldCkgLSBUQVJHRVRfQ0VOVEVSX1BBRERJTkc7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzUmV2ZXJzZShjb250ZXh0KSB7XHJcbiAgdmFyIGhvdmVyID0gY29udGV4dC5ob3ZlcixcclxuICAgICAgc291cmNlID0gY29udGV4dC5zb3VyY2U7XHJcblxyXG4gIHJldHVybiBob3ZlciAmJiBzb3VyY2UgJiYgaG92ZXIgPT09IHNvdXJjZTtcclxufSIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDcmVhdGVNb3ZlU25hcHBpbmcgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc25hcHBpbmcvQ3JlYXRlTW92ZVNuYXBwaW5nJztcblxuaW1wb3J0IHtcbiAgaXNTbmFwcGVkLFxuICBzZXRTbmFwcGVkLFxuICB0b3BMZWZ0LFxuICBib3R0b21SaWdodFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9TbmFwVXRpbCc7XG5cbmltcG9ydCB7IGlzRXhwYW5kZWQgfSBmcm9tICcuLi8uLi91dGlsL0RpVXRpbCc7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBhc1RSQkwsXG4gIGdldE1pZFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7IGdldEJvdW5kYXJ5QXR0YWNobWVudCB9IGZyb20gJy4vQnBtblNuYXBwaW5nVXRpbCc7XG5cbmltcG9ydCB7IGZvckVhY2ggfSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciBISUdIX1BSSU9SSVRZID0gMTUwMDtcblxuXG4vKipcbiAqIFNuYXAgZHVyaW5nIGNyZWF0ZSBhbmQgbW92ZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkNyZWF0ZU1vdmVTbmFwcGluZyhldmVudEJ1cywgaW5qZWN0b3IpIHtcbiAgaW5qZWN0b3IuaW52b2tlKENyZWF0ZU1vdmVTbmFwcGluZywgdGhpcyk7XG5cbiAgLy8gY3JlYXRpbmcgZmlyc3QgcGFydGljaXBhbnRcbiAgZXZlbnRCdXMub24oWyAnY3JlYXRlLm1vdmUnLCAnY3JlYXRlLmVuZCcgXSwgSElHSF9QUklPUklUWSwgc2V0U25hcHBlZElmQ29uc3RyYWluZWQpO1xuXG4gIC8vIHNuYXAgYm91bmRhcnkgZXZlbnRzXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnY3JlYXRlLm1vdmUnLFxuICAgICdjcmVhdGUuZW5kJyxcbiAgICAnc2hhcGUubW92ZS5tb3ZlJyxcbiAgICAnc2hhcGUubW92ZS5lbmQnXG4gIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldDtcblxuICAgIHZhciBjYW5BdHRhY2ggPSBjYW5FeGVjdXRlICYmIChjYW5FeGVjdXRlID09PSAnYXR0YWNoJyB8fCBjYW5FeGVjdXRlLmF0dGFjaCk7XG5cbiAgICBpZiAoY2FuQXR0YWNoICYmICFpc1NuYXBwZWQoZXZlbnQpKSB7XG4gICAgICBzbmFwQm91bmRhcnlFdmVudChldmVudCwgdGFyZ2V0KTtcbiAgICB9XG4gIH0pO1xufVxuXG5pbmhlcml0cyhCcG1uQ3JlYXRlTW92ZVNuYXBwaW5nLCBDcmVhdGVNb3ZlU25hcHBpbmcpO1xuXG5CcG1uQ3JlYXRlTW92ZVNuYXBwaW5nLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdpbmplY3Rvcidcbl07XG5cbkJwbW5DcmVhdGVNb3ZlU25hcHBpbmcucHJvdG90eXBlLmluaXRTbmFwID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgdmFyIHNuYXBDb250ZXh0ID0gQ3JlYXRlTW92ZVNuYXBwaW5nLnByb3RvdHlwZS5pbml0U25hcC5jYWxsKHRoaXMsIGV2ZW50KTtcblxuICB2YXIgc2hhcGUgPSBldmVudC5zaGFwZTtcblxuICB2YXIgaXNNb3ZlID0gISF0aGlzLl9lbGVtZW50UmVnaXN0cnkuZ2V0KHNoYXBlLmlkKTtcblxuICAvLyBzbmFwIHRvIGRvY2tpbmcgcG9pbnRzXG4gIGZvckVhY2goc2hhcGUub3V0Z29pbmcsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICB2YXIgZG9ja2luZyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzWzBdO1xuXG4gICAgZG9ja2luZyA9IGRvY2tpbmcub3JpZ2luYWwgfHwgZG9ja2luZztcblxuICAgIHNuYXBDb250ZXh0LnNldFNuYXBPcmlnaW4oY29ubmVjdGlvbi5pZCArICctZG9ja2luZycsIGdldERvY2tpbmdTbmFwT3JpZ2luKGRvY2tpbmcsIGlzTW92ZSwgZXZlbnQpKTtcbiAgfSk7XG5cbiAgZm9yRWFjaChzaGFwZS5pbmNvbWluZywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgIHZhciBkb2NraW5nID0gY29ubmVjdGlvbi53YXlwb2ludHNbY29ubmVjdGlvbi53YXlwb2ludHMubGVuZ3RoIC0gMV07XG5cbiAgICBkb2NraW5nID0gZG9ja2luZy5vcmlnaW5hbCB8fCBkb2NraW5nO1xuXG4gICAgc25hcENvbnRleHQuc2V0U25hcE9yaWdpbihjb25uZWN0aW9uLmlkICsgJy1kb2NraW5nJywgZ2V0RG9ja2luZ1NuYXBPcmlnaW4oZG9ja2luZywgaXNNb3ZlLCBldmVudCkpO1xuICB9KTtcblxuICBpZiAoaXMoc2hhcGUsICdicG1uOlBhcnRpY2lwYW50JykpIHtcblxuICAgIC8vIHNuYXAgdG8gYm9yZGVycyB3aXRoIGhpZ2hlciBwcmlvcml0eVxuICAgIHNuYXBDb250ZXh0LnNldFNuYXBMb2NhdGlvbnMoWyAndG9wLWxlZnQnLCAnYm90dG9tLXJpZ2h0JywgJ21pZCcgXSk7XG4gIH1cblxuICByZXR1cm4gc25hcENvbnRleHQ7XG59O1xuXG5CcG1uQ3JlYXRlTW92ZVNuYXBwaW5nLnByb3RvdHlwZS5hZGRTbmFwVGFyZ2V0UG9pbnRzID0gZnVuY3Rpb24oc25hcFBvaW50cywgc2hhcGUsIHRhcmdldCkge1xuICBDcmVhdGVNb3ZlU25hcHBpbmcucHJvdG90eXBlLmFkZFNuYXBUYXJnZXRQb2ludHMuY2FsbCh0aGlzLCBzbmFwUG9pbnRzLCBzaGFwZSwgdGFyZ2V0KTtcblxuICB2YXIgc25hcFRhcmdldHMgPSB0aGlzLmdldFNuYXBUYXJnZXRzKHNoYXBlLCB0YXJnZXQpO1xuXG4gIGZvckVhY2goc25hcFRhcmdldHMsIGZ1bmN0aW9uKHNuYXBUYXJnZXQpIHtcblxuICAgIC8vIGhhbmRsZSBUUkJMIGFsaWdubWVudFxuICAgIC8vXG4gICAgLy8gKiB3aXRoIGNvbnRhaW5lciBlbGVtZW50c1xuICAgIC8vICogd2l0aCB0ZXh0IGFubm90YXRpb25zXG4gICAgaWYgKGlzQ29udGFpbmVyKHNuYXBUYXJnZXQpIHx8IGFyZUFsbChbIHNoYXBlLCBzbmFwVGFyZ2V0IF0sICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcbiAgICAgIHNuYXBQb2ludHMuYWRkKCd0b3AtbGVmdCcsIHRvcExlZnQoc25hcFRhcmdldCkpO1xuICAgICAgc25hcFBvaW50cy5hZGQoJ2JvdHRvbS1yaWdodCcsIGJvdHRvbVJpZ2h0KHNuYXBUYXJnZXQpKTtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciBlbGVtZW50UmVnaXN0cnkgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnk7XG5cbiAgLy8gc25hcCB0byBkb2NraW5nIHBvaW50cyBpZiBub3QgY3JlYXRlIG1vZGVcbiAgZm9yRWFjaChzaGFwZS5pbmNvbWluZywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgIGlmIChlbGVtZW50UmVnaXN0cnkuZ2V0KHNoYXBlLmlkKSkge1xuXG4gICAgICBpZiAoIWluY2x1ZGVzKHNuYXBUYXJnZXRzLCBjb25uZWN0aW9uLnNvdXJjZSkpIHtcbiAgICAgICAgc25hcFBvaW50cy5hZGQoJ21pZCcsIGdldE1pZChjb25uZWN0aW9uLnNvdXJjZSkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZG9ja2luZyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzWzBdO1xuICAgICAgc25hcFBvaW50cy5hZGQoY29ubmVjdGlvbi5pZCArICctZG9ja2luZycsIGRvY2tpbmcub3JpZ2luYWwgfHwgZG9ja2luZyk7XG4gICAgfVxuICB9KTtcblxuICBmb3JFYWNoKHNoYXBlLm91dGdvaW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgaWYgKGVsZW1lbnRSZWdpc3RyeS5nZXQoc2hhcGUuaWQpKSB7XG5cbiAgICAgIGlmICghaW5jbHVkZXMoc25hcFRhcmdldHMsIGNvbm5lY3Rpb24udGFyZ2V0KSkge1xuICAgICAgICBzbmFwUG9pbnRzLmFkZCgnbWlkJywgZ2V0TWlkKGNvbm5lY3Rpb24udGFyZ2V0KSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkb2NraW5nID0gY29ubmVjdGlvbi53YXlwb2ludHNbIGNvbm5lY3Rpb24ud2F5cG9pbnRzLmxlbmd0aCAtIDEgXTtcblxuICAgICAgc25hcFBvaW50cy5hZGQoY29ubmVjdGlvbi5pZCArICctZG9ja2luZycsIGRvY2tpbmcub3JpZ2luYWwgfHwgZG9ja2luZyk7XG4gICAgfVxuICB9KTtcblxuICAvLyBhZGQgc2VxdWVuY2UgZmxvdyBwYXJlbnRzIGFzIHNuYXAgdGFyZ2V0c1xuICBpZiAoaXModGFyZ2V0LCAnYnBtbjpTZXF1ZW5jZUZsb3cnKSkge1xuICAgIHNuYXBQb2ludHMgPSB0aGlzLmFkZFNuYXBUYXJnZXRQb2ludHMoc25hcFBvaW50cywgc2hhcGUsIHRhcmdldC5wYXJlbnQpO1xuICB9XG5cbiAgcmV0dXJuIHNuYXBQb2ludHM7XG59O1xuXG5CcG1uQ3JlYXRlTW92ZVNuYXBwaW5nLnByb3RvdHlwZS5nZXRTbmFwVGFyZ2V0cyA9IGZ1bmN0aW9uKHNoYXBlLCB0YXJnZXQpIHtcbiAgcmV0dXJuIENyZWF0ZU1vdmVTbmFwcGluZy5wcm90b3R5cGUuZ2V0U25hcFRhcmdldHMuY2FsbCh0aGlzLCBzaGFwZSwgdGFyZ2V0KVxuICAgIC5maWx0ZXIoZnVuY3Rpb24oc25hcFRhcmdldCkge1xuXG4gICAgICAvLyBkbyBub3Qgc25hcCB0byBsYW5lc1xuICAgICAgcmV0dXJuICFpcyhzbmFwVGFyZ2V0LCAnYnBtbjpMYW5lJyk7XG4gICAgfSk7XG59O1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZnVuY3Rpb24gc25hcEJvdW5kYXJ5RXZlbnQoZXZlbnQsIHRhcmdldCkge1xuICB2YXIgdGFyZ2V0VFJCTCA9IGFzVFJCTCh0YXJnZXQpO1xuXG4gIHZhciBkaXJlY3Rpb24gPSBnZXRCb3VuZGFyeUF0dGFjaG1lbnQoZXZlbnQsIHRhcmdldCk7XG5cbiAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gIHZhciBvZmZzZXQ7XG5cbiAgaWYgKHNoYXBlLnBhcmVudCkge1xuICAgIG9mZnNldCA9IHsgeDogMCwgeTogMCB9O1xuICB9IGVsc2Uge1xuICAgIG9mZnNldCA9IGdldE1pZChzaGFwZSk7XG4gIH1cblxuICBpZiAoL3RvcC8udGVzdChkaXJlY3Rpb24pKSB7XG4gICAgc2V0U25hcHBlZChldmVudCwgJ3knLCB0YXJnZXRUUkJMLnRvcCAtIG9mZnNldC55KTtcbiAgfSBlbHNlIGlmICgvYm90dG9tLy50ZXN0KGRpcmVjdGlvbikpIHtcbiAgICBzZXRTbmFwcGVkKGV2ZW50LCAneScsIHRhcmdldFRSQkwuYm90dG9tIC0gb2Zmc2V0LnkpO1xuICB9XG5cbiAgaWYgKC9sZWZ0Ly50ZXN0KGRpcmVjdGlvbikpIHtcbiAgICBzZXRTbmFwcGVkKGV2ZW50LCAneCcsIHRhcmdldFRSQkwubGVmdCAtIG9mZnNldC54KTtcbiAgfSBlbHNlIGlmICgvcmlnaHQvLnRlc3QoZGlyZWN0aW9uKSkge1xuICAgIHNldFNuYXBwZWQoZXZlbnQsICd4JywgdGFyZ2V0VFJCTC5yaWdodCAtIG9mZnNldC54KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhcmVBbGwoZWxlbWVudHMsIHR5cGUpIHtcbiAgcmV0dXJuIGVsZW1lbnRzLmV2ZXJ5KGZ1bmN0aW9uKGVsKSB7XG4gICAgcmV0dXJuIGlzKGVsLCB0eXBlKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzQ29udGFpbmVyKGVsZW1lbnQpIHtcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlN1YlByb2Nlc3MnKSAmJiBpc0V4cGFuZGVkKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKTtcbn1cblxuXG5mdW5jdGlvbiBzZXRTbmFwcGVkSWZDb25zdHJhaW5lZChldmVudCkge1xuICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICBjcmVhdGVDb25zdHJhaW50cyA9IGNvbnRleHQuY3JlYXRlQ29uc3RyYWludHM7XG5cbiAgaWYgKCFjcmVhdGVDb25zdHJhaW50cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0b3AgPSBjcmVhdGVDb25zdHJhaW50cy50b3AsXG4gICAgICByaWdodCA9IGNyZWF0ZUNvbnN0cmFpbnRzLnJpZ2h0LFxuICAgICAgYm90dG9tID0gY3JlYXRlQ29uc3RyYWludHMuYm90dG9tLFxuICAgICAgbGVmdCA9IGNyZWF0ZUNvbnN0cmFpbnRzLmxlZnQ7XG5cbiAgaWYgKChsZWZ0ICYmIGxlZnQgPj0gZXZlbnQueCkgfHwgKHJpZ2h0ICYmIHJpZ2h0IDw9IGV2ZW50LngpKSB7XG4gICAgc2V0U25hcHBlZChldmVudCwgJ3gnLCBldmVudC54KTtcbiAgfVxuXG4gIGlmICgodG9wICYmIHRvcCA+PSBldmVudC55KSB8fCAoYm90dG9tICYmIGJvdHRvbSA8PSBldmVudC55KSkge1xuICAgIHNldFNuYXBwZWQoZXZlbnQsICd5JywgZXZlbnQueSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHJldHVybiBhcnJheS5pbmRleE9mKHZhbHVlKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIGdldERvY2tpbmdTbmFwT3JpZ2luKGRvY2tpbmcsIGlzTW92ZSwgZXZlbnQpIHtcbiAgcmV0dXJuIGlzTW92ZSA/IChcbiAgICB7XG4gICAgICB4OiBkb2NraW5nLnggLSBldmVudC54LFxuICAgICAgeTogZG9ja2luZy55IC0gZXZlbnQueVxuICAgIH1cbiAgKSA6IHtcbiAgICB4OiBkb2NraW5nLngsXG4gICAgeTogZG9ja2luZy55XG4gIH07XG59XG4iLCJpbXBvcnQgeyBnZXRPcmllbnRhdGlvbiB9IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRCb3VuZGFyeUF0dGFjaG1lbnQocG9zaXRpb24sIHRhcmdldEJvdW5kcykge1xyXG5cclxuICB2YXIgb3JpZW50YXRpb24gPSBnZXRPcmllbnRhdGlvbihwb3NpdGlvbiwgdGFyZ2V0Qm91bmRzLCAtMTUpO1xyXG5cclxuICBpZiAob3JpZW50YXRpb24gIT09ICdpbnRlcnNlY3QnKSB7XHJcbiAgICByZXR1cm4gb3JpZW50YXRpb247XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxufSIsImltcG9ydCBCcG1uQ29ubmVjdFNuYXBwaW5nIGZyb20gJy4vQnBtbkNvbm5lY3RTbmFwcGluZyc7XG5pbXBvcnQgQnBtbkNyZWF0ZU1vdmVTbmFwcGluZyBmcm9tICcuL0JwbW5DcmVhdGVNb3ZlU25hcHBpbmcnO1xuaW1wb3J0IFNuYXBwaW5nTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NuYXBwaW5nJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogWyBTbmFwcGluZ01vZHVsZSBdLFxuICBfX2luaXRfXzogW1xuICAgICdjb25uZWN0U25hcHBpbmcnLFxuICAgICdjcmVhdGVNb3ZlU25hcHBpbmcnXG4gIF0sXG4gIGNvbm5lY3RTbmFwcGluZzogWyAndHlwZScsIEJwbW5Db25uZWN0U25hcHBpbmcgXSxcbiAgY3JlYXRlTW92ZVNuYXBwaW5nOiBbICd0eXBlJywgQnBtbkNyZWF0ZU1vdmVTbmFwcGluZyBdXG59OyIsImltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0xhYmVsRXh0ZXJuYWwsXG4gIGdldEV4dGVybmFsTGFiZWxCb3VuZHNcbn0gZnJvbSAnLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRNaWRcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0V4cGFuZGVkXG59IGZyb20gJy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0TGFiZWxcbn0gZnJvbSAnLi4vZmVhdHVyZXMvbGFiZWwtZWRpdGluZy9MYWJlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBlbGVtZW50VG9TdHJpbmdcbn0gZnJvbSAnLi9VdGlsJztcblxuXG5mdW5jdGlvbiBlbGVtZW50RGF0YShzZW1hbnRpYywgYXR0cnMpIHtcbiAgcmV0dXJuIGFzc2lnbih7XG4gICAgaWQ6IHNlbWFudGljLmlkLFxuICAgIHR5cGU6IHNlbWFudGljLiR0eXBlLFxuICAgIGJ1c2luZXNzT2JqZWN0OiBzZW1hbnRpY1xuICB9LCBhdHRycyk7XG59XG5cbmZ1bmN0aW9uIGdldFdheXBvaW50cyhibywgc291cmNlLCB0YXJnZXQpIHtcblxuICB2YXIgd2F5cG9pbnRzID0gYm8uZGkud2F5cG9pbnQ7XG5cbiAgaWYgKCF3YXlwb2ludHMgfHwgd2F5cG9pbnRzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gWyBnZXRNaWQoc291cmNlKSwgZ2V0TWlkKHRhcmdldCkgXTtcbiAgfVxuXG4gIHJldHVybiB3YXlwb2ludHMubWFwKGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4geyB4OiBwLngsIHk6IHAueSB9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbm90WWV0RHJhd24odHJhbnNsYXRlLCBzZW1hbnRpYywgcmVmU2VtYW50aWMsIHByb3BlcnR5KSB7XG4gIHJldHVybiBuZXcgRXJyb3IodHJhbnNsYXRlKCdlbGVtZW50IHtlbGVtZW50fSByZWZlcmVuY2VkIGJ5IHtyZWZlcmVuY2VkfSN7cHJvcGVydHl9IG5vdCB5ZXQgZHJhd24nLCB7XG4gICAgZWxlbWVudDogZWxlbWVudFRvU3RyaW5nKHJlZlNlbWFudGljKSxcbiAgICByZWZlcmVuY2VkOiBlbGVtZW50VG9TdHJpbmcoc2VtYW50aWMpLFxuICAgIHByb3BlcnR5OiBwcm9wZXJ0eVxuICB9KSk7XG59XG5cblxuLyoqXG4gKiBBbiBpbXBvcnRlciB0aGF0IGFkZHMgYnBtbiBlbGVtZW50cyB0byB0aGUgY2FudmFzXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7RWxlbWVudEZhY3Rvcnl9IGVsZW1lbnRGYWN0b3J5XG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2xhdGVcbiAqIEBwYXJhbSB7VGV4dFJlbmRlcmVyfSB0ZXh0UmVuZGVyZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkltcG9ydGVyKFxuICAgIGV2ZW50QnVzLCBjYW52YXMsIGVsZW1lbnRGYWN0b3J5LFxuICAgIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlLCB0ZXh0UmVuZGVyZXIpIHtcblxuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX2VsZW1lbnRGYWN0b3J5ID0gZWxlbWVudEZhY3Rvcnk7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fdHJhbnNsYXRlID0gdHJhbnNsYXRlO1xuICB0aGlzLl90ZXh0UmVuZGVyZXIgPSB0ZXh0UmVuZGVyZXI7XG59XG5cbkJwbW5JbXBvcnRlci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJyxcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICd0cmFuc2xhdGUnLFxuICAndGV4dFJlbmRlcmVyJ1xuXTtcblxuXG4vKipcbiAqIEFkZCBicG1uIGVsZW1lbnQgKHNlbWFudGljKSB0byB0aGUgY2FudmFzIG9udG8gdGhlXG4gKiBzcGVjaWZpZWQgcGFyZW50IHNoYXBlLlxuICovXG5CcG1uSW1wb3J0ZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHNlbWFudGljLCBwYXJlbnRFbGVtZW50KSB7XG5cbiAgdmFyIGRpID0gc2VtYW50aWMuZGksXG4gICAgICBlbGVtZW50LFxuICAgICAgdHJhbnNsYXRlID0gdGhpcy5fdHJhbnNsYXRlLFxuICAgICAgaGlkZGVuO1xuXG4gIHZhciBwYXJlbnRJbmRleDtcblxuICAvLyBST09UIEVMRU1FTlRcbiAgLy8gaGFuZGxlIHRoZSBzcGVjaWFsIGNhc2UgdGhhdCB3ZSBkZWFsIHdpdGggYVxuICAvLyBpbnZpc2libGUgcm9vdCBlbGVtZW50IChwcm9jZXNzIG9yIGNvbGxhYm9yYXRpb24pXG4gIGlmIChpcyhkaSwgJ2JwbW5kaTpCUE1OUGxhbmUnKSkge1xuXG4gICAgLy8gYWRkIGEgdmlydHVhbCBlbGVtZW50IChub3QgYmVpbmcgZHJhd24pXG4gICAgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRGYWN0b3J5LmNyZWF0ZVJvb3QoZWxlbWVudERhdGEoc2VtYW50aWMpKTtcblxuICAgIHRoaXMuX2NhbnZhcy5zZXRSb290RWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIC8vIFNIQVBFXG4gIGVsc2UgaWYgKGlzKGRpLCAnYnBtbmRpOkJQTU5TaGFwZScpKSB7XG5cbiAgICB2YXIgY29sbGFwc2VkID0gIWlzRXhwYW5kZWQoc2VtYW50aWMpLFxuICAgICAgICBpc0ZyYW1lID0gaXNGcmFtZUVsZW1lbnQoc2VtYW50aWMpO1xuICAgIGhpZGRlbiA9IHBhcmVudEVsZW1lbnQgJiYgKHBhcmVudEVsZW1lbnQuaGlkZGVuIHx8IHBhcmVudEVsZW1lbnQuY29sbGFwc2VkKTtcblxuICAgIHZhciBib3VuZHMgPSBzZW1hbnRpYy5kaS5ib3VuZHM7XG5cbiAgICBlbGVtZW50ID0gdGhpcy5fZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoZWxlbWVudERhdGEoc2VtYW50aWMsIHtcbiAgICAgIGNvbGxhcHNlZDogY29sbGFwc2VkLFxuICAgICAgaGlkZGVuOiBoaWRkZW4sXG4gICAgICB4OiBNYXRoLnJvdW5kKGJvdW5kcy54KSxcbiAgICAgIHk6IE1hdGgucm91bmQoYm91bmRzLnkpLFxuICAgICAgd2lkdGg6IE1hdGgucm91bmQoYm91bmRzLndpZHRoKSxcbiAgICAgIGhlaWdodDogTWF0aC5yb3VuZChib3VuZHMuaGVpZ2h0KSxcbiAgICAgIGlzRnJhbWU6IGlzRnJhbWVcbiAgICB9KSk7XG5cbiAgICBpZiAoaXMoc2VtYW50aWMsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSkge1xuICAgICAgdGhpcy5fYXR0YWNoQm91bmRhcnkoc2VtYW50aWMsIGVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8vIGluc2VydCBsYW5lcyBiZWhpbmQgb3RoZXIgZmxvdyBub2RlcyAoY2YuICM3MjcpXG4gICAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpMYW5lJykpIHtcbiAgICAgIHBhcmVudEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaXMoc2VtYW50aWMsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScpKSB7XG5cbiAgICAgIC8vIGNoZWNrIHdoZXRoZXIgZGF0YSBzdG9yZSBpcyBpbnNpZGUgb3VyIG91dHNpZGUgb2YgaXRzIHNlbWFudGljIHBhcmVudFxuICAgICAgaWYgKCFpc1BvaW50SW5zaWRlQkJveChwYXJlbnRFbGVtZW50LCBnZXRNaWQoYm91bmRzKSkpIHtcbiAgICAgICAgcGFyZW50RWxlbWVudCA9IHRoaXMuX2NhbnZhcy5nZXRSb290RWxlbWVudCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2NhbnZhcy5hZGRTaGFwZShlbGVtZW50LCBwYXJlbnRFbGVtZW50LCBwYXJlbnRJbmRleCk7XG4gIH1cblxuICAvLyBDT05ORUNUSU9OXG4gIGVsc2UgaWYgKGlzKGRpLCAnYnBtbmRpOkJQTU5FZGdlJykpIHtcblxuICAgIHZhciBzb3VyY2UgPSB0aGlzLl9nZXRTb3VyY2Uoc2VtYW50aWMpLFxuICAgICAgICB0YXJnZXQgPSB0aGlzLl9nZXRUYXJnZXQoc2VtYW50aWMpO1xuXG4gICAgaGlkZGVuID0gcGFyZW50RWxlbWVudCAmJiAocGFyZW50RWxlbWVudC5oaWRkZW4gfHwgcGFyZW50RWxlbWVudC5jb2xsYXBzZWQpO1xuXG4gICAgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRGYWN0b3J5LmNyZWF0ZUNvbm5lY3Rpb24oZWxlbWVudERhdGEoc2VtYW50aWMsIHtcbiAgICAgIGhpZGRlbjogaGlkZGVuLFxuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHdheXBvaW50czogZ2V0V2F5cG9pbnRzKHNlbWFudGljLCBzb3VyY2UsIHRhcmdldClcbiAgICB9KSk7XG5cbiAgICBpZiAoaXMoc2VtYW50aWMsICdicG1uOkRhdGFBc3NvY2lhdGlvbicpKSB7XG5cbiAgICAgIC8vIHJlbmRlciBhbHdheXMgb24gdG9wOyB0aGlzIGVuc3VyZXMgRGF0YUFzc29jaWF0aW9uc1xuICAgICAgLy8gYXJlIHJlbmRlcmVkIGNvcnJlY3RseSBhY3Jvc3MgZGlmZmVyZW50IFwiaGFja3NcIiBwZW9wbGVcbiAgICAgIC8vIGxvdmUgdG8gbW9kZWwgc3VjaCBhcyBjcm9zcyBwYXJ0aWNpcGFudCAvIHN1YiBwcm9jZXNzXG4gICAgICAvLyBhc3NvY2lhdGlvbnNcbiAgICAgIHBhcmVudEVsZW1lbnQgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGluc2VydCBzZXF1ZW5jZSBmbG93cyBiZWhpbmQgb3RoZXIgZmxvdyBub2RlcyAoY2YuICM3MjcpXG4gICAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpTZXF1ZW5jZUZsb3cnKSkge1xuICAgICAgcGFyZW50SW5kZXggPSAwO1xuICAgIH1cblxuICAgIHRoaXMuX2NhbnZhcy5hZGRDb25uZWN0aW9uKGVsZW1lbnQsIHBhcmVudEVsZW1lbnQsIHBhcmVudEluZGV4KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCd1bmtub3duIGRpIHtkaX0gZm9yIGVsZW1lbnQge3NlbWFudGljfScsIHtcbiAgICAgIGRpOiBlbGVtZW50VG9TdHJpbmcoZGkpLFxuICAgICAgc2VtYW50aWM6IGVsZW1lbnRUb1N0cmluZyhzZW1hbnRpYylcbiAgICB9KSk7XG4gIH1cblxuICAvLyAob3B0aW9uYWwpIExBQkVMXG4gIGlmIChpc0xhYmVsRXh0ZXJuYWwoc2VtYW50aWMpICYmIGdldExhYmVsKGVsZW1lbnQpKSB7XG4gICAgdGhpcy5hZGRMYWJlbChzZW1hbnRpYywgZWxlbWVudCk7XG4gIH1cblxuXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2JwbW5FbGVtZW50LmFkZGVkJywgeyBlbGVtZW50OiBlbGVtZW50IH0pO1xuXG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuXG4vKipcbiAqIEF0dGFjaCB0aGUgYm91bmRhcnkgZWxlbWVudCB0byB0aGUgZ2l2ZW4gaG9zdFxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gYm91bmRhcnlTZW1hbnRpY1xuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gYm91bmRhcnlFbGVtZW50XG4gKi9cbkJwbW5JbXBvcnRlci5wcm90b3R5cGUuX2F0dGFjaEJvdW5kYXJ5ID0gZnVuY3Rpb24oYm91bmRhcnlTZW1hbnRpYywgYm91bmRhcnlFbGVtZW50KSB7XG4gIHZhciB0cmFuc2xhdGUgPSB0aGlzLl90cmFuc2xhdGU7XG4gIHZhciBob3N0U2VtYW50aWMgPSBib3VuZGFyeVNlbWFudGljLmF0dGFjaGVkVG9SZWY7XG5cbiAgaWYgKCFob3N0U2VtYW50aWMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdtaXNzaW5nIHtzZW1hbnRpY30jYXR0YWNoZWRUb1JlZicsIHtcbiAgICAgIHNlbWFudGljOiBlbGVtZW50VG9TdHJpbmcoYm91bmRhcnlTZW1hbnRpYylcbiAgICB9KSk7XG4gIH1cblxuICB2YXIgaG9zdCA9IHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5nZXQoaG9zdFNlbWFudGljLmlkKSxcbiAgICAgIGF0dGFjaGVycyA9IGhvc3QgJiYgaG9zdC5hdHRhY2hlcnM7XG5cbiAgaWYgKCFob3N0KSB7XG4gICAgdGhyb3cgbm90WWV0RHJhd24odHJhbnNsYXRlLCBib3VuZGFyeVNlbWFudGljLCBob3N0U2VtYW50aWMsICdhdHRhY2hlZFRvUmVmJyk7XG4gIH1cblxuICAvLyB3aXJlIGVsZW1lbnQuaG9zdCA8PiBob3N0LmF0dGFjaGVyc1xuICBib3VuZGFyeUVsZW1lbnQuaG9zdCA9IGhvc3Q7XG5cbiAgaWYgKCFhdHRhY2hlcnMpIHtcbiAgICBob3N0LmF0dGFjaGVycyA9IGF0dGFjaGVycyA9IFtdO1xuICB9XG5cbiAgaWYgKGF0dGFjaGVycy5pbmRleE9mKGJvdW5kYXJ5RWxlbWVudCkgPT09IC0xKSB7XG4gICAgYXR0YWNoZXJzLnB1c2goYm91bmRhcnlFbGVtZW50KTtcbiAgfVxufTtcblxuXG4vKipcbiAqIGFkZCBsYWJlbCBmb3IgYW4gZWxlbWVudFxuICovXG5CcG1uSW1wb3J0ZXIucHJvdG90eXBlLmFkZExhYmVsID0gZnVuY3Rpb24oc2VtYW50aWMsIGVsZW1lbnQpIHtcbiAgdmFyIGJvdW5kcyxcbiAgICAgIHRleHQsXG4gICAgICBsYWJlbDtcblxuICBib3VuZHMgPSBnZXRFeHRlcm5hbExhYmVsQm91bmRzKHNlbWFudGljLCBlbGVtZW50KTtcblxuICB0ZXh0ID0gZ2V0TGFiZWwoZWxlbWVudCk7XG5cbiAgaWYgKHRleHQpIHtcblxuICAgIC8vIGdldCBjb3JyZWN0ZWQgYm91bmRzIGZyb20gYWN0dWFsIGxheW91dGVkIHRleHRcbiAgICBib3VuZHMgPSB0aGlzLl90ZXh0UmVuZGVyZXIuZ2V0RXh0ZXJuYWxMYWJlbEJvdW5kcyhib3VuZHMsIHRleHQpO1xuICB9XG5cbiAgbGFiZWwgPSB0aGlzLl9lbGVtZW50RmFjdG9yeS5jcmVhdGVMYWJlbChlbGVtZW50RGF0YShzZW1hbnRpYywge1xuICAgIGlkOiBzZW1hbnRpYy5pZCArICdfbGFiZWwnLFxuICAgIGxhYmVsVGFyZ2V0OiBlbGVtZW50LFxuICAgIHR5cGU6ICdsYWJlbCcsXG4gICAgaGlkZGVuOiBlbGVtZW50LmhpZGRlbiB8fCAhZ2V0TGFiZWwoZWxlbWVudCksXG4gICAgeDogTWF0aC5yb3VuZChib3VuZHMueCksXG4gICAgeTogTWF0aC5yb3VuZChib3VuZHMueSksXG4gICAgd2lkdGg6IE1hdGgucm91bmQoYm91bmRzLndpZHRoKSxcbiAgICBoZWlnaHQ6IE1hdGgucm91bmQoYm91bmRzLmhlaWdodClcbiAgfSkpO1xuXG4gIHJldHVybiB0aGlzLl9jYW52YXMuYWRkU2hhcGUobGFiZWwsIGVsZW1lbnQucGFyZW50KTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBkcmF3biBjb25uZWN0aW9uIGVuZCBiYXNlZCBvbiB0aGUgZ2l2ZW4gc2lkZS5cbiAqXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGVuZCBpcyBub3QgeWV0IGRyYXduXG4gKi9cbkJwbW5JbXBvcnRlci5wcm90b3R5cGUuX2dldEVuZCA9IGZ1bmN0aW9uKHNlbWFudGljLCBzaWRlKSB7XG5cbiAgdmFyIGVsZW1lbnQsXG4gICAgICByZWZTZW1hbnRpYyxcbiAgICAgIHR5cGUgPSBzZW1hbnRpYy4kdHlwZSxcbiAgICAgIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcblxuICByZWZTZW1hbnRpYyA9IHNlbWFudGljW3NpZGUgKyAnUmVmJ107XG5cbiAgLy8gaGFuZGxlIG15c3RlcmlvdXMgaXNNYW55IERhdGFBc3NvY2lhdGlvbiNzb3VyY2VSZWZcbiAgaWYgKHNpZGUgPT09ICdzb3VyY2UnICYmIHR5cGUgPT09ICdicG1uOkRhdGFJbnB1dEFzc29jaWF0aW9uJykge1xuICAgIHJlZlNlbWFudGljID0gcmVmU2VtYW50aWMgJiYgcmVmU2VtYW50aWNbMF07XG4gIH1cblxuICAvLyBmaXggc291cmNlIC8gdGFyZ2V0IGZvciBEYXRhSW5wdXRBc3NvY2lhdGlvbiAvIERhdGFPdXRwdXRBc3NvY2lhdGlvblxuICBpZiAoc2lkZSA9PT0gJ3NvdXJjZScgJiYgdHlwZSA9PT0gJ2JwbW46RGF0YU91dHB1dEFzc29jaWF0aW9uJyB8fFxuICAgICAgc2lkZSA9PT0gJ3RhcmdldCcgJiYgdHlwZSA9PT0gJ2JwbW46RGF0YUlucHV0QXNzb2NpYXRpb24nKSB7XG5cbiAgICByZWZTZW1hbnRpYyA9IHNlbWFudGljLiRwYXJlbnQ7XG4gIH1cblxuICBlbGVtZW50ID0gcmVmU2VtYW50aWMgJiYgdGhpcy5fZ2V0RWxlbWVudChyZWZTZW1hbnRpYyk7XG5cbiAgaWYgKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIGlmIChyZWZTZW1hbnRpYykge1xuICAgIHRocm93IG5vdFlldERyYXduKHRyYW5zbGF0ZSwgc2VtYW50aWMsIHJlZlNlbWFudGljLCBzaWRlICsgJ1JlZicpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ3tzZW1hbnRpY30je3NpZGV9IFJlZiBub3Qgc3BlY2lmaWVkJywge1xuICAgICAgc2VtYW50aWM6IGVsZW1lbnRUb1N0cmluZyhzZW1hbnRpYyksXG4gICAgICBzaWRlOiBzaWRlXG4gICAgfSkpO1xuICB9XG59O1xuXG5CcG1uSW1wb3J0ZXIucHJvdG90eXBlLl9nZXRTb3VyY2UgPSBmdW5jdGlvbihzZW1hbnRpYykge1xuICByZXR1cm4gdGhpcy5fZ2V0RW5kKHNlbWFudGljLCAnc291cmNlJyk7XG59O1xuXG5CcG1uSW1wb3J0ZXIucHJvdG90eXBlLl9nZXRUYXJnZXQgPSBmdW5jdGlvbihzZW1hbnRpYykge1xuICByZXR1cm4gdGhpcy5fZ2V0RW5kKHNlbWFudGljLCAndGFyZ2V0Jyk7XG59O1xuXG5cbkJwbW5JbXBvcnRlci5wcm90b3R5cGUuX2dldEVsZW1lbnQgPSBmdW5jdGlvbihzZW1hbnRpYykge1xuICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldChzZW1hbnRpYy5pZCk7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gaXNQb2ludEluc2lkZUJCb3goYmJveCwgcG9pbnQpIHtcbiAgdmFyIHggPSBwb2ludC54LFxuICAgICAgeSA9IHBvaW50Lnk7XG5cbiAgcmV0dXJuIHggPj0gYmJveC54ICYmXG4gICAgeCA8PSBiYm94LnggKyBiYm94LndpZHRoICYmXG4gICAgeSA+PSBiYm94LnkgJiZcbiAgICB5IDw9IGJib3gueSArIGJib3guaGVpZ2h0O1xufVxuXG5mdW5jdGlvbiBpc0ZyYW1lRWxlbWVudChzZW1hbnRpYykge1xuICByZXR1cm4gaXMoc2VtYW50aWMsICdicG1uOkdyb3VwJyk7XG59IiwiaW1wb3J0IHtcbiAgZmlsdGVyLFxuICBmaW5kLFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IFJlZnMgZnJvbSAnb2JqZWN0LXJlZnMnO1xuXG5pbXBvcnQge1xuICBlbGVtZW50VG9TdHJpbmdcbn0gZnJvbSAnLi9VdGlsJztcblxudmFyIGRpUmVmcyA9IG5ldyBSZWZzKFxuICB7IG5hbWU6ICdicG1uRWxlbWVudCcsIGVudW1lcmFibGU6IHRydWUgfSxcbiAgeyBuYW1lOiAnZGknLCBjb25maWd1cmFibGU6IHRydWUgfVxuKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYW4gZWxlbWVudCBoYXMgdGhlIGdpdmVuIG1ldGEtbW9kZWwgdHlwZVxuICpcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9ICBlbGVtZW50XG4gKiBAcGFyYW0gIHtzdHJpbmd9ICAgICAgICAgdHlwZVxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzKGVsZW1lbnQsIHR5cGUpIHtcbiAgcmV0dXJuIGVsZW1lbnQuJGluc3RhbmNlT2YodHlwZSk7XG59XG5cblxuLyoqXG4gKiBGaW5kIGEgc3VpdGFibGUgZGlzcGxheSBjYW5kaWRhdGUgZm9yIGRlZmluaXRpb25zIHdoZXJlIHRoZSBESSBkb2VzIG5vdFxuICogY29ycmVjdGx5IHNwZWNpZnkgb25lLlxuICovXG5mdW5jdGlvbiBmaW5kRGlzcGxheUNhbmRpZGF0ZShkZWZpbml0aW9ucykge1xuICByZXR1cm4gZmluZChkZWZpbml0aW9ucy5yb290RWxlbWVudHMsIGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gaXMoZSwgJ2JwbW46UHJvY2VzcycpIHx8IGlzKGUsICdicG1uOkNvbGxhYm9yYXRpb24nKTtcbiAgfSk7XG59XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtblRyZWVXYWxrZXIoaGFuZGxlciwgdHJhbnNsYXRlKSB7XG5cbiAgLy8gbGlzdCBvZiBjb250YWluZXJzIGFscmVhZHkgd2Fsa2VkXG4gIHZhciBoYW5kbGVkRWxlbWVudHMgPSB7fTtcblxuICAvLyBsaXN0IG9mIGVsZW1lbnRzIHRvIGhhbmRsZSBkZWZlcnJlZCB0byBlbnN1cmVcbiAgLy8gcHJlcmVxdWlzaXRlcyBhcmUgZHJhd25cbiAgdmFyIGRlZmVycmVkID0gW107XG5cbiAgLy8gSGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgZnVuY3Rpb24gY29udGV4dHVhbChmbiwgY3R4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGZuKGUsIGN0eCk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZWQoZWxlbWVudCkge1xuICAgIGhhbmRsZWRFbGVtZW50c1tlbGVtZW50LmlkXSA9IGVsZW1lbnQ7XG4gIH1cblxuICBmdW5jdGlvbiBpc0hhbmRsZWQoZWxlbWVudCkge1xuICAgIHJldHVybiBoYW5kbGVkRWxlbWVudHNbZWxlbWVudC5pZF07XG4gIH1cblxuICBmdW5jdGlvbiB2aXNpdChlbGVtZW50LCBjdHgpIHtcblxuICAgIHZhciBnZnggPSBlbGVtZW50LmdmeDtcblxuICAgIC8vIGF2b2lkIG11bHRpcGxlIHJlbmRlcmluZyBvZiBlbGVtZW50c1xuICAgIGlmIChnZngpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgdHJhbnNsYXRlKCdhbHJlYWR5IHJlbmRlcmVkIHtlbGVtZW50fScsIHsgZWxlbWVudDogZWxlbWVudFRvU3RyaW5nKGVsZW1lbnQpIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGNhbGwgaGFuZGxlclxuICAgIHJldHVybiBoYW5kbGVyLmVsZW1lbnQoZWxlbWVudCwgY3R4KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZpc2l0Um9vdChlbGVtZW50LCBkaWFncmFtKSB7XG4gICAgcmV0dXJuIGhhbmRsZXIucm9vdChlbGVtZW50LCBkaWFncmFtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZpc2l0SWZEaShlbGVtZW50LCBjdHgpIHtcblxuICAgIHRyeSB7XG4gICAgICB2YXIgZ2Z4ID0gZWxlbWVudC5kaSAmJiB2aXNpdChlbGVtZW50LCBjdHgpO1xuXG4gICAgICBoYW5kbGVkKGVsZW1lbnQpO1xuXG4gICAgICByZXR1cm4gZ2Z4O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ0Vycm9yKGUubWVzc2FnZSwgeyBlbGVtZW50OiBlbGVtZW50LCBlcnJvcjogZSB9KTtcblxuICAgICAgY29uc29sZS5lcnJvcih0cmFuc2xhdGUoJ2ZhaWxlZCB0byBpbXBvcnQge2VsZW1lbnR9JywgeyBlbGVtZW50OiBlbGVtZW50VG9TdHJpbmcoZWxlbWVudCkgfSkpO1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBsb2dFcnJvcihtZXNzYWdlLCBjb250ZXh0KSB7XG4gICAgaGFuZGxlci5lcnJvcihtZXNzYWdlLCBjb250ZXh0KTtcbiAgfVxuXG4gIC8vIERJIGhhbmRsaW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBmdW5jdGlvbiByZWdpc3RlckRpKGRpKSB7XG4gICAgdmFyIGJwbW5FbGVtZW50ID0gZGkuYnBtbkVsZW1lbnQ7XG5cbiAgICBpZiAoYnBtbkVsZW1lbnQpIHtcbiAgICAgIGlmIChicG1uRWxlbWVudC5kaSkge1xuICAgICAgICBsb2dFcnJvcihcbiAgICAgICAgICB0cmFuc2xhdGUoJ211bHRpcGxlIERJIGVsZW1lbnRzIGRlZmluZWQgZm9yIHtlbGVtZW50fScsIHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnRUb1N0cmluZyhicG1uRWxlbWVudClcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7IGVsZW1lbnQ6IGJwbW5FbGVtZW50IH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpUmVmcy5iaW5kKGJwbW5FbGVtZW50LCAnZGknKTtcbiAgICAgICAgYnBtbkVsZW1lbnQuZGkgPSBkaTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9nRXJyb3IoXG4gICAgICAgIHRyYW5zbGF0ZSgnbm8gYnBtbkVsZW1lbnQgcmVmZXJlbmNlZCBpbiB7ZWxlbWVudH0nLCB7XG4gICAgICAgICAgZWxlbWVudDogZWxlbWVudFRvU3RyaW5nKGRpKVxuICAgICAgICB9KSxcbiAgICAgICAgeyBlbGVtZW50OiBkaSB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZURpYWdyYW0oZGlhZ3JhbSkge1xuICAgIGhhbmRsZVBsYW5lKGRpYWdyYW0ucGxhbmUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUGxhbmUocGxhbmUpIHtcbiAgICByZWdpc3RlckRpKHBsYW5lKTtcblxuICAgIGZvckVhY2gocGxhbmUucGxhbmVFbGVtZW50LCBoYW5kbGVQbGFuZUVsZW1lbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUGxhbmVFbGVtZW50KHBsYW5lRWxlbWVudCkge1xuICAgIHJlZ2lzdGVyRGkocGxhbmVFbGVtZW50KTtcbiAgfVxuXG5cbiAgLy8gU2VtYW50aWMgaGFuZGxpbmcgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBIYW5kbGUgZGVmaW5pdGlvbnMgYW5kIHJldHVybiB0aGUgcmVuZGVyZWQgZGlhZ3JhbSAoaWYgYW55KVxuICAgKlxuICAgKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGRlZmluaXRpb25zIHRvIHdhbGsgYW5kIGltcG9ydFxuICAgKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IFtkaWFncmFtXSBzcGVjaWZpYyBkaWFncmFtIHRvIGltcG9ydCBhbmQgZGlzcGxheVxuICAgKlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgbm8gZGlhZ3JhbSB0byBkaXNwbGF5IGNvdWxkIGJlIGZvdW5kXG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVEZWZpbml0aW9ucyhkZWZpbml0aW9ucywgZGlhZ3JhbSkge1xuXG4gICAgLy8gbWFrZSBzdXJlIHdlIHdhbGsgdGhlIGNvcnJlY3QgYnBtbkVsZW1lbnRcblxuICAgIHZhciBkaWFncmFtcyA9IGRlZmluaXRpb25zLmRpYWdyYW1zO1xuXG4gICAgaWYgKGRpYWdyYW0gJiYgZGlhZ3JhbXMuaW5kZXhPZihkaWFncmFtKSA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ2RpYWdyYW0gbm90IHBhcnQgb2YgYnBtbjpEZWZpbml0aW9ucycpKTtcbiAgICB9XG5cbiAgICBpZiAoIWRpYWdyYW0gJiYgZGlhZ3JhbXMgJiYgZGlhZ3JhbXMubGVuZ3RoKSB7XG4gICAgICBkaWFncmFtID0gZGlhZ3JhbXNbMF07XG4gICAgfVxuXG4gICAgLy8gbm8gZGlhZ3JhbSAtPiBub3RoaW5nIHRvIGltcG9ydFxuICAgIGlmICghZGlhZ3JhbSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgnbm8gZGlhZ3JhbSB0byBkaXNwbGF5JykpO1xuICAgIH1cblxuICAgIC8vIGxvYWQgREkgZnJvbSBzZWxlY3RlZCBkaWFncmFtIG9ubHlcbiAgICBoYW5kbGVEaWFncmFtKGRpYWdyYW0pO1xuXG5cbiAgICB2YXIgcGxhbmUgPSBkaWFncmFtLnBsYW5lO1xuXG4gICAgaWYgKCFwbGFuZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZShcbiAgICAgICAgJ25vIHBsYW5lIGZvciB7ZWxlbWVudH0nLFxuICAgICAgICB7IGVsZW1lbnQ6IGVsZW1lbnRUb1N0cmluZyhkaWFncmFtKSB9XG4gICAgICApKTtcbiAgICB9XG5cbiAgICB2YXIgcm9vdEVsZW1lbnQgPSBwbGFuZS5icG1uRWxlbWVudDtcblxuICAgIC8vIGVuc3VyZSB3ZSBkZWZhdWx0IHRvIGEgc3VpdGFibGUgZGlzcGxheSBjYW5kaWRhdGUgKHByb2Nlc3Mgb3IgY29sbGFib3JhdGlvbiksXG4gICAgLy8gZXZlbiBpZiBub24gaXMgc3BlY2lmaWVkIGluIERJXG4gICAgaWYgKCFyb290RWxlbWVudCkge1xuICAgICAgcm9vdEVsZW1lbnQgPSBmaW5kRGlzcGxheUNhbmRpZGF0ZShkZWZpbml0aW9ucyk7XG5cbiAgICAgIGlmICghcm9vdEVsZW1lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgnbm8gcHJvY2VzcyBvciBjb2xsYWJvcmF0aW9uIHRvIGRpc3BsYXknKSk7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIGxvZ0Vycm9yKFxuICAgICAgICAgIHRyYW5zbGF0ZSgnY29ycmVjdGluZyBtaXNzaW5nIGJwbW5FbGVtZW50IG9uIHtwbGFuZX0gdG8ge3Jvb3RFbGVtZW50fScsIHtcbiAgICAgICAgICAgIHBsYW5lOiBlbGVtZW50VG9TdHJpbmcocGxhbmUpLFxuICAgICAgICAgICAgcm9vdEVsZW1lbnQ6IGVsZW1lbnRUb1N0cmluZyhyb290RWxlbWVudClcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGNvcnJlY3QgREkgb24gdGhlIGZseVxuICAgICAgICBwbGFuZS5icG1uRWxlbWVudCA9IHJvb3RFbGVtZW50O1xuICAgICAgICByZWdpc3RlckRpKHBsYW5lKTtcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBjdHggPSB2aXNpdFJvb3Qocm9vdEVsZW1lbnQsIHBsYW5lKTtcblxuICAgIGlmIChpcyhyb290RWxlbWVudCwgJ2JwbW46UHJvY2VzcycpKSB7XG4gICAgICBoYW5kbGVQcm9jZXNzKHJvb3RFbGVtZW50LCBjdHgpO1xuICAgIH0gZWxzZSBpZiAoaXMocm9vdEVsZW1lbnQsICdicG1uOkNvbGxhYm9yYXRpb24nKSkge1xuICAgICAgaGFuZGxlQ29sbGFib3JhdGlvbihyb290RWxlbWVudCwgY3R4KTtcblxuICAgICAgLy8gZm9yY2UgZHJhd2luZyBvZiBldmVyeXRoaW5nIG5vdCB5ZXQgZHJhd24gdGhhdCBpcyBwYXJ0IG9mIHRoZSB0YXJnZXQgRElcbiAgICAgIGhhbmRsZVVuaGFuZGxlZFByb2Nlc3NlcyhkZWZpbml0aW9ucy5yb290RWxlbWVudHMsIGN0eCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgdHJhbnNsYXRlKCd1bnN1cHBvcnRlZCBicG1uRWxlbWVudCBmb3Ige3BsYW5lfToge3Jvb3RFbGVtZW50fScsIHtcbiAgICAgICAgICBwbGFuZTogZWxlbWVudFRvU3RyaW5nKHBsYW5lKSxcbiAgICAgICAgICByb290RWxlbWVudDogZWxlbWVudFRvU3RyaW5nKHJvb3RFbGVtZW50KVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgYWxsIGRlZmVycmVkIGVsZW1lbnRzXG4gICAgaGFuZGxlRGVmZXJyZWQoZGVmZXJyZWQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRGVmZXJyZWQoKSB7XG5cbiAgICB2YXIgZm47XG5cbiAgICAvLyBkcmFpbiBkZWZlcnJlZCB1bnRpbCBlbXB0eVxuICAgIHdoaWxlIChkZWZlcnJlZC5sZW5ndGgpIHtcbiAgICAgIGZuID0gZGVmZXJyZWQuc2hpZnQoKTtcblxuICAgICAgZm4oKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVQcm9jZXNzKHByb2Nlc3MsIGNvbnRleHQpIHtcbiAgICBoYW5kbGVGbG93RWxlbWVudHNDb250YWluZXIocHJvY2VzcywgY29udGV4dCk7XG4gICAgaGFuZGxlSW9TcGVjaWZpY2F0aW9uKHByb2Nlc3MuaW9TcGVjaWZpY2F0aW9uLCBjb250ZXh0KTtcblxuICAgIGhhbmRsZUFydGlmYWN0cyhwcm9jZXNzLmFydGlmYWN0cywgY29udGV4dCk7XG5cbiAgICAvLyBsb2cgcHJvY2VzcyBoYW5kbGVkXG4gICAgaGFuZGxlZChwcm9jZXNzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVVuaGFuZGxlZFByb2Nlc3Nlcyhyb290RWxlbWVudHMsIGN0eCkge1xuXG4gICAgLy8gd2FsayB0aHJvdWdoIGFsbCBwcm9jZXNzZXMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBkcmF3biBhbmQgZHJhdyB0aGVtXG4gICAgLy8gaWYgdGhleSBjb250YWluIGxhbmVzIHdpdGggREkgaW5mb3JtYXRpb24uXG4gICAgLy8gd2UgZG8gdGhpcyB0byBwYXNzIHRoZSBmcmVlLWZsb2F0aW5nIGxhbmUgdGVzdCBjYXNlcyBpbiB0aGUgTUlXRyB0ZXN0IHN1aXRlXG4gICAgdmFyIHByb2Nlc3NlcyA9IGZpbHRlcihyb290RWxlbWVudHMsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiAhaXNIYW5kbGVkKGUpICYmIGlzKGUsICdicG1uOlByb2Nlc3MnKSAmJiBlLmxhbmVTZXRzO1xuICAgIH0pO1xuXG4gICAgcHJvY2Vzc2VzLmZvckVhY2goY29udGV4dHVhbChoYW5kbGVQcm9jZXNzLCBjdHgpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZU1lc3NhZ2VGbG93KG1lc3NhZ2VGbG93LCBjb250ZXh0KSB7XG4gICAgdmlzaXRJZkRpKG1lc3NhZ2VGbG93LCBjb250ZXh0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZU1lc3NhZ2VGbG93cyhtZXNzYWdlRmxvd3MsIGNvbnRleHQpIHtcbiAgICBmb3JFYWNoKG1lc3NhZ2VGbG93cywgY29udGV4dHVhbChoYW5kbGVNZXNzYWdlRmxvdywgY29udGV4dCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRGF0YUFzc29jaWF0aW9uKGFzc29jaWF0aW9uLCBjb250ZXh0KSB7XG4gICAgdmlzaXRJZkRpKGFzc29jaWF0aW9uLCBjb250ZXh0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZURhdGFJbnB1dChkYXRhSW5wdXQsIGNvbnRleHQpIHtcbiAgICB2aXNpdElmRGkoZGF0YUlucHV0LCBjb250ZXh0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZURhdGFPdXRwdXQoZGF0YU91dHB1dCwgY29udGV4dCkge1xuICAgIHZpc2l0SWZEaShkYXRhT3V0cHV0LCBjb250ZXh0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUFydGlmYWN0KGFydGlmYWN0LCBjb250ZXh0KSB7XG5cbiAgICAvLyBicG1uOlRleHRBbm5vdGF0aW9uXG4gICAgLy8gYnBtbjpHcm91cFxuICAgIC8vIGJwbW46QXNzb2NpYXRpb25cblxuICAgIHZpc2l0SWZEaShhcnRpZmFjdCwgY29udGV4dCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVBcnRpZmFjdHMoYXJ0aWZhY3RzLCBjb250ZXh0KSB7XG5cbiAgICBmb3JFYWNoKGFydGlmYWN0cywgZnVuY3Rpb24oZSkge1xuICAgICAgaWYgKGlzKGUsICdicG1uOkFzc29jaWF0aW9uJykpIHtcbiAgICAgICAgZGVmZXJyZWQucHVzaChmdW5jdGlvbigpIHtcbiAgICAgICAgICBoYW5kbGVBcnRpZmFjdChlLCBjb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVBcnRpZmFjdChlLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUlvU3BlY2lmaWNhdGlvbihpb1NwZWNpZmljYXRpb24sIGNvbnRleHQpIHtcblxuICAgIGlmICghaW9TcGVjaWZpY2F0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yRWFjaChpb1NwZWNpZmljYXRpb24uZGF0YUlucHV0cywgY29udGV4dHVhbChoYW5kbGVEYXRhSW5wdXQsIGNvbnRleHQpKTtcbiAgICBmb3JFYWNoKGlvU3BlY2lmaWNhdGlvbi5kYXRhT3V0cHV0cywgY29udGV4dHVhbChoYW5kbGVEYXRhT3V0cHV0LCBjb250ZXh0KSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVTdWJQcm9jZXNzKHN1YlByb2Nlc3MsIGNvbnRleHQpIHtcbiAgICBoYW5kbGVGbG93RWxlbWVudHNDb250YWluZXIoc3ViUHJvY2VzcywgY29udGV4dCk7XG4gICAgaGFuZGxlQXJ0aWZhY3RzKHN1YlByb2Nlc3MuYXJ0aWZhY3RzLCBjb250ZXh0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUZsb3dOb2RlKGZsb3dOb2RlLCBjb250ZXh0KSB7XG4gICAgdmFyIGNoaWxkQ3R4ID0gdmlzaXRJZkRpKGZsb3dOb2RlLCBjb250ZXh0KTtcblxuICAgIGlmIChpcyhmbG93Tm9kZSwgJ2JwbW46U3ViUHJvY2VzcycpKSB7XG4gICAgICBoYW5kbGVTdWJQcm9jZXNzKGZsb3dOb2RlLCBjaGlsZEN0eCB8fCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBpZiAoaXMoZmxvd05vZGUsICdicG1uOkFjdGl2aXR5JykpIHtcbiAgICAgIGhhbmRsZUlvU3BlY2lmaWNhdGlvbihmbG93Tm9kZS5pb1NwZWNpZmljYXRpb24sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIC8vIGRlZmVyIGhhbmRsaW5nIG9mIGFzc29jaWF0aW9uc1xuICAgIC8vIGFmZmVjdGVkIHR5cGVzOlxuICAgIC8vXG4gICAgLy8gICAqIGJwbW46QWN0aXZpdHlcbiAgICAvLyAgICogYnBtbjpUaHJvd0V2ZW50XG4gICAgLy8gICAqIGJwbW46Q2F0Y2hFdmVudFxuICAgIC8vXG4gICAgZGVmZXJyZWQucHVzaChmdW5jdGlvbigpIHtcbiAgICAgIGZvckVhY2goZmxvd05vZGUuZGF0YUlucHV0QXNzb2NpYXRpb25zLCBjb250ZXh0dWFsKGhhbmRsZURhdGFBc3NvY2lhdGlvbiwgY29udGV4dCkpO1xuICAgICAgZm9yRWFjaChmbG93Tm9kZS5kYXRhT3V0cHV0QXNzb2NpYXRpb25zLCBjb250ZXh0dWFsKGhhbmRsZURhdGFBc3NvY2lhdGlvbiwgY29udGV4dCkpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlU2VxdWVuY2VGbG93KHNlcXVlbmNlRmxvdywgY29udGV4dCkge1xuICAgIHZpc2l0SWZEaShzZXF1ZW5jZUZsb3csIGNvbnRleHQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRGF0YUVsZW1lbnQoZGF0YU9iamVjdCwgY29udGV4dCkge1xuICAgIHZpc2l0SWZEaShkYXRhT2JqZWN0LCBjb250ZXh0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUxhbmUobGFuZSwgY29udGV4dCkge1xuXG4gICAgZGVmZXJyZWQucHVzaChmdW5jdGlvbigpIHtcblxuICAgICAgdmFyIG5ld0NvbnRleHQgPSB2aXNpdElmRGkobGFuZSwgY29udGV4dCk7XG5cbiAgICAgIGlmIChsYW5lLmNoaWxkTGFuZVNldCkge1xuICAgICAgICBoYW5kbGVMYW5lU2V0KGxhbmUuY2hpbGRMYW5lU2V0LCBuZXdDb250ZXh0IHx8IGNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICB3aXJlRmxvd05vZGVSZWZzKGxhbmUpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlTGFuZVNldChsYW5lU2V0LCBjb250ZXh0KSB7XG4gICAgZm9yRWFjaChsYW5lU2V0LmxhbmVzLCBjb250ZXh0dWFsKGhhbmRsZUxhbmUsIGNvbnRleHQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUxhbmVTZXRzKGxhbmVTZXRzLCBjb250ZXh0KSB7XG4gICAgZm9yRWFjaChsYW5lU2V0cywgY29udGV4dHVhbChoYW5kbGVMYW5lU2V0LCBjb250ZXh0KSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVGbG93RWxlbWVudHNDb250YWluZXIoY29udGFpbmVyLCBjb250ZXh0KSB7XG4gICAgaGFuZGxlRmxvd0VsZW1lbnRzKGNvbnRhaW5lci5mbG93RWxlbWVudHMsIGNvbnRleHQpO1xuXG4gICAgaWYgKGNvbnRhaW5lci5sYW5lU2V0cykge1xuICAgICAgaGFuZGxlTGFuZVNldHMoY29udGFpbmVyLmxhbmVTZXRzLCBjb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVGbG93RWxlbWVudHMoZmxvd0VsZW1lbnRzLCBjb250ZXh0KSB7XG4gICAgZm9yRWFjaChmbG93RWxlbWVudHMsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmIChpcyhlLCAnYnBtbjpTZXF1ZW5jZUZsb3cnKSkge1xuICAgICAgICBkZWZlcnJlZC5wdXNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGhhbmRsZVNlcXVlbmNlRmxvdyhlLCBjb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGlzKGUsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSkge1xuICAgICAgICBkZWZlcnJlZC51bnNoaWZ0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGhhbmRsZUZsb3dOb2RlKGUsIGNvbnRleHQpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoaXMoZSwgJ2JwbW46Rmxvd05vZGUnKSkge1xuICAgICAgICBoYW5kbGVGbG93Tm9kZShlLCBjb250ZXh0KTtcbiAgICAgIH0gZWxzZSBpZiAoaXMoZSwgJ2JwbW46RGF0YU9iamVjdCcpKSB7XG5cbiAgICAgICAgLy8gU0tJUCAoYXNzdW1lIGNvcnJlY3QgcmVmZXJlbmNpbmcgdmlhIERhdGFPYmplY3RSZWZlcmVuY2UpXG4gICAgICB9IGVsc2UgaWYgKGlzKGUsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScpKSB7XG4gICAgICAgIGhhbmRsZURhdGFFbGVtZW50KGUsIGNvbnRleHQpO1xuICAgICAgfSBlbHNlIGlmIChpcyhlLCAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJykpIHtcbiAgICAgICAgaGFuZGxlRGF0YUVsZW1lbnQoZSwgY29udGV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dFcnJvcihcbiAgICAgICAgICB0cmFuc2xhdGUoJ3VucmVjb2duaXplZCBmbG93RWxlbWVudCB7ZWxlbWVudH0gaW4gY29udGV4dCB7Y29udGV4dH0nLCB7XG4gICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50VG9TdHJpbmcoZSksXG4gICAgICAgICAgICBjb250ZXh0OiAoY29udGV4dCA/IGVsZW1lbnRUb1N0cmluZyhjb250ZXh0LmJ1c2luZXNzT2JqZWN0KSA6ICdudWxsJylcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7IGVsZW1lbnQ6IGUsIGNvbnRleHQ6IGNvbnRleHQgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUGFydGljaXBhbnQocGFydGljaXBhbnQsIGNvbnRleHQpIHtcbiAgICB2YXIgbmV3Q3R4ID0gdmlzaXRJZkRpKHBhcnRpY2lwYW50LCBjb250ZXh0KTtcblxuICAgIHZhciBwcm9jZXNzID0gcGFydGljaXBhbnQucHJvY2Vzc1JlZjtcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgaGFuZGxlUHJvY2Vzcyhwcm9jZXNzLCBuZXdDdHggfHwgY29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ29sbGFib3JhdGlvbihjb2xsYWJvcmF0aW9uKSB7XG5cbiAgICBmb3JFYWNoKGNvbGxhYm9yYXRpb24ucGFydGljaXBhbnRzLCBjb250ZXh0dWFsKGhhbmRsZVBhcnRpY2lwYW50KSk7XG5cbiAgICBoYW5kbGVBcnRpZmFjdHMoY29sbGFib3JhdGlvbi5hcnRpZmFjdHMpO1xuXG4gICAgLy8gaGFuZGxlIG1lc3NhZ2UgZmxvd3MgbGF0ZXN0IGluIHRoZSBwcm9jZXNzXG4gICAgZGVmZXJyZWQucHVzaChmdW5jdGlvbigpIHtcbiAgICAgIGhhbmRsZU1lc3NhZ2VGbG93cyhjb2xsYWJvcmF0aW9uLm1lc3NhZ2VGbG93cyk7XG4gICAgfSk7XG4gIH1cblxuXG4gIGZ1bmN0aW9uIHdpcmVGbG93Tm9kZVJlZnMobGFuZSkge1xuXG4gICAgLy8gd2lyZSB0aGUgdmlydHVhbCBmbG93Tm9kZVJlZnMgPC0+IHJlbGF0aW9uc2hpcFxuICAgIGZvckVhY2gobGFuZS5mbG93Tm9kZVJlZiwgZnVuY3Rpb24oZmxvd05vZGUpIHtcbiAgICAgIHZhciBsYW5lcyA9IGZsb3dOb2RlLmdldCgnbGFuZXMnKTtcblxuICAgICAgaWYgKGxhbmVzKSB7XG4gICAgICAgIGxhbmVzLnB1c2gobGFuZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBBUEkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIHJldHVybiB7XG4gICAgaGFuZGxlRGVmZXJyZWQ6IGhhbmRsZURlZmVycmVkLFxuICAgIGhhbmRsZURlZmluaXRpb25zOiBoYW5kbGVEZWZpbml0aW9ucyxcbiAgICBoYW5kbGVTdWJQcm9jZXNzOiBoYW5kbGVTdWJQcm9jZXNzLFxuICAgIHJlZ2lzdGVyRGk6IHJlZ2lzdGVyRGlcbiAgfTtcbn0iLCJpbXBvcnQgQnBtblRyZWVXYWxrZXIgZnJvbSAnLi9CcG1uVHJlZVdhbGtlcic7XG5cblxuLyoqXG4gKiBUaGUgaW1wb3J0QnBtbkRpYWdyYW0gcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEltcG9ydEJQTU5EaWFncmFtUmVzdWx0XG4gKlxuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmc+fSB3YXJuaW5nc1xuICovXG5cbi8qKlxuKiBUaGUgaW1wb3J0QnBtbkRpYWdyYW0gZXJyb3IuXG4qXG4qIEB0eXBlZGVmIHtFcnJvcn0gSW1wb3J0QlBNTkRpYWdyYW1FcnJvclxuKlxuKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IHdhcm5pbmdzXG4qL1xuXG4vKipcbiAqIEltcG9ydCB0aGUgZGVmaW5pdGlvbnMgaW50byBhIGRpYWdyYW0uXG4gKlxuICogRXJyb3JzIGFuZCB3YXJuaW5ncyBhcmUgcmVwb3J0ZWQgdGhyb3VnaCB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSAge2Rqcy5EaWFncmFtfSBkaWFncmFtXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50PERlZmluaXRpb25zPn0gZGVmaW5pdGlvbnNcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnQ8QlBNTkRpYWdyYW0+fSBbYnBtbkRpYWdyYW1dIHRoZSBkaWFncmFtIHRvIGJlIHJlbmRlcmVkXG4gKiAoaWYgbm90IHByb3ZpZGVkLCB0aGUgZmlyc3Qgb25lIHdpbGwgYmUgcmVuZGVyZWQpXG4gKlxuICogUmV0dXJucyB7UHJvbWlzZTxJbXBvcnRCUE1ORGlhZ3JhbVJlc3VsdCwgSW1wb3J0QlBNTkRpYWdyYW1FcnJvcj59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbXBvcnRCcG1uRGlhZ3JhbShkaWFncmFtLCBkZWZpbml0aW9ucywgYnBtbkRpYWdyYW0pIHtcblxuICB2YXIgaW1wb3J0ZXIsXG4gICAgICBldmVudEJ1cyxcbiAgICAgIHRyYW5zbGF0ZTtcblxuICB2YXIgZXJyb3IsXG4gICAgICB3YXJuaW5ncyA9IFtdO1xuXG4gIC8qKlxuICAgKiBXYWxrIHRoZSBkaWFncmFtIHNlbWFudGljYWxseSwgaW1wb3J0aW5nICg9ZHJhd2luZylcbiAgICogYWxsIGVsZW1lbnRzIHlvdSBlbmNvdW50ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudDxEZWZpbml0aW9ucz59IGRlZmluaXRpb25zXG4gICAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudDxCUE1ORGlhZ3JhbT59IGJwbW5EaWFncmFtXG4gICAqL1xuICBmdW5jdGlvbiByZW5kZXIoZGVmaW5pdGlvbnMsIGJwbW5EaWFncmFtKSB7XG5cbiAgICB2YXIgdmlzaXRvciA9IHtcblxuICAgICAgcm9vdDogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gaW1wb3J0ZXIuYWRkKGVsZW1lbnQpO1xuICAgICAgfSxcblxuICAgICAgZWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgcGFyZW50U2hhcGUpIHtcbiAgICAgICAgcmV0dXJuIGltcG9ydGVyLmFkZChlbGVtZW50LCBwYXJlbnRTaGFwZSk7XG4gICAgICB9LFxuXG4gICAgICBlcnJvcjogZnVuY3Rpb24obWVzc2FnZSwgY29udGV4dCkge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKHsgbWVzc2FnZTogbWVzc2FnZSwgY29udGV4dDogY29udGV4dCB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIHdhbGtlciA9IG5ldyBCcG1uVHJlZVdhbGtlcih2aXNpdG9yLCB0cmFuc2xhdGUpO1xuXG4gICAgLy8gdHJhdmVyc2UgQlBNTiAyLjAgZG9jdW1lbnQgbW9kZWwsXG4gICAgLy8gc3RhcnRpbmcgYXQgZGVmaW5pdGlvbnNcbiAgICB3YWxrZXIuaGFuZGxlRGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMsIGJwbW5EaWFncmFtKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB0cnkge1xuICAgICAgaW1wb3J0ZXIgPSBkaWFncmFtLmdldCgnYnBtbkltcG9ydGVyJyk7XG4gICAgICBldmVudEJ1cyA9IGRpYWdyYW0uZ2V0KCdldmVudEJ1cycpO1xuICAgICAgdHJhbnNsYXRlID0gZGlhZ3JhbS5nZXQoJ3RyYW5zbGF0ZScpO1xuXG4gICAgICBldmVudEJ1cy5maXJlKCdpbXBvcnQucmVuZGVyLnN0YXJ0JywgeyBkZWZpbml0aW9uczogZGVmaW5pdGlvbnMgfSk7XG5cbiAgICAgIHJlbmRlcihkZWZpbml0aW9ucywgYnBtbkRpYWdyYW0pO1xuXG4gICAgICBldmVudEJ1cy5maXJlKCdpbXBvcnQucmVuZGVyLmNvbXBsZXRlJywge1xuICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgIHdhcm5pbmdzOiB3YXJuaW5nc1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXNvbHZlKHsgd2FybmluZ3M6IHdhcm5pbmdzIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcblxuICAgICAgZS53YXJuaW5ncyA9IHdhcm5pbmdzO1xuICAgICAgcmV0dXJuIHJlamVjdChlKTtcbiAgICB9XG4gIH0pO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGVsZW1lbnRUb1N0cmluZyhlKSB7XG4gIGlmICghZSkge1xuICAgIHJldHVybiAnPG51bGw+JztcbiAgfVxuXG4gIHJldHVybiAnPCcgKyBlLiR0eXBlICsgKGUuaWQgPyAnIGlkPVwiJyArIGUuaWQgOiAnJykgKyAnXCIgLz4nO1xufSIsImltcG9ydCB0cmFuc2xhdGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUnO1xuXG5pbXBvcnQgQnBtbkltcG9ydGVyIGZyb20gJy4vQnBtbkltcG9ydGVyJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIHRyYW5zbGF0ZVxuICBdLFxuICBicG1uSW1wb3J0ZXI6IFsgJ3R5cGUnLCBCcG1uSW1wb3J0ZXIgXVxufTsiLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnbWluLWRhc2gnO1xuXG4vLyBUT0RPKG5pa2t1KTogcmVtb3ZlIHdpdGggZnV0dXJlIGJwbW4tanMgdmVyc2lvblxuXG4vKipcbiAqIFdyYXBzIEFQSXMgdG8gY2hlY2s6XG4gKlxuICogMSkgSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQgLT4gV2FybiB1c2VycyBhYm91dCBjYWxsYmFjayBkZXByZWNhdGlvbi5cbiAqIDIpIElmIFByb21pc2UgY2xhc3MgaXMgaW1wbGVtZW50ZWQgaW4gY3VycmVudCBlbnZpcm9ubWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JhcEZvckNvbXBhdGliaWxpdHkoYXBpKSB7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuXG4gICAgaWYgKCF3aW5kb3cuUHJvbWlzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9taXNlcyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnQuIFBsZWFzZSBwb2x5ZmlsbCBQcm9taXNlLicpO1xuICAgIH1cblxuICAgIHZhciBhcmdMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGlmIChhcmdMZW4gPj0gMSAmJiBpc0Z1bmN0aW9uKGFyZ3VtZW50c1thcmdMZW4gLSAxXSkpIHtcblxuICAgICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzW2FyZ0xlbiAtIDFdO1xuXG4gICAgICBjb25zb2xlLndhcm4obmV3IEVycm9yKFxuICAgICAgICAnUGFzc2luZyBjYWxsYmFja3MgdG8gJyArIGFwaS5uYW1lICsgJyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gJyArXG4gICAgICAgICdQbGVhc2Ugc3dpdGNoIHRvIHByb21pc2VzOiBodHRwczovL2JwbW4uaW8vbC9tb3ZpbmctdG8tcHJvbWlzZXMuaHRtbCdcbiAgICAgICkpO1xuXG4gICAgICB2YXIgYXJnc1dpdGhvdXRDYWxsYmFjayA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCwgLTEpO1xuXG4gICAgICBhcGkuYXBwbHkodGhpcywgYXJnc1dpdGhvdXRDYWxsYmFjaykudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcblxuICAgICAgICB2YXIgZmlyc3RLZXkgPSBPYmplY3Qua2V5cyhyZXN1bHQpWzBdO1xuXG4gICAgICAgIC8vIFRoZSBBUElzIHdlIGFyZSB3cmFwcGluZyBhbGwgcmVzb2x2ZSBhIHNpbmdsZSBpdGVtIGRlcGVuZGluZyBvbiB0aGUgQVBJLlxuICAgICAgICAvLyBGb3IgaW5zdGFuY2UsIGltcG9ydFhNTCByZXNvbHZlcyB7IHdhcm5pbmdzIH0gYW5kIHNhdmVYTUwgcmV0dXJucyB7IHhtbCB9LlxuICAgICAgICAvLyBUaGF0J3Mgd2h5IHdlIGNhbiBjYWxsIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBmaXJzdCBpdGVtIG9mIHJlc3VsdC5cbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHJlc3VsdFtmaXJzdEtleV0pO1xuXG4gICAgICAgIC8vIFBhc3NpbmcgYSBzZWNvbmQgcGFyYW10ZXIgaW5zdGVhZCBvZiBjYXRjaCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gY2F0Y2ggZXJyb3JzIHRocm93biBieSBjYWxsYmFjaygpLlxuICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG5cbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVyciwgZXJyLndhcm5pbmdzKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIHJldHVybiBhcGkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH07XG59XG4iLCJpbXBvcnQge1xuICBpcyxcbiAgZ2V0QnVzaW5lc3NPYmplY3Rcbn0gZnJvbSAnLi9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuXG5leHBvcnQgZnVuY3Rpb24gaXNFeHBhbmRlZChlbGVtZW50KSB7XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkNhbGxBY3Rpdml0eScpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlN1YlByb2Nlc3MnKSkge1xuICAgIHJldHVybiAhIWdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmRpLmlzRXhwYW5kZWQ7XG4gIH1cblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIHJldHVybiAhIWdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLnByb2Nlc3NSZWY7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZXJydXB0aW5nKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgJiYgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkuaXNJbnRlcnJ1cHRpbmcgIT09IGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFdmVudFN1YlByb2Nlc3MoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCAmJiAhIWdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLnRyaWdnZXJlZEJ5RXZlbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNFdmVudERlZmluaXRpb24oZWxlbWVudCwgZXZlbnRUeXBlKSB7XG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxuICAgICAgaGFzRXZlbnREZWZpbml0aW9uID0gZmFsc2U7XG5cbiAgaWYgKGJvLmV2ZW50RGVmaW5pdGlvbnMpIHtcbiAgICBmb3JFYWNoKGJvLmV2ZW50RGVmaW5pdGlvbnMsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBpZiAoaXMoZXZlbnQsIGV2ZW50VHlwZSkpIHtcbiAgICAgICAgaGFzRXZlbnREZWZpbml0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBoYXNFdmVudERlZmluaXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNFcnJvckV2ZW50RGVmaW5pdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBoYXNFdmVudERlZmluaXRpb24oZWxlbWVudCwgJ2JwbW46RXJyb3JFdmVudERlZmluaXRpb24nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0VzY2FsYXRpb25FdmVudERlZmluaXRpb24oZWxlbWVudCkge1xuICByZXR1cm4gaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0NvbXBlbnNhdGVFdmVudERlZmluaXRpb24oZWxlbWVudCkge1xuICByZXR1cm4gaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOkNvbXBlbnNhdGVFdmVudERlZmluaXRpb24nKTtcbn1cbiIsImltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi9Nb2RlbFV0aWwnO1xuXG5cbmV4cG9ydCB2YXIgREVGQVVMVF9MQUJFTF9TSVpFID0ge1xuICB3aWR0aDogOTAsXG4gIGhlaWdodDogMjBcbn07XG5cbmV4cG9ydCB2YXIgRkxPV19MQUJFTF9JTkRFTlQgPSAxNTtcblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2VtYW50aWMgaGFzIGFuIGV4dGVybmFsIGxhYmVsXG4gKlxuICogQHBhcmFtIHtCcG1uRWxlbWVudH0gc2VtYW50aWNcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgaGFzIGxhYmVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xhYmVsRXh0ZXJuYWwoc2VtYW50aWMpIHtcbiAgcmV0dXJuIGlzKHNlbWFudGljLCAnYnBtbjpFdmVudCcpIHx8XG4gICAgICAgICBpcyhzZW1hbnRpYywgJ2JwbW46R2F0ZXdheScpIHx8XG4gICAgICAgICBpcyhzZW1hbnRpYywgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJykgfHxcbiAgICAgICAgIGlzKHNlbWFudGljLCAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJykgfHxcbiAgICAgICAgIGlzKHNlbWFudGljLCAnYnBtbjpEYXRhSW5wdXQnKSB8fFxuICAgICAgICAgaXMoc2VtYW50aWMsICdicG1uOkRhdGFPdXRwdXQnKSB8fFxuICAgICAgICAgaXMoc2VtYW50aWMsICdicG1uOlNlcXVlbmNlRmxvdycpIHx8XG4gICAgICAgICBpcyhzZW1hbnRpYywgJ2JwbW46TWVzc2FnZUZsb3cnKSB8fFxuICAgICAgICAgaXMoc2VtYW50aWMsICdicG1uOkdyb3VwJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBlbGVtZW50IGhhcyBhbiBleHRlcm5hbCBsYWJlbFxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLnNoYXBlfSBlbGVtZW50XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGhhcyBsYWJlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzRXh0ZXJuYWxMYWJlbChlbGVtZW50KSB7XG4gIHJldHVybiBpc0xhYmVsKGVsZW1lbnQubGFiZWwpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcG9zaXRpb24gZm9yIHNlcXVlbmNlIGZsb3cgbGFiZWxzXG4gKlxuICogQHBhcmFtICB7QXJyYXk8UG9pbnQ+fSB3YXlwb2ludHNcbiAqIEByZXR1cm4ge1BvaW50fSB0aGUgbGFiZWwgcG9zaXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZsb3dMYWJlbFBvc2l0aW9uKHdheXBvaW50cykge1xuXG4gIC8vIGdldCB0aGUgd2F5cG9pbnRzIG1pZFxuICB2YXIgbWlkID0gd2F5cG9pbnRzLmxlbmd0aCAvIDIgLSAxO1xuXG4gIHZhciBmaXJzdCA9IHdheXBvaW50c1tNYXRoLmZsb29yKG1pZCldO1xuICB2YXIgc2Vjb25kID0gd2F5cG9pbnRzW01hdGguY2VpbChtaWQgKyAwLjAxKV07XG5cbiAgLy8gZ2V0IHBvc2l0aW9uXG4gIHZhciBwb3NpdGlvbiA9IGdldFdheXBvaW50c01pZCh3YXlwb2ludHMpO1xuXG4gIC8vIGNhbGN1bGF0ZSBhbmdsZVxuICB2YXIgYW5nbGUgPSBNYXRoLmF0YW4oKHNlY29uZC55IC0gZmlyc3QueSkgLyAoc2Vjb25kLnggLSBmaXJzdC54KSk7XG5cbiAgdmFyIHggPSBwb3NpdGlvbi54LFxuICAgICAgeSA9IHBvc2l0aW9uLnk7XG5cbiAgaWYgKE1hdGguYWJzKGFuZ2xlKSA8IE1hdGguUEkgLyAyKSB7XG4gICAgeSAtPSBGTE9XX0xBQkVMX0lOREVOVDtcbiAgfSBlbHNlIHtcbiAgICB4ICs9IEZMT1dfTEFCRUxfSU5ERU5UO1xuICB9XG5cbiAgcmV0dXJuIHsgeDogeCwgeTogeSB9O1xufVxuXG5cbi8qKlxuICogR2V0IHRoZSBtaWRkbGUgb2YgYSBudW1iZXIgb2Ygd2F5cG9pbnRzXG4gKlxuICogQHBhcmFtICB7QXJyYXk8UG9pbnQ+fSB3YXlwb2ludHNcbiAqIEByZXR1cm4ge1BvaW50fSB0aGUgbWlkIHBvaW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXYXlwb2ludHNNaWQod2F5cG9pbnRzKSB7XG5cbiAgdmFyIG1pZCA9IHdheXBvaW50cy5sZW5ndGggLyAyIC0gMTtcblxuICB2YXIgZmlyc3QgPSB3YXlwb2ludHNbTWF0aC5mbG9vcihtaWQpXTtcbiAgdmFyIHNlY29uZCA9IHdheXBvaW50c1tNYXRoLmNlaWwobWlkICsgMC4wMSldO1xuXG4gIHJldHVybiB7XG4gICAgeDogZmlyc3QueCArIChzZWNvbmQueCAtIGZpcnN0LngpIC8gMixcbiAgICB5OiBmaXJzdC55ICsgKHNlY29uZC55IC0gZmlyc3QueSkgLyAyXG4gIH07XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVybmFsTGFiZWxNaWQoZWxlbWVudCkge1xuXG4gIGlmIChlbGVtZW50LndheXBvaW50cykge1xuICAgIHJldHVybiBnZXRGbG93TGFiZWxQb3NpdGlvbihlbGVtZW50LndheXBvaW50cyk7XG4gIH0gZWxzZSBpZiAoaXMoZWxlbWVudCwgJ2JwbW46R3JvdXAnKSkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBlbGVtZW50LnggKyBlbGVtZW50LndpZHRoIC8gMixcbiAgICAgIHk6IGVsZW1lbnQueSArIERFRkFVTFRfTEFCRUxfU0laRS5oZWlnaHQgLyAyXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogZWxlbWVudC54ICsgZWxlbWVudC53aWR0aCAvIDIsXG4gICAgICB5OiBlbGVtZW50LnkgKyBlbGVtZW50LmhlaWdodCArIERFRkFVTFRfTEFCRUxfU0laRS5oZWlnaHQgLyAyXG4gICAgfTtcbiAgfVxufVxuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIGFuIGVsZW1lbnRzIGxhYmVsLCBwYXJzZWQgZnJvbSB0aGUgZWxlbWVudHMgREkgb3JcbiAqIGdlbmVyYXRlZCBmcm9tIGl0cyBib3VuZHMuXG4gKlxuICogQHBhcmFtIHtCcG1uRWxlbWVudH0gc2VtYW50aWNcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVybmFsTGFiZWxCb3VuZHMoc2VtYW50aWMsIGVsZW1lbnQpIHtcblxuICB2YXIgbWlkLFxuICAgICAgc2l6ZSxcbiAgICAgIGJvdW5kcyxcbiAgICAgIGRpID0gc2VtYW50aWMuZGksXG4gICAgICBsYWJlbCA9IGRpLmxhYmVsO1xuXG4gIGlmIChsYWJlbCAmJiBsYWJlbC5ib3VuZHMpIHtcbiAgICBib3VuZHMgPSBsYWJlbC5ib3VuZHM7XG5cbiAgICBzaXplID0ge1xuICAgICAgd2lkdGg6IE1hdGgubWF4KERFRkFVTFRfTEFCRUxfU0laRS53aWR0aCwgYm91bmRzLndpZHRoKSxcbiAgICAgIGhlaWdodDogYm91bmRzLmhlaWdodFxuICAgIH07XG5cbiAgICBtaWQgPSB7XG4gICAgICB4OiBib3VuZHMueCArIGJvdW5kcy53aWR0aCAvIDIsXG4gICAgICB5OiBib3VuZHMueSArIGJvdW5kcy5oZWlnaHQgLyAyXG4gICAgfTtcbiAgfSBlbHNlIHtcblxuICAgIG1pZCA9IGdldEV4dGVybmFsTGFiZWxNaWQoZWxlbWVudCk7XG5cbiAgICBzaXplID0gREVGQVVMVF9MQUJFTF9TSVpFO1xuICB9XG5cbiAgcmV0dXJuIGFzc2lnbih7XG4gICAgeDogbWlkLnggLSBzaXplLndpZHRoIC8gMixcbiAgICB5OiBtaWQueSAtIHNpemUuaGVpZ2h0IC8gMlxuICB9LCBzaXplKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGFiZWwoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCAmJiAhIWVsZW1lbnQubGFiZWxUYXJnZXQ7XG59XG4iLCIvKipcbiAqIElzIGFuIGVsZW1lbnQgb2YgdGhlIGdpdmVuIEJQTU4gdHlwZT9cbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZXxNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0gIHtzdHJpbmd9IHR5cGVcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXMoZWxlbWVudCwgdHlwZSkge1xuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICByZXR1cm4gYm8gJiYgKHR5cGVvZiBiby4kaW5zdGFuY2VPZiA9PT0gJ2Z1bmN0aW9uJykgJiYgYm8uJGluc3RhbmNlT2YodHlwZSk7XG59XG5cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGJ1c2luZXNzIG9iamVjdCBmb3IgYSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfE1vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkge1xuICByZXR1cm4gKGVsZW1lbnQgJiYgZWxlbWVudC5idXNpbmVzc09iamVjdCkgfHwgZWxlbWVudDtcbn0iLCIvKipcbiAqIFRoaXMgZmlsZSBtdXN0IG5vdCBiZSBjaGFuZ2VkIG9yIGV4Y2hhbmdlZC5cbiAqXG4gKiBAc2VlIGh0dHA6Ly9icG1uLmlvL2xpY2Vuc2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKi9cblxuaW1wb3J0IHtcbiAgZG9taWZ5LFxuICBkZWxlZ2F0ZSBhcyBkb21EZWxlZ2F0ZVxufSBmcm9tICdtaW4tZG9tJztcblxuXG4vLyBpbmxpbmVkIC4uLy4uL3Jlc291cmNlcy9sb2dvLnN2Z1xudmFyIEJQTU5JT19MT0dPX1NWRyA9ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE0LjAyIDUuNTdcIiB3aWR0aD1cIjUzXCIgaGVpZ2h0PVwiMjFcIiBzdHlsZT1cInZlcnRpY2FsLWFsaWduOm1pZGRsZVwiPjxwYXRoIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTEuODguOTJ2LjE0YzAgLjQxLS4xMy42OC0uNC44LjMzLjE0LjQ2LjQ0LjQ2Ljg2di4zM2MwIC42MS0uMzMuOTUtLjk1Ljk1SDBWMGguOTVjLjY1IDAgLjkzLjMuOTMuOTJ6TS42My41N3YxLjA2aC4yNGMuMjQgMCAuMzgtLjEuMzgtLjQzVi45OGMwLS4yOC0uMS0uNC0uMzItLjR6bTAgMS42M3YxLjIyaC4zNmMuMiAwIC4zMi0uMS4zMi0uMzl2LS4zNWMwLS4zNy0uMTItLjQ4LS40LS40OEguNjN6TTQuMTguOTl2LjUyYzAgLjY0LS4zMS45OC0uOTQuOThoLS4zVjRoLS42MlYwaC45MmMuNjMgMCAuOTQuMzUuOTQuOTl6TTIuOTQuNTd2MS4zNWguM2MuMiAwIC4zLS4wOS4zLS4zN3YtLjZjMC0uMjktLjEtLjM4LS4zLS4zOGgtLjN6bTIuODkgMi4yN0w2LjI1IDBoLjg4djRoLS42VjEuMTJMNi4xIDMuOTloLS42bC0uNDYtMi44MnYyLjgyaC0uNTVWMGguODd6TTguMTQgMS4xVjRoLS41NlYwaC43OUw5IDIuNFYwaC41NnY0aC0uNjR6bTIuNDkgMi4yOXYuNmgtLjZ2LS42ek0xMi4xMiAxYzAtLjYzLjMzLTEgLjk1LTEgLjYxIDAgLjk1LjM3Ljk1IDF2Mi4wNGMwIC42NC0uMzQgMS0uOTUgMS0uNjIgMC0uOTUtLjM3LS45NS0xem0uNjIgMi4wOGMwIC4yOC4xMy4zOS4zMy4zOXMuMzItLjEuMzItLjRWLjk4YzAtLjI5LS4xMi0uNC0uMzItLjRzLS4zMy4xMS0uMzMuNHpcIi8+PHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMCA0LjUzaDE0LjAydjEuMDRIMHpNMTEuMDggMGguNjN2LjYyaC0uNjN6bS42MyA0VjFoLS42M3YyLjk4elwiLz48L3N2Zz4nO1xuXG5leHBvcnQgdmFyIEJQTU5JT19JTUcgPSBCUE1OSU9fTE9HT19TVkc7XG5cbmZ1bmN0aW9uIGNzcyhhdHRycykge1xuICByZXR1cm4gYXR0cnMuam9pbignOycpO1xufVxuXG5leHBvcnQgdmFyIExJTktfU1RZTEVTID0gY3NzKFtcbiAgJ2NvbG9yOiAjNDA0MDQwJ1xuXSk7XG5cbnZhciBMSUdIVEJPWF9TVFlMRVMgPSBjc3MoW1xuICAnei1pbmRleDogMTAwMScsXG4gICdwb3NpdGlvbjogZml4ZWQnLFxuICAndG9wOiAwJyxcbiAgJ2xlZnQ6IDAnLFxuICAncmlnaHQ6IDAnLFxuICAnYm90dG9tOiAwJ1xuXSk7XG5cbnZhciBCQUNLRFJPUF9TVFlMRVMgPSBjc3MoW1xuICAnd2lkdGg6IDEwMCUnLFxuICAnaGVpZ2h0OiAxMDAlJyxcbiAgJ2JhY2tncm91bmQ6IHJnYmEoNDAsNDAsNDAsMC4yKSdcbl0pO1xuXG52YXIgTk9USUNFX1NUWUxFUyA9IGNzcyhbXG4gICdwb3NpdGlvbjogYWJzb2x1dGUnLFxuICAnbGVmdDogNTAlJyxcbiAgJ3RvcDogNDAlJyxcbiAgJ3RyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUpJyxcbiAgJ3dpZHRoOiAyNjBweCcsXG4gICdwYWRkaW5nOiAxMHB4JyxcbiAgJ2JhY2tncm91bmQ6IHdoaXRlJyxcbiAgJ2JveC1zaGFkb3c6IDAgMXB4IDRweCByZ2JhKDAsMCwwLDAuMyknLFxuICAnZm9udC1mYW1pbHk6IEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYnLFxuICAnZm9udC1zaXplOiAxNHB4JyxcbiAgJ2Rpc3BsYXk6IGZsZXgnLFxuICAnbGluZS1oZWlnaHQ6IDEuMydcbl0pO1xuXG52YXIgTElHSFRCT1hfTUFSS1VQID1cbiAgJzxkaXYgY2xhc3M9XCJianMtcG93ZXJlZC1ieS1saWdodGJveFwiIHN0eWxlPVwiJyArIExJR0hUQk9YX1NUWUxFUyArICdcIj4nICtcbiAgICAnPGRpdiBjbGFzcz1cImJhY2tkcm9wXCIgc3R5bGU9XCInICsgQkFDS0RST1BfU1RZTEVTICsgJ1wiPjwvZGl2PicgK1xuICAgICc8ZGl2IGNsYXNzPVwibm90aWNlXCIgc3R5bGU9XCInICsgTk9USUNFX1NUWUxFUyArICdcIj4nICtcbiAgICAgICc8YSBocmVmPVwiaHR0cHM6Ly9icG1uLmlvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXJcIiBzdHlsZT1cIm1hcmdpbjogMTVweCAyMHB4IDE1cHggMTBweDsgYWxpZ24tc2VsZjogY2VudGVyOycgKyBMSU5LX1NUWUxFUyArICdcIj4nICtcbiAgICAgICAgQlBNTklPX0lNRyArXG4gICAgICAnPC9hPicgK1xuICAgICAgJzxzcGFuPicgK1xuICAgICAgICAnV2ViLWJhc2VkIHRvb2xpbmcgZm9yIEJQTU4sIERNTiBhbmQgQ01NTiBkaWFncmFtcyAnICtcbiAgICAgICAgJ3Bvd2VyZWQgYnkgPGEgaHJlZj1cImh0dHBzOi8vYnBtbi5pb1wiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyXCI+YnBtbi5pbzwvYT4uJyArXG4gICAgICAnPC9zcGFuPicgK1xuICAgICc8L2Rpdj4nICtcbiAgJzwvZGl2Pic7XG5cblxudmFyIGxpZ2h0Ym94O1xuXG5leHBvcnQgZnVuY3Rpb24gb3BlbigpIHtcblxuICBpZiAoIWxpZ2h0Ym94KSB7XG4gICAgbGlnaHRib3ggPSBkb21pZnkoTElHSFRCT1hfTUFSS1VQKTtcblxuICAgIGRvbURlbGVnYXRlLmJpbmQobGlnaHRib3gsICcuYmFja2Ryb3AnLCAnY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaWdodGJveCk7XG4gICAgfSk7XG4gIH1cblxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpZ2h0Ym94KTtcbn1cbiIsImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tICcuL2xpYi9EaWFncmFtJzsiLCJpbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ2RpZGknO1xuXG5pbXBvcnQgQ29yZU1vZHVsZSBmcm9tICcuL2NvcmUnO1xuXG5cbi8qKlxuICogQm9vdHN0cmFwIGFuIGluamVjdG9yIGZyb20gYSBsaXN0IG9mIG1vZHVsZXMsIGluc3RhbnRpYXRpbmcgYSBudW1iZXIgb2YgZGVmYXVsdCBjb21wb25lbnRzXG4gKlxuICogQGlnbm9yZVxuICogQHBhcmFtIHtBcnJheTxkaWRpLk1vZHVsZT59IGJvb3RzdHJhcE1vZHVsZXNcbiAqXG4gKiBAcmV0dXJuIHtkaWRpLkluamVjdG9yfSBhIGluamVjdG9yIHRvIHVzZSB0byBhY2Nlc3MgdGhlIGNvbXBvbmVudHNcbiAqL1xuZnVuY3Rpb24gYm9vdHN0cmFwKGJvb3RzdHJhcE1vZHVsZXMpIHtcblxuICB2YXIgbW9kdWxlcyA9IFtdLFxuICAgICAgY29tcG9uZW50cyA9IFtdO1xuXG4gIGZ1bmN0aW9uIGhhc01vZHVsZShtKSB7XG4gICAgcmV0dXJuIG1vZHVsZXMuaW5kZXhPZihtKSA+PSAwO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkTW9kdWxlKG0pIHtcbiAgICBtb2R1bGVzLnB1c2gobSk7XG4gIH1cblxuICBmdW5jdGlvbiB2aXNpdChtKSB7XG4gICAgaWYgKGhhc01vZHVsZShtKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIChtLl9fZGVwZW5kc19fIHx8IFtdKS5mb3JFYWNoKHZpc2l0KTtcblxuICAgIGlmIChoYXNNb2R1bGUobSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhZGRNb2R1bGUobSk7XG5cbiAgICAobS5fX2luaXRfXyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihjKSB7XG4gICAgICBjb21wb25lbnRzLnB1c2goYyk7XG4gICAgfSk7XG4gIH1cblxuICBib290c3RyYXBNb2R1bGVzLmZvckVhY2godmlzaXQpO1xuXG4gIHZhciBpbmplY3RvciA9IG5ldyBJbmplY3Rvcihtb2R1bGVzKTtcblxuICBjb21wb25lbnRzLmZvckVhY2goZnVuY3Rpb24oYykge1xuXG4gICAgdHJ5IHtcblxuICAgICAgLy8gZWFnZXJseSByZXNvbHZlIGNvbXBvbmVudCAoZm4gb3Igc3RyaW5nKVxuICAgICAgaW5qZWN0b3JbdHlwZW9mIGMgPT09ICdzdHJpbmcnID8gJ2dldCcgOiAnaW52b2tlJ10oYyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGluc3RhbnRpYXRlIGNvbXBvbmVudCcpO1xuICAgICAgY29uc29sZS5lcnJvcihlLnN0YWNrKTtcblxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpbmplY3Rvcjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGluamVjdG9yIGZyb20gcGFzc2VkIG9wdGlvbnMuXG4gKlxuICogQGlnbm9yZVxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtkaWRpLkluamVjdG9yfVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbmplY3RvcihvcHRpb25zKSB7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIGNvbmZpZ01vZHVsZSA9IHtcbiAgICAnY29uZmlnJzogWyd2YWx1ZScsIG9wdGlvbnNdXG4gIH07XG5cbiAgdmFyIG1vZHVsZXMgPSBbIGNvbmZpZ01vZHVsZSwgQ29yZU1vZHVsZSBdLmNvbmNhdChvcHRpb25zLm1vZHVsZXMgfHwgW10pO1xuXG4gIHJldHVybiBib290c3RyYXAobW9kdWxlcyk7XG59XG5cblxuLyoqXG4gKiBUaGUgbWFpbiBkaWFncmFtLWpzIGVudHJ5IHBvaW50IHRoYXQgYm9vdHN0cmFwcyB0aGUgZGlhZ3JhbSB3aXRoIHRoZSBnaXZlblxuICogY29uZmlndXJhdGlvbi5cbiAqXG4gKiBUbyByZWdpc3RlciBleHRlbnNpb25zIHdpdGggdGhlIGRpYWdyYW0sIHBhc3MgdGhlbSBhcyBBcnJheTxkaWRpLk1vZHVsZT4gdG8gdGhlIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBjbGFzcyBkanMuRGlhZ3JhbVxuICogQG1lbWJlck9mIGRqc1xuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA8Y2FwdGlvbj5DcmVhdGluZyBhIHBsdWctaW4gdGhhdCBsb2dzIHdoZW5ldmVyIGEgc2hhcGUgaXMgYWRkZWQgdG8gdGhlIGNhbnZhcy48L2NhcHRpb24+XG4gKlxuICogLy8gcGx1Zy1pbiBpbXBsZW1lbmVudGF0aW9uXG4gKiBmdW5jdGlvbiBNeUxvZ2dpbmdQbHVnaW4oZXZlbnRCdXMpIHtcbiAqICAgZXZlbnRCdXMub24oJ3NoYXBlLmFkZGVkJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAqICAgICBjb25zb2xlLmxvZygnc2hhcGUgJywgZXZlbnQuc2hhcGUsICcgd2FzIGFkZGVkIHRvIHRoZSBkaWFncmFtJyk7XG4gKiAgIH0pO1xuICogfVxuICpcbiAqIC8vIGV4cG9ydCBhcyBtb2R1bGVcbiAqIGV4cG9ydCBkZWZhdWx0IHtcbiAqICAgX19pbml0X186IFsgJ215TG9nZ2luZ1BsdWdpbicgXSxcbiAqICAgICBteUxvZ2dpbmdQbHVnaW46IFsgJ3R5cGUnLCBNeUxvZ2dpbmdQbHVnaW4gXVxuICogfTtcbiAqXG4gKlxuICogLy8gaW5zdGFudGlhdGUgdGhlIGRpYWdyYW0gd2l0aCB0aGUgbmV3IHBsdWctaW5cbiAqXG4gKiBpbXBvcnQgTXlMb2dnaW5nTW9kdWxlIGZyb20gJ3BhdGgtdG8tbXktbG9nZ2luZy1wbHVnaW4nO1xuICpcbiAqIHZhciBkaWFncmFtID0gbmV3IERpYWdyYW0oe1xuICogICBtb2R1bGVzOiBbXG4gKiAgICAgTXlMb2dnaW5nTW9kdWxlXG4gKiAgIF1cbiAqIH0pO1xuICpcbiAqIGRpYWdyYW0uaW52b2tlKFsgJ2NhbnZhcycsIGZ1bmN0aW9uKGNhbnZhcykge1xuICogICAvLyBhZGQgc2hhcGUgdG8gZHJhd2luZyBjYW52YXNcbiAqICAgY2FudmFzLmFkZFNoYXBlKHsgeDogMTAsIHk6IDEwIH0pO1xuICogfSk7XG4gKlxuICogLy8gJ3NoYXBlIC4uLiB3YXMgYWRkZWQgdG8gdGhlIGRpYWdyYW0nIGxvZ2dlZCB0byBjb25zb2xlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7QXJyYXk8ZGlkaS5Nb2R1bGU+fSBbb3B0aW9ucy5tb2R1bGVzXSBleHRlcm5hbCBtb2R1bGVzIHRvIGluc3RhbnRpYXRlIHdpdGggdGhlIGRpYWdyYW1cbiAqIEBwYXJhbSB7ZGlkaS5JbmplY3Rvcn0gW2luamVjdG9yXSBhbiAob3B0aW9uYWwpIGluamVjdG9yIHRvIGJvb3RzdHJhcCB0aGUgZGlhZ3JhbSB3aXRoXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERpYWdyYW0ob3B0aW9ucywgaW5qZWN0b3IpIHtcblxuICAvLyBjcmVhdGUgaW5qZWN0b3IgdW5sZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVkXG4gIHRoaXMuaW5qZWN0b3IgPSBpbmplY3RvciA9IGluamVjdG9yIHx8IGNyZWF0ZUluamVjdG9yKG9wdGlvbnMpO1xuXG4gIC8vIEFQSVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhIGRpYWdyYW0gc2VydmljZVxuICAgKlxuICAgKiBAbWV0aG9kIERpYWdyYW0jZ2V0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBkaWFncmFtIHNlcnZpY2UgdG8gYmUgcmV0cmlldmVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3N0cmljdD10cnVlXSBpZiBmYWxzZSwgcmVzb2x2ZSBtaXNzaW5nIHNlcnZpY2VzIHRvIG51bGxcbiAgICovXG4gIHRoaXMuZ2V0ID0gaW5qZWN0b3IuZ2V0O1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIGZ1bmN0aW9uIGludG8gd2hpY2ggZGlhZ3JhbSBzZXJ2aWNlcyBhcmUgaW5qZWN0ZWRcbiAgICpcbiAgICogQG1ldGhvZCBEaWFncmFtI2ludm9rZVxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdFtdfSBmbiB0aGUgZnVuY3Rpb24gdG8gcmVzb2x2ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gbG9jYWxzIGEgbnVtYmVyIG9mIGxvY2FscyB0byB1c2UgdG8gcmVzb2x2ZSBjZXJ0YWluIGRlcGVuZGVuY2llc1xuICAgKi9cbiAgdGhpcy5pbnZva2UgPSBpbmplY3Rvci5pbnZva2U7XG5cbiAgLy8gaW5pdFxuXG4gIC8vIGluZGljYXRlIHZpYSBldmVudFxuXG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCBhbGwgcGx1Zy1pbnMgYXJlIGxvYWRlZC5cbiAgICpcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gZmlyZSBvdGhlciBldmVudHMgdG8gaW50ZXJlc3RlZCBwbHVnLWluc1xuICAgKlxuICAgKiBAbWVtYmVyT2YgRGlhZ3JhbVxuICAgKlxuICAgKiBAZXZlbnQgZGlhZ3JhbS5pbml0XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIGV2ZW50QnVzLm9uKCdkaWFncmFtLmluaXQnLCBmdW5jdGlvbigpIHtcbiAgICogICBldmVudEJ1cy5maXJlKCdteS1jdXN0b20tZXZlbnQnLCB7IGZvbzogJ0JBUicgfSk7XG4gICAqIH0pO1xuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdGhpcy5nZXQoJ2V2ZW50QnVzJykuZmlyZSgnZGlhZ3JhbS5pbml0Jyk7XG59XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZGlhZ3JhbVxuICpcbiAqIEBtZXRob2QgIERpYWdyYW0jZGVzdHJveVxuICovXG5EaWFncmFtLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZ2V0KCdldmVudEJ1cycpLmZpcmUoJ2RpYWdyYW0uZGVzdHJveScpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0aGUgZGlhZ3JhbSwgcmVtb3ZpbmcgYWxsIGNvbnRlbnRzLlxuICovXG5EaWFncmFtLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmdldCgnZXZlbnRCdXMnKS5maXJlKCdkaWFncmFtLmNsZWFyJyk7XG59O1xuIiwiaW1wb3J0IHtcbiAgZm9yRWFjaCxcbiAgaXNGdW5jdGlvbixcbiAgaXNBcnJheSxcbiAgaXNOdW1iZXIsXG4gIGlzT2JqZWN0XG59IGZyb20gJ21pbi1kYXNoJztcblxuXG52YXIgREVGQVVMVF9QUklPUklUWSA9IDEwMDA7XG5cbi8qKlxuICogQSB1dGlsaXR5IHRoYXQgY2FuIGJlIHVzZWQgdG8gcGx1Zy1pbiBpbnRvIHRoZSBjb21tYW5kIGV4ZWN1dGlvbiBmb3JcbiAqIGV4dGVuc2lvbiBhbmQvb3IgdmFsaWRhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICpcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcbiAqXG4gKiBpbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcbiAqXG4gKiBmdW5jdGlvbiBDb21tYW5kTG9nZ2VyKGV2ZW50QnVzKSB7XG4gKiAgIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcbiAqXG4gKiAgIHRoaXMucHJlRXhlY3V0ZShmdW5jdGlvbihldmVudCkge1xuICogICAgIGNvbnNvbGUubG9nKCdjb21tYW5kIHByZS1leGVjdXRlJywgZXZlbnQpO1xuICogICB9KTtcbiAqIH1cbiAqXG4gKiBpbmhlcml0cyhDb21tYW5kTG9nZ2VyLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuICpcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29tbWFuZEludGVyY2VwdG9yKGV2ZW50QnVzKSB7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG59XG5cbkNvbW1hbmRJbnRlcmNlcHRvci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07XG5cbmZ1bmN0aW9uIHVud3JhcEV2ZW50KGZuLCB0aGF0KSB7XG4gIHJldHVybiBmdW5jdGlvbihldmVudCkge1xuICAgIHJldHVybiBmbi5jYWxsKHRoYXQgfHwgbnVsbCwgZXZlbnQuY29udGV4dCwgZXZlbnQuY29tbWFuZCwgZXZlbnQpO1xuICB9O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGFuIGludGVyY2VwdG9yIGZvciBhIGNvbW1hbmQgZXhlY3V0aW9uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8QXJyYXk8c3RyaW5nPn0gW2V2ZW50c10gbGlzdCBvZiBjb21tYW5kcyB0byByZWdpc3RlciBvblxuICogQHBhcmFtIHtzdHJpbmd9IFtob29rXSBjb21tYW5kIGhvb2ssIGkuZS4gcHJlRXhlY3V0ZSwgZXhlY3V0ZWQgdG8gbGlzdGVuIG9uXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByaW9yaXR5XSB0aGUgcHJpb3JpdHkgb24gd2hpY2ggdG8gaG9vayBpbnRvIHRoZSBleGVjdXRpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJGbiBpbnRlcmNlcHRvciB0byBiZSBpbnZva2VkIHdpdGggKGV2ZW50KVxuICogQHBhcmFtIHtib29sZWFufSB1bndyYXAgaWYgdHJ1ZSwgdW53cmFwIHRoZSBldmVudCBhbmQgcGFzcyAoY29udGV4dCwgY29tbWFuZCwgZXZlbnQpIHRvIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyIGluc3RlYWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbdGhhdF0gUGFzcyBjb250ZXh0IChgdGhpc2ApIHRvIHRoZSBoYW5kbGVyIGZ1bmN0aW9uXG4gKi9cbkNvbW1hbmRJbnRlcmNlcHRvci5wcm90b3R5cGUub24gPSBmdW5jdGlvbihldmVudHMsIGhvb2ssIHByaW9yaXR5LCBoYW5kbGVyRm4sIHVud3JhcCwgdGhhdCkge1xuXG4gIGlmIChpc0Z1bmN0aW9uKGhvb2spIHx8IGlzTnVtYmVyKGhvb2spKSB7XG4gICAgdGhhdCA9IHVud3JhcDtcbiAgICB1bndyYXAgPSBoYW5kbGVyRm47XG4gICAgaGFuZGxlckZuID0gcHJpb3JpdHk7XG4gICAgcHJpb3JpdHkgPSBob29rO1xuICAgIGhvb2sgPSBudWxsO1xuICB9XG5cbiAgaWYgKGlzRnVuY3Rpb24ocHJpb3JpdHkpKSB7XG4gICAgdGhhdCA9IHVud3JhcDtcbiAgICB1bndyYXAgPSBoYW5kbGVyRm47XG4gICAgaGFuZGxlckZuID0gcHJpb3JpdHk7XG4gICAgcHJpb3JpdHkgPSBERUZBVUxUX1BSSU9SSVRZO1xuICB9XG5cbiAgaWYgKGlzT2JqZWN0KHVud3JhcCkpIHtcbiAgICB0aGF0ID0gdW53cmFwO1xuICAgIHVud3JhcCA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKCFpc0Z1bmN0aW9uKGhhbmRsZXJGbikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhbmRsZXJGbiBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGlmICghaXNBcnJheShldmVudHMpKSB7XG4gICAgZXZlbnRzID0gWyBldmVudHMgXTtcbiAgfVxuXG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIGZvckVhY2goZXZlbnRzLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgLy8gY29uY2F0IGNvbW1hbmRTdGFjayguZXZlbnQpPyguaG9vayk/XG4gICAgdmFyIGZ1bGxFdmVudCA9IFsgJ2NvbW1hbmRTdGFjaycsIGV2ZW50LCBob29rIF0uZmlsdGVyKGZ1bmN0aW9uKGUpIHsgcmV0dXJuIGU7IH0pLmpvaW4oJy4nKTtcblxuICAgIGV2ZW50QnVzLm9uKGZ1bGxFdmVudCwgcHJpb3JpdHksIHVud3JhcCA/IHVud3JhcEV2ZW50KGhhbmRsZXJGbiwgdGhhdCkgOiBoYW5kbGVyRm4sIHRoYXQpO1xuICB9KTtcbn07XG5cblxudmFyIGhvb2tzID0gW1xuICAnY2FuRXhlY3V0ZScsXG4gICdwcmVFeGVjdXRlJyxcbiAgJ3ByZUV4ZWN1dGVkJyxcbiAgJ2V4ZWN1dGUnLFxuICAnZXhlY3V0ZWQnLFxuICAncG9zdEV4ZWN1dGUnLFxuICAncG9zdEV4ZWN1dGVkJyxcbiAgJ3JldmVydCcsXG4gICdyZXZlcnRlZCdcbl07XG5cbi8qXG4gKiBJbnN0YWxsIGhvb2sgc2hvcnRjdXRzXG4gKlxuICogVGhpcyB3aWxsIGdlbmVyYXRlIHRoZSBDb21tYW5kSW50ZXJjZXB0b3IjKHByZUV4ZWN1dGV8Li4ufHJldmVydGVkKSBtZXRob2RzXG4gKiB3aGljaCB3aWxsIGluIHRlcm0gZm9yd2FyZCB0byBDb21tYW5kSW50ZXJjZXB0b3Ijb24uXG4gKi9cbmZvckVhY2goaG9va3MsIGZ1bmN0aW9uKGhvb2spIHtcblxuICAvKipcbiAgICoge2NhbkV4ZWN1dGV8cHJlRXhlY3V0ZXxwcmVFeGVjdXRlZHxleGVjdXRlfGV4ZWN1dGVkfHBvc3RFeGVjdXRlfHBvc3RFeGVjdXRlZHxyZXZlcnR8cmV2ZXJ0ZWR9XG4gICAqXG4gICAqIEEgbmFtZWQgaG9vayBmb3IgcGx1Z2dpbmcgaW50byB0aGUgY29tbWFuZCBleGVjdXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8QXJyYXk8c3RyaW5nPn0gW2V2ZW50c10gbGlzdCBvZiBjb21tYW5kcyB0byByZWdpc3RlciBvblxuICAgKiBAcGFyYW0ge251bWJlcn0gW3ByaW9yaXR5XSB0aGUgcHJpb3JpdHkgb24gd2hpY2ggdG8gaG9vayBpbnRvIHRoZSBleGVjdXRpb25cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlckZuIGludGVyY2VwdG9yIHRvIGJlIGludm9rZWQgd2l0aCAoZXZlbnQpXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Vud3JhcD1mYWxzZV0gaWYgdHJ1ZSwgdW53cmFwIHRoZSBldmVudCBhbmQgcGFzcyAoY29udGV4dCwgY29tbWFuZCwgZXZlbnQpIHRvIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIgaW5zdGVhZFxuICAgKiBAcGFyYW0ge09iamVjdH0gW3RoYXRdIFBhc3MgY29udGV4dCAoYHRoaXNgKSB0byB0aGUgaGFuZGxlciBmdW5jdGlvblxuICAgKi9cbiAgQ29tbWFuZEludGVyY2VwdG9yLnByb3RvdHlwZVtob29rXSA9IGZ1bmN0aW9uKGV2ZW50cywgcHJpb3JpdHksIGhhbmRsZXJGbiwgdW53cmFwLCB0aGF0KSB7XG5cbiAgICBpZiAoaXNGdW5jdGlvbihldmVudHMpIHx8IGlzTnVtYmVyKGV2ZW50cykpIHtcbiAgICAgIHRoYXQgPSB1bndyYXA7XG4gICAgICB1bndyYXAgPSBoYW5kbGVyRm47XG4gICAgICBoYW5kbGVyRm4gPSBwcmlvcml0eTtcbiAgICAgIHByaW9yaXR5ID0gZXZlbnRzO1xuICAgICAgZXZlbnRzID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLm9uKGV2ZW50cywgaG9vaywgcHJpb3JpdHksIGhhbmRsZXJGbiwgdW53cmFwLCB0aGF0KTtcbiAgfTtcbn0pO1xuIiwiaW1wb3J0IHtcbiAgdW5pcXVlQnksXG4gIGlzQXJyYXlcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbi8qKlxuICogQSBzZXJ2aWNlIHRoYXQgb2ZmZXJzIHVuLSBhbmQgcmVkb2FibGUgZXhlY3V0aW9uIG9mIGNvbW1hbmRzLlxuICpcbiAqIFRoZSBjb21tYW5kIHN0YWNrIGlzIHJlc3BvbnNpYmxlIGZvciBleGVjdXRpbmcgbW9kZWxpbmcgYWN0aW9uc1xuICogaW4gYSB1bi0gYW5kIHJlZG9hYmxlIG1hbm5lci4gVG8gZG8gdGhpcyBpdCBkZWxlZ2F0ZXMgdGhlIGFjdHVhbFxuICogY29tbWFuZCBleGVjdXRpb24gdG8ge0BsaW5rIENvbW1hbmRIYW5kbGVyfXMuXG4gKlxuICogQ29tbWFuZCBoYW5kbGVycyBwcm92aWRlIHtAbGluayBDb21tYW5kSGFuZGxlciNleGVjdXRlKGN0eCl9IGFuZFxuICoge0BsaW5rIENvbW1hbmRIYW5kbGVyI3JldmVydChjdHgpfSBtZXRob2RzIHRvIHVuLSBhbmQgcmVkbyBhIGNvbW1hbmRcbiAqIGlkZW50aWZpZWQgYnkgYSBjb21tYW5kIGNvbnRleHQuXG4gKlxuICpcbiAqICMjIExpZmUtQ3ljbGUgZXZlbnRzXG4gKlxuICogSW4gdGhlIHByb2Nlc3MgdGhlIGNvbW1hbmQgc3RhY2sgZmlyZXMgYSBudW1iZXIgb2YgbGlmZS1jeWNsZSBldmVudHNcbiAqIHRoYXQgb3RoZXIgY29tcG9uZW50cyB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgY29tbWFuZCBleGVjdXRpb24uXG4gKlxuICogICAgKiBwcmVFeGVjdXRlXG4gKiAgICAqIHByZUV4ZWN1dGVkXG4gKiAgICAqIGV4ZWN1dGVcbiAqICAgICogZXhlY3V0ZWRcbiAqICAgICogcG9zdEV4ZWN1dGVcbiAqICAgICogcG9zdEV4ZWN1dGVkXG4gKiAgICAqIHJldmVydFxuICogICAgKiByZXZlcnRlZFxuICpcbiAqIEEgc3BlY2lhbCBldmVudCBpcyB1c2VkIGZvciB2YWxpZGF0aW5nLCB3aGV0aGVyIGEgY29tbWFuZCBjYW4gYmVcbiAqIHBlcmZvcm1lZCBwcmlvciB0byBpdHMgZXhlY3V0aW9uLlxuICpcbiAqICAgICogY2FuRXhlY3V0ZVxuICpcbiAqIEVhY2ggb2YgdGhlIGV2ZW50cyBpcyBmaXJlZCBhcyBgY29tbWFuZFN0YWNrLntldmVudE5hbWV9YCBhbmRcbiAqIGBjb21tYW5kU3RhY2sue2NvbW1hbmROYW1lfS57ZXZlbnROYW1lfWAsIHJlc3BlY3RpdmVseS4gVGhpcyBnaXZlc1xuICogY29tcG9uZW50cyBmaW5lIGdyYWluZWQgY29udHJvbCBvbiB3aGVyZSB0byBob29rIGludG8uXG4gKlxuICogVGhlIGV2ZW50IG9iamVjdCBmaXJlZCB0cmFuc3BvcnRzIGBjb21tYW5kYCwgdGhlIG5hbWUgb2YgdGhlXG4gKiBjb21tYW5kIGFuZCBgY29udGV4dGAsIHRoZSBjb21tYW5kIGNvbnRleHQuXG4gKlxuICpcbiAqICMjIENyZWF0aW5nIENvbW1hbmQgSGFuZGxlcnNcbiAqXG4gKiBDb21tYW5kIGhhbmRsZXJzIHNob3VsZCBwcm92aWRlIHRoZSB7QGxpbmsgQ29tbWFuZEhhbmRsZXIjZXhlY3V0ZShjdHgpfVxuICogYW5kIHtAbGluayBDb21tYW5kSGFuZGxlciNyZXZlcnQoY3R4KX0gbWV0aG9kcyB0byBpbXBsZW1lbnRcbiAqIHJlZG9pbmcgYW5kIHVuZG9pbmcgb2YgYSBjb21tYW5kLlxuICpcbiAqIEEgY29tbWFuZCBoYW5kbGVyIF9tdXN0XyBlbnN1cmUgdW5kbyBpcyBwZXJmb3JtZWQgcHJvcGVybHkgaW4gb3JkZXJcbiAqIG5vdCB0byBicmVhayB0aGUgdW5kbyBjaGFpbi4gSXQgbXVzdCBhbHNvIHJldHVybiB0aGUgc2hhcGVzIHRoYXRcbiAqIGdvdCBjaGFuZ2VkIGR1cmluZyB0aGUgYGV4ZWN1dGVgIGFuZCBgcmV2ZXJ0YCBvcGVyYXRpb25zLlxuICpcbiAqIENvbW1hbmQgaGFuZGxlcnMgbWF5IGV4ZWN1dGUgb3RoZXIgbW9kZWxpbmcgb3BlcmF0aW9ucyAoYW5kIHRodXNcbiAqIGNvbW1hbmRzKSBpbiB0aGVpciBgcHJlRXhlY3V0ZWAgYW5kIGBwb3N0RXhlY3V0ZWAgcGhhc2VzLiBUaGUgY29tbWFuZFxuICogc3RhY2sgd2lsbCBwcm9wZXJseSBncm91cCBhbGwgY29tbWFuZHMgdG9nZXRoZXIgaW50byBhIGxvZ2ljYWwgdW5pdFxuICogdGhhdCBtYXkgYmUgcmUtIGFuZCB1bmRvbmUgYXRvbWljYWxseS5cbiAqXG4gKiBDb21tYW5kIGhhbmRsZXJzIG11c3Qgbm90IGV4ZWN1dGUgb3RoZXIgY29tbWFuZHMgZnJvbSB3aXRoaW4gdGhlaXJcbiAqIGNvcmUgaW1wbGVtZW50YXRpb24gKGBleGVjdXRlYCwgYHJldmVydGApLlxuICpcbiAqXG4gKiAjIyBDaGFuZ2UgVHJhY2tpbmdcbiAqXG4gKiBEdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgQ29tbWFuZFN0YWNrIGl0IHdpbGwga2VlcCB0cmFjayBvZiBhbGxcbiAqIGVsZW1lbnRzIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQgZHVyaW5nIHRoZSBjb21tYW5kJ3MgZXhlY3V0aW9uLlxuICpcbiAqIEF0IHRoZSBlbmQgb2YgdGhlIENvbW1hbmRTdGFjayBleGVjdXRpb24gaXQgd2lsbCBub3RpZnkgaW50ZXJlc3RlZFxuICogY29tcG9uZW50cyB2aWEgYW4gJ2VsZW1lbnRzLmNoYW5nZWQnIGV2ZW50IHdpdGggYWxsIHRoZSBkaXJ0eVxuICogZWxlbWVudHMuXG4gKlxuICogVGhlIGV2ZW50IGNhbiBiZSBwaWNrZWQgdXAgYnkgY29tcG9uZW50cyB0aGF0IGFyZSBpbnRlcmVzdGVkIGluIHRoZSBmYWN0XG4gKiB0aGF0IGVsZW1lbnRzIGhhdmUgYmVlbiBjaGFuZ2VkLiBPbmUgdXNlIGNhc2UgZm9yIHRoaXMgaXMgdXBkYXRpbmdcbiAqIHRoZWlyIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBhZnRlciBtb3ZpbmcgLyByZXNpemluZyBvciBkZWxldGlvbi5cbiAqXG4gKiBAc2VlIENvbW1hbmRIYW5kbGVyXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvbW1hbmRTdGFjayhldmVudEJ1cywgaW5qZWN0b3IpIHtcblxuICAvKipcbiAgICogQSBtYXAgb2YgYWxsIHJlZ2lzdGVyZWQgY29tbWFuZCBoYW5kbGVycy5cbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMuX2hhbmRsZXJNYXAgPSB7fTtcblxuICAvKipcbiAgICogQSBzdGFjayBjb250YWluaW5nIGFsbCByZS91bmRvYWJsZSBhY3Rpb25zIG9uIHRoZSBkaWFncmFtXG4gICAqXG4gICAqIEB0eXBlIHtBcnJheTxPYmplY3Q+fVxuICAgKi9cbiAgdGhpcy5fc3RhY2sgPSBbXTtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgaW5kZXggb24gdGhlIHN0YWNrXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICB0aGlzLl9zdGFja0lkeCA9IC0xO1xuXG4gIC8qKlxuICAgKiBDdXJyZW50IGFjdGl2ZSBjb21tYW5kU3RhY2sgZXhlY3V0aW9uXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB0aGlzLl9jdXJyZW50RXhlY3V0aW9uID0ge1xuICAgIGFjdGlvbnM6IFtdLFxuICAgIGRpcnR5OiBbXVxuICB9O1xuXG5cbiAgdGhpcy5faW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcblxuICB0aGlzLl91aWQgPSAxO1xuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnZGlhZ3JhbS5kZXN0cm95JyxcbiAgICAnZGlhZ3JhbS5jbGVhcidcbiAgXSwgZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbGVhcihmYWxzZSk7XG4gIH0sIHRoaXMpO1xufVxuXG5Db21tYW5kU3RhY2suJGluamVjdCA9IFsgJ2V2ZW50QnVzJywgJ2luamVjdG9yJyBdO1xuXG5cbi8qKlxuICogRXhlY3V0ZSBhIGNvbW1hbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZCB0aGUgY29tbWFuZCB0byBleGVjdXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCB0aGUgZW52aXJvbm1lbnQgdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCBpblxuICovXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb21tYW5kLCBjb250ZXh0KSB7XG4gIGlmICghY29tbWFuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY29tbWFuZCByZXF1aXJlZCcpO1xuICB9XG5cbiAgdmFyIGFjdGlvbiA9IHsgY29tbWFuZDogY29tbWFuZCwgY29udGV4dDogY29udGV4dCB9O1xuXG4gIHRoaXMuX3B1c2hBY3Rpb24oYWN0aW9uKTtcbiAgdGhpcy5faW50ZXJuYWxFeGVjdXRlKGFjdGlvbik7XG4gIHRoaXMuX3BvcEFjdGlvbihhY3Rpb24pO1xufTtcblxuXG4vKipcbiAqIEFzayB3aGV0aGVyIGEgZ2l2ZW4gY29tbWFuZCBjYW4gYmUgZXhlY3V0ZWQuXG4gKlxuICogSW1wbGVtZW50b3JzIG1heSBob29rIGludG8gdGhlIG1lY2hhbmlzbSBvbiB0d28gd2F5czpcbiAqXG4gKiAgICogaW4gZXZlbnQgbGlzdGVuZXJzOlxuICpcbiAqICAgICBVc2VycyBtYXkgcHJldmVudCB0aGUgZXhlY3V0aW9uIHZpYSBhbiBldmVudCBsaXN0ZW5lci5cbiAqICAgICBJdCBtdXN0IHByZXZlbnQgdGhlIGRlZmF1bHQgYWN0aW9uIGZvciBgY29tbWFuZFN0YWNrLig8Y29tbWFuZD4uKWNhbkV4ZWN1dGVgIGV2ZW50cy5cbiAqXG4gKiAgICogaW4gY29tbWFuZCBoYW5kbGVyczpcbiAqXG4gKiAgICAgSWYgdGhlIG1ldGhvZCB7QGxpbmsgQ29tbWFuZEhhbmRsZXIjY2FuRXhlY3V0ZX0gaXMgaW1wbGVtZW50ZWQgaW4gYSBoYW5kbGVyXG4gKiAgICAgaXQgd2lsbCBiZSBjYWxsZWQgdG8gZmlndXJlIG91dCB3aGV0aGVyIHRoZSBleGVjdXRpb24gaXMgYWxsb3dlZC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGNvbW1hbmQgdGhlIGNvbW1hbmQgdG8gZXhlY3V0ZVxuICogQHBhcmFtICB7T2JqZWN0fSBjb250ZXh0IHRoZSBlbnZpcm9ubWVudCB0byBleGVjdXRlIHRoZSBjb21tYW5kIGluXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgY29tbWFuZCBjYW4gYmUgZXhlY3V0ZWRcbiAqL1xuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5jYW5FeGVjdXRlID0gZnVuY3Rpb24oY29tbWFuZCwgY29udGV4dCkge1xuXG4gIHZhciBhY3Rpb24gPSB7IGNvbW1hbmQ6IGNvbW1hbmQsIGNvbnRleHQ6IGNvbnRleHQgfTtcblxuICB2YXIgaGFuZGxlciA9IHRoaXMuX2dldEhhbmRsZXIoY29tbWFuZCk7XG5cbiAgdmFyIHJlc3VsdCA9IHRoaXMuX2ZpcmUoY29tbWFuZCwgJ2NhbkV4ZWN1dGUnLCBhY3Rpb24pO1xuXG4gIC8vIGhhbmRsZXIjY2FuRXhlY3V0ZSB3aWxsIG9ubHkgYmUgY2FsbGVkIGlmIG5vIGxpc3RlbmVyXG4gIC8vIGRlY2lkZWQgb24gYSByZXN1bHQgYWxyZWFkeVxuICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoaGFuZGxlci5jYW5FeGVjdXRlKSB7XG4gICAgICByZXN1bHQgPSBoYW5kbGVyLmNhbkV4ZWN1dGUoY29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLyoqXG4gKiBDbGVhciB0aGUgY29tbWFuZCBzdGFjaywgZXJhc2luZyBhbGwgdW5kbyAvIHJlZG8gaGlzdG9yeVxuICovXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oZW1pdCkge1xuICB0aGlzLl9zdGFjay5sZW5ndGggPSAwO1xuICB0aGlzLl9zdGFja0lkeCA9IC0xO1xuXG4gIGlmIChlbWl0ICE9PSBmYWxzZSkge1xuICAgIHRoaXMuX2ZpcmUoJ2NoYW5nZWQnKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIFVuZG8gbGFzdCBjb21tYW5kKHMpXG4gKi9cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUudW5kbyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYWN0aW9uID0gdGhpcy5fZ2V0VW5kb0FjdGlvbigpLFxuICAgICAgbmV4dDtcblxuICBpZiAoYWN0aW9uKSB7XG4gICAgdGhpcy5fcHVzaEFjdGlvbihhY3Rpb24pO1xuXG4gICAgd2hpbGUgKGFjdGlvbikge1xuICAgICAgdGhpcy5faW50ZXJuYWxVbmRvKGFjdGlvbik7XG4gICAgICBuZXh0ID0gdGhpcy5fZ2V0VW5kb0FjdGlvbigpO1xuXG4gICAgICBpZiAoIW5leHQgfHwgbmV4dC5pZCAhPT0gYWN0aW9uLmlkKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBhY3Rpb24gPSBuZXh0O1xuICAgIH1cblxuICAgIHRoaXMuX3BvcEFjdGlvbigpO1xuICB9XG59O1xuXG5cbi8qKlxuICogUmVkbyBsYXN0IGNvbW1hbmQocylcbiAqL1xuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5yZWRvID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhY3Rpb24gPSB0aGlzLl9nZXRSZWRvQWN0aW9uKCksXG4gICAgICBuZXh0O1xuXG4gIGlmIChhY3Rpb24pIHtcbiAgICB0aGlzLl9wdXNoQWN0aW9uKGFjdGlvbik7XG5cbiAgICB3aGlsZSAoYWN0aW9uKSB7XG4gICAgICB0aGlzLl9pbnRlcm5hbEV4ZWN1dGUoYWN0aW9uLCB0cnVlKTtcbiAgICAgIG5leHQgPSB0aGlzLl9nZXRSZWRvQWN0aW9uKCk7XG5cbiAgICAgIGlmICghbmV4dCB8fCBuZXh0LmlkICE9PSBhY3Rpb24uaWQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGFjdGlvbiA9IG5leHQ7XG4gICAgfVxuXG4gICAgdGhpcy5fcG9wQWN0aW9uKCk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBSZWdpc3RlciBhIGhhbmRsZXIgaW5zdGFuY2Ugd2l0aCB0aGUgY29tbWFuZCBzdGFja1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKiBAcGFyYW0ge0NvbW1hbmRIYW5kbGVyfSBoYW5kbGVyXG4gKi9cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbihjb21tYW5kLCBoYW5kbGVyKSB7XG4gIHRoaXMuX3NldEhhbmRsZXIoY29tbWFuZCwgaGFuZGxlcik7XG59O1xuXG5cbi8qKlxuICogUmVnaXN0ZXIgYSBoYW5kbGVyIHR5cGUgd2l0aCB0aGUgY29tbWFuZCBzdGFja1xuICogYnkgaW5zdGFudGlhdGluZyBpdCBhbmQgaW5qZWN0aW5nIGl0cyBkZXBlbmRlbmNpZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbW1hbmRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGEgY29uc3RydWN0b3IgZm9yIGEge0BsaW5rIENvbW1hbmRIYW5kbGVyfVxuICovXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLnJlZ2lzdGVySGFuZGxlciA9IGZ1bmN0aW9uKGNvbW1hbmQsIGhhbmRsZXJDbHMpIHtcblxuICBpZiAoIWNvbW1hbmQgfHwgIWhhbmRsZXJDbHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbW1hbmQgYW5kIGhhbmRsZXJDbHMgbXVzdCBiZSBkZWZpbmVkJyk7XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IHRoaXMuX2luamVjdG9yLmluc3RhbnRpYXRlKGhhbmRsZXJDbHMpO1xuICB0aGlzLnJlZ2lzdGVyKGNvbW1hbmQsIGhhbmRsZXIpO1xufTtcblxuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5jYW5VbmRvID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhIXRoaXMuX2dldFVuZG9BY3Rpb24oKTtcbn07XG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuY2FuUmVkbyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gISF0aGlzLl9nZXRSZWRvQWN0aW9uKCk7XG59O1xuXG4vLyBzdGFjayBhY2Nlc3MgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5fZ2V0UmVkb0FjdGlvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fc3RhY2tbdGhpcy5fc3RhY2tJZHggKyAxXTtcbn07XG5cblxuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5fZ2V0VW5kb0FjdGlvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fc3RhY2tbdGhpcy5fc3RhY2tJZHhdO1xufTtcblxuXG4vLyBpbnRlcm5hbCBmdW5jdGlvbmFsaXR5IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5faW50ZXJuYWxVbmRvID0gZnVuY3Rpb24oYWN0aW9uKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICB2YXIgY29tbWFuZCA9IGFjdGlvbi5jb21tYW5kLFxuICAgICAgY29udGV4dCA9IGFjdGlvbi5jb250ZXh0O1xuXG4gIHZhciBoYW5kbGVyID0gdGhpcy5fZ2V0SGFuZGxlcihjb21tYW5kKTtcblxuICAvLyBndWFyZCBhZ2FpbnN0IGlsbGVnYWwgbmVzdGVkIGNvbW1hbmQgc3RhY2sgaW52b2NhdGlvbnNcbiAgdGhpcy5fYXRvbWljRG8oZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5fZmlyZShjb21tYW5kLCAncmV2ZXJ0JywgYWN0aW9uKTtcblxuICAgIGlmIChoYW5kbGVyLnJldmVydCkge1xuICAgICAgc2VsZi5fbWFya0RpcnR5KGhhbmRsZXIucmV2ZXJ0KGNvbnRleHQpKTtcbiAgICB9XG5cbiAgICBzZWxmLl9yZXZlcnRlZEFjdGlvbihhY3Rpb24pO1xuXG4gICAgc2VsZi5fZmlyZShjb21tYW5kLCAncmV2ZXJ0ZWQnLCBhY3Rpb24pO1xuICB9KTtcbn07XG5cblxuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5fZmlyZSA9IGZ1bmN0aW9uKGNvbW1hbmQsIHF1YWxpZmllciwgZXZlbnQpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgZXZlbnQgPSBxdWFsaWZpZXI7XG4gICAgcXVhbGlmaWVyID0gbnVsbDtcbiAgfVxuXG4gIHZhciBuYW1lcyA9IHF1YWxpZmllciA/IFsgY29tbWFuZCArICcuJyArIHF1YWxpZmllciwgcXVhbGlmaWVyIF0gOiBbIGNvbW1hbmQgXSxcbiAgICAgIGksIG5hbWUsIHJlc3VsdDtcblxuICBldmVudCA9IHRoaXMuX2V2ZW50QnVzLmNyZWF0ZUV2ZW50KGV2ZW50KTtcblxuICBmb3IgKGkgPSAwOyAobmFtZSA9IG5hbWVzW2ldKTsgaSsrKSB7XG4gICAgcmVzdWx0ID0gdGhpcy5fZXZlbnRCdXMuZmlyZSgnY29tbWFuZFN0YWNrLicgKyBuYW1lLCBldmVudCk7XG5cbiAgICBpZiAoZXZlbnQuY2FuY2VsQnViYmxlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5fY3JlYXRlSWQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3VpZCsrO1xufTtcblxuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5fYXRvbWljRG8gPSBmdW5jdGlvbihmbikge1xuXG4gIHZhciBleGVjdXRpb24gPSB0aGlzLl9jdXJyZW50RXhlY3V0aW9uO1xuXG4gIGV4ZWN1dGlvbi5hdG9taWMgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgZm4oKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleGVjdXRpb24uYXRvbWljID0gZmFsc2U7XG4gIH1cbn07XG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2ludGVybmFsRXhlY3V0ZSA9IGZ1bmN0aW9uKGFjdGlvbiwgcmVkbykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIGNvbW1hbmQgPSBhY3Rpb24uY29tbWFuZCxcbiAgICAgIGNvbnRleHQgPSBhY3Rpb24uY29udGV4dDtcblxuICB2YXIgaGFuZGxlciA9IHRoaXMuX2dldEhhbmRsZXIoY29tbWFuZCk7XG5cbiAgaWYgKCFoYW5kbGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdubyBjb21tYW5kIGhhbmRsZXIgcmVnaXN0ZXJlZCBmb3IgPCcgKyBjb21tYW5kICsgJz4nKTtcbiAgfVxuXG4gIHRoaXMuX3B1c2hBY3Rpb24oYWN0aW9uKTtcblxuICBpZiAoIXJlZG8pIHtcbiAgICB0aGlzLl9maXJlKGNvbW1hbmQsICdwcmVFeGVjdXRlJywgYWN0aW9uKTtcblxuICAgIGlmIChoYW5kbGVyLnByZUV4ZWN1dGUpIHtcbiAgICAgIGhhbmRsZXIucHJlRXhlY3V0ZShjb250ZXh0KTtcbiAgICB9XG5cbiAgICB0aGlzLl9maXJlKGNvbW1hbmQsICdwcmVFeGVjdXRlZCcsIGFjdGlvbik7XG4gIH1cblxuICAvLyBndWFyZCBhZ2FpbnN0IGlsbGVnYWwgbmVzdGVkIGNvbW1hbmQgc3RhY2sgaW52b2NhdGlvbnNcbiAgdGhpcy5fYXRvbWljRG8oZnVuY3Rpb24oKSB7XG5cbiAgICBzZWxmLl9maXJlKGNvbW1hbmQsICdleGVjdXRlJywgYWN0aW9uKTtcblxuICAgIGlmIChoYW5kbGVyLmV4ZWN1dGUpIHtcblxuICAgICAgLy8gYWN0dWFsIGV4ZWN1dGUgKyBtYXJrIHJldHVybiByZXN1bHRzIGFzIGRpcnR5XG4gICAgICBzZWxmLl9tYXJrRGlydHkoaGFuZGxlci5leGVjdXRlKGNvbnRleHQpKTtcbiAgICB9XG5cbiAgICAvLyBsb2cgdG8gc3RhY2tcbiAgICBzZWxmLl9leGVjdXRlZEFjdGlvbihhY3Rpb24sIHJlZG8pO1xuXG4gICAgc2VsZi5fZmlyZShjb21tYW5kLCAnZXhlY3V0ZWQnLCBhY3Rpb24pO1xuICB9KTtcblxuICBpZiAoIXJlZG8pIHtcbiAgICB0aGlzLl9maXJlKGNvbW1hbmQsICdwb3N0RXhlY3V0ZScsIGFjdGlvbik7XG5cbiAgICBpZiAoaGFuZGxlci5wb3N0RXhlY3V0ZSkge1xuICAgICAgaGFuZGxlci5wb3N0RXhlY3V0ZShjb250ZXh0KTtcbiAgICB9XG5cbiAgICB0aGlzLl9maXJlKGNvbW1hbmQsICdwb3N0RXhlY3V0ZWQnLCBhY3Rpb24pO1xuICB9XG5cbiAgdGhpcy5fcG9wQWN0aW9uKGFjdGlvbik7XG59O1xuXG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX3B1c2hBY3Rpb24gPSBmdW5jdGlvbihhY3Rpb24pIHtcblxuICB2YXIgZXhlY3V0aW9uID0gdGhpcy5fY3VycmVudEV4ZWN1dGlvbixcbiAgICAgIGFjdGlvbnMgPSBleGVjdXRpb24uYWN0aW9ucztcblxuICB2YXIgYmFzZUFjdGlvbiA9IGFjdGlvbnNbMF07XG5cbiAgaWYgKGV4ZWN1dGlvbi5hdG9taWMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2lsbGVnYWwgaW52b2NhdGlvbiBpbiA8ZXhlY3V0ZT4gb3IgPHJldmVydD4gcGhhc2UgKGFjdGlvbjogJyArIGFjdGlvbi5jb21tYW5kICsgJyknKTtcbiAgfVxuXG4gIGlmICghYWN0aW9uLmlkKSB7XG4gICAgYWN0aW9uLmlkID0gKGJhc2VBY3Rpb24gJiYgYmFzZUFjdGlvbi5pZCkgfHwgdGhpcy5fY3JlYXRlSWQoKTtcbiAgfVxuXG4gIGFjdGlvbnMucHVzaChhY3Rpb24pO1xufTtcblxuXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLl9wb3BBY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgdmFyIGV4ZWN1dGlvbiA9IHRoaXMuX2N1cnJlbnRFeGVjdXRpb24sXG4gICAgICBhY3Rpb25zID0gZXhlY3V0aW9uLmFjdGlvbnMsXG4gICAgICBkaXJ0eSA9IGV4ZWN1dGlvbi5kaXJ0eTtcblxuICBhY3Rpb25zLnBvcCgpO1xuXG4gIGlmICghYWN0aW9ucy5sZW5ndGgpIHtcbiAgICB0aGlzLl9ldmVudEJ1cy5maXJlKCdlbGVtZW50cy5jaGFuZ2VkJywgeyBlbGVtZW50czogdW5pcXVlQnkoJ2lkJywgZGlydHkucmV2ZXJzZSgpKSB9KTtcblxuICAgIGRpcnR5Lmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9maXJlKCdjaGFuZ2VkJyk7XG4gIH1cbn07XG5cblxuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5fbWFya0RpcnR5ID0gZnVuY3Rpb24oZWxlbWVudHMpIHtcbiAgdmFyIGV4ZWN1dGlvbiA9IHRoaXMuX2N1cnJlbnRFeGVjdXRpb247XG5cbiAgaWYgKCFlbGVtZW50cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGVsZW1lbnRzID0gaXNBcnJheShlbGVtZW50cykgPyBlbGVtZW50cyA6IFsgZWxlbWVudHMgXTtcblxuICBleGVjdXRpb24uZGlydHkgPSBleGVjdXRpb24uZGlydHkuY29uY2F0KGVsZW1lbnRzKTtcbn07XG5cblxuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5fZXhlY3V0ZWRBY3Rpb24gPSBmdW5jdGlvbihhY3Rpb24sIHJlZG8pIHtcbiAgdmFyIHN0YWNrSWR4ID0gKyt0aGlzLl9zdGFja0lkeDtcblxuICBpZiAoIXJlZG8pIHtcbiAgICB0aGlzLl9zdGFjay5zcGxpY2Uoc3RhY2tJZHgsIHRoaXMuX3N0YWNrLmxlbmd0aCwgYWN0aW9uKTtcbiAgfVxufTtcblxuXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLl9yZXZlcnRlZEFjdGlvbiA9IGZ1bmN0aW9uKGFjdGlvbikge1xuICB0aGlzLl9zdGFja0lkeC0tO1xufTtcblxuXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLl9nZXRIYW5kbGVyID0gZnVuY3Rpb24oY29tbWFuZCkge1xuICByZXR1cm4gdGhpcy5faGFuZGxlck1hcFtjb21tYW5kXTtcbn07XG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX3NldEhhbmRsZXIgPSBmdW5jdGlvbihjb21tYW5kLCBoYW5kbGVyKSB7XG4gIGlmICghY29tbWFuZCB8fCAhaGFuZGxlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignY29tbWFuZCBhbmQgaGFuZGxlciByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKHRoaXMuX2hhbmRsZXJNYXBbY29tbWFuZF0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ292ZXJyaWRpbmcgaGFuZGxlciBmb3IgY29tbWFuZCA8JyArIGNvbW1hbmQgKyAnPicpO1xuICB9XG5cbiAgdGhpcy5faGFuZGxlck1hcFtjb21tYW5kXSA9IGhhbmRsZXI7XG59O1xuIiwiaW1wb3J0IENvbW1hbmRTdGFjayBmcm9tICcuL0NvbW1hbmRTdGFjayc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tbWFuZFN0YWNrOiBbICd0eXBlJywgQ29tbWFuZFN0YWNrIF1cbn07XG4iLCJpbXBvcnQge1xuICBpc051bWJlcixcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBldmVyeSxcbiAgZGVib3VuY2UsXG4gIGJpbmQsXG4gIHJlZHVjZVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICByZW1vdmUgYXMgY29sbGVjdGlvblJlbW92ZVxufSBmcm9tICcuLi91dGlsL0NvbGxlY3Rpb25zJztcblxuaW1wb3J0IHtcbiAgZ2V0VHlwZVxufSBmcm9tICcuLi91dGlsL0VsZW1lbnRzJztcblxuaW1wb3J0IHtcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICBjbGFzc2VzIGFzIHN2Z0NsYXNzZXMsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGUsXG4gIHRyYW5zZm9ybSBhcyBzdmdUcmFuc2Zvcm1cbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQgeyBjcmVhdGVNYXRyaXggYXMgY3JlYXRlTWF0cml4IH0gZnJvbSAndGlueS1zdmcnO1xuXG5cbmZ1bmN0aW9uIHJvdW5kKG51bWJlciwgcmVzb2x1dGlvbikge1xuICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIgKiByZXNvbHV0aW9uKSAvIHJlc29sdXRpb247XG59XG5cbmZ1bmN0aW9uIGVuc3VyZVB4KG51bWJlcikge1xuICByZXR1cm4gaXNOdW1iZXIobnVtYmVyKSA/IG51bWJlciArICdweCcgOiBudW1iZXI7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIEhUTUwgY29udGFpbmVyIGVsZW1lbnQgZm9yIGEgU1ZHIGVsZW1lbnQgd2l0aFxuICogdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fSB0aGUgY29udGFpbmVyIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ29udGFpbmVyKG9wdGlvbnMpIHtcblxuICBvcHRpb25zID0gYXNzaWduKHt9LCB7IHdpZHRoOiAnMTAwJScsIGhlaWdodDogJzEwMCUnIH0sIG9wdGlvbnMpO1xuXG4gIHZhciBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lciB8fCBkb2N1bWVudC5ib2R5O1xuXG4gIC8vIGNyZWF0ZSBhIDxkaXY+IGFyb3VuZCB0aGUgc3ZnIGVsZW1lbnQgd2l0aCB0aGUgcmVzcGVjdGl2ZSBzaXplXG4gIC8vIHRoaXMgd2F5IHdlIGNhbiBhbHdheXMgZ2V0IHRoZSBjb3JyZWN0IGNvbnRhaW5lciBzaXplXG4gIC8vICh0aGlzIGlzIGltcG9zc2libGUgZm9yIDxzdmc+IGVsZW1lbnRzIGF0IHRoZSBtb21lbnQpXG4gIHZhciBwYXJlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgcGFyZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnZGpzLWNvbnRhaW5lcicpO1xuXG4gIGFzc2lnbihwYXJlbnQuc3R5bGUsIHtcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgd2lkdGg6IGVuc3VyZVB4KG9wdGlvbnMud2lkdGgpLFxuICAgIGhlaWdodDogZW5zdXJlUHgob3B0aW9ucy5oZWlnaHQpXG4gIH0pO1xuXG4gIGNvbnRhaW5lci5hcHBlbmRDaGlsZChwYXJlbnQpO1xuXG4gIHJldHVybiBwYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUdyb3VwKHBhcmVudCwgY2xzLCBjaGlsZEluZGV4KSB7XG4gIHZhciBncm91cCA9IHN2Z0NyZWF0ZSgnZycpO1xuICBzdmdDbGFzc2VzKGdyb3VwKS5hZGQoY2xzKTtcblxuICB2YXIgaW5kZXggPSBjaGlsZEluZGV4ICE9PSB1bmRlZmluZWQgPyBjaGlsZEluZGV4IDogcGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoIC0gMTtcblxuICAvLyBtdXN0IGVuc3VyZSBzZWNvbmQgYXJndW1lbnQgaXMgbm9kZSBvciBfbnVsbF9cbiAgLy8gY2YuIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Ob2RlL2luc2VydEJlZm9yZVxuICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGdyb3VwLCBwYXJlbnQuY2hpbGROb2Rlc1tpbmRleF0gfHwgbnVsbCk7XG5cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG52YXIgQkFTRV9MQVlFUiA9ICdiYXNlJztcblxuXG52YXIgUkVRVUlSRURfTU9ERUxfQVRUUlMgPSB7XG4gIHNoYXBlOiBbICd4JywgJ3knLCAnd2lkdGgnLCAnaGVpZ2h0JyBdLFxuICBjb25uZWN0aW9uOiBbICd3YXlwb2ludHMnIF1cbn07XG5cbi8qKlxuICogVGhlIG1haW4gZHJhd2luZyBjYW52YXMuXG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqXG4gKiBAZW1pdHMgQ2FudmFzI2NhbnZhcy5pbml0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZ1xuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7R3JhcGhpY3NGYWN0b3J5fSBncmFwaGljc0ZhY3RvcnlcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ2FudmFzKGNvbmZpZywgZXZlbnRCdXMsIGdyYXBoaWNzRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5KSB7XG5cbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcbiAgdGhpcy5fZWxlbWVudFJlZ2lzdHJ5ID0gZWxlbWVudFJlZ2lzdHJ5O1xuICB0aGlzLl9ncmFwaGljc0ZhY3RvcnkgPSBncmFwaGljc0ZhY3Rvcnk7XG5cbiAgdGhpcy5faW5pdChjb25maWcgfHwge30pO1xufVxuXG5DYW52YXMuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5jYW52YXMnLFxuICAnZXZlbnRCdXMnLFxuICAnZ3JhcGhpY3NGYWN0b3J5JyxcbiAgJ2VsZW1lbnRSZWdpc3RyeSdcbl07XG5cblxuQ2FudmFzLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uKGNvbmZpZykge1xuXG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIC8vIENyZWF0ZXMgYSA8c3ZnPiBlbGVtZW50IHRoYXQgaXMgd3JhcHBlZCBpbnRvIGEgPGRpdj4uXG4gIC8vIFRoaXMgd2F5IHdlIGFyZSBhbHdheXMgYWJsZSB0byBjb3JyZWN0bHkgZmlndXJlIG91dCB0aGUgc2l6ZSBvZiB0aGUgc3ZnIGVsZW1lbnRcbiAgLy8gYnkgcXVlcnlpbmcgdGhlIHBhcmVudCBub2RlLlxuICAvL1xuICAvLyAoSXQgaXMgbm90IHBvc3NpYmxlIHRvIGdldCB0aGUgc2l6ZSBvZiBhIHN2ZyBlbGVtZW50IGNyb3NzIGJyb3dzZXIgQCAyMDE0LTA0LTAxKVxuICAvL1xuICAvLyA8ZGl2IGNsYXNzPVwiZGpzLWNvbnRhaW5lclwiIHN0eWxlPVwid2lkdGg6IHtkZXNpcmVkLXdpZHRofSwgaGVpZ2h0OiB7ZGVzaXJlZC1oZWlnaHR9XCI+XG4gIC8vICAgPHN2ZyB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCI+XG4gIC8vICAgIC4uLlxuICAvLyAgIDwvc3ZnPlxuICAvLyA8L2Rpdj5cblxuICAvLyBodG1sIGNvbnRhaW5lclxuICB2YXIgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyID0gY3JlYXRlQ29udGFpbmVyKGNvbmZpZyk7XG5cbiAgdmFyIHN2ZyA9IHRoaXMuX3N2ZyA9IHN2Z0NyZWF0ZSgnc3ZnJyk7XG4gIHN2Z0F0dHIoc3ZnLCB7IHdpZHRoOiAnMTAwJScsIGhlaWdodDogJzEwMCUnIH0pO1xuXG4gIHN2Z0FwcGVuZChjb250YWluZXIsIHN2Zyk7XG5cbiAgdmFyIHZpZXdwb3J0ID0gdGhpcy5fdmlld3BvcnQgPSBjcmVhdGVHcm91cChzdmcsICd2aWV3cG9ydCcpO1xuXG4gIHRoaXMuX2xheWVycyA9IHt9O1xuXG4gIC8vIGRlYm91bmNlIGNhbnZhcy52aWV3Ym94LmNoYW5nZWQgZXZlbnRzXG4gIC8vIGZvciBzbW9vdGhlciBkaWFncmFtIGludGVyYWN0aW9uXG4gIGlmIChjb25maWcuZGVmZXJVcGRhdGUgIT09IGZhbHNlKSB7XG4gICAgdGhpcy5fdmlld2JveENoYW5nZWQgPSBkZWJvdW5jZShiaW5kKHRoaXMuX3ZpZXdib3hDaGFuZ2VkLCB0aGlzKSwgMzAwKTtcbiAgfVxuXG4gIGV2ZW50QnVzLm9uKCdkaWFncmFtLmluaXQnLCBmdW5jdGlvbigpIHtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgY2FudmFzIGlzIHJlYWR5IHRvIGJlIGRyYXduIG9uLlxuICAgICAqXG4gICAgICogQG1lbWJlck9mIENhbnZhc1xuICAgICAqXG4gICAgICogQGV2ZW50IGNhbnZhcy5pbml0XG4gICAgICpcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gc3ZnIHRoZSBjcmVhdGVkIHN2ZyBlbGVtZW50XG4gICAgICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSB2aWV3cG9ydCB0aGUgZGlyZWN0IHBhcmVudCBvZiBkaWFncmFtIGVsZW1lbnRzIGFuZCBzaGFwZXNcbiAgICAgKi9cbiAgICBldmVudEJ1cy5maXJlKCdjYW52YXMuaW5pdCcsIHtcbiAgICAgIHN2Zzogc3ZnLFxuICAgICAgdmlld3BvcnQ6IHZpZXdwb3J0XG4gICAgfSk7XG5cbiAgfSwgdGhpcyk7XG5cbiAgLy8gcmVzZXQgdmlld2JveCBvbiBzaGFwZSBjaGFuZ2VzIHRvXG4gIC8vIHJlY29tcHV0ZSB0aGUgdmlld2JveFxuICBldmVudEJ1cy5vbihbXG4gICAgJ3NoYXBlLmFkZGVkJyxcbiAgICAnY29ubmVjdGlvbi5hZGRlZCcsXG4gICAgJ3NoYXBlLnJlbW92ZWQnLFxuICAgICdjb25uZWN0aW9uLnJlbW92ZWQnLFxuICAgICdlbGVtZW50cy5jaGFuZ2VkJ1xuICBdLCBmdW5jdGlvbigpIHtcbiAgICBkZWxldGUgdGhpcy5fY2FjaGVkVmlld2JveDtcbiAgfSwgdGhpcyk7XG5cbiAgZXZlbnRCdXMub24oJ2RpYWdyYW0uZGVzdHJveScsIDUwMCwgdGhpcy5fZGVzdHJveSwgdGhpcyk7XG4gIGV2ZW50QnVzLm9uKCdkaWFncmFtLmNsZWFyJywgNTAwLCB0aGlzLl9jbGVhciwgdGhpcyk7XG59O1xuXG5DYW52YXMucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24oZW1pdCkge1xuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdjYW52YXMuZGVzdHJveScsIHtcbiAgICBzdmc6IHRoaXMuX3N2ZyxcbiAgICB2aWV3cG9ydDogdGhpcy5fdmlld3BvcnRcbiAgfSk7XG5cbiAgdmFyIHBhcmVudCA9IHRoaXMuX2NvbnRhaW5lci5wYXJlbnROb2RlO1xuXG4gIGlmIChwYXJlbnQpIHtcbiAgICBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5fY29udGFpbmVyKTtcbiAgfVxuXG4gIGRlbGV0ZSB0aGlzLl9zdmc7XG4gIGRlbGV0ZSB0aGlzLl9jb250YWluZXI7XG4gIGRlbGV0ZSB0aGlzLl9sYXllcnM7XG4gIGRlbGV0ZSB0aGlzLl9yb290RWxlbWVudDtcbiAgZGVsZXRlIHRoaXMuX3ZpZXdwb3J0O1xufTtcblxuQ2FudmFzLnByb3RvdHlwZS5fY2xlYXIgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIGFsbEVsZW1lbnRzID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldEFsbCgpO1xuXG4gIC8vIHJlbW92ZSBhbGwgZWxlbWVudHNcbiAgYWxsRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgdmFyIHR5cGUgPSBnZXRUeXBlKGVsZW1lbnQpO1xuXG4gICAgaWYgKHR5cGUgPT09ICdyb290Jykge1xuICAgICAgc2VsZi5zZXRSb290RWxlbWVudChudWxsLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5fcmVtb3ZlRWxlbWVudChlbGVtZW50LCB0eXBlKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGZvcmNlIHJlY29tcHV0YXRpb24gb2YgdmlldyBib3hcbiAgZGVsZXRlIHRoaXMuX2NhY2hlZFZpZXdib3g7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGRlZmF1bHQgbGF5ZXIgb24gd2hpY2hcbiAqIGFsbCBlbGVtZW50cyBhcmUgZHJhd24uXG4gKlxuICogQHJldHVybnMge1NWR0VsZW1lbnR9XG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuZ2V0RGVmYXVsdExheWVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmdldExheWVyKEJBU0VfTEFZRVIsIDApO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgbGF5ZXIgdGhhdCBpcyB1c2VkIHRvIGRyYXcgZWxlbWVudHNcbiAqIG9yIGFubm90YXRpb25zIG9uIGl0LlxuICpcbiAqIE5vbi1leGlzdGluZyBsYXllcnMgcmV0cmlldmVkIHRocm91Z2ggdGhpcyBtZXRob2RcbiAqIHdpbGwgYmUgY3JlYXRlZC4gRHVyaW5nIGNyZWF0aW9uLCB0aGUgb3B0aW9uYWwgaW5kZXhcbiAqIG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBsYXllcnMgYmVsb3cgb3IgYWJvdmUgZXhpc3RpbmcgbGF5ZXJzLlxuICogQSBsYXllciB3aXRoIGEgY2VydGFpbiBpbmRleCBpcyBhbHdheXMgY3JlYXRlZCBhYm92ZSBhbGxcbiAqIGV4aXN0aW5nIGxheWVycyB3aXRoIHRoZSBzYW1lIGluZGV4LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqXG4gKiBAcmV0dXJucyB7U1ZHRWxlbWVudH1cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5nZXRMYXllciA9IGZ1bmN0aW9uKG5hbWUsIGluZGV4KSB7XG5cbiAgaWYgKCFuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHNwZWNpZnkgYSBuYW1lJyk7XG4gIH1cblxuICB2YXIgbGF5ZXIgPSB0aGlzLl9sYXllcnNbbmFtZV07XG5cbiAgaWYgKCFsYXllcikge1xuICAgIGxheWVyID0gdGhpcy5fbGF5ZXJzW25hbWVdID0gdGhpcy5fY3JlYXRlTGF5ZXIobmFtZSwgaW5kZXgpO1xuICB9XG5cbiAgLy8gdGhyb3cgYW4gZXJyb3IgaWYgbGF5ZXIgY3JlYXRpb24gLyByZXRyaXZhbCBpc1xuICAvLyByZXF1ZXN0ZWQgb24gZGlmZmVyZW50IGluZGV4XG4gIGlmICh0eXBlb2YgaW5kZXggIT09ICd1bmRlZmluZWQnICYmIGxheWVyLmluZGV4ICE9PSBpbmRleCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbGF5ZXIgPCcgKyBuYW1lICsgJz4gYWxyZWFkeSBjcmVhdGVkIGF0IGluZGV4IDwnICsgaW5kZXggKyAnPicpO1xuICB9XG5cbiAgcmV0dXJuIGxheWVyLmdyb3VwO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZ2l2ZW4gbGF5ZXIgYW5kIHJldHVybnMgaXQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW5kZXg9MF1cbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IGxheWVyIGRlc2NyaXB0b3Igd2l0aCB7IGluZGV4LCBncm91cDogU1ZHR3JvdXAgfVxuICovXG5DYW52YXMucHJvdG90eXBlLl9jcmVhdGVMYXllciA9IGZ1bmN0aW9uKG5hbWUsIGluZGV4KSB7XG5cbiAgaWYgKCFpbmRleCkge1xuICAgIGluZGV4ID0gMDtcbiAgfVxuXG4gIHZhciBjaGlsZEluZGV4ID0gcmVkdWNlKHRoaXMuX2xheWVycywgZnVuY3Rpb24oY2hpbGRJbmRleCwgbGF5ZXIpIHtcbiAgICBpZiAoaW5kZXggPj0gbGF5ZXIuaW5kZXgpIHtcbiAgICAgIGNoaWxkSW5kZXgrKztcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGRJbmRleDtcbiAgfSwgMCk7XG5cbiAgcmV0dXJuIHtcbiAgICBncm91cDogY3JlYXRlR3JvdXAodGhpcy5fdmlld3BvcnQsICdsYXllci0nICsgbmFtZSwgY2hpbGRJbmRleCksXG4gICAgaW5kZXg6IGluZGV4XG4gIH07XG5cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaHRtbCBlbGVtZW50IHRoYXQgZW5jbG9zZXMgdGhlXG4gKiBkcmF3aW5nIGNhbnZhcy5cbiAqXG4gKiBAcmV0dXJuIHtET01Ob2RlfVxuICovXG5DYW52YXMucHJvdG90eXBlLmdldENvbnRhaW5lciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xufTtcblxuXG4vLyBtYXJrZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuQ2FudmFzLnByb3RvdHlwZS5fdXBkYXRlTWFya2VyID0gZnVuY3Rpb24oZWxlbWVudCwgbWFya2VyLCBhZGQpIHtcbiAgdmFyIGNvbnRhaW5lcjtcblxuICBpZiAoIWVsZW1lbnQuaWQpIHtcbiAgICBlbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldChlbGVtZW50KTtcbiAgfVxuXG4gIC8vIHdlIG5lZWQgdG8gYWNjZXNzIGFsbFxuICBjb250YWluZXIgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnkuX2VsZW1lbnRzW2VsZW1lbnQuaWRdO1xuXG4gIGlmICghY29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yRWFjaChbIGNvbnRhaW5lci5nZngsIGNvbnRhaW5lci5zZWNvbmRhcnlHZnggXSwgZnVuY3Rpb24oZ2Z4KSB7XG4gICAgaWYgKGdmeCkge1xuXG4gICAgICAvLyBpbnZva2UgZWl0aGVyIGFkZENsYXNzIG9yIHJlbW92ZUNsYXNzIGJhc2VkIG9uIG1vZGVcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgc3ZnQ2xhc3NlcyhnZngpLmFkZChtYXJrZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3ZnQ2xhc3NlcyhnZngpLnJlbW92ZShtYXJrZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCBhIG1hcmtlciBoYXMgYmVlbiB1cGRhdGVkIGZvciBhbiBlbGVtZW50XG4gICAqXG4gICAqIEBldmVudCBlbGVtZW50Lm1hcmtlci51cGRhdGVcbiAgICogQHR5cGUge09iamVjdH1cbiAgICogQHByb3BlcnR5IHtkanMubW9kZWwuRWxlbWVudH0gZWxlbWVudCB0aGUgc2hhcGVcbiAgICogQHByb3BlcnR5IHtPYmplY3R9IGdmeCB0aGUgZ3JhcGhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzaGFwZVxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gbWFya2VyXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWRkIHRydWUgaWYgdGhlIG1hcmtlciB3YXMgYWRkZWQsIGZhbHNlIGlmIGl0IGdvdCByZW1vdmVkXG4gICAqL1xuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdlbGVtZW50Lm1hcmtlci51cGRhdGUnLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIGdmeDogY29udGFpbmVyLmdmeCwgbWFya2VyOiBtYXJrZXIsIGFkZDogISFhZGQgfSk7XG59O1xuXG5cbi8qKlxuICogQWRkcyBhIG1hcmtlciB0byBhbiBlbGVtZW50IChiYXNpY2FsbHkgYSBjc3MgY2xhc3MpLlxuICpcbiAqIEZpcmVzIHRoZSBlbGVtZW50Lm1hcmtlci51cGRhdGUgZXZlbnQsIG1ha2luZyBpdCBwb3NzaWJsZSB0b1xuICogaW50ZWdyYXRlIGV4dGVuc2lvbiBpbnRvIHRoZSBtYXJrZXIgbGlmZS1jeWNsZSwgdG9vLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjYW52YXMuYWRkTWFya2VyKCdmb28nLCAnc29tZS1tYXJrZXInKTtcbiAqXG4gKiB2YXIgZm9vR2Z4ID0gY2FudmFzLmdldEdyYXBoaWNzKCdmb28nKTtcbiAqXG4gKiBmb29HZng7IC8vIDxnIGNsYXNzPVwiLi4uIHNvbWUtbWFya2VyXCI+IC4uLiA8L2c+XG4gKlxuICogQHBhcmFtIHtzdHJpbmd8ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrZXJcbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5hZGRNYXJrZXIgPSBmdW5jdGlvbihlbGVtZW50LCBtYXJrZXIpIHtcbiAgdGhpcy5fdXBkYXRlTWFya2VyKGVsZW1lbnQsIG1hcmtlciwgdHJ1ZSk7XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlIGEgbWFya2VyIGZyb20gYW4gZWxlbWVudC5cbiAqXG4gKiBGaXJlcyB0aGUgZWxlbWVudC5tYXJrZXIudXBkYXRlIGV2ZW50LCBtYWtpbmcgaXQgcG9zc2libGUgdG9cbiAqIGludGVncmF0ZSBleHRlbnNpb24gaW50byB0aGUgbWFya2VyIGxpZmUtY3ljbGUsIHRvby5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd8ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSAge3N0cmluZ30gbWFya2VyXG4gKi9cbkNhbnZhcy5wcm90b3R5cGUucmVtb3ZlTWFya2VyID0gZnVuY3Rpb24oZWxlbWVudCwgbWFya2VyKSB7XG4gIHRoaXMuX3VwZGF0ZU1hcmtlcihlbGVtZW50LCBtYXJrZXIsIGZhbHNlKTtcbn07XG5cbi8qKlxuICogQ2hlY2sgdGhlIGV4aXN0ZW5jZSBvZiBhIG1hcmtlciBvbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ3xkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtICB7c3RyaW5nfSBtYXJrZXJcbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5oYXNNYXJrZXIgPSBmdW5jdGlvbihlbGVtZW50LCBtYXJrZXIpIHtcbiAgaWYgKCFlbGVtZW50LmlkKSB7XG4gICAgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5nZXQoZWxlbWVudCk7XG4gIH1cblxuICB2YXIgZ2Z4ID0gdGhpcy5nZXRHcmFwaGljcyhlbGVtZW50KTtcblxuICByZXR1cm4gc3ZnQ2xhc3NlcyhnZngpLmhhcyhtYXJrZXIpO1xufTtcblxuLyoqXG4gKiBUb2dnbGVzIGEgbWFya2VyIG9uIGFuIGVsZW1lbnQuXG4gKlxuICogRmlyZXMgdGhlIGVsZW1lbnQubWFya2VyLnVwZGF0ZSBldmVudCwgbWFraW5nIGl0IHBvc3NpYmxlIHRvXG4gKiBpbnRlZ3JhdGUgZXh0ZW5zaW9uIGludG8gdGhlIG1hcmtlciBsaWZlLWN5Y2xlLCB0b28uXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfGRqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0gIHtzdHJpbmd9IG1hcmtlclxuICovXG5DYW52YXMucHJvdG90eXBlLnRvZ2dsZU1hcmtlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIG1hcmtlcikge1xuICBpZiAodGhpcy5oYXNNYXJrZXIoZWxlbWVudCwgbWFya2VyKSkge1xuICAgIHRoaXMucmVtb3ZlTWFya2VyKGVsZW1lbnQsIG1hcmtlcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hZGRNYXJrZXIoZWxlbWVudCwgbWFya2VyKTtcbiAgfVxufTtcblxuQ2FudmFzLnByb3RvdHlwZS5nZXRSb290RWxlbWVudCA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX3Jvb3RFbGVtZW50KSB7XG4gICAgdGhpcy5zZXRSb290RWxlbWVudCh7IGlkOiAnX19pbXBsaWNpdHJvb3QnLCBjaGlsZHJlbjogW10gfSk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fcm9vdEVsZW1lbnQ7XG59O1xuXG5cblxuLy8gcm9vdCBlbGVtZW50IGhhbmRsaW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBTZXRzIGEgZ2l2ZW4gZWxlbWVudCBhcyB0aGUgbmV3IHJvb3QgZWxlbWVudCBmb3IgdGhlIGNhbnZhc1xuICogYW5kIHJldHVybnMgdGhlIG5ldyByb290IGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8ZGpzLm1vZGVsLlJvb3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW292ZXJyaWRlXSB3aGV0aGVyIHRvIG92ZXJyaWRlIHRoZSBjdXJyZW50IHJvb3QgZWxlbWVudCwgaWYgYW55XG4gKlxuICogQHJldHVybiB7T2JqZWN0fGRqcy5tb2RlbC5Sb290fSBuZXcgcm9vdCBlbGVtZW50XG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuc2V0Um9vdEVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50LCBvdmVycmlkZSkge1xuXG4gIGlmIChlbGVtZW50KSB7XG4gICAgdGhpcy5fZW5zdXJlVmFsaWQoJ3Jvb3QnLCBlbGVtZW50KTtcbiAgfVxuXG4gIHZhciBjdXJyZW50Um9vdCA9IHRoaXMuX3Jvb3RFbGVtZW50LFxuICAgICAgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LFxuICAgICAgZXZlbnRCdXMgPSB0aGlzLl9ldmVudEJ1cztcblxuICBpZiAoY3VycmVudFJvb3QpIHtcbiAgICBpZiAoIW92ZXJyaWRlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jvb3RFbGVtZW50IGFscmVhZHkgc2V0LCBuZWVkIHRvIHNwZWNpZnkgb3ZlcnJpZGUnKTtcbiAgICB9XG5cbiAgICAvLyBzaW11bGF0ZSBlbGVtZW50IHJlbW92ZSBldmVudCBzZXF1ZW5jZVxuICAgIGV2ZW50QnVzLmZpcmUoJ3Jvb3QucmVtb3ZlJywgeyBlbGVtZW50OiBjdXJyZW50Um9vdCB9KTtcbiAgICBldmVudEJ1cy5maXJlKCdyb290LnJlbW92ZWQnLCB7IGVsZW1lbnQ6IGN1cnJlbnRSb290IH0pO1xuXG4gICAgZWxlbWVudFJlZ2lzdHJ5LnJlbW92ZShjdXJyZW50Um9vdCk7XG4gIH1cblxuICBpZiAoZWxlbWVudCkge1xuICAgIHZhciBnZnggPSB0aGlzLmdldERlZmF1bHRMYXllcigpO1xuXG4gICAgLy8gcmVzZW1ibGUgZWxlbWVudCBhZGQgZXZlbnQgc2VxdWVuY2VcbiAgICBldmVudEJ1cy5maXJlKCdyb290LmFkZCcsIHsgZWxlbWVudDogZWxlbWVudCB9KTtcblxuICAgIGVsZW1lbnRSZWdpc3RyeS5hZGQoZWxlbWVudCwgZ2Z4LCB0aGlzLl9zdmcpO1xuXG4gICAgZXZlbnRCdXMuZmlyZSgncm9vdC5hZGRlZCcsIHsgZWxlbWVudDogZWxlbWVudCwgZ2Z4OiBnZnggfSk7XG4gIH1cblxuICB0aGlzLl9yb290RWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuXG5cblxuLy8gYWRkIGZ1bmN0aW9uYWxpdHkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5DYW52YXMucHJvdG90eXBlLl9lbnN1cmVWYWxpZCA9IGZ1bmN0aW9uKHR5cGUsIGVsZW1lbnQpIHtcbiAgaWYgKCFlbGVtZW50LmlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlbGVtZW50IG11c3QgaGF2ZSBhbiBpZCcpO1xuICB9XG5cbiAgaWYgKHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5nZXQoZWxlbWVudC5pZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VsZW1lbnQgd2l0aCBpZCAnICsgZWxlbWVudC5pZCArICcgYWxyZWFkeSBleGlzdHMnKTtcbiAgfVxuXG4gIHZhciByZXF1aXJlZEF0dHJzID0gUkVRVUlSRURfTU9ERUxfQVRUUlNbdHlwZV07XG5cbiAgdmFyIHZhbGlkID0gZXZlcnkocmVxdWlyZWRBdHRycywgZnVuY3Rpb24oYXR0cikge1xuICAgIHJldHVybiB0eXBlb2YgZWxlbWVudFthdHRyXSAhPT0gJ3VuZGVmaW5lZCc7XG4gIH0pO1xuXG4gIGlmICghdmFsaWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnbXVzdCBzdXBwbHkgeyAnICsgcmVxdWlyZWRBdHRycy5qb2luKCcsICcpICsgJyB9IHdpdGggJyArIHR5cGUpO1xuICB9XG59O1xuXG5DYW52YXMucHJvdG90eXBlLl9zZXRQYXJlbnQgPSBmdW5jdGlvbihlbGVtZW50LCBwYXJlbnQsIHBhcmVudEluZGV4KSB7XG4gIGNvbGxlY3Rpb25BZGQocGFyZW50LmNoaWxkcmVuLCBlbGVtZW50LCBwYXJlbnRJbmRleCk7XG4gIGVsZW1lbnQucGFyZW50ID0gcGFyZW50O1xufTtcblxuLyoqXG4gKiBBZGRzIGFuIGVsZW1lbnQgdG8gdGhlIGNhbnZhcy5cbiAqXG4gKiBUaGlzIHdpcmVzIHRoZSBwYXJlbnQgPC0+IGNoaWxkIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBlbGVtZW50IGFuZFxuICogYSBleHBsaWNpdGx5IHNwZWNpZmllZCBwYXJlbnQgb3IgYW4gaW1wbGljaXQgcm9vdCBlbGVtZW50LlxuICpcbiAqIER1cmluZyBhZGQgaXQgZW1pdHMgdGhlIGV2ZW50c1xuICpcbiAqICAqIDx7dHlwZX0uYWRkPiAoZWxlbWVudCwgcGFyZW50KVxuICogICogPHt0eXBlfS5hZGRlZD4gKGVsZW1lbnQsIGdmeClcbiAqXG4gKiBFeHRlbnNpb25zIG1heSBob29rIGludG8gdGhlc2UgZXZlbnRzIHRvIHBlcmZvcm0gdGhlaXIgbWFnaWMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fGRqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdHxkanMubW9kZWwuQmFzZX0gW3BhcmVudF1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGFyZW50SW5kZXhdXG4gKlxuICogQHJldHVybiB7T2JqZWN0fGRqcy5tb2RlbC5CYXNlfSB0aGUgYWRkZWQgZWxlbWVudFxuICovXG5DYW52YXMucHJvdG90eXBlLl9hZGRFbGVtZW50ID0gZnVuY3Rpb24odHlwZSwgZWxlbWVudCwgcGFyZW50LCBwYXJlbnRJbmRleCkge1xuXG4gIHBhcmVudCA9IHBhcmVudCB8fCB0aGlzLmdldFJvb3RFbGVtZW50KCk7XG5cbiAgdmFyIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXMsXG4gICAgICBncmFwaGljc0ZhY3RvcnkgPSB0aGlzLl9ncmFwaGljc0ZhY3Rvcnk7XG5cbiAgdGhpcy5fZW5zdXJlVmFsaWQodHlwZSwgZWxlbWVudCk7XG5cbiAgZXZlbnRCdXMuZmlyZSh0eXBlICsgJy5hZGQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIHBhcmVudDogcGFyZW50IH0pO1xuXG4gIHRoaXMuX3NldFBhcmVudChlbGVtZW50LCBwYXJlbnQsIHBhcmVudEluZGV4KTtcblxuICAvLyBjcmVhdGUgZ3JhcGhpY3NcbiAgdmFyIGdmeCA9IGdyYXBoaWNzRmFjdG9yeS5jcmVhdGUodHlwZSwgZWxlbWVudCwgcGFyZW50SW5kZXgpO1xuXG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5hZGQoZWxlbWVudCwgZ2Z4KTtcblxuICAvLyB1cGRhdGUgaXRzIHZpc3VhbFxuICBncmFwaGljc0ZhY3RvcnkudXBkYXRlKHR5cGUsIGVsZW1lbnQsIGdmeCk7XG5cbiAgZXZlbnRCdXMuZmlyZSh0eXBlICsgJy5hZGRlZCcsIHsgZWxlbWVudDogZWxlbWVudCwgZ2Z4OiBnZnggfSk7XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuXG4vKipcbiAqIEFkZHMgYSBzaGFwZSB0byB0aGUgY2FudmFzXG4gKlxuICogQHBhcmFtIHtPYmplY3R8ZGpzLm1vZGVsLlNoYXBlfSBzaGFwZSB0byBhZGQgdG8gdGhlIGRpYWdyYW1cbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IFtwYXJlbnRdXG4gKiBAcGFyYW0ge251bWJlcn0gW3BhcmVudEluZGV4XVxuICpcbiAqIEByZXR1cm4ge2Rqcy5tb2RlbC5TaGFwZX0gdGhlIGFkZGVkIHNoYXBlXG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuYWRkU2hhcGUgPSBmdW5jdGlvbihzaGFwZSwgcGFyZW50LCBwYXJlbnRJbmRleCkge1xuICByZXR1cm4gdGhpcy5fYWRkRWxlbWVudCgnc2hhcGUnLCBzaGFwZSwgcGFyZW50LCBwYXJlbnRJbmRleCk7XG59O1xuXG4vKipcbiAqIEFkZHMgYSBjb25uZWN0aW9uIHRvIHRoZSBjYW52YXNcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxkanMubW9kZWwuQ29ubmVjdGlvbn0gY29ubmVjdGlvbiB0byBhZGQgdG8gdGhlIGRpYWdyYW1cbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IFtwYXJlbnRdXG4gKiBAcGFyYW0ge251bWJlcn0gW3BhcmVudEluZGV4XVxuICpcbiAqIEByZXR1cm4ge2Rqcy5tb2RlbC5Db25uZWN0aW9ufSB0aGUgYWRkZWQgY29ubmVjdGlvblxuICovXG5DYW52YXMucHJvdG90eXBlLmFkZENvbm5lY3Rpb24gPSBmdW5jdGlvbihjb25uZWN0aW9uLCBwYXJlbnQsIHBhcmVudEluZGV4KSB7XG4gIHJldHVybiB0aGlzLl9hZGRFbGVtZW50KCdjb25uZWN0aW9uJywgY29ubmVjdGlvbiwgcGFyZW50LCBwYXJlbnRJbmRleCk7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgcmVtb3ZlIGVsZW1lbnRcbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5fcmVtb3ZlRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHR5cGUpIHtcblxuICB2YXIgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LFxuICAgICAgZ3JhcGhpY3NGYWN0b3J5ID0gdGhpcy5fZ3JhcGhpY3NGYWN0b3J5LFxuICAgICAgZXZlbnRCdXMgPSB0aGlzLl9ldmVudEJ1cztcblxuICBlbGVtZW50ID0gZWxlbWVudFJlZ2lzdHJ5LmdldChlbGVtZW50LmlkIHx8IGVsZW1lbnQpO1xuXG4gIGlmICghZWxlbWVudCkge1xuXG4gICAgLy8gZWxlbWVudCB3YXMgcmVtb3ZlZCBhbHJlYWR5XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZXZlbnRCdXMuZmlyZSh0eXBlICsgJy5yZW1vdmUnLCB7IGVsZW1lbnQ6IGVsZW1lbnQgfSk7XG5cbiAgZ3JhcGhpY3NGYWN0b3J5LnJlbW92ZShlbGVtZW50KTtcblxuICAvLyB1bnNldCBwYXJlbnQgPC0+IGNoaWxkIHJlbGF0aW9uc2hpcFxuICBjb2xsZWN0aW9uUmVtb3ZlKGVsZW1lbnQucGFyZW50ICYmIGVsZW1lbnQucGFyZW50LmNoaWxkcmVuLCBlbGVtZW50KTtcbiAgZWxlbWVudC5wYXJlbnQgPSBudWxsO1xuXG4gIGV2ZW50QnVzLmZpcmUodHlwZSArICcucmVtb3ZlZCcsIHsgZWxlbWVudDogZWxlbWVudCB9KTtcblxuICBlbGVtZW50UmVnaXN0cnkucmVtb3ZlKGVsZW1lbnQpO1xuXG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgYSBzaGFwZSBmcm9tIHRoZSBjYW52YXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xkanMubW9kZWwuU2hhcGV9IHNoYXBlIG9yIHNoYXBlIGlkIHRvIGJlIHJlbW92ZWRcbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuU2hhcGV9IHRoZSByZW1vdmVkIHNoYXBlXG4gKi9cbkNhbnZhcy5wcm90b3R5cGUucmVtb3ZlU2hhcGUgPSBmdW5jdGlvbihzaGFwZSkge1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgYSBzaGFwZSBpcyBhYm91dCB0byBiZSByZW1vdmVkIGZyb20gdGhlIGNhbnZhcy5cbiAgICpcbiAgICogQG1lbWJlck9mIENhbnZhc1xuICAgKlxuICAgKiBAZXZlbnQgc2hhcGUucmVtb3ZlXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLlNoYXBlfSBlbGVtZW50IHRoZSBzaGFwZSBkZXNjcmlwdG9yXG4gICAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBnZnggdGhlIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2hhcGVcbiAgICovXG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCBhIHNoYXBlIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY2FudmFzLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgQ2FudmFzXG4gICAqXG4gICAqIEBldmVudCBzaGFwZS5yZW1vdmVkXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLlNoYXBlfSBlbGVtZW50IHRoZSBzaGFwZSBkZXNjcmlwdG9yXG4gICAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBnZnggdGhlIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2hhcGVcbiAgICovXG4gIHJldHVybiB0aGlzLl9yZW1vdmVFbGVtZW50KHNoYXBlLCAnc2hhcGUnKTtcbn07XG5cblxuLyoqXG4gKiBSZW1vdmVzIGEgY29ubmVjdGlvbiBmcm9tIHRoZSBjYW52YXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xkanMubW9kZWwuQ29ubmVjdGlvbn0gY29ubmVjdGlvbiBvciBjb25uZWN0aW9uIGlkIHRvIGJlIHJlbW92ZWRcbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuQ29ubmVjdGlvbn0gdGhlIHJlbW92ZWQgY29ubmVjdGlvblxuICovXG5DYW52YXMucHJvdG90eXBlLnJlbW92ZUNvbm5lY3Rpb24gPSBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCBhIGNvbm5lY3Rpb24gaXMgYWJvdXQgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBjYW52YXMuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBDYW52YXNcbiAgICpcbiAgICogQGV2ZW50IGNvbm5lY3Rpb24ucmVtb3ZlXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkNvbm5lY3Rpb259IGVsZW1lbnQgdGhlIGNvbm5lY3Rpb24gZGVzY3JpcHRvclxuICAgKiBAcHJvcGVydHkge09iamVjdH0gZ2Z4IHRoZSBncmFwaGljYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbm5lY3Rpb25cbiAgICovXG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCBhIGNvbm5lY3Rpb24gaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBjYW52YXMuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBDYW52YXNcbiAgICpcbiAgICogQGV2ZW50IGNvbm5lY3Rpb24ucmVtb3ZlZFxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5Db25uZWN0aW9ufSBlbGVtZW50IHRoZSBjb25uZWN0aW9uIGRlc2NyaXB0b3JcbiAgICogQHByb3BlcnR5IHtPYmplY3R9IGdmeCB0aGUgZ3JhcGhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb25uZWN0aW9uXG4gICAqL1xuICByZXR1cm4gdGhpcy5fcmVtb3ZlRWxlbWVudChjb25uZWN0aW9uLCAnY29ubmVjdGlvbicpO1xufTtcblxuXG4vKipcbiAqIFJldHVybiB0aGUgZ3JhcGhpY2FsIG9iamVjdCB1bmRlcmxheWluZyBhIGNlcnRhaW4gZGlhZ3JhbSBlbGVtZW50XG4gKlxuICogQHBhcmFtIHtzdHJpbmd8ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnQgZGVzY3JpcHRvciBvZiB0aGUgZWxlbWVudFxuICogQHBhcmFtIHtib29sZWFufSBbc2Vjb25kYXJ5PWZhbHNlXSB3aGV0aGVyIHRvIHJldHVybiB0aGUgc2Vjb25kYXJ5IGNvbm5lY3RlZCBlbGVtZW50XG4gKlxuICogQHJldHVybiB7U1ZHRWxlbWVudH1cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5nZXRHcmFwaGljcyA9IGZ1bmN0aW9uKGVsZW1lbnQsIHNlY29uZGFyeSkge1xuICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGVsZW1lbnQsIHNlY29uZGFyeSk7XG59O1xuXG5cbi8qKlxuICogUGVyZm9ybSBhIHZpZXdib3ggdXBkYXRlIHZpYSBhIGdpdmVuIGNoYW5nZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjaGFuZ2VGblxuICovXG5DYW52YXMucHJvdG90eXBlLl9jaGFuZ2VWaWV3Ym94ID0gZnVuY3Rpb24oY2hhbmdlRm4pIHtcblxuICAvLyBub3RpZnkgb3RoZXJzIG9mIHRoZSB1cGNvbWluZyB2aWV3Ym94IGNoYW5nZVxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdjYW52YXMudmlld2JveC5jaGFuZ2luZycpO1xuXG4gIC8vIHBlcmZvcm0gYWN0dWFsIGNoYW5nZVxuICBjaGFuZ2VGbi5hcHBseSh0aGlzKTtcblxuICAvLyByZXNldCB0aGUgY2FjaGVkIHZpZXdib3ggc28gdGhhdFxuICAvLyBhIG5ldyBnZXQgb3BlcmF0aW9uIG9uIHZpZXdib3ggb3Igem9vbVxuICAvLyB0cmlnZ2VycyBhIHZpZXdib3ggcmUtY29tcHV0YXRpb25cbiAgdGhpcy5fY2FjaGVkVmlld2JveCA9IG51bGw7XG5cbiAgLy8gbm90aWZ5IG90aGVycyBvZiB0aGUgY2hhbmdlOyB0aGlzIHN0ZXBcbiAgLy8gbWF5IG9yIG1heSBub3QgYmUgZGVib3VuY2VkXG4gIHRoaXMuX3ZpZXdib3hDaGFuZ2VkKCk7XG59O1xuXG5DYW52YXMucHJvdG90eXBlLl92aWV3Ym94Q2hhbmdlZCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdjYW52YXMudmlld2JveC5jaGFuZ2VkJywgeyB2aWV3Ym94OiB0aGlzLnZpZXdib3goKSB9KTtcbn07XG5cblxuLyoqXG4gKiBHZXRzIG9yIHNldHMgdGhlIHZpZXcgYm94IG9mIHRoZSBjYW52YXMsIGkuZS4gdGhlXG4gKiBhcmVhIHRoYXQgaXMgY3VycmVudGx5IGRpc3BsYXllZC5cbiAqXG4gKiBUaGUgZ2V0dGVyIG1heSByZXR1cm4gYSBjYWNoZWQgdmlld2JveCAoaWYgaXQgaXMgY3VycmVudGx5XG4gKiBjaGFuZ2luZykuIFRvIGZvcmNlIGEgcmVjb21wdXRhdGlvbiwgcGFzcyBgZmFsc2VgIGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGNhbnZhcy52aWV3Ym94KHsgeDogMTAwLCB5OiAxMDAsIHdpZHRoOiA1MDAsIGhlaWdodDogNTAwIH0pXG4gKlxuICogLy8gc2V0cyB0aGUgdmlzaWJsZSBhcmVhIG9mIHRoZSBkaWFncmFtIHRvICgxMDB8MTAwKSAtPiAoNjAwfDEwMClcbiAqIC8vIGFuZCBhbmQgc2NhbGVzIGl0IGFjY29yZGluZyB0byB0aGUgZGlhZ3JhbSB3aWR0aFxuICpcbiAqIHZhciB2aWV3Ym94ID0gY2FudmFzLnZpZXdib3goKTsgLy8gcGFzcyBgZmFsc2VgIHRvIGZvcmNlIHJlY29tcHV0aW5nIHRoZSBib3guXG4gKlxuICogY29uc29sZS5sb2codmlld2JveCk7XG4gKiAvLyB7XG4gKiAvLyAgIGlubmVyOiBEaW1lbnNpb25zLFxuICogLy8gICBvdXRlcjogRGltZW5zaW9ucyxcbiAqIC8vICAgc2NhbGUsXG4gKiAvLyAgIHgsIHksXG4gKiAvLyAgIHdpZHRoLCBoZWlnaHRcbiAqIC8vIH1cbiAqXG4gKiAvLyBpZiB0aGUgY3VycmVudCBkaWFncmFtIGlzIHpvb21lZCBhbmQgc2Nyb2xsZWQsIHlvdSBtYXkgcmVzZXQgaXQgdG8gdGhlXG4gKiAvLyBkZWZhdWx0IHpvb20gdmlhIHRoaXMgbWV0aG9kLCB0b286XG4gKlxuICogdmFyIHpvb21lZEFuZFNjcm9sbGVkVmlld2JveCA9IGNhbnZhcy52aWV3Ym94KCk7XG4gKlxuICogY2FudmFzLnZpZXdib3goe1xuICogICB4OiAwLFxuICogICB5OiAwLFxuICogICB3aWR0aDogem9vbWVkQW5kU2Nyb2xsZWRWaWV3Ym94Lm91dGVyLndpZHRoLFxuICogICBoZWlnaHQ6IHpvb21lZEFuZFNjcm9sbGVkVmlld2JveC5vdXRlci5oZWlnaHRcbiAqIH0pO1xuICpcbiAqIEBwYXJhbSAge09iamVjdH0gW2JveF0gdGhlIG5ldyB2aWV3IGJveCB0byBzZXRcbiAqIEBwYXJhbSAge251bWJlcn0gYm94LnggdGhlIHRvcCBsZWZ0IFggY29vcmRpbmF0ZSBvZiB0aGUgY2FudmFzIHZpc2libGUgaW4gdmlldyBib3hcbiAqIEBwYXJhbSAge251bWJlcn0gYm94LnkgdGhlIHRvcCBsZWZ0IFkgY29vcmRpbmF0ZSBvZiB0aGUgY2FudmFzIHZpc2libGUgaW4gdmlldyBib3hcbiAqIEBwYXJhbSAge251bWJlcn0gYm94LndpZHRoIHRoZSB2aXNpYmxlIHdpZHRoXG4gKiBAcGFyYW0gIHtudW1iZXJ9IGJveC5oZWlnaHRcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBjdXJyZW50IHZpZXcgYm94XG4gKi9cbkNhbnZhcy5wcm90b3R5cGUudmlld2JveCA9IGZ1bmN0aW9uKGJveCkge1xuXG4gIGlmIChib3ggPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9jYWNoZWRWaWV3Ym94KSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFZpZXdib3g7XG4gIH1cblxuICB2YXIgdmlld3BvcnQgPSB0aGlzLl92aWV3cG9ydCxcbiAgICAgIGlubmVyQm94LFxuICAgICAgb3V0ZXJCb3ggPSB0aGlzLmdldFNpemUoKSxcbiAgICAgIG1hdHJpeCxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHNjYWxlLFxuICAgICAgeCwgeTtcblxuICBpZiAoIWJveCkge1xuXG4gICAgLy8gY29tcHV0ZSB0aGUgaW5uZXIgYm94IGJhc2VkIG9uIHRoZVxuICAgIC8vIGRpYWdyYW1zIGRlZmF1bHQgbGF5ZXIuIFRoaXMgYWxsb3dzIHVzIHRvIGV4Y2x1ZGVcbiAgICAvLyBleHRlcm5hbCBjb21wb25lbnRzLCBzdWNoIGFzIG92ZXJsYXlzXG4gICAgaW5uZXJCb3ggPSB0aGlzLmdldERlZmF1bHRMYXllcigpLmdldEJCb3goKTtcblxuICAgIHRyYW5zZm9ybSA9IHN2Z1RyYW5zZm9ybSh2aWV3cG9ydCk7XG4gICAgbWF0cml4ID0gdHJhbnNmb3JtID8gdHJhbnNmb3JtLm1hdHJpeCA6IGNyZWF0ZU1hdHJpeCgpO1xuICAgIHNjYWxlID0gcm91bmQobWF0cml4LmEsIDEwMDApO1xuXG4gICAgeCA9IHJvdW5kKC1tYXRyaXguZSB8fCAwLCAxMDAwKTtcbiAgICB5ID0gcm91bmQoLW1hdHJpeC5mIHx8IDAsIDEwMDApO1xuXG4gICAgYm94ID0gdGhpcy5fY2FjaGVkVmlld2JveCA9IHtcbiAgICAgIHg6IHggPyB4IC8gc2NhbGUgOiAwLFxuICAgICAgeTogeSA/IHkgLyBzY2FsZSA6IDAsXG4gICAgICB3aWR0aDogb3V0ZXJCb3gud2lkdGggLyBzY2FsZSxcbiAgICAgIGhlaWdodDogb3V0ZXJCb3guaGVpZ2h0IC8gc2NhbGUsXG4gICAgICBzY2FsZTogc2NhbGUsXG4gICAgICBpbm5lcjoge1xuICAgICAgICB3aWR0aDogaW5uZXJCb3gud2lkdGgsXG4gICAgICAgIGhlaWdodDogaW5uZXJCb3guaGVpZ2h0LFxuICAgICAgICB4OiBpbm5lckJveC54LFxuICAgICAgICB5OiBpbm5lckJveC55XG4gICAgICB9LFxuICAgICAgb3V0ZXI6IG91dGVyQm94XG4gICAgfTtcblxuICAgIHJldHVybiBib3g7XG4gIH0gZWxzZSB7XG5cbiAgICB0aGlzLl9jaGFuZ2VWaWV3Ym94KGZ1bmN0aW9uKCkge1xuICAgICAgc2NhbGUgPSBNYXRoLm1pbihvdXRlckJveC53aWR0aCAvIGJveC53aWR0aCwgb3V0ZXJCb3guaGVpZ2h0IC8gYm94LmhlaWdodCk7XG5cbiAgICAgIHZhciBtYXRyaXggPSB0aGlzLl9zdmcuY3JlYXRlU1ZHTWF0cml4KClcbiAgICAgICAgLnNjYWxlKHNjYWxlKVxuICAgICAgICAudHJhbnNsYXRlKC1ib3gueCwgLWJveC55KTtcblxuICAgICAgc3ZnVHJhbnNmb3JtKHZpZXdwb3J0LCBtYXRyaXgpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGJveDtcbn07XG5cblxuLyoqXG4gKiBHZXRzIG9yIHNldHMgdGhlIHNjcm9sbCBvZiB0aGUgY2FudmFzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVsdGFdIHRoZSBuZXcgc2Nyb2xsIHRvIGFwcGx5LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZGVsdGEuZHhdXG4gKiBAcGFyYW0ge251bWJlcn0gW2RlbHRhLmR5XVxuICovXG5DYW52YXMucHJvdG90eXBlLnNjcm9sbCA9IGZ1bmN0aW9uKGRlbHRhKSB7XG5cbiAgdmFyIG5vZGUgPSB0aGlzLl92aWV3cG9ydDtcbiAgdmFyIG1hdHJpeCA9IG5vZGUuZ2V0Q1RNKCk7XG5cbiAgaWYgKGRlbHRhKSB7XG4gICAgdGhpcy5fY2hhbmdlVmlld2JveChmdW5jdGlvbigpIHtcbiAgICAgIGRlbHRhID0gYXNzaWduKHsgZHg6IDAsIGR5OiAwIH0sIGRlbHRhIHx8IHt9KTtcblxuICAgICAgbWF0cml4ID0gdGhpcy5fc3ZnLmNyZWF0ZVNWR01hdHJpeCgpLnRyYW5zbGF0ZShkZWx0YS5keCwgZGVsdGEuZHkpLm11bHRpcGx5KG1hdHJpeCk7XG5cbiAgICAgIHNldENUTShub2RlLCBtYXRyaXgpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHsgeDogbWF0cml4LmUsIHk6IG1hdHJpeC5mIH07XG59O1xuXG5cbi8qKlxuICogR2V0cyBvciBzZXRzIHRoZSBjdXJyZW50IHpvb20gb2YgdGhlIGNhbnZhcywgb3B0aW9uYWxseSB6b29taW5nXG4gKiB0byB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLlxuICpcbiAqIFRoZSBnZXR0ZXIgbWF5IHJldHVybiBhIGNhY2hlZCB6b29tIGxldmVsLiBDYWxsIGl0IHdpdGggYGZhbHNlYCBhc1xuICogdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGZvcmNlIHJlY29tcHV0YXRpb24gb2YgdGhlIGN1cnJlbnQgbGV2ZWwuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbbmV3U2NhbGVdIHRoZSBuZXcgem9vbSBsZXZlbCwgZWl0aGVyIGEgbnVtYmVyLCBpLmUuIDAuOSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBgZml0LXZpZXdwb3J0YCB0byBhZGp1c3QgdGhlIHNpemUgdG8gZml0IHRoZSBjdXJyZW50IHZpZXdwb3J0XG4gKiBAcGFyYW0ge3N0cmluZ3xQb2ludH0gW2NlbnRlcl0gdGhlIHJlZmVyZW5jZSBwb2ludCB7IHg6IC4uLCB5OiAuLn0gdG8gem9vbSB0bywgJ2F1dG8nIHRvIHpvb20gaW50byBtaWQgb3IgbnVsbFxuICpcbiAqIEByZXR1cm4ge251bWJlcn0gdGhlIGN1cnJlbnQgc2NhbGVcbiAqL1xuQ2FudmFzLnByb3RvdHlwZS56b29tID0gZnVuY3Rpb24obmV3U2NhbGUsIGNlbnRlcikge1xuXG4gIGlmICghbmV3U2NhbGUpIHtcbiAgICByZXR1cm4gdGhpcy52aWV3Ym94KG5ld1NjYWxlKS5zY2FsZTtcbiAgfVxuXG4gIGlmIChuZXdTY2FsZSA9PT0gJ2ZpdC12aWV3cG9ydCcpIHtcbiAgICByZXR1cm4gdGhpcy5fZml0Vmlld3BvcnQoY2VudGVyKTtcbiAgfVxuXG4gIHZhciBvdXRlcixcbiAgICAgIG1hdHJpeDtcblxuICB0aGlzLl9jaGFuZ2VWaWV3Ym94KGZ1bmN0aW9uKCkge1xuXG4gICAgaWYgKHR5cGVvZiBjZW50ZXIgIT09ICdvYmplY3QnKSB7XG4gICAgICBvdXRlciA9IHRoaXMudmlld2JveCgpLm91dGVyO1xuXG4gICAgICBjZW50ZXIgPSB7XG4gICAgICAgIHg6IG91dGVyLndpZHRoIC8gMixcbiAgICAgICAgeTogb3V0ZXIuaGVpZ2h0IC8gMlxuICAgICAgfTtcbiAgICB9XG5cbiAgICBtYXRyaXggPSB0aGlzLl9zZXRab29tKG5ld1NjYWxlLCBjZW50ZXIpO1xuICB9KTtcblxuICByZXR1cm4gcm91bmQobWF0cml4LmEsIDEwMDApO1xufTtcblxuZnVuY3Rpb24gc2V0Q1RNKG5vZGUsIG0pIHtcbiAgdmFyIG1zdHIgPSAnbWF0cml4KCcgKyBtLmEgKyAnLCcgKyBtLmIgKyAnLCcgKyBtLmMgKyAnLCcgKyBtLmQgKyAnLCcgKyBtLmUgKyAnLCcgKyBtLmYgKyAnKSc7XG4gIG5vZGUuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCBtc3RyKTtcbn1cblxuQ2FudmFzLnByb3RvdHlwZS5fZml0Vmlld3BvcnQgPSBmdW5jdGlvbihjZW50ZXIpIHtcblxuICB2YXIgdmJveCA9IHRoaXMudmlld2JveCgpLFxuICAgICAgb3V0ZXIgPSB2Ym94Lm91dGVyLFxuICAgICAgaW5uZXIgPSB2Ym94LmlubmVyLFxuICAgICAgbmV3U2NhbGUsXG4gICAgICBuZXdWaWV3Ym94O1xuXG4gIC8vIGRpc3BsYXkgdGhlIGNvbXBsZXRlIGRpYWdyYW0gd2l0aG91dCB6b29taW5nIGluLlxuICAvLyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gaW50ZXJuYWwgem9vbSwgd2UgcGVyZm9ybSBhXG4gIC8vIGhhcmQgcmVzZXQgb24gdGhlIGNhbnZhcyB2aWV3Ym94IHRvIHJlYWxpemUgdGhpc1xuICAvL1xuICAvLyBpZiBkaWFncmFtIGRvZXMgbm90IG5lZWQgdG8gYmUgem9vbWVkIGluLCB3ZSBmb2N1cyBpdCBhcm91bmRcbiAgLy8gdGhlIGRpYWdyYW0gb3JpZ2luIGluc3RlYWRcblxuICBpZiAoaW5uZXIueCA+PSAwICYmXG4gICAgICBpbm5lci55ID49IDAgJiZcbiAgICAgIGlubmVyLnggKyBpbm5lci53aWR0aCA8PSBvdXRlci53aWR0aCAmJlxuICAgICAgaW5uZXIueSArIGlubmVyLmhlaWdodCA8PSBvdXRlci5oZWlnaHQgJiZcbiAgICAgICFjZW50ZXIpIHtcblxuICAgIG5ld1ZpZXdib3ggPSB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMCxcbiAgICAgIHdpZHRoOiBNYXRoLm1heChpbm5lci53aWR0aCArIGlubmVyLngsIG91dGVyLndpZHRoKSxcbiAgICAgIGhlaWdodDogTWF0aC5tYXgoaW5uZXIuaGVpZ2h0ICsgaW5uZXIueSwgb3V0ZXIuaGVpZ2h0KVxuICAgIH07XG4gIH0gZWxzZSB7XG5cbiAgICBuZXdTY2FsZSA9IE1hdGgubWluKDEsIG91dGVyLndpZHRoIC8gaW5uZXIud2lkdGgsIG91dGVyLmhlaWdodCAvIGlubmVyLmhlaWdodCk7XG4gICAgbmV3Vmlld2JveCA9IHtcbiAgICAgIHg6IGlubmVyLnggKyAoY2VudGVyID8gaW5uZXIud2lkdGggLyAyIC0gb3V0ZXIud2lkdGggLyBuZXdTY2FsZSAvIDIgOiAwKSxcbiAgICAgIHk6IGlubmVyLnkgKyAoY2VudGVyID8gaW5uZXIuaGVpZ2h0IC8gMiAtIG91dGVyLmhlaWdodCAvIG5ld1NjYWxlIC8gMiA6IDApLFxuICAgICAgd2lkdGg6IG91dGVyLndpZHRoIC8gbmV3U2NhbGUsXG4gICAgICBoZWlnaHQ6IG91dGVyLmhlaWdodCAvIG5ld1NjYWxlXG4gICAgfTtcbiAgfVxuXG4gIHRoaXMudmlld2JveChuZXdWaWV3Ym94KTtcblxuICByZXR1cm4gdGhpcy52aWV3Ym94KGZhbHNlKS5zY2FsZTtcbn07XG5cblxuQ2FudmFzLnByb3RvdHlwZS5fc2V0Wm9vbSA9IGZ1bmN0aW9uKHNjYWxlLCBjZW50ZXIpIHtcblxuICB2YXIgc3ZnID0gdGhpcy5fc3ZnLFxuICAgICAgdmlld3BvcnQgPSB0aGlzLl92aWV3cG9ydDtcblxuICB2YXIgbWF0cml4ID0gc3ZnLmNyZWF0ZVNWR01hdHJpeCgpO1xuICB2YXIgcG9pbnQgPSBzdmcuY3JlYXRlU1ZHUG9pbnQoKTtcblxuICB2YXIgY2VudGVyUG9pbnQsXG4gICAgICBvcmlnaW5hbFBvaW50LFxuICAgICAgY3VycmVudE1hdHJpeCxcbiAgICAgIHNjYWxlTWF0cml4LFxuICAgICAgbmV3TWF0cml4O1xuXG4gIGN1cnJlbnRNYXRyaXggPSB2aWV3cG9ydC5nZXRDVE0oKTtcblxuICB2YXIgY3VycmVudFNjYWxlID0gY3VycmVudE1hdHJpeC5hO1xuXG4gIGlmIChjZW50ZXIpIHtcbiAgICBjZW50ZXJQb2ludCA9IGFzc2lnbihwb2ludCwgY2VudGVyKTtcblxuICAgIC8vIHJldmVydCBhcHBsaWVkIHZpZXdwb3J0IHRyYW5zZm9ybWF0aW9uc1xuICAgIG9yaWdpbmFsUG9pbnQgPSBjZW50ZXJQb2ludC5tYXRyaXhUcmFuc2Zvcm0oY3VycmVudE1hdHJpeC5pbnZlcnNlKCkpO1xuXG4gICAgLy8gY3JlYXRlIHNjYWxlIG1hdHJpeFxuICAgIHNjYWxlTWF0cml4ID0gbWF0cml4XG4gICAgICAudHJhbnNsYXRlKG9yaWdpbmFsUG9pbnQueCwgb3JpZ2luYWxQb2ludC55KVxuICAgICAgLnNjYWxlKDEgLyBjdXJyZW50U2NhbGUgKiBzY2FsZSlcbiAgICAgIC50cmFuc2xhdGUoLW9yaWdpbmFsUG9pbnQueCwgLW9yaWdpbmFsUG9pbnQueSk7XG5cbiAgICBuZXdNYXRyaXggPSBjdXJyZW50TWF0cml4Lm11bHRpcGx5KHNjYWxlTWF0cml4KTtcbiAgfSBlbHNlIHtcbiAgICBuZXdNYXRyaXggPSBtYXRyaXguc2NhbGUoc2NhbGUpO1xuICB9XG5cbiAgc2V0Q1RNKHRoaXMuX3ZpZXdwb3J0LCBuZXdNYXRyaXgpO1xuXG4gIHJldHVybiBuZXdNYXRyaXg7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzXG4gKlxuICogQHJldHVybiB7RGltZW5zaW9uc31cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5nZXRTaXplID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHRoaXMuX2NvbnRhaW5lci5jbGllbnRXaWR0aCxcbiAgICBoZWlnaHQ6IHRoaXMuX2NvbnRhaW5lci5jbGllbnRIZWlnaHRcbiAgfTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGFic29sdXRlIGJvdW5kaW5nIGJveCBmb3IgdGhlIGdpdmVuIGVsZW1lbnRcbiAqXG4gKiBUaGUgYWJzb2x1dGUgYm91bmRpbmcgYm94IG1heSBiZSB1c2VkIHRvIGRpc3BsYXkgb3ZlcmxheXMgaW4gdGhlXG4gKiBjYWxsZXJzIChicm93c2VyKSBjb29yZGluYXRlIHN5c3RlbSByYXRoZXIgdGhhbiB0aGUgem9vbWVkIGluL291dFxuICogY2FudmFzIGNvb3JkaW5hdGVzLlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnREZXNjcmlwdG9yfSBlbGVtZW50XG4gKiBAcmV0dXJuIHtCb3VuZHN9IHRoZSBhYnNvbHV0ZSBib3VuZGluZyBib3hcbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5nZXRBYnNvbHV0ZUJCb3ggPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHZhciB2Ym94ID0gdGhpcy52aWV3Ym94KCk7XG4gIHZhciBiYm94O1xuXG4gIC8vIGNvbm5lY3Rpb25cbiAgLy8gdXNlIHN2ZyBiYm94XG4gIGlmIChlbGVtZW50LndheXBvaW50cykge1xuICAgIHZhciBnZnggPSB0aGlzLmdldEdyYXBoaWNzKGVsZW1lbnQpO1xuXG4gICAgYmJveCA9IGdmeC5nZXRCQm94KCk7XG4gIH1cblxuICAvLyBzaGFwZXNcbiAgLy8gdXNlIGRhdGFcbiAgZWxzZSB7XG4gICAgYmJveCA9IGVsZW1lbnQ7XG4gIH1cblxuICB2YXIgeCA9IGJib3gueCAqIHZib3guc2NhbGUgLSB2Ym94LnggKiB2Ym94LnNjYWxlO1xuICB2YXIgeSA9IGJib3gueSAqIHZib3guc2NhbGUgLSB2Ym94LnkgKiB2Ym94LnNjYWxlO1xuXG4gIHZhciB3aWR0aCA9IGJib3gud2lkdGggKiB2Ym94LnNjYWxlO1xuICB2YXIgaGVpZ2h0ID0gYmJveC5oZWlnaHQgKiB2Ym94LnNjYWxlO1xuXG4gIHJldHVybiB7XG4gICAgeDogeCxcbiAgICB5OiB5LFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xufTtcblxuLyoqXG4gKiBGaXJlcyBhbiBldmVudCBpbiBvcmRlciBvdGhlciBtb2R1bGVzIGNhbiByZWFjdCB0byB0aGVcbiAqIGNhbnZhcyByZXNpemluZ1xuICovXG5DYW52YXMucHJvdG90eXBlLnJlc2l6ZWQgPSBmdW5jdGlvbigpIHtcblxuICAvLyBmb3JjZSByZWNvbXB1dGF0aW9uIG9mIHZpZXcgYm94XG4gIGRlbGV0ZSB0aGlzLl9jYWNoZWRWaWV3Ym94O1xuXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2NhbnZhcy5yZXNpemVkJyk7XG59O1xuIiwiaW1wb3J0IHtcbiAgY3JlYXRlXG59IGZyb20gJy4uL21vZGVsJztcblxuaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnbWluLWRhc2gnO1xuXG4vKipcbiAqIEEgZmFjdG9yeSBmb3IgZGlhZ3JhbS1qcyBzaGFwZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRWxlbWVudEZhY3RvcnkoKSB7XG4gIHRoaXMuX3VpZCA9IDEyO1xufVxuXG5cbkVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVSb290ID0gZnVuY3Rpb24oYXR0cnMpIHtcbiAgcmV0dXJuIHRoaXMuY3JlYXRlKCdyb290JywgYXR0cnMpO1xufTtcblxuRWxlbWVudEZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZUxhYmVsID0gZnVuY3Rpb24oYXR0cnMpIHtcbiAgcmV0dXJuIHRoaXMuY3JlYXRlKCdsYWJlbCcsIGF0dHJzKTtcbn07XG5cbkVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVTaGFwZSA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gIHJldHVybiB0aGlzLmNyZWF0ZSgnc2hhcGUnLCBhdHRycyk7XG59O1xuXG5FbGVtZW50RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlQ29ubmVjdGlvbiA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gIHJldHVybiB0aGlzLmNyZWF0ZSgnY29ubmVjdGlvbicsIGF0dHJzKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgbW9kZWwgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiB0eXBlIGFuZFxuICogYSBudW1iZXIgb2YgcHJlLXNldCBhdHRyaWJ1dGVzLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gdHlwZVxuICogQHBhcmFtICB7T2JqZWN0fSBhdHRyc1xuICogQHJldHVybiB7ZGpzLm1vZGVsLkJhc2V9IHRoZSBuZXdseSBjcmVhdGVkIG1vZGVsIGluc3RhbmNlXG4gKi9cbkVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbih0eXBlLCBhdHRycykge1xuXG4gIGF0dHJzID0gYXNzaWduKHt9LCBhdHRycyB8fCB7fSk7XG5cbiAgaWYgKCFhdHRycy5pZCkge1xuICAgIGF0dHJzLmlkID0gdHlwZSArICdfJyArICh0aGlzLl91aWQrKyk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlKHR5cGUsIGF0dHJzKTtcbn07IiwidmFyIEVMRU1FTlRfSUQgPSAnZGF0YS1lbGVtZW50LWlkJztcblxuaW1wb3J0IHsgYXR0ciBhcyBzdmdBdHRyIH0gZnJvbSAndGlueS1zdmcnO1xuXG5cbi8qKlxuICogQGNsYXNzXG4gKlxuICogQSByZWdpc3RyeSB0aGF0IGtlZXBzIHRyYWNrIG9mIGFsbCBzaGFwZXMgaW4gdGhlIGRpYWdyYW0uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEVsZW1lbnRSZWdpc3RyeShldmVudEJ1cykge1xuICB0aGlzLl9lbGVtZW50cyA9IHt9O1xuXG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG59XG5cbkVsZW1lbnRSZWdpc3RyeS4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07XG5cbi8qKlxuICogUmVnaXN0ZXIgYSBwYWlyIG9mIChlbGVtZW50LCBnZngsIChzZWNvbmRhcnlHZngpKS5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGdmeFxuICogQHBhcmFtIHtTVkdFbGVtZW50fSBbc2Vjb25kYXJ5R2Z4XSBvcHRpb25hbCBvdGhlciBlbGVtZW50IHRvIHJlZ2lzdGVyLCB0b29cbiAqL1xuRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihlbGVtZW50LCBnZngsIHNlY29uZGFyeUdmeCkge1xuXG4gIHZhciBpZCA9IGVsZW1lbnQuaWQ7XG5cbiAgdGhpcy5fdmFsaWRhdGVJZChpZCk7XG5cbiAgLy8gYXNzb2NpYXRlIGRvbSBub2RlIHdpdGggZWxlbWVudFxuICBzdmdBdHRyKGdmeCwgRUxFTUVOVF9JRCwgaWQpO1xuXG4gIGlmIChzZWNvbmRhcnlHZngpIHtcbiAgICBzdmdBdHRyKHNlY29uZGFyeUdmeCwgRUxFTUVOVF9JRCwgaWQpO1xuICB9XG5cbiAgdGhpcy5fZWxlbWVudHNbaWRdID0geyBlbGVtZW50OiBlbGVtZW50LCBnZng6IGdmeCwgc2Vjb25kYXJ5R2Z4OiBzZWNvbmRhcnlHZnggfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbiBlbGVtZW50IGZyb20gdGhlIHJlZ2lzdHJ5LlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqL1xuRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHZhciBlbGVtZW50cyA9IHRoaXMuX2VsZW1lbnRzLFxuICAgICAgaWQgPSBlbGVtZW50LmlkIHx8IGVsZW1lbnQsXG4gICAgICBjb250YWluZXIgPSBpZCAmJiBlbGVtZW50c1tpZF07XG5cbiAgaWYgKGNvbnRhaW5lcikge1xuXG4gICAgLy8gdW5zZXQgZWxlbWVudCBpZCBvbiBnZnhcbiAgICBzdmdBdHRyKGNvbnRhaW5lci5nZngsIEVMRU1FTlRfSUQsICcnKTtcblxuICAgIGlmIChjb250YWluZXIuc2Vjb25kYXJ5R2Z4KSB7XG4gICAgICBzdmdBdHRyKGNvbnRhaW5lci5zZWNvbmRhcnlHZngsIEVMRU1FTlRfSUQsICcnKTtcbiAgICB9XG5cbiAgICBkZWxldGUgZWxlbWVudHNbaWRdO1xuICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgaWQgb2YgYW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuZXdJZFxuICovXG5FbGVtZW50UmVnaXN0cnkucHJvdG90eXBlLnVwZGF0ZUlkID0gZnVuY3Rpb24oZWxlbWVudCwgbmV3SWQpIHtcblxuICB0aGlzLl92YWxpZGF0ZUlkKG5ld0lkKTtcblxuICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgZWxlbWVudCA9IHRoaXMuZ2V0KGVsZW1lbnQpO1xuICB9XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnZWxlbWVudC51cGRhdGVJZCcsIHtcbiAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgIG5ld0lkOiBuZXdJZFxuICB9KTtcblxuICB2YXIgZ2Z4ID0gdGhpcy5nZXRHcmFwaGljcyhlbGVtZW50KSxcbiAgICAgIHNlY29uZGFyeUdmeCA9IHRoaXMuZ2V0R3JhcGhpY3MoZWxlbWVudCwgdHJ1ZSk7XG5cbiAgdGhpcy5yZW1vdmUoZWxlbWVudCk7XG5cbiAgZWxlbWVudC5pZCA9IG5ld0lkO1xuXG4gIHRoaXMuYWRkKGVsZW1lbnQsIGdmeCwgc2Vjb25kYXJ5R2Z4KTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBtb2RlbCBlbGVtZW50IGZvciBhIGdpdmVuIGlkIG9yIGdyYXBoaWNzLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogZWxlbWVudFJlZ2lzdHJ5LmdldCgnU29tZUVsZW1lbnRJZF8xJyk7XG4gKiBlbGVtZW50UmVnaXN0cnkuZ2V0KGdmeCk7XG4gKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfFNWR0VsZW1lbnR9IGZpbHRlciBmb3Igc2VsZWN0aW5nIHRoZSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7ZGpzLm1vZGVsLkJhc2V9XG4gKi9cbkVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oZmlsdGVyKSB7XG4gIHZhciBpZDtcblxuICBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ3N0cmluZycpIHtcbiAgICBpZCA9IGZpbHRlcjtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IGZpbHRlciAmJiBzdmdBdHRyKGZpbHRlciwgRUxFTUVOVF9JRCk7XG4gIH1cblxuICB2YXIgY29udGFpbmVyID0gdGhpcy5fZWxlbWVudHNbaWRdO1xuICByZXR1cm4gY29udGFpbmVyICYmIGNvbnRhaW5lci5lbGVtZW50O1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYWxsIGVsZW1lbnRzIHRoYXQgbWF0Y2ggYSBnaXZlbiBmaWx0ZXIgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuQmFzZT59XG4gKi9cbkVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24oZm4pIHtcblxuICB2YXIgZmlsdGVyZWQgPSBbXTtcblxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCwgZ2Z4KSB7XG4gICAgaWYgKGZuKGVsZW1lbnQsIGdmeCkpIHtcbiAgICAgIGZpbHRlcmVkLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZmlsdGVyZWQ7XG59O1xuXG4vKipcbiAqIFJldHVybiBhbGwgcmVuZGVyZWQgbW9kZWwgZWxlbWVudHMuXG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fVxuICovXG5FbGVtZW50UmVnaXN0cnkucHJvdG90eXBlLmdldEFsbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oZSkgeyByZXR1cm4gZTsgfSk7XG59O1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbGwgZGlhZ3JhbSBlbGVtZW50cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICovXG5FbGVtZW50UmVnaXN0cnkucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihmbikge1xuXG4gIHZhciBtYXAgPSB0aGlzLl9lbGVtZW50cztcblxuICBPYmplY3Qua2V5cyhtYXApLmZvckVhY2goZnVuY3Rpb24oaWQpIHtcbiAgICB2YXIgY29udGFpbmVyID0gbWFwW2lkXSxcbiAgICAgICAgZWxlbWVudCA9IGNvbnRhaW5lci5lbGVtZW50LFxuICAgICAgICBnZnggPSBjb250YWluZXIuZ2Z4O1xuXG4gICAgcmV0dXJuIGZuKGVsZW1lbnQsIGdmeCk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiBhbiBlbGVtZW50IG9yIGl0cyBpZC5cbiAqXG4gKiBAZXhhbXBsZVxuICogZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKCdTb21lRWxlbWVudElkXzEnKTtcbiAqIGVsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhyb290RWxlbWVudCk7IC8vIDxnIC4uLj5cbiAqXG4gKiBlbGVtZW50UmVnaXN0cnkuZ2V0R3JhcGhpY3Mocm9vdEVsZW1lbnQsIHRydWUpOyAvLyA8c3ZnIC4uLj5cbiAqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8ZGpzLm1vZGVsLkJhc2V9IGZpbHRlclxuICogQHBhcmFtIHtib29sZWFufSBbc2Vjb25kYXJ5PWZhbHNlXSB3aGV0aGVyIHRvIHJldHVybiB0aGUgc2Vjb25kYXJ5IGNvbm5lY3RlZCBlbGVtZW50XG4gKlxuICogQHJldHVybiB7U1ZHRWxlbWVudH1cbiAqL1xuRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS5nZXRHcmFwaGljcyA9IGZ1bmN0aW9uKGZpbHRlciwgc2Vjb25kYXJ5KSB7XG4gIHZhciBpZCA9IGZpbHRlci5pZCB8fCBmaWx0ZXI7XG5cbiAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2VsZW1lbnRzW2lkXTtcbiAgcmV0dXJuIGNvbnRhaW5lciAmJiAoc2Vjb25kYXJ5ID8gY29udGFpbmVyLnNlY29uZGFyeUdmeCA6IGNvbnRhaW5lci5nZngpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZSB0aGUgc3VpdGFiaWxpdHkgb2YgdGhlIGdpdmVuIGlkIGFuZCBzaWduYWxzIGEgcHJvYmxlbVxuICogd2l0aCBhbiBleGNlcHRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gKlxuICogQHRocm93cyB7RXJyb3J9IGlmIGlkIGlzIGVtcHR5IG9yIGFscmVhZHkgYXNzaWduZWRcbiAqL1xuRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS5fdmFsaWRhdGVJZCA9IGZ1bmN0aW9uKGlkKSB7XG4gIGlmICghaWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VsZW1lbnQgbXVzdCBoYXZlIGFuIGlkJyk7XG4gIH1cblxuICBpZiAodGhpcy5fZWxlbWVudHNbaWRdKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlbGVtZW50IHdpdGggaWQgJyArIGlkICsgJyBhbHJlYWR5IGFkZGVkJyk7XG4gIH1cbn07XG4iLCJpbXBvcnQge1xuICBpc0Z1bmN0aW9uLFxuICBpc0FycmF5LFxuICBpc051bWJlcixcbiAgYmluZCxcbiAgYXNzaWduXG59IGZyb20gJ21pbi1kYXNoJztcblxudmFyIEZOX1JFRiA9ICdfX2ZuJztcblxudmFyIERFRkFVTFRfUFJJT1JJVFkgPSAxMDAwO1xuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cbi8qKlxuICogQSBnZW5lcmFsIHB1cnBvc2UgZXZlbnQgYnVzLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IGlzIHVzZWQgdG8gY29tbXVuaWNhdGUgYWNyb3NzIGEgZGlhZ3JhbSBpbnN0YW5jZS5cbiAqIE90aGVyIHBhcnRzIG9mIGEgZGlhZ3JhbSBjYW4gdXNlIGl0IHRvIGxpc3RlbiB0byBhbmQgYnJvYWRjYXN0IGV2ZW50cy5cbiAqXG4gKlxuICogIyMgUmVnaXN0ZXJpbmcgZm9yIEV2ZW50c1xuICpcbiAqIFRoZSBldmVudCBidXMgcHJvdmlkZXMgdGhlIHtAbGluayBFdmVudEJ1cyNvbn0gYW5kIHtAbGluayBFdmVudEJ1cyNvbmNlfVxuICogbWV0aG9kcyB0byByZWdpc3RlciBmb3IgZXZlbnRzLiB7QGxpbmsgRXZlbnRCdXMjb2ZmfSBjYW4gYmUgdXNlZCB0b1xuICogcmVtb3ZlIGV2ZW50IHJlZ2lzdHJhdGlvbnMuIExpc3RlbmVycyByZWNlaXZlIGFuIGluc3RhbmNlIG9mIHtAbGluayBFdmVudH1cbiAqIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4gSXQgYWxsb3dzIHRoZW0gdG8gaG9vayBpbnRvIHRoZSBldmVudCBleGVjdXRpb24uXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICpcbiAqIC8vIGxpc3RlbiBmb3IgZXZlbnRcbiAqIGV2ZW50QnVzLm9uKCdmb28nLCBmdW5jdGlvbihldmVudCkge1xuICpcbiAqICAgLy8gYWNjZXNzIGV2ZW50IHR5cGVcbiAqICAgZXZlbnQudHlwZTsgLy8gJ2ZvbydcbiAqXG4gKiAgIC8vIHN0b3AgcHJvcGFnYXRpb24gdG8gb3RoZXIgbGlzdGVuZXJzXG4gKiAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICpcbiAqICAgLy8gcHJldmVudCBldmVudCBkZWZhdWx0XG4gKiAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gKiB9KTtcbiAqXG4gKiAvLyBsaXN0ZW4gZm9yIGV2ZW50IHdpdGggY3VzdG9tIHBheWxvYWRcbiAqIGV2ZW50QnVzLm9uKCdiYXInLCBmdW5jdGlvbihldmVudCwgcGF5bG9hZCkge1xuICogICBjb25zb2xlLmxvZyhwYXlsb2FkKTtcbiAqIH0pO1xuICpcbiAqIC8vIGxpc3RlbiBmb3IgZXZlbnQgcmV0dXJuaW5nIHZhbHVlXG4gKiBldmVudEJ1cy5vbignZm9vYmFyJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAqXG4gKiAgIC8vIHN0b3AgZXZlbnQgcHJvcGFnYXRpb24gKyBwcmV2ZW50IGRlZmF1bHRcbiAqICAgcmV0dXJuIGZhbHNlO1xuICpcbiAqICAgLy8gc3RvcCBldmVudCBwcm9wYWdhdGlvbiArIHJldHVybiBjdXN0b20gcmVzdWx0XG4gKiAgIHJldHVybiB7XG4gKiAgICAgY29tcGxleDogJ2xpc3RlbmluZyByZXN1bHQnXG4gKiAgIH07XG4gKiB9KTtcbiAqXG4gKlxuICogLy8gbGlzdGVuIHdpdGggY3VzdG9tIHByaW9yaXR5IChkZWZhdWx0PTEwMDAsIGhpZ2hlciBpcyBiZXR0ZXIpXG4gKiBldmVudEJ1cy5vbigncHJpb3JpdHlmb28nLCAxNTAwLCBmdW5jdGlvbihldmVudCkge1xuICogICBjb25zb2xlLmxvZygnaW52b2tlZCBmaXJzdCEnKTtcbiAqIH0pO1xuICpcbiAqXG4gKiAvLyBsaXN0ZW4gZm9yIGV2ZW50IGFuZCBwYXNzIHRoZSBjb250ZXh0IChgdGhpc2ApXG4gKiBldmVudEJ1cy5vbignZm9vYmFyJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAqICAgdGhpcy5mb28oKTtcbiAqIH0sIHRoaXMpO1xuICogYGBgXG4gKlxuICpcbiAqICMjIEVtaXR0aW5nIEV2ZW50c1xuICpcbiAqIEV2ZW50cyBjYW4gYmUgZW1pdHRlZCB2aWEgdGhlIGV2ZW50IGJ1cyB1c2luZyB7QGxpbmsgRXZlbnRCdXMjZmlyZX0uXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICpcbiAqIC8vIGZhbHNlIGluZGljYXRlcyB0aGF0IHRoZSBkZWZhdWx0IGFjdGlvblxuICogLy8gd2FzIHByZXZlbnRlZCBieSBsaXN0ZW5lcnNcbiAqIGlmIChldmVudEJ1cy5maXJlKCdmb28nKSA9PT0gZmFsc2UpIHtcbiAqICAgY29uc29sZS5sb2coJ2RlZmF1bHQgaGFzIGJlZW4gcHJldmVudGVkIScpO1xuICogfTtcbiAqXG4gKlxuICogLy8gY3VzdG9tIGFyZ3MgKyByZXR1cm4gdmFsdWUgbGlzdGVuZXJcbiAqIGV2ZW50QnVzLm9uKCdzdW0nLCBmdW5jdGlvbihldmVudCwgYSwgYikge1xuICogICByZXR1cm4gYSArIGI7XG4gKiB9KTtcbiAqXG4gKiAvLyB5b3UgY2FuIHBhc3MgY3VzdG9tIGFyZ3VtZW50cyArIHJldHJpZXZlIHJlc3VsdCB2YWx1ZXMuXG4gKiB2YXIgc3VtID0gZXZlbnRCdXMuZmlyZSgnc3VtJywgMSwgMik7XG4gKiBjb25zb2xlLmxvZyhzdW0pOyAvLyAzXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRXZlbnRCdXMoKSB7XG4gIHRoaXMuX2xpc3RlbmVycyA9IHt9O1xuXG4gIC8vIGNsZWFudXAgb24gZGVzdHJveSBvbiBsb3dlc3QgcHJpb3JpdHkgdG8gYWxsb3dcbiAgLy8gbWVzc2FnZSBwYXNzaW5nIHVudGlsIHRoZSBiaXR0ZXIgZW5kXG4gIHRoaXMub24oJ2RpYWdyYW0uZGVzdHJveScsIDEsIHRoaXMuX2Rlc3Ryb3ksIHRoaXMpO1xufVxuXG5cbi8qKlxuICogUmVnaXN0ZXIgYW4gZXZlbnQgbGlzdGVuZXIgZm9yIGV2ZW50cyB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuICpcbiAqIFRoZSBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgd2l0aCBgZXZlbnQsIC4uLmFkZGl0aW9uYWxBcmd1bWVudHNgXG4gKiB0aGF0IGhhdmUgYmVlbiBwYXNzZWQgdG8ge0BsaW5rIEV2ZW50QnVzI2ZpcmV9LlxuICpcbiAqIFJldHVybmluZyBmYWxzZSBmcm9tIGEgbGlzdGVuZXIgd2lsbCBwcmV2ZW50IHRoZSBldmVudHMgZGVmYXVsdCBhY3Rpb25cbiAqIChpZiBhbnkgaXMgc3BlY2lmaWVkKS4gVG8gc3RvcCBhbiBldmVudCBmcm9tIGJlaW5nIHByb2Nlc3NlZCBmdXJ0aGVyIGluXG4gKiBvdGhlciBsaXN0ZW5lcnMgZXhlY3V0ZSB7QGxpbmsgRXZlbnQjc3RvcFByb3BhZ2F0aW9ufS5cbiAqXG4gKiBSZXR1cm5pbmcgYW55dGhpbmcgYnV0IGB1bmRlZmluZWRgIGZyb20gYSBsaXN0ZW5lciB3aWxsIHN0b3AgdGhlIGxpc3RlbmVyIHByb3BhZ2F0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PHN0cmluZz59IGV2ZW50c1xuICogQHBhcmFtIHtudW1iZXJ9IFtwcmlvcml0eT0xMDAwXSB0aGUgcHJpb3JpdHkgaW4gd2hpY2ggdGhpcyBsaXN0ZW5lciBpcyBjYWxsZWQsIGxhcmdlciBpcyBoaWdoZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcGFyYW0ge09iamVjdH0gW3RoYXRdIFBhc3MgY29udGV4dCAoYHRoaXNgKSB0byB0aGUgY2FsbGJhY2tcbiAqL1xuRXZlbnRCdXMucHJvdG90eXBlLm9uID0gZnVuY3Rpb24oZXZlbnRzLCBwcmlvcml0eSwgY2FsbGJhY2ssIHRoYXQpIHtcblxuICBldmVudHMgPSBpc0FycmF5KGV2ZW50cykgPyBldmVudHMgOiBbIGV2ZW50cyBdO1xuXG4gIGlmIChpc0Z1bmN0aW9uKHByaW9yaXR5KSkge1xuICAgIHRoYXQgPSBjYWxsYmFjaztcbiAgICBjYWxsYmFjayA9IHByaW9yaXR5O1xuICAgIHByaW9yaXR5ID0gREVGQVVMVF9QUklPUklUWTtcbiAgfVxuXG4gIGlmICghaXNOdW1iZXIocHJpb3JpdHkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcmlvcml0eSBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gIH1cblxuICB2YXIgYWN0dWFsQ2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICBpZiAodGhhdCkge1xuICAgIGFjdHVhbENhbGxiYWNrID0gYmluZChjYWxsYmFjaywgdGhhdCk7XG5cbiAgICAvLyBtYWtlIHN1cmUgd2UgcmVtZW1iZXIgYW5kIGFyZSBhYmxlIHRvIHJlbW92ZVxuICAgIC8vIGJvdW5kIGNhbGxiYWNrcyB2aWEge0BsaW5rICNvZmZ9IHVzaW5nIHRoZSBvcmlnaW5hbFxuICAgIC8vIGNhbGxiYWNrXG4gICAgYWN0dWFsQ2FsbGJhY2tbRk5fUkVGXSA9IGNhbGxiYWNrW0ZOX1JFRl0gfHwgY2FsbGJhY2s7XG4gIH1cblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZSkge1xuICAgIHNlbGYuX2FkZExpc3RlbmVyKGUsIHtcbiAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgIGNhbGxiYWNrOiBhY3R1YWxDYWxsYmFjayxcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5cbi8qKlxuICogUmVnaXN0ZXIgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBpcyBleGVjdXRlZCBvbmx5IG9uY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IHRoZSBldmVudCBuYW1lIHRvIHJlZ2lzdGVyIGZvclxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmlvcml0eT0xMDAwXSB0aGUgcHJpb3JpdHkgaW4gd2hpY2ggdGhpcyBsaXN0ZW5lciBpcyBjYWxsZWQsIGxhcmdlciBpcyBoaWdoZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIHRoZSBjYWxsYmFjayB0byBleGVjdXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW3RoYXRdIFBhc3MgY29udGV4dCAoYHRoaXNgKSB0byB0aGUgY2FsbGJhY2tcbiAqL1xuRXZlbnRCdXMucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbihldmVudCwgcHJpb3JpdHksIGNhbGxiYWNrLCB0aGF0KSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBpZiAoaXNGdW5jdGlvbihwcmlvcml0eSkpIHtcbiAgICB0aGF0ID0gY2FsbGJhY2s7XG4gICAgY2FsbGJhY2sgPSBwcmlvcml0eTtcbiAgICBwcmlvcml0eSA9IERFRkFVTFRfUFJJT1JJVFk7XG4gIH1cblxuICBpZiAoIWlzTnVtYmVyKHByaW9yaXR5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJpb3JpdHkgbXVzdCBiZSBhIG51bWJlcicpO1xuICB9XG5cbiAgZnVuY3Rpb24gd3JhcHBlZENhbGxiYWNrKCkge1xuICAgIHZhciByZXN1bHQgPSBjYWxsYmFjay5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuXG4gICAgc2VsZi5vZmYoZXZlbnQsIHdyYXBwZWRDYWxsYmFjayk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gbWFrZSBzdXJlIHdlIHJlbWVtYmVyIGFuZCBhcmUgYWJsZSB0byByZW1vdmVcbiAgLy8gYm91bmQgY2FsbGJhY2tzIHZpYSB7QGxpbmsgI29mZn0gdXNpbmcgdGhlIG9yaWdpbmFsXG4gIC8vIGNhbGxiYWNrXG4gIHdyYXBwZWRDYWxsYmFja1tGTl9SRUZdID0gY2FsbGJhY2s7XG5cbiAgdGhpcy5vbihldmVudCwgcHJpb3JpdHksIHdyYXBwZWRDYWxsYmFjayk7XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyBldmVudCBsaXN0ZW5lcnMgYnkgZXZlbnQgYW5kIGNhbGxiYWNrLlxuICpcbiAqIElmIG5vIGNhbGxiYWNrIGlzIGdpdmVuLCBhbGwgbGlzdGVuZXJzIGZvciBhIGdpdmVuIGV2ZW50IG5hbWUgYXJlIGJlaW5nIHJlbW92ZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8QXJyYXk8c3RyaW5nPn0gZXZlbnRzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdXG4gKi9cbkV2ZW50QnVzLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbihldmVudHMsIGNhbGxiYWNrKSB7XG5cbiAgZXZlbnRzID0gaXNBcnJheShldmVudHMpID8gZXZlbnRzIDogWyBldmVudHMgXTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBzZWxmLl9yZW1vdmVMaXN0ZW5lcihldmVudCwgY2FsbGJhY2spO1xuICB9KTtcblxufTtcblxuXG4vKipcbiAqIENyZWF0ZSBhbiBFdmVudEJ1cyBldmVudC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gZXZlbnQsIHJlY29nbml6ZWQgYnkgdGhlIGV2ZW50QnVzXG4gKi9cbkV2ZW50QnVzLnByb3RvdHlwZS5jcmVhdGVFdmVudCA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgdmFyIGV2ZW50ID0gbmV3IEludGVybmFsRXZlbnQoKTtcblxuICBldmVudC5pbml0KGRhdGEpO1xuXG4gIHJldHVybiBldmVudDtcbn07XG5cblxuLyoqXG4gKiBGaXJlcyBhIG5hbWVkIGV2ZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogLy8gZmlyZSBldmVudCBieSBuYW1lXG4gKiBldmVudHMuZmlyZSgnZm9vJyk7XG4gKlxuICogLy8gZmlyZSBldmVudCBvYmplY3Qgd2l0aCBuZXN0ZWQgdHlwZVxuICogdmFyIGV2ZW50ID0geyB0eXBlOiAnZm9vJyB9O1xuICogZXZlbnRzLmZpcmUoZXZlbnQpO1xuICpcbiAqIC8vIGZpcmUgZXZlbnQgd2l0aCBleHBsaWNpdCB0eXBlXG4gKiB2YXIgZXZlbnQgPSB7IHg6IDEwLCB5OiAyMCB9O1xuICogZXZlbnRzLmZpcmUoJ2VsZW1lbnQubW92ZWQnLCBldmVudCk7XG4gKlxuICogLy8gcGFzcyBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byB0aGUgZXZlbnRcbiAqIGV2ZW50cy5vbignZm9vJywgZnVuY3Rpb24oZXZlbnQsIGJhcikge1xuICogICBhbGVydChiYXIpO1xuICogfSk7XG4gKlxuICogZXZlbnRzLmZpcmUoeyB0eXBlOiAnZm9vJyB9LCAnSSBhbSBiYXIhJyk7XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lXSB0aGUgb3B0aW9uYWwgZXZlbnQgbmFtZVxuICogQHBhcmFtIHtPYmplY3R9IFtldmVudF0gdGhlIGV2ZW50IG9iamVjdFxuICogQHBhcmFtIHsuLi5PYmplY3R9IGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gdGhlIGV2ZW50cyByZXR1cm4gdmFsdWUsIGlmIHNwZWNpZmllZCBvciBmYWxzZSBpZiB0aGVcbiAqICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgYWN0aW9uIHdhcyBwcmV2ZW50ZWQgYnkgbGlzdGVuZXJzXG4gKi9cbkV2ZW50QnVzLnByb3RvdHlwZS5maXJlID0gZnVuY3Rpb24odHlwZSwgZGF0YSkge1xuICB2YXIgZXZlbnQsXG4gICAgICBmaXJzdExpc3RlbmVyLFxuICAgICAgcmV0dXJuVmFsdWUsXG4gICAgICBhcmdzO1xuXG4gIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIGRhdGEgPSB0eXBlO1xuICAgIHR5cGUgPSBkYXRhLnR5cGU7XG4gIH1cblxuICBpZiAoIXR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIGV2ZW50IHR5cGUgc3BlY2lmaWVkJyk7XG4gIH1cblxuICBmaXJzdExpc3RlbmVyID0gdGhpcy5fbGlzdGVuZXJzW3R5cGVdO1xuXG4gIGlmICghZmlyc3RMaXN0ZW5lcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHdlIG1ha2Ugc3VyZSB3ZSBmaXJlIGluc3RhbmNlcyBvZiBvdXIgaG9tZSBtYWRlXG4gIC8vIGV2ZW50cyBoZXJlLiBXZSB3cmFwIHRoZW0gb25seSBvbmNlLCB0aG91Z2hcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBJbnRlcm5hbEV2ZW50KSB7XG5cbiAgICAvLyB3ZSBhcmUgZmluZSwgd2UgYWxyZWFkIGhhdmUgYW4gZXZlbnRcbiAgICBldmVudCA9IGRhdGE7XG4gIH0gZWxzZSB7XG4gICAgZXZlbnQgPSB0aGlzLmNyZWF0ZUV2ZW50KGRhdGEpO1xuICB9XG5cbiAgLy8gZW5zdXJlIHdlIHBhc3MgdGhlIGV2ZW50IGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXJcbiAgYXJnc1swXSA9IGV2ZW50O1xuXG4gIC8vIG9yaWdpbmFsIGV2ZW50IHR5cGUgKGluIGNhc2Ugd2UgZGVsZWdhdGUpXG4gIHZhciBvcmlnaW5hbFR5cGUgPSBldmVudC50eXBlO1xuXG4gIC8vIHVwZGF0ZSBldmVudCB0eXBlIGJlZm9yZSBkZWxlZ2F0aW9uXG4gIGlmICh0eXBlICE9PSBvcmlnaW5hbFR5cGUpIHtcbiAgICBldmVudC50eXBlID0gdHlwZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuVmFsdWUgPSB0aGlzLl9pbnZva2VMaXN0ZW5lcnMoZXZlbnQsIGFyZ3MsIGZpcnN0TGlzdGVuZXIpO1xuICB9IGZpbmFsbHkge1xuXG4gICAgLy8gcmVzZXQgZXZlbnQgdHlwZSBhZnRlciBkZWxlZ2F0aW9uXG4gICAgaWYgKHR5cGUgIT09IG9yaWdpbmFsVHlwZSkge1xuICAgICAgZXZlbnQudHlwZSA9IG9yaWdpbmFsVHlwZTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgdGhlIHJldHVybiB2YWx1ZSB0byBmYWxzZSBpZiB0aGUgZXZlbnQgZGVmYXVsdFxuICAvLyBnb3QgcHJldmVudGVkIGFuZCBubyBvdGhlciByZXR1cm4gdmFsdWUgZXhpc3RzXG4gIGlmIChyZXR1cm5WYWx1ZSA9PT0gdW5kZWZpbmVkICYmIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICByZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuXG5FdmVudEJ1cy5wcm90b3R5cGUuaGFuZGxlRXJyb3IgPSBmdW5jdGlvbihlcnJvcikge1xuICByZXR1cm4gdGhpcy5maXJlKCdlcnJvcicsIHsgZXJyb3I6IGVycm9yIH0pID09PSBmYWxzZTtcbn07XG5cblxuRXZlbnRCdXMucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2xpc3RlbmVycyA9IHt9O1xufTtcblxuRXZlbnRCdXMucHJvdG90eXBlLl9pbnZva2VMaXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudCwgYXJncywgbGlzdGVuZXIpIHtcblxuICB2YXIgcmV0dXJuVmFsdWU7XG5cbiAgd2hpbGUgKGxpc3RlbmVyKSB7XG5cbiAgICAvLyBoYW5kbGUgc3RvcHBlZCBwcm9wYWdhdGlvblxuICAgIGlmIChldmVudC5jYW5jZWxCdWJibGUpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVyblZhbHVlID0gdGhpcy5faW52b2tlTGlzdGVuZXIoZXZlbnQsIGFyZ3MsIGxpc3RlbmVyKTtcblxuICAgIGxpc3RlbmVyID0gbGlzdGVuZXIubmV4dDtcbiAgfVxuXG4gIHJldHVybiByZXR1cm5WYWx1ZTtcbn07XG5cbkV2ZW50QnVzLnByb3RvdHlwZS5faW52b2tlTGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCwgYXJncywgbGlzdGVuZXIpIHtcblxuICB2YXIgcmV0dXJuVmFsdWU7XG5cbiAgdHJ5IHtcblxuICAgIC8vIHJldHVybmluZyBmYWxzZSBwcmV2ZW50cyB0aGUgZGVmYXVsdCBhY3Rpb25cbiAgICByZXR1cm5WYWx1ZSA9IGludm9rZUZ1bmN0aW9uKGxpc3RlbmVyLmNhbGxiYWNrLCBhcmdzKTtcblxuICAgIC8vIHN0b3AgcHJvcGFnYXRpb24gb24gcmV0dXJuIHZhbHVlXG4gICAgaWYgKHJldHVyblZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gcmV0dXJuVmFsdWU7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICAvLyBwcmV2ZW50IGRlZmF1bHQgb24gcmV0dXJuIGZhbHNlXG4gICAgaWYgKHJldHVyblZhbHVlID09PSBmYWxzZSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoIXRoaXMuaGFuZGxlRXJyb3IoZSkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3VuaGFuZGxlZCBlcnJvciBpbiBldmVudCBsaXN0ZW5lcicpO1xuICAgICAgY29uc29sZS5lcnJvcihlLnN0YWNrKTtcblxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuXG4vKlxuICogQWRkIG5ldyBsaXN0ZW5lciB3aXRoIGEgY2VydGFpbiBwcmlvcml0eSB0byB0aGUgbGlzdFxuICogb2YgbGlzdGVuZXJzIChmb3IgdGhlIGdpdmVuIGV2ZW50KS5cbiAqXG4gKiBUaGUgc2VtYW50aWNzIG9mIGxpc3RlbmVyIHJlZ2lzdHJhdGlvbiAvIGxpc3RlbmVyIGV4ZWN1dGlvbiBhcmVcbiAqIGZpcnN0IHJlZ2lzdGVyLCBmaXJzdCBzZXJ2ZTogTmV3IGxpc3RlbmVycyB3aWxsIGFsd2F5cyBiZSBpbnNlcnRlZFxuICogYWZ0ZXIgZXhpc3RpbmcgbGlzdGVuZXJzIHdpdGggdGhlIHNhbWUgcHJpb3JpdHkuXG4gKlxuICogRXhhbXBsZTogSW5zZXJ0aW5nIHR3byBsaXN0ZW5lcnMgd2l0aCBwcmlvcml0eSAxMDAwIGFuZCAxMzAwXG4gKlxuICogICAgKiBiZWZvcmU6IFsgMTUwMCwgMTUwMCwgMTAwMCwgMTAwMCBdXG4gKiAgICAqIGFmdGVyOiBbIDE1MDAsIDE1MDAsIChuZXc9MTMwMCksIDEwMDAsIDEwMDAsIChuZXc9MTAwMCkgXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtPYmplY3R9IGxpc3RlbmVyIHsgcHJpb3JpdHksIGNhbGxiYWNrIH1cbiAqL1xuRXZlbnRCdXMucHJvdG90eXBlLl9hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50LCBuZXdMaXN0ZW5lcikge1xuXG4gIHZhciBsaXN0ZW5lciA9IHRoaXMuX2dldExpc3RlbmVycyhldmVudCksXG4gICAgICBwcmV2aW91c0xpc3RlbmVyO1xuXG4gIC8vIG5vIHByaW9yIGxpc3RlbmVyc1xuICBpZiAoIWxpc3RlbmVyKSB7XG4gICAgdGhpcy5fc2V0TGlzdGVuZXJzKGV2ZW50LCBuZXdMaXN0ZW5lcik7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBlbnN1cmUgd2Ugb3JkZXIgbGlzdGVuZXJzIGJ5IHByaW9yaXR5IGZyb21cbiAgLy8gMCAoaGlnaCkgdG8gbiA+IDAgKGxvdylcbiAgd2hpbGUgKGxpc3RlbmVyKSB7XG5cbiAgICBpZiAobGlzdGVuZXIucHJpb3JpdHkgPCBuZXdMaXN0ZW5lci5wcmlvcml0eSkge1xuXG4gICAgICBuZXdMaXN0ZW5lci5uZXh0ID0gbGlzdGVuZXI7XG5cbiAgICAgIGlmIChwcmV2aW91c0xpc3RlbmVyKSB7XG4gICAgICAgIHByZXZpb3VzTGlzdGVuZXIubmV4dCA9IG5ld0xpc3RlbmVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc2V0TGlzdGVuZXJzKGV2ZW50LCBuZXdMaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcmV2aW91c0xpc3RlbmVyID0gbGlzdGVuZXI7XG4gICAgbGlzdGVuZXIgPSBsaXN0ZW5lci5uZXh0O1xuICB9XG5cbiAgLy8gYWRkIG5ldyBsaXN0ZW5lciB0byBiYWNrXG4gIHByZXZpb3VzTGlzdGVuZXIubmV4dCA9IG5ld0xpc3RlbmVyO1xufTtcblxuXG5FdmVudEJ1cy5wcm90b3R5cGUuX2dldExpc3RlbmVycyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMuX2xpc3RlbmVyc1tuYW1lXTtcbn07XG5cbkV2ZW50QnVzLnByb3RvdHlwZS5fc2V0TGlzdGVuZXJzID0gZnVuY3Rpb24obmFtZSwgbGlzdGVuZXIpIHtcbiAgdGhpcy5fbGlzdGVuZXJzW25hbWVdID0gbGlzdGVuZXI7XG59O1xuXG5FdmVudEJ1cy5wcm90b3R5cGUuX3JlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnQsIGNhbGxiYWNrKSB7XG5cbiAgdmFyIGxpc3RlbmVyID0gdGhpcy5fZ2V0TGlzdGVuZXJzKGV2ZW50KSxcbiAgICAgIG5leHRMaXN0ZW5lcixcbiAgICAgIHByZXZpb3VzTGlzdGVuZXIsXG4gICAgICBsaXN0ZW5lckNhbGxiYWNrO1xuXG4gIGlmICghY2FsbGJhY2spIHtcblxuICAgIC8vIGNsZWFyIGxpc3RlbmVyc1xuICAgIHRoaXMuX3NldExpc3RlbmVycyhldmVudCwgbnVsbCk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICB3aGlsZSAobGlzdGVuZXIpIHtcblxuICAgIG5leHRMaXN0ZW5lciA9IGxpc3RlbmVyLm5leHQ7XG5cbiAgICBsaXN0ZW5lckNhbGxiYWNrID0gbGlzdGVuZXIuY2FsbGJhY2s7XG5cbiAgICBpZiAobGlzdGVuZXJDYWxsYmFjayA9PT0gY2FsbGJhY2sgfHwgbGlzdGVuZXJDYWxsYmFja1tGTl9SRUZdID09PSBjYWxsYmFjaykge1xuICAgICAgaWYgKHByZXZpb3VzTGlzdGVuZXIpIHtcbiAgICAgICAgcHJldmlvdXNMaXN0ZW5lci5uZXh0ID0gbmV4dExpc3RlbmVyO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICAvLyBuZXcgZmlyc3QgbGlzdGVuZXJcbiAgICAgICAgdGhpcy5fc2V0TGlzdGVuZXJzKGV2ZW50LCBuZXh0TGlzdGVuZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByZXZpb3VzTGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgICBsaXN0ZW5lciA9IG5leHRMaXN0ZW5lcjtcbiAgfVxufTtcblxuLyoqXG4gKiBBIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCB2aWEgdGhlIGV2ZW50IGJ1cy5cbiAqL1xuZnVuY3Rpb24gSW50ZXJuYWxFdmVudCgpIHsgfVxuXG5JbnRlcm5hbEV2ZW50LnByb3RvdHlwZS5zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5jYW5jZWxCdWJibGUgPSB0cnVlO1xufTtcblxuSW50ZXJuYWxFdmVudC5wcm90b3R5cGUucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcbn07XG5cbkludGVybmFsRXZlbnQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihkYXRhKSB7XG4gIGFzc2lnbih0aGlzLCBkYXRhIHx8IHt9KTtcbn07XG5cblxuLyoqXG4gKiBJbnZva2UgZnVuY3Rpb24uIEJlIGZhc3QuLi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBhcmdzXG4gKlxuICogQHJldHVybiB7QW55fVxuICovXG5mdW5jdGlvbiBpbnZva2VGdW5jdGlvbihmbiwgYXJncykge1xuICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYXJncyk7XG59XG4iLCJpbXBvcnQge1xuICBmb3JFYWNoLFxuICByZWR1Y2Vcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBnZXRDaGlsZHJlbixcbiAgZ2V0VmlzdWFsXG59IGZyb20gJy4uL3V0aWwvR3JhcGhpY3NVdGlsJztcblxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSAnLi4vdXRpbC9TdmdUcmFuc2Zvcm1VdGlsJztcblxuaW1wb3J0IHsgY2xlYXIgYXMgZG9tQ2xlYXIgfSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHtcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICBjbGFzc2VzIGFzIHN2Z0NsYXNzZXMsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGUsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQge1xuICBpc0ZyYW1lRWxlbWVudFxufSBmcm9tICcuLi91dGlsL0VsZW1lbnRzJztcblxuLyoqXG4gKiBBIGZhY3RvcnkgdGhhdCBjcmVhdGVzIGdyYXBoaWNhbCBlbGVtZW50c1xuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEdyYXBoaWNzRmFjdG9yeShldmVudEJ1cywgZWxlbWVudFJlZ2lzdHJ5KSB7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbn1cblxuR3JhcGhpY3NGYWN0b3J5LiRpbmplY3QgPSBbICdldmVudEJ1cycgLCAnZWxlbWVudFJlZ2lzdHJ5JyBdO1xuXG5cbkdyYXBoaWNzRmFjdG9yeS5wcm90b3R5cGUuX2dldENoaWxkcmVuQ29udGFpbmVyID0gZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gIHZhciBnZnggPSB0aGlzLl9lbGVtZW50UmVnaXN0cnkuZ2V0R3JhcGhpY3MoZWxlbWVudCk7XG5cbiAgdmFyIGNoaWxkcmVuR2Z4O1xuXG4gIC8vIHJvb3QgZWxlbWVudFxuICBpZiAoIWVsZW1lbnQucGFyZW50KSB7XG4gICAgY2hpbGRyZW5HZnggPSBnZng7XG4gIH0gZWxzZSB7XG4gICAgY2hpbGRyZW5HZnggPSBnZXRDaGlsZHJlbihnZngpO1xuICAgIGlmICghY2hpbGRyZW5HZngpIHtcbiAgICAgIGNoaWxkcmVuR2Z4ID0gc3ZnQ3JlYXRlKCdnJyk7XG4gICAgICBzdmdDbGFzc2VzKGNoaWxkcmVuR2Z4KS5hZGQoJ2Rqcy1jaGlsZHJlbicpO1xuXG4gICAgICBzdmdBcHBlbmQoZ2Z4LnBhcmVudE5vZGUsIGNoaWxkcmVuR2Z4KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW5HZng7XG59O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZ3JhcGhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlbGVtZW50IGFuZCByZXR1cm5zIHRoZVxuICogY2xlYXJlZCB2aXN1YWwgKHRoZSA8ZyBjbGFzcz1cImRqcy12aXN1YWxcIiAvPiBlbGVtZW50KS5cbiAqL1xuR3JhcGhpY3NGYWN0b3J5LnByb3RvdHlwZS5fY2xlYXIgPSBmdW5jdGlvbihnZngpIHtcbiAgdmFyIHZpc3VhbCA9IGdldFZpc3VhbChnZngpO1xuXG4gIGRvbUNsZWFyKHZpc3VhbCk7XG5cbiAgcmV0dXJuIHZpc3VhbDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGdmeCBjb250YWluZXIgZm9yIHNoYXBlcyBhbmQgY29ubmVjdGlvbnNcbiAqXG4gKiBUaGUgbGF5b3V0IGlzIGFzIGZvbGxvd3M6XG4gKlxuICogPGcgY2xhc3M9XCJkanMtZ3JvdXBcIj5cbiAqXG4gKiAgIDwhLS0gdGhlIGdmeCAtLT5cbiAqICAgPGcgY2xhc3M9XCJkanMtZWxlbWVudCBkanMtKHNoYXBlfGNvbm5lY3Rpb258ZnJhbWUpXCI+XG4gKiAgICAgPGcgY2xhc3M9XCJkanMtdmlzdWFsXCI+XG4gKiAgICAgICA8IS0tIHRoZSByZW5kZXJlciBkcmF3cyBpbiBoZXJlIC0tPlxuICogICAgIDwvZz5cbiAqXG4gKiAgICAgPCEtLSBleHRlbnNpb25zIChvdmVybGF5cywgY2xpY2sgYm94LCAuLi4pIGdvZXMgaGVyZVxuICogICA8L2c+XG4gKlxuICogICA8IS0tIHRoZSBnZnggY2hpbGQgbm9kZXMgLS0+XG4gKiAgIDxnIGNsYXNzPVwiZGpzLWNoaWxkcmVuXCI+PC9nPlxuICogPC9nPlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50LCBpLmUuIHNoYXBlIHwgY29ubmVjdGlvblxuICogQHBhcmFtIHtTVkdFbGVtZW50fSBbY2hpbGRyZW5HZnhdXG4gKiBAcGFyYW0ge251bWJlcn0gW3BhcmVudEluZGV4XSBwb3NpdGlvbiB0byBjcmVhdGUgY29udGFpbmVyIGluIHBhcmVudFxuICogQHBhcmFtIHtib29sZWFufSBbaXNGcmFtZV0gaXMgZnJhbWUgZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge1NWR0VsZW1lbnR9XG4gKi9cbkdyYXBoaWNzRmFjdG9yeS5wcm90b3R5cGUuX2NyZWF0ZUNvbnRhaW5lciA9IGZ1bmN0aW9uKFxuICAgIHR5cGUsIGNoaWxkcmVuR2Z4LCBwYXJlbnRJbmRleCwgaXNGcmFtZVxuKSB7XG4gIHZhciBvdXRlckdmeCA9IHN2Z0NyZWF0ZSgnZycpO1xuICBzdmdDbGFzc2VzKG91dGVyR2Z4KS5hZGQoJ2Rqcy1ncm91cCcpO1xuXG4gIC8vIGluc2VydCBub2RlIGF0IHBvc2l0aW9uXG4gIGlmICh0eXBlb2YgcGFyZW50SW5kZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcHJlcGVuZFRvKG91dGVyR2Z4LCBjaGlsZHJlbkdmeCwgY2hpbGRyZW5HZnguY2hpbGROb2Rlc1twYXJlbnRJbmRleF0pO1xuICB9IGVsc2Uge1xuICAgIHN2Z0FwcGVuZChjaGlsZHJlbkdmeCwgb3V0ZXJHZngpO1xuICB9XG5cbiAgdmFyIGdmeCA9IHN2Z0NyZWF0ZSgnZycpO1xuICBzdmdDbGFzc2VzKGdmeCkuYWRkKCdkanMtZWxlbWVudCcpO1xuICBzdmdDbGFzc2VzKGdmeCkuYWRkKCdkanMtJyArIHR5cGUpO1xuXG4gIGlmIChpc0ZyYW1lKSB7XG4gICAgc3ZnQ2xhc3NlcyhnZngpLmFkZCgnZGpzLWZyYW1lJyk7XG4gIH1cblxuICBzdmdBcHBlbmQob3V0ZXJHZngsIGdmeCk7XG5cbiAgLy8gY3JlYXRlIHZpc3VhbFxuICB2YXIgdmlzdWFsID0gc3ZnQ3JlYXRlKCdnJyk7XG4gIHN2Z0NsYXNzZXModmlzdWFsKS5hZGQoJ2Rqcy12aXN1YWwnKTtcblxuICBzdmdBcHBlbmQoZ2Z4LCB2aXN1YWwpO1xuXG4gIHJldHVybiBnZng7XG59O1xuXG5HcmFwaGljc0ZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uKHR5cGUsIGVsZW1lbnQsIHBhcmVudEluZGV4KSB7XG4gIHZhciBjaGlsZHJlbkdmeCA9IHRoaXMuX2dldENoaWxkcmVuQ29udGFpbmVyKGVsZW1lbnQucGFyZW50KTtcbiAgcmV0dXJuIHRoaXMuX2NyZWF0ZUNvbnRhaW5lcih0eXBlLCBjaGlsZHJlbkdmeCwgcGFyZW50SW5kZXgsIGlzRnJhbWVFbGVtZW50KGVsZW1lbnQpKTtcbn07XG5cbkdyYXBoaWNzRmFjdG9yeS5wcm90b3R5cGUudXBkYXRlQ29udGFpbm1lbnRzID0gZnVuY3Rpb24oZWxlbWVudHMpIHtcblxuICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICBlbGVtZW50UmVnaXN0cnkgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnksXG4gICAgICBwYXJlbnRzO1xuXG4gIHBhcmVudHMgPSByZWR1Y2UoZWxlbWVudHMsIGZ1bmN0aW9uKG1hcCwgZSkge1xuXG4gICAgaWYgKGUucGFyZW50KSB7XG4gICAgICBtYXBbZS5wYXJlbnQuaWRdID0gZS5wYXJlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcDtcbiAgfSwge30pO1xuXG4gIC8vIHVwZGF0ZSBhbGwgcGFyZW50cyBvZiBjaGFuZ2VkIGFuZCByZW9yZ2FuaXplZCB0aGVpciBjaGlsZHJlblxuICAvLyBpbiB0aGUgY29ycmVjdCBvcmRlciAoYXMgaW5kaWNhdGVkIGluIG91ciBtb2RlbClcbiAgZm9yRWFjaChwYXJlbnRzLCBmdW5jdGlvbihwYXJlbnQpIHtcblxuICAgIHZhciBjaGlsZHJlbiA9IHBhcmVudC5jaGlsZHJlbjtcblxuICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRyZW5HZnggPSBzZWxmLl9nZXRDaGlsZHJlbkNvbnRhaW5lcihwYXJlbnQpO1xuXG4gICAgZm9yRWFjaChjaGlsZHJlbi5zbGljZSgpLnJldmVyc2UoKSwgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgIHZhciBjaGlsZEdmeCA9IGVsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhjaGlsZCk7XG5cbiAgICAgIHByZXBlbmRUbyhjaGlsZEdmeC5wYXJlbnROb2RlLCBjaGlsZHJlbkdmeCk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuR3JhcGhpY3NGYWN0b3J5LnByb3RvdHlwZS5kcmF3U2hhcGUgPSBmdW5jdGlvbih2aXN1YWwsIGVsZW1lbnQpIHtcbiAgdmFyIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgcmV0dXJuIGV2ZW50QnVzLmZpcmUoJ3JlbmRlci5zaGFwZScsIHsgZ2Z4OiB2aXN1YWwsIGVsZW1lbnQ6IGVsZW1lbnQgfSk7XG59O1xuXG5HcmFwaGljc0ZhY3RvcnkucHJvdG90eXBlLmdldFNoYXBlUGF0aCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgcmV0dXJuIGV2ZW50QnVzLmZpcmUoJ3JlbmRlci5nZXRTaGFwZVBhdGgnLCBlbGVtZW50KTtcbn07XG5cbkdyYXBoaWNzRmFjdG9yeS5wcm90b3R5cGUuZHJhd0Nvbm5lY3Rpb24gPSBmdW5jdGlvbih2aXN1YWwsIGVsZW1lbnQpIHtcbiAgdmFyIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgcmV0dXJuIGV2ZW50QnVzLmZpcmUoJ3JlbmRlci5jb25uZWN0aW9uJywgeyBnZng6IHZpc3VhbCwgZWxlbWVudDogZWxlbWVudCB9KTtcbn07XG5cbkdyYXBoaWNzRmFjdG9yeS5wcm90b3R5cGUuZ2V0Q29ubmVjdGlvblBhdGggPSBmdW5jdGlvbih3YXlwb2ludHMpIHtcbiAgdmFyIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgcmV0dXJuIGV2ZW50QnVzLmZpcmUoJ3JlbmRlci5nZXRDb25uZWN0aW9uUGF0aCcsIHdheXBvaW50cyk7XG59O1xuXG5HcmFwaGljc0ZhY3RvcnkucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKHR5cGUsIGVsZW1lbnQsIGdmeCkge1xuXG4gIC8vIGRvIE5PVCB1cGRhdGUgcm9vdCBlbGVtZW50XG4gIGlmICghZWxlbWVudC5wYXJlbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdmlzdWFsID0gdGhpcy5fY2xlYXIoZ2Z4KTtcblxuICAvLyByZWRyYXdcbiAgaWYgKHR5cGUgPT09ICdzaGFwZScpIHtcbiAgICB0aGlzLmRyYXdTaGFwZSh2aXN1YWwsIGVsZW1lbnQpO1xuXG4gICAgLy8gdXBkYXRlIHBvc2l0aW9uaW5nXG4gICAgdHJhbnNsYXRlKGdmeCwgZWxlbWVudC54LCBlbGVtZW50LnkpO1xuICB9IGVsc2VcbiAgaWYgKHR5cGUgPT09ICdjb25uZWN0aW9uJykge1xuICAgIHRoaXMuZHJhd0Nvbm5lY3Rpb24odmlzdWFsLCBlbGVtZW50KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gdHlwZTogJyArIHR5cGUpO1xuICB9XG5cbiAgaWYgKGVsZW1lbnQuaGlkZGVuKSB7XG4gICAgc3ZnQXR0cihnZngsICdkaXNwbGF5JywgJ25vbmUnKTtcbiAgfSBlbHNlIHtcbiAgICBzdmdBdHRyKGdmeCwgJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgfVxufTtcblxuR3JhcGhpY3NGYWN0b3J5LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHZhciBnZnggPSB0aGlzLl9lbGVtZW50UmVnaXN0cnkuZ2V0R3JhcGhpY3MoZWxlbWVudCk7XG5cbiAgLy8gcmVtb3ZlXG4gIHN2Z1JlbW92ZShnZngucGFyZW50Tm9kZSk7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBwcmVwZW5kVG8obmV3Tm9kZSwgcGFyZW50Tm9kZSwgc2libGluZ05vZGUpIHtcbiAgdmFyIG5vZGUgPSBzaWJsaW5nTm9kZSB8fCBwYXJlbnROb2RlLmZpcnN0Q2hpbGQ7XG5cbiAgLy8gZG8gbm90IHByZXBlbmQgbm9kZSB0byBpdHNlbGYgdG8gcHJldmVudCBJRSBmcm9tIGNyYXNoaW5nXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9icG1uLWlvL2JwbW4tanMvaXNzdWVzLzc0NlxuICBpZiAobmV3Tm9kZSA9PT0gbm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIG5vZGUpO1xufVxuIiwiaW1wb3J0IERyYXdNb2R1bGUgZnJvbSAnLi4vZHJhdyc7XG5cbmltcG9ydCBDYW52YXMgZnJvbSAnLi9DYW52YXMnO1xuaW1wb3J0IEVsZW1lbnRSZWdpc3RyeSBmcm9tICcuL0VsZW1lbnRSZWdpc3RyeSc7XG5pbXBvcnQgRWxlbWVudEZhY3RvcnkgZnJvbSAnLi9FbGVtZW50RmFjdG9yeSc7XG5pbXBvcnQgRXZlbnRCdXMgZnJvbSAnLi9FdmVudEJ1cyc7XG5pbXBvcnQgR3JhcGhpY3NGYWN0b3J5IGZyb20gJy4vR3JhcGhpY3NGYWN0b3J5JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogWyBEcmF3TW9kdWxlIF0sXG4gIF9faW5pdF9fOiBbICdjYW52YXMnIF0sXG4gIGNhbnZhczogWyAndHlwZScsIENhbnZhcyBdLFxuICBlbGVtZW50UmVnaXN0cnk6IFsgJ3R5cGUnLCBFbGVtZW50UmVnaXN0cnkgXSxcbiAgZWxlbWVudEZhY3Rvcnk6IFsgJ3R5cGUnLCBFbGVtZW50RmFjdG9yeSBdLFxuICBldmVudEJ1czogWyAndHlwZScsIEV2ZW50QnVzIF0sXG4gIGdyYXBoaWNzRmFjdG9yeTogWyAndHlwZScsIEdyYXBoaWNzRmFjdG9yeSBdXG59OyIsInZhciBERUZBVUxUX1JFTkRFUl9QUklPUklUWSA9IDEwMDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2Ygc2hhcGUgYW5kIGNvbm5lY3Rpb24gcmVuZGVyZXJzLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge251bWJlcn0gW3JlbmRlclByaW9yaXR5PTEwMDBdXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJhc2VSZW5kZXJlcihldmVudEJ1cywgcmVuZGVyUHJpb3JpdHkpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHJlbmRlclByaW9yaXR5ID0gcmVuZGVyUHJpb3JpdHkgfHwgREVGQVVMVF9SRU5ERVJfUFJJT1JJVFk7XG5cbiAgZXZlbnRCdXMub24oWyAncmVuZGVyLnNoYXBlJywgJ3JlbmRlci5jb25uZWN0aW9uJyBdLCByZW5kZXJQcmlvcml0eSwgZnVuY3Rpb24oZXZ0LCBjb250ZXh0KSB7XG4gICAgdmFyIHR5cGUgPSBldnQudHlwZSxcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgdmlzdWFscyA9IGNvbnRleHQuZ2Z4O1xuXG4gICAgaWYgKHNlbGYuY2FuUmVuZGVyKGVsZW1lbnQpKSB7XG4gICAgICBpZiAodHlwZSA9PT0gJ3JlbmRlci5zaGFwZScpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuZHJhd1NoYXBlKHZpc3VhbHMsIGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuZHJhd0Nvbm5lY3Rpb24odmlzdWFscywgZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbihbICdyZW5kZXIuZ2V0U2hhcGVQYXRoJywgJ3JlbmRlci5nZXRDb25uZWN0aW9uUGF0aCddLCByZW5kZXJQcmlvcml0eSwgZnVuY3Rpb24oZXZ0LCBlbGVtZW50KSB7XG4gICAgaWYgKHNlbGYuY2FuUmVuZGVyKGVsZW1lbnQpKSB7XG4gICAgICBpZiAoZXZ0LnR5cGUgPT09ICdyZW5kZXIuZ2V0U2hhcGVQYXRoJykge1xuICAgICAgICByZXR1cm4gc2VsZi5nZXRTaGFwZVBhdGgoZWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2VsZi5nZXRDb25uZWN0aW9uUGF0aChlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFNob3VsZCBjaGVjayB3aGV0aGVyICp0aGlzKiByZW5kZXJlciBjYW4gcmVuZGVyXG4gKiB0aGUgZWxlbWVudC9jb25uZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7ZWxlbWVudH0gZWxlbWVudFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5CYXNlUmVuZGVyZXIucHJvdG90eXBlLmNhblJlbmRlciA9IGZ1bmN0aW9uKCkge307XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIHNoYXBlJ3Mgc25hcCBzdmcgZWxlbWVudCB0byBiZSBkcmF3biBvbiB0aGUgYGNhbnZhc2AuXG4gKlxuICogQHBhcmFtIHtkanMuR3JhcGhpY3N9IHZpc3VhbHNcbiAqIEBwYXJhbSB7U2hhcGV9IHNoYXBlXG4gKlxuICogQHJldHVybnMge1NuYXAuc3ZnfSBbcmV0dXJucyBhIFNuYXAuc3ZnIHBhcGVyIGVsZW1lbnQgXVxuICovXG5CYXNlUmVuZGVyZXIucHJvdG90eXBlLmRyYXdTaGFwZSA9IGZ1bmN0aW9uKCkge307XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIHNoYXBlJ3Mgc25hcCBzdmcgZWxlbWVudCB0byBiZSBkcmF3biBvbiB0aGUgYGNhbnZhc2AuXG4gKlxuICogQHBhcmFtIHtkanMuR3JhcGhpY3N9IHZpc3VhbHNcbiAqIEBwYXJhbSB7Q29ubmVjdGlvbn0gY29ubmVjdGlvblxuICpcbiAqIEByZXR1cm5zIHtTbmFwLnN2Z30gW3JldHVybnMgYSBTbmFwLnN2ZyBwYXBlciBlbGVtZW50IF1cbiAqL1xuQmFzZVJlbmRlcmVyLnByb3RvdHlwZS5kcmF3Q29ubmVjdGlvbiA9IGZ1bmN0aW9uKCkge307XG5cbi8qKlxuICogR2V0cyB0aGUgU1ZHIHBhdGggb2YgYSBzaGFwZSB0aGF0IHJlcHJlc2VudHMgaXQncyB2aXN1YWwgYm91bmRzLlxuICpcbiAqIEBwYXJhbSB7U2hhcGV9IHNoYXBlXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBzdmcgcGF0aFxuICovXG5CYXNlUmVuZGVyZXIucHJvdG90eXBlLmdldFNoYXBlUGF0aCA9IGZ1bmN0aW9uKCkge307XG5cbi8qKlxuICogR2V0cyB0aGUgU1ZHIHBhdGggb2YgYSBjb25uZWN0aW9uIHRoYXQgcmVwcmVzZW50cyBpdCdzIHZpc3VhbCBib3VuZHMuXG4gKlxuICogQHBhcmFtIHtDb25uZWN0aW9ufSBjb25uZWN0aW9uXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBzdmcgcGF0aFxuICovXG5CYXNlUmVuZGVyZXIucHJvdG90eXBlLmdldENvbm5lY3Rpb25QYXRoID0gZnVuY3Rpb24oKSB7fTtcbiIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBCYXNlUmVuZGVyZXIgZnJvbSAnLi9CYXNlUmVuZGVyZXInO1xuXG5pbXBvcnQge1xuICBjb21wb25lbnRzVG9QYXRoLFxuICBjcmVhdGVMaW5lXG59IGZyb20gJy4uL3V0aWwvUmVuZGVyVXRpbCc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZVxufSBmcm9tICd0aW55LXN2Zyc7XG5cbmltcG9ydCB7XG4gIGlzRnJhbWVFbGVtZW50XG59IGZyb20gJy4uL3V0aWwvRWxlbWVudHMnO1xuXG4vLyBhcHBseSBkZWZhdWx0IHJlbmRlcmVyIHdpdGggbG93ZXN0IHBvc3NpYmxlIHByaW9yaXR5XG4vLyBzbyB0aGF0IGl0IG9ubHkga2lja3MgaW4gaWYgbm9vbmUgZWxzZSBjb3VsZCByZW5kZXJcbnZhciBERUZBVUxUX1JFTkRFUl9QUklPUklUWSA9IDE7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgcmVuZGVyZXIgdXNlZCBmb3Igc2hhcGVzIGFuZCBjb25uZWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtTdHlsZXN9IHN0eWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEZWZhdWx0UmVuZGVyZXIoZXZlbnRCdXMsIHN0eWxlcykge1xuXG4gIC8vXG4gIEJhc2VSZW5kZXJlci5jYWxsKHRoaXMsIGV2ZW50QnVzLCBERUZBVUxUX1JFTkRFUl9QUklPUklUWSk7XG5cbiAgdGhpcy5DT05ORUNUSU9OX1NUWUxFID0gc3R5bGVzLnN0eWxlKFsgJ25vLWZpbGwnIF0sIHsgc3Ryb2tlV2lkdGg6IDUsIHN0cm9rZTogJ2Z1Y2hzaWEnIH0pO1xuICB0aGlzLlNIQVBFX1NUWUxFID0gc3R5bGVzLnN0eWxlKHsgZmlsbDogJ3doaXRlJywgc3Ryb2tlOiAnZnVjaHNpYScsIHN0cm9rZVdpZHRoOiAyIH0pO1xuICB0aGlzLkZSQU1FX1NUWUxFID0gc3R5bGVzLnN0eWxlKFsgJ25vLWZpbGwnIF0sIHsgc3Ryb2tlOiAnZnVjaHNpYScsIHN0cm9rZURhc2hhcnJheTogNCwgc3Ryb2tlV2lkdGg6IDIgfSk7XG59XG5cbmluaGVyaXRzKERlZmF1bHRSZW5kZXJlciwgQmFzZVJlbmRlcmVyKTtcblxuXG5EZWZhdWx0UmVuZGVyZXIucHJvdG90eXBlLmNhblJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkRlZmF1bHRSZW5kZXJlci5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gZHJhd1NoYXBlKHZpc3VhbHMsIGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBzdmdDcmVhdGUoJ3JlY3QnKTtcblxuICBzdmdBdHRyKHJlY3QsIHtcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgd2lkdGg6IGVsZW1lbnQud2lkdGggfHwgMCxcbiAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0IHx8IDBcbiAgfSk7XG5cbiAgaWYgKGlzRnJhbWVFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgc3ZnQXR0cihyZWN0LCB0aGlzLkZSQU1FX1NUWUxFKTtcbiAgfSBlbHNlIHtcbiAgICBzdmdBdHRyKHJlY3QsIHRoaXMuU0hBUEVfU1RZTEUpO1xuICB9XG5cbiAgc3ZnQXBwZW5kKHZpc3VhbHMsIHJlY3QpO1xuXG4gIHJldHVybiByZWN0O1xufTtcblxuRGVmYXVsdFJlbmRlcmVyLnByb3RvdHlwZS5kcmF3Q29ubmVjdGlvbiA9IGZ1bmN0aW9uIGRyYXdDb25uZWN0aW9uKHZpc3VhbHMsIGNvbm5lY3Rpb24pIHtcblxuICB2YXIgbGluZSA9IGNyZWF0ZUxpbmUoY29ubmVjdGlvbi53YXlwb2ludHMsIHRoaXMuQ09OTkVDVElPTl9TVFlMRSk7XG4gIHN2Z0FwcGVuZCh2aXN1YWxzLCBsaW5lKTtcblxuICByZXR1cm4gbGluZTtcbn07XG5cbkRlZmF1bHRSZW5kZXJlci5wcm90b3R5cGUuZ2V0U2hhcGVQYXRoID0gZnVuY3Rpb24gZ2V0U2hhcGVQYXRoKHNoYXBlKSB7XG5cbiAgdmFyIHggPSBzaGFwZS54LFxuICAgICAgeSA9IHNoYXBlLnksXG4gICAgICB3aWR0aCA9IHNoYXBlLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuXG4gIHZhciBzaGFwZVBhdGggPSBbXG4gICAgWydNJywgeCwgeV0sXG4gICAgWydsJywgd2lkdGgsIDBdLFxuICAgIFsnbCcsIDAsIGhlaWdodF0sXG4gICAgWydsJywgLXdpZHRoLCAwXSxcbiAgICBbJ3onXVxuICBdO1xuXG4gIHJldHVybiBjb21wb25lbnRzVG9QYXRoKHNoYXBlUGF0aCk7XG59O1xuXG5EZWZhdWx0UmVuZGVyZXIucHJvdG90eXBlLmdldENvbm5lY3Rpb25QYXRoID0gZnVuY3Rpb24gZ2V0Q29ubmVjdGlvblBhdGgoY29ubmVjdGlvbikge1xuICB2YXIgd2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHM7XG5cbiAgdmFyIGlkeCwgcG9pbnQsIGNvbm5lY3Rpb25QYXRoID0gW107XG5cbiAgZm9yIChpZHggPSAwOyAocG9pbnQgPSB3YXlwb2ludHNbaWR4XSk7IGlkeCsrKSB7XG5cbiAgICAvLyB0YWtlIGludmlzaWJsZSBkb2NraW5nIGludG8gYWNjb3VudFxuICAgIC8vIHdoZW4gY3JlYXRpbmcgdGhlIHBhdGhcbiAgICBwb2ludCA9IHBvaW50Lm9yaWdpbmFsIHx8IHBvaW50O1xuXG4gICAgY29ubmVjdGlvblBhdGgucHVzaChbIGlkeCA9PT0gMCA/ICdNJyA6ICdMJywgcG9pbnQueCwgcG9pbnQueSBdKTtcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnRzVG9QYXRoKGNvbm5lY3Rpb25QYXRoKTtcbn07XG5cblxuRGVmYXVsdFJlbmRlcmVyLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdzdHlsZXMnIF07XG4iLCJpbXBvcnQge1xuICBpc0FycmF5LFxuICBhc3NpZ24sXG4gIHJlZHVjZVxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IG1hbmFnZXMgc2hhcGUgc3R5bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFN0eWxlcygpIHtcblxuICB2YXIgZGVmYXVsdFRyYWl0cyA9IHtcblxuICAgICduby1maWxsJzoge1xuICAgICAgZmlsbDogJ25vbmUnXG4gICAgfSxcbiAgICAnbm8tYm9yZGVyJzoge1xuICAgICAgc3Ryb2tlT3BhY2l0eTogMC4wXG4gICAgfSxcbiAgICAnbm8tZXZlbnRzJzoge1xuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnXG4gICAgfVxuICB9O1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvKipcbiAgICogQnVpbGRzIGEgc3R5bGUgZGVmaW5pdGlvbiBmcm9tIGEgY2xhc3NOYW1lLCBhIGxpc3Qgb2YgdHJhaXRzIGFuZCBhbiBvYmplY3Qgb2YgYWRkaXRpb25hbCBhdHRyaWJ1dGVzLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IGNsYXNzTmFtZVxuICAgKiBAcGFyYW0gIHtBcnJheTxzdHJpbmc+fSB0cmFpdHNcbiAgICogQHBhcmFtICB7T2JqZWN0fSBhZGRpdGlvbmFsQXR0cnNcbiAgICpcbiAgICogQHJldHVybiB7T2JqZWN0fSB0aGUgc3R5bGUgZGVmaW50aW9uXG4gICAqL1xuICB0aGlzLmNscyA9IGZ1bmN0aW9uKGNsYXNzTmFtZSwgdHJhaXRzLCBhZGRpdGlvbmFsQXR0cnMpIHtcbiAgICB2YXIgYXR0cnMgPSB0aGlzLnN0eWxlKHRyYWl0cywgYWRkaXRpb25hbEF0dHJzKTtcblxuICAgIHJldHVybiBhc3NpZ24oYXR0cnMsIHsgJ2NsYXNzJzogY2xhc3NOYW1lIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBzdHlsZSBkZWZpbml0aW9uIGZyb20gYSBsaXN0IG9mIHRyYWl0cyBhbmQgYW4gb2JqZWN0IG9mIGFkZGl0aW9uYWwgYXR0cmlidXRlcy5cbiAgICpcbiAgICogQHBhcmFtICB7QXJyYXk8c3RyaW5nPn0gdHJhaXRzXG4gICAqIEBwYXJhbSAge09iamVjdH0gYWRkaXRpb25hbEF0dHJzXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdH0gdGhlIHN0eWxlIGRlZmludGlvblxuICAgKi9cbiAgdGhpcy5zdHlsZSA9IGZ1bmN0aW9uKHRyYWl0cywgYWRkaXRpb25hbEF0dHJzKSB7XG5cbiAgICBpZiAoIWlzQXJyYXkodHJhaXRzKSAmJiAhYWRkaXRpb25hbEF0dHJzKSB7XG4gICAgICBhZGRpdGlvbmFsQXR0cnMgPSB0cmFpdHM7XG4gICAgICB0cmFpdHMgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgYXR0cnMgPSByZWR1Y2UodHJhaXRzLCBmdW5jdGlvbihhdHRycywgdCkge1xuICAgICAgcmV0dXJuIGFzc2lnbihhdHRycywgZGVmYXVsdFRyYWl0c1t0XSB8fCB7fSk7XG4gICAgfSwge30pO1xuXG4gICAgcmV0dXJuIGFkZGl0aW9uYWxBdHRycyA/IGFzc2lnbihhdHRycywgYWRkaXRpb25hbEF0dHJzKSA6IGF0dHJzO1xuICB9O1xuXG4gIHRoaXMuY29tcHV0ZVN0eWxlID0gZnVuY3Rpb24oY3VzdG9tLCB0cmFpdHMsIGRlZmF1bHRTdHlsZXMpIHtcbiAgICBpZiAoIWlzQXJyYXkodHJhaXRzKSkge1xuICAgICAgZGVmYXVsdFN0eWxlcyA9IHRyYWl0cztcbiAgICAgIHRyYWl0cyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxmLnN0eWxlKHRyYWl0cyB8fCBbXSwgYXNzaWduKHt9LCBkZWZhdWx0U3R5bGVzLCBjdXN0b20gfHwge30pKTtcbiAgfTtcbn1cbiIsImltcG9ydCBEZWZhdWx0UmVuZGVyZXIgZnJvbSAnLi9EZWZhdWx0UmVuZGVyZXInO1xuaW1wb3J0IFN0eWxlcyBmcm9tICcuL1N0eWxlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ2RlZmF1bHRSZW5kZXJlcicgXSxcbiAgZGVmYXVsdFJlbmRlcmVyOiBbICd0eXBlJywgRGVmYXVsdFJlbmRlcmVyIF0sXG4gIHN0eWxlczogWyAndHlwZScsIFN0eWxlcyBdXG59O1xuIiwiaW1wb3J0IHtcbiAgZmlsdGVyLFxuICBmb3JFYWNoLFxuICBzb3J0Qnlcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5mdW5jdGlvbiBsYXN0KGFycikge1xuICByZXR1cm4gYXJyICYmIGFyclthcnIubGVuZ3RoIC0gMV07XG59XG5cbmZ1bmN0aW9uIHNvcnRUb3BPck1pZGRsZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50Lnk7XG59XG5cbmZ1bmN0aW9uIHNvcnRMZWZ0T3JDZW50ZXIoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC54O1xufVxuXG4vKipcbiAqIFNvcnRpbmcgZnVuY3Rpb25zIGZvciBkaWZmZXJlbnQgdHlwZXMgb2YgYWxpZ25tZW50XG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xudmFyIEFMSUdOTUVOVF9TT1JUSU5HID0ge1xuICBsZWZ0OiBzb3J0TGVmdE9yQ2VudGVyLFxuICBjZW50ZXI6IHNvcnRMZWZ0T3JDZW50ZXIsXG4gIHJpZ2h0OiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQueCArIGVsZW1lbnQud2lkdGg7XG4gIH0sXG4gIHRvcDogc29ydFRvcE9yTWlkZGxlLFxuICBtaWRkbGU6IHNvcnRUb3BPck1pZGRsZSxcbiAgYm90dG9tOiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQueSArIGVsZW1lbnQuaGVpZ2h0O1xuICB9XG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFsaWduRWxlbWVudHMobW9kZWxpbmcpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbn1cblxuQWxpZ25FbGVtZW50cy4kaW5qZWN0ID0gWyAnbW9kZWxpbmcnIF07XG5cblxuLyoqXG4gKiBHZXQgdGhlIHJlbGV2YW50IFwiYXhpc1wiIGFuZCBcImRpbWVuc2lvblwiIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgdHlwZSBvZiBhbGlnbm1lbnRcbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHR5cGUgbGVmdHxyaWdodHxjZW50ZXJ8dG9wfGJvdHRvbXxtaWRkbGVcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHsgYXhpcywgZGltZW5zaW9uIH1cbiAqL1xuQWxpZ25FbGVtZW50cy5wcm90b3R5cGUuX2dldE9yaWVudGF0aW9uRGV0YWlscyA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdmFyIHZlcnRpY2FsID0gWyAndG9wJywgJ2JvdHRvbScsICdtaWRkbGUnIF0sXG4gICAgICBheGlzID0gJ3gnLFxuICAgICAgZGltZW5zaW9uID0gJ3dpZHRoJztcblxuICBpZiAodmVydGljYWwuaW5kZXhPZih0eXBlKSAhPT0gLTEpIHtcbiAgICBheGlzID0gJ3knO1xuICAgIGRpbWVuc2lvbiA9ICdoZWlnaHQnO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBheGlzOiBheGlzLFxuICAgIGRpbWVuc2lvbjogZGltZW5zaW9uXG4gIH07XG59O1xuXG5BbGlnbkVsZW1lbnRzLnByb3RvdHlwZS5faXNUeXBlID0gZnVuY3Rpb24odHlwZSwgdHlwZXMpIHtcbiAgcmV0dXJuIHR5cGVzLmluZGV4T2YodHlwZSkgIT09IC0xO1xufTtcblxuLyoqXG4gKiBHZXQgYSBwb2ludCBvbiB0aGUgcmVsZXZhbnQgYXhpcyB3aGVyZSBlbGVtZW50cyBzaG91bGQgYWxpZ24gdG9cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHR5cGUgbGVmdHxyaWdodHxjZW50ZXJ8dG9wfGJvdHRvbXxtaWRkbGVcbiAqIEBwYXJhbSAge0FycmF5fSBzb3J0ZWRFbGVtZW50c1xuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuQWxpZ25FbGVtZW50cy5wcm90b3R5cGUuX2FsaWdubWVudFBvc2l0aW9uID0gZnVuY3Rpb24odHlwZSwgc29ydGVkRWxlbWVudHMpIHtcbiAgdmFyIG9yaWVudGF0aW9uID0gdGhpcy5fZ2V0T3JpZW50YXRpb25EZXRhaWxzKHR5cGUpLFxuICAgICAgYXhpcyA9IG9yaWVudGF0aW9uLmF4aXMsXG4gICAgICBkaW1lbnNpb24gPSBvcmllbnRhdGlvbi5kaW1lbnNpb24sXG4gICAgICBhbGlnbm1lbnQgPSB7fSxcbiAgICAgIGNlbnRlcnMgPSB7fSxcbiAgICAgIGhhc1NoYXJlZENlbnRlcnMgPSBmYWxzZSxcbiAgICAgIGNlbnRlcmVkRWxlbWVudHMsXG4gICAgICBmaXJzdEVsZW1lbnQsXG4gICAgICBsYXN0RWxlbWVudDtcblxuICBmdW5jdGlvbiBnZXRNaWRkbGVPclRvcChmaXJzdCwgbGFzdCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKChmaXJzdFtheGlzXSArIGxhc3RbYXhpc10gKyBsYXN0W2RpbWVuc2lvbl0pIC8gMik7XG4gIH1cblxuICBpZiAodGhpcy5faXNUeXBlKHR5cGUsIFsgJ2xlZnQnLCAndG9wJyBdKSkge1xuICAgIGFsaWdubWVudFt0eXBlXSA9IHNvcnRlZEVsZW1lbnRzWzBdW2F4aXNdO1xuXG4gIH0gZWxzZSBpZiAodGhpcy5faXNUeXBlKHR5cGUsIFsgJ3JpZ2h0JywgJ2JvdHRvbScgXSkpIHtcbiAgICBsYXN0RWxlbWVudCA9IGxhc3Qoc29ydGVkRWxlbWVudHMpO1xuXG4gICAgYWxpZ25tZW50W3R5cGVdID0gbGFzdEVsZW1lbnRbYXhpc10gKyBsYXN0RWxlbWVudFtkaW1lbnNpb25dO1xuXG4gIH0gZWxzZSBpZiAodGhpcy5faXNUeXBlKHR5cGUsIFsgJ2NlbnRlcicsICdtaWRkbGUnIF0pKSB7XG5cbiAgICAvLyBjaGVjayBpZiB0aGVyZSBpcyBhIGNlbnRlciBzaGFyZWQgYnkgbW9yZSB0aGFuIG9uZSBzaGFwZVxuICAgIC8vIGlmIG5vdCwganVzdCB0YWtlIHRoZSBtaWRkbGUgb2YgdGhlIHJhbmdlXG4gICAgZm9yRWFjaChzb3J0ZWRFbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgdmFyIGNlbnRlciA9IGVsZW1lbnRbYXhpc10gKyBNYXRoLnJvdW5kKGVsZW1lbnRbZGltZW5zaW9uXSAvIDIpO1xuXG4gICAgICBpZiAoY2VudGVyc1tjZW50ZXJdKSB7XG4gICAgICAgIGNlbnRlcnNbY2VudGVyXS5lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2VudGVyc1tjZW50ZXJdID0ge1xuICAgICAgICAgIGVsZW1lbnRzOiBbIGVsZW1lbnQgXSxcbiAgICAgICAgICBjZW50ZXI6IGNlbnRlclxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY2VudGVyZWRFbGVtZW50cyA9IHNvcnRCeShjZW50ZXJzLCBmdW5jdGlvbihjZW50ZXIpIHtcbiAgICAgIGlmIChjZW50ZXIuZWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBoYXNTaGFyZWRDZW50ZXJzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNlbnRlci5lbGVtZW50cy5sZW5ndGg7XG4gICAgfSk7XG5cbiAgICBpZiAoaGFzU2hhcmVkQ2VudGVycykge1xuICAgICAgYWxpZ25tZW50W3R5cGVdID0gbGFzdChjZW50ZXJlZEVsZW1lbnRzKS5jZW50ZXI7XG5cbiAgICAgIHJldHVybiBhbGlnbm1lbnQ7XG4gICAgfVxuXG4gICAgZmlyc3RFbGVtZW50ID0gc29ydGVkRWxlbWVudHNbMF07XG5cbiAgICBzb3J0ZWRFbGVtZW50cyA9IHNvcnRCeShzb3J0ZWRFbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRbYXhpc10gKyBlbGVtZW50W2RpbWVuc2lvbl07XG4gICAgfSk7XG5cbiAgICBsYXN0RWxlbWVudCA9IGxhc3Qoc29ydGVkRWxlbWVudHMpO1xuXG4gICAgYWxpZ25tZW50W3R5cGVdID0gZ2V0TWlkZGxlT3JUb3AoZmlyc3RFbGVtZW50LCBsYXN0RWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gYWxpZ25tZW50O1xufTtcblxuLyoqXG4gKiBFeGVjdXRlcyB0aGUgYWxpZ25tZW50IG9mIGEgc2VsZWN0aW9uIG9mIGVsZW1lbnRzXG4gKlxuICogQHBhcmFtICB7QXJyYXl9IGVsZW1lbnRzIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge3N0cmluZ30gdHlwZSBsZWZ0fHJpZ2h0fGNlbnRlcnx0b3B8Ym90dG9tfG1pZGRsZVxuICovXG5BbGlnbkVsZW1lbnRzLnByb3RvdHlwZS50cmlnZ2VyID0gZnVuY3Rpb24oZWxlbWVudHMsIHR5cGUpIHtcbiAgdmFyIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG5cbiAgdmFyIGZpbHRlcmVkRWxlbWVudHMgPSBmaWx0ZXIoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gIShlbGVtZW50LndheXBvaW50cyB8fCBlbGVtZW50Lmhvc3QgfHwgZWxlbWVudC5sYWJlbFRhcmdldCk7XG4gIH0pO1xuXG4gIHZhciBzb3J0Rm4gPSBBTElHTk1FTlRfU09SVElOR1t0eXBlXTtcblxuICB2YXIgc29ydGVkRWxlbWVudHMgPSBzb3J0QnkoZmlsdGVyZWRFbGVtZW50cywgc29ydEZuKTtcblxuICB2YXIgYWxpZ25tZW50ID0gdGhpcy5fYWxpZ25tZW50UG9zaXRpb24odHlwZSwgc29ydGVkRWxlbWVudHMpO1xuXG4gIG1vZGVsaW5nLmFsaWduRWxlbWVudHMoc29ydGVkRWxlbWVudHMsIGFsaWdubWVudCk7XG59O1xuIiwiaW1wb3J0IEFsaWduRWxlbWVudHMgZnJvbSAnLi9BbGlnbkVsZW1lbnRzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAnYWxpZ25FbGVtZW50cycgXSxcbiAgYWxpZ25FbGVtZW50czogWyAndHlwZScsIEFsaWduRWxlbWVudHMgXVxufTtcbiIsImltcG9ydCB7XG4gIGZsYXR0ZW4sXG4gIGZpbHRlcixcbiAgZm9yRWFjaCxcbiAgZ3JvdXBCeSxcbiAgbWFwLFxuICB1bmlvbkJ5XG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHsgc2F2ZUNsZWFyIH0gZnJvbSAnLi4vLi4vdXRpbC9SZW1vdmFsJztcblxuaW1wb3J0IHsgZ2V0TmV3QXR0YWNoU2hhcGVEZWx0YSB9IGZyb20gJy4uLy4uL3V0aWwvQXR0YWNoVXRpbCc7XG5cbmltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnLi4vLi4vY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG52YXIgTE9XX1BSSU9SSVRZID0gMjUxLFxuICAgIEhJR0hfUFJJT1JJVFkgPSAxNDAxO1xuXG52YXIgTUFSS0VSX0FUVEFDSCA9ICdhdHRhY2gtb2snO1xuXG5cbi8qKlxuICogQWRkcyB0aGUgbm90aW9uIG9mIGF0dGFjaGVkIGVsZW1lbnRzIHRvIHRoZSBtb2RlbGVyLlxuICpcbiAqIE9wdGlvbmFsbHkgZGVwZW5kcyBvbiBgZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW92ZWAgdG8gcmVuZGVyXG4gKiB0aGUgYXR0YWNoZWQgZWxlbWVudHMgZHVyaW5nIG1vdmUgcHJldmlldy5cbiAqXG4gKiBPcHRpb25hbGx5IGRlcGVuZHMgb24gYGRpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2xhYmVsLXN1cHBvcnRgXG4gKiB0byByZW5kZXIgYXR0YWNoZWQgbGFiZWxzIGR1cmluZyBtb3ZlIHByZXZpZXcuXG4gKlxuICogQHBhcmFtIHtkaWRpLkluamVjdG9yfSBpbmplY3RvclxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7UnVsZXN9IHJ1bGVzXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBdHRhY2hTdXBwb3J0KGluamVjdG9yLCBldmVudEJ1cywgY2FudmFzLCBydWxlcywgbW9kZWxpbmcpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgdmFyIG1vdmVQcmV2aWV3ID0gaW5qZWN0b3IuZ2V0KCdtb3ZlUHJldmlldycsIGZhbHNlKTtcblxuXG4gIC8vIHJlbW92ZSBhbGwgdGhlIGF0dGFjaGVkIGVsZW1lbnRzIGZyb20gdGhlIHNoYXBlcyB0byBiZSB2YWxpZGF0ZWRcbiAgLy8gYWRkIGFsbCB0aGUgYXR0YWNoZWQgc2hhcGVzIHRvIHRoZSBvdmVyYWxsIGxpc3Qgb2YgbW92ZWQgc2hhcGVzXG4gIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLnN0YXJ0JywgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzLFxuICAgICAgICB2YWxpZGF0ZWRTaGFwZXMgPSBjb250ZXh0LnZhbGlkYXRlZFNoYXBlcztcblxuICAgIGNvbnRleHQuc2hhcGVzID0gYWRkQXR0YWNoZWQoc2hhcGVzKTtcblxuICAgIGNvbnRleHQudmFsaWRhdGVkU2hhcGVzID0gcmVtb3ZlQXR0YWNoZWQodmFsaWRhdGVkU2hhcGVzKTtcbiAgfSk7XG5cbiAgLy8gYWRkIGF0dGFjaGVycyB0byB0aGUgdmlzdWFsJ3MgZ3JvdXBcbiAgbW92ZVByZXZpZXcgJiYgZXZlbnRCdXMub24oJ3NoYXBlLm1vdmUuc3RhcnQnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcyxcbiAgICAgICAgYXR0YWNoZXJzID0gZ2V0QXR0YWNoZXJzKHNoYXBlcyk7XG5cbiAgICBmb3JFYWNoKGF0dGFjaGVycywgZnVuY3Rpb24oYXR0YWNoZXIpIHtcbiAgICAgIG1vdmVQcmV2aWV3Lm1ha2VEcmFnZ2FibGUoY29udGV4dCwgYXR0YWNoZXIsIHRydWUpO1xuXG4gICAgICBmb3JFYWNoKGF0dGFjaGVyLmxhYmVscywgZnVuY3Rpb24obGFiZWwpIHtcbiAgICAgICAgbW92ZVByZXZpZXcubWFrZURyYWdnYWJsZShjb250ZXh0LCBsYWJlbCwgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gYWRkIGF0dGFjaC1vayBtYXJrZXIgdG8gY3VycmVudCBob3N0XG4gIG1vdmVQcmV2aWV3ICYmIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLnN0YXJ0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzO1xuXG4gICAgaWYgKHNoYXBlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc2hhcGUgPSBzaGFwZXNbMF07XG5cbiAgICB2YXIgaG9zdCA9IHNoYXBlLmhvc3Q7XG5cbiAgICBpZiAoaG9zdCkge1xuICAgICAgY2FudmFzLmFkZE1hcmtlcihob3N0LCBNQVJLRVJfQVRUQUNIKTtcblxuICAgICAgZXZlbnRCdXMub25jZShbXG4gICAgICAgICdzaGFwZS5tb3ZlLm91dCcsXG4gICAgICAgICdzaGFwZS5tb3ZlLmNsZWFudXAnXG4gICAgICBdLCBmdW5jdGlvbigpIHtcbiAgICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihob3N0LCBNQVJLRVJfQVRUQUNIKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gYWRkIGFsbCBhdHRhY2hlcnMgdG8gbW92ZSBjbG9zdXJlXG4gIHRoaXMucHJlRXhlY3V0ZWQoJ2VsZW1lbnRzLm1vdmUnLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIGNsb3N1cmUgPSBjb250ZXh0LmNsb3N1cmUsXG4gICAgICAgIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzLFxuICAgICAgICBhdHRhY2hlcnMgPSBnZXRBdHRhY2hlcnMoc2hhcGVzKTtcblxuICAgIGZvckVhY2goYXR0YWNoZXJzLCBmdW5jdGlvbihhdHRhY2hlcikge1xuICAgICAgY2xvc3VyZS5hZGQoYXR0YWNoZXIsIGNsb3N1cmUudG9wTGV2ZWxbYXR0YWNoZXIuaG9zdC5pZF0pO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBwZXJmb3JtIHRoZSBhdHRhY2hpbmcgYWZ0ZXIgc2hhcGVzIGFyZSBkb25lIG1vdmluZ1xuICB0aGlzLnBvc3RFeGVjdXRlZCgnZWxlbWVudHMubW92ZScsIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcyxcbiAgICAgICAgbmV3SG9zdCA9IGNvbnRleHQubmV3SG9zdCxcbiAgICAgICAgYXR0YWNoZXJzO1xuXG4gICAgLy8gb25seSBzaW5nbGUgZWxlbWVudHMgY2FuIGJlIGF0dGFjaGVkXG4gICAgLy8gbXVsdGlwbHkgZWxlbWVudHMgY2FuIGJlIGRldGFjaGVkXG4gICAgaWYgKG5ld0hvc3QgJiYgc2hhcGVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChuZXdIb3N0KSB7XG4gICAgICBhdHRhY2hlcnMgPSBzaGFwZXM7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gZmluZCBhdHRhY2hlcnMgbW92ZWQgd2l0aG91dCBob3N0XG4gICAgICBhdHRhY2hlcnMgPSBmaWx0ZXIoc2hhcGVzLCBmdW5jdGlvbihzaGFwZSkge1xuICAgICAgICB2YXIgaG9zdCA9IHNoYXBlLmhvc3Q7XG5cbiAgICAgICAgcmV0dXJuIGlzQXR0YWNoZXIoc2hhcGUpICYmICFpbmNsdWRlcyhzaGFwZXMsIGhvc3QpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yRWFjaChhdHRhY2hlcnMsIGZ1bmN0aW9uKGF0dGFjaGVyKSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVBdHRhY2htZW50KGF0dGFjaGVyLCBuZXdIb3N0KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gZW5zdXJlIGludmFsaWQgYXR0YWNobWVudCBjb25uZWN0aW9ucyBhcmUgcmVtb3ZlZFxuICB0aGlzLnBvc3RFeGVjdXRlZCgnZWxlbWVudHMubW92ZScsIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBzaGFwZXMgPSBlLmNvbnRleHQuc2hhcGVzO1xuXG4gICAgZm9yRWFjaChzaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XG5cbiAgICAgIGZvckVhY2goc2hhcGUuYXR0YWNoZXJzLCBmdW5jdGlvbihhdHRhY2hlcikge1xuXG4gICAgICAgIC8vIHJlbW92ZSBpbnZhbGlkIG91dGdvaW5nIGNvbm5lY3Rpb25zXG4gICAgICAgIGZvckVhY2goYXR0YWNoZXIub3V0Z29pbmcuc2xpY2UoKSwgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgICAgICAgIHZhciBhbGxvd2VkID0gcnVsZXMuYWxsb3dlZCgnY29ubmVjdGlvbi5yZWNvbm5lY3QnLCB7XG4gICAgICAgICAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgICAgICAgICAgc291cmNlOiBjb25uZWN0aW9uLnNvdXJjZSxcbiAgICAgICAgICAgIHRhcmdldDogY29ubmVjdGlvbi50YXJnZXRcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICghYWxsb3dlZCkge1xuICAgICAgICAgICAgbW9kZWxpbmcucmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHJlbW92ZSBpbnZhbGlkIGluY29taW5nIGNvbm5lY3Rpb25zXG4gICAgICAgIGZvckVhY2goYXR0YWNoZXIuaW5jb21pbmcuc2xpY2UoKSwgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgICAgICAgIHZhciBhbGxvd2VkID0gcnVsZXMuYWxsb3dlZCgnY29ubmVjdGlvbi5yZWNvbm5lY3QnLCB7XG4gICAgICAgICAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgICAgICAgICAgc291cmNlOiBjb25uZWN0aW9uLnNvdXJjZSxcbiAgICAgICAgICAgIHRhcmdldDogY29ubmVjdGlvbi50YXJnZXRcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICghYWxsb3dlZCkge1xuICAgICAgICAgICAgbW9kZWxpbmcucmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBob3N0ID0gY29udGV4dC5ob3N0O1xuXG4gICAgaWYgKGhvc3QpIHtcbiAgICAgIG1vZGVsaW5nLnVwZGF0ZUF0dGFjaG1lbnQoc2hhcGUsIGhvc3QpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gdXBkYXRlIGF0dGFjaG1lbnRzIGlmIHRoZSBob3N0IGlzIHJlcGxhY2VkXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLnJlcGxhY2UnLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgb2xkU2hhcGUgPSBjb250ZXh0Lm9sZFNoYXBlLFxuICAgICAgICBuZXdTaGFwZSA9IGNvbnRleHQubmV3U2hhcGU7XG5cbiAgICAvLyBtb3ZlIHRoZSBhdHRhY2hlcnMgdG8gdGhlIG5ldyBob3N0XG4gICAgc2F2ZUNsZWFyKG9sZFNoYXBlLmF0dGFjaGVycywgZnVuY3Rpb24oYXR0YWNoZXIpIHtcbiAgICAgIHZhciBhbGxvd2VkID0gcnVsZXMuYWxsb3dlZCgnZWxlbWVudHMubW92ZScsIHtcbiAgICAgICAgdGFyZ2V0OiBuZXdTaGFwZSxcbiAgICAgICAgc2hhcGVzOiBbYXR0YWNoZXJdXG4gICAgICB9KTtcblxuICAgICAgaWYgKGFsbG93ZWQgPT09ICdhdHRhY2gnKSB7XG4gICAgICAgIG1vZGVsaW5nLnVwZGF0ZUF0dGFjaG1lbnQoYXR0YWNoZXIsIG5ld1NoYXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1vZGVsaW5nLnJlbW92ZVNoYXBlKGF0dGFjaGVyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIG1vdmUgYXR0YWNoZXJzIGlmIG5ldyBob3N0IGhhcyBkaWZmZXJlbnQgc2l6ZVxuICAgIGlmIChuZXdTaGFwZS5hdHRhY2hlcnMubGVuZ3RoKSB7XG5cbiAgICAgIGZvckVhY2gobmV3U2hhcGUuYXR0YWNoZXJzLCBmdW5jdGlvbihhdHRhY2hlcikge1xuICAgICAgICB2YXIgZGVsdGEgPSBnZXROZXdBdHRhY2hTaGFwZURlbHRhKGF0dGFjaGVyLCBvbGRTaGFwZSwgbmV3U2hhcGUpO1xuICAgICAgICBtb2RlbGluZy5tb3ZlU2hhcGUoYXR0YWNoZXIsIGRlbHRhLCBhdHRhY2hlci5wYXJlbnQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gIH0pO1xuXG4gIC8vIG1vdmUgc2hhcGUgb24gaG9zdCByZXNpemVcbiAgdGhpcy5wb3N0RXhlY3V0ZSgnc2hhcGUucmVzaXplJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgb2xkQm91bmRzID0gY29udGV4dC5vbGRCb3VuZHMsXG4gICAgICAgIG5ld0JvdW5kcyA9IGNvbnRleHQubmV3Qm91bmRzLFxuICAgICAgICBhdHRhY2hlcnMgPSBzaGFwZS5hdHRhY2hlcnMsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICAgIGlmIChoaW50cy5hdHRhY2hTdXBwb3J0ID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvckVhY2goYXR0YWNoZXJzLCBmdW5jdGlvbihhdHRhY2hlcikge1xuICAgICAgdmFyIGRlbHRhID0gZ2V0TmV3QXR0YWNoU2hhcGVEZWx0YShhdHRhY2hlciwgb2xkQm91bmRzLCBuZXdCb3VuZHMpO1xuXG4gICAgICBtb2RlbGluZy5tb3ZlU2hhcGUoYXR0YWNoZXIsIGRlbHRhLCBhdHRhY2hlci5wYXJlbnQpO1xuXG4gICAgICBmb3JFYWNoKGF0dGFjaGVyLmxhYmVscywgZnVuY3Rpb24obGFiZWwpIHtcbiAgICAgICAgbW9kZWxpbmcubW92ZVNoYXBlKGxhYmVsLCBkZWx0YSwgbGFiZWwucGFyZW50KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyByZW1vdmUgYXR0YWNobWVudHNcbiAgdGhpcy5wcmVFeGVjdXRlKCdzaGFwZS5kZWxldGUnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIHNoYXBlID0gZXZlbnQuY29udGV4dC5zaGFwZTtcblxuICAgIHNhdmVDbGVhcihzaGFwZS5hdHRhY2hlcnMsIGZ1bmN0aW9uKGF0dGFjaGVyKSB7XG4gICAgICBtb2RlbGluZy5yZW1vdmVTaGFwZShhdHRhY2hlcik7XG4gICAgfSk7XG5cbiAgICBpZiAoc2hhcGUuaG9zdCkge1xuICAgICAgbW9kZWxpbmcudXBkYXRlQXR0YWNobWVudChzaGFwZSwgbnVsbCk7XG4gICAgfVxuICB9KTtcbn1cblxuaW5oZXJpdHMoQXR0YWNoU3VwcG9ydCwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuQXR0YWNoU3VwcG9ydC4kaW5qZWN0ID0gW1xuICAnaW5qZWN0b3InLFxuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJyxcbiAgJ3J1bGVzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuXG4vKipcbiAqIFJldHVybiBhdHRhY2hlcnMgb2YgdGhlIGdpdmVuIHNoYXBlc1xuICpcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBzaGFwZXNcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn1cbiAqL1xuZnVuY3Rpb24gZ2V0QXR0YWNoZXJzKHNoYXBlcykge1xuICByZXR1cm4gZmxhdHRlbihtYXAoc2hhcGVzLCBmdW5jdGlvbihzKSB7XG4gICAgcmV0dXJuIHMuYXR0YWNoZXJzIHx8IFtdO1xuICB9KSk7XG59XG5cbi8qKlxuICogUmV0dXJuIGEgY29tYmluZWQgbGlzdCBvZiBlbGVtZW50cyBhbmRcbiAqIGF0dGFjaGVycy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHNcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZmlsdGVyZWRcbiAqL1xuZnVuY3Rpb24gYWRkQXR0YWNoZWQoZWxlbWVudHMpIHtcbiAgdmFyIGF0dGFjaGVycyA9IGdldEF0dGFjaGVycyhlbGVtZW50cyk7XG5cbiAgcmV0dXJuIHVuaW9uQnkoJ2lkJywgZWxlbWVudHMsIGF0dGFjaGVycyk7XG59XG5cbi8qKlxuICogUmV0dXJuIGEgZmlsdGVyZWQgbGlzdCBvZiBlbGVtZW50cyB0aGF0IGRvIG5vdFxuICogY29udGFpbiBhdHRhY2hlZCBlbGVtZW50cyB3aXRoIGhvc3RzIGJlaW5nIHBhcnRcbiAqIG9mIHRoZSBzZWxlY3Rpb24uXG4gKlxuICogQHBhcmFtICB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBlbGVtZW50c1xuICpcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZmlsdGVyZWRcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQXR0YWNoZWQoZWxlbWVudHMpIHtcblxuICB2YXIgaWRzID0gZ3JvdXBCeShlbGVtZW50cywgJ2lkJyk7XG5cbiAgcmV0dXJuIGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHdoaWxlIChlbGVtZW50KSB7XG5cbiAgICAgIC8vIGhvc3QgaW4gc2VsZWN0aW9uXG4gICAgICBpZiAoZWxlbWVudC5ob3N0ICYmIGlkc1tlbGVtZW50Lmhvc3QuaWRdKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50O1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNBdHRhY2hlcihzaGFwZSkge1xuICByZXR1cm4gISFzaGFwZS5ob3N0O1xufVxuXG5mdW5jdGlvbiBpbmNsdWRlcyhhcnJheSwgaXRlbSkge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtKSAhPT0gLTE7XG59IiwiaW1wb3J0IFJ1bGVzTW9kdWxlIGZyb20gJy4uL3J1bGVzJztcblxuaW1wb3J0IEF0dGFjaFN1cHBvcnQgZnJvbSAnLi9BdHRhY2hTdXBwb3J0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIFJ1bGVzTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdhdHRhY2hTdXBwb3J0JyBdLFxuICBhdHRhY2hTdXBwb3J0OiBbICd0eXBlJywgQXR0YWNoU3VwcG9ydCBdXG59O1xuIiwiaW1wb3J0IHtcbiAgYXNUUkJMLFxuICBnZXRNaWRcbn0gZnJvbSAnLi4vLi4vbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQgeyBERUZBVUxUX0RJU1RBTkNFIH0gZnJvbSAnLi9BdXRvUGxhY2VVdGlsJztcblxudmFyIExPV19QUklPUklUWSA9IDEwMDtcblxuXG4vKipcbiAqIEEgc2VydmljZSB0aGF0IHBsYWNlcyBlbGVtZW50cyBjb25uZWN0ZWQgdG8gZXhpc3Rpbmcgb25lc1xuICogdG8gYW4gYXBwcm9wcmlhdGUgcG9zaXRpb24gaW4gYW4gX2F1dG9tYXRlZF8gZmFzaGlvbi5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQXV0b1BsYWNlKGV2ZW50QnVzLCBtb2RlbGluZykge1xuXG4gIGV2ZW50QnVzLm9uKCdhdXRvUGxhY2UnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZTtcblxuICAgIHJldHVybiBnZXROZXdTaGFwZVBvc2l0aW9uKHNvdXJjZSwgc2hhcGUpO1xuICB9KTtcblxuICAvKipcbiAgICogQXBwZW5kIHNoYXBlIHRvIHNvdXJjZSBhdCBhcHByb3ByaWF0ZSBwb3NpdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNvdXJjZVxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gc2hhcGVcbiAgICpcbiAgICogQHJldHVybiB7ZGpzLm1vZGVsLlNoYXBlfSBhcHBlbmRlZCBzaGFwZVxuICAgKi9cbiAgdGhpcy5hcHBlbmQgPSBmdW5jdGlvbihzb3VyY2UsIHNoYXBlLCBoaW50cykge1xuXG4gICAgZXZlbnRCdXMuZmlyZSgnYXV0b1BsYWNlLnN0YXJ0Jywge1xuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICBzaGFwZTogc2hhcGVcbiAgICB9KTtcblxuICAgIC8vIGFsbG93IG90aGVycyB0byBwcm92aWRlIHRoZSBwb3NpdGlvblxuICAgIHZhciBwb3NpdGlvbiA9IGV2ZW50QnVzLmZpcmUoJ2F1dG9QbGFjZScsIHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgc2hhcGU6IHNoYXBlXG4gICAgfSk7XG5cbiAgICB2YXIgbmV3U2hhcGUgPSBtb2RlbGluZy5hcHBlbmRTaGFwZShzb3VyY2UsIHNoYXBlLCBwb3NpdGlvbiwgc291cmNlLnBhcmVudCwgaGludHMpO1xuXG4gICAgZXZlbnRCdXMuZmlyZSgnYXV0b1BsYWNlLmVuZCcsIHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgc2hhcGU6IG5ld1NoYXBlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3U2hhcGU7XG4gIH07XG5cbn1cblxuQXV0b1BsYWNlLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZydcbl07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG4vKipcbiAqIEZpbmQgdGhlIG5ldyBwb3NpdGlvbiBmb3IgdGhlIHRhcmdldCBlbGVtZW50IHRvXG4gKiBjb25uZWN0IHRvIHNvdXJjZS5cbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuU2hhcGV9IHNvdXJjZVxuICogQHBhcmFtICB7ZGpzLm1vZGVsLlNoYXBlfSBlbGVtZW50XG4gKiBAcGFyYW0gIHtPYmplY3R9IFtoaW50c11cbiAqIEBwYXJhbSAge09iamVjdH0gW2hpbnRzLmRlZmF1bHREaXN0YW5jZV1cbiAqXG4gKiBAcmV0dXJucyB7UG9pbnR9XG4gKi9cbmZ1bmN0aW9uIGdldE5ld1NoYXBlUG9zaXRpb24oc291cmNlLCBlbGVtZW50LCBoaW50cykge1xuICBpZiAoIWhpbnRzKSB7XG4gICAgaGludHMgPSB7fTtcbiAgfVxuXG4gIHZhciBkaXN0YW5jZSA9IGhpbnRzLmRlZmF1bHREaXN0YW5jZSB8fCBERUZBVUxUX0RJU1RBTkNFO1xuXG4gIHZhciBzb3VyY2VNaWQgPSBnZXRNaWQoc291cmNlKSxcbiAgICAgIHNvdXJjZVRyYmwgPSBhc1RSQkwoc291cmNlKTtcblxuICAvLyBzaW1wbHkgcHV0IGVsZW1lbnQgcmlnaHQgbmV4dCB0byBzb3VyY2VcbiAgcmV0dXJuIHtcbiAgICB4OiBzb3VyY2VUcmJsLnJpZ2h0ICsgZGlzdGFuY2UgKyBlbGVtZW50LndpZHRoIC8gMixcbiAgICB5OiBzb3VyY2VNaWQueVxuICB9O1xufSIsIi8qKlxuICogU2VsZWN0IGVsZW1lbnQgYWZ0ZXIgYXV0byBwbGFjZW1lbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7U2VsZWN0aW9ufSBzZWxlY3Rpb25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQXV0b1BsYWNlU2VsZWN0aW9uQmVoYXZpb3IoZXZlbnRCdXMsIHNlbGVjdGlvbikge1xuXG4gIGV2ZW50QnVzLm9uKCdhdXRvUGxhY2UuZW5kJywgNTAwLCBmdW5jdGlvbihlKSB7XG4gICAgc2VsZWN0aW9uLnNlbGVjdChlLnNoYXBlKTtcbiAgfSk7XG5cbn1cblxuQXV0b1BsYWNlU2VsZWN0aW9uQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ3NlbGVjdGlvbidcbl07IiwiaW1wb3J0IHtcbiAgYXNUUkJMLFxuICBnZXRPcmllbnRhdGlvbixcbiAgZ2V0TWlkXG59IGZyb20gJy4uLy4uL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgZmluZCxcbiAgcmVkdWNlXG59IGZyb20gJ21pbi1kYXNoJztcblxuLy8gcGFkZGluZyB0byBkZXRlY3QgZWxlbWVudCBwbGFjZW1lbnRcbnZhciBQTEFDRU1FTlRfREVURUNUSU9OX1BBRCA9IDEwO1xuXG5leHBvcnQgdmFyIERFRkFVTFRfRElTVEFOQ0UgPSA1MDtcblxudmFyIERFRkFVTFRfTUFYX0RJU1RBTkNFID0gMjUwO1xuXG5cbi8qKlxuICogR2V0IGZyZWUgcG9zaXRpb24gc3RhcnRpbmcgZnJvbSBnaXZlbiBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gc291cmNlXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gZWxlbWVudFxuICogQHBhcmFtIHtQb2ludH0gcG9zaXRpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdldE5leHRQb3NpdGlvblxuICpcbiAqIEByZXR1cm4ge1BvaW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEZyZWVQb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQsIHBvc2l0aW9uLCBnZXROZXh0UG9zaXRpb24pIHtcbiAgdmFyIGNvbm5lY3RlZEF0UG9zaXRpb247XG5cbiAgd2hpbGUgKChjb25uZWN0ZWRBdFBvc2l0aW9uID0gZ2V0Q29ubmVjdGVkQXRQb3NpdGlvbihzb3VyY2UsIHBvc2l0aW9uLCBlbGVtZW50KSkpIHtcbiAgICBwb3NpdGlvbiA9IGdldE5leHRQb3NpdGlvbihlbGVtZW50LCBwb3NpdGlvbiwgY29ubmVjdGVkQXRQb3NpdGlvbik7XG4gIH1cblxuICByZXR1cm4gcG9zaXRpb247XG59XG5cbi8qKlxuICogUmV0dXJucyBmdW5jdGlvbiB0aGF0IHJldHVybnMgbmV4dCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gbmV4dFBvc2l0aW9uRGlyZWN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gW25leHRQb3NpdGlvbkRpcmVjdGlvbi54XVxuICogQHBhcmFtIHtPYmplY3R9IFtuZXh0UG9zaXRpb25EaXJlY3Rpb24ueV1cbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUdldE5leHRQb3NpdGlvbihuZXh0UG9zaXRpb25EaXJlY3Rpb24pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIHByZXZpb3VzUG9zaXRpb24sIGNvbm5lY3RlZEF0UG9zaXRpb24pIHtcbiAgICB2YXIgbmV4dFBvc2l0aW9uID0ge1xuICAgICAgeDogcHJldmlvdXNQb3NpdGlvbi54LFxuICAgICAgeTogcHJldmlvdXNQb3NpdGlvbi55XG4gICAgfTtcblxuICAgIFsgJ3gnLCAneScgXS5mb3JFYWNoKGZ1bmN0aW9uKGF4aXMpIHtcblxuICAgICAgdmFyIG5leHRQb3NpdGlvbkRpcmVjdGlvbkZvckF4aXMgPSBuZXh0UG9zaXRpb25EaXJlY3Rpb25bIGF4aXMgXTtcblxuICAgICAgaWYgKCFuZXh0UG9zaXRpb25EaXJlY3Rpb25Gb3JBeGlzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGRpbWVuc2lvbiA9IGF4aXMgPT09ICd4JyA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcblxuICAgICAgdmFyIG1hcmdpbiA9IG5leHRQb3NpdGlvbkRpcmVjdGlvbkZvckF4aXMubWFyZ2luLFxuICAgICAgICAgIG1pbkRpc3RhbmNlID0gbmV4dFBvc2l0aW9uRGlyZWN0aW9uRm9yQXhpcy5taW5EaXN0YW5jZTtcblxuICAgICAgaWYgKG1hcmdpbiA8IDApIHtcbiAgICAgICAgbmV4dFBvc2l0aW9uWyBheGlzIF0gPSBNYXRoLm1pbihcbiAgICAgICAgICBjb25uZWN0ZWRBdFBvc2l0aW9uWyBheGlzIF0gKyBtYXJnaW4gLSBlbGVtZW50WyBkaW1lbnNpb24gXSAvIDIsXG4gICAgICAgICAgcHJldmlvdXNQb3NpdGlvblsgYXhpcyBdIC0gbWluRGlzdGFuY2UgKyBtYXJnaW5cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRQb3NpdGlvblsgYXhpcyBdID0gTWF0aC5tYXgoXG4gICAgICAgICAgY29ubmVjdGVkQXRQb3NpdGlvblsgYXhpcyBdICsgY29ubmVjdGVkQXRQb3NpdGlvblsgZGltZW5zaW9uIF0gKyBtYXJnaW4gKyBlbGVtZW50WyBkaW1lbnNpb24gXSAvIDIsXG4gICAgICAgICAgcHJldmlvdXNQb3NpdGlvblsgYXhpcyBdICsgbWluRGlzdGFuY2UgKyBtYXJnaW5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBuZXh0UG9zaXRpb247XG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIHRhcmdldCBhdCBnaXZlbiBwb3NpdGlvbiwgaWYgZGVmaW5lZC5cbiAqXG4gKiBUaGlzIHRha2VzIGNvbm5lY3RlZCBlbGVtZW50cyBmcm9tIGhvc3QgYW5kIGF0dGFjaGVyc1xuICogaW50byBhY2NvdW50LCB0b28uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25uZWN0ZWRBdFBvc2l0aW9uKHNvdXJjZSwgcG9zaXRpb24sIGVsZW1lbnQpIHtcblxuICB2YXIgYm91bmRzID0ge1xuICAgIHg6IHBvc2l0aW9uLnggLSAoZWxlbWVudC53aWR0aCAvIDIpLFxuICAgIHk6IHBvc2l0aW9uLnkgLSAoZWxlbWVudC5oZWlnaHQgLyAyKSxcbiAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0XG4gIH07XG5cbiAgdmFyIGNsb3N1cmUgPSBnZXRBdXRvUGxhY2VDbG9zdXJlKHNvdXJjZSwgZWxlbWVudCk7XG5cbiAgcmV0dXJuIGZpbmQoY2xvc3VyZSwgZnVuY3Rpb24odGFyZ2V0KSB7XG5cbiAgICBpZiAodGFyZ2V0ID09PSBlbGVtZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIG9yaWVudGF0aW9uID0gZ2V0T3JpZW50YXRpb24odGFyZ2V0LCBib3VuZHMsIFBMQUNFTUVOVF9ERVRFQ1RJT05fUEFEKTtcblxuICAgIHJldHVybiBvcmllbnRhdGlvbiA9PT0gJ2ludGVyc2VjdCc7XG4gIH0pO1xufVxuXG4vKipcbiogQ29tcHV0ZSBvcHRpbWFsIGRpc3RhbmNlIGJldHdlZW4gc291cmNlIGFuZCB0YXJnZXQgYmFzZWQgb24gZXhpc3RpbmcgY29ubmVjdGlvbnMgdG8gYW5kIGZyb20gc291cmNlLlxuKiBBc3N1bWVzIGxlZnQtdG8tcmlnaHQgYW5kIHRvcC10by1kb3duIG1vZGVsaW5nLlxuKlxuKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gc291cmNlXG4qIEBwYXJhbSB7T2JqZWN0fSBbaGludHNdXG4qIEBwYXJhbSB7bnVtYmVyfSBbaGludHMuZGVmYXVsdERpc3RhbmNlXVxuKiBAcGFyYW0ge3N0cmluZ30gW2hpbnRzLmRpcmVjdGlvbl1cbiogQHBhcmFtIHtGdW5jdGlvbn0gW2hpbnRzLmZpbHRlcl1cbiogQHBhcmFtIHtGdW5jdGlvbn0gW2hpbnRzLmdldFdlaWdodF1cbiogQHBhcmFtIHtudW1iZXJ9IFtoaW50cy5tYXhEaXN0YW5jZV1cbiogQHBhcmFtIHtzdHJpbmd9IFtoaW50cy5yZWZlcmVuY2VdXG4qXG4qIEByZXR1cm4ge251bWJlcn1cbiovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29ubmVjdGVkRGlzdGFuY2Uoc291cmNlLCBoaW50cykge1xuICBpZiAoIWhpbnRzKSB7XG4gICAgaGludHMgPSB7fTtcbiAgfVxuXG4gIC8vIHRhcmdldHMgPiBzb3VyY2VzIGJ5IGRlZmF1bHRcbiAgZnVuY3Rpb24gZ2V0RGVmYXVsdFdlaWdodChjb25uZWN0aW9uKSB7XG4gICAgcmV0dXJuIGNvbm5lY3Rpb24uc291cmNlID09PSBzb3VyY2UgPyAxIDogLTE7XG4gIH1cblxuICB2YXIgZGVmYXVsdERpc3RhbmNlID0gaGludHMuZGVmYXVsdERpc3RhbmNlIHx8IERFRkFVTFRfRElTVEFOQ0UsXG4gICAgICBkaXJlY3Rpb24gPSBoaW50cy5kaXJlY3Rpb24gfHwgJ2UnLFxuICAgICAgZmlsdGVyID0gaGludHMuZmlsdGVyLFxuICAgICAgZ2V0V2VpZ2h0ID0gaGludHMuZ2V0V2VpZ2h0IHx8IGdldERlZmF1bHRXZWlnaHQsXG4gICAgICBtYXhEaXN0YW5jZSA9IGhpbnRzLm1heERpc3RhbmNlIHx8IERFRkFVTFRfTUFYX0RJU1RBTkNFLFxuICAgICAgcmVmZXJlbmNlID0gaGludHMucmVmZXJlbmNlIHx8ICdzdGFydCc7XG5cbiAgaWYgKCFmaWx0ZXIpIHtcbiAgICBmaWx0ZXIgPSBub25lRmlsdGVyO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RGlzdGFuY2UoYSwgYikge1xuICAgIGlmIChkaXJlY3Rpb24gPT09ICduJykge1xuICAgICAgaWYgKHJlZmVyZW5jZSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICByZXR1cm4gYXNUUkJMKGEpLnRvcCAtIGFzVFJCTChiKS5ib3R0b207XG4gICAgICB9IGVsc2UgaWYgKHJlZmVyZW5jZSA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgcmV0dXJuIGFzVFJCTChhKS50b3AgLSBnZXRNaWQoYikueTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhc1RSQkwoYSkudG9wIC0gYXNUUkJMKGIpLnRvcDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3cnKSB7XG4gICAgICBpZiAocmVmZXJlbmNlID09PSAnc3RhcnQnKSB7XG4gICAgICAgIHJldHVybiBhc1RSQkwoYSkubGVmdCAtIGFzVFJCTChiKS5yaWdodDtcbiAgICAgIH0gZWxzZSBpZiAocmVmZXJlbmNlID09PSAnY2VudGVyJykge1xuICAgICAgICByZXR1cm4gYXNUUkJMKGEpLmxlZnQgLSBnZXRNaWQoYikueDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhc1RSQkwoYSkubGVmdCAtIGFzVFJCTChiKS5sZWZ0O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAncycpIHtcbiAgICAgIGlmIChyZWZlcmVuY2UgPT09ICdzdGFydCcpIHtcbiAgICAgICAgcmV0dXJuIGFzVFJCTChiKS50b3AgLSBhc1RSQkwoYSkuYm90dG9tO1xuICAgICAgfSBlbHNlIGlmIChyZWZlcmVuY2UgPT09ICdjZW50ZXInKSB7XG4gICAgICAgIHJldHVybiBnZXRNaWQoYikueSAtIGFzVFJCTChhKS5ib3R0b207XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXNUUkJMKGIpLmJvdHRvbSAtIGFzVFJCTChhKS5ib3R0b207XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChyZWZlcmVuY2UgPT09ICdzdGFydCcpIHtcbiAgICAgICAgcmV0dXJuIGFzVFJCTChiKS5sZWZ0IC0gYXNUUkJMKGEpLnJpZ2h0O1xuICAgICAgfSBlbHNlIGlmIChyZWZlcmVuY2UgPT09ICdjZW50ZXInKSB7XG4gICAgICAgIHJldHVybiBnZXRNaWQoYikueCAtIGFzVFJCTChhKS5yaWdodDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhc1RSQkwoYikucmlnaHQgLSBhc1RSQkwoYSkucmlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHNvdXJjZXNEaXN0YW5jZXMgPSBzb3VyY2UuaW5jb21pbmdcbiAgICAuZmlsdGVyKGZpbHRlcilcbiAgICAubWFwKGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgIHZhciB3ZWlnaHQgPSBnZXRXZWlnaHQoY29ubmVjdGlvbik7XG5cbiAgICAgIHZhciBkaXN0YW5jZSA9IHdlaWdodCA8IDBcbiAgICAgICAgPyBnZXREaXN0YW5jZShjb25uZWN0aW9uLnNvdXJjZSwgc291cmNlKVxuICAgICAgICA6IGdldERpc3RhbmNlKHNvdXJjZSwgY29ubmVjdGlvbi5zb3VyY2UpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogY29ubmVjdGlvbi5zb3VyY2UuaWQsXG4gICAgICAgIGRpc3RhbmNlOiBkaXN0YW5jZSxcbiAgICAgICAgd2VpZ2h0OiB3ZWlnaHRcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgdmFyIHRhcmdldHNEaXN0YW5jZXMgPSBzb3VyY2Uub3V0Z29pbmdcbiAgICAuZmlsdGVyKGZpbHRlcilcbiAgICAubWFwKGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgIHZhciB3ZWlnaHQgPSBnZXRXZWlnaHQoY29ubmVjdGlvbik7XG5cbiAgICAgIHZhciBkaXN0YW5jZSA9IHdlaWdodCA+IDBcbiAgICAgICAgPyBnZXREaXN0YW5jZShzb3VyY2UsIGNvbm5lY3Rpb24udGFyZ2V0KVxuICAgICAgICA6IGdldERpc3RhbmNlKGNvbm5lY3Rpb24udGFyZ2V0LCBzb3VyY2UpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogY29ubmVjdGlvbi50YXJnZXQuaWQsXG4gICAgICAgIGRpc3RhbmNlOiBkaXN0YW5jZSxcbiAgICAgICAgd2VpZ2h0OiB3ZWlnaHRcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgdmFyIGRpc3RhbmNlcyA9IHNvdXJjZXNEaXN0YW5jZXMuY29uY2F0KHRhcmdldHNEaXN0YW5jZXMpLnJlZHVjZShmdW5jdGlvbihhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlKSB7XG4gICAgYWNjdW11bGF0b3JbIGN1cnJlbnRWYWx1ZS5pZCArICdfX3dlaWdodF8nICsgY3VycmVudFZhbHVlLndlaWdodCBdID0gY3VycmVudFZhbHVlO1xuXG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9LCB7fSk7XG5cbiAgdmFyIGRpc3RhbmNlc0dyb3VwZWQgPSByZWR1Y2UoZGlzdGFuY2VzLCBmdW5jdGlvbihhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlKSB7XG4gICAgdmFyIGRpc3RhbmNlID0gY3VycmVudFZhbHVlLmRpc3RhbmNlLFxuICAgICAgICB3ZWlnaHQgPSBjdXJyZW50VmFsdWUud2VpZ2h0O1xuXG4gICAgaWYgKGRpc3RhbmNlIDwgMCB8fCBkaXN0YW5jZSA+IG1heERpc3RhbmNlKSB7XG4gICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgfVxuXG4gICAgaWYgKCFhY2N1bXVsYXRvclsgU3RyaW5nKGRpc3RhbmNlKSBdKSB7XG4gICAgICBhY2N1bXVsYXRvclsgU3RyaW5nKGRpc3RhbmNlKSBdID0gMDtcbiAgICB9XG5cbiAgICBhY2N1bXVsYXRvclsgU3RyaW5nKGRpc3RhbmNlKSBdICs9IDEgKiB3ZWlnaHQ7XG5cbiAgICBpZiAoIWFjY3VtdWxhdG9yLmRpc3RhbmNlIHx8IGFjY3VtdWxhdG9yWyBhY2N1bXVsYXRvci5kaXN0YW5jZSBdIDwgYWNjdW11bGF0b3JbIFN0cmluZyhkaXN0YW5jZSkgXSkge1xuICAgICAgYWNjdW11bGF0b3IuZGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH0sIHt9KTtcblxuICByZXR1cm4gZGlzdGFuY2VzR3JvdXBlZC5kaXN0YW5jZSB8fCBkZWZhdWx0RGlzdGFuY2U7XG59XG5cbi8qKlxuICogUmV0dXJucyBhbGwgY29ubmVjdGVkIGVsZW1lbnRzIGFyb3VuZCB0aGUgZ2l2ZW4gc291cmNlLlxuICpcbiAqIFRoaXMgaW5jbHVkZXM6XG4gKlxuICogICAtIGNvbm5lY3RlZCBlbGVtZW50c1xuICogICAtIGhvc3QgY29ubmVjdGVkIGVsZW1lbnRzXG4gKiAgIC0gYXR0YWNoZXJzIGNvbm5lY3RlZCBlbGVtZW50c1xuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5TaGFwZX0gc291cmNlXG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlPn1cbiAqL1xuZnVuY3Rpb24gZ2V0QXV0b1BsYWNlQ2xvc3VyZShzb3VyY2UpIHtcblxuICB2YXIgYWxsQ29ubmVjdGVkID0gZ2V0Q29ubmVjdGVkKHNvdXJjZSk7XG5cbiAgaWYgKHNvdXJjZS5ob3N0KSB7XG4gICAgYWxsQ29ubmVjdGVkID0gYWxsQ29ubmVjdGVkLmNvbmNhdChnZXRDb25uZWN0ZWQoc291cmNlLmhvc3QpKTtcbiAgfVxuXG4gIGlmIChzb3VyY2UuYXR0YWNoZXJzKSB7XG4gICAgYWxsQ29ubmVjdGVkID0gYWxsQ29ubmVjdGVkLmNvbmNhdChzb3VyY2UuYXR0YWNoZXJzLnJlZHVjZShmdW5jdGlvbihzaGFwZXMsIGF0dGFjaGVyKSB7XG4gICAgICByZXR1cm4gc2hhcGVzLmNvbmNhdChnZXRDb25uZWN0ZWQoYXR0YWNoZXIpKTtcbiAgICB9LCBbXSkpO1xuICB9XG5cbiAgcmV0dXJuIGFsbENvbm5lY3RlZDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29ubmVjdGVkKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFRhcmdldHMoZWxlbWVudCkuY29uY2F0KGdldFNvdXJjZXMoZWxlbWVudCkpO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VzKHNoYXBlKSB7XG4gIHJldHVybiBzaGFwZS5pbmNvbWluZy5tYXAoZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgIHJldHVybiBjb25uZWN0aW9uLnNvdXJjZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldHMoc2hhcGUpIHtcbiAgcmV0dXJuIHNoYXBlLm91dGdvaW5nLm1hcChmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgcmV0dXJuIGNvbm5lY3Rpb24udGFyZ2V0O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbm9uZUZpbHRlcigpIHtcbiAgcmV0dXJuIHRydWU7XG59XG4iLCJpbXBvcnQgQXV0b1BsYWNlIGZyb20gJy4vQXV0b1BsYWNlJztcbmltcG9ydCBBdXRvUGxhY2VTZWxlY3Rpb25CZWhhdmlvciBmcm9tICcuL0F1dG9QbGFjZVNlbGVjdGlvbkJlaGF2aW9yJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAnYXV0b1BsYWNlU2VsZWN0aW9uQmVoYXZpb3InIF0sXG4gIGF1dG9QbGFjZTogWyAndHlwZScsIEF1dG9QbGFjZSBdLFxuICBhdXRvUGxhY2VTZWxlY3Rpb25CZWhhdmlvcjogWyAndHlwZScsIEF1dG9QbGFjZVNlbGVjdGlvbkJlaGF2aW9yIF1cbn07IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHsgZ2V0QkJveCBhcyBnZXRCb3VuZGluZ0JveCB9IGZyb20gJy4uLy4uL3V0aWwvRWxlbWVudHMnO1xuXG5pbXBvcnQge1xuICBhc1RSQkwsXG4gIGFzQm91bmRzXG59IGZyb20gJy4uLy4uL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmbGF0dGVuLFxuICBmaW5kLFxuICBmb3JFYWNoLFxuICBncm91cEJ5LFxuICBpc0FycmF5LFxuICBtYXRjaFBhdHRlcm4sXG4gIHBpY2ssXG4gIHZhbHVlc1xufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnLi4vLi4vY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5cbi8qKlxuICogQW4gYXV0byByZXNpemUgY29tcG9uZW50IHRoYXQgdGFrZXMgY2FyZSBvZiBleHBhbmRpbmcgYSBwYXJlbnQgZWxlbWVudFxuICogaWYgY2hpbGQgZWxlbWVudHMgYXJlIGNyZWF0ZWQgb3IgbW92ZWQgY2xvc2UgdGhlIHBhcmVudHMgZWRnZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtFbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7UnVsZXN9IHJ1bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEF1dG9SZXNpemUoZXZlbnRCdXMsIGVsZW1lbnRSZWdpc3RyeSwgbW9kZWxpbmcsIHJ1bGVzKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbiAgdGhpcy5fcnVsZXMgPSBydWxlcztcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoWyAnc2hhcGUuY3JlYXRlJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIHBhcmVudCA9IGNvbnRleHQucGFyZW50IHx8IGNvbnRleHQubmV3UGFyZW50O1xuXG4gICAgaWYgKGhpbnRzLmF1dG9SZXNpemUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZi5fZXhwYW5kKFsgc2hhcGUgXSwgcGFyZW50KTtcbiAgfSk7XG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoWyAnZWxlbWVudHMubW92ZScgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGVsZW1lbnRzID0gZmxhdHRlbih2YWx1ZXMoY29udGV4dC5jbG9zdXJlLnRvcExldmVsKSksXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cztcblxuICAgIHZhciBhdXRvUmVzaXplID0gaGludHMgPyBoaW50cy5hdXRvUmVzaXplIDogdHJ1ZTtcblxuICAgIGlmIChhdXRvUmVzaXplID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBleHBhbmRpbmdzID0gZ3JvdXBCeShlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQucGFyZW50LmlkO1xuICAgIH0pO1xuXG4gICAgZm9yRWFjaChleHBhbmRpbmdzLCBmdW5jdGlvbihlbGVtZW50cywgcGFyZW50SWQpIHtcblxuICAgICAgLy8gb3B0aW9uYWxseSBmaWx0ZXIgZWxlbWVudHMgdG8gYmUgY29uc2lkZXJlZCB3aGVuIHJlc2l6aW5nXG4gICAgICBpZiAoaXNBcnJheShhdXRvUmVzaXplKSkge1xuICAgICAgICBlbGVtZW50cyA9IGVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGZpbmQoYXV0b1Jlc2l6ZSwgbWF0Y2hQYXR0ZXJuKHsgaWQ6IGVsZW1lbnQuaWQgfSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgc2VsZi5fZXhwYW5kKGVsZW1lbnRzLCBwYXJlbnRJZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFsgJ3NoYXBlLnRvZ2dsZUNvbGxhcHNlJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzLFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAoaGludHMgJiYgaGludHMuYXV0b1Jlc2l6ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2hhcGUuY29sbGFwc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZi5fZXhwYW5kKHNoYXBlLmNoaWxkcmVuIHx8IFtdLCBzaGFwZSk7XG4gIH0pO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFsgJ3NoYXBlLnJlc2l6ZScgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBwYXJlbnQgPSBzaGFwZS5wYXJlbnQ7XG5cbiAgICBpZiAoaGludHMgJiYgaGludHMuYXV0b1Jlc2l6ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBzZWxmLl9leHBhbmQoWyBzaGFwZSBdLCBwYXJlbnQpO1xuICAgIH1cbiAgfSk7XG5cbn1cblxuQXV0b1Jlc2l6ZS4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3J1bGVzJ1xuXTtcblxuaW5oZXJpdHMoQXV0b1Jlc2l6ZSwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgbmV3IGJvdW5kcyBvZiB0aGUgdGFyZ2V0IHNoYXBlLCBnaXZlblxuICogYSBudW1iZXIgb2YgZWxlbWVudHMgaGF2ZSBiZWVuIG1vdmVkIG9yIGFkZGVkIGludG8gdGhlIHBhcmVudC5cbiAqXG4gKiBUaGlzIG1ldGhvZCBjb25zaWRlcnMgdGhlIGN1cnJlbnQgc2l6ZSwgdGhlIGFkZGVkIGVsZW1lbnRzIGFzIHdlbGwgYXNcbiAqIHRoZSBwcm92aWRlZCBwYWRkaW5nIGZvciB0aGUgbmV3IGJvdW5kcy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5TaGFwZT59IGVsZW1lbnRzXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gdGFyZ2V0XG4gKi9cbkF1dG9SZXNpemUucHJvdG90eXBlLl9nZXRPcHRpbWFsQm91bmRzID0gZnVuY3Rpb24oZWxlbWVudHMsIHRhcmdldCkge1xuXG4gIHZhciBvZmZzZXQgPSB0aGlzLmdldE9mZnNldCh0YXJnZXQpLFxuICAgICAgcGFkZGluZyA9IHRoaXMuZ2V0UGFkZGluZyh0YXJnZXQpO1xuXG4gIHZhciBlbGVtZW50c1RyYmwgPSBhc1RSQkwoZ2V0Qm91bmRpbmdCb3goZWxlbWVudHMpKSxcbiAgICAgIHRhcmdldFRyYmwgPSBhc1RSQkwodGFyZ2V0KTtcblxuICB2YXIgbmV3VHJibCA9IHt9O1xuXG4gIGlmIChlbGVtZW50c1RyYmwudG9wIC0gdGFyZ2V0VHJibC50b3AgPCBwYWRkaW5nLnRvcCkge1xuICAgIG5ld1RyYmwudG9wID0gZWxlbWVudHNUcmJsLnRvcCAtIG9mZnNldC50b3A7XG4gIH1cblxuICBpZiAoZWxlbWVudHNUcmJsLmxlZnQgLSB0YXJnZXRUcmJsLmxlZnQgPCBwYWRkaW5nLmxlZnQpIHtcbiAgICBuZXdUcmJsLmxlZnQgPSBlbGVtZW50c1RyYmwubGVmdCAtIG9mZnNldC5sZWZ0O1xuICB9XG5cbiAgaWYgKHRhcmdldFRyYmwucmlnaHQgLSBlbGVtZW50c1RyYmwucmlnaHQgPCBwYWRkaW5nLnJpZ2h0KSB7XG4gICAgbmV3VHJibC5yaWdodCA9IGVsZW1lbnRzVHJibC5yaWdodCArIG9mZnNldC5yaWdodDtcbiAgfVxuXG4gIGlmICh0YXJnZXRUcmJsLmJvdHRvbSAtIGVsZW1lbnRzVHJibC5ib3R0b20gPCBwYWRkaW5nLmJvdHRvbSkge1xuICAgIG5ld1RyYmwuYm90dG9tID0gZWxlbWVudHNUcmJsLmJvdHRvbSArIG9mZnNldC5ib3R0b207XG4gIH1cblxuICByZXR1cm4gYXNCb3VuZHMoYXNzaWduKHt9LCB0YXJnZXRUcmJsLCBuZXdUcmJsKSk7XG59O1xuXG5cbi8qKlxuICogRXhwYW5kIHRoZSB0YXJnZXQgc2hhcGUgcmVzcGVjdGluZyBydWxlcywgb2Zmc2V0IGFuZCBwYWRkaW5nXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fSBlbGVtZW50c1xuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV8c3RyaW5nfSB0YXJnZXR8dGFyZ2V0SWRcbiAqL1xuQXV0b1Jlc2l6ZS5wcm90b3R5cGUuX2V4cGFuZCA9IGZ1bmN0aW9uKGVsZW1lbnRzLCB0YXJnZXQpIHtcblxuICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ3N0cmluZycpIHtcbiAgICB0YXJnZXQgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnkuZ2V0KHRhcmdldCk7XG4gIH1cblxuICB2YXIgYWxsb3dlZCA9IHRoaXMuX3J1bGVzLmFsbG93ZWQoJ2VsZW1lbnQuYXV0b1Jlc2l6ZScsIHtcbiAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgdGFyZ2V0OiB0YXJnZXRcbiAgfSk7XG5cbiAgaWYgKCFhbGxvd2VkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gY2FsY3VsYXRlIHRoZSBuZXcgYm91bmRzXG4gIHZhciBuZXdCb3VuZHMgPSB0aGlzLl9nZXRPcHRpbWFsQm91bmRzKGVsZW1lbnRzLCB0YXJnZXQpO1xuXG4gIGlmICghYm91bmRzQ2hhbmdlZChuZXdCb3VuZHMsIHRhcmdldCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcmVzaXplRGlyZWN0aW9ucyA9IGdldFJlc2l6ZURpcmVjdGlvbnMocGljayh0YXJnZXQsIFsgJ3gnLCAneScsICd3aWR0aCcsICdoZWlnaHQnIF0pLCBuZXdCb3VuZHMpO1xuXG4gIC8vIHJlc2l6ZSB0aGUgcGFyZW50IHNoYXBlXG4gIHRoaXMucmVzaXplKHRhcmdldCwgbmV3Qm91bmRzLCB7XG4gICAgYXV0b1Jlc2l6ZTogcmVzaXplRGlyZWN0aW9uc1xuICB9KTtcblxuICB2YXIgcGFyZW50ID0gdGFyZ2V0LnBhcmVudDtcblxuICAvLyByZWN1cnNpdmVseSBleHBhbmQgcGFyZW50IGVsZW1lbnRzXG4gIGlmIChwYXJlbnQpIHtcbiAgICB0aGlzLl9leHBhbmQoWyB0YXJnZXQgXSwgcGFyZW50KTtcbiAgfVxufTtcblxuXG4vKipcbiAqIEdldCB0aGUgYW1vdW50IHRvIGV4cGFuZCB0aGUgZ2l2ZW4gc2hhcGUgaW4gZWFjaCBkaXJlY3Rpb24uXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gKlxuICogQHJldHVybiB7VFJCTH1cbiAqL1xuQXV0b1Jlc2l6ZS5wcm90b3R5cGUuZ2V0T2Zmc2V0ID0gZnVuY3Rpb24oc2hhcGUpIHtcbiAgcmV0dXJuIHsgdG9wOiA2MCwgYm90dG9tOiA2MCwgbGVmdDogMTAwLCByaWdodDogMTAwIH07XG59O1xuXG5cbi8qKlxuICogR2V0IHRoZSBhY3RpdmF0aW9uIHRocmVzaG9sZCBmb3IgZWFjaCBzaWRlIGZvciB3aGljaFxuICogcmVzaXplIHRyaWdnZXJzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBzaGFwZVxuICpcbiAqIEByZXR1cm4ge1RSQkx9XG4gKi9cbkF1dG9SZXNpemUucHJvdG90eXBlLmdldFBhZGRpbmcgPSBmdW5jdGlvbihzaGFwZSkge1xuICByZXR1cm4geyB0b3A6IDIsIGJvdHRvbTogMiwgbGVmdDogMTUsIHJpZ2h0OiAxNSB9O1xufTtcblxuXG4vKipcbiAqIFBlcmZvcm0gdGhlIGFjdHVhbCByZXNpemUgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBzaGFwZVxuICogQHBhcmFtIHtCb3VuZHN9IG5ld0JvdW5kc1xuICogQHBhcmFtIHtPYmplY3R9IFtoaW50c11cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaGludHMuYXV0b1Jlc2l6ZV1cbiAqL1xuQXV0b1Jlc2l6ZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24oc2hhcGUsIG5ld0JvdW5kcywgaGludHMpIHtcbiAgdGhpcy5fbW9kZWxpbmcucmVzaXplU2hhcGUoc2hhcGUsIG5ld0JvdW5kcywgbnVsbCwgaGludHMpO1xufTtcblxuXG5mdW5jdGlvbiBib3VuZHNDaGFuZ2VkKG5ld0JvdW5kcywgb2xkQm91bmRzKSB7XG4gIHJldHVybiAoXG4gICAgbmV3Qm91bmRzLnggIT09IG9sZEJvdW5kcy54IHx8XG4gICAgbmV3Qm91bmRzLnkgIT09IG9sZEJvdW5kcy55IHx8XG4gICAgbmV3Qm91bmRzLndpZHRoICE9PSBvbGRCb3VuZHMud2lkdGggfHxcbiAgICBuZXdCb3VuZHMuaGVpZ2h0ICE9PSBvbGRCb3VuZHMuaGVpZ2h0XG4gICk7XG59XG5cbi8qKlxuICogR2V0IGRpcmVjdGlvbnMgb2YgcmVzaXplIGFzIHtufHd8c3xlfSBlLmcuIFwibndcIi5cbiAqXG4gKiBAcGFyYW0ge0JvdW5kc30gb2xkQm91bmRzXG4gKiBAcGFyYW0ge0JvdW5kc30gbmV3Qm91bmRzXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gUmVzaXplIGRpcmVjdGlvbnMgYXMge258d3xzfGV9LlxuICovXG5mdW5jdGlvbiBnZXRSZXNpemVEaXJlY3Rpb25zKG9sZEJvdW5kcywgbmV3Qm91bmRzKSB7XG4gIHZhciBkaXJlY3Rpb25zID0gJyc7XG5cbiAgb2xkQm91bmRzID0gYXNUUkJMKG9sZEJvdW5kcyk7XG4gIG5ld0JvdW5kcyA9IGFzVFJCTChuZXdCb3VuZHMpO1xuXG4gIGlmIChvbGRCb3VuZHMudG9wID4gbmV3Qm91bmRzLnRvcCkge1xuICAgIGRpcmVjdGlvbnMgPSBkaXJlY3Rpb25zLmNvbmNhdCgnbicpO1xuICB9XG5cbiAgaWYgKG9sZEJvdW5kcy5yaWdodCA8IG5ld0JvdW5kcy5yaWdodCkge1xuICAgIGRpcmVjdGlvbnMgPSBkaXJlY3Rpb25zLmNvbmNhdCgndycpO1xuICB9XG5cbiAgaWYgKG9sZEJvdW5kcy5ib3R0b20gPCBuZXdCb3VuZHMuYm90dG9tKSB7XG4gICAgZGlyZWN0aW9ucyA9IGRpcmVjdGlvbnMuY29uY2F0KCdzJyk7XG4gIH1cblxuICBpZiAob2xkQm91bmRzLmxlZnQgPiBuZXdCb3VuZHMubGVmdCkge1xuICAgIGRpcmVjdGlvbnMgPSBkaXJlY3Rpb25zLmNvbmNhdCgnZScpO1xuICB9XG5cbiAgcmV0dXJuIGRpcmVjdGlvbnM7XG59IiwiaW1wb3J0IFJ1bGVQcm92aWRlciBmcm9tICcuLi9ydWxlcy9SdWxlUHJvdmlkZXInO1xuXG5pbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG4vKipcbiAqIFRoaXMgaXMgYSBiYXNlIHJ1bGUgcHJvdmlkZXIgZm9yIHRoZSBlbGVtZW50LmF1dG9SZXNpemUgcnVsZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQXV0b1Jlc2l6ZVByb3ZpZGVyKGV2ZW50QnVzKSB7XG5cbiAgUnVsZVByb3ZpZGVyLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLmFkZFJ1bGUoJ2VsZW1lbnQuYXV0b1Jlc2l6ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICByZXR1cm4gc2VsZi5jYW5SZXNpemUoY29udGV4dC5lbGVtZW50cywgY29udGV4dC50YXJnZXQpO1xuICB9KTtcbn1cblxuQXV0b1Jlc2l6ZVByb3ZpZGVyLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTtcblxuaW5oZXJpdHMoQXV0b1Jlc2l6ZVByb3ZpZGVyLCBSdWxlUHJvdmlkZXIpO1xuXG4vKipcbiAqIE5lZWRzIHRvIGJlIGltcGxlbWVudGVkIGJ5IHN1YiBjbGFzc2VzIHRvIGFsbG93IGFjdHVhbCBhdXRvIHJlc2l6ZVxuICpcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5TaGFwZT59IGVsZW1lbnRzXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuU2hhcGV9IHRhcmdldFxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbkF1dG9SZXNpemVQcm92aWRlci5wcm90b3R5cGUuY2FuUmVzaXplID0gZnVuY3Rpb24oZWxlbWVudHMsIHRhcmdldCkge1xuICByZXR1cm4gZmFsc2U7XG59OyIsImltcG9ydCB7IGFzc2lnbiB9IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgdG9Qb2ludFxufSBmcm9tICcuLi8uLi91dGlsL0V2ZW50JztcblxuXG4vKipcbiAqIEluaXRpYXRlcyBjYW52YXMgc2Nyb2xsaW5nIGlmIGN1cnJlbnQgY3Vyc29yIHBvaW50IGlzIGNsb3NlIHRvIGEgYm9yZGVyLlxuICogQ2FuY2VsbGVkIHdoZW4gY3VycmVudCBwb2ludCBtb3ZlcyBiYWNrIGluc2lkZSB0aGUgc2Nyb2xsaW5nIGJvcmRlcnNcbiAqIG9yIGNhbmNlbGxlZCBtYW51YWxseS5cbiAqXG4gKiBEZWZhdWx0IG9wdGlvbnMgOlxuICogICBzY3JvbGxUaHJlc2hvbGRJbjogWyAyMCwgMjAsIDIwLCAyMCBdLFxuICogICBzY3JvbGxUaHJlc2hvbGRPdXQ6IFsgMCwgMCwgMCwgMCBdLFxuICogICBzY3JvbGxSZXBlYXRUaW1lb3V0OiAxNSxcbiAqICAgc2Nyb2xsU3RlcDogMTBcbiAqXG4gKiBUaHJlc2hvbGQgb3JkZXI6XG4gKiAgIFsgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tIF1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQXV0b1Njcm9sbChjb25maWcsIGV2ZW50QnVzLCBjYW52YXMpIHtcblxuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG5cbiAgdGhpcy5fb3B0cyA9IGFzc2lnbih7XG4gICAgc2Nyb2xsVGhyZXNob2xkSW46IFsgMjAsIDIwLCAyMCwgMjAgXSxcbiAgICBzY3JvbGxUaHJlc2hvbGRPdXQ6IFsgMCwgMCwgMCwgMCBdLFxuICAgIHNjcm9sbFJlcGVhdFRpbWVvdXQ6IDE1LFxuICAgIHNjcm9sbFN0ZXA6IDEwXG4gIH0sIGNvbmZpZyk7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGV2ZW50QnVzLm9uKCdkcmFnLm1vdmUnLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIHBvaW50ID0gc2VsZi5fdG9Cb3JkZXJQb2ludChlKTtcblxuICAgIHNlbGYuc3RhcnRTY3JvbGwocG9pbnQpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbihbICdkcmFnLmNsZWFudXAnIF0sIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuc3RvcFNjcm9sbCgpO1xuICB9KTtcbn1cblxuQXV0b1Njcm9sbC4kaW5qZWN0ID0gW1xuICAnY29uZmlnLmF1dG9TY3JvbGwnLFxuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJ1xuXTtcblxuXG4vKipcbiAqIFN0YXJ0cyBzY3JvbGxpbmcgbG9vcC5cbiAqIFBvaW50IGlzIGdpdmVuIGluIGdsb2JhbCBzY2FsZSBpbiBjYW52YXMgY29udGFpbmVyIGJveCBwbGFuZS5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IHBvaW50IHsgeDogWCwgeTogWSB9XG4gKi9cbkF1dG9TY3JvbGwucHJvdG90eXBlLnN0YXJ0U2Nyb2xsID0gZnVuY3Rpb24ocG9pbnQpIHtcblxuICB2YXIgY2FudmFzID0gdGhpcy5fY2FudmFzO1xuICB2YXIgb3B0cyA9IHRoaXMuX29wdHM7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICB2YXIgY2xpZW50UmVjdCA9IGNhbnZhcy5nZXRDb250YWluZXIoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICB2YXIgZGlmZiA9IFtcbiAgICBwb2ludC54LFxuICAgIHBvaW50LnksXG4gICAgY2xpZW50UmVjdC53aWR0aCAtIHBvaW50LngsXG4gICAgY2xpZW50UmVjdC5oZWlnaHQgLSBwb2ludC55XG4gIF07XG5cbiAgdGhpcy5zdG9wU2Nyb2xsKCk7XG5cbiAgdmFyIGR4ID0gMCxcbiAgICAgIGR5ID0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgIGlmIChiZXR3ZWVuKGRpZmZbaV0sIG9wdHMuc2Nyb2xsVGhyZXNob2xkT3V0W2ldLCBvcHRzLnNjcm9sbFRocmVzaG9sZEluW2ldKSkge1xuICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgZHggPSBvcHRzLnNjcm9sbFN0ZXA7XG4gICAgICB9IGVsc2UgaWYgKGkgPT0gMSkge1xuICAgICAgICBkeSA9IG9wdHMuc2Nyb2xsU3RlcDtcbiAgICAgIH0gZWxzZSBpZiAoaSA9PSAyKSB7XG4gICAgICAgIGR4ID0gLW9wdHMuc2Nyb2xsU3RlcDtcbiAgICAgIH0gZWxzZSBpZiAoaSA9PSAzKSB7XG4gICAgICAgIGR5ID0gLW9wdHMuc2Nyb2xsU3RlcDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZHggIT09IDAgfHwgZHkgIT09IDApIHtcbiAgICBjYW52YXMuc2Nyb2xsKHsgZHg6IGR4LCBkeTogZHkgfSk7XG5cbiAgICB0aGlzLl9zY3JvbGxpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5zdGFydFNjcm9sbChwb2ludCk7XG4gICAgfSwgb3B0cy5zY3JvbGxSZXBlYXRUaW1lb3V0KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gYmV0d2Vlbih2YWwsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0IDwgdmFsICYmIHZhbCA8IGVuZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5cbi8qKlxuICogU3RvcHMgc2Nyb2xsaW5nIGxvb3AuXG4gKi9cbkF1dG9TY3JvbGwucHJvdG90eXBlLnN0b3BTY3JvbGwgPSBmdW5jdGlvbigpIHtcbiAgY2xlYXJUaW1lb3V0KHRoaXMuX3Njcm9sbGluZyk7XG59O1xuXG5cbi8qKlxuICogT3ZlcnJpZGVzIGRlZmF1bHRzIG9wdGlvbnMuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKi9cbkF1dG9TY3JvbGwucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIHRoaXMuX29wdHMgPSBhc3NpZ24oe30sIHRoaXMuX29wdHMsIG9wdGlvbnMpO1xufTtcblxuXG4vKipcbiAqIENvbnZlcnRzIGV2ZW50IHRvIGEgcG9pbnQgaW4gY2FudmFzIGNvbnRhaW5lciBwbGFuZSBpbiBnbG9iYWwgc2NhbGUuXG4gKlxuICogQHBhcmFtICB7RXZlbnR9IGV2ZW50XG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuQXV0b1Njcm9sbC5wcm90b3R5cGUuX3RvQm9yZGVyUG9pbnQgPSBmdW5jdGlvbihldmVudCkge1xuICB2YXIgY2xpZW50UmVjdCA9IHRoaXMuX2NhbnZhcy5fY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIHZhciBnbG9iYWxQb3NpdGlvbiA9IHRvUG9pbnQoZXZlbnQub3JpZ2luYWxFdmVudCk7XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBnbG9iYWxQb3NpdGlvbi54IC0gY2xpZW50UmVjdC5sZWZ0LFxuICAgIHk6IGdsb2JhbFBvc2l0aW9uLnkgLSBjbGllbnRSZWN0LnRvcFxuICB9O1xufTsiLCJpbXBvcnQgRHJhZ2dpbmdNb2R1bGUgZnJvbSAnLi4vZHJhZ2dpbmcnO1xuXG5pbXBvcnQgQXV0b1Njcm9sbCBmcm9tICcuL0F1dG9TY3JvbGwnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBEcmFnZ2luZ01vZHVsZSxcbiAgXSxcbiAgX19pbml0X186IFsgJ2F1dG9TY3JvbGwnIF0sXG4gIGF1dG9TY3JvbGw6IFsgJ3R5cGUnLCBBdXRvU2Nyb2xsIF1cbn07IiwiaW1wb3J0IHsgZmlsdGVyUmVkdW5kYW50V2F5cG9pbnRzIH0gZnJvbSAnLi4vLi4vbGF5b3V0L0xheW91dFV0aWwnO1xuXG52YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xuXG52YXIgUkVDT05ORUNUX1NUQVJUID0gJ3JlY29ubmVjdFN0YXJ0JyxcbiAgICBSRUNPTk5FQ1RfRU5EID0gJ3JlY29ubmVjdEVuZCcsXG4gICAgVVBEQVRFX1dBWVBPSU5UUyA9ICd1cGRhdGVXYXlwb2ludHMnO1xuXG5cbi8qKlxuICogTW92ZSBiZW5kcG9pbnRzIHRocm91Z2ggZHJhZyBhbmQgZHJvcCB0byBhZGQvcmVtb3ZlIGJlbmRwb2ludHMgb3IgcmVjb25uZWN0IGNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJlbmRwb2ludE1vdmUoaW5qZWN0b3IsIGV2ZW50QnVzLCBjYW52YXMsIGRyYWdnaW5nLCBydWxlcywgbW9kZWxpbmcpIHtcbiAgdGhpcy5faW5qZWN0b3IgPSBpbmplY3RvcjtcblxuICB0aGlzLnN0YXJ0ID0gZnVuY3Rpb24oZXZlbnQsIGNvbm5lY3Rpb24sIGJlbmRwb2ludEluZGV4LCBpbnNlcnQpIHtcbiAgICB2YXIgZ2Z4ID0gY2FudmFzLmdldEdyYXBoaWNzKGNvbm5lY3Rpb24pLFxuICAgICAgICBzb3VyY2UgPSBjb25uZWN0aW9uLnNvdXJjZSxcbiAgICAgICAgdGFyZ2V0ID0gY29ubmVjdGlvbi50YXJnZXQsXG4gICAgICAgIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzLFxuICAgICAgICB0eXBlO1xuXG4gICAgaWYgKCFpbnNlcnQgJiYgYmVuZHBvaW50SW5kZXggPT09IDApIHtcbiAgICAgIHR5cGUgPSBSRUNPTk5FQ1RfU1RBUlQ7XG4gICAgfSBlbHNlXG4gICAgaWYgKCFpbnNlcnQgJiYgYmVuZHBvaW50SW5kZXggPT09IHdheXBvaW50cy5sZW5ndGggLSAxKSB7XG4gICAgICB0eXBlID0gUkVDT05ORUNUX0VORDtcbiAgICB9IGVsc2Uge1xuICAgICAgdHlwZSA9IFVQREFURV9XQVlQT0lOVFM7XG4gICAgfVxuXG4gICAgdmFyIGNvbW1hbmQgPSB0eXBlID09PSBVUERBVEVfV0FZUE9JTlRTID8gJ2Nvbm5lY3Rpb24udXBkYXRlV2F5cG9pbnRzJyA6ICdjb25uZWN0aW9uLnJlY29ubmVjdCc7XG5cbiAgICB2YXIgYWxsb3dlZCA9IHJ1bGVzLmFsbG93ZWQoY29tbWFuZCwge1xuICAgICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICB9KTtcblxuICAgIGlmIChhbGxvd2VkID09PSBmYWxzZSkge1xuICAgICAgYWxsb3dlZCA9IHJ1bGVzLmFsbG93ZWQoY29tbWFuZCwge1xuICAgICAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgICAgICBzb3VyY2U6IHRhcmdldCxcbiAgICAgICAgdGFyZ2V0OiBzb3VyY2VcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChhbGxvd2VkID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRyYWdnaW5nLmluaXQoZXZlbnQsICdiZW5kcG9pbnQubW92ZScsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICAgICAgY29ubmVjdGlvbkdmeDogZ2Z4LFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgYWxsb3dlZDogYWxsb3dlZCxcbiAgICAgICAgICBiZW5kcG9pbnRJbmRleDogYmVuZHBvaW50SW5kZXgsXG4gICAgICAgICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICBpbnNlcnQ6IGluc2VydCxcbiAgICAgICAgICB0eXBlOiB0eXBlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBldmVudEJ1cy5vbignYmVuZHBvaW50Lm1vdmUuaG92ZXInLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgc291cmNlID0gY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgIHRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICBob3ZlciA9IGV2ZW50LmhvdmVyLFxuICAgICAgICB0eXBlID0gY29udGV4dC50eXBlO1xuXG4gICAgLy8gY2FjaGUgaG92ZXIgc3RhdGVcbiAgICBjb250ZXh0LmhvdmVyID0gaG92ZXI7XG5cbiAgICB2YXIgYWxsb3dlZDtcblxuICAgIGlmICghaG92ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29tbWFuZCA9IHR5cGUgPT09IFVQREFURV9XQVlQT0lOVFMgPyAnY29ubmVjdGlvbi51cGRhdGVXYXlwb2ludHMnIDogJ2Nvbm5lY3Rpb24ucmVjb25uZWN0JztcblxuICAgIGFsbG93ZWQgPSBjb250ZXh0LmFsbG93ZWQgPSBydWxlcy5hbGxvd2VkKGNvbW1hbmQsIHtcbiAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgICBzb3VyY2U6IHR5cGUgPT09IFJFQ09OTkVDVF9TVEFSVCA/IGhvdmVyIDogc291cmNlLFxuICAgICAgdGFyZ2V0OiB0eXBlID09PSBSRUNPTk5FQ1RfRU5EID8gaG92ZXIgOiB0YXJnZXRcbiAgICB9KTtcblxuICAgIGlmIChhbGxvd2VkKSB7XG4gICAgICBjb250ZXh0LnNvdXJjZSA9IHR5cGUgPT09IFJFQ09OTkVDVF9TVEFSVCA/IGhvdmVyIDogc291cmNlO1xuICAgICAgY29udGV4dC50YXJnZXQgPSB0eXBlID09PSBSRUNPTk5FQ1RfRU5EID8gaG92ZXIgOiB0YXJnZXQ7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYWxsb3dlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGFsbG93ZWQgPSBjb250ZXh0LmFsbG93ZWQgPSBydWxlcy5hbGxvd2VkKGNvbW1hbmQsIHtcbiAgICAgICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICAgICAgc291cmNlOiB0eXBlID09PSBSRUNPTk5FQ1RfRU5EID8gaG92ZXIgOiB0YXJnZXQsXG4gICAgICAgIHRhcmdldDogdHlwZSA9PT0gUkVDT05ORUNUX1NUQVJUID8gaG92ZXIgOiBzb3VyY2VcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChhbGxvd2VkKSB7XG4gICAgICBjb250ZXh0LnNvdXJjZSA9IHR5cGUgPT09IFJFQ09OTkVDVF9FTkQgPyBob3ZlciA6IHRhcmdldDtcbiAgICAgIGNvbnRleHQudGFyZ2V0ID0gdHlwZSA9PT0gUkVDT05ORUNUX1NUQVJUID8gaG92ZXIgOiBzb3VyY2U7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbihbICdiZW5kcG9pbnQubW92ZS5vdXQnLCAnYmVuZHBvaW50Lm1vdmUuY2xlYW51cCcgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQ7XG5cbiAgICBjb250ZXh0LmhvdmVyID0gbnVsbDtcbiAgICBjb250ZXh0LnNvdXJjZSA9IG51bGw7XG4gICAgY29udGV4dC50YXJnZXQgPSBudWxsO1xuXG4gICAgY29udGV4dC5hbGxvd2VkID0gZmFsc2U7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdiZW5kcG9pbnQubW92ZS5lbmQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgYWxsb3dlZCA9IGNvbnRleHQuYWxsb3dlZCxcbiAgICAgICAgYmVuZHBvaW50SW5kZXggPSBjb250ZXh0LmJlbmRwb2ludEluZGV4LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBpbnNlcnQgPSBjb250ZXh0Lmluc2VydCxcbiAgICAgICAgbmV3V2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHMuc2xpY2UoKSxcbiAgICAgICAgc291cmNlID0gY29udGV4dC5zb3VyY2UsXG4gICAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0LFxuICAgICAgICB0eXBlID0gY29udGV4dC50eXBlLFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge307XG5cbiAgICAvLyBlbnN1cmUgaW50ZWdlciB2YWx1ZXMgKGltcG9ydGFudCBpZiB6b29tIGxldmVsIHdhcyA+IDEgZHVyaW5nIG1vdmUpXG4gICAgdmFyIGRvY2tpbmcgPSB7XG4gICAgICB4OiByb3VuZChldmVudC54KSxcbiAgICAgIHk6IHJvdW5kKGV2ZW50LnkpXG4gICAgfTtcblxuICAgIGlmICghYWxsb3dlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBVUERBVEVfV0FZUE9JTlRTKSB7XG4gICAgICBpZiAoaW5zZXJ0KSB7XG5cbiAgICAgICAgLy8gaW5zZXJ0IG5ldyBiZW5kcG9pbnRcbiAgICAgICAgbmV3V2F5cG9pbnRzLnNwbGljZShiZW5kcG9pbnRJbmRleCwgMCwgZG9ja2luZyk7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIC8vIHN3YXAgcHJldmlvdXMgd2F5cG9pbnQgd2l0aCBtb3ZlZCBvbmVcbiAgICAgICAgbmV3V2F5cG9pbnRzW2JlbmRwb2ludEluZGV4XSA9IGRvY2tpbmc7XG4gICAgICB9XG5cbiAgICAgIC8vIHBhc3MgaGludHMgYWJvdXQgYWN0dWFsIG1vdmVkIGJlbmRwb2ludFxuICAgICAgLy8gdXNlZnVsIGZvciBjb25uZWN0aW9uL2xhYmVsIGxheW91dFxuICAgICAgaGludHMuYmVuZHBvaW50TW92ZSA9IHtcbiAgICAgICAgaW5zZXJ0OiBpbnNlcnQsXG4gICAgICAgIGJlbmRwb2ludEluZGV4OiBiZW5kcG9pbnRJbmRleFxuICAgICAgfTtcblxuICAgICAgbmV3V2F5cG9pbnRzID0gdGhpcy5jcm9wV2F5cG9pbnRzKGNvbm5lY3Rpb24sIG5ld1dheXBvaW50cyk7XG5cbiAgICAgIG1vZGVsaW5nLnVwZGF0ZVdheXBvaW50cyhjb25uZWN0aW9uLCBmaWx0ZXJSZWR1bmRhbnRXYXlwb2ludHMobmV3V2F5cG9pbnRzKSwgaGludHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZSA9PT0gUkVDT05ORUNUX1NUQVJUKSB7XG4gICAgICAgIGhpbnRzLmRvY2tpbmcgPSAnc291cmNlJztcblxuICAgICAgICBpZiAoaXNSZXZlcnNlKGNvbnRleHQpKSB7XG4gICAgICAgICAgaGludHMuZG9ja2luZyA9ICd0YXJnZXQnO1xuXG4gICAgICAgICAgaGludHMubmV3V2F5cG9pbnRzID0gbmV3V2F5cG9pbnRzLnJldmVyc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBSRUNPTk5FQ1RfRU5EKSB7XG4gICAgICAgIGhpbnRzLmRvY2tpbmcgPSAndGFyZ2V0JztcblxuICAgICAgICBpZiAoaXNSZXZlcnNlKGNvbnRleHQpKSB7XG4gICAgICAgICAgaGludHMuZG9ja2luZyA9ICdzb3VyY2UnO1xuXG4gICAgICAgICAgaGludHMubmV3V2F5cG9pbnRzID0gbmV3V2F5cG9pbnRzLnJldmVyc2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBtb2RlbGluZy5yZWNvbm5lY3QoY29ubmVjdGlvbiwgc291cmNlLCB0YXJnZXQsIGRvY2tpbmcsIGhpbnRzKTtcbiAgICB9XG4gIH0sIHRoaXMpO1xufVxuXG5CZW5kcG9pbnRNb3ZlLiRpbmplY3QgPSBbXG4gICdpbmplY3RvcicsXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnLFxuICAnZHJhZ2dpbmcnLFxuICAncnVsZXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5CZW5kcG9pbnRNb3ZlLnByb3RvdHlwZS5jcm9wV2F5cG9pbnRzID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgbmV3V2F5cG9pbnRzKSB7XG4gIHZhciBjb25uZWN0aW9uRG9ja2luZyA9IHRoaXMuX2luamVjdG9yLmdldCgnY29ubmVjdGlvbkRvY2tpbmcnLCBmYWxzZSk7XG5cbiAgaWYgKCFjb25uZWN0aW9uRG9ja2luZykge1xuICAgIHJldHVybiBuZXdXYXlwb2ludHM7XG4gIH1cblxuICB2YXIgd2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHM7XG5cbiAgY29ubmVjdGlvbi53YXlwb2ludHMgPSBuZXdXYXlwb2ludHM7XG5cbiAgY29ubmVjdGlvbi53YXlwb2ludHMgPSBjb25uZWN0aW9uRG9ja2luZy5nZXRDcm9wcGVkV2F5cG9pbnRzKGNvbm5lY3Rpb24pO1xuXG4gIG5ld1dheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzO1xuXG4gIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gd2F5cG9pbnRzO1xuXG4gIHJldHVybiBuZXdXYXlwb2ludHM7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNSZXZlcnNlKGNvbnRleHQpIHtcbiAgdmFyIGhvdmVyID0gY29udGV4dC5ob3ZlcixcbiAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQsXG4gICAgICB0eXBlID0gY29udGV4dC50eXBlO1xuXG4gIGlmICh0eXBlID09PSBSRUNPTk5FQ1RfU1RBUlQpIHtcbiAgICByZXR1cm4gaG92ZXIgJiYgdGFyZ2V0ICYmIGhvdmVyID09PSB0YXJnZXQgJiYgc291cmNlICE9PSB0YXJnZXQ7XG4gIH1cblxuICBpZiAodHlwZSA9PT0gUkVDT05ORUNUX0VORCkge1xuICAgIHJldHVybiBob3ZlciAmJiBzb3VyY2UgJiYgaG92ZXIgPT09IHNvdXJjZSAmJiBzb3VyY2UgIT09IHRhcmdldDtcbiAgfVxufSIsImltcG9ydCB7XG4gIGNsYXNzZXMgYXMgc3ZnQ2xhc3NlcyxcbiAgcmVtb3ZlIGFzIHN2Z1JlbW92ZVxufSBmcm9tICd0aW55LXN2Zyc7XG5cbmltcG9ydCB7IGFkZEJlbmRwb2ludCB9IGZyb20gJy4vQmVuZHBvaW50VXRpbCc7XG5cbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gJy4uLy4uL3V0aWwvU3ZnVHJhbnNmb3JtVXRpbCc7XG5cbmltcG9ydCB7IGlzUmV2ZXJzZSB9IGZyb20gJy4vQmVuZHBvaW50TW92ZSc7XG5cbnZhciBSRUNPTk5FQ1RfU1RBUlQgPSAncmVjb25uZWN0U3RhcnQnLFxuICAgIFJFQ09OTkVDVF9FTkQgPSAncmVjb25uZWN0RW5kJyxcbiAgICBVUERBVEVfV0FZUE9JTlRTID0gJ3VwZGF0ZVdheXBvaW50cyc7XG5cbnZhciBNQVJLRVJfT0sgPSAnY29ubmVjdC1vaycsXG4gICAgTUFSS0VSX05PVF9PSyA9ICdjb25uZWN0LW5vdC1vaycsXG4gICAgTUFSS0VSX0NPTk5FQ1RfSE9WRVIgPSAnY29ubmVjdC1ob3ZlcicsXG4gICAgTUFSS0VSX0NPTk5FQ1RfVVBEQVRJTkcgPSAnZGpzLXVwZGF0aW5nJyxcbiAgICBNQVJLRVJfRUxFTUVOVF9ISURERU4gPSAnZGpzLWVsZW1lbnQtaGlkZGVuJztcblxudmFyIEhJR0hfUFJJT1JJVFkgPSAxMTAwO1xuXG4vKipcbiAqIFByZXZpZXcgY29ubmVjdGlvbiB3aGlsZSBtb3ZpbmcgYmVuZHBvaW50cy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQmVuZHBvaW50TW92ZVByZXZpZXcoYmVuZHBvaW50TW92ZSwgaW5qZWN0b3IsIGV2ZW50QnVzLCBjYW52YXMpIHtcbiAgdGhpcy5faW5qZWN0b3IgPSBpbmplY3RvcjtcblxuICB2YXIgY29ubmVjdGlvblByZXZpZXcgPSBpbmplY3Rvci5nZXQoJ2Nvbm5lY3Rpb25QcmV2aWV3JywgZmFsc2UpO1xuXG4gIGV2ZW50QnVzLm9uKCdiZW5kcG9pbnQubW92ZS5zdGFydCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBiZW5kcG9pbnRJbmRleCA9IGNvbnRleHQuYmVuZHBvaW50SW5kZXgsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIGluc2VydCA9IGNvbnRleHQuaW5zZXJ0LFxuICAgICAgICB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cyxcbiAgICAgICAgbmV3V2F5cG9pbnRzID0gd2F5cG9pbnRzLnNsaWNlKCk7XG5cbiAgICBjb250ZXh0LndheXBvaW50cyA9IHdheXBvaW50cztcblxuICAgIGlmIChpbnNlcnQpIHtcblxuICAgICAgLy8gaW5zZXJ0IHBsYWNlaG9sZGVyIGZvciBuZXcgYmVuZHBvaW50XG4gICAgICBuZXdXYXlwb2ludHMuc3BsaWNlKGJlbmRwb2ludEluZGV4LCAwLCB7IHg6IGV2ZW50LngsIHk6IGV2ZW50LnkgfSk7XG4gICAgfVxuXG4gICAgY29ubmVjdGlvbi53YXlwb2ludHMgPSBuZXdXYXlwb2ludHM7XG5cbiAgICAvLyBhZGQgZHJhZ2dlciBnZnhcbiAgICB2YXIgZHJhZ2dlckdmeCA9IGNvbnRleHQuZHJhZ2dlckdmeCA9IGFkZEJlbmRwb2ludChjYW52YXMuZ2V0TGF5ZXIoJ292ZXJsYXlzJykpO1xuXG4gICAgc3ZnQ2xhc3NlcyhkcmFnZ2VyR2Z4KS5hZGQoJ2Rqcy1kcmFnZ2luZycpO1xuXG4gICAgY2FudmFzLmFkZE1hcmtlcihjb25uZWN0aW9uLCBNQVJLRVJfRUxFTUVOVF9ISURERU4pO1xuICAgIGNhbnZhcy5hZGRNYXJrZXIoY29ubmVjdGlvbiwgTUFSS0VSX0NPTk5FQ1RfVVBEQVRJTkcpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignYmVuZHBvaW50Lm1vdmUuaG92ZXInLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgYWxsb3dlZCA9IGNvbnRleHQuYWxsb3dlZCxcbiAgICAgICAgaG92ZXIgPSBjb250ZXh0LmhvdmVyLFxuICAgICAgICB0eXBlID0gY29udGV4dC50eXBlO1xuXG4gICAgaWYgKGhvdmVyKSB7XG4gICAgICBjYW52YXMuYWRkTWFya2VyKGhvdmVyLCBNQVJLRVJfQ09OTkVDVF9IT1ZFUik7XG5cbiAgICAgIGlmICh0eXBlID09PSBVUERBVEVfV0FZUE9JTlRTKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGFsbG93ZWQpIHtcbiAgICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihob3ZlciwgTUFSS0VSX05PVF9PSyk7XG4gICAgICAgIGNhbnZhcy5hZGRNYXJrZXIoaG92ZXIsIE1BUktFUl9PSyk7XG4gICAgICB9IGVsc2UgaWYgKGFsbG93ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG92ZXIsIE1BUktFUl9PSyk7XG4gICAgICAgIGNhbnZhcy5hZGRNYXJrZXIoaG92ZXIsIE1BUktFUl9OT1RfT0spO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oW1xuICAgICdiZW5kcG9pbnQubW92ZS5vdXQnLFxuICAgICdiZW5kcG9pbnQubW92ZS5jbGVhbnVwJ1xuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgaG92ZXIgPSBjb250ZXh0LmhvdmVyLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldDtcblxuICAgIGlmIChob3Zlcikge1xuICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihob3ZlciwgTUFSS0VSX0NPTk5FQ1RfSE9WRVIpO1xuICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihob3ZlciwgdGFyZ2V0ID8gTUFSS0VSX09LIDogTUFSS0VSX05PVF9PSyk7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignYmVuZHBvaW50Lm1vdmUubW92ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBhbGxvd2VkID0gY29udGV4dC5hbGxvd2VkLFxuICAgICAgICBiZW5kcG9pbnRJbmRleCA9IGNvbnRleHQuYmVuZHBvaW50SW5kZXgsXG4gICAgICAgIGRyYWdnZXJHZnggPSBjb250ZXh0LmRyYWdnZXJHZngsXG4gICAgICAgIGhvdmVyID0gY29udGV4dC5ob3ZlcixcbiAgICAgICAgdHlwZSA9IGNvbnRleHQudHlwZSxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgc291cmNlID0gY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgIHRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICBuZXdXYXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cy5zbGljZSgpLFxuICAgICAgICBiZW5kcG9pbnQgPSB7IHg6IGV2ZW50LngsIHk6IGV2ZW50LnkgfSxcbiAgICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9LFxuICAgICAgICBkcmF3UHJldmlld0hpbnRzID0ge307XG5cbiAgICBpZiAoY29ubmVjdGlvblByZXZpZXcpIHtcbiAgICAgIGlmIChoaW50cy5jb25uZWN0aW9uU3RhcnQpIHtcbiAgICAgICAgZHJhd1ByZXZpZXdIaW50cy5jb25uZWN0aW9uU3RhcnQgPSBoaW50cy5jb25uZWN0aW9uU3RhcnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChoaW50cy5jb25uZWN0aW9uRW5kKSB7XG4gICAgICAgIGRyYXdQcmV2aWV3SGludHMuY29ubmVjdGlvbkVuZCA9IGhpbnRzLmNvbm5lY3Rpb25FbmQ7XG4gICAgICB9XG5cblxuICAgICAgaWYgKHR5cGUgPT09IFJFQ09OTkVDVF9TVEFSVCkge1xuICAgICAgICBpZiAoaXNSZXZlcnNlKGNvbnRleHQpKSB7XG4gICAgICAgICAgZHJhd1ByZXZpZXdIaW50cy5jb25uZWN0aW9uRW5kID0gZHJhd1ByZXZpZXdIaW50cy5jb25uZWN0aW9uRW5kIHx8IGJlbmRwb2ludDtcblxuICAgICAgICAgIGRyYXdQcmV2aWV3SGludHMuc291cmNlID0gdGFyZ2V0O1xuICAgICAgICAgIGRyYXdQcmV2aWV3SGludHMudGFyZ2V0ID0gaG92ZXIgfHwgc291cmNlO1xuXG4gICAgICAgICAgbmV3V2F5cG9pbnRzID0gbmV3V2F5cG9pbnRzLnJldmVyc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLmNvbm5lY3Rpb25TdGFydCA9IGRyYXdQcmV2aWV3SGludHMuY29ubmVjdGlvblN0YXJ0IHx8IGJlbmRwb2ludDtcblxuICAgICAgICAgIGRyYXdQcmV2aWV3SGludHMuc291cmNlID0gaG92ZXIgfHwgc291cmNlO1xuICAgICAgICAgIGRyYXdQcmV2aWV3SGludHMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFJFQ09OTkVDVF9FTkQpIHtcbiAgICAgICAgaWYgKGlzUmV2ZXJzZShjb250ZXh0KSkge1xuICAgICAgICAgIGRyYXdQcmV2aWV3SGludHMuY29ubmVjdGlvblN0YXJ0ID0gZHJhd1ByZXZpZXdIaW50cy5jb25uZWN0aW9uU3RhcnQgfHwgYmVuZHBvaW50O1xuXG4gICAgICAgICAgZHJhd1ByZXZpZXdIaW50cy5zb3VyY2UgPSBob3ZlciB8fCB0YXJnZXQ7XG4gICAgICAgICAgZHJhd1ByZXZpZXdIaW50cy50YXJnZXQgPSBzb3VyY2U7XG5cbiAgICAgICAgICBuZXdXYXlwb2ludHMgPSBuZXdXYXlwb2ludHMucmV2ZXJzZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRyYXdQcmV2aWV3SGludHMuY29ubmVjdGlvbkVuZCA9IGRyYXdQcmV2aWV3SGludHMuY29ubmVjdGlvbkVuZCB8fCBiZW5kcG9pbnQ7XG5cbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLnRhcmdldCA9IGhvdmVyIHx8IHRhcmdldDtcbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkcmF3UHJldmlld0hpbnRzLm5vQ3JvcHBpbmcgPSB0cnVlO1xuICAgICAgICBkcmF3UHJldmlld0hpbnRzLm5vTGF5b3V0ID0gdHJ1ZTtcbiAgICAgICAgbmV3V2F5cG9pbnRzWyBiZW5kcG9pbnRJbmRleCBdID0gYmVuZHBvaW50O1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gVVBEQVRFX1dBWVBPSU5UUykge1xuICAgICAgICBuZXdXYXlwb2ludHMgPSBiZW5kcG9pbnRNb3ZlLmNyb3BXYXlwb2ludHMoY29ubmVjdGlvbiwgbmV3V2F5cG9pbnRzKTtcbiAgICAgIH1cblxuICAgICAgZHJhd1ByZXZpZXdIaW50cy53YXlwb2ludHMgPSBuZXdXYXlwb2ludHM7XG5cbiAgICAgIGNvbm5lY3Rpb25QcmV2aWV3LmRyYXdQcmV2aWV3KGNvbnRleHQsIGFsbG93ZWQsIGRyYXdQcmV2aWV3SGludHMpO1xuICAgIH1cblxuICAgIHRyYW5zbGF0ZShkcmFnZ2VyR2Z4LCBldmVudC54LCBldmVudC55KTtcbiAgfSwgdGhpcyk7XG5cbiAgZXZlbnRCdXMub24oW1xuICAgICdiZW5kcG9pbnQubW92ZS5lbmQnLFxuICAgICdiZW5kcG9pbnQubW92ZS5jYW5jZWwnXG4gIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBkcmFnZ2VyR2Z4ID0gY29udGV4dC5kcmFnZ2VyR2Z4LFxuICAgICAgICBob3ZlciA9IGNvbnRleHQuaG92ZXIsXG4gICAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0LFxuICAgICAgICB3YXlwb2ludHMgPSBjb250ZXh0LndheXBvaW50cztcblxuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gd2F5cG9pbnRzO1xuXG4gICAgLy8gcmVtb3ZlIGRyYWdnZXIgZ2Z4XG4gICAgc3ZnUmVtb3ZlKGRyYWdnZXJHZngpO1xuXG4gICAgY2FudmFzLnJlbW92ZU1hcmtlcihjb25uZWN0aW9uLCBNQVJLRVJfQ09OTkVDVF9VUERBVElORyk7XG4gICAgY2FudmFzLnJlbW92ZU1hcmtlcihjb25uZWN0aW9uLCBNQVJLRVJfRUxFTUVOVF9ISURERU4pO1xuXG4gICAgaWYgKGhvdmVyKSB7XG4gICAgICBjYW52YXMucmVtb3ZlTWFya2VyKGhvdmVyLCBNQVJLRVJfT0spO1xuICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihob3ZlciwgdGFyZ2V0ID8gTUFSS0VSX09LIDogTUFSS0VSX05PVF9PSyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3Rpb25QcmV2aWV3KSB7XG4gICAgICBjb25uZWN0aW9uUHJldmlldy5jbGVhblVwKGNvbnRleHQpO1xuICAgIH1cbiAgfSk7XG59XG5cbkJlbmRwb2ludE1vdmVQcmV2aWV3LiRpbmplY3QgPSBbXG4gICdiZW5kcG9pbnRNb3ZlJyxcbiAgJ2luamVjdG9yJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcydcbl07IiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBpc0FycmF5XG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHsgc2V0U25hcHBlZCB9IGZyb20gJy4uL3NuYXBwaW5nL1NuYXBVdGlsJztcblxudmFyIGFicz0gTWF0aC5hYnMsXG4gICAgcm91bmQgPSBNYXRoLnJvdW5kO1xuXG52YXIgVE9MRVJBTkNFID0gMTA7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQmVuZHBvaW50U25hcHBpbmcoZXZlbnRCdXMpIHtcblxuICBmdW5jdGlvbiBzbmFwVG8odmFsdWVzLCB2YWx1ZSkge1xuXG4gICAgaWYgKGlzQXJyYXkodmFsdWVzKSkge1xuICAgICAgdmFyIGkgPSB2YWx1ZXMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaS0tKSBpZiAoYWJzKHZhbHVlc1tpXSAtIHZhbHVlKSA8PSBUT0xFUkFOQ0UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlc1tpXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWVzID0gK3ZhbHVlcztcbiAgICAgIHZhciByZW0gPSB2YWx1ZSAlIHZhbHVlcztcblxuICAgICAgaWYgKHJlbSA8IFRPTEVSQU5DRSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgLSByZW07XG4gICAgICB9XG5cbiAgICAgIGlmIChyZW0gPiB2YWx1ZXMgLSBUT0xFUkFOQ0UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIC0gcmVtICsgdmFsdWVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1pZChlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQud2lkdGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJvdW5kKGVsZW1lbnQud2lkdGggLyAyICsgZWxlbWVudC54KSxcbiAgICAgICAgeTogcm91bmQoZWxlbWVudC5oZWlnaHQgLyAyICsgZWxlbWVudC55KVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBjb25uZWN0aW9uIHNlZ21lbnQgc25hcHBpbmcgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGZ1bmN0aW9uIGdldENvbm5lY3Rpb25TZWdtZW50U25hcHMoY29udGV4dCkge1xuXG4gICAgdmFyIHNuYXBQb2ludHMgPSBjb250ZXh0LnNuYXBQb2ludHMsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzLFxuICAgICAgICBzZWdtZW50U3RhcnQgPSBjb250ZXh0LnNlZ21lbnRTdGFydCxcbiAgICAgICAgc2VnbWVudFN0YXJ0SW5kZXggPSBjb250ZXh0LnNlZ21lbnRTdGFydEluZGV4LFxuICAgICAgICBzZWdtZW50RW5kID0gY29udGV4dC5zZWdtZW50RW5kLFxuICAgICAgICBzZWdtZW50RW5kSW5kZXggPSBjb250ZXh0LnNlZ21lbnRFbmRJbmRleCxcbiAgICAgICAgYXhpcyA9IGNvbnRleHQuYXhpcztcblxuICAgIGlmIChzbmFwUG9pbnRzKSB7XG4gICAgICByZXR1cm4gc25hcFBvaW50cztcbiAgICB9XG5cbiAgICB2YXIgcmVmZXJlbmNlV2F5cG9pbnRzID0gW1xuICAgICAgd2F5cG9pbnRzW3NlZ21lbnRTdGFydEluZGV4IC0gMV0sXG4gICAgICBzZWdtZW50U3RhcnQsXG4gICAgICBzZWdtZW50RW5kLFxuICAgICAgd2F5cG9pbnRzW3NlZ21lbnRFbmRJbmRleCArIDFdXG4gICAgXTtcblxuICAgIGlmIChzZWdtZW50U3RhcnRJbmRleCA8IDIpIHtcbiAgICAgIHJlZmVyZW5jZVdheXBvaW50cy51bnNoaWZ0KG1pZChjb25uZWN0aW9uLnNvdXJjZSkpO1xuICAgIH1cblxuICAgIGlmIChzZWdtZW50RW5kSW5kZXggPiB3YXlwb2ludHMubGVuZ3RoIC0gMykge1xuICAgICAgcmVmZXJlbmNlV2F5cG9pbnRzLnVuc2hpZnQobWlkKGNvbm5lY3Rpb24udGFyZ2V0KSk7XG4gICAgfVxuXG4gICAgY29udGV4dC5zbmFwUG9pbnRzID0gc25hcFBvaW50cyA9IHsgaG9yaXpvbnRhbDogW10gLCB2ZXJ0aWNhbDogW10gfTtcblxuICAgIGZvckVhY2gocmVmZXJlbmNlV2F5cG9pbnRzLCBmdW5jdGlvbihwKSB7XG5cbiAgICAgIC8vIHdlIHNuYXAgb24gZXhpc3RpbmcgYmVuZHBvaW50cyBvbmx5LFxuICAgICAgLy8gbm90IHBsYWNlaG9sZGVycyB0aGF0IGFyZSBpbnNlcnRlZCBkdXJpbmcgYWRkXG4gICAgICBpZiAocCkge1xuICAgICAgICBwID0gcC5vcmlnaW5hbCB8fCBwO1xuXG4gICAgICAgIGlmIChheGlzID09PSAneScpIHtcbiAgICAgICAgICBzbmFwUG9pbnRzLmhvcml6b250YWwucHVzaChwLnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGF4aXMgPT09ICd4Jykge1xuICAgICAgICAgIHNuYXBQb2ludHMudmVydGljYWwucHVzaChwLngpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc25hcFBvaW50cztcbiAgfVxuXG4gIGV2ZW50QnVzLm9uKCdjb25uZWN0aW9uU2VnbWVudC5tb3ZlLm1vdmUnLCAxNTAwLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc25hcFBvaW50cyA9IGdldENvbm5lY3Rpb25TZWdtZW50U25hcHMoY29udGV4dCksXG4gICAgICAgIHggPSBldmVudC54LFxuICAgICAgICB5ID0gZXZlbnQueSxcbiAgICAgICAgc3gsIHN5O1xuXG4gICAgaWYgKCFzbmFwUG9pbnRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc25hcFxuICAgIHN4ID0gc25hcFRvKHNuYXBQb2ludHMudmVydGljYWwsIHgpO1xuICAgIHN5ID0gc25hcFRvKHNuYXBQb2ludHMuaG9yaXpvbnRhbCwgeSk7XG5cblxuICAgIC8vIGNvcnJlY3Rpb24geC95XG4gICAgdmFyIGN4ID0gKHggLSBzeCksXG4gICAgICAgIGN5ID0gKHkgLSBzeSk7XG5cbiAgICAvLyB1cGRhdGUgZGVsdGFcbiAgICBhc3NpZ24oZXZlbnQsIHtcbiAgICAgIGR4OiBldmVudC5keCAtIGN4LFxuICAgICAgZHk6IGV2ZW50LmR5IC0gY3ksXG4gICAgICB4OiBzeCxcbiAgICAgIHk6IHN5XG4gICAgfSk7XG5cbiAgICAvLyBvbmx5IHNldCBzbmFwcGVkIGlmIGFjdHVhbGx5IHNuYXBwZWRcbiAgICBpZiAoY3ggfHwgc25hcFBvaW50cy52ZXJ0aWNhbC5pbmRleE9mKHgpICE9PSAtMSkge1xuICAgICAgc2V0U25hcHBlZChldmVudCwgJ3gnLCBzeCk7XG4gICAgfVxuXG4gICAgaWYgKGN5IHx8IHNuYXBQb2ludHMuaG9yaXpvbnRhbC5pbmRleE9mKHkpICE9PSAtMSkge1xuICAgICAgc2V0U25hcHBlZChldmVudCwgJ3knLCBzeSk7XG4gICAgfVxuICB9KTtcblxuXG4gIC8vIGJlbmRwb2ludCBzbmFwcGluZyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgZnVuY3Rpb24gZ2V0QmVuZHBvaW50U25hcHMoY29udGV4dCkge1xuXG4gICAgdmFyIHNuYXBQb2ludHMgPSBjb250ZXh0LnNuYXBQb2ludHMsXG4gICAgICAgIHdheXBvaW50cyA9IGNvbnRleHQuY29ubmVjdGlvbi53YXlwb2ludHMsXG4gICAgICAgIGJlbmRwb2ludEluZGV4ID0gY29udGV4dC5iZW5kcG9pbnRJbmRleDtcblxuICAgIGlmIChzbmFwUG9pbnRzKSB7XG4gICAgICByZXR1cm4gc25hcFBvaW50cztcbiAgICB9XG5cbiAgICB2YXIgcmVmZXJlbmNlV2F5cG9pbnRzID0gWyB3YXlwb2ludHNbYmVuZHBvaW50SW5kZXggLSAxXSwgd2F5cG9pbnRzW2JlbmRwb2ludEluZGV4ICsgMV0gXTtcblxuICAgIGNvbnRleHQuc25hcFBvaW50cyA9IHNuYXBQb2ludHMgPSB7IGhvcml6b250YWw6IFtdICwgdmVydGljYWw6IFtdIH07XG5cbiAgICBmb3JFYWNoKHJlZmVyZW5jZVdheXBvaW50cywgZnVuY3Rpb24ocCkge1xuXG4gICAgICAvLyB3ZSBzbmFwIG9uIGV4aXN0aW5nIGJlbmRwb2ludHMgb25seSxcbiAgICAgIC8vIG5vdCBwbGFjZWhvbGRlcnMgdGhhdCBhcmUgaW5zZXJ0ZWQgZHVyaW5nIGFkZFxuICAgICAgaWYgKHApIHtcbiAgICAgICAgcCA9IHAub3JpZ2luYWwgfHwgcDtcblxuICAgICAgICBzbmFwUG9pbnRzLmhvcml6b250YWwucHVzaChwLnkpO1xuICAgICAgICBzbmFwUG9pbnRzLnZlcnRpY2FsLnB1c2gocC54KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzbmFwUG9pbnRzO1xuICB9XG5cblxuICBldmVudEJ1cy5vbihbICdiZW5kcG9pbnQubW92ZS5tb3ZlJywgJ2JlbmRwb2ludC5tb3ZlLmVuZCcgXSwgMTUwMCwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc25hcFBvaW50cyA9IGdldEJlbmRwb2ludFNuYXBzKGNvbnRleHQpLFxuICAgICAgICBob3ZlciA9IGNvbnRleHQuaG92ZXIsXG4gICAgICAgIGhvdmVyTWlkID0gaG92ZXIgJiYgbWlkKGhvdmVyKSxcbiAgICAgICAgeCA9IGV2ZW50LngsXG4gICAgICAgIHkgPSBldmVudC55LFxuICAgICAgICBzeCwgc3k7XG5cbiAgICBpZiAoIXNuYXBQb2ludHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzbmFwIHRvIGhvdmVyIG1pZFxuICAgIHN4ID0gc25hcFRvKGhvdmVyTWlkID8gc25hcFBvaW50cy52ZXJ0aWNhbC5jb25jYXQoWyBob3Zlck1pZC54IF0pIDogc25hcFBvaW50cy52ZXJ0aWNhbCwgeCk7XG4gICAgc3kgPSBzbmFwVG8oaG92ZXJNaWQgPyBzbmFwUG9pbnRzLmhvcml6b250YWwuY29uY2F0KFsgaG92ZXJNaWQueSBdKSA6IHNuYXBQb2ludHMuaG9yaXpvbnRhbCwgeSk7XG5cbiAgICAvLyBjb3JyZWN0aW9uIHgveVxuICAgIHZhciBjeCA9ICh4IC0gc3gpLFxuICAgICAgICBjeSA9ICh5IC0gc3kpO1xuXG4gICAgLy8gdXBkYXRlIGRlbHRhXG4gICAgYXNzaWduKGV2ZW50LCB7XG4gICAgICBkeDogZXZlbnQuZHggLSBjeCxcbiAgICAgIGR5OiBldmVudC5keSAtIGN5LFxuICAgICAgeDogZXZlbnQueCAtIGN4LFxuICAgICAgeTogZXZlbnQueSAtIGN5XG4gICAgfSk7XG5cbiAgICAvLyBvbmx5IHNldCBzbmFwcGVkIGlmIGFjdHVhbGx5IHNuYXBwZWRcbiAgICBpZiAoY3ggfHwgc25hcFBvaW50cy52ZXJ0aWNhbC5pbmRleE9mKHgpICE9PSAtMSkge1xuICAgICAgc2V0U25hcHBlZChldmVudCwgJ3gnLCBzeCk7XG4gICAgfVxuXG4gICAgaWYgKGN5IHx8IHNuYXBQb2ludHMuaG9yaXpvbnRhbC5pbmRleE9mKHkpICE9PSAtMSkge1xuICAgICAgc2V0U25hcHBlZChldmVudCwgJ3knLCBzeSk7XG4gICAgfVxuICB9KTtcbn1cblxuXG5CZW5kcG9pbnRTbmFwcGluZy4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07IiwiaW1wb3J0IHtcbiAgdG9Qb2ludFxufSBmcm9tICcuLi8uLi91dGlsL0V2ZW50JztcblxuaW1wb3J0IHtcbiAgZ2V0TWlkUG9pbnQsXG4gIHBvaW50c0FsaWduZWRcbn0gZnJvbSAnLi4vLi4vdXRpbC9HZW9tZXRyeSc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY2xhc3NlcyBhcyBzdmdDbGFzc2VzLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgcm90YXRlLFxuICB0cmFuc2xhdGVcbn0gZnJvbSAnLi4vLi4vdXRpbC9TdmdUcmFuc2Zvcm1VdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0QXBwcm94SW50ZXJzZWN0aW9uXG59IGZyb20gJy4uLy4uL3V0aWwvTGluZUludGVyc2VjdGlvbic7XG5cbmV4cG9ydCB2YXIgQkVORFBPSU5UX0NMUyA9ICdkanMtYmVuZHBvaW50JztcbmV4cG9ydCB2YXIgU0VHTUVOVF9EUkFHR0VSX0NMUyA9ICdkanMtc2VnbWVudC1kcmFnZ2VyJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRvQ2FudmFzQ29vcmRpbmF0ZXMoY2FudmFzLCBldmVudCkge1xuXG4gIHZhciBwb3NpdGlvbiA9IHRvUG9pbnQoZXZlbnQpLFxuICAgICAgY2xpZW50UmVjdCA9IGNhbnZhcy5fY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgb2Zmc2V0O1xuXG4gIC8vIGNhbnZhcyByZWxhdGl2ZSBwb3NpdGlvblxuXG4gIG9mZnNldCA9IHtcbiAgICB4OiBjbGllbnRSZWN0LmxlZnQsXG4gICAgeTogY2xpZW50UmVjdC50b3BcbiAgfTtcblxuICAvLyB1cGRhdGUgYWN0dWFsIGV2ZW50IHBheWxvYWQgd2l0aCBjYW52YXMgcmVsYXRpdmUgbWVhc3VyZXNcblxuICB2YXIgdmlld2JveCA9IGNhbnZhcy52aWV3Ym94KCk7XG5cbiAgcmV0dXJuIHtcbiAgICB4OiB2aWV3Ym94LnggKyAocG9zaXRpb24ueCAtIG9mZnNldC54KSAvIHZpZXdib3guc2NhbGUsXG4gICAgeTogdmlld2JveC55ICsgKHBvc2l0aW9uLnkgLSBvZmZzZXQueSkgLyB2aWV3Ym94LnNjYWxlXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25uZWN0aW9uSW50ZXJzZWN0aW9uKGNhbnZhcywgd2F5cG9pbnRzLCBldmVudCkge1xuICB2YXIgbG9jYWxQb3NpdGlvbiA9IHRvQ2FudmFzQ29vcmRpbmF0ZXMoY2FudmFzLCBldmVudCksXG4gICAgICBpbnRlcnNlY3Rpb24gPSBnZXRBcHByb3hJbnRlcnNlY3Rpb24od2F5cG9pbnRzLCBsb2NhbFBvc2l0aW9uKTtcblxuICByZXR1cm4gaW50ZXJzZWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkQmVuZHBvaW50KHBhcmVudEdmeCwgY2xzKSB7XG4gIHZhciBncm91cEdmeCA9IHN2Z0NyZWF0ZSgnZycpO1xuICBzdmdDbGFzc2VzKGdyb3VwR2Z4KS5hZGQoQkVORFBPSU5UX0NMUyk7XG5cbiAgc3ZnQXBwZW5kKHBhcmVudEdmeCwgZ3JvdXBHZngpO1xuXG4gIHZhciB2aXN1YWwgPSBzdmdDcmVhdGUoJ2NpcmNsZScpO1xuICBzdmdBdHRyKHZpc3VhbCwge1xuICAgIGN4OiAwLFxuICAgIGN5OiAwLFxuICAgIHI6IDRcbiAgfSk7XG4gIHN2Z0NsYXNzZXModmlzdWFsKS5hZGQoJ2Rqcy12aXN1YWwnKTtcblxuICBzdmdBcHBlbmQoZ3JvdXBHZngsIHZpc3VhbCk7XG5cbiAgdmFyIGhpdCA9IHN2Z0NyZWF0ZSgnY2lyY2xlJyk7XG4gIHN2Z0F0dHIoaGl0LCB7XG4gICAgY3g6IDAsXG4gICAgY3k6IDAsXG4gICAgcjogMTBcbiAgfSk7XG4gIHN2Z0NsYXNzZXMoaGl0KS5hZGQoJ2Rqcy1oaXQnKTtcblxuICBzdmdBcHBlbmQoZ3JvdXBHZngsIGhpdCk7XG5cbiAgaWYgKGNscykge1xuICAgIHN2Z0NsYXNzZXMoZ3JvdXBHZngpLmFkZChjbHMpO1xuICB9XG5cbiAgcmV0dXJuIGdyb3VwR2Z4O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVQYXJhbGxlbERyYWdnZXIocGFyZW50R2Z4LCBzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQsIGFsaWdubWVudCkge1xuICB2YXIgZHJhZ2dlckdmeCA9IHN2Z0NyZWF0ZSgnZycpO1xuXG4gIHN2Z0FwcGVuZChwYXJlbnRHZngsIGRyYWdnZXJHZngpO1xuXG4gIHZhciB3aWR0aCA9IDE0LFxuICAgICAgaGVpZ2h0ID0gMyxcbiAgICAgIHBhZGRpbmcgPSA2LFxuICAgICAgaGl0V2lkdGggPSBjYWxjdWxhdGVIaXRXaWR0aChzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQsIGFsaWdubWVudCksXG4gICAgICBoaXRIZWlnaHQgPSBoZWlnaHQgKyBwYWRkaW5nO1xuXG4gIHZhciB2aXN1YWwgPSBzdmdDcmVhdGUoJ3JlY3QnKTtcbiAgc3ZnQXR0cih2aXN1YWwsIHtcbiAgICB4OiAtd2lkdGggLyAyLFxuICAgIHk6IC1oZWlnaHQgLyAyLFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9KTtcbiAgc3ZnQ2xhc3Nlcyh2aXN1YWwpLmFkZCgnZGpzLXZpc3VhbCcpO1xuXG4gIHN2Z0FwcGVuZChkcmFnZ2VyR2Z4LCB2aXN1YWwpO1xuXG4gIHZhciBoaXQgPSBzdmdDcmVhdGUoJ3JlY3QnKTtcbiAgc3ZnQXR0cihoaXQsIHtcbiAgICB4OiAtaGl0V2lkdGggLyAyLFxuICAgIHk6IC1oaXRIZWlnaHQgLyAyLFxuICAgIHdpZHRoOiBoaXRXaWR0aCxcbiAgICBoZWlnaHQ6IGhpdEhlaWdodFxuICB9KTtcbiAgc3ZnQ2xhc3NlcyhoaXQpLmFkZCgnZGpzLWhpdCcpO1xuXG4gIHN2Z0FwcGVuZChkcmFnZ2VyR2Z4LCBoaXQpO1xuXG4gIHJvdGF0ZShkcmFnZ2VyR2Z4LCBhbGlnbm1lbnQgPT09ICd2JyA/IDkwIDogMCwgMCwgMCk7XG5cbiAgcmV0dXJuIGRyYWdnZXJHZng7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFNlZ21lbnREcmFnZ2VyKHBhcmVudEdmeCwgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kKSB7XG5cbiAgdmFyIGdyb3VwR2Z4ID0gc3ZnQ3JlYXRlKCdnJyksXG4gICAgICBtaWQgPSBnZXRNaWRQb2ludChzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQpLFxuICAgICAgYWxpZ25tZW50ID0gcG9pbnRzQWxpZ25lZChzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQpO1xuXG4gIHN2Z0FwcGVuZChwYXJlbnRHZngsIGdyb3VwR2Z4KTtcblxuICBjcmVhdGVQYXJhbGxlbERyYWdnZXIoZ3JvdXBHZngsIHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCwgYWxpZ25tZW50KTtcblxuICBzdmdDbGFzc2VzKGdyb3VwR2Z4KS5hZGQoU0VHTUVOVF9EUkFHR0VSX0NMUyk7XG4gIHN2Z0NsYXNzZXMoZ3JvdXBHZngpLmFkZChhbGlnbm1lbnQgPT09ICdoJyA/ICdob3Jpem9udGFsJyA6ICd2ZXJ0aWNhbCcpO1xuXG4gIHRyYW5zbGF0ZShncm91cEdmeCwgbWlkLngsIG1pZC55KTtcblxuICByZXR1cm4gZ3JvdXBHZng7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyByZWdpb24gZm9yIHNlZ21lbnQgbW92ZSB3aGljaCBpcyAyLzMgb2YgdGhlIGZ1bGwgc2VnbWVudCBsZW5ndGhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzZWdtZW50TGVuZ3RoXG4gKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlU2VnbWVudE1vdmVSZWdpb24oc2VnbWVudExlbmd0aCkge1xuICByZXR1cm4gTWF0aC5hYnMoTWF0aC5yb3VuZChzZWdtZW50TGVuZ3RoICogMiAvIDMpKTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy9cblxuZnVuY3Rpb24gY2FsY3VsYXRlSGl0V2lkdGgoc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kLCBhbGlnbm1lbnQpIHtcbiAgdmFyIHNlZ21lbnRMZW5ndGhYQXhpcyA9IHNlZ21lbnRFbmQueCAtIHNlZ21lbnRTdGFydC54LFxuICAgICAgc2VnbWVudExlbmd0aFlBeGlzID0gc2VnbWVudEVuZC55IC0gc2VnbWVudFN0YXJ0Lnk7XG5cbiAgcmV0dXJuIGFsaWdubWVudCA9PT0gJ2gnID9cbiAgICBjYWxjdWxhdGVTZWdtZW50TW92ZVJlZ2lvbihzZWdtZW50TGVuZ3RoWEF4aXMpIDpcbiAgICBjYWxjdWxhdGVTZWdtZW50TW92ZVJlZ2lvbihzZWdtZW50TGVuZ3RoWUF4aXMpO1xufVxuIiwiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZXZlbnQgYXMgZG9tRXZlbnQsXG4gIHF1ZXJ5IGFzIGRvbVF1ZXJ5LFxuICBxdWVyeUFsbCBhcyBkb21RdWVyeUFsbFxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHtcbiAgQkVORFBPSU5UX0NMUyxcbiAgU0VHTUVOVF9EUkFHR0VSX0NMUyxcbiAgYWRkQmVuZHBvaW50LFxuICBhZGRTZWdtZW50RHJhZ2dlcixcbiAgY2FsY3VsYXRlU2VnbWVudE1vdmVSZWdpb24sXG4gIGdldENvbm5lY3Rpb25JbnRlcnNlY3Rpb25cbn0gZnJvbSAnLi9CZW5kcG9pbnRVdGlsJztcblxuaW1wb3J0IHtcbiAgZXNjYXBlQ1NTXG59IGZyb20gJy4uLy4uL3V0aWwvRXNjYXBlVXRpbCc7XG5cbmltcG9ydCB7XG4gIHBvaW50c0FsaWduZWQsXG4gIGdldE1pZFBvaW50XG59IGZyb20gJy4uLy4uL3V0aWwvR2VvbWV0cnknO1xuXG5pbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNsYXNzZXMgYXMgc3ZnQ2xhc3NlcyxcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZSxcbiAgcmVtb3ZlIGFzIHN2Z1JlbW92ZVxufSBmcm9tICd0aW55LXN2Zyc7XG5cbmltcG9ydCB7XG4gIHRyYW5zbGF0ZVxufSBmcm9tICcuLi8uLi91dGlsL1N2Z1RyYW5zZm9ybVV0aWwnO1xuXG5cbi8qKlxuICogQSBzZXJ2aWNlIHRoYXQgYWRkcyBlZGl0YWJsZSBiZW5kcG9pbnRzIHRvIGNvbm5lY3Rpb25zLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCZW5kcG9pbnRzKFxuICAgIGV2ZW50QnVzLCBjYW52YXMsIGludGVyYWN0aW9uRXZlbnRzLFxuICAgIGJlbmRwb2ludE1vdmUsIGNvbm5lY3Rpb25TZWdtZW50TW92ZSkge1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgaW50ZXJzZWN0aW9uIHBvaW50IGlzIGluc2lkZSBtaWRkbGUgcmVnaW9uIG9mIHNlZ21lbnQsIGFkanVzdGVkIGJ5XG4gICAqIG9wdGlvbmFsIHRocmVzaG9sZFxuICAgKi9cbiAgZnVuY3Rpb24gaXNJbnRlcnNlY3Rpb25NaWRkbGUoaW50ZXJzZWN0aW9uLCB3YXlwb2ludHMsIHRyZXNob2xkKSB7XG4gICAgdmFyIGlkeCA9IGludGVyc2VjdGlvbi5pbmRleCxcbiAgICAgICAgcCA9IGludGVyc2VjdGlvbi5wb2ludCxcbiAgICAgICAgcDAsIHAxLCBtaWQsIGFsaWduZWQsIHhEZWx0YSwgeURlbHRhO1xuXG4gICAgaWYgKGlkeCA8PSAwIHx8IGludGVyc2VjdGlvbi5iZW5kcG9pbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwMCA9IHdheXBvaW50c1tpZHggLSAxXTtcbiAgICBwMSA9IHdheXBvaW50c1tpZHhdO1xuICAgIG1pZCA9IGdldE1pZFBvaW50KHAwLCBwMSksXG4gICAgYWxpZ25lZCA9IHBvaW50c0FsaWduZWQocDAsIHAxKTtcbiAgICB4RGVsdGEgPSBNYXRoLmFicyhwLnggLSBtaWQueCk7XG4gICAgeURlbHRhID0gTWF0aC5hYnMocC55IC0gbWlkLnkpO1xuXG4gICAgcmV0dXJuIGFsaWduZWQgJiYgeERlbHRhIDw9IHRyZXNob2xkICYmIHlEZWx0YSA8PSB0cmVzaG9sZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSB0aHJlc2hvbGQgZnJvbSBhIGNvbm5lY3Rpb24ncyBtaWRkbGUgd2hpY2ggZml0cyB0aGUgdHdvLXRoaXJkLXJlZ2lvblxuICAgKi9cbiAgZnVuY3Rpb24gY2FsY3VsYXRlSW50ZXJzZWN0aW9uVGhyZXNob2xkKGNvbm5lY3Rpb24sIGludGVyc2VjdGlvbikge1xuICAgIHZhciB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cyxcbiAgICAgICAgcmVsZXZhbnRTZWdtZW50LCBhbGlnbm1lbnQsIHNlZ21lbnRMZW5ndGgsIHRocmVzaG9sZDtcblxuICAgIGlmIChpbnRlcnNlY3Rpb24uaW5kZXggPD0gMCB8fCBpbnRlcnNlY3Rpb24uYmVuZHBvaW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBzZWdtZW50IHJlbGF0aXZlIHRvIGNvbm5lY3Rpb24gaW50ZXJzZWN0aW9uXG4gICAgcmVsZXZhbnRTZWdtZW50ID0ge1xuICAgICAgc3RhcnQ6IHdheXBvaW50c1tpbnRlcnNlY3Rpb24uaW5kZXggLSAxXSxcbiAgICAgIGVuZDogd2F5cG9pbnRzW2ludGVyc2VjdGlvbi5pbmRleF1cbiAgICB9O1xuXG4gICAgYWxpZ25tZW50ID0gcG9pbnRzQWxpZ25lZChyZWxldmFudFNlZ21lbnQuc3RhcnQsIHJlbGV2YW50U2VnbWVudC5lbmQpO1xuXG4gICAgaWYgKCFhbGlnbm1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChhbGlnbm1lbnQgPT09ICdoJykge1xuICAgICAgc2VnbWVudExlbmd0aCA9IHJlbGV2YW50U2VnbWVudC5lbmQueCAtIHJlbGV2YW50U2VnbWVudC5zdGFydC54O1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWdtZW50TGVuZ3RoID0gcmVsZXZhbnRTZWdtZW50LmVuZC55IC0gcmVsZXZhbnRTZWdtZW50LnN0YXJ0Lnk7XG4gICAgfVxuXG4gICAgLy8gY2FsY3VsYXRlIHRocmVzaG9sZCByZWxhdGl2ZSB0byAyLzMgb2Ygc2VnbWVudCBsZW5ndGhcbiAgICB0aHJlc2hvbGQgPSBjYWxjdWxhdGVTZWdtZW50TW92ZVJlZ2lvbihzZWdtZW50TGVuZ3RoKSAvIDI7XG5cbiAgICByZXR1cm4gdGhyZXNob2xkO1xuICB9XG5cbiAgZnVuY3Rpb24gYWN0aXZhdGVCZW5kcG9pbnRNb3ZlKGV2ZW50LCBjb25uZWN0aW9uKSB7XG4gICAgdmFyIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzLFxuICAgICAgICBpbnRlcnNlY3Rpb24gPSBnZXRDb25uZWN0aW9uSW50ZXJzZWN0aW9uKGNhbnZhcywgd2F5cG9pbnRzLCBldmVudCksXG4gICAgICAgIHRocmVzaG9sZDtcblxuICAgIGlmICghaW50ZXJzZWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhyZXNob2xkID0gY2FsY3VsYXRlSW50ZXJzZWN0aW9uVGhyZXNob2xkKGNvbm5lY3Rpb24sIGludGVyc2VjdGlvbik7XG5cbiAgICBpZiAoaXNJbnRlcnNlY3Rpb25NaWRkbGUoaW50ZXJzZWN0aW9uLCB3YXlwb2ludHMsIHRocmVzaG9sZCkpIHtcbiAgICAgIGNvbm5lY3Rpb25TZWdtZW50TW92ZS5zdGFydChldmVudCwgY29ubmVjdGlvbiwgaW50ZXJzZWN0aW9uLmluZGV4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmVuZHBvaW50TW92ZS5zdGFydChldmVudCwgY29ubmVjdGlvbiwgaW50ZXJzZWN0aW9uLmluZGV4LCAhaW50ZXJzZWN0aW9uLmJlbmRwb2ludCk7XG4gICAgfVxuXG4gICAgLy8gd2UndmUgaGFuZGxlZCB0aGUgZXZlbnRcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJpbmRJbnRlcmFjdGlvbkV2ZW50cyhub2RlLCBldmVudE5hbWUsIGVsZW1lbnQpIHtcblxuICAgIGRvbUV2ZW50LmJpbmQobm9kZSwgZXZlbnROYW1lLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgaW50ZXJhY3Rpb25FdmVudHMudHJpZ2dlck1vdXNlRXZlbnQoZXZlbnROYW1lLCBldmVudCwgZWxlbWVudCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJlbmRwb2ludHNDb250YWluZXIoZWxlbWVudCwgY3JlYXRlKSB7XG5cbiAgICB2YXIgbGF5ZXIgPSBjYW52YXMuZ2V0TGF5ZXIoJ292ZXJsYXlzJyksXG4gICAgICAgIGdmeCA9IGRvbVF1ZXJ5KCcuZGpzLWJlbmRwb2ludHNbZGF0YS1lbGVtZW50LWlkPVwiJyArIGVzY2FwZUNTUyhlbGVtZW50LmlkKSArICdcIl0nLCBsYXllcik7XG5cbiAgICBpZiAoIWdmeCAmJiBjcmVhdGUpIHtcbiAgICAgIGdmeCA9IHN2Z0NyZWF0ZSgnZycpO1xuICAgICAgc3ZnQXR0cihnZngsIHsgJ2RhdGEtZWxlbWVudC1pZCc6IGVsZW1lbnQuaWQgfSk7XG4gICAgICBzdmdDbGFzc2VzKGdmeCkuYWRkKCdkanMtYmVuZHBvaW50cycpO1xuXG4gICAgICBzdmdBcHBlbmQobGF5ZXIsIGdmeCk7XG5cbiAgICAgIGJpbmRJbnRlcmFjdGlvbkV2ZW50cyhnZngsICdtb3VzZWRvd24nLCBlbGVtZW50KTtcbiAgICAgIGJpbmRJbnRlcmFjdGlvbkV2ZW50cyhnZngsICdjbGljaycsIGVsZW1lbnQpO1xuICAgICAgYmluZEludGVyYWN0aW9uRXZlbnRzKGdmeCwgJ2RibGNsaWNrJywgZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdmeDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNlZ21lbnREcmFnZ2VyKGlkeCwgcGFyZW50R2Z4KSB7XG4gICAgcmV0dXJuIGRvbVF1ZXJ5KFxuICAgICAgJy5kanMtc2VnbWVudC1kcmFnZ2VyW2RhdGEtc2VnbWVudC1pZHg9XCInICsgaWR4ICsgJ1wiXScsXG4gICAgICBwYXJlbnRHZnhcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQmVuZHBvaW50cyhnZngsIGNvbm5lY3Rpb24pIHtcbiAgICBjb25uZWN0aW9uLndheXBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKHAsIGlkeCkge1xuICAgICAgdmFyIGJlbmRwb2ludCA9IGFkZEJlbmRwb2ludChnZngpO1xuXG4gICAgICBzdmdBcHBlbmQoZ2Z4LCBiZW5kcG9pbnQpO1xuXG4gICAgICB0cmFuc2xhdGUoYmVuZHBvaW50LCBwLngsIHAueSk7XG4gICAgfSk7XG5cbiAgICAvLyBhZGQgZmxvYXRpbmcgYmVuZHBvaW50XG4gICAgYWRkQmVuZHBvaW50KGdmeCwgJ2Zsb2F0aW5nJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTZWdtZW50RHJhZ2dlcnMoZ2Z4LCBjb25uZWN0aW9uKSB7XG5cbiAgICB2YXIgd2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHM7XG5cbiAgICB2YXIgc2VnbWVudFN0YXJ0LFxuICAgICAgICBzZWdtZW50RW5kLFxuICAgICAgICBzZWdtZW50RHJhZ2dlckdmeDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgd2F5cG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgIHNlZ21lbnRTdGFydCA9IHdheXBvaW50c1tpIC0gMV07XG4gICAgICBzZWdtZW50RW5kID0gd2F5cG9pbnRzW2ldO1xuXG4gICAgICBpZiAocG9pbnRzQWxpZ25lZChzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQpKSB7XG4gICAgICAgIHNlZ21lbnREcmFnZ2VyR2Z4ID0gYWRkU2VnbWVudERyYWdnZXIoZ2Z4LCBzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQpO1xuXG4gICAgICAgIHN2Z0F0dHIoc2VnbWVudERyYWdnZXJHZngsIHsgJ2RhdGEtc2VnbWVudC1pZHgnOiBpIH0pO1xuXG4gICAgICAgIGJpbmRJbnRlcmFjdGlvbkV2ZW50cyhzZWdtZW50RHJhZ2dlckdmeCwgJ21vdXNlbW92ZScsIGNvbm5lY3Rpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyQmVuZHBvaW50cyhnZngpIHtcbiAgICBmb3JFYWNoKGRvbVF1ZXJ5QWxsKCcuJyArIEJFTkRQT0lOVF9DTFMsIGdmeCksIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHN2Z1JlbW92ZShub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyU2VnbWVudERyYWdnZXJzKGdmeCkge1xuICAgIGZvckVhY2goZG9tUXVlcnlBbGwoJy4nICsgU0VHTUVOVF9EUkFHR0VSX0NMUywgZ2Z4KSwgZnVuY3Rpb24obm9kZSkge1xuICAgICAgc3ZnUmVtb3ZlKG5vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkSGFuZGxlcyhjb25uZWN0aW9uKSB7XG5cbiAgICB2YXIgZ2Z4ID0gZ2V0QmVuZHBvaW50c0NvbnRhaW5lcihjb25uZWN0aW9uKTtcblxuICAgIGlmICghZ2Z4KSB7XG4gICAgICBnZnggPSBnZXRCZW5kcG9pbnRzQ29udGFpbmVyKGNvbm5lY3Rpb24sIHRydWUpO1xuXG4gICAgICBjcmVhdGVCZW5kcG9pbnRzKGdmeCwgY29ubmVjdGlvbik7XG4gICAgICBjcmVhdGVTZWdtZW50RHJhZ2dlcnMoZ2Z4LCBjb25uZWN0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2Z4O1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlSGFuZGxlcyhjb25uZWN0aW9uKSB7XG5cbiAgICB2YXIgZ2Z4ID0gZ2V0QmVuZHBvaW50c0NvbnRhaW5lcihjb25uZWN0aW9uKTtcblxuICAgIGlmIChnZngpIHtcbiAgICAgIGNsZWFyU2VnbWVudERyYWdnZXJzKGdmeCk7XG4gICAgICBjbGVhckJlbmRwb2ludHMoZ2Z4KTtcbiAgICAgIGNyZWF0ZVNlZ21lbnREcmFnZ2VycyhnZngsIGNvbm5lY3Rpb24pO1xuICAgICAgY3JlYXRlQmVuZHBvaW50cyhnZngsIGNvbm5lY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUZsb2F0aW5nQmVuZHBvaW50UG9zaXRpb24ocGFyZW50R2Z4LCBpbnRlcnNlY3Rpb24pIHtcbiAgICB2YXIgZmxvYXRpbmcgPSBkb21RdWVyeSgnLmZsb2F0aW5nJywgcGFyZW50R2Z4KSxcbiAgICAgICAgcG9pbnQgPSBpbnRlcnNlY3Rpb24ucG9pbnQ7XG5cbiAgICBpZiAoIWZsb2F0aW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJhbnNsYXRlKGZsb2F0aW5nLCBwb2ludC54LCBwb2ludC55KTtcblxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2VnbWVudERyYWdnZXJQb3NpdGlvbihwYXJlbnRHZngsIGludGVyc2VjdGlvbiwgd2F5cG9pbnRzKSB7XG5cbiAgICB2YXIgZHJhZ2dlckdmeCA9IGdldFNlZ21lbnREcmFnZ2VyKGludGVyc2VjdGlvbi5pbmRleCwgcGFyZW50R2Z4KSxcbiAgICAgICAgc2VnbWVudFN0YXJ0ID0gd2F5cG9pbnRzW2ludGVyc2VjdGlvbi5pbmRleCAtIDFdLFxuICAgICAgICBzZWdtZW50RW5kID0gd2F5cG9pbnRzW2ludGVyc2VjdGlvbi5pbmRleF0sXG4gICAgICAgIHBvaW50ID0gaW50ZXJzZWN0aW9uLnBvaW50LFxuICAgICAgICBtaWQgPSBnZXRNaWRQb2ludChzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQpLFxuICAgICAgICBhbGlnbm1lbnQgPSBwb2ludHNBbGlnbmVkKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCksXG4gICAgICAgIGRyYWdnZXJWaXN1YWwsIHJlbGF0aXZlUG9zaXRpb247XG5cbiAgICBpZiAoIWRyYWdnZXJHZngpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkcmFnZ2VyVmlzdWFsID0gZ2V0RHJhZ2dlclZpc3VhbChkcmFnZ2VyR2Z4KTtcblxuICAgIHJlbGF0aXZlUG9zaXRpb24gPSB7XG4gICAgICB4OiBwb2ludC54IC0gbWlkLngsXG4gICAgICB5OiBwb2ludC55IC0gbWlkLnlcbiAgICB9O1xuXG4gICAgaWYgKGFsaWdubWVudCA9PT0gJ3YnKSB7XG5cbiAgICAgIC8vIHJvdGF0ZSBwb3NpdGlvblxuICAgICAgcmVsYXRpdmVQb3NpdGlvbiA9IHtcbiAgICAgICAgeDogcmVsYXRpdmVQb3NpdGlvbi55LFxuICAgICAgICB5OiByZWxhdGl2ZVBvc2l0aW9uLnhcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdHJhbnNsYXRlKGRyYWdnZXJWaXN1YWwsIHJlbGF0aXZlUG9zaXRpb24ueCwgcmVsYXRpdmVQb3NpdGlvbi55KTtcbiAgfVxuXG4gIGV2ZW50QnVzLm9uKCdjb25uZWN0aW9uLmNoYW5nZWQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHVwZGF0ZUhhbmRsZXMoZXZlbnQuZWxlbWVudCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjb25uZWN0aW9uLnJlbW92ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGdmeCA9IGdldEJlbmRwb2ludHNDb250YWluZXIoZXZlbnQuZWxlbWVudCk7XG5cbiAgICBpZiAoZ2Z4KSB7XG4gICAgICBzdmdSZW1vdmUoZ2Z4KTtcbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50Lm1hcmtlci51cGRhdGUnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50LFxuICAgICAgICBiZW5kcG9pbnRzR2Z4O1xuXG4gICAgaWYgKCFlbGVtZW50LndheXBvaW50cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJlbmRwb2ludHNHZnggPSBhZGRIYW5kbGVzKGVsZW1lbnQpO1xuXG4gICAgaWYgKGV2ZW50LmFkZCkge1xuICAgICAgc3ZnQ2xhc3NlcyhiZW5kcG9pbnRzR2Z4KS5hZGQoZXZlbnQubWFya2VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3ZnQ2xhc3NlcyhiZW5kcG9pbnRzR2Z4KS5yZW1vdmUoZXZlbnQubWFya2VyKTtcbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50Lm1vdXNlbW92ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQsXG4gICAgICAgIHdheXBvaW50cyA9IGVsZW1lbnQud2F5cG9pbnRzLFxuICAgICAgICBiZW5kcG9pbnRzR2Z4LFxuICAgICAgICBpbnRlcnNlY3Rpb247XG5cbiAgICBpZiAod2F5cG9pbnRzKSB7XG4gICAgICBiZW5kcG9pbnRzR2Z4ID0gZ2V0QmVuZHBvaW50c0NvbnRhaW5lcihlbGVtZW50LCB0cnVlKTtcblxuICAgICAgaW50ZXJzZWN0aW9uID0gZ2V0Q29ubmVjdGlvbkludGVyc2VjdGlvbihjYW52YXMsIHdheXBvaW50cywgZXZlbnQub3JpZ2luYWxFdmVudCk7XG5cbiAgICAgIGlmICghaW50ZXJzZWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlRmxvYXRpbmdCZW5kcG9pbnRQb3NpdGlvbihiZW5kcG9pbnRzR2Z4LCBpbnRlcnNlY3Rpb24pO1xuXG4gICAgICBpZiAoIWludGVyc2VjdGlvbi5iZW5kcG9pbnQpIHtcbiAgICAgICAgdXBkYXRlU2VnbWVudERyYWdnZXJQb3NpdGlvbihiZW5kcG9pbnRzR2Z4LCBpbnRlcnNlY3Rpb24sIHdheXBvaW50cyk7XG4gICAgICB9XG5cbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50Lm1vdXNlZG93bicsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgb3JpZ2luYWxFdmVudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQsXG4gICAgICAgIGVsZW1lbnQgPSBldmVudC5lbGVtZW50O1xuXG4gICAgaWYgKCFlbGVtZW50LndheXBvaW50cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBhY3RpdmF0ZUJlbmRwb2ludE1vdmUob3JpZ2luYWxFdmVudCwgZWxlbWVudCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdzZWxlY3Rpb24uY2hhbmdlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIG5ld1NlbGVjdGlvbiA9IGV2ZW50Lm5ld1NlbGVjdGlvbixcbiAgICAgICAgcHJpbWFyeSA9IG5ld1NlbGVjdGlvblswXTtcblxuICAgIGlmIChwcmltYXJ5ICYmIHByaW1hcnkud2F5cG9pbnRzKSB7XG4gICAgICBhZGRIYW5kbGVzKHByaW1hcnkpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQuaG92ZXInLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudDtcblxuICAgIGlmIChlbGVtZW50LndheXBvaW50cykge1xuICAgICAgYWRkSGFuZGxlcyhlbGVtZW50KTtcbiAgICAgIGludGVyYWN0aW9uRXZlbnRzLnJlZ2lzdGVyRXZlbnQoZXZlbnQuZ2Z4LCAnbW91c2Vtb3ZlJywgJ2VsZW1lbnQubW91c2Vtb3ZlJyk7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignZWxlbWVudC5vdXQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIGludGVyYWN0aW9uRXZlbnRzLnVucmVnaXN0ZXJFdmVudChldmVudC5nZngsICdtb3VzZW1vdmUnLCAnZWxlbWVudC5tb3VzZW1vdmUnKTtcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIGJlbmRwb2ludCBjb250YWluZXIgZGF0YSBhdHRyaWJ1dGUgb24gZWxlbWVudCBJRCBjaGFuZ2VcbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQudXBkYXRlSWQnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICAgIG5ld0lkID0gY29udGV4dC5uZXdJZDtcblxuICAgIGlmIChlbGVtZW50LndheXBvaW50cykge1xuICAgICAgdmFyIGJlbmRwb2ludENvbnRhaW5lciA9IGdldEJlbmRwb2ludHNDb250YWluZXIoZWxlbWVudCk7XG5cbiAgICAgIGlmIChiZW5kcG9pbnRDb250YWluZXIpIHtcbiAgICAgICAgc3ZnQXR0cihiZW5kcG9pbnRDb250YWluZXIsIHsgJ2RhdGEtZWxlbWVudC1pZCc6IG5ld0lkIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gQVBJXG5cbiAgdGhpcy5hZGRIYW5kbGVzID0gYWRkSGFuZGxlcztcbiAgdGhpcy51cGRhdGVIYW5kbGVzID0gdXBkYXRlSGFuZGxlcztcbiAgdGhpcy5nZXRCZW5kcG9pbnRzQ29udGFpbmVyID0gZ2V0QmVuZHBvaW50c0NvbnRhaW5lcjtcbiAgdGhpcy5nZXRTZWdtZW50RHJhZ2dlciA9IGdldFNlZ21lbnREcmFnZ2VyO1xufVxuXG5CZW5kcG9pbnRzLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnLFxuICAnaW50ZXJhY3Rpb25FdmVudHMnLFxuICAnYmVuZHBvaW50TW92ZScsXG4gICdjb25uZWN0aW9uU2VnbWVudE1vdmUnXG5dO1xuXG5cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0RHJhZ2dlclZpc3VhbChkcmFnZ2VyR2Z4KSB7XG4gIHJldHVybiBkb21RdWVyeSgnLmRqcy12aXN1YWwnLCBkcmFnZ2VyR2Z4KTtcbn0iLCJpbXBvcnQge1xuICBwb2ludHNBbGlnbmVkLFxuICBwb2ludHNPbkxpbmVcbn0gZnJvbSAnLi4vLi4vdXRpbC9HZW9tZXRyeSc7XG5cbmltcG9ydCB7XG4gIGFkZFNlZ21lbnREcmFnZ2VyLFxuICBnZXRDb25uZWN0aW9uSW50ZXJzZWN0aW9uXG59IGZyb20gJy4vQmVuZHBvaW50VXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldE1pZCxcbiAgZ2V0T3JpZW50YXRpb25cbn0gZnJvbSAnLi4vLi4vbGF5b3V0L0xheW91dFV0aWwnO1xuXG52YXIgTUFSS0VSX0NPTk5FQ1RfSE9WRVIgPSAnY29ubmVjdC1ob3ZlcicsXG4gICAgTUFSS0VSX0NPTk5FQ1RfVVBEQVRJTkcgPSAnZGpzLXVwZGF0aW5nJztcblxuaW1wb3J0IHtcbiAgY2xhc3NlcyBhcyBzdmdDbGFzc2VzLFxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgdHJhbnNsYXRlXG59IGZyb20gJy4uLy4uL3V0aWwvU3ZnVHJhbnNmb3JtVXRpbCc7XG5cblxuZnVuY3Rpb24gYXhpc0FkZChwb2ludCwgYXhpcywgZGVsdGEpIHtcbiAgcmV0dXJuIGF4aXNTZXQocG9pbnQsIGF4aXMsIHBvaW50W2F4aXNdICsgZGVsdGEpO1xufVxuXG5mdW5jdGlvbiBheGlzU2V0KHBvaW50LCBheGlzLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIHg6IChheGlzID09PSAneCcgPyB2YWx1ZSA6IHBvaW50LngpLFxuICAgIHk6IChheGlzID09PSAneScgPyB2YWx1ZSA6IHBvaW50LnkpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGF4aXNGZW5jZWQocG9zaXRpb24sIHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCwgYXhpcykge1xuXG4gIHZhciBtYXhWYWx1ZSA9IE1hdGgubWF4KHNlZ21lbnRTdGFydFtheGlzXSwgc2VnbWVudEVuZFtheGlzXSksXG4gICAgICBtaW5WYWx1ZSA9IE1hdGgubWluKHNlZ21lbnRTdGFydFtheGlzXSwgc2VnbWVudEVuZFtheGlzXSk7XG5cbiAgdmFyIHBhZGRpbmcgPSAyMDtcblxuICB2YXIgZmVuY2VkVmFsdWUgPSBNYXRoLm1pbihNYXRoLm1heChtaW5WYWx1ZSArIHBhZGRpbmcsIHBvc2l0aW9uW2F4aXNdKSwgbWF4VmFsdWUgLSBwYWRkaW5nKTtcblxuICByZXR1cm4gYXhpc1NldChzZWdtZW50U3RhcnQsIGF4aXMsIGZlbmNlZFZhbHVlKTtcbn1cblxuZnVuY3Rpb24gZmxpcEF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufVxuXG4vKipcbiAqIEdldCB0aGUgZG9ja2luZyBwb2ludCBvbiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKiBDb21wdXRlIGEgcmVhc29uYWJsZSBkb2NraW5nLCBpZiBub24gZXhpc3RzLlxuICpcbiAqIEBwYXJhbSAge1BvaW50fSBwb2ludFxuICogQHBhcmFtICB7ZGpzLm1vZGVsLlNoYXBlfSByZWZlcmVuY2VFbGVtZW50XG4gKiBAcGFyYW0gIHtzdHJpbmd9IG1vdmVBeGlzICh4fHkpXG4gKlxuICogQHJldHVybiB7UG9pbnR9XG4gKi9cbmZ1bmN0aW9uIGdldERvY2tpbmcocG9pbnQsIHJlZmVyZW5jZUVsZW1lbnQsIG1vdmVBeGlzKSB7XG5cbiAgdmFyIHJlZmVyZW5jZU1pZCxcbiAgICAgIGludmVyc2VBeGlzO1xuXG4gIGlmIChwb2ludC5vcmlnaW5hbCkge1xuICAgIHJldHVybiBwb2ludC5vcmlnaW5hbDtcbiAgfSBlbHNlIHtcbiAgICByZWZlcmVuY2VNaWQgPSBnZXRNaWQocmVmZXJlbmNlRWxlbWVudCk7XG4gICAgaW52ZXJzZUF4aXMgPSBmbGlwQXhpcyhtb3ZlQXhpcyk7XG5cbiAgICByZXR1cm4gYXhpc1NldChwb2ludCwgaW52ZXJzZUF4aXMsIHJlZmVyZW5jZU1pZFtpbnZlcnNlQXhpc10pO1xuICB9XG59XG5cbi8qKlxuICogQSBjb21wb25lbnQgdGhhdCBpbXBsZW1lbnRzIG1vdmluZyBvZiBiZW5kcG9pbnRzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvbm5lY3Rpb25TZWdtZW50TW92ZShcbiAgICBpbmplY3RvciwgZXZlbnRCdXMsIGNhbnZhcyxcbiAgICBkcmFnZ2luZywgZ3JhcGhpY3NGYWN0b3J5LCBtb2RlbGluZykge1xuXG4gIC8vIG9wdGlvbmFsIGNvbm5lY3Rpb24gZG9ja2luZyBpbnRlZ3JhdGlvblxuICB2YXIgY29ubmVjdGlvbkRvY2tpbmcgPSBpbmplY3Rvci5nZXQoJ2Nvbm5lY3Rpb25Eb2NraW5nJywgZmFsc2UpO1xuXG5cbiAgLy8gQVBJXG5cbiAgdGhpcy5zdGFydCA9IGZ1bmN0aW9uKGV2ZW50LCBjb25uZWN0aW9uLCBpZHgpIHtcblxuICAgIHZhciBjb250ZXh0LFxuICAgICAgICBnZnggPSBjYW52YXMuZ2V0R3JhcGhpY3MoY29ubmVjdGlvbiksXG4gICAgICAgIHNlZ21lbnRTdGFydEluZGV4ID0gaWR4IC0gMSxcbiAgICAgICAgc2VnbWVudEVuZEluZGV4ID0gaWR4LFxuICAgICAgICB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cyxcbiAgICAgICAgc2VnbWVudFN0YXJ0ID0gd2F5cG9pbnRzW3NlZ21lbnRTdGFydEluZGV4XSxcbiAgICAgICAgc2VnbWVudEVuZCA9IHdheXBvaW50c1tzZWdtZW50RW5kSW5kZXhdLFxuICAgICAgICBpbnRlcnNlY3Rpb24gPSBnZXRDb25uZWN0aW9uSW50ZXJzZWN0aW9uKGNhbnZhcywgd2F5cG9pbnRzLCBldmVudCksXG4gICAgICAgIGRpcmVjdGlvbiwgYXhpcywgZHJhZ1Bvc2l0aW9uO1xuXG4gICAgZGlyZWN0aW9uID0gcG9pbnRzQWxpZ25lZChzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQpO1xuXG4gICAgLy8gZG8gbm90IG1vdmUgZGlhZ29uYWwgY29ubmVjdGlvblxuICAgIGlmICghZGlyZWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdGhlIGF4aXMgd2hlcmUgd2UgYXJlIGdvaW5nIHRvIG1vdmUgdGhpbmdzXG4gICAgYXhpcyA9IGRpcmVjdGlvbiA9PT0gJ3YnID8gJ3gnIDogJ3knO1xuXG4gICAgaWYgKHNlZ21lbnRTdGFydEluZGV4ID09PSAwKSB7XG4gICAgICBzZWdtZW50U3RhcnQgPSBnZXREb2NraW5nKHNlZ21lbnRTdGFydCwgY29ubmVjdGlvbi5zb3VyY2UsIGF4aXMpO1xuICAgIH1cblxuICAgIGlmIChzZWdtZW50RW5kSW5kZXggPT09IHdheXBvaW50cy5sZW5ndGggLSAxKSB7XG4gICAgICBzZWdtZW50RW5kID0gZ2V0RG9ja2luZyhzZWdtZW50RW5kLCBjb25uZWN0aW9uLnRhcmdldCwgYXhpcyk7XG4gICAgfVxuXG4gICAgaWYgKGludGVyc2VjdGlvbikge1xuICAgICAgZHJhZ1Bvc2l0aW9uID0gaW50ZXJzZWN0aW9uLnBvaW50O1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIHNldCB0byBzZWdtZW50IGNlbnRlciBhcyBkZWZhdWx0XG4gICAgICBkcmFnUG9zaXRpb24gPSB7XG4gICAgICAgIHg6IChzZWdtZW50U3RhcnQueCArIHNlZ21lbnRFbmQueCkgLyAyLFxuICAgICAgICB5OiAoc2VnbWVudFN0YXJ0LnkgKyBzZWdtZW50RW5kLnkpIC8gMlxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb250ZXh0ID0ge1xuICAgICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICAgIHNlZ21lbnRTdGFydEluZGV4OiBzZWdtZW50U3RhcnRJbmRleCxcbiAgICAgIHNlZ21lbnRFbmRJbmRleDogc2VnbWVudEVuZEluZGV4LFxuICAgICAgc2VnbWVudFN0YXJ0OiBzZWdtZW50U3RhcnQsXG4gICAgICBzZWdtZW50RW5kOiBzZWdtZW50RW5kLFxuICAgICAgYXhpczogYXhpcyxcbiAgICAgIGRyYWdQb3NpdGlvbjogZHJhZ1Bvc2l0aW9uXG4gICAgfTtcblxuICAgIGRyYWdnaW5nLmluaXQoZXZlbnQsIGRyYWdQb3NpdGlvbiwgJ2Nvbm5lY3Rpb25TZWdtZW50Lm1vdmUnLCB7XG4gICAgICBjdXJzb3I6IGF4aXMgPT09ICd4JyA/ICdyZXNpemUtZXcnIDogJ3Jlc2l6ZS1ucycsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgICAgIGNvbm5lY3Rpb25HZng6IGdmeCxcbiAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDcm9wIGNvbm5lY3Rpb24gaWYgY29ubmVjdGlvbiBjcm9wcGluZyBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtDb25uZWN0aW9ufSBjb25uZWN0aW9uXG4gICAqIEBwYXJhbSB7QXJyYXk8UG9pbnQ+fSBuZXdXYXlwb2ludHNcbiAgICpcbiAgICogQHJldHVybiB7QXJyYXk8UG9pbnQ+fSBjcm9wcGVkIGNvbm5lY3Rpb24gd2F5cG9pbnRzXG4gICAqL1xuICBmdW5jdGlvbiBjcm9wQ29ubmVjdGlvbihjb25uZWN0aW9uLCBuZXdXYXlwb2ludHMpIHtcblxuICAgIC8vIGNyb3AgY29ubmVjdGlvbiwgaWYgZG9ja2luZyBzZXJ2aWNlIGlzIHByb3ZpZGVkIG9ubHlcbiAgICBpZiAoIWNvbm5lY3Rpb25Eb2NraW5nKSB7XG4gICAgICByZXR1cm4gbmV3V2F5cG9pbnRzO1xuICAgIH1cblxuICAgIHZhciBvbGRXYXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cyxcbiAgICAgICAgY3JvcHBlZFdheXBvaW50cztcblxuICAgIC8vIHRlbXBvcmFyeSBzZXQgbmV3IHdheXBvaW50c1xuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gbmV3V2F5cG9pbnRzO1xuXG4gICAgY3JvcHBlZFdheXBvaW50cyA9IGNvbm5lY3Rpb25Eb2NraW5nLmdldENyb3BwZWRXYXlwb2ludHMoY29ubmVjdGlvbik7XG5cbiAgICAvLyByZXN0b3JlIG9sZCB3YXlwb2ludHNcbiAgICBjb25uZWN0aW9uLndheXBvaW50cyA9IG9sZFdheXBvaW50cztcblxuICAgIHJldHVybiBjcm9wcGVkV2F5cG9pbnRzO1xuICB9XG5cbiAgLy8gRFJBR0dJTkcgSU1QTEVNRU5UQVRJT05cblxuICBmdW5jdGlvbiByZWRyYXdDb25uZWN0aW9uKGRhdGEpIHtcbiAgICBncmFwaGljc0ZhY3RvcnkudXBkYXRlKCdjb25uZWN0aW9uJywgZGF0YS5jb25uZWN0aW9uLCBkYXRhLmNvbm5lY3Rpb25HZngpO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRHJhZ2dlcihjb250ZXh0LCBzZWdtZW50T2Zmc2V0LCBldmVudCkge1xuXG4gICAgdmFyIG5ld1dheXBvaW50cyA9IGNvbnRleHQubmV3V2F5cG9pbnRzLFxuICAgICAgICBzZWdtZW50U3RhcnRJbmRleCA9IGNvbnRleHQuc2VnbWVudFN0YXJ0SW5kZXggKyBzZWdtZW50T2Zmc2V0LFxuICAgICAgICBzZWdtZW50U3RhcnQgPSBuZXdXYXlwb2ludHNbc2VnbWVudFN0YXJ0SW5kZXhdLFxuICAgICAgICBzZWdtZW50RW5kSW5kZXggPSBjb250ZXh0LnNlZ21lbnRFbmRJbmRleCArIHNlZ21lbnRPZmZzZXQsXG4gICAgICAgIHNlZ21lbnRFbmQgPSBuZXdXYXlwb2ludHNbc2VnbWVudEVuZEluZGV4XSxcbiAgICAgICAgYXhpcyA9IGZsaXBBeGlzKGNvbnRleHQuYXhpcyk7XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIGRyYWdnZXIgZG9lcyBub3QgbW92ZVxuICAgIC8vIG91dHNpZGUgdGhlIGNvbm5lY3Rpb25cbiAgICB2YXIgZHJhZ2dlclBvc2l0aW9uID0gYXhpc0ZlbmNlZChldmVudCwgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kLCBheGlzKTtcblxuICAgIC8vIHVwZGF0ZSBkcmFnZ2VyXG4gICAgdHJhbnNsYXRlKGNvbnRleHQuZHJhZ2dlckdmeCwgZHJhZ2dlclBvc2l0aW9uLngsIGRyYWdnZXJQb3NpdGlvbi55KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgd2F5cG9pbnRzIGZvciByZWR1bmRhbnQgb25lcyAoaS5lLiBvbiB0aGUgc2FtZSBheGlzKS5cbiAgICogUmV0dXJucyB0aGUgZmlsdGVyZWQgd2F5cG9pbnRzIGFuZCB0aGUgb2Zmc2V0IHJlbGF0ZWQgdG8gdGhlIHNlZ21lbnQgbW92ZS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxQb2ludD59IHdheXBvaW50c1xuICAgKiBAcGFyYW0ge0ludGVnZXJ9IHNlZ21lbnRTdGFydEluZGV4IG9mIG1vdmVkIHNlZ21lbnQgc3RhcnRcbiAgICpcbiAgICogQHJldHVybiB7T2JqZWN0fSB7IGZpbHRlcmVkV2F5cG9pbnRzLCBzZWdtZW50T2Zmc2V0IH1cbiAgICovXG4gIGZ1bmN0aW9uIGZpbHRlclJlZHVuZGFudFdheXBvaW50cyh3YXlwb2ludHMsIHNlZ21lbnRTdGFydEluZGV4KSB7XG5cbiAgICB2YXIgc2VnbWVudE9mZnNldCA9IDA7XG5cbiAgICB2YXIgZmlsdGVyZWRXYXlwb2ludHMgPSB3YXlwb2ludHMuZmlsdGVyKGZ1bmN0aW9uKHIsIGlkeCkge1xuICAgICAgaWYgKHBvaW50c09uTGluZSh3YXlwb2ludHNbaWR4IC0gMV0sIHdheXBvaW50c1tpZHggKyAxXSwgcikpIHtcblxuICAgICAgICAvLyByZW1vdmUgcG9pbnQgYW5kIGluY3JlbWVudCBvZmZzZXRcbiAgICAgICAgc2VnbWVudE9mZnNldCA9IGlkeCA8PSBzZWdtZW50U3RhcnRJbmRleCA/IHNlZ21lbnRPZmZzZXQgLSAxIDogc2VnbWVudE9mZnNldDtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBkb250IHJlbW92ZSBwb2ludFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgd2F5cG9pbnRzOiBmaWx0ZXJlZFdheXBvaW50cyxcbiAgICAgIHNlZ21lbnRPZmZzZXQ6IHNlZ21lbnRPZmZzZXRcbiAgICB9O1xuICB9XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3Rpb25TZWdtZW50Lm1vdmUuc3RhcnQnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gZXZlbnQuY29ubmVjdGlvbixcbiAgICAgICAgbGF5ZXIgPSBjYW52YXMuZ2V0TGF5ZXIoJ292ZXJsYXlzJyk7XG5cbiAgICBjb250ZXh0Lm9yaWdpbmFsV2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHMuc2xpY2UoKTtcblxuICAgIC8vIGFkZCBkcmFnZ2VyIGdmeFxuICAgIGNvbnRleHQuZHJhZ2dlckdmeCA9IGFkZFNlZ21lbnREcmFnZ2VyKGxheWVyLCBjb250ZXh0LnNlZ21lbnRTdGFydCwgY29udGV4dC5zZWdtZW50RW5kKTtcbiAgICBzdmdDbGFzc2VzKGNvbnRleHQuZHJhZ2dlckdmeCkuYWRkKCdkanMtZHJhZ2dpbmcnKTtcblxuICAgIGNhbnZhcy5hZGRNYXJrZXIoY29ubmVjdGlvbiwgTUFSS0VSX0NPTk5FQ1RfVVBEQVRJTkcpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignY29ubmVjdGlvblNlZ21lbnQubW92ZS5tb3ZlJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgc2VnbWVudFN0YXJ0SW5kZXggPSBjb250ZXh0LnNlZ21lbnRTdGFydEluZGV4LFxuICAgICAgICBzZWdtZW50RW5kSW5kZXggPSBjb250ZXh0LnNlZ21lbnRFbmRJbmRleCxcbiAgICAgICAgc2VnbWVudFN0YXJ0ID0gY29udGV4dC5zZWdtZW50U3RhcnQsXG4gICAgICAgIHNlZ21lbnRFbmQgPSBjb250ZXh0LnNlZ21lbnRFbmQsXG4gICAgICAgIGF4aXMgPSBjb250ZXh0LmF4aXM7XG5cbiAgICB2YXIgbmV3V2F5cG9pbnRzID0gY29udGV4dC5vcmlnaW5hbFdheXBvaW50cy5zbGljZSgpLFxuICAgICAgICBuZXdTZWdtZW50U3RhcnQgPSBheGlzQWRkKHNlZ21lbnRTdGFydCwgYXhpcywgZXZlbnRbJ2QnICsgYXhpc10pLFxuICAgICAgICBuZXdTZWdtZW50RW5kID0gYXhpc0FkZChzZWdtZW50RW5kLCBheGlzLCBldmVudFsnZCcgKyBheGlzXSk7XG5cbiAgICAvLyBvcmlnaW5hbCB3YXlwb2ludCBjb3VudCBhbmQgYWRkZWQgLyByZW1vdmVkXG4gICAgLy8gZnJvbSBzdGFydCB3YXlwb2ludCBkZWx0YS4gV2UgdXNlIHRoZSBsYXRlclxuICAgIC8vIHRvIHJldHJpZXZlIHRoZSB1cGRhdGVkIHNlZ21lbnRTdGFydEluZGV4IC8gc2VnbWVudEVuZEluZGV4XG4gICAgdmFyIHdheXBvaW50Q291bnQgPSBuZXdXYXlwb2ludHMubGVuZ3RoLFxuICAgICAgICBzZWdtZW50T2Zmc2V0ID0gMDtcblxuICAgIC8vIG1vdmUgc2VnbWVudCBzdGFydCAvIGVuZCBieSBheGlzIGRlbHRhXG4gICAgbmV3V2F5cG9pbnRzW3NlZ21lbnRTdGFydEluZGV4XSA9IG5ld1NlZ21lbnRTdGFydDtcbiAgICBuZXdXYXlwb2ludHNbc2VnbWVudEVuZEluZGV4XSA9IG5ld1NlZ21lbnRFbmQ7XG5cbiAgICB2YXIgc291cmNlVG9TZWdtZW50T3JpZW50YXRpb24sXG4gICAgICAgIHRhcmdldFRvU2VnbWVudE9yaWVudGF0aW9uO1xuXG4gICAgLy8gaGFuZGxlIGZpcnN0IHNlZ21lbnRcbiAgICBpZiAoc2VnbWVudFN0YXJ0SW5kZXggPCAyKSB7XG4gICAgICBzb3VyY2VUb1NlZ21lbnRPcmllbnRhdGlvbiA9IGdldE9yaWVudGF0aW9uKGNvbm5lY3Rpb24uc291cmNlLCBuZXdTZWdtZW50U3RhcnQpO1xuXG4gICAgICAvLyBmaXJzdCBiZW5kcG9pbnQsIHJlbW92ZSBmaXJzdCBzZWdtZW50IGlmIGludGVyc2VjdGluZ1xuICAgICAgaWYgKHNlZ21lbnRTdGFydEluZGV4ID09PSAxKSB7XG5cbiAgICAgICAgaWYgKHNvdXJjZVRvU2VnbWVudE9yaWVudGF0aW9uID09PSAnaW50ZXJzZWN0Jykge1xuICAgICAgICAgIG5ld1dheXBvaW50cy5zaGlmdCgpO1xuICAgICAgICAgIG5ld1dheXBvaW50c1swXSA9IG5ld1NlZ21lbnRTdGFydDtcbiAgICAgICAgICBzZWdtZW50T2Zmc2V0LS07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZG9ja2luZyBwb2ludCwgYWRkIHNlZ21lbnQgaWYgbm90IGludGVyc2VjdGluZyBhbnltb3JlXG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHNvdXJjZVRvU2VnbWVudE9yaWVudGF0aW9uICE9PSAnaW50ZXJzZWN0Jykge1xuICAgICAgICAgIG5ld1dheXBvaW50cy51bnNoaWZ0KHNlZ21lbnRTdGFydCk7XG4gICAgICAgICAgc2VnbWVudE9mZnNldCsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIGxhc3Qgc2VnbWVudFxuICAgIGlmIChzZWdtZW50RW5kSW5kZXggPiB3YXlwb2ludENvdW50IC0gMykge1xuICAgICAgdGFyZ2V0VG9TZWdtZW50T3JpZW50YXRpb24gPSBnZXRPcmllbnRhdGlvbihjb25uZWN0aW9uLnRhcmdldCwgbmV3U2VnbWVudEVuZCk7XG5cbiAgICAgIC8vIGxhc3QgYmVuZHBvaW50LCByZW1vdmUgbGFzdCBzZWdtZW50IGlmIGludGVyc2VjdGluZ1xuICAgICAgaWYgKHNlZ21lbnRFbmRJbmRleCA9PT0gd2F5cG9pbnRDb3VudCAtIDIpIHtcblxuICAgICAgICBpZiAodGFyZ2V0VG9TZWdtZW50T3JpZW50YXRpb24gPT09ICdpbnRlcnNlY3QnKSB7XG4gICAgICAgICAgbmV3V2F5cG9pbnRzLnBvcCgpO1xuICAgICAgICAgIG5ld1dheXBvaW50c1tuZXdXYXlwb2ludHMubGVuZ3RoIC0gMV0gPSBuZXdTZWdtZW50RW5kO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGxhc3QgYmVuZHBvaW50LCByZW1vdmUgbGFzdCBzZWdtZW50IGlmIGludGVyc2VjdGluZ1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmICh0YXJnZXRUb1NlZ21lbnRPcmllbnRhdGlvbiAhPT0gJ2ludGVyc2VjdCcpIHtcbiAgICAgICAgICBuZXdXYXlwb2ludHMucHVzaChzZWdtZW50RW5kKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHVwZGF0ZSBjb25uZWN0aW9uIHdheXBvaW50c1xuICAgIGNvbnRleHQubmV3V2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHMgPSBjcm9wQ29ubmVjdGlvbihjb25uZWN0aW9uLCBuZXdXYXlwb2ludHMpO1xuXG4gICAgLy8gdXBkYXRlIGRyYWdnZXIgcG9zaXRpb25cbiAgICB1cGRhdGVEcmFnZ2VyKGNvbnRleHQsIHNlZ21lbnRPZmZzZXQsIGV2ZW50KTtcblxuICAgIC8vIHNhdmUgc2VnbWVudE9mZnNldCBpbiBjb250ZXh0XG4gICAgY29udGV4dC5uZXdTZWdtZW50U3RhcnRJbmRleCA9IHNlZ21lbnRTdGFydEluZGV4ICsgc2VnbWVudE9mZnNldDtcblxuICAgIC8vIHJlZHJhdyBjb25uZWN0aW9uXG4gICAgcmVkcmF3Q29ubmVjdGlvbihldmVudCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjb25uZWN0aW9uU2VnbWVudC5tb3ZlLmhvdmVyJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIGV2ZW50LmNvbnRleHQuaG92ZXIgPSBldmVudC5ob3ZlcjtcbiAgICBjYW52YXMuYWRkTWFya2VyKGV2ZW50LmhvdmVyLCBNQVJLRVJfQ09OTkVDVF9IT1ZFUik7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnY29ubmVjdGlvblNlZ21lbnQubW92ZS5vdXQnLFxuICAgICdjb25uZWN0aW9uU2VnbWVudC5tb3ZlLmNsZWFudXAnXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICAvLyByZW1vdmUgY29ubmVjdCBtYXJrZXJcbiAgICAvLyBpZiBpdCB3YXMgYWRkZWRcbiAgICB2YXIgaG92ZXIgPSBldmVudC5jb250ZXh0LmhvdmVyO1xuXG4gICAgaWYgKGhvdmVyKSB7XG4gICAgICBjYW52YXMucmVtb3ZlTWFya2VyKGhvdmVyLCBNQVJLRVJfQ09OTkVDVF9IT1ZFUik7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignY29ubmVjdGlvblNlZ21lbnQubW92ZS5jbGVhbnVwJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbjtcblxuICAgIC8vIHJlbW92ZSBkcmFnZ2VyIGdmeFxuICAgIGlmIChjb250ZXh0LmRyYWdnZXJHZngpIHtcbiAgICAgIHN2Z1JlbW92ZShjb250ZXh0LmRyYWdnZXJHZngpO1xuICAgIH1cblxuICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoY29ubmVjdGlvbiwgTUFSS0VSX0NPTk5FQ1RfVVBEQVRJTkcpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbihbXG4gICAgJ2Nvbm5lY3Rpb25TZWdtZW50Lm1vdmUuY2FuY2VsJyxcbiAgICAnY29ubmVjdGlvblNlZ21lbnQubW92ZS5lbmQnXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uO1xuXG4gICAgY29ubmVjdGlvbi53YXlwb2ludHMgPSBjb250ZXh0Lm9yaWdpbmFsV2F5cG9pbnRzO1xuXG4gICAgcmVkcmF3Q29ubmVjdGlvbihldmVudCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjb25uZWN0aW9uU2VnbWVudC5tb3ZlLmVuZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIG5ld1dheXBvaW50cyA9IGNvbnRleHQubmV3V2F5cG9pbnRzLFxuICAgICAgICBuZXdTZWdtZW50U3RhcnRJbmRleCA9IGNvbnRleHQubmV3U2VnbWVudFN0YXJ0SW5kZXg7XG5cbiAgICAvLyBlbnN1cmUgd2UgaGF2ZSBhY3R1YWwgcGl4ZWwgdmFsdWVzIGJlbmRwb2ludFxuICAgIC8vIGNvb3JkaW5hdGVzIChpbXBvcnRhbnQgd2hlbiB6b29tIGxldmVsIHdhcyA+IDEgZHVyaW5nIG1vdmUpXG4gICAgbmV3V2F5cG9pbnRzID0gbmV3V2F5cG9pbnRzLm1hcChmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcmlnaW5hbDogcC5vcmlnaW5hbCxcbiAgICAgICAgeDogTWF0aC5yb3VuZChwLngpLFxuICAgICAgICB5OiBNYXRoLnJvdW5kKHAueSlcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBhcHBseSBmaWx0ZXIgcmVkdW5hbnQgd2F5cG9pbnRzXG4gICAgdmFyIGZpbHRlcmVkID0gZmlsdGVyUmVkdW5kYW50V2F5cG9pbnRzKG5ld1dheXBvaW50cywgbmV3U2VnbWVudFN0YXJ0SW5kZXgpO1xuXG4gICAgLy8gZ2V0IGZpbHRlcmVkIHdheXBvaW50c1xuICAgIHZhciBmaWx0ZXJlZFdheXBvaW50cyA9IGZpbHRlcmVkLndheXBvaW50cyxcbiAgICAgICAgY3JvcHBlZFdheXBvaW50cyA9IGNyb3BDb25uZWN0aW9uKGNvbm5lY3Rpb24sIGZpbHRlcmVkV2F5cG9pbnRzKSxcbiAgICAgICAgc2VnbWVudE9mZnNldCA9IGZpbHRlcmVkLnNlZ21lbnRPZmZzZXQ7XG5cbiAgICB2YXIgaGludHMgPSB7XG4gICAgICBzZWdtZW50TW92ZToge1xuICAgICAgICBzZWdtZW50U3RhcnRJbmRleDogY29udGV4dC5zZWdtZW50U3RhcnRJbmRleCxcbiAgICAgICAgbmV3U2VnbWVudFN0YXJ0SW5kZXg6IG5ld1NlZ21lbnRTdGFydEluZGV4ICsgc2VnbWVudE9mZnNldFxuICAgICAgfVxuICAgIH07XG5cbiAgICBtb2RlbGluZy51cGRhdGVXYXlwb2ludHMoY29ubmVjdGlvbiwgY3JvcHBlZFdheXBvaW50cywgaGludHMpO1xuICB9KTtcbn1cblxuQ29ubmVjdGlvblNlZ21lbnRNb3ZlLiRpbmplY3QgPSBbXG4gICdpbmplY3RvcicsXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnLFxuICAnZHJhZ2dpbmcnLFxuICAnZ3JhcGhpY3NGYWN0b3J5JyxcbiAgJ21vZGVsaW5nJ1xuXTtcbiIsImltcG9ydCBEcmFnZ2luZ01vZHVsZSBmcm9tICcuLi9kcmFnZ2luZyc7XG5pbXBvcnQgUnVsZXNNb2R1bGUgZnJvbSAnLi4vcnVsZXMnO1xuXG5pbXBvcnQgQmVuZHBvaW50cyBmcm9tICcuL0JlbmRwb2ludHMnO1xuaW1wb3J0IEJlbmRwb2ludE1vdmUgZnJvbSAnLi9CZW5kcG9pbnRNb3ZlJztcbmltcG9ydCBCZW5kcG9pbnRNb3ZlUHJldmlldyBmcm9tICcuL0JlbmRwb2ludE1vdmVQcmV2aWV3JztcbmltcG9ydCBDb25uZWN0aW9uU2VnbWVudE1vdmUgZnJvbSAnLi9Db25uZWN0aW9uU2VnbWVudE1vdmUnO1xuaW1wb3J0IEJlbmRwb2ludFNuYXBwaW5nIGZyb20gJy4vQmVuZHBvaW50U25hcHBpbmcnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBEcmFnZ2luZ01vZHVsZSxcbiAgICBSdWxlc01vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAnYmVuZHBvaW50cycsICdiZW5kcG9pbnRTbmFwcGluZycsICdiZW5kcG9pbnRNb3ZlUHJldmlldycgXSxcbiAgYmVuZHBvaW50czogWyAndHlwZScsIEJlbmRwb2ludHMgXSxcbiAgYmVuZHBvaW50TW92ZTogWyAndHlwZScsIEJlbmRwb2ludE1vdmUgXSxcbiAgYmVuZHBvaW50TW92ZVByZXZpZXc6IFsgJ3R5cGUnLCBCZW5kcG9pbnRNb3ZlUHJldmlldyBdLFxuICBjb25uZWN0aW9uU2VnbWVudE1vdmU6IFsgJ3R5cGUnLCBDb25uZWN0aW9uU2VnbWVudE1vdmUgXSxcbiAgYmVuZHBvaW50U25hcHBpbmc6IFsgJ3R5cGUnLCBCZW5kcG9pbnRTbmFwcGluZyBdXG59O1xuIiwiaW1wb3J0IHtcbiAgZ2V0VHlwZSBhcyBnZXRFbGVtZW50VHlwZVxufSBmcm9tICcuLi8uLi91dGlsL0VsZW1lbnRzJztcblxuLyoqXG4gKiBBZGRzIGNoYW5nZSBzdXBwb3J0IHRvIHRoZSBkaWFncmFtLCBpbmNsdWRpbmdcbiAqXG4gKiA8dWw+XG4gKiAgIDxsaT5yZWRyYXdpbmcgc2hhcGVzIGFuZCBjb25uZWN0aW9ucyBvbiBjaGFuZ2U8L2xpPlxuICogPC91bD5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICogQHBhcmFtIHtFbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxuICogQHBhcmFtIHtHcmFwaGljc0ZhY3Rvcnl9IGdyYXBoaWNzRmFjdG9yeVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDaGFuZ2VTdXBwb3J0KFxuICAgIGV2ZW50QnVzLCBjYW52YXMsIGVsZW1lbnRSZWdpc3RyeSxcbiAgICBncmFwaGljc0ZhY3RvcnkpIHtcblxuXG4gIC8vIHJlZHJhdyBzaGFwZXMgLyBjb25uZWN0aW9ucyBvbiBjaGFuZ2VcblxuICBldmVudEJ1cy5vbignZWxlbWVudC5jaGFuZ2VkJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudDtcblxuICAgIC8vIGVsZW1lbnQgbWlnaHQgaGF2ZSBiZWVuIGRlbGV0ZWQgYW5kIHJlcGxhY2VkIGJ5IG5ldyBlbGVtZW50IHdpdGggc2FtZSBJRFxuICAgIC8vIHRodXMgY2hlY2sgZm9yIHBhcmVudCBvZiBlbGVtZW50IGV4Y2VwdCBmb3Igcm9vdCBlbGVtZW50XG4gICAgaWYgKGVsZW1lbnQucGFyZW50IHx8IGVsZW1lbnQgPT09IGNhbnZhcy5nZXRSb290RWxlbWVudCgpKSB7XG4gICAgICBldmVudC5nZnggPSBlbGVtZW50UmVnaXN0cnkuZ2V0R3JhcGhpY3MoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgLy8gc2hhcGUgKyBnZnggbWF5IGhhdmUgYmVlbiBkZWxldGVkXG4gICAgaWYgKCFldmVudC5nZngpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudEJ1cy5maXJlKGdldEVsZW1lbnRUeXBlKGVsZW1lbnQpICsgJy5jaGFuZ2VkJywgZXZlbnQpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignZWxlbWVudHMuY2hhbmdlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgZWxlbWVudHMgPSBldmVudC5lbGVtZW50cztcblxuICAgIGVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZSkge1xuICAgICAgZXZlbnRCdXMuZmlyZSgnZWxlbWVudC5jaGFuZ2VkJywgeyBlbGVtZW50OiBlIH0pO1xuICAgIH0pO1xuXG4gICAgZ3JhcGhpY3NGYWN0b3J5LnVwZGF0ZUNvbnRhaW5tZW50cyhlbGVtZW50cyk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdzaGFwZS5jaGFuZ2VkJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBncmFwaGljc0ZhY3RvcnkudXBkYXRlKCdzaGFwZScsIGV2ZW50LmVsZW1lbnQsIGV2ZW50LmdmeCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjb25uZWN0aW9uLmNoYW5nZWQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIGdyYXBoaWNzRmFjdG9yeS51cGRhdGUoJ2Nvbm5lY3Rpb24nLCBldmVudC5lbGVtZW50LCBldmVudC5nZngpO1xuICB9KTtcbn1cblxuQ2hhbmdlU3VwcG9ydC4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdncmFwaGljc0ZhY3RvcnknXG5dOyIsImltcG9ydCBDaGFuZ2VTdXBwb3J0IGZyb20gJy4vQ2hhbmdlU3VwcG9ydCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ2NoYW5nZVN1cHBvcnQnXSxcbiAgY2hhbmdlU3VwcG9ydDogWyAndHlwZScsIENoYW5nZVN1cHBvcnQgXVxufTsiLCIvKipcbiAqIEEgY2xpcCBib2FyZCBzdHViXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENsaXBib2FyZCgpIHt9XG5cblxuQ2xpcGJvYXJkLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2RhdGE7XG59O1xuXG5DbGlwYm9hcmQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgdGhpcy5fZGF0YSA9IGRhdGE7XG59O1xuXG5DbGlwYm9hcmQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblxuICBkZWxldGUgdGhpcy5fZGF0YTtcblxuICByZXR1cm4gZGF0YTtcbn07XG5cbkNsaXBib2FyZC5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gIXRoaXMuX2RhdGE7XG59OyIsImltcG9ydCBDbGlwYm9hcmQgZnJvbSAnLi9DbGlwYm9hcmQnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNsaXBib2FyZDogWyAndHlwZScsIENsaXBib2FyZCBdXG59O1xuIiwiaW1wb3J0IHtcbiAgZ2V0TWlkXG59IGZyb20gJy4uLy4uL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNOaWwsXG4gIGlzT2JqZWN0XG59IGZyb20gJ21pbi1kYXNoJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDb25uZWN0KGV2ZW50QnVzLCBkcmFnZ2luZywgbW9kZWxpbmcsIHJ1bGVzKSB7XG5cbiAgLy8gcnVsZXNcblxuICBmdW5jdGlvbiBjYW5Db25uZWN0KHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHJ1bGVzLmFsbG93ZWQoJ2Nvbm5lY3Rpb24uY3JlYXRlJywge1xuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICB0YXJnZXQ6IHRhcmdldFxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuQ29ubmVjdFJldmVyc2Uoc291cmNlLCB0YXJnZXQpIHtcbiAgICByZXR1cm4gY2FuQ29ubmVjdCh0YXJnZXQsIHNvdXJjZSk7XG4gIH1cblxuXG4gIC8vIGV2ZW50IGhhbmRsZXJzXG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3QuaG92ZXInLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc3RhcnQgPSBjb250ZXh0LnN0YXJ0LFxuICAgICAgICBob3ZlciA9IGV2ZW50LmhvdmVyLFxuICAgICAgICBjYW5FeGVjdXRlO1xuXG4gICAgLy8gY2FjaGUgaG92ZXIgc3RhdGVcbiAgICBjb250ZXh0LmhvdmVyID0gaG92ZXI7XG5cbiAgICBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlID0gY2FuQ29ubmVjdChzdGFydCwgaG92ZXIpO1xuXG4gICAgLy8gaWdub3JlIGhvdmVyXG4gICAgaWYgKGlzTmlsKGNhbkV4ZWN1dGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNhbkV4ZWN1dGUgIT09IGZhbHNlKSB7XG4gICAgICBjb250ZXh0LnNvdXJjZSA9IHN0YXJ0O1xuICAgICAgY29udGV4dC50YXJnZXQgPSBob3ZlcjtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGUgPSBjYW5Db25uZWN0UmV2ZXJzZShzdGFydCwgaG92ZXIpO1xuXG4gICAgLy8gaWdub3JlIGhvdmVyXG4gICAgaWYgKGlzTmlsKGNhbkV4ZWN1dGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNhbkV4ZWN1dGUgIT09IGZhbHNlKSB7XG4gICAgICBjb250ZXh0LnNvdXJjZSA9IGhvdmVyO1xuICAgICAgY29udGV4dC50YXJnZXQgPSBzdGFydDtcbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKFsgJ2Nvbm5lY3Qub3V0JywgJ2Nvbm5lY3QuY2xlYW51cCcgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQ7XG5cbiAgICBjb250ZXh0LmhvdmVyID0gbnVsbDtcbiAgICBjb250ZXh0LnNvdXJjZSA9IG51bGw7XG4gICAgY29udGV4dC50YXJnZXQgPSBudWxsO1xuXG4gICAgY29udGV4dC5jYW5FeGVjdXRlID0gZmFsc2U7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjb25uZWN0LmVuZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlLFxuICAgICAgICBjb25uZWN0aW9uU3RhcnQgPSBjb250ZXh0LmNvbm5lY3Rpb25TdGFydCxcbiAgICAgICAgY29ubmVjdGlvbkVuZCA9IHtcbiAgICAgICAgICB4OiBldmVudC54LFxuICAgICAgICAgIHk6IGV2ZW50LnlcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlID0gY29udGV4dC5zb3VyY2UsXG4gICAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0O1xuXG4gICAgaWYgKCFjYW5FeGVjdXRlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGF0dHJzID0gbnVsbCxcbiAgICAgICAgaGludHMgPSB7XG4gICAgICAgICAgY29ubmVjdGlvblN0YXJ0OiBpc1JldmVyc2UoY29udGV4dCkgPyBjb25uZWN0aW9uRW5kIDogY29ubmVjdGlvblN0YXJ0LFxuICAgICAgICAgIGNvbm5lY3Rpb25FbmQ6IGlzUmV2ZXJzZShjb250ZXh0KSA/IGNvbm5lY3Rpb25TdGFydCA6IGNvbm5lY3Rpb25FbmRcbiAgICAgICAgfTtcblxuICAgIGlmIChpc09iamVjdChjYW5FeGVjdXRlKSkge1xuICAgICAgYXR0cnMgPSBjYW5FeGVjdXRlO1xuICAgIH1cblxuICAgIG1vZGVsaW5nLmNvbm5lY3Qoc291cmNlLCB0YXJnZXQsIGF0dHJzLCBoaW50cyk7XG4gIH0pO1xuXG5cbiAgLy8gQVBJXG5cbiAgLyoqXG4gICAqIFN0YXJ0IGNvbm5lY3Qgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50fSBldmVudFxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBzdGFydFxuICAgKiBAcGFyYW0ge1BvaW50fSBbY29ubmVjdGlvblN0YXJ0XVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthdXRvQWN0aXZhdGU9ZmFsc2VdXG4gICAqL1xuICB0aGlzLnN0YXJ0ID0gZnVuY3Rpb24oZXZlbnQsIHN0YXJ0LCBjb25uZWN0aW9uU3RhcnQsIGF1dG9BY3RpdmF0ZSkge1xuICAgIGlmICghaXNPYmplY3QoY29ubmVjdGlvblN0YXJ0KSkge1xuICAgICAgYXV0b0FjdGl2YXRlID0gY29ubmVjdGlvblN0YXJ0O1xuICAgICAgY29ubmVjdGlvblN0YXJ0ID0gZ2V0TWlkKHN0YXJ0KTtcbiAgICB9XG5cbiAgICBkcmFnZ2luZy5pbml0KGV2ZW50LCAnY29ubmVjdCcsIHtcbiAgICAgIGF1dG9BY3RpdmF0ZTogYXV0b0FjdGl2YXRlLFxuICAgICAgZGF0YToge1xuICAgICAgICBzaGFwZTogc3RhcnQsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgICAgY29ubmVjdGlvblN0YXJ0OiBjb25uZWN0aW9uU3RhcnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuXG5Db25uZWN0LiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdkcmFnZ2luZycsXG4gICdtb2RlbGluZycsXG4gICdydWxlcydcbl07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JldmVyc2UoY29udGV4dCkge1xuICB2YXIgaG92ZXIgPSBjb250ZXh0LmhvdmVyLFxuICAgICAgc291cmNlID0gY29udGV4dC5zb3VyY2UsXG4gICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldDtcblxuICByZXR1cm4gaG92ZXIgJiYgc291cmNlICYmIGhvdmVyID09PSBzb3VyY2UgJiYgc291cmNlICE9PSB0YXJnZXQ7XG59IiwiaW1wb3J0IHsgaXNSZXZlcnNlIH0gZnJvbSAnLi9Db25uZWN0JztcblxudmFyIEhJR0hfUFJJT1JJVFkgPSAxMTAwLFxuICAgIExPV19QUklPUklUWSA9IDkwMDtcblxudmFyIE1BUktFUl9PSyA9ICdjb25uZWN0LW9rJyxcbiAgICBNQVJLRVJfTk9UX09LID0gJ2Nvbm5lY3Qtbm90LW9rJztcblxuLyoqXG4gKiBTaG93cyBjb25uZWN0aW9uIHByZXZpZXcgZHVyaW5nIGNvbm5lY3QuXG4gKlxuICogQHBhcmFtIHtkaWRpLkluamVjdG9yfSBpbmplY3RvclxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29ubmVjdFByZXZpZXcoaW5qZWN0b3IsIGV2ZW50QnVzLCBjYW52YXMpIHtcbiAgdmFyIGNvbm5lY3Rpb25QcmV2aWV3ID0gaW5qZWN0b3IuZ2V0KCdjb25uZWN0aW9uUHJldmlldycsIGZhbHNlKTtcblxuICBjb25uZWN0aW9uUHJldmlldyAmJiBldmVudEJ1cy5vbignY29ubmVjdC5tb3ZlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNhbkNvbm5lY3QgPSBjb250ZXh0LmNhbkV4ZWN1dGUsXG4gICAgICAgIGhvdmVyID0gY29udGV4dC5ob3ZlcixcbiAgICAgICAgc291cmNlID0gY29udGV4dC5zb3VyY2UsXG4gICAgICAgIHN0YXJ0ID0gY29udGV4dC5zdGFydCxcbiAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGNvbnRleHQuc3RhcnRQb3NpdGlvbixcbiAgICAgICAgY29ubmVjdGlvblN0YXJ0ID0gY29udGV4dC5jb25uZWN0aW9uU3RhcnQsXG4gICAgICAgIGNvbm5lY3Rpb25FbmQgPSBjb250ZXh0LmNvbm5lY3Rpb25FbmQsXG4gICAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0O1xuXG4gICAgaWYgKCFjb25uZWN0aW9uU3RhcnQpIHtcbiAgICAgIGNvbm5lY3Rpb25TdGFydCA9IGlzUmV2ZXJzZShjb250ZXh0KSA/IHtcbiAgICAgICAgeDogZXZlbnQueCxcbiAgICAgICAgeTogZXZlbnQueVxuICAgICAgfSA6IHN0YXJ0UG9zaXRpb247XG4gICAgfVxuXG4gICAgaWYgKCFjb25uZWN0aW9uRW5kKSB7XG4gICAgICBjb25uZWN0aW9uRW5kID0gaXNSZXZlcnNlKGNvbnRleHQpID8gc3RhcnRQb3NpdGlvbiA6IHtcbiAgICAgICAgeDogZXZlbnQueCxcbiAgICAgICAgeTogZXZlbnQueVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25uZWN0aW9uUHJldmlldy5kcmF3UHJldmlldyhjb250ZXh0LCBjYW5Db25uZWN0LCB7XG4gICAgICBzb3VyY2U6IHNvdXJjZSB8fCBzdGFydCxcbiAgICAgIHRhcmdldDogdGFyZ2V0IHx8IGhvdmVyLFxuICAgICAgY29ubmVjdGlvblN0YXJ0OiBjb25uZWN0aW9uU3RhcnQsXG4gICAgICBjb25uZWN0aW9uRW5kOiBjb25uZWN0aW9uRW5kXG4gICAgfSk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjb25uZWN0LmhvdmVyJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgaG92ZXIgPSBldmVudC5ob3ZlcixcbiAgICAgICAgY2FuRXhlY3V0ZSA9IGNvbnRleHQuY2FuRXhlY3V0ZTtcblxuICAgIC8vIGlnbm9yZSBob3ZlclxuICAgIGlmIChjYW5FeGVjdXRlID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2FudmFzLmFkZE1hcmtlcihob3ZlciwgY2FuRXhlY3V0ZSA/IE1BUktFUl9PSyA6IE1BUktFUl9OT1RfT0spO1xuICB9KTtcblxuICBldmVudEJ1cy5vbihbXG4gICAgJ2Nvbm5lY3Qub3V0JyxcbiAgICAnY29ubmVjdC5jbGVhbnVwJ1xuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBob3ZlciA9IGV2ZW50LmhvdmVyO1xuXG4gICAgaWYgKGhvdmVyKSB7XG4gICAgICBjYW52YXMucmVtb3ZlTWFya2VyKGhvdmVyLCBNQVJLRVJfT0spO1xuICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihob3ZlciwgTUFSS0VSX05PVF9PSyk7XG4gICAgfVxuICB9KTtcblxuICBjb25uZWN0aW9uUHJldmlldyAmJiBldmVudEJ1cy5vbignY29ubmVjdC5jbGVhbnVwJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBjb25uZWN0aW9uUHJldmlldy5jbGVhblVwKGV2ZW50LmNvbnRleHQpO1xuICB9KTtcbn1cblxuQ29ubmVjdFByZXZpZXcuJGluamVjdCA9IFtcbiAgJ2luamVjdG9yJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcydcbl07XG4iLCJpbXBvcnQgU2VsZWN0aW9uTW9kdWxlIGZyb20gJy4uL3NlbGVjdGlvbic7XG5pbXBvcnQgUnVsZXNNb2R1bGUgZnJvbSAnLi4vcnVsZXMnO1xuaW1wb3J0IERyYWdnaW5nTW9kdWxlIGZyb20gJy4uL2RyYWdnaW5nJztcblxuaW1wb3J0IENvbm5lY3QgZnJvbSAnLi9Db25uZWN0JztcbmltcG9ydCBDb25uZWN0UHJldmlldyBmcm9tICcuL0Nvbm5lY3RQcmV2aWV3JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIFNlbGVjdGlvbk1vZHVsZSxcbiAgICBSdWxlc01vZHVsZSxcbiAgICBEcmFnZ2luZ01vZHVsZVxuICBdLFxuICBfX2luaXRfXzogW1xuICAgICdjb25uZWN0UHJldmlldydcbiAgXSxcbiAgY29ubmVjdDogWyAndHlwZScsIENvbm5lY3QgXSxcbiAgY29ubmVjdFByZXZpZXc6IFsgJ3R5cGUnLCBDb25uZWN0UHJldmlldyBdXG59O1xuIiwiaW1wb3J0IHtcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICBjbGFzc2VzIGFzIHN2Z0NsYXNzZXMsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGUsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmUsXG4gIGNsZWFyIGFzIHN2Z0NsZWFyXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgaXNPYmplY3Rcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBnZXRFbGVtZW50TGluZUludGVyc2VjdGlvbixcbiAgZ2V0TWlkXG59IGZyb20gJy4uLy4uL2xheW91dC9MYXlvdXRVdGlsJztcblxuXG52YXIgTUFSS0VSX0NPTk5FQ1RJT05fUFJFVklFVyA9ICdkanMtY29ubmVjdGlvbi1wcmV2aWV3JztcblxuLyoqXG4gKiBEcmF3cyBjb25uZWN0aW9uIHByZXZpZXcuIE9wdGlvbmFsbHksIHRoaXMgY2FuIHVzZSBsYXlvdXRlciBhbmQgY29ubmVjdGlvbiBkb2NraW5nIHRvIGRyYXdcbiAqIGJldHRlciBsb29raW5nIHByZXZpZXdzLlxuICpcbiAqIEBwYXJhbSB7ZGlkaS5JbmplY3Rvcn0gaW5qZWN0b3JcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7R3JhcGhpY3NGYWN0b3J5fSBncmFwaGljc0ZhY3RvcnlcbiAqIEBwYXJhbSB7RWxlbWVudEZhY3Rvcnl9IGVsZW1lbnRGYWN0b3J5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvbm5lY3Rpb25QcmV2aWV3KFxuICAgIGluamVjdG9yLFxuICAgIGNhbnZhcyxcbiAgICBncmFwaGljc0ZhY3RvcnksXG4gICAgZWxlbWVudEZhY3Rvcnlcbikge1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX2dyYXBoaWNzRmFjdG9yeSA9IGdyYXBoaWNzRmFjdG9yeTtcbiAgdGhpcy5fZWxlbWVudEZhY3RvcnkgPSBlbGVtZW50RmFjdG9yeTtcblxuICAvLyBvcHRpb25hbCBjb21wb25lbnRzXG4gIHRoaXMuX2Nvbm5lY3Rpb25Eb2NraW5nID0gaW5qZWN0b3IuZ2V0KCdjb25uZWN0aW9uRG9ja2luZycsIGZhbHNlKTtcbiAgdGhpcy5fbGF5b3V0ZXIgPSBpbmplY3Rvci5nZXQoJ2xheW91dGVyJywgZmFsc2UpO1xufVxuXG5Db25uZWN0aW9uUHJldmlldy4kaW5qZWN0ID0gW1xuICAnaW5qZWN0b3InLFxuICAnY2FudmFzJyxcbiAgJ2dyYXBoaWNzRmFjdG9yeScsXG4gICdlbGVtZW50RmFjdG9yeSdcbl07XG5cbi8qKlxuICogRHJhdyBjb25uZWN0aW9uIHByZXZpZXcuXG4gKlxuICogUHJvdmlkZSBhdCBsZWFzdCBvbmUgb2YgPHNvdXJjZSwgY29ubmVjdGlvblN0YXJ0PiBhbmQgPHRhcmdldCwgY29ubmVjdGlvbkVuZD4gdG8gY3JlYXRlIGEgcHJldmlldy5cbiAqIEluIHRoZSBjbGVhbiB1cCBzdGFnZSwgY2FsbCBgY29ubmVjdGlvblByZXZpZXcjY2xlYW5VcGAgd2l0aCB0aGUgY29udGV4dCB0byByZW1vdmUgcHJldmlldy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtPYmplY3R8Ym9vbGVhbn0gY2FuQ29ubmVjdFxuICogQHBhcmFtIHtPYmplY3R9IGhpbnRzXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5zaGFwZX0gW2hpbnRzLnNvdXJjZV0gc291cmNlIGVsZW1lbnRcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLnNoYXBlfSBbaGludHMudGFyZ2V0XSB0YXJnZXQgZWxlbWVudFxuICogQHBhcmFtIHtQb2ludH0gW2hpbnRzLmNvbm5lY3Rpb25TdGFydF0gY29ubmVjdGlvbiBwcmV2aWV3IHN0YXJ0XG4gKiBAcGFyYW0ge1BvaW50fSBbaGludHMuY29ubmVjdGlvbkVuZF0gY29ubmVjdGlvbiBwcmV2aWV3IGVuZFxuICogQHBhcmFtIHtBcnJheTxQb2ludD59IFtoaW50cy53YXlwb2ludHNdIHByb3ZpZGVkIHdheXBvaW50cyBmb3IgcHJldmlld1xuICogQHBhcmFtIHtib29sZWFufSBbaGludHMubm9MYXlvdXRdIHRydWUgaWYgcHJldmlldyBzaG91bGQgbm90IGJlIGxhaWQgb3V0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtoaW50cy5ub0Nyb3BwaW5nXSB0cnVlIGlmIHByZXZpZXcgc2hvdWxkIG5vdCBiZSBjcm9wcGVkXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtoaW50cy5ub05vb3BdIHRydWUgaWYgc2ltcGxlIGNvbm5lY3Rpb24gc2hvdWxkIG5vdCBiZSBkcmF3blxuICovXG5Db25uZWN0aW9uUHJldmlldy5wcm90b3R5cGUuZHJhd1ByZXZpZXcgPSBmdW5jdGlvbihjb250ZXh0LCBjYW5Db25uZWN0LCBoaW50cykge1xuXG4gIGhpbnRzID0gaGludHMgfHwge307XG5cbiAgdmFyIGNvbm5lY3Rpb25QcmV2aWV3R2Z4ID0gY29udGV4dC5jb25uZWN0aW9uUHJldmlld0dmeCxcbiAgICAgIGdldENvbm5lY3Rpb24gPSBjb250ZXh0LmdldENvbm5lY3Rpb24sXG4gICAgICBzb3VyY2UgPSBoaW50cy5zb3VyY2UsXG4gICAgICB0YXJnZXQgPSBoaW50cy50YXJnZXQsXG4gICAgICB3YXlwb2ludHMgPSBoaW50cy53YXlwb2ludHMsXG4gICAgICBjb25uZWN0aW9uU3RhcnQgPSBoaW50cy5jb25uZWN0aW9uU3RhcnQsXG4gICAgICBjb25uZWN0aW9uRW5kID0gaGludHMuY29ubmVjdGlvbkVuZCxcbiAgICAgIG5vTGF5b3V0ID0gaGludHMubm9MYXlvdXQsXG4gICAgICBub0Nyb3BwaW5nID0gaGludHMubm9Dcm9wcGluZyxcbiAgICAgIG5vTm9vcCA9IGhpbnRzLm5vTm9vcCxcbiAgICAgIGNvbm5lY3Rpb247XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGlmICghY29ubmVjdGlvblByZXZpZXdHZngpIHtcbiAgICBjb25uZWN0aW9uUHJldmlld0dmeCA9IGNvbnRleHQuY29ubmVjdGlvblByZXZpZXdHZnggPSB0aGlzLmNyZWF0ZUNvbm5lY3Rpb25QcmV2aWV3R2Z4KCk7XG4gIH1cblxuICBzdmdDbGVhcihjb25uZWN0aW9uUHJldmlld0dmeCk7XG5cbiAgaWYgKCFnZXRDb25uZWN0aW9uKSB7XG4gICAgZ2V0Q29ubmVjdGlvbiA9IGNvbnRleHQuZ2V0Q29ubmVjdGlvbiA9IGNhY2hlUmV0dXJuVmFsdWVzKGZ1bmN0aW9uKGNhbkNvbm5lY3QsIHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgICByZXR1cm4gc2VsZi5nZXRDb25uZWN0aW9uKGNhbkNvbm5lY3QsIHNvdXJjZSwgdGFyZ2V0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChjYW5Db25uZWN0KSB7XG4gICAgY29ubmVjdGlvbiA9IGdldENvbm5lY3Rpb24oY2FuQ29ubmVjdCwgc291cmNlLCB0YXJnZXQpO1xuICB9XG5cbiAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgIW5vTm9vcCAmJiB0aGlzLmRyYXdOb29wUHJldmlldyhjb25uZWN0aW9uUHJldmlld0dmeCwgaGludHMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gd2F5cG9pbnRzIHx8IFtdO1xuXG4gIC8vIG9wdGlvbmFsIGxheW91dFxuICBpZiAodGhpcy5fbGF5b3V0ZXIgJiYgIW5vTGF5b3V0KSB7XG4gICAgY29ubmVjdGlvbi53YXlwb2ludHMgPSB0aGlzLl9sYXlvdXRlci5sYXlvdXRDb25uZWN0aW9uKGNvbm5lY3Rpb24sIHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICBjb25uZWN0aW9uU3RhcnQ6IGNvbm5lY3Rpb25TdGFydCxcbiAgICAgIGNvbm5lY3Rpb25FbmQ6IGNvbm5lY3Rpb25FbmQsXG4gICAgICB3YXlwb2ludHM6IGhpbnRzLndheXBvaW50cyB8fCBjb25uZWN0aW9uLndheXBvaW50c1xuICAgIH0pO1xuICB9XG5cbiAgLy8gZmFsbGJhY2sgaWYgbm8gd2F5cG9pbnRzIHdlcmUgcHJvdmlkZWQgbm9yIGNyZWF0ZWQgd2l0aCBsYXlvdXRlclxuICBpZiAoIWNvbm5lY3Rpb24ud2F5cG9pbnRzIHx8ICFjb25uZWN0aW9uLndheXBvaW50cy5sZW5ndGgpIHtcbiAgICBjb25uZWN0aW9uLndheXBvaW50cyA9IFtcbiAgICAgIHNvdXJjZSA/IGdldE1pZChzb3VyY2UpIDogY29ubmVjdGlvblN0YXJ0LFxuICAgICAgdGFyZ2V0ID8gZ2V0TWlkKHRhcmdldCkgOiBjb25uZWN0aW9uRW5kXG4gICAgXTtcbiAgfVxuXG4gIC8vIG9wdGlvbmFsIGNyb3BwaW5nXG4gIGlmICh0aGlzLl9jb25uZWN0aW9uRG9ja2luZyAmJiAoc291cmNlIHx8IHRhcmdldCkgJiYgIW5vQ3JvcHBpbmcpIHtcbiAgICBjb25uZWN0aW9uLndheXBvaW50cyA9IHRoaXMuX2Nvbm5lY3Rpb25Eb2NraW5nLmdldENyb3BwZWRXYXlwb2ludHMoY29ubmVjdGlvbiwgc291cmNlLCB0YXJnZXQpO1xuICB9XG5cbiAgdGhpcy5fZ3JhcGhpY3NGYWN0b3J5LmRyYXdDb25uZWN0aW9uKGNvbm5lY3Rpb25QcmV2aWV3R2Z4LCBjb25uZWN0aW9uKTtcbn07XG5cbi8qKlxuICogRHJhdyBzaW1wbGUgY29ubmVjdGlvbiBiZXR3ZWVuIHNvdXJjZSBhbmQgdGFyZ2V0IG9yIHByb3ZpZGVkIHBvaW50cy5cbiAqXG4gKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGNvbm5lY3Rpb25QcmV2aWV3R2Z4IGNvbnRhaW5lciBmb3IgdGhlIGNvbm5lY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBoaW50c1xuICogQHBhcmFtIHtkanMubW9kZWwuc2hhcGV9IFtoaW50cy5zb3VyY2VdIHNvdXJjZSBlbGVtZW50XG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5zaGFwZX0gW2hpbnRzLnRhcmdldF0gdGFyZ2V0IGVsZW1lbnRcbiAqIEBwYXJhbSB7UG9pbnR9IFtoaW50cy5jb25uZWN0aW9uU3RhcnRdIHJlcXVpcmVkIGlmIHNvdXJjZSBpcyBub3QgcHJvdmlkZWRcbiAqIEBwYXJhbSB7UG9pbnR9IFtoaW50cy5jb25uZWN0aW9uRW5kXSByZXF1aXJlZCBpZiB0YXJnZXQgaXMgbm90IHByb3ZpZGVkXG4gKi9cbkNvbm5lY3Rpb25QcmV2aWV3LnByb3RvdHlwZS5kcmF3Tm9vcFByZXZpZXcgPSBmdW5jdGlvbihjb25uZWN0aW9uUHJldmlld0dmeCwgaGludHMpIHtcbiAgdmFyIHNvdXJjZSA9IGhpbnRzLnNvdXJjZSxcbiAgICAgIHRhcmdldCA9IGhpbnRzLnRhcmdldCxcbiAgICAgIHN0YXJ0ID0gaGludHMuY29ubmVjdGlvblN0YXJ0IHx8IGdldE1pZChzb3VyY2UpLFxuICAgICAgZW5kID0gaGludHMuY29ubmVjdGlvbkVuZCB8fCBnZXRNaWQodGFyZ2V0KTtcblxuICB2YXIgd2F5cG9pbnRzID0gdGhpcy5jcm9wV2F5cG9pbnRzKHN0YXJ0LCBlbmQsIHNvdXJjZSwgdGFyZ2V0KTtcblxuICB2YXIgY29ubmVjdGlvbiA9IHRoaXMuY3JlYXRlTm9vcENvbm5lY3Rpb24od2F5cG9pbnRzWzBdLCB3YXlwb2ludHNbMV0pO1xuXG4gIHN2Z0FwcGVuZChjb25uZWN0aW9uUHJldmlld0dmeCwgY29ubmVjdGlvbik7XG59O1xuXG4vKipcbiAqIFJldHVybiBjcm9wcGVkIHdheXBvaW50cy5cbiAqXG4gKiBAcGFyYW0ge1BvaW50fSBzdGFydFxuICogQHBhcmFtIHtQb2ludH0gZW5kXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5zaGFwZX0gc291cmNlXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5zaGFwZX0gdGFyZ2V0XG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICovXG5Db25uZWN0aW9uUHJldmlldy5wcm90b3R5cGUuY3JvcFdheXBvaW50cyA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQsIHNvdXJjZSwgdGFyZ2V0KSB7XG4gIHZhciBncmFwaGljc0ZhY3RvcnkgPSB0aGlzLl9ncmFwaGljc0ZhY3RvcnksXG4gICAgICBzb3VyY2VQYXRoID0gc291cmNlICYmIGdyYXBoaWNzRmFjdG9yeS5nZXRTaGFwZVBhdGgoc291cmNlKSxcbiAgICAgIHRhcmdldFBhdGggPSB0YXJnZXQgJiYgZ3JhcGhpY3NGYWN0b3J5LmdldFNoYXBlUGF0aCh0YXJnZXQpLFxuICAgICAgY29ubmVjdGlvblBhdGggPSBncmFwaGljc0ZhY3RvcnkuZ2V0Q29ubmVjdGlvblBhdGgoeyB3YXlwb2ludHM6IFsgc3RhcnQsIGVuZCBdIH0pO1xuXG4gIHN0YXJ0ID0gKHNvdXJjZSAmJiBnZXRFbGVtZW50TGluZUludGVyc2VjdGlvbihzb3VyY2VQYXRoLCBjb25uZWN0aW9uUGF0aCwgdHJ1ZSkpIHx8IHN0YXJ0O1xuICBlbmQgPSAodGFyZ2V0ICYmIGdldEVsZW1lbnRMaW5lSW50ZXJzZWN0aW9uKHRhcmdldFBhdGgsIGNvbm5lY3Rpb25QYXRoLCBmYWxzZSkpIHx8IGVuZDtcblxuICByZXR1cm4gWyBzdGFydCwgZW5kIF07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBjb25uZWN0aW9uIHByZXZpZXcgY29udGFpbmVyIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdXG4gKiBAcGFyYW0ge1NWR0VsZW1lbnR9IFtjb250ZXh0LmNvbm5lY3Rpb25QcmV2aWV3R2Z4XSBwcmV2aWV3IGNvbnRhaW5lclxuICovXG5Db25uZWN0aW9uUHJldmlldy5wcm90b3R5cGUuY2xlYW5VcCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5jb25uZWN0aW9uUHJldmlld0dmeCkge1xuICAgIHN2Z1JlbW92ZShjb250ZXh0LmNvbm5lY3Rpb25QcmV2aWV3R2Z4KTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgY29ubmVjdGlvbiB0aGF0IGNvbm5lY3RzIHNvdXJjZSBhbmQgdGFyZ2V0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fGJvb2xlYW59IGNhbkNvbm5lY3RcbiAqXG4gKiBAcmV0dXJucyB7ZGpzLm1vZGVsLmNvbm5lY3Rpb259XG4gKi9cbkNvbm5lY3Rpb25QcmV2aWV3LnByb3RvdHlwZS5nZXRDb25uZWN0aW9uID0gZnVuY3Rpb24oY2FuQ29ubmVjdCkge1xuICB2YXIgYXR0cnMgPSBlbnN1cmVDb25uZWN0aW9uQXR0cnMoY2FuQ29ubmVjdCk7XG5cbiAgcmV0dXJuIHRoaXMuX2VsZW1lbnRGYWN0b3J5LmNyZWF0ZUNvbm5lY3Rpb24oYXR0cnMpO1xufTtcblxuXG4vKipcbiAqIEFkZCBhbmQgcmV0dXJuIHByZXZpZXcgZ3JhcGhpY3MuXG4gKlxuICogQHJldHVybnMge1NWR0VsZW1lbnR9XG4gKi9cbkNvbm5lY3Rpb25QcmV2aWV3LnByb3RvdHlwZS5jcmVhdGVDb25uZWN0aW9uUHJldmlld0dmeCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZ2Z4ID0gc3ZnQ3JlYXRlKCdnJyk7XG5cbiAgc3ZnQXR0cihnZngsIHtcbiAgICBwb2ludGVyRXZlbnRzOiAnbm9uZSdcbiAgfSk7XG5cbiAgc3ZnQ2xhc3NlcyhnZngpLmFkZChNQVJLRVJfQ09OTkVDVElPTl9QUkVWSUVXKTtcblxuICBzdmdBcHBlbmQodGhpcy5fY2FudmFzLmdldERlZmF1bHRMYXllcigpLCBnZngpO1xuXG4gIHJldHVybiBnZng7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhbmQgcmV0dXJuIHNpbXBsZSBjb25uZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7UG9pbnR9IHN0YXJ0XG4gKiBAcGFyYW0ge1BvaW50fSBlbmRcbiAqXG4gKiBAcmV0dXJucyB7U1ZHRWxlbWVudH1cbiAqL1xuQ29ubmVjdGlvblByZXZpZXcucHJvdG90eXBlLmNyZWF0ZU5vb3BDb25uZWN0aW9uID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICB2YXIgY29ubmVjdGlvbiA9IHN2Z0NyZWF0ZSgncG9seWxpbmUnKTtcblxuICBzdmdBdHRyKGNvbm5lY3Rpb24sIHtcbiAgICAnc3Ryb2tlJzogJyMzMzMnLFxuICAgICdzdHJva2VEYXNoYXJyYXknOiBbIDEgXSxcbiAgICAnc3Ryb2tlV2lkdGgnOiAyLFxuICAgICdwb2ludGVyLWV2ZW50cyc6ICdub25lJ1xuICB9KTtcblxuICBzdmdBdHRyKGNvbm5lY3Rpb24sIHsgJ3BvaW50cyc6IFsgc3RhcnQueCwgc3RhcnQueSwgZW5kLngsIGVuZC55IF0gfSk7XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59O1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuLyoqXG4gKiBSZXR1cm5zIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBjYWNoZWQgcmV0dXJuIHZhbHVlcyByZWZlcmVuY2VkIGJ5IHN0cmluZ2lmaWVkIGZpcnN0IGFyZ3VtZW50LlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKlxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGNhY2hlUmV0dXJuVmFsdWVzKGZuKSB7XG4gIHZhciByZXR1cm5WYWx1ZXMgPSB7fTtcblxuICAvKipcbiAgICogUmV0dXJuIGNhY2hlZCByZXR1cm4gdmFsdWUgcmVmZXJlbmNlZCBieSBzdHJpbmdpZmllZCBmaXJzdCBhcmd1bWVudC5cbiAgICpcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24oZmlyc3RBcmd1bWVudCkge1xuICAgIHZhciBrZXkgPSBKU09OLnN0cmluZ2lmeShmaXJzdEFyZ3VtZW50KTtcblxuICAgIHZhciByZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlc1trZXldO1xuXG4gICAgaWYgKCFyZXR1cm5WYWx1ZSkge1xuICAgICAgcmV0dXJuVmFsdWUgPSByZXR1cm5WYWx1ZXNba2V5XSA9IGZuLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9O1xufVxuXG4vKipcbiAqIEVuc3VyZSBjb25uZWN0aW9uIGF0dHJpYnV0ZXMgaXMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fGJvb2xlYW59IGNhbkNvbm5lY3RcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBlbnN1cmVDb25uZWN0aW9uQXR0cnMoY2FuQ29ubmVjdCkge1xuICBpZiAoaXNPYmplY3QoY2FuQ29ubmVjdCkpIHtcbiAgICByZXR1cm4gY2FuQ29ubmVjdDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge307XG4gIH1cbn1cbiIsImltcG9ydCBDb25uZWN0aW9uUHJldmlldyBmcm9tICcuL0Nvbm5lY3Rpb25QcmV2aWV3JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAnY29ubmVjdGlvblByZXZpZXcnIF0sXG4gIGNvbm5lY3Rpb25QcmV2aWV3OiBbICd0eXBlJywgQ29ubmVjdGlvblByZXZpZXcgXVxufTtcbiIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgaXNGdW5jdGlvbixcbiAgaXNBcnJheSxcbiAgZm9yRWFjaCxcbiAgaXNEZWZpbmVkXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZGVsZWdhdGUgYXMgZG9tRGVsZWdhdGUsXG4gIGV2ZW50IGFzIGRvbUV2ZW50LFxuICBhdHRyIGFzIGRvbUF0dHIsXG4gIHF1ZXJ5IGFzIGRvbVF1ZXJ5LFxuICBjbGFzc2VzIGFzIGRvbUNsYXNzZXMsXG4gIGRvbWlmeSBhcyBkb21pZnlcbn0gZnJvbSAnbWluLWRvbSc7XG5cbnZhciBlbnRyeVNlbGVjdG9yID0gJy5lbnRyeSc7XG5cbnZhciBERUZBVUxUX1BSSU9SSVRZID0gMTAwMDtcblxuXG4vKipcbiAqIEEgY29udGV4dCBwYWQgdGhhdCBkaXNwbGF5cyBlbGVtZW50IHNwZWNpZmljLCBjb250ZXh0dWFsIGFjdGlvbnMgbmV4dFxuICogdG8gYSBkaWFncmFtIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZ1xuICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gW2NvbmZpZy5zY2FsZT17IG1pbjogMS4wLCBtYXg6IDEuNSB9XVxuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcuc2NhbGUubWluXVxuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcuc2NhbGUubWF4XVxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7T3ZlcmxheXN9IG92ZXJsYXlzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvbnRleHRQYWQoY29uZmlnLCBldmVudEJ1cywgb3ZlcmxheXMpIHtcblxuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB0aGlzLl9vdmVybGF5cyA9IG92ZXJsYXlzO1xuXG4gIHZhciBzY2FsZSA9IGlzRGVmaW5lZChjb25maWcgJiYgY29uZmlnLnNjYWxlKSA/IGNvbmZpZy5zY2FsZSA6IHtcbiAgICBtaW46IDEsXG4gICAgbWF4OiAxLjVcbiAgfTtcblxuICB0aGlzLl9vdmVybGF5c0NvbmZpZyA9IHtcbiAgICBwb3NpdGlvbjoge1xuICAgICAgcmlnaHQ6IC05LFxuICAgICAgdG9wOiAtNlxuICAgIH0sXG4gICAgc2NhbGU6IHNjYWxlXG4gIH07XG5cbiAgdGhpcy5fY3VycmVudCA9IG51bGw7XG5cbiAgdGhpcy5faW5pdCgpO1xufVxuXG5Db250ZXh0UGFkLiRpbmplY3QgPSBbXG4gICdjb25maWcuY29udGV4dFBhZCcsXG4gICdldmVudEJ1cycsXG4gICdvdmVybGF5cydcbl07XG5cblxuLyoqXG4gKiBSZWdpc3RlcnMgZXZlbnRzIG5lZWRlZCBmb3IgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21wb25lbnRzXG4gKi9cbkNvbnRleHRQYWQucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGV2ZW50QnVzLm9uKCdzZWxlY3Rpb24uY2hhbmdlZCcsIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBzZWxlY3Rpb24gPSBlLm5ld1NlbGVjdGlvbjtcblxuICAgIGlmIChzZWxlY3Rpb24ubGVuZ3RoID09PSAxKSB7XG4gICAgICBzZWxmLm9wZW4oc2VsZWN0aW9uWzBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5jbG9zZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnRzLmRlbGV0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gZXZlbnQuZWxlbWVudHM7XG5cbiAgICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlKSB7XG4gICAgICBpZiAoc2VsZi5pc09wZW4oZSkpIHtcbiAgICAgICAgc2VsZi5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignZWxlbWVudC5jaGFuZ2VkJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQsXG4gICAgICAgIGN1cnJlbnQgPSBzZWxmLl9jdXJyZW50O1xuXG4gICAgLy8gZm9yY2UgcmVvcGVuIGlmIGVsZW1lbnQgZm9yIHdoaWNoIHdlIGFyZSBjdXJyZW50bHkgb3BlbmVkIGNoYW5nZWRcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50LmVsZW1lbnQgPT09IGVsZW1lbnQpIHtcbiAgICAgIHNlbGYub3BlbihlbGVtZW50LCB0cnVlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgcHJvdmlkZXIgd2l0aCB0aGUgY29udGV4dCBwYWRcbiAqXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFtwcmlvcml0eT0xMDAwXVxuICogQHBhcmFtICB7Q29udGV4dFBhZFByb3ZpZGVyfSBwcm92aWRlclxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBjb250ZXh0UGFkUHJvdmlkZXIgPSB7XG4gICogICBnZXRDb250ZXh0UGFkRW50cmllczogZnVuY3Rpb24oZWxlbWVudCkge1xuICAqICAgICByZXR1cm4gZnVuY3Rpb24oZW50cmllcykge1xuICAqICAgICAgIHJldHVybiB7XG4gICogICAgICAgICAuLi5lbnRyaWVzLFxuICAqICAgICAgICAgJ2VudHJ5LTEnOiB7XG4gICogICAgICAgICAgIGxhYmVsOiAnTXkgRW50cnknLFxuICAqICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uKCkgeyBhbGVydChcIkkgaGF2ZSBiZWVuIGNsaWNrZWQhXCIpOyB9XG4gICogICAgICAgICB9XG4gICogICAgICAgfTtcbiAgKiAgICAgfVxuICAqICAgfVxuICAqIH07XG4gICpcbiAqIGNvbnRleHRQYWQucmVnaXN0ZXJQcm92aWRlcig4MDAsIGNvbnRleHRQYWRQcm92aWRlcik7XG4gKi9cbkNvbnRleHRQYWQucHJvdG90eXBlLnJlZ2lzdGVyUHJvdmlkZXIgPSBmdW5jdGlvbihwcmlvcml0eSwgcHJvdmlkZXIpIHtcbiAgaWYgKCFwcm92aWRlcikge1xuICAgIHByb3ZpZGVyID0gcHJpb3JpdHk7XG4gICAgcHJpb3JpdHkgPSBERUZBVUxUX1BSSU9SSVRZO1xuICB9XG5cbiAgdGhpcy5fZXZlbnRCdXMub24oJ2NvbnRleHRQYWQuZ2V0UHJvdmlkZXJzJywgcHJpb3JpdHksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgZXZlbnQucHJvdmlkZXJzLnB1c2gocHJvdmlkZXIpO1xuICB9KTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb250ZXh0IHBhZCBlbnRyaWVzIGZvciBhIGdpdmVuIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0ge2Rqcy5lbGVtZW50LkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxDb250ZXh0UGFkRW50cnlEZXNjcmlwdG9yPn0gbGlzdCBvZiBlbnRyaWVzXG4gKi9cbkNvbnRleHRQYWQucHJvdG90eXBlLmdldEVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHZhciBwcm92aWRlcnMgPSB0aGlzLl9nZXRQcm92aWRlcnMoKTtcblxuICB2YXIgZW50cmllcyA9IHt9O1xuXG4gIC8vIGxvb3AgdGhyb3VnaCBhbGwgcHJvdmlkZXJzIGFuZCB0aGVpciBlbnRyaWVzLlxuICAvLyBncm91cCBlbnRyaWVzIGJ5IGlkIHNvIHRoYXQgb3ZlcnJpZGluZyBhbiBlbnRyeSBpcyBwb3NzaWJsZVxuICBmb3JFYWNoKHByb3ZpZGVycywgZnVuY3Rpb24ocHJvdmlkZXIpIHtcbiAgICB2YXIgZW50cmllc09yVXBkYXRlciA9IHByb3ZpZGVyLmdldENvbnRleHRQYWRFbnRyaWVzKGVsZW1lbnQpO1xuXG4gICAgaWYgKGlzRnVuY3Rpb24oZW50cmllc09yVXBkYXRlcikpIHtcbiAgICAgIGVudHJpZXMgPSBlbnRyaWVzT3JVcGRhdGVyKGVudHJpZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JFYWNoKGVudHJpZXNPclVwZGF0ZXIsIGZ1bmN0aW9uKGVudHJ5LCBpZCkge1xuICAgICAgICBlbnRyaWVzW2lkXSA9IGVudHJ5O1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZW50cmllcztcbn07XG5cblxuLyoqXG4gKiBUcmlnZ2VyIGFuIGFjdGlvbiBhdmFpbGFibGUgb24gdGhlIG9wZW5lZCBjb250ZXh0IHBhZFxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gYWN0aW9uXG4gKiBAcGFyYW0gIHtFdmVudH0gZXZlbnRcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFthdXRvQWN0aXZhdGU9ZmFsc2VdXG4gKi9cbkNvbnRleHRQYWQucHJvdG90eXBlLnRyaWdnZXIgPSBmdW5jdGlvbihhY3Rpb24sIGV2ZW50LCBhdXRvQWN0aXZhdGUpIHtcblxuICB2YXIgZWxlbWVudCA9IHRoaXMuX2N1cnJlbnQuZWxlbWVudCxcbiAgICAgIGVudHJpZXMgPSB0aGlzLl9jdXJyZW50LmVudHJpZXMsXG4gICAgICBlbnRyeSxcbiAgICAgIGhhbmRsZXIsXG4gICAgICBvcmlnaW5hbEV2ZW50LFxuICAgICAgYnV0dG9uID0gZXZlbnQuZGVsZWdhdGVUYXJnZXQgfHwgZXZlbnQudGFyZ2V0O1xuXG4gIGlmICghYnV0dG9uKSB7XG4gICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBlbnRyeSA9IGVudHJpZXNbZG9tQXR0cihidXR0b24sICdkYXRhLWFjdGlvbicpXTtcbiAgaGFuZGxlciA9IGVudHJ5LmFjdGlvbjtcblxuICBvcmlnaW5hbEV2ZW50ID0gZXZlbnQub3JpZ2luYWxFdmVudCB8fCBldmVudDtcblxuICAvLyBzaW1wbGUgYWN0aW9uICh2aWEgY2FsbGJhY2sgZnVuY3Rpb24pXG4gIGlmIChpc0Z1bmN0aW9uKGhhbmRsZXIpKSB7XG4gICAgaWYgKGFjdGlvbiA9PT0gJ2NsaWNrJykge1xuICAgICAgcmV0dXJuIGhhbmRsZXIob3JpZ2luYWxFdmVudCwgZWxlbWVudCwgYXV0b0FjdGl2YXRlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGhhbmRsZXJbYWN0aW9uXSkge1xuICAgICAgcmV0dXJuIGhhbmRsZXJbYWN0aW9uXShvcmlnaW5hbEV2ZW50LCBlbGVtZW50LCBhdXRvQWN0aXZhdGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNpbGVuY2Ugb3RoZXIgYWN0aW9uc1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuXG4vKipcbiAqIE9wZW4gdGhlIGNvbnRleHQgcGFkIGZvciB0aGUgZ2l2ZW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2UgaWYgdHJ1ZSwgZm9yY2UgcmVvcGVuaW5nIHRoZSBjb250ZXh0IHBhZFxuICovXG5Db250ZXh0UGFkLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oZWxlbWVudCwgZm9yY2UpIHtcbiAgaWYgKCFmb3JjZSAmJiB0aGlzLmlzT3BlbihlbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuY2xvc2UoKTtcbiAgdGhpcy5fdXBkYXRlQW5kT3BlbihlbGVtZW50KTtcbn07XG5cbkNvbnRleHRQYWQucHJvdG90eXBlLl9nZXRQcm92aWRlcnMgPSBmdW5jdGlvbihpZCkge1xuXG4gIHZhciBldmVudCA9IHRoaXMuX2V2ZW50QnVzLmNyZWF0ZUV2ZW50KHtcbiAgICB0eXBlOiAnY29udGV4dFBhZC5nZXRQcm92aWRlcnMnLFxuICAgIHByb3ZpZGVyczogW11cbiAgfSk7XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZShldmVudCk7XG5cbiAgcmV0dXJuIGV2ZW50LnByb3ZpZGVycztcbn07XG5cbkNvbnRleHRQYWQucHJvdG90eXBlLl91cGRhdGVBbmRPcGVuID0gZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gIHZhciBlbnRyaWVzID0gdGhpcy5nZXRFbnRyaWVzKGVsZW1lbnQpLFxuICAgICAgcGFkID0gdGhpcy5nZXRQYWQoZWxlbWVudCksXG4gICAgICBodG1sID0gcGFkLmh0bWw7XG5cbiAgZm9yRWFjaChlbnRyaWVzLCBmdW5jdGlvbihlbnRyeSwgaWQpIHtcbiAgICB2YXIgZ3JvdXBpbmcgPSBlbnRyeS5ncm91cCB8fCAnZGVmYXVsdCcsXG4gICAgICAgIGNvbnRyb2wgPSBkb21pZnkoZW50cnkuaHRtbCB8fCAnPGRpdiBjbGFzcz1cImVudHJ5XCIgZHJhZ2dhYmxlPVwidHJ1ZVwiPjwvZGl2PicpLFxuICAgICAgICBjb250YWluZXI7XG5cbiAgICBkb21BdHRyKGNvbnRyb2wsICdkYXRhLWFjdGlvbicsIGlkKTtcblxuICAgIGNvbnRhaW5lciA9IGRvbVF1ZXJ5KCdbZGF0YS1ncm91cD0nICsgZ3JvdXBpbmcgKyAnXScsIGh0bWwpO1xuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIgPSBkb21pZnkoJzxkaXYgY2xhc3M9XCJncm91cFwiIGRhdGEtZ3JvdXA9XCInICsgZ3JvdXBpbmcgKyAnXCI+PC9kaXY+Jyk7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgfVxuXG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGNvbnRyb2wpO1xuXG4gICAgaWYgKGVudHJ5LmNsYXNzTmFtZSkge1xuICAgICAgYWRkQ2xhc3Nlcyhjb250cm9sLCBlbnRyeS5jbGFzc05hbWUpO1xuICAgIH1cblxuICAgIGlmIChlbnRyeS50aXRsZSkge1xuICAgICAgZG9tQXR0cihjb250cm9sLCAndGl0bGUnLCBlbnRyeS50aXRsZSk7XG4gICAgfVxuXG4gICAgaWYgKGVudHJ5LmltYWdlVXJsKSB7XG4gICAgICBjb250cm9sLmFwcGVuZENoaWxkKGRvbWlmeSgnPGltZyBzcmM9XCInICsgZW50cnkuaW1hZ2VVcmwgKyAnXCI+JykpO1xuICAgIH1cbiAgfSk7XG5cbiAgZG9tQ2xhc3NlcyhodG1sKS5hZGQoJ29wZW4nKTtcblxuICB0aGlzLl9jdXJyZW50ID0ge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgcGFkOiBwYWQsXG4gICAgZW50cmllczogZW50cmllc1xuICB9O1xuXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2NvbnRleHRQYWQub3BlbicsIHsgY3VycmVudDogdGhpcy5fY3VycmVudCB9KTtcbn07XG5cblxuQ29udGV4dFBhZC5wcm90b3R5cGUuZ2V0UGFkID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50LnBhZDtcbiAgfVxuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB2YXIgb3ZlcmxheXMgPSB0aGlzLl9vdmVybGF5cztcblxuICB2YXIgaHRtbCA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImRqcy1jb250ZXh0LXBhZFwiPjwvZGl2PicpO1xuXG4gIHZhciBvdmVybGF5c0NvbmZpZyA9IGFzc2lnbih7XG4gICAgaHRtbDogaHRtbFxuICB9LCB0aGlzLl9vdmVybGF5c0NvbmZpZyk7XG5cbiAgZG9tRGVsZWdhdGUuYmluZChodG1sLCBlbnRyeVNlbGVjdG9yLCAnY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuICAgIHNlbGYudHJpZ2dlcignY2xpY2snLCBldmVudCk7XG4gIH0pO1xuXG4gIGRvbURlbGVnYXRlLmJpbmQoaHRtbCwgZW50cnlTZWxlY3RvciwgJ2RyYWdzdGFydCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgc2VsZi50cmlnZ2VyKCdkcmFnc3RhcnQnLCBldmVudCk7XG4gIH0pO1xuXG4gIC8vIHN0b3AgcHJvcGFnYXRpb24gb2YgbW91c2UgZXZlbnRzXG4gIGRvbUV2ZW50LmJpbmQoaHRtbCwgJ21vdXNlZG93bicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH0pO1xuXG4gIHRoaXMuX292ZXJsYXlJZCA9IG92ZXJsYXlzLmFkZChlbGVtZW50LCAnY29udGV4dC1wYWQnLCBvdmVybGF5c0NvbmZpZyk7XG5cbiAgdmFyIHBhZCA9IG92ZXJsYXlzLmdldCh0aGlzLl9vdmVybGF5SWQpO1xuXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2NvbnRleHRQYWQuY3JlYXRlJywgeyBlbGVtZW50OiBlbGVtZW50LCBwYWQ6IHBhZCB9KTtcblxuICByZXR1cm4gcGFkO1xufTtcblxuXG4vKipcbiAqIENsb3NlIHRoZSBjb250ZXh0IHBhZFxuICovXG5Db250ZXh0UGFkLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9vdmVybGF5cy5yZW1vdmUodGhpcy5fb3ZlcmxheUlkKTtcblxuICB0aGlzLl9vdmVybGF5SWQgPSBudWxsO1xuXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2NvbnRleHRQYWQuY2xvc2UnLCB7IGN1cnJlbnQ6IHRoaXMuX2N1cnJlbnQgfSk7XG5cbiAgdGhpcy5fY3VycmVudCA9IG51bGw7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHBhZCBpcyBvcGVuLiBJZiBlbGVtZW50IGlzIGdpdmVuLCB3aWxsIGNoZWNrXG4gKiBpZiBwYWQgaXMgb3BlbmVkIHdpdGggZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbkNvbnRleHRQYWQucHJvdG90eXBlLmlzT3BlbiA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuICEhdGhpcy5fY3VycmVudCAmJiAoIWVsZW1lbnQgPyB0cnVlIDogdGhpcy5fY3VycmVudC5lbGVtZW50ID09PSBlbGVtZW50KTtcbn07XG5cblxuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBhZGRDbGFzc2VzKGVsZW1lbnQsIGNsYXNzTmFtZXMpIHtcblxuICB2YXIgY2xhc3NlcyA9IGRvbUNsYXNzZXMoZWxlbWVudCk7XG5cbiAgdmFyIGFjdHVhbENsYXNzTmFtZXMgPSBpc0FycmF5KGNsYXNzTmFtZXMpID8gY2xhc3NOYW1lcyA6IGNsYXNzTmFtZXMuc3BsaXQoL1xccysvZyk7XG4gIGFjdHVhbENsYXNzTmFtZXMuZm9yRWFjaChmdW5jdGlvbihjbHMpIHtcbiAgICBjbGFzc2VzLmFkZChjbHMpO1xuICB9KTtcbn0iLCJpbXBvcnQgSW50ZXJhY3Rpb25FdmVudHNNb2R1bGUgZnJvbSAnLi4vaW50ZXJhY3Rpb24tZXZlbnRzJztcbmltcG9ydCBPdmVybGF5c01vZHVsZSBmcm9tICcuLi9vdmVybGF5cyc7XG5cbmltcG9ydCBDb250ZXh0UGFkIGZyb20gJy4vQ29udGV4dFBhZCc7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIEludGVyYWN0aW9uRXZlbnRzTW9kdWxlLFxuICAgIE92ZXJsYXlzTW9kdWxlXG4gIF0sXG4gIGNvbnRleHRQYWQ6IFsgJ3R5cGUnLCBDb250ZXh0UGFkIF1cbn07IiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmaW5kLFxuICBmb3JFYWNoLFxuICBpc0FycmF5LFxuICBpc051bWJlcixcbiAgbWFwLFxuICBtYXRjaFBhdHRlcm4sXG4gIG9taXQsXG4gIHNvcnRCeVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGdldEJCb3gsXG4gIGdldFBhcmVudHNcbn0gZnJvbSAnLi4vLi4vdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCB7IGVhY2hFbGVtZW50IH0gZnJvbSAnLi4vLi4vdXRpbC9FbGVtZW50cyc7XG5cbi8qKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSA8Y29weVBhc3RlLmNhbkNvcHlFbGVtZW50cz4gbGlzdGVuZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGNvbnRleHQuZWxlbWVudHNcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fGJvb2xlYW59IC0gUmV0dXJuIGVsZW1lbnRzIHRvIGJlIGNvcGllZCBvciBmYWxzZSB0byBkaXNhbGxvd1xuICogY29weWluZy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gPGNvcHlQYXN0ZS5jb3B5RWxlbWVudD4gbGlzdGVuZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQuZGVzY3JpcHRvclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gY29udGV4dC5lbGVtZW50XG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gY29udGV4dC5lbGVtZW50c1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSA8Y29weVBhc3RlLmVsZW1lbnRzQ29waWVkPiBsaXN0ZW5lclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5lbGVtZW50c1xuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQudHJlZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSA8Y29weVBhc3RlLnBhc3RlRWxlbWVudD4gbGlzdGVuZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQuY2FjaGUgLSBBbHJlYWR5IGNyZWF0ZWQgZWxlbWVudHMuXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5kZXNjcmlwdG9yXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7RnVuY3Rpb259IDxjb3B5UGFzdGUucGFzdGVFbGVtZW50cz4gbGlzdGVuZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQuaGludHMgLSBBZGQgaGludHMgYmVmb3JlIHBhc3RpbmcuXG4gKi9cblxuLyoqXG4gKiBDb3B5IGFuZCBwYXN0ZSBlbGVtZW50cy5cbiAqXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge0NyZWF0ZX0gY3JlYXRlXG4gKiBAcGFyYW0ge0NsaXBib2FyZH0gY2xpcGJvYXJkXG4gKiBAcGFyYW0ge0VsZW1lbnRGYWN0b3J5fSBlbGVtZW50RmFjdG9yeVxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKiBAcGFyYW0ge01vdXNlfSBtb3VzZVxuICogQHBhcmFtIHtSdWxlc30gcnVsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29weVBhc3RlKFxuICAgIGNhbnZhcyxcbiAgICBjcmVhdGUsXG4gICAgY2xpcGJvYXJkLFxuICAgIGVsZW1lbnRGYWN0b3J5LFxuICAgIGV2ZW50QnVzLFxuICAgIG1vZGVsaW5nLFxuICAgIG1vdXNlLFxuICAgIHJ1bGVzXG4pIHtcblxuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX2NyZWF0ZSA9IGNyZWF0ZTtcbiAgdGhpcy5fY2xpcGJvYXJkID0gY2xpcGJvYXJkO1xuICB0aGlzLl9lbGVtZW50RmFjdG9yeSA9IGVsZW1lbnRGYWN0b3J5O1xuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl9tb3VzZSA9IG1vdXNlO1xuICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xuXG4gIGV2ZW50QnVzLm9uKCdjb3B5UGFzdGUuY29weUVsZW1lbnQnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBjb250ZXh0LmRlc2NyaXB0b3IsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICAgIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cztcblxuICAgIC8vIGRlZmF1bHQgcHJpb3JpdHkgKHByaW9yaXR5ID0gMSlcbiAgICBkZXNjcmlwdG9yLnByaW9yaXR5ID0gMTtcblxuICAgIGRlc2NyaXB0b3IuaWQgPSBlbGVtZW50LmlkO1xuXG4gICAgdmFyIHBhcmVudENvcGllZCA9IGZpbmQoZWxlbWVudHMsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiBlID09PSBlbGVtZW50LnBhcmVudDtcbiAgICB9KTtcblxuICAgIC8vIGRvIE5PVCByZWZlcmVuY2UgcGFyZW50IGlmIHBhcmVudCB3YXNuJ3QgY29waWVkXG4gICAgaWYgKHBhcmVudENvcGllZCkge1xuICAgICAgZGVzY3JpcHRvci5wYXJlbnQgPSBlbGVtZW50LnBhcmVudC5pZDtcbiAgICB9XG5cbiAgICAvLyBhdHRhY2hlcnMgKHByaW9yaXR5ID0gMilcbiAgICBpZiAoaXNBdHRhY2hlcihlbGVtZW50KSkge1xuICAgICAgZGVzY3JpcHRvci5wcmlvcml0eSA9IDI7XG5cbiAgICAgIGRlc2NyaXB0b3IuaG9zdCA9IGVsZW1lbnQuaG9zdC5pZDtcbiAgICB9XG5cbiAgICAvLyBjb25uZWN0aW9ucyAocHJpb3JpdHkgPSAzKVxuICAgIGlmIChpc0Nvbm5lY3Rpb24oZWxlbWVudCkpIHtcbiAgICAgIGRlc2NyaXB0b3IucHJpb3JpdHkgPSAzO1xuXG4gICAgICBkZXNjcmlwdG9yLnNvdXJjZSA9IGVsZW1lbnQuc291cmNlLmlkO1xuICAgICAgZGVzY3JpcHRvci50YXJnZXQgPSBlbGVtZW50LnRhcmdldC5pZDtcblxuICAgICAgZGVzY3JpcHRvci53YXlwb2ludHMgPSBjb3B5V2F5cG9pbnRzKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8vIGxhYmVscyAocHJpb3JpdHkgPSA0KVxuICAgIGlmIChpc0xhYmVsKGVsZW1lbnQpKSB7XG4gICAgICBkZXNjcmlwdG9yLnByaW9yaXR5ID0gNDtcblxuICAgICAgZGVzY3JpcHRvci5sYWJlbFRhcmdldCA9IGVsZW1lbnQubGFiZWxUYXJnZXQuaWQ7XG4gICAgfVxuXG4gICAgZm9yRWFjaChbICd4JywgJ3knLCAnd2lkdGgnLCAnaGVpZ2h0JyBdLCBmdW5jdGlvbihwcm9wZXJ0eSkge1xuICAgICAgaWYgKGlzTnVtYmVyKGVsZW1lbnRbIHByb3BlcnR5IF0pKSB7XG4gICAgICAgIGRlc2NyaXB0b3JbIHByb3BlcnR5IF0gPSBlbGVtZW50WyBwcm9wZXJ0eSBdO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVzY3JpcHRvci5oaWRkZW4gPSBlbGVtZW50LmhpZGRlbjtcbiAgICBkZXNjcmlwdG9yLmNvbGxhcHNlZCA9IGVsZW1lbnQuY29sbGFwc2VkO1xuXG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjb3B5UGFzdGUucGFzdGVFbGVtZW50cycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgaGludHMgPSBjb250ZXh0LmhpbnRzO1xuXG4gICAgYXNzaWduKGhpbnRzLCB7XG4gICAgICBjcmVhdGVFbGVtZW50c0JlaGF2aW9yOiBmYWxzZVxuICAgIH0pO1xuICB9KTtcbn1cblxuQ29weVBhc3RlLiRpbmplY3QgPSBbXG4gICdjYW52YXMnLFxuICAnY3JlYXRlJyxcbiAgJ2NsaXBib2FyZCcsXG4gICdlbGVtZW50RmFjdG9yeScsXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZycsXG4gICdtb3VzZScsXG4gICdydWxlcydcbl07XG5cblxuLyoqXG4gKiBDb3B5IGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBlbGVtZW50c1xuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbkNvcHlQYXN0ZS5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XG4gIHZhciBhbGxvd2VkLFxuICAgICAgdHJlZTtcblxuICBpZiAoIWlzQXJyYXkoZWxlbWVudHMpKSB7XG4gICAgZWxlbWVudHMgPSBlbGVtZW50cyA/IFsgZWxlbWVudHMgXSA6IFtdO1xuICB9XG5cbiAgYWxsb3dlZCA9IHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2NvcHlQYXN0ZS5jYW5Db3B5RWxlbWVudHMnLCB7XG4gICAgZWxlbWVudHM6IGVsZW1lbnRzXG4gIH0pO1xuXG4gIGlmIChhbGxvd2VkID09PSBmYWxzZSkge1xuICAgIHRyZWUgPSB7fTtcbiAgfSBlbHNlIHtcbiAgICB0cmVlID0gdGhpcy5jcmVhdGVUcmVlKGlzQXJyYXkoYWxsb3dlZCkgPyBhbGxvd2VkIDogZWxlbWVudHMpO1xuICB9XG5cbiAgLy8gd2Ugc2V0IGFuIGVtcHR5IHRyZWUsIHNlbGVjdGlvbiBvZiBlbGVtZW50c1xuICAvLyB0byBjb3B5IHdhcyBlbXB0eS5cbiAgdGhpcy5fY2xpcGJvYXJkLnNldCh0cmVlKTtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdjb3B5UGFzdGUuZWxlbWVudHNDb3BpZWQnLCB7XG4gICAgZWxlbWVudHM6IGVsZW1lbnRzLFxuICAgIHRyZWU6IHRyZWVcbiAgfSk7XG5cbiAgcmV0dXJuIHRyZWU7XG59O1xuXG4vKipcbiAqIFBhc3RlIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dF1cbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLmJhc2V9IFtjb250ZXh0LmVsZW1lbnRdIC0gUGFyZW50LlxuICogQHBhcmFtIHtQb2ludH0gW2NvbnRleHQucG9pbnRdIC0gUG9zaXRpb24uXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHQuaGludHNdIC0gSGludHMuXG4gKi9cbkNvcHlQYXN0ZS5wcm90b3R5cGUucGFzdGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciB0cmVlID0gdGhpcy5fY2xpcGJvYXJkLmdldCgpO1xuXG4gIGlmICh0aGlzLl9jbGlwYm9hcmQuaXNFbXB0eSgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGhpbnRzID0gY29udGV4dCAmJiBjb250ZXh0LmhpbnRzIHx8IHt9O1xuXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2NvcHlQYXN0ZS5wYXN0ZUVsZW1lbnRzJywge1xuICAgIGhpbnRzOiBoaW50c1xuICB9KTtcblxuICB2YXIgZWxlbWVudHMgPSB0aGlzLl9jcmVhdGVFbGVtZW50cyh0cmVlKTtcblxuICAvLyBwYXN0ZSBkaXJlY3RseVxuICBpZiAoY29udGV4dCAmJiBjb250ZXh0LmVsZW1lbnQgJiYgY29udGV4dC5wb2ludCkge1xuICAgIHJldHVybiB0aGlzLl9wYXN0ZShlbGVtZW50cywgY29udGV4dC5lbGVtZW50LCBjb250ZXh0LnBvaW50LCBoaW50cyk7XG4gIH1cblxuICB0aGlzLl9jcmVhdGUuc3RhcnQodGhpcy5fbW91c2UuZ2V0TGFzdE1vdmVFdmVudCgpLCBlbGVtZW50cywge1xuICAgIGhpbnRzOiBoaW50cyB8fCB7fVxuICB9KTtcbn07XG5cbi8qKlxuICogUGFzdGUgZWxlbWVudHMgZGlyZWN0bHkuXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGVsZW1lbnRzXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5iYXNlfSB0YXJnZXRcbiAqIEBwYXJhbSB7UG9pbnR9IHBvc2l0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gW2hpbnRzXVxuICovXG5Db3B5UGFzdGUucHJvdG90eXBlLl9wYXN0ZSA9IGZ1bmN0aW9uKGVsZW1lbnRzLCB0YXJnZXQsIHBvc2l0aW9uLCBoaW50cykge1xuXG4gIC8vIG1ha2Ugc3VyZSBlYWNoIGVsZW1lbnQgaGFzIHggYW5kIHlcbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIGlmICghaXNOdW1iZXIoZWxlbWVudC54KSkge1xuICAgICAgZWxlbWVudC54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIWlzTnVtYmVyKGVsZW1lbnQueSkpIHtcbiAgICAgIGVsZW1lbnQueSA9IDA7XG4gICAgfVxuICB9KTtcblxuICB2YXIgYmJveCA9IGdldEJCb3goZWxlbWVudHMpO1xuXG4gIC8vIGNlbnRlciBlbGVtZW50cyBhcm91bmQgY3Vyc29yXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICBpZiAoaXNDb25uZWN0aW9uKGVsZW1lbnQpKSB7XG4gICAgICBlbGVtZW50LndheXBvaW50cyA9IG1hcChlbGVtZW50LndheXBvaW50cywgZnVuY3Rpb24od2F5cG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiB3YXlwb2ludC54IC0gYmJveC54IC0gYmJveC53aWR0aCAvIDIsXG4gICAgICAgICAgeTogd2F5cG9pbnQueSAtIGJib3gueSAtIGJib3guaGVpZ2h0IC8gMlxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXNzaWduKGVsZW1lbnQsIHtcbiAgICAgIHg6IGVsZW1lbnQueCAtIGJib3gueCAtIGJib3gud2lkdGggLyAyLFxuICAgICAgeTogZWxlbWVudC55IC0gYmJveC55IC0gYmJveC5oZWlnaHQgLyAyXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB0aGlzLl9tb2RlbGluZy5jcmVhdGVFbGVtZW50cyhlbGVtZW50cywgcG9zaXRpb24sIHRhcmdldCwgYXNzaWduKHt9LCBoaW50cykpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgZWxlbWVudHMgZnJvbSB0cmVlLlxuICovXG5Db3B5UGFzdGUucHJvdG90eXBlLl9jcmVhdGVFbGVtZW50cyA9IGZ1bmN0aW9uKHRyZWUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHZhciBjYWNoZSA9IHt9O1xuXG4gIHZhciBlbGVtZW50cyA9IFtdO1xuXG4gIGZvckVhY2godHJlZSwgZnVuY3Rpb24oYnJhbmNoLCBkZXB0aCkge1xuXG4gICAgZGVwdGggPSBwYXJzZUludChkZXB0aCwgMTApO1xuXG4gICAgLy8gc29ydCBieSBwcmlvcml0eVxuICAgIGJyYW5jaCA9IHNvcnRCeShicmFuY2gsICdwcmlvcml0eScpO1xuXG4gICAgZm9yRWFjaChicmFuY2gsIGZ1bmN0aW9uKGRlc2NyaXB0b3IpIHtcblxuICAgICAgLy8gcmVtb3ZlIHByaW9yaXR5XG4gICAgICB2YXIgYXR0cnMgPSBhc3NpZ24oe30sIG9taXQoZGVzY3JpcHRvciwgWyAncHJpb3JpdHknIF0pKTtcblxuICAgICAgaWYgKGNhY2hlWyBkZXNjcmlwdG9yLnBhcmVudCBdKSB7XG4gICAgICAgIGF0dHJzLnBhcmVudCA9IGNhY2hlWyBkZXNjcmlwdG9yLnBhcmVudCBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIGF0dHJzLnBhcmVudDtcbiAgICAgIH1cblxuICAgICAgZXZlbnRCdXMuZmlyZSgnY29weVBhc3RlLnBhc3RlRWxlbWVudCcsIHtcbiAgICAgICAgY2FjaGU6IGNhY2hlLFxuICAgICAgICBkZXNjcmlwdG9yOiBhdHRyc1xuICAgICAgfSk7XG5cbiAgICAgIHZhciBlbGVtZW50O1xuXG4gICAgICBpZiAoaXNDb25uZWN0aW9uKGF0dHJzKSkge1xuICAgICAgICBhdHRycy5zb3VyY2UgPSBjYWNoZVsgZGVzY3JpcHRvci5zb3VyY2UgXTtcbiAgICAgICAgYXR0cnMudGFyZ2V0ID0gY2FjaGVbIGRlc2NyaXB0b3IudGFyZ2V0IF07XG5cbiAgICAgICAgZWxlbWVudCA9IGNhY2hlWyBkZXNjcmlwdG9yLmlkIF0gPSBzZWxmLmNyZWF0ZUNvbm5lY3Rpb24oYXR0cnMpO1xuXG4gICAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNMYWJlbChhdHRycykpIHtcbiAgICAgICAgYXR0cnMubGFiZWxUYXJnZXQgPSBjYWNoZVsgYXR0cnMubGFiZWxUYXJnZXQgXTtcblxuICAgICAgICBlbGVtZW50ID0gY2FjaGVbIGRlc2NyaXB0b3IuaWQgXSA9IHNlbGYuY3JlYXRlTGFiZWwoYXR0cnMpO1xuXG4gICAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXR0cnMuaG9zdCkge1xuICAgICAgICBhdHRycy5ob3N0ID0gY2FjaGVbIGF0dHJzLmhvc3QgXTtcbiAgICAgIH1cblxuICAgICAgZWxlbWVudCA9IGNhY2hlWyBkZXNjcmlwdG9yLmlkIF0gPSBzZWxmLmNyZWF0ZVNoYXBlKGF0dHJzKTtcblxuICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICB9KTtcblxuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59O1xuXG5Db3B5UGFzdGUucHJvdG90eXBlLmNyZWF0ZUNvbm5lY3Rpb24gPSBmdW5jdGlvbihhdHRycykge1xuICB2YXIgY29ubmVjdGlvbiA9IHRoaXMuX2VsZW1lbnRGYWN0b3J5LmNyZWF0ZUNvbm5lY3Rpb24ob21pdChhdHRycywgWyAnaWQnIF0pKTtcblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07XG5cbkNvcHlQYXN0ZS5wcm90b3R5cGUuY3JlYXRlTGFiZWwgPSBmdW5jdGlvbihhdHRycykge1xuICB2YXIgbGFiZWwgPSB0aGlzLl9lbGVtZW50RmFjdG9yeS5jcmVhdGVMYWJlbChvbWl0KGF0dHJzLCBbICdpZCcgXSkpO1xuXG4gIHJldHVybiBsYWJlbDtcbn07XG5cbkNvcHlQYXN0ZS5wcm90b3R5cGUuY3JlYXRlU2hhcGUgPSBmdW5jdGlvbihhdHRycykge1xuICB2YXIgc2hhcGUgPSB0aGlzLl9lbGVtZW50RmFjdG9yeS5jcmVhdGVTaGFwZShvbWl0KGF0dHJzLCBbICdpZCcgXSkpO1xuXG4gIHJldHVybiBzaGFwZTtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2V0aGVyIGVsZW1lbnQgaGFzIHJlbGF0aW9ucyB0byBvdGhlciBlbGVtZW50cyBlLmcuIGF0dGFjaGVycywgbGFiZWxzIGFuZCBjb25uZWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHNcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuQ29weVBhc3RlLnByb3RvdHlwZS5oYXNSZWxhdGlvbnMgPSBmdW5jdGlvbihlbGVtZW50LCBlbGVtZW50cykge1xuICB2YXIgbGFiZWxUYXJnZXQsXG4gICAgICBzb3VyY2UsXG4gICAgICB0YXJnZXQ7XG5cbiAgaWYgKGlzQ29ubmVjdGlvbihlbGVtZW50KSkge1xuICAgIHNvdXJjZSA9IGZpbmQoZWxlbWVudHMsIG1hdGNoUGF0dGVybih7IGlkOiBlbGVtZW50LnNvdXJjZS5pZCB9KSk7XG4gICAgdGFyZ2V0ID0gZmluZChlbGVtZW50cywgbWF0Y2hQYXR0ZXJuKHsgaWQ6IGVsZW1lbnQudGFyZ2V0LmlkIH0pKTtcblxuICAgIGlmICghc291cmNlIHx8ICF0YXJnZXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNMYWJlbChlbGVtZW50KSkge1xuICAgIGxhYmVsVGFyZ2V0ID0gZmluZChlbGVtZW50cywgbWF0Y2hQYXR0ZXJuKHsgaWQ6IGVsZW1lbnQubGFiZWxUYXJnZXQuaWQgfSkpO1xuXG4gICAgaWYgKCFsYWJlbFRhcmdldCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSB0cmVlLWxpa2Ugc3RydWN0dXJlIGZyb20gZWxlbWVudHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIHRyZWU6IHtcbiAgKiAgMDogW1xuICAqICAgIHsgaWQ6ICdTaGFwZV8xJywgcHJpb3JpdHk6IDEsIC4uLiB9LFxuICAqICAgIHsgaWQ6ICdTaGFwZV8yJywgcHJpb3JpdHk6IDEsIC4uLiB9LFxuICAqICAgIHsgaWQ6ICdDb25uZWN0aW9uXzEnLCBzb3VyY2U6ICdTaGFwZV8xJywgdGFyZ2V0OiAnU2hhcGVfMicsIHByaW9yaXR5OiAzLCAuLi4gfSxcbiAgKiAgICAuLi5cbiAgKiAgXSxcbiAgKiAgMTogW1xuICAqICAgIHsgaWQ6ICdTaGFwZV8zJywgcGFyZW50OiAnU2hhcGUxJywgcHJpb3JpdHk6IDEsIC4uLiB9LFxuICAqICAgIC4uLlxuICAqICBdXG4gICogfTtcbiAgKlxuICAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5iYXNlPn0gZWxlbWVudHNcbiAgKlxuICAqIEByZXR1cm4ge09iamVjdH1cbiAgKi9cbkNvcHlQYXN0ZS5wcm90b3R5cGUuY3JlYXRlVHJlZSA9IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XG4gIHZhciBydWxlcyA9IHRoaXMuX3J1bGVzLFxuICAgICAgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIHRyZWUgPSB7fSxcbiAgICAgIGVsZW1lbnRzRGF0YSA9IFtdO1xuXG4gIHZhciBwYXJlbnRzID0gZ2V0UGFyZW50cyhlbGVtZW50cyk7XG5cbiAgZnVuY3Rpb24gY2FuQ29weShlbGVtZW50LCBlbGVtZW50cykge1xuICAgIHJldHVybiBydWxlcy5hbGxvd2VkKCdlbGVtZW50LmNvcHknLCB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgZWxlbWVudHM6IGVsZW1lbnRzXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBhZGRFbGVtZW50RGF0YShlbGVtZW50LCBkZXB0aCkge1xuXG4gICAgLy8gKDEpIGNoZWNrIHdldGhlciBlbGVtZW50IGhhcyBhbHJlYWR5IGJlZW4gYWRkZWRcbiAgICB2YXIgZm91bmRFbGVtZW50RGF0YSA9IGZpbmQoZWxlbWVudHNEYXRhLCBmdW5jdGlvbihlbGVtZW50c0RhdGEpIHtcbiAgICAgIHJldHVybiBlbGVtZW50ID09PSBlbGVtZW50c0RhdGEuZWxlbWVudDtcbiAgICB9KTtcblxuICAgIC8vICgyKSBhZGQgZWxlbWVudCBpZiBub3QgYWxyZWFkeSBhZGRlZFxuICAgIGlmICghZm91bmRFbGVtZW50RGF0YSkge1xuICAgICAgZWxlbWVudHNEYXRhLnB1c2goe1xuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICBkZXB0aDogZGVwdGhcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gKDMpIHVwZGF0ZSBkZXB0aFxuICAgIGlmIChmb3VuZEVsZW1lbnREYXRhLmRlcHRoIDwgZGVwdGgpIHtcbiAgICAgIGVsZW1lbnRzRGF0YSA9IHJlbW92ZUVsZW1lbnREYXRhKGZvdW5kRWxlbWVudERhdGEsIGVsZW1lbnRzRGF0YSk7XG5cbiAgICAgIGVsZW1lbnRzRGF0YS5wdXNoKHtcbiAgICAgICAgZWxlbWVudDogZm91bmRFbGVtZW50RGF0YS5lbGVtZW50LFxuICAgICAgICBkZXB0aDogZGVwdGhcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUVsZW1lbnREYXRhKGVsZW1lbnREYXRhLCBlbGVtZW50c0RhdGEpIHtcbiAgICB2YXIgaW5kZXggPSBlbGVtZW50c0RhdGEuaW5kZXhPZihlbGVtZW50RGF0YSk7XG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBlbGVtZW50c0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudHNEYXRhO1xuICB9XG5cbiAgLy8gKDEpIGFkZCBlbGVtZW50c1xuICBlYWNoRWxlbWVudChwYXJlbnRzLCBmdW5jdGlvbihlbGVtZW50LCBfaW5kZXgsIGRlcHRoKSB7XG5cbiAgICAvLyBkbyBOT1QgYWRkIGV4dGVybmFsIGxhYmVscyBkaXJlY3RseVxuICAgIGlmIChpc0xhYmVsKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYWx3YXlzIGNvcHkgZXh0ZXJuYWwgbGFiZWxzXG4gICAgZm9yRWFjaChlbGVtZW50LmxhYmVscywgZnVuY3Rpb24obGFiZWwpIHtcbiAgICAgIGFkZEVsZW1lbnREYXRhKGxhYmVsLCBkZXB0aCk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBhZGRSZWxhdGVkRWxlbWVudHMoZWxlbWVudHMpIHtcbiAgICAgIGVsZW1lbnRzICYmIGVsZW1lbnRzLmxlbmd0aCAmJiBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICAgICAgLy8gYWRkIGV4dGVybmFsIGxhYmVsc1xuICAgICAgICBmb3JFYWNoKGVsZW1lbnQubGFiZWxzLCBmdW5jdGlvbihsYWJlbCkge1xuICAgICAgICAgIGFkZEVsZW1lbnREYXRhKGxhYmVsLCBkZXB0aCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFkZEVsZW1lbnREYXRhKGVsZW1lbnQsIGRlcHRoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvckVhY2goWyBlbGVtZW50LmF0dGFjaGVycywgZWxlbWVudC5pbmNvbWluZywgZWxlbWVudC5vdXRnb2luZyBdLCBhZGRSZWxhdGVkRWxlbWVudHMpO1xuXG4gICAgYWRkRWxlbWVudERhdGEoZWxlbWVudCwgZGVwdGgpO1xuXG4gICAgcmV0dXJuIGVsZW1lbnQuY2hpbGRyZW47XG4gIH0pO1xuXG4gIGVsZW1lbnRzID0gbWFwKGVsZW1lbnRzRGF0YSwgZnVuY3Rpb24oZWxlbWVudERhdGEpIHtcbiAgICByZXR1cm4gZWxlbWVudERhdGEuZWxlbWVudDtcbiAgfSk7XG5cbiAgLy8gKDIpIGNvcHkgZWxlbWVudHNcbiAgZWxlbWVudHNEYXRhID0gbWFwKGVsZW1lbnRzRGF0YSwgZnVuY3Rpb24oZWxlbWVudERhdGEpIHtcbiAgICBlbGVtZW50RGF0YS5kZXNjcmlwdG9yID0ge307XG5cbiAgICBzZWxmLl9ldmVudEJ1cy5maXJlKCdjb3B5UGFzdGUuY29weUVsZW1lbnQnLCB7XG4gICAgICBkZXNjcmlwdG9yOiBlbGVtZW50RGF0YS5kZXNjcmlwdG9yLFxuICAgICAgZWxlbWVudDogZWxlbWVudERhdGEuZWxlbWVudCxcbiAgICAgIGVsZW1lbnRzOiBlbGVtZW50c1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVsZW1lbnREYXRhO1xuICB9KTtcblxuICAvLyAoMykgc29ydCBlbGVtZW50cyBieSBwcmlvcml0eVxuICBlbGVtZW50c0RhdGEgPSBzb3J0QnkoZWxlbWVudHNEYXRhLCBmdW5jdGlvbihlbGVtZW50RGF0YSkge1xuICAgIHJldHVybiBlbGVtZW50RGF0YS5kZXNjcmlwdG9yLnByaW9yaXR5O1xuICB9KTtcblxuICBlbGVtZW50cyA9IG1hcChlbGVtZW50c0RhdGEsIGZ1bmN0aW9uKGVsZW1lbnREYXRhKSB7XG4gICAgcmV0dXJuIGVsZW1lbnREYXRhLmVsZW1lbnQ7XG4gIH0pO1xuXG4gIC8vICg0KSBjcmVhdGUgdHJlZVxuICBmb3JFYWNoKGVsZW1lbnRzRGF0YSwgZnVuY3Rpb24oZWxlbWVudERhdGEpIHtcbiAgICB2YXIgZGVwdGggPSBlbGVtZW50RGF0YS5kZXB0aDtcblxuICAgIGlmICghc2VsZi5oYXNSZWxhdGlvbnMoZWxlbWVudERhdGEuZWxlbWVudCwgZWxlbWVudHMpKSB7XG4gICAgICByZW1vdmVFbGVtZW50KGVsZW1lbnREYXRhLmVsZW1lbnQsIGVsZW1lbnRzKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghY2FuQ29weShlbGVtZW50RGF0YS5lbGVtZW50LCBlbGVtZW50cykpIHtcbiAgICAgIHJlbW92ZUVsZW1lbnQoZWxlbWVudERhdGEuZWxlbWVudCwgZWxlbWVudHMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0cmVlW2RlcHRoXSkge1xuICAgICAgdHJlZVtkZXB0aF0gPSBbXTtcbiAgICB9XG5cbiAgICB0cmVlW2RlcHRoXS5wdXNoKGVsZW1lbnREYXRhLmRlc2NyaXB0b3IpO1xuICB9KTtcblxuICByZXR1cm4gdHJlZTtcbn07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc0F0dGFjaGVyKGVsZW1lbnQpIHtcbiAgcmV0dXJuICEhZWxlbWVudC5ob3N0O1xufVxuXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gISFlbGVtZW50LndheXBvaW50cztcbn1cblxuZnVuY3Rpb24gaXNMYWJlbChlbGVtZW50KSB7XG4gIHJldHVybiAhIWVsZW1lbnQubGFiZWxUYXJnZXQ7XG59XG5cbmZ1bmN0aW9uIGNvcHlXYXlwb2ludHMoZWxlbWVudCkge1xuICByZXR1cm4gbWFwKGVsZW1lbnQud2F5cG9pbnRzLCBmdW5jdGlvbih3YXlwb2ludCkge1xuXG4gICAgd2F5cG9pbnQgPSBjb3B5V2F5cG9pbnQod2F5cG9pbnQpO1xuXG4gICAgaWYgKHdheXBvaW50Lm9yaWdpbmFsKSB7XG4gICAgICB3YXlwb2ludC5vcmlnaW5hbCA9IGNvcHlXYXlwb2ludCh3YXlwb2ludC5vcmlnaW5hbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdheXBvaW50O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY29weVdheXBvaW50KHdheXBvaW50KSB7XG4gIHJldHVybiBhc3NpZ24oe30sIHdheXBvaW50KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRWxlbWVudChlbGVtZW50LCBlbGVtZW50cykge1xuICB2YXIgaW5kZXggPSBlbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpO1xuXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gZWxlbWVudHM7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudHMuc3BsaWNlKGluZGV4LCAxKTtcbn1cbiIsImltcG9ydCBDbGlwYm9hcmRNb2R1bGUgZnJvbSAnLi4vY2xpcGJvYXJkJztcbmltcG9ydCBDcmVhdGVNb2R1bGUgZnJvbSAnLi4vY3JlYXRlJztcbmltcG9ydCBNb3VzZU1vZHVsZSBmcm9tICcuLi9tb3VzZSc7XG5pbXBvcnQgUnVsZXNNb2R1bGUgZnJvbSAnLi4vcnVsZXMnO1xuXG5pbXBvcnQgQ29weVBhc3RlIGZyb20gJy4vQ29weVBhc3RlJztcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgQ2xpcGJvYXJkTW9kdWxlLFxuICAgIENyZWF0ZU1vZHVsZSxcbiAgICBNb3VzZU1vZHVsZSxcbiAgICBSdWxlc01vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAnY29weVBhc3RlJyBdLFxuICBjb3B5UGFzdGU6IFsgJ3R5cGUnLCBDb3B5UGFzdGUgXVxufTtcbiIsInZhciBNQVJLRVJfT0sgPSAnZHJvcC1vaycsXG4gICAgTUFSS0VSX05PVF9PSyA9ICdkcm9wLW5vdC1vaycsXG4gICAgTUFSS0VSX0FUVEFDSCA9ICdhdHRhY2gtb2snLFxuICAgIE1BUktFUl9ORVdfUEFSRU5UID0gJ25ldy1wYXJlbnQnO1xuXG5pbXBvcnQge1xuICBhc3NpZ24sXG4gIGZpbHRlcixcbiAgZmluZCxcbiAgZm9yRWFjaCxcbiAgaXNBcnJheSxcbiAgaXNOdW1iZXIsXG4gIG1hcFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7IGdldEJCb3ggfSBmcm9tICcuLi8uLi91dGlsL0VsZW1lbnRzJztcblxudmFyIFBSRUZJWCA9ICdjcmVhdGUnO1xuXG52YXIgSElHSF9QUklPUklUWSA9IDIwMDA7XG5cblxuLyoqXG4gKiBDcmVhdGUgbmV3IGVsZW1lbnRzIHRocm91Z2ggZHJhZyBhbmQgZHJvcC5cbiAqXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge0RyYWdnaW5nfSBkcmFnZ2luZ1xuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKiBAcGFyYW0ge1J1bGVzfSBydWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcmVhdGUoXG4gICAgY2FudmFzLFxuICAgIGRyYWdnaW5nLFxuICAgIGV2ZW50QnVzLFxuICAgIG1vZGVsaW5nLFxuICAgIHJ1bGVzXG4pIHtcblxuICAvLyBydWxlcyAvLy8vLy8vLy8vXG5cbiAgLyoqXG4gICAqIENoZWNrIHdldGhlciBlbGVtZW50cyBjYW4gYmUgY3JlYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGVsZW1lbnRzXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IHRhcmdldFxuICAgKiBAcGFyYW0ge1BvaW50fSBwb3NpdGlvblxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBbc291cmNlXVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbnxudWxsfE9iamVjdH1cbiAgICovXG4gIGZ1bmN0aW9uIGNhbkNyZWF0ZShlbGVtZW50cywgdGFyZ2V0LCBwb3NpdGlvbiwgc291cmNlLCBoaW50cykge1xuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gaWdub3JlIGNoaWxkIGVsZW1lbnRzIGFuZCBleHRlcm5hbCBsYWJlbHNcbiAgICBlbGVtZW50cyA9IGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgdmFyIGxhYmVsVGFyZ2V0ID0gZWxlbWVudC5sYWJlbFRhcmdldDtcblxuICAgICAgcmV0dXJuICFlbGVtZW50LnBhcmVudCAmJiAhKGlzTGFiZWwoZWxlbWVudCkgJiYgZWxlbWVudHMuaW5kZXhPZihsYWJlbFRhcmdldCkgIT09IC0xKTtcbiAgICB9KTtcblxuICAgIHZhciBzaGFwZSA9IGZpbmQoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiAhaXNDb25uZWN0aW9uKGVsZW1lbnQpO1xuICAgIH0pO1xuXG4gICAgdmFyIGF0dGFjaCA9IGZhbHNlLFxuICAgICAgICBjb25uZWN0ID0gZmFsc2UsXG4gICAgICAgIGNyZWF0ZSA9IGZhbHNlO1xuXG4gICAgLy8gKDEpIGF0dGFjaGluZyBzaW5nbGUgc2hhcGVzXG4gICAgaWYgKGlzU2luZ2xlU2hhcGUoZWxlbWVudHMpKSB7XG4gICAgICBhdHRhY2ggPSBydWxlcy5hbGxvd2VkKCdzaGFwZS5hdHRhY2gnLCB7XG4gICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgICAgc2hhcGU6IHNoYXBlLFxuICAgICAgICB0YXJnZXQ6IHRhcmdldFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFhdHRhY2gpIHtcblxuICAgICAgLy8gKDIpIGNyZWF0aW5nIGVsZW1lbnRzXG4gICAgICBpZiAoaXNTaW5nbGVTaGFwZShlbGVtZW50cykpIHtcbiAgICAgICAgY3JlYXRlID0gcnVsZXMuYWxsb3dlZCgnc2hhcGUuY3JlYXRlJywge1xuICAgICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgICAgICBzaGFwZTogc2hhcGUsXG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjcmVhdGUgPSBydWxlcy5hbGxvd2VkKCdlbGVtZW50cy5jcmVhdGUnLCB7XG4gICAgICAgICAgZWxlbWVudHM6IGVsZW1lbnRzLFxuICAgICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgICAgICB0YXJnZXQ6IHRhcmdldFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIHZhciBjb25uZWN0aW9uVGFyZ2V0ID0gaGludHMuY29ubmVjdGlvblRhcmdldDtcblxuICAgIC8vICgzKSBhcHBlbmRpbmcgc2luZ2xlIHNoYXBlc1xuICAgIGlmIChjcmVhdGUgfHwgYXR0YWNoKSB7XG4gICAgICBpZiAoc2hhcGUgJiYgc291cmNlKSB7XG4gICAgICAgIGNvbm5lY3QgPSBydWxlcy5hbGxvd2VkKCdjb25uZWN0aW9uLmNyZWF0ZScsIHtcbiAgICAgICAgICBzb3VyY2U6IGNvbm5lY3Rpb25UYXJnZXQgPT09IHNvdXJjZSA/IHNoYXBlIDogc291cmNlLFxuICAgICAgICAgIHRhcmdldDogY29ubmVjdGlvblRhcmdldCA9PT0gc291cmNlID8gc291cmNlIDogc2hhcGUsXG4gICAgICAgICAgaGludHM6IHtcbiAgICAgICAgICAgIHRhcmdldFBhcmVudDogdGFyZ2V0LFxuICAgICAgICAgICAgdGFyZ2V0QXR0YWNoOiBhdHRhY2hcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhdHRhY2g6IGF0dGFjaCxcbiAgICAgICAgY29ubmVjdDogY29ubmVjdFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBpZ25vcmUgd2V0aGVyIG9yIG5vdCBlbGVtZW50cyBjYW4gYmUgY3JlYXRlZFxuICAgIGlmIChjcmVhdGUgPT09IG51bGwgfHwgYXR0YWNoID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRNYXJrZXIoZWxlbWVudCwgbWFya2VyKSB7XG4gICAgWyBNQVJLRVJfQVRUQUNILCBNQVJLRVJfT0ssIE1BUktFUl9OT1RfT0ssIE1BUktFUl9ORVdfUEFSRU5UIF0uZm9yRWFjaChmdW5jdGlvbihtKSB7XG5cbiAgICAgIGlmIChtID09PSBtYXJrZXIpIHtcbiAgICAgICAgY2FudmFzLmFkZE1hcmtlcihlbGVtZW50LCBtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoZWxlbWVudCwgbSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBldmVudCBoYW5kbGluZyAvLy8vLy8vLy8vXG5cbiAgZXZlbnRCdXMub24oWyAnY3JlYXRlLm1vdmUnLCAnY3JlYXRlLmhvdmVyJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzLFxuICAgICAgICBob3ZlciA9IGV2ZW50LmhvdmVyLFxuICAgICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9O1xuXG4gICAgaWYgKCFob3Zlcikge1xuICAgICAgY29udGV4dC5jYW5FeGVjdXRlID0gZmFsc2U7XG4gICAgICBjb250ZXh0LnRhcmdldCA9IG51bGw7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlbnN1cmVDb25zdHJhaW50cyhldmVudCk7XG5cbiAgICB2YXIgcG9zaXRpb24gPSB7XG4gICAgICB4OiBldmVudC54LFxuICAgICAgeTogZXZlbnQueVxuICAgIH07XG5cbiAgICB2YXIgY2FuRXhlY3V0ZSA9IGNvbnRleHQuY2FuRXhlY3V0ZSA9IGhvdmVyICYmIGNhbkNyZWF0ZShlbGVtZW50cywgaG92ZXIsIHBvc2l0aW9uLCBzb3VyY2UsIGhpbnRzKTtcblxuICAgIGlmIChob3ZlciAmJiBjYW5FeGVjdXRlICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LnRhcmdldCA9IGhvdmVyO1xuXG4gICAgICBpZiAoY2FuRXhlY3V0ZSAmJiBjYW5FeGVjdXRlLmF0dGFjaCkge1xuICAgICAgICBzZXRNYXJrZXIoaG92ZXIsIE1BUktFUl9BVFRBQ0gpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0TWFya2VyKGhvdmVyLCBjYW5FeGVjdXRlID8gTUFSS0VSX05FV19QQVJFTlQgOiBNQVJLRVJfTk9UX09LKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKFsgJ2NyZWF0ZS5lbmQnLCAnY3JlYXRlLm91dCcsICdjcmVhdGUuY2xlYW51cCcgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgaG92ZXIgPSBldmVudC5ob3ZlcjtcblxuICAgIGlmIChob3Zlcikge1xuICAgICAgc2V0TWFya2VyKGhvdmVyLCBudWxsKTtcbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjcmVhdGUuZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cyxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQsXG4gICAgICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGUsXG4gICAgICAgIGF0dGFjaCA9IGNhbkV4ZWN1dGUgJiYgY2FuRXhlY3V0ZS5hdHRhY2gsXG4gICAgICAgIGNvbm5lY3QgPSBjYW5FeGVjdXRlICYmIGNhbkV4ZWN1dGUuY29ubmVjdCxcbiAgICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9O1xuXG4gICAgaWYgKGNhbkV4ZWN1dGUgPT09IGZhbHNlIHx8ICF0YXJnZXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBlbnN1cmVDb25zdHJhaW50cyhldmVudCk7XG5cbiAgICB2YXIgcG9zaXRpb24gPSB7XG4gICAgICB4OiBldmVudC54LFxuICAgICAgeTogZXZlbnQueVxuICAgIH07XG5cbiAgICBpZiAoY29ubmVjdCkge1xuICAgICAgc2hhcGUgPSBtb2RlbGluZy5hcHBlbmRTaGFwZShzb3VyY2UsIHNoYXBlLCBwb3NpdGlvbiwgdGFyZ2V0LCB7XG4gICAgICAgIGF0dGFjaDogYXR0YWNoLFxuICAgICAgICBjb25uZWN0aW9uOiBjb25uZWN0ID09PSB0cnVlID8ge30gOiBjb25uZWN0LFxuICAgICAgICBjb25uZWN0aW9uVGFyZ2V0OiBoaW50cy5jb25uZWN0aW9uVGFyZ2V0XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudHMgPSBtb2RlbGluZy5jcmVhdGVFbGVtZW50cyhlbGVtZW50cywgcG9zaXRpb24sIHRhcmdldCwgYXNzaWduKHt9LCBoaW50cywge1xuICAgICAgICBhdHRhY2g6IGF0dGFjaFxuICAgICAgfSkpO1xuXG4gICAgICAvLyB1cGRhdGUgc2hhcGVcbiAgICAgIHNoYXBlID0gZmluZChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gIWlzQ29ubmVjdGlvbihlbGVtZW50KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZSBlbGVtZW50cyBhbmQgc2hhcGVcbiAgICBhc3NpZ24oY29udGV4dCwge1xuICAgICAgZWxlbWVudHM6IGVsZW1lbnRzLFxuICAgICAgc2hhcGU6IHNoYXBlXG4gICAgfSk7XG5cbiAgICBhc3NpZ24oZXZlbnQsIHtcbiAgICAgIGVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICAgIHNoYXBlOiBzaGFwZVxuICAgIH0pO1xuICB9KTtcblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgdmFyIGNvbnRleHQgPSBkcmFnZ2luZy5jb250ZXh0KCk7XG5cbiAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0LnByZWZpeCA9PT0gUFJFRklYKSB7XG4gICAgICBkcmFnZ2luZy5jYW5jZWwoKTtcbiAgICB9XG4gIH1cblxuICAvLyBjYW5jZWwgb24gPGVsZW1lbnRzLmNoYW5nZWQ+IHRoYXQgaXMgbm90IHJlc3VsdCBvZiA8ZHJhZy5lbmQ+XG4gIGV2ZW50QnVzLm9uKCdjcmVhdGUuaW5pdCcsIGZ1bmN0aW9uKCkge1xuICAgIGV2ZW50QnVzLm9uKCdlbGVtZW50cy5jaGFuZ2VkJywgY2FuY2VsKTtcblxuICAgIGV2ZW50QnVzLm9uY2UoWyAnY3JlYXRlLmNhbmNlbCcsICdjcmVhdGUuZW5kJyBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbigpIHtcbiAgICAgIGV2ZW50QnVzLm9mZignZWxlbWVudHMuY2hhbmdlZCcsIGNhbmNlbCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIEFQSSAvLy8vLy8vLy8vXG5cbiAgdGhpcy5zdGFydCA9IGZ1bmN0aW9uKGV2ZW50LCBlbGVtZW50cywgY29udGV4dCkge1xuICAgIGlmICghaXNBcnJheShlbGVtZW50cykpIHtcbiAgICAgIGVsZW1lbnRzID0gWyBlbGVtZW50cyBdO1xuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IGZpbmQoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiAhaXNDb25uZWN0aW9uKGVsZW1lbnQpO1xuICAgIH0pO1xuXG4gICAgaWYgKCFzaGFwZSkge1xuXG4gICAgICAvLyBhdCBsZWFzdCBvbmUgc2hhcGUgaXMgcmVxdWlyZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0ID0gYXNzaWduKHtcbiAgICAgIGVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICAgIGhpbnRzOiB7fSxcbiAgICAgIHNoYXBlOiBzaGFwZVxuICAgIH0sIGNvbnRleHQgfHwge30pO1xuXG4gICAgLy8gbWFrZSBzdXJlIGVhY2ggZWxlbWVudCBoYXMgeCBhbmQgeVxuICAgIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIGlmICghaXNOdW1iZXIoZWxlbWVudC54KSkge1xuICAgICAgICBlbGVtZW50LnggPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTnVtYmVyKGVsZW1lbnQueSkpIHtcbiAgICAgICAgZWxlbWVudC55ID0gMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBiYm94ID0gZ2V0QkJveChlbGVtZW50cyk7XG5cbiAgICAvLyBjZW50ZXIgZWxlbWVudHMgYXJvdW5kIGN1cnNvclxuICAgIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIGlmIChpc0Nvbm5lY3Rpb24oZWxlbWVudCkpIHtcbiAgICAgICAgZWxlbWVudC53YXlwb2ludHMgPSBtYXAoZWxlbWVudC53YXlwb2ludHMsIGZ1bmN0aW9uKHdheXBvaW50KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHdheXBvaW50LnggLSBiYm94LnggLSBiYm94LndpZHRoIC8gMixcbiAgICAgICAgICAgIHk6IHdheXBvaW50LnkgLSBiYm94LnkgLSBiYm94LmhlaWdodCAvIDJcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgYXNzaWduKGVsZW1lbnQsIHtcbiAgICAgICAgeDogZWxlbWVudC54IC0gYmJveC54IC0gYmJveC53aWR0aCAvIDIsXG4gICAgICAgIHk6IGVsZW1lbnQueSAtIGJib3gueSAtIGJib3guaGVpZ2h0IC8gMlxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkcmFnZ2luZy5pbml0KGV2ZW50LCBQUkVGSVgsIHtcbiAgICAgIGN1cnNvcjogJ2dyYWJiaW5nJyxcbiAgICAgIGF1dG9BY3RpdmF0ZTogdHJ1ZSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc2hhcGU6IHNoYXBlLFxuICAgICAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHRcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbn1cblxuQ3JlYXRlLiRpbmplY3QgPSBbXG4gICdjYW52YXMnLFxuICAnZHJhZ2dpbmcnLFxuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnLFxuICAncnVsZXMnXG5dO1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZW5zdXJlQ29uc3RyYWludHMoZXZlbnQpIHtcbiAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgY3JlYXRlQ29uc3RyYWludHMgPSBjb250ZXh0LmNyZWF0ZUNvbnN0cmFpbnRzO1xuXG4gIGlmICghY3JlYXRlQ29uc3RyYWludHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY3JlYXRlQ29uc3RyYWludHMubGVmdCkge1xuICAgIGV2ZW50LnggPSBNYXRoLm1heChldmVudC54LCBjcmVhdGVDb25zdHJhaW50cy5sZWZ0KTtcbiAgfVxuXG4gIGlmIChjcmVhdGVDb25zdHJhaW50cy5yaWdodCkge1xuICAgIGV2ZW50LnggPSBNYXRoLm1pbihldmVudC54LCBjcmVhdGVDb25zdHJhaW50cy5yaWdodCk7XG4gIH1cblxuICBpZiAoY3JlYXRlQ29uc3RyYWludHMudG9wKSB7XG4gICAgZXZlbnQueSA9IE1hdGgubWF4KGV2ZW50LnksIGNyZWF0ZUNvbnN0cmFpbnRzLnRvcCk7XG4gIH1cblxuICBpZiAoY3JlYXRlQ29uc3RyYWludHMuYm90dG9tKSB7XG4gICAgZXZlbnQueSA9IE1hdGgubWluKGV2ZW50LnksIGNyZWF0ZUNvbnN0cmFpbnRzLmJvdHRvbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDb25uZWN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuICEhZWxlbWVudC53YXlwb2ludHM7XG59XG5cbmZ1bmN0aW9uIGlzU2luZ2xlU2hhcGUoZWxlbWVudHMpIHtcbiAgcmV0dXJuIGVsZW1lbnRzICYmIGVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiAhaXNDb25uZWN0aW9uKGVsZW1lbnRzWzBdKTtcbn1cblxuZnVuY3Rpb24gaXNMYWJlbChlbGVtZW50KSB7XG4gIHJldHVybiAhIWVsZW1lbnQubGFiZWxUYXJnZXQ7XG59XG4iLCJpbXBvcnQge1xyXG4gIHRyYW5zbGF0ZVxyXG59IGZyb20gJy4uLy4uL3V0aWwvU3ZnVHJhbnNmb3JtVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBnZXRWaXN1YWwgfSBmcm9tICcuLi8uLi91dGlsL0dyYXBoaWNzVXRpbCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXHJcbiAgYXR0ciBhcyBzdmdBdHRyLFxyXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGUsXHJcbiAgcmVtb3ZlIGFzIHN2Z1JlbW92ZVxyXG59IGZyb20gJ3Rpbnktc3ZnJztcclxuXHJcbnZhciBMT1dfUFJJT1JJVFkgPSA3NTA7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3JlYXRlUHJldmlldyhcclxuICAgIGNhbnZhcyxcclxuICAgIGV2ZW50QnVzLFxyXG4gICAgZ3JhcGhpY3NGYWN0b3J5LFxyXG4gICAgcHJldmlld1N1cHBvcnQsXHJcbiAgICBzdHlsZXNcclxuKSB7XHJcbiAgZnVuY3Rpb24gY3JlYXRlRHJhZ0dyb3VwKGVsZW1lbnRzKSB7XHJcbiAgICB2YXIgZHJhZ0dyb3VwID0gc3ZnQ3JlYXRlKCdnJyk7XHJcblxyXG4gICAgc3ZnQXR0cihkcmFnR3JvdXAsIHN0eWxlcy5jbHMoJ2Rqcy1kcmFnLWdyb3VwJywgWyAnbm8tZXZlbnRzJyBdKSk7XHJcblxyXG4gICAgdmFyIGNoaWxkcmVuR2Z4ID0gc3ZnQ3JlYXRlKCdnJyk7XHJcblxyXG4gICAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XHJcblxyXG4gICAgICAvLyBjcmVhdGUgZ3JhcGhpY3NcclxuICAgICAgdmFyIGdmeDtcclxuXHJcbiAgICAgIGlmIChlbGVtZW50LmhpZGRlbikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGVsZW1lbnQud2F5cG9pbnRzKSB7XHJcbiAgICAgICAgZ2Z4ID0gZ3JhcGhpY3NGYWN0b3J5Ll9jcmVhdGVDb250YWluZXIoJ2Nvbm5lY3Rpb24nLCBjaGlsZHJlbkdmeCk7XHJcblxyXG4gICAgICAgIGdyYXBoaWNzRmFjdG9yeS5kcmF3Q29ubmVjdGlvbihnZXRWaXN1YWwoZ2Z4KSwgZWxlbWVudCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZ2Z4ID0gZ3JhcGhpY3NGYWN0b3J5Ll9jcmVhdGVDb250YWluZXIoJ3NoYXBlJywgY2hpbGRyZW5HZngpO1xyXG5cclxuICAgICAgICBncmFwaGljc0ZhY3RvcnkuZHJhd1NoYXBlKGdldFZpc3VhbChnZngpLCBlbGVtZW50KTtcclxuXHJcbiAgICAgICAgdHJhbnNsYXRlKGdmeCwgZWxlbWVudC54LCBlbGVtZW50LnkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBhZGQgcHJldmlld1xyXG4gICAgICBwcmV2aWV3U3VwcG9ydC5hZGREcmFnZ2VyKGVsZW1lbnQsIGRyYWdHcm91cCwgZ2Z4KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBkcmFnR3JvdXA7XHJcbiAgfVxyXG5cclxuICBldmVudEJ1cy5vbignY3JlYXRlLm1vdmUnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XHJcblxyXG4gICAgdmFyIGhvdmVyID0gZXZlbnQuaG92ZXIsXHJcbiAgICAgICAgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzLFxyXG4gICAgICAgIGRyYWdHcm91cCA9IGNvbnRleHQuZHJhZ0dyb3VwO1xyXG5cclxuICAgIC8vIGxhemlseSBjcmVhdGUgcHJldmlld3NcclxuICAgIGlmICghZHJhZ0dyb3VwKSB7XHJcbiAgICAgIGRyYWdHcm91cCA9IGNvbnRleHQuZHJhZ0dyb3VwID0gY3JlYXRlRHJhZ0dyb3VwKGVsZW1lbnRzKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZGVmYXVsdExheWVyO1xyXG5cclxuICAgIGlmIChob3Zlcikge1xyXG4gICAgICBpZiAoIWRyYWdHcm91cC5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgZGVmYXVsdExheWVyID0gY2FudmFzLmdldERlZmF1bHRMYXllcigpO1xyXG5cclxuICAgICAgICBzdmdBcHBlbmQoZGVmYXVsdExheWVyLCBkcmFnR3JvdXApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0cmFuc2xhdGUoZHJhZ0dyb3VwLCBldmVudC54LCBldmVudC55KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN2Z1JlbW92ZShkcmFnR3JvdXApO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBldmVudEJ1cy5vbignY3JlYXRlLmNsZWFudXAnLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIGRyYWdHcm91cCA9IGNvbnRleHQuZHJhZ0dyb3VwO1xyXG5cclxuICAgIGlmIChkcmFnR3JvdXApIHtcclxuICAgICAgc3ZnUmVtb3ZlKGRyYWdHcm91cCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbkNyZWF0ZVByZXZpZXcuJGluamVjdCA9IFtcclxuICAnY2FudmFzJyxcclxuICAnZXZlbnRCdXMnLFxyXG4gICdncmFwaGljc0ZhY3RvcnknLFxyXG4gICdwcmV2aWV3U3VwcG9ydCcsXHJcbiAgJ3N0eWxlcydcclxuXTtcclxuIiwiaW1wb3J0IERyYWdnaW5nTW9kdWxlIGZyb20gJy4uL2RyYWdnaW5nJztcbmltcG9ydCBQcmV2aWV3U3VwcG9ydE1vZHVsZSBmcm9tICcuLi9wcmV2aWV3LXN1cHBvcnQnO1xuaW1wb3J0IFJ1bGVzTW9kdWxlIGZyb20gJy4uL3J1bGVzJztcbmltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnLi4vc2VsZWN0aW9uJztcblxuaW1wb3J0IENyZWF0ZSBmcm9tICcuL0NyZWF0ZSc7XG5pbXBvcnQgQ3JlYXRlUHJldmlldyBmcm9tICcuL0NyZWF0ZVByZXZpZXcnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBEcmFnZ2luZ01vZHVsZSxcbiAgICBQcmV2aWV3U3VwcG9ydE1vZHVsZSxcbiAgICBSdWxlc01vZHVsZSxcbiAgICBTZWxlY3Rpb25Nb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFtcbiAgICAnY3JlYXRlJyxcbiAgICAnY3JlYXRlUHJldmlldydcbiAgXSxcbiAgY3JlYXRlOiBbICd0eXBlJywgQ3JlYXRlIF0sXG4gIGNyZWF0ZVByZXZpZXc6IFsgJ3R5cGUnLCBDcmVhdGVQcmV2aWV3IF1cbn07XG4iLCJpbXBvcnQge1xuICBzb3J0QnksXG4gIGZvckVhY2gsXG4gIGZpbHRlclxufSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciBBWElTX0RJTUVOU0lPTlMgPSB7XG4gIGhvcml6b250YWw6IFsgJ3gnLCAnd2lkdGgnIF0sXG4gIHZlcnRpY2FsOiBbICd5JywgJ2hlaWdodCcgXVxufTtcblxudmFyIFRIUkVTSE9MRCA9IDU7XG5cblxuLyoqXG4gKiBHcm91cHMgYW5kIGZpbHRlcnMgZWxlbWVudHMgYW5kIHRoZW4gdHJpZ2dlciBldmVuIGRpc3RyaWJ1dGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGlzdHJpYnV0ZUVsZW1lbnRzKG1vZGVsaW5nKSB7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG5cbiAgdGhpcy5fZmlsdGVycyA9IFtdO1xuXG4gIC8vIHJlZ2lzdGVyIGZpbHRlciBmb3IgZmlsdGVyaW5nIGJpZyBlbGVtZW50c1xuICB0aGlzLnJlZ2lzdGVyRmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnRzLCBheGlzLCBkaW1lbnNpb24pIHtcbiAgICB2YXIgZWxlbWVudHNTaXplID0gMCxcbiAgICAgICAgbnVtT2ZTaGFwZXMgPSAwLFxuICAgICAgICBhdmdEaW1lbnNpb247XG5cbiAgICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICBpZiAoZWxlbWVudC53YXlwb2ludHMgfHwgZWxlbWVudC5sYWJlbFRhcmdldCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnRzU2l6ZSArPSBlbGVtZW50W2RpbWVuc2lvbl07XG5cbiAgICAgIG51bU9mU2hhcGVzICs9IDE7XG4gICAgfSk7XG5cbiAgICBhdmdEaW1lbnNpb24gPSBNYXRoLnJvdW5kKGVsZW1lbnRzU2l6ZSAvIG51bU9mU2hhcGVzKTtcblxuICAgIHJldHVybiBmaWx0ZXIoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50W2RpbWVuc2lvbl0gPCAoYXZnRGltZW5zaW9uICsgNTApO1xuICAgIH0pO1xuICB9KTtcblxufVxuXG5EaXN0cmlidXRlRWxlbWVudHMuJGluamVjdCA9IFsgJ21vZGVsaW5nJyBdO1xuXG5cbi8qKlxuICogUmVnaXN0ZXJzIGZpbHRlciBmdW5jdGlvbnMgdGhhdCBhbGxvdyBleHRlcm5hbCBwYXJ0aWVzIHRvIGZpbHRlclxuICogb3V0IGNlcnRhaW4gZWxlbWVudHMuXG4gKlxuICogQHBhcmFtICB7RnVuY3Rpb259IGZpbHRlckZuXG4gKi9cbkRpc3RyaWJ1dGVFbGVtZW50cy5wcm90b3R5cGUucmVnaXN0ZXJGaWx0ZXIgPSBmdW5jdGlvbihmaWx0ZXJGbikge1xuICBpZiAodHlwZW9mIGZpbHRlckZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0aGUgZmlsdGVyIGhhcyB0byBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB0aGlzLl9maWx0ZXJzLnB1c2goZmlsdGVyRm4pO1xufTtcblxuLyoqXG4gKiBEaXN0cmlidXRlcyB0aGUgZWxlbWVudHMgd2l0aCBhIGdpdmVuIG9yaWVudGF0aW9uXG4gKlxuICogQHBhcmFtICB7QXJyYXl9IGVsZW1lbnRzICAgIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge3N0cmluZ30gb3JpZW50YXRpb24gW2Rlc2NyaXB0aW9uXVxuICovXG5EaXN0cmlidXRlRWxlbWVudHMucHJvdG90eXBlLnRyaWdnZXIgPSBmdW5jdGlvbihlbGVtZW50cywgb3JpZW50YXRpb24pIHtcbiAgdmFyIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG5cbiAgdmFyIGdyb3VwcyxcbiAgICAgIGRpc3RyaWJ1dGFibGVFbGVtZW50cztcblxuICBpZiAoZWxlbWVudHMubGVuZ3RoIDwgMykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX3NldE9yaWVudGF0aW9uKG9yaWVudGF0aW9uKTtcblxuICBkaXN0cmlidXRhYmxlRWxlbWVudHMgPSB0aGlzLl9maWx0ZXJFbGVtZW50cyhlbGVtZW50cyk7XG5cbiAgZ3JvdXBzID0gdGhpcy5fY3JlYXRlR3JvdXBzKGRpc3RyaWJ1dGFibGVFbGVtZW50cyk7XG5cbiAgLy8gbm90aGluZyB0byBkaXN0cmlidXRlXG4gIGlmIChncm91cHMubGVuZ3RoIDw9IDIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBtb2RlbGluZy5kaXN0cmlidXRlRWxlbWVudHMoZ3JvdXBzLCB0aGlzLl9heGlzLCB0aGlzLl9kaW1lbnNpb24pO1xuXG4gIHJldHVybiBncm91cHM7XG59O1xuXG4vKipcbiAqIEZpbHRlcnMgdGhlIGVsZW1lbnRzIHdpdGggcHJvdmlkZWQgZmlsdGVycyBieSBleHRlcm5hbCBwYXJ0aWVzXG4gKlxuICogQHBhcmFtICB7QXJyYXlbRWxlbWVudHNdfSBlbGVtZW50c1xuICpcbiAqIEByZXR1cm4ge0FycmF5W0VsZW1lbnRzXX1cbiAqL1xuRGlzdHJpYnV0ZUVsZW1lbnRzLnByb3RvdHlwZS5fZmlsdGVyRWxlbWVudHMgPSBmdW5jdGlvbihlbGVtZW50cykge1xuICB2YXIgZmlsdGVycyA9IHRoaXMuX2ZpbHRlcnMsXG4gICAgICBheGlzID0gdGhpcy5fYXhpcyxcbiAgICAgIGRpbWVuc2lvbiA9IHRoaXMuX2RpbWVuc2lvbixcbiAgICAgIGRpc3RyaWJ1dGFibGVFbGVtZW50cyA9IFtdLmNvbmNhdChlbGVtZW50cyk7XG5cbiAgaWYgKCFmaWx0ZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiBlbGVtZW50cztcbiAgfVxuXG4gIGZvckVhY2goZmlsdGVycywgZnVuY3Rpb24oZmlsdGVyRm4pIHtcbiAgICBkaXN0cmlidXRhYmxlRWxlbWVudHMgPSBmaWx0ZXJGbihkaXN0cmlidXRhYmxlRWxlbWVudHMsIGF4aXMsIGRpbWVuc2lvbik7XG4gIH0pO1xuXG4gIHJldHVybiBkaXN0cmlidXRhYmxlRWxlbWVudHM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlIHJhbmdlIChtaW4sIG1heCkgZ3JvdXBzLiBBbHNvIHRyaWVzIHRvIGdyb3VwIGVsZW1lbnRzXG4gKiB0b2dldGhlciB0aGF0IHNoYXJlIHRoZSBzYW1lIHJhbmdlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBcdHZhciBkaXN0cmlidXRhYmxlRWxlbWVudHMgPSBbXG4gKiBcdFx0e1xuICogXHRcdFx0cmFuZ2U6IHtcbiAqIFx0XHRcdFx0bWluOiAxMDAsXG4gKiBcdFx0XHRcdG1heDogMjAwXG4gKiBcdFx0XHR9LFxuICogXHRcdFx0ZWxlbWVudHM6IFsgeyBpZDogJ3NoYXBlMScsIC4uIH1dXG4gKiBcdFx0fVxuICogXHRdXG4gKlxuICogQHBhcmFtICB7QXJyYXl9IGVsZW1lbnRzXG4gKlxuICogQHJldHVybiB7QXJyYXlbT2JqZWN0c119XG4gKi9cbkRpc3RyaWJ1dGVFbGVtZW50cy5wcm90b3R5cGUuX2NyZWF0ZUdyb3VwcyA9IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XG4gIHZhciByYW5nZUdyb3VwcyA9IFtdLFxuICAgICAgc2VsZiA9IHRoaXMsXG4gICAgICBheGlzID0gdGhpcy5fYXhpcyxcbiAgICAgIGRpbWVuc2lvbiA9IHRoaXMuX2RpbWVuc2lvbjtcblxuICBpZiAoIWF4aXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211c3QgaGF2ZSBhIGRlZmluZWQgXCJheGlzXCIgYW5kIFwiZGltZW5zaW9uXCInKTtcbiAgfVxuXG4gIC8vIHNvcnQgYnkgJ2xlZnQtPnJpZ2h0JyBvciAndG9wLT5ib3R0b20nXG4gIHZhciBzb3J0ZWRFbGVtZW50cyA9IHNvcnRCeShlbGVtZW50cywgYXhpcyk7XG5cbiAgZm9yRWFjaChzb3J0ZWRFbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCwgaWR4KSB7XG4gICAgdmFyIGVsZW1lbnRSYW5nZSA9IHNlbGYuX2ZpbmRSYW5nZShlbGVtZW50LCBheGlzLCBkaW1lbnNpb24pLFxuICAgICAgICByYW5nZTtcblxuICAgIHZhciBwcmV2aW91cyA9IHJhbmdlR3JvdXBzW3JhbmdlR3JvdXBzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHByZXZpb3VzICYmIHNlbGYuX2hhc0ludGVyc2VjdGlvbihwcmV2aW91cy5yYW5nZSwgZWxlbWVudFJhbmdlKSkge1xuICAgICAgcmFuZ2VHcm91cHNbcmFuZ2VHcm91cHMubGVuZ3RoIC0gMV0uZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UgPSB7IHJhbmdlOiBlbGVtZW50UmFuZ2UsIGVsZW1lbnRzOiBbIGVsZW1lbnQgXSB9O1xuXG4gICAgICByYW5nZUdyb3Vwcy5wdXNoKHJhbmdlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByYW5nZUdyb3Vwcztcbn07XG5cblxuLyoqXG4gKiBNYXBzIGEgZGlyZWN0aW9uIHRvIHRoZSBhY2NvcmRpbmcgYXhpcyBhbmQgZGltZW5zaW9uXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBkaXJlY3Rpb24gJ2hvcml6b250YWwnIG9yICd2ZXJ0aWNhbCdcbiAqL1xuRGlzdHJpYnV0ZUVsZW1lbnRzLnByb3RvdHlwZS5fc2V0T3JpZW50YXRpb24gPSBmdW5jdGlvbihkaXJlY3Rpb24pIHtcbiAgdmFyIG9yaWVudGF0aW9uID0gQVhJU19ESU1FTlNJT05TW2RpcmVjdGlvbl07XG5cbiAgdGhpcy5fYXhpcyA9IG9yaWVudGF0aW9uWzBdO1xuICB0aGlzLl9kaW1lbnNpb24gPSBvcmllbnRhdGlvblsxXTtcbn07XG5cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHR3byByYW5nZXMgaW50ZXJjZXB0IGVhY2ggb3RoZXJcbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IHJhbmdlQSB7bWluLCBtYXh9XG4gKiBAcGFyYW0gIHtPYmplY3R9IHJhbmdlQiB7bWluLCBtYXh9XG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuRGlzdHJpYnV0ZUVsZW1lbnRzLnByb3RvdHlwZS5faGFzSW50ZXJzZWN0aW9uID0gZnVuY3Rpb24ocmFuZ2VBLCByYW5nZUIpIHtcbiAgcmV0dXJuIE1hdGgubWF4KHJhbmdlQS5taW4sIHJhbmdlQS5tYXgpID49IE1hdGgubWluKHJhbmdlQi5taW4sIHJhbmdlQi5tYXgpICYmXG4gICAgICAgICBNYXRoLm1pbihyYW5nZUEubWluLCByYW5nZUEubWF4KSA8PSBNYXRoLm1heChyYW5nZUIubWluLCByYW5nZUIubWF4KTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgZm9yIGFuIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gIHtbdHlwZV19IGVsZW1lbnQgICBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtbdHlwZV19IGF4aXMgICAgICBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtbdHlwZV19IGRpbWVuc2lvbiBbZGVzY3JpcHRpb25dXG4gKlxuICogQHJldHVybiB7W3R5cGVdfSAgICAgICAgICAgW2Rlc2NyaXB0aW9uXVxuICovXG5EaXN0cmlidXRlRWxlbWVudHMucHJvdG90eXBlLl9maW5kUmFuZ2UgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHZhciBheGlzID0gZWxlbWVudFt0aGlzLl9heGlzXSxcbiAgICAgIGRpbWVuc2lvbiA9IGVsZW1lbnRbdGhpcy5fZGltZW5zaW9uXTtcblxuICByZXR1cm4ge1xuICAgIG1pbjogYXhpcyArIFRIUkVTSE9MRCxcbiAgICBtYXg6IGF4aXMgKyBkaW1lbnNpb24gLSBUSFJFU0hPTERcbiAgfTtcbn07XG4iLCJpbXBvcnQgRGlzdHJpYnV0ZUVsZW1lbnRzIGZyb20gJy4vRGlzdHJpYnV0ZUVsZW1lbnRzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAnZGlzdHJpYnV0ZUVsZW1lbnRzJyBdLFxuICBkaXN0cmlidXRlRWxlbWVudHM6IFsgJ3R5cGUnLCBEaXN0cmlidXRlRWxlbWVudHMgXVxufTtcbiIsIi8qIGdsb2JhbCBUb3VjaEV2ZW50ICovXG5cbnZhciByb3VuZCA9IE1hdGgucm91bmQ7XG5cbmltcG9ydCB7IGFzc2lnbiB9IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZXZlbnQgYXMgZG9tRXZlbnRcbn0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7XG4gIGdldE9yaWdpbmFsLFxuICB0b1BvaW50LFxuICBzdG9wUHJvcGFnYXRpb25cbn0gZnJvbSAnLi4vLi4vdXRpbC9FdmVudCc7XG5cbmltcG9ydCB7XG4gIHNldCBhcyBjdXJzb3JTZXQsXG4gIHVuc2V0IGFzIGN1cnNvclVuc2V0XG59IGZyb20gJy4uLy4uL3V0aWwvQ3Vyc29yJztcblxuaW1wb3J0IHtcbiAgaW5zdGFsbCBhcyBpbnN0YWxsQ2xpY2tUcmFwXG59IGZyb20gJy4uLy4uL3V0aWwvQ2xpY2tUcmFwJztcblxuaW1wb3J0IHtcbiAgZGVsdGEgYXMgZGVsdGFQb3Ncbn0gZnJvbSAnLi4vLi4vdXRpbC9Qb3NpdGlvblV0aWwnO1xuXG52YXIgRFJBR19BQ1RJVkVfQ0xTID0gJ2Rqcy1kcmFnLWFjdGl2ZSc7XG5cblxuZnVuY3Rpb24gcHJldmVudERlZmF1bHQoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbn1cblxuZnVuY3Rpb24gaXNUb3VjaEV2ZW50KGV2ZW50KSB7XG5cbiAgLy8gY2hlY2sgZm9yIFRvdWNoRXZlbnQgYmVpbmcgYXZhaWxhYmxlIGZpcnN0XG4gIC8vIChpLmUuIG5vdCBhdmFpbGFibGUgb24gZGVza3RvcCBGaXJlZm94KVxuICByZXR1cm4gdHlwZW9mIFRvdWNoRXZlbnQgIT09ICd1bmRlZmluZWQnICYmIGV2ZW50IGluc3RhbmNlb2YgVG91Y2hFdmVudDtcbn1cblxuZnVuY3Rpb24gZ2V0TGVuZ3RoKHBvaW50KSB7XG4gIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3cocG9pbnQueCwgMikgKyBNYXRoLnBvdyhwb2ludC55LCAyKSk7XG59XG5cbi8qKlxuICogQSBoZWxwZXIgdGhhdCBmaXJlcyBjYW52YXMgbG9jYWxpemVkIGRyYWcgZXZlbnRzIGFuZCByZWFsaXplc1xuICogdGhlIGdlbmVyYWwgXCJkcmFnLWFuZC1kcm9wXCIgbG9vayBhbmQgZmVlbC5cbiAqXG4gKiBDYWxsaW5nIHtAbGluayBEcmFnZ2luZyNhY3RpdmF0ZX0gYWN0aXZhdGVzIGRyYWdnaW5nIG9uIGEgY2FudmFzLlxuICpcbiAqIEl0IHByb3ZpZGVzIHRoZSBmb2xsb3dpbmc6XG4gKlxuICogICAqIGVtaXRzIGxpZmUgY3ljbGUgZXZlbnRzLCBuYW1lc3BhY2VkIHdpdGggYSBwcmVmaXggYXNzaWduZWRcbiAqICAgICBkdXJpbmcgZHJhZ2dpbmcgYWN0aXZhdGlvblxuICogICAqIHNldHMgYW5kIHJlc3RvcmVzIHRoZSBjdXJzb3JcbiAqICAgKiBzZXRzIGFuZCByZXN0b3JlcyB0aGUgc2VsZWN0aW9uIGlmIGVsZW1lbnRzIHN0aWxsIGV4aXN0XG4gKiAgICogZW5zdXJlcyB0aGVyZSBjYW4gYmUgb25seSBvbmUgZHJhZyBvcGVyYXRpb24gYWN0aXZlIGF0IGEgdGltZVxuICpcbiAqIERyYWdnaW5nIG1heSBiZSBjYW5jZWxlZCBtYW51YWxseSBieSBjYWxsaW5nIHtAbGluayBEcmFnZ2luZyNjYW5jZWx9XG4gKiBvciBieSBwcmVzc2luZyBFU0MuXG4gKlxuICpcbiAqICMjIExpZmUtY3ljbGUgZXZlbnRzXG4gKlxuICogRHJhZ2dpbmcgY2FuIGJlIGluIHRocmVlIGRpZmZlcmVudCBzdGF0ZXMsIG9mZiwgaW5pdGlhbGl6ZWRcbiAqIGFuZCBhY3RpdmUuXG4gKlxuICogKDEpIG9mZjogbm8gZHJhZ2dpbmcgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzXG4gKiAoMikgaW5pdGlhbGl6ZWQ6IGEgbmV3IGRyYWcgb3BlcmF0aW9uIGdvdCBpbml0aWFsaXplZCBidXQgbm90IHlldFxuICogICAgICAgICAgICAgICAgICBzdGFydGVkIChpLmUuIGJlY2F1c2Ugb2Ygbm8gaW5pdGlhbCBtb3ZlKVxuICogKDMpIHN0YXJ0ZWQ6IGRyYWdnaW5nIGlzIGluIHByb2dyZXNzXG4gKlxuICogRXZlbnR1YWxseSBkcmFnZ2luZyB3aWxsIGJlIG9mZiBhZ2FpbiBhZnRlciBhIGRyYWcgb3BlcmF0aW9uIGhhc1xuICogYmVlbiBlbmRlZCBvciBjYW5jZWxlZCB2aWEgdXNlciBjbGljayBvciBFU0Mga2V5IHByZXNzLlxuICpcbiAqIFRvIGluZGljYXRlIHRyYW5zaXRpb25zIGJldHdlZW4gdGhlc2Ugc3RhdGVzIGRyYWdnaW5nIGVtaXRzIGdlbmVyaWNcbiAqIGxpZmUtY3ljbGUgZXZlbnRzIHdpdGggdGhlIGBkcmFnLmAgcHJlZml4IF9hbmRfIGV2ZW50cyBuYW1lc3BhY2VkXG4gKiB0byBhIHByZWZpeCBjaG9vc2VuIGJ5IGEgdXNlciBkdXJpbmcgZHJhZyBpbml0aWFsaXphdGlvbi5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIGV2ZW50cyBhcmUgZW1pdHRlZCAoYXBwcm9wcmlhdGVseSBwcmVmaXhlZCkgdmlhXG4gKiB0aGUge0BsaW5rIEV2ZW50QnVzfS5cbiAqXG4gKiAqIGBpbml0YFxuICogKiBgc3RhcnRgXG4gKiAqIGBtb3ZlYFxuICogKiBgZW5kYFxuICogKiBgZW5kZWRgIChkcmFnZ2luZyBhbHJlYWR5IGluIG9mZiBzdGF0ZSlcbiAqICogYGNhbmNlbGAgKG9ubHkgaWYgcHJldmlvdXNseSBzdGFydGVkKVxuICogKiBgY2FuY2VsZWRgIChkcmFnZ2luZyBhbHJlYWR5IGluIG9mZiBzdGF0ZSwgb25seSBpZiBwcmV2aW91c2x5IHN0YXJ0ZWQpXG4gKiAqIGBjbGVhbnVwYFxuICpcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIE15RHJhZ0NvbXBvbmVudChldmVudEJ1cywgZHJhZ2dpbmcpIHtcbiAqXG4gKiAgIGV2ZW50QnVzLm9uKCdteWRyYWcuc3RhcnQnLCBmdW5jdGlvbihldmVudCkge1xuICogICAgIGNvbnNvbGUubG9nKCd5ZXMsIHdlIHN0YXJ0IGRyYWdnaW5nJyk7XG4gKiAgIH0pO1xuICpcbiAqICAgZXZlbnRCdXMub24oJ215ZHJhZy5tb3ZlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAqICAgICBjb25zb2xlLmxvZygnY2FudmFzIGxvY2FsIGNvb3JkaW5hdGVzJywgZXZlbnQueCwgZXZlbnQueSwgZXZlbnQuZHgsIGV2ZW50LmR5KTtcbiAqXG4gKiAgICAgLy8gbG9jYWwgZHJhZyBkYXRhIGlzIHBhc3NlZCB3aXRoIHRoZSBldmVudFxuICogICAgIGV2ZW50LmNvbnRleHQuZm9vOyAvLyBcIkJBUlwiXG4gKlxuICogICAgIC8vIHRoZSBvcmlnaW5hbCBtb3VzZSBldmVudCwgdG9vXG4gKiAgICAgZXZlbnQub3JpZ2luYWxFdmVudDsgLy8gTW91c2VFdmVudCguLi4pXG4gKiAgIH0pO1xuICpcbiAqICAgZXZlbnRCdXMub24oJ2VsZW1lbnQuY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuICogICAgIGRyYWdnaW5nLmluaXQoZXZlbnQsICdteWRyYWcnLCB7XG4gKiAgICAgICBjdXJzb3I6ICdncmFiYmluZycsXG4gKiAgICAgICBkYXRhOiB7XG4gKiAgICAgICAgIGNvbnRleHQ6IHtcbiAqICAgICAgICAgICBmb286IFwiQkFSXCJcbiAqICAgICAgICAgfVxuICogICAgICAgfVxuICogICAgIH0pO1xuICogICB9KTtcbiAqIH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRHJhZ2dpbmcoZXZlbnRCdXMsIGNhbnZhcywgc2VsZWN0aW9uLCBlbGVtZW50UmVnaXN0cnkpIHtcblxuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgdGhyZXNob2xkOiA1LFxuICAgIHRyYXBDbGljazogdHJ1ZVxuICB9O1xuXG4gIC8vIHRoZSBjdXJyZW50bHkgYWN0aXZlIGRyYWcgb3BlcmF0aW9uXG4gIC8vIGRyYWdnaW5nIGlzIGFjdGl2ZSBhcyBzb29uIGFzIHRoaXMgY29udGV4dCBleGlzdHMuXG4gIC8vXG4gIC8vIGl0IGlzIHZpc3VhbGx5IF9hY3RpdmVfIG9ubHkgd2hlbiBhIGNvbnRleHQuYWN0aXZlIGZsYWcgaXMgc2V0IHRvIHRydWUuXG4gIHZhciBjb250ZXh0O1xuXG4gIC8qIGNvbnZlcnQgYSBnbG9iYWwgZXZlbnQgaW50byBsb2NhbCBjb29yZGluYXRlcyAqL1xuICBmdW5jdGlvbiB0b0xvY2FsUG9pbnQoZ2xvYmFsUG9zaXRpb24pIHtcblxuICAgIHZhciB2aWV3Ym94ID0gY2FudmFzLnZpZXdib3goKTtcblxuICAgIHZhciBjbGllbnRSZWN0ID0gY2FudmFzLl9jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgeDogdmlld2JveC54ICsgKGdsb2JhbFBvc2l0aW9uLnggLSBjbGllbnRSZWN0LmxlZnQpIC8gdmlld2JveC5zY2FsZSxcbiAgICAgIHk6IHZpZXdib3gueSArIChnbG9iYWxQb3NpdGlvbi55IC0gY2xpZW50UmVjdC50b3ApIC8gdmlld2JveC5zY2FsZVxuICAgIH07XG4gIH1cblxuICAvLyBoZWxwZXJzXG5cbiAgZnVuY3Rpb24gZmlyZSh0eXBlLCBkcmFnQ29udGV4dCkge1xuICAgIGRyYWdDb250ZXh0ID0gZHJhZ0NvbnRleHQgfHwgY29udGV4dDtcblxuICAgIHZhciBldmVudCA9IGV2ZW50QnVzLmNyZWF0ZUV2ZW50KFxuICAgICAgYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgZHJhZ0NvbnRleHQucGF5bG9hZCxcbiAgICAgICAgZHJhZ0NvbnRleHQuZGF0YSxcbiAgICAgICAgeyBpc1RvdWNoOiBkcmFnQ29udGV4dC5pc1RvdWNoIH1cbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gZGVmYXVsdCBpbnRlZ3JhdGlvblxuICAgIGlmIChldmVudEJ1cy5maXJlKCdkcmFnLicgKyB0eXBlLCBldmVudCkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV2ZW50QnVzLmZpcmUoZHJhZ0NvbnRleHQucHJlZml4ICsgJy4nICsgdHlwZSwgZXZlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzdG9yZVNlbGVjdGlvbihwcmV2aW91c1NlbGVjdGlvbikge1xuICAgIHZhciBleGlzdGluZ1NlbGVjdGlvbiA9IHByZXZpb3VzU2VsZWN0aW9uLmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICByZXR1cm4gZWxlbWVudFJlZ2lzdHJ5LmdldChlbGVtZW50LmlkKTtcbiAgICB9KTtcblxuICAgIGV4aXN0aW5nU2VsZWN0aW9uLmxlbmd0aCAmJiBzZWxlY3Rpb24uc2VsZWN0KGV4aXN0aW5nU2VsZWN0aW9uKTtcbiAgfVxuXG4gIC8vIGV2ZW50IGxpc3RlbmVyc1xuXG4gIGZ1bmN0aW9uIG1vdmUoZXZlbnQsIGFjdGl2YXRlKSB7XG4gICAgdmFyIHBheWxvYWQgPSBjb250ZXh0LnBheWxvYWQsXG4gICAgICAgIGRpc3BsYWNlbWVudCA9IGNvbnRleHQuZGlzcGxhY2VtZW50O1xuXG4gICAgdmFyIGdsb2JhbFN0YXJ0ID0gY29udGV4dC5nbG9iYWxTdGFydCxcbiAgICAgICAgZ2xvYmFsQ3VycmVudCA9IHRvUG9pbnQoZXZlbnQpLFxuICAgICAgICBnbG9iYWxEZWx0YSA9IGRlbHRhUG9zKGdsb2JhbEN1cnJlbnQsIGdsb2JhbFN0YXJ0KTtcblxuICAgIHZhciBsb2NhbFN0YXJ0ID0gY29udGV4dC5sb2NhbFN0YXJ0LFxuICAgICAgICBsb2NhbEN1cnJlbnQgPSB0b0xvY2FsUG9pbnQoZ2xvYmFsQ3VycmVudCksXG4gICAgICAgIGxvY2FsRGVsdGEgPSBkZWx0YVBvcyhsb2NhbEN1cnJlbnQsIGxvY2FsU3RhcnQpO1xuXG5cbiAgICAvLyBhY3RpdmF0ZSBjb250ZXh0IGV4cGxpY2l0bHkgb3Igb25jZSB0aHJlc2hvbGQgaXMgcmVhY2hlZFxuICAgIGlmICghY29udGV4dC5hY3RpdmUgJiYgKGFjdGl2YXRlIHx8IGdldExlbmd0aChnbG9iYWxEZWx0YSkgPiBjb250ZXh0LnRocmVzaG9sZCkpIHtcblxuICAgICAgLy8gZmlyZSBzdGFydCBldmVudCB3aXRoIG9yaWdpbmFsXG4gICAgICAvLyBzdGFydGluZyBjb29yZGluYXRlc1xuXG4gICAgICBhc3NpZ24ocGF5bG9hZCwge1xuICAgICAgICB4OiByb3VuZChsb2NhbFN0YXJ0LnggKyBkaXNwbGFjZW1lbnQueCksXG4gICAgICAgIHk6IHJvdW5kKGxvY2FsU3RhcnQueSArIGRpc3BsYWNlbWVudC55KSxcbiAgICAgICAgZHg6IDAsXG4gICAgICAgIGR5OiAwXG4gICAgICB9LCB7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50IH0pO1xuXG4gICAgICBpZiAoZmFsc2UgPT09IGZpcmUoJ3N0YXJ0JykpIHtcbiAgICAgICAgcmV0dXJuIGNhbmNlbCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LmFjdGl2ZSA9IHRydWU7XG5cbiAgICAgIC8vIHVuc2V0IHNlbGVjdGlvbiBhbmQgcmVtZW1iZXIgb2xkIHNlbGVjdGlvblxuICAgICAgLy8gdGhlIHByZXZpb3VzIChvbGQpIHNlbGVjdGlvbiB3aWxsIGFsd2F5cyBwYXNzZWRcbiAgICAgIC8vIHdpdGggdGhlIGV2ZW50IHZpYSB0aGUgZXZlbnQucHJldmlvdXNTZWxlY3Rpb24gcHJvcGVydHlcbiAgICAgIGlmICghY29udGV4dC5rZWVwU2VsZWN0aW9uKSB7XG4gICAgICAgIHBheWxvYWQucHJldmlvdXNTZWxlY3Rpb24gPSBzZWxlY3Rpb24uZ2V0KCk7XG4gICAgICAgIHNlbGVjdGlvbi5zZWxlY3QobnVsbCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFsbG93IGN1c3RvbSBjdXJzb3JcbiAgICAgIGlmIChjb250ZXh0LmN1cnNvcikge1xuICAgICAgICBjdXJzb3JTZXQoY29udGV4dC5jdXJzb3IpO1xuICAgICAgfVxuXG4gICAgICAvLyBpbmRpY2F0ZSBkcmFnZ2luZyB2aWEgbWFya2VyIG9uIHJvb3QgZWxlbWVudFxuICAgICAgY2FudmFzLmFkZE1hcmtlcihjYW52YXMuZ2V0Um9vdEVsZW1lbnQoKSwgRFJBR19BQ1RJVkVfQ0xTKTtcbiAgICB9XG5cbiAgICBzdG9wUHJvcGFnYXRpb24oZXZlbnQpO1xuXG4gICAgaWYgKGNvbnRleHQuYWN0aXZlKSB7XG5cbiAgICAgIC8vIHVwZGF0ZSBwYXlsb2FkIHdpdGggYWN0dWFsIGNvb3JkaW5hdGVzXG4gICAgICBhc3NpZ24ocGF5bG9hZCwge1xuICAgICAgICB4OiByb3VuZChsb2NhbEN1cnJlbnQueCArIGRpc3BsYWNlbWVudC54KSxcbiAgICAgICAgeTogcm91bmQobG9jYWxDdXJyZW50LnkgKyBkaXNwbGFjZW1lbnQueSksXG4gICAgICAgIGR4OiByb3VuZChsb2NhbERlbHRhLngpLFxuICAgICAgICBkeTogcm91bmQobG9jYWxEZWx0YS55KVxuICAgICAgfSwgeyBvcmlnaW5hbEV2ZW50OiBldmVudCB9KTtcblxuICAgICAgLy8gZW1pdCBtb3ZlIGV2ZW50XG4gICAgICBmaXJlKCdtb3ZlJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW5kKGV2ZW50KSB7XG4gICAgdmFyIHByZXZpb3VzQ29udGV4dCxcbiAgICAgICAgcmV0dXJuVmFsdWUgPSB0cnVlO1xuXG4gICAgaWYgKGNvbnRleHQuYWN0aXZlKSB7XG5cbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBjb250ZXh0LnBheWxvYWQub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vIHN1cHByZXNzIG9yaWdpbmFsIGV2ZW50IChjbGljaywgLi4uKVxuICAgICAgICAvLyBiZWNhdXNlIHdlIGp1c3QgZW5kZWQgYSBkcmFnIG9wZXJhdGlvblxuICAgICAgICBzdG9wUHJvcGFnYXRpb24oZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICAvLyBpbXBsZW1lbnRhdGlvbnMgbWF5IHN0b3AgcmVzdG9yaW5nIHRoZVxuICAgICAgLy8gb3JpZ2luYWwgc3RhdGUgKHNlbGVjdGlvbnMsIC4uLikgYnkgcHJldmVudGluZyB0aGVcbiAgICAgIC8vIGVuZCBldmVudHMgZGVmYXVsdCBhY3Rpb25cbiAgICAgIHJldHVyblZhbHVlID0gZmlyZSgnZW5kJyk7XG4gICAgfVxuXG4gICAgaWYgKHJldHVyblZhbHVlID09PSBmYWxzZSkge1xuICAgICAgZmlyZSgncmVqZWN0ZWQnKTtcbiAgICB9XG5cbiAgICBwcmV2aW91c0NvbnRleHQgPSBjbGVhbnVwKHJldHVyblZhbHVlICE9PSB0cnVlKTtcblxuICAgIC8vIGxhc3QgZXZlbnQgdG8gYmUgZmlyZWQgd2hlbiBhbGwgZHJhZyBvcGVyYXRpb25zIGFyZSBkb25lXG4gICAgLy8gYXQgdGhpcyBwb2ludCBpbiB0aW1lIG5vIGRyYWcgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzIGFueW1vcmVcbiAgICBmaXJlKCdlbmRlZCcsIHByZXZpb3VzQ29udGV4dCk7XG4gIH1cblxuXG4gIC8vIGNhbmNlbCBhY3RpdmUgZHJhZyBvcGVyYXRpb24gaWYgdGhlIHVzZXIgcHJlc3Nlc1xuICAvLyB0aGUgRVNDIGtleSBvbiB0aGUga2V5Ym9hcmRcblxuICBmdW5jdGlvbiBjaGVja0NhbmNlbChldmVudCkge1xuXG4gICAgaWYgKGV2ZW50LndoaWNoID09PSAyNykge1xuICAgICAgcHJldmVudERlZmF1bHQoZXZlbnQpO1xuXG4gICAgICBjYW5jZWwoKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIHByZXZlbnQgZ2hvc3QgY2xpY2sgdGhhdCBtaWdodCBvY2N1ciBhZnRlciBhIGZpbmlzaGVkXG4gIC8vIGRyYWcgYW5kIGRyb3Agc2Vzc2lvblxuXG4gIGZ1bmN0aW9uIHRyYXBDbGlja0FuZEVuZChldmVudCkge1xuXG4gICAgdmFyIHVudHJhcDtcblxuICAgIC8vIHRyYXAgdGhlIGNsaWNrIGluIGNhc2Ugd2UgYXJlIHBhcnQgb2YgYW4gYWN0aXZlXG4gICAgLy8gZHJhZyBvcGVyYXRpb24uIFRoaXMgd2lsbCBlZmZlY3RpdmVseSBwcmV2ZW50XG4gICAgLy8gdGhlIGdob3N0IGNsaWNrIHRoYXQgY2Fubm90IGJlIGNhbmNlbGVkIG90aGVyd2lzZS5cbiAgICBpZiAoY29udGV4dC5hY3RpdmUpIHtcblxuICAgICAgdW50cmFwID0gaW5zdGFsbENsaWNrVHJhcChldmVudEJ1cyk7XG5cbiAgICAgIC8vIHJlbW92ZSB0cmFwIGFmdGVyIG1pbmltYWwgZGVsYXlcbiAgICAgIHNldFRpbWVvdXQodW50cmFwLCA0MDApO1xuXG4gICAgICAvLyBwcmV2ZW50IGRlZmF1bHQgYWN0aW9uIChjbGljaylcbiAgICAgIHByZXZlbnREZWZhdWx0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBlbmQoZXZlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhcFRvdWNoKGV2ZW50KSB7XG4gICAgbW92ZShldmVudCk7XG4gIH1cblxuICAvLyB1cGRhdGUgdGhlIGRyYWcgZXZlbnRzIGhvdmVyIChkanMubW9kZWwuQmFzZSkgYW5kIGhvdmVyR2Z4IChTbmFwPFNWR0VsZW1lbnQ+KVxuICAvLyBwcm9wZXJ0aWVzIGR1cmluZyBob3ZlciBhbmQgb3V0IGFuZCBmaXJlIHtwcmVmaXh9LmhvdmVyIGFuZCB7cHJlZml4fS5vdXQgcHJvcGVydGllc1xuICAvLyByZXNwZWN0aXZlbHlcblxuICBmdW5jdGlvbiBob3ZlcihldmVudCkge1xuICAgIHZhciBwYXlsb2FkID0gY29udGV4dC5wYXlsb2FkO1xuXG4gICAgcGF5bG9hZC5ob3ZlckdmeCA9IGV2ZW50LmdmeDtcbiAgICBwYXlsb2FkLmhvdmVyID0gZXZlbnQuZWxlbWVudDtcblxuICAgIGZpcmUoJ2hvdmVyJyk7XG4gIH1cblxuICBmdW5jdGlvbiBvdXQoZXZlbnQpIHtcbiAgICBmaXJlKCdvdXQnKTtcblxuICAgIHZhciBwYXlsb2FkID0gY29udGV4dC5wYXlsb2FkO1xuXG4gICAgcGF5bG9hZC5ob3ZlckdmeCA9IG51bGw7XG4gICAgcGF5bG9hZC5ob3ZlciA9IG51bGw7XG4gIH1cblxuXG4gIC8vIGxpZmUtY3ljbGUgbWV0aG9kc1xuXG4gIGZ1bmN0aW9uIGNhbmNlbChyZXN0b3JlKSB7XG4gICAgdmFyIHByZXZpb3VzQ29udGV4dDtcblxuICAgIGlmICghY29udGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB3YXNBY3RpdmUgPSBjb250ZXh0LmFjdGl2ZTtcblxuICAgIGlmICh3YXNBY3RpdmUpIHtcbiAgICAgIGZpcmUoJ2NhbmNlbCcpO1xuICAgIH1cblxuICAgIHByZXZpb3VzQ29udGV4dCA9IGNsZWFudXAocmVzdG9yZSk7XG5cbiAgICBpZiAod2FzQWN0aXZlKSB7XG5cbiAgICAgIC8vIGxhc3QgZXZlbnQgdG8gYmUgZmlyZWQgd2hlbiBhbGwgZHJhZyBvcGVyYXRpb25zIGFyZSBkb25lXG4gICAgICAvLyBhdCB0aGlzIHBvaW50IGluIHRpbWUgbm8gZHJhZyBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MgYW55bW9yZVxuICAgICAgZmlyZSgnY2FuY2VsZWQnLCBwcmV2aW91c0NvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFudXAocmVzdG9yZSkge1xuICAgIHZhciBwcmV2aW91c0NvbnRleHQsXG4gICAgICAgIGVuZERyYWc7XG5cbiAgICBmaXJlKCdjbGVhbnVwJyk7XG5cbiAgICAvLyByZXNldCBjdXJzb3JcbiAgICBjdXJzb3JVbnNldCgpO1xuXG4gICAgaWYgKGNvbnRleHQudHJhcENsaWNrKSB7XG4gICAgICBlbmREcmFnID0gdHJhcENsaWNrQW5kRW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmREcmFnID0gZW5kO1xuICAgIH1cblxuICAgIC8vIHJlc2V0IGRvbSBsaXN0ZW5lcnNcbiAgICBkb21FdmVudC51bmJpbmQoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCBtb3ZlKTtcblxuICAgIGRvbUV2ZW50LnVuYmluZChkb2N1bWVudCwgJ2RyYWdzdGFydCcsIHByZXZlbnREZWZhdWx0KTtcbiAgICBkb21FdmVudC51bmJpbmQoZG9jdW1lbnQsICdzZWxlY3RzdGFydCcsIHByZXZlbnREZWZhdWx0KTtcblxuICAgIGRvbUV2ZW50LnVuYmluZChkb2N1bWVudCwgJ21vdXNlZG93bicsIGVuZERyYWcsIHRydWUpO1xuICAgIGRvbUV2ZW50LnVuYmluZChkb2N1bWVudCwgJ21vdXNldXAnLCBlbmREcmFnLCB0cnVlKTtcblxuICAgIGRvbUV2ZW50LnVuYmluZChkb2N1bWVudCwgJ2tleXVwJywgY2hlY2tDYW5jZWwpO1xuXG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAndG91Y2hzdGFydCcsIHRyYXBUb3VjaCwgdHJ1ZSk7XG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAndG91Y2hjYW5jZWwnLCBjYW5jZWwsIHRydWUpO1xuICAgIGRvbUV2ZW50LnVuYmluZChkb2N1bWVudCwgJ3RvdWNobW92ZScsIG1vdmUsIHRydWUpO1xuICAgIGRvbUV2ZW50LnVuYmluZChkb2N1bWVudCwgJ3RvdWNoZW5kJywgZW5kLCB0cnVlKTtcblxuICAgIGV2ZW50QnVzLm9mZignZWxlbWVudC5ob3ZlcicsIGhvdmVyKTtcbiAgICBldmVudEJ1cy5vZmYoJ2VsZW1lbnQub3V0Jywgb3V0KTtcblxuICAgIC8vIHJlbW92ZSBkcmFnIG1hcmtlciBvbiByb290IGVsZW1lbnRcbiAgICBjYW52YXMucmVtb3ZlTWFya2VyKGNhbnZhcy5nZXRSb290RWxlbWVudCgpLCBEUkFHX0FDVElWRV9DTFMpO1xuXG4gICAgLy8gcmVzdG9yZSBzZWxlY3Rpb24sIHVubGVzcyBpdCBoYXMgY2hhbmdlZFxuICAgIHZhciBwcmV2aW91c1NlbGVjdGlvbiA9IGNvbnRleHQucGF5bG9hZC5wcmV2aW91c1NlbGVjdGlvbjtcblxuICAgIGlmIChyZXN0b3JlICE9PSBmYWxzZSAmJiBwcmV2aW91c1NlbGVjdGlvbiAmJiAhc2VsZWN0aW9uLmdldCgpLmxlbmd0aCkge1xuICAgICAgcmVzdG9yZVNlbGVjdGlvbihwcmV2aW91c1NlbGVjdGlvbik7XG4gICAgfVxuXG4gICAgcHJldmlvdXNDb250ZXh0ID0gY29udGV4dDtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgcmV0dXJuIHByZXZpb3VzQ29udGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgZHJhZyBvcGVyYXRpb24uXG4gICAqXG4gICAqIElmIGBsb2NhbFBvc2l0aW9uYCBpcyBnaXZlbiwgZHJhZyBldmVudHMgd2lsbCBiZSBlbWl0dGVkXG4gICAqIHJlbGF0aXZlIHRvIGl0LlxuICAgKlxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR8VG91Y2hFdmVudH0gW2V2ZW50XVxuICAgKiBAcGFyYW0ge1BvaW50fSBbbG9jYWxQb3NpdGlvbl0gYWN0dWFsIGRpYWdyYW0gbG9jYWwgcG9zaXRpb24gdGhpcyBkcmFnIG9wZXJhdGlvbiBzaG91bGQgc3RhcnQgYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqL1xuICBmdW5jdGlvbiBpbml0KGV2ZW50LCByZWxhdGl2ZVRvLCBwcmVmaXgsIG9wdGlvbnMpIHtcblxuICAgIC8vIG9ubHkgb25lIGRyYWcgb3BlcmF0aW9uIG1heSBiZSBhY3RpdmUsIGF0IGEgdGltZVxuICAgIGlmIChjb250ZXh0KSB7XG4gICAgICBjYW5jZWwoZmFsc2UpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVsYXRpdmVUbyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMgPSBwcmVmaXg7XG4gICAgICBwcmVmaXggPSByZWxhdGl2ZVRvO1xuICAgICAgcmVsYXRpdmVUbyA9IG51bGw7XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IGFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMgfHwge30pO1xuXG4gICAgdmFyIGRhdGEgPSBvcHRpb25zLmRhdGEgfHwge30sXG4gICAgICAgIG9yaWdpbmFsRXZlbnQsXG4gICAgICAgIGdsb2JhbFN0YXJ0LFxuICAgICAgICBsb2NhbFN0YXJ0LFxuICAgICAgICBlbmREcmFnLFxuICAgICAgICBpc1RvdWNoO1xuXG4gICAgaWYgKG9wdGlvbnMudHJhcENsaWNrKSB7XG4gICAgICBlbmREcmFnID0gdHJhcENsaWNrQW5kRW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmREcmFnID0gZW5kO1xuICAgIH1cblxuICAgIGlmIChldmVudCkge1xuICAgICAgb3JpZ2luYWxFdmVudCA9IGdldE9yaWdpbmFsKGV2ZW50KSB8fCBldmVudDtcbiAgICAgIGdsb2JhbFN0YXJ0ID0gdG9Qb2ludChldmVudCk7XG5cbiAgICAgIHN0b3BQcm9wYWdhdGlvbihldmVudCk7XG5cbiAgICAgIC8vIHByZXZlbnQgZGVmYXVsdCBicm93c2VyIGRyYWdnaW5nIGJlaGF2aW9yXG4gICAgICBpZiAob3JpZ2luYWxFdmVudC50eXBlID09PSAnZHJhZ3N0YXJ0Jykge1xuICAgICAgICBwcmV2ZW50RGVmYXVsdChvcmlnaW5hbEV2ZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3JpZ2luYWxFdmVudCA9IG51bGw7XG4gICAgICBnbG9iYWxTdGFydCA9IHsgeDogMCwgeTogMCB9O1xuICAgIH1cblxuICAgIGxvY2FsU3RhcnQgPSB0b0xvY2FsUG9pbnQoZ2xvYmFsU3RhcnQpO1xuXG4gICAgaWYgKCFyZWxhdGl2ZVRvKSB7XG4gICAgICByZWxhdGl2ZVRvID0gbG9jYWxTdGFydDtcbiAgICB9XG5cbiAgICBpc1RvdWNoID0gaXNUb3VjaEV2ZW50KG9yaWdpbmFsRXZlbnQpO1xuXG4gICAgY29udGV4dCA9IGFzc2lnbih7XG4gICAgICBwcmVmaXg6IHByZWZpeCxcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBwYXlsb2FkOiB7fSxcbiAgICAgIGdsb2JhbFN0YXJ0OiBnbG9iYWxTdGFydCxcbiAgICAgIGRpc3BsYWNlbWVudDogZGVsdGFQb3MocmVsYXRpdmVUbywgbG9jYWxTdGFydCksXG4gICAgICBsb2NhbFN0YXJ0OiBsb2NhbFN0YXJ0LFxuICAgICAgaXNUb3VjaDogaXNUb3VjaFxuICAgIH0sIG9wdGlvbnMpO1xuXG4gICAgLy8gc2tpcCBkb20gcmVnaXN0cmF0aW9uIGlmIHRyaWdnZXJcbiAgICAvLyBpcyBzZXQgdG8gbWFudWFsIChkdXJpbmcgdGVzdGluZylcbiAgICBpZiAoIW9wdGlvbnMubWFudWFsKSB7XG5cbiAgICAgIC8vIGFkZCBkb20gbGlzdGVuZXJzXG5cbiAgICAgIGlmIChpc1RvdWNoKSB7XG4gICAgICAgIGRvbUV2ZW50LmJpbmQoZG9jdW1lbnQsICd0b3VjaHN0YXJ0JywgdHJhcFRvdWNoLCB0cnVlKTtcbiAgICAgICAgZG9tRXZlbnQuYmluZChkb2N1bWVudCwgJ3RvdWNoY2FuY2VsJywgY2FuY2VsLCB0cnVlKTtcbiAgICAgICAgZG9tRXZlbnQuYmluZChkb2N1bWVudCwgJ3RvdWNobW92ZScsIG1vdmUsIHRydWUpO1xuICAgICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAndG91Y2hlbmQnLCBlbmQsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICAvLyBhc3N1bWUgd2UgdXNlIHRoZSBtb3VzZSB0byBpbnRlcmFjdCBwZXIgZGVmYXVsdFxuICAgICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgbW92ZSk7XG5cbiAgICAgICAgLy8gcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgZHJhZyBhbmQgdGV4dCBzZWxlY3Rpb24gYmVoYXZpb3JcbiAgICAgICAgZG9tRXZlbnQuYmluZChkb2N1bWVudCwgJ2RyYWdzdGFydCcsIHByZXZlbnREZWZhdWx0KTtcbiAgICAgICAgZG9tRXZlbnQuYmluZChkb2N1bWVudCwgJ3NlbGVjdHN0YXJ0JywgcHJldmVudERlZmF1bHQpO1xuXG4gICAgICAgIGRvbUV2ZW50LmJpbmQoZG9jdW1lbnQsICdtb3VzZWRvd24nLCBlbmREcmFnLCB0cnVlKTtcbiAgICAgICAgZG9tRXZlbnQuYmluZChkb2N1bWVudCwgJ21vdXNldXAnLCBlbmREcmFnLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgZG9tRXZlbnQuYmluZChkb2N1bWVudCwgJ2tleXVwJywgY2hlY2tDYW5jZWwpO1xuXG4gICAgICBldmVudEJ1cy5vbignZWxlbWVudC5ob3ZlcicsIGhvdmVyKTtcbiAgICAgIGV2ZW50QnVzLm9uKCdlbGVtZW50Lm91dCcsIG91dCk7XG4gICAgfVxuXG4gICAgZmlyZSgnaW5pdCcpO1xuXG4gICAgaWYgKG9wdGlvbnMuYXV0b0FjdGl2YXRlKSB7XG4gICAgICBtb3ZlKGV2ZW50LCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvLyBjYW5jZWwgb24gZGlhZ3JhbSBkZXN0cnVjdGlvblxuICBldmVudEJ1cy5vbignZGlhZ3JhbS5kZXN0cm95JywgY2FuY2VsKTtcblxuXG4gIC8vIEFQSVxuXG4gIHRoaXMuaW5pdCA9IGluaXQ7XG4gIHRoaXMubW92ZSA9IG1vdmU7XG4gIHRoaXMuaG92ZXIgPSBob3ZlcjtcbiAgdGhpcy5vdXQgPSBvdXQ7XG4gIHRoaXMuZW5kID0gZW5kO1xuXG4gIHRoaXMuY2FuY2VsID0gY2FuY2VsO1xuXG4gIC8vIGZvciBpbnRyb3NwZWN0aW9uXG5cbiAgdGhpcy5jb250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH07XG5cbiAgdGhpcy5zZXRPcHRpb25zID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIGFzc2lnbihkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG4gIH07XG59XG5cbkRyYWdnaW5nLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnLFxuICAnc2VsZWN0aW9uJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeSdcbl07XG4iLCJpbXBvcnQge1xuICBjbG9zZXN0IGFzIGRvbUNsb3Nlc3Rcbn0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7XG4gIHRvUG9pbnRcbn0gZnJvbSAnLi4vLi4vdXRpbC9FdmVudCc7XG5cbnZhciBISUdIX1BSSU9SSVRZID0gMTUwMDtcblxuXG4vKipcbiAqIEJyb3dzZXJzIG1heSBzd2FsbG93IGNlcnRhaW4gZXZlbnRzIChob3Zlciwgb3V0IC4uLikgaWYgdXNlcnMgYXJlIHRvXG4gKiBmYXN0IHdpdGggdGhlIG1vdXNlLlxuICpcbiAqIEBzZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83NDQ4NDY4L3doeS1jYW50LWktcmVsaWFibHktY2FwdHVyZS1hLW1vdXNlb3V0LWV2ZW50XG4gKlxuICogVGhlIGZpeCBpbXBsZW1lbnRlZCBpbiB0aGlzIGNvbXBvbmVudCBlbnN1cmUgdGhhdCB3ZVxuICpcbiAqIDEpIGhhdmUgYSBob3ZlciBzdGF0ZSBhZnRlciBhIHN1Y2Nlc3NmdWwgZHJhZy5tb3ZlIGV2ZW50XG4gKiAyKSBoYXZlIGFuIG91dCBldmVudCB3aGVuIGRyYWdnaW5nIGxlYXZlcyBhbiBlbGVtZW50XG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RHJhZ2dpbmd9IGRyYWdnaW5nXG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEhvdmVyRml4KGV2ZW50QnVzLCBkcmFnZ2luZywgZWxlbWVudFJlZ2lzdHJ5KSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8qKlxuICAgKiBNYWtlIHN1cmUgd2UgYXJlIGdvZCBkYW1uIGhvdmVyaW5nIVxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBkcmFnZ2luZyBldmVudFxuICAgKi9cbiAgZnVuY3Rpb24gZW5zdXJlSG92ZXIoZXZlbnQpIHtcblxuICAgIGlmIChldmVudC5ob3Zlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBvcmlnaW5hbEV2ZW50ID0gZXZlbnQub3JpZ2luYWxFdmVudDtcblxuICAgIHZhciBnZnggPSBzZWxmLl9maW5kVGFyZ2V0R2Z4KG9yaWdpbmFsRXZlbnQpO1xuXG4gICAgdmFyIGVsZW1lbnQgPSBnZnggJiYgZWxlbWVudFJlZ2lzdHJ5LmdldChnZngpO1xuXG4gICAgaWYgKGdmeCAmJiBlbGVtZW50KSB7XG5cbiAgICAgIC8vIDEpIGNhbmNlbCBjdXJyZW50IG1vdXNlbW92ZVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIC8vIDIpIGVtaXQgZmFrZSBob3ZlciBmb3IgbmV3IHRhcmdldFxuICAgICAgZHJhZ2dpbmcuaG92ZXIoeyBlbGVtZW50OiBlbGVtZW50LCBnZng6IGdmeCB9KTtcblxuICAgICAgLy8gMykgcmUtdHJpZ2dlciBtb3ZlIGV2ZW50XG4gICAgICBkcmFnZ2luZy5tb3ZlKG9yaWdpbmFsRXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXZSB3YWl0IGZvciBhIHNwZWNpZmljIHNlcXVlbmNlIG9mIGV2ZW50cyBiZWZvcmVcbiAgICogZW1pdHRpbmcgYSBmYWtlIGRyYWcuaG92ZXIgZXZlbnQuXG4gICAqXG4gICAqIEV2ZW50IFNlcXVlbmNlOlxuICAgKlxuICAgKiBkcmFnLnN0YXJ0XG4gICAqIGRyYWcubW92ZSA+PiBlbnN1cmUgd2UgYXJlIGhvdmVyaW5nXG4gICAqL1xuICBldmVudEJ1cy5vbignZHJhZy5zdGFydCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICBldmVudEJ1cy5vbmNlKCdkcmFnLm1vdmUnLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgICBlbnN1cmVIb3ZlcihldmVudCk7XG5cbiAgICB9KTtcblxuICB9KTtcblxuXG4gIC8qKlxuICAgKiBXZSBtYWtlIHN1cmUgdGhhdCBkcmFnLm91dCBpcyBhbHdheXMgZmlyZWQsIGV2ZW4gaWYgdGhlXG4gICAqIGJyb3dzZXIgc3dhbGxvd3MgYW4gZWxlbWVudC5vdXQgZXZlbnQuXG4gICAqXG4gICAqIEV2ZW50IHNlcXVlbmNlOlxuICAgKlxuICAgKiBkcmFnLmhvdmVyXG4gICAqIChlbGVtZW50Lm91dCA+PiBzb21ldGltZXMgc3dhbGxvd2VkKVxuICAgKiBlbGVtZW50LmhvdmVyID4+IGVuc3VyZSB3ZSBmaXJlZCBkcmFnLm91dFxuICAgKi9cbiAgZXZlbnRCdXMub24oJ2RyYWcuaW5pdCcsIGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGhvdmVyLCBob3ZlckdmeDtcblxuICAgIGZ1bmN0aW9uIHNldERyYWdIb3ZlcihldmVudCkge1xuICAgICAgaG92ZXIgPSBldmVudC5ob3ZlcjtcbiAgICAgIGhvdmVyR2Z4ID0gZXZlbnQuaG92ZXJHZng7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW5zZXRIb3ZlcigpIHtcbiAgICAgIGhvdmVyID0gbnVsbDtcbiAgICAgIGhvdmVyR2Z4ID0gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVPdXQoKSB7XG5cbiAgICAgIGlmICghaG92ZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZWxlbWVudCA9IGhvdmVyLFxuICAgICAgICAgIGdmeCA9IGhvdmVyR2Z4O1xuXG4gICAgICBob3ZlciA9IG51bGw7XG4gICAgICBob3ZlckdmeCA9IG51bGw7XG5cbiAgICAgIC8vIGVtaXQgc3ludGhldGljIG91dCBldmVudFxuICAgICAgZHJhZ2dpbmcub3V0KHtcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgZ2Z4OiBnZnhcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGV2ZW50QnVzLm9uKCdkcmFnLmhvdmVyJywgc2V0RHJhZ0hvdmVyKTtcbiAgICBldmVudEJ1cy5vbignZWxlbWVudC5vdXQnLCB1bnNldEhvdmVyKTtcbiAgICBldmVudEJ1cy5vbignZWxlbWVudC5ob3ZlcicsIEhJR0hfUFJJT1JJVFksIGVuc3VyZU91dCk7XG5cbiAgICBldmVudEJ1cy5vbmNlKCdkcmFnLmNsZWFudXAnLCBmdW5jdGlvbigpIHtcbiAgICAgIGV2ZW50QnVzLm9mZignZHJhZy5ob3ZlcicsIHNldERyYWdIb3Zlcik7XG4gICAgICBldmVudEJ1cy5vZmYoJ2VsZW1lbnQub3V0JywgdW5zZXRIb3Zlcik7XG4gICAgICBldmVudEJ1cy5vZmYoJ2VsZW1lbnQuaG92ZXInLCBlbnN1cmVPdXQpO1xuICAgIH0pO1xuXG4gIH0pO1xuXG4gIHRoaXMuX2ZpbmRUYXJnZXRHZnggPSBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBwb3NpdGlvbixcbiAgICAgICAgdGFyZ2V0O1xuXG4gICAgaWYgKCEoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHBvc2l0aW9uID0gdG9Qb2ludChldmVudCk7XG5cbiAgICAvLyBkYW1uIGV4cGVuc2l2ZSBvcGVyYXRpb24sIG91Y2ghXG4gICAgdGFyZ2V0ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChwb3NpdGlvbi54LCBwb3NpdGlvbi55KTtcblxuICAgIHJldHVybiBnZXRHZngodGFyZ2V0KTtcbiAgfTtcblxufVxuXG5Ib3ZlckZpeC4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnZHJhZ2dpbmcnLFxuICAnZWxlbWVudFJlZ2lzdHJ5J1xuXTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRHZngodGFyZ2V0KSB7XG4gIHJldHVybiBkb21DbG9zZXN0KHRhcmdldCwgJ3N2ZywgLmRqcy1lbGVtZW50JywgdHJ1ZSk7XG59IiwiaW1wb3J0IFNlbGVjdGlvbk1vZHVsZSBmcm9tICcuLi9zZWxlY3Rpb24nO1xuXG5pbXBvcnQgRHJhZ2dpbmcgZnJvbSAnLi9EcmFnZ2luZyc7XG5pbXBvcnQgSG92ZXJGaXggZnJvbSAnLi9Ib3ZlckZpeCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFtcbiAgICAnaG92ZXJGaXgnXG4gIF0sXG4gIF9fZGVwZW5kc19fOiBbXG4gICAgU2VsZWN0aW9uTW9kdWxlXG4gIF0sXG4gIGRyYWdnaW5nOiBbICd0eXBlJywgRHJhZ2dpbmcgXSxcbiAgaG92ZXJGaXg6IFsgJ3R5cGUnLCBIb3ZlckZpeCBdXG59OyIsImltcG9ydCB7XG4gIGZvckVhY2gsXG4gIGlzQXJyYXlcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG52YXIgTk9UX1JFR0lTVEVSRURfRVJST1IgPSAnaXMgbm90IGEgcmVnaXN0ZXJlZCBhY3Rpb24nLFxuICAgIElTX1JFR0lTVEVSRURfRVJST1IgPSAnaXMgYWxyZWFkeSByZWdpc3RlcmVkJztcblxuXG4vKipcbiAqIEFuIGludGVyZmFjZSB0aGF0IHByb3ZpZGVzIGFjY2VzcyB0byBtb2RlbGluZyBhY3Rpb25zIGJ5IGRlY291cGxpbmdcbiAqIHRoZSBvbmUgd2hvIHJlcXVlc3RzIHRoZSBhY3Rpb24gdG8gYmUgdHJpZ2dlcmVkIGFuZCB0aGUgdHJpZ2dlciBpdHNlbGYuXG4gKlxuICogSXQncyBwb3NzaWJsZSB0byBhZGQgbmV3IGFjdGlvbnMgYnkgcmVnaXN0ZXJpbmcgdGhlbSB3aXRoIMK0cmVnaXN0ZXJBY3Rpb27CtFxuICogYW5kIGxpa2V3aXNlIHVucmVnaXN0ZXIgZXhpc3Rpbmcgb25lcyB3aXRoIMK0dW5yZWdpc3RlckFjdGlvbsK0LlxuICpcbiAqXG4gKiAjIyBMaWZlLUN5Y2xlIGFuZCBjb25maWd1cmF0aW9uXG4gKlxuICogVGhlIGVkaXRvciBhY3Rpb25zIHdpbGwgd2FpdCBmb3IgZGlhZ3JhbSBpbml0aWFsaXphdGlvbiBiZWZvcmVcbiAqIHJlZ2lzdGVyaW5nIGRlZmF1bHQgYWN0aW9ucyBfYW5kXyBmaXJpbmcgYW4gYGVkaXRvckFjdGlvbnMuaW5pdGAgZXZlbnQuXG4gKlxuICogSW50ZXJlc3RlZCBwYXJ0aWVzIG1heSBsaXN0ZW4gdG8gdGhlIGBlZGl0b3JBY3Rpb25zLmluaXRgIGV2ZW50IHdpdGhcbiAqIGxvdyBwcmlvcml0eSB0byBjaGVjaywgd2hpY2ggYWN0aW9ucyBnb3QgcmVnaXN0ZXJlZC4gT3RoZXIgY29tcG9uZW50c1xuICogbWF5IHVzZSB0aGUgZXZlbnQgdG8gcmVnaXN0ZXIgdGhlaXIgb3duIGFjdGlvbnMgdmlhIGByZWdpc3RlckFjdGlvbmAuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEVkaXRvckFjdGlvbnMoZXZlbnRCdXMsIGluamVjdG9yKSB7XG5cbiAgLy8gaW5pdGlhbGl6ZSBhY3Rpb25zXG4gIHRoaXMuX2FjdGlvbnMgPSB7fTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRCdXMub24oJ2RpYWdyYW0uaW5pdCcsIGZ1bmN0aW9uKCkge1xuXG4gICAgLy8gYWxsIGRpYWdyYW0gbW9kdWxlcyBnb3QgbG9hZGVkOyBjaGVjayB3aGljaCBvbmVzXG4gICAgLy8gYXJlIGF2YWlsYWJsZSBhbmQgcmVnaXN0ZXIgdGhlIHJlc3BlY3RpdmUgZGVmYXVsdCBhY3Rpb25zXG4gICAgc2VsZi5fcmVnaXN0ZXJEZWZhdWx0QWN0aW9ucyhpbmplY3Rvcik7XG5cbiAgICAvLyBhc2sgaW50ZXJlc3RlZCBwYXJ0aWVzIHRvIHJlZ2lzdGVyIGF2YWlsYWJsZSBlZGl0b3JcbiAgICAvLyBhY3Rpb25zIG9uIGRpYWdyYW0gaW5pdGlhbGl6YXRpb25cbiAgICBldmVudEJ1cy5maXJlKCdlZGl0b3JBY3Rpb25zLmluaXQnLCB7XG4gICAgICBlZGl0b3JBY3Rpb25zOiBzZWxmXG4gICAgfSk7XG4gIH0pO1xuXG59XG5cbkVkaXRvckFjdGlvbnMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2luamVjdG9yJ1xuXTtcblxuLyoqXG4gKiBSZWdpc3RlciBkZWZhdWx0IGFjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcbiAqL1xuRWRpdG9yQWN0aW9ucy5wcm90b3R5cGUuX3JlZ2lzdGVyRGVmYXVsdEFjdGlvbnMgPSBmdW5jdGlvbihpbmplY3Rvcikge1xuXG4gIC8vICgxKSByZXRyaWV2ZSBvcHRpb25hbCBjb21wb25lbnRzIHRvIGludGVncmF0ZSB3aXRoXG5cbiAgdmFyIGNvbW1hbmRTdGFjayA9IGluamVjdG9yLmdldCgnY29tbWFuZFN0YWNrJywgZmFsc2UpO1xuICB2YXIgbW9kZWxpbmcgPSBpbmplY3Rvci5nZXQoJ21vZGVsaW5nJywgZmFsc2UpO1xuICB2YXIgc2VsZWN0aW9uID0gaW5qZWN0b3IuZ2V0KCdzZWxlY3Rpb24nLCBmYWxzZSk7XG4gIHZhciB6b29tU2Nyb2xsID0gaW5qZWN0b3IuZ2V0KCd6b29tU2Nyb2xsJywgZmFsc2UpO1xuICB2YXIgY29weVBhc3RlID0gaW5qZWN0b3IuZ2V0KCdjb3B5UGFzdGUnLCBmYWxzZSk7XG4gIHZhciBjYW52YXMgPSBpbmplY3Rvci5nZXQoJ2NhbnZhcycsIGZhbHNlKTtcbiAgdmFyIHJ1bGVzID0gaW5qZWN0b3IuZ2V0KCdydWxlcycsIGZhbHNlKTtcbiAgdmFyIGtleWJvYXJkTW92ZSA9IGluamVjdG9yLmdldCgna2V5Ym9hcmRNb3ZlJywgZmFsc2UpO1xuICB2YXIga2V5Ym9hcmRNb3ZlU2VsZWN0aW9uID0gaW5qZWN0b3IuZ2V0KCdrZXlib2FyZE1vdmVTZWxlY3Rpb24nLCBmYWxzZSk7XG5cbiAgLy8gKDIpIGNoZWNrIGNvbXBvbmVudHMgYW5kIHJlZ2lzdGVyIGFjdGlvbnNcblxuICBpZiAoY29tbWFuZFN0YWNrKSB7XG4gICAgdGhpcy5yZWdpc3RlcigndW5kbycsIGZ1bmN0aW9uKCkge1xuICAgICAgY29tbWFuZFN0YWNrLnVuZG8oKTtcbiAgICB9KTtcblxuICAgIHRoaXMucmVnaXN0ZXIoJ3JlZG8nLCBmdW5jdGlvbigpIHtcbiAgICAgIGNvbW1hbmRTdGFjay5yZWRvKCk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoY29weVBhc3RlICYmIHNlbGVjdGlvbikge1xuICAgIHRoaXMucmVnaXN0ZXIoJ2NvcHknLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzZWxlY3RlZEVsZW1lbnRzID0gc2VsZWN0aW9uLmdldCgpO1xuXG4gICAgICBjb3B5UGFzdGUuY29weShzZWxlY3RlZEVsZW1lbnRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChjb3B5UGFzdGUpIHtcbiAgICB0aGlzLnJlZ2lzdGVyKCdwYXN0ZScsIGZ1bmN0aW9uKCkge1xuICAgICAgY29weVBhc3RlLnBhc3RlKCk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoem9vbVNjcm9sbCkge1xuICAgIHRoaXMucmVnaXN0ZXIoJ3N0ZXBab29tJywgZnVuY3Rpb24ob3B0cykge1xuICAgICAgem9vbVNjcm9sbC5zdGVwWm9vbShvcHRzLnZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChjYW52YXMpIHtcbiAgICB0aGlzLnJlZ2lzdGVyKCd6b29tJywgZnVuY3Rpb24ob3B0cykge1xuICAgICAgY2FudmFzLnpvb20ob3B0cy52YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAobW9kZWxpbmcgJiYgc2VsZWN0aW9uICYmIHJ1bGVzKSB7XG4gICAgdGhpcy5yZWdpc3RlcigncmVtb3ZlU2VsZWN0aW9uJywgZnVuY3Rpb24oKSB7XG5cbiAgICAgIHZhciBzZWxlY3RlZEVsZW1lbnRzID0gc2VsZWN0aW9uLmdldCgpO1xuXG4gICAgICBpZiAoIXNlbGVjdGVkRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGFsbG93ZWQgPSBydWxlcy5hbGxvd2VkKCdlbGVtZW50cy5kZWxldGUnLCB7IGVsZW1lbnRzOiBzZWxlY3RlZEVsZW1lbnRzIH0pLFxuICAgICAgICAgIHJlbW92YWJsZUVsZW1lbnRzO1xuXG4gICAgICBpZiAoYWxsb3dlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNBcnJheShhbGxvd2VkKSkge1xuICAgICAgICByZW1vdmFibGVFbGVtZW50cyA9IGFsbG93ZWQ7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmVtb3ZhYmxlRWxlbWVudHMgPSBzZWxlY3RlZEVsZW1lbnRzO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVtb3ZhYmxlRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIG1vZGVsaW5nLnJlbW92ZUVsZW1lbnRzKHJlbW92YWJsZUVsZW1lbnRzLnNsaWNlKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGtleWJvYXJkTW92ZSkge1xuICAgIHRoaXMucmVnaXN0ZXIoJ21vdmVDYW52YXMnLCBmdW5jdGlvbihvcHRzKSB7XG4gICAgICBrZXlib2FyZE1vdmUubW92ZUNhbnZhcyhvcHRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChrZXlib2FyZE1vdmVTZWxlY3Rpb24pIHtcbiAgICB0aGlzLnJlZ2lzdGVyKCdtb3ZlU2VsZWN0aW9uJywgZnVuY3Rpb24ob3B0cykge1xuICAgICAga2V5Ym9hcmRNb3ZlU2VsZWN0aW9uLm1vdmVTZWxlY3Rpb24ob3B0cy5kaXJlY3Rpb24sIG9wdHMuYWNjZWxlcmF0ZWQpO1xuICAgIH0pO1xuICB9XG5cbn07XG5cblxuLyoqXG4gKiBUcmlnZ2VycyBhIHJlZ2lzdGVyZWQgYWN0aW9uXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBhY3Rpb25cbiAqIEBwYXJhbSAge09iamVjdH0gb3B0c1xuICpcbiAqIEByZXR1cm4ge1Vua25vd259IFJldHVybnMgd2hhdCB0aGUgcmVnaXN0ZXJlZCBsaXN0ZW5lciByZXR1cm5zXG4gKi9cbkVkaXRvckFjdGlvbnMucHJvdG90eXBlLnRyaWdnZXIgPSBmdW5jdGlvbihhY3Rpb24sIG9wdHMpIHtcbiAgaWYgKCF0aGlzLl9hY3Rpb25zW2FjdGlvbl0pIHtcbiAgICB0aHJvdyBlcnJvcihhY3Rpb24sIE5PVF9SRUdJU1RFUkVEX0VSUk9SKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9hY3Rpb25zW2FjdGlvbl0ob3B0cyk7XG59O1xuXG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgY29sbGVjdGlvbnMgb2YgYWN0aW9ucy5cbiAqIFRoZSBrZXkgb2YgdGhlIG9iamVjdCB3aWxsIGJlIHRoZSBuYW1lIG9mIHRoZSBhY3Rpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIMK0wrTCtFxuICogdmFyIGFjdGlvbnMgPSB7XG4gKiAgIHNwYWNlVG9vbDogZnVuY3Rpb24oKSB7XG4gKiAgICAgc3BhY2VUb29sLmFjdGl2YXRlU2VsZWN0aW9uKCk7XG4gKiAgIH0sXG4gKiAgIGxhc3NvVG9vbDogZnVuY3Rpb24oKSB7XG4gKiAgICAgbGFzc29Ub29sLmFjdGl2YXRlU2VsZWN0aW9uKCk7XG4gKiAgIH1cbiAqIF07XG4gKlxuICogZWRpdG9yQWN0aW9ucy5yZWdpc3RlcihhY3Rpb25zKTtcbiAqXG4gKiBlZGl0b3JBY3Rpb25zLmlzUmVnaXN0ZXJlZCgnc3BhY2VUb29sJyk7IC8vIHRydWVcbiAqIMK0wrTCtFxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gYWN0aW9uc1xuICovXG5FZGl0b3JBY3Rpb25zLnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uKGFjdGlvbnMsIGxpc3RlbmVyKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBpZiAodHlwZW9mIGFjdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKGFjdGlvbnMsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIGZvckVhY2goYWN0aW9ucywgZnVuY3Rpb24obGlzdGVuZXIsIGFjdGlvbikge1xuICAgIHNlbGYuX3JlZ2lzdGVyQWN0aW9uKGFjdGlvbiwgbGlzdGVuZXIpO1xuICB9KTtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgbGlzdGVuZXIgdG8gYW4gYWN0aW9uIGtleVxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gYWN0aW9uXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gbGlzdGVuZXJcbiAqL1xuRWRpdG9yQWN0aW9ucy5wcm90b3R5cGUuX3JlZ2lzdGVyQWN0aW9uID0gZnVuY3Rpb24oYWN0aW9uLCBsaXN0ZW5lcikge1xuICBpZiAodGhpcy5pc1JlZ2lzdGVyZWQoYWN0aW9uKSkge1xuICAgIHRocm93IGVycm9yKGFjdGlvbiwgSVNfUkVHSVNURVJFRF9FUlJPUik7XG4gIH1cblxuICB0aGlzLl9hY3Rpb25zW2FjdGlvbl0gPSBsaXN0ZW5lcjtcbn07XG5cbi8qKlxuICogVW5yZWdpc3RlciBhbiBleGlzdGluZyBhY3Rpb25cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uXG4gKi9cbkVkaXRvckFjdGlvbnMucHJvdG90eXBlLnVucmVnaXN0ZXIgPSBmdW5jdGlvbihhY3Rpb24pIHtcbiAgaWYgKCF0aGlzLmlzUmVnaXN0ZXJlZChhY3Rpb24pKSB7XG4gICAgdGhyb3cgZXJyb3IoYWN0aW9uLCBOT1RfUkVHSVNURVJFRF9FUlJPUik7XG4gIH1cblxuICB0aGlzLl9hY3Rpb25zW2FjdGlvbl0gPSB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG51bWJlciBvZiBhY3Rpb25zIHRoYXQgYXJlIGN1cnJlbnRseSByZWdpc3RlcmVkXG4gKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5FZGl0b3JBY3Rpb25zLnByb3RvdHlwZS5nZXRBY3Rpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9hY3Rpb25zKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdldGhlciB0aGUgZ2l2ZW4gYWN0aW9uIGlzIHJlZ2lzdGVyZWRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuRWRpdG9yQWN0aW9ucy5wcm90b3R5cGUuaXNSZWdpc3RlcmVkID0gZnVuY3Rpb24oYWN0aW9uKSB7XG4gIHJldHVybiAhIXRoaXMuX2FjdGlvbnNbYWN0aW9uXTtcbn07XG5cblxuZnVuY3Rpb24gZXJyb3IoYWN0aW9uLCBtZXNzYWdlKSB7XG4gIHJldHVybiBuZXcgRXJyb3IoYWN0aW9uICsgJyAnICsgbWVzc2FnZSk7XG59XG4iLCJpbXBvcnQgRWRpdG9yQWN0aW9ucyBmcm9tICcuL0VkaXRvckFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdlZGl0b3JBY3Rpb25zJyBdLFxuICBlZGl0b3JBY3Rpb25zOiBbICd0eXBlJywgRWRpdG9yQWN0aW9ucyBdXG59O1xuIiwidmFyIE1BUktFUl9PSyA9ICdjb25uZWN0LW9rJyxcbiAgICBNQVJLRVJfTk9UX09LID0gJ2Nvbm5lY3Qtbm90LW9rJztcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBjb25zdHJ1Y3RvclxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0RyYWdnaW5nfSBkcmFnZ2luZ1xuICogQHBhcmFtIHtDb25uZWN0fSBjb25uZWN0XG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge1Rvb2xNYW5hZ2VyfSB0b29sTWFuYWdlclxuICogQHBhcmFtIHtSdWxlc30gcnVsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gR2xvYmFsQ29ubmVjdChcbiAgICBldmVudEJ1cywgZHJhZ2dpbmcsIGNvbm5lY3QsXG4gICAgY2FudmFzLCB0b29sTWFuYWdlciwgcnVsZXMpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdGhpcy5fZHJhZ2dpbmcgPSBkcmFnZ2luZztcbiAgdGhpcy5fcnVsZXMgPSBydWxlcztcblxuICB0b29sTWFuYWdlci5yZWdpc3RlclRvb2woJ2dsb2JhbC1jb25uZWN0Jywge1xuICAgIHRvb2w6ICdnbG9iYWwtY29ubmVjdCcsXG4gICAgZHJhZ2dpbmc6ICdnbG9iYWwtY29ubmVjdC5kcmFnJ1xuICB9KTtcblxuICBldmVudEJ1cy5vbignZ2xvYmFsLWNvbm5lY3QuaG92ZXInLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc3RhcnRUYXJnZXQgPSBldmVudC5ob3ZlcjtcblxuICAgIHZhciBjYW5TdGFydENvbm5lY3QgPSBjb250ZXh0LmNhblN0YXJ0Q29ubmVjdCA9IHNlbGYuY2FuU3RhcnRDb25uZWN0KHN0YXJ0VGFyZ2V0KTtcblxuICAgIC8vIHNpbXBseSBpZ25vcmUgaG92ZXJcbiAgICBpZiAoY2FuU3RhcnRDb25uZWN0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGV4dC5zdGFydFRhcmdldCA9IHN0YXJ0VGFyZ2V0O1xuXG4gICAgY2FudmFzLmFkZE1hcmtlcihzdGFydFRhcmdldCwgY2FuU3RhcnRDb25uZWN0ID8gTUFSS0VSX09LIDogTUFSS0VSX05PVF9PSyk7XG4gIH0pO1xuXG5cbiAgZXZlbnRCdXMub24oWyAnZ2xvYmFsLWNvbm5lY3Qub3V0JywgJ2dsb2JhbC1jb25uZWN0LmNsZWFudXAnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHN0YXJ0VGFyZ2V0ID0gZXZlbnQuY29udGV4dC5zdGFydFRhcmdldCxcbiAgICAgICAgY2FuU3RhcnRDb25uZWN0ID0gZXZlbnQuY29udGV4dC5jYW5TdGFydENvbm5lY3Q7XG5cbiAgICBpZiAoc3RhcnRUYXJnZXQpIHtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoc3RhcnRUYXJnZXQsIGNhblN0YXJ0Q29ubmVjdCA/IE1BUktFUl9PSyA6IE1BUktFUl9OT1RfT0spO1xuICAgIH1cbiAgfSk7XG5cblxuICBldmVudEJ1cy5vbihbICdnbG9iYWwtY29ubmVjdC5lbmRlZCcgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHN0YXJ0VGFyZ2V0ID0gY29udGV4dC5zdGFydFRhcmdldCxcbiAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHtcbiAgICAgICAgICB4OiBldmVudC54LFxuICAgICAgICAgIHk6IGV2ZW50LnlcbiAgICAgICAgfTtcblxuICAgIHZhciBjYW5TdGFydENvbm5lY3QgPSBzZWxmLmNhblN0YXJ0Q29ubmVjdChzdGFydFRhcmdldCk7XG5cbiAgICBpZiAoIWNhblN0YXJ0Q29ubmVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50QnVzLm9uY2UoJ2VsZW1lbnQub3V0JywgZnVuY3Rpb24oKSB7XG4gICAgICBldmVudEJ1cy5vbmNlKFsgJ2Nvbm5lY3QuZW5kZWQnLCAnY29ubmVjdC5jYW5jZWxlZCcgXSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIGV2ZW50QnVzLmZpcmUoJ2dsb2JhbC1jb25uZWN0LmRyYWcuZW5kZWQnKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25uZWN0LnN0YXJ0KG51bGwsIHN0YXJ0VGFyZ2V0LCBzdGFydFBvc2l0aW9uKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59XG5cbkdsb2JhbENvbm5lY3QuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2RyYWdnaW5nJyxcbiAgJ2Nvbm5lY3QnLFxuICAnY2FudmFzJyxcbiAgJ3Rvb2xNYW5hZ2VyJyxcbiAgJ3J1bGVzJ1xuXTtcblxuLyoqXG4gKiBJbml0aWF0ZXMgdG9vbCBhY3Rpdml0eS5cbiAqL1xuR2xvYmFsQ29ubmVjdC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbihldmVudCkge1xuICB0aGlzLl9kcmFnZ2luZy5pbml0KGV2ZW50LCAnZ2xvYmFsLWNvbm5lY3QnLCB7XG4gICAgdHJhcENsaWNrOiBmYWxzZSxcbiAgICBkYXRhOiB7XG4gICAgICBjb250ZXh0OiB7fVxuICAgIH1cbiAgfSk7XG59O1xuXG5HbG9iYWxDb25uZWN0LnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuaXNBY3RpdmUoKSkge1xuICAgIHRoaXMuX2RyYWdnaW5nLmNhbmNlbCgpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxufTtcblxuR2xvYmFsQ29ubmVjdC5wcm90b3R5cGUuaXNBY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzLl9kcmFnZ2luZy5jb250ZXh0KCk7XG5cbiAgcmV0dXJuIGNvbnRleHQgJiYgL15nbG9iYWwtY29ubmVjdC8udGVzdChjb250ZXh0LnByZWZpeCk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHNvdXJjZSBzaGFwZSBjYW4gaW5pdGlhdGUgY29ubmVjdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtTaGFwZX0gc3RhcnRUYXJnZXRcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbkdsb2JhbENvbm5lY3QucHJvdG90eXBlLmNhblN0YXJ0Q29ubmVjdCA9IGZ1bmN0aW9uKHN0YXJ0VGFyZ2V0KSB7XG4gIHJldHVybiB0aGlzLl9ydWxlcy5hbGxvd2VkKCdjb25uZWN0aW9uLnN0YXJ0JywgeyBzb3VyY2U6IHN0YXJ0VGFyZ2V0IH0pO1xufTtcbiIsImltcG9ydCBDb25uZWN0TW9kdWxlIGZyb20gJy4uL2Nvbm5lY3QnO1xuaW1wb3J0IFJ1bGVzTW9kdWxlIGZyb20gJy4uL3J1bGVzJztcbmltcG9ydCBEcmFnZ2luZ01vZHVsZSBmcm9tICcuLi9kcmFnZ2luZyc7XG5pbXBvcnQgVG9vbE1hbmFnZXJNb2R1bGUgZnJvbSAnLi4vdG9vbC1tYW5hZ2VyJztcblxuaW1wb3J0IEdsb2JhbENvbm5lY3QgZnJvbSAnLi9HbG9iYWxDb25uZWN0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIENvbm5lY3RNb2R1bGUsXG4gICAgUnVsZXNNb2R1bGUsXG4gICAgRHJhZ2dpbmdNb2R1bGUsXG4gICAgVG9vbE1hbmFnZXJNb2R1bGVcbiAgXSxcbiAgZ2xvYmFsQ29ubmVjdDogWyAndHlwZScsIEdsb2JhbENvbm5lY3QgXVxufTtcbiIsImltcG9ydCB7XHJcbiAgc2V0U25hcHBlZCxcclxuICBpc1NuYXBwZWRcclxufSBmcm9tICcuLi9zbmFwcGluZy9TbmFwVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBpc0NtZCB9IGZyb20gJy4uL2tleWJvYXJkL0tleWJvYXJkVXRpbCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGFzc2lnbixcclxuICBpc051bWJlclxyXG59IGZyb20gJ21pbi1kYXNoJztcclxuXHJcbmltcG9ydCB7XHJcbiAgU1BBQ0lORyxcclxuICBxdWFudGl6ZVxyXG59IGZyb20gJy4vR3JpZFV0aWwnO1xyXG5cclxudmFyIExPV0VSX1BSSU9SSVRZID0gMTIwMDtcclxudmFyIExPV19QUklPUklUWSA9IDgwMDtcclxuXHJcbi8qKlxyXG4gKiBCYXNpYyBncmlkIHNuYXBwaW5nIHRoYXQgY292ZXJzIGNvbm5lY3RpbmcsIGNyZWF0aW5nLCBtb3ZpbmcsIHJlc2l6aW5nIHNoYXBlcywgbW92aW5nIGJlbmRwb2ludHNcclxuICogYW5kIGNvbm5lY3Rpb24gc2VnbWVudHMuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHcmlkU25hcHBpbmcoZWxlbWVudFJlZ2lzdHJ5LCBldmVudEJ1cywgY29uZmlnKSB7XHJcblxyXG4gIHZhciBhY3RpdmUgPSAhY29uZmlnIHx8IGNvbmZpZy5hY3RpdmUgIT09IGZhbHNlO1xyXG5cclxuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xyXG5cclxuICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gIGV2ZW50QnVzLm9uKCdkaWFncmFtLmluaXQnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKCkge1xyXG4gICAgc2VsZi5zZXRBY3RpdmUoYWN0aXZlKTtcclxuICB9KTtcclxuXHJcbiAgZXZlbnRCdXMub24oW1xyXG4gICAgJ2NyZWF0ZS5tb3ZlJyxcclxuICAgICdjcmVhdGUuZW5kJyxcclxuICAgICdiZW5kcG9pbnQubW92ZS5tb3ZlJyxcclxuICAgICdiZW5kcG9pbnQubW92ZS5lbmQnLFxyXG4gICAgJ2Nvbm5lY3QubW92ZScsXHJcbiAgICAnY29ubmVjdC5lbmQnLFxyXG4gICAgJ2Nvbm5lY3Rpb25TZWdtZW50Lm1vdmUubW92ZScsXHJcbiAgICAnY29ubmVjdGlvblNlZ21lbnQubW92ZS5lbmQnLFxyXG4gICAgJ3Jlc2l6ZS5tb3ZlJyxcclxuICAgICdyZXNpemUuZW5kJyxcclxuICAgICdzaGFwZS5tb3ZlLm1vdmUnLFxyXG4gICAgJ3NoYXBlLm1vdmUuZW5kJ1xyXG4gIF0sIExPV0VSX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIG9yaWdpbmFsRXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50O1xyXG5cclxuICAgIGlmICghc2VsZi5hY3RpdmUgfHwgKG9yaWdpbmFsRXZlbnQgJiYgaXNDbWQob3JpZ2luYWxFdmVudCkpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgZ3JpZFNuYXBwaW5nQ29udGV4dCA9IGNvbnRleHQuZ3JpZFNuYXBwaW5nQ29udGV4dDtcclxuXHJcbiAgICBpZiAoIWdyaWRTbmFwcGluZ0NvbnRleHQpIHtcclxuICAgICAgZ3JpZFNuYXBwaW5nQ29udGV4dCA9IGNvbnRleHQuZ3JpZFNuYXBwaW5nQ29udGV4dCA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIFsgJ3gnLCAneScgXS5mb3JFYWNoKGZ1bmN0aW9uKGF4aXMpIHtcclxuICAgICAgdmFyIG9wdGlvbnMgPSB7fTtcclxuXHJcbiAgICAgIC8vIGFsbG93IHNuYXBwaW5nIHdpdGggb2Zmc2V0XHJcbiAgICAgIHZhciBzbmFwT2Zmc2V0ID0gZ2V0U25hcE9mZnNldChldmVudCwgYXhpcywgZWxlbWVudFJlZ2lzdHJ5KTtcclxuXHJcbiAgICAgIGlmIChzbmFwT2Zmc2V0KSB7XHJcbiAgICAgICAgb3B0aW9ucy5vZmZzZXQgPSBzbmFwT2Zmc2V0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBhbGxvdyBzbmFwcGluZyB3aXRoIG1pbiBhbmQgbWF4XHJcbiAgICAgIHZhciBzbmFwQ29uc3RyYWludHMgPSBnZXRTbmFwQ29uc3RyYWludHMoZXZlbnQsIGF4aXMpO1xyXG5cclxuICAgICAgaWYgKHNuYXBDb25zdHJhaW50cykge1xyXG4gICAgICAgIGFzc2lnbihvcHRpb25zLCBzbmFwQ29uc3RyYWludHMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWlzU25hcHBlZChldmVudCwgYXhpcykpIHtcclxuICAgICAgICBzZWxmLnNuYXBFdmVudChldmVudCwgYXhpcywgb3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH0pO1xyXG59XHJcblxyXG4vKipcclxuICogU25hcCBhbiBldmVudHMgeCBvciB5IHdpdGggb3B0aW9uYWwgbWluLCBtYXggYW5kIG9mZnNldC5cclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBheGlzXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5taW5dXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5vZmZzZXRdXHJcbiAqL1xyXG5HcmlkU25hcHBpbmcucHJvdG90eXBlLnNuYXBFdmVudCA9IGZ1bmN0aW9uKGV2ZW50LCBheGlzLCBvcHRpb25zKSB7XHJcbiAgdmFyIHNuYXBwZWRWYWx1ZSA9IHRoaXMuc25hcFZhbHVlKGV2ZW50WyBheGlzIF0sIG9wdGlvbnMpO1xyXG5cclxuICBzZXRTbmFwcGVkKGV2ZW50LCBheGlzLCBzbmFwcGVkVmFsdWUpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEV4cG9zZSBncmlkIHNwYWNpbmcgZm9yIHRoaXJkIHBhcnRpZXMgKGkuZS4gZXh0ZW5zaW9ucykuXHJcbiAqXHJcbiAqIEByZXR1cm4ge251bWJlcn0gc3BhY2luZyBvZiBncmlkIGRvdHNcclxuICovXHJcbkdyaWRTbmFwcGluZy5wcm90b3R5cGUuZ2V0R3JpZFNwYWNpbmcgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gU1BBQ0lORztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTbmFwIHZhbHVlIHdpdGggb3B0aW9uYWwgbWluLCBtYXggYW5kIG9mZnNldC5cclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5taW5dXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5vZmZzZXRdXHJcbiAqL1xyXG5HcmlkU25hcHBpbmcucHJvdG90eXBlLnNuYXBWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRpb25zKSB7XHJcbiAgdmFyIG9mZnNldCA9IDA7XHJcblxyXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMub2Zmc2V0KSB7XHJcbiAgICBvZmZzZXQgPSBvcHRpb25zLm9mZnNldDtcclxuICB9XHJcblxyXG4gIHZhbHVlICs9IG9mZnNldDtcclxuXHJcbiAgdmFsdWUgPSBxdWFudGl6ZSh2YWx1ZSwgU1BBQ0lORyk7XHJcblxyXG4gIHZhciBtaW4sIG1heDtcclxuXHJcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5taW4pIHtcclxuICAgIG1pbiA9IG9wdGlvbnMubWluO1xyXG5cclxuICAgIGlmIChpc051bWJlcihtaW4pKSB7XHJcbiAgICAgIG1pbiA9IHF1YW50aXplKG1pbiArIG9mZnNldCwgU1BBQ0lORywgJ2NlaWwnKTtcclxuXHJcbiAgICAgIHZhbHVlID0gTWF0aC5tYXgodmFsdWUsIG1pbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm1heCkge1xyXG4gICAgbWF4ID0gb3B0aW9ucy5tYXg7XHJcblxyXG4gICAgaWYgKGlzTnVtYmVyKG1heCkpIHtcclxuICAgICAgbWF4ID0gcXVhbnRpemUobWF4ICsgb2Zmc2V0LCBTUEFDSU5HLCAnZmxvb3InKTtcclxuXHJcbiAgICAgIHZhbHVlID0gTWF0aC5taW4odmFsdWUsIG1heCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWx1ZSAtPSBvZmZzZXQ7XHJcblxyXG4gIHJldHVybiB2YWx1ZTtcclxufTtcclxuXHJcbkdyaWRTbmFwcGluZy5wcm90b3R5cGUuaXNBY3RpdmUgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gdGhpcy5hY3RpdmU7XHJcbn07XHJcblxyXG5HcmlkU25hcHBpbmcucHJvdG90eXBlLnNldEFjdGl2ZSA9IGZ1bmN0aW9uKGFjdGl2ZSkge1xyXG4gIHRoaXMuYWN0aXZlID0gYWN0aXZlO1xyXG5cclxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdncmlkU25hcHBpbmcudG9nZ2xlJywgeyBhY3RpdmU6IGFjdGl2ZSB9KTtcclxufTtcclxuXHJcbkdyaWRTbmFwcGluZy5wcm90b3R5cGUudG9nZ2xlQWN0aXZlID0gZnVuY3Rpb24oKSB7XHJcbiAgdGhpcy5zZXRBY3RpdmUoIXRoaXMuYWN0aXZlKTtcclxufTtcclxuXHJcbkdyaWRTbmFwcGluZy4kaW5qZWN0ID0gW1xyXG4gICdlbGVtZW50UmVnaXN0cnknLFxyXG4gICdldmVudEJ1cycsXHJcbiAgJ2NvbmZpZy5ncmlkU25hcHBpbmcnXHJcbl07XHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cclxuXHJcbi8qKlxyXG4gKiBHZXQgbWluaW11bSBhbmQgbWF4aW11bSBzbmFwIGNvbnN0cmFpbnRzLlxyXG4gKiBDb25zdHJhaW50cyBhcmUgY2FjaGVkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcclxuICogQHBhcmFtIHtPYmplY3R9IGV2ZW50LmNvbnRleHRcclxuICogQHBhcmFtIHtzdHJpbmd9IGF4aXNcclxuICpcclxuICogQHJldHVybnMge2Jvb2xlYW58T2JqZWN0fVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0U25hcENvbnN0cmFpbnRzKGV2ZW50LCBheGlzKSB7XHJcbiAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICBjcmVhdGVDb25zdHJhaW50cyA9IGNvbnRleHQuY3JlYXRlQ29uc3RyYWludHMsXHJcbiAgICAgIHJlc2l6ZUNvbnN0cmFpbnRzID0gY29udGV4dC5yZXNpemVDb25zdHJhaW50cyB8fCB7fSxcclxuICAgICAgZ3JpZFNuYXBwaW5nQ29udGV4dCA9IGNvbnRleHQuZ3JpZFNuYXBwaW5nQ29udGV4dCxcclxuICAgICAgc25hcENvbnN0cmFpbnRzID0gZ3JpZFNuYXBwaW5nQ29udGV4dC5zbmFwQ29uc3RyYWludHM7XHJcblxyXG4gIC8vIGNhY2hlIHNuYXAgY29uc3RyYWludHNcclxuICBpZiAoc25hcENvbnN0cmFpbnRzICYmIHNuYXBDb25zdHJhaW50c1sgYXhpcyBdKSB7XHJcbiAgICByZXR1cm4gc25hcENvbnN0cmFpbnRzWyBheGlzIF07XHJcbiAgfVxyXG5cclxuICBpZiAoIXNuYXBDb25zdHJhaW50cykge1xyXG4gICAgc25hcENvbnN0cmFpbnRzID0gZ3JpZFNuYXBwaW5nQ29udGV4dC5zbmFwQ29uc3RyYWludHMgPSB7fTtcclxuICB9XHJcblxyXG4gIGlmICghc25hcENvbnN0cmFpbnRzWyBheGlzIF0pIHtcclxuICAgIHNuYXBDb25zdHJhaW50c1sgYXhpcyBdID0ge307XHJcbiAgfVxyXG5cclxuICB2YXIgZGlyZWN0aW9uID0gY29udGV4dC5kaXJlY3Rpb247XHJcblxyXG4gIC8vIGNyZWF0ZVxyXG4gIGlmIChjcmVhdGVDb25zdHJhaW50cykge1xyXG4gICAgaWYgKGlzSG9yaXpvbnRhbChheGlzKSkge1xyXG4gICAgICBzbmFwQ29uc3RyYWludHMueC5taW4gPSBjcmVhdGVDb25zdHJhaW50cy5sZWZ0O1xyXG4gICAgICBzbmFwQ29uc3RyYWludHMueC5tYXggPSBjcmVhdGVDb25zdHJhaW50cy5yaWdodDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNuYXBDb25zdHJhaW50cy55Lm1pbiA9IGNyZWF0ZUNvbnN0cmFpbnRzLnRvcDtcclxuICAgICAgc25hcENvbnN0cmFpbnRzLnkubWF4ID0gY3JlYXRlQ29uc3RyYWludHMuYm90dG9tO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gcmVzaXplXHJcbiAgdmFyIG1pblJlc2l6ZUNvbnN0cmFpbnRzID0gcmVzaXplQ29uc3RyYWludHMubWluLFxyXG4gICAgICBtYXhSZXNpemVDb25zdHJhaW50cyA9IHJlc2l6ZUNvbnN0cmFpbnRzLm1heDtcclxuXHJcbiAgaWYgKG1pblJlc2l6ZUNvbnN0cmFpbnRzKSB7XHJcbiAgICBpZiAoaXNIb3Jpem9udGFsKGF4aXMpKSB7XHJcblxyXG4gICAgICBpZiAoaXNXZXN0KGRpcmVjdGlvbikpIHtcclxuICAgICAgICBzbmFwQ29uc3RyYWludHMueC5tYXggPSBtaW5SZXNpemVDb25zdHJhaW50cy5sZWZ0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNuYXBDb25zdHJhaW50cy54Lm1pbiA9IG1pblJlc2l6ZUNvbnN0cmFpbnRzLnJpZ2h0O1xyXG4gICAgICB9XHJcblxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIGlmIChpc05vcnRoKGRpcmVjdGlvbikpIHtcclxuICAgICAgICBzbmFwQ29uc3RyYWludHMueS5tYXggPSBtaW5SZXNpemVDb25zdHJhaW50cy50b3A7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc25hcENvbnN0cmFpbnRzLnkubWluID0gbWluUmVzaXplQ29uc3RyYWludHMuYm90dG9tO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKG1heFJlc2l6ZUNvbnN0cmFpbnRzKSB7XHJcbiAgICBpZiAoaXNIb3Jpem9udGFsKGF4aXMpKSB7XHJcblxyXG4gICAgICBpZiAoaXNXZXN0KGRpcmVjdGlvbikpIHtcclxuICAgICAgICBzbmFwQ29uc3RyYWludHMueC5taW4gPSBtYXhSZXNpemVDb25zdHJhaW50cy5sZWZ0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNuYXBDb25zdHJhaW50cy54Lm1heCA9IG1heFJlc2l6ZUNvbnN0cmFpbnRzLnJpZ2h0O1xyXG4gICAgICB9XHJcblxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIGlmIChpc05vcnRoKGRpcmVjdGlvbikpIHtcclxuICAgICAgICBzbmFwQ29uc3RyYWludHMueS5taW4gPSBtYXhSZXNpemVDb25zdHJhaW50cy50b3A7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc25hcENvbnN0cmFpbnRzLnkubWF4ID0gbWF4UmVzaXplQ29uc3RyYWludHMuYm90dG9tO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHNuYXBDb25zdHJhaW50c1sgYXhpcyBdO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHNuYXAgb2Zmc2V0LlxyXG4gKiBPZmZzZXQgaXMgY2FjaGVkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcclxuICogQHBhcmFtIHtzdHJpbmd9IGF4aXNcclxuICogQHBhcmFtIHtFbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0U25hcE9mZnNldChldmVudCwgYXhpcywgZWxlbWVudFJlZ2lzdHJ5KSB7XHJcbiAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICBzaGFwZSA9IGV2ZW50LnNoYXBlLFxyXG4gICAgICBncmlkU25hcHBpbmdDb250ZXh0ID0gY29udGV4dC5ncmlkU25hcHBpbmdDb250ZXh0LFxyXG4gICAgICBzbmFwTG9jYXRpb24gPSBncmlkU25hcHBpbmdDb250ZXh0LnNuYXBMb2NhdGlvbixcclxuICAgICAgc25hcE9mZnNldCA9IGdyaWRTbmFwcGluZ0NvbnRleHQuc25hcE9mZnNldDtcclxuXHJcbiAgLy8gY2FjaGUgc25hcCBvZmZzZXRcclxuICBpZiAoc25hcE9mZnNldCAmJiBpc051bWJlcihzbmFwT2Zmc2V0WyBheGlzIF0pKSB7XHJcbiAgICByZXR1cm4gc25hcE9mZnNldFsgYXhpcyBdO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFzbmFwT2Zmc2V0KSB7XHJcbiAgICBzbmFwT2Zmc2V0ID0gZ3JpZFNuYXBwaW5nQ29udGV4dC5zbmFwT2Zmc2V0ID0ge307XHJcbiAgfVxyXG5cclxuICBpZiAoIWlzTnVtYmVyKHNuYXBPZmZzZXRbIGF4aXMgXSkpIHtcclxuICAgIHNuYXBPZmZzZXRbIGF4aXMgXSA9IDA7XHJcbiAgfVxyXG5cclxuICBpZiAoIXNoYXBlKSB7XHJcbiAgICByZXR1cm4gc25hcE9mZnNldFsgYXhpcyBdO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFlbGVtZW50UmVnaXN0cnkuZ2V0KHNoYXBlLmlkKSkge1xyXG5cclxuICAgIGlmIChpc0hvcml6b250YWwoYXhpcykpIHtcclxuICAgICAgc25hcE9mZnNldFsgYXhpcyBdICs9IHNoYXBlWyBheGlzIF0gKyBzaGFwZS53aWR0aCAvIDI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzbmFwT2Zmc2V0WyBheGlzIF0gKz0gc2hhcGVbIGF4aXMgXSArIHNoYXBlLmhlaWdodCAvIDI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAoIXNuYXBMb2NhdGlvbikge1xyXG4gICAgcmV0dXJuIHNuYXBPZmZzZXRbIGF4aXMgXTtcclxuICB9XHJcblxyXG4gIGlmIChheGlzID09PSAneCcpIHtcclxuICAgIGlmICgvbGVmdC8udGVzdChzbmFwTG9jYXRpb24pKSB7XHJcbiAgICAgIHNuYXBPZmZzZXRbIGF4aXMgXSAtPSBzaGFwZS53aWR0aCAvIDI7XHJcbiAgICB9IGVsc2UgaWYgKC9yaWdodC8udGVzdChzbmFwTG9jYXRpb24pKSB7XHJcbiAgICAgIHNuYXBPZmZzZXRbIGF4aXMgXSArPSBzaGFwZS53aWR0aCAvIDI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGlmICgvdG9wLy50ZXN0KHNuYXBMb2NhdGlvbikpIHtcclxuICAgICAgc25hcE9mZnNldFsgYXhpcyBdIC09IHNoYXBlLmhlaWdodCAvIDI7XHJcbiAgICB9IGVsc2UgaWYgKC9ib3R0b20vLnRlc3Qoc25hcExvY2F0aW9uKSkge1xyXG4gICAgICBzbmFwT2Zmc2V0WyBheGlzIF0gKz0gc2hhcGUuaGVpZ2h0IC8gMjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBzbmFwT2Zmc2V0WyBheGlzIF07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSG9yaXpvbnRhbChheGlzKSB7XHJcbiAgcmV0dXJuIGF4aXMgPT09ICd4JztcclxufVxyXG5cclxuZnVuY3Rpb24gaXNOb3J0aChkaXJlY3Rpb24pIHtcclxuICByZXR1cm4gZGlyZWN0aW9uLmluZGV4T2YoJ24nKSAhPT0gLTE7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzV2VzdChkaXJlY3Rpb24pIHtcclxuICByZXR1cm4gZGlyZWN0aW9uLmluZGV4T2YoJ3cnKSAhPT0gLTE7XHJcbn0iLCJleHBvcnQgdmFyIFNQQUNJTkcgPSAxMDtcblxuZXhwb3J0IGZ1bmN0aW9uIHF1YW50aXplKHZhbHVlLCBxdWFudHVtLCBmbikge1xuICBpZiAoIWZuKSB7XG4gICAgZm4gPSAncm91bmQnO1xuICB9XG5cbiAgcmV0dXJuIE1hdGhbIGZuIF0odmFsdWUgLyBxdWFudHVtKSAqIHF1YW50dW07XG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcclxuXHJcbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnLi4vLi4vLi4vY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xyXG5cclxuaW1wb3J0IHtcclxuICBhc3NpZ24sXHJcbiAgaXNTdHJpbmdcclxufSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG5cclxuLyoqXHJcbiAqIEludGVncmF0ZXMgcmVzaXppbmcgd2l0aCBncmlkIHNuYXBwaW5nLlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzaXplQmVoYXZpb3IoZXZlbnRCdXMsIGdyaWRTbmFwcGluZykge1xyXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcclxuXHJcbiAgdGhpcy5fZ3JpZFNuYXBwaW5nID0gZ3JpZFNuYXBwaW5nO1xyXG5cclxuICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUucmVzaXplJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge30sXHJcbiAgICAgICAgYXV0b1Jlc2l6ZSA9IGhpbnRzLmF1dG9SZXNpemU7XHJcblxyXG4gICAgaWYgKCFhdXRvUmVzaXplKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxyXG4gICAgICAgIG5ld0JvdW5kcyA9IGNvbnRleHQubmV3Qm91bmRzO1xyXG5cclxuICAgIGlmIChpc1N0cmluZyhhdXRvUmVzaXplKSkge1xyXG4gICAgICBjb250ZXh0Lm5ld0JvdW5kcyA9IHNlbGYuc25hcENvbXBsZXgobmV3Qm91bmRzLCBhdXRvUmVzaXplKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnRleHQubmV3Qm91bmRzID0gc2VsZi5zbmFwU2ltcGxlKHNoYXBlLCBuZXdCb3VuZHMpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5SZXNpemVCZWhhdmlvci4kaW5qZWN0ID0gW1xyXG4gICdldmVudEJ1cycsXHJcbiAgJ2dyaWRTbmFwcGluZycsXHJcbiAgJ21vZGVsaW5nJ1xyXG5dO1xyXG5cclxuaW5oZXJpdHMoUmVzaXplQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XHJcblxyXG4vKipcclxuICogU25hcCB3aWR0aCBhbmQgaGVpZ2h0IGluIHJlbGF0aW9uIHRvIGNlbnRlci5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuc2hhcGV9IHNoYXBlXHJcbiAqIEBwYXJhbSB7Qm91bmRzfSBuZXdCb3VuZHNcclxuICpcclxuICogQHJldHVybnMge0JvdW5kc30gU25hcHBlZCBib3VuZHMuXHJcbiAqL1xyXG5SZXNpemVCZWhhdmlvci5wcm90b3R5cGUuc25hcFNpbXBsZSA9IGZ1bmN0aW9uKHNoYXBlLCBuZXdCb3VuZHMpIHtcclxuICB2YXIgZ3JpZFNuYXBwaW5nID0gdGhpcy5fZ3JpZFNuYXBwaW5nO1xyXG5cclxuICBuZXdCb3VuZHMud2lkdGggPSBncmlkU25hcHBpbmcuc25hcFZhbHVlKG5ld0JvdW5kcy53aWR0aCwge1xyXG4gICAgbWluOiBuZXdCb3VuZHMud2lkdGhcclxuICB9KTtcclxuXHJcbiAgbmV3Qm91bmRzLmhlaWdodCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUobmV3Qm91bmRzLmhlaWdodCwge1xyXG4gICAgbWluOiBuZXdCb3VuZHMuaGVpZ2h0XHJcbiAgfSk7XHJcblxyXG4gIG5ld0JvdW5kcy54ID0gc2hhcGUueCArIChzaGFwZS53aWR0aCAvIDIpIC0gKG5ld0JvdW5kcy53aWR0aCAvIDIpO1xyXG4gIG5ld0JvdW5kcy55ID0gc2hhcGUueSArIChzaGFwZS5oZWlnaHQgLyAyKSAtIChuZXdCb3VuZHMuaGVpZ2h0IC8gMik7XHJcblxyXG4gIHJldHVybiBuZXdCb3VuZHM7XHJcbn07XHJcblxyXG4vKipcclxuICogU25hcCB4LCB5LCB3aWR0aCBhbmQgaGVpZ2h0IGFjY29yZGluZyB0byBnaXZlbiBkaXJlY3Rpb25zLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0JvdW5kc30gbmV3Qm91bmRzXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXJlY3Rpb25zIC0gRGlyZWN0aW9ucyBhcyB7bnx3fHN8ZX0uXHJcbiAqXHJcbiAqIEByZXR1cm5zIHtCb3VuZHN9IFNuYXBwZWQgYm91bmRzLlxyXG4gKi9cclxuUmVzaXplQmVoYXZpb3IucHJvdG90eXBlLnNuYXBDb21wbGV4ID0gZnVuY3Rpb24obmV3Qm91bmRzLCBkaXJlY3Rpb25zKSB7XHJcbiAgaWYgKC93fGUvLnRlc3QoZGlyZWN0aW9ucykpIHtcclxuICAgIG5ld0JvdW5kcyA9IHRoaXMuc25hcEhvcml6b250YWxseShuZXdCb3VuZHMsIGRpcmVjdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgaWYgKC9ufHMvLnRlc3QoZGlyZWN0aW9ucykpIHtcclxuICAgIG5ld0JvdW5kcyA9IHRoaXMuc25hcFZlcnRpY2FsbHkobmV3Qm91bmRzLCBkaXJlY3Rpb25zKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBuZXdCb3VuZHM7XHJcbn07XHJcblxyXG4vKipcclxuICogU25hcCBpbiBvbmUgb3IgYm90aCBkaXJlY3Rpb25zIGhvcml6b250YWxseS5cclxuICpcclxuICogQHBhcmFtIHtCb3VuZHN9IG5ld0JvdW5kc1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0aW9ucyAtIERpcmVjdGlvbnMgYXMge258d3xzfGV9LlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7Qm91bmRzfSBTbmFwcGVkIGJvdW5kcy5cclxuICovXHJcblJlc2l6ZUJlaGF2aW9yLnByb3RvdHlwZS5zbmFwSG9yaXpvbnRhbGx5ID0gZnVuY3Rpb24obmV3Qm91bmRzLCBkaXJlY3Rpb25zKSB7XHJcbiAgdmFyIGdyaWRTbmFwcGluZyA9IHRoaXMuX2dyaWRTbmFwcGluZyxcclxuICAgICAgd2VzdCA9IC93Ly50ZXN0KGRpcmVjdGlvbnMpLFxyXG4gICAgICBlYXN0ID0gL2UvLnRlc3QoZGlyZWN0aW9ucyk7XHJcblxyXG4gIHZhciBzbmFwcGVkTmV3Qm91bmRzID0ge307XHJcblxyXG4gIHNuYXBwZWROZXdCb3VuZHMud2lkdGggPSBncmlkU25hcHBpbmcuc25hcFZhbHVlKG5ld0JvdW5kcy53aWR0aCwge1xyXG4gICAgbWluOiBuZXdCb3VuZHMud2lkdGhcclxuICB9KTtcclxuXHJcbiAgaWYgKGVhc3QpIHtcclxuXHJcbiAgICAvLyBoYW5kbGUgPHdlPlxyXG4gICAgaWYgKHdlc3QpIHtcclxuICAgICAgc25hcHBlZE5ld0JvdW5kcy54ID0gZ3JpZFNuYXBwaW5nLnNuYXBWYWx1ZShuZXdCb3VuZHMueCwge1xyXG4gICAgICAgIG1heDogbmV3Qm91bmRzLnhcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBzbmFwcGVkTmV3Qm91bmRzLndpZHRoICs9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUobmV3Qm91bmRzLnggLSBzbmFwcGVkTmV3Qm91bmRzLngsIHtcclxuICAgICAgICBtaW46IG5ld0JvdW5kcy54IC0gc25hcHBlZE5ld0JvdW5kcy54XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhhbmRsZSA8ZT5cclxuICAgIGVsc2Uge1xyXG4gICAgICBuZXdCb3VuZHMueCA9IG5ld0JvdW5kcy54ICsgbmV3Qm91bmRzLndpZHRoIC0gc25hcHBlZE5ld0JvdW5kcy53aWR0aDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGFzc2lnbiBzbmFwcGVkIHggYW5kIHdpZHRoXHJcbiAgYXNzaWduKG5ld0JvdW5kcywgc25hcHBlZE5ld0JvdW5kcyk7XHJcblxyXG4gIHJldHVybiBuZXdCb3VuZHM7XHJcbn07XHJcblxyXG4vKipcclxuICogU25hcCBpbiBvbmUgb3IgYm90aCBkaXJlY3Rpb25zIHZlcnRpY2FsbHkuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Qm91bmRzfSBuZXdCb3VuZHNcclxuICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdGlvbnMgLSBEaXJlY3Rpb25zIGFzIHtufHd8c3xlfS5cclxuICpcclxuICogQHJldHVybnMge0JvdW5kc30gU25hcHBlZCBib3VuZHMuXHJcbiAqL1xyXG5SZXNpemVCZWhhdmlvci5wcm90b3R5cGUuc25hcFZlcnRpY2FsbHkgPSBmdW5jdGlvbihuZXdCb3VuZHMsIGRpcmVjdGlvbnMpIHtcclxuICB2YXIgZ3JpZFNuYXBwaW5nID0gdGhpcy5fZ3JpZFNuYXBwaW5nLFxyXG4gICAgICBub3J0aCA9IC9uLy50ZXN0KGRpcmVjdGlvbnMpLFxyXG4gICAgICBzb3V0aCA9IC9zLy50ZXN0KGRpcmVjdGlvbnMpO1xyXG5cclxuICB2YXIgc25hcHBlZE5ld0JvdW5kcyA9IHt9O1xyXG5cclxuICBzbmFwcGVkTmV3Qm91bmRzLmhlaWdodCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUobmV3Qm91bmRzLmhlaWdodCwge1xyXG4gICAgbWluOiBuZXdCb3VuZHMuaGVpZ2h0XHJcbiAgfSk7XHJcblxyXG4gIGlmIChub3J0aCkge1xyXG5cclxuICAgIC8vIGhhbmRsZSA8bnM+XHJcbiAgICBpZiAoc291dGgpIHtcclxuICAgICAgc25hcHBlZE5ld0JvdW5kcy55ID0gZ3JpZFNuYXBwaW5nLnNuYXBWYWx1ZShuZXdCb3VuZHMueSwge1xyXG4gICAgICAgIG1heDogbmV3Qm91bmRzLnlcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBzbmFwcGVkTmV3Qm91bmRzLmhlaWdodCArPSBncmlkU25hcHBpbmcuc25hcFZhbHVlKG5ld0JvdW5kcy55IC0gc25hcHBlZE5ld0JvdW5kcy55LCB7XHJcbiAgICAgICAgbWluOiBuZXdCb3VuZHMueSAtIHNuYXBwZWROZXdCb3VuZHMueVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoYW5kbGUgPG4+XHJcbiAgICBlbHNlIHtcclxuICAgICAgbmV3Qm91bmRzLnkgPSBuZXdCb3VuZHMueSArIG5ld0JvdW5kcy5oZWlnaHQgLSBzbmFwcGVkTmV3Qm91bmRzLmhlaWdodDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGFzc2lnbiBzbmFwcGVkIHkgYW5kIGhlaWdodFxyXG4gIGFzc2lnbihuZXdCb3VuZHMsIHNuYXBwZWROZXdCb3VuZHMpO1xyXG5cclxuICByZXR1cm4gbmV3Qm91bmRzO1xyXG59OyIsInZhciBISUdIX1BSSU9SSVRZID0gMjAwMDtcclxuXHJcbi8qKlxyXG4gKiBJbnRlZ3JhdGVzIHNwYWNlIHRvb2wgd2l0aCBncmlkIHNuYXBwaW5nLlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3BhY2VUb29sQmVoYXZpb3IoZXZlbnRCdXMsIGdyaWRTbmFwcGluZykge1xyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdzcGFjZVRvb2wubW92ZScsXHJcbiAgICAnc3BhY2VUb29sLmVuZCdcclxuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0O1xyXG5cclxuICAgIGlmICghY29udGV4dC5pbml0aWFsaXplZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGF4aXMgPSBjb250ZXh0LmF4aXM7XHJcblxyXG4gICAgdmFyIHNuYXBwZWQ7XHJcblxyXG4gICAgaWYgKGF4aXMgPT09ICd4Jykge1xyXG5cclxuICAgICAgLy8gc25hcCBkZWx0YSB4IHRvIG11bHRpcGxlIG9mIDEwXHJcbiAgICAgIHNuYXBwZWQgPSBncmlkU25hcHBpbmcuc25hcFZhbHVlKGV2ZW50LmR4KTtcclxuXHJcbiAgICAgIGV2ZW50LnggPSBldmVudC54ICsgc25hcHBlZCAtIGV2ZW50LmR4O1xyXG4gICAgICBldmVudC5keCA9IHNuYXBwZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgLy8gc25hcCBkZWx0YSB5IHRvIG11bHRpcGxlIG9mIDEwXHJcbiAgICAgIHNuYXBwZWQgPSBncmlkU25hcHBpbmcuc25hcFZhbHVlKGV2ZW50LmR5KTtcclxuXHJcbiAgICAgIGV2ZW50LnkgPSBldmVudC55ICsgc25hcHBlZCAtIGV2ZW50LmR5O1xyXG4gICAgICBldmVudC5keSA9IHNuYXBwZWQ7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcblNwYWNlVG9vbEJlaGF2aW9yLiRpbmplY3QgPSBbXHJcbiAgJ2V2ZW50QnVzJyxcclxuICAnZ3JpZFNuYXBwaW5nJ1xyXG5dOyIsImltcG9ydCBSZXNpemVCZWhhdmlvciBmcm9tICcuL1Jlc2l6ZUJlaGF2aW9yJztcclxuaW1wb3J0IFNwYWNlVG9vbEJlaGF2aW9yIGZyb20gJy4vU3BhY2VUb29sQmVoYXZpb3InO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIF9faW5pdF9fOiBbXHJcbiAgICAnZ3JpZFNuYXBwaW5nUmVzaXplQmVoYXZpb3InLFxyXG4gICAgJ2dyaWRTbmFwcGluZ1NwYWNlVG9vbEJlaGF2aW9yJ1xyXG4gIF0sXHJcbiAgZ3JpZFNuYXBwaW5nUmVzaXplQmVoYXZpb3I6IFsgJ3R5cGUnLCBSZXNpemVCZWhhdmlvciBdLFxyXG4gIGdyaWRTbmFwcGluZ1NwYWNlVG9vbEJlaGF2aW9yOiBbICd0eXBlJywgU3BhY2VUb29sQmVoYXZpb3IgXVxyXG59OyIsImltcG9ydCBHcmlkU25hcHBpbmcgZnJvbSAnLi9HcmlkU25hcHBpbmcnO1xyXG5cclxuaW1wb3J0IEdyaWRTbmFwcGluZ0JlaGF2aW9yTW9kdWxlIGZyb20gJy4vYmVoYXZpb3InO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIF9fZGVwZW5kc19fOiBbIEdyaWRTbmFwcGluZ0JlaGF2aW9yTW9kdWxlIF0sXHJcbiAgX19pbml0X186IFsgJ2dyaWRTbmFwcGluZycgXSxcclxuICBncmlkU25hcHBpbmc6IFsgJ3R5cGUnLCBHcmlkU25hcHBpbmcgXVxyXG59OyIsImltcG9ydCB7IGhhc1ByaW1hcnlNb2RpZmllciB9IGZyb20gJy4uLy4uL3V0aWwvTW91c2UnO1xuXG5pbXBvcnQgeyBpc0tleSB9IGZyb20gJy4uLy4uL2ZlYXR1cmVzL2tleWJvYXJkL0tleWJvYXJkVXRpbCc7XG5cbnZhciBISUdIX1BSSU9SSVRZID0gMTUwMDtcbnZhciBIQU5EX0NVUlNPUiA9ICdncmFiJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBIYW5kVG9vbChldmVudEJ1cywgY2FudmFzLCBkcmFnZ2luZywgaW5qZWN0b3IsIHRvb2xNYW5hZ2VyKSB7XG4gIHRoaXMuX2RyYWdnaW5nID0gZHJhZ2dpbmc7XG5cbiAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAga2V5Ym9hcmQgPSBpbmplY3Rvci5nZXQoJ2tleWJvYXJkJywgZmFsc2UpO1xuXG4gIHRvb2xNYW5hZ2VyLnJlZ2lzdGVyVG9vbCgnaGFuZCcsIHtcbiAgICB0b29sOiAnaGFuZCcsXG4gICAgZHJhZ2dpbmc6ICdoYW5kLm1vdmUnXG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50Lm1vdXNlZG93bicsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaWYgKGhhc1ByaW1hcnlNb2RpZmllcihldmVudCkpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVNb3ZlKGV2ZW50Lm9yaWdpbmFsRXZlbnQpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LCB0aGlzKTtcblxuICBrZXlib2FyZCAmJiBrZXlib2FyZC5hZGRMaXN0ZW5lcihISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihlKSB7XG4gICAgaWYgKCFpc1NwYWNlKGUua2V5RXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNlbGYuaXNBY3RpdmUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFjdGl2YXRlTW92ZShldmVudCkge1xuICAgICAgc2VsZi5hY3RpdmF0ZU1vdmUoZXZlbnQpO1xuXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgYWN0aXZhdGVNb3ZlKTtcbiAgICB9XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgYWN0aXZhdGVNb3ZlKTtcblxuICAgIGZ1bmN0aW9uIGRlYWN0aXZhdGVNb3ZlKGUpIHtcbiAgICAgIGlmICghaXNTcGFjZShlLmtleUV2ZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBhY3RpdmF0ZU1vdmUpO1xuXG4gICAgICBrZXlib2FyZC5yZW1vdmVMaXN0ZW5lcihkZWFjdGl2YXRlTW92ZSwgJ2tleWJvYXJkLmtleXVwJyk7XG5cbiAgICAgIGRyYWdnaW5nLmNhbmNlbCgpO1xuICAgIH1cblxuICAgIGtleWJvYXJkLmFkZExpc3RlbmVyKEhJR0hfUFJJT1JJVFksIGRlYWN0aXZhdGVNb3ZlLCAna2V5Ym9hcmQua2V5dXAnKTtcbiAgfSwgJ2tleWJvYXJkLmtleWRvd24nKTtcblxuICBldmVudEJ1cy5vbignaGFuZC5lbmQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciB0YXJnZXQgPSBldmVudC5vcmlnaW5hbEV2ZW50LnRhcmdldDtcblxuICAgIC8vIG9ubHkgcmVhY3RpdmUgb24gZGlhZ3JhbSBjbGlja1xuICAgIC8vIG9uIHNvbWUgb2NjYXNpb25zLCBldmVudC5ob3ZlciBpcyBub3Qgc2V0IGFuZCB3ZSBoYXZlIHRvIGNoZWNrIGlmIHRoZSB0YXJnZXQgaXMgYW4gc3ZnXG4gICAgaWYgKCFldmVudC5ob3ZlciAmJiAhKHRhcmdldCBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZXZlbnRCdXMub25jZSgnaGFuZC5lbmRlZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5hY3RpdmF0ZU1vdmUoZXZlbnQub3JpZ2luYWxFdmVudCwgeyByZWFjdGl2YXRlOiB0cnVlIH0pO1xuICAgIH0sIHRoaXMpO1xuXG4gIH0sIHRoaXMpO1xuXG5cbiAgZXZlbnRCdXMub24oJ2hhbmQubW92ZS5tb3ZlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgc2NhbGUgPSBjYW52YXMudmlld2JveCgpLnNjYWxlO1xuXG4gICAgY2FudmFzLnNjcm9sbCh7XG4gICAgICBkeDogZXZlbnQuZHggKiBzY2FsZSxcbiAgICAgIGR5OiBldmVudC5keSAqIHNjYWxlXG4gICAgfSk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdoYW5kLm1vdmUuZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHJlYWN0aXZhdGUgPSBjb250ZXh0LnJlYWN0aXZhdGU7XG5cbiAgICAvLyBEb24ndCByZWFjdGl2YXRlIGlmIHRoZSB1c2VyIGlzIHVzaW5nIHRoZSBrZXlib2FyZCBrZXliaW5kaW5nXG4gICAgaWYgKCFoYXNQcmltYXJ5TW9kaWZpZXIoZXZlbnQpICYmIHJlYWN0aXZhdGUpIHtcblxuICAgICAgZXZlbnRCdXMub25jZSgnaGFuZC5tb3ZlLmVuZGVkJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZUhhbmQoZXZlbnQub3JpZ2luYWxFdmVudCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICB9LCB0aGlzKTtcblxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSwgdGhpcyk7XG5cbn1cblxuSGFuZFRvb2wuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdkcmFnZ2luZycsXG4gICdpbmplY3RvcicsXG4gICd0b29sTWFuYWdlcidcbl07XG5cblxuSGFuZFRvb2wucHJvdG90eXBlLmFjdGl2YXRlTW92ZSA9IGZ1bmN0aW9uKGV2ZW50LCBhdXRvQWN0aXZhdGUsIGNvbnRleHQpIHtcbiAgaWYgKHR5cGVvZiBhdXRvQWN0aXZhdGUgPT09ICdvYmplY3QnKSB7XG4gICAgY29udGV4dCA9IGF1dG9BY3RpdmF0ZTtcbiAgICBhdXRvQWN0aXZhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIHRoaXMuX2RyYWdnaW5nLmluaXQoZXZlbnQsICdoYW5kLm1vdmUnLCB7XG4gICAgYXV0b0FjdGl2YXRlOiBhdXRvQWN0aXZhdGUsXG4gICAgY3Vyc29yOiBIQU5EX0NVUlNPUixcbiAgICBkYXRhOiB7XG4gICAgICBjb250ZXh0OiBjb250ZXh0IHx8IHt9XG4gICAgfVxuICB9KTtcbn07XG5cbkhhbmRUb29sLnByb3RvdHlwZS5hY3RpdmF0ZUhhbmQgPSBmdW5jdGlvbihldmVudCwgYXV0b0FjdGl2YXRlLCByZWFjdGl2YXRlKSB7XG4gIHRoaXMuX2RyYWdnaW5nLmluaXQoZXZlbnQsICdoYW5kJywge1xuICAgIHRyYXBDbGljazogZmFsc2UsXG4gICAgYXV0b0FjdGl2YXRlOiBhdXRvQWN0aXZhdGUsXG4gICAgY3Vyc29yOiBIQU5EX0NVUlNPUixcbiAgICBkYXRhOiB7XG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHJlYWN0aXZhdGU6IHJlYWN0aXZhdGVcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcblxuSGFuZFRvb2wucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgdGhpcy5fZHJhZ2dpbmcuY2FuY2VsKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hY3RpdmF0ZUhhbmQoKTtcbiAgfVxufTtcblxuSGFuZFRvb2wucHJvdG90eXBlLmlzQWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gIHZhciBjb250ZXh0ID0gdGhpcy5fZHJhZ2dpbmcuY29udGV4dCgpO1xuXG4gIGlmIChjb250ZXh0KSB7XG4gICAgcmV0dXJuIC9eKGhhbmR8aGFuZFxcLm1vdmUpJC8udGVzdChjb250ZXh0LnByZWZpeCk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZnVuY3Rpb24gaXNTcGFjZShrZXlFdmVudCkge1xuICByZXR1cm4gaXNLZXkoJyAnLCBrZXlFdmVudCk7XG59IiwiaW1wb3J0IFRvb2xNYW5hZ2VyTW9kdWxlIGZyb20gJy4uL3Rvb2wtbWFuYWdlcic7XG5cbmltcG9ydCBIYW5kVG9vbCBmcm9tICcuL0hhbmRUb29sJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIFRvb2xNYW5hZ2VyTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdoYW5kVG9vbCcgXSxcbiAgaGFuZFRvb2w6IFsgJ3R5cGUnLCBIYW5kVG9vbCBdXG59O1xuIiwiaW1wb3J0IHtcbiAgZm9yRWFjaCxcbiAgYXNzaWduXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZGVsZWdhdGUgYXMgZG9tRGVsZWdhdGUsXG4gIHF1ZXJ5IGFzIGRvbVF1ZXJ5LFxuICBxdWVyeUFsbCBhcyBkb21RdWVyeUFsbFxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHsgaXNQcmltYXJ5QnV0dG9uIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb3VzZSc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZSxcbiAgcmVtb3ZlIGFzIHN2Z1JlbW92ZVxufSBmcm9tICd0aW55LXN2Zyc7XG5cbmltcG9ydCB7XG4gIGNyZWF0ZUxpbmUsXG4gIHVwZGF0ZUxpbmVcbn0gZnJvbSAnLi4vLi4vdXRpbC9SZW5kZXJVdGlsJztcblxuZnVuY3Rpb24gYWxsb3dBbGwoZSkgeyByZXR1cm4gdHJ1ZTsgfVxuXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xuXG5cbi8qKlxuICogQSBwbHVnaW4gdGhhdCBwcm92aWRlcyBpbnRlcmFjdGlvbiBldmVudHMgZm9yIGRpYWdyYW0gZWxlbWVudHMuXG4gKlxuICogSXQgZW1pdHMgdGhlIGZvbGxvd2luZyBldmVudHM6XG4gKlxuICogICAqIGVsZW1lbnQuY2xpY2tcbiAqICAgKiBlbGVtZW50LmNvbnRleHRtZW51XG4gKiAgICogZWxlbWVudC5kYmxjbGlja1xuICogICAqIGVsZW1lbnQuaG92ZXJcbiAqICAgKiBlbGVtZW50Lm1vdXNlZG93blxuICogICAqIGVsZW1lbnQubW91c2Vtb3ZlXG4gKiAgICogZWxlbWVudC5tb3VzZXVwXG4gKiAgICogZWxlbWVudC5vdXRcbiAqXG4gKiBFYWNoIGV2ZW50IGlzIGEgdHVwbGUgeyBlbGVtZW50LCBnZngsIG9yaWdpbmFsRXZlbnQgfS5cbiAqXG4gKiBDYW5jZWxpbmcgdGhlIGV2ZW50IHZpYSBFdmVudCNwcmV2ZW50RGVmYXVsdCgpXG4gKiBwcmV2ZW50cyB0aGUgb3JpZ2luYWwgRE9NIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBJbnRlcmFjdGlvbkV2ZW50cyhldmVudEJ1cywgZWxlbWVudFJlZ2lzdHJ5LCBzdHlsZXMpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLyoqXG4gICAqIEZpcmUgYW4gaW50ZXJhY3Rpb24gZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIGxvY2FsIGV2ZW50IG5hbWUsIGUuZy4gZWxlbWVudC5jbGljay5cbiAgICogQHBhcmFtIHtET01FdmVudH0gZXZlbnQgbmF0aXZlIGV2ZW50XG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IFtlbGVtZW50XSB0aGUgZGlhZ3JhbSBlbGVtZW50IHRvIGVtaXQgdGhlIGV2ZW50IG9uO1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHMgdG8gdGhlIGV2ZW50IHRhcmdldFxuICAgKi9cbiAgZnVuY3Rpb24gZmlyZSh0eXBlLCBldmVudCwgZWxlbWVudCkge1xuXG4gICAgaWYgKGlzSWdub3JlZCh0eXBlLCBldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0LCBnZngsIHJldHVyblZhbHVlO1xuXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICB0YXJnZXQgPSBldmVudC5kZWxlZ2F0ZVRhcmdldCB8fCBldmVudC50YXJnZXQ7XG5cbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgZ2Z4ID0gdGFyZ2V0O1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudFJlZ2lzdHJ5LmdldChnZngpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBnZnggPSBlbGVtZW50UmVnaXN0cnkuZ2V0R3JhcGhpY3MoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKCFnZnggfHwgIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm5WYWx1ZSA9IGV2ZW50QnVzLmZpcmUodHlwZSwge1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIGdmeDogZ2Z4LFxuICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnRcbiAgICB9KTtcblxuICAgIGlmIChyZXR1cm5WYWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPKG5pa2t1KTogZG9jdW1lbnQgdGhpc1xuICB2YXIgaGFuZGxlcnMgPSB7fTtcblxuICBmdW5jdGlvbiBtb3VzZUhhbmRsZXIobG9jYWxFdmVudE5hbWUpIHtcbiAgICByZXR1cm4gaGFuZGxlcnNbbG9jYWxFdmVudE5hbWVdO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNJZ25vcmVkKGxvY2FsRXZlbnROYW1lLCBldmVudCkge1xuXG4gICAgdmFyIGZpbHRlciA9IGlnbm9yZWRGaWx0ZXJzW2xvY2FsRXZlbnROYW1lXSB8fCBpc1ByaW1hcnlCdXR0b247XG5cbiAgICAvLyBvbmx5IHJlYWN0IG9uIGxlZnQgbW91c2UgYnV0dG9uIGludGVyYWN0aW9uc1xuICAgIC8vIGV4Y2VwdCBmb3IgaW50ZXJhY3Rpb24gZXZlbnRzIHRoYXQgYXJlIGVuYWJsZWRcbiAgICAvLyBmb3Igc2VjdW5kYXJ5IG1vdXNlIGJ1dHRvblxuICAgIHJldHVybiAhZmlsdGVyKGV2ZW50KTtcbiAgfVxuXG4gIHZhciBiaW5kaW5ncyA9IHtcbiAgICBjbGljazogJ2VsZW1lbnQuY2xpY2snLFxuICAgIGNvbnRleHRtZW51OiAnZWxlbWVudC5jb250ZXh0bWVudScsXG4gICAgZGJsY2xpY2s6ICdlbGVtZW50LmRibGNsaWNrJyxcbiAgICBtb3VzZWRvd246ICdlbGVtZW50Lm1vdXNlZG93bicsXG4gICAgbW91c2Vtb3ZlOiAnZWxlbWVudC5tb3VzZW1vdmUnLFxuICAgIG1vdXNlb3ZlcjogJ2VsZW1lbnQuaG92ZXInLFxuICAgIG1vdXNlb3V0OiAnZWxlbWVudC5vdXQnLFxuICAgIG1vdXNldXA6ICdlbGVtZW50Lm1vdXNldXAnLFxuICB9O1xuXG4gIHZhciBpZ25vcmVkRmlsdGVycyA9IHtcbiAgICAnZWxlbWVudC5jb250ZXh0bWVudSc6IGFsbG93QWxsXG4gIH07XG5cblxuICAvLyBtYW51YWwgZXZlbnQgdHJpZ2dlciAvLy8vLy8vLy8vXG5cbiAgLyoqXG4gICAqIFRyaWdnZXIgYW4gaW50ZXJhY3Rpb24gZXZlbnQgKGJhc2VkIG9uIGEgbmF0aXZlIGRvbSBldmVudClcbiAgICogb24gdGhlIHRhcmdldCBzaGFwZSBvciBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIHRoZSBuYW1lIG9mIHRoZSB0cmlnZ2VyZWQgRE9NIGV2ZW50XG4gICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnRcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gdGFyZ2V0RWxlbWVudFxuICAgKi9cbiAgZnVuY3Rpb24gdHJpZ2dlck1vdXNlRXZlbnQoZXZlbnROYW1lLCBldmVudCwgdGFyZ2V0RWxlbWVudCkge1xuXG4gICAgLy8gaS5lLiBlbGVtZW50Lm1vdXNlZG93bi4uLlxuICAgIHZhciBsb2NhbEV2ZW50TmFtZSA9IGJpbmRpbmdzW2V2ZW50TmFtZV07XG5cbiAgICBpZiAoIWxvY2FsRXZlbnROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VubWFwcGVkIERPTSBldmVudCBuYW1lIDwnICsgZXZlbnROYW1lICsgJz4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlyZShsb2NhbEV2ZW50TmFtZSwgZXZlbnQsIHRhcmdldEVsZW1lbnQpO1xuICB9XG5cblxuICB2YXIgRUxFTUVOVF9TRUxFQ1RPUiA9ICdzdmcsIC5kanMtZWxlbWVudCc7XG5cbiAgLy8gZXZlbnQgaGFuZGxpbmcgLy8vLy8vL1xuXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnQobm9kZSwgZXZlbnQsIGxvY2FsRXZlbnQsIGlnbm9yZWRGaWx0ZXIpIHtcblxuICAgIHZhciBoYW5kbGVyID0gaGFuZGxlcnNbbG9jYWxFdmVudF0gPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgZmlyZShsb2NhbEV2ZW50LCBldmVudCk7XG4gICAgfTtcblxuICAgIGlmIChpZ25vcmVkRmlsdGVyKSB7XG4gICAgICBpZ25vcmVkRmlsdGVyc1tsb2NhbEV2ZW50XSA9IGlnbm9yZWRGaWx0ZXI7XG4gICAgfVxuXG4gICAgaGFuZGxlci4kZGVsZWdhdGUgPSBkb21EZWxlZ2F0ZS5iaW5kKG5vZGUsIEVMRU1FTlRfU0VMRUNUT1IsIGV2ZW50LCBoYW5kbGVyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVucmVnaXN0ZXJFdmVudChub2RlLCBldmVudCwgbG9jYWxFdmVudCkge1xuXG4gICAgdmFyIGhhbmRsZXIgPSBtb3VzZUhhbmRsZXIobG9jYWxFdmVudCk7XG5cbiAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkb21EZWxlZ2F0ZS51bmJpbmQobm9kZSwgZXZlbnQsIGhhbmRsZXIuJGRlbGVnYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzKHN2Zykge1xuICAgIGZvckVhY2goYmluZGluZ3MsIGZ1bmN0aW9uKHZhbCwga2V5KSB7XG4gICAgICByZWdpc3RlckV2ZW50KHN2Zywga2V5LCB2YWwpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdW5yZWdpc3RlckV2ZW50cyhzdmcpIHtcbiAgICBmb3JFYWNoKGJpbmRpbmdzLCBmdW5jdGlvbih2YWwsIGtleSkge1xuICAgICAgdW5yZWdpc3RlckV2ZW50KHN2Zywga2V5LCB2YWwpO1xuICAgIH0pO1xuICB9XG5cbiAgZXZlbnRCdXMub24oJ2NhbnZhcy5kZXN0cm95JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB1bnJlZ2lzdGVyRXZlbnRzKGV2ZW50LnN2Zyk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjYW52YXMuaW5pdCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmVnaXN0ZXJFdmVudHMoZXZlbnQuc3ZnKTtcbiAgfSk7XG5cblxuICAvLyBoaXQgYm94IHVwZGF0aW5nIC8vLy8vLy8vLy8vLy8vLy9cblxuICBldmVudEJ1cy5vbihbICdzaGFwZS5hZGRlZCcsICdjb25uZWN0aW9uLmFkZGVkJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgZ2Z4ID0gZXZlbnQuZ2Z4O1xuXG4gICAgZXZlbnRCdXMuZmlyZSgnaW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlSGl0JywgeyBlbGVtZW50OiBlbGVtZW50LCBnZng6IGdmeCB9KTtcbiAgfSk7XG5cbiAgLy8gVXBkYXRlIGRqcy1oaXQgb24gY2hhbmdlLlxuICAvLyBBIGxvdyBwcmlvcnRpdHkgaXMgbmVjZXNzYXJ5LCBiZWNhdXNlIGRqcy1oaXQgb2YgbGFiZWxzIGhhcyB0byBiZSB1cGRhdGVkXG4gIC8vIGFmdGVyIHRoZSBsYWJlbCBib3VuZHMgaGF2ZSBiZWVuIHVwZGF0ZWQgaW4gdGhlIHJlbmRlcmVyLlxuICBldmVudEJ1cy5vbihbXG4gICAgJ3NoYXBlLmNoYW5nZWQnLFxuICAgICdjb25uZWN0aW9uLmNoYW5nZWQnXG4gIF0sIExPV19QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgZ2Z4ID0gZXZlbnQuZ2Z4O1xuXG4gICAgZXZlbnRCdXMuZmlyZSgnaW50ZXJhY3Rpb25FdmVudHMudXBkYXRlSGl0JywgeyBlbGVtZW50OiBlbGVtZW50LCBnZng6IGdmeCB9KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2ludGVyYWN0aW9uRXZlbnRzLmNyZWF0ZUhpdCcsIExPV19QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQsXG4gICAgICAgIGdmeCA9IGV2ZW50LmdmeDtcblxuICAgIHNlbGYuY3JlYXRlRGVmYXVsdEhpdChlbGVtZW50LCBnZngpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignaW50ZXJhY3Rpb25FdmVudHMudXBkYXRlSGl0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQsXG4gICAgICAgIGdmeCA9IGV2ZW50LmdmeDtcblxuICAgIHNlbGYudXBkYXRlRGVmYXVsdEhpdChlbGVtZW50LCBnZngpO1xuICB9KTtcblxuXG4gIC8vIGhpdCBzdHlsZXMgLy8vLy8vLy8vLy8vXG5cbiAgdmFyIFNUUk9LRV9ISVRfU1RZTEUgPSBjcmVhdGVIaXRTdHlsZSgnZGpzLWhpdCBkanMtaGl0LXN0cm9rZScpO1xuXG4gIHZhciBDTElDS19TVFJPS0VfSElUX1NUWUxFID0gY3JlYXRlSGl0U3R5bGUoJ2Rqcy1oaXQgZGpzLWhpdC1jbGljay1zdHJva2UnKTtcblxuICB2YXIgQUxMX0hJVF9TVFlMRSA9IGNyZWF0ZUhpdFN0eWxlKCdkanMtaGl0IGRqcy1oaXQtYWxsJyk7XG5cbiAgdmFyIEhJVF9UWVBFUyA9IHtcbiAgICAnYWxsJzogQUxMX0hJVF9TVFlMRSxcbiAgICAnY2xpY2stc3Ryb2tlJzogQ0xJQ0tfU1RST0tFX0hJVF9TVFlMRSxcbiAgICAnc3Ryb2tlJzogU1RST0tFX0hJVF9TVFlMRVxuICB9O1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUhpdFN0eWxlKGNsYXNzTmFtZXMsIGF0dHJzKSB7XG5cbiAgICBhdHRycyA9IGFzc2lnbih7XG4gICAgICBzdHJva2U6ICd3aGl0ZScsXG4gICAgICBzdHJva2VXaWR0aDogMTVcbiAgICB9LCBhdHRycyB8fCB7fSk7XG5cbiAgICByZXR1cm4gc3R5bGVzLmNscyhjbGFzc05hbWVzLCBbICduby1maWxsJywgJ25vLWJvcmRlcicgXSwgYXR0cnMpO1xuICB9XG5cblxuICAvLyBzdHlsZSBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vL1xuXG4gIGZ1bmN0aW9uIGFwcGx5U3R5bGUoaGl0LCB0eXBlKSB7XG5cbiAgICB2YXIgYXR0cnMgPSBISVRfVFlQRVNbdHlwZV07XG5cbiAgICBpZiAoIWF0dHJzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaGl0IHR5cGUgPCcgKyB0eXBlICsgJz4nKTtcbiAgICB9XG5cbiAgICBzdmdBdHRyKGhpdCwgYXR0cnMpO1xuXG4gICAgcmV0dXJuIGhpdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGVuZEhpdChnZngsIGhpdCkge1xuICAgIHN2Z0FwcGVuZChnZngsIGhpdCk7XG4gIH1cblxuXG4gIC8vIEFQSVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgaGludHMgb24gdGhlIGdpdmVuIGdyYXBoaWNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGdmeFxuICAgKi9cbiAgdGhpcy5yZW1vdmVIaXRzID0gZnVuY3Rpb24oZ2Z4KSB7XG4gICAgdmFyIGhpdHMgPSBkb21RdWVyeUFsbCgnLmRqcy1oaXQnLCBnZngpO1xuXG4gICAgZm9yRWFjaChoaXRzLCBzdmdSZW1vdmUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgZGVmYXVsdCBoaXQgZm9yIHRoZSBnaXZlbiBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gZ2Z4XG4gICAqXG4gICAqIEByZXR1cm4ge1NWR0VsZW1lbnR9IGNyZWF0ZWQgaGl0XG4gICAqL1xuICB0aGlzLmNyZWF0ZURlZmF1bHRIaXQgPSBmdW5jdGlvbihlbGVtZW50LCBnZngpIHtcbiAgICB2YXIgd2F5cG9pbnRzID0gZWxlbWVudC53YXlwb2ludHMsXG4gICAgICAgIGlzRnJhbWUgPSBlbGVtZW50LmlzRnJhbWUsXG4gICAgICAgIGJveFR5cGU7XG5cbiAgICBpZiAod2F5cG9pbnRzKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVXYXlwb2ludHNIaXQoZ2Z4LCB3YXlwb2ludHMpO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIGJveFR5cGUgPSBpc0ZyYW1lID8gJ3N0cm9rZScgOiAnYWxsJztcblxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQm94SGl0KGdmeCwgYm94VHlwZSwge1xuICAgICAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBlbGVtZW50LmhlaWdodFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgaGl0cyBmb3IgdGhlIGdpdmVuIHdheXBvaW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtTVkdFbGVtZW50fSBnZnhcbiAgICogQHBhcmFtIHtBcnJheTxQb2ludD59IHdheXBvaW50c1xuICAgKlxuICAgKiBAcmV0dXJuIHtTVkdFbGVtZW50fVxuICAgKi9cbiAgdGhpcy5jcmVhdGVXYXlwb2ludHNIaXQgPSBmdW5jdGlvbihnZngsIHdheXBvaW50cykge1xuXG4gICAgdmFyIGhpdCA9IGNyZWF0ZUxpbmUod2F5cG9pbnRzKTtcblxuICAgIGFwcGx5U3R5bGUoaGl0LCAnc3Ryb2tlJyk7XG5cbiAgICBhcHBlbmRIaXQoZ2Z4LCBoaXQpO1xuXG4gICAgcmV0dXJuIGhpdDtcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlIGhpdHMgZm9yIGEgYm94LlxuICAgKlxuICAgKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGdmeFxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGl0VHlwZVxuICAgKiBAcGFyYW0ge09iamVjdH0gYXR0cnNcbiAgICpcbiAgICogQHJldHVybiB7U1ZHRWxlbWVudH1cbiAgICovXG4gIHRoaXMuY3JlYXRlQm94SGl0ID0gZnVuY3Rpb24oZ2Z4LCB0eXBlLCBhdHRycykge1xuXG4gICAgYXR0cnMgPSBhc3NpZ24oe1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9LCBhdHRycyk7XG5cbiAgICB2YXIgaGl0ID0gc3ZnQ3JlYXRlKCdyZWN0Jyk7XG5cbiAgICBhcHBseVN0eWxlKGhpdCwgdHlwZSk7XG5cbiAgICBzdmdBdHRyKGhpdCwgYXR0cnMpO1xuXG4gICAgYXBwZW5kSGl0KGdmeCwgaGl0KTtcblxuICAgIHJldHVybiBoaXQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBkZWZhdWx0IGhpdCBvZiB0aGUgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtICB7U1ZHRWxlbWVudH0gZ2Z4XG4gICAqXG4gICAqIEByZXR1cm4ge1NWR0VsZW1lbnR9IHVwZGF0ZWQgaGl0XG4gICAqL1xuICB0aGlzLnVwZGF0ZURlZmF1bHRIaXQgPSBmdW5jdGlvbihlbGVtZW50LCBnZngpIHtcblxuICAgIHZhciBoaXQgPSBkb21RdWVyeSgnLmRqcy1oaXQnLCBnZngpO1xuXG4gICAgaWYgKCFoaXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcbiAgICAgIHVwZGF0ZUxpbmUoaGl0LCBlbGVtZW50LndheXBvaW50cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN2Z0F0dHIoaGl0LCB7XG4gICAgICAgIHdpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGl0O1xuICB9O1xuXG4gIHRoaXMuZmlyZSA9IGZpcmU7XG5cbiAgdGhpcy50cmlnZ2VyTW91c2VFdmVudCA9IHRyaWdnZXJNb3VzZUV2ZW50O1xuXG4gIHRoaXMubW91c2VIYW5kbGVyID0gbW91c2VIYW5kbGVyO1xuXG4gIHRoaXMucmVnaXN0ZXJFdmVudCA9IHJlZ2lzdGVyRXZlbnQ7XG4gIHRoaXMudW5yZWdpc3RlckV2ZW50ID0gdW5yZWdpc3RlckV2ZW50O1xufVxuXG5cbkludGVyYWN0aW9uRXZlbnRzLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdlbGVtZW50UmVnaXN0cnknLFxuICAnc3R5bGVzJ1xuXTtcblxuXG4vKipcbiAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgbW91c2UgaG92ZXJlZCBvdmVyIGFuIGVsZW1lbnRcbiAqXG4gKiBAZXZlbnQgZWxlbWVudC5ob3ZlclxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IGdmeFxuICogQHByb3BlcnR5IHtFdmVudH0gb3JpZ2luYWxFdmVudFxuICovXG5cbi8qKlxuICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBtb3VzZSBoYXMgbGVmdCBhbiBlbGVtZW50XG4gKlxuICogQGV2ZW50IGVsZW1lbnQub3V0XG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gZ2Z4XG4gKiBAcHJvcGVydHkge0V2ZW50fSBvcmlnaW5hbEV2ZW50XG4gKi9cblxuLyoqXG4gKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIG1vdXNlIGhhcyBjbGlja2VkIGFuIGVsZW1lbnRcbiAqXG4gKiBAZXZlbnQgZWxlbWVudC5jbGlja1xuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IGdmeFxuICogQHByb3BlcnR5IHtFdmVudH0gb3JpZ2luYWxFdmVudFxuICovXG5cbi8qKlxuICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBtb3VzZSBoYXMgZG91YmxlIGNsaWNrZWQgYW4gZWxlbWVudFxuICpcbiAqIEBldmVudCBlbGVtZW50LmRibGNsaWNrXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gZ2Z4XG4gKiBAcHJvcGVydHkge0V2ZW50fSBvcmlnaW5hbEV2ZW50XG4gKi9cblxuLyoqXG4gKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIG1vdXNlIGhhcyBnb25lIGRvd24gb24gYW4gZWxlbWVudC5cbiAqXG4gKiBAZXZlbnQgZWxlbWVudC5tb3VzZWRvd25cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuXG4vKipcbiAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgbW91c2UgaGFzIGdvbmUgdXAgb24gYW4gZWxlbWVudC5cbiAqXG4gKiBAZXZlbnQgZWxlbWVudC5tb3VzZXVwXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gZ2Z4XG4gKiBAcHJvcGVydHkge0V2ZW50fSBvcmlnaW5hbEV2ZW50XG4gKi9cblxuLyoqXG4gKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIGNvbnRleHQgbWVudSBhY3Rpb24gaXMgdHJpZ2dlcmVkXG4gKiB2aWEgbW91c2Ugb3IgdG91Y2ggY29udHJvbHMuXG4gKlxuICogQGV2ZW50IGVsZW1lbnQuY29udGV4dG1lbnVcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqLyIsImltcG9ydCBJbnRlcmFjdGlvbkV2ZW50cyBmcm9tICcuL0ludGVyYWN0aW9uRXZlbnRzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAnaW50ZXJhY3Rpb25FdmVudHMnIF0sXG4gIGludGVyYWN0aW9uRXZlbnRzOiBbICd0eXBlJywgSW50ZXJhY3Rpb25FdmVudHMgXVxufTsiLCJpbXBvcnQge1xuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbnZhciBERUZBVUxUX0NPTkZJRyA9IHtcbiAgbW92ZVNwZWVkOiAxLFxuICBtb3ZlU3BlZWRBY2NlbGVyYXRlZDogMTBcbn07XG5cbnZhciBISUdIRVJfUFJJT1JJVFkgPSAxNTAwO1xuXG52YXIgTEVGVCA9ICdsZWZ0JztcbnZhciBVUCA9ICd1cCc7XG52YXIgUklHSFQgPSAncmlnaHQnO1xudmFyIERPV04gPSAnZG93bic7XG5cbnZhciBLRVlfVE9fRElSRUNUSU9OID0ge1xuICBBcnJvd0xlZnQ6IExFRlQsXG4gIExlZnQ6IExFRlQsXG4gIEFycm93VXA6IFVQLFxuICBVcDogVVAsXG4gIEFycm93UmlnaHQ6IFJJR0hULFxuICBSaWdodDogUklHSFQsXG4gIEFycm93RG93bjogRE9XTixcbiAgRG93bjogRE9XTlxufTtcblxudmFyIERJUkVDVElPTlNfREVMVEEgPSB7XG4gIGxlZnQ6IGZ1bmN0aW9uKHNwZWVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IC1zcGVlZCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9LFxuICB1cDogZnVuY3Rpb24oc3BlZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IC1zcGVlZFxuICAgIH07XG4gIH0sXG4gIHJpZ2h0OiBmdW5jdGlvbihzcGVlZCkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBzcGVlZCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9LFxuICBkb3duOiBmdW5jdGlvbihzcGVlZCkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogc3BlZWRcbiAgICB9O1xuICB9XG59O1xuXG5cbi8qKlxuICogRW5hYmxlcyB0byBtb3ZlIHNlbGVjdGlvbiB3aXRoIGtleWJvYXJkIGFycm93cy5cbiAqIFVzZSB3aXRoIFNoaWZ0IGZvciBtb2RpZmllZCBzcGVlZCAoZGVmYXVsdD0xLCB3aXRoIFNoaWZ0PTEwKS5cbiAqIFByZXNzZWQgQ21kL0N0cmwgdHVybnMgdGhlIGZlYXR1cmUgb2ZmLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWdcbiAqIEBwYXJhbSB7bnVtYmVyfSBbY29uZmlnLm1vdmVTcGVlZD0xXVxuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcubW92ZVNwZWVkQWNjZWxlcmF0ZWQ9MTBdXG4gKiBAcGFyYW0ge0tleWJvYXJkfSBrZXlib2FyZFxuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7U2VsZWN0aW9ufSBzZWxlY3Rpb25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gS2V5Ym9hcmRNb3ZlU2VsZWN0aW9uKFxuICAgIGNvbmZpZyxcbiAgICBrZXlib2FyZCxcbiAgICBtb2RlbGluZyxcbiAgICBydWxlcyxcbiAgICBzZWxlY3Rpb25cbikge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLl9jb25maWcgPSBhc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLCBjb25maWcgfHwge30pO1xuXG4gIGtleWJvYXJkLmFkZExpc3RlbmVyKEhJR0hFUl9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBrZXlFdmVudCA9IGV2ZW50LmtleUV2ZW50O1xuXG4gICAgdmFyIGRpcmVjdGlvbiA9IEtFWV9UT19ESVJFQ1RJT05ba2V5RXZlbnQua2V5XTtcblxuICAgIGlmICghZGlyZWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleWJvYXJkLmlzQ21kKGtleUV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBhY2NlbGVyYXRlZCA9IGtleWJvYXJkLmlzU2hpZnQoa2V5RXZlbnQpO1xuXG4gICAgc2VsZi5tb3ZlU2VsZWN0aW9uKGRpcmVjdGlvbiwgYWNjZWxlcmF0ZWQpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG5cbiAgLyoqXG4gICAqIE1vdmUgc2VsZWN0ZWQgZWxlbWVudHMgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbixcbiAgICogb3B0aW9uYWxseSBzcGVjaWZ5aW5nIGFjY2VsZXJhdGVkIG1vdmVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0aW9uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FjY2VsZXJhdGVkPWZhbHNlXVxuICAgKi9cbiAgdGhpcy5tb3ZlU2VsZWN0aW9uID0gZnVuY3Rpb24oZGlyZWN0aW9uLCBhY2NlbGVyYXRlZCkge1xuXG4gICAgdmFyIHNlbGVjdGVkRWxlbWVudHMgPSBzZWxlY3Rpb24uZ2V0KCk7XG5cbiAgICBpZiAoIXNlbGVjdGVkRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHNwZWVkID0gdGhpcy5fY29uZmlnW1xuICAgICAgYWNjZWxlcmF0ZWQgP1xuICAgICAgICAnbW92ZVNwZWVkQWNjZWxlcmF0ZWQnIDpcbiAgICAgICAgJ21vdmVTcGVlZCdcbiAgICBdO1xuXG4gICAgdmFyIGRlbHRhID0gRElSRUNUSU9OU19ERUxUQVtkaXJlY3Rpb25dKHNwZWVkKTtcblxuICAgIHZhciBjYW5Nb3ZlID0gcnVsZXMuYWxsb3dlZCgnZWxlbWVudHMubW92ZScsIHtcbiAgICAgIHNoYXBlczogc2VsZWN0ZWRFbGVtZW50c1xuICAgIH0pO1xuXG4gICAgaWYgKGNhbk1vdmUpIHtcbiAgICAgIG1vZGVsaW5nLm1vdmVFbGVtZW50cyhzZWxlY3RlZEVsZW1lbnRzLCBkZWx0YSk7XG4gICAgfVxuICB9O1xuXG59XG5cbktleWJvYXJkTW92ZVNlbGVjdGlvbi4kaW5qZWN0ID0gW1xuICAnY29uZmlnLmtleWJvYXJkTW92ZVNlbGVjdGlvbicsXG4gICdrZXlib2FyZCcsXG4gICdtb2RlbGluZycsXG4gICdydWxlcycsXG4gICdzZWxlY3Rpb24nXG5dOyIsImltcG9ydCBLZXlib2FyZE1vZHVsZSBmcm9tICcuLi9rZXlib2FyZCc7XG5pbXBvcnQgU2VsZWN0aW9uTW9kdWxlIGZyb20gJy4uL3NlbGVjdGlvbic7XG5cbmltcG9ydCBLZXlib2FyZE1vdmVTZWxlY3Rpb24gZnJvbSAnLi9LZXlib2FyZE1vdmVTZWxlY3Rpb24nO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgS2V5Ym9hcmRNb2R1bGUsXG4gICAgU2VsZWN0aW9uTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbXG4gICAgJ2tleWJvYXJkTW92ZVNlbGVjdGlvbidcbiAgXSxcbiAga2V5Ym9hcmRNb3ZlU2VsZWN0aW9uOiBbICd0eXBlJywgS2V5Ym9hcmRNb3ZlU2VsZWN0aW9uIF1cbn07XG4iLCJpbXBvcnQge1xuICBpc0Z1bmN0aW9uXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZXZlbnQgYXMgZG9tRXZlbnQsXG4gIG1hdGNoZXMgYXMgZG9tTWF0Y2hlc1xufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHtcbiAgaGFzTW9kaWZpZXIsXG4gIGlzQ21kLFxuICBpc0tleSxcbiAgaXNTaGlmdFxufSBmcm9tICcuL0tleWJvYXJkVXRpbCc7XG5cbnZhciBLRVlET1dOX0VWRU5UID0gJ2tleWJvYXJkLmtleWRvd24nLFxuICAgIEtFWVVQX0VWRU5UID0gJ2tleWJvYXJkLmtleXVwJztcblxudmFyIERFRkFVTFRfUFJJT1JJVFkgPSAxMDAwO1xuXG5cbi8qKlxuICogQSBrZXlib2FyZCBhYnN0cmFjdGlvbiB0aGF0IG1heSBiZSBhY3RpdmF0ZWQgYW5kXG4gKiBkZWFjdGl2YXRlZCBieSB1c2VycyBhdCB3aWxsLCBjb25zdW1pbmcga2V5IGV2ZW50c1xuICogYW5kIHRyaWdnZXJpbmcgZGlhZ3JhbSBhY3Rpb25zLlxuICpcbiAqIEZvciBrZXlzIHByZXNzZWQgZG93biwga2V5Ym9hcmQgZmlyZXMgYGtleWJvYXJkLmtleWRvd25gIGV2ZW50LlxuICogVGhlIGV2ZW50IGNvbnRleHQgY29udGFpbnMgb25lIGZpZWxkIHdoaWNoIGlzIGBLZXlib2FyZEV2ZW50YCBldmVudC5cbiAqXG4gKiBUaGUgaW1wbGVtZW50YXRpb24gZmlyZXMgdGhlIGZvbGxvd2luZyBrZXkgZXZlbnRzIHRoYXQgYWxsb3dcbiAqIG90aGVyIGNvbXBvbmVudHMgdG8gaG9vayBpbnRvIGtleSBoYW5kbGluZzpcbiAqXG4gKiAgLSBrZXlib2FyZC5iaW5kXG4gKiAgLSBrZXlib2FyZC51bmJpbmRcbiAqICAtIGtleWJvYXJkLmluaXRcbiAqICAtIGtleWJvYXJkLmRlc3Ryb3lcbiAqXG4gKiBBbGwgZXZlbnRzIGNvbnRhaW4gb25lIGZpZWxkIHdoaWNoIGlzIG5vZGUuXG4gKlxuICogQSBkZWZhdWx0IGJpbmRpbmcgZm9yIHRoZSBrZXlib2FyZCBtYXkgYmUgc3BlY2lmaWVkIHZpYSB0aGVcbiAqIGBrZXlib2FyZC5iaW5kVG9gIGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuICpcbiAqIEBwYXJhbSB7Q29uZmlnfSBjb25maWdcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEtleWJvYXJkKGNvbmZpZywgZXZlbnRCdXMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMuX2NvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcblxuICB0aGlzLl9rZXlkb3duSGFuZGxlciA9IHRoaXMuX2tleWRvd25IYW5kbGVyLmJpbmQodGhpcyk7XG4gIHRoaXMuX2tleXVwSGFuZGxlciA9IHRoaXMuX2tleXVwSGFuZGxlci5iaW5kKHRoaXMpO1xuXG4gIC8vIHByb3Blcmx5IGNsZWFuIGRvbSByZWdpc3RyYXRpb25zXG4gIGV2ZW50QnVzLm9uKCdkaWFncmFtLmRlc3Ryb3knLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLl9maXJlKCdkZXN0cm95Jyk7XG5cbiAgICBzZWxmLnVuYmluZCgpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignZGlhZ3JhbS5pbml0JywgZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5fZmlyZSgnaW5pdCcpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignYXR0YWNoJywgZnVuY3Rpb24oKSB7XG4gICAgaWYgKGNvbmZpZyAmJiBjb25maWcuYmluZFRvKSB7XG4gICAgICBzZWxmLmJpbmQoY29uZmlnLmJpbmRUbyk7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignZGV0YWNoJywgZnVuY3Rpb24oKSB7XG4gICAgc2VsZi51bmJpbmQoKTtcbiAgfSk7XG59XG5cbktleWJvYXJkLiRpbmplY3QgPSBbXG4gICdjb25maWcua2V5Ym9hcmQnLFxuICAnZXZlbnRCdXMnXG5dO1xuXG5LZXlib2FyZC5wcm90b3R5cGUuX2tleWRvd25IYW5kbGVyID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgdGhpcy5fa2V5SGFuZGxlcihldmVudCwgS0VZRE9XTl9FVkVOVCk7XG59O1xuXG5LZXlib2FyZC5wcm90b3R5cGUuX2tleXVwSGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gIHRoaXMuX2tleUhhbmRsZXIoZXZlbnQsIEtFWVVQX0VWRU5UKTtcbn07XG5cbktleWJvYXJkLnByb3RvdHlwZS5fa2V5SGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50LCB0eXBlKSB7XG4gIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQsXG4gICAgICBldmVudEJ1c1Jlc3VsdDtcblxuICBpZiAoaXNJbnB1dCh0YXJnZXQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAga2V5RXZlbnQ6IGV2ZW50XG4gIH07XG5cbiAgZXZlbnRCdXNSZXN1bHQgPSB0aGlzLl9ldmVudEJ1cy5maXJlKHR5cGUgfHwgS0VZRE9XTl9FVkVOVCwgY29udGV4dCk7XG5cbiAgaWYgKGV2ZW50QnVzUmVzdWx0KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufTtcblxuS2V5Ym9hcmQucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihub2RlKSB7XG5cbiAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIGtleWJvYXJkIGlzIG9ubHkgYm91bmQgb25jZSB0byB0aGUgRE9NXG4gIHRoaXMudW5iaW5kKCk7XG5cbiAgdGhpcy5fbm9kZSA9IG5vZGU7XG5cbiAgLy8gYmluZCBrZXkgZXZlbnRzXG4gIGRvbUV2ZW50LmJpbmQobm9kZSwgJ2tleWRvd24nLCB0aGlzLl9rZXlkb3duSGFuZGxlciwgdHJ1ZSk7XG4gIGRvbUV2ZW50LmJpbmQobm9kZSwgJ2tleXVwJywgdGhpcy5fa2V5dXBIYW5kbGVyLCB0cnVlKTtcblxuICB0aGlzLl9maXJlKCdiaW5kJyk7XG59O1xuXG5LZXlib2FyZC5wcm90b3R5cGUuZ2V0QmluZGluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fbm9kZTtcbn07XG5cbktleWJvYXJkLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLl9ub2RlO1xuXG4gIGlmIChub2RlKSB7XG4gICAgdGhpcy5fZmlyZSgndW5iaW5kJyk7XG5cbiAgICAvLyB1bmJpbmQga2V5IGV2ZW50c1xuICAgIGRvbUV2ZW50LnVuYmluZChub2RlLCAna2V5ZG93bicsIHRoaXMuX2tleWRvd25IYW5kbGVyLCB0cnVlKTtcbiAgICBkb21FdmVudC51bmJpbmQobm9kZSwgJ2tleXVwJywgdGhpcy5fa2V5dXBIYW5kbGVyLCB0cnVlKTtcbiAgfVxuXG4gIHRoaXMuX25vZGUgPSBudWxsO1xufTtcblxuS2V5Ym9hcmQucHJvdG90eXBlLl9maXJlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgna2V5Ym9hcmQuJyArIGV2ZW50LCB7IG5vZGU6IHRoaXMuX25vZGUgfSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZ1bmN0aW9uIHRoYXQgaXMgbm90aWZpZWQgd2l0aCBgS2V5Ym9hcmRFdmVudGAgd2hlbmV2ZXJcbiAqIHRoZSBrZXlib2FyZCBpcyBib3VuZCBhbmQgdGhlIHVzZXIgcHJlc3NlcyBhIGtleS4gSWYgbm8gcHJpb3JpdHkgaXNcbiAqIHByb3ZpZGVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiAxMDAwIGlzIHVzZWQuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmlvcml0eV1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICovXG5LZXlib2FyZC5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbihwcmlvcml0eSwgbGlzdGVuZXIsIHR5cGUpIHtcbiAgaWYgKGlzRnVuY3Rpb24ocHJpb3JpdHkpKSB7XG4gICAgdHlwZSA9IGxpc3RlbmVyO1xuICAgIGxpc3RlbmVyID0gcHJpb3JpdHk7XG4gICAgcHJpb3JpdHkgPSBERUZBVUxUX1BSSU9SSVRZO1xuICB9XG5cbiAgdGhpcy5fZXZlbnRCdXMub24odHlwZSB8fCBLRVlET1dOX0VWRU5ULCBwcmlvcml0eSwgbGlzdGVuZXIpO1xufTtcblxuS2V5Ym9hcmQucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIsIHR5cGUpIHtcbiAgdGhpcy5fZXZlbnRCdXMub2ZmKHR5cGUgfHwgS0VZRE9XTl9FVkVOVCwgbGlzdGVuZXIpO1xufTtcblxuS2V5Ym9hcmQucHJvdG90eXBlLmhhc01vZGlmaWVyID0gaGFzTW9kaWZpZXI7XG5LZXlib2FyZC5wcm90b3R5cGUuaXNDbWQgPSBpc0NtZDtcbktleWJvYXJkLnByb3RvdHlwZS5pc1NoaWZ0ID0gaXNTaGlmdDtcbktleWJvYXJkLnByb3RvdHlwZS5pc0tleSA9IGlzS2V5O1xuXG5cblxuLy8gaGVscGVycyAvLy8vLy8vXG5cbmZ1bmN0aW9uIGlzSW5wdXQodGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQgJiYgKGRvbU1hdGNoZXModGFyZ2V0LCAnaW5wdXQsIHRleHRhcmVhJykgfHwgdGFyZ2V0LmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnKTtcbn1cbiIsImltcG9ydCB7XG4gIGlzQ21kLFxuICBpc0tleSxcbiAgaXNTaGlmdFxufSBmcm9tICcuL0tleWJvYXJkVXRpbCc7XG5cbnZhciBMT1dfUFJJT1JJVFkgPSA1MDA7XG5cbmV4cG9ydCB2YXIgS0VZQ09ERV9DID0gNjc7XG5leHBvcnQgdmFyIEtFWUNPREVfViA9IDg2O1xuZXhwb3J0IHZhciBLRVlDT0RFX1kgPSA4OTtcbmV4cG9ydCB2YXIgS0VZQ09ERV9aID0gOTA7XG5cbmV4cG9ydCB2YXIgS0VZU19DT1BZID0gWydjJywgJ0MnLCBLRVlDT0RFX0MgXTtcbmV4cG9ydCB2YXIgS0VZU19QQVNURSA9IFsgJ3YnLCAnVicsIEtFWUNPREVfViBdO1xuZXhwb3J0IHZhciBLRVlTX1JFRE8gPSBbICd5JywgJ1knLCBLRVlDT0RFX1kgXTtcbmV4cG9ydCB2YXIgS0VZU19VTkRPID0gWyAneicsICdaJywgS0VZQ09ERV9aIF07XG5cblxuLyoqXG4gKiBBZGRzIGRlZmF1bHQga2V5Ym9hcmQgYmluZGluZ3MuXG4gKlxuICogVGhpcyBkb2VzIG5vdCBwdWxsIGluIGFueSBmZWF0dXJlcyB3aWxsIGJpbmQgb25seSBhY3Rpb25zIHRoYXRcbiAqIGhhdmUgcHJldmlvdXNseSBiZWVuIHJlZ2lzdGVyZWQgYWdhaW5zdCB0aGUgZWRpdG9yQWN0aW9ucyBjb21wb25lbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7S2V5Ym9hcmR9IGtleWJvYXJkXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEtleWJvYXJkQmluZGluZ3MoZXZlbnRCdXMsIGtleWJvYXJkKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGV2ZW50QnVzLm9uKCdlZGl0b3JBY3Rpb25zLmluaXQnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgZWRpdG9yQWN0aW9ucyA9IGV2ZW50LmVkaXRvckFjdGlvbnM7XG5cbiAgICBzZWxmLnJlZ2lzdGVyQmluZGluZ3Moa2V5Ym9hcmQsIGVkaXRvckFjdGlvbnMpO1xuICB9KTtcbn1cblxuS2V5Ym9hcmRCaW5kaW5ncy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAna2V5Ym9hcmQnXG5dO1xuXG5cbi8qKlxuICogUmVnaXN0ZXIgYXZhaWxhYmxlIGtleWJvYXJkIGJpbmRpbmdzLlxuICpcbiAqIEBwYXJhbSB7S2V5Ym9hcmR9IGtleWJvYXJkXG4gKiBAcGFyYW0ge0VkaXRvckFjdGlvbnN9IGVkaXRvckFjdGlvbnNcbiAqL1xuS2V5Ym9hcmRCaW5kaW5ncy5wcm90b3R5cGUucmVnaXN0ZXJCaW5kaW5ncyA9IGZ1bmN0aW9uKGtleWJvYXJkLCBlZGl0b3JBY3Rpb25zKSB7XG5cbiAgLyoqXG4gICAqIEFkZCBrZXlib2FyZCBiaW5kaW5nIGlmIHJlc3BlY3RpdmUgZWRpdG9yIGFjdGlvblxuICAgKiBpcyByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gdGhhdCBpbXBsZW1lbnRzIHRoZSBrZXkgYmluZGluZ1xuICAgKi9cbiAgZnVuY3Rpb24gYWRkTGlzdGVuZXIoYWN0aW9uLCBmbikge1xuXG4gICAgaWYgKGVkaXRvckFjdGlvbnMuaXNSZWdpc3RlcmVkKGFjdGlvbikpIHtcbiAgICAgIGtleWJvYXJkLmFkZExpc3RlbmVyKGZuKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIHVuZG9cbiAgLy8gKENUUkx8Q01EKSArIFpcbiAgYWRkTGlzdGVuZXIoJ3VuZG8nLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGlzQ21kKGV2ZW50KSAmJiAhaXNTaGlmdChldmVudCkgJiYgaXNLZXkoS0VZU19VTkRPLCBldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcigndW5kbycpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHJlZG9cbiAgLy8gQ1RSTCArIFlcbiAgLy8gQ01EICsgU0hJRlQgKyBaXG4gIGFkZExpc3RlbmVyKCdyZWRvJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChpc0NtZChldmVudCkgJiYgKGlzS2V5KEtFWVNfUkVETywgZXZlbnQpIHx8IChpc0tleShLRVlTX1VORE8sIGV2ZW50KSAmJiBpc1NoaWZ0KGV2ZW50KSkpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ3JlZG8nKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyBjb3B5XG4gIC8vIENUUkwvQ01EICsgQ1xuICBhZGRMaXN0ZW5lcignY29weScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoaXNDbWQoZXZlbnQpICYmIGlzS2V5KEtFWVNfQ09QWSwgZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ2NvcHknKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyBwYXN0ZVxuICAvLyBDVFJML0NNRCArIFZcbiAgYWRkTGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChpc0NtZChldmVudCkgJiYgaXNLZXkoS0VZU19QQVNURSwgZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ3Bhc3RlJyk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gem9vbSBpbiBvbmUgc3RlcFxuICAvLyBDVFJML0NNRCArICtcbiAgYWRkTGlzdGVuZXIoJ3N0ZXBab29tJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChpc0tleShbICcrJywgJ0FkZCcgXSwgZXZlbnQpICYmIGlzQ21kKGV2ZW50KSkge1xuICAgICAgZWRpdG9yQWN0aW9ucy50cmlnZ2VyKCdzdGVwWm9vbScsIHsgdmFsdWU6IDEgfSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gem9vbSBvdXQgb25lIHN0ZXBcbiAgLy8gQ1RSTCArIC1cbiAgYWRkTGlzdGVuZXIoJ3N0ZXBab29tJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChpc0tleShbICctJywgJ1N1YnRyYWN0JyBdLCBldmVudCkgJiYgaXNDbWQoZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ3N0ZXBab29tJywgeyB2YWx1ZTogLTEgfSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gem9vbSB0byB0aGUgZGVmYXVsdCBsZXZlbFxuICAvLyBDVFJMICsgMFxuICBhZGRMaXN0ZW5lcignem9vbScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoaXNLZXkoJzAnLCBldmVudCkgJiYgaXNDbWQoZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ3pvb20nLCB7IHZhbHVlOiAxIH0pO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGRlbGV0ZSBzZWxlY3RlZCBlbGVtZW50XG4gIC8vIERFTFxuICBhZGRMaXN0ZW5lcigncmVtb3ZlU2VsZWN0aW9uJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChpc0tleShbICdEZWxldGUnLCAnRGVsJyBdLCBldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcigncmVtb3ZlU2VsZWN0aW9uJyk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG59OyIsImltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIGV2ZW50IHdhcyB0cmlnZ2VyZWQgd2l0aCBhbnkgbW9kaWZpZXJcclxuICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGhhc01vZGlmaWVyKGV2ZW50KSB7XHJcbiAgcmV0dXJuIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuYWx0S2V5KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0NtZChldmVudCkge1xyXG5cclxuICAvLyBlbnN1cmUgd2UgZG9uJ3QgcmVhY3QgdG8gQWx0R3JcclxuICAvLyAobWFwcGVkIHRvIENUUkwgKyBBTFQpXHJcbiAgaWYgKGV2ZW50LmFsdEtleSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBpZiBrZXkgcHJlc3NlZCBpcyBvbmUgb2YgcHJvdmlkZWQga2V5cy5cclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd8QXJyYXk8c3RyaW5nPn0ga2V5c1xyXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNLZXkoa2V5cywgZXZlbnQpIHtcclxuICBrZXlzID0gaXNBcnJheShrZXlzKSA/IGtleXMgOiBbIGtleXMgXTtcclxuXHJcbiAgcmV0dXJuIGtleXMuaW5kZXhPZihldmVudC5rZXkpICE9PSAtMSB8fCBrZXlzLmluZGV4T2YoZXZlbnQua2V5Q29kZSkgIT09IC0xO1xyXG59XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzU2hpZnQoZXZlbnQpIHtcclxuICByZXR1cm4gZXZlbnQuc2hpZnRLZXk7XHJcbn0iLCJpbXBvcnQgS2V5Ym9hcmQgZnJvbSAnLi9LZXlib2FyZCc7XG5pbXBvcnQgS2V5Ym9hcmRCaW5kaW5ncyBmcm9tICcuL0tleWJvYXJkQmluZGluZ3MnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdrZXlib2FyZCcsICdrZXlib2FyZEJpbmRpbmdzJyBdLFxuICBrZXlib2FyZDogWyAndHlwZScsIEtleWJvYXJkIF0sXG4gIGtleWJvYXJkQmluZGluZ3M6IFsgJ3R5cGUnLCBLZXlib2FyZEJpbmRpbmdzIF1cbn07XG4iLCJpbXBvcnQge1xuICBmb3JFYWNoLFxuICBmaWx0ZXJcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG52YXIgTE9XX1BSSU9SSVRZID0gMjUwLFxuICAgIEhJR0hfUFJJT1JJVFkgPSAxNDAwO1xuXG5pbXBvcnQge1xuICBhZGQgYXMgY29sbGVjdGlvbkFkZCxcbiAgaW5kZXhPZiBhcyBjb2xsZWN0aW9uSWR4XG59IGZyb20gJy4uLy4uL3V0aWwvQ29sbGVjdGlvbnMnO1xuXG5pbXBvcnQgeyBzYXZlQ2xlYXIgfSBmcm9tICcuLi8uLi91dGlsL1JlbW92YWwnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJy4uLy4uL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IG1ha2VzIHN1cmUgbGFiZWxzIGFyZSBwcm9wZXJseSBtb3ZlZCB3aXRoXG4gKiB0aGVpciBsYWJlbCB0YXJnZXRzLlxuICpcbiAqIEBwYXJhbSB7ZGlkaS5JbmplY3Rvcn0gaW5qZWN0b3JcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMYWJlbFN1cHBvcnQoaW5qZWN0b3IsIGV2ZW50QnVzLCBtb2RlbGluZykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB2YXIgbW92ZVByZXZpZXcgPSBpbmplY3Rvci5nZXQoJ21vdmVQcmV2aWV3JywgZmFsc2UpO1xuXG4gIC8vIHJlbW92ZSBsYWJlbHMgZnJvbSB0aGUgY29sbGVjdGlvbiB0aGF0IGFyZSBiZWluZ1xuICAvLyBtb3ZlZCB3aXRoIG90aGVyIGVsZW1lbnRzIGFueXdheVxuICBldmVudEJ1cy5vbignc2hhcGUubW92ZS5zdGFydCcsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcyxcbiAgICAgICAgdmFsaWRhdGVkU2hhcGVzID0gY29udGV4dC52YWxpZGF0ZWRTaGFwZXM7XG5cbiAgICBjb250ZXh0LnNoYXBlcyA9IHJlbW92ZUxhYmVscyhzaGFwZXMpO1xuICAgIGNvbnRleHQudmFsaWRhdGVkU2hhcGVzID0gcmVtb3ZlTGFiZWxzKHZhbGlkYXRlZFNoYXBlcyk7XG4gIH0pO1xuXG4gIC8vIGFkZCBsYWJlbHMgdG8gdmlzdWFsJ3MgZ3JvdXBcbiAgbW92ZVByZXZpZXcgJiYgZXZlbnRCdXMub24oJ3NoYXBlLm1vdmUuc3RhcnQnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcztcblxuICAgIHZhciBsYWJlbHMgPSBbXTtcblxuICAgIGZvckVhY2goc2hhcGVzLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICAgIGZvckVhY2goZWxlbWVudC5sYWJlbHMsIGZ1bmN0aW9uKGxhYmVsKSB7XG5cbiAgICAgICAgaWYgKCFsYWJlbC5oaWRkZW4gJiYgY29udGV4dC5zaGFwZXMuaW5kZXhPZihsYWJlbCkgPT09IC0xKSB7XG4gICAgICAgICAgbGFiZWxzLnB1c2gobGFiZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVsZW1lbnQubGFiZWxUYXJnZXQpIHtcbiAgICAgICAgICBsYWJlbHMucHVzaChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBmb3JFYWNoKGxhYmVscywgZnVuY3Rpb24obGFiZWwpIHtcbiAgICAgIG1vdmVQcmV2aWV3Lm1ha2VEcmFnZ2FibGUoY29udGV4dCwgbGFiZWwsIHRydWUpO1xuICAgIH0pO1xuXG4gIH0pO1xuXG4gIC8vIGFkZCBhbGwgbGFiZWxzIHRvIG1vdmUgY2xvc3VyZVxuICB0aGlzLnByZUV4ZWN1dGVkKCdlbGVtZW50cy5tb3ZlJywgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZSkge1xuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBjbG9zdXJlID0gY29udGV4dC5jbG9zdXJlLFxuICAgICAgICBlbmNsb3NlZEVsZW1lbnRzID0gY2xvc3VyZS5lbmNsb3NlZEVsZW1lbnRzO1xuXG4gICAgdmFyIGVuY2xvc2VkTGFiZWxzID0gW107XG5cbiAgICAvLyBmaW5kIGxhYmVscyB0aGF0IGFyZSBub3QgcGFydCBvZlxuICAgIC8vIG1vdmUgY2xvc3VyZSB5ZXQgYW5kIGFkZCB0aGVtXG4gICAgZm9yRWFjaChlbmNsb3NlZEVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICBmb3JFYWNoKGVsZW1lbnQubGFiZWxzLCBmdW5jdGlvbihsYWJlbCkge1xuXG4gICAgICAgIGlmICghZW5jbG9zZWRFbGVtZW50c1tsYWJlbC5pZF0pIHtcbiAgICAgICAgICBlbmNsb3NlZExhYmVscy5wdXNoKGxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjbG9zdXJlLmFkZEFsbChlbmNsb3NlZExhYmVscyk7XG4gIH0pO1xuXG5cbiAgdGhpcy5wcmVFeGVjdXRlKFtcbiAgICAnY29ubmVjdGlvbi5kZWxldGUnLFxuICAgICdzaGFwZS5kZWxldGUnXG4gIF0sIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBlbGVtZW50ID0gY29udGV4dC5jb25uZWN0aW9uIHx8IGNvbnRleHQuc2hhcGU7XG5cbiAgICBzYXZlQ2xlYXIoZWxlbWVudC5sYWJlbHMsIGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgICBtb2RlbGluZy5yZW1vdmVTaGFwZShsYWJlbCwgeyBuZXN0ZWQ6IHRydWUgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG5cbiAgdGhpcy5leGVjdXRlKCdzaGFwZS5kZWxldGUnLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBsYWJlbFRhcmdldCA9IHNoYXBlLmxhYmVsVGFyZ2V0O1xuXG4gICAgLy8gdW5zZXQgbGFiZWxUYXJnZXRcbiAgICBpZiAobGFiZWxUYXJnZXQpIHtcbiAgICAgIGNvbnRleHQubGFiZWxUYXJnZXRJbmRleCA9IGNvbGxlY3Rpb25JZHgobGFiZWxUYXJnZXQubGFiZWxzLCBzaGFwZSk7XG4gICAgICBjb250ZXh0LmxhYmVsVGFyZ2V0ID0gbGFiZWxUYXJnZXQ7XG5cbiAgICAgIHNoYXBlLmxhYmVsVGFyZ2V0ID0gbnVsbDtcbiAgICB9XG4gIH0pO1xuXG4gIHRoaXMucmV2ZXJ0KCdzaGFwZS5kZWxldGUnLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBsYWJlbFRhcmdldCA9IGNvbnRleHQubGFiZWxUYXJnZXQsXG4gICAgICAgIGxhYmVsVGFyZ2V0SW5kZXggPSBjb250ZXh0LmxhYmVsVGFyZ2V0SW5kZXg7XG5cbiAgICAvLyByZXN0b3JlIGxhYmVsVGFyZ2V0XG4gICAgaWYgKGxhYmVsVGFyZ2V0KSB7XG4gICAgICBjb2xsZWN0aW9uQWRkKGxhYmVsVGFyZ2V0LmxhYmVscywgc2hhcGUsIGxhYmVsVGFyZ2V0SW5kZXgpO1xuXG4gICAgICBzaGFwZS5sYWJlbFRhcmdldCA9IGxhYmVsVGFyZ2V0O1xuICAgIH1cbiAgfSk7XG5cbn1cblxuaW5oZXJpdHMoTGFiZWxTdXBwb3J0LCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5MYWJlbFN1cHBvcnQuJGluamVjdCA9IFtcbiAgJ2luamVjdG9yJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuXG4vKipcbiAqIFJldHVybiBhIGZpbHRlcmVkIGxpc3Qgb2YgZWxlbWVudHMgdGhhdCBkbyBub3RcbiAqIGNvbnRhaW4gYXR0YWNoZWQgZWxlbWVudHMgd2l0aCBob3N0cyBiZWluZyBwYXJ0XG4gKiBvZiB0aGUgc2VsZWN0aW9uLlxuICpcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGZpbHRlcmVkXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUxhYmVscyhlbGVtZW50cykge1xuXG4gIHJldHVybiBmaWx0ZXIoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgIC8vIGZpbHRlciBvdXQgbGFiZWxzIHRoYXQgYXJlIG1vdmUgdG9nZXRoZXJcbiAgICAvLyB3aXRoIHRoZWlyIGxhYmVsIHRhcmdldHNcbiAgICByZXR1cm4gZWxlbWVudHMuaW5kZXhPZihlbGVtZW50LmxhYmVsVGFyZ2V0KSA9PT0gLTE7XG4gIH0pO1xufVxuIiwiaW1wb3J0IExhYmVsU3VwcG9ydCBmcm9tICcuL0xhYmVsU3VwcG9ydCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ2xhYmVsU3VwcG9ydCddLFxuICBsYWJlbFN1cHBvcnQ6IFsgJ3R5cGUnLCBMYWJlbFN1cHBvcnQgXVxufTtcbiIsImltcG9ydCB7IHZhbHVlcyB9IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHsgZ2V0RW5jbG9zZWRFbGVtZW50cyB9IGZyb20gJy4uLy4uL3V0aWwvRWxlbWVudHMnO1xuXG5pbXBvcnQgeyBoYXNTZWNvbmRhcnlNb2RpZmllciB9IGZyb20gJy4uLy4uL3V0aWwvTW91c2UnO1xuXG5pbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGUsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG52YXIgTEFTU09fVE9PTF9DVVJTT1IgPSAnY3Jvc3NoYWlyJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMYXNzb1Rvb2woXG4gICAgZXZlbnRCdXMsIGNhbnZhcywgZHJhZ2dpbmcsXG4gICAgZWxlbWVudFJlZ2lzdHJ5LCBzZWxlY3Rpb24sIHRvb2xNYW5hZ2VyKSB7XG5cbiAgdGhpcy5fc2VsZWN0aW9uID0gc2VsZWN0aW9uO1xuICB0aGlzLl9kcmFnZ2luZyA9IGRyYWdnaW5nO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvLyBsYXNzbyB2aXN1YWxzIGltcGxlbWVudGF0aW9uXG5cbiAgLyoqXG4gICogQSBoZWxwZXIgdGhhdCByZWFsaXplcyB0aGUgc2VsZWN0aW9uIGJveCB2aXN1YWxcbiAgKi9cbiAgdmFyIHZpc3VhbHMgPSB7XG5cbiAgICBjcmVhdGU6IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICAgIHZhciBjb250YWluZXIgPSBjYW52YXMuZ2V0RGVmYXVsdExheWVyKCksXG4gICAgICAgICAgZnJhbWU7XG5cbiAgICAgIGZyYW1lID0gY29udGV4dC5mcmFtZSA9IHN2Z0NyZWF0ZSgncmVjdCcpO1xuICAgICAgc3ZnQXR0cihmcmFtZSwge1xuICAgICAgICBjbGFzczogJ2Rqcy1sYXNzby1vdmVybGF5JyxcbiAgICAgICAgd2lkdGg6ICAxLFxuICAgICAgICBoZWlnaHQ6IDEsXG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDBcbiAgICAgIH0pO1xuXG4gICAgICBzdmdBcHBlbmQoY29udGFpbmVyLCBmcmFtZSk7XG4gICAgfSxcblxuICAgIHVwZGF0ZTogZnVuY3Rpb24oY29udGV4dCkge1xuICAgICAgdmFyIGZyYW1lID0gY29udGV4dC5mcmFtZSxcbiAgICAgICAgICBiYm94ID0gY29udGV4dC5iYm94O1xuXG4gICAgICBzdmdBdHRyKGZyYW1lLCB7XG4gICAgICAgIHg6IGJib3gueCxcbiAgICAgICAgeTogYmJveC55LFxuICAgICAgICB3aWR0aDogYmJveC53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBiYm94LmhlaWdodFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIHJlbW92ZTogZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgICBpZiAoY29udGV4dC5mcmFtZSkge1xuICAgICAgICBzdmdSZW1vdmUoY29udGV4dC5mcmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHRvb2xNYW5hZ2VyLnJlZ2lzdGVyVG9vbCgnbGFzc28nLCB7XG4gICAgdG9vbDogJ2xhc3NvLnNlbGVjdGlvbicsXG4gICAgZHJhZ2dpbmc6ICdsYXNzbydcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2xhc3NvLnNlbGVjdGlvbi5lbmQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciB0YXJnZXQgPSBldmVudC5vcmlnaW5hbEV2ZW50LnRhcmdldDtcblxuICAgIC8vIG9ubHkgcmVhY3RpdmUgb24gZGlhZ3JhbSBjbGlja1xuICAgIC8vIG9uIHNvbWUgb2NjYXNpb25zLCBldmVudC5ob3ZlciBpcyBub3Qgc2V0IGFuZCB3ZSBoYXZlIHRvIGNoZWNrIGlmIHRoZSB0YXJnZXQgaXMgYW4gc3ZnXG4gICAgaWYgKCFldmVudC5ob3ZlciAmJiAhKHRhcmdldCBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnRCdXMub25jZSgnbGFzc28uc2VsZWN0aW9uLmVuZGVkJywgZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmFjdGl2YXRlTGFzc28oZXZlbnQub3JpZ2luYWxFdmVudCwgdHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIGxhc3NvIGludGVyYWN0aW9uIGltcGxlbWVudGF0aW9uXG5cbiAgZXZlbnRCdXMub24oJ2xhc3NvLmVuZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgYmJveCA9IHRvQkJveChldmVudCk7XG5cbiAgICB2YXIgZWxlbWVudHMgPSBlbGVtZW50UmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH0pO1xuXG4gICAgc2VsZi5zZWxlY3QoZWxlbWVudHMsIGJib3gpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignbGFzc28uc3RhcnQnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0O1xuXG4gICAgY29udGV4dC5iYm94ID0gdG9CQm94KGV2ZW50KTtcbiAgICB2aXN1YWxzLmNyZWF0ZShjb250ZXh0KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2xhc3NvLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0O1xuXG4gICAgY29udGV4dC5iYm94ID0gdG9CQm94KGV2ZW50KTtcbiAgICB2aXN1YWxzLnVwZGF0ZShjb250ZXh0KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2xhc3NvLmNsZWFudXAnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0O1xuXG4gICAgdmlzdWFscy5yZW1vdmUoY29udGV4dCk7XG4gIH0pO1xuXG5cbiAgLy8gZXZlbnQgaW50ZWdyYXRpb25cblxuICBldmVudEJ1cy5vbignZWxlbWVudC5tb3VzZWRvd24nLCAxNTAwLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgaWYgKGhhc1NlY29uZGFyeU1vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgc2VsZi5hY3RpdmF0ZUxhc3NvKGV2ZW50Lm9yaWdpbmFsRXZlbnQpO1xuXG4gICAgICAvLyB3ZSd2ZSBoYW5kbGVkIHRoZSBldmVudFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbn1cblxuTGFzc29Ub29sLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnLFxuICAnZHJhZ2dpbmcnLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ3NlbGVjdGlvbicsXG4gICd0b29sTWFuYWdlcidcbl07XG5cblxuTGFzc29Ub29sLnByb3RvdHlwZS5hY3RpdmF0ZUxhc3NvID0gZnVuY3Rpb24oZXZlbnQsIGF1dG9BY3RpdmF0ZSkge1xuXG4gIHRoaXMuX2RyYWdnaW5nLmluaXQoZXZlbnQsICdsYXNzbycsIHtcbiAgICBhdXRvQWN0aXZhdGU6IGF1dG9BY3RpdmF0ZSxcbiAgICBjdXJzb3I6IExBU1NPX1RPT0xfQ1VSU09SLFxuICAgIGRhdGE6IHtcbiAgICAgIGNvbnRleHQ6IHt9XG4gICAgfVxuICB9KTtcbn07XG5cbkxhc3NvVG9vbC5wcm90b3R5cGUuYWN0aXZhdGVTZWxlY3Rpb24gPSBmdW5jdGlvbihldmVudCkge1xuXG4gIHRoaXMuX2RyYWdnaW5nLmluaXQoZXZlbnQsICdsYXNzby5zZWxlY3Rpb24nLCB7XG4gICAgdHJhcENsaWNrOiBmYWxzZSxcbiAgICBjdXJzb3I6IExBU1NPX1RPT0xfQ1VSU09SLFxuICAgIGRhdGE6IHtcbiAgICAgIGNvbnRleHQ6IHt9XG4gICAgfVxuICB9KTtcbn07XG5cbkxhc3NvVG9vbC5wcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24oZWxlbWVudHMsIGJib3gpIHtcbiAgdmFyIHNlbGVjdGVkRWxlbWVudHMgPSBnZXRFbmNsb3NlZEVsZW1lbnRzKGVsZW1lbnRzLCBiYm94KTtcblxuICB0aGlzLl9zZWxlY3Rpb24uc2VsZWN0KHZhbHVlcyhzZWxlY3RlZEVsZW1lbnRzKSk7XG59O1xuXG5MYXNzb1Rvb2wucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgdGhpcy5fZHJhZ2dpbmcuY2FuY2VsKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdGlvbigpO1xuICB9XG59O1xuXG5MYXNzb1Rvb2wucHJvdG90eXBlLmlzQWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gIHZhciBjb250ZXh0ID0gdGhpcy5fZHJhZ2dpbmcuY29udGV4dCgpO1xuXG4gIHJldHVybiBjb250ZXh0ICYmIC9ebGFzc28vLnRlc3QoY29udGV4dC5wcmVmaXgpO1xufTtcblxuXG5cbmZ1bmN0aW9uIHRvQkJveChldmVudCkge1xuXG4gIHZhciBzdGFydCA9IHtcblxuICAgIHg6IGV2ZW50LnggLSBldmVudC5keCxcbiAgICB5OiBldmVudC55IC0gZXZlbnQuZHlcbiAgfTtcblxuICB2YXIgZW5kID0ge1xuICAgIHg6IGV2ZW50LngsXG4gICAgeTogZXZlbnQueVxuICB9O1xuXG4gIHZhciBiYm94O1xuXG4gIGlmICgoc3RhcnQueCA8PSBlbmQueCAmJiBzdGFydC55IDwgZW5kLnkpIHx8XG4gICAgICAoc3RhcnQueCA8IGVuZC54ICYmIHN0YXJ0LnkgPD0gZW5kLnkpKSB7XG5cbiAgICBiYm94ID0ge1xuICAgICAgeDogc3RhcnQueCxcbiAgICAgIHk6IHN0YXJ0LnksXG4gICAgICB3aWR0aDogIGVuZC54IC0gc3RhcnQueCxcbiAgICAgIGhlaWdodDogZW5kLnkgLSBzdGFydC55XG4gICAgfTtcbiAgfSBlbHNlIGlmICgoc3RhcnQueCA+PSBlbmQueCAmJiBzdGFydC55IDwgZW5kLnkpIHx8XG4gICAgICAgICAgICAgKHN0YXJ0LnggPiBlbmQueCAmJiBzdGFydC55IDw9IGVuZC55KSkge1xuXG4gICAgYmJveCA9IHtcbiAgICAgIHg6IGVuZC54LFxuICAgICAgeTogc3RhcnQueSxcbiAgICAgIHdpZHRoOiAgc3RhcnQueCAtIGVuZC54LFxuICAgICAgaGVpZ2h0OiBlbmQueSAtIHN0YXJ0LnlcbiAgICB9O1xuICB9IGVsc2UgaWYgKChzdGFydC54IDw9IGVuZC54ICYmIHN0YXJ0LnkgPiBlbmQueSkgfHxcbiAgICAgICAgICAgICAoc3RhcnQueCA8IGVuZC54ICYmIHN0YXJ0LnkgPj0gZW5kLnkpKSB7XG5cbiAgICBiYm94ID0ge1xuICAgICAgeDogc3RhcnQueCxcbiAgICAgIHk6IGVuZC55LFxuICAgICAgd2lkdGg6ICBlbmQueCAtIHN0YXJ0LngsXG4gICAgICBoZWlnaHQ6IHN0YXJ0LnkgLSBlbmQueVxuICAgIH07XG4gIH0gZWxzZSBpZiAoKHN0YXJ0LnggPj0gZW5kLnggJiYgc3RhcnQueSA+IGVuZC55KSB8fFxuICAgICAgICAgICAgIChzdGFydC54ID4gZW5kLnggJiYgc3RhcnQueSA+PSBlbmQueSkpIHtcblxuICAgIGJib3ggPSB7XG4gICAgICB4OiBlbmQueCxcbiAgICAgIHk6IGVuZC55LFxuICAgICAgd2lkdGg6ICBzdGFydC54IC0gZW5kLngsXG4gICAgICBoZWlnaHQ6IHN0YXJ0LnkgLSBlbmQueVxuICAgIH07XG4gIH0gZWxzZSB7XG5cbiAgICBiYm94ID0ge1xuICAgICAgeDogZW5kLngsXG4gICAgICB5OiBlbmQueSxcbiAgICAgIHdpZHRoOiAgMCxcbiAgICAgIGhlaWdodDogMFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIGJib3g7XG59XG4iLCJpbXBvcnQgVG9vbE1hbmFnZXJNb2R1bGUgZnJvbSAnLi4vdG9vbC1tYW5hZ2VyJztcblxuaW1wb3J0IExhc3NvVG9vbCBmcm9tICcuL0xhc3NvVG9vbCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBUb29sTWFuYWdlck1vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAnbGFzc29Ub29sJyBdLFxuICBsYXNzb1Rvb2w6IFsgJ3R5cGUnLCBMYXNzb1Rvb2wgXVxufTtcbiIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZm9yRWFjaCxcbiAgaXNBcnJheVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIEJhc2Vcbn0gZnJvbSAnLi4vLi4vbW9kZWwnO1xuXG5pbXBvcnQgQWxpZ25FbGVtZW50c0hhbmRsZXIgZnJvbSAnLi9jbWQvQWxpZ25FbGVtZW50c0hhbmRsZXInO1xuaW1wb3J0IEFwcGVuZFNoYXBlSGFuZGxlciBmcm9tICcuL2NtZC9BcHBlbmRTaGFwZUhhbmRsZXInO1xuaW1wb3J0IENyZWF0ZUNvbm5lY3Rpb25IYW5kbGVyIGZyb20gJy4vY21kL0NyZWF0ZUNvbm5lY3Rpb25IYW5kbGVyJztcbmltcG9ydCBDcmVhdGVFbGVtZW50c0hhbmRsZXIgZnJvbSAnLi9jbWQvQ3JlYXRlRWxlbWVudHNIYW5kbGVyJztcbmltcG9ydCBDcmVhdGVMYWJlbEhhbmRsZXIgZnJvbSAnLi9jbWQvQ3JlYXRlTGFiZWxIYW5kbGVyJztcbmltcG9ydCBDcmVhdGVTaGFwZUhhbmRsZXIgZnJvbSAnLi9jbWQvQ3JlYXRlU2hhcGVIYW5kbGVyJztcbmltcG9ydCBEZWxldGVDb25uZWN0aW9uSGFuZGxlciBmcm9tICcuL2NtZC9EZWxldGVDb25uZWN0aW9uSGFuZGxlcic7XG5pbXBvcnQgRGVsZXRlRWxlbWVudHNIYW5kbGVyIGZyb20gJy4vY21kL0RlbGV0ZUVsZW1lbnRzSGFuZGxlcic7XG5pbXBvcnQgRGVsZXRlU2hhcGVIYW5kbGVyIGZyb20gJy4vY21kL0RlbGV0ZVNoYXBlSGFuZGxlcic7XG5pbXBvcnQgRGlzdHJpYnV0ZUVsZW1lbnRzSGFuZGxlciBmcm9tICcuL2NtZC9EaXN0cmlidXRlRWxlbWVudHNIYW5kbGVyJztcbmltcG9ydCBMYXlvdXRDb25uZWN0aW9uSGFuZGxlciBmcm9tICcuL2NtZC9MYXlvdXRDb25uZWN0aW9uSGFuZGxlcic7XG5pbXBvcnQgTW92ZUNvbm5lY3Rpb25IYW5kbGVyIGZyb20gJy4vY21kL01vdmVDb25uZWN0aW9uSGFuZGxlcic7XG5pbXBvcnQgTW92ZUVsZW1lbnRzSGFuZGxlciBmcm9tICcuL2NtZC9Nb3ZlRWxlbWVudHNIYW5kbGVyJztcbmltcG9ydCBNb3ZlU2hhcGVIYW5kbGVyIGZyb20gJy4vY21kL01vdmVTaGFwZUhhbmRsZXInO1xuaW1wb3J0IFJlY29ubmVjdENvbm5lY3Rpb25IYW5kbGVyIGZyb20gJy4vY21kL1JlY29ubmVjdENvbm5lY3Rpb25IYW5kbGVyJztcbmltcG9ydCBSZXBsYWNlU2hhcGVIYW5kbGVyIGZyb20gJy4vY21kL1JlcGxhY2VTaGFwZUhhbmRsZXInO1xuaW1wb3J0IFJlc2l6ZVNoYXBlSGFuZGxlciBmcm9tICcuL2NtZC9SZXNpemVTaGFwZUhhbmRsZXInO1xuaW1wb3J0IFNwYWNlVG9vbEhhbmRsZXIgZnJvbSAnLi9jbWQvU3BhY2VUb29sSGFuZGxlcic7XG5pbXBvcnQgVG9nZ2xlU2hhcGVDb2xsYXBzZUhhbmRsZXIgZnJvbSAnLi9jbWQvVG9nZ2xlU2hhcGVDb2xsYXBzZUhhbmRsZXInO1xuaW1wb3J0IFVwZGF0ZUF0dGFjaG1lbnRIYW5kbGVyIGZyb20gJy4vY21kL1VwZGF0ZUF0dGFjaG1lbnRIYW5kbGVyJztcbmltcG9ydCBVcGRhdGVXYXlwb2ludHNIYW5kbGVyIGZyb20gJy4vY21kL1VwZGF0ZVdheXBvaW50c0hhbmRsZXInO1xuXG5cbi8qKlxuICogVGhlIGJhc2ljIG1vZGVsaW5nIGVudHJ5IHBvaW50LlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0VsZW1lbnRGYWN0b3J5fSBlbGVtZW50RmFjdG9yeVxuICogQHBhcmFtIHtDb21tYW5kU3RhY2t9IGNvbW1hbmRTdGFja1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb2RlbGluZyhldmVudEJ1cywgZWxlbWVudEZhY3RvcnksIGNvbW1hbmRTdGFjaykge1xuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB0aGlzLl9lbGVtZW50RmFjdG9yeSA9IGVsZW1lbnRGYWN0b3J5O1xuICB0aGlzLl9jb21tYW5kU3RhY2sgPSBjb21tYW5kU3RhY2s7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGV2ZW50QnVzLm9uKCdkaWFncmFtLmluaXQnLCBmdW5jdGlvbigpIHtcblxuICAgIC8vIHJlZ2lzdGVyIG1vZGVsaW5nIGhhbmRsZXJzXG4gICAgc2VsZi5yZWdpc3RlckhhbmRsZXJzKGNvbW1hbmRTdGFjayk7XG4gIH0pO1xufVxuXG5Nb2RlbGluZy4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnLCAnZWxlbWVudEZhY3RvcnknLCAnY29tbWFuZFN0YWNrJyBdO1xuXG5cbk1vZGVsaW5nLnByb3RvdHlwZS5nZXRIYW5kbGVycyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgICdzaGFwZS5hcHBlbmQnOiBBcHBlbmRTaGFwZUhhbmRsZXIsXG4gICAgJ3NoYXBlLmNyZWF0ZSc6IENyZWF0ZVNoYXBlSGFuZGxlcixcbiAgICAnc2hhcGUuZGVsZXRlJzogRGVsZXRlU2hhcGVIYW5kbGVyLFxuICAgICdzaGFwZS5tb3ZlJzogTW92ZVNoYXBlSGFuZGxlcixcbiAgICAnc2hhcGUucmVzaXplJzogUmVzaXplU2hhcGVIYW5kbGVyLFxuICAgICdzaGFwZS5yZXBsYWNlJzogUmVwbGFjZVNoYXBlSGFuZGxlcixcbiAgICAnc2hhcGUudG9nZ2xlQ29sbGFwc2UnOiBUb2dnbGVTaGFwZUNvbGxhcHNlSGFuZGxlcixcblxuICAgICdzcGFjZVRvb2wnOiBTcGFjZVRvb2xIYW5kbGVyLFxuXG4gICAgJ2xhYmVsLmNyZWF0ZSc6IENyZWF0ZUxhYmVsSGFuZGxlcixcblxuICAgICdjb25uZWN0aW9uLmNyZWF0ZSc6IENyZWF0ZUNvbm5lY3Rpb25IYW5kbGVyLFxuICAgICdjb25uZWN0aW9uLmRlbGV0ZSc6IERlbGV0ZUNvbm5lY3Rpb25IYW5kbGVyLFxuICAgICdjb25uZWN0aW9uLm1vdmUnOiBNb3ZlQ29ubmVjdGlvbkhhbmRsZXIsXG4gICAgJ2Nvbm5lY3Rpb24ubGF5b3V0JzogTGF5b3V0Q29ubmVjdGlvbkhhbmRsZXIsXG5cbiAgICAnY29ubmVjdGlvbi51cGRhdGVXYXlwb2ludHMnOiBVcGRhdGVXYXlwb2ludHNIYW5kbGVyLFxuXG4gICAgJ2Nvbm5lY3Rpb24ucmVjb25uZWN0JzogUmVjb25uZWN0Q29ubmVjdGlvbkhhbmRsZXIsXG5cbiAgICAnZWxlbWVudHMuY3JlYXRlJzogQ3JlYXRlRWxlbWVudHNIYW5kbGVyLFxuICAgICdlbGVtZW50cy5tb3ZlJzogTW92ZUVsZW1lbnRzSGFuZGxlcixcbiAgICAnZWxlbWVudHMuZGVsZXRlJzogRGVsZXRlRWxlbWVudHNIYW5kbGVyLFxuXG4gICAgJ2VsZW1lbnRzLmRpc3RyaWJ1dGUnOiBEaXN0cmlidXRlRWxlbWVudHNIYW5kbGVyLFxuICAgICdlbGVtZW50cy5hbGlnbic6IEFsaWduRWxlbWVudHNIYW5kbGVyLFxuXG4gICAgJ2VsZW1lbnQudXBkYXRlQXR0YWNobWVudCc6IFVwZGF0ZUF0dGFjaG1lbnRIYW5kbGVyXG4gIH07XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGhhbmRsZXJzIHdpdGggdGhlIGNvbW1hbmQgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge0NvbW1hbmRTdGFja30gY29tbWFuZFN0YWNrXG4gKi9cbk1vZGVsaW5nLnByb3RvdHlwZS5yZWdpc3RlckhhbmRsZXJzID0gZnVuY3Rpb24oY29tbWFuZFN0YWNrKSB7XG4gIGZvckVhY2godGhpcy5nZXRIYW5kbGVycygpLCBmdW5jdGlvbihoYW5kbGVyLCBpZCkge1xuICAgIGNvbW1hbmRTdGFjay5yZWdpc3RlckhhbmRsZXIoaWQsIGhhbmRsZXIpO1xuICB9KTtcbn07XG5cblxuLy8gbW9kZWxpbmcgaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbk1vZGVsaW5nLnByb3RvdHlwZS5tb3ZlU2hhcGUgPSBmdW5jdGlvbihzaGFwZSwgZGVsdGEsIG5ld1BhcmVudCwgbmV3UGFyZW50SW5kZXgsIGhpbnRzKSB7XG5cbiAgaWYgKHR5cGVvZiBuZXdQYXJlbnRJbmRleCA9PT0gJ29iamVjdCcpIHtcbiAgICBoaW50cyA9IG5ld1BhcmVudEluZGV4O1xuICAgIG5ld1BhcmVudEluZGV4ID0gbnVsbDtcbiAgfVxuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgIHNoYXBlOiBzaGFwZSxcbiAgICBkZWx0YTogIGRlbHRhLFxuICAgIG5ld1BhcmVudDogbmV3UGFyZW50LFxuICAgIG5ld1BhcmVudEluZGV4OiBuZXdQYXJlbnRJbmRleCxcbiAgICBoaW50czogaGludHMgfHwge31cbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnc2hhcGUubW92ZScsIGNvbnRleHQpO1xufTtcblxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgYXR0YWNobWVudCBvZiB0aGUgZ2l2ZW4gc2hhcGUuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZS5CYXNlfSBzaGFwZVxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gW25ld0hvc3RdXG4gKi9cbk1vZGVsaW5nLnByb3RvdHlwZS51cGRhdGVBdHRhY2htZW50ID0gZnVuY3Rpb24oc2hhcGUsIG5ld0hvc3QpIHtcbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgc2hhcGU6IHNoYXBlLFxuICAgIG5ld0hvc3Q6IG5ld0hvc3RcbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVBdHRhY2htZW50JywgY29udGV4dCk7XG59O1xuXG5cbi8qKlxuICogTW92ZSBhIG51bWJlciBvZiBzaGFwZXMgdG8gYSBuZXcgdGFyZ2V0LCBlaXRoZXIgc2V0dGluZyBpdCBhc1xuICogdGhlIG5ldyBwYXJlbnQgb3IgYXR0YWNoaW5nIGl0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGUuQmFzZT59IHNoYXBlc1xuICogQHBhcmFtIHtQb2ludH0gZGVsdGFcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IFt0YXJnZXRdXG4gKiBAcGFyYW0ge09iamVjdH0gW2hpbnRzXVxuICogQHBhcmFtIHtib29sZWFufSBbaGludHMuYXR0YWNoPWZhbHNlXVxuICovXG5Nb2RlbGluZy5wcm90b3R5cGUubW92ZUVsZW1lbnRzID0gZnVuY3Rpb24oc2hhcGVzLCBkZWx0YSwgdGFyZ2V0LCBoaW50cykge1xuXG4gIGhpbnRzID0gaGludHMgfHwge307XG5cbiAgdmFyIGF0dGFjaCA9IGhpbnRzLmF0dGFjaDtcblxuICB2YXIgbmV3UGFyZW50ID0gdGFyZ2V0LFxuICAgICAgbmV3SG9zdDtcblxuICBpZiAoYXR0YWNoID09PSB0cnVlKSB7XG4gICAgbmV3SG9zdCA9IHRhcmdldDtcbiAgICBuZXdQYXJlbnQgPSB0YXJnZXQucGFyZW50O1xuICB9IGVsc2VcblxuICBpZiAoYXR0YWNoID09PSBmYWxzZSkge1xuICAgIG5ld0hvc3QgPSBudWxsO1xuICB9XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgc2hhcGVzOiBzaGFwZXMsXG4gICAgZGVsdGE6IGRlbHRhLFxuICAgIG5ld1BhcmVudDogbmV3UGFyZW50LFxuICAgIG5ld0hvc3Q6IG5ld0hvc3QsXG4gICAgaGludHM6IGhpbnRzXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnRzLm1vdmUnLCBjb250ZXh0KTtcbn07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLm1vdmVDb25uZWN0aW9uID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgZGVsdGEsIG5ld1BhcmVudCwgbmV3UGFyZW50SW5kZXgsIGhpbnRzKSB7XG5cbiAgaWYgKHR5cGVvZiBuZXdQYXJlbnRJbmRleCA9PT0gJ29iamVjdCcpIHtcbiAgICBoaW50cyA9IG5ld1BhcmVudEluZGV4O1xuICAgIG5ld1BhcmVudEluZGV4ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICBkZWx0YTogZGVsdGEsXG4gICAgbmV3UGFyZW50OiBuZXdQYXJlbnQsXG4gICAgbmV3UGFyZW50SW5kZXg6IG5ld1BhcmVudEluZGV4LFxuICAgIGhpbnRzOiBoaW50cyB8fCB7fVxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdjb25uZWN0aW9uLm1vdmUnLCBjb250ZXh0KTtcbn07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLmxheW91dENvbm5lY3Rpb24gPSBmdW5jdGlvbihjb25uZWN0aW9uLCBoaW50cykge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgIGhpbnRzOiBoaW50cyB8fCB7fVxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdjb25uZWN0aW9uLmxheW91dCcsIGNvbnRleHQpO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZSBjb25uZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IHNvdXJjZVxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gdGFyZ2V0XG4gKiBAcGFyYW0ge251bWJlcn0gW3BhcmVudEluZGV4XVxuICogQHBhcmFtIHtPYmplY3R8ZGpzLm1vZGVsLkNvbm5lY3Rpb259IGNvbm5lY3Rpb25cbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IHBhcmVudFxuICogQHBhcmFtIHtPYmplY3R9IGhpbnRzXG4gKlxuICogQHJldHVybiB7ZGpzLm1vZGVsLkNvbm5lY3Rpb259IHRoZSBjcmVhdGVkIGNvbm5lY3Rpb24uXG4gKi9cbk1vZGVsaW5nLnByb3RvdHlwZS5jcmVhdGVDb25uZWN0aW9uID0gZnVuY3Rpb24oc291cmNlLCB0YXJnZXQsIHBhcmVudEluZGV4LCBjb25uZWN0aW9uLCBwYXJlbnQsIGhpbnRzKSB7XG5cbiAgaWYgKHR5cGVvZiBwYXJlbnRJbmRleCA9PT0gJ29iamVjdCcpIHtcbiAgICBoaW50cyA9IHBhcmVudDtcbiAgICBwYXJlbnQgPSBjb25uZWN0aW9uO1xuICAgIGNvbm5lY3Rpb24gPSBwYXJlbnRJbmRleDtcbiAgICBwYXJlbnRJbmRleCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbm5lY3Rpb24gPSB0aGlzLl9jcmVhdGUoJ2Nvbm5lY3Rpb24nLCBjb25uZWN0aW9uKTtcblxuICB2YXIgY29udGV4dCA9IHtcbiAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICBwYXJlbnRJbmRleDogcGFyZW50SW5kZXgsXG4gICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICBoaW50czogaGludHNcbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnY29ubmVjdGlvbi5jcmVhdGUnLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29udGV4dC5jb25uZWN0aW9uO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZSBhIHNoYXBlIGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV8T2JqZWN0fSBzaGFwZVxuICogQHBhcmFtIHtQb2ludH0gcG9zaXRpb25cbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfGRqcy5tb2RlbC5Sb290fSB0YXJnZXRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGFyZW50SW5kZXhdIHBvc2l0aW9uIGluIHBhcmVudHMgY2hpbGRyZW4gbGlzdFxuICogQHBhcmFtIHtPYmplY3R9IFtoaW50c11cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hpbnRzLmF0dGFjaF0gd2hldGhlciB0byBhdHRhY2ggdG8gdGFyZ2V0IG9yIGJlY29tZSBhIGNoaWxkXG4gKlxuICogQHJldHVybiB7ZGpzLm1vZGVsLlNoYXBlfSB0aGUgY3JlYXRlZCBzaGFwZVxuICovXG5Nb2RlbGluZy5wcm90b3R5cGUuY3JlYXRlU2hhcGUgPSBmdW5jdGlvbihzaGFwZSwgcG9zaXRpb24sIHRhcmdldCwgcGFyZW50SW5kZXgsIGhpbnRzKSB7XG5cbiAgaWYgKHR5cGVvZiBwYXJlbnRJbmRleCAhPT0gJ251bWJlcicpIHtcbiAgICBoaW50cyA9IHBhcmVudEluZGV4O1xuICAgIHBhcmVudEluZGV4ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaGludHMgPSBoaW50cyB8fCB7fTtcblxuICB2YXIgYXR0YWNoID0gaGludHMuYXR0YWNoLFxuICAgICAgcGFyZW50LFxuICAgICAgaG9zdDtcblxuICBzaGFwZSA9IHRoaXMuX2NyZWF0ZSgnc2hhcGUnLCBzaGFwZSk7XG5cbiAgaWYgKGF0dGFjaCkge1xuICAgIHBhcmVudCA9IHRhcmdldC5wYXJlbnQ7XG4gICAgaG9zdCA9IHRhcmdldDtcbiAgfSBlbHNlIHtcbiAgICBwYXJlbnQgPSB0YXJnZXQ7XG4gIH1cblxuICB2YXIgY29udGV4dCA9IHtcbiAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgc2hhcGU6IHNoYXBlLFxuICAgIHBhcmVudDogcGFyZW50LFxuICAgIHBhcmVudEluZGV4OiBwYXJlbnRJbmRleCxcbiAgICBob3N0OiBob3N0LFxuICAgIGhpbnRzOiBoaW50c1xuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdzaGFwZS5jcmVhdGUnLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29udGV4dC5zaGFwZTtcbn07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnRzID0gZnVuY3Rpb24oZWxlbWVudHMsIHBvc2l0aW9uLCBwYXJlbnQsIHBhcmVudEluZGV4LCBoaW50cykge1xuICBpZiAoIWlzQXJyYXkoZWxlbWVudHMpKSB7XG4gICAgZWxlbWVudHMgPSBbIGVsZW1lbnRzIF07XG4gIH1cblxuICBpZiAodHlwZW9mIHBhcmVudEluZGV4ICE9PSAnbnVtYmVyJykge1xuICAgIGhpbnRzID0gcGFyZW50SW5kZXg7XG4gICAgcGFyZW50SW5kZXggPSB1bmRlZmluZWQ7XG4gIH1cblxuICBoaW50cyA9IGhpbnRzIHx8IHt9O1xuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgcGFyZW50OiBwYXJlbnQsXG4gICAgcGFyZW50SW5kZXg6IHBhcmVudEluZGV4LFxuICAgIGhpbnRzOiBoaW50c1xuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50cy5jcmVhdGUnLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29udGV4dC5lbGVtZW50cztcbn07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLmNyZWF0ZUxhYmVsID0gZnVuY3Rpb24obGFiZWxUYXJnZXQsIHBvc2l0aW9uLCBsYWJlbCwgcGFyZW50KSB7XG5cbiAgbGFiZWwgPSB0aGlzLl9jcmVhdGUoJ2xhYmVsJywgbGFiZWwpO1xuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgIGxhYmVsVGFyZ2V0OiBsYWJlbFRhcmdldCxcbiAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgcGFyZW50OiBwYXJlbnQgfHwgbGFiZWxUYXJnZXQucGFyZW50LFxuICAgIHNoYXBlOiBsYWJlbFxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdsYWJlbC5jcmVhdGUnLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29udGV4dC5zaGFwZTtcbn07XG5cblxuLyoqXG4gKiBBcHBlbmQgc2hhcGUgdG8gZ2l2ZW4gc291cmNlLCBkcmF3aW5nIGEgY29ubmVjdGlvblxuICogYmV0d2VlbiBzb3VyY2UgYW5kIHRoZSBuZXdseSBjcmVhdGVkIHNoYXBlLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBzb3VyY2VcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfE9iamVjdH0gc2hhcGVcbiAqIEBwYXJhbSB7UG9pbnR9IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gdGFyZ2V0XG4gKiBAcGFyYW0ge09iamVjdH0gW2hpbnRzXVxuICogQHBhcmFtIHtib29sZWFufSBbaGludHMuYXR0YWNoXVxuICogQHBhcmFtIHtkanMubW9kZWwuQ29ubmVjdGlvbnxPYmplY3R9IFtoaW50cy5jb25uZWN0aW9uXVxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gW2hpbnRzLmNvbm5lY3Rpb25QYXJlbnRdXG4gKlxuICogQHJldHVybiB7ZGpzLm1vZGVsLlNoYXBlfSB0aGUgbmV3bHkgY3JlYXRlZCBzaGFwZVxuICovXG5Nb2RlbGluZy5wcm90b3R5cGUuYXBwZW5kU2hhcGUgPSBmdW5jdGlvbihzb3VyY2UsIHNoYXBlLCBwb3NpdGlvbiwgdGFyZ2V0LCBoaW50cykge1xuXG4gIGhpbnRzID0gaGludHMgfHwge307XG5cbiAgc2hhcGUgPSB0aGlzLl9jcmVhdGUoJ3NoYXBlJywgc2hhcGUpO1xuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICBzaGFwZTogc2hhcGUsXG4gICAgY29ubmVjdGlvbjogaGludHMuY29ubmVjdGlvbixcbiAgICBjb25uZWN0aW9uUGFyZW50OiBoaW50cy5jb25uZWN0aW9uUGFyZW50LFxuICAgIGhpbnRzOiBoaW50c1xuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdzaGFwZS5hcHBlbmQnLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29udGV4dC5zaGFwZTtcbn07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLnJlbW92ZUVsZW1lbnRzID0gZnVuY3Rpb24oZWxlbWVudHMpIHtcbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgZWxlbWVudHM6IGVsZW1lbnRzXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnRzLmRlbGV0ZScsIGNvbnRleHQpO1xufTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUuZGlzdHJpYnV0ZUVsZW1lbnRzID0gZnVuY3Rpb24oZ3JvdXBzLCBheGlzLCBkaW1lbnNpb24pIHtcbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgZ3JvdXBzOiBncm91cHMsXG4gICAgYXhpczogYXhpcyxcbiAgICBkaW1lbnNpb246IGRpbWVuc2lvblxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50cy5kaXN0cmlidXRlJywgY29udGV4dCk7XG59O1xuXG5cbk1vZGVsaW5nLnByb3RvdHlwZS5yZW1vdmVTaGFwZSA9IGZ1bmN0aW9uKHNoYXBlLCBoaW50cykge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBzaGFwZTogc2hhcGUsXG4gICAgaGludHM6IGhpbnRzIHx8IHt9XG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3NoYXBlLmRlbGV0ZScsIGNvbnRleHQpO1xufTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUucmVtb3ZlQ29ubmVjdGlvbiA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIGhpbnRzKSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgaGludHM6IGhpbnRzIHx8IHt9XG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2Nvbm5lY3Rpb24uZGVsZXRlJywgY29udGV4dCk7XG59O1xuXG5Nb2RlbGluZy5wcm90b3R5cGUucmVwbGFjZVNoYXBlID0gZnVuY3Rpb24ob2xkU2hhcGUsIG5ld1NoYXBlLCBoaW50cykge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBvbGRTaGFwZTogb2xkU2hhcGUsXG4gICAgbmV3RGF0YTogbmV3U2hhcGUsXG4gICAgaGludHM6IGhpbnRzIHx8IHt9XG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3NoYXBlLnJlcGxhY2UnLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29udGV4dC5uZXdTaGFwZTtcbn07XG5cbk1vZGVsaW5nLnByb3RvdHlwZS5hbGlnbkVsZW1lbnRzID0gZnVuY3Rpb24oZWxlbWVudHMsIGFsaWdubWVudCkge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgYWxpZ25tZW50OiBhbGlnbm1lbnRcbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudHMuYWxpZ24nLCBjb250ZXh0KTtcbn07XG5cbk1vZGVsaW5nLnByb3RvdHlwZS5yZXNpemVTaGFwZSA9IGZ1bmN0aW9uKHNoYXBlLCBuZXdCb3VuZHMsIG1pbkJvdW5kcywgaGludHMpIHtcbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgc2hhcGU6IHNoYXBlLFxuICAgIG5ld0JvdW5kczogbmV3Qm91bmRzLFxuICAgIG1pbkJvdW5kczogbWluQm91bmRzLFxuICAgIGhpbnRzOiBoaW50c1xuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdzaGFwZS5yZXNpemUnLCBjb250ZXh0KTtcbn07XG5cbk1vZGVsaW5nLnByb3RvdHlwZS5jcmVhdGVTcGFjZSA9IGZ1bmN0aW9uKG1vdmluZ1NoYXBlcywgcmVzaXppbmdTaGFwZXMsIGRlbHRhLCBkaXJlY3Rpb24sIHN0YXJ0KSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIGRlbHRhOiBkZWx0YSxcbiAgICBkaXJlY3Rpb246IGRpcmVjdGlvbixcbiAgICBtb3ZpbmdTaGFwZXM6IG1vdmluZ1NoYXBlcyxcbiAgICByZXNpemluZ1NoYXBlczogcmVzaXppbmdTaGFwZXMsXG4gICAgc3RhcnQ6IHN0YXJ0XG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3NwYWNlVG9vbCcsIGNvbnRleHQpO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLnVwZGF0ZVdheXBvaW50cyA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIG5ld1dheXBvaW50cywgaGludHMpIHtcbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICBuZXdXYXlwb2ludHM6IG5ld1dheXBvaW50cyxcbiAgICBoaW50czogaGludHMgfHwge31cbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnY29ubmVjdGlvbi51cGRhdGVXYXlwb2ludHMnLCBjb250ZXh0KTtcbn07XG5cbk1vZGVsaW5nLnByb3RvdHlwZS5yZWNvbm5lY3QgPSBmdW5jdGlvbihjb25uZWN0aW9uLCBzb3VyY2UsIHRhcmdldCwgZG9ja2luZ09yUG9pbnRzLCBoaW50cykge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgIG5ld1NvdXJjZTogc291cmNlLFxuICAgIG5ld1RhcmdldDogdGFyZ2V0LFxuICAgIGRvY2tpbmdPclBvaW50czogZG9ja2luZ09yUG9pbnRzLFxuICAgIGhpbnRzOiBoaW50cyB8fCB7fVxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdjb25uZWN0aW9uLnJlY29ubmVjdCcsIGNvbnRleHQpO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLnJlY29ubmVjdFN0YXJ0ID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgbmV3U291cmNlLCBkb2NraW5nT3JQb2ludHMsIGhpbnRzKSB7XG4gIGlmICghaGludHMpIHtcbiAgICBoaW50cyA9IHt9O1xuICB9XG5cbiAgdGhpcy5yZWNvbm5lY3QoY29ubmVjdGlvbiwgbmV3U291cmNlLCBjb25uZWN0aW9uLnRhcmdldCwgZG9ja2luZ09yUG9pbnRzLCBhc3NpZ24oaGludHMsIHtcbiAgICBkb2NraW5nOiAnc291cmNlJ1xuICB9KSk7XG59O1xuXG5Nb2RlbGluZy5wcm90b3R5cGUucmVjb25uZWN0RW5kID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgbmV3VGFyZ2V0LCBkb2NraW5nT3JQb2ludHMsIGhpbnRzKSB7XG4gIGlmICghaGludHMpIHtcbiAgICBoaW50cyA9IHt9O1xuICB9XG5cbiAgdGhpcy5yZWNvbm5lY3QoY29ubmVjdGlvbiwgY29ubmVjdGlvbi5zb3VyY2UsIG5ld1RhcmdldCwgZG9ja2luZ09yUG9pbnRzLCBhc3NpZ24oaGludHMsIHtcbiAgICBkb2NraW5nOiAndGFyZ2V0J1xuICB9KSk7XG59O1xuXG5Nb2RlbGluZy5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uKHNvdXJjZSwgdGFyZ2V0LCBhdHRycywgaGludHMpIHtcbiAgcmV0dXJuIHRoaXMuY3JlYXRlQ29ubmVjdGlvbihzb3VyY2UsIHRhcmdldCwgYXR0cnMgfHwge30sIHNvdXJjZS5wYXJlbnQsIGhpbnRzKTtcbn07XG5cbk1vZGVsaW5nLnByb3RvdHlwZS5fY3JlYXRlID0gZnVuY3Rpb24odHlwZSwgYXR0cnMpIHtcbiAgaWYgKGF0dHJzIGluc3RhbmNlb2YgQmFzZSkge1xuICAgIHJldHVybiBhdHRycztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudEZhY3RvcnkuY3JlYXRlKHR5cGUsIGF0dHJzKTtcbiAgfVxufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLnRvZ2dsZUNvbGxhcHNlID0gZnVuY3Rpb24oc2hhcGUsIGhpbnRzKSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIHNoYXBlOiBzaGFwZSxcbiAgICBoaW50czogaGludHMgfHwge31cbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnc2hhcGUudG9nZ2xlQ29sbGFwc2UnLCBjb250ZXh0KTtcbn07XG4iLCJpbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnbWluLWRhc2gnO1xuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGFsaWduIGVsZW1lbnRzIGluIGEgY2VydGFpbiB3YXkuXG4gKlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBbGlnbkVsZW1lbnRzKG1vZGVsaW5nLCBjYW52YXMpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xufVxuXG5BbGlnbkVsZW1lbnRzLiRpbmplY3QgPSBbICdtb2RlbGluZycsICdjYW52YXMnIF07XG5cblxuQWxpZ25FbGVtZW50cy5wcm90b3R5cGUucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG5cbiAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cyxcbiAgICAgIGFsaWdubWVudCA9IGNvbnRleHQuYWxpZ25tZW50O1xuXG5cbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHZhciBkZWx0YSA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfTtcblxuICAgIGlmIChhbGlnbm1lbnQubGVmdCkge1xuICAgICAgZGVsdGEueCA9IGFsaWdubWVudC5sZWZ0IC0gZWxlbWVudC54O1xuXG4gICAgfSBlbHNlIGlmIChhbGlnbm1lbnQucmlnaHQpIHtcbiAgICAgIGRlbHRhLnggPSAoYWxpZ25tZW50LnJpZ2h0IC0gZWxlbWVudC53aWR0aCkgLSBlbGVtZW50Lng7XG5cbiAgICB9IGVsc2UgaWYgKGFsaWdubWVudC5jZW50ZXIpIHtcbiAgICAgIGRlbHRhLnggPSAoYWxpZ25tZW50LmNlbnRlciAtIE1hdGgucm91bmQoZWxlbWVudC53aWR0aCAvIDIpKSAtIGVsZW1lbnQueDtcblxuICAgIH0gZWxzZSBpZiAoYWxpZ25tZW50LnRvcCkge1xuICAgICAgZGVsdGEueSA9IGFsaWdubWVudC50b3AgLSBlbGVtZW50Lnk7XG5cbiAgICB9IGVsc2UgaWYgKGFsaWdubWVudC5ib3R0b20pIHtcbiAgICAgIGRlbHRhLnkgPSAoYWxpZ25tZW50LmJvdHRvbSAtIGVsZW1lbnQuaGVpZ2h0KSAtIGVsZW1lbnQueTtcblxuICAgIH0gZWxzZSBpZiAoYWxpZ25tZW50Lm1pZGRsZSkge1xuICAgICAgZGVsdGEueSA9IChhbGlnbm1lbnQubWlkZGxlIC0gTWF0aC5yb3VuZChlbGVtZW50LmhlaWdodCAvIDIpKSAtIGVsZW1lbnQueTtcbiAgICB9XG5cbiAgICBtb2RlbGluZy5tb3ZlRWxlbWVudHMoWyBlbGVtZW50IF0sIGRlbHRhLCBlbGVtZW50LnBhcmVudCk7XG4gIH0pO1xufTtcblxuQWxpZ25FbGVtZW50cy5wcm90b3R5cGUucG9zdEV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbn07XG4iLCJpbXBvcnQgeyBzb21lIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgaW1wbGVtZW50cyByZXZlcnNpYmxlIGFwcGVuZGluZyBvZiBzaGFwZXNcbiAqIHRvIGEgc291cmNlIHNoYXBlLlxuICpcbiAqIEBwYXJhbSB7Y2FudmFzfSBDYW52YXNcbiAqIEBwYXJhbSB7ZWxlbWVudEZhY3Rvcnl9IEVsZW1lbnRGYWN0b3J5XG4gKiBAcGFyYW0ge21vZGVsaW5nfSBNb2RlbGluZ1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBcHBlbmRTaGFwZUhhbmRsZXIobW9kZWxpbmcpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbn1cblxuQXBwZW5kU2hhcGVIYW5kbGVyLiRpbmplY3QgPSBbICdtb2RlbGluZycgXTtcblxuXG4vLyBhcGkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBzaGFwZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge0VsZW1lbnREZXNjcmlwdG9yfSBjb250ZXh0LnNoYXBlIHRoZSBuZXcgc2hhcGVcbiAqIEBwYXJhbSB7RWxlbWVudERlc2NyaXB0b3J9IGNvbnRleHQuc291cmNlIHRoZSBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge0VsZW1lbnREZXNjcmlwdG9yfSBjb250ZXh0LnBhcmVudCB0aGUgcGFyZW50IG9iamVjdFxuICogQHBhcmFtIHtQb2ludH0gY29udGV4dC5wb3NpdGlvbiBwb3NpdGlvbiBvZiB0aGUgbmV3IGVsZW1lbnRcbiAqL1xuQXBwZW5kU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5wcmVFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZTtcblxuICBpZiAoIXNvdXJjZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignc291cmNlIHJlcXVpcmVkJyk7XG4gIH1cblxuICB2YXIgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQgfHwgc291cmNlLnBhcmVudCxcbiAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICBzaGFwZSA9IGNvbnRleHQuc2hhcGUgPVxuICAgIHRoaXMuX21vZGVsaW5nLmNyZWF0ZVNoYXBlKFxuICAgICAgc2hhcGUsXG4gICAgICBjb250ZXh0LnBvc2l0aW9uLFxuICAgICAgdGFyZ2V0LCB7IGF0dGFjaDogaGludHMuYXR0YWNoIH0pO1xuXG4gIGNvbnRleHQuc2hhcGUgPSBzaGFwZTtcbn07XG5cbkFwcGVuZFNoYXBlSGFuZGxlci5wcm90b3R5cGUucG9zdEV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge307XG5cbiAgaWYgKCFleGlzdHNDb25uZWN0aW9uKGNvbnRleHQuc291cmNlLCBjb250ZXh0LnNoYXBlKSkge1xuXG4gICAgLy8gY3JlYXRlIGNvbm5lY3Rpb25cbiAgICBpZiAoaGludHMuY29ubmVjdGlvblRhcmdldCA9PT0gY29udGV4dC5zb3VyY2UpIHtcbiAgICAgIHRoaXMuX21vZGVsaW5nLmNvbm5lY3QoY29udGV4dC5zaGFwZSwgY29udGV4dC5zb3VyY2UsIGNvbnRleHQuY29ubmVjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21vZGVsaW5nLmNvbm5lY3QoY29udGV4dC5zb3VyY2UsIGNvbnRleHQuc2hhcGUsIGNvbnRleHQuY29ubmVjdGlvbik7XG4gICAgfVxuICB9XG59O1xuXG5cbmZ1bmN0aW9uIGV4aXN0c0Nvbm5lY3Rpb24oc291cmNlLCB0YXJnZXQpIHtcbiAgcmV0dXJuIHNvbWUoc291cmNlLm91dGdvaW5nLCBmdW5jdGlvbihjKSB7XG4gICAgcmV0dXJuIGMudGFyZ2V0ID09PSB0YXJnZXQ7XG4gIH0pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENyZWF0ZUNvbm5lY3Rpb25IYW5kbGVyKGNhbnZhcywgbGF5b3V0ZXIpIHtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9sYXlvdXRlciA9IGxheW91dGVyO1xufVxuXG5DcmVhdGVDb25uZWN0aW9uSGFuZGxlci4kaW5qZWN0ID0gWyAnY2FudmFzJywgJ2xheW91dGVyJyBdO1xuXG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxuLyoqXG4gKiBBcHBlbmRzIGEgc2hhcGUgdG8gYSB0YXJnZXQgc2hhcGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtkanMuZWxlbWVudC5CYXNlfSBjb250ZXh0LnNvdXJjZSB0aGUgc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtkanMuZWxlbWVudC5CYXNlfSBjb250ZXh0LnRhcmdldCB0aGUgcGFyZW50IG9iamVjdFxuICogQHBhcmFtIHtQb2ludH0gY29udGV4dC5wb3NpdGlvbiBwb3NpdGlvbiBvZiB0aGUgbmV3IGVsZW1lbnRcbiAqL1xuQ3JlYXRlQ29ubmVjdGlvbkhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0LFxuICAgICAgcGFyZW50ID0gY29udGV4dC5wYXJlbnQsXG4gICAgICBwYXJlbnRJbmRleCA9IGNvbnRleHQucGFyZW50SW5kZXgsXG4gICAgICBoaW50cyA9IGNvbnRleHQuaGludHM7XG5cbiAgaWYgKCFzb3VyY2UgfHwgIXRhcmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc291cmNlIGFuZCB0YXJnZXQgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGlmICghcGFyZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnQgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGNvbm5lY3Rpb24uc291cmNlID0gc291cmNlO1xuICBjb25uZWN0aW9uLnRhcmdldCA9IHRhcmdldDtcblxuICBpZiAoIWNvbm5lY3Rpb24ud2F5cG9pbnRzKSB7XG4gICAgY29ubmVjdGlvbi53YXlwb2ludHMgPSB0aGlzLl9sYXlvdXRlci5sYXlvdXRDb25uZWN0aW9uKGNvbm5lY3Rpb24sIGhpbnRzKTtcbiAgfVxuXG4gIC8vIGFkZCBjb25uZWN0aW9uXG4gIHRoaXMuX2NhbnZhcy5hZGRDb25uZWN0aW9uKGNvbm5lY3Rpb24sIHBhcmVudCwgcGFyZW50SW5kZXgpO1xuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufTtcblxuQ3JlYXRlQ29ubmVjdGlvbkhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb247XG5cbiAgdGhpcy5fY2FudmFzLnJlbW92ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7XG5cbiAgY29ubmVjdGlvbi5zb3VyY2UgPSBudWxsO1xuICBjb25uZWN0aW9uLnRhcmdldCA9IG51bGw7XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59OyIsImltcG9ydCB7XHJcbiAgYXNzaWduLFxyXG4gIGZvckVhY2gsXHJcbiAgaXNOdW1iZXIsXHJcbiAgbWFwLFxyXG4gIHBpY2ssXHJcbiAgdmFsdWVzXHJcbn0gZnJvbSAnbWluLWRhc2gnO1xyXG5cclxuaW1wb3J0IHtcclxuICBnZXRCQm94LFxyXG4gIGdldFBhcmVudHNcclxufSBmcm9tICcuLi8uLi8uLi91dGlsL0VsZW1lbnRzJztcclxuXHJcbnZhciByb3VuZCA9IE1hdGgucm91bmQ7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcmVhdGVFbGVtZW50c0hhbmRsZXIobW9kZWxpbmcpIHtcclxuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xyXG59XHJcblxyXG5DcmVhdGVFbGVtZW50c0hhbmRsZXIuJGluamVjdCA9IFtcclxuICAnbW9kZWxpbmcnXHJcbl07XHJcblxyXG5DcmVhdGVFbGVtZW50c0hhbmRsZXIucHJvdG90eXBlLnByZUV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cyxcclxuICAgICAgcGFyZW50ID0gY29udGV4dC5wYXJlbnQsXHJcbiAgICAgIHBhcmVudEluZGV4ID0gY29udGV4dC5wYXJlbnRJbmRleCxcclxuICAgICAgcG9zaXRpb24gPSBjb250ZXh0LnBvc2l0aW9uLFxyXG4gICAgICBoaW50cyA9IGNvbnRleHQuaGludHM7XHJcblxyXG4gIHZhciBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nO1xyXG5cclxuICAvLyBtYWtlIHN1cmUgZWFjaCBlbGVtZW50IGhhcyB4IGFuZCB5XHJcbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgaWYgKCFpc051bWJlcihlbGVtZW50LngpKSB7XHJcbiAgICAgIGVsZW1lbnQueCA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc051bWJlcihlbGVtZW50LnkpKSB7XHJcbiAgICAgIGVsZW1lbnQueSA9IDA7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHZhciBiYm94ID0gZ2V0QkJveChlbGVtZW50cyk7XHJcblxyXG4gIC8vIGNlbnRlciBlbGVtZW50cyBhcm91bmQgcG9zaXRpb25cclxuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICBpZiAoaXNDb25uZWN0aW9uKGVsZW1lbnQpKSB7XHJcbiAgICAgIGVsZW1lbnQud2F5cG9pbnRzID0gbWFwKGVsZW1lbnQud2F5cG9pbnRzLCBmdW5jdGlvbih3YXlwb2ludCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB4OiByb3VuZCh3YXlwb2ludC54IC0gYmJveC54IC0gYmJveC53aWR0aCAvIDIgKyBwb3NpdGlvbi54KSxcclxuICAgICAgICAgIHk6IHJvdW5kKHdheXBvaW50LnkgLSBiYm94LnkgLSBiYm94LmhlaWdodCAvIDIgKyBwb3NpdGlvbi55KVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzc2lnbihlbGVtZW50LCB7XHJcbiAgICAgIHg6IHJvdW5kKGVsZW1lbnQueCAtIGJib3gueCAtIGJib3gud2lkdGggLyAyICsgcG9zaXRpb24ueCksXHJcbiAgICAgIHk6IHJvdW5kKGVsZW1lbnQueSAtIGJib3gueSAtIGJib3guaGVpZ2h0IC8gMiArIHBvc2l0aW9uLnkpXHJcbiAgICB9KTtcclxuICB9KTtcclxuXHJcbiAgdmFyIHBhcmVudHMgPSBnZXRQYXJlbnRzKGVsZW1lbnRzKTtcclxuXHJcbiAgdmFyIGNhY2hlID0ge307XHJcblxyXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgIGlmIChpc0Nvbm5lY3Rpb24oZWxlbWVudCkpIHtcclxuICAgICAgY2FjaGVbIGVsZW1lbnQuaWQgXSA9IGlzTnVtYmVyKHBhcmVudEluZGV4KSA/XHJcbiAgICAgICAgbW9kZWxpbmcuY3JlYXRlQ29ubmVjdGlvbihcclxuICAgICAgICAgIGNhY2hlWyBlbGVtZW50LnNvdXJjZS5pZCBdLFxyXG4gICAgICAgICAgY2FjaGVbIGVsZW1lbnQudGFyZ2V0LmlkIF0sXHJcbiAgICAgICAgICBwYXJlbnRJbmRleCxcclxuICAgICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgICBlbGVtZW50LnBhcmVudCB8fCBwYXJlbnQsXHJcbiAgICAgICAgICBoaW50c1xyXG4gICAgICAgICkgOlxyXG4gICAgICAgIG1vZGVsaW5nLmNyZWF0ZUNvbm5lY3Rpb24oXHJcbiAgICAgICAgICBjYWNoZVsgZWxlbWVudC5zb3VyY2UuaWQgXSxcclxuICAgICAgICAgIGNhY2hlWyBlbGVtZW50LnRhcmdldC5pZCBdLFxyXG4gICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgIGVsZW1lbnQucGFyZW50IHx8IHBhcmVudCxcclxuICAgICAgICAgIGhpbnRzXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY3JlYXRlU2hhcGVIaW50cyA9IGFzc2lnbih7fSwgaGludHMpO1xyXG5cclxuICAgIGlmIChwYXJlbnRzLmluZGV4T2YoZWxlbWVudCkgPT09IC0xKSB7XHJcbiAgICAgIGNyZWF0ZVNoYXBlSGludHMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNhY2hlWyBlbGVtZW50LmlkIF0gPSBpc051bWJlcihwYXJlbnRJbmRleCkgP1xyXG4gICAgICBtb2RlbGluZy5jcmVhdGVTaGFwZShcclxuICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgIHBpY2soZWxlbWVudCwgWyAneCcsICd5JywgJ3dpZHRoJywgJ2hlaWdodCcgXSksXHJcbiAgICAgICAgZWxlbWVudC5wYXJlbnQgfHwgcGFyZW50LFxyXG4gICAgICAgIHBhcmVudEluZGV4LFxyXG4gICAgICAgIGNyZWF0ZVNoYXBlSGludHNcclxuICAgICAgKSA6XHJcbiAgICAgIG1vZGVsaW5nLmNyZWF0ZVNoYXBlKFxyXG4gICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgcGljayhlbGVtZW50LCBbICd4JywgJ3knLCAnd2lkdGgnLCAnaGVpZ2h0JyBdKSxcclxuICAgICAgICBlbGVtZW50LnBhcmVudCB8fCBwYXJlbnQsXHJcbiAgICAgICAgY3JlYXRlU2hhcGVIaW50c1xyXG4gICAgICApO1xyXG4gIH0pO1xyXG5cclxuICBjb250ZXh0LmVsZW1lbnRzID0gdmFsdWVzKGNhY2hlKTtcclxufTtcclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5cclxuZnVuY3Rpb24gaXNDb25uZWN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gISFlbGVtZW50LndheXBvaW50cztcclxufSIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDcmVhdGVTaGFwZUhhbmRsZXIgZnJvbSAnLi9DcmVhdGVTaGFwZUhhbmRsZXInO1xuXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgYXR0YWNoZXMgYSBsYWJlbCB0byBhIGdpdmVuIHRhcmdldCBzaGFwZS5cbiAqXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENyZWF0ZUxhYmVsSGFuZGxlcihjYW52YXMpIHtcbiAgQ3JlYXRlU2hhcGVIYW5kbGVyLmNhbGwodGhpcywgY2FudmFzKTtcbn1cblxuaW5oZXJpdHMoQ3JlYXRlTGFiZWxIYW5kbGVyLCBDcmVhdGVTaGFwZUhhbmRsZXIpO1xuXG5DcmVhdGVMYWJlbEhhbmRsZXIuJGluamVjdCA9IFsgJ2NhbnZhcycgXTtcblxuXG4vLyBhcGkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cbnZhciBvcmlnaW5hbEV4ZWN1dGUgPSBDcmVhdGVTaGFwZUhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGU7XG5cbi8qKlxuICogQXBwZW5kcyBhIGxhYmVsIHRvIGEgdGFyZ2V0IHNoYXBlLlxuICpcbiAqIEBtZXRob2QgQ3JlYXRlTGFiZWxIYW5kbGVyI2V4ZWN1dGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50RGVzY3JpcHRvcn0gY29udGV4dC50YXJnZXQgdGhlIGVsZW1lbnQgdGhlIGxhYmVsIGlzIGF0dGFjaGVkIHRvXG4gKiBAcGFyYW0ge0VsZW1lbnREZXNjcmlwdG9yfSBjb250ZXh0LnBhcmVudCB0aGUgcGFyZW50IG9iamVjdFxuICogQHBhcmFtIHtQb2ludH0gY29udGV4dC5wb3NpdGlvbiBwb3NpdGlvbiBvZiB0aGUgbmV3IGVsZW1lbnRcbiAqL1xuQ3JlYXRlTGFiZWxIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBsYWJlbCA9IGNvbnRleHQuc2hhcGU7XG5cbiAgZW5zdXJlVmFsaWREaW1lbnNpb25zKGxhYmVsKTtcblxuICBsYWJlbC5sYWJlbFRhcmdldCA9IGNvbnRleHQubGFiZWxUYXJnZXQ7XG5cbiAgcmV0dXJuIG9yaWdpbmFsRXhlY3V0ZS5jYWxsKHRoaXMsIGNvbnRleHQpO1xufTtcblxudmFyIG9yaWdpbmFsUmV2ZXJ0ID0gQ3JlYXRlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQ7XG5cbi8qKlxuICogVW5kbyBhcHBlbmQgYnkgcmVtb3ZpbmcgdGhlIHNoYXBlXG4gKi9cbkNyZWF0ZUxhYmVsSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuICBjb250ZXh0LnNoYXBlLmxhYmVsVGFyZ2V0ID0gbnVsbDtcblxuICByZXR1cm4gb3JpZ2luYWxSZXZlcnQuY2FsbCh0aGlzLCBjb250ZXh0KTtcbn07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGVuc3VyZVZhbGlkRGltZW5zaW9ucyhsYWJlbCkge1xuXG4gIC8vIG1ha2Ugc3VyZSBhIGxhYmVsIGhhcyB2YWxpZCB7IHdpZHRoLCBoZWlnaHQgfSBkaW1lbnNpb25zXG4gIFsgJ3dpZHRoJywgJ2hlaWdodCcgXS5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApIHtcbiAgICBpZiAodHlwZW9mIGxhYmVsW3Byb3BdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgbGFiZWxbcHJvcF0gPSAwO1xuICAgIH1cbiAgfSk7XG59IiwiaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnbWluLWRhc2gnO1xuXG52YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xuXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgaW1wbGVtZW50cyByZXZlcnNpYmxlIGFkZGl0aW9uIG9mIHNoYXBlcy5cbiAqXG4gKiBAcGFyYW0ge2NhbnZhc30gQ2FudmFzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENyZWF0ZVNoYXBlSGFuZGxlcihjYW52YXMpIHtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xufVxuXG5DcmVhdGVTaGFwZUhhbmRsZXIuJGluamVjdCA9IFsgJ2NhbnZhcycgXTtcblxuXG4vLyBhcGkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cbi8qKlxuICogQXBwZW5kcyBhIHNoYXBlIHRvIGEgdGFyZ2V0IHNoYXBlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGNvbnRleHQucGFyZW50IHRoZSBwYXJlbnQgb2JqZWN0XG4gKiBAcGFyYW0ge1BvaW50fSBjb250ZXh0LnBvc2l0aW9uIHBvc2l0aW9uIG9mIHRoZSBuZXcgZWxlbWVudFxuICovXG5DcmVhdGVTaGFwZUhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIHBvc2l0aW9uT3JCb3VuZHMgPSBjb250ZXh0LnBvc2l0aW9uLFxuICAgICAgcGFyZW50ID0gY29udGV4dC5wYXJlbnQsXG4gICAgICBwYXJlbnRJbmRleCA9IGNvbnRleHQucGFyZW50SW5kZXg7XG5cbiAgaWYgKCFwYXJlbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKCFwb3NpdGlvbk9yQm91bmRzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwb3NpdGlvbiByZXF1aXJlZCcpO1xuICB9XG5cbiAgLy8gKDEpIGFkZCBhdCBldmVudCBjZW50ZXIgcG9zaXRpb24gX29yXyBhdCBnaXZlbiBib3VuZHNcbiAgaWYgKHBvc2l0aW9uT3JCb3VuZHMud2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgIGFzc2lnbihzaGFwZSwgcG9zaXRpb25PckJvdW5kcyk7XG4gIH0gZWxzZSB7XG4gICAgYXNzaWduKHNoYXBlLCB7XG4gICAgICB4OiBwb3NpdGlvbk9yQm91bmRzLnggLSByb3VuZChzaGFwZS53aWR0aCAvIDIpLFxuICAgICAgeTogcG9zaXRpb25PckJvdW5kcy55IC0gcm91bmQoc2hhcGUuaGVpZ2h0IC8gMilcbiAgICB9KTtcbiAgfVxuXG4gIC8vICgyKSBhZGQgdG8gY2FudmFzXG4gIHRoaXMuX2NhbnZhcy5hZGRTaGFwZShzaGFwZSwgcGFyZW50LCBwYXJlbnRJbmRleCk7XG5cbiAgcmV0dXJuIHNoYXBlO1xufTtcblxuXG4vKipcbiAqIFVuZG8gYXBwZW5kIGJ5IHJlbW92aW5nIHRoZSBzaGFwZVxuICovXG5DcmVhdGVTaGFwZUhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gIC8vICgzKSByZW1vdmUgZm9ybSBjYW52YXNcbiAgdGhpcy5fY2FudmFzLnJlbW92ZVNoYXBlKHNoYXBlKTtcblxuICByZXR1cm4gc2hhcGU7XG59OyIsImltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICBpbmRleE9mIGFzIGNvbGxlY3Rpb25JZHhcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Db2xsZWN0aW9ucyc7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIHJldmVyc2libGUgZGVsZXRpb24gb2YgQ29ubmVjdGlvbnMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERlbGV0ZUNvbm5lY3Rpb25IYW5kbGVyKGNhbnZhcywgbW9kZWxpbmcpIHtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5EZWxldGVDb25uZWN0aW9uSGFuZGxlci4kaW5qZWN0ID0gW1xuICAnY2FudmFzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuXG5EZWxldGVDb25uZWN0aW9uSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIHBhcmVudCA9IGNvbm5lY3Rpb24ucGFyZW50O1xuXG4gIGNvbnRleHQucGFyZW50ID0gcGFyZW50O1xuXG4gIC8vIHJlbWVtYmVyIGNvbnRhaW5tZW50XG4gIGNvbnRleHQucGFyZW50SW5kZXggPSBjb2xsZWN0aW9uSWR4KHBhcmVudC5jaGlsZHJlbiwgY29ubmVjdGlvbik7XG5cbiAgY29udGV4dC5zb3VyY2UgPSBjb25uZWN0aW9uLnNvdXJjZTtcbiAgY29udGV4dC50YXJnZXQgPSBjb25uZWN0aW9uLnRhcmdldDtcblxuICB0aGlzLl9jYW52YXMucmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uKTtcblxuICBjb25uZWN0aW9uLnNvdXJjZSA9IG51bGw7XG4gIGNvbm5lY3Rpb24udGFyZ2V0ID0gbnVsbDtcblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07XG5cbi8qKlxuICogQ29tbWFuZCByZXZlcnQgaW1wbGVtZW50YXRpb24uXG4gKi9cbkRlbGV0ZUNvbm5lY3Rpb25IYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcbiAgICAgIHBhcmVudEluZGV4ID0gY29udGV4dC5wYXJlbnRJbmRleDtcblxuICBjb25uZWN0aW9uLnNvdXJjZSA9IGNvbnRleHQuc291cmNlO1xuICBjb25uZWN0aW9uLnRhcmdldCA9IGNvbnRleHQudGFyZ2V0O1xuXG4gIC8vIHJlc3RvcmUgY29udGFpbm1lbnRcbiAgY29sbGVjdGlvbkFkZChwYXJlbnQuY2hpbGRyZW4sIGNvbm5lY3Rpb24sIHBhcmVudEluZGV4KTtcblxuICB0aGlzLl9jYW52YXMuYWRkQ29ubmVjdGlvbihjb25uZWN0aW9uLCBwYXJlbnQpO1xuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufTtcbiIsImltcG9ydCB7IGZvckVhY2ggfSBmcm9tICdtaW4tZGFzaCc7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGVsZXRlRWxlbWVudHNIYW5kbGVyKG1vZGVsaW5nLCBlbGVtZW50UmVnaXN0cnkpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbiAgdGhpcy5fZWxlbWVudFJlZ2lzdHJ5ID0gZWxlbWVudFJlZ2lzdHJ5O1xufVxuXG5EZWxldGVFbGVtZW50c0hhbmRsZXIuJGluamVjdCA9IFtcbiAgJ21vZGVsaW5nJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeSdcbl07XG5cblxuRGVsZXRlRWxlbWVudHNIYW5kbGVyLnByb3RvdHlwZS5wb3N0RXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZyxcbiAgICAgIGVsZW1lbnRSZWdpc3RyeSA9IHRoaXMuX2VsZW1lbnRSZWdpc3RyeSxcbiAgICAgIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cztcblxuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICAvLyBlbGVtZW50IG1heSBoYXZlIGJlZW4gcmVtb3ZlZCB3aXRoIHByZXZpb3VzXG4gICAgLy8gcmVtb3ZlIG9wZXJhdGlvbnMgYWxyZWFkeSAoZS5nLiBpbiBjYXNlIG9mIG5lc3RpbmcpXG4gICAgaWYgKCFlbGVtZW50UmVnaXN0cnkuZ2V0KGVsZW1lbnQuaWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQud2F5cG9pbnRzKSB7XG4gICAgICBtb2RlbGluZy5yZW1vdmVDb25uZWN0aW9uKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtb2RlbGluZy5yZW1vdmVTaGFwZShlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xufTsiLCJpbXBvcnQge1xuICBhZGQgYXMgY29sbGVjdGlvbkFkZCxcbiAgaW5kZXhPZiBhcyBjb2xsZWN0aW9uSWR4XG59IGZyb20gJy4uLy4uLy4uL3V0aWwvQ29sbGVjdGlvbnMnO1xuXG5pbXBvcnQgeyBzYXZlQ2xlYXIgfSBmcm9tICcuLi8uLi8uLi91dGlsL1JlbW92YWwnO1xuXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgaW1wbGVtZW50cyByZXZlcnNpYmxlIGRlbGV0aW9uIG9mIHNoYXBlcy5cbiAqXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERlbGV0ZVNoYXBlSGFuZGxlcihjYW52YXMsIG1vZGVsaW5nKSB7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbn1cblxuRGVsZXRlU2hhcGVIYW5kbGVyLiRpbmplY3QgPSBbICdjYW52YXMnLCAnbW9kZWxpbmcnIF07XG5cblxuLyoqXG4gKiAtIFJlbW92ZSBjb25uZWN0aW9uc1xuICogLSBSZW1vdmUgYWxsIGRpcmVjdCBjaGlsZHJlblxuICovXG5EZWxldGVTaGFwZUhhbmRsZXIucHJvdG90eXBlLnByZUV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAvLyByZW1vdmUgY29ubmVjdGlvbnNcbiAgc2F2ZUNsZWFyKHNoYXBlLmluY29taW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG5cbiAgICAvLyBUbyBtYWtlIHN1cmUgdGhhdCB0aGUgY29ubmVjdGlvbiBpc24ndCByZW1vdmVkIHR3aWNlXG4gICAgLy8gRm9yIGV4YW1wbGUgaWYgYSBjb250YWluZXIgaXMgcmVtb3ZlZFxuICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oY29ubmVjdGlvbiwgeyBuZXN0ZWQ6IHRydWUgfSk7XG4gIH0pO1xuXG4gIHNhdmVDbGVhcihzaGFwZS5vdXRnb2luZywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oY29ubmVjdGlvbiwgeyBuZXN0ZWQ6IHRydWUgfSk7XG4gIH0pO1xuXG4gIC8vIHJlbW92ZSBjaGlsZCBzaGFwZXMgYW5kIGNvbm5lY3Rpb25zXG4gIHNhdmVDbGVhcihzaGFwZS5jaGlsZHJlbiwgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICBpZiAoaXNDb25uZWN0aW9uKGNoaWxkKSkge1xuICAgICAgbW9kZWxpbmcucmVtb3ZlQ29ubmVjdGlvbihjaGlsZCwgeyBuZXN0ZWQ6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGVsaW5nLnJlbW92ZVNoYXBlKGNoaWxkLCB7IG5lc3RlZDogdHJ1ZSB9KTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgc2hhcGUgYW5kIHJlbWVtYmVyIHRoZSBwYXJlbnRcbiAqL1xuRGVsZXRlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgY2FudmFzID0gdGhpcy5fY2FudmFzO1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBvbGRQYXJlbnQgPSBzaGFwZS5wYXJlbnQ7XG5cbiAgY29udGV4dC5vbGRQYXJlbnQgPSBvbGRQYXJlbnQ7XG5cbiAgLy8gcmVtb3ZlIGNvbnRhaW5tZW50XG4gIGNvbnRleHQub2xkUGFyZW50SW5kZXggPSBjb2xsZWN0aW9uSWR4KG9sZFBhcmVudC5jaGlsZHJlbiwgc2hhcGUpO1xuXG4gIC8vIHJlbW92ZSBzaGFwZVxuICBjYW52YXMucmVtb3ZlU2hhcGUoc2hhcGUpO1xuXG4gIHJldHVybiBzaGFwZTtcbn07XG5cblxuLyoqXG4gKiBDb21tYW5kIHJldmVydCBpbXBsZW1lbnRhdGlvblxuICovXG5EZWxldGVTaGFwZUhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY2FudmFzID0gdGhpcy5fY2FudmFzO1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBvbGRQYXJlbnQgPSBjb250ZXh0Lm9sZFBhcmVudCxcbiAgICAgIG9sZFBhcmVudEluZGV4ID0gY29udGV4dC5vbGRQYXJlbnRJbmRleDtcblxuICAvLyByZXN0b3JlIGNvbnRhaW5tZW50XG4gIGNvbGxlY3Rpb25BZGQob2xkUGFyZW50LmNoaWxkcmVuLCBzaGFwZSwgb2xkUGFyZW50SW5kZXgpO1xuXG4gIGNhbnZhcy5hZGRTaGFwZShzaGFwZSwgb2xkUGFyZW50KTtcblxuICByZXR1cm4gc2hhcGU7XG59O1xuXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC53YXlwb2ludHM7XG59XG4iLCJpbXBvcnQge1xuICBmb3JFYWNoLFxuICBzb3J0Qnlcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgZGlzdHJpYnV0ZXMgZWxlbWVudHMgZXZlbmx5LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEaXN0cmlidXRlRWxlbWVudHMobW9kZWxpbmcpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbn1cblxuRGlzdHJpYnV0ZUVsZW1lbnRzLiRpbmplY3QgPSBbICdtb2RlbGluZycgXTtcblxudmFyIE9GRl9BWElTID0ge1xuICB4OiAneScsXG4gIHk6ICd4J1xufTtcblxuRGlzdHJpYnV0ZUVsZW1lbnRzLnByb3RvdHlwZS5wcmVFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcblxuICB2YXIgZ3JvdXBzID0gY29udGV4dC5ncm91cHMsXG4gICAgICBheGlzID0gY29udGV4dC5heGlzLFxuICAgICAgZGltZW5zaW9uID0gY29udGV4dC5kaW1lbnNpb247XG5cbiAgZnVuY3Rpb24gdXBkYXRlUmFuZ2UoZ3JvdXAsIGVsZW1lbnQpIHtcbiAgICBncm91cC5yYW5nZS5taW4gPSBNYXRoLm1pbihlbGVtZW50W2F4aXNdLCBncm91cC5yYW5nZS5taW4pO1xuICAgIGdyb3VwLnJhbmdlLm1heCA9IE1hdGgubWF4KGVsZW1lbnRbYXhpc10gKyBlbGVtZW50W2RpbWVuc2lvbl0sIGdyb3VwLnJhbmdlLm1heCk7XG4gIH1cblxuICBmdW5jdGlvbiBjZW50ZXIoZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50W2F4aXNdICsgZWxlbWVudFtkaW1lbnNpb25dIC8gMjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxhc3RJZHgoYXJyKSB7XG4gICAgcmV0dXJuIGFyci5sZW5ndGggLSAxO1xuICB9XG5cbiAgZnVuY3Rpb24gcmFuZ2VEaWZmKHJhbmdlKSB7XG4gICAgcmV0dXJuIHJhbmdlLm1heCAtIHJhbmdlLm1pbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNlbnRlckVsZW1lbnQocmVmQ2VudGVyLCBlbGVtZW50KSB7XG4gICAgdmFyIGRlbHRhID0geyB5OiAwIH07XG5cbiAgICBkZWx0YVtheGlzXSA9IHJlZkNlbnRlciAtIGNlbnRlcihlbGVtZW50KTtcblxuICAgIGlmIChkZWx0YVtheGlzXSkge1xuXG4gICAgICBkZWx0YVtPRkZfQVhJU1theGlzXV0gPSAwO1xuXG4gICAgICBtb2RlbGluZy5tb3ZlRWxlbWVudHMoWyBlbGVtZW50IF0sIGRlbHRhLCBlbGVtZW50LnBhcmVudCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpcnN0R3JvdXAgPSBncm91cHNbMF0sXG4gICAgICBsYXN0R3JvdXBJZHggPSBsYXN0SWR4KGdyb3VwcyksXG4gICAgICBsYXN0R3JvdXAgPSBncm91cHNbIGxhc3RHcm91cElkeCBdO1xuXG4gIHZhciBtYXJnaW4sXG4gICAgICBzcGFjZUluQmV0d2VlbixcbiAgICAgIGdyb3Vwc1NpemUgPSAwOyAvLyB0aGUgc2l6ZSBvZiBlYWNoIHJhbmdlXG5cbiAgZm9yRWFjaChncm91cHMsIGZ1bmN0aW9uKGdyb3VwLCBpZHgpIHtcbiAgICB2YXIgc29ydGVkRWxlbWVudHMsXG4gICAgICAgIHJlZkVsZW0sXG4gICAgICAgIHJlZkNlbnRlcjtcblxuICAgIGlmIChncm91cC5lbGVtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICBpZiAoaWR4ICYmIGlkeCAhPT0gZ3JvdXBzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdXBkYXRlUmFuZ2UoZ3JvdXAsIGdyb3VwLmVsZW1lbnRzWzBdKTtcblxuICAgICAgICBncm91cHNTaXplICs9IHJhbmdlRGlmZihncm91cC5yYW5nZSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc29ydGVkRWxlbWVudHMgPSBzb3J0QnkoZ3JvdXAuZWxlbWVudHMsIGF4aXMpO1xuXG4gICAgcmVmRWxlbSA9IHNvcnRlZEVsZW1lbnRzWzBdO1xuXG4gICAgaWYgKGlkeCA9PT0gbGFzdEdyb3VwSWR4KSB7XG4gICAgICByZWZFbGVtID0gc29ydGVkRWxlbWVudHNbbGFzdElkeChzb3J0ZWRFbGVtZW50cyldO1xuICAgIH1cblxuICAgIHJlZkNlbnRlciA9IGNlbnRlcihyZWZFbGVtKTtcblxuICAgIC8vIHdhbm5hIHVwZGF0ZSB0aGUgcmFuZ2VzIGFmdGVyIHRoZSBzaGFwZXMgaGF2ZSBiZWVuIGNlbnRlcmVkXG4gICAgZ3JvdXAucmFuZ2UgPSBudWxsO1xuXG4gICAgZm9yRWFjaChzb3J0ZWRFbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gICAgICBjZW50ZXJFbGVtZW50KHJlZkNlbnRlciwgZWxlbWVudCk7XG5cbiAgICAgIGlmIChncm91cC5yYW5nZSA9PT0gbnVsbCkge1xuICAgICAgICBncm91cC5yYW5nZSA9IHtcbiAgICAgICAgICBtaW46IGVsZW1lbnRbYXhpc10sXG4gICAgICAgICAgbWF4OiBlbGVtZW50W2F4aXNdICsgZWxlbWVudFtkaW1lbnNpb25dXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyB1cGRhdGUgZ3JvdXAncyByYW5nZSBhZnRlciBjZW50ZXJpbmcgdGhlIHJhbmdlIGVsZW1lbnRzXG4gICAgICB1cGRhdGVSYW5nZShncm91cCwgZWxlbWVudCk7XG4gICAgfSk7XG5cbiAgICBpZiAoaWR4ICYmIGlkeCAhPT0gZ3JvdXBzLmxlbmd0aCAtIDEpIHtcbiAgICAgIGdyb3Vwc1NpemUgKz0gcmFuZ2VEaWZmKGdyb3VwLnJhbmdlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHNwYWNlSW5CZXR3ZWVuID0gTWF0aC5hYnMobGFzdEdyb3VwLnJhbmdlLm1pbiAtIGZpcnN0R3JvdXAucmFuZ2UubWF4KTtcblxuICBtYXJnaW4gPSBNYXRoLnJvdW5kKChzcGFjZUluQmV0d2VlbiAtIGdyb3Vwc1NpemUpIC8gKGdyb3Vwcy5sZW5ndGggLSAxKSk7XG5cbiAgaWYgKG1hcmdpbiA8IGdyb3Vwcy5sZW5ndGggLSAxKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yRWFjaChncm91cHMsIGZ1bmN0aW9uKGdyb3VwLCBncm91cElkeCkge1xuICAgIHZhciBkZWx0YSA9IHt9LFxuICAgICAgICBwcmV2R3JvdXA7XG5cbiAgICBpZiAoZ3JvdXAgPT09IGZpcnN0R3JvdXAgfHwgZ3JvdXAgPT09IGxhc3RHcm91cCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByZXZHcm91cCA9IGdyb3Vwc1tncm91cElkeCAtIDFdO1xuXG4gICAgZ3JvdXAucmFuZ2UubWF4ID0gMDtcblxuICAgIGZvckVhY2goZ3JvdXAuZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQsIGlkeCkge1xuICAgICAgZGVsdGFbT0ZGX0FYSVNbYXhpc11dID0gMDtcbiAgICAgIGRlbHRhW2F4aXNdID0gKHByZXZHcm91cC5yYW5nZS5tYXggLSBlbGVtZW50W2F4aXNdKSArIG1hcmdpbjtcblxuICAgICAgaWYgKGdyb3VwLnJhbmdlLm1pbiAhPT0gZWxlbWVudFtheGlzXSkge1xuICAgICAgICBkZWx0YVtheGlzXSArPSBlbGVtZW50W2F4aXNdIC0gZ3JvdXAucmFuZ2UubWluO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVsdGFbYXhpc10pIHtcbiAgICAgICAgbW9kZWxpbmcubW92ZUVsZW1lbnRzKFsgZWxlbWVudCBdLCBkZWx0YSwgZWxlbWVudC5wYXJlbnQpO1xuICAgICAgfVxuXG4gICAgICBncm91cC5yYW5nZS5tYXggPSBNYXRoLm1heChlbGVtZW50W2F4aXNdICsgZWxlbWVudFtkaW1lbnNpb25dLCBpZHggPyBncm91cC5yYW5nZS5tYXggOiAwKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5EaXN0cmlidXRlRWxlbWVudHMucHJvdG90eXBlLnBvc3RFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG59O1xuIiwiaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgaW1wbGVtZW50cyByZXZlcnNpYmxlIG1vdmluZyBvZiBzaGFwZXMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExheW91dENvbm5lY3Rpb25IYW5kbGVyKGxheW91dGVyLCBjYW52YXMpIHtcbiAgdGhpcy5fbGF5b3V0ZXIgPSBsYXlvdXRlcjtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xufVxuXG5MYXlvdXRDb25uZWN0aW9uSGFuZGxlci4kaW5qZWN0ID0gWyAnbGF5b3V0ZXInLCAnY2FudmFzJyBdO1xuXG5MYXlvdXRDb25uZWN0aW9uSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbjtcblxuICB2YXIgb2xkV2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHM7XG5cbiAgYXNzaWduKGNvbnRleHQsIHtcbiAgICBvbGRXYXlwb2ludHM6IG9sZFdheXBvaW50c1xuICB9KTtcblxuICBjb25uZWN0aW9uLndheXBvaW50cyA9IHRoaXMuX2xheW91dGVyLmxheW91dENvbm5lY3Rpb24oY29ubmVjdGlvbiwgY29udGV4dC5oaW50cyk7XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59O1xuXG5MYXlvdXRDb25uZWN0aW9uSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uO1xuXG4gIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gY29udGV4dC5vbGRXYXlwb2ludHM7XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59O1xuIiwiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJ21pbi1kYXNoJztcblxuXG5pbXBvcnQge1xuICBhZGQgYXMgY29sbGVjdGlvbkFkZCxcbiAgcmVtb3ZlIGFzIGNvbGxlY3Rpb25SZW1vdmVcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Db2xsZWN0aW9ucyc7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIHJldmVyc2libGUgbW92aW5nIG9mIGNvbm5lY3Rpb25zLlxuICpcbiAqIFRoZSBoYW5kbGVyIGRpZmZlcnMgZnJvbSB0aGUgbGF5b3V0IGNvbm5lY3Rpb24gaGFuZGxlciBpbiBhIHNlbnNlXG4gKiB0aGF0IGl0IHByZXNlcnZlcyB0aGUgY29ubmVjdGlvbiBsYXlvdXQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vdmVDb25uZWN0aW9uSGFuZGxlcigpIHsgfVxuXG5cbk1vdmVDb25uZWN0aW9uSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIGRlbHRhID0gY29udGV4dC5kZWx0YTtcblxuICB2YXIgbmV3UGFyZW50ID0gY29udGV4dC5uZXdQYXJlbnQgfHwgY29ubmVjdGlvbi5wYXJlbnQsXG4gICAgICBuZXdQYXJlbnRJbmRleCA9IGNvbnRleHQubmV3UGFyZW50SW5kZXgsXG4gICAgICBvbGRQYXJlbnQgPSBjb25uZWN0aW9uLnBhcmVudDtcblxuICAvLyBzYXZlIG9sZCBwYXJlbnQgaW4gY29udGV4dFxuICBjb250ZXh0Lm9sZFBhcmVudCA9IG9sZFBhcmVudDtcbiAgY29udGV4dC5vbGRQYXJlbnRJbmRleCA9IGNvbGxlY3Rpb25SZW1vdmUob2xkUGFyZW50LmNoaWxkcmVuLCBjb25uZWN0aW9uKTtcblxuICAvLyBhZGQgdG8gbmV3IHBhcmVudCBhdCBwb3NpdGlvblxuICBjb2xsZWN0aW9uQWRkKG5ld1BhcmVudC5jaGlsZHJlbiwgY29ubmVjdGlvbiwgbmV3UGFyZW50SW5kZXgpO1xuXG4gIC8vIHVwZGF0ZSBwYXJlbnRcbiAgY29ubmVjdGlvbi5wYXJlbnQgPSBuZXdQYXJlbnQ7XG5cbiAgLy8gdXBkYXRlIHdheXBvaW50IHBvc2l0aW9uc1xuICBmb3JFYWNoKGNvbm5lY3Rpb24ud2F5cG9pbnRzLCBmdW5jdGlvbihwKSB7XG4gICAgcC54ICs9IGRlbHRhLng7XG4gICAgcC55ICs9IGRlbHRhLnk7XG5cbiAgICBpZiAocC5vcmlnaW5hbCkge1xuICAgICAgcC5vcmlnaW5hbC54ICs9IGRlbHRhLng7XG4gICAgICBwLm9yaWdpbmFsLnkgKz0gZGVsdGEueTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufTtcblxuTW92ZUNvbm5lY3Rpb25IYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBuZXdQYXJlbnQgPSBjb25uZWN0aW9uLnBhcmVudCxcbiAgICAgIG9sZFBhcmVudCA9IGNvbnRleHQub2xkUGFyZW50LFxuICAgICAgb2xkUGFyZW50SW5kZXggPSBjb250ZXh0Lm9sZFBhcmVudEluZGV4LFxuICAgICAgZGVsdGEgPSBjb250ZXh0LmRlbHRhO1xuXG4gIC8vIHJlbW92ZSBmcm9tIG5ld1BhcmVudFxuICBjb2xsZWN0aW9uUmVtb3ZlKG5ld1BhcmVudC5jaGlsZHJlbiwgY29ubmVjdGlvbik7XG5cbiAgLy8gcmVzdG9yZSBwcmV2aW91cyBsb2NhdGlvbiBpbiBvbGQgcGFyZW50XG4gIGNvbGxlY3Rpb25BZGQob2xkUGFyZW50LmNoaWxkcmVuLCBjb25uZWN0aW9uLCBvbGRQYXJlbnRJbmRleCk7XG5cbiAgLy8gcmVzdG9yZSBwYXJlbnRcbiAgY29ubmVjdGlvbi5wYXJlbnQgPSBvbGRQYXJlbnQ7XG5cbiAgLy8gcmV2ZXJ0IHRvIG9sZCB3YXlwb2ludCBwb3NpdGlvbnNcbiAgZm9yRWFjaChjb25uZWN0aW9uLndheXBvaW50cywgZnVuY3Rpb24ocCkge1xuICAgIHAueCAtPSBkZWx0YS54O1xuICAgIHAueSAtPSBkZWx0YS55O1xuXG4gICAgaWYgKHAub3JpZ2luYWwpIHtcbiAgICAgIHAub3JpZ2luYWwueCAtPSBkZWx0YS54O1xuICAgICAgcC5vcmlnaW5hbC55IC09IGRlbHRhLnk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07IiwiaW1wb3J0IE1vdmVIZWxwZXIgZnJvbSAnLi9oZWxwZXIvTW92ZUhlbHBlcic7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIHJldmVyc2libGUgbW92aW5nIG9mIHNoYXBlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW92ZUVsZW1lbnRzSGFuZGxlcihtb2RlbGluZykge1xuICB0aGlzLl9oZWxwZXIgPSBuZXcgTW92ZUhlbHBlcihtb2RlbGluZyk7XG59XG5cbk1vdmVFbGVtZW50c0hhbmRsZXIuJGluamVjdCA9IFsgJ21vZGVsaW5nJyBdO1xuXG5Nb3ZlRWxlbWVudHNIYW5kbGVyLnByb3RvdHlwZS5wcmVFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICBjb250ZXh0LmNsb3N1cmUgPSB0aGlzLl9oZWxwZXIuZ2V0Q2xvc3VyZShjb250ZXh0LnNoYXBlcyk7XG59O1xuXG5Nb3ZlRWxlbWVudHNIYW5kbGVyLnByb3RvdHlwZS5wb3N0RXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgaGludHMgPSBjb250ZXh0LmhpbnRzLFxuICAgICAgcHJpbWFyeVNoYXBlO1xuXG4gIGlmIChoaW50cyAmJiBoaW50cy5wcmltYXJ5U2hhcGUpIHtcbiAgICBwcmltYXJ5U2hhcGUgPSBoaW50cy5wcmltYXJ5U2hhcGU7XG4gICAgaGludHMub2xkUGFyZW50ID0gcHJpbWFyeVNoYXBlLnBhcmVudDtcbiAgfVxuXG4gIHRoaXMuX2hlbHBlci5tb3ZlQ2xvc3VyZShcbiAgICBjb250ZXh0LmNsb3N1cmUsXG4gICAgY29udGV4dC5kZWx0YSxcbiAgICBjb250ZXh0Lm5ld1BhcmVudCxcbiAgICBjb250ZXh0Lm5ld0hvc3QsXG4gICAgcHJpbWFyeVNoYXBlXG4gICk7XG59OyIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZm9yRWFjaCxcbiAgcGlja1xufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBNb3ZlSGVscGVyIGZyb20gJy4vaGVscGVyL01vdmVIZWxwZXInO1xuXG5pbXBvcnQge1xuICBhZGQgYXMgY29sbGVjdGlvbkFkZCxcbiAgcmVtb3ZlIGFzIGNvbGxlY3Rpb25SZW1vdmVcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Db2xsZWN0aW9ucyc7XG5cbmltcG9ydCB7XG4gIGdldE1vdmVkU291cmNlQW5jaG9yLFxuICBnZXRNb3ZlZFRhcmdldEFuY2hvclxufSBmcm9tICcuL2hlbHBlci9BbmNob3JzSGVscGVyJztcblxuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgcmV2ZXJzaWJsZSBtb3Zpbmcgb2Ygc2hhcGVzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb3ZlU2hhcGVIYW5kbGVyKG1vZGVsaW5nKSB7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG5cbiAgdGhpcy5faGVscGVyID0gbmV3IE1vdmVIZWxwZXIobW9kZWxpbmcpO1xufVxuXG5Nb3ZlU2hhcGVIYW5kbGVyLiRpbmplY3QgPSBbICdtb2RlbGluZycgXTtcblxuXG5Nb3ZlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBkZWx0YSA9IGNvbnRleHQuZGVsdGEsXG4gICAgICBuZXdQYXJlbnQgPSBjb250ZXh0Lm5ld1BhcmVudCB8fCBzaGFwZS5wYXJlbnQsXG4gICAgICBuZXdQYXJlbnRJbmRleCA9IGNvbnRleHQubmV3UGFyZW50SW5kZXgsXG4gICAgICBvbGRQYXJlbnQgPSBzaGFwZS5wYXJlbnQ7XG5cbiAgY29udGV4dC5vbGRCb3VuZHMgPSBwaWNrKHNoYXBlLCBbICd4JywgJ3knLCAnd2lkdGgnLCAnaGVpZ2h0J10pO1xuXG4gIC8vIHNhdmUgb2xkIHBhcmVudCBpbiBjb250ZXh0XG4gIGNvbnRleHQub2xkUGFyZW50ID0gb2xkUGFyZW50O1xuICBjb250ZXh0Lm9sZFBhcmVudEluZGV4ID0gY29sbGVjdGlvblJlbW92ZShvbGRQYXJlbnQuY2hpbGRyZW4sIHNoYXBlKTtcblxuICAvLyBhZGQgdG8gbmV3IHBhcmVudCBhdCBwb3NpdGlvblxuICBjb2xsZWN0aW9uQWRkKG5ld1BhcmVudC5jaGlsZHJlbiwgc2hhcGUsIG5ld1BhcmVudEluZGV4KTtcblxuICAvLyB1cGRhdGUgc2hhcGUgcGFyZW50ICsgcG9zaXRpb25cbiAgYXNzaWduKHNoYXBlLCB7XG4gICAgcGFyZW50OiBuZXdQYXJlbnQsXG4gICAgeDogc2hhcGUueCArIGRlbHRhLngsXG4gICAgeTogc2hhcGUueSArIGRlbHRhLnlcbiAgfSk7XG5cbiAgcmV0dXJuIHNoYXBlO1xufTtcblxuTW92ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUucG9zdEV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIGRlbHRhID0gY29udGV4dC5kZWx0YSxcbiAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cztcblxuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcblxuICBpZiAoaGludHMubGF5b3V0ICE9PSBmYWxzZSkge1xuXG4gICAgZm9yRWFjaChzaGFwZS5pbmNvbWluZywgZnVuY3Rpb24oYykge1xuICAgICAgbW9kZWxpbmcubGF5b3V0Q29ubmVjdGlvbihjLCB7XG4gICAgICAgIGNvbm5lY3Rpb25FbmQ6IGdldE1vdmVkVGFyZ2V0QW5jaG9yKGMsIHNoYXBlLCBkZWx0YSlcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZm9yRWFjaChzaGFwZS5vdXRnb2luZywgZnVuY3Rpb24oYykge1xuICAgICAgbW9kZWxpbmcubGF5b3V0Q29ubmVjdGlvbihjLCB7XG4gICAgICAgIGNvbm5lY3Rpb25TdGFydDogZ2V0TW92ZWRTb3VyY2VBbmNob3IoYywgc2hhcGUsIGRlbHRhKVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaGludHMucmVjdXJzZSAhPT0gZmFsc2UpIHtcbiAgICB0aGlzLm1vdmVDaGlsZHJlbihjb250ZXh0KTtcbiAgfVxufTtcblxuTW92ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBvbGRQYXJlbnQgPSBjb250ZXh0Lm9sZFBhcmVudCxcbiAgICAgIG9sZFBhcmVudEluZGV4ID0gY29udGV4dC5vbGRQYXJlbnRJbmRleCxcbiAgICAgIGRlbHRhID0gY29udGV4dC5kZWx0YTtcblxuICAvLyByZXN0b3JlIHByZXZpb3VzIGxvY2F0aW9uIGluIG9sZCBwYXJlbnRcbiAgY29sbGVjdGlvbkFkZChvbGRQYXJlbnQuY2hpbGRyZW4sIHNoYXBlLCBvbGRQYXJlbnRJbmRleCk7XG5cbiAgLy8gcmV2ZXJ0IHRvIG9sZCBwb3NpdGlvbiBhbmQgcGFyZW50XG4gIGFzc2lnbihzaGFwZSwge1xuICAgIHBhcmVudDogb2xkUGFyZW50LFxuICAgIHg6IHNoYXBlLnggLSBkZWx0YS54LFxuICAgIHk6IHNoYXBlLnkgLSBkZWx0YS55XG4gIH0pO1xuXG4gIHJldHVybiBzaGFwZTtcbn07XG5cbk1vdmVTaGFwZUhhbmRsZXIucHJvdG90eXBlLm1vdmVDaGlsZHJlbiA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgZGVsdGEgPSBjb250ZXh0LmRlbHRhLFxuICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gIHRoaXMuX2hlbHBlci5tb3ZlUmVjdXJzaXZlKHNoYXBlLmNoaWxkcmVuLCBkZWx0YSwgbnVsbCk7XG59O1xuXG5Nb3ZlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5nZXROZXdQYXJlbnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBjb250ZXh0Lm5ld1BhcmVudCB8fCBjb250ZXh0LnNoYXBlLnBhcmVudDtcbn07XG4iLCJpbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbi8qKlxuICogUmVjb25uZWN0IGNvbm5lY3Rpb24gaGFuZGxlclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZWNvbm5lY3RDb25uZWN0aW9uSGFuZGxlcihtb2RlbGluZykge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5SZWNvbm5lY3RDb25uZWN0aW9uSGFuZGxlci4kaW5qZWN0ID0gWyAnbW9kZWxpbmcnIF07XG5cblJlY29ubmVjdENvbm5lY3Rpb25IYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgbmV3U291cmNlID0gY29udGV4dC5uZXdTb3VyY2UsXG4gICAgICBuZXdUYXJnZXQgPSBjb250ZXh0Lm5ld1RhcmdldCxcbiAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBkb2NraW5nT3JQb2ludHMgPSBjb250ZXh0LmRvY2tpbmdPclBvaW50cztcblxuICBpZiAoIW5ld1NvdXJjZSAmJiAhbmV3VGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCduZXdTb3VyY2Ugb3IgbmV3VGFyZ2V0IHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAoaXNBcnJheShkb2NraW5nT3JQb2ludHMpKSB7XG4gICAgY29udGV4dC5vbGRXYXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cztcbiAgICBjb25uZWN0aW9uLndheXBvaW50cyA9IGRvY2tpbmdPclBvaW50cztcbiAgfVxuXG4gIGlmIChuZXdTb3VyY2UpIHtcbiAgICBjb250ZXh0Lm9sZFNvdXJjZSA9IGNvbm5lY3Rpb24uc291cmNlO1xuICAgIGNvbm5lY3Rpb24uc291cmNlID0gbmV3U291cmNlO1xuICB9XG5cbiAgaWYgKG5ld1RhcmdldCkge1xuICAgIGNvbnRleHQub2xkVGFyZ2V0ID0gY29ubmVjdGlvbi50YXJnZXQ7XG4gICAgY29ubmVjdGlvbi50YXJnZXQgPSBuZXdUYXJnZXQ7XG4gIH1cblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07XG5cblJlY29ubmVjdENvbm5lY3Rpb25IYW5kbGVyLnByb3RvdHlwZS5wb3N0RXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBuZXdTb3VyY2UgPSBjb250ZXh0Lm5ld1NvdXJjZSxcbiAgICAgIG5ld1RhcmdldCA9IGNvbnRleHQubmV3VGFyZ2V0LFxuICAgICAgZG9ja2luZ09yUG9pbnRzID0gY29udGV4dC5kb2NraW5nT3JQb2ludHMsXG4gICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge307XG5cbiAgdmFyIGxheW91dENvbm5lY3Rpb25IaW50cyA9IHt9O1xuXG4gIGlmIChoaW50cy5jb25uZWN0aW9uU3RhcnQpIHtcbiAgICBsYXlvdXRDb25uZWN0aW9uSGludHMuY29ubmVjdGlvblN0YXJ0ID0gaGludHMuY29ubmVjdGlvblN0YXJ0O1xuICB9XG5cbiAgaWYgKGhpbnRzLmNvbm5lY3Rpb25FbmQpIHtcbiAgICBsYXlvdXRDb25uZWN0aW9uSGludHMuY29ubmVjdGlvbkVuZCA9IGhpbnRzLmNvbm5lY3Rpb25FbmQ7XG4gIH1cblxuICBpZiAoaGludHMubGF5b3V0Q29ubmVjdGlvbiA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobmV3U291cmNlICYmICghbmV3VGFyZ2V0IHx8IGhpbnRzLmRvY2tpbmcgPT09ICdzb3VyY2UnKSkge1xuICAgIGxheW91dENvbm5lY3Rpb25IaW50cy5jb25uZWN0aW9uU3RhcnQgPSBsYXlvdXRDb25uZWN0aW9uSGludHMuY29ubmVjdGlvblN0YXJ0XG4gICAgICB8fCBnZXREb2NraW5nKGlzQXJyYXkoZG9ja2luZ09yUG9pbnRzKSA/IGRvY2tpbmdPclBvaW50c1sgMCBdIDogZG9ja2luZ09yUG9pbnRzKTtcbiAgfVxuXG4gIGlmIChuZXdUYXJnZXQgJiYgKCFuZXdTb3VyY2UgfHwgaGludHMuZG9ja2luZyA9PT0gJ3RhcmdldCcpKSB7XG4gICAgbGF5b3V0Q29ubmVjdGlvbkhpbnRzLmNvbm5lY3Rpb25FbmQgPSBsYXlvdXRDb25uZWN0aW9uSGludHMuY29ubmVjdGlvbkVuZFxuICAgICAgfHwgZ2V0RG9ja2luZyhpc0FycmF5KGRvY2tpbmdPclBvaW50cykgPyBkb2NraW5nT3JQb2ludHNbIGRvY2tpbmdPclBvaW50cy5sZW5ndGggLSAxIF0gOiBkb2NraW5nT3JQb2ludHMpO1xuICB9XG5cbiAgaWYgKGhpbnRzLm5ld1dheXBvaW50cykge1xuICAgIGxheW91dENvbm5lY3Rpb25IaW50cy53YXlwb2ludHMgPSBoaW50cy5uZXdXYXlwb2ludHM7XG4gIH1cblxuICB0aGlzLl9tb2RlbGluZy5sYXlvdXRDb25uZWN0aW9uKGNvbm5lY3Rpb24sIGxheW91dENvbm5lY3Rpb25IaW50cyk7XG59O1xuXG5SZWNvbm5lY3RDb25uZWN0aW9uSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgb2xkU291cmNlID0gY29udGV4dC5vbGRTb3VyY2UsXG4gICAgICBvbGRUYXJnZXQgPSBjb250ZXh0Lm9sZFRhcmdldCxcbiAgICAgIG9sZFdheXBvaW50cyA9IGNvbnRleHQub2xkV2F5cG9pbnRzLFxuICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbjtcblxuICBpZiAob2xkU291cmNlKSB7XG4gICAgY29ubmVjdGlvbi5zb3VyY2UgPSBvbGRTb3VyY2U7XG4gIH1cblxuICBpZiAob2xkVGFyZ2V0KSB7XG4gICAgY29ubmVjdGlvbi50YXJnZXQgPSBvbGRUYXJnZXQ7XG4gIH1cblxuICBpZiAob2xkV2F5cG9pbnRzKSB7XG4gICAgY29ubmVjdGlvbi53YXlwb2ludHMgPSBvbGRXYXlwb2ludHM7XG4gIH1cblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07XG5cblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0RG9ja2luZyhwb2ludCkge1xuICByZXR1cm4gcG9pbnQub3JpZ2luYWwgfHwgcG9pbnQ7XG59IiwiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0UmVzaXplZFNvdXJjZUFuY2hvcixcbiAgZ2V0UmVzaXplZFRhcmdldEFuY2hvclxufSBmcm9tICcuL2hlbHBlci9BbmNob3JzSGVscGVyJztcblxuLyoqXG4gKiBSZXBsYWNlIHNoYXBlIGJ5IGFkZGluZyBuZXcgc2hhcGUgYW5kIHJlbW92aW5nIG9sZCBzaGFwZS4gSW5jb21pbmcgYW5kIG91dGdvaW5nIGNvbm5lY3Rpb25zIHdpbGxcbiAqIGJlIGtlcHQgaWYgcG9zc2libGUuXG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICogQHBhcmFtIHtSdWxlc30gcnVsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVwbGFjZVNoYXBlSGFuZGxlcihtb2RlbGluZywgcnVsZXMpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbiAgdGhpcy5fcnVsZXMgPSBydWxlcztcbn1cblxuUmVwbGFjZVNoYXBlSGFuZGxlci4kaW5qZWN0ID0gWyAnbW9kZWxpbmcnLCAncnVsZXMnIF07XG5cblxuLyoqXG4gKiBBZGQgbmV3IHNoYXBlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gY29udGV4dC5vbGRTaGFwZVxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQubmV3RGF0YVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRleHQubmV3RGF0YS50eXBlXG4gKiBAcGFyYW0ge251bWJlcn0gY29udGV4dC5uZXdEYXRhLnhcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb250ZXh0Lm5ld0RhdGEueVxuICogQHBhcmFtIHtPYmplY3R9IFtoaW50c11cbiAqL1xuUmVwbGFjZVNoYXBlSGFuZGxlci5wcm90b3R5cGUucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZyxcbiAgICAgIHJ1bGVzID0gdGhpcy5fcnVsZXM7XG5cbiAgdmFyIG9sZFNoYXBlID0gY29udGV4dC5vbGRTaGFwZSxcbiAgICAgIG5ld0RhdGEgPSBjb250ZXh0Lm5ld0RhdGEsXG4gICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge30sXG4gICAgICBuZXdTaGFwZTtcblxuICBmdW5jdGlvbiBjYW5SZWNvbm5lY3Qoc291cmNlLCB0YXJnZXQsIGNvbm5lY3Rpb24pIHtcbiAgICByZXR1cm4gcnVsZXMuYWxsb3dlZCgnY29ubmVjdGlvbi5yZWNvbm5lY3QnLCB7XG4gICAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICB0YXJnZXQ6IHRhcmdldFxuICAgIH0pO1xuICB9XG5cbiAgLy8gKDEpIGFkZCBuZXcgc2hhcGUgYXQgZ2l2ZW4gcG9zaXRpb25cbiAgdmFyIHBvc2l0aW9uID0ge1xuICAgIHg6IG5ld0RhdGEueCxcbiAgICB5OiBuZXdEYXRhLnlcbiAgfTtcblxuICB2YXIgb2xkQm91bmRzID0ge1xuICAgIHg6IG9sZFNoYXBlLngsXG4gICAgeTogb2xkU2hhcGUueSxcbiAgICB3aWR0aDogb2xkU2hhcGUud2lkdGgsXG4gICAgaGVpZ2h0OiBvbGRTaGFwZS5oZWlnaHRcbiAgfTtcblxuICBuZXdTaGFwZSA9IGNvbnRleHQubmV3U2hhcGUgPVxuICAgIGNvbnRleHQubmV3U2hhcGUgfHxcbiAgICBzZWxmLmNyZWF0ZVNoYXBlKG5ld0RhdGEsIHBvc2l0aW9uLCBvbGRTaGFwZS5wYXJlbnQsIGhpbnRzKTtcblxuICAvLyAoMikgdXBkYXRlIGhvc3RcbiAgaWYgKG9sZFNoYXBlLmhvc3QpIHtcbiAgICBtb2RlbGluZy51cGRhdGVBdHRhY2htZW50KG5ld1NoYXBlLCBvbGRTaGFwZS5ob3N0KTtcbiAgfVxuXG4gIC8vICgzKSBhZG9wdCBhbGwgY2hpbGRyZW4gZnJvbSBvbGQgc2hhcGVcbiAgdmFyIGNoaWxkcmVuO1xuXG4gIGlmIChoaW50cy5tb3ZlQ2hpbGRyZW4gIT09IGZhbHNlKSB7XG4gICAgY2hpbGRyZW4gPSBvbGRTaGFwZS5jaGlsZHJlbi5zbGljZSgpO1xuXG4gICAgbW9kZWxpbmcubW92ZUVsZW1lbnRzKGNoaWxkcmVuLCB7IHg6IDAsIHk6IDAgfSwgbmV3U2hhcGUsIGhpbnRzKTtcbiAgfVxuXG4gIC8vICg0KSByZWNvbm5lY3QgY29ubmVjdGlvbnMgdG8gbmV3IHNoYXBlIGlmIHBvc3NpYmxlXG4gIHZhciBpbmNvbWluZyA9IG9sZFNoYXBlLmluY29taW5nLnNsaWNlKCksXG4gICAgICBvdXRnb2luZyA9IG9sZFNoYXBlLm91dGdvaW5nLnNsaWNlKCk7XG5cbiAgZm9yRWFjaChpbmNvbWluZywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgIHZhciBzb3VyY2UgPSBjb25uZWN0aW9uLnNvdXJjZSxcbiAgICAgICAgYWxsb3dlZCA9IGNhblJlY29ubmVjdChzb3VyY2UsIG5ld1NoYXBlLCBjb25uZWN0aW9uKTtcblxuICAgIGlmIChhbGxvd2VkKSB7XG4gICAgICBzZWxmLnJlY29ubmVjdEVuZChcbiAgICAgICAgY29ubmVjdGlvbiwgbmV3U2hhcGUsXG4gICAgICAgIGdldFJlc2l6ZWRUYXJnZXRBbmNob3IoY29ubmVjdGlvbiwgbmV3U2hhcGUsIG9sZEJvdW5kcyksXG4gICAgICAgIGhpbnRzXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgZm9yRWFjaChvdXRnb2luZywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgIHZhciB0YXJnZXQgPSBjb25uZWN0aW9uLnRhcmdldCxcbiAgICAgICAgYWxsb3dlZCA9IGNhblJlY29ubmVjdChuZXdTaGFwZSwgdGFyZ2V0LCBjb25uZWN0aW9uKTtcblxuICAgIGlmIChhbGxvd2VkKSB7XG4gICAgICBzZWxmLnJlY29ubmVjdFN0YXJ0KFxuICAgICAgICBjb25uZWN0aW9uLCBuZXdTaGFwZSxcbiAgICAgICAgZ2V0UmVzaXplZFNvdXJjZUFuY2hvcihjb25uZWN0aW9uLCBuZXdTaGFwZSwgb2xkQm91bmRzKSxcbiAgICAgICAgaGludHNcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn07XG5cblxuLyoqXG4gKiBSZW1vdmUgb2xkIHNoYXBlLlxuICovXG5SZXBsYWNlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5wb3N0RXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIG9sZFNoYXBlID0gY29udGV4dC5vbGRTaGFwZTtcblxuICB0aGlzLl9tb2RlbGluZy5yZW1vdmVTaGFwZShvbGRTaGFwZSk7XG59O1xuXG5cblJlcGxhY2VTaGFwZUhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7fTtcblxuXG5SZXBsYWNlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7fTtcblxuXG5SZXBsYWNlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5jcmVhdGVTaGFwZSA9IGZ1bmN0aW9uKHNoYXBlLCBwb3NpdGlvbiwgdGFyZ2V0LCBoaW50cykge1xuICByZXR1cm4gdGhpcy5fbW9kZWxpbmcuY3JlYXRlU2hhcGUoc2hhcGUsIHBvc2l0aW9uLCB0YXJnZXQsIGhpbnRzKTtcbn07XG5cblxuUmVwbGFjZVNoYXBlSGFuZGxlci5wcm90b3R5cGUucmVjb25uZWN0U3RhcnQgPSBmdW5jdGlvbihjb25uZWN0aW9uLCBuZXdTb3VyY2UsIGRvY2tpbmdQb2ludCwgaGludHMpIHtcbiAgdGhpcy5fbW9kZWxpbmcucmVjb25uZWN0U3RhcnQoY29ubmVjdGlvbiwgbmV3U291cmNlLCBkb2NraW5nUG9pbnQsIGhpbnRzKTtcbn07XG5cblxuUmVwbGFjZVNoYXBlSGFuZGxlci5wcm90b3R5cGUucmVjb25uZWN0RW5kID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgbmV3VGFyZ2V0LCBkb2NraW5nUG9pbnQsIGhpbnRzKSB7XG4gIHRoaXMuX21vZGVsaW5nLnJlY29ubmVjdEVuZChjb25uZWN0aW9uLCBuZXdUYXJnZXQsIGRvY2tpbmdQb2ludCwgaGludHMpO1xufTtcbiIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGdldFJlc2l6ZWRTb3VyY2VBbmNob3IsXG4gIGdldFJlc2l6ZWRUYXJnZXRBbmNob3Jcbn0gZnJvbSAnLi9oZWxwZXIvQW5jaG9yc0hlbHBlcic7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIHJldmVyc2libGUgcmVzaXppbmcgb2Ygc2hhcGVzLlxuICpcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlc2l6ZVNoYXBlSGFuZGxlcihtb2RlbGluZykge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5SZXNpemVTaGFwZUhhbmRsZXIuJGluamVjdCA9IFsgJ21vZGVsaW5nJyBdO1xuXG4vKipcbiAqIHtcbiAqICAgc2hhcGU6IHsuLi4ufVxuICogICBuZXdCb3VuZHM6IHtcbiAqICAgICB3aWR0aDogIDIwLFxuICogICAgIGhlaWdodDogNDAsXG4gKiAgICAgeDogICAgICAgNSxcbiAqICAgICB5OiAgICAgIDEwXG4gKiAgIH1cbiAqXG4gKiB9XG4gKi9cblJlc2l6ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIG5ld0JvdW5kcyA9IGNvbnRleHQubmV3Qm91bmRzLFxuICAgICAgbWluQm91bmRzID0gY29udGV4dC5taW5Cb3VuZHM7XG5cbiAgaWYgKG5ld0JvdW5kcy54ID09PSB1bmRlZmluZWQgfHwgbmV3Qm91bmRzLnkgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgbmV3Qm91bmRzLndpZHRoID09PSB1bmRlZmluZWQgfHwgbmV3Qm91bmRzLmhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCduZXdCb3VuZHMgbXVzdCBoYXZlIHt4LCB5LCB3aWR0aCwgaGVpZ2h0fSBwcm9wZXJ0aWVzJyk7XG4gIH1cblxuICBpZiAobWluQm91bmRzICYmIChuZXdCb3VuZHMud2lkdGggPCBtaW5Cb3VuZHMud2lkdGhcbiAgICB8fCBuZXdCb3VuZHMuaGVpZ2h0IDwgbWluQm91bmRzLmhlaWdodCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3dpZHRoIGFuZCBoZWlnaHQgY2Fubm90IGJlIGxlc3MgdGhhbiBtaW5pbXVtIGhlaWdodCBhbmQgd2lkdGgnKTtcbiAgfSBlbHNlIGlmICghbWluQm91bmRzXG4gICAgJiYgbmV3Qm91bmRzLndpZHRoIDwgMTAgfHwgbmV3Qm91bmRzLmhlaWdodCA8IDEwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd3aWR0aCBhbmQgaGVpZ2h0IGNhbm5vdCBiZSBsZXNzIHRoYW4gMTBweCcpO1xuICB9XG5cbiAgLy8gc2F2ZSBvbGQgYmJveCBpbiBjb250ZXh0XG4gIGNvbnRleHQub2xkQm91bmRzID0ge1xuICAgIHdpZHRoOiAgc2hhcGUud2lkdGgsXG4gICAgaGVpZ2h0OiBzaGFwZS5oZWlnaHQsXG4gICAgeDogICAgICBzaGFwZS54LFxuICAgIHk6ICAgICAgc2hhcGUueVxuICB9O1xuXG4gIC8vIHVwZGF0ZSBzaGFwZVxuICBhc3NpZ24oc2hhcGUsIHtcbiAgICB3aWR0aDogIG5ld0JvdW5kcy53aWR0aCxcbiAgICBoZWlnaHQ6IG5ld0JvdW5kcy5oZWlnaHQsXG4gICAgeDogICAgICBuZXdCb3VuZHMueCxcbiAgICB5OiAgICAgIG5ld0JvdW5kcy55XG4gIH0pO1xuXG4gIHJldHVybiBzaGFwZTtcbn07XG5cblJlc2l6ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUucG9zdEV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nO1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBvbGRCb3VuZHMgPSBjb250ZXh0Lm9sZEJvdW5kcyxcbiAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICBpZiAoaGludHMubGF5b3V0ID09PSBmYWxzZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvckVhY2goc2hhcGUuaW5jb21pbmcsIGZ1bmN0aW9uKGMpIHtcbiAgICBtb2RlbGluZy5sYXlvdXRDb25uZWN0aW9uKGMsIHtcbiAgICAgIGNvbm5lY3Rpb25FbmQ6IGdldFJlc2l6ZWRUYXJnZXRBbmNob3IoYywgc2hhcGUsIG9sZEJvdW5kcylcbiAgICB9KTtcbiAgfSk7XG5cbiAgZm9yRWFjaChzaGFwZS5vdXRnb2luZywgZnVuY3Rpb24oYykge1xuICAgIG1vZGVsaW5nLmxheW91dENvbm5lY3Rpb24oYywge1xuICAgICAgY29ubmVjdGlvblN0YXJ0OiBnZXRSZXNpemVkU291cmNlQW5jaG9yKGMsIHNoYXBlLCBvbGRCb3VuZHMpXG4gICAgfSk7XG4gIH0pO1xuXG59O1xuXG5SZXNpemVTaGFwZUhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgb2xkQm91bmRzID0gY29udGV4dC5vbGRCb3VuZHM7XG5cbiAgLy8gcmVzdG9yZSBwcmV2aW91cyBiYm94XG4gIGFzc2lnbihzaGFwZSwge1xuICAgIHdpZHRoOiAgb2xkQm91bmRzLndpZHRoLFxuICAgIGhlaWdodDogb2xkQm91bmRzLmhlaWdodCxcbiAgICB4OiAgICAgIG9sZEJvdW5kcy54LFxuICAgIHk6ICAgICAgb2xkQm91bmRzLnlcbiAgfSk7XG5cbiAgcmV0dXJuIHNoYXBlO1xufTtcbiIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZm9yRWFjaCxcbiAgbWFwXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0V2F5cG9pbnRzVXBkYXRpbmdDb25uZWN0aW9ucyxcbiAgcmVzaXplQm91bmRzXG59IGZyb20gJy4uLy4uL3NwYWNlLXRvb2wvU3BhY2VVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0TW92ZWRTb3VyY2VBbmNob3IsXG4gIGdldE1vdmVkVGFyZ2V0QW5jaG9yLFxuICBnZXRSZXNpemVkU291cmNlQW5jaG9yLFxuICBnZXRSZXNpemVkVGFyZ2V0QW5jaG9yXG59IGZyb20gJy4vaGVscGVyL0FuY2hvcnNIZWxwZXInO1xuXG5cbi8qKlxuICogQWRkIG9yIHJlbW92ZSBzcGFjZSBieSBtb3ZpbmcgYW5kIHJlc2l6aW5nIHNoYXBlcyBhbmQgdXBkYXRpbmcgY29ubmVjdGlvbiB3YXlwb2ludHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNwYWNlVG9vbEhhbmRsZXIobW9kZWxpbmcpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbn1cblxuU3BhY2VUb29sSGFuZGxlci4kaW5qZWN0ID0gWyAnbW9kZWxpbmcnIF07XG5cblNwYWNlVG9vbEhhbmRsZXIucHJvdG90eXBlLnByZUV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBkZWx0YSA9IGNvbnRleHQuZGVsdGEsXG4gICAgICBkaXJlY3Rpb24gPSBjb250ZXh0LmRpcmVjdGlvbixcbiAgICAgIG1vdmluZ1NoYXBlcyA9IGNvbnRleHQubW92aW5nU2hhcGVzLFxuICAgICAgcmVzaXppbmdTaGFwZXMgPSBjb250ZXh0LnJlc2l6aW5nU2hhcGVzLFxuICAgICAgc3RhcnQgPSBjb250ZXh0LnN0YXJ0LFxuICAgICAgb2xkQm91bmRzID0ge307XG5cbiAgLy8gKDEpIG1vdmUgc2hhcGVzXG4gIHRoaXMubW92ZVNoYXBlcyhtb3ZpbmdTaGFwZXMsIGRlbHRhKTtcblxuICAvLyAoMmEpIHNhdmUgb2xkIGJvdW5kcyBvZiByZXNpemVkIHNoYXBlc1xuICBmb3JFYWNoKHJlc2l6aW5nU2hhcGVzLCBmdW5jdGlvbihzaGFwZSkge1xuICAgIG9sZEJvdW5kc1tzaGFwZS5pZF0gPSBnZXRCb3VuZHMoc2hhcGUpO1xuICB9KTtcblxuICAvLyAoMmIpIHJlc2l6ZSBzaGFwZXNcbiAgdGhpcy5yZXNpemVTaGFwZXMocmVzaXppbmdTaGFwZXMsIGRlbHRhLCBkaXJlY3Rpb24pO1xuXG4gIC8vICgzKSB1cGRhdGUgY29ubmVjdGlvbiB3YXlwb2ludHNcbiAgdGhpcy51cGRhdGVDb25uZWN0aW9uV2F5cG9pbnRzKFxuICAgIGdldFdheXBvaW50c1VwZGF0aW5nQ29ubmVjdGlvbnMobW92aW5nU2hhcGVzLCByZXNpemluZ1NoYXBlcyksXG4gICAgZGVsdGEsXG4gICAgZGlyZWN0aW9uLFxuICAgIHN0YXJ0LFxuICAgIG1vdmluZ1NoYXBlcyxcbiAgICByZXNpemluZ1NoYXBlcyxcbiAgICBvbGRCb3VuZHNcbiAgKTtcbn07XG5cblNwYWNlVG9vbEhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbigpIHt9O1xuU3BhY2VUb29sSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oKSB7fTtcblxuU3BhY2VUb29sSGFuZGxlci5wcm90b3R5cGUubW92ZVNoYXBlcyA9IGZ1bmN0aW9uKHNoYXBlcywgZGVsdGEpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGZvckVhY2goc2hhcGVzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgc2VsZi5fbW9kZWxpbmcubW92ZVNoYXBlKGVsZW1lbnQsIGRlbHRhLCBudWxsLCB7XG4gICAgICBhdXRvUmVzaXplOiBmYWxzZSxcbiAgICAgIGxheW91dDogZmFsc2UsXG4gICAgICByZWN1cnNlOiBmYWxzZVxuICAgIH0pO1xuICB9KTtcbn07XG5cblNwYWNlVG9vbEhhbmRsZXIucHJvdG90eXBlLnJlc2l6ZVNoYXBlcyA9IGZ1bmN0aW9uKHNoYXBlcywgZGVsdGEsIGRpcmVjdGlvbikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZm9yRWFjaChzaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgdmFyIG5ld0JvdW5kcyA9IHJlc2l6ZUJvdW5kcyhzaGFwZSwgZGlyZWN0aW9uLCBkZWx0YSk7XG5cbiAgICBzZWxmLl9tb2RlbGluZy5yZXNpemVTaGFwZShzaGFwZSwgbmV3Qm91bmRzLCBudWxsLCB7XG4gICAgICBhdHRhY2hTdXBwb3J0OiBmYWxzZSxcbiAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgbGF5b3V0OiBmYWxzZVxuICAgIH0pO1xuICB9KTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGNvbm5lY3Rpb25zIHdheXBvaW50cyBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzOlxuICogICAxLiBCb3RoIHNvdXJjZSBhbmQgdGFyZ2V0IGFyZSBtb3ZlZC9yZXNpemVkID0+IG1vdmUgd2F5cG9pbnRzIGJ5IHRoZSBkZWx0YVxuICogICAyLiBPbmx5IG9uZSBvZiBzb3VyY2UgYW5kIHRhcmdldCBpcyBtb3ZlZC9yZXNpemVkID0+IHJlLWxheW91dCBjb25uZWN0aW9uIHdpdGggbW92ZWQgc3RhcnQvZW5kXG4gKi9cblNwYWNlVG9vbEhhbmRsZXIucHJvdG90eXBlLnVwZGF0ZUNvbm5lY3Rpb25XYXlwb2ludHMgPSBmdW5jdGlvbihcbiAgICBjb25uZWN0aW9ucyxcbiAgICBkZWx0YSxcbiAgICBkaXJlY3Rpb24sXG4gICAgc3RhcnQsXG4gICAgbW92aW5nU2hhcGVzLFxuICAgIHJlc2l6aW5nU2hhcGVzLFxuICAgIG9sZEJvdW5kc1xuKSB7XG4gIHZhciBzZWxmID0gdGhpcyxcbiAgICAgIGFmZmVjdGVkU2hhcGVzID0gbW92aW5nU2hhcGVzLmNvbmNhdChyZXNpemluZ1NoYXBlcyk7XG5cbiAgZm9yRWFjaChjb25uZWN0aW9ucywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgIHZhciBzb3VyY2UgPSBjb25uZWN0aW9uLnNvdXJjZSxcbiAgICAgICAgdGFyZ2V0ID0gY29ubmVjdGlvbi50YXJnZXQsXG4gICAgICAgIHdheXBvaW50cyA9IGNvcHlXYXlwb2ludHMoY29ubmVjdGlvbiksXG4gICAgICAgIGF4aXMgPSBnZXRBeGlzRnJvbURpcmVjdGlvbihkaXJlY3Rpb24pLFxuICAgICAgICBsYXlvdXRIaW50cyA9IHtcbiAgICAgICAgICBsYWJlbEJlaGF2aW9yOiBmYWxzZVxuICAgICAgICB9O1xuXG4gICAgaWYgKGluY2x1ZGVzKGFmZmVjdGVkU2hhcGVzLCBzb3VyY2UpICYmIGluY2x1ZGVzKGFmZmVjdGVkU2hhcGVzLCB0YXJnZXQpKSB7XG5cbiAgICAgIC8vIG1vdmUgd2F5cG9pbnRzXG4gICAgICB3YXlwb2ludHMgPSBtYXAod2F5cG9pbnRzLCBmdW5jdGlvbih3YXlwb2ludCkge1xuICAgICAgICBpZiAoc2hvdWxkTW92ZVdheXBvaW50KHdheXBvaW50LCBzdGFydCwgZGlyZWN0aW9uKSkge1xuXG4gICAgICAgICAgLy8gbW92ZSB3YXlwb2ludFxuICAgICAgICAgIHdheXBvaW50WyBheGlzIF0gPSB3YXlwb2ludFsgYXhpcyBdICsgZGVsdGFbIGF4aXMgXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3YXlwb2ludC5vcmlnaW5hbCAmJiBzaG91bGRNb3ZlV2F5cG9pbnQod2F5cG9pbnQub3JpZ2luYWwsIHN0YXJ0LCBkaXJlY3Rpb24pKSB7XG5cbiAgICAgICAgICAvLyBtb3ZlIHdheXBvaW50IG9yaWdpbmFsXG4gICAgICAgICAgd2F5cG9pbnQub3JpZ2luYWxbIGF4aXMgXSA9IHdheXBvaW50Lm9yaWdpbmFsWyBheGlzIF0gKyBkZWx0YVsgYXhpcyBdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdheXBvaW50O1xuICAgICAgfSk7XG5cbiAgICAgIHNlbGYuX21vZGVsaW5nLnVwZGF0ZVdheXBvaW50cyhjb25uZWN0aW9uLCB3YXlwb2ludHMsIHtcbiAgICAgICAgbGFiZWxCZWhhdmlvcjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaW5jbHVkZXMoYWZmZWN0ZWRTaGFwZXMsIHNvdXJjZSkgfHwgaW5jbHVkZXMoYWZmZWN0ZWRTaGFwZXMsIHRhcmdldCkpIHtcblxuICAgICAgLy8gcmUtbGF5b3V0IGNvbm5lY3Rpb24gd2l0aCBtb3ZlZCBzdGFydC9lbmRcbiAgICAgIGlmIChpbmNsdWRlcyhtb3ZpbmdTaGFwZXMsIHNvdXJjZSkpIHtcbiAgICAgICAgbGF5b3V0SGludHMuY29ubmVjdGlvblN0YXJ0ID0gZ2V0TW92ZWRTb3VyY2VBbmNob3IoY29ubmVjdGlvbiwgc291cmNlLCBkZWx0YSk7XG4gICAgICB9IGVsc2UgaWYgKGluY2x1ZGVzKG1vdmluZ1NoYXBlcywgdGFyZ2V0KSkge1xuICAgICAgICBsYXlvdXRIaW50cy5jb25uZWN0aW9uRW5kID0gZ2V0TW92ZWRUYXJnZXRBbmNob3IoY29ubmVjdGlvbiwgdGFyZ2V0LCBkZWx0YSk7XG4gICAgICB9IGVsc2UgaWYgKGluY2x1ZGVzKHJlc2l6aW5nU2hhcGVzLCBzb3VyY2UpKSB7XG4gICAgICAgIGxheW91dEhpbnRzLmNvbm5lY3Rpb25TdGFydCA9IGdldFJlc2l6ZWRTb3VyY2VBbmNob3IoXG4gICAgICAgICAgY29ubmVjdGlvbiwgc291cmNlLCBvbGRCb3VuZHNbc291cmNlLmlkXVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChpbmNsdWRlcyhyZXNpemluZ1NoYXBlcywgdGFyZ2V0KSkge1xuICAgICAgICBsYXlvdXRIaW50cy5jb25uZWN0aW9uRW5kID0gZ2V0UmVzaXplZFRhcmdldEFuY2hvcihcbiAgICAgICAgICBjb25uZWN0aW9uLCB0YXJnZXQsIG9sZEJvdW5kc1t0YXJnZXQuaWRdXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHNlbGYuX21vZGVsaW5nLmxheW91dENvbm5lY3Rpb24oY29ubmVjdGlvbiwgbGF5b3V0SGludHMpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBjb3B5V2F5cG9pbnQod2F5cG9pbnQpIHtcbiAgcmV0dXJuIGFzc2lnbih7fSwgd2F5cG9pbnQpO1xufVxuXG5mdW5jdGlvbiBjb3B5V2F5cG9pbnRzKGNvbm5lY3Rpb24pIHtcbiAgcmV0dXJuIG1hcChjb25uZWN0aW9uLndheXBvaW50cywgZnVuY3Rpb24od2F5cG9pbnQpIHtcblxuICAgIHdheXBvaW50ID0gY29weVdheXBvaW50KHdheXBvaW50KTtcblxuICAgIGlmICh3YXlwb2ludC5vcmlnaW5hbCkge1xuICAgICAgd2F5cG9pbnQub3JpZ2luYWwgPSBjb3B5V2F5cG9pbnQod2F5cG9pbnQub3JpZ2luYWwpO1xuICAgIH1cblxuICAgIHJldHVybiB3YXlwb2ludDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEF4aXNGcm9tRGlyZWN0aW9uKGRpcmVjdGlvbikge1xuICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICBjYXNlICduJzpcbiAgICByZXR1cm4gJ3knO1xuICBjYXNlICd3JzpcbiAgICByZXR1cm4gJ3gnO1xuICBjYXNlICdzJzpcbiAgICByZXR1cm4gJ3knO1xuICBjYXNlICdlJzpcbiAgICByZXR1cm4gJ3gnO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZE1vdmVXYXlwb2ludCh3YXlwb2ludCwgc3RhcnQsIGRpcmVjdGlvbikge1xuICB2YXIgcmVsZXZhbnRBeGlzID0gZ2V0QXhpc0Zyb21EaXJlY3Rpb24oZGlyZWN0aW9uKTtcblxuICBpZiAoL2V8cy8udGVzdChkaXJlY3Rpb24pKSB7XG4gICAgcmV0dXJuIHdheXBvaW50WyByZWxldmFudEF4aXMgXSA+IHN0YXJ0O1xuICB9IGVsc2UgaWYgKC9ufHcvLnRlc3QoZGlyZWN0aW9uKSkge1xuICAgIHJldHVybiB3YXlwb2ludFsgcmVsZXZhbnRBeGlzIF0gPCBzdGFydDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbmNsdWRlcyhhcnJheSwgaXRlbSkge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kcyhzaGFwZSkge1xuICByZXR1cm4ge1xuICAgIHg6IHNoYXBlLngsXG4gICAgeTogc2hhcGUueSxcbiAgICBoZWlnaHQ6IHNoYXBlLmhlaWdodCxcbiAgICB3aWR0aDogc2hhcGUud2lkdGhcbiAgfTtcbn1cbiIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgdG9nZ2xlcyB0aGUgY29sbGFwc2VkIHN0YXRlIG9mIGFuIGVsZW1lbnRcbiAqIGFuZCB0aGUgdmlzaWJpbGl0eSBvZiBhbGwgaXRzIGNoaWxkcmVuLlxuICpcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRvZ2dsZVNoYXBlQ29sbGFwc2VIYW5kbGVyKG1vZGVsaW5nKSB7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG59XG5cblRvZ2dsZVNoYXBlQ29sbGFwc2VIYW5kbGVyLiRpbmplY3QgPSBbICdtb2RlbGluZycgXTtcblxuXG5Ub2dnbGVTaGFwZUNvbGxhcHNlSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgY2hpbGRyZW4gPSBzaGFwZS5jaGlsZHJlbjtcblxuICAvLyByZWN1cnNpdmVseSByZW1lbWJlciBwcmV2aW91cyB2aXNpYmlsaXR5IG9mIGNoaWxkcmVuXG4gIGNvbnRleHQub2xkQ2hpbGRyZW5WaXNpYmlsaXR5ID0gZ2V0RWxlbWVudHNWaXNpYmlsaXR5UmVjdXJzaXZlKGNoaWxkcmVuKTtcblxuICAvLyB0b2dnbGUgc3RhdGVcbiAgc2hhcGUuY29sbGFwc2VkID0gIXNoYXBlLmNvbGxhcHNlZDtcblxuICAvLyByZWN1cnNpdmVseSBoaWRlL3Nob3cgY2hpbGRyZW5cbiAgdmFyIHJlc3VsdCA9IHNldEhpZGRlblJlY3Vyc2l2ZShjaGlsZHJlbiwgc2hhcGUuY29sbGFwc2VkKTtcblxuICByZXR1cm4gW3NoYXBlXS5jb25jYXQocmVzdWx0KTtcbn07XG5cblxuVG9nZ2xlU2hhcGVDb2xsYXBzZUhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgb2xkQ2hpbGRyZW5WaXNpYmlsaXR5ID0gY29udGV4dC5vbGRDaGlsZHJlblZpc2liaWxpdHk7XG5cbiAgdmFyIGNoaWxkcmVuID0gc2hhcGUuY2hpbGRyZW47XG5cbiAgLy8gcmVjdXJzaXZlbHkgc2V0IG9sZCB2aXNhYmlsaXR5IG9mIGNoaWxkcmVuXG4gIHZhciByZXN1bHQgPSByZXN0b3JlVmlzaWJpbGl0eVJlY3Vyc2l2ZShjaGlsZHJlbiwgb2xkQ2hpbGRyZW5WaXNpYmlsaXR5KTtcblxuICAvLyByZXRvZ2dsZSBzdGF0ZVxuICBzaGFwZS5jb2xsYXBzZWQgPSAhc2hhcGUuY29sbGFwc2VkO1xuXG4gIHJldHVybiBbc2hhcGVdLmNvbmNhdChyZXN1bHQpO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBSZXR1cm4gYSBtYXAgeyBlbGVtZW50SWQgLT4gaGlkZGVuU3RhdGV9LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlPn0gZWxlbWVudHNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldEVsZW1lbnRzVmlzaWJpbGl0eVJlY3Vyc2l2ZShlbGVtZW50cykge1xuXG4gIHZhciByZXN1bHQgPSB7fTtcblxuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmVzdWx0W2VsZW1lbnQuaWRdID0gZWxlbWVudC5oaWRkZW47XG5cbiAgICBpZiAoZWxlbWVudC5jaGlsZHJlbikge1xuICAgICAgcmVzdWx0ID0gYXNzaWduKHt9LCByZXN1bHQsIGdldEVsZW1lbnRzVmlzaWJpbGl0eVJlY3Vyc2l2ZShlbGVtZW50LmNoaWxkcmVuKSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbmZ1bmN0aW9uIHNldEhpZGRlblJlY3Vyc2l2ZShlbGVtZW50cywgbmV3SGlkZGVuKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIGVsZW1lbnQuaGlkZGVuID0gbmV3SGlkZGVuO1xuXG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50LmNoaWxkcmVuKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHNldEhpZGRlblJlY3Vyc2l2ZShlbGVtZW50LmNoaWxkcmVuLCBlbGVtZW50LmNvbGxhcHNlZCB8fCBuZXdIaWRkZW4pKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHJlc3RvcmVWaXNpYmlsaXR5UmVjdXJzaXZlKGVsZW1lbnRzLCBsYXN0U3RhdGUpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgZWxlbWVudC5oaWRkZW4gPSBsYXN0U3RhdGVbZWxlbWVudC5pZF07XG5cbiAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGVsZW1lbnQpO1xuXG4gICAgaWYgKGVsZW1lbnQuY2hpbGRyZW4pIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQocmVzdG9yZVZpc2liaWxpdHlSZWN1cnNpdmUoZWxlbWVudC5jaGlsZHJlbiwgbGFzdFN0YXRlKSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHtcbiAgYWRkIGFzIGNvbGxlY3Rpb25BZGQsXG4gIHJlbW92ZSBhcyBjb2xsZWN0aW9uUmVtb3ZlXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvQ29sbGVjdGlvbnMnO1xuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgcmV2ZXJzaWJsZSBhdHRhY2hpbmcvZGV0YWNoaW5nIG9mIHNoYXBlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVXBkYXRlQXR0YWNobWVudEhhbmRsZXIobW9kZWxpbmcpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbn1cblxuVXBkYXRlQXR0YWNobWVudEhhbmRsZXIuJGluamVjdCA9IFsgJ21vZGVsaW5nJyBdO1xuXG5cblVwZGF0ZUF0dGFjaG1lbnRIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgbmV3SG9zdCA9IGNvbnRleHQubmV3SG9zdCxcbiAgICAgIG9sZEhvc3QgPSBzaGFwZS5ob3N0O1xuXG4gIC8vICgwKSBkZXRhY2ggZnJvbSBvbGQgaG9zdFxuICBjb250ZXh0Lm9sZEhvc3QgPSBvbGRIb3N0O1xuICBjb250ZXh0LmF0dGFjaGVySWR4ID0gcmVtb3ZlQXR0YWNoZXIob2xkSG9zdCwgc2hhcGUpO1xuXG4gIC8vICgxKSBhdHRhY2ggdG8gbmV3IGhvc3RcbiAgYWRkQXR0YWNoZXIobmV3SG9zdCwgc2hhcGUpO1xuXG4gIC8vICgyKSB1cGRhdGUgaG9zdFxuICBzaGFwZS5ob3N0ID0gbmV3SG9zdDtcblxuICByZXR1cm4gc2hhcGU7XG59O1xuXG5VcGRhdGVBdHRhY2htZW50SGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgbmV3SG9zdCA9IGNvbnRleHQubmV3SG9zdCxcbiAgICAgIG9sZEhvc3QgPSBjb250ZXh0Lm9sZEhvc3QsXG4gICAgICBhdHRhY2hlcklkeCA9IGNvbnRleHQuYXR0YWNoZXJJZHg7XG5cbiAgLy8gKDIpIHVwZGF0ZSBob3N0XG4gIHNoYXBlLmhvc3QgPSBvbGRIb3N0O1xuXG4gIC8vICgxKSBhdHRhY2ggdG8gbmV3IGhvc3RcbiAgcmVtb3ZlQXR0YWNoZXIobmV3SG9zdCwgc2hhcGUpO1xuXG4gIC8vICgwKSBkZXRhY2ggZnJvbSBvbGQgaG9zdFxuICBhZGRBdHRhY2hlcihvbGRIb3N0LCBzaGFwZSwgYXR0YWNoZXJJZHgpO1xuXG4gIHJldHVybiBzaGFwZTtcbn07XG5cblxuZnVuY3Rpb24gcmVtb3ZlQXR0YWNoZXIoaG9zdCwgYXR0YWNoZXIpIHtcblxuICAvLyByZW1vdmUgYXR0YWNoZXIgZnJvbSBob3N0XG4gIHJldHVybiBjb2xsZWN0aW9uUmVtb3ZlKGhvc3QgJiYgaG9zdC5hdHRhY2hlcnMsIGF0dGFjaGVyKTtcbn1cblxuZnVuY3Rpb24gYWRkQXR0YWNoZXIoaG9zdCwgYXR0YWNoZXIsIGlkeCkge1xuXG4gIGlmICghaG9zdCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBhdHRhY2hlcnMgPSBob3N0LmF0dGFjaGVycztcblxuICBpZiAoIWF0dGFjaGVycykge1xuICAgIGhvc3QuYXR0YWNoZXJzID0gYXR0YWNoZXJzID0gW107XG4gIH1cblxuICBjb2xsZWN0aW9uQWRkKGF0dGFjaGVycywgYXR0YWNoZXIsIGlkeCk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBVcGRhdGVXYXlwb2ludHNIYW5kbGVyKCkgeyB9XG5cblVwZGF0ZVdheXBvaW50c0hhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBuZXdXYXlwb2ludHMgPSBjb250ZXh0Lm5ld1dheXBvaW50cztcblxuICBjb250ZXh0Lm9sZFdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzO1xuXG4gIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gbmV3V2F5cG9pbnRzO1xuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufTtcblxuVXBkYXRlV2F5cG9pbnRzSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgb2xkV2F5cG9pbnRzID0gY29udGV4dC5vbGRXYXlwb2ludHM7XG5cbiAgY29ubmVjdGlvbi53YXlwb2ludHMgPSBvbGRXYXlwb2ludHM7XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59OyIsImltcG9ydCB7XG4gIGdldE5ld0F0dGFjaFBvaW50XG59IGZyb20gJy4uLy4uLy4uLy4uL3V0aWwvQXR0YWNoVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldE9yaWVudGF0aW9uXG59IGZyb20gJy4uLy4uLy4uLy4uL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgZmlsdGVyLFxuICBtYXBcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNpemVkU291cmNlQW5jaG9yKGNvbm5lY3Rpb24sIHNoYXBlLCBvbGRCb3VuZHMpIHtcblxuICB2YXIgd2F5cG9pbnRzID0gc2FmZUdldFdheXBvaW50cyhjb25uZWN0aW9uKSxcbiAgICAgIHdheXBvaW50c0luc2lkZU5ld0JvdW5kcyA9IGdldFdheXBvaW50c0luc2lkZUJvdW5kcyh3YXlwb2ludHMsIHNoYXBlKSxcbiAgICAgIG9sZEFuY2hvciA9IHdheXBvaW50c1swXTtcblxuICAvLyBuZXcgYW5jaG9yIGlzIHRoZSBsYXN0IHdheXBvaW50IGVuY2xvc2VkIGJlIHJlc2l6ZWQgc291cmNlXG4gIGlmICh3YXlwb2ludHNJbnNpZGVOZXdCb3VuZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHdheXBvaW50c0luc2lkZU5ld0JvdW5kc1sgd2F5cG9pbnRzSW5zaWRlTmV3Qm91bmRzLmxlbmd0aCAtIDEgXTtcbiAgfVxuXG4gIHJldHVybiBnZXROZXdBdHRhY2hQb2ludChvbGRBbmNob3Iub3JpZ2luYWwgfHwgb2xkQW5jaG9yLCBvbGRCb3VuZHMsIHNoYXBlKTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzaXplZFRhcmdldEFuY2hvcihjb25uZWN0aW9uLCBzaGFwZSwgb2xkQm91bmRzKSB7XG5cbiAgdmFyIHdheXBvaW50cyA9IHNhZmVHZXRXYXlwb2ludHMoY29ubmVjdGlvbiksXG4gICAgICB3YXlwb2ludHNJbnNpZGVOZXdCb3VuZHMgPSBnZXRXYXlwb2ludHNJbnNpZGVCb3VuZHMod2F5cG9pbnRzLCBzaGFwZSksXG4gICAgICBvbGRBbmNob3IgPSB3YXlwb2ludHNbd2F5cG9pbnRzLmxlbmd0aCAtIDFdO1xuXG4gIC8vIG5ldyBhbmNob3IgaXMgdGhlIGZpcnN0IHdheXBvaW50IGVuY2xvc2VkIGJlIHJlc2l6ZWQgdGFyZ2V0XG4gIGlmICh3YXlwb2ludHNJbnNpZGVOZXdCb3VuZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHdheXBvaW50c0luc2lkZU5ld0JvdW5kc1sgMCBdO1xuICB9XG5cbiAgcmV0dXJuIGdldE5ld0F0dGFjaFBvaW50KG9sZEFuY2hvci5vcmlnaW5hbCB8fCBvbGRBbmNob3IsIG9sZEJvdW5kcywgc2hhcGUpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb3ZlZFNvdXJjZUFuY2hvcihjb25uZWN0aW9uLCBzb3VyY2UsIG1vdmVEZWx0YSkge1xuXG4gIHZhciB3YXlwb2ludHMgPSBzYWZlR2V0V2F5cG9pbnRzKGNvbm5lY3Rpb24pLFxuICAgICAgb2xkQm91bmRzID0gc3VidHJhY3Qoc291cmNlLCBtb3ZlRGVsdGEpLFxuICAgICAgb2xkQW5jaG9yID0gd2F5cG9pbnRzWyAwIF07XG5cbiAgcmV0dXJuIGdldE5ld0F0dGFjaFBvaW50KG9sZEFuY2hvci5vcmlnaW5hbCB8fCBvbGRBbmNob3IsIG9sZEJvdW5kcywgc291cmNlKTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW92ZWRUYXJnZXRBbmNob3IoY29ubmVjdGlvbiwgdGFyZ2V0LCBtb3ZlRGVsdGEpIHtcblxuICB2YXIgd2F5cG9pbnRzID0gc2FmZUdldFdheXBvaW50cyhjb25uZWN0aW9uKSxcbiAgICAgIG9sZEJvdW5kcyA9IHN1YnRyYWN0KHRhcmdldCwgbW92ZURlbHRhKSxcbiAgICAgIG9sZEFuY2hvciA9IHdheXBvaW50c1sgd2F5cG9pbnRzLmxlbmd0aCAtIDEgXTtcblxuICByZXR1cm4gZ2V0TmV3QXR0YWNoUG9pbnQob2xkQW5jaG9yLm9yaWdpbmFsIHx8IG9sZEFuY2hvciwgb2xkQm91bmRzLCB0YXJnZXQpO1xufVxuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBzdWJ0cmFjdChib3VuZHMsIGRlbHRhKSB7XG4gIHJldHVybiB7XG4gICAgeDogYm91bmRzLnggLSBkZWx0YS54LFxuICAgIHk6IGJvdW5kcy55IC0gZGVsdGEueSxcbiAgICB3aWR0aDogYm91bmRzLndpZHRoLFxuICAgIGhlaWdodDogYm91bmRzLmhlaWdodFxuICB9O1xufVxuXG5cbi8qKlxuICogUmV0dXJuIHdheXBvaW50cyBvZiBnaXZlbiBjb25uZWN0aW9uOyB0aHJvdyBpZiBub24gZXhpc3RzIChzaG91bGQgbm90IGhhcHBlbiEhKS5cbiAqXG4gKiBAcGFyYW0ge0Nvbm5lY3Rpb259IGNvbm5lY3Rpb25cbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxQb2ludD59XG4gKi9cbmZ1bmN0aW9uIHNhZmVHZXRXYXlwb2ludHMoY29ubmVjdGlvbikge1xuXG4gIHZhciB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cztcblxuICBpZiAoIXdheXBvaW50cy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nvbm5lY3Rpb24jJyArIGNvbm5lY3Rpb24uaWQgKyAnOiBubyB3YXlwb2ludHMnKTtcbiAgfVxuXG4gIHJldHVybiB3YXlwb2ludHM7XG59XG5cbmZ1bmN0aW9uIGdldFdheXBvaW50c0luc2lkZUJvdW5kcyh3YXlwb2ludHMsIGJvdW5kcykge1xuICB2YXIgb3JpZ2luYWxXYXlwb2ludHMgPSBtYXAod2F5cG9pbnRzLCBnZXRPcmlnaW5hbCk7XG5cbiAgcmV0dXJuIGZpbHRlcihvcmlnaW5hbFdheXBvaW50cywgZnVuY3Rpb24od2F5cG9pbnQpIHtcbiAgICByZXR1cm4gaXNJbnNpZGVCb3VuZHMod2F5cG9pbnQsIGJvdW5kcyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBwb2ludCBpcyBpbnNpZGUgYm91bmRzLCBpbmNsLiBlZGdlcy5cbiAqXG4gKiBAcGFyYW0ge1BvaW50fSBwb2ludFxuICogQHBhcmFtIHtCb3VuZHN9IGJvdW5kc1xuICovXG5mdW5jdGlvbiBpc0luc2lkZUJvdW5kcyhwb2ludCwgYm91bmRzKSB7XG4gIHJldHVybiBnZXRPcmllbnRhdGlvbihib3VuZHMsIHBvaW50LCAxKSA9PT0gJ2ludGVyc2VjdCc7XG59XG5cbmZ1bmN0aW9uIGdldE9yaWdpbmFsKHBvaW50KSB7XG4gIHJldHVybiBwb2ludC5vcmlnaW5hbCB8fCBwb2ludDtcbn1cbiIsImltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGdldENsb3N1cmVcbn0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbC9FbGVtZW50cyc7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW92ZUNsb3N1cmUoKSB7XG5cbiAgdGhpcy5hbGxTaGFwZXMgPSB7fTtcbiAgdGhpcy5hbGxDb25uZWN0aW9ucyA9IHt9O1xuXG4gIHRoaXMuZW5jbG9zZWRFbGVtZW50cyA9IHt9O1xuICB0aGlzLmVuY2xvc2VkQ29ubmVjdGlvbnMgPSB7fTtcblxuICB0aGlzLnRvcExldmVsID0ge307XG59XG5cblxuTW92ZUNsb3N1cmUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGlzVG9wTGV2ZWwpIHtcbiAgcmV0dXJuIHRoaXMuYWRkQWxsKFsgZWxlbWVudCBdLCBpc1RvcExldmVsKTtcbn07XG5cblxuTW92ZUNsb3N1cmUucHJvdG90eXBlLmFkZEFsbCA9IGZ1bmN0aW9uKGVsZW1lbnRzLCBpc1RvcExldmVsKSB7XG5cbiAgdmFyIG5ld0Nsb3N1cmUgPSBnZXRDbG9zdXJlKGVsZW1lbnRzLCAhIWlzVG9wTGV2ZWwsIHRoaXMpO1xuXG4gIGFzc2lnbih0aGlzLCBuZXdDbG9zdXJlKTtcblxuICByZXR1cm4gdGhpcztcbn07IiwiaW1wb3J0IHtcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGdldE1vdmVkU291cmNlQW5jaG9yLFxuICBnZXRNb3ZlZFRhcmdldEFuY2hvclxufSBmcm9tICcuL0FuY2hvcnNIZWxwZXInO1xuXG5pbXBvcnQgTW92ZUNsb3N1cmUgZnJvbSAnLi9Nb3ZlQ2xvc3VyZSc7XG5cblxuLyoqXG4gKiBBIGhlbHBlciB0aGF0IGlzIGFibGUgdG8gY2Fycnkgb3V0IHNlcmlhbGl6ZWQgbW92ZVxuICogb3BlcmF0aW9ucyBvbiBtdWx0aXBsZSBlbGVtZW50cy5cbiAqXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb3ZlSGVscGVyKG1vZGVsaW5nKSB7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG59XG5cbi8qKlxuICogTW92ZSB0aGUgc3BlY2lmaWVkIGVsZW1lbnRzIGFuZCBhbGwgY2hpbGRyZW4gYnkgdGhlIGdpdmVuIGRlbHRhLlxuICpcbiAqIFRoaXMgbW92ZXMgYWxsIGVuY2xvc2VkIGNvbm5lY3Rpb25zLCB0b28gYW5kIGxheW91dHMgYWxsIGFmZmVjdGVkXG4gKiBleHRlcm5hbCBjb25uZWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGVsZW1lbnRzXG4gKiBAcGFyYW0gIHtQb2ludH0gZGVsdGFcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBuZXdQYXJlbnQgYXBwbGllZCB0byB0aGUgZmlyc3QgbGV2ZWwgb2Ygc2hhcGVzXG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBsaXN0IG9mIHRvdWNoZWQgZWxlbWVudHNcbiAqL1xuTW92ZUhlbHBlci5wcm90b3R5cGUubW92ZVJlY3Vyc2l2ZSA9IGZ1bmN0aW9uKGVsZW1lbnRzLCBkZWx0YSwgbmV3UGFyZW50KSB7XG4gIGlmICghZWxlbWVudHMpIHtcbiAgICByZXR1cm4gW107XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMubW92ZUNsb3N1cmUodGhpcy5nZXRDbG9zdXJlKGVsZW1lbnRzKSwgZGVsdGEsIG5ld1BhcmVudCk7XG4gIH1cbn07XG5cbi8qKlxuICogTW92ZSB0aGUgZ2l2ZW4gY2xvc3VyZSBvZiBlbG1lbWVudHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNsb3N1cmVcbiAqIEBwYXJhbSB7UG9pbnR9IGRlbHRhXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBbbmV3UGFyZW50XVxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gW25ld0hvc3RdXG4gKi9cbk1vdmVIZWxwZXIucHJvdG90eXBlLm1vdmVDbG9zdXJlID0gZnVuY3Rpb24oY2xvc3VyZSwgZGVsdGEsIG5ld1BhcmVudCwgbmV3SG9zdCwgcHJpbWFyeVNoYXBlKSB7XG4gIHZhciBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nO1xuXG4gIHZhciBhbGxTaGFwZXMgPSBjbG9zdXJlLmFsbFNoYXBlcyxcbiAgICAgIGFsbENvbm5lY3Rpb25zID0gY2xvc3VyZS5hbGxDb25uZWN0aW9ucyxcbiAgICAgIGVuY2xvc2VkQ29ubmVjdGlvbnMgPSBjbG9zdXJlLmVuY2xvc2VkQ29ubmVjdGlvbnMsXG4gICAgICB0b3BMZXZlbCA9IGNsb3N1cmUudG9wTGV2ZWwsXG4gICAgICBrZWVwUGFyZW50ID0gZmFsc2U7XG5cbiAgaWYgKHByaW1hcnlTaGFwZSAmJiBwcmltYXJ5U2hhcGUucGFyZW50ID09PSBuZXdQYXJlbnQpIHtcbiAgICBrZWVwUGFyZW50ID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIG1vdmUgYWxsIHNoYXBlc1xuICBmb3JFYWNoKGFsbFNoYXBlcywgZnVuY3Rpb24oc2hhcGUpIHtcblxuICAgIC8vIG1vdmUgdGhlIGVsZW1lbnQgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBkZWx0YVxuICAgIG1vZGVsaW5nLm1vdmVTaGFwZShzaGFwZSwgZGVsdGEsIHRvcExldmVsW3NoYXBlLmlkXSAmJiAha2VlcFBhcmVudCAmJiBuZXdQYXJlbnQsIHtcbiAgICAgIHJlY3Vyc2U6IGZhbHNlLFxuICAgICAgbGF5b3V0OiBmYWxzZVxuICAgIH0pO1xuICB9KTtcblxuICAvLyBtb3ZlIGFsbCBjaGlsZCBjb25uZWN0aW9ucyAvIGxheW91dCBleHRlcm5hbCBjb25uZWN0aW9uc1xuICBmb3JFYWNoKGFsbENvbm5lY3Rpb25zLCBmdW5jdGlvbihjKSB7XG5cbiAgICB2YXIgc291cmNlTW92ZWQgPSAhIWFsbFNoYXBlc1tjLnNvdXJjZS5pZF0sXG4gICAgICAgIHRhcmdldE1vdmVkID0gISFhbGxTaGFwZXNbYy50YXJnZXQuaWRdO1xuXG4gICAgaWYgKGVuY2xvc2VkQ29ubmVjdGlvbnNbYy5pZF0gJiYgc291cmNlTW92ZWQgJiYgdGFyZ2V0TW92ZWQpIHtcbiAgICAgIG1vZGVsaW5nLm1vdmVDb25uZWN0aW9uKGMsIGRlbHRhLCB0b3BMZXZlbFtjLmlkXSAmJiAha2VlcFBhcmVudCAmJiBuZXdQYXJlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtb2RlbGluZy5sYXlvdXRDb25uZWN0aW9uKGMsIHtcbiAgICAgICAgY29ubmVjdGlvblN0YXJ0OiBzb3VyY2VNb3ZlZCAmJiBnZXRNb3ZlZFNvdXJjZUFuY2hvcihjLCBjLnNvdXJjZSwgZGVsdGEpLFxuICAgICAgICBjb25uZWN0aW9uRW5kOiB0YXJnZXRNb3ZlZCAmJiBnZXRNb3ZlZFRhcmdldEFuY2hvcihjLCBjLnRhcmdldCwgZGVsdGEpXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjbG9zdXJlIGZvciB0aGUgc2VsZWN0ZWQgZWxlbWVudHNcbiAqXG4gKiBAcGFyYW0gIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGVsZW1lbnRzXG4gKiBAcmV0dXJuIHtNb3ZlQ2xvc3VyZX0gY2xvc3VyZVxuICovXG5Nb3ZlSGVscGVyLnByb3RvdHlwZS5nZXRDbG9zdXJlID0gZnVuY3Rpb24oZWxlbWVudHMpIHtcbiAgcmV0dXJuIG5ldyBNb3ZlQ2xvc3VyZSgpLmFkZEFsbChlbGVtZW50cywgdHJ1ZSk7XG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vdXNlKGV2ZW50QnVzKSB7XHJcbiAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICB0aGlzLl9sYXN0TW92ZUV2ZW50ID0gbnVsbDtcclxuXHJcbiAgZnVuY3Rpb24gc2V0TGFzdE1vdmVFdmVudChtb3VzZW1vdmVFdmVudCkge1xyXG4gICAgc2VsZi5fbGFzdE1vdmVFdmVudCA9IG1vdXNlbW92ZUV2ZW50O1xyXG4gIH1cclxuXHJcbiAgZXZlbnRCdXMub24oJ2NhbnZhcy5pbml0JywgZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgdmFyIHN2ZyA9IHNlbGYuX3N2ZyA9IGNvbnRleHQuc3ZnO1xyXG5cclxuICAgIHN2Zy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBzZXRMYXN0TW92ZUV2ZW50KTtcclxuICB9KTtcclxuXHJcbiAgZXZlbnRCdXMub24oJ2NhbnZhcy5kZXN0cm95JywgZnVuY3Rpb24oKSB7XHJcbiAgICBzZWxmLl9sYXN0TW91c2VFdmVudCA9IG51bGw7XHJcblxyXG4gICAgc2VsZi5fc3ZnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHNldExhc3RNb3ZlRXZlbnQpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5Nb3VzZS4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07XHJcblxyXG5Nb3VzZS5wcm90b3R5cGUuZ2V0TGFzdE1vdmVFdmVudCA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiB0aGlzLl9sYXN0TW92ZUV2ZW50IHx8IGNyZWF0ZU1vdmVFdmVudCgwLCAwKTtcclxufTtcclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vdmVFdmVudCh4LCB5KSB7XHJcbiAgdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ01vdXNlRXZlbnQnKTtcclxuXHJcbiAgdmFyIHNjcmVlblggPSB4LFxyXG4gICAgICBzY3JlZW5ZID0geSxcclxuICAgICAgY2xpZW50WCA9IHgsXHJcbiAgICAgIGNsaWVudFkgPSB5O1xyXG5cclxuICBpZiAoZXZlbnQuaW5pdE1vdXNlRXZlbnQpIHtcclxuICAgIGV2ZW50LmluaXRNb3VzZUV2ZW50KFxyXG4gICAgICAnbW91c2Vtb3ZlJyxcclxuICAgICAgdHJ1ZSxcclxuICAgICAgdHJ1ZSxcclxuICAgICAgd2luZG93LFxyXG4gICAgICAwLFxyXG4gICAgICBzY3JlZW5YLFxyXG4gICAgICBzY3JlZW5ZLFxyXG4gICAgICBjbGllbnRYLFxyXG4gICAgICBjbGllbnRZLFxyXG4gICAgICBmYWxzZSxcclxuICAgICAgZmFsc2UsXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICBmYWxzZSxcclxuICAgICAgMCxcclxuICAgICAgbnVsbFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBldmVudDtcclxufSIsImltcG9ydCBNb3VzZSBmcm9tICcuL01vdXNlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAnbW91c2UnIF0sXG4gIG1vdXNlOiBbICd0eXBlJywgTW91c2UgXVxufTtcbiIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZmlsdGVyLFxuICBncm91cEJ5LFxuICBpc09iamVjdFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciBMT1dfUFJJT1JJVFkgPSA1MDAsXG4gICAgTUVESVVNX1BSSU9SSVRZID0gMTI1MCxcbiAgICBISUdIX1BSSU9SSVRZID0gMTUwMDtcblxuaW1wb3J0IHsgZ2V0T3JpZ2luYWwgYXMgZ2V0T3JpZ2luYWxFdmVudCB9IGZyb20gJy4uLy4uL3V0aWwvRXZlbnQnO1xuXG52YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xuXG5mdW5jdGlvbiBtaWQoZWxlbWVudCkge1xuICByZXR1cm4ge1xuICAgIHg6IGVsZW1lbnQueCArIHJvdW5kKGVsZW1lbnQud2lkdGggLyAyKSxcbiAgICB5OiBlbGVtZW50LnkgKyByb3VuZChlbGVtZW50LmhlaWdodCAvIDIpXG4gIH07XG59XG5cbi8qKlxuICogQSBwbHVnaW4gdGhhdCBtYWtlcyBzaGFwZXMgZHJhZ2dhYmxlIC8gZHJvcHBhYmxlLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0RyYWdnaW5nfSBkcmFnZ2luZ1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7U2VsZWN0aW9ufSBzZWxlY3Rpb25cbiAqIEBwYXJhbSB7UnVsZXN9IHJ1bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vdmVFdmVudHMoXG4gICAgZXZlbnRCdXMsIGRyYWdnaW5nLCBtb2RlbGluZyxcbiAgICBzZWxlY3Rpb24sIHJ1bGVzKSB7XG5cbiAgLy8gcnVsZXNcblxuICBmdW5jdGlvbiBjYW5Nb3ZlKHNoYXBlcywgZGVsdGEsIHBvc2l0aW9uLCB0YXJnZXQpIHtcblxuICAgIHJldHVybiBydWxlcy5hbGxvd2VkKCdlbGVtZW50cy5tb3ZlJywge1xuICAgICAgc2hhcGVzOiBzaGFwZXMsXG4gICAgICBkZWx0YTogZGVsdGEsXG4gICAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgICB0YXJnZXQ6IHRhcmdldFxuICAgIH0pO1xuICB9XG5cblxuICAvLyBtb3ZlIGV2ZW50c1xuXG4gIC8vIGFzc2lnbiBhIGhpZ2ggcHJpb3JpdHkgdG8gdGhpcyBoYW5kbGVyIHRvIHNldHVwIHRoZSBlbnZpcm9ubWVudFxuICAvLyBvdGhlcnMgbWF5IGhvb2sgdXAgbGF0ZXIsIGUuZy4gYXQgZGVmYXVsdCBwcmlvcml0eSBhbmQgbW9kaWZ5XG4gIC8vIHRoZSBtb3ZlIGVudmlyb25tZW50LlxuICAvL1xuICAvLyBUaGlzIHNldHMgdXAgdGhlIGNvbnRleHQgd2l0aFxuICAvL1xuICAvLyAqIHNoYXBlOiB0aGUgcHJpbWFyeSBzaGFwZSBiZWluZyBtb3ZlZFxuICAvLyAqIHNoYXBlczogYSBsaXN0IG9mIHNoYXBlcyB0byBiZSBtb3ZlZFxuICAvLyAqIHZhbGlkYXRlZFNoYXBlczogYSBsaXN0IG9mIHNoYXBlcyB0aGF0IGFyZSBiZWluZyBjaGVja2VkXG4gIC8vICAgICAgICAgICAgICAgICAgICBhZ2FpbnN0IHRoZSBydWxlcyBiZWZvcmUgYW5kIGR1cmluZyBtb3ZlXG4gIC8vXG4gIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLnN0YXJ0JywgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBldmVudC5zaGFwZSxcbiAgICAgICAgc2hhcGVzID0gc2VsZWN0aW9uLmdldCgpLnNsaWNlKCk7XG5cbiAgICAvLyBtb3ZlIG9ubHkgc2luZ2xlIHNoYXBlIGlmIHRoZSBkcmFnZ2VkIGVsZW1lbnRcbiAgICAvLyBpcyBub3QgcGFydCBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb25cbiAgICBpZiAoc2hhcGVzLmluZGV4T2Yoc2hhcGUpID09PSAtMSkge1xuICAgICAgc2hhcGVzID0gWyBzaGFwZSBdO1xuICAgIH1cblxuICAgIC8vIGVuc3VyZSB3ZSByZW1vdmUgbmVzdGVkIGVsZW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uXG4gICAgLy8gYW5kIGFkZCBhdHRhY2hlcnMgZm9yIGEgcHJvcGVyIGRyYWdnZXJcbiAgICBzaGFwZXMgPSByZW1vdmVOZXN0ZWQoc2hhcGVzKTtcblxuICAgIC8vIGF0dGFjaCBzaGFwZXMgdG8gZHJhZyBjb250ZXh0XG4gICAgYXNzaWduKGNvbnRleHQsIHtcbiAgICAgIHNoYXBlczogc2hhcGVzLFxuICAgICAgdmFsaWRhdGVkU2hhcGVzOiBzaGFwZXMsXG4gICAgICBzaGFwZTogc2hhcGVcbiAgICB9KTtcbiAgfSk7XG5cblxuICAvLyBhc3NpZ24gYSBoaWdoIHByaW9yaXR5IHRvIHRoaXMgaGFuZGxlciB0byBzZXR1cCB0aGUgZW52aXJvbm1lbnRcbiAgLy8gb3RoZXJzIG1heSBob29rIHVwIGxhdGVyLCBlLmcuIGF0IGRlZmF1bHQgcHJpb3JpdHkgYW5kIG1vZGlmeVxuICAvLyB0aGUgbW92ZSBlbnZpcm9ubWVudFxuICAvL1xuICBldmVudEJ1cy5vbignc2hhcGUubW92ZS5zdGFydCcsIE1FRElVTV9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgdmFsaWRhdGVkU2hhcGVzID0gY29udGV4dC52YWxpZGF0ZWRTaGFwZXMsXG4gICAgICAgIGNhbkV4ZWN1dGU7XG5cbiAgICBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlID0gY2FuTW92ZSh2YWxpZGF0ZWRTaGFwZXMpO1xuXG4gICAgLy8gY2hlY2sgaWYgd2UgY2FuIG1vdmUgdGhlIGVsZW1lbnRzXG4gICAgaWYgKCFjYW5FeGVjdXRlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcblxuICAvLyBhc3NpZ24gYSBsb3cgcHJpb3JpdHkgdG8gdGhpcyBoYW5kbGVyXG4gIC8vIHRvIGxldCBvdGhlcnMgbW9kaWZ5IHRoZSBtb3ZlIGV2ZW50IGJlZm9yZSB3ZSB1cGRhdGVcbiAgLy8gdGhlIGNvbnRleHRcbiAgLy9cbiAgZXZlbnRCdXMub24oJ3NoYXBlLm1vdmUubW92ZScsIExPV19QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgdmFsaWRhdGVkU2hhcGVzID0gY29udGV4dC52YWxpZGF0ZWRTaGFwZXMsXG4gICAgICAgIGhvdmVyID0gZXZlbnQuaG92ZXIsXG4gICAgICAgIGRlbHRhID0geyB4OiBldmVudC5keCwgeTogZXZlbnQuZHkgfSxcbiAgICAgICAgcG9zaXRpb24gPSB7IHg6IGV2ZW50LngsIHk6IGV2ZW50LnkgfSxcbiAgICAgICAgY2FuRXhlY3V0ZTtcblxuICAgIC8vIGNoZWNrIGlmIHdlIGNhbiBtb3ZlIHRoZSBlbGVtZW50c1xuICAgIGNhbkV4ZWN1dGUgPSBjYW5Nb3ZlKHZhbGlkYXRlZFNoYXBlcywgZGVsdGEsIHBvc2l0aW9uLCBob3Zlcik7XG5cbiAgICBjb250ZXh0LmRlbHRhID0gZGVsdGE7XG4gICAgY29udGV4dC5jYW5FeGVjdXRlID0gY2FuRXhlY3V0ZTtcblxuICAgIC8vIHNpbXBseSBpZ25vcmUgbW92ZSBvdmVyXG4gICAgaWYgKGNhbkV4ZWN1dGUgPT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQudGFyZ2V0ID0gbnVsbDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQudGFyZ2V0ID0gaG92ZXI7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLmVuZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQ7XG5cbiAgICB2YXIgZGVsdGEgPSBjb250ZXh0LmRlbHRhLFxuICAgICAgICBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlLFxuICAgICAgICBpc0F0dGFjaCA9IGNhbkV4ZWN1dGUgPT09ICdhdHRhY2gnLFxuICAgICAgICBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcztcblxuICAgIGlmIChjYW5FeGVjdXRlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGVuc3VyZSB3ZSBoYXZlIGFjdHVhbCBwaXhlbCB2YWx1ZXMgZGVsdGFzXG4gICAgLy8gKGltcG9ydGFudCB3aGVuIHpvb20gbGV2ZWwgd2FzID4gMSBkdXJpbmcgbW92ZSlcbiAgICBkZWx0YS54ID0gcm91bmQoZGVsdGEueCk7XG4gICAgZGVsdGEueSA9IHJvdW5kKGRlbHRhLnkpO1xuXG4gICAgaWYgKGRlbHRhLnggPT09IDAgJiYgZGVsdGEueSA9PT0gMCkge1xuXG4gICAgICAvLyBkaWRuJ3QgbW92ZVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1vZGVsaW5nLm1vdmVFbGVtZW50cyhzaGFwZXMsIGRlbHRhLCBjb250ZXh0LnRhcmdldCwge1xuICAgICAgcHJpbWFyeVNoYXBlOiBjb250ZXh0LnNoYXBlLFxuICAgICAgYXR0YWNoOiBpc0F0dGFjaFxuICAgIH0pO1xuICB9KTtcblxuXG4gIC8vIG1vdmUgYWN0aXZhdGlvblxuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50Lm1vdXNlZG93bicsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgb3JpZ2luYWxFdmVudCA9IGdldE9yaWdpbmFsRXZlbnQoZXZlbnQpO1xuXG4gICAgaWYgKCFvcmlnaW5hbEV2ZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ211c3Qgc3VwcGx5IERPTSBtb3VzZWRvd24gZXZlbnQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhcnQob3JpZ2luYWxFdmVudCwgZXZlbnQuZWxlbWVudCk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBTdGFydCBtb3ZlLlxuICAgKlxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50XG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBzaGFwZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthY3RpdmF0ZV1cbiAgICogQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0XVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoZXZlbnQsIGVsZW1lbnQsIGFjdGl2YXRlLCBjb250ZXh0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGFjdGl2YXRlKSkge1xuICAgICAgY29udGV4dCA9IGFjdGl2YXRlO1xuICAgICAgYWN0aXZhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBkbyBub3QgbW92ZSBjb25uZWN0aW9ucyBvciB0aGUgcm9vdCBlbGVtZW50XG4gICAgaWYgKGVsZW1lbnQud2F5cG9pbnRzIHx8ICFlbGVtZW50LnBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciByZWZlcmVuY2VQb2ludCA9IG1pZChlbGVtZW50KTtcblxuICAgIGRyYWdnaW5nLmluaXQoZXZlbnQsIHJlZmVyZW5jZVBvaW50LCAnc2hhcGUubW92ZScsIHtcbiAgICAgIGN1cnNvcjogJ2dyYWJiaW5nJyxcbiAgICAgIGF1dG9BY3RpdmF0ZTogYWN0aXZhdGUsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHNoYXBlOiBlbGVtZW50LFxuICAgICAgICBjb250ZXh0OiBjb250ZXh0IHx8IHt9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyB3ZSd2ZSBoYW5kbGVkIHRoZSBldmVudFxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gQVBJXG5cbiAgdGhpcy5zdGFydCA9IHN0YXJ0O1xufVxuXG5Nb3ZlRXZlbnRzLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdkcmFnZ2luZycsXG4gICdtb2RlbGluZycsXG4gICdzZWxlY3Rpb24nLFxuICAncnVsZXMnXG5dO1xuXG5cbi8qKlxuICogUmV0dXJuIGEgZmlsdGVyZWQgbGlzdCBvZiBlbGVtZW50cyB0aGF0IGRvIG5vdCBjb250YWluXG4gKiB0aG9zZSBuZXN0ZWQgaW50byBvdGhlcnMuXG4gKlxuICogQHBhcmFtICB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBlbGVtZW50c1xuICpcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZmlsdGVyZWRcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlTmVzdGVkKGVsZW1lbnRzKSB7XG5cbiAgdmFyIGlkcyA9IGdyb3VwQnkoZWxlbWVudHMsICdpZCcpO1xuXG4gIHJldHVybiBmaWx0ZXIoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudCkpIHtcblxuICAgICAgLy8gcGFyZW50IGluIHNlbGVjdGlvblxuICAgICAgaWYgKGlkc1tlbGVtZW50LmlkXSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHtcbiAgZmxhdHRlbixcbiAgZm9yRWFjaCxcbiAgZmlsdGVyLFxuICBmaW5kLFxuICBncm91cEJ5LFxuICBtYXAsXG4gIG1hdGNoUGF0dGVybixcbiAgc2l6ZVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIHNlbGZBbmRBbGxDaGlsZHJlblxufSBmcm9tICcuLi8uLi91dGlsL0VsZW1lbnRzJztcblxuaW1wb3J0IHtcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSAnLi4vLi4vdXRpbC9TdmdUcmFuc2Zvcm1VdGlsJztcblxudmFyIExPV19QUklPUklUWSA9IDQ5OTtcblxudmFyIE1BUktFUl9EUkFHR0lORyA9ICdkanMtZHJhZ2dpbmcnLFxuICAgIE1BUktFUl9PSyA9ICdkcm9wLW9rJyxcbiAgICBNQVJLRVJfTk9UX09LID0gJ2Ryb3Atbm90LW9rJyxcbiAgICBNQVJLRVJfTkVXX1BBUkVOVCA9ICduZXctcGFyZW50JyxcbiAgICBNQVJLRVJfQVRUQUNIID0gJ2F0dGFjaC1vayc7XG5cblxuLyoqXG4gKiBQcm92aWRlcyBwcmV2aWV3cyBmb3IgbW92aW5nIHNoYXBlcyB3aGVuIG1vdmluZy5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtFbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICogQHBhcmFtIHtTdHlsZXN9IHN0eWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb3ZlUHJldmlldyhcbiAgICBldmVudEJ1cywgY2FudmFzLCBzdHlsZXMsIHByZXZpZXdTdXBwb3J0KSB7XG5cbiAgZnVuY3Rpb24gZ2V0VmlzdWFsRHJhZ1NoYXBlcyhzaGFwZXMpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBnZXRBbGxEcmFnZ2VkRWxlbWVudHMoc2hhcGVzKTtcblxuICAgIHZhciBmaWx0ZXJlZEVsZW1lbnRzID0gcmVtb3ZlRWRnZXMoZWxlbWVudHMpO1xuXG4gICAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHM7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRBbGxEcmFnZ2VkRWxlbWVudHMoc2hhcGVzKSB7XG4gICAgdmFyIGFsbFNoYXBlcyA9IHNlbGZBbmRBbGxDaGlsZHJlbihzaGFwZXMsIHRydWUpO1xuXG4gICAgdmFyIGFsbENvbm5lY3Rpb25zID0gbWFwKGFsbFNoYXBlcywgZnVuY3Rpb24oc2hhcGUpIHtcbiAgICAgIHJldHVybiAoc2hhcGUuaW5jb21pbmcgfHwgW10pLmNvbmNhdChzaGFwZS5vdXRnb2luZyB8fCBbXSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmxhdHRlbihhbGxTaGFwZXMuY29uY2F0KGFsbENvbm5lY3Rpb25zKSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBkcm9wIG1hcmtlciBvbiBhbiBlbGVtZW50LlxuICAgKi9cbiAgZnVuY3Rpb24gc2V0TWFya2VyKGVsZW1lbnQsIG1hcmtlcikge1xuXG4gICAgWyBNQVJLRVJfQVRUQUNILCBNQVJLRVJfT0ssIE1BUktFUl9OT1RfT0ssIE1BUktFUl9ORVdfUEFSRU5UIF0uZm9yRWFjaChmdW5jdGlvbihtKSB7XG5cbiAgICAgIGlmIChtID09PSBtYXJrZXIpIHtcbiAgICAgICAgY2FudmFzLmFkZE1hcmtlcihlbGVtZW50LCBtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoZWxlbWVudCwgbSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhbiBlbGVtZW50IGRyYWdnYWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGFkZE1hcmtlclxuICAgKi9cbiAgZnVuY3Rpb24gbWFrZURyYWdnYWJsZShjb250ZXh0LCBlbGVtZW50LCBhZGRNYXJrZXIpIHtcblxuICAgIHByZXZpZXdTdXBwb3J0LmFkZERyYWdnZXIoZWxlbWVudCwgY29udGV4dC5kcmFnR3JvdXApO1xuXG4gICAgaWYgKGFkZE1hcmtlcikge1xuICAgICAgY2FudmFzLmFkZE1hcmtlcihlbGVtZW50LCBNQVJLRVJfRFJBR0dJTkcpO1xuICAgIH1cblxuICAgIGlmIChjb250ZXh0LmFsbERyYWdnZWRFbGVtZW50cykge1xuICAgICAgY29udGV4dC5hbGxEcmFnZ2VkRWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5hbGxEcmFnZ2VkRWxlbWVudHMgPSBbIGVsZW1lbnQgXTtcbiAgICB9XG4gIH1cblxuICAvLyBhc3NpZ24gYSBsb3cgcHJpb3JpdHkgdG8gdGhpcyBoYW5kbGVyXG4gIC8vIHRvIGxldCBvdGhlcnMgbW9kaWZ5IHRoZSBtb3ZlIGNvbnRleHQgYmVmb3JlXG4gIC8vIHdlIGRyYXcgdGhpbmdzXG4gIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLnN0YXJ0JywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgZHJhZ1NoYXBlcyA9IGNvbnRleHQuc2hhcGVzLFxuICAgICAgICBhbGxEcmFnZ2VkRWxlbWVudHMgPSBjb250ZXh0LmFsbERyYWdnZWRFbGVtZW50cztcblxuICAgIHZhciB2aXN1YWxseURyYWdnZWRTaGFwZXMgPSBnZXRWaXN1YWxEcmFnU2hhcGVzKGRyYWdTaGFwZXMpO1xuXG4gICAgaWYgKCFjb250ZXh0LmRyYWdHcm91cCkge1xuICAgICAgdmFyIGRyYWdHcm91cCA9IHN2Z0NyZWF0ZSgnZycpO1xuXG4gICAgICBzdmdBdHRyKGRyYWdHcm91cCwgc3R5bGVzLmNscygnZGpzLWRyYWctZ3JvdXAnLCBbICduby1ldmVudHMnIF0pKTtcblxuICAgICAgdmFyIGRlZmF1bHRMYXllciA9IGNhbnZhcy5nZXREZWZhdWx0TGF5ZXIoKTtcblxuICAgICAgc3ZnQXBwZW5kKGRlZmF1bHRMYXllciwgZHJhZ0dyb3VwKTtcblxuICAgICAgY29udGV4dC5kcmFnR3JvdXAgPSBkcmFnR3JvdXA7XG4gICAgfVxuXG4gICAgLy8gYWRkIHByZXZpZXdzXG4gICAgdmlzdWFsbHlEcmFnZ2VkU2hhcGVzLmZvckVhY2goZnVuY3Rpb24oc2hhcGUpIHtcbiAgICAgIHByZXZpZXdTdXBwb3J0LmFkZERyYWdnZXIoc2hhcGUsIGNvbnRleHQuZHJhZ0dyb3VwKTtcbiAgICB9KTtcblxuICAgIC8vIGNhY2hlIGFsbCBkcmFnZ2VkIGVsZW1lbnRzIC8gZ2Z4XG4gICAgLy8gc28gdGhhdCB3ZSBjYW4gcXVpY2tseSB1bmRvIHRoZWlyIHN0YXRlIGNoYW5nZXMgbGF0ZXJcbiAgICBpZiAoIWFsbERyYWdnZWRFbGVtZW50cykge1xuICAgICAgYWxsRHJhZ2dlZEVsZW1lbnRzID0gZ2V0QWxsRHJhZ2dlZEVsZW1lbnRzKGRyYWdTaGFwZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGxEcmFnZ2VkRWxlbWVudHMgPSBmbGF0dGVuKFtcbiAgICAgICAgYWxsRHJhZ2dlZEVsZW1lbnRzLFxuICAgICAgICBnZXRBbGxEcmFnZ2VkRWxlbWVudHMoZHJhZ1NoYXBlcylcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIC8vIGFkZCBkcmFnZ2luZyBtYXJrZXJcbiAgICBmb3JFYWNoKGFsbERyYWdnZWRFbGVtZW50cywgZnVuY3Rpb24oZSkge1xuICAgICAgY2FudmFzLmFkZE1hcmtlcihlLCBNQVJLRVJfRFJBR0dJTkcpO1xuICAgIH0pO1xuXG4gICAgY29udGV4dC5hbGxEcmFnZ2VkRWxlbWVudHMgPSBhbGxEcmFnZ2VkRWxlbWVudHM7XG5cbiAgICAvLyBkZXRlcm1pbmUsIGlmIGFueSBvZiB0aGUgZHJhZ2dlZCBlbGVtZW50cyBoYXZlIGRpZmZlcmVudCBwYXJlbnRzXG4gICAgY29udGV4dC5kaWZmZXJlbnRQYXJlbnRzID0gaGF2ZURpZmZlcmVudFBhcmVudHMoZHJhZ1NoYXBlcyk7XG4gIH0pO1xuXG4gIC8vIHVwZGF0ZSBwcmV2aWV3c1xuICBldmVudEJ1cy5vbignc2hhcGUubW92ZS5tb3ZlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBkcmFnR3JvdXAgPSBjb250ZXh0LmRyYWdHcm91cCxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQsXG4gICAgICAgIHBhcmVudCA9IGNvbnRleHQuc2hhcGUucGFyZW50LFxuICAgICAgICBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlO1xuXG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgaWYgKGNhbkV4ZWN1dGUgPT09ICdhdHRhY2gnKSB7XG4gICAgICAgIHNldE1hcmtlcih0YXJnZXQsIE1BUktFUl9BVFRBQ0gpO1xuICAgICAgfSBlbHNlIGlmIChjb250ZXh0LmNhbkV4ZWN1dGUgJiYgdGFyZ2V0ICYmIHRhcmdldC5pZCAhPT0gcGFyZW50LmlkKSB7XG4gICAgICAgIHNldE1hcmtlcih0YXJnZXQsIE1BUktFUl9ORVdfUEFSRU5UKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldE1hcmtlcih0YXJnZXQsIGNvbnRleHQuY2FuRXhlY3V0ZSA/IE1BUktFUl9PSyA6IE1BUktFUl9OT1RfT0spO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyYW5zbGF0ZShkcmFnR3JvdXAsIGV2ZW50LmR4LCBldmVudC5keSk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKFsgJ3NoYXBlLm1vdmUub3V0JywgJ3NoYXBlLm1vdmUuY2xlYW51cCcgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0O1xuXG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgc2V0TWFya2VyKHRhcmdldCwgbnVsbCk7XG4gICAgfVxuICB9KTtcblxuICAvLyByZW1vdmUgcHJldmlld3NcbiAgZXZlbnRCdXMub24oJ3NoYXBlLm1vdmUuY2xlYW51cCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGFsbERyYWdnZWRFbGVtZW50cyA9IGNvbnRleHQuYWxsRHJhZ2dlZEVsZW1lbnRzLFxuICAgICAgICBkcmFnR3JvdXAgPSBjb250ZXh0LmRyYWdHcm91cDtcblxuXG4gICAgLy8gcmVtb3ZlIGRyYWdnaW5nIG1hcmtlclxuICAgIGZvckVhY2goYWxsRHJhZ2dlZEVsZW1lbnRzLCBmdW5jdGlvbihlKSB7XG4gICAgICBjYW52YXMucmVtb3ZlTWFya2VyKGUsIE1BUktFUl9EUkFHR0lORyk7XG4gICAgfSk7XG5cbiAgICBpZiAoZHJhZ0dyb3VwKSB7XG4gICAgICBzdmdSZW1vdmUoZHJhZ0dyb3VwKTtcbiAgICB9XG4gIH0pO1xuXG5cbiAgLy8gQVBJIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAvKipcbiAgICogTWFrZSBhbiBlbGVtZW50IGRyYWdnYWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGFkZE1hcmtlclxuICAgKi9cbiAgdGhpcy5tYWtlRHJhZ2dhYmxlID0gbWFrZURyYWdnYWJsZTtcbn1cblxuTW92ZVByZXZpZXcuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdzdHlsZXMnLFxuICAncHJldmlld1N1cHBvcnQnXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIHJldHVybnMgZWxlbWVudHMgbWludXMgYWxsIGNvbm5lY3Rpb25zXG4gKiB3aGVyZSBzb3VyY2Ugb3IgdGFyZ2V0IGlzIG5vdCBlbGVtZW50c1xuICovXG5mdW5jdGlvbiByZW1vdmVFZGdlcyhlbGVtZW50cykge1xuXG4gIHZhciBmaWx0ZXJlZEVsZW1lbnRzID0gZmlsdGVyKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICBpZiAoIWlzQ29ubmVjdGlvbihlbGVtZW50KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgZmluZChlbGVtZW50cywgbWF0Y2hQYXR0ZXJuKHsgaWQ6IGVsZW1lbnQuc291cmNlLmlkIH0pKSAmJlxuICAgICAgICBmaW5kKGVsZW1lbnRzLCBtYXRjaFBhdHRlcm4oeyBpZDogZWxlbWVudC50YXJnZXQuaWQgfSkpXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIGhhdmVEaWZmZXJlbnRQYXJlbnRzKGVsZW1lbnRzKSB7XG4gIHJldHVybiBzaXplKGdyb3VwQnkoZWxlbWVudHMsIGZ1bmN0aW9uKGUpIHsgcmV0dXJuIGUucGFyZW50ICYmIGUucGFyZW50LmlkOyB9KSkgIT09IDE7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGFuIGVsZW1lbnQgaXMgYSBjb25uZWN0aW9uLlxuICovXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC53YXlwb2ludHM7XG59XG4iLCJpbXBvcnQgSW50ZXJhY3Rpb25FdmVudHNNb2R1bGUgZnJvbSAnLi4vaW50ZXJhY3Rpb24tZXZlbnRzJztcbmltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnLi4vc2VsZWN0aW9uJztcbmltcG9ydCBPdXRsaW5lTW9kdWxlIGZyb20gJy4uL291dGxpbmUnO1xuaW1wb3J0IFJ1bGVzTW9kdWxlIGZyb20gJy4uL3J1bGVzJztcbmltcG9ydCBEcmFnZ2luZ01vZHVsZSBmcm9tICcuLi9kcmFnZ2luZyc7XG5pbXBvcnQgUHJldmlld1N1cHBvcnRNb2R1bGUgZnJvbSAnLi4vcHJldmlldy1zdXBwb3J0JztcblxuaW1wb3J0IE1vdmUgZnJvbSAnLi9Nb3ZlJztcbmltcG9ydCBNb3ZlUHJldmlldyBmcm9tICcuL01vdmVQcmV2aWV3JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIEludGVyYWN0aW9uRXZlbnRzTW9kdWxlLFxuICAgIFNlbGVjdGlvbk1vZHVsZSxcbiAgICBPdXRsaW5lTW9kdWxlLFxuICAgIFJ1bGVzTW9kdWxlLFxuICAgIERyYWdnaW5nTW9kdWxlLFxuICAgIFByZXZpZXdTdXBwb3J0TW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbXG4gICAgJ21vdmUnLFxuICAgICdtb3ZlUHJldmlldydcbiAgXSxcbiAgbW92ZTogWyAndHlwZScsIE1vdmUgXSxcbiAgbW92ZVByZXZpZXc6IFsgJ3R5cGUnLCBNb3ZlUHJldmlldyBdXG59O1xuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICcuLi8uLi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cblxuLyoqXG4gKiBBbiBhYnN0cmFjdCBwcm92aWRlciB0aGF0IGFsbG93cyBtb2RlbGVycyB0byBpbXBsZW1lbnQgYSBjdXN0b21cbiAqIG9yZGVyaW5nIG9mIGRpYWdyYW0gZWxlbWVudHMgb24gdGhlIGNhbnZhcy5cbiAqXG4gKiBJdCBtYWtlcyBzdXJlIHRoYXQgdGhlIG9yZGVyIGlzIGFsd2F5cyBwcmVzZXJ2ZWQgZHVyaW5nIGVsZW1lbnRcbiAqIGNyZWF0aW9uIGFuZCBtb3ZlIG9wZXJhdGlvbnMuXG4gKlxuICogSW4gb3JkZXIgdG8gdXNlIHRoaXMgYmVoYXZpb3IsIGluaGVyaXQgZnJvbSBpdCBhbmQgb3ZlcnJpZGVcbiAqIHRoZSBtZXRob2Qge0BsaW5rIE9yZGVyaW5nUHJvdmlkZXIjZ2V0T3JkZXJpbmd9LlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogZnVuY3Rpb24gQ3VzdG9tT3JkZXJpbmdQcm92aWRlcihldmVudEJ1cykge1xuICogICBPcmRlcmluZ1Byb3ZpZGVyLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuICpcbiAqICAgdGhpcy5nZXRPcmRlcmluZyA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5ld1BhcmVudCkge1xuICogICAgIC8vIGFsd2F5cyBpbnNlcnQgZWxlbWVudHMgYXQgdGhlIGZyb250XG4gKiAgICAgLy8gd2hlbiBtb3ZpbmdcbiAqICAgICByZXR1cm4ge1xuICogICAgICAgaW5kZXg6IDAsXG4gKiAgICAgICBwYXJlbnQ6IG5ld1BhcmVudFxuICogICAgIH07XG4gKiAgIH07XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBPcmRlcmluZ1Byb3ZpZGVyKGV2ZW50QnVzKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMucHJlRXhlY3V0ZShbICdzaGFwZS5jcmVhdGUnLCAnY29ubmVjdGlvbi5jcmVhdGUnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LnNoYXBlIHx8IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgcGFyZW50ID0gY29udGV4dC5wYXJlbnQ7XG5cbiAgICB2YXIgb3JkZXJpbmcgPSBzZWxmLmdldE9yZGVyaW5nKGVsZW1lbnQsIHBhcmVudCk7XG5cbiAgICBpZiAob3JkZXJpbmcpIHtcblxuICAgICAgaWYgKG9yZGVyaW5nLnBhcmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRleHQucGFyZW50ID0gb3JkZXJpbmcucGFyZW50O1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnBhcmVudEluZGV4ID0gb3JkZXJpbmcuaW5kZXg7XG4gICAgfVxuICB9KTtcblxuICB0aGlzLnByZUV4ZWN1dGUoWyAnc2hhcGUubW92ZScsICdjb25uZWN0aW9uLm1vdmUnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LnNoYXBlIHx8IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgcGFyZW50ID0gY29udGV4dC5uZXdQYXJlbnQgfHwgZWxlbWVudC5wYXJlbnQ7XG5cbiAgICB2YXIgb3JkZXJpbmcgPSBzZWxmLmdldE9yZGVyaW5nKGVsZW1lbnQsIHBhcmVudCk7XG5cbiAgICBpZiAob3JkZXJpbmcpIHtcblxuICAgICAgaWYgKG9yZGVyaW5nLnBhcmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRleHQubmV3UGFyZW50ID0gb3JkZXJpbmcucGFyZW50O1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm5ld1BhcmVudEluZGV4ID0gb3JkZXJpbmcuaW5kZXg7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSBjdXN0b20gb3JkZXJpbmcgb2YgdGhlIGVsZW1lbnQsIGJvdGggaW4gdGVybXNcbiAqIG9mIHBhcmVudCBlbGVtZW50IGFuZCBpbmRleCBpbiB0aGUgbmV3IHBhcmVudC5cbiAqXG4gKiBJbXBsZW1lbnRvcnMgb2YgdGhpcyBtZXRob2QgbXVzdCByZXR1cm4gYW4gb2JqZWN0IHdpdGhcbiAqIGBwYXJlbnRgIF9hbmRfIGBpbmRleGAgaW4gaXQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IG5ld1BhcmVudFxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gb3JkZXJpbmcgZGVzY3JpcHRvclxuICovXG5PcmRlcmluZ1Byb3ZpZGVyLnByb3RvdHlwZS5nZXRPcmRlcmluZyA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5ld1BhcmVudCkge1xuICByZXR1cm4gbnVsbDtcbn07XG5cbmluaGVyaXRzKE9yZGVyaW5nUHJvdmlkZXIsIENvbW1hbmRJbnRlcmNlcHRvcik7IiwiaW1wb3J0IHsgZ2V0QkJveCB9IGZyb20gJy4uLy4uL3V0aWwvRWxlbWVudHMnO1xuXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xuXG5pbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQge1xuICBxdWVyeSBhcyBkb21RdWVyeVxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHtcbiAgYXNzaWduXG59IGZyb20gJ21pbi1kYXNoJztcblxuXG4vKipcbiAqIEBjbGFzc1xuICpcbiAqIEEgcGx1Z2luIHRoYXQgYWRkcyBhbiBvdXRsaW5lIHRvIHNoYXBlcyBhbmQgY29ubmVjdGlvbnMgdGhhdCBtYXkgYmUgYWN0aXZhdGVkIGFuZCBzdHlsZWRcbiAqIHZpYSBDU1MgY2xhc3Nlcy5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtTdHlsZXN9IHN0eWxlc1xuICogQHBhcmFtIHtFbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBPdXRsaW5lKGV2ZW50QnVzLCBzdHlsZXMsIGVsZW1lbnRSZWdpc3RyeSkge1xuXG4gIHRoaXMub2Zmc2V0ID0gNjtcblxuICB2YXIgT1VUTElORV9TVFlMRSA9IHN0eWxlcy5jbHMoJ2Rqcy1vdXRsaW5lJywgWyAnbm8tZmlsbCcgXSk7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZU91dGxpbmUoZ2Z4LCBib3VuZHMpIHtcbiAgICB2YXIgb3V0bGluZSA9IHN2Z0NyZWF0ZSgncmVjdCcpO1xuXG4gICAgc3ZnQXR0cihvdXRsaW5lLCBhc3NpZ24oe1xuICAgICAgeDogMTAsXG4gICAgICB5OiAxMCxcbiAgICAgIHdpZHRoOiAxMDAsXG4gICAgICBoZWlnaHQ6IDEwMFxuICAgIH0sIE9VVExJTkVfU1RZTEUpKTtcblxuICAgIHN2Z0FwcGVuZChnZngsIG91dGxpbmUpO1xuXG4gICAgcmV0dXJuIG91dGxpbmU7XG4gIH1cblxuICAvLyBBIGxvdyBwcmlvcnRpdHkgaXMgbmVjZXNzYXJ5LCBiZWNhdXNlIG91dGxpbmVzIG9mIGxhYmVscyBoYXZlIHRvIGJlIHVwZGF0ZWRcbiAgLy8gYWZ0ZXIgdGhlIGxhYmVsIGJvdW5kcyBoYXZlIGJlZW4gdXBkYXRlZCBpbiB0aGUgcmVuZGVyZXIuXG4gIGV2ZW50QnVzLm9uKFsgJ3NoYXBlLmFkZGVkJywgJ3NoYXBlLmNoYW5nZWQnIF0sIExPV19QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQsXG4gICAgICAgIGdmeCA9IGV2ZW50LmdmeDtcblxuICAgIHZhciBvdXRsaW5lID0gZG9tUXVlcnkoJy5kanMtb3V0bGluZScsIGdmeCk7XG5cbiAgICBpZiAoIW91dGxpbmUpIHtcbiAgICAgIG91dGxpbmUgPSBjcmVhdGVPdXRsaW5lKGdmeCwgZWxlbWVudCk7XG4gICAgfVxuXG4gICAgc2VsZi51cGRhdGVTaGFwZU91dGxpbmUob3V0bGluZSwgZWxlbWVudCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKFsgJ2Nvbm5lY3Rpb24uYWRkZWQnLCAnY29ubmVjdGlvbi5jaGFuZ2VkJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgZ2Z4ID0gZXZlbnQuZ2Z4O1xuXG4gICAgdmFyIG91dGxpbmUgPSBkb21RdWVyeSgnLmRqcy1vdXRsaW5lJywgZ2Z4KTtcblxuICAgIGlmICghb3V0bGluZSkge1xuICAgICAgb3V0bGluZSA9IGNyZWF0ZU91dGxpbmUoZ2Z4LCBlbGVtZW50KTtcbiAgICB9XG5cbiAgICBzZWxmLnVwZGF0ZUNvbm5lY3Rpb25PdXRsaW5lKG91dGxpbmUsIGVsZW1lbnQpO1xuICB9KTtcbn1cblxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG91dGxpbmUgb2YgYSBzaGFwZSByZXNwZWN0aW5nIHRoZSBkaW1lbnNpb24gb2YgdGhlXG4gKiBlbGVtZW50IGFuZCBhbiBvdXRsaW5lIG9mZnNldC5cbiAqXG4gKiBAcGFyYW0gIHtTVkdFbGVtZW50fSBvdXRsaW5lXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICovXG5PdXRsaW5lLnByb3RvdHlwZS51cGRhdGVTaGFwZU91dGxpbmUgPSBmdW5jdGlvbihvdXRsaW5lLCBlbGVtZW50KSB7XG5cbiAgc3ZnQXR0cihvdXRsaW5lLCB7XG4gICAgeDogLXRoaXMub2Zmc2V0LFxuICAgIHk6IC10aGlzLm9mZnNldCxcbiAgICB3aWR0aDogZWxlbWVudC53aWR0aCArIHRoaXMub2Zmc2V0ICogMixcbiAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0ICsgdGhpcy5vZmZzZXQgKiAyXG4gIH0pO1xuXG59O1xuXG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb3V0bGluZSBvZiBhIGNvbm5lY3Rpb24gcmVzcGVjdGluZyB0aGUgYm91bmRpbmcgYm94IG9mXG4gKiB0aGUgY29ubmVjdGlvbiBhbmQgYW4gb3V0bGluZSBvZmZzZXQuXG4gKlxuICogQHBhcmFtICB7U1ZHRWxlbWVudH0gb3V0bGluZVxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqL1xuT3V0bGluZS5wcm90b3R5cGUudXBkYXRlQ29ubmVjdGlvbk91dGxpbmUgPSBmdW5jdGlvbihvdXRsaW5lLCBjb25uZWN0aW9uKSB7XG5cbiAgdmFyIGJib3ggPSBnZXRCQm94KGNvbm5lY3Rpb24pO1xuXG4gIHN2Z0F0dHIob3V0bGluZSwge1xuICAgIHg6IGJib3gueCAtIHRoaXMub2Zmc2V0LFxuICAgIHk6IGJib3gueSAtIHRoaXMub2Zmc2V0LFxuICAgIHdpZHRoOiBiYm94LndpZHRoICsgdGhpcy5vZmZzZXQgKiAyLFxuICAgIGhlaWdodDogYmJveC5oZWlnaHQgKyB0aGlzLm9mZnNldCAqIDJcbiAgfSk7XG5cbn07XG5cblxuT3V0bGluZS4kaW5qZWN0ID0gWydldmVudEJ1cycsICdzdHlsZXMnLCAnZWxlbWVudFJlZ2lzdHJ5J107IiwiaW1wb3J0IE91dGxpbmUgZnJvbSAnLi9PdXRsaW5lJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAnb3V0bGluZScgXSxcbiAgb3V0bGluZTogWyAndHlwZScsIE91dGxpbmUgXVxufTsiLCJpbXBvcnQge1xuICBpc0FycmF5LFxuICBpc1N0cmluZyxcbiAgaXNPYmplY3QsXG4gIGFzc2lnbixcbiAgZm9yRWFjaCxcbiAgZmluZCxcbiAgZmlsdGVyLFxuICBtYXRjaFBhdHRlcm4sXG4gIGlzRGVmaW5lZFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGRvbWlmeSxcbiAgY2xhc3NlcyBhcyBkb21DbGFzc2VzLFxuICBhdHRyIGFzIGRvbUF0dHIsXG4gIHJlbW92ZSBhcyBkb21SZW1vdmUsXG4gIGNsZWFyIGFzIGRvbUNsZWFyXG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICBnZXRCQm94XG59IGZyb20gJy4uLy4uL3V0aWwvRWxlbWVudHMnO1xuXG5pbXBvcnQgSWRzIGZyb20gJy4uLy4uL3V0aWwvSWRHZW5lcmF0b3InO1xuXG4vLyBkb2N1bWVudCB3aWRlIHVuaXF1ZSBvdmVybGF5IGlkc1xudmFyIGlkcyA9IG5ldyBJZHMoJ292Jyk7XG5cbnZhciBMT1dfUFJJT1JJVFkgPSA1MDA7XG5cblxuLyoqXG4gKiBBIHNlcnZpY2UgdGhhdCBhbGxvd3MgdXNlcnMgdG8gYXR0YWNoIG92ZXJsYXlzIHRvIGRpYWdyYW0gZWxlbWVudHMuXG4gKlxuICogVGhlIG92ZXJsYXkgc2VydmljZSB3aWxsIHRha2UgY2FyZSBvZiBvdmVybGF5IHBvc2l0aW9uaW5nIGR1cmluZyB1cGRhdGVzLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogLy8gYWRkIGEgcGluayBiYWRnZSBvbiB0aGUgdG9wIGxlZnQgb2YgdGhlIHNoYXBlXG4gKiBvdmVybGF5cy5hZGQoc29tZVNoYXBlLCB7XG4gKiAgIHBvc2l0aW9uOiB7XG4gKiAgICAgdG9wOiAtNSxcbiAqICAgICBsZWZ0OiAtNVxuICogICB9LFxuICogICBodG1sOiAnPGRpdiBzdHlsZT1cIndpZHRoOiAxMHB4OyBiYWNrZ3JvdW5kOiBmdWNoc2lhOyBjb2xvcjogd2hpdGU7XCI+MDwvZGl2PidcbiAqIH0pO1xuICpcbiAqIC8vIG9yIGFkZCB2aWEgc2hhcGUgaWRcbiAqXG4gKiBvdmVybGF5cy5hZGQoJ3NvbWUtZWxlbWVudC1pZCcsIHtcbiAqICAgcG9zaXRpb246IHtcbiAqICAgICB0b3A6IC01LFxuICogICAgIGxlZnQ6IC01XG4gKiAgIH1cbiAqICAgaHRtbDogJzxkaXYgc3R5bGU9XCJ3aWR0aDogMTBweDsgYmFja2dyb3VuZDogZnVjaHNpYTsgY29sb3I6IHdoaXRlO1wiPjA8L2Rpdj4nXG4gKiB9KTtcbiAqXG4gKiAvLyBvciBhZGQgd2l0aCBvcHRpb25hbCB0eXBlXG4gKlxuICogb3ZlcmxheXMuYWRkKHNvbWVTaGFwZSwgJ2JhZGdlJywge1xuICogICBwb3NpdGlvbjoge1xuICogICAgIHRvcDogLTUsXG4gKiAgICAgbGVmdDogLTVcbiAqICAgfVxuICogICBodG1sOiAnPGRpdiBzdHlsZT1cIndpZHRoOiAxMHB4OyBiYWNrZ3JvdW5kOiBmdWNoc2lhOyBjb2xvcjogd2hpdGU7XCI+MDwvZGl2PidcbiAqIH0pO1xuICpcbiAqXG4gKiAvLyByZW1vdmUgYW4gb3ZlcmxheVxuICpcbiAqIHZhciBpZCA9IG92ZXJsYXlzLmFkZCguLi4pO1xuICogb3ZlcmxheXMucmVtb3ZlKGlkKTtcbiAqXG4gKlxuICogWW91IG1heSBjb25maWd1cmUgb3ZlcmxheSBkZWZhdWx0cyBkdXJpbmcgdG9vbCBieSBwcm92aWRpbmcgYSBgY29uZmlnYCBtb2R1bGVcbiAqIHdpdGggYG92ZXJsYXlzLmRlZmF1bHRzYCBhcyBhbiBlbnRyeTpcbiAqXG4gKiB7XG4gKiAgIG92ZXJsYXlzOiB7XG4gKiAgICAgZGVmYXVsdHM6IHtcbiAqICAgICAgIHNob3c6IHtcbiAqICAgICAgICAgbWluWm9vbTogMC43LFxuICogICAgICAgICBtYXhab29tOiA1LjBcbiAqICAgICAgIH0sXG4gKiAgICAgICBzY2FsZToge1xuICogICAgICAgICBtaW46IDFcbiAqICAgICAgIH1cbiAqICAgICB9XG4gKiB9XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZ1xuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gT3ZlcmxheXMoY29uZmlnLCBldmVudEJ1cywgY2FudmFzLCBlbGVtZW50UmVnaXN0cnkpIHtcblxuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcblxuICB0aGlzLl9pZHMgPSBpZHM7XG5cbiAgdGhpcy5fb3ZlcmxheURlZmF1bHRzID0gYXNzaWduKHtcblxuICAgIC8vIG5vIHNob3cgY29uc3RyYWludHNcbiAgICBzaG93OiBudWxsLFxuXG4gICAgLy8gYWx3YXlzIHNjYWxlXG4gICAgc2NhbGU6IHRydWVcbiAgfSwgY29uZmlnICYmIGNvbmZpZy5kZWZhdWx0cyk7XG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgb3ZlcmxheUlkIC0+IG92ZXJsYXlcbiAgICovXG4gIHRoaXMuX292ZXJsYXlzID0ge307XG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgZWxlbWVudElkIC0+IG92ZXJsYXkgY29udGFpbmVyXG4gICAqL1xuICB0aGlzLl9vdmVybGF5Q29udGFpbmVycyA9IFtdO1xuXG4gIC8vIHJvb3QgaHRtbCBlbGVtZW50IGZvciBhbGwgb3ZlcmxheXNcbiAgdGhpcy5fb3ZlcmxheVJvb3QgPSBjcmVhdGVSb290KGNhbnZhcy5nZXRDb250YWluZXIoKSk7XG5cbiAgdGhpcy5faW5pdCgpO1xufVxuXG5cbk92ZXJsYXlzLiRpbmplY3QgPSBbXG4gICdjb25maWcub3ZlcmxheXMnLFxuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeSdcbl07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvdmVybGF5IHdpdGggdGhlIHNwZWNpZmllZCBpZCBvciBhIGxpc3Qgb2Ygb3ZlcmxheXNcbiAqIGZvciBhbiBlbGVtZW50IHdpdGggYSBnaXZlbiB0eXBlLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogLy8gcmV0dXJuIHRoZSBzaW5nbGUgb3ZlcmxheSB3aXRoIHRoZSBnaXZlbiBpZFxuICogb3ZlcmxheXMuZ2V0KCdzb21lLWlkJyk7XG4gKlxuICogLy8gcmV0dXJuIGFsbCBvdmVybGF5cyBmb3IgdGhlIHNoYXBlXG4gKiBvdmVybGF5cy5nZXQoeyBlbGVtZW50OiBzb21lU2hhcGUgfSk7XG4gKlxuICogLy8gcmV0dXJuIGFsbCBvdmVybGF5cyBvbiBzaGFwZSB3aXRoIHR5cGUgJ2JhZGdlJ1xuICogb3ZlcmxheXMuZ2V0KHsgZWxlbWVudDogc29tZVNoYXBlLCB0eXBlOiAnYmFkZ2UnIH0pO1xuICpcbiAqIC8vIHNoYXBlIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBhcyBpZFxuICogb3ZlcmxheXMuZ2V0KHsgZWxlbWVudDogJ2VsZW1lbnQtaWQnLCB0eXBlOiAnYmFkZ2UnIH0pO1xuICpcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc2VhcmNoXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NlYXJjaC5pZF1cbiAqIEBwYXJhbSB7c3RyaW5nfGRqcy5tb2RlbC5CYXNlfSBbc2VhcmNoLmVsZW1lbnRdXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NlYXJjaC50eXBlXVxuICpcbiAqIEByZXR1cm4ge09iamVjdHxBcnJheTxPYmplY3Q+fSB0aGUgb3ZlcmxheShzKVxuICovXG5PdmVybGF5cy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oc2VhcmNoKSB7XG5cbiAgaWYgKGlzU3RyaW5nKHNlYXJjaCkpIHtcbiAgICBzZWFyY2ggPSB7IGlkOiBzZWFyY2ggfTtcbiAgfVxuXG4gIGlmIChpc1N0cmluZyhzZWFyY2guZWxlbWVudCkpIHtcbiAgICBzZWFyY2guZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5nZXQoc2VhcmNoLmVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKHNlYXJjaC5lbGVtZW50KSB7XG4gICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2dldE92ZXJsYXlDb250YWluZXIoc2VhcmNoLmVsZW1lbnQsIHRydWUpO1xuXG4gICAgLy8gcmV0dXJuIGEgbGlzdCBvZiBvdmVybGF5cyB3aGVuIHNlYXJjaGluZyBieSBlbGVtZW50ICgrdHlwZSlcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICByZXR1cm4gc2VhcmNoLnR5cGUgPyBmaWx0ZXIoY29udGFpbmVyLm92ZXJsYXlzLCBtYXRjaFBhdHRlcm4oeyB0eXBlOiBzZWFyY2gudHlwZSB9KSkgOiBjb250YWluZXIub3ZlcmxheXMuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfSBlbHNlXG4gIGlmIChzZWFyY2gudHlwZSkge1xuICAgIHJldHVybiBmaWx0ZXIodGhpcy5fb3ZlcmxheXMsIG1hdGNoUGF0dGVybih7IHR5cGU6IHNlYXJjaC50eXBlIH0pKTtcbiAgfSBlbHNlIHtcblxuICAgIC8vIHJldHVybiBzaW5nbGUgZWxlbWVudCB3aGVuIHNlYXJjaGluZyBieSBpZFxuICAgIHJldHVybiBzZWFyY2guaWQgPyB0aGlzLl9vdmVybGF5c1tzZWFyY2guaWRdIDogbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBBZGRzIGEgSFRNTCBvdmVybGF5IHRvIGFuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8ZGpzLm1vZGVsLkJhc2V9ICAgZWxlbWVudCAgIGF0dGFjaCBvdmVybGF5IHRvIHRoaXMgc2hhcGVcbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgIFt0eXBlXSAgICBvcHRpb25hbCB0eXBlIHRvIGFzc2lnbiB0byB0aGUgb3ZlcmxheVxuICogQHBhcmFtIHtPYmplY3R9ICAgICAgICAgICAgICAgICAgb3ZlcmxheSAgIHRoZSBvdmVybGF5IGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xET01FbGVtZW50fSAgICAgICBvdmVybGF5Lmh0bWwgICAgICAgICAgICAgICAgIGh0bWwgZWxlbWVudCB0byB1c2UgYXMgYW4gb3ZlcmxheVxuICogQHBhcmFtIHtPYmplY3R9ICAgICAgICAgICAgICAgICAgW292ZXJsYXkuc2hvd10gICAgICAgICAgICAgICBzaG93IGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgICAgIFtvdmVybGF5LnNob3cubWluWm9vbV0gICAgICAgbWluaW1hbCB6b29tIGxldmVsIHRvIHNob3cgdGhlIG92ZXJsYXlcbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgICAgIFtvdmVybGF5LnNob3cubWF4Wm9vbV0gICAgICAgbWF4aW11bSB6b29tIGxldmVsIHRvIHNob3cgdGhlIG92ZXJsYXlcbiAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgICAgIG92ZXJsYXkucG9zaXRpb24gICAgICAgICAgICAgd2hlcmUgdG8gYXR0YWNoIHRoZSBvdmVybGF5XG4gKiBAcGFyYW0ge251bWJlcn0gICAgICAgICAgICAgICAgICBbb3ZlcmxheS5wb3NpdGlvbi5sZWZ0XSAgICAgIHJlbGF0aXZlIHRvIGVsZW1lbnQgYmJveCBsZWZ0IGF0dGFjaG1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgICAgIFtvdmVybGF5LnBvc2l0aW9uLnRvcF0gICAgICAgcmVsYXRpdmUgdG8gZWxlbWVudCBiYm94IHRvcCBhdHRhY2htZW50XG4gKiBAcGFyYW0ge251bWJlcn0gICAgICAgICAgICAgICAgICBbb3ZlcmxheS5wb3NpdGlvbi5ib3R0b21dICAgIHJlbGF0aXZlIHRvIGVsZW1lbnQgYmJveCBib3R0b20gYXR0YWNobWVudFxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgICAgICAgICAgICAgW292ZXJsYXkucG9zaXRpb24ucmlnaHRdICAgICByZWxhdGl2ZSB0byBlbGVtZW50IGJib3ggcmlnaHQgYXR0YWNobWVudFxuICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gICAgICAgICAgW292ZXJsYXkuc2NhbGU9dHJ1ZV0gICAgICAgICBmYWxzZSB0byBwcmVzZXJ2ZSB0aGUgc2FtZSBzaXplIHJlZ2FyZGxlc3Mgb2ZcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhZ3JhbSB6b29tXG4gKiBAcGFyYW0ge251bWJlcn0gICAgICAgICAgICAgICAgICBbb3ZlcmxheS5zY2FsZS5taW5dXG4gKiBAcGFyYW0ge251bWJlcn0gICAgICAgICAgICAgICAgICBbb3ZlcmxheS5zY2FsZS5tYXhdXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgICAgICAgaWQgdGhhdCBtYXkgYmUgdXNlZCB0byByZWZlcmVuY2UgdGhlIG92ZXJsYXkgZm9yIHVwZGF0ZSBvciByZW1vdmFsXG4gKi9cbk92ZXJsYXlzLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihlbGVtZW50LCB0eXBlLCBvdmVybGF5KSB7XG5cbiAgaWYgKGlzT2JqZWN0KHR5cGUpKSB7XG4gICAgb3ZlcmxheSA9IHR5cGU7XG4gICAgdHlwZSA9IG51bGw7XG4gIH1cblxuICBpZiAoIWVsZW1lbnQuaWQpIHtcbiAgICBlbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldChlbGVtZW50KTtcbiAgfVxuXG4gIGlmICghb3ZlcmxheS5wb3NpdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVzdCBzcGVjaWZpeSBvdmVybGF5IHBvc2l0aW9uJyk7XG4gIH1cblxuICBpZiAoIW92ZXJsYXkuaHRtbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVzdCBzcGVjaWZpeSBvdmVybGF5IGh0bWwnKTtcbiAgfVxuXG4gIGlmICghZWxlbWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBlbGVtZW50IHNwZWNpZmllZCcpO1xuICB9XG5cbiAgdmFyIGlkID0gdGhpcy5faWRzLm5leHQoKTtcblxuICBvdmVybGF5ID0gYXNzaWduKHt9LCB0aGlzLl9vdmVybGF5RGVmYXVsdHMsIG92ZXJsYXksIHtcbiAgICBpZDogaWQsXG4gICAgdHlwZTogdHlwZSxcbiAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgIGh0bWw6IG92ZXJsYXkuaHRtbFxuICB9KTtcblxuICB0aGlzLl9hZGRPdmVybGF5KG92ZXJsYXkpO1xuXG4gIHJldHVybiBpZDtcbn07XG5cblxuLyoqXG4gKiBSZW1vdmUgYW4gb3ZlcmxheSB3aXRoIHRoZSBnaXZlbiBpZCBvciBhbGwgb3ZlcmxheXMgbWF0Y2hpbmcgdGhlIGdpdmVuIGZpbHRlci5cbiAqXG4gKiBAc2VlIE92ZXJsYXlzI2dldCBmb3IgZmlsdGVyIG9wdGlvbnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtpZF1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbZmlsdGVyXVxuICovXG5PdmVybGF5cy5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oZmlsdGVyKSB7XG5cbiAgdmFyIG92ZXJsYXlzID0gdGhpcy5nZXQoZmlsdGVyKSB8fCBbXTtcblxuICBpZiAoIWlzQXJyYXkob3ZlcmxheXMpKSB7XG4gICAgb3ZlcmxheXMgPSBbIG92ZXJsYXlzIF07XG4gIH1cblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZm9yRWFjaChvdmVybGF5cywgZnVuY3Rpb24ob3ZlcmxheSkge1xuXG4gICAgdmFyIGNvbnRhaW5lciA9IHNlbGYuX2dldE92ZXJsYXlDb250YWluZXIob3ZlcmxheS5lbGVtZW50LCB0cnVlKTtcblxuICAgIGlmIChvdmVybGF5KSB7XG4gICAgICBkb21SZW1vdmUob3ZlcmxheS5odG1sKTtcbiAgICAgIGRvbVJlbW92ZShvdmVybGF5Lmh0bWxDb250YWluZXIpO1xuXG4gICAgICBkZWxldGUgb3ZlcmxheS5odG1sQ29udGFpbmVyO1xuICAgICAgZGVsZXRlIG92ZXJsYXkuZWxlbWVudDtcblxuICAgICAgZGVsZXRlIHNlbGYuX292ZXJsYXlzW292ZXJsYXkuaWRdO1xuICAgIH1cblxuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIHZhciBpZHggPSBjb250YWluZXIub3ZlcmxheXMuaW5kZXhPZihvdmVybGF5KTtcbiAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgIGNvbnRhaW5lci5vdmVybGF5cy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG59O1xuXG5cbk92ZXJsYXlzLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24oKSB7XG4gIHNldFZpc2libGUodGhpcy5fb3ZlcmxheVJvb3QpO1xufTtcblxuXG5PdmVybGF5cy5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uKCkge1xuICBzZXRWaXNpYmxlKHRoaXMuX292ZXJsYXlSb290LCBmYWxzZSk7XG59O1xuXG5PdmVybGF5cy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fb3ZlcmxheXMgPSB7fTtcblxuICB0aGlzLl9vdmVybGF5Q29udGFpbmVycyA9IFtdO1xuXG4gIGRvbUNsZWFyKHRoaXMuX292ZXJsYXlSb290KTtcbn07XG5cbk92ZXJsYXlzLnByb3RvdHlwZS5fdXBkYXRlT3ZlcmxheUNvbnRhaW5lciA9IGZ1bmN0aW9uKGNvbnRhaW5lcikge1xuICB2YXIgZWxlbWVudCA9IGNvbnRhaW5lci5lbGVtZW50LFxuICAgICAgaHRtbCA9IGNvbnRhaW5lci5odG1sO1xuXG4gIC8vIHVwZGF0ZSBjb250YWluZXIgbGVmdCx0b3AgYWNjb3JkaW5nIHRvIHRoZSBlbGVtZW50cyB4LHkgY29vcmRpbmF0ZXNcbiAgLy8gdGhpcyBlbnN1cmVzIHdlIGNhbiBhdHRhY2ggY2hpbGQgZWxlbWVudHMgcmVsYXRpdmUgdG8gdGhpcyBjb250YWluZXJcblxuICB2YXIgeCA9IGVsZW1lbnQueCxcbiAgICAgIHkgPSBlbGVtZW50Lnk7XG5cbiAgaWYgKGVsZW1lbnQud2F5cG9pbnRzKSB7XG4gICAgdmFyIGJib3ggPSBnZXRCQm94KGVsZW1lbnQpO1xuICAgIHggPSBiYm94Lng7XG4gICAgeSA9IGJib3gueTtcbiAgfVxuXG4gIHNldFBvc2l0aW9uKGh0bWwsIHgsIHkpO1xuXG4gIGRvbUF0dHIoY29udGFpbmVyLmh0bWwsICdkYXRhLWNvbnRhaW5lci1pZCcsIGVsZW1lbnQuaWQpO1xufTtcblxuXG5PdmVybGF5cy5wcm90b3R5cGUuX3VwZGF0ZU92ZXJsYXkgPSBmdW5jdGlvbihvdmVybGF5KSB7XG5cbiAgdmFyIHBvc2l0aW9uID0gb3ZlcmxheS5wb3NpdGlvbixcbiAgICAgIGh0bWxDb250YWluZXIgPSBvdmVybGF5Lmh0bWxDb250YWluZXIsXG4gICAgICBlbGVtZW50ID0gb3ZlcmxheS5lbGVtZW50O1xuXG4gIC8vIHVwZGF0ZSBvdmVybGF5IGh0bWwgcmVsYXRpdmUgdG8gc2hhcGUgYmVjYXVzZVxuICAvLyBpdCBpcyBhbHJlYWR5IHBvc2l0aW9uZWQgb24gdGhlIGVsZW1lbnRcblxuICAvLyB1cGRhdGUgcmVsYXRpdmVcbiAgdmFyIGxlZnQgPSBwb3NpdGlvbi5sZWZ0LFxuICAgICAgdG9wID0gcG9zaXRpb24udG9wO1xuXG4gIGlmIChwb3NpdGlvbi5yaWdodCAhPT0gdW5kZWZpbmVkKSB7XG5cbiAgICB2YXIgd2lkdGg7XG5cbiAgICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcbiAgICAgIHdpZHRoID0gZ2V0QkJveChlbGVtZW50KS53aWR0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgd2lkdGggPSBlbGVtZW50LndpZHRoO1xuICAgIH1cblxuICAgIGxlZnQgPSBwb3NpdGlvbi5yaWdodCAqIC0xICsgd2lkdGg7XG4gIH1cblxuICBpZiAocG9zaXRpb24uYm90dG9tICE9PSB1bmRlZmluZWQpIHtcblxuICAgIHZhciBoZWlnaHQ7XG5cbiAgICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcbiAgICAgIGhlaWdodCA9IGdldEJCb3goZWxlbWVudCkuaGVpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWlnaHQgPSBlbGVtZW50LmhlaWdodDtcbiAgICB9XG5cbiAgICB0b3AgPSBwb3NpdGlvbi5ib3R0b20gKiAtMSArIGhlaWdodDtcbiAgfVxuXG4gIHNldFBvc2l0aW9uKGh0bWxDb250YWluZXIsIGxlZnQgfHwgMCwgdG9wIHx8IDApO1xufTtcblxuXG5PdmVybGF5cy5wcm90b3R5cGUuX2NyZWF0ZU92ZXJsYXlDb250YWluZXIgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHZhciBodG1sID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiZGpzLW92ZXJsYXlzXCIgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGVcIiAvPicpO1xuXG4gIHRoaXMuX292ZXJsYXlSb290LmFwcGVuZENoaWxkKGh0bWwpO1xuXG4gIHZhciBjb250YWluZXIgPSB7XG4gICAgaHRtbDogaHRtbCxcbiAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgIG92ZXJsYXlzOiBbXVxuICB9O1xuXG4gIHRoaXMuX3VwZGF0ZU92ZXJsYXlDb250YWluZXIoY29udGFpbmVyKTtcblxuICB0aGlzLl9vdmVybGF5Q29udGFpbmVycy5wdXNoKGNvbnRhaW5lcik7XG5cbiAgcmV0dXJuIGNvbnRhaW5lcjtcbn07XG5cblxuT3ZlcmxheXMucHJvdG90eXBlLl91cGRhdGVSb290ID0gZnVuY3Rpb24odmlld2JveCkge1xuICB2YXIgc2NhbGUgPSB2aWV3Ym94LnNjYWxlIHx8IDE7XG5cbiAgdmFyIG1hdHJpeCA9ICdtYXRyaXgoJyArXG4gIFtcbiAgICBzY2FsZSxcbiAgICAwLFxuICAgIDAsXG4gICAgc2NhbGUsXG4gICAgLTEgKiB2aWV3Ym94LnggKiBzY2FsZSxcbiAgICAtMSAqIHZpZXdib3gueSAqIHNjYWxlXG4gIF0uam9pbignLCcpICtcbiAgJyknO1xuXG4gIHNldFRyYW5zZm9ybSh0aGlzLl9vdmVybGF5Um9vdCwgbWF0cml4KTtcbn07XG5cblxuT3ZlcmxheXMucHJvdG90eXBlLl9nZXRPdmVybGF5Q29udGFpbmVyID0gZnVuY3Rpb24oZWxlbWVudCwgcmF3KSB7XG4gIHZhciBjb250YWluZXIgPSBmaW5kKHRoaXMuX292ZXJsYXlDb250YWluZXJzLCBmdW5jdGlvbihjKSB7XG4gICAgcmV0dXJuIGMuZWxlbWVudCA9PT0gZWxlbWVudDtcbiAgfSk7XG5cblxuICBpZiAoIWNvbnRhaW5lciAmJiAhcmF3KSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZU92ZXJsYXlDb250YWluZXIoZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuXG5PdmVybGF5cy5wcm90b3R5cGUuX2FkZE92ZXJsYXkgPSBmdW5jdGlvbihvdmVybGF5KSB7XG5cbiAgdmFyIGlkID0gb3ZlcmxheS5pZCxcbiAgICAgIGVsZW1lbnQgPSBvdmVybGF5LmVsZW1lbnQsXG4gICAgICBodG1sID0gb3ZlcmxheS5odG1sLFxuICAgICAgaHRtbENvbnRhaW5lcixcbiAgICAgIG92ZXJsYXlDb250YWluZXI7XG5cbiAgLy8gdW53cmFwIGpxdWVyeSAoZm9yIHRob3NlIHdobyBuZWVkIGl0KVxuICBpZiAoaHRtbC5nZXQgJiYgaHRtbC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuanF1ZXJ5KSB7XG4gICAgaHRtbCA9IGh0bWwuZ2V0KDApO1xuICB9XG5cbiAgLy8gY3JlYXRlIHByb3BlciBodG1sIGVsZW1lbnRzIGZyb21cbiAgLy8gb3ZlcmxheSBIVE1MIHN0cmluZ3NcbiAgaWYgKGlzU3RyaW5nKGh0bWwpKSB7XG4gICAgaHRtbCA9IGRvbWlmeShodG1sKTtcbiAgfVxuXG4gIG92ZXJsYXlDb250YWluZXIgPSB0aGlzLl9nZXRPdmVybGF5Q29udGFpbmVyKGVsZW1lbnQpO1xuXG4gIGh0bWxDb250YWluZXIgPSBkb21pZnkoJzxkaXYgY2xhc3M9XCJkanMtb3ZlcmxheVwiIGRhdGEtb3ZlcmxheS1pZD1cIicgKyBpZCArICdcIiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZVwiPicpO1xuXG4gIGh0bWxDb250YWluZXIuYXBwZW5kQ2hpbGQoaHRtbCk7XG5cbiAgaWYgKG92ZXJsYXkudHlwZSkge1xuICAgIGRvbUNsYXNzZXMoaHRtbENvbnRhaW5lcikuYWRkKCdkanMtb3ZlcmxheS0nICsgb3ZlcmxheS50eXBlKTtcbiAgfVxuXG4gIG92ZXJsYXkuaHRtbENvbnRhaW5lciA9IGh0bWxDb250YWluZXI7XG5cbiAgb3ZlcmxheUNvbnRhaW5lci5vdmVybGF5cy5wdXNoKG92ZXJsYXkpO1xuICBvdmVybGF5Q29udGFpbmVyLmh0bWwuYXBwZW5kQ2hpbGQoaHRtbENvbnRhaW5lcik7XG5cbiAgdGhpcy5fb3ZlcmxheXNbaWRdID0gb3ZlcmxheTtcblxuICB0aGlzLl91cGRhdGVPdmVybGF5KG92ZXJsYXkpO1xuICB0aGlzLl91cGRhdGVPdmVybGF5VmlzaWJpbHR5KG92ZXJsYXksIHRoaXMuX2NhbnZhcy52aWV3Ym94KCkpO1xufTtcblxuXG5PdmVybGF5cy5wcm90b3R5cGUuX3VwZGF0ZU92ZXJsYXlWaXNpYmlsdHkgPSBmdW5jdGlvbihvdmVybGF5LCB2aWV3Ym94KSB7XG4gIHZhciBzaG93ID0gb3ZlcmxheS5zaG93LFxuICAgICAgbWluWm9vbSA9IHNob3cgJiYgc2hvdy5taW5ab29tLFxuICAgICAgbWF4Wm9vbSA9IHNob3cgJiYgc2hvdy5tYXhab29tLFxuICAgICAgaHRtbENvbnRhaW5lciA9IG92ZXJsYXkuaHRtbENvbnRhaW5lcixcbiAgICAgIHZpc2libGUgPSB0cnVlO1xuXG4gIGlmIChzaG93KSB7XG4gICAgaWYgKFxuICAgICAgKGlzRGVmaW5lZChtaW5ab29tKSAmJiBtaW5ab29tID4gdmlld2JveC5zY2FsZSkgfHxcbiAgICAgIChpc0RlZmluZWQobWF4Wm9vbSkgJiYgbWF4Wm9vbSA8IHZpZXdib3guc2NhbGUpXG4gICAgKSB7XG4gICAgICB2aXNpYmxlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgc2V0VmlzaWJsZShodG1sQ29udGFpbmVyLCB2aXNpYmxlKTtcbiAgfVxuXG4gIHRoaXMuX3VwZGF0ZU92ZXJsYXlTY2FsZShvdmVybGF5LCB2aWV3Ym94KTtcbn07XG5cblxuT3ZlcmxheXMucHJvdG90eXBlLl91cGRhdGVPdmVybGF5U2NhbGUgPSBmdW5jdGlvbihvdmVybGF5LCB2aWV3Ym94KSB7XG4gIHZhciBzaG91bGRTY2FsZSA9IG92ZXJsYXkuc2NhbGUsXG4gICAgICBtaW5TY2FsZSxcbiAgICAgIG1heFNjYWxlLFxuICAgICAgaHRtbENvbnRhaW5lciA9IG92ZXJsYXkuaHRtbENvbnRhaW5lcjtcblxuICB2YXIgc2NhbGUsIHRyYW5zZm9ybSA9ICcnO1xuXG4gIGlmIChzaG91bGRTY2FsZSAhPT0gdHJ1ZSkge1xuXG4gICAgaWYgKHNob3VsZFNjYWxlID09PSBmYWxzZSkge1xuICAgICAgbWluU2NhbGUgPSAxO1xuICAgICAgbWF4U2NhbGUgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBtaW5TY2FsZSA9IHNob3VsZFNjYWxlLm1pbjtcbiAgICAgIG1heFNjYWxlID0gc2hvdWxkU2NhbGUubWF4O1xuICAgIH1cblxuICAgIGlmIChpc0RlZmluZWQobWluU2NhbGUpICYmIHZpZXdib3guc2NhbGUgPCBtaW5TY2FsZSkge1xuICAgICAgc2NhbGUgPSAoMSAvIHZpZXdib3guc2NhbGUgfHwgMSkgKiBtaW5TY2FsZTtcbiAgICB9XG5cbiAgICBpZiAoaXNEZWZpbmVkKG1heFNjYWxlKSAmJiB2aWV3Ym94LnNjYWxlID4gbWF4U2NhbGUpIHtcbiAgICAgIHNjYWxlID0gKDEgLyB2aWV3Ym94LnNjYWxlIHx8IDEpICogbWF4U2NhbGU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzRGVmaW5lZChzY2FsZSkpIHtcbiAgICB0cmFuc2Zvcm0gPSAnc2NhbGUoJyArIHNjYWxlICsgJywnICsgc2NhbGUgKyAnKSc7XG4gIH1cblxuICBzZXRUcmFuc2Zvcm0oaHRtbENvbnRhaW5lciwgdHJhbnNmb3JtKTtcbn07XG5cblxuT3ZlcmxheXMucHJvdG90eXBlLl91cGRhdGVPdmVybGF5c1Zpc2liaWx0eSA9IGZ1bmN0aW9uKHZpZXdib3gpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZm9yRWFjaCh0aGlzLl9vdmVybGF5cywgZnVuY3Rpb24ob3ZlcmxheSkge1xuICAgIHNlbGYuX3VwZGF0ZU92ZXJsYXlWaXNpYmlsdHkob3ZlcmxheSwgdmlld2JveCk7XG4gIH0pO1xufTtcblxuXG5PdmVybGF5cy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgZXZlbnRCdXMgPSB0aGlzLl9ldmVudEJ1cztcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cblxuICAvLyBzY3JvbGwvem9vbSBpbnRlZ3JhdGlvblxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVZpZXdib3godmlld2JveCkge1xuICAgIHNlbGYuX3VwZGF0ZVJvb3Qodmlld2JveCk7XG4gICAgc2VsZi5fdXBkYXRlT3ZlcmxheXNWaXNpYmlsdHkodmlld2JveCk7XG5cbiAgICBzZWxmLnNob3coKTtcbiAgfVxuXG4gIGV2ZW50QnVzLm9uKCdjYW52YXMudmlld2JveC5jaGFuZ2luZycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgc2VsZi5oaWRlKCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjYW52YXMudmlld2JveC5jaGFuZ2VkJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB1cGRhdGVWaWV3Ym94KGV2ZW50LnZpZXdib3gpO1xuICB9KTtcblxuXG4gIC8vIHJlbW92ZSBpbnRlZ3JhdGlvblxuXG4gIGV2ZW50QnVzLm9uKFsgJ3NoYXBlLnJlbW92ZScsICdjb25uZWN0aW9uLnJlbW92ZScgXSwgZnVuY3Rpb24oZSkge1xuICAgIHZhciBlbGVtZW50ID0gZS5lbGVtZW50O1xuICAgIHZhciBvdmVybGF5cyA9IHNlbGYuZ2V0KHsgZWxlbWVudDogZWxlbWVudCB9KTtcblxuICAgIGZvckVhY2gob3ZlcmxheXMsIGZ1bmN0aW9uKG8pIHtcbiAgICAgIHNlbGYucmVtb3ZlKG8uaWQpO1xuICAgIH0pO1xuXG4gICAgdmFyIGNvbnRhaW5lciA9IHNlbGYuX2dldE92ZXJsYXlDb250YWluZXIoZWxlbWVudCk7XG5cbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBkb21SZW1vdmUoY29udGFpbmVyLmh0bWwpO1xuICAgICAgdmFyIGkgPSBzZWxmLl9vdmVybGF5Q29udGFpbmVycy5pbmRleE9mKGNvbnRhaW5lcik7XG4gICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgc2VsZi5fb3ZlcmxheUNvbnRhaW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cblxuICAvLyBtb3ZlIGludGVncmF0aW9uXG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQuY2hhbmdlZCcsIExPV19QUklPUklUWSwgZnVuY3Rpb24oZSkge1xuICAgIHZhciBlbGVtZW50ID0gZS5lbGVtZW50O1xuXG4gICAgdmFyIGNvbnRhaW5lciA9IHNlbGYuX2dldE92ZXJsYXlDb250YWluZXIoZWxlbWVudCwgdHJ1ZSk7XG5cbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBmb3JFYWNoKGNvbnRhaW5lci5vdmVybGF5cywgZnVuY3Rpb24ob3ZlcmxheSkge1xuICAgICAgICBzZWxmLl91cGRhdGVPdmVybGF5KG92ZXJsYXkpO1xuICAgICAgfSk7XG5cbiAgICAgIHNlbGYuX3VwZGF0ZU92ZXJsYXlDb250YWluZXIoY29udGFpbmVyKTtcbiAgICB9XG4gIH0pO1xuXG5cbiAgLy8gbWFya2VyIGludGVncmF0aW9uLCBzaW1wbHkgYWRkIHRoZW0gb24gdGhlIG92ZXJsYXlzIGFzIGNsYXNzZXMsIHRvby5cblxuICBldmVudEJ1cy5vbignZWxlbWVudC5tYXJrZXIudXBkYXRlJywgZnVuY3Rpb24oZSkge1xuICAgIHZhciBjb250YWluZXIgPSBzZWxmLl9nZXRPdmVybGF5Q29udGFpbmVyKGUuZWxlbWVudCwgdHJ1ZSk7XG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgZG9tQ2xhc3Nlcyhjb250YWluZXIuaHRtbClbZS5hZGQgPyAnYWRkJyA6ICdyZW1vdmUnXShlLm1hcmtlcik7XG4gICAgfVxuICB9KTtcblxuXG4gIC8vIGNsZWFyIG92ZXJsYXlzIHdpdGggZGlhZ3JhbVxuXG4gIGV2ZW50QnVzLm9uKCdkaWFncmFtLmNsZWFyJywgdGhpcy5jbGVhciwgdGhpcyk7XG59O1xuXG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBjcmVhdGVSb290KHBhcmVudE5vZGUpIHtcbiAgdmFyIHJvb3QgPSBkb21pZnkoXG4gICAgJzxkaXYgY2xhc3M9XCJkanMtb3ZlcmxheS1jb250YWluZXJcIiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgd2lkdGg6IDA7IGhlaWdodDogMDtcIiAvPidcbiAgKTtcblxuICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShyb290LCBwYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xuXG4gIHJldHVybiByb290O1xufVxuXG5mdW5jdGlvbiBzZXRQb3NpdGlvbihlbCwgeCwgeSkge1xuICBhc3NpZ24oZWwuc3R5bGUsIHsgbGVmdDogeCArICdweCcsIHRvcDogeSArICdweCcgfSk7XG59XG5cbmZ1bmN0aW9uIHNldFZpc2libGUoZWwsIHZpc2libGUpIHtcbiAgZWwuc3R5bGUuZGlzcGxheSA9IHZpc2libGUgPT09IGZhbHNlID8gJ25vbmUnIDogJyc7XG59XG5cbmZ1bmN0aW9uIHNldFRyYW5zZm9ybShlbCwgdHJhbnNmb3JtKSB7XG5cbiAgZWwuc3R5bGVbJ3RyYW5zZm9ybS1vcmlnaW4nXSA9ICd0b3AgbGVmdCc7XG5cbiAgWyAnJywgJy1tcy0nLCAnLXdlYmtpdC0nIF0uZm9yRWFjaChmdW5jdGlvbihwcmVmaXgpIHtcbiAgICBlbC5zdHlsZVtwcmVmaXggKyAndHJhbnNmb3JtJ10gPSB0cmFuc2Zvcm07XG4gIH0pO1xufSIsImltcG9ydCBPdmVybGF5cyBmcm9tICcuL092ZXJsYXlzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAnb3ZlcmxheXMnIF0sXG4gIG92ZXJsYXlzOiBbICd0eXBlJywgT3ZlcmxheXMgXVxufTsiLCJpbXBvcnQge1xuICBpc0FycmF5LFxuICBpc0Z1bmN0aW9uLFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZG9taWZ5LFxuICBxdWVyeSBhcyBkb21RdWVyeSxcbiAgYXR0ciBhcyBkb21BdHRyLFxuICBjbGVhciBhcyBkb21DbGVhcixcbiAgY2xhc3NlcyBhcyBkb21DbGFzc2VzLFxuICBtYXRjaGVzIGFzIGRvbU1hdGNoZXMsXG4gIGRlbGVnYXRlIGFzIGRvbURlbGVnYXRlLFxuICBldmVudCBhcyBkb21FdmVudFxufSBmcm9tICdtaW4tZG9tJztcblxuXG52YXIgVE9HR0xFX1NFTEVDVE9SID0gJy5kanMtcGFsZXR0ZS10b2dnbGUnLFxuICAgIEVOVFJZX1NFTEVDVE9SID0gJy5lbnRyeScsXG4gICAgRUxFTUVOVF9TRUxFQ1RPUiA9IFRPR0dMRV9TRUxFQ1RPUiArICcsICcgKyBFTlRSWV9TRUxFQ1RPUjtcblxudmFyIFBBTEVUVEVfT1BFTl9DTFMgPSAnb3BlbicsXG4gICAgUEFMRVRURV9UV09fQ09MVU1OX0NMUyA9ICd0d28tY29sdW1uJztcblxudmFyIERFRkFVTFRfUFJJT1JJVFkgPSAxMDAwO1xuXG5cbi8qKlxuICogQSBwYWxldHRlIGNvbnRhaW5pbmcgbW9kZWxpbmcgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFBhbGV0dGUoZXZlbnRCdXMsIGNhbnZhcykge1xuXG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRCdXMub24oJ3Rvb2wtbWFuYWdlci51cGRhdGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciB0b29sID0gZXZlbnQudG9vbDtcblxuICAgIHNlbGYudXBkYXRlVG9vbEhpZ2hsaWdodCh0b29sKTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2kxOG4uY2hhbmdlZCcsIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuX3VwZGF0ZSgpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignZGlhZ3JhbS5pbml0JywgZnVuY3Rpb24oKSB7XG5cbiAgICBzZWxmLl9kaWFncmFtSW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgc2VsZi5fcmVidWlsZCgpO1xuICB9KTtcbn1cblxuUGFsZXR0ZS4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnLCAnY2FudmFzJyBdO1xuXG5cbi8qKlxuICogUmVnaXN0ZXIgYSBwcm92aWRlciB3aXRoIHRoZSBwYWxldHRlXG4gKlxuICogQHBhcmFtICB7bnVtYmVyfSBbcHJpb3JpdHk9MTAwMF1cbiAqIEBwYXJhbSAge1BhbGV0dGVQcm92aWRlcn0gcHJvdmlkZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcGFsZXR0ZVByb3ZpZGVyID0ge1xuICogICBnZXRQYWxldHRlRW50cmllczogZnVuY3Rpb24oKSB7XG4gKiAgICAgcmV0dXJuIGZ1bmN0aW9uKGVudHJpZXMpIHtcbiAqICAgICAgIHJldHVybiB7XG4gKiAgICAgICAgIC4uLmVudHJpZXMsXG4gKiAgICAgICAgICdlbnRyeS0xJzoge1xuICogICAgICAgICAgIGxhYmVsOiAnTXkgRW50cnknLFxuICogICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24oKSB7IGFsZXJ0KFwiSSBoYXZlIGJlZW4gY2xpY2tlZCFcIik7IH1cbiAqICAgICAgICAgfVxuICogICAgICAgfTtcbiAqICAgICB9XG4gKiAgIH1cbiAqIH07XG4gKlxuICogcGFsZXR0ZS5yZWdpc3RlclByb3ZpZGVyKDgwMCwgcGFsZXR0ZVByb3ZpZGVyKTtcbiAqL1xuUGFsZXR0ZS5wcm90b3R5cGUucmVnaXN0ZXJQcm92aWRlciA9IGZ1bmN0aW9uKHByaW9yaXR5LCBwcm92aWRlcikge1xuICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgcHJvdmlkZXIgPSBwcmlvcml0eTtcbiAgICBwcmlvcml0eSA9IERFRkFVTFRfUFJJT1JJVFk7XG4gIH1cblxuICB0aGlzLl9ldmVudEJ1cy5vbigncGFsZXR0ZS5nZXRQcm92aWRlcnMnLCBwcmlvcml0eSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBldmVudC5wcm92aWRlcnMucHVzaChwcm92aWRlcik7XG4gIH0pO1xuXG4gIHRoaXMuX3JlYnVpbGQoKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwYWxldHRlIGVudHJpZXNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3Q8c3RyaW5nLCBQYWxldHRlRW50cnlEZXNjcmlwdG9yPn0gbWFwIG9mIGVudHJpZXNcbiAqL1xuUGFsZXR0ZS5wcm90b3R5cGUuZ2V0RW50cmllcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcHJvdmlkZXJzID0gdGhpcy5fZ2V0UHJvdmlkZXJzKCk7XG5cbiAgcmV0dXJuIHByb3ZpZGVycy5yZWR1Y2UoYWRkUGFsZXR0ZUVudHJpZXMsIHt9KTtcbn07XG5cblBhbGV0dGUucHJvdG90eXBlLl9yZWJ1aWxkID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKCF0aGlzLl9kaWFncmFtSW5pdGlhbGl6ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcHJvdmlkZXJzID0gdGhpcy5fZ2V0UHJvdmlkZXJzKCk7XG5cbiAgaWYgKCFwcm92aWRlcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCF0aGlzLl9jb250YWluZXIpIHtcbiAgICB0aGlzLl9pbml0KCk7XG4gIH1cblxuICB0aGlzLl91cGRhdGUoKTtcbn07XG5cbi8qKlxuICogSW5pdGlhbGl6ZVxuICovXG5QYWxldHRlLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB2YXIgZXZlbnRCdXMgPSB0aGlzLl9ldmVudEJ1cztcblxuICB2YXIgcGFyZW50Q29udGFpbmVyID0gdGhpcy5fZ2V0UGFyZW50Q29udGFpbmVyKCk7XG5cbiAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lciA9IGRvbWlmeShQYWxldHRlLkhUTUxfTUFSS1VQKTtcblxuICBwYXJlbnRDb250YWluZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcblxuICBkb21EZWxlZ2F0ZS5iaW5kKGNvbnRhaW5lciwgRUxFTUVOVF9TRUxFQ1RPUiwgJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciB0YXJnZXQgPSBldmVudC5kZWxlZ2F0ZVRhcmdldDtcblxuICAgIGlmIChkb21NYXRjaGVzKHRhcmdldCwgVE9HR0xFX1NFTEVDVE9SKSkge1xuICAgICAgcmV0dXJuIHNlbGYudG9nZ2xlKCk7XG4gICAgfVxuXG4gICAgc2VsZi50cmlnZ2VyKCdjbGljaycsIGV2ZW50KTtcbiAgfSk7XG5cbiAgLy8gcHJldmVudCBkcmFnIHByb3BhZ2F0aW9uXG4gIGRvbUV2ZW50LmJpbmQoY29udGFpbmVyLCAnbW91c2Vkb3duJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSk7XG5cbiAgLy8gcHJldmVudCBkcmFnIHByb3BhZ2F0aW9uXG4gIGRvbURlbGVnYXRlLmJpbmQoY29udGFpbmVyLCBFTlRSWV9TRUxFQ1RPUiwgJ2RyYWdzdGFydCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgc2VsZi50cmlnZ2VyKCdkcmFnc3RhcnQnLCBldmVudCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjYW52YXMucmVzaXplZCcsIHRoaXMuX2xheW91dENoYW5nZWQsIHRoaXMpO1xuXG4gIGV2ZW50QnVzLmZpcmUoJ3BhbGV0dGUuY3JlYXRlJywge1xuICAgIGNvbnRhaW5lcjogY29udGFpbmVyXG4gIH0pO1xufTtcblxuUGFsZXR0ZS5wcm90b3R5cGUuX2dldFByb3ZpZGVycyA9IGZ1bmN0aW9uKGlkKSB7XG5cbiAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRCdXMuY3JlYXRlRXZlbnQoe1xuICAgIHR5cGU6ICdwYWxldHRlLmdldFByb3ZpZGVycycsXG4gICAgcHJvdmlkZXJzOiBbXVxuICB9KTtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKGV2ZW50KTtcblxuICByZXR1cm4gZXZlbnQucHJvdmlkZXJzO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgcGFsZXR0ZSBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IFtzdGF0ZV0geyBvcGVuLCB0d29Db2x1bW4gfVxuICovXG5QYWxldHRlLnByb3RvdHlwZS5fdG9nZ2xlU3RhdGUgPSBmdW5jdGlvbihzdGF0ZSkge1xuXG4gIHN0YXRlID0gc3RhdGUgfHwge307XG5cbiAgdmFyIHBhcmVudCA9IHRoaXMuX2dldFBhcmVudENvbnRhaW5lcigpLFxuICAgICAgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyO1xuXG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHZhciB0d29Db2x1bW47XG5cbiAgdmFyIGNscyA9IGRvbUNsYXNzZXMoY29udGFpbmVyKTtcblxuICBpZiAoJ3R3b0NvbHVtbicgaW4gc3RhdGUpIHtcbiAgICB0d29Db2x1bW4gPSBzdGF0ZS50d29Db2x1bW47XG4gIH0gZWxzZSB7XG4gICAgdHdvQ29sdW1uID0gdGhpcy5fbmVlZHNDb2xsYXBzZShwYXJlbnQuY2xpZW50SGVpZ2h0LCB0aGlzLl9lbnRyaWVzIHx8IHt9KTtcbiAgfVxuXG4gIC8vIGFsd2F5cyB1cGRhdGUgdHdvIGNvbHVtblxuICBjbHMudG9nZ2xlKFBBTEVUVEVfVFdPX0NPTFVNTl9DTFMsIHR3b0NvbHVtbik7XG5cbiAgaWYgKCdvcGVuJyBpbiBzdGF0ZSkge1xuICAgIGNscy50b2dnbGUoUEFMRVRURV9PUEVOX0NMUywgc3RhdGUub3Blbik7XG4gIH1cblxuICBldmVudEJ1cy5maXJlKCdwYWxldHRlLmNoYW5nZWQnLCB7XG4gICAgdHdvQ29sdW1uOiB0d29Db2x1bW4sXG4gICAgb3BlbjogdGhpcy5pc09wZW4oKVxuICB9KTtcbn07XG5cblBhbGV0dGUucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgZW50cmllc0NvbnRhaW5lciA9IGRvbVF1ZXJ5KCcuZGpzLXBhbGV0dGUtZW50cmllcycsIHRoaXMuX2NvbnRhaW5lciksXG4gICAgICBlbnRyaWVzID0gdGhpcy5fZW50cmllcyA9IHRoaXMuZ2V0RW50cmllcygpO1xuXG4gIGRvbUNsZWFyKGVudHJpZXNDb250YWluZXIpO1xuXG4gIGZvckVhY2goZW50cmllcywgZnVuY3Rpb24oZW50cnksIGlkKSB7XG5cbiAgICB2YXIgZ3JvdXBpbmcgPSBlbnRyeS5ncm91cCB8fCAnZGVmYXVsdCc7XG5cbiAgICB2YXIgY29udGFpbmVyID0gZG9tUXVlcnkoJ1tkYXRhLWdyb3VwPScgKyBncm91cGluZyArICddJywgZW50cmllc0NvbnRhaW5lcik7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lciA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImdyb3VwXCIgZGF0YS1ncm91cD1cIicgKyBncm91cGluZyArICdcIj48L2Rpdj4nKTtcbiAgICAgIGVudHJpZXNDb250YWluZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICB9XG5cbiAgICB2YXIgaHRtbCA9IGVudHJ5Lmh0bWwgfHwgKFxuICAgICAgZW50cnkuc2VwYXJhdG9yID9cbiAgICAgICAgJzxociBjbGFzcz1cInNlcGFyYXRvclwiIC8+JyA6XG4gICAgICAgICc8ZGl2IGNsYXNzPVwiZW50cnlcIiBkcmFnZ2FibGU9XCJ0cnVlXCI+PC9kaXY+Jyk7XG5cblxuICAgIHZhciBjb250cm9sID0gZG9taWZ5KGh0bWwpO1xuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChjb250cm9sKTtcblxuICAgIGlmICghZW50cnkuc2VwYXJhdG9yKSB7XG4gICAgICBkb21BdHRyKGNvbnRyb2wsICdkYXRhLWFjdGlvbicsIGlkKTtcblxuICAgICAgaWYgKGVudHJ5LnRpdGxlKSB7XG4gICAgICAgIGRvbUF0dHIoY29udHJvbCwgJ3RpdGxlJywgZW50cnkudGl0bGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZW50cnkuY2xhc3NOYW1lKSB7XG4gICAgICAgIGFkZENsYXNzZXMoY29udHJvbCwgZW50cnkuY2xhc3NOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVudHJ5LmltYWdlVXJsKSB7XG4gICAgICAgIGNvbnRyb2wuYXBwZW5kQ2hpbGQoZG9taWZ5KCc8aW1nIHNyYz1cIicgKyBlbnRyeS5pbWFnZVVybCArICdcIj4nKSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyBvcGVuIGFmdGVyIHVwZGF0ZVxuICB0aGlzLm9wZW4oKTtcbn07XG5cblxuLyoqXG4gKiBUcmlnZ2VyIGFuIGFjdGlvbiBhdmFpbGFibGUgb24gdGhlIHBhbGV0dGVcbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGFjdGlvblxuICogQHBhcmFtICB7RXZlbnR9IGV2ZW50XG4gKi9cblBhbGV0dGUucHJvdG90eXBlLnRyaWdnZXIgPSBmdW5jdGlvbihhY3Rpb24sIGV2ZW50LCBhdXRvQWN0aXZhdGUpIHtcbiAgdmFyIGVudHJpZXMgPSB0aGlzLl9lbnRyaWVzLFxuICAgICAgZW50cnksXG4gICAgICBoYW5kbGVyLFxuICAgICAgb3JpZ2luYWxFdmVudCxcbiAgICAgIGJ1dHRvbiA9IGV2ZW50LmRlbGVnYXRlVGFyZ2V0IHx8IGV2ZW50LnRhcmdldDtcblxuICBpZiAoIWJ1dHRvbikge1xuICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgZW50cnkgPSBlbnRyaWVzW2RvbUF0dHIoYnV0dG9uLCAnZGF0YS1hY3Rpb24nKV07XG5cbiAgLy8gd2hlbiB1c2VyIGNsaWNrcyBvbiB0aGUgcGFsZXR0ZSBhbmQgbm90IG9uIGFuIGFjdGlvblxuICBpZiAoIWVudHJ5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaGFuZGxlciA9IGVudHJ5LmFjdGlvbjtcblxuICBvcmlnaW5hbEV2ZW50ID0gZXZlbnQub3JpZ2luYWxFdmVudCB8fCBldmVudDtcblxuICAvLyBzaW1wbGUgYWN0aW9uICh2aWEgY2FsbGJhY2sgZnVuY3Rpb24pXG4gIGlmIChpc0Z1bmN0aW9uKGhhbmRsZXIpKSB7XG4gICAgaWYgKGFjdGlvbiA9PT0gJ2NsaWNrJykge1xuICAgICAgaGFuZGxlcihvcmlnaW5hbEV2ZW50LCBhdXRvQWN0aXZhdGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaGFuZGxlclthY3Rpb25dKSB7XG4gICAgICBoYW5kbGVyW2FjdGlvbl0ob3JpZ2luYWxFdmVudCwgYXV0b0FjdGl2YXRlKTtcbiAgICB9XG4gIH1cblxuICAvLyBzaWxlbmNlIG90aGVyIGFjdGlvbnNcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbn07XG5cblBhbGV0dGUucHJvdG90eXBlLl9sYXlvdXRDaGFuZ2VkID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3RvZ2dsZVN0YXRlKHt9KTtcbn07XG5cbi8qKlxuICogRG8gd2UgbmVlZCB0byBjb2xsYXBzZSB0byB0d28gY29sdW1ucz9cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYXZhaWxhYmxlSGVpZ2h0XG4gKiBAcGFyYW0ge09iamVjdH0gZW50cmllc1xuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblBhbGV0dGUucHJvdG90eXBlLl9uZWVkc0NvbGxhcHNlID0gZnVuY3Rpb24oYXZhaWxhYmxlSGVpZ2h0LCBlbnRyaWVzKSB7XG5cbiAgLy8gdG9wIG1hcmdpbiArIGJvdHRvbSB0b2dnbGUgKyBib3R0b20gbWFyZ2luXG4gIC8vIGltcGxlbWVudG9ycyBtdXN0IG92ZXJyaWRlIHRoaXMgbWV0aG9kIGlmIHRoZXlcbiAgLy8gY2hhbmdlIHRoZSBwYWxldHRlIHN0eWxlc1xuICB2YXIgbWFyZ2luID0gMjAgKyAxMCArIDIwO1xuXG4gIHZhciBlbnRyaWVzSGVpZ2h0ID0gT2JqZWN0LmtleXMoZW50cmllcykubGVuZ3RoICogNDY7XG5cbiAgcmV0dXJuIGF2YWlsYWJsZUhlaWdodCA8IGVudHJpZXNIZWlnaHQgKyBtYXJnaW47XG59O1xuXG4vKipcbiAqIENsb3NlIHRoZSBwYWxldHRlXG4gKi9cblBhbGV0dGUucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG5cbiAgdGhpcy5fdG9nZ2xlU3RhdGUoe1xuICAgIG9wZW46IGZhbHNlLFxuICAgIHR3b0NvbHVtbjogZmFsc2VcbiAgfSk7XG59O1xuXG5cbi8qKlxuICogT3BlbiB0aGUgcGFsZXR0ZVxuICovXG5QYWxldHRlLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3RvZ2dsZVN0YXRlKHsgb3BlbjogdHJ1ZSB9KTtcbn07XG5cblxuUGFsZXR0ZS5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24ob3Blbikge1xuICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm9wZW4oKTtcbiAgfVxufTtcblxuUGFsZXR0ZS5wcm90b3R5cGUuaXNBY3RpdmVUb29sID0gZnVuY3Rpb24odG9vbCkge1xuICByZXR1cm4gdG9vbCAmJiB0aGlzLl9hY3RpdmVUb29sID09PSB0b29sO1xufTtcblxuUGFsZXR0ZS5wcm90b3R5cGUudXBkYXRlVG9vbEhpZ2hsaWdodCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGVudHJpZXNDb250YWluZXIsXG4gICAgICB0b29sc0NvbnRhaW5lcjtcblxuICBpZiAoIXRoaXMuX3Rvb2xzQ29udGFpbmVyKSB7XG4gICAgZW50cmllc0NvbnRhaW5lciA9IGRvbVF1ZXJ5KCcuZGpzLXBhbGV0dGUtZW50cmllcycsIHRoaXMuX2NvbnRhaW5lcik7XG5cbiAgICB0aGlzLl90b29sc0NvbnRhaW5lciA9IGRvbVF1ZXJ5KCdbZGF0YS1ncm91cD10b29sc10nLCBlbnRyaWVzQ29udGFpbmVyKTtcbiAgfVxuXG4gIHRvb2xzQ29udGFpbmVyID0gdGhpcy5fdG9vbHNDb250YWluZXI7XG5cbiAgZm9yRWFjaCh0b29sc0NvbnRhaW5lci5jaGlsZHJlbiwgZnVuY3Rpb24odG9vbCkge1xuICAgIHZhciBhY3Rpb25OYW1lID0gdG9vbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYWN0aW9uJyk7XG5cbiAgICBpZiAoIWFjdGlvbk5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdG9vbENsYXNzZXMgPSBkb21DbGFzc2VzKHRvb2wpO1xuXG4gICAgYWN0aW9uTmFtZSA9IGFjdGlvbk5hbWUucmVwbGFjZSgnLXRvb2wnLCAnJyk7XG5cbiAgICBpZiAodG9vbENsYXNzZXMuY29udGFpbnMoJ2VudHJ5JykgJiYgYWN0aW9uTmFtZSA9PT0gbmFtZSkge1xuICAgICAgdG9vbENsYXNzZXMuYWRkKCdoaWdobGlnaHRlZC1lbnRyeScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b29sQ2xhc3Nlcy5yZW1vdmUoJ2hpZ2hsaWdodGVkLWVudHJ5Jyk7XG4gICAgfVxuICB9KTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGFsZXR0ZSBpcyBvcGVuZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBwYWxldHRlLm9wZW4oKTtcbiAqXG4gKiBpZiAocGFsZXR0ZS5pc09wZW4oKSkge1xuICogICAvLyB5ZXMsIHdlIGFyZSBvcGVuXG4gKiB9XG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBwYWxldHRlIGlzIG9wZW5lZFxuICovXG5QYWxldHRlLnByb3RvdHlwZS5pc09wZW4gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGRvbUNsYXNzZXModGhpcy5fY29udGFpbmVyKS5oYXMoUEFMRVRURV9PUEVOX0NMUyk7XG59O1xuXG4vKipcbiAqIEdldCBjb250YWluZXIgdGhlIHBhbGV0dGUgbGl2ZXMgaW4uXG4gKlxuICogQHJldHVybiB7RWxlbWVudH1cbiAqL1xuUGFsZXR0ZS5wcm90b3R5cGUuX2dldFBhcmVudENvbnRhaW5lciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fY2FudmFzLmdldENvbnRhaW5lcigpO1xufTtcblxuXG4vKiBtYXJrdXAgZGVmaW5pdGlvbiAqL1xuXG5QYWxldHRlLkhUTUxfTUFSS1VQID1cbiAgJzxkaXYgY2xhc3M9XCJkanMtcGFsZXR0ZVwiPicgK1xuICAgICc8ZGl2IGNsYXNzPVwiZGpzLXBhbGV0dGUtZW50cmllc1wiPjwvZGl2PicgK1xuICAgICc8ZGl2IGNsYXNzPVwiZGpzLXBhbGV0dGUtdG9nZ2xlXCI+PC9kaXY+JyArXG4gICc8L2Rpdj4nO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBhZGRDbGFzc2VzKGVsZW1lbnQsIGNsYXNzTmFtZXMpIHtcblxuICB2YXIgY2xhc3NlcyA9IGRvbUNsYXNzZXMoZWxlbWVudCk7XG5cbiAgdmFyIGFjdHVhbENsYXNzTmFtZXMgPSBpc0FycmF5KGNsYXNzTmFtZXMpID8gY2xhc3NOYW1lcyA6IGNsYXNzTmFtZXMuc3BsaXQoL1xccysvZyk7XG4gIGFjdHVhbENsYXNzTmFtZXMuZm9yRWFjaChmdW5jdGlvbihjbHMpIHtcbiAgICBjbGFzc2VzLmFkZChjbHMpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkUGFsZXR0ZUVudHJpZXMoZW50cmllcywgcHJvdmlkZXIpIHtcblxuICB2YXIgZW50cmllc09yVXBkYXRlciA9IHByb3ZpZGVyLmdldFBhbGV0dGVFbnRyaWVzKCk7XG5cbiAgaWYgKGlzRnVuY3Rpb24oZW50cmllc09yVXBkYXRlcikpIHtcbiAgICByZXR1cm4gZW50cmllc09yVXBkYXRlcihlbnRyaWVzKTtcbiAgfVxuXG4gIGZvckVhY2goZW50cmllc09yVXBkYXRlciwgZnVuY3Rpb24oZW50cnksIGlkKSB7XG4gICAgZW50cmllc1tpZF0gPSBlbnRyeTtcbiAgfSk7XG5cbiAgcmV0dXJuIGVudHJpZXM7XG59IiwiaW1wb3J0IFBhbGV0dGUgZnJvbSAnLi9QYWxldHRlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAncGFsZXR0ZScgXSxcbiAgcGFsZXR0ZTogWyAndHlwZScsIFBhbGV0dGUgXVxufTtcbiIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZm9yRWFjaCxcbiAgaXNGdW5jdGlvbixcbiAgaXNEZWZpbmVkLFxuICBvbWl0LFxuICBzaXplXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZGVsZWdhdGUgYXMgZG9tRGVsZWdhdGUsXG4gIGRvbWlmeSBhcyBkb21pZnksXG4gIGNsYXNzZXMgYXMgZG9tQ2xhc3NlcyxcbiAgYXR0ciBhcyBkb21BdHRyLFxuICByZW1vdmUgYXMgZG9tUmVtb3ZlXG59IGZyb20gJ21pbi1kb20nO1xuXG52YXIgREFUQV9SRUYgPSAnZGF0YS1pZCc7XG5cbnZhciBDTE9TRV9FVkVOVFMgPSBbXG4gICdjb250ZXh0UGFkLmNsb3NlJyxcbiAgJ2NhbnZhcy52aWV3Ym94LmNoYW5naW5nJyxcbiAgJ2NvbW1hbmRTdGFjay5jaGFuZ2VkJ1xuXTtcblxudmFyIERFRkFVTFRfUFJJT1JJVFkgPSAxMDAwO1xuXG5cbi8qKlxuICogQSBwb3B1cCBtZW51IHRoYXQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSBhIGxpc3Qgb2YgYWN0aW9ucyBhbnl3aGVyZSBpbiB0aGUgY2FudmFzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWdcbiAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3R9IFtjb25maWcuc2NhbGU9eyBtaW46IDEuMCwgbWF4OiAxLjUgfV1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbY29uZmlnLnNjYWxlLm1pbl1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbY29uZmlnLnNjYWxlLm1heF1cbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUG9wdXBNZW51KGNvbmZpZywgZXZlbnRCdXMsIGNhbnZhcykge1xuXG4gIHZhciBzY2FsZSA9IGlzRGVmaW5lZChjb25maWcgJiYgY29uZmlnLnNjYWxlKSA/IGNvbmZpZy5zY2FsZSA6IHtcbiAgICBtaW46IDEsXG4gICAgbWF4OiAxLjVcbiAgfTtcblxuICB0aGlzLl9jb25maWcgPSB7XG4gICAgc2NhbGU6IHNjYWxlXG4gIH07XG5cbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9wcm92aWRlcnMgPSB7fTtcbiAgdGhpcy5fY3VycmVudCA9IHt9O1xufVxuXG5Qb3B1cE1lbnUuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5wb3B1cE1lbnUnLFxuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJ1xuXTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBwb3B1cCBtZW51IHByb3ZpZGVyXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBpZFxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmlvcml0eT0xMDAwXVxuICogQHBhcmFtICB7T2JqZWN0fSBwcm92aWRlclxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwb3B1cE1lbnVQcm92aWRlciA9IHtcbiAqICAgZ2V0UG9wdXBNZW51RW50cmllczogZnVuY3Rpb24oZWxlbWVudCkge1xuICogICAgIHJldHVybiB7XG4gKiAgICAgICAnZW50cnktMSc6IHtcbiAqICAgICAgICAgbGFiZWw6ICdNeSBFbnRyeScsXG4gKiAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24oKSB7IGFsZXJ0KFwiSSBoYXZlIGJlZW4gY2xpY2tlZCFcIik7IH1cbiAqICAgICAgIH1cbiAqICAgICB9XG4gKiAgIH1cbiAqIH07XG4gKlxuICogcG9wdXBNZW51LnJlZ2lzdGVyUHJvdmlkZXIoJ215TWVudUlEJywgcG9wdXBNZW51UHJvdmlkZXIpO1xuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLnJlZ2lzdGVyUHJvdmlkZXIgPSBmdW5jdGlvbihpZCwgcHJpb3JpdHksIHByb3ZpZGVyKSB7XG4gIGlmICghcHJvdmlkZXIpIHtcbiAgICBwcm92aWRlciA9IHByaW9yaXR5O1xuICAgIHByaW9yaXR5ID0gREVGQVVMVF9QUklPUklUWTtcbiAgfVxuXG4gIHRoaXMuX2V2ZW50QnVzLm9uKCdwb3B1cE1lbnUuZ2V0UHJvdmlkZXJzLicgKyBpZCwgcHJpb3JpdHksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgZXZlbnQucHJvdmlkZXJzLnB1c2gocHJvdmlkZXIpO1xuICB9KTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHRoZSBwb3B1cCBtZW51IGhhcyBlbnRyaWVzLlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgZW1wdHlcbiAqL1xuUG9wdXBNZW51LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oZWxlbWVudCwgcHJvdmlkZXJJZCkge1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VsZW1lbnQgcGFyYW1ldGVyIGlzIG1pc3NpbmcnKTtcbiAgfVxuXG4gIGlmICghcHJvdmlkZXJJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvdmlkZXJJZCBwYXJhbWV0ZXIgaXMgbWlzc2luZycpO1xuICB9XG5cbiAgdmFyIHByb3ZpZGVycyA9IHRoaXMuX2dldFByb3ZpZGVycyhwcm92aWRlcklkKTtcblxuICBpZiAoIXByb3ZpZGVycykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFyIGVudHJpZXMgPSB0aGlzLl9nZXRFbnRyaWVzKGVsZW1lbnQsIHByb3ZpZGVycyksXG4gICAgICBoZWFkZXJFbnRyaWVzID0gdGhpcy5fZ2V0SGVhZGVyRW50cmllcyhlbGVtZW50LCBwcm92aWRlcnMpO1xuXG4gIHZhciBoYXNFbnRyaWVzID0gc2l6ZShlbnRyaWVzKSA+IDAsXG4gICAgICBoYXNIZWFkZXJFbnRyaWVzID0gaGVhZGVyRW50cmllcyAmJiBzaXplKGhlYWRlckVudHJpZXMpID4gMDtcblxuICByZXR1cm4gIWhhc0VudHJpZXMgJiYgIWhhc0hlYWRlckVudHJpZXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlIGVudHJpZXMgYW5kIG9wZW4gcG9wdXAgbWVudSBhdCBnaXZlbiBwb3NpdGlvblxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gZWxlbWVudFxuICogQHBhcmFtICB7c3RyaW5nfSBpZCBwcm92aWRlciBpZFxuICogQHBhcmFtICB7T2JqZWN0fSBwb3NpdGlvblxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gcG9wdXAgbWVudSBpbnN0YW5jZVxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihlbGVtZW50LCBpZCwgcG9zaXRpb24pIHtcblxuICB2YXIgcHJvdmlkZXJzID0gdGhpcy5fZ2V0UHJvdmlkZXJzKGlkKTtcblxuICBpZiAoIWVsZW1lbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VsZW1lbnQgaXMgbWlzc2luZycpO1xuICB9XG5cbiAgaWYgKCFwcm92aWRlcnMgfHwgIXByb3ZpZGVycy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlZ2lzdGVyZWQgcHJvdmlkZXJzIGZvcjogJyArIGlkKTtcbiAgfVxuXG4gIGlmICghcG9zaXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoZSBwb3NpdGlvbiBhcmd1bWVudCBpcyBtaXNzaW5nJyk7XG4gIH1cblxuICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHRoaXMuX2VtaXQoJ29wZW4nKTtcblxuICB2YXIgY3VycmVudCA9IHRoaXMuX2N1cnJlbnQgPSB7XG4gICAgY2xhc3NOYW1lOiBpZCxcbiAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICB9O1xuXG4gIHZhciBlbnRyaWVzID0gdGhpcy5fZ2V0RW50cmllcyhlbGVtZW50LCBwcm92aWRlcnMpLFxuICAgICAgaGVhZGVyRW50cmllcyA9IHRoaXMuX2dldEhlYWRlckVudHJpZXMoZWxlbWVudCwgcHJvdmlkZXJzKTtcblxuICBjdXJyZW50LmVudHJpZXMgPSBhc3NpZ24oe30sIGVudHJpZXMsIGhlYWRlckVudHJpZXMpO1xuXG4gIGN1cnJlbnQuY29udGFpbmVyID0gdGhpcy5fY3JlYXRlQ29udGFpbmVyKCk7XG5cbiAgaWYgKHNpemUoaGVhZGVyRW50cmllcykpIHtcbiAgICBjdXJyZW50LmNvbnRhaW5lci5hcHBlbmRDaGlsZChcbiAgICAgIHRoaXMuX2NyZWF0ZUVudHJpZXMoaGVhZGVyRW50cmllcywgJ2Rqcy1wb3B1cC1oZWFkZXInKVxuICAgICk7XG4gIH1cblxuICBpZiAoc2l6ZShlbnRyaWVzKSkge1xuICAgIGN1cnJlbnQuY29udGFpbmVyLmFwcGVuZENoaWxkKFxuICAgICAgdGhpcy5fY3JlYXRlRW50cmllcyhlbnRyaWVzLCAnZGpzLXBvcHVwLWJvZHknKVxuICAgICk7XG4gIH1cblxuICB2YXIgY2FudmFzID0gdGhpcy5fY2FudmFzLFxuICAgICAgcGFyZW50ID0gY2FudmFzLmdldENvbnRhaW5lcigpO1xuXG4gIHRoaXMuX2F0dGFjaENvbnRhaW5lcihjdXJyZW50LmNvbnRhaW5lciwgcGFyZW50LCBwb3NpdGlvbi5jdXJzb3IpO1xuICB0aGlzLl9iaW5kQXV0b0Nsb3NlKCk7XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgcG9wdXAgbWVudSBhbmQgdW5iaW5kcyB0aGUgZXZlbnQgaGFuZGxlcnMuXG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcblxuICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9lbWl0KCdjbG9zZScpO1xuXG4gIHRoaXMuX3VuYmluZEF1dG9DbG9zZSgpO1xuICBkb21SZW1vdmUodGhpcy5fY3VycmVudC5jb250YWluZXIpO1xuICB0aGlzLl9jdXJyZW50LmNvbnRhaW5lciA9IG51bGw7XG59O1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGFuIG9wZW4gcG9wdXAgbWVudSBleGlzdC5cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIG9wZW5cbiAqL1xuUG9wdXBNZW51LnByb3RvdHlwZS5pc09wZW4gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICEhdGhpcy5fY3VycmVudC5jb250YWluZXI7XG59O1xuXG5cbi8qKlxuICogVHJpZ2dlciBhbiBhY3Rpb24gYXNzb2NpYXRlZCB3aXRoIGFuIGVudHJ5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuICpcbiAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgYWN0aW9uIGNhbGxiYWNrLCBpZiBhbnlcbiAqL1xuUG9wdXBNZW51LnByb3RvdHlwZS50cmlnZ2VyID0gZnVuY3Rpb24oZXZlbnQpIHtcblxuICAvLyBzaWxlbmNlIG90aGVyIGFjdGlvbnNcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICB2YXIgZWxlbWVudCA9IGV2ZW50LmRlbGVnYXRlVGFyZ2V0IHx8IGV2ZW50LnRhcmdldCxcbiAgICAgIGVudHJ5SWQgPSBkb21BdHRyKGVsZW1lbnQsIERBVEFfUkVGKTtcblxuICB2YXIgZW50cnkgPSB0aGlzLl9nZXRFbnRyeShlbnRyeUlkKTtcblxuICBpZiAoZW50cnkuYWN0aW9uKSB7XG4gICAgcmV0dXJuIGVudHJ5LmFjdGlvbi5jYWxsKG51bGwsIGV2ZW50LCBlbnRyeSk7XG4gIH1cbn07XG5cblBvcHVwTWVudS5wcm90b3R5cGUuX2dldFByb3ZpZGVycyA9IGZ1bmN0aW9uKGlkKSB7XG5cbiAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRCdXMuY3JlYXRlRXZlbnQoe1xuICAgIHR5cGU6ICdwb3B1cE1lbnUuZ2V0UHJvdmlkZXJzLicgKyBpZCxcbiAgICBwcm92aWRlcnM6IFtdXG4gIH0pO1xuXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoZXZlbnQpO1xuXG4gIHJldHVybiBldmVudC5wcm92aWRlcnM7XG59O1xuXG5Qb3B1cE1lbnUucHJvdG90eXBlLl9nZXRFbnRyaWVzID0gZnVuY3Rpb24oZWxlbWVudCwgcHJvdmlkZXJzKSB7XG5cbiAgdmFyIGVudHJpZXMgPSB7fTtcblxuICBmb3JFYWNoKHByb3ZpZGVycywgZnVuY3Rpb24ocHJvdmlkZXIpIHtcblxuICAgIC8vIGhhbmRsZSBsZWdhY3kgbWV0aG9kXG4gICAgaWYgKCFwcm92aWRlci5nZXRQb3B1cE1lbnVFbnRyaWVzKSB7XG4gICAgICBmb3JFYWNoKHByb3ZpZGVyLmdldEVudHJpZXMoZWxlbWVudCksIGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICAgIHZhciBpZCA9IGVudHJ5LmlkO1xuXG4gICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V2ZXJ5IGVudHJ5IG11c3QgaGF2ZSB0aGUgaWQgcHJvcGVydHkgc2V0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBlbnRyaWVzW2lkXSA9IG9taXQoZW50cnksIFsgJ2lkJyBdKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVudHJpZXNPclVwZGF0ZXIgPSBwcm92aWRlci5nZXRQb3B1cE1lbnVFbnRyaWVzKGVsZW1lbnQpO1xuXG4gICAgaWYgKGlzRnVuY3Rpb24oZW50cmllc09yVXBkYXRlcikpIHtcbiAgICAgIGVudHJpZXMgPSBlbnRyaWVzT3JVcGRhdGVyKGVudHJpZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JFYWNoKGVudHJpZXNPclVwZGF0ZXIsIGZ1bmN0aW9uKGVudHJ5LCBpZCkge1xuICAgICAgICBlbnRyaWVzW2lkXSA9IGVudHJ5O1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZW50cmllcztcbn07XG5cblBvcHVwTWVudS5wcm90b3R5cGUuX2dldEhlYWRlckVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50LCBwcm92aWRlcnMpIHtcblxuICB2YXIgZW50cmllcyA9IHt9O1xuXG4gIGZvckVhY2gocHJvdmlkZXJzLCBmdW5jdGlvbihwcm92aWRlcikge1xuXG4gICAgLy8gaGFuZGxlIGxlZ2FjeSBtZXRob2RcbiAgICBpZiAoIXByb3ZpZGVyLmdldFBvcHVwTWVudUhlYWRlckVudHJpZXMpIHtcbiAgICAgIGlmICghcHJvdmlkZXIuZ2V0SGVhZGVyRW50cmllcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZvckVhY2gocHJvdmlkZXIuZ2V0SGVhZGVyRW50cmllcyhlbGVtZW50KSwgZnVuY3Rpb24oZW50cnkpIHtcbiAgICAgICAgdmFyIGlkID0gZW50cnkuaWQ7XG5cbiAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXZlcnkgZW50cnkgbXVzdCBoYXZlIHRoZSBpZCBwcm9wZXJ0eSBzZXQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVudHJpZXNbaWRdID0gb21pdChlbnRyeSwgWyAnaWQnIF0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZW50cmllc09yVXBkYXRlciA9IHByb3ZpZGVyLmdldFBvcHVwTWVudUhlYWRlckVudHJpZXMoZWxlbWVudCk7XG5cbiAgICBpZiAoaXNGdW5jdGlvbihlbnRyaWVzT3JVcGRhdGVyKSkge1xuICAgICAgZW50cmllcyA9IGVudHJpZXNPclVwZGF0ZXIoZW50cmllcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvckVhY2goZW50cmllc09yVXBkYXRlciwgZnVuY3Rpb24oZW50cnksIGlkKSB7XG4gICAgICAgIGVudHJpZXNbaWRdID0gZW50cnk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlbnRyaWVzO1xuXG5cbn07XG5cbi8qKlxuICogR2V0cyBhbiBlbnRyeSBpbnN0YW5jZSAoZWl0aGVyIGVudHJ5IG9yIGhlYWRlckVudHJ5KSBieSBpZC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGVudHJ5SWRcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IGVudHJ5IGluc3RhbmNlXG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUuX2dldEVudHJ5ID0gZnVuY3Rpb24oZW50cnlJZCkge1xuXG4gIHZhciBlbnRyeSA9IHRoaXMuX2N1cnJlbnQuZW50cmllc1tlbnRyeUlkXTtcblxuICBpZiAoIWVudHJ5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlbnRyeSBub3QgZm91bmQnKTtcbiAgfVxuXG4gIHJldHVybiBlbnRyeTtcbn07XG5cblBvcHVwTWVudS5wcm90b3R5cGUuX2VtaXQgPSBmdW5jdGlvbihldmVudE5hbWUpIHtcbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgncG9wdXBNZW51LicgKyBldmVudE5hbWUpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBwb3B1cCBtZW51IGNvbnRhaW5lci5cbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IGEgRE9NIGNvbnRhaW5lclxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLl9jcmVhdGVDb250YWluZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNvbnRhaW5lciA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImRqcy1wb3B1cFwiPicpLFxuICAgICAgcG9zaXRpb24gPSB0aGlzLl9jdXJyZW50LnBvc2l0aW9uLFxuICAgICAgY2xhc3NOYW1lID0gdGhpcy5fY3VycmVudC5jbGFzc05hbWU7XG5cbiAgYXNzaWduKGNvbnRhaW5lci5zdHlsZSwge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIGxlZnQ6IHBvc2l0aW9uLnggKyAncHgnLFxuICAgIHRvcDogcG9zaXRpb24ueSArICdweCcsXG4gICAgdmlzaWJpbGl0eTogJ2hpZGRlbidcbiAgfSk7XG5cbiAgZG9tQ2xhc3Nlcyhjb250YWluZXIpLmFkZChjbGFzc05hbWUpO1xuXG4gIHJldHVybiBjb250YWluZXI7XG59O1xuXG5cbi8qKlxuICogQXR0YWNoZXMgdGhlIGNvbnRhaW5lciB0byB0aGUgRE9NLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250YWluZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJlbnRcbiAqL1xuUG9wdXBNZW51LnByb3RvdHlwZS5fYXR0YWNoQ29udGFpbmVyID0gZnVuY3Rpb24oY29udGFpbmVyLCBwYXJlbnQsIGN1cnNvcikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLy8gRXZlbnQgaGFuZGxlclxuICBkb21EZWxlZ2F0ZS5iaW5kKGNvbnRhaW5lciwgJy5lbnRyeScgLCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgc2VsZi50cmlnZ2VyKGV2ZW50KTtcbiAgfSk7XG5cbiAgdGhpcy5fdXBkYXRlU2NhbGUoY29udGFpbmVyKTtcblxuICAvLyBBdHRhY2ggdG8gRE9NXG4gIHBhcmVudC5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuXG4gIGlmIChjdXJzb3IpIHtcbiAgICB0aGlzLl9hc3N1cmVJc0luYm91bmRzKGNvbnRhaW5lciwgY3Vyc29yKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIFVwZGF0ZXMgcG9wdXAgc3R5bGUudHJhbnNmb3JtIHdpdGggcmVzcGVjdCB0byB0aGUgY29uZmlnIGFuZCB6b29tIGxldmVsLlxuICpcbiAqIEBtZXRob2QgX3VwZGF0ZVNjYWxlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRhaW5lclxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLl91cGRhdGVTY2FsZSA9IGZ1bmN0aW9uKGNvbnRhaW5lcikge1xuICB2YXIgem9vbSA9IHRoaXMuX2NhbnZhcy56b29tKCk7XG5cbiAgdmFyIHNjYWxlQ29uZmlnID0gdGhpcy5fY29uZmlnLnNjYWxlLFxuICAgICAgbWluU2NhbGUsXG4gICAgICBtYXhTY2FsZSxcbiAgICAgIHNjYWxlID0gem9vbTtcblxuICBpZiAoc2NhbGVDb25maWcgIT09IHRydWUpIHtcblxuICAgIGlmIChzY2FsZUNvbmZpZyA9PT0gZmFsc2UpIHtcbiAgICAgIG1pblNjYWxlID0gMTtcbiAgICAgIG1heFNjYWxlID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWluU2NhbGUgPSBzY2FsZUNvbmZpZy5taW47XG4gICAgICBtYXhTY2FsZSA9IHNjYWxlQ29uZmlnLm1heDtcbiAgICB9XG5cbiAgICBpZiAoaXNEZWZpbmVkKG1pblNjYWxlKSAmJiB6b29tIDwgbWluU2NhbGUpIHtcbiAgICAgIHNjYWxlID0gbWluU2NhbGU7XG4gICAgfVxuXG4gICAgaWYgKGlzRGVmaW5lZChtYXhTY2FsZSkgJiYgem9vbSA+IG1heFNjYWxlKSB7XG4gICAgICBzY2FsZSA9IG1heFNjYWxlO1xuICAgIH1cblxuICB9XG5cbiAgc2V0VHJhbnNmb3JtKGNvbnRhaW5lciwgJ3NjYWxlKCcgKyBzY2FsZSArICcpJyk7XG59O1xuXG5cbi8qKlxuICogTWFrZSBzdXJlIHRoYXQgdGhlIG1lbnUgaXMgYWx3YXlzIGZ1bGx5IHNob3duXG4gKlxuICogQG1ldGhvZCBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gY29udGFpbmVyXG4gKiBAcGFyYW0gIHtQb3NpdGlvbn0gY3Vyc29yIHt4LCB5fVxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLl9hc3N1cmVJc0luYm91bmRzID0gZnVuY3Rpb24oY29udGFpbmVyLCBjdXJzb3IpIHtcbiAgdmFyIGNhbnZhcyA9IHRoaXMuX2NhbnZhcyxcbiAgICAgIGNsaWVudFJlY3QgPSBjYW52YXMuX2NvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICB2YXIgY29udGFpbmVyWCA9IGNvbnRhaW5lci5vZmZzZXRMZWZ0LFxuICAgICAgY29udGFpbmVyWSA9IGNvbnRhaW5lci5vZmZzZXRUb3AsXG4gICAgICBjb250YWluZXJXaWR0aCA9IGNvbnRhaW5lci5zY3JvbGxXaWR0aCxcbiAgICAgIGNvbnRhaW5lckhlaWdodCA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQsXG4gICAgICBvdmVyQXhpcyA9IHt9LFxuICAgICAgbGVmdCwgdG9wO1xuXG4gIHZhciBjdXJzb3JQb3NpdGlvbiA9IHtcbiAgICB4OiBjdXJzb3IueCAtIGNsaWVudFJlY3QubGVmdCxcbiAgICB5OiBjdXJzb3IueSAtIGNsaWVudFJlY3QudG9wXG4gIH07XG5cbiAgaWYgKGNvbnRhaW5lclggKyBjb250YWluZXJXaWR0aCA+IGNsaWVudFJlY3Qud2lkdGgpIHtcbiAgICBvdmVyQXhpcy54ID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChjb250YWluZXJZICsgY29udGFpbmVySGVpZ2h0ID4gY2xpZW50UmVjdC5oZWlnaHQpIHtcbiAgICBvdmVyQXhpcy55ID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChvdmVyQXhpcy54ICYmIG92ZXJBeGlzLnkpIHtcbiAgICBsZWZ0ID0gY3Vyc29yUG9zaXRpb24ueCAtIGNvbnRhaW5lcldpZHRoICsgJ3B4JztcbiAgICB0b3AgPSBjdXJzb3JQb3NpdGlvbi55IC0gY29udGFpbmVySGVpZ2h0ICsgJ3B4JztcbiAgfSBlbHNlIGlmIChvdmVyQXhpcy54KSB7XG4gICAgbGVmdCA9IGN1cnNvclBvc2l0aW9uLnggLSBjb250YWluZXJXaWR0aCArICdweCc7XG4gICAgdG9wID0gY3Vyc29yUG9zaXRpb24ueSArICdweCc7XG4gIH0gZWxzZSBpZiAob3ZlckF4aXMueSAmJiBjdXJzb3JQb3NpdGlvbi55IDwgY29udGFpbmVySGVpZ2h0KSB7XG4gICAgbGVmdCA9IGN1cnNvclBvc2l0aW9uLnggKyAncHgnO1xuICAgIHRvcCA9IDEwICsgJ3B4JztcbiAgfSBlbHNlIGlmIChvdmVyQXhpcy55KSB7XG4gICAgbGVmdCA9IGN1cnNvclBvc2l0aW9uLnggKyAncHgnO1xuICAgIHRvcCA9IGN1cnNvclBvc2l0aW9uLnkgLSBjb250YWluZXJIZWlnaHQgKyAncHgnO1xuICB9XG5cbiAgYXNzaWduKGNvbnRhaW5lci5zdHlsZSwgeyBsZWZ0OiBsZWZ0LCB0b3A6IHRvcCB9LCB7IHZpc2liaWxpdHk6ICd2aXNpYmxlJywgJ3otaW5kZXgnOiAxMDAwIH0pO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBsaXN0IG9mIGVudHJpZXMgYW5kIHJldHVybnMgdGhlbSBhcyBhIERPTSBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBlbnRyaWVzIGFuIGFycmF5IG9mIGVudHJ5IG9iamVjdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGVudHJ5IGNvbnRhaW5lclxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gYSBET00gY29udGFpbmVyXG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUuX2NyZWF0ZUVudHJpZXMgPSBmdW5jdGlvbihlbnRyaWVzLCBjbGFzc05hbWUpIHtcblxuICB2YXIgZW50cmllc0NvbnRhaW5lciA9IGRvbWlmeSgnPGRpdj4nKSxcbiAgICAgIHNlbGYgPSB0aGlzO1xuXG4gIGRvbUNsYXNzZXMoZW50cmllc0NvbnRhaW5lcikuYWRkKGNsYXNzTmFtZSk7XG5cbiAgZm9yRWFjaChlbnRyaWVzLCBmdW5jdGlvbihlbnRyeSwgaWQpIHtcbiAgICB2YXIgZW50cnlDb250YWluZXIgPSBzZWxmLl9jcmVhdGVFbnRyeShlbnRyeSwgaWQpO1xuICAgIGVudHJpZXNDb250YWluZXIuYXBwZW5kQ2hpbGQoZW50cnlDb250YWluZXIpO1xuICB9KTtcblxuICByZXR1cm4gZW50cmllc0NvbnRhaW5lcjtcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgc2luZ2xlIGVudHJ5IGFuZCByZXR1cm5zIGl0IGFzIGEgRE9NIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IGVudHJ5XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBhIERPTSBjb250YWluZXJcbiAqL1xuUG9wdXBNZW51LnByb3RvdHlwZS5fY3JlYXRlRW50cnkgPSBmdW5jdGlvbihlbnRyeSwgaWQpIHtcblxuICB2YXIgZW50cnlDb250YWluZXIgPSBkb21pZnkoJzxkaXY+JyksXG4gICAgICBlbnRyeUNsYXNzZXMgPSBkb21DbGFzc2VzKGVudHJ5Q29udGFpbmVyKTtcblxuICBlbnRyeUNsYXNzZXMuYWRkKCdlbnRyeScpO1xuXG4gIGlmIChlbnRyeS5jbGFzc05hbWUpIHtcbiAgICBlbnRyeS5jbGFzc05hbWUuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uKGNsYXNzTmFtZSkge1xuICAgICAgZW50cnlDbGFzc2VzLmFkZChjbGFzc05hbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgZG9tQXR0cihlbnRyeUNvbnRhaW5lciwgREFUQV9SRUYsIGlkKTtcblxuICBpZiAoZW50cnkubGFiZWwpIHtcbiAgICB2YXIgbGFiZWwgPSBkb21pZnkoJzxzcGFuPicpO1xuICAgIGxhYmVsLnRleHRDb250ZW50ID0gZW50cnkubGFiZWw7XG4gICAgZW50cnlDb250YWluZXIuYXBwZW5kQ2hpbGQobGFiZWwpO1xuICB9XG5cbiAgaWYgKGVudHJ5LmltYWdlVXJsKSB7XG4gICAgZW50cnlDb250YWluZXIuYXBwZW5kQ2hpbGQoZG9taWZ5KCc8aW1nIHNyYz1cIicgKyBlbnRyeS5pbWFnZVVybCArICdcIiAvPicpKTtcbiAgfVxuXG4gIGlmIChlbnRyeS5hY3RpdmUgPT09IHRydWUpIHtcbiAgICBlbnRyeUNsYXNzZXMuYWRkKCdhY3RpdmUnKTtcbiAgfVxuXG4gIGlmIChlbnRyeS5kaXNhYmxlZCA9PT0gdHJ1ZSkge1xuICAgIGVudHJ5Q2xhc3Nlcy5hZGQoJ2Rpc2FibGVkJyk7XG4gIH1cblxuICBpZiAoZW50cnkudGl0bGUpIHtcbiAgICBlbnRyeUNvbnRhaW5lci50aXRsZSA9IGVudHJ5LnRpdGxlO1xuICB9XG5cbiAgcmV0dXJuIGVudHJ5Q29udGFpbmVyO1xufTtcblxuXG4vKipcbiAqIFNldCB1cCBsaXN0ZW5lciB0byBjbG9zZSBwb3B1cCBhdXRvbWF0aWNhbGx5IG9uIGNlcnRhaW4gZXZlbnRzLlxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLl9iaW5kQXV0b0Nsb3NlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2V2ZW50QnVzLm9uY2UoQ0xPU0VfRVZFTlRTLCB0aGlzLmNsb3NlLCB0aGlzKTtcbn07XG5cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGF1dG8tY2xvc2luZyBsaXN0ZW5lci5cbiAqL1xuUG9wdXBNZW51LnByb3RvdHlwZS5fdW5iaW5kQXV0b0Nsb3NlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2V2ZW50QnVzLm9mZihDTE9TRV9FVkVOVFMsIHRoaXMuY2xvc2UsIHRoaXMpO1xufTtcblxuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gc2V0VHJhbnNmb3JtKGVsZW1lbnQsIHRyYW5zZm9ybSkge1xuICBlbGVtZW50LnN0eWxlWyd0cmFuc2Zvcm0tb3JpZ2luJ10gPSAndG9wIGxlZnQnO1xuXG4gIFsgJycsICctbXMtJywgJy13ZWJraXQtJyBdLmZvckVhY2goZnVuY3Rpb24ocHJlZml4KSB7XG4gICAgZWxlbWVudC5zdHlsZVtwcmVmaXggKyAndHJhbnNmb3JtJ10gPSB0cmFuc2Zvcm07XG4gIH0pO1xufSIsImltcG9ydCBQb3B1cE1lbnUgZnJvbSAnLi9Qb3B1cE1lbnUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdwb3B1cE1lbnUnIF0sXG4gIHBvcHVwTWVudTogWyAndHlwZScsIFBvcHVwTWVudSBdXG59O1xuIiwiaW1wb3J0IHtcclxuICBmb3JFYWNoXHJcbn0gZnJvbSAnbWluLWRhc2gnO1xyXG5cclxuaW1wb3J0IHtcclxuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxyXG4gIGF0dHIgYXMgc3ZnQXR0cixcclxuICBjbGFzc2VzIGFzIHN2Z0NsYXNzZXMsXHJcbiAgY2xvbmUgYXMgc3ZnQ2xvbmUsXHJcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZSxcclxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXHJcbn0gZnJvbSAndGlueS1zdmcnO1xyXG5cclxuaW1wb3J0IHsgcXVlcnkgYXMgZG9tUXVlcnkgfSBmcm9tICdtaW4tZG9tJztcclxuXHJcbmltcG9ydCB7IGdldFZpc3VhbCB9IGZyb20gJy4uLy4uL3V0aWwvR3JhcGhpY3NVdGlsJztcclxuXHJcbnZhciBNQVJLRVJfVFlQRVMgPSBbXHJcbiAgJ21hcmtlci1zdGFydCcsXHJcbiAgJ21hcmtlci1taWQnLFxyXG4gICdtYXJrZXItZW5kJ1xyXG5dO1xyXG5cclxudmFyIE5PREVTX0NBTl9IQVZFX01BUktFUiA9IFtcclxuICAnY2lyY2xlJyxcclxuICAnZWxsaXBzZScsXHJcbiAgJ2xpbmUnLFxyXG4gICdwYXRoJyxcclxuICAncG9seWdvbicsXHJcbiAgJ3BvbHlsaW5lJyxcclxuICAncmVjdCdcclxuXTtcclxuXHJcblxyXG4vKipcclxuICogQWRkcyBzdXBwb3J0IGZvciBwcmV2aWV3cyBvZiBtb3ZpbmcvcmVzaXppbmcgZWxlbWVudHMuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQcmV2aWV3U3VwcG9ydChlbGVtZW50UmVnaXN0cnksIGV2ZW50QnVzLCBjYW52YXMsIHN0eWxlcykge1xyXG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcclxuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XHJcbiAgdGhpcy5fc3R5bGVzID0gc3R5bGVzO1xyXG5cclxuICB0aGlzLl9jbG9uZWRNYXJrZXJzID0ge307XHJcblxyXG4gIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgZXZlbnRCdXMub24oJ2RyYWcuY2xlYW51cCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgZm9yRWFjaChzZWxmLl9jbG9uZWRNYXJrZXJzLCBmdW5jdGlvbihjbG9uZWRNYXJrZXIpIHtcclxuICAgICAgc3ZnUmVtb3ZlKGNsb25lZE1hcmtlcik7XHJcbiAgICB9KTtcclxuXHJcbiAgICBzZWxmLl9jbG9uZWRNYXJrZXJzID0ge307XHJcbiAgfSk7XHJcbn1cclxuXHJcblByZXZpZXdTdXBwb3J0LiRpbmplY3QgPSBbXHJcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXHJcbiAgJ2V2ZW50QnVzJyxcclxuICAnY2FudmFzJyxcclxuICAnc3R5bGVzJ1xyXG5dO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGdyYXBoaWNzIG9mIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7U1ZHRWxlbWVudH1cclxuICovXHJcblByZXZpZXdTdXBwb3J0LnByb3RvdHlwZS5nZXRHZnggPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhlbGVtZW50KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGEgbW92ZSBwcmV2aWV3IG9mIGEgZ2l2ZW4gc2hhcGUgdG8gYSBnaXZlbiBzdmcgZ3JvdXAuXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICogQHBhcmFtIHtTVkdFbGVtZW50fSBncm91cFxyXG4gKiBAcGFyYW0ge1NWR0VsZW1lbnR9IFtnZnhdXHJcbiAqXHJcbiAqIEByZXR1cm4ge1NWR0VsZW1lbnR9IGRyYWdnZXJcclxuICovXHJcblByZXZpZXdTdXBwb3J0LnByb3RvdHlwZS5hZGREcmFnZ2VyID0gZnVuY3Rpb24oZWxlbWVudCwgZ3JvdXAsIGdmeCkge1xyXG4gIGdmeCA9IGdmeCB8fCB0aGlzLmdldEdmeChlbGVtZW50KTtcclxuXHJcbiAgdmFyIGRyYWdnZXIgPSBzdmdDbG9uZShnZngpO1xyXG4gIHZhciBiYm94ID0gZ2Z4LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICB0aGlzLl9jbG9uZU1hcmtlcnMoZ2V0VmlzdWFsKGRyYWdnZXIpKTtcclxuXHJcbiAgc3ZnQXR0cihkcmFnZ2VyLCB0aGlzLl9zdHlsZXMuY2xzKCdkanMtZHJhZ2dlcicsIFtdLCB7XHJcbiAgICB4OiBiYm94LnRvcCxcclxuICAgIHk6IGJib3gubGVmdFxyXG4gIH0pKTtcclxuXHJcbiAgc3ZnQXBwZW5kKGdyb3VwLCBkcmFnZ2VyKTtcclxuXHJcbiAgcmV0dXJuIGRyYWdnZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyBhIHJlc2l6ZSBwcmV2aWV3IG9mIGEgZ2l2ZW4gc2hhcGUgdG8gYSBnaXZlbiBzdmcgZ3JvdXAuXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICogQHBhcmFtIHtTVkdFbGVtZW50fSBncm91cFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtTVkdFbGVtZW50fSBmcmFtZVxyXG4gKi9cclxuUHJldmlld1N1cHBvcnQucHJvdG90eXBlLmFkZEZyYW1lID0gZnVuY3Rpb24oc2hhcGUsIGdyb3VwKSB7XHJcblxyXG4gIHZhciBmcmFtZSA9IHN2Z0NyZWF0ZSgncmVjdCcsIHtcclxuICAgIGNsYXNzOiAnZGpzLXJlc2l6ZS1vdmVybGF5JyxcclxuICAgIHdpZHRoOiAgc2hhcGUud2lkdGgsXHJcbiAgICBoZWlnaHQ6IHNoYXBlLmhlaWdodCxcclxuICAgIHg6IHNoYXBlLngsXHJcbiAgICB5OiBzaGFwZS55XHJcbiAgfSk7XHJcblxyXG4gIHN2Z0FwcGVuZChncm91cCwgZnJhbWUpO1xyXG5cclxuICByZXR1cm4gZnJhbWU7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xvbmUgYWxsIG1hcmtlcnMgcmVmZXJlbmNlZCBieSBhIG5vZGUgYW5kIGl0cyBjaGlsZCBub2Rlcy5cclxuICpcclxuICogQHBhcmFtIHtTVkdFbGVtZW50fSBnZnhcclxuICovXHJcblByZXZpZXdTdXBwb3J0LnByb3RvdHlwZS5fY2xvbmVNYXJrZXJzID0gZnVuY3Rpb24oZ2Z4KSB7XHJcbiAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICBpZiAoZ2Z4LmNoaWxkTm9kZXMpIHtcclxuXHJcbiAgICAvLyBUT0RPOiB1c2UgZm9yRWFjaCBvbmNlIHdlIGRyb3AgUGhhbnRvbUpTXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdmeC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcblxyXG4gICAgICAvLyByZWN1cnNpdmVseSBjbG9uZSBtYXJrZXJzIG9mIGNoaWxkIG5vZGVzXHJcbiAgICAgIHNlbGYuX2Nsb25lTWFya2VycyhnZnguY2hpbGROb2Rlc1sgaSBdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICghY2FuSGF2ZU1hcmtlcihnZngpKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBNQVJLRVJfVFlQRVMuZm9yRWFjaChmdW5jdGlvbihtYXJrZXJUeXBlKSB7XHJcbiAgICBpZiAoc3ZnQXR0cihnZngsIG1hcmtlclR5cGUpKSB7XHJcbiAgICAgIHZhciBtYXJrZXIgPSBnZXRNYXJrZXIoZ2Z4LCBtYXJrZXJUeXBlLCBzZWxmLl9jYW52YXMuZ2V0Q29udGFpbmVyKCkpO1xyXG5cclxuICAgICAgc2VsZi5fY2xvbmVNYXJrZXIoZ2Z4LCBtYXJrZXIsIG1hcmtlclR5cGUpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsb25lIG1hcmtlciByZWZlcmVuY2VkIGJ5IGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gZ2Z4XHJcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gbWFya2VyXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrZXJUeXBlXHJcbiAqL1xyXG5QcmV2aWV3U3VwcG9ydC5wcm90b3R5cGUuX2Nsb25lTWFya2VyID0gZnVuY3Rpb24oZ2Z4LCBtYXJrZXIsIG1hcmtlclR5cGUpIHtcclxuICB2YXIgbWFya2VySWQgPSBtYXJrZXIuaWQ7XHJcblxyXG4gIHZhciBjbG9uZWRNYXJrZXIgPSB0aGlzLl9jbG9uZWRNYXJrZXJzWyBtYXJrZXJJZCBdO1xyXG5cclxuICBpZiAoIWNsb25lZE1hcmtlcikge1xyXG4gICAgY2xvbmVkTWFya2VyID0gc3ZnQ2xvbmUobWFya2VyKTtcclxuXHJcbiAgICB2YXIgY2xvbmVkTWFya2VySWQgPSBtYXJrZXJJZCArICctY2xvbmUnO1xyXG5cclxuICAgIGNsb25lZE1hcmtlci5pZCA9IGNsb25lZE1hcmtlcklkO1xyXG5cclxuICAgIHN2Z0NsYXNzZXMoY2xvbmVkTWFya2VyKVxyXG4gICAgICAuYWRkKCdkanMtZHJhZ2dlcicpXHJcbiAgICAgIC5hZGQoJ2Rqcy1kcmFnZ2VyLW1hcmtlcicpO1xyXG5cclxuICAgIHRoaXMuX2Nsb25lZE1hcmtlcnNbIG1hcmtlcklkIF0gPSBjbG9uZWRNYXJrZXI7XHJcblxyXG4gICAgdmFyIGRlZnMgPSBkb21RdWVyeSgnZGVmcycsIHRoaXMuX2NhbnZhcy5fc3ZnKTtcclxuXHJcbiAgICBpZiAoIWRlZnMpIHtcclxuICAgICAgZGVmcyA9IHN2Z0NyZWF0ZSgnZGVmcycpO1xyXG5cclxuICAgICAgc3ZnQXBwZW5kKHRoaXMuX2NhbnZhcy5fc3ZnLCBkZWZzKTtcclxuICAgIH1cclxuXHJcbiAgICBzdmdBcHBlbmQoZGVmcywgY2xvbmVkTWFya2VyKTtcclxuICB9XHJcblxyXG4gIHZhciByZWZlcmVuY2UgPSBpZFRvUmVmZXJlbmNlKHRoaXMuX2Nsb25lZE1hcmtlcnNbIG1hcmtlcklkIF0uaWQpO1xyXG5cclxuICBzdmdBdHRyKGdmeCwgbWFya2VyVHlwZSwgcmVmZXJlbmNlKTtcclxufTtcclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5cclxuLyoqXHJcbiAqIEdldCBtYXJrZXIgb2YgZ2l2ZW4gdHlwZSByZWZlcmVuY2VkIGJ5IG5vZGUuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFya2VyVHlwZVxyXG4gKiBAcGFyYW0ge05vZGV9IFtwYXJlbnROb2RlXVxyXG4gKlxyXG4gKiBAcGFyYW0ge05vZGV9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRNYXJrZXIobm9kZSwgbWFya2VyVHlwZSwgcGFyZW50Tm9kZSkge1xyXG4gIHZhciBpZCA9IHJlZmVyZW5jZVRvSWQoc3ZnQXR0cihub2RlLCBtYXJrZXJUeXBlKSk7XHJcblxyXG4gIHJldHVybiBkb21RdWVyeSgnbWFya2VyIycgKyBpZCwgcGFyZW50Tm9kZSB8fCBkb2N1bWVudCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgSUQgb2YgZnJhZ21lbnQgd2l0aGluIGN1cnJlbnQgZG9jdW1lbnQgZnJvbSBpdHMgZnVuY3Rpb25hbCBJUkkgcmVmZXJlbmNlLlxyXG4gKiBSZWZlcmVuY2VzIG1heSB1c2Ugc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWZlcmVuY2VcclxuICpcclxuICogQHJldHVybnMge3N0cmluZ31cclxuICovXHJcbmZ1bmN0aW9uIHJlZmVyZW5jZVRvSWQocmVmZXJlbmNlKSB7XHJcbiAgcmV0dXJuIHJlZmVyZW5jZS5tYXRjaCgvdXJsXFwoWydcIl0/IyhbXidcIl0qKVsnXCJdP1xcKS8pWzFdO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IGZ1bmN0aW9uYWwgSVJJIHJlZmVyZW5jZSBmb3IgZ2l2ZW4gSUQgb2YgZnJhZ21lbnQgd2l0aGluIGN1cnJlbnQgZG9jdW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gKi9cclxuZnVuY3Rpb24gaWRUb1JlZmVyZW5jZShpZCkge1xyXG4gIHJldHVybiAndXJsKCMnICsgaWQgKyAnKSc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVjayB3ZXRoZXIgbm9kZSB0eXBlIGNhbiBoYXZlIG1hcmtlciBhdHRyaWJ1dGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcclxuICpcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5mdW5jdGlvbiBjYW5IYXZlTWFya2VyKG5vZGUpIHtcclxuICByZXR1cm4gTk9ERVNfQ0FOX0hBVkVfTUFSS0VSLmluZGV4T2Yobm9kZS5ub2RlTmFtZSkgIT09IC0xO1xyXG59IiwiaW1wb3J0IFByZXZpZXdTdXBwb3J0IGZyb20gJy4vUHJldmlld1N1cHBvcnQnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdwcmV2aWV3U3VwcG9ydCcgXSxcbiAgcHJldmlld1N1cHBvcnQ6IFsgJ3R5cGUnLCBQcmV2aWV3U3VwcG9ydCBdXG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduXG59IGZyb20gJ21pbi1kYXNoJztcblxudmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcblxuLyoqXG4gKiBTZXJ2aWNlIHRoYXQgYWxsb3cgcmVwbGFjaW5nIG9mIGVsZW1lbnRzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXBsYWNlKG1vZGVsaW5nKSB7XG5cbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbn1cblxuUmVwbGFjZS4kaW5qZWN0ID0gWyAnbW9kZWxpbmcnIF07XG5cbi8qKlxuICogQHBhcmFtIHtFbGVtZW50fSBvbGRFbGVtZW50IC0gRWxlbWVudCB0byBiZSByZXBsYWNlZFxuICogQHBhcmFtIHtPYmplY3R9ICBuZXdFbGVtZW50RGF0YSAtIENvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5ldyBlbGVtZW50LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBleGFtcGxlIHRoZSBuZXcgYm91bmRzIGFuZCB0eXBlLlxuICogQHBhcmFtIHtPYmplY3R9ICBvcHRpb25zIC0gQ3VzdG9tIG9wdGlvbnMgdGhhdCB3aWxsIGJlIGF0dGFjaGVkIHRvIHRoZSBjb250ZXh0LiBJdCBjYW4gYmUgdXNlZCB0byBpbmplY3QgZGF0YVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBpcyBuZWVkZWQgaW4gdGhlIGNvbW1hbmQgY2hhaW4uIEZvciBleGFtcGxlIGl0IGNvdWxkIGJlIHVzZWQgaW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50YnVzLm9uKCdjb21tYW5kU3RhY2suc2hhcGUucmVwbGFjZS5wb3N0RXhlY3V0ZScpIHRvIGNoYW5nZSBzaGFwZSBhdHRyaWJ1dGVzIGFmdGVyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZSBjcmVhdGlvbi5cbiAqL1xuUmVwbGFjZS5wcm90b3R5cGUucmVwbGFjZUVsZW1lbnQgPSBmdW5jdGlvbihvbGRFbGVtZW50LCBuZXdFbGVtZW50RGF0YSwgb3B0aW9ucykge1xuXG4gIGlmIChvbGRFbGVtZW50LndheXBvaW50cykge1xuXG4gICAgLy8gVE9ETyhuaWtrdSk6IHdlIGRvIG5vdCByZXBsYWNlIGNvbm5lY3Rpb25zLCB5ZXRcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nO1xuXG4gIHZhciB3aWR0aCA9IG5ld0VsZW1lbnREYXRhLndpZHRoIHx8IG9sZEVsZW1lbnQud2lkdGgsXG4gICAgICBoZWlnaHQgPSBuZXdFbGVtZW50RGF0YS5oZWlnaHQgfHwgb2xkRWxlbWVudC5oZWlnaHQsXG4gICAgICB4ID0gbmV3RWxlbWVudERhdGEueCB8fCBvbGRFbGVtZW50LngsXG4gICAgICB5ID0gbmV3RWxlbWVudERhdGEueSB8fCBvbGRFbGVtZW50LnksXG4gICAgICBjZW50ZXJYID0gcm91bmQoeCArIHdpZHRoIC8gMiksXG4gICAgICBjZW50ZXJZID0gcm91bmQoeSArIGhlaWdodCAvIDIpO1xuXG4gIC8vIG1vZGVsaW5nIEFQSSByZXF1aXJlcyBjZW50ZXIgY29vcmRpbmF0ZXMsXG4gIC8vIGFjY291bnQgZm9yIHRoYXQgd2hlbiBoYW5kbGluZyBzaGFwZSBib3VuZHNcblxuICByZXR1cm4gbW9kZWxpbmcucmVwbGFjZVNoYXBlKFxuICAgIG9sZEVsZW1lbnQsXG4gICAgYXNzaWduKFxuICAgICAge30sXG4gICAgICBuZXdFbGVtZW50RGF0YSxcbiAgICAgIHtcbiAgICAgICAgeDogY2VudGVyWCxcbiAgICAgICAgeTogY2VudGVyWSxcbiAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGhlaWdodFxuICAgICAgfVxuICAgICksXG4gICAgb3B0aW9uc1xuICApO1xufTtcbiIsImltcG9ydCBSZXBsYWNlIGZyb20gJy4vUmVwbGFjZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ3JlcGxhY2UnIF0sXG4gIHJlcGxhY2U6IFsgJ3R5cGUnLCBSZXBsYWNlIF1cbn07IiwiaW1wb3J0IHtcbiAgcGljayxcbiAgYXNzaWduXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgcmVzaXplQm91bmRzLFxuICBlbnN1cmVDb25zdHJhaW50cyxcbiAgY29tcHV0ZUNoaWxkcmVuQkJveCxcbiAgZ2V0TWluUmVzaXplQm91bmRzXG59IGZyb20gJy4vUmVzaXplVXRpbCc7XG5cbmltcG9ydCB7XG4gIGFzVFJCTCxcbiAgZ2V0TWlkLFxuICByb3VuZEJvdW5kc1xufSBmcm9tICcuLi8uLi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbnZhciBERUZBVUxUX01JTl9XSURUSCA9IDEwO1xuXG5cbi8qKlxuICogQSBjb21wb25lbnQgdGhhdCBwcm92aWRlcyByZXNpemluZyBvZiBzaGFwZXMgb24gdGhlIGNhbnZhcy5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgYXJlIHBhcnQgb2Ygc2hhcGUgcmVzaXplOlxuICpcbiAqICAqIGFkZGluZyByZXNpemUgaGFuZGxlcyxcbiAqICAqIGNyZWF0aW5nIGEgdmlzdWFsIGR1cmluZyByZXNpemVcbiAqICAqIGNoZWNraW5nIHJlc2l6ZSBydWxlc1xuICogICogY29tbWl0dGluZyBhIGNoYW5nZSBvbmNlIGZpbmlzaGVkXG4gKlxuICpcbiAqICMjIEN1c3RvbWl6aW5nXG4gKlxuICogSXQncyBwb3NzaWJsZSB0byBjdXN0b21pemUgdGhlIHJlc2l6aW5nIGJlaGF2aW91ciBieSBpbnRlcmNlcHRpbmcgJ3Jlc2l6ZS5zdGFydCdcbiAqIGFuZCBwcm92aWRpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIHRocm91Z2ggdGhlICdjb250ZXh0JzpcbiAqXG4gKiAgICogbWluRGltZW5zaW9ucyAoeyB3aWR0aCwgaGVpZ2h0IH0pOiBtaW5pbXVtIHNoYXBlIGRpbWVuc2lvbnNcbiAqXG4gKiAgICogY2hpbGRyZW5Cb3hQYWRkaW5nICh7IGxlZnQsIHRvcCwgYm90dG9tLCByaWdodCB9IHx8IG51bWJlcik6XG4gKiAgICAgZ2FwIGJldHdlZW4gdGhlIG1pbmltdW0gYm91bmRpbmcgYm94IGFuZCB0aGUgY29udGFpbmVyXG4gKlxuICogZi5leDpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBldmVudEJ1cy5vbigncmVzaXplLnN0YXJ0JywgMTUwMCwgZnVuY3Rpb24oZXZlbnQpIHtcbiAqICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICpcbiAqICBjb250ZXh0Lm1pbkRpbWVuc2lvbnMgPSB7IHdpZHRoOiAxNDAsIGhlaWdodDogMTIwIH07XG4gKlxuICogIC8vIFBhc3NpbmcgZ2VuZXJhbCBwYWRkaW5nXG4gKiAgY29udGV4dC5jaGlsZHJlbkJveFBhZGRpbmcgPSAzMDtcbiAqXG4gKiAgLy8gUGFzc2luZyBwYWRkaW5nIHRvIGEgc3BlY2lmaWMgc2lkZVxuICogIGNvbnRleHQuY2hpbGRyZW5Cb3hQYWRkaW5nLmxlZnQgPSAyMDtcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlc2l6ZShldmVudEJ1cywgcnVsZXMsIG1vZGVsaW5nLCBkcmFnZ2luZykge1xuXG4gIHRoaXMuX2RyYWdnaW5nID0gZHJhZ2dpbmc7XG4gIHRoaXMuX3J1bGVzID0gcnVsZXM7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG5cbiAgLyoqXG4gICAqIEhhbmRsZSByZXNpemUgbW92ZSBieSBzcGVjaWZpZWQgZGVsdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gICAqIEBwYXJhbSB7UG9pbnR9IGRlbHRhXG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVNb3ZlKGNvbnRleHQsIGRlbHRhKSB7XG5cbiAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBkaXJlY3Rpb24gPSBjb250ZXh0LmRpcmVjdGlvbixcbiAgICAgICAgcmVzaXplQ29uc3RyYWludHMgPSBjb250ZXh0LnJlc2l6ZUNvbnN0cmFpbnRzLFxuICAgICAgICBuZXdCb3VuZHM7XG5cbiAgICBjb250ZXh0LmRlbHRhID0gZGVsdGE7XG5cbiAgICBuZXdCb3VuZHMgPSByZXNpemVCb3VuZHMoc2hhcGUsIGRpcmVjdGlvbiwgZGVsdGEpO1xuXG4gICAgLy8gZW5zdXJlIGNvbnN0cmFpbnRzIGR1cmluZyByZXNpemVcbiAgICBjb250ZXh0Lm5ld0JvdW5kcyA9IGVuc3VyZUNvbnN0cmFpbnRzKG5ld0JvdW5kcywgcmVzaXplQ29uc3RyYWludHMpO1xuXG4gICAgLy8gdXBkYXRlICsgY2FjaGUgZXhlY3V0YWJsZSBzdGF0ZVxuICAgIGNvbnRleHQuY2FuRXhlY3V0ZSA9IHNlbGYuY2FuUmVzaXplKGNvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSByZXNpemUgc3RhcnQuXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gY29udGV4dFxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlU3RhcnQoY29udGV4dCkge1xuXG4gICAgdmFyIHJlc2l6ZUNvbnN0cmFpbnRzID0gY29udGV4dC5yZXNpemVDb25zdHJhaW50cyxcblxuICAgICAgICAvLyBldmFsdWF0ZSBtaW5Cb3VuZHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgICAgIG1pbkJvdW5kcyA9IGNvbnRleHQubWluQm91bmRzO1xuXG4gICAgaWYgKHJlc2l6ZUNvbnN0cmFpbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobWluQm91bmRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1pbkJvdW5kcyA9IHNlbGYuY29tcHV0ZU1pblJlc2l6ZUJveChjb250ZXh0KTtcbiAgICB9XG5cbiAgICBjb250ZXh0LnJlc2l6ZUNvbnN0cmFpbnRzID0ge1xuICAgICAgbWluOiBhc1RSQkwobWluQm91bmRzKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHJlc2l6ZSBlbmQuXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gY29udGV4dFxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlRW5kKGNvbnRleHQpIHtcbiAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlLFxuICAgICAgICBuZXdCb3VuZHMgPSBjb250ZXh0Lm5ld0JvdW5kcztcblxuICAgIGlmIChjYW5FeGVjdXRlKSB7XG5cbiAgICAgIC8vIGVuc3VyZSB3ZSBoYXZlIGFjdHVhbCBwaXhlbCB2YWx1ZXMgZm9yIG5ldyBib3VuZHNcbiAgICAgIC8vIChpbXBvcnRhbnQgd2hlbiB6b29tIGxldmVsIHdhcyA+IDEgZHVyaW5nIG1vdmUpXG4gICAgICBuZXdCb3VuZHMgPSByb3VuZEJvdW5kcyhuZXdCb3VuZHMpO1xuXG4gICAgICBpZiAoIWJvdW5kc0NoYW5nZWQoc2hhcGUsIG5ld0JvdW5kcykpIHtcblxuICAgICAgICAvLyBubyByZXNpemUgbmVjZXNzYXJ5XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gcGVyZm9ybSB0aGUgYWN0dWFsIHJlc2l6ZVxuICAgICAgbW9kZWxpbmcucmVzaXplU2hhcGUoc2hhcGUsIG5ld0JvdW5kcyk7XG4gICAgfVxuICB9XG5cblxuICBldmVudEJ1cy5vbigncmVzaXplLnN0YXJ0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBoYW5kbGVTdGFydChldmVudC5jb250ZXh0KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ3Jlc2l6ZS5tb3ZlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgZGVsdGEgPSB7XG4gICAgICB4OiBldmVudC5keCxcbiAgICAgIHk6IGV2ZW50LmR5XG4gICAgfTtcblxuICAgIGhhbmRsZU1vdmUoZXZlbnQuY29udGV4dCwgZGVsdGEpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbigncmVzaXplLmVuZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaGFuZGxlRW5kKGV2ZW50LmNvbnRleHQpO1xuICB9KTtcblxufVxuXG5cblJlc2l6ZS5wcm90b3R5cGUuY2FuUmVzaXplID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgcnVsZXMgPSB0aGlzLl9ydWxlcztcblxuICB2YXIgY3R4ID0gcGljayhjb250ZXh0LCBbICduZXdCb3VuZHMnLCAnc2hhcGUnLCAnZGVsdGEnLCAnZGlyZWN0aW9uJyBdKTtcblxuICByZXR1cm4gcnVsZXMuYWxsb3dlZCgnc2hhcGUucmVzaXplJywgY3R4KTtcbn07XG5cbi8qKlxuICogQWN0aXZhdGUgYSByZXNpemUgb3BlcmF0aW9uLlxuICpcbiAqIFlvdSBtYXkgc3BlY2lmeSBhZGRpdGlvbmFsIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gYW5kIG11c3Qgc3BlY2lmeSBhXG4gKiByZXNpemUgZGlyZWN0aW9uIGR1cmluZyBhY3RpdmF0aW9uIG9mIHRoZSByZXNpemUgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudFxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gKiBAcGFyYW0ge09iamVjdHxzdHJpbmd9IGNvbnRleHRPckRpcmVjdGlvblxuICovXG5SZXNpemUucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oZXZlbnQsIHNoYXBlLCBjb250ZXh0T3JEaXJlY3Rpb24pIHtcbiAgdmFyIGRyYWdnaW5nID0gdGhpcy5fZHJhZ2dpbmcsXG4gICAgICBjb250ZXh0LFxuICAgICAgZGlyZWN0aW9uO1xuXG4gIGlmICh0eXBlb2YgY29udGV4dE9yRGlyZWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgIGNvbnRleHRPckRpcmVjdGlvbiA9IHtcbiAgICAgIGRpcmVjdGlvbjogY29udGV4dE9yRGlyZWN0aW9uXG4gICAgfTtcbiAgfVxuXG4gIGNvbnRleHQgPSBhc3NpZ24oeyBzaGFwZTogc2hhcGUgfSwgY29udGV4dE9yRGlyZWN0aW9uKTtcblxuICBkaXJlY3Rpb24gPSBjb250ZXh0LmRpcmVjdGlvbjtcblxuICBpZiAoIWRpcmVjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVzdCBwcm92aWRlIGEgZGlyZWN0aW9uIChufHd8c3xlfG53fHNlfG5lfHN3KScpO1xuICB9XG5cbiAgZHJhZ2dpbmcuaW5pdChldmVudCwgZ2V0UmVmZXJlbmNlUG9pbnQoc2hhcGUsIGRpcmVjdGlvbiksICdyZXNpemUnLCB7XG4gICAgYXV0b0FjdGl2YXRlOiB0cnVlLFxuICAgIGN1cnNvcjogZ2V0Q3Vyc29yKGRpcmVjdGlvbiksXG4gICAgZGF0YToge1xuICAgICAgc2hhcGU6IHNoYXBlLFxuICAgICAgY29udGV4dDogY29udGV4dFxuICAgIH1cbiAgfSk7XG59O1xuXG5SZXNpemUucHJvdG90eXBlLmNvbXB1dGVNaW5SZXNpemVCb3ggPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBkaXJlY3Rpb24gPSBjb250ZXh0LmRpcmVjdGlvbixcbiAgICAgIG1pbkRpbWVuc2lvbnMsXG4gICAgICBjaGlsZHJlbkJvdW5kcztcblxuICBtaW5EaW1lbnNpb25zID0gY29udGV4dC5taW5EaW1lbnNpb25zIHx8IHtcbiAgICB3aWR0aDogREVGQVVMVF9NSU5fV0lEVEgsXG4gICAgaGVpZ2h0OiBERUZBVUxUX01JTl9XSURUSFxuICB9O1xuXG4gIC8vIGdldCBjaGlsZHJlbiBib3VuZHNcbiAgY2hpbGRyZW5Cb3VuZHMgPSBjb21wdXRlQ2hpbGRyZW5CQm94KHNoYXBlLCBjb250ZXh0LmNoaWxkcmVuQm94UGFkZGluZyk7XG5cbiAgLy8gZ2V0IGNvcnJlY3QgbWluaW11bSBib3VuZHMgZnJvbSBnaXZlbiByZXNpemUgZGlyZWN0aW9uXG4gIC8vIGJhc2ljYWxseSBlbnN1cmVzIHRoYXQgdGhlIG1pbkJvdW5kcyBpcyBtYXgoY2hpbGRyZW5Cb3VuZHMsIG1pbkRpbWVuc2lvbnMpXG4gIHJldHVybiBnZXRNaW5SZXNpemVCb3VuZHMoZGlyZWN0aW9uLCBzaGFwZSwgbWluRGltZW5zaW9ucywgY2hpbGRyZW5Cb3VuZHMpO1xufTtcblxuXG5SZXNpemUuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ3J1bGVzJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ2RyYWdnaW5nJ1xuXTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGJvdW5kc0NoYW5nZWQoc2hhcGUsIG5ld0JvdW5kcykge1xuICByZXR1cm4gc2hhcGUueCAhPT0gbmV3Qm91bmRzLnggfHxcbiAgICBzaGFwZS55ICE9PSBuZXdCb3VuZHMueSB8fFxuICAgIHNoYXBlLndpZHRoICE9PSBuZXdCb3VuZHMud2lkdGggfHxcbiAgICBzaGFwZS5oZWlnaHQgIT09IG5ld0JvdW5kcy5oZWlnaHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWZlcmVuY2VQb2ludChzaGFwZSwgZGlyZWN0aW9uKSB7XG4gIHZhciBtaWQgPSBnZXRNaWQoc2hhcGUpLFxuICAgICAgdHJibCA9IGFzVFJCTChzaGFwZSk7XG5cbiAgdmFyIHJlZmVyZW5jZVBvaW50ID0ge1xuICAgIHg6IG1pZC54LFxuICAgIHk6IG1pZC55XG4gIH07XG5cbiAgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCduJykgIT09IC0xKSB7XG4gICAgcmVmZXJlbmNlUG9pbnQueSA9IHRyYmwudG9wO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCdzJykgIT09IC0xKSB7XG4gICAgcmVmZXJlbmNlUG9pbnQueSA9IHRyYmwuYm90dG9tO1xuICB9XG5cbiAgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCdlJykgIT09IC0xKSB7XG4gICAgcmVmZXJlbmNlUG9pbnQueCA9IHRyYmwucmlnaHQ7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ3cnKSAhPT0gLTEpIHtcbiAgICByZWZlcmVuY2VQb2ludC54ID0gdHJibC5sZWZ0O1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZVBvaW50O1xufVxuXG5mdW5jdGlvbiBnZXRDdXJzb3IoZGlyZWN0aW9uKSB7XG4gIHZhciBwcmVmaXggPSAncmVzaXplLSc7XG5cbiAgaWYgKGRpcmVjdGlvbiA9PT0gJ24nIHx8IGRpcmVjdGlvbiA9PT0gJ3MnKSB7XG4gICAgcmV0dXJuIHByZWZpeCArICducyc7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnZScgfHwgZGlyZWN0aW9uID09PSAndycpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJ2V3JztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdudycgfHwgZGlyZWN0aW9uID09PSAnc2UnKSB7XG4gICAgcmV0dXJuIHByZWZpeCArICdud3NlJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJ25lc3cnO1xuICB9XG59IiwiaW1wb3J0IHtcbiAgYmluZCxcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY2xhc3NlcyBhcyBzdmdDbGFzc2VzLFxuICBjbGVhciBhcyBzdmdDbGVhcixcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZVxufSBmcm9tICd0aW55LXN2Zyc7XG5cbmltcG9ydCB7XG4gIGV2ZW50IGFzIGRvbUV2ZW50XG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICBpc1ByaW1hcnlCdXR0b25cbn0gZnJvbSAnLi4vLi4vdXRpbC9Nb3VzZSc7XG5cbmltcG9ydCB7XG4gIHRyYW5zZm9ybVxufSBmcm9tICcuLi8uLi91dGlsL1N2Z1RyYW5zZm9ybVV0aWwnO1xuXG5pbXBvcnQgeyBnZXRSZWZlcmVuY2VQb2ludCB9IGZyb20gJy4vUmVzaXplJztcblxudmFyIEhBTkRMRV9PRkZTRVQgPSAtNixcbiAgICBIQU5ETEVfU0laRSA9IDQsXG4gICAgSEFORExFX0hJVF9TSVpFID0gMjA7XG5cbnZhciBDTFNfUkVTSVpFUiA9ICdkanMtcmVzaXplcic7XG5cbnZhciBkaXJlY3Rpb25zID0gWyAnbicsICd3JywgJ3MnLCAnZScsICdudycsICduZScsICdzZScsICdzdycgXTtcblxuXG4vKipcbiAqIFRoaXMgY29tcG9uZW50IGlzIHJlc3BvbnNpYmxlIGZvciBhZGRpbmcgcmVzaXplIGhhbmRsZXMuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7U2VsZWN0aW9ufSBzZWxlY3Rpb25cbiAqIEBwYXJhbSB7UmVzaXplfSByZXNpemVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzaXplSGFuZGxlcyhldmVudEJ1cywgY2FudmFzLCBzZWxlY3Rpb24sIHJlc2l6ZSkge1xuXG4gIHRoaXMuX3Jlc2l6ZSA9IHJlc2l6ZTtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBldmVudEJ1cy5vbignc2VsZWN0aW9uLmNoYW5nZWQnLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG5ld1NlbGVjdGlvbiA9IGUubmV3U2VsZWN0aW9uO1xuXG4gICAgLy8gcmVtb3ZlIG9sZCBzZWxlY3Rpb24gbWFya2Vyc1xuICAgIHNlbGYucmVtb3ZlUmVzaXplcnMoKTtcblxuICAgIC8vIGFkZCBuZXcgc2VsZWN0aW9uIG1hcmtlcnMgT05MWSBpZiBzaW5nbGUgc2VsZWN0aW9uXG4gICAgaWYgKG5ld1NlbGVjdGlvbi5sZW5ndGggPT09IDEpIHtcbiAgICAgIGZvckVhY2gobmV3U2VsZWN0aW9uLCBiaW5kKHNlbGYuYWRkUmVzaXplciwgc2VsZikpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ3NoYXBlLmNoYW5nZWQnLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIHNoYXBlID0gZS5lbGVtZW50O1xuXG4gICAgaWYgKHNlbGVjdGlvbi5pc1NlbGVjdGVkKHNoYXBlKSkge1xuICAgICAgc2VsZi5yZW1vdmVSZXNpemVycygpO1xuXG4gICAgICBzZWxmLmFkZFJlc2l6ZXIoc2hhcGUpO1xuICAgIH1cbiAgfSk7XG59XG5cblxuUmVzaXplSGFuZGxlcy5wcm90b3R5cGUubWFrZURyYWdnYWJsZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIGdmeCwgZGlyZWN0aW9uKSB7XG4gIHZhciByZXNpemUgPSB0aGlzLl9yZXNpemU7XG5cbiAgZnVuY3Rpb24gc3RhcnRSZXNpemUoZXZlbnQpIHtcblxuICAgIC8vIG9ubHkgdHJpZ2dlciBvbiBsZWZ0IG1vdXNlIGJ1dHRvblxuICAgIGlmIChpc1ByaW1hcnlCdXR0b24oZXZlbnQpKSB7XG4gICAgICByZXNpemUuYWN0aXZhdGUoZXZlbnQsIGVsZW1lbnQsIGRpcmVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgZG9tRXZlbnQuYmluZChnZngsICdtb3VzZWRvd24nLCBzdGFydFJlc2l6ZSk7XG4gIGRvbUV2ZW50LmJpbmQoZ2Z4LCAndG91Y2hzdGFydCcsIHN0YXJ0UmVzaXplKTtcbn07XG5cblxuUmVzaXplSGFuZGxlcy5wcm90b3R5cGUuX2NyZWF0ZVJlc2l6ZXIgPSBmdW5jdGlvbihlbGVtZW50LCB4LCB5LCBkaXJlY3Rpb24pIHtcbiAgdmFyIHJlc2l6ZXJzUGFyZW50ID0gdGhpcy5fZ2V0UmVzaXplcnNQYXJlbnQoKTtcblxuICB2YXIgb2Zmc2V0ID0gZ2V0SGFuZGxlT2Zmc2V0KGRpcmVjdGlvbik7XG5cbiAgdmFyIGdyb3VwID0gc3ZnQ3JlYXRlKCdnJyk7XG5cbiAgc3ZnQ2xhc3Nlcyhncm91cCkuYWRkKENMU19SRVNJWkVSKTtcbiAgc3ZnQ2xhc3Nlcyhncm91cCkuYWRkKENMU19SRVNJWkVSICsgJy0nICsgZWxlbWVudC5pZCk7XG4gIHN2Z0NsYXNzZXMoZ3JvdXApLmFkZChDTFNfUkVTSVpFUiArICctJyArIGRpcmVjdGlvbik7XG5cbiAgc3ZnQXBwZW5kKHJlc2l6ZXJzUGFyZW50LCBncm91cCk7XG5cbiAgdmFyIHZpc3VhbCA9IHN2Z0NyZWF0ZSgncmVjdCcpO1xuXG4gIHN2Z0F0dHIodmlzdWFsLCB7XG4gICAgeDogLUhBTkRMRV9TSVpFIC8gMiArIG9mZnNldC54LFxuICAgIHk6IC1IQU5ETEVfU0laRSAvIDIgKyBvZmZzZXQueSxcbiAgICB3aWR0aDogSEFORExFX1NJWkUsXG4gICAgaGVpZ2h0OiBIQU5ETEVfU0laRVxuICB9KTtcblxuICBzdmdDbGFzc2VzKHZpc3VhbCkuYWRkKENMU19SRVNJWkVSICsgJy12aXN1YWwnKTtcblxuICBzdmdBcHBlbmQoZ3JvdXAsIHZpc3VhbCk7XG5cbiAgdmFyIGhpdCA9IHN2Z0NyZWF0ZSgncmVjdCcpO1xuXG4gIHN2Z0F0dHIoaGl0LCB7XG4gICAgeDogLUhBTkRMRV9ISVRfU0laRSAvIDIgKyBvZmZzZXQueCxcbiAgICB5OiAtSEFORExFX0hJVF9TSVpFIC8gMiArIG9mZnNldC55LFxuICAgIHdpZHRoOiBIQU5ETEVfSElUX1NJWkUsXG4gICAgaGVpZ2h0OiBIQU5ETEVfSElUX1NJWkVcbiAgfSk7XG5cbiAgc3ZnQ2xhc3NlcyhoaXQpLmFkZChDTFNfUkVTSVpFUiArICctaGl0Jyk7XG5cbiAgc3ZnQXBwZW5kKGdyb3VwLCBoaXQpO1xuXG4gIHRyYW5zZm9ybShncm91cCwgeCwgeSk7XG5cbiAgcmV0dXJuIGdyb3VwO1xufTtcblxuUmVzaXplSGFuZGxlcy5wcm90b3R5cGUuY3JlYXRlUmVzaXplciA9IGZ1bmN0aW9uKGVsZW1lbnQsIGRpcmVjdGlvbikge1xuICB2YXIgcG9pbnQgPSBnZXRSZWZlcmVuY2VQb2ludChlbGVtZW50LCBkaXJlY3Rpb24pO1xuXG4gIHZhciByZXNpemVyID0gdGhpcy5fY3JlYXRlUmVzaXplcihlbGVtZW50LCBwb2ludC54LCBwb2ludC55LCBkaXJlY3Rpb24pO1xuXG4gIHRoaXMubWFrZURyYWdnYWJsZShlbGVtZW50LCByZXNpemVyLCBkaXJlY3Rpb24pO1xufTtcblxuLy8gcmVzaXplIGhhbmRsZXMgaW1wbGVtZW50YXRpb24gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIEFkZCByZXNpemVycyBmb3IgYSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBzaGFwZVxuICovXG5SZXNpemVIYW5kbGVzLnByb3RvdHlwZS5hZGRSZXNpemVyID0gZnVuY3Rpb24oc2hhcGUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciByZXNpemUgPSB0aGlzLl9yZXNpemU7XG5cbiAgaWYgKCFyZXNpemUuY2FuUmVzaXplKHsgc2hhcGU6IHNoYXBlIH0pKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yRWFjaChkaXJlY3Rpb25zLCBmdW5jdGlvbihkaXJlY3Rpb24pIHtcbiAgICBzZWxmLmNyZWF0ZVJlc2l6ZXIoc2hhcGUsIGRpcmVjdGlvbik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIHJlc2l6ZXJzXG4gKi9cblJlc2l6ZUhhbmRsZXMucHJvdG90eXBlLnJlbW92ZVJlc2l6ZXJzID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNpemVyc1BhcmVudCA9IHRoaXMuX2dldFJlc2l6ZXJzUGFyZW50KCk7XG5cbiAgc3ZnQ2xlYXIocmVzaXplcnNQYXJlbnQpO1xufTtcblxuUmVzaXplSGFuZGxlcy5wcm90b3R5cGUuX2dldFJlc2l6ZXJzUGFyZW50ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9jYW52YXMuZ2V0TGF5ZXIoJ3Jlc2l6ZXJzJyk7XG59O1xuXG5SZXNpemVIYW5kbGVzLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnLFxuICAnc2VsZWN0aW9uJyxcbiAgJ3Jlc2l6ZSdcbl07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRIYW5kbGVPZmZzZXQoZGlyZWN0aW9uKSB7XG4gIHZhciBvZmZzZXQgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCdlJykgIT09IC0xKSB7XG4gICAgb2Zmc2V0LnggPSAtSEFORExFX09GRlNFVDtcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24uaW5kZXhPZigndycpICE9PSAtMSkge1xuICAgIG9mZnNldC54ID0gSEFORExFX09GRlNFVDtcbiAgfVxuXG4gIGlmIChkaXJlY3Rpb24uaW5kZXhPZigncycpICE9PSAtMSkge1xuICAgIG9mZnNldC55ID0gLUhBTkRMRV9PRkZTRVQ7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ24nKSAhPT0gLTEpIHtcbiAgICBvZmZzZXQueSA9IEhBTkRMRV9PRkZTRVQ7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0O1xufSIsInZhciBNQVJLRVJfUkVTSVpJTkcgPSAnZGpzLXJlc2l6aW5nJyxcbiAgICBNQVJLRVJfUkVTSVpFX05PVF9PSyA9ICdyZXNpemUtbm90LW9rJztcblxudmFyIExPV19QUklPUklUWSA9IDUwMDtcblxuaW1wb3J0IHtcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlLFxuICBjbGFzc2VzIGFzIHN2Z0NsYXNzZXNcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5cbi8qKlxuICogUHJvdmlkZXMgcHJldmlld3MgZm9yIHJlc2l6aW5nIHNoYXBlcyB3aGVuIHJlc2l6aW5nLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge1ByZXZpZXdTdXBwb3J0fSBwcmV2aWV3U3VwcG9ydFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXNpemVQcmV2aWV3KGV2ZW50QnVzLCBjYW52YXMsIHByZXZpZXdTdXBwb3J0KSB7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSByZXNpemVyIGZyYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlRnJhbWUoY29udGV4dCkge1xuXG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgYm91bmRzID0gY29udGV4dC5uZXdCb3VuZHMsXG4gICAgICAgIGZyYW1lID0gY29udGV4dC5mcmFtZTtcblxuICAgIGlmICghZnJhbWUpIHtcbiAgICAgIGZyYW1lID0gY29udGV4dC5mcmFtZSA9IHByZXZpZXdTdXBwb3J0LmFkZEZyYW1lKHNoYXBlLCBjYW52YXMuZ2V0RGVmYXVsdExheWVyKCkpO1xuXG4gICAgICBjYW52YXMuYWRkTWFya2VyKHNoYXBlLCBNQVJLRVJfUkVTSVpJTkcpO1xuICAgIH1cblxuICAgIGlmIChib3VuZHMud2lkdGggPiA1KSB7XG4gICAgICBzdmdBdHRyKGZyYW1lLCB7IHg6IGJvdW5kcy54LCB3aWR0aDogYm91bmRzLndpZHRoIH0pO1xuICAgIH1cblxuICAgIGlmIChib3VuZHMuaGVpZ2h0ID4gNSkge1xuICAgICAgc3ZnQXR0cihmcmFtZSwgeyB5OiBib3VuZHMueSwgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0IH0pO1xuICAgIH1cblxuICAgIGlmIChjb250ZXh0LmNhbkV4ZWN1dGUpIHtcbiAgICAgIHN2Z0NsYXNzZXMoZnJhbWUpLnJlbW92ZShNQVJLRVJfUkVTSVpFX05PVF9PSyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN2Z0NsYXNzZXMoZnJhbWUpLmFkZChNQVJLRVJfUkVTSVpFX05PVF9PSyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSByZXNpemVyIGZyYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlRnJhbWUoY29udGV4dCkge1xuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIGZyYW1lID0gY29udGV4dC5mcmFtZTtcblxuICAgIGlmIChmcmFtZSkge1xuICAgICAgc3ZnUmVtb3ZlKGNvbnRleHQuZnJhbWUpO1xuICAgIH1cblxuICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoc2hhcGUsIE1BUktFUl9SRVNJWklORyk7XG4gIH1cblxuICAvLyBhZGQgYW5kIHVwZGF0ZSBwcmV2aWV3c1xuICBldmVudEJ1cy5vbigncmVzaXplLm1vdmUnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdXBkYXRlRnJhbWUoZXZlbnQuY29udGV4dCk7XG4gIH0pO1xuXG4gIC8vIHJlbW92ZSBwcmV2aWV3c1xuICBldmVudEJ1cy5vbigncmVzaXplLmNsZWFudXAnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHJlbW92ZUZyYW1lKGV2ZW50LmNvbnRleHQpO1xuICB9KTtcblxufVxuXG5SZXNpemVQcmV2aWV3LiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnLFxuICAncHJldmlld1N1cHBvcnQnXG5dOyIsImltcG9ydCB7XG4gIGZpbHRlcixcbiAgaXNOdW1iZXJcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG52YXIgbWF4ID0gTWF0aC5tYXgsXG4gICAgbWluID0gTWF0aC5taW47XG5cbnZhciBERUZBVUxUX0NISUxEX0JPWF9QQURESU5HID0gMjA7XG5cbmltcG9ydCB7XG4gIGdldEJCb3hcbn0gZnJvbSAnLi4vLi4vdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCB7XG4gIGFzVFJCTCxcbiAgYXNCb3VuZHNcbn0gZnJvbSAnLi4vLi4vbGF5b3V0L0xheW91dFV0aWwnO1xuXG5cbi8qKlxuICogU3Vic3RyYWN0IGEgVFJCTCBmcm9tIGFub3RoZXJcbiAqXG4gKiBAcGFyYW0gIHtUUkJMfSB0cmJsQVxuICogQHBhcmFtICB7VFJCTH0gdHJibEJcbiAqXG4gKiBAcmV0dXJuIHtUUkJMfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyYWN0VFJCTCh0cmJsQSwgdHJibEIpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IHRyYmxBLnRvcCAtIHRyYmxCLnRvcCxcbiAgICByaWdodDogdHJibEEucmlnaHQgLSB0cmJsQi5yaWdodCxcbiAgICBib3R0b206IHRyYmxBLmJvdHRvbSAtIHRyYmxCLmJvdHRvbSxcbiAgICBsZWZ0OiB0cmJsQS5sZWZ0IC0gdHJibEIubGVmdFxuICB9O1xufVxuXG4vKipcbiAqIFJlc2l6ZSB0aGUgZ2l2ZW4gYm91bmRzIGJ5IHRoZSBzcGVjaWZpZWQgZGVsdGEgZnJvbSBhIGdpdmVuIGFuY2hvciBwb2ludC5cbiAqXG4gKiBAcGFyYW0ge0JvdW5kc30gYm91bmRzIHRoZSBib3VuZGluZyBib3ggdGhhdCBzaG91bGQgYmUgcmVzaXplZFxuICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdGlvbiBpbiB3aGljaCB0aGUgZWxlbWVudCBpcyByZXNpemVkIChudywgbmUsIHNlLCBzdylcbiAqIEBwYXJhbSB7UG9pbnR9IGRlbHRhIG9mIHRoZSByZXNpemUgb3BlcmF0aW9uXG4gKlxuICogQHJldHVybiB7Qm91bmRzfSByZXNpemVkIGJvdW5kaW5nIGJveFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzaXplQm91bmRzKGJvdW5kcywgZGlyZWN0aW9uLCBkZWx0YSkge1xuICB2YXIgZHggPSBkZWx0YS54LFxuICAgICAgZHkgPSBkZWx0YS55O1xuXG4gIHZhciBuZXdCb3VuZHMgPSB7XG4gICAgeDogYm91bmRzLngsXG4gICAgeTogYm91bmRzLnksXG4gICAgd2lkdGg6IGJvdW5kcy53aWR0aCxcbiAgICBoZWlnaHQ6IGJvdW5kcy5oZWlnaHRcbiAgfTtcblxuICBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ24nKSAhPT0gLTEpIHtcbiAgICBuZXdCb3VuZHMueSA9IGJvdW5kcy55ICsgZHk7XG4gICAgbmV3Qm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgLSBkeTtcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24uaW5kZXhPZigncycpICE9PSAtMSkge1xuICAgIG5ld0JvdW5kcy5oZWlnaHQgPSBib3VuZHMuaGVpZ2h0ICsgZHk7XG4gIH1cblxuICBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ2UnKSAhPT0gLTEpIHtcbiAgICBuZXdCb3VuZHMud2lkdGggPSBib3VuZHMud2lkdGggKyBkeDtcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24uaW5kZXhPZigndycpICE9PSAtMSkge1xuICAgIG5ld0JvdW5kcy54ID0gYm91bmRzLnggKyBkeDtcbiAgICBuZXdCb3VuZHMud2lkdGggPSBib3VuZHMud2lkdGggLSBkeDtcbiAgfVxuXG4gIHJldHVybiBuZXdCb3VuZHM7XG59XG5cblxuLyoqXG4gKiBSZXNpemUgdGhlIGdpdmVuIGJvdW5kcyBieSBhcHBseWluZyB0aGUgcGFzc2VkXG4gKiB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9IGRlbHRhLlxuICpcbiAqIEBwYXJhbSB7Qm91bmRzfSBib3VuZHNcbiAqIEBwYXJhbSB7VFJCTH0gdHJibFJlc2l6ZVxuICpcbiAqIEByZXR1cm4ge0JvdW5kc31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2l6ZVRSQkwoYm91bmRzLCByZXNpemUpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBib3VuZHMueCArIChyZXNpemUubGVmdCB8fCAwKSxcbiAgICB5OiBib3VuZHMueSArIChyZXNpemUudG9wIHx8IDApLFxuICAgIHdpZHRoOiBib3VuZHMud2lkdGggLSAocmVzaXplLmxlZnQgfHwgMCkgKyAocmVzaXplLnJpZ2h0IHx8IDApLFxuICAgIGhlaWdodDogYm91bmRzLmhlaWdodCAtIChyZXNpemUudG9wIHx8IDApICsgKHJlc2l6ZS5ib3R0b20gfHwgMClcbiAgfTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gcmVhdHRhY2hQb2ludChib3VuZHMsIG5ld0JvdW5kcywgcG9pbnQpIHtcblxuICB2YXIgc3ggPSBib3VuZHMud2lkdGggLyBuZXdCb3VuZHMud2lkdGgsXG4gICAgICBzeSA9IGJvdW5kcy5oZWlnaHQgLyBuZXdCb3VuZHMuaGVpZ2h0O1xuXG4gIHJldHVybiB7XG4gICAgeDogTWF0aC5yb3VuZCgobmV3Qm91bmRzLnggKyBuZXdCb3VuZHMud2lkdGggLyAyKSkgLSBNYXRoLmZsb29yKCgoYm91bmRzLnggKyBib3VuZHMud2lkdGggLyAyKSAtIHBvaW50LngpIC8gc3gpLFxuICAgIHk6IE1hdGgucm91bmQoKG5ld0JvdW5kcy55ICsgbmV3Qm91bmRzLmhlaWdodCAvIDIpKSAtIE1hdGguZmxvb3IoKChib3VuZHMueSArIGJvdW5kcy5oZWlnaHQgLyAyKSAtIHBvaW50LnkpIC8gc3kpXG4gIH07XG59XG5cblxuZnVuY3Rpb24gYXBwbHlDb25zdHJhaW50cyhhdHRyLCB0cmJsLCByZXNpemVDb25zdHJhaW50cykge1xuXG4gIHZhciB2YWx1ZSA9IHRyYmxbYXR0cl0sXG4gICAgICBtaW5WYWx1ZSA9IHJlc2l6ZUNvbnN0cmFpbnRzLm1pbiAmJiByZXNpemVDb25zdHJhaW50cy5taW5bYXR0cl0sXG4gICAgICBtYXhWYWx1ZSA9IHJlc2l6ZUNvbnN0cmFpbnRzLm1heCAmJiByZXNpemVDb25zdHJhaW50cy5tYXhbYXR0cl07XG5cbiAgaWYgKGlzTnVtYmVyKG1pblZhbHVlKSkge1xuICAgIHZhbHVlID0gKC90b3B8bGVmdC8udGVzdChhdHRyKSA/IG1pbiA6IG1heCkodmFsdWUsIG1pblZhbHVlKTtcbiAgfVxuXG4gIGlmIChpc051bWJlcihtYXhWYWx1ZSkpIHtcbiAgICB2YWx1ZSA9ICgvdG9wfGxlZnQvLnRlc3QoYXR0cikgPyBtYXggOiBtaW4pKHZhbHVlLCBtYXhWYWx1ZSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVDb25zdHJhaW50cyhjdXJyZW50Qm91bmRzLCByZXNpemVDb25zdHJhaW50cykge1xuXG4gIGlmICghcmVzaXplQ29uc3RyYWludHMpIHtcbiAgICByZXR1cm4gY3VycmVudEJvdW5kcztcbiAgfVxuXG4gIHZhciBjdXJyZW50VHJibCA9IGFzVFJCTChjdXJyZW50Qm91bmRzKTtcblxuICByZXR1cm4gYXNCb3VuZHMoe1xuICAgIHRvcDogYXBwbHlDb25zdHJhaW50cygndG9wJywgY3VycmVudFRyYmwsIHJlc2l6ZUNvbnN0cmFpbnRzKSxcbiAgICByaWdodDogYXBwbHlDb25zdHJhaW50cygncmlnaHQnLCBjdXJyZW50VHJibCwgcmVzaXplQ29uc3RyYWludHMpLFxuICAgIGJvdHRvbTogYXBwbHlDb25zdHJhaW50cygnYm90dG9tJywgY3VycmVudFRyYmwsIHJlc2l6ZUNvbnN0cmFpbnRzKSxcbiAgICBsZWZ0OiBhcHBseUNvbnN0cmFpbnRzKCdsZWZ0JywgY3VycmVudFRyYmwsIHJlc2l6ZUNvbnN0cmFpbnRzKVxuICB9KTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWluUmVzaXplQm91bmRzKGRpcmVjdGlvbiwgY3VycmVudEJvdW5kcywgbWluRGltZW5zaW9ucywgY2hpbGRyZW5Cb3VuZHMpIHtcblxuICB2YXIgY3VycmVudEJveCA9IGFzVFJCTChjdXJyZW50Qm91bmRzKTtcblxuICB2YXIgbWluQm94ID0ge1xuICAgIHRvcDogL24vLnRlc3QoZGlyZWN0aW9uKSA/IGN1cnJlbnRCb3guYm90dG9tIC0gbWluRGltZW5zaW9ucy5oZWlnaHQgOiBjdXJyZW50Qm94LnRvcCxcbiAgICBsZWZ0OiAvdy8udGVzdChkaXJlY3Rpb24pID8gY3VycmVudEJveC5yaWdodCAtIG1pbkRpbWVuc2lvbnMud2lkdGggOiBjdXJyZW50Qm94LmxlZnQsXG4gICAgYm90dG9tOiAvcy8udGVzdChkaXJlY3Rpb24pID8gY3VycmVudEJveC50b3AgKyBtaW5EaW1lbnNpb25zLmhlaWdodCA6IGN1cnJlbnRCb3guYm90dG9tLFxuICAgIHJpZ2h0OiAvZS8udGVzdChkaXJlY3Rpb24pID8gY3VycmVudEJveC5sZWZ0ICsgbWluRGltZW5zaW9ucy53aWR0aCA6IGN1cnJlbnRCb3gucmlnaHRcbiAgfTtcblxuICB2YXIgY2hpbGRyZW5Cb3ggPSBjaGlsZHJlbkJvdW5kcyA/IGFzVFJCTChjaGlsZHJlbkJvdW5kcykgOiBtaW5Cb3g7XG5cbiAgdmFyIGNvbWJpbmVkQm94ID0ge1xuICAgIHRvcDogbWluKG1pbkJveC50b3AsIGNoaWxkcmVuQm94LnRvcCksXG4gICAgbGVmdDogbWluKG1pbkJveC5sZWZ0LCBjaGlsZHJlbkJveC5sZWZ0KSxcbiAgICBib3R0b206IG1heChtaW5Cb3guYm90dG9tLCBjaGlsZHJlbkJveC5ib3R0b20pLFxuICAgIHJpZ2h0OiBtYXgobWluQm94LnJpZ2h0LCBjaGlsZHJlbkJveC5yaWdodClcbiAgfTtcblxuICByZXR1cm4gYXNCb3VuZHMoY29tYmluZWRCb3gpO1xufVxuXG5mdW5jdGlvbiBhc1BhZGRpbmcobWF5QmVQYWRkaW5nLCBkZWZhdWx0VmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBtYXlCZVBhZGRpbmcgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG1heUJlUGFkZGluZztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gREVGQVVMVF9DSElMRF9CT1hfUEFERElORztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkUGFkZGluZyhiYm94LCBwYWRkaW5nKSB7XG4gIHZhciBsZWZ0LCByaWdodCwgdG9wLCBib3R0b207XG5cbiAgaWYgKHR5cGVvZiBwYWRkaW5nID09PSAnb2JqZWN0Jykge1xuICAgIGxlZnQgPSBhc1BhZGRpbmcocGFkZGluZy5sZWZ0KTtcbiAgICByaWdodCA9IGFzUGFkZGluZyhwYWRkaW5nLnJpZ2h0KTtcbiAgICB0b3AgPSBhc1BhZGRpbmcocGFkZGluZy50b3ApO1xuICAgIGJvdHRvbSA9IGFzUGFkZGluZyhwYWRkaW5nLmJvdHRvbSk7XG4gIH0gZWxzZSB7XG4gICAgbGVmdCA9IHJpZ2h0ID0gdG9wID0gYm90dG9tID0gYXNQYWRkaW5nKHBhZGRpbmcpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBiYm94LnggLSBsZWZ0LFxuICAgIHk6IGJib3gueSAtIHRvcCxcbiAgICB3aWR0aDogYmJveC53aWR0aCArIGxlZnQgKyByaWdodCxcbiAgICBoZWlnaHQ6IGJib3guaGVpZ2h0ICsgdG9wICsgYm90dG9tXG4gIH07XG59XG5cblxuLyoqXG4gKiBJcyB0aGUgZ2l2ZW4gZWxlbWVudCBwYXJ0IG9mIHRoZSByZXNpemVcbiAqIHRhcmdldHMgbWluIGJvdW5kYXJ5IGJveD9cbiAqXG4gKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdoaWNoIGV4Y2x1ZGVzXG4gKiBjb25uZWN0aW9ucyBhbmQgbGFiZWxzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gaXNCQm94Q2hpbGQoZWxlbWVudCkge1xuXG4gIC8vIGV4Y2x1ZGUgY29ubmVjdGlvbnNcbiAgaWYgKGVsZW1lbnQud2F5cG9pbnRzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gZXhjbHVkZSBsYWJlbHNcbiAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2xhYmVsJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFJldHVybiBjaGlsZHJlbiBib3VuZGluZyBjb21wdXRlZCBmcm9tIGEgc2hhcGVzIGNoaWxkcmVuXG4gKiBvciBhIGxpc3Qgb2YgcHJlZmlsdGVyZWQgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLlNoYXBlfEFycmF5PGRqcy5tb2RlbC5TaGFwZT59IHNoYXBlT3JDaGlsZHJlblxuICogQHBhcmFtICB7bnVtYmVyfE9iamVjdH0gcGFkZGluZ1xuICpcbiAqIEByZXR1cm4ge0JvdW5kc31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVDaGlsZHJlbkJCb3goc2hhcGVPckNoaWxkcmVuLCBwYWRkaW5nKSB7XG5cbiAgdmFyIGVsZW1lbnRzO1xuXG4gIC8vIGNvbXB1dGUgYmFzZWQgb24gc2hhcGVcbiAgaWYgKHNoYXBlT3JDaGlsZHJlbi5sZW5ndGggPT09IHVuZGVmaW5lZCkge1xuXG4gICAgLy8gZ3JhYiBhbGwgdGhlIGNoaWxkcmVuIHRoYXQgYXJlIHBhcnQgb2YgdGhlXG4gICAgLy8gcGFyZW50cyBjaGlsZHJlbiBib3hcbiAgICBlbGVtZW50cyA9IGZpbHRlcihzaGFwZU9yQ2hpbGRyZW4uY2hpbGRyZW4sIGlzQkJveENoaWxkKTtcblxuICB9IGVsc2Uge1xuICAgIGVsZW1lbnRzID0gc2hhcGVPckNoaWxkcmVuO1xuICB9XG5cbiAgaWYgKGVsZW1lbnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBhZGRQYWRkaW5nKGdldEJCb3goZWxlbWVudHMpLCBwYWRkaW5nKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJ1bGVzTW9kdWxlIGZyb20gJy4uL3J1bGVzJztcbmltcG9ydCBEcmFnZ2luZ01vZHVsZSBmcm9tICcuLi9kcmFnZ2luZyc7XG5pbXBvcnQgUHJldmlld1N1cHBvcnRNb2R1bGUgZnJvbSAnLi4vcHJldmlldy1zdXBwb3J0JztcblxuaW1wb3J0IFJlc2l6ZSBmcm9tICcuL1Jlc2l6ZSc7XG5pbXBvcnQgUmVzaXplUHJldmlldyBmcm9tICcuL1Jlc2l6ZVByZXZpZXcnO1xuaW1wb3J0IFJlc2l6ZUhhbmRsZXMgZnJvbSAnLi9SZXNpemVIYW5kbGVzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIFJ1bGVzTW9kdWxlLFxuICAgIERyYWdnaW5nTW9kdWxlLFxuICAgIFByZXZpZXdTdXBwb3J0TW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbXG4gICAgJ3Jlc2l6ZScsXG4gICAgJ3Jlc2l6ZVByZXZpZXcnLFxuICAgICdyZXNpemVIYW5kbGVzJ1xuICBdLFxuICByZXNpemU6IFsgJ3R5cGUnLCBSZXNpemUgXSxcbiAgcmVzaXplUHJldmlldzogWyAndHlwZScsIFJlc2l6ZVByZXZpZXcgXSxcbiAgcmVzaXplSGFuZGxlczogWyAndHlwZScsIFJlc2l6ZUhhbmRsZXMgXVxufTtcbiIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnLi4vLi4vY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG4vKipcbiAqIEEgYmFzaWMgcHJvdmlkZXIgdGhhdCBtYXkgYmUgZXh0ZW5kZWQgdG8gaW1wbGVtZW50IG1vZGVsaW5nIHJ1bGVzLlxuICpcbiAqIEV4dGVuc2lvbnMgc2hvdWxkIGltcGxlbWVudCB0aGUgaW5pdCBtZXRob2QgdG8gYWN0dWFsbHkgYWRkIHRoZWlyIGN1c3RvbVxuICogbW9kZWxpbmcgY2hlY2tzLiBDaGVja3MgbWF5IGJlIGFkZGVkIHZpYSB0aGUgI2FkZFJ1bGUoYWN0aW9uLCBmbikgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJ1bGVQcm92aWRlcihldmVudEJ1cykge1xuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgdGhpcy5pbml0KCk7XG59XG5cblJ1bGVQcm92aWRlci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07XG5cbmluaGVyaXRzKFJ1bGVQcm92aWRlciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuXG4vKipcbiAqIEFkZHMgYSBtb2RlbGluZyBydWxlIGZvciB0aGUgZ2l2ZW4gYWN0aW9uLCBpbXBsZW1lbnRlZCB0aHJvdWdoXG4gKiBhIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICpcbiAqIFRoZSBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIG1vZGVsaW5nIHNwZWNpZmljIGFjdGlvbiBjb250ZXh0XG4gKiB0byBwZXJmb3JtIGl0cyBjaGVjay4gSXQgbXVzdCByZXR1cm4gYGZhbHNlYCB0byBkaXNhbGxvdyB0aGVcbiAqIGFjdGlvbiBmcm9tIGhhcHBlbmluZyBvciBgdHJ1ZWAgdG8gYWxsb3cgdGhlIGFjdGlvbi5cbiAqXG4gKiBBIHJ1bGUgcHJvdmlkZXIgbWF5IHBhc3Mgb3ZlciB0aGUgZXZhbHVhdGlvbiB0byBsb3dlciBwcmlvcml0eVxuICogcnVsZXMgYnkgcmV0dXJuaW5nIHJldHVybiBub3RoaW5nIChvciA8Y29kZT51bmRlZmluZWQ8L2NvZGU+KS5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIFJlc2l6YWJsZVJ1bGVzLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oKSB7XG4gKlxuICogICBcXC8qKlxuICogICAgKiBSZXR1cm4gYHRydWVgLCBgZmFsc2VgIG9yIG5vdGhpbmcgdG8gZGVub3RlXG4gKiAgICAqIF9hbGxvd2VkXywgX25vdCBhbGxvd2VkXyBhbmQgX2NvbnRpbnVlIGV2YWx1YXRpbmdfLlxuICogICAgKlxcL1xuICogICB0aGlzLmFkZFJ1bGUoJ3NoYXBlLnJlc2l6ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAqXG4gKiAgICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZTtcbiAqXG4gKiAgICAgaWYgKCFjb250ZXh0Lm5ld0JvdW5kcykge1xuICogICAgICAgLy8gY2hlY2sgZ2VuZXJhbCByZXNpemFiaWxpdHlcbiAqICAgICAgIGlmICghc2hhcGUucmVzaXphYmxlKSB7XG4gKiAgICAgICAgIHJldHVybiBmYWxzZTtcbiAqICAgICAgIH1cbiAqXG4gKiAgICAgICAvLyBub3QgcmV0dXJuaW5nIGFueXRoaW5nIChyZWFkOiB1bmRlZmluZWQpXG4gKiAgICAgICAvLyB3aWxsIGNvbnRpbnVlIHRoZSBldmFsdWF0aW9uIG9mIG90aGVyIHJ1bGVzXG4gKiAgICAgICAvLyAod2l0aCBsb3dlciBwcmlvcml0eSlcbiAqICAgICAgIHJldHVybjtcbiAqICAgICB9IGVsc2Uge1xuICogICAgICAgLy8gZWxlbWVudCBtdXN0IGhhdmUgbWluaW11bSBzaXplIG9mIDEwKjEwIHBvaW50c1xuICogICAgICAgcmV0dXJuIGNvbnRleHQubmV3Qm91bmRzLndpZHRoID4gMTAgJiYgY29udGV4dC5uZXdCb3VuZHMuaGVpZ2h0ID4gMTA7XG4gKiAgICAgfVxuICogICB9KTtcbiAqIH07XG4gKlxuICogQHBhcmFtIHtzdHJpbmd8QXJyYXk8c3RyaW5nPn0gYWN0aW9ucyB0aGUgaWRlbnRpZmllciBmb3IgdGhlIG1vZGVsaW5nIGFjdGlvbiB0byBjaGVja1xuICogQHBhcmFtIHtudW1iZXJ9IFtwcmlvcml0eV0gdGhlIHByaW9yaXR5IGF0IHdoaWNoIHRoaXMgcnVsZSBpcyBiZWluZyBhcHBsaWVkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyB0aGUgYWN0dWFsIGNoZWNrXG4gKi9cblJ1bGVQcm92aWRlci5wcm90b3R5cGUuYWRkUnVsZSA9IGZ1bmN0aW9uKGFjdGlvbnMsIHByaW9yaXR5LCBmbikge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBpZiAodHlwZW9mIGFjdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgYWN0aW9ucyA9IFsgYWN0aW9ucyBdO1xuICB9XG5cbiAgYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGFjdGlvbikge1xuXG4gICAgc2VsZi5jYW5FeGVjdXRlKGFjdGlvbiwgcHJpb3JpdHksIGZ1bmN0aW9uKGNvbnRleHQsIGFjdGlvbiwgZXZlbnQpIHtcbiAgICAgIHJldHVybiBmbihjb250ZXh0KTtcbiAgICB9LCB0cnVlKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIEltcGxlbWVudCB0aGlzIG1ldGhvZCB0byBhZGQgbmV3IHJ1bGVzIGR1cmluZyBwcm92aWRlciBpbml0aWFsaXphdGlvbi5cbiAqL1xuUnVsZVByb3ZpZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oKSB7fTsiLCIvKipcbiAqIEEgc2VydmljZSB0aGF0IHByb3ZpZGVzIHJ1bGVzIGZvciBjZXJ0YWluIGRpYWdyYW0gYWN0aW9ucy5cbiAqXG4gKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aWxsIGhvb2sgaW50byB0aGUge0BsaW5rIENvbW1hbmRTdGFja31cbiAqIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBydWxlIGV2YWx1YXRpb24uIE1ha2Ugc3VyZSB0byBwcm92aWRlIHRoZVxuICogYGNvbW1hbmRTdGFja2Agc2VydmljZSB3aXRoIHRoaXMgbW9kdWxlIGlmIHlvdSBwbGFuIHRvIHVzZSBpdC5cbiAqXG4gKiBUb2dldGhlciB3aXRoIHRoaXMgaW1wbGVtZW50YXRpb24geW91IG1heSB1c2UgdGhlIHtAbGluayBSdWxlUHJvdmlkZXJ9XG4gKiB0byBpbXBsZW1lbnQgeW91ciBvd24gcnVsZSBjaGVja2Vycy5cbiAqXG4gKiBUaGlzIG1vZHVsZSBpcyBtZW50IHRvIGJlIGVhc2lseSByZXBsYWNlZCwgdGh1cyB0aGUgdGlueSBmb290IHByaW50LlxuICpcbiAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJ1bGVzKGluamVjdG9yKSB7XG4gIHRoaXMuX2NvbW1hbmRTdGFjayA9IGluamVjdG9yLmdldCgnY29tbWFuZFN0YWNrJywgZmFsc2UpO1xufVxuXG5SdWxlcy4kaW5qZWN0ID0gWyAnaW5qZWN0b3InIF07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGEgZ2l2ZW4gbW9kZWxpbmcgYWN0aW9uIGNhbiBiZSBleGVjdXRlZFxuICogaW4gdGhlIHNwZWNpZmllZCBjb250ZXh0LlxuICpcbiAqIFRoaXMgaW1wbGVtZW50YXRpb24gd2lsbCByZXNwb25kIHdpdGggYWxsb3cgdW5sZXNzIGFueW9uZVxuICogb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIHRoZSBhY3Rpb24gdG8gYmUgY2hlY2tlZFxuICogQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0XSB0aGUgY29udGV4dCB0byBjaGVjayB0aGUgYWN0aW9uIGluXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlLCBmYWxzZSBvciBudWxsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZVxuICogICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIGlzIGFsbG93ZWQsIG5vdCBhbGxvd2VkIG9yIHNob3VsZCBiZSBpZ25vcmVkLlxuICovXG5SdWxlcy5wcm90b3R5cGUuYWxsb3dlZCA9IGZ1bmN0aW9uKGFjdGlvbiwgY29udGV4dCkge1xuICB2YXIgYWxsb3dlZCA9IHRydWU7XG5cbiAgdmFyIGNvbW1hbmRTdGFjayA9IHRoaXMuX2NvbW1hbmRTdGFjaztcblxuICBpZiAoY29tbWFuZFN0YWNrKSB7XG4gICAgYWxsb3dlZCA9IGNvbW1hbmRTdGFjay5jYW5FeGVjdXRlKGFjdGlvbiwgY29udGV4dCk7XG4gIH1cblxuICAvLyBtYXAgdW5kZWZpbmVkIHRvIHRydWUsIGkuZS4gbm8gcnVsZXNcbiAgcmV0dXJuIGFsbG93ZWQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBhbGxvd2VkO1xufTsiLCJpbXBvcnQgUnVsZXMgZnJvbSAnLi9SdWxlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ3J1bGVzJyBdLFxuICBydWxlczogWyAndHlwZScsIFJ1bGVzIF1cbn07XG4iLCJpbXBvcnQge1xuICBjbGVhciBhcyBkb21DbGVhcixcbiAgZGVsZWdhdGUgYXMgZG9tRGVsZWdhdGUsXG4gIHF1ZXJ5IGFzIGRvbVF1ZXJ5LFxuICBjbGFzc2VzIGFzIGRvbUNsYXNzZXMsXG4gIGF0dHIgYXMgZG9tQXR0cixcbiAgZG9taWZ5IGFzIGRvbWlmeVxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHtcbiAgZ2V0QkJveCBhcyBnZXRCb3VuZGluZ0JveFxufSBmcm9tICcuLi8uLi91dGlsL0VsZW1lbnRzJztcblxuaW1wb3J0IHtcbiAgZXNjYXBlSFRNTFxufSBmcm9tICcuLi8uLi91dGlsL0VzY2FwZVV0aWwnO1xuXG4vKipcbiAqIFByb3ZpZGVzIHNlYXJjaGluZyBpbmZyYXN0cnVjdHVyZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTZWFyY2hQYWQoY2FudmFzLCBldmVudEJ1cywgb3ZlcmxheXMsIHNlbGVjdGlvbikge1xuICB0aGlzLl9vcGVuID0gZmFsc2U7XG4gIHRoaXMuX3Jlc3VsdHMgPSBbXTtcbiAgdGhpcy5fZXZlbnRNYXBzID0gW107XG5cbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB0aGlzLl9vdmVybGF5cyA9IG92ZXJsYXlzO1xuICB0aGlzLl9zZWxlY3Rpb24gPSBzZWxlY3Rpb247XG5cbiAgLy8gc2V0dXAgZWxlbWVudHNcbiAgdGhpcy5fY29udGFpbmVyID0gZG9taWZ5KFNlYXJjaFBhZC5CT1hfSFRNTCk7XG4gIHRoaXMuX3NlYXJjaElucHV0ID0gZG9tUXVlcnkoU2VhcmNoUGFkLklOUFVUX1NFTEVDVE9SLCB0aGlzLl9jb250YWluZXIpO1xuICB0aGlzLl9yZXN1bHRzQ29udGFpbmVyID0gZG9tUXVlcnkoU2VhcmNoUGFkLlJFU1VMVFNfQ09OVEFJTkVSX1NFTEVDVE9SLCB0aGlzLl9jb250YWluZXIpO1xuXG4gIC8vIGF0dGFjaCBzZWFyY2ggcGFkXG4gIHRoaXMuX2NhbnZhcy5nZXRDb250YWluZXIoKS5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpO1xuXG4gIC8vIGNsZWFudXAgb24gZGVzdHJveVxuICBldmVudEJ1cy5vbihbICdjYW52YXMuZGVzdHJveScsICdkaWFncmFtLmRlc3Ryb3knIF0sIHRoaXMuY2xvc2UsIHRoaXMpO1xufVxuXG5cblNlYXJjaFBhZC4kaW5qZWN0ID0gW1xuICAnY2FudmFzJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ292ZXJsYXlzJyxcbiAgJ3NlbGVjdGlvbidcbl07XG5cblxuLyoqXG4gKiBCaW5kcyBhbmQga2VlcHMgdHJhY2sgb2YgYWxsIGV2ZW50IGxpc3RlcmVuZXJzXG4gKi9cblNlYXJjaFBhZC5wcm90b3R5cGUuX2JpbmRFdmVudHMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGZ1bmN0aW9uIGxpc3RlbihlbCwgc2VsZWN0b3IsIHR5cGUsIGZuKSB7XG4gICAgc2VsZi5fZXZlbnRNYXBzLnB1c2goe1xuICAgICAgZWw6IGVsLFxuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGxpc3RlbmVyOiBkb21EZWxlZ2F0ZS5iaW5kKGVsLCBzZWxlY3RvciwgdHlwZSwgZm4pXG4gICAgfSk7XG4gIH1cblxuICAvLyBjbG9zZSBzZWFyY2ggb24gY2xpY2tpbmcgYW55d2hlcmUgb3V0c2lkZVxuICBsaXN0ZW4oZG9jdW1lbnQsICdodG1sJywgJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuICAgIHNlbGYuY2xvc2UoKTtcbiAgfSk7XG5cbiAgLy8gc3RvcCBldmVudCBmcm9tIHByb3BhZ2F0aW5nIGFuZCBjbG9zaW5nIHNlYXJjaFxuICAvLyBmb2N1cyBvbiBpbnB1dFxuICBsaXN0ZW4odGhpcy5fY29udGFpbmVyLCBTZWFyY2hQYWQuSU5QVVRfU0VMRUNUT1IsICdjbGljaycsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGUuZGVsZWdhdGVUYXJnZXQuZm9jdXMoKTtcbiAgfSk7XG5cbiAgLy8gcHJlc2VsZWN0IHJlc3VsdCBvbiBob3ZlclxuICBsaXN0ZW4odGhpcy5fY29udGFpbmVyLCBTZWFyY2hQYWQuUkVTVUxUX1NFTEVDVE9SLCAnbW91c2VvdmVyJywgZnVuY3Rpb24oZSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgc2VsZi5fc2Nyb2xsVG9Ob2RlKGUuZGVsZWdhdGVUYXJnZXQpO1xuICAgIHNlbGYuX3ByZXNlbGVjdChlLmRlbGVnYXRlVGFyZ2V0KTtcbiAgfSk7XG5cbiAgLy8gc2VsZWN0cyBkZXNpcmVkIHJlc3VsdCBvbiBtb3VzZSBjbGlja1xuICBsaXN0ZW4odGhpcy5fY29udGFpbmVyLCBTZWFyY2hQYWQuUkVTVUxUX1NFTEVDVE9SLCAnY2xpY2snLCBmdW5jdGlvbihlKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBzZWxmLl9zZWxlY3QoZS5kZWxlZ2F0ZVRhcmdldCk7XG4gIH0pO1xuXG4gIC8vIHByZXZlbnQgY3Vyc29yIGluIGlucHV0IGZyb20gZ29pbmcgbGVmdCBhbmQgcmlnaHQgd2hlbiB1c2luZyB1cC9kb3duIHRvXG4gIC8vIG5hdmlnYXRlIHJlc3VsdHNcbiAgbGlzdGVuKHRoaXMuX2NvbnRhaW5lciwgU2VhcmNoUGFkLklOUFVUX1NFTEVDVE9SLCAna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHtcblxuICAgIC8vIHVwXG4gICAgaWYgKGUua2V5Q29kZSA9PT0gMzgpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICAvLyBkb3duXG4gICAgaWYgKGUua2V5Q29kZSA9PT0gNDApIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGhhbmRsZSBrZXlib2FyZCBpbnB1dFxuICBsaXN0ZW4odGhpcy5fY29udGFpbmVyLCBTZWFyY2hQYWQuSU5QVVRfU0VMRUNUT1IsICdrZXl1cCcsIGZ1bmN0aW9uKGUpIHtcblxuICAgIC8vIGVzY2FwZVxuICAgIGlmIChlLmtleUNvZGUgPT09IDI3KSB7XG4gICAgICByZXR1cm4gc2VsZi5jbG9zZSgpO1xuICAgIH1cblxuICAgIC8vIGVudGVyXG4gICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgIHZhciBzZWxlY3RlZCA9IHNlbGYuX2dldEN1cnJlbnRSZXN1bHQoKTtcblxuICAgICAgcmV0dXJuIHNlbGVjdGVkID8gc2VsZi5fc2VsZWN0KHNlbGVjdGVkKSA6IHNlbGYuY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvLyB1cFxuICAgIGlmIChlLmtleUNvZGUgPT09IDM4KSB7XG4gICAgICByZXR1cm4gc2VsZi5fc2Nyb2xsVG9EaXJlY3Rpb24odHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gZG93blxuICAgIGlmIChlLmtleUNvZGUgPT09IDQwKSB7XG4gICAgICByZXR1cm4gc2VsZi5fc2Nyb2xsVG9EaXJlY3Rpb24oKTtcbiAgICB9XG5cbiAgICAvLyBsZWZ0ICYmIHJpZ2h0XG4gICAgLy8gZG8gbm90IHNlYXJjaCB3aGlsZSBuYXZpZ2F0aW5nIHRleHQgaW5wdXRcbiAgICBpZiAoZS5rZXlDb2RlID09PSAzNyB8fCBlLmtleUNvZGUgPT09IDM5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYW55dGhpbmcgZWxzZVxuICAgIHNlbGYuX3NlYXJjaChlLmRlbGVnYXRlVGFyZ2V0LnZhbHVlKTtcbiAgfSk7XG59O1xuXG5cbi8qKlxuICogVW5iaW5kcyBhbGwgcHJldmlvdXNseSBlc3RhYmxpc2hlZCBsaXN0ZW5lcnNcbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5fdW5iaW5kRXZlbnRzID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2V2ZW50TWFwcy5mb3JFYWNoKGZ1bmN0aW9uKG0pIHtcbiAgICBkb21EZWxlZ2F0ZS51bmJpbmQobS5lbCwgbS50eXBlLCBtLmxpc3RlbmVyKTtcbiAgfSk7XG59O1xuXG5cbi8qKlxuICogUGVyZm9ybXMgYSBzZWFyY2ggZm9yIHRoZSBnaXZlbiBwYXR0ZXJuLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gcGF0dGVyblxuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLl9zZWFyY2ggPSBmdW5jdGlvbihwYXR0ZXJuKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLl9jbGVhclJlc3VsdHMoKTtcblxuICAvLyBkbyBub3Qgc2VhcmNoIG9uIGVtcHR5IHF1ZXJ5XG4gIGlmICghcGF0dGVybiB8fCBwYXR0ZXJuID09PSAnJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBzZWFyY2hSZXN1bHRzID0gdGhpcy5fc2VhcmNoUHJvdmlkZXIuZmluZChwYXR0ZXJuKTtcblxuICBpZiAoIXNlYXJjaFJlc3VsdHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gYXBwZW5kIG5ldyByZXN1bHRzXG4gIHNlYXJjaFJlc3VsdHMuZm9yRWFjaChmdW5jdGlvbihyZXN1bHQpIHtcbiAgICB2YXIgaWQgPSByZXN1bHQuZWxlbWVudC5pZDtcbiAgICB2YXIgbm9kZSA9IHNlbGYuX2NyZWF0ZVJlc3VsdE5vZGUocmVzdWx0LCBpZCk7XG4gICAgc2VsZi5fcmVzdWx0c1tpZF0gPSB7XG4gICAgICBlbGVtZW50OiByZXN1bHQuZWxlbWVudCxcbiAgICAgIG5vZGU6IG5vZGVcbiAgICB9O1xuICB9KTtcblxuICAvLyBwcmVzZWxlY3QgZmlyc3QgcmVzdWx0XG4gIHZhciBub2RlID0gZG9tUXVlcnkoU2VhcmNoUGFkLlJFU1VMVF9TRUxFQ1RPUiwgdGhpcy5fcmVzdWx0c0NvbnRhaW5lcik7XG4gIHRoaXMuX3Njcm9sbFRvTm9kZShub2RlKTtcbiAgdGhpcy5fcHJlc2VsZWN0KG5vZGUpO1xufTtcblxuXG4vKipcbiAqIE5hdmlnYXRlIHRvIHRoZSBwcmV2aW91cy9uZXh0IHJlc3VsdC4gRGVmYXVsdHMgdG8gbmV4dCByZXN1bHQuXG4gKiBAcGFyYW0gIHtib29sZWFufSBwcmV2aW91c1xuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLl9zY3JvbGxUb0RpcmVjdGlvbiA9IGZ1bmN0aW9uKHByZXZpb3VzKSB7XG4gIHZhciBzZWxlY3RlZCA9IHRoaXMuX2dldEN1cnJlbnRSZXN1bHQoKTtcbiAgaWYgKCFzZWxlY3RlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBub2RlID0gcHJldmlvdXMgPyBzZWxlY3RlZC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIDogc2VsZWN0ZWQubmV4dEVsZW1lbnRTaWJsaW5nO1xuICBpZiAobm9kZSkge1xuICAgIHRoaXMuX3Njcm9sbFRvTm9kZShub2RlKTtcbiAgICB0aGlzLl9wcmVzZWxlY3Qobm9kZSk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBTY3JvbGwgdG8gdGhlIG5vZGUgaWYgaXQgaXMgbm90IHZpc2libGUuXG4gKlxuICogQHBhcmFtICB7RWxlbWVudH0gbm9kZVxuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLl9zY3JvbGxUb05vZGUgPSBmdW5jdGlvbihub2RlKSB7XG4gIGlmICghbm9kZSB8fCBub2RlID09PSB0aGlzLl9nZXRDdXJyZW50UmVzdWx0KCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbm9kZU9mZnNldCA9IG5vZGUub2Zmc2V0VG9wO1xuICB2YXIgY29udGFpbmVyU2Nyb2xsID0gdGhpcy5fcmVzdWx0c0NvbnRhaW5lci5zY3JvbGxUb3A7XG5cbiAgdmFyIGJvdHRvbVNjcm9sbCA9IG5vZGVPZmZzZXQgLSB0aGlzLl9yZXN1bHRzQ29udGFpbmVyLmNsaWVudEhlaWdodCArIG5vZGUuY2xpZW50SGVpZ2h0O1xuXG4gIGlmIChub2RlT2Zmc2V0IDwgY29udGFpbmVyU2Nyb2xsKSB7XG4gICAgdGhpcy5fcmVzdWx0c0NvbnRhaW5lci5zY3JvbGxUb3AgPSBub2RlT2Zmc2V0O1xuICB9IGVsc2UgaWYgKGNvbnRhaW5lclNjcm9sbCA8IGJvdHRvbVNjcm9sbCkge1xuICAgIHRoaXMuX3Jlc3VsdHNDb250YWluZXIuc2Nyb2xsVG9wID0gYm90dG9tU2Nyb2xsO1xuICB9XG59O1xuXG5cbi8qKlxuICogQ2xlYXJzIGFsbCByZXN1bHRzIGRhdGEuXG4gKi9cblNlYXJjaFBhZC5wcm90b3R5cGUuX2NsZWFyUmVzdWx0cyA9IGZ1bmN0aW9uKCkge1xuICBkb21DbGVhcih0aGlzLl9yZXN1bHRzQ29udGFpbmVyKTtcblxuICB0aGlzLl9yZXN1bHRzID0gW107XG5cbiAgdGhpcy5fcmVzZXRPdmVybGF5KCk7XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnc2VhcmNoUGFkLmNsZWFyZWQnKTtcbn07XG5cblxuLyoqXG4gKiBHZXQgY3VycmVudGx5IHNlbGVjdGVkIHJlc3VsdC5cbiAqXG4gKiBAcmV0dXJuIHtFbGVtZW50fVxuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLl9nZXRDdXJyZW50UmVzdWx0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBkb21RdWVyeShTZWFyY2hQYWQuUkVTVUxUX1NFTEVDVEVEX1NFTEVDVE9SLCB0aGlzLl9yZXN1bHRzQ29udGFpbmVyKTtcbn07XG5cblxuLyoqXG4gKiBDcmVhdGUgcmVzdWx0IERPTSBlbGVtZW50IHdpdGhpbiByZXN1bHRzIGNvbnRhaW5lclxuICogdGhhdCBjb3JyZXNwb25kcyB0byBhIHNlYXJjaCByZXN1bHQuXG4gKlxuICogJ3Jlc3VsdCcgOiBvbmUgb2YgdGhlIGVsZW1lbnRzIHJldHVybmVkIGJ5IFNlYXJjaFByb3ZpZGVyXG4gKiAnaWQnIDogaWQgYXR0cmlidXRlIHZhbHVlIHRvIGFzc2lnbiB0byB0aGUgbmV3IERPTSBub2RlXG4gKiByZXR1cm4gOiBjcmVhdGVkIERPTSBlbGVtZW50XG4gKlxuICogQHBhcmFtICB7U2VhcmNoUmVzdWx0fSByZXN1bHRcbiAqIEBwYXJhbSAge3N0cmluZ30gaWRcbiAqIEByZXR1cm4ge0VsZW1lbnR9XG4gKi9cblNlYXJjaFBhZC5wcm90b3R5cGUuX2NyZWF0ZVJlc3VsdE5vZGUgPSBmdW5jdGlvbihyZXN1bHQsIGlkKSB7XG4gIHZhciBub2RlID0gZG9taWZ5KFNlYXJjaFBhZC5SRVNVTFRfSFRNTCk7XG5cbiAgLy8gY3JlYXRlIG9ubHkgaWYgYXZhaWxhYmxlXG4gIGlmIChyZXN1bHQucHJpbWFyeVRva2Vucy5sZW5ndGggPiAwKSB7XG4gICAgY3JlYXRlSW5uZXJUZXh0Tm9kZShub2RlLCByZXN1bHQucHJpbWFyeVRva2VucywgU2VhcmNoUGFkLlJFU1VMVF9QUklNQVJZX0hUTUwpO1xuICB9XG5cbiAgLy8gc2Vjb25kYXJ5IHRva2VucyAocmVwcmVzZW50IGVsZW1lbnQgSUQpIGFyZSBhbGx3YXlzIGF2YWlsYWJsZVxuICBjcmVhdGVJbm5lclRleHROb2RlKG5vZGUsIHJlc3VsdC5zZWNvbmRhcnlUb2tlbnMsIFNlYXJjaFBhZC5SRVNVTFRfU0VDT05EQVJZX0hUTUwpO1xuXG4gIGRvbUF0dHIobm9kZSwgU2VhcmNoUGFkLlJFU1VMVF9JRF9BVFRSSUJVVEUsIGlkKTtcblxuICB0aGlzLl9yZXN1bHRzQ29udGFpbmVyLmFwcGVuZENoaWxkKG5vZGUpO1xuXG4gIHJldHVybiBub2RlO1xufTtcblxuXG4vKipcbiAqIFJlZ2lzdGVyIHNlYXJjaCBlbGVtZW50IHByb3ZpZGVyLlxuICpcbiAqIFNlYXJjaFByb3ZpZGVyLmZpbmQgLSBwcm92aWRlcyBzZWFyY2ggZnVuY3Rpb24gb3ZlciBvd24gZWxlbWVudHNcbiAqICAocGF0dGVybikgPT4gW3sgdGV4dDogPFN0cmluZz4sIGVsZW1lbnQ6IDxFbGVtZW50Pn0sIC4uLl1cbiAqXG4gKiBAcGFyYW0gIHtTZWFyY2hQcm92aWRlcn0gcHJvdmlkZXJcbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5yZWdpc3RlclByb3ZpZGVyID0gZnVuY3Rpb24ocHJvdmlkZXIpIHtcbiAgdGhpcy5fc2VhcmNoUHJvdmlkZXIgPSBwcm92aWRlcjtcbn07XG5cblxuLyoqXG4gKiBPcGVuIHNlYXJjaCBwYWQuXG4gKi9cblNlYXJjaFBhZC5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX3NlYXJjaFByb3ZpZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdubyBzZWFyY2ggcHJvdmlkZXIgcmVnaXN0ZXJlZCcpO1xuICB9XG5cbiAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9iaW5kRXZlbnRzKCk7XG5cbiAgdGhpcy5fb3BlbiA9IHRydWU7XG5cbiAgZG9tQ2xhc3Nlcyh0aGlzLl9jb250YWluZXIpLmFkZCgnb3BlbicpO1xuXG4gIHRoaXMuX3NlYXJjaElucHV0LmZvY3VzKCk7XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnc2VhcmNoUGFkLm9wZW5lZCcpO1xufTtcblxuXG4vKipcbiAqIENsb3NlIHNlYXJjaCBwYWQuXG4gKi9cblNlYXJjaFBhZC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLmlzT3BlbigpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fdW5iaW5kRXZlbnRzKCk7XG5cbiAgdGhpcy5fb3BlbiA9IGZhbHNlO1xuXG4gIGRvbUNsYXNzZXModGhpcy5fY29udGFpbmVyKS5yZW1vdmUoJ29wZW4nKTtcblxuICB0aGlzLl9jbGVhclJlc3VsdHMoKTtcblxuICB0aGlzLl9zZWFyY2hJbnB1dC52YWx1ZSA9ICcnO1xuICB0aGlzLl9zZWFyY2hJbnB1dC5ibHVyKCk7XG5cbiAgdGhpcy5fcmVzZXRPdmVybGF5KCk7XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnc2VhcmNoUGFkLmNsb3NlZCcpO1xufTtcblxuXG4vKipcbiAqIFRvZ2dsZXMgc2VhcmNoIHBhZCBvbi9vZmYuXG4gKi9cblNlYXJjaFBhZC5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuaXNPcGVuKCkgPyB0aGlzLmNsb3NlKCkgOiB0aGlzLm9wZW4oKTtcbn07XG5cblxuLyoqXG4gKiBSZXBvcnQgc3RhdGUgb2Ygc2VhcmNoIHBhZC5cbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5pc09wZW4gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX29wZW47XG59O1xuXG5cbi8qKlxuICogUHJlc2VsZWN0IHJlc3VsdCBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50fSBlbGVtZW50XG4gKi9cblNlYXJjaFBhZC5wcm90b3R5cGUuX3ByZXNlbGVjdCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdmFyIHNlbGVjdGVkTm9kZSA9IHRoaXMuX2dldEN1cnJlbnRSZXN1bHQoKTtcblxuICAvLyBhbHJlYWR5IHNlbGVjdGVkXG4gIGlmIChub2RlID09PSBzZWxlY3RlZE5vZGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyByZW1vdmluZyBwcmVzZWxlY3Rpb24gZnJvbSBjdXJyZW50IG5vZGVcbiAgaWYgKHNlbGVjdGVkTm9kZSkge1xuICAgIGRvbUNsYXNzZXMoc2VsZWN0ZWROb2RlKS5yZW1vdmUoU2VhcmNoUGFkLlJFU1VMVF9TRUxFQ1RFRF9DTEFTUyk7XG4gIH1cblxuICB2YXIgaWQgPSBkb21BdHRyKG5vZGUsIFNlYXJjaFBhZC5SRVNVTFRfSURfQVRUUklCVVRFKTtcbiAgdmFyIGVsZW1lbnQgPSB0aGlzLl9yZXN1bHRzW2lkXS5lbGVtZW50O1xuXG4gIGRvbUNsYXNzZXMobm9kZSkuYWRkKFNlYXJjaFBhZC5SRVNVTFRfU0VMRUNURURfQ0xBU1MpO1xuXG4gIHRoaXMuX3Jlc2V0T3ZlcmxheShlbGVtZW50KTtcblxuICB0aGlzLl9jZW50ZXJWaWV3Ym94KGVsZW1lbnQpO1xuXG4gIHRoaXMuX3NlbGVjdGlvbi5zZWxlY3QoZWxlbWVudCk7XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnc2VhcmNoUGFkLnByZXNlbGVjdGVkJywgZWxlbWVudCk7XG59O1xuXG5cbi8qKlxuICogU2VsZWN0IHJlc3VsdCBub2RlLlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IGVsZW1lbnRcbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5fc2VsZWN0ID0gZnVuY3Rpb24obm9kZSkge1xuICB2YXIgaWQgPSBkb21BdHRyKG5vZGUsIFNlYXJjaFBhZC5SRVNVTFRfSURfQVRUUklCVVRFKTtcbiAgdmFyIGVsZW1lbnQgPSB0aGlzLl9yZXN1bHRzW2lkXS5lbGVtZW50O1xuXG4gIHRoaXMuY2xvc2UoKTtcblxuICB0aGlzLl9yZXNldE92ZXJsYXkoKTtcblxuICB0aGlzLl9jZW50ZXJWaWV3Ym94KGVsZW1lbnQpO1xuXG4gIHRoaXMuX3NlbGVjdGlvbi5zZWxlY3QoZWxlbWVudCk7XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnc2VhcmNoUGFkLnNlbGVjdGVkJywgZWxlbWVudCk7XG59O1xuXG5cbi8qKlxuICogQ2VudGVyIHZpZXdib3ggb24gdGhlIGVsZW1lbnQgbWlkZGxlIHBvaW50LlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IGVsZW1lbnRcbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5fY2VudGVyVmlld2JveCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIHZpZXdib3ggPSB0aGlzLl9jYW52YXMudmlld2JveCgpO1xuXG4gIHZhciBib3ggPSBnZXRCb3VuZGluZ0JveChlbGVtZW50KTtcblxuICB2YXIgbmV3Vmlld2JveCA9IHtcbiAgICB4OiAoYm94LnggKyBib3gud2lkdGgvMikgLSB2aWV3Ym94Lm91dGVyLndpZHRoLzIsXG4gICAgeTogKGJveC55ICsgYm94LmhlaWdodC8yKSAtIHZpZXdib3gub3V0ZXIuaGVpZ2h0LzIsXG4gICAgd2lkdGg6IHZpZXdib3gub3V0ZXIud2lkdGgsXG4gICAgaGVpZ2h0OiB2aWV3Ym94Lm91dGVyLmhlaWdodFxuICB9O1xuXG4gIHRoaXMuX2NhbnZhcy52aWV3Ym94KG5ld1ZpZXdib3gpO1xuXG4gIHRoaXMuX2NhbnZhcy56b29tKHZpZXdib3guc2NhbGUpO1xufTtcblxuXG4vKipcbiAqIFJlc2V0IG92ZXJsYXkgcmVtb3ZlcyBhbmQsIG9wdGlvbmFsbHksIHNldFxuICogb3ZlcmxheSB0byBhIG5ldyBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IGVsZW1lbnRcbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5fcmVzZXRPdmVybGF5ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICBpZiAodGhpcy5fb3ZlcmxheUlkKSB7XG4gICAgdGhpcy5fb3ZlcmxheXMucmVtb3ZlKHRoaXMuX292ZXJsYXlJZCk7XG4gIH1cblxuICBpZiAoZWxlbWVudCkge1xuICAgIHZhciBib3ggPSBnZXRCb3VuZGluZ0JveChlbGVtZW50KTtcbiAgICB2YXIgb3ZlcmxheSA9IGNvbnN0cnVjdE92ZXJsYXkoYm94KTtcbiAgICB0aGlzLl9vdmVybGF5SWQgPSB0aGlzLl9vdmVybGF5cy5hZGQoZWxlbWVudCwgb3ZlcmxheSk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBDb25zdHJ1Y3Qgb3ZlcmxheSBvYmplY3QgZm9yIHRoZSBnaXZlbiBib3VuZGluZyBib3guXG4gKlxuICogQHBhcmFtICB7Qm91bmRpbmdCb3h9IGJveFxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBjb25zdHJ1Y3RPdmVybGF5KGJveCkge1xuXG4gIHZhciBvZmZzZXQgPSA2O1xuICB2YXIgdyA9IGJveC53aWR0aCArIG9mZnNldCAqIDI7XG4gIHZhciBoID0gYm94LmhlaWdodCArIG9mZnNldCAqIDI7XG5cbiAgdmFyIHN0eWxlcyA9IFtcbiAgICAnd2lkdGg6ICcrIHcgKydweCcsXG4gICAgJ2hlaWdodDogJysgaCArICdweCdcbiAgXS5qb2luKCc7ICcpO1xuXG4gIHJldHVybiB7XG4gICAgcG9zaXRpb246IHtcbiAgICAgIGJvdHRvbTogaCAtIG9mZnNldCxcbiAgICAgIHJpZ2h0OiB3IC0gb2Zmc2V0XG4gICAgfSxcbiAgICBzaG93OiB0cnVlLFxuICAgIGh0bWw6ICc8ZGl2IHN0eWxlPVwiJyArIHN0eWxlcyArICdcIiBjbGFzcz1cIicgKyBTZWFyY2hQYWQuT1ZFUkxBWV9DTEFTUyArICdcIj48L2Rpdj4nXG4gIH07XG59XG5cblxuLyoqXG4gKiBDcmVhdGVzIGFuZCBhcHBlbmRzIGNoaWxkIG5vZGUgZnJvbSByZXN1bHQgdG9rZW5zIGFuZCBIVE1MIHRlbXBsYXRlLlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSAge0FycmF5PE9iamVjdD59IHRva2Vuc1xuICogQHBhcmFtICB7c3RyaW5nfSB0ZW1wbGF0ZVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbm5lclRleHROb2RlKHBhcmVudE5vZGUsIHRva2VucywgdGVtcGxhdGUpIHtcbiAgdmFyIHRleHQgPSBjcmVhdGVIdG1sVGV4dCh0b2tlbnMpO1xuICB2YXIgY2hpbGROb2RlID0gZG9taWZ5KHRlbXBsYXRlKTtcbiAgY2hpbGROb2RlLmlubmVySFRNTCA9IHRleHQ7XG4gIHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoY2hpbGROb2RlKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgaW50ZXJuYWwgSFRNTCBtYXJrdXAgZnJvbSByZXN1bHQgdG9rZW5zLlxuICogQ2F0ZXJzIGZvciBoaWdobGlnaHRpbmcgcGF0dGVybiBtYXRjaGVkIHRva2Vucy5cbiAqXG4gKiBAcGFyYW0gIHtBcnJheTxPYmplY3Q+fSB0b2tlbnNcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSHRtbFRleHQodG9rZW5zKSB7XG4gIHZhciBodG1sVGV4dCA9ICcnO1xuXG4gIHRva2Vucy5mb3JFYWNoKGZ1bmN0aW9uKHQpIHtcbiAgICBpZiAodC5tYXRjaGVkKSB7XG4gICAgICBodG1sVGV4dCArPSAnPHN0cm9uZyBjbGFzcz1cIicgKyBTZWFyY2hQYWQuUkVTVUxUX0hJR0hMSUdIVF9DTEFTUyArICdcIj4nICsgZXNjYXBlSFRNTCh0Lm1hdGNoZWQpICsgJzwvc3Ryb25nPic7XG4gICAgfSBlbHNlIHtcbiAgICAgIGh0bWxUZXh0ICs9IGVzY2FwZUhUTUwodC5ub3JtYWwpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGh0bWxUZXh0ICE9PSAnJyA/IGh0bWxUZXh0IDogbnVsbDtcbn1cblxuXG4vKipcbiAqIENPTlNUQU5UU1xuICovXG5TZWFyY2hQYWQuQ09OVEFJTkVSX1NFTEVDVE9SID0gJy5kanMtc2VhcmNoLWNvbnRhaW5lcic7XG5TZWFyY2hQYWQuSU5QVVRfU0VMRUNUT1IgPSAnLmRqcy1zZWFyY2gtaW5wdXQgaW5wdXQnO1xuU2VhcmNoUGFkLlJFU1VMVFNfQ09OVEFJTkVSX1NFTEVDVE9SID0gJy5kanMtc2VhcmNoLXJlc3VsdHMnO1xuU2VhcmNoUGFkLlJFU1VMVF9TRUxFQ1RPUiA9ICcuZGpzLXNlYXJjaC1yZXN1bHQnO1xuU2VhcmNoUGFkLlJFU1VMVF9TRUxFQ1RFRF9DTEFTUyA9ICdkanMtc2VhcmNoLXJlc3VsdC1zZWxlY3RlZCc7XG5TZWFyY2hQYWQuUkVTVUxUX1NFTEVDVEVEX1NFTEVDVE9SID0gJy4nICsgU2VhcmNoUGFkLlJFU1VMVF9TRUxFQ1RFRF9DTEFTUztcblNlYXJjaFBhZC5SRVNVTFRfSURfQVRUUklCVVRFID0gJ2RhdGEtcmVzdWx0LWlkJztcblNlYXJjaFBhZC5SRVNVTFRfSElHSExJR0hUX0NMQVNTID0gJ2Rqcy1zZWFyY2gtaGlnaGxpZ2h0JztcblNlYXJjaFBhZC5PVkVSTEFZX0NMQVNTID0gJ2Rqcy1zZWFyY2gtb3ZlcmxheSc7XG5cblNlYXJjaFBhZC5CT1hfSFRNTCA9XG4gICc8ZGl2IGNsYXNzPVwiZGpzLXNlYXJjaC1jb250YWluZXIgZGpzLWRyYWdnYWJsZSBkanMtc2Nyb2xsYWJsZVwiPicgK1xuICAgICc8ZGl2IGNsYXNzPVwiZGpzLXNlYXJjaC1pbnB1dFwiPicgK1xuICAgICAgJzxpbnB1dCB0eXBlPVwidGV4dFwiLz4nICtcbiAgICAnPC9kaXY+JyArXG4gICAgJzxkaXYgY2xhc3M9XCJkanMtc2VhcmNoLXJlc3VsdHNcIj48L2Rpdj4nICtcbiAgJzwvZGl2Pic7XG5cblNlYXJjaFBhZC5SRVNVTFRfSFRNTCA9XG4gICc8ZGl2IGNsYXNzPVwiZGpzLXNlYXJjaC1yZXN1bHRcIj48L2Rpdj4nO1xuXG5TZWFyY2hQYWQuUkVTVUxUX1BSSU1BUllfSFRNTCA9XG4gICc8ZGl2IGNsYXNzPVwiZGpzLXNlYXJjaC1yZXN1bHQtcHJpbWFyeVwiPjwvZGl2Pic7XG5cblNlYXJjaFBhZC5SRVNVTFRfU0VDT05EQVJZX0hUTUwgPVxuICAnPHAgY2xhc3M9XCJkanMtc2VhcmNoLXJlc3VsdC1zZWNvbmRhcnlcIj48L3A+JztcbiIsImltcG9ydCBPdmVybGF5c01vZHVsZSBmcm9tICcuLi9vdmVybGF5cyc7XG5pbXBvcnQgU2VsZWN0aW9uTW9kdWxlIGZyb20gJy4uL3NlbGVjdGlvbic7XG5cbmltcG9ydCBTZWFyY2hQYWQgZnJvbSAnLi9TZWFyY2hQYWQnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgT3ZlcmxheXNNb2R1bGUsXG4gICAgU2VsZWN0aW9uTW9kdWxlXG4gIF0sXG4gIHNlYXJjaFBhZDogWyAndHlwZScsIFNlYXJjaFBhZCBdXG59O1xuIiwiaW1wb3J0IHtcbiAgaXNBcnJheSxcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBBIHNlcnZpY2UgdGhhdCBvZmZlcnMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGluIGEgZGlhZ3JhbS5cbiAqIE9mZmVycyB0aGUgYXBpIHRvIGNvbnRyb2wgdGhlIHNlbGVjdGlvbiwgdG9vLlxuICpcbiAqIEBjbGFzc1xuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzIHRoZSBldmVudCBidXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU2VsZWN0aW9uKGV2ZW50QnVzKSB7XG5cbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcblxuICB0aGlzLl9zZWxlY3RlZEVsZW1lbnRzID0gW107XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGV2ZW50QnVzLm9uKFsgJ3NoYXBlLnJlbW92ZScsICdjb25uZWN0aW9uLnJlbW92ZScgXSwgZnVuY3Rpb24oZSkge1xuICAgIHZhciBlbGVtZW50ID0gZS5lbGVtZW50O1xuICAgIHNlbGYuZGVzZWxlY3QoZWxlbWVudCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKFsgJ2RpYWdyYW0uY2xlYXInIF0sIGZ1bmN0aW9uKGUpIHtcbiAgICBzZWxmLnNlbGVjdChudWxsKTtcbiAgfSk7XG59XG5cblNlbGVjdGlvbi4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07XG5cblxuU2VsZWN0aW9uLnByb3RvdHlwZS5kZXNlbGVjdCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIHNlbGVjdGVkRWxlbWVudHMgPSB0aGlzLl9zZWxlY3RlZEVsZW1lbnRzO1xuXG4gIHZhciBpZHggPSBzZWxlY3RlZEVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XG5cbiAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICB2YXIgb2xkU2VsZWN0aW9uID0gc2VsZWN0ZWRFbGVtZW50cy5zbGljZSgpO1xuXG4gICAgc2VsZWN0ZWRFbGVtZW50cy5zcGxpY2UoaWR4LCAxKTtcblxuICAgIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ3NlbGVjdGlvbi5jaGFuZ2VkJywgeyBvbGRTZWxlY3Rpb246IG9sZFNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uOiBzZWxlY3RlZEVsZW1lbnRzIH0pO1xuICB9XG59O1xuXG5cblNlbGVjdGlvbi5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9zZWxlY3RlZEVsZW1lbnRzO1xufTtcblxuU2VsZWN0aW9uLnByb3RvdHlwZS5pc1NlbGVjdGVkID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRFbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpICE9PSAtMTtcbn07XG5cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBzZWxlY3RzIG9uZSBvciBtb3JlIGVsZW1lbnRzIG9uIHRoZSBkaWFncmFtLlxuICpcbiAqIEJ5IHBhc3NpbmcgYW4gYWRkaXRpb25hbCBhZGQgcGFyYW1ldGVyIHlvdSBjYW4gZGVjaWRlIHdoZXRoZXIgb3Igbm90IHRoZSBlbGVtZW50KHMpXG4gKiBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGFscmVhZHkgZXhpc3Rpbmcgc2VsZWN0aW9uIG9yIG5vdC5cbiAqXG4gKiBAbWV0aG9kIFNlbGVjdGlvbiNzZWxlY3RcbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R8T2JqZWN0W119IGVsZW1lbnRzIGVsZW1lbnQgb3IgYXJyYXkgb2YgZWxlbWVudHMgdG8gYmUgc2VsZWN0ZWRcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFthZGRdIHdoZXRoZXIgdGhlIGVsZW1lbnQocykgc2hvdWxkIGJlIGFwcGVuZGVkIHRvIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgZGVmYXVsdHMgdG8gZmFsc2VcbiAqL1xuU2VsZWN0aW9uLnByb3RvdHlwZS5zZWxlY3QgPSBmdW5jdGlvbihlbGVtZW50cywgYWRkKSB7XG4gIHZhciBzZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5fc2VsZWN0ZWRFbGVtZW50cyxcbiAgICAgIG9sZFNlbGVjdGlvbiA9IHNlbGVjdGVkRWxlbWVudHMuc2xpY2UoKTtcblxuICBpZiAoIWlzQXJyYXkoZWxlbWVudHMpKSB7XG4gICAgZWxlbWVudHMgPSBlbGVtZW50cyA/IFsgZWxlbWVudHMgXSA6IFtdO1xuICB9XG5cbiAgLy8gc2VsZWN0aW9uIG1heSBiZSBjbGVhcmVkIGJ5IHBhc3NpbmcgYW4gZW1wdHkgYXJyYXkgb3IgbnVsbFxuICAvLyB0byB0aGUgbWV0aG9kXG4gIGlmIChhZGQpIHtcbiAgICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpICE9PSAtMSkge1xuXG4gICAgICAgIC8vIGFscmVhZHkgc2VsZWN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudHMgPSBzZWxlY3RlZEVsZW1lbnRzID0gZWxlbWVudHMuc2xpY2UoKTtcbiAgfVxuXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ3NlbGVjdGlvbi5jaGFuZ2VkJywgeyBvbGRTZWxlY3Rpb246IG9sZFNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uOiBzZWxlY3RlZEVsZW1lbnRzIH0pO1xufTtcbiIsImltcG9ydCB7XG4gIGhhc1ByaW1hcnlNb2RpZmllclxufSBmcm9tICcuLi8uLi91dGlsL01vdXNlJztcblxuaW1wb3J0IHtcbiAgZmluZCwgaXNBcnJheVxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU2VsZWN0aW9uQmVoYXZpb3IoXG4gICAgZXZlbnRCdXMsIHNlbGVjdGlvbiwgY2FudmFzLFxuICAgIGVsZW1lbnRSZWdpc3RyeSkge1xuXG4gIGV2ZW50QnVzLm9uKCdjcmVhdGUuZW5kJywgNTAwLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgY2FuRXhlY3V0ZSA9IGNvbnRleHQuY2FuRXhlY3V0ZSxcbiAgICAgICAgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzLFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge30sXG4gICAgICAgIGF1dG9TZWxlY3QgPSBoaW50cy5hdXRvU2VsZWN0O1xuXG4gICAgLy8gc2VsZWN0IGVsZW1lbnRzIGFmdGVyIHRoZXkgaGF2ZSBiZWVuIGNyZWF0ZWRcbiAgICBpZiAoY2FuRXhlY3V0ZSkge1xuICAgICAgaWYgKGF1dG9TZWxlY3QgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgLy8gc2VsZWN0IG5vIGVsZW1lbnRzXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkoYXV0b1NlbGVjdCkpIHtcbiAgICAgICAgc2VsZWN0aW9uLnNlbGVjdChhdXRvU2VsZWN0KTtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgLy8gc2VsZWN0IGFsbCBlbGVtZW50cyBieSBkZWZhdWx0XG4gICAgICAgIHNlbGVjdGlvbi5zZWxlY3QoZWxlbWVudHMuZmlsdGVyKGlzU2hvd24pKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjb25uZWN0LmVuZCcsIDUwMCwgZnVuY3Rpb24oZSkge1xuXG4gICAgLy8gc2VsZWN0IHRoZSBjb25uZWN0IGVuZCB0YXJnZXRcbiAgICAvLyBhZnRlciBhIGNvbm5lY3Qgb3BlcmF0aW9uXG4gICAgaWYgKGUuY29udGV4dC5jYW5FeGVjdXRlICYmIGUuY29udGV4dC5ob3Zlcikge1xuICAgICAgc2VsZWN0aW9uLnNlbGVjdChlLmNvbnRleHQuaG92ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ3NoYXBlLm1vdmUuZW5kJywgNTAwLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIHByZXZpb3VzU2VsZWN0aW9uID0gZS5wcmV2aW91c1NlbGVjdGlvbiB8fCBbXTtcblxuICAgIHZhciBzaGFwZSA9IGVsZW1lbnRSZWdpc3RyeS5nZXQoZS5jb250ZXh0LnNoYXBlLmlkKTtcblxuICAgIC8vIG1ha2Ugc3VyZSBhdCBsZWFzdCB0aGUgbWFpbiBtb3ZlZCBlbGVtZW50IGlzIGJlaW5nXG4gICAgLy8gc2VsZWN0ZWQgYWZ0ZXIgYSBtb3ZlIG9wZXJhdGlvblxuICAgIHZhciBpblNlbGVjdGlvbiA9IGZpbmQocHJldmlvdXNTZWxlY3Rpb24sIGZ1bmN0aW9uKHNlbGVjdGVkU2hhcGUpIHtcbiAgICAgIHJldHVybiBzaGFwZS5pZCA9PT0gc2VsZWN0ZWRTaGFwZS5pZDtcbiAgICB9KTtcblxuICAgIGlmICghaW5TZWxlY3Rpb24pIHtcbiAgICAgIHNlbGVjdGlvbi5zZWxlY3Qoc2hhcGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gU2hpZnQgKyBjbGljayBzZWxlY3Rpb25cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQuY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50O1xuXG4gICAgLy8gZG8gbm90IHNlbGVjdCB0aGUgcm9vdCBlbGVtZW50XG4gICAgLy8gb3IgY29ubmVjdGlvbnNcbiAgICBpZiAoZWxlbWVudCA9PT0gY2FudmFzLmdldFJvb3RFbGVtZW50KCkpIHtcbiAgICAgIGVsZW1lbnQgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBpc1NlbGVjdGVkID0gc2VsZWN0aW9uLmlzU2VsZWN0ZWQoZWxlbWVudCksXG4gICAgICAgIGlzTXVsdGlTZWxlY3QgPSBzZWxlY3Rpb24uZ2V0KCkubGVuZ3RoID4gMTtcblxuICAgIC8vIG1vdXNlLWV2ZW50OiBTRUxFQ1RJT05fS0VZXG4gICAgdmFyIGFkZCA9IGhhc1ByaW1hcnlNb2RpZmllcihldmVudCk7XG5cbiAgICAvLyBzZWxlY3QgT1IgZGVzZWxlY3QgZWxlbWVudCBpbiBtdWx0aSBzZWxlY3Rpb25cbiAgICBpZiAoaXNTZWxlY3RlZCAmJiBpc011bHRpU2VsZWN0KSB7XG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3Rpb24uZGVzZWxlY3QoZWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2VsZWN0aW9uLnNlbGVjdChlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2VcbiAgICBpZiAoIWlzU2VsZWN0ZWQpIHtcbiAgICAgIHNlbGVjdGlvbi5zZWxlY3QoZWxlbWVudCwgYWRkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0aW9uLmRlc2VsZWN0KGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG59XG5cblNlbGVjdGlvbkJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdzZWxlY3Rpb24nLFxuICAnY2FudmFzJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeSdcbl07XG5cblxuZnVuY3Rpb24gaXNTaG93bihlbGVtZW50KSB7XG4gIHJldHVybiAhZWxlbWVudC5oaWRkZW47XG59XG4iLCJpbXBvcnQge1xuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxudmFyIE1BUktFUl9IT1ZFUiA9ICdob3ZlcicsXG4gICAgTUFSS0VSX1NFTEVDVEVEID0gJ3NlbGVjdGVkJztcblxuXG4vKipcbiAqIEEgcGx1Z2luIHRoYXQgYWRkcyBhIHZpc2libGUgc2VsZWN0aW9uIFVJIHRvIHNoYXBlcyBhbmQgY29ubmVjdGlvbnNcbiAqIGJ5IGFwcGVuZGluZyB0aGUgPGNvZGU+aG92ZXI8L2NvZGU+IGFuZCA8Y29kZT5zZWxlY3RlZDwvY29kZT4gY2xhc3NlcyB0byB0aGVtLlxuICpcbiAqIEBjbGFzc1xuICpcbiAqIE1ha2VzIGVsZW1lbnRzIHNlbGVjdGFibGUsIHRvby5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudHNcbiAqIEBwYXJhbSB7U2VsZWN0aW9uU2VydmljZX0gc2VsZWN0aW9uXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNlbGVjdGlvblZpc3VhbHMoZXZlbnRzLCBjYW52YXMsIHNlbGVjdGlvbiwgc3R5bGVzKSB7XG5cbiAgdGhpcy5fbXVsdGlTZWxlY3Rpb25Cb3ggPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGFkZE1hcmtlcihlLCBjbHMpIHtcbiAgICBjYW52YXMuYWRkTWFya2VyKGUsIGNscyk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVNYXJrZXIoZSwgY2xzKSB7XG4gICAgY2FudmFzLnJlbW92ZU1hcmtlcihlLCBjbHMpO1xuICB9XG5cbiAgZXZlbnRzLm9uKCdlbGVtZW50LmhvdmVyJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBhZGRNYXJrZXIoZXZlbnQuZWxlbWVudCwgTUFSS0VSX0hPVkVSKTtcbiAgfSk7XG5cbiAgZXZlbnRzLm9uKCdlbGVtZW50Lm91dCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmVtb3ZlTWFya2VyKGV2ZW50LmVsZW1lbnQsIE1BUktFUl9IT1ZFUik7XG4gIH0pO1xuXG4gIGV2ZW50cy5vbignc2VsZWN0aW9uLmNoYW5nZWQnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgZnVuY3Rpb24gZGVzZWxlY3Qocykge1xuICAgICAgcmVtb3ZlTWFya2VyKHMsIE1BUktFUl9TRUxFQ1RFRCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2VsZWN0KHMpIHtcbiAgICAgIGFkZE1hcmtlcihzLCBNQVJLRVJfU0VMRUNURUQpO1xuICAgIH1cblxuICAgIHZhciBvbGRTZWxlY3Rpb24gPSBldmVudC5vbGRTZWxlY3Rpb24sXG4gICAgICAgIG5ld1NlbGVjdGlvbiA9IGV2ZW50Lm5ld1NlbGVjdGlvbjtcblxuICAgIGZvckVhY2gob2xkU2VsZWN0aW9uLCBmdW5jdGlvbihlKSB7XG4gICAgICBpZiAobmV3U2VsZWN0aW9uLmluZGV4T2YoZSkgPT09IC0xKSB7XG4gICAgICAgIGRlc2VsZWN0KGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZm9yRWFjaChuZXdTZWxlY3Rpb24sIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmIChvbGRTZWxlY3Rpb24uaW5kZXhPZihlKSA9PT0gLTEpIHtcbiAgICAgICAgc2VsZWN0KGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuU2VsZWN0aW9uVmlzdWFscy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJyxcbiAgJ3NlbGVjdGlvbicsXG4gICdzdHlsZXMnXG5dOyIsImltcG9ydCBJbnRlcmFjdGlvbkV2ZW50c01vZHVsZSBmcm9tICcuLi9pbnRlcmFjdGlvbi1ldmVudHMnO1xuaW1wb3J0IE91dGxpbmVNb2R1bGUgZnJvbSAnLi4vb3V0bGluZSc7XG5cbmltcG9ydCBTZWxlY3Rpb24gZnJvbSAnLi9TZWxlY3Rpb24nO1xuaW1wb3J0IFNlbGVjdGlvblZpc3VhbHMgZnJvbSAnLi9TZWxlY3Rpb25WaXN1YWxzJztcbmltcG9ydCBTZWxlY3Rpb25CZWhhdmlvciBmcm9tICcuL1NlbGVjdGlvbkJlaGF2aW9yJztcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdzZWxlY3Rpb25WaXN1YWxzJywgJ3NlbGVjdGlvbkJlaGF2aW9yJyBdLFxuICBfX2RlcGVuZHNfXzogW1xuICAgIEludGVyYWN0aW9uRXZlbnRzTW9kdWxlLFxuICAgIE91dGxpbmVNb2R1bGVcbiAgXSxcbiAgc2VsZWN0aW9uOiBbICd0eXBlJywgU2VsZWN0aW9uIF0sXG4gIHNlbGVjdGlvblZpc3VhbHM6IFsgJ3R5cGUnLCBTZWxlY3Rpb25WaXN1YWxzIF0sXG4gIHNlbGVjdGlvbkJlaGF2aW9yOiBbICd0eXBlJywgU2VsZWN0aW9uQmVoYXZpb3IgXVxufTtcbiIsImltcG9ydCBTbmFwQ29udGV4dCBmcm9tICcuL1NuYXBDb250ZXh0JztcclxuXHJcbmltcG9ydCB7XHJcbiAgZ2V0Q2hpbGRyZW4sXHJcbiAgaXNTbmFwcGVkLFxyXG4gIG1pZFxyXG59IGZyb20gJy4vU25hcFV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNDbWQgfSBmcm9tICcuLi9rZXlib2FyZC9LZXlib2FyZFV0aWwnO1xyXG5cclxuaW1wb3J0IHtcclxuICBmb3JFYWNoLFxyXG4gIGlzTnVtYmVyXHJcbn0gZnJvbSAnbWluLWRhc2gnO1xyXG5cclxudmFyIEhJR0hFUl9QUklPUklUWSA9IDEyNTA7XHJcblxyXG5cclxuLyoqXHJcbiAqIFNuYXAgZHVyaW5nIGNyZWF0ZSBhbmQgbW92ZS5cclxuICpcclxuICogQHBhcmFtIHtFdmVudEJ1c30gZWxlbWVudFJlZ2lzdHJ5XHJcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXHJcbiAqIEBwYXJhbSB7U25hcHBpbmd9IHNuYXBwaW5nXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcmVhdGVNb3ZlU25hcHBpbmcoZWxlbWVudFJlZ2lzdHJ5LCBldmVudEJ1cywgc25hcHBpbmcpIHtcclxuICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcclxuXHJcbiAgZXZlbnRCdXMub24oW1xyXG4gICAgJ2NyZWF0ZS5zdGFydCcsXHJcbiAgICAnc2hhcGUubW92ZS5zdGFydCdcclxuICBdLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgc2VsZi5pbml0U25hcChldmVudCk7XHJcbiAgfSk7XHJcblxyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdjcmVhdGUubW92ZScsXHJcbiAgICAnY3JlYXRlLmVuZCcsXHJcbiAgICAnc2hhcGUubW92ZS5tb3ZlJyxcclxuICAgICdzaGFwZS5tb3ZlLmVuZCdcclxuICBdLCBISUdIRVJfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxyXG4gICAgICAgIHNuYXBDb250ZXh0ID0gY29udGV4dC5zbmFwQ29udGV4dCxcclxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldDtcclxuXHJcbiAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudCAmJiBpc0NtZChldmVudC5vcmlnaW5hbEV2ZW50KSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzU25hcHBlZChldmVudCkgfHwgIXRhcmdldCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHNuYXBQb2ludHMgPSBzbmFwQ29udGV4dC5wb2ludHNGb3JUYXJnZXQodGFyZ2V0KTtcclxuXHJcbiAgICBpZiAoIXNuYXBQb2ludHMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgc25hcFBvaW50cyA9IHNlbGYuYWRkU25hcFRhcmdldFBvaW50cyhzbmFwUG9pbnRzLCBzaGFwZSwgdGFyZ2V0KTtcclxuXHJcbiAgICAgIHNuYXBQb2ludHMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHNuYXBwaW5nLnNuYXAoZXZlbnQsIHNuYXBQb2ludHMpO1xyXG4gIH0pO1xyXG5cclxuICBldmVudEJ1cy5vbihbXHJcbiAgICAnY3JlYXRlLmNsZWFudXAnLFxyXG4gICAgJ3NoYXBlLm1vdmUuY2xlYW51cCdcclxuICBdLCBmdW5jdGlvbigpIHtcclxuICAgIHNuYXBwaW5nLmhpZGUoKTtcclxuICB9KTtcclxufVxyXG5cclxuQ3JlYXRlTW92ZVNuYXBwaW5nLiRpbmplY3QgPSBbXHJcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXHJcbiAgJ2V2ZW50QnVzJyxcclxuICAnc25hcHBpbmcnXHJcbl07XHJcblxyXG5DcmVhdGVNb3ZlU25hcHBpbmcucHJvdG90eXBlLmluaXRTbmFwID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICB2YXIgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5O1xyXG5cclxuICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcclxuICAgICAgc25hcENvbnRleHQgPSBjb250ZXh0LnNuYXBDb250ZXh0O1xyXG5cclxuICBpZiAoIXNuYXBDb250ZXh0KSB7XHJcbiAgICBzbmFwQ29udGV4dCA9IGNvbnRleHQuc25hcENvbnRleHQgPSBuZXcgU25hcENvbnRleHQoKTtcclxuICB9XHJcblxyXG4gIHZhciBzaGFwZU1pZDtcclxuXHJcbiAgaWYgKGVsZW1lbnRSZWdpc3RyeS5nZXQoc2hhcGUuaWQpKSB7XHJcblxyXG4gICAgLy8gbW92ZVxyXG4gICAgc2hhcGVNaWQgPSBtaWQoc2hhcGUsIGV2ZW50KTtcclxuICB9IGVsc2Uge1xyXG5cclxuICAgIC8vIGNyZWF0ZVxyXG4gICAgc2hhcGVNaWQgPSB7XHJcbiAgICAgIHg6IGV2ZW50LnggKyBtaWQoc2hhcGUpLngsXHJcbiAgICAgIHk6IGV2ZW50LnkgKyBtaWQoc2hhcGUpLnlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICB2YXIgc2hhcGVUb3BMZWZ0ID0ge1xyXG4gICAgICAgIHg6IHNoYXBlTWlkLnggLSBzaGFwZS53aWR0aCAvIDIsXHJcbiAgICAgICAgeTogc2hhcGVNaWQueSAtIHNoYXBlLmhlaWdodCAvIDJcclxuICAgICAgfSxcclxuICAgICAgc2hhcGVCb3R0b21SaWdodCA9IHtcclxuICAgICAgICB4OiBzaGFwZU1pZC54ICsgc2hhcGUud2lkdGggLyAyLFxyXG4gICAgICAgIHk6IHNoYXBlTWlkLnkgKyBzaGFwZS5oZWlnaHQgLyAyXHJcbiAgICAgIH07XHJcblxyXG4gIHNuYXBDb250ZXh0LnNldFNuYXBPcmlnaW4oJ21pZCcsIHtcclxuICAgIHg6IHNoYXBlTWlkLnggLSBldmVudC54LFxyXG4gICAgeTogc2hhcGVNaWQueSAtIGV2ZW50LnlcclxuICB9KTtcclxuXHJcbiAgLy8gc25hcCBsYWJlbHMgdG8gbWlkIG9ubHlcclxuICBpZiAoaXNMYWJlbChzaGFwZSkpIHtcclxuICAgIHJldHVybiBzbmFwQ29udGV4dDtcclxuICB9XHJcblxyXG4gIHNuYXBDb250ZXh0LnNldFNuYXBPcmlnaW4oJ3RvcC1sZWZ0Jywge1xyXG4gICAgeDogc2hhcGVUb3BMZWZ0LnggLSBldmVudC54LFxyXG4gICAgeTogc2hhcGVUb3BMZWZ0LnkgLSBldmVudC55XHJcbiAgfSk7XHJcblxyXG4gIHNuYXBDb250ZXh0LnNldFNuYXBPcmlnaW4oJ2JvdHRvbS1yaWdodCcsIHtcclxuICAgIHg6IHNoYXBlQm90dG9tUmlnaHQueCAtIGV2ZW50LngsXHJcbiAgICB5OiBzaGFwZUJvdHRvbVJpZ2h0LnkgLSBldmVudC55XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBzbmFwQ29udGV4dDtcclxufTtcclxuXHJcbkNyZWF0ZU1vdmVTbmFwcGluZy5wcm90b3R5cGUuYWRkU25hcFRhcmdldFBvaW50cyA9IGZ1bmN0aW9uKHNuYXBQb2ludHMsIHNoYXBlLCB0YXJnZXQpIHtcclxuICB2YXIgc25hcFRhcmdldHMgPSB0aGlzLmdldFNuYXBUYXJnZXRzKHNoYXBlLCB0YXJnZXQpO1xyXG5cclxuICBmb3JFYWNoKHNuYXBUYXJnZXRzLCBmdW5jdGlvbihzbmFwVGFyZ2V0KSB7XHJcblxyXG4gICAgLy8gaGFuZGxlIGxhYmVsc1xyXG4gICAgaWYgKGlzTGFiZWwoc25hcFRhcmdldCkpIHtcclxuXHJcbiAgICAgIGlmIChpc0xhYmVsKHNoYXBlKSkge1xyXG4gICAgICAgIHNuYXBQb2ludHMuYWRkKCdtaWQnLCBtaWQoc25hcFRhcmdldCkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaGFuZGxlIGNvbm5lY3Rpb25zXHJcbiAgICBpZiAoaXNDb25uZWN0aW9uKHNuYXBUYXJnZXQpKSB7XHJcblxyXG4gICAgICAvLyBpZ25vcmUgc2luZ2xlIHNlZ21lbnQgY29ubmVjdGlvbnNcclxuICAgICAgaWYgKHNuYXBUYXJnZXQud2F5cG9pbnRzLmxlbmd0aCA8IDMpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGlnbm9yZSBmaXJzdCBhbmQgbGFzdCB3YXlwb2ludFxyXG4gICAgICB2YXIgd2F5cG9pbnRzID0gc25hcFRhcmdldC53YXlwb2ludHMuc2xpY2UoMSwgLTEpO1xyXG5cclxuICAgICAgZm9yRWFjaCh3YXlwb2ludHMsIGZ1bmN0aW9uKHdheXBvaW50KSB7XHJcbiAgICAgICAgc25hcFBvaW50cy5hZGQoJ21pZCcsIHdheXBvaW50KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaGFuZGxlIHNoYXBlc1xyXG4gICAgc25hcFBvaW50cy5hZGQoJ21pZCcsIG1pZChzbmFwVGFyZ2V0KSk7XHJcbiAgfSk7XHJcblxyXG4gIGlmICghaXNOdW1iZXIoc2hhcGUueCkgfHwgIWlzTnVtYmVyKHNoYXBlLnkpKSB7XHJcbiAgICByZXR1cm4gc25hcFBvaW50cztcclxuICB9XHJcblxyXG4gIC8vIHNuYXAgdG8gb3JpZ2luYWwgcG9zaXRpb24gd2hlbiBtb3ZpbmdcclxuICBpZiAodGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldChzaGFwZS5pZCkpIHtcclxuICAgIHNuYXBQb2ludHMuYWRkKCdtaWQnLCBtaWQoc2hhcGUpKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBzbmFwUG9pbnRzO1xyXG59O1xyXG5cclxuQ3JlYXRlTW92ZVNuYXBwaW5nLnByb3RvdHlwZS5nZXRTbmFwVGFyZ2V0cyA9IGZ1bmN0aW9uKHNoYXBlLCB0YXJnZXQpIHtcclxuICByZXR1cm4gZ2V0Q2hpbGRyZW4odGFyZ2V0KS5maWx0ZXIoZnVuY3Rpb24oY2hpbGQpIHtcclxuICAgIHJldHVybiAhaXNIaWRkZW4oY2hpbGQpO1xyXG4gIH0pO1xyXG59O1xyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiAhIWVsZW1lbnQud2F5cG9pbnRzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0hpZGRlbihlbGVtZW50KSB7XHJcbiAgcmV0dXJuICEhZWxlbWVudC5oaWRkZW47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTGFiZWwoZWxlbWVudCkge1xyXG4gIHJldHVybiAhIWVsZW1lbnQubGFiZWxUYXJnZXQ7XHJcbn0iLCJpbXBvcnQgU25hcENvbnRleHQgZnJvbSAnLi9TbmFwQ29udGV4dCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGJvdHRvbVJpZ2h0LFxyXG4gIGdldENoaWxkcmVuLFxyXG4gIGlzU25hcHBlZCxcclxuICBzZXRTbmFwcGVkLFxyXG4gIHRvcExlZnQsXHJcbn0gZnJvbSAnLi9TbmFwVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBpc0NtZCB9IGZyb20gJy4uL2tleWJvYXJkL0tleWJvYXJkVXRpbCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGFzVFJCTCxcclxuICBnZXRNaWRcclxufSBmcm9tICcuLi8uLi9sYXlvdXQvTGF5b3V0VXRpbCc7XHJcblxyXG5pbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnbWluLWRhc2gnO1xyXG5cclxudmFyIEhJR0hFUl9QUklPUklUWSA9IDEyNTA7XHJcblxyXG5cclxuLyoqXHJcbiAqIFNuYXAgZHVyaW5nIHJlc2l6ZS5cclxuICpcclxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcclxuICogQHBhcmFtIHtTbmFwcGluZ30gc25hcHBpbmdcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlc2l6ZVNuYXBwaW5nKGV2ZW50QnVzLCBzbmFwcGluZykge1xyXG4gIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgZXZlbnRCdXMub24oWyAncmVzaXplLnN0YXJ0JyBdLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgc2VsZi5pbml0U25hcChldmVudCk7XHJcbiAgfSk7XHJcblxyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdyZXNpemUubW92ZScsXHJcbiAgICAncmVzaXplLmVuZCcsXHJcbiAgXSwgSElHSEVSX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcclxuICAgICAgICBwYXJlbnQgPSBzaGFwZS5wYXJlbnQsXHJcbiAgICAgICAgZGlyZWN0aW9uID0gY29udGV4dC5kaXJlY3Rpb24sXHJcbiAgICAgICAgc25hcENvbnRleHQgPSBjb250ZXh0LnNuYXBDb250ZXh0O1xyXG5cclxuICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50ICYmIGlzQ21kKGV2ZW50Lm9yaWdpbmFsRXZlbnQpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNTbmFwcGVkKGV2ZW50KSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHNuYXBQb2ludHMgPSBzbmFwQ29udGV4dC5wb2ludHNGb3JUYXJnZXQocGFyZW50KTtcclxuXHJcbiAgICBpZiAoIXNuYXBQb2ludHMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgc25hcFBvaW50cyA9IHNlbGYuYWRkU25hcFRhcmdldFBvaW50cyhzbmFwUG9pbnRzLCBzaGFwZSwgcGFyZW50LCBkaXJlY3Rpb24pO1xyXG5cclxuICAgICAgc25hcFBvaW50cy5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzSG9yaXpvbnRhbChkaXJlY3Rpb24pKSB7XHJcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsICd4JywgZXZlbnQueCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzVmVydGljYWwoZGlyZWN0aW9uKSkge1xyXG4gICAgICBzZXRTbmFwcGVkKGV2ZW50LCAneScsIGV2ZW50LnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNuYXBwaW5nLnNuYXAoZXZlbnQsIHNuYXBQb2ludHMpO1xyXG4gIH0pO1xyXG5cclxuICBldmVudEJ1cy5vbihbICdyZXNpemUuY2xlYW51cCcgXSwgZnVuY3Rpb24oKSB7XHJcbiAgICBzbmFwcGluZy5oaWRlKCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcblJlc2l6ZVNuYXBwaW5nLnByb3RvdHlwZS5pbml0U25hcCA9IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXHJcbiAgICAgIGRpcmVjdGlvbiA9IGNvbnRleHQuZGlyZWN0aW9uLFxyXG4gICAgICBzbmFwQ29udGV4dCA9IGNvbnRleHQuc25hcENvbnRleHQ7XHJcblxyXG4gIGlmICghc25hcENvbnRleHQpIHtcclxuICAgIHNuYXBDb250ZXh0ID0gY29udGV4dC5zbmFwQ29udGV4dCA9IG5ldyBTbmFwQ29udGV4dCgpO1xyXG4gIH1cclxuXHJcbiAgdmFyIHNuYXBPcmlnaW4gPSBnZXRTbmFwT3JpZ2luKHNoYXBlLCBkaXJlY3Rpb24pO1xyXG5cclxuICBzbmFwQ29udGV4dC5zZXRTbmFwT3JpZ2luKCdjb3JuZXInLCB7XHJcbiAgICB4OiBzbmFwT3JpZ2luLnggLSBldmVudC54LFxyXG4gICAgeTogc25hcE9yaWdpbi55IC0gZXZlbnQueVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gc25hcENvbnRleHQ7XHJcbn07XHJcblxyXG5SZXNpemVTbmFwcGluZy5wcm90b3R5cGUuYWRkU25hcFRhcmdldFBvaW50cyA9IGZ1bmN0aW9uKHNuYXBQb2ludHMsIHNoYXBlLCB0YXJnZXQsIGRpcmVjdGlvbikge1xyXG4gIHZhciBzbmFwVGFyZ2V0cyA9IHRoaXMuZ2V0U25hcFRhcmdldHMoc2hhcGUsIHRhcmdldCk7XHJcblxyXG4gIGZvckVhY2goc25hcFRhcmdldHMsIGZ1bmN0aW9uKHNuYXBUYXJnZXQpIHtcclxuICAgIHNuYXBQb2ludHMuYWRkKCdjb3JuZXInLCBib3R0b21SaWdodChzbmFwVGFyZ2V0KSk7XHJcbiAgICBzbmFwUG9pbnRzLmFkZCgnY29ybmVyJywgdG9wTGVmdChzbmFwVGFyZ2V0KSk7XHJcbiAgfSk7XHJcblxyXG4gIHNuYXBQb2ludHMuYWRkKCdjb3JuZXInLCBnZXRTbmFwT3JpZ2luKHNoYXBlLCBkaXJlY3Rpb24pKTtcclxuXHJcbiAgcmV0dXJuIHNuYXBQb2ludHM7XHJcbn07XHJcblxyXG5SZXNpemVTbmFwcGluZy4kaW5qZWN0ID0gW1xyXG4gICdldmVudEJ1cycsXHJcbiAgJ3NuYXBwaW5nJ1xyXG5dO1xyXG5cclxuUmVzaXplU25hcHBpbmcucHJvdG90eXBlLmdldFNuYXBUYXJnZXRzID0gZnVuY3Rpb24oc2hhcGUsIHRhcmdldCkge1xyXG4gIHJldHVybiBnZXRDaGlsZHJlbih0YXJnZXQpLmZpbHRlcihmdW5jdGlvbihjaGlsZCkge1xyXG4gICAgcmV0dXJuICFpc0F0dGFjaGVkKGNoaWxkLCBzaGFwZSlcclxuICAgICAgJiYgIWlzQ29ubmVjdGlvbihjaGlsZClcclxuICAgICAgJiYgIWlzSGlkZGVuKGNoaWxkKVxyXG4gICAgICAmJiAhaXNMYWJlbChjaGlsZCk7XHJcbiAgfSk7XHJcbn07XHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cclxuXHJcbmZ1bmN0aW9uIGdldFNuYXBPcmlnaW4oc2hhcGUsIGRpcmVjdGlvbikge1xyXG4gIHZhciBtaWQgPSBnZXRNaWQoc2hhcGUpLFxyXG4gICAgICB0cmJsID0gYXNUUkJMKHNoYXBlKTtcclxuXHJcbiAgdmFyIHNuYXBPcmlnaW4gPSB7XHJcbiAgICB4OiBtaWQueCxcclxuICAgIHk6IG1pZC55XHJcbiAgfTtcclxuXHJcbiAgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCduJykgIT09IC0xKSB7XHJcbiAgICBzbmFwT3JpZ2luLnkgPSB0cmJsLnRvcDtcclxuICB9IGVsc2UgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCdzJykgIT09IC0xKSB7XHJcbiAgICBzbmFwT3JpZ2luLnkgPSB0cmJsLmJvdHRvbTtcclxuICB9XHJcblxyXG4gIGlmIChkaXJlY3Rpb24uaW5kZXhPZignZScpICE9PSAtMSkge1xyXG4gICAgc25hcE9yaWdpbi54ID0gdHJibC5yaWdodDtcclxuICB9IGVsc2UgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCd3JykgIT09IC0xKSB7XHJcbiAgICBzbmFwT3JpZ2luLnggPSB0cmJsLmxlZnQ7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gc25hcE9yaWdpbjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBdHRhY2hlZChlbGVtZW50LCBob3N0KSB7XHJcbiAgcmV0dXJuIGVsZW1lbnQuaG9zdCA9PT0gaG9zdDtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNDb25uZWN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gISFlbGVtZW50LndheXBvaW50cztcclxufVxyXG5cclxuZnVuY3Rpb24gaXNIaWRkZW4oZWxlbWVudCkge1xyXG4gIHJldHVybiAhIWVsZW1lbnQuaGlkZGVuO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0xhYmVsKGVsZW1lbnQpIHtcclxuICByZXR1cm4gISFlbGVtZW50LmxhYmVsVGFyZ2V0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0hvcml6b250YWwoZGlyZWN0aW9uKSB7XHJcbiAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gJ24nIHx8IGRpcmVjdGlvbiA9PT0gJ3MnO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1ZlcnRpY2FsKGRpcmVjdGlvbikge1xyXG4gIHJldHVybiBkaXJlY3Rpb24gPT09ICdlJyB8fCBkaXJlY3Rpb24gPT09ICd3JztcclxufSIsImltcG9ydCB7XG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBzbmFwVG9cbn0gZnJvbSAnLi9TbmFwVXRpbCc7XG5cblxuLyoqXG4gKiBBIHNuYXAgY29udGV4dCwgY29udGFpbmluZyB0aGUgKHBvc3NpYmx5IGluY29tcGxldGUpXG4gKiBtYXBwaW5ncyBvZiBkcm9wIHRhcmdldHMgKHRvIGlkZW50aWZ5IHRoZSBzbmFwcGluZylcbiAqIHRvIGNvbXB1dGVkIHNuYXAgcG9pbnRzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTbmFwQ29udGV4dCgpIHtcblxuICAvKipcbiAgICogTWFwPFN0cmluZywgU25hcFBvaW50cz4gbWFwcGluZyBkcm9wIHRhcmdldHMgdG9cbiAgICogYSBsaXN0IG9mIHBvc3NpYmxlIHNuYXBwaW5ncy5cbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMuX3RhcmdldHMgPSB7fTtcblxuICAvKipcbiAgICogTWFwPFN0cmluZywgUG9pbnQ+IGluaXRpYWwgcG9zaXRpb25pbmcgb2YgZWxlbWVudFxuICAgKiByZWdhcmRpbmcgdmFyaW91cyBzbmFwIGRpcmVjdGlvbnMuXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB0aGlzLl9zbmFwT3JpZ2lucyA9IHt9O1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHNuYXAgbG9jYXRpb25zXG4gICAqXG4gICAqIEB0eXBlIHtBcnJheTxzdHJpbmc+fVxuICAgKi9cbiAgdGhpcy5fc25hcExvY2F0aW9ucyA9IFtdO1xuXG4gIC8qKlxuICAgKiBNYXA8U3RyaW5nLCBBcnJheTxQb2ludD4+IG9mIGRlZmF1bHQgc25hcHBpbmcgbG9jYXRpb25zXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB0aGlzLl9kZWZhdWx0U25hcHMgPSB7fTtcbn1cblxuXG5TbmFwQ29udGV4dC5wcm90b3R5cGUuZ2V0U25hcE9yaWdpbiA9IGZ1bmN0aW9uKHNuYXBMb2NhdGlvbikge1xuICByZXR1cm4gdGhpcy5fc25hcE9yaWdpbnNbc25hcExvY2F0aW9uXTtcbn07XG5cblxuU25hcENvbnRleHQucHJvdG90eXBlLnNldFNuYXBPcmlnaW4gPSBmdW5jdGlvbihzbmFwTG9jYXRpb24sIGluaXRpYWxWYWx1ZSkge1xuICB0aGlzLl9zbmFwT3JpZ2luc1tzbmFwTG9jYXRpb25dID0gaW5pdGlhbFZhbHVlO1xuXG4gIGlmICh0aGlzLl9zbmFwTG9jYXRpb25zLmluZGV4T2Yoc25hcExvY2F0aW9uKSA9PT0gLTEpIHtcbiAgICB0aGlzLl9zbmFwTG9jYXRpb25zLnB1c2goc25hcExvY2F0aW9uKTtcbiAgfVxufTtcblxuXG5TbmFwQ29udGV4dC5wcm90b3R5cGUuYWRkRGVmYXVsdFNuYXAgPSBmdW5jdGlvbih0eXBlLCBwb2ludCkge1xuXG4gIHZhciBzbmFwVmFsdWVzID0gdGhpcy5fZGVmYXVsdFNuYXBzW3R5cGVdO1xuXG4gIGlmICghc25hcFZhbHVlcykge1xuICAgIHNuYXBWYWx1ZXMgPSB0aGlzLl9kZWZhdWx0U25hcHNbdHlwZV0gPSBbXTtcbiAgfVxuXG4gIHNuYXBWYWx1ZXMucHVzaChwb2ludCk7XG59O1xuXG4vKipcbiAqIFJldHVybiBhIG51bWJlciBvZiBpbml0aWFsaXplZCBzbmFwcywgaS5lLiBzbmFwIGxvY2F0aW9ucyBzdWNoIGFzXG4gKiB0b3AtbGVmdCwgbWlkLCBib3R0b20tcmlnaHQgYW5kIHNvIGZvcnRoLlxuICpcbiAqIEByZXR1cm4ge0FycmF5PHN0cmluZz59IHNuYXBMb2NhdGlvbnNcbiAqL1xuU25hcENvbnRleHQucHJvdG90eXBlLmdldFNuYXBMb2NhdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3NuYXBMb2NhdGlvbnM7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc25hcCBsb2NhdGlvbnMgZm9yIHRoaXMgY29udGV4dC5cbiAqXG4gKiBUaGUgb3JkZXIgb2YgbG9jYXRpb25zIGRldGVybWluZXMgcHJlY2VkZW5jZS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHNuYXBMb2NhdGlvbnNcbiAqL1xuU25hcENvbnRleHQucHJvdG90eXBlLnNldFNuYXBMb2NhdGlvbnMgPSBmdW5jdGlvbihzbmFwTG9jYXRpb25zKSB7XG4gIHRoaXMuX3NuYXBMb2NhdGlvbnMgPSBzbmFwTG9jYXRpb25zO1xufTtcblxuLyoqXG4gKiBHZXQgc25hcCBwb2ludHMgZm9yIGEgZ2l2ZW4gdGFyZ2V0XG4gKlxuICogQHBhcmFtIHtFbGVtZW50fHN0cmluZ30gdGFyZ2V0XG4gKi9cblNuYXBDb250ZXh0LnByb3RvdHlwZS5wb2ludHNGb3JUYXJnZXQgPSBmdW5jdGlvbih0YXJnZXQpIHtcblxuICB2YXIgdGFyZ2V0SWQgPSB0YXJnZXQuaWQgfHwgdGFyZ2V0O1xuXG4gIHZhciBzbmFwUG9pbnRzID0gdGhpcy5fdGFyZ2V0c1t0YXJnZXRJZF07XG5cbiAgaWYgKCFzbmFwUG9pbnRzKSB7XG4gICAgc25hcFBvaW50cyA9IHRoaXMuX3RhcmdldHNbdGFyZ2V0SWRdID0gbmV3IFNuYXBQb2ludHMoKTtcbiAgICBzbmFwUG9pbnRzLmluaXREZWZhdWx0cyh0aGlzLl9kZWZhdWx0U25hcHMpO1xuICB9XG5cbiAgcmV0dXJuIHNuYXBQb2ludHM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc25hcCBwb2ludHMgYW5kIGluaXRpYWxpemVzIHRoZW0gd2l0aCB0aGVcbiAqIGdpdmVuIGRlZmF1bHQgdmFsdWVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgQXJyYXk8UG9pbnQ+Pn0gW2RlZmF1bHRQb2ludHNdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTbmFwUG9pbnRzKGRlZmF1bHRTbmFwcykge1xuXG4gIC8qKlxuICAgKiBNYXA8U3RyaW5nLCBNYXA8KHh8eSksIEFycmF5PG51bWJlcj4+PiBtYXBwaW5nIHNuYXAgbG9jYXRpb25zLFxuICAgKiBpLmUuIHRvcC1sZWZ0LCBib3R0b20tcmlnaHQsIGNlbnRlciB0byBhY3R1YWwgc25hcCB2YWx1ZXMuXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB0aGlzLl9zbmFwVmFsdWVzID0ge307XG59XG5cblNuYXBQb2ludHMucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHNuYXBMb2NhdGlvbiwgcG9pbnQpIHtcblxuICB2YXIgc25hcFZhbHVlcyA9IHRoaXMuX3NuYXBWYWx1ZXNbc25hcExvY2F0aW9uXTtcblxuICBpZiAoIXNuYXBWYWx1ZXMpIHtcbiAgICBzbmFwVmFsdWVzID0gdGhpcy5fc25hcFZhbHVlc1tzbmFwTG9jYXRpb25dID0geyB4OiBbXSwgeTogW10gfTtcbiAgfVxuXG4gIGlmIChzbmFwVmFsdWVzLnguaW5kZXhPZihwb2ludC54KSA9PT0gLTEpIHtcbiAgICBzbmFwVmFsdWVzLngucHVzaChwb2ludC54KTtcbiAgfVxuXG4gIGlmIChzbmFwVmFsdWVzLnkuaW5kZXhPZihwb2ludC55KSA9PT0gLTEpIHtcbiAgICBzbmFwVmFsdWVzLnkucHVzaChwb2ludC55KTtcbiAgfVxufTtcblxuXG5TbmFwUG9pbnRzLnByb3RvdHlwZS5zbmFwID0gZnVuY3Rpb24ocG9pbnQsIHNuYXBMb2NhdGlvbiwgYXhpcywgdG9sZXJhbmNlKSB7XG4gIHZhciBzbmFwcGluZ1ZhbHVlcyA9IHRoaXMuX3NuYXBWYWx1ZXNbc25hcExvY2F0aW9uXTtcblxuICByZXR1cm4gc25hcHBpbmdWYWx1ZXMgJiYgc25hcFRvKHBvaW50W2F4aXNdLCBzbmFwcGluZ1ZhbHVlc1theGlzXSwgdG9sZXJhbmNlKTtcbn07XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIG51bWJlciBvZiBkZWZhdWx0IHNuYXBwaW5nIHBvaW50cy5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IGRlZmF1bHRTbmFwc1xuICovXG5TbmFwUG9pbnRzLnByb3RvdHlwZS5pbml0RGVmYXVsdHMgPSBmdW5jdGlvbihkZWZhdWx0U25hcHMpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZm9yRWFjaChkZWZhdWx0U25hcHMgfHwge30sIGZ1bmN0aW9uKHNuYXBQb2ludHMsIHNuYXBMb2NhdGlvbikge1xuICAgIGZvckVhY2goc25hcFBvaW50cywgZnVuY3Rpb24ocG9pbnQpIHtcbiAgICAgIHNlbGYuYWRkKHNuYXBMb2NhdGlvbiwgcG9pbnQpO1xuICAgIH0pO1xuICB9KTtcbn07IiwidmFyIGFicyA9IE1hdGguYWJzLFxuICAgIHJvdW5kID0gTWF0aC5yb3VuZDtcblxuXG4vKipcbiAqIFNuYXAgdmFsdWUgdG8gYSBjb2xsZWN0aW9uIG9mIHJlZmVyZW5jZSB2YWx1ZXMuXG4gKlxuICogQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtICB7QXJyYXk8bnVtYmVyPn0gdmFsdWVzXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFt0b2xlcmFuY2U9MTBdXG4gKlxuICogQHJldHVybiB7bnVtYmVyfSB0aGUgdmFsdWUgd2Ugc25hcHBlZCB0byBvciBudWxsLCBpZiBub25lIHNuYXBwZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNuYXBUbyh2YWx1ZSwgdmFsdWVzLCB0b2xlcmFuY2UpIHtcbiAgdG9sZXJhbmNlID0gdG9sZXJhbmNlID09PSB1bmRlZmluZWQgPyAxMCA6IHRvbGVyYW5jZTtcblxuICB2YXIgaWR4LCBzbmFwVmFsdWU7XG5cbiAgZm9yIChpZHggPSAwOyBpZHggPCB2YWx1ZXMubGVuZ3RoOyBpZHgrKykge1xuICAgIHNuYXBWYWx1ZSA9IHZhbHVlc1tpZHhdO1xuXG4gICAgaWYgKGFicyhzbmFwVmFsdWUgLSB2YWx1ZSkgPD0gdG9sZXJhbmNlKSB7XG4gICAgICByZXR1cm4gc25hcFZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiB0b3BMZWZ0KGJvdW5kcykge1xuICByZXR1cm4ge1xuICAgIHg6IGJvdW5kcy54LFxuICAgIHk6IGJvdW5kcy55XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3BSaWdodChib3VuZHMpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBib3VuZHMueCArIGJvdW5kcy53aWR0aCxcbiAgICB5OiBib3VuZHMueVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm90dG9tTGVmdChib3VuZHMpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBib3VuZHMueCxcbiAgICB5OiBib3VuZHMueSArIGJvdW5kcy5oZWlnaHRcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvdHRvbVJpZ2h0KGJvdW5kcykge1xuICByZXR1cm4ge1xuICAgIHg6IGJvdW5kcy54ICsgYm91bmRzLndpZHRoLFxuICAgIHk6IGJvdW5kcy55ICsgYm91bmRzLmhlaWdodFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWlkKGJvdW5kcywgZGVmYXVsdFZhbHVlKSB7XG5cbiAgaWYgKCFib3VuZHMgfHwgaXNOYU4oYm91bmRzLngpIHx8IGlzTmFOKGJvdW5kcy55KSkge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IHJvdW5kKGJvdW5kcy54ICsgYm91bmRzLndpZHRoIC8gMiksXG4gICAgeTogcm91bmQoYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0IC8gMilcbiAgfTtcbn1cblxuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBzbmFwIHN0YXRlIG9mIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0gIHtFdmVudH0gZXZlbnRcbiAqIEBwYXJhbSAge3N0cmluZ30gYXhpc1xuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRoZSBzbmFwcGVkIHN0YXRlXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTbmFwcGVkKGV2ZW50LCBheGlzKSB7XG4gIHZhciBzbmFwcGVkID0gZXZlbnQuc25hcHBlZDtcblxuICBpZiAoIXNuYXBwZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGF4aXMgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHNuYXBwZWRbYXhpc107XG4gIH1cblxuICByZXR1cm4gc25hcHBlZC54ICYmIHNuYXBwZWQueTtcbn1cblxuXG4vKipcbiAqIFNldCB0aGUgZ2l2ZW4gZXZlbnQgYXMgc25hcHBlZC5cbiAqXG4gKiBUaGlzIG1ldGhvZCBtYXkgY2hhbmdlIHRoZSB4IGFuZC9vciB5IHBvc2l0aW9uIG9mIHRoZSBzaGFwZVxuICogZnJvbSB0aGUgZ2l2ZW4gZXZlbnQhXG4gKlxuICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBheGlzXG4gKiBAcGFyYW0ge251bWJlcnxib29sZWFufSB2YWx1ZVxuICpcbiAqIEByZXR1cm4ge251bWJlcn0gb2xkIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRTbmFwcGVkKGV2ZW50LCBheGlzLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIGF4aXMgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdheGlzIG11c3QgYmUgaW4gW3gsIHldJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gZmFsc2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhbHVlIG11c3QgYmUgTnVtYmVyIG9yIGZhbHNlJyk7XG4gIH1cblxuICB2YXIgZGVsdGEsXG4gICAgICBwcmV2aW91c1ZhbHVlID0gZXZlbnRbYXhpc107XG5cbiAgdmFyIHNuYXBwZWQgPSBldmVudC5zbmFwcGVkID0gKGV2ZW50LnNuYXBwZWQgfHwge30pO1xuXG5cbiAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgIHNuYXBwZWRbYXhpc10gPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBzbmFwcGVkW2F4aXNdID0gdHJ1ZTtcblxuICAgIGRlbHRhID0gdmFsdWUgLSBwcmV2aW91c1ZhbHVlO1xuXG4gICAgZXZlbnRbYXhpc10gKz0gZGVsdGE7XG4gICAgZXZlbnRbJ2QnICsgYXhpc10gKz0gZGVsdGE7XG4gIH1cblxuICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbn1cblxuLyoqXG4gKiBHZXQgY2hpbGRyZW4gb2YgYSBzaGFwZS5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gcGFyZW50XG4gKlxuICogQHJldHVybnMge0FycmF5PGRqcy5tb2RlbC5TaGFwZXxkanMubW9kZWwuQ29ubmVjdGlvbj59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGlsZHJlbihwYXJlbnQpIHtcbiAgcmV0dXJuIHBhcmVudC5jaGlsZHJlbiB8fCBbXTtcbn0iLCJpbXBvcnQge1xuICBiaW5kLFxuICBkZWJvdW5jZSxcbiAgZm9yRWFjaCxcbiAgaXNOdW1iZXIsXG4gIGlzT2JqZWN0XG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgaXNTbmFwcGVkLFxuICBzZXRTbmFwcGVkXG59IGZyb20gJy4vU25hcFV0aWwnO1xuXG5pbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNsYXNzZXMgYXMgc3ZnQ2xhc3NlcyxcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZVxufSBmcm9tICd0aW55LXN2Zyc7XG5cbnZhciBTTkFQX1RPTEVSQU5DRSA9IDc7XG5cbmV4cG9ydCB2YXIgU05BUF9MSU5FX0hJREVfREVMQVkgPSAxMDAwO1xuXG5cbi8qKlxuICogR2VuZXJpYyBzbmFwcGluZyBmZWF0dXJlLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNuYXBwaW5nKGNhbnZhcykge1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG5cbiAgLy8gZGVsYXkgaGlkZSBieSAxMDAwIHNlY29uZHMgc2luY2UgbGFzdCBzbmFwXG4gIHRoaXMuX2FzeW5jSGlkZSA9IGRlYm91bmNlKGJpbmQodGhpcy5oaWRlLCB0aGlzKSwgU05BUF9MSU5FX0hJREVfREVMQVkpO1xufVxuXG5TbmFwcGluZy4kaW5qZWN0ID0gWyAnY2FudmFzJyBdO1xuXG4vKipcbiAqIFNuYXAgYW4gZXZlbnQgdG8gZ2l2ZW4gc25hcCBwb2ludHMuXG4gKlxuICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAqIEBwYXJhbSB7U25hcFBvaW50c30gc25hcFBvaW50c1xuICovXG5TbmFwcGluZy5wcm90b3R5cGUuc25hcCA9IGZ1bmN0aW9uKGV2ZW50LCBzbmFwUG9pbnRzKSB7XG4gIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgIHNuYXBDb250ZXh0ID0gY29udGV4dC5zbmFwQ29udGV4dCxcbiAgICAgIHNuYXBMb2NhdGlvbnMgPSBzbmFwQ29udGV4dC5nZXRTbmFwTG9jYXRpb25zKCk7XG5cbiAgdmFyIHNuYXBwaW5nID0ge1xuICAgIHg6IGlzU25hcHBlZChldmVudCwgJ3gnKSxcbiAgICB5OiBpc1NuYXBwZWQoZXZlbnQsICd5JylcbiAgfTtcblxuICBmb3JFYWNoKHNuYXBMb2NhdGlvbnMsIGZ1bmN0aW9uKGxvY2F0aW9uKSB7XG4gICAgdmFyIHNuYXBPcmlnaW4gPSBzbmFwQ29udGV4dC5nZXRTbmFwT3JpZ2luKGxvY2F0aW9uKTtcblxuICAgIHZhciBzbmFwQ3VycmVudCA9IHtcbiAgICAgIHg6IGV2ZW50LnggKyBzbmFwT3JpZ2luLngsXG4gICAgICB5OiBldmVudC55ICsgc25hcE9yaWdpbi55XG4gICAgfTtcblxuICAgIC8vIHNuYXAgYm90aCBheGlzIGlmIG5vdCBzbmFwcGVkIGFscmVhZHlcbiAgICBmb3JFYWNoKFsgJ3gnLCAneScgXSwgZnVuY3Rpb24oYXhpcykge1xuICAgICAgdmFyIGxvY2F0aW9uU25hcHBpbmc7XG5cbiAgICAgIGlmICghc25hcHBpbmdbYXhpc10pIHtcbiAgICAgICAgbG9jYXRpb25TbmFwcGluZyA9IHNuYXBQb2ludHMuc25hcChzbmFwQ3VycmVudCwgbG9jYXRpb24sIGF4aXMsIFNOQVBfVE9MRVJBTkNFKTtcblxuICAgICAgICBpZiAobG9jYXRpb25TbmFwcGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc25hcHBpbmdbYXhpc10gPSB7XG4gICAgICAgICAgICB2YWx1ZTogbG9jYXRpb25TbmFwcGluZyxcbiAgICAgICAgICAgIG9yaWdpblZhbHVlOiBsb2NhdGlvblNuYXBwaW5nIC0gc25hcE9yaWdpbltheGlzXVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIG5vIG5lZWQgdG8gY29udGludWUgc25hcHBpbmdcbiAgICBpZiAoc25hcHBpbmcueCAmJiBzbmFwcGluZy55KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcblxuICAvLyBzaG93IHNuYXAgbGluZXNcbiAgdGhpcy5zaG93U25hcExpbmUoJ3ZlcnRpY2FsJywgc25hcHBpbmcueCAmJiBzbmFwcGluZy54LnZhbHVlKTtcbiAgdGhpcy5zaG93U25hcExpbmUoJ2hvcml6b250YWwnLCBzbmFwcGluZy55ICYmIHNuYXBwaW5nLnkudmFsdWUpO1xuXG4gIC8vIHNuYXAgZXZlbnRcbiAgZm9yRWFjaChbICd4JywgJ3knIF0sIGZ1bmN0aW9uKGF4aXMpIHtcbiAgICB2YXIgYXhpc1NuYXBwaW5nID0gc25hcHBpbmdbYXhpc107XG5cbiAgICBpZiAoaXNPYmplY3QoYXhpc1NuYXBwaW5nKSkge1xuICAgICAgc2V0U25hcHBlZChldmVudCwgYXhpcywgYXhpc1NuYXBwaW5nLm9yaWdpblZhbHVlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuU25hcHBpbmcucHJvdG90eXBlLl9jcmVhdGVMaW5lID0gZnVuY3Rpb24ob3JpZW50YXRpb24pIHtcbiAgdmFyIHJvb3QgPSB0aGlzLl9jYW52YXMuZ2V0TGF5ZXIoJ3NuYXAnKTtcblxuICB2YXIgbGluZSA9IHN2Z0NyZWF0ZSgncGF0aCcpO1xuXG4gIHN2Z0F0dHIobGluZSwgeyBkOiAnTTAsMCBMMCwwJyB9KTtcblxuICBzdmdDbGFzc2VzKGxpbmUpLmFkZCgnZGpzLXNuYXAtbGluZScpO1xuXG4gIHN2Z0FwcGVuZChyb290LCBsaW5lKTtcblxuICByZXR1cm4ge1xuICAgIHVwZGF0ZTogZnVuY3Rpb24ocG9zaXRpb24pIHtcblxuICAgICAgaWYgKCFpc051bWJlcihwb3NpdGlvbikpIHtcbiAgICAgICAgc3ZnQXR0cihsaW5lLCB7IGRpc3BsYXk6ICdub25lJyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgc3ZnQXR0cihsaW5lLCB7XG4gICAgICAgICAgICBkOiAnTS0xMDAwMDAsJyArIHBvc2l0aW9uICsgJyBMKzEwMDAwMCwnICsgcG9zaXRpb24sXG4gICAgICAgICAgICBkaXNwbGF5OiAnJ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN2Z0F0dHIobGluZSwge1xuICAgICAgICAgICAgZDogJ00gJyArIHBvc2l0aW9uICsgJywtMTAwMDAwIEwgJyArIHBvc2l0aW9uICsgJywgKzEwMDAwMCcsXG4gICAgICAgICAgICBkaXNwbGF5OiAnJ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuU25hcHBpbmcucHJvdG90eXBlLl9jcmVhdGVTbmFwTGluZXMgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fc25hcExpbmVzID0ge1xuICAgIGhvcml6b250YWw6IHRoaXMuX2NyZWF0ZUxpbmUoJ2hvcml6b250YWwnKSxcbiAgICB2ZXJ0aWNhbDogdGhpcy5fY3JlYXRlTGluZSgndmVydGljYWwnKVxuICB9O1xufTtcblxuU25hcHBpbmcucHJvdG90eXBlLnNob3dTbmFwTGluZSA9IGZ1bmN0aW9uKG9yaWVudGF0aW9uLCBwb3NpdGlvbikge1xuXG4gIHZhciBsaW5lID0gdGhpcy5nZXRTbmFwTGluZShvcmllbnRhdGlvbik7XG5cbiAgaWYgKGxpbmUpIHtcbiAgICBsaW5lLnVwZGF0ZShwb3NpdGlvbik7XG4gIH1cblxuICB0aGlzLl9hc3luY0hpZGUoKTtcbn07XG5cblNuYXBwaW5nLnByb3RvdHlwZS5nZXRTbmFwTGluZSA9IGZ1bmN0aW9uKG9yaWVudGF0aW9uKSB7XG4gIGlmICghdGhpcy5fc25hcExpbmVzKSB7XG4gICAgdGhpcy5fY3JlYXRlU25hcExpbmVzKCk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fc25hcExpbmVzW29yaWVudGF0aW9uXTtcbn07XG5cblNuYXBwaW5nLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24oKSB7XG4gIGZvckVhY2godGhpcy5fc25hcExpbmVzLCBmdW5jdGlvbihzbmFwTGluZSkge1xuICAgIHNuYXBMaW5lLnVwZGF0ZSgpO1xuICB9KTtcbn07XG4iLCJpbXBvcnQgQ3JlYXRlTW92ZVNuYXBwaW5nIGZyb20gJy4vQ3JlYXRlTW92ZVNuYXBwaW5nJztcbmltcG9ydCBSZXNpemVTbmFwcGluZyBmcm9tICcuL1Jlc2l6ZVNuYXBwaW5nJztcbmltcG9ydCBTbmFwcGluZyBmcm9tICcuL1NuYXBwaW5nJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogW1xuICAgICdjcmVhdGVNb3ZlU25hcHBpbmcnLFxuICAgICdyZXNpemVTbmFwcGluZycsXG4gICAgJ3NuYXBwaW5nJ1xuICBdLFxuICBjcmVhdGVNb3ZlU25hcHBpbmc6IFsgJ3R5cGUnLCBDcmVhdGVNb3ZlU25hcHBpbmcgXSxcbiAgcmVzaXplU25hcHBpbmc6IFsgJ3R5cGUnLCBSZXNpemVTbmFwcGluZyBdLFxuICBzbmFwcGluZzogWyAndHlwZScsIFNuYXBwaW5nIF1cbn07IiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmaWx0ZXIsXG4gIGZvckVhY2gsXG4gIGlzTnVtYmVyXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHsgYXNUUkJMIH0gZnJvbSAnLi4vLi4vbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQgeyBnZXRCQm94IH0gZnJvbSAnLi4vLi4vdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCB7IGdldERpcmVjdGlvbiB9IGZyb20gJy4vU3BhY2VVdGlsJztcblxuaW1wb3J0IHsgaGFzUHJpbWFyeU1vZGlmaWVyIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb3VzZSc7XG5cbmltcG9ydCB7IHNldCBhcyBzZXRDdXJzb3IgfSBmcm9tICcuLi8uLi91dGlsL0N1cnNvcic7XG5cbmltcG9ydCB7IHNlbGZBbmRBbGxDaGlsZHJlbiB9IGZyb20gJy4uLy4uL3V0aWwvRWxlbWVudHMnO1xuXG52YXIgYWJzID0gTWF0aC5hYnMsXG4gICAgcm91bmQgPSBNYXRoLnJvdW5kO1xuXG52YXIgQVhJU19UT19ESU1FTlNJT04gPSB7XG4gIHg6ICd3aWR0aCcsXG4gIHk6ICdoZWlnaHQnXG59O1xuXG52YXIgQ1VSU09SX0NST1NTSEFJUiA9ICdjcm9zc2hhaXInO1xuXG52YXIgRElSRUNUSU9OX1RPX1RSQkwgPSB7XG4gIG46ICd0b3AnLFxuICB3OiAnbGVmdCcsXG4gIHM6ICdib3R0b20nLFxuICBlOiAncmlnaHQnXG59O1xuXG52YXIgSElHSF9QUklPUklUWSA9IDE1MDA7XG5cbnZhciBESVJFQ1RJT05fVE9fT1BQT1NJVEUgPSB7XG4gIG46ICdzJyxcbiAgdzogJ2UnLFxuICBzOiAnbicsXG4gIGU6ICd3J1xufTtcblxudmFyIFBBRERJTkcgPSAyMDtcblxuXG4vKipcbiAqIEFkZCBvciByZW1vdmUgc3BhY2UgYnkgbW92aW5nIGFuZCByZXNpemluZyBlbGVtZW50cy5cbiAqXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge0RyYWdnaW5nfSBkcmFnZ2luZ1xuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKiBAcGFyYW0ge1J1bGVzfSBydWxlc1xuICogQHBhcmFtIHt0b29sTWFuYWdlcn0gdG9vbE1hbmFnZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3BhY2VUb29sKGNhbnZhcywgZHJhZ2dpbmcsIGV2ZW50QnVzLCBtb2RlbGluZywgcnVsZXMsIHRvb2xNYW5hZ2VyKSB7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcbiAgdGhpcy5fZHJhZ2dpbmcgPSBkcmFnZ2luZztcbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbiAgdGhpcy5fcnVsZXMgPSBydWxlcztcbiAgdGhpcy5fdG9vbE1hbmFnZXIgPSB0b29sTWFuYWdlcjtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdG9vbE1hbmFnZXIucmVnaXN0ZXJUb29sKCdzcGFjZScsIHtcbiAgICB0b29sOiAnc3BhY2VUb29sLnNlbGVjdGlvbicsXG4gICAgZHJhZ2dpbmc6ICdzcGFjZVRvb2wnXG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdzcGFjZVRvb2wuc2VsZWN0aW9uLmVuZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgZXZlbnRCdXMub25jZSgnc3BhY2VUb29sLnNlbGVjdGlvbi5lbmRlZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5hY3RpdmF0ZU1ha2VTcGFjZShldmVudC5vcmlnaW5hbEV2ZW50KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ3NwYWNlVG9vbC5tb3ZlJywgSElHSF9QUklPUklUWSAsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBpbml0aWFsaXplZCA9IGNvbnRleHQuaW5pdGlhbGl6ZWQ7XG5cbiAgICBpZiAoIWluaXRpYWxpemVkKSB7XG4gICAgICBpbml0aWFsaXplZCA9IGNvbnRleHQuaW5pdGlhbGl6ZWQgPSBzZWxmLmluaXQoZXZlbnQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGlmIChpbml0aWFsaXplZCkge1xuICAgICAgZW5zdXJlQ29uc3RyYWludHMoZXZlbnQpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ3NwYWNlVG9vbC5lbmQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgYXhpcyA9IGNvbnRleHQuYXhpcyxcbiAgICAgICAgZGlyZWN0aW9uID0gY29udGV4dC5kaXJlY3Rpb24sXG4gICAgICAgIG1vdmluZ1NoYXBlcyA9IGNvbnRleHQubW92aW5nU2hhcGVzLFxuICAgICAgICByZXNpemluZ1NoYXBlcyA9IGNvbnRleHQucmVzaXppbmdTaGFwZXMsXG4gICAgICAgIHN0YXJ0ID0gY29udGV4dC5zdGFydDtcblxuICAgIGlmICghY29udGV4dC5pbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVuc3VyZUNvbnN0cmFpbnRzKGV2ZW50KTtcblxuICAgIHZhciBkZWx0YSA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfTtcblxuICAgIGRlbHRhWyBheGlzIF0gPSByb3VuZChldmVudFsgJ2QnICsgYXhpcyBdKTtcblxuICAgIHNlbGYubWFrZVNwYWNlKG1vdmluZ1NoYXBlcywgcmVzaXppbmdTaGFwZXMsIGRlbHRhLCBkaXJlY3Rpb24sIHN0YXJ0KTtcblxuICAgIGV2ZW50QnVzLm9uY2UoJ3NwYWNlVG9vbC5lbmRlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICAgIC8vIGFjdGl2YXRlIHNwYWNlIHRvb2wgc2VsZWN0aW9uIGFmdGVyIG1ha2Ugc3BhY2VcbiAgICAgIHNlbGYuYWN0aXZhdGVTZWxlY3Rpb24oZXZlbnQub3JpZ2luYWxFdmVudCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5TcGFjZVRvb2wuJGluamVjdCA9IFtcbiAgJ2NhbnZhcycsXG4gICdkcmFnZ2luZycsXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZycsXG4gICdydWxlcycsXG4gICd0b29sTWFuYWdlcidcbl07XG5cbi8qKlxuICogQWN0aXZhdGUgc3BhY2UgdG9vbCBzZWxlY3Rpb24uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGF1dG9BY3RpdmF0ZVxuICovXG5TcGFjZVRvb2wucHJvdG90eXBlLmFjdGl2YXRlU2VsZWN0aW9uID0gZnVuY3Rpb24oZXZlbnQsIGF1dG9BY3RpdmF0ZSwgcmVhY3RpdmF0ZSkge1xuICB0aGlzLl9kcmFnZ2luZy5pbml0KGV2ZW50LCAnc3BhY2VUb29sLnNlbGVjdGlvbicsIHtcbiAgICBhdXRvQWN0aXZhdGU6IGF1dG9BY3RpdmF0ZSxcbiAgICBjdXJzb3I6IENVUlNPUl9DUk9TU0hBSVIsXG4gICAgZGF0YToge1xuICAgICAgY29udGV4dDoge1xuICAgICAgICByZWFjdGl2YXRlOiByZWFjdGl2YXRlXG4gICAgICB9XG4gICAgfSxcbiAgICB0cmFwQ2xpY2s6IGZhbHNlXG4gIH0pO1xufTtcblxuLyoqXG4gKiBBY3RpdmF0ZSBzcGFjZSB0b29sIG1ha2Ugc3BhY2UuXG4gKlxuICogQHBhcmFtICB7TW91c2VFdmVudH0gZXZlbnRcbiAqL1xuU3BhY2VUb29sLnByb3RvdHlwZS5hY3RpdmF0ZU1ha2VTcGFjZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gIHRoaXMuX2RyYWdnaW5nLmluaXQoZXZlbnQsICdzcGFjZVRvb2wnLCB7XG4gICAgYXV0b0FjdGl2YXRlOiB0cnVlLFxuICAgIGN1cnNvcjogQ1VSU09SX0NST1NTSEFJUixcbiAgICBkYXRhOiB7XG4gICAgICBjb250ZXh0OiB7fVxuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIE1ha2Ugc3BhY2UuXG4gKlxuICogQHBhcmFtICB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlPn0gbW92aW5nU2hhcGVzXG4gKiBAcGFyYW0gIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fSByZXNpemluZ1NoYXBlc1xuICogQHBhcmFtICB7T2JqZWN0fSBkZWx0YVxuICogQHBhcmFtICB7bnVtYmVyfSBkZWx0YS54XG4gKiBAcGFyYW0gIHtudW1iZXJ9IGRlbHRhLnlcbiAqIEBwYXJhbSAge3N0cmluZ30gZGlyZWN0aW9uXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHN0YXJ0XG4gKi9cblNwYWNlVG9vbC5wcm90b3R5cGUubWFrZVNwYWNlID0gZnVuY3Rpb24obW92aW5nU2hhcGVzLCByZXNpemluZ1NoYXBlcywgZGVsdGEsIGRpcmVjdGlvbiwgc3RhcnQpIHtcbiAgcmV0dXJuIHRoaXMuX21vZGVsaW5nLmNyZWF0ZVNwYWNlKG1vdmluZ1NoYXBlcywgcmVzaXppbmdTaGFwZXMsIGRlbHRhLCBkaXJlY3Rpb24sIHN0YXJ0KTtcbn07XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBtYWtlIHNwYWNlIGFuZCByZXR1cm4gdHJ1ZSBpZiB0aGF0IHdhcyBzdWNjZXNzZnVsLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5TcGFjZVRvb2wucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihldmVudCwgY29udGV4dCkge1xuICB2YXIgYXhpcyA9IGFicyhldmVudC5keCkgPiBhYnMoZXZlbnQuZHkpID8gJ3gnIDogJ3knLFxuICAgICAgZGVsdGEgPSBldmVudFsgJ2QnICsgYXhpcyBdLFxuICAgICAgc3RhcnQgPSBldmVudFsgYXhpcyBdIC0gZGVsdGE7XG5cbiAgaWYgKGFicyhkZWx0YSkgPCA1KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gaW52ZXJ0IGRlbHRhIHRvIHJlbW92ZSBzcGFjZSB3aGVuIG1vdmluZyBsZWZ0XG4gIGlmIChkZWx0YSA8IDApIHtcbiAgICBkZWx0YSAqPSAtMTtcbiAgfVxuXG4gIC8vIGludmVydCBkZWx0YSB0byBhZGQvcmVtb3ZlIHNwYWNlIHdoZW4gcmVtb3ZpbmcvYWRkaW5nIHNwYWNlIGlmIG1vZGlmaWVyIGtleSBpcyBwcmVzc2VkXG4gIGlmIChoYXNQcmltYXJ5TW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgZGVsdGEgKj0gLTE7XG4gIH1cblxuICB2YXIgZGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKGF4aXMsIGRlbHRhKTtcblxuICB2YXIgcm9vdCA9IHRoaXMuX2NhbnZhcy5nZXRSb290RWxlbWVudCgpO1xuXG4gIHZhciBjaGlsZHJlbiA9IHNlbGZBbmRBbGxDaGlsZHJlbihyb290LCB0cnVlKTtcblxuICB2YXIgZWxlbWVudHMgPSB0aGlzLmNhbGN1bGF0ZUFkanVzdG1lbnRzKGNoaWxkcmVuLCBheGlzLCBkZWx0YSwgc3RhcnQpO1xuXG4gIHZhciBtaW5EaW1lbnNpb25zID0gdGhpcy5fZXZlbnRCdXMuZmlyZSgnc3BhY2VUb29sLmdldE1pbkRpbWVuc2lvbnMnLCB7XG4gICAgYXhpczogYXhpcyxcbiAgICBkaXJlY3Rpb246IGRpcmVjdGlvbixcbiAgICBzaGFwZXM6IGVsZW1lbnRzLnJlc2l6aW5nU2hhcGVzLFxuICAgIHN0YXJ0OiBzdGFydFxuICB9KTtcblxuICB2YXIgc3BhY2VUb29sQ29uc3RyYWludHMgPSBnZXRTcGFjZVRvb2xDb25zdHJhaW50cyhlbGVtZW50cywgYXhpcywgZGlyZWN0aW9uLCBzdGFydCwgbWluRGltZW5zaW9ucyk7XG5cbiAgYXNzaWduKFxuICAgIGNvbnRleHQsXG4gICAgZWxlbWVudHMsXG4gICAge1xuICAgICAgYXhpczogYXhpcyxcbiAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLFxuICAgICAgc3BhY2VUb29sQ29uc3RyYWludHM6IHNwYWNlVG9vbENvbnN0cmFpbnRzLFxuICAgICAgc3RhcnQ6IHN0YXJ0XG4gICAgfVxuICApO1xuXG4gIHNldEN1cnNvcigncmVzaXplLScgKyAoYXhpcyA9PT0gJ3gnID8gJ2V3JyA6ICducycpKTtcblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogR2V0IGVsZW1lbnRzIHRvIGJlIG1vdmVkIGFuZCByZXNpemVkLlxuICpcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5TaGFwZT59IGVsZW1lbnRzXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGF4aXNcbiAqIEBwYXJhbSAge251bWJlcn0gZGVsdGFcbiAqIEBwYXJhbSAge251bWJlcn0gc3RhcnRcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cblNwYWNlVG9vbC5wcm90b3R5cGUuY2FsY3VsYXRlQWRqdXN0bWVudHMgPSBmdW5jdGlvbihlbGVtZW50cywgYXhpcywgZGVsdGEsIHN0YXJ0KSB7XG4gIHZhciBydWxlcyA9IHRoaXMuX3J1bGVzO1xuXG4gIHZhciBtb3ZpbmdTaGFwZXMgPSBbXSxcbiAgICAgIHJlc2l6aW5nU2hhcGVzID0gW107XG5cbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIGlmICghZWxlbWVudC5wYXJlbnQgfHwgaXNDb25uZWN0aW9uKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHNoYXBlU3RhcnQgPSBlbGVtZW50WyBheGlzIF0sXG4gICAgICAgIHNoYXBlRW5kID0gc2hhcGVTdGFydCArIGVsZW1lbnRbIEFYSVNfVE9fRElNRU5TSU9OWyBheGlzIF0gXTtcblxuICAgIC8vIHNoYXBlIHRvIGJlIG1vdmVkXG4gICAgaWYgKChkZWx0YSA+IDAgJiYgc2hhcGVTdGFydCA+IHN0YXJ0KSB8fCAoZGVsdGEgPCAwICYmIHNoYXBlRW5kIDwgc3RhcnQpKSB7XG4gICAgICByZXR1cm4gbW92aW5nU2hhcGVzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuXG4gICAgLy8gc2hhcGUgdG8gYmUgcmVzaXplZFxuICAgIGlmIChzaGFwZVN0YXJ0IDwgc3RhcnQgJiZcbiAgICAgIHNoYXBlRW5kID4gc3RhcnQgJiZcbiAgICAgIHJ1bGVzLmFsbG93ZWQoJ3NoYXBlLnJlc2l6ZScsIHsgc2hhcGU6IGVsZW1lbnQgfSlcbiAgICApIHtcblxuICAgICAgcmV0dXJuIHJlc2l6aW5nU2hhcGVzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIG1vdmluZ1NoYXBlczogbW92aW5nU2hhcGVzLFxuICAgIHJlc2l6aW5nU2hhcGVzOiByZXNpemluZ1NoYXBlc1xuICB9O1xufTtcblxuU3BhY2VUb29sLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuaXNBY3RpdmUoKSkge1xuICAgIHRoaXMuX2RyYWdnaW5nLmNhbmNlbCgpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYWN0aXZhdGVTZWxlY3Rpb24oKTtcbiAgfVxufTtcblxuU3BhY2VUb29sLnByb3RvdHlwZS5pc0FjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY29udGV4dCA9IHRoaXMuX2RyYWdnaW5nLmNvbnRleHQoKTtcblxuICByZXR1cm4gY29udGV4dCAmJiAvXnNwYWNlVG9vbC8udGVzdChjb250ZXh0LnByZWZpeCk7XG59O1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZnVuY3Rpb24gYWRkUGFkZGluZyh0cmJsKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiB0cmJsLnRvcCAtIFBBRERJTkcsXG4gICAgcmlnaHQ6IHRyYmwucmlnaHQgKyBQQURESU5HLFxuICAgIGJvdHRvbTogdHJibC5ib3R0b20gKyBQQURESU5HLFxuICAgIGxlZnQ6IHRyYmwubGVmdCAtIFBBRERJTkdcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlQ29uc3RyYWludHMoZXZlbnQpIHtcbiAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgc3BhY2VUb29sQ29uc3RyYWludHMgPSBjb250ZXh0LnNwYWNlVG9vbENvbnN0cmFpbnRzO1xuXG4gIGlmICghc3BhY2VUb29sQ29uc3RyYWludHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgeCwgeTtcblxuICBpZiAoaXNOdW1iZXIoc3BhY2VUb29sQ29uc3RyYWludHMubGVmdCkpIHtcbiAgICB4ID0gTWF0aC5tYXgoZXZlbnQueCwgc3BhY2VUb29sQ29uc3RyYWludHMubGVmdCk7XG5cbiAgICBldmVudC5keCA9IGV2ZW50LmR4ICsgeCAtIGV2ZW50Lng7XG4gICAgZXZlbnQueCA9IHg7XG4gIH1cblxuICBpZiAoaXNOdW1iZXIoc3BhY2VUb29sQ29uc3RyYWludHMucmlnaHQpKSB7XG4gICAgeCA9IE1hdGgubWluKGV2ZW50LngsIHNwYWNlVG9vbENvbnN0cmFpbnRzLnJpZ2h0KTtcblxuICAgIGV2ZW50LmR4ID0gZXZlbnQuZHggKyB4IC0gZXZlbnQueDtcbiAgICBldmVudC54ID0geDtcbiAgfVxuXG4gIGlmIChpc051bWJlcihzcGFjZVRvb2xDb25zdHJhaW50cy50b3ApKSB7XG4gICAgeSA9IE1hdGgubWF4KGV2ZW50LnksIHNwYWNlVG9vbENvbnN0cmFpbnRzLnRvcCk7XG5cbiAgICBldmVudC5keSA9IGV2ZW50LmR5ICsgeSAtIGV2ZW50Lnk7XG4gICAgZXZlbnQueSA9IHk7XG4gIH1cblxuICBpZiAoaXNOdW1iZXIoc3BhY2VUb29sQ29uc3RyYWludHMuYm90dG9tKSkge1xuICAgIHkgPSBNYXRoLm1pbihldmVudC55LCBzcGFjZVRvb2xDb25zdHJhaW50cy5ib3R0b20pO1xuXG4gICAgZXZlbnQuZHkgPSBldmVudC5keSArIHkgLSBldmVudC55O1xuICAgIGV2ZW50LnkgPSB5O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNwYWNlVG9vbENvbnN0cmFpbnRzKGVsZW1lbnRzLCBheGlzLCBkaXJlY3Rpb24sIHN0YXJ0LCBtaW5EaW1lbnNpb25zKSB7XG4gIHZhciBtb3ZpbmdTaGFwZXMgPSBlbGVtZW50cy5tb3ZpbmdTaGFwZXMsXG4gICAgICByZXNpemluZ1NoYXBlcyA9IGVsZW1lbnRzLnJlc2l6aW5nU2hhcGVzO1xuXG4gIGlmICghcmVzaXppbmdTaGFwZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNwYWNlVG9vbENvbnN0cmFpbnRzID0ge30sXG4gICAgICBtaW4sXG4gICAgICBtYXg7XG5cbiAgZm9yRWFjaChyZXNpemluZ1NoYXBlcywgZnVuY3Rpb24ocmVzaXppbmdTaGFwZSkge1xuICAgIHZhciByZXNpemluZ1NoYXBlQkJveCA9IGFzVFJCTChyZXNpemluZ1NoYXBlKTtcblxuICAgIC8vIGZpbmQgY2hpbGRyZW4gdGhhdCBhcmUgbm90IG1vdmluZyBvciByZXNpemluZ1xuICAgIHZhciBub25Nb3ZpbmdSZXNpemluZ0NoaWxkcmVuID0gZmlsdGVyKHJlc2l6aW5nU2hhcGUuY2hpbGRyZW4sIGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICByZXR1cm4gIWlzQ29ubmVjdGlvbihjaGlsZCkgJiZcbiAgICAgICAgIWlzTGFiZWwoY2hpbGQpICYmXG4gICAgICAgICFpbmNsdWRlcyhtb3ZpbmdTaGFwZXMsIGNoaWxkKSAmJlxuICAgICAgICAhaW5jbHVkZXMocmVzaXppbmdTaGFwZXMsIGNoaWxkKTtcbiAgICB9KTtcblxuICAgIC8vIGZpbmQgY2hpbGRyZW4gdGhhdCBhcmUgbW92aW5nXG4gICAgdmFyIG1vdmluZ0NoaWxkcmVuID0gZmlsdGVyKHJlc2l6aW5nU2hhcGUuY2hpbGRyZW4sIGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICByZXR1cm4gIWlzQ29ubmVjdGlvbihjaGlsZCkgJiYgIWlzTGFiZWwoY2hpbGQpICYmIGluY2x1ZGVzKG1vdmluZ1NoYXBlcywgY2hpbGQpO1xuICAgIH0pO1xuXG4gICAgdmFyIG1pbk9yTWF4LFxuICAgICAgICBub25Nb3ZpbmdSZXNpemluZ0NoaWxkcmVuQkJveCxcbiAgICAgICAgbW92aW5nQ2hpbGRyZW5CQm94O1xuXG4gICAgaWYgKG5vbk1vdmluZ1Jlc2l6aW5nQ2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBub25Nb3ZpbmdSZXNpemluZ0NoaWxkcmVuQkJveCA9IGFkZFBhZGRpbmcoYXNUUkJMKGdldEJCb3gobm9uTW92aW5nUmVzaXppbmdDaGlsZHJlbikpKTtcblxuICAgICAgbWluT3JNYXggPSBzdGFydCAtXG4gICAgICAgIHJlc2l6aW5nU2hhcGVCQm94WyBESVJFQ1RJT05fVE9fVFJCTFsgZGlyZWN0aW9uIF0gXSArXG4gICAgICAgIG5vbk1vdmluZ1Jlc2l6aW5nQ2hpbGRyZW5CQm94WyBESVJFQ1RJT05fVE9fVFJCTFsgZGlyZWN0aW9uIF0gXTtcblxuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ24nKSB7XG4gICAgICAgIHNwYWNlVG9vbENvbnN0cmFpbnRzLmJvdHRvbSA9IG1heCA9IGlzTnVtYmVyKG1heCkgPyBNYXRoLm1pbihtYXgsIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICd3Jykge1xuICAgICAgICBzcGFjZVRvb2xDb25zdHJhaW50cy5yaWdodCA9IG1heCA9IGlzTnVtYmVyKG1heCkgPyBNYXRoLm1pbihtYXgsIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdzJykge1xuICAgICAgICBzcGFjZVRvb2xDb25zdHJhaW50cy50b3AgPSBtaW4gPSBpc051bWJlcihtaW4pID8gTWF0aC5tYXgobWluLCBtaW5Pck1heCkgOiBtaW5Pck1heDtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnZScpIHtcbiAgICAgICAgc3BhY2VUb29sQ29uc3RyYWludHMubGVmdCA9IG1pbiA9IGlzTnVtYmVyKG1pbikgPyBNYXRoLm1heChtaW4sIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtb3ZpbmdDaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIG1vdmluZ0NoaWxkcmVuQkJveCA9IGFkZFBhZGRpbmcoYXNUUkJMKGdldEJCb3gobW92aW5nQ2hpbGRyZW4pKSk7XG5cbiAgICAgIG1pbk9yTWF4ID0gc3RhcnQgLVxuICAgICAgICBtb3ZpbmdDaGlsZHJlbkJCb3hbIERJUkVDVElPTl9UT19UUkJMWyBESVJFQ1RJT05fVE9fT1BQT1NJVEVbIGRpcmVjdGlvbiBdIF0gXSArXG4gICAgICAgIHJlc2l6aW5nU2hhcGVCQm94WyBESVJFQ1RJT05fVE9fVFJCTFsgRElSRUNUSU9OX1RPX09QUE9TSVRFWyBkaXJlY3Rpb24gXSBdIF07XG5cbiAgICAgIGlmIChkaXJlY3Rpb24gPT09ICduJykge1xuICAgICAgICBzcGFjZVRvb2xDb25zdHJhaW50cy5ib3R0b20gPSBtYXggPSBpc051bWJlcihtYXgpID8gTWF0aC5taW4obWF4LCBtaW5Pck1heCkgOiBtaW5Pck1heDtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAndycpIHtcbiAgICAgICAgc3BhY2VUb29sQ29uc3RyYWludHMucmlnaHQgPSBtYXggPSBpc051bWJlcihtYXgpID8gTWF0aC5taW4obWF4LCBtaW5Pck1heCkgOiBtaW5Pck1heDtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAncycpIHtcbiAgICAgICAgc3BhY2VUb29sQ29uc3RyYWludHMudG9wID0gbWluID0gaXNOdW1iZXIobWluKSA/IE1hdGgubWF4KG1pbiwgbWluT3JNYXgpIDogbWluT3JNYXg7XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2UnKSB7XG4gICAgICAgIHNwYWNlVG9vbENvbnN0cmFpbnRzLmxlZnQgPSBtaW4gPSBpc051bWJlcihtaW4pID8gTWF0aC5tYXgobWluLCBtaW5Pck1heCkgOiBtaW5Pck1heDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzaXppbmdTaGFwZU1pbkRpbWVuc2lvbnMgPSBtaW5EaW1lbnNpb25zICYmIG1pbkRpbWVuc2lvbnNbIHJlc2l6aW5nU2hhcGUuaWQgXTtcblxuICAgIGlmIChyZXNpemluZ1NoYXBlTWluRGltZW5zaW9ucykge1xuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ24nKSB7XG4gICAgICAgIG1pbk9yTWF4ID0gc3RhcnQgK1xuICAgICAgICAgIHJlc2l6aW5nU2hhcGVbIEFYSVNfVE9fRElNRU5TSU9OIFsgYXhpcyBdIF0gLVxuICAgICAgICAgIHJlc2l6aW5nU2hhcGVNaW5EaW1lbnNpb25zWyBBWElTX1RPX0RJTUVOU0lPTlsgYXhpcyBdIF07XG5cbiAgICAgICAgc3BhY2VUb29sQ29uc3RyYWludHMuYm90dG9tID0gbWF4ID0gaXNOdW1iZXIobWF4KSA/IE1hdGgubWluKG1heCwgbWluT3JNYXgpIDogbWluT3JNYXg7XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3cnKSB7XG4gICAgICAgIG1pbk9yTWF4ID0gc3RhcnQgK1xuICAgICAgICAgIHJlc2l6aW5nU2hhcGVbIEFYSVNfVE9fRElNRU5TSU9OIFsgYXhpcyBdIF0gLVxuICAgICAgICAgIHJlc2l6aW5nU2hhcGVNaW5EaW1lbnNpb25zWyBBWElTX1RPX0RJTUVOU0lPTlsgYXhpcyBdIF07XG5cbiAgICAgICAgc3BhY2VUb29sQ29uc3RyYWludHMucmlnaHQgPSBtYXggPSBpc051bWJlcihtYXgpID8gTWF0aC5taW4obWF4LCBtaW5Pck1heCkgOiBtaW5Pck1heDtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAncycpIHtcbiAgICAgICAgbWluT3JNYXggPSBzdGFydCAtXG4gICAgICAgICAgcmVzaXppbmdTaGFwZVsgQVhJU19UT19ESU1FTlNJT04gWyBheGlzIF0gXSArXG4gICAgICAgICAgcmVzaXppbmdTaGFwZU1pbkRpbWVuc2lvbnNbIEFYSVNfVE9fRElNRU5TSU9OWyBheGlzIF0gXTtcblxuICAgICAgICBzcGFjZVRvb2xDb25zdHJhaW50cy50b3AgPSBtaW4gPSBpc051bWJlcihtaW4pID8gTWF0aC5tYXgobWluLCBtaW5Pck1heCkgOiBtaW5Pck1heDtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnZScpIHtcbiAgICAgICAgbWluT3JNYXggPSBzdGFydCAtXG4gICAgICAgICAgcmVzaXppbmdTaGFwZVsgQVhJU19UT19ESU1FTlNJT04gWyBheGlzIF0gXSArXG4gICAgICAgICAgcmVzaXppbmdTaGFwZU1pbkRpbWVuc2lvbnNbIEFYSVNfVE9fRElNRU5TSU9OWyBheGlzIF0gXTtcblxuICAgICAgICBzcGFjZVRvb2xDb25zdHJhaW50cy5sZWZ0ID0gbWluID0gaXNOdW1iZXIobWluKSA/IE1hdGgubWF4KG1pbiwgbWluT3JNYXgpIDogbWluT3JNYXg7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gc3BhY2VUb29sQ29uc3RyYWludHM7XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCBpdGVtKSB7XG4gIHJldHVybiBhcnJheS5pbmRleE9mKGl0ZW0pICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gaXNDb25uZWN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuICEhZWxlbWVudC53YXlwb2ludHM7XG59XG5cbmZ1bmN0aW9uIGlzTGFiZWwoZWxlbWVudCkge1xuICByZXR1cm4gISFlbGVtZW50LmxhYmVsVGFyZ2V0O1xufSIsImltcG9ydCB7XG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG52YXIgTUFSS0VSX0RSQUdHSU5HID0gJ2Rqcy1kcmFnZ2luZycsXG4gICAgTUFSS0VSX1JFU0laSU5HID0gJ2Rqcy1yZXNpemluZyc7XG5cbnZhciBMT1dfUFJJT1JJVFkgPSAyNTA7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY2xhc3NlcyBhcyBzdmdDbGFzc2VzLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgdHJhbnNsYXRlXG59IGZyb20gJy4uLy4uL3V0aWwvU3ZnVHJhbnNmb3JtVXRpbCc7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcblxuXG4vKipcbiAqIFByb3ZpZGVzIHByZXZpZXdzIGZvciBzZWxlY3RpbmcvbW92aW5nL3Jlc2l6aW5nIHNoYXBlcyB3aGVuIGNyZWF0aW5nL3JlbW92aW5nIHNwYWNlLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge1N0eWxlc30gc3R5bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNwYWNlVG9vbFByZXZpZXcoXG4gICAgZXZlbnRCdXMsIGVsZW1lbnRSZWdpc3RyeSwgY2FudmFzLFxuICAgIHN0eWxlcywgcHJldmlld1N1cHBvcnQpIHtcblxuICBmdW5jdGlvbiBhZGRQcmV2aWV3R2Z4KGNvbGxlY3Rpb24sIGRyYWdHcm91cCkge1xuICAgIGZvckVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcHJldmlld1N1cHBvcnQuYWRkRHJhZ2dlcihlbGVtZW50LCBkcmFnR3JvdXApO1xuXG4gICAgICBjYW52YXMuYWRkTWFya2VyKGVsZW1lbnQsIE1BUktFUl9EUkFHR0lORyk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBhZGQgY3Jvc3NoYWlyXG4gIGV2ZW50QnVzLm9uKCdzcGFjZVRvb2wuc2VsZWN0aW9uLnN0YXJ0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgc3BhY2UgPSBjYW52YXMuZ2V0TGF5ZXIoJ3NwYWNlJyksXG4gICAgICAgIGNvbnRleHQgPSBldmVudC5jb250ZXh0O1xuXG4gICAgdmFyIG9yaWVudGF0aW9uID0ge1xuICAgICAgeDogJ00gMCwtMTAwMDAgTCAwLDEwMDAwJyxcbiAgICAgIHk6ICdNIC0xMDAwMCwwIEwgMTAwMDAsMCdcbiAgICB9O1xuXG4gICAgdmFyIGNyb3NzaGFpckdyb3VwID0gc3ZnQ3JlYXRlKCdnJyk7XG4gICAgc3ZnQXR0cihjcm9zc2hhaXJHcm91cCwgc3R5bGVzLmNscygnZGpzLWNyb3NzaGFpci1ncm91cCcsIFsgJ25vLWV2ZW50cycgXSkpO1xuXG4gICAgc3ZnQXBwZW5kKHNwYWNlLCBjcm9zc2hhaXJHcm91cCk7XG5cbiAgICAvLyBob3Jpem9udGFsIHBhdGhcbiAgICB2YXIgcGF0aFggPSBzdmdDcmVhdGUoJ3BhdGgnKTtcbiAgICBzdmdBdHRyKHBhdGhYLCAnZCcsIG9yaWVudGF0aW9uLngpO1xuICAgIHN2Z0NsYXNzZXMocGF0aFgpLmFkZCgnZGpzLWNyb3NzaGFpcicpO1xuXG4gICAgc3ZnQXBwZW5kKGNyb3NzaGFpckdyb3VwLCBwYXRoWCk7XG5cbiAgICAvLyB2ZXJ0aWNhbCBwYXRoXG4gICAgdmFyIHBhdGhZID0gc3ZnQ3JlYXRlKCdwYXRoJyk7XG4gICAgc3ZnQXR0cihwYXRoWSwgJ2QnLCBvcmllbnRhdGlvbi55KTtcbiAgICBzdmdDbGFzc2VzKHBhdGhZKS5hZGQoJ2Rqcy1jcm9zc2hhaXInKTtcblxuICAgIHN2Z0FwcGVuZChjcm9zc2hhaXJHcm91cCwgcGF0aFkpO1xuXG4gICAgY29udGV4dC5jcm9zc2hhaXJHcm91cCA9IGNyb3NzaGFpckdyb3VwO1xuICB9KTtcblxuICAvLyB1cGRhdGUgY3Jvc3NoYWlyXG4gIGV2ZW50QnVzLm9uKCdzcGFjZVRvb2wuc2VsZWN0aW9uLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjcm9zc2hhaXJHcm91cCA9IGV2ZW50LmNvbnRleHQuY3Jvc3NoYWlyR3JvdXA7XG5cbiAgICB0cmFuc2xhdGUoY3Jvc3NoYWlyR3JvdXAsIGV2ZW50LngsIGV2ZW50LnkpO1xuICB9KTtcblxuICAvLyByZW1vdmUgY3Jvc3NoYWlyXG4gIGV2ZW50QnVzLm9uKCdzcGFjZVRvb2wuc2VsZWN0aW9uLmNsZWFudXAnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY3Jvc3NoYWlyR3JvdXAgPSBjb250ZXh0LmNyb3NzaGFpckdyb3VwO1xuXG4gICAgaWYgKGNyb3NzaGFpckdyb3VwKSB7XG4gICAgICBzdmdSZW1vdmUoY3Jvc3NoYWlyR3JvdXApO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gYWRkIGFuZCB1cGRhdGUgbW92ZS9yZXNpemUgcHJldmlld3NcbiAgZXZlbnRCdXMub24oJ3NwYWNlVG9vbC5tb3ZlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBsaW5lID0gY29udGV4dC5saW5lLFxuICAgICAgICBheGlzID0gY29udGV4dC5heGlzLFxuICAgICAgICBtb3ZpbmdTaGFwZXMgPSBjb250ZXh0Lm1vdmluZ1NoYXBlcyxcbiAgICAgICAgcmVzaXppbmdTaGFwZXMgPSBjb250ZXh0LnJlc2l6aW5nU2hhcGVzO1xuXG4gICAgaWYgKCFjb250ZXh0LmluaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjb250ZXh0LmRyYWdHcm91cCkge1xuICAgICAgdmFyIHNwYWNlTGF5ZXIgPSBjYW52YXMuZ2V0TGF5ZXIoJ3NwYWNlJyk7XG5cbiAgICAgIGxpbmUgPSBzdmdDcmVhdGUoJ3BhdGgnKTtcbiAgICAgIHN2Z0F0dHIobGluZSwgJ2QnLCAnTTAsMCBMMCwwJyk7XG4gICAgICBzdmdDbGFzc2VzKGxpbmUpLmFkZCgnZGpzLWNyb3NzaGFpcicpO1xuXG4gICAgICBzdmdBcHBlbmQoc3BhY2VMYXllciwgbGluZSk7XG5cbiAgICAgIGNvbnRleHQubGluZSA9IGxpbmU7XG5cbiAgICAgIHZhciBkcmFnR3JvdXAgPSBzdmdDcmVhdGUoJ2cnKTtcbiAgICAgIHN2Z0F0dHIoZHJhZ0dyb3VwLCBzdHlsZXMuY2xzKCdkanMtZHJhZy1ncm91cCcsIFsgJ25vLWV2ZW50cycgXSkpO1xuXG4gICAgICBzdmdBcHBlbmQoY2FudmFzLmdldERlZmF1bHRMYXllcigpLCBkcmFnR3JvdXApO1xuXG4gICAgICAvLyBzaGFwZXNcbiAgICAgIGFkZFByZXZpZXdHZngobW92aW5nU2hhcGVzLCBkcmFnR3JvdXApO1xuXG4gICAgICAvLyBjb25uZWN0aW9uc1xuICAgICAgdmFyIG1vdmluZ0Nvbm5lY3Rpb25zID0gY29udGV4dC5tb3ZpbmdDb25uZWN0aW9ucyA9IGVsZW1lbnRSZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICB2YXIgc291cmNlSXNNb3ZpbmcgPSBmYWxzZTtcblxuICAgICAgICBmb3JFYWNoKG1vdmluZ1NoYXBlcywgZnVuY3Rpb24oc2hhcGUpIHtcbiAgICAgICAgICBmb3JFYWNoKHNoYXBlLm91dGdvaW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gY29ubmVjdGlvbikge1xuICAgICAgICAgICAgICBzb3VyY2VJc01vdmluZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciB0YXJnZXRJc01vdmluZyA9IGZhbHNlO1xuXG4gICAgICAgIGZvckVhY2gobW92aW5nU2hhcGVzLCBmdW5jdGlvbihzaGFwZSkge1xuICAgICAgICAgIGZvckVhY2goc2hhcGUuaW5jb21pbmcsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50ID09PSBjb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgIHRhcmdldElzTW92aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIHNvdXJjZUlzUmVzaXppbmcgPSBmYWxzZTtcblxuICAgICAgICBmb3JFYWNoKHJlc2l6aW5nU2hhcGVzLCBmdW5jdGlvbihzaGFwZSkge1xuICAgICAgICAgIGZvckVhY2goc2hhcGUub3V0Z29pbmcsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50ID09PSBjb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgIHNvdXJjZUlzUmVzaXppbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgdGFyZ2V0SXNSZXNpemluZyA9IGZhbHNlO1xuXG4gICAgICAgIGZvckVhY2gocmVzaXppbmdTaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICAgICAgZm9yRWFjaChzaGFwZS5pbmNvbWluZywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT09IGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgdGFyZ2V0SXNSZXNpemluZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBpc0Nvbm5lY3Rpb24oZWxlbWVudClcbiAgICAgICAgICAmJiAoc291cmNlSXNNb3ZpbmcgfHwgc291cmNlSXNSZXNpemluZylcbiAgICAgICAgICAmJiAodGFyZ2V0SXNNb3ZpbmcgfHwgdGFyZ2V0SXNSZXNpemluZyk7XG4gICAgICB9KTtcblxuXG4gICAgICBhZGRQcmV2aWV3R2Z4KG1vdmluZ0Nvbm5lY3Rpb25zLCBkcmFnR3JvdXApO1xuXG4gICAgICBjb250ZXh0LmRyYWdHcm91cCA9IGRyYWdHcm91cDtcbiAgICB9XG5cbiAgICBpZiAoIWNvbnRleHQuZnJhbWVHcm91cCkge1xuICAgICAgdmFyIGZyYW1lR3JvdXAgPSBzdmdDcmVhdGUoJ2cnKTtcbiAgICAgIHN2Z0F0dHIoZnJhbWVHcm91cCwgc3R5bGVzLmNscygnZGpzLWZyYW1lLWdyb3VwJywgWyAnbm8tZXZlbnRzJyBdKSk7XG5cbiAgICAgIHN2Z0FwcGVuZChjYW52YXMuZ2V0RGVmYXVsdExheWVyKCksIGZyYW1lR3JvdXApO1xuXG4gICAgICB2YXIgZnJhbWVzID0gW107XG5cbiAgICAgIGZvckVhY2gocmVzaXppbmdTaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICAgIHZhciBmcmFtZSA9IHByZXZpZXdTdXBwb3J0LmFkZEZyYW1lKHNoYXBlLCBmcmFtZUdyb3VwKTtcblxuICAgICAgICB2YXIgaW5pdGlhbEJvdW5kcyA9IGZyYW1lLmdldEJCb3goKTtcblxuICAgICAgICBmcmFtZXMucHVzaCh7XG4gICAgICAgICAgZWxlbWVudDogZnJhbWUsXG4gICAgICAgICAgaW5pdGlhbEJvdW5kczogaW5pdGlhbEJvdW5kc1xuICAgICAgICB9KTtcblxuICAgICAgICBjYW52YXMuYWRkTWFya2VyKHNoYXBlLCBNQVJLRVJfUkVTSVpJTkcpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnRleHQuZnJhbWVHcm91cCA9IGZyYW1lR3JvdXA7XG4gICAgICBjb250ZXh0LmZyYW1lcyA9IGZyYW1lcztcbiAgICB9XG5cbiAgICB2YXIgb3JpZW50YXRpb24gPSB7XG4gICAgICB4OiAnTScgKyBldmVudC54ICsgJywgLTEwMDAwIEwnICsgZXZlbnQueCArICcsIDEwMDAwJyxcbiAgICAgIHk6ICdNIC0xMDAwMCwgJyArIGV2ZW50LnkgKyAnIEwgMTAwMDAsICcgKyBldmVudC55XG4gICAgfTtcblxuICAgIHN2Z0F0dHIobGluZSwgeyBkOiBvcmllbnRhdGlvblsgYXhpcyBdIH0pO1xuXG4gICAgdmFyIG9wcG9zaXRlID0geyB4OiAneScsIHk6ICd4JyB9O1xuICAgIHZhciBkZWx0YSA9IHsgeDogZXZlbnQuZHgsIHk6IGV2ZW50LmR5IH07XG4gICAgZGVsdGFbIG9wcG9zaXRlWyBjb250ZXh0LmF4aXMgXSBdID0gMDtcblxuICAgIC8vIHVwZGF0ZSBtb3ZlIHByZXZpZXdzXG4gICAgdHJhbnNsYXRlKGNvbnRleHQuZHJhZ0dyb3VwLCBkZWx0YS54LCBkZWx0YS55KTtcblxuICAgIC8vIHVwZGF0ZSByZXNpemUgcHJldmlld3NcbiAgICBmb3JFYWNoKGNvbnRleHQuZnJhbWVzLCBmdW5jdGlvbihmcmFtZSkge1xuICAgICAgdmFyIGVsZW1lbnQgPSBmcmFtZS5lbGVtZW50LFxuICAgICAgICAgIGluaXRpYWxCb3VuZHMgPSBmcmFtZS5pbml0aWFsQm91bmRzLFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGhlaWdodDtcblxuICAgICAgaWYgKGNvbnRleHQuZGlyZWN0aW9uID09PSAnZScpIHtcbiAgICAgICAgc3ZnQXR0cihlbGVtZW50LCB7XG4gICAgICAgICAgd2lkdGg6IG1heChpbml0aWFsQm91bmRzLndpZHRoICsgZGVsdGEueCwgNSlcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aWR0aCA9IG1heChpbml0aWFsQm91bmRzLndpZHRoIC0gZGVsdGEueCwgNSk7XG5cbiAgICAgICAgc3ZnQXR0cihlbGVtZW50LCB7XG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIHg6IGluaXRpYWxCb3VuZHMueCArIGluaXRpYWxCb3VuZHMud2lkdGggLSB3aWR0aFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnRleHQuZGlyZWN0aW9uID09PSAncycpIHtcbiAgICAgICAgc3ZnQXR0cihlbGVtZW50LCB7XG4gICAgICAgICAgaGVpZ2h0OiBtYXgoaW5pdGlhbEJvdW5kcy5oZWlnaHQgKyBkZWx0YS55LCA1KVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlaWdodCA9IG1heChpbml0aWFsQm91bmRzLmhlaWdodCAtIGRlbHRhLnksIDUpO1xuXG4gICAgICAgIHN2Z0F0dHIoZWxlbWVudCwge1xuICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgIHk6IGluaXRpYWxCb3VuZHMueSArIGluaXRpYWxCb3VuZHMuaGVpZ2h0IC0gaGVpZ2h0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIH0pO1xuXG4gIC8vIHJlbW92ZSBtb3ZlL3Jlc2l6ZSBwcmV2aWV3c1xuICBldmVudEJ1cy5vbignc3BhY2VUb29sLmNsZWFudXAnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBtb3ZpbmdTaGFwZXMgPSBjb250ZXh0Lm1vdmluZ1NoYXBlcyxcbiAgICAgICAgbW92aW5nQ29ubmVjdGlvbnMgPSBjb250ZXh0Lm1vdmluZ0Nvbm5lY3Rpb25zLFxuICAgICAgICByZXNpemluZ1NoYXBlcyA9IGNvbnRleHQucmVzaXppbmdTaGFwZXMsXG4gICAgICAgIGxpbmUgPSBjb250ZXh0LmxpbmUsXG4gICAgICAgIGRyYWdHcm91cCA9IGNvbnRleHQuZHJhZ0dyb3VwLFxuICAgICAgICBmcmFtZUdyb3VwID0gY29udGV4dC5mcmFtZUdyb3VwO1xuXG4gICAgLy8gbW92aW5nIHNoYXBlc1xuICAgIGZvckVhY2gobW92aW5nU2hhcGVzLCBmdW5jdGlvbihzaGFwZSkge1xuICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihzaGFwZSwgTUFSS0VSX0RSQUdHSU5HKTtcbiAgICB9KTtcblxuICAgIC8vIG1vdmluZyBjb25uZWN0aW9uc1xuICAgIGZvckVhY2gobW92aW5nQ29ubmVjdGlvbnMsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoY29ubmVjdGlvbiwgTUFSS0VSX0RSQUdHSU5HKTtcbiAgICB9KTtcblxuICAgIGlmIChkcmFnR3JvdXApIHtcbiAgICAgIHN2Z1JlbW92ZShsaW5lKTtcbiAgICAgIHN2Z1JlbW92ZShkcmFnR3JvdXApO1xuICAgIH1cblxuICAgIGZvckVhY2gocmVzaXppbmdTaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICBjYW52YXMucmVtb3ZlTWFya2VyKHNoYXBlLCBNQVJLRVJfUkVTSVpJTkcpO1xuICAgIH0pO1xuXG4gICAgaWYgKGZyYW1lR3JvdXApIHtcbiAgICAgIHN2Z1JlbW92ZShmcmFtZUdyb3VwKTtcbiAgICB9XG4gIH0pO1xufVxuXG5TcGFjZVRvb2xQcmV2aWV3LiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdlbGVtZW50UmVnaXN0cnknLFxuICAnY2FudmFzJyxcbiAgJ3N0eWxlcycsXG4gICdwcmV2aWV3U3VwcG9ydCdcbl07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQ2hlY2tzIGlmIGFuIGVsZW1lbnQgaXMgYSBjb25uZWN0aW9uLlxuICovXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC53YXlwb2ludHM7XG59XG4iLCJpbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnbWluLWRhc2gnO1xuXG4vKipcbiAqIFJldHVybiBkaXJlY3Rpb24gZ2l2ZW4gYXhpcyBhbmQgZGVsdGEuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGF4aXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpcmVjdGlvbihheGlzLCBkZWx0YSkge1xuXG4gIGlmIChheGlzID09PSAneCcpIHtcbiAgICBpZiAoZGVsdGEgPiAwKSB7XG4gICAgICByZXR1cm4gJ2UnO1xuICAgIH1cblxuICAgIGlmIChkZWx0YSA8IDApIHtcbiAgICAgIHJldHVybiAndyc7XG4gICAgfVxuICB9XG5cbiAgaWYgKGF4aXMgPT09ICd5Jykge1xuICAgIGlmIChkZWx0YSA+IDApIHtcbiAgICAgIHJldHVybiAncyc7XG4gICAgfVxuXG4gICAgaWYgKGRlbHRhIDwgMCkge1xuICAgICAgcmV0dXJuICduJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGNvbm5lY3Rpb25zIHdob3NlIHdheXBvaW50cyBhcmUgdG8gYmUgdXBkYXRlZC4gV2F5cG9pbnRzIGFyZSB0byBiZSB1cGRhdGVkIGlmIHN0YXJ0XG4gKiBvciBlbmQgaXMgdG8gYmUgbW92ZWQgb3IgcmVzaXplZC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5TaGFwZX0gbW92aW5nU2hhcGVzXG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5TaGFwZX0gcmVzaXppbmdTaGFwZXNcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8ZGpzLm1vZGVsLkNvbm5lY3Rpb24+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2F5cG9pbnRzVXBkYXRpbmdDb25uZWN0aW9ucyhtb3ZpbmdTaGFwZXMsIHJlc2l6aW5nU2hhcGVzKSB7XG4gIHZhciB3YXlwb2ludHNVcGRhdGluZ0Nvbm5lY3Rpb25zID0gW107XG5cbiAgZm9yRWFjaChtb3ZpbmdTaGFwZXMuY29uY2F0KHJlc2l6aW5nU2hhcGVzKSwgZnVuY3Rpb24oc2hhcGUpIHtcbiAgICB2YXIgaW5jb21pbmcgPSBzaGFwZS5pbmNvbWluZyxcbiAgICAgICAgb3V0Z29pbmcgPSBzaGFwZS5vdXRnb2luZztcblxuICAgIGZvckVhY2goaW5jb21pbmcuY29uY2F0KG91dGdvaW5nKSwgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgICAgdmFyIHNvdXJjZSA9IGNvbm5lY3Rpb24uc291cmNlLFxuICAgICAgICAgIHRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0O1xuXG4gICAgICBpZiAoaW5jbHVkZXMobW92aW5nU2hhcGVzLCBzb3VyY2UpIHx8XG4gICAgICAgIGluY2x1ZGVzKG1vdmluZ1NoYXBlcywgdGFyZ2V0KSB8fFxuICAgICAgICBpbmNsdWRlcyhyZXNpemluZ1NoYXBlcywgc291cmNlKSB8fFxuICAgICAgICBpbmNsdWRlcyhyZXNpemluZ1NoYXBlcywgdGFyZ2V0KSkge1xuXG4gICAgICAgIGlmICghaW5jbHVkZXMod2F5cG9pbnRzVXBkYXRpbmdDb25uZWN0aW9ucywgY29ubmVjdGlvbikpIHtcbiAgICAgICAgICB3YXlwb2ludHNVcGRhdGluZ0Nvbm5lY3Rpb25zLnB1c2goY29ubmVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHdheXBvaW50c1VwZGF0aW5nQ29ubmVjdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCBpdGVtKSB7XG4gIHJldHVybiBhcnJheS5pbmRleE9mKGl0ZW0pICE9PSAtMTtcbn1cblxuLyoqXG4gKiBSZXNpemUgYm91bmRzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBib3VuZHNcbiAqIEBwYXJhbSB7bnVtYmVyfSBib3VuZHMueFxuICogQHBhcmFtIHtudW1iZXJ9IGJvdW5kcy55XG4gKiBAcGFyYW0ge251bWJlcn0gYm91bmRzLndpZHRoXG4gKiBAcGFyYW0ge251bWJlcn0gYm91bmRzLmhlaWdodFxuICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGRlbHRhXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsdGEueFxuICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhLnlcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNpemVCb3VuZHMoYm91bmRzLCBkaXJlY3Rpb24sIGRlbHRhKSB7XG4gIHZhciB4ID0gYm91bmRzLngsXG4gICAgICB5ID0gYm91bmRzLnksXG4gICAgICB3aWR0aCA9IGJvdW5kcy53aWR0aCxcbiAgICAgIGhlaWdodCA9IGJvdW5kcy5oZWlnaHQsXG4gICAgICBkeCA9IGRlbHRhLngsXG4gICAgICBkeSA9IGRlbHRhLnk7XG5cbiAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgY2FzZSAnbic6XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHgsXG4gICAgICB5OiB5ICsgZHksXG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGhlaWdodCAtIGR5XG4gICAgfTtcbiAgY2FzZSAncyc6XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHgsXG4gICAgICB5OiB5LFxuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgaGVpZ2h0OiBoZWlnaHQgKyBkeVxuICAgIH07XG4gIGNhc2UgJ3cnOlxuICAgIHJldHVybiB7XG4gICAgICB4OiB4ICsgZHgsXG4gICAgICB5OiB5LFxuICAgICAgd2lkdGg6IHdpZHRoIC0gZHgsXG4gICAgICBoZWlnaHQ6IGhlaWdodFxuICAgIH07XG4gIGNhc2UgJ2UnOlxuICAgIHJldHVybiB7XG4gICAgICB4OiB4LFxuICAgICAgeTogeSxcbiAgICAgIHdpZHRoOiB3aWR0aCArIGR4LFxuICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICB9O1xuICBkZWZhdWx0OlxuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBkaXJlY3Rpb246ICcgKyBkaXJlY3Rpb24pO1xuICB9XG59IiwiaW1wb3J0IERyYWdnaW5nTW9kdWxlIGZyb20gJy4uL2RyYWdnaW5nJztcbmltcG9ydCBSdWxlc01vZHVsZSBmcm9tICcuLi9ydWxlcyc7XG5pbXBvcnQgVG9vbE1hbmFnZXJNb2R1bGUgZnJvbSAnLi4vdG9vbC1tYW5hZ2VyJztcbmltcG9ydCBQcmV2aWV3U3VwcG9ydE1vZHVsZSBmcm9tICcuLi9wcmV2aWV3LXN1cHBvcnQnO1xuXG5pbXBvcnQgU3BhY2VUb29sIGZyb20gJy4vU3BhY2VUb29sJztcbmltcG9ydCBTcGFjZVRvb2xQcmV2aWV3IGZyb20gJy4vU3BhY2VUb29sUHJldmlldyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsnc3BhY2VUb29sUHJldmlldyddLFxuICBfX2RlcGVuZHNfXzogW1xuICAgIERyYWdnaW5nTW9kdWxlLFxuICAgIFJ1bGVzTW9kdWxlLFxuICAgIFRvb2xNYW5hZ2VyTW9kdWxlLFxuICAgIFByZXZpZXdTdXBwb3J0TW9kdWxlXG4gIF0sXG4gIHNwYWNlVG9vbDogWyd0eXBlJywgU3BhY2VUb29sIF0sXG4gIHNwYWNlVG9vbFByZXZpZXc6IFsndHlwZScsIFNwYWNlVG9vbFByZXZpZXcgXVxufTtcbiIsImltcG9ydCB7XG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBjbG9zZXN0IGFzIGRvbUNsb3Nlc3Rcbn0gZnJvbSAnbWluLWRvbSc7XG5cbnZhciBMT1dfUFJJT1JJVFkgPSAyNTA7XG5cbi8qKlxuICogVGhlIHRvb2wgbWFuYWdlciBhY3RzIGFzIG1pZGRsZS1tYW4gYmV0d2VlbiB0aGUgYXZhaWxhYmxlIHRvb2wncyBhbmQgdGhlIFBhbGV0dGUsXG4gKiBpdCB0YWtlcyBjYXJlIG9mIG1ha2luZyBzdXJlIHRoYXQgdGhlIGNvcnJlY3QgYWN0aXZlIHN0YXRlIGlzIHNldC5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgIGV2ZW50QnVzXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgIGRyYWdnaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRvb2xNYW5hZ2VyKGV2ZW50QnVzLCBkcmFnZ2luZykge1xuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB0aGlzLl9kcmFnZ2luZyA9IGRyYWdnaW5nO1xuXG4gIHRoaXMuX3Rvb2xzID0gW107XG4gIHRoaXMuX2FjdGl2ZSA9IG51bGw7XG59XG5cblRvb2xNYW5hZ2VyLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdkcmFnZ2luZycgXTtcblxuVG9vbE1hbmFnZXIucHJvdG90eXBlLnJlZ2lzdGVyVG9vbCA9IGZ1bmN0aW9uKG5hbWUsIGV2ZW50cykge1xuICB2YXIgdG9vbHMgPSB0aGlzLl90b29scztcblxuICBpZiAoIWV2ZW50cykge1xuICAgIHRocm93IG5ldyBFcnJvcignQSB0b29sIGhhcyB0byBiZSByZWdpc3RlcmVkIHdpdGggaXRcXCdzIFwiZXZlbnRzXCInKTtcbiAgfVxuXG4gIHRvb2xzLnB1c2gobmFtZSk7XG5cbiAgdGhpcy5iaW5kRXZlbnRzKG5hbWUsIGV2ZW50cyk7XG59O1xuXG5Ub29sTWFuYWdlci5wcm90b3R5cGUuaXNBY3RpdmUgPSBmdW5jdGlvbih0b29sKSB7XG4gIHJldHVybiB0b29sICYmIHRoaXMuX2FjdGl2ZSA9PT0gdG9vbDtcbn07XG5cblRvb2xNYW5hZ2VyLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbih0b29sKSB7XG4gIHJldHVybiB0aGlzLl90b29scy5sZW5ndGg7XG59O1xuXG5Ub29sTWFuYWdlci5wcm90b3R5cGUuc2V0QWN0aXZlID0gZnVuY3Rpb24odG9vbCkge1xuICB2YXIgZXZlbnRCdXMgPSB0aGlzLl9ldmVudEJ1cztcblxuICBpZiAodGhpcy5fYWN0aXZlICE9PSB0b29sKSB7XG4gICAgdGhpcy5fYWN0aXZlID0gdG9vbDtcblxuICAgIGV2ZW50QnVzLmZpcmUoJ3Rvb2wtbWFuYWdlci51cGRhdGUnLCB7IHRvb2w6IHRvb2wgfSk7XG4gIH1cbn07XG5cblRvb2xNYW5hZ2VyLnByb3RvdHlwZS5iaW5kRXZlbnRzID0gZnVuY3Rpb24obmFtZSwgZXZlbnRzKSB7XG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzLFxuICAgICAgZHJhZ2dpbmcgPSB0aGlzLl9kcmFnZ2luZztcblxuICB2YXIgZXZlbnRzVG9SZWdpc3RlciA9IFtdO1xuXG4gIGV2ZW50QnVzLm9uKGV2ZW50cy50b29sICsgJy5pbml0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQ7XG5cbiAgICAvLyBBY3RpdmUgdG9vbHMgdGhhdCB3YW50IHRvIHJlYWN0aXZhdGUgdGhlbXNlbHZlcyBtdXN0IGRvIHRoaXMgZXhwbGljaXRseVxuICAgIGlmICghY29udGV4dC5yZWFjdGl2YXRlICYmIHRoaXMuaXNBY3RpdmUobmFtZSkpIHtcbiAgICAgIHRoaXMuc2V0QWN0aXZlKG51bGwpO1xuXG4gICAgICBkcmFnZ2luZy5jYW5jZWwoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldEFjdGl2ZShuYW1lKTtcblxuICB9LCB0aGlzKTtcblxuICAvLyBUb2RvW3JpY2FyZG9dOiBhZGQgdGVzdCBjYXNlc1xuICBmb3JFYWNoKGV2ZW50cywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBldmVudHNUb1JlZ2lzdGVyLnB1c2goZXZlbnQgKyAnLmVuZGVkJyk7XG4gICAgZXZlbnRzVG9SZWdpc3Rlci5wdXNoKGV2ZW50ICsgJy5jYW5jZWxlZCcpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbihldmVudHNUb1JlZ2lzdGVyLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIG9yaWdpbmFsRXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50O1xuXG4gICAgLy8gV2UgZGVmZXIgdGhlIGRlLWFjdGl2YXRpb24gb2YgdGhlIHRvb2wgdG8gdGhlIC5hY3RpdmF0ZSBwaGFzZSxcbiAgICAvLyBzbyB3ZSdyZSBhYmxlIHRvIGNoZWNrIGlmIHdlIHdhbnQgdG8gdG9nZ2xlIG9mZiB0aGUgY3VycmVudFxuICAgIC8vIGFjdGl2ZSB0b29sIG9yIHN3aXRjaCB0byBhIG5ldyBvbmVcbiAgICBpZiAoIXRoaXMuX2FjdGl2ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcmlnaW5hbEV2ZW50ICYmIGRvbUNsb3Nlc3Qob3JpZ2luYWxFdmVudC50YXJnZXQsICcuZ3JvdXBbZGF0YS1ncm91cD1cInRvb2xzXCJdJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldEFjdGl2ZShudWxsKTtcbiAgfSwgdGhpcyk7XG59O1xuIiwiaW1wb3J0IERyYWdnaW5nTW9kdWxlIGZyb20gJy4uL2RyYWdnaW5nJztcblxuaW1wb3J0IFRvb2xNYW5hZ2VyIGZyb20gJy4vVG9vbE1hbmFnZXInO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgRHJhZ2dpbmdNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFsgJ3Rvb2xNYW5hZ2VyJyBdLFxuICB0b29sTWFuYWdlcjogWyAndHlwZScsIFRvb2xNYW5hZ2VyIF1cbn07XG4iLCJpbXBvcnQge1xuICBpc1N0cmluZyxcbiAgYXNzaWduLFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZG9taWZ5LFxuICBhdHRyIGFzIGRvbUF0dHIsXG4gIGNsYXNzZXMgYXMgZG9tQ2xhc3NlcyxcbiAgcmVtb3ZlIGFzIGRvbVJlbW92ZSxcbiAgZGVsZWdhdGUgYXMgZG9tRGVsZWdhdGVcbn0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCBJZHMgZnJvbSAnLi4vLi4vdXRpbC9JZEdlbmVyYXRvcic7XG5cbi8vIGRvY3VtZW50IHdpZGUgdW5pcXVlIHRvb2x0aXAgaWRzXG52YXIgaWRzID0gbmV3IElkcygndHQnKTtcblxuXG5mdW5jdGlvbiBjcmVhdGVSb290KHBhcmVudE5vZGUpIHtcbiAgdmFyIHJvb3QgPSBkb21pZnkoXG4gICAgJzxkaXYgY2xhc3M9XCJkanMtdG9vbHRpcC1jb250YWluZXJcIiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgd2lkdGg6IDA7IGhlaWdodDogMDtcIiAvPidcbiAgKTtcblxuICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShyb290LCBwYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xuXG4gIHJldHVybiByb290O1xufVxuXG5cbmZ1bmN0aW9uIHNldFBvc2l0aW9uKGVsLCB4LCB5KSB7XG4gIGFzc2lnbihlbC5zdHlsZSwgeyBsZWZ0OiB4ICsgJ3B4JywgdG9wOiB5ICsgJ3B4JyB9KTtcbn1cblxuZnVuY3Rpb24gc2V0VmlzaWJsZShlbCwgdmlzaWJsZSkge1xuICBlbC5zdHlsZS5kaXNwbGF5ID0gdmlzaWJsZSA9PT0gZmFsc2UgPyAnbm9uZScgOiAnJztcbn1cblxuXG52YXIgdG9vbHRpcENsYXNzID0gJ2Rqcy10b29sdGlwJyxcbiAgICB0b29sdGlwU2VsZWN0b3IgPSAnLicgKyB0b29sdGlwQ2xhc3M7XG5cbi8qKlxuICogQSBzZXJ2aWNlIHRoYXQgYWxsb3dzIHVzZXJzIHRvIHJlbmRlciB0b29sIHRpcHMgb24gdGhlIGRpYWdyYW0uXG4gKlxuICogVGhlIHRvb2x0aXAgc2VydmljZSB3aWxsIHRha2UgY2FyZSBvZiB1cGRhdGluZyB0aGUgdG9vbHRpcCBwb3NpdGlvbmluZ1xuICogZHVyaW5nIG5hdmlnYXRpb24gKyB6b29taW5nLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICpcbiAqIC8vIGFkZCBhIHBpbmsgYmFkZ2Ugb24gdGhlIHRvcCBsZWZ0IG9mIHRoZSBzaGFwZVxuICogdG9vbHRpcHMuYWRkKHtcbiAqICAgcG9zaXRpb246IHtcbiAqICAgICB4OiA1MCxcbiAqICAgICB5OiAxMDBcbiAqICAgfSxcbiAqICAgaHRtbDogJzxkaXYgc3R5bGU9XCJ3aWR0aDogMTBweDsgYmFja2dyb3VuZDogZnVjaHNpYTsgY29sb3I6IHdoaXRlO1wiPjA8L2Rpdj4nXG4gKiB9KTtcbiAqXG4gKiAvLyBvciB3aXRoIG9wdGlvbmFsIGxpZmUgc3BhblxuICogdG9vbHRpcHMuYWRkKHtcbiAqICAgcG9zaXRpb246IHtcbiAqICAgICB0b3A6IC01LFxuICogICAgIGxlZnQ6IC01XG4gKiAgIH0sXG4gKiAgIGh0bWw6ICc8ZGl2IHN0eWxlPVwid2lkdGg6IDEwcHg7IGJhY2tncm91bmQ6IGZ1Y2hzaWE7IGNvbG9yOiB3aGl0ZTtcIj4wPC9kaXY+JyxcbiAqICAgdHRsOiAyMDAwXG4gKiB9KTtcbiAqXG4gKiAvLyByZW1vdmUgYSB0b29sIHRpcFxuICogdmFyIGlkID0gdG9vbHRpcHMuYWRkKC4uLik7XG4gKiB0b29sdGlwcy5yZW1vdmUoaWQpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVG9vbHRpcHMoZXZlbnRCdXMsIGNhbnZhcykge1xuXG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcblxuICB0aGlzLl9pZHMgPSBpZHM7XG5cbiAgdGhpcy5fdG9vbHRpcERlZmF1bHRzID0ge1xuICAgIHNob3c6IHtcbiAgICAgIG1pblpvb206IDAuNyxcbiAgICAgIG1heFpvb206IDUuMFxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogTWFwcGluZyB0b29sdGlwSWQgLT4gdG9vbHRpcFxuICAgKi9cbiAgdGhpcy5fdG9vbHRpcHMgPSB7fTtcblxuICAvLyByb290IGh0bWwgZWxlbWVudCBmb3IgYWxsIHRvb2x0aXBzXG4gIHRoaXMuX3Rvb2x0aXBSb290ID0gY3JlYXRlUm9vdChjYW52YXMuZ2V0Q29udGFpbmVyKCkpO1xuXG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGRvbURlbGVnYXRlLmJpbmQodGhpcy5fdG9vbHRpcFJvb3QsIHRvb2x0aXBTZWxlY3RvciwgJ21vdXNlZG93bicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH0pO1xuXG4gIGRvbURlbGVnYXRlLmJpbmQodGhpcy5fdG9vbHRpcFJvb3QsIHRvb2x0aXBTZWxlY3RvciwgJ21vdXNlb3ZlcicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgc2VsZi50cmlnZ2VyKCdtb3VzZW92ZXInLCBldmVudCk7XG4gIH0pO1xuXG4gIGRvbURlbGVnYXRlLmJpbmQodGhpcy5fdG9vbHRpcFJvb3QsIHRvb2x0aXBTZWxlY3RvciwgJ21vdXNlb3V0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBzZWxmLnRyaWdnZXIoJ21vdXNlb3V0JywgZXZlbnQpO1xuICB9KTtcblxuICB0aGlzLl9pbml0KCk7XG59XG5cblxuVG9vbHRpcHMuJGluamVjdCA9IFsgJ2V2ZW50QnVzJywgJ2NhbnZhcycgXTtcblxuXG4vKipcbiAqIEFkZHMgYSBIVE1MIHRvb2x0aXAgdG8gdGhlIGRpYWdyYW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgICAgICB0b29sdGlwICAgdGhlIHRvb2x0aXAgY29uZmlndXJhdGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfERPTUVsZW1lbnR9ICAgIHRvb2x0aXAuaHRtbCAgICAgICAgICAgICAgICAgaHRtbCBlbGVtZW50IHRvIHVzZSBhcyBhbiB0b29sdGlwXG4gKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgICAgICBbdG9vbHRpcC5zaG93XSAgICAgICAgICAgICAgIHNob3cgY29uZmlndXJhdGlvblxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgICAgICAgICAgW3Rvb2x0aXAuc2hvdy5taW5ab29tXSAgICAgICBtaW5pbWFsIHpvb20gbGV2ZWwgdG8gc2hvdyB0aGUgdG9vbHRpcFxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgICAgICAgICAgW3Rvb2x0aXAuc2hvdy5tYXhab29tXSAgICAgICBtYXhpbXVtIHpvb20gbGV2ZWwgdG8gc2hvdyB0aGUgdG9vbHRpcFxuICogQHBhcmFtIHtPYmplY3R9ICAgICAgICAgICAgICAgdG9vbHRpcC5wb3NpdGlvbiAgICAgICAgICAgICB3aGVyZSB0byBhdHRhY2ggdGhlIHRvb2x0aXBcbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgIFt0b29sdGlwLnBvc2l0aW9uLmxlZnRdICAgICAgcmVsYXRpdmUgdG8gZWxlbWVudCBiYm94IGxlZnQgYXR0YWNobWVudFxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgICAgICAgICAgW3Rvb2x0aXAucG9zaXRpb24udG9wXSAgICAgICByZWxhdGl2ZSB0byBlbGVtZW50IGJib3ggdG9wIGF0dGFjaG1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgIFt0b29sdGlwLnBvc2l0aW9uLmJvdHRvbV0gICAgcmVsYXRpdmUgdG8gZWxlbWVudCBiYm94IGJvdHRvbSBhdHRhY2htZW50XG4gKiBAcGFyYW0ge251bWJlcn0gICAgICAgICAgICAgICBbdG9vbHRpcC5wb3NpdGlvbi5yaWdodF0gICAgIHJlbGF0aXZlIHRvIGVsZW1lbnQgYmJveCByaWdodCBhdHRhY2htZW50XG4gKiBAcGFyYW0ge251bWJlcn0gICAgICAgICAgICAgICBbdG9vbHRpcC50aW1lb3V0PS0xXVxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgIGlkIHRoYXQgbWF5IGJlIHVzZWQgdG8gcmVmZXJlbmNlIHRoZSB0b29sdGlwIGZvciB1cGRhdGUgb3IgcmVtb3ZhbFxuICovXG5Ub29sdGlwcy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24odG9vbHRpcCkge1xuXG4gIGlmICghdG9vbHRpcC5wb3NpdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVzdCBzcGVjaWZpeSB0b29sdGlwIHBvc2l0aW9uJyk7XG4gIH1cblxuICBpZiAoIXRvb2x0aXAuaHRtbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVzdCBzcGVjaWZpeSB0b29sdGlwIGh0bWwnKTtcbiAgfVxuXG4gIHZhciBpZCA9IHRoaXMuX2lkcy5uZXh0KCk7XG5cbiAgdG9vbHRpcCA9IGFzc2lnbih7fSwgdGhpcy5fdG9vbHRpcERlZmF1bHRzLCB0b29sdGlwLCB7XG4gICAgaWQ6IGlkXG4gIH0pO1xuXG4gIHRoaXMuX2FkZFRvb2x0aXAodG9vbHRpcCk7XG5cbiAgaWYgKHRvb2x0aXAudGltZW91dCkge1xuICAgIHRoaXMuc2V0VGltZW91dCh0b29sdGlwKTtcbiAgfVxuXG4gIHJldHVybiBpZDtcbn07XG5cblRvb2x0aXBzLnByb3RvdHlwZS50cmlnZ2VyID0gZnVuY3Rpb24oYWN0aW9uLCBldmVudCkge1xuXG4gIHZhciBub2RlID0gZXZlbnQuZGVsZWdhdGVUYXJnZXQgfHwgZXZlbnQudGFyZ2V0O1xuXG4gIHZhciB0b29sdGlwID0gdGhpcy5nZXQoZG9tQXR0cihub2RlLCAnZGF0YS10b29sdGlwLWlkJykpO1xuXG4gIGlmICghdG9vbHRpcCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChhY3Rpb24gPT09ICdtb3VzZW92ZXInICYmIHRvb2x0aXAudGltZW91dCkge1xuICAgIHRoaXMuY2xlYXJUaW1lb3V0KHRvb2x0aXApO1xuICB9XG5cbiAgaWYgKGFjdGlvbiA9PT0gJ21vdXNlb3V0JyAmJiB0b29sdGlwLnRpbWVvdXQpIHtcblxuICAgIC8vIGN1dCB0aW1lb3V0IGFmdGVyIG1vdXNlIG91dFxuICAgIHRvb2x0aXAudGltZW91dCA9IDEwMDA7XG5cbiAgICB0aGlzLnNldFRpbWVvdXQodG9vbHRpcCk7XG4gIH1cbn07XG5cbi8qKlxuICogR2V0IGEgdG9vbHRpcCB3aXRoIHRoZSBnaXZlbiBpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuICovXG5Ub29sdGlwcy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oaWQpIHtcblxuICBpZiAodHlwZW9mIGlkICE9PSAnc3RyaW5nJykge1xuICAgIGlkID0gaWQuaWQ7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fdG9vbHRpcHNbaWRdO1xufTtcblxuVG9vbHRpcHMucHJvdG90eXBlLmNsZWFyVGltZW91dCA9IGZ1bmN0aW9uKHRvb2x0aXApIHtcblxuICB0b29sdGlwID0gdGhpcy5nZXQodG9vbHRpcCk7XG5cbiAgaWYgKCF0b29sdGlwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHJlbW92ZVRpbWVyID0gdG9vbHRpcC5yZW1vdmVUaW1lcjtcblxuICBpZiAocmVtb3ZlVGltZXIpIHtcbiAgICBjbGVhclRpbWVvdXQocmVtb3ZlVGltZXIpO1xuICAgIHRvb2x0aXAucmVtb3ZlVGltZXIgPSBudWxsO1xuICB9XG59O1xuXG5Ub29sdGlwcy5wcm90b3R5cGUuc2V0VGltZW91dCA9IGZ1bmN0aW9uKHRvb2x0aXApIHtcblxuICB0b29sdGlwID0gdGhpcy5nZXQodG9vbHRpcCk7XG5cbiAgaWYgKCF0b29sdGlwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5jbGVhclRpbWVvdXQodG9vbHRpcCk7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRvb2x0aXAucmVtb3ZlVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIHNlbGYucmVtb3ZlKHRvb2x0aXApO1xuICB9LCB0b29sdGlwLnRpbWVvdXQpO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gdG9vbHRpcCB3aXRoIHRoZSBnaXZlbiBpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuICovXG5Ub29sdGlwcy5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oaWQpIHtcblxuICB2YXIgdG9vbHRpcCA9IHRoaXMuZ2V0KGlkKTtcblxuICBpZiAodG9vbHRpcCkge1xuICAgIGRvbVJlbW92ZSh0b29sdGlwLmh0bWwpO1xuICAgIGRvbVJlbW92ZSh0b29sdGlwLmh0bWxDb250YWluZXIpO1xuXG4gICAgZGVsZXRlIHRvb2x0aXAuaHRtbENvbnRhaW5lcjtcblxuICAgIGRlbGV0ZSB0aGlzLl90b29sdGlwc1t0b29sdGlwLmlkXTtcbiAgfVxufTtcblxuXG5Ub29sdGlwcy5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uKCkge1xuICBzZXRWaXNpYmxlKHRoaXMuX3Rvb2x0aXBSb290KTtcbn07XG5cblxuVG9vbHRpcHMucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbigpIHtcbiAgc2V0VmlzaWJsZSh0aGlzLl90b29sdGlwUm9vdCwgZmFsc2UpO1xufTtcblxuXG5Ub29sdGlwcy5wcm90b3R5cGUuX3VwZGF0ZVJvb3QgPSBmdW5jdGlvbih2aWV3Ym94KSB7XG4gIHZhciBhID0gdmlld2JveC5zY2FsZSB8fCAxO1xuICB2YXIgZCA9IHZpZXdib3guc2NhbGUgfHwgMTtcblxuICB2YXIgbWF0cml4ID0gJ21hdHJpeCgnICsgYSArICcsMCwwLCcgKyBkICsgJywnICsgKC0xICogdmlld2JveC54ICogYSkgKyAnLCcgKyAoLTEgKiB2aWV3Ym94LnkgKiBkKSArICcpJztcblxuICB0aGlzLl90b29sdGlwUm9vdC5zdHlsZS50cmFuc2Zvcm0gPSBtYXRyaXg7XG4gIHRoaXMuX3Rvb2x0aXBSb290LnN0eWxlWyctbXMtdHJhbnNmb3JtJ10gPSBtYXRyaXg7XG59O1xuXG5cblRvb2x0aXBzLnByb3RvdHlwZS5fYWRkVG9vbHRpcCA9IGZ1bmN0aW9uKHRvb2x0aXApIHtcblxuICB2YXIgaWQgPSB0b29sdGlwLmlkLFxuICAgICAgaHRtbCA9IHRvb2x0aXAuaHRtbCxcbiAgICAgIGh0bWxDb250YWluZXIsXG4gICAgICB0b29sdGlwUm9vdCA9IHRoaXMuX3Rvb2x0aXBSb290O1xuXG4gIC8vIHVud3JhcCBqcXVlcnkgKGZvciB0aG9zZSB3aG8gbmVlZCBpdClcbiAgaWYgKGh0bWwuZ2V0ICYmIGh0bWwuY29uc3RydWN0b3IucHJvdG90eXBlLmpxdWVyeSkge1xuICAgIGh0bWwgPSBodG1sLmdldCgwKTtcbiAgfVxuXG4gIC8vIGNyZWF0ZSBwcm9wZXIgaHRtbCBlbGVtZW50cyBmcm9tXG4gIC8vIHRvb2x0aXAgSFRNTCBzdHJpbmdzXG4gIGlmIChpc1N0cmluZyhodG1sKSkge1xuICAgIGh0bWwgPSBkb21pZnkoaHRtbCk7XG4gIH1cblxuICBodG1sQ29udGFpbmVyID0gZG9taWZ5KCc8ZGl2IGRhdGEtdG9vbHRpcC1pZD1cIicgKyBpZCArICdcIiBjbGFzcz1cIicgKyB0b29sdGlwQ2xhc3MgKyAnXCIgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGVcIj4nKTtcblxuICBodG1sQ29udGFpbmVyLmFwcGVuZENoaWxkKGh0bWwpO1xuXG4gIGlmICh0b29sdGlwLnR5cGUpIHtcbiAgICBkb21DbGFzc2VzKGh0bWxDb250YWluZXIpLmFkZCgnZGpzLXRvb2x0aXAtJyArIHRvb2x0aXAudHlwZSk7XG4gIH1cblxuICBpZiAodG9vbHRpcC5jbGFzc05hbWUpIHtcbiAgICBkb21DbGFzc2VzKGh0bWxDb250YWluZXIpLmFkZCh0b29sdGlwLmNsYXNzTmFtZSk7XG4gIH1cblxuICB0b29sdGlwLmh0bWxDb250YWluZXIgPSBodG1sQ29udGFpbmVyO1xuXG4gIHRvb2x0aXBSb290LmFwcGVuZENoaWxkKGh0bWxDb250YWluZXIpO1xuXG4gIHRoaXMuX3Rvb2x0aXBzW2lkXSA9IHRvb2x0aXA7XG5cbiAgdGhpcy5fdXBkYXRlVG9vbHRpcCh0b29sdGlwKTtcbn07XG5cblxuVG9vbHRpcHMucHJvdG90eXBlLl91cGRhdGVUb29sdGlwID0gZnVuY3Rpb24odG9vbHRpcCkge1xuXG4gIHZhciBwb3NpdGlvbiA9IHRvb2x0aXAucG9zaXRpb24sXG4gICAgICBodG1sQ29udGFpbmVyID0gdG9vbHRpcC5odG1sQ29udGFpbmVyO1xuXG4gIC8vIHVwZGF0ZSBvdmVybGF5IGh0bWwgYmFzZWQgb24gdG9vbHRpcCB4LCB5XG5cbiAgc2V0UG9zaXRpb24oaHRtbENvbnRhaW5lciwgcG9zaXRpb24ueCwgcG9zaXRpb24ueSk7XG59O1xuXG5cblRvb2x0aXBzLnByb3RvdHlwZS5fdXBkYXRlVG9vbHRpcFZpc2liaWx0eSA9IGZ1bmN0aW9uKHZpZXdib3gpIHtcblxuICBmb3JFYWNoKHRoaXMuX3Rvb2x0aXBzLCBmdW5jdGlvbih0b29sdGlwKSB7XG4gICAgdmFyIHNob3cgPSB0b29sdGlwLnNob3csXG4gICAgICAgIGh0bWxDb250YWluZXIgPSB0b29sdGlwLmh0bWxDb250YWluZXIsXG4gICAgICAgIHZpc2libGUgPSB0cnVlO1xuXG4gICAgaWYgKHNob3cpIHtcbiAgICAgIGlmIChzaG93Lm1pblpvb20gPiB2aWV3Ym94LnNjYWxlIHx8XG4gICAgICAgICAgc2hvdy5tYXhab29tIDwgdmlld2JveC5zY2FsZSkge1xuICAgICAgICB2aXNpYmxlID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHNldFZpc2libGUoaHRtbENvbnRhaW5lciwgdmlzaWJsZSk7XG4gICAgfVxuICB9KTtcbn07XG5cblRvb2x0aXBzLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvLyBzY3JvbGwvem9vbSBpbnRlZ3JhdGlvblxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVZpZXdib3godmlld2JveCkge1xuICAgIHNlbGYuX3VwZGF0ZVJvb3Qodmlld2JveCk7XG4gICAgc2VsZi5fdXBkYXRlVG9vbHRpcFZpc2liaWx0eSh2aWV3Ym94KTtcblxuICAgIHNlbGYuc2hvdygpO1xuICB9XG5cbiAgdGhpcy5fZXZlbnRCdXMub24oJ2NhbnZhcy52aWV3Ym94LmNoYW5naW5nJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBzZWxmLmhpZGUoKTtcbiAgfSk7XG5cbiAgdGhpcy5fZXZlbnRCdXMub24oJ2NhbnZhcy52aWV3Ym94LmNoYW5nZWQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHVwZGF0ZVZpZXdib3goZXZlbnQudmlld2JveCk7XG4gIH0pO1xufTtcbiIsImltcG9ydCBUb29sdGlwcyBmcm9tICcuL1Rvb2x0aXBzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAndG9vbHRpcHMnIF0sXG4gIHRvb2x0aXBzOiBbICd0eXBlJywgVG9vbHRpcHMgXVxufTsiLCJpbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRvdWNoRml4KGNhbnZhcywgZXZlbnRCdXMpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRCdXMub24oJ2NhbnZhcy5pbml0JywgZnVuY3Rpb24oZSkge1xuICAgIHNlbGYuYWRkQkJveE1hcmtlcihlLnN2Zyk7XG4gIH0pO1xufVxuXG5Ub3VjaEZpeC4kaW5qZWN0ID0gWyAnY2FudmFzJywgJ2V2ZW50QnVzJyBdO1xuXG5cbi8qKlxuICogU2FmYXJpIG1vYmlsZSAoaU9TIDcpIGRvZXMgbm90IGZpcmUgdG91Y2hzdGFydCBldmVudCBpbiA8U1ZHPiBlbGVtZW50XG4gKiBpZiB0aGVyZSBpcyBubyBzaGFwZSBiZXR3ZWVuIDAsMCBhbmQgdmlld3BvcnQgZWxlbWVudHMgb3JpZ2luLlxuICpcbiAqIFNvIHRvdWNoc3RhcnQgZXZlbnQgaXMgb25seSBmaXJlZCB3aGVuIHRoZSA8ZyBjbGFzcz1cInZpZXdwb3J0XCI+IGVsZW1lbnQgd2FzIGhpdC5cbiAqIFB1dHRpbmcgYW4gZWxlbWVudCBvdmVyIGFuZCBiZWxvdyB0aGUgJ3ZpZXdwb3J0JyBmaXhlcyB0aGF0IGJlaGF2aW9yLlxuICovXG5Ub3VjaEZpeC5wcm90b3R5cGUuYWRkQkJveE1hcmtlciA9IGZ1bmN0aW9uKHN2Zykge1xuXG4gIHZhciBtYXJrZXJTdHlsZSA9IHtcbiAgICBmaWxsOiAnbm9uZScsXG4gICAgY2xhc3M6ICdvdXRlci1ib3VuZC1tYXJrZXInXG4gIH07XG5cbiAgdmFyIHJlY3QxID0gc3ZnQ3JlYXRlKCdyZWN0Jyk7XG4gIHN2Z0F0dHIocmVjdDEsIHtcbiAgICB4OiAtMTAwMDAsXG4gICAgeTogMTAwMDAsXG4gICAgd2lkdGg6IDEwLFxuICAgIGhlaWdodDogMTBcbiAgfSk7XG4gIHN2Z0F0dHIocmVjdDEsIG1hcmtlclN0eWxlKTtcblxuICBzdmdBcHBlbmQoc3ZnLCByZWN0MSk7XG5cbiAgdmFyIHJlY3QyID0gc3ZnQ3JlYXRlKCdyZWN0Jyk7XG4gIHN2Z0F0dHIocmVjdDIsIHtcbiAgICB4OiAxMDAwMCxcbiAgICB5OiAxMDAwMCxcbiAgICB3aWR0aDogMTAsXG4gICAgaGVpZ2h0OiAxMFxuICB9KTtcbiAgc3ZnQXR0cihyZWN0MiwgbWFya2VyU3R5bGUpO1xuXG4gIHN2Z0FwcGVuZChzdmcsIHJlY3QyKTtcbn07XG4iLCJpbXBvcnQge1xuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZXZlbnQgYXMgZG9tRXZlbnQsXG4gIGNsb3Nlc3QgYXMgZG9tQ2xvc2VzdFxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IEhhbW1lciBmcm9tICdoYW1tZXJqcyc7XG5cbmltcG9ydCB7XG4gIHRvUG9pbnRcbn0gZnJvbSAnLi4vLi4vdXRpbC9FdmVudCc7XG5cbnZhciBNSU5fWk9PTSA9IDAuMixcbiAgICBNQVhfWk9PTSA9IDQ7XG5cbnZhciBtb3VzZUV2ZW50cyA9IFtcbiAgJ21vdXNlZG93bicsXG4gICdtb3VzZXVwJyxcbiAgJ21vdXNlb3ZlcicsXG4gICdtb3VzZW91dCcsXG4gICdjbGljaycsXG4gICdkYmxjbGljaydcbl07XG5cbmZ1bmN0aW9uIGxvZygpIHtcblxuICAvLyBjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBnZXQoc2VydmljZSwgaW5qZWN0b3IpIHtcbiAgcmV0dXJuIGluamVjdG9yLmdldChzZXJ2aWNlLCBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIHN0b3BFdmVudChldmVudCkge1xuXG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gIGlmICh0eXBlb2YgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBjcmVhdGVUb3VjaFJlY29nbml6ZXIobm9kZSkge1xuXG4gIGZ1bmN0aW9uIHN0b3BNb3VzZShldmVudCkge1xuXG4gICAgZm9yRWFjaChtb3VzZUV2ZW50cywgZnVuY3Rpb24oZSkge1xuICAgICAgZG9tRXZlbnQuYmluZChub2RlLCBlLCBzdG9wRXZlbnQsIHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gYWxsb3dNb3VzZShldmVudCkge1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBmb3JFYWNoKG1vdXNlRXZlbnRzLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGRvbUV2ZW50LnVuYmluZChub2RlLCBlLCBzdG9wRXZlbnQsIHRydWUpO1xuICAgICAgfSk7XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIGRvbUV2ZW50LmJpbmQobm9kZSwgJ3RvdWNoc3RhcnQnLCBzdG9wTW91c2UsIHRydWUpO1xuICBkb21FdmVudC5iaW5kKG5vZGUsICd0b3VjaGVuZCcsIGFsbG93TW91c2UsIHRydWUpO1xuICBkb21FdmVudC5iaW5kKG5vZGUsICd0b3VjaGNhbmNlbCcsIGFsbG93TW91c2UsIHRydWUpO1xuXG4gIC8vIEEgdG91Y2ggZXZlbnQgcmVjb2duaXplciB0aGF0IGhhbmRsZXNcbiAgLy8gdG91Y2ggZXZlbnRzIG9ubHkgKHdlIGtub3csIHdlIGNhbiBhbHJlYWR5IGhhbmRsZVxuICAvLyBtb3VzZSBldmVudHMgb3V0IG9mIHRoZSBib3gpXG5cbiAgdmFyIHJlY29nbml6ZXIgPSBuZXcgSGFtbWVyLk1hbmFnZXIobm9kZSwge1xuICAgIGlucHV0Q2xhc3M6IEhhbW1lci5Ub3VjaElucHV0LFxuICAgIHJlY29nbml6ZXJzOiBbXVxuICB9KTtcblxuXG4gIHZhciB0YXAgPSBuZXcgSGFtbWVyLlRhcCgpO1xuICB2YXIgcGFuID0gbmV3IEhhbW1lci5QYW4oeyB0aHJlc2hvbGQ6IDEwIH0pO1xuICB2YXIgcHJlc3MgPSBuZXcgSGFtbWVyLlByZXNzKCk7XG4gIHZhciBwaW5jaCA9IG5ldyBIYW1tZXIuUGluY2goKTtcblxuICB2YXIgZG91YmxlVGFwID0gbmV3IEhhbW1lci5UYXAoeyBldmVudDogJ2RvdWJsZXRhcCcsIHRhcHM6IDIgfSk7XG5cbiAgcGluY2gucmVxdWlyZUZhaWx1cmUocGFuKTtcbiAgcGluY2gucmVxdWlyZUZhaWx1cmUocHJlc3MpO1xuXG4gIHJlY29nbml6ZXIuYWRkKFsgcGFuLCBwcmVzcywgcGluY2gsIGRvdWJsZVRhcCwgdGFwIF0pO1xuXG4gIHJlY29nbml6ZXIucmVzZXQgPSBmdW5jdGlvbihmb3JjZSkge1xuICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnMsXG4gICAgICAgIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG5cbiAgICBpZiAoc2Vzc2lvbi5zdG9wcGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nKCdyZWNvZ25pemVyJywgJ3N0b3AnKTtcblxuICAgIHJlY29nbml6ZXIuc3RvcChmb3JjZSk7XG5cbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGksIHI7XG5cbiAgICAgIGxvZygncmVjb2duaXplcicsICdyZXNldCcpO1xuICAgICAgZm9yIChpID0gMDsgKHIgPSByZWNvZ25pemVyc1tpXSk7IGkrKykge1xuICAgICAgICByLnJlc2V0KCk7XG4gICAgICAgIHIuc3RhdGUgPSA4OyAvLyBGQUlMRUQgU1RBVEVcbiAgICAgIH1cblxuICAgICAgc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gbnVsbDtcbiAgICB9LCAwKTtcbiAgfTtcblxuICByZWNvZ25pemVyLm9uKCdoYW1tZXIuaW5wdXQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIGlmIChldmVudC5zcmNFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZWNvZ25pemVyLnJlc2V0KHRydWUpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJlY29nbml6ZXI7XG59XG5cbi8qKlxuICogQSBwbHVnaW4gdGhhdCBwcm92aWRlcyB0b3VjaCBldmVudHMgZm9yIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0ludGVyYWN0aW9uRXZlbnRzfSBpbnRlcmFjdGlvbkV2ZW50c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUb3VjaEludGVyYWN0aW9uRXZlbnRzKFxuICAgIGluamVjdG9yLCBjYW52YXMsIGV2ZW50QnVzLFxuICAgIGVsZW1lbnRSZWdpc3RyeSwgaW50ZXJhY3Rpb25FdmVudHMpIHtcblxuICAvLyBvcHRpb25hbCBpbnRlZ3JhdGlvbnNcbiAgdmFyIGRyYWdnaW5nID0gZ2V0KCdkcmFnZ2luZycsIGluamVjdG9yKSxcbiAgICAgIG1vdmUgPSBnZXQoJ21vdmUnLCBpbmplY3RvciksXG4gICAgICBjb250ZXh0UGFkID0gZ2V0KCdjb250ZXh0UGFkJywgaW5qZWN0b3IpLFxuICAgICAgcGFsZXR0ZSA9IGdldCgncGFsZXR0ZScsIGluamVjdG9yKTtcblxuICAvLyB0aGUgdG91Y2ggcmVjb2duaXplclxuICB2YXIgcmVjb2duaXplcjtcblxuICBmdW5jdGlvbiBoYW5kbGVyKHR5cGUpIHtcblxuICAgIHJldHVybiBmdW5jdGlvbihldmVudCkge1xuICAgICAgbG9nKCdlbGVtZW50JywgdHlwZSwgZXZlbnQpO1xuXG4gICAgICBpbnRlcmFjdGlvbkV2ZW50cy5maXJlKHR5cGUsIGV2ZW50KTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0R2Z4KHRhcmdldCkge1xuICAgIHZhciBub2RlID0gZG9tQ2xvc2VzdCh0YXJnZXQsICdzdmcsIC5kanMtZWxlbWVudCcsIHRydWUpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdEV2ZW50cyhzdmcpIHtcblxuICAgIC8vIHRvdWNoIHJlY29nbml6ZXJcbiAgICByZWNvZ25pemVyID0gY3JlYXRlVG91Y2hSZWNvZ25pemVyKHN2Zyk7XG5cbiAgICByZWNvZ25pemVyLm9uKCdkb3VibGV0YXAnLCBoYW5kbGVyKCdlbGVtZW50LmRibGNsaWNrJykpO1xuXG4gICAgcmVjb2duaXplci5vbigndGFwJywgaGFuZGxlcignZWxlbWVudC5jbGljaycpKTtcblxuICAgIGZ1bmN0aW9uIHN0YXJ0R3JhYkNhbnZhcyhldmVudCkge1xuXG4gICAgICBsb2coJ2NhbnZhcycsICdncmFiIHN0YXJ0Jyk7XG5cbiAgICAgIHZhciBseCA9IDAsIGx5ID0gMDtcblxuICAgICAgZnVuY3Rpb24gdXBkYXRlKGUpIHtcblxuICAgICAgICB2YXIgZHggPSBlLmRlbHRhWCAtIGx4LFxuICAgICAgICAgICAgZHkgPSBlLmRlbHRhWSAtIGx5O1xuXG4gICAgICAgIGNhbnZhcy5zY3JvbGwoeyBkeDogZHgsIGR5OiBkeSB9KTtcblxuICAgICAgICBseCA9IGUuZGVsdGFYO1xuICAgICAgICBseSA9IGUuZGVsdGFZO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBlbmQoZSkge1xuICAgICAgICByZWNvZ25pemVyLm9mZigncGFubW92ZScsIHVwZGF0ZSk7XG4gICAgICAgIHJlY29nbml6ZXIub2ZmKCdwYW5lbmQnLCBlbmQpO1xuICAgICAgICByZWNvZ25pemVyLm9mZigncGFuY2FuY2VsJywgZW5kKTtcblxuICAgICAgICBsb2coJ2NhbnZhcycsICdncmFiIGVuZCcpO1xuICAgICAgfVxuXG4gICAgICByZWNvZ25pemVyLm9uKCdwYW5tb3ZlJywgdXBkYXRlKTtcbiAgICAgIHJlY29nbml6ZXIub24oJ3BhbmVuZCcsIGVuZCk7XG4gICAgICByZWNvZ25pemVyLm9uKCdwYW5jYW5jZWwnLCBlbmQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0R3JhYihldmVudCkge1xuXG4gICAgICB2YXIgZ2Z4ID0gZ2V0R2Z4KGV2ZW50LnRhcmdldCksXG4gICAgICAgICAgZWxlbWVudCA9IGdmeCAmJiBlbGVtZW50UmVnaXN0cnkuZ2V0KGdmeCk7XG5cbiAgICAgIC8vIHJlY29nbml6ZXJcbiAgICAgIGlmIChtb3ZlICYmIGNhbnZhcy5nZXRSb290RWxlbWVudCgpICE9PSBlbGVtZW50KSB7XG4gICAgICAgIGxvZygnZWxlbWVudCcsICdtb3ZlIHN0YXJ0JywgZWxlbWVudCwgZXZlbnQsIHRydWUpO1xuICAgICAgICByZXR1cm4gbW92ZS5zdGFydChldmVudCwgZWxlbWVudCwgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydEdyYWJDYW52YXMoZXZlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0Wm9vbShlKSB7XG5cbiAgICAgIGxvZygnY2FudmFzJywgJ3pvb20gc3RhcnQnKTtcblxuICAgICAgdmFyIHpvb20gPSBjYW52YXMuem9vbSgpLFxuICAgICAgICAgIG1pZCA9IGUuY2VudGVyO1xuXG4gICAgICBmdW5jdGlvbiB1cGRhdGUoZSkge1xuXG4gICAgICAgIHZhciByYXRpbyA9IDEgLSAoMSAtIGUuc2NhbGUpIC8gMS41MCxcbiAgICAgICAgICAgIG5ld1pvb20gPSBNYXRoLm1heChNSU5fWk9PTSwgTWF0aC5taW4oTUFYX1pPT00sIHJhdGlvICogem9vbSkpO1xuXG4gICAgICAgIGNhbnZhcy56b29tKG5ld1pvb20sIG1pZCk7XG5cbiAgICAgICAgc3RvcEV2ZW50KGUpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBlbmQoZSkge1xuICAgICAgICByZWNvZ25pemVyLm9mZigncGluY2htb3ZlJywgdXBkYXRlKTtcbiAgICAgICAgcmVjb2duaXplci5vZmYoJ3BpbmNoZW5kJywgZW5kKTtcbiAgICAgICAgcmVjb2duaXplci5vZmYoJ3BpbmNoY2FuY2VsJywgZW5kKTtcblxuICAgICAgICByZWNvZ25pemVyLnJlc2V0KHRydWUpO1xuXG4gICAgICAgIGxvZygnY2FudmFzJywgJ3pvb20gZW5kJyk7XG4gICAgICB9XG5cbiAgICAgIHJlY29nbml6ZXIub24oJ3BpbmNobW92ZScsIHVwZGF0ZSk7XG4gICAgICByZWNvZ25pemVyLm9uKCdwaW5jaGVuZCcsIGVuZCk7XG4gICAgICByZWNvZ25pemVyLm9uKCdwaW5jaGNhbmNlbCcsIGVuZCk7XG4gICAgfVxuXG4gICAgcmVjb2duaXplci5vbigncGFuc3RhcnQnLCBzdGFydEdyYWIpO1xuICAgIHJlY29nbml6ZXIub24oJ3ByZXNzJywgc3RhcnRHcmFiKTtcblxuICAgIHJlY29nbml6ZXIub24oJ3BpbmNoc3RhcnQnLCBzdGFydFpvb20pO1xuICB9XG5cbiAgaWYgKGRyYWdnaW5nKSB7XG5cbiAgICAvLyBzaW11bGF0ZSBob3ZlciBkdXJpbmcgZHJhZ2dpbmdcbiAgICBldmVudEJ1cy5vbignZHJhZy5tb3ZlJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgICAgdmFyIG9yaWdpbmFsRXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50O1xuXG4gICAgICBpZiAoIW9yaWdpbmFsRXZlbnQgfHwgb3JpZ2luYWxFdmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgcG9zaXRpb24gPSB0b1BvaW50KG9yaWdpbmFsRXZlbnQpO1xuXG4gICAgICAvLyB0aGlzIGdldHMgcmVhbGx5IGV4cGVuc2l2ZSAuLi5cbiAgICAgIHZhciBub2RlID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChwb3NpdGlvbi54LCBwb3NpdGlvbi55KSxcbiAgICAgICAgICBnZnggPSBnZXRHZngobm9kZSksXG4gICAgICAgICAgZWxlbWVudCA9IGdmeCAmJiBlbGVtZW50UmVnaXN0cnkuZ2V0KGdmeCk7XG5cbiAgICAgIGlmIChlbGVtZW50ICE9PSBldmVudC5ob3Zlcikge1xuICAgICAgICBpZiAoZXZlbnQuaG92ZXIpIHtcbiAgICAgICAgICBkcmFnZ2luZy5vdXQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICBkcmFnZ2luZy5ob3Zlcih7IGVsZW1lbnQ6IGVsZW1lbnQsIGdmeDogZ2Z4IH0pO1xuXG4gICAgICAgICAgZXZlbnQuaG92ZXIgPSBlbGVtZW50O1xuICAgICAgICAgIGV2ZW50LmhvdmVyR2Z4ID0gZ2Z4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoY29udGV4dFBhZCkge1xuXG4gICAgZXZlbnRCdXMub24oJ2NvbnRleHRQYWQuY3JlYXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIHZhciBub2RlID0gZXZlbnQucGFkLmh0bWw7XG5cbiAgICAgIC8vIHRvdWNoIHJlY29nbml6ZXJcbiAgICAgIHZhciBwYWRSZWNvZ25pemVyID0gY3JlYXRlVG91Y2hSZWNvZ25pemVyKG5vZGUpO1xuXG4gICAgICBwYWRSZWNvZ25pemVyLm9uKCdwYW5zdGFydCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIGxvZygnY29udGV4dC1wYWQnLCAncGFuc3RhcnQnLCBldmVudCk7XG4gICAgICAgIGNvbnRleHRQYWQudHJpZ2dlcignZHJhZ3N0YXJ0JywgZXZlbnQsIHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIHBhZFJlY29nbml6ZXIub24oJ3ByZXNzJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgbG9nKCdjb250ZXh0LXBhZCcsICdwcmVzcycsIGV2ZW50KTtcbiAgICAgICAgY29udGV4dFBhZC50cmlnZ2VyKCdkcmFnc3RhcnQnLCBldmVudCwgdHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgcGFkUmVjb2duaXplci5vbigndGFwJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgbG9nKCdjb250ZXh0LXBhZCcsICd0YXAnLCBldmVudCk7XG4gICAgICAgIGNvbnRleHRQYWQudHJpZ2dlcignY2xpY2snLCBldmVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwYWxldHRlKSB7XG4gICAgZXZlbnRCdXMub24oJ3BhbGV0dGUuY3JlYXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIHZhciBub2RlID0gZXZlbnQuY29udGFpbmVyO1xuXG4gICAgICAvLyB0b3VjaCByZWNvZ25pemVyXG4gICAgICB2YXIgcGFkUmVjb2duaXplciA9IGNyZWF0ZVRvdWNoUmVjb2duaXplcihub2RlKTtcblxuICAgICAgcGFkUmVjb2duaXplci5vbigncGFuc3RhcnQnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICBsb2coJ3BhbGV0dGUnLCAncGFuc3RhcnQnLCBldmVudCk7XG4gICAgICAgIHBhbGV0dGUudHJpZ2dlcignZHJhZ3N0YXJ0JywgZXZlbnQsIHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIHBhZFJlY29nbml6ZXIub24oJ3ByZXNzJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgbG9nKCdwYWxldHRlJywgJ3ByZXNzJywgZXZlbnQpO1xuICAgICAgICBwYWxldHRlLnRyaWdnZXIoJ2RyYWdzdGFydCcsIGV2ZW50LCB0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBwYWRSZWNvZ25pemVyLm9uKCd0YXAnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICBsb2coJ3BhbGV0dGUnLCAndGFwJywgZXZlbnQpO1xuICAgICAgICBwYWxldHRlLnRyaWdnZXIoJ2NsaWNrJywgZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBldmVudEJ1cy5vbignY2FudmFzLmluaXQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIGluaXRFdmVudHMoZXZlbnQuc3ZnKTtcbiAgfSk7XG59XG5cblxuVG91Y2hJbnRlcmFjdGlvbkV2ZW50cy4kaW5qZWN0ID0gW1xuICAnaW5qZWN0b3InLFxuICAnY2FudmFzJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdpbnRlcmFjdGlvbkV2ZW50cycsXG4gICd0b3VjaEZpeCdcbl07XG4iLCJpbXBvcnQgSW50ZXJhY3Rpb25FdmVudHNNb2R1bGUgZnJvbSAnLi4vaW50ZXJhY3Rpb24tZXZlbnRzJztcblxuaW1wb3J0IFRvdWNoSW50ZXJhY3Rpb25FdmVudHMgZnJvbSAnLi9Ub3VjaEludGVyYWN0aW9uRXZlbnRzJztcbmltcG9ydCBUb3VjaEZpeCBmcm9tICcuL1RvdWNoRml4JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogWyBJbnRlcmFjdGlvbkV2ZW50c01vZHVsZSBdLFxuICBfX2luaXRfXzogWyAndG91Y2hJbnRlcmFjdGlvbkV2ZW50cycgXSxcbiAgdG91Y2hJbnRlcmFjdGlvbkV2ZW50czogWyAndHlwZScsIFRvdWNoSW50ZXJhY3Rpb25FdmVudHMgXSxcbiAgdG91Y2hGaXg6IFsgJ3R5cGUnLCBUb3VjaEZpeCBdXG59OyIsImltcG9ydCB0cmFuc2xhdGUgZnJvbSAnLi90cmFuc2xhdGUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHRyYW5zbGF0ZTogWyAndmFsdWUnLCB0cmFuc2xhdGUgXVxufTsiLCIvKipcbiAqIEEgc2ltcGxlIHRyYW5zbGF0aW9uIHN0dWIgdG8gYmUgdXNlZCBmb3IgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydFxuICogaW4gZGlhZ3JhbXMuIENhbiBiZSBlYXNpbHkgcmVwbGFjZWQgd2l0aCBhIG1vcmUgc29waGlzdGljYXRlZFxuICogc29sdXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyB1c2UgaXQgaW5zaWRlIGFueSBkaWFncmFtIGNvbXBvbmVudCBieSBpbmplY3RpbmcgYHRyYW5zbGF0ZWAuXG4gKlxuICogZnVuY3Rpb24gTXlTZXJ2aWNlKHRyYW5zbGF0ZSkge1xuICogICBhbGVydCh0cmFuc2xhdGUoJ0hFTExPIHt5b3V9JywgeyB5b3U6ICdZb3UhJyB9KSk7XG4gKiB9XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlIHRvIGludGVycG9sYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcGxhY2VtZW50c10gYSBtYXAgd2l0aCBzdWJzdGl0dXRlc1xuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIHRyYW5zbGF0ZWQgc3RyaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zbGF0ZSh0ZW1wbGF0ZSwgcmVwbGFjZW1lbnRzKSB7XG5cbiAgcmVwbGFjZW1lbnRzID0gcmVwbGFjZW1lbnRzIHx8IHt9O1xuXG4gIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC97KFtefV0rKX0vZywgZnVuY3Rpb24oXywga2V5KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VtZW50c1trZXldIHx8ICd7JyArIGtleSArICd9JztcbiAgfSk7XG59IiwiaW1wb3J0IHtcbiAgZ2V0TWlkXG59IGZyb20gJy4vTGF5b3V0VXRpbCc7XG5cblxuLyoqXG4gKiBBIGJhc2UgY29ubmVjdGlvbiBsYXlvdXRlciBpbXBsZW1lbnRhdGlvblxuICogdGhhdCBsYXlvdXRzIHRoZSBjb25uZWN0aW9uIGJ5IGRpcmVjdGx5IGNvbm5lY3RpbmdcbiAqIG1pZChzb3VyY2UpICsgbWlkKHRhcmdldCkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJhc2VMYXlvdXRlcigpIHt9XG5cblxuLyoqXG4gKiBSZXR1cm4gdGhlIG5ldyBsYXlvdXRlZCB3YXlwb2ludHMgZm9yIHRoZSBnaXZlbiBjb25uZWN0aW9uLlxuICpcbiAqIFRoZSBjb25uZWN0aW9uIHBhc3NlZCBpcyBzdGlsbCB1bmNoYW5nZWQ7IHlvdSBtYXkgZmlndXJlIG91dCBhYm91dFxuICogdGhlIG5ldyBjb25uZWN0aW9uIHN0YXJ0IC8gZW5kIHZpYSB0aGUgbGF5b3V0IGhpbnRzIHByb3ZpZGVkLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkNvbm5lY3Rpb259IGNvbm5lY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBbaGludHNdXG4gKiBAcGFyYW0ge1BvaW50fSBbaGludHMuY29ubmVjdGlvblN0YXJ0XVxuICogQHBhcmFtIHtQb2ludH0gW2hpbnRzLmNvbm5lY3Rpb25FbmRdXG4gKiBAcGFyYW0ge1BvaW50fSBbaGludHMuc291cmNlXVxuICogQHBhcmFtIHtQb2ludH0gW2hpbnRzLnRhcmdldF1cbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxQb2ludD59IHRoZSBsYXlvdXRlZCBjb25uZWN0aW9uIHdheXBvaW50c1xuICovXG5CYXNlTGF5b3V0ZXIucHJvdG90eXBlLmxheW91dENvbm5lY3Rpb24gPSBmdW5jdGlvbihjb25uZWN0aW9uLCBoaW50cykge1xuXG4gIGhpbnRzID0gaGludHMgfHwge307XG5cbiAgcmV0dXJuIFtcbiAgICBoaW50cy5jb25uZWN0aW9uU3RhcnQgfHwgZ2V0TWlkKGhpbnRzLnNvdXJjZSB8fCBjb25uZWN0aW9uLnNvdXJjZSksXG4gICAgaGludHMuY29ubmVjdGlvbkVuZCB8fCBnZXRNaWQoaGludHMudGFyZ2V0IHx8IGNvbm5lY3Rpb24udGFyZ2V0KVxuICBdO1xufTtcbiIsImltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGdldEVsZW1lbnRMaW5lSW50ZXJzZWN0aW9uXG59IGZyb20gJy4vTGF5b3V0VXRpbCc7XG5cblxuZnVuY3Rpb24gZG9ja2luZ1RvUG9pbnQoZG9ja2luZykge1xuXG4gIC8vIHVzZSB0aGUgZG9ja2luZ3MgYWN0dWFsIHBvaW50IGFuZFxuICAvLyByZXRhaW4gdGhlIG9yaWdpbmFsIGRvY2tpbmdcbiAgcmV0dXJuIGFzc2lnbih7IG9yaWdpbmFsOiBkb2NraW5nLnBvaW50Lm9yaWdpbmFsIHx8IGRvY2tpbmcucG9pbnQgfSwgZG9ja2luZy5hY3R1YWwpO1xufVxuXG5cbi8qKlxuICogQSB7QGxpbmsgQ29ubmVjdGlvbkRvY2tpbmd9IHRoYXQgY3JvcHMgY29ubmVjdGlvbiB3YXlwb2ludHMgYmFzZWQgb25cbiAqIHRoZSBwYXRoKHMpIG9mIHRoZSBjb25uZWN0aW9uIHNvdXJjZSBhbmQgdGFyZ2V0LlxuICpcbiAqIEBwYXJhbSB7ZGpzLmNvcmUuRWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3JvcHBpbmdDb25uZWN0aW9uRG9ja2luZyhlbGVtZW50UmVnaXN0cnksIGdyYXBoaWNzRmFjdG9yeSkge1xuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG4gIHRoaXMuX2dyYXBoaWNzRmFjdG9yeSA9IGdyYXBoaWNzRmFjdG9yeTtcbn1cblxuQ3JvcHBpbmdDb25uZWN0aW9uRG9ja2luZy4kaW5qZWN0ID0gWyAnZWxlbWVudFJlZ2lzdHJ5JywgJ2dyYXBoaWNzRmFjdG9yeScgXTtcblxuXG4vKipcbiAqIEBpbmhlcml0RG9jIENvbm5lY3Rpb25Eb2NraW5nI2dldENyb3BwZWRXYXlwb2ludHNcbiAqL1xuQ3JvcHBpbmdDb25uZWN0aW9uRG9ja2luZy5wcm90b3R5cGUuZ2V0Q3JvcHBlZFdheXBvaW50cyA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIHNvdXJjZSwgdGFyZ2V0KSB7XG5cbiAgc291cmNlID0gc291cmNlIHx8IGNvbm5lY3Rpb24uc291cmNlO1xuICB0YXJnZXQgPSB0YXJnZXQgfHwgY29ubmVjdGlvbi50YXJnZXQ7XG5cbiAgdmFyIHNvdXJjZURvY2tpbmcgPSB0aGlzLmdldERvY2tpbmdQb2ludChjb25uZWN0aW9uLCBzb3VyY2UsIHRydWUpLFxuICAgICAgdGFyZ2V0RG9ja2luZyA9IHRoaXMuZ2V0RG9ja2luZ1BvaW50KGNvbm5lY3Rpb24sIHRhcmdldCk7XG5cbiAgdmFyIGNyb3BwZWRXYXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cy5zbGljZShzb3VyY2VEb2NraW5nLmlkeCArIDEsIHRhcmdldERvY2tpbmcuaWR4KTtcblxuICBjcm9wcGVkV2F5cG9pbnRzLnVuc2hpZnQoZG9ja2luZ1RvUG9pbnQoc291cmNlRG9ja2luZykpO1xuICBjcm9wcGVkV2F5cG9pbnRzLnB1c2goZG9ja2luZ1RvUG9pbnQodGFyZ2V0RG9ja2luZykpO1xuXG4gIHJldHVybiBjcm9wcGVkV2F5cG9pbnRzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGNvbm5lY3Rpb24gZG9ja2luZyBwb2ludCBvbiB0aGUgc3BlY2lmaWVkIHNoYXBlXG4gKlxuICogQGluaGVyaXREb2MgQ29ubmVjdGlvbkRvY2tpbmcjZ2V0RG9ja2luZ1BvaW50XG4gKi9cbkNyb3BwaW5nQ29ubmVjdGlvbkRvY2tpbmcucHJvdG90eXBlLmdldERvY2tpbmdQb2ludCA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIHNoYXBlLCBkb2NrU3RhcnQpIHtcblxuICB2YXIgd2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHMsXG4gICAgICBkb2NraW5nSWR4LFxuICAgICAgZG9ja2luZ1BvaW50LFxuICAgICAgY3JvcHBlZFBvaW50O1xuXG4gIGRvY2tpbmdJZHggPSBkb2NrU3RhcnQgPyAwIDogd2F5cG9pbnRzLmxlbmd0aCAtIDE7XG4gIGRvY2tpbmdQb2ludCA9IHdheXBvaW50c1tkb2NraW5nSWR4XTtcblxuICBjcm9wcGVkUG9pbnQgPSB0aGlzLl9nZXRJbnRlcnNlY3Rpb24oc2hhcGUsIGNvbm5lY3Rpb24sIGRvY2tTdGFydCk7XG5cbiAgcmV0dXJuIHtcbiAgICBwb2ludDogZG9ja2luZ1BvaW50LFxuICAgIGFjdHVhbDogY3JvcHBlZFBvaW50IHx8IGRvY2tpbmdQb2ludCxcbiAgICBpZHg6IGRvY2tpbmdJZHhcbiAgfTtcbn07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbkNyb3BwaW5nQ29ubmVjdGlvbkRvY2tpbmcucHJvdG90eXBlLl9nZXRJbnRlcnNlY3Rpb24gPSBmdW5jdGlvbihzaGFwZSwgY29ubmVjdGlvbiwgdGFrZUZpcnN0KSB7XG5cbiAgdmFyIHNoYXBlUGF0aCA9IHRoaXMuX2dldFNoYXBlUGF0aChzaGFwZSksXG4gICAgICBjb25uZWN0aW9uUGF0aCA9IHRoaXMuX2dldENvbm5lY3Rpb25QYXRoKGNvbm5lY3Rpb24pO1xuXG4gIHJldHVybiBnZXRFbGVtZW50TGluZUludGVyc2VjdGlvbihzaGFwZVBhdGgsIGNvbm5lY3Rpb25QYXRoLCB0YWtlRmlyc3QpO1xufTtcblxuQ3JvcHBpbmdDb25uZWN0aW9uRG9ja2luZy5wcm90b3R5cGUuX2dldENvbm5lY3Rpb25QYXRoID0gZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICByZXR1cm4gdGhpcy5fZ3JhcGhpY3NGYWN0b3J5LmdldENvbm5lY3Rpb25QYXRoKGNvbm5lY3Rpb24pO1xufTtcblxuQ3JvcHBpbmdDb25uZWN0aW9uRG9ja2luZy5wcm90b3R5cGUuX2dldFNoYXBlUGF0aCA9IGZ1bmN0aW9uKHNoYXBlKSB7XG4gIHJldHVybiB0aGlzLl9ncmFwaGljc0ZhY3RvcnkuZ2V0U2hhcGVQYXRoKHNoYXBlKTtcbn07XG5cbkNyb3BwaW5nQ29ubmVjdGlvbkRvY2tpbmcucHJvdG90eXBlLl9nZXRHZnggPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiB0aGlzLl9lbGVtZW50UmVnaXN0cnkuZ2V0R3JhcGhpY3MoZWxlbWVudCk7XG59O1xuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIHNvcnRCeVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIHBvaW50RGlzdGFuY2UsXG4gIHBvaW50c09uTGluZVxufSBmcm9tICcuLi91dGlsL0dlb21ldHJ5JztcblxuaW1wb3J0IGludGVyc2VjdFBhdGhzIGZyb20gJ3BhdGgtaW50ZXJzZWN0aW9uJztcblxuXG5leHBvcnQgZnVuY3Rpb24gcm91bmRCb3VuZHMoYm91bmRzKSB7XG4gIHJldHVybiB7XG4gICAgeDogTWF0aC5yb3VuZChib3VuZHMueCksXG4gICAgeTogTWF0aC5yb3VuZChib3VuZHMueSksXG4gICAgd2lkdGg6IE1hdGgucm91bmQoYm91bmRzLndpZHRoKSxcbiAgICBoZWlnaHQ6IE1hdGgucm91bmQoYm91bmRzLmhlaWdodClcbiAgfTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gcm91bmRQb2ludChwb2ludCkge1xuXG4gIHJldHVybiB7XG4gICAgeDogTWF0aC5yb3VuZChwb2ludC54KSxcbiAgICB5OiBNYXRoLnJvdW5kKHBvaW50LnkpXG4gIH07XG59XG5cblxuLyoqXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBib3VuZHMgdG8gYSB7IHRvcCwgbGVmdCwgYm90dG9tLCByaWdodCB9IGRlc2NyaXB0b3IuXG4gKlxuICogQHBhcmFtIHtCb3VuZHN8UG9pbnR9IGJvdW5kc1xuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzVFJCTChib3VuZHMpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IGJvdW5kcy55LFxuICAgIHJpZ2h0OiBib3VuZHMueCArIChib3VuZHMud2lkdGggfHwgMCksXG4gICAgYm90dG9tOiBib3VuZHMueSArIChib3VuZHMuaGVpZ2h0IHx8IDApLFxuICAgIGxlZnQ6IGJvdW5kcy54XG4gIH07XG59XG5cblxuLyoqXG4gKiBDb252ZXJ0IGEgeyB0b3AsIGxlZnQsIGJvdHRvbSwgcmlnaHQgfSB0byBhbiBvYmplY3RzIGJvdW5kcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdHJibFxuICpcbiAqIEByZXR1cm4ge0JvdW5kc31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzQm91bmRzKHRyYmwpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiB0cmJsLmxlZnQsXG4gICAgeTogdHJibC50b3AsXG4gICAgd2lkdGg6IHRyYmwucmlnaHQgLSB0cmJsLmxlZnQsXG4gICAgaGVpZ2h0OiB0cmJsLmJvdHRvbSAtIHRyYmwudG9wXG4gIH07XG59XG5cblxuLyoqXG4gKiBHZXQgdGhlIG1pZCBvZiB0aGUgZ2l2ZW4gYm91bmRzIG9yIHBvaW50LlxuICpcbiAqIEBwYXJhbSB7Qm91bmRzfFBvaW50fSBib3VuZHNcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1pZChib3VuZHMpIHtcbiAgcmV0dXJuIHJvdW5kUG9pbnQoe1xuICAgIHg6IGJvdW5kcy54ICsgKGJvdW5kcy53aWR0aCB8fCAwKSAvIDIsXG4gICAgeTogYm91bmRzLnkgKyAoYm91bmRzLmhlaWdodCB8fCAwKSAvIDJcbiAgfSk7XG59XG5cblxuLy8gb3JpZW50YXRpb24gdXRpbHMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIEdldCBvcmllbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gcmVjdGFuZ2xlIHdpdGggcmVzcGVjdCB0b1xuICogdGhlIHJlZmVyZW5jZSByZWN0YW5nbGUuXG4gKlxuICogQSBwYWRkaW5nIChwb3NpdGl2ZSBvciBuZWdhdGl2ZSkgbWF5IGJlIHBhc3NlZCB0byBpbmZsdWVuY2VcbiAqIGhvcml6b250YWwgLyB2ZXJ0aWNhbCBvcmllbnRhdGlvbiBhbmQgaW50ZXJzZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7Qm91bmRzfSByZWN0XG4gKiBAcGFyYW0ge0JvdW5kc30gcmVmZXJlbmNlXG4gKiBAcGFyYW0ge1BvaW50fG51bWJlcn0gcGFkZGluZ1xuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIG9yaWVudGF0aW9uOyBvbmUgb2YgdG9wLCB0b3AtbGVmdCwgbGVmdCwgLi4uLCBib3R0b20sIHJpZ2h0IG9yIGludGVyc2VjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9yaWVudGF0aW9uKHJlY3QsIHJlZmVyZW5jZSwgcGFkZGluZykge1xuXG4gIHBhZGRpbmcgPSBwYWRkaW5nIHx8IDA7XG5cbiAgLy8gbWFrZSBzdXJlIHdlIGNhbiB1c2UgYW4gb2JqZWN0LCB0b29cbiAgLy8gZm9yIGluZGl2aWR1YWwgeyB4LCB5IH0gcGFkZGluZ1xuICBpZiAoIWlzT2JqZWN0KHBhZGRpbmcpKSB7XG4gICAgcGFkZGluZyA9IHsgeDogcGFkZGluZywgeTogcGFkZGluZyB9O1xuICB9XG5cblxuICB2YXIgcmVjdE9yaWVudGF0aW9uID0gYXNUUkJMKHJlY3QpLFxuICAgICAgcmVmZXJlbmNlT3JpZW50YXRpb24gPSBhc1RSQkwocmVmZXJlbmNlKTtcblxuICB2YXIgdG9wID0gcmVjdE9yaWVudGF0aW9uLmJvdHRvbSArIHBhZGRpbmcueSA8PSByZWZlcmVuY2VPcmllbnRhdGlvbi50b3AsXG4gICAgICByaWdodCA9IHJlY3RPcmllbnRhdGlvbi5sZWZ0IC0gcGFkZGluZy54ID49IHJlZmVyZW5jZU9yaWVudGF0aW9uLnJpZ2h0LFxuICAgICAgYm90dG9tID0gcmVjdE9yaWVudGF0aW9uLnRvcCAtIHBhZGRpbmcueSA+PSByZWZlcmVuY2VPcmllbnRhdGlvbi5ib3R0b20sXG4gICAgICBsZWZ0ID0gcmVjdE9yaWVudGF0aW9uLnJpZ2h0ICsgcGFkZGluZy54IDw9IHJlZmVyZW5jZU9yaWVudGF0aW9uLmxlZnQ7XG5cbiAgdmFyIHZlcnRpY2FsID0gdG9wID8gJ3RvcCcgOiAoYm90dG9tID8gJ2JvdHRvbScgOiBudWxsKSxcbiAgICAgIGhvcml6b250YWwgPSBsZWZ0ID8gJ2xlZnQnIDogKHJpZ2h0ID8gJ3JpZ2h0JyA6IG51bGwpO1xuXG4gIGlmIChob3Jpem9udGFsICYmIHZlcnRpY2FsKSB7XG4gICAgcmV0dXJuIHZlcnRpY2FsICsgJy0nICsgaG9yaXpvbnRhbDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gaG9yaXpvbnRhbCB8fCB2ZXJ0aWNhbCB8fCAnaW50ZXJzZWN0JztcbiAgfVxufVxuXG5cbi8vIGludGVyc2VjdGlvbiB1dGlscyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogR2V0IGludGVyc2VjdGlvbiBiZXR3ZWVuIGFuIGVsZW1lbnQgYW5kIGEgbGluZSBwYXRoLlxuICpcbiAqIEBwYXJhbSB7UGF0aERlZn0gZWxlbWVudFBhdGhcbiAqIEBwYXJhbSB7UGF0aERlZn0gbGluZVBhdGhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY3JvcFN0YXJ0IGNyb3AgZnJvbSBzdGFydCBvciBlbmRcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRMaW5lSW50ZXJzZWN0aW9uKGVsZW1lbnRQYXRoLCBsaW5lUGF0aCwgY3JvcFN0YXJ0KSB7XG5cbiAgdmFyIGludGVyc2VjdGlvbnMgPSBnZXRJbnRlcnNlY3Rpb25zKGVsZW1lbnRQYXRoLCBsaW5lUGF0aCk7XG5cbiAgLy8gcmVjb2duaXplIGludGVyc2VjdGlvbnNcbiAgLy8gb25seSBvbmUgLT4gY2hvb3NlXG4gIC8vIHR3byBjbG9zZSB0b2dldGhlciAtPiBjaG9vc2UgZmlyc3RcbiAgLy8gdHdvIG9yIG1vcmUgZGlzdGluY3QgLT4gcHVsbCBvdXQgYXBwcm9wcmlhdGUgb25lXG4gIC8vIG5vbmUgLT4gb2sgKGZhbGxiYWNrIHRvIHBvaW50IGl0c2VsZilcbiAgaWYgKGludGVyc2VjdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHJvdW5kUG9pbnQoaW50ZXJzZWN0aW9uc1swXSk7XG4gIH0gZWxzZSBpZiAoaW50ZXJzZWN0aW9ucy5sZW5ndGggPT09IDIgJiYgcG9pbnREaXN0YW5jZShpbnRlcnNlY3Rpb25zWzBdLCBpbnRlcnNlY3Rpb25zWzFdKSA8IDEpIHtcbiAgICByZXR1cm4gcm91bmRQb2ludChpbnRlcnNlY3Rpb25zWzBdKTtcbiAgfSBlbHNlIGlmIChpbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDEpIHtcblxuICAgIC8vIHNvcnQgYnkgaW50ZXJzZWN0aW9ucyBiYXNlZCBvbiBjb25uZWN0aW9uIHNlZ21lbnQgK1xuICAgIC8vIGRpc3RhbmNlIGZyb20gc3RhcnRcbiAgICBpbnRlcnNlY3Rpb25zID0gc29ydEJ5KGludGVyc2VjdGlvbnMsIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHZhciBkaXN0YW5jZSA9IE1hdGguZmxvb3IoaS50MiAqIDEwMCkgfHwgMTtcblxuICAgICAgZGlzdGFuY2UgPSAxMDAgLSBkaXN0YW5jZTtcblxuICAgICAgZGlzdGFuY2UgPSAoZGlzdGFuY2UgPCAxMCA/ICcwJyA6ICcnKSArIGRpc3RhbmNlO1xuXG4gICAgICAvLyBjcmVhdGUgYSBzb3J0IHN0cmluZyB0aGF0IG1ha2VzIHN1cmUgd2Ugc29ydFxuICAgICAgLy8gbGluZSBzZWdtZW50IEFTQyArIGxpbmUgc2VnbWVudCBwb3NpdGlvbiBERVNDIChmb3IgY3JvcFN0YXJ0KVxuICAgICAgLy8gbGluZSBzZWdtZW50IEFTQyArIGxpbmUgc2VnbWVudCBwb3NpdGlvbiBBU0MgKGZvciBjcm9wRW5kKVxuICAgICAgcmV0dXJuIGkuc2VnbWVudDIgKyAnIycgKyBkaXN0YW5jZTtcbiAgICB9KTtcblxuICAgIHJldHVybiByb3VuZFBvaW50KGludGVyc2VjdGlvbnNbY3JvcFN0YXJ0ID8gMCA6IGludGVyc2VjdGlvbnMubGVuZ3RoIC0gMV0pO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludGVyc2VjdGlvbnMoYSwgYikge1xuICByZXR1cm4gaW50ZXJzZWN0UGF0aHMoYSwgYik7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlclJlZHVuZGFudFdheXBvaW50cyh3YXlwb2ludHMpIHtcblxuICAvLyBhbHRlciBjb3B5IG9mIHdheXBvaW50cywgbm90IG9yaWdpbmFsXG4gIHdheXBvaW50cyA9IHdheXBvaW50cy5zbGljZSgpO1xuXG4gIHZhciBpZHggPSAwLFxuICAgICAgcG9pbnQsXG4gICAgICBwcmV2aW91c1BvaW50LFxuICAgICAgbmV4dFBvaW50O1xuXG4gIHdoaWxlICh3YXlwb2ludHNbaWR4XSkge1xuICAgIHBvaW50ID0gd2F5cG9pbnRzW2lkeF07XG4gICAgcHJldmlvdXNQb2ludCA9IHdheXBvaW50c1tpZHggLSAxXTtcbiAgICBuZXh0UG9pbnQgPSB3YXlwb2ludHNbaWR4ICsgMV07XG5cbiAgICBpZiAocG9pbnREaXN0YW5jZShwb2ludCwgbmV4dFBvaW50KSA9PT0gMCB8fFxuICAgICAgICBwb2ludHNPbkxpbmUocHJldmlvdXNQb2ludCwgbmV4dFBvaW50LCBwb2ludCkpIHtcblxuICAgICAgLy8gcmVtb3ZlIHBvaW50LCBpZiBvdmVybGFwcGluZyB3aXRoIHtuZXh0UG9pbnR9XG4gICAgICAvLyBvciBvbiBsaW5lIHdpdGgge3ByZXZpb3VzUG9pbnR9IC0+IHtwb2ludH0gLT4ge25leHRQb2ludH1cbiAgICAgIHdheXBvaW50cy5zcGxpY2UoaWR4LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWR4Kys7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdheXBvaW50cztcbn1cbiIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZmluZCxcbiAgaXNBcnJheSxcbiAgd2l0aG91dFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGdldE9yaWVudGF0aW9uLFxuICBnZXRNaWRcbn0gZnJvbSAnLi9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgcG9pbnRJblJlY3QsXG4gIHBvaW50RGlzdGFuY2UsXG4gIHBvaW50c0FsaWduZWQsXG4gIHBvaW50c09uTGluZVxufSBmcm9tICcuLi91dGlsL0dlb21ldHJ5JztcblxudmFyIE1JTl9TRUdNRU5UX0xFTkdUSCA9IDIwLFxuICAgIFBPSU5UX09SSUVOVEFUSU9OX1BBRERJTkcgPSA1O1xuXG52YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xuXG52YXIgSU5URVJTRUNUSU9OX1RIUkVTSE9MRCA9IDIwLFxuICAgIE9SSUVOVEFUSU9OX1RIUkVTSE9MRCA9IHtcbiAgICAgICdoOmgnOiAyMCxcbiAgICAgICd2OnYnOiAyMCxcbiAgICAgICdoOnYnOiAtMTAsXG4gICAgICAndjpoJzogLTEwXG4gICAgfTtcblxuZnVuY3Rpb24gbmVlZHNUdXJuKG9yaWVudGF0aW9uLCBzdGFydERpcmVjdGlvbikge1xuICByZXR1cm4gIXtcbiAgICB0OiAvdG9wLyxcbiAgICByOiAvcmlnaHQvLFxuICAgIGI6IC9ib3R0b20vLFxuICAgIGw6IC9sZWZ0LyxcbiAgICBoOiAvLi8sXG4gICAgdjogLy4vXG4gIH1bc3RhcnREaXJlY3Rpb25dLnRlc3Qob3JpZW50YXRpb24pO1xufVxuXG5mdW5jdGlvbiBjYW5MYXlvdXRTdHJhaWdodChkaXJlY3Rpb24sIHRhcmdldE9yaWVudGF0aW9uKSB7XG4gIHJldHVybiB7XG4gICAgdDogL3RvcC8sXG4gICAgcjogL3JpZ2h0LyxcbiAgICBiOiAvYm90dG9tLyxcbiAgICBsOiAvbGVmdC8sXG4gICAgaDogL2xlZnR8cmlnaHQvLFxuICAgIHY6IC90b3B8Ym90dG9tL1xuICB9W2RpcmVjdGlvbl0udGVzdCh0YXJnZXRPcmllbnRhdGlvbik7XG59XG5cbmZ1bmN0aW9uIGdldFNlZ21lbnRCZW5kcG9pbnRzKGEsIGIsIGRpcmVjdGlvbnMpIHtcbiAgdmFyIG9yaWVudGF0aW9uID0gZ2V0T3JpZW50YXRpb24oYiwgYSwgUE9JTlRfT1JJRU5UQVRJT05fUEFERElORyk7XG5cbiAgdmFyIHN0YXJ0RGlyZWN0aW9uID0gZGlyZWN0aW9ucy5zcGxpdCgnOicpWzBdO1xuXG4gIHZhciB4bWlkID0gcm91bmQoKGIueCAtIGEueCkgLyAyICsgYS54KSxcbiAgICAgIHltaWQgPSByb3VuZCgoYi55IC0gYS55KSAvIDIgKyBhLnkpO1xuXG4gIHZhciBzZWdtZW50RW5kLCBzZWdtZW50RGlyZWN0aW9ucztcblxuICB2YXIgbGF5b3V0U3RyYWlnaHQgPSBjYW5MYXlvdXRTdHJhaWdodChzdGFydERpcmVjdGlvbiwgb3JpZW50YXRpb24pLFxuICAgICAgbGF5b3V0SG9yaXpvbnRhbCA9IC9ofHJ8bC8udGVzdChzdGFydERpcmVjdGlvbiksXG4gICAgICBsYXlvdXRUdXJuID0gZmFsc2U7XG5cbiAgdmFyIHR1cm5OZXh0RGlyZWN0aW9ucyA9IGZhbHNlO1xuXG4gIGlmIChsYXlvdXRTdHJhaWdodCkge1xuICAgIHNlZ21lbnRFbmQgPSBsYXlvdXRIb3Jpem9udGFsID8geyB4OiB4bWlkLCB5OiBhLnkgfSA6IHsgeDogYS54LCB5OiB5bWlkIH07XG5cbiAgICBzZWdtZW50RGlyZWN0aW9ucyA9IGxheW91dEhvcml6b250YWwgPyAnaDpoJyA6ICd2OnYnO1xuICB9IGVsc2Uge1xuICAgIGxheW91dFR1cm4gPSBuZWVkc1R1cm4ob3JpZW50YXRpb24sIHN0YXJ0RGlyZWN0aW9uKTtcblxuICAgIHNlZ21lbnREaXJlY3Rpb25zID0gbGF5b3V0SG9yaXpvbnRhbCA/ICdoOnYnIDogJ3Y6aCc7XG5cbiAgICBpZiAobGF5b3V0VHVybikge1xuXG4gICAgICBpZiAobGF5b3V0SG9yaXpvbnRhbCkge1xuICAgICAgICB0dXJuTmV4dERpcmVjdGlvbnMgPSB5bWlkID09PSBhLnk7XG5cbiAgICAgICAgc2VnbWVudEVuZCA9IHtcbiAgICAgICAgICB4OiBhLnggKyBNSU5fU0VHTUVOVF9MRU5HVEggKiAoL2wvLnRlc3Qoc3RhcnREaXJlY3Rpb24pID8gLTEgOiAxKSxcbiAgICAgICAgICB5OiB0dXJuTmV4dERpcmVjdGlvbnMgPyB5bWlkICsgTUlOX1NFR01FTlRfTEVOR1RIIDogeW1pZFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHVybk5leHREaXJlY3Rpb25zID0geG1pZCA9PT0gYS54O1xuXG4gICAgICAgIHNlZ21lbnRFbmQgPSB7XG4gICAgICAgICAgeDogdHVybk5leHREaXJlY3Rpb25zID8geG1pZCArIE1JTl9TRUdNRU5UX0xFTkdUSCA6IHhtaWQsXG4gICAgICAgICAgeTogYS55ICsgTUlOX1NFR01FTlRfTEVOR1RIICogKC90Ly50ZXN0KHN0YXJ0RGlyZWN0aW9uKSA/IC0xIDogMSlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICBzZWdtZW50RW5kID0ge1xuICAgICAgICB4OiB4bWlkLFxuICAgICAgICB5OiB5bWlkXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2F5cG9pbnRzOiBnZXRCZW5kcG9pbnRzKGEsIHNlZ21lbnRFbmQsIHNlZ21lbnREaXJlY3Rpb25zKS5jb25jYXQoc2VnbWVudEVuZCksXG4gICAgZGlyZWN0aW9uczogIHNlZ21lbnREaXJlY3Rpb25zLFxuICAgIHR1cm5OZXh0RGlyZWN0aW9uczogdHVybk5leHREaXJlY3Rpb25zXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFN0YXJ0U2VnbWVudChhLCBiLCBkaXJlY3Rpb25zKSB7XG4gIHJldHVybiBnZXRTZWdtZW50QmVuZHBvaW50cyhhLCBiLCBkaXJlY3Rpb25zKTtcbn1cblxuZnVuY3Rpb24gZ2V0RW5kU2VnbWVudChhLCBiLCBkaXJlY3Rpb25zKSB7XG4gIHZhciBpbnZlcnRlZFNlZ21lbnQgPSBnZXRTZWdtZW50QmVuZHBvaW50cyhiLCBhLCBpbnZlcnREaXJlY3Rpb25zKGRpcmVjdGlvbnMpKTtcblxuICByZXR1cm4ge1xuICAgIHdheXBvaW50czogaW52ZXJ0ZWRTZWdtZW50LndheXBvaW50cy5zbGljZSgpLnJldmVyc2UoKSxcbiAgICBkaXJlY3Rpb25zOiBpbnZlcnREaXJlY3Rpb25zKGludmVydGVkU2VnbWVudC5kaXJlY3Rpb25zKSxcbiAgICB0dXJuTmV4dERpcmVjdGlvbnM6IGludmVydGVkU2VnbWVudC50dXJuTmV4dERpcmVjdGlvbnNcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0TWlkU2VnbWVudChzdGFydFNlZ21lbnQsIGVuZFNlZ21lbnQpIHtcblxuICB2YXIgc3RhcnREaXJlY3Rpb24gPSBzdGFydFNlZ21lbnQuZGlyZWN0aW9ucy5zcGxpdCgnOicpWzFdLFxuICAgICAgZW5kRGlyZWN0aW9uID0gZW5kU2VnbWVudC5kaXJlY3Rpb25zLnNwbGl0KCc6JylbMF07XG5cbiAgaWYgKHN0YXJ0U2VnbWVudC50dXJuTmV4dERpcmVjdGlvbnMpIHtcbiAgICBzdGFydERpcmVjdGlvbiA9IHN0YXJ0RGlyZWN0aW9uID09ICdoJyA/ICd2JyA6ICdoJztcbiAgfVxuXG4gIGlmIChlbmRTZWdtZW50LnR1cm5OZXh0RGlyZWN0aW9ucykge1xuICAgIGVuZERpcmVjdGlvbiA9IGVuZERpcmVjdGlvbiA9PSAnaCcgPyAndicgOiAnaCc7XG4gIH1cblxuICB2YXIgZGlyZWN0aW9ucyA9IHN0YXJ0RGlyZWN0aW9uICsgJzonICsgZW5kRGlyZWN0aW9uO1xuXG4gIHZhciBiZW5kcG9pbnRzID0gZ2V0QmVuZHBvaW50cyhcbiAgICBzdGFydFNlZ21lbnQud2F5cG9pbnRzW3N0YXJ0U2VnbWVudC53YXlwb2ludHMubGVuZ3RoIC0gMV0sXG4gICAgZW5kU2VnbWVudC53YXlwb2ludHNbMF0sXG4gICAgZGlyZWN0aW9uc1xuICApO1xuXG4gIHJldHVybiB7XG4gICAgd2F5cG9pbnRzOiBiZW5kcG9pbnRzLFxuICAgIGRpcmVjdGlvbnM6IGRpcmVjdGlvbnNcbiAgfTtcbn1cblxuZnVuY3Rpb24gaW52ZXJ0RGlyZWN0aW9ucyhkaXJlY3Rpb25zKSB7XG4gIHJldHVybiBkaXJlY3Rpb25zLnNwbGl0KCc6JykucmV2ZXJzZSgpLmpvaW4oJzonKTtcbn1cblxuLyoqXG4gKiBIYW5kbGUgc2ltcGxlIGxheW91dHMgd2l0aCBtYXhpbXVtIHR3byBiZW5kcG9pbnRzLlxuICovXG5mdW5jdGlvbiBnZXRTaW1wbGVCZW5kcG9pbnRzKGEsIGIsIGRpcmVjdGlvbnMpIHtcblxuICB2YXIgeG1pZCA9IHJvdW5kKChiLnggLSBhLngpIC8gMiArIGEueCksXG4gICAgICB5bWlkID0gcm91bmQoKGIueSAtIGEueSkgLyAyICsgYS55KTtcblxuICAvLyBvbmUgcG9pbnQsIHJpZ2h0IG9yIGxlZnQgZnJvbSBhXG4gIGlmIChkaXJlY3Rpb25zID09PSAnaDp2Jykge1xuICAgIHJldHVybiBbIHsgeDogYi54LCB5OiBhLnkgfSBdO1xuICB9XG5cbiAgLy8gb25lIHBvaW50LCBhYm92ZSBvciBiZWxvdyBhXG4gIGlmIChkaXJlY3Rpb25zID09PSAndjpoJykge1xuICAgIHJldHVybiBbIHsgeDogYS54LCB5OiBiLnkgfSBdO1xuICB9XG5cbiAgLy8gdmVydGljYWwgc2VnbWVudCBiZXR3ZWVuIGEgYW5kIGJcbiAgaWYgKGRpcmVjdGlvbnMgPT09ICdoOmgnKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgeDogeG1pZCwgeTogYS55IH0sXG4gICAgICB7IHg6IHhtaWQsIHk6IGIueSB9XG4gICAgXTtcbiAgfVxuXG4gIC8vIGhvcml6b250YWwgc2VnbWVudCBiZXR3ZWVuIGEgYW5kIGJcbiAgaWYgKGRpcmVjdGlvbnMgPT09ICd2OnYnKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgeDogYS54LCB5OiB5bWlkIH0sXG4gICAgICB7IHg6IGIueCwgeTogeW1pZCB9XG4gICAgXTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBkaXJlY3Rpb25zOiBjYW4gb25seSBoYW5kbGUgdmFyaWFucyBvZiBbaHZdOltodl0nKTtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgdGhlIG1pZCBwb2ludHMgZm9yIGEgbWFuaGF0dGFuIGNvbm5lY3Rpb24gYmV0d2VlbiB0d28gcG9pbnRzLlxuICpcbiAqIEBleGFtcGxlIGg6aCAoaG9yaXpvbnRhbDpob3Jpem9udGFsKVxuICpcbiAqIFthXS0tLS1beF1cbiAqICAgICAgICAgfFxuICogICAgICAgIFt4XS0tLS1bYl1cbiAqXG4gKiBAZXhhbXBsZSBoOnYgKGhvcml6b250YWw6dmVydGljYWwpXG4gKlxuICogW2FdLS0tLVt4XVxuICogICAgICAgICB8XG4gKiAgICAgICAgW2JdXG4gKlxuICogQGV4YW1wbGUgaDpyIChob3Jpem9udGFsOnJpZ2h0KVxuICpcbiAqIFthXS0tLS1beF1cbiAqICAgICAgICAgfFxuICogICAgW2JdLVt4XVxuICpcbiAqIEBwYXJhbSAge1BvaW50fSBhXG4gKiBAcGFyYW0gIHtQb2ludH0gYlxuICogQHBhcmFtICB7c3RyaW5nfSBkaXJlY3Rpb25zXG4gKlxuICogQHJldHVybiB7QXJyYXk8UG9pbnQ+fVxuICovXG5mdW5jdGlvbiBnZXRCZW5kcG9pbnRzKGEsIGIsIGRpcmVjdGlvbnMpIHtcbiAgZGlyZWN0aW9ucyA9IGRpcmVjdGlvbnMgfHwgJ2g6aCc7XG5cbiAgaWYgKCFpc1ZhbGlkRGlyZWN0aW9ucyhkaXJlY3Rpb25zKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICd1bmtub3duIGRpcmVjdGlvbnM6IDwnICsgZGlyZWN0aW9ucyArICc+OiAnICtcbiAgICAgICdtdXN0IGJlIHNwZWNpZmllZCBhcyA8c3RhcnQ+OjxlbmQ+ICcgK1xuICAgICAgJ3dpdGggc3RhcnQvZW5kIGluIHsgaCx2LHQscixiLGwgfSdcbiAgICApO1xuICB9XG5cbiAgLy8gY29tcHV0ZSBleHBsaWNpdCBkaXJlY3Rpb25zLCBpbnZvbHZpbmcgdHJibCBkb2NraW5nc1xuICAvLyB1c2luZyBhIHRocmVlIHNlZ21lbnRlZCBsYXlvdXRpbmcgYWxnb3JpdGhtXG4gIGlmIChpc0V4cGxpY2l0RGlyZWN0aW9ucyhkaXJlY3Rpb25zKSkge1xuICAgIHZhciBzdGFydFNlZ21lbnQgPSBnZXRTdGFydFNlZ21lbnQoYSwgYiwgZGlyZWN0aW9ucyksXG4gICAgICAgIGVuZFNlZ21lbnQgPSBnZXRFbmRTZWdtZW50KGEsIGIsIGRpcmVjdGlvbnMpLFxuICAgICAgICBtaWRTZWdtZW50ID0gZ2V0TWlkU2VnbWVudChzdGFydFNlZ21lbnQsIGVuZFNlZ21lbnQpO1xuXG4gICAgcmV0dXJuIFtdLmNvbmNhdChcbiAgICAgIHN0YXJ0U2VnbWVudC53YXlwb2ludHMsXG4gICAgICBtaWRTZWdtZW50LndheXBvaW50cyxcbiAgICAgIGVuZFNlZ21lbnQud2F5cG9pbnRzXG4gICAgKTtcbiAgfVxuXG4gIC8vIGhhbmRsZSBzaW1wbGUgW2h2XTpbaHZdIGNhc2VzIHRoYXQgY2FuIGJlIGVhc2lseSBjb21wdXRlZFxuICByZXR1cm4gZ2V0U2ltcGxlQmVuZHBvaW50cyhhLCBiLCBkaXJlY3Rpb25zKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIHR3byBwb2ludHMgYWNjb3JkaW5nXG4gKiB0byB0aGUgbWFuaGF0dGFuIGxheW91dCAob25seSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCkgZWRnZXMuXG4gKlxuICogQHBhcmFtIHtQb2ludH0gYVxuICogQHBhcmFtIHtQb2ludH0gYlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZGlyZWN0aW9ucz0naDpoJ10gc3BlY2lmaWVzIG1hbmhhdHRhbiBkaXJlY3Rpb25zIGZvciBlYWNoIHBvaW50IGFzIHthZGlyZWN0aW9ufTp7YmRpcmVjdGlvbn0uXG4gICAgICAgICAgICAgICAgICAgQSBkaXJlY3Rpb25mb3IgYSBwb2ludCBpcyBlaXRoZXIgYGhgIChob3Jpem9udGFsKSBvciBgdmAgKHZlcnRpY2FsKVxuICpcbiAqIEByZXR1cm4ge0FycmF5PFBvaW50Pn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbm5lY3RQb2ludHMoYSwgYiwgZGlyZWN0aW9ucykge1xuXG4gIHZhciBwb2ludHMgPSBnZXRCZW5kcG9pbnRzKGEsIGIsIGRpcmVjdGlvbnMpO1xuXG4gIHBvaW50cy51bnNoaWZ0KGEpO1xuICBwb2ludHMucHVzaChiKTtcblxuICByZXR1cm4gd2l0aG91dFJlZHVuZGFudFBvaW50cyhwb2ludHMpO1xufVxuXG5cbi8qKlxuICogQ29ubmVjdCB0d28gcmVjdGFuZ2xlcyB1c2luZyBhIG1hbmhhdHRhbiBsYXlvdXRlZCBjb25uZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7Qm91bmRzfSBzb3VyY2Ugc291cmNlIHJlY3RhbmdsZVxuICogQHBhcmFtIHtCb3VuZHN9IHRhcmdldCB0YXJnZXQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0ge1BvaW50fSBbc3RhcnRdIHNvdXJjZSBkb2NraW5nXG4gKiBAcGFyYW0ge1BvaW50fSBbZW5kXSB0YXJnZXQgZG9ja2luZ1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbaGludHNdXG4gKiBAcGFyYW0ge3N0cmluZ30gW2hpbnRzLnByZXNlcnZlRG9ja2luZz1zb3VyY2VdIHByZXNlcnZlIGRvY2tpbmcgb24gc2VsZWN0ZWQgc2lkZVxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBbaGludHMucHJlZmVycmVkTGF5b3V0c11cbiAqIEBwYXJhbSB7UG9pbnR8Ym9vbGVhbn0gW2hpbnRzLmNvbm5lY3Rpb25TdGFydF0gd2hldGhlciB0aGUgc3RhcnQgY2hhbmdlZFxuICogQHBhcmFtIHtQb2ludHxib29sZWFufSBbaGludHMuY29ubmVjdGlvbkVuZF0gd2hldGhlciB0aGUgZW5kIGNoYW5nZWRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxQb2ludD59IGNvbm5lY3Rpb24gcG9pbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25uZWN0UmVjdGFuZ2xlcyhzb3VyY2UsIHRhcmdldCwgc3RhcnQsIGVuZCwgaGludHMpIHtcblxuICB2YXIgcHJlZmVycmVkTGF5b3V0cyA9IGhpbnRzICYmIGhpbnRzLnByZWZlcnJlZExheW91dHMgfHwgW107XG5cbiAgdmFyIHByZWZlcnJlZExheW91dCA9IHdpdGhvdXQocHJlZmVycmVkTGF5b3V0cywgJ3N0cmFpZ2h0JylbMF0gfHwgJ2g6aCc7XG5cbiAgdmFyIHRocmVzaG9sZCA9IE9SSUVOVEFUSU9OX1RIUkVTSE9MRFtwcmVmZXJyZWRMYXlvdXRdIHx8IDA7XG5cbiAgdmFyIG9yaWVudGF0aW9uID0gZ2V0T3JpZW50YXRpb24oc291cmNlLCB0YXJnZXQsIHRocmVzaG9sZCk7XG5cbiAgdmFyIGRpcmVjdGlvbnMgPSBnZXREaXJlY3Rpb25zKG9yaWVudGF0aW9uLCBwcmVmZXJyZWRMYXlvdXQpO1xuXG4gIHN0YXJ0ID0gc3RhcnQgfHwgZ2V0TWlkKHNvdXJjZSk7XG4gIGVuZCA9IGVuZCB8fCBnZXRNaWQodGFyZ2V0KTtcblxuICB2YXIgZGlyZWN0aW9uU3BsaXQgPSBkaXJlY3Rpb25zLnNwbGl0KCc6Jyk7XG5cbiAgLy8gY29tcHV0ZSBhY3R1YWwgZG9ja2luZyBwb2ludHMgZm9yIHN0YXJ0IC8gZW5kXG4gIC8vIHRoaXMgZW5zdXJlcyB3ZSBwcm9wZXJseSBsYXlvdXQgb25seSBwYXJ0cyBvZiB0aGVcbiAgLy8gY29ubmVjdGlvbiB0aGF0IGxpZXMgaW4gYmV0d2VlbiB0aGUgdHdvIHJlY3RhbmdsZXNcbiAgdmFyIHN0YXJ0RG9ja2luZyA9IGdldERvY2tpbmdQb2ludChzdGFydCwgc291cmNlLCBkaXJlY3Rpb25TcGxpdFswXSwgaW52ZXJ0T3JpZW50YXRpb24ob3JpZW50YXRpb24pKSxcbiAgICAgIGVuZERvY2tpbmcgPSBnZXREb2NraW5nUG9pbnQoZW5kLCB0YXJnZXQsIGRpcmVjdGlvblNwbGl0WzFdLCBvcmllbnRhdGlvbik7XG5cbiAgcmV0dXJuIGNvbm5lY3RQb2ludHMoc3RhcnREb2NraW5nLCBlbmREb2NraW5nLCBkaXJlY3Rpb25zKTtcbn1cblxuXG4vKipcbiAqIFJlcGFpciB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHR3byByZWN0YW5nbGVzLCBvZiB3aGljaCBvbmUgaGFzIGJlZW4gdXBkYXRlZC5cbiAqXG4gKiBAcGFyYW0ge0JvdW5kc30gc291cmNlXG4gKiBAcGFyYW0ge0JvdW5kc30gdGFyZ2V0XG4gKiBAcGFyYW0ge1BvaW50fSBbc3RhcnRdXG4gKiBAcGFyYW0ge1BvaW50fSBbZW5kXVxuICogQHBhcmFtIHtBcnJheTxQb2ludD59IFt3YXlwb2ludHNdXG4gKiBAcGFyYW0ge09iamVjdH0gW2hpbnRzXVxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBbaGludHMucHJlZmVycmVkTGF5b3V0c10gbGlzdCBvZiBwcmVmZXJyZWQgbGF5b3V0c1xuICogQHBhcmFtIHtib29sZWFufSBbaGludHMuY29ubmVjdGlvblN0YXJ0XVxuICogQHBhcmFtIHtib29sZWFufSBbaGludHMuY29ubmVjdGlvbkVuZF1cbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxQb2ludD59IHJlcGFpcmVkIHdheXBvaW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwYWlyQ29ubmVjdGlvbihzb3VyY2UsIHRhcmdldCwgc3RhcnQsIGVuZCwgd2F5cG9pbnRzLCBoaW50cykge1xuXG4gIGlmIChpc0FycmF5KHN0YXJ0KSkge1xuICAgIHdheXBvaW50cyA9IHN0YXJ0O1xuICAgIGhpbnRzID0gZW5kO1xuXG4gICAgc3RhcnQgPSBnZXRNaWQoc291cmNlKTtcbiAgICBlbmQgPSBnZXRNaWQodGFyZ2V0KTtcbiAgfVxuXG4gIGhpbnRzID0gYXNzaWduKHsgcHJlZmVycmVkTGF5b3V0czogW10gfSwgaGludHMpO1xuICB3YXlwb2ludHMgPSB3YXlwb2ludHMgfHwgW107XG5cbiAgdmFyIHByZWZlcnJlZExheW91dHMgPSBoaW50cy5wcmVmZXJyZWRMYXlvdXRzLFxuICAgICAgcHJlZmVyU3RyYWlnaHQgPSBwcmVmZXJyZWRMYXlvdXRzLmluZGV4T2YoJ3N0cmFpZ2h0JykgIT09IC0xLFxuICAgICAgcmVwYWlyZWRXYXlwb2ludHM7XG5cbiAgLy8ganVzdCBsYXlvdXQgbm9uLWV4aXN0aW5nIG9yIHNpbXBsZSBjb25uZWN0aW9uc1xuICAvLyBhdHRlbXB0IHRvIHJlbmRlciBzdHJhaWdodCBsaW5lcywgaWYgcmVxdWlyZWRcblxuICAvLyBhdHRlbXB0IHRvIGxheW91dCBhIHN0cmFpZ2h0IGxpbmVcbiAgcmVwYWlyZWRXYXlwb2ludHMgPSBwcmVmZXJTdHJhaWdodCAmJiB0cnlMYXlvdXRTdHJhaWdodChzb3VyY2UsIHRhcmdldCwgc3RhcnQsIGVuZCwgaGludHMpO1xuXG4gIGlmIChyZXBhaXJlZFdheXBvaW50cykge1xuICAgIHJldHVybiByZXBhaXJlZFdheXBvaW50cztcbiAgfVxuXG4gIC8vIHRyeSB0byBsYXlvdXQgZnJvbSBlbmRcbiAgcmVwYWlyZWRXYXlwb2ludHMgPSBoaW50cy5jb25uZWN0aW9uRW5kICYmIHRyeVJlcGFpckNvbm5lY3Rpb25FbmQodGFyZ2V0LCBzb3VyY2UsIGVuZCwgd2F5cG9pbnRzKTtcblxuICBpZiAocmVwYWlyZWRXYXlwb2ludHMpIHtcbiAgICByZXR1cm4gcmVwYWlyZWRXYXlwb2ludHM7XG4gIH1cblxuICAvLyB0cnkgdG8gbGF5b3V0IGZyb20gc3RhcnRcbiAgcmVwYWlyZWRXYXlwb2ludHMgPSBoaW50cy5jb25uZWN0aW9uU3RhcnQgJiYgdHJ5UmVwYWlyQ29ubmVjdGlvblN0YXJ0KHNvdXJjZSwgdGFyZ2V0LCBzdGFydCwgd2F5cG9pbnRzKTtcblxuICBpZiAocmVwYWlyZWRXYXlwb2ludHMpIHtcbiAgICByZXR1cm4gcmVwYWlyZWRXYXlwb2ludHM7XG4gIH1cblxuICAvLyBvciB3aGV0aGVyIG5vdGhpbmcgc2VlbXMgdG8gaGF2ZSBjaGFuZ2VkXG4gIGlmICghaGludHMuY29ubmVjdGlvblN0YXJ0ICYmICFoaW50cy5jb25uZWN0aW9uRW5kICYmIHdheXBvaW50cyAmJiB3YXlwb2ludHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHdheXBvaW50cztcbiAgfVxuXG4gIC8vIHNpbXBseSByZWNvbm5lY3QgaWYgbm90aGluZyBlbHNlIHdvcmtlZFxuICByZXR1cm4gY29ubmVjdFJlY3RhbmdsZXMoc291cmNlLCB0YXJnZXQsIHN0YXJ0LCBlbmQsIGhpbnRzKTtcbn1cblxuXG5mdW5jdGlvbiBpblJhbmdlKGEsIHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGEgPj0gc3RhcnQgJiYgYSA8PSBlbmQ7XG59XG5cbmZ1bmN0aW9uIGlzSW5SYW5nZShheGlzLCBhLCBiKSB7XG4gIHZhciBzaXplID0ge1xuICAgIHg6ICd3aWR0aCcsXG4gICAgeTogJ2hlaWdodCdcbiAgfTtcblxuICByZXR1cm4gaW5SYW5nZShhW2F4aXNdLCBiW2F4aXNdLCBiW2F4aXNdICsgYltzaXplW2F4aXNdXSk7XG59XG5cbi8qKlxuICogTGF5b3V0IGEgc3RyYWlnaHQgY29ubmVjdGlvblxuICpcbiAqIEBwYXJhbSB7Qm91bmRzfSBzb3VyY2VcbiAqIEBwYXJhbSB7Qm91bmRzfSB0YXJnZXRcbiAqIEBwYXJhbSB7UG9pbnR9IHN0YXJ0XG4gKiBAcGFyYW0ge1BvaW50fSBlbmRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbaGludHNdXG4gKlxuICogQHJldHVybiB7QXJyYXk8UG9pbnQ+fG51bGx9IHdheXBvaW50cyBpZiBzdHJhaWdodCBsYXlvdXQgd29ya2VkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cnlMYXlvdXRTdHJhaWdodChzb3VyY2UsIHRhcmdldCwgc3RhcnQsIGVuZCwgaGludHMpIHtcbiAgdmFyIGF4aXMgPSB7fSxcbiAgICAgIHByaW1hcnlBeGlzLFxuICAgICAgb3JpZW50YXRpb247XG5cbiAgb3JpZW50YXRpb24gPSBnZXRPcmllbnRhdGlvbihzb3VyY2UsIHRhcmdldCk7XG5cbiAgLy8gb25seSBsYXlvdXQgYSBzdHJhaWdodCBjb25uZWN0aW9uIGlmIHNoYXBlcyBhcmVcbiAgLy8gaG9yaXpvbnRhbGx5IG9yIHZlcnRpY2FsbHkgYWxpZ25lZFxuICBpZiAoIS9eKHRvcHxib3R0b218bGVmdHxyaWdodCkkLy50ZXN0KG9yaWVudGF0aW9uKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKC90b3B8Ym90dG9tLy50ZXN0KG9yaWVudGF0aW9uKSkge1xuICAgIHByaW1hcnlBeGlzID0gJ3gnO1xuICB9XG5cbiAgaWYgKC9sZWZ0fHJpZ2h0Ly50ZXN0KG9yaWVudGF0aW9uKSkge1xuICAgIHByaW1hcnlBeGlzID0gJ3knO1xuICB9XG5cbiAgaWYgKGhpbnRzLnByZXNlcnZlRG9ja2luZyA9PT0gJ3RhcmdldCcpIHtcblxuICAgIGlmICghaXNJblJhbmdlKHByaW1hcnlBeGlzLCBlbmQsIHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGF4aXNbcHJpbWFyeUF4aXNdID0gZW5kW3ByaW1hcnlBeGlzXTtcblxuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHg6IGF4aXMueCAhPT0gdW5kZWZpbmVkID8gYXhpcy54IDogc3RhcnQueCxcbiAgICAgICAgeTogYXhpcy55ICE9PSB1bmRlZmluZWQgPyBheGlzLnkgOiBzdGFydC55LFxuICAgICAgICBvcmlnaW5hbDoge1xuICAgICAgICAgIHg6IGF4aXMueCAhPT0gdW5kZWZpbmVkID8gYXhpcy54IDogc3RhcnQueCxcbiAgICAgICAgICB5OiBheGlzLnkgIT09IHVuZGVmaW5lZCA/IGF4aXMueSA6IHN0YXJ0LnlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgeDogZW5kLngsXG4gICAgICAgIHk6IGVuZC55XG4gICAgICB9XG4gICAgXTtcblxuICB9IGVsc2Uge1xuXG4gICAgaWYgKCFpc0luUmFuZ2UocHJpbWFyeUF4aXMsIHN0YXJ0LCB0YXJnZXQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBheGlzW3ByaW1hcnlBeGlzXSA9IHN0YXJ0W3ByaW1hcnlBeGlzXTtcblxuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHg6IHN0YXJ0LngsXG4gICAgICAgIHk6IHN0YXJ0LnlcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHg6IGF4aXMueCAhPT0gdW5kZWZpbmVkID8gYXhpcy54IDogZW5kLngsXG4gICAgICAgIHk6IGF4aXMueSAhPT0gdW5kZWZpbmVkID8gYXhpcy55IDogZW5kLnksXG4gICAgICAgIG9yaWdpbmFsOiB7XG4gICAgICAgICAgeDogYXhpcy54ICE9PSB1bmRlZmluZWQgPyBheGlzLnggOiBlbmQueCxcbiAgICAgICAgICB5OiBheGlzLnkgIT09IHVuZGVmaW5lZCA/IGF4aXMueSA6IGVuZC55XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbn1cblxuLyoqXG4gKiBSZXBhaXIgYSBjb25uZWN0aW9uIGZyb20gc3RhcnQuXG4gKlxuICogQHBhcmFtIHtCb3VuZHN9IG1vdmVkXG4gKiBAcGFyYW0ge0JvdW5kc30gb3RoZXJcbiAqIEBwYXJhbSB7UG9pbnR9IG5ld0RvY2tpbmdcbiAqIEBwYXJhbSB7QXJyYXk8UG9pbnQ+fSBwb2ludHMgb3JpZ2luYWxQb2ludHMgZnJvbSBtb3ZlZCB0byBvdGhlclxuICpcbiAqIEByZXR1cm4ge0FycmF5PFBvaW50PnxudWxsfSB0aGUgcmVwYWlyZWQgcG9pbnRzIGJldHdlZW4gdGhlIHR3byByZWN0YW5nbGVzXG4gKi9cbmZ1bmN0aW9uIHRyeVJlcGFpckNvbm5lY3Rpb25TdGFydChtb3ZlZCwgb3RoZXIsIG5ld0RvY2tpbmcsIHBvaW50cykge1xuICByZXR1cm4gX3RyeVJlcGFpckNvbm5lY3Rpb25TaWRlKG1vdmVkLCBvdGhlciwgbmV3RG9ja2luZywgcG9pbnRzKTtcbn1cblxuLyoqXG4gKiBSZXBhaXIgYSBjb25uZWN0aW9uIGZyb20gZW5kLlxuICpcbiAqIEBwYXJhbSB7Qm91bmRzfSBtb3ZlZFxuICogQHBhcmFtIHtCb3VuZHN9IG90aGVyXG4gKiBAcGFyYW0ge1BvaW50fSBuZXdEb2NraW5nXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gcG9pbnRzIG9yaWdpbmFsUG9pbnRzIGZyb20gbW92ZWQgdG8gb3RoZXJcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxQb2ludD58bnVsbH0gdGhlIHJlcGFpcmVkIHBvaW50cyBiZXR3ZWVuIHRoZSB0d28gcmVjdGFuZ2xlc1xuICovXG5mdW5jdGlvbiB0cnlSZXBhaXJDb25uZWN0aW9uRW5kKG1vdmVkLCBvdGhlciwgbmV3RG9ja2luZywgcG9pbnRzKSB7XG4gIHZhciB3YXlwb2ludHMgPSBwb2ludHMuc2xpY2UoKS5yZXZlcnNlKCk7XG5cbiAgd2F5cG9pbnRzID0gX3RyeVJlcGFpckNvbm5lY3Rpb25TaWRlKG1vdmVkLCBvdGhlciwgbmV3RG9ja2luZywgd2F5cG9pbnRzKTtcblxuICByZXR1cm4gd2F5cG9pbnRzID8gd2F5cG9pbnRzLnJldmVyc2UoKSA6IG51bGw7XG59XG5cbi8qKlxuICogUmVwYWlyIGEgY29ubmVjdGlvbiBmcm9tIG9uZSBzaWRlIHRoYXQgbW92ZWQuXG4gKlxuICogQHBhcmFtIHtCb3VuZHN9IG1vdmVkXG4gKiBAcGFyYW0ge0JvdW5kc30gb3RoZXJcbiAqIEBwYXJhbSB7UG9pbnR9IG5ld0RvY2tpbmdcbiAqIEBwYXJhbSB7QXJyYXk8UG9pbnQ+fSBwb2ludHMgb3JpZ2luYWxQb2ludHMgZnJvbSBtb3ZlZCB0byBvdGhlclxuICpcbiAqIEByZXR1cm4ge0FycmF5PFBvaW50Pn0gdGhlIHJlcGFpcmVkIHBvaW50cyBiZXR3ZWVuIHRoZSB0d28gcmVjdGFuZ2xlc1xuICovXG5mdW5jdGlvbiBfdHJ5UmVwYWlyQ29ubmVjdGlvblNpZGUobW92ZWQsIG90aGVyLCBuZXdEb2NraW5nLCBwb2ludHMpIHtcblxuICBmdW5jdGlvbiBuZWVkc1JlbGF5b3V0KHBvaW50cykge1xuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPiA0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gcmVsYXlvdXQgaWYgdHdvIHBvaW50cyBvdmVybGFwXG4gICAgLy8gdGhpcyBpcyBtb3N0IGxpa2VseSBkdWUgdG9cbiAgICByZXR1cm4gISFmaW5kKHBvaW50cywgZnVuY3Rpb24ocCwgaWR4KSB7XG4gICAgICB2YXIgcSA9IHBvaW50c1tpZHggLSAxXTtcblxuICAgICAgcmV0dXJuIHEgJiYgcG9pbnREaXN0YW5jZShwLCBxKSA8IDM7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXBhaXJCZW5kcG9pbnQoY2FuZGlkYXRlLCBvbGRQZWVyLCBuZXdQZWVyKSB7XG5cbiAgICB2YXIgYWxpZ25tZW50ID0gcG9pbnRzQWxpZ25lZChvbGRQZWVyLCBjYW5kaWRhdGUpO1xuXG4gICAgc3dpdGNoIChhbGlnbm1lbnQpIHtcbiAgICBjYXNlICd2JzpcblxuICAgICAgLy8gcmVwYWlyIGhvcml6b250YWwgYWxpZ25tZW50XG4gICAgICByZXR1cm4geyB4OiBuZXdQZWVyLngsIHk6IGNhbmRpZGF0ZS55IH07XG4gICAgY2FzZSAnaCc6XG5cbiAgICAgIC8vIHJlcGFpciB2ZXJ0aWNhbCBhbGlnbm1lbnRcbiAgICAgIHJldHVybiB7IHg6IGNhbmRpZGF0ZS54LCB5OiBuZXdQZWVyLnkgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB4OiBjYW5kaWRhdGUueCwgeTogY2FuZGlkYXRlLiB5IH07XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVPdmVybGFwcGluZyhwb2ludHMsIGEsIGIpIHtcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IHBvaW50cy5sZW5ndGggLSAyOyBpICE9PSAwOyBpLS0pIHtcblxuICAgICAgLy8gaW50ZXJzZWN0cyAoPykgYnJlYWssIHJlbW92ZSBhbGwgYmVuZHBvaW50cyB1cCB0byB0aGlzIG9uZSBhbmQgcmVsYXlvdXRcbiAgICAgIGlmIChwb2ludEluUmVjdChwb2ludHNbaV0sIGEsIElOVEVSU0VDVElPTl9USFJFU0hPTEQpIHx8XG4gICAgICAgICAgcG9pbnRJblJlY3QocG9pbnRzW2ldLCBiLCBJTlRFUlNFQ1RJT05fVEhSRVNIT0xEKSkge1xuXG4gICAgICAgIC8vIHJldHVybiBzbGljZWQgb2xkIGNvbm5lY3Rpb25cbiAgICAgICAgcmV0dXJuIHBvaW50cy5zbGljZShpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xuICB9XG5cbiAgLy8gKDApIG9ubHkgcmVwYWlyIHdoYXQgaGFzIGxheW91dGFibGUgYmVuZHBvaW50c1xuXG4gIC8vICgxKSBpZiBvbmx5IG9uZSBiZW5kcG9pbnQgYW5kIG9uIHNoYXBlIG1vdmVkIG9udG8gb3RoZXIgc2hhcGVzIGF4aXNcbiAgLy8gICAgIChob3Jpem9udGFsbHkgLyB2ZXJ0aWNhbGx5KSwgcmVsYXlvdXRcblxuICBpZiAobmVlZHNSZWxheW91dChwb2ludHMpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgb2xkRG9ja2luZyA9IHBvaW50c1swXSxcbiAgICAgIG5ld1BvaW50cyA9IHBvaW50cy5zbGljZSgpLFxuICAgICAgc2xpY2VkUG9pbnRzO1xuXG4gIC8vICgyKSByZXBhaXIgb25seSBsYXN0IGxpbmUgc2VnbWVudCBhbmQgb25seSBpZiBpdCB3YXMgbGF5b3V0ZWQgYmVmb3JlXG5cbiAgbmV3UG9pbnRzWzBdID0gbmV3RG9ja2luZztcbiAgbmV3UG9pbnRzWzFdID0gcmVwYWlyQmVuZHBvaW50KG5ld1BvaW50c1sxXSwgb2xkRG9ja2luZywgbmV3RG9ja2luZyk7XG5cblxuICAvLyAoMykgaWYgc2hhcGUgaW50ZXJzZWN0cyB3aXRoIGFueSBiZW5kcG9pbnQgYWZ0ZXIgcmVwYWlyLFxuICAvLyAgICAgcmVtb3ZlIGFsbCBzZWdtZW50cyB1cCB0byB0aGlzIGJlbmRwb2ludCBhbmQgcmVwYWlyIGZyb20gdGhlcmVcbiAgc2xpY2VkUG9pbnRzID0gcmVtb3ZlT3ZlcmxhcHBpbmcobmV3UG9pbnRzLCBtb3ZlZCwgb3RoZXIpO1xuXG4gIGlmIChzbGljZWRQb2ludHMgIT09IG5ld1BvaW50cykge1xuICAgIG5ld1BvaW50cyA9IF90cnlSZXBhaXJDb25uZWN0aW9uU2lkZShtb3ZlZCwgb3RoZXIsIG5ld0RvY2tpbmcsIHNsaWNlZFBvaW50cyk7XG4gIH1cblxuICAvLyAoNCkgZG8gTk9UIHJlcGFpciBpZiByZXBhaXJlZCBiZW5kcG9pbnRzIGFyZSBhbGlnbmVkXG4gIGlmIChuZXdQb2ludHMgJiYgcG9pbnRzQWxpZ25lZChuZXdQb2ludHMpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV3UG9pbnRzO1xufVxuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgbWFuaGF0dGFuIGRpcmVjdGlvbnMgY29ubmVjdGluZyB0d28gcmVjdGFuZ2xlc1xuICogd2l0aCB0aGUgZ2l2ZW4gb3JpZW50YXRpb24uXG4gKlxuICogV2lsbCBhbHdheXMgcmV0dXJuIHRoZSBkZWZhdWx0IGxheW91dCwgaWYgaXQgaXMgc3BlY2lmaWNcbiAqIHJlZ2FyZGluZyBzaWRlcyBhbHJlYWR5ICh0cmJsKS5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGdldERpcmVjdGlvbnMoJ3RvcCcpOyAvLyAtPiAndjp2J1xuICogZ2V0RGlyZWN0aW9ucygnaW50ZXJzZWN0Jyk7IC8vIC0+ICd0OnQnXG4gKlxuICogZ2V0RGlyZWN0aW9ucygndG9wLXJpZ2h0JywgJ3Y6aCcpOyAvLyAtPiAndjpoJ1xuICogZ2V0RGlyZWN0aW9ucygndG9wLXJpZ2h0JywgJ2g6aCcpOyAvLyAtPiAnaDpoJ1xuICpcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gb3JpZW50YXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBkZWZhdWx0TGF5b3V0XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXREaXJlY3Rpb25zKG9yaWVudGF0aW9uLCBkZWZhdWx0TGF5b3V0KSB7XG5cbiAgLy8gZG9uJ3Qgb3ZlcnJpZGUgc3BlY2lmaWMgdHJibCBkaXJlY3Rpb25zXG4gIGlmIChpc0V4cGxpY2l0RGlyZWN0aW9ucyhkZWZhdWx0TGF5b3V0KSkge1xuICAgIHJldHVybiBkZWZhdWx0TGF5b3V0O1xuICB9XG5cbiAgc3dpdGNoIChvcmllbnRhdGlvbikge1xuICBjYXNlICdpbnRlcnNlY3QnOlxuICAgIHJldHVybiAndDp0JztcblxuICBjYXNlICd0b3AnOlxuICBjYXNlICdib3R0b20nOlxuICAgIHJldHVybiAndjp2JztcblxuICBjYXNlICdsZWZ0JzpcbiAgY2FzZSAncmlnaHQnOlxuICAgIHJldHVybiAnaDpoJztcblxuICAvLyAndG9wLWxlZnQnXG4gIC8vICd0b3AtcmlnaHQnXG4gIC8vICdib3R0b20tbGVmdCdcbiAgLy8gJ2JvdHRvbS1yaWdodCdcbiAgZGVmYXVsdDpcbiAgICByZXR1cm4gZGVmYXVsdExheW91dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1ZhbGlkRGlyZWN0aW9ucyhkaXJlY3Rpb25zKSB7XG4gIHJldHVybiBkaXJlY3Rpb25zICYmIC9eaHx2fHR8cnxifGw6aHx2fHR8cnxifGwkLy50ZXN0KGRpcmVjdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBpc0V4cGxpY2l0RGlyZWN0aW9ucyhkaXJlY3Rpb25zKSB7XG4gIHJldHVybiBkaXJlY3Rpb25zICYmIC90fHJ8YnxsLy50ZXN0KGRpcmVjdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBpbnZlcnRPcmllbnRhdGlvbihvcmllbnRhdGlvbikge1xuICByZXR1cm4ge1xuICAgICd0b3AnOiAnYm90dG9tJyxcbiAgICAnYm90dG9tJzogJ3RvcCcsXG4gICAgJ2xlZnQnOiAncmlnaHQnLFxuICAgICdyaWdodCc6ICdsZWZ0JyxcbiAgICAndG9wLWxlZnQnOiAnYm90dG9tLXJpZ2h0JyxcbiAgICAnYm90dG9tLXJpZ2h0JzogJ3RvcC1sZWZ0JyxcbiAgICAndG9wLXJpZ2h0JzogJ2JvdHRvbS1sZWZ0JyxcbiAgICAnYm90dG9tLWxlZnQnOiAndG9wLXJpZ2h0JyxcbiAgfVtvcmllbnRhdGlvbl07XG59XG5cbmZ1bmN0aW9uIGdldERvY2tpbmdQb2ludChwb2ludCwgcmVjdGFuZ2xlLCBkb2NraW5nRGlyZWN0aW9uLCB0YXJnZXRPcmllbnRhdGlvbikge1xuXG4gIC8vIGVuc3VyZSB3ZSBlbmQgdXAgd2l0aCBhIHNwZWNpZmljIGRvY2tpbmcgZGlyZWN0aW9uXG4gIC8vIGJhc2VkIG9uIHRoZSB0YXJnZXRPcmllbnRhdGlvbiwgaWYgPGh8dj4gaXMgYmVpbmcgcGFzc2VkXG5cbiAgaWYgKGRvY2tpbmdEaXJlY3Rpb24gPT09ICdoJykge1xuICAgIGRvY2tpbmdEaXJlY3Rpb24gPSAvbGVmdC8udGVzdCh0YXJnZXRPcmllbnRhdGlvbikgPyAnbCcgOiAncic7XG4gIH1cblxuICBpZiAoZG9ja2luZ0RpcmVjdGlvbiA9PT0gJ3YnKSB7XG4gICAgZG9ja2luZ0RpcmVjdGlvbiA9IC90b3AvLnRlc3QodGFyZ2V0T3JpZW50YXRpb24pID8gJ3QnIDogJ2InO1xuICB9XG5cbiAgaWYgKGRvY2tpbmdEaXJlY3Rpb24gPT09ICd0Jykge1xuICAgIHJldHVybiB7IG9yaWdpbmFsOiBwb2ludCwgeDogcG9pbnQueCwgeTogcmVjdGFuZ2xlLnkgfTtcbiAgfVxuXG4gIGlmIChkb2NraW5nRGlyZWN0aW9uID09PSAncicpIHtcbiAgICByZXR1cm4geyBvcmlnaW5hbDogcG9pbnQsIHg6IHJlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoLCB5OiBwb2ludC55IH07XG4gIH1cblxuICBpZiAoZG9ja2luZ0RpcmVjdGlvbiA9PT0gJ2InKSB7XG4gICAgcmV0dXJuIHsgb3JpZ2luYWw6IHBvaW50LCB4OiBwb2ludC54LCB5OiByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgfTtcbiAgfVxuXG4gIGlmIChkb2NraW5nRGlyZWN0aW9uID09PSAnbCcpIHtcbiAgICByZXR1cm4geyBvcmlnaW5hbDogcG9pbnQsIHg6IHJlY3RhbmdsZS54LCB5OiBwb2ludC55IH07XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgZG9ja2luZ0RpcmVjdGlvbjogPCcgKyBkb2NraW5nRGlyZWN0aW9uICsgJz4nKTtcbn1cblxuXG4vKipcbiAqIFJldHVybiBsaXN0IG9mIHdheXBvaW50cyB3aXRoIHJlZHVuZGFudCBvbmVzIGZpbHRlcmVkIG91dC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIE9yaWdpbmFsIHBvaW50czpcbiAqXG4gKiAgIFt4XSAtLS0tLSBbeF0gLS0tLS0tIFt4XVxuICogICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICBbeF0gLS0tLS0gW3hdIC0gW3hdXG4gKlxuICogRmlsdGVyZWQ6XG4gKlxuICogICBbeF0gLS0tLS0tLS0tLS0tLS0tLSBbeF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgW3hdIC0tLS0tLS0tLS0tIFt4XVxuICpcbiAqIEBwYXJhbSAge0FycmF5PFBvaW50Pn0gd2F5cG9pbnRzXG4gKlxuICogQHJldHVybiB7QXJyYXk8UG9pbnQ+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aG91dFJlZHVuZGFudFBvaW50cyh3YXlwb2ludHMpIHtcbiAgcmV0dXJuIHdheXBvaW50cy5yZWR1Y2UoZnVuY3Rpb24ocG9pbnRzLCBwLCBpZHgpIHtcblxuICAgIHZhciBwcmV2aW91cyA9IHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0sXG4gICAgICAgIG5leHQgPSB3YXlwb2ludHNbaWR4ICsgMV07XG5cbiAgICBpZiAoIXBvaW50c09uTGluZShwcmV2aW91cywgbmV4dCwgcCwgMCkpIHtcbiAgICAgIHBvaW50cy5wdXNoKHApO1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludHM7XG4gIH0sIFtdKTtcbn1cbiIsImltcG9ydCB7IGFzc2lnbiB9IGZyb20gJ21pbi1kYXNoJztcbmltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBSZWZzIGZyb20gJ29iamVjdC1yZWZzJztcblxudmFyIHBhcmVudFJlZnMgPSBuZXcgUmVmcyh7IG5hbWU6ICdjaGlsZHJlbicsIGVudW1lcmFibGU6IHRydWUsIGNvbGxlY3Rpb246IHRydWUgfSwgeyBuYW1lOiAncGFyZW50JyB9KSxcbiAgICBsYWJlbFJlZnMgPSBuZXcgUmVmcyh7IG5hbWU6ICdsYWJlbHMnLCBlbnVtZXJhYmxlOiB0cnVlLCBjb2xsZWN0aW9uOiB0cnVlIH0sIHsgbmFtZTogJ2xhYmVsVGFyZ2V0JyB9KSxcbiAgICBhdHRhY2hlclJlZnMgPSBuZXcgUmVmcyh7IG5hbWU6ICdhdHRhY2hlcnMnLCBjb2xsZWN0aW9uOiB0cnVlIH0sIHsgbmFtZTogJ2hvc3QnIH0pLFxuICAgIG91dGdvaW5nUmVmcyA9IG5ldyBSZWZzKHsgbmFtZTogJ291dGdvaW5nJywgY29sbGVjdGlvbjogdHJ1ZSB9LCB7IG5hbWU6ICdzb3VyY2UnIH0pLFxuICAgIGluY29taW5nUmVmcyA9IG5ldyBSZWZzKHsgbmFtZTogJ2luY29taW5nJywgY29sbGVjdGlvbjogdHJ1ZSB9LCB7IG5hbWU6ICd0YXJnZXQnIH0pO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgZGpzLm1vZGVsXG4gKi9cblxuLyoqXG4gKiBAbWVtYmVyT2YgZGpzLm1vZGVsXG4gKi9cblxuLyoqXG4gKiBUaGUgYmFzaWMgZ3JhcGhpY2FsIHJlcHJlc2VudGF0aW9uXG4gKlxuICogQGNsYXNzXG4gKlxuICogQGFic3RyYWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBCYXNlKCkge1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHRoYXQgYmFja3MgdXAgdGhlIHNoYXBlXG4gICAqXG4gICAqIEBuYW1lIEJhc2UjYnVzaW5lc3NPYmplY3RcbiAgICogQHR5cGUgT2JqZWN0XG4gICAqL1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2J1c2luZXNzT2JqZWN0Jywge1xuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pO1xuXG5cbiAgLyoqXG4gICAqIFNpbmdsZSBsYWJlbCBzdXBwb3J0LCB3aWxsIG1hcHBlZCB0byBtdWx0aSBsYWJlbCBhcnJheVxuICAgKlxuICAgKiBAbmFtZSBCYXNlI2xhYmVsXG4gICAqIEB0eXBlIE9iamVjdFxuICAgKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdsYWJlbCcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMubGFiZWxzWzBdO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbihuZXdMYWJlbCkge1xuXG4gICAgICB2YXIgbGFiZWwgPSB0aGlzLmxhYmVsLFxuICAgICAgICAgIGxhYmVscyA9IHRoaXMubGFiZWxzO1xuXG4gICAgICBpZiAoIW5ld0xhYmVsICYmIGxhYmVsKSB7XG4gICAgICAgIGxhYmVscy5yZW1vdmUobGFiZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGFiZWxzLmFkZChuZXdMYWJlbCwgMCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogVGhlIHBhcmVudCBzaGFwZVxuICAgKlxuICAgKiBAbmFtZSBCYXNlI3BhcmVudFxuICAgKiBAdHlwZSBTaGFwZVxuICAgKi9cbiAgcGFyZW50UmVmcy5iaW5kKHRoaXMsICdwYXJlbnQnKTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgbGFiZWxzXG4gICAqXG4gICAqIEBuYW1lIEJhc2UjbGFiZWxzXG4gICAqIEB0eXBlIExhYmVsXG4gICAqL1xuICBsYWJlbFJlZnMuYmluZCh0aGlzLCAnbGFiZWxzJyk7XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIG91dGdvaW5nIGNvbm5lY3Rpb25zXG4gICAqXG4gICAqIEBuYW1lIEJhc2Ujb3V0Z29pbmdcbiAgICogQHR5cGUgQXJyYXk8Q29ubmVjdGlvbj5cbiAgICovXG4gIG91dGdvaW5nUmVmcy5iaW5kKHRoaXMsICdvdXRnb2luZycpO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBpbmNvbWluZyBjb25uZWN0aW9uc1xuICAgKlxuICAgKiBAbmFtZSBCYXNlI2luY29taW5nXG4gICAqIEB0eXBlIEFycmF5PENvbm5lY3Rpb24+XG4gICAqL1xuICBpbmNvbWluZ1JlZnMuYmluZCh0aGlzLCAnaW5jb21pbmcnKTtcbn1cblxuXG4vKipcbiAqIEEgZ3JhcGhpY2FsIG9iamVjdFxuICpcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQGV4dGVuZHMgQmFzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gU2hhcGUoKSB7XG4gIEJhc2UuY2FsbCh0aGlzKTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGZyYW1lIHNoYXBlc1xuICAgKlxuICAgKiBAbmFtZSBTaGFwZSNpc0ZyYW1lXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICovXG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGNoaWxkcmVuXG4gICAqXG4gICAqIEBuYW1lIFNoYXBlI2NoaWxkcmVuXG4gICAqIEB0eXBlIEFycmF5PEJhc2U+XG4gICAqL1xuICBwYXJlbnRSZWZzLmJpbmQodGhpcywgJ2NoaWxkcmVuJyk7XG5cbiAgLyoqXG4gICAqIEBuYW1lIFNoYXBlI2hvc3RcbiAgICogQHR5cGUgU2hhcGVcbiAgICovXG4gIGF0dGFjaGVyUmVmcy5iaW5kKHRoaXMsICdob3N0Jyk7XG5cbiAgLyoqXG4gICAqIEBuYW1lIFNoYXBlI2F0dGFjaGVyc1xuICAgKiBAdHlwZSBTaGFwZVxuICAgKi9cbiAgYXR0YWNoZXJSZWZzLmJpbmQodGhpcywgJ2F0dGFjaGVycycpO1xufVxuXG5pbmhlcml0cyhTaGFwZSwgQmFzZSk7XG5cblxuLyoqXG4gKiBBIHJvb3QgZ3JhcGhpY2FsIG9iamVjdFxuICpcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQGV4dGVuZHMgU2hhcGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJvb3QoKSB7XG4gIFNoYXBlLmNhbGwodGhpcyk7XG59XG5cbmluaGVyaXRzKFJvb3QsIFNoYXBlKTtcblxuXG4vKipcbiAqIEEgbGFiZWwgZm9yIGFuIGVsZW1lbnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBjb25zdHJ1Y3RvclxuICpcbiAqIEBleHRlbmRzIFNoYXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBMYWJlbCgpIHtcbiAgU2hhcGUuY2FsbCh0aGlzKTtcblxuICAvKipcbiAgICogVGhlIGxhYmVsZWQgZWxlbWVudFxuICAgKlxuICAgKiBAbmFtZSBMYWJlbCNsYWJlbFRhcmdldFxuICAgKiBAdHlwZSBCYXNlXG4gICAqL1xuICBsYWJlbFJlZnMuYmluZCh0aGlzLCAnbGFiZWxUYXJnZXQnKTtcbn1cblxuaW5oZXJpdHMoTGFiZWwsIFNoYXBlKTtcblxuXG4vKipcbiAqIEEgY29ubmVjdGlvbiBiZXR3ZWVuIHR3byBlbGVtZW50c1xuICpcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQGV4dGVuZHMgQmFzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gQ29ubmVjdGlvbigpIHtcbiAgQmFzZS5jYWxsKHRoaXMpO1xuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0aGlzIGNvbm5lY3Rpb24gb3JpZ2luYXRlcyBmcm9tXG4gICAqXG4gICAqIEBuYW1lIENvbm5lY3Rpb24jc291cmNlXG4gICAqIEB0eXBlIEJhc2VcbiAgICovXG4gIG91dGdvaW5nUmVmcy5iaW5kKHRoaXMsICdzb3VyY2UnKTtcblxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdGhpcyBjb25uZWN0aW9uIHBvaW50cyB0b1xuICAgKlxuICAgKiBAbmFtZSBDb25uZWN0aW9uI3RhcmdldFxuICAgKiBAdHlwZSBCYXNlXG4gICAqL1xuICBpbmNvbWluZ1JlZnMuYmluZCh0aGlzLCAndGFyZ2V0Jyk7XG59XG5cbmluaGVyaXRzKENvbm5lY3Rpb24sIEJhc2UpO1xuXG5cbnZhciB0eXBlcyA9IHtcbiAgY29ubmVjdGlvbjogQ29ubmVjdGlvbixcbiAgc2hhcGU6IFNoYXBlLFxuICBsYWJlbDogTGFiZWwsXG4gIHJvb3Q6IFJvb3Rcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBtb2RlbCBlbGVtZW50IG9mIHRoZSBzcGVjaWZpZWQgdHlwZVxuICpcbiAqIEBtZXRob2QgY3JlYXRlXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgc2hhcGUxID0gTW9kZWwuY3JlYXRlKCdzaGFwZScsIHsgeDogMTAsIHk6IDEwLCB3aWR0aDogMTAwLCBoZWlnaHQ6IDEwMCB9KTtcbiAqIHZhciBzaGFwZTIgPSBNb2RlbC5jcmVhdGUoJ3NoYXBlJywgeyB4OiAyMTAsIHk6IDIxMCwgd2lkdGg6IDEwMCwgaGVpZ2h0OiAxMDAgfSk7XG4gKlxuICogdmFyIGNvbm5lY3Rpb24gPSBNb2RlbC5jcmVhdGUoJ2Nvbm5lY3Rpb24nLCB7IHdheXBvaW50czogWyB7IHg6IDExMCwgeTogNTUgfSwge3g6IDIxMCwgeTogNTUgfSBdIH0pO1xuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gdHlwZSBsb3dlci1jYXNlZCBtb2RlbCBuYW1lXG4gKiBAcGFyYW0gIHtPYmplY3R9IGF0dHJzIGF0dHJpYnV0ZXMgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3IG1vZGVsIGluc3RhbmNlIHdpdGhcbiAqXG4gKiBAcmV0dXJuIHtCYXNlfSB0aGUgbmV3IG1vZGVsIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUodHlwZSwgYXR0cnMpIHtcbiAgdmFyIFR5cGUgPSB0eXBlc1t0eXBlXTtcbiAgaWYgKCFUeXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHR5cGU6IDwnICsgdHlwZSArICc+Jyk7XG4gIH1cbiAgcmV0dXJuIGFzc2lnbihuZXcgVHlwZSgpLCBhdHRycyk7XG59IiwiaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbnZhciBERUZBVUxUX0NPTkZJRyA9IHtcbiAgbW92ZVNwZWVkOiA1MCxcbiAgbW92ZVNwZWVkQWNjZWxlcmF0ZWQ6IDIwMFxufTtcblxuXG4vKipcbiAqIEEgZmVhdHVyZSB0aGF0IGFsbG93cyB1c2VycyB0byBtb3ZlIHRoZSBjYW52YXMgdXNpbmcgdGhlIGtleWJvYXJkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWdcbiAqIEBwYXJhbSB7bnVtYmVyfSBbY29uZmlnLm1vdmVTcGVlZD01MF1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbY29uZmlnLm1vdmVTcGVlZEFjY2VsZXJhdGVkPTIwMF1cbiAqIEBwYXJhbSB7S2V5Ym9hcmR9IGtleWJvYXJkXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEtleWJvYXJkTW92ZShcbiAgICBjb25maWcsXG4gICAga2V5Ym9hcmQsXG4gICAgY2FudmFzXG4pIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdGhpcy5fY29uZmlnID0gYXNzaWduKHt9LCBERUZBVUxUX0NPTkZJRywgY29uZmlnIHx8IHt9KTtcblxuICBrZXlib2FyZC5hZGRMaXN0ZW5lcihhcnJvd3NMaXN0ZW5lcik7XG5cblxuICBmdW5jdGlvbiBhcnJvd3NMaXN0ZW5lcihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50LFxuICAgICAgICBjb25maWcgPSBzZWxmLl9jb25maWc7XG5cbiAgICBpZiAoIWtleWJvYXJkLmlzQ21kKGV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXlib2FyZC5pc0tleShbXG4gICAgICAnQXJyb3dMZWZ0JywgJ0xlZnQnLFxuICAgICAgJ0Fycm93VXAnLCAnVXAnLFxuICAgICAgJ0Fycm93RG93bicsICdEb3duJyxcbiAgICAgICdBcnJvd1JpZ2h0JywgJ1JpZ2h0J1xuICAgIF0sIGV2ZW50KSkge1xuXG4gICAgICB2YXIgc3BlZWQgPSAoXG4gICAgICAgIGtleWJvYXJkLmlzU2hpZnQoZXZlbnQpID9cbiAgICAgICAgICBjb25maWcubW92ZVNwZWVkQWNjZWxlcmF0ZWQgOlxuICAgICAgICAgIGNvbmZpZy5tb3ZlU3BlZWRcbiAgICAgICk7XG5cbiAgICAgIHZhciBkaXJlY3Rpb247XG5cbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgY2FzZSAnTGVmdCc6XG4gICAgICAgIGRpcmVjdGlvbiA9ICdsZWZ0JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgIGNhc2UgJ1VwJzpcbiAgICAgICAgZGlyZWN0aW9uID0gJ3VwJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgIGNhc2UgJ1JpZ2h0JzpcbiAgICAgICAgZGlyZWN0aW9uID0gJ3JpZ2h0JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgY2FzZSAnRG93bic6XG4gICAgICAgIGRpcmVjdGlvbiA9ICdkb3duJztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHNlbGYubW92ZUNhbnZhcyh7XG4gICAgICAgIHNwZWVkOiBzcGVlZCxcbiAgICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb25cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB0aGlzLm1vdmVDYW52YXMgPSBmdW5jdGlvbihvcHRzKSB7XG5cbiAgICB2YXIgZHggPSAwLFxuICAgICAgICBkeSA9IDAsXG4gICAgICAgIHNwZWVkID0gb3B0cy5zcGVlZDtcblxuICAgIHZhciBhY3R1YWxTcGVlZCA9IHNwZWVkIC8gTWF0aC5taW4oTWF0aC5zcXJ0KGNhbnZhcy52aWV3Ym94KCkuc2NhbGUpLCAxKTtcblxuICAgIHN3aXRjaCAob3B0cy5kaXJlY3Rpb24pIHtcbiAgICBjYXNlICdsZWZ0JzogLy8gTGVmdFxuICAgICAgZHggPSBhY3R1YWxTcGVlZDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3VwJzogLy8gVXBcbiAgICAgIGR5ID0gYWN0dWFsU3BlZWQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyaWdodCc6IC8vIFJpZ2h0XG4gICAgICBkeCA9IC1hY3R1YWxTcGVlZDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Rvd24nOiAvLyBEb3duXG4gICAgICBkeSA9IC1hY3R1YWxTcGVlZDtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhbnZhcy5zY3JvbGwoe1xuICAgICAgZHg6IGR4LFxuICAgICAgZHk6IGR5XG4gICAgfSk7XG4gIH07XG5cbn1cblxuXG5LZXlib2FyZE1vdmUuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5rZXlib2FyZE1vdmUnLFxuICAna2V5Ym9hcmQnLFxuICAnY2FudmFzJ1xuXTtcbiIsImltcG9ydCBLZXlib2FyZE1vZHVsZSBmcm9tICcuLi8uLi9mZWF0dXJlcy9rZXlib2FyZCc7XG5cbmltcG9ydCBLZXlib2FyZE1vdmUgZnJvbSAnLi9LZXlib2FyZE1vdmUnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBLZXlib2FyZE1vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAna2V5Ym9hcmRNb3ZlJyBdLFxuICBrZXlib2FyZE1vdmU6IFsgJ3R5cGUnLCBLZXlib2FyZE1vdmUgXVxufTsiLCJpbXBvcnQge1xuICBzZXQgYXMgY3Vyc29yU2V0LFxuICB1bnNldCBhcyBjdXJzb3JVbnNldFxufSBmcm9tICcuLi8uLi91dGlsL0N1cnNvcic7XG5cbmltcG9ydCB7XG4gIGluc3RhbGwgYXMgaW5zdGFsbENsaWNrVHJhcFxufSBmcm9tICcuLi8uLi91dGlsL0NsaWNrVHJhcCc7XG5cbmltcG9ydCB7XG4gIGRlbHRhIGFzIGRlbHRhUG9zXG59IGZyb20gJy4uLy4uL3V0aWwvUG9zaXRpb25VdGlsJztcblxuaW1wb3J0IHtcbiAgZXZlbnQgYXMgZG9tRXZlbnQsXG4gIGNsb3Nlc3QgYXMgZG9tQ2xvc2VzdFxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHtcbiAgdG9Qb2ludFxufSBmcm9tICcuLi8uLi91dGlsL0V2ZW50JztcblxuXG52YXIgVEhSRVNIT0xEID0gMTU7XG5cblxuLyoqXG4gKiBNb3ZlIHRoZSBjYW52YXMgdmlhIG1vdXNlLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vdmVDYW52YXMoZXZlbnRCdXMsIGNhbnZhcykge1xuXG4gIHZhciBjb250ZXh0O1xuXG5cbiAgLy8gbGlzdGVuIGZvciBtb3ZlIG9uIGVsZW1lbnQgbW91c2UgZG93bjtcbiAgLy8gYWxsb3cgb3RoZXJzIHRvIGhvb2sgaW50byB0aGUgZXZlbnQgYmVmb3JlIHVzIHRob3VnaFxuICAvLyAoZHJhZ2dpbmcgLyBlbGVtZW50IG1vdmluZyB3aWxsIGRvIHRoaXMpXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50Lm1vdXNlZG93bicsIDUwMCwgZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiBoYW5kbGVTdGFydChlLm9yaWdpbmFsRXZlbnQpO1xuICB9KTtcblxuXG4gIGZ1bmN0aW9uIGhhbmRsZU1vdmUoZXZlbnQpIHtcblxuICAgIHZhciBzdGFydCA9IGNvbnRleHQuc3RhcnQsXG4gICAgICAgIHBvc2l0aW9uID0gdG9Qb2ludChldmVudCksXG4gICAgICAgIGRlbHRhID0gZGVsdGFQb3MocG9zaXRpb24sIHN0YXJ0KTtcblxuICAgIGlmICghY29udGV4dC5kcmFnZ2luZyAmJiBsZW5ndGgoZGVsdGEpID4gVEhSRVNIT0xEKSB7XG4gICAgICBjb250ZXh0LmRyYWdnaW5nID0gdHJ1ZTtcblxuICAgICAgaW5zdGFsbENsaWNrVHJhcChldmVudEJ1cyk7XG5cbiAgICAgIGN1cnNvclNldCgnZ3JhYicpO1xuICAgIH1cblxuICAgIGlmIChjb250ZXh0LmRyYWdnaW5nKSB7XG5cbiAgICAgIHZhciBsYXN0UG9zaXRpb24gPSBjb250ZXh0Lmxhc3QgfHwgY29udGV4dC5zdGFydDtcblxuICAgICAgZGVsdGEgPSBkZWx0YVBvcyhwb3NpdGlvbiwgbGFzdFBvc2l0aW9uKTtcblxuICAgICAgY2FudmFzLnNjcm9sbCh7XG4gICAgICAgIGR4OiBkZWx0YS54LFxuICAgICAgICBkeTogZGVsdGEueVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnRleHQubGFzdCA9IHBvc2l0aW9uO1xuICAgIH1cblxuICAgIC8vIHByZXZlbnQgc2VsZWN0XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gaGFuZGxlRW5kKGV2ZW50KSB7XG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgaGFuZGxlTW92ZSk7XG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAnbW91c2V1cCcsIGhhbmRsZUVuZCk7XG5cbiAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgIGN1cnNvclVuc2V0KCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVTdGFydChldmVudCkge1xuXG4gICAgLy8gZXZlbnQgaXMgYWxyZWFkeSBoYW5kbGVkIGJ5ICcuZGpzLWRyYWdnYWJsZSdcbiAgICBpZiAoZG9tQ2xvc2VzdChldmVudC50YXJnZXQsICcuZGpzLWRyYWdnYWJsZScpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICAvLyByZWplY3Qgbm9uLWxlZnQgbGVmdCBtb3VzZSBidXR0b24gb3IgbW9kaWZpZXIga2V5XG4gICAgaWYgKGV2ZW50LmJ1dHRvbiB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50LmFsdEtleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQgPSB7XG4gICAgICBzdGFydDogdG9Qb2ludChldmVudClcbiAgICB9O1xuXG4gICAgZG9tRXZlbnQuYmluZChkb2N1bWVudCwgJ21vdXNlbW92ZScsIGhhbmRsZU1vdmUpO1xuICAgIGRvbUV2ZW50LmJpbmQoZG9jdW1lbnQsICdtb3VzZXVwJywgaGFuZGxlRW5kKTtcblxuICAgIC8vIHdlJ3ZlIGhhbmRsZWQgdGhlIGV2ZW50XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuXG5Nb3ZlQ2FudmFzLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnXG5dO1xuXG5cblxuLy8gaGVscGVycyAvLy8vLy8vXG5cbmZ1bmN0aW9uIGxlbmd0aChwb2ludCkge1xuICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHBvaW50LngsIDIpICsgTWF0aC5wb3cocG9pbnQueSwgMikpO1xufVxuIiwiaW1wb3J0IE1vdmVDYW52YXMgZnJvbSAnLi9Nb3ZlQ2FudmFzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAnbW92ZUNhbnZhcycgXSxcbiAgbW92ZUNhbnZhczogWyAndHlwZScsIE1vdmVDYW52YXMgXVxufTsiLCJpbXBvcnQgVG91Y2hNb2R1bGUgZnJvbSAnLi4vLi4vZmVhdHVyZXMvdG91Y2gnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgVG91Y2hNb2R1bGVcbiAgXVxufTsiLCJpbXBvcnQge1xuICBldmVudCBhcyBkb21FdmVudCxcbiAgY2xvc2VzdCBhcyBkb21DbG9zZXN0XG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICBnZXRTdGVwU2l6ZSxcbiAgY2FwXG59IGZyb20gJy4vWm9vbVV0aWwnO1xuXG5pbXBvcnQge1xuICBsb2cxMFxufSBmcm9tICcuLi8uLi91dGlsL01hdGgnO1xuXG5pbXBvcnQge1xuICBiaW5kXG59IGZyb20gJ21pbi1kYXNoJztcblxudmFyIHNpZ24gPSBNYXRoLnNpZ24gfHwgZnVuY3Rpb24obikge1xuICByZXR1cm4gbiA+PSAwID8gMSA6IC0xO1xufTtcblxudmFyIFJBTkdFID0geyBtaW46IDAuMiwgbWF4OiA0IH0sXG4gICAgTlVNX1NURVBTID0gMTA7XG5cbnZhciBERUxUQV9USFJFU0hPTEQgPSAwLjE7XG5cbnZhciBERUZBVUxUX1NDQUxFID0gMC43NTtcblxuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB6b29taW5nIGFuZCBzY3JvbGxpbmcgd2l0aGluIHRoZVxuICoge0BsaW5rIENhbnZhc30gdmlhIHRoZSBtb3VzZSB3aGVlbC5cbiAqXG4gKiBNb3VzZSB3aGVlbCB6b29taW5nIC8gc2Nyb2xsaW5nIG1heSBiZSBkaXNhYmxlZCB1c2luZ1xuICogdGhlIHtAbGluayB0b2dnbGUoZW5hYmxlZCl9IG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbmZpZ11cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbmZpZy5lbmFibGVkPXRydWVdIGRlZmF1bHQgZW5hYmxlZCBzdGF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcuc2NhbGU9Ljc1XSBzY3JvbGwgc2Vuc2l2aXR5XG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBab29tU2Nyb2xsKGNvbmZpZywgZXZlbnRCdXMsIGNhbnZhcykge1xuXG4gIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcblxuICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG5cbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9jb250YWluZXIgPSBjYW52YXMuX2NvbnRhaW5lcjtcblxuICB0aGlzLl9oYW5kbGVXaGVlbCA9IGJpbmQodGhpcy5faGFuZGxlV2hlZWwsIHRoaXMpO1xuXG4gIHRoaXMuX3RvdGFsRGVsdGEgPSAwO1xuICB0aGlzLl9zY2FsZSA9IGNvbmZpZy5zY2FsZSB8fCBERUZBVUxUX1NDQUxFO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBldmVudEJ1cy5vbignY2FudmFzLmluaXQnLCBmdW5jdGlvbihlKSB7XG4gICAgc2VsZi5faW5pdChjb25maWcuZW5hYmxlZCAhPT0gZmFsc2UpO1xuICB9KTtcbn1cblxuWm9vbVNjcm9sbC4kaW5qZWN0ID0gW1xuICAnY29uZmlnLnpvb21TY3JvbGwnLFxuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJ1xuXTtcblxuWm9vbVNjcm9sbC5wcm90b3R5cGUuc2Nyb2xsID0gZnVuY3Rpb24gc2Nyb2xsKGRlbHRhKSB7XG4gIHRoaXMuX2NhbnZhcy5zY3JvbGwoZGVsdGEpO1xufTtcblxuXG5ab29tU2Nyb2xsLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICB0aGlzLl9jYW52YXMuem9vbSgnZml0LXZpZXdwb3J0Jyk7XG59O1xuXG4vKipcbiAqIFpvb20gZGVwZW5kaW5nIG9uIGRlbHRhLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVxuICogQHBhcmFtIHtPYmplY3R9IHBvc2l0aW9uXG4gKi9cblpvb21TY3JvbGwucHJvdG90eXBlLnpvb20gPSBmdW5jdGlvbiB6b29tKGRlbHRhLCBwb3NpdGlvbikge1xuXG4gIC8vIHpvb20gd2l0aCBoYWxmIHRoZSBzdGVwIHNpemUgb2Ygc3RlcFpvb21cbiAgdmFyIHN0ZXBTaXplID0gZ2V0U3RlcFNpemUoUkFOR0UsIE5VTV9TVEVQUyAqIDIpO1xuXG4gIC8vIGFkZCB1bnRpbCB0aHJlc2hvbGQgcmVhY2hlZFxuICB0aGlzLl90b3RhbERlbHRhICs9IGRlbHRhO1xuXG4gIGlmIChNYXRoLmFicyh0aGlzLl90b3RhbERlbHRhKSA+IERFTFRBX1RIUkVTSE9MRCkge1xuICAgIHRoaXMuX3pvb20oZGVsdGEsIHBvc2l0aW9uLCBzdGVwU2l6ZSk7XG5cbiAgICAvLyByZXNldFxuICAgIHRoaXMuX3RvdGFsRGVsdGEgPSAwO1xuICB9XG59O1xuXG5cblpvb21TY3JvbGwucHJvdG90eXBlLl9oYW5kbGVXaGVlbCA9IGZ1bmN0aW9uIGhhbmRsZVdoZWVsKGV2ZW50KSB7XG5cbiAgLy8gZXZlbnQgaXMgYWxyZWFkeSBoYW5kbGVkIGJ5ICcuZGpzLXNjcm9sbGFibGUnXG4gIGlmIChkb21DbG9zZXN0KGV2ZW50LnRhcmdldCwgJy5kanMtc2Nyb2xsYWJsZScsIHRydWUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGVsZW1lbnQgPSB0aGlzLl9jb250YWluZXI7XG5cbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAvLyBwaW5jaCB0byB6b29tIGlzIG1hcHBlZCB0byB3aGVlbCArIGN0cmxLZXkgPSB0cnVlXG4gIC8vIGluIG1vZGVybiBicm93c2VycyAoISlcblxuICB2YXIgaXNab29tID0gZXZlbnQuY3RybEtleTtcblxuICB2YXIgaXNIb3Jpem9udGFsU2Nyb2xsID0gZXZlbnQuc2hpZnRLZXk7XG5cbiAgdmFyIGZhY3RvciA9IC0xICogdGhpcy5fc2NhbGUsXG4gICAgICBkZWx0YTtcblxuICBpZiAoaXNab29tKSB7XG4gICAgZmFjdG9yICo9IGV2ZW50LmRlbHRhTW9kZSA9PT0gMCA/IDAuMDIwIDogMC4zMjtcbiAgfSBlbHNlIHtcbiAgICBmYWN0b3IgKj0gZXZlbnQuZGVsdGFNb2RlID09PSAwID8gMS4wIDogMTYuMDtcbiAgfVxuXG4gIGlmIChpc1pvb20pIHtcbiAgICB2YXIgZWxlbWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgdmFyIG9mZnNldCA9IHtcbiAgICAgIHg6IGV2ZW50LmNsaWVudFggLSBlbGVtZW50UmVjdC5sZWZ0LFxuICAgICAgeTogZXZlbnQuY2xpZW50WSAtIGVsZW1lbnRSZWN0LnRvcFxuICAgIH07XG5cbiAgICBkZWx0YSA9IChcbiAgICAgIE1hdGguc3FydChcbiAgICAgICAgTWF0aC5wb3coZXZlbnQuZGVsdGFZLCAyKSArXG4gICAgICAgIE1hdGgucG93KGV2ZW50LmRlbHRhWCwgMilcbiAgICAgICkgKiBzaWduKGV2ZW50LmRlbHRhWSkgKiBmYWN0b3JcbiAgICApO1xuXG4gICAgLy8gem9vbSBpbiByZWxhdGl2ZSB0byBkaWFncmFtIHt4LHl9IGNvb3JkaW5hdGVzXG4gICAgdGhpcy56b29tKGRlbHRhLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuXG4gICAgaWYgKGlzSG9yaXpvbnRhbFNjcm9sbCkge1xuICAgICAgZGVsdGEgPSB7XG4gICAgICAgIGR4OiBmYWN0b3IgKiBldmVudC5kZWx0YVksXG4gICAgICAgIGR5OiAwXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWx0YSA9IHtcbiAgICAgICAgZHg6IGZhY3RvciAqIGV2ZW50LmRlbHRhWCxcbiAgICAgICAgZHk6IGZhY3RvciAqIGV2ZW50LmRlbHRhWVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLnNjcm9sbChkZWx0YSk7XG4gIH1cbn07XG5cbi8qKlxuICogWm9vbSB3aXRoIGZpeGVkIHN0ZXAgc2l6ZS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsdGEgLSBab29tIGRlbHRhICgxIGZvciB6b29taW5nIGluLCAtMSBmb3Igb3V0KS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBwb3NpdGlvblxuICovXG5ab29tU2Nyb2xsLnByb3RvdHlwZS5zdGVwWm9vbSA9IGZ1bmN0aW9uIHN0ZXBab29tKGRlbHRhLCBwb3NpdGlvbikge1xuXG4gIHZhciBzdGVwU2l6ZSA9IGdldFN0ZXBTaXplKFJBTkdFLCBOVU1fU1RFUFMpO1xuXG4gIHRoaXMuX3pvb20oZGVsdGEsIHBvc2l0aW9uLCBzdGVwU2l6ZSk7XG59O1xuXG5cbi8qKlxuICogWm9vbSBpbi9vdXQgZ2l2ZW4gYSBzdGVwIHNpemUuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhXG4gKiBAcGFyYW0ge09iamVjdH0gcG9zaXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwU2l6ZVxuICovXG5ab29tU2Nyb2xsLnByb3RvdHlwZS5fem9vbSA9IGZ1bmN0aW9uKGRlbHRhLCBwb3NpdGlvbiwgc3RlcFNpemUpIHtcbiAgdmFyIGNhbnZhcyA9IHRoaXMuX2NhbnZhcztcblxuICB2YXIgZGlyZWN0aW9uID0gZGVsdGEgPiAwID8gMSA6IC0xO1xuXG4gIHZhciBjdXJyZW50TGluZWFyWm9vbUxldmVsID0gbG9nMTAoY2FudmFzLnpvb20oKSk7XG5cbiAgLy8gc25hcCB0byBhIHByb3hpbWF0ZSB6b29tIHN0ZXBcbiAgdmFyIG5ld0xpbmVhclpvb21MZXZlbCA9IE1hdGgucm91bmQoY3VycmVudExpbmVhclpvb21MZXZlbCAvIHN0ZXBTaXplKSAqIHN0ZXBTaXplO1xuXG4gIC8vIGluY3JlYXNlIG9yIGRlY3JlYXNlIG9uZSB6b29tIHN0ZXAgaW4gdGhlIGdpdmVuIGRpcmVjdGlvblxuICBuZXdMaW5lYXJab29tTGV2ZWwgKz0gc3RlcFNpemUgKiBkaXJlY3Rpb247XG5cbiAgLy8gY2FsY3VsYXRlIHRoZSBhYnNvbHV0ZSBsb2dhcml0aG1pYyB6b29tIGxldmVsIGJhc2VkIG9uIHRoZSBsaW5lYXIgem9vbSBsZXZlbFxuICAvLyAoZS5nLiAyIGZvciBhbiBhYnNvbHV0ZSB4MiB6b29tKVxuICB2YXIgbmV3TG9nWm9vbUxldmVsID0gTWF0aC5wb3coMTAsIG5ld0xpbmVhclpvb21MZXZlbCk7XG5cbiAgY2FudmFzLnpvb20oY2FwKFJBTkdFLCBuZXdMb2dab29tTGV2ZWwpLCBwb3NpdGlvbik7XG59O1xuXG5cbi8qKlxuICogVG9nZ2xlIHRoZSB6b29tIHNjcm9sbCBhYmlsaXR5IHZpYSBtb3VzZSB3aGVlbC5cbiAqXG4gKiBAcGFyYW0gIHtib29sZWFufSBbbmV3RW5hYmxlZF0gbmV3IGVuYWJsZWQgc3RhdGVcbiAqL1xuWm9vbVNjcm9sbC5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gdG9nZ2xlKG5ld0VuYWJsZWQpIHtcblxuICB2YXIgZWxlbWVudCA9IHRoaXMuX2NvbnRhaW5lcjtcbiAgdmFyIGhhbmRsZVdoZWVsID0gdGhpcy5faGFuZGxlV2hlZWw7XG5cbiAgdmFyIG9sZEVuYWJsZWQgPSB0aGlzLl9lbmFibGVkO1xuXG4gIGlmICh0eXBlb2YgbmV3RW5hYmxlZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBuZXdFbmFibGVkID0gIW9sZEVuYWJsZWQ7XG4gIH1cblxuICAvLyBvbmx5IHJlYWN0IG9uIGFjdHVhbCBjaGFuZ2VzXG4gIGlmIChvbGRFbmFibGVkICE9PSBuZXdFbmFibGVkKSB7XG5cbiAgICAvLyBhZGQgb3IgcmVtb3ZlIHdoZWVsIGxpc3RlbmVyIGJhc2VkIG9uXG4gICAgLy8gY2hhbmdlZCBlbmFibGVkIHN0YXRlXG4gICAgZG9tRXZlbnRbbmV3RW5hYmxlZCA/ICdiaW5kJyA6ICd1bmJpbmQnXShlbGVtZW50LCAnd2hlZWwnLCBoYW5kbGVXaGVlbCwgZmFsc2UpO1xuICB9XG5cbiAgdGhpcy5fZW5hYmxlZCA9IG5ld0VuYWJsZWQ7XG5cbiAgcmV0dXJuIG5ld0VuYWJsZWQ7XG59O1xuXG5cblpvb21TY3JvbGwucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24obmV3RW5hYmxlZCkge1xuICB0aGlzLnRvZ2dsZShuZXdFbmFibGVkKTtcbn07XG4iLCJpbXBvcnQge1xuICBsb2cxMFxufSBmcm9tICcuLi8uLi91dGlsL01hdGgnO1xuXG4vKipcbiAqIEdldCBzdGVwIHNpemUgZm9yIGdpdmVuIHJhbmdlIGFuZCBudW1iZXIgb2Ygc3RlcHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHJhbmdlXG4gKiBAcGFyYW0ge251bWJlcn0gcmFuZ2UubWluXG4gKiBAcGFyYW0ge251bWJlcn0gcmFuZ2UubWF4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGVwU2l6ZShyYW5nZSwgc3RlcHMpIHtcblxuICB2YXIgbWluTGluZWFyUmFuZ2UgPSBsb2cxMChyYW5nZS5taW4pLFxuICAgICAgbWF4TGluZWFyUmFuZ2UgPSBsb2cxMChyYW5nZS5tYXgpO1xuXG4gIHZhciBhYnNvbHV0ZUxpbmVhclJhbmdlID0gTWF0aC5hYnMobWluTGluZWFyUmFuZ2UpICsgTWF0aC5hYnMobWF4TGluZWFyUmFuZ2UpO1xuXG4gIHJldHVybiBhYnNvbHV0ZUxpbmVhclJhbmdlIC8gc3RlcHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXAocmFuZ2UsIHNjYWxlKSB7XG4gIHJldHVybiBNYXRoLm1heChyYW5nZS5taW4sIE1hdGgubWluKHJhbmdlLm1heCwgc2NhbGUpKTtcbn1cbiIsImltcG9ydCBab29tU2Nyb2xsIGZyb20gJy4vWm9vbVNjcm9sbCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ3pvb21TY3JvbGwnIF0sXG4gIHpvb21TY3JvbGw6IFsgJ3R5cGUnLCBab29tU2Nyb2xsIF1cbn07IiwiaW1wb3J0IHtcbiAgYXNUUkJMLFxuICBnZXRPcmllbnRhdGlvbixcbiAgcm91bmRQb2ludFxufSBmcm9tICcuLi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIGNlbnRlcixcbiAgZGVsdGFcbn0gZnJvbSAnLi9Qb3NpdGlvblV0aWwnO1xuXG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYWJzb2x1dGUgcG9pbnQgcmVsYXRpdmUgdG8gdGhlIG5ldyBlbGVtZW50J3MgcG9zaXRpb25cbiAqXG4gKiBAcGFyYW0ge3BvaW50fSBwb2ludCBbYWJzb2x1dGVdXG4gKiBAcGFyYW0ge2JvdW5kc30gb2xkQm91bmRzXG4gKiBAcGFyYW0ge2JvdW5kc30gbmV3Qm91bmRzXG4gKlxuICogQHJldHVybiB7cG9pbnR9IHBvaW50IFthYnNvbHV0ZV1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld0F0dGFjaFBvaW50KHBvaW50LCBvbGRCb3VuZHMsIG5ld0JvdW5kcykge1xuICB2YXIgb2xkQ2VudGVyID0gY2VudGVyKG9sZEJvdW5kcyksXG4gICAgICBuZXdDZW50ZXIgPSBjZW50ZXIobmV3Qm91bmRzKSxcbiAgICAgIG9sZERlbHRhID0gZGVsdGEocG9pbnQsIG9sZENlbnRlcik7XG5cbiAgdmFyIG5ld0RlbHRhID0ge1xuICAgIHg6IG9sZERlbHRhLnggKiAobmV3Qm91bmRzLndpZHRoIC8gb2xkQm91bmRzLndpZHRoKSxcbiAgICB5OiBvbGREZWx0YS55ICogKG5ld0JvdW5kcy5oZWlnaHQgLyBvbGRCb3VuZHMuaGVpZ2h0KVxuICB9O1xuXG4gIHJldHVybiByb3VuZFBvaW50KHtcbiAgICB4OiBuZXdDZW50ZXIueCArIG5ld0RlbHRhLngsXG4gICAgeTogbmV3Q2VudGVyLnkgKyBuZXdEZWx0YS55XG4gIH0pO1xufVxuXG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgc2hhcGUncyBkZWx0YSByZWxhdGl2ZSB0byBhIG5ldyBwb3NpdGlvblxuICogb2YgYSBjZXJ0YWluIGVsZW1lbnQncyBib3VuZHNcbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gcG9pbnQgW2Fic29sdXRlXVxuICogQHBhcmFtIHtib3VuZHN9IG9sZEJvdW5kc1xuICogQHBhcmFtIHtib3VuZHN9IG5ld0JvdW5kc1xuICpcbiAqIEByZXR1cm4ge2RlbHRhfSBkZWx0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3QXR0YWNoU2hhcGVEZWx0YShzaGFwZSwgb2xkQm91bmRzLCBuZXdCb3VuZHMpIHtcbiAgdmFyIHNoYXBlQ2VudGVyID0gY2VudGVyKHNoYXBlKSxcbiAgICAgIG9sZENlbnRlciA9IGNlbnRlcihvbGRCb3VuZHMpLFxuICAgICAgbmV3Q2VudGVyID0gY2VudGVyKG5ld0JvdW5kcyksXG4gICAgICBzaGFwZURlbHRhID0gZGVsdGEoc2hhcGUsIHNoYXBlQ2VudGVyKSxcbiAgICAgIG9sZENlbnRlckRlbHRhID0gZGVsdGEoc2hhcGVDZW50ZXIsIG9sZENlbnRlciksXG4gICAgICBzdGlja3lQb3NpdGlvbkRlbHRhID0gZ2V0U3RpY2t5UG9zaXRpb25EZWx0YShzaGFwZUNlbnRlciwgb2xkQm91bmRzLCBuZXdCb3VuZHMpO1xuXG4gIGlmIChzdGlja3lQb3NpdGlvbkRlbHRhKSB7XG4gICAgcmV0dXJuIHN0aWNreVBvc2l0aW9uRGVsdGE7XG4gIH1cblxuICB2YXIgbmV3Q2VudGVyRGVsdGEgPSB7XG4gICAgeDogb2xkQ2VudGVyRGVsdGEueCAqIChuZXdCb3VuZHMud2lkdGggLyBvbGRCb3VuZHMud2lkdGgpLFxuICAgIHk6IG9sZENlbnRlckRlbHRhLnkgKiAobmV3Qm91bmRzLmhlaWdodCAvIG9sZEJvdW5kcy5oZWlnaHQpXG4gIH07XG5cbiAgdmFyIG5ld1NoYXBlQ2VudGVyID0ge1xuICAgIHg6IG5ld0NlbnRlci54ICsgbmV3Q2VudGVyRGVsdGEueCxcbiAgICB5OiBuZXdDZW50ZXIueSArIG5ld0NlbnRlckRlbHRhLnlcbiAgfTtcblxuICByZXR1cm4gcm91bmRQb2ludCh7XG4gICAgeDogbmV3U2hhcGVDZW50ZXIueCArIHNoYXBlRGVsdGEueCAtIHNoYXBlLngsXG4gICAgeTogbmV3U2hhcGVDZW50ZXIueSArIHNoYXBlRGVsdGEueSAtIHNoYXBlLnlcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldFN0aWNreVBvc2l0aW9uRGVsdGEob2xkU2hhcGVDZW50ZXIsIG9sZEJvdW5kcywgbmV3Qm91bmRzKSB7XG4gIHZhciBvbGRUUkJMID0gYXNUUkJMKG9sZEJvdW5kcyksXG4gICAgICBuZXdUUkJMID0gYXNUUkJMKG5ld0JvdW5kcyk7XG5cbiAgaWYgKGlzTW92ZWQob2xkVFJCTCwgbmV3VFJCTCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBvbGRPcmllbnRhdGlvbiA9IGdldE9yaWVudGF0aW9uKG9sZEJvdW5kcywgb2xkU2hhcGVDZW50ZXIpLFxuICAgICAgc3RpY2t5UG9zaXRpb25EZWx0YSxcbiAgICAgIG5ld1NoYXBlQ2VudGVyLFxuICAgICAgbmV3T3JpZW50YXRpb247XG5cbiAgaWYgKG9sZE9yaWVudGF0aW9uID09PSAndG9wJykge1xuICAgIHN0aWNreVBvc2l0aW9uRGVsdGEgPSB7XG4gICAgICB4OiAwLFxuICAgICAgeTogbmV3VFJCTC5ib3R0b20gLSBvbGRUUkJMLmJvdHRvbVxuICAgIH07XG4gIH0gZWxzZSBpZiAob2xkT3JpZW50YXRpb24gPT09ICdib3R0b20nKSB7XG4gICAgc3RpY2t5UG9zaXRpb25EZWx0YSA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiBuZXdUUkJMLnRvcCAtIG9sZFRSQkwudG9wXG4gICAgfTtcbiAgfSBlbHNlIGlmIChvbGRPcmllbnRhdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgIHN0aWNreVBvc2l0aW9uRGVsdGEgPSB7XG4gICAgICB4OiBuZXdUUkJMLmxlZnQgLSBvbGRUUkJMLmxlZnQsXG4gICAgICB5OiAwXG4gICAgfTtcbiAgfSBlbHNlIGlmIChvbGRPcmllbnRhdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgc3RpY2t5UG9zaXRpb25EZWx0YSA9IHtcbiAgICAgIHg6IG5ld1RSQkwucmlnaHQgLSBvbGRUUkJMLnJpZ2h0LFxuICAgICAgeTogMFxuICAgIH07XG4gIH0gZWxzZSB7XG5cbiAgICAvLyBmYWxsYmFjayB0byBwcm9wb3J0aW9uYWwgbW92ZW1lbnQgZm9yIGNvcm5lci1wbGFjZWQgYXR0YWNobWVudHNcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG5ld1NoYXBlQ2VudGVyID0ge1xuICAgIHg6IG9sZFNoYXBlQ2VudGVyLnggKyBzdGlja3lQb3NpdGlvbkRlbHRhLngsXG4gICAgeTogb2xkU2hhcGVDZW50ZXIueSArIHN0aWNreVBvc2l0aW9uRGVsdGEueVxuICB9O1xuXG4gIG5ld09yaWVudGF0aW9uID0gZ2V0T3JpZW50YXRpb24obmV3Qm91bmRzLCBuZXdTaGFwZUNlbnRlcik7XG5cbiAgaWYgKG5ld09yaWVudGF0aW9uICE9PSBvbGRPcmllbnRhdGlvbikge1xuXG4gICAgLy8gZmFsbGJhY2sgdG8gcHJvcG9ydGlvbmFsIG1vdmVtZW50IGlmIG9yaWVudGF0aW9uIHdvdWxkIG90aGVyd2lzZSBjaGFuZ2VcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBzdGlja3lQb3NpdGlvbkRlbHRhO1xufVxuXG5mdW5jdGlvbiBpc01vdmVkKG9sZFRSQkwsIG5ld1RSQkwpIHtcbiAgcmV0dXJuIGlzSG9yaXpvbnRhbGx5TW92ZWQob2xkVFJCTCwgbmV3VFJCTCkgfHwgaXNWZXJ0aWNhbGx5TW92ZWQob2xkVFJCTCwgbmV3VFJCTCk7XG59XG5cbmZ1bmN0aW9uIGlzSG9yaXpvbnRhbGx5TW92ZWQob2xkVFJCTCwgbmV3VFJCTCkge1xuICByZXR1cm4gb2xkVFJCTC5yaWdodCAhPT0gbmV3VFJCTC5yaWdodCAmJiBvbGRUUkJMLmxlZnQgIT09IG5ld1RSQkwubGVmdDtcbn1cblxuZnVuY3Rpb24gaXNWZXJ0aWNhbGx5TW92ZWQob2xkVFJCTCwgbmV3VFJCTCkge1xuICByZXR1cm4gb2xkVFJCTC50b3AgIT09IG5ld1RSQkwudG9wICYmIG9sZFRSQkwuYm90dG9tICE9PSBuZXdUUkJMLmJvdHRvbTtcbn1cbiIsInZhciBUUkFQX1BSSU9SSVRZID0gNTAwMDtcblxuLyoqXG4gKiBJbnN0YWxscyBhIGNsaWNrIHRyYXAgdGhhdCBwcmV2ZW50cyBhIGdob3N0IGNsaWNrIGZvbGxvd2luZyBhIGRyYWdnaW5nIG9wZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gYSBmdW5jdGlvbiB0byBpbW1lZGlhdGVseSByZW1vdmUgdGhlIGluc3RhbGxlZCB0cmFwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbChldmVudEJ1cywgZXZlbnROYW1lKSB7XG5cbiAgZXZlbnROYW1lID0gZXZlbnROYW1lIHx8ICdlbGVtZW50LmNsaWNrJztcblxuICBmdW5jdGlvbiB0cmFwKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGV2ZW50QnVzLm9uY2UoZXZlbnROYW1lLCBUUkFQX1BSSU9SSVRZLCB0cmFwKTtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgZXZlbnRCdXMub2ZmKGV2ZW50TmFtZSwgdHJhcCk7XG4gIH07XG59IiwiLyoqXG4gKiBGYWlsc2FmZSByZW1vdmUgYW4gZWxlbWVudCBmcm9tIGEgY29sbGVjdGlvblxuICpcbiAqIEBwYXJhbSAge0FycmF5PE9iamVjdD59IFtjb2xsZWN0aW9uXVxuICogQHBhcmFtICB7T2JqZWN0fSBbZWxlbWVudF1cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBwcmV2aW91cyBpbmRleCBvZiB0aGUgZWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlKGNvbGxlY3Rpb24sIGVsZW1lbnQpIHtcblxuICBpZiAoIWNvbGxlY3Rpb24gfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICB2YXIgaWR4ID0gY29sbGVjdGlvbi5pbmRleE9mKGVsZW1lbnQpO1xuXG4gIGlmIChpZHggIT09IC0xKSB7XG4gICAgY29sbGVjdGlvbi5zcGxpY2UoaWR4LCAxKTtcbiAgfVxuXG4gIHJldHVybiBpZHg7XG59XG5cbi8qKlxuICogRmFpbCBzYXZlIGFkZCBhbiBlbGVtZW50IHRvIHRoZSBnaXZlbiBjb25uZWN0aW9uLCBlbnN1cmluZ1xuICogaXQgZG9lcyBub3QgeWV0IGV4aXN0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gY29sbGVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZChjb2xsZWN0aW9uLCBlbGVtZW50LCBpZHgpIHtcblxuICBpZiAoIWNvbGxlY3Rpb24gfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIGlkeCAhPT0gJ251bWJlcicpIHtcbiAgICBpZHggPSAtMTtcbiAgfVxuXG4gIHZhciBjdXJyZW50SWR4ID0gY29sbGVjdGlvbi5pbmRleE9mKGVsZW1lbnQpO1xuXG4gIGlmIChjdXJyZW50SWR4ICE9PSAtMSkge1xuXG4gICAgaWYgKGN1cnJlbnRJZHggPT09IGlkeCkge1xuXG4gICAgICAvLyBub3RoaW5nIHRvIGRvLCBwb3NpdGlvbiBoYXMgbm90IGNoYW5nZWRcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuXG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuXG4gICAgICAgIC8vIHJlbW92ZSBmcm9tIGN1cnJlbnQgcG9zaXRpb25cbiAgICAgICAgY29sbGVjdGlvbi5zcGxpY2UoY3VycmVudElkeCwgMSk7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIC8vIGFscmVhZHkgZXhpc3RzIGluIGNvbGxlY3Rpb25cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChpZHggIT09IC0xKSB7XG5cbiAgICAvLyBpbnNlcnQgYXQgc3BlY2lmaWVkIHBvc2l0aW9uXG4gICAgY29sbGVjdGlvbi5zcGxpY2UoaWR4LCAwLCBlbGVtZW50KTtcbiAgfSBlbHNlIHtcblxuICAgIC8vIHB1c2ggdG8gZW5kXG4gICAgY29sbGVjdGlvbi5wdXNoKGVsZW1lbnQpO1xuICB9XG59XG5cblxuLyoqXG4gKiBGYWlsIHNhdmUgZ2V0IHRoZSBpbmRleCBvZiBhbiBlbGVtZW50IGluIGEgY29sbGVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7bnVtYmVyfSB0aGUgaW5kZXggb3IgLTEgaWYgY29sbGVjdGlvbiBvciBlbGVtZW50IGRvXG4gKiAgICAgICAgICAgICAgICAgIG5vdCBleGlzdCBvciB0aGUgZWxlbWVudCBpcyBub3QgY29udGFpbmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhPZihjb2xsZWN0aW9uLCBlbGVtZW50KSB7XG5cbiAgaWYgKCFjb2xsZWN0aW9uIHx8ICFlbGVtZW50KSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgcmV0dXJuIGNvbGxlY3Rpb24uaW5kZXhPZihlbGVtZW50KTtcbn1cbiIsImltcG9ydCB7XG4gIGNsYXNzZXMgYXMgZG9tQ2xhc3Nlc1xufSBmcm9tICdtaW4tZG9tJztcblxudmFyIENVUlNPUl9DTFNfUEFUVEVSTiA9IC9eZGpzLWN1cnNvci0uKiQvO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQobW9kZSkge1xuICB2YXIgY2xhc3NlcyA9IGRvbUNsYXNzZXMoZG9jdW1lbnQuYm9keSk7XG5cbiAgY2xhc3Nlcy5yZW1vdmVNYXRjaGluZyhDVVJTT1JfQ0xTX1BBVFRFUk4pO1xuXG4gIGlmIChtb2RlKSB7XG4gICAgY2xhc3Nlcy5hZGQoJ2Rqcy1jdXJzb3ItJyArIG1vZGUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNldCgpIHtcbiAgc2V0KG51bGwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzKG1vZGUpIHtcbiAgdmFyIGNsYXNzZXMgPSBkb21DbGFzc2VzKGRvY3VtZW50LmJvZHkpO1xuXG4gIHJldHVybiBjbGFzc2VzLmhhcygnZGpzLWN1cnNvci0nICsgbW9kZSk7XG59XG4iLCJpbXBvcnQge1xuICBhc3NpZ24sXG4gIGZpbHRlcixcbiAgZmluZCxcbiAgaXNBcnJheSxcbiAgaXNOdW1iZXIsXG4gIGlzT2JqZWN0LFxuICBpc1VuZGVmaW5lZCxcbiAgZ3JvdXBCeSxcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBHZXQgcGFyZW50IGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLmJhc2U+fSBlbGVtZW50c1xuICpcbiAqIEByZXR1cm5zIHtBcnJheTxkanMubW9kZWwuQmFzZT59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRzKGVsZW1lbnRzKSB7XG5cbiAgLy8gZmluZCBlbGVtZW50cyB0aGF0IGFyZSBub3QgY2hpbGRyZW4gb2YgYW55IG90aGVyIGVsZW1lbnRzXG4gIHJldHVybiBmaWx0ZXIoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gIWZpbmQoZWxlbWVudHMsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiBlICE9PSBlbGVtZW50ICYmIGdldFBhcmVudChlbGVtZW50LCBlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cblxuZnVuY3Rpb24gZ2V0UGFyZW50KGVsZW1lbnQsIHBhcmVudCkge1xuICBpZiAoIXBhcmVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChlbGVtZW50ID09PSBwYXJlbnQpIHtcbiAgICByZXR1cm4gcGFyZW50O1xuICB9XG5cbiAgaWYgKCFlbGVtZW50LnBhcmVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBnZXRQYXJlbnQoZWxlbWVudC5wYXJlbnQsIHBhcmVudCk7XG59XG5cblxuLyoqXG4gKiBBZGRzIGFuIGVsZW1lbnQgdG8gYSBjb2xsZWN0aW9uIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlXG4gKiBlbGVtZW50IHdhcyBhZGRlZC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGVsZW1lbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gZVxuICogQHBhcmFtIHtib29sZWFufSB1bmlxdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZChlbGVtZW50cywgZSwgdW5pcXVlKSB7XG4gIHZhciBjYW5BZGQgPSAhdW5pcXVlIHx8IGVsZW1lbnRzLmluZGV4T2YoZSkgPT09IC0xO1xuXG4gIGlmIChjYW5BZGQpIHtcbiAgICBlbGVtZW50cy5wdXNoKGUpO1xuICB9XG5cbiAgcmV0dXJuIGNhbkFkZDtcbn1cblxuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCBjYWxsaW5nIHRoZSBpdGVyYXRvciBmdW5jdGlvbiBgZm5gXG4gKiB3aXRoIChlbGVtZW50LCBpbmRleCwgcmVjdXJzaW9uRGVwdGgpLlxuICpcbiAqIFJlY3Vyc2UgaW50byBhbGwgZWxlbWVudHMgdGhhdCBhcmUgcmV0dXJuZWQgYnkgYGZuYC5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R8QXJyYXk8T2JqZWN0Pn0gZWxlbWVudHNcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmbiBpdGVyYXRvciBmdW5jdGlvbiBjYWxsZWQgd2l0aCAoZWxlbWVudCwgaW5kZXgsIHJlY3Vyc2lvbkRlcHRoKVxuICogQHBhcmFtICB7bnVtYmVyfSBbZGVwdGhdIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlYWNoRWxlbWVudChlbGVtZW50cywgZm4sIGRlcHRoKSB7XG5cbiAgZGVwdGggPSBkZXB0aCB8fCAwO1xuXG4gIGlmICghaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IFsgZWxlbWVudHMgXTtcbiAgfVxuXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKHMsIGkpIHtcbiAgICB2YXIgZmlsdGVyID0gZm4ocywgaSwgZGVwdGgpO1xuXG4gICAgaWYgKGlzQXJyYXkoZmlsdGVyKSAmJiBmaWx0ZXIubGVuZ3RoKSB7XG4gICAgICBlYWNoRWxlbWVudChmaWx0ZXIsIGZuLCBkZXB0aCArIDEpO1xuICAgIH1cbiAgfSk7XG59XG5cblxuLyoqXG4gKiBDb2xsZWN0cyBzZWxmICsgY2hpbGQgZWxlbWVudHMgdXAgdG8gYSBnaXZlbiBkZXB0aCBmcm9tIGEgbGlzdCBvZiBlbGVtZW50cy5cbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZXxBcnJheTxkanMubW9kZWwuQmFzZT59IGVsZW1lbnRzIHRoZSBlbGVtZW50cyB0byBzZWxlY3QgdGhlIGNoaWxkcmVuIGZyb21cbiAqIEBwYXJhbSAge2Jvb2xlYW59IHVuaXF1ZSB3aGV0aGVyIHRvIHJldHVybiBhIHVuaXF1ZSByZXN1bHQgc2V0IChubyBkdXBsaWNhdGVzKVxuICogQHBhcmFtICB7bnVtYmVyfSBtYXhEZXB0aCB0aGUgZGVwdGggdG8gc2VhcmNoIHRocm91Z2ggb3IgLTEgZm9yIGluZmluaXRlXG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBmb3VuZCBlbGVtZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VsZkFuZENoaWxkcmVuKGVsZW1lbnRzLCB1bmlxdWUsIG1heERlcHRoKSB7XG4gIHZhciByZXN1bHQgPSBbXSxcbiAgICAgIHByb2Nlc3NlZENoaWxkcmVuID0gW107XG5cbiAgZWFjaEVsZW1lbnQoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQsIGksIGRlcHRoKSB7XG4gICAgYWRkKHJlc3VsdCwgZWxlbWVudCwgdW5pcXVlKTtcblxuICAgIHZhciBjaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGRyZW47XG5cbiAgICAvLyBtYXggdHJhdmVyc2FsIGRlcHRoIG5vdCByZWFjaGVkIHlldFxuICAgIGlmIChtYXhEZXB0aCA9PT0gLTEgfHwgZGVwdGggPCBtYXhEZXB0aCkge1xuXG4gICAgICAvLyBjaGlsZHJlbiBleGlzdCAmJiBjaGlsZHJlbiBub3QgeWV0IHByb2Nlc3NlZFxuICAgICAgaWYgKGNoaWxkcmVuICYmIGFkZChwcm9jZXNzZWRDaGlsZHJlbiwgY2hpbGRyZW4sIHVuaXF1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gc2VsZiArIGRpcmVjdCBjaGlsZHJlbiBmb3IgYSBudW1iZXIgb2YgZWxlbWVudHNcbiAqXG4gKiBAcGFyYW0gIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGVsZW1lbnRzIHRvIHF1ZXJ5XG4gKiBAcGFyYW0gIHtib29sZWFufSBhbGxvd0R1cGxpY2F0ZXMgdG8gYWxsb3cgZHVwbGljYXRlcyBpbiB0aGUgcmVzdWx0IHNldFxuICpcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gdGhlIGNvbGxlY3RlZCBlbGVtZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VsZkFuZERpcmVjdENoaWxkcmVuKGVsZW1lbnRzLCBhbGxvd0R1cGxpY2F0ZXMpIHtcbiAgcmV0dXJuIHNlbGZBbmRDaGlsZHJlbihlbGVtZW50cywgIWFsbG93RHVwbGljYXRlcywgMSk7XG59XG5cblxuLyoqXG4gKiBSZXR1cm4gc2VsZiArIEFMTCBjaGlsZHJlbiBmb3IgYSBudW1iZXIgb2YgZWxlbWVudHNcbiAqXG4gKiBAcGFyYW0gIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGVsZW1lbnRzIHRvIHF1ZXJ5XG4gKiBAcGFyYW0gIHtib29sZWFufSBhbGxvd0R1cGxpY2F0ZXMgdG8gYWxsb3cgZHVwbGljYXRlcyBpbiB0aGUgcmVzdWx0IHNldFxuICpcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gdGhlIGNvbGxlY3RlZCBlbGVtZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VsZkFuZEFsbENoaWxkcmVuKGVsZW1lbnRzLCBhbGxvd0R1cGxpY2F0ZXMpIHtcbiAgcmV0dXJuIHNlbGZBbmRDaGlsZHJlbihlbGVtZW50cywgIWFsbG93RHVwbGljYXRlcywgLTEpO1xufVxuXG5cbi8qKlxuICogR2V0cyB0aGUgdGhlIGNsb3N1cmUgZm9yIGFsbCBzZWxlY3RlZCBlbGVtZW50cyxcbiAqIHRoZWlyIGVuY2xvc2VkIGNoaWxkcmVuIGFuZCBjb25uZWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzVG9wTGV2ZWw9dHJ1ZV1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbZXhpc3RpbmdDbG9zdXJlXVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gbmV3Q2xvc3VyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xvc3VyZShlbGVtZW50cywgaXNUb3BMZXZlbCwgY2xvc3VyZSkge1xuXG4gIGlmIChpc1VuZGVmaW5lZChpc1RvcExldmVsKSkge1xuICAgIGlzVG9wTGV2ZWwgPSB0cnVlO1xuICB9XG5cbiAgaWYgKGlzT2JqZWN0KGlzVG9wTGV2ZWwpKSB7XG4gICAgY2xvc3VyZSA9IGlzVG9wTGV2ZWw7XG4gICAgaXNUb3BMZXZlbCA9IHRydWU7XG4gIH1cblxuXG4gIGNsb3N1cmUgPSBjbG9zdXJlIHx8IHt9O1xuXG4gIHZhciBhbGxTaGFwZXMgPSBjb3B5T2JqZWN0KGNsb3N1cmUuYWxsU2hhcGVzKSxcbiAgICAgIGFsbENvbm5lY3Rpb25zID0gY29weU9iamVjdChjbG9zdXJlLmFsbENvbm5lY3Rpb25zKSxcbiAgICAgIGVuY2xvc2VkRWxlbWVudHMgPSBjb3B5T2JqZWN0KGNsb3N1cmUuZW5jbG9zZWRFbGVtZW50cyksXG4gICAgICBlbmNsb3NlZENvbm5lY3Rpb25zID0gY29weU9iamVjdChjbG9zdXJlLmVuY2xvc2VkQ29ubmVjdGlvbnMpO1xuXG4gIHZhciB0b3BMZXZlbCA9IGNvcHlPYmplY3QoXG4gICAgY2xvc3VyZS50b3BMZXZlbCxcbiAgICBpc1RvcExldmVsICYmIGdyb3VwQnkoZWxlbWVudHMsIGZ1bmN0aW9uKGUpIHsgcmV0dXJuIGUuaWQ7IH0pXG4gICk7XG5cblxuICBmdW5jdGlvbiBoYW5kbGVDb25uZWN0aW9uKGMpIHtcbiAgICBpZiAodG9wTGV2ZWxbYy5zb3VyY2UuaWRdICYmIHRvcExldmVsW2MudGFyZ2V0LmlkXSkge1xuICAgICAgdG9wTGV2ZWxbYy5pZF0gPSBbIGMgXTtcbiAgICB9XG5cbiAgICAvLyBub3QgZW5jbG9zZWQgYXMgYSBjaGlsZCwgYnV0IG1heWJlIGxvZ2ljYWxseVxuICAgIC8vIChjb25uZWN0aW5nIHR3byBtb3ZlZCBlbGVtZW50cz8pXG4gICAgaWYgKGFsbFNoYXBlc1tjLnNvdXJjZS5pZF0gJiYgYWxsU2hhcGVzW2MudGFyZ2V0LmlkXSkge1xuICAgICAgZW5jbG9zZWRDb25uZWN0aW9uc1tjLmlkXSA9IGVuY2xvc2VkRWxlbWVudHNbYy5pZF0gPSBjO1xuICAgIH1cblxuICAgIGFsbENvbm5lY3Rpb25zW2MuaWRdID0gYztcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUVsZW1lbnQoZWxlbWVudCkge1xuXG4gICAgZW5jbG9zZWRFbGVtZW50c1tlbGVtZW50LmlkXSA9IGVsZW1lbnQ7XG5cbiAgICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcblxuICAgICAgLy8gcmVtZW1iZXIgY29ubmVjdGlvblxuICAgICAgZW5jbG9zZWRDb25uZWN0aW9uc1tlbGVtZW50LmlkXSA9IGFsbENvbm5lY3Rpb25zW2VsZW1lbnQuaWRdID0gZWxlbWVudDtcbiAgICB9IGVsc2Uge1xuXG4gICAgICAvLyByZW1lbWJlciBzaGFwZVxuICAgICAgYWxsU2hhcGVzW2VsZW1lbnQuaWRdID0gZWxlbWVudDtcblxuICAgICAgLy8gcmVtZW1iZXIgYWxsIGNvbm5lY3Rpb25zXG4gICAgICBmb3JFYWNoKGVsZW1lbnQuaW5jb21pbmcsIGhhbmRsZUNvbm5lY3Rpb24pO1xuXG4gICAgICBmb3JFYWNoKGVsZW1lbnQub3V0Z29pbmcsIGhhbmRsZUNvbm5lY3Rpb24pO1xuXG4gICAgICAvLyByZWN1cnNlIGludG8gY2hpbGRyZW5cbiAgICAgIHJldHVybiBlbGVtZW50LmNoaWxkcmVuO1xuICAgIH1cbiAgfVxuXG4gIGVhY2hFbGVtZW50KGVsZW1lbnRzLCBoYW5kbGVFbGVtZW50KTtcblxuICByZXR1cm4ge1xuICAgIGFsbFNoYXBlczogYWxsU2hhcGVzLFxuICAgIGFsbENvbm5lY3Rpb25zOiBhbGxDb25uZWN0aW9ucyxcbiAgICB0b3BMZXZlbDogdG9wTGV2ZWwsXG4gICAgZW5jbG9zZWRDb25uZWN0aW9uczogZW5jbG9zZWRDb25uZWN0aW9ucyxcbiAgICBlbmNsb3NlZEVsZW1lbnRzOiBlbmNsb3NlZEVsZW1lbnRzXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc3Vycm91bmRpbmcgYmJveCBmb3IgYWxsIGVsZW1lbnRzIGluXG4gKiB0aGUgYXJyYXkgb3IgdGhlIGVsZW1lbnQgcHJpbWl0aXZlLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlPnxkanMubW9kZWwuU2hhcGV9IGVsZW1lbnRzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHN0b3BSZWN1cnNpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJCb3goZWxlbWVudHMsIHN0b3BSZWN1cnNpb24pIHtcblxuICBzdG9wUmVjdXJzaW9uID0gISFzdG9wUmVjdXJzaW9uO1xuICBpZiAoIWlzQXJyYXkoZWxlbWVudHMpKSB7XG4gICAgZWxlbWVudHMgPSBbZWxlbWVudHNdO1xuICB9XG5cbiAgdmFyIG1pblgsXG4gICAgICBtaW5ZLFxuICAgICAgbWF4WCxcbiAgICAgIG1heFk7XG5cbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gICAgLy8gSWYgZWxlbWVudCBpcyBhIGNvbm5lY3Rpb24gdGhlIGJib3ggbXVzdCBiZSBjb21wdXRlZCBmaXJzdFxuICAgIHZhciBiYm94ID0gZWxlbWVudDtcbiAgICBpZiAoZWxlbWVudC53YXlwb2ludHMgJiYgIXN0b3BSZWN1cnNpb24pIHtcbiAgICAgIGJib3ggPSBnZXRCQm94KGVsZW1lbnQud2F5cG9pbnRzLCB0cnVlKTtcbiAgICB9XG5cbiAgICB2YXIgeCA9IGJib3gueCxcbiAgICAgICAgeSA9IGJib3gueSxcbiAgICAgICAgaGVpZ2h0ID0gYmJveC5oZWlnaHQgfHwgMCxcbiAgICAgICAgd2lkdGggPSBiYm94LndpZHRoIHx8IDA7XG5cbiAgICBpZiAoeCA8IG1pblggfHwgbWluWCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBtaW5YID0geDtcbiAgICB9XG4gICAgaWYgKHkgPCBtaW5ZIHx8IG1pblkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbWluWSA9IHk7XG4gICAgfVxuXG4gICAgaWYgKCh4ICsgd2lkdGgpID4gbWF4WCB8fCBtYXhYID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1heFggPSB4ICsgd2lkdGg7XG4gICAgfVxuICAgIGlmICgoeSArIGhlaWdodCkgPiBtYXhZIHx8IG1heFkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbWF4WSA9IHkgKyBoZWlnaHQ7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHg6IG1pblgsXG4gICAgeTogbWluWSxcbiAgICBoZWlnaHQ6IG1heFkgLSBtaW5ZLFxuICAgIHdpZHRoOiBtYXhYIC0gbWluWFxuICB9O1xufVxuXG5cbi8qKlxuICogUmV0dXJucyBhbGwgZWxlbWVudHMgdGhhdCBhcmUgZW5jbG9zZWQgZnJvbSB0aGUgYm91bmRpbmcgYm94LlxuICpcbiAqICAgKiBJZiBiYm94Lih3aWR0aHxoZWlnaHQpIGlzIG5vdCBzcGVjaWZpZWQgdGhlIG1ldGhvZCByZXR1cm5zXG4gKiAgICAgYWxsIGVsZW1lbnRzIHdpdGggZWxlbWVudC54L3kgPiBiYm94LngveVxuICogICAqIElmIG9ubHkgYmJveC54IG9yIGJib3gueSBpcyBzcGVjaWZpZWQsIG1ldGhvZCByZXR1cm4gYWxsIGVsZW1lbnRzIHdpdGhcbiAqICAgICBlLnggPiBiYm94Lnggb3IgZS55ID4gYmJveC55XG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fSBlbGVtZW50cyBMaXN0IG9mIEVsZW1lbnRzIHRvIHNlYXJjaCB0aHJvdWdoXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gYmJveCB0aGUgZW5jbG9zaW5nIGJib3guXG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlPn0gZW5jbG9zZWQgZWxlbWVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVuY2xvc2VkRWxlbWVudHMoZWxlbWVudHMsIGJib3gpIHtcblxuICB2YXIgZmlsdGVyZWRFbGVtZW50cyA9IHt9O1xuXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgIHZhciBlID0gZWxlbWVudDtcblxuICAgIGlmIChlLndheXBvaW50cykge1xuICAgICAgZSA9IGdldEJCb3goZSk7XG4gICAgfVxuXG4gICAgaWYgKCFpc051bWJlcihiYm94LnkpICYmIChlLnggPiBiYm94LngpKSB7XG4gICAgICBmaWx0ZXJlZEVsZW1lbnRzW2VsZW1lbnQuaWRdID0gZWxlbWVudDtcbiAgICB9XG4gICAgaWYgKCFpc051bWJlcihiYm94LngpICYmIChlLnkgPiBiYm94LnkpKSB7XG4gICAgICBmaWx0ZXJlZEVsZW1lbnRzW2VsZW1lbnQuaWRdID0gZWxlbWVudDtcbiAgICB9XG4gICAgaWYgKGUueCA+IGJib3gueCAmJiBlLnkgPiBiYm94LnkpIHtcbiAgICAgIGlmIChpc051bWJlcihiYm94LndpZHRoKSAmJiBpc051bWJlcihiYm94LmhlaWdodCkgJiZcbiAgICAgICAgICBlLndpZHRoICsgZS54IDwgYmJveC53aWR0aCArIGJib3gueCAmJlxuICAgICAgICAgIGUuaGVpZ2h0ICsgZS55IDwgYmJveC5oZWlnaHQgKyBiYm94LnkpIHtcblxuICAgICAgICBmaWx0ZXJlZEVsZW1lbnRzW2VsZW1lbnQuaWRdID0gZWxlbWVudDtcbiAgICAgIH0gZWxzZSBpZiAoIWlzTnVtYmVyKGJib3gud2lkdGgpIHx8ICFpc051bWJlcihiYm94LmhlaWdodCkpIHtcbiAgICAgICAgZmlsdGVyZWRFbGVtZW50c1tlbGVtZW50LmlkXSA9IGVsZW1lbnQ7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZmlsdGVyZWRFbGVtZW50cztcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZShlbGVtZW50KSB7XG5cbiAgaWYgKCd3YXlwb2ludHMnIGluIGVsZW1lbnQpIHtcbiAgICByZXR1cm4gJ2Nvbm5lY3Rpb24nO1xuICB9XG5cbiAgaWYgKCd4JyBpbiBlbGVtZW50KSB7XG4gICAgcmV0dXJuICdzaGFwZSc7XG4gIH1cblxuICByZXR1cm4gJ3Jvb3QnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGcmFtZUVsZW1lbnQoZWxlbWVudCkge1xuXG4gIHJldHVybiAhIShlbGVtZW50ICYmIGVsZW1lbnQuaXNGcmFtZSk7XG59XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBjb3B5T2JqZWN0KHNyYzEsIHNyYzIpIHtcbiAgcmV0dXJuIGFzc2lnbih7fSwgc3JjMSB8fCB7fSwgc3JjMiB8fCB7fSk7XG59IiwiZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBlc2NhcGVDU1Ncbn0gZnJvbSAnY3NzLmVzY2FwZSc7XG5cbnZhciBIVE1MX0VTQ0FQRV9NQVAgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgJ1xcJyc6ICcmIzM5Oydcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVIVE1MKHN0cikge1xuICBzdHIgPSAnJyArIHN0cjtcblxuICByZXR1cm4gc3RyICYmIHN0ci5yZXBsYWNlKC9bJjw+XCInXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBIVE1MX0VTQ0FQRV9NQVBbbWF0Y2hdO1xuICB9KTtcbn1cbiIsImZ1bmN0aW9uIF9fc3RvcFByb3BhZ2F0aW9uKGV2ZW50KSB7XG4gIGlmICghZXZlbnQgfHwgdHlwZW9mIGV2ZW50LnN0b3BQcm9wYWdhdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPcmlnaW5hbChldmVudCkge1xuICByZXR1cm4gZXZlbnQub3JpZ2luYWxFdmVudCB8fCBldmVudC5zcmNFdmVudDtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gc3RvcFByb3BhZ2F0aW9uKGV2ZW50LCBpbW1lZGlhdGUpIHtcbiAgX19zdG9wUHJvcGFnYXRpb24oZXZlbnQsIGltbWVkaWF0ZSk7XG4gIF9fc3RvcFByb3BhZ2F0aW9uKGdldE9yaWdpbmFsKGV2ZW50KSwgaW1tZWRpYXRlKTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gdG9Qb2ludChldmVudCkge1xuXG4gIGlmIChldmVudC5wb2ludGVycyAmJiBldmVudC5wb2ludGVycy5sZW5ndGgpIHtcbiAgICBldmVudCA9IGV2ZW50LnBvaW50ZXJzWzBdO1xuICB9XG5cbiAgaWYgKGV2ZW50LnRvdWNoZXMgJiYgZXZlbnQudG91Y2hlcy5sZW5ndGgpIHtcbiAgICBldmVudCA9IGV2ZW50LnRvdWNoZXNbMF07XG4gIH1cblxuICByZXR1cm4gZXZlbnQgPyB7XG4gICAgeDogZXZlbnQuY2xpZW50WCxcbiAgICB5OiBldmVudC5jbGllbnRZXG4gIH0gOiBudWxsO1xufSIsImltcG9ydCB7XG4gIGV2ZXJ5LFxuICBpc0FycmF5XG59IGZyb20gJ21pbi1kYXNoJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzXG4gKlxuICogQHBhcmFtICB7UG9pbnR9ICBwXG4gKiBAcGFyYW0gIHtQb2ludH0gIHFcbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9ICBkaXN0YW5jZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9pbnREaXN0YW5jZShhLCBiKSB7XG4gIGlmICghYSB8fCAhYikge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHJldHVybiBNYXRoLnNxcnQoXG4gICAgTWF0aC5wb3coYS54IC0gYi54LCAyKSArXG4gICAgTWF0aC5wb3coYS55IC0gYi55LCAyKVxuICApO1xufVxuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBwb2ludCByIGlzIG9uIHRoZSBsaW5lIGJldHdlZW4gcCBhbmQgcVxuICpcbiAqIEBwYXJhbSAge1BvaW50fSAgcFxuICogQHBhcmFtICB7UG9pbnR9ICBxXG4gKiBAcGFyYW0gIHtQb2ludH0gIHJcbiAqIEBwYXJhbSAge251bWJlcn0gW2FjY3VyYWN5PTVdIGFjY3VyYWN5IGZvciBwb2ludHMgb24gbGluZSBjaGVjayAobG93ZXIgaXMgYmV0dGVyKVxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb2ludHNPbkxpbmUocCwgcSwgciwgYWNjdXJhY3kpIHtcblxuICBpZiAodHlwZW9mIGFjY3VyYWN5ID09PSAndW5kZWZpbmVkJykge1xuICAgIGFjY3VyYWN5ID0gNTtcbiAgfVxuXG4gIGlmICghcCB8fCAhcSB8fCAhcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB2YWwgPSAocS54IC0gcC54KSAqIChyLnkgLSBwLnkpIC0gKHEueSAtIHAueSkgKiAoci54IC0gcC54KSxcbiAgICAgIGRpc3QgPSBwb2ludERpc3RhbmNlKHAsIHEpO1xuXG4gIC8vIEBzZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvOTA3NDkxLzQxMjE5MFxuICByZXR1cm4gTWF0aC5hYnModmFsIC8gZGlzdCkgPD0gYWNjdXJhY3k7XG59XG5cblxudmFyIEFMSUdORURfVEhSRVNIT0xEID0gMjtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHR3byBwb2ludHMgYXJlIGhvcml6b250YWxseSBvciB2ZXJ0aWNhbGx5IGFsaWduZWQuXG4gKlxuICogQHBhcmFtIHtBcnJheTxQb2ludD58UG9pbnR9XG4gKiBAcGFyYW0ge1BvaW50fVxuICpcbiAqIEByZXR1cm4ge3N0cmluZ3xib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9pbnRzQWxpZ25lZChhLCBiKSB7XG4gIHZhciBwb2ludHM7XG5cbiAgaWYgKGlzQXJyYXkoYSkpIHtcbiAgICBwb2ludHMgPSBhO1xuICB9IGVsc2Uge1xuICAgIHBvaW50cyA9IFsgYSwgYiBdO1xuICB9XG5cbiAgaWYgKHBvaW50c0FsaWduZWRIb3Jpem9udGFsbHkocG9pbnRzKSkge1xuICAgIHJldHVybiAnaCc7XG4gIH1cblxuICBpZiAocG9pbnRzQWxpZ25lZFZlcnRpY2FsbHkocG9pbnRzKSkge1xuICAgIHJldHVybiAndic7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb2ludHNBbGlnbmVkSG9yaXpvbnRhbGx5KGEsIGIpIHtcbiAgdmFyIHBvaW50cztcblxuICBpZiAoaXNBcnJheShhKSkge1xuICAgIHBvaW50cyA9IGE7XG4gIH0gZWxzZSB7XG4gICAgcG9pbnRzID0gWyBhLCBiIF07XG4gIH1cblxuICB2YXIgZmlyc3RQb2ludCA9IHBvaW50cy5zbGljZSgpLnNoaWZ0KCk7XG5cbiAgcmV0dXJuIGV2ZXJ5KHBvaW50cywgZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoZmlyc3RQb2ludC55IC0gcG9pbnQueSkgPD0gQUxJR05FRF9USFJFU0hPTEQ7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9pbnRzQWxpZ25lZFZlcnRpY2FsbHkoYSwgYikge1xuICB2YXIgcG9pbnRzO1xuXG4gIGlmIChpc0FycmF5KGEpKSB7XG4gICAgcG9pbnRzID0gYTtcbiAgfSBlbHNlIHtcbiAgICBwb2ludHMgPSBbIGEsIGIgXTtcbiAgfVxuXG4gIHZhciBmaXJzdFBvaW50ID0gcG9pbnRzLnNsaWNlKCkuc2hpZnQoKTtcblxuICByZXR1cm4gZXZlcnkocG9pbnRzLCBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBNYXRoLmFicyhmaXJzdFBvaW50LnggLSBwb2ludC54KSA8PSBBTElHTkVEX1RIUkVTSE9MRDtcbiAgfSk7XG59XG5cblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9pbnQgcCBpcyBpbnNpZGUgdGhlIHJlY3RhbmdsZSByZWN0XG4gKlxuICogQHBhcmFtICB7UG9pbnR9ICBwXG4gKiBAcGFyYW0gIHtSZWN0fSByZWN0XG4gKiBAcGFyYW0gIHtudW1iZXJ9IHRvbGVyYW5jZVxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb2ludEluUmVjdChwLCByZWN0LCB0b2xlcmFuY2UpIHtcbiAgdG9sZXJhbmNlID0gdG9sZXJhbmNlIHx8IDA7XG5cbiAgcmV0dXJuIHAueCA+IHJlY3QueCAtIHRvbGVyYW5jZSAmJlxuICAgICAgICAgcC55ID4gcmVjdC55IC0gdG9sZXJhbmNlICYmXG4gICAgICAgICBwLnggPCByZWN0LnggKyByZWN0LndpZHRoICsgdG9sZXJhbmNlICYmXG4gICAgICAgICBwLnkgPCByZWN0LnkgKyByZWN0LmhlaWdodCArIHRvbGVyYW5jZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcG9pbnQgaW4gdGhlIG1pZGRsZSBvZiBwb2ludHMgcCBhbmQgcVxuICpcbiAqIEBwYXJhbSAge1BvaW50fSAgcFxuICogQHBhcmFtICB7UG9pbnR9ICBxXG4gKlxuICogQHJldHVybiB7UG9pbnR9IG1pZGRsZSBwb2ludFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWlkUG9pbnQocCwgcSkge1xuICByZXR1cm4ge1xuICAgIHg6IE1hdGgucm91bmQocC54ICsgKChxLnggLSBwLngpIC8gMi4wKSksXG4gICAgeTogTWF0aC5yb3VuZChwLnkgKyAoKHEueSAtIHAueSkgLyAyLjApKVxuICB9O1xufVxuIiwiLyoqXG4gKiBTVkdzIGZvciBlbGVtZW50cyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSB7QGxpbmsgR3JhcGhpY3NGYWN0b3J5fS5cbiAqXG4gKiBUaGlzIHV0aWxpdHkgZ2l2ZXMgcXVpY2sgYWNjZXNzIHRvIHRoZSBpbXBvcnRhbnQgc2VtYW50aWNcbiAqIHBhcnRzIG9mIGFuIGVsZW1lbnQuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2aXN1YWwgcGFydCBvZiBhIGRpYWdyYW0gZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7U25hcDxTVkdFbGVtZW50Pn0gZ2Z4XG4gKlxuICogQHJldHVybiB7U25hcDxTVkdFbGVtZW50Pn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpc3VhbChnZngpIHtcbiAgcmV0dXJuIGdmeC5jaGlsZE5vZGVzWzBdO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNoaWxkcmVuIGZvciBhIGdpdmVuIGRpYWdyYW0gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge1NuYXA8U1ZHRWxlbWVudD59IGdmeFxuICogQHJldHVybiB7U25hcDxTVkdFbGVtZW50Pn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoaWxkcmVuKGdmeCkge1xuICByZXR1cm4gZ2Z4LnBhcmVudE5vZGUuY2hpbGROb2Rlc1sxXTtcbn0iLCIvKipcbiAqIFV0aWwgdGhhdCBwcm92aWRlcyB1bmlxdWUgSURzLlxuICpcbiAqIEBjbGFzcyBkanMudXRpbC5JZEdlbmVyYXRvclxuICogQGNvbnN0cnVjdG9yXG4gKiBAbWVtYmVyT2YgZGpzLnV0aWxcbiAqXG4gKiBUaGUgaWRzIGNhbiBiZSBjdXN0b21pemVkIHZpYSBhIGdpdmVuIHByZWZpeCBhbmQgY29udGFpbiBhIHJhbmRvbSB2YWx1ZSB0byBhdm9pZCBjb2xsaXNpb25zLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXggYSBwcmVmaXggdG8gcHJlcGVuZCB0byBnZW5lcmF0ZWQgaWRzIChmb3IgYmV0dGVyIHJlYWRhYmlsaXR5KVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBJZEdlbmVyYXRvcihwcmVmaXgpIHtcblxuICB0aGlzLl9jb3VudGVyID0gMDtcbiAgdGhpcy5fcHJlZml4ID0gKHByZWZpeCA/IHByZWZpeCArICctJyA6ICcnKSArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMDApICsgJy0nO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBuZXh0IHVuaXF1ZSBJRC5cbiAqXG4gKiBAbWV0aG9kIGRqcy51dGlsLklkR2VuZXJhdG9yI25leHRcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgaWRcbiAqL1xuSWRHZW5lcmF0b3IucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3ByZWZpeCArICgrK3RoaXMuX2NvdW50ZXIpO1xufTtcbiIsImltcG9ydCB7XG4gIHBvaW50RGlzdGFuY2Vcbn0gZnJvbSAnLi9HZW9tZXRyeSc7XG5cbmltcG9ydCBpbnRlcnNlY3RQYXRocyBmcm9tICdwYXRoLWludGVyc2VjdGlvbic7XG5cbnZhciByb3VuZCA9IE1hdGgucm91bmQsXG4gICAgbWF4ID0gTWF0aC5tYXg7XG5cblxuZnVuY3Rpb24gY2lyY2xlUGF0aChjZW50ZXIsIHIpIHtcbiAgdmFyIHggPSBjZW50ZXIueCxcbiAgICAgIHkgPSBjZW50ZXIueTtcblxuICByZXR1cm4gW1xuICAgIFsnTScsIHgsIHldLFxuICAgIFsnbScsIDAsIC1yXSxcbiAgICBbJ2EnLCByLCByLCAwLCAxLCAxLCAwLCAyICogcl0sXG4gICAgWydhJywgciwgciwgMCwgMSwgMSwgMCwgLTIgKiByXSxcbiAgICBbJ3onXVxuICBdO1xufVxuXG5mdW5jdGlvbiBsaW5lUGF0aChwb2ludHMpIHtcbiAgdmFyIHNlZ21lbnRzID0gW107XG5cbiAgcG9pbnRzLmZvckVhY2goZnVuY3Rpb24ocCwgaWR4KSB7XG4gICAgc2VnbWVudHMucHVzaChbIGlkeCA9PT0gMCA/ICdNJyA6ICdMJywgcC54LCBwLnkgXSk7XG4gIH0pO1xuXG4gIHJldHVybiBzZWdtZW50cztcbn1cblxuXG52YXIgSU5URVJTRUNUSU9OX1RIUkVTSE9MRCA9IDEwO1xuXG5mdW5jdGlvbiBnZXRCZW5kcG9pbnRJbnRlcnNlY3Rpb24od2F5cG9pbnRzLCByZWZlcmVuY2UpIHtcblxuICB2YXIgaSwgdztcblxuICBmb3IgKGkgPSAwOyAodyA9IHdheXBvaW50c1tpXSk7IGkrKykge1xuXG4gICAgaWYgKHBvaW50RGlzdGFuY2UodywgcmVmZXJlbmNlKSA8PSBJTlRFUlNFQ1RJT05fVEhSRVNIT0xEKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwb2ludDogd2F5cG9pbnRzW2ldLFxuICAgICAgICBiZW5kcG9pbnQ6IHRydWUsXG4gICAgICAgIGluZGV4OiBpXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRQYXRoSW50ZXJzZWN0aW9uKHdheXBvaW50cywgcmVmZXJlbmNlKSB7XG5cbiAgdmFyIGludGVyc2VjdGlvbnMgPSBpbnRlcnNlY3RQYXRocyhjaXJjbGVQYXRoKHJlZmVyZW5jZSwgSU5URVJTRUNUSU9OX1RIUkVTSE9MRCksIGxpbmVQYXRoKHdheXBvaW50cykpO1xuXG4gIHZhciBhID0gaW50ZXJzZWN0aW9uc1swXSxcbiAgICAgIGIgPSBpbnRlcnNlY3Rpb25zW2ludGVyc2VjdGlvbnMubGVuZ3RoIC0gMV0sXG4gICAgICBpZHg7XG5cbiAgaWYgKCFhKSB7XG5cbiAgICAvLyBubyBpbnRlcnNlY3Rpb25cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChhICE9PSBiKSB7XG5cbiAgICBpZiAoYS5zZWdtZW50MiAhPT0gYi5zZWdtZW50Mikge1xuXG4gICAgICAvLyB3ZSB1c2UgdGhlIGJlbmRwb2ludCBpbiBiZXR3ZWVuIGJvdGggc2VnbWVudHNcbiAgICAgIC8vIGFzIHRoZSBpbnRlcnNlY3Rpb24gcG9pbnRcblxuICAgICAgaWR4ID0gbWF4KGEuc2VnbWVudDIsIGIuc2VnbWVudDIpIC0gMTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcG9pbnQ6IHdheXBvaW50c1tpZHhdLFxuICAgICAgICBiZW5kcG9pbnQ6IHRydWUsXG4gICAgICAgIGluZGV4OiBpZHhcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBvaW50OiB7XG4gICAgICAgIHg6IChyb3VuZChhLnggKyBiLngpIC8gMiksXG4gICAgICAgIHk6IChyb3VuZChhLnkgKyBiLnkpIC8gMilcbiAgICAgIH0sXG4gICAgICBpbmRleDogYS5zZWdtZW50MlxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBvaW50OiB7XG4gICAgICB4OiByb3VuZChhLngpLFxuICAgICAgeTogcm91bmQoYS55KVxuICAgIH0sXG4gICAgaW5kZXg6IGEuc2VnbWVudDJcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjbG9zZXN0IHBvaW50IG9uIHRoZSBjb25uZWN0aW9uIHRvd2FyZHMgYSBnaXZlbiByZWZlcmVuY2UgcG9pbnQuXG4gKlxuICogQHBhcmFtICB7QXJyYXk8UG9pbnQ+fSB3YXlwb2ludHNcbiAqIEBwYXJhbSAge1BvaW50fSByZWZlcmVuY2VcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IGludGVyc2VjdGlvbiBkYXRhIChzZWdtZW50LCBwb2ludClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFwcHJveEludGVyc2VjdGlvbih3YXlwb2ludHMsIHJlZmVyZW5jZSkge1xuICByZXR1cm4gZ2V0QmVuZHBvaW50SW50ZXJzZWN0aW9uKHdheXBvaW50cywgcmVmZXJlbmNlKSB8fCBnZXRQYXRoSW50ZXJzZWN0aW9uKHdheXBvaW50cywgcmVmZXJlbmNlKTtcbn1cbiIsIi8qKlxuICogR2V0IHRoZSBsb2dhcml0aG0gb2YgeCB3aXRoIGJhc2UgMTBcbiAqIEBwYXJhbSAge0ludGVnZXJ9IHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2cxMCh4KSB7XG4gIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGgubG9nKDEwKTtcbn1cblxuZXhwb3J0IHsgZGVsdGEgYXMgc3Vic3RyYWN0IH0gZnJvbSAnLi9Qb3NpdGlvblV0aWwnO1xuIiwiaW1wb3J0IHtcbiAgZ2V0T3JpZ2luYWwgYXMgZ2V0T3JpZ2luYWxFdmVudFxufSBmcm9tICcuL0V2ZW50JztcblxuaW1wb3J0IHtcbiAgaXNNYWNcbn0gZnJvbSAnLi9QbGF0Zm9ybSc7XG5cbmV4cG9ydCB7XG4gIGlzTWFjXG59IGZyb20gJy4vUGxhdGZvcm0nO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ByaW1hcnlCdXR0b24oZXZlbnQpIHtcblxuICAvLyBidXR0b24gPT09IDAgLT4gbGVmdCDDoWthIHByaW1hcnkgbW91c2UgYnV0dG9uXG4gIHJldHVybiAhKGdldE9yaWdpbmFsRXZlbnQoZXZlbnQpIHx8IGV2ZW50KS5idXR0b247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNQcmltYXJ5TW9kaWZpZXIoZXZlbnQpIHtcbiAgdmFyIG9yaWdpbmFsRXZlbnQgPSBnZXRPcmlnaW5hbEV2ZW50KGV2ZW50KSB8fCBldmVudDtcblxuICBpZiAoIWlzUHJpbWFyeUJ1dHRvbihldmVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBVc2UgYWx0IGFzIHByaW1hcnkgbW9kaWZpZXIga2V5IGZvciBtYWMgT1NcbiAgaWYgKGlzTWFjKCkpIHtcbiAgICByZXR1cm4gb3JpZ2luYWxFdmVudC5tZXRhS2V5O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBvcmlnaW5hbEV2ZW50LmN0cmxLZXk7XG4gIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gaGFzU2Vjb25kYXJ5TW9kaWZpZXIoZXZlbnQpIHtcbiAgdmFyIG9yaWdpbmFsRXZlbnQgPSBnZXRPcmlnaW5hbEV2ZW50KGV2ZW50KSB8fCBldmVudDtcblxuICByZXR1cm4gaXNQcmltYXJ5QnV0dG9uKGV2ZW50KSAmJiBvcmlnaW5hbEV2ZW50LnNoaWZ0S2V5O1xufSIsImV4cG9ydCBmdW5jdGlvbiBpc01hYygpIHtcbiAgcmV0dXJuICgvbWFjL2kpLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTtcbn0iLCJleHBvcnQgZnVuY3Rpb24gY2VudGVyKGJvdW5kcykge1xuICByZXR1cm4ge1xuICAgIHg6IGJvdW5kcy54ICsgKGJvdW5kcy53aWR0aCAvIDIpLFxuICAgIHk6IGJvdW5kcy55ICsgKGJvdW5kcy5oZWlnaHQgLyAyKVxuICB9O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBkZWx0YShhLCBiKSB7XG4gIHJldHVybiB7XG4gICAgeDogYS54IC0gYi54LFxuICAgIHk6IGEueSAtIGIueVxuICB9O1xufSIsIi8qKlxuICogUmVtb3ZlIGZyb20gdGhlIGJlZ2lubmluZyBvZiBhIGNvbGxlY3Rpb24gdW50aWwgaXQgaXMgZW1wdHkuXG4gKlxuICogVGhpcyBpcyBhIG51bGwtc2FmZSBvcGVyYXRpb24gdGhhdCBlbnN1cmVzIGVsZW1lbnRzXG4gKiBhcmUgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBnaXZlbiBjb2xsZWN0aW9uIHVudGlsIHRoZVxuICogY29sbGVjdGlvbiBpcyBlbXB0eS5cbiAqXG4gKiBUaGUgaW1wbGVtZW50YXRpb24gZGVhbHMgd2l0aCB0aGUgZmFjdCB0aGF0IGEgcmVtb3ZlIG9wZXJhdGlvblxuICogbWF5IHRvdWNoLCBpLmUuIHJlbW92ZSBtdWx0aXBsZSBlbGVtZW50cyBpbiB0aGUgY29sbGVjdGlvblxuICogYXQgYSB0aW1lLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gW2NvbGxlY3Rpb25dXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZW1vdmVGblxuICpcbiAqIEByZXR1cm4ge0FycmF5PE9iamVjdD59IHRoZSBjbGVhcmVkIGNvbGxlY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhdmVDbGVhcihjb2xsZWN0aW9uLCByZW1vdmVGbikge1xuXG4gIGlmICh0eXBlb2YgcmVtb3ZlRm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlbW92ZUZuIGl0ZXJhdG9yIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgaWYgKCFjb2xsZWN0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGU7XG5cbiAgd2hpbGUgKChlID0gY29sbGVjdGlvblswXSkpIHtcbiAgICByZW1vdmVGbihlKTtcbiAgfVxuXG4gIHJldHVybiBjb2xsZWN0aW9uO1xufVxuIiwiaW1wb3J0IHtcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuXG5leHBvcnQgZnVuY3Rpb24gY29tcG9uZW50c1RvUGF0aChlbGVtZW50cykge1xuICByZXR1cm4gZWxlbWVudHMuam9pbignLCcpLnJlcGxhY2UoLyw/KFtBLXpdKSw/L2csICckMScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TVkdQb2ludHMocG9pbnRzKSB7XG4gIHZhciByZXN1bHQgPSAnJztcblxuICBmb3IgKHZhciBpID0gMCwgcDsgKHAgPSBwb2ludHNbaV0pOyBpKyspIHtcbiAgICByZXN1bHQgKz0gcC54ICsgJywnICsgcC55ICsgJyAnO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxpbmUocG9pbnRzLCBhdHRycykge1xuXG4gIHZhciBsaW5lID0gc3ZnQ3JlYXRlKCdwb2x5bGluZScpO1xuICBzdmdBdHRyKGxpbmUsIHsgcG9pbnRzOiB0b1NWR1BvaW50cyhwb2ludHMpIH0pO1xuXG4gIGlmIChhdHRycykge1xuICAgIHN2Z0F0dHIobGluZSwgYXR0cnMpO1xuICB9XG5cbiAgcmV0dXJuIGxpbmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMaW5lKGdmeCwgcG9pbnRzKSB7XG4gIHN2Z0F0dHIoZ2Z4LCB7IHBvaW50czogdG9TVkdQb2ludHMocG9pbnRzKSB9KTtcblxuICByZXR1cm4gZ2Z4O1xufVxuIiwiaW1wb3J0IHtcclxuICB0cmFuc2Zvcm0gYXMgc3ZnVHJhbnNmb3JtLFxyXG4gIGNyZWF0ZVRyYW5zZm9ybVxyXG59IGZyb20gJ3Rpbnktc3ZnJztcclxuXHJcblxyXG4vKipcclxuICogQHBhcmFtIHs8U1ZHRWxlbWVudD59IGVsZW1lbnRcclxuICogQHBhcmFtIHtudW1iZXJ9IHhcclxuICogQHBhcmFtIHtudW1iZXJ9IHlcclxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm0oZ2Z4LCB4LCB5LCBhbmdsZSwgYW1vdW50KSB7XHJcbiAgdmFyIHRyYW5zbGF0ZSA9IGNyZWF0ZVRyYW5zZm9ybSgpO1xyXG4gIHRyYW5zbGF0ZS5zZXRUcmFuc2xhdGUoeCwgeSk7XHJcblxyXG4gIHZhciByb3RhdGUgPSBjcmVhdGVUcmFuc2Zvcm0oKTtcclxuICByb3RhdGUuc2V0Um90YXRlKGFuZ2xlIHx8IDAsIDAsIDApO1xyXG5cclxuICB2YXIgc2NhbGUgPSBjcmVhdGVUcmFuc2Zvcm0oKTtcclxuICBzY2FsZS5zZXRTY2FsZShhbW91bnQgfHwgMSwgYW1vdW50IHx8IDEpO1xyXG5cclxuICBzdmdUcmFuc2Zvcm0oZ2Z4LCBbIHRyYW5zbGF0ZSwgcm90YXRlLCBzY2FsZSBdKTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGVsZW1lbnRcclxuICogQHBhcmFtIHtudW1iZXJ9IHhcclxuICogQHBhcmFtIHtudW1iZXJ9IHlcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGUoZ2Z4LCB4LCB5KSB7XHJcbiAgdmFyIHRyYW5zbGF0ZSA9IGNyZWF0ZVRyYW5zZm9ybSgpO1xyXG4gIHRyYW5zbGF0ZS5zZXRUcmFuc2xhdGUoeCwgeSk7XHJcblxyXG4gIHN2Z1RyYW5zZm9ybShnZngsIHRyYW5zbGF0ZSk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogQHBhcmFtIHtTVkdFbGVtZW50fSBlbGVtZW50XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZShnZngsIGFuZ2xlKSB7XHJcbiAgdmFyIHJvdGF0ZSA9IGNyZWF0ZVRyYW5zZm9ybSgpO1xyXG4gIHJvdGF0ZS5zZXRSb3RhdGUoYW5nbGUsIDAsIDApO1xyXG5cclxuICBzdmdUcmFuc2Zvcm0oZ2Z4LCByb3RhdGUpO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge251bWJlcn0gYW1vdW50XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUoZ2Z4LCBhbW91bnQpIHtcclxuICB2YXIgc2NhbGUgPSBjcmVhdGVUcmFuc2Zvcm0oKTtcclxuICBzY2FsZS5zZXRTY2FsZShhbW91bnQsIGFtb3VudCk7XHJcblxyXG4gIHN2Z1RyYW5zZm9ybShnZngsIHNjYWxlKTtcclxufSIsImltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBhc3NpZ24sXG4gIGZvckVhY2gsXG4gIHJlZHVjZVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZSxcbiAgcmVtb3ZlIGFzIHN2Z1JlbW92ZVxufSBmcm9tICd0aW55LXN2Zyc7XG5cbnZhciBERUZBVUxUX0JPWF9QQURESU5HID0gMDtcblxudmFyIERFRkFVTFRfTEFCRUxfU0laRSA9IHtcbiAgd2lkdGg6IDE1MCxcbiAgaGVpZ2h0OiA1MFxufTtcblxuXG5mdW5jdGlvbiBwYXJzZUFsaWduKGFsaWduKSB7XG5cbiAgdmFyIHBhcnRzID0gYWxpZ24uc3BsaXQoJy0nKTtcblxuICByZXR1cm4ge1xuICAgIGhvcml6b250YWw6IHBhcnRzWzBdIHx8ICdjZW50ZXInLFxuICAgIHZlcnRpY2FsOiBwYXJ0c1sxXSB8fCAndG9wJ1xuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVBhZGRpbmcocGFkZGluZykge1xuXG4gIGlmIChpc09iamVjdChwYWRkaW5nKSkge1xuICAgIHJldHVybiBhc3NpZ24oeyB0b3A6IDAsIGxlZnQ6IDAsIHJpZ2h0OiAwLCBib3R0b206IDAgfSwgcGFkZGluZyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvcDogcGFkZGluZyxcbiAgICAgIGxlZnQ6IHBhZGRpbmcsXG4gICAgICByaWdodDogcGFkZGluZyxcbiAgICAgIGJvdHRvbTogcGFkZGluZ1xuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGV4dEJCb3godGV4dCwgZmFrZVRleHQpIHtcblxuICBmYWtlVGV4dC50ZXh0Q29udGVudCA9IHRleHQ7XG5cbiAgdmFyIHRleHRCQm94O1xuXG4gIHRyeSB7XG4gICAgdmFyIGJib3gsXG4gICAgICAgIGVtcHR5TGluZSA9IHRleHQgPT09ICcnO1xuXG4gICAgLy8gYWRkIGR1bW15IHRleHQsIHdoZW4gbGluZSBpcyBlbXB0eSB0b1xuICAgIC8vIGRldGVybWluZSBjb3JyZWN0IGhlaWdodFxuICAgIGZha2VUZXh0LnRleHRDb250ZW50ID0gZW1wdHlMaW5lID8gJ2R1bW15JyA6IHRleHQ7XG5cbiAgICB0ZXh0QkJveCA9IGZha2VUZXh0LmdldEJCb3goKTtcblxuICAgIC8vIHRha2UgdGV4dCByZW5kZXJpbmcgcmVsYXRlZCBob3Jpem9udGFsXG4gICAgLy8gcGFkZGluZyBpbnRvIGFjY291bnRcbiAgICBiYm94ID0ge1xuICAgICAgd2lkdGg6IHRleHRCQm94LndpZHRoICsgdGV4dEJCb3gueCAqIDIsXG4gICAgICBoZWlnaHQ6IHRleHRCQm94LmhlaWdodFxuICAgIH07XG5cbiAgICBpZiAoZW1wdHlMaW5lKSB7XG5cbiAgICAgIC8vIGNvcnJlY3Qgd2lkdGhcbiAgICAgIGJib3gud2lkdGggPSAwO1xuICAgIH1cblxuICAgIHJldHVybiBiYm94O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICB9XG59XG5cblxuLyoqXG4gKiBMYXlvdXQgdGhlIG5leHQgbGluZSBhbmQgcmV0dXJuIHRoZSBsYXlvdXRlZCBlbGVtZW50LlxuICpcbiAqIEFsdGVycyB0aGUgbGluZXMgcGFzc2VkLlxuICpcbiAqIEBwYXJhbSAge0FycmF5PHN0cmluZz59IGxpbmVzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBsaW5lIGRlc2NyaXB0b3IsIGFuIG9iamVjdCB7IHdpZHRoLCBoZWlnaHQsIHRleHQgfVxuICovXG5mdW5jdGlvbiBsYXlvdXROZXh0KGxpbmVzLCBtYXhXaWR0aCwgZmFrZVRleHQpIHtcblxuICB2YXIgb3JpZ2luYWxMaW5lID0gbGluZXMuc2hpZnQoKSxcbiAgICAgIGZpdExpbmUgPSBvcmlnaW5hbExpbmU7XG5cbiAgdmFyIHRleHRCQm94O1xuXG4gIGZvciAoOzspIHtcbiAgICB0ZXh0QkJveCA9IGdldFRleHRCQm94KGZpdExpbmUsIGZha2VUZXh0KTtcblxuICAgIHRleHRCQm94LndpZHRoID0gZml0TGluZSA/IHRleHRCQm94LndpZHRoIDogMDtcblxuICAgIC8vIHRyeSB0byBmaXRcbiAgICBpZiAoZml0TGluZSA9PT0gJyAnIHx8IGZpdExpbmUgPT09ICcnIHx8IHRleHRCQm94LndpZHRoIDwgTWF0aC5yb3VuZChtYXhXaWR0aCkgfHwgZml0TGluZS5sZW5ndGggPCAyKSB7XG4gICAgICByZXR1cm4gZml0KGxpbmVzLCBmaXRMaW5lLCBvcmlnaW5hbExpbmUsIHRleHRCQm94KTtcbiAgICB9XG5cbiAgICBmaXRMaW5lID0gc2hvcnRlbkxpbmUoZml0TGluZSwgdGV4dEJCb3gud2lkdGgsIG1heFdpZHRoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaXQobGluZXMsIGZpdExpbmUsIG9yaWdpbmFsTGluZSwgdGV4dEJCb3gpIHtcbiAgaWYgKGZpdExpbmUubGVuZ3RoIDwgb3JpZ2luYWxMaW5lLmxlbmd0aCkge1xuICAgIHZhciByZW1haW5kZXIgPSBvcmlnaW5hbExpbmUuc2xpY2UoZml0TGluZS5sZW5ndGgpLnRyaW0oKTtcblxuICAgIGxpbmVzLnVuc2hpZnQocmVtYWluZGVyKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHRleHRCQm94LndpZHRoLFxuICAgIGhlaWdodDogdGV4dEJCb3guaGVpZ2h0LFxuICAgIHRleHQ6IGZpdExpbmVcbiAgfTtcbn1cblxuXG4vKipcbiAqIFNob3J0ZW5zIGEgbGluZSBiYXNlZCBvbiBzcGFjaW5nIGFuZCBoeXBoZW5zLlxuICogUmV0dXJucyB0aGUgc2hvcnRlbmVkIHJlc3VsdCBvbiBzdWNjZXNzLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gbGluZVxuICogQHBhcmFtICB7bnVtYmVyfSBtYXhMZW5ndGggdGhlIG1heGltdW0gY2hhcmFjdGVycyBvZiB0aGUgc3RyaW5nXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBzaG9ydGVuZWQgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHNlbWFudGljU2hvcnRlbihsaW5lLCBtYXhMZW5ndGgpIHtcbiAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgvKFxcc3wtKS9nKSxcbiAgICAgIHBhcnQsXG4gICAgICBzaG9ydGVuZWRQYXJ0cyA9IFtdLFxuICAgICAgbGVuZ3RoID0gMDtcblxuICAvLyB0cnkgdG8gc2hvcnRlbiB2aWEgc3BhY2VzICsgaHlwaGVuc1xuICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xuICAgIHdoaWxlICgocGFydCA9IHBhcnRzLnNoaWZ0KCkpKSB7XG4gICAgICBpZiAocGFydC5sZW5ndGggKyBsZW5ndGggPCBtYXhMZW5ndGgpIHtcbiAgICAgICAgc2hvcnRlbmVkUGFydHMucHVzaChwYXJ0KTtcbiAgICAgICAgbGVuZ3RoICs9IHBhcnQubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICAvLyByZW1vdmUgcHJldmlvdXMgcGFydCwgdG9vIGlmIGh5cGhlbiBkb2VzIG5vdCBmaXQgYW55bW9yZVxuICAgICAgICBpZiAocGFydCA9PT0gJy0nKSB7XG4gICAgICAgICAgc2hvcnRlbmVkUGFydHMucG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2hvcnRlbmVkUGFydHMuam9pbignJyk7XG59XG5cblxuZnVuY3Rpb24gc2hvcnRlbkxpbmUobGluZSwgd2lkdGgsIG1heFdpZHRoKSB7XG4gIHZhciBsZW5ndGggPSBNYXRoLm1heChsaW5lLmxlbmd0aCAqIChtYXhXaWR0aCAvIHdpZHRoKSwgMSk7XG5cbiAgLy8gdHJ5IHRvIHNob3J0ZW4gc2VtYW50aWNhbGx5IChpLmUuIGJhc2VkIG9uIHNwYWNlcyBhbmQgaHlwaGVucylcbiAgdmFyIHNob3J0ZW5lZExpbmUgPSBzZW1hbnRpY1Nob3J0ZW4obGluZSwgbGVuZ3RoKTtcblxuICBpZiAoIXNob3J0ZW5lZExpbmUpIHtcblxuICAgIC8vIGZvcmNlIHNob3J0ZW4gYnkgY3V0dGluZyB0aGUgbG9uZyB3b3JkXG4gICAgc2hvcnRlbmVkTGluZSA9IGxpbmUuc2xpY2UoMCwgTWF0aC5tYXgoTWF0aC5yb3VuZChsZW5ndGggLSAxKSwgMSkpO1xuICB9XG5cbiAgcmV0dXJuIHNob3J0ZW5lZExpbmU7XG59XG5cblxuZnVuY3Rpb24gZ2V0SGVscGVyU3ZnKCkge1xuICB2YXIgaGVscGVyU3ZnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlbHBlci1zdmcnKTtcblxuICBpZiAoIWhlbHBlclN2Zykge1xuICAgIGhlbHBlclN2ZyA9IHN2Z0NyZWF0ZSgnc3ZnJyk7XG5cbiAgICBzdmdBdHRyKGhlbHBlclN2Zywge1xuICAgICAgaWQ6ICdoZWxwZXItc3ZnJyxcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgc3R5bGU6ICd2aXNpYmlsaXR5OiBoaWRkZW47IHBvc2l0aW9uOiBmaXhlZCdcbiAgICB9KTtcblxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaGVscGVyU3ZnKTtcbiAgfVxuXG4gIHJldHVybiBoZWxwZXJTdmc7XG59XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGxhYmVsIHV0aWxpdHlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnXG4gKiBAcGFyYW0ge0RpbWVuc2lvbnN9IGNvbmZpZy5zaXplXG4gKiBAcGFyYW0ge251bWJlcn0gY29uZmlnLnBhZGRpbmdcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcuc3R5bGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWcuYWxpZ25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVGV4dChjb25maWcpIHtcblxuICB0aGlzLl9jb25maWcgPSBhc3NpZ24oe30sIHtcbiAgICBzaXplOiBERUZBVUxUX0xBQkVMX1NJWkUsXG4gICAgcGFkZGluZzogREVGQVVMVF9CT1hfUEFERElORyxcbiAgICBzdHlsZToge30sXG4gICAgYWxpZ246ICdjZW50ZXItdG9wJ1xuICB9LCBjb25maWcgfHwge30pO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGxheW91dGVkIHRleHQgYXMgYW4gU1ZHIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKlxuICogQHJldHVybiB7U1ZHRWxlbWVudH1cbiAqL1xuVGV4dC5wcm90b3R5cGUuY3JlYXRlVGV4dCA9IGZ1bmN0aW9uKHRleHQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRoaXMubGF5b3V0VGV4dCh0ZXh0LCBvcHRpb25zKS5lbGVtZW50O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgbGFiZWxzIGxheW91dGVkIGRpbWVuc2lvbnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgdG8gbGF5b3V0XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm4ge0RpbWVuc2lvbnN9XG4gKi9cblRleHQucHJvdG90eXBlLmdldERpbWVuc2lvbnMgPSBmdW5jdGlvbih0ZXh0LCBvcHRpb25zKSB7XG4gIHJldHVybiB0aGlzLmxheW91dFRleHQodGV4dCwgb3B0aW9ucykuZGltZW5zaW9ucztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhIGxhYmVsIGFuZCBpdHMgYm91bmRpbmcgYm94LlxuICpcbiAqIEBtZXRob2QgVGV4dCNjcmVhdGVUZXh0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgdGhlIHRleHQgdG8gcmVuZGVyIG9uIHRoZSBsYWJlbFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmFsaWduIGhvdyB0byBhbGlnbiBpbiB0aGUgYm91bmRpbmcgYm94LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW55IG9mIHsgJ2NlbnRlci1taWRkbGUnLCAnY2VudGVyLXRvcCcgfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvICdjZW50ZXItdG9wJy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLnN0eWxlIHN0eWxlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHRleHRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5maXRCb3ggaW5kaWNhdGVzIGlmIGJveCB3aWxsIGJlIHJlY2FsY3VsYXRlZCB0b1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXQgdGV4dFxuICpcbiAqIEByZXR1cm4ge09iamVjdH0geyBlbGVtZW50LCBkaW1lbnNpb25zIH1cbiAqL1xuVGV4dC5wcm90b3R5cGUubGF5b3V0VGV4dCA9IGZ1bmN0aW9uKHRleHQsIG9wdGlvbnMpIHtcbiAgdmFyIGJveCA9IGFzc2lnbih7fSwgdGhpcy5fY29uZmlnLnNpemUsIG9wdGlvbnMuYm94KSxcbiAgICAgIHN0eWxlID0gYXNzaWduKHt9LCB0aGlzLl9jb25maWcuc3R5bGUsIG9wdGlvbnMuc3R5bGUpLFxuICAgICAgYWxpZ24gPSBwYXJzZUFsaWduKG9wdGlvbnMuYWxpZ24gfHwgdGhpcy5fY29uZmlnLmFsaWduKSxcbiAgICAgIHBhZGRpbmcgPSBwYXJzZVBhZGRpbmcob3B0aW9ucy5wYWRkaW5nICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnBhZGRpbmcgOiB0aGlzLl9jb25maWcucGFkZGluZyksXG4gICAgICBmaXRCb3ggPSBvcHRpb25zLmZpdEJveCB8fCBmYWxzZTtcblxuICB2YXIgbGluZUhlaWdodCA9IGdldExpbmVIZWlnaHQoc3R5bGUpO1xuXG4gIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoL1xccj9cXG4vZyksXG4gICAgICBsYXlvdXRlZCA9IFtdO1xuXG4gIHZhciBtYXhXaWR0aCA9IGJveC53aWR0aCAtIHBhZGRpbmcubGVmdCAtIHBhZGRpbmcucmlnaHQ7XG5cbiAgLy8gZW5zdXJlIGNvcnJlY3QgcmVuZGVyaW5nIGJ5IGF0dGFjaGluZyBoZWxwZXIgdGV4dCBub2RlIHRvIGludmlzaWJsZSBTVkdcbiAgdmFyIGhlbHBlclRleHQgPSBzdmdDcmVhdGUoJ3RleHQnKTtcbiAgc3ZnQXR0cihoZWxwZXJUZXh0LCB7IHg6IDAsIHk6IDAgfSk7XG4gIHN2Z0F0dHIoaGVscGVyVGV4dCwgc3R5bGUpO1xuXG4gIHZhciBoZWxwZXJTdmcgPSBnZXRIZWxwZXJTdmcoKTtcblxuICBzdmdBcHBlbmQoaGVscGVyU3ZnLCBoZWxwZXJUZXh0KTtcblxuICB3aGlsZSAobGluZXMubGVuZ3RoKSB7XG4gICAgbGF5b3V0ZWQucHVzaChsYXlvdXROZXh0KGxpbmVzLCBtYXhXaWR0aCwgaGVscGVyVGV4dCkpO1xuICB9XG5cbiAgaWYgKGFsaWduLnZlcnRpY2FsID09PSAnbWlkZGxlJykge1xuICAgIHBhZGRpbmcudG9wID0gcGFkZGluZy5ib3R0b20gPSAwO1xuICB9XG5cbiAgdmFyIHRvdGFsSGVpZ2h0ID0gcmVkdWNlKGxheW91dGVkLCBmdW5jdGlvbihzdW0sIGxpbmUsIGlkeCkge1xuICAgIHJldHVybiBzdW0gKyAobGluZUhlaWdodCB8fCBsaW5lLmhlaWdodCk7XG4gIH0sIDApICsgcGFkZGluZy50b3AgKyBwYWRkaW5nLmJvdHRvbTtcblxuICB2YXIgbWF4TGluZVdpZHRoID0gcmVkdWNlKGxheW91dGVkLCBmdW5jdGlvbihzdW0sIGxpbmUsIGlkeCkge1xuICAgIHJldHVybiBsaW5lLndpZHRoID4gc3VtID8gbGluZS53aWR0aCA6IHN1bTtcbiAgfSwgMCk7XG5cbiAgLy8gdGhlIHkgcG9zaXRpb24gb2YgdGhlIG5leHQgbGluZVxuICB2YXIgeSA9IHBhZGRpbmcudG9wO1xuXG4gIGlmIChhbGlnbi52ZXJ0aWNhbCA9PT0gJ21pZGRsZScpIHtcbiAgICB5ICs9IChib3guaGVpZ2h0IC0gdG90YWxIZWlnaHQpIC8gMjtcbiAgfVxuXG4gIC8vIG1hZ2ljIG51bWJlciBpbml0aWFsIG9mZnNldFxuICB5IC09IChsaW5lSGVpZ2h0IHx8IGxheW91dGVkWzBdLmhlaWdodCkgLyA0O1xuXG5cbiAgdmFyIHRleHRFbGVtZW50ID0gc3ZnQ3JlYXRlKCd0ZXh0Jyk7XG5cbiAgc3ZnQXR0cih0ZXh0RWxlbWVudCwgc3R5bGUpO1xuXG4gIC8vIGxheW91dCBlYWNoIGxpbmUgdGFraW5nIGludG8gYWNjb3VudCB0aGF0IHBhcmVudFxuICAvLyBzaGFwZSBtaWdodCByZXNpemUgdG8gZml0IHRleHQgc2l6ZVxuICBmb3JFYWNoKGxheW91dGVkLCBmdW5jdGlvbihsaW5lKSB7XG5cbiAgICB2YXIgeDtcblxuICAgIHkgKz0gKGxpbmVIZWlnaHQgfHwgbGluZS5oZWlnaHQpO1xuXG4gICAgc3dpdGNoIChhbGlnbi5ob3Jpem9udGFsKSB7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICB4ID0gcGFkZGluZy5sZWZ0O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdyaWdodCc6XG4gICAgICB4ID0gKChmaXRCb3ggPyBtYXhMaW5lV2lkdGggOiBtYXhXaWR0aClcbiAgICAgICAgLSBwYWRkaW5nLnJpZ2h0IC0gbGluZS53aWR0aCk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG5cbiAgICAgIC8vIGFrYSBjZW50ZXJcbiAgICAgIHggPSBNYXRoLm1heCgoKChmaXRCb3ggPyBtYXhMaW5lV2lkdGggOiBtYXhXaWR0aClcbiAgICAgICAgLSBsaW5lLndpZHRoKSAvIDIgKyBwYWRkaW5nLmxlZnQpLCAwKTtcbiAgICB9XG5cbiAgICB2YXIgdHNwYW4gPSBzdmdDcmVhdGUoJ3RzcGFuJyk7XG4gICAgc3ZnQXR0cih0c3BhbiwgeyB4OiB4LCB5OiB5IH0pO1xuXG4gICAgdHNwYW4udGV4dENvbnRlbnQgPSBsaW5lLnRleHQ7XG5cbiAgICBzdmdBcHBlbmQodGV4dEVsZW1lbnQsIHRzcGFuKTtcbiAgfSk7XG5cbiAgc3ZnUmVtb3ZlKGhlbHBlclRleHQpO1xuXG4gIHZhciBkaW1lbnNpb25zID0ge1xuICAgIHdpZHRoOiBtYXhMaW5lV2lkdGgsXG4gICAgaGVpZ2h0OiB0b3RhbEhlaWdodFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgZGltZW5zaW9uczogZGltZW5zaW9ucyxcbiAgICBlbGVtZW50OiB0ZXh0RWxlbWVudFxuICB9O1xufTtcblxuXG5mdW5jdGlvbiBnZXRMaW5lSGVpZ2h0KHN0eWxlKSB7XG4gIGlmICgnZm9udFNpemUnIGluIHN0eWxlICYmICdsaW5lSGVpZ2h0JyBpbiBzdHlsZSkge1xuICAgIHJldHVybiBzdHlsZS5saW5lSGVpZ2h0ICogcGFyc2VJbnQoc3R5bGUuZm9udFNpemUsIDEwKTtcbiAgfVxufSIsImltcG9ydCB7IGlzU3RyaW5nLCBhc3NpZ24gfSBmcm9tICdtaW4tZGFzaCc7XG5pbXBvcnQgeyBNb2RkbGUgfSBmcm9tICdtb2RkbGUnO1xuaW1wb3J0IHsgUmVhZGVyLCBXcml0ZXIgfSBmcm9tICdtb2RkbGUteG1sJztcblxuLyoqXG4gKiBBIHN1YiBjbGFzcyBvZiB7QGxpbmsgTW9kZGxlfSB3aXRoIHN1cHBvcnQgZm9yIGltcG9ydCBhbmQgZXhwb3J0IG9mIEJQTU4gMi4wIHhtbCBmaWxlcy5cbiAqXG4gKiBAY2xhc3MgQnBtbk1vZGRsZVxuICogQGV4dGVuZHMgTW9kZGxlXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IHBhY2thZ2VzIHRvIHVzZSBmb3IgaW5zdGFudGlhdGluZyB0aGUgbW9kZWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gYWRkaXRpb25hbCBvcHRpb25zIHRvIHBhc3Mgb3ZlclxuICovXG5mdW5jdGlvbiBCcG1uTW9kZGxlKHBhY2thZ2VzLCBvcHRpb25zKSB7XG4gIE1vZGRsZS5jYWxsKHRoaXMsIHBhY2thZ2VzLCBvcHRpb25zKTtcbn1cblxuQnBtbk1vZGRsZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE1vZGRsZS5wcm90b3R5cGUpO1xuXG4vKipcbiAqIFRoZSBmcm9tWE1MIHJlc3VsdC5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQYXJzZVJlc3VsdFxuICpcbiAqIEBwcm9wZXJ0eSB7TW9kZGxlRWxlbWVudH0gcm9vdEVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8T2JqZWN0Pn0gcmVmZXJlbmNlc1xuICogQHByb3BlcnR5IHtBcnJheTxFcnJvcj59IHdhcm5pbmdzXG4gKiBAcHJvcGVydHkge09iamVjdH0gZWxlbWVudHNCeUlkIC0gYSBtYXBwaW5nIGNvbnRhaW5pbmcgZWFjaCBJRCAtPiBNb2RkbGVFbGVtZW50XG4gKi9cblxuLyoqXG4gKiBUaGUgZnJvbVhNTCBlcnJvci5cbiAqXG4gKiBAdHlwZWRlZiB7RXJyb3J9IFBhcnNlRXJyb3JcbiAqXG4gKiBAcHJvcGVydHkge0FycmF5PEVycm9yPn0gd2FybmluZ3NcbiAqL1xuXG4vKipcbiAqIEluc3RhbnRpYXRlcyBhIEJQTU4gbW9kZWwgdHJlZSBmcm9tIGEgZ2l2ZW4geG1sIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gICB4bWxTdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSAgIFt0eXBlTmFtZT0nYnBtbjpEZWZpbml0aW9ucyddIG5hbWUgb2YgdGhlIHJvb3QgZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9ICAgW29wdGlvbnNdICBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIHVuZGVybHlpbmcgcmVhZGVyXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8UGFyc2VSZXN1bHQsIFBhcnNlRXJyb3I+fVxuICovXG5CcG1uTW9kZGxlLnByb3RvdHlwZS5mcm9tWE1MID0gZnVuY3Rpb24oeG1sU3RyLCB0eXBlTmFtZSwgb3B0aW9ucykge1xuXG4gIGlmICghaXNTdHJpbmcodHlwZU5hbWUpKSB7XG4gICAgb3B0aW9ucyA9IHR5cGVOYW1lO1xuICAgIHR5cGVOYW1lID0gJ2JwbW46RGVmaW5pdGlvbnMnO1xuICB9XG5cbiAgdmFyIHJlYWRlciA9IG5ldyBSZWFkZXIoYXNzaWduKHsgbW9kZWw6IHRoaXMsIGxheDogdHJ1ZSB9LCBvcHRpb25zKSk7XG4gIHZhciByb290SGFuZGxlciA9IHJlYWRlci5oYW5kbGVyKHR5cGVOYW1lKTtcblxuICByZXR1cm4gcmVhZGVyLmZyb21YTUwoeG1sU3RyLCByb290SGFuZGxlcik7XG59O1xuXG5cbi8qKlxuICogVGhlIHRvWE1MIHJlc3VsdC5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTZXJpYWxpemF0aW9uUmVzdWx0XG4gKlxuICogQHByb3BlcnR5IHtTdHJpbmd9IHhtbFxuICovXG5cbi8qKlxuICogU2VyaWFsaXplcyBhIEJQTU4gMi4wIG9iamVjdCB0cmVlIHRvIFhNTC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gICBlbGVtZW50ICAgIHRoZSByb290IGVsZW1lbnQsIHR5cGljYWxseSBhbiBpbnN0YW5jZSBvZiBgYnBtbjpEZWZpbml0aW9uc2BcbiAqIEBwYXJhbSB7T2JqZWN0fSAgIFtvcHRpb25zXSAgdG8gcGFzcyB0byB0aGUgdW5kZXJseWluZyB3cml0ZXJcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTZXJpYWxpemF0aW9uUmVzdWx0LCBFcnJvcj59XG4gKi9cbkJwbW5Nb2RkbGUucHJvdG90eXBlLnRvWE1MID0gZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucykge1xuXG4gIHZhciB3cml0ZXIgPSBuZXcgV3JpdGVyKG9wdGlvbnMpO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHJlc3VsdCA9IHdyaXRlci50b1hNTChlbGVtZW50KTtcblxuICAgICAgcmV0dXJuIHJlc29sdmUoe1xuICAgICAgICB4bWw6IHJlc3VsdFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBuYW1lID0gXCJCUE1OMjBcIjtcbnZhciB1cmkgPSBcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0JQTU4vMjAxMDA1MjQvTU9ERUxcIjtcbnZhciBwcmVmaXggPSBcImJwbW5cIjtcbnZhciBhc3NvY2lhdGlvbnMgPSBbXG5dO1xudmFyIHR5cGVzID0gW1xuXHR7XG5cdFx0bmFtZTogXCJJbnRlcmZhY2VcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlJvb3RFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvcGVyYXRpb25zXCIsXG5cdFx0XHRcdHR5cGU6IFwiT3BlcmF0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbXBsZW1lbnRhdGlvblJlZlwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIk9wZXJhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImluTWVzc2FnZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIk1lc3NhZ2VcIixcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0TWVzc2FnZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIk1lc3NhZ2VcIixcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXJyb3JSZWZcIixcblx0XHRcdFx0dHlwZTogXCJFcnJvclwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImltcGxlbWVudGF0aW9uUmVmXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRW5kUG9pbnRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlJvb3RFbGVtZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkF1ZGl0aW5nXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJHbG9iYWxUYXNrXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJDYWxsYWJsZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJlc291cmNlc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlJlc291cmNlUm9sZVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIk1vbml0b3JpbmdcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlBlcmZvcm1lclwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUmVzb3VyY2VSb2xlXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlByb2Nlc3NcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkZsb3dFbGVtZW50c0NvbnRhaW5lclwiLFxuXHRcdFx0XCJDYWxsYWJsZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInByb2Nlc3NUeXBlXCIsXG5cdFx0XHRcdHR5cGU6IFwiUHJvY2Vzc1R5cGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzQ2xvc2VkXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYXVkaXRpbmdcIixcblx0XHRcdFx0dHlwZTogXCJBdWRpdGluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm1vbml0b3JpbmdcIixcblx0XHRcdFx0dHlwZTogXCJNb25pdG9yaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicHJvcGVydGllc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlByb3BlcnR5XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJsYW5lU2V0c1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdHJlcGxhY2VzOiBcIkZsb3dFbGVtZW50c0NvbnRhaW5lciNsYW5lU2V0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkxhbmVTZXRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJmbG93RWxlbWVudHNcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRyZXBsYWNlczogXCJGbG93RWxlbWVudHNDb250YWluZXIjZmxvd0VsZW1lbnRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRmxvd0VsZW1lbnRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhcnRpZmFjdHNcIixcblx0XHRcdFx0dHlwZTogXCJBcnRpZmFjdFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVzb3VyY2VzXCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVzb3VyY2VSb2xlXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb3JyZWxhdGlvblN1YnNjcmlwdGlvbnNcIixcblx0XHRcdFx0dHlwZTogXCJDb3JyZWxhdGlvblN1YnNjcmlwdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic3VwcG9ydHNcIixcblx0XHRcdFx0dHlwZTogXCJQcm9jZXNzXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGVmaW5pdGlvbmFsQ29sbGFib3JhdGlvblJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkNvbGxhYm9yYXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpc0V4ZWN1dGFibGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTGFuZVNldFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxhbmVzXCIsXG5cdFx0XHRcdHR5cGU6IFwiTGFuZVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkxhbmVcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJ0aXRpb25FbGVtZW50UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiQmFzZUVsZW1lbnRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJ0aXRpb25FbGVtZW50XCIsXG5cdFx0XHRcdHR5cGU6IFwiQmFzZUVsZW1lbnRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJmbG93Tm9kZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkZsb3dOb2RlXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY2hpbGRMYW5lU2V0XCIsXG5cdFx0XHRcdHR5cGU6IFwiTGFuZVNldFwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJHbG9iYWxNYW51YWxUYXNrXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJHbG9iYWxUYXNrXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIk1hbnVhbFRhc2tcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlRhc2tcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiVXNlclRhc2tcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlRhc2tcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJlbmRlcmluZ3NcIixcblx0XHRcdFx0dHlwZTogXCJSZW5kZXJpbmdcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImltcGxlbWVudGF0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUmVuZGVyaW5nXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJIdW1hblBlcmZvcm1lclwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUGVyZm9ybWVyXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlBvdGVudGlhbE93bmVyXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJIdW1hblBlcmZvcm1lclwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJHbG9iYWxVc2VyVGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiR2xvYmFsVGFza1wiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wbGVtZW50YXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJlbmRlcmluZ3NcIixcblx0XHRcdFx0dHlwZTogXCJSZW5kZXJpbmdcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJHYXRld2F5XCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkZsb3dOb2RlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJnYXRld2F5RGlyZWN0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiR2F0ZXdheURpcmVjdGlvblwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCJVbnNwZWNpZmllZFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkV2ZW50QmFzZWRHYXRld2F5XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJHYXRld2F5XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnN0YW50aWF0ZVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogZmFsc2UsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXZlbnRHYXRld2F5VHlwZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkV2ZW50QmFzZWRHYXRld2F5VHlwZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIkV4Y2x1c2l2ZVwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb21wbGV4R2F0ZXdheVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiR2F0ZXdheVwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYWN0aXZhdGlvbkNvbmRpdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIkV4cHJlc3Npb25cIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInhzaTp0eXBlXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkZWZhdWx0XCIsXG5cdFx0XHRcdHR5cGU6IFwiU2VxdWVuY2VGbG93XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkV4Y2x1c2l2ZUdhdGV3YXlcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkdhdGV3YXlcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRlZmF1bHRcIixcblx0XHRcdFx0dHlwZTogXCJTZXF1ZW5jZUZsb3dcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSW5jbHVzaXZlR2F0ZXdheVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiR2F0ZXdheVwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGVmYXVsdFwiLFxuXHRcdFx0XHR0eXBlOiBcIlNlcXVlbmNlRmxvd1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJQYXJhbGxlbEdhdGV3YXlcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkdhdGV3YXlcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUm9vdEVsZW1lbnRcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUmVsYXRpb25zaGlwXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidHlwZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGlyZWN0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVsYXRpb25zaGlwRGlyZWN0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzb3VyY2VcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJFbGVtZW50XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGFyZ2V0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiRWxlbWVudFwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJCYXNlRWxlbWVudFwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlkXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIixcblx0XHRcdFx0aXNJZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkb2N1bWVudGF0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRG9jdW1lbnRhdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXh0ZW5zaW9uRGVmaW5pdGlvbnNcIixcblx0XHRcdFx0dHlwZTogXCJFeHRlbnNpb25EZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXh0ZW5zaW9uRWxlbWVudHNcIixcblx0XHRcdFx0dHlwZTogXCJFeHRlbnNpb25FbGVtZW50c1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJFeHRlbnNpb25cIixcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibXVzdFVuZGVyc3RhbmRcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IGZhbHNlLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRlZmluaXRpb25cIixcblx0XHRcdFx0dHlwZTogXCJFeHRlbnNpb25EZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkV4dGVuc2lvbkRlZmluaXRpb25cIixcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXh0ZW5zaW9uQXR0cmlidXRlRGVmaW5pdGlvbnNcIixcblx0XHRcdFx0dHlwZTogXCJFeHRlbnNpb25BdHRyaWJ1dGVEZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXh0ZW5zaW9uQXR0cmlidXRlRGVmaW5pdGlvblwiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0eXBlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpc1JlZmVyZW5jZVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogZmFsc2UsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXh0ZW5zaW9uRGVmaW5pdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIkV4dGVuc2lvbkRlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXh0ZW5zaW9uRWxlbWVudHNcIixcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidmFsdWVSZWZcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJFbGVtZW50XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidmFsdWVzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRWxlbWVudFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXh0ZW5zaW9uQXR0cmlidXRlRGVmaW5pdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIkV4dGVuc2lvbkF0dHJpYnV0ZURlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRG9jdW1lbnRhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRleHRcIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIixcblx0XHRcdFx0aXNCb2R5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRleHRGb3JtYXRcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwidGV4dC9wbGFpblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkV2ZW50XCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkZsb3dOb2RlXCIsXG5cdFx0XHRcIkludGVyYWN0aW9uTm9kZVwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicHJvcGVydGllc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlByb3BlcnR5XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSW50ZXJtZWRpYXRlQ2F0Y2hFdmVudFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ2F0Y2hFdmVudFwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJbnRlcm1lZGlhdGVUaHJvd0V2ZW50XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJUaHJvd0V2ZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkVuZEV2ZW50XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJUaHJvd0V2ZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlN0YXJ0RXZlbnRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkNhdGNoRXZlbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzSW50ZXJydXB0aW5nXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiB0cnVlLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJUaHJvd0V2ZW50XCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkV2ZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkYXRhSW5wdXRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRGF0YUlucHV0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkYXRhSW5wdXRBc3NvY2lhdGlvbnNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhSW5wdXRBc3NvY2lhdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5wdXRTZXRcIixcblx0XHRcdFx0dHlwZTogXCJJbnB1dFNldFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV2ZW50RGVmaW5pdGlvbnNcIixcblx0XHRcdFx0dHlwZTogXCJFdmVudERlZmluaXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV2ZW50RGVmaW5pdGlvblJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDYXRjaEV2ZW50XCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkV2ZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJhbGxlbE11bHRpcGxlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkYXRhT3V0cHV0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFPdXRwdXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFPdXRwdXRBc3NvY2lhdGlvbnNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhT3V0cHV0QXNzb2NpYXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm91dHB1dFNldFwiLFxuXHRcdFx0XHR0eXBlOiBcIk91dHB1dFNldFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV2ZW50RGVmaW5pdGlvbnNcIixcblx0XHRcdFx0dHlwZTogXCJFdmVudERlZmluaXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV2ZW50RGVmaW5pdGlvblJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJCb3VuZGFyeUV2ZW50XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJDYXRjaEV2ZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjYW5jZWxBY3Rpdml0eVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogdHJ1ZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhdHRhY2hlZFRvUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiQWN0aXZpdHlcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlJvb3RFbGVtZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNhbmNlbEV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnREZWZpbml0aW9uXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkVycm9yRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFdmVudERlZmluaXRpb25cIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImVycm9yUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXJyb3JcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiVGVybWluYXRlRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFdmVudERlZmluaXRpb25cIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnREZWZpbml0aW9uXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJlc2NhbGF0aW9uUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXNjYWxhdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJFc2NhbGF0aW9uXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInN0cnVjdHVyZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkl0ZW1EZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXNjYWxhdGlvbkNvZGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlJvb3RFbGVtZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNvbXBlbnNhdGVFdmVudERlZmluaXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkV2ZW50RGVmaW5pdGlvblwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwid2FpdEZvckNvbXBsZXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYWN0aXZpdHlSZWZcIixcblx0XHRcdFx0dHlwZTogXCJBY3Rpdml0eVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJUaW1lckV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnREZWZpbml0aW9uXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0aW1lRGF0ZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkV4cHJlc3Npb25cIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInhzaTp0eXBlXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0aW1lQ3ljbGVcIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGltZUR1cmF0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJMaW5rRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFdmVudERlZmluaXRpb25cIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRhcmdldFwiLFxuXHRcdFx0XHR0eXBlOiBcIkxpbmtFdmVudERlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzb3VyY2VcIixcblx0XHRcdFx0dHlwZTogXCJMaW5rRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIk1lc3NhZ2VFdmVudERlZmluaXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkV2ZW50RGVmaW5pdGlvblwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibWVzc2FnZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIk1lc3NhZ2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvcGVyYXRpb25SZWZcIixcblx0XHRcdFx0dHlwZTogXCJPcGVyYXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29uZGl0aW9uYWxFdmVudERlZmluaXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkV2ZW50RGVmaW5pdGlvblwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29uZGl0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJTaWduYWxFdmVudERlZmluaXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkV2ZW50RGVmaW5pdGlvblwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic2lnbmFsUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiU2lnbmFsXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlNpZ25hbFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInN0cnVjdHVyZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkl0ZW1EZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkltcGxpY2l0VGhyb3dFdmVudFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiVGhyb3dFdmVudFwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJEYXRhU3RhdGVcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSXRlbUF3YXJlRWxlbWVudFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIml0ZW1TdWJqZWN0UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbURlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkYXRhU3RhdGVcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhU3RhdGVcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRGF0YUFzc29jaWF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic291cmNlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbUF3YXJlRWxlbWVudFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRhcmdldFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkl0ZW1Bd2FyZUVsZW1lbnRcIixcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidHJhbnNmb3JtYXRpb25cIixcblx0XHRcdFx0dHlwZTogXCJGb3JtYWxFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJwcm9wZXJ0eVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYXNzaWdubWVudFwiLFxuXHRcdFx0XHR0eXBlOiBcIkFzc2lnbm1lbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJEYXRhSW5wdXRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkl0ZW1Bd2FyZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzQ29sbGVjdGlvblwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogZmFsc2UsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5wdXRTZXRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJbnB1dFNldFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5wdXRTZXRXaXRoT3B0aW9uYWxcIixcblx0XHRcdFx0dHlwZTogXCJJbnB1dFNldFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5wdXRTZXRXaXRoV2hpbGVFeGVjdXRpbmdcIixcblx0XHRcdFx0dHlwZTogXCJJbnB1dFNldFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkRhdGFPdXRwdXRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkl0ZW1Bd2FyZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzQ29sbGVjdGlvblwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogZmFsc2UsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0cHV0U2V0UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiT3V0cHV0U2V0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvdXRwdXRTZXRXaXRoT3B0aW9uYWxcIixcblx0XHRcdFx0dHlwZTogXCJPdXRwdXRTZXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm91dHB1dFNldFdpdGhXaGlsZUV4ZWN1dGluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIk91dHB1dFNldFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIklucHV0U2V0XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YUlucHV0UmVmc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFJbnB1dFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm9wdGlvbmFsSW5wdXRSZWZzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRGF0YUlucHV0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwid2hpbGVFeGVjdXRpbmdJbnB1dFJlZnNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhSW5wdXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvdXRwdXRTZXRSZWZzXCIsXG5cdFx0XHRcdHR5cGU6IFwiT3V0cHV0U2V0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIk91dHB1dFNldFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFPdXRwdXRSZWZzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRGF0YU91dHB1dFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlucHV0U2V0UmVmc1wiLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0U2V0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3B0aW9uYWxPdXRwdXRSZWZzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRGF0YU91dHB1dFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIndoaWxlRXhlY3V0aW5nT3V0cHV0UmVmc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFPdXRwdXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUHJvcGVydHlcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkl0ZW1Bd2FyZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJEYXRhSW5wdXRBc3NvY2lhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRGF0YUFzc29jaWF0aW9uXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkRhdGFPdXRwdXRBc3NvY2lhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRGF0YUFzc29jaWF0aW9uXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIklucHV0T3V0cHV0U3BlY2lmaWNhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFJbnB1dHNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhSW5wdXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFPdXRwdXRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRGF0YU91dHB1dFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5wdXRTZXRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiSW5wdXRTZXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm91dHB1dFNldHNcIixcblx0XHRcdFx0dHlwZTogXCJPdXRwdXRTZXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJEYXRhT2JqZWN0XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJGbG93RWxlbWVudFwiLFxuXHRcdFx0XCJJdGVtQXdhcmVFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpc0NvbGxlY3Rpb25cIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IGZhbHNlLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJbnB1dE91dHB1dEJpbmRpbmdcIixcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5wdXREYXRhUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSW5wdXRTZXRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvdXRwdXREYXRhUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiT3V0cHV0U2V0XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3BlcmF0aW9uUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiT3BlcmF0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkFzc2lnbm1lbnRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJmcm9tXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRvXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJEYXRhU3RvcmVcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlJvb3RFbGVtZW50XCIsXG5cdFx0XHRcIkl0ZW1Bd2FyZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhcGFjaXR5XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJJbnRlZ2VyXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNVbmxpbWl0ZWRcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IHRydWUsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkRhdGFTdG9yZVJlZmVyZW5jZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiSXRlbUF3YXJlRWxlbWVudFwiLFxuXHRcdFx0XCJGbG93RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YVN0b3JlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiRGF0YVN0b3JlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkRhdGFPYmplY3RSZWZlcmVuY2VcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkl0ZW1Bd2FyZUVsZW1lbnRcIixcblx0XHRcdFwiRmxvd0VsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFPYmplY3RSZWZcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhT2JqZWN0XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNvbnZlcnNhdGlvbkxpbmtcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzb3VyY2VSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJbnRlcmFjdGlvbk5vZGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0YXJnZXRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJbnRlcmFjdGlvbk5vZGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29udmVyc2F0aW9uQXNzb2NpYXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbm5lckNvbnZlcnNhdGlvbk5vZGVSZWZcIixcblx0XHRcdFx0dHlwZTogXCJDb252ZXJzYXRpb25Ob2RlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0ZXJDb252ZXJzYXRpb25Ob2RlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29udmVyc2F0aW9uTm9kZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDYWxsQ29udmVyc2F0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJDb252ZXJzYXRpb25Ob2RlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjYWxsZWRDb2xsYWJvcmF0aW9uUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29sbGFib3JhdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcnRpY2lwYW50QXNzb2NpYXRpb25zXCIsXG5cdFx0XHRcdHR5cGU6IFwiUGFydGljaXBhbnRBc3NvY2lhdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNvbnZlcnNhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ29udmVyc2F0aW9uTm9kZVwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJTdWJDb252ZXJzYXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkNvbnZlcnNhdGlvbk5vZGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvbnZlcnNhdGlvbk5vZGVzXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29udmVyc2F0aW9uTm9kZVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNvbnZlcnNhdGlvbk5vZGVcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiSW50ZXJhY3Rpb25Ob2RlXCIsXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJ0aWNpcGFudFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibWVzc2FnZUZsb3dSZWZzXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZUZsb3dcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb3JyZWxhdGlvbktleXNcIixcblx0XHRcdFx0dHlwZTogXCJDb3JyZWxhdGlvbktleVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkdsb2JhbENvbnZlcnNhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ29sbGFib3JhdGlvblwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJQYXJ0bmVyRW50aXR5XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicGFydGljaXBhbnRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJQYXJ0bmVyUm9sZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcnRpY2lwYW50UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiUGFydGljaXBhbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29ycmVsYXRpb25Qcm9wZXJ0eVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvcnJlbGF0aW9uUHJvcGVydHlSZXRyaWV2YWxFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29ycmVsYXRpb25Qcm9wZXJ0eVJldHJpZXZhbEV4cHJlc3Npb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInR5cGVcIixcblx0XHRcdFx0dHlwZTogXCJJdGVtRGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJFcnJvclwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInN0cnVjdHVyZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkl0ZW1EZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXJyb3JDb2RlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29ycmVsYXRpb25LZXlcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb3JyZWxhdGlvblByb3BlcnR5UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29ycmVsYXRpb25Qcm9wZXJ0eVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRpc0Fic3RyYWN0OiBmYWxzZSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYm9keVwiLFxuXHRcdFx0XHRpc0JvZHk6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkZvcm1hbEV4cHJlc3Npb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkV4cHJlc3Npb25cIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxhbmd1YWdlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJldmFsdWF0ZXNUb1R5cGVSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJdGVtRGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJNZXNzYWdlXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXRlbVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkl0ZW1EZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkl0ZW1EZWZpbml0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXRlbUtpbmRcIixcblx0XHRcdFx0dHlwZTogXCJJdGVtS2luZFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic3RydWN0dXJlUmVmXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpc0NvbGxlY3Rpb25cIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IGZhbHNlLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImltcG9ydFwiLFxuXHRcdFx0XHR0eXBlOiBcIkltcG9ydFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJGbG93RWxlbWVudFwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYXVkaXRpbmdcIixcblx0XHRcdFx0dHlwZTogXCJBdWRpdGluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm1vbml0b3JpbmdcIixcblx0XHRcdFx0dHlwZTogXCJNb25pdG9yaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY2F0ZWdvcnlWYWx1ZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkNhdGVnb3J5VmFsdWVcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiU2VxdWVuY2VGbG93XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJGbG93RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNJbW1lZGlhdGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb25kaXRpb25FeHByZXNzaW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInNvdXJjZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkZsb3dOb2RlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGFyZ2V0UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiRmxvd05vZGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRmxvd0VsZW1lbnRzQ29udGFpbmVyXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJsYW5lU2V0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkxhbmVTZXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImZsb3dFbGVtZW50c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkZsb3dFbGVtZW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ2FsbGFibGVFbGVtZW50XCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlJvb3RFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpb1NwZWNpZmljYXRpb25cIixcblx0XHRcdFx0dHlwZTogXCJJbnB1dE91dHB1dFNwZWNpZmljYXRpb25cIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInByb3BlcnR5XCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzdXBwb3J0ZWRJbnRlcmZhY2VSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJbnRlcmZhY2VcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpb0JpbmRpbmdcIixcblx0XHRcdFx0dHlwZTogXCJJbnB1dE91dHB1dEJpbmRpbmdcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwicHJvcGVydHlcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJGbG93Tm9kZVwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJGbG93RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5jb21pbmdcIixcblx0XHRcdFx0dHlwZTogXCJTZXF1ZW5jZUZsb3dcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvdXRnb2luZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIlNlcXVlbmNlRmxvd1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxhbmVzXCIsXG5cdFx0XHRcdHR5cGU6IFwiTGFuZVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNvcnJlbGF0aW9uUHJvcGVydHlSZXRyaWV2YWxFeHByZXNzaW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibWVzc2FnZVBhdGhcIixcblx0XHRcdFx0dHlwZTogXCJGb3JtYWxFeHByZXNzaW9uXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibWVzc2FnZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIk1lc3NhZ2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29ycmVsYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkYXRhUGF0aFwiLFxuXHRcdFx0XHR0eXBlOiBcIkZvcm1hbEV4cHJlc3Npb25cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb3JyZWxhdGlvblByb3BlcnR5UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29ycmVsYXRpb25Qcm9wZXJ0eVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSZXNvdXJjZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJlc291cmNlUGFyYW1ldGVyc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlJlc291cmNlUGFyYW1ldGVyXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUmVzb3VyY2VQYXJhbWV0ZXJcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpc1JlcXVpcmVkXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidHlwZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkl0ZW1EZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNvcnJlbGF0aW9uU3Vic2NyaXB0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29ycmVsYXRpb25LZXlSZWZcIixcblx0XHRcdFx0dHlwZTogXCJDb3JyZWxhdGlvbktleVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvcnJlbGF0aW9uUHJvcGVydHlCaW5kaW5nXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29ycmVsYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJNZXNzYWdlRmxvd1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInNvdXJjZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkludGVyYWN0aW9uTm9kZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRhcmdldFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkludGVyYWN0aW9uTm9kZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm1lc3NhZ2VSZWZcIixcblx0XHRcdFx0dHlwZTogXCJNZXNzYWdlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIk1lc3NhZ2VGbG93QXNzb2NpYXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbm5lck1lc3NhZ2VGbG93UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZUZsb3dcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvdXRlck1lc3NhZ2VGbG93UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZUZsb3dcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSW50ZXJhY3Rpb25Ob2RlXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5jb21pbmdDb252ZXJzYXRpb25MaW5rc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkNvbnZlcnNhdGlvbkxpbmtcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm91dGdvaW5nQ29udmVyc2F0aW9uTGlua3NcIixcblx0XHRcdFx0dHlwZTogXCJDb252ZXJzYXRpb25MaW5rXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUGFydGljaXBhbnRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkludGVyYWN0aW9uTm9kZVwiLFxuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW50ZXJmYWNlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSW50ZXJmYWNlXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicGFydGljaXBhbnRNdWx0aXBsaWNpdHlcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudE11bHRpcGxpY2l0eVwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImVuZFBvaW50UmVmc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkVuZFBvaW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicHJvY2Vzc1JlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIlByb2Nlc3NcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUGFydGljaXBhbnRBc3NvY2lhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlubmVyUGFydGljaXBhbnRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm91dGVyUGFydGljaXBhbnRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJQYXJ0aWNpcGFudE11bHRpcGxpY2l0eVwiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtaW5pbXVtXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiAwLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiSW50ZWdlclwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm1heGltdW1cIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IDEsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJJbnRlZ2VyXCJcblx0XHRcdH1cblx0XHRdLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29sbGFib3JhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzQ2xvc2VkXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicGFydGljaXBhbnRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiUGFydGljaXBhbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm1lc3NhZ2VGbG93c1wiLFxuXHRcdFx0XHR0eXBlOiBcIk1lc3NhZ2VGbG93XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhcnRpZmFjdHNcIixcblx0XHRcdFx0dHlwZTogXCJBcnRpZmFjdFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29udmVyc2F0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkNvbnZlcnNhdGlvbk5vZGVcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvbnZlcnNhdGlvbkFzc29jaWF0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkNvbnZlcnNhdGlvbkFzc29jaWF0aW9uXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicGFydGljaXBhbnRBc3NvY2lhdGlvbnNcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudEFzc29jaWF0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlRmxvd0Fzc29jaWF0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIk1lc3NhZ2VGbG93QXNzb2NpYXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvcnJlbGF0aW9uS2V5c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkNvcnJlbGF0aW9uS2V5XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjaG9yZW9ncmFwaHlSZWZcIixcblx0XHRcdFx0dHlwZTogXCJDaG9yZW9ncmFwaHlcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb252ZXJzYXRpb25MaW5rc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkNvbnZlcnNhdGlvbkxpbmtcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDaG9yZW9ncmFwaHlBY3Rpdml0eVwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJGbG93Tm9kZVwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicGFydGljaXBhbnRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImluaXRpYXRpbmdQYXJ0aWNpcGFudFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29ycmVsYXRpb25LZXlzXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29ycmVsYXRpb25LZXlcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxvb3BUeXBlXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ2hvcmVvZ3JhcGh5TG9vcFR5cGVcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiTm9uZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNhbGxDaG9yZW9ncmFwaHlcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkNob3Jlb2dyYXBoeUFjdGl2aXR5XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjYWxsZWRDaG9yZW9ncmFwaHlSZWZcIixcblx0XHRcdFx0dHlwZTogXCJDaG9yZW9ncmFwaHlcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJ0aWNpcGFudEFzc29jaWF0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50QXNzb2NpYXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJTdWJDaG9yZW9ncmFwaHlcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkNob3Jlb2dyYXBoeUFjdGl2aXR5XCIsXG5cdFx0XHRcIkZsb3dFbGVtZW50c0NvbnRhaW5lclwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYXJ0aWZhY3RzXCIsXG5cdFx0XHRcdHR5cGU6IFwiQXJ0aWZhY3RcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDaG9yZW9ncmFwaHlUYXNrXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJDaG9yZW9ncmFwaHlBY3Rpdml0eVwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibWVzc2FnZUZsb3dSZWZcIixcblx0XHRcdFx0dHlwZTogXCJNZXNzYWdlRmxvd1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDaG9yZW9ncmFwaHlcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkNvbGxhYm9yYXRpb25cIixcblx0XHRcdFwiRmxvd0VsZW1lbnRzQ29udGFpbmVyXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkdsb2JhbENob3Jlb2dyYXBoeVRhc2tcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkNob3Jlb2dyYXBoeVwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5pdGlhdGluZ1BhcnRpY2lwYW50UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiUGFydGljaXBhbnRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiVGV4dEFubm90YXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkFydGlmYWN0XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0ZXh0XCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGV4dEZvcm1hdFwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiR3JvdXBcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkFydGlmYWN0XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjYXRlZ29yeVZhbHVlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ2F0ZWdvcnlWYWx1ZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJBc3NvY2lhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQXJ0aWZhY3RcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImFzc29jaWF0aW9uRGlyZWN0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiQXNzb2NpYXRpb25EaXJlY3Rpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInNvdXJjZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkJhc2VFbGVtZW50XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGFyZ2V0UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiQmFzZUVsZW1lbnRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ2F0ZWdvcnlcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlJvb3RFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjYXRlZ29yeVZhbHVlXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ2F0ZWdvcnlWYWx1ZVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkFydGlmYWN0XCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNhdGVnb3J5VmFsdWVcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjYXRlZ29yaXplZEZsb3dFbGVtZW50c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkZsb3dFbGVtZW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ2YWx1ZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkFjdGl2aXR5XCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkZsb3dOb2RlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpc0ZvckNvbXBlbnNhdGlvblwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogZmFsc2UsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGVmYXVsdFwiLFxuXHRcdFx0XHR0eXBlOiBcIlNlcXVlbmNlRmxvd1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlvU3BlY2lmaWNhdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0T3V0cHV0U3BlY2lmaWNhdGlvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwicHJvcGVydHlcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImJvdW5kYXJ5RXZlbnRSZWZzXCIsXG5cdFx0XHRcdHR5cGU6IFwiQm91bmRhcnlFdmVudFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInByb3BlcnRpZXNcIixcblx0XHRcdFx0dHlwZTogXCJQcm9wZXJ0eVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YUlucHV0QXNzb2NpYXRpb25zXCIsXG5cdFx0XHRcdHR5cGU6IFwiRGF0YUlucHV0QXNzb2NpYXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFPdXRwdXRBc3NvY2lhdGlvbnNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhT3V0cHV0QXNzb2NpYXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInN0YXJ0UXVhbnRpdHlcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IDEsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJJbnRlZ2VyXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVzb3VyY2VzXCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVzb3VyY2VSb2xlXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb21wbGV0aW9uUXVhbnRpdHlcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IDEsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJJbnRlZ2VyXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibG9vcENoYXJhY3RlcmlzdGljc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkxvb3BDaGFyYWN0ZXJpc3RpY3NcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiU2VydmljZVRhc2tcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlRhc2tcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImltcGxlbWVudGF0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvcGVyYXRpb25SZWZcIixcblx0XHRcdFx0dHlwZTogXCJPcGVyYXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiU3ViUHJvY2Vzc1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQWN0aXZpdHlcIixcblx0XHRcdFwiRmxvd0VsZW1lbnRzQ29udGFpbmVyXCIsXG5cdFx0XHRcIkludGVyYWN0aW9uTm9kZVwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidHJpZ2dlcmVkQnlFdmVudFwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogZmFsc2UsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYXJ0aWZhY3RzXCIsXG5cdFx0XHRcdHR5cGU6IFwiQXJ0aWZhY3RcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJMb29wQ2hhcmFjdGVyaXN0aWNzXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIk11bHRpSW5zdGFuY2VMb29wQ2hhcmFjdGVyaXN0aWNzXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJMb29wQ2hhcmFjdGVyaXN0aWNzXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpc1NlcXVlbnRpYWxcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IGZhbHNlLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImJlaGF2aW9yXCIsXG5cdFx0XHRcdHR5cGU6IFwiTXVsdGlJbnN0YW5jZUJlaGF2aW9yXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIkFsbFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibG9vcENhcmRpbmFsaXR5XCIsXG5cdFx0XHRcdHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxvb3BEYXRhSW5wdXRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJdGVtQXdhcmVFbGVtZW50XCIsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxvb3BEYXRhT3V0cHV0UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbUF3YXJlRWxlbWVudFwiLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dERhdGFJdGVtXCIsXG5cdFx0XHRcdHR5cGU6IFwiRGF0YUlucHV0XCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJwcm9wZXJ0eVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0cHV0RGF0YUl0ZW1cIixcblx0XHRcdFx0dHlwZTogXCJEYXRhT3V0cHV0XCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJwcm9wZXJ0eVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29tcGxleEJlaGF2aW9yRGVmaW5pdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIkNvbXBsZXhCZWhhdmlvckRlZmluaXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvbXBsZXRpb25Db25kaXRpb25cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib25lQmVoYXZpb3JFdmVudFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5vbmVCZWhhdmlvckV2ZW50UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlN0YW5kYXJkTG9vcENoYXJhY3RlcmlzdGljc1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiTG9vcENoYXJhY3RlcmlzdGljc1wiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGVzdEJlZm9yZVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogZmFsc2UsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibG9vcENvbmRpdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIkV4cHJlc3Npb25cIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInhzaTp0eXBlXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJsb29wTWF4aW11bVwiLFxuXHRcdFx0XHR0eXBlOiBcIkludGVnZXJcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDYWxsQWN0aXZpdHlcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkFjdGl2aXR5XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjYWxsZWRFbGVtZW50XCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiVGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQWN0aXZpdHlcIixcblx0XHRcdFwiSW50ZXJhY3Rpb25Ob2RlXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlNlbmRUYXNrXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJUYXNrXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbXBsZW1lbnRhdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3BlcmF0aW9uUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiT3BlcmF0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibWVzc2FnZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIk1lc3NhZ2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUmVjZWl2ZVRhc2tcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlRhc2tcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImltcGxlbWVudGF0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnN0YW50aWF0ZVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogZmFsc2UsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3BlcmF0aW9uUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiT3BlcmF0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibWVzc2FnZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIk1lc3NhZ2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiU2NyaXB0VGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiVGFza1wiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic2NyaXB0Rm9ybWF0XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzY3JpcHRcIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQnVzaW5lc3NSdWxlVGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiVGFza1wiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wbGVtZW50YXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJBZEhvY1N1YlByb2Nlc3NcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlN1YlByb2Nlc3NcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvbXBsZXRpb25Db25kaXRpb25cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3JkZXJpbmdcIixcblx0XHRcdFx0dHlwZTogXCJBZEhvY09yZGVyaW5nXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjYW5jZWxSZW1haW5pbmdJbnN0YW5jZXNcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IHRydWUsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlRyYW5zYWN0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJTdWJQcm9jZXNzXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwcm90b2NvbFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibWV0aG9kXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiR2xvYmFsU2NyaXB0VGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiR2xvYmFsVGFza1wiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic2NyaXB0TGFuZ3VhZ2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInNjcmlwdFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkdsb2JhbEJ1c2luZXNzUnVsZVRhc2tcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkdsb2JhbFRhc2tcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImltcGxlbWVudGF0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29tcGxleEJlaGF2aW9yRGVmaW5pdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvbmRpdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIkZvcm1hbEV4cHJlc3Npb25cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJldmVudFwiLFxuXHRcdFx0XHR0eXBlOiBcIkltcGxpY2l0VGhyb3dFdmVudFwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSZXNvdXJjZVJvbGVcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJyZXNvdXJjZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlc291cmNlXCIsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJlc291cmNlUGFyYW1ldGVyQmluZGluZ3NcIixcblx0XHRcdFx0dHlwZTogXCJSZXNvdXJjZVBhcmFtZXRlckJpbmRpbmdcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJlc291cmNlQXNzaWdubWVudEV4cHJlc3Npb25cIixcblx0XHRcdFx0dHlwZTogXCJSZXNvdXJjZUFzc2lnbm1lbnRFeHByZXNzaW9uXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlJlc291cmNlUGFyYW1ldGVyQmluZGluZ1wiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJleHByZXNzaW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcmFtZXRlclJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlc291cmNlUGFyYW1ldGVyXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUmVzb3VyY2VBc3NpZ25tZW50RXhwcmVzc2lvblwiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJleHByZXNzaW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkltcG9ydFwiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbXBvcnRUeXBlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJsb2NhdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZXNwYWNlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRGVmaW5pdGlvbnNcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0YXJnZXROYW1lc3BhY2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV4cHJlc3Npb25MYW5ndWFnZVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hQYXRoXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0eXBlTGFuZ3VhZ2VcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWFcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImltcG9ydHNcIixcblx0XHRcdFx0dHlwZTogXCJJbXBvcnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV4dGVuc2lvbnNcIixcblx0XHRcdFx0dHlwZTogXCJFeHRlbnNpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJvb3RFbGVtZW50c1wiLFxuXHRcdFx0XHR0eXBlOiBcIlJvb3RFbGVtZW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkaWFncmFtc1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiYnBtbmRpOkJQTU5EaWFncmFtXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXhwb3J0ZXJcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJlbGF0aW9uc2hpcHNcIixcblx0XHRcdFx0dHlwZTogXCJSZWxhdGlvbnNoaXBcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV4cG9ydGVyVmVyc2lvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH1cbl07XG52YXIgZW51bWVyYXRpb25zID0gW1xuXHR7XG5cdFx0bmFtZTogXCJQcm9jZXNzVHlwZVwiLFxuXHRcdGxpdGVyYWxWYWx1ZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJOb25lXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiUHVibGljXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiUHJpdmF0ZVwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJHYXRld2F5RGlyZWN0aW9uXCIsXG5cdFx0bGl0ZXJhbFZhbHVlczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIlVuc3BlY2lmaWVkXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiQ29udmVyZ2luZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIkRpdmVyZ2luZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIk1peGVkXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkV2ZW50QmFzZWRHYXRld2F5VHlwZVwiLFxuXHRcdGxpdGVyYWxWYWx1ZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJQYXJhbGxlbFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIkV4Y2x1c2l2ZVwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSZWxhdGlvbnNoaXBEaXJlY3Rpb25cIixcblx0XHRsaXRlcmFsVmFsdWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiTm9uZVwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIkZvcndhcmRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJCYWNrd2FyZFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIkJvdGhcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSXRlbUtpbmRcIixcblx0XHRsaXRlcmFsVmFsdWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiUGh5c2ljYWxcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJJbmZvcm1hdGlvblwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDaG9yZW9ncmFwaHlMb29wVHlwZVwiLFxuXHRcdGxpdGVyYWxWYWx1ZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJOb25lXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiU3RhbmRhcmRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJNdWx0aUluc3RhbmNlU2VxdWVudGlhbFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIk11bHRpSW5zdGFuY2VQYXJhbGxlbFwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJBc3NvY2lhdGlvbkRpcmVjdGlvblwiLFxuXHRcdGxpdGVyYWxWYWx1ZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJOb25lXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiT25lXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiQm90aFwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJNdWx0aUluc3RhbmNlQmVoYXZpb3JcIixcblx0XHRsaXRlcmFsVmFsdWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiTm9uZVwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIk9uZVwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIkFsbFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIkNvbXBsZXhcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQWRIb2NPcmRlcmluZ1wiLFxuXHRcdGxpdGVyYWxWYWx1ZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJQYXJhbGxlbFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIlNlcXVlbnRpYWxcIlxuXHRcdFx0fVxuXHRcdF1cblx0fVxuXTtcbnZhciB4bWwgPSB7XG5cdHRhZ0FsaWFzOiBcImxvd2VyQ2FzZVwiLFxuXHR0eXBlUHJlZml4OiBcInRcIlxufTtcbnZhciBCcG1uUGFja2FnZSA9IHtcblx0bmFtZTogbmFtZSxcblx0dXJpOiB1cmksXG5cdHByZWZpeDogcHJlZml4LFxuXHRhc3NvY2lhdGlvbnM6IGFzc29jaWF0aW9ucyxcblx0dHlwZXM6IHR5cGVzLFxuXHRlbnVtZXJhdGlvbnM6IGVudW1lcmF0aW9ucyxcblx0eG1sOiB4bWxcbn07XG5cbnZhciBuYW1lJDEgPSBcIkJQTU5ESVwiO1xudmFyIHVyaSQxID0gXCJodHRwOi8vd3d3Lm9tZy5vcmcvc3BlYy9CUE1OLzIwMTAwNTI0L0RJXCI7XG52YXIgcHJlZml4JDEgPSBcImJwbW5kaVwiO1xudmFyIHR5cGVzJDEgPSBbXG5cdHtcblx0XHRuYW1lOiBcIkJQTU5EaWFncmFtXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBsYW5lXCIsXG5cdFx0XHRcdHR5cGU6IFwiQlBNTlBsYW5lXCIsXG5cdFx0XHRcdHJlZGVmaW5lczogXCJkaTpEaWFncmFtI3Jvb3RFbGVtZW50XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibGFiZWxTdHlsZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkJQTU5MYWJlbFN0eWxlXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJkaTpEaWFncmFtXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkJQTU5QbGFuZVwiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJicG1uRWxlbWVudFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcImJwbW46QmFzZUVsZW1lbnRcIixcblx0XHRcdFx0cmVkZWZpbmVzOiBcImRpOkRpYWdyYW1FbGVtZW50I21vZGVsRWxlbWVudFwiXG5cdFx0XHR9XG5cdFx0XSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcImRpOlBsYW5lXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkJQTU5TaGFwZVwiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJicG1uRWxlbWVudFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcImJwbW46QmFzZUVsZW1lbnRcIixcblx0XHRcdFx0cmVkZWZpbmVzOiBcImRpOkRpYWdyYW1FbGVtZW50I21vZGVsRWxlbWVudFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzSG9yaXpvbnRhbFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzRXhwYW5kZWRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpc01hcmtlclZpc2libGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJsYWJlbFwiLFxuXHRcdFx0XHR0eXBlOiBcIkJQTU5MYWJlbFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzTWVzc2FnZVZpc2libGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJ0aWNpcGFudEJhbmRLaW5kXCIsXG5cdFx0XHRcdHR5cGU6IFwiUGFydGljaXBhbnRCYW5kS2luZFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY2hvcmVvZ3JhcGh5QWN0aXZpdHlTaGFwZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkJQTU5TaGFwZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcImRpOkxhYmVsZWRTaGFwZVwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJCUE1ORWRnZVwiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJsYWJlbFwiLFxuXHRcdFx0XHR0eXBlOiBcIkJQTU5MYWJlbFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImJwbW5FbGVtZW50XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiYnBtbjpCYXNlRWxlbWVudFwiLFxuXHRcdFx0XHRyZWRlZmluZXM6IFwiZGk6RGlhZ3JhbUVsZW1lbnQjbW9kZWxFbGVtZW50XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic291cmNlRWxlbWVudFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcImRpOkRpYWdyYW1FbGVtZW50XCIsXG5cdFx0XHRcdHJlZGVmaW5lczogXCJkaTpFZGdlI3NvdXJjZVwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRhcmdldEVsZW1lbnRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJkaTpEaWFncmFtRWxlbWVudFwiLFxuXHRcdFx0XHRyZWRlZmluZXM6IFwiZGk6RWRnZSN0YXJnZXRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlVmlzaWJsZUtpbmRcIixcblx0XHRcdFx0dHlwZTogXCJNZXNzYWdlVmlzaWJsZUtpbmRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCJpbml0aWF0aW5nXCJcblx0XHRcdH1cblx0XHRdLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiZGk6TGFiZWxlZEVkZ2VcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQlBNTkxhYmVsXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxhYmVsU3R5bGVcIixcblx0XHRcdFx0dHlwZTogXCJCUE1OTGFiZWxTdHlsZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlLFxuXHRcdFx0XHRyZWRlZmluZXM6IFwiZGk6RGlhZ3JhbUVsZW1lbnQjc3R5bGVcIlxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJkaTpMYWJlbFwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJCUE1OTGFiZWxTdHlsZVwiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJmb250XCIsXG5cdFx0XHRcdHR5cGU6IFwiZGM6Rm9udFwiXG5cdFx0XHR9XG5cdFx0XSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcImRpOlN0eWxlXCJcblx0XHRdXG5cdH1cbl07XG52YXIgZW51bWVyYXRpb25zJDEgPSBbXG5cdHtcblx0XHRuYW1lOiBcIlBhcnRpY2lwYW50QmFuZEtpbmRcIixcblx0XHRsaXRlcmFsVmFsdWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidG9wX2luaXRpYXRpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtaWRkbGVfaW5pdGlhdGluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImJvdHRvbV9pbml0aWF0aW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidG9wX25vbl9pbml0aWF0aW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibWlkZGxlX25vbl9pbml0aWF0aW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYm90dG9tX25vbl9pbml0aWF0aW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIk1lc3NhZ2VWaXNpYmxlS2luZFwiLFxuXHRcdGxpdGVyYWxWYWx1ZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbml0aWF0aW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibm9uX2luaXRpYXRpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fVxuXTtcbnZhciBhc3NvY2lhdGlvbnMkMSA9IFtcbl07XG52YXIgQnBtbkRpUGFja2FnZSA9IHtcblx0bmFtZTogbmFtZSQxLFxuXHR1cmk6IHVyaSQxLFxuXHRwcmVmaXg6IHByZWZpeCQxLFxuXHR0eXBlczogdHlwZXMkMSxcblx0ZW51bWVyYXRpb25zOiBlbnVtZXJhdGlvbnMkMSxcblx0YXNzb2NpYXRpb25zOiBhc3NvY2lhdGlvbnMkMVxufTtcblxudmFyIG5hbWUkMiA9IFwiRENcIjtcbnZhciB1cmkkMiA9IFwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvREQvMjAxMDA1MjQvRENcIjtcbnZhciBwcmVmaXgkMiA9IFwiZGNcIjtcbnZhciB0eXBlcyQyID0gW1xuXHR7XG5cdFx0bmFtZTogXCJCb29sZWFuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSW50ZWdlclwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlJlYWxcIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJTdHJpbmdcIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJGb250XCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInNpemVcIixcblx0XHRcdFx0dHlwZTogXCJSZWFsXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpc0JvbGRcIixcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpc0l0YWxpY1wiLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzVW5kZXJsaW5lXCIsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNTdHJpa2VUaHJvdWdoXCIsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlBvaW50XCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInhcIixcblx0XHRcdFx0dHlwZTogXCJSZWFsXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIjBcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInlcIixcblx0XHRcdFx0dHlwZTogXCJSZWFsXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIjBcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJCb3VuZHNcIixcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwieFwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlYWxcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiMFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwieVwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlYWxcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiMFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwid2lkdGhcIixcblx0XHRcdFx0dHlwZTogXCJSZWFsXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJoZWlnaHRcIixcblx0XHRcdFx0dHlwZTogXCJSZWFsXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fVxuXTtcbnZhciBhc3NvY2lhdGlvbnMkMiA9IFtcbl07XG52YXIgRGNQYWNrYWdlID0ge1xuXHRuYW1lOiBuYW1lJDIsXG5cdHVyaTogdXJpJDIsXG5cdHByZWZpeDogcHJlZml4JDIsXG5cdHR5cGVzOiB0eXBlcyQyLFxuXHRhc3NvY2lhdGlvbnM6IGFzc29jaWF0aW9ucyQyXG59O1xuXG52YXIgbmFtZSQzID0gXCJESVwiO1xudmFyIHVyaSQzID0gXCJodHRwOi8vd3d3Lm9tZy5vcmcvc3BlYy9ERC8yMDEwMDUyNC9ESVwiO1xudmFyIHByZWZpeCQzID0gXCJkaVwiO1xudmFyIHR5cGVzJDMgPSBbXG5cdHtcblx0XHRuYW1lOiBcIkRpYWdyYW1FbGVtZW50XCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaWRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc0lkOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV4dGVuc2lvblwiLFxuXHRcdFx0XHR0eXBlOiBcIkV4dGVuc2lvblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm93bmluZ0RpYWdyYW1cIixcblx0XHRcdFx0dHlwZTogXCJEaWFncmFtXCIsXG5cdFx0XHRcdGlzUmVhZE9ubHk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3duaW5nRWxlbWVudFwiLFxuXHRcdFx0XHR0eXBlOiBcIkRpYWdyYW1FbGVtZW50XCIsXG5cdFx0XHRcdGlzUmVhZE9ubHk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibW9kZWxFbGVtZW50XCIsXG5cdFx0XHRcdGlzUmVhZE9ubHk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiRWxlbWVudFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInN0eWxlXCIsXG5cdFx0XHRcdHR5cGU6IFwiU3R5bGVcIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvd25lZEVsZW1lbnRcIixcblx0XHRcdFx0dHlwZTogXCJEaWFncmFtRWxlbWVudFwiLFxuXHRcdFx0XHRpc1JlYWRPbmx5OiB0cnVlLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTm9kZVwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJEaWFncmFtRWxlbWVudFwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJFZGdlXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkRpYWdyYW1FbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzb3VyY2VcIixcblx0XHRcdFx0dHlwZTogXCJEaWFncmFtRWxlbWVudFwiLFxuXHRcdFx0XHRpc1JlYWRPbmx5OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRhcmdldFwiLFxuXHRcdFx0XHR0eXBlOiBcIkRpYWdyYW1FbGVtZW50XCIsXG5cdFx0XHRcdGlzUmVhZE9ubHk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwid2F5cG9pbnRcIixcblx0XHRcdFx0aXNVbmlxdWU6IGZhbHNlLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiZGM6UG9pbnRcIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInhzaTp0eXBlXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRGlhZ3JhbVwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlkXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNJZDogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJyb290RWxlbWVudFwiLFxuXHRcdFx0XHR0eXBlOiBcIkRpYWdyYW1FbGVtZW50XCIsXG5cdFx0XHRcdGlzUmVhZE9ubHk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkb2N1bWVudGF0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJyZXNvbHV0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJSZWFsXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3duZWRTdHlsZVwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0eWxlXCIsXG5cdFx0XHRcdGlzUmVhZE9ubHk6IHRydWUsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJTaGFwZVwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJOb2RlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJib3VuZHNcIixcblx0XHRcdFx0dHlwZTogXCJkYzpCb3VuZHNcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUGxhbmVcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiTm9kZVwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicGxhbmVFbGVtZW50XCIsXG5cdFx0XHRcdHR5cGU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcblx0XHRcdFx0c3Vic2V0dGVkUHJvcGVydHk6IFwiRGlhZ3JhbUVsZW1lbnQtb3duZWRFbGVtZW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTGFiZWxlZEVkZ2VcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRWRnZVwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3duZWRMYWJlbFwiLFxuXHRcdFx0XHR0eXBlOiBcIkxhYmVsXCIsXG5cdFx0XHRcdGlzUmVhZE9ubHk6IHRydWUsXG5cdFx0XHRcdHN1YnNldHRlZFByb3BlcnR5OiBcIkRpYWdyYW1FbGVtZW50LW93bmVkRWxlbWVudFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTGFiZWxlZFNoYXBlXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlNoYXBlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvd25lZExhYmVsXCIsXG5cdFx0XHRcdHR5cGU6IFwiTGFiZWxcIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0c3Vic2V0dGVkUHJvcGVydHk6IFwiRGlhZ3JhbUVsZW1lbnQtb3duZWRFbGVtZW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJMYWJlbFwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJOb2RlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJib3VuZHNcIixcblx0XHRcdFx0dHlwZTogXCJkYzpCb3VuZHNcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiU3R5bGVcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpZFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzSWQ6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkV4dGVuc2lvblwiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ2YWx1ZXNcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkVsZW1lbnRcIlxuXHRcdFx0fVxuXHRcdF1cblx0fVxuXTtcbnZhciBhc3NvY2lhdGlvbnMkMyA9IFtcbl07XG52YXIgeG1sJDEgPSB7XG5cdHRhZ0FsaWFzOiBcImxvd2VyQ2FzZVwiXG59O1xudmFyIERpUGFja2FnZSA9IHtcblx0bmFtZTogbmFtZSQzLFxuXHR1cmk6IHVyaSQzLFxuXHRwcmVmaXg6IHByZWZpeCQzLFxuXHR0eXBlczogdHlwZXMkMyxcblx0YXNzb2NpYXRpb25zOiBhc3NvY2lhdGlvbnMkMyxcblx0eG1sOiB4bWwkMVxufTtcblxudmFyIG5hbWUkNCA9IFwiYnBtbi5pbyBjb2xvcnMgZm9yIEJQTU5cIjtcbnZhciB1cmkkNCA9IFwiaHR0cDovL2JwbW4uaW8vc2NoZW1hL2JwbW4vYmlvY29sb3IvMS4wXCI7XG52YXIgcHJlZml4JDQgPSBcImJpb2NcIjtcbnZhciB0eXBlcyQ0ID0gW1xuXHR7XG5cdFx0bmFtZTogXCJDb2xvcmVkU2hhcGVcIixcblx0XHRcImV4dGVuZHNcIjogW1xuXHRcdFx0XCJicG1uZGk6QlBNTlNoYXBlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzdHJva2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImZpbGxcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb2xvcmVkRWRnZVwiLFxuXHRcdFwiZXh0ZW5kc1wiOiBbXG5cdFx0XHRcImJwbW5kaTpCUE1ORWRnZVwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic3Ryb2tlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJmaWxsXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fVxuXTtcbnZhciBlbnVtZXJhdGlvbnMkMiA9IFtcbl07XG52YXIgYXNzb2NpYXRpb25zJDQgPSBbXG5dO1xudmFyIEJpb2NQYWNrYWdlID0ge1xuXHRuYW1lOiBuYW1lJDQsXG5cdHVyaTogdXJpJDQsXG5cdHByZWZpeDogcHJlZml4JDQsXG5cdHR5cGVzOiB0eXBlcyQ0LFxuXHRlbnVtZXJhdGlvbnM6IGVudW1lcmF0aW9ucyQyLFxuXHRhc3NvY2lhdGlvbnM6IGFzc29jaWF0aW9ucyQ0XG59O1xuXG52YXIgcGFja2FnZXMgPSB7XG4gIGJwbW46IEJwbW5QYWNrYWdlLFxuICBicG1uZGk6IEJwbW5EaVBhY2thZ2UsXG4gIGRjOiBEY1BhY2thZ2UsXG4gIGRpOiBEaVBhY2thZ2UsXG4gIGJpb2M6IEJpb2NQYWNrYWdlXG59O1xuXG5mdW5jdGlvbiBzaW1wbGUoYWRkaXRpb25hbFBhY2thZ2VzLCBvcHRpb25zKSB7XG4gIHZhciBwa3MgPSBhc3NpZ24oe30sIHBhY2thZ2VzLCBhZGRpdGlvbmFsUGFja2FnZXMpO1xuXG4gIHJldHVybiBuZXcgQnBtbk1vZGRsZShwa3MsIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzaW1wbGU7XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL2Nzc2VzY2FwZSB2MS41LjEgYnkgQG1hdGhpYXMgfCBNSVQgbGljZW5zZSAqL1xuOyhmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS91bWRqcy91bWQvYmxvYi9tYXN0ZXIvcmV0dXJuRXhwb3J0cy5qc1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcpIHtcblx0XHQvLyBGb3IgTm9kZS5qcy5cblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3Rvcnkocm9vdCk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBGb3IgQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxuXHRcdGRlZmluZShbXSwgZmFjdG9yeS5iaW5kKHJvb3QsIHJvb3QpKTtcblx0fSBlbHNlIHtcblx0XHQvLyBGb3IgYnJvd3NlciBnbG9iYWxzIChub3QgZXhwb3NpbmcgdGhlIGZ1bmN0aW9uIHNlcGFyYXRlbHkpLlxuXHRcdGZhY3Rvcnkocm9vdCk7XG5cdH1cbn0odHlwZW9mIGdsb2JhbCAhPSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHRoaXMsIGZ1bmN0aW9uKHJvb3QpIHtcblxuXHRpZiAocm9vdC5DU1MgJiYgcm9vdC5DU1MuZXNjYXBlKSB7XG5cdFx0cmV0dXJuIHJvb3QuQ1NTLmVzY2FwZTtcblx0fVxuXG5cdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jc2VyaWFsaXplLWFuLWlkZW50aWZpZXJcblx0dmFyIGNzc0VzY2FwZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignYENTUy5lc2NhcGVgIHJlcXVpcmVzIGFuIGFyZ3VtZW50LicpO1xuXHRcdH1cblx0XHR2YXIgc3RyaW5nID0gU3RyaW5nKHZhbHVlKTtcblx0XHR2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcblx0XHR2YXIgaW5kZXggPSAtMTtcblx0XHR2YXIgY29kZVVuaXQ7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdHZhciBmaXJzdENvZGVVbml0ID0gc3RyaW5nLmNoYXJDb2RlQXQoMCk7XG5cdFx0d2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcblx0XHRcdGNvZGVVbml0ID0gc3RyaW5nLmNoYXJDb2RlQXQoaW5kZXgpO1xuXHRcdFx0Ly8gTm90ZTogdGhlcmXigJlzIG5vIG5lZWQgdG8gc3BlY2lhbC1jYXNlIGFzdHJhbCBzeW1ib2xzLCBzdXJyb2dhdGVcblx0XHRcdC8vIHBhaXJzLCBvciBsb25lIHN1cnJvZ2F0ZXMuXG5cblx0XHRcdC8vIElmIHRoZSBjaGFyYWN0ZXIgaXMgTlVMTCAoVSswMDAwKSwgdGhlbiB0aGUgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSXG5cdFx0XHQvLyAoVStGRkZEKS5cblx0XHRcdGlmIChjb2RlVW5pdCA9PSAweDAwMDApIHtcblx0XHRcdFx0cmVzdWx0ICs9ICdcXHVGRkZEJztcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChcblx0XHRcdFx0Ly8gSWYgdGhlIGNoYXJhY3RlciBpcyBpbiB0aGUgcmFuZ2UgW1xcMS1cXDFGXSAoVSswMDAxIHRvIFUrMDAxRikgb3IgaXNcblx0XHRcdFx0Ly8gVSswMDdGLCBb4oCmXVxuXHRcdFx0XHQoY29kZVVuaXQgPj0gMHgwMDAxICYmIGNvZGVVbml0IDw9IDB4MDAxRikgfHwgY29kZVVuaXQgPT0gMHgwMDdGIHx8XG5cdFx0XHRcdC8vIElmIHRoZSBjaGFyYWN0ZXIgaXMgdGhlIGZpcnN0IGNoYXJhY3RlciBhbmQgaXMgaW4gdGhlIHJhbmdlIFswLTldXG5cdFx0XHRcdC8vIChVKzAwMzAgdG8gVSswMDM5KSwgW+KApl1cblx0XHRcdFx0KGluZGV4ID09IDAgJiYgY29kZVVuaXQgPj0gMHgwMDMwICYmIGNvZGVVbml0IDw9IDB4MDAzOSkgfHxcblx0XHRcdFx0Ly8gSWYgdGhlIGNoYXJhY3RlciBpcyB0aGUgc2Vjb25kIGNoYXJhY3RlciBhbmQgaXMgaW4gdGhlIHJhbmdlIFswLTldXG5cdFx0XHRcdC8vIChVKzAwMzAgdG8gVSswMDM5KSBhbmQgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyBhIGAtYCAoVSswMDJEKSwgW+KApl1cblx0XHRcdFx0KFxuXHRcdFx0XHRcdGluZGV4ID09IDEgJiZcblx0XHRcdFx0XHRjb2RlVW5pdCA+PSAweDAwMzAgJiYgY29kZVVuaXQgPD0gMHgwMDM5ICYmXG5cdFx0XHRcdFx0Zmlyc3RDb2RlVW5pdCA9PSAweDAwMkRcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jZXNjYXBlLWEtY2hhcmFjdGVyLWFzLWNvZGUtcG9pbnRcblx0XHRcdFx0cmVzdWx0ICs9ICdcXFxcJyArIGNvZGVVbml0LnRvU3RyaW5nKDE2KSArICcgJztcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChcblx0XHRcdFx0Ly8gSWYgdGhlIGNoYXJhY3RlciBpcyB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZCBpcyBhIGAtYCAoVSswMDJEKSwgYW5kXG5cdFx0XHRcdC8vIHRoZXJlIGlzIG5vIHNlY29uZCBjaGFyYWN0ZXIsIFvigKZdXG5cdFx0XHRcdGluZGV4ID09IDAgJiZcblx0XHRcdFx0bGVuZ3RoID09IDEgJiZcblx0XHRcdFx0Y29kZVVuaXQgPT0gMHgwMDJEXG5cdFx0XHQpIHtcblx0XHRcdFx0cmVzdWx0ICs9ICdcXFxcJyArIHN0cmluZy5jaGFyQXQoaW5kZXgpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhlIGNoYXJhY3RlciBpcyBub3QgaGFuZGxlZCBieSBvbmUgb2YgdGhlIGFib3ZlIHJ1bGVzIGFuZCBpc1xuXHRcdFx0Ly8gZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFUrMDA4MCwgaXMgYC1gIChVKzAwMkQpIG9yIGBfYCAoVSswMDVGKSwgb3Jcblx0XHRcdC8vIGlzIGluIG9uZSBvZiB0aGUgcmFuZ2VzIFswLTldIChVKzAwMzAgdG8gVSswMDM5KSwgW0EtWl0gKFUrMDA0MSB0b1xuXHRcdFx0Ly8gVSswMDVBKSwgb3IgW2Etel0gKFUrMDA2MSB0byBVKzAwN0EpLCBb4oCmXVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRjb2RlVW5pdCA+PSAweDAwODAgfHxcblx0XHRcdFx0Y29kZVVuaXQgPT0gMHgwMDJEIHx8XG5cdFx0XHRcdGNvZGVVbml0ID09IDB4MDA1RiB8fFxuXHRcdFx0XHRjb2RlVW5pdCA+PSAweDAwMzAgJiYgY29kZVVuaXQgPD0gMHgwMDM5IHx8XG5cdFx0XHRcdGNvZGVVbml0ID49IDB4MDA0MSAmJiBjb2RlVW5pdCA8PSAweDAwNUEgfHxcblx0XHRcdFx0Y29kZVVuaXQgPj0gMHgwMDYxICYmIGNvZGVVbml0IDw9IDB4MDA3QVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIHRoZSBjaGFyYWN0ZXIgaXRzZWxmXG5cdFx0XHRcdHJlc3VsdCArPSBzdHJpbmcuY2hhckF0KGluZGV4KTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE90aGVyd2lzZSwgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuXHRcdFx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNlc2NhcGUtYS1jaGFyYWN0ZXJcblx0XHRcdHJlc3VsdCArPSAnXFxcXCcgKyBzdHJpbmcuY2hhckF0KGluZGV4KTtcblxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xuXG5cdGlmICghcm9vdC5DU1MpIHtcblx0XHRyb290LkNTUyA9IHt9O1xuXHR9XG5cblx0cm9vdC5DU1MuZXNjYXBlID0gY3NzRXNjYXBlO1xuXHRyZXR1cm4gY3NzRXNjYXBlO1xuXG59KSk7XG4iLCJpbXBvcnQgSW50ZXJhY3Rpb25FdmVudHNNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvaW50ZXJhY3Rpb24tZXZlbnRzJztcblxuaW1wb3J0IERpcmVjdEVkaXRpbmcgZnJvbSAnLi9saWIvRGlyZWN0RWRpdGluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBJbnRlcmFjdGlvbkV2ZW50c01vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAnZGlyZWN0RWRpdGluZycgXSxcbiAgZGlyZWN0RWRpdGluZzogWyAndHlwZScsIERpcmVjdEVkaXRpbmcgXVxufTsiLCJpbXBvcnQge1xuICBiaW5kLFxuICBmaW5kXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IFRleHRCb3ggZnJvbSAnLi9UZXh0Qm94JztcblxuXG4vKipcbiAqIEEgZGlyZWN0IGVkaXRpbmcgY29tcG9uZW50IHRoYXQgYWxsb3dzIHVzZXJzXG4gKiB0byBlZGl0IGFuIGVsZW1lbnRzIHRleHQgZGlyZWN0bHkgaW4gdGhlIGRpYWdyYW1cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1cyB0aGUgZXZlbnQgYnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERpcmVjdEVkaXRpbmcoZXZlbnRCdXMsIGNhbnZhcykge1xuXG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG5cbiAgdGhpcy5fcHJvdmlkZXJzID0gW107XG4gIHRoaXMuX3RleHRib3ggPSBuZXcgVGV4dEJveCh7XG4gICAgY29udGFpbmVyOiBjYW52YXMuZ2V0Q29udGFpbmVyKCksXG4gICAga2V5SGFuZGxlcjogYmluZCh0aGlzLl9oYW5kbGVLZXksIHRoaXMpLFxuICAgIHJlc2l6ZUhhbmRsZXI6IGJpbmQodGhpcy5faGFuZGxlUmVzaXplLCB0aGlzKVxuICB9KTtcbn1cblxuRGlyZWN0RWRpdGluZy4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnLCAnY2FudmFzJyBdO1xuXG5cbi8qKlxuICogUmVnaXN0ZXIgYSBkaXJlY3QgZWRpdGluZyBwcm92aWRlclxuXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdmlkZXIgdGhlIHByb3ZpZGVyLCBtdXN0IGV4cG9zZSBhbiAjYWN0aXZhdGUoZWxlbWVudCkgbWV0aG9kIHRoYXQgcmV0dXJuc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGFjdGl2YXRpb24gY29udGV4dCAoeyBib3VuZHM6IHt4LCB5LCB3aWR0aCwgaGVpZ2h0IH0sIHRleHQgfSkgaWZcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3QgZWRpdGluZyBpcyBhdmFpbGFibGUgZm9yIHRoZSBnaXZlbiBlbGVtZW50LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSB0aGUgcHJvdmlkZXIgbXVzdCBleHBvc2UgYSAjdXBkYXRlKGVsZW1lbnQsIHZhbHVlKSBtZXRob2RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byByZWNlaXZlIGRpcmVjdCBlZGl0aW5nIHVwZGF0ZXMuXG4gKi9cbkRpcmVjdEVkaXRpbmcucHJvdG90eXBlLnJlZ2lzdGVyUHJvdmlkZXIgPSBmdW5jdGlvbihwcm92aWRlcikge1xuICB0aGlzLl9wcm92aWRlcnMucHVzaChwcm92aWRlcik7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGRpcmVjdCBlZGl0aW5nIGlzIGN1cnJlbnRseSBhY3RpdmVcbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5EaXJlY3RFZGl0aW5nLnByb3RvdHlwZS5pc0FjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gISF0aGlzLl9hY3RpdmU7XG59O1xuXG5cbi8qKlxuICogQ2FuY2VsIGRpcmVjdCBlZGl0aW5nLCBpZiBpdCBpcyBjdXJyZW50bHkgYWN0aXZlXG4gKi9cbkRpcmVjdEVkaXRpbmcucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX2FjdGl2ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX2ZpcmUoJ2NhbmNlbCcpO1xuICB0aGlzLmNsb3NlKCk7XG59O1xuXG5cbkRpcmVjdEVkaXRpbmcucHJvdG90eXBlLl9maXJlID0gZnVuY3Rpb24oZXZlbnQsIGNvbnRleHQpIHtcbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnZGlyZWN0RWRpdGluZy4nICsgZXZlbnQsIGNvbnRleHQgfHwgeyBhY3RpdmU6IHRoaXMuX2FjdGl2ZSB9KTtcbn07XG5cbkRpcmVjdEVkaXRpbmcucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3RleHRib3guZGVzdHJveSgpO1xuXG4gIHRoaXMuX2ZpcmUoJ2RlYWN0aXZhdGUnKTtcblxuICB0aGlzLl9hY3RpdmUgPSBudWxsO1xuXG4gIHRoaXMucmVzaXphYmxlID0gdW5kZWZpbmVkO1xufTtcblxuXG5EaXJlY3RFZGl0aW5nLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciBhY3RpdmUgPSB0aGlzLl9hY3RpdmU7XG5cbiAgaWYgKCFhY3RpdmUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY29udGFpbmVyQm91bmRzLFxuICAgICAgcHJldmlvdXNCb3VuZHMgPSBhY3RpdmUuY29udGV4dC5ib3VuZHMsXG4gICAgICBuZXdCb3VuZHMgPSB0aGlzLiR0ZXh0Ym94LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgbmV3VGV4dCA9IHRoaXMuZ2V0VmFsdWUoKSxcbiAgICAgIHByZXZpb3VzVGV4dCA9IGFjdGl2ZS5jb250ZXh0LnRleHQ7XG5cbiAgaWYgKFxuICAgIG5ld1RleHQgIT09IHByZXZpb3VzVGV4dCB8fFxuICAgIG5ld0JvdW5kcy5oZWlnaHQgIT09IHByZXZpb3VzQm91bmRzLmhlaWdodCB8fFxuICAgIG5ld0JvdW5kcy53aWR0aCAhPT0gcHJldmlvdXNCb3VuZHMud2lkdGhcbiAgKSB7XG4gICAgY29udGFpbmVyQm91bmRzID0gdGhpcy5fdGV4dGJveC5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBhY3RpdmUucHJvdmlkZXIudXBkYXRlKGFjdGl2ZS5lbGVtZW50LCBuZXdUZXh0LCBhY3RpdmUuY29udGV4dC50ZXh0LCB7XG4gICAgICB4OiBuZXdCb3VuZHMubGVmdCAtIGNvbnRhaW5lckJvdW5kcy5sZWZ0LFxuICAgICAgeTogbmV3Qm91bmRzLnRvcCAtIGNvbnRhaW5lckJvdW5kcy50b3AsXG4gICAgICB3aWR0aDogbmV3Qm91bmRzLndpZHRoLFxuICAgICAgaGVpZ2h0OiBuZXdCb3VuZHMuaGVpZ2h0XG4gICAgfSk7XG4gIH1cblxuICB0aGlzLl9maXJlKCdjb21wbGV0ZScpO1xuXG4gIHRoaXMuY2xvc2UoKTtcbn07XG5cblxuRGlyZWN0RWRpdGluZy5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3RleHRib3guZ2V0VmFsdWUoKTtcbn07XG5cblxuRGlyZWN0RWRpdGluZy5wcm90b3R5cGUuX2hhbmRsZUtleSA9IGZ1bmN0aW9uKGUpIHtcblxuICAvLyBzdG9wIGJ1YmJsZVxuICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gIHZhciBrZXkgPSBlLmtleUNvZGUgfHwgZS5jaGFyQ29kZTtcblxuICAvLyBFU0NcbiAgaWYgKGtleSA9PT0gMjcpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgcmV0dXJuIHRoaXMuY2FuY2VsKCk7XG4gIH1cblxuICAvLyBFbnRlclxuICBpZiAoa2V5ID09PSAxMyAmJiAhZS5zaGlmdEtleSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICByZXR1cm4gdGhpcy5jb21wbGV0ZSgpO1xuICB9XG59O1xuXG5cbkRpcmVjdEVkaXRpbmcucHJvdG90eXBlLl9oYW5kbGVSZXNpemUgPSBmdW5jdGlvbihldmVudCkge1xuICB0aGlzLl9maXJlKCdyZXNpemUnLCBldmVudCk7XG59O1xuXG5cbi8qKlxuICogQWN0aXZhdGUgZGlyZWN0IGVkaXRpbmcgb24gdGhlIGdpdmVuIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gRWxlbWVudERlc2NyaXB0b3IgdGhlIGRlc2NyaXB0b3IgZm9yIGEgc2hhcGUgb3IgY29ubmVjdGlvblxuICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYWN0aXZhdGlvbiB3YXMgcG9zc2libGVcbiAqL1xuRGlyZWN0RWRpdGluZy5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIGlmICh0aGlzLmlzQWN0aXZlKCkpIHtcbiAgICB0aGlzLmNhbmNlbCgpO1xuICB9XG5cbiAgLy8gdGhlIGRpcmVjdCBlZGl0aW5nIGNvbnRleHRcbiAgdmFyIGNvbnRleHQ7XG5cbiAgdmFyIHByb3ZpZGVyID0gZmluZCh0aGlzLl9wcm92aWRlcnMsIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gKGNvbnRleHQgPSBwLmFjdGl2YXRlKGVsZW1lbnQpKSA/IHAgOiBudWxsO1xuICB9KTtcblxuICAvLyBjaGVjayBpZiBhY3RpdmF0aW9uIHRvb2sgcGxhY2VcbiAgaWYgKGNvbnRleHQpIHtcbiAgICB0aGlzLiR0ZXh0Ym94ID0gdGhpcy5fdGV4dGJveC5jcmVhdGUoXG4gICAgICBjb250ZXh0LmJvdW5kcyxcbiAgICAgIGNvbnRleHQuc3R5bGUsXG4gICAgICBjb250ZXh0LnRleHQsXG4gICAgICBjb250ZXh0Lm9wdGlvbnNcbiAgICApO1xuXG4gICAgdGhpcy5fYWN0aXZlID0ge1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICBwcm92aWRlcjogcHJvdmlkZXJcbiAgICB9O1xuXG4gICAgaWYgKGNvbnRleHQub3B0aW9ucyAmJiBjb250ZXh0Lm9wdGlvbnMucmVzaXphYmxlKSB7XG4gICAgICB0aGlzLnJlc2l6YWJsZSA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5fZmlyZSgnYWN0aXZhdGUnKTtcbiAgfVxuXG4gIHJldHVybiAhIWNvbnRleHQ7XG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBiaW5kLFxuICBwaWNrXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZG9taWZ5LFxuICBxdWVyeSBhcyBkb21RdWVyeSxcbiAgZXZlbnQgYXMgZG9tRXZlbnQsXG4gIHJlbW92ZSBhcyBkb21SZW1vdmVcbn0gZnJvbSAnbWluLWRvbSc7XG5cbnZhciBtaW4gPSBNYXRoLm1pbixcbiAgICBtYXggPSBNYXRoLm1heDtcblxuZnVuY3Rpb24gcHJldmVudERlZmF1bHQoZSkge1xuICBlLnByZXZlbnREZWZhdWx0KCk7XG59XG5cbmZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbihlKSB7XG4gIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREU7XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXkobm9kZUxpc3QpIHtcbiAgcmV0dXJuIFtdLnNsaWNlLmNhbGwobm9kZUxpc3QpO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIGEgY29udGFpbmVyIGZvciBhIGNvbnRlbnQgZWRpdGFibGUgZGl2LlxuICpcbiAqIFN0cnVjdHVyZTpcbiAqXG4gKiBjb250YWluZXJcbiAqICAgcGFyZW50XG4gKiAgICAgY29udGVudFxuICogICAgIHJlc2l6ZS1oYW5kbGVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtET01FbGVtZW50fSBvcHRpb25zLmNvbnRhaW5lciBUaGUgRE9NIGVsZW1lbnQgdG8gYXBwZW5kIHRoZSBjb250ZW50Q29udGFpbmVyIHRvXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcHRpb25zLmtleUhhbmRsZXIgSGFuZGxlciBmb3Iga2V5IGV2ZW50c1xuICogQHBhcmFtIHtGdW5jdGlvbn0gb3B0aW9ucy5yZXNpemVIYW5kbGVyIEhhbmRsZXIgZm9yIHJlc2l6ZSBldmVudHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVGV4dEJveChvcHRpb25zKSB7XG4gIHRoaXMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG5cbiAgdGhpcy5wYXJlbnQgPSBkb21pZnkoXG4gICAgJzxkaXYgY2xhc3M9XCJkanMtZGlyZWN0LWVkaXRpbmctcGFyZW50XCI+JyArXG4gICAgICAnPGRpdiBjbGFzcz1cImRqcy1kaXJlY3QtZWRpdGluZy1jb250ZW50XCIgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiPjwvZGl2PicgK1xuICAgICc8L2Rpdj4nXG4gICk7XG5cbiAgdGhpcy5jb250ZW50ID0gZG9tUXVlcnkoJ1tjb250ZW50ZWRpdGFibGVdJywgdGhpcy5wYXJlbnQpO1xuXG4gIHRoaXMua2V5SGFuZGxlciA9IG9wdGlvbnMua2V5SGFuZGxlciB8fCBmdW5jdGlvbigpIHt9O1xuICB0aGlzLnJlc2l6ZUhhbmRsZXIgPSBvcHRpb25zLnJlc2l6ZUhhbmRsZXIgfHwgZnVuY3Rpb24oKSB7fTtcblxuICB0aGlzLmF1dG9SZXNpemUgPSBiaW5kKHRoaXMuYXV0b1Jlc2l6ZSwgdGhpcyk7XG4gIHRoaXMuaGFuZGxlUGFzdGUgPSBiaW5kKHRoaXMuaGFuZGxlUGFzdGUsIHRoaXMpO1xufVxuXG5cbi8qKlxuICogQ3JlYXRlIGEgdGV4dCBib3ggd2l0aCB0aGUgZ2l2ZW4gcG9zaXRpb24sIHNpemUsIHN0eWxlIGFuZCB0ZXh0IGNvbnRlbnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYm91bmRzXG4gKiBAcGFyYW0ge051bWJlcn0gYm91bmRzLnggYWJzb2x1dGUgeCBwb3NpdGlvblxuICogQHBhcmFtIHtOdW1iZXJ9IGJvdW5kcy55IGFic29sdXRlIHkgcG9zaXRpb25cbiAqIEBwYXJhbSB7TnVtYmVyfSBbYm91bmRzLndpZHRoXSBmaXhlZCB3aWR0aCB2YWx1ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtib3VuZHMuaGVpZ2h0XSBmaXhlZCBoZWlnaHQgdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbYm91bmRzLm1heFdpZHRoXSBtYXhpbXVtIHdpZHRoIHZhbHVlXG4gKiBAcGFyYW0ge051bWJlcn0gW2JvdW5kcy5tYXhIZWlnaHRdIG1heGltdW0gaGVpZ2h0IHZhbHVlXG4gKiBAcGFyYW0ge051bWJlcn0gW2JvdW5kcy5taW5XaWR0aF0gbWluaW11bSB3aWR0aCB2YWx1ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtib3VuZHMubWluSGVpZ2h0XSBtaW5pbXVtIGhlaWdodCB2YWx1ZVxuICogQHBhcmFtIHtPYmplY3R9IFtzdHlsZV1cbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZSB0ZXh0IGNvbnRlbnRcbiAqXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fSBUaGUgY3JlYXRlZCBjb250ZW50IERPTSBlbGVtZW50XG4gKi9cblRleHRCb3gucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uKGJvdW5kcywgc3R5bGUsIHZhbHVlLCBvcHRpb25zKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQsXG4gICAgICBjb250ZW50ID0gdGhpcy5jb250ZW50LFxuICAgICAgY29udGFpbmVyID0gdGhpcy5jb250YWluZXI7XG5cbiAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgc3R5bGUgPSB0aGlzLnN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgdmFyIHBhcmVudFN0eWxlID0gcGljayhzdHlsZSwgW1xuICAgICd3aWR0aCcsXG4gICAgJ2hlaWdodCcsXG4gICAgJ21heFdpZHRoJyxcbiAgICAnbWF4SGVpZ2h0JyxcbiAgICAnbWluV2lkdGgnLFxuICAgICdtaW5IZWlnaHQnLFxuICAgICdsZWZ0JyxcbiAgICAndG9wJyxcbiAgICAnYmFja2dyb3VuZENvbG9yJyxcbiAgICAncG9zaXRpb24nLFxuICAgICdvdmVyZmxvdycsXG4gICAgJ2JvcmRlcicsXG4gICAgJ3dvcmRXcmFwJyxcbiAgICAndGV4dEFsaWduJyxcbiAgICAnb3V0bGluZScsXG4gICAgJ3RyYW5zZm9ybSdcbiAgXSk7XG5cbiAgYXNzaWduKHBhcmVudC5zdHlsZSwge1xuICAgIHdpZHRoOiBib3VuZHMud2lkdGggKyAncHgnLFxuICAgIGhlaWdodDogYm91bmRzLmhlaWdodCArICdweCcsXG4gICAgbWF4V2lkdGg6IGJvdW5kcy5tYXhXaWR0aCArICdweCcsXG4gICAgbWF4SGVpZ2h0OiBib3VuZHMubWF4SGVpZ2h0ICsgJ3B4JyxcbiAgICBtaW5XaWR0aDogYm91bmRzLm1pbldpZHRoICsgJ3B4JyxcbiAgICBtaW5IZWlnaHQ6IGJvdW5kcy5taW5IZWlnaHQgKyAncHgnLFxuICAgIGxlZnQ6IGJvdW5kcy54ICsgJ3B4JyxcbiAgICB0b3A6IGJvdW5kcy55ICsgJ3B4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmZmZmJyxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICBvdmVyZmxvdzogJ3Zpc2libGUnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjY2NjJyxcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICB3b3JkV3JhcDogJ25vcm1hbCcsXG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICBvdXRsaW5lOiAnbm9uZSdcbiAgfSwgcGFyZW50U3R5bGUpO1xuXG4gIHZhciBjb250ZW50U3R5bGUgPSBwaWNrKHN0eWxlLCBbXG4gICAgJ2ZvbnRGYW1pbHknLFxuICAgICdmb250U2l6ZScsXG4gICAgJ2ZvbnRXZWlnaHQnLFxuICAgICdsaW5lSGVpZ2h0JyxcbiAgICAncGFkZGluZycsXG4gICAgJ3BhZGRpbmdUb3AnLFxuICAgICdwYWRkaW5nUmlnaHQnLFxuICAgICdwYWRkaW5nQm90dG9tJyxcbiAgICAncGFkZGluZ0xlZnQnXG4gIF0pO1xuXG4gIGFzc2lnbihjb250ZW50LnN0eWxlLCB7XG4gICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgd29yZFdyYXA6ICdicmVhay13b3JkJ1xuICB9LCBjb250ZW50U3R5bGUpO1xuXG4gIGlmIChvcHRpb25zLmNlbnRlclZlcnRpY2FsbHkpIHtcbiAgICBhc3NpZ24oY29udGVudC5zdHlsZSwge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB0b3A6ICc1MCUnLFxuICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDAsIC01MCUpJ1xuICAgIH0sIGNvbnRlbnRTdHlsZSk7XG4gIH1cblxuICBjb250ZW50LmlubmVyVGV4dCA9IHZhbHVlO1xuXG4gIGRvbUV2ZW50LmJpbmQoY29udGVudCwgJ2tleWRvd24nLCB0aGlzLmtleUhhbmRsZXIpO1xuICBkb21FdmVudC5iaW5kKGNvbnRlbnQsICdtb3VzZWRvd24nLCBzdG9wUHJvcGFnYXRpb24pO1xuICBkb21FdmVudC5iaW5kKGNvbnRlbnQsICdwYXN0ZScsIHNlbGYuaGFuZGxlUGFzdGUpO1xuXG4gIGlmIChvcHRpb25zLmF1dG9SZXNpemUpIHtcbiAgICBkb21FdmVudC5iaW5kKGNvbnRlbnQsICdpbnB1dCcsIHRoaXMuYXV0b1Jlc2l6ZSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5yZXNpemFibGUpIHtcbiAgICB0aGlzLnJlc2l6YWJsZShzdHlsZSk7XG4gIH1cblxuICBjb250YWluZXIuYXBwZW5kQ2hpbGQocGFyZW50KTtcblxuICAvLyBzZXQgc2VsZWN0aW9uIHRvIGVuZCBvZiB0ZXh0XG4gIHRoaXMuc2V0U2VsZWN0aW9uKGNvbnRlbnQubGFzdENoaWxkLCBjb250ZW50Lmxhc3RDaGlsZCAmJiBjb250ZW50Lmxhc3RDaGlsZC5sZW5ndGgpO1xuXG4gIHJldHVybiBwYXJlbnQ7XG59O1xuXG4vKipcbiAqIEludGVyY2VwdCBwYXN0ZSBldmVudHMgdG8gcmVtb3ZlIGZvcm1hdHRpbmcgZnJvbSBwYXN0ZWQgdGV4dC5cbiAqL1xuVGV4dEJveC5wcm90b3R5cGUuaGFuZGxlUGFzdGUgPSBmdW5jdGlvbihlKSB7XG4gIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgc3R5bGUgPSB0aGlzLnN0eWxlO1xuXG4gIGUucHJldmVudERlZmF1bHQoKTtcblxuICB2YXIgdGV4dDtcblxuICBpZiAoZS5jbGlwYm9hcmREYXRhKSB7XG5cbiAgICAvLyBDaHJvbWUsIEZpcmVmb3gsIFNhZmFyaVxuICAgIHRleHQgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9wbGFpbicpO1xuICB9IGVsc2Uge1xuXG4gICAgLy8gSW50ZXJuZXQgRXhwbG9yZXJcbiAgICB0ZXh0ID0gd2luZG93LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgnVGV4dCcpO1xuICB9XG5cbiAgdGhpcy5pbnNlcnRUZXh0KHRleHQpO1xuXG4gIGlmIChvcHRpb25zLmF1dG9SZXNpemUpIHtcbiAgICB2YXIgaGFzUmVzaXplZCA9IHRoaXMuYXV0b1Jlc2l6ZShzdHlsZSk7XG5cbiAgICBpZiAoaGFzUmVzaXplZCkge1xuICAgICAgdGhpcy5yZXNpemVIYW5kbGVyKGhhc1Jlc2l6ZWQpO1xuICAgIH1cbiAgfVxufTtcblxuVGV4dEJveC5wcm90b3R5cGUuaW5zZXJ0VGV4dCA9IGZ1bmN0aW9uKHRleHQpIHtcblxuICAvLyBpbnNlcnRUZXh0IGNvbW1hbmQgbm90IHN1cHBvcnRlZCBieSBJbnRlcm5ldCBFeHBsb3JlclxuICB2YXIgc3VjY2VzcyA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsIHRleHQpO1xuXG4gIGlmIChzdWNjZXNzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5faW5zZXJ0VGV4dElFKHRleHQpO1xufTtcblxuVGV4dEJveC5wcm90b3R5cGUuX2luc2VydFRleHRJRSA9IGZ1bmN0aW9uKHRleHQpIHtcblxuICAvLyBJbnRlcm5ldCBFeHBsb3JlclxuICB2YXIgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvbigpLFxuICAgICAgc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgIGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgIHN0YXJ0T2Zmc2V0ID0gcmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICBlbmRPZmZzZXQgPSByYW5nZS5lbmRPZmZzZXQsXG4gICAgICBjb21tb25BbmNlc3RvckNvbnRhaW5lciA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xuXG4gIHZhciBjaGlsZE5vZGVzQXJyYXkgPSB0b0FycmF5KGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLmNoaWxkTm9kZXMpO1xuXG4gIHZhciBjb250YWluZXIsXG4gICAgICBvZmZzZXQ7XG5cbiAgaWYgKGlzVGV4dE5vZGUoY29tbW9uQW5jZXN0b3JDb250YWluZXIpKSB7XG4gICAgdmFyIGNvbnRhaW5lclRleHRDb250ZW50ID0gc3RhcnRDb250YWluZXIudGV4dENvbnRlbnQ7XG5cbiAgICBzdGFydENvbnRhaW5lci50ZXh0Q29udGVudCA9XG4gICAgICBjb250YWluZXJUZXh0Q29udGVudC5zdWJzdHJpbmcoMCwgc3RhcnRPZmZzZXQpXG4gICAgICArIHRleHRcbiAgICAgICsgY29udGFpbmVyVGV4dENvbnRlbnQuc3Vic3RyaW5nKGVuZE9mZnNldCk7XG5cbiAgICBjb250YWluZXIgPSBzdGFydENvbnRhaW5lcjtcbiAgICBvZmZzZXQgPSBzdGFydE9mZnNldCArIHRleHQubGVuZ3RoO1xuXG4gIH0gZWxzZSBpZiAoc3RhcnRDb250YWluZXIgPT09IHRoaXMuY29udGVudCAmJiBlbmRDb250YWluZXIgPT09IHRoaXMuY29udGVudCkge1xuICAgIHZhciB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpO1xuXG4gICAgdGhpcy5jb250ZW50Lmluc2VydEJlZm9yZSh0ZXh0Tm9kZSwgY2hpbGROb2Rlc0FycmF5W3N0YXJ0T2Zmc2V0XSk7XG5cbiAgICBjb250YWluZXIgPSB0ZXh0Tm9kZTtcbiAgICBvZmZzZXQgPSB0ZXh0Tm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHN0YXJ0Q29udGFpbmVyQ2hpbGRJbmRleCA9IGNoaWxkTm9kZXNBcnJheS5pbmRleE9mKHN0YXJ0Q29udGFpbmVyKSxcbiAgICAgICAgZW5kQ29udGFpbmVyQ2hpbGRJbmRleCA9IGNoaWxkTm9kZXNBcnJheS5pbmRleE9mKGVuZENvbnRhaW5lcik7XG5cbiAgICBjaGlsZE5vZGVzQXJyYXkuZm9yRWFjaChmdW5jdGlvbihjaGlsZE5vZGUsIGluZGV4KSB7XG5cbiAgICAgIGlmIChpbmRleCA9PT0gc3RhcnRDb250YWluZXJDaGlsZEluZGV4KSB7XG4gICAgICAgIGNoaWxkTm9kZS50ZXh0Q29udGVudCA9XG4gICAgICAgICAgc3RhcnRDb250YWluZXIudGV4dENvbnRlbnQuc3Vic3RyaW5nKDAsIHN0YXJ0T2Zmc2V0KSArXG4gICAgICAgICAgdGV4dCArXG4gICAgICAgICAgZW5kQ29udGFpbmVyLnRleHRDb250ZW50LnN1YnN0cmluZyhlbmRPZmZzZXQpO1xuICAgICAgfSBlbHNlIGlmIChpbmRleCA+IHN0YXJ0Q29udGFpbmVyQ2hpbGRJbmRleCAmJiBpbmRleCA8PSBlbmRDb250YWluZXJDaGlsZEluZGV4KSB7XG4gICAgICAgIGRvbVJlbW92ZShjaGlsZE5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29udGFpbmVyID0gc3RhcnRDb250YWluZXI7XG4gICAgb2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyB0ZXh0Lmxlbmd0aDtcbiAgfVxuXG4gIGlmIChjb250YWluZXIgJiYgb2Zmc2V0ICE9PSB1bmRlZmluZWQpIHtcblxuICAgIC8vIGlzIG5lY2Vzc2FyeSBpbiBJbnRlcm5ldCBFeHBsb3JlclxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLnNldFNlbGVjdGlvbihjb250YWluZXIsIG9mZnNldCk7XG4gICAgfSk7XG4gIH1cbn07XG5cbi8qKlxuICogQXV0b21hdGljYWxseSByZXNpemUgZWxlbWVudCB2ZXJ0aWNhbGx5IHRvIGZpdCBpdHMgY29udGVudC5cbiAqL1xuVGV4dEJveC5wcm90b3R5cGUuYXV0b1Jlc2l6ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQsXG4gICAgICBjb250ZW50ID0gdGhpcy5jb250ZW50O1xuXG4gIHZhciBmb250U2l6ZSA9IHBhcnNlSW50KHRoaXMuc3R5bGUuZm9udFNpemUpIHx8IDEyO1xuXG4gIGlmIChjb250ZW50LnNjcm9sbEhlaWdodCA+IHBhcmVudC5vZmZzZXRIZWlnaHQgfHxcbiAgICAgIGNvbnRlbnQuc2Nyb2xsSGVpZ2h0IDwgcGFyZW50Lm9mZnNldEhlaWdodCAtIGZvbnRTaXplKSB7XG4gICAgdmFyIGJvdW5kcyA9IHBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHZhciBoZWlnaHQgPSBjb250ZW50LnNjcm9sbEhlaWdodDtcbiAgICBwYXJlbnQuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcblxuICAgIHRoaXMucmVzaXplSGFuZGxlcih7XG4gICAgICB3aWR0aDogYm91bmRzLndpZHRoLFxuICAgICAgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0LFxuICAgICAgZHg6IDAsXG4gICAgICBkeTogaGVpZ2h0IC0gYm91bmRzLmhlaWdodFxuICAgIH0pO1xuICB9XG59O1xuXG4vKipcbiAqIE1ha2UgYW4gZWxlbWVudCByZXNpemFibGUgYnkgYWRkaW5nIGEgcmVzaXplIGhhbmRsZS5cbiAqL1xuVGV4dEJveC5wcm90b3R5cGUucmVzaXphYmxlID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQsXG4gICAgICByZXNpemVIYW5kbGUgPSB0aGlzLnJlc2l6ZUhhbmRsZTtcblxuICB2YXIgbWluV2lkdGggPSBwYXJzZUludCh0aGlzLnN0eWxlLm1pbldpZHRoKSB8fCAwLFxuICAgICAgbWluSGVpZ2h0ID0gcGFyc2VJbnQodGhpcy5zdHlsZS5taW5IZWlnaHQpIHx8IDAsXG4gICAgICBtYXhXaWR0aCA9IHBhcnNlSW50KHRoaXMuc3R5bGUubWF4V2lkdGgpIHx8IEluZmluaXR5LFxuICAgICAgbWF4SGVpZ2h0ID0gcGFyc2VJbnQodGhpcy5zdHlsZS5tYXhIZWlnaHQpIHx8IEluZmluaXR5O1xuXG4gIGlmICghcmVzaXplSGFuZGxlKSB7XG4gICAgcmVzaXplSGFuZGxlID0gdGhpcy5yZXNpemVIYW5kbGUgPSBkb21pZnkoXG4gICAgICAnPGRpdiBjbGFzcz1cImRqcy1kaXJlY3QtZWRpdGluZy1yZXNpemUtaGFuZGxlXCI+PC9kaXY+J1xuICAgICk7XG5cbiAgICB2YXIgc3RhcnRYLCBzdGFydFksIHN0YXJ0V2lkdGgsIHN0YXJ0SGVpZ2h0O1xuXG4gICAgdmFyIG9uTW91c2VEb3duID0gZnVuY3Rpb24oZSkge1xuICAgICAgcHJldmVudERlZmF1bHQoZSk7XG4gICAgICBzdG9wUHJvcGFnYXRpb24oZSk7XG5cbiAgICAgIHN0YXJ0WCA9IGUuY2xpZW50WDtcbiAgICAgIHN0YXJ0WSA9IGUuY2xpZW50WTtcblxuICAgICAgdmFyIGJvdW5kcyA9IHBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgc3RhcnRXaWR0aCA9IGJvdW5kcy53aWR0aDtcbiAgICAgIHN0YXJ0SGVpZ2h0ID0gYm91bmRzLmhlaWdodDtcblxuICAgICAgZG9tRXZlbnQuYmluZChkb2N1bWVudCwgJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICAgIGRvbUV2ZW50LmJpbmQoZG9jdW1lbnQsICdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgICB9O1xuXG4gICAgdmFyIG9uTW91c2VNb3ZlID0gZnVuY3Rpb24oZSkge1xuICAgICAgcHJldmVudERlZmF1bHQoZSk7XG4gICAgICBzdG9wUHJvcGFnYXRpb24oZSk7XG5cbiAgICAgIHZhciBuZXdXaWR0aCA9IG1pbihtYXgoc3RhcnRXaWR0aCArIGUuY2xpZW50WCAtIHN0YXJ0WCwgbWluV2lkdGgpLCBtYXhXaWR0aCk7XG4gICAgICB2YXIgbmV3SGVpZ2h0ID0gbWluKG1heChzdGFydEhlaWdodCArIGUuY2xpZW50WSAtIHN0YXJ0WSwgbWluSGVpZ2h0KSwgbWF4SGVpZ2h0KTtcblxuICAgICAgcGFyZW50LnN0eWxlLndpZHRoID0gbmV3V2lkdGggKyAncHgnO1xuICAgICAgcGFyZW50LnN0eWxlLmhlaWdodCA9IG5ld0hlaWdodCArICdweCc7XG5cbiAgICAgIHNlbGYucmVzaXplSGFuZGxlcih7XG4gICAgICAgIHdpZHRoOiBzdGFydFdpZHRoLFxuICAgICAgICBoZWlnaHQ6IHN0YXJ0SGVpZ2h0LFxuICAgICAgICBkeDogZS5jbGllbnRYIC0gc3RhcnRYLFxuICAgICAgICBkeTogZS5jbGllbnRZIC0gc3RhcnRZXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdmFyIG9uTW91c2VVcCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHByZXZlbnREZWZhdWx0KGUpO1xuICAgICAgc3RvcFByb3BhZ2F0aW9uKGUpO1xuXG4gICAgICBkb21FdmVudC51bmJpbmQoZG9jdW1lbnQsJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlLCBmYWxzZSk7XG4gICAgICBkb21FdmVudC51bmJpbmQoZG9jdW1lbnQsICdtb3VzZXVwJywgb25Nb3VzZVVwLCBmYWxzZSk7XG4gICAgfTtcblxuICAgIGRvbUV2ZW50LmJpbmQocmVzaXplSGFuZGxlLCAnbW91c2Vkb3duJywgb25Nb3VzZURvd24pO1xuICB9XG5cbiAgYXNzaWduKHJlc2l6ZUhhbmRsZS5zdHlsZSwge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIGJvdHRvbTogJzBweCcsXG4gICAgcmlnaHQ6ICcwcHgnLFxuICAgIGN1cnNvcjogJ253c2UtcmVzaXplJyxcbiAgICB3aWR0aDogJzAnLFxuICAgIGhlaWdodDogJzAnLFxuICAgIGJvcmRlclRvcDogKHBhcnNlSW50KHRoaXMuc3R5bGUuZm9udFNpemUpIC8gNCB8fCAzKSArICdweCBzb2xpZCB0cmFuc3BhcmVudCcsXG4gICAgYm9yZGVyUmlnaHQ6IChwYXJzZUludCh0aGlzLnN0eWxlLmZvbnRTaXplKSAvIDQgfHwgMykgKyAncHggc29saWQgI2NjYycsXG4gICAgYm9yZGVyQm90dG9tOiAocGFyc2VJbnQodGhpcy5zdHlsZS5mb250U2l6ZSkgLyA0IHx8IDMpICsgJ3B4IHNvbGlkICNjY2MnLFxuICAgIGJvcmRlckxlZnQ6IChwYXJzZUludCh0aGlzLnN0eWxlLmZvbnRTaXplKSAvIDQgfHwgMykgKyAncHggc29saWQgdHJhbnNwYXJlbnQnXG4gIH0pO1xuXG4gIHBhcmVudC5hcHBlbmRDaGlsZChyZXNpemVIYW5kbGUpO1xufTtcblxuXG4vKipcbiAqIENsZWFyIGNvbnRlbnQgYW5kIHN0eWxlIG9mIHRoZSB0ZXh0Ym94LCB1bmJpbmQgbGlzdGVuZXJzIGFuZFxuICogcmVzZXQgQ1NTIHN0eWxlLlxuICovXG5UZXh0Qm94LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCxcbiAgICAgIGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQsXG4gICAgICByZXNpemVIYW5kbGUgPSB0aGlzLnJlc2l6ZUhhbmRsZTtcblxuICAvLyBjbGVhciBjb250ZW50XG4gIGNvbnRlbnQuaW5uZXJUZXh0ID0gJyc7XG5cbiAgLy8gY2xlYXIgc3R5bGVzXG4gIHBhcmVudC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gIGNvbnRlbnQucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuXG4gIGRvbUV2ZW50LnVuYmluZChjb250ZW50LCAna2V5ZG93bicsIHRoaXMua2V5SGFuZGxlcik7XG4gIGRvbUV2ZW50LnVuYmluZChjb250ZW50LCAnbW91c2Vkb3duJywgc3RvcFByb3BhZ2F0aW9uKTtcbiAgZG9tRXZlbnQudW5iaW5kKGNvbnRlbnQsICdpbnB1dCcsIHRoaXMuYXV0b1Jlc2l6ZSk7XG4gIGRvbUV2ZW50LnVuYmluZChjb250ZW50LCAncGFzdGUnLCB0aGlzLmhhbmRsZVBhc3RlKTtcblxuICBpZiAocmVzaXplSGFuZGxlKSB7XG4gICAgcmVzaXplSGFuZGxlLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcblxuICAgIGRvbVJlbW92ZShyZXNpemVIYW5kbGUpO1xuICB9XG5cbiAgZG9tUmVtb3ZlKHBhcmVudCk7XG59O1xuXG5cblRleHRCb3gucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmNvbnRlbnQuaW5uZXJUZXh0LnRyaW0oKTtcbn07XG5cblxuVGV4dEJveC5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCksXG4gICAgICByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuXG4gIHJldHVybiByYW5nZTtcbn07XG5cblxuVGV4dEJveC5wcm90b3R5cGUuc2V0U2VsZWN0aW9uID0gZnVuY3Rpb24oY29udGFpbmVyLCBvZmZzZXQpIHtcbiAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblxuICBpZiAoY29udGFpbmVyID09PSBudWxsKSB7XG4gICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKHRoaXMuY29udGVudCk7XG4gIH0gZWxzZSB7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoY29udGFpbmVyLCBvZmZzZXQpO1xuICAgIHJhbmdlLnNldEVuZChjb250YWluZXIsIG9mZnNldCk7XG4gIH1cblxuICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbn07XG4iLCJpbXBvcnQge1xuICBmb3JFYWNoLFxuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBkZWxlZ2F0ZSBhcyBkb21EZWxlZ2F0ZSxcbiAgcXVlcnkgYXMgZG9tUXVlcnksXG4gIHF1ZXJ5QWxsIGFzIGRvbVF1ZXJ5QWxsXG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQgeyBpc1ByaW1hcnlCdXR0b24gfSBmcm9tICcuLi8uLi91dGlsL01vdXNlJztcblxuaW1wb3J0IHtcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgY3JlYXRlTGluZSxcbiAgdXBkYXRlTGluZVxufSBmcm9tICcuLi8uLi91dGlsL1JlbmRlclV0aWwnO1xuXG5mdW5jdGlvbiBhbGxvd0FsbChlKSB7IHJldHVybiB0cnVlOyB9XG5cbnZhciBMT1dfUFJJT1JJVFkgPSA1MDA7XG5cblxuLyoqXG4gKiBBIHBsdWdpbiB0aGF0IHByb3ZpZGVzIGludGVyYWN0aW9uIGV2ZW50cyBmb3IgZGlhZ3JhbSBlbGVtZW50cy5cbiAqXG4gKiBJdCBlbWl0cyB0aGUgZm9sbG93aW5nIGV2ZW50czpcbiAqXG4gKiAgICogZWxlbWVudC5jbGlja1xuICogICAqIGVsZW1lbnQuY29udGV4dG1lbnVcbiAqICAgKiBlbGVtZW50LmRibGNsaWNrXG4gKiAgICogZWxlbWVudC5ob3ZlclxuICogICAqIGVsZW1lbnQubW91c2Vkb3duXG4gKiAgICogZWxlbWVudC5tb3VzZW1vdmVcbiAqICAgKiBlbGVtZW50Lm1vdXNldXBcbiAqICAgKiBlbGVtZW50Lm91dFxuICpcbiAqIEVhY2ggZXZlbnQgaXMgYSB0dXBsZSB7IGVsZW1lbnQsIGdmeCwgb3JpZ2luYWxFdmVudCB9LlxuICpcbiAqIENhbmNlbGluZyB0aGUgZXZlbnQgdmlhIEV2ZW50I3ByZXZlbnREZWZhdWx0KClcbiAqIHByZXZlbnRzIHRoZSBvcmlnaW5hbCBET00gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEludGVyYWN0aW9uRXZlbnRzKGV2ZW50QnVzLCBlbGVtZW50UmVnaXN0cnksIHN0eWxlcykge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvKipcbiAgICogRmlyZSBhbiBpbnRlcmFjdGlvbiBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgbG9jYWwgZXZlbnQgbmFtZSwgZS5nLiBlbGVtZW50LmNsaWNrLlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50fSBldmVudCBuYXRpdmUgZXZlbnRcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gW2VsZW1lbnRdIHRoZSBkaWFncmFtIGVsZW1lbnQgdG8gZW1pdCB0aGUgZXZlbnQgb247XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0cyB0byB0aGUgZXZlbnQgdGFyZ2V0XG4gICAqL1xuICBmdW5jdGlvbiBmaXJlKHR5cGUsIGV2ZW50LCBlbGVtZW50KSB7XG5cbiAgICBpZiAoaXNJZ25vcmVkKHR5cGUsIGV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXQsIGdmeCwgcmV0dXJuVmFsdWU7XG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHRhcmdldCA9IGV2ZW50LmRlbGVnYXRlVGFyZ2V0IHx8IGV2ZW50LnRhcmdldDtcblxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBnZnggPSB0YXJnZXQ7XG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50UmVnaXN0cnkuZ2V0KGdmeCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGdmeCA9IGVsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhlbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAoIWdmeCB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVyblZhbHVlID0gZXZlbnRCdXMuZmlyZSh0eXBlLCB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgZ2Z4OiBnZngsXG4gICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgIH0pO1xuXG4gICAgaWYgKHJldHVyblZhbHVlID09PSBmYWxzZSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE8obmlra3UpOiBkb2N1bWVudCB0aGlzXG4gIHZhciBoYW5kbGVycyA9IHt9O1xuXG4gIGZ1bmN0aW9uIG1vdXNlSGFuZGxlcihsb2NhbEV2ZW50TmFtZSkge1xuICAgIHJldHVybiBoYW5kbGVyc1tsb2NhbEV2ZW50TmFtZV07XG4gIH1cblxuICBmdW5jdGlvbiBpc0lnbm9yZWQobG9jYWxFdmVudE5hbWUsIGV2ZW50KSB7XG5cbiAgICB2YXIgZmlsdGVyID0gaWdub3JlZEZpbHRlcnNbbG9jYWxFdmVudE5hbWVdIHx8IGlzUHJpbWFyeUJ1dHRvbjtcblxuICAgIC8vIG9ubHkgcmVhY3Qgb24gbGVmdCBtb3VzZSBidXR0b24gaW50ZXJhY3Rpb25zXG4gICAgLy8gZXhjZXB0IGZvciBpbnRlcmFjdGlvbiBldmVudHMgdGhhdCBhcmUgZW5hYmxlZFxuICAgIC8vIGZvciBzZWN1bmRhcnkgbW91c2UgYnV0dG9uXG4gICAgcmV0dXJuICFmaWx0ZXIoZXZlbnQpO1xuICB9XG5cbiAgdmFyIGJpbmRpbmdzID0ge1xuICAgIGNsaWNrOiAnZWxlbWVudC5jbGljaycsXG4gICAgY29udGV4dG1lbnU6ICdlbGVtZW50LmNvbnRleHRtZW51JyxcbiAgICBkYmxjbGljazogJ2VsZW1lbnQuZGJsY2xpY2snLFxuICAgIG1vdXNlZG93bjogJ2VsZW1lbnQubW91c2Vkb3duJyxcbiAgICBtb3VzZW1vdmU6ICdlbGVtZW50Lm1vdXNlbW92ZScsXG4gICAgbW91c2VvdmVyOiAnZWxlbWVudC5ob3ZlcicsXG4gICAgbW91c2VvdXQ6ICdlbGVtZW50Lm91dCcsXG4gICAgbW91c2V1cDogJ2VsZW1lbnQubW91c2V1cCcsXG4gIH07XG5cbiAgdmFyIGlnbm9yZWRGaWx0ZXJzID0ge1xuICAgICdlbGVtZW50LmNvbnRleHRtZW51JzogYWxsb3dBbGxcbiAgfTtcblxuXG4gIC8vIG1hbnVhbCBldmVudCB0cmlnZ2VyIC8vLy8vLy8vLy9cblxuICAvKipcbiAgICogVHJpZ2dlciBhbiBpbnRlcmFjdGlvbiBldmVudCAoYmFzZWQgb24gYSBuYXRpdmUgZG9tIGV2ZW50KVxuICAgKiBvbiB0aGUgdGFyZ2V0IHNoYXBlIG9yIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudE5hbWUgdGhlIG5hbWUgb2YgdGhlIHRyaWdnZXJlZCBET00gZXZlbnRcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudFxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSB0YXJnZXRFbGVtZW50XG4gICAqL1xuICBmdW5jdGlvbiB0cmlnZ2VyTW91c2VFdmVudChldmVudE5hbWUsIGV2ZW50LCB0YXJnZXRFbGVtZW50KSB7XG5cbiAgICAvLyBpLmUuIGVsZW1lbnQubW91c2Vkb3duLi4uXG4gICAgdmFyIGxvY2FsRXZlbnROYW1lID0gYmluZGluZ3NbZXZlbnROYW1lXTtcblxuICAgIGlmICghbG9jYWxFdmVudE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5tYXBwZWQgRE9NIGV2ZW50IG5hbWUgPCcgKyBldmVudE5hbWUgKyAnPicpO1xuICAgIH1cblxuICAgIHJldHVybiBmaXJlKGxvY2FsRXZlbnROYW1lLCBldmVudCwgdGFyZ2V0RWxlbWVudCk7XG4gIH1cblxuXG4gIHZhciBFTEVNRU5UX1NFTEVDVE9SID0gJ3N2ZywgLmRqcy1lbGVtZW50JztcblxuICAvLyBldmVudCBoYW5kbGluZyAvLy8vLy8vXG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJFdmVudChub2RlLCBldmVudCwgbG9jYWxFdmVudCwgaWdub3JlZEZpbHRlcikge1xuXG4gICAgdmFyIGhhbmRsZXIgPSBoYW5kbGVyc1tsb2NhbEV2ZW50XSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBmaXJlKGxvY2FsRXZlbnQsIGV2ZW50KTtcbiAgICB9O1xuXG4gICAgaWYgKGlnbm9yZWRGaWx0ZXIpIHtcbiAgICAgIGlnbm9yZWRGaWx0ZXJzW2xvY2FsRXZlbnRdID0gaWdub3JlZEZpbHRlcjtcbiAgICB9XG5cbiAgICBoYW5kbGVyLiRkZWxlZ2F0ZSA9IGRvbURlbGVnYXRlLmJpbmQobm9kZSwgRUxFTUVOVF9TRUxFQ1RPUiwgZXZlbnQsIGhhbmRsZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gdW5yZWdpc3RlckV2ZW50KG5vZGUsIGV2ZW50LCBsb2NhbEV2ZW50KSB7XG5cbiAgICB2YXIgaGFuZGxlciA9IG1vdXNlSGFuZGxlcihsb2NhbEV2ZW50KTtcblxuICAgIGlmICghaGFuZGxlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRvbURlbGVnYXRlLnVuYmluZChub2RlLCBldmVudCwgaGFuZGxlci4kZGVsZWdhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMoc3ZnKSB7XG4gICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24odmFsLCBrZXkpIHtcbiAgICAgIHJlZ2lzdGVyRXZlbnQoc3ZnLCBrZXksIHZhbCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB1bnJlZ2lzdGVyRXZlbnRzKHN2Zykge1xuICAgIGZvckVhY2goYmluZGluZ3MsIGZ1bmN0aW9uKHZhbCwga2V5KSB7XG4gICAgICB1bnJlZ2lzdGVyRXZlbnQoc3ZnLCBrZXksIHZhbCk7XG4gICAgfSk7XG4gIH1cblxuICBldmVudEJ1cy5vbignY2FudmFzLmRlc3Ryb3knLCBmdW5jdGlvbihldmVudCkge1xuICAgIHVucmVnaXN0ZXJFdmVudHMoZXZlbnQuc3ZnKTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NhbnZhcy5pbml0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZWdpc3RlckV2ZW50cyhldmVudC5zdmcpO1xuICB9KTtcblxuXG4gIC8vIGhpdCBib3ggdXBkYXRpbmcgLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGV2ZW50QnVzLm9uKFsgJ3NoYXBlLmFkZGVkJywgJ2Nvbm5lY3Rpb24uYWRkZWQnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50LFxuICAgICAgICBnZnggPSBldmVudC5nZng7XG5cbiAgICBldmVudEJ1cy5maXJlKCdpbnRlcmFjdGlvbkV2ZW50cy5jcmVhdGVIaXQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIGdmeDogZ2Z4IH0pO1xuICB9KTtcblxuICAvLyBVcGRhdGUgZGpzLWhpdCBvbiBjaGFuZ2UuXG4gIC8vIEEgbG93IHByaW9ydGl0eSBpcyBuZWNlc3NhcnksIGJlY2F1c2UgZGpzLWhpdCBvZiBsYWJlbHMgaGFzIHRvIGJlIHVwZGF0ZWRcbiAgLy8gYWZ0ZXIgdGhlIGxhYmVsIGJvdW5kcyBoYXZlIGJlZW4gdXBkYXRlZCBpbiB0aGUgcmVuZGVyZXIuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnc2hhcGUuY2hhbmdlZCcsXG4gICAgJ2Nvbm5lY3Rpb24uY2hhbmdlZCdcbiAgXSwgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50LFxuICAgICAgICBnZnggPSBldmVudC5nZng7XG5cbiAgICBldmVudEJ1cy5maXJlKCdpbnRlcmFjdGlvbkV2ZW50cy51cGRhdGVIaXQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIGdmeDogZ2Z4IH0pO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignaW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlSGl0JywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgZ2Z4ID0gZXZlbnQuZ2Z4O1xuXG4gICAgc2VsZi5jcmVhdGVEZWZhdWx0SGl0KGVsZW1lbnQsIGdmeCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdpbnRlcmFjdGlvbkV2ZW50cy51cGRhdGVIaXQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgZ2Z4ID0gZXZlbnQuZ2Z4O1xuXG4gICAgc2VsZi51cGRhdGVEZWZhdWx0SGl0KGVsZW1lbnQsIGdmeCk7XG4gIH0pO1xuXG5cbiAgLy8gaGl0IHN0eWxlcyAvLy8vLy8vLy8vLy9cblxuICB2YXIgU1RST0tFX0hJVF9TVFlMRSA9IGNyZWF0ZUhpdFN0eWxlKCdkanMtaGl0IGRqcy1oaXQtc3Ryb2tlJyk7XG5cbiAgdmFyIENMSUNLX1NUUk9LRV9ISVRfU1RZTEUgPSBjcmVhdGVIaXRTdHlsZSgnZGpzLWhpdCBkanMtaGl0LWNsaWNrLXN0cm9rZScpO1xuXG4gIHZhciBBTExfSElUX1NUWUxFID0gY3JlYXRlSGl0U3R5bGUoJ2Rqcy1oaXQgZGpzLWhpdC1hbGwnKTtcblxuICB2YXIgSElUX1RZUEVTID0ge1xuICAgICdhbGwnOiBBTExfSElUX1NUWUxFLFxuICAgICdjbGljay1zdHJva2UnOiBDTElDS19TVFJPS0VfSElUX1NUWUxFLFxuICAgICdzdHJva2UnOiBTVFJPS0VfSElUX1NUWUxFXG4gIH07XG5cbiAgZnVuY3Rpb24gY3JlYXRlSGl0U3R5bGUoY2xhc3NOYW1lcywgYXR0cnMpIHtcblxuICAgIGF0dHJzID0gYXNzaWduKHtcbiAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgIHN0cm9rZVdpZHRoOiAxNVxuICAgIH0sIGF0dHJzIHx8IHt9KTtcblxuICAgIHJldHVybiBzdHlsZXMuY2xzKGNsYXNzTmFtZXMsIFsgJ25vLWZpbGwnLCAnbm8tYm9yZGVyJyBdLCBhdHRycyk7XG4gIH1cblxuXG4gIC8vIHN0eWxlIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vXG5cbiAgZnVuY3Rpb24gYXBwbHlTdHlsZShoaXQsIHR5cGUpIHtcblxuICAgIHZhciBhdHRycyA9IEhJVF9UWVBFU1t0eXBlXTtcblxuICAgIGlmICghYXR0cnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBoaXQgdHlwZSA8JyArIHR5cGUgKyAnPicpO1xuICAgIH1cblxuICAgIHN2Z0F0dHIoaGl0LCBhdHRycyk7XG5cbiAgICByZXR1cm4gaGl0O1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwZW5kSGl0KGdmeCwgaGl0KSB7XG4gICAgc3ZnQXBwZW5kKGdmeCwgaGl0KTtcbiAgfVxuXG5cbiAgLy8gQVBJXG5cbiAgLyoqXG4gICAqIFJlbW92ZSBoaW50cyBvbiB0aGUgZ2l2ZW4gZ3JhcGhpY3MuXG4gICAqXG4gICAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gZ2Z4XG4gICAqL1xuICB0aGlzLnJlbW92ZUhpdHMgPSBmdW5jdGlvbihnZngpIHtcbiAgICB2YXIgaGl0cyA9IGRvbVF1ZXJ5QWxsKCcuZGpzLWhpdCcsIGdmeCk7XG5cbiAgICBmb3JFYWNoKGhpdHMsIHN2Z1JlbW92ZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBkZWZhdWx0IGhpdCBmb3IgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtTVkdFbGVtZW50fSBnZnhcbiAgICpcbiAgICogQHJldHVybiB7U1ZHRWxlbWVudH0gY3JlYXRlZCBoaXRcbiAgICovXG4gIHRoaXMuY3JlYXRlRGVmYXVsdEhpdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGdmeCkge1xuICAgIHZhciB3YXlwb2ludHMgPSBlbGVtZW50LndheXBvaW50cyxcbiAgICAgICAgaXNGcmFtZSA9IGVsZW1lbnQuaXNGcmFtZSxcbiAgICAgICAgYm94VHlwZTtcblxuICAgIGlmICh3YXlwb2ludHMpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVdheXBvaW50c0hpdChnZngsIHdheXBvaW50cyk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgYm94VHlwZSA9IGlzRnJhbWUgPyAnc3Ryb2tlJyA6ICdhbGwnO1xuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVCb3hIaXQoZ2Z4LCBib3hUeXBlLCB7XG4gICAgICAgIHdpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBoaXRzIGZvciB0aGUgZ2l2ZW4gd2F5cG9pbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGdmeFxuICAgKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gd2F5cG9pbnRzXG4gICAqXG4gICAqIEByZXR1cm4ge1NWR0VsZW1lbnR9XG4gICAqL1xuICB0aGlzLmNyZWF0ZVdheXBvaW50c0hpdCA9IGZ1bmN0aW9uKGdmeCwgd2F5cG9pbnRzKSB7XG5cbiAgICB2YXIgaGl0ID0gY3JlYXRlTGluZSh3YXlwb2ludHMpO1xuXG4gICAgYXBwbHlTdHlsZShoaXQsICdzdHJva2UnKTtcblxuICAgIGFwcGVuZEhpdChnZngsIGhpdCk7XG5cbiAgICByZXR1cm4gaGl0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgaGl0cyBmb3IgYSBib3guXG4gICAqXG4gICAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gZ2Z4XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBoaXRUeXBlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyc1xuICAgKlxuICAgKiBAcmV0dXJuIHtTVkdFbGVtZW50fVxuICAgKi9cbiAgdGhpcy5jcmVhdGVCb3hIaXQgPSBmdW5jdGlvbihnZngsIHR5cGUsIGF0dHJzKSB7XG5cbiAgICBhdHRycyA9IGFzc2lnbih7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH0sIGF0dHJzKTtcblxuICAgIHZhciBoaXQgPSBzdmdDcmVhdGUoJ3JlY3QnKTtcblxuICAgIGFwcGx5U3R5bGUoaGl0LCB0eXBlKTtcblxuICAgIHN2Z0F0dHIoaGl0LCBhdHRycyk7XG5cbiAgICBhcHBlbmRIaXQoZ2Z4LCBoaXQpO1xuXG4gICAgcmV0dXJuIGhpdDtcbiAgfTtcblxuICAvKipcbiAgICogVXBkYXRlIGRlZmF1bHQgaGl0IG9mIHRoZSBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0gIHtTVkdFbGVtZW50fSBnZnhcbiAgICpcbiAgICogQHJldHVybiB7U1ZHRWxlbWVudH0gdXBkYXRlZCBoaXRcbiAgICovXG4gIHRoaXMudXBkYXRlRGVmYXVsdEhpdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGdmeCkge1xuXG4gICAgdmFyIGhpdCA9IGRvbVF1ZXJ5KCcuZGpzLWhpdCcsIGdmeCk7XG5cbiAgICBpZiAoIWhpdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50LndheXBvaW50cykge1xuICAgICAgdXBkYXRlTGluZShoaXQsIGVsZW1lbnQud2F5cG9pbnRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3ZnQXR0cihoaXQsIHtcbiAgICAgICAgd2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIH07XG5cbiAgdGhpcy5maXJlID0gZmlyZTtcblxuICB0aGlzLnRyaWdnZXJNb3VzZUV2ZW50ID0gdHJpZ2dlck1vdXNlRXZlbnQ7XG5cbiAgdGhpcy5tb3VzZUhhbmRsZXIgPSBtb3VzZUhhbmRsZXI7XG5cbiAgdGhpcy5yZWdpc3RlckV2ZW50ID0gcmVnaXN0ZXJFdmVudDtcbiAgdGhpcy51bnJlZ2lzdGVyRXZlbnQgPSB1bnJlZ2lzdGVyRXZlbnQ7XG59XG5cblxuSW50ZXJhY3Rpb25FdmVudHMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdzdHlsZXMnXG5dO1xuXG5cbi8qKlxuICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBtb3VzZSBob3ZlcmVkIG92ZXIgYW4gZWxlbWVudFxuICpcbiAqIEBldmVudCBlbGVtZW50LmhvdmVyXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gZ2Z4XG4gKiBAcHJvcGVydHkge0V2ZW50fSBvcmlnaW5hbEV2ZW50XG4gKi9cblxuLyoqXG4gKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIG1vdXNlIGhhcyBsZWZ0IGFuIGVsZW1lbnRcbiAqXG4gKiBAZXZlbnQgZWxlbWVudC5vdXRcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuXG4vKipcbiAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgbW91c2UgaGFzIGNsaWNrZWQgYW4gZWxlbWVudFxuICpcbiAqIEBldmVudCBlbGVtZW50LmNsaWNrXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gZ2Z4XG4gKiBAcHJvcGVydHkge0V2ZW50fSBvcmlnaW5hbEV2ZW50XG4gKi9cblxuLyoqXG4gKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIG1vdXNlIGhhcyBkb3VibGUgY2xpY2tlZCBhbiBlbGVtZW50XG4gKlxuICogQGV2ZW50IGVsZW1lbnQuZGJsY2xpY2tcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuXG4vKipcbiAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgbW91c2UgaGFzIGdvbmUgZG93biBvbiBhbiBlbGVtZW50LlxuICpcbiAqIEBldmVudCBlbGVtZW50Lm1vdXNlZG93blxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IGdmeFxuICogQHByb3BlcnR5IHtFdmVudH0gb3JpZ2luYWxFdmVudFxuICovXG5cbi8qKlxuICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBtb3VzZSBoYXMgZ29uZSB1cCBvbiBhbiBlbGVtZW50LlxuICpcbiAqIEBldmVudCBlbGVtZW50Lm1vdXNldXBcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuXG4vKipcbiAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgY29udGV4dCBtZW51IGFjdGlvbiBpcyB0cmlnZ2VyZWRcbiAqIHZpYSBtb3VzZSBvciB0b3VjaCBjb250cm9scy5cbiAqXG4gKiBAZXZlbnQgZWxlbWVudC5jb250ZXh0bWVudVxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IGdmeFxuICogQHByb3BlcnR5IHtFdmVudH0gb3JpZ2luYWxFdmVudFxuICovIiwiLyoqXG4gKiBBIHNpbXBsZSB0cmFuc2xhdGlvbiBzdHViIHRvIGJlIHVzZWQgZm9yIG11bHRpLWxhbmd1YWdlIHN1cHBvcnRcbiAqIGluIGRpYWdyYW1zLiBDYW4gYmUgZWFzaWx5IHJlcGxhY2VkIHdpdGggYSBtb3JlIHNvcGhpc3RpY2F0ZWRcbiAqIHNvbHV0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogLy8gdXNlIGl0IGluc2lkZSBhbnkgZGlhZ3JhbSBjb21wb25lbnQgYnkgaW5qZWN0aW5nIGB0cmFuc2xhdGVgLlxuICpcbiAqIGZ1bmN0aW9uIE15U2VydmljZSh0cmFuc2xhdGUpIHtcbiAqICAgYWxlcnQodHJhbnNsYXRlKCdIRUxMTyB7eW91fScsIHsgeW91OiAnWW91IScgfSkpO1xuICogfVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB0ZW1wbGF0ZSB0byBpbnRlcnBvbGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtyZXBsYWNlbWVudHNdIGEgbWFwIHdpdGggc3Vic3RpdHV0ZXNcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSB0cmFuc2xhdGVkIHN0cmluZ1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2xhdGUodGVtcGxhdGUsIHJlcGxhY2VtZW50cykge1xuXG4gIHJlcGxhY2VtZW50cyA9IHJlcGxhY2VtZW50cyB8fCB7fTtcblxuICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgveyhbXn1dKyl9L2csIGZ1bmN0aW9uKF8sIGtleSkge1xuICAgIHJldHVybiByZXBsYWNlbWVudHNba2V5XSB8fCAneycgKyBrZXkgKyAnfSc7XG4gIH0pO1xufSIsIi8qKlxuICogRmFpbHNhZmUgcmVtb3ZlIGFuIGVsZW1lbnQgZnJvbSBhIGNvbGxlY3Rpb25cbiAqXG4gKiBAcGFyYW0gIHtBcnJheTxPYmplY3Q+fSBbY29sbGVjdGlvbl1cbiAqIEBwYXJhbSAge09iamVjdH0gW2VsZW1lbnRdXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSB0aGUgcHJldmlvdXMgaW5kZXggb2YgdGhlIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZShjb2xsZWN0aW9uLCBlbGVtZW50KSB7XG5cbiAgaWYgKCFjb2xsZWN0aW9uIHx8ICFlbGVtZW50KSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgdmFyIGlkeCA9IGNvbGxlY3Rpb24uaW5kZXhPZihlbGVtZW50KTtcblxuICBpZiAoaWR4ICE9PSAtMSkge1xuICAgIGNvbGxlY3Rpb24uc3BsaWNlKGlkeCwgMSk7XG4gIH1cblxuICByZXR1cm4gaWR4O1xufVxuXG4vKipcbiAqIEZhaWwgc2F2ZSBhZGQgYW4gZWxlbWVudCB0byB0aGUgZ2l2ZW4gY29ubmVjdGlvbiwgZW5zdXJpbmdcbiAqIGl0IGRvZXMgbm90IHlldCBleGlzdC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge051bWJlcn0gaWR4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGQoY29sbGVjdGlvbiwgZWxlbWVudCwgaWR4KSB7XG5cbiAgaWYgKCFjb2xsZWN0aW9uIHx8ICFlbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpZHggIT09ICdudW1iZXInKSB7XG4gICAgaWR4ID0gLTE7XG4gIH1cblxuICB2YXIgY3VycmVudElkeCA9IGNvbGxlY3Rpb24uaW5kZXhPZihlbGVtZW50KTtcblxuICBpZiAoY3VycmVudElkeCAhPT0gLTEpIHtcblxuICAgIGlmIChjdXJyZW50SWR4ID09PSBpZHgpIHtcblxuICAgICAgLy8gbm90aGluZyB0byBkbywgcG9zaXRpb24gaGFzIG5vdCBjaGFuZ2VkXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcblxuICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcblxuICAgICAgICAvLyByZW1vdmUgZnJvbSBjdXJyZW50IHBvc2l0aW9uXG4gICAgICAgIGNvbGxlY3Rpb24uc3BsaWNlKGN1cnJlbnRJZHgsIDEpO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICAvLyBhbHJlYWR5IGV4aXN0cyBpbiBjb2xsZWN0aW9uXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoaWR4ICE9PSAtMSkge1xuXG4gICAgLy8gaW5zZXJ0IGF0IHNwZWNpZmllZCBwb3NpdGlvblxuICAgIGNvbGxlY3Rpb24uc3BsaWNlKGlkeCwgMCwgZWxlbWVudCk7XG4gIH0gZWxzZSB7XG5cbiAgICAvLyBwdXNoIHRvIGVuZFxuICAgIGNvbGxlY3Rpb24ucHVzaChlbGVtZW50KTtcbiAgfVxufVxuXG5cbi8qKlxuICogRmFpbCBzYXZlIGdldCB0aGUgaW5kZXggb2YgYW4gZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24uXG4gKlxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gdGhlIGluZGV4IG9yIC0xIGlmIGNvbGxlY3Rpb24gb3IgZWxlbWVudCBkb1xuICogICAgICAgICAgICAgICAgICBub3QgZXhpc3Qgb3IgdGhlIGVsZW1lbnQgaXMgbm90IGNvbnRhaW5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4T2YoY29sbGVjdGlvbiwgZWxlbWVudCkge1xuXG4gIGlmICghY29sbGVjdGlvbiB8fCAhZWxlbWVudCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHJldHVybiBjb2xsZWN0aW9uLmluZGV4T2YoZWxlbWVudCk7XG59XG4iLCJ2YXIgQ0xBU1NfUEFUVEVSTiA9IC9eY2xhc3MgLztcblxuZnVuY3Rpb24gaXNDbGFzcyhmbikge1xuICByZXR1cm4gQ0xBU1NfUEFUVEVSTi50ZXN0KGZuLnRvU3RyaW5nKCkpO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5KG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5cbmZ1bmN0aW9uIGFubm90YXRlKCkge1xuICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIGlzQXJyYXkoYXJnc1swXSkpIHtcbiAgICBhcmdzID0gYXJnc1swXTtcbiAgfVxuXG4gIHZhciBmbiA9IGFyZ3MucG9wKCk7XG5cbiAgZm4uJGluamVjdCA9IGFyZ3M7XG5cbiAgcmV0dXJuIGZuO1xufVxuXG4vLyBDdXJyZW50IGxpbWl0YXRpb25zOlxuLy8gLSBjYW4ndCBwdXQgaW50byBcImZ1bmN0aW9uIGFyZ1wiIGNvbW1lbnRzXG4vLyBmdW5jdGlvbiAvKiAobm8gcGFyZW50aGVzaXMgbGlrZSB0aGlzKSAqLyAoKXt9XG4vLyBmdW5jdGlvbiBhYmMoIC8qIHh4IChubyBwYXJlbnRoZXNpcyBsaWtlIHRoaXMpICovIGEsIGIpIHt9XG4vL1xuLy8gSnVzdCBwdXQgdGhlIGNvbW1lbnQgYmVmb3JlIGZ1bmN0aW9uIG9yIGluc2lkZTpcbi8vIC8qICgoKHRoaXMgaXMgZmluZSkpKSAqLyBmdW5jdGlvbihhLCBiKSB7fVxuLy8gZnVuY3Rpb24gYWJjKGEpIHsgLyogKCgodGhpcyBpcyBmaW5lKSkpICovfVxuLy9cbi8vIC0gY2FuJ3QgcmVsaWFibHkgYXV0by1hbm5vdGF0ZSBjb25zdHJ1Y3Rvcjsgd2UnbGwgbWF0Y2ggdGhlXG4vLyBmaXJzdCBjb25zdHJ1Y3RvciguLi4pIHBhdHRlcm4gZm91bmQgd2hpY2ggbWF5IGJlIHRoZSBvbmVcbi8vIG9mIGEgbmVzdGVkIGNsYXNzLCB0b28uXG5cbnZhciBDT05TVFJVQ1RPUl9BUkdTID0gL2NvbnN0cnVjdG9yXFxzKlteKF0qXFwoXFxzKihbXildKilcXCkvbTtcbnZhciBGTl9BUkdTID0gL15mdW5jdGlvblxccypbXihdKlxcKFxccyooW14pXSopXFwpL207XG52YXIgRk5fQVJHID0gL1xcL1xcKihbXipdKilcXCpcXC8vbTtcblxuZnVuY3Rpb24gcGFyc2UoZm4pIHtcblxuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYW5ub3RhdGUgXCInICsgZm4gKyAnXCIuIEV4cGVjdGVkIGEgZnVuY3Rpb24hJyk7XG4gIH1cblxuICB2YXIgbWF0Y2ggPSBmbi50b1N0cmluZygpLm1hdGNoKGlzQ2xhc3MoZm4pID8gQ09OU1RSVUNUT1JfQVJHUyA6IEZOX0FSR1MpO1xuXG4gIC8vIG1heSBwYXJzZSBjbGFzcyB3aXRob3V0IGNvbnN0cnVjdG9yXG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gbWF0Y2hbMV0gJiYgbWF0Y2hbMV0uc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgIG1hdGNoID0gYXJnLm1hdGNoKEZOX0FSRyk7XG4gICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0udHJpbSgpIDogYXJnLnRyaW0oKTtcbiAgfSkgfHwgW107XG59XG5cbmZ1bmN0aW9uIE1vZHVsZSgpIHtcbiAgdmFyIHByb3ZpZGVycyA9IFtdO1xuXG4gIHRoaXMuZmFjdG9yeSA9IGZ1bmN0aW9uIChuYW1lLCBmYWN0b3J5KSB7XG4gICAgcHJvdmlkZXJzLnB1c2goW25hbWUsICdmYWN0b3J5JywgZmFjdG9yeV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHRoaXMudmFsdWUgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBwcm92aWRlcnMucHVzaChbbmFtZSwgJ3ZhbHVlJywgdmFsdWVdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB0aGlzLnR5cGUgPSBmdW5jdGlvbiAobmFtZSwgdHlwZSkge1xuICAgIHByb3ZpZGVycy5wdXNoKFtuYW1lLCAndHlwZScsIHR5cGVdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB0aGlzLmZvckVhY2ggPSBmdW5jdGlvbiAoaXRlcmF0b3IpIHtcbiAgICBwcm92aWRlcnMuZm9yRWFjaChpdGVyYXRvcik7XG4gIH07XG59XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XG5cbmZ1bmN0aW9uIEluamVjdG9yKG1vZHVsZXMsIHBhcmVudCkge1xuICBwYXJlbnQgPSBwYXJlbnQgfHwge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KG5hbWUsIHN0cmljdCkge1xuICAgICAgY3VycmVudGx5UmVzb2x2aW5nLnB1c2gobmFtZSk7XG5cbiAgICAgIGlmIChzdHJpY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyb3IoJ05vIHByb3ZpZGVyIGZvciBcIicgKyBuYW1lICsgJ1wiIScpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgY3VycmVudGx5UmVzb2x2aW5nID0gW107XG4gIHZhciBwcm92aWRlcnMgPSB0aGlzLl9wcm92aWRlcnMgPSBPYmplY3QuY3JlYXRlKHBhcmVudC5fcHJvdmlkZXJzIHx8IG51bGwpO1xuICB2YXIgaW5zdGFuY2VzID0gdGhpcy5faW5zdGFuY2VzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICB2YXIgc2VsZiA9IGluc3RhbmNlcy5pbmplY3RvciA9IHRoaXM7XG5cbiAgdmFyIGVycm9yID0gZnVuY3Rpb24gZXJyb3IobXNnKSB7XG4gICAgdmFyIHN0YWNrID0gY3VycmVudGx5UmVzb2x2aW5nLmpvaW4oJyAtPiAnKTtcbiAgICBjdXJyZW50bHlSZXNvbHZpbmcubGVuZ3RoID0gMDtcbiAgICByZXR1cm4gbmV3IEVycm9yKHN0YWNrID8gbXNnICsgJyAoUmVzb2x2aW5nOiAnICsgc3RhY2sgKyAnKScgOiBtc2cpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBuYW1lZCBzZXJ2aWNlLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtzdHJpY3Q9dHJ1ZV0gaWYgZmFsc2UsIHJlc29sdmUgbWlzc2luZyBzZXJ2aWNlcyB0byBudWxsXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIHZhciBnZXQgPSBmdW5jdGlvbiBnZXQobmFtZSwgc3RyaWN0KSB7XG4gICAgaWYgKCFwcm92aWRlcnNbbmFtZV0gJiYgbmFtZS5pbmRleE9mKCcuJykgIT09IC0xKSB7XG4gICAgICB2YXIgcGFydHMgPSBuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgcGl2b3QgPSBnZXQocGFydHMuc2hpZnQoKSk7XG5cbiAgICAgIHdoaWxlIChwYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgcGl2b3QgPSBwaXZvdFtwYXJ0cy5zaGlmdCgpXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBpdm90O1xuICAgIH1cblxuICAgIGlmIChoYXNQcm9wKGluc3RhbmNlcywgbmFtZSkpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZXNbbmFtZV07XG4gICAgfVxuXG4gICAgaWYgKGhhc1Byb3AocHJvdmlkZXJzLCBuYW1lKSkge1xuICAgICAgaWYgKGN1cnJlbnRseVJlc29sdmluZy5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgICBjdXJyZW50bHlSZXNvbHZpbmcucHVzaChuYW1lKTtcbiAgICAgICAgdGhyb3cgZXJyb3IoJ0Nhbm5vdCByZXNvbHZlIGNpcmN1bGFyIGRlcGVuZGVuY3khJyk7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRseVJlc29sdmluZy5wdXNoKG5hbWUpO1xuICAgICAgaW5zdGFuY2VzW25hbWVdID0gcHJvdmlkZXJzW25hbWVdWzBdKHByb3ZpZGVyc1tuYW1lXVsxXSk7XG4gICAgICBjdXJyZW50bHlSZXNvbHZpbmcucG9wKCk7XG5cbiAgICAgIHJldHVybiBpbnN0YW5jZXNbbmFtZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudC5nZXQobmFtZSwgc3RyaWN0KTtcbiAgfTtcblxuICB2YXIgZm5EZWYgPSBmdW5jdGlvbiBmbkRlZihmbikge1xuICAgIHZhciBsb2NhbHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGlzQXJyYXkoZm4pKSB7XG4gICAgICAgIGZuID0gYW5ub3RhdGUoZm4uc2xpY2UoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2UgXCInICsgZm4gKyAnXCIuIEV4cGVjdGVkIGEgZnVuY3Rpb24hJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGluamVjdCA9IGZuLiRpbmplY3QgfHwgcGFyc2UoZm4pO1xuICAgIHZhciBkZXBlbmRlbmNpZXMgPSBpbmplY3QubWFwKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgIGlmIChoYXNQcm9wKGxvY2FscywgZGVwKSkge1xuICAgICAgICByZXR1cm4gbG9jYWxzW2RlcF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZ2V0KGRlcCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZm46IGZuLFxuICAgICAgZGVwZW5kZW5jaWVzOiBkZXBlbmRlbmNpZXNcbiAgICB9O1xuICB9O1xuXG4gIHZhciBpbnN0YW50aWF0ZSA9IGZ1bmN0aW9uIGluc3RhbnRpYXRlKFR5cGUpIHtcbiAgICB2YXIgX2ZuRGVmID0gZm5EZWYoVHlwZSksXG4gICAgICAgIGRlcGVuZGVuY2llcyA9IF9mbkRlZi5kZXBlbmRlbmNpZXMsXG4gICAgICAgIGZuID0gX2ZuRGVmLmZuO1xuXG4gICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoZm4sIFtudWxsXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGRlcGVuZGVuY2llcykpKSkoKTtcbiAgfTtcblxuICB2YXIgaW52b2tlID0gZnVuY3Rpb24gaW52b2tlKGZ1bmMsIGNvbnRleHQsIGxvY2Fscykge1xuICAgIHZhciBfZm5EZWYyID0gZm5EZWYoZnVuYywgbG9jYWxzKSxcbiAgICAgICAgZGVwZW5kZW5jaWVzID0gX2ZuRGVmMi5kZXBlbmRlbmNpZXMsXG4gICAgICAgIGZuID0gX2ZuRGVmMi5mbjtcblxuICAgIHJldHVybiBmbi5jYWxsLmFwcGx5KGZuLCBbY29udGV4dF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShkZXBlbmRlbmNpZXMpKSk7XG4gIH07XG5cbiAgdmFyIGNyZWF0ZVByaXZhdGVJbmplY3RvckZhY3RvcnkgPSBmdW5jdGlvbiBjcmVhdGVQcml2YXRlSW5qZWN0b3JGYWN0b3J5KHByaXZhdGVDaGlsZEluamVjdG9yKSB7XG4gICAgcmV0dXJuIGFubm90YXRlKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBwcml2YXRlQ2hpbGRJbmplY3Rvci5nZXQoa2V5KTtcbiAgICB9KTtcbiAgfTtcblxuICB2YXIgY3JlYXRlQ2hpbGQgPSBmdW5jdGlvbiBjcmVhdGVDaGlsZChtb2R1bGVzLCBmb3JjZU5ld0luc3RhbmNlcykge1xuICAgIGlmIChmb3JjZU5ld0luc3RhbmNlcyAmJiBmb3JjZU5ld0luc3RhbmNlcy5sZW5ndGgpIHtcbiAgICAgIHZhciBmcm9tUGFyZW50TW9kdWxlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIHZhciBtYXRjaGVkU2NvcGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgdmFyIHByaXZhdGVJbmplY3RvcnNDYWNoZSA9IFtdO1xuICAgICAgdmFyIHByaXZhdGVDaGlsZEluamVjdG9ycyA9IFtdO1xuICAgICAgdmFyIHByaXZhdGVDaGlsZEZhY3RvcmllcyA9IFtdO1xuXG4gICAgICB2YXIgcHJvdmlkZXI7XG4gICAgICB2YXIgY2FjaGVJZHg7XG4gICAgICB2YXIgcHJpdmF0ZUNoaWxkSW5qZWN0b3I7XG4gICAgICB2YXIgcHJpdmF0ZUNoaWxkSW5qZWN0b3JGYWN0b3J5O1xuICAgICAgZm9yICh2YXIgbmFtZSBpbiBwcm92aWRlcnMpIHtcbiAgICAgICAgcHJvdmlkZXIgPSBwcm92aWRlcnNbbmFtZV07XG5cbiAgICAgICAgaWYgKGZvcmNlTmV3SW5zdGFuY2VzLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgaWYgKHByb3ZpZGVyWzJdID09PSAncHJpdmF0ZScpIHtcbiAgICAgICAgICAgIGNhY2hlSWR4ID0gcHJpdmF0ZUluamVjdG9yc0NhY2hlLmluZGV4T2YocHJvdmlkZXJbM10pO1xuICAgICAgICAgICAgaWYgKGNhY2hlSWR4ID09PSAtMSkge1xuICAgICAgICAgICAgICBwcml2YXRlQ2hpbGRJbmplY3RvciA9IHByb3ZpZGVyWzNdLmNyZWF0ZUNoaWxkKFtdLCBmb3JjZU5ld0luc3RhbmNlcyk7XG4gICAgICAgICAgICAgIHByaXZhdGVDaGlsZEluamVjdG9yRmFjdG9yeSA9IGNyZWF0ZVByaXZhdGVJbmplY3RvckZhY3RvcnkocHJpdmF0ZUNoaWxkSW5qZWN0b3IpO1xuICAgICAgICAgICAgICBwcml2YXRlSW5qZWN0b3JzQ2FjaGUucHVzaChwcm92aWRlclszXSk7XG4gICAgICAgICAgICAgIHByaXZhdGVDaGlsZEluamVjdG9ycy5wdXNoKHByaXZhdGVDaGlsZEluamVjdG9yKTtcbiAgICAgICAgICAgICAgcHJpdmF0ZUNoaWxkRmFjdG9yaWVzLnB1c2gocHJpdmF0ZUNoaWxkSW5qZWN0b3JGYWN0b3J5KTtcbiAgICAgICAgICAgICAgZnJvbVBhcmVudE1vZHVsZVtuYW1lXSA9IFtwcml2YXRlQ2hpbGRJbmplY3RvckZhY3RvcnksIG5hbWUsICdwcml2YXRlJywgcHJpdmF0ZUNoaWxkSW5qZWN0b3JdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZnJvbVBhcmVudE1vZHVsZVtuYW1lXSA9IFtwcml2YXRlQ2hpbGRGYWN0b3JpZXNbY2FjaGVJZHhdLCBuYW1lLCAncHJpdmF0ZScsIHByaXZhdGVDaGlsZEluamVjdG9yc1tjYWNoZUlkeF1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcm9tUGFyZW50TW9kdWxlW25hbWVdID0gW3Byb3ZpZGVyWzJdLCBwcm92aWRlclsxXV07XG4gICAgICAgICAgfVxuICAgICAgICAgIG1hdGNoZWRTY29wZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChwcm92aWRlclsyXSA9PT0gJ2ZhY3RvcnknIHx8IHByb3ZpZGVyWzJdID09PSAndHlwZScpICYmIHByb3ZpZGVyWzFdLiRzY29wZSkge1xuICAgICAgICAgIC8qIGpzaGludCAtVzA4MyAqL1xuICAgICAgICAgIGZvcmNlTmV3SW5zdGFuY2VzLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7XG4gICAgICAgICAgICBpZiAocHJvdmlkZXJbMV0uJHNjb3BlLmluZGV4T2Yoc2NvcGUpICE9PSAtMSkge1xuICAgICAgICAgICAgICBmcm9tUGFyZW50TW9kdWxlW25hbWVdID0gW3Byb3ZpZGVyWzJdLCBwcm92aWRlclsxXV07XG4gICAgICAgICAgICAgIG1hdGNoZWRTY29wZXNbc2NvcGVdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3JjZU5ld0luc3RhbmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzY29wZSkge1xuICAgICAgICBpZiAoIW1hdGNoZWRTY29wZXNbc2NvcGVdKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwcm92aWRlciBmb3IgXCInICsgc2NvcGUgKyAnXCIuIENhbm5vdCB1c2UgcHJvdmlkZXIgZnJvbSB0aGUgcGFyZW50IScpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbW9kdWxlcy51bnNoaWZ0KGZyb21QYXJlbnRNb2R1bGUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW5qZWN0b3IobW9kdWxlcywgc2VsZik7XG4gIH07XG5cbiAgdmFyIGZhY3RvcnlNYXAgPSB7XG4gICAgZmFjdG9yeTogaW52b2tlLFxuICAgIHR5cGU6IGluc3RhbnRpYXRlLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShfdmFsdWUpIHtcbiAgICAgIHJldHVybiBfdmFsdWU7XG4gICAgfVxuICB9O1xuXG4gIG1vZHVsZXMuZm9yRWFjaChmdW5jdGlvbiAobW9kdWxlKSB7XG5cbiAgICBmdW5jdGlvbiBhcnJheVVud3JhcCh0eXBlLCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGUgIT09ICd2YWx1ZScgJiYgaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSBhbm5vdGF0ZSh2YWx1ZS5zbGljZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8vIFRPRE8odm9qdGEpOiBoYW5kbGUgd3JvbmcgaW5wdXRzIChtb2R1bGVzKVxuICAgIGlmIChtb2R1bGUgaW5zdGFuY2VvZiBNb2R1bGUpIHtcbiAgICAgIG1vZHVsZS5mb3JFYWNoKGZ1bmN0aW9uIChwcm92aWRlcikge1xuICAgICAgICB2YXIgbmFtZSA9IHByb3ZpZGVyWzBdO1xuICAgICAgICB2YXIgdHlwZSA9IHByb3ZpZGVyWzFdO1xuICAgICAgICB2YXIgdmFsdWUgPSBwcm92aWRlclsyXTtcblxuICAgICAgICBwcm92aWRlcnNbbmFtZV0gPSBbZmFjdG9yeU1hcFt0eXBlXSwgYXJyYXlVbndyYXAodHlwZSwgdmFsdWUpLCB0eXBlXTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoKHR5cGVvZiBtb2R1bGUgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG1vZHVsZSkpID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKG1vZHVsZS5fX2V4cG9ydHNfXykge1xuICAgICAgICB2YXIgY2xvbmVkTW9kdWxlID0gT2JqZWN0LmtleXMobW9kdWxlKS5yZWR1Y2UoZnVuY3Rpb24gKG0sIGtleSkge1xuICAgICAgICAgIGlmIChrZXkuc3Vic3RyaW5nKDAsIDIpICE9PSAnX18nKSB7XG4gICAgICAgICAgICBtW2tleV0gPSBtb2R1bGVba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgIH0sIE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG4gICAgICAgIHZhciBwcml2YXRlSW5qZWN0b3IgPSBuZXcgSW5qZWN0b3IoKG1vZHVsZS5fX21vZHVsZXNfXyB8fCBbXSkuY29uY2F0KFtjbG9uZWRNb2R1bGVdKSwgc2VsZik7XG4gICAgICAgIHZhciBnZXRGcm9tUHJpdmF0ZUluamVjdG9yID0gYW5ub3RhdGUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJldHVybiBwcml2YXRlSW5qZWN0b3IuZ2V0KGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBtb2R1bGUuX19leHBvcnRzX18uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcHJvdmlkZXJzW2tleV0gPSBbZ2V0RnJvbVByaXZhdGVJbmplY3Rvciwga2V5LCAncHJpdmF0ZScsIHByaXZhdGVJbmplY3Rvcl07XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmtleXMobW9kdWxlKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgaWYgKG1vZHVsZVtuYW1lXVsyXSA9PT0gJ3ByaXZhdGUnKSB7XG4gICAgICAgICAgICBwcm92aWRlcnNbbmFtZV0gPSBtb2R1bGVbbmFtZV07XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHR5cGUgPSBtb2R1bGVbbmFtZV1bMF07XG4gICAgICAgICAgdmFyIHZhbHVlID0gbW9kdWxlW25hbWVdWzFdO1xuXG4gICAgICAgICAgcHJvdmlkZXJzW25hbWVdID0gW2ZhY3RvcnlNYXBbdHlwZV0sIGFycmF5VW53cmFwKHR5cGUsIHZhbHVlKSwgdHlwZV07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gcHVibGljIEFQSVxuICB0aGlzLmdldCA9IGdldDtcbiAgdGhpcy5pbnZva2UgPSBpbnZva2U7XG4gIHRoaXMuaW5zdGFudGlhdGUgPSBpbnN0YW50aWF0ZTtcbiAgdGhpcy5jcmVhdGVDaGlsZCA9IGNyZWF0ZUNoaWxkO1xufVxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGhhc1Byb3Aob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5leHBvcnQgeyBhbm5vdGF0ZSwgTW9kdWxlLCBJbmplY3RvciB9O1xuIiwiLyohIEhhbW1lci5KUyAtIHYyLjAuNyAtIDIwMTYtMDQtMjJcbiAqIGh0dHA6Ly9oYW1tZXJqcy5naXRodWIuaW8vXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE2IEpvcmlrIFRhbmdlbGRlcjtcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAqL1xuKGZ1bmN0aW9uKHdpbmRvdywgZG9jdW1lbnQsIGV4cG9ydE5hbWUsIHVuZGVmaW5lZCkge1xuICAndXNlIHN0cmljdCc7XG5cbnZhciBWRU5ET1JfUFJFRklYRVMgPSBbJycsICd3ZWJraXQnLCAnTW96JywgJ01TJywgJ21zJywgJ28nXTtcbnZhciBURVNUX0VMRU1FTlQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxudmFyIFRZUEVfRlVOQ1RJT04gPSAnZnVuY3Rpb24nO1xuXG52YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIG5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIHNldCBhIHRpbWVvdXQgd2l0aCBhIGdpdmVuIHNjb3BlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtOdW1iZXJ9IHRpbWVvdXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBzZXRUaW1lb3V0Q29udGV4dChmbiwgdGltZW91dCwgY29udGV4dCkge1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGJpbmRGbihmbiwgY29udGV4dCksIHRpbWVvdXQpO1xufVxuXG4vKipcbiAqIGlmIHRoZSBhcmd1bWVudCBpcyBhbiBhcnJheSwgd2Ugd2FudCB0byBleGVjdXRlIHRoZSBmbiBvbiBlYWNoIGVudHJ5XG4gKiBpZiBpdCBhaW50IGFuIGFycmF5IHdlIGRvbid0IHdhbnQgdG8gZG8gYSB0aGluZy5cbiAqIHRoaXMgaXMgdXNlZCBieSBhbGwgdGhlIG1ldGhvZHMgdGhhdCBhY2NlcHQgYSBzaW5nbGUgYW5kIGFycmF5IGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfEFycmF5fSBhcmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBmblxuICogQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0XVxuICogQHJldHVybnMge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGludm9rZUFycmF5QXJnKGFyZywgZm4sIGNvbnRleHQpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgIGVhY2goYXJnLCBjb250ZXh0W2ZuXSwgY29udGV4dCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogd2FsayBvYmplY3RzIGFuZCBhcnJheXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICovXG5mdW5jdGlvbiBlYWNoKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICB2YXIgaTtcblxuICAgIGlmICghb2JqKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAob2JqLmZvckVhY2gpIHtcbiAgICAgICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xuICAgIH0gZWxzZSBpZiAob2JqLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSAwO1xuICAgICAgICB3aGlsZSAoaSA8IG9iai5sZW5ndGgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChpIGluIG9iaikge1xuICAgICAgICAgICAgb2JqLmhhc093blByb3BlcnR5KGkpICYmIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIHdyYXAgYSBtZXRob2Qgd2l0aCBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgYW5kIHN0YWNrIHRyYWNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2RcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB3cmFwcGluZyB0aGUgc3VwcGxpZWQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBkZXByZWNhdGUobWV0aG9kLCBuYW1lLCBtZXNzYWdlKSB7XG4gICAgdmFyIGRlcHJlY2F0aW9uTWVzc2FnZSA9ICdERVBSRUNBVEVEIE1FVEhPRDogJyArIG5hbWUgKyAnXFxuJyArIG1lc3NhZ2UgKyAnIEFUIFxcbic7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZSA9IG5ldyBFcnJvcignZ2V0LXN0YWNrLXRyYWNlJyk7XG4gICAgICAgIHZhciBzdGFjayA9IGUgJiYgZS5zdGFjayA/IGUuc3RhY2sucmVwbGFjZSgvXlteXFwoXSs/W1xcbiRdL2dtLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eXFxzK2F0XFxzKy9nbSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXk9iamVjdC48YW5vbnltb3VzPlxccypcXCgvZ20sICd7YW5vbnltb3VzfSgpQCcpIDogJ1Vua25vd24gU3RhY2sgVHJhY2UnO1xuXG4gICAgICAgIHZhciBsb2cgPSB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUud2FybiB8fCB3aW5kb3cuY29uc29sZS5sb2cpO1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgICBsb2cuY2FsbCh3aW5kb3cuY29uc29sZSwgZGVwcmVjYXRpb25NZXNzYWdlLCBzdGFjayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG59XG5cbi8qKlxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHBhcmFtIHsuLi5PYmplY3R9IG9iamVjdHNfdG9fYXNzaWduXG4gKiBAcmV0dXJucyB7T2JqZWN0fSB0YXJnZXRcbiAqL1xudmFyIGFzc2lnbjtcbmlmICh0eXBlb2YgT2JqZWN0LmFzc2lnbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQpIHtcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gdW5kZWZpbmVkIHx8IHRhcmdldCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb3V0cHV0ID0gT2JqZWN0KHRhcmdldCk7XG4gICAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBhcmd1bWVudHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICAgICAgICAgIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCAmJiBzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBuZXh0S2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbbmV4dEtleV0gPSBzb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9O1xufSBlbHNlIHtcbiAgICBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xufVxuXG4vKipcbiAqIGV4dGVuZCBvYmplY3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgaW4gZGVzdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBvbmVzIGluIHNyYy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXN0XG4gKiBAcGFyYW0ge09iamVjdH0gc3JjXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFttZXJnZT1mYWxzZV1cbiAqIEByZXR1cm5zIHtPYmplY3R9IGRlc3RcbiAqL1xudmFyIGV4dGVuZCA9IGRlcHJlY2F0ZShmdW5jdGlvbiBleHRlbmQoZGVzdCwgc3JjLCBtZXJnZSkge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoc3JjKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBrZXlzLmxlbmd0aCkge1xuICAgICAgICBpZiAoIW1lcmdlIHx8IChtZXJnZSAmJiBkZXN0W2tleXNbaV1dID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICBkZXN0W2tleXNbaV1dID0gc3JjW2tleXNbaV1dO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIGRlc3Q7XG59LCAnZXh0ZW5kJywgJ1VzZSBgYXNzaWduYC4nKTtcblxuLyoqXG4gKiBtZXJnZSB0aGUgdmFsdWVzIGZyb20gc3JjIGluIHRoZSBkZXN0LlxuICogbWVhbnMgdGhhdCBwcm9wZXJ0aWVzIHRoYXQgZXhpc3QgaW4gZGVzdCB3aWxsIG5vdCBiZSBvdmVyd3JpdHRlbiBieSBzcmNcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXN0XG4gKiBAcGFyYW0ge09iamVjdH0gc3JjXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBkZXN0XG4gKi9cbnZhciBtZXJnZSA9IGRlcHJlY2F0ZShmdW5jdGlvbiBtZXJnZShkZXN0LCBzcmMpIHtcbiAgICByZXR1cm4gZXh0ZW5kKGRlc3QsIHNyYywgdHJ1ZSk7XG59LCAnbWVyZ2UnLCAnVXNlIGBhc3NpZ25gLicpO1xuXG4vKipcbiAqIHNpbXBsZSBjbGFzcyBpbmhlcml0YW5jZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2hpbGRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGJhc2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllc11cbiAqL1xuZnVuY3Rpb24gaW5oZXJpdChjaGlsZCwgYmFzZSwgcHJvcGVydGllcykge1xuICAgIHZhciBiYXNlUCA9IGJhc2UucHJvdG90eXBlLFxuICAgICAgICBjaGlsZFA7XG5cbiAgICBjaGlsZFAgPSBjaGlsZC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGJhc2VQKTtcbiAgICBjaGlsZFAuY29uc3RydWN0b3IgPSBjaGlsZDtcbiAgICBjaGlsZFAuX3N1cGVyID0gYmFzZVA7XG5cbiAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgICBhc3NpZ24oY2hpbGRQLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG59XG5cbi8qKlxuICogc2ltcGxlIGZ1bmN0aW9uIGJpbmRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBiaW5kRm4oZm4sIGNvbnRleHQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gYm91bmRGbigpIHtcbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBsZXQgYSBib29sZWFuIHZhbHVlIGFsc28gYmUgYSBmdW5jdGlvbiB0aGF0IG11c3QgcmV0dXJuIGEgYm9vbGVhblxuICogdGhpcyBmaXJzdCBpdGVtIGluIGFyZ3Mgd2lsbCBiZSB1c2VkIGFzIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IHZhbFxuICogQHBhcmFtIHtBcnJheX0gW2FyZ3NdXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gYm9vbE9yRm4odmFsLCBhcmdzKSB7XG4gICAgaWYgKHR5cGVvZiB2YWwgPT0gVFlQRV9GVU5DVElPTikge1xuICAgICAgICByZXR1cm4gdmFsLmFwcGx5KGFyZ3MgPyBhcmdzWzBdIHx8IHVuZGVmaW5lZCA6IHVuZGVmaW5lZCwgYXJncyk7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59XG5cbi8qKlxuICogdXNlIHRoZSB2YWwyIHdoZW4gdmFsMSBpcyB1bmRlZmluZWRcbiAqIEBwYXJhbSB7Kn0gdmFsMVxuICogQHBhcmFtIHsqfSB2YWwyXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZnVuY3Rpb24gaWZVbmRlZmluZWQodmFsMSwgdmFsMikge1xuICAgIHJldHVybiAodmFsMSA9PT0gdW5kZWZpbmVkKSA/IHZhbDIgOiB2YWwxO1xufVxuXG4vKipcbiAqIGFkZEV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcnModGFyZ2V0LCB0eXBlcywgaGFuZGxlcikge1xuICAgIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbih0eXBlKSB7XG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiByZW1vdmVFdmVudExpc3RlbmVyIHdpdGggbXVsdGlwbGUgZXZlbnRzIGF0IG9uY2VcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IHRhcmdldFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRhcmdldCwgdHlwZXMsIGhhbmRsZXIpIHtcbiAgICBlYWNoKHNwbGl0U3RyKHR5cGVzKSwgZnVuY3Rpb24odHlwZSkge1xuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogZmluZCBpZiBhIG5vZGUgaXMgaW4gdGhlIGdpdmVuIHBhcmVudFxuICogQG1ldGhvZCBoYXNQYXJlbnRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhcmVudFxuICogQHJldHVybiB7Qm9vbGVhbn0gZm91bmRcbiAqL1xuZnVuY3Rpb24gaGFzUGFyZW50KG5vZGUsIHBhcmVudCkge1xuICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGlmIChub2RlID09IHBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIHNtYWxsIGluZGV4T2Ygd3JhcHBlclxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAqIEByZXR1cm5zIHtCb29sZWFufSBmb3VuZFxuICovXG5mdW5jdGlvbiBpblN0cihzdHIsIGZpbmQpIHtcbiAgICByZXR1cm4gc3RyLmluZGV4T2YoZmluZCkgPiAtMTtcbn1cblxuLyoqXG4gKiBzcGxpdCBzdHJpbmcgb24gd2hpdGVzcGFjZVxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge0FycmF5fSB3b3Jkc1xuICovXG5mdW5jdGlvbiBzcGxpdFN0cihzdHIpIHtcbiAgICByZXR1cm4gc3RyLnRyaW0oKS5zcGxpdCgvXFxzKy9nKTtcbn1cblxuLyoqXG4gKiBmaW5kIGlmIGEgYXJyYXkgY29udGFpbnMgdGhlIG9iamVjdCB1c2luZyBpbmRleE9mIG9yIGEgc2ltcGxlIHBvbHlGaWxsXG4gKiBAcGFyYW0ge0FycmF5fSBzcmNcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaW5kXG4gKiBAcGFyYW0ge1N0cmluZ30gW2ZpbmRCeUtleV1cbiAqIEByZXR1cm4ge0Jvb2xlYW58TnVtYmVyfSBmYWxzZSB3aGVuIG5vdCBmb3VuZCwgb3IgdGhlIGluZGV4XG4gKi9cbmZ1bmN0aW9uIGluQXJyYXkoc3JjLCBmaW5kLCBmaW5kQnlLZXkpIHtcbiAgICBpZiAoc3JjLmluZGV4T2YgJiYgIWZpbmRCeUtleSkge1xuICAgICAgICByZXR1cm4gc3JjLmluZGV4T2YoZmluZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB3aGlsZSAoaSA8IHNyYy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICgoZmluZEJ5S2V5ICYmIHNyY1tpXVtmaW5kQnlLZXldID09IGZpbmQpIHx8ICghZmluZEJ5S2V5ICYmIHNyY1tpXSA9PT0gZmluZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxufVxuXG4vKipcbiAqIGNvbnZlcnQgYXJyYXktbGlrZSBvYmplY3RzIHRvIHJlYWwgYXJyYXlzXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkob2JqKSB7XG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG9iaiwgMCk7XG59XG5cbi8qKlxuICogdW5pcXVlIGFycmF5IHdpdGggb2JqZWN0cyBiYXNlZCBvbiBhIGtleSAobGlrZSAnaWQnKSBvciBqdXN0IGJ5IHRoZSBhcnJheSdzIHZhbHVlXG4gKiBAcGFyYW0ge0FycmF5fSBzcmMgW3tpZDoxfSx7aWQ6Mn0se2lkOjF9XVxuICogQHBhcmFtIHtTdHJpbmd9IFtrZXldXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtzb3J0PUZhbHNlXVxuICogQHJldHVybnMge0FycmF5fSBbe2lkOjF9LHtpZDoyfV1cbiAqL1xuZnVuY3Rpb24gdW5pcXVlQXJyYXkoc3JjLCBrZXksIHNvcnQpIHtcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHNyYy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbCA9IGtleSA/IHNyY1tpXVtrZXldIDogc3JjW2ldO1xuICAgICAgICBpZiAoaW5BcnJheSh2YWx1ZXMsIHZhbCkgPCAwKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goc3JjW2ldKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXNbaV0gPSB2YWw7XG4gICAgICAgIGkrKztcbiAgICB9XG5cbiAgICBpZiAoc29ydCkge1xuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydChmdW5jdGlvbiBzb3J0VW5pcXVlQXJyYXkoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhW2tleV0gPiBiW2tleV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xufVxuXG4vKipcbiAqIGdldCB0aGUgcHJlZml4ZWQgcHJvcGVydHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICogQHJldHVybnMge1N0cmluZ3xVbmRlZmluZWR9IHByZWZpeGVkXG4gKi9cbmZ1bmN0aW9uIHByZWZpeGVkKG9iaiwgcHJvcGVydHkpIHtcbiAgICB2YXIgcHJlZml4LCBwcm9wO1xuICAgIHZhciBjYW1lbFByb3AgPSBwcm9wZXJ0eVswXS50b1VwcGVyQ2FzZSgpICsgcHJvcGVydHkuc2xpY2UoMSk7XG5cbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBWRU5ET1JfUFJFRklYRVMubGVuZ3RoKSB7XG4gICAgICAgIHByZWZpeCA9IFZFTkRPUl9QUkVGSVhFU1tpXTtcbiAgICAgICAgcHJvcCA9IChwcmVmaXgpID8gcHJlZml4ICsgY2FtZWxQcm9wIDogcHJvcGVydHk7XG5cbiAgICAgICAgaWYgKHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvcDtcbiAgICAgICAgfVxuICAgICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogZ2V0IGEgdW5pcXVlIGlkXG4gKiBAcmV0dXJucyB7bnVtYmVyfSB1bmlxdWVJZFxuICovXG52YXIgX3VuaXF1ZUlkID0gMTtcbmZ1bmN0aW9uIHVuaXF1ZUlkKCkge1xuICAgIHJldHVybiBfdW5pcXVlSWQrKztcbn1cblxuLyoqXG4gKiBnZXQgdGhlIHdpbmRvdyBvYmplY3Qgb2YgYW4gZWxlbWVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0RvY3VtZW50Vmlld3xXaW5kb3d9XG4gKi9cbmZ1bmN0aW9uIGdldFdpbmRvd0ZvckVsZW1lbnQoZWxlbWVudCkge1xuICAgIHZhciBkb2MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQgfHwgZWxlbWVudDtcbiAgICByZXR1cm4gKGRvYy5kZWZhdWx0VmlldyB8fCBkb2MucGFyZW50V2luZG93IHx8IHdpbmRvdyk7XG59XG5cbnZhciBNT0JJTEVfUkVHRVggPSAvbW9iaWxlfHRhYmxldHxpcChhZHxob25lfG9kKXxhbmRyb2lkL2k7XG5cbnZhciBTVVBQT1JUX1RPVUNIID0gKCdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdyk7XG52YXIgU1VQUE9SVF9QT0lOVEVSX0VWRU5UUyA9IHByZWZpeGVkKHdpbmRvdywgJ1BvaW50ZXJFdmVudCcpICE9PSB1bmRlZmluZWQ7XG52YXIgU1VQUE9SVF9PTkxZX1RPVUNIID0gU1VQUE9SVF9UT1VDSCAmJiBNT0JJTEVfUkVHRVgudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcblxudmFyIElOUFVUX1RZUEVfVE9VQ0ggPSAndG91Y2gnO1xudmFyIElOUFVUX1RZUEVfUEVOID0gJ3Blbic7XG52YXIgSU5QVVRfVFlQRV9NT1VTRSA9ICdtb3VzZSc7XG52YXIgSU5QVVRfVFlQRV9LSU5FQ1QgPSAna2luZWN0JztcblxudmFyIENPTVBVVEVfSU5URVJWQUwgPSAyNTtcblxudmFyIElOUFVUX1NUQVJUID0gMTtcbnZhciBJTlBVVF9NT1ZFID0gMjtcbnZhciBJTlBVVF9FTkQgPSA0O1xudmFyIElOUFVUX0NBTkNFTCA9IDg7XG5cbnZhciBESVJFQ1RJT05fTk9ORSA9IDE7XG52YXIgRElSRUNUSU9OX0xFRlQgPSAyO1xudmFyIERJUkVDVElPTl9SSUdIVCA9IDQ7XG52YXIgRElSRUNUSU9OX1VQID0gODtcbnZhciBESVJFQ1RJT05fRE9XTiA9IDE2O1xuXG52YXIgRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fTEVGVCB8IERJUkVDVElPTl9SSUdIVDtcbnZhciBESVJFQ1RJT05fVkVSVElDQUwgPSBESVJFQ1RJT05fVVAgfCBESVJFQ1RJT05fRE9XTjtcbnZhciBESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUw7XG5cbnZhciBQUk9QU19YWSA9IFsneCcsICd5J107XG52YXIgUFJPUFNfQ0xJRU5UX1hZID0gWydjbGllbnRYJywgJ2NsaWVudFknXTtcblxuLyoqXG4gKiBjcmVhdGUgbmV3IGlucHV0IHR5cGUgbWFuYWdlclxuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0lucHV0fVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIElucHV0KG1hbmFnZXIsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMuZWxlbWVudCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgICB0aGlzLnRhcmdldCA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dFRhcmdldDtcblxuICAgIC8vIHNtYWxsZXIgd3JhcHBlciBhcm91bmQgdGhlIGhhbmRsZXIsIGZvciB0aGUgc2NvcGUgYW5kIHRoZSBlbmFibGVkIHN0YXRlIG9mIHRoZSBtYW5hZ2VyLFxuICAgIC8vIHNvIHdoZW4gZGlzYWJsZWQgdGhlIGlucHV0IGV2ZW50cyBhcmUgY29tcGxldGVseSBieXBhc3NlZC5cbiAgICB0aGlzLmRvbUhhbmRsZXIgPSBmdW5jdGlvbihldikge1xuICAgICAgICBpZiAoYm9vbE9yRm4obWFuYWdlci5vcHRpb25zLmVuYWJsZSwgW21hbmFnZXJdKSkge1xuICAgICAgICAgICAgc2VsZi5oYW5kbGVyKGV2KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmluaXQoKTtcblxufVxuXG5JbnB1dC5wcm90b3R5cGUgPSB7XG4gICAgLyoqXG4gICAgICogc2hvdWxkIGhhbmRsZSB0aGUgaW5wdXRFdmVudCBkYXRhIGFuZCB0cmlnZ2VyIHRoZSBjYWxsYmFja1xuICAgICAqIEB2aXJ0dWFsXG4gICAgICovXG4gICAgaGFuZGxlcjogZnVuY3Rpb24oKSB7IH0sXG5cbiAgICAvKipcbiAgICAgKiBiaW5kIHRoZSBldmVudHNcbiAgICAgKi9cbiAgICBpbml0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5ldkVsICYmIGFkZEV2ZW50TGlzdGVuZXJzKHRoaXMuZWxlbWVudCwgdGhpcy5ldkVsLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgICAgICB0aGlzLmV2VGFyZ2V0ICYmIGFkZEV2ZW50TGlzdGVuZXJzKHRoaXMudGFyZ2V0LCB0aGlzLmV2VGFyZ2V0LCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgICAgICB0aGlzLmV2V2luICYmIGFkZEV2ZW50TGlzdGVuZXJzKGdldFdpbmRvd0ZvckVsZW1lbnQodGhpcy5lbGVtZW50KSwgdGhpcy5ldldpbiwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogdW5iaW5kIHRoZSBldmVudHNcbiAgICAgKi9cbiAgICBkZXN0cm95OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5ldkVsICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRoaXMuZWxlbWVudCwgdGhpcy5ldkVsLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgICAgICB0aGlzLmV2VGFyZ2V0ICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRoaXMudGFyZ2V0LCB0aGlzLmV2VGFyZ2V0LCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgICAgICB0aGlzLmV2V2luICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKGdldFdpbmRvd0ZvckVsZW1lbnQodGhpcy5lbGVtZW50KSwgdGhpcy5ldldpbiwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIGNyZWF0ZSBuZXcgaW5wdXQgdHlwZSBtYW5hZ2VyXG4gKiBjYWxsZWQgYnkgdGhlIE1hbmFnZXIgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gKiBAcmV0dXJucyB7SW5wdXR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0SW5zdGFuY2UobWFuYWdlcikge1xuICAgIHZhciBUeXBlO1xuICAgIHZhciBpbnB1dENsYXNzID0gbWFuYWdlci5vcHRpb25zLmlucHV0Q2xhc3M7XG5cbiAgICBpZiAoaW5wdXRDbGFzcykge1xuICAgICAgICBUeXBlID0gaW5wdXRDbGFzcztcbiAgICB9IGVsc2UgaWYgKFNVUFBPUlRfUE9JTlRFUl9FVkVOVFMpIHtcbiAgICAgICAgVHlwZSA9IFBvaW50ZXJFdmVudElucHV0O1xuICAgIH0gZWxzZSBpZiAoU1VQUE9SVF9PTkxZX1RPVUNIKSB7XG4gICAgICAgIFR5cGUgPSBUb3VjaElucHV0O1xuICAgIH0gZWxzZSBpZiAoIVNVUFBPUlRfVE9VQ0gpIHtcbiAgICAgICAgVHlwZSA9IE1vdXNlSW5wdXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgVHlwZSA9IFRvdWNoTW91c2VJbnB1dDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyAoVHlwZSkobWFuYWdlciwgaW5wdXRIYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBoYW5kbGUgaW5wdXQgZXZlbnRzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFR5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5mdW5jdGlvbiBpbnB1dEhhbmRsZXIobWFuYWdlciwgZXZlbnRUeXBlLCBpbnB1dCkge1xuICAgIHZhciBwb2ludGVyc0xlbiA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aDtcbiAgICB2YXIgY2hhbmdlZFBvaW50ZXJzTGVuID0gaW5wdXQuY2hhbmdlZFBvaW50ZXJzLmxlbmd0aDtcbiAgICB2YXIgaXNGaXJzdCA9IChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiAocG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDApKTtcbiAgICB2YXIgaXNGaW5hbCA9IChldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiAocG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDApKTtcblxuICAgIGlucHV0LmlzRmlyc3QgPSAhIWlzRmlyc3Q7XG4gICAgaW5wdXQuaXNGaW5hbCA9ICEhaXNGaW5hbDtcblxuICAgIGlmIChpc0ZpcnN0KSB7XG4gICAgICAgIG1hbmFnZXIuc2Vzc2lvbiA9IHt9O1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSBldmVudCBpcyB0aGUgbm9ybWFsaXplZCB2YWx1ZSBvZiB0aGUgZG9tRXZlbnRzXG4gICAgLy8gbGlrZSAndG91Y2hzdGFydCwgbW91c2V1cCwgcG9pbnRlcmRvd24nXG4gICAgaW5wdXQuZXZlbnRUeXBlID0gZXZlbnRUeXBlO1xuXG4gICAgLy8gY29tcHV0ZSBzY2FsZSwgcm90YXRpb24gZXRjXG4gICAgY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCk7XG5cbiAgICAvLyBlbWl0IHNlY3JldCBldmVudFxuICAgIG1hbmFnZXIuZW1pdCgnaGFtbWVyLmlucHV0JywgaW5wdXQpO1xuXG4gICAgbWFuYWdlci5yZWNvZ25pemUoaW5wdXQpO1xuICAgIG1hbmFnZXIuc2Vzc2lvbi5wcmV2SW5wdXQgPSBpbnB1dDtcbn1cblxuLyoqXG4gKiBleHRlbmQgdGhlIGRhdGEgd2l0aCBzb21lIHVzYWJsZSBwcm9wZXJ0aWVzIGxpa2Ugc2NhbGUsIHJvdGF0ZSwgdmVsb2NpdHkgZXRjXG4gKiBAcGFyYW0ge09iamVjdH0gbWFuYWdlclxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVJbnB1dERhdGEobWFuYWdlciwgaW5wdXQpIHtcbiAgICB2YXIgc2Vzc2lvbiA9IG1hbmFnZXIuc2Vzc2lvbjtcbiAgICB2YXIgcG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycztcbiAgICB2YXIgcG9pbnRlcnNMZW5ndGggPSBwb2ludGVycy5sZW5ndGg7XG5cbiAgICAvLyBzdG9yZSB0aGUgZmlyc3QgaW5wdXQgdG8gY2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBhbmQgZGlyZWN0aW9uXG4gICAgaWYgKCFzZXNzaW9uLmZpcnN0SW5wdXQpIHtcbiAgICAgICAgc2Vzc2lvbi5maXJzdElucHV0ID0gc2ltcGxlQ2xvbmVJbnB1dERhdGEoaW5wdXQpO1xuICAgIH1cblxuICAgIC8vIHRvIGNvbXB1dGUgc2NhbGUgYW5kIHJvdGF0aW9uIHdlIG5lZWQgdG8gc3RvcmUgdGhlIG11bHRpcGxlIHRvdWNoZXNcbiAgICBpZiAocG9pbnRlcnNMZW5ndGggPiAxICYmICFzZXNzaW9uLmZpcnN0TXVsdGlwbGUpIHtcbiAgICAgICAgc2Vzc2lvbi5maXJzdE11bHRpcGxlID0gc2ltcGxlQ2xvbmVJbnB1dERhdGEoaW5wdXQpO1xuICAgIH0gZWxzZSBpZiAocG9pbnRlcnNMZW5ndGggPT09IDEpIHtcbiAgICAgICAgc2Vzc2lvbi5maXJzdE11bHRpcGxlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGZpcnN0SW5wdXQgPSBzZXNzaW9uLmZpcnN0SW5wdXQ7XG4gICAgdmFyIGZpcnN0TXVsdGlwbGUgPSBzZXNzaW9uLmZpcnN0TXVsdGlwbGU7XG4gICAgdmFyIG9mZnNldENlbnRlciA9IGZpcnN0TXVsdGlwbGUgPyBmaXJzdE11bHRpcGxlLmNlbnRlciA6IGZpcnN0SW5wdXQuY2VudGVyO1xuXG4gICAgdmFyIGNlbnRlciA9IGlucHV0LmNlbnRlciA9IGdldENlbnRlcihwb2ludGVycyk7XG4gICAgaW5wdXQudGltZVN0YW1wID0gbm93KCk7XG4gICAgaW5wdXQuZGVsdGFUaW1lID0gaW5wdXQudGltZVN0YW1wIC0gZmlyc3RJbnB1dC50aW1lU3RhbXA7XG5cbiAgICBpbnB1dC5hbmdsZSA9IGdldEFuZ2xlKG9mZnNldENlbnRlciwgY2VudGVyKTtcbiAgICBpbnB1dC5kaXN0YW5jZSA9IGdldERpc3RhbmNlKG9mZnNldENlbnRlciwgY2VudGVyKTtcblxuICAgIGNvbXB1dGVEZWx0YVhZKHNlc3Npb24sIGlucHV0KTtcbiAgICBpbnB1dC5vZmZzZXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oaW5wdXQuZGVsdGFYLCBpbnB1dC5kZWx0YVkpO1xuXG4gICAgdmFyIG92ZXJhbGxWZWxvY2l0eSA9IGdldFZlbG9jaXR5KGlucHV0LmRlbHRhVGltZSwgaW5wdXQuZGVsdGFYLCBpbnB1dC5kZWx0YVkpO1xuICAgIGlucHV0Lm92ZXJhbGxWZWxvY2l0eVggPSBvdmVyYWxsVmVsb2NpdHkueDtcbiAgICBpbnB1dC5vdmVyYWxsVmVsb2NpdHlZID0gb3ZlcmFsbFZlbG9jaXR5Lnk7XG4gICAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5ID0gKGFicyhvdmVyYWxsVmVsb2NpdHkueCkgPiBhYnMob3ZlcmFsbFZlbG9jaXR5LnkpKSA/IG92ZXJhbGxWZWxvY2l0eS54IDogb3ZlcmFsbFZlbG9jaXR5Lnk7XG5cbiAgICBpbnB1dC5zY2FsZSA9IGZpcnN0TXVsdGlwbGUgPyBnZXRTY2FsZShmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAxO1xuICAgIGlucHV0LnJvdGF0aW9uID0gZmlyc3RNdWx0aXBsZSA/IGdldFJvdGF0aW9uKGZpcnN0TXVsdGlwbGUucG9pbnRlcnMsIHBvaW50ZXJzKSA6IDA7XG5cbiAgICBpbnB1dC5tYXhQb2ludGVycyA9ICFzZXNzaW9uLnByZXZJbnB1dCA/IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA6ICgoaW5wdXQucG9pbnRlcnMubGVuZ3RoID5cbiAgICAgICAgc2Vzc2lvbi5wcmV2SW5wdXQubWF4UG9pbnRlcnMpID8gaW5wdXQucG9pbnRlcnMubGVuZ3RoIDogc2Vzc2lvbi5wcmV2SW5wdXQubWF4UG9pbnRlcnMpO1xuXG4gICAgY29tcHV0ZUludGVydmFsSW5wdXREYXRhKHNlc3Npb24sIGlucHV0KTtcblxuICAgIC8vIGZpbmQgdGhlIGNvcnJlY3QgdGFyZ2V0XG4gICAgdmFyIHRhcmdldCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgICBpZiAoaGFzUGFyZW50KGlucHV0LnNyY0V2ZW50LnRhcmdldCwgdGFyZ2V0KSkge1xuICAgICAgICB0YXJnZXQgPSBpbnB1dC5zcmNFdmVudC50YXJnZXQ7XG4gICAgfVxuICAgIGlucHV0LnRhcmdldCA9IHRhcmdldDtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZURlbHRhWFkoc2Vzc2lvbiwgaW5wdXQpIHtcbiAgICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyO1xuICAgIHZhciBvZmZzZXQgPSBzZXNzaW9uLm9mZnNldERlbHRhIHx8IHt9O1xuICAgIHZhciBwcmV2RGVsdGEgPSBzZXNzaW9uLnByZXZEZWx0YSB8fCB7fTtcbiAgICB2YXIgcHJldklucHV0ID0gc2Vzc2lvbi5wcmV2SW5wdXQgfHwge307XG5cbiAgICBpZiAoaW5wdXQuZXZlbnRUeXBlID09PSBJTlBVVF9TVEFSVCB8fCBwcmV2SW5wdXQuZXZlbnRUeXBlID09PSBJTlBVVF9FTkQpIHtcbiAgICAgICAgcHJldkRlbHRhID0gc2Vzc2lvbi5wcmV2RGVsdGEgPSB7XG4gICAgICAgICAgICB4OiBwcmV2SW5wdXQuZGVsdGFYIHx8IDAsXG4gICAgICAgICAgICB5OiBwcmV2SW5wdXQuZGVsdGFZIHx8IDBcbiAgICAgICAgfTtcblxuICAgICAgICBvZmZzZXQgPSBzZXNzaW9uLm9mZnNldERlbHRhID0ge1xuICAgICAgICAgICAgeDogY2VudGVyLngsXG4gICAgICAgICAgICB5OiBjZW50ZXIueVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlucHV0LmRlbHRhWCA9IHByZXZEZWx0YS54ICsgKGNlbnRlci54IC0gb2Zmc2V0LngpO1xuICAgIGlucHV0LmRlbHRhWSA9IHByZXZEZWx0YS55ICsgKGNlbnRlci55IC0gb2Zmc2V0LnkpO1xufVxuXG4vKipcbiAqIHZlbG9jaXR5IGlzIGNhbGN1bGF0ZWQgZXZlcnkgeCBtc1xuICogQHBhcmFtIHtPYmplY3R9IHNlc3Npb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5mdW5jdGlvbiBjb21wdXRlSW50ZXJ2YWxJbnB1dERhdGEoc2Vzc2lvbiwgaW5wdXQpIHtcbiAgICB2YXIgbGFzdCA9IHNlc3Npb24ubGFzdEludGVydmFsIHx8IGlucHV0LFxuICAgICAgICBkZWx0YVRpbWUgPSBpbnB1dC50aW1lU3RhbXAgLSBsYXN0LnRpbWVTdGFtcCxcbiAgICAgICAgdmVsb2NpdHksIHZlbG9jaXR5WCwgdmVsb2NpdHlZLCBkaXJlY3Rpb247XG5cbiAgICBpZiAoaW5wdXQuZXZlbnRUeXBlICE9IElOUFVUX0NBTkNFTCAmJiAoZGVsdGFUaW1lID4gQ09NUFVURV9JTlRFUlZBTCB8fCBsYXN0LnZlbG9jaXR5ID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIHZhciBkZWx0YVggPSBpbnB1dC5kZWx0YVggLSBsYXN0LmRlbHRhWDtcbiAgICAgICAgdmFyIGRlbHRhWSA9IGlucHV0LmRlbHRhWSAtIGxhc3QuZGVsdGFZO1xuXG4gICAgICAgIHZhciB2ID0gZ2V0VmVsb2NpdHkoZGVsdGFUaW1lLCBkZWx0YVgsIGRlbHRhWSk7XG4gICAgICAgIHZlbG9jaXR5WCA9IHYueDtcbiAgICAgICAgdmVsb2NpdHlZID0gdi55O1xuICAgICAgICB2ZWxvY2l0eSA9IChhYnModi54KSA+IGFicyh2LnkpKSA/IHYueCA6IHYueTtcbiAgICAgICAgZGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKGRlbHRhWCwgZGVsdGFZKTtcblxuICAgICAgICBzZXNzaW9uLmxhc3RJbnRlcnZhbCA9IGlucHV0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHVzZSBsYXRlc3QgdmVsb2NpdHkgaW5mbyBpZiBpdCBkb2Vzbid0IG92ZXJ0YWtlIGEgbWluaW11bSBwZXJpb2RcbiAgICAgICAgdmVsb2NpdHkgPSBsYXN0LnZlbG9jaXR5O1xuICAgICAgICB2ZWxvY2l0eVggPSBsYXN0LnZlbG9jaXR5WDtcbiAgICAgICAgdmVsb2NpdHlZID0gbGFzdC52ZWxvY2l0eVk7XG4gICAgICAgIGRpcmVjdGlvbiA9IGxhc3QuZGlyZWN0aW9uO1xuICAgIH1cblxuICAgIGlucHV0LnZlbG9jaXR5ID0gdmVsb2NpdHk7XG4gICAgaW5wdXQudmVsb2NpdHlYID0gdmVsb2NpdHlYO1xuICAgIGlucHV0LnZlbG9jaXR5WSA9IHZlbG9jaXR5WTtcbiAgICBpbnB1dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG59XG5cbi8qKlxuICogY3JlYXRlIGEgc2ltcGxlIGNsb25lIGZyb20gdGhlIGlucHV0IHVzZWQgZm9yIHN0b3JhZ2Ugb2YgZmlyc3RJbnB1dCBhbmQgZmlyc3RNdWx0aXBsZVxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBjbG9uZWRJbnB1dERhdGFcbiAqL1xuZnVuY3Rpb24gc2ltcGxlQ2xvbmVJbnB1dERhdGEoaW5wdXQpIHtcbiAgICAvLyBtYWtlIGEgc2ltcGxlIGNvcHkgb2YgdGhlIHBvaW50ZXJzIGJlY2F1c2Ugd2Ugd2lsbCBnZXQgYSByZWZlcmVuY2UgaWYgd2UgZG9uJ3RcbiAgICAvLyB3ZSBvbmx5IG5lZWQgY2xpZW50WFkgZm9yIHRoZSBjYWxjdWxhdGlvbnNcbiAgICB2YXIgcG9pbnRlcnMgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBpbnB1dC5wb2ludGVycy5sZW5ndGgpIHtcbiAgICAgICAgcG9pbnRlcnNbaV0gPSB7XG4gICAgICAgICAgICBjbGllbnRYOiByb3VuZChpbnB1dC5wb2ludGVyc1tpXS5jbGllbnRYKSxcbiAgICAgICAgICAgIGNsaWVudFk6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFkpXG4gICAgICAgIH07XG4gICAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0aW1lU3RhbXA6IG5vdygpLFxuICAgICAgICBwb2ludGVyczogcG9pbnRlcnMsXG4gICAgICAgIGNlbnRlcjogZ2V0Q2VudGVyKHBvaW50ZXJzKSxcbiAgICAgICAgZGVsdGFYOiBpbnB1dC5kZWx0YVgsXG4gICAgICAgIGRlbHRhWTogaW5wdXQuZGVsdGFZXG4gICAgfTtcbn1cblxuLyoqXG4gKiBnZXQgdGhlIGNlbnRlciBvZiBhbGwgdGhlIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBwb2ludGVyc1xuICogQHJldHVybiB7T2JqZWN0fSBjZW50ZXIgY29udGFpbnMgYHhgIGFuZCBgeWAgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBnZXRDZW50ZXIocG9pbnRlcnMpIHtcbiAgICB2YXIgcG9pbnRlcnNMZW5ndGggPSBwb2ludGVycy5sZW5ndGg7XG5cbiAgICAvLyBubyBuZWVkIHRvIGxvb3Agd2hlbiBvbmx5IG9uZSB0b3VjaFxuICAgIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogcm91bmQocG9pbnRlcnNbMF0uY2xpZW50WCksXG4gICAgICAgICAgICB5OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRZKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciB4ID0gMCwgeSA9IDAsIGkgPSAwO1xuICAgIHdoaWxlIChpIDwgcG9pbnRlcnNMZW5ndGgpIHtcbiAgICAgICAgeCArPSBwb2ludGVyc1tpXS5jbGllbnRYO1xuICAgICAgICB5ICs9IHBvaW50ZXJzW2ldLmNsaWVudFk7XG4gICAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB4OiByb3VuZCh4IC8gcG9pbnRlcnNMZW5ndGgpLFxuICAgICAgICB5OiByb3VuZCh5IC8gcG9pbnRlcnNMZW5ndGgpXG4gICAgfTtcbn1cblxuLyoqXG4gKiBjYWxjdWxhdGUgdGhlIHZlbG9jaXR5IGJldHdlZW4gdHdvIHBvaW50cy4gdW5pdCBpcyBpbiBweCBwZXIgbXMuXG4gKiBAcGFyYW0ge051bWJlcn0gZGVsdGFUaW1lXG4gKiBAcGFyYW0ge051bWJlcn0geFxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge09iamVjdH0gdmVsb2NpdHkgYHhgIGFuZCBgeWBcbiAqL1xuZnVuY3Rpb24gZ2V0VmVsb2NpdHkoZGVsdGFUaW1lLCB4LCB5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogeCAvIGRlbHRhVGltZSB8fCAwLFxuICAgICAgICB5OiB5IC8gZGVsdGFUaW1lIHx8IDBcbiAgICB9O1xufVxuXG4vKipcbiAqIGdldCB0aGUgZGlyZWN0aW9uIGJldHdlZW4gdHdvIHBvaW50c1xuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpcmVjdGlvblxuICovXG5mdW5jdGlvbiBnZXREaXJlY3Rpb24oeCwgeSkge1xuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAgIHJldHVybiBESVJFQ1RJT05fTk9ORTtcbiAgICB9XG5cbiAgICBpZiAoYWJzKHgpID49IGFicyh5KSkge1xuICAgICAgICByZXR1cm4geCA8IDAgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgICB9XG4gICAgcmV0dXJuIHkgPCAwID8gRElSRUNUSU9OX1VQIDogRElSRUNUSU9OX0RPV047XG59XG5cbi8qKlxuICogY2FsY3VsYXRlIHRoZSBhYnNvbHV0ZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwMSB7eCwgeX1cbiAqIEBwYXJhbSB7T2JqZWN0fSBwMiB7eCwgeX1cbiAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wc10gY29udGFpbmluZyB4IGFuZCB5IGtleXNcbiAqIEByZXR1cm4ge051bWJlcn0gZGlzdGFuY2VcbiAqL1xuZnVuY3Rpb24gZ2V0RGlzdGFuY2UocDEsIHAyLCBwcm9wcykge1xuICAgIGlmICghcHJvcHMpIHtcbiAgICAgICAgcHJvcHMgPSBQUk9QU19YWTtcbiAgICB9XG4gICAgdmFyIHggPSBwMltwcm9wc1swXV0gLSBwMVtwcm9wc1swXV0sXG4gICAgICAgIHkgPSBwMltwcm9wc1sxXV0gLSBwMVtwcm9wc1sxXV07XG5cbiAgICByZXR1cm4gTWF0aC5zcXJ0KCh4ICogeCkgKyAoeSAqIHkpKTtcbn1cblxuLyoqXG4gKiBjYWxjdWxhdGUgdGhlIGFuZ2xlIGJldHdlZW4gdHdvIGNvb3JkaW5hdGVzXG4gKiBAcGFyYW0ge09iamVjdH0gcDFcbiAqIEBwYXJhbSB7T2JqZWN0fSBwMlxuICogQHBhcmFtIHtBcnJheX0gW3Byb3BzXSBjb250YWluaW5nIHggYW5kIHkga2V5c1xuICogQHJldHVybiB7TnVtYmVyfSBhbmdsZVxuICovXG5mdW5jdGlvbiBnZXRBbmdsZShwMSwgcDIsIHByb3BzKSB7XG4gICAgaWYgKCFwcm9wcykge1xuICAgICAgICBwcm9wcyA9IFBST1BTX1hZO1xuICAgIH1cbiAgICB2YXIgeCA9IHAyW3Byb3BzWzBdXSAtIHAxW3Byb3BzWzBdXSxcbiAgICAgICAgeSA9IHAyW3Byb3BzWzFdXSAtIHAxW3Byb3BzWzFdXTtcbiAgICByZXR1cm4gTWF0aC5hdGFuMih5LCB4KSAqIDE4MCAvIE1hdGguUEk7XG59XG5cbi8qKlxuICogY2FsY3VsYXRlIHRoZSByb3RhdGlvbiBkZWdyZWVzIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydCBhcnJheSBvZiBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gZW5kIGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHJvdGF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldFJvdGF0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gZ2V0QW5nbGUoZW5kWzFdLCBlbmRbMF0sIFBST1BTX0NMSUVOVF9YWSkgKyBnZXRBbmdsZShzdGFydFsxXSwgc3RhcnRbMF0sIFBST1BTX0NMSUVOVF9YWSk7XG59XG5cbi8qKlxuICogY2FsY3VsYXRlIHRoZSBzY2FsZSBmYWN0b3IgYmV0d2VlbiB0d28gcG9pbnRlcnNldHNcbiAqIG5vIHNjYWxlIGlzIDEsIGFuZCBnb2VzIGRvd24gdG8gMCB3aGVuIHBpbmNoZWQgdG9nZXRoZXIsIGFuZCBiaWdnZXIgd2hlbiBwaW5jaGVkIG91dFxuICogQHBhcmFtIHtBcnJheX0gc3RhcnQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEBwYXJhbSB7QXJyYXl9IGVuZCBhcnJheSBvZiBwb2ludGVyc1xuICogQHJldHVybiB7TnVtYmVyfSBzY2FsZVxuICovXG5mdW5jdGlvbiBnZXRTY2FsZShzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIGdldERpc3RhbmNlKGVuZFswXSwgZW5kWzFdLCBQUk9QU19DTElFTlRfWFkpIC8gZ2V0RGlzdGFuY2Uoc3RhcnRbMF0sIHN0YXJ0WzFdLCBQUk9QU19DTElFTlRfWFkpO1xufVxuXG52YXIgTU9VU0VfSU5QVVRfTUFQID0ge1xuICAgIG1vdXNlZG93bjogSU5QVVRfU1RBUlQsXG4gICAgbW91c2Vtb3ZlOiBJTlBVVF9NT1ZFLFxuICAgIG1vdXNldXA6IElOUFVUX0VORFxufTtcblxudmFyIE1PVVNFX0VMRU1FTlRfRVZFTlRTID0gJ21vdXNlZG93bic7XG52YXIgTU9VU0VfV0lORE9XX0VWRU5UUyA9ICdtb3VzZW1vdmUgbW91c2V1cCc7XG5cbi8qKlxuICogTW91c2UgZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cbmZ1bmN0aW9uIE1vdXNlSW5wdXQoKSB7XG4gICAgdGhpcy5ldkVsID0gTU9VU0VfRUxFTUVOVF9FVkVOVFM7XG4gICAgdGhpcy5ldldpbiA9IE1PVVNFX1dJTkRPV19FVkVOVFM7XG5cbiAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTsgLy8gbW91c2Vkb3duIHN0YXRlXG5cbiAgICBJbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5pbmhlcml0KE1vdXNlSW5wdXQsIElucHV0LCB7XG4gICAgLyoqXG4gICAgICogaGFuZGxlIG1vdXNlIGV2ZW50c1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgICAqL1xuICAgIGhhbmRsZXI6IGZ1bmN0aW9uIE1FaGFuZGxlcihldikge1xuICAgICAgICB2YXIgZXZlbnRUeXBlID0gTU9VU0VfSU5QVVRfTUFQW2V2LnR5cGVdO1xuXG4gICAgICAgIC8vIG9uIHN0YXJ0IHdlIHdhbnQgdG8gaGF2ZSB0aGUgbGVmdCBtb3VzZSBidXR0b24gZG93blxuICAgICAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgZXYuYnV0dG9uID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByZXNzZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX01PVkUgJiYgZXYud2hpY2ggIT09IDEpIHtcbiAgICAgICAgICAgIGV2ZW50VHlwZSA9IElOUFVUX0VORDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1vdXNlIG11c3QgYmUgZG93blxuICAgICAgICBpZiAoIXRoaXMucHJlc3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgICAgICAgdGhpcy5wcmVzc2VkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgZXZlbnRUeXBlLCB7XG4gICAgICAgICAgICBwb2ludGVyczogW2V2XSxcbiAgICAgICAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgICAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX01PVVNFLFxuICAgICAgICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgICAgIH0pO1xuICAgIH1cbn0pO1xuXG52YXIgUE9JTlRFUl9JTlBVVF9NQVAgPSB7XG4gICAgcG9pbnRlcmRvd246IElOUFVUX1NUQVJULFxuICAgIHBvaW50ZXJtb3ZlOiBJTlBVVF9NT1ZFLFxuICAgIHBvaW50ZXJ1cDogSU5QVVRfRU5ELFxuICAgIHBvaW50ZXJjYW5jZWw6IElOUFVUX0NBTkNFTCxcbiAgICBwb2ludGVyb3V0OiBJTlBVVF9DQU5DRUxcbn07XG5cbi8vIGluIElFMTAgdGhlIHBvaW50ZXIgdHlwZXMgaXMgZGVmaW5lZCBhcyBhbiBlbnVtXG52YXIgSUUxMF9QT0lOVEVSX1RZUEVfRU5VTSA9IHtcbiAgICAyOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgIDM6IElOUFVUX1RZUEVfUEVOLFxuICAgIDQ6IElOUFVUX1RZUEVfTU9VU0UsXG4gICAgNTogSU5QVVRfVFlQRV9LSU5FQ1QgLy8gc2VlIGh0dHBzOi8vdHdpdHRlci5jb20vamFjb2Jyb3NzaS9zdGF0dXMvNDgwNTk2NDM4NDg5ODkwODE2XG59O1xuXG52YXIgUE9JTlRFUl9FTEVNRU5UX0VWRU5UUyA9ICdwb2ludGVyZG93bic7XG52YXIgUE9JTlRFUl9XSU5ET1dfRVZFTlRTID0gJ3BvaW50ZXJtb3ZlIHBvaW50ZXJ1cCBwb2ludGVyY2FuY2VsJztcblxuLy8gSUUxMCBoYXMgcHJlZml4ZWQgc3VwcG9ydCwgYW5kIGNhc2Utc2Vuc2l0aXZlXG5pZiAod2luZG93Lk1TUG9pbnRlckV2ZW50ICYmICF3aW5kb3cuUG9pbnRlckV2ZW50KSB7XG4gICAgUE9JTlRFUl9FTEVNRU5UX0VWRU5UUyA9ICdNU1BvaW50ZXJEb3duJztcbiAgICBQT0lOVEVSX1dJTkRPV19FVkVOVFMgPSAnTVNQb2ludGVyTW92ZSBNU1BvaW50ZXJVcCBNU1BvaW50ZXJDYW5jZWwnO1xufVxuXG4vKipcbiAqIFBvaW50ZXIgZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cbmZ1bmN0aW9uIFBvaW50ZXJFdmVudElucHV0KCkge1xuICAgIHRoaXMuZXZFbCA9IFBPSU5URVJfRUxFTUVOVF9FVkVOVFM7XG4gICAgdGhpcy5ldldpbiA9IFBPSU5URVJfV0lORE9XX0VWRU5UUztcblxuICAgIElucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnN0b3JlID0gKHRoaXMubWFuYWdlci5zZXNzaW9uLnBvaW50ZXJFdmVudHMgPSBbXSk7XG59XG5cbmluaGVyaXQoUG9pbnRlckV2ZW50SW5wdXQsIElucHV0LCB7XG4gICAgLyoqXG4gICAgICogaGFuZGxlIG1vdXNlIGV2ZW50c1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgICAqL1xuICAgIGhhbmRsZXI6IGZ1bmN0aW9uIFBFaGFuZGxlcihldikge1xuICAgICAgICB2YXIgc3RvcmUgPSB0aGlzLnN0b3JlO1xuICAgICAgICB2YXIgcmVtb3ZlUG9pbnRlciA9IGZhbHNlO1xuXG4gICAgICAgIHZhciBldmVudFR5cGVOb3JtYWxpemVkID0gZXYudHlwZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ21zJywgJycpO1xuICAgICAgICB2YXIgZXZlbnRUeXBlID0gUE9JTlRFUl9JTlBVVF9NQVBbZXZlbnRUeXBlTm9ybWFsaXplZF07XG4gICAgICAgIHZhciBwb2ludGVyVHlwZSA9IElFMTBfUE9JTlRFUl9UWVBFX0VOVU1bZXYucG9pbnRlclR5cGVdIHx8IGV2LnBvaW50ZXJUeXBlO1xuXG4gICAgICAgIHZhciBpc1RvdWNoID0gKHBvaW50ZXJUeXBlID09IElOUFVUX1RZUEVfVE9VQ0gpO1xuXG4gICAgICAgIC8vIGdldCBpbmRleCBvZiB0aGUgZXZlbnQgaW4gdGhlIHN0b3JlXG4gICAgICAgIHZhciBzdG9yZUluZGV4ID0gaW5BcnJheShzdG9yZSwgZXYucG9pbnRlcklkLCAncG9pbnRlcklkJyk7XG5cbiAgICAgICAgLy8gc3RhcnQgYW5kIG1vdXNlIG11c3QgYmUgZG93blxuICAgICAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgKGV2LmJ1dHRvbiA9PT0gMCB8fCBpc1RvdWNoKSkge1xuICAgICAgICAgICAgaWYgKHN0b3JlSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUucHVzaChldik7XG4gICAgICAgICAgICAgICAgc3RvcmVJbmRleCA9IHN0b3JlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICAgICAgICAgIHJlbW92ZVBvaW50ZXIgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaXQgbm90IGZvdW5kLCBzbyB0aGUgcG9pbnRlciBoYXNuJ3QgYmVlbiBkb3duIChzbyBpdCdzIHByb2JhYmx5IGEgaG92ZXIpXG4gICAgICAgIGlmIChzdG9yZUluZGV4IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSBldmVudCBpbiB0aGUgc3RvcmVcbiAgICAgICAgc3RvcmVbc3RvcmVJbmRleF0gPSBldjtcblxuICAgICAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgZXZlbnRUeXBlLCB7XG4gICAgICAgICAgICBwb2ludGVyczogc3RvcmUsXG4gICAgICAgICAgICBjaGFuZ2VkUG9pbnRlcnM6IFtldl0sXG4gICAgICAgICAgICBwb2ludGVyVHlwZTogcG9pbnRlclR5cGUsXG4gICAgICAgICAgICBzcmNFdmVudDogZXZcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlbW92ZVBvaW50ZXIpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBmcm9tIHRoZSBzdG9yZVxuICAgICAgICAgICAgc3RvcmUuc3BsaWNlKHN0b3JlSW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbnZhciBTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQID0ge1xuICAgIHRvdWNoc3RhcnQ6IElOUFVUX1NUQVJULFxuICAgIHRvdWNobW92ZTogSU5QVVRfTU9WRSxcbiAgICB0b3VjaGVuZDogSU5QVVRfRU5ELFxuICAgIHRvdWNoY2FuY2VsOiBJTlBVVF9DQU5DRUxcbn07XG5cbnZhciBTSU5HTEVfVE9VQ0hfVEFSR0VUX0VWRU5UUyA9ICd0b3VjaHN0YXJ0JztcbnZhciBTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUyA9ICd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCc7XG5cbi8qKlxuICogVG91Y2ggZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cbmZ1bmN0aW9uIFNpbmdsZVRvdWNoSW5wdXQoKSB7XG4gICAgdGhpcy5ldlRhcmdldCA9IFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTO1xuICAgIHRoaXMuZXZXaW4gPSBTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUztcbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcblxuICAgIElucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmluaGVyaXQoU2luZ2xlVG91Y2hJbnB1dCwgSW5wdXQsIHtcbiAgICBoYW5kbGVyOiBmdW5jdGlvbiBURWhhbmRsZXIoZXYpIHtcbiAgICAgICAgdmFyIHR5cGUgPSBTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdO1xuXG4gICAgICAgIC8vIHNob3VsZCB3ZSBoYW5kbGUgdGhlIHRvdWNoIGV2ZW50cz9cbiAgICAgICAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0b3VjaGVzID0gbm9ybWFsaXplU2luZ2xlVG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTtcblxuICAgICAgICAvLyB3aGVuIGRvbmUsIHJlc2V0IHRoZSBzdGFydGVkIHN0YXRlXG4gICAgICAgIGlmICh0eXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgdG91Y2hlc1swXS5sZW5ndGggLSB0b3VjaGVzWzFdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgdHlwZSwge1xuICAgICAgICAgICAgcG9pbnRlcnM6IHRvdWNoZXNbMF0sXG4gICAgICAgICAgICBjaGFuZ2VkUG9pbnRlcnM6IHRvdWNoZXNbMV0sXG4gICAgICAgICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9UT1VDSCxcbiAgICAgICAgICAgIHNyY0V2ZW50OiBldlxuICAgICAgICB9KTtcbiAgICB9XG59KTtcblxuLyoqXG4gKiBAdGhpcyB7VG91Y2hJbnB1dH1cbiAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICogQHBhcmFtIHtOdW1iZXJ9IHR5cGUgZmxhZ1xuICogQHJldHVybnMge3VuZGVmaW5lZHxBcnJheX0gW2FsbCwgY2hhbmdlZF1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplU2luZ2xlVG91Y2hlcyhldiwgdHlwZSkge1xuICAgIHZhciBhbGwgPSB0b0FycmF5KGV2LnRvdWNoZXMpO1xuICAgIHZhciBjaGFuZ2VkID0gdG9BcnJheShldi5jaGFuZ2VkVG91Y2hlcyk7XG5cbiAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICAgIGFsbCA9IHVuaXF1ZUFycmF5KGFsbC5jb25jYXQoY2hhbmdlZCksICdpZGVudGlmaWVyJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFthbGwsIGNoYW5nZWRdO1xufVxuXG52YXIgVE9VQ0hfSU5QVVRfTUFQID0ge1xuICAgIHRvdWNoc3RhcnQ6IElOUFVUX1NUQVJULFxuICAgIHRvdWNobW92ZTogSU5QVVRfTU9WRSxcbiAgICB0b3VjaGVuZDogSU5QVVRfRU5ELFxuICAgIHRvdWNoY2FuY2VsOiBJTlBVVF9DQU5DRUxcbn07XG5cbnZhciBUT1VDSF9UQVJHRVRfRVZFTlRTID0gJ3RvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsJztcblxuLyoqXG4gKiBNdWx0aS11c2VyIHRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5mdW5jdGlvbiBUb3VjaElucHV0KCkge1xuICAgIHRoaXMuZXZUYXJnZXQgPSBUT1VDSF9UQVJHRVRfRVZFTlRTO1xuICAgIHRoaXMudGFyZ2V0SWRzID0ge307XG5cbiAgICBJbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5pbmhlcml0KFRvdWNoSW5wdXQsIElucHV0LCB7XG4gICAgaGFuZGxlcjogZnVuY3Rpb24gTVRFaGFuZGxlcihldikge1xuICAgICAgICB2YXIgdHlwZSA9IFRPVUNIX0lOUFVUX01BUFtldi50eXBlXTtcbiAgICAgICAgdmFyIHRvdWNoZXMgPSBnZXRUb3VjaGVzLmNhbGwodGhpcywgZXYsIHR5cGUpO1xuICAgICAgICBpZiAoIXRvdWNoZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICAgICAgICBwb2ludGVyczogdG91Y2hlc1swXSxcbiAgICAgICAgICAgIGNoYW5nZWRQb2ludGVyczogdG91Y2hlc1sxXSxcbiAgICAgICAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgICAgIH0pO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIEB0aGlzIHtUb3VjaElucHV0fVxuICogQHBhcmFtIHtPYmplY3R9IGV2XG4gKiBAcGFyYW0ge051bWJlcn0gdHlwZSBmbGFnXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfEFycmF5fSBbYWxsLCBjaGFuZ2VkXVxuICovXG5mdW5jdGlvbiBnZXRUb3VjaGVzKGV2LCB0eXBlKSB7XG4gICAgdmFyIGFsbFRvdWNoZXMgPSB0b0FycmF5KGV2LnRvdWNoZXMpO1xuICAgIHZhciB0YXJnZXRJZHMgPSB0aGlzLnRhcmdldElkcztcblxuICAgIC8vIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgdG91Y2gsIHRoZSBwcm9jZXNzIGNhbiBiZSBzaW1wbGlmaWVkXG4gICAgaWYgKHR5cGUgJiAoSU5QVVRfU1RBUlQgfCBJTlBVVF9NT1ZFKSAmJiBhbGxUb3VjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB0YXJnZXRJZHNbYWxsVG91Y2hlc1swXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgICAgIHJldHVybiBbYWxsVG91Y2hlcywgYWxsVG91Y2hlc107XG4gICAgfVxuXG4gICAgdmFyIGksXG4gICAgICAgIHRhcmdldFRvdWNoZXMsXG4gICAgICAgIGNoYW5nZWRUb3VjaGVzID0gdG9BcnJheShldi5jaGFuZ2VkVG91Y2hlcyksXG4gICAgICAgIGNoYW5nZWRUYXJnZXRUb3VjaGVzID0gW10sXG4gICAgICAgIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xuXG4gICAgLy8gZ2V0IHRhcmdldCB0b3VjaGVzIGZyb20gdG91Y2hlc1xuICAgIHRhcmdldFRvdWNoZXMgPSBhbGxUb3VjaGVzLmZpbHRlcihmdW5jdGlvbih0b3VjaCkge1xuICAgICAgICByZXR1cm4gaGFzUGFyZW50KHRvdWNoLnRhcmdldCwgdGFyZ2V0KTtcbiAgICB9KTtcblxuICAgIC8vIGNvbGxlY3QgdG91Y2hlc1xuICAgIGlmICh0eXBlID09PSBJTlBVVF9TVEFSVCkge1xuICAgICAgICBpID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPCB0YXJnZXRUb3VjaGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGFyZ2V0SWRzW3RhcmdldFRvdWNoZXNbaV0uaWRlbnRpZmllcl0gPSB0cnVlO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZmlsdGVyIGNoYW5nZWQgdG91Y2hlcyB0byBvbmx5IGNvbnRhaW4gdG91Y2hlcyB0aGF0IGV4aXN0IGluIHRoZSBjb2xsZWN0ZWQgdGFyZ2V0IGlkc1xuICAgIGkgPSAwO1xuICAgIHdoaWxlIChpIDwgY2hhbmdlZFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0YXJnZXRJZHNbY2hhbmdlZFRvdWNoZXNbaV0uaWRlbnRpZmllcl0pIHtcbiAgICAgICAgICAgIGNoYW5nZWRUYXJnZXRUb3VjaGVzLnB1c2goY2hhbmdlZFRvdWNoZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYW51cCByZW1vdmVkIHRvdWNoZXNcbiAgICAgICAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgICAgICAgICAgZGVsZXRlIHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXTtcbiAgICAgICAgfVxuICAgICAgICBpKys7XG4gICAgfVxuXG4gICAgaWYgKCFjaGFuZ2VkVGFyZ2V0VG91Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBbXG4gICAgICAgIC8vIG1lcmdlIHRhcmdldFRvdWNoZXMgd2l0aCBjaGFuZ2VkVGFyZ2V0VG91Y2hlcyBzbyBpdCBjb250YWlucyBBTEwgdG91Y2hlcywgaW5jbHVkaW5nICdlbmQnIGFuZCAnY2FuY2VsJ1xuICAgICAgICB1bmlxdWVBcnJheSh0YXJnZXRUb3VjaGVzLmNvbmNhdChjaGFuZ2VkVGFyZ2V0VG91Y2hlcyksICdpZGVudGlmaWVyJywgdHJ1ZSksXG4gICAgICAgIGNoYW5nZWRUYXJnZXRUb3VjaGVzXG4gICAgXTtcbn1cblxuLyoqXG4gKiBDb21iaW5lZCB0b3VjaCBhbmQgbW91c2UgaW5wdXRcbiAqXG4gKiBUb3VjaCBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgdGhlbiBtb3VzZSwgYW5kIHdoaWxlIHRvdWNoaW5nIG5vIG1vdXNlIGV2ZW50cyBhcmUgYWxsb3dlZC5cbiAqIFRoaXMgYmVjYXVzZSB0b3VjaCBkZXZpY2VzIGFsc28gZW1pdCBtb3VzZSBldmVudHMgd2hpbGUgZG9pbmcgYSB0b3VjaC5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIERFRFVQX1RJTUVPVVQgPSAyNTAwO1xudmFyIERFRFVQX0RJU1RBTkNFID0gMjU7XG5cbmZ1bmN0aW9uIFRvdWNoTW91c2VJbnB1dCgpIHtcbiAgICBJbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdmFyIGhhbmRsZXIgPSBiaW5kRm4odGhpcy5oYW5kbGVyLCB0aGlzKTtcbiAgICB0aGlzLnRvdWNoID0gbmV3IFRvdWNoSW5wdXQodGhpcy5tYW5hZ2VyLCBoYW5kbGVyKTtcbiAgICB0aGlzLm1vdXNlID0gbmV3IE1vdXNlSW5wdXQodGhpcy5tYW5hZ2VyLCBoYW5kbGVyKTtcblxuICAgIHRoaXMucHJpbWFyeVRvdWNoID0gbnVsbDtcbiAgICB0aGlzLmxhc3RUb3VjaGVzID0gW107XG59XG5cbmluaGVyaXQoVG91Y2hNb3VzZUlucHV0LCBJbnB1dCwge1xuICAgIC8qKlxuICAgICAqIGhhbmRsZSBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzXG4gICAgICogQHBhcmFtIHtIYW1tZXJ9IG1hbmFnZXJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXRFdmVudFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICAgKi9cbiAgICBoYW5kbGVyOiBmdW5jdGlvbiBUTUVoYW5kbGVyKG1hbmFnZXIsIGlucHV0RXZlbnQsIGlucHV0RGF0YSkge1xuICAgICAgICB2YXIgaXNUb3VjaCA9IChpbnB1dERhdGEucG9pbnRlclR5cGUgPT0gSU5QVVRfVFlQRV9UT1VDSCksXG4gICAgICAgICAgICBpc01vdXNlID0gKGlucHV0RGF0YS5wb2ludGVyVHlwZSA9PSBJTlBVVF9UWVBFX01PVVNFKTtcblxuICAgICAgICBpZiAoaXNNb3VzZSAmJiBpbnB1dERhdGEuc291cmNlQ2FwYWJpbGl0aWVzICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMuZmlyZXNUb3VjaEV2ZW50cykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2hlbiB3ZSdyZSBpbiBhIHRvdWNoIGV2ZW50LCByZWNvcmQgdG91Y2hlcyB0byAgZGUtZHVwZSBzeW50aGV0aWMgbW91c2UgZXZlbnRcbiAgICAgICAgaWYgKGlzVG91Y2gpIHtcbiAgICAgICAgICAgIHJlY29yZFRvdWNoZXMuY2FsbCh0aGlzLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTW91c2UgJiYgaXNTeW50aGV0aWNFdmVudC5jYWxsKHRoaXMsIGlucHV0RGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbGJhY2sobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlIHRoZSBldmVudCBsaXN0ZW5lcnNcbiAgICAgKi9cbiAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLnRvdWNoLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5tb3VzZS5kZXN0cm95KCk7XG4gICAgfVxufSk7XG5cbmZ1bmN0aW9uIHJlY29yZFRvdWNoZXMoZXZlbnRUeXBlLCBldmVudERhdGEpIHtcbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICAgICAgdGhpcy5wcmltYXJ5VG91Y2ggPSBldmVudERhdGEuY2hhbmdlZFBvaW50ZXJzWzBdLmlkZW50aWZpZXI7XG4gICAgICAgIHNldExhc3RUb3VjaC5jYWxsKHRoaXMsIGV2ZW50RGF0YSk7XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgICAgICBzZXRMYXN0VG91Y2guY2FsbCh0aGlzLCBldmVudERhdGEpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2V0TGFzdFRvdWNoKGV2ZW50RGF0YSkge1xuICAgIHZhciB0b3VjaCA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnNbMF07XG5cbiAgICBpZiAodG91Y2guaWRlbnRpZmllciA9PT0gdGhpcy5wcmltYXJ5VG91Y2gpIHtcbiAgICAgICAgdmFyIGxhc3RUb3VjaCA9IHt4OiB0b3VjaC5jbGllbnRYLCB5OiB0b3VjaC5jbGllbnRZfTtcbiAgICAgICAgdGhpcy5sYXN0VG91Y2hlcy5wdXNoKGxhc3RUb3VjaCk7XG4gICAgICAgIHZhciBsdHMgPSB0aGlzLmxhc3RUb3VjaGVzO1xuICAgICAgICB2YXIgcmVtb3ZlTGFzdFRvdWNoID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgaSA9IGx0cy5pbmRleE9mKGxhc3RUb3VjaCk7XG4gICAgICAgICAgICBpZiAoaSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgbHRzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc2V0VGltZW91dChyZW1vdmVMYXN0VG91Y2gsIERFRFVQX1RJTUVPVVQpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNTeW50aGV0aWNFdmVudChldmVudERhdGEpIHtcbiAgICB2YXIgeCA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRYLCB5ID0gZXZlbnREYXRhLnNyY0V2ZW50LmNsaWVudFk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxhc3RUb3VjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB0ID0gdGhpcy5sYXN0VG91Y2hlc1tpXTtcbiAgICAgICAgdmFyIGR4ID0gTWF0aC5hYnMoeCAtIHQueCksIGR5ID0gTWF0aC5hYnMoeSAtIHQueSk7XG4gICAgICAgIGlmIChkeCA8PSBERURVUF9ESVNUQU5DRSAmJiBkeSA8PSBERURVUF9ESVNUQU5DRSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgUFJFRklYRURfVE9VQ0hfQUNUSU9OID0gcHJlZml4ZWQoVEVTVF9FTEVNRU5ULnN0eWxlLCAndG91Y2hBY3Rpb24nKTtcbnZhciBOQVRJVkVfVE9VQ0hfQUNUSU9OID0gUFJFRklYRURfVE9VQ0hfQUNUSU9OICE9PSB1bmRlZmluZWQ7XG5cbi8vIG1hZ2ljYWwgdG91Y2hBY3Rpb24gdmFsdWVcbnZhciBUT1VDSF9BQ1RJT05fQ09NUFVURSA9ICdjb21wdXRlJztcbnZhciBUT1VDSF9BQ1RJT05fQVVUTyA9ICdhdXRvJztcbnZhciBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OID0gJ21hbmlwdWxhdGlvbic7IC8vIG5vdCBpbXBsZW1lbnRlZFxudmFyIFRPVUNIX0FDVElPTl9OT05FID0gJ25vbmUnO1xudmFyIFRPVUNIX0FDVElPTl9QQU5fWCA9ICdwYW4teCc7XG52YXIgVE9VQ0hfQUNUSU9OX1BBTl9ZID0gJ3Bhbi15JztcbnZhciBUT1VDSF9BQ1RJT05fTUFQID0gZ2V0VG91Y2hBY3Rpb25Qcm9wcygpO1xuXG4vKipcbiAqIFRvdWNoIEFjdGlvblxuICogc2V0cyB0aGUgdG91Y2hBY3Rpb24gcHJvcGVydHkgb3IgdXNlcyB0aGUganMgYWx0ZXJuYXRpdmVcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gVG91Y2hBY3Rpb24obWFuYWdlciwgdmFsdWUpIHtcbiAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIHRoaXMuc2V0KHZhbHVlKTtcbn1cblxuVG91Y2hBY3Rpb24ucHJvdG90eXBlID0ge1xuICAgIC8qKlxuICAgICAqIHNldCB0aGUgdG91Y2hBY3Rpb24gdmFsdWUgb24gdGhlIGVsZW1lbnQgb3IgZW5hYmxlIHRoZSBwb2x5ZmlsbFxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICAgICAqL1xuICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgLy8gZmluZCBvdXQgdGhlIHRvdWNoLWFjdGlvbiBieSB0aGUgZXZlbnQgaGFuZGxlcnNcbiAgICAgICAgaWYgKHZhbHVlID09IFRPVUNIX0FDVElPTl9DT01QVVRFKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuY29tcHV0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE5BVElWRV9UT1VDSF9BQ1RJT04gJiYgdGhpcy5tYW5hZ2VyLmVsZW1lbnQuc3R5bGUgJiYgVE9VQ0hfQUNUSU9OX01BUFt2YWx1ZV0pIHtcbiAgICAgICAgICAgIHRoaXMubWFuYWdlci5lbGVtZW50LnN0eWxlW1BSRUZJWEVEX1RPVUNIX0FDVElPTl0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGlvbnMgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICoganVzdCByZS1zZXQgdGhlIHRvdWNoQWN0aW9uIHZhbHVlXG4gICAgICovXG4gICAgdXBkYXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5zZXQodGhpcy5tYW5hZ2VyLm9wdGlvbnMudG91Y2hBY3Rpb24pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBjb21wdXRlIHRoZSB2YWx1ZSBmb3IgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IGJhc2VkIG9uIHRoZSByZWNvZ25pemVyJ3Mgc2V0dGluZ3NcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSB2YWx1ZVxuICAgICAqL1xuICAgIGNvbXB1dGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYWN0aW9ucyA9IFtdO1xuICAgICAgICBlYWNoKHRoaXMubWFuYWdlci5yZWNvZ25pemVycywgZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgICAgICAgICAgaWYgKGJvb2xPckZuKHJlY29nbml6ZXIub3B0aW9ucy5lbmFibGUsIFtyZWNvZ25pemVyXSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zID0gYWN0aW9ucy5jb25jYXQocmVjb2duaXplci5nZXRUb3VjaEFjdGlvbigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zLmpvaW4oJyAnKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiBlYWNoIGlucHV0IGN5Y2xlIGFuZCBwcm92aWRlcyB0aGUgcHJldmVudGluZyBvZiB0aGUgYnJvd3NlciBiZWhhdmlvclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgICAqL1xuICAgIHByZXZlbnREZWZhdWx0czogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIHNyY0V2ZW50ID0gaW5wdXQuc3JjRXZlbnQ7XG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5vZmZzZXREaXJlY3Rpb247XG5cbiAgICAgICAgLy8gaWYgdGhlIHRvdWNoIGFjdGlvbiBkaWQgcHJldmVudGVkIG9uY2UgdGhpcyBzZXNzaW9uXG4gICAgICAgIGlmICh0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIHNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgdmFyIGhhc05vbmUgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTk9ORSkgJiYgIVRPVUNIX0FDVElPTl9NQVBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICAgICAgICB2YXIgaGFzUGFuWSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWSkgJiYgIVRPVUNIX0FDVElPTl9NQVBbVE9VQ0hfQUNUSU9OX1BBTl9ZXTtcbiAgICAgICAgdmFyIGhhc1BhblggPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1gpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWF07XG5cbiAgICAgICAgaWYgKGhhc05vbmUpIHtcbiAgICAgICAgICAgIC8vZG8gbm90IHByZXZlbnQgZGVmYXVsdHMgaWYgdGhpcyBpcyBhIHRhcCBnZXN0dXJlXG5cbiAgICAgICAgICAgIHZhciBpc1RhcFBvaW50ZXIgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IDE7XG4gICAgICAgICAgICB2YXIgaXNUYXBNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgMjtcbiAgICAgICAgICAgIHZhciBpc1RhcFRvdWNoVGltZSA9IGlucHV0LmRlbHRhVGltZSA8IDI1MDtcblxuICAgICAgICAgICAgaWYgKGlzVGFwUG9pbnRlciAmJiBpc1RhcE1vdmVtZW50ICYmIGlzVGFwVG91Y2hUaW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc1BhblggJiYgaGFzUGFuWSkge1xuICAgICAgICAgICAgLy8gYHBhbi14IHBhbi15YCBtZWFucyBicm93c2VyIGhhbmRsZXMgYWxsIHNjcm9sbGluZy9wYW5uaW5nLCBkbyBub3QgcHJldmVudFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc05vbmUgfHxcbiAgICAgICAgICAgIChoYXNQYW5ZICYmIGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB8fFxuICAgICAgICAgICAgKGhhc1BhblggJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX1ZFUlRJQ0FMKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJldmVudFNyYyhzcmNFdmVudCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogY2FsbCBwcmV2ZW50RGVmYXVsdCB0byBwcmV2ZW50IHRoZSBicm93c2VyJ3MgZGVmYXVsdCBiZWhhdmlvciAoc2Nyb2xsaW5nIGluIG1vc3QgY2FzZXMpXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNyY0V2ZW50XG4gICAgICovXG4gICAgcHJldmVudFNyYzogZnVuY3Rpb24oc3JjRXZlbnQpIHtcbiAgICAgICAgdGhpcy5tYW5hZ2VyLnNlc3Npb24ucHJldmVudGVkID0gdHJ1ZTtcbiAgICAgICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIHdoZW4gdGhlIHRvdWNoQWN0aW9ucyBhcmUgY29sbGVjdGVkIHRoZXkgYXJlIG5vdCBhIHZhbGlkIHZhbHVlLCBzbyB3ZSBuZWVkIHRvIGNsZWFuIHRoaW5ncyB1cC4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGFjdGlvbnNcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zKSB7XG4gICAgLy8gbm9uZVxuICAgIGlmIChpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTk9ORSkpIHtcbiAgICAgICAgcmV0dXJuIFRPVUNIX0FDVElPTl9OT05FO1xuICAgIH1cblxuICAgIHZhciBoYXNQYW5YID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9YKTtcbiAgICB2YXIgaGFzUGFuWSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWSk7XG5cbiAgICAvLyBpZiBib3RoIHBhbi14IGFuZCBwYW4teSBhcmUgc2V0IChkaWZmZXJlbnQgcmVjb2duaXplcnNcbiAgICAvLyBmb3IgZGlmZmVyZW50IGRpcmVjdGlvbnMsIGUuZy4gaG9yaXpvbnRhbCBwYW4gYnV0IHZlcnRpY2FsIHN3aXBlPylcbiAgICAvLyB3ZSBuZWVkIG5vbmUgKGFzIG90aGVyd2lzZSB3aXRoIHBhbi14IHBhbi15IGNvbWJpbmVkIG5vbmUgb2YgdGhlc2VcbiAgICAvLyByZWNvZ25pemVycyB3aWxsIHdvcmssIHNpbmNlIHRoZSBicm93c2VyIHdvdWxkIGhhbmRsZSBhbGwgcGFubmluZ1xuICAgIGlmIChoYXNQYW5YICYmIGhhc1BhblkpIHtcbiAgICAgICAgcmV0dXJuIFRPVUNIX0FDVElPTl9OT05FO1xuICAgIH1cblxuICAgIC8vIHBhbi14IE9SIHBhbi15XG4gICAgaWYgKGhhc1BhblggfHwgaGFzUGFuWSkge1xuICAgICAgICByZXR1cm4gaGFzUGFuWCA/IFRPVUNIX0FDVElPTl9QQU5fWCA6IFRPVUNIX0FDVElPTl9QQU5fWTtcbiAgICB9XG5cbiAgICAvLyBtYW5pcHVsYXRpb25cbiAgICBpZiAoaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTikpIHtcbiAgICAgICAgcmV0dXJuIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT047XG4gICAgfVxuXG4gICAgcmV0dXJuIFRPVUNIX0FDVElPTl9BVVRPO1xufVxuXG5mdW5jdGlvbiBnZXRUb3VjaEFjdGlvblByb3BzKCkge1xuICAgIGlmICghTkFUSVZFX1RPVUNIX0FDVElPTikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciB0b3VjaE1hcCA9IHt9O1xuICAgIHZhciBjc3NTdXBwb3J0cyA9IHdpbmRvdy5DU1MgJiYgd2luZG93LkNTUy5zdXBwb3J0cztcbiAgICBbJ2F1dG8nLCAnbWFuaXB1bGF0aW9uJywgJ3Bhbi15JywgJ3Bhbi14JywgJ3Bhbi14IHBhbi15JywgJ25vbmUnXS5mb3JFYWNoKGZ1bmN0aW9uKHZhbCkge1xuXG4gICAgICAgIC8vIElmIGNzcy5zdXBwb3J0cyBpcyBub3Qgc3VwcG9ydGVkIGJ1dCB0aGVyZSBpcyBuYXRpdmUgdG91Y2gtYWN0aW9uIGFzc3VtZSBpdCBzdXBwb3J0c1xuICAgICAgICAvLyBhbGwgdmFsdWVzLiBUaGlzIGlzIHRoZSBjYXNlIGZvciBJRSAxMCBhbmQgMTEuXG4gICAgICAgIHRvdWNoTWFwW3ZhbF0gPSBjc3NTdXBwb3J0cyA/IHdpbmRvdy5DU1Muc3VwcG9ydHMoJ3RvdWNoLWFjdGlvbicsIHZhbCkgOiB0cnVlO1xuICAgIH0pO1xuICAgIHJldHVybiB0b3VjaE1hcDtcbn1cblxuLyoqXG4gKiBSZWNvZ25pemVyIGZsb3cgZXhwbGFpbmVkOyAqXG4gKiBBbGwgcmVjb2duaXplcnMgaGF2ZSB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBQT1NTSUJMRSB3aGVuIGEgaW5wdXQgc2Vzc2lvbiBzdGFydHMuXG4gKiBUaGUgZGVmaW5pdGlvbiBvZiBhIGlucHV0IHNlc3Npb24gaXMgZnJvbSB0aGUgZmlyc3QgaW5wdXQgdW50aWwgdGhlIGxhc3QgaW5wdXQsIHdpdGggYWxsIGl0J3MgbW92ZW1lbnQgaW4gaXQuICpcbiAqIEV4YW1wbGUgc2Vzc2lvbiBmb3IgbW91c2UtaW5wdXQ6IG1vdXNlZG93biAtPiBtb3VzZW1vdmUgLT4gbW91c2V1cFxuICpcbiAqIE9uIGVhY2ggcmVjb2duaXppbmcgY3ljbGUgKHNlZSBNYW5hZ2VyLnJlY29nbml6ZSkgdGhlIC5yZWNvZ25pemUoKSBtZXRob2QgaXMgZXhlY3V0ZWRcbiAqIHdoaWNoIGRldGVybWluZXMgd2l0aCBzdGF0ZSBpdCBzaG91bGQgYmUuXG4gKlxuICogSWYgdGhlIHJlY29nbml6ZXIgaGFzIHRoZSBzdGF0ZSBGQUlMRUQsIENBTkNFTExFRCBvciBSRUNPR05JWkVEIChlcXVhbHMgRU5ERUQpLCBpdCBpcyByZXNldCB0b1xuICogUE9TU0lCTEUgdG8gZ2l2ZSBpdCBhbm90aGVyIGNoYW5nZSBvbiB0aGUgbmV4dCBjeWNsZS5cbiAqXG4gKiAgICAgICAgICAgICAgIFBvc3NpYmxlXG4gKiAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgKy0tLS0tKy0tLS0tLS0tLS0tLS0tLStcbiAqICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgKy0tLS0tKy0tLS0tKyAgICAgICAgICAgICAgIHxcbiAqICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgIHxcbiAqICAgRmFpbGVkICAgICAgQ2FuY2VsbGVkICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSstLS0tLS0rXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgUmVjb2duaXplZCAgICAgICBCZWdhblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kZWQvUmVjb2duaXplZFxuICovXG52YXIgU1RBVEVfUE9TU0lCTEUgPSAxO1xudmFyIFNUQVRFX0JFR0FOID0gMjtcbnZhciBTVEFURV9DSEFOR0VEID0gNDtcbnZhciBTVEFURV9FTkRFRCA9IDg7XG52YXIgU1RBVEVfUkVDT0dOSVpFRCA9IFNUQVRFX0VOREVEO1xudmFyIFNUQVRFX0NBTkNFTExFRCA9IDE2O1xudmFyIFNUQVRFX0ZBSUxFRCA9IDMyO1xuXG4vKipcbiAqIFJlY29nbml6ZXJcbiAqIEV2ZXJ5IHJlY29nbml6ZXIgbmVlZHMgdG8gZXh0ZW5kIGZyb20gdGhpcyBjbGFzcy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gYXNzaWduKHt9LCB0aGlzLmRlZmF1bHRzLCBvcHRpb25zIHx8IHt9KTtcblxuICAgIHRoaXMuaWQgPSB1bmlxdWVJZCgpO1xuXG4gICAgdGhpcy5tYW5hZ2VyID0gbnVsbDtcblxuICAgIC8vIGRlZmF1bHQgaXMgZW5hYmxlIHRydWVcbiAgICB0aGlzLm9wdGlvbnMuZW5hYmxlID0gaWZVbmRlZmluZWQodGhpcy5vcHRpb25zLmVuYWJsZSwgdHJ1ZSk7XG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfUE9TU0lCTEU7XG5cbiAgICB0aGlzLnNpbXVsdGFuZW91cyA9IHt9O1xuICAgIHRoaXMucmVxdWlyZUZhaWwgPSBbXTtcbn1cblxuUmVjb2duaXplci5wcm90b3R5cGUgPSB7XG4gICAgLyoqXG4gICAgICogQHZpcnR1YWxcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIGRlZmF1bHRzOiB7fSxcblxuICAgIC8qKlxuICAgICAqIHNldCBvcHRpb25zXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICAgKiBAcmV0dXJuIHtSZWNvZ25pemVyfVxuICAgICAqL1xuICAgIHNldDogZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgICBhc3NpZ24odGhpcy5vcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgICAvLyBhbHNvIHVwZGF0ZSB0aGUgdG91Y2hBY3Rpb24sIGluIGNhc2Ugc29tZXRoaW5nIGNoYW5nZWQgYWJvdXQgdGhlIGRpcmVjdGlvbnMvZW5hYmxlZCBzdGF0ZVxuICAgICAgICB0aGlzLm1hbmFnZXIgJiYgdGhpcy5tYW5hZ2VyLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVjb2duaXplIHNpbXVsdGFuZW91cyB3aXRoIGFuIG90aGVyIHJlY29nbml6ZXIuXG4gICAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgICAqL1xuICAgIHJlY29nbml6ZVdpdGg6IGZ1bmN0aW9uKG90aGVyUmVjb2duaXplcikge1xuICAgICAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAncmVjb2duaXplV2l0aCcsIHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaW11bHRhbmVvdXMgPSB0aGlzLnNpbXVsdGFuZW91cztcbiAgICAgICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuICAgICAgICBpZiAoIXNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdKSB7XG4gICAgICAgICAgICBzaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXSA9IG90aGVyUmVjb2duaXplcjtcbiAgICAgICAgICAgIG90aGVyUmVjb2duaXplci5yZWNvZ25pemVXaXRoKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBkcm9wIHRoZSBzaW11bHRhbmVvdXMgbGluay4gaXQgZG9lc250IHJlbW92ZSB0aGUgbGluayBvbiB0aGUgb3RoZXIgcmVjb2duaXplci5cbiAgICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAgICovXG4gICAgZHJvcFJlY29nbml6ZVdpdGg6IGZ1bmN0aW9uKG90aGVyUmVjb2duaXplcikge1xuICAgICAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAnZHJvcFJlY29nbml6ZVdpdGgnLCB0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVjb2duaXplciBjYW4gb25seSBydW4gd2hlbiBhbiBvdGhlciBpcyBmYWlsaW5nXG4gICAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgICAqL1xuICAgIHJlcXVpcmVGYWlsdXJlOiBmdW5jdGlvbihvdGhlclJlY29nbml6ZXIpIHtcbiAgICAgICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ3JlcXVpcmVGYWlsdXJlJywgdGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlcXVpcmVGYWlsID0gdGhpcy5yZXF1aXJlRmFpbDtcbiAgICAgICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuICAgICAgICBpZiAoaW5BcnJheShyZXF1aXJlRmFpbCwgb3RoZXJSZWNvZ25pemVyKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJlcXVpcmVGYWlsLnB1c2gob3RoZXJSZWNvZ25pemVyKTtcbiAgICAgICAgICAgIG90aGVyUmVjb2duaXplci5yZXF1aXJlRmFpbHVyZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZHJvcCB0aGUgcmVxdWlyZUZhaWx1cmUgbGluay4gaXQgZG9lcyBub3QgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICAgKi9cbiAgICBkcm9wUmVxdWlyZUZhaWx1cmU6IGZ1bmN0aW9uKG90aGVyUmVjb2duaXplcikge1xuICAgICAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAnZHJvcFJlcXVpcmVGYWlsdXJlJywgdGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuICAgICAgICB2YXIgaW5kZXggPSBpbkFycmF5KHRoaXMucmVxdWlyZUZhaWwsIG90aGVyUmVjb2duaXplcik7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnJlcXVpcmVGYWlsLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGhhcyByZXF1aXJlIGZhaWx1cmVzIGJvb2xlYW5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBoYXNSZXF1aXJlRmFpbHVyZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1aXJlRmFpbC5sZW5ndGggPiAwO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBpZiB0aGUgcmVjb2duaXplciBjYW4gcmVjb2duaXplIHNpbXVsdGFuZW91cyB3aXRoIGFuIG90aGVyIHJlY29nbml6ZXJcbiAgICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgICAqL1xuICAgIGNhblJlY29nbml6ZVdpdGg6IGZ1bmN0aW9uKG90aGVyUmVjb2duaXplcikge1xuICAgICAgICByZXR1cm4gISF0aGlzLnNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBZb3Ugc2hvdWxkIHVzZSBgdHJ5RW1pdGAgaW5zdGVhZCBvZiBgZW1pdGAgZGlyZWN0bHkgdG8gY2hlY2tcbiAgICAgKiB0aGF0IGFsbCB0aGUgbmVlZGVkIHJlY29nbml6ZXJzIGhhcyBmYWlsZWQgYmVmb3JlIGVtaXR0aW5nLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgICAqL1xuICAgIGVtaXQ6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBmdW5jdGlvbiBlbWl0KGV2ZW50KSB7XG4gICAgICAgICAgICBzZWxmLm1hbmFnZXIuZW1pdChldmVudCwgaW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gJ3BhbnN0YXJ0JyBhbmQgJ3Bhbm1vdmUnXG4gICAgICAgIGlmIChzdGF0ZSA8IFNUQVRFX0VOREVEKSB7XG4gICAgICAgICAgICBlbWl0KHNlbGYub3B0aW9ucy5ldmVudCArIHN0YXRlU3RyKHN0YXRlKSk7XG4gICAgICAgIH1cblxuICAgICAgICBlbWl0KHNlbGYub3B0aW9ucy5ldmVudCk7IC8vIHNpbXBsZSAnZXZlbnROYW1lJyBldmVudHNcblxuICAgICAgICBpZiAoaW5wdXQuYWRkaXRpb25hbEV2ZW50KSB7IC8vIGFkZGl0aW9uYWwgZXZlbnQocGFubGVmdCwgcGFucmlnaHQsIHBpbmNoaW4sIHBpbmNob3V0Li4uKVxuICAgICAgICAgICAgZW1pdChpbnB1dC5hZGRpdGlvbmFsRXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcGFuZW5kIGFuZCBwYW5jYW5jZWxcbiAgICAgICAgaWYgKHN0YXRlID49IFNUQVRFX0VOREVEKSB7XG4gICAgICAgICAgICBlbWl0KHNlbGYub3B0aW9ucy5ldmVudCArIHN0YXRlU3RyKHN0YXRlKSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgdGhhdCBhbGwgdGhlIHJlcXVpcmUgZmFpbHVyZSByZWNvZ25pemVycyBoYXMgZmFpbGVkLFxuICAgICAqIGlmIHRydWUsIGl0IGVtaXRzIGEgZ2VzdHVyZSBldmVudCxcbiAgICAgKiBvdGhlcndpc2UsIHNldHVwIHRoZSBzdGF0ZSB0byBGQUlMRUQuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAgICovXG4gICAgdHJ5RW1pdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuRW1pdCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbWl0KGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpdCdzIGZhaWxpbmcgYW55d2F5XG4gICAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9GQUlMRUQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNhbiB3ZSBlbWl0P1xuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGNhbkVtaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgdGhpcy5yZXF1aXJlRmFpbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICghKHRoaXMucmVxdWlyZUZhaWxbaV0uc3RhdGUgJiAoU1RBVEVfRkFJTEVEIHwgU1RBVEVfUE9TU0lCTEUpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogdXBkYXRlIHRoZSByZWNvZ25pemVyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgICAqL1xuICAgIHJlY29nbml6ZTogZnVuY3Rpb24oaW5wdXREYXRhKSB7XG4gICAgICAgIC8vIG1ha2UgYSBuZXcgY29weSBvZiB0aGUgaW5wdXREYXRhXG4gICAgICAgIC8vIHNvIHdlIGNhbiBjaGFuZ2UgdGhlIGlucHV0RGF0YSB3aXRob3V0IG1lc3NpbmcgdXAgdGhlIG90aGVyIHJlY29nbml6ZXJzXG4gICAgICAgIHZhciBpbnB1dERhdGFDbG9uZSA9IGFzc2lnbih7fSwgaW5wdXREYXRhKTtcblxuICAgICAgICAvLyBpcyBpcyBlbmFibGVkIGFuZCBhbGxvdyByZWNvZ25pemluZz9cbiAgICAgICAgaWYgKCFib29sT3JGbih0aGlzLm9wdGlvbnMuZW5hYmxlLCBbdGhpcywgaW5wdXREYXRhQ2xvbmVdKSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlc2V0IHdoZW4gd2UndmUgcmVhY2hlZCB0aGUgZW5kXG4gICAgICAgIGlmICh0aGlzLnN0YXRlICYgKFNUQVRFX1JFQ09HTklaRUQgfCBTVEFURV9DQU5DRUxMRUQgfCBTVEFURV9GQUlMRUQpKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU1RBVEVfUE9TU0lCTEU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5wcm9jZXNzKGlucHV0RGF0YUNsb25lKTtcblxuICAgICAgICAvLyB0aGUgcmVjb2duaXplciBoYXMgcmVjb2duaXplZCBhIGdlc3R1cmVcbiAgICAgICAgLy8gc28gdHJpZ2dlciBhbiBldmVudFxuICAgICAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQgfCBTVEFURV9FTkRFRCB8IFNUQVRFX0NBTkNFTExFRCkpIHtcbiAgICAgICAgICAgIHRoaXMudHJ5RW1pdChpbnB1dERhdGFDbG9uZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmV0dXJuIHRoZSBzdGF0ZSBvZiB0aGUgcmVjb2duaXplclxuICAgICAqIHRoZSBhY3R1YWwgcmVjb2duaXppbmcgaGFwcGVucyBpbiB0aGlzIG1ldGhvZFxuICAgICAqIEB2aXJ0dWFsXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgICAqIEByZXR1cm5zIHtDb25zdH0gU1RBVEVcbiAgICAgKi9cbiAgICBwcm9jZXNzOiBmdW5jdGlvbihpbnB1dERhdGEpIHsgfSwgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbiAgICAvKipcbiAgICAgKiByZXR1cm4gdGhlIHByZWZlcnJlZCB0b3VjaC1hY3Rpb25cbiAgICAgKiBAdmlydHVhbFxuICAgICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICAgKi9cbiAgICBnZXRUb3VjaEFjdGlvbjogZnVuY3Rpb24oKSB7IH0sXG5cbiAgICAvKipcbiAgICAgKiBjYWxsZWQgd2hlbiB0aGUgZ2VzdHVyZSBpc24ndCBhbGxvd2VkIHRvIHJlY29nbml6ZVxuICAgICAqIGxpa2Ugd2hlbiBhbm90aGVyIGlzIGJlaW5nIHJlY29nbml6ZWQgb3IgaXQgaXMgZGlzYWJsZWRcbiAgICAgKiBAdmlydHVhbFxuICAgICAqL1xuICAgIHJlc2V0OiBmdW5jdGlvbigpIHsgfVxufTtcblxuLyoqXG4gKiBnZXQgYSB1c2FibGUgc3RyaW5nLCB1c2VkIGFzIGV2ZW50IHBvc3RmaXhcbiAqIEBwYXJhbSB7Q29uc3R9IHN0YXRlXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdGF0ZVxuICovXG5mdW5jdGlvbiBzdGF0ZVN0cihzdGF0ZSkge1xuICAgIGlmIChzdGF0ZSAmIFNUQVRFX0NBTkNFTExFRCkge1xuICAgICAgICByZXR1cm4gJ2NhbmNlbCc7XG4gICAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0VOREVEKSB7XG4gICAgICAgIHJldHVybiAnZW5kJztcbiAgICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfQ0hBTkdFRCkge1xuICAgICAgICByZXR1cm4gJ21vdmUnO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9CRUdBTikge1xuICAgICAgICByZXR1cm4gJ3N0YXJ0JztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIGRpcmVjdGlvbiBjb25zIHRvIHN0cmluZ1xuICogQHBhcmFtIHtDb25zdH0gZGlyZWN0aW9uXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBkaXJlY3Rpb25TdHIoZGlyZWN0aW9uKSB7XG4gICAgaWYgKGRpcmVjdGlvbiA9PSBESVJFQ1RJT05fRE9XTikge1xuICAgICAgICByZXR1cm4gJ2Rvd24nO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09IERJUkVDVElPTl9VUCkge1xuICAgICAgICByZXR1cm4gJ3VwJztcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBESVJFQ1RJT05fTEVGVCkge1xuICAgICAgICByZXR1cm4gJ2xlZnQnO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09IERJUkVDVElPTl9SSUdIVCkge1xuICAgICAgICByZXR1cm4gJ3JpZ2h0JztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIGdldCBhIHJlY29nbml6ZXIgYnkgbmFtZSBpZiBpdCBpcyBib3VuZCB0byBhIG1hbmFnZXJcbiAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IG90aGVyUmVjb2duaXplclxuICogQHBhcmFtIHtSZWNvZ25pemVyfSByZWNvZ25pemVyXG4gKiBAcmV0dXJucyB7UmVjb2duaXplcn1cbiAqL1xuZnVuY3Rpb24gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHJlY29nbml6ZXIpIHtcbiAgICB2YXIgbWFuYWdlciA9IHJlY29nbml6ZXIubWFuYWdlcjtcbiAgICBpZiAobWFuYWdlcikge1xuICAgICAgICByZXR1cm4gbWFuYWdlci5nZXQob3RoZXJSZWNvZ25pemVyKTtcbiAgICB9XG4gICAgcmV0dXJuIG90aGVyUmVjb2duaXplcjtcbn1cblxuLyoqXG4gKiBUaGlzIHJlY29nbml6ZXIgaXMganVzdCB1c2VkIGFzIGEgYmFzZSBmb3IgdGhlIHNpbXBsZSBhdHRyaWJ1dGUgcmVjb2duaXplcnMuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIFJlY29nbml6ZXJcbiAqL1xuZnVuY3Rpb24gQXR0clJlY29nbml6ZXIoKSB7XG4gICAgUmVjb2duaXplci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5pbmhlcml0KEF0dHJSZWNvZ25pemVyLCBSZWNvZ25pemVyLCB7XG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBtZW1iZXJvZiBBdHRyUmVjb2duaXplclxuICAgICAqL1xuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgICAgICAgKiBAZGVmYXVsdCAxXG4gICAgICAgICAqL1xuICAgICAgICBwb2ludGVyczogMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGNoZWNrIGlmIGl0IHRoZSByZWNvZ25pemVyIHJlY2VpdmVzIHZhbGlkIGlucHV0LCBsaWtlIGlucHV0LmRpc3RhbmNlID4gMTAuXG4gICAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAgICogQHJldHVybnMge0Jvb2xlYW59IHJlY29nbml6ZWRcbiAgICAgKi9cbiAgICBhdHRyVGVzdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIG9wdGlvblBvaW50ZXJzID0gdGhpcy5vcHRpb25zLnBvaW50ZXJzO1xuICAgICAgICByZXR1cm4gb3B0aW9uUG9pbnRlcnMgPT09IDAgfHwgaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSBvcHRpb25Qb2ludGVycztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUHJvY2VzcyB0aGUgaW5wdXQgYW5kIHJldHVybiB0aGUgc3RhdGUgZm9yIHRoZSByZWNvZ25pemVyXG4gICAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAgICogQHJldHVybnMgeyp9IFN0YXRlXG4gICAgICovXG4gICAgcHJvY2VzczogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgdmFyIGV2ZW50VHlwZSA9IGlucHV0LmV2ZW50VHlwZTtcblxuICAgICAgICB2YXIgaXNSZWNvZ25pemVkID0gc3RhdGUgJiAoU1RBVEVfQkVHQU4gfCBTVEFURV9DSEFOR0VEKTtcbiAgICAgICAgdmFyIGlzVmFsaWQgPSB0aGlzLmF0dHJUZXN0KGlucHV0KTtcblxuICAgICAgICAvLyBvbiBjYW5jZWwgaW5wdXQgYW5kIHdlJ3ZlIHJlY29nbml6ZWQgYmVmb3JlLCByZXR1cm4gU1RBVEVfQ0FOQ0VMTEVEXG4gICAgICAgIGlmIChpc1JlY29nbml6ZWQgJiYgKGV2ZW50VHlwZSAmIElOUFVUX0NBTkNFTCB8fCAhaXNWYWxpZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZSB8IFNUQVRFX0NBTkNFTExFRDtcbiAgICAgICAgfSBlbHNlIGlmIChpc1JlY29nbml6ZWQgfHwgaXNWYWxpZCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZSB8IFNUQVRFX0VOREVEO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghKHN0YXRlICYgU1RBVEVfQkVHQU4pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFNUQVRFX0JFR0FOO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfQ0hBTkdFRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIFBhblxuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvd24gYW5kIG1vdmVkIGluIHRoZSBhbGxvd2VkIGRpcmVjdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuZnVuY3Rpb24gUGFuUmVjb2duaXplcigpIHtcbiAgICBBdHRyUmVjb2duaXplci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdGhpcy5wWCA9IG51bGw7XG4gICAgdGhpcy5wWSA9IG51bGw7XG59XG5cbmluaGVyaXQoUGFuUmVjb2duaXplciwgQXR0clJlY29nbml6ZXIsIHtcbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQG1lbWJlcm9mIFBhblJlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgICBldmVudDogJ3BhbicsXG4gICAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgICBkaXJlY3Rpb246IERJUkVDVElPTl9BTExcbiAgICB9LFxuXG4gICAgZ2V0VG91Y2hBY3Rpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5vcHRpb25zLmRpcmVjdGlvbjtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSBbXTtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goVE9VQ0hfQUNUSU9OX1BBTl9ZKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX1ZFUlRJQ0FMKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goVE9VQ0hfQUNUSU9OX1BBTl9YKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWN0aW9ucztcbiAgICB9LFxuXG4gICAgZGlyZWN0aW9uVGVzdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIHZhciBoYXNNb3ZlZCA9IHRydWU7XG4gICAgICAgIHZhciBkaXN0YW5jZSA9IGlucHV0LmRpc3RhbmNlO1xuICAgICAgICB2YXIgZGlyZWN0aW9uID0gaW5wdXQuZGlyZWN0aW9uO1xuICAgICAgICB2YXIgeCA9IGlucHV0LmRlbHRhWDtcbiAgICAgICAgdmFyIHkgPSBpbnB1dC5kZWx0YVk7XG5cbiAgICAgICAgLy8gbG9jayB0byBheGlzP1xuICAgICAgICBpZiAoIShkaXJlY3Rpb24gJiBvcHRpb25zLmRpcmVjdGlvbikpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gKHggPT09IDApID8gRElSRUNUSU9OX05PTkUgOiAoeCA8IDApID8gRElSRUNUSU9OX0xFRlQgOiBESVJFQ1RJT05fUklHSFQ7XG4gICAgICAgICAgICAgICAgaGFzTW92ZWQgPSB4ICE9IHRoaXMucFg7XG4gICAgICAgICAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhpbnB1dC5kZWx0YVgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAoeSA9PT0gMCkgPyBESVJFQ1RJT05fTk9ORSA6ICh5IDwgMCkgPyBESVJFQ1RJT05fVVAgOiBESVJFQ1RJT05fRE9XTjtcbiAgICAgICAgICAgICAgICBoYXNNb3ZlZCA9IHkgIT0gdGhpcy5wWTtcbiAgICAgICAgICAgICAgICBkaXN0YW5jZSA9IE1hdGguYWJzKGlucHV0LmRlbHRhWSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5wdXQuZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICAgICAgICByZXR1cm4gaGFzTW92ZWQgJiYgZGlzdGFuY2UgPiBvcHRpb25zLnRocmVzaG9sZCAmJiBkaXJlY3Rpb24gJiBvcHRpb25zLmRpcmVjdGlvbjtcbiAgICB9LFxuXG4gICAgYXR0clRlc3Q6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBBdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiZcbiAgICAgICAgICAgICh0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4gfHwgKCEodGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKSAmJiB0aGlzLmRpcmVjdGlvblRlc3QoaW5wdXQpKSk7XG4gICAgfSxcblxuICAgIGVtaXQ6IGZ1bmN0aW9uKGlucHV0KSB7XG5cbiAgICAgICAgdGhpcy5wWCA9IGlucHV0LmRlbHRhWDtcbiAgICAgICAgdGhpcy5wWSA9IGlucHV0LmRlbHRhWTtcblxuICAgICAgICB2YXIgZGlyZWN0aW9uID0gZGlyZWN0aW9uU3RyKGlucHV0LmRpcmVjdGlvbik7XG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgICAgICAgaW5wdXQuYWRkaXRpb25hbEV2ZW50ID0gdGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N1cGVyLmVtaXQuY2FsbCh0aGlzLCBpbnB1dCk7XG4gICAgfVxufSk7XG5cbi8qKlxuICogUGluY2hcbiAqIFJlY29nbml6ZWQgd2hlbiB0d28gb3IgbW9yZSBwb2ludGVycyBhcmUgbW92aW5nIHRvd2FyZCAoem9vbS1pbikgb3IgYXdheSBmcm9tIGVhY2ggb3RoZXIgKHpvb20tb3V0KS5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuZnVuY3Rpb24gUGluY2hSZWNvZ25pemVyKCkge1xuICAgIEF0dHJSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmluaGVyaXQoUGluY2hSZWNvZ25pemVyLCBBdHRyUmVjb2duaXplciwge1xuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAbWVtYmVyb2YgUGluY2hSZWNvZ25pemVyXG4gICAgICovXG4gICAgZGVmYXVsdHM6IHtcbiAgICAgICAgZXZlbnQ6ICdwaW5jaCcsXG4gICAgICAgIHRocmVzaG9sZDogMCxcbiAgICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LFxuXG4gICAgZ2V0VG91Y2hBY3Rpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9OT05FXTtcbiAgICB9LFxuXG4gICAgYXR0clRlc3Q6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdXBlci5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJlxuICAgICAgICAgICAgKE1hdGguYWJzKGlucHV0LnNjYWxlIC0gMSkgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gICAgfSxcblxuICAgIGVtaXQ6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5zY2FsZSAhPT0gMSkge1xuICAgICAgICAgICAgdmFyIGluT3V0ID0gaW5wdXQuc2NhbGUgPCAxID8gJ2luJyA6ICdvdXQnO1xuICAgICAgICAgICAgaW5wdXQuYWRkaXRpb25hbEV2ZW50ID0gdGhpcy5vcHRpb25zLmV2ZW50ICsgaW5PdXQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc3VwZXIuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgICB9XG59KTtcblxuLyoqXG4gKiBQcmVzc1xuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvd24gZm9yIHggbXMgd2l0aG91dCBhbnkgbW92ZW1lbnQuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIFJlY29nbml6ZXJcbiAqL1xuZnVuY3Rpb24gUHJlc3NSZWNvZ25pemVyKCkge1xuICAgIFJlY29nbml6ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHRoaXMuX3RpbWVyID0gbnVsbDtcbiAgICB0aGlzLl9pbnB1dCA9IG51bGw7XG59XG5cbmluaGVyaXQoUHJlc3NSZWNvZ25pemVyLCBSZWNvZ25pemVyLCB7XG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBtZW1iZXJvZiBQcmVzc1JlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgICBldmVudDogJ3ByZXNzJyxcbiAgICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICAgIHRpbWU6IDI1MSwgLy8gbWluaW1hbCB0aW1lIG9mIHRoZSBwb2ludGVyIHRvIGJlIHByZXNzZWRcbiAgICAgICAgdGhyZXNob2xkOiA5IC8vIGEgbWluaW1hbCBtb3ZlbWVudCBpcyBvaywgYnV0IGtlZXAgaXQgbG93XG4gICAgfSxcblxuICAgIGdldFRvdWNoQWN0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fQVVUT107XG4gICAgfSxcblxuICAgIHByb2Nlc3M6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICB2YXIgdmFsaWRQb2ludGVycyA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9ucy5wb2ludGVycztcbiAgICAgICAgdmFyIHZhbGlkTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IG9wdGlvbnMudGhyZXNob2xkO1xuICAgICAgICB2YXIgdmFsaWRUaW1lID0gaW5wdXQuZGVsdGFUaW1lID4gb3B0aW9ucy50aW1lO1xuXG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG5cbiAgICAgICAgLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAgICAgLy8gYW5kIHdlJ3ZlIHJlYWNoZWQgYW4gZW5kIGV2ZW50LCBzbyBhIHRhcCBpcyBwb3NzaWJsZVxuICAgICAgICBpZiAoIXZhbGlkTW92ZW1lbnQgfHwgIXZhbGlkUG9pbnRlcnMgfHwgKGlucHV0LmV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmICF2YWxpZFRpbWUpKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dENvbnRleHQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1JFQ09HTklaRUQ7XG4gICAgICAgICAgICAgICAgdGhpcy50cnlFbWl0KCk7XG4gICAgICAgICAgICB9LCBvcHRpb25zLnRpbWUsIHRoaXMpO1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgICAgICAgcmV0dXJuIFNUQVRFX1JFQ09HTklaRUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgICB9LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICAgIH0sXG5cbiAgICBlbWl0OiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlucHV0ICYmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpKSB7XG4gICAgICAgICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQgKyAndXAnLCBpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgICAgICAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUm90YXRlXG4gKiBSZWNvZ25pemVkIHdoZW4gdHdvIG9yIG1vcmUgcG9pbnRlciBhcmUgbW92aW5nIGluIGEgY2lyY3VsYXIgbW90aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBSb3RhdGVSZWNvZ25pemVyKCkge1xuICAgIEF0dHJSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmluaGVyaXQoUm90YXRlUmVjb2duaXplciwgQXR0clJlY29nbml6ZXIsIHtcbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQG1lbWJlcm9mIFJvdGF0ZVJlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgICBldmVudDogJ3JvdGF0ZScsXG4gICAgICAgIHRocmVzaG9sZDogMCxcbiAgICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LFxuXG4gICAgZ2V0VG91Y2hBY3Rpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9OT05FXTtcbiAgICB9LFxuXG4gICAgYXR0clRlc3Q6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdXBlci5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJlxuICAgICAgICAgICAgKE1hdGguYWJzKGlucHV0LnJvdGF0aW9uKSA+IHRoaXMub3B0aW9ucy50aHJlc2hvbGQgfHwgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKTtcbiAgICB9XG59KTtcblxuLyoqXG4gKiBTd2lwZVxuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIG1vdmluZyBmYXN0ICh2ZWxvY2l0eSksIHdpdGggZW5vdWdoIGRpc3RhbmNlIGluIHRoZSBhbGxvd2VkIGRpcmVjdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuZnVuY3Rpb24gU3dpcGVSZWNvZ25pemVyKCkge1xuICAgIEF0dHJSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmluaGVyaXQoU3dpcGVSZWNvZ25pemVyLCBBdHRyUmVjb2duaXplciwge1xuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAbWVtYmVyb2YgU3dpcGVSZWNvZ25pemVyXG4gICAgICovXG4gICAgZGVmYXVsdHM6IHtcbiAgICAgICAgZXZlbnQ6ICdzd2lwZScsXG4gICAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICAgIHZlbG9jaXR5OiAwLjMsXG4gICAgICAgIGRpcmVjdGlvbjogRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUwsXG4gICAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSxcblxuICAgIGdldFRvdWNoQWN0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFBhblJlY29nbml6ZXIucHJvdG90eXBlLmdldFRvdWNoQWN0aW9uLmNhbGwodGhpcyk7XG4gICAgfSxcblxuICAgIGF0dHJUZXN0OiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5vcHRpb25zLmRpcmVjdGlvbjtcbiAgICAgICAgdmFyIHZlbG9jaXR5O1xuXG4gICAgICAgIGlmIChkaXJlY3Rpb24gJiAoRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUwpKSB7XG4gICAgICAgICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eTtcbiAgICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgICAgICAgdmVsb2NpdHkgPSBpbnB1dC5vdmVyYWxsVmVsb2NpdHlYO1xuICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9WRVJUSUNBTCkge1xuICAgICAgICAgICAgdmVsb2NpdHkgPSBpbnB1dC5vdmVyYWxsVmVsb2NpdHlZO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1cGVyLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmXG4gICAgICAgICAgICBkaXJlY3Rpb24gJiBpbnB1dC5vZmZzZXREaXJlY3Rpb24gJiZcbiAgICAgICAgICAgIGlucHV0LmRpc3RhbmNlID4gdGhpcy5vcHRpb25zLnRocmVzaG9sZCAmJlxuICAgICAgICAgICAgaW5wdXQubWF4UG9pbnRlcnMgPT0gdGhpcy5vcHRpb25zLnBvaW50ZXJzICYmXG4gICAgICAgICAgICBhYnModmVsb2NpdHkpID4gdGhpcy5vcHRpb25zLnZlbG9jaXR5ICYmIGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORDtcbiAgICB9LFxuXG4gICAgZW1pdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5vZmZzZXREaXJlY3Rpb24pO1xuICAgICAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQgKyBkaXJlY3Rpb24sIGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgaW5wdXQpO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIEEgdGFwIGlzIGVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvaW5nIGEgc21hbGwgdGFwL2NsaWNrLiBNdWx0aXBsZSB0YXBzIGFyZSByZWNvZ25pemVkIGlmIHRoZXkgb2NjdXJcbiAqIGJldHdlZW4gdGhlIGdpdmVuIGludGVydmFsIGFuZCBwb3NpdGlvbi4gVGhlIGRlbGF5IG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZWNvZ25pemUgbXVsdGktdGFwcyB3aXRob3V0IGZpcmluZ1xuICogYSBzaW5nbGUgdGFwLlxuICpcbiAqIFRoZSBldmVudERhdGEgZnJvbSB0aGUgZW1pdHRlZCBldmVudCBjb250YWlucyB0aGUgcHJvcGVydHkgYHRhcENvdW50YCwgd2hpY2ggY29udGFpbnMgdGhlIGFtb3VudCBvZlxuICogbXVsdGktdGFwcyBiZWluZyByZWNvZ25pemVkLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cbmZ1bmN0aW9uIFRhcFJlY29nbml6ZXIoKSB7XG4gICAgUmVjb2duaXplci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgLy8gcHJldmlvdXMgdGltZSBhbmQgY2VudGVyLFxuICAgIC8vIHVzZWQgZm9yIHRhcCBjb3VudGluZ1xuICAgIHRoaXMucFRpbWUgPSBmYWxzZTtcbiAgICB0aGlzLnBDZW50ZXIgPSBmYWxzZTtcblxuICAgIHRoaXMuX3RpbWVyID0gbnVsbDtcbiAgICB0aGlzLl9pbnB1dCA9IG51bGw7XG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cbmluaGVyaXQoVGFwUmVjb2duaXplciwgUmVjb2duaXplciwge1xuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAbWVtYmVyb2YgUGluY2hSZWNvZ25pemVyXG4gICAgICovXG4gICAgZGVmYXVsdHM6IHtcbiAgICAgICAgZXZlbnQ6ICd0YXAnLFxuICAgICAgICBwb2ludGVyczogMSxcbiAgICAgICAgdGFwczogMSxcbiAgICAgICAgaW50ZXJ2YWw6IDMwMCwgLy8gbWF4IHRpbWUgYmV0d2VlbiB0aGUgbXVsdGktdGFwIHRhcHNcbiAgICAgICAgdGltZTogMjUwLCAvLyBtYXggdGltZSBvZiB0aGUgcG9pbnRlciB0byBiZSBkb3duIChsaWtlIGZpbmdlciBvbiB0aGUgc2NyZWVuKVxuICAgICAgICB0aHJlc2hvbGQ6IDksIC8vIGEgbWluaW1hbCBtb3ZlbWVudCBpcyBvaywgYnV0IGtlZXAgaXQgbG93XG4gICAgICAgIHBvc1RocmVzaG9sZDogMTAgLy8gYSBtdWx0aS10YXAgY2FuIGJlIGEgYml0IG9mZiB0aGUgaW5pdGlhbCBwb3NpdGlvblxuICAgIH0sXG5cbiAgICBnZXRUb3VjaEFjdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTl07XG4gICAgfSxcblxuICAgIHByb2Nlc3M6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gICAgICAgIHZhciB2YWxpZFBvaW50ZXJzID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSBvcHRpb25zLnBvaW50ZXJzO1xuICAgICAgICB2YXIgdmFsaWRNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgb3B0aW9ucy50aHJlc2hvbGQ7XG4gICAgICAgIHZhciB2YWxpZFRvdWNoVGltZSA9IGlucHV0LmRlbHRhVGltZSA8IG9wdGlvbnMudGltZTtcblxuICAgICAgICB0aGlzLnJlc2V0KCk7XG5cbiAgICAgICAgaWYgKChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9TVEFSVCkgJiYgKHRoaXMuY291bnQgPT09IDApKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAgICAgLy8gYW5kIHdlJ3ZlIHJlYWNoZWQgYW4gZW5kIGV2ZW50LCBzbyBhIHRhcCBpcyBwb3NzaWJsZVxuICAgICAgICBpZiAodmFsaWRNb3ZlbWVudCAmJiB2YWxpZFRvdWNoVGltZSAmJiB2YWxpZFBvaW50ZXJzKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuZXZlbnRUeXBlICE9IElOUFVUX0VORCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZhaWxUaW1lb3V0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciB2YWxpZEludGVydmFsID0gdGhpcy5wVGltZSA/IChpbnB1dC50aW1lU3RhbXAgLSB0aGlzLnBUaW1lIDwgb3B0aW9ucy5pbnRlcnZhbCkgOiB0cnVlO1xuICAgICAgICAgICAgdmFyIHZhbGlkTXVsdGlUYXAgPSAhdGhpcy5wQ2VudGVyIHx8IGdldERpc3RhbmNlKHRoaXMucENlbnRlciwgaW5wdXQuY2VudGVyKSA8IG9wdGlvbnMucG9zVGhyZXNob2xkO1xuXG4gICAgICAgICAgICB0aGlzLnBUaW1lID0gaW5wdXQudGltZVN0YW1wO1xuICAgICAgICAgICAgdGhpcy5wQ2VudGVyID0gaW5wdXQuY2VudGVyO1xuXG4gICAgICAgICAgICBpZiAoIXZhbGlkTXVsdGlUYXAgfHwgIXZhbGlkSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50ID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudCArPSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuXG4gICAgICAgICAgICAvLyBpZiB0YXAgY291bnQgbWF0Y2hlcyB3ZSBoYXZlIHJlY29nbml6ZWQgaXQsXG4gICAgICAgICAgICAvLyBlbHNlIGl0IGhhcyBiZWdhbiByZWNvZ25pemluZy4uLlxuICAgICAgICAgICAgdmFyIHRhcENvdW50ID0gdGhpcy5jb3VudCAlIG9wdGlvbnMudGFwcztcbiAgICAgICAgICAgIGlmICh0YXBDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIG5vIGZhaWxpbmcgcmVxdWlyZW1lbnRzLCBpbW1lZGlhdGVseSB0cmlnZ2VyIHRoZSB0YXAgZXZlbnRcbiAgICAgICAgICAgICAgICAvLyBvciB3YWl0IGFzIGxvbmcgYXMgdGhlIG11bHRpdGFwIGludGVydmFsIHRvIHRyaWdnZXJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaGFzUmVxdWlyZUZhaWx1cmVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNUQVRFX1JFQ09HTklaRUQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0Q29udGV4dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9SRUNPR05JWkVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlFbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIG9wdGlvbnMuaW50ZXJ2YWwsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gICAgfSxcblxuICAgIGZhaWxUaW1lb3V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0Q29udGV4dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9GQUlMRUQ7XG4gICAgICAgIH0sIHRoaXMub3B0aW9ucy5pbnRlcnZhbCwgdGhpcyk7XG4gICAgICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gICAgfSxcblxuICAgIHJlc2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgICB9LFxuXG4gICAgZW1pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09IFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0LnRhcENvdW50ID0gdGhpcy5jb3VudDtcbiAgICAgICAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogU2ltcGxlIHdheSB0byBjcmVhdGUgYSBtYW5hZ2VyIHdpdGggYSBkZWZhdWx0IHNldCBvZiByZWNvZ25pemVycy5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBIYW1tZXIoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIG9wdGlvbnMucmVjb2duaXplcnMgPSBpZlVuZGVmaW5lZChvcHRpb25zLnJlY29nbml6ZXJzLCBIYW1tZXIuZGVmYXVsdHMucHJlc2V0KTtcbiAgICByZXR1cm4gbmV3IE1hbmFnZXIoZWxlbWVudCwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQGNvbnN0IHtzdHJpbmd9XG4gKi9cbkhhbW1lci5WRVJTSU9OID0gJzIuMC43JztcblxuLyoqXG4gKiBkZWZhdWx0IHNldHRpbmdzXG4gKiBAbmFtZXNwYWNlXG4gKi9cbkhhbW1lci5kZWZhdWx0cyA9IHtcbiAgICAvKipcbiAgICAgKiBzZXQgaWYgRE9NIGV2ZW50cyBhcmUgYmVpbmcgdHJpZ2dlcmVkLlxuICAgICAqIEJ1dCB0aGlzIGlzIHNsb3dlciBhbmQgdW51c2VkIGJ5IHNpbXBsZSBpbXBsZW1lbnRhdGlvbnMsIHNvIGRpc2FibGVkIGJ5IGRlZmF1bHQuXG4gICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBkb21FdmVudHM6IGZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIGZvciB0aGUgdG91Y2hBY3Rpb24gcHJvcGVydHkvZmFsbGJhY2suXG4gICAgICogV2hlbiBzZXQgdG8gYGNvbXB1dGVgIGl0IHdpbGwgbWFnaWNhbGx5IHNldCB0aGUgY29ycmVjdCB2YWx1ZSBiYXNlZCBvbiB0aGUgYWRkZWQgcmVjb2duaXplcnMuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCBjb21wdXRlXG4gICAgICovXG4gICAgdG91Y2hBY3Rpb246IFRPVUNIX0FDVElPTl9DT01QVVRFLFxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGVuYWJsZTogdHJ1ZSxcblxuICAgIC8qKlxuICAgICAqIEVYUEVSSU1FTlRBTCBGRUFUVVJFIC0tIGNhbiBiZSByZW1vdmVkL2NoYW5nZWRcbiAgICAgKiBDaGFuZ2UgdGhlIHBhcmVudCBpbnB1dCB0YXJnZXQgZWxlbWVudC5cbiAgICAgKiBJZiBOdWxsLCB0aGVuIGl0IGlzIGJlaW5nIHNldCB0aGUgdG8gbWFpbiBlbGVtZW50LlxuICAgICAqIEB0eXBlIHtOdWxsfEV2ZW50VGFyZ2V0fVxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKi9cbiAgICBpbnB1dFRhcmdldDogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIGZvcmNlIGFuIGlucHV0IGNsYXNzXG4gICAgICogQHR5cGUge051bGx8RnVuY3Rpb259XG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIGlucHV0Q2xhc3M6IG51bGwsXG5cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IHJlY29nbml6ZXIgc2V0dXAgd2hlbiBjYWxsaW5nIGBIYW1tZXIoKWBcbiAgICAgKiBXaGVuIGNyZWF0aW5nIGEgbmV3IE1hbmFnZXIgdGhlc2Ugd2lsbCBiZSBza2lwcGVkLlxuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKi9cbiAgICBwcmVzZXQ6IFtcbiAgICAgICAgLy8gUmVjb2duaXplckNsYXNzLCBvcHRpb25zLCBbcmVjb2duaXplV2l0aCwgLi4uXSwgW3JlcXVpcmVGYWlsdXJlLCAuLi5dXG4gICAgICAgIFtSb3RhdGVSZWNvZ25pemVyLCB7ZW5hYmxlOiBmYWxzZX1dLFxuICAgICAgICBbUGluY2hSZWNvZ25pemVyLCB7ZW5hYmxlOiBmYWxzZX0sIFsncm90YXRlJ11dLFxuICAgICAgICBbU3dpcGVSZWNvZ25pemVyLCB7ZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTH1dLFxuICAgICAgICBbUGFuUmVjb2duaXplciwge2RpcmVjdGlvbjogRElSRUNUSU9OX0hPUklaT05UQUx9LCBbJ3N3aXBlJ11dLFxuICAgICAgICBbVGFwUmVjb2duaXplcl0sXG4gICAgICAgIFtUYXBSZWNvZ25pemVyLCB7ZXZlbnQ6ICdkb3VibGV0YXAnLCB0YXBzOiAyfSwgWyd0YXAnXV0sXG4gICAgICAgIFtQcmVzc1JlY29nbml6ZXJdXG4gICAgXSxcblxuICAgIC8qKlxuICAgICAqIFNvbWUgQ1NTIHByb3BlcnRpZXMgY2FuIGJlIHVzZWQgdG8gaW1wcm92ZSB0aGUgd29ya2luZyBvZiBIYW1tZXIuXG4gICAgICogQWRkIHRoZW0gdG8gdGhpcyBtZXRob2QgYW5kIHRoZXkgd2lsbCBiZSBzZXQgd2hlbiBjcmVhdGluZyBhIG5ldyBNYW5hZ2VyLlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKi9cbiAgICBjc3NQcm9wczoge1xuICAgICAgICAvKipcbiAgICAgICAgICogRGlzYWJsZXMgdGV4dCBzZWxlY3Rpb24gdG8gaW1wcm92ZSB0aGUgZHJhZ2dpbmcgZ2VzdHVyZS4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgICAgICovXG4gICAgICAgIHVzZXJTZWxlY3Q6ICdub25lJyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogRGlzYWJsZSB0aGUgV2luZG93cyBQaG9uZSBncmlwcGVycyB3aGVuIHByZXNzaW5nIGFuIGVsZW1lbnQuXG4gICAgICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAgICAgKi9cbiAgICAgICAgdG91Y2hTZWxlY3Q6ICdub25lJyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogRGlzYWJsZXMgdGhlIGRlZmF1bHQgY2FsbG91dCBzaG93biB3aGVuIHlvdSB0b3VjaCBhbmQgaG9sZCBhIHRvdWNoIHRhcmdldC5cbiAgICAgICAgICogT24gaU9TLCB3aGVuIHlvdSB0b3VjaCBhbmQgaG9sZCBhIHRvdWNoIHRhcmdldCBzdWNoIGFzIGEgbGluaywgU2FmYXJpIGRpc3BsYXlzXG4gICAgICAgICAqIGEgY2FsbG91dCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5rLiBUaGlzIHByb3BlcnR5IGFsbG93cyB5b3UgdG8gZGlzYWJsZSB0aGF0IGNhbGxvdXQuXG4gICAgICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAgICAgKi9cbiAgICAgICAgdG91Y2hDYWxsb3V0OiAnbm9uZScsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHpvb21pbmcgaXMgZW5hYmxlZC4gVXNlZCBieSBJRTEwPlxuICAgICAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgICAgICovXG4gICAgICAgIGNvbnRlbnRab29taW5nOiAnbm9uZScsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGF0IGFuIGVudGlyZSBlbGVtZW50IHNob3VsZCBiZSBkcmFnZ2FibGUgaW5zdGVhZCBvZiBpdHMgY29udGVudHMuIE1haW5seSBmb3IgZGVza3RvcCBicm93c2Vycy5cbiAgICAgICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICAgICAqL1xuICAgICAgICB1c2VyRHJhZzogJ25vbmUnLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPdmVycmlkZXMgdGhlIGhpZ2hsaWdodCBjb2xvciBzaG93biB3aGVuIHRoZSB1c2VyIHRhcHMgYSBsaW5rIG9yIGEgSmF2YVNjcmlwdFxuICAgICAgICAgKiBjbGlja2FibGUgZWxlbWVudCBpbiBpT1MuIFRoaXMgcHJvcGVydHkgb2JleXMgdGhlIGFscGhhIHZhbHVlLCBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICAgICAqIEBkZWZhdWx0ICdyZ2JhKDAsMCwwLDApJ1xuICAgICAgICAgKi9cbiAgICAgICAgdGFwSGlnaGxpZ2h0Q29sb3I6ICdyZ2JhKDAsMCwwLDApJ1xuICAgIH1cbn07XG5cbnZhciBTVE9QID0gMTtcbnZhciBGT1JDRURfU1RPUCA9IDI7XG5cbi8qKlxuICogTWFuYWdlclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIE1hbmFnZXIoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IGFzc2lnbih7fSwgSGFtbWVyLmRlZmF1bHRzLCBvcHRpb25zIHx8IHt9KTtcblxuICAgIHRoaXMub3B0aW9ucy5pbnB1dFRhcmdldCA9IHRoaXMub3B0aW9ucy5pbnB1dFRhcmdldCB8fCBlbGVtZW50O1xuXG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMucmVjb2duaXplcnMgPSBbXTtcbiAgICB0aGlzLm9sZENzc1Byb3BzID0ge307XG5cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuaW5wdXQgPSBjcmVhdGVJbnB1dEluc3RhbmNlKHRoaXMpO1xuICAgIHRoaXMudG91Y2hBY3Rpb24gPSBuZXcgVG91Y2hBY3Rpb24odGhpcywgdGhpcy5vcHRpb25zLnRvdWNoQWN0aW9uKTtcblxuICAgIHRvZ2dsZUNzc1Byb3BzKHRoaXMsIHRydWUpO1xuXG4gICAgZWFjaCh0aGlzLm9wdGlvbnMucmVjb2duaXplcnMsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgdmFyIHJlY29nbml6ZXIgPSB0aGlzLmFkZChuZXcgKGl0ZW1bMF0pKGl0ZW1bMV0pKTtcbiAgICAgICAgaXRlbVsyXSAmJiByZWNvZ25pemVyLnJlY29nbml6ZVdpdGgoaXRlbVsyXSk7XG4gICAgICAgIGl0ZW1bM10gJiYgcmVjb2duaXplci5yZXF1aXJlRmFpbHVyZShpdGVtWzNdKTtcbiAgICB9LCB0aGlzKTtcbn1cblxuTWFuYWdlci5wcm90b3R5cGUgPSB7XG4gICAgLyoqXG4gICAgICogc2V0IG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgICAqL1xuICAgIHNldDogZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgICBhc3NpZ24odGhpcy5vcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgICAvLyBPcHRpb25zIHRoYXQgbmVlZCBhIGxpdHRsZSBtb3JlIHNldHVwXG4gICAgICAgIGlmIChvcHRpb25zLnRvdWNoQWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmlucHV0VGFyZ2V0KSB7XG4gICAgICAgICAgICAvLyBDbGVhbiB1cCBleGlzdGluZyBldmVudCBsaXN0ZW5lcnMgYW5kIHJlaW5pdGlhbGl6ZVxuICAgICAgICAgICAgdGhpcy5pbnB1dC5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmlucHV0LnRhcmdldCA9IG9wdGlvbnMuaW5wdXRUYXJnZXQ7XG4gICAgICAgICAgICB0aGlzLmlucHV0LmluaXQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogc3RvcCByZWNvZ25pemluZyBmb3IgdGhpcyBzZXNzaW9uLlxuICAgICAqIFRoaXMgc2Vzc2lvbiB3aWxsIGJlIGRpc2NhcmRlZCwgd2hlbiBhIG5ldyBbaW5wdXRdc3RhcnQgZXZlbnQgaXMgZmlyZWQuXG4gICAgICogV2hlbiBmb3JjZWQsIHRoZSByZWNvZ25pemVyIGN5Y2xlIGlzIHN0b3BwZWQgaW1tZWRpYXRlbHkuXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbZm9yY2VdXG4gICAgICovXG4gICAgc3RvcDogZnVuY3Rpb24oZm9yY2UpIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnN0b3BwZWQgPSBmb3JjZSA/IEZPUkNFRF9TVE9QIDogU1RPUDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcnVuIHRoZSByZWNvZ25pemVycyFcbiAgICAgKiBjYWxsZWQgYnkgdGhlIGlucHV0SGFuZGxlciBmdW5jdGlvbiBvbiBldmVyeSBtb3ZlbWVudCBvZiB0aGUgcG9pbnRlcnMgKHRvdWNoZXMpXG4gICAgICogaXQgd2Fsa3MgdGhyb3VnaCBhbGwgdGhlIHJlY29nbml6ZXJzIGFuZCB0cmllcyB0byBkZXRlY3QgdGhlIGdlc3R1cmUgdGhhdCBpcyBiZWluZyBtYWRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgICAqL1xuICAgIHJlY29nbml6ZTogZnVuY3Rpb24oaW5wdXREYXRhKSB7XG4gICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uO1xuICAgICAgICBpZiAoc2Vzc2lvbi5zdG9wcGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBydW4gdGhlIHRvdWNoLWFjdGlvbiBwb2x5ZmlsbFxuICAgICAgICB0aGlzLnRvdWNoQWN0aW9uLnByZXZlbnREZWZhdWx0cyhpbnB1dERhdGEpO1xuXG4gICAgICAgIHZhciByZWNvZ25pemVyO1xuICAgICAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzO1xuXG4gICAgICAgIC8vIHRoaXMgaG9sZHMgdGhlIHJlY29nbml6ZXIgdGhhdCBpcyBiZWluZyByZWNvZ25pemVkLlxuICAgICAgICAvLyBzbyB0aGUgcmVjb2duaXplcidzIHN0YXRlIG5lZWRzIHRvIGJlIEJFR0FOLCBDSEFOR0VELCBFTkRFRCBvciBSRUNPR05JWkVEXG4gICAgICAgIC8vIGlmIG5vIHJlY29nbml6ZXIgaXMgZGV0ZWN0aW5nIGEgdGhpbmcsIGl0IGlzIHNldCB0byBgbnVsbGBcbiAgICAgICAgdmFyIGN1clJlY29nbml6ZXIgPSBzZXNzaW9uLmN1clJlY29nbml6ZXI7XG5cbiAgICAgICAgLy8gcmVzZXQgd2hlbiB0aGUgbGFzdCByZWNvZ25pemVyIGlzIHJlY29nbml6ZWRcbiAgICAgICAgLy8gb3Igd2hlbiB3ZSdyZSBpbiBhIG5ldyBzZXNzaW9uXG4gICAgICAgIGlmICghY3VyUmVjb2duaXplciB8fCAoY3VyUmVjb2duaXplciAmJiBjdXJSZWNvZ25pemVyLnN0YXRlICYgU1RBVEVfUkVDT0dOSVpFRCkpIHtcbiAgICAgICAgICAgIGN1clJlY29nbml6ZXIgPSBzZXNzaW9uLmN1clJlY29nbml6ZXIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB3aGlsZSAoaSA8IHJlY29nbml6ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVjb2duaXplciA9IHJlY29nbml6ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBmaW5kIG91dCBpZiB3ZSBhcmUgYWxsb3dlZCB0cnkgdG8gcmVjb2duaXplIHRoZSBpbnB1dCBmb3IgdGhpcyBvbmUuXG4gICAgICAgICAgICAvLyAxLiAgIGFsbG93IGlmIHRoZSBzZXNzaW9uIGlzIE5PVCBmb3JjZWQgc3RvcHBlZCAoc2VlIHRoZSAuc3RvcCgpIG1ldGhvZClcbiAgICAgICAgICAgIC8vIDIuICAgYWxsb3cgaWYgd2Ugc3RpbGwgaGF2ZW4ndCByZWNvZ25pemVkIGEgZ2VzdHVyZSBpbiB0aGlzIHNlc3Npb24sIG9yIHRoZSB0aGlzIHJlY29nbml6ZXIgaXMgdGhlIG9uZVxuICAgICAgICAgICAgLy8gICAgICB0aGF0IGlzIGJlaW5nIHJlY29nbml6ZWQuXG4gICAgICAgICAgICAvLyAzLiAgIGFsbG93IGlmIHRoZSByZWNvZ25pemVyIGlzIGFsbG93ZWQgdG8gcnVuIHNpbXVsdGFuZW91cyB3aXRoIHRoZSBjdXJyZW50IHJlY29nbml6ZWQgcmVjb2duaXplci5cbiAgICAgICAgICAgIC8vICAgICAgdGhpcyBjYW4gYmUgc2V0dXAgd2l0aCB0aGUgYHJlY29nbml6ZVdpdGgoKWAgbWV0aG9kIG9uIHRoZSByZWNvZ25pemVyLlxuICAgICAgICAgICAgaWYgKHNlc3Npb24uc3RvcHBlZCAhPT0gRk9SQ0VEX1NUT1AgJiYgKCAvLyAxXG4gICAgICAgICAgICAgICAgICAgICFjdXJSZWNvZ25pemVyIHx8IHJlY29nbml6ZXIgPT0gY3VyUmVjb2duaXplciB8fCAvLyAyXG4gICAgICAgICAgICAgICAgICAgIHJlY29nbml6ZXIuY2FuUmVjb2duaXplV2l0aChjdXJSZWNvZ25pemVyKSkpIHsgLy8gM1xuICAgICAgICAgICAgICAgIHJlY29nbml6ZXIucmVjb2duaXplKGlucHV0RGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlY29nbml6ZXIucmVzZXQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIHJlY29nbml6ZXIgaGFzIGJlZW4gcmVjb2duaXppbmcgdGhlIGlucHV0IGFzIGEgdmFsaWQgZ2VzdHVyZSwgd2Ugd2FudCB0byBzdG9yZSB0aGlzIG9uZSBhcyB0aGVcbiAgICAgICAgICAgIC8vIGN1cnJlbnQgYWN0aXZlIHJlY29nbml6ZXIuIGJ1dCBvbmx5IGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBhY3RpdmUgcmVjb2duaXplclxuICAgICAgICAgICAgaWYgKCFjdXJSZWNvZ25pemVyICYmIHJlY29nbml6ZXIuc3RhdGUgJiAoU1RBVEVfQkVHQU4gfCBTVEFURV9DSEFOR0VEIHwgU1RBVEVfRU5ERUQpKSB7XG4gICAgICAgICAgICAgICAgY3VyUmVjb2duaXplciA9IHNlc3Npb24uY3VyUmVjb2duaXplciA9IHJlY29nbml6ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IGEgcmVjb2duaXplciBieSBpdHMgZXZlbnQgbmFtZS5cbiAgICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSByZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge1JlY29nbml6ZXJ8TnVsbH1cbiAgICAgKi9cbiAgICBnZXQ6IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICAgICAgaWYgKHJlY29nbml6ZXIgaW5zdGFuY2VvZiBSZWNvZ25pemVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVjb2duaXplcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVjb2duaXplcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChyZWNvZ25pemVyc1tpXS5vcHRpb25zLmV2ZW50ID09IHJlY29nbml6ZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVjb2duaXplcnNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGFkZCBhIHJlY29nbml6ZXIgdG8gdGhlIG1hbmFnZXJcbiAgICAgKiBleGlzdGluZyByZWNvZ25pemVycyB3aXRoIHRoZSBzYW1lIGV2ZW50IG5hbWUgd2lsbCBiZSByZW1vdmVkXG4gICAgICogQHBhcmFtIHtSZWNvZ25pemVyfSByZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge1JlY29nbml6ZXJ8TWFuYWdlcn1cbiAgICAgKi9cbiAgICBhZGQ6IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICAgICAgaWYgKGludm9rZUFycmF5QXJnKHJlY29nbml6ZXIsICdhZGQnLCB0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZW1vdmUgZXhpc3RpbmdcbiAgICAgICAgdmFyIGV4aXN0aW5nID0gdGhpcy5nZXQocmVjb2duaXplci5vcHRpb25zLmV2ZW50KTtcbiAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZShleGlzdGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlY29nbml6ZXJzLnB1c2gocmVjb2duaXplcik7XG4gICAgICAgIHJlY29nbml6ZXIubWFuYWdlciA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuIHJlY29nbml6ZXI7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZSBhIHJlY29nbml6ZXIgYnkgbmFtZSBvciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IHJlY29nbml6ZXJcbiAgICAgKiBAcmV0dXJucyB7TWFuYWdlcn1cbiAgICAgKi9cbiAgICByZW1vdmU6IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICAgICAgaWYgKGludm9rZUFycmF5QXJnKHJlY29nbml6ZXIsICdyZW1vdmUnLCB0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICByZWNvZ25pemVyID0gdGhpcy5nZXQocmVjb2duaXplcik7XG5cbiAgICAgICAgLy8gbGV0J3MgbWFrZSBzdXJlIHRoaXMgcmVjb2duaXplciBleGlzdHNcbiAgICAgICAgaWYgKHJlY29nbml6ZXIpIHtcbiAgICAgICAgICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBpbkFycmF5KHJlY29nbml6ZXJzLCByZWNvZ25pemVyKTtcblxuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHJlY29nbml6ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBiaW5kIGV2ZW50XG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAgICAgKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSB0aGlzXG4gICAgICovXG4gICAgb246IGZ1bmN0aW9uKGV2ZW50cywgaGFuZGxlcikge1xuICAgICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzO1xuICAgICAgICBlYWNoKHNwbGl0U3RyKGV2ZW50cyksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBoYW5kbGVyc1tldmVudF0gPSBoYW5kbGVyc1tldmVudF0gfHwgW107XG4gICAgICAgICAgICBoYW5kbGVyc1tldmVudF0ucHVzaChoYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiB1bmJpbmQgZXZlbnQsIGxlYXZlIGVtaXQgYmxhbmsgdG8gcmVtb3ZlIGFsbCBoYW5kbGVyc1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudHNcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaGFuZGxlcl1cbiAgICAgKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSB0aGlzXG4gICAgICovXG4gICAgb2ZmOiBmdW5jdGlvbihldmVudHMsIGhhbmRsZXIpIHtcbiAgICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzO1xuICAgICAgICBlYWNoKHNwbGl0U3RyKGV2ZW50cyksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgaGFuZGxlcnNbZXZlbnRdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyc1tldmVudF0gJiYgaGFuZGxlcnNbZXZlbnRdLnNwbGljZShpbkFycmF5KGhhbmRsZXJzW2V2ZW50XSwgaGFuZGxlciksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGVtaXQgZXZlbnQgdG8gdGhlIGxpc3RlbmVyc1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gICAgICovXG4gICAgZW1pdDogZnVuY3Rpb24oZXZlbnQsIGRhdGEpIHtcbiAgICAgICAgLy8gd2UgYWxzbyB3YW50IHRvIHRyaWdnZXIgZG9tIGV2ZW50c1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRvbUV2ZW50cykge1xuICAgICAgICAgICAgdHJpZ2dlckRvbUV2ZW50KGV2ZW50LCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG5vIGhhbmRsZXJzLCBzbyBza2lwIGl0IGFsbFxuICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzW2V2ZW50XSAmJiB0aGlzLmhhbmRsZXJzW2V2ZW50XS5zbGljZSgpO1xuICAgICAgICBpZiAoIWhhbmRsZXJzIHx8ICFoYW5kbGVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGEudHlwZSA9IGV2ZW50O1xuICAgICAgICBkYXRhLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBkYXRhLnNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB3aGlsZSAoaSA8IGhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgaGFuZGxlcnNbaV0oZGF0YSk7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZGVzdHJveSB0aGUgbWFuYWdlciBhbmQgdW5iaW5kcyBhbGwgZXZlbnRzXG4gICAgICogaXQgZG9lc24ndCB1bmJpbmQgZG9tIGV2ZW50cywgdGhhdCBpcyB0aGUgdXNlciBvd24gcmVzcG9uc2liaWxpdHlcbiAgICAgKi9cbiAgICBkZXN0cm95OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50ICYmIHRvZ2dsZUNzc1Byb3BzKHRoaXMsIGZhbHNlKTtcblxuICAgICAgICB0aGlzLmhhbmRsZXJzID0ge307XG4gICAgICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgICAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gbnVsbDtcbiAgICB9XG59O1xuXG4vKipcbiAqIGFkZC9yZW1vdmUgdGhlIGNzcyBwcm9wZXJ0aWVzIGFzIGRlZmluZWQgaW4gbWFuYWdlci5vcHRpb25zLmNzc1Byb3BzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYWRkXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZUNzc1Byb3BzKG1hbmFnZXIsIGFkZCkge1xuICAgIHZhciBlbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuICAgIGlmICghZWxlbWVudC5zdHlsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBwcm9wO1xuICAgIGVhY2gobWFuYWdlci5vcHRpb25zLmNzc1Byb3BzLCBmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICBwcm9wID0gcHJlZml4ZWQoZWxlbWVudC5zdHlsZSwgbmFtZSk7XG4gICAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgICAgIG1hbmFnZXIub2xkQ3NzUHJvcHNbcHJvcF0gPSBlbGVtZW50LnN0eWxlW3Byb3BdO1xuICAgICAgICAgICAgZWxlbWVudC5zdHlsZVtwcm9wXSA9IHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbWVudC5zdHlsZVtwcm9wXSA9IG1hbmFnZXIub2xkQ3NzUHJvcHNbcHJvcF0gfHwgJyc7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIWFkZCkge1xuICAgICAgICBtYW5hZ2VyLm9sZENzc1Byb3BzID0ge307XG4gICAgfVxufVxuXG4vKipcbiAqIHRyaWdnZXIgZG9tIGV2ZW50XG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gKi9cbmZ1bmN0aW9uIHRyaWdnZXJEb21FdmVudChldmVudCwgZGF0YSkge1xuICAgIHZhciBnZXN0dXJlRXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICBnZXN0dXJlRXZlbnQuaW5pdEV2ZW50KGV2ZW50LCB0cnVlLCB0cnVlKTtcbiAgICBnZXN0dXJlRXZlbnQuZ2VzdHVyZSA9IGRhdGE7XG4gICAgZGF0YS50YXJnZXQuZGlzcGF0Y2hFdmVudChnZXN0dXJlRXZlbnQpO1xufVxuXG5hc3NpZ24oSGFtbWVyLCB7XG4gICAgSU5QVVRfU1RBUlQ6IElOUFVUX1NUQVJULFxuICAgIElOUFVUX01PVkU6IElOUFVUX01PVkUsXG4gICAgSU5QVVRfRU5EOiBJTlBVVF9FTkQsXG4gICAgSU5QVVRfQ0FOQ0VMOiBJTlBVVF9DQU5DRUwsXG5cbiAgICBTVEFURV9QT1NTSUJMRTogU1RBVEVfUE9TU0lCTEUsXG4gICAgU1RBVEVfQkVHQU46IFNUQVRFX0JFR0FOLFxuICAgIFNUQVRFX0NIQU5HRUQ6IFNUQVRFX0NIQU5HRUQsXG4gICAgU1RBVEVfRU5ERUQ6IFNUQVRFX0VOREVELFxuICAgIFNUQVRFX1JFQ09HTklaRUQ6IFNUQVRFX1JFQ09HTklaRUQsXG4gICAgU1RBVEVfQ0FOQ0VMTEVEOiBTVEFURV9DQU5DRUxMRUQsXG4gICAgU1RBVEVfRkFJTEVEOiBTVEFURV9GQUlMRUQsXG5cbiAgICBESVJFQ1RJT05fTk9ORTogRElSRUNUSU9OX05PTkUsXG4gICAgRElSRUNUSU9OX0xFRlQ6IERJUkVDVElPTl9MRUZULFxuICAgIERJUkVDVElPTl9SSUdIVDogRElSRUNUSU9OX1JJR0hULFxuICAgIERJUkVDVElPTl9VUDogRElSRUNUSU9OX1VQLFxuICAgIERJUkVDVElPTl9ET1dOOiBESVJFQ1RJT05fRE9XTixcbiAgICBESVJFQ1RJT05fSE9SSVpPTlRBTDogRElSRUNUSU9OX0hPUklaT05UQUwsXG4gICAgRElSRUNUSU9OX1ZFUlRJQ0FMOiBESVJFQ1RJT05fVkVSVElDQUwsXG4gICAgRElSRUNUSU9OX0FMTDogRElSRUNUSU9OX0FMTCxcblxuICAgIE1hbmFnZXI6IE1hbmFnZXIsXG4gICAgSW5wdXQ6IElucHV0LFxuICAgIFRvdWNoQWN0aW9uOiBUb3VjaEFjdGlvbixcblxuICAgIFRvdWNoSW5wdXQ6IFRvdWNoSW5wdXQsXG4gICAgTW91c2VJbnB1dDogTW91c2VJbnB1dCxcbiAgICBQb2ludGVyRXZlbnRJbnB1dDogUG9pbnRlckV2ZW50SW5wdXQsXG4gICAgVG91Y2hNb3VzZUlucHV0OiBUb3VjaE1vdXNlSW5wdXQsXG4gICAgU2luZ2xlVG91Y2hJbnB1dDogU2luZ2xlVG91Y2hJbnB1dCxcblxuICAgIFJlY29nbml6ZXI6IFJlY29nbml6ZXIsXG4gICAgQXR0clJlY29nbml6ZXI6IEF0dHJSZWNvZ25pemVyLFxuICAgIFRhcDogVGFwUmVjb2duaXplcixcbiAgICBQYW46IFBhblJlY29nbml6ZXIsXG4gICAgU3dpcGU6IFN3aXBlUmVjb2duaXplcixcbiAgICBQaW5jaDogUGluY2hSZWNvZ25pemVyLFxuICAgIFJvdGF0ZTogUm90YXRlUmVjb2duaXplcixcbiAgICBQcmVzczogUHJlc3NSZWNvZ25pemVyLFxuXG4gICAgb246IGFkZEV2ZW50TGlzdGVuZXJzLFxuICAgIG9mZjogcmVtb3ZlRXZlbnRMaXN0ZW5lcnMsXG4gICAgZWFjaDogZWFjaCxcbiAgICBtZXJnZTogbWVyZ2UsXG4gICAgZXh0ZW5kOiBleHRlbmQsXG4gICAgYXNzaWduOiBhc3NpZ24sXG4gICAgaW5oZXJpdDogaW5oZXJpdCxcbiAgICBiaW5kRm46IGJpbmRGbixcbiAgICBwcmVmaXhlZDogcHJlZml4ZWRcbn0pO1xuXG4vLyB0aGlzIHByZXZlbnRzIGVycm9ycyB3aGVuIEhhbW1lciBpcyBsb2FkZWQgaW4gdGhlIHByZXNlbmNlIG9mIGFuIEFNRFxuLy8gIHN0eWxlIGxvYWRlciBidXQgYnkgc2NyaXB0IHRhZywgbm90IGJ5IHRoZSBsb2FkZXIuXG52YXIgZnJlZUdsb2JhbCA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6ICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDoge30pKTsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5mcmVlR2xvYmFsLkhhbW1lciA9IEhhbW1lcjtcblxuaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEhhbW1lcjtcbiAgICB9KTtcbn0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gSGFtbWVyO1xufSBlbHNlIHtcbiAgICB3aW5kb3dbZXhwb3J0TmFtZV0gPSBIYW1tZXI7XG59XG5cbn0pKHdpbmRvdywgZG9jdW1lbnQsICdIYW1tZXInKTtcbiIsInZhciBoYXQgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRzLCBiYXNlKSB7XG4gICAgaWYgKCFiYXNlKSBiYXNlID0gMTY7XG4gICAgaWYgKGJpdHMgPT09IHVuZGVmaW5lZCkgYml0cyA9IDEyODtcbiAgICBpZiAoYml0cyA8PSAwKSByZXR1cm4gJzAnO1xuICAgIFxuICAgIHZhciBkaWdpdHMgPSBNYXRoLmxvZyhNYXRoLnBvdygyLCBiaXRzKSkgLyBNYXRoLmxvZyhiYXNlKTtcbiAgICBmb3IgKHZhciBpID0gMjsgZGlnaXRzID09PSBJbmZpbml0eTsgaSAqPSAyKSB7XG4gICAgICAgIGRpZ2l0cyA9IE1hdGgubG9nKE1hdGgucG93KDIsIGJpdHMgLyBpKSkgLyBNYXRoLmxvZyhiYXNlKSAqIGk7XG4gICAgfVxuICAgIFxuICAgIHZhciByZW0gPSBkaWdpdHMgLSBNYXRoLmZsb29yKGRpZ2l0cyk7XG4gICAgXG4gICAgdmFyIHJlcyA9ICcnO1xuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTWF0aC5mbG9vcihkaWdpdHMpOyBpKyspIHtcbiAgICAgICAgdmFyIHggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBiYXNlKS50b1N0cmluZyhiYXNlKTtcbiAgICAgICAgcmVzID0geCArIHJlcztcbiAgICB9XG4gICAgXG4gICAgaWYgKHJlbSkge1xuICAgICAgICB2YXIgYiA9IE1hdGgucG93KGJhc2UsIHJlbSk7XG4gICAgICAgIHZhciB4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYikudG9TdHJpbmcoYmFzZSk7XG4gICAgICAgIHJlcyA9IHggKyByZXM7XG4gICAgfVxuICAgIFxuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChyZXMsIGJhc2UpO1xuICAgIGlmIChwYXJzZWQgIT09IEluZmluaXR5ICYmIHBhcnNlZCA+PSBNYXRoLnBvdygyLCBiaXRzKSkge1xuICAgICAgICByZXR1cm4gaGF0KGJpdHMsIGJhc2UpXG4gICAgfVxuICAgIGVsc2UgcmV0dXJuIHJlcztcbn07XG5cbmhhdC5yYWNrID0gZnVuY3Rpb24gKGJpdHMsIGJhc2UsIGV4cGFuZEJ5KSB7XG4gICAgdmFyIGZuID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdmFyIGl0ZXJzID0gMDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKGl0ZXJzICsrID4gMTApIHtcbiAgICAgICAgICAgICAgICBpZiAoZXhwYW5kQnkpIGJpdHMgKz0gZXhwYW5kQnk7XG4gICAgICAgICAgICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoJ3RvbyBtYW55IElEIGNvbGxpc2lvbnMsIHVzZSBtb3JlIGJpdHMnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgaWQgPSBoYXQoYml0cywgYmFzZSk7XG4gICAgICAgIH0gd2hpbGUgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGhhdHMsIGlkKSk7XG4gICAgICAgIFxuICAgICAgICBoYXRzW2lkXSA9IGRhdGE7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9O1xuICAgIHZhciBoYXRzID0gZm4uaGF0cyA9IHt9O1xuICAgIFxuICAgIGZuLmdldCA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgICByZXR1cm4gZm4uaGF0c1tpZF07XG4gICAgfTtcbiAgICBcbiAgICBmbi5zZXQgPSBmdW5jdGlvbiAoaWQsIHZhbHVlKSB7XG4gICAgICAgIGZuLmhhdHNbaWRdID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBmbjtcbiAgICB9O1xuICAgIFxuICAgIGZuLmJpdHMgPSBiaXRzIHx8IDEyODtcbiAgICBmbi5iYXNlID0gYmFzZSB8fCAxNjtcbiAgICByZXR1cm4gZm47XG59O1xuIiwiaW1wb3J0IGhhdCBmcm9tICdoYXQnO1xuXG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGlkIGdlbmVyYXRvciAvIGNhY2hlIGluc3RhbmNlLlxuICpcbiAqIFlvdSBtYXkgb3B0aW9uYWxseSBwcm92aWRlIGEgc2VlZCB0aGF0IGlzIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAcGFyYW0ge1NlZWR9IHNlZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSWRzKHNlZWQpIHtcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSWRzKSkge1xuICAgIHJldHVybiBuZXcgSWRzKHNlZWQpO1xuICB9XG5cbiAgc2VlZCA9IHNlZWQgfHwgWyAxMjgsIDM2LCAxIF07XG4gIHRoaXMuX3NlZWQgPSBzZWVkLmxlbmd0aCA/IGhhdC5yYWNrKHNlZWRbMF0sIHNlZWRbMV0sIHNlZWRbMl0pIDogc2VlZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIG5leHQgaWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtlbGVtZW50XSBlbGVtZW50IHRvIGJpbmQgdGhlIGlkIHRvXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSBpZFxuICovXG5JZHMucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiB0aGlzLl9zZWVkKGVsZW1lbnQgfHwgdHJ1ZSk7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgbmV4dCBpZCB3aXRoIGEgZ2l2ZW4gcHJlZml4LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZWxlbWVudF0gZWxlbWVudCB0byBiaW5kIHRoZSBpZCB0b1xuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gaWRcbiAqL1xuSWRzLnByb3RvdHlwZS5uZXh0UHJlZml4ZWQgPSBmdW5jdGlvbihwcmVmaXgsIGVsZW1lbnQpIHtcbiAgdmFyIGlkO1xuXG4gIGRvIHtcbiAgICBpZCA9IHByZWZpeCArIHRoaXMubmV4dCh0cnVlKTtcbiAgfSB3aGlsZSAodGhpcy5hc3NpZ25lZChpZCkpO1xuXG4gIC8vIGNsYWltIHtwcmVmaXh9e3JhbmRvbX1cbiAgdGhpcy5jbGFpbShpZCwgZWxlbWVudCk7XG5cbiAgLy8gcmV0dXJuXG4gIHJldHVybiBpZDtcbn07XG5cbi8qKlxuICogTWFudWFsbHkgY2xhaW0gYW4gZXhpc3RpbmcgaWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gW2VsZW1lbnRdIGVsZW1lbnQgdGhlIGlkIGlzIGNsYWltZWQgYnlcbiAqL1xuSWRzLnByb3RvdHlwZS5jbGFpbSA9IGZ1bmN0aW9uKGlkLCBlbGVtZW50KSB7XG4gIHRoaXMuX3NlZWQuc2V0KGlkLCBlbGVtZW50IHx8IHRydWUpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGlkIGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQuXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBpZFxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuSWRzLnByb3RvdHlwZS5hc3NpZ25lZCA9IGZ1bmN0aW9uKGlkKSB7XG4gIHJldHVybiB0aGlzLl9zZWVkLmdldChpZCkgfHwgZmFsc2U7XG59O1xuXG4vKipcbiAqIFVuY2xhaW0gYW4gaWQuXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBpZCB0aGUgaWQgdG8gdW5jbGFpbVxuICovXG5JZHMucHJvdG90eXBlLnVuY2xhaW0gPSBmdW5jdGlvbihpZCkge1xuICBkZWxldGUgdGhpcy5fc2VlZC5oYXRzW2lkXTtcbn07XG5cblxuLyoqXG4gKiBDbGVhciBhbGwgY2xhaW1lZCBpZHMuXG4gKi9cbklkcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgaGF0cyA9IHRoaXMuX3NlZWQuaGF0cyxcbiAgICAgIGlkO1xuXG4gIGZvciAoaWQgaW4gaGF0cykge1xuICAgIHRoaXMudW5jbGFpbShpZCk7XG4gIH1cbn07IiwiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIiwiLyohXG4gKiBqUXVlcnkgSmF2YVNjcmlwdCBMaWJyYXJ5IHYzLjUuMVxuICogaHR0cHM6Ly9qcXVlcnkuY29tL1xuICpcbiAqIEluY2x1ZGVzIFNpenpsZS5qc1xuICogaHR0cHM6Ly9zaXp6bGVqcy5jb20vXG4gKlxuICogQ29weXJpZ2h0IEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMjAtMDUtMDRUMjI6NDlaXG4gKi9cbiggZnVuY3Rpb24oIGdsb2JhbCwgZmFjdG9yeSApIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRpZiAoIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gRm9yIENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciBgd2luZG93YFxuXHRcdC8vIGlzIHByZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuXG5cdFx0Ly8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBkb2N1bWVudGBcblx0XHQvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBtb2R1bGUuZXhwb3J0cy5cblx0XHQvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSByZWFsIGB3aW5kb3dgLlxuXHRcdC8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUoXCJqcXVlcnlcIikod2luZG93KTtcblx0XHQvLyBTZWUgdGlja2V0ICMxNDU0OSBmb3IgbW9yZSBpbmZvLlxuXHRcdG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID9cblx0XHRcdGZhY3RvcnkoIGdsb2JhbCwgdHJ1ZSApIDpcblx0XHRcdGZ1bmN0aW9uKCB3ICkge1xuXHRcdFx0XHRpZiAoICF3LmRvY3VtZW50ICkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvciggXCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50XCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeSggdyApO1xuXHRcdFx0fTtcblx0fSBlbHNlIHtcblx0XHRmYWN0b3J5KCBnbG9iYWwgKTtcblx0fVxuXG4vLyBQYXNzIHRoaXMgaWYgd2luZG93IGlzIG5vdCBkZWZpbmVkIHlldFxufSApKCB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24oIHdpbmRvdywgbm9HbG9iYWwgKSB7XG5cbi8vIEVkZ2UgPD0gMTIgLSAxMyssIEZpcmVmb3ggPD0xOCAtIDQ1KywgSUUgMTAgLSAxMSwgU2FmYXJpIDUuMSAtIDkrLCBpT1MgNiAtIDkuMVxuLy8gdGhyb3cgZXhjZXB0aW9ucyB3aGVuIG5vbi1zdHJpY3QgY29kZSAoZS5nLiwgQVNQLk5FVCA0LjUpIGFjY2Vzc2VzIHN0cmljdCBtb2RlXG4vLyBhcmd1bWVudHMuY2FsbGVlLmNhbGxlciAodHJhYy0xMzMzNSkuIEJ1dCBhcyBvZiBqUXVlcnkgMy4wICgyMDE2KSwgc3RyaWN0IG1vZGUgc2hvdWxkIGJlIGNvbW1vblxuLy8gZW5vdWdoIHRoYXQgYWxsIHN1Y2ggYXR0ZW1wdHMgYXJlIGd1YXJkZWQgaW4gYSB0cnkgYmxvY2suXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGFyciA9IFtdO1xuXG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG5cbnZhciBzbGljZSA9IGFyci5zbGljZTtcblxudmFyIGZsYXQgPSBhcnIuZmxhdCA/IGZ1bmN0aW9uKCBhcnJheSApIHtcblx0cmV0dXJuIGFyci5mbGF0LmNhbGwoIGFycmF5ICk7XG59IDogZnVuY3Rpb24oIGFycmF5ICkge1xuXHRyZXR1cm4gYXJyLmNvbmNhdC5hcHBseSggW10sIGFycmF5ICk7XG59O1xuXG5cbnZhciBwdXNoID0gYXJyLnB1c2g7XG5cbnZhciBpbmRleE9mID0gYXJyLmluZGV4T2Y7XG5cbnZhciBjbGFzczJ0eXBlID0ge307XG5cbnZhciB0b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmc7XG5cbnZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgZm5Ub1N0cmluZyA9IGhhc093bi50b1N0cmluZztcblxudmFyIE9iamVjdEZ1bmN0aW9uU3RyaW5nID0gZm5Ub1N0cmluZy5jYWxsKCBPYmplY3QgKTtcblxudmFyIHN1cHBvcnQgPSB7fTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiBpc0Z1bmN0aW9uKCBvYmogKSB7XG5cbiAgICAgIC8vIFN1cHBvcnQ6IENocm9tZSA8PTU3LCBGaXJlZm94IDw9NTJcbiAgICAgIC8vIEluIHNvbWUgYnJvd3NlcnMsIHR5cGVvZiByZXR1cm5zIFwiZnVuY3Rpb25cIiBmb3IgSFRNTCA8b2JqZWN0PiBlbGVtZW50c1xuICAgICAgLy8gKGkuZS4sIGB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvYmplY3RcIiApID09PSBcImZ1bmN0aW9uXCJgKS5cbiAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY2xhc3NpZnkgKmFueSogRE9NIG5vZGUgYXMgYSBmdW5jdGlvbi5cbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIG9iai5ub2RlVHlwZSAhPT0gXCJudW1iZXJcIjtcbiAgfTtcblxuXG52YXIgaXNXaW5kb3cgPSBmdW5jdGlvbiBpc1dpbmRvdyggb2JqICkge1xuXHRcdHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmogPT09IG9iai53aW5kb3c7XG5cdH07XG5cblxudmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuXG5cblxuXHR2YXIgcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyA9IHtcblx0XHR0eXBlOiB0cnVlLFxuXHRcdHNyYzogdHJ1ZSxcblx0XHRub25jZTogdHJ1ZSxcblx0XHRub01vZHVsZTogdHJ1ZVxuXHR9O1xuXG5cdGZ1bmN0aW9uIERPTUV2YWwoIGNvZGUsIG5vZGUsIGRvYyApIHtcblx0XHRkb2MgPSBkb2MgfHwgZG9jdW1lbnQ7XG5cblx0XHR2YXIgaSwgdmFsLFxuXHRcdFx0c2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoIFwic2NyaXB0XCIgKTtcblxuXHRcdHNjcmlwdC50ZXh0ID0gY29kZTtcblx0XHRpZiAoIG5vZGUgKSB7XG5cdFx0XHRmb3IgKCBpIGluIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA2NCssIEVkZ2UgMTgrXG5cdFx0XHRcdC8vIFNvbWUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGUgXCJub25jZVwiIHByb3BlcnR5IG9uIHNjcmlwdHMuXG5cdFx0XHRcdC8vIE9uIHRoZSBvdGhlciBoYW5kLCBqdXN0IHVzaW5nIGBnZXRBdHRyaWJ1dGVgIGlzIG5vdCBlbm91Z2ggYXNcblx0XHRcdFx0Ly8gdGhlIGBub25jZWAgYXR0cmlidXRlIGlzIHJlc2V0IHRvIGFuIGVtcHR5IHN0cmluZyB3aGVuZXZlciBpdFxuXHRcdFx0XHQvLyBiZWNvbWVzIGJyb3dzaW5nLWNvbnRleHQgY29ubmVjdGVkLlxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9odG1sL2lzc3Vlcy8yMzY5XG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNub25jZS1hdHRyaWJ1dGVzXG5cdFx0XHRcdC8vIFRoZSBgbm9kZS5nZXRBdHRyaWJ1dGVgIGNoZWNrIHdhcyBhZGRlZCBmb3IgdGhlIHNha2Ugb2Zcblx0XHRcdFx0Ly8gYGpRdWVyeS5nbG9iYWxFdmFsYCBzbyB0aGF0IGl0IGNhbiBmYWtlIGEgbm9uY2UtY29udGFpbmluZyBub2RlXG5cdFx0XHRcdC8vIHZpYSBhbiBvYmplY3QuXG5cdFx0XHRcdHZhbCA9IG5vZGVbIGkgXSB8fCBub2RlLmdldEF0dHJpYnV0ZSAmJiBub2RlLmdldEF0dHJpYnV0ZSggaSApO1xuXHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRzY3JpcHQuc2V0QXR0cmlidXRlKCBpLCB2YWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRkb2MuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0ICkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc2NyaXB0ICk7XG5cdH1cblxuXG5mdW5jdGlvbiB0b1R5cGUoIG9iaiApIHtcblx0aWYgKCBvYmogPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gb2JqICsgXCJcIjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seSAoZnVuY3Rpb25pc2ggUmVnRXhwKVxuXHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgP1xuXHRcdGNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwoIG9iaiApIF0gfHwgXCJvYmplY3RcIiA6XG5cdFx0dHlwZW9mIG9iajtcbn1cbi8qIGdsb2JhbCBTeW1ib2wgKi9cbi8vIERlZmluaW5nIHRoaXMgZ2xvYmFsIGluIC5lc2xpbnRyYy5qc29uIHdvdWxkIGNyZWF0ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUgZ2xvYmFsXG4vLyB1bmd1YXJkZWQgaW4gYW5vdGhlciBwbGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8gZGVmaW5lIGdsb2JhbCBvbmx5IGZvciB0aGlzIG1vZHVsZVxuXG5cblxudmFyXG5cdHZlcnNpb24gPSBcIjMuNS4xXCIsXG5cblx0Ly8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBqUXVlcnlcblx0alF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXG5cdFx0Ly8gVGhlIGpRdWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnXG5cdFx0Ly8gTmVlZCBpbml0IGlmIGpRdWVyeSBpcyBjYWxsZWQgKGp1c3QgYWxsb3cgZXJyb3IgdG8gYmUgdGhyb3duIGlmIG5vdCBpbmNsdWRlZClcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCApO1xuXHR9O1xuXG5qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0ge1xuXG5cdC8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWRcblx0anF1ZXJ5OiB2ZXJzaW9uLFxuXG5cdGNvbnN0cnVjdG9yOiBqUXVlcnksXG5cblx0Ly8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwXG5cdGxlbmd0aDogMCxcblxuXHR0b0FycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHR9LFxuXG5cdC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1Jcblx0Ly8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXlcblx0Z2V0OiBmdW5jdGlvbiggbnVtICkge1xuXG5cdFx0Ly8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheVxuXHRcdGlmICggbnVtID09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXRcblx0XHRyZXR1cm4gbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0gXTtcblx0fSxcblxuXHQvLyBUYWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrXG5cdC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KVxuXHRwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblxuXHRcdC8vIEJ1aWxkIGEgbmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0XG5cdFx0dmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1Y3RvcigpLCBlbGVtcyApO1xuXG5cdFx0Ly8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSlcblx0XHRyZXQucHJldk9iamVjdCA9IHRoaXM7XG5cblx0XHQvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldFxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0Ly8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC5cblx0ZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2sgKTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRzbGljZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBzbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICkgKTtcblx0fSxcblxuXHRmaXJzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIDAgKTtcblx0fSxcblxuXHRsYXN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggLTEgKTtcblx0fSxcblxuXHRldmVuOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5ncmVwKCB0aGlzLCBmdW5jdGlvbiggX2VsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gKCBpICsgMSApICUgMjtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRvZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiBpICUgMjtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRlcTogZnVuY3Rpb24oIGkgKSB7XG5cdFx0dmFyIGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0aiA9ICtpICsgKCBpIDwgMCA/IGxlbiA6IDAgKTtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVuID8gWyB0aGlzWyBqIF0gXSA6IFtdICk7XG5cdH0sXG5cblx0ZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IoKTtcblx0fSxcblxuXHQvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuXG5cdC8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLlxuXHRwdXNoOiBwdXNoLFxuXHRzb3J0OiBhcnIuc29ydCxcblx0c3BsaWNlOiBhcnIuc3BsaWNlXG59O1xuXG5qUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsXG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyAwIF0gfHwge30sXG5cdFx0aSA9IDEsXG5cdFx0bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcblx0XHRkZWVwID0gZmFsc2U7XG5cblx0Ly8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvblxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGRlZXAgPSB0YXJnZXQ7XG5cblx0XHQvLyBTa2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0XG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyBpIF0gfHwge307XG5cdFx0aSsrO1xuXHR9XG5cblx0Ly8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpXG5cdGlmICggdHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIiAmJiAhaXNGdW5jdGlvbiggdGFyZ2V0ICkgKSB7XG5cdFx0dGFyZ2V0ID0ge307XG5cdH1cblxuXHQvLyBFeHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWRcblx0aWYgKCBpID09PSBsZW5ndGggKSB7XG5cdFx0dGFyZ2V0ID0gdGhpcztcblx0XHRpLS07XG5cdH1cblxuXHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblxuXHRcdC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcblx0XHRpZiAoICggb3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdICkgIT0gbnVsbCApIHtcblxuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxuXHRcdFx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdFx0XHRjb3B5ID0gb3B0aW9uc1sgbmFtZSBdO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgT2JqZWN0LnByb3RvdHlwZSBwb2xsdXRpb25cblx0XHRcdFx0Ly8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcFxuXHRcdFx0XHRpZiAoIG5hbWUgPT09IFwiX19wcm90b19fXCIgfHwgdGFyZ2V0ID09PSBjb3B5ICkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzXG5cdFx0XHRcdGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvcHkgKSB8fFxuXHRcdFx0XHRcdCggY29weUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KCBjb3B5ICkgKSApICkge1xuXHRcdFx0XHRcdHNyYyA9IHRhcmdldFsgbmFtZSBdO1xuXG5cdFx0XHRcdFx0Ly8gRW5zdXJlIHByb3BlciB0eXBlIGZvciB0aGUgc291cmNlIHZhbHVlXG5cdFx0XHRcdFx0aWYgKCBjb3B5SXNBcnJheSAmJiAhQXJyYXkuaXNBcnJheSggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IFtdO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoICFjb3B5SXNBcnJheSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHNyYyApICkge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSB7fTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvcHlJc0FycmF5ID0gZmFsc2U7XG5cblx0XHRcdFx0XHQvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW1cblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5ICk7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xuXHRcdFx0XHR9IGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBjb3B5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3Rcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBVbmlxdWUgZm9yIGVhY2ggY29weSBvZiBqUXVlcnkgb24gdGhlIHBhZ2Vcblx0ZXhwYW5kbzogXCJqUXVlcnlcIiArICggdmVyc2lvbiArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXFxEL2csIFwiXCIgKSxcblxuXHQvLyBBc3N1bWUgalF1ZXJ5IGlzIHJlYWR5IHdpdGhvdXQgdGhlIHJlYWR5IG1vZHVsZVxuXHRpc1JlYWR5OiB0cnVlLFxuXG5cdGVycm9yOiBmdW5jdGlvbiggbXNnICkge1xuXHRcdHRocm93IG5ldyBFcnJvciggbXNnICk7XG5cdH0sXG5cblx0bm9vcDogZnVuY3Rpb24oKSB7fSxcblxuXHRpc1BsYWluT2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBwcm90bywgQ3RvcjtcblxuXHRcdC8vIERldGVjdCBvYnZpb3VzIG5lZ2F0aXZlc1xuXHRcdC8vIFVzZSB0b1N0cmluZyBpbnN0ZWFkIG9mIGpRdWVyeS50eXBlIHRvIGNhdGNoIGhvc3Qgb2JqZWN0c1xuXHRcdGlmICggIW9iaiB8fCB0b1N0cmluZy5jYWxsKCBvYmogKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRwcm90byA9IGdldFByb3RvKCBvYmogKTtcblxuXHRcdC8vIE9iamVjdHMgd2l0aCBubyBwcm90b3R5cGUgKGUuZy4sIGBPYmplY3QuY3JlYXRlKCBudWxsIClgKSBhcmUgcGxhaW5cblx0XHRpZiAoICFwcm90byApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIE9iamVjdHMgd2l0aCBwcm90b3R5cGUgYXJlIHBsYWluIGlmZiB0aGV5IHdlcmUgY29uc3RydWN0ZWQgYnkgYSBnbG9iYWwgT2JqZWN0IGZ1bmN0aW9uXG5cdFx0Q3RvciA9IGhhc093bi5jYWxsKCBwcm90bywgXCJjb25zdHJ1Y3RvclwiICkgJiYgcHJvdG8uY29uc3RydWN0b3I7XG5cdFx0cmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgZm5Ub1N0cmluZy5jYWxsKCBDdG9yICkgPT09IE9iamVjdEZ1bmN0aW9uU3RyaW5nO1xuXHR9LFxuXG5cdGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIG5hbWU7XG5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgcHJvdmlkZWQgY29udGV4dDsgZmFsbHMgYmFjayB0byB0aGUgZ2xvYmFsIG9uZVxuXHQvLyBpZiBub3Qgc3BlY2lmaWVkLlxuXHRnbG9iYWxFdmFsOiBmdW5jdGlvbiggY29kZSwgb3B0aW9ucywgZG9jICkge1xuXHRcdERPTUV2YWwoIGNvZGUsIHsgbm9uY2U6IG9wdGlvbnMgJiYgb3B0aW9ucy5ub25jZSB9LCBkb2MgKTtcblx0fSxcblxuXHRlYWNoOiBmdW5jdGlvbiggb2JqLCBjYWxsYmFjayApIHtcblx0XHR2YXIgbGVuZ3RoLCBpID0gMDtcblxuXHRcdGlmICggaXNBcnJheUxpa2UoIG9iaiApICkge1xuXHRcdFx0bGVuZ3RoID0gb2JqLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIG9iaiApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkge1xuXHRcdHZhciByZXQgPSByZXN1bHRzIHx8IFtdO1xuXG5cdFx0aWYgKCBhcnIgIT0gbnVsbCApIHtcblx0XHRcdGlmICggaXNBcnJheUxpa2UoIE9iamVjdCggYXJyICkgKSApIHtcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCByZXQsXG5cdFx0XHRcdFx0dHlwZW9mIGFyciA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0WyBhcnIgXSA6IGFyclxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5jYWxsKCByZXQsIGFyciApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0aW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHtcblx0XHRyZXR1cm4gYXJyID09IG51bGwgPyAtMSA6IGluZGV4T2YuY2FsbCggYXJyLCBlbGVtLCBpICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkge1xuXHRcdHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCxcblx0XHRcdGogPSAwLFxuXHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0Zmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07XG5cdFx0fVxuXG5cdFx0Zmlyc3QubGVuZ3RoID0gaTtcblxuXHRcdHJldHVybiBmaXJzdDtcblx0fSxcblxuXHRncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7XG5cdFx0dmFyIGNhbGxiYWNrSW52ZXJzZSxcblx0XHRcdG1hdGNoZXMgPSBbXSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxuXHRcdFx0Y2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0O1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtc1xuXHRcdC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG5cdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcblx0XHRcdGlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHtcblx0XHRcdFx0bWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGNoZXM7XG5cdH0sXG5cblx0Ly8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkge1xuXHRcdHZhciBsZW5ndGgsIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRyZXQgPSBbXTtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggZWxlbXMgKSApIHtcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsXG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gZWxlbXMgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0XHRyZXR1cm4gZmxhdCggcmV0ICk7XG5cdH0sXG5cblx0Ly8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzXG5cdGd1aWQ6IDEsXG5cblx0Ly8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyXG5cdC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8gZXhpc3QuXG5cdHN1cHBvcnQ6IHN1cHBvcnRcbn0gKTtcblxuaWYgKCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdGpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBdO1xufVxuXG4vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXBcbmpRdWVyeS5lYWNoKCBcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoIFwiIFwiICksXG5mdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdGNsYXNzMnR5cGVbIFwiW29iamVjdCBcIiArIG5hbWUgKyBcIl1cIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xufSApO1xuXG5mdW5jdGlvbiBpc0FycmF5TGlrZSggb2JqICkge1xuXG5cdC8vIFN1cHBvcnQ6IHJlYWwgaU9TIDguMiBvbmx5IChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcilcblx0Ly8gYGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KVxuXHQvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXNcblx0Ly8gcmVnYXJkaW5nIE5vZGVsaXN0IGxlbmd0aCBpbiBJRVxuXHR2YXIgbGVuZ3RoID0gISFvYmogJiYgXCJsZW5ndGhcIiBpbiBvYmogJiYgb2JqLmxlbmd0aCxcblx0XHR0eXBlID0gdG9UeXBlKCBvYmogKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIG9iaiApIHx8IGlzV2luZG93KCBvYmogKSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHlwZSA9PT0gXCJhcnJheVwiIHx8IGxlbmd0aCA9PT0gMCB8fFxuXHRcdHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7XG59XG52YXIgU2l6emxlID1cbi8qIVxuICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgdjIuMy41XG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanMuZm91bmRhdGlvbi9cbiAqXG4gKiBEYXRlOiAyMDIwLTAzLTE0XG4gKi9cbiggZnVuY3Rpb24oIHdpbmRvdyApIHtcbnZhciBpLFxuXHRzdXBwb3J0LFxuXHRFeHByLFxuXHRnZXRUZXh0LFxuXHRpc1hNTCxcblx0dG9rZW5pemUsXG5cdGNvbXBpbGUsXG5cdHNlbGVjdCxcblx0b3V0ZXJtb3N0Q29udGV4dCxcblx0c29ydElucHV0LFxuXHRoYXNEdXBsaWNhdGUsXG5cblx0Ly8gTG9jYWwgZG9jdW1lbnQgdmFyc1xuXHRzZXREb2N1bWVudCxcblx0ZG9jdW1lbnQsXG5cdGRvY0VsZW0sXG5cdGRvY3VtZW50SXNIVE1MLFxuXHRyYnVnZ3lRU0EsXG5cdHJidWdneU1hdGNoZXMsXG5cdG1hdGNoZXMsXG5cdGNvbnRhaW5zLFxuXG5cdC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGFcblx0ZXhwYW5kbyA9IFwic2l6emxlXCIgKyAxICogbmV3IERhdGUoKSxcblx0cHJlZmVycmVkRG9jID0gd2luZG93LmRvY3VtZW50LFxuXHRkaXJydW5zID0gMCxcblx0ZG9uZSA9IDAsXG5cdGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gMDtcblx0fSxcblxuXHQvLyBJbnN0YW5jZSBtZXRob2RzXG5cdGhhc093biA9ICgge30gKS5oYXNPd25Qcm9wZXJ0eSxcblx0YXJyID0gW10sXG5cdHBvcCA9IGFyci5wb3AsXG5cdHB1c2hOYXRpdmUgPSBhcnIucHVzaCxcblx0cHVzaCA9IGFyci5wdXNoLFxuXHRzbGljZSA9IGFyci5zbGljZSxcblxuXHQvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgYXMgaXQncyBmYXN0ZXIgdGhhbiBuYXRpdmVcblx0Ly8gaHR0cHM6Ly9qc3BlcmYuY29tL3Rob3ItaW5kZXhvZi12cy1mb3IvNVxuXHRpbmRleE9mID0gZnVuY3Rpb24oIGxpc3QsIGVsZW0gKSB7XG5cdFx0dmFyIGkgPSAwLFxuXHRcdFx0bGVuID0gbGlzdC5sZW5ndGg7XG5cdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRpZiAoIGxpc3RbIGkgXSA9PT0gZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRib29sZWFucyA9IFwiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufFwiICtcblx0XHRcImlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWRcIixcblxuXHQvLyBSZWd1bGFyIGV4cHJlc3Npb25zXG5cblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI3doaXRlc3BhY2Vcblx0d2hpdGVzcGFjZSA9IFwiW1xcXFx4MjBcXFxcdFxcXFxyXFxcXG5cXFxcZl1cIixcblxuXHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXN5bnRheC0zLyNpZGVudC10b2tlbi1kaWFncmFtXG5cdGlkZW50aWZpZXIgPSBcIig/OlxcXFxcXFxcW1xcXFxkYS1mQS1GXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIj98XFxcXFxcXFxbXlxcXFxyXFxcXG5cXFxcZl18W1xcXFx3LV18W15cXDAtXFxcXHg3Zl0pK1wiLFxuXG5cdC8vIEF0dHJpYnV0ZSBzZWxlY3RvcnM6IGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9yc1xuXHRhdHRyaWJ1dGVzID0gXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcIiArIHdoaXRlc3BhY2UgK1xuXG5cdFx0Ly8gT3BlcmF0b3IgKGNhcHR1cmUgMilcblx0XHRcIiooWypeJHwhfl0/PSlcIiArIHdoaXRlc3BhY2UgK1xuXG5cdFx0Ly8gXCJBdHRyaWJ1dGUgdmFsdWVzIG11c3QgYmUgQ1NTIGlkZW50aWZpZXJzIFtjYXB0dXJlIDVdXG5cdFx0Ly8gb3Igc3RyaW5ncyBbY2FwdHVyZSAzIG9yIGNhcHR1cmUgNF1cIlxuXHRcdFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBpZGVudGlmaWVyICsgXCIpKXwpXCIgK1xuXHRcdHdoaXRlc3BhY2UgKyBcIipcXFxcXVwiLFxuXG5cdHBzZXVkb3MgPSBcIjooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XFxcXCgoXCIgK1xuXG5cdFx0Ly8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czpcblx0XHQvLyAxLiBxdW90ZWQgKGNhcHR1cmUgMzsgY2FwdHVyZSA0IG9yIGNhcHR1cmUgNSlcblx0XHRcIignKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCIpfFwiICtcblxuXHRcdC8vIDIuIHNpbXBsZSAoY2FwdHVyZSA2KVxuXHRcdFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiICsgYXR0cmlidXRlcyArIFwiKSopfFwiICtcblxuXHRcdC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMilcblx0XHRcIi4qXCIgK1xuXHRcdFwiKVxcXFwpfClcIixcblxuXHQvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyXG5cdHJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwiK1wiLCBcImdcIiApLFxuXHRydHJpbSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArXG5cdFx0d2hpdGVzcGFjZSArIFwiKyRcIiwgXCJnXCIgKSxcblxuXHRyY29tbWEgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiosXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblx0cmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFs+K35dfFwiICsgd2hpdGVzcGFjZSArIFwiKVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XCIqXCIgKSxcblx0cmRlc2NlbmQgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCJ8PlwiICksXG5cblx0cnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSxcblx0cmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCBcIl5cIiArIGlkZW50aWZpZXIgKyBcIiRcIiApLFxuXG5cdG1hdGNoRXhwciA9IHtcblx0XHRcIklEXCI6IG5ldyBSZWdFeHAoIFwiXiMoXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIkNMQVNTXCI6IG5ldyBSZWdFeHAoIFwiXlxcXFwuKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJUQUdcIjogbmV3IFJlZ0V4cCggXCJeKFwiICsgaWRlbnRpZmllciArIFwifFsqXSlcIiApLFxuXHRcdFwiQVRUUlwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIGF0dHJpYnV0ZXMgKSxcblx0XHRcIlBTRVVET1wiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHBzZXVkb3MgKSxcblx0XHRcIkNISUxEXCI6IG5ldyBSZWdFeHAoIFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIiArXG5cdFx0XHR3aGl0ZXNwYWNlICsgXCIqKGV2ZW58b2RkfCgoWystXXwpKFxcXFxkKilufClcIiArIHdoaXRlc3BhY2UgKyBcIiooPzooWystXXwpXCIgK1xuXHRcdFx0d2hpdGVzcGFjZSArIFwiKihcXFxcZCspfCkpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KVwiLCBcImlcIiApLFxuXHRcdFwiYm9vbFwiOiBuZXcgUmVnRXhwKCBcIl4oPzpcIiArIGJvb2xlYW5zICsgXCIpJFwiLCBcImlcIiApLFxuXG5cdFx0Ly8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpXG5cdFx0Ly8gV2UgdXNlIHRoaXMgZm9yIFBPUyBtYXRjaGluZyBpbiBgc2VsZWN0YFxuXHRcdFwibmVlZHNDb250ZXh0XCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKigoPzotXFxcXGQpP1xcXFxkKilcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpKD89W14tXXwkKVwiLCBcImlcIiApXG5cdH0sXG5cblx0cmh0bWwgPSAvSFRNTCQvaSxcblx0cmlucHV0cyA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJoZWFkZXIgPSAvXmhcXGQkL2ksXG5cblx0cm5hdGl2ZSA9IC9eW157XStcXHtcXHMqXFxbbmF0aXZlIFxcdy8sXG5cblx0Ly8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzXG5cdHJxdWlja0V4cHIgPSAvXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkLyxcblxuXHRyc2libGluZyA9IC9bK35dLyxcblxuXHQvLyBDU1MgZXNjYXBlc1xuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzXG5cdHJ1bmVzY2FwZSA9IG5ldyBSZWdFeHAoIFwiXFxcXFxcXFxbXFxcXGRhLWZBLUZdezEsNn1cIiArIHdoaXRlc3BhY2UgKyBcIj98XFxcXFxcXFwoW15cXFxcclxcXFxuXFxcXGZdKVwiLCBcImdcIiApLFxuXHRmdW5lc2NhcGUgPSBmdW5jdGlvbiggZXNjYXBlLCBub25IZXggKSB7XG5cdFx0dmFyIGhpZ2ggPSBcIjB4XCIgKyBlc2NhcGUuc2xpY2UoIDEgKSAtIDB4MTAwMDA7XG5cblx0XHRyZXR1cm4gbm9uSGV4ID9cblxuXHRcdFx0Ly8gU3RyaXAgdGhlIGJhY2tzbGFzaCBwcmVmaXggZnJvbSBhIG5vbi1oZXggZXNjYXBlIHNlcXVlbmNlXG5cdFx0XHRub25IZXggOlxuXG5cdFx0XHQvLyBSZXBsYWNlIGEgaGV4YWRlY2ltYWwgZXNjYXBlIHNlcXVlbmNlIHdpdGggdGhlIGVuY29kZWQgVW5pY29kZSBjb2RlIHBvaW50XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExK1xuXHRcdFx0Ly8gRm9yIHZhbHVlcyBvdXRzaWRlIHRoZSBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgKEJNUCksIG1hbnVhbGx5IGNvbnN0cnVjdCBhXG5cdFx0XHQvLyBzdXJyb2dhdGUgcGFpclxuXHRcdFx0aGlnaCA8IDAgP1xuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoICsgMHgxMDAwMCApIDpcblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwICk7XG5cdH0sXG5cblx0Ly8gQ1NTIHN0cmluZy9pZGVudGlmaWVyIHNlcmlhbGl6YXRpb25cblx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNjb21tb24tc2VyaWFsaXppbmctaWRpb21zXG5cdHJjc3Nlc2NhcGUgPSAvKFtcXDAtXFx4MWZcXHg3Zl18Xi0/XFxkKXxeLSR8W15cXDAtXFx4MWZcXHg3Zi1cXHVGRkZGXFx3LV0vZyxcblx0ZmNzc2VzY2FwZSA9IGZ1bmN0aW9uKCBjaCwgYXNDb2RlUG9pbnQgKSB7XG5cdFx0aWYgKCBhc0NvZGVQb2ludCApIHtcblxuXHRcdFx0Ly8gVSswMDAwIE5VTEwgYmVjb21lcyBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSXG5cdFx0XHRpZiAoIGNoID09PSBcIlxcMFwiICkge1xuXHRcdFx0XHRyZXR1cm4gXCJcXHVGRkZEXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnRyb2wgY2hhcmFjdGVycyBhbmQgKGRlcGVuZGVudCB1cG9uIHBvc2l0aW9uKSBudW1iZXJzIGdldCBlc2NhcGVkIGFzIGNvZGUgcG9pbnRzXG5cdFx0XHRyZXR1cm4gY2guc2xpY2UoIDAsIC0xICkgKyBcIlxcXFxcIiArXG5cdFx0XHRcdGNoLmNoYXJDb2RlQXQoIGNoLmxlbmd0aCAtIDEgKS50b1N0cmluZyggMTYgKSArIFwiIFwiO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyIHBvdGVudGlhbGx5LXNwZWNpYWwgQVNDSUkgY2hhcmFjdGVycyBnZXQgYmFja3NsYXNoLWVzY2FwZWRcblx0XHRyZXR1cm4gXCJcXFxcXCIgKyBjaDtcblx0fSxcblxuXHQvLyBVc2VkIGZvciBpZnJhbWVzXG5cdC8vIFNlZSBzZXREb2N1bWVudCgpXG5cdC8vIFJlbW92aW5nIHRoZSBmdW5jdGlvbiB3cmFwcGVyIGNhdXNlcyBhIFwiUGVybWlzc2lvbiBEZW5pZWRcIlxuXHQvLyBlcnJvciBpbiBJRVxuXHR1bmxvYWRIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG5cdFx0c2V0RG9jdW1lbnQoKTtcblx0fSxcblxuXHRpbkRpc2FibGVkRmllbGRzZXQgPSBhZGRDb21iaW5hdG9yKFxuXHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImZpZWxkc2V0XCI7XG5cdFx0fSxcblx0XHR7IGRpcjogXCJwYXJlbnROb2RlXCIsIG5leHQ6IFwibGVnZW5kXCIgfVxuXHQpO1xuXG4vLyBPcHRpbWl6ZSBmb3IgcHVzaC5hcHBseSggXywgTm9kZUxpc3QgKVxudHJ5IHtcblx0cHVzaC5hcHBseShcblx0XHQoIGFyciA9IHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzICkgKSxcblx0XHRwcmVmZXJyZWREb2MuY2hpbGROb2Rlc1xuXHQpO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wXG5cdC8vIERldGVjdCBzaWxlbnRseSBmYWlsaW5nIHB1c2guYXBwbHlcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHRhcnJbIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzLmxlbmd0aCBdLm5vZGVUeXBlO1xufSBjYXRjaCAoIGUgKSB7XG5cdHB1c2ggPSB7IGFwcGx5OiBhcnIubGVuZ3RoID9cblxuXHRcdC8vIExldmVyYWdlIHNsaWNlIGlmIHBvc3NpYmxlXG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0cHVzaE5hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKCBlbHMgKSApO1xuXHRcdH0gOlxuXG5cdFx0Ly8gU3VwcG9ydDogSUU8OVxuXHRcdC8vIE90aGVyd2lzZSBhcHBlbmQgZGlyZWN0bHlcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHR2YXIgaiA9IHRhcmdldC5sZW5ndGgsXG5cdFx0XHRcdGkgPSAwO1xuXG5cdFx0XHQvLyBDYW4ndCB0cnVzdCBOb2RlTGlzdC5sZW5ndGhcblx0XHRcdHdoaWxlICggKCB0YXJnZXRbIGorKyBdID0gZWxzWyBpKysgXSApICkge31cblx0XHRcdHRhcmdldC5sZW5ndGggPSBqIC0gMTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBtLCBpLCBlbGVtLCBuaWQsIG1hdGNoLCBncm91cHMsIG5ld1NlbGVjdG9yLFxuXHRcdG5ld0NvbnRleHQgPSBjb250ZXh0ICYmIGNvbnRleHQub3duZXJEb2N1bWVudCxcblxuXHRcdC8vIG5vZGVUeXBlIGRlZmF1bHRzIHRvIDksIHNpbmNlIGNvbnRleHQgZGVmYXVsdHMgdG8gZG9jdW1lbnRcblx0XHRub2RlVHlwZSA9IGNvbnRleHQgPyBjb250ZXh0Lm5vZGVUeXBlIDogOTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBSZXR1cm4gZWFybHkgZnJvbSBjYWxscyB3aXRoIGludmFsaWQgc2VsZWN0b3Igb3IgY29udGV4dFxuXHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiB8fCAhc2VsZWN0b3IgfHxcblx0XHRub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSAmJiBub2RlVHlwZSAhPT0gMTEgKSB7XG5cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fVxuXG5cdC8vIFRyeSB0byBzaG9ydGN1dCBmaW5kIG9wZXJhdGlvbnMgKGFzIG9wcG9zZWQgdG8gZmlsdGVycykgaW4gSFRNTCBkb2N1bWVudHNcblx0aWYgKCAhc2VlZCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHRcdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuXG5cdFx0aWYgKCBkb2N1bWVudElzSFRNTCApIHtcblxuXHRcdFx0Ly8gSWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBhIFwiZ2V0KkJ5KlwiIERPTSBtZXRob2Rcblx0XHRcdC8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdClcblx0XHRcdGlmICggbm9kZVR5cGUgIT09IDExICYmICggbWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHQvLyBJRCBzZWxlY3RvclxuXHRcdFx0XHRpZiAoICggbSA9IG1hdGNoWyAxIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvY3VtZW50IGNvbnRleHRcblx0XHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRcdGlmICggZWxlbS5pZCA9PT0gbSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBFbGVtZW50IGNvbnRleHRcblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAmJiAoIGVsZW0gPSBuZXdDb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkgKSAmJlxuXHRcdFx0XHRcdFx0XHRjb250YWlucyggY29udGV4dCwgZWxlbSApICYmXG5cdFx0XHRcdFx0XHRcdGVsZW0uaWQgPT09IG0gKSB7XG5cblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUeXBlIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWyAyIF0gKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHRcdC8vIENsYXNzIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggbSA9IG1hdGNoWyAzIF0gKSAmJiBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiZcblx0XHRcdFx0XHRjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRha2UgYWR2YW50YWdlIG9mIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdGlmICggc3VwcG9ydC5xc2EgJiZcblx0XHRcdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXSAmJlxuXHRcdFx0XHQoICFyYnVnZ3lRU0EgfHwgIXJidWdneVFTQS50ZXN0KCBzZWxlY3RvciApICkgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA4IG9ubHlcblx0XHRcdFx0Ly8gRXhjbHVkZSBvYmplY3QgZWxlbWVudHNcblx0XHRcdFx0KCBub2RlVHlwZSAhPT0gMSB8fCBjb250ZXh0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwib2JqZWN0XCIgKSApIHtcblxuXHRcdFx0XHRuZXdTZWxlY3RvciA9IHNlbGVjdG9yO1xuXHRcdFx0XHRuZXdDb250ZXh0ID0gY29udGV4dDtcblxuXHRcdFx0XHQvLyBxU0EgY29uc2lkZXJzIGVsZW1lbnRzIG91dHNpZGUgYSBzY29waW5nIHJvb3Qgd2hlbiBldmFsdWF0aW5nIGNoaWxkIG9yXG5cdFx0XHRcdC8vIGRlc2NlbmRhbnQgY29tYmluYXRvcnMsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQuXG5cdFx0XHRcdC8vIEluIHN1Y2ggY2FzZXMsIHdlIHdvcmsgYXJvdW5kIHRoZSBiZWhhdmlvciBieSBwcmVmaXhpbmcgZXZlcnkgc2VsZWN0b3IgaW4gdGhlXG5cdFx0XHRcdC8vIGxpc3Qgd2l0aCBhbiBJRCBzZWxlY3RvciByZWZlcmVuY2luZyB0aGUgc2NvcGUgY29udGV4dC5cblx0XHRcdFx0Ly8gVGhlIHRlY2huaXF1ZSBoYXMgdG8gYmUgdXNlZCBhcyB3ZWxsIHdoZW4gYSBsZWFkaW5nIGNvbWJpbmF0b3IgaXMgdXNlZFxuXHRcdFx0XHQvLyBhcyBzdWNoIHNlbGVjdG9ycyBhcmUgbm90IHJlY29nbml6ZWQgYnkgcXVlcnlTZWxlY3RvckFsbC5cblx0XHRcdFx0Ly8gVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoaXMgdGVjaG5pcXVlLlxuXHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0KCByZGVzY2VuZC50ZXN0KCBzZWxlY3RvciApIHx8IHJjb21iaW5hdG9ycy50ZXN0KCBzZWxlY3RvciApICkgKSB7XG5cblx0XHRcdFx0XHQvLyBFeHBhbmQgY29udGV4dCBmb3Igc2libGluZyBzZWxlY3RvcnNcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcblx0XHRcdFx0XHRcdGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBXZSBjYW4gdXNlIDpzY29wZSBpbnN0ZWFkIG9mIHRoZSBJRCBoYWNrIGlmIHRoZSBicm93c2VyXG5cdFx0XHRcdFx0Ly8gc3VwcG9ydHMgaXQgJiBpZiB3ZSdyZSBub3QgY2hhbmdpbmcgdGhlIGNvbnRleHQuXG5cdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICE9PSBjb250ZXh0IHx8ICFzdXBwb3J0LnNjb3BlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBDYXB0dXJlIHRoZSBjb250ZXh0IElELCBzZXR0aW5nIGl0IGZpcnN0IGlmIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFx0aWYgKCAoIG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCBcImlkXCIgKSApICkge1xuXHRcdFx0XHRcdFx0XHRuaWQgPSBuaWQucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgKCBuaWQgPSBleHBhbmRvICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmVmaXggZXZlcnkgc2VsZWN0b3IgaW4gdGhlIGxpc3Rcblx0XHRcdFx0XHRncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHRcdFx0XHRpID0gZ3JvdXBzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGdyb3Vwc1sgaSBdID0gKCBuaWQgPyBcIiNcIiArIG5pZCA6IFwiOnNjb3BlXCIgKSArIFwiIFwiICtcblx0XHRcdFx0XHRcdFx0dG9TZWxlY3RvciggZ3JvdXBzWyBpIF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bmV3U2VsZWN0b3IgPSBncm91cHMuam9pbiggXCIsXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cyxcblx0XHRcdFx0XHRcdG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH0gY2F0Y2ggKCBxc2FFcnJvciApIHtcblx0XHRcdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdGlmICggbmlkID09PSBleHBhbmRvICkge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFsbCBvdGhlcnNcblx0cmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoXG4gKlx0cHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aClcbiAqXHRkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuXHR2YXIga2V5cyA9IFtdO1xuXG5cdGZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gVXNlIChrZXkgKyBcIiBcIikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1Nylcblx0XHRpZiAoIGtleXMucHVzaCgga2V5ICsgXCIgXCIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7XG5cblx0XHRcdC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllc1xuXHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTtcblx0XHR9XG5cdFx0cmV0dXJuICggY2FjaGVbIGtleSArIFwiIFwiIF0gPSB2YWx1ZSApO1xuXHR9XG5cdHJldHVybiBjYWNoZTtcbn1cblxuLyoqXG4gKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenpsZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmtcbiAqL1xuZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHtcblx0Zm5bIGV4cGFuZG8gXSA9IHRydWU7XG5cdHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGVsZW1lbnQgYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xuXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImZpZWxkc2V0XCIgKTtcblxuXHR0cnkge1xuXHRcdHJldHVybiAhIWZuKCBlbCApO1xuXHR9IGNhdGNoICggZSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZmluYWxseSB7XG5cblx0XHQvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHRcblx0XHRpZiAoIGVsLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApO1xuXHRcdH1cblxuXHRcdC8vIHJlbGVhc2UgbWVtb3J5IGluIElFXG5cdFx0ZWwgPSBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogQWRkcyB0aGUgc2FtZSBoYW5kbGVyIGZvciBhbGwgb2YgdGhlIHNwZWNpZmllZCBhdHRyc1xuICogQHBhcmFtIHtTdHJpbmd9IGF0dHJzIFBpcGUtc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBhcHBsaWVkXG4gKi9cbmZ1bmN0aW9uIGFkZEhhbmRsZSggYXR0cnMsIGhhbmRsZXIgKSB7XG5cdHZhciBhcnIgPSBhdHRycy5zcGxpdCggXCJ8XCIgKSxcblx0XHRpID0gYXJyLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRFeHByLmF0dHJIYW5kbGVbIGFyclsgaSBdIF0gPSBoYW5kbGVyO1xuXHR9XG59XG5cbi8qKlxuICogQ2hlY2tzIGRvY3VtZW50IG9yZGVyIG9mIHR3byBzaWJsaW5nc1xuICogQHBhcmFtIHtFbGVtZW50fSBhXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0aGFuIDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBhIGZvbGxvd3MgYlxuICovXG5mdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7XG5cdHZhciBjdXIgPSBiICYmIGEsXG5cdFx0ZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xuXG5cdC8vIFVzZSBJRSBzb3VyY2VJbmRleCBpZiBhdmFpbGFibGUgb24gYm90aCBub2Rlc1xuXHRpZiAoIGRpZmYgKSB7XG5cdFx0cmV0dXJuIGRpZmY7XG5cdH1cblxuXHQvLyBDaGVjayBpZiBiIGZvbGxvd3MgYVxuXHRpZiAoIGN1ciApIHtcblx0XHR3aGlsZSAoICggY3VyID0gY3VyLm5leHRTaWJsaW5nICkgKSB7XG5cdFx0XHRpZiAoIGN1ciA9PT0gYiApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhID8gMSA6IC0xO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgaW5wdXQgdHlwZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0UHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBidXR0b25zXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gKCBuYW1lID09PSBcImlucHV0XCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIiApICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIDplbmFibGVkLzpkaXNhYmxlZFxuICogQHBhcmFtIHtCb29sZWFufSBkaXNhYmxlZCB0cnVlIGZvciA6ZGlzYWJsZWQ7IGZhbHNlIGZvciA6ZW5hYmxlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZGlzYWJsZWQgKSB7XG5cblx0Ly8gS25vd24gOmRpc2FibGVkIGZhbHNlIHBvc2l0aXZlczogZmllbGRzZXRbZGlzYWJsZWRdID4gbGVnZW5kOm50aC1vZi10eXBlKG4rMikgOmNhbi1kaXNhYmxlXG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE9ubHkgY2VydGFpbiBlbGVtZW50cyBjYW4gbWF0Y2ggOmVuYWJsZWQgb3IgOmRpc2FibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZW5hYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWRpc2FibGVkXG5cdFx0aWYgKCBcImZvcm1cIiBpbiBlbGVtICkge1xuXG5cdFx0XHQvLyBDaGVjayBmb3IgaW5oZXJpdGVkIGRpc2FibGVkbmVzcyBvbiByZWxldmFudCBub24tZGlzYWJsZWQgZWxlbWVudHM6XG5cdFx0XHQvLyAqIGxpc3RlZCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBmaWVsZHNldFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NhdGVnb3J5LWxpc3RlZFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtZmUtZGlzYWJsZWRcblx0XHRcdC8vICogb3B0aW9uIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LW9wdGlvbi1kaXNhYmxlZFxuXHRcdFx0Ly8gQWxsIHN1Y2ggZWxlbWVudHMgaGF2ZSBhIFwiZm9ybVwiIHByb3BlcnR5LlxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgJiYgZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0Ly8gT3B0aW9uIGVsZW1lbnRzIGRlZmVyIHRvIGEgcGFyZW50IG9wdGdyb3VwIGlmIHByZXNlbnRcblx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5wYXJlbnROb2RlLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDYgLSAxMVxuXHRcdFx0XHQvLyBVc2UgdGhlIGlzRGlzYWJsZWQgc2hvcnRjdXQgcHJvcGVydHkgdG8gY2hlY2sgZm9yIGRpc2FibGVkIGZpZWxkc2V0IGFuY2VzdG9yc1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pc0Rpc2FibGVkID09PSBkaXNhYmxlZCB8fFxuXG5cdFx0XHRcdFx0Ly8gV2hlcmUgdGhlcmUgaXMgbm8gaXNEaXNhYmxlZCwgY2hlY2sgbWFudWFsbHlcblx0XHRcdFx0XHQvKiBqc2hpbnQgLVcwMTggKi9cblx0XHRcdFx0XHRlbGVtLmlzRGlzYWJsZWQgIT09ICFkaXNhYmxlZCAmJlxuXHRcdFx0XHRcdGluRGlzYWJsZWRGaWVsZHNldCggZWxlbSApID09PSBkaXNhYmxlZDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXG5cdFx0Ly8gVHJ5IHRvIHdpbm5vdyBvdXQgZWxlbWVudHMgdGhhdCBjYW4ndCBiZSBkaXNhYmxlZCBiZWZvcmUgdHJ1c3RpbmcgdGhlIGRpc2FibGVkIHByb3BlcnR5LlxuXHRcdC8vIFNvbWUgdmljdGltcyBnZXQgY2F1Z2h0IGluIG91ciBuZXQgKGxhYmVsLCBsZWdlbmQsIG1lbnUsIHRyYWNrKSwgYnV0IGl0IHNob3VsZG4ndFxuXHRcdC8vIGV2ZW4gZXhpc3Qgb24gdGhlbSwgbGV0IGFsb25lIGhhdmUgYSBib29sZWFuIHZhbHVlLlxuXHRcdH0gZWxzZSBpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdH1cblxuXHRcdC8vIFJlbWFpbmluZyBlbGVtZW50cyBhcmUgbmVpdGhlciA6ZW5hYmxlZCBub3IgOmRpc2FibGVkXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkge1xuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHR2YXIgaixcblx0XHRcdFx0bWF0Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0aCwgYXJndW1lbnQgKSxcblx0XHRcdFx0aSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7XG5cblx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlc1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggc2VlZFsgKCBqID0gbWF0Y2hJbmRleGVzWyBpIF0gKSBdICkge1xuXHRcdFx0XHRcdHNlZWRbIGogXSA9ICEoIG1hdGNoZXNbIGogXSA9IHNlZWRbIGogXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9ICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29udGV4dDtcbn1cblxuLy8gRXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVuY2VcbnN1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9O1xuXG4vKipcbiAqIERldGVjdHMgWE1MIG5vZGVzXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudFxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZVxuICovXG5pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbmFtZXNwYWNlID0gZWxlbS5uYW1lc3BhY2VVUkksXG5cdFx0ZG9jRWxlbSA9ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD04XG5cdC8vIEFzc3VtZSBIVE1MIHdoZW4gZG9jdW1lbnRFbGVtZW50IGRvZXNuJ3QgeWV0IGV4aXN0LCBzdWNoIGFzIGluc2lkZSBsb2FkaW5nIGlmcmFtZXNcblx0Ly8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzQ4MzNcblx0cmV0dXJuICFyaHRtbC50ZXN0KCBuYW1lc3BhY2UgfHwgZG9jRWxlbSAmJiBkb2NFbGVtLm5vZGVOYW1lIHx8IFwiSFRNTFwiICk7XG59O1xuXG4vKipcbiAqIFNldHMgZG9jdW1lbnQtcmVsYXRlZCB2YXJpYWJsZXMgb25jZSBiYXNlZCBvbiB0aGUgY3VycmVudCBkb2N1bWVudFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gW2RvY10gQW4gZWxlbWVudCBvciBkb2N1bWVudCBvYmplY3QgdG8gdXNlIHRvIHNldCB0aGUgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqL1xuc2V0RG9jdW1lbnQgPSBTaXp6bGUuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbiggbm9kZSApIHtcblx0dmFyIGhhc0NvbXBhcmUsIHN1YldpbmRvdyxcblx0XHRkb2MgPSBub2RlID8gbm9kZS5vd25lckRvY3VtZW50IHx8IG5vZGUgOiBwcmVmZXJyZWREb2M7XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGlmIGRvYyBpcyBpbnZhbGlkIG9yIGFscmVhZHkgc2VsZWN0ZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCBkb2MgPT0gZG9jdW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkge1xuXHRcdHJldHVybiBkb2N1bWVudDtcblx0fVxuXG5cdC8vIFVwZGF0ZSBnbG9iYWwgdmFyaWFibGVzXG5cdGRvY3VtZW50ID0gZG9jO1xuXHRkb2NFbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHRkb2N1bWVudElzSFRNTCA9ICFpc1hNTCggZG9jdW1lbnQgKTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrXG5cdC8vIEFjY2Vzc2luZyBpZnJhbWUgZG9jdW1lbnRzIGFmdGVyIHVubG9hZCB0aHJvd3MgXCJwZXJtaXNzaW9uIGRlbmllZFwiIGVycm9ycyAoalF1ZXJ5ICMxMzkzNilcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCBwcmVmZXJyZWREb2MgIT0gZG9jdW1lbnQgJiZcblx0XHQoIHN1YldpbmRvdyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3ICkgJiYgc3ViV2luZG93LnRvcCAhPT0gc3ViV2luZG93ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTEsIEVkZ2Vcblx0XHRpZiAoIHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0c3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwidW5sb2FkXCIsIHVubG9hZEhhbmRsZXIsIGZhbHNlICk7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTAgb25seVxuXHRcdH0gZWxzZSBpZiAoIHN1YldpbmRvdy5hdHRhY2hFdmVudCApIHtcblx0XHRcdHN1YldpbmRvdy5hdHRhY2hFdmVudCggXCJvbnVubG9hZFwiLCB1bmxvYWRIYW5kbGVyICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOCAtIDExKywgRWRnZSAxMiAtIDE4KywgQ2hyb21lIDw9MTYgLSAyNSBvbmx5LCBGaXJlZm94IDw9My42IC0gMzEgb25seSxcblx0Ly8gU2FmYXJpIDQgLSA1IG9ubHksIE9wZXJhIDw9MTEuNiAtIDEyLnggb25seVxuXHQvLyBJRS9FZGdlICYgb2xkZXIgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGUgOnNjb3BlIHBzZXVkby1jbGFzcy5cblx0Ly8gU3VwcG9ydDogU2FmYXJpIDYuMCBvbmx5XG5cdC8vIFNhZmFyaSA2LjAgc3VwcG9ydHMgOnNjb3BlIGJ1dCBpdCdzIGFuIGFsaWFzIG9mIDpyb290IHRoZXJlLlxuXHRzdXBwb3J0LnNjb3BlID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cdFx0cmV0dXJuIHR5cGVvZiBlbC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHQhZWwucXVlcnlTZWxlY3RvckFsbCggXCI6c2NvcGUgZmllbGRzZXQgZGl2XCIgKS5sZW5ndGg7XG5cdH0gKTtcblxuXHQvKiBBdHRyaWJ1dGVzXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBTdXBwb3J0OiBJRTw4XG5cdC8vIFZlcmlmeSB0aGF0IGdldEF0dHJpYnV0ZSByZWFsbHkgcmV0dXJucyBhdHRyaWJ1dGVzIGFuZCBub3QgcHJvcGVydGllc1xuXHQvLyAoZXhjZXB0aW5nIElFOCBib29sZWFucylcblx0c3VwcG9ydC5hdHRyaWJ1dGVzID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZWwuY2xhc3NOYW1lID0gXCJpXCI7XG5cdFx0cmV0dXJuICFlbC5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NOYW1lXCIgKTtcblx0fSApO1xuXG5cdC8qIGdldEVsZW1lbnQocylCeSpcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSByZXR1cm5zIG9ubHkgZWxlbWVudHNcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdGVsLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVDb21tZW50KCBcIlwiICkgKTtcblx0XHRyZXR1cm4gIWVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcIipcIiApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDlcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICk7XG5cblx0Ly8gU3VwcG9ydDogSUU8MTBcblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5SWQgcmV0dXJucyBlbGVtZW50cyBieSBuYW1lXG5cdC8vIFRoZSBicm9rZW4gZ2V0RWxlbWVudEJ5SWQgbWV0aG9kcyBkb24ndCBwaWNrIHVwIHByb2dyYW1tYXRpY2FsbHktc2V0IG5hbWVzLFxuXHQvLyBzbyB1c2UgYSByb3VuZGFib3V0IGdldEVsZW1lbnRzQnlOYW1lIHRlc3Rcblx0c3VwcG9ydC5nZXRCeUlkID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pZCA9IGV4cGFuZG87XG5cdFx0cmV0dXJuICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGg7XG5cdH0gKTtcblxuXHQvLyBJRCBmaWx0ZXIgYW5kIGZpbmRcblx0aWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7XG5cdFx0RXhwci5maWx0ZXJbIFwiSURcIiBdID0gZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJpZFwiICkgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblx0XHRFeHByLmZpbmRbIFwiSURcIiBdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXHRcdFx0XHRyZXR1cm4gZWxlbSA/IFsgZWxlbSBdIDogW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRFeHByLmZpbHRlclsgXCJJRFwiIF0gPSAgZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdHJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDYgLSA3IG9ubHlcblx0XHQvLyBnZXRFbGVtZW50QnlJZCBpcyBub3QgcmVsaWFibGUgYXMgYSBmaW5kIHNob3J0Y3V0XG5cdFx0RXhwci5maW5kWyBcIklEXCIgXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBub2RlLCBpLCBlbGVtcyxcblx0XHRcdFx0XHRlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHQvLyBWZXJpZnkgdGhlIGlkIGF0dHJpYnV0ZVxuXHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBGYWxsIGJhY2sgb24gZ2V0RWxlbWVudHNCeU5hbWVcblx0XHRcdFx0XHRlbGVtcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUoIGlkICk7XG5cdFx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvLyBUYWdcblx0RXhwci5maW5kWyBcIlRBR1wiIF0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID9cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBEb2N1bWVudEZyYWdtZW50IG5vZGVzIGRvbid0IGhhdmUgZ0VCVE5cblx0XHRcdH0gZWxzZSBpZiAoIHN1cHBvcnQucXNhICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgKTtcblx0XHRcdH1cblx0XHR9IDpcblxuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0dG1wID0gW10sXG5cdFx0XHRcdGkgPSAwLFxuXG5cdFx0XHRcdC8vIEJ5IGhhcHB5IGNvaW5jaWRlbmNlLCBhIChicm9rZW4pIGdFQlROIGFwcGVhcnMgb24gRG9jdW1lbnRGcmFnbWVudCBub2RlcyB0b29cblx0XHRcdFx0cmVzdWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzXG5cdFx0XHRpZiAoIHRhZyA9PT0gXCIqXCIgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gcmVzdWx0c1sgaSsrIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHR0bXAucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0bXA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHR9O1xuXG5cdC8vIENsYXNzXG5cdEV4cHIuZmluZFsgXCJDTEFTU1wiIF0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHtcblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTtcblx0XHR9XG5cdH07XG5cblx0LyogUVNBL21hdGNoZXNTZWxlY3RvclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gUVNBIGFuZCBtYXRjaGVzU2VsZWN0b3Igc3VwcG9ydFxuXG5cdC8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpXG5cdHJidWdneU1hdGNoZXMgPSBbXTtcblxuXHQvLyBxU2EoOmZvY3VzKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21lIDIxKVxuXHQvLyBXZSBhbGxvdyB0aGlzIGJlY2F1c2Ugb2YgYSBidWcgaW4gSUU4LzkgdGhhdCB0aHJvd3MgYW4gZXJyb3Jcblx0Ly8gd2hlbmV2ZXIgYGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRgIGlzIGFjY2Vzc2VkIG9uIGFuIGlmcmFtZVxuXHQvLyBTbywgd2UgYWxsb3cgOmZvY3VzIHRvIHBhc3MgdGhyb3VnaCBRU0EgYWxsIHRoZSB0aW1lIHRvIGF2b2lkIHRoZSBJRSBlcnJvclxuXHQvLyBTZWUgaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzc4XG5cdHJidWdneVFTQSA9IFtdO1xuXG5cdGlmICggKCBzdXBwb3J0LnFzYSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCApICkgKSB7XG5cblx0XHQvLyBCdWlsZCBRU0EgcmVnZXhcblx0XHQvLyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5pXG5cdFx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0XHRcdHZhciBpbnB1dDtcblxuXHRcdFx0Ly8gU2VsZWN0IGlzIHNldCB0byBlbXB0eSBzdHJpbmcgb24gcHVycG9zZVxuXHRcdFx0Ly8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWNpdGx5XG5cdFx0XHQvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSxcblx0XHRcdC8vIHNpbmNlIGl0cyBwcmVzZW5jZSBzaG91bGQgYmUgZW5vdWdoXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzNTlcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaW5uZXJIVE1MID0gXCI8YSBpZD0nXCIgKyBleHBhbmRvICsgXCInPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBpZD0nXCIgKyBleHBhbmRvICsgXCItXFxyXFxcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+XCIgK1xuXHRcdFx0XHRcIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOCwgT3BlcmEgMTEtMTIuMTZcblx0XHRcdC8vIE5vdGhpbmcgc2hvdWxkIGJlIHNlbGVjdGVkIHdoZW4gZW1wdHkgc3RyaW5ncyBmb2xsb3cgXj0gb3IgJD0gb3IgKj1cblx0XHRcdC8vIFRoZSB0ZXN0IGF0dHJpYnV0ZSBtdXN0IGJlIHVua25vd24gaW4gT3BlcmEgYnV0IFwic2FmZVwiIGZvciBXaW5SVFxuXHRcdFx0Ly8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9oaDQ2NTM4OC5hc3B4I2F0dHJpYnV0ZV9zZWN0aW9uXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW21zYWxsb3djYXB0dXJlXj0nJ11cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiWypeJF09XCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBCb29sZWFuIGF0dHJpYnV0ZXMgYW5kIFwidmFsdWVcIiBhcmUgbm90IHRyZWF0ZWQgY29ycmVjdGx5XG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltzZWxlY3RlZF1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooPzp2YWx1ZXxcIiArIGJvb2xlYW5zICsgXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lPDI5LCBBbmRyb2lkPDQuNCwgU2FmYXJpPDcuMCssIGlPUzw3LjArLCBQaGFudG9tSlM8MS45LjgrXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltpZH49XCIgKyBleHBhbmRvICsgXCItXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJ+PVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdFx0Ly8gSUUgMTEvRWRnZSBkb24ndCBmaW5kIGVsZW1lbnRzIG9uIGEgYFtuYW1lPScnXWAgcXVlcnkgaW4gc29tZSBjYXNlcy5cblx0XHRcdC8vIEFkZGluZyBhIHRlbXBvcmFyeSBhdHRyaWJ1dGUgdG8gdGhlIGRvY3VtZW50IGJlZm9yZSB0aGUgc2VsZWN0aW9uIHdvcmtzXG5cdFx0XHQvLyBhcm91bmQgdGhlIGlzc3VlLlxuXHRcdFx0Ly8gSW50ZXJlc3RpbmdseSwgSUUgMTAgJiBvbGRlciBkb24ndCBzZWVtIHRvIGhhdmUgdGhlIGlzc3VlLlxuXHRcdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiXCIgKTtcblx0XHRcdGVsLmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbmFtZT0nJ11cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIipuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqPVwiICtcblx0XHRcdFx0XHR3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2Via2l0L09wZXJhIC0gOmNoZWNrZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCI6Y2hlY2tlZFwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6Y2hlY2tlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4KywgaU9TIDgrXG5cdFx0XHQvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2ODUxXG5cdFx0XHQvLyBJbi1wYWdlIGBzZWxlY3RvciNpZCBzaWJsaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcImEjXCIgKyBleHBhbmRvICsgXCIrKlwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCIuIy4rWyt+XVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD0zLjYgLSA1IG9ubHlcblx0XHRcdC8vIE9sZCBGaXJlZm94IGRvZXNuJ3QgdGhyb3cgb24gYSBiYWRseS1lc2NhcGVkIGlkZW50aWZpZXIuXG5cdFx0XHRlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIlxcXFxcXGZcIiApO1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiW1xcXFxyXFxcXG5cXFxcZl1cIiApO1xuXHRcdH0gKTtcblxuXHRcdGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGRpc2FibGVkPSdkaXNhYmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFdpbmRvd3MgOCBOYXRpdmUgQXBwc1xuXHRcdFx0Ly8gVGhlIHR5cGUgYW5kIG5hbWUgYXR0cmlidXRlcyBhcmUgcmVzdHJpY3RlZCBkdXJpbmcgLmlubmVySFRNTCBhc3NpZ25tZW50XG5cdFx0XHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwiaGlkZGVuXCIgKTtcblx0XHRcdGVsLmFwcGVuZENoaWxkKCBpbnB1dCApLnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiRFwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gRW5mb3JjZSBjYXNlLXNlbnNpdGl2aXR5IG9mIG5hbWUgYXR0cmlidXRlXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW25hbWU9ZF1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwibmFtZVwiICsgd2hpdGVzcGFjZSArIFwiKlsqXiR8IX5dPz1cIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGRiAzLjUgLSA6ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGlsbCBlbmFibGVkKVxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCI6ZW5hYmxlZFwiICkubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOS0xMStcblx0XHRcdC8vIElFJ3MgOmRpc2FibGVkIHNlbGVjdG9yIGRvZXMgbm90IHBpY2sgdXAgdGhlIGNoaWxkcmVuIG9mIGRpc2FibGVkIGZpZWxkc2V0c1xuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmRpc2FibGVkXCIgKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogT3BlcmEgMTAgLSAxMSBvbmx5XG5cdFx0XHQvLyBPcGVyYSAxMC0xMSBkb2VzIG5vdCB0aHJvdyBvbiBwb3N0LWNvbW1hIGludmFsaWQgcHNldWRvc1xuXHRcdFx0ZWwucXVlcnlTZWxlY3RvckFsbCggXCIqLDp4XCIgKTtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIiwuKjpcIiApO1xuXHRcdH0gKTtcblx0fVxuXG5cdGlmICggKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciA9IHJuYXRpdmUudGVzdCggKCBtYXRjaGVzID0gZG9jRWxlbS5tYXRjaGVzIHx8XG5cdFx0ZG9jRWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1vek1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ub01hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubXNNYXRjaGVzU2VsZWN0b3IgKSApICkgKSB7XG5cblx0XHRhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHRcdFx0Ly8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yXG5cdFx0XHQvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KVxuXHRcdFx0c3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IG1hdGNoZXMuY2FsbCggZWwsIFwiKlwiICk7XG5cblx0XHRcdC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb25cblx0XHRcdC8vIEdlY2tvIGRvZXMgbm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWRcblx0XHRcdG1hdGNoZXMuY2FsbCggZWwsIFwiW3MhPScnXTp4XCIgKTtcblx0XHRcdHJidWdneU1hdGNoZXMucHVzaCggXCIhPVwiLCBwc2V1ZG9zICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmJ1Z2d5UVNBID0gcmJ1Z2d5UVNBLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lRU0Euam9pbiggXCJ8XCIgKSApO1xuXHRyYnVnZ3lNYXRjaGVzID0gcmJ1Z2d5TWF0Y2hlcy5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKCBcInxcIiApICk7XG5cblx0LyogQ29udGFpbnNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXHRoYXNDb21wYXJlID0gcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICk7XG5cblx0Ly8gRWxlbWVudCBjb250YWlucyBhbm90aGVyXG5cdC8vIFB1cnBvc2VmdWxseSBzZWxmLWV4Y2x1c2l2ZVxuXHQvLyBBcyBpbiwgYW4gZWxlbWVudCBkb2VzIG5vdCBjb250YWluIGl0c2VsZlxuXHRjb250YWlucyA9IGhhc0NvbXBhcmUgfHwgcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbnRhaW5zICkgP1xuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0dmFyIGFkb3duID0gYS5ub2RlVHlwZSA9PT0gOSA/IGEuZG9jdW1lbnRFbGVtZW50IDogYSxcblx0XHRcdFx0YnVwID0gYiAmJiBiLnBhcmVudE5vZGU7XG5cdFx0XHRyZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0YWRvd24uY29udGFpbnMgP1xuXHRcdFx0XHRcdGFkb3duLmNvbnRhaW5zKCBidXAgKSA6XG5cdFx0XHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2XG5cdFx0XHQpICk7XG5cdFx0fSA6XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHRpZiAoIGIgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBiID0gYi5wYXJlbnROb2RlICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBiID09PSBhICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxuXHQvKiBTb3J0aW5nXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBEb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdHNvcnRPcmRlciA9IGhhc0NvbXBhcmUgP1xuXHRmdW5jdGlvbiggYSwgYiApIHtcblxuXHRcdC8vIEZsYWcgZm9yIGR1cGxpY2F0ZSByZW1vdmFsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdC8vIFNvcnQgb24gbWV0aG9kIGV4aXN0ZW5jZSBpZiBvbmx5IG9uZSBpbnB1dCBoYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb25cblx0XHR2YXIgY29tcGFyZSA9ICFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIC0gIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb247XG5cdFx0aWYgKCBjb21wYXJlICkge1xuXHRcdFx0cmV0dXJuIGNvbXBhcmU7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9uIGlmIGJvdGggaW5wdXRzIGJlbG9uZyB0byB0aGUgc2FtZSBkb2N1bWVudFxuXHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0Y29tcGFyZSA9ICggYS5vd25lckRvY3VtZW50IHx8IGEgKSA9PSAoIGIub3duZXJEb2N1bWVudCB8fCBiICkgP1xuXHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHdlIGtub3cgdGhleSBhcmUgZGlzY29ubmVjdGVkXG5cdFx0XHQxO1xuXG5cdFx0Ly8gRGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0aWYgKCBjb21wYXJlICYgMSB8fFxuXHRcdFx0KCAhc3VwcG9ydC5zb3J0RGV0YWNoZWQgJiYgYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYSApID09PSBjb21wYXJlICkgKSB7XG5cblx0XHRcdC8vIENob29zZSB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGlzIHJlbGF0ZWQgdG8gb3VyIHByZWZlcnJlZCBkb2N1bWVudFxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdGlmICggYSA9PSBkb2N1bWVudCB8fCBhLm93bmVyRG9jdW1lbnQgPT0gcHJlZmVycmVkRG9jICYmXG5cdFx0XHRcdGNvbnRhaW5zKCBwcmVmZXJyZWREb2MsIGEgKSApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0aWYgKCBiID09IGRvY3VtZW50IHx8IGIub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiZcblx0XHRcdFx0Y29udGFpbnMoIHByZWZlcnJlZERvYywgYiApICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFpbnRhaW4gb3JpZ2luYWwgb3JkZXJcblx0XHRcdHJldHVybiBzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBhcmUgJiA0ID8gLTEgOiAxO1xuXHR9IDpcblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cblx0XHQvLyBFeGl0IGVhcmx5IGlmIHRoZSBub2RlcyBhcmUgaWRlbnRpY2FsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGF1cCA9IGEucGFyZW50Tm9kZSxcblx0XHRcdGJ1cCA9IGIucGFyZW50Tm9kZSxcblx0XHRcdGFwID0gWyBhIF0sXG5cdFx0XHRicCA9IFsgYiBdO1xuXG5cdFx0Ly8gUGFyZW50bGVzcyBub2RlcyBhcmUgZWl0aGVyIGRvY3VtZW50cyBvciBkaXNjb25uZWN0ZWRcblx0XHRpZiAoICFhdXAgfHwgIWJ1cCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIGVxZXFlcSAqL1xuXHRcdFx0cmV0dXJuIGEgPT0gZG9jdW1lbnQgPyAtMSA6XG5cdFx0XHRcdGIgPT0gZG9jdW1lbnQgPyAxIDpcblx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBlcWVxZXEgKi9cblx0XHRcdFx0YXVwID8gLTEgOlxuXHRcdFx0XHRidXAgPyAxIDpcblx0XHRcdFx0c29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXG5cdFx0Ly8gSWYgdGhlIG5vZGVzIGFyZSBzaWJsaW5ncywgd2UgY2FuIGRvIGEgcXVpY2sgY2hlY2tcblx0XHR9IGVsc2UgaWYgKCBhdXAgPT09IGJ1cCApIHtcblx0XHRcdHJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2Ugd2UgbmVlZCBmdWxsIGxpc3RzIG9mIHRoZWlyIGFuY2VzdG9ycyBmb3IgY29tcGFyaXNvblxuXHRcdGN1ciA9IGE7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGN1ci5wYXJlbnROb2RlICkgKSB7XG5cdFx0XHRhcC51bnNoaWZ0KCBjdXIgKTtcblx0XHR9XG5cdFx0Y3VyID0gYjtcblx0XHR3aGlsZSAoICggY3VyID0gY3VyLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdGJwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblxuXHRcdC8vIFdhbGsgZG93biB0aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5XG5cdFx0d2hpbGUgKCBhcFsgaSBdID09PSBicFsgaSBdICkge1xuXHRcdFx0aSsrO1xuXHRcdH1cblxuXHRcdHJldHVybiBpID9cblxuXHRcdFx0Ly8gRG8gYSBzaWJsaW5nIGNoZWNrIGlmIHRoZSBub2RlcyBoYXZlIGEgY29tbW9uIGFuY2VzdG9yXG5cdFx0XHRzaWJsaW5nQ2hlY2soIGFwWyBpIF0sIGJwWyBpIF0gKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSBub2RlcyBpbiBvdXIgZG9jdW1lbnQgc29ydCBmaXJzdFxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIGVxZXFlcSAqL1xuXHRcdFx0YXBbIGkgXSA9PSBwcmVmZXJyZWREb2MgPyAtMSA6XG5cdFx0XHRicFsgaSBdID09IHByZWZlcnJlZERvYyA/IDEgOlxuXHRcdFx0LyogZXNsaW50LWVuYWJsZSBlcWVxZXEgKi9cblx0XHRcdDA7XG5cdH07XG5cblx0cmV0dXJuIGRvY3VtZW50O1xufTtcblxuU2l6emxlLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7XG5cdHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1lbnRzICk7XG59O1xuXG5TaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7XG5cdHNldERvY3VtZW50KCBlbGVtICk7XG5cblx0aWYgKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciAmJiBkb2N1bWVudElzSFRNTCAmJlxuXHRcdCFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBleHByICsgXCIgXCIgXSAmJlxuXHRcdCggIXJidWdneU1hdGNoZXMgfHwgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciApICkgJiZcblx0XHQoICFyYnVnZ3lRU0EgICAgIHx8ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgKSB7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApO1xuXG5cdFx0XHQvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0XHRpZiAoIHJldCB8fCBzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoIHx8XG5cblx0XHRcdFx0Ly8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnRcblx0XHRcdFx0Ly8gZnJhZ21lbnQgaW4gSUUgOVxuXHRcdFx0XHRlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggZXhwciwgdHJ1ZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBTaXp6bGUoIGV4cHIsIGRvY3VtZW50LCBudWxsLCBbIGVsZW0gXSApLmxlbmd0aCA+IDA7XG59O1xuXG5TaXp6bGUuY29udGFpbnMgPSBmdW5jdGlvbiggY29udGV4dCwgZWxlbSApIHtcblxuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkgIT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0fVxuXHRyZXR1cm4gY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTtcbn07XG5cblNpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHR2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLFxuXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKGpRdWVyeSAjMTM4MDcpXG5cdFx0dmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0Zm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDpcblx0XHRcdHVuZGVmaW5lZDtcblxuXHRyZXR1cm4gdmFsICE9PSB1bmRlZmluZWQgP1xuXHRcdHZhbCA6XG5cdFx0c3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApIDpcblx0XHRcdCggdmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkgKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0bnVsbDtcbn07XG5cblNpenpsZS5lc2NhcGUgPSBmdW5jdGlvbiggc2VsICkge1xuXHRyZXR1cm4gKCBzZWwgKyBcIlwiICkucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xufTtcblxuU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XG59O1xuXG4vKipcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXG4gKi9cblNpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XG5cdHZhciBlbGVtLFxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcblx0XHRqID0gMCxcblx0XHRpID0gMDtcblxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXG5cdGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXM7XG5cdHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApO1xuXHRyZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApO1xuXG5cdGlmICggaGFzRHVwbGljYXRlICkge1xuXHRcdHdoaWxlICggKCBlbGVtID0gcmVzdWx0c1sgaSsrIF0gKSApIHtcblx0XHRcdGlmICggZWxlbSA9PT0gcmVzdWx0c1sgaSBdICkge1xuXHRcdFx0XHRqID0gZHVwbGljYXRlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0cmVzdWx0cy5zcGxpY2UoIGR1cGxpY2F0ZXNbIGogXSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENsZWFyIGlucHV0IGFmdGVyIHNvcnRpbmcgdG8gcmVsZWFzZSBvYmplY3RzXG5cdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9wdWxsLzIyNVxuXHRzb3J0SW5wdXQgPSBudWxsO1xuXG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2Rlc1xuICogQHBhcmFtIHtBcnJheXxFbGVtZW50fSBlbGVtXG4gKi9cbmdldFRleHQgPSBTaXp6bGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbm9kZSxcblx0XHRyZXQgPSBcIlwiLFxuXHRcdGkgPSAwLFxuXHRcdG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRpZiAoICFub2RlVHlwZSApIHtcblxuXHRcdC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG5cdFx0d2hpbGUgKCAoIG5vZGUgPSBlbGVtWyBpKysgXSApICkge1xuXG5cdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xuXHRcdFx0cmV0ICs9IGdldFRleHQoIG5vZGUgKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHtcblxuXHRcdC8vIFVzZSB0ZXh0Q29udGVudCBmb3IgZWxlbWVudHNcblx0XHQvLyBpbm5lclRleHQgdXNhZ2UgcmVtb3ZlZCBmb3IgY29uc2lzdGVuY3kgb2YgbmV3IGxpbmVzIChqUXVlcnkgIzExMTUzKVxuXHRcdGlmICggdHlwZW9mIGVsZW0udGV4dENvbnRlbnQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS50ZXh0Q29udGVudDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBUcmF2ZXJzZSBpdHMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRyZXQgKz0gZ2V0VGV4dCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVZhbHVlO1xuXHR9XG5cblx0Ly8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzXG5cblx0cmV0dXJuIHJldDtcbn07XG5cbkV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0ge1xuXG5cdC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlclxuXHRjYWNoZUxlbmd0aDogNTAsXG5cblx0Y3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sXG5cblx0bWF0Y2g6IG1hdGNoRXhwcixcblxuXHRhdHRySGFuZGxlOiB7fSxcblxuXHRmaW5kOiB7fSxcblxuXHRyZWxhdGl2ZToge1xuXHRcdFwiPlwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCIgXCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiB9LFxuXHRcdFwiK1wiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIn5cIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIgfVxuXHR9LFxuXG5cdHByZUZpbHRlcjoge1xuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaFsgMSBdID0gbWF0Y2hbIDEgXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHQvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1bnF1b3RlZFxuXHRcdFx0bWF0Y2hbIDMgXSA9ICggbWF0Y2hbIDMgXSB8fCBtYXRjaFsgNCBdIHx8XG5cdFx0XHRcdG1hdGNoWyA1IF0gfHwgXCJcIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdGlmICggbWF0Y2hbIDIgXSA9PT0gXCJ+PVwiICkge1xuXHRcdFx0XHRtYXRjaFsgMyBdID0gXCIgXCIgKyBtYXRjaFsgMyBdICsgXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgNCApO1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblxuXHRcdFx0LyogbWF0Y2hlcyBmcm9tIG1hdGNoRXhwcltcIkNISUxEXCJdXG5cdFx0XHRcdDEgdHlwZSAob25seXxudGh8Li4uKVxuXHRcdFx0XHQyIHdoYXQgKGNoaWxkfG9mLXR5cGUpXG5cdFx0XHRcdDMgYXJndW1lbnQgKGV2ZW58b2RkfFxcZCp8XFxkKm4oWystXVxcZCspP3wuLi4pXG5cdFx0XHRcdDQgeG4tY29tcG9uZW50IG9mIHhuK3kgYXJndW1lbnQgKFsrLV0/XFxkKm58KVxuXHRcdFx0XHQ1IHNpZ24gb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDYgeCBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NyBzaWduIG9mIHktY29tcG9uZW50XG5cdFx0XHRcdDggeSBvZiB5LWNvbXBvbmVudFxuXHRcdFx0Ki9cblx0XHRcdG1hdGNoWyAxIF0gPSBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmICggbWF0Y2hbIDEgXS5zbGljZSggMCwgMyApID09PSBcIm50aFwiICkge1xuXG5cdFx0XHRcdC8vIG50aC0qIHJlcXVpcmVzIGFyZ3VtZW50XG5cdFx0XHRcdGlmICggIW1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFsgMCBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBudW1lcmljIHggYW5kIHkgcGFyYW1ldGVycyBmb3IgRXhwci5maWx0ZXIuQ0hJTERcblx0XHRcdFx0Ly8gcmVtZW1iZXIgdGhhdCBmYWxzZS90cnVlIGNhc3QgcmVzcGVjdGl2ZWx5IHRvIDAvMVxuXHRcdFx0XHRtYXRjaFsgNCBdID0gKyggbWF0Y2hbIDQgXSA/XG5cdFx0XHRcdFx0bWF0Y2hbIDUgXSArICggbWF0Y2hbIDYgXSB8fCAxICkgOlxuXHRcdFx0XHRcdDIgKiAoIG1hdGNoWyAzIF0gPT09IFwiZXZlblwiIHx8IG1hdGNoWyAzIF0gPT09IFwib2RkXCIgKSApO1xuXHRcdFx0XHRtYXRjaFsgNSBdID0gKyggKCBtYXRjaFsgNyBdICsgbWF0Y2hbIDggXSApIHx8IG1hdGNoWyAzIF0gPT09IFwib2RkXCIgKTtcblxuXHRcdFx0XHQvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdFNpenpsZS5lcnJvciggbWF0Y2hbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdHZhciBleGNlc3MsXG5cdFx0XHRcdHVucXVvdGVkID0gIW1hdGNoWyA2IF0gJiYgbWF0Y2hbIDIgXTtcblxuXHRcdFx0aWYgKCBtYXRjaEV4cHJbIFwiQ0hJTERcIiBdLnRlc3QoIG1hdGNoWyAwIF0gKSApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFjY2VwdCBxdW90ZWQgYXJndW1lbnRzIGFzLWlzXG5cdFx0XHRpZiAoIG1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdG1hdGNoWyAyIF0gPSBtYXRjaFsgNCBdIHx8IG1hdGNoWyA1IF0gfHwgXCJcIjtcblxuXHRcdFx0Ly8gU3RyaXAgZXhjZXNzIGNoYXJhY3RlcnMgZnJvbSB1bnF1b3RlZCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIHVucXVvdGVkICYmIHJwc2V1ZG8udGVzdCggdW5xdW90ZWQgKSAmJlxuXG5cdFx0XHRcdC8vIEdldCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpXG5cdFx0XHRcdCggZXhjZXNzID0gdG9rZW5pemUoIHVucXVvdGVkLCB0cnVlICkgKSAmJlxuXG5cdFx0XHRcdC8vIGFkdmFuY2UgdG8gdGhlIG5leHQgY2xvc2luZyBwYXJlbnRoZXNpc1xuXHRcdFx0XHQoIGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoIFwiKVwiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCApICkge1xuXG5cdFx0XHRcdC8vIGV4Y2VzcyBpcyBhIG5lZ2F0aXZlIGluZGV4XG5cdFx0XHRcdG1hdGNoWyAwIF0gPSBtYXRjaFsgMCBdLnNsaWNlKCAwLCBleGNlc3MgKTtcblx0XHRcdFx0bWF0Y2hbIDIgXSA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV0dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAodHlwZSBhbmQgYXJndW1lbnQpXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMgKTtcblx0XHR9XG5cdH0sXG5cblx0ZmlsdGVyOiB7XG5cblx0XHRcIlRBR1wiOiBmdW5jdGlvbiggbm9kZU5hbWVTZWxlY3RvciApIHtcblx0XHRcdHZhciBub2RlTmFtZSA9IG5vZGVOYW1lU2VsZWN0b3IucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lU2VsZWN0b3IgPT09IFwiKlwiID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0gOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lO1xuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNMQVNTXCI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7XG5cdFx0XHR2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArIFwiIFwiIF07XG5cblx0XHRcdHJldHVybiBwYXR0ZXJuIHx8XG5cdFx0XHRcdCggcGF0dGVybiA9IG5ldyBSZWdFeHAoIFwiKF58XCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFx0XHRcIilcIiArIGNsYXNzTmFtZSArIFwiKFwiICsgd2hpdGVzcGFjZSArIFwifCQpXCIgKSApICYmIGNsYXNzQ2FjaGUoXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KFxuXHRcdFx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtLmNsYXNzTmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBlbGVtLmNsYXNzTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiApIHx8XG5cdFx0XHRcdFx0XHRcdFx0XCJcIlxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9ICk7XG5cdFx0fSxcblxuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gU2l6emxlLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdFx0XHRpZiAoIHJlc3VsdCA9PSBudWxsICkge1xuXHRcdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCIhPVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggIW9wZXJhdG9yICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVzdWx0ICs9IFwiXCI7XG5cblx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG5cdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCI9XCIgPyByZXN1bHQgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIhPVwiID8gcmVzdWx0ICE9PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiXj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIqPVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPiAtMSA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiJD1cIiA/IGNoZWNrICYmIHJlc3VsdC5zbGljZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwifj1cIiA/ICggXCIgXCIgKyByZXN1bHQucmVwbGFjZSggcndoaXRlc3BhY2UsIFwiIFwiICkgKyBcIiBcIiApLmluZGV4T2YoIGNoZWNrICkgPiAtMSA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwifD1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgfHwgcmVzdWx0LnNsaWNlKCAwLCBjaGVjay5sZW5ndGggKyAxICkgPT09IGNoZWNrICsgXCItXCIgOlxuXHRcdFx0XHRcdGZhbHNlO1xuXHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4gKi9cblxuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJDSElMRFwiOiBmdW5jdGlvbiggdHlwZSwgd2hhdCwgX2FyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHtcblx0XHRcdHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09IFwibnRoXCIsXG5cdFx0XHRcdGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSBcImxhc3RcIixcblx0XHRcdFx0b2ZUeXBlID0gd2hhdCA9PT0gXCJvZi10eXBlXCI7XG5cblx0XHRcdHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID9cblxuXHRcdFx0XHQvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0fSA6XG5cblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGNhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSwgbm9kZSwgbm9kZUluZGV4LCBzdGFydCxcblx0XHRcdFx0XHRcdGRpciA9IHNpbXBsZSAhPT0gZm9yd2FyZCA/IFwibmV4dFNpYmxpbmdcIiA6IFwicHJldmlvdXNTaWJsaW5nXCIsXG5cdFx0XHRcdFx0XHRwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsXG5cdFx0XHRcdFx0XHRuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcblx0XHRcdFx0XHRcdHVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlLFxuXHRcdFx0XHRcdFx0ZGlmZiA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0XHRcdGlmICggc2ltcGxlICkge1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIGRpciApIHtcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9IG5vZGVbIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdC8vIFJldmVyc2UgZGlyZWN0aW9uIGZvciA6b25seS0qIChpZiB3ZSBoYXZlbid0IHlldCBkb25lIHNvKVxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gZGlyID0gdHlwZSA9PT0gXCJvbmx5XCIgJiYgIXN0YXJ0ICYmIFwibmV4dFNpYmxpbmdcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0c3RhcnQgPSBbIGZvcndhcmQgPyBwYXJlbnQuZmlyc3RDaGlsZCA6IHBhcmVudC5sYXN0Q2hpbGQgXTtcblxuXHRcdFx0XHRcdFx0Ly8gbm9uLXhtbCA6bnRoLWNoaWxkKC4uLikgc3RvcmVzIGNhY2hlIGRhdGEgb24gYHBhcmVudGBcblx0XHRcdFx0XHRcdGlmICggZm9yd2FyZCAmJiB1c2VDYWNoZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTZWVrIGBlbGVtYCBmcm9tIGEgcHJldmlvdXNseS1jYWNoZWQgaW5kZXhcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBwYXJlbnQ7XG5cdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBub2RlSW5kZXggJiYgcGFyZW50LmNoaWxkTm9kZXNbIG5vZGVJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHQoIGRpZmYgPSBub2RlSW5kZXggPSAwICkgfHwgc3RhcnQucG9wKCkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGVcblx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8ICggbm9kZVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8geG1sIDpudGgtY2hpbGQoLi4uKVxuXHRcdFx0XHRcdFx0XHQvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXG5cdFx0XHRcdFx0XHRcdGlmICggZGlmZiA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBVc2UgdGhlIHNhbWUgbG9vcCBhcyBhYm92ZSB0byBzZWVrIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KCBkaWZmID0gbm9kZUluZGV4ID0gMCApIHx8IHN0YXJ0LnBvcCgpICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0KytkaWZmICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoIG5vZGVbIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBJbmNvcnBvcmF0ZSB0aGUgb2Zmc2V0LCB0aGVuIGNoZWNrIGFnYWluc3QgY3ljbGUgc2l6ZVxuXHRcdFx0XHRcdFx0ZGlmZiAtPSBsYXN0O1xuXHRcdFx0XHRcdFx0cmV0dXJuIGRpZmYgPT09IGZpcnN0IHx8ICggZGlmZiAlIGZpcnN0ID09PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIlBTRVVET1wiOiBmdW5jdGlvbiggcHNldWRvLCBhcmd1bWVudCApIHtcblxuXHRcdFx0Ly8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzXG5cdFx0XHQvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVyc1xuXHRcdFx0Ly8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvc1xuXHRcdFx0dmFyIGFyZ3MsXG5cdFx0XHRcdGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgcHNldWRvOiBcIiArIHBzZXVkbyApO1xuXG5cdFx0XHQvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0XG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5jdGlvblxuXHRcdFx0Ly8ganVzdCBhcyBTaXp6bGUgZG9lc1xuXHRcdFx0aWYgKCBmblsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRyZXR1cm4gZm4oIGFyZ3VtZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlc1xuXHRcdFx0aWYgKCBmbi5sZW5ndGggPiAxICkge1xuXHRcdFx0XHRhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgXCJcIiwgYXJndW1lbnQgXTtcblx0XHRcdFx0cmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRcdFx0bWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdFx0XHRcdHZhciBpZHgsXG5cdFx0XHRcdFx0XHRcdG1hdGNoZWQgPSBmbiggc2VlZCwgYXJndW1lbnQgKSxcblx0XHRcdFx0XHRcdFx0aSA9IG1hdGNoZWQubGVuZ3RoO1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlkeCA9IGluZGV4T2YoIHNlZWQsIG1hdGNoZWRbIGkgXSApO1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0Y2hlZFsgaSBdICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmbiggZWxlbSwgMCwgYXJncyApO1xuXHRcdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmbjtcblx0XHR9XG5cdH0sXG5cblx0cHNldWRvczoge1xuXG5cdFx0Ly8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zXG5cdFx0XCJub3RcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cblx0XHRcdC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlXG5cdFx0XHQvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuXHRcdFx0Ly8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzXG5cdFx0XHR2YXIgaW5wdXQgPSBbXSxcblx0XHRcdFx0cmVzdWx0cyA9IFtdLFxuXHRcdFx0XHRtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApICk7XG5cblx0XHRcdHJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gP1xuXHRcdFx0XHRtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHRcdFx0dW5tYXRjaGVkID0gbWF0Y2hlciggc2VlZCwgbnVsbCwgeG1sLCBbXSApLFxuXHRcdFx0XHRcdFx0aSA9IHNlZWQubGVuZ3RoO1xuXG5cdFx0XHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgdW5tYXRjaGVkIGJ5IGBtYXRjaGVyYFxuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSB1bm1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpIF0gPSAhKCBtYXRjaGVzWyBpIF0gPSBlbGVtICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHRpbnB1dFsgMCBdID0gZWxlbTtcblx0XHRcdFx0XHRtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7XG5cblx0XHRcdFx0XHQvLyBEb24ndCBrZWVwIHRoZSBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0XHRcdGlucHV0WyAwIF0gPSBudWxsO1xuXHRcdFx0XHRcdHJldHVybiAhcmVzdWx0cy5wb3AoKTtcblx0XHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHRcImhhc1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIFNpenpsZSggc2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHRcImNvbnRhaW5zXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHQvLyBcIldoZXRoZXIgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSBhIDpsYW5nKCkgc2VsZWN0b3Jcblx0XHQvLyBpcyBiYXNlZCBzb2xlbHkgb24gdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZVxuXHRcdC8vIGJlaW5nIGVxdWFsIHRvIHRoZSBpZGVudGlmaWVyIEMsXG5cdFx0Ly8gb3IgYmVnaW5uaW5nIHdpdGggdGhlIGlkZW50aWZpZXIgQyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBcIi1cIi5cblx0XHQvLyBUaGUgbWF0Y2hpbmcgb2YgQyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUgaXMgcGVyZm9ybWVkIGNhc2UtaW5zZW5zaXRpdmVseS5cblx0XHQvLyBUaGUgaWRlbnRpZmllciBDIGRvZXMgbm90IGhhdmUgdG8gYmUgYSB2YWxpZCBsYW5ndWFnZSBuYW1lLlwiXG5cdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVkb1xuXHRcdFwibGFuZ1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBsYW5nICkge1xuXG5cdFx0XHQvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyXG5cdFx0XHRpZiAoICFyaWRlbnRpZmllci50ZXN0KCBsYW5nIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBcInVuc3VwcG9ydGVkIGxhbmc6IFwiICsgbGFuZyApO1xuXHRcdFx0fVxuXHRcdFx0bGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgZWxlbUxhbmc7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoICggZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRcdFx0XHRlbGVtLmxhbmcgOlxuXHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIFwieG1sOmxhbmdcIiApIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCBcImxhbmdcIiApICkgKSB7XG5cblx0XHRcdFx0XHRcdGVsZW1MYW5nID0gZWxlbUxhbmcudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtTGFuZyA9PT0gbGFuZyB8fCBlbGVtTGFuZy5pbmRleE9mKCBsYW5nICsgXCItXCIgKSA9PT0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gd2hpbGUgKCAoIGVsZW0gPSBlbGVtLnBhcmVudE5vZGUgKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0Ly8gTWlzY2VsbGFuZW91c1xuXHRcdFwidGFyZ2V0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGhhc2ggPSB3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cdFx0XHRyZXR1cm4gaGFzaCAmJiBoYXNoLnNsaWNlKCAxICkgPT09IGVsZW0uaWQ7XG5cdFx0fSxcblxuXHRcdFwicm9vdFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2NFbGVtO1xuXHRcdH0sXG5cblx0XHRcImZvY3VzXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiZcblx0XHRcdFx0KCAhZG9jdW1lbnQuaGFzRm9jdXMgfHwgZG9jdW1lbnQuaGFzRm9jdXMoKSApICYmXG5cdFx0XHRcdCEhKCBlbGVtLnR5cGUgfHwgZWxlbS5ocmVmIHx8IH5lbGVtLnRhYkluZGV4ICk7XG5cdFx0fSxcblxuXHRcdC8vIEJvb2xlYW4gcHJvcGVydGllc1xuXHRcdFwiZW5hYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZmFsc2UgKSxcblx0XHRcImRpc2FibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCB0cnVlICksXG5cblx0XHRcImNoZWNrZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIEluIENTUzMsIDpjaGVja2VkIHNob3VsZCByZXR1cm4gYm90aCBjaGVja2VkIGFuZCBzZWxlY3RlZCBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgISFlbGVtLmNoZWNrZWQgKSB8fFxuXHRcdFx0XHQoIG5vZGVOYW1lID09PSBcIm9wdGlvblwiICYmICEhZWxlbS5zZWxlY3RlZCApO1xuXHRcdH0sXG5cblx0XHRcInNlbGVjdGVkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBBY2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSBtYWtlcyBzZWxlY3RlZC1ieS1kZWZhdWx0XG5cdFx0XHQvLyBvcHRpb25zIGluIFNhZmFyaSB3b3JrIHByb3Blcmx5XG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHRcdFx0XHRlbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uc2VsZWN0ZWQgPT09IHRydWU7XG5cdFx0fSxcblxuXHRcdC8vIENvbnRlbnRzXG5cdFx0XCJlbXB0eVwiOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG9cblx0XHRcdC8vIDplbXB0eSBpcyBuZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQgbm9kZXMgKHRleHQ6IDM7IGNkYXRhOiA0OyBlbnRpdHkgcmVmOiA1KSxcblx0XHRcdC8vICAgYnV0IG5vdCBieSBvdGhlcnMgKGNvbW1lbnQ6IDg7IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb246IDc7IGV0Yy4pXG5cdFx0XHQvLyBub2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRyaWJ1dGVzICgyKSBkbyBub3QgYXBwZWFyIGFzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlIDwgNiApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRcInBhcmVudFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAhRXhwci5wc2V1ZG9zWyBcImVtcHR5XCIgXSggZWxlbSApO1xuXHRcdH0sXG5cblx0XHQvLyBFbGVtZW50L2lucHV0IHR5cGVzXG5cdFx0XCJoZWFkZXJcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmhlYWRlci50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdFwiaW5wdXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmlucHV0cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdFwiYnV0dG9uXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gXCJidXR0b25cIiB8fCBuYW1lID09PSBcImJ1dHRvblwiO1xuXHRcdH0sXG5cblx0XHRcInRleHRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgYXR0cjtcblx0XHRcdHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiAmJlxuXHRcdFx0XHRlbGVtLnR5cGUgPT09IFwidGV4dFwiICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUU8OFxuXHRcdFx0XHQvLyBOZXcgSFRNTDUgYXR0cmlidXRlIHZhbHVlcyAoZS5nLiwgXCJzZWFyY2hcIikgYXBwZWFyIHdpdGggZWxlbS50eXBlID09PSBcInRleHRcIlxuXHRcdFx0XHQoICggYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICkgPT0gbnVsbCB8fFxuXHRcdFx0XHRcdGF0dHIudG9Mb3dlckNhc2UoKSA9PT0gXCJ0ZXh0XCIgKTtcblx0XHR9LFxuXG5cdFx0Ly8gUG9zaXRpb24taW4tY29sbGVjdGlvblxuXHRcdFwiZmlyc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyAwIF07XG5cdFx0fSApLFxuXG5cdFx0XCJsYXN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBfbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gWyBsZW5ndGggLSAxIF07XG5cdFx0fSApLFxuXG5cdFx0XCJlcVwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggX21hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTtcblx0XHR9ICksXG5cblx0XHRcImV2ZW5cIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdFwib2RkXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMTtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRcImx0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/XG5cdFx0XHRcdGFyZ3VtZW50ICsgbGVuZ3RoIDpcblx0XHRcdFx0YXJndW1lbnQgPiBsZW5ndGggP1xuXHRcdFx0XHRcdGxlbmd0aCA6XG5cdFx0XHRcdFx0YXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7IC0taSA+PSAwOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApLFxuXG5cdFx0XCJndFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyArK2kgPCBsZW5ndGg7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9IClcblx0fVxufTtcblxuRXhwci5wc2V1ZG9zWyBcIm50aFwiIF0gPSBFeHByLnBzZXVkb3NbIFwiZXFcIiBdO1xuXG4vLyBBZGQgYnV0dG9uL2lucHV0IHR5cGUgcHNldWRvc1xuZm9yICggaSBpbiB7IHJhZGlvOiB0cnVlLCBjaGVja2JveDogdHJ1ZSwgZmlsZTogdHJ1ZSwgcGFzc3dvcmQ6IHRydWUsIGltYWdlOiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkgKTtcbn1cbmZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUsIHJlc2V0OiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlQnV0dG9uUHNldWRvKCBpICk7XG59XG5cbi8vIEVhc3kgQVBJIGZvciBjcmVhdGluZyBuZXcgc2V0RmlsdGVyc1xuZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9XG5zZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIuZmlsdGVycyA9IEV4cHIucHNldWRvcztcbkV4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7XG5cbnRva2VuaXplID0gU2l6emxlLnRva2VuaXplID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7XG5cdHZhciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLFxuXHRcdHNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsXG5cdFx0Y2FjaGVkID0gdG9rZW5DYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggY2FjaGVkICkge1xuXHRcdHJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7XG5cdH1cblxuXHRzb0ZhciA9IHNlbGVjdG9yO1xuXHRncm91cHMgPSBbXTtcblx0cHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyO1xuXG5cdHdoaWxlICggc29GYXIgKSB7XG5cblx0XHQvLyBDb21tYSBhbmQgZmlyc3QgcnVuXG5cdFx0aWYgKCAhbWF0Y2hlZCB8fCAoIG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNvRmFyICkgKSApIHtcblx0XHRcdGlmICggbWF0Y2ggKSB7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMgYXMgdmFsaWRcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hbIDAgXS5sZW5ndGggKSB8fCBzb0Zhcjtcblx0XHRcdH1cblx0XHRcdGdyb3Vwcy5wdXNoKCAoIHRva2VucyA9IFtdICkgKTtcblx0XHR9XG5cblx0XHRtYXRjaGVkID0gZmFsc2U7XG5cblx0XHQvLyBDb21iaW5hdG9yc1xuXHRcdGlmICggKCBtYXRjaCA9IHJjb21iaW5hdG9ycy5leGVjKCBzb0ZhciApICkgKSB7XG5cdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdHRva2Vucy5wdXNoKCB7XG5cdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXG5cdFx0XHRcdC8vIENhc3QgZGVzY2VuZGFudCBjb21iaW5hdG9ycyB0byBzcGFjZVxuXHRcdFx0XHR0eXBlOiBtYXRjaFsgMCBdLnJlcGxhY2UoIHJ0cmltLCBcIiBcIiApXG5cdFx0XHR9ICk7XG5cdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZpbHRlcnNcblx0XHRmb3IgKCB0eXBlIGluIEV4cHIuZmlsdGVyICkge1xuXHRcdFx0aWYgKCAoIG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSApICYmICggIXByZUZpbHRlcnNbIHR5cGUgXSB8fFxuXHRcdFx0XHQoIG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApICkgKSApIHtcblx0XHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHRcdHRva2Vucy5wdXNoKCB7XG5cdFx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cdFx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0XHRtYXRjaGVzOiBtYXRjaFxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCAhbWF0Y2hlZCApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnZhbGlkIGV4Y2Vzc1xuXHQvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmdcblx0Ly8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zXG5cdHJldHVybiBwYXJzZU9ubHkgP1xuXHRcdHNvRmFyLmxlbmd0aCA6XG5cdFx0c29GYXIgP1xuXHRcdFx0U2l6emxlLmVycm9yKCBzZWxlY3RvciApIDpcblxuXHRcdFx0Ly8gQ2FjaGUgdGhlIHRva2Vuc1xuXHRcdFx0dG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7XG59O1xuXG5mdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdHNlbGVjdG9yID0gXCJcIjtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0c2VsZWN0b3IgKz0gdG9rZW5zWyBpIF0udmFsdWU7XG5cdH1cblx0cmV0dXJuIHNlbGVjdG9yO1xufVxuXG5mdW5jdGlvbiBhZGRDb21iaW5hdG9yKCBtYXRjaGVyLCBjb21iaW5hdG9yLCBiYXNlICkge1xuXHR2YXIgZGlyID0gY29tYmluYXRvci5kaXIsXG5cdFx0c2tpcCA9IGNvbWJpbmF0b3IubmV4dCxcblx0XHRrZXkgPSBza2lwIHx8IGRpcixcblx0XHRjaGVja05vbkVsZW1lbnRzID0gYmFzZSAmJiBrZXkgPT09IFwicGFyZW50Tm9kZVwiLFxuXHRcdGRvbmVOYW1lID0gZG9uZSsrO1xuXG5cdHJldHVybiBjb21iaW5hdG9yLmZpcnN0ID9cblxuXHRcdC8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gOlxuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBvbGRDYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsXG5cdFx0XHRcdG5ld0NhY2hlID0gWyBkaXJydW5zLCBkb25lTmFtZSBdO1xuXG5cdFx0XHQvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBjb21iaW5hdG9yIGNhY2hpbmdcblx0XHRcdGlmICggeG1sICkge1xuXHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKCBlbGVtWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdCggb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0aWYgKCBza2lwICYmIHNraXAgPT09IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSApIHtcblx0XHRcdFx0XHRcdFx0ZWxlbSA9IGVsZW1bIGRpciBdIHx8IGVsZW07XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCAoIG9sZENhY2hlID0gdW5pcXVlQ2FjaGVbIGtleSBdICkgJiZcblx0XHRcdFx0XHRcdFx0b2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBc3NpZ24gdG8gbmV3Q2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKCBuZXdDYWNoZVsgMiBdID0gb2xkQ2FjaGVbIDIgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXVzZSBuZXdjYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyBrZXkgXSA9IG5ld0NhY2hlO1xuXG5cdFx0XHRcdFx0XHRcdC8vIEEgbWF0Y2ggbWVhbnMgd2UncmUgZG9uZTsgYSBmYWlsIG1lYW5zIHdlIGhhdmUgdG8ga2VlcCBjaGVja2luZ1xuXHRcdFx0XHRcdFx0XHRpZiAoICggbmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xufVxuXG5mdW5jdGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7XG5cdHJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID9cblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAhbWF0Y2hlcnNbIGkgXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IDpcblx0XHRtYXRjaGVyc1sgMCBdO1xufVxuXG5mdW5jdGlvbiBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciwgY29udGV4dHMsIHJlc3VsdHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBjb250ZXh0cy5sZW5ndGg7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHRzWyBpIF0sIHJlc3VsdHMgKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHtcblx0dmFyIGVsZW0sXG5cdFx0bmV3VW5tYXRjaGVkID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bGVuID0gdW5tYXRjaGVkLmxlbmd0aCxcblx0XHRtYXBwZWQgPSBtYXAgIT0gbnVsbDtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoICggZWxlbSA9IHVubWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRpZiAoICFmaWx0ZXIgfHwgZmlsdGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0bmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0aWYgKCBtYXBwZWQgKSB7XG5cdFx0XHRcdFx0bWFwLnB1c2goIGkgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXdVbm1hdGNoZWQ7XG59XG5cbmZ1bmN0aW9uIHNldE1hdGNoZXIoIHByZUZpbHRlciwgc2VsZWN0b3IsIG1hdGNoZXIsIHBvc3RGaWx0ZXIsIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApIHtcblx0aWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbHRlciA9IHNldE1hdGNoZXIoIHBvc3RGaWx0ZXIgKTtcblx0fVxuXHRpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmluZGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICk7XG5cdH1cblx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHtcblx0XHR2YXIgdGVtcCwgaSwgZWxlbSxcblx0XHRcdHByZU1hcCA9IFtdLFxuXHRcdFx0cG9zdE1hcCA9IFtdLFxuXHRcdFx0cHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHRcblx0XHRcdGVsZW1zID0gc2VlZCB8fCBtdWx0aXBsZUNvbnRleHRzKFxuXHRcdFx0XHRzZWxlY3RvciB8fCBcIipcIixcblx0XHRcdFx0Y29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCxcblx0XHRcdFx0W11cblx0XHRcdCksXG5cblx0XHRcdC8vIFByZWZpbHRlciB0byBnZXQgbWF0Y2hlciBpbnB1dCwgcHJlc2VydmluZyBhIG1hcCBmb3Igc2VlZC1yZXN1bHRzIHN5bmNocm9uaXphdGlvblxuXHRcdFx0bWF0Y2hlckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGNvbmRlbnNlKCBlbGVtcywgcHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0ZWxlbXMsXG5cblx0XHRcdG1hdGNoZXJPdXQgPSBtYXRjaGVyID9cblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLFxuXHRcdFx0XHRwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/XG5cblx0XHRcdFx0XHQvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3Nhcnlcblx0XHRcdFx0XHRbXSA6XG5cblx0XHRcdFx0XHQvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHlcblx0XHRcdFx0XHRyZXN1bHRzIDpcblx0XHRcdFx0bWF0Y2hlckluO1xuXG5cdFx0Ly8gRmluZCBwcmltYXJ5IG1hdGNoZXNcblx0XHRpZiAoIG1hdGNoZXIgKSB7XG5cdFx0XHRtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHBvc3RGaWx0ZXJcblx0XHRpZiAoIHBvc3RGaWx0ZXIgKSB7XG5cdFx0XHR0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTtcblx0XHRcdHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTtcblxuXHRcdFx0Ly8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJblxuXHRcdFx0aSA9IHRlbXAubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggKCBlbGVtID0gdGVtcFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlck91dFsgcG9zdE1hcFsgaSBdIF0gPSAhKCBtYXRjaGVySW5bIHBvc3RNYXBbIGkgXSBdID0gZWxlbSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyIHx8IHByZUZpbHRlciApIHtcblx0XHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzXG5cdFx0XHRcdFx0dGVtcCA9IFtdO1xuXHRcdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gbWF0Y2hlck91dFsgaSBdICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2hcblx0XHRcdFx0XHRcdFx0dGVtcC5wdXNoKCAoIG1hdGNoZXJJblsgaSBdID0gZWxlbSApICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsICggbWF0Y2hlck91dCA9IFtdICksIHRlbXAsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWRcblx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRpZiAoICggZWxlbSA9IG1hdGNoZXJPdXRbIGkgXSApICYmXG5cdFx0XHRcdFx0XHQoIHRlbXAgPSBwb3N0RmluZGVyID8gaW5kZXhPZiggc2VlZCwgZWxlbSApIDogcHJlTWFwWyBpIF0gKSA+IC0xICkge1xuXG5cdFx0XHRcdFx0XHRzZWVkWyB0ZW1wIF0gPSAhKCByZXN1bHRzWyB0ZW1wIF0gPSBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBBZGQgZWxlbWVudHMgdG8gcmVzdWx0cywgdGhyb3VnaCBwb3N0RmluZGVyIGlmIGRlZmluZWRcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlck91dCA9IGNvbmRlbnNlKFxuXHRcdFx0XHRtYXRjaGVyT3V0ID09PSByZXN1bHRzID9cblx0XHRcdFx0XHRtYXRjaGVyT3V0LnNwbGljZSggcHJlZXhpc3RpbmcsIG1hdGNoZXJPdXQubGVuZ3RoICkgOlxuXHRcdFx0XHRcdG1hdGNoZXJPdXRcblx0XHRcdCk7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsIHJlc3VsdHMsIG1hdGNoZXJPdXQsIHhtbCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgbWF0Y2hlck91dCApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSApO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkge1xuXHR2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0bGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyAwIF0udHlwZSBdLFxuXHRcdGltcGxpY2l0UmVsYXRpdmUgPSBsZWFkaW5nUmVsYXRpdmUgfHwgRXhwci5yZWxhdGl2ZVsgXCIgXCIgXSxcblx0XHRpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsXG5cblx0XHQvLyBUaGUgZm91bmRhdGlvbmFsIG1hdGNoZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSByZWFjaGFibGUgZnJvbSB0b3AtbGV2ZWwgY29udGV4dChzKVxuXHRcdG1hdGNoQ29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGNoZWNrQ29udGV4dDtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hBbnlDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZiggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT09IG91dGVybW9zdENvbnRleHQgKSApIHx8IChcblx0XHRcdFx0KCBjaGVja0NvbnRleHQgPSBjb250ZXh0ICkubm9kZVR5cGUgP1xuXHRcdFx0XHRcdG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRcdG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTtcblxuXHRcdFx0Ly8gQXZvaWQgaGFuZ2luZyBvbnRvIGVsZW1lbnQgKGlzc3VlICMyOTkpXG5cdFx0XHRjaGVja0NvbnRleHQgPSBudWxsO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9IF07XG5cblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0aWYgKCAoIG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIGkgXS50eXBlIF0gKSApIHtcblx0XHRcdG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKCBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwgbWF0Y2hlciApIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXIgPSBFeHByLmZpbHRlclsgdG9rZW5zWyBpIF0udHlwZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbIGkgXS5tYXRjaGVzICk7XG5cblx0XHRcdC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyXG5cdFx0XHRpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHtcblxuXHRcdFx0XHQvLyBGaW5kIHRoZSBuZXh0IHJlbGF0aXZlIG9wZXJhdG9yIChpZiBhbnkpIGZvciBwcm9wZXIgaGFuZGxpbmdcblx0XHRcdFx0aiA9ICsraTtcblx0XHRcdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIGogXS50eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNldE1hdGNoZXIoXG5cdFx0XHRcdFx0aSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksXG5cdFx0XHRcdFx0aSA+IDEgJiYgdG9TZWxlY3RvcihcblxuXHRcdFx0XHRcdC8vIElmIHRoZSBwcmVjZWRpbmcgdG9rZW4gd2FzIGEgZGVzY2VuZGFudCBjb21iaW5hdG9yLCBpbnNlcnQgYW4gaW1wbGljaXQgYW55LWVsZW1lbnQgYCpgXG5cdFx0XHRcdFx0dG9rZW5zXG5cdFx0XHRcdFx0XHQuc2xpY2UoIDAsIGkgLSAxIClcblx0XHRcdFx0XHRcdC5jb25jYXQoIHsgdmFsdWU6IHRva2Vuc1sgaSAtIDIgXS50eXBlID09PSBcIiBcIiA/IFwiKlwiIDogXCJcIiB9IClcblx0XHRcdFx0XHQpLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSxcblx0XHRcdFx0XHRtYXRjaGVyLFxuXHRcdFx0XHRcdGkgPCBqICYmIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMuc2xpY2UoIGksIGogKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoICggdG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkgKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgdG9TZWxlY3RvciggdG9rZW5zIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdG1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApIHtcblx0dmFyIGJ5U2V0ID0gc2V0TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2VlZCwgY29udGV4dCwgeG1sLCByZXN1bHRzLCBvdXRlcm1vc3QgKSB7XG5cdFx0XHR2YXIgZWxlbSwgaiwgbWF0Y2hlcixcblx0XHRcdFx0bWF0Y2hlZENvdW50ID0gMCxcblx0XHRcdFx0aSA9IFwiMFwiLFxuXHRcdFx0XHR1bm1hdGNoZWQgPSBzZWVkICYmIFtdLFxuXHRcdFx0XHRzZXRNYXRjaGVkID0gW10sXG5cdFx0XHRcdGNvbnRleHRCYWNrdXAgPSBvdXRlcm1vc3RDb250ZXh0LFxuXG5cdFx0XHRcdC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHRcblx0XHRcdFx0ZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbIFwiVEFHXCIgXSggXCIqXCIsIG91dGVybW9zdCApLFxuXG5cdFx0XHRcdC8vIFVzZSBpbnRlZ2VyIGRpcnJ1bnMgaWZmIHRoaXMgaXMgdGhlIG91dGVybW9zdCBtYXRjaGVyXG5cdFx0XHRcdGRpcnJ1bnNVbmlxdWUgPSAoIGRpcnJ1bnMgKz0gY29udGV4dEJhY2t1cCA9PSBudWxsID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgMC4xICksXG5cdFx0XHRcdGxlbiA9IGVsZW1zLmxlbmd0aDtcblxuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHQgPT0gZG9jdW1lbnQgfHwgY29udGV4dCB8fCBvdXRlcm1vc3Q7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBlbGVtZW50cyBwYXNzaW5nIGVsZW1lbnRNYXRjaGVycyBkaXJlY3RseSB0byByZXN1bHRzXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTw5LCBTYWZhcmlcblx0XHRcdC8vIFRvbGVyYXRlIE5vZGVMaXN0IHByb3BlcnRpZXMgKElFOiBcImxlbmd0aFwiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZyBlbGVtZW50cyBieSBpZFxuXHRcdFx0Zm9yICggOyBpICE9PSBsZW4gJiYgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHtcblx0XHRcdFx0XHRqID0gMDtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRcdFx0aWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVyRG9jdW1lbnQgIT0gZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHRcdFx0XHRcdFx0eG1sID0gIWRvY3VtZW50SXNIVE1MO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUcmFjayB1bm1hdGNoZWQgZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzXG5cdFx0XHRcdGlmICggYnlTZXQgKSB7XG5cblx0XHRcdFx0XHQvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzXG5cdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtICkgKSB7XG5cdFx0XHRcdFx0XHRtYXRjaGVkQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90XG5cdFx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdFx0dW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gYGlgIGlzIG5vdyB0aGUgY291bnQgb2YgZWxlbWVudHMgdmlzaXRlZCBhYm92ZSwgYW5kIGFkZGluZyBpdCB0byBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gbWFrZXMgdGhlIGxhdHRlciBub25uZWdhdGl2ZS5cblx0XHRcdG1hdGNoZWRDb3VudCArPSBpO1xuXG5cdFx0XHQvLyBBcHBseSBzZXQgZmlsdGVycyB0byB1bm1hdGNoZWQgZWxlbWVudHNcblx0XHRcdC8vIE5PVEU6IFRoaXMgY2FuIGJlIHNraXBwZWQgaWYgdGhlcmUgYXJlIG5vIHVubWF0Y2hlZCBlbGVtZW50cyAoaS5lLiwgYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIGVxdWFscyBgaWApLCB1bmxlc3Mgd2UgZGlkbid0IHZpc2l0IF9hbnlfIGVsZW1lbnRzIGluIHRoZSBhYm92ZSBsb29wIGJlY2F1c2Ugd2UgaGF2ZVxuXHRcdFx0Ly8gbm8gZWxlbWVudCBtYXRjaGVycyBhbmQgbm8gc2VlZC5cblx0XHRcdC8vIEluY3JlbWVudGluZyBhbiBpbml0aWFsbHktc3RyaW5nIFwiMFwiIGBpYCBhbGxvd3MgYGlgIHRvIHJlbWFpbiBhIHN0cmluZyBvbmx5IGluIHRoYXRcblx0XHRcdC8vIGNhc2UsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgXCIwMFwiIGBtYXRjaGVkQ291bnRgIHRoYXQgZGlmZmVycyBmcm9tIGBpYCBidXQgaXMgYWxzb1xuXHRcdFx0Ly8gbnVtZXJpY2FsbHkgemVyby5cblx0XHRcdGlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkge1xuXHRcdFx0XHRqID0gMDtcblx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoZXIgPSBzZXRNYXRjaGVyc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzZWVkICkge1xuXG5cdFx0XHRcdFx0Ly8gUmVpbnRlZ3JhdGUgZWxlbWVudCBtYXRjaGVzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3Igc29ydGluZ1xuXHRcdFx0XHRcdGlmICggbWF0Y2hlZENvdW50ID4gMCApIHtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoICEoIHVubWF0Y2hlZFsgaSBdIHx8IHNldE1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHNldE1hdGNoZWRbIGkgXSA9IHBvcC5jYWxsKCByZXN1bHRzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBEaXNjYXJkIGluZGV4IHBsYWNlaG9sZGVyIHZhbHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0Y2hlc1xuXHRcdFx0XHRcdHNldE1hdGNoZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQWRkIG1hdGNoZXMgdG8gcmVzdWx0c1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7XG5cblx0XHRcdFx0Ly8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3VjY2VlZGluZyBtdWx0aXBsZSBzdWNjZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nXG5cdFx0XHRcdGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdCggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkge1xuXG5cdFx0XHRcdFx0U2l6emxlLnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdmVycmlkZSBtYW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnNcblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bm1hdGNoZWQ7XG5cdFx0fTtcblxuXHRyZXR1cm4gYnlTZXQgP1xuXHRcdG1hcmtGdW5jdGlvbiggc3VwZXJNYXRjaGVyICkgOlxuXHRcdHN1cGVyTWF0Y2hlcjtcbn1cblxuY29tcGlsZSA9IFNpenpsZS5jb21waWxlID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBtYXRjaCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHtcblx0dmFyIGksXG5cdFx0c2V0TWF0Y2hlcnMgPSBbXSxcblx0XHRlbGVtZW50TWF0Y2hlcnMgPSBbXSxcblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCAhY2FjaGVkICkge1xuXG5cdFx0Ly8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50XG5cdFx0aWYgKCAhbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdH1cblx0XHRpID0gbWF0Y2gubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0Y2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoWyBpIF0gKTtcblx0XHRcdGlmICggY2FjaGVkWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhY2hlIHRoZSBjb21waWxlZCBmdW5jdGlvblxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoXG5cdFx0XHRzZWxlY3Rvcixcblx0XHRcdG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApXG5cdFx0KTtcblxuXHRcdC8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvblxuXHRcdGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG5cdHJldHVybiBjYWNoZWQ7XG59O1xuXG4vKipcbiAqIEEgbG93LWxldmVsIHNlbGVjdGlvbiBmdW5jdGlvbiB0aGF0IHdvcmtzIHdpdGggU2l6emxlJ3MgY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzZWxlY3RvciBBIHNlbGVjdG9yIG9yIGEgcHJlLWNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb24gYnVpbHQgd2l0aCBTaXp6bGUuY29tcGlsZVxuICogQHBhcmFtIHtFbGVtZW50fSBjb250ZXh0XG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0c11cbiAqIEBwYXJhbSB7QXJyYXl9IFtzZWVkXSBBIHNldCBvZiBlbGVtZW50cyB0byBtYXRjaCBhZ2FpbnN0XG4gKi9cbnNlbGVjdCA9IFNpenpsZS5zZWxlY3QgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLFxuXHRcdGNvbXBpbGVkID0gdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgc2VsZWN0b3IsXG5cdFx0bWF0Y2ggPSAhc2VlZCAmJiB0b2tlbml6ZSggKCBzZWxlY3RvciA9IGNvbXBpbGVkLnNlbGVjdG9yIHx8IHNlbGVjdG9yICkgKTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBUcnkgdG8gbWluaW1pemUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzZWxlY3RvciBpbiB0aGUgbGlzdCBhbmQgbm8gc2VlZFxuXHQvLyAodGhlIGxhdHRlciBvZiB3aGljaCBndWFyYW50ZWVzIHVzIGNvbnRleHQpXG5cdGlmICggbWF0Y2gubGVuZ3RoID09PSAxICkge1xuXG5cdFx0Ly8gUmVkdWNlIGNvbnRleHQgaWYgdGhlIGxlYWRpbmcgY29tcG91bmQgc2VsZWN0b3IgaXMgYW4gSURcblx0XHR0b2tlbnMgPSBtYXRjaFsgMCBdID0gbWF0Y2hbIDAgXS5zbGljZSggMCApO1xuXHRcdGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKCB0b2tlbiA9IHRva2Vuc1sgMCBdICkudHlwZSA9PT0gXCJJRFwiICYmXG5cdFx0XHRjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmIGRvY3VtZW50SXNIVE1MICYmIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgMSBdLnR5cGUgXSApIHtcblxuXHRcdFx0Y29udGV4dCA9ICggRXhwci5maW5kWyBcIklEXCIgXSggdG9rZW4ubWF0Y2hlc1sgMCBdXG5cdFx0XHRcdC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLCBjb250ZXh0ICkgfHwgW10gKVsgMCBdO1xuXHRcdFx0aWYgKCAhY29udGV4dCApIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdC8vIFByZWNvbXBpbGVkIG1hdGNoZXJzIHdpbGwgc3RpbGwgdmVyaWZ5IGFuY2VzdHJ5LCBzbyBzdGVwIHVwIGEgbGV2ZWxcblx0XHRcdH0gZWxzZSBpZiAoIGNvbXBpbGVkICkge1xuXHRcdFx0XHRjb250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nXG5cdFx0aSA9IG1hdGNoRXhwclsgXCJuZWVkc0NvbnRleHRcIiBdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRva2VuID0gdG9rZW5zWyBpIF07XG5cblx0XHRcdC8vIEFib3J0IGlmIHdlIGhpdCBhIGNvbWJpbmF0b3Jcblx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgKCB0eXBlID0gdG9rZW4udHlwZSApIF0gKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAoIGZpbmQgPSBFeHByLmZpbmRbIHR5cGUgXSApICkge1xuXG5cdFx0XHRcdC8vIFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21iaW5hdG9yc1xuXHRcdFx0XHRpZiAoICggc2VlZCA9IGZpbmQoXG5cdFx0XHRcdFx0dG9rZW4ubWF0Y2hlc1sgMCBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksXG5cdFx0XHRcdFx0cnNpYmxpbmcudGVzdCggdG9rZW5zWyAwIF0udHlwZSApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dFxuXHRcdFx0XHQpICkgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHlcblx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKCBpLCAxICk7XG5cdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKTtcblx0XHRcdFx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkXG5cdC8vIFByb3ZpZGUgYG1hdGNoYCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJvdmVcblx0KCBjb21waWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSApKFxuXHRcdHNlZWQsXG5cdFx0Y29udGV4dCxcblx0XHQhZG9jdW1lbnRJc0hUTUwsXG5cdFx0cmVzdWx0cyxcblx0XHQhY29udGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdCk7XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLy8gT25lLXRpbWUgYXNzaWdubWVudHNcblxuLy8gU29ydCBzdGFiaWxpdHlcbnN1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoIFwiXCIgKS5zb3J0KCBzb3J0T3JkZXIgKS5qb2luKCBcIlwiICkgPT09IGV4cGFuZG87XG5cbi8vIFN1cHBvcnQ6IENocm9tZSAxNC0zNStcbi8vIEFsd2F5cyBhc3N1bWUgZHVwbGljYXRlcyBpZiB0aGV5IGFyZW4ndCBwYXNzZWQgdG8gdGhlIGNvbXBhcmlzb24gZnVuY3Rpb25cbnN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcyA9ICEhaGFzRHVwbGljYXRlO1xuXG4vLyBJbml0aWFsaXplIGFnYWluc3QgdGhlIGRlZmF1bHQgZG9jdW1lbnRcbnNldERvY3VtZW50KCk7XG5cbi8vIFN1cHBvcnQ6IFdlYmtpdDw1MzcuMzIgLSBTYWZhcmkgNi4wLjMvQ2hyb21lIDI1IChmaXhlZCBpbiBDaHJvbWUgMjcpXG4vLyBEZXRhY2hlZCBub2RlcyBjb25mb3VuZGluZ2x5IGZvbGxvdyAqZWFjaCBvdGhlcipcbnN1cHBvcnQuc29ydERldGFjaGVkID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0Ly8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcpXG5cdHJldHVybiBlbC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJmaWVsZHNldFwiICkgKSAmIDE7XG59ICk7XG5cbi8vIFN1cHBvcnQ6IElFPDhcbi8vIFByZXZlbnQgYXR0cmlidXRlL3Byb3BlcnR5IFwiaW50ZXJwb2xhdGlvblwiXG4vLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM2NDI5JTI4VlMuODUlMjkuYXNweFxuaWYgKCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdGVsLmlubmVySFRNTCA9IFwiPGEgaHJlZj0nIyc+PC9hPlwiO1xuXHRyZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIFwiaHJlZlwiICkgPT09IFwiI1wiO1xufSApICkge1xuXHRhZGRIYW5kbGUoIFwidHlwZXxocmVmfGhlaWdodHx3aWR0aFwiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0eXBlXCIgPyAxIDogMiApO1xuXHRcdH1cblx0fSApO1xufVxuXG4vLyBTdXBwb3J0OiBJRTw5XG4vLyBVc2UgZGVmYXVsdFZhbHVlIGluIHBsYWNlIG9mIGdldEF0dHJpYnV0ZShcInZhbHVlXCIpXG5pZiAoICFzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxpbnB1dC8+XCI7XG5cdGVsLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCBcInZhbHVlXCIsIFwiXCIgKTtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gXCJcIjtcbn0gKSApIHtcblx0YWRkSGFuZGxlKCBcInZhbHVlXCIsIGZ1bmN0aW9uKCBlbGVtLCBfbmFtZSwgaXNYTUwgKSB7XG5cdFx0aWYgKCAhaXNYTUwgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kZWZhdWx0VmFsdWU7XG5cdFx0fVxuXHR9ICk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBnZXRBdHRyaWJ1dGVOb2RlIHRvIGZldGNoIGJvb2xlYW5zIHdoZW4gZ2V0QXR0cmlidXRlIGxpZXNcbmlmICggIWFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRyZXR1cm4gZWwuZ2V0QXR0cmlidXRlKCBcImRpc2FibGVkXCIgKSA9PSBudWxsO1xufSApICkge1xuXHRhZGRIYW5kbGUoIGJvb2xlYW5zLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHZhbDtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtWyBuYW1lIF0gPT09IHRydWUgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOlxuXHRcdFx0XHQoIHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApICkgJiYgdmFsLnNwZWNpZmllZCA/XG5cdFx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0XHRudWxsO1xuXHRcdH1cblx0fSApO1xufVxuXG5yZXR1cm4gU2l6emxlO1xuXG59ICkoIHdpbmRvdyApO1xuXG5cblxualF1ZXJ5LmZpbmQgPSBTaXp6bGU7XG5qUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7XG5cbi8vIERlcHJlY2F0ZWRcbmpRdWVyeS5leHByWyBcIjpcIiBdID0galF1ZXJ5LmV4cHIucHNldWRvcztcbmpRdWVyeS51bmlxdWVTb3J0ID0galF1ZXJ5LnVuaXF1ZSA9IFNpenpsZS51bmlxdWVTb3J0O1xualF1ZXJ5LnRleHQgPSBTaXp6bGUuZ2V0VGV4dDtcbmpRdWVyeS5pc1hNTERvYyA9IFNpenpsZS5pc1hNTDtcbmpRdWVyeS5jb250YWlucyA9IFNpenpsZS5jb250YWlucztcbmpRdWVyeS5lc2NhcGVTZWxlY3RvciA9IFNpenpsZS5lc2NhcGU7XG5cblxuXG5cbnZhciBkaXIgPSBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHtcblx0dmFyIG1hdGNoZWQgPSBbXSxcblx0XHR0cnVuY2F0ZSA9IHVudGlsICE9PSB1bmRlZmluZWQ7XG5cblx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICYmIGVsZW0ubm9kZVR5cGUgIT09IDkgKSB7XG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0aWYgKCB0cnVuY2F0ZSAmJiBqUXVlcnkoIGVsZW0gKS5pcyggdW50aWwgKSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRtYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBzaWJsaW5ncyA9IGZ1bmN0aW9uKCBuLCBlbGVtICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdO1xuXG5cdGZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7XG5cdFx0aWYgKCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7XG5cdFx0XHRtYXRjaGVkLnB1c2goIG4gKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHJuZWVkc0NvbnRleHQgPSBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7XG5cblxuXG5mdW5jdGlvbiBub2RlTmFtZSggZWxlbSwgbmFtZSApIHtcblxuICByZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKTtcblxufTtcbnZhciByc2luZ2xlVGFnID0gKCAvXjwoW2Etel1bXlxcL1xcMD46XFx4MjBcXHRcXHJcXG5cXGZdKilbXFx4MjBcXHRcXHJcXG5cXGZdKlxcLz8+KD86PFxcL1xcMT58KSQvaSApO1xuXG5cblxuLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3RcbmZ1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwgbm90ICkge1xuXHRpZiAoIGlzRnVuY3Rpb24oIHF1YWxpZmllciApICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIFNpbmdsZSBlbGVtZW50XG5cdGlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBBcnJheWxpa2Ugb2YgZWxlbWVudHMgKGpRdWVyeSwgYXJndW1lbnRzLCBBcnJheSlcblx0aWYgKCB0eXBlb2YgcXVhbGlmaWVyICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggaW5kZXhPZi5jYWxsKCBxdWFsaWZpZXIsIGVsZW0gKSA+IC0xICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBGaWx0ZXJlZCBkaXJlY3RseSBmb3IgYm90aCBzaW1wbGUgYW5kIGNvbXBsZXggc2VsZWN0b3JzXG5cdHJldHVybiBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QgKTtcbn1cblxualF1ZXJ5LmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkge1xuXHR2YXIgZWxlbSA9IGVsZW1zWyAwIF07XG5cblx0aWYgKCBub3QgKSB7XG5cdFx0ZXhwciA9IFwiOm5vdChcIiArIGV4cHIgKyBcIilcIjtcblx0fVxuXG5cdGlmICggZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZWxlbSwgZXhwciApID8gWyBlbGVtIF0gOiBbXTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzKCBleHByLCBqUXVlcnkuZ3JlcCggZWxlbXMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxO1xuXHR9ICkgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmluZDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBpLCByZXQsXG5cdFx0XHRsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdHNlbGYgPSB0aGlzO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApICk7XG5cdFx0fVxuXG5cdFx0cmV0ID0gdGhpcy5wdXNoU3RhY2soIFtdICk7XG5cblx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCBzZWxmWyBpIF0sIHJldCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsZW4gPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIHJldCApIDogcmV0O1xuXHR9LFxuXHRmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIGZhbHNlICkgKTtcblx0fSxcblx0bm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCB0cnVlICkgKTtcblx0fSxcblx0aXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gISF3aW5ub3coXG5cdFx0XHR0aGlzLFxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgcG9zaXRpb25hbC9yZWxhdGl2ZSBzZWxlY3RvciwgY2hlY2sgbWVtYmVyc2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0XG5cdFx0XHQvLyBzbyAkKFwicDpmaXJzdFwiKS5pcyhcInA6bGFzdFwiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gXCJwXCIuXG5cdFx0XHR0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgJiYgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID9cblx0XHRcdFx0alF1ZXJ5KCBzZWxlY3RvciApIDpcblx0XHRcdFx0c2VsZWN0b3IgfHwgW10sXG5cdFx0XHRmYWxzZVxuXHRcdCkubGVuZ3RoO1xuXHR9XG59ICk7XG5cblxuLy8gSW5pdGlhbGl6ZSBhIGpRdWVyeSBvYmplY3RcblxuXG4vLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudClcbnZhciByb290alF1ZXJ5LFxuXG5cdC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzXG5cdC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNTIHZpYSBsb2NhdGlvbi5oYXNoICgjOTUyMSlcblx0Ly8gU3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKCMxMTI5MDogbXVzdCBzdGFydCB3aXRoIDwpXG5cdC8vIFNob3J0Y3V0IHNpbXBsZSAjaWQgY2FzZSBmb3Igc3BlZWRcblx0cnF1aWNrRXhwciA9IC9eKD86XFxzKig8W1xcd1xcV10rPilbXj5dKnwjKFtcXHctXSspKSQvLFxuXG5cdGluaXQgPSBqUXVlcnkuZm4uaW5pdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcm9vdCApIHtcblx0XHR2YXIgbWF0Y2gsIGVsZW07XG5cblx0XHQvLyBIQU5ETEU6ICQoXCJcIiksICQobnVsbCksICQodW5kZWZpbmVkKSwgJChmYWxzZSlcblx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdC8vIE1ldGhvZCBpbml0KCkgYWNjZXB0cyBhbiBhbHRlcm5hdGUgcm9vdGpRdWVyeVxuXHRcdC8vIHNvIG1pZ3JhdGUgY2FuIHN1cHBvcnQgalF1ZXJ5LnN1YiAoZ2gtMjEwMSlcblx0XHRyb290ID0gcm9vdCB8fCByb290alF1ZXJ5O1xuXG5cdFx0Ly8gSGFuZGxlIEhUTUwgc3RyaW5nc1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0aWYgKCBzZWxlY3RvclsgMCBdID09PSBcIjxcIiAmJlxuXHRcdFx0XHRzZWxlY3Rvclsgc2VsZWN0b3IubGVuZ3RoIC0gMSBdID09PSBcIj5cIiAmJlxuXHRcdFx0XHRzZWxlY3Rvci5sZW5ndGggPj0gMyApIHtcblxuXHRcdFx0XHQvLyBBc3N1bWUgdGhhdCBzdHJpbmdzIHRoYXQgc3RhcnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRoZSByZWdleCBjaGVja1xuXHRcdFx0XHRtYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1hdGNoIGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVkIGZvciAjaWRcblx0XHRcdGlmICggbWF0Y2ggJiYgKCBtYXRjaFsgMSBdIHx8ICFjb250ZXh0ICkgKSB7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpXG5cdFx0XHRcdGlmICggbWF0Y2hbIDEgXSApIHtcblx0XHRcdFx0XHRjb250ZXh0ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbIDAgXSA6IGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBPcHRpb24gdG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUgdGhyb3duIGlmIHBhcnNlSFRNTCBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcywgalF1ZXJ5LnBhcnNlSFRNTChcblx0XHRcdFx0XHRcdG1hdGNoWyAxIF0sXG5cdFx0XHRcdFx0XHRjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50LFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCkgKTtcblxuXHRcdFx0XHRcdC8vIEhBTkRMRTogJChodG1sLCBwcm9wcylcblx0XHRcdFx0XHRpZiAoIHJzaW5nbGVUYWcudGVzdCggbWF0Y2hbIDEgXSApICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCBtYXRjaCBpbiBjb250ZXh0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFByb3BlcnRpZXMgb2YgY29udGV4dCBhcmUgY2FsbGVkIGFzIG1ldGhvZHMgaWYgcG9zc2libGVcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGlzWyBtYXRjaCBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpc1sgbWF0Y2ggXSggY29udGV4dFsgbWF0Y2ggXSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBvdGhlcndpc2Ugc2V0IGFzIGF0dHJpYnV0ZXNcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmF0dHIoIG1hdGNoLCBjb250ZXh0WyBtYXRjaCBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoI2lkKVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbIDIgXSApO1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdFxuXHRcdFx0XHRcdFx0dGhpc1sgMCBdID0gZWxlbTtcblx0XHRcdFx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsICQoLi4uKSlcblx0XHRcdH0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkge1xuXHRcdFx0XHRyZXR1cm4gKCBjb250ZXh0IHx8IHJvb3QgKS5maW5kKCBzZWxlY3RvciApO1xuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgY29udGV4dClcblx0XHRcdC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCkuZmluZChleHByKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSEFORExFOiAkKERPTUVsZW1lbnQpXG5cdFx0fSBlbHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7XG5cdFx0XHR0aGlzWyAwIF0gPSBzZWxlY3Rvcjtcblx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0Ly8gSEFORExFOiAkKGZ1bmN0aW9uKVxuXHRcdC8vIFNob3J0Y3V0IGZvciBkb2N1bWVudCByZWFkeVxuXHRcdH0gZWxzZSBpZiAoIGlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7XG5cdFx0XHRyZXR1cm4gcm9vdC5yZWFkeSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0cm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gRXhlY3V0ZSBpbW1lZGlhdGVseSBpZiByZWFkeSBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRzZWxlY3RvciggalF1ZXJ5ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7XG5cdH07XG5cbi8vIEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb25cbmluaXQucHJvdG90eXBlID0galF1ZXJ5LmZuO1xuXG4vLyBJbml0aWFsaXplIGNlbnRyYWwgcmVmZXJlbmNlXG5yb290alF1ZXJ5ID0galF1ZXJ5KCBkb2N1bWVudCApO1xuXG5cbnZhciBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxcblxuXHQvLyBNZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldFxuXHRndWFyYW50ZWVkVW5pcXVlID0ge1xuXHRcdGNoaWxkcmVuOiB0cnVlLFxuXHRcdGNvbnRlbnRzOiB0cnVlLFxuXHRcdG5leHQ6IHRydWUsXG5cdFx0cHJldjogdHJ1ZVxuXHR9O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGhhczogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHR2YXIgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksXG5cdFx0XHRsID0gdGFyZ2V0cy5sZW5ndGg7XG5cblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1sgaSBdICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Y2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29udGV4dCApIHtcblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRtYXRjaGVkID0gW10sXG5cdFx0XHR0YXJnZXRzID0gdHlwZW9mIHNlbGVjdG9ycyAhPT0gXCJzdHJpbmdcIiAmJiBqUXVlcnkoIHNlbGVjdG9ycyApO1xuXG5cdFx0Ly8gUG9zaXRpb25hbCBzZWxlY3RvcnMgbmV2ZXIgbWF0Y2gsIHNpbmNlIHRoZXJlJ3Mgbm8gX3NlbGVjdGlvbl8gY29udGV4dFxuXHRcdGlmICggIXJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3JzICkgKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZvciAoIGN1ciA9IHRoaXNbIGkgXTsgY3VyICYmIGN1ciAhPT0gY29udGV4dDsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cblx0XHRcdFx0XHQvLyBBbHdheXMgc2tpcCBkb2N1bWVudCBmcmFnbWVudHNcblx0XHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA8IDExICYmICggdGFyZ2V0cyA/XG5cdFx0XHRcdFx0XHR0YXJnZXRzLmluZGV4KCBjdXIgKSA+IC0xIDpcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcGFzcyBub24tZWxlbWVudHMgdG8gU2l6emxlXG5cdFx0XHRcdFx0XHRjdXIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBjdXIsIHNlbGVjdG9ycyApICkgKSB7XG5cblx0XHRcdFx0XHRcdG1hdGNoZWQucHVzaCggY3VyICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQubGVuZ3RoID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICkgOiBtYXRjaGVkICk7XG5cdH0sXG5cblx0Ly8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbiB0aGUgc2V0XG5cdGluZGV4OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXggaW4gcGFyZW50XG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybiAoIHRoaXNbIDAgXSAmJiB0aGlzWyAwIF0ucGFyZW50Tm9kZSApID8gdGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGggOiAtMTtcblx0XHR9XG5cblx0XHQvLyBJbmRleCBpbiBzZWxlY3RvclxuXHRcdGlmICggdHlwZW9mIGVsZW0gPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdGhpc1sgMCBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50XG5cdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggdGhpcyxcblxuXHRcdFx0Ly8gSWYgaXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1c2VkXG5cdFx0XHRlbGVtLmpxdWVyeSA/IGVsZW1bIDAgXSA6IGVsZW1cblx0XHQpO1xuXHR9LFxuXG5cdGFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayhcblx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0KCksIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSApXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblxuXHRhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID9cblx0XHRcdHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoIHNlbGVjdG9yIClcblx0XHQpO1xuXHR9XG59ICk7XG5cbmZ1bmN0aW9uIHNpYmxpbmcoIGN1ciwgZGlyICkge1xuXHR3aGlsZSAoICggY3VyID0gY3VyWyBkaXIgXSApICYmIGN1ci5ub2RlVHlwZSAhPT0gMSApIHt9XG5cdHJldHVybiBjdXI7XG59XG5cbmpRdWVyeS5lYWNoKCB7XG5cdHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRyZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsO1xuXHR9LFxuXHRwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiApO1xuXHR9LFxuXHRwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIsIHVudGlsICk7XG5cdH0sXG5cdG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0cHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoICggZWxlbS5wYXJlbnROb2RlIHx8IHt9ICkuZmlyc3RDaGlsZCwgZWxlbSApO1xuXHR9LFxuXHRjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCBlbGVtLmZpcnN0Q2hpbGQgKTtcblx0fSxcblx0Y29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdGlmICggZWxlbS5jb250ZW50RG9jdW1lbnQgIT0gbnVsbCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMStcblx0XHRcdC8vIDxvYmplY3Q+IGVsZW1lbnRzIHdpdGggbm8gYGRhdGFgIGF0dHJpYnV0ZSBoYXMgYW4gb2JqZWN0XG5cdFx0XHQvLyBgY29udGVudERvY3VtZW50YCB3aXRoIGEgYG51bGxgIHByb3RvdHlwZS5cblx0XHRcdGdldFByb3RvKCBlbGVtLmNvbnRlbnREb2N1bWVudCApICkge1xuXG5cdFx0XHRyZXR1cm4gZWxlbS5jb250ZW50RG9jdW1lbnQ7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHksIGlPUyA3IG9ubHksIEFuZHJvaWQgQnJvd3NlciA8PTQuMyBvbmx5XG5cdFx0Ly8gVHJlYXQgdGhlIHRlbXBsYXRlIGVsZW1lbnQgYXMgYSByZWd1bGFyIG9uZSBpbiBicm93c2VycyB0aGF0XG5cdFx0Ly8gZG9uJ3Qgc3VwcG9ydCBpdC5cblx0XHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRlbXBsYXRlXCIgKSApIHtcblx0XHRcdGVsZW0gPSBlbGVtLmNvbnRlbnQgfHwgZWxlbTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5jaGlsZE5vZGVzICk7XG5cdH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkge1xuXHRcdHZhciBtYXRjaGVkID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7XG5cblx0XHRpZiAoIG5hbWUuc2xpY2UoIC01ICkgIT09IFwiVW50aWxcIiApIHtcblx0XHRcdHNlbGVjdG9yID0gdW50aWw7XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRtYXRjaGVkID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIG1hdGNoZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMubGVuZ3RoID4gMSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGR1cGxpY2F0ZXNcblx0XHRcdGlmICggIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSApIHtcblx0XHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV2ZXJzZSBvcmRlciBmb3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZhdGl2ZXNcblx0XHRcdGlmICggcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHtcblx0XHRcdFx0bWF0Y2hlZC5yZXZlcnNlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkICk7XG5cdH07XG59ICk7XG52YXIgcm5vdGh0bWx3aGl0ZSA9ICggL1teXFx4MjBcXHRcXHJcXG5cXGZdKy9nICk7XG5cblxuXG4vLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lc1xuZnVuY3Rpb24gY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHtcblx0dmFyIG9iamVjdCA9IHt9O1xuXHRqUXVlcnkuZWFjaCggb3B0aW9ucy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdLCBmdW5jdGlvbiggXywgZmxhZyApIHtcblx0XHRvYmplY3RbIGZsYWcgXSA9IHRydWU7XG5cdH0gKTtcblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLypcbiAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqXHRvcHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQgd2lsbCBjaGFuZ2UgaG93XG4gKlx0XHRcdHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBvYmplY3RcbiAqXG4gKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZVxuICogXCJmaXJlZFwiIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIFBvc3NpYmxlIG9wdGlvbnM6XG4gKlxuICpcdG9uY2U6XHRcdFx0d2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHRtZW1vcnk6XHRcdFx0d2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZFxuICpcdFx0XHRcdFx0YWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgXCJtZW1vcml6ZWRcIlxuICpcdFx0XHRcdFx0dmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdHVuaXF1ZTpcdFx0XHR3aWxsIGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UgKG5vIGR1cGxpY2F0ZSBpbiB0aGUgbGlzdClcbiAqXG4gKlx0c3RvcE9uRmFsc2U6XHRpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2VcbiAqXG4gKi9cbmpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHQvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkXG5cdC8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdClcblx0b3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiID9cblx0XHRjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgOlxuXHRcdGpRdWVyeS5leHRlbmQoIHt9LCBvcHRpb25zICk7XG5cblx0dmFyIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmdcblx0XHRmaXJpbmcsXG5cblx0XHQvLyBMYXN0IGZpcmUgdmFsdWUgZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0c1xuXHRcdG1lbW9yeSxcblxuXHRcdC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkXG5cdFx0ZmlyZWQsXG5cblx0XHQvLyBGbGFnIHRvIHByZXZlbnQgZmlyaW5nXG5cdFx0bG9ja2VkLFxuXG5cdFx0Ly8gQWN0dWFsIGNhbGxiYWNrIGxpc3Rcblx0XHRsaXN0ID0gW10sXG5cblx0XHQvLyBRdWV1ZSBvZiBleGVjdXRpb24gZGF0YSBmb3IgcmVwZWF0YWJsZSBsaXN0c1xuXHRcdHF1ZXVlID0gW10sXG5cblx0XHQvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSBhZGQvcmVtb3ZlIGFzIG5lZWRlZClcblx0XHRmaXJpbmdJbmRleCA9IC0xLFxuXG5cdFx0Ly8gRmlyZSBjYWxsYmFja3Ncblx0XHRmaXJlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuZm9yY2Ugc2luZ2xlLWZpcmluZ1xuXHRcdFx0bG9ja2VkID0gbG9ja2VkIHx8IG9wdGlvbnMub25jZTtcblxuXHRcdFx0Ly8gRXhlY3V0ZSBjYWxsYmFja3MgZm9yIGFsbCBwZW5kaW5nIGV4ZWN1dGlvbnMsXG5cdFx0XHQvLyByZXNwZWN0aW5nIGZpcmluZ0luZGV4IG92ZXJyaWRlcyBhbmQgcnVudGltZSBjaGFuZ2VzXG5cdFx0XHRmaXJlZCA9IGZpcmluZyA9IHRydWU7XG5cdFx0XHRmb3IgKCA7IHF1ZXVlLmxlbmd0aDsgZmlyaW5nSW5kZXggPSAtMSApIHtcblx0XHRcdFx0bWVtb3J5ID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdFx0d2hpbGUgKCArK2ZpcmluZ0luZGV4IDwgbGlzdC5sZW5ndGggKSB7XG5cblx0XHRcdFx0XHQvLyBSdW4gY2FsbGJhY2sgYW5kIGNoZWNrIGZvciBlYXJseSB0ZXJtaW5hdGlvblxuXHRcdFx0XHRcdGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggbWVtb3J5WyAwIF0sIG1lbW9yeVsgMSBdICkgPT09IGZhbHNlICYmXG5cdFx0XHRcdFx0XHRvcHRpb25zLnN0b3BPbkZhbHNlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBKdW1wIHRvIGVuZCBhbmQgZm9yZ2V0IHRoZSBkYXRhIHNvIC5hZGQgZG9lc24ndCByZS1maXJlXG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoO1xuXHRcdFx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvcmdldCB0aGUgZGF0YSBpZiB3ZSdyZSBkb25lIHdpdGggaXRcblx0XHRcdGlmICggIW9wdGlvbnMubWVtb3J5ICkge1xuXHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0ZmlyaW5nID0gZmFsc2U7XG5cblx0XHRcdC8vIENsZWFuIHVwIGlmIHdlJ3JlIGRvbmUgZmlyaW5nIGZvciBnb29kXG5cdFx0XHRpZiAoIGxvY2tlZCApIHtcblxuXHRcdFx0XHQvLyBLZWVwIGFuIGVtcHR5IGxpc3QgaWYgd2UgaGF2ZSBkYXRhIGZvciBmdXR1cmUgYWRkIGNhbGxzXG5cdFx0XHRcdGlmICggbWVtb3J5ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIHRoaXMgb2JqZWN0IGlzIHNwZW50XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGlzdCA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3Rcblx0XHRzZWxmID0ge1xuXG5cdFx0XHQvLyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRvIHRoZSBsaXN0XG5cdFx0XHRhZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBoYXZlIG1lbW9yeSBmcm9tIGEgcGFzdCBydW4sIHdlIHNob3VsZCBmaXJlIGFmdGVyIGFkZGluZ1xuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoIC0gMTtcblx0XHRcdFx0XHRcdHF1ZXVlLnB1c2goIG1lbW9yeSApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCggZnVuY3Rpb24gYWRkKCBhcmdzICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCAhb3B0aW9ucy51bmlxdWUgfHwgIXNlbGYuaGFzKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxpc3QucHVzaCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAmJiB0b1R5cGUoIGFyZyApICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSW5zcGVjdCByZWN1cnNpdmVseVxuXHRcdFx0XHRcdFx0XHRcdGFkZCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHR9ICkoIGFyZ3VtZW50cyApO1xuXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBsaXN0XG5cdFx0XHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdHZhciBpbmRleDtcblx0XHRcdFx0XHR3aGlsZSAoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdGxpc3Quc3BsaWNlKCBpbmRleCwgMSApO1xuXG5cdFx0XHRcdFx0XHQvLyBIYW5kbGUgZmlyaW5nIGluZGV4ZXNcblx0XHRcdFx0XHRcdGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7XG5cdFx0XHRcdFx0XHRcdGZpcmluZ0luZGV4LS07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC5cblx0XHRcdC8vIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVkLlxuXHRcdFx0aGFzOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdHJldHVybiBmbiA/XG5cdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6XG5cdFx0XHRcdFx0bGlzdC5sZW5ndGggPiAwO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGFsbCBjYWxsYmFja3MgZnJvbSB0aGUgbGlzdFxuXHRcdFx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZSBhbmQgLmFkZFxuXHRcdFx0Ly8gQWJvcnQgYW55IGN1cnJlbnQvcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHQvLyBDbGVhciBhbGwgY2FsbGJhY2tzIGFuZCB2YWx1ZXNcblx0XHRcdGRpc2FibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0ZGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gIWxpc3Q7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlXG5cdFx0XHQvLyBBbHNvIGRpc2FibGUgLmFkZCB1bmxlc3Mgd2UgaGF2ZSBtZW1vcnkgKHNpbmNlIGl0IHdvdWxkIGhhdmUgbm8gZWZmZWN0KVxuXHRcdFx0Ly8gQWJvcnQgYW55IHBlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0bG9jazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGlmICggIW1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGxvY2tlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWxvY2tlZDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHNcblx0XHRcdGZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHtcblx0XHRcdFx0aWYgKCAhbG9ja2VkICkge1xuXHRcdFx0XHRcdGFyZ3MgPSBhcmdzIHx8IFtdO1xuXHRcdFx0XHRcdGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07XG5cdFx0XHRcdFx0cXVldWUucHVzaCggYXJncyApO1xuXHRcdFx0XHRcdGlmICggIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZVxuXHRcdFx0ZmlyZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFmaXJlZDtcblx0XHRcdH1cblx0XHR9O1xuXG5cdHJldHVybiBzZWxmO1xufTtcblxuXG5mdW5jdGlvbiBJZGVudGl0eSggdiApIHtcblx0cmV0dXJuIHY7XG59XG5mdW5jdGlvbiBUaHJvd2VyKCBleCApIHtcblx0dGhyb3cgZXg7XG59XG5cbmZ1bmN0aW9uIGFkb3B0VmFsdWUoIHZhbHVlLCByZXNvbHZlLCByZWplY3QsIG5vVmFsdWUgKSB7XG5cdHZhciBtZXRob2Q7XG5cblx0dHJ5IHtcblxuXHRcdC8vIENoZWNrIGZvciBwcm9taXNlIGFzcGVjdCBmaXJzdCB0byBwcml2aWxlZ2Ugc3luY2hyb25vdXMgYmVoYXZpb3Jcblx0XHRpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUucHJvbWlzZSApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUgKS5kb25lKCByZXNvbHZlICkuZmFpbCggcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciB0aGVuYWJsZXNcblx0XHR9IGVsc2UgaWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnRoZW4gKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlLCByZXNvbHZlLCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIG5vbi10aGVuYWJsZXNcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb250cm9sIGByZXNvbHZlYCBhcmd1bWVudHMgYnkgbGV0dGluZyBBcnJheSNzbGljZSBjYXN0IGJvb2xlYW4gYG5vVmFsdWVgIHRvIGludGVnZXI6XG5cdFx0XHQvLyAqIGZhbHNlOiBbIHZhbHVlIF0uc2xpY2UoIDAgKSA9PiByZXNvbHZlKCB2YWx1ZSApXG5cdFx0XHQvLyAqIHRydWU6IFsgdmFsdWUgXS5zbGljZSggMSApID0+IHJlc29sdmUoKVxuXHRcdFx0cmVzb2x2ZS5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0uc2xpY2UoIG5vVmFsdWUgKSApO1xuXHRcdH1cblxuXHQvLyBGb3IgUHJvbWlzZXMvQSssIGNvbnZlcnQgZXhjZXB0aW9ucyBpbnRvIHJlamVjdGlvbnNcblx0Ly8gU2luY2UgalF1ZXJ5LndoZW4gZG9lc24ndCB1bndyYXAgdGhlbmFibGVzLCB3ZSBjYW4gc2tpcCB0aGUgZXh0cmEgY2hlY2tzIGFwcGVhcmluZyBpblxuXHQvLyBEZWZlcnJlZCN0aGVuIHRvIGNvbmRpdGlvbmFsbHkgc3VwcHJlc3MgcmVqZWN0aW9uLlxuXHR9IGNhdGNoICggdmFsdWUgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCBvbmx5XG5cdFx0Ly8gU3RyaWN0IG1vZGUgZnVuY3Rpb25zIGludm9rZWQgd2l0aG91dCAuY2FsbC8uYXBwbHkgZ2V0IGdsb2JhbC1vYmplY3QgY29udGV4dFxuXHRcdHJlamVjdC5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0gKTtcblx0fVxufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0RGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkge1xuXHRcdHZhciB0dXBsZXMgPSBbXG5cblx0XHRcdFx0Ly8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGNhbGxiYWNrcyxcblx0XHRcdFx0Ly8gLi4uIC50aGVuIGhhbmRsZXJzLCBhcmd1bWVudCBpbmRleCwgW2ZpbmFsIHN0YXRlXVxuXHRcdFx0XHRbIFwibm90aWZ5XCIsIFwicHJvZ3Jlc3NcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSwgMiBdLFxuXHRcdFx0XHRbIFwicmVzb2x2ZVwiLCBcImRvbmVcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDAsIFwicmVzb2x2ZWRcIiBdLFxuXHRcdFx0XHRbIFwicmVqZWN0XCIsIFwiZmFpbFwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMSwgXCJyZWplY3RlZFwiIF1cblx0XHRcdF0sXG5cdFx0XHRzdGF0ZSA9IFwicGVuZGluZ1wiLFxuXHRcdFx0cHJvbWlzZSA9IHtcblx0XHRcdFx0c3RhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBzdGF0ZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0YWx3YXlzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjYXRjaFwiOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb21pc2UudGhlbiggbnVsbCwgZm4gKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdHBpcGU6IGZ1bmN0aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHtcblx0XHRcdFx0XHR2YXIgZm5zID0gYXJndW1lbnRzO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIF9pLCB0dXBsZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBNYXAgdHVwbGVzIChwcm9ncmVzcywgZG9uZSwgZmFpbCkgdG8gYXJndW1lbnRzIChkb25lLCBmYWlsLCBwcm9ncmVzcylcblx0XHRcdFx0XHRcdFx0dmFyIGZuID0gaXNGdW5jdGlvbiggZm5zWyB0dXBsZVsgNCBdIF0gKSAmJiBmbnNbIHR1cGxlWyA0IF0gXTtcblxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5wcm9ncmVzcyhmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5ub3RpZnkgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZG9uZShmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZXNvbHZlIH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmZhaWwoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVqZWN0IH0pXG5cdFx0XHRcdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMSBdIF0oIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCA9IGZuICYmIGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkICYmIGlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnByb21pc2UoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5kb25lKCBuZXdEZWZlci5yZXNvbHZlIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmZhaWwoIG5ld0RlZmVyLnJlamVjdCApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlclsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZuID8gWyByZXR1cm5lZCBdIDogYXJndW1lbnRzXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0Zm5zID0gbnVsbDtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGVuOiBmdW5jdGlvbiggb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIG9uUHJvZ3Jlc3MgKSB7XG5cdFx0XHRcdFx0dmFyIG1heERlcHRoID0gMDtcblx0XHRcdFx0XHRmdW5jdGlvbiByZXNvbHZlKCBkZXB0aCwgZGVmZXJyZWQsIGhhbmRsZXIsIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRhcmdzID0gYXJndW1lbnRzLFxuXHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCwgdGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjNcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgZG91YmxlLXJlc29sdXRpb24gYXR0ZW1wdHNcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggPCBtYXhEZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCA9IGhhbmRsZXIuYXBwbHkoIHRoYXQsIGFyZ3MgKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNDhcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgPT09IGRlZmVycmVkLnByb21pc2UoKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvciggXCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb25cIiApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9ucyAyLjMuMy4xLCAzLjVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU0XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC03NVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gUmV0cmlldmUgYHRoZW5gIG9ubHkgb25jZVxuXHRcdFx0XHRcdFx0XHRcdFx0dGhlbiA9IHJldHVybmVkICYmXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuNFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02NFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IGNoZWNrIG9iamVjdHMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlbmFiaWxpdHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCB0eXBlb2YgcmV0dXJuZWQgPT09IFwib2JqZWN0XCIgfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgcmV0dXJuZWQgPT09IFwiZnVuY3Rpb25cIiApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhIHJldHVybmVkIHRoZW5hYmxlXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoZW4gKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTcGVjaWFsIHByb2Nlc3NvcnMgKG5vdGlmeSkganVzdCB3YWl0IGZvciByZXNvbHV0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBOb3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgYWxzbyBob29rIGludG8gcHJvZ3Jlc3Ncblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBkaXNyZWdhcmQgb2xkZXIgcmVzb2x1dGlvbiB2YWx1ZXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhEZXB0aCsrO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGggKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGFsbCBvdGhlciByZXR1cm5lZCB2YWx1ZXNcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBJZGVudGl0eSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIHJldHVybmVkIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBQcm9jZXNzIHRoZSB2YWx1ZShzKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZhdWx0IHByb2Nlc3MgaXMgcmVzb2x2ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHNwZWNpYWwgfHwgZGVmZXJyZWQucmVzb2x2ZVdpdGggKSggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IG5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBjYXRjaCBhbmQgcmVqZWN0IGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzID0gc3BlY2lhbCA/XG5cdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93IDpcblx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3coKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2soIGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3Muc3RhY2tUcmFjZSApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy40LjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02MVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBwb3N0LXJlc29sdXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKyAxID49IG1heERlcHRoICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gVGhyb3dlciApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgZSBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4xXG5cdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU3XG5cdFx0XHRcdFx0XHRcdC8vIFJlLXJlc29sdmUgcHJvbWlzZXMgaW1tZWRpYXRlbHkgdG8gZG9kZ2UgZmFsc2UgcmVqZWN0aW9uIGZyb21cblx0XHRcdFx0XHRcdFx0Ly8gc3Vic2VxdWVudCBlcnJvcnNcblx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzKCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDYWxsIGFuIG9wdGlvbmFsIGhvb2sgdG8gcmVjb3JkIHRoZSBzdGFjaywgaW4gY2FzZSBvZiBleGNlcHRpb25cblx0XHRcdFx0XHRcdFx0XHQvLyBzaW5jZSBpdCdzIG90aGVyd2lzZSBsb3N0IHdoZW4gZXhlY3V0aW9uIGdvZXMgYXN5bmNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgPSBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBwcm9jZXNzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXG5cdFx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUHJvZ3Jlc3MgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblByb2dyZXNzIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLm5vdGlmeVdpdGhcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMSBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25GdWxmaWxsZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkZ1bGZpbGxlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eVxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDIgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUmVqZWN0ZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblJlamVjdGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdFRocm93ZXJcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWRcblx0XHRcdFx0Ly8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdFxuXHRcdFx0XHRwcm9taXNlOiBmdW5jdGlvbiggb2JqICkge1xuXHRcdFx0XHRcdHJldHVybiBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJvbWlzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlZmVycmVkID0ge307XG5cblx0XHQvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzXG5cdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXHRcdFx0dmFyIGxpc3QgPSB0dXBsZVsgMiBdLFxuXHRcdFx0XHRzdGF0ZVN0cmluZyA9IHR1cGxlWyA1IF07XG5cblx0XHRcdC8vIHByb21pc2UucHJvZ3Jlc3MgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5kb25lID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZmFpbCA9IGxpc3QuYWRkXG5cdFx0XHRwcm9taXNlWyB0dXBsZVsgMSBdIF0gPSBsaXN0LmFkZDtcblxuXHRcdFx0Ly8gSGFuZGxlIHN0YXRlXG5cdFx0XHRpZiAoIHN0YXRlU3RyaW5nICkge1xuXHRcdFx0XHRsaXN0LmFkZChcblx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlc29sdmVkXCIgKGkuZS4sIGZ1bGZpbGxlZClcblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZWplY3RlZFwiXG5cdFx0XHRcdFx0XHRzdGF0ZSA9IHN0YXRlU3RyaW5nO1xuXHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMiBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDMgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfY2FsbGJhY2tzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMiBdLmxvY2ssXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5sb2NrXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5maXJlXG5cdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5maXJlXG5cdFx0XHRsaXN0LmFkZCggdHVwbGVbIDMgXS5maXJlICk7XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5ub3RpZnlXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZXNvbHZlV2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdCA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZWplY3RXaXRoKC4uLikgfVxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gdW5kZWZpbmVkIDogdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmVXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSA9IGxpc3QuZmlyZVdpdGg7XG5cdFx0fSApO1xuXG5cdFx0Ly8gTWFrZSB0aGUgZGVmZXJyZWQgYSBwcm9taXNlXG5cdFx0cHJvbWlzZS5wcm9taXNlKCBkZWZlcnJlZCApO1xuXG5cdFx0Ly8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueVxuXHRcdGlmICggZnVuYyApIHtcblx0XHRcdGZ1bmMuY2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsIGRvbmUhXG5cdFx0cmV0dXJuIGRlZmVycmVkO1xuXHR9LFxuXG5cdC8vIERlZmVycmVkIGhlbHBlclxuXHR3aGVuOiBmdW5jdGlvbiggc2luZ2xlVmFsdWUgKSB7XG5cdFx0dmFyXG5cblx0XHRcdC8vIGNvdW50IG9mIHVuY29tcGxldGVkIHN1Ym9yZGluYXRlc1xuXHRcdFx0cmVtYWluaW5nID0gYXJndW1lbnRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5wcm9jZXNzZWQgYXJndW1lbnRzXG5cdFx0XHRpID0gcmVtYWluaW5nLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBmdWxmaWxsbWVudCBkYXRhXG5cdFx0XHRyZXNvbHZlQ29udGV4dHMgPSBBcnJheSggaSApLFxuXHRcdFx0cmVzb2x2ZVZhbHVlcyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLFxuXG5cdFx0XHQvLyB0aGUgbWFzdGVyIERlZmVycmVkXG5cdFx0XHRtYXN0ZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgY2FsbGJhY2sgZmFjdG9yeVxuXHRcdFx0dXBkYXRlRnVuYyA9IGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJlc29sdmVDb250ZXh0c1sgaSBdID0gdGhpcztcblx0XHRcdFx0XHRyZXNvbHZlVmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApIDogdmFsdWU7XG5cdFx0XHRcdFx0aWYgKCAhKCAtLXJlbWFpbmluZyApICkge1xuXHRcdFx0XHRcdFx0bWFzdGVyLnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXG5cdFx0Ly8gU2luZ2xlLSBhbmQgZW1wdHkgYXJndW1lbnRzIGFyZSBhZG9wdGVkIGxpa2UgUHJvbWlzZS5yZXNvbHZlXG5cdFx0aWYgKCByZW1haW5pbmcgPD0gMSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHNpbmdsZVZhbHVlLCBtYXN0ZXIuZG9uZSggdXBkYXRlRnVuYyggaSApICkucmVzb2x2ZSwgbWFzdGVyLnJlamVjdCxcblx0XHRcdFx0IXJlbWFpbmluZyApO1xuXG5cdFx0XHQvLyBVc2UgLnRoZW4oKSB0byB1bndyYXAgc2Vjb25kYXJ5IHRoZW5hYmxlcyAoY2YuIGdoLTMwMDApXG5cdFx0XHRpZiAoIG1hc3Rlci5zdGF0ZSgpID09PSBcInBlbmRpbmdcIiB8fFxuXHRcdFx0XHRpc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgcmVzb2x2ZVZhbHVlc1sgaSBdLnRoZW4gKSApIHtcblxuXHRcdFx0XHRyZXR1cm4gbWFzdGVyLnRoZW4oKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBNdWx0aXBsZSBhcmd1bWVudHMgYXJlIGFnZ3JlZ2F0ZWQgbGlrZSBQcm9taXNlLmFsbCBhcnJheSBlbGVtZW50c1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0YWRvcHRWYWx1ZSggcmVzb2x2ZVZhbHVlc1sgaSBdLCB1cGRhdGVGdW5jKCBpICksIG1hc3Rlci5yZWplY3QgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWFzdGVyLnByb21pc2UoKTtcblx0fVxufSApO1xuXG5cbi8vIFRoZXNlIHVzdWFsbHkgaW5kaWNhdGUgYSBwcm9ncmFtbWVyIG1pc3Rha2UgZHVyaW5nIGRldmVsb3BtZW50LFxuLy8gd2FybiBhYm91dCB0aGVtIEFTQVAgcmF0aGVyIHRoYW4gc3dhbGxvd2luZyB0aGVtIGJ5IGRlZmF1bHQuXG52YXIgcmVycm9yTmFtZXMgPSAvXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztcblxualF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgPSBmdW5jdGlvbiggZXJyb3IsIHN0YWNrICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDggLSA5IG9ubHlcblx0Ly8gQ29uc29sZSBleGlzdHMgd2hlbiBkZXYgdG9vbHMgYXJlIG9wZW4sIHdoaWNoIGNhbiBoYXBwZW4gYXQgYW55IHRpbWVcblx0aWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS53YXJuICYmIGVycm9yICYmIHJlcnJvck5hbWVzLnRlc3QoIGVycm9yLm5hbWUgKSApIHtcblx0XHR3aW5kb3cuY29uc29sZS53YXJuKCBcImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246IFwiICsgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIHN0YWNrICk7XG5cdH1cbn07XG5cblxuXG5cbmpRdWVyeS5yZWFkeUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKCBlcnJvciApIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdHRocm93IGVycm9yO1xuXHR9ICk7XG59O1xuXG5cblxuXG4vLyBUaGUgZGVmZXJyZWQgdXNlZCBvbiBET00gcmVhZHlcbnZhciByZWFkeUxpc3QgPSBqUXVlcnkuRGVmZXJyZWQoKTtcblxualF1ZXJ5LmZuLnJlYWR5ID0gZnVuY3Rpb24oIGZuICkge1xuXG5cdHJlYWR5TGlzdFxuXHRcdC50aGVuKCBmbiApXG5cblx0XHQvLyBXcmFwIGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiBpbiBhIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIGxvb2t1cFxuXHRcdC8vIGhhcHBlbnMgYXQgdGhlIHRpbWUgb2YgZXJyb3IgaGFuZGxpbmcgaW5zdGVhZCBvZiBjYWxsYmFja1xuXHRcdC8vIHJlZ2lzdHJhdGlvbi5cblx0XHQuY2F0Y2goIGZ1bmN0aW9uKCBlcnJvciApIHtcblx0XHRcdGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiggZXJyb3IgKTtcblx0XHR9ICk7XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy5cblx0aXNSZWFkeTogZmFsc2UsXG5cblx0Ly8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZVxuXHQvLyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMuIFNlZSAjNjc4MVxuXHRyZWFkeVdhaXQ6IDEsXG5cblx0Ly8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeVxuXHRyZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7XG5cblx0XHQvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5XG5cdFx0aWYgKCB3YWl0ID09PSB0cnVlID8gLS1qUXVlcnkucmVhZHlXYWl0IDogalF1ZXJ5LmlzUmVhZHkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5XG5cdFx0alF1ZXJ5LmlzUmVhZHkgPSB0cnVlO1xuXG5cdFx0Ly8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlmIG5lZWQgYmVcblx0XHRpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlXG5cdFx0cmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5yZWFkeS50aGVuID0gcmVhZHlMaXN0LnRoZW47XG5cbi8vIFRoZSByZWFkeSBldmVudCBoYW5kbGVyIGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kXG5mdW5jdGlvbiBjb21wbGV0ZWQoKSB7XG5cdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcblx0alF1ZXJ5LnJlYWR5KCk7XG59XG5cbi8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkXG4vLyBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDEwIG9ubHlcbi8vIE9sZGVyIElFIHNvbWV0aW1lcyBzaWduYWxzIFwiaW50ZXJhY3RpdmVcIiB0b28gc29vblxuaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIgfHxcblx0KCBkb2N1bWVudC5yZWFkeVN0YXRlICE9PSBcImxvYWRpbmdcIiAmJiAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsICkgKSB7XG5cblx0Ly8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkgKTtcblxufSBlbHNlIHtcblxuXHQvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrXG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblxuXHQvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29ya1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xufVxuXG5cblxuXG4vLyBNdWx0aWZ1bmN0aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb25cbi8vIFRoZSB2YWx1ZS9zIGNhbiBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvblxudmFyIGFjY2VzcyA9IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQsIHJhdyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGVsZW1zLmxlbmd0aCxcblx0XHRidWxrID0ga2V5ID09IG51bGw7XG5cblx0Ly8gU2V0cyBtYW55IHZhbHVlc1xuXHRpZiAoIHRvVHlwZSgga2V5ICkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblx0XHRmb3IgKCBpIGluIGtleSApIHtcblx0XHRcdGFjY2VzcyggZWxlbXMsIGZuLCBpLCBrZXlbIGkgXSwgdHJ1ZSwgZW1wdHlHZXQsIHJhdyApO1xuXHRcdH1cblxuXHQvLyBTZXRzIG9uZSB2YWx1ZVxuXHR9IGVsc2UgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cblx0XHRpZiAoICFpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmF3ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGJ1bGsgKSB7XG5cblx0XHRcdC8vIEJ1bGsgb3BlcmF0aW9ucyBydW4gYWdhaW5zdCB0aGUgZW50aXJlIHNldFxuXHRcdFx0aWYgKCByYXcgKSB7XG5cdFx0XHRcdGZuLmNhbGwoIGVsZW1zLCB2YWx1ZSApO1xuXHRcdFx0XHRmbiA9IG51bGw7XG5cblx0XHRcdC8vIC4uLmV4Y2VwdCB3aGVuIGV4ZWN1dGluZyBmdW5jdGlvbiB2YWx1ZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ1bGsgPSBmbjtcblx0XHRcdFx0Zm4gPSBmdW5jdGlvbiggZWxlbSwgX2tleSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRmbihcblx0XHRcdFx0XHRlbGVtc1sgaSBdLCBrZXksIHJhdyA/XG5cdFx0XHRcdFx0dmFsdWUgOlxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIGVsZW1zWyBpIF0sIGksIGZuKCBlbGVtc1sgaSBdLCBrZXkgKSApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBjaGFpbmFibGUgKSB7XG5cdFx0cmV0dXJuIGVsZW1zO1xuXHR9XG5cblx0Ly8gR2V0c1xuXHRpZiAoIGJ1bGsgKSB7XG5cdFx0cmV0dXJuIGZuLmNhbGwoIGVsZW1zICk7XG5cdH1cblxuXHRyZXR1cm4gbGVuID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlHZXQ7XG59O1xuXG5cbi8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemluZ1xudmFyIHJtc1ByZWZpeCA9IC9eLW1zLS8sXG5cdHJkYXNoQWxwaGEgPSAvLShbYS16XSkvZztcblxuLy8gVXNlZCBieSBjYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpXG5mdW5jdGlvbiBmY2FtZWxDYXNlKCBfYWxsLCBsZXR0ZXIgKSB7XG5cdHJldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTtcbn1cblxuLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlc1xuLy8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxuLy8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBwcmVmaXggKCM5NTcyKVxuZnVuY3Rpb24gY2FtZWxDYXNlKCBzdHJpbmcgKSB7XG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4LCBcIm1zLVwiICkucmVwbGFjZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApO1xufVxudmFyIGFjY2VwdERhdGEgPSBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0Ly8gQWNjZXB0cyBvbmx5OlxuXHQvLyAgLSBOb2RlXG5cdC8vICAgIC0gTm9kZS5FTEVNRU5UX05PREVcblx0Ly8gICAgLSBOb2RlLkRPQ1VNRU5UX05PREVcblx0Ly8gIC0gT2JqZWN0XG5cdC8vICAgIC0gQW55XG5cdHJldHVybiBvd25lci5ub2RlVHlwZSA9PT0gMSB8fCBvd25lci5ub2RlVHlwZSA9PT0gOSB8fCAhKCArb3duZXIubm9kZVR5cGUgKTtcbn07XG5cblxuXG5cbmZ1bmN0aW9uIERhdGEoKSB7XG5cdHRoaXMuZXhwYW5kbyA9IGpRdWVyeS5leHBhbmRvICsgRGF0YS51aWQrKztcbn1cblxuRGF0YS51aWQgPSAxO1xuXG5EYXRhLnByb3RvdHlwZSA9IHtcblxuXHRjYWNoZTogZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIG93bmVyIG9iamVjdCBhbHJlYWR5IGhhcyBhIGNhY2hlXG5cdFx0dmFyIHZhbHVlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0Ly8gSWYgbm90LCBjcmVhdGUgb25lXG5cdFx0aWYgKCAhdmFsdWUgKSB7XG5cdFx0XHR2YWx1ZSA9IHt9O1xuXG5cdFx0XHQvLyBXZSBjYW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5vZGVzIGluIG1vZGVybiBicm93c2Vycyxcblx0XHRcdC8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgIzgzMzUuXG5cdFx0XHQvLyBBbHdheXMgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC5cblx0XHRcdGlmICggYWNjZXB0RGF0YSggb3duZXIgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBpdCBpcyBhIG5vZGUgdW5saWtlbHkgdG8gYmUgc3RyaW5naWZ5LWVkIG9yIGxvb3BlZCBvdmVyXG5cdFx0XHRcdC8vIHVzZSBwbGFpbiBhc3NpZ25tZW50XG5cdFx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdmFsdWU7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHNlY3VyZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5XG5cdFx0XHRcdC8vIGNvbmZpZ3VyYWJsZSBtdXN0IGJlIHRydWUgdG8gYWxsb3cgdGhlIHByb3BlcnR5IHRvIGJlXG5cdFx0XHRcdC8vIGRlbGV0ZWQgd2hlbiBkYXRhIGlzIHJlbW92ZWRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIG93bmVyLCB0aGlzLmV4cGFuZG8sIHtcblx0XHRcdFx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblx0c2V0OiBmdW5jdGlvbiggb3duZXIsIGRhdGEsIHZhbHVlICkge1xuXHRcdHZhciBwcm9wLFxuXHRcdFx0Y2FjaGUgPSB0aGlzLmNhY2hlKCBvd25lciApO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCBrZXksIHZhbHVlIF0gYXJnc1xuXHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggZGF0YSApIF0gPSB2YWx1ZTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwgeyBwcm9wZXJ0aWVzIH0gXSBhcmdzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29weSB0aGUgcHJvcGVydGllcyBvbmUtYnktb25lIHRvIHRoZSBjYWNoZSBvYmplY3Rcblx0XHRcdGZvciAoIHByb3AgaW4gZGF0YSApIHtcblx0XHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggcHJvcCApIF0gPSBkYXRhWyBwcm9wIF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBjYWNoZTtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHRyZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcy5jYWNoZSggb3duZXIgKSA6XG5cblx0XHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSAmJiBvd25lclsgdGhpcy5leHBhbmRvIF1bIGNhbWVsQ2FzZSgga2V5ICkgXTtcblx0fSxcblx0YWNjZXNzOiBmdW5jdGlvbiggb3duZXIsIGtleSwgdmFsdWUgKSB7XG5cblx0XHQvLyBJbiBjYXNlcyB3aGVyZSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIE5vIGtleSB3YXMgc3BlY2lmaWVkXG5cdFx0Ly8gICAyLiBBIHN0cmluZyBrZXkgd2FzIHNwZWNpZmllZCwgYnV0IG5vIHZhbHVlIHByb3ZpZGVkXG5cdFx0Ly9cblx0XHQvLyBUYWtlIHRoZSBcInJlYWRcIiBwYXRoIGFuZCBhbGxvdyB0aGUgZ2V0IG1ldGhvZCB0byBkZXRlcm1pbmVcblx0XHQvLyB3aGljaCB2YWx1ZSB0byByZXR1cm4sIHJlc3BlY3RpdmVseSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIFRoZSBlbnRpcmUgY2FjaGUgb2JqZWN0XG5cdFx0Ly8gICAyLiBUaGUgZGF0YSBzdG9yZWQgYXQgdGhlIGtleVxuXHRcdC8vXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHQoICgga2V5ICYmIHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgKSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgKSB7XG5cblx0XHRcdHJldHVybiB0aGlzLmdldCggb3duZXIsIGtleSApO1xuXHRcdH1cblxuXHRcdC8vIFdoZW4gdGhlIGtleSBpcyBub3QgYSBzdHJpbmcsIG9yIGJvdGggYSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly8gYXJlIHNwZWNpZmllZCwgc2V0IG9yIGV4dGVuZCAoZXhpc3Rpbmcgb2JqZWN0cykgd2l0aCBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIEFuIG9iamVjdCBvZiBwcm9wZXJ0aWVzXG5cdFx0Ly8gICAyLiBBIGtleSBhbmQgdmFsdWVcblx0XHQvL1xuXHRcdHRoaXMuc2V0KCBvd25lciwga2V5LCB2YWx1ZSApO1xuXG5cdFx0Ly8gU2luY2UgdGhlIFwic2V0XCIgcGF0aCBjYW4gaGF2ZSB0d28gcG9zc2libGUgZW50cnkgcG9pbnRzXG5cdFx0Ly8gcmV0dXJuIHRoZSBleHBlY3RlZCBkYXRhIGJhc2VkIG9uIHdoaWNoIHBhdGggd2FzIHRha2VuWypdXG5cdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGtleTtcblx0fSxcblx0cmVtb3ZlOiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHR2YXIgaSxcblx0XHRcdGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0aWYgKCBjYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICgga2V5ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQgYXJyYXkgb3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBvZiBrZXlzXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIGtleSApICkge1xuXG5cdFx0XHRcdC8vIElmIGtleSBpcyBhbiBhcnJheSBvZiBrZXlzLi4uXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzZXQgY2FtZWxDYXNlIGtleXMsIHNvIHJlbW92ZSB0aGF0LlxuXHRcdFx0XHRrZXkgPSBrZXkubWFwKCBjYW1lbENhc2UgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGtleSA9IGNhbWVsQ2FzZSgga2V5ICk7XG5cblx0XHRcdFx0Ly8gSWYgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cywgdXNlIGl0LlxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIGNyZWF0ZSBhbiBhcnJheSBieSBtYXRjaGluZyBub24td2hpdGVzcGFjZVxuXHRcdFx0XHRrZXkgPSBrZXkgaW4gY2FjaGUgP1xuXHRcdFx0XHRcdFsga2V5IF0gOlxuXHRcdFx0XHRcdCgga2V5Lm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10gKTtcblx0XHRcdH1cblxuXHRcdFx0aSA9IGtleS5sZW5ndGg7XG5cblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRkZWxldGUgY2FjaGVbIGtleVsgaSBdIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIHRoZXJlJ3Mgbm8gbW9yZSBkYXRhXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fCBqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKSApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NVxuXHRcdFx0Ly8gV2Via2l0ICYgQmxpbmsgcGVyZm9ybWFuY2Ugc3VmZmVycyB3aGVuIGRlbGV0aW5nIHByb3BlcnRpZXNcblx0XHRcdC8vIGZyb20gRE9NIG5vZGVzLCBzbyBzZXQgdG8gdW5kZWZpbmVkIGluc3RlYWRcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM3ODYwNyAoYnVnIHJlc3RyaWN0ZWQpXG5cdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWxldGUgb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0aGFzRGF0YTogZnVuY3Rpb24oIG93bmVyICkge1xuXHRcdHZhciBjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRyZXR1cm4gY2FjaGUgIT09IHVuZGVmaW5lZCAmJiAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICk7XG5cdH1cbn07XG52YXIgZGF0YVByaXYgPSBuZXcgRGF0YSgpO1xuXG52YXIgZGF0YVVzZXIgPSBuZXcgRGF0YSgpO1xuXG5cblxuLy9cdEltcGxlbWVudGF0aW9uIFN1bW1hcnlcbi8vXG4vL1x0MS4gRW5mb3JjZSBBUEkgc3VyZmFjZSBhbmQgc2VtYW50aWMgY29tcGF0aWJpbGl0eSB3aXRoIDEuOS54IGJyYW5jaFxuLy9cdDIuIEltcHJvdmUgdGhlIG1vZHVsZSdzIG1haW50YWluYWJpbGl0eSBieSByZWR1Y2luZyB0aGUgc3RvcmFnZVxuLy9cdFx0cGF0aHMgdG8gYSBzaW5nbGUgbWVjaGFuaXNtLlxuLy9cdDMuIFVzZSB0aGUgc2FtZSBzaW5nbGUgbWVjaGFuaXNtIHRvIHN1cHBvcnQgXCJwcml2YXRlXCIgYW5kIFwidXNlclwiIGRhdGEuXG4vL1x0NC4gX05ldmVyXyBleHBvc2UgXCJwcml2YXRlXCIgZGF0YSB0byB1c2VyIGNvZGUgKFRPRE86IERyb3AgX2RhdGEsIF9yZW1vdmVEYXRhKVxuLy9cdDUuIEF2b2lkIGV4cG9zaW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb24gdXNlciBvYmplY3RzIChlZy4gZXhwYW5kbyBwcm9wZXJ0aWVzKVxuLy9cdDYuIFByb3ZpZGUgYSBjbGVhciBwYXRoIGZvciBpbXBsZW1lbnRhdGlvbiB1cGdyYWRlIHRvIFdlYWtNYXAgaW4gMjAxNFxuXG52YXIgcmJyYWNlID0gL14oPzpcXHtbXFx3XFxXXSpcXH18XFxbW1xcd1xcV10qXFxdKSQvLFxuXHRybXVsdGlEYXNoID0gL1tBLVpdL2c7XG5cbmZ1bmN0aW9uIGdldERhdGEoIGRhdGEgKSB7XG5cdGlmICggZGF0YSA9PT0gXCJ0cnVlXCIgKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpZiAoIGRhdGEgPT09IFwiZmFsc2VcIiApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAoIGRhdGEgPT09IFwibnVsbFwiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gT25seSBjb252ZXJ0IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmdcblx0aWYgKCBkYXRhID09PSArZGF0YSArIFwiXCIgKSB7XG5cdFx0cmV0dXJuICtkYXRhO1xuXHR9XG5cblx0aWYgKCByYnJhY2UudGVzdCggZGF0YSApICkge1xuXHRcdHJldHVybiBKU09OLnBhcnNlKCBkYXRhICk7XG5cdH1cblxuXHRyZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZGF0YUF0dHIoIGVsZW0sIGtleSwgZGF0YSApIHtcblx0dmFyIG5hbWU7XG5cblx0Ly8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueVxuXHQvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGVcblx0aWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRuYW1lID0gXCJkYXRhLVwiICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsIFwiLSQmXCIgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdGRhdGEgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApO1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGRhdGEgPSBnZXREYXRhKCBkYXRhICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHt9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlclxuXHRcdFx0ZGF0YVVzZXIuc2V0KCBlbGVtLCBrZXksIGRhdGEgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGRhdGE7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aGFzRGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmhhc0RhdGEoIGVsZW0gKSB8fCBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICk7XG5cdH0sXG5cblx0ZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFVc2VyLnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9LFxuXG5cdC8vIFRPRE86IE5vdyB0aGF0IGFsbCBjYWxscyB0byBfZGF0YSBhbmQgX3JlbW92ZURhdGEgaGF2ZSBiZWVuIHJlcGxhY2VkXG5cdC8vIHdpdGggZGlyZWN0IGNhbGxzIHRvIGRhdGFQcml2IG1ldGhvZHMsIHRoZXNlIGNhbiBiZSBkZXByZWNhdGVkLlxuXHRfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdF9yZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdHZhciBpLCBuYW1lLCBkYXRhLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdGF0dHJzID0gZWxlbSAmJiBlbGVtLmF0dHJpYnV0ZXM7XG5cblx0XHQvLyBHZXRzIGFsbCB2YWx1ZXNcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB0aGlzLmxlbmd0aCApIHtcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSApO1xuXG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhZGF0YVByaXYuZ2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiICkgKSB7XG5cdFx0XHRcdFx0aSA9IGF0dHJzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0XHRcdFx0Ly8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICgjMTQ4OTQpXG5cdFx0XHRcdFx0XHRpZiAoIGF0dHJzWyBpIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG5hbWUgPSBhdHRyc1sgaSBdLm5hbWU7XG5cdFx0XHRcdFx0XHRcdGlmICggbmFtZS5pbmRleE9mKCBcImRhdGEtXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lID0gY2FtZWxDYXNlKCBuYW1lLnNsaWNlKCA1ICkgKTtcblx0XHRcdFx0XHRcdFx0XHRkYXRhQXR0ciggZWxlbSwgbmFtZSwgZGF0YVsgbmFtZSBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0cyBtdWx0aXBsZSB2YWx1ZXNcblx0XHRpZiAoIHR5cGVvZiBrZXkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZGF0YTtcblxuXHRcdFx0Ly8gVGhlIGNhbGxpbmcgalF1ZXJ5IG9iamVjdCAoZWxlbWVudCBtYXRjaGVzKSBpcyBub3QgZW1wdHlcblx0XHRcdC8vIChhbmQgdGhlcmVmb3JlIGhhcyBhbiBlbGVtZW50IGFwcGVhcnMgYXQgdGhpc1sgMCBdKSBhbmQgdGhlXG5cdFx0XHQvLyBgdmFsdWVgIHBhcmFtZXRlciB3YXMgbm90IHVuZGVmaW5lZC4gQW4gZW1wdHkgalF1ZXJ5IG9iamVjdFxuXHRcdFx0Ly8gd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgZm9yIGVsZW0gPSB0aGlzWyAwIF0gd2hpY2ggd2lsbFxuXHRcdFx0Ly8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFuIGF0dGVtcHQgdG8gcmVhZCBhIGRhdGEgY2FjaGUgaXMgbWFkZS5cblx0XHRcdGlmICggZWxlbSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgY2FjaGVcblx0XHRcdFx0Ly8gVGhlIGtleSB3aWxsIGFsd2F5cyBiZSBjYW1lbENhc2VkIGluIERhdGFcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBcImRpc2NvdmVyXCIgdGhlIGRhdGEgaW5cblx0XHRcdFx0Ly8gSFRNTDUgY3VzdG9tIGRhdGEtKiBhdHRyc1xuXHRcdFx0XHRkYXRhID0gZGF0YUF0dHIoIGVsZW0sIGtleSApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFdlIHRyaWVkIHJlYWxseSBoYXJkLCBidXQgdGhlIGRhdGEgZG9lc24ndCBleGlzdC5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgdGhlIGRhdGEuLi5cblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHN0b3JlIHRoZSBjYW1lbENhc2VkIGtleVxuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSwgdmFsdWUgKTtcblx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGF0YVVzZXIucmVtb3ZlKCB0aGlzLCBrZXkgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgcXVldWU7XG5cblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHR0eXBlID0gKCB0eXBlIHx8IFwiZnhcIiApICsgXCJxdWV1ZVwiO1xuXHRcdFx0cXVldWUgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0Ly8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cFxuXHRcdFx0aWYgKCBkYXRhICkge1xuXHRcdFx0XHRpZiAoICFxdWV1ZSB8fCBBcnJheS5pc0FycmF5KCBkYXRhICkgKSB7XG5cdFx0XHRcdFx0cXVldWUgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEgKSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGRhdGEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHF1ZXVlIHx8IFtdO1xuXHRcdH1cblx0fSxcblxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSxcblx0XHRcdHN0YXJ0TGVuZ3RoID0gcXVldWUubGVuZ3RoLFxuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpLFxuXHRcdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSxcblx0XHRcdG5leHQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5cGUgKTtcblx0XHRcdH07XG5cblx0XHQvLyBJZiB0aGUgZnggcXVldWUgaXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRpbmVsXG5cdFx0aWYgKCBmbiA9PT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRzdGFydExlbmd0aC0tO1xuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cblx0XHRcdC8vIEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmdcblx0XHRcdC8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWRcblx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICkge1xuXHRcdFx0XHRxdWV1ZS51bnNoaWZ0KCBcImlucHJvZ3Jlc3NcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDbGVhciB1cCB0aGUgbGFzdCBxdWV1ZSBzdG9wIGZ1bmN0aW9uXG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdGZuLmNhbGwoIGVsZW0sIG5leHQsIGhvb2tzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhc3RhcnRMZW5ndGggJiYgaG9va3MgKSB7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIE5vdCBwdWJsaWMgLSBnZW5lcmF0ZSBhIHF1ZXVlSG9va3Mgb2JqZWN0LCBvciByZXR1cm4gdGhlIGN1cnJlbnQgb25lXG5cdF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR2YXIga2V5ID0gdHlwZSArIFwicXVldWVIb29rc1wiO1xuXHRcdHJldHVybiBkYXRhUHJpdi5nZXQoIGVsZW0sIGtleSApIHx8IGRhdGFQcml2LmFjY2VzcyggZWxlbSwga2V5LCB7XG5cdFx0XHRlbXB0eTogalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICkuYWRkKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBbIHR5cGUgKyBcInF1ZXVlXCIsIGtleSBdICk7XG5cdFx0XHR9IClcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHNldHRlciA9IDI7XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZGF0YSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gXCJmeFwiO1xuXHRcdFx0c2V0dGVyLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoIDwgc2V0dGVyICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1sgMCBdLCB0eXBlICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzIDpcblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSBhIGhvb2tzIGZvciB0aGlzIHF1ZXVlXG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICYmIHF1ZXVlWyAwIF0gIT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0fSxcblx0ZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdH0gKTtcblx0fSxcblx0Y2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHR9LFxuXG5cdC8vIEdldCBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGVcblx0Ly8gYXJlIGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1bHQpXG5cdHByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7XG5cdFx0dmFyIHRtcCxcblx0XHRcdGNvdW50ID0gMSxcblx0XHRcdGRlZmVyID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRlbGVtZW50cyA9IHRoaXMsXG5cdFx0XHRpID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRyZXNvbHZlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggISggLS1jb3VudCApICkge1xuXHRcdFx0XHRcdGRlZmVyLnJlc29sdmVXaXRoKCBlbGVtZW50cywgWyBlbGVtZW50cyBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0b2JqID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG1wID0gZGF0YVByaXYuZ2V0KCBlbGVtZW50c1sgaSBdLCB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgKTtcblx0XHRcdGlmICggdG1wICYmIHRtcC5lbXB0eSApIHtcblx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0dG1wLmVtcHR5LmFkZCggcmVzb2x2ZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXNvbHZlKCk7XG5cdFx0cmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApO1xuXHR9XG59ICk7XG52YXIgcG51bSA9ICggL1srLV0/KD86XFxkKlxcLnwpXFxkKyg/OltlRV1bKy1dP1xcZCt8KS8gKS5zb3VyY2U7XG5cbnZhciByY3NzTnVtID0gbmV3IFJlZ0V4cCggXCJeKD86KFsrLV0pPXwpKFwiICsgcG51bSArIFwiKShbYS16JV0qKSRcIiwgXCJpXCIgKTtcblxuXG52YXIgY3NzRXhwYW5kID0gWyBcIlRvcFwiLCBcIlJpZ2h0XCIsIFwiQm90dG9tXCIsIFwiTGVmdFwiIF07XG5cbnZhciBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cblxuXG5cdHZhciBpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTtcblx0XHR9LFxuXHRcdGNvbXBvc2VkID0geyBjb21wb3NlZDogdHJ1ZSB9O1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCssIGlPUyAxMC4wIC0gMTAuMiBvbmx5XG5cdC8vIENoZWNrIGF0dGFjaG1lbnQgYWNyb3NzIHNoYWRvdyBET00gYm91bmRhcmllcyB3aGVuIHBvc3NpYmxlIChnaC0zNTA0KVxuXHQvLyBTdXBwb3J0OiBpT1MgMTAuMC0xMC4yIG9ubHlcblx0Ly8gRWFybHkgaU9TIDEwIHZlcnNpb25zIHN1cHBvcnQgYGF0dGFjaFNoYWRvd2AgYnV0IG5vdCBgZ2V0Um9vdE5vZGVgLFxuXHQvLyBsZWFkaW5nIHRvIGVycm9ycy4gV2UgbmVlZCB0byBjaGVjayBmb3IgYGdldFJvb3ROb2RlYC5cblx0aWYgKCBkb2N1bWVudEVsZW1lbnQuZ2V0Um9vdE5vZGUgKSB7XG5cdFx0aXNBdHRhY2hlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRSb290Tm9kZSggY29tcG9zZWQgKSA9PT0gZWxlbS5vd25lckRvY3VtZW50O1xuXHRcdH07XG5cdH1cbnZhciBpc0hpZGRlbldpdGhpblRyZWUgPSBmdW5jdGlvbiggZWxlbSwgZWwgKSB7XG5cblx0XHQvLyBpc0hpZGRlbldpdGhpblRyZWUgbWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjtcblx0XHQvLyBpbiB0aGF0IGNhc2UsIGVsZW1lbnQgd2lsbCBiZSBzZWNvbmQgYXJndW1lbnRcblx0XHRlbGVtID0gZWwgfHwgZWxlbTtcblxuXHRcdC8vIElubGluZSBzdHlsZSB0cnVtcHMgYWxsXG5cdFx0cmV0dXJuIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIgfHxcblx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJlxuXG5cdFx0XHQvLyBPdGhlcndpc2UsIGNoZWNrIGNvbXB1dGVkIHN0eWxlXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDMgLSA0NVxuXHRcdFx0Ly8gRGlzY29ubmVjdGVkIGVsZW1lbnRzIGNhbiBoYXZlIGNvbXB1dGVkIGRpc3BsYXk6IG5vbmUsIHNvIGZpcnN0IGNvbmZpcm0gdGhhdCBlbGVtIGlzXG5cdFx0XHQvLyBpbiB0aGUgZG9jdW1lbnQuXG5cdFx0XHRpc0F0dGFjaGVkKCBlbGVtICkgJiZcblxuXHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSA9PT0gXCJub25lXCI7XG5cdH07XG5cblxuXG5mdW5jdGlvbiBhZGp1c3RDU1MoIGVsZW0sIHByb3AsIHZhbHVlUGFydHMsIHR3ZWVuICkge1xuXHR2YXIgYWRqdXN0ZWQsIHNjYWxlLFxuXHRcdG1heEl0ZXJhdGlvbnMgPSAyMCxcblx0XHRjdXJyZW50VmFsdWUgPSB0d2VlbiA/XG5cdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuLmN1cigpO1xuXHRcdFx0fSA6XG5cdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AsIFwiXCIgKTtcblx0XHRcdH0sXG5cdFx0aW5pdGlhbCA9IGN1cnJlbnRWYWx1ZSgpLFxuXHRcdHVuaXQgPSB2YWx1ZVBhcnRzICYmIHZhbHVlUGFydHNbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKSxcblxuXHRcdC8vIFN0YXJ0aW5nIHZhbHVlIGNvbXB1dGF0aW9uIGlzIHJlcXVpcmVkIGZvciBwb3RlbnRpYWwgdW5pdCBtaXNtYXRjaGVzXG5cdFx0aW5pdGlhbEluVW5pdCA9IGVsZW0ubm9kZVR5cGUgJiZcblx0XHRcdCggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8IHVuaXQgIT09IFwicHhcIiAmJiAraW5pdGlhbCApICYmXG5cdFx0XHRyY3NzTnVtLmV4ZWMoIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AgKSApO1xuXG5cdGlmICggaW5pdGlhbEluVW5pdCAmJiBpbml0aWFsSW5Vbml0WyAzIF0gIT09IHVuaXQgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0XHQvLyBIYWx2ZSB0aGUgaXRlcmF0aW9uIHRhcmdldCB2YWx1ZSB0byBwcmV2ZW50IGludGVyZmVyZW5jZSBmcm9tIENTUyB1cHBlciBib3VuZHMgKGdoLTIxNDQpXG5cdFx0aW5pdGlhbCA9IGluaXRpYWwgLyAyO1xuXG5cdFx0Ly8gVHJ1c3QgdW5pdHMgcmVwb3J0ZWQgYnkgalF1ZXJ5LmNzc1xuXHRcdHVuaXQgPSB1bml0IHx8IGluaXRpYWxJblVuaXRbIDMgXTtcblxuXHRcdC8vIEl0ZXJhdGl2ZWx5IGFwcHJveGltYXRlIGZyb20gYSBub256ZXJvIHN0YXJ0aW5nIHBvaW50XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsIHx8IDE7XG5cblx0XHR3aGlsZSAoIG1heEl0ZXJhdGlvbnMtLSApIHtcblxuXHRcdFx0Ly8gRXZhbHVhdGUgYW5kIHVwZGF0ZSBvdXIgYmVzdCBndWVzcyAoZG91YmxpbmcgZ3Vlc3NlcyB0aGF0IHplcm8gb3V0KS5cblx0XHRcdC8vIEZpbmlzaCBpZiB0aGUgc2NhbGUgZXF1YWxzIG9yIGNyb3NzZXMgMSAobWFraW5nIHRoZSBvbGQqbmV3IHByb2R1Y3Qgbm9uLXBvc2l0aXZlKS5cblx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblx0XHRcdGlmICggKCAxIC0gc2NhbGUgKSAqICggMSAtICggc2NhbGUgPSBjdXJyZW50VmFsdWUoKSAvIGluaXRpYWwgfHwgMC41ICkgKSA8PSAwICkge1xuXHRcdFx0XHRtYXhJdGVyYXRpb25zID0gMDtcblx0XHRcdH1cblx0XHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0IC8gc2NhbGU7XG5cblx0XHR9XG5cblx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAqIDI7XG5cdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHdlIHVwZGF0ZSB0aGUgdHdlZW4gcHJvcGVydGllcyBsYXRlciBvblxuXHRcdHZhbHVlUGFydHMgPSB2YWx1ZVBhcnRzIHx8IFtdO1xuXHR9XG5cblx0aWYgKCB2YWx1ZVBhcnRzICkge1xuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbEluVW5pdCB8fCAraW5pdGlhbCB8fCAwO1xuXG5cdFx0Ly8gQXBwbHkgcmVsYXRpdmUgb2Zmc2V0ICgrPS8tPSkgaWYgc3BlY2lmaWVkXG5cdFx0YWRqdXN0ZWQgPSB2YWx1ZVBhcnRzWyAxIF0gP1xuXHRcdFx0aW5pdGlhbEluVW5pdCArICggdmFsdWVQYXJ0c1sgMSBdICsgMSApICogdmFsdWVQYXJ0c1sgMiBdIDpcblx0XHRcdCt2YWx1ZVBhcnRzWyAyIF07XG5cdFx0aWYgKCB0d2VlbiApIHtcblx0XHRcdHR3ZWVuLnVuaXQgPSB1bml0O1xuXHRcdFx0dHdlZW4uc3RhcnQgPSBpbml0aWFsSW5Vbml0O1xuXHRcdFx0dHdlZW4uZW5kID0gYWRqdXN0ZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhZGp1c3RlZDtcbn1cblxuXG52YXIgZGVmYXVsdERpc3BsYXlNYXAgPSB7fTtcblxuZnVuY3Rpb24gZ2V0RGVmYXVsdERpc3BsYXkoIGVsZW0gKSB7XG5cdHZhciB0ZW1wLFxuXHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudCxcblx0XHRub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUsXG5cdFx0ZGlzcGxheSA9IGRlZmF1bHREaXNwbGF5TWFwWyBub2RlTmFtZSBdO1xuXG5cdGlmICggZGlzcGxheSApIHtcblx0XHRyZXR1cm4gZGlzcGxheTtcblx0fVxuXG5cdHRlbXAgPSBkb2MuYm9keS5hcHBlbmRDaGlsZCggZG9jLmNyZWF0ZUVsZW1lbnQoIG5vZGVOYW1lICkgKTtcblx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIHRlbXAsIFwiZGlzcGxheVwiICk7XG5cblx0dGVtcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0ZW1wICk7XG5cblx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRkaXNwbGF5ID0gXCJibG9ja1wiO1xuXHR9XG5cdGRlZmF1bHREaXNwbGF5TWFwWyBub2RlTmFtZSBdID0gZGlzcGxheTtcblxuXHRyZXR1cm4gZGlzcGxheTtcbn1cblxuZnVuY3Rpb24gc2hvd0hpZGUoIGVsZW1lbnRzLCBzaG93ICkge1xuXHR2YXIgZGlzcGxheSwgZWxlbSxcblx0XHR2YWx1ZXMgPSBbXSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuXG5cdC8vIERldGVybWluZSBuZXcgZGlzcGxheSB2YWx1ZSBmb3IgZWxlbWVudHMgdGhhdCBuZWVkIHRvIGNoYW5nZVxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTtcblx0XHRpZiAoICFlbGVtLnN0eWxlICkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0ZGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheTtcblx0XHRpZiAoIHNob3cgKSB7XG5cblx0XHRcdC8vIFNpbmNlIHdlIGZvcmNlIHZpc2liaWxpdHkgdXBvbiBjYXNjYWRlLWhpZGRlbiBlbGVtZW50cywgYW4gaW1tZWRpYXRlIChhbmQgc2xvdylcblx0XHRcdC8vIGNoZWNrIGlzIHJlcXVpcmVkIGluIHRoaXMgZmlyc3QgbG9vcCB1bmxlc3Mgd2UgaGF2ZSBhIG5vbmVtcHR5IGRpc3BsYXkgdmFsdWUgKGVpdGhlclxuXHRcdFx0Ly8gaW5saW5lIG9yIGFib3V0LXRvLWJlLXJlc3RvcmVkKVxuXHRcdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImRpc3BsYXlcIiApIHx8IG51bGw7XG5cdFx0XHRcdGlmICggIXZhbHVlc1sgaW5kZXggXSApIHtcblx0XHRcdFx0XHRlbGVtLnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gZ2V0RGVmYXVsdERpc3BsYXkoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCBkaXNwbGF5ICE9PSBcIm5vbmVcIiApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gXCJub25lXCI7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgd2hhdCB3ZSdyZSBvdmVyd3JpdGluZ1xuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiZGlzcGxheVwiLCBkaXNwbGF5ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2V0IHRoZSBkaXNwbGF5IG9mIHRoZSBlbGVtZW50cyBpbiBhIHNlY29uZCBsb29wIHRvIGF2b2lkIGNvbnN0YW50IHJlZmxvd1xuXHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggdmFsdWVzWyBpbmRleCBdICE9IG51bGwgKSB7XG5cdFx0XHRlbGVtZW50c1sgaW5kZXggXS5zdHlsZS5kaXNwbGF5ID0gdmFsdWVzWyBpbmRleCBdO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50cztcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzaG93OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMsIHRydWUgKTtcblx0fSxcblx0aGlkZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzICk7XG5cdH0sXG5cdHRvZ2dsZTogZnVuY3Rpb24oIHN0YXRlICkge1xuXHRcdGlmICggdHlwZW9mIHN0YXRlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdHJldHVybiBzdGF0ZSA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGlzSGlkZGVuV2l0aGluVHJlZSggdGhpcyApICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5zaG93KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG59ICk7XG52YXIgcmNoZWNrYWJsZVR5cGUgPSAoIC9eKD86Y2hlY2tib3h8cmFkaW8pJC9pICk7XG5cbnZhciBydGFnTmFtZSA9ICggLzwoW2Etel1bXlxcL1xcMD5cXHgyMFxcdFxcclxcblxcZl0qKS9pICk7XG5cbnZhciByc2NyaXB0VHlwZSA9ICggL14kfF5tb2R1bGUkfFxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSApO1xuXG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdGRpdiA9IGZyYWdtZW50LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKSxcblx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHlcblx0Ly8gQ2hlY2sgc3RhdGUgbG9zdCBpZiB0aGUgbmFtZSBpcyBzZXQgKCMxMTIxNylcblx0Ly8gU3VwcG9ydDogV2luZG93cyBXZWIgQXBwcyAoV1dBKVxuXHQvLyBgbmFtZWAgYW5kIGB0eXBlYCBtdXN0IHVzZSAuc2V0QXR0cmlidXRlIGZvciBXV0EgKCMxNDkwMSlcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJyYWRpb1wiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJjaGVja2VkXCIsIFwiY2hlY2tlZFwiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwidFwiICk7XG5cblx0ZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgb25seVxuXHQvLyBPbGRlciBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHNcblx0c3VwcG9ydC5jaGVja0Nsb25lID0gZGl2LmNsb25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNYWtlIHN1cmUgdGV4dGFyZWEgKGFuZCBjaGVja2JveCkgZGVmYXVsdFZhbHVlIGlzIHByb3Blcmx5IGNsb25lZFxuXHRkaXYuaW5uZXJIVE1MID0gXCI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+XCI7XG5cdHN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSAhIWRpdi5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdC8vIElFIDw9OSByZXBsYWNlcyA8b3B0aW9uPiB0YWdzIHdpdGggdGhlaXIgY29udGVudHMgd2hlbiBpbnNlcnRlZCBvdXRzaWRlIG9mXG5cdC8vIHRoZSBzZWxlY3QgZWxlbWVudC5cblx0ZGl2LmlubmVySFRNTCA9IFwiPG9wdGlvbj48L29wdGlvbj5cIjtcblx0c3VwcG9ydC5vcHRpb24gPSAhIWRpdi5sYXN0Q2hpbGQ7XG59ICkoKTtcblxuXG4vLyBXZSBoYXZlIHRvIGNsb3NlIHRoZXNlIHRhZ3MgdG8gc3VwcG9ydCBYSFRNTCAoIzEzMjAwKVxudmFyIHdyYXBNYXAgPSB7XG5cblx0Ly8gWEhUTUwgcGFyc2VycyBkbyBub3QgbWFnaWNhbGx5IGluc2VydCBlbGVtZW50cyBpbiB0aGVcblx0Ly8gc2FtZSB3YXkgdGhhdCB0YWcgc291cCBwYXJzZXJzIGRvLiBTbyB3ZSBjYW5ub3Qgc2hvcnRlblxuXHQvLyB0aGlzIGJ5IG9taXR0aW5nIDx0Ym9keT4gb3Igb3RoZXIgcmVxdWlyZWQgZWxlbWVudHMuXG5cdHRoZWFkOiBbIDEsIFwiPHRhYmxlPlwiLCBcIjwvdGFibGU+XCIgXSxcblx0Y29sOiBbIDIsIFwiPHRhYmxlPjxjb2xncm91cD5cIiwgXCI8L2NvbGdyb3VwPjwvdGFibGU+XCIgXSxcblx0dHI6IFsgMiwgXCI8dGFibGU+PHRib2R5PlwiLCBcIjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXHR0ZDogWyAzLCBcIjx0YWJsZT48dGJvZHk+PHRyPlwiLCBcIjwvdHI+PC90Ym9keT48L3RhYmxlPlwiIF0sXG5cblx0X2RlZmF1bHQ6IFsgMCwgXCJcIiwgXCJcIiBdXG59O1xuXG53cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkO1xud3JhcE1hcC50aCA9IHdyYXBNYXAudGQ7XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5pZiAoICFzdXBwb3J0Lm9wdGlvbiApIHtcblx0d3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uID0gWyAxLCBcIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz5cIiwgXCI8L3NlbGVjdD5cIiBdO1xufVxuXG5cbmZ1bmN0aW9uIGdldEFsbCggY29udGV4dCwgdGFnICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gVXNlIHR5cGVvZiB0byBhdm9pZCB6ZXJvLWFyZ3VtZW50IG1ldGhvZCBpbnZvY2F0aW9uIG9uIGhvc3Qgb2JqZWN0cyAoIzE1MTUxKVxuXHR2YXIgcmV0O1xuXG5cdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIGlmICggdHlwZW9mIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSB7XG5cdFx0cmV0ID0gW107XG5cdH1cblxuXHRpZiAoIHRhZyA9PT0gdW5kZWZpbmVkIHx8IHRhZyAmJiBub2RlTmFtZSggY29udGV4dCwgdGFnICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5tZXJnZSggWyBjb250ZXh0IF0sIHJldCApO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn1cblxuXG4vLyBNYXJrIHNjcmlwdHMgYXMgaGF2aW5nIGFscmVhZHkgYmVlbiBldmFsdWF0ZWRcbmZ1bmN0aW9uIHNldEdsb2JhbEV2YWwoIGVsZW1zLCByZWZFbGVtZW50cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGRhdGFQcml2LnNldChcblx0XHRcdGVsZW1zWyBpIF0sXG5cdFx0XHRcImdsb2JhbEV2YWxcIixcblx0XHRcdCFyZWZFbGVtZW50cyB8fCBkYXRhUHJpdi5nZXQoIHJlZkVsZW1lbnRzWyBpIF0sIFwiZ2xvYmFsRXZhbFwiIClcblx0XHQpO1xuXHR9XG59XG5cblxudmFyIHJodG1sID0gLzx8JiM/XFx3KzsvO1xuXG5mdW5jdGlvbiBidWlsZEZyYWdtZW50KCBlbGVtcywgY29udGV4dCwgc2NyaXB0cywgc2VsZWN0aW9uLCBpZ25vcmVkICkge1xuXHR2YXIgZWxlbSwgdG1wLCB0YWcsIHdyYXAsIGF0dGFjaGVkLCBqLFxuXHRcdGZyYWdtZW50ID0gY29udGV4dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0bm9kZXMgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRlbGVtID0gZWxlbXNbIGkgXTtcblxuXHRcdGlmICggZWxlbSB8fCBlbGVtID09PSAwICkge1xuXG5cdFx0XHQvLyBBZGQgbm9kZXMgZGlyZWN0bHlcblx0XHRcdGlmICggdG9UeXBlKCBlbGVtICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgZWxlbS5ub2RlVHlwZSA/IFsgZWxlbSBdIDogZWxlbSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGVcblx0XHRcdH0gZWxzZSBpZiAoICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7XG5cdFx0XHRcdG5vZGVzLnB1c2goIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIGVsZW0gKSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IGh0bWwgaW50byBET00gbm9kZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRtcCA9IHRtcCB8fCBmcmFnbWVudC5hcHBlbmRDaGlsZCggY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblxuXHRcdFx0XHQvLyBEZXNlcmlhbGl6ZSBhIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uXG5cdFx0XHRcdHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR3cmFwID0gd3JhcE1hcFsgdGFnIF0gfHwgd3JhcE1hcC5fZGVmYXVsdDtcblx0XHRcdFx0dG1wLmlubmVySFRNTCA9IHdyYXBbIDEgXSArIGpRdWVyeS5odG1sUHJlZmlsdGVyKCBlbGVtICkgKyB3cmFwWyAyIF07XG5cblx0XHRcdFx0Ly8gRGVzY2VuZCB0aHJvdWdoIHdyYXBwZXJzIHRvIHRoZSByaWdodCBjb250ZW50XG5cdFx0XHRcdGogPSB3cmFwWyAwIF07XG5cdFx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRcdHRtcCA9IHRtcC5sYXN0Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCB0bXAuY2hpbGROb2RlcyApO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyXG5cdFx0XHRcdHRtcCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIHRoZSBjcmVhdGVkIG5vZGVzIGFyZSBvcnBoYW5lZCAoIzEyMzkyKVxuXHRcdFx0XHR0bXAudGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJlbW92ZSB3cmFwcGVyIGZyb20gZnJhZ21lbnRcblx0ZnJhZ21lbnQudGV4dENvbnRlbnQgPSBcIlwiO1xuXG5cdGkgPSAwO1xuXHR3aGlsZSAoICggZWxlbSA9IG5vZGVzWyBpKysgXSApICkge1xuXG5cdFx0Ly8gU2tpcCBlbGVtZW50cyBhbHJlYWR5IGluIHRoZSBjb250ZXh0IGNvbGxlY3Rpb24gKHRyYWMtNDA4Nylcblx0XHRpZiAoIHNlbGVjdGlvbiAmJiBqUXVlcnkuaW5BcnJheSggZWxlbSwgc2VsZWN0aW9uICkgPiAtMSApIHtcblx0XHRcdGlmICggaWdub3JlZCApIHtcblx0XHRcdFx0aWdub3JlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRhdHRhY2hlZCA9IGlzQXR0YWNoZWQoIGVsZW0gKTtcblxuXHRcdC8vIEFwcGVuZCB0byBmcmFnbWVudFxuXHRcdHRtcCA9IGdldEFsbCggZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVsZW0gKSwgXCJzY3JpcHRcIiApO1xuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGlmICggYXR0YWNoZWQgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCB0bXAgKTtcblx0XHR9XG5cblx0XHQvLyBDYXB0dXJlIGV4ZWN1dGFibGVzXG5cdFx0aWYgKCBzY3JpcHRzICkge1xuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRtcFsgaisrIF0gKSApIHtcblx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBlbGVtLnR5cGUgfHwgXCJcIiApICkge1xuXHRcdFx0XHRcdHNjcmlwdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGZyYWdtZW50O1xufVxuXG5cbnZhclxuXHRya2V5RXZlbnQgPSAvXmtleS8sXG5cdHJtb3VzZUV2ZW50ID0gL14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLFxuXHRydHlwZW5hbWVzcGFjZSA9IC9eKFteLl0qKSg/OlxcLiguKyl8KS87XG5cbmZ1bmN0aW9uIHJldHVyblRydWUoKSB7XG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXR1cm5GYWxzZSgpIHtcblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcbi8vIGZvY3VzKCkgYW5kIGJsdXIoKSBhcmUgYXN5bmNocm9ub3VzLCBleGNlcHQgd2hlbiB0aGV5IGFyZSBuby1vcC5cbi8vIFNvIGV4cGVjdCBmb2N1cyB0byBiZSBzeW5jaHJvbm91cyB3aGVuIHRoZSBlbGVtZW50IGlzIGFscmVhZHkgYWN0aXZlLFxuLy8gYW5kIGJsdXIgdG8gYmUgc3luY2hyb25vdXMgd2hlbiB0aGUgZWxlbWVudCBpcyBub3QgYWxyZWFkeSBhY3RpdmUuXG4vLyAoZm9jdXMgYW5kIGJsdXIgYXJlIGFsd2F5cyBzeW5jaHJvbm91cyBpbiBvdGhlciBzdXBwb3J0ZWQgYnJvd3NlcnMsXG4vLyB0aGlzIGp1c3QgZGVmaW5lcyB3aGVuIHdlIGNhbiBjb3VudCBvbiBpdCkuXG5mdW5jdGlvbiBleHBlY3RTeW5jKCBlbGVtLCB0eXBlICkge1xuXHRyZXR1cm4gKCBlbGVtID09PSBzYWZlQWN0aXZlRWxlbWVudCgpICkgPT09ICggdHlwZSA9PT0gXCJmb2N1c1wiICk7XG59XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBBY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBjYW4gdGhyb3cgdW5leHBlY3RlZGx5XG4vLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzOTNcbmZ1bmN0aW9uIHNhZmVBY3RpdmVFbGVtZW50KCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXHR9IGNhdGNoICggZXJyICkgeyB9XG59XG5cbmZ1bmN0aW9uIG9uKCBlbGVtLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCBvbmUgKSB7XG5cdHZhciBvcmlnRm4sIHR5cGU7XG5cblx0Ly8gVHlwZXMgY2FuIGJlIGEgbWFwIG9mIHR5cGVzL2hhbmRsZXJzXG5cdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gKCB0eXBlcy1PYmplY3QsIHNlbGVjdG9yLCBkYXRhIClcblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1PYmplY3QsIGRhdGEgKVxuXHRcdFx0ZGF0YSA9IGRhdGEgfHwgc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdG9uKCBlbGVtLCB0eXBlLCBzZWxlY3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7XG5cdFx0fVxuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBkYXRhID09IG51bGwgJiYgZm4gPT0gbnVsbCApIHtcblxuXHRcdC8vICggdHlwZXMsIGZuIClcblx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdGRhdGEgPSBzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmICggZm4gPT0gbnVsbCApIHtcblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcywgc2VsZWN0b3IsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gKCB0eXBlcywgZGF0YSwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdGZuID0gcmV0dXJuRmFsc2U7XG5cdH0gZWxzZSBpZiAoICFmbiApIHtcblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggb25lID09PSAxICkge1xuXHRcdG9yaWdGbiA9IGZuO1xuXHRcdGZuID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHQvLyBDYW4gdXNlIGFuIGVtcHR5IHNldCwgc2luY2UgZXZlbnQgY29udGFpbnMgdGhlIGluZm9cblx0XHRcdGpRdWVyeSgpLm9mZiggZXZlbnQgKTtcblx0XHRcdHJldHVybiBvcmlnRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH07XG5cblx0XHQvLyBVc2Ugc2FtZSBndWlkIHNvIGNhbGxlciBjYW4gcmVtb3ZlIHVzaW5nIG9yaWdGblxuXHRcdGZuLmd1aWQgPSBvcmlnRm4uZ3VpZCB8fCAoIG9yaWdGbi5ndWlkID0galF1ZXJ5Lmd1aWQrKyApO1xuXHR9XG5cdHJldHVybiBlbGVtLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGVzLCBmbiwgZGF0YSwgc2VsZWN0b3IgKTtcblx0fSApO1xufVxuXG4vKlxuICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgZXZlbnRzIC0tIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLlxuICogUHJvcHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5IGZvciBtYW55IG9mIHRoZSBpZGVhcy5cbiAqL1xualF1ZXJ5LmV2ZW50ID0ge1xuXG5cdGdsb2JhbDoge30sXG5cblx0YWRkOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIGRhdGEsIHNlbGVjdG9yICkge1xuXG5cdFx0dmFyIGhhbmRsZU9iakluLCBldmVudEhhbmRsZSwgdG1wLFxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXG5cdFx0XHRlbGVtRGF0YSA9IGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0Ly8gT25seSBhdHRhY2ggZXZlbnRzIHRvIG9iamVjdHMgdGhhdCBhY2NlcHQgZGF0YVxuXHRcdGlmICggIWFjY2VwdERhdGEoIGVsZW0gKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3RvbSBkYXRhIGluIGxpZXUgb2YgdGhlIGhhbmRsZXJcblx0XHRpZiAoIGhhbmRsZXIuaGFuZGxlciApIHtcblx0XHRcdGhhbmRsZU9iakluID0gaGFuZGxlcjtcblx0XHRcdGhhbmRsZXIgPSBoYW5kbGVPYmpJbi5oYW5kbGVyO1xuXHRcdFx0c2VsZWN0b3IgPSBoYW5kbGVPYmpJbi5zZWxlY3Rvcjtcblx0XHR9XG5cblx0XHQvLyBFbnN1cmUgdGhhdCBpbnZhbGlkIHNlbGVjdG9ycyB0aHJvdyBleGNlcHRpb25zIGF0IGF0dGFjaCB0aW1lXG5cdFx0Ly8gRXZhbHVhdGUgYWdhaW5zdCBkb2N1bWVudEVsZW1lbnQgaW4gY2FzZSBlbGVtIGlzIGEgbm9uLWVsZW1lbnQgbm9kZSAoZS5nLiwgZG9jdW1lbnQpXG5cdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZG9jdW1lbnRFbGVtZW50LCBzZWxlY3RvciApO1xuXHRcdH1cblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBoYW5kbGVyIGhhcyBhIHVuaXF1ZSBJRCwgdXNlZCB0byBmaW5kL3JlbW92ZSBpdCBsYXRlclxuXHRcdGlmICggIWhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdGhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5ndWlkKys7XG5cdFx0fVxuXG5cdFx0Ly8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZSBhbmQgbWFpbiBoYW5kbGVyLCBpZiB0aGlzIGlzIHRoZSBmaXJzdFxuXHRcdGlmICggISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgPSBPYmplY3QuY3JlYXRlKCBudWxsICk7XG5cdFx0fVxuXHRcdGlmICggISggZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgKSApIHtcblx0XHRcdGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7XG5cblx0XHRcdFx0Ly8gRGlzY2FyZCB0aGUgc2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoKSBhbmRcblx0XHRcdFx0Ly8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZFxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICE9PSBlLnR5cGUgP1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5kaXNwYXRjaC5hcHBseSggZWxlbSwgYXJndW1lbnRzICkgOiB1bmRlZmluZWQ7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2Vcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVGhlcmUgKm11c3QqIGJlIGEgdHlwZSwgbm8gYXR0YWNoaW5nIG5hbWVzcGFjZS1vbmx5IGhhbmRsZXJzXG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgZXZlbnQgY2hhbmdlcyBpdHMgdHlwZSwgdXNlIHRoZSBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY2hhbmdlZCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gSWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0ZXJtaW5lIHNwZWNpYWwgZXZlbnQgYXBpIHR5cGUsIG90aGVyd2lzZSBnaXZlbiB0eXBlXG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cblx0XHRcdC8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBoYW5kbGVPYmogaXMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVyc1xuXHRcdFx0aGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRvcmlnVHlwZTogb3JpZ1R5cGUsXG5cdFx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRcdGhhbmRsZXI6IGhhbmRsZXIsXG5cdFx0XHRcdGd1aWQ6IGhhbmRsZXIuZ3VpZCxcblx0XHRcdFx0c2VsZWN0b3I6IHNlbGVjdG9yLFxuXHRcdFx0XHRuZWVkc0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApLFxuXHRcdFx0XHRuYW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKVxuXHRcdFx0fSwgaGFuZGxlT2JqSW4gKTtcblxuXHRcdFx0Ly8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZSBpZiB3ZSdyZSB0aGUgZmlyc3Rcblx0XHRcdGlmICggISggaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSApICkge1xuXHRcdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107XG5cdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwO1xuXG5cdFx0XHRcdC8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZVxuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnNldHVwIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHNwZWNpYWwuYWRkICkge1xuXHRcdFx0XHRzcGVjaWFsLmFkZC5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblxuXHRcdFx0XHRpZiAoICFoYW5kbGVPYmouaGFuZGxlci5ndWlkICkge1xuXHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMgaW4gZnJvbnRcblx0XHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBLZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50cyBoYXZlIGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uXG5cdFx0XHRqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0cnVlO1xuXHRcdH1cblxuXHR9LFxuXG5cdC8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkge1xuXG5cdFx0dmFyIGosIG9yaWdDb3VudCwgdG1wLFxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXG5cdFx0XHRlbGVtRGF0YSA9IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKSAmJiBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdGlmICggIWVsZW1EYXRhIHx8ICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE9uY2UgZm9yIGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWRcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50XG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdO1xuXHRcdFx0dG1wID0gdG1wWyAyIF0gJiZcblx0XHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICk7XG5cblx0XHRcdC8vIFJlbW92ZSBtYXRjaGluZyBldmVudHNcblx0XHRcdG9yaWdDb3VudCA9IGogPSBoYW5kbGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGogXTtcblxuXHRcdFx0XHRpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYmXG5cdFx0XHRcdFx0KCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiZcblx0XHRcdFx0XHQoICF0bXAgfHwgdG1wLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApICYmXG5cdFx0XHRcdFx0KCAhc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fFxuXHRcdFx0XHRcdFx0c2VsZWN0b3IgPT09IFwiKipcIiAmJiBoYW5kbGVPYmouc2VsZWN0b3IgKSApIHtcblx0XHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGosIDEgKTtcblxuXHRcdFx0XHRcdGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNwZWNpYWwucmVtb3ZlICkge1xuXHRcdFx0XHRcdFx0c3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhpbmcgYW5kIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3Rcblx0XHRcdC8vIChhdm9pZHMgcG90ZW50aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzKVxuXHRcdFx0aWYgKCBvcmlnQ291bnQgJiYgIWhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fFxuXHRcdFx0XHRcdHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGV0ZSBldmVudHNbIHR5cGUgXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgZGF0YSBhbmQgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZFxuXHRcdGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImhhbmRsZSBldmVudHNcIiApO1xuXHRcdH1cblx0fSxcblxuXHRkaXNwYXRjaDogZnVuY3Rpb24oIG5hdGl2ZUV2ZW50ICkge1xuXG5cdFx0dmFyIGksIGosIHJldCwgbWF0Y2hlZCwgaGFuZGxlT2JqLCBoYW5kbGVyUXVldWUsXG5cdFx0XHRhcmdzID0gbmV3IEFycmF5KCBhcmd1bWVudHMubGVuZ3RoICksXG5cblx0XHRcdC8vIE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50IG9iamVjdFxuXHRcdFx0ZXZlbnQgPSBqUXVlcnkuZXZlbnQuZml4KCBuYXRpdmVFdmVudCApLFxuXG5cdFx0XHRoYW5kbGVycyA9IChcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsIClcblx0XHRcdFx0KVsgZXZlbnQudHlwZSBdIHx8IFtdLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0gfHwge307XG5cblx0XHQvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudFxuXHRcdGFyZ3NbIDAgXSA9IGV2ZW50O1xuXG5cdFx0Zm9yICggaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRhcmdzWyBpIF0gPSBhcmd1bWVudHNbIGkgXTtcblx0XHR9XG5cblx0XHRldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7XG5cblx0XHQvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkXG5cdFx0aWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGhhbmRsZXJzXG5cdFx0aGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApO1xuXG5cdFx0Ly8gUnVuIGRlbGVnYXRlcyBmaXJzdDsgdGhleSBtYXkgd2FudCB0byBzdG9wIHByb3BhZ2F0aW9uIGJlbmVhdGggdXNcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggbWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07XG5cblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxlcnNbIGorKyBdICkgJiZcblx0XHRcdFx0IWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGV2ZW50IGlzIG5hbWVzcGFjZWQsIHRoZW4gZWFjaCBoYW5kbGVyIGlzIG9ubHkgaW52b2tlZCBpZiBpdCBpc1xuXHRcdFx0XHQvLyBzcGVjaWFsbHkgdW5pdmVyc2FsIG9yIGl0cyBuYW1lc3BhY2VzIGFyZSBhIHN1cGVyc2V0IG9mIHRoZSBldmVudCdzLlxuXHRcdFx0XHRpZiAoICFldmVudC5ybmFtZXNwYWNlIHx8IGhhbmRsZU9iai5uYW1lc3BhY2UgPT09IGZhbHNlIHx8XG5cdFx0XHRcdFx0ZXZlbnQucm5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7XG5cblx0XHRcdFx0XHRldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7XG5cdFx0XHRcdFx0ZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhO1xuXG5cdFx0XHRcdFx0cmV0ID0gKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSApLmhhbmRsZSB8fFxuXHRcdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIgKS5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7XG5cblx0XHRcdFx0XHRpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGV2ZW50LnJlc3VsdCA9IHJldCApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbCB0aGUgcG9zdERpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZVxuXHRcdGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7XG5cdFx0XHRzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0aGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7XG5cdFx0dmFyIGksIGhhbmRsZU9iaiwgc2VsLCBtYXRjaGVkSGFuZGxlcnMsIG1hdGNoZWRTZWxlY3RvcnMsXG5cdFx0XHRoYW5kbGVyUXVldWUgPSBbXSxcblx0XHRcdGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LFxuXHRcdFx0Y3VyID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0Ly8gRmluZCBkZWxlZ2F0ZSBoYW5kbGVyc1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTlcblx0XHRcdC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICh0cmFjLTEzMTgwKVxuXHRcdFx0Y3VyLm5vZGVUeXBlICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MlxuXHRcdFx0Ly8gU3VwcHJlc3Mgc3BlYy12aW9sYXRpbmcgY2xpY2tzIGluZGljYXRpbmcgYSBub24tcHJpbWFyeSBwb2ludGVyIGJ1dHRvbiAodHJhYy0zODYxKVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnQtdHlwZS1jbGlja1xuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0Ly8gLi4uYnV0IG5vdCBhcnJvdyBrZXkgXCJjbGlja3NcIiBvZiByYWRpbyBpbnB1dHMsIHdoaWNoIGNhbiBoYXZlIGBidXR0b25gIC0xIChnaC0yMzQzKVxuXHRcdFx0ISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGV2ZW50LmJ1dHRvbiA+PSAxICkgKSB7XG5cblx0XHRcdGZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkge1xuXG5cdFx0XHRcdC8vIERvbid0IGNoZWNrIG5vbi1lbGVtZW50cyAoIzEzMjA4KVxuXHRcdFx0XHQvLyBEb24ndCBwcm9jZXNzIGNsaWNrcyBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2NClcblx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGN1ci5kaXNhYmxlZCA9PT0gdHJ1ZSApICkge1xuXHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycyA9IFtdO1xuXHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnMgPSB7fTtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHtcblx0XHRcdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IGNvbmZsaWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICgjMTMyMDMpXG5cdFx0XHRcdFx0XHRzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyBcIiBcIjtcblxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgP1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID4gLTEgOlxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggbWF0Y2hlZEhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZWRIYW5kbGVycyB9ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVyc1xuXHRcdGN1ciA9IHRoaXM7XG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGhhbmRsZXJRdWV1ZTtcblx0fSxcblxuXHRhZGRQcm9wOiBmdW5jdGlvbiggbmFtZSwgaG9vayApIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGpRdWVyeS5FdmVudC5wcm90b3R5cGUsIG5hbWUsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cblx0XHRcdGdldDogaXNGdW5jdGlvbiggaG9vayApID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBob29rKCB0aGlzLm9yaWdpbmFsRXZlbnQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gOlxuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFsgbmFtZSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgbmFtZSwge1xuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGZpeDogZnVuY3Rpb24oIG9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0cmV0dXJuIG9yaWdpbmFsRXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0b3JpZ2luYWxFdmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7XG5cdH0sXG5cblx0c3BlY2lhbDoge1xuXHRcdGxvYWQ6IHtcblxuXHRcdFx0Ly8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZFxuXHRcdFx0bm9CdWJibGU6IHRydWVcblx0XHR9LFxuXHRcdGNsaWNrOiB7XG5cblx0XHRcdC8vIFV0aWxpemUgbmF0aXZlIGV2ZW50IHRvIGVuc3VyZSBjb3JyZWN0IHN0YXRlIGZvciBjaGVja2FibGUgaW5wdXRzXG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oIGRhdGEgKSB7XG5cblx0XHRcdFx0Ly8gRm9yIG11dHVhbCBjb21wcmVzc2liaWxpdHkgd2l0aCBfZGVmYXVsdCwgcmVwbGFjZSBgdGhpc2AgYWNjZXNzIHdpdGggYSBsb2NhbCB2YXIuXG5cdFx0XHRcdC8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uXG5cdFx0XHRcdHZhciBlbCA9IHRoaXMgfHwgZGF0YTtcblxuXHRcdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHQvLyBkYXRhUHJpdi5zZXQoIGVsLCBcImNsaWNrXCIsIC4uLiApXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIsIHJldHVyblRydWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyaW5nIGEgY2xpY2tcblx0XHRcdFx0aWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiZcblx0XHRcdFx0XHRlbC5jbGljayAmJiBub2RlTmFtZSggZWwsIFwiaW5wdXRcIiApICkge1xuXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBub24tZmFsc2UgdG8gYWxsb3cgbm9ybWFsIGV2ZW50LXBhdGggcHJvcGFnYXRpb25cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBGb3IgY3Jvc3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgc3VwcHJlc3MgbmF0aXZlIC5jbGljaygpIG9uIGxpbmtzXG5cdFx0XHQvLyBBbHNvIHByZXZlbnQgaXQgaWYgd2UncmUgY3VycmVudGx5IGluc2lkZSBhIGxldmVyYWdlZCBuYXRpdmUtZXZlbnQgc3RhY2tcblx0XHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRcdHJldHVybiByY2hlY2thYmxlVHlwZS50ZXN0KCB0YXJnZXQudHlwZSApICYmXG5cdFx0XHRcdFx0dGFyZ2V0LmNsaWNrICYmIG5vZGVOYW1lKCB0YXJnZXQsIFwiaW5wdXRcIiApICYmXG5cdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0YXJnZXQsIFwiY2xpY2tcIiApIHx8XG5cdFx0XHRcdFx0bm9kZU5hbWUoIHRhcmdldCwgXCJhXCIgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0YmVmb3JldW5sb2FkOiB7XG5cdFx0XHRwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDIwK1xuXHRcdFx0XHQvLyBGaXJlZm94IGRvZXNuJ3QgYWxlcnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxkIGlzIG5vdCBzZXQuXG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBFbnN1cmUgdGhlIHByZXNlbmNlIG9mIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgaGFuZGxlcyBtYW51YWxseS10cmlnZ2VyZWRcbi8vIHN5bnRoZXRpYyBldmVudHMgYnkgaW50ZXJydXB0aW5nIHByb2dyZXNzIHVudGlsIHJlaW52b2tlZCBpbiByZXNwb25zZSB0b1xuLy8gKm5hdGl2ZSogZXZlbnRzIHRoYXQgaXQgZmlyZXMgZGlyZWN0bHksIGVuc3VyaW5nIHRoYXQgc3RhdGUgY2hhbmdlcyBoYXZlXG4vLyBhbHJlYWR5IG9jY3VycmVkIGJlZm9yZSBvdGhlciBsaXN0ZW5lcnMgYXJlIGludm9rZWQuXG5mdW5jdGlvbiBsZXZlcmFnZU5hdGl2ZSggZWwsIHR5cGUsIGV4cGVjdFN5bmMgKSB7XG5cblx0Ly8gTWlzc2luZyBleHBlY3RTeW5jIGluZGljYXRlcyBhIHRyaWdnZXIgY2FsbCwgd2hpY2ggbXVzdCBmb3JjZSBzZXR1cCB0aHJvdWdoIGpRdWVyeS5ldmVudC5hZGRcblx0aWYgKCAhZXhwZWN0U3luYyApIHtcblx0XHRpZiAoIGRhdGFQcml2LmdldCggZWwsIHR5cGUgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHJldHVyblRydWUgKTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUmVnaXN0ZXIgdGhlIGNvbnRyb2xsZXIgYXMgYSBzcGVjaWFsIHVuaXZlcnNhbCBoYW5kbGVyIGZvciBhbGwgZXZlbnQgbmFtZXNwYWNlc1xuXHRkYXRhUHJpdi5zZXQoIGVsLCB0eXBlLCBmYWxzZSApO1xuXHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwge1xuXHRcdG5hbWVzcGFjZTogZmFsc2UsXG5cdFx0aGFuZGxlcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIG5vdEFzeW5jLCByZXN1bHQsXG5cdFx0XHRcdHNhdmVkID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdGlmICggKCBldmVudC5pc1RyaWdnZXIgJiAxICkgJiYgdGhpc1sgdHlwZSBdICkge1xuXG5cdFx0XHRcdC8vIEludGVycnVwdCBwcm9jZXNzaW5nIG9mIHRoZSBvdXRlciBzeW50aGV0aWMgLnRyaWdnZXIoKWVkIGV2ZW50XG5cdFx0XHRcdC8vIFNhdmVkIGRhdGEgc2hvdWxkIGJlIGZhbHNlIGluIHN1Y2ggY2FzZXMsIGJ1dCBtaWdodCBiZSBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0XG5cdFx0XHRcdC8vIGZyb20gYW4gYXN5bmMgbmF0aXZlIGhhbmRsZXIgKGdoLTQzNTApXG5cdFx0XHRcdGlmICggIXNhdmVkLmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGFyZ3VtZW50cyBmb3IgdXNlIHdoZW4gaGFuZGxpbmcgdGhlIGlubmVyIG5hdGl2ZSBldmVudFxuXHRcdFx0XHRcdC8vIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAoYW4gZXZlbnQgb2JqZWN0KSwgc28gdGhpcyBhcnJheVxuXHRcdFx0XHRcdC8vIHdpbGwgbm90IGJlIGNvbmZ1c2VkIHdpdGggYSBsZWZ0b3ZlciBjYXB0dXJlIG9iamVjdC5cblx0XHRcdFx0XHRzYXZlZCA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgc2F2ZWQgKTtcblxuXHRcdFx0XHRcdC8vIFRyaWdnZXIgdGhlIG5hdGl2ZSBldmVudCBhbmQgY2FwdHVyZSBpdHMgcmVzdWx0XG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTErXG5cdFx0XHRcdFx0Ly8gZm9jdXMoKSBhbmQgYmx1cigpIGFyZSBhc3luY2hyb25vdXNcblx0XHRcdFx0XHRub3RBc3luYyA9IGV4cGVjdFN5bmMoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0XHR0aGlzWyB0eXBlIF0oKTtcblx0XHRcdFx0XHRyZXN1bHQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgfHwgbm90QXN5bmMgKSB7XG5cdFx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIGZhbHNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIENhbmNlbCB0aGUgb3V0ZXIgc3ludGhldGljIGV2ZW50XG5cdFx0XHRcdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0LnZhbHVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGlzIGlzIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCBmb3IgYW4gZXZlbnQgd2l0aCBhIGJ1YmJsaW5nIHN1cnJvZ2F0ZVxuXHRcdFx0XHQvLyAoZm9jdXMgb3IgYmx1ciksIGFzc3VtZSB0aGF0IHRoZSBzdXJyb2dhdGUgYWxyZWFkeSBwcm9wYWdhdGVkIGZyb20gdHJpZ2dlcmluZyB0aGVcblx0XHRcdFx0Ly8gbmF0aXZlIGV2ZW50IGFuZCBwcmV2ZW50IHRoYXQgZnJvbSBoYXBwZW5pbmcgYWdhaW4gaGVyZS5cblx0XHRcdFx0Ly8gVGhpcyB0ZWNobmljYWxseSBnZXRzIHRoZSBvcmRlcmluZyB3cm9uZyB3LnIudC4gdG8gYC50cmlnZ2VyKClgIChpbiB3aGljaCB0aGVcblx0XHRcdFx0Ly8gYnViYmxpbmcgc3Vycm9nYXRlIHByb3BhZ2F0ZXMgKmFmdGVyKiB0aGUgbm9uLWJ1YmJsaW5nIGJhc2UpLCBidXQgdGhhdCBzZWVtc1xuXHRcdFx0XHQvLyBsZXNzIGJhZCB0aGFuIGR1cGxpY2F0aW9uLlxuXHRcdFx0XHR9IGVsc2UgaWYgKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge30gKS5kZWxlZ2F0ZVR5cGUgKSB7XG5cdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIG5hdGl2ZSBldmVudCB0cmlnZ2VyZWQgYWJvdmUsIGV2ZXJ5dGhpbmcgaXMgbm93IGluIG9yZGVyXG5cdFx0XHQvLyBGaXJlIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCB3aXRoIHRoZSBvcmlnaW5hbCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIHNhdmVkLmxlbmd0aCApIHtcblxuXHRcdFx0XHQvLyAuLi5hbmQgY2FwdHVyZSB0aGUgcmVzdWx0XG5cdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwge1xuXHRcdFx0XHRcdHZhbHVlOiBqUXVlcnkuZXZlbnQudHJpZ2dlcihcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTErXG5cdFx0XHRcdFx0XHQvLyBFeHRlbmQgd2l0aCB0aGUgcHJvdG90eXBlIHRvIHJlc2V0IHRoZSBhYm92ZSBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmV4dGVuZCggc2F2ZWRbIDAgXSwgalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSApLFxuXHRcdFx0XHRcdFx0c2F2ZWQuc2xpY2UoIDEgKSxcblx0XHRcdFx0XHRcdHRoaXNcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0gKTtcblxuXHRcdFx0XHQvLyBBYm9ydCBoYW5kbGluZyBvZiB0aGUgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSApO1xufVxuXG5qUXVlcnkucmVtb3ZlRXZlbnQgPSBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkge1xuXG5cdC8vIFRoaXMgXCJpZlwiIGlzIG5lZWRlZCBmb3IgcGxhaW4gb2JqZWN0c1xuXHRpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHtcblx0XHRlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGhhbmRsZSApO1xuXHR9XG59O1xuXG5qUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHtcblxuXHQvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmRcblx0aWYgKCAhKCB0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50ICkgKSB7XG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuRXZlbnQoIHNyYywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIEV2ZW50IG9iamVjdFxuXHRpZiAoIHNyYyAmJiBzcmMudHlwZSApIHtcblx0XHR0aGlzLm9yaWdpbmFsRXZlbnQgPSBzcmM7XG5cdFx0dGhpcy50eXBlID0gc3JjLnR5cGU7XG5cblx0XHQvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZFxuXHRcdC8vIGJ5IGEgaGFuZGxlciBsb3dlciBkb3duIHRoZSB0cmVlOyByZWZsZWN0IHRoZSBjb3JyZWN0IHZhbHVlLlxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHxcblx0XHRcdFx0c3JjLmRlZmF1bHRQcmV2ZW50ZWQgPT09IHVuZGVmaW5lZCAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seVxuXHRcdFx0XHRzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlID9cblx0XHRcdHJldHVyblRydWUgOlxuXHRcdFx0cmV0dXJuRmFsc2U7XG5cblx0XHQvLyBDcmVhdGUgdGFyZ2V0IHByb3BlcnRpZXNcblx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgPD02IC0gNyBvbmx5XG5cdFx0Ly8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKCM1MDQsICMxMzE0Mylcblx0XHR0aGlzLnRhcmdldCA9ICggc3JjLnRhcmdldCAmJiBzcmMudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkgP1xuXHRcdFx0c3JjLnRhcmdldC5wYXJlbnROb2RlIDpcblx0XHRcdHNyYy50YXJnZXQ7XG5cblx0XHR0aGlzLmN1cnJlbnRUYXJnZXQgPSBzcmMuY3VycmVudFRhcmdldDtcblx0XHR0aGlzLnJlbGF0ZWRUYXJnZXQgPSBzcmMucmVsYXRlZFRhcmdldDtcblxuXHQvLyBFdmVudCB0eXBlXG5cdH0gZWxzZSB7XG5cdFx0dGhpcy50eXBlID0gc3JjO1xuXHR9XG5cblx0Ly8gUHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3Rcblx0aWYgKCBwcm9wcyApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmVcblx0dGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuXG5cdC8vIE1hcmsgaXQgYXMgZml4ZWRcblx0dGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7XG59O1xuXG4vLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmdcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWxcbmpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBqUXVlcnkuRXZlbnQsXG5cdGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsXG5cdGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc1NpbXVsYXRlZDogZmFsc2UsXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fSxcblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdG9wUHJvcGFnYXRpb24oKTtcblx0fVxufTtcblxuLy8gSW5jbHVkZXMgYWxsIGNvbW1vbiBldmVudCBwcm9wcyBpbmNsdWRpbmcgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQgc3BlY2lmaWMgcHJvcHNcbmpRdWVyeS5lYWNoKCB7XG5cdGFsdEtleTogdHJ1ZSxcblx0YnViYmxlczogdHJ1ZSxcblx0Y2FuY2VsYWJsZTogdHJ1ZSxcblx0Y2hhbmdlZFRvdWNoZXM6IHRydWUsXG5cdGN0cmxLZXk6IHRydWUsXG5cdGRldGFpbDogdHJ1ZSxcblx0ZXZlbnRQaGFzZTogdHJ1ZSxcblx0bWV0YUtleTogdHJ1ZSxcblx0cGFnZVg6IHRydWUsXG5cdHBhZ2VZOiB0cnVlLFxuXHRzaGlmdEtleTogdHJ1ZSxcblx0dmlldzogdHJ1ZSxcblx0XCJjaGFyXCI6IHRydWUsXG5cdGNvZGU6IHRydWUsXG5cdGNoYXJDb2RlOiB0cnVlLFxuXHRrZXk6IHRydWUsXG5cdGtleUNvZGU6IHRydWUsXG5cdGJ1dHRvbjogdHJ1ZSxcblx0YnV0dG9uczogdHJ1ZSxcblx0Y2xpZW50WDogdHJ1ZSxcblx0Y2xpZW50WTogdHJ1ZSxcblx0b2Zmc2V0WDogdHJ1ZSxcblx0b2Zmc2V0WTogdHJ1ZSxcblx0cG9pbnRlcklkOiB0cnVlLFxuXHRwb2ludGVyVHlwZTogdHJ1ZSxcblx0c2NyZWVuWDogdHJ1ZSxcblx0c2NyZWVuWTogdHJ1ZSxcblx0dGFyZ2V0VG91Y2hlczogdHJ1ZSxcblx0dG9FbGVtZW50OiB0cnVlLFxuXHR0b3VjaGVzOiB0cnVlLFxuXG5cdHdoaWNoOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGJ1dHRvbiA9IGV2ZW50LmJ1dHRvbjtcblxuXHRcdC8vIEFkZCB3aGljaCBmb3Iga2V5IGV2ZW50c1xuXHRcdGlmICggZXZlbnQud2hpY2ggPT0gbnVsbCAmJiBya2V5RXZlbnQudGVzdCggZXZlbnQudHlwZSApICkge1xuXHRcdFx0cmV0dXJuIGV2ZW50LmNoYXJDb2RlICE9IG51bGwgPyBldmVudC5jaGFyQ29kZSA6IGV2ZW50LmtleUNvZGU7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHdoaWNoIGZvciBjbGljazogMSA9PT0gbGVmdDsgMiA9PT0gbWlkZGxlOyAzID09PSByaWdodFxuXHRcdGlmICggIWV2ZW50LndoaWNoICYmIGJ1dHRvbiAhPT0gdW5kZWZpbmVkICYmIHJtb3VzZUV2ZW50LnRlc3QoIGV2ZW50LnR5cGUgKSApIHtcblx0XHRcdGlmICggYnV0dG9uICYgMSApIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggYnV0dG9uICYgMiApIHtcblx0XHRcdFx0cmV0dXJuIDM7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggYnV0dG9uICYgNCApIHtcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC53aGljaDtcblx0fVxufSwgalF1ZXJ5LmV2ZW50LmFkZFByb3AgKTtcblxualF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIHR5cGUsIGRlbGVnYXRlVHlwZSApIHtcblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSA9IHtcblxuXHRcdC8vIFV0aWxpemUgbmF0aXZlIGV2ZW50IGlmIHBvc3NpYmxlIHNvIGJsdXIvZm9jdXMgc2VxdWVuY2UgaXMgY29ycmVjdFxuXHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2xhaW0gdGhlIGZpcnN0IGhhbmRsZXJcblx0XHRcdC8vIGRhdGFQcml2LnNldCggdGhpcywgXCJmb2N1c1wiLCAuLi4gKVxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImJsdXJcIiwgLi4uIClcblx0XHRcdGxldmVyYWdlTmF0aXZlKCB0aGlzLCB0eXBlLCBleHBlY3RTeW5jICk7XG5cblx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHR0cmlnZ2VyOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJcblx0XHRcdGxldmVyYWdlTmF0aXZlKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdC8vIFJldHVybiBub24tZmFsc2UgdG8gYWxsb3cgbm9ybWFsIGV2ZW50LXBhdGggcHJvcGFnYXRpb25cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRkZWxlZ2F0ZVR5cGU6IGRlbGVnYXRlVHlwZVxuXHR9O1xufSApO1xuXG4vLyBDcmVhdGUgbW91c2VlbnRlci9sZWF2ZSBldmVudHMgdXNpbmcgbW91c2VvdmVyL291dCBhbmQgZXZlbnQtdGltZSBjaGVja3Ncbi8vIHNvIHRoYXQgZXZlbnQgZGVsZWdhdGlvbiB3b3JrcyBpbiBqUXVlcnkuXG4vLyBEbyB0aGUgc2FtZSBmb3IgcG9pbnRlcmVudGVyL3BvaW50ZXJsZWF2ZSBhbmQgcG9pbnRlcm92ZXIvcG9pbnRlcm91dFxuLy9cbi8vIFN1cHBvcnQ6IFNhZmFyaSA3IG9ubHlcbi8vIFNhZmFyaSBzZW5kcyBtb3VzZWVudGVyIHRvbyBvZnRlbjsgc2VlOlxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDcwMjU4XG4vLyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBidWcgKGl0IGV4aXN0ZWQgaW4gb2xkZXIgQ2hyb21lIHZlcnNpb25zIGFzIHdlbGwpLlxualF1ZXJ5LmVhY2goIHtcblx0bW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIixcblx0bW91c2VsZWF2ZTogXCJtb3VzZW91dFwiLFxuXHRwb2ludGVyZW50ZXI6IFwicG9pbnRlcm92ZXJcIixcblx0cG9pbnRlcmxlYXZlOiBcInBvaW50ZXJvdXRcIlxufSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHtcblx0XHRkZWxlZ2F0ZVR5cGU6IGZpeCxcblx0XHRiaW5kVHlwZTogZml4LFxuXG5cdFx0aGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgcmV0LFxuXHRcdFx0XHR0YXJnZXQgPSB0aGlzLFxuXHRcdFx0XHRyZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCxcblx0XHRcdFx0aGFuZGxlT2JqID0gZXZlbnQuaGFuZGxlT2JqO1xuXG5cdFx0XHQvLyBGb3IgbW91c2VlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUgdGFyZ2V0LlxuXHRcdFx0Ly8gTkI6IE5vIHJlbGF0ZWRUYXJnZXQgaWYgdGhlIG1vdXNlIGxlZnQvZW50ZXJlZCB0aGUgYnJvd3NlciB3aW5kb3dcblx0XHRcdGlmICggIXJlbGF0ZWQgfHwgKCByZWxhdGVkICE9PSB0YXJnZXQgJiYgIWpRdWVyeS5jb250YWlucyggdGFyZ2V0LCByZWxhdGVkICkgKSApIHtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGhhbmRsZU9iai5vcmlnVHlwZTtcblx0XHRcdFx0cmV0ID0gaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRldmVudC50eXBlID0gZml4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdG9uZTogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAxICk7XG5cdH0sXG5cdG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZm4gKSB7XG5cdFx0dmFyIGhhbmRsZU9iaiwgdHlwZTtcblx0XHRpZiAoIHR5cGVzICYmIHR5cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhhbmRsZU9iaiApIHtcblxuXHRcdFx0Ly8gKCBldmVudCApICBkaXNwYXRjaGVkIGpRdWVyeS5FdmVudFxuXHRcdFx0aGFuZGxlT2JqID0gdHlwZXMuaGFuZGxlT2JqO1xuXHRcdFx0alF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZihcblx0XHRcdFx0aGFuZGxlT2JqLm5hbWVzcGFjZSA/XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlICsgXCIuXCIgKyBoYW5kbGVPYmoubmFtZXNwYWNlIDpcblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUsXG5cdFx0XHRcdGhhbmRsZU9iai5zZWxlY3Rvcixcblx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXJcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApXG5cdFx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0XHR0aGlzLm9mZiggdHlwZSwgc2VsZWN0b3IsIHR5cGVzWyB0eXBlIF0gKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcyBbLCBmbl0gKVxuXHRcdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRcdGZuID0gcmV0dXJuRmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxlY3RvciApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbnZhclxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSwgRWRnZSAxMiAtIDEzIG9ubHlcblx0Ly8gSW4gSUUvRWRnZSB1c2luZyByZWdleCBncm91cHMgaGVyZSBjYXVzZXMgc2V2ZXJlIHNsb3dkb3ducy5cblx0Ly8gU2VlIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvMTczNjUxMi9cblx0cm5vSW5uZXJodG1sID0gLzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksXG5cblx0Ly8gY2hlY2tlZD1cImNoZWNrZWRcIiBvciBjaGVja2VkXG5cdHJjaGVja2VkID0gL2NoZWNrZWRcXHMqKD86W149XXw9XFxzKi5jaGVja2VkLikvaSxcblx0cmNsZWFuU2NyaXB0ID0gL15cXHMqPCEoPzpcXFtDREFUQVxcW3wtLSl8KD86XFxdXFxdfC0tKT5cXHMqJC9nO1xuXG4vLyBQcmVmZXIgYSB0Ym9keSBvdmVyIGl0cyBwYXJlbnQgdGFibGUgZm9yIGNvbnRhaW5pbmcgbmV3IHJvd3NcbmZ1bmN0aW9uIG1hbmlwdWxhdGlvblRhcmdldCggZWxlbSwgY29udGVudCApIHtcblx0aWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0YWJsZVwiICkgJiZcblx0XHRub2RlTmFtZSggY29udGVudC5ub2RlVHlwZSAhPT0gMTEgPyBjb250ZW50IDogY29udGVudC5maXJzdENoaWxkLCBcInRyXCIgKSApIHtcblxuXHRcdHJldHVybiBqUXVlcnkoIGVsZW0gKS5jaGlsZHJlbiggXCJ0Ym9keVwiIClbIDAgXSB8fCBlbGVtO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbi8vIFJlcGxhY2UvcmVzdG9yZSB0aGUgdHlwZSBhdHRyaWJ1dGUgb2Ygc2NyaXB0IGVsZW1lbnRzIGZvciBzYWZlIERPTSBtYW5pcHVsYXRpb25cbmZ1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0gKSB7XG5cdGVsZW0udHlwZSA9ICggZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgIT09IG51bGwgKSArIFwiL1wiICsgZWxlbS50eXBlO1xuXHRyZXR1cm4gZWxlbTtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVTY3JpcHQoIGVsZW0gKSB7XG5cdGlmICggKCBlbGVtLnR5cGUgfHwgXCJcIiApLnNsaWNlKCAwLCA1ICkgPT09IFwidHJ1ZS9cIiApIHtcblx0XHRlbGVtLnR5cGUgPSBlbGVtLnR5cGUuc2xpY2UoIDUgKTtcblx0fSBlbHNlIHtcblx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggXCJ0eXBlXCIgKTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5mdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0ICkge1xuXHR2YXIgaSwgbCwgdHlwZSwgcGRhdGFPbGQsIHVkYXRhT2xkLCB1ZGF0YUN1ciwgZXZlbnRzO1xuXG5cdGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyAxLiBDb3B5IHByaXZhdGUgZGF0YTogZXZlbnRzLCBoYW5kbGVycywgZXRjLlxuXHRpZiAoIGRhdGFQcml2Lmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHBkYXRhT2xkID0gZGF0YVByaXYuZ2V0KCBzcmMgKTtcblx0XHRldmVudHMgPSBwZGF0YU9sZC5ldmVudHM7XG5cblx0XHRpZiAoIGV2ZW50cyApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZGVzdCwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblxuXHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUsIGV2ZW50c1sgdHlwZSBdWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIDIuIENvcHkgdXNlciBkYXRhXG5cdGlmICggZGF0YVVzZXIuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0dWRhdGFPbGQgPSBkYXRhVXNlci5hY2Nlc3MoIHNyYyApO1xuXHRcdHVkYXRhQ3VyID0galF1ZXJ5LmV4dGVuZCgge30sIHVkYXRhT2xkICk7XG5cblx0XHRkYXRhVXNlci5zZXQoIGRlc3QsIHVkYXRhQ3VyICk7XG5cdH1cbn1cblxuLy8gRml4IElFIGJ1Z3MsIHNlZSBzdXBwb3J0IHRlc3RzXG5mdW5jdGlvbiBmaXhJbnB1dCggc3JjLCBkZXN0ICkge1xuXHR2YXIgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0Ly8gRmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveCBvciByYWRpbyBidXR0b24uXG5cdGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiByY2hlY2thYmxlVHlwZS50ZXN0KCBzcmMudHlwZSApICkge1xuXHRcdGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkO1xuXG5cdC8vIEZhaWxzIHRvIHJldHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHN0YXRlIHdoZW4gY2xvbmluZyBvcHRpb25zXG5cdH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgfHwgbm9kZU5hbWUgPT09IFwidGV4dGFyZWFcIiApIHtcblx0XHRkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7XG5cdH1cbn1cblxuZnVuY3Rpb24gZG9tTWFuaXAoIGNvbGxlY3Rpb24sIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICkge1xuXG5cdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0YXJncyA9IGZsYXQoIGFyZ3MgKTtcblxuXHR2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBoYXNTY3JpcHRzLCBub2RlLCBkb2MsXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuXHRcdGlOb0Nsb25lID0gbCAtIDEsXG5cdFx0dmFsdWUgPSBhcmdzWyAwIF0sXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHQvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXRcblx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gfHxcblx0XHRcdCggbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzdXBwb3J0LmNoZWNrQ2xvbmUgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkge1xuXHRcdHJldHVybiBjb2xsZWN0aW9uLmVhY2goIGZ1bmN0aW9uKCBpbmRleCApIHtcblx0XHRcdHZhciBzZWxmID0gY29sbGVjdGlvbi5lcSggaW5kZXggKTtcblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHRhcmdzWyAwIF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpbmRleCwgc2VsZi5odG1sKCkgKTtcblx0XHRcdH1cblx0XHRcdGRvbU1hbmlwKCBzZWxmLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApO1xuXHRcdH0gKTtcblx0fVxuXG5cdGlmICggbCApIHtcblx0XHRmcmFnbWVudCA9IGJ1aWxkRnJhZ21lbnQoIGFyZ3MsIGNvbGxlY3Rpb25bIDAgXS5vd25lckRvY3VtZW50LCBmYWxzZSwgY29sbGVjdGlvbiwgaWdub3JlZCApO1xuXHRcdGZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdGlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7XG5cdFx0XHRmcmFnbWVudCA9IGZpcnN0O1xuXHRcdH1cblxuXHRcdC8vIFJlcXVpcmUgZWl0aGVyIG5ldyBjb250ZW50IG9yIGFuIGludGVyZXN0IGluIGlnbm9yZWQgZWxlbWVudHMgdG8gaW52b2tlIHRoZSBjYWxsYmFja1xuXHRcdGlmICggZmlyc3QgfHwgaWdub3JlZCApIHtcblx0XHRcdHNjcmlwdHMgPSBqUXVlcnkubWFwKCBnZXRBbGwoIGZyYWdtZW50LCBcInNjcmlwdFwiICksIGRpc2FibGVTY3JpcHQgKTtcblx0XHRcdGhhc1NjcmlwdHMgPSBzY3JpcHRzLmxlbmd0aDtcblxuXHRcdFx0Ly8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxhc3QgaXRlbVxuXHRcdFx0Ly8gaW5zdGVhZCBvZiB0aGUgZmlyc3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwXG5cdFx0XHQvLyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNlcnRhaW4gc2l0dWF0aW9ucyAoIzgwNzApLlxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRub2RlID0gZnJhZ21lbnQ7XG5cblx0XHRcdFx0aWYgKCBpICE9PSBpTm9DbG9uZSApIHtcblx0XHRcdFx0XHRub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7XG5cblx0XHRcdFx0XHQvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxsYmFjay5jYWxsKCBjb2xsZWN0aW9uWyBpIF0sIG5vZGUsIGkgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXHRcdFx0XHRkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50O1xuXG5cdFx0XHRcdC8vIFJlZW5hYmxlIHNjcmlwdHNcblx0XHRcdFx0alF1ZXJ5Lm1hcCggc2NyaXB0cywgcmVzdG9yZVNjcmlwdCApO1xuXG5cdFx0XHRcdC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb25cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHNjcmlwdHNbIGkgXTtcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCBcIlwiICkgJiZcblx0XHRcdFx0XHRcdCFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsIFwiZ2xvYmFsRXZhbFwiICkgJiZcblx0XHRcdFx0XHRcdGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggbm9kZS5zcmMgJiYgKCBub2RlLnR5cGUgfHwgXCJcIiApLnRvTG93ZXJDYXNlKCkgICE9PSBcIm1vZHVsZVwiICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5Ll9ldmFsVXJsICYmICFub2RlLm5vTW9kdWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5fZXZhbFVybCggbm9kZS5zcmMsIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5vbmNlOiBub2RlLm5vbmNlIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCBcIm5vbmNlXCIgKVxuXHRcdFx0XHRcdFx0XHRcdH0sIGRvYyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRET01FdmFsKCBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgXCJcIiApLCBub2RlLCBkb2MgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY29sbGVjdGlvbjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwga2VlcERhdGEgKSB7XG5cdHZhciBub2RlLFxuXHRcdG5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSxcblx0XHRpID0gMDtcblxuXHRmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0aWYgKCAha2VlcERhdGEgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggbm9kZSApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBub2RlLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRpZiAoIGtlZXBEYXRhICYmIGlzQXR0YWNoZWQoIG5vZGUgKSApIHtcblx0XHRcdFx0c2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdH1cblx0XHRcdG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggbm9kZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGh0bWxQcmVmaWx0ZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHJldHVybiBodG1sO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0dmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsXG5cdFx0XHRjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksXG5cdFx0XHRpblBhZ2UgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBGaXggSUUgY2xvbmluZyBpc3N1ZXNcblx0XHRpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmXG5cdFx0XHRcdCFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gV2UgZXNjaGV3IFNpenpsZSBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOiBodHRwczovL2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yXG5cdFx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7XG5cdFx0XHRzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApO1xuXG5cdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZVxuXHRcdGlmICggZGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRcdHNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7XG5cdFx0XHRcdGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7XG5cblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lLCBcInNjcmlwdFwiICk7XG5cdFx0aWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sIFwic2NyaXB0XCIgKSApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB0aGUgY2xvbmVkIHNldFxuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblx0XHR2YXIgZGF0YSwgZWxlbSwgdHlwZSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT09IHVuZGVmaW5lZDsgaSsrICkge1xuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRcdGlmICggKCBkYXRhID0gZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdGZvciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbFsgdHlwZSBdICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IgKTtcblx0fSxcblxuXHR0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkudGV4dCggdGhpcyApIDpcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0dGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0cHJlcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZSggZWxlbSwgdGFyZ2V0LmZpcnN0Q2hpbGQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YmVmb3JlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IHRoaXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblxuXHRcdFx0XHQvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2Rlc1xuXHRcdFx0XHRlbGVtLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7XG5cdFx0ZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzO1xuXG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdGwgPSB0aGlzLmxlbmd0aDtcblxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmlubmVySFRNTDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTFxuXHRcdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmXG5cdFx0XHRcdCF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHtcblxuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5odG1sUHJlZmlsdGVyKCB2YWx1ZSApO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdFx0ZWxlbSA9IHRoaXNbIGkgXSB8fCB7fTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXHRcdFx0XHRcdFx0XHRlbGVtLmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW0gPSAwO1xuXG5cdFx0XHRcdC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZFxuXHRcdFx0XHR9IGNhdGNoICggZSApIHt9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTtcblx0XHRcdH1cblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdHJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaWdub3JlZCA9IFtdO1xuXG5cdFx0Ly8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5nIGVhY2ggbm9uLWlnbm9yZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcblxuXHRcdFx0aWYgKCBqUXVlcnkuaW5BcnJheSggdGhpcywgaWdub3JlZCApIDwgMCApIHtcblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTtcblx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uXG5cdFx0fSwgaWdub3JlZCApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCB7XG5cdGFwcGVuZFRvOiBcImFwcGVuZFwiLFxuXHRwcmVwZW5kVG86IFwicHJlcGVuZFwiLFxuXHRpbnNlcnRCZWZvcmU6IFwiYmVmb3JlXCIsXG5cdGluc2VydEFmdGVyOiBcImFmdGVyXCIsXG5cdHJlcGxhY2VBbGw6IFwicmVwbGFjZVdpdGhcIlxufSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgZWxlbXMsXG5cdFx0XHRyZXQgPSBbXSxcblx0XHRcdGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSxcblx0XHRcdGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHtcblx0XHRcdGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVlICk7XG5cdFx0XHRqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0Ly8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0cHVzaC5hcHBseSggcmV0LCBlbGVtcy5nZXQoKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7XG5cdH07XG59ICk7XG52YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggXCJeKFwiICsgcG51bSArIFwiKSg/IXB4KVthLXolXSskXCIsIFwiaVwiICk7XG5cbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seSwgRmlyZWZveCA8PTMwICgjMTUwOTgsICMxNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cbnZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrICkge1xuXHR2YXIgcmV0LCBuYW1lLFxuXHRcdG9sZCA9IHt9O1xuXG5cdC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0b2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdO1xuXHR9XG5cblx0cmV0ID0gY2FsbGJhY2suY2FsbCggZWxlbSApO1xuXG5cdC8vIFJldmVydCB0aGUgb2xkIHZhbHVlc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufTtcblxuXG52YXIgcmJveFN0eWxlID0gbmV3IFJlZ0V4cCggY3NzRXhwYW5kLmpvaW4oIFwifFwiICksIFwiaVwiICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXG5cdC8vIEV4ZWN1dGluZyBib3RoIHBpeGVsUG9zaXRpb24gJiBib3hTaXppbmdSZWxpYWJsZSB0ZXN0cyByZXF1aXJlIG9ubHkgb25lIGxheW91dFxuXHQvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLlxuXHRmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHtcblxuXHRcdC8vIFRoaXMgaXMgYSBzaW5nbGV0b24sIHdlIG5lZWQgdG8gZXhlY3V0ZSBpdCBvbmx5IG9uY2Vcblx0XHRpZiAoICFkaXYgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDtcIiArXG5cdFx0XHRcIm1hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MFwiO1xuXHRcdGRpdi5zdHlsZS5jc3NUZXh0ID1cblx0XHRcdFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO1wiICtcblx0XHRcdFwibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDtcIiArXG5cdFx0XHRcIndpZHRoOjYwJTt0b3A6MSVcIjtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApLmFwcGVuZENoaWxkKCBkaXYgKTtcblxuXHRcdHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTtcblx0XHRwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSBcIjElXCI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9MyAtIDQ0XG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5tYXJnaW5MZWZ0ICkgPT09IDEyO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgU2FmYXJpIDw9OS4xIC0gMTAuMSwgaU9TIDw9Ny4wIC0gOS4zXG5cdFx0Ly8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0XG5cdFx0ZGl2LnN0eWxlLnJpZ2h0ID0gXCI2MCVcIjtcblx0XHRwaXhlbEJveFN0eWxlc1ZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUucmlnaHQgKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHRcdC8vIERldGVjdCBtaXNyZXBvcnRpbmcgb2YgY29udGVudCBkaW1lbnNpb25zIGZvciBib3gtc2l6aW5nOmJvcmRlci1ib3ggZWxlbWVudHNcblx0XHRib3hTaXppbmdSZWxpYWJsZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUud2lkdGggKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHQvLyBEZXRlY3Qgb3ZlcmZsb3c6c2Nyb2xsIHNjcmV3aW5lc3MgKGdoLTM2OTkpXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NjRcblx0XHQvLyBEb24ndCBnZXQgdHJpY2tlZCB3aGVuIHpvb20gYWZmZWN0cyBvZmZzZXRXaWR0aCAoZ2gtNDAyOSlcblx0XHRkaXYuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdFx0c2Nyb2xsYm94U2l6ZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2Lm9mZnNldFdpZHRoIC8gMyApID09PSAxMjtcblxuXHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7XG5cblx0XHQvLyBOdWxsaWZ5IHRoZSBkaXYgc28gaXQgd291bGRuJ3QgYmUgc3RvcmVkIGluIHRoZSBtZW1vcnkgYW5kXG5cdFx0Ly8gaXQgd2lsbCBhbHNvIGJlIGEgc2lnbiB0aGF0IGNoZWNrcyBhbHJlYWR5IHBlcmZvcm1lZFxuXHRcdGRpdiA9IG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiByb3VuZFBpeGVsTWVhc3VyZXMoIG1lYXN1cmUgKSB7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQoIHBhcnNlRmxvYXQoIG1lYXN1cmUgKSApO1xuXHR9XG5cblx0dmFyIHBpeGVsUG9zaXRpb25WYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLCBzY3JvbGxib3hTaXplVmFsLCBwaXhlbEJveFN0eWxlc1ZhbCxcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCwgcmVsaWFibGVNYXJnaW5MZWZ0VmFsLFxuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSxcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0Ly8gRmluaXNoIGVhcmx5IGluIGxpbWl0ZWQgKG5vbi1icm93c2VyKSBlbnZpcm9ubWVudHNcblx0aWYgKCAhZGl2LnN0eWxlICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gU3R5bGUgb2YgY2xvbmVkIGVsZW1lbnQgYWZmZWN0cyBzb3VyY2UgZWxlbWVudCBjbG9uZWQgKCM4OTA4KVxuXHRkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcImNvbnRlbnQtYm94XCI7XG5cdGRpdi5jbG9uZU5vZGUoIHRydWUgKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiXCI7XG5cdHN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlID0gZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID09PSBcImNvbnRlbnQtYm94XCI7XG5cblx0alF1ZXJ5LmV4dGVuZCggc3VwcG9ydCwge1xuXHRcdGJveFNpemluZ1JlbGlhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gYm94U2l6aW5nUmVsaWFibGVWYWw7XG5cdFx0fSxcblx0XHRwaXhlbEJveFN0eWxlczogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsQm94U3R5bGVzVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxQb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsUG9zaXRpb25WYWw7XG5cdFx0fSxcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiByZWxpYWJsZU1hcmdpbkxlZnRWYWw7XG5cdFx0fSxcblx0XHRzY3JvbGxib3hTaXplOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gc2Nyb2xsYm94U2l6ZVZhbDtcblx0XHR9LFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0XG5cdFx0Ly8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuXG5cdFx0Ly8gQmVoYXZpb3IgaW4gSUUgOSBpcyBtb3JlIHN1YnRsZSB0aGFuIGluIG5ld2VyIHZlcnNpb25zICYgaXQgcGFzc2VzXG5cdFx0Ly8gc29tZSB2ZXJzaW9ucyBvZiB0aGlzIHRlc3Q7IG1ha2Ugc3VyZSBub3QgdG8gbWFrZSBpdCBwYXNzIHRoZXJlIVxuXHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0YWJsZSwgdHIsIHRyQ2hpbGQsIHRyU3R5bGU7XG5cdFx0XHRpZiAoIHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJ0YWJsZVwiICk7XG5cdFx0XHRcdHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJ0clwiICk7XG5cdFx0XHRcdHRyQ2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0XHRcdFx0dGFibGUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweFwiO1xuXHRcdFx0XHR0ci5zdHlsZS5oZWlnaHQgPSBcIjFweFwiO1xuXHRcdFx0XHR0ckNoaWxkLnN0eWxlLmhlaWdodCA9IFwiOXB4XCI7XG5cblx0XHRcdFx0ZG9jdW1lbnRFbGVtZW50XG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0YWJsZSApXG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0ciApXG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0ckNoaWxkICk7XG5cblx0XHRcdFx0dHJTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCB0ciApO1xuXHRcdFx0XHRyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCA9IHBhcnNlSW50KCB0clN0eWxlLmhlaWdodCApID4gMztcblxuXHRcdFx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIHRhYmxlICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVUckRpbWVuc2lvbnNWYWw7XG5cdFx0fVxuXHR9ICk7XG59ICkoKTtcblxuXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xuXHR2YXIgd2lkdGgsIG1pbldpZHRoLCBtYXhXaWR0aCwgcmV0LFxuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA1MStcblx0XHQvLyBSZXRyaWV2aW5nIHN0eWxlIGJlZm9yZSBjb21wdXRlZCBzb21laG93XG5cdFx0Ly8gZml4ZXMgYW4gaXNzdWUgd2l0aCBnZXR0aW5nIHdyb25nIHZhbHVlc1xuXHRcdC8vIG9uIGRldGFjaGVkIGVsZW1lbnRzXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cblx0Ly8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBuZWVkZWQgZm9yOlxuXHQvLyAgIC5jc3MoJ2ZpbHRlcicpIChJRSA5IG9ubHksICMxMjUzNylcblx0Ly8gICAuY3NzKCctLWN1c3RvbVByb3BlcnR5KSAoIzMxNDQpXG5cdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0cmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07XG5cblx0XHRpZiAoIHJldCA9PT0gXCJcIiAmJiAhaXNBdHRhY2hlZCggZWxlbSApICkge1xuXHRcdFx0cmV0ID0galF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gQSB0cmlidXRlIHRvIHRoZSBcImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHNcIlxuXHRcdC8vIEFuZHJvaWQgQnJvd3NlciByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIHNvbWUgdmFsdWVzLFxuXHRcdC8vIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMuXG5cdFx0Ly8gVGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOlxuXHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5waXhlbEJveFN0eWxlcygpICYmIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiByYm94U3R5bGUudGVzdCggbmFtZSApICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzXG5cdFx0XHR3aWR0aCA9IHN0eWxlLndpZHRoO1xuXHRcdFx0bWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDtcblx0XHRcdG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7XG5cblx0XHRcdC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXRcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gc3R5bGUubWF4V2lkdGggPSBzdHlsZS53aWR0aCA9IHJldDtcblx0XHRcdHJldCA9IGNvbXB1dGVkLndpZHRoO1xuXG5cdFx0XHQvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzXG5cdFx0XHRzdHlsZS53aWR0aCA9IHdpZHRoO1xuXHRcdFx0c3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDtcblx0XHRcdHN0eWxlLm1heFdpZHRoID0gbWF4V2lkdGg7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID9cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHQvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLlxuXHRcdHJldCArIFwiXCIgOlxuXHRcdHJldDtcbn1cblxuXG5mdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7XG5cblx0Ly8gRGVmaW5lIHRoZSBob29rLCB3ZSdsbCBjaGVjayBvbiB0aGUgZmlyc3QgcnVuIGlmIGl0J3MgcmVhbGx5IG5lZWRlZC5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBjb25kaXRpb25GbigpICkge1xuXG5cdFx0XHRcdC8vIEhvb2sgbm90IG5lZWRlZCAob3IgaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGl0IGR1ZVxuXHRcdFx0XHQvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmdldDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi5cblx0XHRcdHJldHVybiAoIHRoaXMuZ2V0ID0gaG9va0ZuICkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0fTtcbn1cblxuXG52YXIgY3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiTW96XCIsIFwibXNcIiBdLFxuXHRlbXB0eVN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLnN0eWxlLFxuXHR2ZW5kb3JQcm9wcyA9IHt9O1xuXG4vLyBSZXR1cm4gYSB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHkgb3IgdW5kZWZpbmVkXG5mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHtcblxuXHQvLyBDaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzXG5cdHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksXG5cdFx0aSA9IGNzc1ByZWZpeGVzLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7XG5cdFx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUmV0dXJuIGEgcG90ZW50aWFsbHktbWFwcGVkIGpRdWVyeS5jc3NQcm9wcyBvciB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHlcbmZ1bmN0aW9uIGZpbmFsUHJvcE5hbWUoIG5hbWUgKSB7XG5cdHZhciBmaW5hbCA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdIHx8IHZlbmRvclByb3BzWyBuYW1lIF07XG5cblx0aWYgKCBmaW5hbCApIHtcblx0XHRyZXR1cm4gZmluYWw7XG5cdH1cblx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cblx0cmV0dXJuIHZlbmRvclByb3BzWyBuYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHx8IG5hbWU7XG59XG5cblxudmFyXG5cblx0Ly8gU3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZVxuXHQvLyBleGNlcHQgXCJ0YWJsZVwiLCBcInRhYmxlLWNlbGxcIiwgb3IgXCJ0YWJsZS1jYXB0aW9uXCJcblx0Ly8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5XG5cdHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxcblx0cmN1c3RvbVByb3AgPSAvXi0tLyxcblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXG5cdH07XG5cbmZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBfZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICkge1xuXG5cdC8vIEFueSByZWxhdGl2ZSAoKy8tKSB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW5cblx0Ly8gbm9ybWFsaXplZCBhdCB0aGlzIHBvaW50XG5cdHZhciBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApO1xuXHRyZXR1cm4gbWF0Y2hlcyA/XG5cblx0XHQvLyBHdWFyZCBhZ2FpbnN0IHVuZGVmaW5lZCBcInN1YnRyYWN0XCIsIGUuZy4sIHdoZW4gdXNlZCBhcyBpbiBjc3NIb29rc1xuXHRcdE1hdGgubWF4KCAwLCBtYXRjaGVzWyAyIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgOlxuXHRcdHZhbHVlO1xufVxuXG5mdW5jdGlvbiBib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgYm94LCBpc0JvcmRlckJveCwgc3R5bGVzLCBjb21wdXRlZFZhbCApIHtcblx0dmFyIGkgPSBkaW1lbnNpb24gPT09IFwid2lkdGhcIiA/IDEgOiAwLFxuXHRcdGV4dHJhID0gMCxcblx0XHRkZWx0YSA9IDA7XG5cblx0Ly8gQWRqdXN0bWVudCBtYXkgbm90IGJlIG5lY2Vzc2FyeVxuXHRpZiAoIGJveCA9PT0gKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApICkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgNDsgaSArPSAyICkge1xuXG5cdFx0Ly8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luXG5cdFx0aWYgKCBib3ggPT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBib3ggKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGNvbnRlbnQtYm94LCB3ZSdyZSBzZWVraW5nIFwicGFkZGluZ1wiIG9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIlxuXHRcdGlmICggIWlzQm9yZGVyQm94ICkge1xuXG5cdFx0XHQvLyBBZGQgcGFkZGluZ1xuXHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEZvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCIsIGFkZCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcInBhZGRpbmdcIiApIHtcblx0XHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gQnV0IHN0aWxsIGtlZXAgdHJhY2sgb2YgaXQgb3RoZXJ3aXNlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRleHRyYSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGJvcmRlci1ib3ggKGNvbnRlbnQgKyBwYWRkaW5nICsgYm9yZGVyKSwgd2UncmUgc2Vla2luZyBcImNvbnRlbnRcIiBvclxuXHRcdC8vIFwicGFkZGluZ1wiIG9yIFwibWFyZ2luXCJcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIsIHN1YnRyYWN0IHBhZGRpbmdcblx0XHRcdGlmICggYm94ID09PSBcImNvbnRlbnRcIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiBvciBcInBhZGRpbmdcIiwgc3VidHJhY3QgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBY2NvdW50IGZvciBwb3NpdGl2ZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyIHdoZW4gcmVxdWVzdGVkIGJ5IHByb3ZpZGluZyBjb21wdXRlZFZhbFxuXHRpZiAoICFpc0JvcmRlckJveCAmJiBjb21wdXRlZFZhbCA+PSAwICkge1xuXG5cdFx0Ly8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIGEgcm91bmRlZCBzdW0gb2YgY29udGVudCwgcGFkZGluZywgc2Nyb2xsIGd1dHRlciwgYW5kIGJvcmRlclxuXHRcdC8vIEFzc3VtaW5nIGludGVnZXIgc2Nyb2xsIGd1dHRlciwgc3VidHJhY3QgdGhlIHJlc3QgYW5kIHJvdW5kIGRvd25cblx0XHRkZWx0YSArPSBNYXRoLm1heCggMCwgTWF0aC5jZWlsKFxuXHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdGNvbXB1dGVkVmFsIC1cblx0XHRcdGRlbHRhIC1cblx0XHRcdGV4dHJhIC1cblx0XHRcdDAuNVxuXG5cdFx0Ly8gSWYgb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIHVua25vd24sIHRoZW4gd2UgY2FuJ3QgZGV0ZXJtaW5lIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXJcblx0XHQvLyBVc2UgYW4gZXhwbGljaXQgemVybyB0byBhdm9pZCBOYU4gKGdoLTM5NjQpXG5cdFx0KSApIHx8IDA7XG5cdH1cblxuXHRyZXR1cm4gZGVsdGE7XG59XG5cbmZ1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKSB7XG5cblx0Ly8gU3RhcnQgd2l0aCBjb21wdXRlZCBzdHlsZVxuXHR2YXIgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC00MzIyKS5cblx0XHQvLyBGYWtlIGNvbnRlbnQtYm94IHVudGlsIHdlIGtub3cgaXQncyBuZWVkZWQgdG8ga25vdyB0aGUgdHJ1ZSB2YWx1ZS5cblx0XHRib3hTaXppbmdOZWVkZWQgPSAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpIHx8IGV4dHJhLFxuXHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCxcblxuXHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgZGltZW5zaW9uLCBzdHlsZXMgKSxcblx0XHRvZmZzZXRQcm9wID0gXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKTtcblxuXHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0Ly8gUmV0dXJuIGEgY29uZm91bmRpbmcgbm9uLXBpeGVsIHZhbHVlIG9yIGZlaWduIGlnbm9yYW5jZSwgYXMgYXBwcm9wcmlhdGUuXG5cdGlmICggcm51bW5vbnB4LnRlc3QoIHZhbCApICkge1xuXHRcdGlmICggIWV4dHJhICkge1xuXHRcdFx0cmV0dXJuIHZhbDtcblx0XHR9XG5cdFx0dmFsID0gXCJhdXRvXCI7XG5cdH1cblxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIFVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIHdoZW4gYm94IHNpemluZyBpcyB1bnJlbGlhYmxlLlxuXHQvLyBJbiB0aG9zZSBjYXNlcywgdGhlIGNvbXB1dGVkIHZhbHVlIGNhbiBiZSB0cnVzdGVkIHRvIGJlIGJvcmRlci1ib3guXG5cdGlmICggKCAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpICYmIGlzQm9yZGVyQm94IHx8XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMCAtIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0XG5cdFx0Ly8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuXG5cdFx0Ly8gSW50ZXJlc3RpbmdseSwgaW4gc29tZSBjYXNlcyBJRSA5IGRvZXNuJ3Qgc3VmZmVyIGZyb20gdGhpcyBpc3N1ZS5cblx0XHQhc3VwcG9ydC5yZWxpYWJsZVRyRGltZW5zaW9ucygpICYmIG5vZGVOYW1lKCBlbGVtLCBcInRyXCIgKSB8fFxuXG5cdFx0Ly8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCB3aGVuIHZhbHVlIGlzIFwiYXV0b1wiXG5cdFx0Ly8gVGhpcyBoYXBwZW5zIGZvciBpbmxpbmUgZWxlbWVudHMgd2l0aCBubyBleHBsaWNpdCBzZXR0aW5nIChnaC0zNTcxKVxuXHRcdHZhbCA9PT0gXCJhdXRvXCIgfHxcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgLSA0LjMgb25seVxuXHRcdC8vIEFsc28gdXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3IgbWlzcmVwb3J0ZWQgaW5saW5lIGRpbWVuc2lvbnMgKGdoLTM2MDIpXG5cdFx0IXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiaW5saW5lXCIgKSAmJlxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHZpc2libGUgJiBjb25uZWN0ZWRcblx0XHRlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXG5cdFx0aXNCb3JkZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiO1xuXG5cdFx0Ly8gV2hlcmUgYXZhaWxhYmxlLCBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgYXBwcm94aW1hdGUgYm9yZGVyIGJveCBkaW1lbnNpb25zLlxuXHRcdC8vIFdoZXJlIG5vdCBhdmFpbGFibGUgKGUuZy4sIFNWRyksIGFzc3VtZSB1bnJlbGlhYmxlIGJveC1zaXppbmcgYW5kIGludGVycHJldCB0aGVcblx0XHQvLyByZXRyaWV2ZWQgdmFsdWUgYXMgYSBjb250ZW50IGJveCBkaW1lbnNpb24uXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IG9mZnNldFByb3AgaW4gZWxlbTtcblx0XHRpZiAoIHZhbHVlSXNCb3JkZXJCb3ggKSB7XG5cdFx0XHR2YWwgPSBlbGVtWyBvZmZzZXRQcm9wIF07XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIFwiXCIgYW5kIGF1dG9cblx0dmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwgMDtcblxuXHQvLyBBZGp1c3QgZm9yIHRoZSBlbGVtZW50J3MgYm94IG1vZGVsXG5cdHJldHVybiAoIHZhbCArXG5cdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0ZWxlbSxcblx0XHRcdGRpbWVuc2lvbixcblx0XHRcdGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSxcblx0XHRcdHZhbHVlSXNCb3JkZXJCb3gsXG5cdFx0XHRzdHlsZXMsXG5cblx0XHRcdC8vIFByb3ZpZGUgdGhlIGN1cnJlbnQgY29tcHV0ZWQgc2l6ZSB0byByZXF1ZXN0IHNjcm9sbCBndXR0ZXIgY2FsY3VsYXRpb24gKGdoLTM1ODkpXG5cdFx0XHR2YWxcblx0XHQpXG5cdCkgKyBcInB4XCI7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XG5cdGNzc0hvb2tzOiB7XG5cdFx0b3BhY2l0eToge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxuXHRcdFx0XHRcdHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIFwib3BhY2l0eVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJldCA9PT0gXCJcIiA/IFwiMVwiIDogcmV0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIFwicHhcIiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzXG5cdGNzc051bWJlcjoge1xuXHRcdFwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnRcIjogdHJ1ZSxcblx0XHRcImNvbHVtbkNvdW50XCI6IHRydWUsXG5cdFx0XCJmaWxsT3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwiZmxleEdyb3dcIjogdHJ1ZSxcblx0XHRcImZsZXhTaHJpbmtcIjogdHJ1ZSxcblx0XHRcImZvbnRXZWlnaHRcIjogdHJ1ZSxcblx0XHRcImdyaWRBcmVhXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uRW5kXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uU3RhcnRcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dFbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dTdGFydFwiOiB0cnVlLFxuXHRcdFwibGluZUhlaWdodFwiOiB0cnVlLFxuXHRcdFwib3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwib3JkZXJcIjogdHJ1ZSxcblx0XHRcIm9ycGhhbnNcIjogdHJ1ZSxcblx0XHRcIndpZG93c1wiOiB0cnVlLFxuXHRcdFwiekluZGV4XCI6IHRydWUsXG5cdFx0XCJ6b29tXCI6IHRydWVcblx0fSxcblxuXHQvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlXG5cdC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWVcblx0Y3NzUHJvcHM6IHt9LFxuXG5cdC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlXG5cdHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkge1xuXG5cdFx0Ly8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lXG5cdFx0dmFyIHJldCwgdHlwZSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLFxuXHRcdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gcXVlcnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVuIHVucHJlZml4ZWQgdmVyc2lvblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdFx0Ly8gQ29udmVydCBcIis9XCIgb3IgXCItPVwiIHRvIHJlbGF0aXZlIG51bWJlcnMgKCM3MzQ1KVxuXHRcdFx0aWYgKCB0eXBlID09PSBcInN0cmluZ1wiICYmICggcmV0ID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiYgcmV0WyAxIF0gKSB7XG5cdFx0XHRcdHZhbHVlID0gYWRqdXN0Q1NTKCBlbGVtLCBuYW1lLCByZXQgKTtcblxuXHRcdFx0XHQvLyBGaXhlcyBidWcgIzkyMzdcblx0XHRcdFx0dHlwZSA9IFwibnVtYmVyXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IG51bGwgYW5kIE5hTiB2YWx1ZXMgYXJlbid0IHNldCAoIzcxMTYpXG5cdFx0XHRpZiAoIHZhbHVlID09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCB0aGUgdW5pdCAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKVxuXHRcdFx0Ly8gVGhlIGlzQ3VzdG9tUHJvcCBjaGVjayBjYW4gYmUgcmVtb3ZlZCBpbiBqUXVlcnkgNC4wIHdoZW4gd2Ugb25seSBhdXRvLWFwcGVuZFxuXHRcdFx0Ly8gXCJweFwiIHRvIGEgZmV3IGhhcmRjb2RlZCB2YWx1ZXMuXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwibnVtYmVyXCIgJiYgIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0dmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlc1xuXHRcdFx0aWYgKCAhc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUgPT09IFwiXCIgJiYgbmFtZS5pbmRleE9mKCBcImJhY2tncm91bmRcIiApID09PSAwICkge1xuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gXCJpbmhlcml0XCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZVxuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8XG5cdFx0XHRcdCggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRpZiAoIGlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0XHRzdHlsZS5zZXRQcm9wZXJ0eSggbmFtZSwgdmFsdWUgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3Rcblx0XHRcdHJldHVybiBzdHlsZVsgbmFtZSBdO1xuXHRcdH1cblx0fSxcblxuXHRjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkge1xuXHRcdHZhciB2YWwsIG51bSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gbW9kaWZ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXRcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IFwibm9ybWFsXCIgdG8gY29tcHV0ZWQgdmFsdWVcblx0XHRpZiAoIHZhbCA9PT0gXCJub3JtYWxcIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHtcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xuXHRcdH1cblxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xuXHRcdGlmICggZXh0cmEgPT09IFwiXCIgfHwgZXh0cmEgKSB7XG5cdFx0XHRudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTtcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiaGVpZ2h0XCIsIFwid2lkdGhcIiBdLCBmdW5jdGlvbiggX2ksIGRpbWVuc2lvbiApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBkaW1lbnNpb24gXSA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbVxuXHRcdFx0XHQvLyBidXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdFxuXHRcdFx0XHRyZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgKSAmJlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrXG5cdFx0XHRcdFx0Ly8gVGFibGUgY29sdW1ucyBpbiBTYWZhcmkgaGF2ZSBub24temVybyBvZmZzZXRXaWR0aCAmIHplcm9cblx0XHRcdFx0XHQvLyBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB1bmxlc3MgZGlzcGxheSBpcyBjaGFuZ2VkLlxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdFx0XHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGEgZGlzY29ubmVjdGVkIG5vZGVcblx0XHRcdFx0XHQvLyBpbiBJRSB0aHJvd3MgYW4gZXJyb3IuXG5cdFx0XHRcdFx0KCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCB8fCAhZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCApID9cblx0XHRcdFx0XHRcdHN3YXAoIGVsZW0sIGNzc1Nob3csIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRcdGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIGV4dHJhICkge1xuXHRcdFx0dmFyIG1hdGNoZXMsXG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLFxuXG5cdFx0XHRcdC8vIE9ubHkgcmVhZCBzdHlsZXMucG9zaXRpb24gaWYgdGhlIHRlc3QgaGFzIGEgY2hhbmNlIHRvIGZhaWxcblx0XHRcdFx0Ly8gdG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdy5cblx0XHRcdFx0c2Nyb2xsYm94U2l6ZUJ1Z2d5ID0gIXN1cHBvcnQuc2Nyb2xsYm94U2l6ZSgpICYmXG5cdFx0XHRcdFx0c3R5bGVzLnBvc2l0aW9uID09PSBcImFic29sdXRlXCIsXG5cblx0XHRcdFx0Ly8gVG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdywgb25seSBmZXRjaCBib3hTaXppbmcgaWYgd2UgbmVlZCBpdCAoZ2gtMzk5MSlcblx0XHRcdFx0Ym94U2l6aW5nTmVlZGVkID0gc2Nyb2xsYm94U2l6ZUJ1Z2d5IHx8IGV4dHJhLFxuXHRcdFx0XHRpc0JvcmRlckJveCA9IGJveFNpemluZ05lZWRlZCAmJlxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0XHRcdHN1YnRyYWN0ID0gZXh0cmEgP1xuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudChcblx0XHRcdFx0XHRcdGVsZW0sXG5cdFx0XHRcdFx0XHRkaW1lbnNpb24sXG5cdFx0XHRcdFx0XHRleHRyYSxcblx0XHRcdFx0XHRcdGlzQm9yZGVyQm94LFxuXHRcdFx0XHRcdFx0c3R5bGVzXG5cdFx0XHRcdFx0KSA6XG5cdFx0XHRcdFx0MDtcblxuXHRcdFx0Ly8gQWNjb3VudCBmb3IgdW5yZWxpYWJsZSBib3JkZXItYm94IGRpbWVuc2lvbnMgYnkgY29tcGFyaW5nIG9mZnNldCogdG8gY29tcHV0ZWQgYW5kXG5cdFx0XHQvLyBmYWtpbmcgYSBjb250ZW50LWJveCB0byBnZXQgYm9yZGVyIGFuZCBwYWRkaW5nIChnaC0zNjk5KVxuXHRcdFx0aWYgKCBpc0JvcmRlckJveCAmJiBzY3JvbGxib3hTaXplQnVnZ3kgKSB7XG5cdFx0XHRcdHN1YnRyYWN0IC09IE1hdGguY2VpbChcblx0XHRcdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0XHRcdHBhcnNlRmxvYXQoIHN0eWxlc1sgZGltZW5zaW9uIF0gKSAtXG5cdFx0XHRcdFx0Ym94TW9kZWxBZGp1c3RtZW50KCBlbGVtLCBkaW1lbnNpb24sIFwiYm9yZGVyXCIsIGZhbHNlLCBzdHlsZXMgKSAtXG5cdFx0XHRcdFx0MC41XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgdG8gcGl4ZWxzIGlmIHZhbHVlIGFkanVzdG1lbnQgaXMgbmVlZGVkXG5cdFx0XHRpZiAoIHN1YnRyYWN0ICYmICggbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmXG5cdFx0XHRcdCggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApICE9PSBcInB4XCIgKSB7XG5cblx0XHRcdFx0ZWxlbS5zdHlsZVsgZGltZW5zaW9uIF0gPSB2YWx1ZTtcblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuY3NzKCBlbGVtLCBkaW1lbnNpb24gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKTtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5jc3NIb29rcy5tYXJnaW5MZWZ0ID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luTGVmdCxcblx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4gKCBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sIFwibWFyZ2luTGVmdFwiICkgKSB8fFxuXHRcdFx0XHRlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLVxuXHRcdFx0XHRcdHN3YXAoIGVsZW0sIHsgbWFyZ2luTGVmdDogMCB9LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cdFx0XHRcdFx0fSApXG5cdFx0XHRcdCkgKyBcInB4XCI7XG5cdFx0fVxuXHR9XG4pO1xuXG4vLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9wZXJ0aWVzXG5qUXVlcnkuZWFjaCgge1xuXHRtYXJnaW46IFwiXCIsXG5cdHBhZGRpbmc6IFwiXCIsXG5cdGJvcmRlcjogXCJXaWR0aFwiXG59LCBmdW5jdGlvbiggcHJlZml4LCBzdWZmaXggKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7XG5cdFx0ZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgaSA9IDAsXG5cdFx0XHRcdGV4cGFuZGVkID0ge30sXG5cblx0XHRcdFx0Ly8gQXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nXG5cdFx0XHRcdHBhcnRzID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUuc3BsaXQoIFwiIFwiICkgOiBbIHZhbHVlIF07XG5cblx0XHRcdGZvciAoIDsgaSA8IDQ7IGkrKyApIHtcblx0XHRcdFx0ZXhwYW5kZWRbIHByZWZpeCArIGNzc0V4cGFuZFsgaSBdICsgc3VmZml4IF0gPVxuXHRcdFx0XHRcdHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGV4cGFuZGVkO1xuXHRcdH1cblx0fTtcblxuXHRpZiAoIHByZWZpeCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdLnNldCA9IHNldFBvc2l0aXZlTnVtYmVyO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0Y3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0dmFyIHN0eWxlcywgbGVuLFxuXHRcdFx0XHRtYXAgPSB7fSxcblx0XHRcdFx0aSA9IDA7XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggbmFtZSApICkge1xuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKTtcblx0XHRcdFx0bGVuID0gbmFtZS5sZW5ndGg7XG5cblx0XHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0bWFwWyBuYW1lWyBpIF0gXSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWVbIGkgXSwgZmFsc2UsIHN0eWxlcyApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG1hcDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOlxuXHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7XG5cdFx0fSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH1cbn0gKTtcblxuXG5mdW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKSB7XG5cdHJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7XG59XG5qUXVlcnkuVHdlZW4gPSBUd2VlbjtcblxuVHdlZW4ucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogVHdlZW4sXG5cdGluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZywgdW5pdCApIHtcblx0XHR0aGlzLmVsZW0gPSBlbGVtO1xuXHRcdHRoaXMucHJvcCA9IHByb3A7XG5cdFx0dGhpcy5lYXNpbmcgPSBlYXNpbmcgfHwgalF1ZXJ5LmVhc2luZy5fZGVmYXVsdDtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuc3RhcnQgPSB0aGlzLm5vdyA9IHRoaXMuY3VyKCk7XG5cdFx0dGhpcy5lbmQgPSBlbmQ7XG5cdFx0dGhpcy51bml0ID0gdW5pdCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0fSxcblx0Y3VyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0cmV0dXJuIGhvb2tzICYmIGhvb2tzLmdldCA/XG5cdFx0XHRob29rcy5nZXQoIHRoaXMgKSA6XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KCB0aGlzICk7XG5cdH0sXG5cdHJ1bjogZnVuY3Rpb24oIHBlcmNlbnQgKSB7XG5cdFx0dmFyIGVhc2VkLFxuXHRcdFx0aG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0galF1ZXJ5LmVhc2luZ1sgdGhpcy5lYXNpbmcgXShcblx0XHRcdFx0cGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0gcGVyY2VudDtcblx0XHR9XG5cdFx0dGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhpcy5zdGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0O1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuc3RlcCApIHtcblx0XHRcdHRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnNldCApIHtcblx0XHRcdGhvb2tzLnNldCggdGhpcyApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KCB0aGlzICk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59O1xuXG5Ud2Vlbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGUgPSBUd2Vlbi5wcm90b3R5cGU7XG5cblR3ZWVuLnByb3BIb29rcyA9IHtcblx0X2RlZmF1bHQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRcdHZhciByZXN1bHQ7XG5cblx0XHRcdC8vIFVzZSBhIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGRpcmVjdGx5IHdoZW4gaXQgaXMgbm90IGEgRE9NIGVsZW1lbnQsXG5cdFx0XHQvLyBvciB3aGVuIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHN0eWxlIHByb3BlcnR5IHRoYXQgZXhpc3RzLlxuXHRcdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICE9PSAxIHx8XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSAhPSBudWxsICYmIHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVuLnByb3AgXSA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQYXNzaW5nIGFuIGVtcHR5IHN0cmluZyBhcyBhIDNyZCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2FsbHlcblx0XHRcdC8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmluZyBpZiB0aGUgcGFyc2UgZmFpbHMuXG5cdFx0XHQvLyBTaW1wbGUgdmFsdWVzIHN1Y2ggYXMgXCIxMHB4XCIgYXJlIHBhcnNlZCB0byBGbG9hdDtcblx0XHRcdC8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMgXCJyb3RhdGUoMXJhZClcIiBhcmUgcmV0dXJuZWQgYXMtaXMuXG5cdFx0XHRyZXN1bHQgPSBqUXVlcnkuY3NzKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCBcIlwiICk7XG5cblx0XHRcdC8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgXCJhdXRvXCIgYXJlIGNvbnZlcnRlZCB0byAwLlxuXHRcdFx0cmV0dXJuICFyZXN1bHQgfHwgcmVzdWx0ID09PSBcImF1dG9cIiA/IDAgOiByZXN1bHQ7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblxuXHRcdFx0Ly8gVXNlIHN0ZXAgaG9vayBmb3IgYmFjayBjb21wYXQuXG5cdFx0XHQvLyBVc2UgY3NzSG9vayBpZiBpdHMgdGhlcmUuXG5cdFx0XHQvLyBVc2UgLnN0eWxlIGlmIGF2YWlsYWJsZSBhbmQgdXNlIHBsYWluIHByb3BlcnRpZXMgd2hlcmUgYXZhaWxhYmxlLlxuXHRcdFx0aWYgKCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkge1xuXHRcdFx0XHRqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApO1xuXHRcdFx0fSBlbHNlIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cdFx0XHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gfHxcblx0XHRcdFx0XHR0d2Vlbi5lbGVtLnN0eWxlWyBmaW5hbFByb3BOYW1lKCB0d2Vlbi5wcm9wICkgXSAhPSBudWxsICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgdHdlZW4ubm93ICsgdHdlZW4udW5pdCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIFBhbmljIGJhc2VkIGFwcHJvYWNoIHRvIHNldHRpbmcgdGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmVhc2luZyA9IHtcblx0bGluZWFyOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gcDtcblx0fSxcblx0c3dpbmc6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7XG5cdH0sXG5cdF9kZWZhdWx0OiBcInN3aW5nXCJcbn07XG5cbmpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0O1xuXG4vLyBCYWNrIGNvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludFxualF1ZXJ5LmZ4LnN0ZXAgPSB7fTtcblxuXG5cblxudmFyXG5cdGZ4Tm93LCBpblByb2dyZXNzLFxuXHRyZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxcblx0cnJ1biA9IC9xdWV1ZUhvb2tzJC87XG5cbmZ1bmN0aW9uIHNjaGVkdWxlKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0aWYgKCBkb2N1bWVudC5oaWRkZW4gPT09IGZhbHNlICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKSB7XG5cdFx0XHR3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBzY2hlZHVsZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dCggc2NoZWR1bGUsIGpRdWVyeS5meC5pbnRlcnZhbCApO1xuXHRcdH1cblxuXHRcdGpRdWVyeS5meC50aWNrKCk7XG5cdH1cbn1cblxuLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseVxuZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRmeE5vdyA9IHVuZGVmaW5lZDtcblx0fSApO1xuXHRyZXR1cm4gKCBmeE5vdyA9IERhdGUubm93KCkgKTtcbn1cblxuLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb25cbmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7XG5cdHZhciB3aGljaCxcblx0XHRpID0gMCxcblx0XHRhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07XG5cblx0Ly8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLFxuXHQvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodFxuXHRpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDtcblx0Zm9yICggOyBpIDwgNDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkge1xuXHRcdHdoaWNoID0gY3NzRXhwYW5kWyBpIF07XG5cdFx0YXR0cnNbIFwibWFyZ2luXCIgKyB3aGljaCBdID0gYXR0cnNbIFwicGFkZGluZ1wiICsgd2hpY2ggXSA9IHR5cGU7XG5cdH1cblxuXHRpZiAoIGluY2x1ZGVXaWR0aCApIHtcblx0XHRhdHRycy5vcGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlO1xuXHR9XG5cblx0cmV0dXJuIGF0dHJzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFuaW1hdGlvbiApIHtcblx0dmFyIHR3ZWVuLFxuXHRcdGNvbGxlY3Rpb24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNbIFwiKlwiIF0gKSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHtcblxuXHRcdFx0Ly8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHlcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7XG5cdHZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCBob29rcywgb2xkZmlyZSwgcHJvcFR3ZWVuLCByZXN0b3JlRGlzcGxheSwgZGlzcGxheSxcblx0XHRpc0JveCA9IFwid2lkdGhcIiBpbiBwcm9wcyB8fCBcImhlaWdodFwiIGluIHByb3BzLFxuXHRcdGFuaW0gPSB0aGlzLFxuXHRcdG9yaWcgPSB7fSxcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGUsXG5cdFx0aGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSxcblx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJmeHNob3dcIiApO1xuXG5cdC8vIFF1ZXVlLXNraXBwaW5nIGFuaW1hdGlvbnMgaGlqYWNrIHRoZSBmeCBob29rc1xuXHRpZiAoICFvcHRzLnF1ZXVlICkge1xuXHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCBcImZ4XCIgKTtcblx0XHRpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7XG5cdFx0XHRob29rcy51bnF1ZXVlZCA9IDA7XG5cdFx0XHRvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7XG5cdFx0XHRcdFx0b2xkZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRob29rcy51bnF1ZXVlZCsrO1xuXG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhhbmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGNvbXBsZXRlc1xuXHRcdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRob29rcy51bnF1ZXVlZC0tO1xuXHRcdFx0XHRpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sIFwiZnhcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBEZXRlY3Qgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0Zm9yICggcHJvcCBpbiBwcm9wcyApIHtcblx0XHR2YWx1ZSA9IHByb3BzWyBwcm9wIF07XG5cdFx0aWYgKCByZnh0eXBlcy50ZXN0KCB2YWx1ZSApICkge1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBwcm9wIF07XG5cdFx0XHR0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09IFwidG9nZ2xlXCI7XG5cdFx0XHRpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/IFwiaGlkZVwiIDogXCJzaG93XCIgKSApIHtcblxuXHRcdFx0XHQvLyBQcmV0ZW5kIHRvIGJlIGhpZGRlbiBpZiB0aGlzIGlzIGEgXCJzaG93XCIgYW5kXG5cdFx0XHRcdC8vIHRoZXJlIGlzIHN0aWxsIGRhdGEgZnJvbSBhIHN0b3BwZWQgc2hvdy9oaWRlXG5cdFx0XHRcdGlmICggdmFsdWUgPT09IFwic2hvd1wiICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSB0cnVlO1xuXG5cdFx0XHRcdC8vIElnbm9yZSBhbGwgb3RoZXIgbm8tb3Agc2hvdy9oaWRlIGRhdGFcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b3JpZ1sgcHJvcCBdID0gZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBCYWlsIG91dCBpZiB0aGlzIGlzIGEgbm8tb3AgbGlrZSAuaGlkZSgpLmhpZGUoKVxuXHRwcm9wVHdlZW4gPSAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3BzICk7XG5cdGlmICggIXByb3BUd2VlbiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlc3RyaWN0IFwib3ZlcmZsb3dcIiBhbmQgXCJkaXNwbGF5XCIgc3R5bGVzIGR1cmluZyBib3ggYW5pbWF0aW9uc1xuXHRpZiAoIGlzQm94ICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0Ly8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdCBpbmZlciB0aGUgc2hvcnRoYW5kXG5cdFx0Ly8gZnJvbSBpZGVudGljYWxseS12YWx1ZWQgb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgYW5kIEVkZ2UganVzdCBtaXJyb3JzXG5cdFx0Ly8gdGhlIG92ZXJmbG93WCB2YWx1ZSB0aGVyZS5cblx0XHRvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTtcblxuXHRcdC8vIElkZW50aWZ5IGEgZGlzcGxheSB0eXBlLCBwcmVmZXJyaW5nIG9sZCBzaG93L2hpZGUgZGF0YSBvdmVyIHRoZSBDU1MgY2FzY2FkZVxuXHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVNob3cgJiYgZGF0YVNob3cuZGlzcGxheTtcblx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHR9XG5cdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgKSB7XG5cdFx0XHRcdGRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gR2V0IG5vbmVtcHR5IHZhbHVlKHMpIGJ5IHRlbXBvcmFyaWx5IGZvcmNpbmcgdmlzaWJpbGl0eVxuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXkgfHwgcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBbmltYXRlIGlubGluZSBlbGVtZW50cyBhcyBpbmxpbmUtYmxvY2tcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwiaW5saW5lXCIgfHwgZGlzcGxheSA9PT0gXCJpbmxpbmUtYmxvY2tcIiAmJiByZXN0b3JlRGlzcGxheSAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcImZsb2F0XCIgKSA9PT0gXCJub25lXCIgKSB7XG5cblx0XHRcdFx0Ly8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHB1cmUgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0XHRcdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdGRpc3BsYXkgPSBzdHlsZS5kaXNwbGF5O1xuXHRcdFx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkaXNwbGF5ID09PSBcIm5vbmVcIiA/IFwiXCIgOiBkaXNwbGF5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIG9wdHMub3ZlcmZsb3cgKSB7XG5cdFx0c3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEltcGxlbWVudCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRwcm9wVHdlZW4gPSBmYWxzZTtcblx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXG5cdFx0Ly8gR2VuZXJhbCBzaG93L2hpZGUgc2V0dXAgZm9yIHRoaXMgZWxlbWVudCBhbmltYXRpb25cblx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRpZiAoIGRhdGFTaG93ICkge1xuXHRcdFx0XHRpZiAoIFwiaGlkZGVuXCIgaW4gZGF0YVNob3cgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gZGF0YVNob3cuaGlkZGVuO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgXCJmeHNob3dcIiwgeyBkaXNwbGF5OiByZXN0b3JlRGlzcGxheSB9ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0b3JlIGhpZGRlbi92aXNpYmxlIGZvciB0b2dnbGUgc28gYC5zdG9wKCkudG9nZ2xlKClgIFwicmV2ZXJzZXNcIlxuXHRcdFx0aWYgKCB0b2dnbGUgKSB7XG5cdFx0XHRcdGRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNob3cgZWxlbWVudHMgYmVmb3JlIGFuaW1hdGluZyB0aGVtXG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRcdC8vIFRoZSBmaW5hbCBzdGVwIG9mIGEgXCJoaWRlXCIgYW5pbWF0aW9uIGlzIGFjdHVhbGx5IGhpZGluZyB0aGUgZWxlbWVudFxuXHRcdFx0XHRpZiAoICFoaWRkZW4gKSB7XG5cdFx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cdFx0XHRcdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Ly8gUGVyLXByb3BlcnR5IHNldHVwXG5cdFx0cHJvcFR3ZWVuID0gY3JlYXRlVHdlZW4oIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0gOiAwLCBwcm9wLCBhbmltICk7XG5cdFx0aWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7XG5cdFx0XHRkYXRhU2hvd1sgcHJvcCBdID0gcHJvcFR3ZWVuLnN0YXJ0O1xuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHByb3BUd2Vlbi5lbmQgPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRcdHByb3BUd2Vlbi5zdGFydCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkge1xuXHR2YXIgaW5kZXgsIG5hbWUsIGVhc2luZywgdmFsdWUsIGhvb2tzO1xuXG5cdC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sgcGFzc1xuXHRmb3IgKCBpbmRleCBpbiBwcm9wcyApIHtcblx0XHRuYW1lID0gY2FtZWxDYXNlKCBpbmRleCApO1xuXHRcdGVhc2luZyA9IHNwZWNpYWxFYXNpbmdbIG5hbWUgXTtcblx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdO1xuXHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdGVhc2luZyA9IHZhbHVlWyAxIF07XG5cdFx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdID0gdmFsdWVbIDAgXTtcblx0XHR9XG5cblx0XHRpZiAoIGluZGV4ICE9PSBuYW1lICkge1xuXHRcdFx0cHJvcHNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBpbmRleCBdO1xuXHRcdH1cblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07XG5cdFx0aWYgKCBob29rcyAmJiBcImV4cGFuZFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsdWUgPSBob29rcy5leHBhbmQoIHZhbHVlICk7XG5cdFx0XHRkZWxldGUgcHJvcHNbIG5hbWUgXTtcblxuXHRcdFx0Ly8gTm90IHF1aXRlICQuZXh0ZW5kLCB0aGlzIHdvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBrZXlzLlxuXHRcdFx0Ly8gUmV1c2luZyAnaW5kZXgnIGJlY2F1c2Ugd2UgaGF2ZSB0aGUgY29ycmVjdCBcIm5hbWVcIlxuXHRcdFx0Zm9yICggaW5kZXggaW4gdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggISggaW5kZXggaW4gcHJvcHMgKSApIHtcblx0XHRcdFx0XHRwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyBpbmRleCBdO1xuXHRcdFx0XHRcdHNwZWNpYWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3BlY2lhbEVhc2luZ1sgbmFtZSBdID0gZWFzaW5nO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBBbmltYXRpb24oIGVsZW0sIHByb3BlcnRpZXMsIG9wdGlvbnMgKSB7XG5cdHZhciByZXN1bHQsXG5cdFx0c3RvcHBlZCxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gQW5pbWF0aW9uLnByZWZpbHRlcnMubGVuZ3RoLFxuXHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRG9uJ3QgbWF0Y2ggZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNlbGVjdG9yXG5cdFx0XHRkZWxldGUgdGljay5lbGVtO1xuXHRcdH0gKSxcblx0XHR0aWNrID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHZhciBjdXJyZW50VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRcdHJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSxcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDIuMyBvbmx5XG5cdFx0XHRcdC8vIEFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVzIHRvIHVzZSBgMSAtICggMC41IHx8IDAgKWAgKCMxMjQ5Nylcblx0XHRcdFx0dGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLFxuXHRcdFx0XHRwZXJjZW50ID0gMSAtIHRlbXAsXG5cdFx0XHRcdGluZGV4ID0gMCxcblx0XHRcdFx0bGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7XG5cblx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSApO1xuXG5cdFx0XHQvLyBJZiB0aGVyZSdzIG1vcmUgdG8gZG8sIHlpZWxkXG5cdFx0XHRpZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHtcblx0XHRcdFx0cmV0dXJuIHJlbWFpbmluZztcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyB3YXMgYW4gZW1wdHkgYW5pbWF0aW9uLCBzeW50aGVzaXplIGEgZmluYWwgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uXG5cdFx0XHRpZiAoICFsZW5ndGggKSB7XG5cdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVzb2x2ZSB0aGUgYW5pbWF0aW9uIGFuZCByZXBvcnQgaXRzIGNvbmNsdXNpb25cblx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBdICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9taXNlKCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0cHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksXG5cdFx0XHRvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7XG5cdFx0XHRcdHNwZWNpYWxFYXNpbmc6IHt9LFxuXHRcdFx0XHRlYXNpbmc6IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHRcblx0XHRcdH0sIG9wdGlvbnMgKSxcblx0XHRcdG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcyxcblx0XHRcdG9yaWdpbmFsT3B0aW9uczogb3B0aW9ucyxcblx0XHRcdHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLFxuXHRcdFx0dHdlZW5zOiBbXSxcblx0XHRcdGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkge1xuXHRcdFx0XHR2YXIgdHdlZW4gPSBqUXVlcnkuVHdlZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBwcm9wLCBlbmQsXG5cdFx0XHRcdFx0XHRhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nWyBwcm9wIF0gfHwgYW5pbWF0aW9uLm9wdHMuZWFzaW5nICk7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnMucHVzaCggdHdlZW4gKTtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdFx0fSxcblx0XHRcdHN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkge1xuXHRcdFx0XHR2YXIgaW5kZXggPSAwLFxuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zXG5cdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBwYXJ0XG5cdFx0XHRcdFx0bGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoIDogMDtcblx0XHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0b3BwZWQgPSB0cnVlO1xuXHRcdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXNvbHZlIHdoZW4gd2UgcGxheWVkIHRoZSBsYXN0IGZyYW1lOyBvdGhlcndpc2UsIHJlamVjdFxuXHRcdFx0XHRpZiAoIGdvdG9FbmQgKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdH0gKSxcblx0XHRwcm9wcyA9IGFuaW1hdGlvbi5wcm9wcztcblxuXHRwcm9wRmlsdGVyKCBwcm9wcywgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZyApO1xuXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0cmVzdWx0ID0gQW5pbWF0aW9uLnByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9wcywgYW5pbWF0aW9uLm9wdHMgKTtcblx0XHRpZiAoIHJlc3VsdCApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggcmVzdWx0LnN0b3AgKSApIHtcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCBhbmltYXRpb24uZWxlbSwgYW5pbWF0aW9uLm9wdHMucXVldWUgKS5zdG9wID1cblx0XHRcdFx0XHRyZXN1bHQuc3RvcC5iaW5kKCByZXN1bHQgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHR9XG5cblx0alF1ZXJ5Lm1hcCggcHJvcHMsIGNyZWF0ZVR3ZWVuLCBhbmltYXRpb24gKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7XG5cdFx0YW5pbWF0aW9uLm9wdHMuc3RhcnQuY2FsbCggZWxlbSwgYW5pbWF0aW9uICk7XG5cdH1cblxuXHQvLyBBdHRhY2ggY2FsbGJhY2tzIGZyb20gb3B0aW9uc1xuXHRhbmltYXRpb25cblx0XHQucHJvZ3Jlc3MoIGFuaW1hdGlvbi5vcHRzLnByb2dyZXNzIClcblx0XHQuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKVxuXHRcdC5mYWlsKCBhbmltYXRpb24ub3B0cy5mYWlsIClcblx0XHQuYWx3YXlzKCBhbmltYXRpb24ub3B0cy5hbHdheXMgKTtcblxuXHRqUXVlcnkuZngudGltZXIoXG5cdFx0alF1ZXJ5LmV4dGVuZCggdGljaywge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdGFuaW06IGFuaW1hdGlvbixcblx0XHRcdHF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1ZVxuXHRcdH0gKVxuXHQpO1xuXG5cdHJldHVybiBhbmltYXRpb247XG59XG5cbmpRdWVyeS5BbmltYXRpb24gPSBqUXVlcnkuZXh0ZW5kKCBBbmltYXRpb24sIHtcblxuXHR0d2VlbmVyczoge1xuXHRcdFwiKlwiOiBbIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHtcblx0XHRcdHZhciB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICk7XG5cdFx0XHRhZGp1c3RDU1MoIHR3ZWVuLmVsZW0sIHByb3AsIHJjc3NOdW0uZXhlYyggdmFsdWUgKSwgdHdlZW4gKTtcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9IF1cblx0fSxcblxuXHR0d2VlbmVyOiBmdW5jdGlvbiggcHJvcHMsIGNhbGxiYWNrICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggcHJvcHMgKSApIHtcblx0XHRcdGNhbGxiYWNrID0gcHJvcHM7XG5cdFx0XHRwcm9wcyA9IFsgXCIqXCIgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cHJvcHMgPSBwcm9wcy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXHRcdH1cblxuXHRcdHZhciBwcm9wLFxuXHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0bGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdHByb3AgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdID0gQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW107XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH1cblx0fSxcblxuXHRwcmVmaWx0ZXJzOiBbIGRlZmF1bHRQcmVmaWx0ZXIgXSxcblxuXHRwcmVmaWx0ZXI6IGZ1bmN0aW9uKCBjYWxsYmFjaywgcHJlcGVuZCApIHtcblx0XHRpZiAoIHByZXBlbmQgKSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy5wdXNoKCBjYWxsYmFjayApO1xuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7XG5cdHZhciBvcHQgPSBzcGVlZCAmJiB0eXBlb2Ygc3BlZWQgPT09IFwib2JqZWN0XCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHtcblx0XHRjb21wbGV0ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fFxuXHRcdFx0aXNGdW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCxcblx0XHRkdXJhdGlvbjogc3BlZWQsXG5cdFx0ZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFpc0Z1bmN0aW9uKCBlYXNpbmcgKSAmJiBlYXNpbmdcblx0fTtcblxuXHQvLyBHbyB0byB0aGUgZW5kIHN0YXRlIGlmIGZ4IGFyZSBvZmZcblx0aWYgKCBqUXVlcnkuZngub2ZmICkge1xuXHRcdG9wdC5kdXJhdGlvbiA9IDA7XG5cblx0fSBlbHNlIHtcblx0XHRpZiAoIHR5cGVvZiBvcHQuZHVyYXRpb24gIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRpZiAoIG9wdC5kdXJhdGlvbiBpbiBqUXVlcnkuZnguc3BlZWRzICkge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiBcImZ4XCJcblx0aWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7XG5cdFx0b3B0LnF1ZXVlID0gXCJmeFwiO1xuXHR9XG5cblx0Ly8gUXVldWVpbmdcblx0b3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTtcblxuXHRvcHQuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHtcblx0XHRcdG9wdC5vbGQuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0LnF1ZXVlICkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIG9wdC5xdWV1ZSApO1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gb3B0O1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwgdG8sIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cblx0XHQvLyBTaG93IGFueSBoaWRkZW4gZWxlbWVudHMgYWZ0ZXIgc2V0dGluZyBvcGFjaXR5IHRvIDBcblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuV2l0aGluVHJlZSApLmNzcyggXCJvcGFjaXR5XCIsIDAgKS5zaG93KClcblxuXHRcdFx0Ly8gQW5pbWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkXG5cdFx0XHQuZW5kKCkuYW5pbWF0ZSggeyBvcGFjaXR5OiB0byB9LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9LFxuXHRhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGVtcHR5ID0galF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSxcblx0XHRcdG9wdGFsbCA9IGpRdWVyeS5zcGVlZCggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSxcblx0XHRcdGRvQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gT3BlcmF0ZSBvbiBhIGNvcHkgb2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5nIHdvbid0IGJlIGxvc3Rcblx0XHRcdFx0dmFyIGFuaW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApO1xuXG5cdFx0XHRcdC8vIEVtcHR5IGFuaW1hdGlvbnMsIG9yIGZpbmlzaGluZyByZXNvbHZlcyBpbW1lZGlhdGVseVxuXHRcdFx0XHRpZiAoIGVtcHR5IHx8IGRhdGFQcml2LmdldCggdGhpcywgXCJmaW5pc2hcIiApICkge1xuXHRcdFx0XHRcdGFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0ZG9BbmltYXRpb24uZmluaXNoID0gZG9BbmltYXRpb247XG5cblx0XHRyZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/XG5cdFx0XHR0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOlxuXHRcdFx0dGhpcy5xdWV1ZSggb3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApO1xuXHR9LFxuXHRzdG9wOiBmdW5jdGlvbiggdHlwZSwgY2xlYXJRdWV1ZSwgZ290b0VuZCApIHtcblx0XHR2YXIgc3RvcFF1ZXVlID0gZnVuY3Rpb24oIGhvb2tzICkge1xuXHRcdFx0dmFyIHN0b3AgPSBob29rcy5zdG9wO1xuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRzdG9wKCBnb3RvRW5kICk7XG5cdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRnb3RvRW5kID0gY2xlYXJRdWV1ZTtcblx0XHRcdGNsZWFyUXVldWUgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBjbGVhclF1ZXVlICkge1xuXHRcdFx0dGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGVxdWV1ZSA9IHRydWUsXG5cdFx0XHRcdGluZGV4ID0gdHlwZSAhPSBudWxsICYmIHR5cGUgKyBcInF1ZXVlSG9va3NcIixcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApO1xuXG5cdFx0XHRpZiAoIGluZGV4ICkge1xuXHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICkge1xuXHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKCBpbmRleCBpbiBkYXRhICkge1xuXHRcdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBpbmRleCApICkge1xuXHRcdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiZcblx0XHRcdFx0XHQoIHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSApIHtcblxuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTtcblx0XHRcdFx0XHRkZXF1ZXVlID0gZmFsc2U7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkLlxuXHRcdFx0Ly8gVGltZXJzIGN1cnJlbnRseSB3aWxsIGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJhY2tzLCB3aGljaFxuXHRcdFx0Ly8gd2lsbCBkZXF1ZXVlIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kLlxuXHRcdFx0aWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblx0ZmluaXNoOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRpZiAoIHR5cGUgIT09IGZhbHNlICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpbmRleCxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApLFxuXHRcdFx0XHRxdWV1ZSA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlXCIgXSxcblx0XHRcdFx0aG9va3MgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgXSxcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0bGVuZ3RoID0gcXVldWUgPyBxdWV1ZS5sZW5ndGggOiAwO1xuXG5cdFx0XHQvLyBFbmFibGUgZmluaXNoaW5nIGZsYWcgb24gcHJpdmF0ZSBkYXRhXG5cdFx0XHRkYXRhLmZpbmlzaCA9IHRydWU7XG5cblx0XHRcdC8vIEVtcHR5IHRoZSBxdWV1ZSBmaXJzdFxuXHRcdFx0alF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBbXSApO1xuXG5cdFx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnN0b3AgKSB7XG5cdFx0XHRcdGhvb2tzLnN0b3AuY2FsbCggdGhpcywgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYWN0aXZlIGFuaW1hdGlvbnMsIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7XG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFuaW1hdGlvbnMgaW4gdGhlIG9sZCBxdWV1ZSBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGlmICggcXVldWVbIGluZGV4IF0gJiYgcXVldWVbIGluZGV4IF0uZmluaXNoICkge1xuXHRcdFx0XHRcdHF1ZXVlWyBpbmRleCBdLmZpbmlzaC5jYWxsKCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVHVybiBvZmYgZmluaXNoaW5nIGZsYWdcblx0XHRcdGRlbGV0ZSBkYXRhLmZpbmlzaDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJ0b2dnbGVcIiwgXCJzaG93XCIsIFwiaGlkZVwiIF0sIGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0dmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gXCJib29sZWFuXCIgP1xuXHRcdFx0Y3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDpcblx0XHRcdHRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxuLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9uc1xualF1ZXJ5LmVhY2goIHtcblx0c2xpZGVEb3duOiBnZW5GeCggXCJzaG93XCIgKSxcblx0c2xpZGVVcDogZ2VuRngoIFwiaGlkZVwiICksXG5cdHNsaWRlVG9nZ2xlOiBnZW5GeCggXCJ0b2dnbGVcIiApLFxuXHRmYWRlSW46IHsgb3BhY2l0eTogXCJzaG93XCIgfSxcblx0ZmFkZU91dDogeyBvcGFjaXR5OiBcImhpZGVcIiB9LFxuXHRmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6IFwidG9nZ2xlXCIgfVxufSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LnRpbWVycyA9IFtdO1xualF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVyLFxuXHRcdGkgPSAwLFxuXHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnM7XG5cblx0ZnhOb3cgPSBEYXRlLm5vdygpO1xuXG5cdGZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApIHtcblx0XHR0aW1lciA9IHRpbWVyc1sgaSBdO1xuXG5cdFx0Ly8gUnVuIHRoZSB0aW1lciBhbmQgc2FmZWx5IHJlbW92ZSBpdCB3aGVuIGRvbmUgKGFsbG93aW5nIGZvciBleHRlcm5hbCByZW1vdmFsKVxuXHRcdGlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkge1xuXHRcdFx0dGltZXJzLnNwbGljZSggaS0tLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCAhdGltZXJzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZnguc3RvcCgpO1xuXHR9XG5cdGZ4Tm93ID0gdW5kZWZpbmVkO1xufTtcblxualF1ZXJ5LmZ4LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkge1xuXHRqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7XG5cdGpRdWVyeS5meC5zdGFydCgpO1xufTtcblxualF1ZXJ5LmZ4LmludGVydmFsID0gMTM7XG5qUXVlcnkuZnguc3RhcnQgPSBmdW5jdGlvbigpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGluUHJvZ3Jlc3MgPSB0cnVlO1xuXHRzY2hlZHVsZSgpO1xufTtcblxualF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHtcblx0aW5Qcm9ncmVzcyA9IG51bGw7XG59O1xuXG5qUXVlcnkuZnguc3BlZWRzID0ge1xuXHRzbG93OiA2MDAsXG5cdGZhc3Q6IDIwMCxcblxuXHQvLyBEZWZhdWx0IHNwZWVkXG5cdF9kZWZhdWx0OiA0MDBcbn07XG5cblxuLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLlxuLy8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTAwMzI0MDE0NzQ3L2h0dHA6Ly9ibGluZHNpZ25hbHMuY29tL2luZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS9cbmpRdWVyeS5mbi5kZWxheSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkge1xuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xuXHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcblx0XHR2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdH07XG5cdH0gKTtcbn07XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XG5cblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4zIG9ubHlcblx0Ly8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgXCJvblwiXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpb1xuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xuXHRpbnB1dC50eXBlID0gXCJyYWRpb1wiO1xuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG59ICkoKTtcblxuXG52YXIgYm9vbEhvb2ssXG5cdGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXR0cmlidXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuXHRcdC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWRcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0KCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWRcblx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG5cdH0sXG5cblx0YXR0ckhvb2tzOiB7XG5cdFx0dHlwZToge1xuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXG5cdFx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHZhciB2YWwgPSBlbGVtLnZhbHVlO1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRcdGVsZW0udmFsdWUgPSB2YWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0dmFyIG5hbWUsXG5cdFx0XHRpID0gMCxcblxuXHRcdFx0Ly8gQXR0cmlidXRlIG5hbWVzIGNhbiBjb250YWluIG5vbi1IVE1MIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuXHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXG5cdFx0aWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkge1xuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2Vcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59O1xuXG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHR2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7XG5cblx0YXR0ckhhbmRsZVsgbmFtZSBdID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciByZXQsIGhhbmRsZSxcblx0XHRcdGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRpZiAoICFpc1hNTCApIHtcblxuXHRcdFx0Ly8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlclxuXHRcdFx0aGFuZGxlID0gYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gcmV0O1xuXHRcdFx0cmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgP1xuXHRcdFx0XHRsb3dlcmNhc2VOYW1lIDpcblx0XHRcdFx0bnVsbDtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IGhhbmRsZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcbn0gKTtcblxuXG5cblxudmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyY2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3Ncblx0XHRcdG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtWyBuYW1lIF07XG5cdH0sXG5cblx0cHJvcEhvb2tzOiB7XG5cdFx0dGFiSW5kZXg6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdFx0XHQvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGVcblx0XHRcdFx0Ly8gY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0XG5cdFx0XHRcdC8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE0MTExNjIzMzM0Ny9odHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0L1xuXHRcdFx0XHQvLyBVc2UgcHJvcGVyIGF0dHJpYnV0ZSByZXRyaWV2YWwoIzEyMDcyKVxuXHRcdFx0XHR2YXIgdGFiaW5kZXggPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInRhYmluZGV4XCIgKTtcblxuXHRcdFx0XHRpZiAoIHRhYmluZGV4ICkge1xuXHRcdFx0XHRcdHJldHVybiBwYXJzZUludCggdGFiaW5kZXgsIDEwICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHxcblx0XHRcdFx0XHRyY2xpY2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJlxuXHRcdFx0XHRcdGVsZW0uaHJlZlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cHJvcEZpeDoge1xuXHRcdFwiZm9yXCI6IFwiaHRtbEZvclwiLFxuXHRcdFwiY2xhc3NcIjogXCJjbGFzc05hbWVcIlxuXHR9XG59ICk7XG5cbi8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuLy8gQWNjZXNzaW5nIHRoZSBzZWxlY3RlZEluZGV4IHByb3BlcnR5XG4vLyBmb3JjZXMgdGhlIGJyb3dzZXIgdG8gcmVzcGVjdCBzZXR0aW5nIHNlbGVjdGVkXG4vLyBvbiB0aGUgb3B0aW9uXG4vLyBUaGUgZ2V0dGVyIGVuc3VyZXMgYSBkZWZhdWx0IG9wdGlvbiBpcyBzZWxlY3RlZFxuLy8gd2hlbiBpbiBhbiBvcHRncm91cFxuLy8gZXNsaW50IHJ1bGUgXCJuby11bnVzZWQtZXhwcmVzc2lvbnNcIiBpcyBkaXNhYmxlZCBmb3IgdGhpcyBjb2RlXG4vLyBzaW5jZSBpdCBjb25zaWRlcnMgc3VjaCBhY2Nlc3Npb25zIG5vb3BcbmlmICggIXN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7XG5cdGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRwYXJlbnQuc2VsZWN0ZWRJbmRleDtcblxuXHRcdFx0XHRpZiAoIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbmpRdWVyeS5lYWNoKCBbXG5cdFwidGFiSW5kZXhcIixcblx0XCJyZWFkT25seVwiLFxuXHRcIm1heExlbmd0aFwiLFxuXHRcImNlbGxTcGFjaW5nXCIsXG5cdFwiY2VsbFBhZGRpbmdcIixcblx0XCJyb3dTcGFuXCIsXG5cdFwiY29sU3BhblwiLFxuXHRcInVzZU1hcFwiLFxuXHRcImZyYW1lQm9yZGVyXCIsXG5cdFwiY29udGVudEVkaXRhYmxlXCJcbl0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkucHJvcEZpeFsgdGhpcy50b0xvd2VyQ2FzZSgpIF0gPSB0aGlzO1xufSApO1xuXG5cblxuXG5cdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlIGFjY29yZGluZyB0byBIVE1MIHNwZWNcblx0Ly8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWFuZC1jb2xsYXBzZS1hc2NpaS13aGl0ZXNwYWNlXG5cdGZ1bmN0aW9uIHN0cmlwQW5kQ29sbGFwc2UoIHZhbHVlICkge1xuXHRcdHZhciB0b2tlbnMgPSB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHRcdHJldHVybiB0b2tlbnMuam9pbiggXCIgXCIgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIGdldENsYXNzKCBlbGVtICkge1xuXHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiApIHx8IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApIHtcblx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0fVxuXHRyZXR1cm4gW107XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NlcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc2VzLmxlbmd0aCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApO1xuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPCAwICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgKz0gY2xhenogKyBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hdHRyKCBcImNsYXNzXCIsIFwiXCIgKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cblx0XHRcdFx0Ly8gVGhpcyBleHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkgKHNlZSBhZGRDbGFzcylcblx0XHRcdFx0Y3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlICphbGwqIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdFx0Y3VyID0gY3VyLnJlcGxhY2UoIFwiIFwiICsgY2xhenogKyBcIiBcIiwgXCIgXCIgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkge1xuXHRcdHZhciB0eXBlID0gdHlwZW9mIHZhbHVlLFxuXHRcdFx0aXNWYWxpZFZhbHVlID0gdHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09IFwiYm9vbGVhblwiICYmIGlzVmFsaWRWYWx1ZSApIHtcblx0XHRcdHJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcyhcblx0XHRcdFx0XHR2YWx1ZS5jYWxsKCB0aGlzLCBpLCBnZXRDbGFzcyggdGhpcyApLCBzdGF0ZVZhbCApLFxuXHRcdFx0XHRcdHN0YXRlVmFsXG5cdFx0XHRcdCk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgY2xhc3NOYW1lLCBpLCBzZWxmLCBjbGFzc05hbWVzO1xuXG5cdFx0XHRpZiAoIGlzVmFsaWRWYWx1ZSApIHtcblxuXHRcdFx0XHQvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lc1xuXHRcdFx0XHRpID0gMDtcblx0XHRcdFx0c2VsZiA9IGpRdWVyeSggdGhpcyApO1xuXHRcdFx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRcdFx0d2hpbGUgKCAoIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0XHQvLyBDaGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3Rcblx0XHRcdFx0XHRpZiAoIHNlbGYuaGFzQ2xhc3MoIGNsYXNzTmFtZSApICkge1xuXHRcdFx0XHRcdFx0c2VsZi5yZW1vdmVDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZVxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdFx0Y2xhc3NOYW1lID0gZ2V0Q2xhc3MoIHRoaXMgKTtcblx0XHRcdFx0aWYgKCBjbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBjbGFzc05hbWUgaWYgc2V0XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiwgY2xhc3NOYW1lICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCBgZmFsc2VgLFxuXHRcdFx0XHQvLyB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgY2xhc3NuYW1lIChpZiB0aGVyZSB3YXMgb25lLCB0aGUgYWJvdmUgc2F2ZWQgaXQpLlxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYnJpbmcgYmFjayB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBzYXZlZCAoaWYgYW55dGhpbmcpLFxuXHRcdFx0XHQvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuXG5cdFx0XHRcdGlmICggdGhpcy5zZXRBdHRyaWJ1dGUgKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIixcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0XHRcdFx0XCJcIiA6XG5cdFx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiICkgfHwgXCJcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0aGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgY2xhc3NOYW1lLCBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRjbGFzc05hbWUgPSBcIiBcIiArIHNlbGVjdG9yICsgXCIgXCI7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdCggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBnZXRDbGFzcyggZWxlbSApICkgKyBcIiBcIiApLmluZGV4T2YoIGNsYXNzTmFtZSApID4gLTEgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBycmV0dXJuID0gL1xcci9nO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHZhbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBob29rcywgcmV0LCB2YWx1ZUlzRnVuY3Rpb24sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0XHRpZiAoIGhvb2tzICYmXG5cdFx0XHRcdFx0XCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSApICE9PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldCA9IGVsZW0udmFsdWU7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlc1xuXHRcdFx0XHRpZiAoIHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldC5yZXBsYWNlKCBycmV0dXJuLCBcIlwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXJcblx0XHRcdFx0cmV0dXJuIHJldCA9PSBudWxsID8gXCJcIiA6IHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdHZhciB2YWw7XG5cblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0dmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyBcIlwiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR2YWwgPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHR2YWwgKz0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIjtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0Ly8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmdcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgXCJ2YWx1ZVwiICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbDtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHR2YWxIb29rczoge1xuXHRcdG9wdGlvbjoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHR2YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ2YWx1ZVwiICk7XG5cdFx0XHRcdHJldHVybiB2YWwgIT0gbnVsbCA/XG5cdFx0XHRcdFx0dmFsIDpcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSBvbmx5XG5cdFx0XHRcdFx0Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKCMxNDY4NiwgIzE0ODU4KVxuXHRcdFx0XHRcdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2Vcblx0XHRcdFx0XHRzdHJpcEFuZENvbGxhcHNlKCBqUXVlcnkudGV4dCggZWxlbSApICk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzZWxlY3Q6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciB2YWx1ZSwgb3B0aW9uLCBpLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0aW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsXG5cdFx0XHRcdFx0b25lID0gZWxlbS50eXBlID09PSBcInNlbGVjdC1vbmVcIixcblx0XHRcdFx0XHR2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sXG5cdFx0XHRcdFx0bWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0aWYgKCBpbmRleCA8IDAgKSB7XG5cdFx0XHRcdFx0aSA9IG1heDtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGkgPSBvbmUgPyBpbmRleCA6IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zXG5cdFx0XHRcdGZvciAoIDsgaSA8IG1heDsgaSsrICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0Ly8gSUU4LTkgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAoIzI1NTEpXG5cdFx0XHRcdFx0aWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmXG5cblx0XHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0XHRcdFx0XHQhb3B0aW9uLmRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRcdCggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8XG5cdFx0XHRcdFx0XHRcdFx0IW5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgXCJvcHRncm91cFwiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvblxuXHRcdFx0XHRcdFx0dmFsdWUgPSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0c1xuXHRcdFx0XHRcdFx0aWYgKCBvbmUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXlcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIG9wdGlvblNldCwgb3B0aW9uLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0dmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKSxcblx0XHRcdFx0XHRpID0gb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi9cblxuXHRcdFx0XHRcdGlmICggb3B0aW9uLnNlbGVjdGVkID1cblx0XHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTFcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9wdGlvblNldCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXRcblx0XHRcdFx0aWYgKCAhb3B0aW9uU2V0ICkge1xuXHRcdFx0XHRcdGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyXG5qUXVlcnkuZWFjaCggWyBcInJhZGlvXCIsIFwiY2hlY2tib3hcIiBdLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7XG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7XG5cdFx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBudWxsID8gXCJvblwiIDogZWxlbS52YWx1ZTtcblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb25cblxuXG5zdXBwb3J0LmZvY3VzaW4gPSBcIm9uZm9jdXNpblwiIGluIHdpbmRvdztcblxuXG52YXIgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sXG5cdHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24oIGUgKSB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fTtcblxualF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7XG5cblx0XHR2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLCBsYXN0RWxlbWVudCxcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxuXHRcdFx0dHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgXCJ0eXBlXCIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCxcblx0XHRcdG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwibmFtZXNwYWNlXCIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCggXCIuXCIgKSA6IFtdO1xuXG5cdFx0Y3VyID0gbGFzdEVsZW1lbnQgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDtcblxuXHRcdC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93XG5cdFx0aWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZS5pbmRleE9mKCBcIi5cIiApID4gLTEgKSB7XG5cblx0XHRcdC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKClcblx0XHRcdG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCBcIi5cIiApO1xuXHRcdFx0dHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTtcblx0XHRcdG5hbWVzcGFjZXMuc29ydCgpO1xuXHRcdH1cblx0XHRvbnR5cGUgPSB0eXBlLmluZGV4T2YoIFwiOlwiICkgPCAwICYmIFwib25cIiArIHR5cGU7XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmdcblx0XHRldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdGV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gXCJvYmplY3RcIiAmJiBldmVudCApO1xuXG5cdFx0Ly8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKVxuXHRcdGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzO1xuXHRcdGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKTtcblx0XHRldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID9cblx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApIDpcblx0XHRcdG51bGw7XG5cblx0XHQvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWRcblx0XHRldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7XG5cdFx0aWYgKCAhZXZlbnQudGFyZ2V0ICkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZWxlbTtcblx0XHR9XG5cblx0XHQvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0XG5cdFx0ZGF0YSA9IGRhdGEgPT0gbnVsbCA/XG5cdFx0XHRbIGV2ZW50IF0gOlxuXHRcdFx0alF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7XG5cblx0XHQvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzXG5cdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAoIzk5NTEpXG5cdFx0Ly8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNClcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlO1xuXHRcdFx0aWYgKCAhcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSApIHtcblx0XHRcdFx0Y3VyID0gY3VyLnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKCA7IGN1cjsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0dG1wID0gY3VyO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPbmx5IGFkZCB3aW5kb3cgaWYgd2UgZ290IHRvIGRvY3VtZW50IChlLmcuLCBub3QgcGxhaW4gb2JqIG9yIGRldGFjaGVkIERPTSlcblx0XHRcdGlmICggdG1wID09PSAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCApICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmlyZSBoYW5kbGVycyBvbiB0aGUgZXZlbnQgcGF0aFxuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBjdXIgPSBldmVudFBhdGhbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRsYXN0RWxlbWVudCA9IGN1cjtcblx0XHRcdGV2ZW50LnR5cGUgPSBpID4gMSA/XG5cdFx0XHRcdGJ1YmJsZVR5cGUgOlxuXHRcdFx0XHRzcGVjaWFsLmJpbmRUeXBlIHx8IHR5cGU7XG5cblx0XHRcdC8vIGpRdWVyeSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSAoXG5cdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsIClcblx0XHRcdFx0KVsgZXZlbnQudHlwZSBdICYmXG5cdFx0XHRcdGRhdGFQcml2LmdldCggY3VyLCBcImhhbmRsZVwiICk7XG5cdFx0XHRpZiAoIGhhbmRsZSApIHtcblx0XHRcdFx0aGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmF0aXZlIGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdO1xuXHRcdFx0aWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGFjY2VwdERhdGEoIGN1ciApICkge1xuXHRcdFx0XHRldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRldmVudC50eXBlID0gdHlwZTtcblxuXHRcdC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3dcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkge1xuXG5cdFx0XHRpZiAoICggIXNwZWNpYWwuX2RlZmF1bHQgfHxcblx0XHRcdFx0c3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiZcblx0XHRcdFx0YWNjZXB0RGF0YSggZWxlbSApICkge1xuXG5cdFx0XHRcdC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZXZlbnQuXG5cdFx0XHRcdC8vIERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICgjNjE3MClcblx0XHRcdFx0aWYgKCBvbnR5cGUgJiYgaXNGdW5jdGlvbiggZWxlbVsgdHlwZSBdICkgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kXG5cdFx0XHRcdFx0dG1wID0gZWxlbVsgb250eXBlIF07XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZVxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtWyB0eXBlIF0oKTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSB0bXA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHQvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmVcblx0Ly8gVXNlZCBvbmx5IGZvciBgZm9jdXMoaW4gfCBvdXQpYCBldmVudHNcblx0c2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCApIHtcblx0XHR2YXIgZSA9IGpRdWVyeS5leHRlbmQoXG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCksXG5cdFx0XHRldmVudCxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0aXNTaW11bGF0ZWQ6IHRydWVcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGVsZW0gKTtcblx0fVxuXG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7XG5cdFx0fSApO1xuXHR9LFxuXHR0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF07XG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVtLCB0cnVlICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxuLy8gU3VwcG9ydDogRmlyZWZveCA8PTQ0XG4vLyBGaXJlZm94IGRvZXNuJ3QgaGF2ZSBmb2N1cyhpbiB8IG91dCkgZXZlbnRzXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4N1xuLy9cbi8vIFN1cHBvcnQ6IENocm9tZSA8PTQ4IC0gNDksIFNhZmFyaSA8PTkuMCAtIDkuMVxuLy8gZm9jdXMoaW4gfCBvdXQpIGV2ZW50cyBmaXJlIGFmdGVyIGZvY3VzICYgYmx1ciBldmVudHMsXG4vLyB3aGljaCBpcyBzcGVjIHZpb2xhdGlvbiAtIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWZvY3VzZXZlbnQtZXZlbnQtb3JkZXJcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ5ODU3XG5pZiAoICFzdXBwb3J0LmZvY3VzaW4gKSB7XG5cdGpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cblx0XHQvLyBBdHRhY2ggYSBzaW5nbGUgY2FwdHVyaW5nIGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dFxuXHRcdHZhciBoYW5kbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSApO1xuXHRcdH07XG5cblx0XHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7XG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gSGFuZGxlOiByZWd1bGFyIG5vZGVzICh2aWEgYHRoaXMub3duZXJEb2N1bWVudGApLCB3aW5kb3dcblx0XHRcdFx0Ly8gKHZpYSBgdGhpcy5kb2N1bWVudGApICYgZG9jdW1lbnQgKHZpYSBgdGhpc2ApLlxuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMuZG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsICggYXR0YWNoZXMgfHwgMCApICsgMSApO1xuXHRcdFx0fSxcblx0XHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLmRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICkgLSAxO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgYXR0YWNoZXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gKTtcbn1cbnZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcblxudmFyIG5vbmNlID0geyBndWlkOiBEYXRlLm5vdygpIH07XG5cbnZhciBycXVlcnkgPSAoIC9cXD8vICk7XG5cblxuXG4vLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nXG5qUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHtcblx0dmFyIHhtbDtcblx0aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIElFIHRocm93cyBvbiBwYXJzZUZyb21TdHJpbmcgd2l0aCBpbnZhbGlkIGlucHV0LlxuXHR0cnkge1xuXHRcdHhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgXCJ0ZXh0L3htbFwiICk7XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHhtbCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmICggIXhtbCB8fCB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwicGFyc2VyZXJyb3JcIiApLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZXJyb3IoIFwiSW52YWxpZCBYTUw6IFwiICsgZGF0YSApO1xuXHR9XG5cdHJldHVybiB4bWw7XG59O1xuXG5cbnZhclxuXHRyYnJhY2tldCA9IC9cXFtcXF0kLyxcblx0ckNSTEYgPSAvXFxyP1xcbi9nLFxuXHRyc3VibWl0dGVyVHlwZXMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksXG5cdHJzdWJtaXR0YWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtcblxuZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkge1xuXHR2YXIgbmFtZTtcblxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIG9iaiApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIGFycmF5IGl0ZW0uXG5cdFx0alF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7XG5cdFx0XHRpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkge1xuXG5cdFx0XHRcdC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci5cblx0XHRcdFx0YWRkKCBwcmVmaXgsIHYgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBJdGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMgbnVtZXJpYyBpbmRleC5cblx0XHRcdFx0YnVpbGRQYXJhbXMoXG5cdFx0XHRcdFx0cHJlZml4ICsgXCJbXCIgKyAoIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT0gbnVsbCA/IGkgOiBcIlwiICkgKyBcIl1cIixcblx0XHRcdFx0XHR2LFxuXHRcdFx0XHRcdHRyYWRpdGlvbmFsLFxuXHRcdFx0XHRcdGFkZFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHR9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgdG9UeXBlKCBvYmogKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXggKyBcIltcIiArIG5hbWUgKyBcIl1cIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS5cblx0XHRhZGQoIHByZWZpeCwgb2JqICk7XG5cdH1cbn1cblxuLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2Zcbi8vIGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZ1xualF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkge1xuXHR2YXIgcHJlZml4LFxuXHRcdHMgPSBbXSxcblx0XHRhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZU9yRnVuY3Rpb24gKSB7XG5cblx0XHRcdC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgdXNlIGl0cyByZXR1cm4gdmFsdWVcblx0XHRcdHZhciB2YWx1ZSA9IGlzRnVuY3Rpb24oIHZhbHVlT3JGdW5jdGlvbiApID9cblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uKCkgOlxuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb247XG5cblx0XHRcdHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgXCI9XCIgK1xuXHRcdFx0XHRlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKTtcblx0XHR9O1xuXG5cdGlmICggYSA9PSBudWxsICkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0Ly8gSWYgYW4gYXJyYXkgd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoYXQgaXQgaXMgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cy5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBhICkgfHwgKCBhLmpxdWVyeSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGEgKSApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzXG5cdFx0alF1ZXJ5LmVhY2goIGEsIGZ1bmN0aW9uKCkge1xuXHRcdFx0YWRkKCB0aGlzLm5hbWUsIHRoaXMudmFsdWUgKTtcblx0XHR9ICk7XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIElmIHRyYWRpdGlvbmFsLCBlbmNvZGUgdGhlIFwib2xkXCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyXG5cdFx0Ly8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBwYXJhbXMgcmVjdXJzaXZlbHkuXG5cdFx0Zm9yICggcHJlZml4IGluIGEgKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4LCBhWyBwcmVmaXggXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6YXRpb25cblx0cmV0dXJuIHMuam9pbiggXCImXCIgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2VyaWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTtcblx0fSxcblx0c2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIENhbiBhZGQgcHJvcEhvb2sgZm9yIFwiZWxlbWVudHNcIiB0byBmaWx0ZXIgb3IgYWRkIGZvcm0gZWxlbWVudHNcblx0XHRcdHZhciBlbGVtZW50cyA9IGpRdWVyeS5wcm9wKCB0aGlzLCBcImVsZW1lbnRzXCIgKTtcblx0XHRcdHJldHVybiBlbGVtZW50cyA/IGpRdWVyeS5tYWtlQXJyYXkoIGVsZW1lbnRzICkgOiB0aGlzO1xuXHRcdH0gKVxuXHRcdC5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cblx0XHRcdC8vIFVzZSAuaXMoIFwiOmRpc2FibGVkXCIgKSBzbyB0aGF0IGZpZWxkc2V0W2Rpc2FibGVkXSB3b3Jrc1xuXHRcdFx0cmV0dXJuIHRoaXMubmFtZSAmJiAhalF1ZXJ5KCB0aGlzICkuaXMoIFwiOmRpc2FibGVkXCIgKSAmJlxuXHRcdFx0XHRyc3VibWl0dGFibGUudGVzdCggdGhpcy5ub2RlTmFtZSApICYmICFyc3VibWl0dGVyVHlwZXMudGVzdCggdHlwZSApICYmXG5cdFx0XHRcdCggdGhpcy5jaGVja2VkIHx8ICFyY2hlY2thYmxlVHlwZS50ZXN0KCB0eXBlICkgKTtcblx0XHR9IClcblx0XHQubWFwKCBmdW5jdGlvbiggX2ksIGVsZW0gKSB7XG5cdFx0XHR2YXIgdmFsID0galF1ZXJ5KCB0aGlzICkudmFsKCk7XG5cblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbCApICkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsICkge1xuXHRcdFx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHR9ICkuZ2V0KCk7XG5cdH1cbn0gKTtcblxuXG52YXJcblx0cjIwID0gLyUyMC9nLFxuXHRyaGFzaCA9IC8jLiokLyxcblx0cmFudGlDYWNoZSA9IC8oWz8mXSlfPVteJl0qLyxcblx0cmhlYWRlcnMgPSAvXiguKj8pOlsgXFx0XSooW15cXHJcXG5dKikkL21nLFxuXG5cdC8vICM3NjUzLCAjODEyNSwgIzgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvblxuXHRybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLFxuXHRybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLyxcblx0cnByb3RvY29sID0gL15cXC9cXC8vLFxuXG5cdC8qIFByZWZpbHRlcnNcblx0ICogMSkgVGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUgYWpheC9qc29ucC5qcyBmb3IgYW4gZXhhbXBsZSlcblx0ICogMikgVGhlc2UgYXJlIGNhbGxlZDpcblx0ICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5zcG9ydFxuXHQgKiAgICAtIEFGVEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBzLnByb2Nlc3NEYXRhIGlzIHRydWUpXG5cdCAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiA1KSBleGVjdXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBjb250aW51ZSBkb3duIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0cHJlZmlsdGVycyA9IHt9LFxuXG5cdC8qIFRyYW5zcG9ydHMgYmluZGluZ3Ncblx0ICogMSkga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0dHJhbnNwb3J0cyA9IHt9LFxuXG5cdC8vIEF2b2lkIGNvbW1lbnQtcHJvbG9nIGNoYXIgc2VxdWVuY2UgKCMxMDA5OCk7IG11c3QgYXBwZWFzZSBsaW50IGFuZCBldmFkZSBjb21wcmVzc2lvblxuXHRhbGxUeXBlcyA9IFwiKi9cIi5jb25jYXQoIFwiKlwiICksXG5cblx0Ly8gQW5jaG9yIHRhZyBmb3IgcGFyc2luZyB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9yaWdpbkFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cdG9yaWdpbkFuY2hvci5ocmVmID0gbG9jYXRpb24uaHJlZjtcblxuLy8gQmFzZSBcImNvbnN0cnVjdG9yXCIgZm9yIGpRdWVyeS5hamF4UHJlZmlsdGVyIGFuZCBqUXVlcnkuYWpheFRyYW5zcG9ydFxuZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUgKSB7XG5cblx0Ly8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byBcIipcIlxuXHRyZXR1cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVuYyApIHtcblxuXHRcdGlmICggdHlwZW9mIGRhdGFUeXBlRXhwcmVzc2lvbiAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247XG5cdFx0XHRkYXRhVHlwZUV4cHJlc3Npb24gPSBcIipcIjtcblx0XHR9XG5cblx0XHR2YXIgZGF0YVR5cGUsXG5cdFx0XHRpID0gMCxcblx0XHRcdGRhdGFUeXBlcyA9IGRhdGFUeXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIGZ1bmMgKSApIHtcblxuXHRcdFx0Ly8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvblxuXHRcdFx0d2hpbGUgKCAoIGRhdGFUeXBlID0gZGF0YVR5cGVzWyBpKysgXSApICkge1xuXG5cdFx0XHRcdC8vIFByZXBlbmQgaWYgcmVxdWVzdGVkXG5cdFx0XHRcdGlmICggZGF0YVR5cGVbIDAgXSA9PT0gXCIrXCIgKSB7XG5cdFx0XHRcdFx0ZGF0YVR5cGUgPSBkYXRhVHlwZS5zbGljZSggMSApIHx8IFwiKlwiO1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkudW5zaGlmdCggZnVuYyApO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBhcHBlbmRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnB1c2goIGZ1bmMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuLy8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzXG5mdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICkge1xuXG5cdHZhciBpbnNwZWN0ZWQgPSB7fSxcblx0XHRzZWVraW5nVHJhbnNwb3J0ID0gKCBzdHJ1Y3R1cmUgPT09IHRyYW5zcG9ydHMgKTtcblxuXHRmdW5jdGlvbiBpbnNwZWN0KCBkYXRhVHlwZSApIHtcblx0XHR2YXIgc2VsZWN0ZWQ7XG5cdFx0aW5zcGVjdGVkWyBkYXRhVHlwZSBdID0gdHJ1ZTtcblx0XHRqUXVlcnkuZWFjaCggc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdLCBmdW5jdGlvbiggXywgcHJlZmlsdGVyT3JGYWN0b3J5ICkge1xuXHRcdFx0dmFyIGRhdGFUeXBlT3JUcmFuc3BvcnQgPSBwcmVmaWx0ZXJPckZhY3RvcnkoIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTtcblx0XHRcdGlmICggdHlwZW9mIGRhdGFUeXBlT3JUcmFuc3BvcnQgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXNlZWtpbmdUcmFuc3BvcnQgJiYgIWluc3BlY3RlZFsgZGF0YVR5cGVPclRyYW5zcG9ydCBdICkge1xuXG5cdFx0XHRcdG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0aW5zcGVjdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKCBzZWVraW5nVHJhbnNwb3J0ICkge1xuXHRcdFx0XHRyZXR1cm4gISggc2VsZWN0ZWQgPSBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHRcdHJldHVybiBzZWxlY3RlZDtcblx0fVxuXG5cdHJldHVybiBpbnNwZWN0KCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdICkgfHwgIWluc3BlY3RlZFsgXCIqXCIgXSAmJiBpbnNwZWN0KCBcIipcIiApO1xufVxuXG4vLyBBIHNwZWNpYWwgZXh0ZW5kIGZvciBhamF4IG9wdGlvbnNcbi8vIHRoYXQgdGFrZXMgXCJmbGF0XCIgb3B0aW9ucyAobm90IHRvIGJlIGRlZXAgZXh0ZW5kZWQpXG4vLyBGaXhlcyAjOTg4N1xuZnVuY3Rpb24gYWpheEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7XG5cdHZhciBrZXksIGRlZXAsXG5cdFx0ZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9O1xuXG5cdGZvciAoIGtleSBpbiBzcmMgKSB7XG5cdFx0aWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHQoIGZsYXRPcHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRlZXAgPSB7fSApICkgKVsga2V5IF0gPSBzcmNbIGtleSBdO1xuXHRcdH1cblx0fVxuXHRpZiAoIGRlZXAgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0O1xufVxuXG4vKiBIYW5kbGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6XG4gKiAtIGZpbmRzIHRoZSByaWdodCBkYXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFUeXBlKVxuICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSB7XG5cblx0dmFyIGN0LCB0eXBlLCBmaW5hbERhdGFUeXBlLCBmaXJzdERhdGFUeXBlLFxuXHRcdGNvbnRlbnRzID0gcy5jb250ZW50cyxcblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcztcblxuXHQvLyBSZW1vdmUgYXV0byBkYXRhVHlwZSBhbmQgZ2V0IGNvbnRlbnQtdHlwZSBpbiB0aGUgcHJvY2Vzc1xuXHR3aGlsZSAoIGRhdGFUeXBlc1sgMCBdID09PSBcIipcIiApIHtcblx0XHRkYXRhVHlwZXMuc2hpZnQoKTtcblx0XHRpZiAoIGN0ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGVcblx0aWYgKCBjdCApIHtcblx0XHRmb3IgKCB0eXBlIGluIGNvbnRlbnRzICkge1xuXHRcdFx0aWYgKCBjb250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHtcblx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlXG5cdGlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkge1xuXHRcdGZpbmFsRGF0YVR5cGUgPSBkYXRhVHlwZXNbIDAgXTtcblx0fSBlbHNlIHtcblxuXHRcdC8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXNcblx0XHRmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHtcblx0XHRcdGlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArIFwiIFwiICsgZGF0YVR5cGVzWyAwIF0gXSApIHtcblx0XHRcdFx0ZmluYWxEYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAhZmlyc3REYXRhVHlwZSApIHtcblx0XHRcdFx0Zmlyc3REYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gT3IganVzdCB1c2UgZmlyc3Qgb25lXG5cdFx0ZmluYWxEYXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTtcblx0fVxuXG5cdC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGVcblx0Ly8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0aGUgbGlzdCBpZiBuZWVkZWRcblx0Ly8gYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuXHRpZiAoIGZpbmFsRGF0YVR5cGUgKSB7XG5cdFx0aWYgKCBmaW5hbERhdGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHtcblx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCBmaW5hbERhdGFUeXBlICk7XG5cdFx0fVxuXHRcdHJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTtcblx0fVxufVxuXG4vKiBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlXG4gKiBBbHNvIHNldHMgdGhlIHJlc3BvbnNlWFhYIGZpZWxkcyBvbiB0aGUganFYSFIgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICkge1xuXHR2YXIgY29udjIsIGN1cnJlbnQsIGNvbnYsIHRtcCwgcHJldixcblx0XHRjb252ZXJ0ZXJzID0ge30sXG5cblx0XHQvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRhdGFUeXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMuc2xpY2UoKTtcblxuXHQvLyBDcmVhdGUgY29udmVydGVycyBtYXAgd2l0aCBsb3dlcmNhc2VkIGtleXNcblx0aWYgKCBkYXRhVHlwZXNbIDEgXSApIHtcblx0XHRmb3IgKCBjb252IGluIHMuY29udmVydGVycyApIHtcblx0XHRcdGNvbnZlcnRlcnNbIGNvbnYudG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBjb252IF07XG5cdFx0fVxuXHR9XG5cblx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlXG5cdHdoaWxlICggY3VycmVudCApIHtcblxuXHRcdGlmICggcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdICkge1xuXHRcdFx0anFYSFJbIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSBdID0gcmVzcG9uc2U7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgdGhlIGRhdGFGaWx0ZXIgaWYgcHJvdmlkZWRcblx0XHRpZiAoICFwcmV2ICYmIGlzU3VjY2VzcyAmJiBzLmRhdGFGaWx0ZXIgKSB7XG5cdFx0XHRyZXNwb25zZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTtcblx0XHR9XG5cblx0XHRwcmV2ID0gY3VycmVudDtcblx0XHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0XHRpZiAoIGN1cnJlbnQgKSB7XG5cblx0XHRcdC8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG9cblx0XHRcdGlmICggY3VycmVudCA9PT0gXCIqXCIgKSB7XG5cblx0XHRcdFx0Y3VycmVudCA9IHByZXY7XG5cblx0XHRcdC8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJldiBkYXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnRcblx0XHRcdH0gZWxzZSBpZiAoIHByZXYgIT09IFwiKlwiICYmIHByZXYgIT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU2VlayBhIGRpcmVjdCBjb252ZXJ0ZXJcblx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyBcIiogXCIgKyBjdXJyZW50IF07XG5cblx0XHRcdFx0Ly8gSWYgbm9uZSBmb3VuZCwgc2VlayBhIHBhaXJcblx0XHRcdFx0aWYgKCAhY29udiApIHtcblx0XHRcdFx0XHRmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnRcblx0XHRcdFx0XHRcdHRtcCA9IGNvbnYyLnNwbGl0KCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXRcblx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIHRtcFsgMCBdIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJzWyBcIiogXCIgKyB0bXBbIDAgXSBdO1xuXHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDb25kZW5zZSBlcXVpdmFsZW5jZSBjb252ZXJ0ZXJzXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjb252ID09PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRhdGFUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggY29udmVydGVyc1sgY29udjIgXSAhPT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnQgPSB0bXBbIDAgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0bXBbIDEgXSApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFwcGx5IGNvbnZlcnRlciAoaWYgbm90IGFuIGVxdWl2YWxlbmNlKVxuXHRcdFx0XHRpZiAoIGNvbnYgIT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHQvLyBVbmxlc3MgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIGJ1YmJsZSwgY2F0Y2ggYW5kIHJldHVybiB0aGVtXG5cdFx0XHRcdFx0aWYgKCBjb252ICYmIHMudGhyb3dzICkge1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZTogXCJwYXJzZXJlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdGVycm9yOiBjb252ID8gZSA6IFwiTm8gY29udmVyc2lvbiBmcm9tIFwiICsgcHJldiArIFwiIHRvIFwiICsgY3VycmVudFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IHN0YXRlOiBcInN1Y2Nlc3NcIiwgZGF0YTogcmVzcG9uc2UgfTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIENvdW50ZXIgZm9yIGhvbGRpbmcgdGhlIG51bWJlciBvZiBhY3RpdmUgcXVlcmllc1xuXHRhY3RpdmU6IDAsXG5cblx0Ly8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdFxuXHRsYXN0TW9kaWZpZWQ6IHt9LFxuXHRldGFnOiB7fSxcblxuXHRhamF4U2V0dGluZ3M6IHtcblx0XHR1cmw6IGxvY2F0aW9uLmhyZWYsXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRpc0xvY2FsOiBybG9jYWxQcm90b2NvbC50ZXN0KCBsb2NhdGlvbi5wcm90b2NvbCApLFxuXHRcdGdsb2JhbDogdHJ1ZSxcblx0XHRwcm9jZXNzRGF0YTogdHJ1ZSxcblx0XHRhc3luYzogdHJ1ZSxcblx0XHRjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIixcblxuXHRcdC8qXG5cdFx0dGltZW91dDogMCxcblx0XHRkYXRhOiBudWxsLFxuXHRcdGRhdGFUeXBlOiBudWxsLFxuXHRcdHVzZXJuYW1lOiBudWxsLFxuXHRcdHBhc3N3b3JkOiBudWxsLFxuXHRcdGNhY2hlOiBudWxsLFxuXHRcdHRocm93czogZmFsc2UsXG5cdFx0dHJhZGl0aW9uYWw6IGZhbHNlLFxuXHRcdGhlYWRlcnM6IHt9LFxuXHRcdCovXG5cblx0XHRhY2NlcHRzOiB7XG5cdFx0XHRcIipcIjogYWxsVHlwZXMsXG5cdFx0XHR0ZXh0OiBcInRleHQvcGxhaW5cIixcblx0XHRcdGh0bWw6IFwidGV4dC9odG1sXCIsXG5cdFx0XHR4bWw6IFwiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbFwiLFxuXHRcdFx0anNvbjogXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHRcIlxuXHRcdH0sXG5cblx0XHRjb250ZW50czoge1xuXHRcdFx0eG1sOiAvXFxieG1sXFxiLyxcblx0XHRcdGh0bWw6IC9cXGJodG1sLyxcblx0XHRcdGpzb246IC9cXGJqc29uXFxiL1xuXHRcdH0sXG5cblx0XHRyZXNwb25zZUZpZWxkczoge1xuXHRcdFx0eG1sOiBcInJlc3BvbnNlWE1MXCIsXG5cdFx0XHR0ZXh0OiBcInJlc3BvbnNlVGV4dFwiLFxuXHRcdFx0anNvbjogXCJyZXNwb25zZUpTT05cIlxuXHRcdH0sXG5cblx0XHQvLyBEYXRhIGNvbnZlcnRlcnNcblx0XHQvLyBLZXlzIHNlcGFyYXRlIHNvdXJjZSAob3IgY2F0Y2hhbGwgXCIqXCIpIGFuZCBkZXN0aW5hdGlvbiB0eXBlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG5cdFx0Y29udmVydGVyczoge1xuXG5cdFx0XHQvLyBDb252ZXJ0IGFueXRoaW5nIHRvIHRleHRcblx0XHRcdFwiKiB0ZXh0XCI6IFN0cmluZyxcblxuXHRcdFx0Ly8gVGV4dCB0byBodG1sICh0cnVlID0gbm8gdHJhbnNmb3JtYXRpb24pXG5cdFx0XHRcInRleHQgaHRtbFwiOiB0cnVlLFxuXG5cdFx0XHQvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uXG5cdFx0XHRcInRleHQganNvblwiOiBKU09OLnBhcnNlLFxuXG5cdFx0XHQvLyBQYXJzZSB0ZXh0IGFzIHhtbFxuXHRcdFx0XCJ0ZXh0IHhtbFwiOiBqUXVlcnkucGFyc2VYTUxcblx0XHR9LFxuXG5cdFx0Ly8gRm9yIG9wdGlvbnMgdGhhdCBzaG91bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDpcblx0XHQvLyB5b3UgY2FuIGFkZCB5b3VyIG93biBjdXN0b20gb3B0aW9ucyBoZXJlIGlmXG5cdFx0Ly8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmVcblx0XHQvLyBkZWVwIGV4dGVuZGVkIChzZWUgYWpheEV4dGVuZClcblx0XHRmbGF0T3B0aW9uczoge1xuXHRcdFx0dXJsOiB0cnVlLFxuXHRcdFx0Y29udGV4dDogdHJ1ZVxuXHRcdH1cblx0fSxcblxuXHQvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldFxuXHQvLyB3aXRoIGJvdGggYWpheFNldHRpbmdzIGFuZCBzZXR0aW5ncyBmaWVsZHMuXG5cdC8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3MuXG5cdGFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7XG5cdFx0cmV0dXJuIHNldHRpbmdzID9cblxuXHRcdFx0Ly8gQnVpbGRpbmcgYSBzZXR0aW5ncyBvYmplY3Rcblx0XHRcdGFqYXhFeHRlbmQoIGFqYXhFeHRlbmQoIHRhcmdldCwgalF1ZXJ5LmFqYXhTZXR0aW5ncyApLCBzZXR0aW5ncyApIDpcblxuXHRcdFx0Ly8gRXh0ZW5kaW5nIGFqYXhTZXR0aW5nc1xuXHRcdFx0YWpheEV4dGVuZCggalF1ZXJ5LmFqYXhTZXR0aW5ncywgdGFyZ2V0ICk7XG5cdH0sXG5cblx0YWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksXG5cdGFqYXhUcmFuc3BvcnQ6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cyApLFxuXG5cdC8vIE1haW4gbWV0aG9kXG5cdGFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZVxuXHRcdGlmICggdHlwZW9mIHVybCA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdG9wdGlvbnMgPSB1cmw7XG5cdFx0XHR1cmwgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yY2Ugb3B0aW9ucyB0byBiZSBhbiBvYmplY3Rcblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRcdHZhciB0cmFuc3BvcnQsXG5cblx0XHRcdC8vIFVSTCB3aXRob3V0IGFudGktY2FjaGUgcGFyYW1cblx0XHRcdGNhY2hlVVJMLFxuXG5cdFx0XHQvLyBSZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcsXG5cdFx0XHRyZXNwb25zZUhlYWRlcnMsXG5cblx0XHRcdC8vIHRpbWVvdXQgaGFuZGxlXG5cdFx0XHR0aW1lb3V0VGltZXIsXG5cblx0XHRcdC8vIFVybCBjbGVhbnVwIHZhclxuXHRcdFx0dXJsQW5jaG9yLFxuXG5cdFx0XHQvLyBSZXF1ZXN0IHN0YXRlIChiZWNvbWVzIGZhbHNlIHVwb24gc2VuZCBhbmQgdHJ1ZSB1cG9uIGNvbXBsZXRpb24pXG5cdFx0XHRjb21wbGV0ZWQsXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hlZFxuXHRcdFx0ZmlyZUdsb2JhbHMsXG5cblx0XHRcdC8vIExvb3AgdmFyaWFibGVcblx0XHRcdGksXG5cblx0XHRcdC8vIHVuY2FjaGVkIHBhcnQgb2YgdGhlIHVybFxuXHRcdFx0dW5jYWNoZWQsXG5cblx0XHRcdC8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3Rcblx0XHRcdHMgPSBqUXVlcnkuYWpheFNldHVwKCB7fSwgb3B0aW9ucyApLFxuXG5cdFx0XHQvLyBDYWxsYmFja3MgY29udGV4dFxuXHRcdFx0Y2FsbGJhY2tDb250ZXh0ID0gcy5jb250ZXh0IHx8IHMsXG5cblx0XHRcdC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMgaXMgY2FsbGJhY2tDb250ZXh0IGlmIGl0IGlzIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IGNvbGxlY3Rpb25cblx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dCA9IHMuY29udGV4dCAmJlxuXHRcdFx0XHQoIGNhbGxiYWNrQ29udGV4dC5ub2RlVHlwZSB8fCBjYWxsYmFja0NvbnRleHQuanF1ZXJ5ICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOlxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudCxcblxuXHRcdFx0Ly8gRGVmZXJyZWRzXG5cdFx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0c3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSxcblxuXHRcdFx0Ly8gSGVhZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSlcblx0XHRcdHJlcXVlc3RIZWFkZXJzID0ge30sXG5cdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sXG5cblx0XHRcdC8vIERlZmF1bHQgYWJvcnQgbWVzc2FnZVxuXHRcdFx0c3RyQWJvcnQgPSBcImNhbmNlbGVkXCIsXG5cblx0XHRcdC8vIEZha2UgeGhyXG5cdFx0XHRqcVhIUiA9IHtcblx0XHRcdFx0cmVhZHlTdGF0ZTogMCxcblxuXHRcdFx0XHQvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVkXG5cdFx0XHRcdGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0XHRcdHZhciBtYXRjaDtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHRcdGlmICggIXJlc3BvbnNlSGVhZGVycyApIHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzID0ge307XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdID1cblx0XHRcdFx0XHRcdFx0XHRcdCggcmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdIHx8IFtdIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmNvbmNhdCggbWF0Y2hbIDIgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaC5qb2luKCBcIiwgXCIgKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBSYXcgc3RyaW5nXG5cdFx0XHRcdGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbXBsZXRlZCA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FjaGVzIHRoZSBoZWFkZXJcblx0XHRcdFx0c2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gPVxuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fCBuYW1lO1xuXHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlclxuXHRcdFx0XHRvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0cy5taW1lVHlwZSA9IHR5cGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRcdHN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBtYXAgKSB7XG5cdFx0XHRcdFx0dmFyIGNvZGU7XG5cdFx0XHRcdFx0aWYgKCBtYXAgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3Ncblx0XHRcdFx0XHRcdFx0anFYSFIuYWx3YXlzKCBtYXBbIGpxWEhSLnN0YXR1cyBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIExhenktYWRkIHRoZSBuZXcgY2FsbGJhY2tzIGluIGEgd2F5IHRoYXQgcHJlc2VydmVzIG9sZCBvbmVzXG5cdFx0XHRcdFx0XHRcdGZvciAoIGNvZGUgaW4gbWFwICkge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXR1c0NvZGVbIGNvZGUgXSA9IFsgc3RhdHVzQ29kZVsgY29kZSBdLCBtYXBbIGNvZGUgXSBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhbmNlbCB0aGUgcmVxdWVzdFxuXHRcdFx0XHRhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0dmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7XG5cdFx0XHRcdFx0aWYgKCB0cmFuc3BvcnQgKSB7XG5cdFx0XHRcdFx0XHR0cmFuc3BvcnQuYWJvcnQoIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkb25lKCAwLCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdC8vIEF0dGFjaCBkZWZlcnJlZHNcblx0XHRkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApO1xuXG5cdFx0Ly8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpXG5cdFx0Ly8gSGFuZGxlIGZhbHN5IHVybCBpbiB0aGUgc2V0dGluZ3Mgb2JqZWN0ICgjMTAwOTM6IGNvbnNpc3RlbmN5IHdpdGggb2xkIHNpZ25hdHVyZSlcblx0XHQvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGVcblx0XHRzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgbG9jYXRpb24uaHJlZiApICsgXCJcIiApXG5cdFx0XHQucmVwbGFjZSggcnByb3RvY29sLCBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiApO1xuXG5cdFx0Ly8gQWxpYXMgbWV0aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQgIzEyMDA0XG5cdFx0cy50eXBlID0gb3B0aW9ucy5tZXRob2QgfHwgb3B0aW9ucy50eXBlIHx8IHMubWV0aG9kIHx8IHMudHlwZTtcblxuXHRcdC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3Rcblx0XHRzLmRhdGFUeXBlcyA9ICggcy5kYXRhVHlwZSB8fCBcIipcIiApLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblxuXHRcdC8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB0aGUgb3JpZ2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgb3JpZ2luLlxuXHRcdGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkge1xuXHRcdFx0dXJsQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdFx0Ly8gSUUgdGhyb3dzIGV4Y2VwdGlvbiBvbiBhY2Nlc3NpbmcgdGhlIGhyZWYgcHJvcGVydHkgaWYgdXJsIGlzIG1hbGZvcm1lZCxcblx0XHRcdC8vIGUuZy4gaHR0cDovL2V4YW1wbGUuY29tOjgweC9cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gcy51cmw7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEgb25seVxuXHRcdFx0XHQvLyBBbmNob3IncyBob3N0IHByb3BlcnR5IGlzbid0IGNvcnJlY3RseSBzZXQgd2hlbiBzLnVybCBpcyByZWxhdGl2ZVxuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHVybEFuY2hvci5ocmVmO1xuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gb3JpZ2luQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgb3JpZ2luQW5jaG9yLmhvc3QgIT09XG5cdFx0XHRcdFx0dXJsQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgdXJsQW5jaG9yLmhvc3Q7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhbiBlcnJvciBwYXJzaW5nIHRoZSBVUkwsIGFzc3VtZSBpdCBpcyBjcm9zc0RvbWFpbixcblx0XHRcdFx0Ly8gaXQgY2FuIGJlIHJlamVjdGVkIGJ5IHRoZSB0cmFuc3BvcnQgaWYgaXQgaXMgaW52YWxpZFxuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmdcblx0XHRpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHByZWZpbHRlcnNcblx0XHRpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJlXG5cdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG9cblx0XHQvLyBEb24ndCBmaXJlIGV2ZW50cyBpZiBqUXVlcnkuZXZlbnQgaXMgdW5kZWZpbmVkIGluIGFuIEFNRC11c2FnZSBzY2VuYXJpbyAoIzE1MTE4KVxuXHRcdGZpcmVHbG9iYWxzID0galF1ZXJ5LmV2ZW50ICYmIHMuZ2xvYmFsO1xuXG5cdFx0Ly8gV2F0Y2ggZm9yIGEgbmV3IHNldCBvZiByZXF1ZXN0c1xuXHRcdGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0YXJ0XCIgKTtcblx0XHR9XG5cblx0XHQvLyBVcHBlcmNhc2UgdGhlIHR5cGVcblx0XHRzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTtcblxuXHRcdC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50XG5cdFx0cy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7XG5cblx0XHQvLyBTYXZlIHRoZSBVUkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2Vcblx0XHQvLyBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIgbGF0ZXIgb25cblx0XHQvLyBSZW1vdmUgaGFzaCB0byBzaW1wbGlmeSB1cmwgbWFuaXB1bGF0aW9uXG5cdFx0Y2FjaGVVUkwgPSBzLnVybC5yZXBsYWNlKCByaGFzaCwgXCJcIiApO1xuXG5cdFx0Ly8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnRcblx0XHRpZiAoICFzLmhhc0NvbnRlbnQgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBoYXNoIHNvIHdlIGNhbiBwdXQgaXQgYmFja1xuXHRcdFx0dW5jYWNoZWQgPSBzLnVybC5zbGljZSggY2FjaGVVUkwubGVuZ3RoICk7XG5cblx0XHRcdC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkLCBhcHBlbmQgZGF0YSB0byB1cmxcblx0XHRcdGlmICggcy5kYXRhICYmICggcy5wcm9jZXNzRGF0YSB8fCB0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICkgKSB7XG5cdFx0XHRcdGNhY2hlVVJMICs9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmRhdGE7XG5cblx0XHRcdFx0Ly8gIzk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeVxuXHRcdFx0XHRkZWxldGUgcy5kYXRhO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgb3IgdXBkYXRlIGFudGktY2FjaGUgcGFyYW0gaWYgbmVlZGVkXG5cdFx0XHRpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkge1xuXHRcdFx0XHRjYWNoZVVSTCA9IGNhY2hlVVJMLnJlcGxhY2UoIHJhbnRpQ2FjaGUsIFwiJDFcIiApO1xuXHRcdFx0XHR1bmNhY2hlZCA9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBcIl89XCIgKyAoIG5vbmNlLmd1aWQrKyApICtcblx0XHRcdFx0XHR1bmNhY2hlZDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUHV0IGhhc2ggYW5kIGFudGktY2FjaGUgb24gdGhlIFVSTCB0aGF0IHdpbGwgYmUgcmVxdWVzdGVkIChnaC0xNzMyKVxuXHRcdFx0cy51cmwgPSBjYWNoZVVSTCArIHVuY2FjaGVkO1xuXG5cdFx0Ly8gQ2hhbmdlICclMjAnIHRvICcrJyBpZiB0aGlzIGlzIGVuY29kZWQgZm9ybSBib2R5IGNvbnRlbnQgKGdoLTI2NTgpXG5cdFx0fSBlbHNlIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiZcblx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiICkuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICkge1xuXHRcdFx0cy5kYXRhID0gcy5kYXRhLnJlcGxhY2UoIHIyMCwgXCIrXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0aWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU1vZGlmaWVkLVNpbmNlXCIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHRcdGlmICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTm9uZS1NYXRjaFwiLCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudFxuXHRcdGlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJDb250ZW50LVR5cGVcIiwgcy5jb250ZW50VHlwZSApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGVcblx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKFxuXHRcdFx0XCJBY2NlcHRcIixcblx0XHRcdHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gP1xuXHRcdFx0XHRzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArXG5cdFx0XHRcdFx0KCBzLmRhdGFUeXBlc1sgMCBdICE9PSBcIipcIiA/IFwiLCBcIiArIGFsbFR5cGVzICsgXCI7IHE9MC4wMVwiIDogXCJcIiApIDpcblx0XHRcdFx0cy5hY2NlcHRzWyBcIipcIiBdXG5cdFx0KTtcblxuXHRcdC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvblxuXHRcdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTtcblx0XHR9XG5cblx0XHQvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0XG5cdFx0aWYgKCBzLmJlZm9yZVNlbmQgJiZcblx0XHRcdCggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgY29tcGxldGVkICkgKSB7XG5cblx0XHRcdC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVyblxuXHRcdFx0cmV0dXJuIGpxWEhSLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uXG5cdFx0c3RyQWJvcnQgPSBcImFib3J0XCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHNcblx0XHRjb21wbGV0ZURlZmVycmVkLmFkZCggcy5jb21wbGV0ZSApO1xuXHRcdGpxWEhSLmRvbmUoIHMuc3VjY2VzcyApO1xuXHRcdGpxWEhSLmZhaWwoIHMuZXJyb3IgKTtcblxuXHRcdC8vIEdldCB0cmFuc3BvcnRcblx0XHR0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydFxuXHRcdGlmICggIXRyYW5zcG9ydCApIHtcblx0XHRcdGRvbmUoIC0xLCBcIk5vIFRyYW5zcG9ydFwiICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSAxO1xuXG5cdFx0XHQvLyBTZW5kIGdsb2JhbCBldmVudFxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheFNlbmRcIiwgWyBqcVhIUiwgcyBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaW1lb3V0XG5cdFx0XHRpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHtcblx0XHRcdFx0dGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGpxWEhSLmFib3J0KCBcInRpbWVvdXRcIiApO1xuXHRcdFx0XHR9LCBzLnRpbWVvdXQgKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29tcGxldGVkID0gZmFsc2U7XG5cdFx0XHRcdHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gUmV0aHJvdyBwb3N0LWNvbXBsZXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUHJvcGFnYXRlIG90aGVycyBhcyByZXN1bHRzXG5cdFx0XHRcdGRvbmUoIC0xLCBlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lXG5cdFx0ZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7XG5cdFx0XHR2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLFxuXHRcdFx0XHRzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDtcblxuXHRcdFx0Ly8gSWdub3JlIHJlcGVhdCBpbnZvY2F0aW9uc1xuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29tcGxldGVkID0gdHJ1ZTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHNcblx0XHRcdGlmICggdGltZW91dFRpbWVyICkge1xuXHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb25cblx0XHRcdC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpXG5cdFx0XHR0cmFuc3BvcnQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgXCJcIjtcblxuXHRcdFx0Ly8gU2V0IHJlYWR5U3RhdGVcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7XG5cblx0XHRcdC8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsXG5cdFx0XHRpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNDtcblxuXHRcdFx0Ly8gR2V0IHJlc3BvbnNlIGRhdGFcblx0XHRcdGlmICggcmVzcG9uc2VzICkge1xuXHRcdFx0XHRyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVXNlIGEgbm9vcCBjb252ZXJ0ZXIgZm9yIG1pc3Npbmcgc2NyaXB0XG5cdFx0XHRpZiAoICFpc1N1Y2Nlc3MgJiYgalF1ZXJ5LmluQXJyYXkoIFwic2NyaXB0XCIsIHMuZGF0YVR5cGVzICkgPiAtMSApIHtcblx0XHRcdFx0cy5jb252ZXJ0ZXJzWyBcInRleHQgc2NyaXB0XCIgXSA9IGZ1bmN0aW9uKCkge307XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgbm8gbWF0dGVyIHdoYXQgKHRoYXQgd2F5IHJlc3BvbnNlWFhYIGZpZWxkcyBhcmUgYWx3YXlzIHNldClcblx0XHRcdHJlc3BvbnNlID0gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICk7XG5cblx0XHRcdC8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBlIGNoYWluaW5nXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblxuXHRcdFx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdFx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkxhc3QtTW9kaWZpZWRcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiZXRhZ1wiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gaWYgbm8gY29udGVudFxuXHRcdFx0XHRpZiAoIHN0YXR1cyA9PT0gMjA0IHx8IHMudHlwZSA9PT0gXCJIRUFEXCIgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm9jb250ZW50XCI7XG5cblx0XHRcdFx0Ly8gaWYgbm90IG1vZGlmaWVkXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMzA0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vdG1vZGlmaWVkXCI7XG5cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBkYXRhLCBsZXQncyBjb252ZXJ0IGl0XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXRlO1xuXHRcdFx0XHRcdHN1Y2Nlc3MgPSByZXNwb25zZS5kYXRhO1xuXHRcdFx0XHRcdGVycm9yID0gcmVzcG9uc2UuZXJyb3I7XG5cdFx0XHRcdFx0aXNTdWNjZXNzID0gIWVycm9yO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEV4dHJhY3QgZXJyb3IgZnJvbSBzdGF0dXNUZXh0IGFuZCBub3JtYWxpemUgZm9yIG5vbi1hYm9ydHNcblx0XHRcdFx0ZXJyb3IgPSBzdGF0dXNUZXh0O1xuXHRcdFx0XHRpZiAoIHN0YXR1cyB8fCAhc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJlcnJvclwiO1xuXHRcdFx0XHRcdGlmICggc3RhdHVzIDwgMCApIHtcblx0XHRcdFx0XHRcdHN0YXR1cyA9IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0XG5cdFx0XHRqcVhIUi5zdGF0dXMgPSBzdGF0dXM7XG5cdFx0XHRqcVhIUi5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNUZXh0IHx8IHN0YXR1c1RleHQgKSArIFwiXCI7XG5cblx0XHRcdC8vIFN1Y2Nlc3MvRXJyb3Jcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0anFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApO1xuXHRcdFx0c3RhdHVzQ29kZSA9IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIGlzU3VjY2VzcyA/IFwiYWpheFN1Y2Nlc3NcIiA6IFwiYWpheEVycm9yXCIsXG5cdFx0XHRcdFx0WyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29tcGxldGVcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhDb21wbGV0ZVwiLCBbIGpxWEhSLCBzIF0gKTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXJcblx0XHRcdFx0aWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RvcFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ganFYSFI7XG5cdH0sXG5cblx0Z2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2FsbGJhY2ssIFwianNvblwiICk7XG5cdH0sXG5cblx0Z2V0U2NyaXB0OiBmdW5jdGlvbiggdXJsLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxiYWNrLCBcInNjcmlwdFwiICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJnZXRcIiwgXCJwb3N0XCIgXSwgZnVuY3Rpb24oIF9pLCBtZXRob2QgKSB7XG5cdGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHtcblxuXHRcdC8vIFNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBkYXRhICkgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBjYWxsYmFjaztcblx0XHRcdGNhbGxiYWNrID0gZGF0YTtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlIHVybCBjYW4gYmUgYW4gb3B0aW9ucyBvYmplY3QgKHdoaWNoIHRoZW4gbXVzdCBoYXZlIC51cmwpXG5cdFx0cmV0dXJuIGpRdWVyeS5hamF4KCBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHR1cmw6IHVybCxcblx0XHRcdHR5cGU6IG1ldGhvZCxcblx0XHRcdGRhdGFUeXBlOiB0eXBlLFxuXHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdHN1Y2Nlc3M6IGNhbGxiYWNrXG5cdFx0fSwgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHVybCApICYmIHVybCApICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0dmFyIGk7XG5cdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdGlmICggaS50b0xvd2VyQ2FzZSgpID09PSBcImNvbnRlbnQtdHlwZVwiICkge1xuXHRcdFx0cy5jb250ZW50VHlwZSA9IHMuaGVhZGVyc1sgaSBdIHx8IFwiXCI7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxualF1ZXJ5Ll9ldmFsVXJsID0gZnVuY3Rpb24oIHVybCwgb3B0aW9ucywgZG9jICkge1xuXHRyZXR1cm4galF1ZXJ5LmFqYXgoIHtcblx0XHR1cmw6IHVybCxcblxuXHRcdC8vIE1ha2UgdGhpcyBleHBsaWNpdCwgc2luY2UgdXNlciBjYW4gb3ZlcnJpZGUgdGhpcyB0aHJvdWdoIGFqYXhTZXR1cCAoIzExMjY0KVxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0ZGF0YVR5cGU6IFwic2NyaXB0XCIsXG5cdFx0Y2FjaGU6IHRydWUsXG5cdFx0YXN5bmM6IGZhbHNlLFxuXHRcdGdsb2JhbDogZmFsc2UsXG5cblx0XHQvLyBPbmx5IGV2YWx1YXRlIHRoZSByZXNwb25zZSBpZiBpdCBpcyBzdWNjZXNzZnVsIChnaC00MTI2KVxuXHRcdC8vIGRhdGFGaWx0ZXIgaXMgbm90IGludm9rZWQgZm9yIGZhaWx1cmUgcmVzcG9uc2VzLCBzbyB1c2luZyBpdCBpbnN0ZWFkXG5cdFx0Ly8gb2YgdGhlIGRlZmF1bHQgY29udmVydGVyIGlzIGtsdWRneSBidXQgaXQgd29ya3MuXG5cdFx0Y29udmVydGVyczoge1xuXHRcdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbigpIHt9XG5cdFx0fSxcblx0XHRkYXRhRmlsdGVyOiBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggcmVzcG9uc2UsIG9wdGlvbnMsIGRvYyApO1xuXHRcdH1cblx0fSApO1xufTtcblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciB3cmFwO1xuXG5cdFx0aWYgKCB0aGlzWyAwIF0gKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdFx0aHRtbCA9IGh0bWwuY2FsbCggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kXG5cdFx0XHR3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCApLmVxKCAwICkuY2xvbmUoIHRydWUgKTtcblxuXHRcdFx0aWYgKCB0aGlzWyAwIF0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0d3JhcC5pbnNlcnRCZWZvcmUoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gdGhpcztcblxuXHRcdFx0XHR3aGlsZSAoIGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQgKSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZWxlbTtcblx0XHRcdH0gKS5hcHBlbmQoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKCB0aGlzLCBpICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksXG5cdFx0XHRcdGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygpO1xuXG5cdFx0XHRpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHtcblx0XHRcdFx0Y29udGVudHMud3JhcEFsbCggaHRtbCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLmFwcGVuZCggaHRtbCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHR3cmFwOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgaHRtbElzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCBodG1sICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWxJc0Z1bmN0aW9uID8gaHRtbC5jYWxsKCB0aGlzLCBpICkgOiBodG1sICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdHVud3JhcDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHRoaXMucGFyZW50KCBzZWxlY3RvciApLm5vdCggXCJib2R5XCIgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTtcblx0XHR9ICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gIWpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSggZWxlbSApO1xufTtcbmpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gISEoIGVsZW0ub2Zmc2V0V2lkdGggfHwgZWxlbS5vZmZzZXRIZWlnaHQgfHwgZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApO1xufTtcblxuXG5cblxualF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSBmdW5jdGlvbigpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpO1xuXHR9IGNhdGNoICggZSApIHt9XG59O1xuXG52YXIgeGhyU3VjY2Vzc1N0YXR1cyA9IHtcblxuXHRcdC8vIEZpbGUgcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAwLCBhc3N1bWUgMjAwXG5cdFx0MDogMjAwLFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHQvLyAjMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDRcblx0XHQxMjIzOiAyMDRcblx0fSxcblx0eGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTtcblxuc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCBcIndpdGhDcmVkZW50aWFsc1wiIGluIHhoclN1cHBvcnRlZCApO1xuc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7XG5cbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0dmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrO1xuXG5cdC8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3Rcblx0aWYgKCBzdXBwb3J0LmNvcnMgfHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHZhciBpLFxuXHRcdFx0XHRcdHhociA9IG9wdGlvbnMueGhyKCk7XG5cblx0XHRcdFx0eGhyLm9wZW4oXG5cdFx0XHRcdFx0b3B0aW9ucy50eXBlLFxuXHRcdFx0XHRcdG9wdGlvbnMudXJsLFxuXHRcdFx0XHRcdG9wdGlvbnMuYXN5bmMsXG5cdFx0XHRcdFx0b3B0aW9ucy51c2VybmFtZSxcblx0XHRcdFx0XHRvcHRpb25zLnBhc3N3b3JkXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdGZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0XHR4aHJbIGkgXSA9IG9wdGlvbnMueGhyRmllbGRzWyBpIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7XG5cdFx0XHRcdFx0eGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyXG5cdFx0XHRcdC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmVcblx0XHRcdFx0Ly8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS5cblx0XHRcdFx0Ly8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApXG5cdFx0XHRcdC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLlxuXHRcdFx0XHRpZiAoICFvcHRpb25zLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdICkge1xuXHRcdFx0XHRcdGhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gPSBcIlhNTEh0dHBSZXF1ZXN0XCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZXQgaGVhZGVyc1xuXHRcdFx0XHRmb3IgKCBpIGluIGhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayA9IGVycm9yQ2FsbGJhY2sgPSB4aHIub25sb2FkID1cblx0XHRcdFx0XHRcdFx0XHR4aHIub25lcnJvciA9IHhoci5vbmFib3J0ID0geGhyLm9udGltZW91dCA9XG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiYWJvcnRcIiApIHtcblx0XHRcdFx0XHRcdFx0XHR4aHIuYWJvcnQoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gXCJlcnJvclwiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBPbiBhIG1hbnVhbCBuYXRpdmUgYWJvcnQsIElFOSB0aHJvd3Ncblx0XHRcdFx0XHRcdFx0XHQvLyBlcnJvcnMgb24gYW55IHByb3BlcnR5IGFjY2VzcyB0aGF0IGlzIG5vdCByZWFkeVN0YXRlXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlb2YgeGhyLnN0YXR1cyAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCAwLCBcImVycm9yXCIgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRmlsZTogcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlICM4NjA1LCAjMTQyMDdcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHRcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyU3VjY2Vzc1N0YXR1c1sgeGhyLnN0YXR1cyBdIHx8IHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dCxcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElFOSBoYXMgbm8gWEhSMiBidXQgdGhyb3dzIG9uIGJpbmFyeSAodHJhYy0xMTQyNilcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEZvciBYSFIyIG5vbi10ZXh0LCBsZXQgdGhlIGNhbGxlciBoYW5kbGUgaXQgKGdoLTI0OTgpXG5cdFx0XHRcdFx0XHRcdFx0XHQoIHhoci5yZXNwb25zZVR5cGUgfHwgXCJ0ZXh0XCIgKSAhPT0gXCJ0ZXh0XCIgIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCAhPT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgYmluYXJ5OiB4aHIucmVzcG9uc2UgfSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgdGV4dDogeGhyLnJlc3BvbnNlVGV4dCB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gTGlzdGVuIHRvIGV2ZW50c1xuXHRcdFx0XHR4aHIub25sb2FkID0gY2FsbGJhY2soKTtcblx0XHRcdFx0ZXJyb3JDYWxsYmFjayA9IHhoci5vbmVycm9yID0geGhyLm9udGltZW91dCA9IGNhbGxiYWNrKCBcImVycm9yXCIgKTtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHRcdFx0Ly8gVXNlIG9ucmVhZHlzdGF0ZWNoYW5nZSB0byByZXBsYWNlIG9uYWJvcnRcblx0XHRcdFx0Ly8gdG8gaGFuZGxlIHVuY2F1Z2h0IGFib3J0c1xuXHRcdFx0XHRpZiAoIHhoci5vbmFib3J0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0eGhyLm9uYWJvcnQgPSBlcnJvckNhbGxiYWNrO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgcmVhZHlTdGF0ZSBiZWZvcmUgdGltZW91dCBhcyBpdCBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFsbG93IG9uZXJyb3IgdG8gYmUgY2FsbGVkIGZpcnN0LFxuXHRcdFx0XHRcdFx0XHQvLyBidXQgdGhhdCB3aWxsIG5vdCBoYW5kbGUgYSBuYXRpdmUgYWJvcnRcblx0XHRcdFx0XHRcdFx0Ly8gQWxzbywgc2F2ZSBlcnJvckNhbGxiYWNrIHRvIGEgdmFyaWFibGVcblx0XHRcdFx0XHRcdFx0Ly8gYXMgeGhyLm9uZXJyb3IgY2Fubm90IGJlIGFjY2Vzc2VkXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIGFib3J0IGNhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gY2FsbGJhY2soIFwiYWJvcnRcIiApO1xuXG5cdFx0XHRcdHRyeSB7XG5cblx0XHRcdFx0XHQvLyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24pXG5cdFx0XHRcdFx0eGhyLnNlbmQoIG9wdGlvbnMuaGFzQ29udGVudCAmJiBvcHRpb25zLmRhdGEgfHwgbnVsbCApO1xuXHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdC8vICMxNDY4MzogT25seSByZXRocm93IGlmIHRoaXMgaGFzbid0IGJlZW4gbm90aWZpZWQgYXMgYW4gZXJyb3IgeWV0XG5cdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUHJldmVudCBhdXRvLWV4ZWN1dGlvbiBvZiBzY3JpcHRzIHdoZW4gbm8gZXhwbGljaXQgZGF0YVR5cGUgd2FzIHByb3ZpZGVkIChTZWUgZ2gtMjQzMilcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMuY29udGVudHMuc2NyaXB0ID0gZmFsc2U7XG5cdH1cbn0gKTtcblxuLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGVcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0YWNjZXB0czoge1xuXHRcdHNjcmlwdDogXCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIFwiICtcblx0XHRcdFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0XCJcblx0fSxcblx0Y29udGVudHM6IHtcblx0XHRzY3JpcHQ6IC9cXGIoPzpqYXZhfGVjbWEpc2NyaXB0XFxiL1xuXHR9LFxuXHRjb252ZXJ0ZXJzOiB7XG5cdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRzLmNhY2hlID0gZmFsc2U7XG5cdH1cblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMudHlwZSA9IFwiR0VUXCI7XG5cdH1cbn0gKTtcblxuLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0XG5qUXVlcnkuYWpheFRyYW5zcG9ydCggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cblx0Ly8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiBvciBmb3JjZWQtYnktYXR0cnMgcmVxdWVzdHNcblx0aWYgKCBzLmNyb3NzRG9tYWluIHx8IHMuc2NyaXB0QXR0cnMgKSB7XG5cdFx0dmFyIHNjcmlwdCwgY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBfLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0c2NyaXB0ID0galF1ZXJ5KCBcIjxzY3JpcHQ+XCIgKVxuXHRcdFx0XHRcdC5hdHRyKCBzLnNjcmlwdEF0dHJzIHx8IHt9IClcblx0XHRcdFx0XHQucHJvcCggeyBjaGFyc2V0OiBzLnNjcmlwdENoYXJzZXQsIHNyYzogcy51cmwgfSApXG5cdFx0XHRcdFx0Lm9uKCBcImxvYWQgZXJyb3JcIiwgY2FsbGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkge1xuXHRcdFx0XHRcdFx0c2NyaXB0LnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCBldnQudHlwZSA9PT0gXCJlcnJvclwiID8gNDA0IDogMjAwLCBldnQudHlwZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHQvLyBVc2UgbmF0aXZlIERPTSBtYW5pcHVsYXRpb24gdG8gYXZvaWQgb3VyIGRvbU1hbmlwIEFKQVggdHJpY2tlcnlcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0WyAwIF0gKTtcblx0XHRcdH0sXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIG9sZENhbGxiYWNrcyA9IFtdLFxuXHRyanNvbnAgPSAvKD0pXFw/KD89JnwkKXxcXD9cXD8vO1xuXG4vLyBEZWZhdWx0IGpzb25wIHNldHRpbmdzXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGpzb25wOiBcImNhbGxiYWNrXCIsXG5cdGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjYWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3AoKSB8fCAoIGpRdWVyeS5leHBhbmRvICsgXCJfXCIgKyAoIG5vbmNlLmd1aWQrKyApICk7XG5cdFx0dGhpc1sgY2FsbGJhY2sgXSA9IHRydWU7XG5cdFx0cmV0dXJuIGNhbGxiYWNrO1xuXHR9XG59ICk7XG5cbi8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29ucCByZXF1ZXN0c1xualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwianNvbiBqc29ucFwiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7XG5cblx0dmFyIGNhbGxiYWNrTmFtZSwgb3ZlcndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLFxuXHRcdGpzb25Qcm9wID0gcy5qc29ucCAhPT0gZmFsc2UgJiYgKCByanNvbnAudGVzdCggcy51cmwgKSA/XG5cdFx0XHRcInVybFwiIDpcblx0XHRcdHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKVxuXHRcdFx0XHRcdC5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgJiZcblx0XHRcdFx0cmpzb25wLnRlc3QoIHMuZGF0YSApICYmIFwiZGF0YVwiXG5cdFx0KTtcblxuXHQvLyBIYW5kbGUgaWZmIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUgaXMgXCJqc29ucFwiIG9yIHdlIGhhdmUgYSBwYXJhbWV0ZXIgdG8gc2V0XG5cdGlmICgganNvblByb3AgfHwgcy5kYXRhVHlwZXNbIDAgXSA9PT0gXCJqc29ucFwiICkge1xuXG5cdFx0Ly8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdFxuXHRcdGNhbGxiYWNrTmFtZSA9IHMuanNvbnBDYWxsYmFjayA9IGlzRnVuY3Rpb24oIHMuanNvbnBDYWxsYmFjayApID9cblx0XHRcdHMuanNvbnBDYWxsYmFjaygpIDpcblx0XHRcdHMuanNvbnBDYWxsYmFjaztcblxuXHRcdC8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVybCBvciBmb3JtIGRhdGFcblx0XHRpZiAoIGpzb25Qcm9wICkge1xuXHRcdFx0c1sganNvblByb3AgXSA9IHNbIGpzb25Qcm9wIF0ucmVwbGFjZSggcmpzb25wLCBcIiQxXCIgKyBjYWxsYmFja05hbWUgKTtcblx0XHR9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxzZSApIHtcblx0XHRcdHMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmpzb25wICsgXCI9XCIgKyBjYWxsYmFja05hbWU7XG5cdFx0fVxuXG5cdFx0Ly8gVXNlIGRhdGEgY29udmVydGVyIHRvIHJldHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4ZWN1dGlvblxuXHRcdHMuY29udmVydGVyc1sgXCJzY3JpcHQganNvblwiIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggIXJlc3BvbnNlQ29udGFpbmVyICkge1xuXHRcdFx0XHRqUXVlcnkuZXJyb3IoIGNhbGxiYWNrTmFtZSArIFwiIHdhcyBub3QgY2FsbGVkXCIgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXNwb25zZUNvbnRhaW5lclsgMCBdO1xuXHRcdH07XG5cblx0XHQvLyBGb3JjZSBqc29uIGRhdGFUeXBlXG5cdFx0cy5kYXRhVHlwZXNbIDAgXSA9IFwianNvblwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja1xuXHRcdG92ZXJ3cml0dGVuID0gd2luZG93WyBjYWxsYmFja05hbWUgXTtcblx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IGFyZ3VtZW50cztcblx0XHR9O1xuXG5cdFx0Ly8gQ2xlYW4tdXAgZnVuY3Rpb24gKGZpcmVzIGFmdGVyIGNvbnZlcnRlcnMpXG5cdFx0anFYSFIuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gSWYgcHJldmlvdXMgdmFsdWUgZGlkbid0IGV4aXN0IC0gcmVtb3ZlIGl0XG5cdFx0XHRpZiAoIG92ZXJ3cml0dGVuID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdGpRdWVyeSggd2luZG93ICkucmVtb3ZlUHJvcCggY2FsbGJhY2tOYW1lICk7XG5cblx0XHRcdC8vIE90aGVyd2lzZSByZXN0b3JlIHByZWV4aXN0aW5nIHZhbHVlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNhdmUgYmFjayBhcyBmcmVlXG5cdFx0XHRpZiAoIHNbIGNhbGxiYWNrTmFtZSBdICkge1xuXG5cdFx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHJlLXVzaW5nIHRoZSBvcHRpb25zIGRvZXNuJ3Qgc2NyZXcgdGhpbmdzIGFyb3VuZFxuXHRcdFx0XHRzLmpzb25wQ2FsbGJhY2sgPSBvcmlnaW5hbFNldHRpbmdzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHRcdFx0Ly8gU2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZVxuXHRcdFx0XHRvbGRDYWxsYmFja3MucHVzaCggY2FsbGJhY2tOYW1lICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENhbGwgaWYgaXQgd2FzIGEgZnVuY3Rpb24gYW5kIHdlIGhhdmUgYSByZXNwb25zZVxuXHRcdFx0aWYgKCByZXNwb25zZUNvbnRhaW5lciAmJiBpc0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiApICkge1xuXHRcdFx0XHRvdmVyd3JpdHRlbiggcmVzcG9uc2VDb250YWluZXJbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IG92ZXJ3cml0dGVuID0gdW5kZWZpbmVkO1xuXHRcdH0gKTtcblxuXHRcdC8vIERlbGVnYXRlIHRvIHNjcmlwdFxuXHRcdHJldHVybiBcInNjcmlwdFwiO1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA4IG9ubHlcbi8vIEluIFNhZmFyaSA4IGRvY3VtZW50cyBjcmVhdGVkIHZpYSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnRcbi8vIGNvbGxhcHNlIHNpYmxpbmcgZm9ybXM6IHRoZSBzZWNvbmQgb25lIGJlY29tZXMgYSBjaGlsZCBvZiB0aGUgZmlyc3Qgb25lLlxuLy8gQmVjYXVzZSBvZiB0aGF0LCB0aGlzIHNlY3VyaXR5IG1lYXN1cmUgaGFzIHRvIGJlIGRpc2FibGVkIGluIFNhZmFyaSA4LlxuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzMzN1xuc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgPSAoIGZ1bmN0aW9uKCkge1xuXHR2YXIgYm9keSA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApLmJvZHk7XG5cdGJvZHkuaW5uZXJIVE1MID0gXCI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPlwiO1xuXHRyZXR1cm4gYm9keS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMjtcbn0gKSgpO1xuXG5cbi8vIEFyZ3VtZW50IFwiZGF0YVwiIHNob3VsZCBiZSBzdHJpbmcgb2YgaHRtbFxuLy8gY29udGV4dCAob3B0aW9uYWwpOiBJZiBzcGVjaWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LFxuLy8gZGVmYXVsdHMgdG8gZG9jdW1lbnRcbi8vIGtlZXBTY3JpcHRzIChvcHRpb25hbCk6IElmIHRydWUsIHdpbGwgaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgaHRtbCBzdHJpbmdcbmpRdWVyeS5wYXJzZUhUTUwgPSBmdW5jdGlvbiggZGF0YSwgY29udGV4dCwga2VlcFNjcmlwdHMgKSB7XG5cdGlmICggdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGtlZXBTY3JpcHRzID0gY29udGV4dDtcblx0XHRjb250ZXh0ID0gZmFsc2U7XG5cdH1cblxuXHR2YXIgYmFzZSwgcGFyc2VkLCBzY3JpcHRzO1xuXG5cdGlmICggIWNvbnRleHQgKSB7XG5cblx0XHQvLyBTdG9wIHNjcmlwdHMgb3IgaW5saW5lIGV2ZW50IGhhbmRsZXJzIGZyb20gYmVpbmcgZXhlY3V0ZWQgaW1tZWRpYXRlbHlcblx0XHQvLyBieSB1c2luZyBkb2N1bWVudC5pbXBsZW1lbnRhdGlvblxuXHRcdGlmICggc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgKSB7XG5cdFx0XHRjb250ZXh0ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICk7XG5cblx0XHRcdC8vIFNldCB0aGUgYmFzZSBocmVmIGZvciB0aGUgY3JlYXRlZCBkb2N1bWVudFxuXHRcdFx0Ly8gc28gYW55IHBhcnNlZCBlbGVtZW50cyB3aXRoIFVSTHNcblx0XHRcdC8vIGFyZSBiYXNlZCBvbiB0aGUgZG9jdW1lbnQncyBVUkwgKGdoLTI5NjUpXG5cdFx0XHRiYXNlID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImJhc2VcIiApO1xuXHRcdFx0YmFzZS5ocmVmID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZjtcblx0XHRcdGNvbnRleHQuaGVhZC5hcHBlbmRDaGlsZCggYmFzZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250ZXh0ID0gZG9jdW1lbnQ7XG5cdFx0fVxuXHR9XG5cblx0cGFyc2VkID0gcnNpbmdsZVRhZy5leGVjKCBkYXRhICk7XG5cdHNjcmlwdHMgPSAha2VlcFNjcmlwdHMgJiYgW107XG5cblx0Ly8gU2luZ2xlIHRhZ1xuXHRpZiAoIHBhcnNlZCApIHtcblx0XHRyZXR1cm4gWyBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIHBhcnNlZFsgMSBdICkgXTtcblx0fVxuXG5cdHBhcnNlZCA9IGJ1aWxkRnJhZ21lbnQoIFsgZGF0YSBdLCBjb250ZXh0LCBzY3JpcHRzICk7XG5cblx0aWYgKCBzY3JpcHRzICYmIHNjcmlwdHMubGVuZ3RoICkge1xuXHRcdGpRdWVyeSggc2NyaXB0cyApLnJlbW92ZSgpO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIHBhcnNlZC5jaGlsZE5vZGVzICk7XG59O1xuXG5cbi8qKlxuICogTG9hZCBhIHVybCBpbnRvIGEgcGFnZVxuICovXG5qUXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7XG5cdHZhciBzZWxlY3RvciwgdHlwZSwgcmVzcG9uc2UsXG5cdFx0c2VsZiA9IHRoaXMsXG5cdFx0b2ZmID0gdXJsLmluZGV4T2YoIFwiIFwiICk7XG5cblx0aWYgKCBvZmYgPiAtMSApIHtcblx0XHRzZWxlY3RvciA9IHN0cmlwQW5kQ29sbGFwc2UoIHVybC5zbGljZSggb2ZmICkgKTtcblx0XHR1cmwgPSB1cmwuc2xpY2UoIDAsIG9mZiApO1xuXHR9XG5cblx0Ly8gSWYgaXQncyBhIGZ1bmN0aW9uXG5cdGlmICggaXNGdW5jdGlvbiggcGFyYW1zICkgKSB7XG5cblx0XHQvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFja1xuXHRcdGNhbGxiYWNrID0gcGFyYW1zO1xuXHRcdHBhcmFtcyA9IHVuZGVmaW5lZDtcblxuXHQvLyBPdGhlcndpc2UsIGJ1aWxkIGEgcGFyYW0gc3RyaW5nXG5cdH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSBcIm9iamVjdFwiICkge1xuXHRcdHR5cGUgPSBcIlBPU1RcIjtcblx0fVxuXG5cdC8vIElmIHdlIGhhdmUgZWxlbWVudHMgdG8gbW9kaWZ5LCBtYWtlIHRoZSByZXF1ZXN0XG5cdGlmICggc2VsZi5sZW5ndGggPiAwICkge1xuXHRcdGpRdWVyeS5hamF4KCB7XG5cdFx0XHR1cmw6IHVybCxcblxuXHRcdFx0Ly8gSWYgXCJ0eXBlXCIgdmFyaWFibGUgaXMgdW5kZWZpbmVkLCB0aGVuIFwiR0VUXCIgbWV0aG9kIHdpbGwgYmUgdXNlZC5cblx0XHRcdC8vIE1ha2UgdmFsdWUgb2YgdGhpcyBmaWVsZCBleHBsaWNpdCBzaW5jZVxuXHRcdFx0Ly8gdXNlciBjYW4gb3ZlcnJpZGUgaXQgdGhyb3VnaCBhamF4U2V0dXAgbWV0aG9kXG5cdFx0XHR0eXBlOiB0eXBlIHx8IFwiR0VUXCIsXG5cdFx0XHRkYXRhVHlwZTogXCJodG1sXCIsXG5cdFx0XHRkYXRhOiBwYXJhbXNcblx0XHR9ICkuZG9uZSggZnVuY3Rpb24oIHJlc3BvbnNlVGV4dCApIHtcblxuXHRcdFx0Ly8gU2F2ZSByZXNwb25zZSBmb3IgdXNlIGluIGNvbXBsZXRlIGNhbGxiYWNrXG5cdFx0XHRyZXNwb25zZSA9IGFyZ3VtZW50cztcblxuXHRcdFx0c2VsZi5odG1sKCBzZWxlY3RvciA/XG5cblx0XHRcdFx0Ly8gSWYgYSBzZWxlY3RvciB3YXMgc3BlY2lmaWVkLCBsb2NhdGUgdGhlIHJpZ2h0IGVsZW1lbnRzIGluIGEgZHVtbXkgZGl2XG5cdFx0XHRcdC8vIEV4Y2x1ZGUgc2NyaXB0cyB0byBhdm9pZCBJRSAnUGVybWlzc2lvbiBEZW5pZWQnIGVycm9yc1xuXHRcdFx0XHRqUXVlcnkoIFwiPGRpdj5cIiApLmFwcGVuZCggalF1ZXJ5LnBhcnNlSFRNTCggcmVzcG9uc2VUZXh0ICkgKS5maW5kKCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgdXNlIHRoZSBmdWxsIHJlc3VsdFxuXHRcdFx0XHRyZXNwb25zZVRleHQgKTtcblxuXHRcdC8vIElmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJkYXRhXCIsIFwic3RhdHVzXCIsIFwianFYSFJcIlxuXHRcdC8vIGJ1dCB0aGV5IGFyZSBpZ25vcmVkIGJlY2F1c2UgcmVzcG9uc2Ugd2FzIHNldCBhYm92ZS5cblx0XHQvLyBJZiBpdCBmYWlscywgdGhpcyBmdW5jdGlvbiBnZXRzIFwianFYSFJcIiwgXCJzdGF0dXNcIiwgXCJlcnJvclwiXG5cdFx0fSApLmFsd2F5cyggY2FsbGJhY2sgJiYgZnVuY3Rpb24oIGpxWEhSLCBzdGF0dXMgKSB7XG5cdFx0XHRzZWxmLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjYWxsYmFjay5hcHBseSggdGhpcywgcmVzcG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuXG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4galF1ZXJ5LmdyZXAoIGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTtcblx0fSApLmxlbmd0aDtcbn07XG5cblxuXG5cbmpRdWVyeS5vZmZzZXQgPSB7XG5cdHNldE9mZnNldDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGkgKSB7XG5cdFx0dmFyIGN1clBvc2l0aW9uLCBjdXJMZWZ0LCBjdXJDU1NUb3AsIGN1clRvcCwgY3VyT2Zmc2V0LCBjdXJDU1NMZWZ0LCBjYWxjdWxhdGVQb3NpdGlvbixcblx0XHRcdHBvc2l0aW9uID0galF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICksXG5cdFx0XHRjdXJFbGVtID0galF1ZXJ5KCBlbGVtICksXG5cdFx0XHRwcm9wcyA9IHt9O1xuXG5cdFx0Ly8gU2V0IHBvc2l0aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbVxuXHRcdGlmICggcG9zaXRpb24gPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRlbGVtLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuXHRcdH1cblxuXHRcdGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCk7XG5cdFx0Y3VyQ1NTVG9wID0galF1ZXJ5LmNzcyggZWxlbSwgXCJ0b3BcIiApO1xuXHRcdGN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImxlZnRcIiApO1xuXHRcdGNhbGN1bGF0ZVBvc2l0aW9uID0gKCBwb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiIHx8IHBvc2l0aW9uID09PSBcImZpeGVkXCIgKSAmJlxuXHRcdFx0KCBjdXJDU1NUb3AgKyBjdXJDU1NMZWZ0ICkuaW5kZXhPZiggXCJhdXRvXCIgKSA+IC0xO1xuXG5cdFx0Ly8gTmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXJcblx0XHQvLyB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWRcblx0XHRpZiAoIGNhbGN1bGF0ZVBvc2l0aW9uICkge1xuXHRcdFx0Y3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7XG5cdFx0XHRjdXJUb3AgPSBjdXJQb3NpdGlvbi50b3A7XG5cdFx0XHRjdXJMZWZ0ID0gY3VyUG9zaXRpb24ubGVmdDtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwO1xuXHRcdFx0Y3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwO1xuXHRcdH1cblxuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0aW9ucyApICkge1xuXG5cdFx0XHQvLyBVc2UgalF1ZXJ5LmV4dGVuZCBoZXJlIHRvIGFsbG93IG1vZGlmaWNhdGlvbiBvZiBjb29yZGluYXRlcyBhcmd1bWVudCAoZ2gtMTg0OClcblx0XHRcdG9wdGlvbnMgPSBvcHRpb25zLmNhbGwoIGVsZW0sIGksIGpRdWVyeS5leHRlbmQoIHt9LCBjdXJPZmZzZXQgKSApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0aW9ucy50b3AgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLnRvcCA9ICggb3B0aW9ucy50b3AgLSBjdXJPZmZzZXQudG9wICkgKyBjdXJUb3A7XG5cdFx0fVxuXHRcdGlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy5sZWZ0ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVmdDtcblx0XHR9XG5cblx0XHRpZiAoIFwidXNpbmdcIiBpbiBvcHRpb25zICkge1xuXHRcdFx0b3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggdHlwZW9mIHByb3BzLnRvcCA9PT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0cHJvcHMudG9wICs9IFwicHhcIjtcblx0XHRcdH1cblx0XHRcdGlmICggdHlwZW9mIHByb3BzLmxlZnQgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHByb3BzLmxlZnQgKz0gXCJweFwiO1xuXHRcdFx0fVxuXHRcdFx0Y3VyRWxlbS5jc3MoIHByb3BzICk7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0Ly8gb2Zmc2V0KCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgYm9yZGVyIGJveCB0byB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9mZnNldDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBQcmVzZXJ2ZSBjaGFpbmluZyBmb3Igc2V0dGVyXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHRoaXMgOlxuXHRcdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRcdGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7XG5cdFx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHR2YXIgcmVjdCwgd2luLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXTtcblxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHplcm9zIGZvciBkaXNjb25uZWN0ZWQgYW5kIGhpZGRlbiAoZGlzcGxheTogbm9uZSkgZWxlbWVudHMgKGdoLTIzMTApXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYVxuXHRcdC8vIGRpc2Nvbm5lY3RlZCBub2RlIGluIElFIHRocm93cyBhbiBlcnJvclxuXHRcdGlmICggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblx0XHR9XG5cblx0XHQvLyBHZXQgZG9jdW1lbnQtcmVsYXRpdmUgcG9zaXRpb24gYnkgYWRkaW5nIHZpZXdwb3J0IHNjcm9sbCB0byB2aWV3cG9ydC1yZWxhdGl2ZSBnQkNSXG5cdFx0cmVjdCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0d2luID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IHJlY3QudG9wICsgd2luLnBhZ2VZT2Zmc2V0LFxuXHRcdFx0bGVmdDogcmVjdC5sZWZ0ICsgd2luLnBhZ2VYT2Zmc2V0XG5cdFx0fTtcblx0fSxcblxuXHQvLyBwb3NpdGlvbigpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIG1hcmdpbiBib3ggdG8gaXRzIG9mZnNldCBwYXJlbnQncyBwYWRkaW5nIGJveFxuXHQvLyBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBiZWhhdmlvciBvZiBDU1MgYWJzb2x1dGUgcG9zaXRpb25pbmdcblx0cG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggIXRoaXNbIDAgXSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsIGRvYyxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRwYXJlbnRPZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuXG5cdFx0Ly8gcG9zaXRpb246Zml4ZWQgZWxlbWVudHMgYXJlIG9mZnNldCBmcm9tIHRoZSB2aWV3cG9ydCwgd2hpY2ggaXRzZWxmIGFsd2F5cyBoYXMgemVybyBvZmZzZXRcblx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApID09PSBcImZpeGVkXCIgKSB7XG5cblx0XHRcdC8vIEFzc3VtZSBwb3NpdGlvbjpmaXhlZCBpbXBsaWVzIGF2YWlsYWJpbGl0eSBvZiBnZXRCb3VuZGluZ0NsaWVudFJlY3Rcblx0XHRcdG9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0b2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTtcblxuXHRcdFx0Ly8gQWNjb3VudCBmb3IgdGhlICpyZWFsKiBvZmZzZXQgcGFyZW50LCB3aGljaCBjYW4gYmUgdGhlIGRvY3VtZW50IG9yIGl0cyByb290IGVsZW1lbnRcblx0XHRcdC8vIHdoZW4gYSBzdGF0aWNhbGx5IHBvc2l0aW9uZWQgZWxlbWVudCBpcyBpZGVudGlmaWVkXG5cdFx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0XHRvZmZzZXRQYXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudCB8fCBkb2MuZG9jdW1lbnRFbGVtZW50O1xuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiZcblx0XHRcdFx0KCBvZmZzZXRQYXJlbnQgPT09IGRvYy5ib2R5IHx8IG9mZnNldFBhcmVudCA9PT0gZG9jLmRvY3VtZW50RWxlbWVudCApICYmXG5cdFx0XHRcdGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQgIT09IGVsZW0gJiYgb2Zmc2V0UGFyZW50Lm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIEluY29ycG9yYXRlIGJvcmRlcnMgaW50byBpdHMgb2Zmc2V0LCBzaW5jZSB0aGV5IGFyZSBvdXRzaWRlIGl0cyBjb250ZW50IG9yaWdpblxuXHRcdFx0XHRwYXJlbnRPZmZzZXQgPSBqUXVlcnkoIG9mZnNldFBhcmVudCApLm9mZnNldCgpO1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQudG9wICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJUb3BXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJMZWZ0V2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnNcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBvZmZzZXQudG9wIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luVG9wXCIsIHRydWUgKSxcblx0XHRcdGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiwgdHJ1ZSApXG5cdFx0fTtcblx0fSxcblxuXHQvLyBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBkb2N1bWVudEVsZW1lbnQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly8gMSkgRm9yIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgaWZyYW1lIHdpdGhvdXQgb2Zmc2V0UGFyZW50LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVyblxuXHQvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3dcblx0Ly8gMikgRm9yIHRoZSBoaWRkZW4gb3IgZGV0YWNoZWQgZWxlbWVudFxuXHQvLyAzKSBGb3IgYm9keSBvciBodG1sIGVsZW1lbnQsIGkuZS4gaW4gY2FzZSBvZiB0aGUgaHRtbCBub2RlIC0gaXQgd2lsbCByZXR1cm4gaXRzZWxmXG5cdC8vXG5cdC8vIGJ1dCB0aG9zZSBleGNlcHRpb25zIHdlcmUgbmV2ZXIgcHJlc2VudGVkIGFzIGEgcmVhbCBsaWZlIHVzZS1jYXNlc1xuXHQvLyBhbmQgbWlnaHQgYmUgY29uc2lkZXJlZCBhcyBtb3JlIHByZWZlcmFibGUgcmVzdWx0cy5cblx0Ly9cblx0Ly8gVGhpcyBsb2dpYywgaG93ZXZlciwgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGNhbiBjaGFuZ2UgYXQgYW55IHBvaW50IGluIHRoZSBmdXR1cmVcblx0b2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50O1xuXG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJiBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0OiBcInBhZ2VYT2Zmc2V0XCIsIHNjcm9sbFRvcDogXCJwYWdlWU9mZnNldFwiIH0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7XG5cdHZhciB0b3AgPSBcInBhZ2VZT2Zmc2V0XCIgPT09IHByb3A7XG5cblx0alF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwgdmFsICkge1xuXG5cdFx0XHQvLyBDb2FsZXNjZSBkb2N1bWVudHMgYW5kIHdpbmRvd3Ncblx0XHRcdHZhciB3aW47XG5cdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW07XG5cdFx0XHR9IGVsc2UgaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtLmRlZmF1bHRWaWV3O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB3aW4gKSB7XG5cdFx0XHRcdHdpbi5zY3JvbGxUbyhcblx0XHRcdFx0XHQhdG9wID8gdmFsIDogd2luLnBhZ2VYT2Zmc2V0LFxuXHRcdFx0XHRcdHRvcCA/IHZhbCA6IHdpbi5wYWdlWU9mZnNldFxuXHRcdFx0XHQpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtWyBtZXRob2QgXSA9IHZhbDtcblx0XHRcdH1cblx0XHR9LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9O1xufSApO1xuXG4vLyBTdXBwb3J0OiBTYWZhcmkgPD03IC0gOS4xLCBDaHJvbWUgPD0zNyAtIDQ5XG4vLyBBZGQgdGhlIHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5nIGpRdWVyeS5mbi5wb3NpdGlvblxuLy8gV2Via2l0IGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDg0XG4vLyBCbGluayBidWc6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTU4OTM0N1xuLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodDtcbi8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNzcyBtb2R1bGUgZGVwZW5kIG9uIHRoZSBvZmZzZXQgbW9kdWxlLCBqdXN0IGNoZWNrIGZvciBpdCBoZXJlXG5qUXVlcnkuZWFjaCggWyBcInRvcFwiLCBcImxlZnRcIiBdLCBmdW5jdGlvbiggX2ksIHByb3AgKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJvcCBdID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnBpeGVsUG9zaXRpb24sXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdFx0Y29tcHV0ZWQgPSBjdXJDU1MoIGVsZW0sIHByb3AgKTtcblxuXHRcdFx0XHQvLyBJZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXRcblx0XHRcdFx0cmV0dXJuIHJudW1ub25weC50ZXN0KCBjb21wdXRlZCApID9cblx0XHRcdFx0XHRqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyBcInB4XCIgOlxuXHRcdFx0XHRcdGNvbXB1dGVkO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn0gKTtcblxuXG4vLyBDcmVhdGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IEhlaWdodDogXCJoZWlnaHRcIiwgV2lkdGg6IFwid2lkdGhcIiB9LCBmdW5jdGlvbiggbmFtZSwgdHlwZSApIHtcblx0alF1ZXJ5LmVhY2goIHsgcGFkZGluZzogXCJpbm5lclwiICsgbmFtZSwgY29udGVudDogdHlwZSwgXCJcIjogXCJvdXRlclwiICsgbmFtZSB9LFxuXHRcdGZ1bmN0aW9uKCBkZWZhdWx0RXh0cmEsIGZ1bmNOYW1lICkge1xuXG5cdFx0Ly8gTWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoXG5cdFx0alF1ZXJ5LmZuWyBmdW5jTmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgY2hhaW5hYmxlID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9PSBcImJvb2xlYW5cIiApLFxuXHRcdFx0XHRleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/IFwibWFyZ2luXCIgOiBcImJvcmRlclwiICk7XG5cblx0XHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIGRvYztcblxuXHRcdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyAkKCB3aW5kb3cgKS5vdXRlcldpZHRoL0hlaWdodCByZXR1cm4gdy9oIGluY2x1ZGluZyBzY3JvbGxiYXJzIChnaC0xNzI5KVxuXHRcdFx0XHRcdHJldHVybiBmdW5jTmFtZS5pbmRleE9mKCBcIm91dGVyXCIgKSA9PT0gMCA/XG5cdFx0XHRcdFx0XHRlbGVtWyBcImlubmVyXCIgKyBuYW1lIF0gOlxuXHRcdFx0XHRcdFx0ZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIFwiY2xpZW50XCIgKyBuYW1lIF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDtcblxuXHRcdFx0XHRcdC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSBvciBjbGllbnRbV2lkdGgvSGVpZ2h0XSxcblx0XHRcdFx0XHQvLyB3aGljaGV2ZXIgaXMgZ3JlYXRlc3Rcblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwic2Nyb2xsXCIgKyBuYW1lIF0sIGRvY1sgXCJzY3JvbGxcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJvZmZzZXRcIiArIG5hbWUgXSwgZG9jWyBcIm9mZnNldFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZG9jWyBcImNsaWVudFwiICsgbmFtZSBdXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblxuXHRcdFx0XHRcdC8vIEdldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxvYXRcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCBleHRyYSApIDpcblxuXHRcdFx0XHRcdC8vIFNldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnRcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApO1xuXHRcdFx0fSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUgKTtcblx0XHR9O1xuXHR9ICk7XG59ICk7XG5cblxualF1ZXJ5LmVhY2goIFtcblx0XCJhamF4U3RhcnRcIixcblx0XCJhamF4U3RvcFwiLFxuXHRcImFqYXhDb21wbGV0ZVwiLFxuXHRcImFqYXhFcnJvclwiLFxuXHRcImFqYXhTdWNjZXNzXCIsXG5cdFwiYWpheFNlbmRcIlxuXSwgZnVuY3Rpb24oIF9pLCB0eXBlICkge1xuXHRqUXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZSwgZm4gKTtcblx0fTtcbn0gKTtcblxuXG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdGJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub2ZmKCB0eXBlcywgbnVsbCwgZm4gKTtcblx0fSxcblxuXHRkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7XG5cblx0XHQvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApXG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgP1xuXHRcdFx0dGhpcy5vZmYoIHNlbGVjdG9yLCBcIioqXCIgKSA6XG5cdFx0XHR0aGlzLm9mZiggdHlwZXMsIHNlbGVjdG9yIHx8IFwiKipcIiwgZm4gKTtcblx0fSxcblxuXHRob3ZlcjogZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7XG5cdFx0cmV0dXJuIHRoaXMubW91c2VlbnRlciggZm5PdmVyICkubW91c2VsZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goICggXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBcIiArXG5cdFwibW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgXCIgK1xuXHRcImNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgY29udGV4dG1lbnVcIiApLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cblx0XHQvLyBIYW5kbGUgZXZlbnQgYmluZGluZ1xuXHRcdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkge1xuXHRcdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID9cblx0XHRcdFx0dGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6XG5cdFx0XHRcdHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHRcdH07XG5cdH0gKTtcblxuXG5cblxuLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5XG4vLyBNYWtlIHN1cmUgd2UgdHJpbSBCT00gYW5kIE5CU1BcbnZhciBydHJpbSA9IC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZztcblxuLy8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55XG4vLyBhcmd1bWVudHMuXG4vLyBqUXVlcnkucHJveHkgaXMgZGVwcmVjYXRlZCB0byBwcm9tb3RlIHN0YW5kYXJkcyAoc3BlY2lmaWNhbGx5IEZ1bmN0aW9uI2JpbmQpXG4vLyBIb3dldmVyLCBpdCBpcyBub3Qgc2xhdGVkIGZvciByZW1vdmFsIGFueSB0aW1lIHNvb25cbmpRdWVyeS5wcm94eSA9IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHtcblx0dmFyIHRtcCwgYXJncywgcHJveHk7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHR0bXAgPSBmblsgY29udGV4dCBdO1xuXHRcdGNvbnRleHQgPSBmbjtcblx0XHRmbiA9IHRtcDtcblx0fVxuXG5cdC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjXG5cdC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuXG5cdGlmICggIWlzRnVuY3Rpb24oIGZuICkgKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIFNpbXVsYXRlZCBiaW5kXG5cdGFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTtcblx0cHJveHkgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTtcblx0fTtcblxuXHQvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWRcblx0cHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKys7XG5cblx0cmV0dXJuIHByb3h5O1xufTtcblxualF1ZXJ5LmhvbGRSZWFkeSA9IGZ1bmN0aW9uKCBob2xkICkge1xuXHRpZiAoIGhvbGQgKSB7XG5cdFx0alF1ZXJ5LnJlYWR5V2FpdCsrO1xuXHR9IGVsc2Uge1xuXHRcdGpRdWVyeS5yZWFkeSggdHJ1ZSApO1xuXHR9XG59O1xualF1ZXJ5LmlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xualF1ZXJ5LnBhcnNlSlNPTiA9IEpTT04ucGFyc2U7XG5qUXVlcnkubm9kZU5hbWUgPSBub2RlTmFtZTtcbmpRdWVyeS5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcbmpRdWVyeS5pc1dpbmRvdyA9IGlzV2luZG93O1xualF1ZXJ5LmNhbWVsQ2FzZSA9IGNhbWVsQ2FzZTtcbmpRdWVyeS50eXBlID0gdG9UeXBlO1xuXG5qUXVlcnkubm93ID0gRGF0ZS5ub3c7XG5cbmpRdWVyeS5pc051bWVyaWMgPSBmdW5jdGlvbiggb2JqICkge1xuXG5cdC8vIEFzIG9mIGpRdWVyeSAzLjAsIGlzTnVtZXJpYyBpcyBsaW1pdGVkIHRvXG5cdC8vIHN0cmluZ3MgYW5kIG51bWJlcnMgKHByaW1pdGl2ZXMgb3Igb2JqZWN0cylcblx0Ly8gdGhhdCBjYW4gYmUgY29lcmNlZCB0byBmaW5pdGUgbnVtYmVycyAoZ2gtMjY2Milcblx0dmFyIHR5cGUgPSBqUXVlcnkudHlwZSggb2JqICk7XG5cdHJldHVybiAoIHR5cGUgPT09IFwibnVtYmVyXCIgfHwgdHlwZSA9PT0gXCJzdHJpbmdcIiApICYmXG5cblx0XHQvLyBwYXJzZUZsb2F0IE5hTnMgbnVtZXJpYy1jYXN0IGZhbHNlIHBvc2l0aXZlcyAoXCJcIilcblx0XHQvLyAuLi5idXQgbWlzaW50ZXJwcmV0cyBsZWFkaW5nLW51bWJlciBzdHJpbmdzLCBwYXJ0aWN1bGFybHkgaGV4IGxpdGVyYWxzIChcIjB4Li4uXCIpXG5cdFx0Ly8gc3VidHJhY3Rpb24gZm9yY2VzIGluZmluaXRpZXMgdG8gTmFOXG5cdFx0IWlzTmFOKCBvYmogLSBwYXJzZUZsb2F0KCBvYmogKSApO1xufTtcblxualF1ZXJ5LnRyaW0gPSBmdW5jdGlvbiggdGV4dCApIHtcblx0cmV0dXJuIHRleHQgPT0gbnVsbCA/XG5cdFx0XCJcIiA6XG5cdFx0KCB0ZXh0ICsgXCJcIiApLnJlcGxhY2UoIHJ0cmltLCBcIlwiICk7XG59O1xuXG5cblxuLy8gUmVnaXN0ZXIgYXMgYSBuYW1lZCBBTUQgbW9kdWxlLCBzaW5jZSBqUXVlcnkgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIG90aGVyXG4vLyBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLCBidXQgbm90IHZpYSBhIHByb3BlciBjb25jYXRlbmF0aW9uIHNjcmlwdCB0aGF0XG4vLyB1bmRlcnN0YW5kcyBhbm9ueW1vdXMgQU1EIG1vZHVsZXMuIEEgbmFtZWQgQU1EIGlzIHNhZmVzdCBhbmQgbW9zdCByb2J1c3Rcbi8vIHdheSB0byByZWdpc3Rlci4gTG93ZXJjYXNlIGpxdWVyeSBpcyB1c2VkIGJlY2F1c2UgQU1EIG1vZHVsZSBuYW1lcyBhcmVcbi8vIGRlcml2ZWQgZnJvbSBmaWxlIG5hbWVzLCBhbmQgalF1ZXJ5IGlzIG5vcm1hbGx5IGRlbGl2ZXJlZCBpbiBhIGxvd2VyY2FzZVxuLy8gZmlsZSBuYW1lLiBEbyB0aGlzIGFmdGVyIGNyZWF0aW5nIHRoZSBnbG9iYWwgc28gdGhhdCBpZiBhbiBBTUQgbW9kdWxlIHdhbnRzXG4vLyB0byBjYWxsIG5vQ29uZmxpY3QgdG8gaGlkZSB0aGlzIHZlcnNpb24gb2YgalF1ZXJ5LCBpdCB3aWxsIHdvcmsuXG5cbi8vIE5vdGUgdGhhdCBmb3IgbWF4aW11bSBwb3J0YWJpbGl0eSwgbGlicmFyaWVzIHRoYXQgYXJlIG5vdCBqUXVlcnkgc2hvdWxkXG4vLyBkZWNsYXJlIHRoZW1zZWx2ZXMgYXMgYW5vbnltb3VzIG1vZHVsZXMsIGFuZCBhdm9pZCBzZXR0aW5nIGEgZ2xvYmFsIGlmIGFuXG4vLyBBTUQgbG9hZGVyIGlzIHByZXNlbnQuIGpRdWVyeSBpcyBhIHNwZWNpYWwgY2FzZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzL3dpa2kvVXBkYXRpbmctZXhpc3RpbmctbGlicmFyaWVzI3dpa2ktYW5vblxuXG5pZiAoIHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kICkge1xuXHRkZWZpbmUoIFwianF1ZXJ5XCIsIFtdLCBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5O1xuXHR9ICk7XG59XG5cblxuXG5cbnZhclxuXG5cdC8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfalF1ZXJ5ID0gd2luZG93LmpRdWVyeSxcblxuXHQvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfJCA9IHdpbmRvdy4kO1xuXG5qUXVlcnkubm9Db25mbGljdCA9IGZ1bmN0aW9uKCBkZWVwICkge1xuXHRpZiAoIHdpbmRvdy4kID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LiQgPSBfJDtcblx0fVxuXG5cdGlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LmpRdWVyeSA9IF9qUXVlcnk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5O1xufTtcblxuLy8gRXhwb3NlIGpRdWVyeSBhbmQgJCBpZGVudGlmaWVycywgZXZlbiBpbiBBTURcbi8vICgjNzEwMiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzU1Nylcbi8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKCMxMzU2NilcbmlmICggdHlwZW9mIG5vR2xvYmFsID09PSBcInVuZGVmaW5lZFwiICkge1xuXHR3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7XG59XG5cblxuXG5cbnJldHVybiBqUXVlcnk7XG59ICk7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGFWaWV3O1xuIiwidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB0aGUgbWF4aW11bSBsZW5ndGggYW5kIGluZGV4IG9mIGFuIGFycmF5LiAqL1xudmFyIE1BWF9BUlJBWV9MRU5HVEggPSA0Mjk0OTY3Mjk1O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBsYXp5IHdyYXBwZXIgb2JqZWN0IHdoaWNoIHdyYXBzIGB2YWx1ZWAgdG8gZW5hYmxlIGxhenkgZXZhbHVhdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICovXG5mdW5jdGlvbiBMYXp5V3JhcHBlcih2YWx1ZSkge1xuICB0aGlzLl9fd3JhcHBlZF9fID0gdmFsdWU7XG4gIHRoaXMuX19hY3Rpb25zX18gPSBbXTtcbiAgdGhpcy5fX2Rpcl9fID0gMTtcbiAgdGhpcy5fX2ZpbHRlcmVkX18gPSBmYWxzZTtcbiAgdGhpcy5fX2l0ZXJhdGVlc19fID0gW107XG4gIHRoaXMuX190YWtlQ291bnRfXyA9IE1BWF9BUlJBWV9MRU5HVEg7XG4gIHRoaXMuX192aWV3c19fID0gW107XG59XG5cbi8vIEVuc3VyZSBgTGF6eVdyYXBwZXJgIGlzIGFuIGluc3RhbmNlIG9mIGBiYXNlTG9kYXNoYC5cbkxhenlXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpO1xuTGF6eVdyYXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGF6eVdyYXBwZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTGF6eVdyYXBwZXI7XG4iLCJ2YXIgbGlzdENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVDbGVhcicpLFxuICAgIGxpc3RDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZURlbGV0ZScpLFxuICAgIGxpc3RDYWNoZUdldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUdldCcpLFxuICAgIGxpc3RDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUhhcycpLFxuICAgIGxpc3RDYWNoZVNldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlzdENhY2hlO1xuIiwidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgYmFzZUxvZGFzaCA9IHJlcXVpcmUoJy4vX2Jhc2VMb2Rhc2gnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBjb25zdHJ1Y3RvciBmb3IgY3JlYXRpbmcgYGxvZGFzaGAgd3JhcHBlciBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICogQHBhcmFtIHtib29sZWFufSBbY2hhaW5BbGxdIEVuYWJsZSBleHBsaWNpdCBtZXRob2QgY2hhaW4gc2VxdWVuY2VzLlxuICovXG5mdW5jdGlvbiBMb2Rhc2hXcmFwcGVyKHZhbHVlLCBjaGFpbkFsbCkge1xuICB0aGlzLl9fd3JhcHBlZF9fID0gdmFsdWU7XG4gIHRoaXMuX19hY3Rpb25zX18gPSBbXTtcbiAgdGhpcy5fX2NoYWluX18gPSAhIWNoYWluQWxsO1xuICB0aGlzLl9faW5kZXhfXyA9IDA7XG4gIHRoaXMuX192YWx1ZXNfXyA9IHVuZGVmaW5lZDtcbn1cblxuTG9kYXNoV3JhcHBlci5wcm90b3R5cGUgPSBiYXNlQ3JlYXRlKGJhc2VMb2Rhc2gucHJvdG90eXBlKTtcbkxvZGFzaFdyYXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9kYXNoV3JhcHBlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBMb2Rhc2hXcmFwcGVyO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFByb21pc2UgPSBnZXROYXRpdmUocm9vdCwgJ1Byb21pc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBQcm9taXNlO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBTZXQgPSBnZXROYXRpdmUocm9vdCwgJ1NldCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNldDtcbiIsInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyksXG4gICAgc2V0Q2FjaGVBZGQgPSByZXF1aXJlKCcuL19zZXRDYWNoZUFkZCcpLFxuICAgIHNldENhY2hlSGFzID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVIYXMnKTtcblxuLyoqXG4gKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGU7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cblNldENhY2hlLnByb3RvdHlwZS5hZGQgPSBTZXRDYWNoZS5wcm90b3R5cGUucHVzaCA9IHNldENhY2hlQWRkO1xuU2V0Q2FjaGUucHJvdG90eXBlLmhhcyA9IHNldENhY2hlSGFzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNldENhY2hlO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIHN0YWNrQ2xlYXIgPSByZXF1aXJlKCcuL19zdGFja0NsZWFyJyksXG4gICAgc3RhY2tEZWxldGUgPSByZXF1aXJlKCcuL19zdGFja0RlbGV0ZScpLFxuICAgIHN0YWNrR2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tHZXQnKSxcbiAgICBzdGFja0hhcyA9IHJlcXVpcmUoJy4vX3N0YWNrSGFzJyksXG4gICAgc3RhY2tTZXQgPSByZXF1aXJlKCcuL19zdGFja1NldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhY2s7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gVWludDhBcnJheTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdlYWtNYXA7XG4iLCIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUFnZ3JlZ2F0b3JgIGZvciBhcnJheXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGBhY2N1bXVsYXRvcmAgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICogQHBhcmFtIHtPYmplY3R9IGFjY3VtdWxhdG9yIFRoZSBpbml0aWFsIGFnZ3JlZ2F0ZWQgb2JqZWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBhY2N1bXVsYXRvcmAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5QWdncmVnYXRvcihhcnJheSwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBzZXR0ZXIoYWNjdW11bGF0b3IsIHZhbHVlLCBpdGVyYXRlZSh2YWx1ZSksIGFycmF5KTtcbiAgfVxuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlBZ2dyZWdhdG9yO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RWFjaChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkgPT09IGZhbHNlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RWFjaDtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUZpbHRlcjtcbiIsInZhciBiYXNlSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Jhc2VJbmRleE9mJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluY2x1ZGVzYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIHNwZWNpZnlpbmcgYW4gaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheUluY2x1ZGVzKGFycmF5LCB2YWx1ZSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiAhIWxlbmd0aCAmJiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIDApID4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlJbmNsdWRlcztcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhcnJheUluY2x1ZGVzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgY29tcGFyYXRvci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXNXaXRoKGFycmF5LCB2YWx1ZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIGFycmF5W2luZGV4XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TWFwO1xuIiwiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5UHVzaDtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlTb21lO1xuIiwidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnblZhbHVlO1xuIiwidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc29jSW5kZXhPZjtcbiIsInZhciBiYXNlRWFjaCA9IHJlcXVpcmUoJy4vX2Jhc2VFYWNoJyk7XG5cbi8qKlxuICogQWdncmVnYXRlcyBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAgb24gYGFjY3VtdWxhdG9yYCB3aXRoIGtleXMgdHJhbnNmb3JtZWRcbiAqIGJ5IGBpdGVyYXRlZWAgYW5kIHZhbHVlcyBzZXQgYnkgYHNldHRlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGBhY2N1bXVsYXRvcmAgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICogQHBhcmFtIHtPYmplY3R9IGFjY3VtdWxhdG9yIFRoZSBpbml0aWFsIGFnZ3JlZ2F0ZWQgb2JqZWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBhY2N1bXVsYXRvcmAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBZ2dyZWdhdG9yKGNvbGxlY3Rpb24sIHNldHRlciwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yKSB7XG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHtcbiAgICBzZXR0ZXIoYWNjdW11bGF0b3IsIHZhbHVlLCBpdGVyYXRlZSh2YWx1ZSksIGNvbGxlY3Rpb24pO1xuICB9KTtcbiAgcmV0dXJuIGFjY3VtdWxhdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBZ2dyZWdhdG9yO1xuIiwidmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXNzaWduVmFsdWVgIGFuZCBgYXNzaWduTWVyZ2VWYWx1ZWAgd2l0aG91dFxuICogdmFsdWUgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSA9PSAnX19wcm90b19fJyAmJiBkZWZpbmVQcm9wZXJ0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7XG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduVmFsdWU7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdENyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY3JlYXRlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGFzc2lnbmluZ1xuICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbnZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBvYmplY3QoKSB7fVxuICByZXR1cm4gZnVuY3Rpb24ocHJvdG8pIHtcbiAgICBpZiAoIWlzT2JqZWN0KHByb3RvKSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0Q3JlYXRlKHByb3RvKTtcbiAgICB9XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xuICAgIHZhciByZXN1bHQgPSBuZXcgb2JqZWN0O1xuICAgIG9iamVjdC5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUNyZWF0ZTtcbiIsInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKSxcbiAgICBhcnJheUluY2x1ZGVzV2l0aCA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXNXaXRoJyksXG4gICAgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uZGlmZmVyZW5jZWAgd2l0aG91dCBzdXBwb3J0XG4gKiBmb3IgZXhjbHVkaW5nIG11bHRpcGxlIGFycmF5cyBvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VEaWZmZXJlbmNlKGFycmF5LCB2YWx1ZXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzLFxuICAgICAgaXNDb21tb24gPSB0cnVlLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gW10sXG4gICAgICB2YWx1ZXNMZW5ndGggPSB2YWx1ZXMubGVuZ3RoO1xuXG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoaXRlcmF0ZWUpIHtcbiAgICB2YWx1ZXMgPSBhcnJheU1hcCh2YWx1ZXMsIGJhc2VVbmFyeShpdGVyYXRlZSkpO1xuICB9XG4gIGlmIChjb21wYXJhdG9yKSB7XG4gICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICB9XG4gIGVsc2UgaWYgKHZhbHVlcy5sZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgIGluY2x1ZGVzID0gY2FjaGVIYXM7XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICB2YWx1ZXMgPSBuZXcgU2V0Q2FjaGUodmFsdWVzKTtcbiAgfVxuICBvdXRlcjpcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPT0gbnVsbCA/IHZhbHVlIDogaXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkge1xuICAgICAgdmFyIHZhbHVlc0luZGV4ID0gdmFsdWVzTGVuZ3RoO1xuICAgICAgd2hpbGUgKHZhbHVlc0luZGV4LS0pIHtcbiAgICAgICAgaWYgKHZhbHVlc1t2YWx1ZXNJbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWluY2x1ZGVzKHZhbHVlcywgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKSB7XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZURpZmZlcmVuY2U7XG4iLCJ2YXIgYmFzZUZvck93biA9IHJlcXVpcmUoJy4vX2Jhc2VGb3JPd24nKSxcbiAgICBjcmVhdGVCYXNlRWFjaCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUJhc2VFYWNoJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yRWFjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gKi9cbnZhciBiYXNlRWFjaCA9IGNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd24pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VFYWNoO1xuIiwidmFyIGJhc2VFYWNoID0gcmVxdWlyZSgnLi9fYmFzZUVhY2gnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maWx0ZXJgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbHRlcihjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGaWx0ZXI7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgIHdpdGhvdXRcbiAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgsIGZyb21SaWdodCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMSA6IC0xKTtcblxuICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRmluZEluZGV4O1xuIiwidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzRmxhdHRlbmFibGUgPSByZXF1aXJlKCcuL19pc0ZsYXR0ZW5hYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aCBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVkaWNhdGU9aXNGbGF0dGVuYWJsZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBpc0ZsYXR0ZW5hYmxlKTtcbiAgcmVzdWx0IHx8IChyZXN1bHQgPSBbXSk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKGRlcHRoID4gMCAmJiBwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGJhc2VGbGF0dGVuKHZhbHVlLCBkZXB0aCAtIDEsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNTdHJpY3QpIHtcbiAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGbGF0dGVuO1xuIiwidmFyIGNyZWF0ZUJhc2VGb3IgPSByZXF1aXJlKCcuL19jcmVhdGVCYXNlRm9yJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRm9yO1xuIiwidmFyIGJhc2VGb3IgPSByZXF1aXJlKCcuL19iYXNlRm9yJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvck93bmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3Iob2JqZWN0LCBpdGVyYXRlZSwga2V5cyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvck93bjtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXQ7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICByZXR1cm4gaXNBcnJheShvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldEFsbEtleXM7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNJbmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBrZXkgVGhlIGtleSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUhhc0luKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBrZXkgaW4gT2JqZWN0KG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUhhc0luO1xuIiwidmFyIGJhc2VGaW5kSW5kZXggPSByZXF1aXJlKCcuL19iYXNlRmluZEluZGV4JyksXG4gICAgYmFzZUlzTmFOID0gcmVxdWlyZSgnLi9fYmFzZUlzTmFOJyksXG4gICAgc3RyaWN0SW5kZXhPZiA9IHJlcXVpcmUoJy4vX3N0cmljdEluZGV4T2YnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pbmRleE9mYCB3aXRob3V0IGBmcm9tSW5kZXhgIGJvdW5kcyBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZVxuICAgID8gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleClcbiAgICA6IGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJc05hTiwgZnJvbUluZGV4KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSW5kZXhPZjtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwidmFyIGJhc2VJc0VxdWFsRGVlcCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsRGVlcCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNFcXVhbGAgd2hpY2ggc3VwcG9ydHMgcGFydGlhbCBjb21wYXJpc29uc1xuICogYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgMSAtIFVub3JkZXJlZCBjb21wYXJpc29uXG4gKiAgMiAtIFBhcnRpYWwgY29tcGFyaXNvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGB2YWx1ZWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgaWYgKHZhbHVlID09PSBvdGhlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwgfHwgKCFpc09iamVjdExpa2UodmFsdWUpICYmICFpc09iamVjdExpa2Uob3RoZXIpKSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyO1xuICB9XG4gIHJldHVybiBiYXNlSXNFcXVhbERlZXAodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBiYXNlSXNFcXVhbCwgc3RhY2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0VxdWFsO1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgZXF1YWxCeVRhZyA9IHJlcXVpcmUoJy4vX2VxdWFsQnlUYWcnKSxcbiAgICBlcXVhbE9iamVjdHMgPSByZXF1aXJlKCcuL19lcXVhbE9iamVjdHMnKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgb2JqSXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLFxuICAgICAgb2JqVGFnID0gb2JqSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvYmplY3QpLFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvdGhlcik7XG5cbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XG4gIG90aFRhZyA9IG90aFRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb3RoVGFnO1xuXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xuXG4gIGlmIChpc1NhbWVUYWcgJiYgaXNCdWZmZXIob2JqZWN0KSkge1xuICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9iaklzQXJyID0gdHJ1ZTtcbiAgICBvYmpJc09iaiA9IGZhbHNlO1xuICB9XG4gIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICByZXR1cm4gKG9iaklzQXJyIHx8IGlzVHlwZWRBcnJheShvYmplY3QpKVxuICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxuICAgICAgOiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIG9ialRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gIH1cbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xuICAgIHZhciBvYmpJc1dyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksXG4gICAgICAgIG90aElzV3JhcHBlZCA9IG90aElzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsICdfX3dyYXBwZWRfXycpO1xuXG4gICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XG5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTYW1lVGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHJldHVybiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWxEZWVwO1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBiYXNlSXNFcXVhbCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hdGNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7QXJyYXl9IG1hdGNoRGF0YSBUaGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3MgdG8gbWF0Y2guXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGluZGV4ID0gbWF0Y2hEYXRhLmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IGluZGV4LFxuICAgICAgbm9DdXN0b21pemVyID0gIWN1c3RvbWl6ZXI7XG5cbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuICFsZW5ndGg7XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXG4gICAgICAgICAgPyBkYXRhWzFdICE9PSBvYmplY3RbZGF0YVswXV1cbiAgICAgICAgICA6ICEoZGF0YVswXSBpbiBvYmplY3QpXG4gICAgICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgIHZhciBrZXkgPSBkYXRhWzBdLFxuICAgICAgICBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBzcmNWYWx1ZSA9IGRhdGFbMV07XG5cbiAgICBpZiAobm9DdXN0b21pemVyICYmIGRhdGFbMl0pIHtcbiAgICAgIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RhY2sgPSBuZXcgU3RhY2s7XG4gICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICB2YXIgcmVzdWx0ID0gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKTtcbiAgICAgIH1cbiAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgICAgIDogcmVzdWx0XG4gICAgICAgICAgKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc01hdGNoO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hTmAgd2l0aG91dCBzdXBwb3J0IGZvciBudW1iZXIgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYU47XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1R5cGVkQXJyYXk7XG4iLCJ2YXIgYmFzZU1hdGNoZXMgPSByZXF1aXJlKCcuL19iYXNlTWF0Y2hlcycpLFxuICAgIGJhc2VNYXRjaGVzUHJvcGVydHkgPSByZXF1aXJlKCcuL19iYXNlTWF0Y2hlc1Byb3BlcnR5JyksXG4gICAgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5JyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIHByb3BlcnR5ID0gcmVxdWlyZSgnLi9wcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLml0ZXJhdGVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBbdmFsdWU9Xy5pZGVudGl0eV0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYW4gaXRlcmF0ZWUuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGl0ZXJhdGVlLlxuICovXG5mdW5jdGlvbiBiYXNlSXRlcmF0ZWUodmFsdWUpIHtcbiAgLy8gRG9uJ3Qgc3RvcmUgdGhlIGB0eXBlb2ZgIHJlc3VsdCBpbiBhIHZhcmlhYmxlIHRvIGF2b2lkIGEgSklUIGJ1ZyBpbiBTYWZhcmkgOS5cbiAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYwMzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGlkZW50aXR5O1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gaXNBcnJheSh2YWx1ZSlcbiAgICAgID8gYmFzZU1hdGNoZXNQcm9wZXJ0eSh2YWx1ZVswXSwgdmFsdWVbMV0pXG4gICAgICA6IGJhc2VNYXRjaGVzKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gcHJvcGVydHkodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJdGVyYXRlZTtcbiIsInZhciBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5cyA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXMnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyhvYmplY3QpO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzO1xuIiwiLyoqXG4gKiBUaGUgZnVuY3Rpb24gd2hvc2UgcHJvdG90eXBlIGNoYWluIHNlcXVlbmNlIHdyYXBwZXJzIGluaGVyaXQgZnJvbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBiYXNlTG9kYXNoKCkge1xuICAvLyBObyBvcGVyYXRpb24gcGVyZm9ybWVkLlxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VMb2Rhc2g7XG4iLCJ2YXIgYmFzZUVhY2ggPSByZXF1aXJlKCcuL19iYXNlRWFjaCcpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hcGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlTWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBBcnJheShjb2xsZWN0aW9uLmxlbmd0aCkgOiBbXTtcblxuICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gaXRlcmF0ZWUodmFsdWUsIGtleSwgY29sbGVjdGlvbik7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNYXA7XG4iLCJ2YXIgYmFzZUlzTWF0Y2ggPSByZXF1aXJlKCcuL19iYXNlSXNNYXRjaCcpLFxuICAgIGdldE1hdGNoRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hdGNoRGF0YScpLFxuICAgIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzYCB3aGljaCBkb2Vzbid0IGNsb25lIGBzb3VyY2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXMoc291cmNlKSB7XG4gIHZhciBtYXRjaERhdGEgPSBnZXRNYXRjaERhdGEoc291cmNlKTtcbiAgaWYgKG1hdGNoRGF0YS5sZW5ndGggPT0gMSAmJiBtYXRjaERhdGFbMF1bMl0pIHtcbiAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUobWF0Y2hEYXRhWzBdWzBdLCBtYXRjaERhdGFbMF1bMV0pO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09PSBzb3VyY2UgfHwgYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZU1hdGNoZXM7XG4iLCJ2YXIgYmFzZUlzRXF1YWwgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbCcpLFxuICAgIGdldCA9IHJlcXVpcmUoJy4vZ2V0JyksXG4gICAgaGFzSW4gPSByZXF1aXJlKCcuL2hhc0luJyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIGlzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX2lzU3RyaWN0Q29tcGFyYWJsZScpLFxuICAgIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkge1xuICBpZiAoaXNLZXkocGF0aCkgJiYgaXNTdHJpY3RDb21wYXJhYmxlKHNyY1ZhbHVlKSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSh0b0tleShwYXRoKSwgc3JjVmFsdWUpO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIgb2JqVmFsdWUgPSBnZXQob2JqZWN0LCBwYXRoKTtcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxuICAgICAgPyBoYXNJbihvYmplY3QsIHBhdGgpXG4gICAgICA6IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWF0Y2hlc1Byb3BlcnR5O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eWAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHkoa2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUHJvcGVydHk7XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VQcm9wZXJ0eWAgd2hpY2ggc3VwcG9ydHMgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVByb3BlcnR5RGVlcDtcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgc3RhcnQsIGlkZW50aXR5KSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUmVzdDtcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBtZXRhTWFwID0gcmVxdWlyZSgnLi9fbWV0YU1hcCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXREYXRhYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldERhdGEgPSAhbWV0YU1hcCA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgZGF0YSkge1xuICBtZXRhTWFwLnNldChmdW5jLCBkYXRhKTtcbiAgcmV0dXJuIGZ1bmM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTZXREYXRhO1xuIiwidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVGltZXM7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVG9TdHJpbmc7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuYXJ5O1xuIiwidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlcycpLFxuICAgIGFycmF5SW5jbHVkZXNXaXRoID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlc1dpdGgnKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyksXG4gICAgY3JlYXRlU2V0ID0gcmVxdWlyZSgnLi9fY3JlYXRlU2V0JyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmlxQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuaXEoYXJyYXksIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaXNDb21tb24gPSB0cnVlLFxuICAgICAgcmVzdWx0ID0gW10sXG4gICAgICBzZWVuID0gcmVzdWx0O1xuXG4gIGlmIChjb21wYXJhdG9yKSB7XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICB9XG4gIGVsc2UgaWYgKGxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgdmFyIHNldCA9IGl0ZXJhdGVlID8gbnVsbCA6IGNyZWF0ZVNldChhcnJheSk7XG4gICAgaWYgKHNldCkge1xuICAgICAgcmV0dXJuIHNldFRvQXJyYXkoc2V0KTtcbiAgICB9XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICBpbmNsdWRlcyA9IGNhY2hlSGFzO1xuICAgIHNlZW4gPSBuZXcgU2V0Q2FjaGU7XG4gIH1cbiAgZWxzZSB7XG4gICAgc2VlbiA9IGl0ZXJhdGVlID8gW10gOiByZXN1bHQ7XG4gIH1cbiAgb3V0ZXI6XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICB2YXIgc2VlbkluZGV4ID0gc2Vlbi5sZW5ndGg7XG4gICAgICB3aGlsZSAoc2VlbkluZGV4LS0pIHtcbiAgICAgICAgaWYgKHNlZW5bc2VlbkluZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpbmNsdWRlcyhzZWVuLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgIGlmIChzZWVuICE9PSByZXN1bHQpIHtcbiAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5pcTtcbiIsInZhciBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udmFsdWVzYCBhbmQgYF8udmFsdWVzSW5gIHdoaWNoIGNyZWF0ZXMgYW5cbiAqIGFycmF5IG9mIGBvYmplY3RgIHByb3BlcnR5IHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eSBuYW1lc1xuICogb2YgYHByb3BzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIGdldCB2YWx1ZXMgZm9yLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlVmFsdWVzKG9iamVjdCwgcHJvcHMpIHtcbiAgcmV0dXJuIGFycmF5TWFwKHByb3BzLCBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gb2JqZWN0W2tleV07XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VWYWx1ZXM7XG4iLCJ2YXIgYmFzZURpZmZlcmVuY2UgPSByZXF1aXJlKCcuL19iYXNlRGlmZmVyZW5jZScpLFxuICAgIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKSxcbiAgICBiYXNlVW5pcSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmlxJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLnhvcmAsIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMsIHRoYXQgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgdG8gaW5zcGVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlzIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZVhvcihhcnJheXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheXMubGVuZ3RoO1xuICBpZiAobGVuZ3RoIDwgMikge1xuICAgIHJldHVybiBsZW5ndGggPyBiYXNlVW5pcShhcnJheXNbMF0pIDogW107XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGFycmF5ID0gYXJyYXlzW2luZGV4XSxcbiAgICAgICAgb3RoSW5kZXggPSAtMTtcblxuICAgIHdoaWxlICgrK290aEluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAob3RoSW5kZXggIT0gaW5kZXgpIHtcbiAgICAgICAgcmVzdWx0W2luZGV4XSA9IGJhc2VEaWZmZXJlbmNlKHJlc3VsdFtpbmRleF0gfHwgYXJyYXksIGFycmF5c1tvdGhJbmRleF0sIGl0ZXJhdGVlLCBjb21wYXJhdG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKHJlc3VsdCwgMSksIGl0ZXJhdGVlLCBjb21wYXJhdG9yKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlWG9yO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5Jyk7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBgaWRlbnRpdHlgIGlmIGl0J3Mgbm90IGEgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgY2FzdCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY2FzdEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlIDogaWRlbnRpdHk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdEZ1bmN0aW9uO1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgc3RyaW5nVG9QYXRoID0gcmVxdWlyZSgnLi9fc3RyaW5nVG9QYXRoJyksXG4gICAgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyk7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG5mdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdFBhdGg7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMsXG4gKiBwbGFjZWhvbGRlcnMsIGFuZCBwcm92aWRlZCBhcmd1bWVudHMgaW50byBhIHNpbmdsZSBhcnJheSBvZiBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZC5cbiAqIEBwYXJhbSB7QXJyYXl9IGhvbGRlcnMgVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbXMge2Jvb2xlYW59IFtpc0N1cnJpZWRdIFNwZWNpZnkgY29tcG9zaW5nIGZvciBhIGN1cnJpZWQgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgbGVmdEluZGV4ID0gLTEsXG4gICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgcmFuZ2VMZW5ndGggPSBuYXRpdmVNYXgoYXJnc0xlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVmdExlbmd0aCArIHJhbmdlTGVuZ3RoKSxcbiAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgcmVzdWx0W2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2FyZ3NJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgcmVzdWx0W2hvbGRlcnNbYXJnc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgfVxuICB9XG4gIHdoaWxlIChyYW5nZUxlbmd0aC0tKSB7XG4gICAgcmVzdWx0W2xlZnRJbmRleCsrXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcG9zZUFyZ3M7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBjb21wb3NlQXJnc2AgZXhjZXB0IHRoYXQgdGhlIGFyZ3VtZW50cyBjb21wb3NpdGlvblxuICogaXMgdGFpbG9yZWQgZm9yIGBfLnBhcnRpYWxSaWdodGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gYXBwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbXBvc2VkIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKSB7XG4gIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgIGFyZ3NMZW5ndGggPSBhcmdzLmxlbmd0aCxcbiAgICAgIGhvbGRlcnNJbmRleCA9IC0xLFxuICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgcmlnaHRJbmRleCA9IC0xLFxuICAgICAgcmlnaHRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICByYW5nZUxlbmd0aCA9IG5hdGl2ZU1heChhcmdzTGVuZ3RoIC0gaG9sZGVyc0xlbmd0aCwgMCksXG4gICAgICByZXN1bHQgPSBBcnJheShyYW5nZUxlbmd0aCArIHJpZ2h0TGVuZ3RoKSxcbiAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICB3aGlsZSAoKythcmdzSW5kZXggPCByYW5nZUxlbmd0aCkge1xuICAgIHJlc3VsdFthcmdzSW5kZXhdID0gYXJnc1thcmdzSW5kZXhdO1xuICB9XG4gIHZhciBvZmZzZXQgPSBhcmdzSW5kZXg7XG4gIHdoaWxlICgrK3JpZ2h0SW5kZXggPCByaWdodExlbmd0aCkge1xuICAgIHJlc3VsdFtvZmZzZXQgKyByaWdodEluZGV4XSA9IHBhcnRpYWxzW3JpZ2h0SW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2hvbGRlcnNJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgcmVzdWx0W29mZnNldCArIGhvbGRlcnNbaG9sZGVyc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleCsrXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb21wb3NlQXJnc1JpZ2h0O1xuIiwiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weUFycmF5O1xuIiwidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKTtcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weU9iamVjdDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCIvKipcbiAqIEdldHMgdGhlIG51bWJlciBvZiBgcGxhY2Vob2xkZXJgIG9jY3VycmVuY2VzIGluIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHBsYWNlaG9sZGVyIGNvdW50LlxuICovXG5mdW5jdGlvbiBjb3VudEhvbGRlcnMoYXJyYXksIHBsYWNlaG9sZGVyKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSAwO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChhcnJheVtsZW5ndGhdID09PSBwbGFjZWhvbGRlcikge1xuICAgICAgKytyZXN1bHQ7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY291bnRIb2xkZXJzO1xuIiwidmFyIGFycmF5QWdncmVnYXRvciA9IHJlcXVpcmUoJy4vX2FycmF5QWdncmVnYXRvcicpLFxuICAgIGJhc2VBZ2dyZWdhdG9yID0gcmVxdWlyZSgnLi9fYmFzZUFnZ3JlZ2F0b3InKSxcbiAgICBiYXNlSXRlcmF0ZWUgPSByZXF1aXJlKCcuL19iYXNlSXRlcmF0ZWUnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uZ3JvdXBCeWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGFjY3VtdWxhdG9yIHZhbHVlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpbml0aWFsaXplcl0gVGhlIGFjY3VtdWxhdG9yIG9iamVjdCBpbml0aWFsaXplci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFnZ3JlZ2F0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFnZ3JlZ2F0b3Ioc2V0dGVyLCBpbml0aWFsaXplcikge1xuICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUFnZ3JlZ2F0b3IgOiBiYXNlQWdncmVnYXRvcixcbiAgICAgICAgYWNjdW11bGF0b3IgPSBpbml0aWFsaXplciA/IGluaXRpYWxpemVyKCkgOiB7fTtcblxuICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIHNldHRlciwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYWNjdW11bGF0b3IpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUFnZ3JlZ2F0b3I7XG4iLCJ2YXIgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGlzSXRlcmF0ZWVDYWxsID0gcmVxdWlyZSgnLi9faXNJdGVyYXRlZUNhbGwnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5hc3NpZ25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25lciBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikge1xuICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICBsZW5ndGggPSAxO1xuICAgIH1cbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBhc3NpZ25lcihvYmplY3QsIHNvdXJjZSwgaW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVBc3NpZ25lcjtcbiIsInZhciBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYGJhc2VFYWNoYCBvciBgYmFzZUVhY2hSaWdodGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVhY2hGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYSBjb2xsZWN0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCYXNlRWFjaChlYWNoRnVuYywgZnJvbVJpZ2h0KSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH1cbiAgICBpZiAoIWlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKSB7XG4gICAgICByZXR1cm4gZWFjaEZ1bmMoY29sbGVjdGlvbiwgaXRlcmF0ZWUpO1xuICAgIH1cbiAgICB2YXIgbGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gZnJvbVJpZ2h0ID8gbGVuZ3RoIDogLTEsXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KGNvbGxlY3Rpb24pO1xuXG4gICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICAgIGlmIChpdGVyYXRlZShpdGVyYWJsZVtpbmRleF0sIGluZGV4LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVCYXNlRWFjaDtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXG4gICAgICAgIHByb3BzID0ga2V5c0Z1bmMob2JqZWN0KSxcbiAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJhc2VGb3I7XG4iLCJ2YXIgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIHRoZSBvcHRpb25hbCBgdGhpc2BcbiAqIGJpbmRpbmcgb2YgYHRoaXNBcmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpIHtcbiAgdmFyIGlzQmluZCA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyxcbiAgICAgIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICByZXR1cm4gZm4uYXBwbHkoaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmluZDtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIGFuIGluc3RhbmNlIG9mIGBDdG9yYCByZWdhcmRsZXNzIG9mXG4gKiB3aGV0aGVyIGl0IHdhcyBpbnZva2VkIGFzIHBhcnQgb2YgYSBgbmV3YCBleHByZXNzaW9uIG9yIGJ5IGBjYWxsYCBvciBgYXBwbHlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBDdG9yIFRoZSBjb25zdHJ1Y3RvciB0byB3cmFwLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ3RvcihDdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAvLyBVc2UgYSBgc3dpdGNoYCBzdGF0ZW1lbnQgdG8gd29yayB3aXRoIGNsYXNzIGNvbnN0cnVjdG9ycy4gU2VlXG4gICAgLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1mdW5jdGlvbi1vYmplY3RzLWNhbGwtdGhpc2FyZ3VtZW50LWFyZ3VtZW50c2xpc3RcbiAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBDdG9yO1xuICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSk7XG4gICAgICBjYXNlIDI6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICBjYXNlIDU6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdKTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pO1xuICAgICAgY2FzZSA3OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSwgYXJnc1s2XSk7XG4gICAgfVxuICAgIHZhciB0aGlzQmluZGluZyA9IGJhc2VDcmVhdGUoQ3Rvci5wcm90b3R5cGUpLFxuICAgICAgICByZXN1bHQgPSBDdG9yLmFwcGx5KHRoaXNCaW5kaW5nLCBhcmdzKTtcblxuICAgIC8vIE1pbWljIHRoZSBjb25zdHJ1Y3RvcidzIGByZXR1cm5gIGJlaGF2aW9yLlxuICAgIC8vIFNlZSBodHRwczovL2VzNS5naXRodWIuaW8vI3gxMy4yLjIgZm9yIG1vcmUgZGV0YWlscy5cbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IHRoaXNCaW5kaW5nO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUN0b3I7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpLFxuICAgIGNyZWF0ZUN0b3IgPSByZXF1aXJlKCcuL19jcmVhdGVDdG9yJyksXG4gICAgY3JlYXRlSHlicmlkID0gcmVxdWlyZSgnLi9fY3JlYXRlSHlicmlkJyksXG4gICAgY3JlYXRlUmVjdXJyeSA9IHJlcXVpcmUoJy4vX2NyZWF0ZVJlY3VycnknKSxcbiAgICBnZXRIb2xkZXIgPSByZXF1aXJlKCcuL19nZXRIb2xkZXInKSxcbiAgICByZXBsYWNlSG9sZGVycyA9IHJlcXVpcmUoJy4vX3JlcGxhY2VIb2xkZXJzJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gZW5hYmxlIGN1cnJ5aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBhcml0eSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ3VycnkoZnVuYywgYml0bWFzaywgYXJpdHkpIHtcbiAgdmFyIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgIGFyZ3MgPSBBcnJheShsZW5ndGgpLFxuICAgICAgICBpbmRleCA9IGxlbmd0aCxcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBnZXRIb2xkZXIod3JhcHBlcik7XG5cbiAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgIH1cbiAgICB2YXIgaG9sZGVycyA9IChsZW5ndGggPCAzICYmIGFyZ3NbMF0gIT09IHBsYWNlaG9sZGVyICYmIGFyZ3NbbGVuZ3RoIC0gMV0gIT09IHBsYWNlaG9sZGVyKVxuICAgICAgPyBbXVxuICAgICAgOiByZXBsYWNlSG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG5cbiAgICBsZW5ndGggLT0gaG9sZGVycy5sZW5ndGg7XG4gICAgaWYgKGxlbmd0aCA8IGFyaXR5KSB7XG4gICAgICByZXR1cm4gY3JlYXRlUmVjdXJyeShcbiAgICAgICAgZnVuYywgYml0bWFzaywgY3JlYXRlSHlicmlkLCB3cmFwcGVyLnBsYWNlaG9sZGVyLCB1bmRlZmluZWQsXG4gICAgICAgIGFyZ3MsIGhvbGRlcnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhcml0eSAtIGxlbmd0aCk7XG4gICAgfVxuICAgIHZhciBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG4gICAgcmV0dXJuIGFwcGx5KGZuLCB0aGlzLCBhcmdzKTtcbiAgfVxuICByZXR1cm4gd3JhcHBlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDdXJyeTtcbiIsInZhciBiYXNlSXRlcmF0ZWUgPSByZXF1aXJlKCcuL19iYXNlSXRlcmF0ZWUnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBfLmZpbmRgIG9yIGBfLmZpbmRMYXN0YCBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZmluZEluZGV4RnVuYyBUaGUgZnVuY3Rpb24gdG8gZmluZCB0aGUgY29sbGVjdGlvbiBpbmRleC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZpbmQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUZpbmQoZmluZEluZGV4RnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgcHJlZGljYXRlLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG4gICAgaWYgKCFpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkge1xuICAgICAgdmFyIGl0ZXJhdGVlID0gYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSwgMyk7XG4gICAgICBjb2xsZWN0aW9uID0ga2V5cyhjb2xsZWN0aW9uKTtcbiAgICAgIHByZWRpY2F0ZSA9IGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSk7IH07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGZpbmRJbmRleEZ1bmMoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBmcm9tSW5kZXgpO1xuICAgIHJldHVybiBpbmRleCA+IC0xID8gaXRlcmFibGVbaXRlcmF0ZWUgPyBjb2xsZWN0aW9uW2luZGV4XSA6IGluZGV4XSA6IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVGaW5kO1xuIiwidmFyIGNvbXBvc2VBcmdzID0gcmVxdWlyZSgnLi9fY29tcG9zZUFyZ3MnKSxcbiAgICBjb21wb3NlQXJnc1JpZ2h0ID0gcmVxdWlyZSgnLi9fY29tcG9zZUFyZ3NSaWdodCcpLFxuICAgIGNvdW50SG9sZGVycyA9IHJlcXVpcmUoJy4vX2NvdW50SG9sZGVycycpLFxuICAgIGNyZWF0ZUN0b3IgPSByZXF1aXJlKCcuL19jcmVhdGVDdG9yJyksXG4gICAgY3JlYXRlUmVjdXJyeSA9IHJlcXVpcmUoJy4vX2NyZWF0ZVJlY3VycnknKSxcbiAgICBnZXRIb2xkZXIgPSByZXF1aXJlKCcuL19nZXRIb2xkZXInKSxcbiAgICByZW9yZGVyID0gcmVxdWlyZSgnLi9fcmVvcmRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfQ1VSUllfUklHSFRfRkxBRyA9IDE2LFxuICAgIFdSQVBfQVJZX0ZMQUcgPSAxMjgsXG4gICAgV1JBUF9GTElQX0ZMQUcgPSA1MTI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIG9wdGlvbmFsIGB0aGlzYFxuICogYmluZGluZyBvZiBgdGhpc0FyZ2AsIHBhcnRpYWwgYXBwbGljYXRpb24sIGFuZCBjdXJyeWluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbnxzdHJpbmd9IGZ1bmMgVGhlIGZ1bmN0aW9uIG9yIG1ldGhvZCBuYW1lIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gKiAgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzUmlnaHRdIFRoZSBhcmd1bWVudHMgdG8gYXBwZW5kIHRvIHRob3NlIHByb3ZpZGVkXG4gKiAgdG8gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzUmlnaHRdIFRoZSBgcGFydGlhbHNSaWdodGAgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVIeWJyaWQoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCwgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gIHZhciBpc0FyeSA9IGJpdG1hc2sgJiBXUkFQX0FSWV9GTEFHLFxuICAgICAgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgaXNCaW5kS2V5ID0gYml0bWFzayAmIFdSQVBfQklORF9LRVlfRkxBRyxcbiAgICAgIGlzQ3VycmllZCA9IGJpdG1hc2sgJiAoV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSxcbiAgICAgIGlzRmxpcCA9IGJpdG1hc2sgJiBXUkFQX0ZMSVBfRkxBRyxcbiAgICAgIEN0b3IgPSBpc0JpbmRLZXkgPyB1bmRlZmluZWQgOiBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgIGFyZ3MgPSBBcnJheShsZW5ndGgpLFxuICAgICAgICBpbmRleCA9IGxlbmd0aDtcblxuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgfVxuICAgIGlmIChpc0N1cnJpZWQpIHtcbiAgICAgIHZhciBwbGFjZWhvbGRlciA9IGdldEhvbGRlcih3cmFwcGVyKSxcbiAgICAgICAgICBob2xkZXJzQ291bnQgPSBjb3VudEhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuICAgIH1cbiAgICBpZiAocGFydGlhbHMpIHtcbiAgICAgIGFyZ3MgPSBjb21wb3NlQXJncyhhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKTtcbiAgICB9XG4gICAgaWYgKHBhcnRpYWxzUmlnaHQpIHtcbiAgICAgIGFyZ3MgPSBjb21wb3NlQXJnc1JpZ2h0KGFyZ3MsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCwgaXNDdXJyaWVkKTtcbiAgICB9XG4gICAgbGVuZ3RoIC09IGhvbGRlcnNDb3VudDtcbiAgICBpZiAoaXNDdXJyaWVkICYmIGxlbmd0aCA8IGFyaXR5KSB7XG4gICAgICB2YXIgbmV3SG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcbiAgICAgIHJldHVybiBjcmVhdGVSZWN1cnJ5KFxuICAgICAgICBmdW5jLCBiaXRtYXNrLCBjcmVhdGVIeWJyaWQsIHdyYXBwZXIucGxhY2Vob2xkZXIsIHRoaXNBcmcsXG4gICAgICAgIGFyZ3MsIG5ld0hvbGRlcnMsIGFyZ1BvcywgYXJ5LCBhcml0eSAtIGxlbmd0aFxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIHRoaXNCaW5kaW5nID0gaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsXG4gICAgICAgIGZuID0gaXNCaW5kS2V5ID8gdGhpc0JpbmRpbmdbZnVuY10gOiBmdW5jO1xuXG4gICAgbGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gICAgaWYgKGFyZ1Bvcykge1xuICAgICAgYXJncyA9IHJlb3JkZXIoYXJncywgYXJnUG9zKTtcbiAgICB9IGVsc2UgaWYgKGlzRmxpcCAmJiBsZW5ndGggPiAxKSB7XG4gICAgICBhcmdzLnJldmVyc2UoKTtcbiAgICB9XG4gICAgaWYgKGlzQXJ5ICYmIGFyeSA8IGxlbmd0aCkge1xuICAgICAgYXJncy5sZW5ndGggPSBhcnk7XG4gICAgfVxuICAgIGlmICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpIHtcbiAgICAgIGZuID0gQ3RvciB8fCBjcmVhdGVDdG9yKGZuKTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNCaW5kaW5nLCBhcmdzKTtcbiAgfVxuICByZXR1cm4gd3JhcHBlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVIeWJyaWQ7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpLFxuICAgIGNyZWF0ZUN0b3IgPSByZXF1aXJlKCcuL19jcmVhdGVDdG9yJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmdcbiAqIG9mIGB0aGlzQXJnYCBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKSB7XG4gIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgIGxlZnRJbmRleCA9IC0xLFxuICAgICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICBhcmdzID0gQXJyYXkobGVmdExlbmd0aCArIGFyZ3NMZW5ndGgpLFxuICAgICAgICBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG5cbiAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICBhcmdzW2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdO1xuICAgIH1cbiAgICB3aGlsZSAoYXJnc0xlbmd0aC0tKSB7XG4gICAgICBhcmdzW2xlZnRJbmRleCsrXSA9IGFyZ3VtZW50c1srK2FyZ3NJbmRleF07XG4gICAgfVxuICAgIHJldHVybiBhcHBseShmbiwgaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVBhcnRpYWw7XG4iLCJ2YXIgaXNMYXppYWJsZSA9IHJlcXVpcmUoJy4vX2lzTGF6aWFibGUnKSxcbiAgICBzZXREYXRhID0gcmVxdWlyZSgnLi9fc2V0RGF0YScpLFxuICAgIHNldFdyYXBUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFdyYXBUb1N0cmluZycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0JPVU5EX0ZMQUcgPSA0LFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMixcbiAgICBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA9IDY0O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBjb250aW51ZSBjdXJyeWluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cmFwRnVuYyBUaGUgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBgZnVuY2Agd3JhcHBlci5cbiAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHZhbHVlLlxuICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gKiAgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJlY3VycnkoZnVuYywgYml0bWFzaywgd3JhcEZ1bmMsIHBsYWNlaG9sZGVyLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gIHZhciBpc0N1cnJ5ID0gYml0bWFzayAmIFdSQVBfQ1VSUllfRkxBRyxcbiAgICAgIG5ld0hvbGRlcnMgPSBpc0N1cnJ5ID8gaG9sZGVycyA6IHVuZGVmaW5lZCxcbiAgICAgIG5ld0hvbGRlcnNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBob2xkZXJzLFxuICAgICAgbmV3UGFydGlhbHMgPSBpc0N1cnJ5ID8gcGFydGlhbHMgOiB1bmRlZmluZWQsXG4gICAgICBuZXdQYXJ0aWFsc1JpZ2h0ID0gaXNDdXJyeSA/IHVuZGVmaW5lZCA6IHBhcnRpYWxzO1xuXG4gIGJpdG1hc2sgfD0gKGlzQ3VycnkgPyBXUkFQX1BBUlRJQUxfRkxBRyA6IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKTtcbiAgYml0bWFzayAmPSB+KGlzQ3VycnkgPyBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA6IFdSQVBfUEFSVElBTF9GTEFHKTtcblxuICBpZiAoIShiaXRtYXNrICYgV1JBUF9DVVJSWV9CT1VORF9GTEFHKSkge1xuICAgIGJpdG1hc2sgJj0gfihXUkFQX0JJTkRfRkxBRyB8IFdSQVBfQklORF9LRVlfRkxBRyk7XG4gIH1cbiAgdmFyIG5ld0RhdGEgPSBbXG4gICAgZnVuYywgYml0bWFzaywgdGhpc0FyZywgbmV3UGFydGlhbHMsIG5ld0hvbGRlcnMsIG5ld1BhcnRpYWxzUmlnaHQsXG4gICAgbmV3SG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHlcbiAgXTtcblxuICB2YXIgcmVzdWx0ID0gd3JhcEZ1bmMuYXBwbHkodW5kZWZpbmVkLCBuZXdEYXRhKTtcbiAgaWYgKGlzTGF6aWFibGUoZnVuYykpIHtcbiAgICBzZXREYXRhKHJlc3VsdCwgbmV3RGF0YSk7XG4gIH1cbiAgcmVzdWx0LnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XG4gIHJldHVybiBzZXRXcmFwVG9TdHJpbmcocmVzdWx0LCBmdW5jLCBiaXRtYXNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSZWN1cnJ5O1xuIiwidmFyIFNldCA9IHJlcXVpcmUoJy4vX1NldCcpLFxuICAgIG5vb3AgPSByZXF1aXJlKCcuL25vb3AnKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzZXQgb2JqZWN0IG9mIGB2YWx1ZXNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhZGQgdG8gdGhlIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBzZXQuXG4gKi9cbnZhciBjcmVhdGVTZXQgPSAhKFNldCAmJiAoMSAvIHNldFRvQXJyYXkobmV3IFNldChbLC0wXSkpWzFdKSA9PSBJTkZJTklUWSkgPyBub29wIDogZnVuY3Rpb24odmFsdWVzKSB7XG4gIHJldHVybiBuZXcgU2V0KHZhbHVlcyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVNldDtcbiIsInZhciBiYXNlU2V0RGF0YSA9IHJlcXVpcmUoJy4vX2Jhc2VTZXREYXRhJyksXG4gICAgY3JlYXRlQmluZCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUJpbmQnKSxcbiAgICBjcmVhdGVDdXJyeSA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN1cnJ5JyksXG4gICAgY3JlYXRlSHlicmlkID0gcmVxdWlyZSgnLi9fY3JlYXRlSHlicmlkJyksXG4gICAgY3JlYXRlUGFydGlhbCA9IHJlcXVpcmUoJy4vX2NyZWF0ZVBhcnRpYWwnKSxcbiAgICBnZXREYXRhID0gcmVxdWlyZSgnLi9fZ2V0RGF0YScpLFxuICAgIG1lcmdlRGF0YSA9IHJlcXVpcmUoJy4vX21lcmdlRGF0YScpLFxuICAgIHNldERhdGEgPSByZXF1aXJlKCcuL19zZXREYXRhJyksXG4gICAgc2V0V3JhcFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0V3JhcFRvU3RyaW5nJyksXG4gICAgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi90b0ludGVnZXInKTtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBlaXRoZXIgY3VycmllcyBvciBpbnZva2VzIGBmdW5jYCB3aXRoIG9wdGlvbmFsXG4gKiBgdGhpc2AgYmluZGluZyBhbmQgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogICAgMSAtIGBfLmJpbmRgXG4gKiAgICAyIC0gYF8uYmluZEtleWBcbiAqICAgIDQgLSBgXy5jdXJyeWAgb3IgYF8uY3VycnlSaWdodGAgb2YgYSBib3VuZCBmdW5jdGlvblxuICogICAgOCAtIGBfLmN1cnJ5YFxuICogICAxNiAtIGBfLmN1cnJ5UmlnaHRgXG4gKiAgIDMyIC0gYF8ucGFydGlhbGBcbiAqICAgNjQgLSBgXy5wYXJ0aWFsUmlnaHRgXG4gKiAgMTI4IC0gYF8ucmVhcmdgXG4gKiAgMjU2IC0gYF8uYXJ5YFxuICogIDUxMiAtIGBfLmZsaXBgXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlV3JhcChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gIHZhciBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHO1xuICBpZiAoIWlzQmluZEtleSAmJiB0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBsZW5ndGggPSBwYXJ0aWFscyA/IHBhcnRpYWxzLmxlbmd0aCA6IDA7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgYml0bWFzayAmPSB+KFdSQVBfUEFSVElBTF9GTEFHIHwgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpO1xuICAgIHBhcnRpYWxzID0gaG9sZGVycyA9IHVuZGVmaW5lZDtcbiAgfVxuICBhcnkgPSBhcnkgPT09IHVuZGVmaW5lZCA/IGFyeSA6IG5hdGl2ZU1heCh0b0ludGVnZXIoYXJ5KSwgMCk7XG4gIGFyaXR5ID0gYXJpdHkgPT09IHVuZGVmaW5lZCA/IGFyaXR5IDogdG9JbnRlZ2VyKGFyaXR5KTtcbiAgbGVuZ3RoIC09IGhvbGRlcnMgPyBob2xkZXJzLmxlbmd0aCA6IDA7XG5cbiAgaWYgKGJpdG1hc2sgJiBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRykge1xuICAgIHZhciBwYXJ0aWFsc1JpZ2h0ID0gcGFydGlhbHMsXG4gICAgICAgIGhvbGRlcnNSaWdodCA9IGhvbGRlcnM7XG5cbiAgICBwYXJ0aWFscyA9IGhvbGRlcnMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgdmFyIGRhdGEgPSBpc0JpbmRLZXkgPyB1bmRlZmluZWQgOiBnZXREYXRhKGZ1bmMpO1xuXG4gIHZhciBuZXdEYXRhID0gW1xuICAgIGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsXG4gICAgYXJnUG9zLCBhcnksIGFyaXR5XG4gIF07XG5cbiAgaWYgKGRhdGEpIHtcbiAgICBtZXJnZURhdGEobmV3RGF0YSwgZGF0YSk7XG4gIH1cbiAgZnVuYyA9IG5ld0RhdGFbMF07XG4gIGJpdG1hc2sgPSBuZXdEYXRhWzFdO1xuICB0aGlzQXJnID0gbmV3RGF0YVsyXTtcbiAgcGFydGlhbHMgPSBuZXdEYXRhWzNdO1xuICBob2xkZXJzID0gbmV3RGF0YVs0XTtcbiAgYXJpdHkgPSBuZXdEYXRhWzldID0gbmV3RGF0YVs5XSA9PT0gdW5kZWZpbmVkXG4gICAgPyAoaXNCaW5kS2V5ID8gMCA6IGZ1bmMubGVuZ3RoKVxuICAgIDogbmF0aXZlTWF4KG5ld0RhdGFbOV0gLSBsZW5ndGgsIDApO1xuXG4gIGlmICghYXJpdHkgJiYgYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpKSB7XG4gICAgYml0bWFzayAmPSB+KFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfQ1VSUllfUklHSFRfRkxBRyk7XG4gIH1cbiAgaWYgKCFiaXRtYXNrIHx8IGJpdG1hc2sgPT0gV1JBUF9CSU5EX0ZMQUcpIHtcbiAgICB2YXIgcmVzdWx0ID0gY3JlYXRlQmluZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnKTtcbiAgfSBlbHNlIGlmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRyB8fCBiaXRtYXNrID09IFdSQVBfQ1VSUllfUklHSFRfRkxBRykge1xuICAgIHJlc3VsdCA9IGNyZWF0ZUN1cnJ5KGZ1bmMsIGJpdG1hc2ssIGFyaXR5KTtcbiAgfSBlbHNlIGlmICgoYml0bWFzayA9PSBXUkFQX1BBUlRJQUxfRkxBRyB8fCBiaXRtYXNrID09IChXUkFQX0JJTkRfRkxBRyB8IFdSQVBfUEFSVElBTF9GTEFHKSkgJiYgIWhvbGRlcnMubGVuZ3RoKSB7XG4gICAgcmVzdWx0ID0gY3JlYXRlUGFydGlhbChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscyk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gY3JlYXRlSHlicmlkLmFwcGx5KHVuZGVmaW5lZCwgbmV3RGF0YSk7XG4gIH1cbiAgdmFyIHNldHRlciA9IGRhdGEgPyBiYXNlU2V0RGF0YSA6IHNldERhdGE7XG4gIHJldHVybiBzZXRXcmFwVG9TdHJpbmcoc2V0dGVyKHJlc3VsdCwgbmV3RGF0YSksIGZ1bmMsIGJpdG1hc2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVdyYXA7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZVByb3BlcnR5O1xuIiwidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheVNvbWUgPSByZXF1aXJlKCcuL19hcnJheVNvbWUnKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtBcnJheX0gb3RoZXIgVGhlIG90aGVyIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNQYXJ0aWFsICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcbiAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICBzZWVuID0gKGJpdG1hc2sgJiBDT01QQVJFX1VOT1JERVJFRF9GTEFHKSA/IG5ldyBTZXRDYWNoZSA6IHVuZGVmaW5lZDtcblxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBhcnJheSk7XG5cbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxuICB3aGlsZSAoKytpbmRleCA8IGFyckxlbmd0aCkge1xuICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgYXJyVmFsdWUsIGluZGV4LCBvdGhlciwgYXJyYXksIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIGlmIChjb21wYXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmIChzZWVuKSB7XG4gICAgICBpZiAoIWFycmF5U29tZShvdGhlciwgZnVuY3Rpb24ob3RoVmFsdWUsIG90aEluZGV4KSB7XG4gICAgICAgICAgICBpZiAoIWNhY2hlSGFzKHNlZW4sIG90aEluZGV4KSAmJlxuICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSkge1xuICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghKFxuICAgICAgICAgIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fFxuICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShhcnJheSk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxBcnJheXM7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgbWFwVG9BcnJheSA9IHJlcXVpcmUoJy4vX21hcFRvQXJyYXknKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAob2JqZWN0LmJ5dGVPZmZzZXQgIT0gb3RoZXIuYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG4gICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QgPT0gKG90aGVyICsgJycpO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgfVxuICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQnlUYWc7XG4iLCJ2YXIgZ2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgb2JqUHJvcHMgPSBnZXRBbGxLZXlzKG9iamVjdCksXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXG4gICAgICBvdGhQcm9wcyA9IGdldEFsbEtleXMob3RoZXIpLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xuXG4gIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHZhciBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICBpZiAoc3RhY2tlZCAmJiBzdGFjay5nZXQob3RoZXIpKSB7XG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHRydWU7XG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBvYmplY3QpO1xuXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcbiAgd2hpbGUgKCsraW5kZXggPCBvYmpMZW5ndGgpIHtcbiAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IChvYmpWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKG9ialZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKVxuICAgICAgICAgIDogY29tcGFyZWRcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICB9XG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XG4gICAgdmFyIG9iakN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcblxuICAgIC8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLlxuICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXG4gICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJlxuICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxPYmplY3RzO1xuIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwidmFyIGJhc2VHZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUdldEFsbEtleXMnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzLCBnZXRTeW1ib2xzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBbGxLZXlzO1xuIiwidmFyIG1ldGFNYXAgPSByZXF1aXJlKCcuL19tZXRhTWFwJyksXG4gICAgbm9vcCA9IHJlcXVpcmUoJy4vbm9vcCcpO1xuXG4vKipcbiAqIEdldHMgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAqL1xudmFyIGdldERhdGEgPSAhbWV0YU1hcCA/IG5vb3AgOiBmdW5jdGlvbihmdW5jKSB7XG4gIHJldHVybiBtZXRhTWFwLmdldChmdW5jKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RGF0YTtcbiIsInZhciByZWFsTmFtZXMgPSByZXF1aXJlKCcuL19yZWFsTmFtZXMnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYW1lIG9mIGBmdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBuYW1lLlxuICovXG5mdW5jdGlvbiBnZXRGdW5jTmFtZShmdW5jKSB7XG4gIHZhciByZXN1bHQgPSAoZnVuYy5uYW1lICsgJycpLFxuICAgICAgYXJyYXkgPSByZWFsTmFtZXNbcmVzdWx0XSxcbiAgICAgIGxlbmd0aCA9IGhhc093blByb3BlcnR5LmNhbGwocmVhbE5hbWVzLCByZXN1bHQpID8gYXJyYXkubGVuZ3RoIDogMDtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIgZGF0YSA9IGFycmF5W2xlbmd0aF0sXG4gICAgICAgIG90aGVyRnVuYyA9IGRhdGEuZnVuYztcbiAgICBpZiAob3RoZXJGdW5jID09IG51bGwgfHwgb3RoZXJGdW5jID09IGZ1bmMpIHtcbiAgICAgIHJldHVybiBkYXRhLm5hbWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RnVuY05hbWU7XG4iLCIvKipcbiAqIEdldHMgdGhlIGFyZ3VtZW50IHBsYWNlaG9sZGVyIHZhbHVlIGZvciBgZnVuY2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGxhY2Vob2xkZXIgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldEhvbGRlcihmdW5jKSB7XG4gIHZhciBvYmplY3QgPSBmdW5jO1xuICByZXR1cm4gb2JqZWN0LnBsYWNlaG9sZGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEhvbGRlcjtcbiIsInZhciBpc0tleWFibGUgPSByZXF1aXJlKCcuL19pc0tleWFibGUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICA6IGRhdGEubWFwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE1hcERhdGE7XG4iLCJ2YXIgaXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9faXNTdHJpY3RDb21wYXJhYmxlJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIEdldHMgdGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGdldE1hdGNoRGF0YShvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXMob2JqZWN0KSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgdmFyIGtleSA9IHJlc3VsdFtsZW5ndGhdLFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgcmVzdWx0W2xlbmd0aF0gPSBba2V5LCB2YWx1ZSwgaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXRjaERhdGE7XG4iLCJ2YXIgYmFzZUlzTmF0aXZlID0gcmVxdWlyZSgnLi9fYmFzZUlzTmF0aXZlJyksXG4gICAgZ2V0VmFsdWUgPSByZXF1aXJlKCcuL19nZXRWYWx1ZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5hdGl2ZTtcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRQcm90b3R5cGU7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRSYXdUYWc7XG4iLCJ2YXIgYXJyYXlGaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheUZpbHRlcicpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzO1xuIiwidmFyIERhdGFWaWV3ID0gcmVxdWlyZSgnLi9fRGF0YVZpZXcnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBQcm9taXNlID0gcmVxdWlyZSgnLi9fUHJvbWlzZScpLFxuICAgIFNldCA9IHJlcXVpcmUoJy4vX1NldCcpLFxuICAgIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyksXG4gICAgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VGFnO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VmFsdWU7XG4iLCIvKiogVXNlZCB0byBtYXRjaCB3cmFwIGRldGFpbCBjb21tZW50cy4gKi9cbnZhciByZVdyYXBEZXRhaWxzID0gL1xce1xcblxcL1xcKiBcXFt3cmFwcGVkIHdpdGggKC4rKVxcXSBcXCovLFxuICAgIHJlU3BsaXREZXRhaWxzID0gLyw/ICYgLztcblxuLyoqXG4gKiBFeHRyYWN0cyB3cmFwcGVyIGRldGFpbHMgZnJvbSB0aGUgYHNvdXJjZWAgYm9keSBjb21tZW50LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBzb3VyY2UgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd3JhcHBlciBkZXRhaWxzLlxuICovXG5mdW5jdGlvbiBnZXRXcmFwRGV0YWlscyhzb3VyY2UpIHtcbiAgdmFyIG1hdGNoID0gc291cmNlLm1hdGNoKHJlV3JhcERldGFpbHMpO1xuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXS5zcGxpdChyZVNwbGl0RGV0YWlscykgOiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRXcmFwRGV0YWlscztcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcGF0aGAgZXhpc3RzIG9uIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrIHByb3BlcnRpZXMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgaGFzRnVuYykge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gdG9LZXkocGF0aFtpbmRleF0pO1xuICAgIGlmICghKHJlc3VsdCA9IG9iamVjdCAhPSBudWxsICYmIGhhc0Z1bmMob2JqZWN0LCBrZXkpKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIG9iamVjdCA9IG9iamVjdFtrZXldO1xuICB9XG4gIGlmIChyZXN1bHQgfHwgKytpbmRleCAhPSBsZW5ndGgpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGxlbmd0aCA9IG9iamVjdCA9PSBudWxsID8gMCA6IG9iamVjdC5sZW5ndGg7XG4gIHJldHVybiAhIWxlbmd0aCAmJiBpc0xlbmd0aChsZW5ndGgpICYmIGlzSW5kZXgoa2V5LCBsZW5ndGgpICYmXG4gICAgKGlzQXJyYXkob2JqZWN0KSB8fCBpc0FyZ3VtZW50cyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNQYXRoO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hEZWxldGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoR2V0O1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEhhcztcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaFNldDtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHdyYXAgZGV0YWlsIGNvbW1lbnRzLiAqL1xudmFyIHJlV3JhcENvbW1lbnQgPSAvXFx7KD86XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAuK1xcXSBcXCpcXC8pP1xcbj8vO1xuXG4vKipcbiAqIEluc2VydHMgd3JhcHBlciBgZGV0YWlsc2AgaW4gYSBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIGBzb3VyY2VgIGJvZHkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSB0byBtb2RpZnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IGRldGFpbHMgVGhlIGRldGFpbHMgdG8gaW5zZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgbW9kaWZpZWQgc291cmNlLlxuICovXG5mdW5jdGlvbiBpbnNlcnRXcmFwRGV0YWlscyhzb3VyY2UsIGRldGFpbHMpIHtcbiAgdmFyIGxlbmd0aCA9IGRldGFpbHMubGVuZ3RoO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG4gIGRldGFpbHNbbGFzdEluZGV4XSA9IChsZW5ndGggPiAxID8gJyYgJyA6ICcnKSArIGRldGFpbHNbbGFzdEluZGV4XTtcbiAgZGV0YWlscyA9IGRldGFpbHMuam9pbihsZW5ndGggPiAyID8gJywgJyA6ICcgJyk7XG4gIHJldHVybiBzb3VyY2UucmVwbGFjZShyZVdyYXBDb21tZW50LCAne1xcbi8qIFt3cmFwcGVkIHdpdGggJyArIGRldGFpbHMgKyAnXSAqL1xcbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydFdyYXBEZXRhaWxzO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ByZWFkYWJsZVN5bWJvbCA9IFN5bWJvbCA/IFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBmbGF0dGVuYWJsZSBgYXJndW1lbnRzYCBvYmplY3Qgb3IgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZmxhdHRlbmFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNGbGF0dGVuYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpIHx8XG4gICAgISEoc3ByZWFkYWJsZVN5bWJvbCAmJiB2YWx1ZSAmJiB2YWx1ZVtzcHJlYWRhYmxlU3ltYm9sXSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGbGF0dGVuYWJsZTtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0luZGV4O1xuIiwidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXG4gICAgICApIHtcbiAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0l0ZXJhdGVlQ2FsbDtcbiIsInZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZUlzRGVlcFByb3AgPSAvXFwufFxcWyg/OlteW1xcXV0qfChbXCInXSkoPzooPyFcXDEpW15cXFxcXXxcXFxcLikqP1xcMSlcXF0vLFxuICAgIHJlSXNQbGFpblByb3AgPSAvXlxcdyokLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUgYW5kIG5vdCBhIHByb3BlcnR5IHBhdGguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxuICAgICAgdmFsdWUgPT0gbnVsbCB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gcmVJc1BsYWluUHJvcC50ZXN0KHZhbHVlKSB8fCAhcmVJc0RlZXBQcm9wLnRlc3QodmFsdWUpIHx8XG4gICAgKG9iamVjdCAhPSBudWxsICYmIHZhbHVlIGluIE9iamVjdChvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCJ2YXIgTGF6eVdyYXBwZXIgPSByZXF1aXJlKCcuL19MYXp5V3JhcHBlcicpLFxuICAgIGdldERhdGEgPSByZXF1aXJlKCcuL19nZXREYXRhJyksXG4gICAgZ2V0RnVuY05hbWUgPSByZXF1aXJlKCcuL19nZXRGdW5jTmFtZScpLFxuICAgIGxvZGFzaCA9IHJlcXVpcmUoJy4vd3JhcHBlckxvZGFzaCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGEgbGF6eSBjb3VudGVycGFydC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGhhcyBhIGxhenkgY291bnRlcnBhcnQsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0xhemlhYmxlKGZ1bmMpIHtcbiAgdmFyIGZ1bmNOYW1lID0gZ2V0RnVuY05hbWUoZnVuYyksXG4gICAgICBvdGhlciA9IGxvZGFzaFtmdW5jTmFtZV07XG5cbiAgaWYgKHR5cGVvZiBvdGhlciAhPSAnZnVuY3Rpb24nIHx8ICEoZnVuY05hbWUgaW4gTGF6eVdyYXBwZXIucHJvdG90eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZnVuYyA9PT0gb3RoZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgZGF0YSA9IGdldERhdGEob3RoZXIpO1xuICByZXR1cm4gISFkYXRhICYmIGZ1bmMgPT09IGRhdGFbMF07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMYXppYWJsZTtcbiIsInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUHJvdG90eXBlO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaWYgc3VpdGFibGUgZm9yIHN0cmljdFxuICogIGVxdWFsaXR5IGNvbXBhcmlzb25zLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlICYmICFpc09iamVjdCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTdHJpY3RDb21wYXJhYmxlO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUNsZWFyO1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlRGVsZXRlO1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUdldDtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkpID4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlSGFzO1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlU2V0O1xuIiwidmFyIEhhc2ggPSByZXF1aXJlKCcuL19IYXNoJyksXG4gICAgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuc2l6ZSA9IDA7XG4gIHRoaXMuX19kYXRhX18gPSB7XG4gICAgJ2hhc2gnOiBuZXcgSGFzaCxcbiAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAnc3RyaW5nJzogbmV3IEhhc2hcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUNsZWFyO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlRGVsZXRlO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZVNldDtcbiIsIi8qKlxuICogQ29udmVydHMgYG1hcGAgdG8gaXRzIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAqL1xuZnVuY3Rpb24gbWFwVG9BcnJheShtYXApIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XG5cbiAgbWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwVG9BcnJheTtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBtYXRjaGVzUHJvcGVydHlgIGZvciBzb3VyY2UgdmFsdWVzIHN1aXRhYmxlXG4gKiBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUoa2V5LCBzcmNWYWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Rba2V5XSA9PT0gc3JjVmFsdWUgJiZcbiAgICAgIChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gT2JqZWN0KG9iamVjdCkpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZTtcbiIsInZhciBtZW1vaXplID0gcmVxdWlyZSgnLi9tZW1vaXplJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcbiAqIGNhY2hlIHdoZW4gaXQgZXhjZWVkcyBgTUFYX01FTU9JWkVfU0laRWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtZW1vaXplQ2FwcGVkKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IG1lbW9pemUoZnVuYywgZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKGNhY2hlLnNpemUgPT09IE1BWF9NRU1PSVpFX1NJWkUpIHtcbiAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH0pO1xuXG4gIHZhciBjYWNoZSA9IHJlc3VsdC5jYWNoZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplQ2FwcGVkO1xuIiwidmFyIGNvbXBvc2VBcmdzID0gcmVxdWlyZSgnLi9fY29tcG9zZUFyZ3MnKSxcbiAgICBjb21wb3NlQXJnc1JpZ2h0ID0gcmVxdWlyZSgnLi9fY29tcG9zZUFyZ3NSaWdodCcpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKTtcblxuLyoqIFVzZWQgYXMgdGhlIGludGVybmFsIGFyZ3VtZW50IHBsYWNlaG9sZGVyLiAqL1xudmFyIFBMQUNFSE9MREVSID0gJ19fbG9kYXNoX3BsYWNlaG9sZGVyX18nO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0JPVU5EX0ZMQUcgPSA0LFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX1JFQVJHX0ZMQUcgPSAyNTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBNZXJnZXMgdGhlIGZ1bmN0aW9uIG1ldGFkYXRhIG9mIGBzb3VyY2VgIGludG8gYGRhdGFgLlxuICpcbiAqIE1lcmdpbmcgbWV0YWRhdGEgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIHdyYXBwZXJzIHVzZWQgdG8gaW52b2tlIGEgZnVuY3Rpb24uXG4gKiBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgbWV0aG9kcyBsaWtlIGBfLmJpbmRgLCBgXy5jdXJyeWAsIGFuZCBgXy5wYXJ0aWFsYFxuICogbWF5IGJlIGFwcGxpZWQgcmVnYXJkbGVzcyBvZiBleGVjdXRpb24gb3JkZXIuIE1ldGhvZHMgbGlrZSBgXy5hcnlgIGFuZFxuICogYF8ucmVhcmdgIG1vZGlmeSBmdW5jdGlvbiBhcmd1bWVudHMsIG1ha2luZyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmVcbiAqIGV4ZWN1dGVkIGltcG9ydGFudCwgcHJldmVudGluZyB0aGUgbWVyZ2luZyBvZiBtZXRhZGF0YS4gSG93ZXZlciwgd2UgbWFrZVxuICogYW4gZXhjZXB0aW9uIGZvciBhIHNhZmUgY29tYmluZWQgY2FzZSB3aGVyZSBjdXJyaWVkIGZ1bmN0aW9ucyBoYXZlIGBfLmFyeWBcbiAqIGFuZCBvciBgXy5yZWFyZ2AgYXBwbGllZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gZGF0YSBUaGUgZGVzdGluYXRpb24gbWV0YWRhdGEuXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIHNvdXJjZSBtZXRhZGF0YS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgZGF0YWAuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGF0YShkYXRhLCBzb3VyY2UpIHtcbiAgdmFyIGJpdG1hc2sgPSBkYXRhWzFdLFxuICAgICAgc3JjQml0bWFzayA9IHNvdXJjZVsxXSxcbiAgICAgIG5ld0JpdG1hc2sgPSBiaXRtYXNrIHwgc3JjQml0bWFzayxcbiAgICAgIGlzQ29tbW9uID0gbmV3Qml0bWFzayA8IChXUkFQX0JJTkRfRkxBRyB8IFdSQVBfQklORF9LRVlfRkxBRyB8IFdSQVBfQVJZX0ZMQUcpO1xuXG4gIHZhciBpc0NvbWJvID1cbiAgICAoKHNyY0JpdG1hc2sgPT0gV1JBUF9BUllfRkxBRykgJiYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHKSkgfHxcbiAgICAoKHNyY0JpdG1hc2sgPT0gV1JBUF9BUllfRkxBRykgJiYgKGJpdG1hc2sgPT0gV1JBUF9SRUFSR19GTEFHKSAmJiAoZGF0YVs3XS5sZW5ndGggPD0gc291cmNlWzhdKSkgfHxcbiAgICAoKHNyY0JpdG1hc2sgPT0gKFdSQVBfQVJZX0ZMQUcgfCBXUkFQX1JFQVJHX0ZMQUcpKSAmJiAoc291cmNlWzddLmxlbmd0aCA8PSBzb3VyY2VbOF0pICYmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRykpO1xuXG4gIC8vIEV4aXQgZWFybHkgaWYgbWV0YWRhdGEgY2FuJ3QgYmUgbWVyZ2VkLlxuICBpZiAoIShpc0NvbW1vbiB8fCBpc0NvbWJvKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIC8vIFVzZSBzb3VyY2UgYHRoaXNBcmdgIGlmIGF2YWlsYWJsZS5cbiAgaWYgKHNyY0JpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRykge1xuICAgIGRhdGFbMl0gPSBzb3VyY2VbMl07XG4gICAgLy8gU2V0IHdoZW4gY3VycnlpbmcgYSBib3VuZCBmdW5jdGlvbi5cbiAgICBuZXdCaXRtYXNrIHw9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyA/IDAgOiBXUkFQX0NVUlJZX0JPVU5EX0ZMQUc7XG4gIH1cbiAgLy8gQ29tcG9zZSBwYXJ0aWFsIGFyZ3VtZW50cy5cbiAgdmFyIHZhbHVlID0gc291cmNlWzNdO1xuICBpZiAodmFsdWUpIHtcbiAgICB2YXIgcGFydGlhbHMgPSBkYXRhWzNdO1xuICAgIGRhdGFbM10gPSBwYXJ0aWFscyA/IGNvbXBvc2VBcmdzKHBhcnRpYWxzLCB2YWx1ZSwgc291cmNlWzRdKSA6IHZhbHVlO1xuICAgIGRhdGFbNF0gPSBwYXJ0aWFscyA/IHJlcGxhY2VIb2xkZXJzKGRhdGFbM10sIFBMQUNFSE9MREVSKSA6IHNvdXJjZVs0XTtcbiAgfVxuICAvLyBDb21wb3NlIHBhcnRpYWwgcmlnaHQgYXJndW1lbnRzLlxuICB2YWx1ZSA9IHNvdXJjZVs1XTtcbiAgaWYgKHZhbHVlKSB7XG4gICAgcGFydGlhbHMgPSBkYXRhWzVdO1xuICAgIGRhdGFbNV0gPSBwYXJ0aWFscyA/IGNvbXBvc2VBcmdzUmlnaHQocGFydGlhbHMsIHZhbHVlLCBzb3VyY2VbNl0pIDogdmFsdWU7XG4gICAgZGF0YVs2XSA9IHBhcnRpYWxzID8gcmVwbGFjZUhvbGRlcnMoZGF0YVs1XSwgUExBQ0VIT0xERVIpIDogc291cmNlWzZdO1xuICB9XG4gIC8vIFVzZSBzb3VyY2UgYGFyZ1Bvc2AgaWYgYXZhaWxhYmxlLlxuICB2YWx1ZSA9IHNvdXJjZVs3XTtcbiAgaWYgKHZhbHVlKSB7XG4gICAgZGF0YVs3XSA9IHZhbHVlO1xuICB9XG4gIC8vIFVzZSBzb3VyY2UgYGFyeWAgaWYgaXQncyBzbWFsbGVyLlxuICBpZiAoc3JjQml0bWFzayAmIFdSQVBfQVJZX0ZMQUcpIHtcbiAgICBkYXRhWzhdID0gZGF0YVs4XSA9PSBudWxsID8gc291cmNlWzhdIDogbmF0aXZlTWluKGRhdGFbOF0sIHNvdXJjZVs4XSk7XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgYXJpdHlgIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQuXG4gIGlmIChkYXRhWzldID09IG51bGwpIHtcbiAgICBkYXRhWzldID0gc291cmNlWzldO1xuICB9XG4gIC8vIFVzZSBzb3VyY2UgYGZ1bmNgIGFuZCBtZXJnZSBiaXRtYXNrcy5cbiAgZGF0YVswXSA9IHNvdXJjZVswXTtcbiAgZGF0YVsxXSA9IG5ld0JpdG1hc2s7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVyZ2VEYXRhO1xuIiwidmFyIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyk7XG5cbi8qKiBVc2VkIHRvIHN0b3JlIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIG1ldGFNYXAgPSBXZWFrTWFwICYmIG5ldyBXZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1ldGFNYXA7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzO1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbm9kZVV0aWw7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiIsIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJBcmc7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuIiwiLyoqIFVzZWQgdG8gbG9va3VwIHVubWluaWZpZWQgZnVuY3Rpb24gbmFtZXMuICovXG52YXIgcmVhbE5hbWVzID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gcmVhbE5hbWVzO1xuIiwidmFyIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBSZW9yZGVyIGBhcnJheWAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgaW5kZXhlcyB3aGVyZSB0aGUgZWxlbWVudCBhdFxuICogdGhlIGZpcnN0IGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgZWxlbWVudCBhdFxuICogdGhlIHNlY29uZCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHJlb3JkZXIuXG4gKiBAcGFyYW0ge0FycmF5fSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcnJheSBpbmRleGVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIHJlb3JkZXIoYXJyYXksIGluZGV4ZXMpIHtcbiAgdmFyIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihpbmRleGVzLmxlbmd0aCwgYXJyTGVuZ3RoKSxcbiAgICAgIG9sZEFycmF5ID0gY29weUFycmF5KGFycmF5KTtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgYXJyYXlbbGVuZ3RoXSA9IGlzSW5kZXgoaW5kZXgsIGFyckxlbmd0aCkgPyBvbGRBcnJheVtpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlb3JkZXI7XG4iLCIvKiogVXNlZCBhcyB0aGUgaW50ZXJuYWwgYXJndW1lbnQgcGxhY2Vob2xkZXIuICovXG52YXIgUExBQ0VIT0xERVIgPSAnX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyc7XG5cbi8qKlxuICogUmVwbGFjZXMgYWxsIGBwbGFjZWhvbGRlcmAgZWxlbWVudHMgaW4gYGFycmF5YCB3aXRoIGFuIGludGVybmFsIHBsYWNlaG9sZGVyXG4gKiBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB0aGVpciBpbmRleGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdG8gcmVwbGFjZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VIb2xkZXJzKGFycmF5LCBwbGFjZWhvbGRlcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmICh2YWx1ZSA9PT0gcGxhY2Vob2xkZXIgfHwgdmFsdWUgPT09IFBMQUNFSE9MREVSKSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBQTEFDRUhPTERFUjtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcGxhY2VIb2xkZXJzO1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwiLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGFkZFxuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAYWxpYXMgcHVzaFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVBZGQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVIYXM7XG4iLCJ2YXIgYmFzZVNldERhdGEgPSByZXF1aXJlKCcuL19iYXNlU2V0RGF0YScpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gKlxuICogKipOb3RlOioqIElmIHRoaXMgZnVuY3Rpb24gYmVjb21lcyBob3QsIGkuZS4gaXMgaW52b2tlZCBhIGxvdCBpbiBhIHNob3J0XG4gKiBwZXJpb2Qgb2YgdGltZSwgaXQgd2lsbCB0cmlwIGl0cyBicmVha2VyIGFuZCB0cmFuc2l0aW9uIHRvIGFuIGlkZW50aXR5XG4gKiBmdW5jdGlvbiB0byBhdm9pZCBnYXJiYWdlIGNvbGxlY3Rpb24gcGF1c2VzIGluIFY4LiBTZWVcbiAqIFtWOCBpc3N1ZSAyMDcwXShodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0yMDcwKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIG1ldGFkYXRhIHdpdGguXG4gKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1ldGFkYXRhLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldERhdGEgPSBzaG9ydE91dChiYXNlU2V0RGF0YSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0RGF0YTtcbiIsIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9BcnJheTtcbiIsInZhciBiYXNlU2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlU2V0VG9TdHJpbmcnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9TdHJpbmc7XG4iLCJ2YXIgZ2V0V3JhcERldGFpbHMgPSByZXF1aXJlKCcuL19nZXRXcmFwRGV0YWlscycpLFxuICAgIGluc2VydFdyYXBEZXRhaWxzID0gcmVxdWlyZSgnLi9faW5zZXJ0V3JhcERldGFpbHMnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyksXG4gICAgdXBkYXRlV3JhcERldGFpbHMgPSByZXF1aXJlKCcuL191cGRhdGVXcmFwRGV0YWlscycpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGB3cmFwcGVyYCB0byBtaW1pYyB0aGUgc291cmNlIG9mIGByZWZlcmVuY2VgXG4gKiB3aXRoIHdyYXBwZXIgZGV0YWlscyBpbiBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIGJvZHkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBwZXIgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlZmVyZW5jZSBUaGUgcmVmZXJlbmNlIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgd3JhcHBlcmAuXG4gKi9cbmZ1bmN0aW9uIHNldFdyYXBUb1N0cmluZyh3cmFwcGVyLCByZWZlcmVuY2UsIGJpdG1hc2spIHtcbiAgdmFyIHNvdXJjZSA9IChyZWZlcmVuY2UgKyAnJyk7XG4gIHJldHVybiBzZXRUb1N0cmluZyh3cmFwcGVyLCBpbnNlcnRXcmFwRGV0YWlscyhzb3VyY2UsIHVwZGF0ZVdyYXBEZXRhaWxzKGdldFdyYXBEZXRhaWxzKHNvdXJjZSksIGJpdG1hc2spKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0V3JhcFRvU3RyaW5nO1xuIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3J0T3V0O1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tEZWxldGU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tHZXQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrSGFzO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tTZXQ7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5pbmRleE9mYCB3aGljaCBwZXJmb3JtcyBzdHJpY3QgZXF1YWxpdHlcbiAqIGNvbXBhcmlzb25zIG9mIHZhbHVlcywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBpbmRleCA9IGZyb21JbmRleCAtIDEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaWN0SW5kZXhPZjtcbiIsInZhciBtZW1vaXplQ2FwcGVkID0gcmVxdWlyZSgnLi9fbWVtb2l6ZUNhcHBlZCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9QYXRoO1xuIiwidmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcga2V5IGlmIGl0J3Mgbm90IGEgc3RyaW5nIG9yIHN5bWJvbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0tleTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsInZhciBhcnJheUVhY2ggPSByZXF1aXJlKCcuL19hcnJheUVhY2gnKSxcbiAgICBhcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlcycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfQ1VSUllfUklHSFRfRkxBRyA9IDE2LFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgPSA2NCxcbiAgICBXUkFQX0FSWV9GTEFHID0gMTI4LFxuICAgIFdSQVBfUkVBUkdfRkxBRyA9IDI1NixcbiAgICBXUkFQX0ZMSVBfRkxBRyA9IDUxMjtcblxuLyoqIFVzZWQgdG8gYXNzb2NpYXRlIHdyYXAgbWV0aG9kcyB3aXRoIHRoZWlyIGJpdCBmbGFncy4gKi9cbnZhciB3cmFwRmxhZ3MgPSBbXG4gIFsnYXJ5JywgV1JBUF9BUllfRkxBR10sXG4gIFsnYmluZCcsIFdSQVBfQklORF9GTEFHXSxcbiAgWydiaW5kS2V5JywgV1JBUF9CSU5EX0tFWV9GTEFHXSxcbiAgWydjdXJyeScsIFdSQVBfQ1VSUllfRkxBR10sXG4gIFsnY3VycnlSaWdodCcsIFdSQVBfQ1VSUllfUklHSFRfRkxBR10sXG4gIFsnZmxpcCcsIFdSQVBfRkxJUF9GTEFHXSxcbiAgWydwYXJ0aWFsJywgV1JBUF9QQVJUSUFMX0ZMQUddLFxuICBbJ3BhcnRpYWxSaWdodCcsIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHXSxcbiAgWydyZWFyZycsIFdSQVBfUkVBUkdfRkxBR11cbl07XG5cbi8qKlxuICogVXBkYXRlcyB3cmFwcGVyIGBkZXRhaWxzYCBiYXNlZCBvbiBgYml0bWFza2AgZmxhZ3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHtBcnJheX0gZGV0YWlscyBUaGUgZGV0YWlscyB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBkZXRhaWxzYC5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlV3JhcERldGFpbHMoZGV0YWlscywgYml0bWFzaykge1xuICBhcnJheUVhY2god3JhcEZsYWdzLCBmdW5jdGlvbihwYWlyKSB7XG4gICAgdmFyIHZhbHVlID0gJ18uJyArIHBhaXJbMF07XG4gICAgaWYgKChiaXRtYXNrICYgcGFpclsxXSkgJiYgIWFycmF5SW5jbHVkZXMoZGV0YWlscywgdmFsdWUpKSB7XG4gICAgICBkZXRhaWxzLnB1c2godmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBkZXRhaWxzLnNvcnQoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1cGRhdGVXcmFwRGV0YWlscztcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgTG9kYXNoV3JhcHBlciA9IHJlcXVpcmUoJy4vX0xvZGFzaFdyYXBwZXInKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHdyYXBwZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gd3JhcHBlciBUaGUgd3JhcHBlciB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB3cmFwcGVyLlxuICovXG5mdW5jdGlvbiB3cmFwcGVyQ2xvbmUod3JhcHBlcikge1xuICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7XG4gICAgcmV0dXJuIHdyYXBwZXIuY2xvbmUoKTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gbmV3IExvZGFzaFdyYXBwZXIod3JhcHBlci5fX3dyYXBwZWRfXywgd3JhcHBlci5fX2NoYWluX18pO1xuICByZXN1bHQuX19hY3Rpb25zX18gPSBjb3B5QXJyYXkod3JhcHBlci5fX2FjdGlvbnNfXyk7XG4gIHJlc3VsdC5fX2luZGV4X18gID0gd3JhcHBlci5fX2luZGV4X187XG4gIHJlc3VsdC5fX3ZhbHVlc19fID0gd3JhcHBlci5fX3ZhbHVlc19fO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXBwZXJDbG9uZTtcbiIsInZhciBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBjcmVhdGVBc3NpZ25lciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUFzc2lnbmVyJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIHRvIHRoZVxuICogZGVzdGluYXRpb24gb2JqZWN0LiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuXG4gKiBTdWJzZXF1ZW50IHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAgYW5kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgT2JqZWN0LmFzc2lnbmBdKGh0dHBzOi8vbWRuLmlvL09iamVjdC9hc3NpZ24pLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uYXNzaWduSW5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIGZ1bmN0aW9uIEJhcigpIHtcbiAqICAgdGhpcy5jID0gMztcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmIgPSAyO1xuICogQmFyLnByb3RvdHlwZS5kID0gNDtcbiAqXG4gKiBfLmFzc2lnbih7ICdhJzogMCB9LCBuZXcgRm9vLCBuZXcgQmFyKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYyc6IDMgfVxuICovXG52YXIgYXNzaWduID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UpIHtcbiAgaWYgKGlzUHJvdG90eXBlKHNvdXJjZSkgfHwgaXNBcnJheUxpa2Uoc291cmNlKSkge1xuICAgIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgfVxuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ247XG4iLCJ2YXIgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGNyZWF0ZVdyYXAgPSByZXF1aXJlKCcuL19jcmVhdGVXcmFwJyksXG4gICAgZ2V0SG9sZGVyID0gcmVxdWlyZSgnLi9fZ2V0SG9sZGVyJyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2BcbiAqIGFuZCBgcGFydGlhbHNgIHByZXBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICpcbiAqIFRoZSBgXy5iaW5kLnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWMgYnVpbGRzLFxuICogbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgbmF0aXZlIGBGdW5jdGlvbiNiaW5kYCwgdGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCJcbiAqIHByb3BlcnR5IG9mIGJvdW5kIGZ1bmN0aW9ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGJpbmQuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYm91bmQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIGdyZWV0KGdyZWV0aW5nLCBwdW5jdHVhdGlvbikge1xuICogICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyB0aGlzLnVzZXIgKyBwdW5jdHVhdGlvbjtcbiAqIH1cbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAndXNlcic6ICdmcmVkJyB9O1xuICpcbiAqIHZhciBib3VuZCA9IF8uYmluZChncmVldCwgb2JqZWN0LCAnaGknKTtcbiAqIGJvdW5kKCchJyk7XG4gKiAvLyA9PiAnaGkgZnJlZCEnXG4gKlxuICogLy8gQm91bmQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgXywgJyEnKTtcbiAqIGJvdW5kKCdoaScpO1xuICogLy8gPT4gJ2hpIGZyZWQhJ1xuICovXG52YXIgYmluZCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHRoaXNBcmcsIHBhcnRpYWxzKSB7XG4gIHZhciBiaXRtYXNrID0gV1JBUF9CSU5EX0ZMQUc7XG4gIGlmIChwYXJ0aWFscy5sZW5ndGgpIHtcbiAgICB2YXIgaG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLCBnZXRIb2xkZXIoYmluZCkpO1xuICAgIGJpdG1hc2sgfD0gV1JBUF9QQVJUSUFMX0ZMQUc7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMpO1xufSk7XG5cbi8vIEFzc2lnbiBkZWZhdWx0IHBsYWNlaG9sZGVycy5cbmJpbmQucGxhY2Vob2xkZXIgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBiaW5kO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29uc3RhbnQ7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgbm93ID0gcmVxdWlyZSgnLi9ub3cnKSxcbiAgICB0b051bWJlciA9IHJlcXVpcmUoJy4vdG9OdW1iZXInKTtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4LFxuICAgIG5hdGl2ZU1pbiA9IE1hdGgubWluO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBkZWJvdW5jZWQgZnVuY3Rpb24gdGhhdCBkZWxheXMgaW52b2tpbmcgYGZ1bmNgIHVudGlsIGFmdGVyIGB3YWl0YFxuICogbWlsbGlzZWNvbmRzIGhhdmUgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gd2FzXG4gKiBpbnZva2VkLiBUaGUgZGVib3VuY2VkIGZ1bmN0aW9uIGNvbWVzIHdpdGggYSBgY2FuY2VsYCBtZXRob2QgdG8gY2FuY2VsXG4gKiBkZWxheWVkIGBmdW5jYCBpbnZvY2F0aW9ucyBhbmQgYSBgZmx1c2hgIG1ldGhvZCB0byBpbW1lZGlhdGVseSBpbnZva2UgdGhlbS5cbiAqIFByb3ZpZGUgYG9wdGlvbnNgIHRvIGluZGljYXRlIHdoZXRoZXIgYGZ1bmNgIHNob3VsZCBiZSBpbnZva2VkIG9uIHRoZVxuICogbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYHdhaXRgIHRpbWVvdXQuIFRoZSBgZnVuY2AgaXMgaW52b2tlZFxuICogd2l0aCB0aGUgbGFzdCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIGRlYm91bmNlZCBmdW5jdGlvbi4gU3Vic2VxdWVudFxuICogY2FsbHMgdG8gdGhlIGRlYm91bmNlZCBmdW5jdGlvbiByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBgZnVuY2BcbiAqIGludm9jYXRpb24uXG4gKlxuICogKipOb3RlOioqIElmIGBsZWFkaW5nYCBhbmQgYHRyYWlsaW5nYCBvcHRpb25zIGFyZSBgdHJ1ZWAsIGBmdW5jYCBpc1xuICogaW52b2tlZCBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb25cbiAqIGlzIGludm9rZWQgbW9yZSB0aGFuIG9uY2UgZHVyaW5nIHRoZSBgd2FpdGAgdGltZW91dC5cbiAqXG4gKiBJZiBgd2FpdGAgaXMgYDBgIGFuZCBgbGVhZGluZ2AgaXMgYGZhbHNlYCwgYGZ1bmNgIGludm9jYXRpb24gaXMgZGVmZXJyZWRcbiAqIHVudGlsIHRvIHRoZSBuZXh0IHRpY2ssIHNpbWlsYXIgdG8gYHNldFRpbWVvdXRgIHdpdGggYSB0aW1lb3V0IG9mIGAwYC5cbiAqXG4gKiBTZWUgW0RhdmlkIENvcmJhY2hvJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9kZWJvdW5jaW5nLXRocm90dGxpbmctZXhwbGFpbmVkLWV4YW1wbGVzLylcbiAqIGZvciBkZXRhaWxzIG92ZXIgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYF8uZGVib3VuY2VgIGFuZCBgXy50aHJvdHRsZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWJvdW5jZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2FpdD0wXSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sZWFkaW5nPWZhbHNlXVxuICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhXYWl0XVxuICogIFRoZSBtYXhpbXVtIHRpbWUgYGZ1bmNgIGlzIGFsbG93ZWQgdG8gYmUgZGVsYXllZCBiZWZvcmUgaXQncyBpbnZva2VkLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy50cmFpbGluZz10cnVlXVxuICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBkZWJvdW5jZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIEF2b2lkIGNvc3RseSBjYWxjdWxhdGlvbnMgd2hpbGUgdGhlIHdpbmRvdyBzaXplIGlzIGluIGZsdXguXG4gKiBqUXVlcnkod2luZG93KS5vbigncmVzaXplJywgXy5kZWJvdW5jZShjYWxjdWxhdGVMYXlvdXQsIDE1MCkpO1xuICpcbiAqIC8vIEludm9rZSBgc2VuZE1haWxgIHdoZW4gY2xpY2tlZCwgZGVib3VuY2luZyBzdWJzZXF1ZW50IGNhbGxzLlxuICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIF8uZGVib3VuY2Uoc2VuZE1haWwsIDMwMCwge1xuICogICAnbGVhZGluZyc6IHRydWUsXG4gKiAgICd0cmFpbGluZyc6IGZhbHNlXG4gKiB9KSk7XG4gKlxuICogLy8gRW5zdXJlIGBiYXRjaExvZ2AgaXMgaW52b2tlZCBvbmNlIGFmdGVyIDEgc2Vjb25kIG9mIGRlYm91bmNlZCBjYWxscy5cbiAqIHZhciBkZWJvdW5jZWQgPSBfLmRlYm91bmNlKGJhdGNoTG9nLCAyNTAsIHsgJ21heFdhaXQnOiAxMDAwIH0pO1xuICogdmFyIHNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZSgnL3N0cmVhbScpO1xuICogalF1ZXJ5KHNvdXJjZSkub24oJ21lc3NhZ2UnLCBkZWJvdW5jZWQpO1xuICpcbiAqIC8vIENhbmNlbCB0aGUgdHJhaWxpbmcgZGVib3VuY2VkIGludm9jYXRpb24uXG4gKiBqUXVlcnkod2luZG93KS5vbigncG9wc3RhdGUnLCBkZWJvdW5jZWQuY2FuY2VsKTtcbiAqL1xuZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICB2YXIgbGFzdEFyZ3MsXG4gICAgICBsYXN0VGhpcyxcbiAgICAgIG1heFdhaXQsXG4gICAgICByZXN1bHQsXG4gICAgICB0aW1lcklkLFxuICAgICAgbGFzdENhbGxUaW1lLFxuICAgICAgbGFzdEludm9rZVRpbWUgPSAwLFxuICAgICAgbGVhZGluZyA9IGZhbHNlLFxuICAgICAgbWF4aW5nID0gZmFsc2UsXG4gICAgICB0cmFpbGluZyA9IHRydWU7XG5cbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgd2FpdCA9IHRvTnVtYmVyKHdhaXQpIHx8IDA7XG4gIGlmIChpc09iamVjdChvcHRpb25zKSkge1xuICAgIGxlYWRpbmcgPSAhIW9wdGlvbnMubGVhZGluZztcbiAgICBtYXhpbmcgPSAnbWF4V2FpdCcgaW4gb3B0aW9ucztcbiAgICBtYXhXYWl0ID0gbWF4aW5nID8gbmF0aXZlTWF4KHRvTnVtYmVyKG9wdGlvbnMubWF4V2FpdCkgfHwgMCwgd2FpdCkgOiBtYXhXYWl0O1xuICAgIHRyYWlsaW5nID0gJ3RyYWlsaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLnRyYWlsaW5nIDogdHJhaWxpbmc7XG4gIH1cblxuICBmdW5jdGlvbiBpbnZva2VGdW5jKHRpbWUpIHtcbiAgICB2YXIgYXJncyA9IGxhc3RBcmdzLFxuICAgICAgICB0aGlzQXJnID0gbGFzdFRoaXM7XG5cbiAgICBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICAgIGxhc3RJbnZva2VUaW1lID0gdGltZTtcbiAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBsZWFkaW5nRWRnZSh0aW1lKSB7XG4gICAgLy8gUmVzZXQgYW55IGBtYXhXYWl0YCB0aW1lci5cbiAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgLy8gU3RhcnQgdGhlIHRpbWVyIGZvciB0aGUgdHJhaWxpbmcgZWRnZS5cbiAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgIC8vIEludm9rZSB0aGUgbGVhZGluZyBlZGdlLlxuICAgIHJldHVybiBsZWFkaW5nID8gaW52b2tlRnVuYyh0aW1lKSA6IHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbWFpbmluZ1dhaXQodGltZSkge1xuICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWUsXG4gICAgICAgIHRpbWVXYWl0aW5nID0gd2FpdCAtIHRpbWVTaW5jZUxhc3RDYWxsO1xuXG4gICAgcmV0dXJuIG1heGluZ1xuICAgICAgPyBuYXRpdmVNaW4odGltZVdhaXRpbmcsIG1heFdhaXQgLSB0aW1lU2luY2VMYXN0SW52b2tlKVxuICAgICAgOiB0aW1lV2FpdGluZztcbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3VsZEludm9rZSh0aW1lKSB7XG4gICAgdmFyIHRpbWVTaW5jZUxhc3RDYWxsID0gdGltZSAtIGxhc3RDYWxsVGltZSxcbiAgICAgICAgdGltZVNpbmNlTGFzdEludm9rZSA9IHRpbWUgLSBsYXN0SW52b2tlVGltZTtcblxuICAgIC8vIEVpdGhlciB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsLCBhY3Rpdml0eSBoYXMgc3RvcHBlZCBhbmQgd2UncmUgYXQgdGhlXG4gICAgLy8gdHJhaWxpbmcgZWRnZSwgdGhlIHN5c3RlbSB0aW1lIGhhcyBnb25lIGJhY2t3YXJkcyBhbmQgd2UncmUgdHJlYXRpbmdcbiAgICAvLyBpdCBhcyB0aGUgdHJhaWxpbmcgZWRnZSwgb3Igd2UndmUgaGl0IHRoZSBgbWF4V2FpdGAgbGltaXQuXG4gICAgcmV0dXJuIChsYXN0Q2FsbFRpbWUgPT09IHVuZGVmaW5lZCB8fCAodGltZVNpbmNlTGFzdENhbGwgPj0gd2FpdCkgfHxcbiAgICAgICh0aW1lU2luY2VMYXN0Q2FsbCA8IDApIHx8IChtYXhpbmcgJiYgdGltZVNpbmNlTGFzdEludm9rZSA+PSBtYXhXYWl0KSk7XG4gIH1cblxuICBmdW5jdGlvbiB0aW1lckV4cGlyZWQoKSB7XG4gICAgdmFyIHRpbWUgPSBub3coKTtcbiAgICBpZiAoc2hvdWxkSW52b2tlKHRpbWUpKSB7XG4gICAgICByZXR1cm4gdHJhaWxpbmdFZGdlKHRpbWUpO1xuICAgIH1cbiAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lci5cbiAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHJlbWFpbmluZ1dhaXQodGltZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhaWxpbmdFZGdlKHRpbWUpIHtcbiAgICB0aW1lcklkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gT25seSBpbnZva2UgaWYgd2UgaGF2ZSBgbGFzdEFyZ3NgIHdoaWNoIG1lYW5zIGBmdW5jYCBoYXMgYmVlblxuICAgIC8vIGRlYm91bmNlZCBhdCBsZWFzdCBvbmNlLlxuICAgIGlmICh0cmFpbGluZyAmJiBsYXN0QXJncykge1xuICAgICAgcmV0dXJuIGludm9rZUZ1bmModGltZSk7XG4gICAgfVxuICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBpZiAodGltZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgfVxuICAgIGxhc3RJbnZva2VUaW1lID0gMDtcbiAgICBsYXN0QXJncyA9IGxhc3RDYWxsVGltZSA9IGxhc3RUaGlzID0gdGltZXJJZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIHJldHVybiB0aW1lcklkID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiB0cmFpbGluZ0VkZ2Uobm93KCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVib3VuY2VkKCkge1xuICAgIHZhciB0aW1lID0gbm93KCksXG4gICAgICAgIGlzSW52b2tpbmcgPSBzaG91bGRJbnZva2UodGltZSk7XG5cbiAgICBsYXN0QXJncyA9IGFyZ3VtZW50cztcbiAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgbGFzdENhbGxUaW1lID0gdGltZTtcblxuICAgIGlmIChpc0ludm9raW5nKSB7XG4gICAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBsZWFkaW5nRWRnZShsYXN0Q2FsbFRpbWUpO1xuICAgICAgfVxuICAgICAgaWYgKG1heGluZykge1xuICAgICAgICAvLyBIYW5kbGUgaW52b2NhdGlvbnMgaW4gYSB0aWdodCBsb29wLlxuICAgICAgICBjbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgICAgIHJldHVybiBpbnZva2VGdW5jKGxhc3RDYWxsVGltZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgZGVib3VuY2VkLmNhbmNlbCA9IGNhbmNlbDtcbiAgZGVib3VuY2VkLmZsdXNoID0gZmx1c2g7XG4gIHJldHVybiBkZWJvdW5jZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVib3VuY2U7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsInZhciBhcnJheUZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5RmlsdGVyJyksXG4gICAgYmFzZUZpbHRlciA9IHJlcXVpcmUoJy4vX2Jhc2VGaWx0ZXInKSxcbiAgICBiYXNlSXRlcmF0ZWUgPSByZXF1aXJlKCcuL19iYXNlSXRlcmF0ZWUnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAsIHJldHVybmluZyBhbiBhcnJheSBvZiBhbGwgZWxlbWVudHNcbiAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8ucmVtb3ZlYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKiBAc2VlIF8ucmVqZWN0XG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfVxuICogXTtcbiAqXG4gKiBfLmZpbHRlcih1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmlsdGVyKHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maWx0ZXIodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbHRlcih1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICovXG5mdW5jdGlvbiBmaWx0ZXIoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RmlsdGVyIDogYmFzZUZpbHRlcjtcbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZpbHRlcjtcbiIsInZhciBjcmVhdGVGaW5kID0gcmVxdWlyZSgnLi9fY3JlYXRlRmluZCcpLFxuICAgIGZpbmRJbmRleCA9IHJlcXVpcmUoJy4vZmluZEluZGV4Jyk7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAsIHJldHVybmluZyB0aGUgZmlyc3QgZWxlbWVudFxuICogYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICogYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWF0Y2hlZCBlbGVtZW50LCBlbHNlIGB1bmRlZmluZWRgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfSxcbiAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEsICAnYWN0aXZlJzogdHJ1ZSB9XG4gKiBdO1xuICpcbiAqIF8uZmluZCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hZ2UgPCA0MDsgfSk7XG4gKiAvLyA9PiBvYmplY3QgZm9yICdiYXJuZXknXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZCh1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gKiAvLyA9PiBvYmplY3QgZm9yICdwZWJibGVzJ1xuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZCh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICogLy8gPT4gb2JqZWN0IGZvciAnZnJlZCdcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZCh1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gb2JqZWN0IGZvciAnYmFybmV5J1xuICovXG52YXIgZmluZCA9IGNyZWF0ZUZpbmQoZmluZEluZGV4KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmaW5kO1xuIiwidmFyIGJhc2VGaW5kSW5kZXggPSByZXF1aXJlKCcuL19iYXNlRmluZEluZGV4JyksXG4gICAgYmFzZUl0ZXJhdGVlID0gcmVxdWlyZSgnLi9fYmFzZUl0ZXJhdGVlJyksXG4gICAgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi90b0ludGVnZXInKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0XG4gKiBlbGVtZW50IGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciBpbnN0ZWFkIG9mIHRoZSBlbGVtZW50IGl0c2VsZi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDEuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIGVsZW1lbnQsIGVsc2UgYC0xYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogZmFsc2UgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiB0cnVlIH1cbiAqIF07XG4gKlxuICogXy5maW5kSW5kZXgodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8udXNlciA9PSAnYmFybmV5JzsgfSk7XG4gKiAvLyA9PiAwXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZEluZGV4KHVzZXJzLCB7ICd1c2VyJzogJ2ZyZWQnLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gKiAvLyA9PiAxXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kSW5kZXgodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IDBcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZEluZGV4KHVzZXJzLCAnYWN0aXZlJyk7XG4gKiAvLyA9PiAyXG4gKi9cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICB2YXIgaW5kZXggPSBmcm9tSW5kZXggPT0gbnVsbCA/IDAgOiB0b0ludGVnZXIoZnJvbUluZGV4KTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIGluZGV4ID0gbmF0aXZlTWF4KGxlbmd0aCArIGluZGV4LCAwKTtcbiAgfVxuICByZXR1cm4gYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIGluZGV4KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmaW5kSW5kZXg7XG4iLCJ2YXIgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGZsYXR0ZW5zIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5mbGF0dGVuRGVlcChbMSwgWzIsIFszLCBbNF1dLCA1XV0pO1xuICogLy8gPT4gWzEsIDIsIDMsIDQsIDVdXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5EZWVwKGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCBJTkZJTklUWSkgOiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuRGVlcDtcbiIsInZhciBhcnJheUVhY2ggPSByZXF1aXJlKCcuL19hcnJheUVhY2gnKSxcbiAgICBiYXNlRWFjaCA9IHJlcXVpcmUoJy4vX2Jhc2VFYWNoJyksXG4gICAgY2FzdEZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fY2FzdEZ1bmN0aW9uJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggZWxlbWVudC5cbiAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogKipOb3RlOioqIEFzIHdpdGggb3RoZXIgXCJDb2xsZWN0aW9uc1wiIG1ldGhvZHMsIG9iamVjdHMgd2l0aCBhIFwibGVuZ3RoXCJcbiAqIHByb3BlcnR5IGFyZSBpdGVyYXRlZCBsaWtlIGFycmF5cy4gVG8gYXZvaWQgdGhpcyBiZWhhdmlvciB1c2UgYF8uZm9ySW5gXG4gKiBvciBgXy5mb3JPd25gIGZvciBvYmplY3QgaXRlcmF0aW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhbGlhcyBlYWNoXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqIEBzZWUgXy5mb3JFYWNoUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5mb3JFYWNoKFsxLCAyXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAqICAgY29uc29sZS5sb2codmFsdWUpO1xuICogfSk7XG4gKiAvLyA9PiBMb2dzIGAxYCB0aGVuIGAyYC5cbiAqXG4gKiBfLmZvckVhY2goeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gKiB9KTtcbiAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICovXG5mdW5jdGlvbiBmb3JFYWNoKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RWFjaCA6IGJhc2VFYWNoO1xuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmb3JFYWNoO1xuIiwidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0Jyk7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXQ7XG4iLCJ2YXIgYmFzZUhhc0luID0gcmVxdWlyZSgnLi9fYmFzZUhhc0luJyksXG4gICAgaGFzUGF0aCA9IHJlcXVpcmUoJy4vX2hhc1BhdGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGlzIGEgZGlyZWN0IG9yIGluaGVyaXRlZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XG4gKlxuICogXy5oYXNJbihvYmplY3QsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsICdhLmInKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsICdiJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBoYXNJbihvYmplY3QsIHBhdGgpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBiYXNlSGFzSW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc0luO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqXG4gKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpZGVudGl0eTtcbiIsInZhciBiYXNlSXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL19iYXNlSXNBcmd1bWVudHMnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FyZ3VtZW50cztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZTtcbiIsInZhciBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNBcnJheUxpa2VgIGV4Y2VwdCB0aGF0IGl0IGFsc28gY2hlY2tzIGlmIGB2YWx1ZWBcbiAqIGlzIGFuIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0FycmF5TGlrZSh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2VPYmplY3Q7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLCJ2YXIgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFuIGVtcHR5IG9iamVjdCwgY29sbGVjdGlvbiwgbWFwLCBvciBzZXQuXG4gKlxuICogT2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgbm8gb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkXG4gKiBwcm9wZXJ0aWVzLlxuICpcbiAqIEFycmF5LWxpa2UgdmFsdWVzIHN1Y2ggYXMgYGFyZ3VtZW50c2Agb2JqZWN0cywgYXJyYXlzLCBidWZmZXJzLCBzdHJpbmdzLCBvclxuICogalF1ZXJ5LWxpa2UgY29sbGVjdGlvbnMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYGxlbmd0aGAgb2YgYDBgLlxuICogU2ltaWxhcmx5LCBtYXBzIGFuZCBzZXRzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBzaXplYCBvZiBgMGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZW1wdHksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0VtcHR5KG51bGwpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eSh0cnVlKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkoMSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNFbXB0eSh7ICdhJzogMSB9KTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmXG4gICAgICAoaXNBcnJheSh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZS5zcGxpY2UgPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICBpc0J1ZmZlcih2YWx1ZSkgfHwgaXNUeXBlZEFycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgcmV0dXJuICF2YWx1ZS5sZW5ndGg7XG4gIH1cbiAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSk7XG4gIGlmICh0YWcgPT0gbWFwVGFnIHx8IHRhZyA9PSBzZXRUYWcpIHtcbiAgICByZXR1cm4gIXZhbHVlLnNpemU7XG4gIH1cbiAgaWYgKGlzUHJvdG90eXBlKHZhbHVlKSkge1xuICAgIHJldHVybiAhYmFzZUtleXModmFsdWUpLmxlbmd0aDtcbiAgfVxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0VtcHR5O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3RMaWtlO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3ltYm9sO1xuIiwidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCJ2YXIgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyksXG4gICAgY3JlYXRlQWdncmVnYXRvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUFnZ3JlZ2F0b3InKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiBrZXlzIGdlbmVyYXRlZCBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmdcbiAqIGVhY2ggZWxlbWVudCBvZiBgY29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLiBUaGUgY29ycmVzcG9uZGluZyB2YWx1ZSBvZlxuICogZWFjaCBrZXkgaXMgdGhlIGxhc3QgZWxlbWVudCByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyB0aGUga2V5LiBUaGVcbiAqIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjb21wb3NlZCBhZ2dyZWdhdGUgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXkgPSBbXG4gKiAgIHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LFxuICogICB7ICdkaXInOiAncmlnaHQnLCAnY29kZSc6IDEwMCB9XG4gKiBdO1xuICpcbiAqIF8ua2V5QnkoYXJyYXksIGZ1bmN0aW9uKG8pIHtcbiAqICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoby5jb2RlKTtcbiAqIH0pO1xuICogLy8gPT4geyAnYSc6IHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LCAnZCc6IHsgJ2Rpcic6ICdyaWdodCcsICdjb2RlJzogMTAwIH0gfVxuICpcbiAqIF8ua2V5QnkoYXJyYXksICdkaXInKTtcbiAqIC8vID0+IHsgJ2xlZnQnOiB7ICdkaXInOiAnbGVmdCcsICdjb2RlJzogOTcgfSwgJ3JpZ2h0JzogeyAnZGlyJzogJ3JpZ2h0JywgJ2NvZGUnOiAxMDAgfSB9XG4gKi9cbnZhciBrZXlCeSA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgdmFsdWUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5Qnk7XG4iLCJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXM7XG4iLCJ2YXIgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGJhc2VJdGVyYXRlZSA9IHJlcXVpcmUoJy4vX2Jhc2VJdGVyYXRlZScpLFxuICAgIGJhc2VNYXAgPSByZXF1aXJlKCcuL19iYXNlTWFwJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdmFsdWVzIGJ5IHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCB0aHJ1XG4gKiBgaXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAqICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqXG4gKiBNYW55IGxvZGFzaCBtZXRob2RzIGFyZSBndWFyZGVkIHRvIHdvcmsgYXMgaXRlcmF0ZWVzIGZvciBtZXRob2RzIGxpa2VcbiAqIGBfLmV2ZXJ5YCwgYF8uZmlsdGVyYCwgYF8ubWFwYCwgYF8ubWFwVmFsdWVzYCwgYF8ucmVqZWN0YCwgYW5kIGBfLnNvbWVgLlxuICpcbiAqIFRoZSBndWFyZGVkIG1ldGhvZHMgYXJlOlxuICogYGFyeWAsIGBjaHVua2AsIGBjdXJyeWAsIGBjdXJyeVJpZ2h0YCwgYGRyb3BgLCBgZHJvcFJpZ2h0YCwgYGV2ZXJ5YCxcbiAqIGBmaWxsYCwgYGludmVydGAsIGBwYXJzZUludGAsIGByYW5kb21gLCBgcmFuZ2VgLCBgcmFuZ2VSaWdodGAsIGByZXBlYXRgLFxuICogYHNhbXBsZVNpemVgLCBgc2xpY2VgLCBgc29tZWAsIGBzb3J0QnlgLCBgc3BsaXRgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLFxuICogYHRlbXBsYXRlYCwgYHRyaW1gLCBgdHJpbUVuZGAsIGB0cmltU3RhcnRgLCBhbmQgYHdvcmRzYFxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAqICAgcmV0dXJuIG4gKiBuO1xuICogfVxuICpcbiAqIF8ubWFwKFs0LCA4XSwgc3F1YXJlKTtcbiAqIC8vID0+IFsxNiwgNjRdXG4gKlxuICogXy5tYXAoeyAnYSc6IDQsICdiJzogOCB9LCBzcXVhcmUpO1xuICogLy8gPT4gWzE2LCA2NF0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JyB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnIH1cbiAqIF07XG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLm1hcCh1c2VycywgJ3VzZXInKTtcbiAqIC8vID0+IFsnYmFybmV5JywgJ2ZyZWQnXVxuICovXG5mdW5jdGlvbiBtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlNYXAgOiBiYXNlTWFwO1xuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXA7XG4iLCJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gKiBwcm92aWRlZCwgaXQgZGV0ZXJtaW5lcyB0aGUgY2FjaGUga2V5IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlXG4gKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gKiBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICogbWV0aG9kIGludGVyZmFjZSBvZiBgY2xlYXJgLCBgZGVsZXRlYCwgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2MnOiAzLCAnZCc6IDQgfTtcbiAqXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogdmFsdWVzKG90aGVyKTtcbiAqIC8vID0+IFszLCA0XVxuICpcbiAqIG9iamVjdC5hID0gMjtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsnYScsICdiJ11cbiAqXG4gKiAvLyBSZXBsYWNlIGBfLm1lbW9pemUuQ2FjaGVgLlxuICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCByZXNvbHZlcikge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLFxuICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7XG4gIHJldHVybiBtZW1vaXplZDtcbn1cblxuLy8gRXhwb3NlIGBNYXBDYWNoZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZTtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8ubm9vcCk7XG4gKiAvLyA9PiBbdW5kZWZpbmVkLCB1bmRlZmluZWRdXG4gKi9cbmZ1bmN0aW9uIG5vb3AoKSB7XG4gIC8vIE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbm9vcDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKipcbiAqIEdldHMgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IGhhdmUgZWxhcHNlZCBzaW5jZVxuICogdGhlIFVuaXggZXBvY2ggKDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IERhdGVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVzdGFtcC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kZWZlcihmdW5jdGlvbihzdGFtcCkge1xuICogICBjb25zb2xlLmxvZyhfLm5vdygpIC0gc3RhbXApO1xuICogfSwgXy5ub3coKSk7XG4gKiAvLyA9PiBMb2dzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGl0IHRvb2sgZm9yIHRoZSBkZWZlcnJlZCBpbnZvY2F0aW9uLlxuICovXG52YXIgbm93ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiByb290LkRhdGUubm93KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vdztcbiIsInZhciBiYXNlUHJvcGVydHkgPSByZXF1aXJlKCcuL19iYXNlUHJvcGVydHknKSxcbiAgICBiYXNlUHJvcGVydHlEZWVwID0gcmVxdWlyZSgnLi9fYmFzZVByb3BlcnR5RGVlcCcpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW1xuICogICB7ICdhJzogeyAnYic6IDIgfSB9LFxuICogICB7ICdhJzogeyAnYic6IDEgfSB9XG4gKiBdO1xuICpcbiAqIF8ubWFwKG9iamVjdHMsIF8ucHJvcGVydHkoJ2EuYicpKTtcbiAqIC8vID0+IFsyLCAxXVxuICpcbiAqIF8ubWFwKF8uc29ydEJ5KG9iamVjdHMsIF8ucHJvcGVydHkoWydhJywgJ2InXSkpLCAnYS5iJyk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqL1xuZnVuY3Rpb24gcHJvcGVydHkocGF0aCkge1xuICByZXR1cm4gaXNLZXkocGF0aCkgPyBiYXNlUHJvcGVydHkodG9LZXkocGF0aCkpIDogYmFzZVByb3BlcnR5RGVlcChwYXRoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwcm9wZXJ0eTtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXlzID0gXy50aW1lcygyLCBfLnN0dWJBcnJheSk7XG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAqIC8vID0+IFtbXSwgW11dXG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICByZXR1cm4gW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkFycmF5O1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcbiAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gKi9cbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJGYWxzZTtcbiIsInZhciB0b051bWJlciA9IHJlcXVpcmUoJy4vdG9OdW1iZXInKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMCxcbiAgICBNQVhfSU5URUdFUiA9IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4O1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBmaW5pdGUgbnVtYmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMi4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9GaW5pdGUoMy4yKTtcbiAqIC8vID0+IDMuMlxuICpcbiAqIF8udG9GaW5pdGUoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiA1ZS0zMjRcbiAqXG4gKiBfLnRvRmluaXRlKEluZmluaXR5KTtcbiAqIC8vID0+IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4XG4gKlxuICogXy50b0Zpbml0ZSgnMy4yJyk7XG4gKiAvLyA9PiAzLjJcbiAqL1xuZnVuY3Rpb24gdG9GaW5pdGUodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogMDtcbiAgfVxuICB2YWx1ZSA9IHRvTnVtYmVyKHZhbHVlKTtcbiAgaWYgKHZhbHVlID09PSBJTkZJTklUWSB8fCB2YWx1ZSA9PT0gLUlORklOSVRZKSB7XG4gICAgdmFyIHNpZ24gPSAodmFsdWUgPCAwID8gLTEgOiAxKTtcbiAgICByZXR1cm4gc2lnbiAqIE1BWF9JTlRFR0VSO1xuICB9XG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPyB2YWx1ZSA6IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9GaW5pdGU7XG4iLCJ2YXIgdG9GaW5pdGUgPSByZXF1aXJlKCcuL3RvRmluaXRlJyk7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBpbnRlZ2VyLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvSW50ZWdlcmBdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2ludGVnZXIpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9JbnRlZ2VyKDMuMik7XG4gKiAvLyA9PiAzXG4gKlxuICogXy50b0ludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiAwXG4gKlxuICogXy50b0ludGVnZXIoSW5maW5pdHkpO1xuICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiBfLnRvSW50ZWdlcignMy4yJyk7XG4gKiAvLyA9PiAzXG4gKi9cbmZ1bmN0aW9uIHRvSW50ZWdlcih2YWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gdG9GaW5pdGUodmFsdWUpLFxuICAgICAgcmVtYWluZGVyID0gcmVzdWx0ICUgMTtcblxuICByZXR1cm4gcmVzdWx0ID09PSByZXN1bHQgPyAocmVtYWluZGVyID8gcmVzdWx0IC0gcmVtYWluZGVyIDogcmVzdWx0KSA6IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9JbnRlZ2VyO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBOQU4gPSAwIC8gMDtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZS4gKi9cbnZhciByZVRyaW0gPSAvXlxccyt8XFxzKyQvZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJhZCBzaWduZWQgaGV4YWRlY2ltYWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmFkSGV4ID0gL15bLStdMHhbMC05YS1mXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiaW5hcnkgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmluYXJ5ID0gL14wYlswMV0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb2N0YWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzT2N0YWwgPSAvXjBvWzAtN10rJC9pO1xuXG4vKiogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgd2l0aG91dCBhIGRlcGVuZGVuY3kgb24gYHJvb3RgLiAqL1xudmFyIGZyZWVQYXJzZUludCA9IHBhcnNlSW50O1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9OdW1iZXIoMy4yKTtcbiAqIC8vID0+IDMuMlxuICpcbiAqIF8udG9OdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiA1ZS0zMjRcbiAqXG4gKiBfLnRvTnVtYmVyKEluZmluaXR5KTtcbiAqIC8vID0+IEluZmluaXR5XG4gKlxuICogXy50b051bWJlcignMy4yJyk7XG4gKiAvLyA9PiAzLjJcbiAqL1xuZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIE5BTjtcbiAgfVxuICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgdmFyIG90aGVyID0gdHlwZW9mIHZhbHVlLnZhbHVlT2YgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlO1xuICAgIHZhbHVlID0gaXNPYmplY3Qob3RoZXIpID8gKG90aGVyICsgJycpIDogb3RoZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogK3ZhbHVlO1xuICB9XG4gIHZhbHVlID0gdmFsdWUucmVwbGFjZShyZVRyaW0sICcnKTtcbiAgdmFyIGlzQmluYXJ5ID0gcmVJc0JpbmFyeS50ZXN0KHZhbHVlKTtcbiAgcmV0dXJuIChpc0JpbmFyeSB8fCByZUlzT2N0YWwudGVzdCh2YWx1ZSkpXG4gICAgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpXG4gICAgOiAocmVJc0JhZEhleC50ZXN0KHZhbHVlKSA/IE5BTiA6ICt2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9OdW1iZXI7XG4iLCJ2YXIgYmFzZVRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVRvU3RyaW5nJyk7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b1N0cmluZyhudWxsKTtcbiAqIC8vID0+ICcnXG4gKlxuICogXy50b1N0cmluZygtMCk7XG4gKiAvLyA9PiAnLTAnXG4gKlxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICogLy8gPT4gJzEsMiwzJ1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1N0cmluZztcbiIsInZhciBhcnJheUVhY2ggPSByZXF1aXJlKCcuL19hcnJheUVhY2gnKSxcbiAgICBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGJhc2VGb3JPd24gPSByZXF1aXJlKCcuL19iYXNlRm9yT3duJyksXG4gICAgYmFzZUl0ZXJhdGVlID0gcmVxdWlyZSgnLi9fYmFzZUl0ZXJhdGVlJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKipcbiAqIEFuIGFsdGVybmF0aXZlIHRvIGBfLnJlZHVjZWA7IHRoaXMgbWV0aG9kIHRyYW5zZm9ybXMgYG9iamVjdGAgdG8gYSBuZXdcbiAqIGBhY2N1bXVsYXRvcmAgb2JqZWN0IHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgcnVubmluZyBlYWNoIG9mIGl0cyBvd25cbiAqIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgdGhydSBgaXRlcmF0ZWVgLCB3aXRoIGVhY2ggaW52b2NhdGlvblxuICogcG90ZW50aWFsbHkgbXV0YXRpbmcgdGhlIGBhY2N1bXVsYXRvcmAgb2JqZWN0LiBJZiBgYWNjdW11bGF0b3JgIGlzIG5vdFxuICogcHJvdmlkZWQsIGEgbmV3IG9iamVjdCB3aXRoIHRoZSBzYW1lIGBbW1Byb3RvdHlwZV1dYCB3aWxsIGJlIHVzZWQuIFRoZVxuICogaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIGZvdXIgYXJndW1lbnRzOiAoYWNjdW11bGF0b3IsIHZhbHVlLCBrZXksIG9iamVjdCkuXG4gKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjMuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBjdXN0b20gYWNjdW11bGF0b3IgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udHJhbnNmb3JtKFsyLCAzLCA0XSwgZnVuY3Rpb24ocmVzdWx0LCBuKSB7XG4gKiAgIHJlc3VsdC5wdXNoKG4gKj0gbik7XG4gKiAgIHJldHVybiBuICUgMiA9PSAwO1xuICogfSwgW10pO1xuICogLy8gPT4gWzQsIDldXG4gKlxuICogXy50cmFuc2Zvcm0oeyAnYSc6IDEsICdiJzogMiwgJ2MnOiAxIH0sIGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICogICAocmVzdWx0W3ZhbHVlXSB8fCAocmVzdWx0W3ZhbHVlXSA9IFtdKSkucHVzaChrZXkpO1xuICogfSwge30pO1xuICogLy8gPT4geyAnMSc6IFsnYScsICdjJ10sICcyJzogWydiJ10gfVxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm0ob2JqZWN0LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgaXNBcnJMaWtlID0gaXNBcnIgfHwgaXNCdWZmZXIob2JqZWN0KSB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KTtcblxuICBpdGVyYXRlZSA9IGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgNCk7XG4gIGlmIChhY2N1bXVsYXRvciA9PSBudWxsKSB7XG4gICAgdmFyIEN0b3IgPSBvYmplY3QgJiYgb2JqZWN0LmNvbnN0cnVjdG9yO1xuICAgIGlmIChpc0Fyckxpa2UpIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gaXNBcnIgPyBuZXcgQ3RvciA6IFtdO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdChvYmplY3QpKSB7XG4gICAgICBhY2N1bXVsYXRvciA9IGlzRnVuY3Rpb24oQ3RvcikgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKSA6IHt9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGFjY3VtdWxhdG9yID0ge307XG4gICAgfVxuICB9XG4gIChpc0Fyckxpa2UgPyBhcnJheUVhY2ggOiBiYXNlRm9yT3duKShvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gICAgcmV0dXJuIGl0ZXJhdGVlKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIG9iamVjdCk7XG4gIH0pO1xuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdHJhbnNmb3JtO1xuIiwidmFyIGJhc2VWYWx1ZXMgPSByZXF1aXJlKCcuL19iYXNlVmFsdWVzJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8udmFsdWVzKG5ldyBGb28pO1xuICogLy8gPT4gWzEsIDJdIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy52YWx1ZXMoJ2hpJyk7XG4gKiAvLyA9PiBbJ2gnLCAnaSddXG4gKi9cbmZ1bmN0aW9uIHZhbHVlcyhvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlVmFsdWVzKG9iamVjdCwga2V5cyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2YWx1ZXM7XG4iLCJ2YXIgTGF6eVdyYXBwZXIgPSByZXF1aXJlKCcuL19MYXp5V3JhcHBlcicpLFxuICAgIExvZGFzaFdyYXBwZXIgPSByZXF1aXJlKCcuL19Mb2Rhc2hXcmFwcGVyJyksXG4gICAgYmFzZUxvZGFzaCA9IHJlcXVpcmUoJy4vX2Jhc2VMb2Rhc2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKSxcbiAgICB3cmFwcGVyQ2xvbmUgPSByZXF1aXJlKCcuL193cmFwcGVyQ2xvbmUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYGxvZGFzaGAgb2JqZWN0IHdoaWNoIHdyYXBzIGB2YWx1ZWAgdG8gZW5hYmxlIGltcGxpY2l0IG1ldGhvZFxuICogY2hhaW4gc2VxdWVuY2VzLiBNZXRob2RzIHRoYXQgb3BlcmF0ZSBvbiBhbmQgcmV0dXJuIGFycmF5cywgY29sbGVjdGlvbnMsXG4gKiBhbmQgZnVuY3Rpb25zIGNhbiBiZSBjaGFpbmVkIHRvZ2V0aGVyLiBNZXRob2RzIHRoYXQgcmV0cmlldmUgYSBzaW5nbGUgdmFsdWVcbiAqIG9yIG1heSByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IGVuZCB0aGUgY2hhaW4gc2VxdWVuY2VcbiAqIGFuZCByZXR1cm4gdGhlIHVud3JhcHBlZCB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgbXVzdCBiZSB1bndyYXBwZWRcbiAqIHdpdGggYF8jdmFsdWVgLlxuICpcbiAqIEV4cGxpY2l0IGNoYWluIHNlcXVlbmNlcywgd2hpY2ggbXVzdCBiZSB1bndyYXBwZWQgd2l0aCBgXyN2YWx1ZWAsIG1heSBiZVxuICogZW5hYmxlZCB1c2luZyBgXy5jaGFpbmAuXG4gKlxuICogVGhlIGV4ZWN1dGlvbiBvZiBjaGFpbmVkIG1ldGhvZHMgaXMgbGF6eSwgdGhhdCBpcywgaXQncyBkZWZlcnJlZCB1bnRpbFxuICogYF8jdmFsdWVgIGlzIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBjYWxsZWQuXG4gKlxuICogTGF6eSBldmFsdWF0aW9uIGFsbG93cyBzZXZlcmFsIG1ldGhvZHMgdG8gc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24uXG4gKiBTaG9ydGN1dCBmdXNpb24gaXMgYW4gb3B0aW1pemF0aW9uIHRvIG1lcmdlIGl0ZXJhdGVlIGNhbGxzOyB0aGlzIGF2b2lkc1xuICogdGhlIGNyZWF0aW9uIG9mIGludGVybWVkaWF0ZSBhcnJheXMgYW5kIGNhbiBncmVhdGx5IHJlZHVjZSB0aGUgbnVtYmVyIG9mXG4gKiBpdGVyYXRlZSBleGVjdXRpb25zLiBTZWN0aW9ucyBvZiBhIGNoYWluIHNlcXVlbmNlIHF1YWxpZnkgZm9yIHNob3J0Y3V0XG4gKiBmdXNpb24gaWYgdGhlIHNlY3Rpb24gaXMgYXBwbGllZCB0byBhbiBhcnJheSBhbmQgaXRlcmF0ZWVzIGFjY2VwdCBvbmx5XG4gKiBvbmUgYXJndW1lbnQuIFRoZSBoZXVyaXN0aWMgZm9yIHdoZXRoZXIgYSBzZWN0aW9uIHF1YWxpZmllcyBmb3Igc2hvcnRjdXRcbiAqIGZ1c2lvbiBpcyBzdWJqZWN0IHRvIGNoYW5nZS5cbiAqXG4gKiBDaGFpbmluZyBpcyBzdXBwb3J0ZWQgaW4gY3VzdG9tIGJ1aWxkcyBhcyBsb25nIGFzIHRoZSBgXyN2YWx1ZWAgbWV0aG9kIGlzXG4gKiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluY2x1ZGVkIGluIHRoZSBidWlsZC5cbiAqXG4gKiBJbiBhZGRpdGlvbiB0byBsb2Rhc2ggbWV0aG9kcywgd3JhcHBlcnMgaGF2ZSBgQXJyYXlgIGFuZCBgU3RyaW5nYCBtZXRob2RzLlxuICpcbiAqIFRoZSB3cmFwcGVyIGBBcnJheWAgbWV0aG9kcyBhcmU6XG4gKiBgY29uY2F0YCwgYGpvaW5gLCBgcG9wYCwgYHB1c2hgLCBgc2hpZnRgLCBgc29ydGAsIGBzcGxpY2VgLCBhbmQgYHVuc2hpZnRgXG4gKlxuICogVGhlIHdyYXBwZXIgYFN0cmluZ2AgbWV0aG9kcyBhcmU6XG4gKiBgcmVwbGFjZWAgYW5kIGBzcGxpdGBcbiAqXG4gKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24gYXJlOlxuICogYGF0YCwgYGNvbXBhY3RgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZHJvcFdoaWxlYCwgYGZpbHRlcmAsIGBmaW5kYCxcbiAqIGBmaW5kTGFzdGAsIGBoZWFkYCwgYGluaXRpYWxgLCBgbGFzdGAsIGBtYXBgLCBgcmVqZWN0YCwgYHJldmVyc2VgLCBgc2xpY2VgLFxuICogYHRhaWxgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLCBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYW5kIGB0b0FycmF5YFxuICpcbiAqIFRoZSBjaGFpbmFibGUgd3JhcHBlciBtZXRob2RzIGFyZTpcbiAqIGBhZnRlcmAsIGBhcnlgLCBgYXNzaWduYCwgYGFzc2lnbkluYCwgYGFzc2lnbkluV2l0aGAsIGBhc3NpZ25XaXRoYCwgYGF0YCxcbiAqIGBiZWZvcmVgLCBgYmluZGAsIGBiaW5kQWxsYCwgYGJpbmRLZXlgLCBgY2FzdEFycmF5YCwgYGNoYWluYCwgYGNodW5rYCxcbiAqIGBjb21taXRgLCBgY29tcGFjdGAsIGBjb25jYXRgLCBgY29uZm9ybXNgLCBgY29uc3RhbnRgLCBgY291bnRCeWAsIGBjcmVhdGVgLFxuICogYGN1cnJ5YCwgYGRlYm91bmNlYCwgYGRlZmF1bHRzYCwgYGRlZmF1bHRzRGVlcGAsIGBkZWZlcmAsIGBkZWxheWAsXG4gKiBgZGlmZmVyZW5jZWAsIGBkaWZmZXJlbmNlQnlgLCBgZGlmZmVyZW5jZVdpdGhgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLFxuICogYGRyb3BSaWdodFdoaWxlYCwgYGRyb3BXaGlsZWAsIGBleHRlbmRgLCBgZXh0ZW5kV2l0aGAsIGBmaWxsYCwgYGZpbHRlcmAsXG4gKiBgZmxhdE1hcGAsIGBmbGF0TWFwRGVlcGAsIGBmbGF0TWFwRGVwdGhgLCBgZmxhdHRlbmAsIGBmbGF0dGVuRGVlcGAsXG4gKiBgZmxhdHRlbkRlcHRoYCwgYGZsaXBgLCBgZmxvd2AsIGBmbG93UmlnaHRgLCBgZnJvbVBhaXJzYCwgYGZ1bmN0aW9uc2AsXG4gKiBgZnVuY3Rpb25zSW5gLCBgZ3JvdXBCeWAsIGBpbml0aWFsYCwgYGludGVyc2VjdGlvbmAsIGBpbnRlcnNlY3Rpb25CeWAsXG4gKiBgaW50ZXJzZWN0aW9uV2l0aGAsIGBpbnZlcnRgLCBgaW52ZXJ0QnlgLCBgaW52b2tlTWFwYCwgYGl0ZXJhdGVlYCwgYGtleUJ5YCxcbiAqIGBrZXlzYCwgYGtleXNJbmAsIGBtYXBgLCBgbWFwS2V5c2AsIGBtYXBWYWx1ZXNgLCBgbWF0Y2hlc2AsIGBtYXRjaGVzUHJvcGVydHlgLFxuICogYG1lbW9pemVgLCBgbWVyZ2VgLCBgbWVyZ2VXaXRoYCwgYG1ldGhvZGAsIGBtZXRob2RPZmAsIGBtaXhpbmAsIGBuZWdhdGVgLFxuICogYG50aEFyZ2AsIGBvbWl0YCwgYG9taXRCeWAsIGBvbmNlYCwgYG9yZGVyQnlgLCBgb3ZlcmAsIGBvdmVyQXJnc2AsXG4gKiBgb3ZlckV2ZXJ5YCwgYG92ZXJTb21lYCwgYHBhcnRpYWxgLCBgcGFydGlhbFJpZ2h0YCwgYHBhcnRpdGlvbmAsIGBwaWNrYCxcbiAqIGBwaWNrQnlgLCBgcGxhbnRgLCBgcHJvcGVydHlgLCBgcHJvcGVydHlPZmAsIGBwdWxsYCwgYHB1bGxBbGxgLCBgcHVsbEFsbEJ5YCxcbiAqIGBwdWxsQWxsV2l0aGAsIGBwdWxsQXRgLCBgcHVzaGAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlYXJnYCwgYHJlamVjdGAsXG4gKiBgcmVtb3ZlYCwgYHJlc3RgLCBgcmV2ZXJzZWAsIGBzYW1wbGVTaXplYCwgYHNldGAsIGBzZXRXaXRoYCwgYHNodWZmbGVgLFxuICogYHNsaWNlYCwgYHNvcnRgLCBgc29ydEJ5YCwgYHNwbGljZWAsIGBzcHJlYWRgLCBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsXG4gKiBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYHRhcGAsIGB0aHJvdHRsZWAsIGB0aHJ1YCwgYHRvQXJyYXlgLFxuICogYHRvUGFpcnNgLCBgdG9QYWlyc0luYCwgYHRvUGF0aGAsIGB0b1BsYWluT2JqZWN0YCwgYHRyYW5zZm9ybWAsIGB1bmFyeWAsXG4gKiBgdW5pb25gLCBgdW5pb25CeWAsIGB1bmlvbldpdGhgLCBgdW5pcWAsIGB1bmlxQnlgLCBgdW5pcVdpdGhgLCBgdW5zZXRgLFxuICogYHVuc2hpZnRgLCBgdW56aXBgLCBgdW56aXBXaXRoYCwgYHVwZGF0ZWAsIGB1cGRhdGVXaXRoYCwgYHZhbHVlc2AsXG4gKiBgdmFsdWVzSW5gLCBgd2l0aG91dGAsIGB3cmFwYCwgYHhvcmAsIGB4b3JCeWAsIGB4b3JXaXRoYCwgYHppcGAsXG4gKiBgemlwT2JqZWN0YCwgYHppcE9iamVjdERlZXBgLCBhbmQgYHppcFdpdGhgXG4gKlxuICogVGhlIHdyYXBwZXIgbWV0aG9kcyB0aGF0IGFyZSAqKm5vdCoqIGNoYWluYWJsZSBieSBkZWZhdWx0IGFyZTpcbiAqIGBhZGRgLCBgYXR0ZW1wdGAsIGBjYW1lbENhc2VgLCBgY2FwaXRhbGl6ZWAsIGBjZWlsYCwgYGNsYW1wYCwgYGNsb25lYCxcbiAqIGBjbG9uZURlZXBgLCBgY2xvbmVEZWVwV2l0aGAsIGBjbG9uZVdpdGhgLCBgY29uZm9ybXNUb2AsIGBkZWJ1cnJgLFxuICogYGRlZmF1bHRUb2AsIGBkaXZpZGVgLCBgZWFjaGAsIGBlYWNoUmlnaHRgLCBgZW5kc1dpdGhgLCBgZXFgLCBgZXNjYXBlYCxcbiAqIGBlc2NhcGVSZWdFeHBgLCBgZXZlcnlgLCBgZmluZGAsIGBmaW5kSW5kZXhgLCBgZmluZEtleWAsIGBmaW5kTGFzdGAsXG4gKiBgZmluZExhc3RJbmRleGAsIGBmaW5kTGFzdEtleWAsIGBmaXJzdGAsIGBmbG9vcmAsIGBmb3JFYWNoYCwgYGZvckVhY2hSaWdodGAsXG4gKiBgZm9ySW5gLCBgZm9ySW5SaWdodGAsIGBmb3JPd25gLCBgZm9yT3duUmlnaHRgLCBgZ2V0YCwgYGd0YCwgYGd0ZWAsIGBoYXNgLFxuICogYGhhc0luYCwgYGhlYWRgLCBgaWRlbnRpdHlgLCBgaW5jbHVkZXNgLCBgaW5kZXhPZmAsIGBpblJhbmdlYCwgYGludm9rZWAsXG4gKiBgaXNBcmd1bWVudHNgLCBgaXNBcnJheWAsIGBpc0FycmF5QnVmZmVyYCwgYGlzQXJyYXlMaWtlYCwgYGlzQXJyYXlMaWtlT2JqZWN0YCxcbiAqIGBpc0Jvb2xlYW5gLCBgaXNCdWZmZXJgLCBgaXNEYXRlYCwgYGlzRWxlbWVudGAsIGBpc0VtcHR5YCwgYGlzRXF1YWxgLFxuICogYGlzRXF1YWxXaXRoYCwgYGlzRXJyb3JgLCBgaXNGaW5pdGVgLCBgaXNGdW5jdGlvbmAsIGBpc0ludGVnZXJgLCBgaXNMZW5ndGhgLFxuICogYGlzTWFwYCwgYGlzTWF0Y2hgLCBgaXNNYXRjaFdpdGhgLCBgaXNOYU5gLCBgaXNOYXRpdmVgLCBgaXNOaWxgLCBgaXNOdWxsYCxcbiAqIGBpc051bWJlcmAsIGBpc09iamVjdGAsIGBpc09iamVjdExpa2VgLCBgaXNQbGFpbk9iamVjdGAsIGBpc1JlZ0V4cGAsXG4gKiBgaXNTYWZlSW50ZWdlcmAsIGBpc1NldGAsIGBpc1N0cmluZ2AsIGBpc1VuZGVmaW5lZGAsIGBpc1R5cGVkQXJyYXlgLFxuICogYGlzV2Vha01hcGAsIGBpc1dlYWtTZXRgLCBgam9pbmAsIGBrZWJhYkNhc2VgLCBgbGFzdGAsIGBsYXN0SW5kZXhPZmAsXG4gKiBgbG93ZXJDYXNlYCwgYGxvd2VyRmlyc3RgLCBgbHRgLCBgbHRlYCwgYG1heGAsIGBtYXhCeWAsIGBtZWFuYCwgYG1lYW5CeWAsXG4gKiBgbWluYCwgYG1pbkJ5YCwgYG11bHRpcGx5YCwgYG5vQ29uZmxpY3RgLCBgbm9vcGAsIGBub3dgLCBgbnRoYCwgYHBhZGAsXG4gKiBgcGFkRW5kYCwgYHBhZFN0YXJ0YCwgYHBhcnNlSW50YCwgYHBvcGAsIGByYW5kb21gLCBgcmVkdWNlYCwgYHJlZHVjZVJpZ2h0YCxcbiAqIGByZXBlYXRgLCBgcmVzdWx0YCwgYHJvdW5kYCwgYHJ1bkluQ29udGV4dGAsIGBzYW1wbGVgLCBgc2hpZnRgLCBgc2l6ZWAsXG4gKiBgc25ha2VDYXNlYCwgYHNvbWVgLCBgc29ydGVkSW5kZXhgLCBgc29ydGVkSW5kZXhCeWAsIGBzb3J0ZWRMYXN0SW5kZXhgLFxuICogYHNvcnRlZExhc3RJbmRleEJ5YCwgYHN0YXJ0Q2FzZWAsIGBzdGFydHNXaXRoYCwgYHN0dWJBcnJheWAsIGBzdHViRmFsc2VgLFxuICogYHN0dWJPYmplY3RgLCBgc3R1YlN0cmluZ2AsIGBzdHViVHJ1ZWAsIGBzdWJ0cmFjdGAsIGBzdW1gLCBgc3VtQnlgLFxuICogYHRlbXBsYXRlYCwgYHRpbWVzYCwgYHRvRmluaXRlYCwgYHRvSW50ZWdlcmAsIGB0b0pTT05gLCBgdG9MZW5ndGhgLFxuICogYHRvTG93ZXJgLCBgdG9OdW1iZXJgLCBgdG9TYWZlSW50ZWdlcmAsIGB0b1N0cmluZ2AsIGB0b1VwcGVyYCwgYHRyaW1gLFxuICogYHRyaW1FbmRgLCBgdHJpbVN0YXJ0YCwgYHRydW5jYXRlYCwgYHVuZXNjYXBlYCwgYHVuaXF1ZUlkYCwgYHVwcGVyQ2FzZWAsXG4gKiBgdXBwZXJGaXJzdGAsIGB2YWx1ZWAsIGFuZCBgd29yZHNgXG4gKlxuICogQG5hbWUgX1xuICogQGNvbnN0cnVjdG9yXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwIGluIGEgYGxvZGFzaGAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAqICAgcmV0dXJuIG4gKiBuO1xuICogfVxuICpcbiAqIHZhciB3cmFwcGVkID0gXyhbMSwgMiwgM10pO1xuICpcbiAqIC8vIFJldHVybnMgYW4gdW53cmFwcGVkIHZhbHVlLlxuICogd3JhcHBlZC5yZWR1Y2UoXy5hZGQpO1xuICogLy8gPT4gNlxuICpcbiAqIC8vIFJldHVybnMgYSB3cmFwcGVkIHZhbHVlLlxuICogdmFyIHNxdWFyZXMgPSB3cmFwcGVkLm1hcChzcXVhcmUpO1xuICpcbiAqIF8uaXNBcnJheShzcXVhcmVzKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KHNxdWFyZXMudmFsdWUoKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGxvZGFzaCh2YWx1ZSkge1xuICBpZiAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNBcnJheSh2YWx1ZSkgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExvZGFzaFdyYXBwZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdfX3dyYXBwZWRfXycpKSB7XG4gICAgICByZXR1cm4gd3JhcHBlckNsb25lKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHZhbHVlKTtcbn1cblxuLy8gRW5zdXJlIHdyYXBwZXJzIGFyZSBpbnN0YW5jZXMgb2YgYGJhc2VMb2Rhc2hgLlxubG9kYXNoLnByb3RvdHlwZSA9IGJhc2VMb2Rhc2gucHJvdG90eXBlO1xubG9kYXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGxvZGFzaDtcblxubW9kdWxlLmV4cG9ydHMgPSBsb2Rhc2g7XG4iLCJ2YXIgYXJyYXlGaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheUZpbHRlcicpLFxuICAgIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBiYXNlWG9yID0gcmVxdWlyZSgnLi9fYmFzZVhvcicpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcyB0aGF0IGlzIHRoZVxuICogW3N5bW1ldHJpYyBkaWZmZXJlbmNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TeW1tZXRyaWNfZGlmZmVyZW5jZSlcbiAqIG9mIHRoZSBnaXZlbiBhcnJheXMuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyXG4gKiB0aGV5IG9jY3VyIGluIHRoZSBhcnJheXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gKiBAc2VlIF8uZGlmZmVyZW5jZSwgXy53aXRob3V0XG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ueG9yKFsyLCAxXSwgWzIsIDNdKTtcbiAqIC8vID0+IFsxLCAzXVxuICovXG52YXIgeG9yID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gIHJldHVybiBiYXNlWG9yKGFycmF5RmlsdGVyKGFycmF5cywgaXNBcnJheUxpa2VPYmplY3QpKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHhvcjtcbiIsIi8qKlxuICogRmxhdHRlbiBhcnJheSwgb25lIGxldmVsIGRlZXAuXG4gKlxuICogQHBhcmFtIHtBcnJheTw/Pn0gYXJyXG4gKlxuICogQHJldHVybiB7QXJyYXk8Pz59XG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW4oYXJyKSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcnIpO1xufVxuXG52YXIgbmF0aXZlVG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG5hdGl2ZUhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKG9iaikge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBpc0RlZmluZWQob2JqKSB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGlzTmlsKG9iaikge1xuICByZXR1cm4gb2JqID09IG51bGw7XG59XG5mdW5jdGlvbiBpc0FycmF5KG9iaikge1xuICByZXR1cm4gbmF0aXZlVG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xufVxuZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG4gIHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuZnVuY3Rpb24gaXNOdW1iZXIob2JqKSB7XG4gIHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE51bWJlcl0nO1xufVxuZnVuY3Rpb24gaXNGdW5jdGlvbihvYmopIHtcbiAgdmFyIHRhZyA9IG5hdGl2ZVRvU3RyaW5nLmNhbGwob2JqKTtcbiAgcmV0dXJuIHRhZyA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJyB8fCB0YWcgPT09ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyB8fCB0YWcgPT09ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScgfHwgdGFnID09PSAnW29iamVjdCBBc3luY0dlbmVyYXRvckZ1bmN0aW9uXScgfHwgdGFnID09PSAnW29iamVjdCBQcm94eV0nO1xufVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7XG4gIHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IFN0cmluZ10nO1xufVxuLyoqXG4gKiBFbnN1cmUgY29sbGVjdGlvbiBpcyBhbiBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKi9cblxuZnVuY3Rpb24gZW5zdXJlQXJyYXkob2JqKSB7XG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ211c3Qgc3VwcGx5IGFycmF5Jyk7XG59XG4vKipcbiAqIFJldHVybiB0cnVlLCBpZiB0YXJnZXQgb3ducyBhIHByb3BlcnR5IHdpdGggdGhlIGdpdmVuIGtleS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5XG4gKlxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBoYXModGFyZ2V0LCBrZXkpIHtcbiAgcmV0dXJuIG5hdGl2ZUhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBrZXkpO1xufVxuXG4vKipcbiAqIEZpbmQgZWxlbWVudCBpbiBjb2xsZWN0aW9uLlxuICpcbiAqIEBwYXJhbSAge0FycmF5fE9iamVjdH0gY29sbGVjdGlvblxuICogQHBhcmFtICB7RnVuY3Rpb258T2JqZWN0fSBtYXRjaGVyXG4gKlxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGZpbmQoY29sbGVjdGlvbiwgbWF0Y2hlcikge1xuICBtYXRjaGVyID0gdG9NYXRjaGVyKG1hdGNoZXIpO1xuICB2YXIgbWF0Y2g7XG4gIGZvckVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24gKHZhbCwga2V5KSB7XG4gICAgaWYgKG1hdGNoZXIodmFsLCBrZXkpKSB7XG4gICAgICBtYXRjaCA9IHZhbDtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbWF0Y2g7XG59XG4vKipcbiAqIEZpbmQgZWxlbWVudCBpbmRleCBpbiBjb2xsZWN0aW9uLlxuICpcbiAqIEBwYXJhbSAge0FycmF5fE9iamVjdH0gY29sbGVjdGlvblxuICogQHBhcmFtICB7RnVuY3Rpb259IG1hdGNoZXJcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gZmluZEluZGV4KGNvbGxlY3Rpb24sIG1hdGNoZXIpIHtcbiAgbWF0Y2hlciA9IHRvTWF0Y2hlcihtYXRjaGVyKTtcbiAgdmFyIGlkeCA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyAtMSA6IHVuZGVmaW5lZDtcbiAgZm9yRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbiAodmFsLCBrZXkpIHtcbiAgICBpZiAobWF0Y2hlcih2YWwsIGtleSkpIHtcbiAgICAgIGlkeCA9IGtleTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaWR4O1xufVxuLyoqXG4gKiBGaW5kIGVsZW1lbnQgaW4gY29sbGVjdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBtYXRjaGVyXG4gKlxuICogQHJldHVybiB7QXJyYXl9IHJlc3VsdFxuICovXG5cbmZ1bmN0aW9uIGZpbHRlcihjb2xsZWN0aW9uLCBtYXRjaGVyKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbiAodmFsLCBrZXkpIHtcbiAgICBpZiAobWF0Y2hlcih2YWwsIGtleSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGNvbGxlY3Rpb247IHJldHVybmluZyBzb21ldGhpbmdcbiAqIChub24tdW5kZWZpbmVkKSB3aWxsIHN0b3AgaXRlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSAge0FycmF5fE9iamVjdH0gY29sbGVjdGlvblxuICogQHBhcmFtICB7RnVuY3Rpb259IGl0ZXJhdG9yXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSByZXR1cm4gcmVzdWx0IHRoYXQgc3RvcHBlZCB0aGUgaXRlcmF0aW9uXG4gKi9cblxuZnVuY3Rpb24gZm9yRWFjaChjb2xsZWN0aW9uLCBpdGVyYXRvcikge1xuICB2YXIgdmFsLCByZXN1bHQ7XG5cbiAgaWYgKGlzVW5kZWZpbmVkKGNvbGxlY3Rpb24pKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGNvbnZlcnRLZXkgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gdG9OdW0gOiBpZGVudGl0eTtcblxuICBmb3IgKHZhciBrZXkgaW4gY29sbGVjdGlvbikge1xuICAgIGlmIChoYXMoY29sbGVjdGlvbiwga2V5KSkge1xuICAgICAgdmFsID0gY29sbGVjdGlvbltrZXldO1xuICAgICAgcmVzdWx0ID0gaXRlcmF0b3IodmFsLCBjb252ZXJ0S2V5KGtleSkpO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBSZXR1cm4gY29sbGVjdGlvbiB3aXRob3V0IGVsZW1lbnQuXG4gKlxuICogQHBhcmFtICB7QXJyYXl9IGFyclxuICogQHBhcmFtICB7RnVuY3Rpb259IG1hdGNoZXJcbiAqXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuXG5mdW5jdGlvbiB3aXRob3V0KGFyciwgbWF0Y2hlcikge1xuICBpZiAoaXNVbmRlZmluZWQoYXJyKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGVuc3VyZUFycmF5KGFycik7XG4gIG1hdGNoZXIgPSB0b01hdGNoZXIobWF0Y2hlcik7XG4gIHJldHVybiBhcnIuZmlsdGVyKGZ1bmN0aW9uIChlbCwgaWR4KSB7XG4gICAgcmV0dXJuICFtYXRjaGVyKGVsLCBpZHgpO1xuICB9KTtcbn1cbi8qKlxuICogUmVkdWNlIGNvbGxlY3Rpb24sIHJldHVybmluZyBhIHNpbmdsZSByZXN1bHQuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fEFycmF5fSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gaXRlcmF0b3JcbiAqIEBwYXJhbSAge0FueX0gcmVzdWx0XG4gKlxuICogQHJldHVybiB7QW55fSByZXN1bHQgcmV0dXJuZWQgZnJvbSBsYXN0IGl0ZXJhdG9yXG4gKi9cblxuZnVuY3Rpb24gcmVkdWNlKGNvbGxlY3Rpb24sIGl0ZXJhdG9yLCByZXN1bHQpIHtcbiAgZm9yRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbiAodmFsdWUsIGlkeCkge1xuICAgIHJlc3VsdCA9IGl0ZXJhdG9yKHJlc3VsdCwgdmFsdWUsIGlkeCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiBldmVyeSBlbGVtZW50IGluIHRoZSBjb2xsZWN0aW9uXG4gKiBtYXRjaGVzIHRoZSBjcml0ZXJpYS5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R8QXJyYXl9IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBtYXRjaGVyXG4gKlxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBldmVyeShjb2xsZWN0aW9uLCBtYXRjaGVyKSB7XG4gIHJldHVybiAhIXJlZHVjZShjb2xsZWN0aW9uLCBmdW5jdGlvbiAobWF0Y2hlcywgdmFsLCBrZXkpIHtcbiAgICByZXR1cm4gbWF0Y2hlcyAmJiBtYXRjaGVyKHZhbCwga2V5KTtcbiAgfSwgdHJ1ZSk7XG59XG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHNvbWUgZWxlbWVudHMgaW4gdGhlIGNvbGxlY3Rpb25cbiAqIG1hdGNoIHRoZSBjcml0ZXJpYS5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R8QXJyYXl9IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBtYXRjaGVyXG4gKlxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBzb21lKGNvbGxlY3Rpb24sIG1hdGNoZXIpIHtcbiAgcmV0dXJuICEhZmluZChjb2xsZWN0aW9uLCBtYXRjaGVyKTtcbn1cbi8qKlxuICogVHJhbnNmb3JtIGEgY29sbGVjdGlvbiBpbnRvIGFub3RoZXIgY29sbGVjdGlvblxuICogYnkgcGlwaW5nIGVhY2ggbWVtYmVyIHRocm91Z2ggdGhlIGdpdmVuIGZuLlxuICpcbiAqIEBwYXJhbSAge09iamVjdHxBcnJheX0gICBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZm5cbiAqXG4gKiBAcmV0dXJuIHtBcnJheX0gdHJhbnNmb3JtZWQgY29sbGVjdGlvblxuICovXG5cbmZ1bmN0aW9uIG1hcChjb2xsZWN0aW9uLCBmbikge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvckVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24gKHZhbCwga2V5KSB7XG4gICAgcmVzdWx0LnB1c2goZm4odmFsLCBrZXkpKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIEdldCB0aGUgY29sbGVjdGlvbnMga2V5cy5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R8QXJyYXl9IGNvbGxlY3Rpb25cbiAqXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuXG5mdW5jdGlvbiBrZXlzKGNvbGxlY3Rpb24pIHtcbiAgcmV0dXJuIGNvbGxlY3Rpb24gJiYgT2JqZWN0LmtleXMoY29sbGVjdGlvbikgfHwgW107XG59XG4vKipcbiAqIFNob3J0aGFuZCBmb3IgYGtleXMobykubGVuZ3RoYC5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R8QXJyYXl9IGNvbGxlY3Rpb25cbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cblxuZnVuY3Rpb24gc2l6ZShjb2xsZWN0aW9uKSB7XG4gIHJldHVybiBrZXlzKGNvbGxlY3Rpb24pLmxlbmd0aDtcbn1cbi8qKlxuICogR2V0IHRoZSB2YWx1ZXMgaW4gdGhlIGNvbGxlY3Rpb24uXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fEFycmF5fSBjb2xsZWN0aW9uXG4gKlxuICogQHJldHVybiB7QXJyYXl9XG4gKi9cblxuZnVuY3Rpb24gdmFsdWVzKGNvbGxlY3Rpb24pIHtcbiAgcmV0dXJuIG1hcChjb2xsZWN0aW9uLCBmdW5jdGlvbiAodmFsKSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfSk7XG59XG4vKipcbiAqIEdyb3VwIGNvbGxlY3Rpb24gbWVtYmVycyBieSBhdHRyaWJ1dGUuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fEFycmF5fSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZXh0cmFjdG9yXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBtYXAgd2l0aCB7IGF0dHJWYWx1ZSA9PiBbIGEsIGIsIGMgXSB9XG4gKi9cblxuZnVuY3Rpb24gZ3JvdXBCeShjb2xsZWN0aW9uLCBleHRyYWN0b3IpIHtcbiAgdmFyIGdyb3VwZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICBleHRyYWN0b3IgPSB0b0V4dHJhY3RvcihleHRyYWN0b3IpO1xuICBmb3JFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uICh2YWwpIHtcbiAgICB2YXIgZGlzY3JpbWluYXRvciA9IGV4dHJhY3Rvcih2YWwpIHx8ICdfJztcbiAgICB2YXIgZ3JvdXAgPSBncm91cGVkW2Rpc2NyaW1pbmF0b3JdO1xuXG4gICAgaWYgKCFncm91cCkge1xuICAgICAgZ3JvdXAgPSBncm91cGVkW2Rpc2NyaW1pbmF0b3JdID0gW107XG4gICAgfVxuXG4gICAgZ3JvdXAucHVzaCh2YWwpO1xuICB9KTtcbiAgcmV0dXJuIGdyb3VwZWQ7XG59XG5mdW5jdGlvbiB1bmlxdWVCeShleHRyYWN0b3IpIHtcbiAgZXh0cmFjdG9yID0gdG9FeHRyYWN0b3IoZXh0cmFjdG9yKTtcbiAgdmFyIGdyb3VwZWQgPSB7fTtcblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgY29sbGVjdGlvbnMgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGNvbGxlY3Rpb25zW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIGZvckVhY2goY29sbGVjdGlvbnMsIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGdyb3VwQnkoYywgZXh0cmFjdG9yLCBncm91cGVkKTtcbiAgfSk7XG4gIHZhciByZXN1bHQgPSBtYXAoZ3JvdXBlZCwgZnVuY3Rpb24gKHZhbCwga2V5KSB7XG4gICAgcmV0dXJuIHZhbFswXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG52YXIgdW5pb25CeSA9IHVuaXF1ZUJ5O1xuLyoqXG4gKiBTb3J0IGNvbGxlY3Rpb24gYnkgY3JpdGVyaWEuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fEFycmF5fSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gIHtTdHJpbmd8RnVuY3Rpb259IGV4dHJhY3RvclxuICpcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5cbmZ1bmN0aW9uIHNvcnRCeShjb2xsZWN0aW9uLCBleHRyYWN0b3IpIHtcbiAgZXh0cmFjdG9yID0gdG9FeHRyYWN0b3IoZXh0cmFjdG9yKTtcbiAgdmFyIHNvcnRlZCA9IFtdO1xuICBmb3JFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgdmFyIGRpc2MgPSBleHRyYWN0b3IodmFsdWUsIGtleSk7XG4gICAgdmFyIGVudHJ5ID0ge1xuICAgICAgZDogZGlzYyxcbiAgICAgIHY6IHZhbHVlXG4gICAgfTtcblxuICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IHNvcnRlZC5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICB2YXIgZCA9IHNvcnRlZFtpZHhdLmQ7XG5cbiAgICAgIGlmIChkaXNjIDwgZCkge1xuICAgICAgICBzb3J0ZWQuc3BsaWNlKGlkeCwgMCwgZW50cnkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSAvLyBub3QgaW5zZXJ0ZWQsIGFwcGVuZCAoISlcblxuXG4gICAgc29ydGVkLnB1c2goZW50cnkpO1xuICB9KTtcbiAgcmV0dXJuIG1hcChzb3J0ZWQsIGZ1bmN0aW9uIChlKSB7XG4gICAgcmV0dXJuIGUudjtcbiAgfSk7XG59XG4vKipcbiAqIENyZWF0ZSBhbiBvYmplY3QgcGF0dGVybiBtYXRjaGVyLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogY29uc3QgbWF0Y2hlciA9IG1hdGNoUGF0dGVybih7IGlkOiAxIH0pO1xuICpcbiAqIHZhciBlbGVtZW50ID0gZmluZChlbGVtZW50cywgbWF0Y2hlcik7XG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBwYXR0ZXJuXG4gKlxuICogQHJldHVybiB7RnVuY3Rpb259IG1hdGNoZXJGblxuICovXG5cbmZ1bmN0aW9uIG1hdGNoUGF0dGVybihwYXR0ZXJuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZWwpIHtcbiAgICByZXR1cm4gZXZlcnkocGF0dGVybiwgZnVuY3Rpb24gKHZhbCwga2V5KSB7XG4gICAgICByZXR1cm4gZWxba2V5XSA9PT0gdmFsO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0b0V4dHJhY3RvcihleHRyYWN0b3IpIHtcbiAgcmV0dXJuIGlzRnVuY3Rpb24oZXh0cmFjdG9yKSA/IGV4dHJhY3RvciA6IGZ1bmN0aW9uIChlKSB7XG4gICAgcmV0dXJuIGVbZXh0cmFjdG9yXTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdG9NYXRjaGVyKG1hdGNoZXIpIHtcbiAgcmV0dXJuIGlzRnVuY3Rpb24obWF0Y2hlcikgPyBtYXRjaGVyIDogZnVuY3Rpb24gKGUpIHtcbiAgICByZXR1cm4gZSA9PT0gbWF0Y2hlcjtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaWRlbnRpdHkoYXJnKSB7XG4gIHJldHVybiBhcmc7XG59XG5cbmZ1bmN0aW9uIHRvTnVtKGFyZykge1xuICByZXR1cm4gTnVtYmVyKGFyZyk7XG59XG5cbi8qKlxuICogRGVib3VuY2UgZm4sIGNhbGxpbmcgaXQgb25seSBvbmNlIGlmXG4gKiB0aGUgZ2l2ZW4gdGltZSBlbGFwc2VkIGJldHdlZW4gY2FsbHMuXG4gKlxuICogQHBhcmFtICB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IHRpbWVvdXRcbiAqXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gZGVib3VuY2VkIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIGRlYm91bmNlKGZuLCB0aW1lb3V0KSB7XG4gIHZhciB0aW1lcjtcbiAgdmFyIGxhc3RBcmdzO1xuICB2YXIgbGFzdFRoaXM7XG4gIHZhciBsYXN0Tm93O1xuXG4gIGZ1bmN0aW9uIGZpcmUoKSB7XG4gICAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gICAgdmFyIHNjaGVkdWxlZERpZmYgPSBsYXN0Tm93ICsgdGltZW91dCAtIG5vdztcblxuICAgIGlmIChzY2hlZHVsZWREaWZmID4gMCkge1xuICAgICAgcmV0dXJuIHNjaGVkdWxlKHNjaGVkdWxlZERpZmYpO1xuICAgIH1cblxuICAgIGZuLmFwcGx5KGxhc3RUaGlzLCBsYXN0QXJncyk7XG4gICAgdGltZXIgPSBsYXN0Tm93ID0gbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjaGVkdWxlKHRpbWVvdXQpIHtcbiAgICB0aW1lciA9IHNldFRpbWVvdXQoZmlyZSwgdGltZW91dCk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGxhc3ROb3cgPSBEYXRlLm5vdygpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIGxhc3RBcmdzID0gYXJncztcbiAgICBsYXN0VGhpcyA9IHRoaXM7IC8vIGVuc3VyZSBhbiBleGVjdXRpb24gaXMgc2NoZWR1bGVkXG5cbiAgICBpZiAoIXRpbWVyKSB7XG4gICAgICBzY2hlZHVsZSh0aW1lb3V0KTtcbiAgICB9XG4gIH07XG59XG4vKipcbiAqIFRocm90dGxlIGZuLCBjYWxsaW5nIGF0IG1vc3Qgb25jZVxuICogaW4gdGhlIGdpdmVuIGludGVydmFsLlxuICpcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtICB7TnVtYmVyfSBpbnRlcnZhbFxuICpcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSB0aHJvdHRsZWQgZnVuY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiB0aHJvdHRsZShmbiwgaW50ZXJ2YWwpIHtcbiAgdmFyIHRocm90dGxpbmcgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhyb3R0bGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZuLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgICB0aHJvdHRsaW5nID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm90dGxpbmcgPSBmYWxzZTtcbiAgICB9LCBpbnRlcnZhbCk7XG4gIH07XG59XG4vKipcbiAqIEJpbmQgZnVuY3Rpb24gYWdhaW5zdCB0YXJnZXQgPHRoaXM+LlxuICpcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtICB7T2JqZWN0fSAgIHRhcmdldFxuICpcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBib3VuZCBmdW5jdGlvblxuICovXG5cbmZ1bmN0aW9uIGJpbmQoZm4sIHRhcmdldCkge1xuICByZXR1cm4gZm4uYmluZCh0YXJnZXQpO1xufVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG4vKipcbiAqIENvbnZlbmllbmNlIHdyYXBwZXIgZm9yIGBPYmplY3QuYXNzaWduYC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0gey4uLk9iamVjdH0gb3RoZXJzXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB0aGUgdGFyZ2V0XG4gKi9cblxuZnVuY3Rpb24gYXNzaWduKHRhcmdldCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgb3RoZXJzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBvdGhlcnNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHZvaWQgMCwgW3RhcmdldF0uY29uY2F0KG90aGVycykpO1xufVxuLyoqXG4gKiBQaWNrIGdpdmVuIHByb3BlcnRpZXMgZnJvbSB0aGUgdGFyZ2V0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wZXJ0aWVzXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB0YXJnZXRcbiAqL1xuXG5mdW5jdGlvbiBwaWNrKHRhcmdldCwgcHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIHZhciBvYmogPSBPYmplY3QodGFyZ2V0KTtcbiAgZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbiAocHJvcCkge1xuICAgIGlmIChwcm9wIGluIG9iaikge1xuICAgICAgcmVzdWx0W3Byb3BdID0gdGFyZ2V0W3Byb3BdO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFBpY2sgYWxsIHRhcmdldCBwcm9wZXJ0aWVzLCBleGNsdWRpbmcgdGhlIGdpdmVuIG9uZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHBhcmFtIHtBcnJheX0gcHJvcGVydGllc1xuICpcbiAqIEByZXR1cm4ge09iamVjdH0gdGFyZ2V0XG4gKi9cblxuZnVuY3Rpb24gb21pdCh0YXJnZXQsIHByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICB2YXIgb2JqID0gT2JqZWN0KHRhcmdldCk7XG4gIGZvckVhY2gob2JqLCBmdW5jdGlvbiAocHJvcCwga2V5KSB7XG4gICAgaWYgKHByb3BlcnRpZXMuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBwcm9wO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFJlY3Vyc2l2ZWx5IG1lcmdlIGAuLi5zb3VyY2VzYCBpbnRvIGdpdmVuIHRhcmdldC5cbiAqXG4gKiBEb2VzIHN1cHBvcnQgbWVyZ2luZyBvYmplY3RzOyBkb2VzIG5vdCBzdXBwb3J0IG1lcmdpbmcgYXJyYXlzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzb3VyY2VzXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB0aGUgdGFyZ2V0XG4gKi9cblxuZnVuY3Rpb24gbWVyZ2UodGFyZ2V0KSB7XG4gIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgc291cmNlcyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgc291cmNlc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgfVxuXG4gIGlmICghc291cmNlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgZm9yRWFjaChzb3VyY2VzLCBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgLy8gc2tpcCBub24tb2JqIHNvdXJjZXMsIGkuZS4gbnVsbFxuICAgIGlmICghc291cmNlIHx8ICFpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yRWFjaChzb3VyY2UsIGZ1bmN0aW9uIChzb3VyY2VWYWwsIGtleSkge1xuICAgICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgdGFyZ2V0VmFsID0gdGFyZ2V0W2tleV07XG5cbiAgICAgIGlmIChpc09iamVjdChzb3VyY2VWYWwpKSB7XG4gICAgICAgIGlmICghaXNPYmplY3QodGFyZ2V0VmFsKSkge1xuICAgICAgICAgIC8vIG92ZXJyaWRlIHRhcmdldFtrZXldIHdpdGggb2JqZWN0XG4gICAgICAgICAgdGFyZ2V0VmFsID0ge307XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXRba2V5XSA9IG1lcmdlKHRhcmdldFZhbCwgc291cmNlVmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gc291cmNlVmFsO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZXhwb3J0IHsgZmxhdHRlbiwgZmluZCwgZmluZEluZGV4LCBmaWx0ZXIsIGZvckVhY2gsIHdpdGhvdXQsIHJlZHVjZSwgZXZlcnksIHNvbWUsIG1hcCwga2V5cywgc2l6ZSwgdmFsdWVzLCBncm91cEJ5LCB1bmlxdWVCeSwgdW5pb25CeSwgc29ydEJ5LCBtYXRjaFBhdHRlcm4sIGRlYm91bmNlLCB0aHJvdHRsZSwgYmluZCwgaXNVbmRlZmluZWQsIGlzRGVmaW5lZCwgaXNOaWwsIGlzQXJyYXksIGlzT2JqZWN0LCBpc051bWJlciwgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIGVuc3VyZUFycmF5LCBoYXMsIGFzc2lnbiwgcGljaywgb21pdCwgbWVyZ2UgfTtcbiIsIi8qKlxuICogU2V0IGF0dHJpYnV0ZSBgbmFtZWAgdG8gYHZhbGAsIG9yIGdldCBhdHRyIGBuYW1lYC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtTdHJpbmd9IFt2YWxdXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWwpIHtcbiAgLy8gZ2V0XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDIpIHtcbiAgICByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICB9XG5cbiAgLy8gcmVtb3ZlXG4gIGlmICh2YWwgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICB9XG5cbiAgLy8gc2V0XG4gIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWwpO1xuXG4gIHJldHVybiBlbDtcbn1cblxudmFyIGluZGV4T2YgPSBbXS5pbmRleE9mO1xuXG52YXIgaW5kZXhvZiA9IGZ1bmN0aW9uKGFyciwgb2JqKXtcbiAgaWYgKGluZGV4T2YpIHJldHVybiBhcnIuaW5kZXhPZihvYmopO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkge1xuICAgIGlmIChhcnJbaV0gPT09IG9iaikgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufTtcblxuLyoqXG4gKiBUYWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9jb21wb25lbnQvY2xhc3Nlc1xuICpcbiAqIFdpdGhvdXQgdGhlIGNvbXBvbmVudCBiaXRzLlxuICovXG5cbi8qKlxuICogV2hpdGVzcGFjZSByZWdleHAuXG4gKi9cblxudmFyIHJlID0gL1xccysvO1xuXG4vKipcbiAqIHRvU3RyaW5nIHJlZmVyZW5jZS5cbiAqL1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKipcbiAqIFdyYXAgYGVsYCBpbiBhIGBDbGFzc0xpc3RgLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEByZXR1cm4ge0NsYXNzTGlzdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gY2xhc3NlcyhlbCkge1xuICByZXR1cm4gbmV3IENsYXNzTGlzdChlbCk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIG5ldyBDbGFzc0xpc3QgZm9yIGBlbGAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbFxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gQ2xhc3NMaXN0KGVsKSB7XG4gIGlmICghZWwgfHwgIWVsLm5vZGVUeXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBIERPTSBlbGVtZW50IHJlZmVyZW5jZSBpcyByZXF1aXJlZCcpO1xuICB9XG4gIHRoaXMuZWwgPSBlbDtcbiAgdGhpcy5saXN0ID0gZWwuY2xhc3NMaXN0O1xufVxuXG4vKipcbiAqIEFkZCBjbGFzcyBgbmFtZWAgaWYgbm90IGFscmVhZHkgcHJlc2VudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHJldHVybiB7Q2xhc3NMaXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5DbGFzc0xpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIC8vIGNsYXNzTGlzdFxuICBpZiAodGhpcy5saXN0KSB7XG4gICAgdGhpcy5saXN0LmFkZChuYW1lKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGZhbGxiYWNrXG4gIHZhciBhcnIgPSB0aGlzLmFycmF5KCk7XG4gIHZhciBpID0gaW5kZXhvZihhcnIsIG5hbWUpO1xuICBpZiAoIX5pKSBhcnIucHVzaChuYW1lKTtcbiAgdGhpcy5lbC5jbGFzc05hbWUgPSBhcnIuam9pbignICcpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGNsYXNzIGBuYW1lYCB3aGVuIHByZXNlbnQsIG9yXG4gKiBwYXNzIGEgcmVndWxhciBleHByZXNzaW9uIHRvIHJlbW92ZVxuICogYW55IHdoaWNoIG1hdGNoLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfFJlZ0V4cH0gbmFtZVxuICogQHJldHVybiB7Q2xhc3NMaXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5DbGFzc0xpc3QucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICgnW29iamVjdCBSZWdFeHBdJyA9PSB0b1N0cmluZy5jYWxsKG5hbWUpKSB7XG4gICAgcmV0dXJuIHRoaXMucmVtb3ZlTWF0Y2hpbmcobmFtZSk7XG4gIH1cblxuICAvLyBjbGFzc0xpc3RcbiAgaWYgKHRoaXMubGlzdCkge1xuICAgIHRoaXMubGlzdC5yZW1vdmUobmFtZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBmYWxsYmFja1xuICB2YXIgYXJyID0gdGhpcy5hcnJheSgpO1xuICB2YXIgaSA9IGluZGV4b2YoYXJyLCBuYW1lKTtcbiAgaWYgKH5pKSBhcnIuc3BsaWNlKGksIDEpO1xuICB0aGlzLmVsLmNsYXNzTmFtZSA9IGFyci5qb2luKCcgJyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGNsYXNzZXMgbWF0Y2hpbmcgYHJlYC5cbiAqXG4gKiBAcGFyYW0ge1JlZ0V4cH0gcmVcbiAqIEByZXR1cm4ge0NsYXNzTGlzdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkNsYXNzTGlzdC5wcm90b3R5cGUucmVtb3ZlTWF0Y2hpbmcgPSBmdW5jdGlvbiAocmUpIHtcbiAgdmFyIGFyciA9IHRoaXMuYXJyYXkoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAocmUudGVzdChhcnJbaV0pKSB7XG4gICAgICB0aGlzLnJlbW92ZShhcnJbaV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVG9nZ2xlIGNsYXNzIGBuYW1lYCwgY2FuIGZvcmNlIHN0YXRlIHZpYSBgZm9yY2VgLlxuICpcbiAqIEZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgY2xhc3NMaXN0LCBidXQgZG8gbm90IHN1cHBvcnQgYGZvcmNlYCB5ZXQsXG4gKiB0aGUgbWlzdGFrZSB3aWxsIGJlIGRldGVjdGVkIGFuZCBjb3JyZWN0ZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZm9yY2VcbiAqIEByZXR1cm4ge0NsYXNzTGlzdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ2xhc3NMaXN0LnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAobmFtZSwgZm9yY2UpIHtcbiAgLy8gY2xhc3NMaXN0XG4gIGlmICh0aGlzLmxpc3QpIHtcbiAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBmb3JjZSkge1xuICAgICAgaWYgKGZvcmNlICE9PSB0aGlzLmxpc3QudG9nZ2xlKG5hbWUsIGZvcmNlKSkge1xuICAgICAgICB0aGlzLmxpc3QudG9nZ2xlKG5hbWUpOyAvLyB0b2dnbGUgYWdhaW4gdG8gY29ycmVjdFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxpc3QudG9nZ2xlKG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGZhbGxiYWNrXG4gIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGZvcmNlKSB7XG4gICAgaWYgKCFmb3JjZSkge1xuICAgICAgdGhpcy5yZW1vdmUobmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkKG5hbWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodGhpcy5oYXMobmFtZSkpIHtcbiAgICAgIHRoaXMucmVtb3ZlKG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZChuYW1lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmV0dXJuIGFuIGFycmF5IG9mIGNsYXNzZXMuXG4gKlxuICogQHJldHVybiB7QXJyYXl9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkNsYXNzTGlzdC5wcm90b3R5cGUuYXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjbGFzc05hbWUgPSB0aGlzLmVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJztcbiAgdmFyIHN0ciA9IGNsYXNzTmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG4gIHZhciBhcnIgPSBzdHIuc3BsaXQocmUpO1xuICBpZiAoJycgPT09IGFyclswXSkgYXJyLnNoaWZ0KCk7XG4gIHJldHVybiBhcnI7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGNsYXNzIGBuYW1lYCBpcyBwcmVzZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJuIHtDbGFzc0xpc3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkNsYXNzTGlzdC5wcm90b3R5cGUuaGFzID0gQ2xhc3NMaXN0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiB0aGlzLmxpc3QgPyB0aGlzLmxpc3QuY29udGFpbnMobmFtZSkgOiAhIX5pbmRleG9mKHRoaXMuYXJyYXkoKSwgbmFtZSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgY2hpbGRyZW4gZnJvbSB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gY2xlYXIoZWwpIHtcblxuICB2YXIgYztcblxuICB3aGlsZSAoZWwuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICBjID0gZWwuY2hpbGROb2Rlc1swXTtcbiAgICBlbC5yZW1vdmVDaGlsZChjKTtcbiAgfVxuXG4gIHJldHVybiBlbDtcbn1cblxudmFyIHByb3RvID0gdHlwZW9mIEVsZW1lbnQgIT09ICd1bmRlZmluZWQnID8gRWxlbWVudC5wcm90b3R5cGUgOiB7fTtcbnZhciB2ZW5kb3IgPSBwcm90by5tYXRjaGVzXG4gIHx8IHByb3RvLm1hdGNoZXNTZWxlY3RvclxuICB8fCBwcm90by53ZWJraXRNYXRjaGVzU2VsZWN0b3JcbiAgfHwgcHJvdG8ubW96TWF0Y2hlc1NlbGVjdG9yXG4gIHx8IHByb3RvLm1zTWF0Y2hlc1NlbGVjdG9yXG4gIHx8IHByb3RvLm9NYXRjaGVzU2VsZWN0b3I7XG5cbnZhciBtYXRjaGVzU2VsZWN0b3IgPSBtYXRjaDtcblxuLyoqXG4gKiBNYXRjaCBgZWxgIHRvIGBzZWxlY3RvcmAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbFxuICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBtYXRjaChlbCwgc2VsZWN0b3IpIHtcbiAgaWYgKCFlbCB8fCBlbC5ub2RlVHlwZSAhPT0gMSkgcmV0dXJuIGZhbHNlO1xuICBpZiAodmVuZG9yKSByZXR1cm4gdmVuZG9yLmNhbGwoZWwsIHNlbGVjdG9yKTtcbiAgdmFyIG5vZGVzID0gZWwucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChub2Rlc1tpXSA9PSBlbCkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENsb3Nlc3RcbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gY2hlY2tZb3VyU2VsZiAob3B0aW9uYWwpXG4gKi9cbmZ1bmN0aW9uIGNsb3Nlc3QgKGVsZW1lbnQsIHNlbGVjdG9yLCBjaGVja1lvdXJTZWxmKSB7XG4gIHZhciBjdXJyZW50RWxlbSA9IGNoZWNrWW91clNlbGYgPyBlbGVtZW50IDogZWxlbWVudC5wYXJlbnROb2RlO1xuXG4gIHdoaWxlIChjdXJyZW50RWxlbSAmJiBjdXJyZW50RWxlbS5ub2RlVHlwZSAhPT0gZG9jdW1lbnQuRE9DVU1FTlRfTk9ERSAmJiBjdXJyZW50RWxlbS5ub2RlVHlwZSAhPT0gZG9jdW1lbnQuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSkge1xuXG4gICAgaWYgKG1hdGNoZXNTZWxlY3RvcihjdXJyZW50RWxlbSwgc2VsZWN0b3IpKSB7XG4gICAgICByZXR1cm4gY3VycmVudEVsZW07XG4gICAgfVxuXG4gICAgY3VycmVudEVsZW0gPSBjdXJyZW50RWxlbS5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIG1hdGNoZXNTZWxlY3RvcihjdXJyZW50RWxlbSwgc2VsZWN0b3IpID8gY3VycmVudEVsZW0gOiBudWxsO1xufVxuXG52YXIgYmluZCA9IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyID8gJ2FkZEV2ZW50TGlzdGVuZXInIDogJ2F0dGFjaEV2ZW50JyxcbiAgICB1bmJpbmQgPSB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciA/ICdyZW1vdmVFdmVudExpc3RlbmVyJyA6ICdkZXRhY2hFdmVudCcsXG4gICAgcHJlZml4ID0gYmluZCAhPT0gJ2FkZEV2ZW50TGlzdGVuZXInID8gJ29uJyA6ICcnO1xuXG4vKipcbiAqIEJpbmQgYGVsYCBldmVudCBgdHlwZWAgdG8gYGZuYC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gY2FwdHVyZVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnZhciBiaW5kXzEgPSBmdW5jdGlvbihlbCwgdHlwZSwgZm4sIGNhcHR1cmUpe1xuICBlbFtiaW5kXShwcmVmaXggKyB0eXBlLCBmbiwgY2FwdHVyZSB8fCBmYWxzZSk7XG4gIHJldHVybiBmbjtcbn07XG5cbi8qKlxuICogVW5iaW5kIGBlbGAgZXZlbnQgYHR5cGVgJ3MgY2FsbGJhY2sgYGZuYC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gY2FwdHVyZVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnZhciB1bmJpbmRfMSA9IGZ1bmN0aW9uKGVsLCB0eXBlLCBmbiwgY2FwdHVyZSl7XG4gIGVsW3VuYmluZF0ocHJlZml4ICsgdHlwZSwgZm4sIGNhcHR1cmUgfHwgZmFsc2UpO1xuICByZXR1cm4gZm47XG59O1xuXG52YXIgY29tcG9uZW50RXZlbnQgPSB7XG5cdGJpbmQ6IGJpbmRfMSxcblx0dW5iaW5kOiB1bmJpbmRfMVxufTtcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbi8qKlxuICogRGVsZWdhdGUgZXZlbnQgYHR5cGVgIHRvIGBzZWxlY3RvcmBcbiAqIGFuZCBpbnZva2UgYGZuKGUpYC4gQSBjYWxsYmFjayBmdW5jdGlvblxuICogaXMgcmV0dXJuZWQgd2hpY2ggbWF5IGJlIHBhc3NlZCB0byBgLnVuYmluZCgpYC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtCb29sZWFufSBjYXB0dXJlXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuLy8gU29tZSBldmVudHMgZG9uJ3QgYnViYmxlLCBzbyB3ZSB3YW50IHRvIGJpbmQgdG8gdGhlIGNhcHR1cmUgcGhhc2UgaW5zdGVhZFxuLy8gd2hlbiBkZWxlZ2F0aW5nLlxudmFyIGZvcmNlQ2FwdHVyZUV2ZW50cyA9IFsnZm9jdXMnLCAnYmx1ciddO1xuXG5mdW5jdGlvbiBiaW5kJDEoZWwsIHNlbGVjdG9yLCB0eXBlLCBmbiwgY2FwdHVyZSkge1xuICBpZiAoZm9yY2VDYXB0dXJlRXZlbnRzLmluZGV4T2YodHlwZSkgIT09IC0xKSB7XG4gICAgY2FwdHVyZSA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gY29tcG9uZW50RXZlbnQuYmluZChlbCwgdHlwZSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgdGFyZ2V0ID0gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50O1xuICAgIGUuZGVsZWdhdGVUYXJnZXQgPSBjbG9zZXN0KHRhcmdldCwgc2VsZWN0b3IsIHRydWUsIGVsKTtcbiAgICBpZiAoZS5kZWxlZ2F0ZVRhcmdldCkge1xuICAgICAgZm4uY2FsbChlbCwgZSk7XG4gICAgfVxuICB9LCBjYXB0dXJlKTtcbn1cblxuLyoqXG4gKiBVbmJpbmQgZXZlbnQgYHR5cGVgJ3MgY2FsbGJhY2sgYGZuYC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gY2FwdHVyZVxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gdW5iaW5kJDEoZWwsIHR5cGUsIGZuLCBjYXB0dXJlKSB7XG4gIGlmIChmb3JjZUNhcHR1cmVFdmVudHMuaW5kZXhPZih0eXBlKSAhPT0gLTEpIHtcbiAgICBjYXB0dXJlID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnRFdmVudC51bmJpbmQoZWwsIHR5cGUsIGZuLCBjYXB0dXJlKTtcbn1cblxudmFyIGRlbGVnYXRlID0ge1xuICBiaW5kOiBiaW5kJDEsXG4gIHVuYmluZDogdW5iaW5kJDFcbn07XG5cbi8qKlxuICogRXhwb3NlIGBwYXJzZWAuXG4gKi9cblxudmFyIGRvbWlmeSA9IHBhcnNlO1xuXG4vKipcbiAqIFRlc3RzIGZvciBicm93c2VyIHN1cHBvcnQuXG4gKi9cblxudmFyIGlubmVySFRNTEJ1ZyA9IGZhbHNlO1xudmFyIGJ1Z1Rlc3REaXY7XG5pZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICBidWdUZXN0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIC8vIFNldHVwXG4gIGJ1Z1Rlc3REaXYuaW5uZXJIVE1MID0gJyAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9XCIvYVwiPmE8L2E+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiLz4nO1xuICAvLyBNYWtlIHN1cmUgdGhhdCBsaW5rIGVsZW1lbnRzIGdldCBzZXJpYWxpemVkIGNvcnJlY3RseSBieSBpbm5lckhUTUxcbiAgLy8gVGhpcyByZXF1aXJlcyBhIHdyYXBwZXIgZWxlbWVudCBpbiBJRVxuICBpbm5lckhUTUxCdWcgPSAhYnVnVGVzdERpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbGluaycpLmxlbmd0aDtcbiAgYnVnVGVzdERpdiA9IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBXcmFwIG1hcCBmcm9tIGpxdWVyeS5cbiAqL1xuXG52YXIgbWFwID0ge1xuICBsZWdlbmQ6IFsxLCAnPGZpZWxkc2V0PicsICc8L2ZpZWxkc2V0PiddLFxuICB0cjogWzIsICc8dGFibGU+PHRib2R5PicsICc8L3Rib2R5PjwvdGFibGU+J10sXG4gIGNvbDogWzIsICc8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPicsICc8L2NvbGdyb3VwPjwvdGFibGU+J10sXG4gIC8vIGZvciBzY3JpcHQvbGluay9zdHlsZSB0YWdzIHRvIHdvcmsgaW4gSUU2LTgsIHlvdSBoYXZlIHRvIHdyYXBcbiAgLy8gaW4gYSBkaXYgd2l0aCBhIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBpbiBmcm9udCwgaGEhXG4gIF9kZWZhdWx0OiBpbm5lckhUTUxCdWcgPyBbMSwgJ1g8ZGl2PicsICc8L2Rpdj4nXSA6IFswLCAnJywgJyddXG59O1xuXG5tYXAudGQgPVxubWFwLnRoID0gWzMsICc8dGFibGU+PHRib2R5Pjx0cj4nLCAnPC90cj48L3Rib2R5PjwvdGFibGU+J107XG5cbm1hcC5vcHRpb24gPVxubWFwLm9wdGdyb3VwID0gWzEsICc8c2VsZWN0IG11bHRpcGxlPVwibXVsdGlwbGVcIj4nLCAnPC9zZWxlY3Q+J107XG5cbm1hcC50aGVhZCA9XG5tYXAudGJvZHkgPVxubWFwLmNvbGdyb3VwID1cbm1hcC5jYXB0aW9uID1cbm1hcC50Zm9vdCA9IFsxLCAnPHRhYmxlPicsICc8L3RhYmxlPiddO1xuXG5tYXAucG9seWxpbmUgPVxubWFwLmVsbGlwc2UgPVxubWFwLnBvbHlnb24gPVxubWFwLmNpcmNsZSA9XG5tYXAudGV4dCA9XG5tYXAubGluZSA9XG5tYXAucGF0aCA9XG5tYXAucmVjdCA9XG5tYXAuZyA9IFsxLCAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmVyc2lvbj1cIjEuMVwiPicsJzwvc3ZnPiddO1xuXG4vKipcbiAqIFBhcnNlIGBodG1sYCBhbmQgcmV0dXJuIGEgRE9NIE5vZGUgaW5zdGFuY2UsIHdoaWNoIGNvdWxkIGJlIGEgVGV4dE5vZGUsXG4gKiBIVE1MIERPTSBOb2RlIG9mIHNvbWUga2luZCAoPGRpdj4gZm9yIGV4YW1wbGUpLCBvciBhIERvY3VtZW50RnJhZ21lbnRcbiAqIGluc3RhbmNlLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRlbnRzIG9mIHRoZSBgaHRtbGAgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBodG1sIC0gSFRNTCBzdHJpbmcgdG8gXCJkb21pZnlcIlxuICogQHBhcmFtIHtEb2N1bWVudH0gZG9jIC0gVGhlIGBkb2N1bWVudGAgaW5zdGFuY2UgdG8gY3JlYXRlIHRoZSBOb2RlIGZvclxuICogQHJldHVybiB7RE9NTm9kZX0gdGhlIFRleHROb2RlLCBET00gTm9kZSwgb3IgRG9jdW1lbnRGcmFnbWVudCBpbnN0YW5jZVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2UoaHRtbCwgZG9jKSB7XG4gIGlmICgnc3RyaW5nJyAhPSB0eXBlb2YgaHRtbCkgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkJyk7XG5cbiAgLy8gZGVmYXVsdCB0byB0aGUgZ2xvYmFsIGBkb2N1bWVudGAgb2JqZWN0XG4gIGlmICghZG9jKSBkb2MgPSBkb2N1bWVudDtcblxuICAvLyB0YWcgbmFtZVxuICB2YXIgbSA9IC88KFtcXHc6XSspLy5leGVjKGh0bWwpO1xuICBpZiAoIW0pIHJldHVybiBkb2MuY3JlYXRlVGV4dE5vZGUoaHRtbCk7XG5cbiAgaHRtbCA9IGh0bWwucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpOyAvLyBSZW1vdmUgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlXG5cbiAgdmFyIHRhZyA9IG1bMV07XG5cbiAgLy8gYm9keSBzdXBwb3J0XG4gIGlmICh0YWcgPT0gJ2JvZHknKSB7XG4gICAgdmFyIGVsID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2h0bWwnKTtcbiAgICBlbC5pbm5lckhUTUwgPSBodG1sO1xuICAgIHJldHVybiBlbC5yZW1vdmVDaGlsZChlbC5sYXN0Q2hpbGQpO1xuICB9XG5cbiAgLy8gd3JhcCBtYXBcbiAgdmFyIHdyYXAgPSBtYXBbdGFnXSB8fCBtYXAuX2RlZmF1bHQ7XG4gIHZhciBkZXB0aCA9IHdyYXBbMF07XG4gIHZhciBwcmVmaXggPSB3cmFwWzFdO1xuICB2YXIgc3VmZml4ID0gd3JhcFsyXTtcbiAgdmFyIGVsID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBlbC5pbm5lckhUTUwgPSBwcmVmaXggKyBodG1sICsgc3VmZml4O1xuICB3aGlsZSAoZGVwdGgtLSkgZWwgPSBlbC5sYXN0Q2hpbGQ7XG5cbiAgLy8gb25lIGVsZW1lbnRcbiAgaWYgKGVsLmZpcnN0Q2hpbGQgPT0gZWwubGFzdENoaWxkKSB7XG4gICAgcmV0dXJuIGVsLnJlbW92ZUNoaWxkKGVsLmZpcnN0Q2hpbGQpO1xuICB9XG5cbiAgLy8gc2V2ZXJhbCBlbGVtZW50c1xuICB2YXIgZnJhZ21lbnQgPSBkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICB3aGlsZSAoZWwuZmlyc3RDaGlsZCkge1xuICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGVsLnJlbW92ZUNoaWxkKGVsLmZpcnN0Q2hpbGQpKTtcbiAgfVxuXG4gIHJldHVybiBmcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gcXVlcnkoc2VsZWN0b3IsIGVsKSB7XG4gIGVsID0gZWwgfHwgZG9jdW1lbnQ7XG5cbiAgcmV0dXJuIGVsLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xufVxuXG5mdW5jdGlvbiBhbGwoc2VsZWN0b3IsIGVsKSB7XG4gIGVsID0gZWwgfHwgZG9jdW1lbnQ7XG5cbiAgcmV0dXJuIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xufVxuXG5mdW5jdGlvbiByZW1vdmUoZWwpIHtcbiAgZWwucGFyZW50Tm9kZSAmJiBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcbn1cblxuZXhwb3J0IHsgYXR0ciwgY2xhc3NlcywgY2xlYXIsIGNsb3Nlc3QsIGRlbGVnYXRlLCBkb21pZnksIGNvbXBvbmVudEV2ZW50IGFzIGV2ZW50LCBtYXRjaGVzU2VsZWN0b3IgYXMgbWF0Y2hlcywgcXVlcnksIGFsbCBhcyBxdWVyeUFsbCwgcmVtb3ZlIH07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxuLy8gICAgICBcbi8vIEFuIGV2ZW50IGhhbmRsZXIgY2FuIHRha2UgYW4gb3B0aW9uYWwgZXZlbnQgYXJndW1lbnRcbi8vIGFuZCBzaG91bGQgbm90IHJldHVybiBhIHZhbHVlXG4vLyBBbiBhcnJheSBvZiBhbGwgY3VycmVudGx5IHJlZ2lzdGVyZWQgZXZlbnQgaGFuZGxlcnMgZm9yIGEgdHlwZVxuLy8gQSBtYXAgb2YgZXZlbnQgdHlwZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgZXZlbnQgaGFuZGxlcnMuXG5cbi8qKiBNaXR0OiBUaW55ICh+MjAwYikgZnVuY3Rpb25hbCBldmVudCBlbWl0dGVyIC8gcHVic3ViLlxuICogIEBuYW1lIG1pdHRcbiAqICBAcmV0dXJucyB7TWl0dH1cbiAqL1xuZnVuY3Rpb24gbWl0dChhbGwpIHtcbiAgYWxsID0gYWxsIHx8IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiB7XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgYW4gZXZlbnQgaGFuZGxlciBmb3IgdGhlIGdpdmVuIHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtTdHJpbmd9IHR5cGVcdFR5cGUgb2YgZXZlbnQgdG8gbGlzdGVuIGZvciwgb3IgYFwiKlwiYCBmb3IgYWxsIGV2ZW50c1xuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBoYW5kbGVyIEZ1bmN0aW9uIHRvIGNhbGwgaW4gcmVzcG9uc2UgdG8gZ2l2ZW4gZXZlbnRcbiAgICAgKiBAbWVtYmVyT2YgbWl0dFxuICAgICAqL1xuICAgIG9uOiBmdW5jdGlvbiBvbih0eXBlLCBoYW5kbGVyKSB7XG4gICAgICAoYWxsW3R5cGVdIHx8IChhbGxbdHlwZV0gPSBbXSkpLnB1c2goaGFuZGxlcik7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAge1N0cmluZ30gdHlwZVx0VHlwZSBvZiBldmVudCB0byB1bnJlZ2lzdGVyIGBoYW5kbGVyYCBmcm9tLCBvciBgXCIqXCJgXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGhhbmRsZXIgSGFuZGxlciBmdW5jdGlvbiB0byByZW1vdmVcbiAgICAgKiBAbWVtYmVyT2YgbWl0dFxuICAgICAqL1xuICAgIG9mZjogZnVuY3Rpb24gb2ZmKHR5cGUsIGhhbmRsZXIpIHtcbiAgICAgIGlmIChhbGxbdHlwZV0pIHtcbiAgICAgICAgYWxsW3R5cGVdLnNwbGljZShhbGxbdHlwZV0uaW5kZXhPZihoYW5kbGVyKSA+Pj4gMCwgMSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEludm9rZSBhbGwgaGFuZGxlcnMgZm9yIHRoZSBnaXZlbiB0eXBlLlxuICAgICAqIElmIHByZXNlbnQsIGBcIipcImAgaGFuZGxlcnMgYXJlIGludm9rZWQgYWZ0ZXIgdHlwZS1tYXRjaGVkIGhhbmRsZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgIFRoZSBldmVudCB0eXBlIHRvIGludm9rZVxuICAgICAqIEBwYXJhbSB7QW55fSBbZXZ0XSAgQW55IHZhbHVlIChvYmplY3QgaXMgcmVjb21tZW5kZWQgYW5kIHBvd2VyZnVsKSwgcGFzc2VkIHRvIGVhY2ggaGFuZGxlclxuICAgICAqIEBtZW1iZXJPZiBtaXR0XG4gICAgICovXG4gICAgZW1pdDogZnVuY3Rpb24gZW1pdCh0eXBlLCBldnQpIHtcbiAgICAgIChhbGxbdHlwZV0gfHwgW10pLnNsaWNlKCkubWFwKGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICAgIGhhbmRsZXIoZXZ0KTtcbiAgICAgIH0pO1xuICAgICAgKGFsbFsnKiddIHx8IFtdKS5zbGljZSgpLm1hcChmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgICAgICBoYW5kbGVyKHR5cGUsIGV2dCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBfZGVmYXVsdCA9IG1pdHQ7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYlhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWlKOSIsImltcG9ydCB7IGZvckVhY2gsIGFzc2lnbiwgZmluZCwgZmlsdGVyLCBpc1N0cmluZywgbWFwIH0gZnJvbSAnbWluLWRhc2gnO1xuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSAnc2F4ZW4nO1xuaW1wb3J0IHsgY29lcmNlVHlwZSwgcGFyc2VOYW1lTlMsIGlzU2ltcGxlVHlwZSwgTW9kZGxlIH0gZnJvbSAnbW9kZGxlJztcblxuZnVuY3Rpb24gaGFzTG93ZXJDYXNlQWxpYXMocGtnKSB7XG4gIHJldHVybiBwa2cueG1sICYmIHBrZy54bWwudGFnQWxpYXMgPT09ICdsb3dlckNhc2UnO1xufVxuXG52YXIgREVGQVVMVF9OU19NQVAgPSB7XG4gICd4c2knOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UnLFxuICAneG1sJzogJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSdcbn07XG5cbnZhciBYU0lfVFlQRSA9ICd4c2k6dHlwZSc7XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZUZvcm1hdChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnhtbCAmJiBlbGVtZW50LnhtbC5zZXJpYWxpemU7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZUFzVHlwZShlbGVtZW50KSB7XG4gIHJldHVybiBzZXJpYWxpemVGb3JtYXQoZWxlbWVudCkgPT09IFhTSV9UWVBFO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemVBc1Byb3BlcnR5KGVsZW1lbnQpIHtcbiAgcmV0dXJuIHNlcmlhbGl6ZUZvcm1hdChlbGVtZW50KSA9PT0gJ3Byb3BlcnR5Jztcbn1cblxuZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHIpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcbn1cblxuZnVuY3Rpb24gYWxpYXNUb05hbWUoYWxpYXNOcywgcGtnKSB7XG5cbiAgaWYgKCFoYXNMb3dlckNhc2VBbGlhcyhwa2cpKSB7XG4gICAgcmV0dXJuIGFsaWFzTnMubmFtZTtcbiAgfVxuXG4gIHJldHVybiBhbGlhc05zLnByZWZpeCArICc6JyArIGNhcGl0YWxpemUoYWxpYXNOcy5sb2NhbE5hbWUpO1xufVxuXG5mdW5jdGlvbiBwcmVmaXhlZFRvTmFtZShuYW1lTnMsIHBrZykge1xuXG4gIHZhciBuYW1lID0gbmFtZU5zLm5hbWUsXG4gICAgICBsb2NhbE5hbWUgPSBuYW1lTnMubG9jYWxOYW1lO1xuXG4gIHZhciB0eXBlUHJlZml4ID0gcGtnLnhtbCAmJiBwa2cueG1sLnR5cGVQcmVmaXg7XG5cbiAgaWYgKHR5cGVQcmVmaXggJiYgbG9jYWxOYW1lLmluZGV4T2YodHlwZVByZWZpeCkgPT09IDApIHtcbiAgICByZXR1cm4gbmFtZU5zLnByZWZpeCArICc6JyArIGxvY2FsTmFtZS5zbGljZSh0eXBlUHJlZml4Lmxlbmd0aCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplWHNpVHlwZU5hbWUobmFtZSwgbW9kZWwpIHtcblxuICB2YXIgbmFtZU5zID0gcGFyc2VOYW1lTlMobmFtZSk7XG4gIHZhciBwa2cgPSBtb2RlbC5nZXRQYWNrYWdlKG5hbWVOcy5wcmVmaXgpO1xuXG4gIHJldHVybiBwcmVmaXhlZFRvTmFtZShuYW1lTnMsIHBrZyk7XG59XG5cbmZ1bmN0aW9uIGVycm9yKG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG1vZGRsZSBkZXNjcmlwdG9yIGZvciBhIGdpdmVuIGluc3RhbmNlIG9yIHR5cGUuXG4gKlxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudHxGdW5jdGlvbn0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIG1vZGRsZSBkZXNjcmlwdG9yXG4gKi9cbmZ1bmN0aW9uIGdldE1vZGRsZURlc2NyaXB0b3IoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC4kZGVzY3JpcHRvcjtcbn1cblxuXG4vKipcbiAqIEEgcGFyc2UgY29udGV4dC5cbiAqXG4gKiBAY2xhc3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtFbGVtZW50SGFuZGxlcn0gb3B0aW9ucy5yb290SGFuZGxlciB0aGUgcm9vdCBoYW5kbGVyIGZvciBwYXJzaW5nIGEgZG9jdW1lbnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGF4PWZhbHNlXSB3aGV0aGVyIG9yIG5vdCB0byBpZ25vcmUgaW52YWxpZCBlbGVtZW50c1xuICovXG5mdW5jdGlvbiBDb250ZXh0KG9wdGlvbnMpIHtcblxuICAvKipcbiAgICogQHByb3BlcnR5IHtFbGVtZW50SGFuZGxlcn0gcm9vdEhhbmRsZXJcbiAgICovXG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gbGF4XG4gICAqL1xuXG4gIGFzc2lnbih0aGlzLCBvcHRpb25zKTtcblxuICB0aGlzLmVsZW1lbnRzQnlJZCA9IHt9O1xuICB0aGlzLnJlZmVyZW5jZXMgPSBbXTtcbiAgdGhpcy53YXJuaW5ncyA9IFtdO1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gdW5yZXNvbHZlZCByZWZlcmVuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSByZWZlcmVuY2VcbiAgICovXG4gIHRoaXMuYWRkUmVmZXJlbmNlID0gZnVuY3Rpb24ocmVmZXJlbmNlKSB7XG4gICAgdGhpcy5yZWZlcmVuY2VzLnB1c2gocmVmZXJlbmNlKTtcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGEgcHJvY2Vzc2VkIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZWxlbWVudFxuICAgKi9cbiAgdGhpcy5hZGRFbGVtZW50ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICB0aHJvdyBlcnJvcignZXhwZWN0ZWQgZWxlbWVudCcpO1xuICAgIH1cblxuICAgIHZhciBlbGVtZW50c0J5SWQgPSB0aGlzLmVsZW1lbnRzQnlJZDtcblxuICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0TW9kZGxlRGVzY3JpcHRvcihlbGVtZW50KTtcblxuICAgIHZhciBpZFByb3BlcnR5ID0gZGVzY3JpcHRvci5pZFByb3BlcnR5LFxuICAgICAgICBpZDtcblxuICAgIGlmIChpZFByb3BlcnR5KSB7XG4gICAgICBpZCA9IGVsZW1lbnQuZ2V0KGlkUHJvcGVydHkubmFtZSk7XG5cbiAgICAgIGlmIChpZCkge1xuICAgICAgICAvLyBmb3IgUU5hbWUgdmFsaWRhdGlvbiBhcyBwZXIgaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbC8jTlQtTmFtZUNoYXJcbiAgICAgICAgaWYgKCEvXihbYS16XVtcXHctLl0qOik/W2Etel9dW1xcdy0uXSokL2kudGVzdChpZCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lsbGVnYWwgSUQgPCcgKyBpZCArICc+Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWxlbWVudHNCeUlkW2lkXSkge1xuICAgICAgICAgIHRocm93IGVycm9yKCdkdXBsaWNhdGUgSUQgPCcgKyBpZCArICc+Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBlbGVtZW50c0J5SWRbaWRdID0gZWxlbWVudDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBpbXBvcnQgd2FybmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHdhcm5pbmdcbiAgICogQHBhcmFtIHtTdHJpbmd9IHdhcm5pbmcubWVzc2FnZVxuICAgKiBAcGFyYW0ge0Vycm9yfSBbd2FybmluZy5lcnJvcl1cbiAgICovXG4gIHRoaXMuYWRkV2FybmluZyA9IGZ1bmN0aW9uKHdhcm5pbmcpIHtcbiAgICB0aGlzLndhcm5pbmdzLnB1c2god2FybmluZyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIEJhc2VIYW5kbGVyKCkge31cblxuQmFzZUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZUVuZCA9IGZ1bmN0aW9uKCkge307XG5CYXNlSGFuZGxlci5wcm90b3R5cGUuaGFuZGxlVGV4dCA9IGZ1bmN0aW9uKCkge307XG5CYXNlSGFuZGxlci5wcm90b3R5cGUuaGFuZGxlTm9kZSA9IGZ1bmN0aW9uKCkge307XG5cblxuLyoqXG4gKiBBIHNpbXBsZSBwYXNzIHRocm91Z2ggaGFuZGxlciB0aGF0IGRvZXMgbm90aGluZyBleGNlcHQgZm9yXG4gKiBpZ25vcmluZyBhbGwgaW5wdXQgaXQgcmVjZWl2ZXMuXG4gKlxuICogVGhpcyBpcyB1c2VkIHRvIGlnbm9yZSB1bmtub3duIGVsZW1lbnRzIGFuZFxuICogYXR0cmlidXRlcy5cbiAqL1xuZnVuY3Rpb24gTm9vcEhhbmRsZXIoKSB7IH1cblxuTm9vcEhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlSGFuZGxlci5wcm90b3R5cGUpO1xuXG5Ob29wSGFuZGxlci5wcm90b3R5cGUuaGFuZGxlTm9kZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIEJvZHlIYW5kbGVyKCkge31cblxuQm9keUhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlSGFuZGxlci5wcm90b3R5cGUpO1xuXG5Cb2R5SGFuZGxlci5wcm90b3R5cGUuaGFuZGxlVGV4dCA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgdGhpcy5ib2R5ID0gKHRoaXMuYm9keSB8fCAnJykgKyB0ZXh0O1xufTtcblxuZnVuY3Rpb24gUmVmZXJlbmNlSGFuZGxlcihwcm9wZXJ0eSwgY29udGV4dCkge1xuICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG59XG5cblJlZmVyZW5jZUhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCb2R5SGFuZGxlci5wcm90b3R5cGUpO1xuXG5SZWZlcmVuY2VIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVOb2RlID0gZnVuY3Rpb24obm9kZSkge1xuXG4gIGlmICh0aGlzLmVsZW1lbnQpIHtcbiAgICB0aHJvdyBlcnJvcignZXhwZWN0ZWQgbm8gc3ViIG5vZGVzJyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5lbGVtZW50ID0gdGhpcy5jcmVhdGVSZWZlcmVuY2Uobm9kZSk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cblJlZmVyZW5jZUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZUVuZCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmVsZW1lbnQuaWQgPSB0aGlzLmJvZHk7XG59O1xuXG5SZWZlcmVuY2VIYW5kbGVyLnByb3RvdHlwZS5jcmVhdGVSZWZlcmVuY2UgPSBmdW5jdGlvbihub2RlKSB7XG4gIHJldHVybiB7XG4gICAgcHJvcGVydHk6IHRoaXMucHJvcGVydHkubnMubmFtZSxcbiAgICBpZDogJydcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIFZhbHVlSGFuZGxlcihwcm9wZXJ0eURlc2MsIGVsZW1lbnQpIHtcbiAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgdGhpcy5wcm9wZXJ0eURlc2MgPSBwcm9wZXJ0eURlc2M7XG59XG5cblZhbHVlSGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJvZHlIYW5kbGVyLnByb3RvdHlwZSk7XG5cblZhbHVlSGFuZGxlci5wcm90b3R5cGUuaGFuZGxlRW5kID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIHZhbHVlID0gdGhpcy5ib2R5IHx8ICcnLFxuICAgICAgZWxlbWVudCA9IHRoaXMuZWxlbWVudCxcbiAgICAgIHByb3BlcnR5RGVzYyA9IHRoaXMucHJvcGVydHlEZXNjO1xuXG4gIHZhbHVlID0gY29lcmNlVHlwZShwcm9wZXJ0eURlc2MudHlwZSwgdmFsdWUpO1xuXG4gIGlmIChwcm9wZXJ0eURlc2MuaXNNYW55KSB7XG4gICAgZWxlbWVudC5nZXQocHJvcGVydHlEZXNjLm5hbWUpLnB1c2godmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQuc2V0KHByb3BlcnR5RGVzYy5uYW1lLCB2YWx1ZSk7XG4gIH1cbn07XG5cblxuZnVuY3Rpb24gQmFzZUVsZW1lbnRIYW5kbGVyKCkge31cblxuQmFzZUVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQm9keUhhbmRsZXIucHJvdG90eXBlKTtcblxuQmFzZUVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVOb2RlID0gZnVuY3Rpb24obm9kZSkge1xuICB2YXIgcGFyc2VyID0gdGhpcyxcbiAgICAgIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG5cbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgZWxlbWVudCA9IHRoaXMuZWxlbWVudCA9IHRoaXMuY3JlYXRlRWxlbWVudChub2RlKTtcblxuICAgIHRoaXMuY29udGV4dC5hZGRFbGVtZW50KGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIHBhcnNlciA9IHRoaXMuaGFuZGxlQ2hpbGQobm9kZSk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VyO1xufTtcblxuLyoqXG4gKiBAY2xhc3MgUmVhZGVyLkVsZW1lbnRIYW5kbGVyXG4gKlxuICovXG5mdW5jdGlvbiBFbGVtZW50SGFuZGxlcihtb2RlbCwgdHlwZU5hbWUsIGNvbnRleHQpIHtcbiAgdGhpcy5tb2RlbCA9IG1vZGVsO1xuICB0aGlzLnR5cGUgPSBtb2RlbC5nZXRUeXBlKHR5cGVOYW1lKTtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbn1cblxuRWxlbWVudEhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlRWxlbWVudEhhbmRsZXIucHJvdG90eXBlKTtcblxuRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmFkZFJlZmVyZW5jZSA9IGZ1bmN0aW9uKHJlZmVyZW5jZSkge1xuICB0aGlzLmNvbnRleHQuYWRkUmVmZXJlbmNlKHJlZmVyZW5jZSk7XG59O1xuXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUuaGFuZGxlVGV4dCA9IGZ1bmN0aW9uKHRleHQpIHtcblxuICB2YXIgZWxlbWVudCA9IHRoaXMuZWxlbWVudCxcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRNb2RkbGVEZXNjcmlwdG9yKGVsZW1lbnQpLFxuICAgICAgYm9keVByb3BlcnR5ID0gZGVzY3JpcHRvci5ib2R5UHJvcGVydHk7XG5cbiAgaWYgKCFib2R5UHJvcGVydHkpIHtcbiAgICB0aHJvdyBlcnJvcigndW5leHBlY3RlZCBib2R5IHRleHQgPCcgKyB0ZXh0ICsgJz4nKTtcbiAgfVxuXG4gIEJvZHlIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVUZXh0LmNhbGwodGhpcywgdGV4dCk7XG59O1xuXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUuaGFuZGxlRW5kID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIHZhbHVlID0gdGhpcy5ib2R5LFxuICAgICAgZWxlbWVudCA9IHRoaXMuZWxlbWVudCxcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRNb2RkbGVEZXNjcmlwdG9yKGVsZW1lbnQpLFxuICAgICAgYm9keVByb3BlcnR5ID0gZGVzY3JpcHRvci5ib2R5UHJvcGVydHk7XG5cbiAgaWYgKGJvZHlQcm9wZXJ0eSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsdWUgPSBjb2VyY2VUeXBlKGJvZHlQcm9wZXJ0eS50eXBlLCB2YWx1ZSk7XG4gICAgZWxlbWVudC5zZXQoYm9keVByb3BlcnR5Lm5hbWUsIHZhbHVlKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIGZyb20gdGhlIGdpdmVuIG5vZGUuXG4gKlxuICogQHBhcmFtICB7RWxlbWVudH0gbm9kZSB0aGUgeG1sIG5vZGVcbiAqL1xuRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHZhciBhdHRyaWJ1dGVzID0gbm9kZS5hdHRyaWJ1dGVzLFxuICAgICAgVHlwZSA9IHRoaXMudHlwZSxcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRNb2RkbGVEZXNjcmlwdG9yKFR5cGUpLFxuICAgICAgY29udGV4dCA9IHRoaXMuY29udGV4dCxcbiAgICAgIGluc3RhbmNlID0gbmV3IFR5cGUoe30pLFxuICAgICAgbW9kZWwgPSB0aGlzLm1vZGVsLFxuICAgICAgcHJvcE5hbWVOcztcblxuICBmb3JFYWNoKGF0dHJpYnV0ZXMsIGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG5cbiAgICB2YXIgcHJvcCA9IGRlc2NyaXB0b3IucHJvcGVydGllc0J5TmFtZVtuYW1lXSxcbiAgICAgICAgdmFsdWVzO1xuXG4gICAgaWYgKHByb3AgJiYgcHJvcC5pc1JlZmVyZW5jZSkge1xuXG4gICAgICBpZiAoIXByb3AuaXNNYW55KSB7XG4gICAgICAgIGNvbnRleHQuYWRkUmVmZXJlbmNlKHtcbiAgICAgICAgICBlbGVtZW50OiBpbnN0YW5jZSxcbiAgICAgICAgICBwcm9wZXJ0eTogcHJvcC5ucy5uYW1lLFxuICAgICAgICAgIGlkOiB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElEUkVGUzogcGFyc2UgcmVmZXJlbmNlcyBhcyB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBsaXN0XG4gICAgICAgIHZhbHVlcyA9IHZhbHVlLnNwbGl0KCcgJyk7XG5cbiAgICAgICAgZm9yRWFjaCh2YWx1ZXMsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICBjb250ZXh0LmFkZFJlZmVyZW5jZSh7XG4gICAgICAgICAgICBlbGVtZW50OiBpbnN0YW5jZSxcbiAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wLm5zLm5hbWUsXG4gICAgICAgICAgICBpZDogdlxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvcCkge1xuICAgICAgICB2YWx1ZSA9IGNvZXJjZVR5cGUocHJvcC50eXBlLCB2YWx1ZSk7XG4gICAgICB9IGVsc2VcbiAgICAgIGlmIChuYW1lICE9PSAneG1sbnMnKSB7XG4gICAgICAgIHByb3BOYW1lTnMgPSBwYXJzZU5hbWVOUyhuYW1lLCBkZXNjcmlwdG9yLm5zLnByZWZpeCk7XG5cbiAgICAgICAgLy8gY2hlY2sgd2hldGhlciBhdHRyaWJ1dGUgaXMgZGVmaW5lZCBpbiBhIHdlbGwta25vd24gbmFtZXNwYWNlXG4gICAgICAgIC8vIGlmIHRoYXQgaXMgdGhlIGNhc2Ugd2UgZW1pdCBhIHdhcm5pbmcgdG8gaW5kaWNhdGUgcG90ZW50aWFsIG1pc3VzZVxuICAgICAgICBpZiAobW9kZWwuZ2V0UGFja2FnZShwcm9wTmFtZU5zLnByZWZpeCkpIHtcblxuICAgICAgICAgIGNvbnRleHQuYWRkV2FybmluZyh7XG4gICAgICAgICAgICBtZXNzYWdlOiAndW5rbm93biBhdHRyaWJ1dGUgPCcgKyBuYW1lICsgJz4nLFxuICAgICAgICAgICAgZWxlbWVudDogaW5zdGFuY2UsXG4gICAgICAgICAgICBwcm9wZXJ0eTogbmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlLnNldChuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59O1xuXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUuZ2V0UHJvcGVydHlGb3JOb2RlID0gZnVuY3Rpb24obm9kZSkge1xuXG4gIHZhciBuYW1lID0gbm9kZS5uYW1lO1xuICB2YXIgbmFtZU5zID0gcGFyc2VOYW1lTlMobmFtZSk7XG5cbiAgdmFyIHR5cGUgPSB0aGlzLnR5cGUsXG4gICAgICBtb2RlbCA9IHRoaXMubW9kZWwsXG4gICAgICBkZXNjcmlwdG9yID0gZ2V0TW9kZGxlRGVzY3JpcHRvcih0eXBlKTtcblxuICB2YXIgcHJvcGVydHlOYW1lID0gbmFtZU5zLm5hbWUsXG4gICAgICBwcm9wZXJ0eSA9IGRlc2NyaXB0b3IucHJvcGVydGllc0J5TmFtZVtwcm9wZXJ0eU5hbWVdLFxuICAgICAgZWxlbWVudFR5cGVOYW1lLFxuICAgICAgZWxlbWVudFR5cGU7XG5cbiAgLy8gc2VhcmNoIGZvciBwcm9wZXJ0aWVzIGJ5IG5hbWUgZmlyc3RcblxuICBpZiAocHJvcGVydHkgJiYgIXByb3BlcnR5LmlzQXR0cikge1xuXG4gICAgaWYgKHNlcmlhbGl6ZUFzVHlwZShwcm9wZXJ0eSkpIHtcbiAgICAgIGVsZW1lbnRUeXBlTmFtZSA9IG5vZGUuYXR0cmlidXRlc1tYU0lfVFlQRV07XG5cbiAgICAgIC8vIHhzaSB0eXBlIGlzIG9wdGlvbmFsLCBpZiBpdCBkb2VzIG5vdCBleGlzdHMgdGhlXG4gICAgICAvLyBkZWZhdWx0IHR5cGUgaXMgYXNzdW1lZFxuICAgICAgaWYgKGVsZW1lbnRUeXBlTmFtZSkge1xuXG4gICAgICAgIC8vIHRha2UgcG9zc2libGUgdHlwZSBwcmVmaXhlcyBmcm9tIFhNTFxuICAgICAgICAvLyBpbnRvIGFjY291bnQsIGkuZS46IHhzaTp0eXBlPVwidHtBY3R1YWxUeXBlfVwiXG4gICAgICAgIGVsZW1lbnRUeXBlTmFtZSA9IG5vcm1hbGl6ZVhzaVR5cGVOYW1lKGVsZW1lbnRUeXBlTmFtZSwgbW9kZWwpO1xuXG4gICAgICAgIGVsZW1lbnRUeXBlID0gbW9kZWwuZ2V0VHlwZShlbGVtZW50VHlwZU5hbWUpO1xuXG4gICAgICAgIHJldHVybiBhc3NpZ24oe30sIHByb3BlcnR5LCB7XG4gICAgICAgICAgZWZmZWN0aXZlVHlwZTogZ2V0TW9kZGxlRGVzY3JpcHRvcihlbGVtZW50VHlwZSkubmFtZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZWFyY2ggZm9yIHByb3BlcnRpZXMgYnkgbmFtZSBmaXJzdFxuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfVxuXG4gIHZhciBwa2cgPSBtb2RlbC5nZXRQYWNrYWdlKG5hbWVOcy5wcmVmaXgpO1xuXG4gIGlmIChwa2cpIHtcbiAgICBlbGVtZW50VHlwZU5hbWUgPSBhbGlhc1RvTmFtZShuYW1lTnMsIHBrZyk7XG4gICAgZWxlbWVudFR5cGUgPSBtb2RlbC5nZXRUeXBlKGVsZW1lbnRUeXBlTmFtZSk7XG5cbiAgICAvLyBzZWFyY2ggZm9yIGNvbGxlY3Rpb24gbWVtYmVycyBsYXRlclxuICAgIHByb3BlcnR5ID0gZmluZChkZXNjcmlwdG9yLnByb3BlcnRpZXMsIGZ1bmN0aW9uKHApIHtcbiAgICAgIHJldHVybiAhcC5pc1ZpcnR1YWwgJiYgIXAuaXNSZWZlcmVuY2UgJiYgIXAuaXNBdHRyaWJ1dGUgJiYgZWxlbWVudFR5cGUuaGFzVHlwZShwLnR5cGUpO1xuICAgIH0pO1xuXG4gICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gYXNzaWduKHt9LCBwcm9wZXJ0eSwge1xuICAgICAgICBlZmZlY3RpdmVUeXBlOiBnZXRNb2RkbGVEZXNjcmlwdG9yKGVsZW1lbnRUeXBlKS5uYW1lXG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gcGFyc2UgdW5rbm93biBlbGVtZW50IChtYXliZSBleHRlbnNpb24pXG4gICAgcHJvcGVydHkgPSBmaW5kKGRlc2NyaXB0b3IucHJvcGVydGllcywgZnVuY3Rpb24ocCkge1xuICAgICAgcmV0dXJuICFwLmlzUmVmZXJlbmNlICYmICFwLmlzQXR0cmlidXRlICYmIHAudHlwZSA9PT0gJ0VsZW1lbnQnO1xuICAgIH0pO1xuXG4gICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gcHJvcGVydHk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgZXJyb3IoJ3VucmVjb2duaXplZCBlbGVtZW50IDwnICsgbmFtZU5zLm5hbWUgKyAnPicpO1xufTtcblxuRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnRWxlbWVudERlc2NyaXB0b3JbJyArIGdldE1vZGRsZURlc2NyaXB0b3IodGhpcy50eXBlKS5uYW1lICsgJ10nO1xufTtcblxuRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLnZhbHVlSGFuZGxlciA9IGZ1bmN0aW9uKHByb3BlcnR5RGVzYywgZWxlbWVudCkge1xuICByZXR1cm4gbmV3IFZhbHVlSGFuZGxlcihwcm9wZXJ0eURlc2MsIGVsZW1lbnQpO1xufTtcblxuRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLnJlZmVyZW5jZUhhbmRsZXIgPSBmdW5jdGlvbihwcm9wZXJ0eURlc2MpIHtcbiAgcmV0dXJuIG5ldyBSZWZlcmVuY2VIYW5kbGVyKHByb3BlcnR5RGVzYywgdGhpcy5jb250ZXh0KTtcbn07XG5cbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVyID0gZnVuY3Rpb24odHlwZSkge1xuICBpZiAodHlwZSA9PT0gJ0VsZW1lbnQnKSB7XG4gICAgcmV0dXJuIG5ldyBHZW5lcmljRWxlbWVudEhhbmRsZXIodGhpcy5tb2RlbCwgdHlwZSwgdGhpcy5jb250ZXh0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEVsZW1lbnRIYW5kbGVyKHRoaXMubW9kZWwsIHR5cGUsIHRoaXMuY29udGV4dCk7XG4gIH1cbn07XG5cbi8qKlxuICogSGFuZGxlIHRoZSBjaGlsZCBlbGVtZW50IHBhcnNpbmdcbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50fSBub2RlIHRoZSB4bWwgbm9kZVxuICovXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUuaGFuZGxlQ2hpbGQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHZhciBwcm9wZXJ0eURlc2MsIHR5cGUsIGVsZW1lbnQsIGNoaWxkSGFuZGxlcjtcblxuICBwcm9wZXJ0eURlc2MgPSB0aGlzLmdldFByb3BlcnR5Rm9yTm9kZShub2RlKTtcbiAgZWxlbWVudCA9IHRoaXMuZWxlbWVudDtcblxuICB0eXBlID0gcHJvcGVydHlEZXNjLmVmZmVjdGl2ZVR5cGUgfHwgcHJvcGVydHlEZXNjLnR5cGU7XG5cbiAgaWYgKGlzU2ltcGxlVHlwZSh0eXBlKSkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlSGFuZGxlcihwcm9wZXJ0eURlc2MsIGVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKHByb3BlcnR5RGVzYy5pc1JlZmVyZW5jZSkge1xuICAgIGNoaWxkSGFuZGxlciA9IHRoaXMucmVmZXJlbmNlSGFuZGxlcihwcm9wZXJ0eURlc2MpLmhhbmRsZU5vZGUobm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgY2hpbGRIYW5kbGVyID0gdGhpcy5oYW5kbGVyKHR5cGUpLmhhbmRsZU5vZGUobm9kZSk7XG4gIH1cblxuICB2YXIgbmV3RWxlbWVudCA9IGNoaWxkSGFuZGxlci5lbGVtZW50O1xuXG4gIC8vIGNoaWxkIGhhbmRsZXMgbWF5IGRlY2lkZSB0byBza2lwIGVsZW1lbnRzXG4gIC8vIGJ5IG5vdCByZXR1cm5pbmcgYW55dGhpbmdcbiAgaWYgKG5ld0VsZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuXG4gICAgaWYgKHByb3BlcnR5RGVzYy5pc01hbnkpIHtcbiAgICAgIGVsZW1lbnQuZ2V0KHByb3BlcnR5RGVzYy5uYW1lKS5wdXNoKG5ld0VsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50LnNldChwcm9wZXJ0eURlc2MubmFtZSwgbmV3RWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BlcnR5RGVzYy5pc1JlZmVyZW5jZSkge1xuICAgICAgYXNzaWduKG5ld0VsZW1lbnQsIHtcbiAgICAgICAgZWxlbWVudDogZWxlbWVudFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY29udGV4dC5hZGRSZWZlcmVuY2UobmV3RWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVzdGFibGlzaCBjaGlsZCAtPiBwYXJlbnQgcmVsYXRpb25zaGlwXG4gICAgICBuZXdFbGVtZW50LiRwYXJlbnQgPSBlbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGlsZEhhbmRsZXI7XG59O1xuXG4vKipcbiAqIEFuIGVsZW1lbnQgaGFuZGxlciB0aGF0IHBlcmZvcm1zIHNwZWNpYWwgdmFsaWRhdGlvblxuICogdG8gZW5zdXJlIHRoZSBub2RlIGl0IGdldHMgaW5pdGlhbGl6ZWQgd2l0aCBtYXRjaGVzXG4gKiB0aGUgaGFuZGxlcnMgdHlwZSAobmFtZXNwYWNlIHdpc2UpLlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlfSBtb2RlbFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVOYW1lXG4gKiBAcGFyYW0ge0NvbnRleHR9IGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gUm9vdEVsZW1lbnRIYW5kbGVyKG1vZGVsLCB0eXBlTmFtZSwgY29udGV4dCkge1xuICBFbGVtZW50SGFuZGxlci5jYWxsKHRoaXMsIG1vZGVsLCB0eXBlTmFtZSwgY29udGV4dCk7XG59XG5cblJvb3RFbGVtZW50SGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZSk7XG5cblJvb3RFbGVtZW50SGFuZGxlci5wcm90b3R5cGUuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcblxuICB2YXIgbmFtZSA9IG5vZGUubmFtZSxcbiAgICAgIG5hbWVOcyA9IHBhcnNlTmFtZU5TKG5hbWUpLFxuICAgICAgbW9kZWwgPSB0aGlzLm1vZGVsLFxuICAgICAgdHlwZSA9IHRoaXMudHlwZSxcbiAgICAgIHBrZyA9IG1vZGVsLmdldFBhY2thZ2UobmFtZU5zLnByZWZpeCksXG4gICAgICB0eXBlTmFtZSA9IHBrZyAmJiBhbGlhc1RvTmFtZShuYW1lTnMsIHBrZykgfHwgbmFtZTtcblxuICAvLyB2ZXJpZnkgdGhlIGNvcnJlY3QgbmFtZXNwYWNlIGlmIHdlIHBhcnNlXG4gIC8vIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBoYW5kbGVyIHRyZWVcbiAgLy9cbiAgLy8gdGhpcyBlbnN1cmVzIHdlIGRvbid0IG1pc3Rha2VubHkgaW1wb3J0IHdyb25nIG5hbWVzcGFjZSBlbGVtZW50c1xuICBpZiAoIXR5cGUuaGFzVHlwZSh0eXBlTmFtZSkpIHtcbiAgICB0aHJvdyBlcnJvcigndW5leHBlY3RlZCBlbGVtZW50IDwnICsgbm9kZS5vcmlnaW5hbE5hbWUgKyAnPicpO1xuICB9XG5cbiAgcmV0dXJuIEVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50LmNhbGwodGhpcywgbm9kZSk7XG59O1xuXG5cbmZ1bmN0aW9uIEdlbmVyaWNFbGVtZW50SGFuZGxlcihtb2RlbCwgdHlwZU5hbWUsIGNvbnRleHQpIHtcbiAgdGhpcy5tb2RlbCA9IG1vZGVsO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xufVxuXG5HZW5lcmljRWxlbWVudEhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlRWxlbWVudEhhbmRsZXIucHJvdG90eXBlKTtcblxuR2VuZXJpY0VsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuXG4gIHZhciBuYW1lID0gbm9kZS5uYW1lLFxuICAgICAgbnMgPSBwYXJzZU5hbWVOUyhuYW1lKSxcbiAgICAgIHByZWZpeCA9IG5zLnByZWZpeCxcbiAgICAgIHVyaSA9IG5vZGUubnNbcHJlZml4ICsgJyR1cmknXSxcbiAgICAgIGF0dHJpYnV0ZXMgPSBub2RlLmF0dHJpYnV0ZXM7XG5cbiAgcmV0dXJuIHRoaXMubW9kZWwuY3JlYXRlQW55KG5hbWUsIHVyaSwgYXR0cmlidXRlcyk7XG59O1xuXG5HZW5lcmljRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmhhbmRsZUNoaWxkID0gZnVuY3Rpb24obm9kZSkge1xuXG4gIHZhciBoYW5kbGVyID0gbmV3IEdlbmVyaWNFbGVtZW50SGFuZGxlcih0aGlzLm1vZGVsLCAnRWxlbWVudCcsIHRoaXMuY29udGV4dCkuaGFuZGxlTm9kZShub2RlKSxcbiAgICAgIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG5cbiAgdmFyIG5ld0VsZW1lbnQgPSBoYW5kbGVyLmVsZW1lbnQsXG4gICAgICBjaGlsZHJlbjtcblxuICBpZiAobmV3RWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2hpbGRyZW4gPSBlbGVtZW50LiRjaGlsZHJlbiA9IGVsZW1lbnQuJGNoaWxkcmVuIHx8IFtdO1xuICAgIGNoaWxkcmVuLnB1c2gobmV3RWxlbWVudCk7XG5cbiAgICAvLyBlc3RhYmxpc2ggY2hpbGQgLT4gcGFyZW50IHJlbGF0aW9uc2hpcFxuICAgIG5ld0VsZW1lbnQuJHBhcmVudCA9IGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gaGFuZGxlcjtcbn07XG5cbkdlbmVyaWNFbGVtZW50SGFuZGxlci5wcm90b3R5cGUuaGFuZGxlRW5kID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLmJvZHkpIHtcbiAgICB0aGlzLmVsZW1lbnQuJGJvZHkgPSB0aGlzLmJvZHk7XG4gIH1cbn07XG5cbi8qKlxuICogQSByZWFkZXIgZm9yIGEgbWV0YS1tb2RlbFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge01vZGVsfSBvcHRpb25zLm1vZGVsIHVzZWQgdG8gcmVhZCB4bWwgZmlsZXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb3B0aW9ucy5sYXggd2hldGhlciB0byBtYWtlIHBhcnNlIGVycm9ycyB3YXJuaW5nc1xuICovXG5mdW5jdGlvbiBSZWFkZXIob3B0aW9ucykge1xuXG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgTW9kZGxlKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIG1vZGVsOiBvcHRpb25zXG4gICAgfTtcbiAgfVxuXG4gIGFzc2lnbih0aGlzLCB7IGxheDogZmFsc2UgfSwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogVGhlIGZyb21YTUwgcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBhcnNlUmVzdWx0XG4gKlxuICogQHByb3BlcnR5IHtNb2RkbGVFbGVtZW50fSByb290RWxlbWVudFxuICogQHByb3BlcnR5IHtBcnJheTxPYmplY3Q+fSByZWZlcmVuY2VzXG4gKiBAcHJvcGVydHkge0FycmF5PEVycm9yPn0gd2FybmluZ3NcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBlbGVtZW50c0J5SWQgLSBhIG1hcHBpbmcgY29udGFpbmluZyBlYWNoIElEIC0+IE1vZGRsZUVsZW1lbnRcbiAqL1xuXG4vKipcbiAqIFRoZSBmcm9tWE1MIHJlc3VsdC5cbiAqXG4gKiBAdHlwZWRlZiB7RXJyb3J9IFBhcnNlRXJyb3JcbiAqXG4gKiBAcHJvcGVydHkge0FycmF5PEVycm9yPn0gd2FybmluZ3NcbiAqL1xuXG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBYTUwgaW50byBhIG1vZGRsZSBkb2N1bWVudCB0cmVlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB4bWxcbiAqIEBwYXJhbSB7RWxlbWVudEhhbmRsZXJ8T2JqZWN0fSBvcHRpb25zIG9yIHJvb3RIYW5kbGVyXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8UGFyc2VSZXN1bHQsIFBhcnNlRXJyb3I+fVxuICovXG5SZWFkZXIucHJvdG90eXBlLmZyb21YTUwgPSBmdW5jdGlvbih4bWwsIG9wdGlvbnMsIGRvbmUpIHtcblxuICB2YXIgcm9vdEhhbmRsZXIgPSBvcHRpb25zLnJvb3RIYW5kbGVyO1xuXG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgRWxlbWVudEhhbmRsZXIpIHtcbiAgICAvLyByb290IGhhbmRsZXIgcGFzc2VkIHZpYSAoeG1sLCB7IHJvb3RIYW5kbGVyOiBFbGVtZW50SGFuZGxlciB9LCAuLi4pXG4gICAgcm9vdEhhbmRsZXIgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyByb290SGFuZGxlciBwYXNzZWQgdmlhICh4bWwsICdzb21lU3RyaW5nJywgLi4uKVxuICAgICAgcm9vdEhhbmRsZXIgPSB0aGlzLmhhbmRsZXIob3B0aW9ucyk7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygcm9vdEhhbmRsZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyByb290SGFuZGxlciBwYXNzZWQgdmlhICh4bWwsIHsgcm9vdEhhbmRsZXI6ICdzb21lU3RyaW5nJyB9LCAuLi4pXG4gICAgICByb290SGFuZGxlciA9IHRoaXMuaGFuZGxlcihyb290SGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgdmFyIG1vZGVsID0gdGhpcy5tb2RlbCxcbiAgICAgIGxheCA9IHRoaXMubGF4O1xuXG4gIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQoYXNzaWduKHt9LCBvcHRpb25zLCB7IHJvb3RIYW5kbGVyOiByb290SGFuZGxlciB9KSksXG4gICAgICBwYXJzZXIgPSBuZXcgUGFyc2VyKHsgcHJveHk6IHRydWUgfSksXG4gICAgICBzdGFjayA9IGNyZWF0ZVN0YWNrKCk7XG5cbiAgcm9vdEhhbmRsZXIuY29udGV4dCA9IGNvbnRleHQ7XG5cbiAgLy8gcHVzaCByb290IGhhbmRsZXJcbiAgc3RhY2sucHVzaChyb290SGFuZGxlcik7XG5cblxuICAvKipcbiAgICogSGFuZGxlIGVycm9yLlxuICAgKlxuICAgKiBAcGFyYW0gIHtFcnJvcn0gZXJyXG4gICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBnZXRDb250ZXh0XG4gICAqIEBwYXJhbSAge2Jvb2xlYW59IGxheFxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGhhbmRsZWRcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZUVycm9yKGVyciwgZ2V0Q29udGV4dCwgbGF4KSB7XG5cbiAgICB2YXIgY3R4ID0gZ2V0Q29udGV4dCgpO1xuXG4gICAgdmFyIGxpbmUgPSBjdHgubGluZSxcbiAgICAgICAgY29sdW1uID0gY3R4LmNvbHVtbixcbiAgICAgICAgZGF0YSA9IGN0eC5kYXRhO1xuXG4gICAgLy8gd2UgcmVjZWl2ZSB0aGUgZnVsbCBjb250ZXh0IGRhdGEgaGVyZSxcbiAgICAvLyBmb3IgZWxlbWVudHMgdHJpbSBkb3duIHRoZSBpbmZvcm1hdGlvblxuICAgIC8vIHRvIHRoZSB0YWcgbmFtZSwgb25seVxuICAgIGlmIChkYXRhLmNoYXJBdCgwKSA9PT0gJzwnICYmIGRhdGEuaW5kZXhPZignICcpICE9PSAtMSkge1xuICAgICAgZGF0YSA9IGRhdGEuc2xpY2UoMCwgZGF0YS5pbmRleE9mKCcgJykpICsgJz4nO1xuICAgIH1cblxuICAgIHZhciBtZXNzYWdlID1cbiAgICAgICd1bnBhcnNhYmxlIGNvbnRlbnQgJyArIChkYXRhID8gZGF0YSArICcgJyA6ICcnKSArICdkZXRlY3RlZFxcblxcdCcgK1xuICAgICAgICAnbGluZTogJyArIGxpbmUgKyAnXFxuXFx0JyArXG4gICAgICAgICdjb2x1bW46ICcgKyBjb2x1bW4gKyAnXFxuXFx0JyArXG4gICAgICAgICduZXN0ZWQgZXJyb3I6ICcgKyBlcnIubWVzc2FnZTtcblxuICAgIGlmIChsYXgpIHtcbiAgICAgIGNvbnRleHQuYWRkV2FybmluZyh7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlV2FybmluZyhlcnIsIGdldENvbnRleHQpIHtcbiAgICAvLyBqdXN0IGxpa2UgaGFuZGxpbmcgZXJyb3JzIGluIDxsYXg9dHJ1ZT4gbW9kZVxuICAgIHJldHVybiBoYW5kbGVFcnJvcihlcnIsIGdldENvbnRleHQsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgY29sbGVjdGVkIHJlZmVyZW5jZXMgb24gcGFyc2UgZW5kLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVzb2x2ZVJlZmVyZW5jZXMoKSB7XG5cbiAgICB2YXIgZWxlbWVudHNCeUlkID0gY29udGV4dC5lbGVtZW50c0J5SWQ7XG4gICAgdmFyIHJlZmVyZW5jZXMgPSBjb250ZXh0LnJlZmVyZW5jZXM7XG5cbiAgICB2YXIgaSwgcjtcblxuICAgIGZvciAoaSA9IDA7IChyID0gcmVmZXJlbmNlc1tpXSk7IGkrKykge1xuICAgICAgdmFyIGVsZW1lbnQgPSByLmVsZW1lbnQ7XG4gICAgICB2YXIgcmVmZXJlbmNlID0gZWxlbWVudHNCeUlkW3IuaWRdO1xuICAgICAgdmFyIHByb3BlcnR5ID0gZ2V0TW9kZGxlRGVzY3JpcHRvcihlbGVtZW50KS5wcm9wZXJ0aWVzQnlOYW1lW3IucHJvcGVydHldO1xuXG4gICAgICBpZiAoIXJlZmVyZW5jZSkge1xuICAgICAgICBjb250ZXh0LmFkZFdhcm5pbmcoe1xuICAgICAgICAgIG1lc3NhZ2U6ICd1bnJlc29sdmVkIHJlZmVyZW5jZSA8JyArIHIuaWQgKyAnPicsXG4gICAgICAgICAgZWxlbWVudDogci5lbGVtZW50LFxuICAgICAgICAgIHByb3BlcnR5OiByLnByb3BlcnR5LFxuICAgICAgICAgIHZhbHVlOiByLmlkXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcGVydHkuaXNNYW55KSB7XG4gICAgICAgIHZhciBjb2xsZWN0aW9uID0gZWxlbWVudC5nZXQocHJvcGVydHkubmFtZSksXG4gICAgICAgICAgICBpZHggPSBjb2xsZWN0aW9uLmluZGV4T2Yocik7XG5cbiAgICAgICAgLy8gd2UgcmVwbGFjZSBhbiBleGlzdGluZyBwbGFjZSBob2xkZXIgKGlkeCAhPSAtMSkgb3JcbiAgICAgICAgLy8gYXBwZW5kIHRvIHRoZSBjb2xsZWN0aW9uIGluc3RlYWRcbiAgICAgICAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICAgICAgICBpZHggPSBjb2xsZWN0aW9uLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcmVmZXJlbmNlKSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHVucmVzb2x2YWJsZSByZWZlcmVuY2VcbiAgICAgICAgICBjb2xsZWN0aW9uLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGFkZCBvciB1cGRhdGUgcmVmZXJlbmNlIGluIGNvbGxlY3Rpb25cbiAgICAgICAgICBjb2xsZWN0aW9uW2lkeF0gPSByZWZlcmVuY2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2V0KHByb3BlcnR5Lm5hbWUsIHJlZmVyZW5jZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKSB7XG4gICAgc3RhY2sucG9wKCkuaGFuZGxlRW5kKCk7XG4gIH1cblxuICB2YXIgUFJFQU1CTEVfU1RBUlRfUEFUVEVSTiA9IC9ePFxcP3htbCAvaTtcblxuICB2YXIgRU5DT0RJTkdfUEFUVEVSTiA9IC8gZW5jb2Rpbmc9XCIoW15cIl0rKVwiL2k7XG5cbiAgdmFyIFVURl84X1BBVFRFUk4gPSAvXnV0Zi04JC9pO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVF1ZXN0aW9uKHF1ZXN0aW9uKSB7XG5cbiAgICBpZiAoIVBSRUFNQkxFX1NUQVJUX1BBVFRFUk4udGVzdChxdWVzdGlvbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2ggPSBFTkNPRElOR19QQVRURVJOLmV4ZWMocXVlc3Rpb24pO1xuICAgIHZhciBlbmNvZGluZyA9IG1hdGNoICYmIG1hdGNoWzFdO1xuXG4gICAgaWYgKCFlbmNvZGluZyB8fCBVVEZfOF9QQVRURVJOLnRlc3QoZW5jb2RpbmcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGV4dC5hZGRXYXJuaW5nKHtcbiAgICAgIG1lc3NhZ2U6XG4gICAgICAgICd1bnN1cHBvcnRlZCBkb2N1bWVudCBlbmNvZGluZyA8JyArIGVuY29kaW5nICsgJz4sICcgK1xuICAgICAgICAnZmFsbGluZyBiYWNrIHRvIFVURi04J1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlT3Blbihub2RlLCBnZXRDb250ZXh0KSB7XG4gICAgdmFyIGhhbmRsZXIgPSBzdGFjay5wZWVrKCk7XG5cbiAgICB0cnkge1xuICAgICAgc3RhY2sucHVzaChoYW5kbGVyLmhhbmRsZU5vZGUobm9kZSkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuXG4gICAgICBpZiAoaGFuZGxlRXJyb3IoZXJyLCBnZXRDb250ZXh0LCBsYXgpKSB7XG4gICAgICAgIHN0YWNrLnB1c2gobmV3IE5vb3BIYW5kbGVyKCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNEYXRhKHRleHQsIGdldENvbnRleHQpIHtcblxuICAgIHRyeSB7XG4gICAgICBzdGFjay5wZWVrKCkuaGFuZGxlVGV4dCh0ZXh0KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGhhbmRsZVdhcm5pbmcoZXJyLCBnZXRDb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVUZXh0KHRleHQsIGdldENvbnRleHQpIHtcbiAgICAvLyBzdHJpcCB3aGl0ZXNwYWNlIG9ubHkgbm9kZXMsIGkuZS4gYmVmb3JlXG4gICAgLy8gPCFDREFUQVsgLi4uIF0+IHNlY3Rpb25zIGFuZCBpbiBiZXR3ZWVuIHRhZ3NcbiAgICB0ZXh0ID0gdGV4dC50cmltKCk7XG5cbiAgICBpZiAoIXRleHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBoYW5kbGVDRGF0YSh0ZXh0LCBnZXRDb250ZXh0KTtcbiAgfVxuXG4gIHZhciB1cmlNYXAgPSBtb2RlbC5nZXRQYWNrYWdlcygpLnJlZHVjZShmdW5jdGlvbih1cmlNYXAsIHApIHtcbiAgICB1cmlNYXBbcC51cmldID0gcC5wcmVmaXg7XG5cbiAgICByZXR1cm4gdXJpTWFwO1xuICB9LCB7XG4gICAgJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSc6ICd4bWwnIC8vIGFkZCBkZWZhdWx0IHhtbCBuc1xuICB9KTtcbiAgcGFyc2VyXG4gICAgLm5zKHVyaU1hcClcbiAgICAub24oJ29wZW5UYWcnLCBmdW5jdGlvbihvYmosIGRlY29kZVN0ciwgc2VsZkNsb3NpbmcsIGdldENvbnRleHQpIHtcblxuICAgICAgLy8gZ3JhY2VmdWxseSBoYW5kbGUgdW5wYXJzYWJsZSBhdHRyaWJ1dGVzIChhdHRycz1mYWxzZSlcbiAgICAgIHZhciBhdHRycyA9IG9iai5hdHRycyB8fCB7fTtcblxuICAgICAgdmFyIGRlY29kZWRBdHRycyA9IE9iamVjdC5rZXlzKGF0dHJzKS5yZWR1Y2UoZnVuY3Rpb24oZCwga2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGRlY29kZVN0cihhdHRyc1trZXldKTtcblxuICAgICAgICBkW2tleV0gPSB2YWx1ZTtcblxuICAgICAgICByZXR1cm4gZDtcbiAgICAgIH0sIHt9KTtcblxuICAgICAgdmFyIG5vZGUgPSB7XG4gICAgICAgIG5hbWU6IG9iai5uYW1lLFxuICAgICAgICBvcmlnaW5hbE5hbWU6IG9iai5vcmlnaW5hbE5hbWUsXG4gICAgICAgIGF0dHJpYnV0ZXM6IGRlY29kZWRBdHRycyxcbiAgICAgICAgbnM6IG9iai5uc1xuICAgICAgfTtcblxuICAgICAgaGFuZGxlT3Blbihub2RlLCBnZXRDb250ZXh0KTtcbiAgICB9KVxuICAgIC5vbigncXVlc3Rpb24nLCBoYW5kbGVRdWVzdGlvbilcbiAgICAub24oJ2Nsb3NlVGFnJywgaGFuZGxlQ2xvc2UpXG4gICAgLm9uKCdjZGF0YScsIGhhbmRsZUNEYXRhKVxuICAgIC5vbigndGV4dCcsIGZ1bmN0aW9uKHRleHQsIGRlY29kZUVudGl0aWVzLCBnZXRDb250ZXh0KSB7XG4gICAgICBoYW5kbGVUZXh0KGRlY29kZUVudGl0aWVzKHRleHQpLCBnZXRDb250ZXh0KTtcbiAgICB9KVxuICAgIC5vbignZXJyb3InLCBoYW5kbGVFcnJvcilcbiAgICAub24oJ3dhcm4nLCBoYW5kbGVXYXJuaW5nKTtcblxuICAvLyBhc3luYyBYTUwgcGFyc2luZyB0byBtYWtlIHN1cmUgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudFxuICAvLyAobm9kZSBvciBicm93ZXIpIGlzIGtlcHQgcmVzcG9uc2l2ZSBhbmQgdGhhdCBjZXJ0YWluIG9wdGltaXphdGlvblxuICAvLyBzdHJhdGVnaWVzIGNhbiBraWNrIGluLlxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cbiAgICB2YXIgZXJyO1xuXG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlci5wYXJzZSh4bWwpO1xuXG4gICAgICByZXNvbHZlUmVmZXJlbmNlcygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVyciA9IGU7XG4gICAgfVxuXG4gICAgdmFyIHJvb3RFbGVtZW50ID0gcm9vdEhhbmRsZXIuZWxlbWVudDtcblxuICAgIGlmICghZXJyICYmICFyb290RWxlbWVudCkge1xuICAgICAgZXJyID0gZXJyb3IoJ2ZhaWxlZCB0byBwYXJzZSBkb2N1bWVudCBhcyA8JyArIHJvb3RIYW5kbGVyLnR5cGUuJGRlc2NyaXB0b3IubmFtZSArICc+Jyk7XG4gICAgfVxuXG4gICAgdmFyIHdhcm5pbmdzID0gY29udGV4dC53YXJuaW5ncztcbiAgICB2YXIgcmVmZXJlbmNlcyA9IGNvbnRleHQucmVmZXJlbmNlcztcbiAgICB2YXIgZWxlbWVudHNCeUlkID0gY29udGV4dC5lbGVtZW50c0J5SWQ7XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICBlcnIud2FybmluZ3MgPSB3YXJuaW5ncztcblxuICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgIHJvb3RFbGVtZW50OiByb290RWxlbWVudCxcbiAgICAgICAgZWxlbWVudHNCeUlkOiBlbGVtZW50c0J5SWQsXG4gICAgICAgIHJlZmVyZW5jZXM6IHJlZmVyZW5jZXMsXG4gICAgICAgIHdhcm5pbmdzOiB3YXJuaW5nc1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn07XG5cblJlYWRlci5wcm90b3R5cGUuaGFuZGxlciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBSb290RWxlbWVudEhhbmRsZXIodGhpcy5tb2RlbCwgbmFtZSk7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gY3JlYXRlU3RhY2soKSB7XG4gIHZhciBzdGFjayA9IFtdO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdGFjaywgJ3BlZWsnLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXNbdGhpcy5sZW5ndGggLSAxXTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBzdGFjaztcbn1cblxudmFyIFhNTF9QUkVBTUJMRSA9ICc8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz5cXG4nO1xuXG52YXIgRVNDQVBFX0FUVFJfQ0hBUlMgPSAvPHw+fCd8XCJ8JnxcXG5cXHJ8XFxuL2c7XG52YXIgRVNDQVBFX0NIQVJTID0gLzx8PnwmL2c7XG5cblxuZnVuY3Rpb24gTmFtZXNwYWNlcyhwYXJlbnQpIHtcblxuICB2YXIgcHJlZml4TWFwID0ge307XG4gIHZhciB1cmlNYXAgPSB7fTtcbiAgdmFyIHVzZWQgPSB7fTtcblxuICB2YXIgd2VsbGtub3duID0gW107XG4gIHZhciBjdXN0b20gPSBbXTtcblxuICAvLyBBUElcblxuICB0aGlzLmJ5VXJpID0gZnVuY3Rpb24odXJpKSB7XG4gICAgcmV0dXJuIHVyaU1hcFt1cmldIHx8IChcbiAgICAgIHBhcmVudCAmJiBwYXJlbnQuYnlVcmkodXJpKVxuICAgICk7XG4gIH07XG5cbiAgdGhpcy5hZGQgPSBmdW5jdGlvbihucywgaXNXZWxsa25vd24pIHtcblxuICAgIHVyaU1hcFtucy51cmldID0gbnM7XG5cbiAgICBpZiAoaXNXZWxsa25vd24pIHtcbiAgICAgIHdlbGxrbm93bi5wdXNoKG5zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VzdG9tLnB1c2gobnMpO1xuICAgIH1cblxuICAgIHRoaXMubWFwUHJlZml4KG5zLnByZWZpeCwgbnMudXJpKTtcbiAgfTtcblxuICB0aGlzLnVyaUJ5UHJlZml4ID0gZnVuY3Rpb24ocHJlZml4KSB7XG4gICAgcmV0dXJuIHByZWZpeE1hcFtwcmVmaXggfHwgJ3htbG5zJ107XG4gIH07XG5cbiAgdGhpcy5tYXBQcmVmaXggPSBmdW5jdGlvbihwcmVmaXgsIHVyaSkge1xuICAgIHByZWZpeE1hcFtwcmVmaXggfHwgJ3htbG5zJ10gPSB1cmk7XG4gIH07XG5cbiAgdGhpcy5nZXROU0tleSA9IGZ1bmN0aW9uKG5zKSB7XG4gICAgcmV0dXJuIChucy5wcmVmaXggIT09IHVuZGVmaW5lZCkgPyAobnMudXJpICsgJ3wnICsgbnMucHJlZml4KSA6IG5zLnVyaTtcbiAgfTtcblxuICB0aGlzLmxvZ1VzZWQgPSBmdW5jdGlvbihucykge1xuXG4gICAgdmFyIHVyaSA9IG5zLnVyaTtcbiAgICB2YXIgbnNLZXkgPSB0aGlzLmdldE5TS2V5KG5zKTtcblxuICAgIHVzZWRbbnNLZXldID0gdGhpcy5ieVVyaSh1cmkpO1xuXG4gICAgLy8gSW5mb3JtIHBhcmVudCByZWN1cnNpdmVseSBhYm91dCB0aGUgdXNhZ2Ugb2YgdGhpcyBOU1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHBhcmVudC5sb2dVc2VkKG5zKTtcbiAgICB9XG4gIH07XG5cbiAgdGhpcy5nZXRVc2VkID0gZnVuY3Rpb24obnMpIHtcblxuICAgIGZ1bmN0aW9uIGlzVXNlZChucykge1xuICAgICAgdmFyIG5zS2V5ID0gc2VsZi5nZXROU0tleShucyk7XG5cbiAgICAgIHJldHVybiB1c2VkW25zS2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgYWxsTnMgPSBbXS5jb25jYXQod2VsbGtub3duLCBjdXN0b20pO1xuXG4gICAgcmV0dXJuIGFsbE5zLmZpbHRlcihpc1VzZWQpO1xuICB9O1xuXG59XG5cbmZ1bmN0aW9uIGxvd2VyKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xufVxuXG5mdW5jdGlvbiBuYW1lVG9BbGlhcyhuYW1lLCBwa2cpIHtcbiAgaWYgKGhhc0xvd2VyQ2FzZUFsaWFzKHBrZykpIHtcbiAgICByZXR1cm4gbG93ZXIobmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yO1xuICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogY3RvcixcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBuc05hbWUobnMpIHtcbiAgaWYgKGlzU3RyaW5nKG5zKSkge1xuICAgIHJldHVybiBucztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKG5zLnByZWZpeCA/IG5zLnByZWZpeCArICc6JyA6ICcnKSArIG5zLmxvY2FsTmFtZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXROc0F0dHJzKG5hbWVzcGFjZXMpIHtcblxuICByZXR1cm4gbWFwKG5hbWVzcGFjZXMuZ2V0VXNlZCgpLCBmdW5jdGlvbihucykge1xuICAgIHZhciBuYW1lID0gJ3htbG5zJyArIChucy5wcmVmaXggPyAnOicgKyBucy5wcmVmaXggOiAnJyk7XG4gICAgcmV0dXJuIHsgbmFtZTogbmFtZSwgdmFsdWU6IG5zLnVyaSB9O1xuICB9KTtcblxufVxuXG5mdW5jdGlvbiBnZXRFbGVtZW50TnMobnMsIGRlc2NyaXB0b3IpIHtcbiAgaWYgKGRlc2NyaXB0b3IuaXNHZW5lcmljKSB7XG4gICAgcmV0dXJuIGFzc2lnbih7IGxvY2FsTmFtZTogZGVzY3JpcHRvci5ucy5sb2NhbE5hbWUgfSwgbnMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhc3NpZ24oeyBsb2NhbE5hbWU6IG5hbWVUb0FsaWFzKGRlc2NyaXB0b3IubnMubG9jYWxOYW1lLCBkZXNjcmlwdG9yLiRwa2cpIH0sIG5zKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eU5zKG5zLCBkZXNjcmlwdG9yKSB7XG4gIHJldHVybiBhc3NpZ24oeyBsb2NhbE5hbWU6IGRlc2NyaXB0b3IubnMubG9jYWxOYW1lIH0sIG5zKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VyaWFsaXphYmxlUHJvcGVydGllcyhlbGVtZW50KSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZWxlbWVudC4kZGVzY3JpcHRvcjtcblxuICByZXR1cm4gZmlsdGVyKGRlc2NyaXB0b3IucHJvcGVydGllcywgZnVuY3Rpb24ocCkge1xuICAgIHZhciBuYW1lID0gcC5uYW1lO1xuXG4gICAgaWYgKHAuaXNWaXJ0dWFsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gZG8gbm90IHNlcmlhbGl6ZSBkZWZhdWx0c1xuICAgIGlmICghZWxlbWVudC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZSA9IGVsZW1lbnRbbmFtZV07XG5cbiAgICAvLyBkbyBub3Qgc2VyaWFsaXplIGRlZmF1bHQgZXF1YWxzXG4gICAgaWYgKHZhbHVlID09PSBwLmRlZmF1bHQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBkbyBub3Qgc2VyaWFsaXplIG51bGwgcHJvcGVydGllc1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBwLmlzTWFueSA/IHZhbHVlLmxlbmd0aCA6IHRydWU7XG4gIH0pO1xufVxuXG52YXIgRVNDQVBFX0FUVFJfTUFQID0ge1xuICAnXFxuJzogJyMxMCcsXG4gICdcXG5cXHInOiAnIzEwJyxcbiAgJ1wiJzogJyMzNCcsXG4gICdcXCcnOiAnIzM5JyxcbiAgJzwnOiAnIzYwJyxcbiAgJz4nOiAnIzYyJyxcbiAgJyYnOiAnIzM4J1xufTtcblxudmFyIEVTQ0FQRV9NQVAgPSB7XG4gICc8JzogJ2x0JyxcbiAgJz4nOiAnZ3QnLFxuICAnJic6ICdhbXAnXG59O1xuXG5mdW5jdGlvbiBlc2NhcGUoc3RyLCBjaGFyUGF0dGVybiwgcmVwbGFjZU1hcCkge1xuXG4gIC8vIGVuc3VyZSB3ZSBhcmUgaGFuZGxpbmcgc3RyaW5ncyBoZXJlXG4gIHN0ciA9IGlzU3RyaW5nKHN0cikgPyBzdHIgOiAnJyArIHN0cjtcblxuICByZXR1cm4gc3RyLnJlcGxhY2UoY2hhclBhdHRlcm4sIGZ1bmN0aW9uKHMpIHtcbiAgICByZXR1cm4gJyYnICsgcmVwbGFjZU1hcFtzXSArICc7JztcbiAgfSk7XG59XG5cbi8qKlxuICogRXNjYXBlIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBub3QgY29udGFpbiBhbnkgYmFkIHZhbHVlcyAobGluZSBicmVha3MsICdcIicsIC4uLilcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIHRoZSBzdHJpbmcgdG8gZXNjYXBlXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSBlc2NhcGVkIHN0cmluZ1xuICovXG5mdW5jdGlvbiBlc2NhcGVBdHRyKHN0cikge1xuICByZXR1cm4gZXNjYXBlKHN0ciwgRVNDQVBFX0FUVFJfQ0hBUlMsIEVTQ0FQRV9BVFRSX01BUCk7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZUJvZHkoc3RyKSB7XG4gIHJldHVybiBlc2NhcGUoc3RyLCBFU0NBUEVfQ0hBUlMsIEVTQ0FQRV9NQVApO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJBdHRyaWJ1dGVzKHByb3BzKSB7XG4gIHJldHVybiBmaWx0ZXIocHJvcHMsIGZ1bmN0aW9uKHApIHsgcmV0dXJuIHAuaXNBdHRyOyB9KTtcbn1cblxuZnVuY3Rpb24gZmlsdGVyQ29udGFpbmVkKHByb3BzKSB7XG4gIHJldHVybiBmaWx0ZXIocHJvcHMsIGZ1bmN0aW9uKHApIHsgcmV0dXJuICFwLmlzQXR0cjsgfSk7XG59XG5cblxuZnVuY3Rpb24gUmVmZXJlbmNlU2VyaWFsaXplcih0YWdOYW1lKSB7XG4gIHRoaXMudGFnTmFtZSA9IHRhZ05hbWU7XG59XG5cblJlZmVyZW5jZVNlcmlhbGl6ZXIucHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICByZXR1cm4gdGhpcztcbn07XG5cblJlZmVyZW5jZVNlcmlhbGl6ZXIucHJvdG90eXBlLnNlcmlhbGl6ZVRvID0gZnVuY3Rpb24od3JpdGVyKSB7XG4gIHdyaXRlclxuICAgIC5hcHBlbmRJbmRlbnQoKVxuICAgIC5hcHBlbmQoJzwnICsgdGhpcy50YWdOYW1lICsgJz4nICsgdGhpcy5lbGVtZW50LmlkICsgJzwvJyArIHRoaXMudGFnTmFtZSArICc+JylcbiAgICAuYXBwZW5kTmV3TGluZSgpO1xufTtcblxuZnVuY3Rpb24gQm9keVNlcmlhbGl6ZXIoKSB7fVxuXG5Cb2R5U2VyaWFsaXplci5wcm90b3R5cGUuc2VyaWFsaXplVmFsdWUgPVxuQm9keVNlcmlhbGl6ZXIucHJvdG90eXBlLnNlcmlhbGl6ZVRvID0gZnVuY3Rpb24od3JpdGVyKSB7XG4gIHdyaXRlci5hcHBlbmQoXG4gICAgdGhpcy5lc2NhcGVcbiAgICAgID8gZXNjYXBlQm9keSh0aGlzLnZhbHVlKVxuICAgICAgOiB0aGlzLnZhbHVlXG4gICk7XG59O1xuXG5Cb2R5U2VyaWFsaXplci5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbihwcm9wLCB2YWx1ZSkge1xuICB0aGlzLnZhbHVlID0gdmFsdWU7XG5cbiAgaWYgKHByb3AudHlwZSA9PT0gJ1N0cmluZycgJiYgdmFsdWUuc2VhcmNoKEVTQ0FQRV9DSEFSUykgIT09IC0xKSB7XG4gICAgdGhpcy5lc2NhcGUgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBWYWx1ZVNlcmlhbGl6ZXIodGFnTmFtZSkge1xuICB0aGlzLnRhZ05hbWUgPSB0YWdOYW1lO1xufVxuXG5pbmhlcml0cyhWYWx1ZVNlcmlhbGl6ZXIsIEJvZHlTZXJpYWxpemVyKTtcblxuVmFsdWVTZXJpYWxpemVyLnByb3RvdHlwZS5zZXJpYWxpemVUbyA9IGZ1bmN0aW9uKHdyaXRlcikge1xuXG4gIHdyaXRlclxuICAgIC5hcHBlbmRJbmRlbnQoKVxuICAgIC5hcHBlbmQoJzwnICsgdGhpcy50YWdOYW1lICsgJz4nKTtcblxuICB0aGlzLnNlcmlhbGl6ZVZhbHVlKHdyaXRlcik7XG5cbiAgd3JpdGVyXG4gICAgLmFwcGVuZCgnPC8nICsgdGhpcy50YWdOYW1lICsgJz4nKVxuICAgIC5hcHBlbmROZXdMaW5lKCk7XG59O1xuXG5mdW5jdGlvbiBFbGVtZW50U2VyaWFsaXplcihwYXJlbnQsIHByb3BlcnR5RGVzY3JpcHRvcikge1xuICB0aGlzLmJvZHkgPSBbXTtcbiAgdGhpcy5hdHRycyA9IFtdO1xuXG4gIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICB0aGlzLnByb3BlcnR5RGVzY3JpcHRvciA9IHByb3BlcnR5RGVzY3JpcHRvcjtcbn1cblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuXG4gIHZhciBlbGVtZW50RGVzY3JpcHRvciA9IGVsZW1lbnQuJGRlc2NyaXB0b3IsXG4gICAgICBwcm9wZXJ0eURlc2NyaXB0b3IgPSB0aGlzLnByb3BlcnR5RGVzY3JpcHRvcjtcblxuICB2YXIgb3RoZXJBdHRycyxcbiAgICAgIHByb3BlcnRpZXM7XG5cbiAgdmFyIGlzR2VuZXJpYyA9IGVsZW1lbnREZXNjcmlwdG9yLmlzR2VuZXJpYztcblxuICBpZiAoaXNHZW5lcmljKSB7XG4gICAgb3RoZXJBdHRycyA9IHRoaXMucGFyc2VHZW5lcmljKGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIG90aGVyQXR0cnMgPSB0aGlzLnBhcnNlTnNBdHRyaWJ1dGVzKGVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKHByb3BlcnR5RGVzY3JpcHRvcikge1xuICAgIHRoaXMubnMgPSB0aGlzLm5zUHJvcGVydHlUYWdOYW1lKHByb3BlcnR5RGVzY3JpcHRvcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5ucyA9IHRoaXMubnNUYWdOYW1lKGVsZW1lbnREZXNjcmlwdG9yKTtcbiAgfVxuXG4gIC8vIGNvbXB1dGUgdGFnIG5hbWVcbiAgdGhpcy50YWdOYW1lID0gdGhpcy5hZGRUYWdOYW1lKHRoaXMubnMpO1xuXG4gIGlmICghaXNHZW5lcmljKSB7XG4gICAgcHJvcGVydGllcyA9IGdldFNlcmlhbGl6YWJsZVByb3BlcnRpZXMoZWxlbWVudCk7XG5cbiAgICB0aGlzLnBhcnNlQXR0cmlidXRlcyhmaWx0ZXJBdHRyaWJ1dGVzKHByb3BlcnRpZXMpKTtcbiAgICB0aGlzLnBhcnNlQ29udGFpbm1lbnRzKGZpbHRlckNvbnRhaW5lZChwcm9wZXJ0aWVzKSk7XG4gIH1cblxuICB0aGlzLnBhcnNlR2VuZXJpY0F0dHJpYnV0ZXMoZWxlbWVudCwgb3RoZXJBdHRycyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUubnNUYWdOYW1lID0gZnVuY3Rpb24oZGVzY3JpcHRvcikge1xuICB2YXIgZWZmZWN0aXZlTnMgPSB0aGlzLmxvZ05hbWVzcGFjZVVzZWQoZGVzY3JpcHRvci5ucyk7XG4gIHJldHVybiBnZXRFbGVtZW50TnMoZWZmZWN0aXZlTnMsIGRlc2NyaXB0b3IpO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLm5zUHJvcGVydHlUYWdOYW1lID0gZnVuY3Rpb24oZGVzY3JpcHRvcikge1xuICB2YXIgZWZmZWN0aXZlTnMgPSB0aGlzLmxvZ05hbWVzcGFjZVVzZWQoZGVzY3JpcHRvci5ucyk7XG4gIHJldHVybiBnZXRQcm9wZXJ0eU5zKGVmZmVjdGl2ZU5zLCBkZXNjcmlwdG9yKTtcbn07XG5cbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5pc0xvY2FsTnMgPSBmdW5jdGlvbihucykge1xuICByZXR1cm4gbnMudXJpID09PSB0aGlzLm5zLnVyaTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBhY3R1YWwgbnMgYXR0cmlidXRlIG5hbWUgZm9yIHRoZSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtlbGVtZW50LmluaGVyaXRlZD1mYWxzZV1cbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IG5zTmFtZVxuICovXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUubnNBdHRyaWJ1dGVOYW1lID0gZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gIHZhciBucztcblxuICBpZiAoaXNTdHJpbmcoZWxlbWVudCkpIHtcbiAgICBucyA9IHBhcnNlTmFtZU5TKGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIG5zID0gZWxlbWVudC5ucztcbiAgfVxuXG4gIC8vIHJldHVybiBqdXN0IGxvY2FsIG5hbWUgZm9yIGluaGVyaXRlZCBhdHRyaWJ1dGVzXG4gIGlmIChlbGVtZW50LmluaGVyaXRlZCkge1xuICAgIHJldHVybiB7IGxvY2FsTmFtZTogbnMubG9jYWxOYW1lIH07XG4gIH1cblxuICAvLyBwYXJzZSArIGxvZyBlZmZlY3RpdmUgbnNcbiAgdmFyIGVmZmVjdGl2ZU5zID0gdGhpcy5sb2dOYW1lc3BhY2VVc2VkKG5zKTtcblxuICAvLyBMT0cgQUNUVUFMIG5hbWVzcGFjZSB1c2VcbiAgdGhpcy5nZXROYW1lc3BhY2VzKCkubG9nVXNlZChlZmZlY3RpdmVOcyk7XG5cbiAgLy8gc3RyaXAgcHJlZml4IGlmIHNhbWUgbmFtZXNwYWNlIGxpa2UgcGFyZW50XG4gIGlmICh0aGlzLmlzTG9jYWxOcyhlZmZlY3RpdmVOcykpIHtcbiAgICByZXR1cm4geyBsb2NhbE5hbWU6IG5zLmxvY2FsTmFtZSB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhc3NpZ24oeyBsb2NhbE5hbWU6IG5zLmxvY2FsTmFtZSB9LCBlZmZlY3RpdmVOcyk7XG4gIH1cbn07XG5cbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5wYXJzZUdlbmVyaWMgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgYm9keSA9IHRoaXMuYm9keTtcblxuICB2YXIgYXR0cmlidXRlcyA9IFtdO1xuXG4gIGZvckVhY2goZWxlbWVudCwgZnVuY3Rpb24odmFsLCBrZXkpIHtcblxuICAgIHZhciBub25Oc0F0dHI7XG5cbiAgICBpZiAoa2V5ID09PSAnJGJvZHknKSB7XG4gICAgICBib2R5LnB1c2gobmV3IEJvZHlTZXJpYWxpemVyKCkuYnVpbGQoeyB0eXBlOiAnU3RyaW5nJyB9LCB2YWwpKTtcbiAgICB9IGVsc2VcbiAgICBpZiAoa2V5ID09PSAnJGNoaWxkcmVuJykge1xuICAgICAgZm9yRWFjaCh2YWwsIGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgIGJvZHkucHVzaChuZXcgRWxlbWVudFNlcmlhbGl6ZXIoc2VsZikuYnVpbGQoY2hpbGQpKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZVxuICAgIGlmIChrZXkuaW5kZXhPZignJCcpICE9PSAwKSB7XG4gICAgICBub25Oc0F0dHIgPSBzZWxmLnBhcnNlTnNBdHRyaWJ1dGUoZWxlbWVudCwga2V5LCB2YWwpO1xuXG4gICAgICBpZiAobm9uTnNBdHRyKSB7XG4gICAgICAgIGF0dHJpYnV0ZXMucHVzaCh7IG5hbWU6IGtleSwgdmFsdWU6IHZhbCB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBhdHRyaWJ1dGVzO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlTnNBdHRyaWJ1dGUgPSBmdW5jdGlvbihlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgbW9kZWwgPSBlbGVtZW50LiRtb2RlbDtcblxuICB2YXIgbmFtZU5zID0gcGFyc2VOYW1lTlMobmFtZSk7XG5cbiAgdmFyIG5zO1xuXG4gIC8vIHBhcnNlIHhtbG5zOmZvbz1cImh0dHA6Ly9mb28uYmFyXCJcbiAgaWYgKG5hbWVOcy5wcmVmaXggPT09ICd4bWxucycpIHtcbiAgICBucyA9IHsgcHJlZml4OiBuYW1lTnMubG9jYWxOYW1lLCB1cmk6IHZhbHVlIH07XG4gIH1cblxuICAvLyBwYXJzZSB4bWxucz1cImh0dHA6Ly9mb28uYmFyXCJcbiAgaWYgKCFuYW1lTnMucHJlZml4ICYmIG5hbWVOcy5sb2NhbE5hbWUgPT09ICd4bWxucycpIHtcbiAgICBucyA9IHsgdXJpOiB2YWx1ZSB9O1xuICB9XG5cbiAgaWYgKCFucykge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlXG4gICAgfTtcbiAgfVxuXG4gIGlmIChtb2RlbCAmJiBtb2RlbC5nZXRQYWNrYWdlKHZhbHVlKSkge1xuICAgIC8vIHJlZ2lzdGVyIHdlbGwga25vd24gbmFtZXNwYWNlXG4gICAgdGhpcy5sb2dOYW1lc3BhY2UobnMsIHRydWUsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIC8vIGxvZyBjdXN0b20gbmFtZXNwYWNlIGRpcmVjdGx5IGFzIHVzZWRcbiAgICB2YXIgYWN0dWFsTnMgPSB0aGlzLmxvZ05hbWVzcGFjZVVzZWQobnMsIHRydWUpO1xuXG4gICAgdGhpcy5nZXROYW1lc3BhY2VzKCkubG9nVXNlZChhY3R1YWxOcyk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBQYXJzZSBuYW1lc3BhY2VzIGFuZCByZXR1cm4gYSBsaXN0IG9mIGxlZnQgb3ZlciBnZW5lcmljIGF0dHJpYnV0ZXNcbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IGVsZW1lbnRcbiAqIEByZXR1cm4ge0FycmF5PE9iamVjdD59XG4gKi9cbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5wYXJzZU5zQXR0cmlidXRlcyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICB2YXIgZ2VuZXJpY0F0dHJzID0gZWxlbWVudC4kYXR0cnM7XG5cbiAgdmFyIGF0dHJpYnV0ZXMgPSBbXTtcblxuICAvLyBwYXJzZSBuYW1lc3BhY2UgYXR0cmlidXRlcyBmaXJzdFxuICAvLyBhbmQgbG9nIHRoZW0uIHB1c2ggbm9uIG5hbWVzcGFjZSBhdHRyaWJ1dGVzIHRvIGEgbGlzdFxuICAvLyBhbmQgcHJvY2VzcyB0aGVtIGxhdGVyXG4gIGZvckVhY2goZ2VuZXJpY0F0dHJzLCBmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuXG4gICAgdmFyIG5vbk5zQXR0ciA9IHNlbGYucGFyc2VOc0F0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSk7XG5cbiAgICBpZiAobm9uTnNBdHRyKSB7XG4gICAgICBhdHRyaWJ1dGVzLnB1c2gobm9uTnNBdHRyKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBhdHRyaWJ1dGVzO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlR2VuZXJpY0F0dHJpYnV0ZXMgPSBmdW5jdGlvbihlbGVtZW50LCBhdHRyaWJ1dGVzKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGZvckVhY2goYXR0cmlidXRlcywgZnVuY3Rpb24oYXR0cikge1xuXG4gICAgLy8gZG8gbm90IHNlcmlhbGl6ZSB4c2k6dHlwZSBhdHRyaWJ1dGVcbiAgICAvLyBpdCBpcyBzZXQgbWFudWFsbHkgYmFzZWQgb24gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiB0eXBlXG4gICAgaWYgKGF0dHIubmFtZSA9PT0gWFNJX1RZUEUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgc2VsZi5hZGRBdHRyaWJ1dGUoc2VsZi5uc0F0dHJpYnV0ZU5hbWUoYXR0ci5uYW1lKSwgYXR0ci52YWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnbWlzc2luZyBuYW1lc3BhY2UgaW5mb3JtYXRpb24gZm9yICcsXG4gICAgICAgIGF0dHIubmFtZSwgJz0nLCBhdHRyLnZhbHVlLCAnb24nLCBlbGVtZW50LFxuICAgICAgICBlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlQ29udGFpbm1lbnRzID0gZnVuY3Rpb24ocHJvcGVydGllcykge1xuXG4gIHZhciBzZWxmID0gdGhpcyxcbiAgICAgIGJvZHkgPSB0aGlzLmJvZHksXG4gICAgICBlbGVtZW50ID0gdGhpcy5lbGVtZW50O1xuXG4gIGZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24ocCkge1xuICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQuZ2V0KHAubmFtZSksXG4gICAgICAgIGlzUmVmZXJlbmNlID0gcC5pc1JlZmVyZW5jZSxcbiAgICAgICAgaXNNYW55ID0gcC5pc01hbnk7XG5cbiAgICBpZiAoIWlzTWFueSkge1xuICAgICAgdmFsdWUgPSBbIHZhbHVlIF07XG4gICAgfVxuXG4gICAgaWYgKHAuaXNCb2R5KSB7XG4gICAgICBib2R5LnB1c2gobmV3IEJvZHlTZXJpYWxpemVyKCkuYnVpbGQocCwgdmFsdWVbMF0pKTtcbiAgICB9IGVsc2VcbiAgICBpZiAoaXNTaW1wbGVUeXBlKHAudHlwZSkpIHtcbiAgICAgIGZvckVhY2godmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgYm9keS5wdXNoKG5ldyBWYWx1ZVNlcmlhbGl6ZXIoc2VsZi5hZGRUYWdOYW1lKHNlbGYubnNQcm9wZXJ0eVRhZ05hbWUocCkpKS5idWlsZChwLCB2KSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2VcbiAgICBpZiAoaXNSZWZlcmVuY2UpIHtcbiAgICAgIGZvckVhY2godmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgYm9keS5wdXNoKG5ldyBSZWZlcmVuY2VTZXJpYWxpemVyKHNlbGYuYWRkVGFnTmFtZShzZWxmLm5zUHJvcGVydHlUYWdOYW1lKHApKSkuYnVpbGQodikpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFsbG93IHNlcmlhbGl6YXRpb24gdmlhIHR5cGVcbiAgICAgIC8vIHJhdGhlciB0aGFuIGVsZW1lbnQgbmFtZVxuICAgICAgdmFyIGFzVHlwZSA9IHNlcmlhbGl6ZUFzVHlwZShwKSxcbiAgICAgICAgICBhc1Byb3BlcnR5ID0gc2VyaWFsaXplQXNQcm9wZXJ0eShwKTtcblxuICAgICAgZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24odikge1xuICAgICAgICB2YXIgc2VyaWFsaXplcjtcblxuICAgICAgICBpZiAoYXNUeXBlKSB7XG4gICAgICAgICAgc2VyaWFsaXplciA9IG5ldyBUeXBlU2VyaWFsaXplcihzZWxmLCBwKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgIGlmIChhc1Byb3BlcnR5KSB7XG4gICAgICAgICAgc2VyaWFsaXplciA9IG5ldyBFbGVtZW50U2VyaWFsaXplcihzZWxmLCBwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXJpYWxpemVyID0gbmV3IEVsZW1lbnRTZXJpYWxpemVyKHNlbGYpO1xuICAgICAgICB9XG5cbiAgICAgICAgYm9keS5wdXNoKHNlcmlhbGl6ZXIuYnVpbGQodikpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn07XG5cbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5nZXROYW1lc3BhY2VzID0gZnVuY3Rpb24obG9jYWwpIHtcblxuICB2YXIgbmFtZXNwYWNlcyA9IHRoaXMubmFtZXNwYWNlcyxcbiAgICAgIHBhcmVudCA9IHRoaXMucGFyZW50LFxuICAgICAgcGFyZW50TmFtZXNwYWNlcztcblxuICBpZiAoIW5hbWVzcGFjZXMpIHtcbiAgICBwYXJlbnROYW1lc3BhY2VzID0gcGFyZW50ICYmIHBhcmVudC5nZXROYW1lc3BhY2VzKCk7XG5cbiAgICBpZiAobG9jYWwgfHwgIXBhcmVudE5hbWVzcGFjZXMpIHtcbiAgICAgIHRoaXMubmFtZXNwYWNlcyA9IG5hbWVzcGFjZXMgPSBuZXcgTmFtZXNwYWNlcyhwYXJlbnROYW1lc3BhY2VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZXNwYWNlcyA9IHBhcmVudE5hbWVzcGFjZXM7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5hbWVzcGFjZXM7XG59O1xuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUubG9nTmFtZXNwYWNlID0gZnVuY3Rpb24obnMsIHdlbGxrbm93biwgbG9jYWwpIHtcbiAgdmFyIG5hbWVzcGFjZXMgPSB0aGlzLmdldE5hbWVzcGFjZXMobG9jYWwpO1xuXG4gIHZhciBuc1VyaSA9IG5zLnVyaSxcbiAgICAgIG5zUHJlZml4ID0gbnMucHJlZml4O1xuXG4gIHZhciBleGlzdGluZyA9IG5hbWVzcGFjZXMuYnlVcmkobnNVcmkpO1xuXG4gIGlmIChuc1ByZWZpeCAhPT0gJ3htbCcgJiYgKCFleGlzdGluZyB8fCBsb2NhbCkpIHtcbiAgICBuYW1lc3BhY2VzLmFkZChucywgd2VsbGtub3duKTtcbiAgfVxuXG4gIG5hbWVzcGFjZXMubWFwUHJlZml4KG5zUHJlZml4LCBuc1VyaSk7XG5cbiAgcmV0dXJuIG5zO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmxvZ05hbWVzcGFjZVVzZWQgPSBmdW5jdGlvbihucywgbG9jYWwpIHtcbiAgdmFyIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQsXG4gICAgICBtb2RlbCA9IGVsZW1lbnQuJG1vZGVsLFxuICAgICAgbmFtZXNwYWNlcyA9IHRoaXMuZ2V0TmFtZXNwYWNlcyhsb2NhbCk7XG5cbiAgLy8gbnMgbWF5IGJlXG4gIC8vXG4gIC8vICAgKiBwcmVmaXggb25seVxuICAvLyAgICogcHJlZml4OnVyaVxuICAvLyAgICogbG9jYWxOYW1lIG9ubHlcblxuICB2YXIgcHJlZml4ID0gbnMucHJlZml4LFxuICAgICAgdXJpID0gbnMudXJpLFxuICAgICAgbmV3UHJlZml4LCBpZHgsXG4gICAgICB3ZWxsa25vd25Vcmk7XG5cbiAgLy8gaGFuZGxlIGFub255bW91cyBuYW1lc3BhY2VzIChlbGVtZW50Rm9ybT11bnF1YWxpZmllZCksIGNmLiAjMjNcbiAgaWYgKCFwcmVmaXggJiYgIXVyaSkge1xuICAgIHJldHVybiB7IGxvY2FsTmFtZTogbnMubG9jYWxOYW1lIH07XG4gIH1cblxuICB3ZWxsa25vd25VcmkgPSBERUZBVUxUX05TX01BUFtwcmVmaXhdIHx8IG1vZGVsICYmIChtb2RlbC5nZXRQYWNrYWdlKHByZWZpeCkgfHwge30pLnVyaTtcblxuICB1cmkgPSB1cmkgfHwgd2VsbGtub3duVXJpIHx8IG5hbWVzcGFjZXMudXJpQnlQcmVmaXgocHJlZml4KTtcblxuICBpZiAoIXVyaSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm8gbmFtZXNwYWNlIHVyaSBnaXZlbiBmb3IgcHJlZml4IDwnICsgcHJlZml4ICsgJz4nKTtcbiAgfVxuXG4gIG5zID0gbmFtZXNwYWNlcy5ieVVyaSh1cmkpO1xuXG4gIGlmICghbnMpIHtcbiAgICBuZXdQcmVmaXggPSBwcmVmaXg7XG4gICAgaWR4ID0gMTtcblxuICAgIC8vIGZpbmQgYSBwcmVmaXggdGhhdCBpcyBub3QgbWFwcGVkIHlldFxuICAgIHdoaWxlIChuYW1lc3BhY2VzLnVyaUJ5UHJlZml4KG5ld1ByZWZpeCkpIHtcbiAgICAgIG5ld1ByZWZpeCA9IHByZWZpeCArICdfJyArIGlkeCsrO1xuICAgIH1cblxuICAgIG5zID0gdGhpcy5sb2dOYW1lc3BhY2UoeyBwcmVmaXg6IG5ld1ByZWZpeCwgdXJpOiB1cmkgfSwgd2VsbGtub3duVXJpID09PSB1cmkpO1xuICB9XG5cbiAgaWYgKHByZWZpeCkge1xuICAgIG5hbWVzcGFjZXMubWFwUHJlZml4KHByZWZpeCwgdXJpKTtcbiAgfVxuXG4gIHJldHVybiBucztcbn07XG5cbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5wYXJzZUF0dHJpYnV0ZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKSB7XG4gIHZhciBzZWxmID0gdGhpcyxcbiAgICAgIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG5cbiAgZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihwKSB7XG5cbiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LmdldChwLm5hbWUpO1xuXG4gICAgaWYgKHAuaXNSZWZlcmVuY2UpIHtcblxuICAgICAgaWYgKCFwLmlzTWFueSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLmlkO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgICAgZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHZhbHVlcy5wdXNoKHYuaWQpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gSURSRUZTIGlzIGEgd2hpdGVzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiByZWZlcmVuY2VzLlxuICAgICAgICB2YWx1ZSA9IHZhbHVlcy5qb2luKCcgJyk7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBzZWxmLmFkZEF0dHJpYnV0ZShzZWxmLm5zQXR0cmlidXRlTmFtZShwKSwgdmFsdWUpO1xuICB9KTtcbn07XG5cbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5hZGRUYWdOYW1lID0gZnVuY3Rpb24obnNUYWdOYW1lKSB7XG4gIHZhciBhY3R1YWxOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChuc1RhZ05hbWUpO1xuXG4gIHRoaXMuZ2V0TmFtZXNwYWNlcygpLmxvZ1VzZWQoYWN0dWFsTnMpO1xuXG4gIHJldHVybiBuc05hbWUobnNUYWdOYW1lKTtcbn07XG5cbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5hZGRBdHRyaWJ1dGUgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgYXR0cnMgPSB0aGlzLmF0dHJzO1xuXG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IGVzY2FwZUF0dHIodmFsdWUpO1xuICB9XG5cbiAgYXR0cnMucHVzaCh7IG5hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZSB9KTtcbn07XG5cbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5zZXJpYWxpemVBdHRyaWJ1dGVzID0gZnVuY3Rpb24od3JpdGVyKSB7XG4gIHZhciBhdHRycyA9IHRoaXMuYXR0cnMsXG4gICAgICBuYW1lc3BhY2VzID0gdGhpcy5uYW1lc3BhY2VzO1xuXG4gIGlmIChuYW1lc3BhY2VzKSB7XG4gICAgYXR0cnMgPSBnZXROc0F0dHJzKG5hbWVzcGFjZXMpLmNvbmNhdChhdHRycyk7XG4gIH1cblxuICBmb3JFYWNoKGF0dHJzLCBmdW5jdGlvbihhKSB7XG4gICAgd3JpdGVyXG4gICAgICAuYXBwZW5kKCcgJylcbiAgICAgIC5hcHBlbmQobnNOYW1lKGEubmFtZSkpLmFwcGVuZCgnPVwiJykuYXBwZW5kKGEudmFsdWUpLmFwcGVuZCgnXCInKTtcbiAgfSk7XG59O1xuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUuc2VyaWFsaXplVG8gPSBmdW5jdGlvbih3cml0ZXIpIHtcbiAgdmFyIGZpcnN0Qm9keSA9IHRoaXMuYm9keVswXSxcbiAgICAgIGluZGVudCA9IGZpcnN0Qm9keSAmJiBmaXJzdEJvZHkuY29uc3RydWN0b3IgIT09IEJvZHlTZXJpYWxpemVyO1xuXG4gIHdyaXRlclxuICAgIC5hcHBlbmRJbmRlbnQoKVxuICAgIC5hcHBlbmQoJzwnICsgdGhpcy50YWdOYW1lKTtcblxuICB0aGlzLnNlcmlhbGl6ZUF0dHJpYnV0ZXMod3JpdGVyKTtcblxuICB3cml0ZXIuYXBwZW5kKGZpcnN0Qm9keSA/ICc+JyA6ICcgLz4nKTtcblxuICBpZiAoZmlyc3RCb2R5KSB7XG5cbiAgICBpZiAoaW5kZW50KSB7XG4gICAgICB3cml0ZXJcbiAgICAgICAgLmFwcGVuZE5ld0xpbmUoKVxuICAgICAgICAuaW5kZW50KCk7XG4gICAgfVxuXG4gICAgZm9yRWFjaCh0aGlzLmJvZHksIGZ1bmN0aW9uKGIpIHtcbiAgICAgIGIuc2VyaWFsaXplVG8od3JpdGVyKTtcbiAgICB9KTtcblxuICAgIGlmIChpbmRlbnQpIHtcbiAgICAgIHdyaXRlclxuICAgICAgICAudW5pbmRlbnQoKVxuICAgICAgICAuYXBwZW5kSW5kZW50KCk7XG4gICAgfVxuXG4gICAgd3JpdGVyLmFwcGVuZCgnPC8nICsgdGhpcy50YWdOYW1lICsgJz4nKTtcbiAgfVxuXG4gIHdyaXRlci5hcHBlbmROZXdMaW5lKCk7XG59O1xuXG4vKipcbiAqIEEgc2VyaWFsaXplciBmb3IgdHlwZXMgdGhhdCBoYW5kbGVzIHNlcmlhbGl6YXRpb24gb2YgZGF0YSB0eXBlc1xuICovXG5mdW5jdGlvbiBUeXBlU2VyaWFsaXplcihwYXJlbnQsIHByb3BlcnR5RGVzY3JpcHRvcikge1xuICBFbGVtZW50U2VyaWFsaXplci5jYWxsKHRoaXMsIHBhcmVudCwgcHJvcGVydHlEZXNjcmlwdG9yKTtcbn1cblxuaW5oZXJpdHMoVHlwZVNlcmlhbGl6ZXIsIEVsZW1lbnRTZXJpYWxpemVyKTtcblxuVHlwZVNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlTnNBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gIC8vIGV4dHJhY3RlZCBhdHRyaWJ1dGVzXG4gIHZhciBhdHRyaWJ1dGVzID0gRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlTnNBdHRyaWJ1dGVzLmNhbGwodGhpcywgZWxlbWVudCk7XG5cbiAgdmFyIGRlc2NyaXB0b3IgPSBlbGVtZW50LiRkZXNjcmlwdG9yO1xuXG4gIC8vIG9ubHkgc2VyaWFsaXplIHhzaTp0eXBlIGlmIG5lY2Vzc2FyeVxuICBpZiAoZGVzY3JpcHRvci5uYW1lID09PSB0aGlzLnByb3BlcnR5RGVzY3JpcHRvci50eXBlKSB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gIH1cblxuICB2YXIgdHlwZU5zID0gdGhpcy50eXBlTnMgPSB0aGlzLm5zVGFnTmFtZShkZXNjcmlwdG9yKTtcbiAgdGhpcy5nZXROYW1lc3BhY2VzKCkubG9nVXNlZCh0aGlzLnR5cGVOcyk7XG5cbiAgLy8gYWRkIHhzaTp0eXBlIGF0dHJpYnV0ZSB0byByZXByZXNlbnQgdGhlIGVsZW1lbnRzXG4gIC8vIGFjdHVhbCB0eXBlXG5cbiAgdmFyIHBrZyA9IGVsZW1lbnQuJG1vZGVsLmdldFBhY2thZ2UodHlwZU5zLnVyaSksXG4gICAgICB0eXBlUHJlZml4ID0gKHBrZy54bWwgJiYgcGtnLnhtbC50eXBlUHJlZml4KSB8fCAnJztcblxuICB0aGlzLmFkZEF0dHJpYnV0ZShcbiAgICB0aGlzLm5zQXR0cmlidXRlTmFtZShYU0lfVFlQRSksXG4gICAgKHR5cGVOcy5wcmVmaXggPyB0eXBlTnMucHJlZml4ICsgJzonIDogJycpICsgdHlwZVByZWZpeCArIGRlc2NyaXB0b3IubnMubG9jYWxOYW1lXG4gICk7XG5cbiAgcmV0dXJuIGF0dHJpYnV0ZXM7XG59O1xuXG5UeXBlU2VyaWFsaXplci5wcm90b3R5cGUuaXNMb2NhbE5zID0gZnVuY3Rpb24obnMpIHtcbiAgcmV0dXJuIG5zLnVyaSA9PT0gKHRoaXMudHlwZU5zIHx8IHRoaXMubnMpLnVyaTtcbn07XG5cbmZ1bmN0aW9uIFNhdmluZ1dyaXRlcigpIHtcbiAgdGhpcy52YWx1ZSA9ICcnO1xuXG4gIHRoaXMud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICB0aGlzLnZhbHVlICs9IHN0cjtcbiAgfTtcbn1cblxuZnVuY3Rpb24gRm9ybWF0aW5nV3JpdGVyKG91dCwgZm9ybWF0KSB7XG5cbiAgdmFyIGluZGVudCA9IFsnJ107XG5cbiAgdGhpcy5hcHBlbmQgPSBmdW5jdGlvbihzdHIpIHtcbiAgICBvdXQud3JpdGUoc3RyKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHRoaXMuYXBwZW5kTmV3TGluZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChmb3JtYXQpIHtcbiAgICAgIG91dC53cml0ZSgnXFxuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdGhpcy5hcHBlbmRJbmRlbnQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoZm9ybWF0KSB7XG4gICAgICBvdXQud3JpdGUoaW5kZW50LmpvaW4oJyAgJykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHRoaXMuaW5kZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgaW5kZW50LnB1c2goJycpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHRoaXMudW5pbmRlbnQgPSBmdW5jdGlvbigpIHtcbiAgICBpbmRlbnQucG9wKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG59XG5cbi8qKlxuICogQSB3cml0ZXIgZm9yIG1ldGEtbW9kZWwgYmFja2VkIGRvY3VtZW50IHRyZWVzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgb3V0cHV0IG9wdGlvbnMgdG8gcGFzcyBpbnRvIHRoZSB3cml0ZXJcbiAqL1xuZnVuY3Rpb24gV3JpdGVyKG9wdGlvbnMpIHtcblxuICBvcHRpb25zID0gYXNzaWduKHsgZm9ybWF0OiBmYWxzZSwgcHJlYW1ibGU6IHRydWUgfSwgb3B0aW9ucyB8fCB7fSk7XG5cbiAgZnVuY3Rpb24gdG9YTUwodHJlZSwgd3JpdGVyKSB7XG4gICAgdmFyIGludGVybmFsV3JpdGVyID0gd3JpdGVyIHx8IG5ldyBTYXZpbmdXcml0ZXIoKTtcbiAgICB2YXIgZm9ybWF0aW5nV3JpdGVyID0gbmV3IEZvcm1hdGluZ1dyaXRlcihpbnRlcm5hbFdyaXRlciwgb3B0aW9ucy5mb3JtYXQpO1xuXG4gICAgaWYgKG9wdGlvbnMucHJlYW1ibGUpIHtcbiAgICAgIGZvcm1hdGluZ1dyaXRlci5hcHBlbmQoWE1MX1BSRUFNQkxFKTtcbiAgICB9XG5cbiAgICBuZXcgRWxlbWVudFNlcmlhbGl6ZXIoKS5idWlsZCh0cmVlKS5zZXJpYWxpemVUbyhmb3JtYXRpbmdXcml0ZXIpO1xuXG4gICAgaWYgKCF3cml0ZXIpIHtcbiAgICAgIHJldHVybiBpbnRlcm5hbFdyaXRlci52YWx1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvWE1MOiB0b1hNTFxuICB9O1xufVxuXG5leHBvcnQgeyBSZWFkZXIsIFdyaXRlciB9O1xuIiwiaW1wb3J0IHsgZm9yRWFjaCwgYmluZCwgcGljaywgYXNzaWduLCBpc1N0cmluZywgaXNPYmplY3QgfSBmcm9tICdtaW4tZGFzaCc7XG5cbi8qKlxuICogTW9kZGxlIGJhc2UgZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gQmFzZSgpIHsgfVxuXG5CYXNlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLiRtb2RlbC5wcm9wZXJ0aWVzLmdldCh0aGlzLCBuYW1lKTtcbn07XG5cbkJhc2UucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuJG1vZGVsLnByb3BlcnRpZXMuc2V0KHRoaXMsIG5hbWUsIHZhbHVlKTtcbn07XG5cbi8qKlxuICogQSBtb2RlbCBlbGVtZW50IGZhY3RvcnkuXG4gKlxuICogQHBhcmFtIHtNb2RkbGV9IG1vZGVsXG4gKiBAcGFyYW0ge1Byb3BlcnRpZXN9IHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gRmFjdG9yeShtb2RlbCwgcHJvcGVydGllcykge1xuICB0aGlzLm1vZGVsID0gbW9kZWw7XG4gIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG59XG5cblxuRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlVHlwZSA9IGZ1bmN0aW9uKGRlc2NyaXB0b3IpIHtcblxuICB2YXIgbW9kZWwgPSB0aGlzLm1vZGVsO1xuXG4gIHZhciBwcm9wcyA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZS5wcm90b3R5cGUpO1xuXG4gIC8vIGluaXRpYWxpemUgZGVmYXVsdCB2YWx1ZXNcbiAgZm9yRWFjaChkZXNjcmlwdG9yLnByb3BlcnRpZXMsIGZ1bmN0aW9uKHApIHtcbiAgICBpZiAoIXAuaXNNYW55ICYmIHAuZGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm90b3R5cGVbcC5uYW1lXSA9IHAuZGVmYXVsdDtcbiAgICB9XG4gIH0pO1xuXG4gIHByb3BzLmRlZmluZU1vZGVsKHByb3RvdHlwZSwgbW9kZWwpO1xuICBwcm9wcy5kZWZpbmVEZXNjcmlwdG9yKHByb3RvdHlwZSwgZGVzY3JpcHRvcik7XG5cbiAgdmFyIG5hbWUgPSBkZXNjcmlwdG9yLm5zLm5hbWU7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgdHlwZSBjb25zdHJ1Y3RvclxuICAgKi9cbiAgZnVuY3Rpb24gTW9kZGxlRWxlbWVudChhdHRycykge1xuICAgIHByb3BzLmRlZmluZSh0aGlzLCAnJHR5cGUnLCB7IHZhbHVlOiBuYW1lLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuICAgIHByb3BzLmRlZmluZSh0aGlzLCAnJGF0dHJzJywgeyB2YWx1ZToge30gfSk7XG4gICAgcHJvcHMuZGVmaW5lKHRoaXMsICckcGFyZW50JywgeyB3cml0YWJsZTogdHJ1ZSB9KTtcblxuICAgIGZvckVhY2goYXR0cnMsIGJpbmQoZnVuY3Rpb24odmFsLCBrZXkpIHtcbiAgICAgIHRoaXMuc2V0KGtleSwgdmFsKTtcbiAgICB9LCB0aGlzKSk7XG4gIH1cblxuICBNb2RkbGVFbGVtZW50LnByb3RvdHlwZSA9IHByb3RvdHlwZTtcblxuICBNb2RkbGVFbGVtZW50Lmhhc1R5cGUgPSBwcm90b3R5cGUuJGluc3RhbmNlT2YgPSB0aGlzLm1vZGVsLmhhc1R5cGU7XG5cbiAgLy8gc3RhdGljIGxpbmtzXG4gIHByb3BzLmRlZmluZU1vZGVsKE1vZGRsZUVsZW1lbnQsIG1vZGVsKTtcbiAgcHJvcHMuZGVmaW5lRGVzY3JpcHRvcihNb2RkbGVFbGVtZW50LCBkZXNjcmlwdG9yKTtcblxuICByZXR1cm4gTW9kZGxlRWxlbWVudDtcbn07XG5cbi8qKlxuICogQnVpbHQtaW4gbW9kZGxlIHR5cGVzXG4gKi9cbnZhciBCVUlMVElOUyA9IHtcbiAgU3RyaW5nOiB0cnVlLFxuICBCb29sZWFuOiB0cnVlLFxuICBJbnRlZ2VyOiB0cnVlLFxuICBSZWFsOiB0cnVlLFxuICBFbGVtZW50OiB0cnVlXG59O1xuXG4vKipcbiAqIENvbnZlcnRlcnMgZm9yIGJ1aWx0IGluIHR5cGVzIGZyb20gc3RyaW5nIHJlcHJlc2VudGF0aW9uc1xuICovXG52YXIgVFlQRV9DT05WRVJURVJTID0ge1xuICBTdHJpbmc6IGZ1bmN0aW9uKHMpIHsgcmV0dXJuIHM7IH0sXG4gIEJvb2xlYW46IGZ1bmN0aW9uKHMpIHsgcmV0dXJuIHMgPT09ICd0cnVlJzsgfSxcbiAgSW50ZWdlcjogZnVuY3Rpb24ocykgeyByZXR1cm4gcGFyc2VJbnQocywgMTApOyB9LFxuICBSZWFsOiBmdW5jdGlvbihzKSB7IHJldHVybiBwYXJzZUZsb2F0KHMsIDEwKTsgfVxufTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgdHlwZSB0byBpdHMgcmVhbCByZXByZXNlbnRhdGlvblxuICovXG5mdW5jdGlvbiBjb2VyY2VUeXBlKHR5cGUsIHZhbHVlKSB7XG5cbiAgdmFyIGNvbnZlcnRlciA9IFRZUEVfQ09OVkVSVEVSU1t0eXBlXTtcblxuICBpZiAoY29udmVydGVyKSB7XG4gICAgcmV0dXJuIGNvbnZlcnRlcih2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIHR5cGUgaXMgYnVpbHQtaW5cbiAqL1xuZnVuY3Rpb24gaXNCdWlsdEluKHR5cGUpIHtcbiAgcmV0dXJuICEhQlVJTFRJTlNbdHlwZV07XG59XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIHR5cGUgaXMgc2ltcGxlXG4gKi9cbmZ1bmN0aW9uIGlzU2ltcGxlKHR5cGUpIHtcbiAgcmV0dXJuICEhVFlQRV9DT05WRVJURVJTW3R5cGVdO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIG5hbWVzcGFjZWQgYXR0cmlidXRlIG5hbWUgb2YgdGhlIGZvcm0gKG5zOilsb2NhbE5hbWUgdG8gYW4gb2JqZWN0LFxuICogZ2l2ZW4gYSBkZWZhdWx0IHByZWZpeCB0byBhc3N1bWUgaW4gY2FzZSBubyBleHBsaWNpdCBuYW1lc3BhY2UgaXMgZ2l2ZW4uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZGVmYXVsdFByZWZpeF0gdGhlIGRlZmF1bHQgcHJlZml4IHRvIHRha2UsIGlmIG5vbmUgaXMgcHJlc2VudC5cbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBwYXJzZWQgbmFtZVxuICovXG5mdW5jdGlvbiBwYXJzZU5hbWUobmFtZSwgZGVmYXVsdFByZWZpeCkge1xuICB2YXIgcGFydHMgPSBuYW1lLnNwbGl0KC86LyksXG4gICAgICBsb2NhbE5hbWUsIHByZWZpeDtcblxuICAvLyBubyBwcmVmaXggKGkuZS4gb25seSBsb2NhbCBuYW1lKVxuICBpZiAocGFydHMubGVuZ3RoID09PSAxKSB7XG4gICAgbG9jYWxOYW1lID0gbmFtZTtcbiAgICBwcmVmaXggPSBkZWZhdWx0UHJlZml4O1xuICB9IGVsc2VcbiAgLy8gcHJlZml4ICsgbG9jYWwgbmFtZVxuICBpZiAocGFydHMubGVuZ3RoID09PSAyKSB7XG4gICAgbG9jYWxOYW1lID0gcGFydHNbMV07XG4gICAgcHJlZml4ID0gcGFydHNbMF07XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCA8cHJlZml4OmxvY2FsTmFtZT4gb3IgPGxvY2FsTmFtZT4sIGdvdCAnICsgbmFtZSk7XG4gIH1cblxuICBuYW1lID0gKHByZWZpeCA/IHByZWZpeCArICc6JyA6ICcnKSArIGxvY2FsTmFtZTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgcHJlZml4OiBwcmVmaXgsXG4gICAgbG9jYWxOYW1lOiBsb2NhbE5hbWVcbiAgfTtcbn1cblxuLyoqXG4gKiBBIHV0aWxpdHkgdG8gYnVpbGQgZWxlbWVudCBkZXNjcmlwdG9ycy5cbiAqL1xuZnVuY3Rpb24gRGVzY3JpcHRvckJ1aWxkZXIobmFtZU5zKSB7XG4gIHRoaXMubnMgPSBuYW1lTnM7XG4gIHRoaXMubmFtZSA9IG5hbWVOcy5uYW1lO1xuICB0aGlzLmFsbFR5cGVzID0gW107XG4gIHRoaXMuYWxsVHlwZXNCeU5hbWUgPSB7fTtcbiAgdGhpcy5wcm9wZXJ0aWVzID0gW107XG4gIHRoaXMucHJvcGVydGllc0J5TmFtZSA9IHt9O1xufVxuXG5cbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5idWlsZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcGljayh0aGlzLCBbXG4gICAgJ25zJyxcbiAgICAnbmFtZScsXG4gICAgJ2FsbFR5cGVzJyxcbiAgICAnYWxsVHlwZXNCeU5hbWUnLFxuICAgICdwcm9wZXJ0aWVzJyxcbiAgICAncHJvcGVydGllc0J5TmFtZScsXG4gICAgJ2JvZHlQcm9wZXJ0eScsXG4gICAgJ2lkUHJvcGVydHknXG4gIF0pO1xufTtcblxuLyoqXG4gKiBBZGQgcHJvcGVydHkgYXQgZ2l2ZW4gaW5kZXguXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBcbiAqIEBwYXJhbSB7TnVtYmVyfSBbaWR4XVxuICogQHBhcmFtIHtCb29sZWFufSBbdmFsaWRhdGU9dHJ1ZV1cbiAqL1xuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmFkZFByb3BlcnR5ID0gZnVuY3Rpb24ocCwgaWR4LCB2YWxpZGF0ZSkge1xuXG4gIGlmICh0eXBlb2YgaWR4ID09PSAnYm9vbGVhbicpIHtcbiAgICB2YWxpZGF0ZSA9IGlkeDtcbiAgICBpZHggPSB1bmRlZmluZWQ7XG4gIH1cblxuICB0aGlzLmFkZE5hbWVkUHJvcGVydHkocCwgdmFsaWRhdGUgIT09IGZhbHNlKTtcblxuICB2YXIgcHJvcGVydGllcyA9IHRoaXMucHJvcGVydGllcztcblxuICBpZiAoaWR4ICE9PSB1bmRlZmluZWQpIHtcbiAgICBwcm9wZXJ0aWVzLnNwbGljZShpZHgsIDAsIHApO1xuICB9IGVsc2Uge1xuICAgIHByb3BlcnRpZXMucHVzaChwKTtcbiAgfVxufTtcblxuXG5EZXNjcmlwdG9yQnVpbGRlci5wcm90b3R5cGUucmVwbGFjZVByb3BlcnR5ID0gZnVuY3Rpb24ob2xkUHJvcGVydHksIG5ld1Byb3BlcnR5LCByZXBsYWNlKSB7XG4gIHZhciBvbGROYW1lTnMgPSBvbGRQcm9wZXJ0eS5ucztcblxuICB2YXIgcHJvcHMgPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgICBwcm9wZXJ0aWVzQnlOYW1lID0gdGhpcy5wcm9wZXJ0aWVzQnlOYW1lLFxuICAgICAgcmVuYW1lID0gb2xkUHJvcGVydHkubmFtZSAhPT0gbmV3UHJvcGVydHkubmFtZTtcblxuICBpZiAob2xkUHJvcGVydHkuaXNJZCkge1xuICAgIGlmICghbmV3UHJvcGVydHkuaXNJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAncHJvcGVydHkgPCcgKyBuZXdQcm9wZXJ0eS5ucy5uYW1lICsgJz4gbXVzdCBiZSBpZCBwcm9wZXJ0eSAnICtcbiAgICAgICAgJ3RvIHJlZmluZSA8JyArIG9sZFByb3BlcnR5Lm5zLm5hbWUgKyAnPicpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0SWRQcm9wZXJ0eShuZXdQcm9wZXJ0eSwgZmFsc2UpO1xuICB9XG5cbiAgaWYgKG9sZFByb3BlcnR5LmlzQm9keSkge1xuXG4gICAgaWYgKCFuZXdQcm9wZXJ0eS5pc0JvZHkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3Byb3BlcnR5IDwnICsgbmV3UHJvcGVydHkubnMubmFtZSArICc+IG11c3QgYmUgYm9keSBwcm9wZXJ0eSAnICtcbiAgICAgICAgJ3RvIHJlZmluZSA8JyArIG9sZFByb3BlcnR5Lm5zLm5hbWUgKyAnPicpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLnNldEJvZHlQcm9wZXJ0eShuZXdQcm9wZXJ0eSwgZmFsc2UpO1xuICB9XG5cbiAgLy8gdmFsaWRhdGUgZXhpc3RlbmNlIGFuZCBnZXQgbG9jYXRpb24gb2Ygb2xkIHByb3BlcnR5XG4gIHZhciBpZHggPSBwcm9wcy5pbmRleE9mKG9sZFByb3BlcnR5KTtcbiAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb3BlcnR5IDwnICsgb2xkTmFtZU5zLm5hbWUgKyAnPiBub3QgZm91bmQgaW4gcHJvcGVydHkgbGlzdCcpO1xuICB9XG5cbiAgLy8gcmVtb3ZlIG9sZCBwcm9wZXJ0eVxuICBwcm9wcy5zcGxpY2UoaWR4LCAxKTtcblxuICAvLyByZXBsYWNpbmcgdGhlIG5hbWVkIHByb3BlcnR5IGlzIGludGVudGlvbmFsXG4gIC8vXG4gIC8vICAqIHZhbGlkYXRlIG9ubHkgaWYgdGhpcyBpcyBhIFwicmVuYW1lXCIgb3BlcmF0aW9uXG4gIC8vICAqIGFkZCBhdCBzcGVjaWZpYyBpbmRleCB1bmxlc3Mgd2UgXCJyZXBsYWNlXCJcbiAgLy9cbiAgdGhpcy5hZGRQcm9wZXJ0eShuZXdQcm9wZXJ0eSwgcmVwbGFjZSA/IHVuZGVmaW5lZCA6IGlkeCwgcmVuYW1lKTtcblxuICAvLyBtYWtlIG5ldyBwcm9wZXJ0eSBhdmFpbGFibGUgdW5kZXIgb2xkIG5hbWVcbiAgcHJvcGVydGllc0J5TmFtZVtvbGROYW1lTnMubmFtZV0gPSBwcm9wZXJ0aWVzQnlOYW1lW29sZE5hbWVOcy5sb2NhbE5hbWVdID0gbmV3UHJvcGVydHk7XG59O1xuXG5cbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5yZWRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24ocCwgdGFyZ2V0UHJvcGVydHlOYW1lLCByZXBsYWNlKSB7XG5cbiAgdmFyIG5zUHJlZml4ID0gcC5ucy5wcmVmaXg7XG4gIHZhciBwYXJ0cyA9IHRhcmdldFByb3BlcnR5TmFtZS5zcGxpdCgnIycpO1xuXG4gIHZhciBuYW1lID0gcGFyc2VOYW1lKHBhcnRzWzBdLCBuc1ByZWZpeCk7XG4gIHZhciBhdHRyTmFtZSA9IHBhcnNlTmFtZShwYXJ0c1sxXSwgbmFtZS5wcmVmaXgpLm5hbWU7XG5cbiAgdmFyIHJlZGVmaW5lZFByb3BlcnR5ID0gdGhpcy5wcm9wZXJ0aWVzQnlOYW1lW2F0dHJOYW1lXTtcbiAgaWYgKCFyZWRlZmluZWRQcm9wZXJ0eSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVmaW5lZCBwcm9wZXJ0eSA8JyArIGF0dHJOYW1lICsgJz4gbm90IGZvdW5kJyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZXBsYWNlUHJvcGVydHkocmVkZWZpbmVkUHJvcGVydHksIHAsIHJlcGxhY2UpO1xuICB9XG5cbiAgZGVsZXRlIHAucmVkZWZpbmVzO1xufTtcblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmFkZE5hbWVkUHJvcGVydHkgPSBmdW5jdGlvbihwLCB2YWxpZGF0ZSkge1xuICB2YXIgbnMgPSBwLm5zLFxuICAgICAgcHJvcHNCeU5hbWUgPSB0aGlzLnByb3BlcnRpZXNCeU5hbWU7XG5cbiAgaWYgKHZhbGlkYXRlKSB7XG4gICAgdGhpcy5hc3NlcnROb3REZWZpbmVkKHAsIG5zLm5hbWUpO1xuICAgIHRoaXMuYXNzZXJ0Tm90RGVmaW5lZChwLCBucy5sb2NhbE5hbWUpO1xuICB9XG5cbiAgcHJvcHNCeU5hbWVbbnMubmFtZV0gPSBwcm9wc0J5TmFtZVtucy5sb2NhbE5hbWVdID0gcDtcbn07XG5cbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5yZW1vdmVOYW1lZFByb3BlcnR5ID0gZnVuY3Rpb24ocCkge1xuICB2YXIgbnMgPSBwLm5zLFxuICAgICAgcHJvcHNCeU5hbWUgPSB0aGlzLnByb3BlcnRpZXNCeU5hbWU7XG5cbiAgZGVsZXRlIHByb3BzQnlOYW1lW25zLm5hbWVdO1xuICBkZWxldGUgcHJvcHNCeU5hbWVbbnMubG9jYWxOYW1lXTtcbn07XG5cbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5zZXRCb2R5UHJvcGVydHkgPSBmdW5jdGlvbihwLCB2YWxpZGF0ZSkge1xuXG4gIGlmICh2YWxpZGF0ZSAmJiB0aGlzLmJvZHlQcm9wZXJ0eSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdib2R5IHByb3BlcnR5IGRlZmluZWQgbXVsdGlwbGUgdGltZXMgJyArXG4gICAgICAnKDwnICsgdGhpcy5ib2R5UHJvcGVydHkubnMubmFtZSArICc+LCA8JyArIHAubnMubmFtZSArICc+KScpO1xuICB9XG5cbiAgdGhpcy5ib2R5UHJvcGVydHkgPSBwO1xufTtcblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLnNldElkUHJvcGVydHkgPSBmdW5jdGlvbihwLCB2YWxpZGF0ZSkge1xuXG4gIGlmICh2YWxpZGF0ZSAmJiB0aGlzLmlkUHJvcGVydHkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnaWQgcHJvcGVydHkgZGVmaW5lZCBtdWx0aXBsZSB0aW1lcyAnICtcbiAgICAgICcoPCcgKyB0aGlzLmlkUHJvcGVydHkubnMubmFtZSArICc+LCA8JyArIHAubnMubmFtZSArICc+KScpO1xuICB9XG5cbiAgdGhpcy5pZFByb3BlcnR5ID0gcDtcbn07XG5cbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5hc3NlcnROb3REZWZpbmVkID0gZnVuY3Rpb24ocCwgbmFtZSkge1xuICB2YXIgcHJvcGVydHlOYW1lID0gcC5uYW1lLFxuICAgICAgZGVmaW5lZFByb3BlcnR5ID0gdGhpcy5wcm9wZXJ0aWVzQnlOYW1lW3Byb3BlcnR5TmFtZV07XG5cbiAgaWYgKGRlZmluZWRQcm9wZXJ0eSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdwcm9wZXJ0eSA8JyArIHByb3BlcnR5TmFtZSArICc+IGFscmVhZHkgZGVmaW5lZDsgJyArXG4gICAgICAnb3ZlcnJpZGUgb2YgPCcgKyBkZWZpbmVkUHJvcGVydHkuZGVmaW5lZEJ5Lm5zLm5hbWUgKyAnIycgKyBkZWZpbmVkUHJvcGVydHkubnMubmFtZSArICc+IGJ5ICcgK1xuICAgICAgJzwnICsgcC5kZWZpbmVkQnkubnMubmFtZSArICcjJyArIHAubnMubmFtZSArICc+IG5vdCBhbGxvd2VkIHdpdGhvdXQgcmVkZWZpbmVzJyk7XG4gIH1cbn07XG5cbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5oYXNQcm9wZXJ0eSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMucHJvcGVydGllc0J5TmFtZVtuYW1lXTtcbn07XG5cbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5hZGRUcmFpdCA9IGZ1bmN0aW9uKHQsIGluaGVyaXRlZCkge1xuXG4gIHZhciB0eXBlc0J5TmFtZSA9IHRoaXMuYWxsVHlwZXNCeU5hbWUsXG4gICAgICB0eXBlcyA9IHRoaXMuYWxsVHlwZXM7XG5cbiAgdmFyIHR5cGVOYW1lID0gdC5uYW1lO1xuXG4gIGlmICh0eXBlTmFtZSBpbiB0eXBlc0J5TmFtZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvckVhY2godC5wcm9wZXJ0aWVzLCBiaW5kKGZ1bmN0aW9uKHApIHtcblxuICAgIC8vIGNsb25lIHByb3BlcnR5IHRvIGFsbG93IGV4dGVuc2lvbnNcbiAgICBwID0gYXNzaWduKHt9LCBwLCB7XG4gICAgICBuYW1lOiBwLm5zLmxvY2FsTmFtZSxcbiAgICAgIGluaGVyaXRlZDogaW5oZXJpdGVkXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocCwgJ2RlZmluZWRCeScsIHtcbiAgICAgIHZhbHVlOiB0XG4gICAgfSk7XG5cbiAgICB2YXIgcmVwbGFjZXMgPSBwLnJlcGxhY2VzLFxuICAgICAgICByZWRlZmluZXMgPSBwLnJlZGVmaW5lcztcblxuICAgIC8vIGFkZCByZXBsYWNlL3JlZGVmaW5lIHN1cHBvcnRcbiAgICBpZiAocmVwbGFjZXMgfHwgcmVkZWZpbmVzKSB7XG4gICAgICB0aGlzLnJlZGVmaW5lUHJvcGVydHkocCwgcmVwbGFjZXMgfHwgcmVkZWZpbmVzLCByZXBsYWNlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwLmlzQm9keSkge1xuICAgICAgICB0aGlzLnNldEJvZHlQcm9wZXJ0eShwKTtcbiAgICAgIH1cbiAgICAgIGlmIChwLmlzSWQpIHtcbiAgICAgICAgdGhpcy5zZXRJZFByb3BlcnR5KHApO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRQcm9wZXJ0eShwKTtcbiAgICB9XG4gIH0sIHRoaXMpKTtcblxuICB0eXBlcy5wdXNoKHQpO1xuICB0eXBlc0J5TmFtZVt0eXBlTmFtZV0gPSB0O1xufTtcblxuLyoqXG4gKiBBIHJlZ2lzdHJ5IG9mIE1vZGRsZSBwYWNrYWdlcy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PFBhY2thZ2U+fSBwYWNrYWdlc1xuICogQHBhcmFtIHtQcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIFJlZ2lzdHJ5KHBhY2thZ2VzLCBwcm9wZXJ0aWVzKSB7XG4gIHRoaXMucGFja2FnZU1hcCA9IHt9O1xuICB0aGlzLnR5cGVNYXAgPSB7fTtcblxuICB0aGlzLnBhY2thZ2VzID0gW107XG5cbiAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcblxuICBmb3JFYWNoKHBhY2thZ2VzLCBiaW5kKHRoaXMucmVnaXN0ZXJQYWNrYWdlLCB0aGlzKSk7XG59XG5cblxuUmVnaXN0cnkucHJvdG90eXBlLmdldFBhY2thZ2UgPSBmdW5jdGlvbih1cmlPclByZWZpeCkge1xuICByZXR1cm4gdGhpcy5wYWNrYWdlTWFwW3VyaU9yUHJlZml4XTtcbn07XG5cblJlZ2lzdHJ5LnByb3RvdHlwZS5nZXRQYWNrYWdlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5wYWNrYWdlcztcbn07XG5cblxuUmVnaXN0cnkucHJvdG90eXBlLnJlZ2lzdGVyUGFja2FnZSA9IGZ1bmN0aW9uKHBrZykge1xuXG4gIC8vIGNvcHkgcGFja2FnZVxuICBwa2cgPSBhc3NpZ24oe30sIHBrZyk7XG5cbiAgdmFyIHBrZ01hcCA9IHRoaXMucGFja2FnZU1hcDtcblxuICBlbnN1cmVBdmFpbGFibGUocGtnTWFwLCBwa2csICdwcmVmaXgnKTtcbiAgZW5zdXJlQXZhaWxhYmxlKHBrZ01hcCwgcGtnLCAndXJpJyk7XG5cbiAgLy8gcmVnaXN0ZXIgdHlwZXNcbiAgZm9yRWFjaChwa2cudHlwZXMsIGJpbmQoZnVuY3Rpb24oZGVzY3JpcHRvcikge1xuICAgIHRoaXMucmVnaXN0ZXJUeXBlKGRlc2NyaXB0b3IsIHBrZyk7XG4gIH0sIHRoaXMpKTtcblxuICBwa2dNYXBbcGtnLnVyaV0gPSBwa2dNYXBbcGtnLnByZWZpeF0gPSBwa2c7XG4gIHRoaXMucGFja2FnZXMucHVzaChwa2cpO1xufTtcblxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgdHlwZSBmcm9tIGEgc3BlY2lmaWMgcGFja2FnZSB3aXRoIHVzXG4gKi9cblJlZ2lzdHJ5LnByb3RvdHlwZS5yZWdpc3RlclR5cGUgPSBmdW5jdGlvbih0eXBlLCBwa2cpIHtcblxuICB0eXBlID0gYXNzaWduKHt9LCB0eXBlLCB7XG4gICAgc3VwZXJDbGFzczogKHR5cGUuc3VwZXJDbGFzcyB8fCBbXSkuc2xpY2UoKSxcbiAgICBleHRlbmRzOiAodHlwZS5leHRlbmRzIHx8IFtdKS5zbGljZSgpLFxuICAgIHByb3BlcnRpZXM6ICh0eXBlLnByb3BlcnRpZXMgfHwgW10pLnNsaWNlKCksXG4gICAgbWV0YTogYXNzaWduKCh0eXBlLm1ldGEgfHwge30pKVxuICB9KTtcblxuICB2YXIgbnMgPSBwYXJzZU5hbWUodHlwZS5uYW1lLCBwa2cucHJlZml4KSxcbiAgICAgIG5hbWUgPSBucy5uYW1lLFxuICAgICAgcHJvcGVydGllc0J5TmFtZSA9IHt9O1xuXG4gIC8vIHBhcnNlIHByb3BlcnRpZXNcbiAgZm9yRWFjaCh0eXBlLnByb3BlcnRpZXMsIGJpbmQoZnVuY3Rpb24ocCkge1xuXG4gICAgLy8gbmFtZXNwYWNlIHByb3BlcnR5IG5hbWVzXG4gICAgdmFyIHByb3BlcnR5TnMgPSBwYXJzZU5hbWUocC5uYW1lLCBucy5wcmVmaXgpLFxuICAgICAgICBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5zLm5hbWU7XG5cbiAgICAvLyBuYW1lc3BhY2UgcHJvcGVydHkgdHlwZXNcbiAgICBpZiAoIWlzQnVpbHRJbihwLnR5cGUpKSB7XG4gICAgICBwLnR5cGUgPSBwYXJzZU5hbWUocC50eXBlLCBwcm9wZXJ0eU5zLnByZWZpeCkubmFtZTtcbiAgICB9XG5cbiAgICBhc3NpZ24ocCwge1xuICAgICAgbnM6IHByb3BlcnR5TnMsXG4gICAgICBuYW1lOiBwcm9wZXJ0eU5hbWVcbiAgICB9KTtcblxuICAgIHByb3BlcnRpZXNCeU5hbWVbcHJvcGVydHlOYW1lXSA9IHA7XG4gIH0sIHRoaXMpKTtcblxuICAvLyB1cGRhdGUgbnMgKyBuYW1lXG4gIGFzc2lnbih0eXBlLCB7XG4gICAgbnM6IG5zLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgcHJvcGVydGllc0J5TmFtZTogcHJvcGVydGllc0J5TmFtZVxuICB9KTtcblxuICBmb3JFYWNoKHR5cGUuZXh0ZW5kcywgYmluZChmdW5jdGlvbihleHRlbmRzTmFtZSkge1xuICAgIHZhciBleHRlbmRlZCA9IHRoaXMudHlwZU1hcFtleHRlbmRzTmFtZV07XG5cbiAgICBleHRlbmRlZC50cmFpdHMgPSBleHRlbmRlZC50cmFpdHMgfHwgW107XG4gICAgZXh0ZW5kZWQudHJhaXRzLnB1c2gobmFtZSk7XG4gIH0sIHRoaXMpKTtcblxuICAvLyBsaW5rIHRvIHBhY2thZ2VcbiAgdGhpcy5kZWZpbmVQYWNrYWdlKHR5cGUsIHBrZyk7XG5cbiAgLy8gcmVnaXN0ZXJcbiAgdGhpcy50eXBlTWFwW25hbWVdID0gdHlwZTtcbn07XG5cblxuLyoqXG4gKiBUcmF2ZXJzZSB0aGUgdHlwZSBoaWVyYXJjaHkgZnJvbSBib3R0b20gdG8gdG9wLFxuICogY2FsbGluZyBpdGVyYXRvciB3aXRoICh0eXBlLCBpbmhlcml0ZWQpIGZvciBhbGwgZWxlbWVudHMgaW5cbiAqIHRoZSBpbmhlcml0YW5jZSBjaGFpbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gbnNOYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRvclxuICogQHBhcmFtIHtCb29sZWFufSBbdHJhaXQ9ZmFsc2VdXG4gKi9cblJlZ2lzdHJ5LnByb3RvdHlwZS5tYXBUeXBlcyA9IGZ1bmN0aW9uKG5zTmFtZSwgaXRlcmF0b3IsIHRyYWl0KSB7XG5cbiAgdmFyIHR5cGUgPSBpc0J1aWx0SW4obnNOYW1lLm5hbWUpID8geyBuYW1lOiBuc05hbWUubmFtZSB9IDogdGhpcy50eXBlTWFwW25zTmFtZS5uYW1lXTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlIHRoZSBzZWxlY3RlZCB0cmFpdC5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGNsc1xuICAgKi9cbiAgZnVuY3Rpb24gdHJhdmVyc2VUcmFpdChjbHMpIHtcbiAgICByZXR1cm4gdHJhdmVyc2VTdXBlcihjbHMsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlIHRoZSBzZWxlY3RlZCBzdXBlciB0eXBlIG9yIHRyYWl0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjbHNcbiAgICogQHBhcmFtIHtCb29sZWFufSBbdHJhaXQ9ZmFsc2VdXG4gICAqL1xuICBmdW5jdGlvbiB0cmF2ZXJzZVN1cGVyKGNscywgdHJhaXQpIHtcbiAgICB2YXIgcGFyZW50TnMgPSBwYXJzZU5hbWUoY2xzLCBpc0J1aWx0SW4oY2xzKSA/ICcnIDogbnNOYW1lLnByZWZpeCk7XG4gICAgc2VsZi5tYXBUeXBlcyhwYXJlbnROcywgaXRlcmF0b3IsIHRyYWl0KTtcbiAgfVxuXG4gIGlmICghdHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biB0eXBlIDwnICsgbnNOYW1lLm5hbWUgKyAnPicpO1xuICB9XG5cbiAgZm9yRWFjaCh0eXBlLnN1cGVyQ2xhc3MsIHRyYWl0ID8gdHJhdmVyc2VUcmFpdCA6IHRyYXZlcnNlU3VwZXIpO1xuXG4gIC8vIGNhbGwgaXRlcmF0b3Igd2l0aCAodHlwZSwgaW5oZXJpdGVkPSF0cmFpdClcbiAgaXRlcmF0b3IodHlwZSwgIXRyYWl0KTtcblxuICBmb3JFYWNoKHR5cGUudHJhaXRzLCB0cmF2ZXJzZVRyYWl0KTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlZmZlY3RpdmUgZGVzY3JpcHRvciBmb3IgYSB0eXBlLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gdHlwZSB0aGUgbmFtZXNwYWNlZCBuYW1lIChuczpsb2NhbE5hbWUpIG9mIHRoZSB0eXBlXG4gKlxuICogQHJldHVybiB7RGVzY3JpcHRvcn0gdGhlIHJlc3VsdGluZyBlZmZlY3RpdmUgZGVzY3JpcHRvclxuICovXG5SZWdpc3RyeS5wcm90b3R5cGUuZ2V0RWZmZWN0aXZlRGVzY3JpcHRvciA9IGZ1bmN0aW9uKG5hbWUpIHtcblxuICB2YXIgbnNOYW1lID0gcGFyc2VOYW1lKG5hbWUpO1xuXG4gIHZhciBidWlsZGVyID0gbmV3IERlc2NyaXB0b3JCdWlsZGVyKG5zTmFtZSk7XG5cbiAgdGhpcy5tYXBUeXBlcyhuc05hbWUsIGZ1bmN0aW9uKHR5cGUsIGluaGVyaXRlZCkge1xuICAgIGJ1aWxkZXIuYWRkVHJhaXQodHlwZSwgaW5oZXJpdGVkKTtcbiAgfSk7XG5cbiAgdmFyIGRlc2NyaXB0b3IgPSBidWlsZGVyLmJ1aWxkKCk7XG5cbiAgLy8gZGVmaW5lIHBhY2thZ2UgbGlua1xuICB0aGlzLmRlZmluZVBhY2thZ2UoZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hbGxUeXBlc1tkZXNjcmlwdG9yLmFsbFR5cGVzLmxlbmd0aCAtIDFdLiRwa2cpO1xuXG4gIHJldHVybiBkZXNjcmlwdG9yO1xufTtcblxuXG5SZWdpc3RyeS5wcm90b3R5cGUuZGVmaW5lUGFja2FnZSA9IGZ1bmN0aW9uKHRhcmdldCwgcGtnKSB7XG4gIHRoaXMucHJvcGVydGllcy5kZWZpbmUodGFyZ2V0LCAnJHBrZycsIHsgdmFsdWU6IHBrZyB9KTtcbn07XG5cblxuXG4vLy8vLy8vLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGVuc3VyZUF2YWlsYWJsZShwYWNrYWdlTWFwLCBwa2csIGlkZW50aWZpZXJLZXkpIHtcblxuICB2YXIgdmFsdWUgPSBwa2dbaWRlbnRpZmllcktleV07XG5cbiAgaWYgKHZhbHVlIGluIHBhY2thZ2VNYXApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhY2thZ2Ugd2l0aCAnICsgaWRlbnRpZmllcktleSArICcgPCcgKyB2YWx1ZSArICc+IGFscmVhZHkgZGVmaW5lZCcpO1xuICB9XG59XG5cbi8qKlxuICogQSB1dGlsaXR5IHRoYXQgZ2V0cyBhbmQgc2V0cyBwcm9wZXJ0aWVzIG9mIG1vZGVsIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7TW9kZWx9IG1vZGVsXG4gKi9cbmZ1bmN0aW9uIFByb3BlcnRpZXMobW9kZWwpIHtcbiAgdGhpcy5tb2RlbCA9IG1vZGVsO1xufVxuXG5cbi8qKlxuICogU2V0cyBhIG5hbWVkIHByb3BlcnR5IG9uIHRoZSB0YXJnZXQgZWxlbWVudC5cbiAqIElmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIHRoZSBwcm9wZXJ0eSBnZXRzIGRlbGV0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZVxuICovXG5Qcm9wZXJ0aWVzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbih0YXJnZXQsIG5hbWUsIHZhbHVlKSB7XG5cbiAgdmFyIHByb3BlcnR5ID0gdGhpcy5tb2RlbC5nZXRQcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBuYW1lKTtcblxuICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHkgJiYgcHJvcGVydHkubmFtZTtcblxuICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgLy8gdW5zZXQgdGhlIHByb3BlcnR5LCBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIHVuZGVmaW5lZDtcbiAgICAvLyBkZWxldGUgZnJvbSAkYXR0cnMgKGZvciBleHRlbnNpb25zKSBvciB0aGUgdGFyZ2V0IGl0c2VsZlxuICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgZGVsZXRlIHRhcmdldFtwcm9wZXJ0eU5hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdGFyZ2V0LiRhdHRyc1tuYW1lXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gc2V0IHRoZSBwcm9wZXJ0eSwgZGVmaW5pbmcgd2VsbCBkZWZpbmVkIHByb3BlcnRpZXMgb24gdGhlIGZseVxuICAgIC8vIG9yIHNpbXBseSB1cGRhdGluZyB0aGVtIGluIHRhcmdldC4kYXR0cnMgKGZvciBleHRlbnNpb25zKVxuICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgaWYgKHByb3BlcnR5TmFtZSBpbiB0YXJnZXQpIHtcbiAgICAgICAgdGFyZ2V0W3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0LiRhdHRyc1tuYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYW1lZCBwcm9wZXJ0eSBvZiB0aGUgZ2l2ZW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWVcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cblByb3BlcnRpZXMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKHRhcmdldCwgbmFtZSkge1xuXG4gIHZhciBwcm9wZXJ0eSA9IHRoaXMubW9kZWwuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgbmFtZSk7XG5cbiAgaWYgKCFwcm9wZXJ0eSkge1xuICAgIHJldHVybiB0YXJnZXQuJGF0dHJzW25hbWVdO1xuICB9XG5cbiAgdmFyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5Lm5hbWU7XG5cbiAgLy8gY2hlY2sgaWYgYWNjZXNzIHRvIGNvbGxlY3Rpb24gcHJvcGVydHkgYW5kIGxhemlseSBpbml0aWFsaXplIGl0XG4gIGlmICghdGFyZ2V0W3Byb3BlcnR5TmFtZV0gJiYgcHJvcGVydHkuaXNNYW55KSB7XG4gICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgW10pO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eU5hbWVdO1xufTtcblxuXG4vKipcbiAqIERlZmluZSBhIHByb3BlcnR5IG9uIHRoZSB0YXJnZXQgZWxlbWVudFxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICovXG5Qcm9wZXJ0aWVzLnByb3RvdHlwZS5kZWZpbmUgPSBmdW5jdGlvbih0YXJnZXQsIG5hbWUsIG9wdGlvbnMpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwgb3B0aW9ucyk7XG59O1xuXG5cbi8qKlxuICogRGVmaW5lIHRoZSBkZXNjcmlwdG9yIGZvciBhbiBlbGVtZW50XG4gKi9cblByb3BlcnRpZXMucHJvdG90eXBlLmRlZmluZURlc2NyaXB0b3IgPSBmdW5jdGlvbih0YXJnZXQsIGRlc2NyaXB0b3IpIHtcbiAgdGhpcy5kZWZpbmUodGFyZ2V0LCAnJGRlc2NyaXB0b3InLCB7IHZhbHVlOiBkZXNjcmlwdG9yIH0pO1xufTtcblxuLyoqXG4gKiBEZWZpbmUgdGhlIG1vZGVsIGZvciBhbiBlbGVtZW50XG4gKi9cblByb3BlcnRpZXMucHJvdG90eXBlLmRlZmluZU1vZGVsID0gZnVuY3Rpb24odGFyZ2V0LCBtb2RlbCkge1xuICB0aGlzLmRlZmluZSh0YXJnZXQsICckbW9kZWwnLCB7IHZhbHVlOiBtb2RlbCB9KTtcbn07XG5cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJztcbn1cblxuZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHkubmFtZSwge1xuICAgIGVudW1lcmFibGU6ICFwcm9wZXJ0eS5pc1JlZmVyZW5jZSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG4vLy8vIE1vZGRsZSBpbXBsZW1lbnRhdGlvbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQGNsYXNzIE1vZGRsZVxuICpcbiAqIEEgbW9kZWwgdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgZWxlbWVudHMgb2YgYSBzcGVjaWZpYyB0eXBlLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIE1vZGRsZSA9IHJlcXVpcmUoJ21vZGRsZScpO1xuICpcbiAqIHZhciBwa2cgPSB7XG4gKiAgIG5hbWU6ICdteXBhY2thZ2UnLFxuICogICBwcmVmaXg6ICdteScsXG4gKiAgIHR5cGVzOiBbXG4gKiAgICAgeyBuYW1lOiAnUm9vdCcgfVxuICogICBdXG4gKiB9O1xuICpcbiAqIHZhciBtb2RkbGUgPSBuZXcgTW9kZGxlKFtwa2ddKTtcbiAqXG4gKiBAcGFyYW0ge0FycmF5PFBhY2thZ2U+fSBwYWNrYWdlcyB0aGUgcGFja2FnZXMgdG8gY29udGFpblxuICovXG5mdW5jdGlvbiBNb2RkbGUocGFja2FnZXMpIHtcblxuICB0aGlzLnByb3BlcnRpZXMgPSBuZXcgUHJvcGVydGllcyh0aGlzKTtcblxuICB0aGlzLmZhY3RvcnkgPSBuZXcgRmFjdG9yeSh0aGlzLCB0aGlzLnByb3BlcnRpZXMpO1xuICB0aGlzLnJlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5KHBhY2thZ2VzLCB0aGlzLnByb3BlcnRpZXMpO1xuXG4gIHRoaXMudHlwZUNhY2hlID0ge307XG59XG5cblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIHNwZWNpZmllZCB0eXBlLlxuICpcbiAqIEBtZXRob2QgTW9kZGxlI2NyZWF0ZVxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGZvbyA9IG1vZGRsZS5jcmVhdGUoJ215OkZvbycpO1xuICogdmFyIGJhciA9IG1vZGRsZS5jcmVhdGUoJ215OkJhcicsIHsgaWQ6ICdCQVJfMScgfSk7XG4gKlxuICogQHBhcmFtICB7U3RyaW5nfE9iamVjdH0gZGVzY3JpcHRvciB0aGUgdHlwZSBkZXNjcmlwdG9yIG9yIG5hbWUga25vdyB0byB0aGUgbW9kZWxcbiAqIEBwYXJhbSAge09iamVjdH0gYXR0cnMgICBhIG51bWJlciBvZiBhdHRyaWJ1dGVzIHRvIGluaXRpYWxpemUgdGhlIG1vZGVsIGluc3RhbmNlIHdpdGhcbiAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICBtb2RlbCBpbnN0YW5jZVxuICovXG5Nb2RkbGUucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uKGRlc2NyaXB0b3IsIGF0dHJzKSB7XG4gIHZhciBUeXBlID0gdGhpcy5nZXRUeXBlKGRlc2NyaXB0b3IpO1xuXG4gIGlmICghVHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biB0eXBlIDwnICsgZGVzY3JpcHRvciArICc+Jyk7XG4gIH1cblxuICByZXR1cm4gbmV3IFR5cGUoYXR0cnMpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIHR5cGUgcmVwcmVzZW50aW5nIGEgZ2l2ZW4gZGVzY3JpcHRvclxuICpcbiAqIEBtZXRob2QgTW9kZGxlI2dldFR5cGVcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBGb28gPSBtb2RkbGUuZ2V0VHlwZSgnbXk6Rm9vJyk7XG4gKiB2YXIgZm9vID0gbmV3IEZvbyh7ICdpZCcgOiAnRk9PXzEnIH0pO1xuICpcbiAqIEBwYXJhbSAge1N0cmluZ3xPYmplY3R9IGRlc2NyaXB0b3IgdGhlIHR5cGUgZGVzY3JpcHRvciBvciBuYW1lIGtub3cgdG8gdGhlIG1vZGVsXG4gKiBAcmV0dXJuIHtPYmplY3R9ICAgICAgICAgdGhlIHR5cGUgcmVwcmVzZW50aW5nIHRoZSBkZXNjcmlwdG9yXG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uKGRlc2NyaXB0b3IpIHtcblxuICB2YXIgY2FjaGUgPSB0aGlzLnR5cGVDYWNoZTtcblxuICB2YXIgbmFtZSA9IGlzU3RyaW5nKGRlc2NyaXB0b3IpID8gZGVzY3JpcHRvciA6IGRlc2NyaXB0b3IubnMubmFtZTtcblxuICB2YXIgdHlwZSA9IGNhY2hlW25hbWVdO1xuXG4gIGlmICghdHlwZSkge1xuICAgIGRlc2NyaXB0b3IgPSB0aGlzLnJlZ2lzdHJ5LmdldEVmZmVjdGl2ZURlc2NyaXB0b3IobmFtZSk7XG4gICAgdHlwZSA9IGNhY2hlW25hbWVdID0gdGhpcy5mYWN0b3J5LmNyZWF0ZVR5cGUoZGVzY3JpcHRvcik7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFueS1lbGVtZW50IHR5cGUgdG8gYmUgdXNlZCB3aXRoaW4gbW9kZWwgaW5zdGFuY2VzLlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGN1c3RvbSBlbGVtZW50cyB0aGF0IGxpZSBvdXRzaWRlIHRoZSBtZXRhLW1vZGVsLlxuICogVGhlIGNyZWF0ZWQgZWxlbWVudCBjb250YWlucyBhbGwgdGhlIG1ldGEtZGF0YSByZXF1aXJlZCB0byBzZXJpYWxpemUgaXRcbiAqIGFzIHBhcnQgb2YgbWV0YS1tb2RlbCBlbGVtZW50cy5cbiAqXG4gKiBAbWV0aG9kIE1vZGRsZSNjcmVhdGVBbnlcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBmb28gPSBtb2RkbGUuY3JlYXRlQW55KCd2ZW5kb3I6Rm9vJywgJ2h0dHA6Ly92ZW5kb3InLCB7XG4gKiAgIHZhbHVlOiAnYmFyJ1xuICogfSk7XG4gKlxuICogdmFyIGNvbnRhaW5lciA9IG1vZGRsZS5jcmVhdGUoJ215OkNvbnRhaW5lcicsICdodHRwOi8vbXknLCB7XG4gKiAgIGFueTogWyBmb28gXVxuICogfSk7XG4gKlxuICogLy8gZ28gYWhlYWQgYW5kIHNlcmlhbGl6ZSB0aGUgc3R1ZmZcbiAqXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBuYW1lICB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudFxuICogQHBhcmFtICB7U3RyaW5nfSBuc1VyaSB0aGUgbmFtZXNwYWNlIHVyaSBvZiB0aGUgZWxlbWVudFxuICogQHBhcmFtICB7T2JqZWN0fSBbcHJvcGVydGllc10gYSBtYXAgb2YgcHJvcGVydGllcyB0byBpbml0aWFsaXplIHRoZSBpbnN0YW5jZSB3aXRoXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBhbnkgdHlwZSBpbnN0YW5jZVxuICovXG5Nb2RkbGUucHJvdG90eXBlLmNyZWF0ZUFueSA9IGZ1bmN0aW9uKG5hbWUsIG5zVXJpLCBwcm9wZXJ0aWVzKSB7XG5cbiAgdmFyIG5hbWVOcyA9IHBhcnNlTmFtZShuYW1lKTtcblxuICB2YXIgZWxlbWVudCA9IHtcbiAgICAkdHlwZTogbmFtZSxcbiAgICAkaW5zdGFuY2VPZjogZnVuY3Rpb24odHlwZSkge1xuICAgICAgcmV0dXJuIHR5cGUgPT09IHRoaXMuJHR5cGU7XG4gICAgfVxuICB9O1xuXG4gIHZhciBkZXNjcmlwdG9yID0ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgaXNHZW5lcmljOiB0cnVlLFxuICAgIG5zOiB7XG4gICAgICBwcmVmaXg6IG5hbWVOcy5wcmVmaXgsXG4gICAgICBsb2NhbE5hbWU6IG5hbWVOcy5sb2NhbE5hbWUsXG4gICAgICB1cmk6IG5zVXJpXG4gICAgfVxuICB9O1xuXG4gIHRoaXMucHJvcGVydGllcy5kZWZpbmVEZXNjcmlwdG9yKGVsZW1lbnQsIGRlc2NyaXB0b3IpO1xuICB0aGlzLnByb3BlcnRpZXMuZGVmaW5lTW9kZWwoZWxlbWVudCwgdGhpcyk7XG4gIHRoaXMucHJvcGVydGllcy5kZWZpbmUoZWxlbWVudCwgJyRwYXJlbnQnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSB9KTtcblxuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKGEsIGtleSkge1xuICAgIGlmIChpc09iamVjdChhKSAmJiBhLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVsZW1lbnRbYS5uYW1lXSA9IGEudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnRba2V5XSA9IGE7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWxlbWVudDtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHJlZ2lzdGVyZWQgcGFja2FnZSBieSB1cmkgb3IgcHJlZml4XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB0aGUgcGFja2FnZVxuICovXG5Nb2RkbGUucHJvdG90eXBlLmdldFBhY2thZ2UgPSBmdW5jdGlvbih1cmlPclByZWZpeCkge1xuICByZXR1cm4gdGhpcy5yZWdpc3RyeS5nZXRQYWNrYWdlKHVyaU9yUHJlZml4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHNuYXBzaG90IG9mIGFsbCBrbm93biBwYWNrYWdlc1xuICpcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIHBhY2thZ2VcbiAqL1xuTW9kZGxlLnByb3RvdHlwZS5nZXRQYWNrYWdlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5yZWdpc3RyeS5nZXRQYWNrYWdlcygpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZXNjcmlwdG9yIGZvciBhbiBlbGVtZW50XG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuZ2V0RWxlbWVudERlc2NyaXB0b3IgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LiRkZXNjcmlwdG9yO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGRlc2NyaXB0b3Igb3IgaW5zdGFuY2VcbiAqIHJlcHJlc2VudHMgdGhlIGdpdmVuIHR5cGUuXG4gKlxuICogTWF5IGJlIGFwcGxpZWQgdG8gdGhpcywgaWYgZWxlbWVudCBpcyBvbWl0dGVkLlxuICovXG5Nb2RkbGUucHJvdG90eXBlLmhhc1R5cGUgPSBmdW5jdGlvbihlbGVtZW50LCB0eXBlKSB7XG4gIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICB0eXBlID0gZWxlbWVudDtcbiAgICBlbGVtZW50ID0gdGhpcztcbiAgfVxuXG4gIHZhciBkZXNjcmlwdG9yID0gZWxlbWVudC4kbW9kZWwuZ2V0RWxlbWVudERlc2NyaXB0b3IoZWxlbWVudCk7XG5cbiAgcmV0dXJuICh0eXBlIGluIGRlc2NyaXB0b3IuYWxsVHlwZXNCeU5hbWUpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZXNjcmlwdG9yIG9mIGFuIGVsZW1lbnRzIG5hbWVkIHByb3BlcnR5XG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuZ2V0UHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHkpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudERlc2NyaXB0b3IoZWxlbWVudCkucHJvcGVydGllc0J5TmFtZVtwcm9wZXJ0eV07XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBtYXBwZWQgdHlwZSdzIGRlc2NyaXB0b3JcbiAqL1xuTW9kZGxlLnByb3RvdHlwZS5nZXRUeXBlRGVzY3JpcHRvciA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgcmV0dXJuIHRoaXMucmVnaXN0cnkudHlwZU1hcFt0eXBlXTtcbn07XG5cbmV4cG9ydCB7IE1vZGRsZSwgY29lcmNlVHlwZSwgaXNCdWlsdEluIGFzIGlzQnVpbHRJblR5cGUsIGlzU2ltcGxlIGFzIGlzU2ltcGxlVHlwZSwgcGFyc2VOYW1lIGFzIHBhcnNlTmFtZU5TIH07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL3JlZnMnKTtcblxubW9kdWxlLmV4cG9ydHMuQ29sbGVjdGlvbiA9IHJlcXVpcmUoJy4vbGliL2NvbGxlY3Rpb24nKTsiLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQW4gZW1wdHkgY29sbGVjdGlvbiBzdHViLiBVc2Uge0BsaW5rIFJlZnNDb2xsZWN0aW9uLmV4dGVuZH0gdG8gZXh0ZW5kIGFcbiAqIGNvbGxlY3Rpb24gd2l0aCByZWYgc2VtYW50aWNzLlxuICpcbiAqIEBjbGFzcyBSZWZzQ29sbGVjdGlvblxuICovXG5cbi8qKlxuICogRXh0ZW5kcyBhIGNvbGxlY3Rpb24gd2l0aCB7QGxpbmsgUmVmc30gYXdhcmUgbWV0aG9kc1xuICpcbiAqIEBtZW1iZXJvZiBSZWZzQ29sbGVjdGlvblxuICogQHN0YXRpY1xuICpcbiAqIEBwYXJhbSAge0FycmF5PE9iamVjdD59IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSAge1JlZnN9IHJlZnMgaW5zdGFuY2VcbiAqIEBwYXJhbSAge09iamVjdH0gcHJvcGVydHkgcmVwcmVzZW50ZWQgYnkgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0IG9iamVjdCB0aGUgY29sbGVjdGlvbiBpcyBhdHRhY2hlZCB0b1xuICpcbiAqIEByZXR1cm4ge1JlZnNDb2xsZWN0aW9uPE9iamVjdD59IHRoZSBleHRlbmRlZCBhcnJheVxuICovXG5mdW5jdGlvbiBleHRlbmQoY29sbGVjdGlvbiwgcmVmcywgcHJvcGVydHksIHRhcmdldCkge1xuXG4gIHZhciBpbnZlcnNlUHJvcGVydHkgPSBwcm9wZXJ0eS5pbnZlcnNlO1xuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBnaXZlbiBlbGVtZW50IGZyb20gdGhlIGFycmF5IGFuZCByZXR1cm5zIGl0LlxuICAgKlxuICAgKiBAbWV0aG9kIFJlZnNDb2xsZWN0aW9uI3JlbW92ZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudCB0aGUgZWxlbWVudCB0byByZW1vdmVcbiAgICovXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb2xsZWN0aW9uLCAncmVtb3ZlJywge1xuICAgIHZhbHVlOiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICB2YXIgaWR4ID0gdGhpcy5pbmRleE9mKGVsZW1lbnQpO1xuICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5zcGxpY2UoaWR4LCAxKTtcblxuICAgICAgICAvLyB1bnNldCBpbnZlcnNlXG4gICAgICAgIHJlZnMudW5zZXQoZWxlbWVudCwgaW52ZXJzZVByb3BlcnR5LCB0YXJnZXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbGxlY3Rpb24gY29udGFpbnMgdGhlIGdpdmVuIGVsZW1lbnRcbiAgICpcbiAgICogQG1ldGhvZCBSZWZzQ29sbGVjdGlvbiNjb250YWluc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudCB0aGUgZWxlbWVudCB0byBjaGVjayBmb3JcbiAgICovXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb2xsZWN0aW9uLCAnY29udGFpbnMnLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLmluZGV4T2YoZWxlbWVudCkgIT09IC0xO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZWxlbWVudCB0byB0aGUgYXJyYXksIHVubGVzcyBpdCBleGlzdHMgYWxyZWFkeSAoc2V0IHNlbWFudGljcykuXG4gICAqXG4gICAqIEBtZXRob2QgUmVmc0NvbGxlY3Rpb24jYWRkXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIGFkZFxuICAgKiBAcGFyYW0ge051bWJlcn0gb3B0aW9uYWwgaW5kZXggdG8gYWRkIGVsZW1lbnQgdG9cbiAgICogICAgICAgICAgICAgICAgIChwb3NzaWJseSBtb3Zpbmcgb3RoZXIgZWxlbWVudHMgYXJvdW5kKVxuICAgKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbGxlY3Rpb24sICdhZGQnLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uKGVsZW1lbnQsIGlkeCkge1xuXG4gICAgICB2YXIgY3VycmVudElkeCA9IHRoaXMuaW5kZXhPZihlbGVtZW50KTtcblxuICAgICAgaWYgKHR5cGVvZiBpZHggPT09ICd1bmRlZmluZWQnKSB7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRJZHggIT09IC0xKSB7XG4gICAgICAgICAgLy8gZWxlbWVudCBhbHJlYWR5IGluIGNvbGxlY3Rpb24gKCEpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHRvIGVuZCBvZiBhcnJheSwgYXMgbm8gaWR4IGlzIHNwZWNpZmllZFxuICAgICAgICBpZHggPSB0aGlzLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgLy8gaGFuZGxlIGFscmVhZHkgaW4gY29sbGVjdGlvblxuICAgICAgaWYgKGN1cnJlbnRJZHggIT09IC0xKSB7XG5cbiAgICAgICAgLy8gcmVtb3ZlIGVsZW1lbnQgZnJvbSBjdXJyZW50SWR4XG4gICAgICAgIHRoaXMuc3BsaWNlKGN1cnJlbnRJZHgsIDEpO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgZWxlbWVudCBhdCBpZHhcbiAgICAgIHRoaXMuc3BsaWNlKGlkeCwgMCwgZWxlbWVudCk7XG5cbiAgICAgIGlmIChjdXJyZW50SWR4ID09PSAtMSkge1xuICAgICAgICAvLyBzZXQgaW52ZXJzZSwgdW5sZXNzIGVsZW1lbnQgd2FzXG4gICAgICAgIC8vIGluIGNvbGxlY3Rpb24gYWxyZWFkeVxuICAgICAgICByZWZzLnNldChlbGVtZW50LCBpbnZlcnNlUHJvcGVydHksIHRhcmdldCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyBhIHNpbXBsZSBtYXJrZXIsIGlkZW50aWZ5aW5nIHRoaXMgZWxlbWVudFxuICAvLyBhcyBiZWluZyBhIHJlZnMgY29sbGVjdGlvblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29sbGVjdGlvbiwgJ19fcmVmc19jb2xsZWN0aW9uJywge1xuICAgIHZhbHVlOiB0cnVlXG4gIH0pO1xuXG4gIHJldHVybiBjb2xsZWN0aW9uO1xufVxuXG5cbmZ1bmN0aW9uIGlzRXh0ZW5kZWQoY29sbGVjdGlvbikge1xuICByZXR1cm4gY29sbGVjdGlvbi5fX3JlZnNfY29sbGVjdGlvbiA9PT0gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZXh0ZW5kID0gZXh0ZW5kO1xuXG5tb2R1bGUuZXhwb3J0cy5pc0V4dGVuZGVkID0gaXNFeHRlbmRlZDsiLCIndXNlIHN0cmljdCc7XG5cbnZhciBDb2xsZWN0aW9uID0gcmVxdWlyZSgnLi9jb2xsZWN0aW9uJyk7XG5cbmZ1bmN0aW9uIGhhc093blByb3BlcnR5KGUsIHByb3BlcnR5KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwgcHJvcGVydHkubmFtZSB8fCBwcm9wZXJ0eSk7XG59XG5cbmZ1bmN0aW9uIGRlZmluZUNvbGxlY3Rpb25Qcm9wZXJ0eShyZWYsIHByb3BlcnR5LCB0YXJnZXQpIHtcblxuICB2YXIgY29sbGVjdGlvbiA9IENvbGxlY3Rpb24uZXh0ZW5kKHRhcmdldFtwcm9wZXJ0eS5uYW1lXSB8fCBbXSwgcmVmLCBwcm9wZXJ0eSwgdGFyZ2V0KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eS5uYW1lLCB7XG4gICAgZW51bWVyYWJsZTogcHJvcGVydHkuZW51bWVyYWJsZSxcbiAgICB2YWx1ZTogY29sbGVjdGlvblxuICB9KTtcblxuICBpZiAoY29sbGVjdGlvbi5sZW5ndGgpIHtcblxuICAgIGNvbGxlY3Rpb24uZm9yRWFjaChmdW5jdGlvbihvKSB7XG4gICAgICByZWYuc2V0KG8sIHByb3BlcnR5LmludmVyc2UsIHRhcmdldCk7XG4gICAgfSk7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShyZWYsIHByb3BlcnR5LCB0YXJnZXQpIHtcblxuICB2YXIgaW52ZXJzZVByb3BlcnR5ID0gcHJvcGVydHkuaW52ZXJzZTtcblxuICB2YXIgX3ZhbHVlID0gdGFyZ2V0W3Byb3BlcnR5Lm5hbWVdO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5Lm5hbWUsIHtcbiAgICBjb25maWd1cmFibGU6IHByb3BlcnR5LmNvbmZpZ3VyYWJsZSxcbiAgICBlbnVtZXJhYmxlOiBwcm9wZXJ0eS5lbnVtZXJhYmxlLFxuXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBfdmFsdWU7XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcblxuICAgICAgLy8gcmV0dXJuIGlmIHdlIGFscmVhZHkgcGVyZm9ybWVkIGFsbCBjaGFuZ2VzXG4gICAgICBpZiAodmFsdWUgPT09IF92YWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBvbGQgPSBfdmFsdWU7XG5cbiAgICAgIC8vIHRlbXBvcmFyeSBzZXQgbnVsbFxuICAgICAgX3ZhbHVlID0gbnVsbDtcblxuICAgICAgaWYgKG9sZCkge1xuICAgICAgICByZWYudW5zZXQob2xkLCBpbnZlcnNlUHJvcGVydHksIHRhcmdldCk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNldCBuZXcgdmFsdWVcbiAgICAgIF92YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAvLyBzZXQgaW52ZXJzZSB2YWx1ZVxuICAgICAgcmVmLnNldChfdmFsdWUsIGludmVyc2VQcm9wZXJ0eSwgdGFyZ2V0KTtcbiAgICB9XG4gIH0pO1xuXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyByZWZlcmVuY2VzIG9iamVjdCBkZWZpbmluZyB0d28gaW52ZXJzbHkgcmVsYXRlZFxuICogYXR0cmlidXRlIGRlc2NyaXB0b3JzIGEgYW5kIGIuXG4gKlxuICogPHA+XG4gKiAgIFdoZW4gYm91bmQgdG8gYW4gb2JqZWN0IHVzaW5nIHtAbGluayBSZWZzI2JpbmR9IHRoZSByZWZlcmVuY2VzXG4gKiAgIGdldCBhY3RpdmF0ZWQgYW5kIGVuc3VyZSB0aGF0IGFkZCBhbmQgcmVtb3ZlIG9wZXJhdGlvbnMgYXJlIGFwcGxpZWRcbiAqICAgcmV2ZXJzZWx5LCB0b28uXG4gKiA8L3A+XG4gKlxuICogPHA+XG4gKiAgIEZvciBhdHRyaWJ1dGVzIHJlcHJlc2VudGVkIGFzIGNvbGxlY3Rpb25zIHtAbGluayBSZWZzfSBwcm92aWRlcyB0aGVcbiAqICAge0BsaW5rIFJlZnNDb2xsZWN0aW9uI2FkZH0sIHtAbGluayBSZWZzQ29sbGVjdGlvbiNyZW1vdmV9IGFuZCB7QGxpbmsgUmVmc0NvbGxlY3Rpb24jY29udGFpbnN9IGV4dGVuc2lvbnNcbiAqICAgdGhhdCBtdXN0IGJlIHVzZWQgdG8gcHJvcGVybHkgaG9vayBpbnRvIHRoZSBpbnZlcnNlIGNoYW5nZSBtZWNoYW5pc20uXG4gKiA8L3A+XG4gKlxuICogQGNsYXNzIFJlZnNcbiAqXG4gKiBAY2xhc3NkZXNjIEEgYmktZGlyZWN0aW9uYWwgcmVmZXJlbmNlIGJldHdlZW4gdHdvIGF0dHJpYnV0ZXMuXG4gKlxuICogQHBhcmFtIHtSZWZzLkF0dHJpYnV0ZURlc2NyaXB0b3J9IGEgcHJvcGVydHkgZGVzY3JpcHRvclxuICogQHBhcmFtIHtSZWZzLkF0dHJpYnV0ZURlc2NyaXB0b3J9IGIgcHJvcGVydHkgZGVzY3JpcHRvclxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHJlZnMgPSBSZWZzKHsgbmFtZTogJ3doZWVscycsIGNvbGxlY3Rpb246IHRydWUsIGVudW1lcmFibGU6IHRydWUgfSwgeyBuYW1lOiAnY2FyJyB9KTtcbiAqXG4gKiB2YXIgY2FyID0geyBuYW1lOiAndG95b3RhJyB9O1xuICogdmFyIHdoZWVscyA9IFt7IHBvczogJ2Zyb250LWxlZnQnIH0sIHsgcG9zOiAnZnJvbnQtcmlnaHQnIH1dO1xuICpcbiAqIHJlZnMuYmluZChjYXIsICd3aGVlbHMnKTtcbiAqXG4gKiBjYXIud2hlZWxzIC8vIFtdXG4gKiBjYXIud2hlZWxzLmFkZCh3aGVlbHNbMF0pO1xuICogY2FyLndoZWVscy5hZGQod2hlZWxzWzFdKTtcbiAqXG4gKiBjYXIud2hlZWxzIC8vIFt7IHBvczogJ2Zyb250LWxlZnQnIH0sIHsgcG9zOiAnZnJvbnQtcmlnaHQnIH1dXG4gKlxuICogd2hlZWxzWzBdLmNhciAvLyB7IG5hbWU6ICd0b3lvdGEnIH07XG4gKiBjYXIud2hlZWxzLnJlbW92ZSh3aGVlbHNbMF0pO1xuICpcbiAqIHdoZWVsc1swXS5jYXIgLy8gdW5kZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIFJlZnMoYSwgYikge1xuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWZzKSkge1xuICAgIHJldHVybiBuZXcgUmVmcyhhLCBiKTtcbiAgfVxuXG4gIC8vIGxpbmtcbiAgYS5pbnZlcnNlID0gYjtcbiAgYi5pbnZlcnNlID0gYTtcblxuICB0aGlzLnByb3BzID0ge307XG4gIHRoaXMucHJvcHNbYS5uYW1lXSA9IGE7XG4gIHRoaXMucHJvcHNbYi5uYW1lXSA9IGI7XG59XG5cbi8qKlxuICogQmluZHMgb25lIHNpZGUgb2YgYSBiaS1kaXJlY3Rpb25hbCByZWZlcmVuY2UgdG8gYVxuICogdGFyZ2V0IG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyT2YgUmVmc1xuICpcbiAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0gIHtTdHJpbmd9IHByb3BlcnR5XG4gKi9cblJlZnMucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbih0YXJnZXQsIHByb3BlcnR5KSB7XG4gIGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCF0aGlzLnByb3BzW3Byb3BlcnR5XSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBwcm9wZXJ0eSA8JyArIHByb3BlcnR5ICsgJz4gaW4gcmVmJyk7XG4gICAgfVxuICAgIHByb3BlcnR5ID0gdGhpcy5wcm9wc1twcm9wZXJ0eV07XG4gIH1cblxuICBpZiAocHJvcGVydHkuY29sbGVjdGlvbikge1xuICAgIGRlZmluZUNvbGxlY3Rpb25Qcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eSwgdGFyZ2V0KTtcbiAgfSBlbHNlIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eSwgdGFyZ2V0KTtcbiAgfVxufTtcblxuUmVmcy5wcm90b3R5cGUuZW5zdXJlUmVmc0NvbGxlY3Rpb24gPSBmdW5jdGlvbih0YXJnZXQsIHByb3BlcnR5KSB7XG5cbiAgdmFyIGNvbGxlY3Rpb24gPSB0YXJnZXRbcHJvcGVydHkubmFtZV07XG5cbiAgaWYgKCFDb2xsZWN0aW9uLmlzRXh0ZW5kZWQoY29sbGVjdGlvbikpIHtcbiAgICBkZWZpbmVDb2xsZWN0aW9uUHJvcGVydHkodGhpcywgcHJvcGVydHksIHRhcmdldCk7XG4gIH1cblxuICByZXR1cm4gY29sbGVjdGlvbjtcbn07XG5cblJlZnMucHJvdG90eXBlLmVuc3VyZUJvdW5kID0gZnVuY3Rpb24odGFyZ2V0LCBwcm9wZXJ0eSkge1xuICBpZiAoIWhhc093blByb3BlcnR5KHRhcmdldCwgcHJvcGVydHkpKSB7XG4gICAgdGhpcy5iaW5kKHRhcmdldCwgcHJvcGVydHkpO1xuICB9XG59O1xuXG5SZWZzLnByb3RvdHlwZS51bnNldCA9IGZ1bmN0aW9uKHRhcmdldCwgcHJvcGVydHksIHZhbHVlKSB7XG5cbiAgaWYgKHRhcmdldCkge1xuICAgIHRoaXMuZW5zdXJlQm91bmQodGFyZ2V0LCBwcm9wZXJ0eSk7XG5cbiAgICBpZiAocHJvcGVydHkuY29sbGVjdGlvbikge1xuICAgICAgdGhpcy5lbnN1cmVSZWZzQ29sbGVjdGlvbih0YXJnZXQsIHByb3BlcnR5KS5yZW1vdmUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRbcHJvcGVydHkubmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59O1xuXG5SZWZzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbih0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSkge1xuXG4gIGlmICh0YXJnZXQpIHtcbiAgICB0aGlzLmVuc3VyZUJvdW5kKHRhcmdldCwgcHJvcGVydHkpO1xuXG4gICAgaWYgKHByb3BlcnR5LmNvbGxlY3Rpb24pIHtcbiAgICAgIHRoaXMuZW5zdXJlUmVmc0NvbGxlY3Rpb24odGFyZ2V0LCBwcm9wZXJ0eSkuYWRkKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0W3Byb3BlcnR5Lm5hbWVdID0gdmFsdWU7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlZnM7XG5cblxuLyoqXG4gKiBBbiBhdHRyaWJ1dGUgZGVzY3JpcHRvciB0byBiZSB1c2VkIHNwZWNpZnkgYW4gYXR0cmlidXRlIGluIGEge0BsaW5rIFJlZnN9IGluc3RhbmNlXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gUmVmcy5BdHRyaWJ1dGVEZXNjcmlwdG9yXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbmFtZVxuICogQHByb3BlcnR5IHtib29sZWFufSBbY29sbGVjdGlvbj1mYWxzZV1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2VudW1lcmFibGU9ZmFsc2VdXG4gKi8iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIHNvdXJjZSBjb2RlIGFkYXB0ZWQgZnJvbSBTbmFwLnN2ZyAobGljZW5zZWQgQXBhY2hlLTIuMCkuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYWRvYmUtd2VicGxhdGZvcm0vU25hcC5zdmcvYmxvYi9tYXN0ZXIvc3JjL3BhdGguanNcbiAqL1xuXG4vKiBlc2xpbnQgbm8tZmFsbHRocm91Z2g6IFwib2ZmXCIgKi9cblxudmFyIHAycyA9IC8sPyhbYS16XSksPy9naSxcbiAgICB0b0Zsb2F0ID0gcGFyc2VGbG9hdCxcbiAgICBtYXRoID0gTWF0aCxcbiAgICBQSSA9IG1hdGguUEksXG4gICAgbW1pbiA9IG1hdGgubWluLFxuICAgIG1tYXggPSBtYXRoLm1heCxcbiAgICBwb3cgPSBtYXRoLnBvdyxcbiAgICBhYnMgPSBtYXRoLmFicyxcbiAgICBwYXRoQ29tbWFuZCA9IC8oW2Etel0pW1xccyxdKigoLT9cXGQqXFwuP1xcZCooPzplWy0rXT9cXGQrKT9bXFxzXSosP1tcXHNdKikrKS9pZyxcbiAgICBwYXRoVmFsdWVzID0gLygtP1xcZCpcXC4/XFxkKig/OmVbLStdP1xcXFxkKyk/KVtcXHNdKiw/W1xcc10qL2lnO1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24obykgeyByZXR1cm4gbyBpbnN0YW5jZW9mIEFycmF5OyB9O1xuXG5mdW5jdGlvbiBoYXNQcm9wZXJ0eShvYmosIHByb3BlcnR5KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wZXJ0eSk7XG59XG5cbmZ1bmN0aW9uIGNsb25lKG9iaikge1xuXG4gIGlmICh0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicgfHwgT2JqZWN0KG9iaikgIT09IG9iaikge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVzID0gbmV3IG9iai5jb25zdHJ1Y3RvcjtcblxuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKGhhc1Byb3BlcnR5KG9iaiwga2V5KSkge1xuICAgICAgcmVzW2tleV0gPSBjbG9uZShvYmpba2V5XSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gcmVwdXNoKGFycmF5LCBpdGVtKSB7XG4gIGZvciAodmFyIGkgPSAwLCBpaSA9IGFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIGlmIChhcnJheVtpXSA9PT0gaXRlbSkge1xuICAgIHJldHVybiBhcnJheS5wdXNoKGFycmF5LnNwbGljZShpLCAxKVswXSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FjaGVyKGYpIHtcblxuICBmdW5jdGlvbiBuZXdmKCkge1xuXG4gICAgdmFyIGFyZyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCksXG4gICAgICAgIGFyZ3MgPSBhcmcuam9pbignXFx1MjQwMCcpLFxuICAgICAgICBjYWNoZSA9IG5ld2YuY2FjaGUgPSBuZXdmLmNhY2hlIHx8IHt9LFxuICAgICAgICBjb3VudCA9IG5ld2YuY291bnQgPSBuZXdmLmNvdW50IHx8IFtdO1xuXG4gICAgaWYgKGhhc1Byb3BlcnR5KGNhY2hlLCBhcmdzKSkge1xuICAgICAgcmVwdXNoKGNvdW50LCBhcmdzKTtcbiAgICAgIHJldHVybiBjYWNoZVthcmdzXTtcbiAgICB9XG5cbiAgICBjb3VudC5sZW5ndGggPj0gMWUzICYmIGRlbGV0ZSBjYWNoZVtjb3VudC5zaGlmdCgpXTtcbiAgICBjb3VudC5wdXNoKGFyZ3MpO1xuICAgIGNhY2hlW2FyZ3NdID0gZi5hcHBseSgwLCBhcmcpO1xuXG4gICAgcmV0dXJuIGNhY2hlW2FyZ3NdO1xuICB9XG4gIHJldHVybiBuZXdmO1xufVxuXG5mdW5jdGlvbiBwYXJzZVBhdGhTdHJpbmcocGF0aFN0cmluZykge1xuXG4gIGlmICghcGF0aFN0cmluZykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHB0aCA9IHBhdGhzKHBhdGhTdHJpbmcpO1xuXG4gIGlmIChwdGguYXJyKSB7XG4gICAgcmV0dXJuIGNsb25lKHB0aC5hcnIpO1xuICB9XG5cbiAgdmFyIHBhcmFtQ291bnRzID0geyBhOiA3LCBjOiA2LCBoOiAxLCBsOiAyLCBtOiAyLCBxOiA0LCBzOiA0LCB0OiAyLCB2OiAxLCB6OiAwIH0sXG4gICAgICBkYXRhID0gW107XG5cbiAgaWYgKGlzQXJyYXkocGF0aFN0cmluZykgJiYgaXNBcnJheShwYXRoU3RyaW5nWzBdKSkgeyAvLyByb3VnaCBhc3N1bXB0aW9uXG4gICAgZGF0YSA9IGNsb25lKHBhdGhTdHJpbmcpO1xuICB9XG5cbiAgaWYgKCFkYXRhLmxlbmd0aCkge1xuXG4gICAgU3RyaW5nKHBhdGhTdHJpbmcpLnJlcGxhY2UocGF0aENvbW1hbmQsIGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgIHZhciBwYXJhbXMgPSBbXSxcbiAgICAgICAgICBuYW1lID0gYi50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBjLnJlcGxhY2UocGF0aFZhbHVlcywgZnVuY3Rpb24oYSwgYikge1xuICAgICAgICBiICYmIHBhcmFtcy5wdXNoKCtiKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAobmFtZSA9PSAnbScgJiYgcGFyYW1zLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgZGF0YS5wdXNoKFtiXS5jb25jYXQocGFyYW1zLnNwbGljZSgwLCAyKSkpO1xuICAgICAgICBuYW1lID0gJ2wnO1xuICAgICAgICBiID0gYiA9PSAnbScgPyAnbCcgOiAnTCc7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChwYXJhbXMubGVuZ3RoID49IHBhcmFtQ291bnRzW25hbWVdKSB7XG4gICAgICAgIGRhdGEucHVzaChbYl0uY29uY2F0KHBhcmFtcy5zcGxpY2UoMCwgcGFyYW1Db3VudHNbbmFtZV0pKSk7XG4gICAgICAgIGlmICghcGFyYW1Db3VudHNbbmFtZV0pIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZGF0YS50b1N0cmluZyA9IHBhdGhzLnRvU3RyaW5nO1xuICBwdGguYXJyID0gY2xvbmUoZGF0YSk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIHBhdGhzKHBzKSB7XG4gIHZhciBwID0gcGF0aHMucHMgPSBwYXRocy5wcyB8fCB7fTtcblxuICBpZiAocFtwc10pIHtcbiAgICBwW3BzXS5zbGVlcCA9IDEwMDtcbiAgfSBlbHNlIHtcbiAgICBwW3BzXSA9IHtcbiAgICAgIHNsZWVwOiAxMDBcbiAgICB9O1xuICB9XG5cbiAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcCkge1xuICAgICAgaWYgKGhhc1Byb3BlcnR5KHAsIGtleSkgJiYga2V5ICE9IHBzKSB7XG4gICAgICAgIHBba2V5XS5zbGVlcC0tO1xuICAgICAgICAhcFtrZXldLnNsZWVwICYmIGRlbGV0ZSBwW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcFtwc107XG59XG5cbmZ1bmN0aW9uIHJlY3RCQm94KHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHkgPSB4Lnk7XG4gICAgd2lkdGggPSB4LndpZHRoO1xuICAgIGhlaWdodCA9IHguaGVpZ2h0O1xuICAgIHggPSB4Lng7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IHgsXG4gICAgeTogeSxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgeDI6IHggKyB3aWR0aCxcbiAgICB5MjogeSArIGhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXRoVG9TdHJpbmcoKSB7XG4gIHJldHVybiB0aGlzLmpvaW4oJywnKS5yZXBsYWNlKHAycywgJyQxJyk7XG59XG5cbmZ1bmN0aW9uIHBhdGhDbG9uZShwYXRoQXJyYXkpIHtcbiAgdmFyIHJlcyA9IGNsb25lKHBhdGhBcnJheSk7XG4gIHJlcy50b1N0cmluZyA9IHBhdGhUb1N0cmluZztcbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gZmluZERvdHNBdFNlZ21lbnQocDF4LCBwMXksIGMxeCwgYzF5LCBjMngsIGMyeSwgcDJ4LCBwMnksIHQpIHtcbiAgdmFyIHQxID0gMSAtIHQsXG4gICAgICB0MTMgPSBwb3codDEsIDMpLFxuICAgICAgdDEyID0gcG93KHQxLCAyKSxcbiAgICAgIHQyID0gdCAqIHQsXG4gICAgICB0MyA9IHQyICogdCxcbiAgICAgIHggPSB0MTMgKiBwMXggKyB0MTIgKiAzICogdCAqIGMxeCArIHQxICogMyAqIHQgKiB0ICogYzJ4ICsgdDMgKiBwMngsXG4gICAgICB5ID0gdDEzICogcDF5ICsgdDEyICogMyAqIHQgKiBjMXkgKyB0MSAqIDMgKiB0ICogdCAqIGMyeSArIHQzICogcDJ5O1xuXG4gIHJldHVybiB7XG4gICAgeDogZml4RXJyb3IoeCksXG4gICAgeTogZml4RXJyb3IoeSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gYmV6aWVyQkJveChwb2ludHMpIHtcblxuICB2YXIgYmJveCA9IGN1cnZlQkJveC5hcHBseShudWxsLCBwb2ludHMpO1xuXG4gIHJldHVybiByZWN0QkJveChcbiAgICBiYm94LngwLFxuICAgIGJib3gueTAsXG4gICAgYmJveC54MSAtIGJib3gueDAsXG4gICAgYmJveC55MSAtIGJib3gueTBcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNQb2ludEluc2lkZUJCb3goYmJveCwgeCwgeSkge1xuICByZXR1cm4geCA+PSBiYm94LnggJiZcbiAgICB4IDw9IGJib3gueCArIGJib3gud2lkdGggJiZcbiAgICB5ID49IGJib3gueSAmJlxuICAgIHkgPD0gYmJveC55ICsgYmJveC5oZWlnaHQ7XG59XG5cbmZ1bmN0aW9uIGlzQkJveEludGVyc2VjdChiYm94MSwgYmJveDIpIHtcbiAgYmJveDEgPSByZWN0QkJveChiYm94MSk7XG4gIGJib3gyID0gcmVjdEJCb3goYmJveDIpO1xuICByZXR1cm4gaXNQb2ludEluc2lkZUJCb3goYmJveDIsIGJib3gxLngsIGJib3gxLnkpXG4gICAgfHwgaXNQb2ludEluc2lkZUJCb3goYmJveDIsIGJib3gxLngyLCBiYm94MS55KVxuICAgIHx8IGlzUG9pbnRJbnNpZGVCQm94KGJib3gyLCBiYm94MS54LCBiYm94MS55MilcbiAgICB8fCBpc1BvaW50SW5zaWRlQkJveChiYm94MiwgYmJveDEueDIsIGJib3gxLnkyKVxuICAgIHx8IGlzUG9pbnRJbnNpZGVCQm94KGJib3gxLCBiYm94Mi54LCBiYm94Mi55KVxuICAgIHx8IGlzUG9pbnRJbnNpZGVCQm94KGJib3gxLCBiYm94Mi54MiwgYmJveDIueSlcbiAgICB8fCBpc1BvaW50SW5zaWRlQkJveChiYm94MSwgYmJveDIueCwgYmJveDIueTIpXG4gICAgfHwgaXNQb2ludEluc2lkZUJCb3goYmJveDEsIGJib3gyLngyLCBiYm94Mi55MilcbiAgICB8fCAoYmJveDEueCA8IGJib3gyLngyICYmIGJib3gxLnggPiBiYm94Mi54XG4gICAgICAgIHx8IGJib3gyLnggPCBiYm94MS54MiAmJiBiYm94Mi54ID4gYmJveDEueClcbiAgICAmJiAoYmJveDEueSA8IGJib3gyLnkyICYmIGJib3gxLnkgPiBiYm94Mi55XG4gICAgICAgIHx8IGJib3gyLnkgPCBiYm94MS55MiAmJiBiYm94Mi55ID4gYmJveDEueSk7XG59XG5cbmZ1bmN0aW9uIGJhc2UzKHQsIHAxLCBwMiwgcDMsIHA0KSB7XG4gIHZhciB0MSA9IC0zICogcDEgKyA5ICogcDIgLSA5ICogcDMgKyAzICogcDQsXG4gICAgICB0MiA9IHQgKiB0MSArIDYgKiBwMSAtIDEyICogcDIgKyA2ICogcDM7XG4gIHJldHVybiB0ICogdDIgLSAzICogcDEgKyAzICogcDI7XG59XG5cbmZ1bmN0aW9uIGJlemxlbih4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB4NCwgeTQsIHopIHtcblxuICBpZiAoeiA9PSBudWxsKSB7XG4gICAgeiA9IDE7XG4gIH1cblxuICB6ID0geiA+IDEgPyAxIDogeiA8IDAgPyAwIDogejtcblxuICB2YXIgejIgPSB6IC8gMixcbiAgICAgIG4gPSAxMixcbiAgICAgIFR2YWx1ZXMgPSBbLS4xMjUyLC4xMjUyLC0uMzY3OCwuMzY3OCwtLjU4NzMsLjU4NzMsLS43Njk5LC43Njk5LC0uOTA0MSwuOTA0MSwtLjk4MTYsLjk4MTZdLFxuICAgICAgQ3ZhbHVlcyA9IFswLjI0OTEsMC4yNDkxLDAuMjMzNSwwLjIzMzUsMC4yMDMyLDAuMjAzMiwwLjE2MDEsMC4xNjAxLDAuMTA2OSwwLjEwNjksMC4wNDcyLDAuMDQ3Ml0sXG4gICAgICBzdW0gPSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgdmFyIGN0ID0gejIgKiBUdmFsdWVzW2ldICsgejIsXG4gICAgICAgIHhiYXNlID0gYmFzZTMoY3QsIHgxLCB4MiwgeDMsIHg0KSxcbiAgICAgICAgeWJhc2UgPSBiYXNlMyhjdCwgeTEsIHkyLCB5MywgeTQpLFxuICAgICAgICBjb21iID0geGJhc2UgKiB4YmFzZSArIHliYXNlICogeWJhc2U7XG5cbiAgICBzdW0gKz0gQ3ZhbHVlc1tpXSAqIG1hdGguc3FydChjb21iKTtcbiAgfVxuXG4gIHJldHVybiB6MiAqIHN1bTtcbn1cblxuXG5mdW5jdGlvbiBpbnRlcnNlY3RMaW5lcyh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB4NCwgeTQpIHtcblxuICBpZiAoXG4gICAgbW1heCh4MSwgeDIpIDwgbW1pbih4MywgeDQpIHx8XG4gICAgICBtbWluKHgxLCB4MikgPiBtbWF4KHgzLCB4NCkgfHxcbiAgICAgIG1tYXgoeTEsIHkyKSA8IG1taW4oeTMsIHk0KSB8fFxuICAgICAgbW1pbih5MSwgeTIpID4gbW1heCh5MywgeTQpXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBueCA9ICh4MSAqIHkyIC0geTEgKiB4MikgKiAoeDMgLSB4NCkgLSAoeDEgLSB4MikgKiAoeDMgKiB5NCAtIHkzICogeDQpLFxuICAgICAgbnkgPSAoeDEgKiB5MiAtIHkxICogeDIpICogKHkzIC0geTQpIC0gKHkxIC0geTIpICogKHgzICogeTQgLSB5MyAqIHg0KSxcbiAgICAgIGRlbm9taW5hdG9yID0gKHgxIC0geDIpICogKHkzIC0geTQpIC0gKHkxIC0geTIpICogKHgzIC0geDQpO1xuXG4gIGlmICghZGVub21pbmF0b3IpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcHggPSBmaXhFcnJvcihueCAvIGRlbm9taW5hdG9yKSxcbiAgICAgIHB5ID0gZml4RXJyb3IobnkgLyBkZW5vbWluYXRvciksXG4gICAgICBweDIgPSArcHgudG9GaXhlZCgyKSxcbiAgICAgIHB5MiA9ICtweS50b0ZpeGVkKDIpO1xuXG4gIGlmIChcbiAgICBweDIgPCArbW1pbih4MSwgeDIpLnRvRml4ZWQoMikgfHxcbiAgICAgIHB4MiA+ICttbWF4KHgxLCB4MikudG9GaXhlZCgyKSB8fFxuICAgICAgcHgyIDwgK21taW4oeDMsIHg0KS50b0ZpeGVkKDIpIHx8XG4gICAgICBweDIgPiArbW1heCh4MywgeDQpLnRvRml4ZWQoMikgfHxcbiAgICAgIHB5MiA8ICttbWluKHkxLCB5MikudG9GaXhlZCgyKSB8fFxuICAgICAgcHkyID4gK21tYXgoeTEsIHkyKS50b0ZpeGVkKDIpIHx8XG4gICAgICBweTIgPCArbW1pbih5MywgeTQpLnRvRml4ZWQoMikgfHxcbiAgICAgIHB5MiA+ICttbWF4KHkzLCB5NCkudG9GaXhlZCgyKVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4geyB4OiBweCwgeTogcHkgfTtcbn1cblxuZnVuY3Rpb24gZml4RXJyb3IobnVtYmVyKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKG51bWJlciAqIDEwMDAwMDAwMDAwMCkgLyAxMDAwMDAwMDAwMDA7XG59XG5cbmZ1bmN0aW9uIGZpbmRCZXppZXJJbnRlcnNlY3Rpb25zKGJlejEsIGJlejIsIGp1c3RDb3VudCkge1xuICB2YXIgYmJveDEgPSBiZXppZXJCQm94KGJlejEpLFxuICAgICAgYmJveDIgPSBiZXppZXJCQm94KGJlejIpO1xuXG4gIGlmICghaXNCQm94SW50ZXJzZWN0KGJib3gxLCBiYm94MikpIHtcbiAgICByZXR1cm4ganVzdENvdW50ID8gMCA6IFtdO1xuICB9XG5cbiAgLy8gQXMgYW4gb3B0aW1pemF0aW9uLCBsaW5lcyB3aWxsIGhhdmUgb25seSAxIHNlZ21lbnRcblxuICB2YXIgbDEgPSBiZXpsZW4uYXBwbHkoMCwgYmV6MSksXG4gICAgICBsMiA9IGJlemxlbi5hcHBseSgwLCBiZXoyKSxcbiAgICAgIG4xID0gaXNMaW5lKGJlejEpID8gMSA6IH5+KGwxIC8gNSkgfHwgMSxcbiAgICAgIG4yID0gaXNMaW5lKGJlejIpID8gMSA6IH5+KGwyIC8gNSkgfHwgMSxcbiAgICAgIGRvdHMxID0gW10sXG4gICAgICBkb3RzMiA9IFtdLFxuICAgICAgeHkgPSB7fSxcbiAgICAgIHJlcyA9IGp1c3RDb3VudCA/IDAgOiBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG4xICsgMTsgaSsrKSB7XG4gICAgdmFyIHAgPSBmaW5kRG90c0F0U2VnbWVudC5hcHBseSgwLCBiZXoxLmNvbmNhdChpIC8gbjEpKTtcbiAgICBkb3RzMS5wdXNoKHsgeDogcC54LCB5OiBwLnksIHQ6IGkgLyBuMSB9KTtcbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBuMiArIDE7IGkrKykge1xuICAgIHAgPSBmaW5kRG90c0F0U2VnbWVudC5hcHBseSgwLCBiZXoyLmNvbmNhdChpIC8gbjIpKTtcbiAgICBkb3RzMi5wdXNoKHsgeDogcC54LCB5OiBwLnksIHQ6IGkgLyBuMiB9KTtcbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBuMTsgaSsrKSB7XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG4yOyBqKyspIHtcbiAgICAgIHZhciBkaSA9IGRvdHMxW2ldLFxuICAgICAgICAgIGRpMSA9IGRvdHMxW2kgKyAxXSxcbiAgICAgICAgICBkaiA9IGRvdHMyW2pdLFxuICAgICAgICAgIGRqMSA9IGRvdHMyW2ogKyAxXSxcbiAgICAgICAgICBjaSA9IGFicyhkaTEueCAtIGRpLngpIDwgLjAxID8gJ3knIDogJ3gnLFxuICAgICAgICAgIGNqID0gYWJzKGRqMS54IC0gZGoueCkgPCAuMDEgPyAneScgOiAneCcsXG4gICAgICAgICAgaXMgPSBpbnRlcnNlY3RMaW5lcyhkaS54LCBkaS55LCBkaTEueCwgZGkxLnksIGRqLngsIGRqLnksIGRqMS54LCBkajEueSksXG4gICAgICAgICAga2V5O1xuXG4gICAgICBpZiAoaXMpIHtcbiAgICAgICAga2V5ID0gaXMueC50b0ZpeGVkKDkpICsgJyMnICsgaXMueS50b0ZpeGVkKDkpO1xuXG4gICAgICAgIGlmICh4eVtrZXldKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB4eVtrZXldID0gdHJ1ZTtcblxuICAgICAgICB2YXIgdDEgPSBkaS50ICsgYWJzKChpc1tjaV0gLSBkaVtjaV0pIC8gKGRpMVtjaV0gLSBkaVtjaV0pKSAqIChkaTEudCAtIGRpLnQpLFxuICAgICAgICAgICAgdDIgPSBkai50ICsgYWJzKChpc1tjal0gLSBkaltjal0pIC8gKGRqMVtjal0gLSBkaltjal0pKSAqIChkajEudCAtIGRqLnQpO1xuXG4gICAgICAgIGlmICh0MSA+PSAwICYmIHQxIDw9IDEgJiYgdDIgPj0gMCAmJiB0MiA8PSAxKSB7XG5cbiAgICAgICAgICBpZiAoanVzdENvdW50KSB7XG4gICAgICAgICAgICByZXMrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzLnB1c2goe1xuICAgICAgICAgICAgICB4OiBpcy54LFxuICAgICAgICAgICAgICB5OiBpcy55LFxuICAgICAgICAgICAgICB0MTogdDEsXG4gICAgICAgICAgICAgIHQyOiB0MlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuXG4vKipcbiAqIEZpbmQgb3IgY291bnRzIHRoZSBpbnRlcnNlY3Rpb25zIGJldHdlZW4gdHdvIFNWRyBwYXRocy5cbiAqXG4gKiBSZXR1cm5zIGEgbnVtYmVyIGluIGNvdW50aW5nIG1vZGUgYW5kIGEgbGlzdCBvZiBpbnRlcnNlY3Rpb25zIG90aGVyd2lzZS5cbiAqXG4gKiBBIHNpbmdsZSBpbnRlcnNlY3Rpb24gZW50cnkgY29udGFpbnMgdGhlIGludGVyc2VjdGlvbiBjb29yZGluYXRlcyAoeCwgeSlcbiAqIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIGludGVyc2VjdGluZyBzZWdtZW50c1xuICogb24gZWFjaCBwYXRoIChzZWdtZW50MSwgc2VnbWVudDIpIGFuZCB0aGUgcmVsYXRpdmUgbG9jYXRpb24gb2YgdGhlXG4gKiBpbnRlcnNlY3Rpb24gb24gdGhlc2Ugc2VnbWVudHMgKHQxLCB0MikuXG4gKlxuICogVGhlIHBhdGggbWF5IGJlIGFuIFNWRyBwYXRoIHN0cmluZyBvciBhIGxpc3Qgb2YgcGF0aCBjb21wb25lbnRzXG4gKiBzdWNoIGFzIGBbIFsgJ00nLCAwLCAxMCBdLCBbICdMJywgMjAsIDAgXSBdYC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBpbnRlcnNlY3Rpb25zID0gZmluZFBhdGhJbnRlcnNlY3Rpb25zKFxuICogICAnTTAsMEwxMDAsMTAwJyxcbiAqICAgWyBbICdNJywgMCwgMTAwIF0sIFsgJ0wnLCAxMDAsIDAgXSBdXG4gKiApO1xuICpcbiAqIC8vIGludGVyc2VjdGlvbnMgPSBbXG4gKiAvLyAgIHsgeDogNTAsIHk6IDUwLCBzZWdtZW50MTogMSwgc2VnbWVudDI6IDEsIHQxOiAwLjUsIHQyOiAwLjUgfVxuICogLy8gXVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5PFBhdGhEZWY+fSBwYXRoMVxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXk8UGF0aERlZj59IHBhdGgyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtqdXN0Q291bnQ9ZmFsc2VdXG4gKlxuICogQHJldHVybiB7QXJyYXk8SW50ZXJzZWN0aW9uPnxOdW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGZpbmRQYXRoSW50ZXJzZWN0aW9ucyhwYXRoMSwgcGF0aDIsIGp1c3RDb3VudCkge1xuICBwYXRoMSA9IHBhdGhUb0N1cnZlKHBhdGgxKTtcbiAgcGF0aDIgPSBwYXRoVG9DdXJ2ZShwYXRoMik7XG5cbiAgdmFyIHgxLCB5MSwgeDIsIHkyLCB4MW0sIHkxbSwgeDJtLCB5Mm0sIGJlejEsIGJlejIsXG4gICAgICByZXMgPSBqdXN0Q291bnQgPyAwIDogW107XG5cbiAgZm9yICh2YXIgaSA9IDAsIGlpID0gcGF0aDEubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgIHZhciBwaSA9IHBhdGgxW2ldO1xuXG4gICAgaWYgKHBpWzBdID09ICdNJykge1xuICAgICAgeDEgPSB4MW0gPSBwaVsxXTtcbiAgICAgIHkxID0geTFtID0gcGlbMl07XG4gICAgfSBlbHNlIHtcblxuICAgICAgaWYgKHBpWzBdID09ICdDJykge1xuICAgICAgICBiZXoxID0gW3gxLCB5MV0uY29uY2F0KHBpLnNsaWNlKDEpKTtcbiAgICAgICAgeDEgPSBiZXoxWzZdO1xuICAgICAgICB5MSA9IGJlejFbN107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZXoxID0gW3gxLCB5MSwgeDEsIHkxLCB4MW0sIHkxbSwgeDFtLCB5MW1dO1xuICAgICAgICB4MSA9IHgxbTtcbiAgICAgICAgeTEgPSB5MW07XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IHBhdGgyLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgdmFyIHBqID0gcGF0aDJbal07XG5cbiAgICAgICAgaWYgKHBqWzBdID09ICdNJykge1xuICAgICAgICAgIHgyID0geDJtID0gcGpbMV07XG4gICAgICAgICAgeTIgPSB5Mm0gPSBwalsyXTtcbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgIGlmIChwalswXSA9PSAnQycpIHtcbiAgICAgICAgICAgIGJlejIgPSBbeDIsIHkyXS5jb25jYXQocGouc2xpY2UoMSkpO1xuICAgICAgICAgICAgeDIgPSBiZXoyWzZdO1xuICAgICAgICAgICAgeTIgPSBiZXoyWzddO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiZXoyID0gW3gyLCB5MiwgeDIsIHkyLCB4Mm0sIHkybSwgeDJtLCB5Mm1dO1xuICAgICAgICAgICAgeDIgPSB4Mm07XG4gICAgICAgICAgICB5MiA9IHkybTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgaW50ciA9IGZpbmRCZXppZXJJbnRlcnNlY3Rpb25zKGJlejEsIGJlejIsIGp1c3RDb3VudCk7XG5cbiAgICAgICAgICBpZiAoanVzdENvdW50KSB7XG4gICAgICAgICAgICByZXMgKz0gaW50cjtcbiAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMCwga2sgPSBpbnRyLmxlbmd0aDsgayA8IGtrOyBrKyspIHtcbiAgICAgICAgICAgICAgaW50cltrXS5zZWdtZW50MSA9IGk7XG4gICAgICAgICAgICAgIGludHJba10uc2VnbWVudDIgPSBqO1xuICAgICAgICAgICAgICBpbnRyW2tdLmJlejEgPSBiZXoxO1xuICAgICAgICAgICAgICBpbnRyW2tdLmJlejIgPSBiZXoyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXMgPSByZXMuY29uY2F0KGludHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXM7XG59XG5cblxuZnVuY3Rpb24gcGF0aFRvQWJzb2x1dGUocGF0aEFycmF5KSB7XG4gIHZhciBwdGggPSBwYXRocyhwYXRoQXJyYXkpO1xuXG4gIGlmIChwdGguYWJzKSB7XG4gICAgcmV0dXJuIHBhdGhDbG9uZShwdGguYWJzKTtcbiAgfVxuXG4gIGlmICghaXNBcnJheShwYXRoQXJyYXkpIHx8ICFpc0FycmF5KHBhdGhBcnJheSAmJiBwYXRoQXJyYXlbMF0pKSB7IC8vIHJvdWdoIGFzc3VtcHRpb25cbiAgICBwYXRoQXJyYXkgPSBwYXJzZVBhdGhTdHJpbmcocGF0aEFycmF5KTtcbiAgfVxuXG4gIGlmICghcGF0aEFycmF5IHx8ICFwYXRoQXJyYXkubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtbJ00nLCAwLCAwXV07XG4gIH1cblxuICB2YXIgcmVzID0gW10sXG4gICAgICB4ID0gMCxcbiAgICAgIHkgPSAwLFxuICAgICAgbXggPSAwLFxuICAgICAgbXkgPSAwLFxuICAgICAgc3RhcnQgPSAwLFxuICAgICAgcGEwO1xuXG4gIGlmIChwYXRoQXJyYXlbMF1bMF0gPT0gJ00nKSB7XG4gICAgeCA9ICtwYXRoQXJyYXlbMF1bMV07XG4gICAgeSA9ICtwYXRoQXJyYXlbMF1bMl07XG4gICAgbXggPSB4O1xuICAgIG15ID0geTtcbiAgICBzdGFydCsrO1xuICAgIHJlc1swXSA9IFsnTScsIHgsIHldO1xuICB9XG5cbiAgZm9yICh2YXIgciwgcGEsIGkgPSBzdGFydCwgaWkgPSBwYXRoQXJyYXkubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgIHJlcy5wdXNoKHIgPSBbXSk7XG4gICAgcGEgPSBwYXRoQXJyYXlbaV07XG4gICAgcGEwID0gcGFbMF07XG5cbiAgICBpZiAocGEwICE9IHBhMC50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICByWzBdID0gcGEwLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgIHN3aXRjaCAoclswXSkge1xuICAgICAgY2FzZSAnQSc6XG4gICAgICAgIHJbMV0gPSBwYVsxXTtcbiAgICAgICAgclsyXSA9IHBhWzJdO1xuICAgICAgICByWzNdID0gcGFbM107XG4gICAgICAgIHJbNF0gPSBwYVs0XTtcbiAgICAgICAgcls1XSA9IHBhWzVdO1xuICAgICAgICByWzZdID0gK3BhWzZdICsgeDtcbiAgICAgICAgcls3XSA9ICtwYVs3XSArIHk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnVic6XG4gICAgICAgIHJbMV0gPSArcGFbMV0gKyB5O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0gnOlxuICAgICAgICByWzFdID0gK3BhWzFdICsgeDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdNJzpcbiAgICAgICAgbXggPSArcGFbMV0gKyB4O1xuICAgICAgICBteSA9ICtwYVsyXSArIHk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBmb3IgKHZhciBqID0gMSwgamogPSBwYS5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgcltqXSA9ICtwYVtqXSArICgoaiAlIDIpID8geCA6IHkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGsgPSAwLCBrayA9IHBhLmxlbmd0aDsgayA8IGtrOyBrKyspIHtcbiAgICAgICAgcltrXSA9IHBhW2tdO1xuICAgICAgfVxuICAgIH1cbiAgICBwYTAgPSBwYTAudG9VcHBlckNhc2UoKTtcblxuICAgIHN3aXRjaCAoclswXSkge1xuICAgIGNhc2UgJ1onOlxuICAgICAgeCA9ICtteDtcbiAgICAgIHkgPSArbXk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdIJzpcbiAgICAgIHggPSByWzFdO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnVic6XG4gICAgICB5ID0gclsxXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ00nOlxuICAgICAgbXggPSByW3IubGVuZ3RoIC0gMl07XG4gICAgICBteSA9IHJbci5sZW5ndGggLSAxXTtcbiAgICBkZWZhdWx0OlxuICAgICAgeCA9IHJbci5sZW5ndGggLSAyXTtcbiAgICAgIHkgPSByW3IubGVuZ3RoIC0gMV07XG4gICAgfVxuICB9XG5cbiAgcmVzLnRvU3RyaW5nID0gcGF0aFRvU3RyaW5nO1xuICBwdGguYWJzID0gcGF0aENsb25lKHJlcyk7XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gaXNMaW5lKGJleikge1xuICByZXR1cm4gKFxuICAgIGJlelswXSA9PT0gYmV6WzJdICYmXG4gICAgYmV6WzFdID09PSBiZXpbM10gJiZcbiAgICBiZXpbNF0gPT09IGJlels2XSAmJlxuICAgIGJlels1XSA9PT0gYmV6WzddXG4gICk7XG59XG5cbmZ1bmN0aW9uIGxpbmVUb0N1cnZlKHgxLCB5MSwgeDIsIHkyKSB7XG4gIHJldHVybiBbXG4gICAgeDEsIHkxLCB4MixcbiAgICB5MiwgeDIsIHkyXG4gIF07XG59XG5cbmZ1bmN0aW9uIHF1YmljVG9DdXJ2ZSh4MSwgeTEsIGF4LCBheSwgeDIsIHkyKSB7XG4gIHZhciBfMTMgPSAxIC8gMyxcbiAgICAgIF8yMyA9IDIgLyAzO1xuXG4gIHJldHVybiBbXG4gICAgXzEzICogeDEgKyBfMjMgKiBheCxcbiAgICBfMTMgKiB5MSArIF8yMyAqIGF5LFxuICAgIF8xMyAqIHgyICsgXzIzICogYXgsXG4gICAgXzEzICogeTIgKyBfMjMgKiBheSxcbiAgICB4MixcbiAgICB5MlxuICBdO1xufVxuXG5mdW5jdGlvbiBhcmNUb0N1cnZlKHgxLCB5MSwgcngsIHJ5LCBhbmdsZSwgbGFyZ2VfYXJjX2ZsYWcsIHN3ZWVwX2ZsYWcsIHgyLCB5MiwgcmVjdXJzaXZlKSB7XG5cbiAgLy8gZm9yIG1vcmUgaW5mb3JtYXRpb24gb2Ygd2hlcmUgdGhpcyBtYXRoIGNhbWUgZnJvbSB2aXNpdDpcbiAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvaW1wbG5vdGUuaHRtbCNBcmNJbXBsZW1lbnRhdGlvbk5vdGVzXG4gIHZhciBfMTIwID0gUEkgKiAxMjAgLyAxODAsXG4gICAgICByYWQgPSBQSSAvIDE4MCAqICgrYW5nbGUgfHwgMCksXG4gICAgICByZXMgPSBbXSxcbiAgICAgIHh5LFxuICAgICAgcm90YXRlID0gY2FjaGVyKGZ1bmN0aW9uKHgsIHksIHJhZCkge1xuICAgICAgICB2YXIgWCA9IHggKiBtYXRoLmNvcyhyYWQpIC0geSAqIG1hdGguc2luKHJhZCksXG4gICAgICAgICAgICBZID0geCAqIG1hdGguc2luKHJhZCkgKyB5ICogbWF0aC5jb3MocmFkKTtcblxuICAgICAgICByZXR1cm4geyB4OiBYLCB5OiBZIH07XG4gICAgICB9KTtcblxuICBpZiAoIXJlY3Vyc2l2ZSkge1xuICAgIHh5ID0gcm90YXRlKHgxLCB5MSwgLXJhZCk7XG4gICAgeDEgPSB4eS54O1xuICAgIHkxID0geHkueTtcbiAgICB4eSA9IHJvdGF0ZSh4MiwgeTIsIC1yYWQpO1xuICAgIHgyID0geHkueDtcbiAgICB5MiA9IHh5Lnk7XG5cbiAgICB2YXIgeCA9ICh4MSAtIHgyKSAvIDIsXG4gICAgICAgIHkgPSAoeTEgLSB5MikgLyAyO1xuXG4gICAgdmFyIGggPSAoeCAqIHgpIC8gKHJ4ICogcngpICsgKHkgKiB5KSAvIChyeSAqIHJ5KTtcblxuICAgIGlmIChoID4gMSkge1xuICAgICAgaCA9IG1hdGguc3FydChoKTtcbiAgICAgIHJ4ID0gaCAqIHJ4O1xuICAgICAgcnkgPSBoICogcnk7XG4gICAgfVxuXG4gICAgdmFyIHJ4MiA9IHJ4ICogcngsXG4gICAgICAgIHJ5MiA9IHJ5ICogcnksXG4gICAgICAgIGsgPSAobGFyZ2VfYXJjX2ZsYWcgPT0gc3dlZXBfZmxhZyA/IC0xIDogMSkgKlxuICAgICAgICAgICAgbWF0aC5zcXJ0KGFicygocngyICogcnkyIC0gcngyICogeSAqIHkgLSByeTIgKiB4ICogeCkgLyAocngyICogeSAqIHkgKyByeTIgKiB4ICogeCkpKSxcbiAgICAgICAgY3ggPSBrICogcnggKiB5IC8gcnkgKyAoeDEgKyB4MikgLyAyLFxuICAgICAgICBjeSA9IGsgKiAtcnkgKiB4IC8gcnggKyAoeTEgKyB5MikgLyAyLFxuICAgICAgICBmMSA9IG1hdGguYXNpbigoKHkxIC0gY3kpIC8gcnkpLnRvRml4ZWQoOSkpLFxuICAgICAgICBmMiA9IG1hdGguYXNpbigoKHkyIC0gY3kpIC8gcnkpLnRvRml4ZWQoOSkpO1xuXG4gICAgZjEgPSB4MSA8IGN4ID8gUEkgLSBmMSA6IGYxO1xuICAgIGYyID0geDIgPCBjeCA/IFBJIC0gZjIgOiBmMjtcbiAgICBmMSA8IDAgJiYgKGYxID0gUEkgKiAyICsgZjEpO1xuICAgIGYyIDwgMCAmJiAoZjIgPSBQSSAqIDIgKyBmMik7XG5cbiAgICBpZiAoc3dlZXBfZmxhZyAmJiBmMSA+IGYyKSB7XG4gICAgICBmMSA9IGYxIC0gUEkgKiAyO1xuICAgIH1cbiAgICBpZiAoIXN3ZWVwX2ZsYWcgJiYgZjIgPiBmMSkge1xuICAgICAgZjIgPSBmMiAtIFBJICogMjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZjEgPSByZWN1cnNpdmVbMF07XG4gICAgZjIgPSByZWN1cnNpdmVbMV07XG4gICAgY3ggPSByZWN1cnNpdmVbMl07XG4gICAgY3kgPSByZWN1cnNpdmVbM107XG4gIH1cblxuICB2YXIgZGYgPSBmMiAtIGYxO1xuXG4gIGlmIChhYnMoZGYpID4gXzEyMCkge1xuICAgIHZhciBmMm9sZCA9IGYyLFxuICAgICAgICB4Mm9sZCA9IHgyLFxuICAgICAgICB5Mm9sZCA9IHkyO1xuXG4gICAgZjIgPSBmMSArIF8xMjAgKiAoc3dlZXBfZmxhZyAmJiBmMiA+IGYxID8gMSA6IC0xKTtcbiAgICB4MiA9IGN4ICsgcnggKiBtYXRoLmNvcyhmMik7XG4gICAgeTIgPSBjeSArIHJ5ICogbWF0aC5zaW4oZjIpO1xuICAgIHJlcyA9IGFyY1RvQ3VydmUoeDIsIHkyLCByeCwgcnksIGFuZ2xlLCAwLCBzd2VlcF9mbGFnLCB4Mm9sZCwgeTJvbGQsIFtmMiwgZjJvbGQsIGN4LCBjeV0pO1xuICB9XG5cbiAgZGYgPSBmMiAtIGYxO1xuXG4gIHZhciBjMSA9IG1hdGguY29zKGYxKSxcbiAgICAgIHMxID0gbWF0aC5zaW4oZjEpLFxuICAgICAgYzIgPSBtYXRoLmNvcyhmMiksXG4gICAgICBzMiA9IG1hdGguc2luKGYyKSxcbiAgICAgIHQgPSBtYXRoLnRhbihkZiAvIDQpLFxuICAgICAgaHggPSA0IC8gMyAqIHJ4ICogdCxcbiAgICAgIGh5ID0gNCAvIDMgKiByeSAqIHQsXG4gICAgICBtMSA9IFt4MSwgeTFdLFxuICAgICAgbTIgPSBbeDEgKyBoeCAqIHMxLCB5MSAtIGh5ICogYzFdLFxuICAgICAgbTMgPSBbeDIgKyBoeCAqIHMyLCB5MiAtIGh5ICogYzJdLFxuICAgICAgbTQgPSBbeDIsIHkyXTtcblxuICBtMlswXSA9IDIgKiBtMVswXSAtIG0yWzBdO1xuICBtMlsxXSA9IDIgKiBtMVsxXSAtIG0yWzFdO1xuXG4gIGlmIChyZWN1cnNpdmUpIHtcbiAgICByZXR1cm4gW20yLCBtMywgbTRdLmNvbmNhdChyZXMpO1xuICB9IGVsc2Uge1xuICAgIHJlcyA9IFttMiwgbTMsIG00XS5jb25jYXQocmVzKS5qb2luKCkuc3BsaXQoJywnKTtcbiAgICB2YXIgbmV3cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSByZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgbmV3cmVzW2ldID0gaSAlIDIgPyByb3RhdGUocmVzW2kgLSAxXSwgcmVzW2ldLCByYWQpLnkgOiByb3RhdGUocmVzW2ldLCByZXNbaSArIDFdLCByYWQpLng7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld3JlcztcbiAgfVxufVxuXG4vLyBSZXR1cm5zIGJvdW5kaW5nIGJveCBvZiBjdWJpYyBiZXppZXIgY3VydmUuXG4vLyBTb3VyY2U6IGh0dHA6Ly9ibG9nLmhhY2tlcnMtY2FmZS5uZXQvMjAwOS8wNi9ob3ctdG8tY2FsY3VsYXRlLWJlemllci1jdXJ2ZXMtYm91bmRpbmcuaHRtbFxuLy8gT3JpZ2luYWwgdmVyc2lvbjogTklTSElPIEhpcm9rYXp1XG4vLyBNb2RpZmljYXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vdGltbzIyMzQ1XG5mdW5jdGlvbiBjdXJ2ZUJCb3goeDAsIHkwLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKSB7XG4gIHZhciB0dmFsdWVzID0gW10sXG4gICAgICBib3VuZHMgPSBbW10sIFtdXSxcbiAgICAgIGEsIGIsIGMsIHQsIHQxLCB0MiwgYjJhYywgc3FydGIyYWM7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAyOyArK2kpIHtcblxuICAgIGlmIChpID09IDApIHtcbiAgICAgIGIgPSA2ICogeDAgLSAxMiAqIHgxICsgNiAqIHgyO1xuICAgICAgYSA9IC0zICogeDAgKyA5ICogeDEgLSA5ICogeDIgKyAzICogeDM7XG4gICAgICBjID0gMyAqIHgxIC0gMyAqIHgwO1xuICAgIH0gZWxzZSB7XG4gICAgICBiID0gNiAqIHkwIC0gMTIgKiB5MSArIDYgKiB5MjtcbiAgICAgIGEgPSAtMyAqIHkwICsgOSAqIHkxIC0gOSAqIHkyICsgMyAqIHkzO1xuICAgICAgYyA9IDMgKiB5MSAtIDMgKiB5MDtcbiAgICB9XG5cbiAgICBpZiAoYWJzKGEpIDwgMWUtMTIpIHtcblxuICAgICAgaWYgKGFicyhiKSA8IDFlLTEyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0ID0gLWMgLyBiO1xuXG4gICAgICBpZiAoMCA8IHQgJiYgdCA8IDEpIHtcbiAgICAgICAgdHZhbHVlcy5wdXNoKHQpO1xuICAgICAgfVxuXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBiMmFjID0gYiAqIGIgLSA0ICogYyAqIGE7XG4gICAgc3FydGIyYWMgPSBtYXRoLnNxcnQoYjJhYyk7XG5cbiAgICBpZiAoYjJhYyA8IDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHQxID0gKC1iICsgc3FydGIyYWMpIC8gKDIgKiBhKTtcblxuICAgIGlmICgwIDwgdDEgJiYgdDEgPCAxKSB7XG4gICAgICB0dmFsdWVzLnB1c2godDEpO1xuICAgIH1cblxuICAgIHQyID0gKC1iIC0gc3FydGIyYWMpIC8gKDIgKiBhKTtcblxuICAgIGlmICgwIDwgdDIgJiYgdDIgPCAxKSB7XG4gICAgICB0dmFsdWVzLnB1c2godDIpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBqID0gdHZhbHVlcy5sZW5ndGgsXG4gICAgICBqbGVuID0gaixcbiAgICAgIG10O1xuXG4gIHdoaWxlIChqLS0pIHtcbiAgICB0ID0gdHZhbHVlc1tqXTtcbiAgICBtdCA9IDEgLSB0O1xuICAgIGJvdW5kc1swXVtqXSA9IChtdCAqIG10ICogbXQgKiB4MCkgKyAoMyAqIG10ICogbXQgKiB0ICogeDEpICsgKDMgKiBtdCAqIHQgKiB0ICogeDIpICsgKHQgKiB0ICogdCAqIHgzKTtcbiAgICBib3VuZHNbMV1bal0gPSAobXQgKiBtdCAqIG10ICogeTApICsgKDMgKiBtdCAqIG10ICogdCAqIHkxKSArICgzICogbXQgKiB0ICogdCAqIHkyKSArICh0ICogdCAqIHQgKiB5Myk7XG4gIH1cblxuICBib3VuZHNbMF1bamxlbl0gPSB4MDtcbiAgYm91bmRzWzFdW2psZW5dID0geTA7XG4gIGJvdW5kc1swXVtqbGVuICsgMV0gPSB4MztcbiAgYm91bmRzWzFdW2psZW4gKyAxXSA9IHkzO1xuICBib3VuZHNbMF0ubGVuZ3RoID0gYm91bmRzWzFdLmxlbmd0aCA9IGpsZW4gKyAyO1xuXG4gIHJldHVybiB7XG4gICAgeDA6IG1taW4uYXBwbHkoMCwgYm91bmRzWzBdKSxcbiAgICB5MDogbW1pbi5hcHBseSgwLCBib3VuZHNbMV0pLFxuICAgIHgxOiBtbWF4LmFwcGx5KDAsIGJvdW5kc1swXSksXG4gICAgeTE6IG1tYXguYXBwbHkoMCwgYm91bmRzWzFdKVxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXRoVG9DdXJ2ZShwYXRoKSB7XG5cbiAgdmFyIHB0aCA9IHBhdGhzKHBhdGgpO1xuXG4gIC8vIHJldHVybiBjYWNoZWQgY3VydmUsIGlmIGV4aXN0aW5nXG4gIGlmIChwdGguY3VydmUpIHtcbiAgICByZXR1cm4gcGF0aENsb25lKHB0aC5jdXJ2ZSk7XG4gIH1cblxuICB2YXIgY3VydmVkUGF0aCA9IHBhdGhUb0Fic29sdXRlKHBhdGgpLFxuICAgICAgYXR0cnMgPSB7IHg6IDAsIHk6IDAsIGJ4OiAwLCBieTogMCwgWDogMCwgWTogMCwgcXg6IG51bGwsIHF5OiBudWxsIH0sXG4gICAgICBwcm9jZXNzUGF0aCA9IGZ1bmN0aW9uKHBhdGgsIGQsIHBhdGhDb21tYW5kKSB7XG4gICAgICAgIHZhciBueCwgbnk7XG5cbiAgICAgICAgaWYgKCFwYXRoKSB7XG4gICAgICAgICAgcmV0dXJuIFsnQycsIGQueCwgZC55LCBkLngsIGQueSwgZC54LCBkLnldO1xuICAgICAgICB9XG5cbiAgICAgICAgIShwYXRoWzBdIGluIHsgVDogMSwgUTogMSB9KSAmJiAoZC5xeCA9IGQucXkgPSBudWxsKTtcblxuICAgICAgICBzd2l0Y2ggKHBhdGhbMF0pIHtcbiAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgZC5YID0gcGF0aFsxXTtcbiAgICAgICAgICBkLlkgPSBwYXRoWzJdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdBJzpcbiAgICAgICAgICBwYXRoID0gWydDJ10uY29uY2F0KGFyY1RvQ3VydmUuYXBwbHkoMCwgW2QueCwgZC55XS5jb25jYXQocGF0aC5zbGljZSgxKSkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnUyc6XG4gICAgICAgICAgaWYgKHBhdGhDb21tYW5kID09ICdDJyB8fCBwYXRoQ29tbWFuZCA9PSAnUycpIHtcbiAgICAgICAgICAgIC8vIEluICdTJyBjYXNlIHdlIGhhdmUgdG8gdGFrZSBpbnRvIGFjY291bnQsIGlmIHRoZSBwcmV2aW91cyBjb21tYW5kIGlzIEMvUy5cbiAgICAgICAgICAgIG54ID0gZC54ICogMiAtIGQuYng7XG4gICAgICAgICAgICAvLyBBbmQgcmVmbGVjdCB0aGUgcHJldmlvdXNcbiAgICAgICAgICAgIG55ID0gZC55ICogMiAtIGQuYnk7XG4gICAgICAgICAgICAvLyBjb21tYW5kJ3MgY29udHJvbCBwb2ludCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwb2ludC5cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBvciBzb21lIGVsc2Ugb3Igbm90aGluZ1xuICAgICAgICAgICAgbnggPSBkLng7XG4gICAgICAgICAgICBueSA9IGQueTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGF0aCA9IFsnQycsIG54LCBueV0uY29uY2F0KHBhdGguc2xpY2UoMSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdUJzpcbiAgICAgICAgICBpZiAocGF0aENvbW1hbmQgPT0gJ1EnIHx8IHBhdGhDb21tYW5kID09ICdUJykge1xuICAgICAgICAgICAgLy8gSW4gJ1QnIGNhc2Ugd2UgaGF2ZSB0byB0YWtlIGludG8gYWNjb3VudCwgaWYgdGhlIHByZXZpb3VzIGNvbW1hbmQgaXMgUS9ULlxuICAgICAgICAgICAgZC5xeCA9IGQueCAqIDIgLSBkLnF4O1xuICAgICAgICAgICAgLy8gQW5kIG1ha2UgYSByZWZsZWN0aW9uIHNpbWlsYXJcbiAgICAgICAgICAgIGQucXkgPSBkLnkgKiAyIC0gZC5xeTtcbiAgICAgICAgICAgIC8vIHRvIGNhc2UgJ1MnLlxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIG9yIHNvbWV0aGluZyBlbHNlIG9yIG5vdGhpbmdcbiAgICAgICAgICAgIGQucXggPSBkLng7XG4gICAgICAgICAgICBkLnF5ID0gZC55O1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXRoID0gWydDJ10uY29uY2F0KHF1YmljVG9DdXJ2ZShkLngsIGQueSwgZC5xeCwgZC5xeSwgcGF0aFsxXSwgcGF0aFsyXSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdRJzpcbiAgICAgICAgICBkLnF4ID0gcGF0aFsxXTtcbiAgICAgICAgICBkLnF5ID0gcGF0aFsyXTtcbiAgICAgICAgICBwYXRoID0gWydDJ10uY29uY2F0KHF1YmljVG9DdXJ2ZShkLngsIGQueSwgcGF0aFsxXSwgcGF0aFsyXSwgcGF0aFszXSwgcGF0aFs0XSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdMJzpcbiAgICAgICAgICBwYXRoID0gWydDJ10uY29uY2F0KGxpbmVUb0N1cnZlKGQueCwgZC55LCBwYXRoWzFdLCBwYXRoWzJdKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0gnOlxuICAgICAgICAgIHBhdGggPSBbJ0MnXS5jb25jYXQobGluZVRvQ3VydmUoZC54LCBkLnksIHBhdGhbMV0sIGQueSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdWJzpcbiAgICAgICAgICBwYXRoID0gWydDJ10uY29uY2F0KGxpbmVUb0N1cnZlKGQueCwgZC55LCBkLngsIHBhdGhbMV0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnWic6XG4gICAgICAgICAgcGF0aCA9IFsnQyddLmNvbmNhdChsaW5lVG9DdXJ2ZShkLngsIGQueSwgZC5YLCBkLlkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgICAgfSxcblxuICAgICAgZml4QXJjID0gZnVuY3Rpb24ocHAsIGkpIHtcblxuICAgICAgICBpZiAocHBbaV0ubGVuZ3RoID4gNykge1xuICAgICAgICAgIHBwW2ldLnNoaWZ0KCk7XG4gICAgICAgICAgdmFyIHBpID0gcHBbaV07XG5cbiAgICAgICAgICB3aGlsZSAocGkubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXRoQ29tbWFuZHNbaV0gPSAnQSc7IC8vIGlmIGNyZWF0ZWQgbXVsdGlwbGUgQzpzLCB0aGVpciBvcmlnaW5hbCBzZWcgaXMgc2F2ZWRcbiAgICAgICAgICAgIHBwLnNwbGljZShpKyssIDAsIFsnQyddLmNvbmNhdChwaS5zcGxpY2UoMCwgNikpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgaWkgPSBjdXJ2ZWRQYXRoLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgcGF0aENvbW1hbmRzID0gW10sIC8vIHBhdGggY29tbWFuZHMgb2Ygb3JpZ2luYWwgcGF0aCBwXG4gICAgICBwZmlyc3QgPSAnJywgLy8gdGVtcG9yYXJ5IGhvbGRlciBmb3Igb3JpZ2luYWwgcGF0aCBjb21tYW5kXG4gICAgICBwYXRoQ29tbWFuZCA9ICcnOyAvLyBob2xkZXIgZm9yIHByZXZpb3VzIHBhdGggY29tbWFuZCBvZiBvcmlnaW5hbCBwYXRoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGlpID0gY3VydmVkUGF0aC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgY3VydmVkUGF0aFtpXSAmJiAocGZpcnN0ID0gY3VydmVkUGF0aFtpXVswXSk7IC8vIHNhdmUgY3VycmVudCBwYXRoIGNvbW1hbmRcblxuICAgIGlmIChwZmlyc3QgIT0gJ0MnKSAvLyBDIGlzIG5vdCBzYXZlZCB5ZXQsIGJlY2F1c2UgaXQgbWF5IGJlIHJlc3VsdCBvZiBjb252ZXJzaW9uXG4gICAge1xuICAgICAgcGF0aENvbW1hbmRzW2ldID0gcGZpcnN0OyAvLyBTYXZlIGN1cnJlbnQgcGF0aCBjb21tYW5kXG4gICAgICBpICYmIChwYXRoQ29tbWFuZCA9IHBhdGhDb21tYW5kc1tpIC0gMV0pOyAvLyBHZXQgcHJldmlvdXMgcGF0aCBjb21tYW5kIHBhdGhDb21tYW5kXG4gICAgfVxuICAgIGN1cnZlZFBhdGhbaV0gPSBwcm9jZXNzUGF0aChjdXJ2ZWRQYXRoW2ldLCBhdHRycywgcGF0aENvbW1hbmQpOyAvLyBQcmV2aW91cyBwYXRoIGNvbW1hbmQgaXMgaW5wdXR0ZWQgdG8gcHJvY2Vzc1BhdGhcblxuICAgIGlmIChwYXRoQ29tbWFuZHNbaV0gIT0gJ0EnICYmIHBmaXJzdCA9PSAnQycpIHBhdGhDb21tYW5kc1tpXSA9ICdDJzsgLy8gQSBpcyB0aGUgb25seSBjb21tYW5kXG4gICAgLy8gd2hpY2ggbWF5IHByb2R1Y2UgbXVsdGlwbGUgQzpzXG4gICAgLy8gc28gd2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBDIGlzIGFsc28gQyBpbiBvcmlnaW5hbCBwYXRoXG5cbiAgICBmaXhBcmMoY3VydmVkUGF0aCwgaSk7IC8vIGZpeEFyYyBhZGRzIGFsc28gdGhlIHJpZ2h0IGFtb3VudCBvZiBBOnMgdG8gcGF0aENvbW1hbmRzXG5cbiAgICB2YXIgc2VnID0gY3VydmVkUGF0aFtpXSxcbiAgICAgICAgc2VnbGVuID0gc2VnLmxlbmd0aDtcblxuICAgIGF0dHJzLnggPSBzZWdbc2VnbGVuIC0gMl07XG4gICAgYXR0cnMueSA9IHNlZ1tzZWdsZW4gLSAxXTtcbiAgICBhdHRycy5ieCA9IHRvRmxvYXQoc2VnW3NlZ2xlbiAtIDRdKSB8fCBhdHRycy54O1xuICAgIGF0dHJzLmJ5ID0gdG9GbG9hdChzZWdbc2VnbGVuIC0gM10pIHx8IGF0dHJzLnk7XG4gIH1cblxuICAvLyBjYWNoZSBjdXJ2ZVxuICBwdGguY3VydmUgPSBwYXRoQ2xvbmUoY3VydmVkUGF0aCk7XG5cbiAgcmV0dXJuIGN1cnZlZFBhdGg7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmluZFBhdGhJbnRlcnNlY3Rpb25zO1xuIiwidmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBFTlRJVFlfUEFUVEVSTiA9IC8mIyhcXGQrKTt8JiN4KFswLTlhLWZdKyk7fCYoXFx3Kyk7L2lnO1xuXG52YXIgRU5USVRZX01BUFBJTkcgPSB7XG4gICdhbXAnOiAnJicsXG4gICdhcG9zJzogJ1xcJycsXG4gICdndCc6ICc+JyxcbiAgJ2x0JzogJzwnLFxuICAncXVvdCc6ICdcIidcbn07XG5cbi8vIG1hcCBVUFBFUkNBU0UgdmFyaWFudHMgb2Ygc3VwcG9ydGVkIHNwZWNpYWwgY2hhcnNcbk9iamVjdC5rZXlzKEVOVElUWV9NQVBQSU5HKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgRU5USVRZX01BUFBJTkdbay50b1VwcGVyQ2FzZSgpXSA9IEVOVElUWV9NQVBQSU5HW2tdO1xufSk7XG5cblxuZnVuY3Rpb24gcmVwbGFjZUVudGl0aWVzKF8sIGQsIHgsIHopIHtcblxuICAvLyByZXNlcnZlZCBuYW1lcywgaS5lLiAmbmJzcDtcbiAgaWYgKHopIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChFTlRJVFlfTUFQUElORywgeikpIHtcbiAgICAgIHJldHVybiBFTlRJVFlfTUFQUElOR1t6XTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICAvLyBmYWxsIGJhY2sgdG8gb3JpZ2luYWwgdmFsdWVcbiAgICAgIHJldHVybiAnJicgKyB6ICsgJzsnO1xuICAgIH1cbiAgfVxuXG4gIC8vIGRlY2ltYWwgZW5jb2RlZCBjaGFyXG4gIGlmIChkKSB7XG4gICAgcmV0dXJuIGZyb21DaGFyQ29kZShkKTtcbiAgfVxuXG4gIC8vIGhleCBlbmNvZGVkIGNoYXJcbiAgcmV0dXJuIGZyb21DaGFyQ29kZShwYXJzZUludCh4LCAxNikpO1xufVxuXG5cbi8qKlxuICogQSBiYXNpYyBlbnRpdHkgZGVjb2RlciB0aGF0IGNhbiBkZWNvZGUgYSBtaW5pbWFsXG4gKiBzdWItc2V0IG9mIHJlc2VydmVkIG5hbWVzICgmYW1wOykgYXMgd2VsbCBhc1xuICogaGV4ICgmI3hhYWY7KSBhbmQgZGVjaW1hbCAoJiMxMjMxOykgZW5jb2RlZCBjaGFyYWN0ZXJzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9IGRlY29kZWQgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGRlY29kZUVudGl0aWVzKHMpIHtcbiAgaWYgKHMubGVuZ3RoID4gMyAmJiBzLmluZGV4T2YoJyYnKSAhPT0gLTEpIHtcbiAgICByZXR1cm4gcy5yZXBsYWNlKEVOVElUWV9QQVRURVJOLCByZXBsYWNlRW50aXRpZXMpO1xuICB9XG5cbiAgcmV0dXJuIHM7XG59XG5cbnZhciBYU0lfVVJJID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJztcbnZhciBYU0lfUFJFRklYID0gJ3hzaSc7XG52YXIgWFNJX1RZUEUgPSAneHNpOnR5cGUnO1xuXG52YXIgTk9OX1dISVRFU1BBQ0VfT1VUU0lERV9ST09UX05PREUgPSAnbm9uLXdoaXRlc3BhY2Ugb3V0c2lkZSBvZiByb290IG5vZGUnO1xuXG5mdW5jdGlvbiBlcnJvcihtc2cpIHtcbiAgcmV0dXJuIG5ldyBFcnJvcihtc2cpO1xufVxuXG5mdW5jdGlvbiBtaXNzaW5nTmFtZXNwYWNlRm9yUHJlZml4KHByZWZpeCkge1xuICByZXR1cm4gJ21pc3NpbmcgbmFtZXNwYWNlIGZvciBwcmVmaXggPCcgKyBwcmVmaXggKyAnPic7XG59XG5cbmZ1bmN0aW9uIGdldHRlcihnZXRGbikge1xuICByZXR1cm4ge1xuICAgICdnZXQnOiBnZXRGbixcbiAgICAnZW51bWVyYWJsZSc6IHRydWVcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2xvbmVOc01hdHJpeChuc01hdHJpeCkge1xuICB2YXIgY2xvbmUgPSB7fSwga2V5O1xuICBmb3IgKGtleSBpbiBuc01hdHJpeCkge1xuICAgIGNsb25lW2tleV0gPSBuc01hdHJpeFtrZXldO1xuICB9XG4gIHJldHVybiBjbG9uZTtcbn1cblxuZnVuY3Rpb24gdXJpUHJlZml4KHByZWZpeCkge1xuICByZXR1cm4gcHJlZml4ICsgJyR1cmknO1xufVxuXG5mdW5jdGlvbiBidWlsZE5zTWF0cml4KG5zVXJpVG9QcmVmaXgpIHtcbiAgdmFyIG5zTWF0cml4ID0ge30sXG4gICAgICB1cmksXG4gICAgICBwcmVmaXg7XG5cbiAgZm9yICh1cmkgaW4gbnNVcmlUb1ByZWZpeCkge1xuICAgIHByZWZpeCA9IG5zVXJpVG9QcmVmaXhbdXJpXTtcbiAgICBuc01hdHJpeFtwcmVmaXhdID0gcHJlZml4O1xuICAgIG5zTWF0cml4W3VyaVByZWZpeChwcmVmaXgpXSA9IHVyaTtcbiAgfVxuXG4gIHJldHVybiBuc01hdHJpeDtcbn1cblxuZnVuY3Rpb24gbm9vcEdldENvbnRleHQoKSB7XG4gIHJldHVybiB7ICdsaW5lJzogMCwgJ2NvbHVtbic6IDAgfTtcbn1cblxuZnVuY3Rpb24gdGhyb3dGdW5jKGVycikge1xuICB0aHJvdyBlcnI7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBwYXJzZXIgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqXG4gKiBAcGFyYW0gIHshT2JqZWN0PHN0cmluZywgPz49fSBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIFBhcnNlcihvcHRpb25zKSB7XG5cbiAgaWYgKCF0aGlzKSB7XG4gICAgcmV0dXJuIG5ldyBQYXJzZXIob3B0aW9ucyk7XG4gIH1cblxuICB2YXIgcHJveHkgPSBvcHRpb25zICYmIG9wdGlvbnNbJ3Byb3h5J107XG5cbiAgdmFyIG9uVGV4dCxcbiAgICAgIG9uT3BlblRhZyxcbiAgICAgIG9uQ2xvc2VUYWcsXG4gICAgICBvbkNEQVRBLFxuICAgICAgb25FcnJvciA9IHRocm93RnVuYyxcbiAgICAgIG9uV2FybmluZyxcbiAgICAgIG9uQ29tbWVudCxcbiAgICAgIG9uUXVlc3Rpb24sXG4gICAgICBvbkF0dGVudGlvbjtcblxuICB2YXIgZ2V0Q29udGV4dCA9IG5vb3BHZXRDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBEbyB3ZSBuZWVkIHRvIHBhcnNlIHRoZSBjdXJyZW50IGVsZW1lbnRzIGF0dHJpYnV0ZXMgZm9yIG5hbWVzcGFjZXM/XG4gICAqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgdmFyIG1heWJlTlMgPSBmYWxzZTtcblxuICAvKipcbiAgICogRG8gd2UgcHJvY2VzcyBuYW1lc3BhY2VzIGF0IGFsbD9cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICB2YXIgaXNOYW1lc3BhY2UgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIGNhdWdodCBlcnJvciByZXR1cm5lZCBvbiBwYXJzZSBlbmRcbiAgICpcbiAgICogQHR5cGUge0Vycm9yfVxuICAgKi9cbiAgdmFyIHJldHVybkVycm9yID0gbnVsbDtcblxuICAvKipcbiAgICogU2hvdWxkIHdlIHN0b3AgcGFyc2luZz9cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICB2YXIgcGFyc2VTdG9wID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEEgbWFwIG9mIHsgdXJpOiBwcmVmaXggfSB1c2VkIGJ5IHRoZSBwYXJzZXIuXG4gICAqXG4gICAqIFRoaXMgbWFwIHdpbGwgZW5zdXJlIHdlIGNhbiBub3JtYWxpemUgcHJlZml4ZXMgZHVyaW5nIHByb2Nlc3Npbmc7XG4gICAqIGZvciBlYWNoIHVyaSwgb25seSBvbmUgcHJlZml4IHdpbGwgYmUgZXhwb3NlZCB0byB0aGUgaGFuZGxlcnMuXG4gICAqXG4gICAqIEB0eXBlIHshT2JqZWN0PHN0cmluZywgc3RyaW5nPn19XG4gICAqL1xuICB2YXIgbnNVcmlUb1ByZWZpeDtcblxuICAvKipcbiAgICogSGFuZGxlIHBhcnNlIGVycm9yLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd8RXJyb3J9IGVyclxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXJyKSB7XG4gICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICBlcnIgPSBlcnJvcihlcnIpO1xuICAgIH1cblxuICAgIHJldHVybkVycm9yID0gZXJyO1xuXG4gICAgb25FcnJvcihlcnIsIGdldENvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBwYXJzZSBlcnJvci5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfEVycm9yfSBlcnJcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZVdhcm5pbmcoZXJyKSB7XG5cbiAgICBpZiAoIW9uV2FybmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgZXJyID0gZXJyb3IoZXJyKTtcbiAgICB9XG5cbiAgICBvbldhcm5pbmcoZXJyLCBnZXRDb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBwYXJzZSBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSAgIG5hbWVcbiAgICogQHBhcmFtICB7RnVuY3Rpb259IGNiXG4gICAqXG4gICAqIEByZXR1cm4ge1BhcnNlcn1cbiAgICovXG4gIHRoaXNbJ29uJ10gPSBmdW5jdGlvbihuYW1lLCBjYikge1xuXG4gICAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyb3IoJ3JlcXVpcmVkIGFyZ3MgPG5hbWUsIGNiPicpO1xuICAgIH1cblxuICAgIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgJ29wZW5UYWcnOiBvbk9wZW5UYWcgPSBjYjsgYnJlYWs7XG4gICAgY2FzZSAndGV4dCc6IG9uVGV4dCA9IGNiOyBicmVhaztcbiAgICBjYXNlICdjbG9zZVRhZyc6IG9uQ2xvc2VUYWcgPSBjYjsgYnJlYWs7XG4gICAgY2FzZSAnZXJyb3InOiBvbkVycm9yID0gY2I7IGJyZWFrO1xuICAgIGNhc2UgJ3dhcm4nOiBvbldhcm5pbmcgPSBjYjsgYnJlYWs7XG4gICAgY2FzZSAnY2RhdGEnOiBvbkNEQVRBID0gY2I7IGJyZWFrO1xuICAgIGNhc2UgJ2F0dGVudGlvbic6IG9uQXR0ZW50aW9uID0gY2I7IGJyZWFrOyAvLyA8IVhYWFhYIHp6eno9XCJlZWVlXCI+XG4gICAgY2FzZSAncXVlc3Rpb24nOiBvblF1ZXN0aW9uID0gY2I7IGJyZWFrOyAvLyA8PyAuLi4uICA/PlxuICAgIGNhc2UgJ2NvbW1lbnQnOiBvbkNvbW1lbnQgPSBjYjsgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IGVycm9yKCd1bnN1cHBvcnRlZCBldmVudDogJyArIG5hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG5hbWVzcGFjZSB0byBwcmVmaXggbWFwcGluZy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogcGFyc2VyLm5zKHtcbiAgICogICAnaHR0cDovL2Zvbyc6ICdmb28nLFxuICAgKiAgICdodHRwOi8vYmFyJzogJ2JhcidcbiAgICogfSk7XG4gICAqXG4gICAqIEBwYXJhbSAgeyFPYmplY3Q8c3RyaW5nLCBzdHJpbmc+fSBuc01hcFxuICAgKlxuICAgKiBAcmV0dXJuIHtQYXJzZXJ9XG4gICAqL1xuICB0aGlzWyducyddID0gZnVuY3Rpb24obnNNYXApIHtcblxuICAgIGlmICh0eXBlb2YgbnNNYXAgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBuc01hcCA9IHt9O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbnNNYXAgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBlcnJvcigncmVxdWlyZWQgYXJncyA8bnNNYXA9e30+Jyk7XG4gICAgfVxuXG4gICAgdmFyIF9uc1VyaVRvUHJlZml4ID0ge30sIGs7XG5cbiAgICBmb3IgKGsgaW4gbnNNYXApIHtcbiAgICAgIF9uc1VyaVRvUHJlZml4W2tdID0gbnNNYXBba107XG4gICAgfVxuXG4gICAgLy8gRk9SQ0UgZGVmYXVsdCBtYXBwaW5nIGZvciBzY2hlbWEgaW5zdGFuY2VcbiAgICBfbnNVcmlUb1ByZWZpeFtYU0lfVVJJXSA9IFhTSV9QUkVGSVg7XG5cbiAgICBpc05hbWVzcGFjZSA9IHRydWU7XG4gICAgbnNVcmlUb1ByZWZpeCA9IF9uc1VyaVRvUHJlZml4O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIFBhcnNlIHhtbCBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ30geG1sXG4gICAqXG4gICAqIEByZXR1cm4ge0Vycm9yfSByZXR1cm5FcnJvciwgaWYgbm90IHRocm93blxuICAgKi9cbiAgdGhpc1sncGFyc2UnXSA9IGZ1bmN0aW9uKHhtbCkge1xuICAgIGlmICh0eXBlb2YgeG1sICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgZXJyb3IoJ3JlcXVpcmVkIGFyZ3MgPHhtbD1zdHJpbmc+Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuRXJyb3IgPSBudWxsO1xuXG4gICAgcGFyc2UoeG1sKTtcblxuICAgIGdldENvbnRleHQgPSBub29wR2V0Q29udGV4dDtcbiAgICBwYXJzZVN0b3AgPSBmYWxzZTtcblxuICAgIHJldHVybiByZXR1cm5FcnJvcjtcbiAgfTtcblxuICAvKipcbiAgICogU3RvcCBwYXJzaW5nLlxuICAgKi9cbiAgdGhpc1snc3RvcCddID0gZnVuY3Rpb24oKSB7XG4gICAgcGFyc2VTdG9wID0gdHJ1ZTtcbiAgfTtcblxuICAvKipcbiAgICogUGFyc2Ugc3RyaW5nLCBpbnZva2luZyBjb25maWd1cmVkIGxpc3RlbmVycyBvbiBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHhtbFxuICAgKi9cbiAgZnVuY3Rpb24gcGFyc2UoeG1sKSB7XG4gICAgdmFyIG5zTWF0cml4U3RhY2sgPSBpc05hbWVzcGFjZSA/IFtdIDogbnVsbCxcbiAgICAgICAgbnNNYXRyaXggPSBpc05hbWVzcGFjZSA/IGJ1aWxkTnNNYXRyaXgobnNVcmlUb1ByZWZpeCkgOiBudWxsLFxuICAgICAgICBfbnNNYXRyaXgsXG4gICAgICAgIG5vZGVTdGFjayA9IFtdLFxuICAgICAgICBhbm9ueW1vdXNOc0NvdW50ID0gMCxcbiAgICAgICAgdGFnU3RhcnQgPSBmYWxzZSxcbiAgICAgICAgdGFnRW5kID0gZmFsc2UsXG4gICAgICAgIGkgPSAwLCBqID0gMCxcbiAgICAgICAgeCwgeSwgcSwgdywgdixcbiAgICAgICAgeG1sbnMsXG4gICAgICAgIGVsZW1lbnROYW1lLFxuICAgICAgICBfZWxlbWVudE5hbWUsXG4gICAgICAgIGVsZW1lbnRQcm94eVxuICAgICAgICA7XG5cbiAgICB2YXIgYXR0cnNTdHJpbmcgPSAnJyxcbiAgICAgICAgYXR0cnNTdGFydCA9IDAsXG4gICAgICAgIGNhY2hlZEF0dHJzIC8vIGZhbHNlID0gcGFyc2VkIHdpdGggZXJyb3JzLCBudWxsID0gbmVlZHMgcGFyc2luZ1xuICAgICAgICA7XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZSBhdHRyaWJ1dGVzIG9uIGRlbWFuZCBhbmQgcmV0dXJucyB0aGUgcGFyc2VkIGF0dHJpYnV0ZXMuXG4gICAgICpcbiAgICAgKiBSZXR1cm4gc2VtYW50aWNzOiAoMSkgYGZhbHNlYCBvbiBhdHRyaWJ1dGUgcGFyc2UgZXJyb3IsXG4gICAgICogKDIpIG9iamVjdCBoYXNoIG9uIGV4dHJhY3RlZCBhdHRycy5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW58T2JqZWN0fVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEF0dHJzKCkge1xuICAgICAgaWYgKGNhY2hlZEF0dHJzICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWRBdHRycztcbiAgICAgIH1cblxuICAgICAgdmFyIG5zVXJpLFxuICAgICAgICAgIG5zVXJpUHJlZml4LFxuICAgICAgICAgIG5zTmFtZSxcbiAgICAgICAgICBkZWZhdWx0QWxpYXMgPSBpc05hbWVzcGFjZSAmJiBuc01hdHJpeFsneG1sbnMnXSxcbiAgICAgICAgICBhdHRyTGlzdCA9IGlzTmFtZXNwYWNlICYmIG1heWJlTlMgPyBbXSA6IG51bGwsXG4gICAgICAgICAgaSA9IGF0dHJzU3RhcnQsXG4gICAgICAgICAgcyA9IGF0dHJzU3RyaW5nLFxuICAgICAgICAgIGwgPSBzLmxlbmd0aCxcbiAgICAgICAgICBoYXNOZXdNYXRyaXgsXG4gICAgICAgICAgbmV3YWxpYXMsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgYWxpYXMsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBhdHRycyA9IHt9LFxuICAgICAgICAgIHNlZW5BdHRycyA9IHt9LFxuICAgICAgICAgIHNraXBBdHRyLFxuICAgICAgICAgIHcsXG4gICAgICAgICAgajtcblxuICAgICAgcGFyc2VBdHRyOlxuICAgICAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgc2tpcEF0dHIgPSBmYWxzZTtcbiAgICAgICAgdyA9IHMuY2hhckNvZGVBdChpKTtcblxuICAgICAgICBpZiAodyA9PT0gMzIgfHwgKHcgPCAxNCAmJiB3ID4gOCkpIHsgLy8gV0hJVEVTUEFDRT17IFxcZlxcblxcclxcdFxcdn1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdhaXQgZm9yIG5vbiB3aGl0ZXNwYWNlIGNoYXJhY3RlclxuICAgICAgICBpZiAodyA8IDY1IHx8IHcgPiAxMjIgfHwgKHcgPiA5MCAmJiB3IDwgOTcpKSB7XG4gICAgICAgICAgaWYgKHcgIT09IDk1ICYmIHcgIT09IDU4KSB7IC8vIGNoYXIgOTVcIl9cIiA1OFwiOlwiXG4gICAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdpbGxlZ2FsIGZpcnN0IGNoYXIgYXR0cmlidXRlIG5hbWUnKTtcbiAgICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwYXJzZSBhdHRyaWJ1dGUgbmFtZVxuICAgICAgICBmb3IgKGogPSBpICsgMTsgaiA8IGw7IGorKykge1xuICAgICAgICAgIHcgPSBzLmNoYXJDb2RlQXQoaik7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB3ID4gOTYgJiYgdyA8IDEyMyB8fFxuICAgICAgICAgICAgdyA+IDY0ICYmIHcgPCA5MSB8fFxuICAgICAgICAgICAgdyA+IDQ3ICYmIHcgPCA1OSB8fFxuICAgICAgICAgICAgdyA9PT0gNDYgfHwgLy8gJy4nXG4gICAgICAgICAgICB3ID09PSA0NSB8fCAvLyAnLSdcbiAgICAgICAgICAgIHcgPT09IDk1IC8vICdfJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB3aGl0ZXNwYWNlXG4gICAgICAgICAgaWYgKHcgPT09IDMyIHx8ICh3IDwgMTQgJiYgdyA+IDgpKSB7IC8vIFdISVRFU1BBQ0VcbiAgICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ21pc3NpbmcgYXR0cmlidXRlIHZhbHVlJyk7XG4gICAgICAgICAgICBpID0gajtcblxuICAgICAgICAgICAgY29udGludWUgcGFyc2VBdHRyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGV4cGVjdGVkIFwiPVwiXG4gICAgICAgICAgaWYgKHcgPT09IDYxKSB7IC8vIFwiPVwiID09IDYxXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdpbGxlZ2FsIGF0dHJpYnV0ZSBuYW1lIGNoYXInKTtcbiAgICAgICAgICBza2lwQXR0ciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBuYW1lID0gcy5zdWJzdHJpbmcoaSwgaik7XG5cbiAgICAgICAgaWYgKG5hbWUgPT09ICd4bWxuczp4bWxucycpIHtcbiAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdpbGxlZ2FsIGRlY2xhcmF0aW9uIG9mIHhtbG5zJyk7XG4gICAgICAgICAgc2tpcEF0dHIgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdyA9IHMuY2hhckNvZGVBdChqICsgMSk7XG5cbiAgICAgICAgaWYgKHcgPT09IDM0KSB7IC8vICdcIidcbiAgICAgICAgICBqID0gcy5pbmRleE9mKCdcIicsIGkgPSBqICsgMik7XG5cbiAgICAgICAgICBpZiAoaiA9PT0gLTEpIHtcbiAgICAgICAgICAgIGogPSBzLmluZGV4T2YoJ1xcJycsIGkpO1xuXG4gICAgICAgICAgICBpZiAoaiAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgaGFuZGxlV2FybmluZygnYXR0cmlidXRlIHZhbHVlIHF1b3RlIG1pc3NtYXRjaCcpO1xuICAgICAgICAgICAgICBza2lwQXR0ciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSBpZiAodyA9PT0gMzkpIHsgLy8gXCInXCJcbiAgICAgICAgICBqID0gcy5pbmRleE9mKCdcXCcnLCBpID0gaiArIDIpO1xuXG4gICAgICAgICAgaWYgKGogPT09IC0xKSB7XG4gICAgICAgICAgICBqID0gcy5pbmRleE9mKCdcIicsIGkpO1xuXG4gICAgICAgICAgICBpZiAoaiAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgaGFuZGxlV2FybmluZygnYXR0cmlidXRlIHZhbHVlIHF1b3RlIG1pc3NtYXRjaCcpO1xuICAgICAgICAgICAgICBza2lwQXR0ciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFuZGxlV2FybmluZygnbWlzc2luZyBhdHRyaWJ1dGUgdmFsdWUgcXVvdGVzJyk7XG4gICAgICAgICAgc2tpcEF0dHIgPSB0cnVlO1xuXG4gICAgICAgICAgLy8gc2tpcCB0byBuZXh0IHNwYWNlXG4gICAgICAgICAgZm9yIChqID0gaiArIDE7IGogPCBsOyBqKyspIHtcbiAgICAgICAgICAgIHcgPSBzLmNoYXJDb2RlQXQoaiArIDEpO1xuXG4gICAgICAgICAgICBpZiAodyA9PT0gMzIgfHwgKHcgPCAxNCAmJiB3ID4gOCkpIHsgLy8gV0hJVEVTUEFDRVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChqID09PSAtMSkge1xuICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ21pc3NpbmcgY2xvc2luZyBxdW90ZXMnKTtcblxuICAgICAgICAgIGogPSBsO1xuICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2tpcEF0dHIpIHtcbiAgICAgICAgICB2YWx1ZSA9IHMuc3Vic3RyaW5nKGksIGopO1xuICAgICAgICB9XG5cbiAgICAgICAgaSA9IGo7XG5cbiAgICAgICAgLy8gZW5zdXJlIFNQQUNFIGZvbGxvd3MgYXR0cmlidXRlXG4gICAgICAgIC8vIHNraXAgaWxsZWdhbCBjb250ZW50IG90aGVyd2lzZVxuICAgICAgICAvLyBleGFtcGxlIGE9XCJiXCJjXG4gICAgICAgIGZvciAoOyBqICsgMSA8IGw7IGorKykge1xuICAgICAgICAgIHcgPSBzLmNoYXJDb2RlQXQoaiArIDEpO1xuXG4gICAgICAgICAgaWYgKHcgPT09IDMyIHx8ICh3IDwgMTQgJiYgdyA+IDgpKSB7IC8vIFdISVRFU1BBQ0VcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEZJUlNUIElMTEVHQUwgQ0hBUlxuICAgICAgICAgIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdpbGxlZ2FsIGNoYXJhY3RlciBhZnRlciBhdHRyaWJ1dGUgZW5kJyk7XG4gICAgICAgICAgICBza2lwQXR0ciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWR2YW5jZSBjdXJzb3IgdG8gbmV4dCBhdHRyaWJ1dGVcbiAgICAgICAgaSA9IGogKyAxO1xuXG4gICAgICAgIGlmIChza2lwQXR0cikge1xuICAgICAgICAgIGNvbnRpbnVlIHBhcnNlQXR0cjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNrIGF0dHJpYnV0ZSByZS1kZWNsYXJhdGlvblxuICAgICAgICBpZiAobmFtZSBpbiBzZWVuQXR0cnMpIHtcbiAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdhdHRyaWJ1dGUgPCcgKyBuYW1lICsgJz4gYWxyZWFkeSBkZWZpbmVkJyk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBzZWVuQXR0cnNbbmFtZV0gPSB0cnVlO1xuXG4gICAgICAgIGlmICghaXNOYW1lc3BhY2UpIHtcbiAgICAgICAgICBhdHRyc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdHJ5IHRvIGV4dHJhY3QgbmFtZXNwYWNlIGluZm9ybWF0aW9uXG4gICAgICAgIGlmIChtYXliZU5TKSB7XG4gICAgICAgICAgbmV3YWxpYXMgPSAoXG4gICAgICAgICAgICBuYW1lID09PSAneG1sbnMnXG4gICAgICAgICAgICAgID8gJ3htbG5zJ1xuICAgICAgICAgICAgICA6IChuYW1lLmNoYXJDb2RlQXQoMCkgPT09IDEyMCAmJiBuYW1lLnN1YnN0cigwLCA2KSA9PT0gJ3htbG5zOicpXG4gICAgICAgICAgICAgICAgPyBuYW1lLnN1YnN0cig2KVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyBoYW5kbGUgeG1sbnMoOmFsaWFzKSBhc3NpZ25tZW50XG4gICAgICAgICAgaWYgKG5ld2FsaWFzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBuc1VyaSA9IGRlY29kZUVudGl0aWVzKHZhbHVlKTtcbiAgICAgICAgICAgIG5zVXJpUHJlZml4ID0gdXJpUHJlZml4KG5ld2FsaWFzKTtcblxuICAgICAgICAgICAgYWxpYXMgPSBuc1VyaVRvUHJlZml4W25zVXJpXTtcblxuICAgICAgICAgICAgaWYgKCFhbGlhcykge1xuXG4gICAgICAgICAgICAgIC8vIG5vIHByZWZpeCBkZWZpbmVkIG9yIHByZWZpeCBjb2xsaXNpb25cbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChuZXdhbGlhcyA9PT0gJ3htbG5zJykgfHxcbiAgICAgICAgICAgICAgICAobnNVcmlQcmVmaXggaW4gbnNNYXRyaXggJiYgbnNNYXRyaXhbbnNVcmlQcmVmaXhdICE9PSBuc1VyaSlcbiAgICAgICAgICAgICAgKSB7XG5cbiAgICAgICAgICAgICAgICAvLyBhbG9jYXRlIGZyZWUgbnMgcHJlZml4XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgYWxpYXMgPSAnbnMnICsgKGFub255bW91c05zQ291bnQrKyk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAodHlwZW9mIG5zTWF0cml4W2FsaWFzXSAhPT0gJ3VuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFsaWFzID0gbmV3YWxpYXM7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBuc1VyaVRvUHJlZml4W25zVXJpXSA9IGFsaWFzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobnNNYXRyaXhbbmV3YWxpYXNdICE9PSBhbGlhcykge1xuICAgICAgICAgICAgICBpZiAoIWhhc05ld01hdHJpeCkge1xuICAgICAgICAgICAgICAgIG5zTWF0cml4ID0gY2xvbmVOc01hdHJpeChuc01hdHJpeCk7XG4gICAgICAgICAgICAgICAgaGFzTmV3TWF0cml4ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG5zTWF0cml4W25ld2FsaWFzXSA9IGFsaWFzO1xuICAgICAgICAgICAgICBpZiAobmV3YWxpYXMgPT09ICd4bWxucycpIHtcbiAgICAgICAgICAgICAgICBuc01hdHJpeFt1cmlQcmVmaXgoYWxpYXMpXSA9IG5zVXJpO1xuICAgICAgICAgICAgICAgIGRlZmF1bHRBbGlhcyA9IGFsaWFzO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbnNNYXRyaXhbbnNVcmlQcmVmaXhdID0gbnNVcmk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGV4cG9zZSB4bWxucyg6YXNkKT1cIi4uLlwiIGluIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgIGF0dHJzW25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBjb2xsZWN0IGF0dHJpYnV0ZXMgdW50aWwgYWxsIG5hbWVzcGFjZVxuICAgICAgICAgIC8vIGRlY2xhcmF0aW9ucyBhcmUgcHJvY2Vzc2VkXG4gICAgICAgICAgYXR0ckxpc3QucHVzaChuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgfSAvKiogZW5kIGlmIChtYXliZU5zKSAqL1xuXG4gICAgICAgIC8vIGhhbmRsZSBhdHRyaWJ1dGVzIG9uIGVsZW1lbnQgd2l0aG91dFxuICAgICAgICAvLyBuYW1lc3BhY2UgZGVjbGFyYXRpb25zXG4gICAgICAgIHcgPSBuYW1lLmluZGV4T2YoJzonKTtcbiAgICAgICAgaWYgKHcgPT09IC0xKSB7XG4gICAgICAgICAgYXR0cnNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG5vcm1hbGl6ZSBucyBhdHRyaWJ1dGUgbmFtZVxuICAgICAgICBpZiAoIShuc05hbWUgPSBuc01hdHJpeFtuYW1lLnN1YnN0cmluZygwLCB3KV0pKSB7XG4gICAgICAgICAgaGFuZGxlV2FybmluZyhtaXNzaW5nTmFtZXNwYWNlRm9yUHJlZml4KG5hbWUuc3Vic3RyaW5nKDAsIHcpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBuYW1lID0gZGVmYXVsdEFsaWFzID09PSBuc05hbWVcbiAgICAgICAgICA/IG5hbWUuc3Vic3RyKHcgKyAxKVxuICAgICAgICAgIDogbnNOYW1lICsgbmFtZS5zdWJzdHIodyk7XG5cbiAgICAgICAgLy8gZW5kOiBub3JtYWxpemUgbnMgYXR0cmlidXRlIG5hbWVcblxuICAgICAgICAvLyBub3JtYWxpemUgeHNpOnR5cGUgbnMgYXR0cmlidXRlIHZhbHVlXG4gICAgICAgIGlmIChuYW1lID09PSBYU0lfVFlQRSkge1xuICAgICAgICAgIHcgPSB2YWx1ZS5pbmRleE9mKCc6Jyk7XG5cbiAgICAgICAgICBpZiAodyAhPT0gLTEpIHtcbiAgICAgICAgICAgIG5zTmFtZSA9IHZhbHVlLnN1YnN0cmluZygwLCB3KTtcblxuICAgICAgICAgICAgLy8gaGFuZGxlIGRlZmF1bHQgcHJlZml4ZXMsIGkuZS4geHM6U3RyaW5nIGdyYWNlZnVsbHlcbiAgICAgICAgICAgIG5zTmFtZSA9IG5zTWF0cml4W25zTmFtZV0gfHwgbnNOYW1lO1xuICAgICAgICAgICAgdmFsdWUgPSBuc05hbWUgKyB2YWx1ZS5zdWJzdHJpbmcodyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gZGVmYXVsdEFsaWFzICsgJzonICsgdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW5kOiBub3JtYWxpemUgeHNpOnR5cGUgbnMgYXR0cmlidXRlIHZhbHVlXG5cbiAgICAgICAgYXR0cnNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuXG4gICAgICAvLyBoYW5kbGUgZGVmZXJyZWQsIHBvc3NpYmx5IG5hbWVzcGFjZWQgYXR0cmlidXRlc1xuICAgICAgaWYgKG1heWJlTlMpIHtcblxuICAgICAgICAvLyBub3JtYWxpemUgY2FwdHVyZWQgYXR0cmlidXRlc1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gYXR0ckxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cbiAgICAgICAgICBuYW1lID0gYXR0ckxpc3RbaSsrXTtcbiAgICAgICAgICB2YWx1ZSA9IGF0dHJMaXN0W2ldO1xuXG4gICAgICAgICAgdyA9IG5hbWUuaW5kZXhPZignOicpO1xuXG4gICAgICAgICAgaWYgKHcgIT09IC0xKSB7XG5cbiAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSBucyBhdHRyaWJ1dGUgbmFtZVxuICAgICAgICAgICAgaWYgKCEobnNOYW1lID0gbnNNYXRyaXhbbmFtZS5zdWJzdHJpbmcoMCwgdyldKSkge1xuICAgICAgICAgICAgICBoYW5kbGVXYXJuaW5nKG1pc3NpbmdOYW1lc3BhY2VGb3JQcmVmaXgobmFtZS5zdWJzdHJpbmcoMCwgdykpKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5hbWUgPSBkZWZhdWx0QWxpYXMgPT09IG5zTmFtZVxuICAgICAgICAgICAgICA/IG5hbWUuc3Vic3RyKHcgKyAxKVxuICAgICAgICAgICAgICA6IG5zTmFtZSArIG5hbWUuc3Vic3RyKHcpO1xuXG4gICAgICAgICAgICAvLyBlbmQ6IG5vcm1hbGl6ZSBucyBhdHRyaWJ1dGUgbmFtZVxuXG4gICAgICAgICAgICAvLyBub3JtYWxpemUgeHNpOnR5cGUgbnMgYXR0cmlidXRlIHZhbHVlXG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gWFNJX1RZUEUpIHtcbiAgICAgICAgICAgICAgdyA9IHZhbHVlLmluZGV4T2YoJzonKTtcblxuICAgICAgICAgICAgICBpZiAodyAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBuc05hbWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgdyk7XG5cbiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgZGVmYXVsdCBwcmVmaXhlcywgaS5lLiB4czpTdHJpbmcgZ3JhY2VmdWxseVxuICAgICAgICAgICAgICAgIG5zTmFtZSA9IG5zTWF0cml4W25zTmFtZV0gfHwgbnNOYW1lO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbnNOYW1lICsgdmFsdWUuc3Vic3RyaW5nKHcpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZGVmYXVsdEFsaWFzICsgJzonICsgdmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZW5kOiBub3JtYWxpemUgeHNpOnR5cGUgbnMgYXR0cmlidXRlIHZhbHVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXR0cnNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVuZDogbm9ybWFsaXplIGNhcHR1cmVkIGF0dHJpYnV0ZXNcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNhY2hlZEF0dHJzID0gYXR0cnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXh0cmFjdCB0aGUgcGFyc2UgY29udGV4dCB7IGxpbmUsIGNvbHVtbiwgcGFydCB9XG4gICAgICogZnJvbSB0aGUgY3VycmVudCBwYXJzZXIgcG9zaXRpb24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IHBhcnNlIGNvbnRleHRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRQYXJzZUNvbnRleHQoKSB7XG4gICAgICB2YXIgc3BsaXRzUmUgPSAvKFxcclxcbnxcXHJ8XFxuKS9nO1xuXG4gICAgICB2YXIgbGluZSA9IDA7XG4gICAgICB2YXIgY29sdW1uID0gMDtcbiAgICAgIHZhciBzdGFydE9mTGluZSA9IDA7XG4gICAgICB2YXIgZW5kT2ZMaW5lID0gajtcbiAgICAgIHZhciBtYXRjaDtcbiAgICAgIHZhciBkYXRhO1xuXG4gICAgICB3aGlsZSAoaSA+PSBzdGFydE9mTGluZSkge1xuXG4gICAgICAgIG1hdGNoID0gc3BsaXRzUmUuZXhlYyh4bWwpO1xuXG4gICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVuZCBvZiBsaW5lID0gKGJyZWFrIGlkeCArIGJyZWFrIGNoYXJzKVxuICAgICAgICBlbmRPZkxpbmUgPSBtYXRjaFswXS5sZW5ndGggKyBtYXRjaC5pbmRleDtcblxuICAgICAgICBpZiAoZW5kT2ZMaW5lID4gaSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWR2YW5jZSB0byBuZXh0IGxpbmVcbiAgICAgICAgbGluZSArPSAxO1xuXG4gICAgICAgIHN0YXJ0T2ZMaW5lID0gZW5kT2ZMaW5lO1xuICAgICAgfVxuXG4gICAgICAvLyBFT0YgZXJyb3JzXG4gICAgICBpZiAoaSA9PSAtMSkge1xuICAgICAgICBjb2x1bW4gPSBlbmRPZkxpbmU7XG4gICAgICAgIGRhdGEgPSB4bWwuc3Vic3RyaW5nKGopO1xuICAgICAgfSBlbHNlXG5cbiAgICAgIC8vIHN0YXJ0IGVycm9yc1xuICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgZGF0YSA9IHhtbC5zdWJzdHJpbmcoaiwgaSk7XG4gICAgICB9XG5cbiAgICAgIC8vIG90aGVyIGVycm9yc1xuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbHVtbiA9IGkgLSBzdGFydE9mTGluZTtcbiAgICAgICAgZGF0YSA9IChqID09IC0xID8geG1sLnN1YnN0cmluZyhpKSA6IHhtbC5zdWJzdHJpbmcoaSwgaiArIDEpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RhdGEnOiBkYXRhLFxuICAgICAgICAnbGluZSc6IGxpbmUsXG4gICAgICAgICdjb2x1bW4nOiBjb2x1bW5cbiAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0Q29udGV4dCA9IGdldFBhcnNlQ29udGV4dDtcblxuXG4gICAgaWYgKHByb3h5KSB7XG4gICAgICBlbGVtZW50UHJveHkgPSBPYmplY3QuY3JlYXRlKHt9LCB7XG4gICAgICAgICduYW1lJzogZ2V0dGVyKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBlbGVtZW50TmFtZTtcbiAgICAgICAgfSksXG4gICAgICAgICdvcmlnaW5hbE5hbWUnOiBnZXR0ZXIoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIF9lbGVtZW50TmFtZTtcbiAgICAgICAgfSksXG4gICAgICAgICdhdHRycyc6IGdldHRlcihnZXRBdHRycyksXG4gICAgICAgICducyc6IGdldHRlcihmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gbnNNYXRyaXg7XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBhY3R1YWwgcGFyc2UgbG9naWNcbiAgICB3aGlsZSAoaiAhPT0gLTEpIHtcblxuICAgICAgaWYgKHhtbC5jaGFyQ29kZUF0KGopID09PSA2MCkgeyAvLyBcIjxcIlxuICAgICAgICBpID0gajtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkgPSB4bWwuaW5kZXhPZignPCcsIGopO1xuICAgICAgfVxuXG4gICAgICAvLyBwYXJzZSBlbmRcbiAgICAgIGlmIChpID09PSAtMSkge1xuICAgICAgICBpZiAobm9kZVN0YWNrLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcigndW5leHBlY3RlZCBlbmQgb2YgZmlsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ21pc3Npbmcgc3RhcnQgdGFnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaiA8IHhtbC5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAoeG1sLnN1YnN0cmluZyhqKS50cmltKCkpIHtcbiAgICAgICAgICAgIGhhbmRsZVdhcm5pbmcoTk9OX1dISVRFU1BBQ0VfT1VUU0lERV9ST09UX05PREUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gcGFyc2UgdGV4dFxuICAgICAgaWYgKGogIT09IGkpIHtcblxuICAgICAgICBpZiAobm9kZVN0YWNrLmxlbmd0aCkge1xuICAgICAgICAgIGlmIChvblRleHQpIHtcbiAgICAgICAgICAgIG9uVGV4dCh4bWwuc3Vic3RyaW5nKGosIGkpLCBkZWNvZGVFbnRpdGllcywgZ2V0Q29udGV4dCk7XG5cbiAgICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoeG1sLnN1YnN0cmluZyhqLCBpKS50cmltKCkpIHtcbiAgICAgICAgICAgIGhhbmRsZVdhcm5pbmcoTk9OX1dISVRFU1BBQ0VfT1VUU0lERV9ST09UX05PREUpO1xuXG4gICAgICAgICAgICBpZiAocGFyc2VTdG9wKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdyA9IHhtbC5jaGFyQ29kZUF0KGkrMSk7XG5cbiAgICAgIC8vIHBhcnNlIGNvbW1lbnRzICsgQ0RBVEFcbiAgICAgIGlmICh3ID09PSAzMykgeyAvLyBcIiFcIlxuICAgICAgICBxID0geG1sLmNoYXJDb2RlQXQoaSsyKTtcblxuICAgICAgICAvLyBDREFUQSBzZWN0aW9uXG4gICAgICAgIGlmIChxID09PSA5MSAmJiB4bWwuc3Vic3RyKGkgKyAzLCA2KSA9PT0gJ0NEQVRBWycpIHsgLy8gOTEgPT0gXCJbXCJcbiAgICAgICAgICBqID0geG1sLmluZGV4T2YoJ11dPicsIGkpO1xuICAgICAgICAgIGlmIChqID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCd1bmNsb3NlZCBjZGF0YScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvbkNEQVRBKSB7XG4gICAgICAgICAgICBvbkNEQVRBKHhtbC5zdWJzdHJpbmcoaSArIDksIGopLCBnZXRDb250ZXh0KTtcbiAgICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGogKz0gMztcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbW1lbnRcbiAgICAgICAgaWYgKHEgPT09IDQ1ICYmIHhtbC5jaGFyQ29kZUF0KGkgKyAzKSA9PT0gNDUpIHsgLy8gNDUgPT0gXCItXCJcbiAgICAgICAgICBqID0geG1sLmluZGV4T2YoJy0tPicsIGkpO1xuICAgICAgICAgIGlmIChqID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCd1bmNsb3NlZCBjb21tZW50Jyk7XG4gICAgICAgICAgfVxuXG5cbiAgICAgICAgICBpZiAob25Db21tZW50KSB7XG4gICAgICAgICAgICBvbkNvbW1lbnQoeG1sLnN1YnN0cmluZyhpICsgNCwgaiksIGRlY29kZUVudGl0aWVzLCBnZXRDb250ZXh0KTtcbiAgICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGogKz0gMztcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBwYXJzZSBxdWVzdGlvbiA8PyAuLi4gPz5cbiAgICAgIGlmICh3ID09PSA2MykgeyAvLyBcIj9cIlxuICAgICAgICBqID0geG1sLmluZGV4T2YoJz8+JywgaSk7XG4gICAgICAgIGlmIChqID09PSAtMSkge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcigndW5jbG9zZWQgcXVlc3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvblF1ZXN0aW9uKSB7XG4gICAgICAgICAgb25RdWVzdGlvbih4bWwuc3Vic3RyaW5nKGksIGogKyAyKSwgZ2V0Q29udGV4dCk7XG4gICAgICAgICAgaWYgKHBhcnNlU3RvcCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGogKz0gMjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGZpbmQgbWF0Y2hpbmcgY2xvc2luZyB0YWcgZm9yIGF0dGVudGlvbiBvciBzdGFuZGFyZCB0YWdzXG4gICAgICAvLyBmb3IgdGhhdCB3ZSBtdXN0IHNraXAgdGhyb3VnaCBhdHRyaWJ1dGUgdmFsdWVzXG4gICAgICAvLyAoZW5jbG9zZWQgaW4gc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMpXG4gICAgICBmb3IgKHggPSBpICsgMTsgOyB4KyspIHtcbiAgICAgICAgdiA9IHhtbC5jaGFyQ29kZUF0KHgpO1xuICAgICAgICBpZiAoaXNOYU4odikpIHtcbiAgICAgICAgICBqID0gLTE7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCd1bmNsb3NlZCB0YWcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFsxMF0gQXR0VmFsdWUgOjo9ICdcIicgKFtePCZcIl0gfCBSZWZlcmVuY2UpKiAnXCInIHwgXCInXCIgKFtePCYnXSB8IFJlZmVyZW5jZSkqIFwiJ1wiXG4gICAgICAgIC8vIHNraXBzIHRoZSBxdW90ZWQgc3RyaW5nXG4gICAgICAgIC8vIChkb3VibGUgcXVvdGVzKSBkb2VzIG5vdCBhcHBlYXIgaW4gYSBsaXRlcmFsIGVuY2xvc2VkIGJ5IChkb3VibGUgcXVvdGVzKVxuICAgICAgICAvLyAoc2luZ2xlIHF1b3RlKSBkb2VzIG5vdCBhcHBlYXIgaW4gYSBsaXRlcmFsIGVuY2xvc2VkIGJ5IChzaW5nbGUgcXVvdGUpXG4gICAgICAgIGlmICh2ID09PSAzNCkgeyAvLyAgJ1wiJ1xuICAgICAgICAgIHEgPSB4bWwuaW5kZXhPZignXCInLCB4ICsgMSk7XG4gICAgICAgICAgeCA9IHEgIT09IC0xID8gcSA6IHg7XG4gICAgICAgIH0gZWxzZSBpZiAodiA9PT0gMzkpIHsgLy8gXCInXCJcbiAgICAgICAgICBxID0geG1sLmluZGV4T2YoXCInXCIsIHggKyAxKTtcbiAgICAgICAgICB4ID0gcSAhPT0gLTEgPyBxIDogeDtcbiAgICAgICAgfSBlbHNlIGlmICh2ID09PSA2MikgeyAvLyAnPidcbiAgICAgICAgICBqID0geDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG5cbiAgICAgIC8vIHBhcnNlIGF0dGVudGlvbiA8ISAuLi4+XG4gICAgICAvLyBwcmV2aW91c2x5IGNvbW1lbnQgYW5kIENEQVRBIGhhdmUgYWxyZWFkeSBiZWVuIHBhcnNlZFxuICAgICAgaWYgKHcgPT09IDMzKSB7IC8vIFwiIVwiXG5cbiAgICAgICAgaWYgKG9uQXR0ZW50aW9uKSB7XG4gICAgICAgICAgb25BdHRlbnRpb24oeG1sLnN1YnN0cmluZyhpLCBqICsgMSksIGRlY29kZUVudGl0aWVzLCBnZXRDb250ZXh0KTtcbiAgICAgICAgICBpZiAocGFyc2VTdG9wKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaiArPSAxO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZG9uJ3QgcHJvY2VzcyBhdHRyaWJ1dGVzO1xuICAgICAgLy8gdGhlcmUgYXJlIG5vbmVcbiAgICAgIGNhY2hlZEF0dHJzID0ge307XG5cbiAgICAgIC8vIGlmICh4bWwuY2hhckNvZGVBdChpKzEpID09PSA0NykgeyAvLyA8Ly4uLlxuICAgICAgaWYgKHcgPT09IDQ3KSB7IC8vIDwvLi4uXG4gICAgICAgIHRhZ1N0YXJ0ID0gZmFsc2U7XG4gICAgICAgIHRhZ0VuZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKCFub2RlU3RhY2subGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCdtaXNzaW5nIG9wZW4gdGFnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB2ZXJpZnkgb3BlbiA8LT4gY2xvc2UgdGFnIG1hdGNoXG4gICAgICAgIHggPSBlbGVtZW50TmFtZSA9IG5vZGVTdGFjay5wb3AoKTtcbiAgICAgICAgcSA9IGkgKyAyICsgeC5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHhtbC5zdWJzdHJpbmcoaSArIDIsIHEpICE9PSB4KSB7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCdjbG9zaW5nIHRhZyBtaXNtYXRjaCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmVyaWZ5IGNoYXJzIGluIGNsb3NlIHRhZ1xuICAgICAgICBmb3IgKDsgcSA8IGo7IHErKykge1xuICAgICAgICAgIHcgPSB4bWwuY2hhckNvZGVBdChxKTtcblxuICAgICAgICAgIGlmICh3ID09PSAzMiB8fCAodyA+IDggJiYgdyA8IDE0KSkgeyAvLyBcXGZcXG5cXHJcXHRcXHYgc3BhY2VcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcignY2xvc2UgdGFnJyk7XG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHhtbC5jaGFyQ29kZUF0KGogLSAxKSA9PT0gNDcpIHsgLy8gLi4uLz5cbiAgICAgICAgICB4ID0gZWxlbWVudE5hbWUgPSB4bWwuc3Vic3RyaW5nKGkgKyAxLCBqIC0gMSk7XG5cbiAgICAgICAgICB0YWdTdGFydCA9IHRydWU7XG4gICAgICAgICAgdGFnRW5kID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHggPSBlbGVtZW50TmFtZSA9IHhtbC5zdWJzdHJpbmcoaSArIDEsIGopO1xuXG4gICAgICAgICAgdGFnU3RhcnQgPSB0cnVlO1xuICAgICAgICAgIHRhZ0VuZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEodyA+IDk2ICYmIHcgPCAxMjMgfHwgdyA+IDY0ICYmIHcgPCA5MSB8fCB3ID09PSA5NSB8fCB3ID09PSA1OCkpIHsgLy8gY2hhciA5NVwiX1wiIDU4XCI6XCJcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ2lsbGVnYWwgZmlyc3QgY2hhciBub2RlTmFtZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChxID0gMSwgeSA9IHgubGVuZ3RoOyBxIDwgeTsgcSsrKSB7XG4gICAgICAgICAgdyA9IHguY2hhckNvZGVBdChxKTtcblxuICAgICAgICAgIGlmICh3ID4gOTYgJiYgdyA8IDEyMyB8fCB3ID4gNjQgJiYgdyA8IDkxIHx8IHcgPiA0NyAmJiB3IDwgNTkgfHwgdyA9PT0gNDUgfHwgdyA9PT0gOTUgfHwgdyA9PSA0Nikge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHcgPT09IDMyIHx8ICh3IDwgMTQgJiYgdyA+IDgpKSB7IC8vIFxcZlxcblxcclxcdFxcdiBzcGFjZVxuICAgICAgICAgICAgZWxlbWVudE5hbWUgPSB4LnN1YnN0cmluZygwLCBxKTtcblxuICAgICAgICAgICAgLy8gbWF5YmUgdGhlcmUgYXJlIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgIGNhY2hlZEF0dHJzID0gbnVsbDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcignaW52YWxpZCBub2RlTmFtZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0YWdFbmQpIHtcbiAgICAgICAgICBub2RlU3RhY2sucHVzaChlbGVtZW50TmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzTmFtZXNwYWNlKSB7XG5cbiAgICAgICAgX25zTWF0cml4ID0gbnNNYXRyaXg7XG5cbiAgICAgICAgaWYgKHRhZ1N0YXJ0KSB7XG5cbiAgICAgICAgICAvLyByZW1lbWJlciBvbGQgbmFtZXNwYWNlXG4gICAgICAgICAgLy8gdW5sZXNzIHdlJ3JlIHNlbGYtY2xvc2luZ1xuICAgICAgICAgIGlmICghdGFnRW5kKSB7XG4gICAgICAgICAgICBuc01hdHJpeFN0YWNrLnB1c2goX25zTWF0cml4KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY2FjaGVkQXR0cnMgPT09IG51bGwpIHtcblxuICAgICAgICAgICAgLy8gcXVpY2sgY2hlY2ssIHdoZXRoZXIgdGhlcmUgbWF5IGJlIG5hbWVzcGFjZVxuICAgICAgICAgICAgLy8gZGVjbGFyYXRpb25zIG9uIHRoZSBub2RlOyBpZiB0aGF0IGlzIHRoZSBjYXNlXG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGVhZ2VybHkgcGFyc2UgdGhlIG5vZGUgYXR0cmlidXRlc1xuICAgICAgICAgICAgaWYgKChtYXliZU5TID0geC5pbmRleE9mKCd4bWxucycsIHEpICE9PSAtMSkpIHtcbiAgICAgICAgICAgICAgYXR0cnNTdGFydCA9IHE7XG4gICAgICAgICAgICAgIGF0dHJzU3RyaW5nID0geDtcblxuICAgICAgICAgICAgICBnZXRBdHRycygpO1xuXG4gICAgICAgICAgICAgIG1heWJlTlMgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBfZWxlbWVudE5hbWUgPSBlbGVtZW50TmFtZTtcblxuICAgICAgICB3ID0gZWxlbWVudE5hbWUuaW5kZXhPZignOicpO1xuICAgICAgICBpZiAodyAhPT0gLTEpIHtcbiAgICAgICAgICB4bWxucyA9IG5zTWF0cml4W2VsZW1lbnROYW1lLnN1YnN0cmluZygwLCB3KV07XG5cbiAgICAgICAgICAvLyBwcmVmaXggZ2l2ZW47IG5hbWVzcGFjZSBtdXN0IGV4aXN0XG4gICAgICAgICAgaWYgKCF4bWxucykge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCdtaXNzaW5nIG5hbWVzcGFjZSBvbiA8JyArIF9lbGVtZW50TmFtZSArICc+Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZWxlbWVudE5hbWUgPSBlbGVtZW50TmFtZS5zdWJzdHIodyArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHhtbG5zID0gbnNNYXRyaXhbJ3htbG5zJ107XG5cbiAgICAgICAgICAvLyBpZiBubyBkZWZhdWx0IG5hbWVzcGFjZSBpcyBkZWZpbmVkLFxuICAgICAgICAgIC8vIHdlJ2xsIGltcG9ydCB0aGUgZWxlbWVudCBhcyBhbm9ueW1vdXMuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBpdCBpcyB1cCB0byB1c2VycyB0byBjb3JyZWN0IHRoYXQgdG8gdGhlIGRvY3VtZW50IGRlZmluZWRcbiAgICAgICAgICAvLyB0YXJnZXROYW1lc3BhY2UsIG9yIHdoYXRldmVyIHRoZWlyIHVuZGVyc2FuZGluZyBvZiB0aGVcbiAgICAgICAgICAvLyBYTUwgc3BlYyBtYW5kYXRlcy5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkanVzdCBuYW1lc3BhY2UgcHJlZml4cyBhcyBjb25maWd1cmVkXG4gICAgICAgIGlmICh4bWxucykge1xuICAgICAgICAgIGVsZW1lbnROYW1lID0geG1sbnMgKyAnOicgKyBlbGVtZW50TmFtZTtcbiAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICAgIGlmICh0YWdTdGFydCkge1xuICAgICAgICBhdHRyc1N0YXJ0ID0gcTtcbiAgICAgICAgYXR0cnNTdHJpbmcgPSB4O1xuXG4gICAgICAgIGlmIChvbk9wZW5UYWcpIHtcbiAgICAgICAgICBpZiAocHJveHkpIHtcbiAgICAgICAgICAgIG9uT3BlblRhZyhlbGVtZW50UHJveHksIGRlY29kZUVudGl0aWVzLCB0YWdFbmQsIGdldENvbnRleHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvbk9wZW5UYWcoZWxlbWVudE5hbWUsIGdldEF0dHJzLCBkZWNvZGVFbnRpdGllcywgdGFnRW5kLCBnZXRDb250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFyc2VTdG9wKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgaWYgKHRhZ0VuZCkge1xuXG4gICAgICAgIGlmIChvbkNsb3NlVGFnKSB7XG4gICAgICAgICAgb25DbG9zZVRhZyhwcm94eSA/IGVsZW1lbnRQcm94eSA6IGVsZW1lbnROYW1lLCBkZWNvZGVFbnRpdGllcywgdGFnU3RhcnQsIGdldENvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKHBhcnNlU3RvcCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlc3RvcmUgb2xkIG5hbWVzcGFjZVxuICAgICAgICBpZiAoaXNOYW1lc3BhY2UpIHtcbiAgICAgICAgICBpZiAoIXRhZ1N0YXJ0KSB7XG4gICAgICAgICAgICBuc01hdHJpeCA9IG5zTWF0cml4U3RhY2sucG9wKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5zTWF0cml4ID0gX25zTWF0cml4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBqICs9IDE7XG4gICAgfVxuICB9IC8qKiBlbmQgcGFyc2UgKi9cblxufVxuXG5leHBvcnQgeyBQYXJzZXIsIGRlY29kZUVudGl0aWVzIGFzIGRlY29kZSB9O1xuIiwiaW1wb3J0IHtcbiAgZG9taWZ5LFxuICBjbGFzc2VzIGFzIGRvbUNsYXNzZXMsXG4gIG1hdGNoZXMgYXMgZG9tTWF0Y2hlcyxcbiAgZGVsZWdhdGUgYXMgZG9tRGVsZWdhdGUsXG4gIHF1ZXJ5IGFzIGRvbVF1ZXJ5LFxuICBxdWVyeUFsbCBhcyBkb21RdWVyeUFsbCxcbiAgZXZlbnQgYXMgZG9tRXZlbnQsXG4gIGF0dHIgYXMgZG9tQXR0clxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHtcbiAgZmlsdGVyLFxuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgY3JlYXRlRW1pdHRlciBmcm9tICdtaXR0JztcblxudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgc2Nyb2xsU3ltYm9sTGVmdDogJ+KAuScsXG4gIHNjcm9sbFN5bWJvbFJpZ2h0OiAn4oC6J1xufTtcblxuXG4vKipcbiAqIFRoaXMgY29tcG9uZW50IGFkZHMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gc2Nyb2xsIG92ZXIgYSBsaXN0IG9mIHRhYnMuXG4gKlxuICogSXQgYWRkcyBzY3JvbGwgYnV0dG9ucyBvbiB0aGUgbGVmdCBhbmQgcmlnaHQgc2lkZSBvZiB0aGUgdGFicyBjb250YWluZXJcbiAqIGlmIG5vdCBhbGwgdGFicyBhcmUgdmlzaWJsZS4gSXQgYWxzbyBhZGRzIGEgbW91c2Ugd2hlZWwgbGlzdGVuZXIgb24gdGhlXG4gKiBjb250YWluZXIuXG4gKlxuICogSWYgZWl0aGVyIGEgYnV0dG9uIGlzIGNsaWNrZWQgb3IgdGhlIG1vdXNlIHdoZWVsIGlzIHVzZWQgb3ZlciB0aGUgdGFicyxcbiAqIGEgJ3Njcm9sbCcgZXZlbnQgaXMgYmVpbmcgZmlyZWQuIFRoaXMgZXZlbnQgY29udGFpbnMgdGhlIG5vZGUgZWxlbWVudHNcbiAqIG9mIHRoZSBuZXcgYW5kIG9sZCBhY3RpdmUgdGFiLCBhbmQgdGhlIGRpcmVjdGlvbiBpbiB3aGljaCB0aGUgdGFiIGhhc1xuICogY2hhbmdlZCByZWxhdGl2ZSB0byB0aGUgb2xkIGFjdGl2ZSB0YWIuXG4gKlxuICogQGV4YW1wbGU6XG4gKiAoMSkgcHJvdmlkZSBhIHRhYnMtY29udGFpbmVyOlxuICpcbiAqIHZhciAkZWwgPSAoXG4gKiAgIDxkaXY+XG4gKiAgICAgPCEtLSBidXR0b24gYWRkZWQgYnkgc2Nyb2xsVGFicyAtLT5cbiAqICAgICA8c3BhbiBjbGFzcz1cInNjcm9sbC10YWJzLWJ1dHRvbiBzY3JvbGwtdGFicy1sZWZ0XCI+PC9zcGFuPlxuICogICAgIDx1bCBjbGFzcz1cIm15LXRhYnMtY29udGFpbmVyXCI+XG4gKiAgICAgICA8bGkgY2xhc3M9XCJteS10YWIgaS1hbS1hY3RpdmVcIj48L2xpPlxuICogICAgICAgPGxpIGNsYXNzPVwibXktdGFiXCI+PC9saT5cbiAqICAgICAgIDxsaSBjbGFzcz1cIm15LXRhYiBpZ25vcmUtbWVcIj48L2xpPlxuICogICAgIDwvdWw+XG4gKiAgICAgPCEtLSBidXR0b24gYWRkZWQgYnkgc2Nyb2xsVGFicyAtLT5cbiAqICAgICA8c3BhbiBjbGFzcz1cInNjcm9sbC10YWJzLWJ1dHRvbiBzY3JvbGwtdGFicy1yaWdodFwiPjwvc3Bhbj5cbiAqICAgPC9kaXY+XG4gKiApO1xuICpcbiAqXG4gKiAoMikgaW5pdGlhbGl6ZSBzY3JvbGxUYWJzOlxuICpcbiAqICB2YXIgc2Nyb2xsZXIgPSBzY3JvbGxUYWJzKHRhYkJhck5vZGUsIHtcbiAqICAgIHNlbGVjdG9yczoge1xuICogICAgICB0YWJzQ29udGFpbmVyOiAnLm15LXRhYnMtY29udGFpbmVyJyxcbiAqICAgICAgdGFiOiAnLm15LXRhYicsXG4gKiAgICAgIGlnbm9yZTogJy5pZ25vcmUtbWUnLFxuICogICAgICBhY3RpdmU6ICcuaS1hbS1hY3RpdmUnXG4gKiAgICB9XG4gKiAgfSk7XG4gKlxuICpcbiAqICgzKSBsaXN0ZW4gdG8gdGhlIHNjcm9sbCBldmVudDpcbiAqXG4gKiBzY3JvbGxlci5vbignc2Nyb2xsJywgZnVuY3Rpb24obmV3QWN0aXZlTm9kZSwgb2xkQWN0aXZlTm9kZSwgZGlyZWN0aW9uKSB7XG4gKiAgIC8vIGRpcmVjdGlvbiBpcyBhbnkgb2YgKC0xOiBsZWZ0LCAxOiByaWdodClcbiAqICAgLy8gYWN0aXZhdGUgdGhlIG5ldyBhY3RpdmUgdGFiXG4gKiB9KTtcbiAqXG4gKlxuICogKDQpIHVwZGF0ZSB0aGUgc2Nyb2xsZXIgaWYgdGFicyBjaGFuZ2UgYW5kIG9yIHRoZSB0YWIgY29udGFpbmVyIHJlc2l6ZXM6XG4gKlxuICogc2Nyb2xsZXIudXBkYXRlKCk7XG4gKlxuICpcbiAqIEBwYXJhbSAge0RPTUVsZW1lbnR9IGVsXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9ucy5zZWxlY3RvcnNcbiAqIEBwYXJhbSAge1N0cmluZ30gb3B0aW9ucy5zZWxlY3RvcnMudGFic0NvbnRhaW5lciB0aGUgY29udGFpbmVyIGFsbCB0YWJzIGFyZSBjb250YWluZWQgaW5cbiAqIEBwYXJhbSAge1N0cmluZ30gb3B0aW9ucy5zZWxlY3RvcnMudGFiIGEgc2luZ2xlIHRhYiBpbnNpZGUgdGhlIHRhYiBjb250YWluZXJcbiAqIEBwYXJhbSAge1N0cmluZ30gb3B0aW9ucy5zZWxlY3RvcnMuaWdub3JlIHRhYnMgdGhhdCBzaG91bGQgYmUgaWdub3JlZCBkdXJpbmcgc2Nyb2xsIGxlZnQvcmlnaHRcbiAqIEBwYXJhbSAge1N0cmluZ30gb3B0aW9ucy5zZWxlY3RvcnMuYWN0aXZlIHNlbGVjdG9yIGZvciB0aGUgY3VycmVudCBhY3RpdmUgdGFiXG4gKiBAcGFyYW0gIHtTdHJpbmd9IFtvcHRpb25zLnNjcm9sbFN5bWJvbExlZnRdXG4gKiBAcGFyYW0gIHtTdHJpbmd9IFtvcHRpb25zLnNjcm9sbFN5bWJvbFJpZ2h0XVxuICovXG5mdW5jdGlvbiBTY3JvbGxUYWJzKCRlbCwgb3B0aW9ucykge1xuXG4gIC8vIHdlIGFyZSBhbiBldmVudCBlbWl0dGVyXG4gIGFzc2lnbih0aGlzLCBjcmVhdGVFbWl0dGVyKCkpO1xuXG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgPSBhc3NpZ24oe30sIERFRkFVTFRfT1BUSU9OUywgb3B0aW9ucyk7XG4gIHRoaXMuY29udGFpbmVyID0gJGVsO1xuXG4gIHRoaXMuX2NyZWF0ZVNjcm9sbEJ1dHRvbnMoJGVsLCBvcHRpb25zKTtcblxuICB0aGlzLl9iaW5kRXZlbnRzKCRlbCk7XG59XG5cblxuLyoqXG4gKiBDcmVhdGUgYSBjbGlja2FibGUgc2Nyb2xsIGJ1dHRvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy5jbGFzc05hbWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLmxhYmVsXG4gKiBAcGFyYW0ge051bWJlcn0gb3B0aW9ucy5kaXJlY3Rpb25cbiAqXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fSBUaGUgY3JlYXRlZCBzY3JvbGwgYnV0dG9uIG5vZGVcbiAqL1xuU2Nyb2xsVGFicy5wcm90b3R5cGUuX2NyZWF0ZUJ1dHRvbiA9IGZ1bmN0aW9uKHBhcmVudE5vZGUsIG9wdGlvbnMpIHtcblxuICB2YXIgY2xhc3NOYW1lID0gb3B0aW9ucy5jbGFzc05hbWUsXG4gICAgICBkaXJlY3Rpb24gPSBvcHRpb25zLmRpcmVjdGlvbjtcblxuXG4gIHZhciBidXR0b24gPSBkb21RdWVyeSgnLicgKyBjbGFzc05hbWUsIHBhcmVudE5vZGUpO1xuXG4gIGlmICghYnV0dG9uKSB7XG4gICAgYnV0dG9uID0gZG9taWZ5KCc8c3BhbiBjbGFzcz1cInNjcm9sbC10YWJzLWJ1dHRvbiAnICsgY2xhc3NOYW1lICsgJ1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmxhYmVsICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3NwYW4+Jyk7XG5cbiAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShidXR0b24sIHBhcmVudE5vZGUuY2hpbGROb2Rlc1swXSk7XG4gIH1cblxuICBkb21BdHRyKGJ1dHRvbiwgJ2RhdGEtZGlyZWN0aW9uJywgZGlyZWN0aW9uKTtcblxuICByZXR1cm4gYnV0dG9uO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYm90aCBzY3JvbGwgYnV0dG9uc1xuICpcbiAqIEBwYXJhbSAge0RPTUVsZW1lbnR9IHBhcmVudE5vZGVcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtICB7U3RyaW5nfSBvcHRpb25zLnNjcm9sbFN5bWJvbExlZnRcbiAqIEBwYXJhbSAge1N0cmluZ30gb3B0aW9ucy5zY3JvbGxTeW1ib2xSaWdodFxuICovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5fY3JlYXRlU2Nyb2xsQnV0dG9ucyA9IGZ1bmN0aW9uKHBhcmVudE5vZGUsIG9wdGlvbnMpIHtcblxuICAvLyBDcmVhdGUgYSBidXR0b24gdGhhdCBzY3JvbGxzIHRvIHRoZSB0YWIgbGVmdCB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSB0YWJcbiAgdGhpcy5fY3JlYXRlQnV0dG9uKHBhcmVudE5vZGUsIHtcbiAgICBjbGFzc05hbWU6ICdzY3JvbGwtdGFicy1sZWZ0JyxcbiAgICBsYWJlbDogb3B0aW9ucy5zY3JvbGxTeW1ib2xMZWZ0LFxuICAgIGRpcmVjdGlvbjogLTFcbiAgfSk7XG5cbiAgLy8gQ3JlYXRlIGEgYnV0dG9uIHRoYXQgc2Nyb2xscyB0byB0aGUgdGFiIHJpZ2h0IHRvIHRoZSBjdXJyZW50bHkgYWN0aXZlIHRhYlxuICB0aGlzLl9jcmVhdGVCdXR0b24ocGFyZW50Tm9kZSwge1xuICAgIGNsYXNzTmFtZTogJ3Njcm9sbC10YWJzLXJpZ2h0JyxcbiAgICBsYWJlbDogb3B0aW9ucy5zY3JvbGxTeW1ib2xSaWdodCxcbiAgICBkaXJlY3Rpb246IDFcbiAgfSk7XG59O1xuXG4vKipcbiAqIEdldCB0aGUgY3VycmVudCBhY3RpdmUgdGFiXG4gKlxuICogQHJldHVybiB7RE9NRWxlbWVudH1cbiAqL1xuU2Nyb2xsVGFicy5wcm90b3R5cGUuZ2V0QWN0aXZlVGFiTm9kZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZG9tUXVlcnkodGhpcy5vcHRpb25zLnNlbGVjdG9ycy5hY3RpdmUsIHRoaXMuY29udGFpbmVyKTtcbn07XG5cblxuLyoqXG4gKiBHZXQgdGhlIGNvbnRhaW5lciBhbGwgdGFicyBhcmUgY29udGFpbmVkIGluXG4gKlxuICogQHJldHVybiB7RE9NRWxlbWVudH1cbiAqL1xuU2Nyb2xsVGFicy5wcm90b3R5cGUuZ2V0VGFic0NvbnRhaW5lck5vZGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGRvbVF1ZXJ5KHRoaXMub3B0aW9ucy5zZWxlY3RvcnMudGFic0NvbnRhaW5lciwgdGhpcy5jb250YWluZXIpO1xufTtcblxuXG4vKipcbiAqIEdldCBhbGwgdGFicyAodmlzaWJsZSBhbmQgaW52aXNpYmxlIG9uZXMpXG4gKlxuICogQHJldHVybiB7QXJyYXk8RE9NRWxlbWVudD59XG4gKi9cblNjcm9sbFRhYnMucHJvdG90eXBlLmdldEFsbFRhYk5vZGVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBkb21RdWVyeUFsbCh0aGlzLm9wdGlvbnMuc2VsZWN0b3JzLnRhYiwgdGhpcy5jb250YWluZXIpO1xufTtcblxuXG4vKipcbiAqIEdldHMgYWxsIHRhYnMgdGhhdCBkb24ndCBoYXZlIHRoZSBpZ25vcmUgY2xhc3Mgc2V0XG4gKlxuICogQHJldHVybiB7QXJyYXk8RE9NRWxlbWVudD59XG4gKi9cblNjcm9sbFRhYnMucHJvdG90eXBlLmdldFZpc2libGVUYWJzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhbGxUYWJzID0gdGhpcy5nZXRBbGxUYWJOb2RlcygpO1xuXG4gIHZhciBpZ25vcmUgPSB0aGlzLm9wdGlvbnMuc2VsZWN0b3JzLmlnbm9yZTtcblxuICByZXR1cm4gZmlsdGVyKGFsbFRhYnMsIGZ1bmN0aW9uKHRhYk5vZGUpIHtcbiAgICByZXR1cm4gIWRvbU1hdGNoZXModGFiTm9kZSwgaWdub3JlKTtcbiAgfSk7XG59O1xuXG5cbi8qKlxuICogR2V0IGEgdGFiIHJlbGF0aXZlIHRvIGEgcmVmZXJlbmNlIHRhYi5cbiAqXG4gKiBAcGFyYW0gIHtET01FbGVtZW50fSByZWZlcmVuY2VUYWJOb2RlXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IG4gZ2V0cyB0aGUgbnRoIHRhYiBuZXh0IG9yIHByZXZpb3VzIHRvIHRoZSByZWZlcmVuY2UgdGFiXG4gKlxuICogQHJldHVybiB7RE9NRWxlbWVudH1cbiAqXG4gKiBAZXhhbXBsZTpcbiAqIFZpc2libGUgdGFiczogWyBBIHwgQiB8IEMgfCBEIHwgRSBdXG4gKiBBc3N1bWUgdGFiICdDJyBpcyB0aGUgcmVmZXJlbmNlIHRhYjpcbiAqIElmIGRpcmVjdGlvbiA9PT0gLTEsIGl0IHJldHVybnMgdGFiICdCJyxcbiAqIGlmIGRpcmVjdGlvbiA9PT0gIDIsIGl0IHJldHVybnMgdGFiICdFJ1xuICovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5nZXRBZGphY2VudFRhYiA9IGZ1bmN0aW9uKHJlZmVyZW5jZVRhYk5vZGUsIG4pIHtcbiAgdmFyIHZpc2libGVUYWJzID0gdGhpcy5nZXRWaXNpYmxlVGFicygpO1xuXG4gIHZhciBpbmRleCA9IHZpc2libGVUYWJzLmluZGV4T2YocmVmZXJlbmNlVGFiTm9kZSk7XG5cbiAgcmV0dXJuIHZpc2libGVUYWJzW2luZGV4ICsgbl07XG59O1xuXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5fYmluZEV2ZW50cyA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdGhpcy5fYmluZFdoZWVsRXZlbnQobm9kZSk7XG4gIHRoaXMuX2JpbmRUYWJDbGlja0V2ZW50cyhub2RlKTtcbiAgdGhpcy5fYmluZFNjcm9sbEJ1dHRvbkV2ZW50cyhub2RlKTtcbn07XG5cbi8qKlxuICogIEJpbmQgYSBjbGljayBsaXN0ZW5lciB0byBhIERPTSBub2RlLlxuICogIE1ha2Ugc3VyZSBhIHRhYiBsaW5rIGlzIGVudGlyZWx5IHZpc2libGUgYWZ0ZXIgb25DbGljay5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqL1xuU2Nyb2xsVGFicy5wcm90b3R5cGUuX2JpbmRUYWJDbGlja0V2ZW50cyA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdmFyIHNlbGVjdG9yID0gdGhpcy5vcHRpb25zLnNlbGVjdG9ycy50YWI7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGRvbURlbGVnYXRlLmJpbmQobm9kZSwgc2VsZWN0b3IsICdjbGljaycsIGZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgICBzZWxmLnNjcm9sbFRvVGFiTm9kZShldmVudC5kZWxlZ2F0ZVRhcmdldCk7XG4gIH0pO1xufTtcblxuXG4vKipcbiAqIEJpbmQgdGhlIHdoZWVsIGV2ZW50IGxpc3RlbmVyIHRvIGEgRE9NIG5vZGVcbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqL1xuU2Nyb2xsVGFicy5wcm90b3R5cGUuX2JpbmRXaGVlbEV2ZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZG9tRXZlbnQuYmluZChub2RlLCAnd2hlZWwnLCBmdW5jdGlvbihlKSB7XG5cbiAgICAvLyBzY3JvbGwgZGlyZWN0aW9uICgtMTogbGVmdCwgMTogcmlnaHQpXG4gICAgdmFyIGRpcmVjdGlvbiA9IE1hdGguc2lnbihlLmRlbHRhWSk7XG5cbiAgICB2YXIgb2xkQWN0aXZlVGFiID0gc2VsZi5nZXRBY3RpdmVUYWJOb2RlKCk7XG5cbiAgICB2YXIgbmV3QWN0aXZlVGFiID0gc2VsZi5nZXRBZGphY2VudFRhYihvbGRBY3RpdmVUYWIsIGRpcmVjdGlvbik7XG5cbiAgICBpZiAobmV3QWN0aXZlVGFiKSB7XG4gICAgICBzZWxmLnNjcm9sbFRvVGFiTm9kZShuZXdBY3RpdmVUYWIpO1xuICAgICAgc2VsZi5lbWl0KCdzY3JvbGwnLCBuZXdBY3RpdmVUYWIsIG9sZEFjdGl2ZVRhYiwgZGlyZWN0aW9uKTtcbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBCaW5kIHNjcm9sbCBidXR0b24gZXZlbnRzIHRvIGEgRE9NIG5vZGVcbiAqXG4gKiBAcGFyYW0gIHtET01FbGVtZW50fSBub2RlXG4gKi9cblNjcm9sbFRhYnMucHJvdG90eXBlLl9iaW5kU2Nyb2xsQnV0dG9uRXZlbnRzID0gZnVuY3Rpb24obm9kZSkge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBkb21EZWxlZ2F0ZS5iaW5kKG5vZGUsICcuc2Nyb2xsLXRhYnMtYnV0dG9uJywgJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciB0YXJnZXQgPSBldmVudC5kZWxlZ2F0ZVRhcmdldDtcblxuICAgIC8vIGRhdGEtZGlyZWN0aW9uIGlzIGVpdGhlciAtMSBvciAxXG4gICAgdmFyIGRpcmVjdGlvbiA9IHBhcnNlSW50KGRvbUF0dHIodGFyZ2V0LCAnZGF0YS1kaXJlY3Rpb24nKSwgMTApO1xuXG4gICAgdmFyIG9sZEFjdGl2ZVRhYk5vZGUgPSBzZWxmLmdldEFjdGl2ZVRhYk5vZGUoKTtcblxuICAgIHZhciBuZXdBY3RpdmVUYWJOb2RlID0gc2VsZi5nZXRBZGphY2VudFRhYihvbGRBY3RpdmVUYWJOb2RlLCBkaXJlY3Rpb24pO1xuXG4gICAgaWYgKG5ld0FjdGl2ZVRhYk5vZGUpIHtcbiAgICAgIHNlbGYuc2Nyb2xsVG9UYWJOb2RlKG5ld0FjdGl2ZVRhYk5vZGUpO1xuICAgICAgc2VsZi5lbWl0KCdzY3JvbGwnLCBuZXdBY3RpdmVUYWJOb2RlLCBvbGRBY3RpdmVUYWJOb2RlLCBkaXJlY3Rpb24pO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH0pO1xufTtcblxuXG4vKipcbiogU2Nyb2xsIHRvIGEgdGFiIGlmIGl0IGlzIG5vdCBlbnRpcmVseSB2aXNpYmxlXG4qXG4qIEBwYXJhbSAge0RPTUVsZW1lbnR9IHRhYk5vZGUgdGFiIG5vZGUgdG8gc2Nyb2xsIHRvXG4qL1xuU2Nyb2xsVGFicy5wcm90b3R5cGUuc2Nyb2xsVG9UYWJOb2RlID0gZnVuY3Rpb24odGFiTm9kZSkge1xuICBpZiAoIXRhYk5vZGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdGFic0NvbnRhaW5lck5vZGUgPSB0YWJOb2RlLnBhcmVudE5vZGU7XG5cbiAgdmFyIHRhYldpZHRoID0gdGFiTm9kZS5vZmZzZXRXaWR0aCxcbiAgICAgIHRhYk9mZnNldExlZnQgPSB0YWJOb2RlLm9mZnNldExlZnQsXG4gICAgICB0YWJPZmZzZXRSaWdodCA9IHRhYk9mZnNldExlZnQgKyB0YWJXaWR0aCxcbiAgICAgIGNvbnRhaW5lcldpZHRoID0gdGFic0NvbnRhaW5lck5vZGUub2Zmc2V0V2lkdGgsXG4gICAgICBjb250YWluZXJTY3JvbGxMZWZ0ID0gdGFic0NvbnRhaW5lck5vZGUuc2Nyb2xsTGVmdDtcblxuICBpZiAoY29udGFpbmVyU2Nyb2xsTGVmdCA+IHRhYk9mZnNldExlZnQpIHtcbiAgICAvLyBzY3JvbGwgdG8gdGhlIGxlZnQsIGlmIHRoZSB0YWIgaXMgb3ZlcmZsb3dpbmcgb24gdGhlIGxlZnQgc2lkZVxuICAgIHRhYnNDb250YWluZXJOb2RlLnNjcm9sbExlZnQgPSAwO1xuICB9IGVsc2UgaWYgKHRhYk9mZnNldFJpZ2h0ID4gY29udGFpbmVyV2lkdGgpIHtcbiAgICAvLyBzY3JvbGwgdG8gdGhlIHJpZ2h0LCBpZiB0aGUgdGFiIGlzIG92ZXJmbG93aW5nIG9uIHRoZSByaWdodCBzaWRlXG4gICAgdGFic0NvbnRhaW5lck5vZGUuc2Nyb2xsTGVmdCA9IHRhYk9mZnNldFJpZ2h0IC0gY29udGFpbmVyV2lkdGg7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBSZWFjdCBvbiB0YWIgY2hhbmdlcyBmcm9tIG91dHNpZGUgKHJlc2l6ZS9zaG93L2hpZGUvYWRkL3JlbW92ZSksXG4gKiB1cGRhdGUgc2Nyb2xsIGJ1dHRvbiB2aXNpYmlsaXR5LlxuICovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgdGFic0NvbnRhaW5lck5vZGUgPSB0aGlzLmdldFRhYnNDb250YWluZXJOb2RlKCk7XG5cbiAgLy8gY2hlY2sgaWYgdGFicyBmaXQgaW4gY29udGFpbmVyXG4gIHZhciBvdmVyZmxvdyA9IHRhYnNDb250YWluZXJOb2RlLnNjcm9sbFdpZHRoID4gdGFic0NvbnRhaW5lck5vZGUub2Zmc2V0V2lkdGg7XG5cbiAgLy8gVE9ETyhuaWtrdSk6IGRpc3Rpbmd1aXNoIG92ZXJmbG93IGxlZnQgLyBvdmVyZmxvdyByaWdodD9cbiAgdmFyIG92ZXJmbG93Q2xhc3MgPSAnc2Nyb2xsLXRhYnMtb3ZlcmZsb3cnO1xuXG4gIGRvbUNsYXNzZXModGhpcy5jb250YWluZXIpLnRvZ2dsZShvdmVyZmxvd0NsYXNzLCBvdmVyZmxvdyk7XG5cbiAgaWYgKG92ZXJmbG93KSB7XG4gICAgLy8gbWFrZSBzdXJlIHRoZSBjdXJyZW50IGFjdGl2ZSB0YWIgaXMgYWx3YXlzIHZpc2libGVcbiAgICB0aGlzLnNjcm9sbFRvVGFiTm9kZSh0aGlzLmdldEFjdGl2ZVRhYk5vZGUoKSk7XG4gIH1cbn07XG5cblxuLy8gZXhwb3J0cyAvLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQ3JlYXRlIGEgc2Nyb2xsVGFicyBpbnN0YW5jZSBvbiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9ICRlbFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuIHtTY3JvbGxUYWJzfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGUoJGVsLCBvcHRpb25zKSB7XG5cbiAgdmFyIHNjcm9sbFRhYnMgPSBnZXQoJGVsKTtcblxuICBpZiAoIXNjcm9sbFRhYnMpIHtcbiAgICBzY3JvbGxUYWJzID0gbmV3IFNjcm9sbFRhYnMoJGVsLCBvcHRpb25zKTtcblxuICAgICRlbC5fX3Njcm9sbFRhYnMgPSBzY3JvbGxUYWJzO1xuICB9XG5cbiAgcmV0dXJuIHNjcm9sbFRhYnM7XG59XG5cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHNjcm9sbFRhYnMgaW5zdGFuY2UgdGhhdCBoYXMgYmVlbiBwcmV2aW91c2x5XG4gKiBpbml0aWFsaXplZCBvbiB0aGUgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9ICRlbFxuICogQHJldHVybiB7U2Nyb2xsVGFic31cbiAqL1xuZnVuY3Rpb24gZ2V0KCRlbCkge1xuICByZXR1cm4gJGVsLl9fc2Nyb2xsVGFicztcbn1cblxuY3JlYXRlLmdldCA9IGdldDsiLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBzZWxlY3Rpb24gdXBkYXRlIGZvciB0aGUgZ2l2ZW5cbiAqIGN1cnJlbnQgYW5kIG5ldyBpbnB1dCB2YWx1ZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGN1cnJlbnRTZWxlY3Rpb24gYXMge3N0YXJ0LCBlbmR9XG4gKiBAcGFyYW0ge1N0cmluZ30gY3VycmVudFZhbHVlXG4gKiBAcGFyYW0ge1N0cmluZ30gbmV3VmFsdWVcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IG5ld1NlbGVjdGlvbiBhcyB7c3RhcnQsIGVuZH1cbiAqL1xuZnVuY3Rpb24gY2FsY3VsYXRlVXBkYXRlKGN1cnJlbnRTZWxlY3Rpb24sIGN1cnJlbnRWYWx1ZSwgbmV3VmFsdWUpIHtcblxuICB2YXIgY3VycmVudEN1cnNvciA9IGN1cnJlbnRTZWxlY3Rpb24uc3RhcnQsXG4gICAgICBuZXdDdXJzb3IgPSBjdXJyZW50Q3Vyc29yLFxuICAgICAgZGlmZiA9IG5ld1ZhbHVlLmxlbmd0aCAtIGN1cnJlbnRWYWx1ZS5sZW5ndGgsXG4gICAgICBpZHg7XG5cbiAgdmFyIGxlbmd0aERlbHRhID0gbmV3VmFsdWUubGVuZ3RoIC0gY3VycmVudFZhbHVlLmxlbmd0aDtcblxuICB2YXIgY3VycmVudFRhaWwgPSBjdXJyZW50VmFsdWUuc3Vic3RyaW5nKGN1cnJlbnRDdXJzb3IpO1xuXG4gIC8vIGNoZWNrIGlmIHdlIGNhbiByZW1vdmUgY29tbW9uIGVuZGluZyBmcm9tIHRoZSBlcXVhdGlvblxuICAvLyB0byBiZSBhYmxlIHRvIHByb3Blcmx5IGRldGVjdCBhIHNlbGVjdGlvbiBjaGFuZ2UgZm9yXG4gIC8vIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW9zOlxuICAvL1xuICAvLyAgKiAoQUFBVFRUfFRGKSA9PiAoQUFBVHxURilcbiAgLy8gICogKEFBQVR8VEYpID0+ICAoQUFBVFRUfFRGKVxuICAvL1xuICBpZiAobmV3VmFsdWUubGFzdEluZGV4T2YoY3VycmVudFRhaWwpID09PSBuZXdWYWx1ZS5sZW5ndGggLSBjdXJyZW50VGFpbC5sZW5ndGgpIHtcbiAgICBjdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWUuc3Vic3RyaW5nKDAsIGN1cnJlbnRWYWx1ZS5sZW5ndGggLSBjdXJyZW50VGFpbC5sZW5ndGgpO1xuICAgIG5ld1ZhbHVlID0gbmV3VmFsdWUuc3Vic3RyaW5nKDAsIG5ld1ZhbHVlLmxlbmd0aCAtIGN1cnJlbnRUYWlsLmxlbmd0aCk7XG4gIH1cblxuICAvLyBkaWZmXG4gIHZhciBkaWZmID0gY3JlYXRlRGlmZihjdXJyZW50VmFsdWUsIG5ld1ZhbHVlKTtcblxuICBpZiAoZGlmZikge1xuICAgIGlmIChkaWZmLnR5cGUgPT09ICdyZW1vdmUnKSB7XG4gICAgICBuZXdDdXJzb3IgPSBkaWZmLm5ld1N0YXJ0O1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdDdXJzb3IgPSBkaWZmLm5ld0VuZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmFuZ2UobmV3Q3Vyc29yKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYWxjdWxhdGVVcGRhdGU7XG5cblxuZnVuY3Rpb24gY3JlYXRlRGlmZihjdXJyZW50VmFsdWUsIG5ld1ZhbHVlKSB7XG5cbiAgdmFyIGluc2VydDtcblxuICB2YXIgbF9zdHIsIGxfY2hhciwgbF9pZHggPSAwLFxuICAgICAgc19zdHIsIHNfY2hhciwgc19pZHggPSAwO1xuXG4gIGlmIChuZXdWYWx1ZS5sZW5ndGggPiBjdXJyZW50VmFsdWUubGVuZ3RoKSB7XG4gICAgbF9zdHIgPSBuZXdWYWx1ZTtcbiAgICBzX3N0ciA9IGN1cnJlbnRWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBsX3N0ciA9IGN1cnJlbnRWYWx1ZTtcbiAgICBzX3N0ciA9IG5ld1ZhbHVlO1xuICB9XG5cbiAgLy8gYXNzdW1lIHRoZXJlIHdpbGwgYmUgb25seSBvbmUgaW5zZXJ0IC8gcmVtb3ZlIGFuZFxuICAvLyBkZXRlY3QgdGhhdCBfZmlyc3RfIGVkaXQgb3BlcmF0aW9uIG9ubHlcbiAgd2hpbGUgKGxfaWR4IDwgbF9zdHIubGVuZ3RoKSB7XG5cbiAgICBsX2NoYXIgPSBsX3N0ci5jaGFyQXQobF9pZHgpO1xuICAgIHNfY2hhciA9IHNfc3RyLmNoYXJBdChzX2lkeCk7XG5cbiAgICAvLyBjaGFycyBubyBub3QgZXF1YWxcbiAgICBpZiAobF9jaGFyICE9PSBzX2NoYXIpIHtcblxuICAgICAgaWYgKCFpbnNlcnQpIHtcbiAgICAgICAgaW5zZXJ0ID0ge1xuICAgICAgICAgIGxfc3RhcnQ6IGxfaWR4LFxuICAgICAgICAgIHNfc3RhcnQ6IHNfaWR4XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGxfaWR4Kys7XG4gICAgfVxuXG4gICAgLy8gY2hhcnMgZXF1YWwgKGFnYWluPylcbiAgICBlbHNlIHtcblxuICAgICAgaWYgKGluc2VydCAmJiAhaW5zZXJ0LmNvbXBsZXRlKSB7XG4gICAgICAgIGluc2VydC5sX2VuZCA9IGxfaWR4O1xuICAgICAgICBpbnNlcnQuc19lbmQgPSBzX2lkeDtcbiAgICAgICAgaW5zZXJ0LmNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgc19pZHgrKztcbiAgICAgIGxfaWR4Kys7XG4gICAgfVxuICB9XG5cbiAgaWYgKGluc2VydCAmJiAhaW5zZXJ0LmNvbXBsZXRlKSB7XG4gICAgaW5zZXJ0LmNvbXBsZXRlID0gdHJ1ZTtcbiAgICBpbnNlcnQuc19lbmQgPSBzX3N0ci5sZW5ndGg7XG4gICAgaW5zZXJ0LmxfZW5kID0gbF9zdHIubGVuZ3RoO1xuICB9XG5cbiAgLy8gbm8gZGlmZlxuICBpZiAoIWluc2VydCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChuZXdWYWx1ZS5sZW5ndGggPiBjdXJyZW50VmFsdWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5ld1N0YXJ0OiBpbnNlcnQubF9zdGFydCxcbiAgICAgIG5ld0VuZDogaW5zZXJ0LmxfZW5kLFxuICAgICAgdHlwZTogJ2FkZCdcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBuZXdTdGFydDogaW5zZXJ0LnNfc3RhcnQsXG4gICAgICBuZXdFbmQ6IGluc2VydC5zX2VuZCxcbiAgICAgIHR5cGU6IG5ld1ZhbHVlLmxlbmd0aCA8IGN1cnJlbnRWYWx1ZS5sZW5ndGggPyAncmVtb3ZlJyA6ICdyZXBsYWNlJ1xuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZCBmb3IgY3JlYXRpbmcgYSBuZXcgc2VsZWN0aW9uIHJhbmdlIHtzdGFydCwgZW5kfSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IHN0YXJ0XG4gKiBAcGFyYW0ge051bWJlcn0gW2VuZF1cbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHNlbGVjdGlvbiByYW5nZSBhcyB7c3RhcnQsIGVuZH1cbiAqL1xuZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsIGVuZCkge1xuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbmQ6IGVuZCA9PT0gdW5kZWZpbmVkID8gc3RhcnQgOiBlbmRcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMucmFuZ2UgPSByYW5nZTtcblxuXG5mdW5jdGlvbiBzcGxpdFN0cihzdHIsIHBvc2l0aW9uKSB7XG4gIHJldHVybiB7XG4gICAgYmVmb3JlOiBzdHIuc3Vic3RyaW5nKDAsIHBvc2l0aW9uKSxcbiAgICBhZnRlcjogc3RyLnN1YnN0cmluZyhwb3NpdGlvbilcbiAgfTtcbn0iLCJmdW5jdGlvbiBlbnN1cmVJbXBvcnRlZChlbGVtZW50LCB0YXJnZXQpIHtcblxuICBpZiAoZWxlbWVudC5vd25lckRvY3VtZW50ICE9PSB0YXJnZXQub3duZXJEb2N1bWVudCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBtYXkgZmFpbCBvbiB3ZWJraXRcbiAgICAgIHJldHVybiB0YXJnZXQub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKGVsZW1lbnQsIHRydWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIGFwcGVuZFRvIHV0aWxpdHlcbiAqL1xuXG4vKipcbiAqIEFwcGVuZCBhIG5vZGUgdG8gYSB0YXJnZXQgZWxlbWVudCBhbmQgcmV0dXJuIHRoZSBhcHBlbmRlZCBub2RlLlxuICpcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IHRhcmdldFxuICpcbiAqIEByZXR1cm4ge1NWR0VsZW1lbnR9IHRoZSBhcHBlbmRlZCBub2RlXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZFRvKGVsZW1lbnQsIHRhcmdldCkge1xuICByZXR1cm4gdGFyZ2V0LmFwcGVuZENoaWxkKGVuc3VyZUltcG9ydGVkKGVsZW1lbnQsIHRhcmdldCkpO1xufVxuXG4vKipcbiAqIGFwcGVuZCB1dGlsaXR5XG4gKi9cblxuLyoqXG4gKiBBcHBlbmQgYSBub2RlIHRvIGFuIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gIHtTVkdFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0gIHtTVkdFbGVtZW50fSBub2RlXG4gKlxuICogQHJldHVybiB7U1ZHRWxlbWVudH0gdGhlIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kKHRhcmdldCwgbm9kZSkge1xuICBhcHBlbmRUbyhub2RlLCB0YXJnZXQpO1xuICByZXR1cm4gdGFyZ2V0O1xufVxuXG4vKipcbiAqIGF0dHJpYnV0ZSBhY2Nlc3NvciB1dGlsaXR5XG4gKi9cblxudmFyIExFTkdUSF9BVFRSID0gMjtcblxudmFyIENTU19QUk9QRVJUSUVTID0ge1xuICAnYWxpZ25tZW50LWJhc2VsaW5lJzogMSxcbiAgJ2Jhc2VsaW5lLXNoaWZ0JzogMSxcbiAgJ2NsaXAnOiAxLFxuICAnY2xpcC1wYXRoJzogMSxcbiAgJ2NsaXAtcnVsZSc6IDEsXG4gICdjb2xvcic6IDEsXG4gICdjb2xvci1pbnRlcnBvbGF0aW9uJzogMSxcbiAgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyc6IDEsXG4gICdjb2xvci1wcm9maWxlJzogMSxcbiAgJ2NvbG9yLXJlbmRlcmluZyc6IDEsXG4gICdjdXJzb3InOiAxLFxuICAnZGlyZWN0aW9uJzogMSxcbiAgJ2Rpc3BsYXknOiAxLFxuICAnZG9taW5hbnQtYmFzZWxpbmUnOiAxLFxuICAnZW5hYmxlLWJhY2tncm91bmQnOiAxLFxuICAnZmlsbCc6IDEsXG4gICdmaWxsLW9wYWNpdHknOiAxLFxuICAnZmlsbC1ydWxlJzogMSxcbiAgJ2ZpbHRlcic6IDEsXG4gICdmbG9vZC1jb2xvcic6IDEsXG4gICdmbG9vZC1vcGFjaXR5JzogMSxcbiAgJ2ZvbnQnOiAxLFxuICAnZm9udC1mYW1pbHknOiAxLFxuICAnZm9udC1zaXplJzogTEVOR1RIX0FUVFIsXG4gICdmb250LXNpemUtYWRqdXN0JzogMSxcbiAgJ2ZvbnQtc3RyZXRjaCc6IDEsXG4gICdmb250LXN0eWxlJzogMSxcbiAgJ2ZvbnQtdmFyaWFudCc6IDEsXG4gICdmb250LXdlaWdodCc6IDEsXG4gICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJzogMSxcbiAgJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJzogMSxcbiAgJ2ltYWdlLXJlbmRlcmluZyc6IDEsXG4gICdrZXJuaW5nJzogMSxcbiAgJ2xldHRlci1zcGFjaW5nJzogMSxcbiAgJ2xpZ2h0aW5nLWNvbG9yJzogMSxcbiAgJ21hcmtlcic6IDEsXG4gICdtYXJrZXItZW5kJzogMSxcbiAgJ21hcmtlci1taWQnOiAxLFxuICAnbWFya2VyLXN0YXJ0JzogMSxcbiAgJ21hc2snOiAxLFxuICAnb3BhY2l0eSc6IDEsXG4gICdvdmVyZmxvdyc6IDEsXG4gICdwb2ludGVyLWV2ZW50cyc6IDEsXG4gICdzaGFwZS1yZW5kZXJpbmcnOiAxLFxuICAnc3RvcC1jb2xvcic6IDEsXG4gICdzdG9wLW9wYWNpdHknOiAxLFxuICAnc3Ryb2tlJzogMSxcbiAgJ3N0cm9rZS1kYXNoYXJyYXknOiAxLFxuICAnc3Ryb2tlLWRhc2hvZmZzZXQnOiAxLFxuICAnc3Ryb2tlLWxpbmVjYXAnOiAxLFxuICAnc3Ryb2tlLWxpbmVqb2luJzogMSxcbiAgJ3N0cm9rZS1taXRlcmxpbWl0JzogMSxcbiAgJ3N0cm9rZS1vcGFjaXR5JzogMSxcbiAgJ3N0cm9rZS13aWR0aCc6IExFTkdUSF9BVFRSLFxuICAndGV4dC1hbmNob3InOiAxLFxuICAndGV4dC1kZWNvcmF0aW9uJzogMSxcbiAgJ3RleHQtcmVuZGVyaW5nJzogMSxcbiAgJ3VuaWNvZGUtYmlkaSc6IDEsXG4gICd2aXNpYmlsaXR5JzogMSxcbiAgJ3dvcmQtc3BhY2luZyc6IDEsXG4gICd3cml0aW5nLW1vZGUnOiAxXG59O1xuXG5cbmZ1bmN0aW9uIGdldEF0dHJpYnV0ZShub2RlLCBuYW1lKSB7XG4gIGlmIChDU1NfUFJPUEVSVElFU1tuYW1lXSkge1xuICAgIHJldHVybiBub2RlLnN0eWxlW25hbWVdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBub2RlLmdldEF0dHJpYnV0ZU5TKG51bGwsIG5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZShub2RlLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgaHlwaGVuYXRlZCA9IG5hbWUucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgJyQxLSQyJykudG9Mb3dlckNhc2UoKTtcblxuICB2YXIgdHlwZSA9IENTU19QUk9QRVJUSUVTW2h5cGhlbmF0ZWRdO1xuXG4gIGlmICh0eXBlKSB7XG4gICAgLy8gYXBwZW5kIHBpeGVsIHVuaXQsIHVubGVzcyBwcmVzZW50XG4gICAgaWYgKHR5cGUgPT09IExFTkdUSF9BVFRSICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKSArICdweCc7XG4gICAgfVxuXG4gICAgbm9kZS5zdHlsZVtoeXBoZW5hdGVkXSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIG5vZGUuc2V0QXR0cmlidXRlTlMobnVsbCwgbmFtZSwgdmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXMobm9kZSwgYXR0cnMpIHtcblxuICB2YXIgbmFtZXMgPSBPYmplY3Qua2V5cyhhdHRycyksIGksIG5hbWU7XG5cbiAgZm9yIChpID0gMCwgbmFtZTsgKG5hbWUgPSBuYW1lc1tpXSk7IGkrKykge1xuICAgIHNldEF0dHJpYnV0ZShub2RlLCBuYW1lLCBhdHRyc1tuYW1lXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIG9yIHNldHMgcmF3IGF0dHJpYnV0ZXMgb24gYSBub2RlLlxuICpcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSAge09iamVjdH0gW2F0dHJzXVxuICogQHBhcmFtICB7U3RyaW5nfSBbbmFtZV1cbiAqIEBwYXJhbSAge1N0cmluZ30gW3ZhbHVlXVxuICpcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gYXR0cihub2RlLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNldEF0dHJpYnV0ZShub2RlLCBuYW1lLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobm9kZSwgbmFtZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHNldEF0dHJpYnV0ZXMobm9kZSwgbmFtZSk7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn1cblxuLyoqXHJcbiAqIENsZWFyIHV0aWxpdHlcclxuICovXHJcbmZ1bmN0aW9uIGluZGV4KGFyciwgb2JqKSB7XHJcbiAgaWYgKGFyci5pbmRleE9mKSB7XHJcbiAgICByZXR1cm4gYXJyLmluZGV4T2Yob2JqKTtcclxuICB9XHJcblxyXG5cclxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkge1xyXG4gICAgaWYgKGFycltpXSA9PT0gb2JqKSB7XHJcbiAgICAgIHJldHVybiBpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIC0xO1xyXG59XHJcblxyXG52YXIgcmUgPSAvXFxzKy87XHJcblxyXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xyXG5cclxuZnVuY3Rpb24gZGVmaW5lZChvKSB7XHJcbiAgcmV0dXJuIHR5cGVvZiBvICE9PSAndW5kZWZpbmVkJztcclxufVxyXG5cclxuLyoqXHJcbiAqIFdyYXAgYGVsYCBpbiBhIGBDbGFzc0xpc3RgLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXHJcbiAqIEByZXR1cm4ge0NsYXNzTGlzdH1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5mdW5jdGlvbiBjbGFzc2VzKGVsKSB7XHJcbiAgcmV0dXJuIG5ldyBDbGFzc0xpc3QoZWwpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBDbGFzc0xpc3QoZWwpIHtcclxuICBpZiAoIWVsIHx8ICFlbC5ub2RlVHlwZSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdBIERPTSBlbGVtZW50IHJlZmVyZW5jZSBpcyByZXF1aXJlZCcpO1xyXG4gIH1cclxuICB0aGlzLmVsID0gZWw7XHJcbiAgdGhpcy5saXN0ID0gZWwuY2xhc3NMaXN0O1xyXG59XHJcblxyXG4vKipcclxuICogQWRkIGNsYXNzIGBuYW1lYCBpZiBub3QgYWxyZWFkeSBwcmVzZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxyXG4gKiBAcmV0dXJuIHtDbGFzc0xpc3R9XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuQ2xhc3NMaXN0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihuYW1lKSB7XHJcblxyXG4gIC8vIGNsYXNzTGlzdFxyXG4gIGlmICh0aGlzLmxpc3QpIHtcclxuICAgIHRoaXMubGlzdC5hZGQobmFtZSk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIGZhbGxiYWNrXHJcbiAgdmFyIGFyciA9IHRoaXMuYXJyYXkoKTtcclxuICB2YXIgaSA9IGluZGV4KGFyciwgbmFtZSk7XHJcbiAgaWYgKCF+aSkge1xyXG4gICAgYXJyLnB1c2gobmFtZSk7XHJcbiAgfVxyXG5cclxuICBpZiAoZGVmaW5lZCh0aGlzLmVsLmNsYXNzTmFtZS5iYXNlVmFsKSkge1xyXG4gICAgdGhpcy5lbC5jbGFzc05hbWUuYmFzZVZhbCA9IGFyci5qb2luKCcgJyk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuZWwuY2xhc3NOYW1lID0gYXJyLmpvaW4oJyAnKTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSBjbGFzcyBgbmFtZWAgd2hlbiBwcmVzZW50LCBvclxyXG4gKiBwYXNzIGEgcmVndWxhciBleHByZXNzaW9uIHRvIHJlbW92ZVxyXG4gKiBhbnkgd2hpY2ggbWF0Y2guXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfFJlZ0V4cH0gbmFtZVxyXG4gKiBAcmV0dXJuIHtDbGFzc0xpc3R9XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuQ2xhc3NMaXN0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgaWYgKCdbb2JqZWN0IFJlZ0V4cF0nID09PSB0b1N0cmluZy5jYWxsKG5hbWUpKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZW1vdmVNYXRjaGluZyhuYW1lKTtcclxuICB9XHJcblxyXG4gIC8vIGNsYXNzTGlzdFxyXG4gIGlmICh0aGlzLmxpc3QpIHtcclxuICAgIHRoaXMubGlzdC5yZW1vdmUobmFtZSk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIGZhbGxiYWNrXHJcbiAgdmFyIGFyciA9IHRoaXMuYXJyYXkoKTtcclxuICB2YXIgaSA9IGluZGV4KGFyciwgbmFtZSk7XHJcbiAgaWYgKH5pKSB7XHJcbiAgICBhcnIuc3BsaWNlKGksIDEpO1xyXG4gIH1cclxuICB0aGlzLmVsLmNsYXNzTmFtZS5iYXNlVmFsID0gYXJyLmpvaW4oJyAnKTtcclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZW1vdmUgYWxsIGNsYXNzZXMgbWF0Y2hpbmcgYHJlYC5cclxuICpcclxuICogQHBhcmFtIHtSZWdFeHB9IHJlXHJcbiAqIEByZXR1cm4ge0NsYXNzTGlzdH1cclxuICogQGFwaSBwcml2YXRlXHJcbiAqL1xyXG5cclxuQ2xhc3NMaXN0LnByb3RvdHlwZS5yZW1vdmVNYXRjaGluZyA9IGZ1bmN0aW9uKHJlKSB7XHJcbiAgdmFyIGFyciA9IHRoaXMuYXJyYXkoKTtcclxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xyXG4gICAgaWYgKHJlLnRlc3QoYXJyW2ldKSkge1xyXG4gICAgICB0aGlzLnJlbW92ZShhcnJbaV0pO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUb2dnbGUgY2xhc3MgYG5hbWVgLCBjYW4gZm9yY2Ugc3RhdGUgdmlhIGBmb3JjZWAuXHJcbiAqXHJcbiAqIEZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgY2xhc3NMaXN0LCBidXQgZG8gbm90IHN1cHBvcnQgYGZvcmNlYCB5ZXQsXHJcbiAqIHRoZSBtaXN0YWtlIHdpbGwgYmUgZGV0ZWN0ZWQgYW5kIGNvcnJlY3RlZC5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcclxuICogQHBhcmFtIHtCb29sZWFufSBmb3JjZVxyXG4gKiBAcmV0dXJuIHtDbGFzc0xpc3R9XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuQ2xhc3NMaXN0LnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbihuYW1lLCBmb3JjZSkge1xyXG4gIC8vIGNsYXNzTGlzdFxyXG4gIGlmICh0aGlzLmxpc3QpIHtcclxuICAgIGlmIChkZWZpbmVkKGZvcmNlKSkge1xyXG4gICAgICBpZiAoZm9yY2UgIT09IHRoaXMubGlzdC50b2dnbGUobmFtZSwgZm9yY2UpKSB7XHJcbiAgICAgICAgdGhpcy5saXN0LnRvZ2dsZShuYW1lKTsgLy8gdG9nZ2xlIGFnYWluIHRvIGNvcnJlY3RcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5saXN0LnRvZ2dsZShuYW1lKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gZmFsbGJhY2tcclxuICBpZiAoZGVmaW5lZChmb3JjZSkpIHtcclxuICAgIGlmICghZm9yY2UpIHtcclxuICAgICAgdGhpcy5yZW1vdmUobmFtZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFkZChuYW1lKTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKHRoaXMuaGFzKG5hbWUpKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlKG5hbWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hZGQobmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gYW4gYXJyYXkgb2YgY2xhc3Nlcy5cclxuICpcclxuICogQHJldHVybiB7QXJyYXl9XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuQ2xhc3NMaXN0LnByb3RvdHlwZS5hcnJheSA9IGZ1bmN0aW9uKCkge1xyXG4gIHZhciBjbGFzc05hbWUgPSB0aGlzLmVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJztcclxuICB2YXIgc3RyID0gY2xhc3NOYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcclxuICB2YXIgYXJyID0gc3RyLnNwbGl0KHJlKTtcclxuICBpZiAoJycgPT09IGFyclswXSkge1xyXG4gICAgYXJyLnNoaWZ0KCk7XHJcbiAgfVxyXG4gIHJldHVybiBhcnI7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgY2xhc3MgYG5hbWVgIGlzIHByZXNlbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXHJcbiAqIEByZXR1cm4ge0NsYXNzTGlzdH1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5DbGFzc0xpc3QucHJvdG90eXBlLmhhcyA9XHJcbkNsYXNzTGlzdC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIHRoaXMubGlzdCA/XHJcbiAgICAgIHRoaXMubGlzdC5jb250YWlucyhuYW1lKSA6XHJcbiAgICAgICEhIH5pbmRleCh0aGlzLmFycmF5KCksIG5hbWUpXHJcbiAgKTtcclxufTtcblxuZnVuY3Rpb24gcmVtb3ZlKGVsZW1lbnQpIHtcbiAgdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblxuICBpZiAocGFyZW50KSB7XG4gICAgcGFyZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogQ2xlYXIgdXRpbGl0eVxuICovXG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGUgZ2l2ZW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSAge0RPTUVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4ge0RPTUVsZW1lbnR9IHRoZSBlbGVtZW50IChmb3IgY2hhaW5pbmcpXG4gKi9cbmZ1bmN0aW9uIGNsZWFyKGVsZW1lbnQpIHtcbiAgdmFyIGNoaWxkO1xuXG4gIHdoaWxlICgoY2hpbGQgPSBlbGVtZW50LmZpcnN0Q2hpbGQpKSB7XG4gICAgcmVtb3ZlKGNoaWxkKTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBjbG9uZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LmNsb25lTm9kZSh0cnVlKTtcbn1cblxudmFyIG5zID0ge1xuICBzdmc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zydcbn07XG5cbi8qKlxuICogRE9NIHBhcnNpbmcgdXRpbGl0eVxuICovXG5cbnZhciBTVkdfU1RBUlQgPSAnPHN2ZyB4bWxucz1cIicgKyBucy5zdmcgKyAnXCInO1xuXG5mdW5jdGlvbiBwYXJzZShzdmcpIHtcblxuICB2YXIgdW53cmFwID0gZmFsc2U7XG5cbiAgLy8gZW5zdXJlIHdlIGltcG9ydCBhIHZhbGlkIHN2ZyBkb2N1bWVudFxuICBpZiAoc3ZnLnN1YnN0cmluZygwLCA0KSA9PT0gJzxzdmcnKSB7XG4gICAgaWYgKHN2Zy5pbmRleE9mKG5zLnN2ZykgPT09IC0xKSB7XG4gICAgICBzdmcgPSBTVkdfU1RBUlQgKyBzdmcuc3Vic3RyaW5nKDQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBuYW1lc3BhY2Ugc3ZnXG4gICAgc3ZnID0gU1ZHX1NUQVJUICsgJz4nICsgc3ZnICsgJzwvc3ZnPic7XG4gICAgdW53cmFwID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBwYXJzZWQgPSBwYXJzZURvY3VtZW50KHN2Zyk7XG5cbiAgaWYgKCF1bndyYXApIHtcbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gIHZhciBwYXJlbnQgPSBwYXJzZWQuZmlyc3RDaGlsZDtcblxuICB3aGlsZSAocGFyZW50LmZpcnN0Q2hpbGQpIHtcbiAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChwYXJlbnQuZmlyc3RDaGlsZCk7XG4gIH1cblxuICByZXR1cm4gZnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRG9jdW1lbnQoc3ZnKSB7XG5cbiAgdmFyIHBhcnNlcjtcblxuICAvLyBwYXJzZVxuICBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gIHBhcnNlci5hc3luYyA9IGZhbHNlO1xuXG4gIHJldHVybiBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHN2ZywgJ3RleHQveG1sJyk7XG59XG5cbi8qKlxuICogQ3JlYXRlIHV0aWxpdHkgZm9yIFNWRyBlbGVtZW50c1xuICovXG5cblxuLyoqXG4gKiBDcmVhdGUgYSBzcGVjaWZpYyB0eXBlIGZyb20gbmFtZSBvciBTVkcgbWFya3VwLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9yIG1hcmt1cCBvZiB0aGUgZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IFthdHRyc10gYXR0cmlidXRlcyB0byBzZXQgb24gdGhlIGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJucyB7U1ZHRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlKG5hbWUsIGF0dHJzKSB7XG4gIHZhciBlbGVtZW50O1xuXG4gIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gJzwnKSB7XG4gICAgZWxlbWVudCA9IHBhcnNlKG5hbWUpLmZpcnN0Q2hpbGQ7XG4gICAgZWxlbWVudCA9IGRvY3VtZW50LmltcG9ydE5vZGUoZWxlbWVudCwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhucy5zdmcsIG5hbWUpO1xuICB9XG5cbiAgaWYgKGF0dHJzKSB7XG4gICAgYXR0cihlbGVtZW50LCBhdHRycyk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBFdmVudHMgaGFuZGxpbmcgdXRpbGl0eVxuICovXG5cbmZ1bmN0aW9uIG9uKG5vZGUsIGV2ZW50LCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSkge1xuICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTtcbn1cblxuZnVuY3Rpb24gb2ZmKG5vZGUsIGV2ZW50LCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSkge1xuICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTtcbn1cblxuLyoqXG4gKiBHZW9tZXRyeSBoZWxwZXJzXG4gKi9cblxuLy8gZmFrZSBub2RlIHVzZWQgdG8gaW5zdGFudGlhdGUgc3ZnIGdlb21ldHJ5IGVsZW1lbnRzXG52YXIgbm9kZSA9IGNyZWF0ZSgnc3ZnJyk7XG5cbmZ1bmN0aW9uIGV4dGVuZChvYmplY3QsIHByb3BzKSB7XG4gIHZhciBpLCBrLCBrZXlzID0gT2JqZWN0LmtleXMocHJvcHMpO1xuXG4gIGZvciAoaSA9IDA7IChrID0ga2V5c1tpXSk7IGkrKykge1xuICAgIG9iamVjdFtrXSA9IHByb3BzW2tdO1xuICB9XG5cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuXG5mdW5jdGlvbiBjcmVhdGVQb2ludCh4LCB5KSB7XG4gIHZhciBwb2ludCA9IG5vZGUuY3JlYXRlU1ZHUG9pbnQoKTtcblxuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgY2FzZSAwOlxuICAgIHJldHVybiBwb2ludDtcbiAgY2FzZSAyOlxuICAgIHggPSB7XG4gICAgICB4OiB4LFxuICAgICAgeTogeVxuICAgIH07XG4gICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gZXh0ZW5kKHBvaW50LCB4KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgbWF0cml4IHZpYSBhcmdzLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogY3JlYXRlTWF0cml4KHsgYTogMSwgYjogMSB9KTtcbiAqIGNyZWF0ZU1hdHJpeCgpO1xuICogY3JlYXRlTWF0cml4KDEsIDIsIDAsIDAsIDMwLCAyMCk7XG4gKlxuICogQHJldHVybiB7U1ZHTWF0cml4fVxuICovXG5mdW5jdGlvbiBjcmVhdGVNYXRyaXgoYSwgYiwgYywgZCwgZSwgZikge1xuICB2YXIgbWF0cml4ID0gbm9kZS5jcmVhdGVTVkdNYXRyaXgoKTtcblxuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgY2FzZSAwOlxuICAgIHJldHVybiBtYXRyaXg7XG4gIGNhc2UgMTpcbiAgICByZXR1cm4gZXh0ZW5kKG1hdHJpeCwgYSk7XG4gIGNhc2UgNjpcbiAgICByZXR1cm4gZXh0ZW5kKG1hdHJpeCwge1xuICAgICAgYTogYSxcbiAgICAgIGI6IGIsXG4gICAgICBjOiBjLFxuICAgICAgZDogZCxcbiAgICAgIGU6IGUsXG4gICAgICBmOiBmXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlVHJhbnNmb3JtKG1hdHJpeCkge1xuICBpZiAobWF0cml4KSB7XG4gICAgcmV0dXJuIG5vZGUuY3JlYXRlU1ZHVHJhbnNmb3JtRnJvbU1hdHJpeChtYXRyaXgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBub2RlLmNyZWF0ZVNWR1RyYW5zZm9ybSgpO1xuICB9XG59XG5cbi8qKlxuICogU2VyaWFsaXphdGlvbiB1dGlsXG4gKi9cblxudmFyIFRFWFRfRU5USVRJRVMgPSAvKFsmPD5dezF9KS9nO1xudmFyIEFUVFJfRU5USVRJRVMgPSAvKFtcXG5cXHJcIl17MX0pL2c7XG5cbnZhciBFTlRJVFlfUkVQTEFDRU1FTlQgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnXFwnJ1xufTtcblxuZnVuY3Rpb24gZXNjYXBlKHN0ciwgcGF0dGVybikge1xuXG4gIGZ1bmN0aW9uIHJlcGxhY2VGbihtYXRjaCwgZW50aXR5KSB7XG4gICAgcmV0dXJuIEVOVElUWV9SRVBMQUNFTUVOVFtlbnRpdHldIHx8IGVudGl0eTtcbiAgfVxuXG4gIHJldHVybiBzdHIucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlRm4pO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemUobm9kZSwgb3V0cHV0KSB7XG5cbiAgdmFyIGksIGxlbiwgYXR0ck1hcCwgYXR0ck5vZGUsIGNoaWxkTm9kZXM7XG5cbiAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gIC8vIFRFWFRcbiAgY2FzZSAzOlxuICAgIC8vIHJlcGxhY2Ugc3BlY2lhbCBYTUwgY2hhcmFjdGVyc1xuICAgIG91dHB1dC5wdXNoKGVzY2FwZShub2RlLnRleHRDb250ZW50LCBURVhUX0VOVElUSUVTKSk7XG4gICAgYnJlYWs7XG5cbiAgLy8gRUxFTUVOVFxuICBjYXNlIDE6XG4gICAgb3V0cHV0LnB1c2goJzwnLCBub2RlLnRhZ05hbWUpO1xuXG4gICAgaWYgKG5vZGUuaGFzQXR0cmlidXRlcygpKSB7XG4gICAgICBhdHRyTWFwID0gbm9kZS5hdHRyaWJ1dGVzO1xuICAgICAgZm9yIChpID0gMCwgbGVuID0gYXR0ck1hcC5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBhdHRyTm9kZSA9IGF0dHJNYXAuaXRlbShpKTtcbiAgICAgICAgb3V0cHV0LnB1c2goJyAnLCBhdHRyTm9kZS5uYW1lLCAnPVwiJywgZXNjYXBlKGF0dHJOb2RlLnZhbHVlLCBBVFRSX0VOVElUSUVTKSwgJ1wiJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICBvdXRwdXQucHVzaCgnPicpO1xuICAgICAgY2hpbGROb2RlcyA9IG5vZGUuY2hpbGROb2RlcztcbiAgICAgIGZvciAoaSA9IDAsIGxlbiA9IGNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgc2VyaWFsaXplKGNoaWxkTm9kZXMuaXRlbShpKSwgb3V0cHV0KTtcbiAgICAgIH1cbiAgICAgIG91dHB1dC5wdXNoKCc8LycsIG5vZGUudGFnTmFtZSwgJz4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LnB1c2goJy8+Jyk7XG4gICAgfVxuICAgIGJyZWFrO1xuXG4gIC8vIENPTU1FTlRcbiAgY2FzZSA4OlxuICAgIG91dHB1dC5wdXNoKCc8IS0tJywgZXNjYXBlKG5vZGUubm9kZVZhbHVlLCBURVhUX0VOVElUSUVTKSwgJy0tPicpO1xuICAgIGJyZWFrO1xuXG4gIC8vIENEQVRBXG4gIGNhc2UgNDpcbiAgICBvdXRwdXQucHVzaCgnPCFbQ0RBVEFbJywgbm9kZS5ub2RlVmFsdWUsICddXT4nKTtcbiAgICBicmVhaztcblxuICBkZWZhdWx0OlxuICAgIHRocm93IG5ldyBFcnJvcigndW5hYmxlIHRvIGhhbmRsZSBub2RlICcgKyBub2RlLm5vZGVUeXBlKTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogaW5uZXJIVE1MIGxpa2UgZnVuY3Rpb25hbGl0eSBmb3IgU1ZHIGVsZW1lbnRzLlxuICogYmFzZWQgb24gaW5uZXJTVkcgKGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvaW5uZXJzdmcpXG4gKi9cblxuXG5mdW5jdGlvbiBzZXQoZWxlbWVudCwgc3ZnKSB7XG5cbiAgdmFyIHBhcnNlZCA9IHBhcnNlKHN2Zyk7XG5cbiAgLy8gY2xlYXIgZWxlbWVudCBjb250ZW50c1xuICBjbGVhcihlbGVtZW50KTtcblxuICBpZiAoIXN2Zykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghaXNGcmFnbWVudChwYXJzZWQpKSB7XG4gICAgLy8gZXh0cmFjdCA8c3ZnPiBmcm9tIHBhcnNlZCBkb2N1bWVudFxuICAgIHBhcnNlZCA9IHBhcnNlZC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cblxuICB2YXIgbm9kZXMgPSBzbGljZShwYXJzZWQuY2hpbGROb2Rlcyk7XG5cbiAgLy8gaW1wb3J0ICsgYXBwZW5kIGVhY2ggbm9kZVxuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgYXBwZW5kVG8obm9kZXNbaV0sIGVsZW1lbnQpO1xuICB9XG5cbn1cblxuZnVuY3Rpb24gZ2V0KGVsZW1lbnQpIHtcbiAgdmFyIGNoaWxkID0gZWxlbWVudC5maXJzdENoaWxkLFxuICAgICAgb3V0cHV0ID0gW107XG5cbiAgd2hpbGUgKGNoaWxkKSB7XG4gICAgc2VyaWFsaXplKGNoaWxkLCBvdXRwdXQpO1xuICAgIGNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xufVxuXG5mdW5jdGlvbiBpc0ZyYWdtZW50KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjZG9jdW1lbnQtZnJhZ21lbnQnO1xufVxuXG5mdW5jdGlvbiBpbm5lclNWRyhlbGVtZW50LCBzdmcpIHtcblxuICBpZiAoc3ZnICE9PSB1bmRlZmluZWQpIHtcblxuICAgIHRyeSB7XG4gICAgICBzZXQoZWxlbWVudCwgc3ZnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Vycm9yIHBhcnNpbmcgU1ZHOiAnICsgZS5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0KGVsZW1lbnQpO1xuICB9XG59XG5cblxuZnVuY3Rpb24gc2xpY2UoYXJyKSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpO1xufVxuXG4vKipcbiAqIFNlbGVjdGlvbiB1dGlsaXRpZXNcbiAqL1xuXG5mdW5jdGlvbiBzZWxlY3Qobm9kZSwgc2VsZWN0b3IpIHtcbiAgcmV0dXJuIG5vZGUucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEFsbChub2RlLCBzZWxlY3Rvcikge1xuICB2YXIgbm9kZXMgPSBub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuXG4gIHJldHVybiBbXS5tYXAuY2FsbChub2RlcywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9KTtcbn1cblxuLyoqXG4gKiBwcmVwZW5kVG8gdXRpbGl0eVxuICovXG5cbi8qKlxuICogUHJlcGVuZCBhIG5vZGUgdG8gYSB0YXJnZXQgZWxlbWVudCBhbmQgcmV0dXJuIHRoZSBwcmVwZW5kZWQgbm9kZS5cbiAqXG4gKiBAcGFyYW0gIHtTVkdFbGVtZW50fSBub2RlXG4gKiBAcGFyYW0gIHtTVkdFbGVtZW50fSB0YXJnZXRcbiAqXG4gKiBAcmV0dXJuIHtTVkdFbGVtZW50fSB0aGUgcHJlcGVuZGVkIG5vZGVcbiAqL1xuZnVuY3Rpb24gcHJlcGVuZFRvKG5vZGUsIHRhcmdldCkge1xuICByZXR1cm4gdGFyZ2V0Lmluc2VydEJlZm9yZShlbnN1cmVJbXBvcnRlZChub2RlLCB0YXJnZXQpLCB0YXJnZXQuZmlyc3RDaGlsZCB8fCBudWxsKTtcbn1cblxuLyoqXG4gKiBwcmVwZW5kIHV0aWxpdHlcbiAqL1xuXG4vKipcbiAqIFByZXBlbmQgYSBub2RlIHRvIGEgdGFyZ2V0IGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gIHtTVkdFbGVtZW50fSB0YXJnZXRcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IG5vZGVcbiAqXG4gKiBAcmV0dXJuIHtTVkdFbGVtZW50fSB0aGUgdGFyZ2V0IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gcHJlcGVuZCh0YXJnZXQsIG5vZGUpIHtcbiAgcHJlcGVuZFRvKG5vZGUsIHRhcmdldCk7XG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbi8qKlxuICogUmVwbGFjZSB1dGlsaXR5XG4gKi9cblxuZnVuY3Rpb24gcmVwbGFjZShlbGVtZW50LCByZXBsYWNlbWVudCkge1xuICBlbGVtZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGVuc3VyZUltcG9ydGVkKHJlcGxhY2VtZW50LCBlbGVtZW50KSwgZWxlbWVudCk7XG4gIHJldHVybiByZXBsYWNlbWVudDtcbn1cblxuLyoqXG4gKiB0cmFuc2Zvcm0gYWNjZXNzb3IgdXRpbGl0eVxuICovXG5cbmZ1bmN0aW9uIHdyYXBNYXRyaXgodHJhbnNmb3JtTGlzdCwgdHJhbnNmb3JtKSB7XG4gIGlmICh0cmFuc2Zvcm0gaW5zdGFuY2VvZiBTVkdNYXRyaXgpIHtcbiAgICByZXR1cm4gdHJhbnNmb3JtTGlzdC5jcmVhdGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4KHRyYW5zZm9ybSk7XG4gIH1cblxuICByZXR1cm4gdHJhbnNmb3JtO1xufVxuXG5cbmZ1bmN0aW9uIHNldFRyYW5zZm9ybXModHJhbnNmb3JtTGlzdCwgdHJhbnNmb3Jtcykge1xuICB2YXIgaSwgdDtcblxuICB0cmFuc2Zvcm1MaXN0LmNsZWFyKCk7XG5cbiAgZm9yIChpID0gMDsgKHQgPSB0cmFuc2Zvcm1zW2ldKTsgaSsrKSB7XG4gICAgdHJhbnNmb3JtTGlzdC5hcHBlbmRJdGVtKHdyYXBNYXRyaXgodHJhbnNmb3JtTGlzdCwgdCkpO1xuICB9XG59XG5cbi8qKlxuICogR2V0IG9yIHNldCB0aGUgdHJhbnNmb3JtcyBvbiB0aGUgZ2l2ZW4gbm9kZS5cbiAqXG4gKiBAcGFyYW0ge1NWR0VsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSAge1NWR1RyYW5zZm9ybXxTVkdNYXRyaXh8QXJyYXk8U1ZHVHJhbnNmb3JtfFNWR01hdHJpeD59IFt0cmFuc2Zvcm1zXVxuICpcbiAqIEByZXR1cm4ge1NWR1RyYW5zZm9ybX0gdGhlIGNvbnNvbGlkYXRlZCB0cmFuc2Zvcm1cbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtKG5vZGUsIHRyYW5zZm9ybXMpIHtcbiAgdmFyIHRyYW5zZm9ybUxpc3QgPSBub2RlLnRyYW5zZm9ybS5iYXNlVmFsO1xuXG4gIGlmICh0cmFuc2Zvcm1zKSB7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodHJhbnNmb3JtcykpIHtcbiAgICAgIHRyYW5zZm9ybXMgPSBbIHRyYW5zZm9ybXMgXTtcbiAgICB9XG5cbiAgICBzZXRUcmFuc2Zvcm1zKHRyYW5zZm9ybUxpc3QsIHRyYW5zZm9ybXMpO1xuICB9XG5cbiAgcmV0dXJuIHRyYW5zZm9ybUxpc3QuY29uc29saWRhdGUoKTtcbn1cblxuZXhwb3J0IHsgYXBwZW5kLCBhcHBlbmRUbywgYXR0ciwgY2xhc3NlcywgY2xlYXIsIGNsb25lLCBjcmVhdGUsIGlubmVyU1ZHLCBwcmVwZW5kLCBwcmVwZW5kVG8sIHJlbW92ZSwgcmVwbGFjZSwgdHJhbnNmb3JtLCBvbiwgb2ZmLCBjcmVhdGVQb2ludCwgY3JlYXRlTWF0cml4LCBjcmVhdGVUcmFuc2Zvcm0sIHNlbGVjdCwgc2VsZWN0QWxsIH07XG4iLCJtb2R1bGUuZXhwb3J0cz17XHJcbiAgXCJuYW1lXCI6IFwiQWN0aXZpdGlcIixcclxuICBcInVyaVwiOiBcImh0dHA6Ly9hY3Rpdml0aS5vcmcvYnBtblwiLFxyXG4gIFwicHJlZml4XCI6IFwiYWN0aXZpdGlcIixcclxuICBcInhtbFwiOiB7XHJcbiAgICBcInRhZ0FsaWFzXCI6IFwibG93ZXJDYXNlXCJcclxuICB9LFxyXG4gIFwiYXNzb2NpYXRpb25zXCI6IFtdLFxyXG4gIFwidHlwZXNcIjogW1xyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJEZWZpbml0aW9uc1wiLFxyXG4gICAgICBcImlzQWJzdHJhY3RcIjogdHJ1ZSxcclxuICAgICAgXCJleHRlbmRzXCI6IFtcclxuICAgICAgICBcImJwbW46RGVmaW5pdGlvbnNcIlxyXG4gICAgICBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImRpYWdyYW1SZWxhdGlvbklkXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkluT3V0QmluZGluZ1wiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogW1xyXG4gICAgICAgIFwiRWxlbWVudFwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJzb3VyY2VFeHByZXNzaW9uXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInRhcmdldFwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJidXNpbmVzc0tleVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJsb2NhbFwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkJvb2xlYW5cIixcclxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidmFyaWFibGVzXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkluXCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbXHJcbiAgICAgICAgXCJJbk91dEJpbmRpbmdcIlxyXG4gICAgICBdLFxyXG4gICAgICBcIm1ldGFcIjoge1xyXG4gICAgICAgIFwiYWxsb3dlZEluXCI6IFtcclxuICAgICAgICAgIFwiYnBtbjpDYWxsQWN0aXZpdHlcIlxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiT3V0XCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbXHJcbiAgICAgICAgXCJJbk91dEJpbmRpbmdcIlxyXG4gICAgICBdLFxyXG4gICAgICBcIm1ldGFcIjoge1xyXG4gICAgICAgIFwiYWxsb3dlZEluXCI6IFtcclxuICAgICAgICAgIFwiYnBtbjpDYWxsQWN0aXZpdHlcIlxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiQXN5bmNDYXBhYmxlXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpBY3Rpdml0eVwiLFxyXG4gICAgICAgIFwiYnBtbjpHYXRld2F5XCIsXHJcbiAgICAgICAgXCJicG1uOkV2ZW50XCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJhc3luY1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkJvb2xlYW5cIixcclxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiYXN5bmNCZWZvcmVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJCb29sZWFuXCIsXHJcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImFzeW5jQWZ0ZXJcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJCb29sZWFuXCIsXHJcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImV4Y2x1c2l2ZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkJvb2xlYW5cIixcclxuICAgICAgICAgIFwiZGVmYXVsdFwiOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJKb2JQcmlvcml6ZWRcIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOlByb2Nlc3NcIixcclxuICAgICAgICBcImFjdGl2aXRpOkFzeW5jQ2FwYWJsZVwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiam9iUHJpb3JpdHlcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiU2lnbmFsRXZlbnREZWZpbml0aW9uXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpTaWduYWxFdmVudERlZmluaXRpb25cIlxyXG4gICAgICBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImFzeW5jXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiQm9vbGVhblwiLFxyXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJFcnJvckV2ZW50RGVmaW5pdGlvblwiLFxyXG4gICAgICBcImlzQWJzdHJhY3RcIjogdHJ1ZSxcclxuICAgICAgXCJleHRlbmRzXCI6IFtcclxuICAgICAgICBcImJwbW46RXJyb3JFdmVudERlZmluaXRpb25cIlxyXG4gICAgICBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImVycm9yQ29kZVZhcmlhYmxlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImVycm9yTWVzc2FnZVZhcmlhYmxlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkVycm9yXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpFcnJvclwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiYWN0aXZpdGk6ZXJyb3JNZXNzYWdlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIlBvdGVudGlhbFN0YXJ0ZXJcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFtcclxuICAgICAgICBcIkVsZW1lbnRcIlxyXG4gICAgICBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInJlc291cmNlQXNzaWdubWVudEV4cHJlc3Npb25cIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcImJwbW46UmVzb3VyY2VBc3NpZ25tZW50RXhwcmVzc2lvblwiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJGb3JtU3VwcG9ydGVkXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpTdGFydEV2ZW50XCIsXHJcbiAgICAgICAgXCJicG1uOlVzZXJUYXNrXCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJmb3JtSGFuZGxlckNsYXNzXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImZvcm1LZXlcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiVGVtcGxhdGVTdXBwb3J0ZWRcIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOlByb2Nlc3NcIixcclxuICAgICAgICBcImJwbW46Rmxvd0VsZW1lbnRcIlxyXG4gICAgICBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcIm1vZGVsZXJUZW1wbGF0ZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJJbml0aWF0b3JcIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbIFwiYnBtbjpTdGFydEV2ZW50XCIgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJpbml0aWF0b3JcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiU2NyaXB0VGFza1wiLFxyXG4gICAgICBcImlzQWJzdHJhY3RcIjogdHJ1ZSxcclxuICAgICAgXCJleHRlbmRzXCI6IFtcclxuICAgICAgICBcImJwbW46U2NyaXB0VGFza1wiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwicmVzdWx0VmFyaWFibGVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwicmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiUHJvY2Vzc1wiLFxyXG4gICAgICBcImlzQWJzdHJhY3RcIjogdHJ1ZSxcclxuICAgICAgXCJleHRlbmRzXCI6IFtcclxuICAgICAgICBcImJwbW46UHJvY2Vzc1wiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY2FuZGlkYXRlU3RhcnRlckNvbmZpZ3VyYXRpb25cIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY2FuZGlkYXRlU3RhcnRlclVzZXJzXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZlcnNpb25UYWdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiaGlzdG9yeVRpbWVUb0xpdmVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiaXNTdGFydGFibGVJblRhc2tsaXN0XCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiQm9vbGVhblwiLFxyXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInByb2Nlc3MtaXMtZXhlY3V0YWJsZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkJvb2xlYW5cIixcclxuICAgICAgICAgIFwiZGVmYXVsdFwiOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uXCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJlc2NhbGF0aW9uQ29kZVZhcmlhYmxlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkZvcm1hbEV4cHJlc3Npb25cIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOkZvcm1hbEV4cHJlc3Npb25cIlxyXG4gICAgICBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInJlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkFzc2lnbmFibGVcIixcclxuICAgICAgXCJleHRlbmRzXCI6IFsgXCJicG1uOlVzZXJUYXNrXCIgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJhc3NpZ25lZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYW5kaWRhdGVVc2Vyc1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYW5kaWRhdGVHcm91cHNcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZHVlRGF0ZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJmb2xsb3dVcERhdGVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwicHJpb3JpdHlcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiQ2FsbEFjdGl2aXR5XCIsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbIFwiYnBtbjpDYWxsQWN0aXZpdHlcIiBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNhbGxlZEVsZW1lbnRCaW5kaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImRlZmF1bHRcIjogXCJsYXRlc3RcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY2FsbGVkRWxlbWVudFZlcnNpb25cIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY2FsbGVkRWxlbWVudFZlcnNpb25UYWdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY2FsbGVkRWxlbWVudFRlbmFudElkXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNhc2VSZWZcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY2FzZUJpbmRpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBcImxhdGVzdFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYXNlVmVyc2lvblwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYXNlVGVuYW50SWRcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidmFyaWFibGVNYXBwaW5nQ2xhc3NcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIlNlcnZpY2VUYXNrTGlrZVwiLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpTZXJ2aWNlVGFza1wiLFxyXG4gICAgICAgIFwiYnBtbjpCdXNpbmVzc1J1bGVUYXNrXCIsXHJcbiAgICAgICAgXCJicG1uOlNlbmRUYXNrXCIsXHJcbiAgICAgICAgXCJicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb25cIlxyXG4gICAgICBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImV4cHJlc3Npb25cIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY2xhc3NcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZGVsZWdhdGVFeHByZXNzaW9uXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInJlc3VsdFZhcmlhYmxlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkRtbkNhcGFibGVcIixcclxuICAgICAgXCJleHRlbmRzXCI6IFtcclxuICAgICAgICBcImJwbW46QnVzaW5lc3NSdWxlVGFza1wiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZGVjaXNpb25SZWZcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZGVjaXNpb25SZWZCaW5kaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImRlZmF1bHRcIjogXCJsYXRlc3RcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZGVjaXNpb25SZWZWZXJzaW9uXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcIm1hcERlY2lzaW9uUmVzdWx0XCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImRlZmF1bHRcIjogXCJyZXN1bHRMaXN0XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImRlY2lzaW9uUmVmVGVuYW50SWRcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiRXh0ZXJuYWxDYXBhYmxlXCIsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJhY3Rpdml0aTpTZXJ2aWNlVGFza0xpa2VcIlxyXG4gICAgICBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInR5cGVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidG9waWNcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiVGFza1ByaW9yaXplZFwiLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpQcm9jZXNzXCIsXHJcbiAgICAgICAgXCJhY3Rpdml0aTpFeHRlcm5hbENhcGFibGVcIlxyXG4gICAgICBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInRhc2tQcmlvcml0eVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJQcm9wZXJ0aWVzXCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbXHJcbiAgICAgICAgXCJFbGVtZW50XCJcclxuICAgICAgXSxcclxuICAgICAgXCJtZXRhXCI6IHtcclxuICAgICAgICBcImFsbG93ZWRJblwiOiBbIFwiKlwiIF1cclxuICAgICAgfSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YWx1ZXNcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlByb3BlcnR5XCIsXHJcbiAgICAgICAgICBcImlzTWFueVwiOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJQcm9wZXJ0eVwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogW1xyXG4gICAgICAgIFwiRWxlbWVudFwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiaWRcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwibmFtZVwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YWx1ZVwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJDb25uZWN0b3JcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFtcclxuICAgICAgICBcIkVsZW1lbnRcIlxyXG4gICAgICBdLFxyXG4gICAgICBcIm1ldGFcIjoge1xyXG4gICAgICAgIFwiYWxsb3dlZEluXCI6IFtcclxuICAgICAgICAgIFwiYWN0aXZpdGk6U2VydmljZVRhc2tMaWtlXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiaW5wdXRPdXRwdXRcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIklucHV0T3V0cHV0XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNvbm5lY3RvcklkXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiSW5wdXRPdXRwdXRcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFtcclxuICAgICAgICBcIkVsZW1lbnRcIlxyXG4gICAgICBdLFxyXG4gICAgICBcIm1ldGFcIjoge1xyXG4gICAgICAgIFwiYWxsb3dlZEluXCI6IFtcclxuICAgICAgICAgIFwiYnBtbjpGbG93Tm9kZVwiLFxyXG4gICAgICAgICAgXCJhY3Rpdml0aTpDb25uZWN0b3JcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJpbnB1dE91dHB1dFwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiSW5wdXRPdXRwdXRcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY29ubmVjdG9ySWRcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJpbnB1dFBhcmFtZXRlcnNcIixcclxuICAgICAgICAgIFwiaXNNYW55XCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJJbnB1dFBhcmFtZXRlclwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJvdXRwdXRQYXJhbWV0ZXJzXCIsXHJcbiAgICAgICAgICBcImlzTWFueVwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiT3V0cHV0UGFyYW1ldGVyXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIklucHV0T3V0cHV0UGFyYW1ldGVyXCIsXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwibmFtZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YWx1ZVwiLFxyXG4gICAgICAgICAgXCJpc0JvZHlcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkZWZpbml0aW9uXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJJbnB1dE91dHB1dFBhcmFtZXRlckRlZmluaXRpb25cIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiSW5wdXRPdXRwdXRQYXJhbWV0ZXJEZWZpbml0aW9uXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJMaXN0XCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbIFwiSW5wdXRPdXRwdXRQYXJhbWV0ZXJEZWZpbml0aW9uXCIgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJpdGVtc1wiLFxyXG4gICAgICAgICAgXCJpc01hbnlcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIklucHV0T3V0cHV0UGFyYW1ldGVyRGVmaW5pdGlvblwiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJNYXBcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJJbnB1dE91dHB1dFBhcmFtZXRlckRlZmluaXRpb25cIiBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImVudHJpZXNcIixcclxuICAgICAgICAgIFwiaXNNYW55XCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJFbnRyeVwiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJFbnRyeVwiLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImtleVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YWx1ZVwiLFxyXG4gICAgICAgICAgXCJpc0JvZHlcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkZWZpbml0aW9uXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJJbnB1dE91dHB1dFBhcmFtZXRlckRlZmluaXRpb25cIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiVmFsdWVcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFtcclxuICAgICAgICBcIklucHV0T3V0cHV0UGFyYW1ldGVyRGVmaW5pdGlvblwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiaWRcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwibmFtZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YWx1ZVwiLFxyXG4gICAgICAgICAgXCJpc0JvZHlcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJTY3JpcHRcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJJbnB1dE91dHB1dFBhcmFtZXRlckRlZmluaXRpb25cIiBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInNjcmlwdEZvcm1hdFwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJyZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YWx1ZVwiLFxyXG4gICAgICAgICAgXCJpc0JvZHlcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJGaWVsZFwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIkVsZW1lbnRcIiBdLFxyXG4gICAgICBcIm1ldGFcIjoge1xyXG4gICAgICAgIFwiYWxsb3dlZEluXCI6IFtcclxuICAgICAgICAgIFwiYWN0aXZpdGk6U2VydmljZVRhc2tMaWtlXCIsXHJcbiAgICAgICAgICBcImFjdGl2aXRpOkV4ZWN1dGlvbkxpc3RlbmVyXCIsXHJcbiAgICAgICAgICBcImFjdGl2aXRpOlRhc2tMaXN0ZW5lclwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcIm5hbWVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZXhwcmVzc2lvblwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInN0cmluZ1ZhbHVlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIklucHV0UGFyYW1ldGVyXCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbIFwiSW5wdXRPdXRwdXRQYXJhbWV0ZXJcIiBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJPdXRwdXRQYXJhbWV0ZXJcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJJbnB1dE91dHB1dFBhcmFtZXRlclwiIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkNvbGxlY3RhYmxlXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogWyBcImJwbW46TXVsdGlJbnN0YW5jZUxvb3BDaGFyYWN0ZXJpc3RpY3NcIiBdLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcImFjdGl2aXRpOkFzeW5jQ2FwYWJsZVwiIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY29sbGVjdGlvblwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJlbGVtZW50VmFyaWFibGVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGVcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJFbGVtZW50XCIgXSxcclxuICAgICAgXCJtZXRhXCI6IHtcclxuICAgICAgICBcImFsbG93ZWRJblwiOiBbXHJcbiAgICAgICAgICBcImFjdGl2aXRpOkFzeW5jQ2FwYWJsZVwiLFxyXG4gICAgICAgICAgXCJicG1uOk11bHRpSW5zdGFuY2VMb29wQ2hhcmFjdGVyaXN0aWNzXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiYm9keVwiLFxyXG4gICAgICAgICAgXCJpc0JvZHlcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJFeGVjdXRpb25MaXN0ZW5lclwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIkVsZW1lbnRcIiBdLFxyXG4gICAgICBcIm1ldGFcIjoge1xyXG4gICAgICAgIFwiYWxsb3dlZEluXCI6IFtcclxuICAgICAgICAgIFwiYnBtbjpUYXNrXCIsXHJcbiAgICAgICAgICBcImJwbW46U2VydmljZVRhc2tcIixcclxuICAgICAgICAgIFwiYnBtbjpVc2VyVGFza1wiLFxyXG4gICAgICAgICAgXCJicG1uOkJ1c2luZXNzUnVsZVRhc2tcIixcclxuICAgICAgICAgIFwiYnBtbjpTY3JpcHRUYXNrXCIsXHJcbiAgICAgICAgICBcImJwbW46UmVjZWl2ZVRhc2tcIixcclxuICAgICAgICAgIFwiYnBtbjpNYW51YWxUYXNrXCIsXHJcbiAgICAgICAgICBcImJwbW46RXhjbHVzaXZlR2F0ZXdheVwiLFxyXG4gICAgICAgICAgXCJicG1uOlNlcXVlbmNlRmxvd1wiLFxyXG4gICAgICAgICAgXCJicG1uOlBhcmFsbGVsR2F0ZXdheVwiLFxyXG4gICAgICAgICAgXCJicG1uOkluY2x1c2l2ZUdhdGV3YXlcIixcclxuICAgICAgICAgIFwiYnBtbjpFdmVudEJhc2VkR2F0ZXdheVwiLFxyXG4gICAgICAgICAgXCJicG1uOlN0YXJ0RXZlbnRcIixcclxuICAgICAgICAgIFwiYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50XCIsXHJcbiAgICAgICAgICBcImJwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudFwiLFxyXG4gICAgICAgICAgXCJicG1uOkVuZEV2ZW50XCIsXHJcbiAgICAgICAgICBcImJwbW46Qm91bmRhcnlFdmVudFwiLFxyXG4gICAgICAgICAgXCJicG1uOkNhbGxBY3Rpdml0eVwiLFxyXG4gICAgICAgICAgXCJicG1uOlN1YlByb2Nlc3NcIixcclxuICAgICAgICAgIFwiYnBtbjpQcm9jZXNzXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZXhwcmVzc2lvblwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjbGFzc1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkZWxlZ2F0ZUV4cHJlc3Npb25cIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZXZlbnRcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwic2NyaXB0XCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTY3JpcHRcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZmllbGRzXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJGaWVsZFwiLFxyXG4gICAgICAgICAgXCJpc01hbnlcIjogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiVGFza0xpc3RlbmVyXCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbIFwiRWxlbWVudFwiIF0sXHJcbiAgICAgIFwibWV0YVwiOiB7XHJcbiAgICAgICAgXCJhbGxvd2VkSW5cIjogW1xyXG4gICAgICAgICAgXCJicG1uOlVzZXJUYXNrXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZXhwcmVzc2lvblwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjbGFzc1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkZWxlZ2F0ZUV4cHJlc3Npb25cIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZXZlbnRcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwic2NyaXB0XCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTY3JpcHRcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZmllbGRzXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJGaWVsZFwiLFxyXG4gICAgICAgICAgXCJpc01hbnlcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiaWRcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZXZlbnREZWZpbml0aW9uc1wiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvblwiLFxyXG4gICAgICAgICAgXCJpc01hbnlcIjogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiRm9ybVByb3BlcnR5XCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbIFwiRWxlbWVudFwiIF0sXHJcbiAgICAgIFwibWV0YVwiOiB7XHJcbiAgICAgICAgXCJhbGxvd2VkSW5cIjogW1xyXG4gICAgICAgICAgXCJicG1uOlN0YXJ0RXZlbnRcIixcclxuICAgICAgICAgIFwiYnBtbjpVc2VyVGFza1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImlkXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcIm5hbWVcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidHlwZVwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJyZXF1aXJlZFwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJyZWFkYWJsZVwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ3cml0YWJsZVwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YXJpYWJsZVwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJleHByZXNzaW9uXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImRhdGVQYXR0ZXJuXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImRlZmF1bHRcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidmFsdWVzXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJWYWx1ZVwiLFxyXG4gICAgICAgICAgXCJpc01hbnlcIjogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiRm9ybURhdGFcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJFbGVtZW50XCIgXSxcclxuICAgICAgXCJtZXRhXCI6IHtcclxuICAgICAgICBcImFsbG93ZWRJblwiOiBbXHJcbiAgICAgICAgICBcImJwbW46U3RhcnRFdmVudFwiLFxyXG4gICAgICAgICAgXCJicG1uOlVzZXJUYXNrXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZmllbGRzXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJGb3JtRmllbGRcIixcclxuICAgICAgICAgIFwiaXNNYW55XCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImJ1c2luZXNzS2V5XCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkZvcm1GaWVsZFwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIkVsZW1lbnRcIiBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImlkXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImxhYmVsXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInR5cGVcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZGF0ZVBhdHRlcm5cIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZGVmYXVsdFZhbHVlXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInByb3BlcnRpZXNcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlByb3BlcnRpZXNcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidmFsaWRhdGlvblwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiVmFsaWRhdGlvblwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YWx1ZXNcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlZhbHVlXCIsXHJcbiAgICAgICAgICBcImlzTWFueVwiOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJWYWxpZGF0aW9uXCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbIFwiRWxlbWVudFwiIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY29uc3RyYWludHNcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkNvbnN0cmFpbnRcIixcclxuICAgICAgICAgIFwiaXNNYW55XCI6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkNvbnN0cmFpbnRcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJFbGVtZW50XCIgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJuYW1lXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNvbmZpZ1wiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvblwiLFxyXG4gICAgICBcImlzQWJzdHJhY3RcIjogdHJ1ZSxcclxuICAgICAgXCJleHRlbmRzXCI6IFtcclxuICAgICAgICBcImJwbW46Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb25cIlxyXG4gICAgICBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhcmlhYmxlTmFtZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YXJpYWJsZUV2ZW50XCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH1cclxuICBdLFxyXG4gIFwiZW11bWVyYXRpb25zXCI6IFsgXVxyXG59XHJcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1c3RvbUNvbnRleHRQYWQge1xuICBjb25zdHJ1Y3Rvcihjb25maWcsIGNvbnRleHRQYWQsIGNyZWF0ZSwgZWxlbWVudEZhY3RvcnksIGluamVjdG9yLCB0cmFuc2xhdGUpIHtcbiAgICB0aGlzLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICB0aGlzLmVsZW1lbnRGYWN0b3J5ID0gZWxlbWVudEZhY3Rvcnk7XG4gICAgdGhpcy50cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG4gICAgLy/oh6rliqjmkYbmlL7kvY3nva5cbiAgICBpZiAoY29uZmlnLmF1dG9QbGFjZSAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYXV0b1BsYWNlID0gaW5qZWN0b3IuZ2V0KCdhdXRvUGxhY2UnLCBmYWxzZSk7XG4gICAgfVxuICAgIC8v5rOo5YaM5bel5YW3XG4gICAgY29udGV4dFBhZC5yZWdpc3RlclByb3ZpZGVyKHRoaXMpO1xuICB9XG4gIGdldENvbnRleHRQYWRFbnRyaWVzKGVsZW1lbnQpIHtcbiAgICBjb25zdCB7XG4gICAgICBhdXRvUGxhY2UsXG4gICAgICBjcmVhdGUsXG4gICAgICBlbGVtZW50RmFjdG9yeSxcbiAgICAgIHRyYW5zbGF0ZVxuICAgIH0gPSB0aGlzO1xuXG4gICAgZnVuY3Rpb24gYXBwZW5kVXNlclRhc2soZXZlbnQsIGVsZW1lbnQpIHtcbiAgICAgIGlmIChhdXRvUGxhY2UpIHtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSBlbGVtZW50RmFjdG9yeS5jcmVhdGVTaGFwZSh7IHR5cGU6ICdicG1uOlVzZXJUYXNrJyB9KTtcbiAgICAgICAgYXV0b1BsYWNlLmFwcGVuZChlbGVtZW50LCBzaGFwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcHBlbmRVc2VyVGFza1N0YXJ0KGV2ZW50LCBlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcHBlbmRVc2VyVGFza1N0YXJ0KGV2ZW50KSB7XG4gICAgICAgICAgY29uc3Qgc2hhcGUgPSBlbGVtZW50RmFjdG9yeS5jcmVhdGVTaGFwZSh7IHR5cGU6ICdicG1uOlVzZXJUYXNrJyB9KTtcbiAgICAgICAgICBjcmVhdGUuc3RhcnQoZXZlbnQsIHNoYXBlLCBlbGVtZW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYXBwZW5kQ2FsbEFjdGl2aXR5U3RhcnQoZXZlbnQpIHtcbiAgICAgIGNvbnN0IHNoYXBlID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoeyB0eXBlOiAnYnBtbjpDYWxsQWN0aXZpdHknIH0pO1xuICAgICAgY3JlYXRlLnN0YXJ0KGV2ZW50LCBzaGFwZSwgZWxlbWVudCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXBwZW5kQ2FsbEFjdGl2aXR5KGV2ZW50LCBlbGVtZW50KSB7XG4gICAgICAgIGlmIChhdXRvUGxhY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHNoYXBlID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoeyB0eXBlOiAnYnBtbjpDYWxsQWN0aXZpdHknIH0pO1xuICAgICAgICAgICAgYXV0b1BsYWNlLmFwcGVuZChlbGVtZW50LCBzaGFwZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcHBlbmRDYWxsQWN0aXZpdHlTdGFydChldmVudCwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICdhcHBlbmQudXNlci10YXNrJzoge1xuICAgICAgICBncm91cDogJ21vZGVsJyxcbiAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXVzZXItdGFzaycsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0FwcGVuZCBTZXJ2aWNlVGFzaycpLFxuICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICBjbGljazogYXBwZW5kVXNlclRhc2ssXG4gICAgICAgICAgZHJhZ3N0YXJ0OiBhcHBlbmRVc2VyVGFza1N0YXJ0XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAnYXBwZW5kLmNhbGwtYWN0aXZpdHknOntcbiAgICAgICAgICBncm91cDogJ21vZGVsJyxcbiAgICAgICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY2FsbC1hY3Rpdml0eScsXG4gICAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQXBwZW5kIENhbGxBY3Rpdml0eScpLFxuICAgICAgICAgIGFjdGlvbjoge1xuICAgICAgICAgICAgICBjbGljazogYXBwZW5kQ2FsbEFjdGl2aXR5LFxuICAgICAgICAgICAgICBkcmFnc3RhcnQ6IGFwcGVuZENhbGxBY3Rpdml0eVN0YXJ0XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cbkN1c3RvbUNvbnRleHRQYWQuJGluamVjdCA9IFtcbiAgJ2NvbmZpZycsXG4gICdjb250ZXh0UGFkJyxcbiAgJ2NyZWF0ZScsXG4gICdlbGVtZW50RmFjdG9yeScsXG4gICdpbmplY3RvcicsXG4gICd0cmFuc2xhdGUnXG5dOyIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1c3RvbVBhbGV0dGUge1xuICBjb25zdHJ1Y3RvcihjcmVhdGUsIGVsZW1lbnRGYWN0b3J5LCBwYWxldHRlLCB0cmFuc2xhdGUpIHtcbiAgICB0aGlzLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICB0aGlzLmVsZW1lbnRGYWN0b3J5ID0gZWxlbWVudEZhY3Rvcnk7XG4gICAgdGhpcy50cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG4gICAgcGFsZXR0ZS5yZWdpc3RlclByb3ZpZGVyKHRoaXMpO1xuICB9XG5cbiAgZ2V0UGFsZXR0ZUVudHJpZXMoZWxlbWVudCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNyZWF0ZSxcbiAgICAgIGVsZW1lbnRGYWN0b3J5LFxuICAgICAgdHJhbnNsYXRlXG4gICAgfSA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVTZXJ2aWNlVGFzayhldmVudCkge1xuICAgICAgY29uc3Qgc2hhcGUgPSBlbGVtZW50RmFjdG9yeS5jcmVhdGVTaGFwZSh7IHR5cGU6ICdicG1uOlVzZXJUYXNrJyB9KTtcbiAgICAgIGNyZWF0ZS5zdGFydChldmVudCwgc2hhcGUpO1xuICAgIH1cbiAgICAgIGZ1bmN0aW9uIGNyZWF0ZUNhbGxBY3Rpdml0eShldmVudCkge1xuICAgICAgICAgIGNvbnN0IHNoYXBlID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoeyB0eXBlOiAnYnBtbjpDYWxsQWN0aXZpdHknIH0pO1xuICAgICAgICAgIGNyZWF0ZS5zdGFydChldmVudCwgc2hhcGUpO1xuICAgICAgfVxuXG5cbiAgICByZXR1cm4ge1xuICAgICAgJ2NyZWF0ZS51c2VyLXRhc2snOiB7XG4gICAgICAgIGdyb3VwOiAnYWN0aXZpdHknLFxuICAgICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tdXNlci10YXNrJyxcbiAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQ3JlYXRlIFVzZXJUYXNrJyksXG4gICAgICAgIGFjdGlvbjoge1xuICAgICAgICAgIGRyYWdzdGFydDogY3JlYXRlU2VydmljZVRhc2ssXG4gICAgICAgICAgY2xpY2s6IGNyZWF0ZVNlcnZpY2VUYXNrXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAgICdjcmVhdGUuY2FsbC1hY3Rpdml0eSc6IHtcbiAgICAgICAgICAgIGdyb3VwOiAnYWN0aXZpdHknLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWNhbGwtYWN0aXZpdHknLFxuICAgICAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQ3JlYXRlIENhbGxBY3Rpdml0eScpLFxuICAgICAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgZHJhZ3N0YXJ0OiBjcmVhdGVDYWxsQWN0aXZpdHksXG4gICAgICAgICAgICAgICAgY2xpY2s6IGNyZWF0ZUNhbGxBY3Rpdml0eVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG59XG5cbkN1c3RvbVBhbGV0dGUuJGluamVjdCA9IFtcbiAgJ2NyZWF0ZScsXG4gICdlbGVtZW50RmFjdG9yeScsXG4gICdwYWxldHRlJyxcbiAgJ3RyYW5zbGF0ZSdcbl07IiwiaW1wb3J0IEN1c3RvbUNvbnRleHRQYWQgZnJvbSAnLi9DdXN0b21Db250ZXh0UGFkJztcbmltcG9ydCBDdXN0b21QYWxldHRlIGZyb20gJy4vQ3VzdG9tUGFsZXR0ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ2N1c3RvbUNvbnRleHRQYWQnLCAnY3VzdG9tUGFsZXR0ZScgXSxcbiAgY3VzdG9tQ29udGV4dFBhZDogWyAndHlwZScsIEN1c3RvbUNvbnRleHRQYWQgXSxcbiAgY3VzdG9tUGFsZXR0ZTogWyAndHlwZScsIEN1c3RvbVBhbGV0dGUgXVxufTsiLCJpbXBvcnQgdHJhbnNsYXRpb25zIGZyb20gJy4vdHJhbnNsYXRpb25zR2VybWFuJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGN1c3RvbVRyYW5zbGF0ZSh0ZW1wbGF0ZSwgcmVwbGFjZW1lbnRzKSB7XG4gIHJlcGxhY2VtZW50cyA9IHJlcGxhY2VtZW50cyB8fCB7fTtcbiAgdGVtcGxhdGUgPSB0cmFuc2xhdGlvbnNbdGVtcGxhdGVdIHx8IHRlbXBsYXRlO1xuICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgveyhbXn1dKyl9L2csIGZ1bmN0aW9uKF8sIGtleSkge1xuXHQgdmFyIHN0ciA9IHJlcGxhY2VtZW50c1trZXldO1xuXHQgIGlmKHRyYW5zbGF0aW9uc1tyZXBsYWNlbWVudHNba2V5XV0gIT0gbnVsbCAmJiB0cmFuc2xhdGlvbnMgW3JlcGxhY2VtZW50c1trZXldXSAhPSAndW5kZWZpbmVkJyl7XG5cdFx0ICBzdHIgPSB0cmFuc2xhdGlvbnNbcmVwbGFjZW1lbnRzW2tleV1dO1xuXHQgIH1cbiAgICByZXR1cm4gIHN0ciB8fCAneycgKyBrZXkgKyAnfSc7XG4gIH0pO1xufSIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICAvLyBMYWJlbHNcbiAgICAnQWN0aXZhdGUgdGhlIGdsb2JhbCBjb25uZWN0IHRvb2wnIDogJ+a/gOa0u+WFqOWxgOi/nuaOpeW3peWFtycsXG4gICAgJ0FwcGVuZCB7dHlwZX0nOiAn6L+95YqgIHt0eXBlfScsXG4gICAgJ0FwcGVuZCBFbmRFdmVudCc6ICfov73liqAg57uT5p2f5LqL5Lu2ICcsXG4gICAgJ0FwcGVuZCBUYXNrJzon6L+95YqgIOS7u+WKoScsXG4gICAgJ0FwcGVuZCBHYXRld2F5Jzon6L+95YqgIOe9keWFsycsXG4gICAgJ0FwcGVuZCBJbnRlcm1lZGlhdGUvQm91bmRhcnkgRXZlbnQnOifov73liqAg5Lit6Ze0L+i+ueeVjCDkuovku7YnLFxuICAgICdBZGQgTGFuZSBhYm92ZSc6ICflnKjkuIrpnaLmt7vliqDpgZMnLFxuICAgICdEaXZpZGUgaW50byB0d28gTGFuZXMnOiAn5YiG5Ymy5oiQ5Lik5Liq6YGTJyxcbiAgICAnRGl2aWRlIGludG8gdGhyZWUgTGFuZXMnOiAn5YiG5Ymy5oiQ5LiJ5Liq6YGTJyxcbiAgICAnQWRkIExhbmUgYmVsb3cnOiAn5Zyo5LiL6Z2i5re75Yqg6YGTJyxcbiAgICAnQXBwZW5kIGNvbXBlbnNhdGlvbiBhY3Rpdml0eSc6ICfov73liqDooaXlgb/mtLvliqgnLFxuICAgICdDaGFuZ2UgdHlwZSc6ICfkv67mlLnnsbvlnosnLFxuICAgICdDb25uZWN0IHVzaW5nIEFzc29jaWF0aW9uJzogJ+S9v+eUqOWFs+iBlOi/nuaOpScsXG4gICAgJ0Nvbm5lY3QgdXNpbmcgU2VxdWVuY2UvTWVzc2FnZUZsb3cgb3IgQXNzb2NpYXRpb24nOiAn5L2/55So6aG65bqPL+a2iOaBr+a1geaIluiAheWFs+iBlOi/nuaOpScsXG4gICAgJ0Nvbm5lY3QgdXNpbmcgRGF0YUlucHV0QXNzb2NpYXRpb24nOiAn5L2/55So5pWw5o2u6L6T5YWl5YWz6IGU6L+e5o6lJyxcbiAgICAnUmVtb3ZlJzogJ+enu+mZpCcsXG4gICAgJ0FjdGl2YXRlIHRoZSBoYW5kIHRvb2wnOiAn5r+A5rS75oqT5omL5bel5YW3JyxcbiAgICAnQWN0aXZhdGUgdGhlIGxhc3NvIHRvb2wnOiAn5r+A5rS75aWX57Si5bel5YW3JyxcbiAgICAnQWN0aXZhdGUgdGhlIGNyZWF0ZS9yZW1vdmUgc3BhY2UgdG9vbCc6ICfmv4DmtLvliJvlu7ov5Yig6Zmk56m66Ze05bel5YW3JyxcbiAgICAnQ3JlYXRlIGV4cGFuZGVkIFN1YlByb2Nlc3MnOiAn5Yib5bu65omp5bGV5a2Q6L+H56iLJyxcbiAgICAnQ3JlYXRlIEludGVybWVkaWF0ZVRocm93RXZlbnQvQm91bmRhcnlFdmVudCcgOiAn5Yib5bu65Lit6Ze05oqb5Ye65LqL5Lu2L+i+ueeVjOS6i+S7ticsXG4gICAgJ0NyZWF0ZSBQb29sL1BhcnRpY2lwYW50JzogJ+WIm+W7uuaxoC/lj4LkuI7ogIUnLFxuICAgICdQYXJhbGxlbCBNdWx0aSBJbnN0YW5jZSc6ICflubbooYzlpJrph43kuovku7YnLFxuICAgICdTZXF1ZW50aWFsIE11bHRpIEluc3RhbmNlJzogJ+aXtuW6j+WkmumHjeS6i+S7ticsXG4gICAgJ0RhdGFPYmplY3RSZWZlcmVuY2UnOifmlbDmja7lr7nosaHlj4LogIMnLFxuICAgICdEYXRhU3RvcmVSZWZlcmVuY2UnOifmlbDmja7lrZjlgqjlj4LogIMnLFxuICAgICdMb29wJzogJ+W+queOrycsXG4gICAgJ0FkLWhvYyc6ICfljbPluK0nLFxuICAgICdDcmVhdGUge3R5cGV9JzogJ+WIm+W7uiB7dHlwZX0nLFxuICAgICdDcmVhdGUgVGFzayc6J+WIm+W7uuS7u+WKoScsXG4gICAgJ0NyZWF0ZSBTdGFydEV2ZW50Jzon5Yib5bu65byA5aeL5LqL5Lu2JyxcbiAgICAnQ3JlYXRlIEVuZEV2ZW50Jzon5Yib5bu657uT5p2f5LqL5Lu2JyxcbiAgICAnQ3JlYXRlIEdyb3VwJzon5Yib5bu657uEJyxcbiAgICAnVGFzayc6ICfku7vliqEnLFxuICAgICdTZW5kIFRhc2snOiAn5Y+R6YCB5Lu75YqhJyxcbiAgICAnUmVjZWl2ZSBUYXNrJzogJ+aOpeaUtuS7u+WKoScsXG4gICAgJ1VzZXIgVGFzayc6ICfnlKjmiLfku7vliqEnLFxuICAgICdNYW51YWwgVGFzayc6ICfmiYvlt6Xku7vliqEnLFxuICAgICdCdXNpbmVzcyBSdWxlIFRhc2snOiAn5Lia5Yqh6KeE5YiZ5Lu75YqhJyxcbiAgICAnU2VydmljZSBUYXNrJzogJ+acjeWKoeS7u+WKoScsXG4gICAgJ1NjcmlwdCBUYXNrJzogJ+iEmuacrOS7u+WKoScsXG4gICAgJ0NhbGwgQWN0aXZpdHknOiAn6LCD55So5rS75YqoJyxcbiAgICAnU3ViIFByb2Nlc3MgKGNvbGxhcHNlZCknOiAn5a2Q5rWB56iL77yI5oqY5Y+g55qE77yJJyxcbiAgICAnU3ViIFByb2Nlc3MgKGV4cGFuZGVkKSc6ICflrZDmtYHnqIvvvIjlsZXlvIDnmoTvvIknLFxuICAgICdTdGFydCBFdmVudCc6ICflvIDlp4vkuovku7YnLFxuICAgICdTdGFydEV2ZW50JzogJ+W8gOWni+S6i+S7ticsXG4gICAgJ0ludGVybWVkaWF0ZSBUaHJvdyBFdmVudCc6ICfkuK3pl7Tkuovku7YnLFxuICAgICdFbmQgRXZlbnQnOiAn57uT5p2f5LqL5Lu2JyxcbiAgICAnRW5kRXZlbnQnOiAn57uT5p2f5LqL5Lu2JyxcbiAgICAnQ3JlYXRlIEdhdGV3YXknOiAn5Yib5bu6572R5YWzJyxcbiAgICAnR2F0ZVdheSc6J+e9keWFsycsXG4gICAgJ0NyZWF0ZSBJbnRlcm1lZGlhdGUvQm91bmRhcnkgRXZlbnQnOiAn5Yib5bu65Lit6Ze0L+i+ueeVjOS6i+S7ticsXG4gICAgJ01lc3NhZ2UgU3RhcnQgRXZlbnQnOiAn5raI5oGv5byA5aeL5LqL5Lu2JyxcbiAgICAnVGltZXIgU3RhcnQgRXZlbnQnOiAn5a6a5pe25byA5aeL5LqL5Lu2JyxcbiAgICAnQ29uZGl0aW9uYWwgU3RhcnQgRXZlbnQnOiAn5p2h5Lu25byA5aeL5LqL5Lu2JyxcbiAgICAnU2lnbmFsIFN0YXJ0IEV2ZW50JzogJ+S/oeWPt+W8gOWni+S6i+S7ticsXG4gICAgJ0Vycm9yIFN0YXJ0IEV2ZW50JzogJ+mUmeivr+W8gOWni+S6i+S7ticsXG4gICAgJ0VzY2FsYXRpb24gU3RhcnQgRXZlbnQnOiAn5Y2H57qn5byA5aeL5LqL5Lu2JyxcbiAgICAnQ29tcGVuc2F0aW9uIFN0YXJ0IEV2ZW50JzogJ+ihpeWBv+W8gOWni+S6i+S7ticsXG4gICAgJ01lc3NhZ2UgU3RhcnQgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJzogJ+a2iOaBr+W8gOWni+S6i+S7tu+8iOmdnuS4reaWre+8iScsXG4gICAgJ1RpbWVyIFN0YXJ0IEV2ZW50IChub24taW50ZXJydXB0aW5nKSc6ICflrprml7blvIDlp4vkuovku7bvvIjpnZ7kuK3mlq3vvIknLFxuICAgICdDb25kaXRpb25hbCBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknOiAn5p2h5Lu25byA5aeL5LqL5Lu277yI6Z2e5Lit5pat77yJJyxcbiAgICAnU2lnbmFsIFN0YXJ0IEV2ZW50IChub24taW50ZXJydXB0aW5nKSc6ICfkv6Hlj7flvIDlp4vkuovku7bvvIjpnZ7kuK3mlq3vvIknLFxuICAgICdFc2NhbGF0aW9uIFN0YXJ0IEV2ZW50IChub24taW50ZXJydXB0aW5nKSc6ICfljYfnuqflvIDlp4vkuovku7bvvIjpnZ7kuK3mlq3vvIknLFxuICAgICdNZXNzYWdlIEludGVybWVkaWF0ZSBDYXRjaCBFdmVudCc6ICfmtojmga/kuK3pl7TmjZXojrfkuovku7YnLFxuICAgICdNZXNzYWdlIEludGVybWVkaWF0ZSBUaHJvdyBFdmVudCc6ICfmtojmga/kuK3pl7Tmipvlh7rkuovku7YnLFxuICAgICdUaW1lciBJbnRlcm1lZGlhdGUgQ2F0Y2ggRXZlbnQnOiAn5a6a5pe25Lit6Ze05o2V6I635LqL5Lu2JyxcbiAgICAnRXNjYWxhdGlvbiBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnOiAn5Y2H57qn5Lit6Ze05oqb5Ye65LqL5Lu2JyxcbiAgICAnQ29uZGl0aW9uYWwgSW50ZXJtZWRpYXRlIENhdGNoIEV2ZW50JzogJ+adoeS7tuS4remXtOaNleiOt+S6i+S7ticsXG4gICAgJ0xpbmsgSW50ZXJtZWRpYXRlIENhdGNoIEV2ZW50JzogJ+mTvuaOpeS4remXtOaNleiOt+S6i+S7ticsXG4gICAgJ0xpbmsgSW50ZXJtZWRpYXRlIFRocm93IEV2ZW50JzogJ+mTvuaOpeS4remXtOaKm+WHuuS6i+S7ticsXG4gICAgJ0NvbXBlbnNhdGlvbiBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnOiAn6KGl5YG/5Lit6Ze05oqb5Ye65LqL5Lu2JyxcbiAgICAnU2lnbmFsIEludGVybWVkaWF0ZSBDYXRjaCBFdmVudCc6ICfkv6Hlj7fkuK3pl7TmjZXojrfkuovku7YnLFxuICAgICdTaWduYWwgSW50ZXJtZWRpYXRlIFRocm93IEV2ZW50JzogJ+S/oeWPt+S4remXtOaKm+WHuuS6i+S7ticsXG4gICAgJ01lc3NhZ2UgRW5kIEV2ZW50JzogJ+a2iOaBr+e7k+adn+S6i+S7ticsXG4gICAgJ0VzY2FsYXRpb24gRW5kIEV2ZW50JzogJ+WumuaXtue7k+adn+S6i+S7ticsXG4gICAgJ0Vycm9yIEVuZCBFdmVudCc6ICfplJnor6/nu5PmnZ/kuovku7YnLFxuICAgICdDYW5jZWwgRW5kIEV2ZW50JzogJ+WPlua2iOe7k+adn+S6i+S7ticsXG4gICAgJ0NvbXBlbnNhdGlvbiBFbmQgRXZlbnQnOiAn6KGl5YG/57uT5p2f5LqL5Lu2JyxcbiAgICAnU2lnbmFsIEVuZCBFdmVudCc6ICfkv6Hlj7fnu5PmnZ/kuovku7YnLFxuICAgICdUZXJtaW5hdGUgRW5kIEV2ZW50JzogJ+e7iOatoue7k+adn+S6i+S7ticsXG4gICAgJ01lc3NhZ2UgQm91bmRhcnkgRXZlbnQnOiAn5raI5oGv6L6555WM5LqL5Lu2JyxcbiAgICAnTWVzc2FnZSBCb3VuZGFyeSBFdmVudCAobm9uLWludGVycnVwdGluZyknOiAn5raI5oGv6L6555WM5LqL5Lu277yI6Z2e5Lit5pat77yJJyxcbiAgICAnVGltZXIgQm91bmRhcnkgRXZlbnQnOiAn5a6a5pe26L6555WM5LqL5Lu2JyxcbiAgICAnVGltZXIgQm91bmRhcnkgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJzogJ+WumuaXtui+ueeVjOS6i+S7tu+8iOmdnuS4reaWre+8iScsXG4gICAgJ0VzY2FsYXRpb24gQm91bmRhcnkgRXZlbnQnOiAn5Y2H57qn6L6555WM5LqL5Lu2JyxcbiAgICAnRXNjYWxhdGlvbiBCb3VuZGFyeSBFdmVudCAobm9uLWludGVycnVwdGluZyknOiAn5Y2H57qn6L6555WM5LqL5Lu277yI6Z2e5Lit5pat77yJJyxcbiAgICAnQ29uZGl0aW9uYWwgQm91bmRhcnkgRXZlbnQnOiAn5p2h5Lu26L6555WM5LqL5Lu2JyxcbiAgICAnQ29uZGl0aW9uYWwgQm91bmRhcnkgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJzogJ+adoeS7tui+ueeVjOS6i+S7tu+8iOmdnuS4reaWre+8iScsXG4gICAgJ0Vycm9yIEJvdW5kYXJ5IEV2ZW50JzogJ+mUmeivr+i+ueeVjOS6i+S7ticsXG4gICAgJ0NhbmNlbCBCb3VuZGFyeSBFdmVudCc6ICflj5bmtojovrnnlYzkuovku7YnLFxuICAgICdTaWduYWwgQm91bmRhcnkgRXZlbnQnOiAn5L+h5Y+36L6555WM5LqL5Lu2JyxcbiAgICAnU2lnbmFsIEJvdW5kYXJ5IEV2ZW50IChub24taW50ZXJydXB0aW5nKSc6ICfkv6Hlj7fovrnnlYzkuovku7bvvIjpnZ7kuK3mlq3vvIknLFxuICAgICdDb21wZW5zYXRpb24gQm91bmRhcnkgRXZlbnQnOiAn6KGl5YG/6L6555WM5LqL5Lu2JyxcbiAgICAnRXhjbHVzaXZlIEdhdGV3YXknOiAn5LqS5pal572R5YWzJyxcbiAgICAnUGFyYWxsZWwgR2F0ZXdheSc6ICflubbooYznvZHlhbMnLFxuICAgICdJbmNsdXNpdmUgR2F0ZXdheSc6ICfnm7jlrrnnvZHlhbMnLFxuICAgICdDb21wbGV4IEdhdGV3YXknOiAn5aSN5p2C572R5YWzJyxcbiAgICAnRXZlbnQgYmFzZWQgR2F0ZXdheSc6ICfkuovku7bnvZHlhbMnLFxuICAgICdUcmFuc2FjdGlvbic6ICfovazov5AnLFxuICAgICdTdWIgUHJvY2Vzcyc6ICflrZDmtYHnqIsnLFxuICAgICdFdmVudCBTdWIgUHJvY2Vzcyc6ICfkuovku7blrZDmtYHnqIsnLFxuICAgICdDb2xsYXBzZWQgUG9vbCc6ICfmipjlj6DmsaAnLFxuICAgICdFeHBhbmRlZCBQb29sJzogJ+WxleW8gOaxoCcsXG4gICAgLy8gRXJyb3JzXG4gICAgJ25vIHBhcmVudCBmb3Ige2VsZW1lbnR9IGluIHtwYXJlbnR9JzogJ+WcqHtwYXJlbnR96YeM77yMe2VsZW1lbnR95rKh5pyJ54i257G7JyxcbiAgICAnbm8gc2hhcGUgdHlwZSBzcGVjaWZpZWQnOiAn5rKh5pyJ5oyH5a6a55qE5b2i54q257G75Z6LJyxcbiAgICAnZmxvdyBlbGVtZW50cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHBvb2xzL3BhcnRpY2lwYW50cyc6ICfmtYHlhYPntKDlv4XpobvmmK/msaAv5Y+C5LiO6ICF55qE5a2Q57G7JyxcbiAgICAnb3V0IG9mIGJvdW5kcyByZWxlYXNlJzogJ291dCBvZiBib3VuZHMgcmVsZWFzZScsXG4gICAgJ21vcmUgdGhhbiB7Y291bnR9IGNoaWxkIGxhbmVzJzogJ+WtkOmBk+Wkp+S6jntjb3VudH0gJyxcbiAgICAnZWxlbWVudCByZXF1aXJlZCc6ICflhYPntKDkuI3og73kuLrnqbonLFxuICAgICdkaWFncmFtIG5vdCBwYXJ0IG9mIGJwbW46RGVmaW5pdGlvbnMnOiAn5rWB56iL5Zu+5LiN56ym5ZCIYnBtbuinhOiMgycsXG4gICAgJ25vIGRpYWdyYW0gdG8gZGlzcGxheSc6ICfmsqHmnInlj6/lsZXnpLrnmoTmtYHnqIvlm74nLFxuICAgICdubyBwcm9jZXNzIG9yIGNvbGxhYm9yYXRpb24gdG8gZGlzcGxheSc6ICfmsqHmnInlj6/lsZXnpLrnmoTmtYHnqIsv5Y2P5L2cJyxcbiAgICAnZWxlbWVudCB7ZWxlbWVudH0gcmVmZXJlbmNlZCBieSB7cmVmZXJlbmNlZH0je3Byb3BlcnR5fSBub3QgeWV0IGRyYXduJzogJ+eUsXtyZWZlcmVuY2VkfSN7cHJvcGVydHl95byV55So55qEe2VsZW1lbnR95YWD57Sg5LuN5pyq57uY5Yi2JyxcbiAgICAnYWxyZWFkeSByZW5kZXJlZCB7ZWxlbWVudH0nOiAne2VsZW1lbnR9IOW3suiiq+a4suafkycsXG4gICAgJ2ZhaWxlZCB0byBpbXBvcnQge2VsZW1lbnR9JzogJ+WvvOWFpXtlbGVtZW50feWksei0pScsXG4gICAgLy/lsZ7mgKfpnaLmnb/nmoTlj4LmlbBcbiAgICAnSWQnOifnvJblj7cnLFxuICAgICdOYW1lJzon5ZCN56ewJyxcbiAgICAnR2VuZXJhbCc6J+W4uOinhCcsXG4gICAgJ0RldGFpbHMnOifor6bmg4UnLFxuICAgICdNZXNzYWdlIE5hbWUnOifmtojmga/lkI3np7AnLFxuICAgICdNZXNzYWdlJzon5raI5oGvJyxcbiAgICAnSW5pdGlhdG9yJzon5Yib5bu66ICFJyxcbiAgICAnQXN5bmNocm9ub3VzIENvbnRpbnVhdGlvbnMnOifmjIHnu63lvILmraUnLFxuICAgICdBc3luY2hyb25vdXMgQmVmb3JlJzon5byC5q2l5YmNJyxcbiAgICAnQXN5bmNocm9ub3VzIEFmdGVyJzon5byC5q2l5ZCOJyxcbiAgICAnSm9iIENvbmZpZ3VyYXRpb24nOiflt6XkvZzphY3nva4nLFxuICAgICdFeGNsdXNpdmUnOifmjpLpmaQnLFxuICAgICdKb2IgUHJpb3JpdHknOiflt6XkvZzkvJjlhYjnuqcnLFxuICAgICdSZXRyeSBUaW1lIEN5Y2xlJzon6YeN6K+V5pe26Ze05ZGo5pyfJyxcbiAgICAnRG9jdW1lbnRhdGlvbic6J+aWh+ahoycsXG4gICAgJ0VsZW1lbnQgRG9jdW1lbnRhdGlvbic6J+WFg+e0oOaWh+ahoycsXG4gICAgJ0hpc3RvcnkgQ29uZmlndXJhdGlvbic6J+WOhuWPsumFjee9ricsXG4gICAgJ0hpc3RvcnkgVGltZSBUbyBMaXZlJzon5Y6G5Y+y55qE55Sf5a2Y5pe26Ze0JyxcbiAgICAnRm9ybXMnOifooajljZUnLFxuICAgICdGb3JtIEtleSc6J+ihqOWNlWtleScsXG4gICAgJ0Zvcm0gRmllbGRzJzon6KGo5Y2V5a2X5q61JyxcbiAgICAnQnVzaW5lc3MgS2V5Jzon5Lia5Yqha2V5JyxcbiAgICAnRm9ybSBGaWVsZCc6J+ihqOWNleWtl+autScsXG4gICAgJ0lEJzon57yW5Y+3JyxcbiAgICAnVHlwZSc6J+exu+WeiycsXG4gICAgJ0xhYmVsJzon5ZCN56ewJyxcbiAgICAnRGVmYXVsdCBWYWx1ZSc6J+m7mOiupOWAvCcsXG4gICAgJ1ZhbGlkYXRpb24nOifmoKHpqownLFxuICAgICdBZGQgQ29uc3RyYWludCc6J+a3u+WKoOe6puadnycsXG4gICAgJ0NvbmZpZyc6J+mFjee9ricsXG4gICAgJ1Byb3BlcnRpZXMnOiflsZ7mgKcnLFxuICAgICdBZGQgUHJvcGVydHknOifmt7vliqDlsZ7mgKcnLFxuICAgICdWYWx1ZSc6J+WAvCcsXG4gICAgJ0FkZCc6J+a3u+WKoCcsXG4gICAgJ1ZhbHVlcyc6J+WAvCcsXG4gICAgJ0FkZCBWYWx1ZSc6J+a3u+WKoOWAvCcsXG4gICAgJ0xpc3RlbmVycyc6J+ebkeWQrOWZqCcsXG4gICAgJ0V4ZWN1dGlvbiBMaXN0ZW5lcic6J+aJp+ihjOebkeWQrCcsXG4gICAgJ0V2ZW50IFR5cGUnOifkuovku7bnsbvlnosnLFxuICAgICdMaXN0ZW5lciBUeXBlJzon55uR5ZCs5Zmo57G75Z6LJyxcbiAgICAnSmF2YSBDbGFzcyc6J0phdmHnsbsnLFxuICAgICdFeHByZXNzaW9uJzon6KGo6L6+5byPJyxcbiAgICAnTXVzdCBwcm92aWRlIGEgdmFsdWUnOiflv4Xpobvmj5DkvpvkuIDkuKrlgLwnLFxuICAgICdEZWxlZ2F0ZSBFeHByZXNzaW9uJzon5Luj55CG6KGo6L6+5byPJyxcbiAgICAnU2NyaXB0Jzon6ISa5pysJyxcbiAgICAnU2NyaXB0IEZvcm1hdCc6J+iEmuacrOagvOW8jycsXG4gICAgJ1NjcmlwdCBUeXBlJzon6ISa5pys57G75Z6LJyxcbiAgICAnSW5saW5lIFNjcmlwdCc6J+WGheiBlOiEmuacrCcsXG4gICAgJ0V4dGVybmFsIFNjcmlwdCc6J+WklumDqOiEmuacrCcsXG4gICAgJ1Jlc291cmNlJzon6LWE5rqQJyxcbiAgICAnRmllbGQgSW5qZWN0aW9uJzon5a2X5q615rOo5YWlJyxcbiAgICAnRXh0ZW5zaW9ucyc6J+aJqeWxlScsXG4gICAgJ0lucHV0L091dHB1dCc6J+i+k+WFpS/ovpPlh7onLFxuICAgICdJbnB1dCBQYXJhbWV0ZXJzJzon6L6T5YWl5Y+C5pWwJyxcbiAgICAnT3V0cHV0IFBhcmFtZXRlcnMnOifovpPlh7rlj4LmlbAnLFxuICAgICdQYXJhbWV0ZXJzJzon5Y+C5pWwJyxcbiAgICAnT3V0cHV0IFBhcmFtZXRlcic6J+i+k+WHuuWPguaVsCcsXG4gICAgJ1RpbWVyIERlZmluaXRpb24gVHlwZSc6J+WumuaXtuWZqOWumuS5ieexu+WeiycsXG4gICAgJ1RpbWVyIERlZmluaXRpb24nOiflrprml7blmajlrprkuYknLFxuICAgICdEYXRlJzon5pel5pyfJyxcbiAgICAnRHVyYXRpb24nOifmjIHnu60nLFxuICAgICdDeWNsZSc6J+W+queOrycsXG4gICAgJ1NpZ25hbCc6J+S/oeWPtycsXG4gICAgJ1NpZ25hbCBOYW1lJzon5L+h5Y+35ZCN56ewJyxcbiAgICAnRXNjYWxhdGlvbic6J+WNh+e6pycsXG4gICAgJ0Vycm9yJzon6ZSZ6K+vJyxcbiAgICAnTGluayBOYW1lJzon6ZO+5o6l5ZCN56ewJyxcbiAgICAnQ29uZGl0aW9uJzon5p2h5Lu25ZCN56ewJyxcbiAgICAnVmFyaWFibGUgTmFtZSc6J+WPmOmHj+WQjeensCcsXG4gICAgJ1ZhcmlhYmxlIEV2ZW50Jzon5Y+Y6YeP5LqL5Lu2JyxcbiAgICAnU3BlY2lmeSBtb3JlIHRoYW4gb25lIHZhcmlhYmxlIGNoYW5nZSBldmVudCBhcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0Lic6J+WkmuS4quWPmOmHj+S6i+S7tuS7pemAl+WPt+malOW8gCcsXG4gICAgJ1dhaXQgZm9yIENvbXBsZXRpb24nOifnrYnlvoXlrozmiJAnLFxuICAgICdBY3Rpdml0eSBSZWYnOifmtLvliqjlj4LogIMnLFxuICAgICdWZXJzaW9uIFRhZyc6J+eJiOacrOagh+etvicsXG4gICAgJ0V4ZWN1dGFibGUnOiflj6/miafooYzmlofku7YnLFxuICAgICdFeHRlcm5hbCBUYXNrIENvbmZpZ3VyYXRpb24nOifmianlsZXku7vliqHphY3nva4nLFxuICAgICdUYXNrIFByaW9yaXR5Jzon5Lu75Yqh5LyY5YWI57qnJyxcbiAgICAnRXh0ZXJuYWwnOiflpJbpg6gnLFxuICAgICdDb25uZWN0b3InOifov57mjqXlmagnLFxuICAgICdNdXN0IGNvbmZpZ3VyZSBDb25uZWN0b3InOiflv4XpobvphY3nva7ov57mjqXlmagnLFxuICAgICdDb25uZWN0b3IgSWQnOifov57mjqXlmajnvJblj7cnLFxuICAgICdJbXBsZW1lbnRhdGlvbic6J+WunueOsOaWueW8jycsXG4gICAgJ0ZpZWxkIEluamVjdGlvbnMnOiflrZfmrrXms6jlhaUnLFxuICAgICdGaWVsZHMnOiflrZfmrrUnLFxuICAgICdSZXN1bHQgVmFyaWFibGUnOifnu5Pmnpzlj5jph48nLFxuICAgICdUb3BpYyc6J+S4u+mimCcsXG4gICAgJ0NvbmZpZ3VyZSBDb25uZWN0b3InOifphY3nva7ov57mjqXlmagnLFxuICAgICdJbnB1dCBQYXJhbWV0ZXInOifovpPlhaXlj4LmlbAnLFxuICAgICdBc3NpZ25lZSc6J+S7o+eQhuS6uicsXG4gICAgJ0NhbmRpZGF0ZSBVc2Vycyc6J+WAmemAieeUqOaItycsXG4gICAgJ0NhbmRpZGF0ZSBHcm91cHMnOiflgJnpgInnu4QnLFxuICAgICdEdWUgRGF0ZSc6J+WIsOacn+aXtumXtCcsXG4gICAgJ0ZvbGxvdyBVcCBEYXRlJzon6Lef6Liq5pel5pyfJyxcbiAgICAnUHJpb3JpdHknOifkvJjlhYjnuqcnLFxuICAgICdUaGUgZm9sbG93IHVwIGRhdGUgYXMgYW4gRUwgZXhwcmVzc2lvbiAoZS5nLiAke3NvbWVEYXRlfSBvciBhbiBJU08gZGF0ZSAoZS5nLiAyMDE1LTA2LTI2VDA5OjU0OjAwKSc6J+i3n+i4quaXpeacn+W/hemhu+espuWQiEVM6KGo6L6+5byP77yM5aaC77yaICR7c29tZURhdGV9ICzmiJbogIXkuIDkuKpJU0/moIflh4bml6XmnJ/vvIzlpoLvvJoyMDE1LTA2LTI2VDA5OjU0OjAwJyxcbiAgICAnVGhlIGR1ZSBkYXRlIGFzIGFuIEVMIGV4cHJlc3Npb24gKGUuZy4gJHtzb21lRGF0ZX0gb3IgYW4gSVNPIGRhdGUgKGUuZy4gMjAxNS0wNi0yNlQwOTo1NDowMCknOifot5/ouKrml6XmnJ/lv4XpobvnrKblkIhFTOihqOi+vuW8j++8jOWmgu+8miAke3NvbWVEYXRlfSAs5oiW6ICF5LiA5LiqSVNP5qCH5YeG5pel5pyf77yM5aaC77yaMjAxNS0wNi0yNlQwOTo1NDowMCcsXG4gICAgJ1ZhcmlhYmxlcyc6J+WPmOmHjycsXG4gICAgJ0NhbmRpZGF0ZSBTdGFydGVyIENvbmZpZ3VyYXRpb24nOiflgJnpgInlvIDlp4vphY3nva4nLFxuICAgICdUYXNrIExpc3RlbmVyJzon5Lu75Yqh55uR5ZCs5ZmoJyxcbiAgICAnQ2FuZGlkYXRlIFN0YXJ0ZXIgR3JvdXBzJzon5YCZ6YCJ5byA5aeL57uEJyxcbiAgICAnQ2FuZGlkYXRlIFN0YXJ0ZXIgVXNlcnMnOiflgJnpgInlvIDlp4vnlKjmiLcnLFxuICAgICdUYXNrbGlzdCBDb25maWd1cmF0aW9uJzon5Lu75Yqh5YiX6KGo6YWN572uJyxcbiAgICAnU3RhcnRhYmxlJzon5ZCv5YqoJyxcbiAgICAnU3BlY2lmeSBtb3JlIHRoYW4gb25lIGdyb3VwIGFzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QuJzon5oyH5a6a5aSa5Liq57uELOeUqOmAl+WPt+WIhumalCcsXG4gICAgJ1NwZWNpZnkgbW9yZSB0aGFuIG9uZSB1c2VyIGFzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QuJzon5oyH5a6a5aSa5Liq55So5oi3LOeUqOmAl+WPt+WIhumalCcsXG4gICAgJ1RoaXMgbWFwcyB0byB0aGUgcHJvY2VzcyBkZWZpbml0aW9uIGtleS4nOifov5nkvJrmmKDlsITkuLrmtYHnqIvlrprkuYnnmoTplK4nLFxuICAgICdDYWxsQWN0aXZpdHkgVHlwZSc6J+iwg+eUqOa0u+WKqOexu+WeiycsXG4gICAgJ0NvbmRpdGlvbiBUeXBlJzon5p2h5Lu257G75Z6LJyxcbiAgICAnQ3JlYXRlIFVzZXJUYXNrJzon5Yib5bu655So5oi35Lu75YqhJyxcbiAgICAnQ3JlYXRlIENhbGxBY3Rpdml0eSc6J+WIm+W7uuiwg+eUqOa0u+WKqCcsXG4gICAgJ0NhbGxlZCBFbGVtZW50Jzon6LCD55So5YWD57SgJyxcbiAgICAnQ3JlYXRlIERhdGFPYmplY3RSZWZlcmVuY2UnOifliJvlu7rmlbDmja7lr7nosaHlvJXnlKgnLFxuICAgICdDcmVhdGUgRGF0YVN0b3JlUmVmZXJlbmNlJzon5Yib5bu65pWw5o2u5a2Y5YKo5byV55SoJyxcbiAgICAnTXVsdGkgSW5zdGFuY2UnOiflpJrlrp7kvosnLFxuICAgICdMb29wIENhcmRpbmFsaXR5Jzon5a6e5L6L5pWw6YePJyxcbiAgICAnQ29sbGVjdGlvbic6J+S7u+WKoeWPguS4juS6uuWIl+ihqCcsXG4gICAgJ0VsZW1lbnQgVmFyaWFibGUnOiflhYPntKDlj5jph48nLFxuICAgICdDb21wbGV0aW9uIENvbmRpdGlvbic6J+WujOaIkOadoeS7tidcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IFwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIiBlbmNvZGluZz1cXFwiVVRGLThcXFwiPz5cXG48YnBtbjI6ZGVmaW5pdGlvbnMgeG1sbnM6eHNpPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZVxcXCIgeG1sbnM6YnBtbjI9XFxcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0JQTU4vMjAxMDA1MjQvTU9ERUxcXFwiIHhtbG5zOmJwbW5kaT1cXFwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvQlBNTi8yMDEwMDUyNC9ESVxcXCIgeG1sbnM6ZGM9XFxcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0RELzIwMTAwNTI0L0RDXFxcIiB4bWxuczpkaT1cXFwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvREQvMjAxMDA1MjQvRElcXFwiIHhzaTpzY2hlbWFMb2NhdGlvbj1cXFwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvQlBNTi8yMDEwMDUyNC9NT0RFTCBCUE1OMjAueHNkXFxcIiBpZD1cXFwic2FtcGxlLWRpYWdyYW1cXFwiIHRhcmdldE5hbWVzcGFjZT1cXFwiaHR0cDovL2FjdGl2aXRpLm9yZy9icG1uXFxcIj5cXG4gIDxicG1uMjpwcm9jZXNzIGlkPVxcXCJQcm9jZXNzXzFcXFwiIGlzRXhlY3V0YWJsZT1cXFwidHJ1ZVxcXCI+XFxuICAgIDxicG1uMjpzdGFydEV2ZW50IGlkPVxcXCJTdGFydEV2ZW50XzFcXFwiLz5cXG4gIDwvYnBtbjI6cHJvY2Vzcz5cXG4gIDxicG1uZGk6QlBNTkRpYWdyYW0gaWQ9XFxcIkJQTU5EaWFncmFtXzFcXFwiPlxcbiAgICA8YnBtbmRpOkJQTU5QbGFuZSBpZD1cXFwiQlBNTlBsYW5lXzFcXFwiIGJwbW5FbGVtZW50PVxcXCJQcm9jZXNzXzFcXFwiPlxcbiAgICAgIDxicG1uZGk6QlBNTlNoYXBlIGlkPVxcXCJfQlBNTlNoYXBlX1N0YXJ0RXZlbnRfMlxcXCIgYnBtbkVsZW1lbnQ9XFxcIlN0YXJ0RXZlbnRfMVxcXCI+XFxuICAgICAgICA8ZGM6Qm91bmRzIGhlaWdodD1cXFwiMzYuMFxcXCIgd2lkdGg9XFxcIjM2LjBcXFwiIHg9XFxcIjQxMi4wXFxcIiB5PVxcXCIyNDAuMFxcXCIvPlxcbiAgICAgIDwvYnBtbmRpOkJQTU5TaGFwZT5cXG4gICAgPC9icG1uZGk6QlBNTlBsYW5lPlxcbiAgPC9icG1uZGk6QlBNTkRpYWdyYW0+XFxuPC9icG1uMjpkZWZpbml0aW9ucz5cIjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIERFRkFVTFRfUFJJT1JJVFkgPSAxMDAwO1xuXG5cbi8qKlxuICogQSBjb21wb25lbnQgdGhhdCBkZWNpZGVzIHVwb24gdGhlIHZpc2liaWxpdHkgLyBlZGl0YWJsZVxuICogc3RhdGUgb2YgcHJvcGVydGllcyBpbiB0aGUgcHJvcGVydGllcyBwYW5lbC5cbiAqXG4gKiBJbXBsZW1lbnRvcnMgbXVzdCBzdWJjbGFzcyB0aGlzIGNvbXBvbmVudCBhbmQgb3ZlcnJpZGVcbiAqIHtAbGluayBQcm9wZXJ0aWVzQWN0aXZhdG9yI2lzRW50cnlWaXNpYmxlfSBhbmRcbiAqIHtAbGluayBQcm9wZXJ0aWVzQWN0aXZhdG9yI2lzUHJvcGVydHlFZGl0YWJsZX0gdG8gcHJvdmlkZVxuICogY3VzdG9tIGJlaGF2aW9yLlxuICpcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcHJpb3JpdHldIGF0IHdoaWNoIHByaW9yaXR5IHRvIGhvb2sgaW50byB0aGUgYWN0aXZhdGlvblxuICovXG5mdW5jdGlvbiBQcm9wZXJ0aWVzQWN0aXZhdG9yKGV2ZW50QnVzLCBwcmlvcml0eSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgcHJpb3JpdHkgPSBwcmlvcml0eSB8fCBERUZBVUxUX1BSSU9SSVRZO1xuXG4gIGV2ZW50QnVzLm9uKCdwcm9wZXJ0aWVzUGFuZWwuaXNFbnRyeVZpc2libGUnLCBwcmlvcml0eSwgZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiBzZWxmLmlzRW50cnlWaXNpYmxlKGUuZW50cnksIGUuZWxlbWVudCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdwcm9wZXJ0aWVzUGFuZWwuaXNQcm9wZXJ0eUVkaXRhYmxlJywgcHJpb3JpdHksIGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gc2VsZi5pc1Byb3BlcnR5RWRpdGFibGUoZS5lbnRyeSwgZS5wcm9wZXJ0eU5hbWUsIGUuZWxlbWVudCk7XG4gIH0pO1xufVxuXG5Qcm9wZXJ0aWVzQWN0aXZhdG9yLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTtcblxubW9kdWxlLmV4cG9ydHMgPSBQcm9wZXJ0aWVzQWN0aXZhdG9yO1xuXG5cbi8qKlxuICogU2hvdWxkIHRoZSBnaXZlbiBlbnRyeSBiZSB2aXNpYmxlIGZvciB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuXG4gKlxuICogQG1ldGhvZCAgUHJvcGVydGllc0FjdGl2YXRvciNpc0VudHJ5VmlzaWJsZVxuICpcbiAqIEBwYXJhbSB7RW50cnlEZXNjcmlwdG9yfSBlbnRyeVxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gKlxuICogQHJldHVybnMge0Jvb2xlYW59XG4gKi9cblByb3BlcnRpZXNBY3RpdmF0b3IucHJvdG90eXBlLmlzRW50cnlWaXNpYmxlID0gZnVuY3Rpb24oZW50cnksIGVsZW1lbnQpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFNob3VsZCB0aGUgZ2l2ZW4gcHJvcGVydHkgYmUgZWRpdGFibGUgZm9yIHRoZSBzcGVjaWZpZWQgZWxlbWVudFxuICpcbiAqIEBtZXRob2QgIFByb3BlcnRpZXNBY3RpdmF0b3IjaXNQcm9wZXJ0eUVkaXRhYmxlXG4gKlxuICogQHBhcmFtIHtFbnRyeURlc2NyaXB0b3J9IGVudHJ5XG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlOYW1lXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuUHJvcGVydGllc0FjdGl2YXRvci5wcm90b3R5cGUuaXNQcm9wZXJ0eUVkaXRhYmxlID0gZnVuY3Rpb24oZW50cnksIHByb3BlcnR5TmFtZSwgZWxlbWVudCkge1xuICByZXR1cm4gdHJ1ZTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uL2hlbHBlci9DbWRIZWxwZXInKSxcbiAgICBlc2NhcGVIVE1MID0gcmVxdWlyZSgnLi4vVXRpbHMnKS5lc2NhcGVIVE1MO1xuXG52YXIgZW50cnlGaWVsZERlc2NyaXB0aW9uID0gcmVxdWlyZSgnLi9FbnRyeUZpZWxkRGVzY3JpcHRpb24nKTtcblxuXG52YXIgY2hlY2tib3ggPSBmdW5jdGlvbihvcHRpb25zLCBkZWZhdWx0UGFyYW1ldGVycykge1xuICB2YXIgcmVzb3VyY2UgPSBkZWZhdWx0UGFyYW1ldGVycyxcbiAgICAgIGlkID0gcmVzb3VyY2UuaWQsXG4gICAgICBsYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwgaWQsXG4gICAgICBjYW5CZURpc2FibGVkID0gISFvcHRpb25zLmRpc2FibGVkICYmIHR5cGVvZiBvcHRpb25zLmRpc2FibGVkID09PSAnZnVuY3Rpb24nLFxuICAgICAgY2FuQmVIaWRkZW4gPSAhIW9wdGlvbnMuaGlkZGVuICYmIHR5cGVvZiBvcHRpb25zLmhpZGRlbiA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgIGRlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbjtcblxuICByZXNvdXJjZS5odG1sID1cbiAgICAnPGlucHV0IGlkPVwiYWN0aXZpdGktJyArIGVzY2FwZUhUTUwoaWQpICsgJ1wiICcgK1xuICAgICAgICAgJ3R5cGU9XCJjaGVja2JveFwiICcgK1xuICAgICAgICAgJ25hbWU9XCInICsgZXNjYXBlSFRNTChvcHRpb25zLm1vZGVsUHJvcGVydHkpICsgJ1wiICcgK1xuICAgICAgICAgKGNhbkJlRGlzYWJsZWQgPyAnZGF0YS1kaXNhYmxlPVwiaXNEaXNhYmxlZFwiJyA6ICcnKSArXG4gICAgICAgICAoY2FuQmVIaWRkZW4gPyAnZGF0YS1zaG93PVwiaXNIaWRkZW5cIicgOiAnJykgK1xuICAgICAgICAgJyAvPicgK1xuICAgICc8bGFiZWwgZm9yPVwiYWN0aXZpdGktJyArIGVzY2FwZUhUTUwoaWQpICsgJ1wiICcgK1xuICAgICAgICAgKGNhbkJlRGlzYWJsZWQgPyAnZGF0YS1kaXNhYmxlPVwiaXNEaXNhYmxlZFwiJyA6ICcnKSArXG4gICAgICAgICAoY2FuQmVIaWRkZW4gPyAnZGF0YS1zaG93PVwiaXNIaWRkZW5cIicgOiAnJykgK1xuICAgICAgICAgJz4nICsgZXNjYXBlSFRNTChsYWJlbCkgKyAnPC9sYWJlbD4nO1xuXG4gIC8vIGFkZCBkZXNjcmlwdGlvbiBiZWxvdyBjaGVja2JveCBlbnRyeSBmaWVsZFxuICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICByZXNvdXJjZS5odG1sICs9IGVudHJ5RmllbGREZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7XG4gIH1cblxuICByZXNvdXJjZS5nZXQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXG4gICAgICAgIHJlcyA9IHt9O1xuXG4gICAgcmVzW29wdGlvbnMubW9kZWxQcm9wZXJ0eV0gPSBiby5nZXQob3B0aW9ucy5tb2RlbFByb3BlcnR5KTtcblxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgcmVzb3VyY2Uuc2V0ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuXG4gICAgcmVzW29wdGlvbnMubW9kZWxQcm9wZXJ0eV0gPSAhIXZhbHVlc1tvcHRpb25zLm1vZGVsUHJvcGVydHldO1xuXG4gICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHJlcyk7XG4gIH07XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLnNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJlc291cmNlLnNldCA9IG9wdGlvbnMuc2V0O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJlc291cmNlLmdldCA9IG9wdGlvbnMuZ2V0O1xuICB9XG5cbiAgaWYgKGNhbkJlRGlzYWJsZWQpIHtcbiAgICByZXNvdXJjZS5pc0Rpc2FibGVkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5kaXNhYmxlZC5hcHBseShyZXNvdXJjZSwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKGNhbkJlSGlkZGVuKSB7XG4gICAgcmVzb3VyY2UuaXNIaWRkZW4gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhb3B0aW9ucy5oaWRkZW4uYXBwbHkocmVzb3VyY2UsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIHJlc291cmNlLmNzc0NsYXNzZXMgPSBbJ2JwcC1jaGVja2JveCddO1xuXG4gIHJldHVybiByZXNvdXJjZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY2hlY2tib3g7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyksXG4gICAgZmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9maW5kJyk7XG5cbnZhciBkb21RdWVyeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5xdWVyeTtcblxudmFyIGVzY2FwZUhUTUwgPSByZXF1aXJlKCcuLi9VdGlscycpLmVzY2FwZUhUTUw7XG5cbnZhciBzZWxlY3RFbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuL1NlbGVjdEVudHJ5RmFjdG9yeScpLFxuICAgIGVudHJ5RmllbGREZXNjcmlwdGlvbiA9IHJlcXVpcmUoJy4vRW50cnlGaWVsZERlc2NyaXB0aW9uJyk7XG5cblxuLyoqXG4gKiBUaGUgY29tYm8gYm94IGlzIGEgc3BlY2lhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2VsZWN0IGVudHJ5IGFuZCBhZGRzIHRoZSBvcHRpb24gJ2N1c3RvbScgdG8gdGhlXG4gKiBzZWxlY3QgYm94LiBJZiAnY3VzdG9tJyBpcyBzZWxlY3RlZCwgYW4gYWRkaXRpb25hbCB0ZXh0IGlucHV0IGZpZWxkIGlzIHNob3duIHdoaWNoIGFsbG93cyB0byBkZWZpbmVcbiAqIGEgY3VzdG9tIHZhbHVlLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmlkXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMubGFiZWxcbiAqIEBwYXJhbSAge0FycmF5PE9iamVjdD59IG9wdGlvbnMuc2VsZWN0T3B0aW9ucyBsaXN0IG9mIG5hbWUvdmFsdWUgcGFpcnNcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5tb2RlbFByb3BlcnR5XG4gKiBAcGFyYW0gIHtmdW5jdGlvbn0gb3B0aW9ucy5nZXRcbiAqIEBwYXJhbSAge2Z1bmN0aW9ufSBvcHRpb25zLnNldFxuICogQHBhcmFtICB7c3RyaW5nfSBbb3B0aW9ucy5jdXN0b21WYWx1ZV0gY3VzdG9tIHNlbGVjdCBvcHRpb24gdmFsdWUgKGRlZmF1bHQ6ICdjdXN0b20nKVxuICogQHBhcmFtICB7c3RyaW5nfSBbb3B0aW9ucy5jdXN0b21OYW1lXSBjdXN0b20gc2VsZWN0IG9wdGlvbiBuYW1lIHZpc2libGUgaW4gdGhlIHNlbGVjdCBib3ggKGRlZmF1bHQ6ICdjdXN0b20nKVxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xudmFyIGNvbWJvQm94ID0gZnVuY3Rpb24ob3B0aW9ucykge1xuXG4gIHZhciBzZWxlY3RPcHRpb25zID0gb3B0aW9ucy5zZWxlY3RPcHRpb25zLFxuICAgICAgbW9kZWxQcm9wZXJ0eSA9IG9wdGlvbnMubW9kZWxQcm9wZXJ0eSxcbiAgICAgIGN1c3RvbVZhbHVlID0gb3B0aW9ucy5jdXN0b21WYWx1ZSB8fCAnY3VzdG9tJyxcbiAgICAgIGN1c3RvbU5hbWUgPSBvcHRpb25zLmN1c3RvbU5hbWUgfHwgJ2N1c3RvbSAnICsgbW9kZWxQcm9wZXJ0eSxcbiAgICAgIGRlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbjtcblxuICAvLyBjaGVjayBpZiBhIHZhbHVlIGlzIG5vdCBhIGJ1aWx0IGluIHZhbHVlXG4gIHZhciBpc0N1c3RvbVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlW21vZGVsUHJvcGVydHldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBpc0N1c3RvbSA9ICFmaW5kKHNlbGVjdE9wdGlvbnMsIGZ1bmN0aW9uKG9wdGlvbikge1xuICAgICAgcmV0dXJuIHZhbHVlW21vZGVsUHJvcGVydHldID09PSBvcHRpb24udmFsdWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXNDdXN0b207XG4gIH07XG5cbiAgdmFyIGNvbWJvT3B0aW9ucyA9IGFzc2lnbih7fSwgb3B0aW9ucyk7XG5cbiAgLy8gdHJ1ZSBpZiB0aGUgc2VsZWN0ZWQgdmFsdWUgaW4gdGhlIHNlbGVjdCBib3ggaXMgY3VzdG9tVmFsdWVcbiAgY29tYm9PcHRpb25zLnNob3dDdXN0b21JbnB1dCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICB2YXIgc2VsZWN0Qm94ID0gZG9tUXVlcnkoJ1tkYXRhLWVudHJ5PVwiJysgb3B0aW9ucy5pZCArJ1wiXSBzZWxlY3QnLCBub2RlLnBhcmVudE5vZGUpO1xuXG4gICAgaWYgKHNlbGVjdEJveCkge1xuICAgICAgcmV0dXJuIHNlbGVjdEJveC52YWx1ZSA9PT0gY3VzdG9tVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIGNvbWJvT3B0aW9ucy5nZXQgPSBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgdmFyIHZhbHVlID0gb3B0aW9ucy5nZXQoZWxlbWVudCwgbm9kZSk7XG5cbiAgICB2YXIgbW9kaWZpZWRWYWx1ZXMgPSB7fTtcblxuICAgIGlmICghaXNDdXN0b21WYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIG1vZGlmaWVkVmFsdWVzW21vZGVsUHJvcGVydHldID0gdmFsdWVbbW9kZWxQcm9wZXJ0eV0gfHwgJyc7XG5cbiAgICAgIHJldHVybiBtb2RpZmllZFZhbHVlcztcbiAgICB9XG5cbiAgICBtb2RpZmllZFZhbHVlc1ttb2RlbFByb3BlcnR5XSA9IGN1c3RvbVZhbHVlO1xuICAgIG1vZGlmaWVkVmFsdWVzWydjdXN0b20tJyttb2RlbFByb3BlcnR5XSA9IHZhbHVlW21vZGVsUHJvcGVydHldO1xuXG4gICAgcmV0dXJuIG1vZGlmaWVkVmFsdWVzO1xuICB9O1xuXG4gIGNvbWJvT3B0aW9ucy5zZXQgPSBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcbiAgICB2YXIgbW9kaWZpZWRWYWx1ZXMgPSB7fTtcblxuICAgIC8vIGlmIHRoZSBjdXN0b20gc2VsZWN0IG9wdGlvbiBoYXMgYmVlbiBzZWxlY3RlZFxuICAgIC8vIHRha2UgdGhlIHZhbHVlIGZyb20gdGhlIHRleHQgaW5wdXQgZmllbGRcbiAgICBpZiAodmFsdWVzW21vZGVsUHJvcGVydHldID09PSBjdXN0b21WYWx1ZSkge1xuICAgICAgbW9kaWZpZWRWYWx1ZXNbbW9kZWxQcm9wZXJ0eV0gPSB2YWx1ZXNbJ2N1c3RvbS0nICsgbW9kZWxQcm9wZXJ0eV0gfHwgJyc7XG4gICAgfVxuICAgIGVsc2UgaWYgKG9wdGlvbnMuZW1wdHlQYXJhbWV0ZXIgJiYgdmFsdWVzW21vZGVsUHJvcGVydHldID09PSAnJykge1xuICAgICAgbW9kaWZpZWRWYWx1ZXNbbW9kZWxQcm9wZXJ0eV0gPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGlmaWVkVmFsdWVzW21vZGVsUHJvcGVydHldID0gdmFsdWVzW21vZGVsUHJvcGVydHldO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucy5zZXQoZWxlbWVudCwgbW9kaWZpZWRWYWx1ZXMsIG5vZGUpO1xuICB9O1xuXG4gIGNvbWJvT3B0aW9ucy5zZWxlY3RPcHRpb25zLnB1c2goeyBuYW1lOiBjdXN0b21OYW1lLCB2YWx1ZTogY3VzdG9tVmFsdWUgfSk7XG5cbiAgdmFyIGNvbWJvQm94RW50cnkgPSBhc3NpZ24oe30sIHNlbGVjdEVudHJ5RmFjdG9yeShjb21ib09wdGlvbnMsIGNvbWJvT3B0aW9ucykpO1xuXG4gIGNvbWJvQm94RW50cnkuaHRtbCArPSAnPGRpdiBjbGFzcz1cImJwcC1maWVsZC13cmFwcGVyIGJwcC1jb21iby1pbnB1dFwiICcgK1xuICAgICdkYXRhLXNob3c9XCJzaG93Q3VzdG9tSW5wdXRcIicgK1xuICAgICc+JyArXG4gICAgJzxpbnB1dCBpZD1cImFjdGl2aXRpLScgKyBlc2NhcGVIVE1MKG9wdGlvbnMuaWQpICsgJy1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImN1c3RvbS0nICtcbiAgICAgIGVzY2FwZUhUTUwobW9kZWxQcm9wZXJ0eSkgKyAnXCIgJyArXG4gICAgJyAvPicgK1xuICAnPC9kaXY+JztcblxuICAvLyBhZGQgZGVzY3JpcHRpb24gYmVsb3cgY29tYm8gYm94IGVudHJ5IGZpZWxkXG4gIGlmIChkZXNjcmlwdGlvbikge1xuICAgIGNvbWJvQm94RW50cnkuaHRtbCArPSBlbnRyeUZpZWxkRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgcmV0dXJuIGNvbWJvQm94RW50cnk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbWJvQm94O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xuXG4vLyBpbnB1dCBlbnRpdGllc1xudmFyIHRleHRJbnB1dEZpZWxkID0gcmVxdWlyZSgnLi9UZXh0SW5wdXRFbnRyeUZhY3RvcnknKSxcbiAgICBjaGVja2JveEZpZWxkID0gcmVxdWlyZSgnLi9DaGVja2JveEVudHJ5RmFjdG9yeScpLFxuICAgIHNlbGVjdEJveEZpZWxkID0gcmVxdWlyZSgnLi9TZWxlY3RFbnRyeUZhY3RvcnknKSxcbiAgICBjb21ib0JveEZpZWxkID0gcmVxdWlyZSgnLi9Db21ib0VudHJ5RmFjdG9yeScpLFxuICAgIHRleHRCb3hGaWVsZCA9IHJlcXVpcmUoJy4vVGV4dEJveEVudHJ5RmFjdG9yeScpLFxuICAgIHZhbGlkYXRpb25Bd2FyZVRleHRJbnB1dEZpZWxkID0gcmVxdWlyZSgnLi9WYWxpZGF0aW9uQXdhcmVUZXh0SW5wdXQnKSxcbiAgICB0YWJsZUZpZWxkID0gcmVxdWlyZSgnLi9UYWJsZUVudHJ5RmFjdG9yeScpLFxuICAgIGxhYmVsRW50cnkgPSByZXF1aXJlKCcuL0xhYmVsRmFjdG9yeScpLFxuICAgIGxpbmsgPSByZXF1aXJlKCcuL0xpbmtFbnRyeUZhY3RvcnknKTtcblxudmFyIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uL2hlbHBlci9DbWRIZWxwZXInKTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGVuc3VyZU5vdE51bGwocHJvcCkge1xuICBpZiAoIXByb3ApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvcCArICcgbXVzdCBiZSBzZXQuJyk7XG4gIH1cblxuICByZXR1cm4gcHJvcDtcbn1cblxuLyoqXG4gKiBzZXRzIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMgd2hpY2ggYXJlIG5lZWRlZCB0byBjcmVhdGUgYW4gZW50cnlcbiAqXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybnMge3tpZDogKiwgZGVzY3JpcHRpb246ICgqfHN0cmluZyksIGdldDogKCp8RnVuY3Rpb24pLCBzZXQ6ICgqfEZ1bmN0aW9uKSxcbiAqICAgICAgICAgICAgdmFsaWRhdGU6ICgqfEZ1bmN0aW9uKSwgaHRtbDogc3RyaW5nfX1cbiAqL1xudmFyIHNldERlZmF1bHRQYXJhbWV0ZXJzID0gZnVuY3Rpb24ob3B0aW9ucykge1xuXG4gIC8vIGRlZmF1bHQgbWV0aG9kIHRvIGZldGNoIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpbnB1dCBmaWVsZFxuICB2YXIgZGVmYXVsdEdldCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICAgICAgcmVzID0ge30sXG4gICAgICAgIHByb3AgPSBlbnN1cmVOb3ROdWxsKG9wdGlvbnMubW9kZWxQcm9wZXJ0eSk7XG4gICAgcmVzW3Byb3BdID0gYm8uZ2V0KHByb3ApO1xuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvLyBkZWZhdWx0IG1ldGhvZCB0byBzZXQgYSBuZXcgdmFsdWUgdG8gdGhlIGlucHV0IGZpZWxkXG4gIHZhciBkZWZhdWx0U2V0ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XG4gICAgdmFyIHJlcyA9IHt9LFxuICAgICAgICBwcm9wID0gZW5zdXJlTm90TnVsbChvcHRpb25zLm1vZGVsUHJvcGVydHkpO1xuICAgIGlmICh2YWx1ZXNbcHJvcF0gIT09ICcnKSB7XG4gICAgICByZXNbcHJvcF0gPSB2YWx1ZXNbcHJvcF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc1twcm9wXSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcmVzKTtcbiAgfTtcblxuICAvLyBkZWZhdWx0IHZhbGlkYXRpb24gbWV0aG9kXG4gIHZhciBkZWZhdWx0VmFsaWRhdGUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge307XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBpZCA6IG9wdGlvbnMuaWQsXG4gICAgZGVzY3JpcHRpb24gOiAob3B0aW9ucy5kZXNjcmlwdGlvbiB8fCAnJyksXG4gICAgZ2V0IDogKG9wdGlvbnMuZ2V0IHx8IGRlZmF1bHRHZXQpLFxuICAgIHNldCA6IChvcHRpb25zLnNldCB8fCBkZWZhdWx0U2V0KSxcbiAgICB2YWxpZGF0ZSA6IChvcHRpb25zLnZhbGlkYXRlIHx8IGRlZmF1bHRWYWxpZGF0ZSksXG4gICAgaHRtbDogJydcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIEVudHJ5RmFjdG9yeSgpIHtcblxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhbiB0ZXh0IGlucHV0IGVudHJ5IG9iamVjdCBmb3IgYSBwcm9wZXJ0eSBwYW5lbC5cbiAqIG9wdGlvbnMgYXJlOlxuICogLSBpZDogaWQgb2YgdGhlIGVudHJ5IC0gU3RyaW5nXG4gKlxuICogLSBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gb2YgdGhlIHByb3BlcnR5IC0gU3RyaW5nXG4gKlxuICogLSBsYWJlbDogbGFiZWwgZm9yIHRoZSBpbnB1dCBmaWVsZCAtIFN0cmluZ1xuICpcbiAqIC0gc2V0OiBzZXR0ZXIgbWV0aG9kIC0gRnVuY3Rpb25cbiAqXG4gKiAtIGdldDogZ2V0dGVyIG1ldGhvZCAtIEZ1bmN0aW9uXG4gKlxuICogLSB2YWxpZGF0ZTogdmFsaWRhdGlvbiBtZWh0b2QgLSBGdW5jdGlvblxuICpcbiAqIC0gbW9kZWxQcm9wZXJ0eTogbmFtZSBvZiB0aGUgbW9kZWwgcHJvcGVydHkgLSBTdHJpbmdcbiAqXG4gKiAtIGJ1dHRvbkFjdGlvbjogT2JqZWN0IHdoaWNoIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczogLSBPYmplY3RcbiAqIC0tLS0gbmFtZTogbmFtZSBvZiB0aGUgW2RhdGEtYWN0aW9uXSBjYWxsYmFjayAtIFN0cmluZ1xuICogLS0tLSBtZXRob2Q6IGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBbZGF0YS1hY3Rpb25dIC0gRnVuY3Rpb25cbiAqXG4gKiAtIGJ1dHRvblNob3c6IE9iamVjdCB3aGljaCBjb250YWlucyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6IC0gT2JqZWN0XG4gKiAtLS0tIG5hbWU6IG5hbWUgb2YgdGhlIFtkYXRhLXNob3ddIGNhbGxiYWNrIC0gU3RyaW5nXG4gKiAtLS0tIG1ldGhvZDogY2FsbGJhY2sgZnVuY3Rpb24gZm9yIFtkYXRhLXNob3ddIC0gRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybnMgdGhlIHByb3BlcnR5UGFuZWwgZW50cnkgcmVzb3VyY2Ugb2JqZWN0XG4gKi9cbkVudHJ5RmFjdG9yeS50ZXh0RmllbGQgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIHJldHVybiB0ZXh0SW5wdXRGaWVsZChvcHRpb25zLCBzZXREZWZhdWx0UGFyYW1ldGVycyhvcHRpb25zKSk7XG59O1xuXG5FbnRyeUZhY3RvcnkudmFsaWRhdGlvbkF3YXJlVGV4dEZpZWxkID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICByZXR1cm4gdmFsaWRhdGlvbkF3YXJlVGV4dElucHV0RmllbGQob3B0aW9ucywgc2V0RGVmYXVsdFBhcmFtZXRlcnMob3B0aW9ucykpO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBjaGVja2JveCBpbnB1dCBlbnRyeSBvYmplY3QgZm9yIGEgcHJvcGVydHkgcGFuZWwuXG4gKiBvcHRpb25zIGFyZTpcbiAqIC0gaWQ6IGlkIG9mIHRoZSBlbnRyeSAtIFN0cmluZ1xuICpcbiAqIC0gZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9wZXJ0eSAtIFN0cmluZ1xuICpcbiAqIC0gbGFiZWw6IGxhYmVsIGZvciB0aGUgaW5wdXQgZmllbGQgLSBTdHJpbmdcbiAqXG4gKiAtIHNldDogc2V0dGVyIG1ldGhvZCAtIEZ1bmN0aW9uXG4gKlxuICogLSBnZXQ6IGdldHRlciBtZXRob2QgLSBGdW5jdGlvblxuICpcbiAqIC0gdmFsaWRhdGU6IHZhbGlkYXRpb24gbWV0aG9kIC0gRnVuY3Rpb25cbiAqXG4gKiAtIG1vZGVsUHJvcGVydHk6IG5hbWUgb2YgdGhlIG1vZGVsIHByb3BlcnR5IC0gU3RyaW5nXG4gKlxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm5zIHRoZSBwcm9wZXJ0eVBhbmVsIGVudHJ5IHJlc291cmNlIG9iamVjdFxuICovXG5FbnRyeUZhY3RvcnkuY2hlY2tib3ggPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIHJldHVybiBjaGVja2JveEZpZWxkKG9wdGlvbnMsIHNldERlZmF1bHRQYXJhbWV0ZXJzKG9wdGlvbnMpKTtcbn07XG5cbkVudHJ5RmFjdG9yeS50ZXh0Qm94ID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICByZXR1cm4gdGV4dEJveEZpZWxkKG9wdGlvbnMsIHNldERlZmF1bHRQYXJhbWV0ZXJzKG9wdGlvbnMpKTtcbn07XG5cbkVudHJ5RmFjdG9yeS5zZWxlY3RCb3ggPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIHJldHVybiBzZWxlY3RCb3hGaWVsZChvcHRpb25zLCBzZXREZWZhdWx0UGFyYW1ldGVycyhvcHRpb25zKSk7XG59O1xuXG5FbnRyeUZhY3RvcnkuY29tYm9Cb3ggPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIHJldHVybiBjb21ib0JveEZpZWxkKG9wdGlvbnMpO1xufTtcblxuRW50cnlGYWN0b3J5LnRhYmxlID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICByZXR1cm4gdGFibGVGaWVsZChvcHRpb25zKTtcbn07XG5cbkVudHJ5RmFjdG9yeS5sYWJlbCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgcmV0dXJuIGxhYmVsRW50cnkob3B0aW9ucyk7XG59O1xuXG5FbnRyeUZhY3RvcnkubGluayA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgcmV0dXJuIGxpbmsob3B0aW9ucyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVudHJ5RmFjdG9yeTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVzY2FwZUhUTUwgPSByZXF1aXJlKCcuLi9VdGlscycpLmVzY2FwZUhUTUw7XG5cbi8qKlxuICogQ3JlYXRlIGEgbGlua2lmaWVkIGFuZCBIVE1MIGVzY2FwZWQgZW50cnkgZmllbGQgZGVzY3JpcHRpb24uXG4gKlxuICogQXMgYSBzcGVjaWFsIGZlYXR1cmUsIHRoaXMgZGVzY3JpcHRpb24gbWF5IGNvbnRhaW4gYm90aCBtYXJrZG93blxuICogYW5kIHBsYWluIDxhIGhyZWY+IGxpbmtzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkZXNjcmlwdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVudHJ5RmllbGREZXNjcmlwdGlvbihkZXNjcmlwdGlvbikge1xuXG4gIC8vIHdlIHRva2VuaXplIHRoZSBkZXNjcmlwdGlvbiB0byBleHRyYWN0IHRleHQsIEhUTUwgYW5kIG1hcmtkb3duIGxpbmtzXG4gIC8vIHRleHQgYW5kIGxpbmtzIGFyZSBoYW5kbGVkIHNlcGVyYXRlbHlcblxuICB2YXIgZXNjYXBlZCA9IFtdO1xuXG4gIC8vIG1hdGNoIG1hcmtkb3duIFt7VEVYVH1dKHtVUkx9KSBhbmQgSFRNTCBsaW5rcyA8YSBocmVmPVwie1VSTH1cIj57VEVYVH08L2E+XG4gIHZhciBwYXR0ZXJuID0gLyg/OlxcWyhbXlxcXV0rKVxcXVxcKChodHRwcz86XFwvXFwvW15cIjw+XFxdXSspXFwpKXwoPzo8YSBocmVmPVwiKGh0dHBzPzpcXC9cXC9bXlwiPD5dKylcIj4oW148XSopPFxcL2E+KS9naTtcblxuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbWF0Y2g7XG4gIHZhciBsaW5rLCB0ZXh0O1xuXG4gIHdoaWxlICgobWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoZGVzY3JpcHRpb24pKSkge1xuXG4gICAgLy8gZXNjYXBlICsgaW5zZXJ0IHRleHQgYmVmb3JlIG1hdGNoXG4gICAgaWYgKG1hdGNoLmluZGV4ID4gaW5kZXgpIHtcbiAgICAgIGVzY2FwZWQucHVzaChlc2NhcGVIVE1MKGRlc2NyaXB0aW9uLnN1YnN0cmluZyhpbmRleCwgbWF0Y2guaW5kZXgpKSk7XG4gICAgfVxuXG4gICAgbGluayA9IG1hdGNoWzJdIHx8IG1hdGNoWzNdO1xuICAgIHRleHQgPSBtYXRjaFsxXSB8fCBtYXRjaFs0XTtcblxuICAgIC8vIGluc2VydCBzYWZlIGxpbmtcbiAgICBlc2NhcGVkLnB1c2goJzxhIGhyZWY9XCInICsgbGluayArICdcIiB0YXJnZXQ9XCJfYmxhbmtcIj4nICsgZXNjYXBlSFRNTCh0ZXh0KSArICc8L2E+Jyk7XG5cbiAgICBpbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuICB9XG5cbiAgLy8gZXNjYXBlIGFuZCBpbnNlcnQgdGV4dCBhZnRlciBsYXN0IG1hdGNoXG4gIGlmIChpbmRleCA8IGRlc2NyaXB0aW9uLmxlbmd0aCkge1xuICAgIGVzY2FwZWQucHVzaChlc2NhcGVIVE1MKGRlc2NyaXB0aW9uLnN1YnN0cmluZyhpbmRleCkpKTtcbiAgfVxuXG4gIHJldHVybiAnPGRpdiBjbGFzcz1cImJwcC1maWVsZC1kZXNjcmlwdGlvblwiPicgKyBlc2NhcGVkLmpvaW4oJycpICsgJzwvZGl2Pic7XG59OyIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBUaGUgbGFiZWwgZmFjdG9yeSBwcm92aWRlcyBhIGxhYmVsIGVudHJ5LiBGb3IgdGhlIGxhYmVsIHRleHRcbiAqIGl0IGV4cGVjdHMgZWl0aGVyIGEgc3RyaW5nIHByb3ZpZGVkIGJ5IHRoZSBvcHRpb25zLmxhYmVsVGV4dFxuICogcGFyYW1ldGVyIG9yIGl0IGNvdWxkIGJlIGdlbmVyYXRlZCBwcm9ncmFtbWF0aWNhbGx5IHVzaW5nIGFcbiAqIGZ1bmN0aW9uIHBhc3NlZCBhcyB0aGUgb3B0aW9ucy5nZXQgcGFyYW1ldGVyLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmlkXG4gKiBAcGFyYW0gIHtzdHJpbmd9IFtvcHRpb25zLmxhYmVsVGV4dF1cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb3B0aW9ucy5nZXRdXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gW29wdGlvbnMuc2hvd0xhYmVsXVxuICogQHBhcmFtICB7Qm9vbGVhbn0gW29wdGlvbnMuZGl2aWRlcl0gYWRkcyBhIGRpdmlkZXIgYXQgdGhlIHRvcCBvZiB0aGUgbGFiZWwgaWYgdHJ1ZTsgZGVmYXVsdDogZmFsc2VcbiAqL1xudmFyIGxhYmVsID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICByZXR1cm4ge1xuICAgIGlkOiBvcHRpb25zLmlkLFxuICAgIGh0bWw6ICc8bGFiZWwgZGF0YS12YWx1ZT1cImxhYmVsXCIgJyArXG4gICAgICAgICAgICAnZGF0YS1zaG93PVwic2hvd0xhYmVsXCIgJyArXG4gICAgICAgICAgICAnY2xhc3M9XCJlbnRyeS1sYWJlbCcgKyAob3B0aW9ucy5kaXZpZGVyID8gJyBkaXZpZGVyJyA6ICcnKSArICdcIj4nICtcbiAgICAgICAgICAnPC9sYWJlbD4nLFxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5nZXQoZWxlbWVudCwgbm9kZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBsYWJlbDogb3B0aW9ucy5sYWJlbFRleHQgfTtcbiAgICB9LFxuICAgIHNob3dMYWJlbDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnNob3dMYWJlbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5zaG93TGFiZWwoZWxlbWVudCwgbm9kZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxhYmVsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZXNjYXBlSFRNTCA9IHJlcXVpcmUoJy4uL1V0aWxzJykuZXNjYXBlSFRNTDtcblxudmFyIGVudHJ5RmllbGREZXNjcmlwdGlvbiA9IHJlcXVpcmUoJy4vRW50cnlGaWVsZERlc2NyaXB0aW9uJyk7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnbG9kYXNoL2JpbmQnKTtcblxuLyoqXG4gKiBBbiBlbnRyeSB0aGF0IHJlbmRlcnMgYSBjbGlja2FibGUgbGluay5cbiAqXG4gKiBBIHBhc3NlZCB7QGxpbmsgb3B0aW9ucyNoYW5kbGVDbGlja30gaGFuZGxlciBpcyByZXNwb25zaWJsZVxuICogdG8gcHJvY2VzcyB0aGUgY2xpY2suXG4gKlxuICogVGhlIGxpbmsgbWF5IGJlIGNvbmRpdGlvbmFsbHkgc2hvd24gb3IgaGlkZGVuLiBUaGlzIGNhbiBiZVxuICogY29udHJvbGxlZCB2aWEgdGhlIHtAbGluayBvcHRpb25zLnNob3dMaW5rfS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMuaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5sYWJlbF1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMuaGFuZGxlQ2xpY2tcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnNob3dMaW5rXSByZXR1cm5pbmcgZmFsc2UgdG8gaGlkZSBsaW5rXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuZGVzY3JpcHRpb25dXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgbGlua0VudHJ5ID0gbGluayh7XG4gKiAgIGlkOiAnZm9vJyxcbiAqICAgZGVzY3JpcHRpb246ICdTb21lIERlc2NyaXB0aW9uJyxcbiAqICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGV2ZW50KSB7IC4uLiB9LFxuICogICBzaG93TGluazogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkgeyAuLi4gfVxuICogfSk7XG4gKlxuICogQHJldHVybiB7RW50cnl9IHRoZSBuZXdseSBjcmVhdGVkIGVudHJ5XG4gKi9cbmZ1bmN0aW9uIGxpbmsob3B0aW9ucykge1xuXG4gIHZhciBpZCA9IG9wdGlvbnMuaWQsXG4gICAgICBsYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwgaWQsXG4gICAgICBzaG93TGluayA9IG9wdGlvbnMuc2hvd0xpbmssXG4gICAgICBoYW5kbGVDbGljayA9IG9wdGlvbnMuaGFuZGxlQ2xpY2ssXG4gICAgICBkZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRpb247XG5cbiAgaWYgKHNob3dMaW5rICYmIHR5cGVvZiBzaG93TGluayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5zaG93TGluayBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlQ2xpY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMuaGFuZGxlQ2xpY2sgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB2YXIgcmVzb3VyY2UgPSB7XG4gICAgaWQ6IGlkXG4gIH07XG5cbiAgcmVzb3VyY2UuaHRtbCA9XG4gICAgJzxhIGRhdGEtYWN0aW9uPVwiaGFuZGxlQ2xpY2tcIiAnICtcbiAgICAoc2hvd0xpbmsgPyAnZGF0YS1zaG93PVwic2hvd0xpbmtcIiAnIDogJycpICtcbiAgICAnY2xhc3M9XCJicHAtZW50cnktbGluaycgKyAob3B0aW9ucy5jc3NDbGFzc2VzID8gJyAnICsgZXNjYXBlSFRNTChvcHRpb25zLmNzc0NsYXNzZXMpIDogJycpICtcbiAgICAnXCI+JyArIGVzY2FwZUhUTUwobGFiZWwpICsgJzwvYT4nO1xuXG4gIC8vIGFkZCBkZXNjcmlwdGlvbiBiZWxvdyBsaW5rIGVudHJ5IGZpZWxkXG4gIGlmIChkZXNjcmlwdGlvbikge1xuICAgIHJlc291cmNlLmh0bWwgKz0gZW50cnlGaWVsZERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIHJlc291cmNlLmhhbmRsZUNsaWNrID0gYmluZChoYW5kbGVDbGljaywgcmVzb3VyY2UpO1xuXG4gIGlmICh0eXBlb2Ygc2hvd0xpbmsgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXNvdXJjZS5zaG93TGluayA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHNob3dMaW5rLmFwcGx5KHJlc291cmNlLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gcmVzb3VyY2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGluaztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVzY2FwZUhUTUwgPSByZXF1aXJlKCcuLi9VdGlscycpLmVzY2FwZUhUTUw7XG5cbnZhciBkb21pZnkgPSByZXF1aXJlKCdtaW4tZG9tJykuZG9taWZ5O1xuXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XG5cbnZhciBlbnRyeUZpZWxkRGVzY3JpcHRpb24gPSByZXF1aXJlKCcuL0VudHJ5RmllbGREZXNjcmlwdGlvbicpO1xuXG5cbnZhciBpc0xpc3QgPSBmdW5jdGlvbihsaXN0KSB7XG4gIHJldHVybiAhKCFsaXN0IHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsaXN0KSAhPT0gJ1tvYmplY3QgQXJyYXldJyk7XG59O1xuXG52YXIgYWRkRW1wdHlQYXJhbWV0ZXIgPSBmdW5jdGlvbihsaXN0KSB7XG4gIHJldHVybiBsaXN0LmNvbmNhdChbIHsgbmFtZTogJycsIHZhbHVlOiAnJyB9IF0pO1xufTtcblxudmFyIGNyZWF0ZU9wdGlvbiA9IGZ1bmN0aW9uKG9wdGlvbikge1xuICByZXR1cm4gJzxvcHRpb24gdmFsdWU9XCInICsgb3B0aW9uLnZhbHVlICsgJ1wiPicgKyBvcHRpb24ubmFtZSArICc8L29wdGlvbj4nO1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5pZFxuICogQHBhcmFtICB7c3RyaW5nfSBbb3B0aW9ucy5sYWJlbF1cbiAqIEBwYXJhbSAge0FycmF5PE9iamVjdD59IG9wdGlvbnMuc2VsZWN0T3B0aW9uc1xuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLm1vZGVsUHJvcGVydHlcbiAqIEBwYXJhbSAge2Jvb2xlYW59IG9wdGlvbnMuZW1wdHlQYXJhbWV0ZXJcbiAqIEBwYXJhbSAge2Z1bmN0aW9ufSBvcHRpb25zLmRpc2FibGVkXG4gKiBAcGFyYW0gIHtmdW5jdGlvbn0gb3B0aW9ucy5oaWRkZW5cbiAqIEBwYXJhbSAge09iamVjdH0gZGVmYXVsdFBhcmFtZXRlcnNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbnZhciBzZWxlY3Rib3ggPSBmdW5jdGlvbihvcHRpb25zLCBkZWZhdWx0UGFyYW1ldGVycykge1xuICB2YXIgcmVzb3VyY2UgPSBkZWZhdWx0UGFyYW1ldGVycyxcbiAgICAgIGxhYmVsID0gb3B0aW9ucy5sYWJlbCB8fCByZXNvdXJjZS5pZCxcbiAgICAgIHNlbGVjdE9wdGlvbnMgPSBvcHRpb25zLnNlbGVjdE9wdGlvbnMgfHwgWyB7IG5hbWU6ICcnLCB2YWx1ZTogJycgfSBdLFxuICAgICAgbW9kZWxQcm9wZXJ0eSA9IG9wdGlvbnMubW9kZWxQcm9wZXJ0eSxcbiAgICAgIGVtcHR5UGFyYW1ldGVyID0gb3B0aW9ucy5lbXB0eVBhcmFtZXRlcixcbiAgICAgIGNhbkJlRGlzYWJsZWQgPSAhIW9wdGlvbnMuZGlzYWJsZWQgJiYgdHlwZW9mIG9wdGlvbnMuZGlzYWJsZWQgPT09ICdmdW5jdGlvbicsXG4gICAgICBjYW5CZUhpZGRlbiA9ICEhb3B0aW9ucy5oaWRkZW4gJiYgdHlwZW9mIG9wdGlvbnMuaGlkZGVuID09PSAnZnVuY3Rpb24nLFxuICAgICAgZGVzY3JpcHRpb24gPSBvcHRpb25zLmRlc2NyaXB0aW9uO1xuXG5cbiAgaWYgKGVtcHR5UGFyYW1ldGVyKSB7XG4gICAgc2VsZWN0T3B0aW9ucyA9IGFkZEVtcHR5UGFyYW1ldGVyKHNlbGVjdE9wdGlvbnMpO1xuICB9XG5cblxuICByZXNvdXJjZS5odG1sID1cbiAgICAnPGxhYmVsIGZvcj1cImFjdGl2aXRpLScgKyBlc2NhcGVIVE1MKHJlc291cmNlLmlkKSArICdcIicgK1xuICAgIChjYW5CZURpc2FibGVkID8gJ2RhdGEtZGlzYWJsZT1cImlzRGlzYWJsZWRcIiAnIDogJycpICtcbiAgICAoY2FuQmVIaWRkZW4gPyAnZGF0YS1zaG93PVwiaXNIaWRkZW5cIiAnIDogJycpICtcbiAgICAnPicgKyBlc2NhcGVIVE1MKGxhYmVsKSArICc8L2xhYmVsPicgK1xuICAgICc8c2VsZWN0IGlkPVwiYWN0aXZpdGktJyArIGVzY2FwZUhUTUwocmVzb3VyY2UuaWQpICsgJy1zZWxlY3RcIiBuYW1lPVwiJyArXG4gICAgZXNjYXBlSFRNTChtb2RlbFByb3BlcnR5KSArICdcIicgK1xuICAgIChjYW5CZURpc2FibGVkID8gJ2RhdGEtZGlzYWJsZT1cImlzRGlzYWJsZWRcIiAnIDogJycpICtcbiAgICAoY2FuQmVIaWRkZW4gPyAnZGF0YS1zaG93PVwiaXNIaWRkZW5cIiAnIDogJycpICtcbiAgICAnIGRhdGEtdmFsdWU+JztcblxuICBpZiAoaXNMaXN0KHNlbGVjdE9wdGlvbnMpKSB7XG4gICAgZm9yRWFjaChzZWxlY3RPcHRpb25zLCBmdW5jdGlvbihvcHRpb24pIHtcbiAgICAgIHJlc291cmNlLmh0bWwgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgZXNjYXBlSFRNTChvcHRpb24udmFsdWUpICsgJ1wiPicgK1xuICAgICAgKG9wdGlvbi5uYW1lID8gZXNjYXBlSFRNTChvcHRpb24ubmFtZSkgOiAnJykgKyAnPC9vcHRpb24+JztcbiAgICB9KTtcbiAgfVxuXG4gIHJlc291cmNlLmh0bWwgKz0gJzwvc2VsZWN0Pic7XG5cbiAgLy8gYWRkIGRlc2NyaXB0aW9uIGJlbG93IHNlbGVjdCBib3ggZW50cnkgZmllbGRcbiAgaWYgKGRlc2NyaXB0aW9uICYmIHR5cGVvZiBvcHRpb25zLnNob3dDdXN0b21JbnB1dCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJlc291cmNlLmh0bWwgKz0gZW50cnlGaWVsZERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWxsIHRoZSBzZWxlY3QgYm94IG9wdGlvbnMgZHluYW1pY2FsbHkuXG4gICAqXG4gICAqIENhbGxzIHRoZSBkZWZpbmVkIGZ1bmN0aW9uICNzZWxlY3RPcHRpb25zIGluIHRoZSBlbnRyeSB0byBnZXQgdGhlXG4gICAqIHZhbHVlcyBmb3IgdGhlIG9wdGlvbnMgYW5kIHNldCB0aGUgdmFsdWUgdG8gdGhlIGlucHV0Tm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbnRyeU5vZGVcbiAgICogQHBhcmFtIHtFbnRyeURlc2NyaXB0b3J9IGlucHV0Tm9kZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXROYW1lXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdWYWx1ZVxuICAgKi9cbiAgcmVzb3VyY2Uuc2V0Q29udHJvbFZhbHVlID0gZnVuY3Rpb24oZWxlbWVudCwgZW50cnlOb2RlLCBpbnB1dE5vZGUsIGlucHV0TmFtZSwgbmV3VmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHNlbGVjdE9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgdmFyIG9wdGlvbnMgPSBzZWxlY3RPcHRpb25zKGVsZW1lbnQsIGlucHV0Tm9kZSk7XG5cbiAgICAgIGlmIChvcHRpb25zKSB7XG5cbiAgICAgICAgLy8gcmVtb3ZlIGV4aXN0aW5nIG9wdGlvbnNcbiAgICAgICAgd2hpbGUgKGlucHV0Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgaW5wdXROb2RlLnJlbW92ZUNoaWxkKGlucHV0Tm9kZS5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCBvcHRpb25zXG4gICAgICAgIGZvckVhY2gob3B0aW9ucywgZnVuY3Rpb24ob3B0aW9uKSB7XG4gICAgICAgICAgdmFyIHRlbXBsYXRlID0gZG9taWZ5KGNyZWF0ZU9wdGlvbihvcHRpb24pKTtcblxuICAgICAgICAgIGlucHV0Tm9kZS5hcHBlbmRDaGlsZCh0ZW1wbGF0ZSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgc2VsZWN0IHZhbHVlXG4gICAgaWYgKG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlucHV0Tm9kZS52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cblxuICB9O1xuXG4gIGlmIChjYW5CZURpc2FibGVkKSB7XG4gICAgcmVzb3VyY2UuaXNEaXNhYmxlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZGlzYWJsZWQuYXBwbHkocmVzb3VyY2UsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChjYW5CZUhpZGRlbikge1xuICAgIHJlc291cmNlLmlzSGlkZGVuID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gIW9wdGlvbnMuaGlkZGVuLmFwcGx5KHJlc291cmNlLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cblxuICByZXNvdXJjZS5jc3NDbGFzc2VzID0gWydicHAtZHJvcGRvd24nXTtcblxuICByZXR1cm4gcmVzb3VyY2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNlbGVjdGJveDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVzY2FwZUhUTUwgPSByZXF1aXJlKCcuLi9VdGlscycpLmVzY2FwZUhUTUw7XG5cbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi9oZWxwZXIvQ21kSGVscGVyJyk7XG5cbnZhciBkb21RdWVyeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5xdWVyeSxcbiAgICBkb21BdHRyID0gcmVxdWlyZSgnbWluLWRvbScpLmF0dHIsXG4gICAgZG9tQ2xvc2VzdCA9IHJlcXVpcmUoJ21pbi1kb20nKS5jbG9zZXN0O1xuXG52YXIgZmlsdGVyID0gcmVxdWlyZSgnbG9kYXNoL2ZpbHRlcicpLFxuICAgIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpLFxuICAgIGtleXMgPSByZXF1aXJlKCdsb2Rhc2gva2V5cycpO1xuXG52YXIgZG9taWZ5ID0gcmVxdWlyZSgnbWluLWRvbScpLmRvbWlmeTtcblxudmFyIGVudHJ5RmllbGREZXNjcmlwdGlvbiA9IHJlcXVpcmUoJy4vRW50cnlGaWVsZERlc2NyaXB0aW9uJyk7XG5cbnZhciB1cGRhdGVTZWxlY3Rpb24gPSByZXF1aXJlKCdzZWxlY3Rpb24tdXBkYXRlJyk7XG5cbnZhciBUQUJMRV9ST1dfRElWX1NOSVBQRVQgPSAnPGRpdiBjbGFzcz1cImJwcC1maWVsZC13cmFwcGVyIGJwcC10YWJsZS1yb3dcIj4nO1xudmFyIERFTEVURV9ST1dfQlVUVE9OX1NOSVBQRVQgPSAnPGJ1dHRvbiBjbGFzcz1cImNsZWFyXCIgZGF0YS1hY3Rpb249XCJkZWxldGVFbGVtZW50XCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuPlg8L3NwYW4+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nO1xuXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFJvd1RlbXBsYXRlKHByb3BlcnRpZXMsIGNhblJlbW92ZSkge1xuICB2YXIgdGVtcGxhdGUgPSBUQUJMRV9ST1dfRElWX1NOSVBQRVQ7XG4gIHRlbXBsYXRlICs9IGNyZWF0ZUlucHV0VGVtcGxhdGUocHJvcGVydGllcywgY2FuUmVtb3ZlKTtcbiAgdGVtcGxhdGUgKz0gY2FuUmVtb3ZlID8gREVMRVRFX1JPV19CVVRUT05fU05JUFBFVCA6ICcnO1xuICB0ZW1wbGF0ZSArPSAnPC9kaXY+JztcblxuICByZXR1cm4gdGVtcGxhdGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0VGVtcGxhdGUocHJvcGVydGllcywgY2FuUmVtb3ZlKSB7XG4gIHZhciBjb2x1bW5zID0gcHJvcGVydGllcy5sZW5ndGg7XG4gIHZhciB0ZW1wbGF0ZSA9ICcnO1xuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHByb3ApIHtcbiAgICB0ZW1wbGF0ZSArPSAnPGlucHV0IGNsYXNzPVwiYnBwLXRhYmxlLXJvdy1jb2x1bW5zLScgKyBjb2x1bW5zICsgJyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FuUmVtb3ZlID8gJ2JwcC10YWJsZS1yb3ctcmVtb3ZhYmxlJyA6ICcnKSArICdcIiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgJ2lkPVwiYWN0aXZpdGktdGFibGUtcm93LWNlbGwtaW5wdXQtdmFsdWVcIiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGU9XCJ0ZXh0XCIgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICduYW1lPVwiJyArIGVzY2FwZUhUTUwocHJvcCkgKyAnXCIgLz4nO1xuICB9KTtcbiAgcmV0dXJuIHRlbXBsYXRlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVMYWJlbFJvd1RlbXBsYXRlKGxhYmVscykge1xuICB2YXIgdGVtcGxhdGUgPSBUQUJMRV9ST1dfRElWX1NOSVBQRVQ7XG4gIHRlbXBsYXRlICs9IGNyZWF0ZUxhYmVsVGVtcGxhdGUobGFiZWxzKTtcbiAgdGVtcGxhdGUgKz0gJzwvZGl2Pic7XG5cbiAgcmV0dXJuIHRlbXBsYXRlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVMYWJlbFRlbXBsYXRlKGxhYmVscykge1xuICB2YXIgY29sdW1ucyA9IGxhYmVscy5sZW5ndGg7XG4gIHZhciB0ZW1wbGF0ZSA9ICcnO1xuICBmb3JFYWNoKGxhYmVscywgZnVuY3Rpb24obGFiZWwpIHtcbiAgICB0ZW1wbGF0ZSArPSAnPGxhYmVsIGNsYXNzPVwiYnBwLXRhYmxlLXJvdy1jb2x1bW5zLScgKyBjb2x1bW5zICsgJ1wiPicgKyBlc2NhcGVIVE1MKGxhYmVsKSArICc8L2xhYmVsPic7XG4gIH0pO1xuICByZXR1cm4gdGVtcGxhdGU7XG59XG5cbmZ1bmN0aW9uIHBpY2soZWxlbWVudHMsIHByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIChlbGVtZW50cyB8fCBbXSkubWFwKGZ1bmN0aW9uKGVsZW0pIHtcbiAgICB2YXIgbmV3RWxlbWVudCA9IHt9O1xuICAgIGZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24ocHJvcCkge1xuICAgICAgbmV3RWxlbWVudFtwcm9wXSA9IGVsZW1bcHJvcF0gfHwgJyc7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ld0VsZW1lbnQ7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkaWZmKGVsZW1lbnQsIG5vZGUsIHZhbHVlcywgb2xkVmFsdWVzLCBlZGl0YWJsZSkge1xuICByZXR1cm4gZmlsdGVyKHZhbHVlcywgZnVuY3Rpb24odmFsdWUsIGlkeCkge1xuICAgIHJldHVybiAhdmFsdWVFcXVhbChlbGVtZW50LCBub2RlLCB2YWx1ZSwgb2xkVmFsdWVzW2lkeF0sIGVkaXRhYmxlLCBpZHgpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsdWVFcXVhbChlbGVtZW50LCBub2RlLCB2YWx1ZSwgb2xkVmFsdWUsIGVkaXRhYmxlLCBpZHgpIHtcbiAgaWYgKHZhbHVlICYmICFvbGRWYWx1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgYWxsS2V5cyA9IGtleXModmFsdWUpLmNvbmNhdChrZXlzKG9sZFZhbHVlKSk7XG5cbiAgcmV0dXJuIGFsbEtleXMuZXZlcnkoZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIG4gPSB2YWx1ZVtrZXldIHx8IHVuZGVmaW5lZDtcbiAgICB2YXIgbyA9IG9sZFZhbHVlW2tleV0gfHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiAhZWRpdGFibGUoZWxlbWVudCwgbm9kZSwga2V5LCBpZHgpIHx8IG4gPT09IG87XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRFbnRyeU5vZGUobm9kZSkge1xuICByZXR1cm4gZG9tQ2xvc2VzdChub2RlLCAnW2RhdGEtZW50cnldJywgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRhaW5lcihub2RlKSB7XG4gIHJldHVybiBkb21RdWVyeSgnZGl2W2RhdGEtbGlzdC1lbnRyeS1jb250YWluZXJdJywgbm9kZSk7XG59XG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbihub2RlKSB7XG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IG5vZGUuc2VsZWN0aW9uU3RhcnQsXG4gICAgZW5kOiBub2RlLnNlbGVjdGlvbkVuZFxuICB9O1xufVxuXG5mdW5jdGlvbiBzZXRTZWxlY3Rpb24obm9kZSwgc2VsZWN0aW9uKSB7XG4gIG5vZGUuc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQ7XG4gIG5vZGUuc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLmVuZDtcbn1cblxuLyoqXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5pZFxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmRlc2NyaXB0aW9uXG4gKiBAcGFyYW0gIHtBcnJheTxzdHJpbmc+fSBvcHRpb25zLm1vZGVsUHJvcGVydGllc1xuICogQHBhcmFtICB7QXJyYXk8c3RyaW5nPn0gb3B0aW9ucy5sYWJlbHNcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBvcHRpb25zLmdldEVsZW1lbnRzIC0gdGhpcyBjYWxsYmFjayBmdW5jdGlvbiBtdXN0IHJldHVybiBhIGxpc3Qgb2YgYnVzaW5lc3Mgb2JqZWN0IGl0ZW1zXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gb3B0aW9ucy5yZW1vdmVFbGVtZW50XG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gb3B0aW9ucy5hZGRFbGVtZW50XG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gb3B0aW9ucy51cGRhdGVFbGVtZW50XG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gb3B0aW9ucy5lZGl0YWJsZVxuICogQHBhcmFtICB7RnVuY3Rpb259IG9wdGlvbnMuc2V0Q29udHJvbFZhbHVlXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gb3B0aW9ucy5zaG93XG4gKlxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblxuICB2YXIgaWQgPSBvcHRpb25zLmlkLFxuICAgICAgbW9kZWxQcm9wZXJ0aWVzID0gb3B0aW9ucy5tb2RlbFByb3BlcnRpZXMsXG4gICAgICBsYWJlbHMgPSBvcHRpb25zLmxhYmVscyxcbiAgICAgIGRlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbjtcblxuICB2YXIgbGFiZWxSb3cgPSBjcmVhdGVMYWJlbFJvd1RlbXBsYXRlKGxhYmVscyk7XG5cbiAgdmFyIGdldEVsZW1lbnRzID0gb3B0aW9ucy5nZXRFbGVtZW50cztcblxuICB2YXIgcmVtb3ZlRWxlbWVudCA9IG9wdGlvbnMucmVtb3ZlRWxlbWVudCxcbiAgICAgIGNhblJlbW92ZSA9IHR5cGVvZiByZW1vdmVFbGVtZW50ID09PSAnZnVuY3Rpb24nO1xuXG4gIHZhciBhZGRFbGVtZW50ID0gb3B0aW9ucy5hZGRFbGVtZW50LFxuICAgICAgY2FuQWRkID0gdHlwZW9mIGFkZEVsZW1lbnQgPT09ICdmdW5jdGlvbicsXG4gICAgICBhZGRMYWJlbCA9IG9wdGlvbnMuYWRkTGFiZWwgfHwgJ0FkZCBWYWx1ZSc7XG5cbiAgdmFyIHVwZGF0ZUVsZW1lbnQgPSBvcHRpb25zLnVwZGF0ZUVsZW1lbnQsXG4gICAgICBjYW5VcGRhdGUgPSB0eXBlb2YgdXBkYXRlRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJztcblxuICB2YXIgZWRpdGFibGUgPSBvcHRpb25zLmVkaXRhYmxlIHx8IGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSxcbiAgICAgIHNldENvbnRyb2xWYWx1ZSA9IG9wdGlvbnMuc2V0Q29udHJvbFZhbHVlO1xuXG4gIHZhciBzaG93ID0gb3B0aW9ucy5zaG93LFxuICAgICAgY2FuQmVTaG93biA9IHR5cGVvZiBzaG93ID09PSAnZnVuY3Rpb24nO1xuXG4gIHZhciBlbGVtZW50cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICByZXR1cm4gcGljayhnZXRFbGVtZW50cyhlbGVtZW50LCBub2RlKSwgbW9kZWxQcm9wZXJ0aWVzKTtcbiAgfTtcblxuICB2YXIgZmFjdG9yeSA9IHtcbiAgICBpZDogaWQsXG4gICAgaHRtbDogKGNhbkFkZCA/XG4gICAgICAnPGRpdiBjbGFzcz1cImJwcC10YWJsZS1hZGQtcm93XCIgJyArIChjYW5CZVNob3duID8gJ2RhdGEtc2hvdz1cInNob3dcIicgOiAnJykgKyAnPicgK1xuICAgICAgICAgICAgJzxsYWJlbD4nICsgZXNjYXBlSFRNTChhZGRMYWJlbCkgKyAnPC9sYWJlbD4nICtcbiAgICAgICAgICAgICc8YnV0dG9uIGNsYXNzPVwiYWRkXCIgZGF0YS1hY3Rpb249XCJhZGRFbGVtZW50XCI+PHNwYW4+Kzwvc3Bhbj48L2J1dHRvbj4nICtcbiAgICAgICAgICAnPC9kaXY+JyA6ICcnKSArXG4gICAgICAgICAgJzxkaXYgY2xhc3M9XCJicHAtdGFibGVcIiBkYXRhLXNob3c9XCJzaG93VGFibGVcIj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLXdyYXBwZXIgYnBwLXRhYmxlLXJvd1wiPicgK1xuICAgICAgICAgICAgICAgbGFiZWxSb3cgK1xuICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgJzxkaXYgZGF0YS1saXN0LWVudHJ5LWNvbnRhaW5lcj4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAnPC9kaXY+JyArXG5cbiAgICAgICAgICAvLyBhZGQgZGVzY3JpcHRpb24gYmVsb3cgdGFibGUgZW50cnkgZmllbGRcbiAgICAgICAgICAoZGVzY3JpcHRpb24gPyBlbnRyeUZpZWxkRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIDogJycpLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgYm9FbGVtZW50cyA9IGVsZW1lbnRzKGVsZW1lbnQsIG5vZGUsIHRoaXMuX19pbnZhbGlkVmFsdWVzKTtcblxuICAgICAgdmFyIGludmFsaWRWYWx1ZXMgPSB0aGlzLl9faW52YWxpZFZhbHVlcztcblxuICAgICAgZGVsZXRlIHRoaXMuX19pbnZhbGlkVmFsdWVzO1xuXG4gICAgICBmb3JFYWNoKGludmFsaWRWYWx1ZXMsIGZ1bmN0aW9uKHZhbHVlLCBpZHgpIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBib0VsZW1lbnRzW2lkeF07XG5cbiAgICAgICAgZm9yRWFjaChtb2RlbFByb3BlcnRpZXMsIGZ1bmN0aW9uKHByb3ApIHtcbiAgICAgICAgICBlbGVtZW50W3Byb3BdID0gdmFsdWVbcHJvcF07XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBib0VsZW1lbnRzO1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgdmFyIGFjdGlvbiA9IHRoaXMuX19hY3Rpb24gfHwge307XG4gICAgICBkZWxldGUgdGhpcy5fX2FjdGlvbjtcblxuICAgICAgaWYgKGFjdGlvbi5pZCA9PT0gJ2RlbGV0ZS1lbGVtZW50Jykge1xuICAgICAgICByZXR1cm4gcmVtb3ZlRWxlbWVudChlbGVtZW50LCBub2RlLCBhY3Rpb24uaWR4KTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGFjdGlvbi5pZCA9PT0gJ2FkZC1lbGVtZW50Jykge1xuICAgICAgICByZXR1cm4gYWRkRWxlbWVudChlbGVtZW50LCBub2RlKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGNhblVwZGF0ZSkge1xuICAgICAgICB2YXIgY29tbWFuZHMgPSBbXSxcbiAgICAgICAgICAgIHZhbHVlc1RvVmFsaWRhdGUgPSB2YWx1ZXM7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnZhbGlkYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFsdWVzVG9WYWxpZGF0ZSA9IGRpZmYoZWxlbWVudCwgbm9kZSwgdmFsdWVzLCBlbGVtZW50cyhlbGVtZW50LCBub2RlKSwgZWRpdGFibGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGZvckVhY2godmFsdWVzVG9WYWxpZGF0ZSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICB2YXIgdmFsaWRhdGlvbkVycm9yLFxuICAgICAgICAgICAgICBpZHggPSB2YWx1ZXMuaW5kZXhPZih2YWx1ZSk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudmFsaWRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25FcnJvciA9IG9wdGlvbnMudmFsaWRhdGUoZWxlbWVudCwgdmFsdWUsIG5vZGUsIGlkeCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF2YWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBjbWQgPSB1cGRhdGVFbGVtZW50KGVsZW1lbnQsIHZhbHVlLCBub2RlLCBpZHgpO1xuXG4gICAgICAgICAgICBpZiAoY21kKSB7XG4gICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goY21kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gY2FjaGUgaW52YWxpZCB2YWx1ZSBpbiBhbiBvYmplY3QgYnkgaW5kZXggYXMga2V5XG4gICAgICAgICAgICBzZWxmLl9faW52YWxpZFZhbHVlcyA9IHNlbGYuX19pbnZhbGlkVmFsdWVzIHx8IHt9O1xuICAgICAgICAgICAgc2VsZi5fX2ludmFsaWRWYWx1ZXNbaWR4XSA9IHZhbHVlO1xuXG4gICAgICAgICAgICAvLyBleGVjdXRlIGEgY29tbWFuZCwgd2hpY2ggZG9lcyBub3QgZG8gYW55dGhpbmdcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwge30pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjb21tYW5kcztcbiAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZUxpc3RFbnRyeVRlbXBsYXRlOiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIHNlbGVjdEJveCkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUlucHV0Um93VGVtcGxhdGUobW9kZWxQcm9wZXJ0aWVzLCBjYW5SZW1vdmUpO1xuICAgIH0sXG5cbiAgICBhZGRFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBldmVudCwgc2NvcGVOb2RlKSB7XG4gICAgICB2YXIgdGVtcGxhdGUgPSBkb21pZnkoY3JlYXRlSW5wdXRSb3dUZW1wbGF0ZShtb2RlbFByb3BlcnRpZXMsIGNhblJlbW92ZSkpO1xuXG4gICAgICB2YXIgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyKG5vZGUpO1xuICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRlbXBsYXRlKTtcblxuICAgICAgdGhpcy5fX2FjdGlvbiA9IHtcbiAgICAgICAgaWQ6ICdhZGQtZWxlbWVudCdcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgICBkZWxldGVFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBldmVudCwgc2NvcGVOb2RlKSB7XG4gICAgICB2YXIgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyKG5vZGUpO1xuICAgICAgdmFyIHJvd1RvRGVsZXRlID0gZXZlbnQuZGVsZWdhdGVUYXJnZXQucGFyZW50Tm9kZTtcbiAgICAgIHZhciBpZHggPSBwYXJzZUludChkb21BdHRyKHJvd1RvRGVsZXRlLCAnZGF0YS1pbmRleCcpLCAxMCk7XG5cbiAgICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChyb3dUb0RlbGV0ZSk7XG5cbiAgICAgIHRoaXMuX19hY3Rpb24gPSB7XG4gICAgICAgIGlkOiAnZGVsZXRlLWVsZW1lbnQnLFxuICAgICAgICBpZHg6IGlkeFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIGVkaXRhYmxlOiBmdW5jdGlvbihlbGVtZW50LCByb3dOb2RlLCBpbnB1dCwgcHJvcCwgdmFsdWUsIGlkeCkge1xuICAgICAgdmFyIGVudHJ5Tm9kZSA9IGRvbUNsb3Nlc3Qocm93Tm9kZSwgJ1tkYXRhLWVudHJ5XScpO1xuICAgICAgcmV0dXJuIGVkaXRhYmxlKGVsZW1lbnQsIGVudHJ5Tm9kZSwgcHJvcCwgaWR4KTtcbiAgICB9LFxuXG4gICAgc2hvdzogZnVuY3Rpb24oZWxlbWVudCwgZW50cnlOb2RlLCBub2RlLCBzY29wZU5vZGUpIHtcbiAgICAgIGVudHJ5Tm9kZSA9IGdldEVudHJ5Tm9kZShlbnRyeU5vZGUpO1xuICAgICAgcmV0dXJuIHNob3coZWxlbWVudCwgZW50cnlOb2RlLCBub2RlLCBzY29wZU5vZGUpO1xuICAgIH0sXG5cbiAgICBzaG93VGFibGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGVudHJ5Tm9kZSwgbm9kZSwgc2NvcGVOb2RlKSB7XG4gICAgICBlbnRyeU5vZGUgPSBnZXRFbnRyeU5vZGUoZW50cnlOb2RlKTtcbiAgICAgIHZhciBlbGVtcyA9IGVsZW1lbnRzKGVsZW1lbnQsIGVudHJ5Tm9kZSk7XG4gICAgICByZXR1cm4gZWxlbXMgJiYgZWxlbXMubGVuZ3RoICYmICghY2FuQmVTaG93biB8fCBzaG93KGVsZW1lbnQsIGVudHJ5Tm9kZSwgbm9kZSwgc2NvcGVOb2RlKSk7XG4gICAgfSxcblxuICAgIHZhbGlkYXRlTGlzdEl0ZW06IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlLCBub2RlLCBpZHgpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy52YWxpZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy52YWxpZGF0ZShlbGVtZW50LCB2YWx1ZSwgbm9kZSwgaWR4KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfTtcblxuICAvLyBVcGRhdGUvc2V0IHRoZSBzZWxlY3Rpb24gb24gdGhlIGNvcnJlY3QgcG9zaXRpb24uXG4gIC8vIEl0J3MgdGhlIHNhbWUgY29kZSBsaWtlIGZvciBhbiBpbnB1dCB2YWx1ZSBpbiB0aGUgUHJvcGVydGllc1BhbmVsLmpzLlxuICBpZiAoc2V0Q29udHJvbFZhbHVlKSB7XG4gICAgZmFjdG9yeS5zZXRDb250cm9sVmFsdWUgPSBmdW5jdGlvbihlbGVtZW50LCByb3dOb2RlLCBpbnB1dCwgcHJvcCwgdmFsdWUsIGlkeCkge1xuICAgICAgdmFyIGVudHJ5Tm9kZSA9IGdldEVudHJ5Tm9kZShyb3dOb2RlKTtcblxuICAgICAgdmFyIGlzUmVhZE9ubHkgPSBkb21BdHRyKGlucHV0LCAncmVhZG9ubHknKTtcbiAgICAgIHZhciBvbGRWYWx1ZSA9IGlucHV0LnZhbHVlO1xuXG4gICAgICB2YXIgc2VsZWN0aW9uO1xuXG4gICAgICAvLyBwcmV2ZW50cyBpbnB1dCBmaWVsZHMgZnJvbSBoYXZpbmcgdGhlIHZhbHVlICd1bmRlZmluZWQnXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgfVxuXG4gICAgICAvLyB3aGVuIHRoZSBhdHRyaWJ1dGUgJ3JlYWRvbmx5JyBleGlzdHMsIGlnbm9yZSB0aGUgY29tcGFyaXNvblxuICAgICAgLy8gd2l0aCAnb2xkVmFsdWUnIGFuZCAndmFsdWUnXG4gICAgICBpZiAoISFpc1JlYWRPbmx5ICYmIG9sZFZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSBzZWxlY3Rpb24gb24gdW5kby9yZWRvXG4gICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gaW5wdXQpIHtcbiAgICAgICAgc2VsZWN0aW9uID0gdXBkYXRlU2VsZWN0aW9uKGdldFNlbGVjdGlvbihpbnB1dCksIG9sZFZhbHVlLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHNldENvbnRyb2xWYWx1ZShlbGVtZW50LCBlbnRyeU5vZGUsIGlucHV0LCBwcm9wLCB2YWx1ZSwgaWR4KTtcblxuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICBzZXRTZWxlY3Rpb24oaW5wdXQsIHNlbGVjdGlvbik7XG4gICAgICB9XG5cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZhY3Rvcnk7XG5cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlc2NhcGVIVE1MID0gcmVxdWlyZSgnLi4vVXRpbHMnKS5lc2NhcGVIVE1MO1xuXG52YXIgZW50cnlGaWVsZERlc2NyaXB0aW9uID0gcmVxdWlyZSgnLi9FbnRyeUZpZWxkRGVzY3JpcHRpb24nKTtcblxuXG52YXIgdGV4dEJveCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGRlZmF1bHRQYXJhbWV0ZXJzKSB7XG5cbiAgdmFyIHJlc291cmNlID0gZGVmYXVsdFBhcmFtZXRlcnMsXG4gICAgICBsYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwgcmVzb3VyY2UuaWQsXG4gICAgICBjYW5CZVNob3duID0gISFvcHRpb25zLnNob3cgJiYgdHlwZW9mIG9wdGlvbnMuc2hvdyA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgIGRlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbjtcblxuICByZXNvdXJjZS5odG1sID1cbiAgICAnPGxhYmVsIGZvcj1cImFjdGl2aXRpLScgKyBlc2NhcGVIVE1MKHJlc291cmNlLmlkKSArICdcIiAnICtcbiAgICAoY2FuQmVTaG93biA/ICdkYXRhLXNob3c9XCJpc1Nob3duXCInIDogJycpICtcbiAgICAnPicgKyBsYWJlbCArICc8L2xhYmVsPicgK1xuICAgICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLXdyYXBwZXJcIiAnICtcbiAgICAoY2FuQmVTaG93biA/ICdkYXRhLXNob3c9XCJpc1Nob3duXCInIDogJycpICtcbiAgICAnPicgK1xuICAgICAgJzxkaXYgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiIGlkPVwiYWN0aXZpdGktJyArIGVzY2FwZUhUTUwocmVzb3VyY2UuaWQpICsgJ1wiICcgK1xuICAgICAgICAgICAgJ25hbWU9XCInICsgZXNjYXBlSFRNTChvcHRpb25zLm1vZGVsUHJvcGVydHkpICsgJ1wiIC8+JyArXG4gICAgJzwvZGl2Pic7XG5cbiAgLy8gYWRkIGRlc2NyaXB0aW9uIGJlbG93IHRleHQgYm94IGVudHJ5IGZpZWxkXG4gIGlmIChkZXNjcmlwdGlvbikge1xuICAgIHJlc291cmNlLmh0bWwgKz0gZW50cnlGaWVsZERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGlmIChjYW5CZVNob3duKSB7XG4gICAgcmVzb3VyY2UuaXNTaG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuc2hvdy5hcHBseShyZXNvdXJjZSwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG5cbiAgcmVzb3VyY2UuY3NzQ2xhc3NlcyA9IFsnYnBwLXRleHRib3gnXTtcblxuICByZXR1cm4gcmVzb3VyY2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHRleHRCb3g7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlc2NhcGVIVE1MID0gcmVxdWlyZSgnLi4vVXRpbHMnKS5lc2NhcGVIVE1MO1xuXG52YXIgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnk7XG5cbnZhciBlbnRyeUZpZWxkRGVzY3JpcHRpb24gPSByZXF1aXJlKCcuL0VudHJ5RmllbGREZXNjcmlwdGlvbicpO1xuXG5cbnZhciB0ZXh0RmllbGQgPSBmdW5jdGlvbihvcHRpb25zLCBkZWZhdWx0UGFyYW1ldGVycykge1xuXG4gIC8vIERlZmF1bHQgYWN0aW9uIGZvciB0aGUgYnV0dG9uIG5leHQgdG8gdGhlIGlucHV0LWZpZWxkXG4gIHZhciBkZWZhdWx0QnV0dG9uQWN0aW9uID0gZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlKSB7XG4gICAgdmFyIGlucHV0ID0gZG9tUXVlcnkoJ2lucHV0W25hbWU9XCInICsgb3B0aW9ucy5tb2RlbFByb3BlcnR5ICsgJ1wiXScsIGlucHV0Tm9kZSk7XG4gICAgaW5wdXQudmFsdWUgPSAnJztcblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIGRlZmF1bHQgbWV0aG9kIHRvIGRldGVybWluZSBpZiB0aGUgYnV0dG9uIHNob3VsZCBiZSB2aXNpYmxlXG4gIHZhciBkZWZhdWx0QnV0dG9uU2hvdyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSkge1xuICAgIHZhciBpbnB1dCA9IGRvbVF1ZXJ5KCdpbnB1dFtuYW1lPVwiJyArIG9wdGlvbnMubW9kZWxQcm9wZXJ0eSArICdcIl0nLCBpbnB1dE5vZGUpO1xuXG4gICAgcmV0dXJuIGlucHV0LnZhbHVlICE9PSAnJztcbiAgfTtcblxuXG4gIHZhciByZXNvdXJjZSA9IGRlZmF1bHRQYXJhbWV0ZXJzLFxuICAgICAgbGFiZWwgPSBvcHRpb25zLmxhYmVsIHx8IHJlc291cmNlLmlkLFxuICAgICAgZGF0YVZhbHVlTGFiZWwgPSBvcHRpb25zLmRhdGFWYWx1ZUxhYmVsLFxuICAgICAgYnV0dG9uTGFiZWwgPSAob3B0aW9ucy5idXR0b25MYWJlbCB8fCAnWCcpLFxuICAgICAgYWN0aW9uTmFtZSA9ICh0eXBlb2Ygb3B0aW9ucy5idXR0b25BY3Rpb24gIT0gJ3VuZGVmaW5lZCcpID8gb3B0aW9ucy5idXR0b25BY3Rpb24ubmFtZSA6ICdjbGVhcicsXG4gICAgICBhY3Rpb25NZXRob2QgPSAodHlwZW9mIG9wdGlvbnMuYnV0dG9uQWN0aW9uICE9ICd1bmRlZmluZWQnKSA/IG9wdGlvbnMuYnV0dG9uQWN0aW9uLm1ldGhvZCA6IGRlZmF1bHRCdXR0b25BY3Rpb24sXG4gICAgICBzaG93TmFtZSA9ICh0eXBlb2Ygb3B0aW9ucy5idXR0b25TaG93ICE9ICd1bmRlZmluZWQnKSA/IG9wdGlvbnMuYnV0dG9uU2hvdy5uYW1lIDogJ2NhbkNsZWFyJyxcbiAgICAgIHNob3dNZXRob2QgPSAodHlwZW9mIG9wdGlvbnMuYnV0dG9uU2hvdyAhPSAndW5kZWZpbmVkJykgPyBvcHRpb25zLmJ1dHRvblNob3cubWV0aG9kIDogZGVmYXVsdEJ1dHRvblNob3csXG4gICAgICBjYW5CZURpc2FibGVkID0gISFvcHRpb25zLmRpc2FibGVkICYmIHR5cGVvZiBvcHRpb25zLmRpc2FibGVkID09PSAnZnVuY3Rpb24nLFxuICAgICAgY2FuQmVIaWRkZW4gPSAhIW9wdGlvbnMuaGlkZGVuICYmIHR5cGVvZiBvcHRpb25zLmhpZGRlbiA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgIGRlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbjtcblxuICByZXNvdXJjZS5odG1sID1cbiAgICAnPGxhYmVsIGZvcj1cImFjdGl2aXRpLScgKyBlc2NhcGVIVE1MKHJlc291cmNlLmlkKSArICdcIiAnICtcbiAgICAgIChjYW5CZURpc2FibGVkID8gJ2RhdGEtZGlzYWJsZT1cImlzRGlzYWJsZWRcIiAnIDogJycpICtcbiAgICAgIChjYW5CZUhpZGRlbiA/ICdkYXRhLXNob3c9XCJpc0hpZGRlblwiICcgOiAnJykgK1xuICAgICAgKGRhdGFWYWx1ZUxhYmVsID8gJ2RhdGEtdmFsdWU9XCInICsgZXNjYXBlSFRNTChkYXRhVmFsdWVMYWJlbCkgKyAnXCInIDogJycpICsgJz4nKyBlc2NhcGVIVE1MKGxhYmVsKSArJzwvbGFiZWw+JyArXG4gICAgJzxkaXYgY2xhc3M9XCJicHAtZmllbGQtd3JhcHBlclwiICcgK1xuICAgICAgKGNhbkJlRGlzYWJsZWQgPyAnZGF0YS1kaXNhYmxlPVwiaXNEaXNhYmxlZFwiJyA6ICcnKSArXG4gICAgICAoY2FuQmVIaWRkZW4gPyAnZGF0YS1zaG93PVwiaXNIaWRkZW5cIicgOiAnJykgK1xuICAgICAgJz4nICtcbiAgICAgICc8aW5wdXQgaWQ9XCJhY3Rpdml0aS0nICsgZXNjYXBlSFRNTChyZXNvdXJjZS5pZCkgKyAnXCIgdHlwZT1cInRleHRcIiBuYW1lPVwiJyArIGVzY2FwZUhUTUwob3B0aW9ucy5tb2RlbFByb3BlcnR5KSArICdcIiAnICtcbiAgICAgICAgKGNhbkJlRGlzYWJsZWQgPyAnZGF0YS1kaXNhYmxlPVwiaXNEaXNhYmxlZFwiJyA6ICcnKSArXG4gICAgICAgIChjYW5CZUhpZGRlbiA/ICdkYXRhLXNob3c9XCJpc0hpZGRlblwiJyA6ICcnKSArXG4gICAgICAgICcgLz4nICtcbiAgICAgICc8YnV0dG9uIGNsYXNzPVwiJyArIGVzY2FwZUhUTUwoYWN0aW9uTmFtZSkgKyAnXCIgZGF0YS1hY3Rpb249XCInICsgZXNjYXBlSFRNTChhY3Rpb25OYW1lKSArICdcIiBkYXRhLXNob3c9XCInICsgZXNjYXBlSFRNTChzaG93TmFtZSkgKyAnXCIgJyArXG4gICAgICAgIChjYW5CZURpc2FibGVkID8gJ2RhdGEtZGlzYWJsZT1cImlzRGlzYWJsZWRcIicgOiAnJykgK1xuICAgICAgICAoY2FuQmVIaWRkZW4gPyAnIGRhdGEtc2hvdz1cImlzSGlkZGVuXCInIDogJycpICsgJz4nICtcbiAgICAgICAgJzxzcGFuPicgKyBlc2NhcGVIVE1MKGJ1dHRvbkxhYmVsKSArICc8L3NwYW4+JyArXG4gICAgICAnPC9idXR0b24+JyArXG4gICAgJzwvZGl2Pic7XG5cbiAgLy8gYWRkIGRlc2NyaXB0aW9uIGJlbG93IHRleHQgaW5wdXQgZW50cnkgZmllbGRcbiAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgcmVzb3VyY2UuaHRtbCArPSBlbnRyeUZpZWxkRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgcmVzb3VyY2VbYWN0aW9uTmFtZV0gPSBhY3Rpb25NZXRob2Q7XG4gIHJlc291cmNlW3Nob3dOYW1lXSA9IHNob3dNZXRob2Q7XG5cbiAgaWYgKGNhbkJlRGlzYWJsZWQpIHtcbiAgICByZXNvdXJjZS5pc0Rpc2FibGVkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5kaXNhYmxlZC5hcHBseShyZXNvdXJjZSwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKGNhbkJlSGlkZGVuKSB7XG4gICAgcmVzb3VyY2UuaXNIaWRkZW4gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhb3B0aW9ucy5oaWRkZW4uYXBwbHkocmVzb3VyY2UsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIHJlc291cmNlLmNzc0NsYXNzZXMgPSBbJ2JwcC10ZXh0ZmllbGQnXTtcblxuICByZXR1cm4gcmVzb3VyY2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHRleHRGaWVsZDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRleHRGaWVsZCA9IHJlcXVpcmUoJy4vVGV4dElucHV0RW50cnlGYWN0b3J5Jyk7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBhIHdyYXBwZXIgYXJvdW5kIFRleHRJbnB1dEVudHJ5RmFjdG9yeS5cbiAqIEl0IGFkZHMgZnVuY3Rpb25hbGl0eSB0byBjYWNoZSBhbiBpbnZhbGlkIHZhbHVlIGVudGVyZWQgaW4gdGhlXG4gKiB0ZXh0IGlucHV0LCBpbnN0ZWFkIG9mIHNldHRpbmcgaXQgb24gdGhlIGJ1c2luZXNzIG9iamVjdC5cbiAqL1xudmFyIHZhbGlkYXRpb25Bd2FyZVRleHRGaWVsZCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGRlZmF1bHRQYXJhbWV0ZXJzKSB7XG5cbiAgdmFyIG1vZGVsUHJvcGVydHkgPSBvcHRpb25zLm1vZGVsUHJvcGVydHk7XG5cbiAgZGVmYXVsdFBhcmFtZXRlcnMuZ2V0ID0gZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuX19sYXN0SW52YWxpZFZhbHVlO1xuXG4gICAgZGVsZXRlIHRoaXMuX19sYXN0SW52YWxpZFZhbHVlO1xuXG4gICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcblxuICAgIHByb3BlcnRpZXNbbW9kZWxQcm9wZXJ0eV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBvcHRpb25zLmdldFByb3BlcnR5KGVsZW1lbnQsIG5vZGUpO1xuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH07XG5cbiAgZGVmYXVsdFBhcmFtZXRlcnMuc2V0ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgdmFyIHZhbGlkYXRpb25FcnJvcnMgPSB2YWxpZGF0ZS5hcHBseSh0aGlzLCBbIGVsZW1lbnQsIHZhbHVlcywgbm9kZSBdKSxcbiAgICAgICAgcHJvcGVydHlWYWx1ZSA9IHZhbHVlc1ttb2RlbFByb3BlcnR5XTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBkbyBub3QgdXBkYXRlIHRoZSBpZFxuICAgIGlmICh2YWxpZGF0aW9uRXJyb3JzICYmIHZhbGlkYXRpb25FcnJvcnNbbW9kZWxQcm9wZXJ0eV0pIHtcbiAgICAgIHRoaXMuX19sYXN0SW52YWxpZFZhbHVlID0gcHJvcGVydHlWYWx1ZTtcblxuICAgICAgcmV0dXJuIG9wdGlvbnMuc2V0UHJvcGVydHkoZWxlbWVudCwge30sIG5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICBwcm9wZXJ0aWVzW21vZGVsUHJvcGVydHldID0gcHJvcGVydHlWYWx1ZTtcblxuICAgICAgcmV0dXJuIG9wdGlvbnMuc2V0UHJvcGVydHkoZWxlbWVudCwgcHJvcGVydGllcywgbm9kZSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciB2YWxpZGF0ZSA9IGRlZmF1bHRQYXJhbWV0ZXJzLnZhbGlkYXRlID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgdmFyIHZhbHVlID0gdmFsdWVzW21vZGVsUHJvcGVydHldIHx8IHRoaXMuX19sYXN0SW52YWxpZFZhbHVlO1xuXG4gICAgdmFyIHByb3BlcnR5ID0ge307XG4gICAgcHJvcGVydHlbbW9kZWxQcm9wZXJ0eV0gPSB2YWx1ZTtcblxuICAgIHJldHVybiBvcHRpb25zLnZhbGlkYXRlKGVsZW1lbnQsIHByb3BlcnR5LCBub2RlKTtcbiAgfTtcblxuICByZXR1cm4gdGV4dEZpZWxkKG9wdGlvbnMsIGRlZmF1bHRQYXJhbWV0ZXJzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gdmFsaWRhdGlvbkF3YXJlVGV4dEZpZWxkO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgbWFwID0gcmVxdWlyZSgnbG9kYXNoL21hcCcpO1xuXG52YXIgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIgPSByZXF1aXJlKCcuL0V4dGVuc2lvbkVsZW1lbnRzSGVscGVyJyk7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBhdHRyaWJ1dGUgJ2FjdGl2aXRpOmFzeW5jQmVmb3JlJyBpcyBzZXRcbiAqIHRvIHRydWUuXG4gKlxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gYm9cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcbiAqL1xuZnVuY3Rpb24gaXNBc3luY0JlZm9yZShibykge1xuICByZXR1cm4gISEoYm8uZ2V0KCdhY3Rpdml0aTphc3luY0JlZm9yZScpIHx8IGJvLmdldCgnYWN0aXZpdGk6YXN5bmMnKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmlzQXN5bmNCZWZvcmUgPSBpc0FzeW5jQmVmb3JlO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXR0cmlidXRlICdhY3Rpdml0aTphc3luY0FmdGVyJyBpcyBzZXRcbiAqIHRvIHRydWUuXG4gKlxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gYm9cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcbiAqL1xuZnVuY3Rpb24gaXNBc3luY0FmdGVyKGJvKSB7XG4gIHJldHVybiAhIWJvLmdldCgnYWN0aXZpdGk6YXN5bmNBZnRlcicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5pc0FzeW5jQWZ0ZXIgPSBpc0FzeW5jQWZ0ZXI7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBhdHRyaWJ1dGUgJ2FjdGl2aXRpOmV4Y2x1c2l2ZScgaXMgc2V0XG4gKiB0byB0cnVlLlxuICpcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IGJvXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gYSBib29sZWFuIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzRXhjbHVzaXZlKGJvKSB7XG4gIHJldHVybiAhIWJvLmdldCgnYWN0aXZpdGk6ZXhjbHVzaXZlJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmlzRXhjbHVzaXZlID0gaXNFeGNsdXNpdmU7XG5cbi8qKlxuICogR2V0IGZpcnN0ICdhY3Rpdml0aTpGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZScgZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IGJvXG4gKlxuICogQHJldHVybiB7QXJyYXk8TW9kZGxlRWxlbWVudD59IGEgbGlzdCBvZiAnYWN0aXZpdGk6RmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUnXG4gKi9cbmZ1bmN0aW9uIGdldEZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGJvKSB7XG4gIHJldHVybiAoZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sICdhY3Rpdml0aTpGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZScpIHx8IFtdKVswXTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZ2V0RmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUgPSBnZXRGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBleGlzdGluZyAnYWN0aXZpdGk6RmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUnIGZyb20gdGhlIGJ1c2luZXNzIG9iamVjdFxuICpcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IGJvXG4gKlxuICogQHJldHVybiB7QXJyYXk8TW9kZGxlRWxlbWVudD59IGEgbGlzdCBvZiAnYWN0aXZpdGk6RmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUnXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGJvLCBlbGVtZW50KSB7XG4gIHZhciByZXRyeVRpbWVDeWNsZXMgPSBleHRlbnNpb25FbGVtZW50c0hlbHBlci5nZXRFeHRlbnNpb25FbGVtZW50cyhibywgJ2FjdGl2aXRpOkZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlJyk7XG4gIHJldHVybiBtYXAocmV0cnlUaW1lQ3ljbGVzLCBmdW5jdGlvbihjeWNsZSkge1xuICAgIHJldHVybiBleHRlbnNpb25FbGVtZW50c0hlbHBlci5yZW1vdmVFbnRyeShibywgZWxlbWVudCwgY3ljbGUpO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMucmVtb3ZlRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUgPSByZW1vdmVGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciBjb2xsZWN0aW9uQWRkID0gcmVxdWlyZSgnZGlhZ3JhbS1qcy9saWIvdXRpbC9Db2xsZWN0aW9ucycpLmFkZCxcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XG5cbnZhciBDYXRlZ29yeUhlbHBlciA9IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhdGVnb3J5SGVscGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgYnBtbjpDYXRlZ29yeVZhbHVlIGluc2lkZSBhIG5ldyBicG1uOkNhdGVnb3J5XG4gKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBkZWZpbml0aW9uc1xuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSBjYXRlZ29yeVZhbHVlLlxuICovXG5DYXRlZ29yeUhlbHBlci5jcmVhdGVDYXRlZ29yeVZhbHVlID0gZnVuY3Rpb24oZGVmaW5pdGlvbnMsIGJwbW5GYWN0b3J5KSB7XG4gIHZhciBjYXRlZ29yeVZhbHVlID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkNhdGVnb3J5VmFsdWUnKSxcbiAgICAgIGNhdGVnb3J5ID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkNhdGVnb3J5Jywge1xuICAgICAgICBjYXRlZ29yeVZhbHVlOiBbIGNhdGVnb3J5VmFsdWUgXVxuICAgICAgfSk7XG5cbiAgLy8gYWRkIHRvIGNvcnJlY3QgcGxhY2VcbiAgY29sbGVjdGlvbkFkZChkZWZpbml0aW9ucy5nZXQoJ3Jvb3RFbGVtZW50cycpLCBjYXRlZ29yeSk7XG4gIGdldEJ1c2luZXNzT2JqZWN0KGNhdGVnb3J5KS4kcGFyZW50ID0gZGVmaW5pdGlvbnM7XG4gIGdldEJ1c2luZXNzT2JqZWN0KGNhdGVnb3J5VmFsdWUpLiRwYXJlbnQgPSBjYXRlZ29yeTtcblxuICByZXR1cm4gY2F0ZWdvcnlWYWx1ZTtcblxufTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciBDbWRIZWxwZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ21kSGVscGVyO1xuXG5DbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyA9IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIHtcbiAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLFxuICAgIGNvbnRleHQ6IHsgZWxlbWVudDogZWxlbWVudCwgcHJvcGVydGllczogcHJvcGVydGllcyB9XG4gIH07XG59O1xuXG5DbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QgPSBmdW5jdGlvbihlbGVtZW50LCBidXNpbmVzc09iamVjdCwgbmV3UHJvcGVydGllcykge1xuICByZXR1cm4ge1xuICAgIGNtZDogJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0JyxcbiAgICBjb250ZXh0OiB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgYnVzaW5lc3NPYmplY3Q6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgcHJvcGVydGllczogbmV3UHJvcGVydGllc1xuICAgIH1cbiAgfTtcbn07XG5cbkNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJ1c2luZXNzT2JqZWN0LCBsaXN0UHJvcGVydHlOYW1lLCBvYmplY3RzVG9BZGQpIHtcbiAgcmV0dXJuIHtcbiAgICBjbWQ6ICdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0JyxcbiAgICBjb250ZXh0OiB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgY3VycmVudE9iamVjdDogYnVzaW5lc3NPYmplY3QsXG4gICAgICBwcm9wZXJ0eU5hbWU6IGxpc3RQcm9wZXJ0eU5hbWUsXG4gICAgICBvYmplY3RzVG9BZGQ6IG9iamVjdHNUb0FkZFxuICAgIH1cbiAgfTtcbn07XG5cbkNtZEhlbHBlci5yZW1vdmVFbGVtZW50c0Zyb21MaXN0ID0gZnVuY3Rpb24oZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIGxpc3RQcm9wZXJ0eU5hbWUsIHJlZmVyZW5jZVByb3BlcnR5TmFtZSwgb2JqZWN0c1RvUmVtb3ZlKSB7XG5cbiAgcmV0dXJuIHtcbiAgICBjbWQ6ICdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0JyxcbiAgICBjb250ZXh0OiB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgY3VycmVudE9iamVjdDogYnVzaW5lc3NPYmplY3QsXG4gICAgICBwcm9wZXJ0eU5hbWU6IGxpc3RQcm9wZXJ0eU5hbWUsXG4gICAgICByZWZlcmVuY2VQcm9wZXJ0eU5hbWU6IHJlZmVyZW5jZVByb3BlcnR5TmFtZSxcbiAgICAgIG9iamVjdHNUb1JlbW92ZTogb2JqZWN0c1RvUmVtb3ZlXG4gICAgfVxuICB9O1xufTtcblxuXG5DbWRIZWxwZXIuYWRkQW5kUmVtb3ZlRWxlbWVudHNGcm9tTGlzdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJ1c2luZXNzT2JqZWN0LCBsaXN0UHJvcGVydHlOYW1lLCByZWZlcmVuY2VQcm9wZXJ0eU5hbWUsIG9iamVjdHNUb0FkZCwgb2JqZWN0c1RvUmVtb3ZlKSB7XG5cbiAgcmV0dXJuIHtcbiAgICBjbWQ6ICdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0JyxcbiAgICBjb250ZXh0OiB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgY3VycmVudE9iamVjdDogYnVzaW5lc3NPYmplY3QsXG4gICAgICBwcm9wZXJ0eU5hbWU6IGxpc3RQcm9wZXJ0eU5hbWUsXG4gICAgICByZWZlcmVuY2VQcm9wZXJ0eU5hbWU6IHJlZmVyZW5jZVByb3BlcnR5TmFtZSxcbiAgICAgIG9iamVjdHNUb0FkZDogb2JqZWN0c1RvQWRkLFxuICAgICAgb2JqZWN0c1RvUmVtb3ZlOiBvYmplY3RzVG9SZW1vdmVcbiAgICB9XG4gIH07XG59O1xuXG5cbkNtZEhlbHBlci5zZXRMaXN0ID0gZnVuY3Rpb24oZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIGxpc3RQcm9wZXJ0eU5hbWUsIHVwZGF0ZWRPYmplY3RMaXN0KSB7XG4gIHJldHVybiB7XG4gICAgY21kOiAncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QtbGlzdCcsXG4gICAgY29udGV4dDoge1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIGN1cnJlbnRPYmplY3Q6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgcHJvcGVydHlOYW1lOiBsaXN0UHJvcGVydHlOYW1lLFxuICAgICAgdXBkYXRlZE9iamVjdExpc3Q6IHVwZGF0ZWRPYmplY3RMaXN0XG4gICAgfVxuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXG4gICAgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XG5cbnZhciBFdmVudERlZmluaXRpb25IZWxwZXIgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudERlZmluaXRpb25IZWxwZXI7XG5cbkV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRFdmVudERlZmluaXRpb24gPSBmdW5jdGlvbihlbGVtZW50LCBldmVudFR5cGUpIHtcblxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICAgIGV2ZW50RGVmaW5pdGlvbiA9IG51bGw7XG5cbiAgaWYgKGJvLmV2ZW50RGVmaW5pdGlvbnMpIHtcbiAgICBmb3JFYWNoKGJvLmV2ZW50RGVmaW5pdGlvbnMsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBpZiAoaXMoZXZlbnQsIGV2ZW50VHlwZSkpIHtcbiAgICAgICAgZXZlbnREZWZpbml0aW9uID0gZXZlbnQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZXZlbnREZWZpbml0aW9uO1xufTtcblxuRXZlbnREZWZpbml0aW9uSGVscGVyLmdldFRpbWVyRXZlbnREZWZpbml0aW9uID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gdGhpcy5nZXRFdmVudERlZmluaXRpb24oZWxlbWVudCwgJ2JwbW46VGltZXJFdmVudERlZmluaXRpb24nKTtcbn07XG5cbkV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRNZXNzYWdlRXZlbnREZWZpbml0aW9uID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gdGhpcy5nZXRFdmVudERlZmluaXRpb24oZWxlbWVudCwgJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicpO1xufTtcblxuRXZlbnREZWZpbml0aW9uSGVscGVyLmdldFNpZ25hbEV2ZW50RGVmaW5pdGlvbiA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0RXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicpO1xufTtcblxuRXZlbnREZWZpbml0aW9uSGVscGVyLmdldEVycm9yRXZlbnREZWZpbml0aW9uID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gdGhpcy5nZXRFdmVudERlZmluaXRpb24oZWxlbWVudCwgJ2JwbW46RXJyb3JFdmVudERlZmluaXRpb24nKTtcbn07XG5cbkV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gdGhpcy5nZXRFdmVudERlZmluaXRpb24oZWxlbWVudCwgJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbicpO1xufTtcblxuRXZlbnREZWZpbml0aW9uSGVscGVyLmdldENvbXBlbnNhdGVFdmVudERlZmluaXRpb24gPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiB0aGlzLmdldEV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJyk7XG59O1xuXG5FdmVudERlZmluaXRpb25IZWxwZXIuZ2V0TGlua0V2ZW50RGVmaW5pdGlvbiA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0RXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nKTtcbn07XG5cbkV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbiA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0RXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY21kSGVscGVyID0gcmVxdWlyZSgnLi9DbWRIZWxwZXInKSxcbiAgICBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi9FbGVtZW50SGVscGVyJyk7XG5cbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XG5cbnZhciBFeHRlbnNpb25FbGVtZW50c0hlbHBlciA9IHt9O1xuXG52YXIgZ2V0RXh0ZW5zaW9uRWxlbWVudHMgPSBmdW5jdGlvbihibykge1xuICByZXR1cm4gYm8uZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xufTtcblxuRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMgPSBmdW5jdGlvbihibywgdHlwZSkge1xuICB2YXIgZXh0ZW5zaW9uRWxlbWVudHMgPSBnZXRFeHRlbnNpb25FbGVtZW50cyhibyk7XG4gIGlmICh0eXBlb2YgZXh0ZW5zaW9uRWxlbWVudHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIGV4dGVuc2lvblZhbHVlcyA9IGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyk7XG4gICAgaWYgKHR5cGVvZiBleHRlbnNpb25WYWx1ZXMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgZWxlbWVudHMgPSBleHRlbnNpb25WYWx1ZXMuZmlsdGVyKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpcyh2YWx1ZSwgdHlwZSk7XG4gICAgICB9KTtcbiAgICAgIGlmIChlbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIuYWRkRW50cnkgPSBmdW5jdGlvbihibywgZWxlbWVudCwgZW50cnksIGJwbW5GYWN0b3J5KSB7XG4gIHZhciBleHRlbnNpb25FbGVtZW50cyA9IGJvLmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcblxuICAvLyBpZiB0aGVyZSBpcyBubyBleHRlbnNpb25FbGVtZW50cyBsaXN0LCBjcmVhdGUgb25lXG4gIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICAvLyBUT0RPOiBBc2sgRGFuaWVsIHdoaWNoIG9wZXJhdGlvbiBjb3N0cyBtb3JlXG4gICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7IHZhbHVlczogW2VudHJ5XSB9LCBibywgYnBtbkZhY3RvcnkpO1xuICAgIHJldHVybiB7IGV4dGVuc2lvbkVsZW1lbnRzIDogZXh0ZW5zaW9uRWxlbWVudHMgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBhZGQgbmV3IGZhaWxlZEpvYlJldHJ5RXh0ZW5zaW9uRWxlbWVudCB0byBleGlzdGluZyBleHRlbnNpb25FbGVtZW50cyBsaXN0XG4gICAgcmV0dXJuIGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgJ3ZhbHVlcycsIFtlbnRyeV0pO1xuICB9XG59O1xuXG5FeHRlbnNpb25FbGVtZW50c0hlbHBlci5yZW1vdmVFbnRyeSA9IGZ1bmN0aW9uKGJvLCBlbGVtZW50LCBlbnRyeSkge1xuICB2YXIgZXh0ZW5zaW9uRWxlbWVudHMgPSBiby5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG5cbiAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuXG4gICAgLy8gcmV0dXJuIGFuIGVtcHR5IGNvbW1hbmQgd2hlbiB0aGVyZSBpcyBubyBleHRlbnNpb25FbGVtZW50cyBsaXN0XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIGNtZEhlbHBlci5yZW1vdmVFbGVtZW50c0Zyb21MaXN0KGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCAndmFsdWVzJywgJ2V4dGVuc2lvbkVsZW1lbnRzJywgW2VudHJ5XSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV4dGVuc2lvbkVsZW1lbnRzSGVscGVyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxuICAgIGdldEV4dGVuc2lvbkVsZW1lbnRzID0gcmVxdWlyZSgnLi9FeHRlbnNpb25FbGVtZW50c0hlbHBlcicpLmdldEV4dGVuc2lvbkVsZW1lbnRzO1xuXG52YXIgRm9ybUhlbHBlciA9IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZvcm1IZWxwZXI7XG5cbi8qKlxuICogUmV0dXJuIGZvcm0gZGF0YSBmcm9tIGJ1c2luZXNzIG9iamVjdCBvciB1bmRlZmluZWQgaWYgbm9uZSBleGlzdFxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudHx1bmRlZmluZWR9IGZvcm1EYXRhXG4gKlxuICog5q2k5pa55rOV5bqf5byDXG4gKlxuICovXG5Gb3JtSGVscGVyLmdldEZvcm1EYXRhID0gZnVuY3Rpb24oZWxlbWVudCkge1xuIC8qIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIHZhciBmb3JtRmllbGRzID0gZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sICdhY3Rpdml0aTpGb3JtUHJvcGVydHknKTtcblxuICB2YXIgZm9ybURhdGEgPSB7fVxuXG4gIGlmICh0eXBlb2YgZm9ybURhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZvcm1EYXRhWzBdO1xuICB9Ki9cbiByZXR1cm4ge307XG59O1xuXG5cbi8qKlxuICogUmV0dXJuIGFsbCBmb3JtIGZpZWxkcyBleGlzdGluZyBpbiB0aGUgYnVzaW5lc3Mgb2JqZWN0LCBhbmRcbiAqIGFuIGVtcHR5IGFycmF5IGlmIG5vbmUgZXhpc3QuXG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheX0gYSBsaXN0IG9mIGZvcm0gZmllbGQgb2JqZWN0c1xuICovXG5Gb3JtSGVscGVyLmdldEZvcm1GaWVsZHMgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgLyoq55u05o6l6I635Y+WIEV4dGVuc2lvbkVsZW1lbnRz55qEIGFjdGl2aXRpOkZvcm1Qcm9wZXJ0eeWFg+e0oCovXG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIHZhciBmb3JtRmllbGRzID0gZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sICdhY3Rpdml0aTpGb3JtUHJvcGVydHknKTtcblxuICByZXR1cm4gZm9ybUZpZWxkcyB8fCBbXTtcbn07XG5cblxuLyoqXG4gKiBHZXQgYSBmb3JtIGZpZWxkIGZyb20gdGhlIGJ1c2luZXNzIG9iamVjdCBhdCBnaXZlbiBpbmRleFxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSB0aGUgZm9ybSBmaWVsZFxuICovXG5Gb3JtSGVscGVyLmdldEZvcm1GaWVsZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGlkeCkge1xuXG4gIHZhciBmb3JtRmllbGRzID0gdGhpcy5nZXRGb3JtRmllbGRzKGVsZW1lbnQpO1xuXG4gIHJldHVybiBmb3JtRmllbGRzW2lkeF07XG59O1xuXG5cbi8qKlxuICogR2V0IGFsbCBjb25zdHJhaW50cyBmb3IgYSBzcGVjaWZpYyBmb3JtIGZpZWxkIGZyb20gdGhlIGJ1c2luZXNzIG9iamVjdFxuICpcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IGZvcm1GaWVsZFxuICpcbiAqIEByZXR1cm4ge0FycmF5PE1vZGRsZUVsZW1lbnQ+fSBhIGxpc3Qgb2YgY29uc3RyYWludCBvYmplY3RzXG4gKi9cbkZvcm1IZWxwZXIuZ2V0Q29uc3RyYWludHMgPSBmdW5jdGlvbihmb3JtRmllbGQpIHtcbiAgaWYgKGZvcm1GaWVsZCAmJiBmb3JtRmllbGQudmFsaWRhdGlvbiAmJiBmb3JtRmllbGQudmFsaWRhdGlvbi5jb25zdHJhaW50cykge1xuICAgIHJldHVybiBmb3JtRmllbGQudmFsaWRhdGlvbi5jb25zdHJhaW50cztcbiAgfVxuICByZXR1cm4gW107XG59O1xuXG5cbi8qKlxuICogR2V0IGFsbCBhY3Rpdml0aTp2YWx1ZSBvYmplY3RzIGZvciBhIHNwZWNpZmljIGZvcm0gZmllbGQgZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0XG4gKlxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gZm9ybUZpZWxkXG4gKlxuICogQHJldHVybiB7QXJyYXk8TW9kZGxlRWxlbWVudD59IGEgbGlzdCBvZiBhY3Rpdml0aTp2YWx1ZSBvYmplY3RzXG4gKi9cbkZvcm1IZWxwZXIuZ2V0RW51bVZhbHVlcyA9IGZ1bmN0aW9uKGZvcm1GaWVsZCkge1xuICBpZiAoZm9ybUZpZWxkICYmIGZvcm1GaWVsZC52YWx1ZXMpIHtcbiAgICByZXR1cm4gZm9ybUZpZWxkLnZhbHVlcztcbiAgfVxuICByZXR1cm4gW107XG59O1xuXG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBNb2RlbFV0aWwgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLFxuICAgIGlzID0gTW9kZWxVdGlsLmlzLFxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gTW9kZWxVdGlsLmdldEJ1c2luZXNzT2JqZWN0O1xuXG52YXIgZXZlbnREZWZpbml0aW9uSGVscGVyID0gcmVxdWlyZSgnLi9FdmVudERlZmluaXRpb25IZWxwZXInKTtcbnZhciBleHRlbnNpb25zRWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4vRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKTtcblxudmFyIEltcGxlbWVudGF0aW9uVHlwZUhlbHBlciA9IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEltcGxlbWVudGF0aW9uVHlwZUhlbHBlcjtcblxuLyoqXG4gKiBSZXR1cm5zICd0cnVlJyBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyAnYWN0aXZpdGk6U2VydmljZVRhc2tMaWtlJ1xuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcbiAqL1xuSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzU2VydmljZVRhc2tMaWtlID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2FjdGl2aXRpOlNlcnZpY2VUYXNrTGlrZScpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zICd0cnVlJyBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyAnYWN0aXZpdGk6RG1uQ2FwYWJsZSdcbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gYSBib29sZWFuIHZhbHVlXG4gKi9cbkltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5pc0RtbkNhcGFibGUgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYWN0aXZpdGk6RG1uQ2FwYWJsZScpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zICd0cnVlJyBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyAnYWN0aXZpdGk6RXh0ZXJuYWxDYXBhYmxlJ1xuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcbiAqL1xuSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzRXh0ZXJuYWxDYXBhYmxlID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2FjdGl2aXRpOkV4dGVybmFsQ2FwYWJsZScpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zICd0cnVlJyBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyAnYWN0aXZpdGk6VGFza0xpc3RlbmVyJ1xuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcbiAqL1xuSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzVGFza0xpc3RlbmVyID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2FjdGl2aXRpOlRhc2tMaXN0ZW5lcicpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zICd0cnVlJyBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyAnYWN0aXZpdGk6RXhlY3V0aW9uTGlzdGVuZXInXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGEgYm9vbGVhbiB2YWx1ZVxuICovXG5JbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuaXNFeGVjdXRpb25MaXN0ZW5lciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdhY3Rpdml0aTpFeGVjdXRpb25MaXN0ZW5lcicpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zICd0cnVlJyBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyAnYWN0aXZpdGk6RXhlY3V0aW9uTGlzdGVuZXInIG9yXG4gKiAnYWN0aXZpdGk6VGFza0xpc3RlbmVyJ1xuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcbiAqL1xuSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzTGlzdGVuZXIgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiB0aGlzLmlzVGFza0xpc3RlbmVyKGVsZW1lbnQpIHx8IHRoaXMuaXNFeGVjdXRpb25MaXN0ZW5lcihlbGVtZW50KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyAndHJ1ZScgaWYgdGhlIGdpdmVuIGVsZW1lbnQgaXMgJ2JwbW46U2VxdWVuY2VGbG93J1xuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcbiAqL1xuSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzU2VxdWVuY2VGbG93ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46U2VxdWVuY2VGbG93Jyk7XG59O1xuXG4vKipcbiAqIEdldCBhICdhY3Rpdml0aTpTZXJ2aWNlVGFza0xpa2UnIGJ1c2luZXNzIG9iamVjdC5cbiAqXG4gKiBJZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBub3QgYSAnYWN0aXZpdGk6U2VydmljZVRhc2tMaWtlJywgdGhlbiAnZmFsc2UnXG4gKiBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gdGhlICdhY3Rpdml0aTpTZXJ2aWNlVGFza0xpa2UnIGJ1c2luZXNzIG9iamVjdFxuICovXG5JbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnKSB8fCBpcyhlbGVtZW50LCAnYnBtbjpFbmRFdmVudCcpKSB7XG5cbiAgICAvLyBjaGFuZ2UgYnVzaW5lc3Mgb2JqZWN0IHRvICdtZXNzYWdlRXZlbnREZWZpbml0aW9uJyB3aGVuXG4gICAgLy8gdGhlIGVsZW1lbnQgaXMgYSBtZXNzYWdlIGludGVybWVkaWF0ZSB0aHJvdyBldmVudCBvciBtZXNzYWdlIGVuZCBldmVudFxuICAgIC8vIGJlY2F1c2UgdGhlIGFjdGl2aXRpIGV4dGVuc2lvbnMgKGUuZy4gYWN0aXZpdGk6Y2xhc3MpIGFyZSBpbiB0aGUgbWVzc2FnZVxuICAgIC8vIGV2ZW50IGRlZmluaXRpb24gdGFnIGFuZCBub3QgaW4gdGhlIGludGVybWVkaWF0ZSB0aHJvdyBldmVudCBvciBlbmQgZXZlbnQgdGFnXG4gICAgdmFyIG1lc3NhZ2VFdmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25IZWxwZXIuZ2V0TWVzc2FnZUV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcbiAgICBpZiAobWVzc2FnZUV2ZW50RGVmaW5pdGlvbikge1xuICAgICAgZWxlbWVudCA9IG1lc3NhZ2VFdmVudERlZmluaXRpb247XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXMuaXNTZXJ2aWNlVGFza0xpa2UoZWxlbWVudCkgJiYgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW1wbGVtZW50YXRpb24gdHlwZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKiBQb3NzaWJsZSBpbXBsZW1lbnRhdGlvbiB0eXBlcyBhcmU6XG4gKiAtIGRtblxuICogLSBjb25uZWN0b3JcbiAqIC0gZXh0ZXJuYWxcbiAqIC0gY2xhc3NcbiAqIC0gZXhwcmVzc2lvblxuICogLSBkZWxlZ2F0ZUV4cHJlc3Npb25cbiAqIC0gc2NyaXB0XG4gKiAtIG9yIHVuZGVmaW5lZCwgd2hlbiBubyBtYXRjaGluZyBpbXBsZW1lbnRhdGlvbiB0eXBlIGlzIGZvdW5kXG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSBpbXBsZW1lbnRhdGlvbiB0eXBlXG4gKi9cbkltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5nZXRJbXBsZW1lbnRhdGlvblR5cGUgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgdmFyIGJvID0gdGhpcy5nZXRTZXJ2aWNlVGFza0xpa2VCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICBpZiAoIWJvKSB7XG4gICAgaWYgKHRoaXMuaXNMaXN0ZW5lcihlbGVtZW50KSkge1xuICAgICAgYm8gPSBlbGVtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMuaXNEbW5DYXBhYmxlKGJvKSkge1xuICAgIHZhciBkZWNpc2lvblJlZiA9IGJvLmdldCgnYWN0aXZpdGk6ZGVjaXNpb25SZWYnKTtcbiAgICBpZiAodHlwZW9mIGRlY2lzaW9uUmVmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuICdkbW4nO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLmlzU2VydmljZVRhc2tMaWtlKGJvKSkge1xuICAgIHZhciBjb25uZWN0b3JzID0gZXh0ZW5zaW9uc0VsZW1lbnRIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sICdhY3Rpdml0aTpDb25uZWN0b3InKTtcbiAgICBpZiAodHlwZW9mIGNvbm5lY3RvcnMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gJ2Nvbm5lY3Rvcic7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMuaXNFeHRlcm5hbENhcGFibGUoYm8pKSB7XG4gICAgdmFyIHR5cGUgPSBiby5nZXQoJ2FjdGl2aXRpOnR5cGUnKTtcbiAgICBpZiAodHlwZSA9PT0gJ2V4dGVybmFsJykge1xuICAgICAgcmV0dXJuICdleHRlcm5hbCc7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNscyA9IGJvLmdldCgnYWN0aXZpdGk6Y2xhc3MnKTtcbiAgaWYgKHR5cGVvZiBjbHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuICdjbGFzcyc7XG4gIH1cblxuICB2YXIgZXhwcmVzc2lvbiA9IGJvLmdldCgnYWN0aXZpdGk6ZXhwcmVzc2lvbicpO1xuICBpZiAodHlwZW9mIGV4cHJlc3Npb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuICdleHByZXNzaW9uJztcbiAgfVxuXG4gIHZhciBkZWxlZ2F0ZUV4cHJlc3Npb24gPSBiby5nZXQoJ2FjdGl2aXRpOmRlbGVnYXRlRXhwcmVzc2lvbicpO1xuICBpZiAodHlwZW9mIGRlbGVnYXRlRXhwcmVzc2lvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gJ2RlbGVnYXRlRXhwcmVzc2lvbic7XG4gIH1cblxuICBpZiAodGhpcy5pc0xpc3RlbmVyKGJvKSkge1xuICAgIHZhciBzY3JpcHQgPSBiby5nZXQoJ3NjcmlwdCcpO1xuICAgIGlmICh0eXBlb2Ygc2NyaXB0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuICdzY3JpcHQnO1xuICAgIH1cbiAgfVxuXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgTW9kZWxVdGlsID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKSxcbiAgICBpcyA9IE1vZGVsVXRpbC5pcyxcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IE1vZGVsVXRpbC5nZXRCdXNpbmVzc09iamVjdDtcblxudmFyIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyID0gcmVxdWlyZSgnLi9FeHRlbnNpb25FbGVtZW50c0hlbHBlcicpLFxuICAgIGltcGxlbWVudGF0aW9uVHlwZUhlbHBlciA9IHJlcXVpcmUoJy4vSW1wbGVtZW50YXRpb25UeXBlSGVscGVyJyk7XG5cbnZhciBJbnB1dE91dHB1dEhlbHBlciA9IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IElucHV0T3V0cHV0SGVscGVyO1xuXG5mdW5jdGlvbiBnZXRFbGVtZW50cyhibywgdHlwZSwgcHJvcCkge1xuICB2YXIgZWxlbXMgPSBleHRlbnNpb25FbGVtZW50c0hlbHBlci5nZXRFeHRlbnNpb25FbGVtZW50cyhibywgdHlwZSkgfHwgW107XG4gIHJldHVybiAhcHJvcCA/IGVsZW1zIDogKGVsZW1zWzBdIHx8IHt9KVtwcm9wXSB8fCBbXTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVycyhlbGVtZW50LCBwcm9wLCBpbnNpZGVDb25uZWN0b3IpIHtcbiAgdmFyIGlucHV0T3V0cHV0ID0gSW5wdXRPdXRwdXRIZWxwZXIuZ2V0SW5wdXRPdXRwdXQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKTtcbiAgcmV0dXJuIChpbnB1dE91dHB1dCAmJiBpbnB1dE91dHB1dC5nZXQocHJvcCkpIHx8IFtdO1xufVxuXG4vKipcbiAqIEdldCBhIGlucHV0T3V0cHV0IGZyb20gdGhlIGJ1c2luZXNzIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGluc2lkZUNvbm5lY3RvclxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9IHRoZSBpbnB1dE91dHB1dCBvYmplY3RcbiAqL1xuSW5wdXRPdXRwdXRIZWxwZXIuZ2V0SW5wdXRPdXRwdXQgPSBmdW5jdGlvbihlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpIHtcbiAgaWYgKCFpbnNpZGVDb25uZWN0b3IpIHtcbiAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICByZXR1cm4gKGdldEVsZW1lbnRzKGJvLCAnYWN0aXZpdGk6SW5wdXRPdXRwdXQnKSB8fCBbXSlbMF07XG4gIH1cbiAgdmFyIGNvbm5lY3RvciA9IHRoaXMuZ2V0Q29ubmVjdG9yKGVsZW1lbnQpO1xuICByZXR1cm4gY29ubmVjdG9yICYmIGNvbm5lY3Rvci5nZXQoJ2lucHV0T3V0cHV0Jyk7XG59O1xuXG4vKipcbiAqIEdldCBhIGNvbm5lY3RvciBmcm9tIHRoZSBidXNpbmVzcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gdGhlIGNvbm5lY3RvciBvYmplY3RcbiAqL1xuSW5wdXRPdXRwdXRIZWxwZXIuZ2V0Q29ubmVjdG9yID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgYm8gPSBpbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIHJldHVybiBibyAmJiAoZ2V0RWxlbWVudHMoYm8sICdhY3Rpdml0aTpDb25uZWN0b3InKSB8fCBbXSlbMF07XG59O1xuXG4vKipcbiAqIFJldHVybiBhbGwgaW5wdXQgcGFyYW1ldGVycyBleGlzdGluZyBpbiB0aGUgYnVzaW5lc3Mgb2JqZWN0LCBhbmRcbiAqIGFuIGVtcHR5IGFycmF5IGlmIG5vbmUgZXhpc3QuXG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGluc2lkZUNvbm5lY3RvclxuICpcbiAqIEByZXR1cm4ge0FycmF5fSBhIGxpc3Qgb2YgaW5wdXQgcGFyYW1ldGVyIG9iamVjdHNcbiAqL1xuSW5wdXRPdXRwdXRIZWxwZXIuZ2V0SW5wdXRQYXJhbWV0ZXJzID0gZnVuY3Rpb24oZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSB7XG4gIHJldHVybiBnZXRQYXJhbWV0ZXJzLmFwcGx5KHRoaXMsIFsgZWxlbWVudCwgJ2lucHV0UGFyYW1ldGVycycsIGluc2lkZUNvbm5lY3RvciBdKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGFsbCBvdXRwdXQgcGFyYW1ldGVycyBleGlzdGluZyBpbiB0aGUgYnVzaW5lc3Mgb2JqZWN0LCBhbmRcbiAqIGFuIGVtcHR5IGFycmF5IGlmIG5vbmUgZXhpc3QuXG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGluc2lkZUNvbm5lY3RvclxuICpcbiAqIEByZXR1cm4ge0FycmF5fSBhIGxpc3Qgb2Ygb3V0cHV0IHBhcmFtZXRlciBvYmplY3RzXG4gKi9cbklucHV0T3V0cHV0SGVscGVyLmdldE91dHB1dFBhcmFtZXRlcnMgPSBmdW5jdGlvbihlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpIHtcbiAgcmV0dXJuIGdldFBhcmFtZXRlcnMuYXBwbHkodGhpcywgWyBlbGVtZW50LCAnb3V0cHV0UGFyYW1ldGVycycsIGluc2lkZUNvbm5lY3RvciBdKTtcbn07XG5cbi8qKlxuICogR2V0IGEgaW5wdXQgcGFyYW1ldGVyIGZyb20gdGhlIGJ1c2luZXNzIG9iamVjdCBhdCBnaXZlbiBpbmRleFxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGluc2lkZUNvbm5lY3RvclxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9IGlucHV0IHBhcmFtZXRlclxuICovXG5JbnB1dE91dHB1dEhlbHBlci5nZXRJbnB1dFBhcmFtZXRlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvciwgaWR4KSB7XG4gIHJldHVybiB0aGlzLmdldElucHV0UGFyYW1ldGVycyhlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpW2lkeF07XG59O1xuXG4vKipcbiAqIEdldCBhIG91dHB1dCBwYXJhbWV0ZXIgZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0IGF0IGdpdmVuIGluZGV4XG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtICB7Ym9vbGVhbn0gaW5zaWRlQ29ubmVjdG9yXG4gKiBAcGFyYW0ge251bWJlcn0gaWR4XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gb3V0cHV0IHBhcmFtZXRlclxuICovXG5JbnB1dE91dHB1dEhlbHBlci5nZXRPdXRwdXRQYXJhbWV0ZXIgPSBmdW5jdGlvbihlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IsIGlkeCkge1xuICByZXR1cm4gdGhpcy5nZXRPdXRwdXRQYXJhbWV0ZXJzKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvcilbaWR4XTtcbn07XG5cbi8qKlxuICogUmV0dXJucyAndHJ1ZScgaWYgdGhlIGdpdmVuIGVsZW1lbnQgc3VwcG9ydHMgaW5wdXRPdXRwdXRcbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0gIHtib29sZWFufSBpbnNpZGVDb25uZWN0b3JcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcbiAqL1xuSW5wdXRPdXRwdXRIZWxwZXIuaXNJbnB1dE91dHB1dFN1cHBvcnRlZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcikge1xuXG4gIGlmIChpbnNpZGVDb25uZWN0b3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIHJldHVybiAoXG4gICAgaXMoYm8sICdicG1uOkZsb3dOb2RlJykgJiYgIShcbiAgICAgIGlzKGJvLCAnYnBtbjpTdGFydEV2ZW50JykgfHxcbiAgICAgIGlzKGJvLCAnYnBtbjpHYXRld2F5JykgfHxcbiAgICAgIGlzKGJvLCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgfHxcbiAgICAgIChcbiAgICAgICAgaXMoYm8sICdicG1uOlN1YlByb2Nlc3MnKSAmJiBiby5nZXQoJ3RyaWdnZXJlZEJ5RXZlbnQnKVxuICAgICAgKVxuICAgIClcbiAgKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyAndHJ1ZScgaWYgdGhlIGdpdmVuIGVsZW1lbnQgc3VwcG9ydHMgb3V0cHV0IHBhcmFtZXRlcnNcbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0gIHtib29sZWFufSBpbnNpZGVDb25uZWN0b3JcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcbiAqL1xuSW5wdXRPdXRwdXRIZWxwZXIuYXJlT3V0cHV0UGFyYW1ldGVyc1N1cHBvcnRlZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcikge1xuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgcmV0dXJuIGluc2lkZUNvbm5lY3RvciB8fCAoIWlzKGJvLCAnYnBtbjpFbmRFdmVudCcpICYmICFiby5sb29wQ2hhcmFjdGVyaXN0aWNzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4vQ21kSGVscGVyJyk7XG5cblxudmFyIFBhcnRpY2lwYW50SGVscGVyID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gUGFydGljaXBhbnRIZWxwZXI7XG5cblBhcnRpY2lwYW50SGVscGVyLm1vZGlmeVByb2Nlc3NCdXNpbmVzc09iamVjdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZXMpIHtcbiAgaWYgKCFpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkuZ2V0KCdwcm9jZXNzUmVmJyksXG4gICAgICBwcm9wZXJ0aWVzID0ge307XG5cbiAgcHJvcGVydGllc1twcm9wZXJ0eV0gPSB2YWx1ZXNbcHJvcGVydHldO1xuXG4gIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHByb3BlcnRpZXMpO1xufTtcblxuUGFydGljaXBhbnRIZWxwZXIuZ2V0UHJvY2Vzc0J1c2luZXNzT2JqZWN0ID0gZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHlOYW1lKSB7XG4gIGlmICghaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmdldCgncHJvY2Vzc1JlZicpLFxuICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gIHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IGJvLmdldChwcm9wZXJ0eU5hbWUpO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbnZhciBQcm9wZXJ0aWVzQWN0aXZhdG9yID0gcmVxdWlyZSgnLi4vLi4vUHJvcGVydGllc0FjdGl2YXRvcicpO1xuXG52YXIgYXN5bmNDYXBhYmxlSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vaGVscGVyL0FzeW5jQ2FwYWJsZUhlbHBlcicpLFxuICAgIEltcGxlbWVudGF0aW9uVHlwZUhlbHBlciA9IHJlcXVpcmUoJy4uLy4uL2hlbHBlci9JbXBsZW1lbnRhdGlvblR5cGVIZWxwZXInKTtcblxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcztcblxuLy8gYnBtbiBwcm9wZXJ0aWVzXG52YXIgcHJvY2Vzc1Byb3BzID0gcmVxdWlyZSgnLi4vLi4vcHJvdmlkZXIvYnBtbi9wYXJ0cy9Qcm9jZXNzUHJvcHMnKSxcbiAgICBldmVudFByb3BzID0gcmVxdWlyZSgnLi4vLi4vcHJvdmlkZXIvYnBtbi9wYXJ0cy9FdmVudFByb3BzJyksXG4gICAgbGlua1Byb3BzID0gcmVxdWlyZSgnLi4vLi4vcHJvdmlkZXIvYnBtbi9wYXJ0cy9MaW5rUHJvcHMnKSxcbiAgICBkb2N1bWVudGF0aW9uUHJvcHMgPSByZXF1aXJlKCcuLi8uLi9wcm92aWRlci9icG1uL3BhcnRzL0RvY3VtZW50YXRpb25Qcm9wcycpLFxuICAgIGlkUHJvcHMgPSByZXF1aXJlKCcuLi8uLi9wcm92aWRlci9icG1uL3BhcnRzL0lkUHJvcHMnKSxcbiAgICBuYW1lUHJvcHMgPSByZXF1aXJlKCcuLi8uLi9wcm92aWRlci9icG1uL3BhcnRzL05hbWVQcm9wcycpLFxuICAgIGV4ZWN1dGFibGVQcm9wcyA9IHJlcXVpcmUoJy4uLy4uL3Byb3ZpZGVyL2JwbW4vcGFydHMvRXhlY3V0YWJsZVByb3BzJyk7XG5cbi8vIGFjdGl2aXRpIHByb3BlcnRpZXNcbnZhciBzZXJ2aWNlVGFza0RlbGVnYXRlUHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL1NlcnZpY2VUYXNrRGVsZWdhdGVQcm9wcycpLFxuICAgIHVzZXJUYXNrUHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL1VzZXJUYXNrUHJvcHMnKSxcbiAgICBhc3luY2hyb25vdXNDb250aW51YXRpb25Qcm9wcyA9IHJlcXVpcmUoJy4vcGFydHMvQXN5bmNocm9ub3VzQ29udGludWF0aW9uUHJvcHMnKSxcbiAgICBjYWxsQWN0aXZpdHlQcm9wcyA9IHJlcXVpcmUoJy4vcGFydHMvQ2FsbEFjdGl2aXR5UHJvcHMnKSxcbiAgICBtdWx0aUluc3RhbmNlUHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL011bHRpSW5zdGFuY2VMb29wUHJvcHMnKSxcbiAgICBjb25kaXRpb25hbFByb3BzID0gcmVxdWlyZSgnLi9wYXJ0cy9Db25kaXRpb25hbFByb3BzJyksXG4gICAgc2NyaXB0UHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL1NjcmlwdFRhc2tQcm9wcycpLFxuICAgIGVycm9yUHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL0Vycm9yRXZlbnRQcm9wcycpLFxuICAgIGZvcm1Qcm9wcyA9IHJlcXVpcmUoJy4vcGFydHMvRm9ybVByb3BzJyksXG4gICAgc3RhcnRFdmVudEluaXRpYXRvciA9IHJlcXVpcmUoJy4vcGFydHMvU3RhcnRFdmVudEluaXRpYXRvcicpLFxuICAgIHZhcmlhYmxlTWFwcGluZyA9IHJlcXVpcmUoJy4vcGFydHMvVmFyaWFibGVNYXBwaW5nUHJvcHMnKSxcbiAgICB2ZXJzaW9uVGFnID0gcmVxdWlyZSgnLi9wYXJ0cy9WZXJzaW9uVGFnUHJvcHMnKTtcblxudmFyIGxpc3RlbmVyUHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL0xpc3RlbmVyUHJvcHMnKSxcbiAgICBsaXN0ZW5lckRldGFpbHMgPSByZXF1aXJlKCcuL3BhcnRzL0xpc3RlbmVyRGV0YWlsUHJvcHMnKSxcbiAgICBsaXN0ZW5lckZpZWxkcyA9IHJlcXVpcmUoJy4vcGFydHMvTGlzdGVuZXJGaWVsZEluamVjdGlvblByb3BzJyk7XG5cbnZhciBlbGVtZW50VGVtcGxhdGVDaG9vc2VyUHJvcHMgPSByZXF1aXJlKCcuL2VsZW1lbnQtdGVtcGxhdGVzL3BhcnRzL0Nob29zZXJQcm9wcycpLFxuICAgIGVsZW1lbnRUZW1wbGF0ZUN1c3RvbVByb3BzID0gcmVxdWlyZSgnLi9lbGVtZW50LXRlbXBsYXRlcy9wYXJ0cy9DdXN0b21Qcm9wcycpO1xuXG4vLyBJbnB1dC9PdXRwdXRcbnZhciBpbnB1dE91dHB1dCA9IHJlcXVpcmUoJy4vcGFydHMvSW5wdXRPdXRwdXRQcm9wcycpLFxuICAgIGlucHV0T3V0cHV0UGFyYW1ldGVyID0gcmVxdWlyZSgnLi9wYXJ0cy9JbnB1dE91dHB1dFBhcmFtZXRlclByb3BzJyk7XG5cbi8vIENvbm5lY3RvclxudmFyIGNvbm5lY3RvckRldGFpbHMgPSByZXF1aXJlKCcuL3BhcnRzL0Nvbm5lY3RvckRldGFpbFByb3BzJyksXG4gICAgY29ubmVjdG9ySW5wdXRPdXRwdXQgPSByZXF1aXJlKCcuL3BhcnRzL0Nvbm5lY3RvcklucHV0T3V0cHV0UHJvcHMnKSxcbiAgICBjb25uZWN0b3JJbnB1dE91dHB1dFBhcmFtZXRlciA9IHJlcXVpcmUoJy4vcGFydHMvQ29ubmVjdG9ySW5wdXRPdXRwdXRQYXJhbWV0ZXJQcm9wcycpO1xuXG4vLyBwcm9wZXJ0aWVzXG52YXIgcHJvcGVydGllcyA9IHJlcXVpcmUoJy4vcGFydHMvUHJvcGVydGllc1Byb3BzJyk7XG5cbi8vIGpvYiBjb25maWd1cmF0aW9uXG52YXIgam9iQ29uZmlndXJhdGlvbiA9IHJlcXVpcmUoJy4vcGFydHMvSm9iQ29uZmlndXJhdGlvblByb3BzJyk7XG5cbi8vIGhpc3RvcnkgdGltZSB0byBsaXZlXG52YXIgaGlzdG9yeVRpbWVUb0xpdmUgPSByZXF1aXJlKCcuL3BhcnRzL0hpc3RvcnlUaW1lVG9MaXZlUHJvcHMnKTtcblxuLy8gY2FuZGlkYXRlIHN0YXJ0ZXIgZ3JvdXBzL3VzZXJzXG52YXIgY2FuZGlkYXRlU3RhcnRlciA9IHJlcXVpcmUoJy4vcGFydHMvQ2FuZGlkYXRlU3RhcnRlclByb3BzJyk7XG5cbi8vIHRhc2tsaXN0XG52YXIgdGFza2xpc3QgPSByZXF1aXJlKCcuL3BhcnRzL1Rhc2tsaXN0UHJvcHMnKTtcblxuLy8gZXh0ZXJuYWwgdGFzayBjb25maWd1cmF0aW9uXG52YXIgZXh0ZXJuYWxUYXNrQ29uZmlndXJhdGlvbiA9IHJlcXVpcmUoJy4vcGFydHMvRXh0ZXJuYWxUYXNrQ29uZmlndXJhdGlvblByb3BzJyk7XG5cbi8vIGZpZWxkIGluamVjdGlvblxudmFyIGZpZWxkSW5qZWN0aW9ucyA9IHJlcXVpcmUoJy4vcGFydHMvRmllbGRJbmplY3Rpb25Qcm9wcycpO1xuXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxuICAgIGV2ZW50RGVmaW5pdGlvbkhlbHBlciA9IHJlcXVpcmUoJy4uLy4uL2hlbHBlci9FdmVudERlZmluaXRpb25IZWxwZXInKSxcbiAgICBpbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi9oZWxwZXIvSW1wbGVtZW50YXRpb25UeXBlSGVscGVyJyk7XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG52YXIgaXNFeHRlcm5hbFRhc2tQcmlvcml0eUVuYWJsZWQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIC8vIHNob3cgb25seSBpZiBlbGVtZW50IGlzIGEgcHJvY2VzcywgYSBwYXJ0aWNpcGFudCAuLi5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlByb2Nlc3MnKSB8fCBpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmIGJ1c2luZXNzT2JqZWN0LmdldCgncHJvY2Vzc1JlZicpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgZXh0ZXJuYWxCbyA9IEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5nZXRTZXJ2aWNlVGFza0xpa2VCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICAgIGlzRXh0ZXJuYWxUYXNrID0gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldEltcGxlbWVudGF0aW9uVHlwZShleHRlcm5hbEJvKSA9PT0gJ2V4dGVybmFsJztcblxuICAvLyAuLi4gb3IgYW4gZXh0ZXJuYWwgdGFzayB3aXRoIHNlbGVjdGVkIGV4dGVybmFsIGltcGxlbWVudGF0aW9uIHR5cGVcbiAgcmV0dXJuICEhSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzRXh0ZXJuYWxDYXBhYmxlKGV4dGVybmFsQm8pICYmIGlzRXh0ZXJuYWxUYXNrO1xufTtcblxudmFyIGlzSm9iQ29uZmlnRW5hYmxlZCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlByb2Nlc3MnKSB8fCBpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmIGJ1c2luZXNzT2JqZWN0LmdldCgncHJvY2Vzc1JlZicpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBhc3luYyBiZWhhdmlvclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgaWYgKGFzeW5jQ2FwYWJsZUhlbHBlci5pc0FzeW5jQmVmb3JlKGJvKSB8fCBhc3luY0NhcGFibGVIZWxwZXIuaXNBc3luY0FmdGVyKGJvKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gdGltZXIgZGVmaW5pdGlvblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46RXZlbnQnKSkge1xuICAgIHJldHVybiAhIWV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRUaW1lckV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbnZhciBnZXRJbnB1dE91dHB1dFBhcmFtZXRlckxhYmVsID0gZnVuY3Rpb24ocGFyYW0sIHRyYW5zbGF0ZSkge1xuXG4gIGlmIChpcyhwYXJhbSwgJ2FjdGl2aXRpOklucHV0UGFyYW1ldGVyJykpIHtcbiAgICByZXR1cm4gdHJhbnNsYXRlKCdJbnB1dCBQYXJhbWV0ZXInKTtcbiAgfVxuXG4gIGlmIChpcyhwYXJhbSwgJ2FjdGl2aXRpOk91dHB1dFBhcmFtZXRlcicpKSB7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZSgnT3V0cHV0IFBhcmFtZXRlcicpO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufTtcblxudmFyIGdldExpc3RlbmVyTGFiZWwgPSBmdW5jdGlvbihwYXJhbSwgdHJhbnNsYXRlKSB7XG5cbiAgaWYgKGlzKHBhcmFtLCAnYWN0aXZpdGk6RXhlY3V0aW9uTGlzdGVuZXInKSkge1xuICAgIHJldHVybiB0cmFuc2xhdGUoJ0V4ZWN1dGlvbiBMaXN0ZW5lcicpO1xuICB9XG5cbiAgaWYgKGlzKHBhcmFtLCAnYWN0aXZpdGk6VGFza0xpc3RlbmVyJykpIHtcbiAgICByZXR1cm4gdHJhbnNsYXRlKCdUYXNrIExpc3RlbmVyJyk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59O1xuXG52YXIgUFJPQ0VTU19LRVlfSElOVCA9ICdUaGlzIG1hcHMgdG8gdGhlIHByb2Nlc3MgZGVmaW5pdGlvbiBrZXkuJztcbnZhciBUQVNLX0tFWV9ISU5UID0gJ1RoaXMgbWFwcyB0byB0aGUgdGFzayBkZWZpbml0aW9uIGtleS4nO1xuXG5mdW5jdGlvbiBjcmVhdGVHZW5lcmFsVGFiR3JvdXBzKFxuICAgIGVsZW1lbnQsIGNhbnZhcywgYnBtbkZhY3RvcnksXG4gICAgZWxlbWVudFJlZ2lzdHJ5LCBlbGVtZW50VGVtcGxhdGVzLCB0cmFuc2xhdGUpIHtcblxuICAvLyByZWZlciB0byB0YXJnZXQgZWxlbWVudCBmb3IgZXh0ZXJuYWwgbGFiZWxzXG4gIGVsZW1lbnQgPSBlbGVtZW50LmxhYmVsVGFyZ2V0IHx8IGVsZW1lbnQ7XG5cbiAgdmFyIGdlbmVyYWxHcm91cCA9IHtcbiAgICBpZDogJ2dlbmVyYWwnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0dlbmVyYWwnKSxcbiAgICBlbnRyaWVzOiBbXVxuICB9O1xuXG4gIHZhciBpZE9wdGlvbnM7XG4gIHZhciBwcm9jZXNzT3B0aW9ucztcblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UHJvY2VzcycpKSB7XG4gICAgaWRPcHRpb25zID0geyBkZXNjcmlwdGlvbjogUFJPQ0VTU19LRVlfSElOVCB9O1xuICB9XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlVzZXJUYXNrJykpIHtcbiAgICBpZE9wdGlvbnMgPSB7IGRlc2NyaXB0aW9uOiBUQVNLX0tFWV9ISU5UIH07XG4gIH1cblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIHByb2Nlc3NPcHRpb25zID0geyBwcm9jZXNzSWREZXNjcmlwdGlvbjogUFJPQ0VTU19LRVlfSElOVCB9O1xuICB9XG5cbiAgaWRQcm9wcyhnZW5lcmFsR3JvdXAsIGVsZW1lbnQsIHRyYW5zbGF0ZSwgaWRPcHRpb25zKTtcbiAgbmFtZVByb3BzKGdlbmVyYWxHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIGNhbnZhcywgdHJhbnNsYXRlKTtcbiAgcHJvY2Vzc1Byb3BzKGdlbmVyYWxHcm91cCwgZWxlbWVudCwgdHJhbnNsYXRlLCBwcm9jZXNzT3B0aW9ucyk7XG4gIHZlcnNpb25UYWcoZ2VuZXJhbEdyb3VwLCBlbGVtZW50LCB0cmFuc2xhdGUpO1xuICBleGVjdXRhYmxlUHJvcHMoZ2VuZXJhbEdyb3VwLCBlbGVtZW50LCB0cmFuc2xhdGUpO1xuICBlbGVtZW50VGVtcGxhdGVDaG9vc2VyUHJvcHMoZ2VuZXJhbEdyb3VwLCBlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzLCB0cmFuc2xhdGUpO1xuXG4gIHZhciBjdXN0b21GaWVsZHNHcm91cHMgPSBlbGVtZW50VGVtcGxhdGVDdXN0b21Qcm9wcyhlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzLCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKTtcblxuICB2YXIgZGV0YWlsc0dyb3VwID0ge1xuICAgIGlkOiAnZGV0YWlscycsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRGV0YWlscycpLFxuICAgIGVudHJpZXM6IFtdXG4gIH07XG4gIHNlcnZpY2VUYXNrRGVsZWdhdGVQcm9wcyhkZXRhaWxzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xuICB1c2VyVGFza1Byb3BzKGRldGFpbHNHcm91cCwgZWxlbWVudCwgdHJhbnNsYXRlKTtcbiAgc2NyaXB0UHJvcHMoZGV0YWlsc0dyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKTtcbiAgbGlua1Byb3BzKGRldGFpbHNHcm91cCwgZWxlbWVudCwgdHJhbnNsYXRlKTtcbiAgY2FsbEFjdGl2aXR5UHJvcHMoZGV0YWlsc0dyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKTtcbiAgZXZlbnRQcm9wcyhkZXRhaWxzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSk7XG4gIGVycm9yUHJvcHMoZGV0YWlsc0dyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKTtcbiAgY29uZGl0aW9uYWxQcm9wcyhkZXRhaWxzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xuICBzdGFydEV2ZW50SW5pdGlhdG9yKGRldGFpbHNHcm91cCwgZWxlbWVudCwgdHJhbnNsYXRlKTsgLy8gdGhpcyBtdXN0IGJlIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIGRldGFpbHMgZ3JvdXAhXG5cbiAgdmFyIG11bHRpSW5zdGFuY2VHcm91cCA9IHtcbiAgICBpZDogJ211bHRpSW5zdGFuY2UnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ011bHRpIEluc3RhbmNlJyksXG4gICAgZW50cmllczogW11cbiAgfTtcbiAgbXVsdGlJbnN0YW5jZVByb3BzKG11bHRpSW5zdGFuY2VHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XG5cbiAgdmFyIGFzeW5jR3JvdXAgPSB7XG4gICAgaWQgOiAnYXN5bmMnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0FzeW5jaHJvbm91cyBDb250aW51YXRpb25zJyksXG4gICAgZW50cmllcyA6IFtdXG4gIH07XG4gIGFzeW5jaHJvbm91c0NvbnRpbnVhdGlvblByb3BzKGFzeW5jR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xuXG4gIHZhciBqb2JDb25maWd1cmF0aW9uR3JvdXAgPSB7XG4gICAgaWQgOiAnam9iQ29uZmlndXJhdGlvbicsXG4gICAgbGFiZWwgOiB0cmFuc2xhdGUoJ0pvYiBDb25maWd1cmF0aW9uJyksXG4gICAgZW50cmllcyA6IFtdLFxuICAgIGVuYWJsZWQ6IGlzSm9iQ29uZmlnRW5hYmxlZFxuICB9O1xuICBqb2JDb25maWd1cmF0aW9uKGpvYkNvbmZpZ3VyYXRpb25Hcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XG5cbiAgdmFyIGV4dGVybmFsVGFza0dyb3VwID0ge1xuICAgIGlkIDogJ2V4dGVybmFsVGFza0NvbmZpZ3VyYXRpb24nLFxuICAgIGxhYmVsIDogdHJhbnNsYXRlKCdFeHRlcm5hbCBUYXNrIENvbmZpZ3VyYXRpb24nKSxcbiAgICBlbnRyaWVzIDogW10sXG4gICAgZW5hYmxlZDogaXNFeHRlcm5hbFRhc2tQcmlvcml0eUVuYWJsZWRcbiAgfTtcbiAgZXh0ZXJuYWxUYXNrQ29uZmlndXJhdGlvbihleHRlcm5hbFRhc2tHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XG5cblxuICB2YXIgY2FuZGlkYXRlU3RhcnRlckdyb3VwID0ge1xuICAgIGlkOiAnY2FuZGlkYXRlU3RhcnRlckNvbmZpZ3VyYXRpb24nLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NhbmRpZGF0ZSBTdGFydGVyIENvbmZpZ3VyYXRpb24nKSxcbiAgICBlbnRyaWVzOiBbXVxuICB9O1xuICBjYW5kaWRhdGVTdGFydGVyKGNhbmRpZGF0ZVN0YXJ0ZXJHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XG5cbiAgdmFyIGhpc3RvcnlUaW1lVG9MaXZlR3JvdXAgPSB7XG4gICAgaWQ6ICdoaXN0b3J5Q29uZmlndXJhdGlvbicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSGlzdG9yeSBDb25maWd1cmF0aW9uJyksXG4gICAgZW50cmllczogW11cbiAgfTtcbiAgaGlzdG9yeVRpbWVUb0xpdmUoaGlzdG9yeVRpbWVUb0xpdmVHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XG5cbiAgdmFyIHRhc2tsaXN0R3JvdXAgPSB7XG4gICAgaWQ6ICd0YXNrbGlzdCcsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVGFza2xpc3QgQ29uZmlndXJhdGlvbicpLFxuICAgIGVudHJpZXM6IFtdXG4gIH07XG4gIHRhc2tsaXN0KHRhc2tsaXN0R3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xuXG4gIHZhciBkb2N1bWVudGF0aW9uR3JvdXAgPSB7XG4gICAgaWQ6ICdkb2N1bWVudGF0aW9uJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdEb2N1bWVudGF0aW9uJyksXG4gICAgZW50cmllczogW11cbiAgfTtcbiAgZG9jdW1lbnRhdGlvblByb3BzKGRvY3VtZW50YXRpb25Hcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XG5cbiAgdmFyIGdyb3VwcyA9IFtdO1xuICBncm91cHMucHVzaChnZW5lcmFsR3JvdXApO1xuICBjdXN0b21GaWVsZHNHcm91cHMuZm9yRWFjaChmdW5jdGlvbihncm91cCkge1xuICAgIGdyb3Vwcy5wdXNoKGdyb3VwKTtcbiAgfSk7XG4gIGdyb3Vwcy5wdXNoKGRldGFpbHNHcm91cCk7XG4gIGdyb3Vwcy5wdXNoKGV4dGVybmFsVGFza0dyb3VwKTtcbiAgZ3JvdXBzLnB1c2gobXVsdGlJbnN0YW5jZUdyb3VwKTtcbiAgZ3JvdXBzLnB1c2goYXN5bmNHcm91cCk7XG4gIGdyb3Vwcy5wdXNoKGpvYkNvbmZpZ3VyYXRpb25Hcm91cCk7XG4gIGdyb3Vwcy5wdXNoKGNhbmRpZGF0ZVN0YXJ0ZXJHcm91cCk7XG4gIGdyb3Vwcy5wdXNoKGhpc3RvcnlUaW1lVG9MaXZlR3JvdXApO1xuICBncm91cHMucHVzaCh0YXNrbGlzdEdyb3VwKTtcbiAgZ3JvdXBzLnB1c2goZG9jdW1lbnRhdGlvbkdyb3VwKTtcblxuICByZXR1cm4gZ3JvdXBzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVWYXJpYWJsZXNUYWJHcm91cHMoZWxlbWVudCwgYnBtbkZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKSB7XG4gIHZhciB2YXJpYWJsZXNHcm91cCA9IHtcbiAgICBpZCA6ICd2YXJpYWJsZXMnLFxuICAgIGxhYmVsIDogdHJhbnNsYXRlKCdWYXJpYWJsZXMnKSxcbiAgICBlbnRyaWVzOiBbXVxuICB9O1xuICB2YXJpYWJsZU1hcHBpbmcodmFyaWFibGVzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xuXG4gIHJldHVybiBbXG4gICAgdmFyaWFibGVzR3JvdXBcbiAgXTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRm9ybXNUYWJHcm91cHMoZWxlbWVudCwgYnBtbkZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKSB7XG4gIHZhciBmb3JtR3JvdXAgPSB7XG4gICAgaWQgOiAnZm9ybXMnLFxuICAgIGxhYmVsIDogdHJhbnNsYXRlKCdGb3JtcycpLFxuICAgIGVudHJpZXM6IFtdXG4gIH07XG4gIGZvcm1Qcm9wcyhmb3JtR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xuXG4gIHJldHVybiBbXG4gICAgZm9ybUdyb3VwXG4gIF07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpc3RlbmVyc1RhYkdyb3VwcyhlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpIHtcblxuICB2YXIgbGlzdGVuZXJzR3JvdXAgPSB7XG4gICAgaWQgOiAnbGlzdGVuZXJzJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdMaXN0ZW5lcnMnKSxcbiAgICBlbnRyaWVzOiBbXVxuICB9O1xuXG4gIHZhciBvcHRpb25zID0gbGlzdGVuZXJQcm9wcyhsaXN0ZW5lcnNHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XG5cbiAgdmFyIGxpc3RlbmVyRGV0YWlsc0dyb3VwID0ge1xuICAgIGlkOiAnbGlzdGVuZXItZGV0YWlscycsXG4gICAgZW50cmllczogW10sXG4gICAgZW5hYmxlZDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKTtcbiAgICB9LFxuICAgIGxhYmVsOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgcGFyYW0gPSBvcHRpb25zLmdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSk7XG4gICAgICByZXR1cm4gZ2V0TGlzdGVuZXJMYWJlbChwYXJhbSwgdHJhbnNsYXRlKTtcbiAgICB9XG4gIH07XG5cbiAgbGlzdGVuZXJEZXRhaWxzKGxpc3RlbmVyRGV0YWlsc0dyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKTtcblxuICB2YXIgbGlzdGVuZXJGaWVsZHNHcm91cCA9IHtcbiAgICBpZDogJ2xpc3RlbmVyLWZpZWxkcycsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRmllbGQgSW5qZWN0aW9uJyksXG4gICAgZW50cmllczogW10sXG4gICAgZW5hYmxlZDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKTtcbiAgICB9XG4gIH07XG5cbiAgbGlzdGVuZXJGaWVsZHMobGlzdGVuZXJGaWVsZHNHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSk7XG5cbiAgcmV0dXJuIFtcbiAgICBsaXN0ZW5lcnNHcm91cCxcbiAgICBsaXN0ZW5lckRldGFpbHNHcm91cCxcbiAgICBsaXN0ZW5lckZpZWxkc0dyb3VwXG4gIF07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0T3V0cHV0VGFiR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSkge1xuXG4gIHZhciBpbnB1dE91dHB1dEdyb3VwID0ge1xuICAgIGlkOiAnaW5wdXQtb3V0cHV0JyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdQYXJhbWV0ZXJzJyksXG4gICAgZW50cmllczogW11cbiAgfTtcblxuICB2YXIgb3B0aW9ucyA9IGlucHV0T3V0cHV0KGlucHV0T3V0cHV0R3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xuXG4gIHZhciBpbnB1dE91dHB1dFBhcmFtZXRlckdyb3VwID0ge1xuICAgIGlkOiAnaW5wdXQtb3V0cHV0LXBhcmFtZXRlcicsXG4gICAgZW50cmllczogW10sXG4gICAgZW5hYmxlZDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZ2V0U2VsZWN0ZWRQYXJhbWV0ZXIoZWxlbWVudCwgbm9kZSk7XG4gICAgfSxcbiAgICBsYWJlbDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIHBhcmFtID0gb3B0aW9ucy5nZXRTZWxlY3RlZFBhcmFtZXRlcihlbGVtZW50LCBub2RlKTtcbiAgICAgIHJldHVybiBnZXRJbnB1dE91dHB1dFBhcmFtZXRlckxhYmVsKHBhcmFtLCB0cmFuc2xhdGUpO1xuICAgIH1cbiAgfTtcblxuICBpbnB1dE91dHB1dFBhcmFtZXRlcihpbnB1dE91dHB1dFBhcmFtZXRlckdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKTtcblxuICByZXR1cm4gW1xuICAgIGlucHV0T3V0cHV0R3JvdXAsXG4gICAgaW5wdXRPdXRwdXRQYXJhbWV0ZXJHcm91cFxuICBdO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb25uZWN0b3JUYWJHcm91cHMoZWxlbWVudCwgYnBtbkZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKSB7XG4gIHZhciBjb25uZWN0b3JEZXRhaWxzR3JvdXAgPSB7XG4gICAgaWQ6ICdjb25uZWN0b3ItZGV0YWlscycsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRGV0YWlscycpLFxuICAgIGVudHJpZXM6IFtdXG4gIH07XG5cbiAgY29ubmVjdG9yRGV0YWlscyhjb25uZWN0b3JEZXRhaWxzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xuXG4gIHZhciBjb25uZWN0b3JJbnB1dE91dHB1dEdyb3VwID0ge1xuICAgIGlkOiAnY29ubmVjdG9yLWlucHV0LW91dHB1dCcsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSW5wdXQvT3V0cHV0JyksXG4gICAgZW50cmllczogW11cbiAgfTtcblxuICB2YXIgb3B0aW9ucyA9IGNvbm5lY3RvcklucHV0T3V0cHV0KGNvbm5lY3RvcklucHV0T3V0cHV0R3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xuXG4gIHZhciBjb25uZWN0b3JJbnB1dE91dHB1dFBhcmFtZXRlckdyb3VwID0ge1xuICAgIGlkOiAnY29ubmVjdG9yLWlucHV0LW91dHB1dC1wYXJhbWV0ZXInLFxuICAgIGVudHJpZXM6IFtdLFxuICAgIGVuYWJsZWQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmdldFNlbGVjdGVkUGFyYW1ldGVyKGVsZW1lbnQsIG5vZGUpO1xuICAgIH0sXG4gICAgbGFiZWw6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHZhciBwYXJhbSA9IG9wdGlvbnMuZ2V0U2VsZWN0ZWRQYXJhbWV0ZXIoZWxlbWVudCwgbm9kZSk7XG4gICAgICByZXR1cm4gZ2V0SW5wdXRPdXRwdXRQYXJhbWV0ZXJMYWJlbChwYXJhbSwgdHJhbnNsYXRlKTtcbiAgICB9XG4gIH07XG5cbiAgY29ubmVjdG9ySW5wdXRPdXRwdXRQYXJhbWV0ZXIoY29ubmVjdG9ySW5wdXRPdXRwdXRQYXJhbWV0ZXJHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSk7XG5cbiAgcmV0dXJuIFtcbiAgICBjb25uZWN0b3JEZXRhaWxzR3JvdXAsXG4gICAgY29ubmVjdG9ySW5wdXRPdXRwdXRHcm91cCxcbiAgICBjb25uZWN0b3JJbnB1dE91dHB1dFBhcmFtZXRlckdyb3VwXG4gIF07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpZWxkSW5qZWN0aW9uc1RhYkdyb3VwcyhlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpIHtcblxuICB2YXIgZmllbGRHcm91cCA9IHtcbiAgICBpZDogJ2ZpZWxkLWluamVjdGlvbnMtcHJvcGVydGllcycsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRmllbGQgSW5qZWN0aW9ucycpLFxuICAgIGVudHJpZXM6IFtdXG4gIH07XG5cbiAgZmllbGRJbmplY3Rpb25zKGZpZWxkR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xuXG4gIHJldHVybiBbXG4gICAgZmllbGRHcm91cFxuICBdO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFeHRlbnNpb25FbGVtZW50c0dyb3VwcyhlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpIHtcblxuICB2YXIgcHJvcGVydGllc0dyb3VwID0ge1xuICAgIGlkIDogJ2V4dGVuc2lvbkVsZW1lbnRzLXByb3BlcnRpZXMnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1Byb3BlcnRpZXMnKSxcbiAgICBlbnRyaWVzOiBbXVxuICB9O1xuICBwcm9wZXJ0aWVzKHByb3BlcnRpZXNHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XG5cbiAgcmV0dXJuIFtcbiAgICBwcm9wZXJ0aWVzR3JvdXBcbiAgXTtcbn1cblxuLy8gYWN0aXZpdGkgUHJvcGVydGllcyBQcm92aWRlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxuLyoqXG4gKiBBIHByb3BlcnRpZXMgcHJvdmlkZXIgZm9yIGFjdGl2aXRpIHJlbGF0ZWQgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcbiAqIEBwYXJhbSB7RWxlbWVudFRlbXBsYXRlc30gZWxlbWVudFRlbXBsYXRlc1xuICogQHBhcmFtIHtUcmFuc2xhdGV9IHRyYW5zbGF0ZVxuICovXG5mdW5jdGlvbiBBY3Rpdml0aVByb3BlcnRpZXNQcm92aWRlcihcbiAgICBldmVudEJ1cywgY2FudmFzLCBicG1uRmFjdG9yeSxcbiAgICBlbGVtZW50UmVnaXN0cnksIGVsZW1lbnRUZW1wbGF0ZXMsIHRyYW5zbGF0ZSkge1xuXG4gIFByb3BlcnRpZXNBY3RpdmF0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgdGhpcy5nZXRUYWJzID0gZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gICAgdmFyIGdlbmVyYWxUYWIgPSB7XG4gICAgICBpZDogJ2dlbmVyYWwnLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnR2VuZXJhbCcpLFxuICAgICAgZ3JvdXBzOiBjcmVhdGVHZW5lcmFsVGFiR3JvdXBzKFxuICAgICAgICBlbGVtZW50LCBjYW52YXMsIGJwbW5GYWN0b3J5LFxuICAgICAgICBlbGVtZW50UmVnaXN0cnksIGVsZW1lbnRUZW1wbGF0ZXMsIHRyYW5zbGF0ZSlcbiAgICB9O1xuXG4gICAgdmFyIHZhcmlhYmxlc1RhYiA9IHtcbiAgICAgIGlkOiAndmFyaWFibGVzJyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1ZhcmlhYmxlcycpLFxuICAgICAgZ3JvdXBzOiBjcmVhdGVWYXJpYWJsZXNUYWJHcm91cHMoZWxlbWVudCwgYnBtbkZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKVxuICAgIH07XG5cbiAgICB2YXIgZm9ybXNUYWIgPSB7XG4gICAgICBpZDogJ2Zvcm1zJyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Zvcm1zJyksXG4gICAgICBncm91cHM6IGNyZWF0ZUZvcm1zVGFiR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSlcbiAgICB9O1xuXG4gICAgdmFyIGxpc3RlbmVyc1RhYiA9IHtcbiAgICAgIGlkOiAnbGlzdGVuZXJzJyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0xpc3RlbmVycycpLFxuICAgICAgZ3JvdXBzOiBjcmVhdGVMaXN0ZW5lcnNUYWJHcm91cHMoZWxlbWVudCwgYnBtbkZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKSxcbiAgICAgIGVuYWJsZWQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuICFldmVudERlZmluaXRpb25IZWxwZXIuZ2V0TGlua0V2ZW50RGVmaW5pdGlvbihlbGVtZW50KVxuICAgICAgICAgIHx8ICghaXMoZWxlbWVudCwgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcpXG4gICAgICAgICAgJiYgZXZlbnREZWZpbml0aW9uSGVscGVyLmdldExpbmtFdmVudERlZmluaXRpb24oZWxlbWVudCkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgaW5wdXRPdXRwdXRUYWIgPSB7XG4gICAgICBpZDogJ2lucHV0LW91dHB1dCcsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdJbnB1dC9PdXRwdXQnKSxcbiAgICAgIGdyb3VwczogY3JlYXRlSW5wdXRPdXRwdXRUYWJHcm91cHMoZWxlbWVudCwgYnBtbkZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKVxuICAgIH07XG5cbiAgICB2YXIgY29ubmVjdG9yVGFiID0ge1xuICAgICAgaWQ6ICdjb25uZWN0b3InLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ29ubmVjdG9yJyksXG4gICAgICBncm91cHM6IGNyZWF0ZUNvbm5lY3RvclRhYkdyb3VwcyhlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpLFxuICAgICAgZW5hYmxlZDogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICB2YXIgYm8gPSBpbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBibyAmJiBpbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0SW1wbGVtZW50YXRpb25UeXBlKGJvKSA9PT0gJ2Nvbm5lY3Rvcic7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBmaWVsZEluamVjdGlvbnNUYWIgPSB7XG4gICAgICBpZDogJ2ZpZWxkLWluamVjdGlvbnMnLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnRmllbGQgSW5qZWN0aW9ucycpLFxuICAgICAgZ3JvdXBzOiBjcmVhdGVGaWVsZEluamVjdGlvbnNUYWJHcm91cHMoZWxlbWVudCwgYnBtbkZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKVxuICAgIH07XG5cbiAgICB2YXIgZXh0ZW5zaW9uc1RhYiA9IHtcbiAgICAgIGlkOiAnZXh0ZW5zaW9uRWxlbWVudHMnLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXh0ZW5zaW9ucycpLFxuICAgICAgZ3JvdXBzOiBjcmVhdGVFeHRlbnNpb25FbGVtZW50c0dyb3VwcyhlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpXG4gICAgfTtcblxuICAgIHJldHVybiBbXG4gICAgICBnZW5lcmFsVGFiLFxuICAgICAgdmFyaWFibGVzVGFiLFxuICAgICAgY29ubmVjdG9yVGFiLFxuICAgICAgZm9ybXNUYWIsXG4gICAgICBsaXN0ZW5lcnNUYWIsXG4gICAgICBpbnB1dE91dHB1dFRhYixcbiAgICAgIGZpZWxkSW5qZWN0aW9uc1RhYixcbiAgICAgIGV4dGVuc2lvbnNUYWJcbiAgICBdO1xuICB9O1xuXG59XG5cbkFjdGl2aXRpUHJvcGVydGllc1Byb3ZpZGVyLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnLFxuICAnYnBtbkZhY3RvcnknLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ2VsZW1lbnRUZW1wbGF0ZXMnLFxuICAndHJhbnNsYXRlJ1xuXTtcblxuaW5oZXJpdHMoQWN0aXZpdGlQcm9wZXJ0aWVzUHJvdmlkZXIsIFByb3BlcnRpZXNBY3RpdmF0b3IpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFjdGl2aXRpUHJvcGVydGllc1Byb3ZpZGVyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnB1dCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHRoZSBnaXZlblxuICogYmluZGluZyBhbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eUJpbmRpbmd9IGJpbmRpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFBhcmFtZXRlcihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcbiAgdmFyIHNjcmlwdEZvcm1hdCA9IGJpbmRpbmcuc2NyaXB0Rm9ybWF0LFxuICAgICAgcGFyYW1ldGVyVmFsdWUsXG4gICAgICBwYXJhbWV0ZXJEZWZpbml0aW9uO1xuXG4gIGlmIChzY3JpcHRGb3JtYXQpIHtcbiAgICBwYXJhbWV0ZXJEZWZpbml0aW9uID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdhY3Rpdml0aTpTY3JpcHQnLCB7XG4gICAgICBzY3JpcHRGb3JtYXQ6IHNjcmlwdEZvcm1hdCxcbiAgICAgIHZhbHVlOiB2YWx1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHBhcmFtZXRlclZhbHVlID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gYnBtbkZhY3RvcnkuY3JlYXRlKCdhY3Rpdml0aTpJbnB1dFBhcmFtZXRlcicsIHtcbiAgICBuYW1lOiBiaW5kaW5nLm5hbWUsXG4gICAgdmFsdWU6IHBhcmFtZXRlclZhbHVlLFxuICAgIGRlZmluaXRpb246IHBhcmFtZXRlckRlZmluaXRpb25cbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmNyZWF0ZUlucHV0UGFyYW1ldGVyID0gY3JlYXRlSW5wdXRQYXJhbWV0ZXI7XG5cblxuLyoqXG4gKiBDcmVhdGUgYW4gb3V0cHV0IHBhcmFtZXRlciByZXByZXNlbnRpbmcgdGhlIGdpdmVuXG4gKiBiaW5kaW5nIGFuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5QmluZGluZ30gYmluZGluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU91dHB1dFBhcmFtZXRlcihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcbiAgdmFyIHNjcmlwdEZvcm1hdCA9IGJpbmRpbmcuc2NyaXB0Rm9ybWF0LFxuICAgICAgcGFyYW1ldGVyVmFsdWUsXG4gICAgICBwYXJhbWV0ZXJEZWZpbml0aW9uO1xuXG4gIGlmIChzY3JpcHRGb3JtYXQpIHtcbiAgICBwYXJhbWV0ZXJEZWZpbml0aW9uID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdhY3Rpdml0aTpTY3JpcHQnLCB7XG4gICAgICBzY3JpcHRGb3JtYXQ6IHNjcmlwdEZvcm1hdCxcbiAgICAgIHZhbHVlOiBiaW5kaW5nLnNvdXJjZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHBhcmFtZXRlclZhbHVlID0gYmluZGluZy5zb3VyY2U7XG4gIH1cblxuICByZXR1cm4gYnBtbkZhY3RvcnkuY3JlYXRlKCdhY3Rpdml0aTpPdXRwdXRQYXJhbWV0ZXInLCB7XG4gICAgbmFtZTogdmFsdWUsXG4gICAgdmFsdWU6IHBhcmFtZXRlclZhbHVlLFxuICAgIGRlZmluaXRpb246IHBhcmFtZXRlckRlZmluaXRpb25cbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmNyZWF0ZU91dHB1dFBhcmFtZXRlciA9IGNyZWF0ZU91dHB1dFBhcmFtZXRlcjtcblxuXG4vKipcbiAqIENyZWF0ZSBhY3Rpdml0aSBwcm9wZXJ0eSBmcm9tIHRoZSBnaXZlbiBiaW5kaW5nLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQWN0aXZpdGlQcm9wZXJ0eShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcbiAgcmV0dXJuIGJwbW5GYWN0b3J5LmNyZWF0ZSgnYWN0aXZpdGk6UHJvcGVydHknLCB7XG4gICAgbmFtZTogYmluZGluZy5uYW1lLFxuICAgIHZhbHVlOiB2YWx1ZSB8fCAnJ1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuY3JlYXRlQWN0aXZpdGlQcm9wZXJ0eSA9IGNyZWF0ZUFjdGl2aXRpUHJvcGVydHk7XG5cblxuLyoqXG4gKiBDcmVhdGUgYWN0aXZpdGk6aW4gZWxlbWVudCBmcm9tIGdpdmVuIGJpbmRpbmcuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eUJpbmRpbmd9IGJpbmRpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aUluKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSkge1xuXG4gIHZhciBwcm9wZXJ0aWVzID0gY3JlYXRlQWN0aXZpdGlJbk91dEF0dHJzKGJpbmRpbmcsIHZhbHVlKTtcblxuICByZXR1cm4gYnBtbkZhY3RvcnkuY3JlYXRlKCdhY3Rpdml0aTpJbicsIHByb3BlcnRpZXMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVBY3Rpdml0aUluID0gY3JlYXRlQWN0aXZpdGlJbjtcblxuXG4vKipcbiAqIENyZWF0ZSBhY3Rpdml0aTppbiB3aXRoIGJ1c2luZXNzS2V5IGVsZW1lbnQgZnJvbSBnaXZlbiBiaW5kaW5nLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcbiAgcmV0dXJuIGJwbW5GYWN0b3J5LmNyZWF0ZSgnYWN0aXZpdGk6SW4nLCB7XG4gICAgYnVzaW5lc3NLZXk6IHZhbHVlXG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVBY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5ID0gY3JlYXRlQWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleTtcblxuXG4vKipcbiAqIENyZWF0ZSBhY3Rpdml0aTpvdXQgZWxlbWVudCBmcm9tIGdpdmVuIGJpbmRpbmcuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eUJpbmRpbmd9IGJpbmRpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aU91dChiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcbiAgdmFyIHByb3BlcnRpZXMgPSBjcmVhdGVBY3Rpdml0aUluT3V0QXR0cnMoYmluZGluZywgdmFsdWUpO1xuXG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOk91dCcsIHByb3BlcnRpZXMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVBY3Rpdml0aU91dCA9IGNyZWF0ZUFjdGl2aXRpT3V0O1xuXG5cbi8qKlxuICogQ3JlYXRlIGFjdGl2aXRpOmV4ZWN1dGlvbkxpc3RlbmVyIGVsZW1lbnQgY29udGFpbmluZyBhbiBpbmxpbmUgc2NyaXB0IGZyb20gZ2l2ZW4gYmluZGluZy5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5QmluZGluZ30gYmluZGluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFjdGl2aXRpRXhlY3V0aW9uTGlzdGVuZXJTY3JpcHQoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KSB7XG4gIHZhciBzY3JpcHRGb3JtYXQgPSBiaW5kaW5nLnNjcmlwdEZvcm1hdCxcbiAgICAgIHBhcmFtZXRlclZhbHVlLFxuICAgICAgcGFyYW1ldGVyRGVmaW5pdGlvbjtcblxuICBpZiAoc2NyaXB0Rm9ybWF0KSB7XG4gICAgcGFyYW1ldGVyRGVmaW5pdGlvbiA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYWN0aXZpdGk6U2NyaXB0Jywge1xuICAgICAgc2NyaXB0Rm9ybWF0OiBzY3JpcHRGb3JtYXQsXG4gICAgICB2YWx1ZTogdmFsdWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBwYXJhbWV0ZXJWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIGJwbW5GYWN0b3J5LmNyZWF0ZSgnYWN0aXZpdGk6RXhlY3V0aW9uTGlzdGVuZXInLCB7XG4gICAgZXZlbnQ6IGJpbmRpbmcuZXZlbnQsXG4gICAgdmFsdWU6IHBhcmFtZXRlclZhbHVlLFxuICAgIHNjcmlwdDogcGFyYW1ldGVyRGVmaW5pdGlvblxuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuY3JlYXRlQWN0aXZpdGlFeGVjdXRpb25MaXN0ZW5lclNjcmlwdCA9IGNyZWF0ZUFjdGl2aXRpRXhlY3V0aW9uTGlzdGVuZXJTY3JpcHQ7XG5cbi8qKlxuICogQ3JlYXRlIGFjdGl2aXRpOmZpZWxkIGVsZW1lbnQgY29udGFpbmluZyBzdHJpbmcgb3IgZXhwcmVzc2lvbiBmcm9tIGdpdmVuIGJpbmRpbmcuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eUJpbmRpbmd9IGJpbmRpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aUZpZWxkSW5qZWN0aW9uKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSkge1xuICB2YXIgREVGQVVMVF9QUk9QUyA9IHtcbiAgICAnc3RyaW5nJzogdW5kZWZpbmVkLFxuICAgICdleHByZXNzaW9uJzogdW5kZWZpbmVkLFxuICAgICduYW1lJzogdW5kZWZpbmVkXG4gIH07XG5cbiAgdmFyIHByb3BzID0gYXNzaWduKHt9LCBERUZBVUxUX1BST1BTKTtcblxuICBpZiAoIWJpbmRpbmcuZXhwcmVzc2lvbikge1xuICAgIHByb3BzLnN0cmluZyA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHByb3BzLmV4cHJlc3Npb24gPSB2YWx1ZTtcbiAgfVxuICBwcm9wcy5uYW1lID0gYmluZGluZy5uYW1lO1xuXG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOkZpZWxkJywgcHJvcHMpO1xufVxubW9kdWxlLmV4cG9ydHMuY3JlYXRlQWN0aXZpdGlGaWVsZEluamVjdGlvbiA9IGNyZWF0ZUFjdGl2aXRpRmllbGRJbmplY3Rpb247XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQ3JlYXRlIHByb3BlcnRpZXMgZm9yIGFjdGl2aXRpOmluIGFuZCBhY3Rpdml0aTpvdXQgdHlwZXMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFjdGl2aXRpSW5PdXRBdHRycyhiaW5kaW5nLCB2YWx1ZSkge1xuXG4gIHZhciBwcm9wZXJ0aWVzID0ge307XG5cbiAgLy8gYWN0aXZpdGk6aW4gc291cmNlKEV4cHJlc3Npb24pIHRhcmdldFxuICBpZiAoYmluZGluZy50YXJnZXQpIHtcblxuICAgIHByb3BlcnRpZXMudGFyZ2V0ID0gYmluZGluZy50YXJnZXQ7XG5cbiAgICBpZiAoYmluZGluZy5leHByZXNzaW9uKSB7XG4gICAgICBwcm9wZXJ0aWVzLnNvdXJjZUV4cHJlc3Npb24gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvcGVydGllcy5zb3VyY2UgPSB2YWx1ZTtcbiAgICB9XG4gIH0gZWxzZVxuXG4gIC8vIGFjdGl2aXRpOihpbnxvdXQpIHZhcmlhYmxlcyBsb2NhbFxuICBpZiAoYmluZGluZy52YXJpYWJsZXMpIHtcbiAgICBwcm9wZXJ0aWVzLnZhcmlhYmxlcyA9ICdhbGwnO1xuXG4gICAgaWYgKGJpbmRpbmcudmFyaWFibGVzID09PSAnbG9jYWwnKSB7XG4gICAgICBwcm9wZXJ0aWVzLmxvY2FsID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBhY3Rpdml0aTpvdXQgc291cmNlKEV4cHJlc3Npb24pIHRhcmdldFxuICBlbHNlIHtcbiAgICBwcm9wZXJ0aWVzLnRhcmdldCA9IHZhbHVlO1xuXG4gICAgWyAnc291cmNlJywgJ3NvdXJjZUV4cHJlc3Npb24nIF0uZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoYmluZGluZ1trXSkge1xuICAgICAgICBwcm9wZXJ0aWVzW2tdID0gYmluZGluZ1trXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG52YXIgZ2V0VGVtcGxhdGUgPSByZXF1aXJlKCcuL0hlbHBlcicpLmdldFRlbXBsYXRlO1xuXG52YXIgUHJvcGVydGllc0FjdGl2YXRvciA9IHJlcXVpcmUoJy4uLy4uLy4uL1Byb3BlcnRpZXNBY3RpdmF0b3InKTtcblxudmFyIEhJR0hFUl9QUklPUklUWSA9IDExMDA7XG5cbi8qKlxuICogQXBwbGllcyB0ZW1wbGF0ZSB2aXNpYmlsaXR5IHNldHRpbmdzLlxuICpcbiAqIENvbnRyb2xsZWQgdXNpbmcgYGVudHJpZXNWaXNpYmxlYCBvbiB0ZW1wbGF0ZSBjb25maWcgb2JqZWN0OlxuICpcbiAqIGBgYGpzb25cbiAqICAgICBcImVudHJpZXNWaXNpYmxlXCI6IHtcbiAqICAgICAgIFwiX2FsbFwiOiB0cnVlfGZhbHNlLFxuICogICAgICAgXCJlbnRyeU5hbWVcIjogdHJ1ZXxmYWxzZSxcbiAqICAgICAgIC4uLlxuICogICAgIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0VsZW1lbnRUZW1wbGF0ZXN9IGVsZW1lbnRUZW1wbGF0ZXNcbiAqL1xuZnVuY3Rpb24gQ3VzdG9tRWxlbWVudHNQcm9wZXJ0aWVzQWN0aXZhdG9yKGV2ZW50QnVzLCBlbGVtZW50VGVtcGxhdGVzKSB7XG4gIFByb3BlcnRpZXNBY3RpdmF0b3IuY2FsbCh0aGlzLCBldmVudEJ1cywgSElHSEVSX1BSSU9SSVRZKTtcblxuICB0aGlzLmlzRW50cnlWaXNpYmxlID0gZnVuY3Rpb24oZW50cnksIGVsZW1lbnQpIHtcblxuICAgIHZhciB0ZW1wbGF0ZSA9IGdldFRlbXBsYXRlKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZXMpO1xuXG4gICAgaWYgKHRlbXBsYXRlICYmICFpc0VudHJ5VmlzaWJsZShlbnRyeSwgdGVtcGxhdGUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIHRoaXMuaXNQcm9wZXJ0eUVkaXRhYmxlID0gZnVuY3Rpb24oZW50cnksIHByb3BlcnR5TmFtZSwgZWxlbWVudCkge1xuXG4gICAgdmFyIHRlbXBsYXRlID0gZ2V0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcyk7XG5cbiAgICBpZiAodGVtcGxhdGUgJiYgIWlzRW50cnlFZGl0YWJsZShlbnRyeSwgdGVtcGxhdGUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xufVxuXG5DdXN0b21FbGVtZW50c1Byb3BlcnRpZXNBY3RpdmF0b3IuJGluamVjdCA9IFsgJ2V2ZW50QnVzJywgJ2VsZW1lbnRUZW1wbGF0ZXMnIF07XG5cbmluaGVyaXRzKEN1c3RvbUVsZW1lbnRzUHJvcGVydGllc0FjdGl2YXRvciwgUHJvcGVydGllc0FjdGl2YXRvcik7XG5cbm1vZHVsZS5leHBvcnRzID0gQ3VzdG9tRWxlbWVudHNQcm9wZXJ0aWVzQWN0aXZhdG9yO1xuXG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG52YXIgQ1VTVE9NX1BST1BFUlRJRVNfUEFUVEVSTiA9IC9eY3VzdG9tLS87XG5cbnZhciBERUZBVUxUX0VOVFJJRVNfVklTSUJMRSA9IHtcbiAgX2FsbDogZmFsc2UsXG4gIGlkOiB0cnVlLFxuICBuYW1lOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBpc0N1c3RvbUVudHJ5KGVudHJ5KSB7XG4gIHJldHVybiBDVVNUT01fUFJPUEVSVElFU19QQVRURVJOLnRlc3QoZW50cnkuaWQpO1xufVxuXG5mdW5jdGlvbiBpc0VudHJ5VmlzaWJsZShlbnRyeSwgdGVtcGxhdGUpIHtcblxuICB2YXIgZW50cnlJZCA9IGVudHJ5LmlkO1xuXG4gIGlmIChlbnRyeUlkID09PSAnZWxlbWVudFRlbXBsYXRlLWNob29zZXInIHx8IGlzQ3VzdG9tRW50cnkoZW50cnkpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgZW50cmllc1Zpc2libGUgPSB0ZW1wbGF0ZS5lbnRyaWVzVmlzaWJsZSB8fCBERUZBVUxUX0VOVFJJRVNfVklTSUJMRTtcblxuICBpZiAodHlwZW9mIGVudHJpZXNWaXNpYmxlID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gZW50cmllc1Zpc2libGU7XG4gIH1cblxuICB2YXIgZGVmYXVsdFZpc2libGUgPSBlbnRyaWVzVmlzaWJsZS5fYWxsIHx8IGZhbHNlLFxuICAgICAgZW50cnlWaXNpYmxlID0gZW50cmllc1Zpc2libGVbZW50cnlJZF07XG5cbiAgLy8gZCA9IHRydWUsIGUgPSBmYWxzZSA9PiBmYWxzZVxuICAvLyBkID0gZmFsc2UsIGUgPSB0cnVlID0+IHRydWVcbiAgLy8gZCA9IGZhbHNlLCBlID0gZmFsc2VcbiAgcmV0dXJuIChcbiAgICAoZGVmYXVsdFZpc2libGUgPT09IHRydWUgJiYgZW50cnlWaXNpYmxlICE9PSBmYWxzZSkgfHxcbiAgICAoZGVmYXVsdFZpc2libGUgPT09IGZhbHNlICYmIGVudHJ5VmlzaWJsZSA9PT0gdHJ1ZSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNFbnRyeUVkaXRhYmxlKGVudHJ5LCB0ZW1wbGF0ZSkge1xuXG4gIHZhciBwcm9wZXJ0eTtcblxuICBpZiAoaXNDdXN0b21FbnRyeShlbnRyeSkpIHtcbiAgICBwcm9wZXJ0eSA9IGdldFByb3BlcnR5KHRlbXBsYXRlLCBlbnRyeSk7XG5cbiAgICByZXR1cm4gcHJvcGVydHkgJiYgcHJvcGVydHkuZWRpdGFibGUgIT09IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5KHRlbXBsYXRlLCBlbnRyeSkge1xuXG4gIHZhciBpbmRleDtcbiAgdmFyIGlkeCA9IGVudHJ5LmlkLnJlcGxhY2UoJ2N1c3RvbS0nICsgdGVtcGxhdGUuaWQgKyAnLScsICcnKTtcbiAgaWYgKGlkeC5pbmRleE9mKCctJykgIT09IC0xKSB7XG4gICAgdmFyIGluZGV4ZXMgPSBpZHguc3BsaXQoJy0nKTtcbiAgICBpZiAoaW5kZXhlcy5sZW5ndGggPT0gMikge1xuICAgICAgdmFyIHNjb3BlTmFtZSA9IGluZGV4ZXNbMF0ucmVwbGFjZSgvXy9nLCAnOicpO1xuICAgICAgaW5kZXggPSBwYXJzZUludChpbmRleGVzWzFdLCAxMCk7XG4gICAgICBpZiAoc2NvcGVOYW1lICYmICFpc05hTihpbmRleCkpIHtcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlLnNjb3Blc1tzY29wZU5hbWVdLnByb3BlcnRpZXNbaW5kZXhdO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpbmRleCA9IHBhcnNlSW50KGlkeCwgMTApO1xuICAgIGlmICghaXNOYU4oaW5kZXgpKSB7XG4gICAgICByZXR1cm4gdGVtcGxhdGUucHJvcGVydGllc1tpbmRleF07XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgZXh0cmFjdCBwcm9wZXJ0eSBpbmRleCBmb3IgZW50cnkgPCcgKyBlbnRyeS5pZCArICc+Jyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB2YWx1ZXMgPSByZXF1aXJlKCdsb2Rhc2gvdmFsdWVzJyk7XG5cbi8qKlxuICogVGhlIGd1eSBrbm93aW5nIGFsbCBjb25maWd1cmVkIGVsZW1lbnQgdGVtcGxhdGVzLlxuICpcbiAqIFRoaXMgcmVnaXN0cnkgd29uJ3QgdmFsaWRhdGUuIFVzZSB0aGUge0BsaW5rIFZhbGlkYXRvcn1cbiAqIHRvIHZlcmlmeSBhIHRlbXBsYXRlIGlzIHZhbGlkIHByaW9yIHRvIGFkZGluZyBpdCB0b1xuICogdGhpcyByZWdpc3RyeS5cbiAqL1xuZnVuY3Rpb24gRWxlbWVudFRlbXBsYXRlcygpIHtcblxuICB0aGlzLl90ZW1wbGF0ZXMgPSB7fTtcblxuICAvKipcbiAgICogU2V0cyB0aGUga25vd24gZWxlbWVudCB0ZW1wbGF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8VGVtcGxhdGVEZXNjcmlwdG9yPn0gZGVzY3JpcHRvcnNcbiAgICpcbiAgICogQHJldHVybiB7RWxlbWVudFRlbXBsYXRlc31cbiAgICovXG4gIHRoaXMuc2V0ID0gZnVuY3Rpb24oZGVzY3JpcHRvcnMpIHtcblxuICAgIHZhciB0ZW1wbGF0ZXMgPSB0aGlzLl90ZW1wbGF0ZXMgPSB7fTtcblxuICAgIGRlc2NyaXB0b3JzLmZvckVhY2goZnVuY3Rpb24oZGVzY3JpcHRvcikge1xuICAgICAgdGVtcGxhdGVzW2Rlc2NyaXB0b3IuaWRdID0gZGVzY3JpcHRvcjtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgdGVtcGxhdGUgZGVzY3JpcHRvciB3aXRoIGdpdmVuIGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gaWRcbiAgICpcbiAgICogQHJldHVybiB7VGVtcGxhdGVEZXNjcmlwdG9yfVxuICAgKi9cbiAgdGhpcy5nZXQgPSBmdW5jdGlvbihpZCkge1xuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZXNbaWRdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIGtub3duIHRlbXBsYXRlIGRlc2NyaXB0b3JzLlxuICAgKlxuICAgKiBAcmV0dXJuIHtBcnJheTxUZW1wbGF0ZURlc2NyaXB0b3I+fVxuICAgKi9cbiAgdGhpcy5nZXRBbGwgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWVzKHRoaXMuX3RlbXBsYXRlcyk7XG4gIH07XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBFbGVtZW50VGVtcGxhdGVzOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIFZhbGlkYXRvciA9IHJlcXVpcmUoJy4vVmFsaWRhdG9yJyk7XG5cbi8qKlxuICogVGhlIGd1eSByZXNwb25zaWJsZSBmb3IgdGVtcGxhdGUgbG9hZGluZy5cbiAqXG4gKiBQcm92aWRlIHRoZSBhY3R1YWwgdGVtcGxhdGVzIHZpYSB0aGUgYGNvbmZpZy5lbGVtZW50VGVtcGxhdGVzYC5cbiAqXG4gKiBUaGF0IGNvbmZpZ3VyYXRpb24gY2FuIGVpdGhlciBiZSBhbiBhcnJheSBvZiB0ZW1wbGF0ZVxuICogZGVzY3JpcHRvcnMgb3IgYSBub2RlIHN0eWxlIGNhbGxiYWNrIHRvIHJldHJpZXZlXG4gKiB0aGUgdGVtcGxhdGVzIGFzeW5jaHJvbm91c2x5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8VGVtcGxhdGVEZXNjcmlwdG9yPnxGdW5jdGlvbn0gbG9hZFRlbXBsYXRlc1xuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RWxlbWVudFRlbXBsYXRlc30gZWxlbWVudFRlbXBsYXRlc1xuICovXG5mdW5jdGlvbiBFbGVtZW50VGVtcGxhdGVzTG9hZGVyKGxvYWRUZW1wbGF0ZXMsIGV2ZW50QnVzLCBlbGVtZW50VGVtcGxhdGVzKSB7XG4gIHRoaXMuX2xvYWRUZW1wbGF0ZXMgPSBsb2FkVGVtcGxhdGVzO1xuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB0aGlzLl9lbGVtZW50VGVtcGxhdGVzID0gZWxlbWVudFRlbXBsYXRlcztcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRCdXMub24oJ2RpYWdyYW0uaW5pdCcsIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYucmVsb2FkKCk7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEVsZW1lbnRUZW1wbGF0ZXNMb2FkZXI7XG5cbkVsZW1lbnRUZW1wbGF0ZXNMb2FkZXIuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5lbGVtZW50VGVtcGxhdGVzJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2VsZW1lbnRUZW1wbGF0ZXMnXG5dO1xuXG5cbkVsZW1lbnRUZW1wbGF0ZXNMb2FkZXIucHJvdG90eXBlLnJlbG9hZCA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB2YXIgbG9hZFRlbXBsYXRlcyA9IHRoaXMuX2xvYWRUZW1wbGF0ZXM7XG5cbiAgLy8gbm8gdGVtcGxhdGVzIHNwZWNpZmllZFxuICBpZiAodHlwZW9mIGxvYWRUZW1wbGF0ZXMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gdGVtcGxhdGUgbG9hZGVyIGZ1bmN0aW9uIHNwZWNpZmllZFxuICBpZiAodHlwZW9mIGxvYWRUZW1wbGF0ZXMgPT09ICdmdW5jdGlvbicpIHtcblxuICAgIHJldHVybiBsb2FkVGVtcGxhdGVzKGZ1bmN0aW9uKGVyciwgdGVtcGxhdGVzKSB7XG5cbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYudGVtcGxhdGVFcnJvcnMoWyBlcnIgXSk7XG4gICAgICB9XG5cbiAgICAgIHNlbGYuc2V0VGVtcGxhdGVzKHRlbXBsYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICAvLyB0ZW1wbGF0ZXMgYXJyYXkgc3BlY2lmaWVkXG4gIGlmIChsb2FkVGVtcGxhdGVzLmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLnNldFRlbXBsYXRlcyhsb2FkVGVtcGxhdGVzKTtcbiAgfVxuXG59O1xuXG5FbGVtZW50VGVtcGxhdGVzTG9hZGVyLnByb3RvdHlwZS5zZXRUZW1wbGF0ZXMgPSBmdW5jdGlvbih0ZW1wbGF0ZXMpIHtcblxuICB2YXIgZWxlbWVudFRlbXBsYXRlcyA9IHRoaXMuX2VsZW1lbnRUZW1wbGF0ZXM7XG5cbiAgdmFyIHZhbGlkYXRvciA9IG5ldyBWYWxpZGF0b3IoKS5hZGRBbGwodGVtcGxhdGVzKTtcblxuICB2YXIgZXJyb3JzID0gdmFsaWRhdG9yLmdldEVycm9ycygpLFxuICAgICAgdmFsaWRUZW1wbGF0ZXMgPSB2YWxpZGF0b3IuZ2V0VmFsaWRUZW1wbGF0ZXMoKTtcblxuICBlbGVtZW50VGVtcGxhdGVzLnNldCh2YWxpZFRlbXBsYXRlcyk7XG5cbiAgaWYgKGVycm9ycy5sZW5ndGgpIHtcbiAgICB0aGlzLnRlbXBsYXRlRXJyb3JzKGVycm9ycyk7XG4gIH1cblxuICB0aGlzLnRlbXBsYXRlc0NoYW5nZWQoKTtcbn07XG5cbkVsZW1lbnRUZW1wbGF0ZXNMb2FkZXIucHJvdG90eXBlLnRlbXBsYXRlc0NoYW5nZWQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnZWxlbWVudFRlbXBsYXRlcy5jaGFuZ2VkJyk7XG59O1xuXG5FbGVtZW50VGVtcGxhdGVzTG9hZGVyLnByb3RvdHlwZS50ZW1wbGF0ZUVycm9ycyA9IGZ1bmN0aW9uKGVycm9ycykge1xuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdlbGVtZW50VGVtcGxhdGVzLmVycm9ycycsIHtcbiAgICBlcnJvcnM6IGVycm9yc1xuICB9KTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xuXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxuICAgIGlzQW55ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvdXRpbC9Nb2RlbGluZ1V0aWwnKS5pc0FueTtcblxudmFyIGZpbmQgPSByZXF1aXJlKCdsb2Rhc2gvZmluZCcpO1xuXG5cbnZhciBURU1QTEFURV9BVFRSID0gJ2FjdGl2aXRpOm1vZGVsZXJUZW1wbGF0ZSc7XG5cbi8qKlxuICogVGhlIEJQTU4gMi4wIGV4dGVuc2lvbiBhdHRyaWJ1dGUgbmFtZSB1bmRlclxuICogd2hpY2ggdGhlIGVsZW1lbnQgdGVtcGxhdGUgaXMgc3RvcmVkLlxuICpcbiAqIEB0eXBlIHtTdHJpbmd9XG4gKi9cbm1vZHVsZS5leHBvcnRzLlRFTVBMQVRFX0FUVFIgPSBURU1QTEFURV9BVFRSO1xuXG5cbi8qKlxuICogR2V0IHRlbXBsYXRlIGlkIGZvciBhIGdpdmVuIGRpYWdyYW0gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZUlkKGVsZW1lbnQpIHtcblxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICBpZiAoYm8pIHtcbiAgICByZXR1cm4gYm8uZ2V0KFRFTVBMQVRFX0FUVFIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLmdldFRlbXBsYXRlSWQgPSBnZXRUZW1wbGF0ZUlkO1xuXG5cbi8qKlxuICogR2V0IHRlbXBsYXRlIG9mIGEgZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudFRlbXBsYXRlc30gZWxlbWVudFRlbXBsYXRlc1xuICpcbiAqIEByZXR1cm4ge1RlbXBsYXRlRGVmaW5pdGlvbn1cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcykge1xuICB2YXIgaWQgPSBnZXRUZW1wbGF0ZUlkKGVsZW1lbnQpO1xuXG4gIHJldHVybiBpZCAmJiBlbGVtZW50VGVtcGxhdGVzLmdldChpZCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmdldFRlbXBsYXRlID0gZ2V0VGVtcGxhdGU7XG5cbi8qKlxuICogR2V0IGRlZmF1bHQgdGVtcGxhdGUgZm9yIGEgZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudFRlbXBsYXRlc30gZWxlbWVudFRlbXBsYXRlc1xuICpcbiAqIEByZXR1cm4ge1RlbXBsYXRlRGVmaW5pdGlvbn1cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdFRlbXBsYXRlKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZXMpIHtcblxuICAvLyByZXR1cm4gZmlyc3QgZGVmYXVsdCB0ZW1wbGF0ZSwgaWYgYW55IGV4aXN0c1xuICByZXR1cm4gKFxuICAgIGVsZW1lbnRUZW1wbGF0ZXMuZ2V0QWxsKCkuZmlsdGVyKGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiBpc0FueShlbGVtZW50LCB0LmFwcGxpZXNUbykgJiYgdC5pc0RlZmF1bHQ7XG4gICAgfSlcbiAgKVswXTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZ2V0RGVmYXVsdFRlbXBsYXRlID0gZ2V0RGVmYXVsdFRlbXBsYXRlO1xuXG5cbi8qKlxuICogRmluZCBleHRlbnNpb24gd2l0aCBnaXZlbiB0eXBlIGluXG4gKiBCUE1OIGVsZW1lbnQsIGRpYWdyYW0gZWxlbWVudCBvciBFeHRlbnNpb25FbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudHxkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSB0aGUgZXh0ZW5zaW9uXG4gKi9cbmZ1bmN0aW9uIGZpbmRFeHRlbnNpb24oZWxlbWVudCwgdHlwZSkge1xuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICB2YXIgZXh0ZW5zaW9uRWxlbWVudHM7XG5cbiAgaWYgKGlzKGJvLCAnYnBtbjpFeHRlbnNpb25FbGVtZW50cycpKSB7XG4gICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBibztcbiAgfSBlbHNlIHtcbiAgICBleHRlbnNpb25FbGVtZW50cyA9IGJvLmV4dGVuc2lvbkVsZW1lbnRzO1xuICB9XG5cbiAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGZpbmQoZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiBpcyhlLCB0eXBlKTtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmZpbmRFeHRlbnNpb24gPSBmaW5kRXh0ZW5zaW9uO1xuXG5cbmZ1bmN0aW9uIGZpbmRFeHRlbnNpb25zKGVsZW1lbnQsIHR5cGVzKSB7XG4gIHZhciBleHRlbnNpb25FbGVtZW50cyA9IGdldEV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpO1xuXG4gIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKS5maWx0ZXIoZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiBpc0FueShlLCB0eXBlcyk7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5maW5kRXh0ZW5zaW9ucyA9IGZpbmRFeHRlbnNpb25zO1xuXG5cbmZ1bmN0aW9uIGZpbmRBY3Rpdml0aUluT3V0KGVsZW1lbnQsIGJpbmRpbmcpIHtcblxuICB2YXIgZXh0ZW5zaW9uRWxlbWVudHMgPSBnZXRFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcblxuICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG1hdGNoZXI7XG5cbiAgaWYgKGJpbmRpbmcudHlwZSA9PT0gJ2FjdGl2aXRpOmluJykge1xuICAgIG1hdGNoZXIgPSBmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gaXMoZSwgJ2FjdGl2aXRpOkluJykgJiYgaXNJbk91dChlLCBiaW5kaW5nKTtcbiAgICB9O1xuICB9IGVsc2VcbiAgaWYgKGJpbmRpbmcudHlwZSA9PT0gJ2FjdGl2aXRpOm91dCcpIHtcbiAgICBtYXRjaGVyID0gZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIGlzKGUsICdhY3Rpdml0aTpPdXQnKSAmJiBpc0luT3V0KGUsIGJpbmRpbmcpO1xuICAgIH07XG4gIH0gZWxzZVxuICBpZiAoYmluZGluZy50eXBlID09PSAnYWN0aXZpdGk6aW46YnVzaW5lc3NLZXknKSB7XG4gICAgbWF0Y2hlciA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiBpcyhlLCAnYWN0aXZpdGk6SW4nKSAmJiAnYnVzaW5lc3NLZXknIGluIGU7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmaW5kKGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIG1hdGNoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5maW5kQWN0aXZpdGlJbk91dCA9IGZpbmRBY3Rpdml0aUluT3V0O1xuXG5mdW5jdGlvbiBmaW5kQWN0aXZpdGlQcm9wZXJ0eShhY3Rpdml0aVByb3BlcnRpZXMsIGJpbmRpbmcpIHtcbiAgcmV0dXJuIGZpbmQoYWN0aXZpdGlQcm9wZXJ0aWVzLmdldCgndmFsdWVzJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gcC5uYW1lID09PSBiaW5kaW5nLm5hbWU7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5maW5kQWN0aXZpdGlQcm9wZXJ0eSA9IGZpbmRBY3Rpdml0aVByb3BlcnR5O1xuXG5cbmZ1bmN0aW9uIGZpbmRJbnB1dFBhcmFtZXRlcihpbnB1dE91dHB1dCwgYmluZGluZykge1xuICB2YXIgcGFyYW1ldGVycyA9IGlucHV0T3V0cHV0LmdldCgnaW5wdXRQYXJhbWV0ZXJzJyk7XG5cbiAgcmV0dXJuIGZpbmQocGFyYW1ldGVycywgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiBwLm5hbWUgPT09IGJpbmRpbmcubmFtZTtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmZpbmRJbnB1dFBhcmFtZXRlciA9IGZpbmRJbnB1dFBhcmFtZXRlcjtcblxuXG5mdW5jdGlvbiBmaW5kT3V0cHV0UGFyYW1ldGVyKGlucHV0T3V0cHV0LCBiaW5kaW5nKSB7XG4gIHZhciBwYXJhbWV0ZXJzID0gaW5wdXRPdXRwdXQuZ2V0KCdvdXRwdXRQYXJhbWV0ZXJzJyk7XG5cbiAgcmV0dXJuIGZpbmQocGFyYW1ldGVycywgZnVuY3Rpb24ocCkge1xuICAgIHZhciB2YWx1ZSA9IHAudmFsdWU7XG5cbiAgICBpZiAoIWJpbmRpbmcuc2NyaXB0Rm9ybWF0KSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IGJpbmRpbmcuc291cmNlO1xuICAgIH1cblxuICAgIHZhciBkZWZpbml0aW9uID0gcC5kZWZpbml0aW9uO1xuXG4gICAgaWYgKCFkZWZpbml0aW9uIHx8IGJpbmRpbmcuc2NyaXB0Rm9ybWF0ICE9PSBkZWZpbml0aW9uLnNjcmlwdEZvcm1hdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZpbml0aW9uLnZhbHVlID09PSBiaW5kaW5nLnNvdXJjZTtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmZpbmRPdXRwdXRQYXJhbWV0ZXIgPSBmaW5kT3V0cHV0UGFyYW1ldGVyO1xuXG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCkge1xuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICBpZiAoaXMoYm8sICdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJykpIHtcbiAgICByZXR1cm4gYm87XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJvLmV4dGVuc2lvbkVsZW1lbnRzO1xuICB9XG59XG5cblxuZnVuY3Rpb24gaXNJbk91dChlbGVtZW50LCBiaW5kaW5nKSB7XG5cbiAgaWYgKGJpbmRpbmcudHlwZSA9PT0gJ2FjdGl2aXRpOmluJykge1xuICAgIC8vIGZpbmQgYmFzZWQgb24gdGFyZ2V0IGF0dHJpYnV0ZVxuICAgIGlmIChiaW5kaW5nLnRhcmdldCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQudGFyZ2V0ID09PSBiaW5kaW5nLnRhcmdldDtcbiAgICB9XG4gIH1cblxuICBpZiAoYmluZGluZy50eXBlID09PSAnYWN0aXZpdGk6b3V0Jykge1xuICAgIC8vIGZpbmQgYmFzZWQgb24gc291cmNlIC8gc291cmNlRXhwcmVzc2lvblxuICAgIGlmIChiaW5kaW5nLnNvdXJjZSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQuc291cmNlID09PSBiaW5kaW5nLnNvdXJjZTtcbiAgICB9XG5cbiAgICBpZiAoYmluZGluZy5zb3VyY2VFeHByZXNzaW9uKSB7XG4gICAgICByZXR1cm4gZWxlbWVudC5zb3VyY2VFeHByZXNzaW9uID09PSBiaW5kaW5nLnNvdXJjZUV4cHJlc3Npb247XG4gICAgfVxuICB9XG5cbiAgLy8gZmluZCBiYXNlZCB2YXJpYWJsZXMgLyBsb2NhbCBjb21iaW5hdGlvblxuICBpZiAoYmluZGluZy52YXJpYWJsZXMpIHtcbiAgICByZXR1cm4gZWxlbWVudC52YXJpYWJsZXMgPT09ICdhbGwnICYmIChcbiAgICAgIGJpbmRpbmcudmFyaWFibGVzICE9PSAnbG9jYWwnIHx8IGVsZW1lbnQubG9jYWxcbiAgICApO1xuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnbG9kYXNoL2lzQXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJ2xvZGFzaC9pc09iamVjdCcpO1xuXG52YXIgRFJPUERPV05fVFlQRSA9ICdEcm9wZG93bic7XG5cbnZhciBWQUxJRF9UWVBFUyA9IFsgJ1N0cmluZycsICdUZXh0JywgJ0Jvb2xlYW4nLCAnSGlkZGVuJywgRFJPUERPV05fVFlQRSBdO1xuXG52YXIgUFJPUEVSVFlfVFlQRSA9ICdwcm9wZXJ0eScsXG4gICAgQUNUSVZJVElfUFJPUEVSVFlfVFlQRSA9ICdhY3Rpdml0aTpwcm9wZXJ0eScsXG4gICAgQUNUSVZJVElfSU5QVVRfUEFSQU1FVEVSX1RZUEUgPSAnYWN0aXZpdGk6aW5wdXRQYXJhbWV0ZXInLFxuICAgIEFDVElWSVRJX09VVFBVVF9QQVJBTUVURVJfVFlQRSA9ICdhY3Rpdml0aTpvdXRwdXRQYXJhbWV0ZXInLFxuICAgIEFDVElWSVRJX0lOX1RZUEUgPSAnYWN0aXZpdGk6aW4nLFxuICAgIEFDVElWSVRJX09VVF9UWVBFID0gJ2FjdGl2aXRpOm91dCcsXG4gICAgQUNUSVZJVElfSU5fQlVTSU5FU1NfS0VZX1RZUEUgPSAnYWN0aXZpdGk6aW46YnVzaW5lc3NLZXknLFxuICAgIEFDVElWSVRJX0VYRUNVVElPTl9MSVNURU5FUiA9ICdhY3Rpdml0aTpleGVjdXRpb25MaXN0ZW5lcicsXG4gICAgQUNUSVZJVElfRklFTEQgPSAnYWN0aXZpdGk6ZmllbGQnO1xuXG52YXIgVkFMSURfQklORElOR19UWVBFUyA9IFtcbiAgUFJPUEVSVFlfVFlQRSxcbiAgQUNUSVZJVElfUFJPUEVSVFlfVFlQRSxcbiAgQUNUSVZJVElfSU5QVVRfUEFSQU1FVEVSX1RZUEUsXG4gIEFDVElWSVRJX09VVFBVVF9QQVJBTUVURVJfVFlQRSxcbiAgQUNUSVZJVElfSU5fVFlQRSxcbiAgQUNUSVZJVElfT1VUX1RZUEUsXG4gIEFDVElWSVRJX0lOX0JVU0lORVNTX0tFWV9UWVBFLFxuICBBQ1RJVklUSV9FWEVDVVRJT05fTElTVEVORVIsXG4gIEFDVElWSVRJX0ZJRUxEXG5dO1xuXG5cbi8qKlxuICogQSBlbGVtZW50IHRlbXBsYXRlIHZhbGlkYXRvci5cbiAqL1xuZnVuY3Rpb24gVmFsaWRhdG9yKCkge1xuXG4gIHRoaXMuX3RlbXBsYXRlc0J5SWQgPSB7fTtcblxuICB0aGlzLl92YWxpZFRlbXBsYXRlcyA9IFtdO1xuICB0aGlzLl9lcnJvcnMgPSBbXTtcblxuXG4gIC8qKlxuICAgKiBBZGRzIHRoZSB0ZW1wbGF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8VGVtcGxhdGVEZXNjcmlwdG9yPn0gdGVtcGxhdGVzXG4gICAqXG4gICAqIEByZXR1cm4ge1ZhbGlkYXRvcn0gc2VsZlxuICAgKi9cbiAgdGhpcy5hZGRBbGwgPSBmdW5jdGlvbih0ZW1wbGF0ZXMpIHtcblxuICAgIGlmICghaXNBcnJheSh0ZW1wbGF0ZXMpKSB7XG4gICAgICB0aGlzLl9sb2dFcnJvcigndGVtcGxhdGVzIG11c3QgYmUgW10nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGVtcGxhdGVzLmZvckVhY2godGhpcy5hZGQsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgdGhlIGdpdmVuIGVsZW1lbnQgdGVtcGxhdGUsIGlmIGl0IGlzIHZhbGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge1RlbXBsYXRlRGVzY3JpcHRvcn0gdGVtcGxhdGVcbiAgICpcbiAgICogQHJldHVybiB7VmFsaWRhdG9yfSBzZWxmXG4gICAqL1xuICB0aGlzLmFkZCA9IGZ1bmN0aW9uKHRlbXBsYXRlKSB7XG5cbiAgICB2YXIgZXJyID0gdGhpcy5fdmFsaWRhdGVUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cbiAgICBpZiAoIWVycikge1xuICAgICAgdGhpcy5fdGVtcGxhdGVzQnlJZFt0ZW1wbGF0ZS5pZF0gPSB0ZW1wbGF0ZTtcblxuICAgICAgdGhpcy5fdmFsaWRUZW1wbGF0ZXMucHVzaCh0ZW1wbGF0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGdpdmVuIHRlbXBsYXRlIGFuZCByZXR1cm4gZXJyb3IgKGlmIGFueSkuXG4gICAqXG4gICAqIEBwYXJhbSB7VGVtcGxhdGVEZXNjcmlwdG9yfSB0ZW1wbGF0ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtFcnJvcn0gdmFsaWRhdGlvbiBlcnJvciwgaWYgYW55XG4gICAqL1xuICB0aGlzLl92YWxpZGF0ZVRlbXBsYXRlID0gZnVuY3Rpb24odGVtcGxhdGUpIHtcblxuICAgIHZhciBlcnIsXG4gICAgICAgIGlkID0gdGVtcGxhdGUuaWQsXG4gICAgICAgIGFwcGxpZXNUbyA9IHRlbXBsYXRlLmFwcGxpZXNUbyxcbiAgICAgICAgcHJvcGVydGllcyA9IHRlbXBsYXRlLnByb3BlcnRpZXMsXG4gICAgICAgIHNjb3BlcyA9IHRlbXBsYXRlLnNjb3BlcztcblxuICAgIGlmICghaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9sb2dFcnJvcignbWlzc2luZyB0ZW1wbGF0ZSBpZCcpO1xuICAgIH1cblxuICAgIGlmIChpZCBpbiB0aGlzLl90ZW1wbGF0ZXNCeUlkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbG9nRXJyb3IoJ3RlbXBsYXRlIGlkIDwnICsgaWQgKyAnPiBhbHJlYWR5IHVzZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzQXJyYXkoYXBwbGllc1RvKSkge1xuICAgICAgZXJyID0gdGhpcy5fbG9nRXJyb3IoJ21pc3NpbmcgYXBwbGllc1RvPVtdJywgdGVtcGxhdGUpO1xuICAgIH1cblxuICAgIGlmICghaXNBcnJheShwcm9wZXJ0aWVzKSkge1xuICAgICAgZXJyID0gdGhpcy5fbG9nRXJyb3IoJ21pc3NpbmcgcHJvcGVydGllcz1bXScsIHRlbXBsYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLl92YWxpZGF0ZVByb3BlcnRpZXMocHJvcGVydGllcykpIHtcbiAgICAgICAgZXJyID0gbmV3IEVycm9yKCdpbnZhbGlkIHByb3BlcnRpZXMnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2NvcGVzKSB7XG4gICAgICBlcnIgPSB0aGlzLl92YWxpZGF0ZVNjb3Blcyh0ZW1wbGF0ZSwgc2NvcGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyO1xuICB9O1xuXG4gIHRoaXMuX3ZhbGlkYXRlU2NvcGVzID0gZnVuY3Rpb24odGVtcGxhdGUsIHNjb3Blcykge1xuXG4gICAgdmFyIGVycixcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIHNjb3BlTmFtZTtcblxuICAgIGlmICghaXNPYmplY3Qoc2NvcGVzKSB8fCBpc0FycmF5KHNjb3BlcykpIHtcbiAgICAgIHJldHVybiB0aGlzLl9sb2dFcnJvcignaW52YWxpZCBzY29wZXMsIHNob3VsZCBiZSBzY29wZXM9e30nLCB0ZW1wbGF0ZSk7XG4gICAgfVxuXG4gICAgZm9yIChzY29wZU5hbWUgaW4gc2NvcGVzKSB7XG4gICAgICBzY29wZSA9IHNjb3Blc1tzY29wZU5hbWVdO1xuXG4gICAgICBpZiAoIWlzT2JqZWN0KHNjb3BlKSB8fCBpc0FycmF5KHNjb3BlKSkge1xuICAgICAgICBlcnIgPSB0aGlzLl9sb2dFcnJvcignaW52YWxpZCBzY29wZSwgc2hvdWxkIGJlIHNjb3BlPXt9JywgdGVtcGxhdGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzQXJyYXkoc2NvcGUucHJvcGVydGllcykpIHtcbiAgICAgICAgZXJyID0gdGhpcy5fbG9nRXJyb3IoXG4gICAgICAgICAgJ21pc3NpbmcgcHJvcGVydGllcz1bXSBpbiBzY29wZSA8JyArIHNjb3BlTmFtZSArICc+JywgdGVtcGxhdGVcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghdGhpcy5fdmFsaWRhdGVQcm9wZXJ0aWVzKHNjb3BlLnByb3BlcnRpZXMpKSB7XG4gICAgICAgICAgZXJyID0gbmV3IEVycm9yKCdpbnZhbGlkIHByb3BlcnRpZXMgaW4gc2NvcGUgPCcgKyBzY29wZU5hbWUgKyAnPicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycjtcbiAgfTtcblxuICAvKipcbiAgICogVmFsaWRhdGUgcHJvcGVydGllcyBhbmQgcmV0dXJuIGZhbHNlIGlmIGFueSBpcyBpbnZhbGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PFByb3BlcnR5RGVzY3JpcHRvcj59IHByb3BlcnRpZXNcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiBhbGwgcHJvcGVydGllcyBhcmUgdmFsaWRcbiAgICovXG4gIHRoaXMuX3ZhbGlkYXRlUHJvcGVydGllcyA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpIHtcbiAgICB2YXIgdmFsaWRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5maWx0ZXIodGhpcy5fdmFsaWRhdGVQcm9wZXJ0eSwgdGhpcyk7XG5cbiAgICByZXR1cm4gcHJvcGVydGllcy5sZW5ndGggPT09IHZhbGlkUHJvcGVydGllcy5sZW5ndGg7XG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHByb3BlcnR5IGFuZCByZXR1cm4gZmFsc2UsIGlmIHRoZXJlIHdhc1xuICAgKiBhIHZhbGlkYXRpb24gZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSB7UHJvcGVydHlEZXNjcmlwdG9yfSBwcm9wZXJ0eVxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIHByb3BlcnR5IGlzIHZhbGlkXG4gICAqL1xuICB0aGlzLl92YWxpZGF0ZVByb3BlcnR5ID0gZnVuY3Rpb24ocHJvcGVydHkpIHtcblxuICAgIHZhciB0eXBlID0gcHJvcGVydHkudHlwZSxcbiAgICAgICAgYmluZGluZyA9IHByb3BlcnR5LmJpbmRpbmc7XG5cbiAgICB2YXIgZXJyO1xuXG4gICAgdmFyIGJpbmRpbmdUeXBlID0gYmluZGluZy50eXBlO1xuXG4gICAgaWYgKFZBTElEX1RZUEVTLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XG4gICAgICBlcnIgPSB0aGlzLl9sb2dFcnJvcihcbiAgICAgICAgJ2ludmFsaWQgcHJvcGVydHkgdHlwZSA8JyArIHR5cGUgKyAnPjsgJyArXG4gICAgICAgICdtdXN0IGJlIGFueSBvZiB7ICcgKyBWQUxJRF9UWVBFUy5qb2luKCcsICcpICsgJyB9J1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gRFJPUERPV05fVFlQRSAmJiBiaW5kaW5nVHlwZSAhPT0gQUNUSVZJVElfRVhFQ1VUSU9OX0xJU1RFTkVSKSB7XG4gICAgICBpZiAoIWlzQXJyYXkocHJvcGVydHkuY2hvaWNlcykpIHtcbiAgICAgICAgZXJyID0gdGhpcy5fbG9nRXJyb3IoXG4gICAgICAgICAgJ211c3QgcHJvdmlkZSBjaG9pY2VzPVtdIHdpdGggJyArIERST1BET1dOX1RZUEUgKyAnIHR5cGUnXG4gICAgICAgICk7XG4gICAgICB9IGVsc2VcblxuICAgICAgaWYgKCFwcm9wZXJ0eS5jaG9pY2VzLmV2ZXJ5KGlzRHJvcGRvd25DaG9pY2VWYWxpZCkpIHtcbiAgICAgICAgZXJyID0gdGhpcy5fbG9nRXJyb3IoXG4gICAgICAgICAgJ3sgbmFtZSwgdmFsdWUgfSBtdXN0IGJlIHNwZWNpZmllZCBmb3IgJyArXG4gICAgICAgICAgRFJPUERPV05fVFlQRSArICcgY2hvaWNlcydcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWJpbmRpbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLl9sb2dFcnJvcigncHJvcGVydHkgbWlzc2luZyBiaW5kaW5nJyk7XG4gICAgfVxuXG4gICAgaWYgKFZBTElEX0JJTkRJTkdfVFlQRVMuaW5kZXhPZihiaW5kaW5nVHlwZSkgPT09IC0xKSB7XG4gICAgICBlcnIgPSB0aGlzLl9sb2dFcnJvcihcbiAgICAgICAgJ2ludmFsaWQgcHJvcGVydHkuYmluZGluZyB0eXBlIDwnICsgYmluZGluZ1R5cGUgKyAnPjsgJyArXG4gICAgICAgICdtdXN0IGJlIGFueSBvZiB7ICcgKyBWQUxJRF9CSU5ESU5HX1RZUEVTLmpvaW4oJywgJykgKyAnIH0nXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gUFJPUEVSVFlfVFlQRSB8fFxuICAgICAgICBiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfUFJPUEVSVFlfVFlQRSB8fFxuICAgICAgICBiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfSU5QVVRfUEFSQU1FVEVSX1RZUEUgfHxcbiAgICAgICAgYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX0ZJRUxEKSB7XG5cbiAgICAgIGlmICghYmluZGluZy5uYW1lKSB7XG4gICAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKFxuICAgICAgICAgICdwcm9wZXJ0eS5iaW5kaW5nIDwnICsgYmluZGluZ1R5cGUgKyAnPiByZXF1aXJlcyBuYW1lJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfT1VUUFVUX1BBUkFNRVRFUl9UWVBFKSB7XG4gICAgICBpZiAoIWJpbmRpbmcuc291cmNlKSB7XG4gICAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKFxuICAgICAgICAgICdwcm9wZXJ0eS5iaW5kaW5nIDwnICsgYmluZGluZ1R5cGUgKyAnPiByZXF1aXJlcyBzb3VyY2UnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9JTl9UWVBFKSB7XG5cbiAgICAgIGlmICghYmluZGluZy52YXJpYWJsZXMgJiYgIWJpbmRpbmcudGFyZ2V0KSB7XG4gICAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKFxuICAgICAgICAgICdwcm9wZXJ0eS5iaW5kaW5nIDwnICsgYmluZGluZ1R5cGUgKyAnPiByZXF1aXJlcyAnICtcbiAgICAgICAgICAndmFyaWFibGVzIG9yIHRhcmdldCdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX09VVF9UWVBFKSB7XG5cbiAgICAgIGlmICghYmluZGluZy52YXJpYWJsZXMgJiYgIWJpbmRpbmcuc291cmNlICYmICFiaW5kaW5nLnNvdXJjZUV4cHJlc3Npb24pIHtcbiAgICAgICAgZXJyID0gdGhpcy5fbG9nRXJyb3IoXG4gICAgICAgICAgJ3Byb3BlcnR5LmJpbmRpbmcgPCcgKyBiaW5kaW5nVHlwZSArICc+IHJlcXVpcmVzICcgK1xuICAgICAgICAgICd2YXJpYWJsZXMsIHNvdXJjZUV4cHJlc3Npb24gb3Igc291cmNlJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfRVhFQ1VUSU9OX0xJU1RFTkVSKSB7XG5cbiAgICAgIGlmICh0eXBlICE9PSAnSGlkZGVuJykge1xuICAgICAgICBlcnIgPSB0aGlzLl9sb2dFcnJvcihcbiAgICAgICAgICAnaW52YWxpZCBwcm9wZXJ0eSB0eXBlIDwnICsgdHlwZSArICc+IGZvciAnICsgQUNUSVZJVElfRVhFQ1VUSU9OX0xJU1RFTkVSICsgJzsgJyArXG4gICAgICAgICAgJ211c3QgYmUgPEhpZGRlbj4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICFlcnI7XG4gIH07XG5cblxuICB0aGlzLl9sb2dFcnJvciA9IGZ1bmN0aW9uKGVyciwgdGVtcGxhdGUpIHtcblxuICAgIGlmICh0eXBlb2YgZXJyID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgIGVyciA9ICd0ZW1wbGF0ZShpZDogJyArIHRlbXBsYXRlLmlkICsgJykgJyArIGVycjtcbiAgICAgIH1cblxuICAgICAgZXJyID0gbmV3IEVycm9yKGVycik7XG4gICAgfVxuXG4gICAgdGhpcy5fZXJyb3JzLnB1c2goZXJyKTtcblxuICAgIHJldHVybiBlcnI7XG4gIH07XG5cbiAgdGhpcy5nZXRFcnJvcnMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3JzO1xuICB9O1xuXG4gIHRoaXMuZ2V0VmFsaWRUZW1wbGF0ZXMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRUZW1wbGF0ZXM7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVmFsaWRhdG9yO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gaXNEcm9wZG93bkNob2ljZVZhbGlkKGMpIHtcbiAgcmV0dXJuICduYW1lJyBpbiBjICYmICd2YWx1ZScgaW4gYztcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGZpbmRFeHRlbnNpb24gPSByZXF1aXJlKCcuLi9IZWxwZXInKS5maW5kRXh0ZW5zaW9uLFxuICAgIGZpbmRFeHRlbnNpb25zID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZmluZEV4dGVuc2lvbnM7XG5cbnZhciBjcmVhdGVBY3Rpdml0aVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vQ3JlYXRlSGVscGVyJykuY3JlYXRlQWN0aXZpdGlQcm9wZXJ0eSxcbiAgICBjcmVhdGVJbnB1dFBhcmFtZXRlciA9IHJlcXVpcmUoJy4uL0NyZWF0ZUhlbHBlcicpLmNyZWF0ZUlucHV0UGFyYW1ldGVyLFxuICAgIGNyZWF0ZU91dHB1dFBhcmFtZXRlciA9IHJlcXVpcmUoJy4uL0NyZWF0ZUhlbHBlcicpLmNyZWF0ZU91dHB1dFBhcmFtZXRlcixcbiAgICBjcmVhdGVBY3Rpdml0aUluID0gcmVxdWlyZSgnLi4vQ3JlYXRlSGVscGVyJykuY3JlYXRlQWN0aXZpdGlJbixcbiAgICBjcmVhdGVBY3Rpdml0aU91dCA9IHJlcXVpcmUoJy4uL0NyZWF0ZUhlbHBlcicpLmNyZWF0ZUFjdGl2aXRpT3V0LFxuICAgIGNyZWF0ZUFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5LFxuICAgIGNyZWF0ZUFjdGl2aXRpRXhlY3V0aW9uTGlzdGVuZXJTY3JpcHQgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aUV4ZWN1dGlvbkxpc3RlbmVyU2NyaXB0LFxuICAgIGNyZWF0ZUFjdGl2aXRpRmllbGRJbmplY3Rpb24gPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aUZpZWxkSW5qZWN0aW9uO1xuXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XG5cbnZhciBBQ1RJVklUSV9TRVJWSUNFX1RBU0tfTElLRSA9IFtcbiAgJ2FjdGl2aXRpOmNsYXNzJyxcbiAgJ2FjdGl2aXRpOmRlbGVnYXRlRXhwcmVzc2lvbicsXG4gICdhY3Rpdml0aTpleHByZXNzaW9uJ1xuXTtcblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBjaGFuZ2VzIHRoZSBtb2RlbGluZyB0ZW1wbGF0ZSBvZiBhIEJQTU4gZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gQ2hhbmdlRWxlbWVudFRlbXBsYXRlSGFuZGxlcihtb2RlbGluZywgY29tbWFuZFN0YWNrLCBicG1uRmFjdG9yeSkge1xuXG4gIGZ1bmN0aW9uIGdldE9yQ3JlYXRlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCkge1xuXG4gICAgdmFyIGJvID0gZWxlbWVudC5idXNpbmVzc09iamVjdDtcblxuICAgIHZhciBleHRlbnNpb25FbGVtZW50cyA9IGJvLmV4dGVuc2lvbkVsZW1lbnRzO1xuXG4gICAgLy8gYWRkIGV4dGVuc2lvbiBlbGVtZW50c1xuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywge1xuICAgICAgICB2YWx1ZXM6IFtdXG4gICAgICB9KTtcblxuICAgICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzOiBleHRlbnNpb25FbGVtZW50c1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dGVuc2lvbkVsZW1lbnRzO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlTW9kZWxlclRlbXBsYXRlKGVsZW1lbnQsIG5ld1RlbXBsYXRlKSB7XG4gICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICAnYWN0aXZpdGk6bW9kZWxlclRlbXBsYXRlJzogbmV3VGVtcGxhdGUgJiYgbmV3VGVtcGxhdGUuaWRcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUlvTWFwcGluZ3MoZWxlbWVudCwgbmV3VGVtcGxhdGUsIGNvbnRleHQpIHtcblxuICAgIHZhciBuZXdNYXBwaW5ncyA9IGNyZWF0ZUlucHV0T3V0cHV0TWFwcGluZ3MobmV3VGVtcGxhdGUsIGJwbW5GYWN0b3J5KSxcbiAgICAgICAgb2xkTWFwcGluZ3M7XG5cbiAgICBpZiAoIW5ld01hcHBpbmdzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQpIHtcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdCcsIHtcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgYnVzaW5lc3NPYmplY3Q6IGNvbnRleHQsXG4gICAgICAgIHByb3BlcnRpZXM6IHsgaW5wdXRPdXRwdXQ6IG5ld01hcHBpbmdzIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0ID0gZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcbiAgICAgIG9sZE1hcHBpbmdzID0gZmluZEV4dGVuc2lvbihlbGVtZW50LCAnYWN0aXZpdGk6SW5wdXRPdXRwdXQnKTtcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0Jywge1xuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICBjdXJyZW50T2JqZWN0OiBjb250ZXh0LFxuICAgICAgICBwcm9wZXJ0eU5hbWU6ICd2YWx1ZXMnLFxuICAgICAgICBvYmplY3RzVG9BZGQ6IFsgbmV3TWFwcGluZ3MgXSxcbiAgICAgICAgb2JqZWN0c1RvUmVtb3ZlOiBvbGRNYXBwaW5ncyA/IFsgb2xkTWFwcGluZ3MgXSA6IFtdXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVBY3Rpdml0aUZpZWxkKGVsZW1lbnQsIG5ld1RlbXBsYXRlLCBjb250ZXh0KSB7XG5cbiAgICB2YXIgbmV3TWFwcGluZ3MgPSBjcmVhdGVBY3Rpdml0aUZpZWxkSW5qZWN0aW9ucyhuZXdUZW1wbGF0ZSwgYnBtbkZhY3RvcnkpLFxuICAgICAgICBvbGRNYXBwaW5ncztcblxuICAgIGlmICghbmV3TWFwcGluZ3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQpIHtcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdCcsIHtcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgYnVzaW5lc3NPYmplY3Q6IGNvbnRleHQsXG4gICAgICAgIHByb3BlcnRpZXM6IHsgZmllbGQ6IG5ld01hcHBpbmdzIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0ID0gZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcbiAgICAgIG9sZE1hcHBpbmdzID0gZmluZEV4dGVuc2lvbnMoZWxlbWVudCwgWydhY3Rpdml0aTpGaWVsZCddKTtcblxuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0LWxpc3QnLCB7XG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgIGN1cnJlbnRPYmplY3Q6IGNvbnRleHQsXG4gICAgICAgIHByb3BlcnR5TmFtZTogJ3ZhbHVlcycsXG4gICAgICAgIG9iamVjdHNUb0FkZDogbmV3TWFwcGluZ3MsXG4gICAgICAgIG9iamVjdHNUb1JlbW92ZTogb2xkTWFwcGluZ3MgPyBvbGRNYXBwaW5ncyA6IFtdXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUFjdGl2aXRpUHJvcGVydGllcyhlbGVtZW50LCBuZXdUZW1wbGF0ZSwgY29udGV4dCkge1xuXG4gICAgdmFyIG5ld1Byb3BlcnRpZXMgPSBjcmVhdGVBY3Rpdml0aVByb3BlcnRpZXMobmV3VGVtcGxhdGUsIGJwbW5GYWN0b3J5KSxcbiAgICAgICAgb2xkUHJvcGVydGllcztcblxuICAgIGlmICghbmV3UHJvcGVydGllcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjb250ZXh0KSB7XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QnLCB7XG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgIGJ1c2luZXNzT2JqZWN0OiBjb250ZXh0LFxuICAgICAgICBwcm9wZXJ0aWVzOiB7IHByb3BlcnRpZXM6IG5ld1Byb3BlcnRpZXMgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQgPSBnZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpO1xuICAgICAgb2xkUHJvcGVydGllcyA9IGZpbmRFeHRlbnNpb24oZWxlbWVudCwgJ2FjdGl2aXRpOlByb3BlcnRpZXMnKTtcblxuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0LWxpc3QnLCB7XG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgIGN1cnJlbnRPYmplY3Q6IGNvbnRleHQsXG4gICAgICAgIHByb3BlcnR5TmFtZTogJ3ZhbHVlcycsXG4gICAgICAgIG9iamVjdHNUb0FkZDogWyBuZXdQcm9wZXJ0aWVzIF0sXG4gICAgICAgIG9iamVjdHNUb1JlbW92ZTogb2xkUHJvcGVydGllcyA/IFsgb2xkUHJvcGVydGllcyBdIDogW11cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgbmV3VGVtcGxhdGUsIGNvbnRleHQpIHtcblxuICAgIHZhciBuZXdQcm9wZXJ0aWVzID0gY3JlYXRlQnBtblByb3BlcnR5VXBkYXRlcyhuZXdUZW1wbGF0ZSwgYnBtbkZhY3RvcnkpO1xuXG4gICAgdmFyIG5ld1Byb3BlcnRpZXNDb3VudCA9IE9iamVjdC5rZXlzKG5ld1Byb3BlcnRpZXMpLmxlbmd0aDtcblxuICAgIGlmICghbmV3UHJvcGVydGllc0NvdW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQpIHtcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdCcsIHtcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgYnVzaW5lc3NPYmplY3Q6IGNvbnRleHQsXG4gICAgICAgIHByb3BlcnRpZXM6IG5ld1Byb3BlcnRpZXNcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIG5ld1Byb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUluT3V0KGVsZW1lbnQsIG5ld1RlbXBsYXRlLCBjb250ZXh0KSB7XG5cbiAgICB2YXIgbmV3SW5PdXQgPSBjcmVhdGVBY3Rpdml0aUluT3V0KG5ld1RlbXBsYXRlLCBicG1uRmFjdG9yeSksXG4gICAgICAgIG9sZEluT3V0O1xuXG4gICAgaWYgKCFuZXdJbk91dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjb250ZXh0KSB7XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QnLCB7XG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgIGJ1c2luZXNzT2JqZWN0OiBjb250ZXh0LFxuICAgICAgICBwcm9wZXJ0aWVzOiB7IGlub3V0OiBuZXdJbk91dCB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dCA9IGdldE9yQ3JlYXRlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCk7XG4gICAgICBvbGRJbk91dCA9IGZpbmRFeHRlbnNpb25zKGNvbnRleHQsIFsgJ2FjdGl2aXRpOkluJywgJ2FjdGl2aXRpOk91dCcgXSk7XG5cbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0Jywge1xuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICBjdXJyZW50T2JqZWN0OiBjb250ZXh0LFxuICAgICAgICBwcm9wZXJ0eU5hbWU6ICd2YWx1ZXMnLFxuICAgICAgICBvYmplY3RzVG9BZGQ6IG5ld0luT3V0LFxuICAgICAgICBvYmplY3RzVG9SZW1vdmU6IG9sZEluT3V0XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVFeGVjdXRpb25MaXN0ZW5lcihlbGVtZW50LCBuZXdUZW1wbGF0ZSwgY29udGV4dCkge1xuXG4gICAgdmFyIG5ld0V4ZWN1dGlvbkxpc3RlbmVycyA9IGNyZWF0ZUFjdGl2aXRpRXhlY3V0aW9uTGlzdGVuZXJzKG5ld1RlbXBsYXRlLCBicG1uRmFjdG9yeSksXG4gICAgICAgIG9sZEV4ZWN1dGlvbnNMaXN0ZW5lcnM7XG5cbiAgICBpZiAoIW5ld0V4ZWN1dGlvbkxpc3RlbmVycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dCkge1xuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0Jywge1xuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICBidXNpbmVzc09iamVjdDogY29udGV4dCxcbiAgICAgICAgcHJvcGVydGllczogeyBleGVjdXRpb25MaXN0ZW5lcjogbmV3RXhlY3V0aW9uTGlzdGVuZXJzIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0ID0gZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcbiAgICAgIG9sZEV4ZWN1dGlvbnNMaXN0ZW5lcnMgPSBmaW5kRXh0ZW5zaW9ucyhjb250ZXh0LCBbICdhY3Rpdml0aTpFeGVjdXRpb25MaXN0ZW5lcicgXSk7XG5cbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0Jywge1xuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICBjdXJyZW50T2JqZWN0OiBjb250ZXh0LFxuICAgICAgICBwcm9wZXJ0eU5hbWU6ICd2YWx1ZXMnLFxuICAgICAgICBvYmplY3RzVG9BZGQ6IG5ld0V4ZWN1dGlvbkxpc3RlbmVycyxcbiAgICAgICAgb2JqZWN0c1RvUmVtb3ZlOiBvbGRFeGVjdXRpb25zTGlzdGVuZXJzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIC8gcmVjcmVhdGUgYSBzY29wZWQgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudCB0aGUgZGlhZ3JhbSBwYXJlbnQgZWxlbWVudFxuICAgKiBAcGFyYW0ge1N0cmluZ30gc2NvcGVOYW1lIG5hbWUgb2YgdGhlIHNjb3BlLCBpLmUuIGFjdGl2aXRpOkNvbm5lY3RvclxuICAgKiBAcGFyYW0ge09iamVjdH0gc2NvcGVEZWZpbml0aW9uXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGVTY29wZUVsZW1lbnRzKGVsZW1lbnQsIHNjb3BlTmFtZSwgc2NvcGVEZWZpbml0aW9uKSB7XG5cbiAgICB2YXIgc2NvcGVFbGVtZW50ID0gYnBtbkZhY3RvcnkuY3JlYXRlKHNjb3BlTmFtZSk7XG5cbiAgICAvLyB1cGRhdGUgYWN0aXZpdGk6aW5wdXRPdXRwdXRcbiAgICB1cGRhdGVJb01hcHBpbmdzKGVsZW1lbnQsIHNjb3BlRGVmaW5pdGlvbiwgc2NvcGVFbGVtZW50KTtcblxuICAgIC8vIHVwZGF0ZSBhY3Rpdml0aTpmaWVsZFxuICAgIHVwZGF0ZUFjdGl2aXRpRmllbGQoZWxlbWVudCwgc2NvcGVEZWZpbml0aW9uLCBzY29wZUVsZW1lbnQpO1xuXG4gICAgLy8gdXBkYXRlIGFjdGl2aXRpOnByb3BlcnRpZXNcbiAgICB1cGRhdGVBY3Rpdml0aVByb3BlcnRpZXMoZWxlbWVudCwgc2NvcGVEZWZpbml0aW9uLCBzY29wZUVsZW1lbnQpO1xuXG4gICAgLy8gdXBkYXRlIG90aGVyIHByb3BlcnRpZXMgKGJwbW46Y29uZGl0aW9uLCBhY3Rpdml0aTphc3luYywgLi4uKVxuICAgIHVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgc2NvcGVEZWZpbml0aW9uLCBzY29wZUVsZW1lbnQpO1xuXG4gICAgLy8gdXBkYXRlIGFjdGl2aXRpOmluIGFuZCBhY3Rpdml0aTpvdXRcbiAgICB1cGRhdGVJbk91dChlbGVtZW50LCBzY29wZURlZmluaXRpb24sIHNjb3BlRWxlbWVudCk7XG5cbiAgICAvLyB1cGRhdGUgYWN0aXZpdGk6ZXhlY3V0aW9uTGlzdGVuZXJcbiAgICB1cGRhdGVFeGVjdXRpb25MaXN0ZW5lcihlbGVtZW50LCBzY29wZURlZmluaXRpb24sIHNjb3BlRWxlbWVudCk7XG5cbiAgICB2YXIgZXh0ZW5zaW9uRWxlbWVudHMgPSBnZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpO1xuICAgIHZhciBvbGRTY29wZSA9IGZpbmRFeHRlbnNpb24oZXh0ZW5zaW9uRWxlbWVudHMsIHNjb3BlTmFtZSk7XG5cbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QtbGlzdCcsIHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBjdXJyZW50T2JqZWN0OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgIHByb3BlcnR5TmFtZTogJ3ZhbHVlcycsXG4gICAgICBvYmplY3RzVG9BZGQ6IFsgc2NvcGVFbGVtZW50IF0sXG4gICAgICBvYmplY3RzVG9SZW1vdmU6IG9sZFNjb3BlID8gWyBvbGRTY29wZSBdIDogW11cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wb3NlIGFuIGVsZW1lbnQgdGVtcGxhdGUgY2hhbmdlIGFjdGlvbiwgdXBkYXRpbmcgYWxsXG4gICAqIG5lY2Vzc2FyeSB1bmRlcmx5aW5nIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0LmVsZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQub2xkVGVtcGxhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQubmV3VGVtcGxhdGVcbiAgICovXG4gIHRoaXMucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50LFxuICAgICAgICBuZXdUZW1wbGF0ZSA9IGNvbnRleHQubmV3VGVtcGxhdGU7XG5cbiAgICAvLyB1cGRhdGUgYWN0aXZpdGk6bW9kZWxlclRlbXBsYXRlIGF0dHJpYnV0ZVxuICAgIHVwZGF0ZU1vZGVsZXJUZW1wbGF0ZShlbGVtZW50LCBuZXdUZW1wbGF0ZSk7XG5cbiAgICBpZiAobmV3VGVtcGxhdGUpIHtcblxuICAgICAgLy8gdXBkYXRlIGFjdGl2aXRpOmlucHV0T3V0cHV0XG4gICAgICB1cGRhdGVJb01hcHBpbmdzKGVsZW1lbnQsIG5ld1RlbXBsYXRlKTtcblxuICAgICAgLy8gdXBkYXRlIGFjdGl2aXRpOmZpZWxkXG4gICAgICB1cGRhdGVBY3Rpdml0aUZpZWxkKGVsZW1lbnQsIG5ld1RlbXBsYXRlKTtcblxuICAgICAgLy8gdXBkYXRlIGFjdGl2aXRpOnByb3BlcnRpZXNcbiAgICAgIHVwZGF0ZUFjdGl2aXRpUHJvcGVydGllcyhlbGVtZW50LCBuZXdUZW1wbGF0ZSk7XG5cbiAgICAgIC8vIHVwZGF0ZSBvdGhlciBwcm9wZXJ0aWVzIChicG1uOmNvbmRpdGlvbiwgYWN0aXZpdGk6YXN5bmMsIC4uLilcbiAgICAgIHVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgbmV3VGVtcGxhdGUpO1xuXG4gICAgICAvLyB1cGRhdGUgYWN0aXZpdGk6aW4gYW5kIGFjdGl2aXRpOm91dFxuICAgICAgdXBkYXRlSW5PdXQoZWxlbWVudCwgbmV3VGVtcGxhdGUpO1xuXG4gICAgICAvLyB1cGRhdGUgYWN0aXZpdGk6ZXhlY3V0aW9uTGlzdGVuZXJcbiAgICAgIHVwZGF0ZUV4ZWN1dGlvbkxpc3RlbmVyKGVsZW1lbnQsIG5ld1RlbXBsYXRlKTtcblxuICAgICAgLy8gbG9vcCBvbiBzY29wZXMgcHJvcGVydGllc1xuICAgICAgZm9yRWFjaChuZXdUZW1wbGF0ZS5zY29wZXMsIGZ1bmN0aW9uKHNjb3BlRGVmaW5pdGlvbiwgc2NvcGVOYW1lKSB7XG4gICAgICAgIHVwZGF0ZVNjb3BlRWxlbWVudHMoZWxlbWVudCwgc2NvcGVOYW1lLCBzY29wZURlZmluaXRpb24pO1xuICAgICAgfSk7XG5cbiAgICB9XG4gIH07XG59XG5cbkNoYW5nZUVsZW1lbnRUZW1wbGF0ZUhhbmRsZXIuJGluamVjdCA9IFsgJ21vZGVsaW5nJywgJ2NvbW1hbmRTdGFjaycsICdicG1uRmFjdG9yeScgXTtcblxubW9kdWxlLmV4cG9ydHMgPSBDaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyO1xuXG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBjcmVhdGVCcG1uUHJvcGVydHlVcGRhdGVzKHRlbXBsYXRlLCBicG1uRmFjdG9yeSkge1xuXG4gIHZhciBwcm9wZXJ0eVVwZGF0ZXMgPSB7fTtcblxuICB0ZW1wbGF0ZS5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocCkge1xuXG4gICAgdmFyIGJpbmRpbmcgPSBwLmJpbmRpbmcsXG4gICAgICAgIGJpbmRpbmdUYXJnZXQgPSBiaW5kaW5nLm5hbWUsXG4gICAgICAgIHByb3BlcnR5VmFsdWU7XG5cbiAgICBpZiAoYmluZGluZy50eXBlID09PSAncHJvcGVydHknKSB7XG5cbiAgICAgIGlmIChiaW5kaW5nVGFyZ2V0ID09PSAnY29uZGl0aW9uRXhwcmVzc2lvbicpIHtcbiAgICAgICAgcHJvcGVydHlWYWx1ZSA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpGb3JtYWxFeHByZXNzaW9uJywge1xuICAgICAgICAgIGJvZHk6IHAudmFsdWUsXG4gICAgICAgICAgbGFuZ3VhZ2U6IGJpbmRpbmcuc2NyaXB0Rm9ybWF0XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvcGVydHlWYWx1ZSA9IHAudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGFzc2lnbmluZyBhY3Rpdml0aTphc3luYyB0byB0cnVlfGZhbHNlXG4gICAgICAvLyBhc3NpZ25pbmcgYnBtbjpjb25kaXRpb25FeHByZXNzaW9uIHRvIHsgJHR5cGU6ICdicG1uOkZvcm1hbEV4cHJlc3Npb24nLCAuLi4gfVxuICAgICAgcHJvcGVydHlVcGRhdGVzW2JpbmRpbmdUYXJnZXRdID0gcHJvcGVydHlWYWx1ZTtcblxuICAgICAgLy8gbWFrZSBzdXJlIHdlIHVuc2V0IG90aGVyIFwiaW1wbGVtZW50YXRpb24gdHlwZXNcIlxuICAgICAgLy8gd2hlbiBhcHBseWluZyBhIGFjdGl2aXRpOmNsYXNzIHRlbXBsYXRlIG9udG8gYSBwcmVjb25maWd1cmVkXG4gICAgICAvLyBhY3Rpdml0aTpkZWxlZ2F0ZUV4cHJlc3Npb24gZWxlbWVudFxuICAgICAgaWYgKEFDVElWSVRJX1NFUlZJQ0VfVEFTS19MSUtFLmluZGV4T2YoYmluZGluZ1RhcmdldCkgIT09IC0xKSB7XG4gICAgICAgIEFDVElWSVRJX1NFUlZJQ0VfVEFTS19MSUtFLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICAgICAgICAgIGlmIChwcm9wICE9PSBiaW5kaW5nVGFyZ2V0KSB7XG4gICAgICAgICAgICBwcm9wZXJ0eVVwZGF0ZXNbcHJvcF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwcm9wZXJ0eVVwZGF0ZXM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFjdGl2aXRpRmllbGRJbmplY3Rpb25zKHRlbXBsYXRlLCBicG1uRmFjdG9yeSkge1xuICB2YXIgaW5qZWN0aW9ucyA9IFtdO1xuXG4gIHRlbXBsYXRlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwKSB7XG4gICAgdmFyIGJpbmRpbmcgPSBwLmJpbmRpbmcsXG4gICAgICAgIGJpbmRpbmdUeXBlID0gYmluZGluZy50eXBlO1xuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gJ2FjdGl2aXRpOmZpZWxkJykge1xuICAgICAgaW5qZWN0aW9ucy5wdXNoKGNyZWF0ZUFjdGl2aXRpRmllbGRJbmplY3Rpb24oXG4gICAgICAgIGJpbmRpbmcsIHAudmFsdWUsIGJwbW5GYWN0b3J5XG4gICAgICApKTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChpbmplY3Rpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBpbmplY3Rpb25zO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFjdGl2aXRpUHJvcGVydGllcyh0ZW1wbGF0ZSwgYnBtbkZhY3RvcnkpIHtcblxuICB2YXIgcHJvcGVydGllcyA9IFtdO1xuXG4gIHRlbXBsYXRlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwKSB7XG4gICAgdmFyIGJpbmRpbmcgPSBwLmJpbmRpbmcsXG4gICAgICAgIGJpbmRpbmdUeXBlID0gYmluZGluZy50eXBlO1xuXG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSAnYWN0aXZpdGk6cHJvcGVydHknKSB7XG4gICAgICBwcm9wZXJ0aWVzLnB1c2goY3JlYXRlQWN0aXZpdGlQcm9wZXJ0eShcbiAgICAgICAgYmluZGluZywgcC52YWx1ZSwgYnBtbkZhY3RvcnlcbiAgICAgICkpO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJwbW5GYWN0b3J5LmNyZWF0ZSgnYWN0aXZpdGk6UHJvcGVydGllcycsIHtcbiAgICAgIHZhbHVlczogcHJvcGVydGllc1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0T3V0cHV0TWFwcGluZ3ModGVtcGxhdGUsIGJwbW5GYWN0b3J5KSB7XG5cbiAgdmFyIGlucHV0UGFyYW1ldGVycyA9IFtdLFxuICAgICAgb3V0cHV0UGFyYW1ldGVycyA9IFtdO1xuXG4gIHRlbXBsYXRlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwKSB7XG4gICAgdmFyIGJpbmRpbmcgPSBwLmJpbmRpbmcsXG4gICAgICAgIGJpbmRpbmdUeXBlID0gYmluZGluZy50eXBlO1xuXG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSAnYWN0aXZpdGk6aW5wdXRQYXJhbWV0ZXInKSB7XG4gICAgICBpbnB1dFBhcmFtZXRlcnMucHVzaChjcmVhdGVJbnB1dFBhcmFtZXRlcihcbiAgICAgICAgYmluZGluZywgcC52YWx1ZSwgYnBtbkZhY3RvcnlcbiAgICAgICkpO1xuICAgIH1cblxuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gJ2FjdGl2aXRpOm91dHB1dFBhcmFtZXRlcicpIHtcbiAgICAgIG91dHB1dFBhcmFtZXRlcnMucHVzaChjcmVhdGVPdXRwdXRQYXJhbWV0ZXIoXG4gICAgICAgIGJpbmRpbmcsIHAudmFsdWUsIGJwbW5GYWN0b3J5XG4gICAgICApKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGRvIHdlIG5lZWQgdG8gY3JlYXRlIG5ldyBpb01hcHBpbmdzICg/KVxuICBpZiAob3V0cHV0UGFyYW1ldGVycy5sZW5ndGggfHwgaW5wdXRQYXJhbWV0ZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOklucHV0T3V0cHV0Jywge1xuICAgICAgaW5wdXRQYXJhbWV0ZXJzOiBpbnB1dFBhcmFtZXRlcnMsXG4gICAgICBvdXRwdXRQYXJhbWV0ZXJzOiBvdXRwdXRQYXJhbWV0ZXJzXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQWN0aXZpdGlJbk91dCh0ZW1wbGF0ZSwgYnBtbkZhY3RvcnkpIHtcblxuICB2YXIgaW5PdXRzID0gW107XG5cbiAgdGVtcGxhdGUucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKHApIHtcbiAgICB2YXIgYmluZGluZyA9IHAuYmluZGluZyxcbiAgICAgICAgYmluZGluZ1R5cGUgPSBiaW5kaW5nLnR5cGU7XG5cbiAgICBpZiAoYmluZGluZ1R5cGUgPT09ICdhY3Rpdml0aTppbicpIHtcbiAgICAgIGluT3V0cy5wdXNoKGNyZWF0ZUFjdGl2aXRpSW4oXG4gICAgICAgIGJpbmRpbmcsIHAudmFsdWUsIGJwbW5GYWN0b3J5XG4gICAgICApKTtcbiAgICB9IGVsc2VcbiAgICBpZiAoYmluZGluZ1R5cGUgPT09ICdhY3Rpdml0aTpvdXQnKSB7XG4gICAgICBpbk91dHMucHVzaChjcmVhdGVBY3Rpdml0aU91dChcbiAgICAgICAgYmluZGluZywgcC52YWx1ZSwgYnBtbkZhY3RvcnlcbiAgICAgICkpO1xuICAgIH0gZWxzZVxuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gJ2FjdGl2aXRpOmluOmJ1c2luZXNzS2V5Jykge1xuICAgICAgaW5PdXRzLnB1c2goY3JlYXRlQWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleShcbiAgICAgICAgYmluZGluZywgcC52YWx1ZSwgYnBtbkZhY3RvcnlcbiAgICAgICkpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGluT3V0cztcbn1cblxuXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aUV4ZWN1dGlvbkxpc3RlbmVycyh0ZW1wbGF0ZSwgYnBtbkZhY3RvcnkpIHtcblxuICB2YXIgZXhlY3V0aW9uTGlzdGVuZXIgPSBbXTtcblxuICB0ZW1wbGF0ZS5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocCkge1xuICAgIHZhciBiaW5kaW5nID0gcC5iaW5kaW5nLFxuICAgICAgICBiaW5kaW5nVHlwZSA9IGJpbmRpbmcudHlwZTtcblxuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gJ2FjdGl2aXRpOmV4ZWN1dGlvbkxpc3RlbmVyJykge1xuICAgICAgZXhlY3V0aW9uTGlzdGVuZXIucHVzaChjcmVhdGVBY3Rpdml0aUV4ZWN1dGlvbkxpc3RlbmVyU2NyaXB0KFxuICAgICAgICBiaW5kaW5nLCBwLnZhbHVlLCBicG1uRmFjdG9yeVxuICAgICAgKSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZXhlY3V0aW9uTGlzdGVuZXI7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBDaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyID0gcmVxdWlyZSgnLi9DaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyJyk7XG5cbnZhciBnZXRUZW1wbGF0ZSA9IHJlcXVpcmUoJy4uL0hlbHBlcicpLmdldFRlbXBsYXRlLFxuICAgIGdldERlZmF1bHRUZW1wbGF0ZSA9IHJlcXVpcmUoJy4uL0hlbHBlcicpLmdldERlZmF1bHRUZW1wbGF0ZTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJIYW5kbGVycyhjb21tYW5kU3RhY2ssIGVsZW1lbnRUZW1wbGF0ZXMsIGV2ZW50QnVzLCBlbGVtZW50UmVnaXN0cnkpIHtcbiAgY29tbWFuZFN0YWNrLnJlZ2lzdGVySGFuZGxlcihcbiAgICAncHJvcGVydGllc1BhbmVsLmFjdGl2aXRpLmNoYW5nZVRlbXBsYXRlJyxcbiAgICBDaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyXG4gICk7XG5cbiAgLy8gYXBwbHkgZGVmYXVsdCBlbGVtZW50IHRlbXBsYXRlcyBvbiBzaGFwZSBjcmVhdGlvblxuICBldmVudEJ1cy5vbihbICdjb21tYW5kU3RhY2suc2hhcGUuY3JlYXRlLnBvc3RFeGVjdXRlZCcgXSwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIGFwcGx5RGVmYXVsdFRlbXBsYXRlKGNvbnRleHQuY29udGV4dC5zaGFwZSwgZWxlbWVudFRlbXBsYXRlcywgY29tbWFuZFN0YWNrKTtcbiAgfSk7XG5cbiAgLy8gYXBwbHkgZGVmYXVsdCBlbGVtZW50IHRlbXBsYXRlcyBvbiBjb25uZWN0aW9uIGNyZWF0aW9uXG4gIGV2ZW50QnVzLm9uKFsgJ2NvbW1hbmRTdGFjay5jb25uZWN0aW9uLmNyZWF0ZS5wb3N0RXhlY3V0ZWQnIF0sIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICBhcHBseURlZmF1bHRUZW1wbGF0ZShjb250ZXh0LmNvbnRleHQuY29ubmVjdGlvbiwgZWxlbWVudFRlbXBsYXRlcywgY29tbWFuZFN0YWNrKTtcbiAgfSk7XG59XG5cbnJlZ2lzdGVySGFuZGxlcnMuJGluamVjdCA9IFsgJ2NvbW1hbmRTdGFjaycsICdlbGVtZW50VGVtcGxhdGVzJywgJ2V2ZW50QnVzJywgJ2VsZW1lbnRSZWdpc3RyeScgXTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgX19pbml0X186IFsgcmVnaXN0ZXJIYW5kbGVycyBdXG59O1xuXG5cbmZ1bmN0aW9uIGFwcGx5RGVmYXVsdFRlbXBsYXRlKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZXMsIGNvbW1hbmRTdGFjaykge1xuXG4gIGlmICghZ2V0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcylcbiAgICAgICYmIGdldERlZmF1bHRUZW1wbGF0ZShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzKSkge1xuXG4gICAgdmFyIGNvbW1hbmQgPSAncHJvcGVydGllc1BhbmVsLmFjdGl2aXRpLmNoYW5nZVRlbXBsYXRlJztcbiAgICB2YXIgY29tbWFuZENvbnRleHQgPSB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgbmV3VGVtcGxhdGU6IGdldERlZmF1bHRUZW1wbGF0ZShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzKVxuICAgIH07XG5cbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZShjb21tYW5kLCBjb21tYW5kQ29udGV4dCk7XG4gIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIHJlcXVpcmUoJy4vY21kL2luZGV4JyksXG4gICAgcmVxdWlyZSgnZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUnKS5kZWZhdWx0XG4gIF0sXG4gIF9faW5pdF9fOiBbXG4gICAgJ2N1c3RvbUVsZW1lbnRzUHJvcGVydGllc0FjdGl2YXRvcicsXG4gICAgJ2VsZW1lbnRUZW1wbGF0ZXNMb2FkZXInXG4gIF0sXG4gIGN1c3RvbUVsZW1lbnRzUHJvcGVydGllc0FjdGl2YXRvcjogWyAndHlwZScsIHJlcXVpcmUoJy4vQ3VzdG9tRWxlbWVudHNQcm9wZXJ0aWVzQWN0aXZhdG9yJykgXSxcbiAgZWxlbWVudFRlbXBsYXRlczogWyAndHlwZScsIHJlcXVpcmUoJy4vRWxlbWVudFRlbXBsYXRlcycpIF0sXG4gIGVsZW1lbnRUZW1wbGF0ZXNMb2FkZXI6IFsgJ3R5cGUnLCByZXF1aXJlKCcuL0VsZW1lbnRUZW1wbGF0ZXNMb2FkZXInKSBdXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXG4gICAgZ2V0VGVtcGxhdGUgPSByZXF1aXJlKCcuLi9IZWxwZXInKS5nZXRUZW1wbGF0ZSxcbiAgICBnZXRUZW1wbGF0ZUlkID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZ2V0VGVtcGxhdGVJZDtcblxudmFyIGZpbmQgPSByZXF1aXJlKCdsb2Rhc2gvZmluZCcpO1xuXG52YXIgVEVNUExBVEVfQVRUUiA9IHJlcXVpcmUoJy4uL0hlbHBlcicpLlRFTVBMQVRFX0FUVFI7XG5cbmZ1bmN0aW9uIGlzQW55KGVsZW1lbnQsIHR5cGVzKSB7XG4gIHJldHVybiB0eXBlcy5yZWR1Y2UoZnVuY3Rpb24ocmVzdWx0LCB0eXBlKSB7XG4gICAgcmV0dXJuIHJlc3VsdCB8fCBpcyhlbGVtZW50LCB0eXBlKTtcbiAgfSwgZmFsc2UpO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZXMsIHRyYW5zbGF0ZSkge1xuXG4gIHZhciBvcHRpb25zID0gZ2V0VGVtcGxhdGVPcHRpb25zKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZXMsIHRyYW5zbGF0ZSk7XG5cbiAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAxICYmICFvcHRpb25zWzBdLmlzRGVmYXVsdCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHNlbGVjdCBlbGVtZW50IHRlbXBsYXRlICh2aWEgZHJvcGRvd24pXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3Rvcnkuc2VsZWN0Qm94KHtcbiAgICBpZDogJ2VsZW1lbnRUZW1wbGF0ZS1jaG9vc2VyJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdFbGVtZW50IFRlbXBsYXRlJyksXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2FjdGl2aXRpOm1vZGVsZXJUZW1wbGF0ZScsXG4gICAgc2VsZWN0T3B0aW9uczogb3B0aW9ucyxcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnRpZXMpIHtcbiAgICAgIHJldHVybiBhcHBseVRlbXBsYXRlKGVsZW1lbnQsIHByb3BlcnRpZXNbVEVNUExBVEVfQVRUUl0sIGVsZW1lbnRUZW1wbGF0ZXMpO1xuICAgIH0sXG4gICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHRlbXBsYXRlID0gZ2V0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcyk7XG5cbiAgICAgIHJldHVybiB0ZW1wbGF0ZSAmJiBpc0RlZmF1bHRUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG4gICAgfVxuICB9KSk7XG5cbn07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBhcHBseVRlbXBsYXRlKGVsZW1lbnQsIG5ld1RlbXBsYXRlSWQsIGVsZW1lbnRUZW1wbGF0ZXMpIHtcblxuICAvLyBjbGVhbnVwXG4gIC8vIGNsZWFyIGlucHV0IG91dHB1dCBtYXBwaW5nc1xuICAvLyB1bmRvIGNoYW5nZXMgdG8gcHJvcGVydGllcyBkZWZpbmVkIGluIHRlbXBsYXRlXG5cbiAgLy8gcmUtZXN0YWJsaXNoXG4gIC8vIHNldCBpbnB1dCBvdXRwdXQgbWFwcGluZ3NcbiAgLy8gYXBwbHkgY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGFzIGRlZmluZWQgaW4gbmV3IHRlbXBsYXRlXG5cbiAgdmFyIG9sZFRlbXBsYXRlID0gZ2V0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcyksXG4gICAgICBuZXdUZW1wbGF0ZSA9IGVsZW1lbnRUZW1wbGF0ZXMuZ2V0KG5ld1RlbXBsYXRlSWQpO1xuXG4gIGlmIChvbGRUZW1wbGF0ZSA9PT0gbmV3VGVtcGxhdGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNtZDogJ3Byb3BlcnRpZXNQYW5lbC5hY3Rpdml0aS5jaGFuZ2VUZW1wbGF0ZScsXG4gICAgY29udGV4dDoge1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIG9sZFRlbXBsYXRlOiBvbGRUZW1wbGF0ZSxcbiAgICAgIG5ld1RlbXBsYXRlOiBuZXdUZW1wbGF0ZVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0VGVtcGxhdGVPcHRpb25zKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZXMsIHRyYW5zbGF0ZSkge1xuXG4gIHZhciBjdXJyZW50VGVtcGxhdGVJZCA9IGdldFRlbXBsYXRlSWQoZWxlbWVudCk7XG5cbiAgdmFyIGVtcHR5T3B0aW9uID0ge1xuICAgIG5hbWU6ICcnLFxuICAgIHZhbHVlOiAnJ1xuICB9O1xuXG4gIHZhciBhbGxPcHRpb25zID0gZWxlbWVudFRlbXBsYXRlcy5nZXRBbGwoKS5yZWR1Y2UoZnVuY3Rpb24odGVtcGxhdGVzLCB0KSB7XG4gICAgaWYgKCFpc0FueShlbGVtZW50LCB0LmFwcGxpZXNUbykpIHtcbiAgICAgIHJldHVybiB0ZW1wbGF0ZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXBsYXRlcy5jb25jYXQoe1xuICAgICAgbmFtZTogdHJhbnNsYXRlKHQubmFtZSksXG4gICAgICB2YWx1ZTogdC5pZCxcbiAgICAgIGlzRGVmYXVsdDogdC5pc0RlZmF1bHRcbiAgICB9KTtcbiAgfSwgWyBlbXB0eU9wdGlvbiBdKTtcblxuXG4gIHZhciBkZWZhdWx0T3B0aW9uID0gZmluZChhbGxPcHRpb25zLCBmdW5jdGlvbihvcHRpb24pIHtcbiAgICByZXR1cm4gaXNEZWZhdWx0VGVtcGxhdGUob3B0aW9uKTtcbiAgfSk7XG5cbiAgdmFyIGN1cnJlbnRPcHRpb24gPSBmaW5kKGFsbE9wdGlvbnMsIGZ1bmN0aW9uKG9wdGlvbikge1xuICAgIHJldHVybiBvcHRpb24udmFsdWUgPT09IGN1cnJlbnRUZW1wbGF0ZUlkO1xuICB9KTtcblxuICBpZiAoY3VycmVudFRlbXBsYXRlSWQgJiYgIWN1cnJlbnRPcHRpb24pIHtcbiAgICBjdXJyZW50T3B0aW9uID0gdW5rbm93blRlbXBsYXRlKGN1cnJlbnRUZW1wbGF0ZUlkLCB0cmFuc2xhdGUpO1xuXG4gICAgYWxsT3B0aW9ucy5wdXNoKGN1cnJlbnRPcHRpb24pO1xuICB9XG5cbiAgaWYgKCFkZWZhdWx0T3B0aW9uKSB7XG5cbiAgICAvLyByZXR1cm4gYWxsIG9wdGlvbnMsIGluY2x1ZGluZyBlbXB0eVxuICAgIC8vIGFuZCBvcHRpb25hbGx5IHVua25vd25UZW1wbGF0ZSBvcHRpb25cbiAgICByZXR1cm4gYWxsT3B0aW9ucztcbiAgfVxuXG4gIC8vIHNwZWNpYWwgbGltaXRlZCBoYW5kbGluZyBmb3JcbiAgLy8gZGVmYXVsdCBvcHRpb25zXG5cbiAgdmFyIG9wdGlvbnMgPSBbXTtcblxuICAvLyBjdXJyZW50IHRlbXBsYXRlIG5vdCBzZXRcbiAgaWYgKCFjdXJyZW50VGVtcGxhdGVJZCkge1xuICAgIG9wdGlvbnMucHVzaCh7XG4gICAgICBuYW1lOiAnJyxcbiAgICAgIHZhbHVlOiAnJ1xuICAgIH0pO1xuICB9XG5cbiAgLy8gY3VycmVudCB0ZW1wbGF0ZSBub3QgZGVmYXVsdFxuICBpZiAoY3VycmVudE9wdGlvbiAmJiBjdXJyZW50T3B0aW9uICE9PSBkZWZhdWx0T3B0aW9uKSB7XG4gICAgb3B0aW9ucy5wdXNoKGN1cnJlbnRPcHRpb24pO1xuICB9XG5cbiAgb3B0aW9ucy5wdXNoKGRlZmF1bHRPcHRpb24pO1xuXG4gIC8vIFsgKGVtcHR5KSwgKGN1cnJlbnQpLCBkZWZhdWx0T3B0aW9uIF1cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmZ1bmN0aW9uIHVua25vd25UZW1wbGF0ZSh0ZW1wbGF0ZUlkLCB0cmFuc2xhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiB0cmFuc2xhdGUoJ1t1bmtub3duIHRlbXBsYXRlOiB7dGVtcGxhdGVJZH1dJywgeyB0ZW1wbGF0ZUlkOiB0ZW1wbGF0ZUlkIH0pLFxuICAgIHZhbHVlOiB0ZW1wbGF0ZUlkXG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzRGVmYXVsdFRlbXBsYXRlKGVsZW1lbnRUZW1wbGF0ZSkge1xuICByZXR1cm4gZWxlbWVudFRlbXBsYXRlLmlzRGVmYXVsdDtcbn0iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XG5cbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcbiAgICBnZXRUZW1wbGF0ZSA9IHJlcXVpcmUoJy4uL0hlbHBlcicpLmdldFRlbXBsYXRlLFxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKSxcbiAgICBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKTtcblxudmFyIGZpbmRFeHRlbnNpb24gPSByZXF1aXJlKCcuLi9IZWxwZXInKS5maW5kRXh0ZW5zaW9uLFxuICAgIGZpbmRFeHRlbnNpb25zID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZmluZEV4dGVuc2lvbnMsXG4gICAgZmluZElucHV0UGFyYW1ldGVyID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZmluZElucHV0UGFyYW1ldGVyLFxuICAgIGZpbmRPdXRwdXRQYXJhbWV0ZXIgPSByZXF1aXJlKCcuLi9IZWxwZXInKS5maW5kT3V0cHV0UGFyYW1ldGVyLFxuICAgIGZpbmRBY3Rpdml0aVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZmluZEFjdGl2aXRpUHJvcGVydHksXG4gICAgZmluZEFjdGl2aXRpSW5PdXQgPSByZXF1aXJlKCcuLi9IZWxwZXInKS5maW5kQWN0aXZpdGlJbk91dDtcblxudmFyIGNyZWF0ZUFjdGl2aXRpUHJvcGVydHkgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aVByb3BlcnR5LFxuICAgIGNyZWF0ZUlucHV0UGFyYW1ldGVyID0gcmVxdWlyZSgnLi4vQ3JlYXRlSGVscGVyJykuY3JlYXRlSW5wdXRQYXJhbWV0ZXIsXG4gICAgY3JlYXRlT3V0cHV0UGFyYW1ldGVyID0gcmVxdWlyZSgnLi4vQ3JlYXRlSGVscGVyJykuY3JlYXRlT3V0cHV0UGFyYW1ldGVyLFxuICAgIGNyZWF0ZUFjdGl2aXRpSW4gPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aUluLFxuICAgIGNyZWF0ZUFjdGl2aXRpT3V0ID0gcmVxdWlyZSgnLi4vQ3JlYXRlSGVscGVyJykuY3JlYXRlQWN0aXZpdGlPdXQsXG4gICAgY3JlYXRlQWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleSA9IHJlcXVpcmUoJy4uL0NyZWF0ZUhlbHBlcicpLmNyZWF0ZUFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXksXG4gICAgY3JlYXRlQWN0aXZpdGlGaWVsZEluamVjdGlvbiA9IHJlcXVpcmUoJy4uL0NyZWF0ZUhlbHBlcicpLmNyZWF0ZUFjdGl2aXRpRmllbGRJbmplY3Rpb247XG5cbnZhciBBQ1RJVklUSV9QUk9QRVJUWV9UWVBFID0gJ2FjdGl2aXRpOnByb3BlcnR5JyxcbiAgICBBQ1RJVklUSV9JTlBVVF9QQVJBTUVURVJfVFlQRSA9ICdhY3Rpdml0aTppbnB1dFBhcmFtZXRlcicsXG4gICAgQUNUSVZJVElfT1VUUFVUX1BBUkFNRVRFUl9UWVBFID0gJ2FjdGl2aXRpOm91dHB1dFBhcmFtZXRlcicsXG4gICAgQUNUSVZJVElfSU5fVFlQRSA9ICdhY3Rpdml0aTppbicsXG4gICAgQUNUSVZJVElfT1VUX1RZUEUgPSAnYWN0aXZpdGk6b3V0JyxcbiAgICBBQ1RJVklUSV9JTl9CVVNJTkVTU19LRVlfVFlQRSA9ICdhY3Rpdml0aTppbjpidXNpbmVzc0tleScsXG4gICAgQUNUSVZJVElfRVhFQ1VUSU9OX0xJU1RFTkVSX1RZUEUgPSAnYWN0aXZpdGk6ZXhlY3V0aW9uTGlzdGVuZXInLFxuICAgIEFDVElWSVRJX0ZJRUxEID0gJ2FjdGl2aXRpOmZpZWxkJztcblxudmFyIEJBU0lDX01PRERMRV9UWVBFUyA9IFtcbiAgJ0Jvb2xlYW4nLFxuICAnSW50ZWdlcicsXG4gICdTdHJpbmcnXG5dO1xuXG52YXIgRVhURU5TSU9OX0JJTkRJTkdfVFlQRVMgPSBbXG4gIEFDVElWSVRJX1BST1BFUlRZX1RZUEUsXG4gIEFDVElWSVRJX0lOUFVUX1BBUkFNRVRFUl9UWVBFLFxuICBBQ1RJVklUSV9PVVRQVVRfUEFSQU1FVEVSX1RZUEUsXG4gIEFDVElWSVRJX0lOX1RZUEUsXG4gIEFDVElWSVRJX09VVF9UWVBFLFxuICBBQ1RJVklUSV9JTl9CVVNJTkVTU19LRVlfVFlQRSxcbiAgQUNUSVZJVElfRklFTERcbl07XG5cbnZhciBJT19CSU5ESU5HX1RZUEVTID0gW1xuICBBQ1RJVklUSV9JTlBVVF9QQVJBTUVURVJfVFlQRSxcbiAgQUNUSVZJVElfT1VUUFVUX1BBUkFNRVRFUl9UWVBFXG5dO1xuXG52YXIgSU5fT1VUX0JJTkRJTkdfVFlQRVMgPSBbXG4gIEFDVElWSVRJX0lOX1RZUEUsXG4gIEFDVElWSVRJX09VVF9UWVBFLFxuICBBQ1RJVklUSV9JTl9CVVNJTkVTU19LRVlfVFlQRVxuXTtcblxuLyoqXG4gKiBJbmplY3RzIGN1c3RvbSBwcm9wZXJ0aWVzIGludG8gdGhlIGdpdmVuIGdyb3VwLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudFRlbXBsYXRlc30gZWxlbWVudFRlbXBsYXRlc1xuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zbGF0ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZXMsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcblxuICB2YXIgdGVtcGxhdGUgPSBnZXRUZW1wbGF0ZShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzKTtcblxuICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdmFyIHJlbmRlckN1c3RvbUZpZWxkID0gZnVuY3Rpb24oaWQsIHAsIGlkeCkge1xuICAgIHZhciBwcm9wZXJ0eVR5cGUgPSBwLnR5cGU7XG5cbiAgICB2YXIgZW50cnlPcHRpb25zID0ge1xuICAgICAgaWQ6IGlkLFxuICAgICAgZGVzY3JpcHRpb246IHAuZGVzY3JpcHRpb24sXG4gICAgICBsYWJlbDogcC5sYWJlbCA/IHRyYW5zbGF0ZShwLmxhYmVsKSA6IHAubGFiZWwsXG4gICAgICBtb2RlbFByb3BlcnR5OiBpZCxcbiAgICAgIGdldDogcHJvcGVydHlHZXR0ZXIoaWQsIHApLFxuICAgICAgc2V0OiBwcm9wZXJ0eVNldHRlcihpZCwgcCwgYnBtbkZhY3RvcnkpLFxuICAgICAgdmFsaWRhdGU6IHByb3BlcnR5VmFsaWRhdG9yKGlkLCBwLCB0cmFuc2xhdGUpXG4gICAgfTtcblxuICAgIHZhciBlbnRyeTtcblxuICAgIGlmIChwcm9wZXJ0eVR5cGUgPT09ICdCb29sZWFuJykge1xuICAgICAgZW50cnkgPSBlbnRyeUZhY3RvcnkuY2hlY2tib3goZW50cnlPcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcGVydHlUeXBlID09PSAnU3RyaW5nJykge1xuICAgICAgZW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEZpZWxkKGVudHJ5T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BlcnR5VHlwZSA9PT0gJ1RleHQnKSB7XG4gICAgICBlbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0Qm94KGVudHJ5T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BlcnR5VHlwZSA9PT0gJ0Ryb3Bkb3duJykge1xuICAgICAgZW50cnlPcHRpb25zLnNlbGVjdE9wdGlvbnMgPSBwLmNob2ljZXM7XG5cbiAgICAgIGVudHJ5ID0gZW50cnlGYWN0b3J5LnNlbGVjdEJveChlbnRyeU9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRyeTtcbiAgfTtcblxuICB2YXIgZ3JvdXBzID0gW107XG4gIHZhciBpZCwgZW50cnk7XG5cbiAgdmFyIGN1c3RvbUZpZWxkc0dyb3VwID0ge1xuICAgIGlkOiAnY3VzdG9tRmllbGQnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0N1c3RvbSBGaWVsZHMnKSxcbiAgICBlbnRyaWVzOiBbXVxuICB9O1xuICB0ZW1wbGF0ZS5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocCwgaWR4KSB7XG5cbiAgICBpZCA9ICdjdXN0b20tJyArIHRlbXBsYXRlLmlkICsgJy0nICsgaWR4O1xuXG4gICAgZW50cnkgPSByZW5kZXJDdXN0b21GaWVsZChpZCwgcCwgaWR4KTtcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGN1c3RvbUZpZWxkc0dyb3VwLmVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgfVxuICB9KTtcbiAgaWYgKGN1c3RvbUZpZWxkc0dyb3VwLmVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgIGdyb3Vwcy5wdXNoKGN1c3RvbUZpZWxkc0dyb3VwKTtcbiAgfVxuXG4gIGlmICh0ZW1wbGF0ZS5zY29wZXMpIHtcbiAgICBmb3IgKHZhciBzY29wZU5hbWUgaW4gdGVtcGxhdGUuc2NvcGVzKSB7XG5cbiAgICAgIHZhciBzY29wZSA9IHRlbXBsYXRlLnNjb3Blc1tzY29wZU5hbWVdO1xuICAgICAgdmFyIGlkU2NvcGVOYW1lID0gc2NvcGVOYW1lLnJlcGxhY2UoLzovZywgJ18nKTtcblxuICAgICAgdmFyIGN1c3RvbVNjb3BlRmllbGRzR3JvdXAgPSB7XG4gICAgICAgIGlkOiAnY3VzdG9tRmllbGQtJyArIGlkU2NvcGVOYW1lLFxuICAgICAgICBsYWJlbDogdHJhbnNsYXRlKCdDdXN0b20gRmllbGRzIGZvciBzY29wZTogJykgKyBzY29wZU5hbWUsXG4gICAgICAgIGVudHJpZXM6IFtdXG4gICAgICB9O1xuXG4gICAgICBzY29wZS5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocCwgaWR4KSB7XG5cbiAgICAgICAgdmFyIHByb3BlcnR5SWQgPSAnY3VzdG9tLScgKyB0ZW1wbGF0ZS5pZCArICctJyArIGlkU2NvcGVOYW1lICsgJy0nICsgaWR4O1xuXG4gICAgICAgIHZhciBzY29wZWRQcm9wZXJ0eSA9IHByb3BlcnR5V2l0aFNjb3BlKHAsIHNjb3BlTmFtZSk7XG5cbiAgICAgICAgZW50cnkgPSByZW5kZXJDdXN0b21GaWVsZChwcm9wZXJ0eUlkLCBzY29wZWRQcm9wZXJ0eSwgaWR4KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgY3VzdG9tU2NvcGVGaWVsZHNHcm91cC5lbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGN1c3RvbVNjb3BlRmllbGRzR3JvdXAuZW50cmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGdyb3Vwcy5wdXNoKGN1c3RvbVNjb3BlRmllbGRzR3JvdXApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBncm91cHM7XG59O1xuXG5cbi8vIGdldHRlcnMsIHNldHRlcnMgYW5kIHZhbGlkYXRvcnMgLy8vLy8vLy8vLy8vLy8vXG5cblxuLyoqXG4gKiBSZXR1cm4gYSBnZXR0ZXIgdGhhdCByZXRyaWV2ZXMgdGhlIGdpdmVuIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcbiAqXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gcHJvcGVydHlHZXR0ZXIobmFtZSwgcHJvcGVydHkpIHtcblxuICAvKiBnZXR0ZXIgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGdldChlbGVtZW50KSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBwcm9wZXJ0eSk7XG5cbiAgICByZXR1cm4gb2JqZWN0V2l0aEtleShuYW1lLCB2YWx1ZSk7XG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIGEgc2V0dGVyIHRoYXQgdXBkYXRlcyB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7UHJvcGVydHlEZXNjcmlwdG9yfSBwcm9wZXJ0eVxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gcHJvcGVydHlTZXR0ZXIobmFtZSwgcHJvcGVydHksIGJwbW5GYWN0b3J5KSB7XG5cbiAgLyogc2V0dGVyICovXG4gIHJldHVybiBmdW5jdGlvbiBzZXQoZWxlbWVudCwgdmFsdWVzKSB7XG5cbiAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbbmFtZV07XG5cbiAgICByZXR1cm4gc2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUsIGJwbW5GYWN0b3J5KTtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSB2YWxpZGF0b3IgdGhhdCBlbnN1cmVzIHRoZSBwcm9wZXJ0eSBpcyBvay5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtQcm9wZXJ0eURlc2NyaXB0b3J9IHByb3BlcnR5XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2xhdGVcbiAqXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gcHJvcGVydHlWYWxpZGF0b3IobmFtZSwgcHJvcGVydHksIHRyYW5zbGF0ZSkge1xuXG4gIC8qIHZhbGlkYXRvciAqL1xuICByZXR1cm4gZnVuY3Rpb24gdmFsaWRhdGUoZWxlbWVudCwgdmFsdWVzKSB7XG4gICAgdmFyIHZhbHVlID0gdmFsdWVzW25hbWVdO1xuXG4gICAgdmFyIGVycm9yID0gdmFsaWRhdGVWYWx1ZSh2YWx1ZSwgcHJvcGVydHksIHRyYW5zbGF0ZSk7XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBvYmplY3RXaXRoS2V5KG5hbWUsIGVycm9yKTtcbiAgICB9XG4gIH07XG59XG5cblxuLy8gZ2V0LCBzZXQgYW5kIHZhbGlkYXRlIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBkZXNjcmlwdG9yLFxuICogb24gdGhlIHBhc3NlZCBkaWFncmFtIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtQcm9wZXJ0eURlc2NyaXB0b3J9IHByb3BlcnR5XG4gKlxuICogQHJldHVybiB7QW55fVxuICovXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHByb3BlcnR5KSB7XG5cbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgdmFyIGJpbmRpbmcgPSBwcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgc2NvcGUgPSBwcm9wZXJ0eS5zY29wZTtcblxuICB2YXIgYmluZGluZ1R5cGUgPSBiaW5kaW5nLnR5cGUsXG4gICAgICBiaW5kaW5nTmFtZSA9IGJpbmRpbmcubmFtZTtcblxuICB2YXIgcHJvcGVydHlWYWx1ZSA9IHByb3BlcnR5LnZhbHVlIHx8ICcnO1xuXG4gIGlmIChzY29wZSkge1xuICAgIGJvID0gZmluZEV4dGVuc2lvbihibywgc2NvcGUubmFtZSk7XG4gICAgaWYgKCFibykge1xuICAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgLy8gcHJvcGVydHlcbiAgaWYgKGJpbmRpbmdUeXBlID09PSAncHJvcGVydHknKSB7XG5cbiAgICB2YXIgdmFsdWUgPSBiby5nZXQoYmluZGluZ05hbWUpO1xuXG4gICAgaWYgKGJpbmRpbmdOYW1lID09PSAnY29uZGl0aW9uRXhwcmVzc2lvbicpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUuYm9keTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHJldHVybiBkZWZpbmVkIGRlZmF1bHRcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJldHVybiB2YWx1ZTsgZGVmYXVsdCB0byBkZWZpbmVkIGRlZmF1bHRcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnID8gdmFsdWUgOiBwcm9wZXJ0eVZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBhY3Rpdml0aVByb3BlcnRpZXMsXG4gICAgICBhY3Rpdml0aVByb3BlcnR5O1xuXG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfUFJPUEVSVFlfVFlQRSkge1xuICAgIGlmIChzY29wZSkge1xuICAgICAgYWN0aXZpdGlQcm9wZXJ0aWVzID0gYm8uZ2V0KCdwcm9wZXJ0aWVzJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjdGl2aXRpUHJvcGVydGllcyA9IGZpbmRFeHRlbnNpb24oYm8sICdhY3Rpdml0aTpQcm9wZXJ0aWVzJyk7XG4gICAgfVxuXG4gICAgaWYgKGFjdGl2aXRpUHJvcGVydGllcykge1xuICAgICAgYWN0aXZpdGlQcm9wZXJ0eSA9IGZpbmRBY3Rpdml0aVByb3BlcnR5KGFjdGl2aXRpUHJvcGVydGllcywgYmluZGluZyk7XG5cbiAgICAgIGlmIChhY3Rpdml0aVByb3BlcnR5KSB7XG4gICAgICAgIHJldHVybiBhY3Rpdml0aVByb3BlcnR5LnZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlO1xuICB9XG5cbiAgdmFyIGlucHV0T3V0cHV0LFxuICAgICAgaW9QYXJhbWV0ZXI7XG5cbiAgaWYgKElPX0JJTkRJTkdfVFlQRVMuaW5kZXhPZihiaW5kaW5nVHlwZSkgIT09IC0xKSB7XG5cbiAgICBpZiAoc2NvcGUpIHtcbiAgICAgIGlucHV0T3V0cHV0ID0gYm8uZ2V0KCdpbnB1dE91dHB1dCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dE91dHB1dCA9IGZpbmRFeHRlbnNpb24oYm8sICdhY3Rpdml0aTpJbnB1dE91dHB1dCcpO1xuICAgIH1cblxuICAgIGlmICghaW5wdXRPdXRwdXQpIHtcbiAgICAgIC8vIGlvUGFyYW1ldGVyIGNhbm5vdCBleGlzdCB5ZXQsIHJldHVybiBwcm9wZXJ0eSB2YWx1ZVxuICAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgLy8gYWN0aXZpdGkgaW5wdXQgcGFyYW1ldGVyXG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfSU5QVVRfUEFSQU1FVEVSX1RZUEUpIHtcbiAgICBpb1BhcmFtZXRlciA9IGZpbmRJbnB1dFBhcmFtZXRlcihpbnB1dE91dHB1dCwgYmluZGluZyk7XG5cbiAgICBpZiAoaW9QYXJhbWV0ZXIpIHtcbiAgICAgIGlmIChiaW5kaW5nLnNjcmlwdEZvcm1hdCkge1xuICAgICAgICBpZiAoaW9QYXJhbWV0ZXIuZGVmaW5pdGlvbikge1xuICAgICAgICAgIHJldHVybiBpb1BhcmFtZXRlci5kZWZpbml0aW9uLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaW9QYXJhbWV0ZXIudmFsdWUgfHwgJyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnR5VmFsdWU7XG4gIH1cblxuICAvLyBhY3Rpdml0aSBvdXRwdXQgcGFyYW1ldGVyXG4gIGlmIChiaW5kaW5nLnR5cGUgPT09IEFDVElWSVRJX09VVFBVVF9QQVJBTUVURVJfVFlQRSkge1xuICAgIGlvUGFyYW1ldGVyID0gZmluZE91dHB1dFBhcmFtZXRlcihpbnB1dE91dHB1dCwgYmluZGluZyk7XG5cbiAgICBpZiAoaW9QYXJhbWV0ZXIpIHtcbiAgICAgIHJldHVybiBpb1BhcmFtZXRlci5uYW1lO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlO1xuICB9XG5cblxuICB2YXIgaW9FbGVtZW50O1xuXG4gIGlmIChJTl9PVVRfQklORElOR19UWVBFUy5pbmRleE9mKGJpbmRpbmdUeXBlKSAhPSAtMSkge1xuICAgIGlvRWxlbWVudCA9IGZpbmRBY3Rpdml0aUluT3V0KGJvLCBiaW5kaW5nKTtcblxuICAgIGlmIChpb0VsZW1lbnQpIHtcbiAgICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfSU5fQlVTSU5FU1NfS0VZX1RZUEUpIHtcbiAgICAgICAgcmV0dXJuIGlvRWxlbWVudC5idXNpbmVzc0tleTtcbiAgICAgIH0gZWxzZVxuICAgICAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9PVVRfVFlQRSkge1xuICAgICAgICByZXR1cm4gaW9FbGVtZW50LnRhcmdldDtcbiAgICAgIH0gZWxzZVxuICAgICAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9JTl9UWVBFKSB7XG4gICAgICAgIHJldHVybiBpb0VsZW1lbnRbYmluZGluZy5leHByZXNzaW9uID8gJ3NvdXJjZUV4cHJlc3Npb24nIDogJ3NvdXJjZSddO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlO1xuICB9XG5cbiAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9FWEVDVVRJT05fTElTVEVORVJfVFlQRSkge1xuICAgIHZhciBleGVjdXRpb25MaXN0ZW5lcjtcbiAgICBpZiAoc2NvcGUpIHtcbiAgICAgIGV4ZWN1dGlvbkxpc3RlbmVyID0gYm8uZ2V0KCdleGVjdXRpb25MaXN0ZW5lcicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleGVjdXRpb25MaXN0ZW5lciA9IGZpbmRFeHRlbnNpb24oYm8sICdhY3Rpdml0aTpFeGVjdXRpb25MaXN0ZW5lcicpO1xuICAgIH1cblxuICAgIHJldHVybiBleGVjdXRpb25MaXN0ZW5lci5zY3JpcHQudmFsdWU7XG4gIH1cblxuICB2YXIgZmllbGRJbmplY3Rpb247XG4gIGlmIChBQ1RJVklUSV9GSUVMRCA9PT0gYmluZGluZ1R5cGUpIHtcbiAgICB2YXIgZmllbGRJbmplY3Rpb25zID0gZmluZEV4dGVuc2lvbnMoYm8sIFsgJ2FjdGl2aXRpOkZpZWxkJyBdKTtcbiAgICBmaWVsZEluamVjdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XG4gICAgICBpZiAoaXRlbS5uYW1lID09PSBiaW5kaW5nLm5hbWUpIHtcbiAgICAgICAgZmllbGRJbmplY3Rpb24gPSBpdGVtO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChmaWVsZEluamVjdGlvbikge1xuICAgICAgcmV0dXJuIGZpZWxkSW5qZWN0aW9uLnN0cmluZyB8fCBmaWVsZEluamVjdGlvbi5leHByZXNzaW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgdW5rbm93blByb3BlcnR5QmluZGluZyhwcm9wZXJ0eSk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmdldFByb3BlcnR5VmFsdWUgPSBnZXRQcm9wZXJ0eVZhbHVlO1xuXG5cbi8qKlxuICogUmV0dXJuIGFuIHVwZGF0ZSBvcGVyYXRpb24gdGhhdCBjaGFuZ2VzIHRoZSBkaWFncmFtXG4gKiBlbGVtZW50J3MgY3VzdG9tIHByb3BlcnR5IHRvIHRoZSBnaXZlbiB2YWx1ZS5cbiAqXG4gKiBUaGUgcmVzcG9uc2Ugb2YgdGhpcyBtZXRob2Qgd2lsbCBiZSBwcm9jZXNzZWQgdmlhXG4gKiB7QGxpbmsgUHJvcGVydGllc1BhbmVsI2FwcGx5Q2hhbmdlc30uXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtQcm9wZXJ0eURlc2NyaXB0b3J9IHByb3BlcnR5XG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKlxuICogQHJldHVybiB7T2JqZWN0fEFycmF5PE9iamVjdD59IHJlc3VsdHMgdG8gYmUgcHJvY2Vzc2VkXG4gKi9cbmZ1bmN0aW9uIHNldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCBicG1uRmFjdG9yeSkge1xuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICB2YXIgYmluZGluZyA9IHByb3BlcnR5LmJpbmRpbmcsXG4gICAgICBzY29wZSA9IHByb3BlcnR5LnNjb3BlO1xuXG4gIHZhciBiaW5kaW5nVHlwZSA9IGJpbmRpbmcudHlwZSxcbiAgICAgIGJpbmRpbmdOYW1lID0gYmluZGluZy5uYW1lO1xuXG4gIHZhciBwcm9wZXJ0eVZhbHVlO1xuXG4gIHZhciB1cGRhdGVzID0gW107XG5cbiAgdmFyIGV4dGVuc2lvbkVsZW1lbnRzO1xuXG4gIGlmIChFWFRFTlNJT05fQklORElOR19UWVBFUy5pbmRleE9mKGJpbmRpbmdUeXBlKSAhPT0gLTEpIHtcbiAgICBleHRlbnNpb25FbGVtZW50cyA9IGJvLmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcblxuICAgIC8vIGNyZWF0ZSBleHRlbnNpb24gZWxlbWVudHMsIGlmIHRoZXkgZG8gbm90IGV4aXN0ICh5ZXQpXG4gICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCBudWxsLCBlbGVtZW50LCBicG1uRmFjdG9yeSk7XG5cbiAgICAgIHVwZGF0ZXMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoXG4gICAgICAgIGVsZW1lbnQsIGJvLCBvYmplY3RXaXRoS2V5KCdleHRlbnNpb25FbGVtZW50cycsIGV4dGVuc2lvbkVsZW1lbnRzKVxuICAgICAgKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHNjb3BlKSB7XG4gICAgYm8gPSBmaW5kRXh0ZW5zaW9uKGJvLCBzY29wZS5uYW1lKTtcbiAgICBpZiAoIWJvKSB7XG4gICAgICBibyA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudChzY29wZS5uYW1lLCBudWxsLCBlbGVtZW50LCBicG1uRmFjdG9yeSk7XG5cbiAgICAgIHVwZGF0ZXMucHVzaChjbWRIZWxwZXIuYWRkRWxlbWVudHNUb2xpc3QoXG4gICAgICAgIGJvLCBleHRlbnNpb25FbGVtZW50cywgJ3ZhbHVlcycsIFsgYm8gXVxuICAgICAgKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gcHJvcGVydHlcbiAgaWYgKGJpbmRpbmdUeXBlID09PSAncHJvcGVydHknKSB7XG5cbiAgICBpZiAoYmluZGluZ05hbWUgPT09ICdjb25kaXRpb25FeHByZXNzaW9uJykge1xuXG4gICAgICBwcm9wZXJ0eVZhbHVlID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdicG1uOkZvcm1hbEV4cHJlc3Npb24nLCB7XG4gICAgICAgIGJvZHk6IHZhbHVlLFxuICAgICAgICBsYW5ndWFnZTogYmluZGluZy5zY3JpcHRGb3JtYXRcbiAgICAgIH0sIGJvLCBicG1uRmFjdG9yeSk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgdmFyIG1vZGRsZVByb3BlcnR5RGVzY3JpcHRvciA9IGJvLiRkZXNjcmlwdG9yLnByb3BlcnRpZXNCeU5hbWVbYmluZGluZ05hbWVdO1xuXG4gICAgICB2YXIgbW9kZGxlVHlwZSA9IG1vZGRsZVByb3BlcnR5RGVzY3JpcHRvci50eXBlO1xuXG4gICAgICAvLyBtYWtlIHN1cmUgd2Ugb25seSB1cGRhdGUgU3RyaW5nLCBJbnRlZ2VyLCBSZWFsIGFuZFxuICAgICAgLy8gQm9vbGVhbiBwcm9wZXJ0aWVzIChkbyBub3QgYWNjaWRlbnRhbGx5IG92ZXJyaWRlIGNvbXBsZXggb2JqZWN0cy4uLilcbiAgICAgIGlmIChCQVNJQ19NT0RETEVfVFlQRVMuaW5kZXhPZihtb2RkbGVUeXBlKSA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3Qgc2V0IG1vZGRsZSB0eXBlIDwnICsgbW9kZGxlVHlwZSArICc+Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2RkbGVUeXBlID09PSAnQm9vbGVhbicpIHtcbiAgICAgICAgcHJvcGVydHlWYWx1ZSA9ICEhdmFsdWU7XG4gICAgICB9IGVsc2VcbiAgICAgIGlmIChtb2RkbGVUeXBlID09PSAnSW50ZWdlcicpIHtcbiAgICAgICAgcHJvcGVydHlWYWx1ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG5cbiAgICAgICAgaWYgKGlzTmFOKHByb3BlcnR5VmFsdWUpKSB7XG4gICAgICAgICAgLy8gZG8gbm90IHdyaXRlIE5hTiB2YWx1ZVxuICAgICAgICAgIHByb3BlcnR5VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb3BlcnR5VmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJvcGVydHlWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1cGRhdGVzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KFxuICAgICAgICBlbGVtZW50LCBibywgb2JqZWN0V2l0aEtleShiaW5kaW5nTmFtZSwgcHJvcGVydHlWYWx1ZSlcbiAgICAgICkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFjdGl2aXRpOnByb3BlcnR5XG4gIHZhciBhY3Rpdml0aVByb3BlcnRpZXMsXG4gICAgICBleGlzdGluZ0FjdGl2aXRpUHJvcGVydHksXG4gICAgICBuZXdBY3Rpdml0aVByb3BlcnR5O1xuXG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfUFJPUEVSVFlfVFlQRSkge1xuXG4gICAgaWYgKHNjb3BlKSB7XG4gICAgICBhY3Rpdml0aVByb3BlcnRpZXMgPSBiby5nZXQoJ3Byb3BlcnRpZXMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWN0aXZpdGlQcm9wZXJ0aWVzID0gZmluZEV4dGVuc2lvbihleHRlbnNpb25FbGVtZW50cywgJ2FjdGl2aXRpOlByb3BlcnRpZXMnKTtcbiAgICB9XG5cbiAgICBpZiAoIWFjdGl2aXRpUHJvcGVydGllcykge1xuICAgICAgYWN0aXZpdGlQcm9wZXJ0aWVzID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdhY3Rpdml0aTpQcm9wZXJ0aWVzJywgbnVsbCwgYm8sIGJwbW5GYWN0b3J5KTtcblxuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIHVwZGF0ZXMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoXG4gICAgICAgICAgZWxlbWVudCwgYm8sIHsgcHJvcGVydGllczogYWN0aXZpdGlQcm9wZXJ0aWVzIH1cbiAgICAgICAgKSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdXBkYXRlcy5wdXNoKGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChcbiAgICAgICAgICBlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgJ3ZhbHVlcycsIFsgYWN0aXZpdGlQcm9wZXJ0aWVzIF1cbiAgICAgICAgKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZXhpc3RpbmdBY3Rpdml0aVByb3BlcnR5ID0gZmluZEFjdGl2aXRpUHJvcGVydHkoYWN0aXZpdGlQcm9wZXJ0aWVzLCBiaW5kaW5nKTtcblxuICAgIG5ld0FjdGl2aXRpUHJvcGVydHkgPSBjcmVhdGVBY3Rpdml0aVByb3BlcnR5KGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSk7XG5cbiAgICB1cGRhdGVzLnB1c2goY21kSGVscGVyLmFkZEFuZFJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoXG4gICAgICBlbGVtZW50LFxuICAgICAgYWN0aXZpdGlQcm9wZXJ0aWVzLFxuICAgICAgJ3ZhbHVlcycsXG4gICAgICBudWxsLFxuICAgICAgWyBuZXdBY3Rpdml0aVByb3BlcnR5IF0sXG4gICAgICBleGlzdGluZ0FjdGl2aXRpUHJvcGVydHkgPyBbIGV4aXN0aW5nQWN0aXZpdGlQcm9wZXJ0eSBdIDogW11cbiAgICApKTtcbiAgfVxuXG4gIC8vIGFjdGl2aXRpOmlucHV0UGFyYW1ldGVyXG4gIC8vIGFjdGl2aXRpOm91dHB1dFBhcmFtZXRlclxuICB2YXIgaW5wdXRPdXRwdXQsXG4gICAgICBleGlzdGluZ0lvUGFyYW1ldGVyLFxuICAgICAgbmV3SW9QYXJhbWV0ZXI7XG5cbiAgaWYgKElPX0JJTkRJTkdfVFlQRVMuaW5kZXhPZihiaW5kaW5nVHlwZSkgIT09IC0xKSB7XG5cbiAgICBpZiAoc2NvcGUpIHtcbiAgICAgIGlucHV0T3V0cHV0ID0gYm8uZ2V0KCdpbnB1dE91dHB1dCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dE91dHB1dCA9IGZpbmRFeHRlbnNpb24oZXh0ZW5zaW9uRWxlbWVudHMsICdhY3Rpdml0aTpJbnB1dE91dHB1dCcpO1xuICAgIH1cblxuICAgIC8vIGNyZWF0ZSBpbnB1dE91dHB1dCBlbGVtZW50LCBpZiBpdCBkbyBub3QgZXhpc3QgKHlldClcbiAgICBpZiAoIWlucHV0T3V0cHV0KSB7XG4gICAgICBpbnB1dE91dHB1dCA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6SW5wdXRPdXRwdXQnLCBudWxsLCBibywgYnBtbkZhY3RvcnkpO1xuXG4gICAgICBpZiAoc2NvcGUpIHtcbiAgICAgICAgdXBkYXRlcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChcbiAgICAgICAgICBlbGVtZW50LCBibywgeyBpbnB1dE91dHB1dDogaW5wdXRPdXRwdXQgfVxuICAgICAgICApKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB1cGRhdGVzLnB1c2goY21kSGVscGVyLmFkZEVsZW1lbnRzVG9saXN0KFxuICAgICAgICAgIGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCAndmFsdWVzJywgaW5wdXRPdXRwdXRcbiAgICAgICAgKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9JTlBVVF9QQVJBTUVURVJfVFlQRSkge1xuXG4gICAgZXhpc3RpbmdJb1BhcmFtZXRlciA9IGZpbmRJbnB1dFBhcmFtZXRlcihpbnB1dE91dHB1dCwgYmluZGluZyk7XG5cbiAgICBuZXdJb1BhcmFtZXRlciA9IGNyZWF0ZUlucHV0UGFyYW1ldGVyKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSk7XG5cbiAgICB1cGRhdGVzLnB1c2goY21kSGVscGVyLmFkZEFuZFJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoXG4gICAgICBlbGVtZW50LFxuICAgICAgaW5wdXRPdXRwdXQsXG4gICAgICAnaW5wdXRQYXJhbWV0ZXJzJyxcbiAgICAgIG51bGwsXG4gICAgICBbIG5ld0lvUGFyYW1ldGVyIF0sXG4gICAgICBleGlzdGluZ0lvUGFyYW1ldGVyID8gWyBleGlzdGluZ0lvUGFyYW1ldGVyIF0gOiBbXVxuICAgICkpO1xuICB9XG5cbiAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9PVVRQVVRfUEFSQU1FVEVSX1RZUEUpIHtcblxuICAgIGV4aXN0aW5nSW9QYXJhbWV0ZXIgPSBmaW5kT3V0cHV0UGFyYW1ldGVyKGlucHV0T3V0cHV0LCBiaW5kaW5nKTtcblxuICAgIG5ld0lvUGFyYW1ldGVyID0gY3JlYXRlT3V0cHV0UGFyYW1ldGVyKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSk7XG5cbiAgICB1cGRhdGVzLnB1c2goY21kSGVscGVyLmFkZEFuZFJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoXG4gICAgICBlbGVtZW50LFxuICAgICAgaW5wdXRPdXRwdXQsXG4gICAgICAnb3V0cHV0UGFyYW1ldGVycycsXG4gICAgICBudWxsLFxuICAgICAgWyBuZXdJb1BhcmFtZXRlciBdLFxuICAgICAgZXhpc3RpbmdJb1BhcmFtZXRlciA/IFsgZXhpc3RpbmdJb1BhcmFtZXRlciBdIDogW11cbiAgICApKTtcbiAgfVxuXG5cbiAgLy8gYWN0aXZpdGk6aW5cbiAgLy8gYWN0aXZpdGk6b3V0XG4gIC8vIGFjdGl2aXRpOmluOmJ1c2luZXNzS2V5XG4gIHZhciBleGlzdGluZ0luT3V0LFxuICAgICAgbmV3SW5PdXQ7XG5cbiAgaWYgKElOX09VVF9CSU5ESU5HX1RZUEVTLmluZGV4T2YoYmluZGluZ1R5cGUpICE9PSAtMSkge1xuXG4gICAgZXhpc3RpbmdJbk91dCA9IGZpbmRBY3Rpdml0aUluT3V0KGJvLCBiaW5kaW5nKTtcblxuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfSU5fVFlQRSkge1xuICAgICAgbmV3SW5PdXQgPSBjcmVhdGVBY3Rpdml0aUluKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgfSBlbHNlXG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9PVVRfVFlQRSkge1xuICAgICAgbmV3SW5PdXQgPSBjcmVhdGVBY3Rpdml0aU91dChiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdJbk91dCA9IGNyZWF0ZUFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KTtcbiAgICB9XG5cbiAgICB1cGRhdGVzLnB1c2goY21kSGVscGVyLmFkZEFuZFJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoXG4gICAgICBlbGVtZW50LFxuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAndmFsdWVzJyxcbiAgICAgIG51bGwsXG4gICAgICBbIG5ld0luT3V0IF0sXG4gICAgICBleGlzdGluZ0luT3V0ID8gWyBleGlzdGluZ0luT3V0IF0gOiBbXVxuICAgICkpO1xuICB9XG5cbiAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9GSUVMRCkge1xuICAgIHZhciBleGlzdGluZ0ZpZWxkSW5qZWN0aW9ucyA9IGZpbmRFeHRlbnNpb25zKGJvLCBbICdhY3Rpdml0aTpGaWVsZCcgXSk7XG4gICAgdmFyIG5ld0ZpZWxkSW5qZWN0aW9ucyA9IFtdO1xuXG4gICAgaWYgKGV4aXN0aW5nRmllbGRJbmplY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGV4aXN0aW5nRmllbGRJbmplY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICBpZiAoaXRlbS5uYW1lID09PSBiaW5kaW5nLm5hbWUpIHtcbiAgICAgICAgICBuZXdGaWVsZEluamVjdGlvbnMucHVzaChjcmVhdGVBY3Rpdml0aUZpZWxkSW5qZWN0aW9uKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0ZpZWxkSW5qZWN0aW9ucy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3RmllbGRJbmplY3Rpb25zLnB1c2goY3JlYXRlQWN0aXZpdGlGaWVsZEluamVjdGlvbihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpKTtcbiAgICB9XG5cbiAgICB1cGRhdGVzLnB1c2goY21kSGVscGVyLmFkZEFuZFJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoXG4gICAgICBlbGVtZW50LFxuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAndmFsdWVzJyxcbiAgICAgIG51bGwsXG4gICAgICBuZXdGaWVsZEluamVjdGlvbnMsXG4gICAgICBleGlzdGluZ0ZpZWxkSW5qZWN0aW9ucyA/IGV4aXN0aW5nRmllbGRJbmplY3Rpb25zIDogW11cbiAgICApKTtcbiAgfVxuXG4gIGlmICh1cGRhdGVzLmxlbmd0aCkge1xuICAgIHJldHVybiB1cGRhdGVzO1xuICB9XG5cbiAgLy8gcXVpY2sgd2FybmluZyBmb3IgYmV0dGVyIGRlYnVnZ2luZ1xuICBjb25zb2xlLndhcm4oJ25vIHVwZGF0ZScsIGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzLnNldFByb3BlcnR5VmFsdWUgPSBzZXRQcm9wZXJ0eVZhbHVlO1xuXG4vKipcbiAqIFZhbGlkYXRlIHZhbHVlIG9mIGEgZ2l2ZW4gcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zbGF0ZVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gd2l0aCB2YWxpZGF0aW9uIGVycm9yc1xuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVZhbHVlKHZhbHVlLCBwcm9wZXJ0eSwgdHJhbnNsYXRlKSB7XG5cbiAgdmFyIGNvbnN0cmFpbnRzID0gcHJvcGVydHkuY29uc3RyYWludHMgfHwge307XG5cbiAgaWYgKGNvbnN0cmFpbnRzLm5vdEVtcHR5ICYmIGlzRW1wdHkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZSgnTXVzdCBub3QgYmUgZW1wdHknKTtcbiAgfVxuXG4gIGlmIChjb25zdHJhaW50cy5tYXhMZW5ndGggJiYgdmFsdWUubGVuZ3RoID4gY29uc3RyYWludHMubWF4TGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZSgnTXVzdCBoYXZlIG1heCBsZW5ndGgge2xlbmd0aH0nLCB7IGxlbmd0aDogY29uc3RyYWludHMubWF4TGVuZ3RoIH0pO1xuICB9XG5cbiAgaWYgKGNvbnN0cmFpbnRzLm1pbkxlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPCBjb25zdHJhaW50cy5taW5MZW5ndGgpIHtcbiAgICByZXR1cm4gdHJhbnNsYXRlKCdNdXN0IGhhdmUgbWluIGxlbmd0aCB7bGVuZ3RofScsIHsgbGVuZ3RoOiBjb25zdHJhaW50cy5taW5MZW5ndGggfSk7XG4gIH1cblxuICB2YXIgcGF0dGVybiA9IGNvbnN0cmFpbnRzLnBhdHRlcm4sXG4gICAgICBtZXNzYWdlO1xuXG4gIGlmIChwYXR0ZXJuKSB7XG5cbiAgICBpZiAodHlwZW9mIHBhdHRlcm4gIT09ICdzdHJpbmcnKSB7XG4gICAgICBtZXNzYWdlID0gcGF0dGVybi5tZXNzYWdlO1xuICAgICAgcGF0dGVybiA9IHBhdHRlcm4udmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKCFtYXRjaGVzUGF0dGVybih2YWx1ZSwgcGF0dGVybikpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlIHx8IHRyYW5zbGF0ZSgnTXVzdCBtYXRjaCBwYXR0ZXJuIHtwYXR0ZXJufScsIHsgcGF0dGVybjogcGF0dGVybiB9KTtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBtaXNjIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBwcm9wZXJ0eVdpdGhTY29wZShwcm9wZXJ0eSwgc2NvcGVOYW1lKSB7XG4gIGlmICghc2NvcGVOYW1lKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9XG5cbiAgcmV0dXJuIGFzc2lnbih7fSwgcHJvcGVydHksIHtcbiAgICBzY29wZToge1xuICAgICAgbmFtZTogc2NvcGVOYW1lXG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYW4gb2JqZWN0IHdpdGggYSBzaW5nbGUga2V5IC0+IHZhbHVlIGFzc29jaWF0aW9uLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7QW55fSB2YWx1ZVxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gb2JqZWN0V2l0aEtleShrZXksIHZhbHVlKSB7XG4gIHZhciBvYmogPSB7fTtcblxuICBvYmpba2V5XSA9IHZhbHVlO1xuXG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogRG9lcyB0aGUgZ2l2ZW4gc3RyaW5nIG1hdGNoIHRoZSBzcGVjaWZpZWQgcGF0dGVybj9cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0dGVyblxuICpcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNQYXR0ZXJuKHN0ciwgcGF0dGVybikge1xuICB2YXIgcmVnZXhwID0gbmV3IFJlZ0V4cChwYXR0ZXJuKTtcblxuICByZXR1cm4gcmVnZXhwLnRlc3Qoc3RyKTtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eShzdHIpIHtcbiAgcmV0dXJuICFzdHIgfHwgL15cXHMqJC8udGVzdChzdHIpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyB7QGxpbmsgRXJyb3J9IGluZGljYXRpbmcgYW4gdW5rbm93blxuICogcHJvcGVydHkgYmluZGluZy5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcbiAqXG4gKiBAcmV0dXJuIHtFcnJvcn1cbiAqL1xuZnVuY3Rpb24gdW5rbm93blByb3BlcnR5QmluZGluZyhwcm9wZXJ0eSkge1xuICB2YXIgYmluZGluZyA9IHByb3BlcnR5LmJpbmRpbmc7XG5cbiAgcmV0dXJuIG5ldyBFcnJvcigndW5rbm93biBiaW5kaW5nOiA8JyArIGJpbmRpbmcudHlwZSArICc+Jyk7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICByZXF1aXJlKCcuL2VsZW1lbnQtdGVtcGxhdGVzL2luZGV4JyksXG4gICAgcmVxdWlyZSgnZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUnKS5kZWZhdWx0XG4gIF0sXG4gIF9faW5pdF9fOiBbICdwcm9wZXJ0aWVzUHJvdmlkZXInIF0sXG4gIHByb3BlcnRpZXNQcm92aWRlcjogWyAndHlwZScsIHJlcXVpcmUoJy4vQWN0aXZpdGlQcm9wZXJ0aWVzUHJvdmlkZXInKSBdXG59O1xuXG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXG4gICAgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxuICAgIGFzeW5jQ29udGludWF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9Bc3luY0NvbnRpbnVhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdhY3Rpdml0aTpBc3luY0NhcGFibGUnKSkge1xuXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGFzeW5jQ29udGludWF0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XG4gICAgICBnZXRCdXNpbmVzc09iamVjdDogZ2V0QnVzaW5lc3NPYmplY3RcbiAgICB9LCB0cmFuc2xhdGUpKTtcblxuICB9XG59OyIsIid1c2Ugc3RyaWN0JztcblxudmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XG5cbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xuXG52YXIgY2FsbGFibGUgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0NhbGxhYmxlJyk7XG5cbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XG5cbnZhciBmbGF0dGVuRGVlcCA9IHJlcXVpcmUoJ2xvZGFzaC9mbGF0dGVuRGVlcCcpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcblxuZnVuY3Rpb24gZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpIHtcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgdmFyIGJvQ2FsbGVkRWxlbWVudCA9IGJvLmdldCgnY2FsbGVkRWxlbWVudCcpLFxuICAgICAgYm9DYXNlUmVmID0gYm8uZ2V0KCdhY3Rpdml0aTpjYXNlUmVmJyk7XG5cbiAgdmFyIGNhbGxBY3Rpdml0eVR5cGUgPSAnJztcbiAgaWYgKHR5cGVvZiBib0NhbGxlZEVsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY2FsbEFjdGl2aXR5VHlwZSA9ICdicG1uJztcbiAgfSBlbHNlXG5cbiAgaWYgKHR5cGVvZiBib0Nhc2VSZWYgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY2FsbEFjdGl2aXR5VHlwZSA9ICdjbW1uJztcbiAgfVxuXG4gIHJldHVybiBjYWxsQWN0aXZpdHlUeXBlO1xufVxuXG52YXIgREVGQVVMVF9QUk9QUyA9IHtcbiAgY2FsbGVkRWxlbWVudDogdW5kZWZpbmVkLFxuICAnYWN0aXZpdGk6Y2FsbGVkRWxlbWVudEJpbmRpbmcnOiAnbGF0ZXN0JyxcbiAgJ2FjdGl2aXRpOmNhbGxlZEVsZW1lbnRWZXJzaW9uJzogdW5kZWZpbmVkLFxuICAnYWN0aXZpdGk6Y2FsbGVkRWxlbWVudFRlbmFudElkJzogdW5kZWZpbmVkLFxuICAnYWN0aXZpdGk6dmFyaWFibGVNYXBwaW5nQ2xhc3MnIDogdW5kZWZpbmVkLFxuICAnYWN0aXZpdGk6dmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uJyA6IHVuZGVmaW5lZCxcbiAgJ2FjdGl2aXRpOmNhc2VSZWYnOiB1bmRlZmluZWQsXG4gICdhY3Rpdml0aTpjYXNlQmluZGluZyc6ICdsYXRlc3QnLFxuICAnYWN0aXZpdGk6Y2FzZVZlcnNpb24nOiB1bmRlZmluZWQsXG4gICdhY3Rpdml0aTpjYXNlVGVuYW50SWQnOiB1bmRlZmluZWRcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcblxuICBpZiAoIWlzKGVsZW1lbnQsICdhY3Rpdml0aTpDYWxsQWN0aXZpdHknKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3Rvcnkuc2VsZWN0Qm94KHtcbiAgICBpZCA6ICdjYWxsQWN0aXZpdHknLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NhbGxBY3Rpdml0eSBUeXBlJyksXG4gICAgc2VsZWN0T3B0aW9uczogW1xuICAgICAgeyBuYW1lOiAnQlBNTicsIHZhbHVlOiAnYnBtbicgfSxcbiAgICAgIHsgbmFtZTogJ0NNTU4nLCB2YWx1ZTogJ2NtbW4nIH1cbiAgICBdLFxuICAgIGVtcHR5UGFyYW1ldGVyOiB0cnVlLFxuICAgIG1vZGVsUHJvcGVydHk6ICdjYWxsQWN0aXZpdHlUeXBlJyxcblxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2FsbEFjdGl2aXR5VHlwZTogZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgdmFyIHR5cGUgPSB2YWx1ZXMuY2FsbEFjdGl2aXR5VHlwZTtcblxuICAgICAgdmFyIHByb3BzID0gYXNzaWduKHt9LCBERUZBVUxUX1BST1BTKTtcblxuICAgICAgaWYgKHR5cGUgPT09ICdicG1uJykge1xuICAgICAgICBwcm9wcy5jYWxsZWRFbGVtZW50ID0gJyc7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0eXBlID09PSAnY21tbicpIHtcbiAgICAgICAgcHJvcHNbJ2FjdGl2aXRpOmNhc2VSZWYnXSA9ICcnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcHJvcHMpO1xuICAgIH1cblxuICB9KSk7XG5cbiAgZ3JvdXAuZW50cmllcy5wdXNoKGNhbGxhYmxlKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XG4gICAgZ2V0Q2FsbGFibGVUeXBlOiBnZXRDYWxsYWJsZVR5cGVcbiAgfSwgdHJhbnNsYXRlKSk7XG5cbiAgZ3JvdXAuZW50cmllcyA9IGZsYXR0ZW5EZWVwKGdyb3VwLmVudHJpZXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XG5cbnZhciBjYW5kaWRhdGVTdGFydGVyID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9DYW5kaWRhdGVTdGFydGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdhY3Rpdml0aTpQcm9jZXNzJykgfHxcbiAgICAgIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgYnVzaW5lc3NPYmplY3QuZ2V0KCdwcm9jZXNzUmVmJykpIHtcblxuICAgIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChjYW5kaWRhdGVTdGFydGVyKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XG4gICAgICBnZXRCdXNpbmVzc09iamVjdDogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICAgICAgICBpZiAoIWlzKGJvLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgICAgICAgcmV0dXJuIGJvO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJvLmdldCgncHJvY2Vzc1JlZicpO1xuICAgICAgfVxuICAgIH0sIHRyYW5zbGF0ZSkpO1xuXG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXG4gICAgaXNBbnkgPSByZXF1aXJlKCdicG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCcpLmlzQW55LFxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcbiAgICBlc2NhcGVIVE1MID0gcmVxdWlyZSgnLi4vLi4vLi4vVXRpbHMnKS5lc2NhcGVIVE1MLFxuICAgIGRvbVF1ZXJ5ID0gcmVxdWlyZSgnbWluLWRvbScpLnF1ZXJ5LFxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKSxcbiAgICBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKSxcbiAgICBldmVudERlZmluaXRpb25IZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvRXZlbnREZWZpbml0aW9uSGVscGVyJyksXG4gICAgc2NyaXB0SW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL1NjcmlwdCcpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgaWYgKCFibykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcblxuICBpZiAoIShpcyhlbGVtZW50LCAnYnBtbjpTZXF1ZW5jZUZsb3cnKSAmJiBpc0NvbmRpdGlvbmFsU291cmNlKGVsZW1lbnQuc291cmNlKSlcbiAgICAmJiAhY29uZGl0aW9uYWxFdmVudERlZmluaXRpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2NyaXB0ID0gc2NyaXB0SW1wbGVtZW50YXRpb24oJ2xhbmd1YWdlJywgJ2JvZHknLCB0cnVlLCB0cmFuc2xhdGUpO1xuICBncm91cC5lbnRyaWVzLnB1c2goe1xuICAgIGlkOiAnY29uZGl0aW9uJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDb25kaXRpb24nKSxcbiAgICBodG1sOiAnPGRpdiBjbGFzcz1cImJwcC1yb3dcIj4nICtcbiAgICAgICAgICAgICAgJzxsYWJlbCBmb3I9XCJjYW0tY29uZGl0aW9uLXR5cGVcIj4nKyBlc2NhcGVIVE1MKHRyYW5zbGF0ZSgnQ29uZGl0aW9uIFR5cGUnKSkgKyAnPC9sYWJlbD4nICtcbiAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJicHAtZmllbGQtd3JhcHBlclwiPicgK1xuICAgICAgICAgICAgICAgICc8c2VsZWN0IGlkPVwiY2FtLWNvbmRpdGlvbi10eXBlXCIgbmFtZT1cImNvbmRpdGlvblR5cGVcIiBkYXRhLXZhbHVlPicgK1xuICAgICAgICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9XCJleHByZXNzaW9uXCI+JysgZXNjYXBlSFRNTCh0cmFuc2xhdGUoJ0V4cHJlc3Npb24nKSkgKyAnPC9vcHRpb24+JyArXG4gICAgICAgICAgICAgICAgICAnPG9wdGlvbiB2YWx1ZT1cInNjcmlwdFwiPicrIGVzY2FwZUhUTUwodHJhbnNsYXRlKCdTY3JpcHQnKSkgKyAnPC9vcHRpb24+JyArXG4gICAgICAgICAgICAgICAgICAnPG9wdGlvbiB2YWx1ZT1cIlwiIHNlbGVjdGVkPjwvb3B0aW9uPicgK1xuICAgICAgICAgICAgICAgICc8L3NlbGVjdD4nICtcbiAgICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgJzwvZGl2PicgK1xuXG4gICAgICAgICAgICAvLyBleHByZXNzaW9uXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cImJwcC1yb3dcIj4nICtcbiAgICAgICAgICAgICAgJzxsYWJlbCBmb3I9XCJjYW0tY29uZGl0aW9uXCIgZGF0YS1zaG93PVwiaXNFeHByZXNzaW9uXCI+JyArIGVzY2FwZUhUTUwodHJhbnNsYXRlKCdFeHByZXNzaW9uJykpICsgJzwvbGFiZWw+JyArXG4gICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLXdyYXBwZXJcIiBkYXRhLXNob3c9XCJpc0V4cHJlc3Npb25cIj4nICtcbiAgICAgICAgICAgICAgICAnPGlucHV0IGlkPVwiY2FtLWNvbmRpdGlvblwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNvbmRpdGlvblwiIC8+JyArXG4gICAgICAgICAgICAgICAgJzxidXR0b24gY2xhc3M9XCJjbGVhclwiIGRhdGEtYWN0aW9uPVwiY2xlYXJcIiBkYXRhLXNob3c9XCJjYW5DbGVhclwiPicgK1xuICAgICAgICAgICAgICAgICAgJzxzcGFuPlg8L3NwYW4+JyArXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xuICAgICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgICAgICc8ZGl2IGRhdGEtc2hvdz1cImlzU2NyaXB0XCI+JyArXG4gICAgICAgICAgICAgICAgc2NyaXB0LnRlbXBsYXRlICtcbiAgICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgJzwvZGl2PicsXG5cbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5TmFtZSkge1xuICAgICAgdmFyIGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uSGVscGVyLmdldENvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xuXG4gICAgICB2YXIgY29uZGl0aW9uRXhwcmVzc2lvbiA9IGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uXG4gICAgICAgID8gY29uZGl0aW9uYWxFdmVudERlZmluaXRpb24uY29uZGl0aW9uXG4gICAgICAgIDogYm8uY29uZGl0aW9uRXhwcmVzc2lvbjtcblxuICAgICAgdmFyIHZhbHVlcyA9IHt9LFxuICAgICAgICAgIGNvbmRpdGlvblR5cGUgPSAnJztcblxuICAgICAgaWYgKGNvbmRpdGlvbkV4cHJlc3Npb24pIHtcbiAgICAgICAgdmFyIGNvbmRpdGlvbkxhbmd1YWdlID0gY29uZGl0aW9uRXhwcmVzc2lvbi5sYW5ndWFnZTtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25kaXRpb25MYW5ndWFnZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBjb25kaXRpb25UeXBlID0gJ3NjcmlwdCc7XG4gICAgICAgICAgdmFsdWVzID0gc2NyaXB0LmdldChlbGVtZW50LCBjb25kaXRpb25FeHByZXNzaW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25kaXRpb25UeXBlID0gJ2V4cHJlc3Npb24nO1xuICAgICAgICAgIHZhbHVlcy5jb25kaXRpb24gPSBjb25kaXRpb25FeHByZXNzaW9uLmdldCgnYm9keScpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhbHVlcy5jb25kaXRpb25UeXBlID0gY29uZGl0aW9uVHlwZTtcblxuICAgICAgcmV0dXJuIHZhbHVlcztcblxuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgY29udGFpbmVyRWxlbWVudCkge1xuICAgICAgdmFyIGNvbmRpdGlvblR5cGUgPSB2YWx1ZXMuY29uZGl0aW9uVHlwZTtcbiAgICAgIHZhciBjb21tYW5kcyA9IFtdO1xuXG4gICAgICB2YXIgY29uZGl0aW9uUHJvcHMgPSB7XG4gICAgICAgIGJvZHk6IHVuZGVmaW5lZFxuICAgICAgfTtcblxuICAgICAgaWYgKGNvbmRpdGlvblR5cGUgPT09ICdzY3JpcHQnKSB7XG4gICAgICAgIGNvbmRpdGlvblByb3BzID0gc2NyaXB0LnNldChlbGVtZW50LCB2YWx1ZXMsIGNvbnRhaW5lckVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGNvbmRpdGlvbiA9IHZhbHVlcy5jb25kaXRpb247XG5cbiAgICAgICAgY29uZGl0aW9uUHJvcHMuYm9keSA9IGNvbmRpdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbmRpdGlvbk9yQ29uZGl0aW9uRXhwcmVzc2lvbjtcblxuICAgICAgaWYgKGNvbmRpdGlvblR5cGUpIHtcbiAgICAgICAgY29uZGl0aW9uT3JDb25kaXRpb25FeHByZXNzaW9uID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdicG1uOkZvcm1hbEV4cHJlc3Npb24nLFxuICAgICAgICAgIGNvbmRpdGlvblByb3BzLFxuICAgICAgICAgIGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uIHx8IGJvLFxuICAgICAgICAgIGJwbW5GYWN0b3J5XG4gICAgICAgICk7XG5cbiAgICAgICAgdmFyIHNvdXJjZSA9IGVsZW1lbnQuc291cmNlO1xuXG4gICAgICAgIC8vIGlmIGRlZmF1bHQtZmxvdywgcmVtb3ZlIGRlZmF1bHQtcHJvcGVydHkgZnJvbSBzb3VyY2VcbiAgICAgICAgaWYgKHNvdXJjZSAmJiBzb3VyY2UuYnVzaW5lc3NPYmplY3QuZGVmYXVsdCA9PT0gYm8pIHtcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKHNvdXJjZSwgeyAnZGVmYXVsdCc6IHVuZGVmaW5lZCB9KSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHVwZGF0ZSA9IGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uXG4gICAgICAgID8geyBjb25kaXRpb246IGNvbmRpdGlvbk9yQ29uZGl0aW9uRXhwcmVzc2lvbiB9XG4gICAgICAgIDogeyBjb25kaXRpb25FeHByZXNzaW9uOiBjb25kaXRpb25PckNvbmRpdGlvbkV4cHJlc3Npb24gfTtcblxuICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgY29uZGl0aW9uYWxFdmVudERlZmluaXRpb24gfHwgYm8sIHVwZGF0ZSkpO1xuXG4gICAgICByZXR1cm4gY29tbWFuZHM7XG4gICAgfSxcblxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcbiAgICAgIHZhciB2YWxpZGF0aW9uUmVzdWx0ID0ge307XG5cbiAgICAgIGlmICghdmFsdWVzLmNvbmRpdGlvbiAmJiB2YWx1ZXMuY29uZGl0aW9uVHlwZSA9PT0gJ2V4cHJlc3Npb24nKSB7XG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQuY29uZGl0aW9uID0gdHJhbnNsYXRlKCdNdXN0IHByb3ZpZGUgYSB2YWx1ZScpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodmFsdWVzLmNvbmRpdGlvblR5cGUgPT09ICdzY3JpcHQnKSB7XG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQgPSBzY3JpcHQudmFsaWRhdGUoZWxlbWVudCwgdmFsdWVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHQ7XG4gICAgfSxcblxuICAgIGlzRXhwcmVzc2lvbjogZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlKSB7XG4gICAgICB2YXIgY29uZGl0aW9uVHlwZSA9IGRvbVF1ZXJ5KCdzZWxlY3RbbmFtZT1jb25kaXRpb25UeXBlXScsIGlucHV0Tm9kZSk7XG4gICAgICBpZiAoY29uZGl0aW9uVHlwZS5zZWxlY3RlZEluZGV4ID49IDApIHtcbiAgICAgICAgcmV0dXJuIGNvbmRpdGlvblR5cGUub3B0aW9uc1tjb25kaXRpb25UeXBlLnNlbGVjdGVkSW5kZXhdLnZhbHVlID09PSAnZXhwcmVzc2lvbic7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGlzU2NyaXB0OiBmdW5jdGlvbihlbGVtZW50LCBpbnB1dE5vZGUpIHtcbiAgICAgIHZhciBjb25kaXRpb25UeXBlID0gZG9tUXVlcnkoJ3NlbGVjdFtuYW1lPWNvbmRpdGlvblR5cGVdJywgaW5wdXROb2RlKTtcbiAgICAgIGlmIChjb25kaXRpb25UeXBlLnNlbGVjdGVkSW5kZXggPj0gMCkge1xuICAgICAgICByZXR1cm4gY29uZGl0aW9uVHlwZS5vcHRpb25zW2NvbmRpdGlvblR5cGUuc2VsZWN0ZWRJbmRleF0udmFsdWUgPT09ICdzY3JpcHQnO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhcjogZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlKSB7XG4gICAgICAvLyBjbGVhciB0ZXh0IGlucHV0XG4gICAgICBkb21RdWVyeSgnaW5wdXRbbmFtZT1jb25kaXRpb25dJywgaW5wdXROb2RlKS52YWx1ZT0nJztcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIGNhbkNsZWFyOiBmdW5jdGlvbihlbGVtZW50LCBpbnB1dE5vZGUpIHtcbiAgICAgIHZhciBpbnB1dCA9IGRvbVF1ZXJ5KCdpbnB1dFtuYW1lPWNvbmRpdGlvbl0nLCBpbnB1dE5vZGUpO1xuXG4gICAgICByZXR1cm4gaW5wdXQudmFsdWUgIT09ICcnO1xuICAgIH0sXG5cbiAgICBzY3JpcHQgOiBzY3JpcHQsXG5cbiAgICBjc3NDbGFzc2VzOiBbICdicHAtdGV4dGZpZWxkJyBdXG4gIH0pO1xufTtcblxuXG4vLyB1dGlsaXRpZXMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxudmFyIENPTkRJVElPTkFMX1NPVVJDRVMgPSBbXG4gICdicG1uOkFjdGl2aXR5JyxcbiAgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheScsXG4gICdicG1uOkluY2x1c2l2ZUdhdGV3YXknLFxuICAnYnBtbjpDb21wbGV4R2F0ZXdheSdcbl07XG5cbmZ1bmN0aW9uIGlzQ29uZGl0aW9uYWxTb3VyY2UoZWxlbWVudCkge1xuICByZXR1cm4gaXNBbnkoZWxlbWVudCwgQ09ORElUSU9OQUxfU09VUkNFUyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvSW1wbGVtZW50YXRpb25UeXBlSGVscGVyJyksXG4gICAgSW5wdXRPdXRwdXRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvSW5wdXRPdXRwdXRIZWxwZXInKTtcblxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xuXG5mdW5jdGlvbiBnZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCkge1xuICByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkge1xuICByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBnZXRDb25uZWN0b3IoYm8pIHtcbiAgcmV0dXJuIElucHV0T3V0cHV0SGVscGVyLmdldENvbm5lY3Rvcihibyk7XG59XG5cbmZ1bmN0aW9uIGlzQ29ubmVjdG9yKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KSA9PT0gJ2Nvbm5lY3Rvcic7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcblxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XG4gICAgaWQ6ICdjb25uZWN0b3JJZCcsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ29ubmVjdG9yIElkJyksXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2Nvbm5lY3RvcklkJyxcblxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgICB2YXIgY29ubmVjdG9yID0gYm8gJiYgZ2V0Q29ubmVjdG9yKGJvKTtcbiAgICAgIHZhciB2YWx1ZSA9IGNvbm5lY3RvciAmJiBjb25uZWN0b3IuZ2V0KCdjb25uZWN0b3JJZCcpO1xuICAgICAgcmV0dXJuIHsgY29ubmVjdG9ySWQ6IHZhbHVlIH07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICAgIHZhciBjb25uZWN0b3IgPSBnZXRDb25uZWN0b3IoYm8pO1xuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBjb25uZWN0b3IsIHtcbiAgICAgICAgY29ubmVjdG9ySWQ6IHZhbHVlcy5jb25uZWN0b3JJZCB8fCB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgICByZXR1cm4gaXNDb25uZWN0b3IoZWxlbWVudCkgJiYgIXZhbHVlcy5jb25uZWN0b3JJZCA/IHsgY29ubmVjdG9ySWQ6IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKSB9IDoge307XG4gICAgfSxcblxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgcmV0dXJuICFpc0Nvbm5lY3RvcihlbGVtZW50KTtcbiAgICB9XG5cbiAgfSkpO1xuXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xuXG52YXIgaW5wdXRPdXRwdXRQYXJhbWV0ZXIgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0lucHV0T3V0cHV0UGFyYW1ldGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcblxuICBvcHRpb25zID0gYXNzaWduKHtcbiAgICBpZFByZWZpeDogJ2Nvbm5lY3Rvci0nLFxuICAgIGluc2lkZUNvbm5lY3RvcjogdHJ1ZVxuICB9LCBvcHRpb25zKTtcblxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoaW5wdXRPdXRwdXRQYXJhbWV0ZXIoZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkpO1xuXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW5wdXRPdXRwdXQgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0lucHV0T3V0cHV0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcblxuICB2YXIgaW5wdXRPdXRwdXRFbnRyeSA9IGlucHV0T3V0cHV0KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XG4gICAgaWRQcmVmaXg6ICdjb25uZWN0b3ItJyxcbiAgICBpbnNpZGVDb25uZWN0b3I6IHRydWVcbiAgfSwgdHJhbnNsYXRlKTtcblxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoaW5wdXRPdXRwdXRFbnRyeS5lbnRyaWVzKTtcblxuICByZXR1cm4ge1xuICAgIGdldFNlbGVjdGVkUGFyYW1ldGVyOiBpbnB1dE91dHB1dEVudHJ5LmdldFNlbGVjdGVkUGFyYW1ldGVyXG4gIH07XG5cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXG4gICAgZXZlbnREZWZpbml0aW9uSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0V2ZW50RGVmaW5pdGlvbkhlbHBlcicpLFxuICAgIGVycm9yID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9FcnJvckV2ZW50RGVmaW5pdGlvbicpO1xuXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xuXG4gIHZhciBlcnJvckV2ZW50cyA9IFtcbiAgICAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAnYnBtbjpFbmRFdmVudCdcbiAgXTtcblxuICBmb3JFYWNoKGVycm9yRXZlbnRzLCBmdW5jdGlvbihldmVudCkge1xuICAgIGlmIChpcyhlbGVtZW50LCBldmVudCkpIHtcblxuICAgICAgdmFyIGVycm9yRXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uSGVscGVyLmdldEVycm9yRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xuXG4gICAgICBpZiAoZXJyb3JFdmVudERlZmluaXRpb24pIHtcbiAgICAgICAgdmFyIGlzQ2F0Y2hpbmdFcnJvckV2ZW50ID0gaXMoZWxlbWVudCwgJ2JwbW46U3RhcnRFdmVudCcpIHx8IGlzIChlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50Jyk7XG5cbiAgICAgICAgdmFyIHNob3dFcnJvckNvZGVWYXJpYWJsZSA9IGlzQ2F0Y2hpbmdFcnJvckV2ZW50LFxuICAgICAgICAgICAgc2hvd0Vycm9yTWVzc2FnZVZhcmlhYmxlID0gaXNDYXRjaGluZ0Vycm9yRXZlbnQ7XG5cbiAgICAgICAgZXJyb3IoXG4gICAgICAgICAgZ3JvdXAsXG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBicG1uRmFjdG9yeSxcbiAgICAgICAgICBlcnJvckV2ZW50RGVmaW5pdGlvbixcbiAgICAgICAgICBzaG93RXJyb3JDb2RlVmFyaWFibGUsXG4gICAgICAgICAgc2hvd0Vycm9yTWVzc2FnZVZhcmlhYmxlLFxuICAgICAgICAgIHRyYW5zbGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xuXG52YXIgSW1wbGVtZW50YXRpb25UeXBlSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0ltcGxlbWVudGF0aW9uVHlwZUhlbHBlcicpO1xuXG52YXIgZXh0ZXJuYWxUYXNrUHJpb3JpdHkgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0V4dGVybmFsVGFza1ByaW9yaXR5Jyk7XG5cbmZ1bmN0aW9uIGdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpIHtcbiAgdmFyIGJvID0gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIC8vIGlmIHRoZSBlbGVtZW50IGlzIG5vdCBhIHNlcnZpY2VUYXNrTGlrZSBlbGVtZW50LCBmZXRjaCB0aGUgbm9ybWFsIGJ1c2luZXNzIG9iamVjdFxuICAvLyBUaGlzIGF2b2lkcyB0aGUgbG9zcyBvZiB0aGUgcHJvY2VzcyAvIHBhcnRpY2lwYW50IGJ1c2luZXNzIG9iamVjdFxuICBpZiAoIWJvKSB7XG4gICAgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBibztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xuXG4gIHZhciBibyA9IGdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIGlmICghYm8pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaXMoYm8sICdhY3Rpdml0aTpUYXNrUHJpb3JpemVkJykgfHwgKGlzKGJvLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSAmJiBiby5nZXQoJ3Byb2Nlc3NSZWYnKSkge1xuICAgIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChleHRlcm5hbFRhc2tQcmlvcml0eShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKCFpcyhibywgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgICAgICAgIHJldHVybiBibztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYm8uZ2V0KCdwcm9jZXNzUmVmJyk7XG4gICAgICB9XG4gICAgfSwgdHJhbnNsYXRlKSk7XG4gIH1cbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgSW1wbGVtZW50YXRpb25UeXBlSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0ltcGxlbWVudGF0aW9uVHlwZUhlbHBlcicpO1xuXG52YXIgZmllbGRJbmplY3Rpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0ZpZWxkSW5qZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcblxuICB2YXIgYm8gPSBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgaWYgKCFibykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBmaWVsZEluamVjdGlvbkVudHJ5ID0gZmllbGRJbmplY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSwgeyBidXNpbmVzc09iamVjdDogYm8gfSk7XG5cbiAgaWYgKGZpZWxkSW5qZWN0aW9uRW50cnkgJiYgZmllbGRJbmplY3Rpb25FbnRyeS5sZW5ndGggPiAwKSB7XG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGZpZWxkSW5qZWN0aW9uRW50cnkpO1xuICB9XG5cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXG4gICAgZ2V0RXh0ZW5zaW9uRWxlbWVudHMgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKS5nZXRFeHRlbnNpb25FbGVtZW50cyxcbiAgICByZW1vdmVFbnRyeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9FeHRlbnNpb25FbGVtZW50c0hlbHBlcicpLnJlbW92ZUVudHJ5LFxuICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9FeHRlbnNpb25FbGVtZW50cycpLFxuICAgIHByb3BlcnRpZXMgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL1Byb3BlcnRpZXMnKSxcbiAgICBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxuICAgIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpLFxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKSxcbiAgICBmb3JtSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0Zvcm1IZWxwZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL1V0aWxzJyksXG4gICAgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxuICAgIGZpbmQgPSByZXF1aXJlKCdsb2Rhc2gvZmluZCcpLFxuICAgIGVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpO1xuXG5mdW5jdGlvbiBnZW5lcmF0ZVZhbHVlSWQoKSB7XG4gIHJldHVybiB1dGlscy5uZXh0SWQoJ1ZhbHVlXycpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgZm9ybSBmaWVsZCBzcGVjaWZpYyB0ZXh0RmllbGQgdXNpbmcgZW50cnlGYWN0b3J5LlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5pZFxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmxhYmVsXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMubW9kZWxQcm9wZXJ0eVxuICogQHBhcmFtICB7ZnVuY3Rpb259IG9wdGlvbnMudmFsaWRhdGVcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IGFuIGVudHJ5RmFjdG9yeS50ZXh0RmllbGQgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGZvcm1GaWVsZFRleHRGaWVsZChvcHRpb25zLCBnZXRTZWxlY3RlZEZvcm1GaWVsZCkge1xuXG4gIHZhciBpZCA9IG9wdGlvbnMuaWQsXG4gICAgICBsYWJlbCA9IG9wdGlvbnMubGFiZWwsXG4gICAgICBtb2RlbFByb3BlcnR5ID0gb3B0aW9ucy5tb2RlbFByb3BlcnR5LFxuICAgICAgdmFsaWRhdGUgPSBvcHRpb25zLnZhbGlkYXRlO1xuXG4gIHJldHVybiBlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcbiAgICBpZDogaWQsXG4gICAgbGFiZWw6IGxhYmVsLFxuICAgIG1vZGVsUHJvcGVydHk6IG1vZGVsUHJvcGVydHksXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgc2VsZWN0ZWRGb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKSB8fCB7fSxcbiAgICAgICAgICB2YWx1ZXMgPSB7fTtcblxuICAgICAgdmFsdWVzW21vZGVsUHJvcGVydHldID0gc2VsZWN0ZWRGb3JtRmllbGRbbW9kZWxQcm9wZXJ0eV07XG5cbiAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgICB2YXIgY29tbWFuZHMgPSBbXTtcblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgY21kID0gb3B0aW9ucy5zZXQoZWxlbWVudCwgdmFsdWVzLCBub2RlKTtcblxuICAgICAgICBpZiAoY21kKSB7XG4gICAgICAgICAgY29tbWFuZHMucHVzaChjbWQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBmb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKSxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0ge307XG5cbiAgICAgIHByb3BlcnRpZXNbbW9kZWxQcm9wZXJ0eV0gPSB2YWx1ZXNbbW9kZWxQcm9wZXJ0eV0gfHwgdW5kZWZpbmVkO1xuXG4gICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBmb3JtRmllbGQsIHByb3BlcnRpZXMpKTtcblxuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xuICAgIH0sXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICByZXR1cm4gIWdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xuICAgIH0sXG4gICAgdmFsaWRhdGU6IHZhbGlkYXRlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlbnN1cmVGb3JtS2V5QW5kRGF0YVN1cHBvcnRlZChlbGVtZW50KSB7XG4gIHJldHVybiAoXG4gICAgaXMoZWxlbWVudCwgJ2JwbW46U3RhcnRFdmVudCcpICYmICFpcyhlbGVtZW50LnBhcmVudCwgJ2JwbW46U3ViUHJvY2VzcycpXG4gICkgfHwgaXMoZWxlbWVudCwgJ2JwbW46VXNlclRhc2snKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xuXG4gIGlmICghZW5zdXJlRm9ybUtleUFuZERhdGFTdXBwb3J0ZWQoZWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBmb3JtIGZpZWxkIHF1ZXJ5aW5nIHRoZSBmb3JtIGZpZWxkIHNlbGVjdCBib3hcbiAgICogZnJvbSB0aGUgRE9NLlxuICAgKlxuICAgKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0gIHtET01FbGVtZW50fSBub2RlIC0gRE9NIGVsZW1lbnQgb2YgYW55IGZvcm0gZmllbGQgdGV4dCBpbnB1dFxuICAgKlxuICAgKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGZvcm0gZmllbGRcbiAgICovXG4gIGZ1bmN0aW9uIGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpIHtcbiAgICB2YXIgc2VsZWN0ZWQgPSBmb3JtRmllbGRzRW50cnkuZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZS5wYXJlbnROb2RlKTtcblxuICAgIGlmIChzZWxlY3RlZC5pZHggPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1IZWxwZXIuZ2V0Rm9ybUZpZWxkKGVsZW1lbnQsIHNlbGVjdGVkLmlkeCk7XG4gIH1cblxuICAvLyBbRm9ybUtleV0gZm9ybSBrZXkgdGV4dCBpbnB1dCBmaWVsZFxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XG4gICAgaWQgOiAnZm9ybS1rZXknLFxuICAgIGxhYmVsIDogdHJhbnNsYXRlKCdGb3JtIEtleScpLFxuICAgIG1vZGVsUHJvcGVydHk6ICdmb3JtS2V5JyxcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb3JtS2V5OiBiby5nZXQoJ2FjdGl2aXRpOmZvcm1LZXknKVxuICAgICAgfTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICAgICAgICBmb3JtS2V5ID0gdmFsdWVzLmZvcm1LZXkgfHwgdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLCB7ICdhY3Rpdml0aTpmb3JtS2V5JzogZm9ybUtleSB9KTtcbiAgICB9XG4gIH0pKTtcblxuICAvLyBbRm9ybURhdGFdIGZvcm0gZmllbGQgc2VsZWN0IGJveFxuICB2YXIgZm9ybUZpZWxkc0VudHJ5ID0gZXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcbiAgICBpZDogJ2Zvcm0tZmllbGRzJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdGb3JtIEZpZWxkcycpLFxuICAgIG1vZGVsUHJvcGVydHk6ICdpZCcsXG4gICAgcHJlZml4OiAnRm9ybVByb3BlcnR5JyxcbiAgICBjcmVhdGVFeHRlbnNpb25FbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgdmFsdWUpIHtcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLCBjb21tYW5kcyA9IFtdO1xuXG4gICAgICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywgeyB2YWx1ZXM6IFtdIH0sIGJvLCBicG1uRmFjdG9yeSk7XG4gICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgeyBleHRlbnNpb25FbGVtZW50czogZXh0ZW5zaW9uRWxlbWVudHMgfSkpO1xuICAgICAgfVxuICAgICAvKiB2YXIgZm9ybURhdGEgPSBmb3JtSGVscGVyLmdldEZvcm1EYXRhKGVsZW1lbnQpO1xuXG4gICAgICBpZiAoIWZvcm1EYXRhKSB7XG4gICAgICAgIGZvcm1EYXRhID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdhY3Rpdml0aTpGb3JtRGF0YScsIHsgZmllbGRzOiBbXSB9LCBleHRlbnNpb25FbGVtZW50cywgYnBtbkZhY3RvcnkpO1xuICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5hZGRBbmRSZW1vdmVFbGVtZW50c0Zyb21MaXN0KFxuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgICAgJ3ZhbHVlcycsXG4gICAgICAgICAgJ2V4dGVuc2lvbkVsZW1lbnRzJyxcbiAgICAgICAgICBbZm9ybURhdGFdLFxuICAgICAgICAgIFtdXG4gICAgICAgICkpO1xuICAgICAgfSovXG4gICAgICAvKiphY3Rpdml0aSDmmK/lkJEgZXh0ZW5zaW9uRWxlbWVudHMg5LiL6L+95Yqg5YWD57Sg77yM6ICM5LiN5pivIGZvcm1EYXRhIOS4i++8jCovXG4gICAgICB2YXIgZmllbGQgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2FjdGl2aXRpOkZvcm1Qcm9wZXJ0eScsIHsgaWQ6IHZhbHVlIH0sIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XG4gICAgICBpZiAodHlwZW9mIGV4dGVuc2lvbkVsZW1lbnRzLnZhbHVlcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIuYWRkRWxlbWVudHNUb2xpc3QoZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsICd2YWx1ZXMnLCBbIGZpZWxkIF0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsgZmllbGQgXVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tbWFuZHM7XG4gICAgfSxcbiAgICByZW1vdmVFeHRlbnNpb25FbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgdmFsdWUsIGlkeCkge1xuICAgICAgdmFyIGZpZWxkcyA9IGZvcm1IZWxwZXIuZ2V0Rm9ybUZpZWxkcyhlbGVtZW50KTtcbiAgICAgIHZhciBlbnRyeSA9IGZpZWxkc1tpZHhdLFxuICAgICAgICAgIGNvbW1hbmRzID0gW107XG5cbiAgICAgIGlmIChmaWVsZHMubGVuZ3RoIDwgMikge1xuICAgICAgICBjb21tYW5kcy5wdXNoKHJlbW92ZUVudHJ5KGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLCBlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIucmVtb3ZlRWxlbWVudHNGcm9tTGlzdChlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgJ3ZhbHVlcycsIG51bGwsIFtlbnRyeV0pKTtcbiAgICAgICAvKiBpZiAoZW50cnkuaWQgPT09IGZvcm1EYXRhLmdldCgnYnVzaW5lc3NLZXknKSkge1xuICAgICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCB7ICdidXNpbmVzc0tleSc6IHVuZGVmaW5lZCB9KSk7XG4gICAgICAgIH0qL1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tbWFuZHM7XG4gICAgfSxcbiAgICBnZXRFeHRlbnNpb25FbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGZvcm1IZWxwZXIuZ2V0Rm9ybUZpZWxkcyhlbGVtZW50KTtcbiAgICB9LFxuICAgIGhpZGVFeHRlbnNpb25FbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG4gIGdyb3VwLmVudHJpZXMucHVzaChmb3JtRmllbGRzRW50cnkpO1xuXG5cbiAgLy8gW0Zvcm1EYXRhXSBGb3JtIEZpZWxkIGxhYmVsXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkubGFiZWwoe1xuICAgIGlkOiAnZm9ybS1maWVsZC1oZWFkZXInLFxuICAgIGxhYmVsVGV4dDogdHJhbnNsYXRlKCdGb3JtIEZpZWxkJyksXG4gICAgc2hvd0xhYmVsOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICByZXR1cm4gISFnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKTtcbiAgICB9XG4gIH0pKTtcblxuICAvLyBbRm9ybURhdGFdIGZvcm0gZmllbGQgaWQgdGV4dCBpbnB1dCBmaWVsZFxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnZhbGlkYXRpb25Bd2FyZVRleHRGaWVsZCh7XG4gICAgaWQ6ICdmb3JtLWZpZWxkLWlkJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdJRCcpLFxuICAgIG1vZGVsUHJvcGVydHk6ICdpZCcsXG5cbiAgICBnZXRQcm9wZXJ0eTogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIHNlbGVjdGVkRm9ybUZpZWxkID0gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSkgfHwge307XG5cbiAgICAgIHJldHVybiBzZWxlY3RlZEZvcm1GaWVsZC5pZDtcbiAgICB9LFxuXG4gICAgc2V0UHJvcGVydHk6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnRpZXMsIG5vZGUpIHtcbiAgICAgIHZhciBmb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKTtcblxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBmb3JtRmllbGQsIHByb3BlcnRpZXMpO1xuICAgIH0sXG5cbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHJldHVybiAhZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XG4gICAgfSxcblxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcblxuICAgICAgdmFyIGZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xuXG4gICAgICBpZiAoZm9ybUZpZWxkKSB7XG5cbiAgICAgICAgdmFyIGlkVmFsdWUgPSB2YWx1ZXMuaWQ7XG5cbiAgICAgICAgaWYgKCFpZFZhbHVlIHx8IGlkVmFsdWUudHJpbSgpID09PSAnJykge1xuICAgICAgICAgIHJldHVybiB7IGlkOiAnRm9ybSBmaWVsZCBpZCBtdXN0IG5vdCBiZSBlbXB0eScgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmb3JtRmllbGRzID0gZm9ybUhlbHBlci5nZXRGb3JtRmllbGRzKGVsZW1lbnQpO1xuXG4gICAgICAgIHZhciBleGlzdGluZ0Zvcm1GaWVsZCA9IGZpbmQoZm9ybUZpZWxkcywgZnVuY3Rpb24oZikge1xuICAgICAgICAgIHJldHVybiBmICE9PSBmb3JtRmllbGQgJiYgZi5pZCA9PT0gaWRWYWx1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGV4aXN0aW5nRm9ybUZpZWxkKSB7XG4gICAgICAgICAgcmV0dXJuIHsgaWQ6ICdGb3JtIGZpZWxkIGlkIGFscmVhZHkgdXNlZCBpbiBmb3JtIGRhdGEuJyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KSk7XG5cbiAgLy8gW0Zvcm1EYXRhXSBmb3JtIGZpZWxkIHR5cGUgY29tYm8gYm94XG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkuY29tYm9Cb3goe1xuICAgIGlkOiAnZm9ybS1maWVsZC10eXBlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUeXBlJyksXG4gICAgc2VsZWN0T3B0aW9uczogW1xuICAgICAgeyBuYW1lOiAnc3RyaW5nJywgdmFsdWU6ICdzdHJpbmcnIH0sXG4gICAgICB7IG5hbWU6ICdsb25nJywgdmFsdWU6ICdsb25nJyB9LFxuICAgICAgeyBuYW1lOiAnYm9vbGVhbicsIHZhbHVlOiAnYm9vbGVhbicgfSxcbiAgICAgIHsgbmFtZTogJ2RhdGUnLCB2YWx1ZTogJ2RhdGUnIH0sXG4gICAgICB7IG5hbWU6ICdlbnVtJywgdmFsdWU6ICdlbnVtJyB9XG4gICAgXSxcbiAgICBtb2RlbFByb3BlcnR5OiAndHlwZScsXG4gICAgZW1wdHlQYXJhbWV0ZXI6IHRydWUsXG5cbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xuXG4gICAgICBpZiAoc2VsZWN0ZWRGb3JtRmllbGQpIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogc2VsZWN0ZWRGb3JtRmllbGQudHlwZSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpLFxuICAgICAgICAgIGNvbW1hbmRzID0gW107XG5cbiAgICAgIGlmIChzZWxlY3RlZEZvcm1GaWVsZC50eXBlID09PSAnZW51bScgJiYgdmFsdWVzLnR5cGUgIT09ICdlbnVtJykge1xuICAgICAgICAvLyBkZWxldGUgYWN0aXZpdGk6dmFsdWUgb2JqZWN0cyBmcm9tIGZvcm1GaWVsZC52YWx1ZXMgd2hlbiBzd2l0Y2hpbmcgZnJvbSB0eXBlIGVudW1cbiAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgc2VsZWN0ZWRGb3JtRmllbGQsIHsgdmFsdWVzOiB1bmRlZmluZWQgfSkpO1xuICAgICAgfVxuICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgc2VsZWN0ZWRGb3JtRmllbGQsIHZhbHVlcykpO1xuXG4gICAgICByZXR1cm4gY29tbWFuZHM7XG4gICAgfSxcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHJldHVybiAhZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XG4gICAgfVxuICB9KSk7XG5cbiAgLy8gW0Zvcm1EYXRhXSBmb3JtIGZpZWxkIGxhYmVsIHRleHQgaW5wdXQgZmllbGRcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGZvcm1GaWVsZFRleHRGaWVsZCh7XG4gICAgaWQ6ICdmb3JtLWZpZWxkLWxhYmVsJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdMYWJlbCcpLFxuICAgIG1vZGVsUHJvcGVydHk6ICdsYWJlbCdcbiAgfSwgZ2V0U2VsZWN0ZWRGb3JtRmllbGQpKTtcblxuICAvLyBbRm9ybURhdGFdIGZvcm0gZmllbGQgZGVmYXVsdFZhbHVlIHRleHQgaW5wdXQgZmllbGRcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGZvcm1GaWVsZFRleHRGaWVsZCh7XG4gICAgaWQ6ICdmb3JtLWZpZWxkLWRlZmF1bHRWYWx1ZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRGVmYXVsdCBWYWx1ZScpLFxuICAgIG1vZGVsUHJvcGVydHk6ICdkZWZhdWx0VmFsdWUnXG4gIH0sIGdldFNlbGVjdGVkRm9ybUZpZWxkKSk7XG5cblxuICAvLyBbRm9ybURhdGFdIGZvcm0gZmllbGQgZW51bSB2YWx1ZXMgbGFiZWxcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5sYWJlbCh7XG4gICAgaWQ6ICdmb3JtLWZpZWxkLWVudW0tdmFsdWVzLWhlYWRlcicsXG4gICAgbGFiZWxUZXh0OiB0cmFuc2xhdGUoJ1ZhbHVlcycpLFxuICAgIGRpdmlkZXI6IHRydWUsXG4gICAgc2hvd0xhYmVsOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgc2VsZWN0ZWRGb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKTtcblxuICAgICAgcmV0dXJuIHNlbGVjdGVkRm9ybUZpZWxkICYmIHNlbGVjdGVkRm9ybUZpZWxkLnR5cGUgPT09ICdlbnVtJztcbiAgICB9XG4gIH0pKTtcblxuICAvLyBbRm9ybURhdGFdIGZvcm0gZmllbGQgZW51bSB2YWx1ZXMgdGFibGVcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50YWJsZSh7XG4gICAgaWQ6ICdmb3JtLWZpZWxkLWVudW0tdmFsdWVzJyxcbiAgICBsYWJlbHM6IFsgdHJhbnNsYXRlKCdJZCcpLCB0cmFuc2xhdGUoJ05hbWUnKSBdLFxuICAgIG1vZGVsUHJvcGVydGllczogWyAnaWQnLCAnbmFtZScgXSxcbiAgICBhZGRMYWJlbDp0cmFuc2xhdGUoJ0FkZCBWYWx1ZScpLFxuICAgIHNob3c6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xuXG4gICAgICByZXR1cm4gc2VsZWN0ZWRGb3JtRmllbGQgJiYgc2VsZWN0ZWRGb3JtRmllbGQudHlwZSA9PT0gJ2VudW0nO1xuICAgIH0sXG4gICAgZ2V0RWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xuXG4gICAgICByZXR1cm4gZm9ybUhlbHBlci5nZXRFbnVtVmFsdWVzKHNlbGVjdGVkRm9ybUZpZWxkKTtcbiAgICB9LFxuICAgIGFkZEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpLFxuICAgICAgICAgIGlkID0gZ2VuZXJhdGVWYWx1ZUlkKCk7XG5cbiAgICAgIHZhciBlbnVtVmFsdWUgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdhY3Rpdml0aTpWYWx1ZScsXG4gICAgICAgIHsgaWQ6IGlkLCBuYW1lOiB1bmRlZmluZWQgfSxcbiAgICAgICAgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXG4gICAgICAgIGJwbW5GYWN0b3J5XG4gICAgICApO1xuXG4gICAgICByZXR1cm4gY21kSGVscGVyLmFkZEVsZW1lbnRzVG9saXN0KGVsZW1lbnQsIHNlbGVjdGVkRm9ybUZpZWxkLCAndmFsdWVzJywgW2VudW1WYWx1ZV0pO1xuICAgIH0sXG4gICAgcmVtb3ZlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgaWR4KSB7XG4gICAgICB2YXIgc2VsZWN0ZWRGb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKSxcbiAgICAgICAgICBlbnVtVmFsdWUgPSBzZWxlY3RlZEZvcm1GaWVsZC52YWx1ZXNbaWR4XTtcblxuICAgICAgcmV0dXJuIGNtZEhlbHBlci5yZW1vdmVFbGVtZW50c0Zyb21MaXN0KGVsZW1lbnQsIHNlbGVjdGVkRm9ybUZpZWxkLCAndmFsdWVzJywgbnVsbCwgW2VudW1WYWx1ZV0pO1xuICAgIH0sXG4gICAgdXBkYXRlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUsIG5vZGUsIGlkeCkge1xuICAgICAgdmFyIHNlbGVjdGVkRm9ybUZpZWxkID0gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSksXG4gICAgICAgICAgZW51bVZhbHVlID0gc2VsZWN0ZWRGb3JtRmllbGQudmFsdWVzW2lkeF07XG5cbiAgICAgIHZhbHVlLm5hbWUgPSB2YWx1ZS5uYW1lIHx8IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgZW51bVZhbHVlLCB2YWx1ZSk7XG4gICAgfSxcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUsIG5vZGUsIGlkeCkge1xuXG4gICAgICB2YXIgc2VsZWN0ZWRGb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKSxcbiAgICAgICAgICBlbnVtVmFsdWUgPSBzZWxlY3RlZEZvcm1GaWVsZC52YWx1ZXNbaWR4XTtcblxuICAgICAgaWYgKGVudW1WYWx1ZSkge1xuICAgICAgICAvLyBjaGVjayBpZiBpZCBpcyB2YWxpZFxuICAgICAgICB2YXIgdmFsaWRhdGlvbkVycm9yID0gdXRpbHMuaXNJZFZhbGlkKGVudW1WYWx1ZSwgdmFsdWUuaWQsIHRyYW5zbGF0ZSk7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICAgIHJldHVybiB7IGlkOiB2YWxpZGF0aW9uRXJyb3IgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSkpO1xuXG4gIC8vIFtGb3JtRGF0YV0gVmFsaWRhdGlvbiBsYWJlbFxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LmxhYmVsKHtcbiAgICBpZDogJ2Zvcm0tZmllbGQtdmFsaWRhdGlvbi1oZWFkZXInLFxuICAgIGxhYmVsVGV4dDogdHJhbnNsYXRlKCdWYWxpZGF0aW9uJyksXG4gICAgZGl2aWRlcjogdHJ1ZSxcbiAgICBzaG93TGFiZWw6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHJldHVybiAhIWdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xuICAgIH1cbiAgfSkpO1xuXG4gIC8vIFtGb3JtRGF0YV0gZm9ybSBmaWVsZCBjb25zdHJhaW50cyB0YWJsZVxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRhYmxlKHtcbiAgICBpZDogJ2NvbnN0cmFpbnRzLWxpc3QnLFxuICAgIG1vZGVsUHJvcGVydGllczogWyAnbmFtZScsICdjb25maWcnIF0sXG4gICAgbGFiZWxzOiBbIHRyYW5zbGF0ZSgnTmFtZScpLCB0cmFuc2xhdGUoJ0NvbmZpZycpIF0sXG4gICAgYWRkTGFiZWw6IHRyYW5zbGF0ZSgnQWRkIENvbnN0cmFpbnQnKSxcbiAgICBnZXRFbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIGZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xuXG4gICAgICByZXR1cm4gZm9ybUhlbHBlci5nZXRDb25zdHJhaW50cyhmb3JtRmllbGQpO1xuICAgIH0sXG4gICAgYWRkRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuXG4gICAgICB2YXIgY29tbWFuZHMgPSBbXSxcbiAgICAgICAgICBmb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKSxcbiAgICAgICAgICB2YWxpZGF0aW9uID0gZm9ybUZpZWxkLnZhbGlkYXRpb247XG5cbiAgICAgIGlmICghdmFsaWRhdGlvbikge1xuICAgICAgICAvLyBjcmVhdGUgdmFsaWRhdGlvbiBidXNpbmVzcyBvYmplY3QgYW5kIGFkZCBpdCB0byBmb3JtIGRhdGEsIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgdmFsaWRhdGlvbiA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6VmFsaWRhdGlvbicsIHt9LCBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSwgYnBtbkZhY3RvcnkpO1xuXG4gICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGZvcm1GaWVsZCwgeyAndmFsaWRhdGlvbic6IHZhbGlkYXRpb24gfSkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV3Q29uc3RyYWludCA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ2FjdGl2aXRpOkNvbnN0cmFpbnQnLFxuICAgICAgICB7IG5hbWU6IHVuZGVmaW5lZCwgY29uZmlnOiB1bmRlZmluZWQgfSxcbiAgICAgICAgdmFsaWRhdGlvbixcbiAgICAgICAgYnBtbkZhY3RvcnlcbiAgICAgICk7XG5cbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLmFkZEVsZW1lbnRzVG9saXN0KGVsZW1lbnQsIHZhbGlkYXRpb24sICdjb25zdHJhaW50cycsIFsgbmV3Q29uc3RyYWludCBdKSk7XG5cbiAgICAgIHJldHVybiBjb21tYW5kcztcbiAgICB9LFxuICAgIHVwZGF0ZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlLCBub2RlLCBpZHgpIHtcbiAgICAgIHZhciBmb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKSxcbiAgICAgICAgICBjb25zdHJhaW50ID0gZm9ybUhlbHBlci5nZXRDb25zdHJhaW50cyhmb3JtRmllbGQpW2lkeF07XG5cbiAgICAgIHZhbHVlLm5hbWUgPSB2YWx1ZS5uYW1lIHx8IHVuZGVmaW5lZDtcbiAgICAgIHZhbHVlLmNvbmZpZyA9IHZhbHVlLmNvbmZpZyB8fCB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgY29uc3RyYWludCwgdmFsdWUpO1xuICAgIH0sXG4gICAgcmVtb3ZlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgaWR4KSB7XG4gICAgICB2YXIgY29tbWFuZHMgPSBbXSxcbiAgICAgICAgICBmb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKSxcbiAgICAgICAgICBjb25zdHJhaW50cyA9IGZvcm1IZWxwZXIuZ2V0Q29uc3RyYWludHMoZm9ybUZpZWxkKSxcbiAgICAgICAgICBjdXJyZW50Q29uc3RyYWludCA9IGNvbnN0cmFpbnRzW2lkeF07XG5cbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGZvcm1GaWVsZC52YWxpZGF0aW9uLFxuICAgICAgICAnY29uc3RyYWludHMnLFxuICAgICAgICBudWxsLFxuICAgICAgICBbIGN1cnJlbnRDb25zdHJhaW50IF1cbiAgICAgICkpO1xuXG4gICAgICBpZiAoY29uc3RyYWludHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIHJlbW92ZSBhY3Rpdml0aTp2YWxpZGF0aW9uIGlmIHRoZSBsYXN0IGV4aXN0aW5nIGNvbnN0cmFpbnQgaGFzIGJlZW4gcmVtb3ZlZFxuICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBmb3JtRmllbGQsIHsgdmFsaWRhdGlvbjogdW5kZWZpbmVkIH0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xuICAgIH0sXG4gICAgc2hvdzogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgcmV0dXJuICEhZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XG4gICAgfVxuICB9KSk7XG5cbiAgLy8gW0Zvcm1EYXRhXSBQcm9wZXJ0aWVzIGxhYmVsXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkubGFiZWwoe1xuICAgIGlkOiAnZm9ybS1maWVsZC1wcm9wZXJ0aWVzLWhlYWRlcicsXG4gICAgbGFiZWxUZXh0OiB0cmFuc2xhdGUoJ1Byb3BlcnRpZXMnKSxcbiAgICBkaXZpZGVyOiB0cnVlLFxuICAgIHNob3dMYWJlbDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgcmV0dXJuICEhZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XG4gICAgfVxuICB9KSk7XG5cbiAgLy8gW0Zvcm1EYXRhXSBhY3Rpdml0aTpwcm9wZXJ0aWVzIHRhYmxlXG4gIGdyb3VwLmVudHJpZXMucHVzaChwcm9wZXJ0aWVzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XG4gICAgaWQ6ICdmb3JtLWZpZWxkLXByb3BlcnRpZXMnLFxuICAgIG1vZGVsUHJvcGVydGllczogWyAnaWQnLCAndmFsdWUnIF0sXG4gICAgbGFiZWxzOiBbIHRyYW5zbGF0ZSgnSWQnKSwgdHJhbnNsYXRlKCdWYWx1ZScpIF0sXG4gICAgZ2V0UGFyZW50OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICByZXR1cm4gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XG4gICAgfSxcbiAgICBzaG93OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICByZXR1cm4gISFnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKTtcbiAgICB9XG4gIH0sIHRyYW5zbGF0ZSkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XG5cbnZhciBoaXN0b3J5VGltZVRvTGl2ZSA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vSGlzdG9yeVRpbWVUb0xpdmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICBpZiAoaXMoZWxlbWVudCwgJ2FjdGl2aXRpOlByb2Nlc3MnKSB8fFxuICAgICAgaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBidXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKSkge1xuXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGhpc3RvcnlUaW1lVG9MaXZlKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XG4gICAgICBnZXRCdXNpbmVzc09iamVjdDogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICAgICAgICBpZiAoIWlzKGJvLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgICAgICAgcmV0dXJuIGJvO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJvLmdldCgncHJvY2Vzc1JlZicpO1xuICAgICAgfVxuICAgIH0sIHRyYW5zbGF0ZSkpO1xuXG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbnB1dE91dHB1dFBhcmFtZXRlciA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vSW5wdXRPdXRwdXRQYXJhbWV0ZXInKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xuXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChpbnB1dE91dHB1dFBhcmFtZXRlcihlbGVtZW50LCBicG1uRmFjdG9yeSwgYXNzaWduKHt9LCBvcHRpb25zKSwgdHJhbnNsYXRlKSk7XG5cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbnB1dE91dHB1dCA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vSW5wdXRPdXRwdXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xuXG4gIHZhciBpbnB1dE91dHB1dEVudHJ5ID0gaW5wdXRPdXRwdXQoZWxlbWVudCwgYnBtbkZhY3RvcnksIHt9LCB0cmFuc2xhdGUpO1xuXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChpbnB1dE91dHB1dEVudHJ5LmVudHJpZXMpO1xuXG4gIHJldHVybiB7XG4gICAgZ2V0U2VsZWN0ZWRQYXJhbWV0ZXI6IGlucHV0T3V0cHV0RW50cnkuZ2V0U2VsZWN0ZWRQYXJhbWV0ZXJcbiAgfTtcblxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XG5cbnZhciBqb2JQcmlvcml0eSA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vSm9iUHJpb3JpdHknKSxcbiAgICBqb2JSZXRyeVRpbWVDeWNsZSA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vSm9iUmV0cnlUaW1lQ3ljbGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICBpZiAoaXMoZWxlbWVudCwgJ2FjdGl2aXRpOkpvYlByaW9yaXplZCcpIHx8XG4gICAgICBpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmIGJ1c2luZXNzT2JqZWN0LmdldCgncHJvY2Vzc1JlZicpKSB7XG5cbiAgICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoam9iUHJpb3JpdHkoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcbiAgICAgIGdldEJ1c2luZXNzT2JqZWN0OiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gICAgICAgIGlmICghaXMoYm8sICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICAgICAgICByZXR1cm4gYm87XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYm8uZ2V0KCdwcm9jZXNzUmVmJyk7XG4gICAgICB9XG4gICAgfSwgdHJhbnNsYXRlKSk7XG4gIH1cblxuICBpZiAoaXMoZWxlbWVudCwgJ2FjdGl2aXRpOkFzeW5jQ2FwYWJsZScpKSB7XG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGpvYlJldHJ5VGltZUN5Y2xlKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XG4gICAgICBnZXRCdXNpbmVzc09iamVjdDogZ2V0QnVzaW5lc3NPYmplY3RcbiAgICB9LCB0cmFuc2xhdGUpKTtcbiAgfVxuXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcblxudmFyIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKSxcbiAgICBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvSW1wbGVtZW50YXRpb25UeXBlSGVscGVyJyksXG5cbiAgICBzY3JpcHRJbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vU2NyaXB0Jyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xuXG4gIHZhciBMSVNURU5FUl9UWVBFX0xBQkVMID0ge1xuICAgIGNsYXNzOiB0cmFuc2xhdGUoJ0phdmEgQ2xhc3MnKSxcbiAgICBleHByZXNzaW9uOiB0cmFuc2xhdGUoJ0V4cHJlc3Npb24nKSxcbiAgICBkZWxlZ2F0ZUV4cHJlc3Npb246IHRyYW5zbGF0ZSgnRGVsZWdhdGUgRXhwcmVzc2lvbicpLFxuICAgIHNjcmlwdDogdHJhbnNsYXRlKCdTY3JpcHQnKVxuICB9O1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBnZXRTZWxlY3RlZExpc3RlbmVyID0gb3B0aW9ucy5nZXRTZWxlY3RlZExpc3RlbmVyO1xuXG4gIHZhciBjbGFzc1Byb3AgPSAnY2xhc3MnLFxuICAgICAgZXhwcmVzc2lvblByb3AgPSAnZXhwcmVzc2lvbicsXG4gICAgICBkZWxlZ2F0ZUV4cHJlc3Npb25Qcm9wID0gJ2RlbGVnYXRlRXhwcmVzc2lvbicsXG4gICAgICBzY3JpcHRQcm9wID0gJ3NjcmlwdCc7XG5cbiAgdmFyIGV4ZWN1dGlvbkxpc3RlbmVyRXZlbnRUeXBlT3B0aW9ucyA9IEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5pc1NlcXVlbmNlRmxvdyhlbGVtZW50KSA/IFtcbiAgICB7IG5hbWU6IHRyYW5zbGF0ZSgndGFrZScpLCB2YWx1ZTogJ3Rha2UnIH1cbiAgXSA6IFtcbiAgICB7IG5hbWU6IHRyYW5zbGF0ZSgnc3RhcnQnKSwgdmFsdWU6ICdzdGFydCcgfSxcbiAgICB7IG5hbWU6IHRyYW5zbGF0ZSgnZW5kJyksIHZhbHVlOiAnZW5kJyB9XG4gIF07XG5cbiAgdmFyIHRhc2tMaXN0ZW5lckV2ZW50VHlwZU9wdGlvbnMgPSBbXG4gICAgeyBuYW1lOiB0cmFuc2xhdGUoJ2NyZWF0ZScpLCB2YWx1ZTogJ2NyZWF0ZScgfSxcbiAgICB7IG5hbWU6IHRyYW5zbGF0ZSgnYXNzaWdubWVudCcpLCB2YWx1ZTogJ2Fzc2lnbm1lbnQnIH0sXG4gICAgeyBuYW1lOiB0cmFuc2xhdGUoJ2NvbXBsZXRlJyksIHZhbHVlOiAnY29tcGxldGUnIH0sXG4gICAgeyBuYW1lOiB0cmFuc2xhdGUoJ2RlbGV0ZScpLCB2YWx1ZTogJ2RlbGV0ZScgfVxuICBdO1xuXG4gIHZhciBpc1NlbGVjdGVkID0gZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xuICB9O1xuXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3Rvcnkuc2VsZWN0Qm94KHtcbiAgICBpZDogJ2xpc3RlbmVyLWV2ZW50LXR5cGUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0V2ZW50IFR5cGUnKSxcbiAgICBtb2RlbFByb3BlcnR5OiAnZXZlbnRUeXBlJyxcbiAgICBlbXB0eVBhcmFtZXRlcjogZmFsc2UsXG5cbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcblxuXG4gICAgICB2YXIgbGlzdGVuZXIgPSBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xuXG4gICAgICB2YXIgZXZlbnRUeXBlID0gbGlzdGVuZXIgJiYgbGlzdGVuZXIuZ2V0KCdldmVudCcpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBldmVudFR5cGU6IGV2ZW50VHlwZVxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcbiAgICAgIHZhciBldmVudFR5cGUgPSB2YWx1ZXMuZXZlbnRUeXBlO1xuXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSksIHsgZXZlbnQ6IGV2ZW50VHlwZSB9KTtcbiAgICB9LFxuXG4gICAgc2VsZWN0T3B0aW9uczogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIGV2ZW50VHlwZU9wdGlvbnM7XG5cbiAgICAgIHZhciBzZWxlY3RlZExpc3RlbmVyID0gZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKTtcbiAgICAgIGlmIChJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuaXNUYXNrTGlzdGVuZXIoc2VsZWN0ZWRMaXN0ZW5lcikpIHtcbiAgICAgICAgZXZlbnRUeXBlT3B0aW9ucyA9IHRhc2tMaXN0ZW5lckV2ZW50VHlwZU9wdGlvbnM7XG4gICAgICB9IGVsc2UgaWYgKEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5pc0V4ZWN1dGlvbkxpc3RlbmVyKHNlbGVjdGVkTGlzdGVuZXIpKSB7XG4gICAgICAgIGV2ZW50VHlwZU9wdGlvbnMgPSBleGVjdXRpb25MaXN0ZW5lckV2ZW50VHlwZU9wdGlvbnM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBldmVudFR5cGVPcHRpb25zO1xuXG4gICAgfSxcblxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgcmV0dXJuICFpc1NlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xuICAgIH1cblxuICB9KSk7XG5cblxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnNlbGVjdEJveCh7XG4gICAgaWQ6ICdsaXN0ZW5lci10eXBlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdMaXN0ZW5lciBUeXBlJyksXG4gICAgc2VsZWN0T3B0aW9uczogW1xuICAgICAgeyB2YWx1ZTogY2xhc3NQcm9wLCBuYW1lOiB0cmFuc2xhdGUoJ0phdmEgQ2xhc3MnKSB9LFxuICAgICAgeyB2YWx1ZTogZXhwcmVzc2lvblByb3AsIG5hbWU6IHRyYW5zbGF0ZSgnRXhwcmVzc2lvbicpIH0sXG4gICAgICB7IHZhbHVlOiBkZWxlZ2F0ZUV4cHJlc3Npb25Qcm9wLCBuYW1lOiB0cmFuc2xhdGUoJ0RlbGVnYXRlIEV4cHJlc3Npb24nKSB9LFxuICAgICAgeyB2YWx1ZTogc2NyaXB0UHJvcCwgbmFtZTogdHJhbnNsYXRlKCdTY3JpcHQnKSB9XG4gICAgXSxcbiAgICBtb2RlbFByb3BlcnR5OiAnbGlzdGVuZXJUeXBlJyxcbiAgICBlbXB0eVBhcmFtZXRlcjogZmFsc2UsXG5cbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHZhciBsaXN0ZW5lciA9IGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaXN0ZW5lclR5cGU6IEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5nZXRJbXBsZW1lbnRhdGlvblR5cGUobGlzdGVuZXIpXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgdmFyIGxpc3RlbmVyID0gZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKSxcbiAgICAgICAgICBsaXN0ZW5lclR5cGUgPSB2YWx1ZXMubGlzdGVuZXJUeXBlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICB1cGRhdGUgPSB7fTtcblxuICAgICAgdXBkYXRlW2NsYXNzUHJvcF0gPSBsaXN0ZW5lclR5cGUgPT09IGNsYXNzUHJvcCA/ICcnIDogdW5kZWZpbmVkO1xuICAgICAgdXBkYXRlW2V4cHJlc3Npb25Qcm9wXSA9IGxpc3RlbmVyVHlwZSA9PT0gZXhwcmVzc2lvblByb3AgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICAgIHVwZGF0ZVtkZWxlZ2F0ZUV4cHJlc3Npb25Qcm9wXSA9IGxpc3RlbmVyVHlwZSA9PT0gZGVsZWdhdGVFeHByZXNzaW9uUHJvcCA/ICcnIDogdW5kZWZpbmVkO1xuICAgICAgdXBkYXRlW3NjcmlwdFByb3BdID0gbGlzdGVuZXJUeXBlID09PSBzY3JpcHRQcm9wID8gYnBtbkZhY3RvcnkuY3JlYXRlKCdhY3Rpdml0aTpTY3JpcHQnKSA6IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBsaXN0ZW5lciwgdXBkYXRlKTtcbiAgICB9LFxuXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICByZXR1cm4gIWlzU2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XG4gICAgfVxuXG4gIH0pKTtcblxuXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcbiAgICBpZDogJ2xpc3RlbmVyLXZhbHVlJyxcbiAgICBkYXRhVmFsdWVMYWJlbDogJ2xpc3RlbmVyVmFsdWVMYWJlbCcsXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2xpc3RlbmVyVmFsdWUnLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgdmFsdWUgPSB7fSxcbiAgICAgICAgICBsaXN0ZW5lciA9IGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSksXG4gICAgICAgICAgbGlzdGVuZXJUeXBlID0gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldEltcGxlbWVudGF0aW9uVHlwZShsaXN0ZW5lcik7XG5cbiAgICAgIHZhbHVlLmxpc3RlbmVyVmFsdWVMYWJlbCA9IExJU1RFTkVSX1RZUEVfTEFCRUxbbGlzdGVuZXJUeXBlXSB8fCAnJztcbiAgICAgIHZhbHVlLmxpc3RlbmVyVmFsdWUgPSAobGlzdGVuZXIgJiYgbGlzdGVuZXIuZ2V0KGxpc3RlbmVyVHlwZSkpIHx8IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgdmFyIHVwZGF0ZSA9IHt9LFxuICAgICAgICAgIGxpc3RlbmVyID0gZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKSxcbiAgICAgICAgICBsaXN0ZW5lclR5cGUgPSBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0SW1wbGVtZW50YXRpb25UeXBlKGxpc3RlbmVyKTtcblxuICAgICAgdXBkYXRlW2xpc3RlbmVyVHlwZV0gPSB2YWx1ZXMubGlzdGVuZXJWYWx1ZSB8fCAnJztcblxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBsaXN0ZW5lciwgdXBkYXRlKTtcbiAgICB9LFxuXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgbGlzdGVuZXIgPSBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xuICAgICAgcmV0dXJuICFsaXN0ZW5lciB8fCBsaXN0ZW5lci5zY3JpcHQ7XG4gICAgfSxcblxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHZhbHVlcy5saXN0ZW5lclZhbHVlLFxuICAgICAgICAgIHZhbGlkYXRlID0ge307XG5cbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgdmFsaWRhdGUubGlzdGVuZXJWYWx1ZSA9IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbGlkYXRlO1xuICAgIH1cblxuICB9KSk7XG5cbiAgdmFyIHNjcmlwdCA9IHNjcmlwdEltcGxlbWVudGF0aW9uKCdzY3JpcHRGb3JtYXQnLCAndmFsdWUnLCB0cnVlLCB0cmFuc2xhdGUpO1xuXG4gIGdyb3VwLmVudHJpZXMucHVzaCh7XG4gICAgaWQ6ICdsaXN0ZW5lci1zY3JpcHQtdmFsdWUnLFxuICAgIGh0bWw6ICc8ZGl2IGRhdGEtc2hvdz1cImlzU2NyaXB0XCI+JyArXG4gICAgICAgICAgICBzY3JpcHQudGVtcGxhdGUgK1xuICAgICAgICAgICc8L2Rpdj4nLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgbGlzdGVuZXIgPSBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xuICAgICAgcmV0dXJuIGxpc3RlbmVyICYmIGxpc3RlbmVyLnNjcmlwdCA/IHNjcmlwdC5nZXQoZWxlbWVudCwgbGlzdGVuZXIuc2NyaXB0KSA6IHt9O1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgdmFyIGxpc3RlbmVyID0gZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKTtcbiAgICAgIHZhciB1cGRhdGUgPSBzY3JpcHQuc2V0KGVsZW1lbnQsIHZhbHVlcywgbGlzdGVuZXIpO1xuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBsaXN0ZW5lci5zY3JpcHQsIHVwZGF0ZSk7XG4gICAgfSxcblxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcbiAgICAgIHZhciBsaXN0ZW5lciA9IGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSk7XG4gICAgICByZXR1cm4gbGlzdGVuZXIgJiYgbGlzdGVuZXIuc2NyaXB0ID8gc2NyaXB0LnZhbGlkYXRlKGVsZW1lbnQsIHZhbHVlcykgOiB7fTtcbiAgICB9LFxuXG4gICAgaXNTY3JpcHQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHZhciBsaXN0ZW5lciA9IGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSk7XG4gICAgICByZXR1cm4gbGlzdGVuZXIgJiYgbGlzdGVuZXIuc2NyaXB0O1xuICAgIH0sXG5cbiAgICBzY3JpcHQ6IHNjcmlwdFxuXG4gIH0pO1xuXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xuXG52YXIgZmllbGRJbmplY3Rpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0ZpZWxkSW5qZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcblxuICBvcHRpb25zID0gYXNzaWduKHtcbiAgICBpZFByZWZpeDogJ2xpc3RlbmVyLScsXG4gICAgaW5zaWRlTGlzdGVuZXI6IHRydWVcbiAgfSwgb3B0aW9ucyk7XG5cbiAgdmFyIGZpZWxkSW5qZWN0aW9uRW50cnkgPSBmaWVsZEluamVjdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlLCBvcHRpb25zKTtcblxuICBpZiAoZmllbGRJbmplY3Rpb25FbnRyeSAmJiBmaWVsZEluamVjdGlvbkVudHJ5Lmxlbmd0aCA+IDApIHtcbiAgICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoZmllbGRJbmplY3Rpb25FbnRyeSk7XG4gIH1cblxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGxpc3RlbmVyID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9MaXN0ZW5lcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XG5cbiAgdmFyIGxpc3RlbmVyRW50cnkgPSBsaXN0ZW5lcihlbGVtZW50LCBicG1uRmFjdG9yeSwge30sIHRyYW5zbGF0ZSk7XG5cbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGxpc3RlbmVyRW50cnkuZW50cmllcyk7XG5cbiAgcmV0dXJuIHtcbiAgICBnZXRTZWxlY3RlZExpc3RlbmVyOiBsaXN0ZW5lckVudHJ5LmdldFNlbGVjdGVkTGlzdGVuZXJcbiAgfTtcblxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XG5cbnZhciBtdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcyA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vTXVsdGlJbnN0YW5jZUxvb3BDaGFyYWN0ZXJpc3RpY3MnKTtcblxudmFyIGpvYlJldHJ5VGltZUN5Y2xlID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9Kb2JSZXRyeVRpbWVDeWNsZScpLFxuICAgIGFzeW5jQ29udGludWF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9Bc3luY0NvbnRpbnVhdGlvbicpO1xuXG5cbmZ1bmN0aW9uIGdldExvb3BDaGFyYWN0ZXJpc3RpY3MoZWxlbWVudCkge1xuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgcmV0dXJuIGJvLmxvb3BDaGFyYWN0ZXJpc3RpY3M7XG59XG5cblxuZnVuY3Rpb24gZW5zdXJlTXVsdGlJbnN0YW5jZVN1cHBvcnRlZChlbGVtZW50KSB7XG4gIHZhciBsb29wQ2hhcmFjdGVyaXN0aWNzID0gZ2V0TG9vcENoYXJhY3RlcmlzdGljcyhlbGVtZW50KTtcbiAgcmV0dXJuICEhbG9vcENoYXJhY3RlcmlzdGljcyAmJiBpcyhsb29wQ2hhcmFjdGVyaXN0aWNzLCAnYWN0aXZpdGk6Q29sbGVjdGFibGUnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xuXG4gIGlmICghZW5zdXJlTXVsdGlJbnN0YW5jZVN1cHBvcnRlZChlbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIG11bHRpIGluc3RhbmNlIHByb3BlcnRpZXNcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KG11bHRpSW5zdGFuY2VMb29wQ2hhcmFjdGVyaXN0aWNzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpKTtcblxuICAvLyBhc3luYyBjb250aW51YXRpb24gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoYXN5bmNDb250aW51YXRpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcbiAgICBnZXRCdXNpbmVzc09iamVjdDogZ2V0TG9vcENoYXJhY3RlcmlzdGljcyxcbiAgICBpZFByZWZpeDogJ211bHRpSW5zdGFuY2UtJyxcbiAgICBsYWJlbFByZWZpeDogdHJhbnNsYXRlKCdNdWx0aSBJbnN0YW5jZSAnKVxuICB9LCB0cmFuc2xhdGUpKTtcblxuXG4gIC8vIHJldHJ5IHRpbWUgY3ljbGUgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoam9iUmV0cnlUaW1lQ3ljbGUoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcbiAgICBnZXRCdXNpbmVzc09iamVjdDogZ2V0TG9vcENoYXJhY3RlcmlzdGljcyxcbiAgICBpZFByZWZpeDogJ211bHRpSW5zdGFuY2UtJyxcbiAgICBsYWJlbFByZWZpeDogdHJhbnNsYXRlKCdNdWx0aSBJbnN0YW5jZSAnKVxuICB9LCB0cmFuc2xhdGUpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBwcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9Qcm9wZXJ0aWVzJyksXG4gICAgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyksXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcblxuICB2YXIgcHJvcGVydGllc0VudHJ5ID0gcHJvcGVydGllcyhlbGVtZW50LCBicG1uRmFjdG9yeSwge1xuICAgIGlkOiAncHJvcGVydGllcycsXG4gICAgbW9kZWxQcm9wZXJ0aWVzOiBbICduYW1lJywgJ3ZhbHVlJyBdLFxuICAgIGxhYmVsczogWyB0cmFuc2xhdGUoJ05hbWUnKSwgdHJhbnNsYXRlKCdWYWx1ZScpIF0sXG5cbiAgICBnZXRQYXJlbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGJvKSB7XG4gICAgICByZXR1cm4gYm8uZXh0ZW5zaW9uRWxlbWVudHM7XG4gICAgfSxcblxuICAgIGNyZWF0ZVBhcmVudDogZnVuY3Rpb24oZWxlbWVudCwgYm8pIHtcbiAgICAgIHZhciBwYXJlbnQgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7IHZhbHVlczogW10gfSwgYm8sIGJwbW5GYWN0b3J5KTtcbiAgICAgIHZhciBjbWQgPSBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHsgZXh0ZW5zaW9uRWxlbWVudHM6IHBhcmVudCB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNtZDogY21kLFxuICAgICAgICBwYXJlbnQ6IHBhcmVudFxuICAgICAgfTtcbiAgICB9XG4gIH0sIHRyYW5zbGF0ZSk7XG5cbiAgaWYgKHByb3BlcnRpZXNFbnRyeSkge1xuICAgIGdyb3VwLmVudHJpZXMucHVzaChwcm9wZXJ0aWVzRW50cnkpO1xuICB9XG5cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXG4gICAgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxuICAgIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxuICAgIHNjcmlwdEltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9TY3JpcHQnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XG4gIHZhciBibztcblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46U2NyaXB0VGFzaycpKSB7XG4gICAgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgfVxuXG4gIGlmICghYm8pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2NyaXB0ID0gc2NyaXB0SW1wbGVtZW50YXRpb24oJ3NjcmlwdEZvcm1hdCcsICdzY3JpcHQnLCBmYWxzZSwgdHJhbnNsYXRlKTtcbiAgZ3JvdXAuZW50cmllcy5wdXNoKHtcbiAgICBpZDogJ3NjcmlwdC1pbXBsZW1lbnRhdGlvbicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnU2NyaXB0JyksXG4gICAgaHRtbDogc2NyaXB0LnRlbXBsYXRlLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICByZXR1cm4gc2NyaXB0LmdldChlbGVtZW50LCBibyk7XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBjb250YWluZXJFbGVtZW50KSB7XG4gICAgICB2YXIgcHJvcGVydGllcyA9IHNjcmlwdC5zZXQoZWxlbWVudCwgdmFsdWVzLCBjb250YWluZXJFbGVtZW50KTtcblxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHByb3BlcnRpZXMpO1xuICAgIH0sXG5cbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XG4gICAgICByZXR1cm4gc2NyaXB0LnZhbGlkYXRlKGVsZW1lbnQsIHZhbHVlcyk7XG4gICAgfSxcblxuICAgIHNjcmlwdCA6IHNjcmlwdCxcblxuICAgIGNzc0NsYXNzZXM6IFsnYnBwLXRleHRmaWVsZCddXG5cbiAgfSk7XG5cbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xuICAgIGlkIDogJ3NjcmlwdFJlc3VsdFZhcmlhYmxlJyxcbiAgICBsYWJlbCA6IHRyYW5zbGF0ZSgnUmVzdWx0IFZhcmlhYmxlJyksXG4gICAgbW9kZWxQcm9wZXJ0eSA6ICdzY3JpcHRSZXN1bHRWYXJpYWJsZScsXG5cbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5TmFtZSkge1xuICAgICAgdmFyIGJvUmVzdWx0VmFyaWFibGUgPSBiby5nZXQoJ2FjdGl2aXRpOnJlc3VsdFZhcmlhYmxlJyk7XG5cbiAgICAgIHJldHVybiB7IHNjcmlwdFJlc3VsdFZhcmlhYmxlIDogYm9SZXN1bHRWYXJpYWJsZSB9O1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgY29udGFpbmVyRWxlbWVudCkge1xuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHtcbiAgICAgICAgJ2FjdGl2aXRpOnJlc3VsdFZhcmlhYmxlJzogdmFsdWVzLnNjcmlwdFJlc3VsdFZhcmlhYmxlLmxlbmd0aFxuICAgICAgICAgID8gdmFsdWVzLnNjcmlwdFJlc3VsdFZhcmlhYmxlXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH1cblxuICB9KSk7XG5cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvSW1wbGVtZW50YXRpb25UeXBlSGVscGVyJyksXG4gICAgSW5wdXRPdXRwdXRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvSW5wdXRPdXRwdXRIZWxwZXInKTtcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vVXRpbHMnKSxcbiAgICBlc2NhcGVIVE1MID0gdXRpbHMuZXNjYXBlSFRNTCxcbiAgICB0cmlnZ2VyQ2xpY2tFdmVudCA9IHV0aWxzLnRyaWdnZXJDbGlja0V2ZW50O1xuXG52YXIgaW1wbGVtZW50YXRpb25UeXBlID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9JbXBsZW1lbnRhdGlvblR5cGUnKSxcbiAgICBkZWxlZ2F0ZSA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vRGVsZWdhdGUnKSxcbiAgICBleHRlcm5hbCA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vRXh0ZXJuYWwnKSxcbiAgICBjYWxsYWJsZSA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vQ2FsbGFibGUnKSxcbiAgICByZXN1bHRWYXJpYWJsZSA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vUmVzdWx0VmFyaWFibGUnKTtcblxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XG5cbnZhciBkb21RdWVyeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5xdWVyeSxcbiAgICBkb21DbG9zZXN0ID0gcmVxdWlyZSgnbWluLWRvbScpLmNsb3Nlc3QsXG4gICAgZG9tQ2xhc3NlcyA9IHJlcXVpcmUoJ21pbi1kb20nKS5jbGFzc2VzO1xuXG5mdW5jdGlvbiBnZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCkge1xuICByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkge1xuICByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBpc0RtbkNhcGFibGUoZWxlbWVudCkge1xuICByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzRG1uQ2FwYWJsZShlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gaXNFeHRlcm5hbENhcGFibGUoZWxlbWVudCkge1xuICByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzRXh0ZXJuYWxDYXBhYmxlKGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBpc1NlcnZpY2VUYXNrTGlrZShlbGVtZW50KSB7XG4gIHJldHVybiBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuaXNTZXJ2aWNlVGFza0xpa2UoZWxlbWVudCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcblxuICBpZiAoIWlzU2VydmljZVRhc2tMaWtlKGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBoYXNEbW5TdXBwb3J0ID0gaXNEbW5DYXBhYmxlKGVsZW1lbnQpO1xuICB2YXIgaGFzRXh0ZXJuYWxTdXBwb3J0ID0gaXNFeHRlcm5hbENhcGFibGUoZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkpO1xuXG4gIC8vIGltcGxlbWVudGF0aW9uIHR5cGUgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xuICAgIGdldEJ1c2luZXNzT2JqZWN0OiBnZXRCdXNpbmVzc09iamVjdCxcbiAgICBnZXRJbXBsZW1lbnRhdGlvblR5cGU6IGdldEltcGxlbWVudGF0aW9uVHlwZSxcbiAgICBoYXNEbW5TdXBwb3J0OiBoYXNEbW5TdXBwb3J0LFxuICAgIGhhc0V4dGVybmFsU3VwcG9ydDogaGFzRXh0ZXJuYWxTdXBwb3J0LFxuICAgIGhhc1NlcnZpY2VUYXNrTGlrZVN1cHBvcnQ6IHRydWVcbiAgfSwgdHJhbnNsYXRlKSk7XG5cblxuICAvLyBkZWxlZ2F0ZSAoY2xhc3MsIGV4cHJlc3Npb24sIGRlbGVnYXRlRXhwcmVzc2lvbikgLy8vLy8vLy8vL1xuXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChkZWxlZ2F0ZShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xuICAgIGdldEJ1c2luZXNzT2JqZWN0OiBnZXRCdXNpbmVzc09iamVjdCxcbiAgICBnZXRJbXBsZW1lbnRhdGlvblR5cGU6IGdldEltcGxlbWVudGF0aW9uVHlwZVxuICB9LCB0cmFuc2xhdGUpKTtcblxuXG4gIC8vIHJlc3VsdCB2YXJpYWJsZSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChyZXN1bHRWYXJpYWJsZShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xuICAgIGdldEJ1c2luZXNzT2JqZWN0OiBnZXRCdXNpbmVzc09iamVjdCxcbiAgICBnZXRJbXBsZW1lbnRhdGlvblR5cGU6IGdldEltcGxlbWVudGF0aW9uVHlwZSxcbiAgICBoaWRlUmVzdWx0VmFyaWFibGU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHJldHVybiBnZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCkgIT09ICdleHByZXNzaW9uJztcbiAgICB9XG4gIH0sIHRyYW5zbGF0ZSkpO1xuXG4gIC8vIGV4dGVybmFsIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgaWYgKGhhc0V4dGVybmFsU3VwcG9ydCkge1xuICAgIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChleHRlcm5hbChlbGVtZW50LCBicG1uRmFjdG9yeSwge1xuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGdldEJ1c2luZXNzT2JqZWN0LFxuICAgICAgZ2V0SW1wbGVtZW50YXRpb25UeXBlOiBnZXRJbXBsZW1lbnRhdGlvblR5cGVcbiAgICB9LCB0cmFuc2xhdGUpKTtcbiAgfVxuXG5cbiAgLy8gZG1uIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgaWYgKGhhc0RtblN1cHBvcnQpIHtcbiAgICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoY2FsbGFibGUoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcbiAgICAgIGdldENhbGxhYmxlVHlwZTogZ2V0SW1wbGVtZW50YXRpb25UeXBlXG4gICAgfSwgdHJhbnNsYXRlKSk7XG4gIH1cblxuXG4gIC8vIGNvbm5lY3RvciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICB2YXIgaXNDb25uZWN0b3IgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KSA9PT0gJ2Nvbm5lY3Rvcic7XG4gIH07XG5cbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5saW5rKHtcbiAgICBpZDogJ2NvbmZpZ3VyZUNvbm5lY3RvckxpbmsnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NvbmZpZ3VyZSBDb25uZWN0b3InKSxcbiAgICBoYW5kbGVDbGljazogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgZXZlbnQpIHtcblxuICAgICAgdmFyIGNvbm5lY3RvclRhYkVsID0gZ2V0VGFiTm9kZShub2RlLCAnY29ubmVjdG9yJyk7XG5cbiAgICAgIGlmIChjb25uZWN0b3JUYWJFbCkge1xuICAgICAgICB0cmlnZ2VyQ2xpY2tFdmVudChjb25uZWN0b3JUYWJFbCk7XG4gICAgICB9XG5cbiAgICAgIC8vIHN1cHByZXNzIGFjdHVhbCBsaW5rIGNsaWNrXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBzaG93TGluazogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIGxpbmsgPSBkb21RdWVyeSgnYScsIG5vZGUpO1xuICAgICAgbGluay50ZXh0Q29udGVudCA9ICcnO1xuXG4gICAgICBkb21DbGFzc2VzKGxpbmspLnJlbW92ZSgnYnBwLWVycm9yLW1lc3NhZ2UnKTtcblxuICAgICAgaWYgKGlzQ29ubmVjdG9yKGVsZW1lbnQpKSB7XG4gICAgICAgIHZhciBjb25uZWN0b3JJZCA9IElucHV0T3V0cHV0SGVscGVyLmdldENvbm5lY3RvcihlbGVtZW50KS5nZXQoJ2Nvbm5lY3RvcklkJyk7XG4gICAgICAgIGlmIChjb25uZWN0b3JJZCkge1xuICAgICAgICAgIGxpbmsudGV4dENvbnRlbnQgPSB0cmFuc2xhdGUoJ0NvbmZpZ3VyZSBDb25uZWN0b3InKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5rLmlubmVySFRNTCA9ICc8c3BhbiBjbGFzcz1cImJwcC1pY29uLXdhcm5pbmdcIj48L3NwYW4+ICcgKyBlc2NhcGVIVE1MKHRyYW5zbGF0ZSgnTXVzdCBjb25maWd1cmUgQ29ubmVjdG9yJykpO1xuICAgICAgICAgIGRvbUNsYXNzZXMobGluaykuYWRkKCdicHAtZXJyb3ItbWVzc2FnZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pKTtcblxufTtcblxuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldFRhYk5vZGUoZWwsIGlkKSB7XG4gIHZhciBjb250YWluZXJFbCA9IGRvbUNsb3Nlc3QoZWwsICcuYnBwLXByb3BlcnRpZXMtcGFuZWwnKTtcblxuICByZXR1cm4gZG9tUXVlcnkoJ2FbZGF0YS10YWItdGFyZ2V0PVwiJyArIGlkICsgJ1wiXScsIGNvbnRhaW5lckVsKTtcbn0iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxuICAgIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgdHJhbnNsYXRlKSB7XG5cbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgaWYgKCFibykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYWN0aXZpdGk6SW5pdGlhdG9yJykgJiYgIWlzKGVsZW1lbnQucGFyZW50LCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcbiAgICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XG4gICAgICBpZDogJ2luaXRpYXRvcicsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdJbml0aWF0b3InKSxcbiAgICAgIG1vZGVsUHJvcGVydHk6ICdpbml0aWF0b3InXG4gICAgfSkpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcblxudmFyIHRhc2tsaXN0ID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9UYXNrbGlzdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XG4gIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYWN0aXZpdGk6UHJvY2VzcycpIHx8XG4gICAgICBpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmIGJ1c2luZXNzT2JqZWN0LmdldCgncHJvY2Vzc1JlZicpKSB7XG5cbiAgICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQodGFza2xpc3QoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcbiAgICAgIGdldEJ1c2luZXNzT2JqZWN0OiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gICAgICAgIGlmICghaXMoYm8sICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICAgICAgICByZXR1cm4gYm87XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYm8uZ2V0KCdwcm9jZXNzUmVmJyk7XG4gICAgICB9XG4gICAgfSwgdHJhbnNsYXRlKSk7XG5cbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcbiAgICBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIHRyYW5zbGF0ZSkge1xuICBpZiAoaXMoZWxlbWVudCwgJ2FjdGl2aXRpOkFzc2lnbmFibGUnKSkge1xuXG4gICAgLy8gQXNzaWduZWVcbiAgICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XG4gICAgICBpZCA6ICdhc3NpZ25lZScsXG4gICAgICBsYWJlbCA6IHRyYW5zbGF0ZSgnQXNzaWduZWUnKSxcbiAgICAgIG1vZGVsUHJvcGVydHkgOiAnYXNzaWduZWUnXG4gICAgfSkpO1xuXG4gICAgLy8gQ2FuZGlkYXRlIFVzZXJzXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xuICAgICAgaWQgOiAnY2FuZGlkYXRlVXNlcnMnLFxuICAgICAgbGFiZWwgOiB0cmFuc2xhdGUoJ0NhbmRpZGF0ZSBVc2VycycpLFxuICAgICAgbW9kZWxQcm9wZXJ0eSA6ICdjYW5kaWRhdGVVc2VycydcbiAgICB9KSk7XG5cbiAgICAvLyBDYW5kaWRhdGUgR3JvdXBzXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xuICAgICAgaWQgOiAnY2FuZGlkYXRlR3JvdXBzJyxcbiAgICAgIGxhYmVsIDogdHJhbnNsYXRlKCdDYW5kaWRhdGUgR3JvdXBzJyksXG4gICAgICBtb2RlbFByb3BlcnR5IDogJ2NhbmRpZGF0ZUdyb3VwcydcbiAgICB9KSk7XG5cbiAgICAvLyBEdWUgRGF0ZVxuICAgIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcbiAgICAgIGlkIDogJ2R1ZURhdGUnLFxuICAgICAgZGVzY3JpcHRpb24gOiB0cmFuc2xhdGUoJ1RoZSBkdWUgZGF0ZSBhcyBhbiBFTCBleHByZXNzaW9uIChlLmcuICR7c29tZURhdGV9IG9yIGFuIElTTyBkYXRlIChlLmcuIDIwMTUtMDYtMjZUMDk6NTQ6MDApJyksXG4gICAgICBsYWJlbCA6IHRyYW5zbGF0ZSgnRHVlIERhdGUnKSxcbiAgICAgIG1vZGVsUHJvcGVydHkgOiAnZHVlRGF0ZSdcbiAgICB9KSk7XG5cbiAgICAvLyBGb2xsb3dVcCBEYXRlXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xuICAgICAgaWQgOiAnZm9sbG93VXBEYXRlJyxcbiAgICAgIGRlc2NyaXB0aW9uIDogdHJhbnNsYXRlKCdUaGUgZm9sbG93IHVwIGRhdGUgYXMgYW4gRUwgZXhwcmVzc2lvbiAoZS5nLiAke3NvbWVEYXRlfSBvciBhbiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ0lTTyBkYXRlIChlLmcuIDIwMTUtMDYtMjZUMDk6NTQ6MDApJyksXG4gICAgICBsYWJlbCA6IHRyYW5zbGF0ZSgnRm9sbG93IFVwIERhdGUnKSxcbiAgICAgIG1vZGVsUHJvcGVydHkgOiAnZm9sbG93VXBEYXRlJ1xuICAgIH0pKTtcblxuICAgIC8vIHByaW9yaXR5XG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xuICAgICAgaWQgOiAncHJpb3JpdHknLFxuICAgICAgbGFiZWwgOiB0cmFuc2xhdGUoJ1ByaW9yaXR5JyksXG4gICAgICBtb2RlbFByb3BlcnR5IDogJ3ByaW9yaXR5J1xuICAgIH0pKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcbiAgICBpc0FueSA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsJykuaXNBbnksXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xuXG52YXIgZmlsdGVyID0gcmVxdWlyZSgnbG9kYXNoL2ZpbHRlcicpO1xuXG52YXIgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKSxcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXG4gICAgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyksXG4gICAgZXZlbnREZWZpbml0aW9uSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0V2ZW50RGVmaW5pdGlvbkhlbHBlcicpO1xuXG52YXIgZXh0ZW5zaW9uRWxlbWVudHNFbnRyeSA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vRXh0ZW5zaW9uRWxlbWVudHMnKTtcblxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XG5cbi8qKlxuICAqIHJldHVybiBkZXBlbmQgb24gcGFyYW1ldGVyICd0eXBlJyBhY3Rpdml0aTppbiBvciBhY3Rpdml0aTpvdXQgZXh0ZW5zaW9uIGVsZW1lbnRzXG4gICovXG5mdW5jdGlvbiBnZXRBY3Rpdml0aUluT3V0TWFwcGluZ3MoZWxlbWVudCwgdHlwZSkge1xuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICB2YXIgc2lnbmFsRXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uSGVscGVyLmdldFNpZ25hbEV2ZW50RGVmaW5pdGlvbihibyk7XG5cbiAgcmV0dXJuIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyLmdldEV4dGVuc2lvbkVsZW1lbnRzKHNpZ25hbEV2ZW50RGVmaW5pdGlvbiB8fCBibywgdHlwZSkgfHwgW107XG59XG5cbi8qKlxuICAqIHJldHVybiBkZXBlbmQgb24gcGFyYW1ldGVyICd0eXBlJyBhY3Rpdml0aTppbiBvciBhY3Rpdml0aTpvdXQgZXh0ZW5zaW9uIGVsZW1lbnRzXG4gICogd2l0aCBzb3VyY2Ugb3Igc291cmNlRXhwcmVzc2lvbiBhdHRyaWJ1dGVcbiAgKi9cbmZ1bmN0aW9uIGdldFZhcmlhYmxlTWFwcGluZ3MoZWxlbWVudCwgdHlwZSkge1xuICB2YXIgYWN0aXZpdGlNYXBwaW5ncyA9IGdldEFjdGl2aXRpSW5PdXRNYXBwaW5ncyhlbGVtZW50LCB0eXBlKTtcblxuICByZXR1cm4gZmlsdGVyKGFjdGl2aXRpTWFwcGluZ3MsIGZ1bmN0aW9uKG1hcHBpbmcpIHtcbiAgICByZXR1cm4gIW1hcHBpbmcuYnVzaW5lc3NLZXk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRJbk91dFR5cGUobWFwcGluZykge1xuICB2YXIgaW5PdXRUeXBlID0gJ3NvdXJjZSc7XG5cbiAgaWYgKG1hcHBpbmcudmFyaWFibGVzID09PSAnYWxsJykge1xuICAgIGluT3V0VHlwZSA9ICd2YXJpYWJsZXMnO1xuICB9XG4gIGVsc2UgaWYgKHR5cGVvZiBtYXBwaW5nLnNvdXJjZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpbk91dFR5cGUgPSAnc291cmNlJztcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgbWFwcGluZy5zb3VyY2VFeHByZXNzaW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgIGluT3V0VHlwZSA9ICdzb3VyY2VFeHByZXNzaW9uJztcbiAgfVxuXG4gIHJldHVybiBpbk91dFR5cGU7XG59XG5cbnZhciBBQ1RJVklUSV9JTl9FWFRFTlNJT05fRUxFTUVOVCA9ICdhY3Rpdml0aTpJbicsXG4gICAgQUNUSVZJVElfT1VUX0VYVEVOU0lPTl9FTEVNRU5UID0gJ2FjdGl2aXRpOk91dCc7XG5cbnZhciBXSElURVNQQUNFX1JFR0VYID0gL1xccy87XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xuXG4gIHZhciBpbk91dFR5cGVPcHRpb25zID0gW1xuICAgIHtcbiAgICAgIG5hbWU6IHRyYW5zbGF0ZSgnU291cmNlJyksXG4gICAgICB2YWx1ZTogJ3NvdXJjZSdcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IHRyYW5zbGF0ZSgnU291cmNlIEV4cHJlc3Npb24nKSxcbiAgICAgIHZhbHVlOiAnc291cmNlRXhwcmVzc2lvbidcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IHRyYW5zbGF0ZSgnQWxsJyksXG4gICAgICB2YWx1ZTogJ3ZhcmlhYmxlcydcbiAgICB9XG4gIF07XG5cbiAgdmFyIHNpZ25hbEV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRTaWduYWxFdmVudERlZmluaXRpb24oZWxlbWVudCk7XG5cbiAgaWYgKCFpcyhlbGVtZW50LCAnYWN0aXZpdGk6Q2FsbEFjdGl2aXR5JykgJiYgIXNpZ25hbEV2ZW50RGVmaW5pdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChzaWduYWxFdmVudERlZmluaXRpb24gJiYgIShpc0FueShlbGVtZW50LCBbXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXG4gICAgJ2JwbW46RW5kRXZlbnQnXG4gIF0pKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBpc1NlbGVjdGVkID0gZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgIHJldHVybiAhIWdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xuICB9O1xuXG4gIHZhciBnZXRTZWxlY3RlZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICB2YXIgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB2YXIgc2VsZWN0aW9uID0gaW5FbnRyeS5nZXRTZWxlY3RlZChlbGVtZW50LCBwYXJlbnROb2RlKTtcblxuICAgIHZhciBwYXJhbWV0ZXIgPSBnZXRWYXJpYWJsZU1hcHBpbmdzKGVsZW1lbnQsIEFDVElWSVRJX0lOX0VYVEVOU0lPTl9FTEVNRU5UKVtzZWxlY3Rpb24uaWR4XTtcblxuICAgIGlmICghcGFyYW1ldGVyICYmIG91dEVudHJ5KSB7XG4gICAgICBzZWxlY3Rpb24gPSBvdXRFbnRyeS5nZXRTZWxlY3RlZChlbGVtZW50LCBwYXJlbnROb2RlKTtcbiAgICAgIHBhcmFtZXRlciA9IGdldFZhcmlhYmxlTWFwcGluZ3MoZWxlbWVudCwgQUNUSVZJVElfT1VUX0VYVEVOU0lPTl9FTEVNRU5UKVtzZWxlY3Rpb24uaWR4XTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9O1xuXG4gIHZhciBzZXRPcHRpb25MYWJlbFZhbHVlID0gZnVuY3Rpb24odHlwZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBvcHRpb24sIHByb3BlcnR5LCB2YWx1ZSwgaWR4KSB7XG4gICAgICB2YXIgdmFyaWFibGVNYXBwaW5ncyA9IGdldFZhcmlhYmxlTWFwcGluZ3MoZWxlbWVudCwgdHlwZSk7XG4gICAgICB2YXIgbWFwcGluZ1ZhbHVlID0gdmFyaWFibGVNYXBwaW5nc1tpZHhdO1xuICAgICAgdmFyIGxhYmVsID0gKG1hcHBpbmdWYWx1ZS50YXJnZXQgfHwgJzx1bmRlZmluZWQ+JykgKyAnIDo9ICc7XG4gICAgICB2YXIgbWFwcGluZ1R5cGUgPSBnZXRJbk91dFR5cGUobWFwcGluZ1ZhbHVlKTtcblxuICAgICAgaWYgKG1hcHBpbmdUeXBlID09PSAndmFyaWFibGVzJykge1xuICAgICAgICBsYWJlbCA9ICdhbGwnO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAobWFwcGluZ1R5cGUgPT09ICdzb3VyY2UnKSB7XG4gICAgICAgIGxhYmVsID0gbGFiZWwgKyAobWFwcGluZ1ZhbHVlLnNvdXJjZSB8fCAnPGVtcHR5PicpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAobWFwcGluZ1R5cGUgPT09ICdzb3VyY2VFeHByZXNzaW9uJykge1xuICAgICAgICBsYWJlbCA9IGxhYmVsICsgKG1hcHBpbmdWYWx1ZS5zb3VyY2VFeHByZXNzaW9uIHx8ICc8ZW1wdHk+Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsYWJlbCA9IGxhYmVsICsgJzxlbXB0eT4nO1xuICAgICAgfVxuXG4gICAgICBvcHRpb24udGV4dCA9IGxhYmVsO1xuICAgIH07XG4gIH07XG5cbiAgdmFyIG5ld0VsZW1lbnQgPSBmdW5jdGlvbih0eXBlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCB2YWx1ZSkge1xuICAgICAgdmFyIG5ld0VsZW0gPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQodHlwZSwgeyBzb3VyY2U6ICcnIH0sIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XG5cbiAgICAgIHJldHVybiBjbWRIZWxwZXIuYWRkRWxlbWVudHNUb2xpc3QoZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsICd2YWx1ZXMnLCBbIG5ld0VsZW0gXSk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgcmVtb3ZlRWxlbWVudCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsIHZhbHVlLCBpZHgpIHtcbiAgICAgIHZhciB2YXJpYWJsZXNNYXBwaW5ncz0gZ2V0VmFyaWFibGVNYXBwaW5ncyhlbGVtZW50LCB0eXBlKTtcbiAgICAgIHZhciBtYXBwaW5nID0gdmFyaWFibGVzTWFwcGluZ3NbaWR4XTtcblxuICAgICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgICAgcmV0dXJuIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyXG4gICAgICAgICAgLnJlbW92ZUVudHJ5KHNpZ25hbEV2ZW50RGVmaW5pdGlvbiB8fCBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSwgZWxlbWVudCwgbWFwcGluZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICAvLyBpbiBtYXBwaW5nIGZvciBzb3VyY2UgYW5kIHNvdXJjZUV4cHJlc3Npb24gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgdmFyIGluRW50cnkgPSBleHRlbnNpb25FbGVtZW50c0VudHJ5KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XG4gICAgaWQ6ICd2YXJpYWJsZU1hcHBpbmctaW4nLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0luIE1hcHBpbmcnKSxcbiAgICBtb2RlbFByb3BlcnR5OiAnc291cmNlJyxcbiAgICBwcmVmaXg6ICdJbicsXG4gICAgaWRHZW5lcmF0aW9uOiBmYWxzZSxcbiAgICByZXNpemFibGU6IHRydWUsXG4gICAgYnVzaW5lc3NPYmplY3Q6IHNpZ25hbEV2ZW50RGVmaW5pdGlvbiB8fCBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcblxuICAgIGNyZWF0ZUV4dGVuc2lvbkVsZW1lbnQ6IG5ld0VsZW1lbnQoQUNUSVZJVElfSU5fRVhURU5TSU9OX0VMRU1FTlQpLFxuICAgIHJlbW92ZUV4dGVuc2lvbkVsZW1lbnQ6IHJlbW92ZUVsZW1lbnQoQUNUSVZJVElfSU5fRVhURU5TSU9OX0VMRU1FTlQpLFxuXG4gICAgZ2V0RXh0ZW5zaW9uRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBnZXRWYXJpYWJsZU1hcHBpbmdzKGVsZW1lbnQsIEFDVElWSVRJX0lOX0VYVEVOU0lPTl9FTEVNRU5UKTtcbiAgICB9LFxuXG4gICAgb25TZWxlY3Rpb25DaGFuZ2U6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGV2ZW50LCBzY29wZSkge1xuICAgICAgb3V0RW50cnkgJiYgb3V0RW50cnkuZGVzZWxlY3QoZWxlbWVudCwgbm9kZS5wYXJlbnROb2RlKTtcbiAgICB9LFxuXG4gICAgc2V0T3B0aW9uTGFiZWxWYWx1ZTogc2V0T3B0aW9uTGFiZWxWYWx1ZShBQ1RJVklUSV9JTl9FWFRFTlNJT05fRUxFTUVOVClcbiAgfSk7XG4gIGdyb3VwLmVudHJpZXMucHVzaChpbkVudHJ5KTtcblxuICAvLyBvdXQgbWFwcGluZyBmb3Igc291cmNlIGFuZCBzb3VyY2VFeHByZXNzaW9uIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBpZiAoIXNpZ25hbEV2ZW50RGVmaW5pdGlvbikge1xuICAgIHZhciBvdXRFbnRyeSA9IGV4dGVuc2lvbkVsZW1lbnRzRW50cnkoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcbiAgICAgIGlkOiAndmFyaWFibGVNYXBwaW5nLW91dCcsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdPdXQgTWFwcGluZycpLFxuICAgICAgbW9kZWxQcm9wZXJ0eTogJ3NvdXJjZScsXG4gICAgICBwcmVmaXg6ICdPdXQnLFxuICAgICAgaWRHZW5lcmF0aW9uOiBmYWxzZSxcbiAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcblxuICAgICAgY3JlYXRlRXh0ZW5zaW9uRWxlbWVudDogbmV3RWxlbWVudChBQ1RJVklUSV9PVVRfRVhURU5TSU9OX0VMRU1FTlQpLFxuICAgICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudDogcmVtb3ZlRWxlbWVudChBQ1RJVklUSV9PVVRfRVhURU5TSU9OX0VMRU1FTlQpLFxuXG4gICAgICBnZXRFeHRlbnNpb25FbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZ2V0VmFyaWFibGVNYXBwaW5ncyhlbGVtZW50LCBBQ1RJVklUSV9PVVRfRVhURU5TSU9OX0VMRU1FTlQpO1xuICAgICAgfSxcblxuICAgICAgb25TZWxlY3Rpb25DaGFuZ2U6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGV2ZW50LCBzY29wZSkge1xuICAgICAgICBpbkVudHJ5LmRlc2VsZWN0KGVsZW1lbnQsIG5vZGUucGFyZW50Tm9kZSk7XG4gICAgICB9LFxuXG4gICAgICBzZXRPcHRpb25MYWJlbFZhbHVlOiBzZXRPcHRpb25MYWJlbFZhbHVlKEFDVElWSVRJX09VVF9FWFRFTlNJT05fRUxFTUVOVClcbiAgICB9KTtcbiAgICBncm91cC5lbnRyaWVzLnB1c2gob3V0RW50cnkpO1xuICB9XG5cbiAgLy8gbGFiZWwgZm9yIHNlbGVjdGVkIG1hcHBpbmcgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkubGFiZWwoe1xuICAgIGlkOiAndmFyaWFibGVNYXBwaW5nLXR5cGVMYWJlbCcsXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xuXG4gICAgICB2YXIgdmFsdWUgPSAnJztcbiAgICAgIGlmIChpcyhtYXBwaW5nLCBBQ1RJVklUSV9JTl9FWFRFTlNJT05fRUxFTUVOVCkpIHtcbiAgICAgICAgdmFsdWUgPSB0cmFuc2xhdGUoJ0luIE1hcHBpbmcnKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzKG1hcHBpbmcsIEFDVElWSVRJX09VVF9FWFRFTlNJT05fRUxFTUVOVCkpIHtcbiAgICAgICAgdmFsdWUgPSB0cmFuc2xhdGUoJ091dCBNYXBwaW5nJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgc2hvd0xhYmVsOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICByZXR1cm4gaXNTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcbiAgICB9XG4gIH0pKTtcblxuXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3Rvcnkuc2VsZWN0Qm94KHtcbiAgICBpZDogJ3ZhcmlhYmxlTWFwcGluZy1pbk91dFR5cGUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1R5cGUnKSxcbiAgICBzZWxlY3RPcHRpb25zOiBpbk91dFR5cGVPcHRpb25zLFxuICAgIG1vZGVsUHJvcGVydHk6ICdpbk91dFR5cGUnLFxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIG1hcHBpbmcgPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKSB8fCB7fTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluT3V0VHlwZTogZ2V0SW5PdXRUeXBlKG1hcHBpbmcpXG4gICAgICB9O1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcbiAgICAgIHZhciBpbk91dFR5cGUgPSB2YWx1ZXMuaW5PdXRUeXBlO1xuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgICdzb3VyY2UnIDogdW5kZWZpbmVkLFxuICAgICAgICAnc291cmNlRXhwcmVzc2lvbicgOiB1bmRlZmluZWQsXG4gICAgICAgICd2YXJpYWJsZXMnIDogdW5kZWZpbmVkXG4gICAgICB9O1xuXG4gICAgICBpZiAoaW5PdXRUeXBlID09PSAnc291cmNlJykge1xuICAgICAgICBwcm9wcy5zb3VyY2UgPSAnJztcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGluT3V0VHlwZSA9PT0gJ3NvdXJjZUV4cHJlc3Npb24nKSB7XG4gICAgICAgIHByb3BzLnNvdXJjZUV4cHJlc3Npb24gPSAnJztcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGluT3V0VHlwZSA9PT0gJ3ZhcmlhYmxlcycpIHtcbiAgICAgICAgcHJvcHMudmFyaWFibGVzID0gJ2FsbCc7XG4gICAgICAgIHByb3BzLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgdmFyIG1hcHBpbmcgPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgbWFwcGluZywgcHJvcHMpO1xuICAgIH0sXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICByZXR1cm4gIWlzU2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XG4gICAgfVxuXG4gIH0pKTtcblxuXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcbiAgICBpZDogJ3ZhcmlhYmxlTWFwcGluZy1zb3VyY2UnLFxuICAgIGRhdGFWYWx1ZUxhYmVsOiAnc291cmNlTGFiZWwnLFxuICAgIG1vZGVsUHJvcGVydHk6ICdzb3VyY2UnLFxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIG1hcHBpbmcgPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKSB8fCB7fTtcblxuICAgICAgdmFyIGxhYmVsID0gJyc7XG4gICAgICB2YXIgaW5PdXRUeXBlID0gZ2V0SW5PdXRUeXBlKG1hcHBpbmcpO1xuICAgICAgaWYgKGluT3V0VHlwZSA9PT0gJ3NvdXJjZScpIHtcbiAgICAgICAgbGFiZWwgPSB0cmFuc2xhdGUoJ1NvdXJjZScpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaW5PdXRUeXBlID09PSAnc291cmNlRXhwcmVzc2lvbicpIHtcbiAgICAgICAgbGFiZWwgPSB0cmFuc2xhdGUoJ1NvdXJjZSBFeHByZXNzaW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbWFwcGluZ1tpbk91dFR5cGVdLFxuICAgICAgICBzb3VyY2VMYWJlbDogbGFiZWxcbiAgICAgIH07XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgdmFsdWVzLnNvdXJjZSA9IHZhbHVlcy5zb3VyY2UgfHwgdW5kZWZpbmVkO1xuXG4gICAgICB2YXIgbWFwcGluZyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xuICAgICAgdmFyIGluT3V0VHlwZSA9IGdldEluT3V0VHlwZShtYXBwaW5nKTtcblxuICAgICAgdmFyIHByb3BzID0ge307XG4gICAgICBwcm9wc1tpbk91dFR5cGVdID0gdmFsdWVzLnNvdXJjZSB8fCAnJztcblxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBtYXBwaW5nLCBwcm9wcyk7XG4gICAgfSxcbiAgICAvLyBvbmUgb2YgYm90aCAoc291cmNlIG9yIHNvdXJjZUV4cHJlc3Npb24pIG11c3QgaGF2ZSBhIHZhbHVlIHRvIG1ha2VcbiAgICAvLyB0aGUgY29uZmlndXJhdGlvbiBlYXNpZXIgYW5kIG1vcmUgdW5kZXJzdGFuZGFibGVcbiAgICAvLyBpdCBpcyBub3QgZW5naW5lIGNvbmZvcm1cbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xuXG4gICAgICB2YXIgdmFsaWRhdGlvbiA9IHt9O1xuICAgICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgICAgaWYgKCF2YWx1ZXMuc291cmNlKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbi5zb3VyY2UgPVxuICAgICAgICAgIHZhbGlkYXRpb24uc291cmNlID0gdmFsdWVzLnNvdXJjZUxhYmVsID9cbiAgICAgICAgICAgIHRyYW5zbGF0ZSgnTWFwcGluZyBtdXN0IGhhdmUgYSB7dmFsdWV9JywgeyB2YWx1ZTogdmFsdWVzLnNvdXJjZUxhYmVsLnRvTG93ZXJDYXNlKCkgfSkgOlxuICAgICAgICAgICAgdHJhbnNsYXRlKCdNYXBwaW5nIG11c3QgaGF2ZSBhIHZhbHVlJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaW5PdXRUeXBlID0gZ2V0SW5PdXRUeXBlKG1hcHBpbmcpO1xuXG4gICAgICAgIGlmIChXSElURVNQQUNFX1JFR0VYLnRlc3QodmFsdWVzLnNvdXJjZSkgJiYgaW5PdXRUeXBlICE9PSAnc291cmNlRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICB2YWxpZGF0aW9uLnNvdXJjZSA9IHRyYW5zbGF0ZSgne2xhYmVsfSBtdXN0IG5vdCBjb250YWluIHdoaXRlc3BhY2UnLCB7IGxhYmVsOiB2YWx1ZXMuc291cmNlTGFiZWwgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbGlkYXRpb247XG4gICAgfSxcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHZhciBzZWxlY3RlZE1hcHBpbmcgPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcbiAgICAgIHJldHVybiAhc2VsZWN0ZWRNYXBwaW5nIHx8IChzZWxlY3RlZE1hcHBpbmcgJiYgc2VsZWN0ZWRNYXBwaW5nLnZhcmlhYmxlcyk7XG4gICAgfVxuICB9KSk7XG5cblxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XG4gICAgaWQ6ICd2YXJpYWJsZU1hcHBpbmctdGFyZ2V0JyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUYXJnZXQnKSxcbiAgICBtb2RlbFByb3BlcnR5OiAndGFyZ2V0JyxcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhcmdldDogKGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpIHx8IHt9KS50YXJnZXRcbiAgICAgIH07XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgdmFsdWVzLnRhcmdldCA9IHZhbHVlcy50YXJnZXQgfHwgdW5kZWZpbmVkO1xuICAgICAgdmFyIG1hcHBpbmcgPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgbWFwcGluZywgdmFsdWVzKTtcbiAgICB9LFxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcbiAgICAgIHZhciBtYXBwaW5nID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XG5cbiAgICAgIHZhciB2YWxpZGF0aW9uID0ge307XG4gICAgICBpZiAobWFwcGluZykge1xuICAgICAgICB2YXIgbWFwcGluZ1R5cGUgPSBnZXRJbk91dFR5cGUobWFwcGluZyk7XG5cbiAgICAgICAgaWYgKCF2YWx1ZXMudGFyZ2V0ICYmIG1hcHBpbmdUeXBlICE9PSAndmFyaWFibGVzJykge1xuICAgICAgICAgIHZhbGlkYXRpb24udGFyZ2V0ID0gdHJhbnNsYXRlKCdNYXBwaW5nIG11c3QgaGF2ZSBhIHRhcmdldCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlcy50YXJnZXRcbiAgICAgICAgICAmJiBXSElURVNQQUNFX1JFR0VYLnRlc3QodmFsdWVzLnRhcmdldClcbiAgICAgICAgICAmJiBtYXBwaW5nVHlwZSAhPT0gJ3ZhcmlhYmxlcycpIHtcbiAgICAgICAgICB2YWxpZGF0aW9uLnRhcmdldCA9IHRyYW5zbGF0ZSgnVGFyZ2V0IG11c3Qgbm90IGNvbnRhaW4gd2hpdGVzcGFjZScpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uO1xuICAgIH0sXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgc2VsZWN0ZWRNYXBwaW5nID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XG4gICAgICByZXR1cm4gIXNlbGVjdGVkTWFwcGluZyB8fCAoc2VsZWN0ZWRNYXBwaW5nICYmIHNlbGVjdGVkTWFwcGluZy52YXJpYWJsZXMpO1xuICAgIH1cbiAgfSkpO1xuXG5cbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5jaGVja2JveCh7XG4gICAgaWQ6ICd2YXJpYWJsZU1hcHBpbmctbG9jYWwnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0xvY2FsJyksXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2xvY2FsJyxcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsOiAoZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSkgfHwge30pLmxvY2FsXG4gICAgICB9O1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcbiAgICAgIHZhbHVlcy5sb2NhbCA9IHZhbHVlcy5sb2NhbCB8fCBmYWxzZTtcbiAgICAgIHZhciBtYXBwaW5nID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIG1hcHBpbmcsIHZhbHVlcyk7XG4gICAgfSxcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHJldHVybiAhaXNTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcbiAgICB9XG4gIH0pKTtcblxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxuICAgIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIHRyYW5zbGF0ZSkge1xuXG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIGlmICghYm8pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UHJvY2VzcycpIHx8IGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgYm8uZ2V0KCdwcm9jZXNzUmVmJykpIHtcbiAgICB2YXIgdmVyc2lvblRhZ0VudHJ5ID0gZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XG4gICAgICBpZDogJ3ZlcnNpb25UYWcnLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmVyc2lvbiBUYWcnKSxcbiAgICAgIG1vZGVsUHJvcGVydHk6ICd2ZXJzaW9uVGFnJ1xuICAgIH0pO1xuXG4gICAgLy8gaW4gcGFydGljaXBhbnRzIHdlIGhhdmUgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHNldCBhbmQgZ2V0XG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICAgIHZlcnNpb25UYWdFbnRyeS5nZXQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHZhciBwcm9jZXNzQm8gPSBiby5nZXQoJ3Byb2Nlc3NSZWYnKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZlcnNpb25UYWc6IHByb2Nlc3NCby5nZXQoJ2FjdGl2aXRpOnZlcnNpb25UYWcnKVxuICAgICAgICB9O1xuICAgICAgfTtcblxuICAgICAgdmVyc2lvblRhZ0VudHJ5LnNldCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xuICAgICAgICB2YXIgcHJvY2Vzc0JvID0gYm8uZ2V0KCdwcm9jZXNzUmVmJyk7XG5cbiAgICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBwcm9jZXNzQm8sIHtcbiAgICAgICAgICAnYWN0aXZpdGk6dmVyc2lvblRhZyc6IHZhbHVlcy52ZXJzaW9uVGFnIHx8IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKHZlcnNpb25UYWdFbnRyeSk7XG5cbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcblxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XG5cbnZhciBhc3luY0NhcGFibGVIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQXN5bmNDYXBhYmxlSGVscGVyJyksXG4gICAgZXZlbnREZWZpbml0aW9uSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0V2ZW50RGVmaW5pdGlvbkhlbHBlcicpLFxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcblxuZnVuY3Rpb24gaXNBc3luY0JlZm9yZShibykge1xuICByZXR1cm4gYXN5bmNDYXBhYmxlSGVscGVyLmlzQXN5bmNCZWZvcmUoYm8pO1xufVxuXG5mdW5jdGlvbiBpc0FzeW5jQWZ0ZXIoYm8pIHtcbiAgcmV0dXJuIGFzeW5jQ2FwYWJsZUhlbHBlci5pc0FzeW5jQWZ0ZXIoYm8pO1xufVxuXG5mdW5jdGlvbiBpc0V4Y2x1c2l2ZShibykge1xuICByZXR1cm4gYXN5bmNDYXBhYmxlSGVscGVyLmlzRXhjbHVzaXZlKGJvKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoYm8sIGVsZW1lbnQpIHtcbiAgcmV0dXJuIGFzeW5jQ2FwYWJsZUhlbHBlci5yZW1vdmVGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShibywgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGNhblJlbW92ZUZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGVsZW1lbnQpIHtcbiAgcmV0dXJuICFldmVudERlZmluaXRpb25IZWxwZXIuZ2V0VGltZXJFdmVudERlZmluaXRpb24oZWxlbWVudCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xuXG4gIHZhciBnZXRCdXNpbmVzc09iamVjdCA9IG9wdGlvbnMuZ2V0QnVzaW5lc3NPYmplY3Q7XG5cbiAgdmFyIGlkUHJlZml4ID0gb3B0aW9ucy5pZFByZWZpeCB8fCAnJyxcbiAgICAgIGxhYmVsUHJlZml4ID0gb3B0aW9ucy5sYWJlbFByZWZpeCB8fCAnJztcblxuXG4gIHZhciBhc3luY0JlZm9yZUVudHJ5ID0gZW50cnlGYWN0b3J5LmNoZWNrYm94KHtcbiAgICBpZDogaWRQcmVmaXggKyAnYXN5bmNCZWZvcmUnLFxuICAgIGxhYmVsOiBsYWJlbFByZWZpeCArIHRyYW5zbGF0ZSgnQXN5bmNocm9ub3VzIEJlZm9yZScpLFxuICAgIG1vZGVsUHJvcGVydHk6ICdhc3luY0JlZm9yZScsXG5cbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXN5bmNCZWZvcmU6IGlzQXN5bmNCZWZvcmUoYm8pXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgICB2YXIgYXN5bmNCZWZvcmUgPSAhIXZhbHVlcy5hc3luY0JlZm9yZTtcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICAnYWN0aXZpdGk6YXN5bmNCZWZvcmUnOiBhc3luY0JlZm9yZSxcbiAgICAgICAgJ2FjdGl2aXRpOmFzeW5jJzogZmFsc2VcbiAgICAgIH07XG5cbiAgICAgIHZhciBjb21tYW5kcyA9IFtdO1xuICAgICAgaWYgKCFpc0FzeW5jQWZ0ZXIoYm8pICYmICFhc3luY0JlZm9yZSkge1xuICAgICAgICBwcm9wcyA9IGFzc2lnbih7ICdhY3Rpdml0aTpleGNsdXNpdmUnIDogdHJ1ZSB9LCBwcm9wcyk7XG4gICAgICAgIGlmIChjYW5SZW1vdmVGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShlbGVtZW50KSkge1xuICAgICAgICAgIGNvbW1hbmRzLnB1c2gocmVtb3ZlRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoYm8sIGVsZW1lbnQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywgcHJvcHMpKTtcbiAgICAgIHJldHVybiBjb21tYW5kcztcbiAgICB9XG4gIH0pO1xuXG5cbiAgdmFyIGFzeW5jQWZ0ZXJFbnRyeSA9IGVudHJ5RmFjdG9yeS5jaGVja2JveCh7XG4gICAgaWQ6IGlkUHJlZml4ICsgJ2FzeW5jQWZ0ZXInLFxuICAgIGxhYmVsOiBsYWJlbFByZWZpeCArIHRyYW5zbGF0ZSgnQXN5bmNocm9ub3VzIEFmdGVyJyksXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2FzeW5jQWZ0ZXInLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFzeW5jQWZ0ZXI6IGlzQXN5bmNBZnRlcihibylcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICAgIHZhciBhc3luY0FmdGVyID0gISF2YWx1ZXMuYXN5bmNBZnRlcjtcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICAnYWN0aXZpdGk6YXN5bmNBZnRlcic6IGFzeW5jQWZ0ZXJcbiAgICAgIH07XG5cbiAgICAgIHZhciBjb21tYW5kcyA9IFtdO1xuICAgICAgaWYgKCFpc0FzeW5jQmVmb3JlKGJvKSAmJiAhYXN5bmNBZnRlcikge1xuICAgICAgICBwcm9wcyA9IGFzc2lnbih7ICdhY3Rpdml0aTpleGNsdXNpdmUnIDogdHJ1ZSB9LCBwcm9wcyk7XG4gICAgICAgIGlmIChjYW5SZW1vdmVGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShlbGVtZW50KSkge1xuICAgICAgICAgIGNvbW1hbmRzLnB1c2gocmVtb3ZlRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoYm8sIGVsZW1lbnQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywgcHJvcHMpKTtcbiAgICAgIHJldHVybiBjb21tYW5kcztcbiAgICB9XG4gIH0pO1xuXG5cbiAgdmFyIGV4Y2x1c2l2ZUVudHJ5ID0gZW50cnlGYWN0b3J5LmNoZWNrYm94KHtcbiAgICBpZDogaWRQcmVmaXggKyAnZXhjbHVzaXZlJyxcbiAgICBsYWJlbDogbGFiZWxQcmVmaXggKyB0cmFuc2xhdGUoJ0V4Y2x1c2l2ZScpLFxuICAgIG1vZGVsUHJvcGVydHk6ICdleGNsdXNpdmUnLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICAgIHJldHVybiB7IGV4Y2x1c2l2ZTogaXNFeGNsdXNpdmUoYm8pIH07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHsgJ2FjdGl2aXRpOmV4Y2x1c2l2ZSc6ICEhdmFsdWVzLmV4Y2x1c2l2ZSB9KTtcbiAgICB9LFxuXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICAgIHJldHVybiBibyAmJiAhaXNBc3luY0FmdGVyKGJvKSAmJiAhaXNBc3luY0JlZm9yZShibyk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gWyBhc3luY0JlZm9yZUVudHJ5LCBhc3luY0FmdGVyRW50cnksIGV4Y2x1c2l2ZUVudHJ5IF07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxuICAgIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXG4gICAgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyksXG4gICAgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKTtcblxuXG52YXIgcmVzdWx0VmFyaWFibGUgPSByZXF1aXJlKCcuL1Jlc3VsdFZhcmlhYmxlJyk7XG5cbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzO1xuXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XG5cbnZhciBhdHRyaWJ1dGVJbmZvID0ge1xuICBicG1uOiB7XG4gICAgZWxlbWVudDogJ2NhbGxlZEVsZW1lbnQnLFxuICAgIGJpbmRpbmc6ICdhY3Rpdml0aTpjYWxsZWRFbGVtZW50QmluZGluZycsXG4gICAgdmVyc2lvbjogJ2FjdGl2aXRpOmNhbGxlZEVsZW1lbnRWZXJzaW9uJyxcbiAgICB2ZXJzaW9uVGFnOiAnYWN0aXZpdGk6Y2FsbGVkRWxlbWVudFZlcnNpb25UYWcnLFxuICAgIHRlbmFudElkOiAnYWN0aXZpdGk6Y2FsbGVkRWxlbWVudFRlbmFudElkJ1xuICB9LFxuXG4gIGNtbW46IHtcbiAgICBlbGVtZW50OiAnYWN0aXZpdGk6Y2FzZVJlZicsXG4gICAgYmluZGluZzogJ2FjdGl2aXRpOmNhc2VCaW5kaW5nJyxcbiAgICB2ZXJzaW9uOiAnYWN0aXZpdGk6Y2FzZVZlcnNpb24nLFxuICAgIHRlbmFudElkOiAnYWN0aXZpdGk6Y2FzZVRlbmFudElkJ1xuICB9LFxuXG4gIGRtbjoge1xuICAgIGVsZW1lbnQ6ICdhY3Rpdml0aTpkZWNpc2lvblJlZicsXG4gICAgYmluZGluZzogJ2FjdGl2aXRpOmRlY2lzaW9uUmVmQmluZGluZycsXG4gICAgdmVyc2lvbjogJ2FjdGl2aXRpOmRlY2lzaW9uUmVmVmVyc2lvbicsXG4gICAgdmVyc2lvblRhZzogJ2FjdGl2aXRpOmRlY2lzaW9uUmVmVmVyc2lvblRhZycsXG4gICAgdGVuYW50SWQ6ICdhY3Rpdml0aTpkZWNpc2lvblJlZlRlbmFudElkJ1xuICB9XG59O1xuXG52YXIgbWFwRGVjaXNpb25SZXN1bHRPcHRpb25zID0gW1xuICB7XG4gICAgbmFtZTogJ3NpbmdsZUVudHJ5IChUeXBlZFZhbHVlKScsXG4gICAgdmFsdWU6ICdzaW5nbGVFbnRyeSdcbiAgfSxcbiAge1xuICAgIG5hbWU6J3NpbmdsZVJlc3VsdCAoTWFwPFN0cmluZywgT2JqZWN0PiknLFxuICAgIHZhbHVlOidzaW5nbGVSZXN1bHQnXG4gIH0sXG4gIHtcbiAgICBuYW1lOidjb2xsZWN0RW50cmllcyAoTGlzdDxPYmplY3Q+KScsXG4gICAgdmFsdWU6J2NvbGxlY3RFbnRyaWVzJ1xuICB9LFxuICB7XG4gICAgbmFtZToncmVzdWx0TGlzdCAoTGlzdDxNYXA8U3RyaW5nLCBPYmplY3Q+PiknLFxuICAgIHZhbHVlOidyZXN1bHRMaXN0J1xuICB9XG5dO1xuXG52YXIgZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdPcHRpb25zID0gW1xuICB7XG4gICAgbmFtZTogJ3ZhcmlhYmxlTWFwcGluZ0NsYXNzJyxcbiAgICB2YWx1ZTogJ3ZhcmlhYmxlTWFwcGluZ0NsYXNzJ1xuICB9LFxuICB7XG4gICAgbmFtZTogJ3ZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvbicsXG4gICAgdmFsdWU6ICd2YXJpYWJsZU1hcHBpbmdEZWxlZ2F0ZUV4cHJlc3Npb24nXG4gIH1cbl07XG5cbmZ1bmN0aW9uIGdldEFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkoZWxlbWVudCkge1xuICB2YXIgYWN0aXZpdGlJbiA9IFtdLFxuICAgICAgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICB2YXIgYWN0aXZpdGlJblBhcmFtcyA9IGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyLmdldEV4dGVuc2lvbkVsZW1lbnRzKGJvLCAnYWN0aXZpdGk6SW4nKTtcbiAgaWYgKGFjdGl2aXRpSW5QYXJhbXMpIHtcbiAgICBmb3JFYWNoKGFjdGl2aXRpSW5QYXJhbXMsIGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgICBpZiAocGFyYW0uYnVzaW5lc3NLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhY3Rpdml0aUluLnB1c2gocGFyYW0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBhY3Rpdml0aUluO1xufVxuXG5mdW5jdGlvbiBzZXRCdXNpbmVzc0tleShlbGVtZW50LCB0ZXh0LCBicG1uRmFjdG9yeSkge1xuICB2YXIgY29tbWFuZHMgPSBbXTtcblxuICB2YXIgYWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleSA9IGdldEFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkoZWxlbWVudCk7XG5cbiAgaWYgKGFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkubGVuZ3RoKSB7XG4gICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleVswXSwge1xuICAgICAgYnVzaW5lc3NLZXk6IHRleHRcbiAgICB9KSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXG4gICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gYm8uZXh0ZW5zaW9uRWxlbWVudHM7XG5cbiAgICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgICBleHRlbnNpb25FbGVtZW50cyA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHsgdmFsdWVzOiBbXSB9LCBibywgYnBtbkZhY3RvcnkpO1xuICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7IGV4dGVuc2lvbkVsZW1lbnRzOiBleHRlbnNpb25FbGVtZW50cyB9KSk7XG4gICAgfVxuXG4gICAgdmFyIGFjdGl2aXRpSW4gPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAnYWN0aXZpdGk6SW4nLFxuICAgICAgeyAnYnVzaW5lc3NLZXknOiB0ZXh0IH0sXG4gICAgICBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgIGJwbW5GYWN0b3J5XG4gICAgKTtcblxuICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLmFkZEFuZFJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoXG4gICAgICBlbGVtZW50LFxuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAndmFsdWVzJyxcbiAgICAgICdleHRlbnNpb25FbGVtZW50cycsXG4gICAgICBbIGFjdGl2aXRpSW4gXSxbXVxuICAgICkpO1xuICB9XG5cbiAgcmV0dXJuIGNvbW1hbmRzO1xufVxuXG5mdW5jdGlvbiBkZWxldGVCdXNpbmVzc0tleShlbGVtZW50KSB7XG4gIHZhciBhY3Rpdml0aUluRXh0ZW5zaW9ucyA9IGdldEFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkoZWxlbWVudCk7XG4gIHZhciBjb21tYW5kcyA9IFtdO1xuICBmb3JFYWNoKGFjdGl2aXRpSW5FeHRlbnNpb25zLCBmdW5jdGlvbihlbGVtKSB7XG4gICAgY29tbWFuZHMucHVzaChleHRlbnNpb25FbGVtZW50c0hlbHBlci5yZW1vdmVFbnRyeShnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSwgZWxlbWVudCwgZWxlbSkpO1xuICB9KTtcbiAgcmV0dXJuIGNvbW1hbmRzO1xufVxuXG5mdW5jdGlvbiBpc1N1cHBvcnRlZENhbGxhYmxlVHlwZSh0eXBlKSB7XG4gIHJldHVybiBbICdicG1uJywgJ2NtbW4nLCAnZG1uJyBdLmluZGV4T2YodHlwZSkgIT09IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcblxuICB2YXIgYmluZGluZ09wdGlvbnMgPSBbXG4gICAge1xuICAgICAgbmFtZTogdHJhbnNsYXRlKCdsYXRlc3QnKSxcbiAgICAgIHZhbHVlOiAnbGF0ZXN0J1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogdHJhbnNsYXRlKCdkZXBsb3ltZW50JyksXG4gICAgICB2YWx1ZTogJ2RlcGxveW1lbnQnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiB0cmFuc2xhdGUoJ3ZlcnNpb24nKSxcbiAgICAgIHZhbHVlOiAndmVyc2lvbidcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IHRyYW5zbGF0ZSgndmVyc2lvblRhZycpLFxuICAgICAgdmFsdWU6ICd2ZXJzaW9uVGFnJ1xuICAgIH1cbiAgXTtcblxuICB2YXIgZ2V0Q2FsbGFibGVUeXBlID0gb3B0aW9ucy5nZXRDYWxsYWJsZVR5cGU7XG5cbiAgdmFyIGVudHJpZXMgPSBbXTtcblxuICBmdW5jdGlvbiBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgcHJvcCkge1xuICAgIHZhciB0eXBlID0gZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpO1xuICAgIHJldHVybiAoYXR0cmlidXRlSW5mb1t0eXBlXSB8fCB7fSlbcHJvcF07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDYWxsQWN0aXZpdHlCaW5kaW5nVmFsdWUoZWxlbWVudCkge1xuICAgIHZhciB0eXBlID0gZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpO1xuICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIHZhciBhdHRyID0gKGF0dHJpYnV0ZUluZm9bdHlwZV0gfHwge30pLmJpbmRpbmc7XG4gICAgcmV0dXJuIGJvLmdldChhdHRyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZShlbGVtZW50KSB7XG4gICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgICB2YXIgYm9WYXJpYWJsZU1hcHBpbmdDbGFzcyA9IGJvLmdldCgnYWN0aXZpdGk6dmFyaWFibGVNYXBwaW5nQ2xhc3MnKSxcbiAgICAgICAgYm9WYXJpYWJsZU1hcHBpbmdEZWxlZ2F0ZUV4cHJlc3Npb24gPSBiby5nZXQoJ2FjdGl2aXRpOnZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvbicpO1xuXG4gICAgdmFyIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZSA9ICcnO1xuICAgIGlmICh0eXBlb2YgYm9WYXJpYWJsZU1hcHBpbmdDbGFzcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZSA9ICd2YXJpYWJsZU1hcHBpbmdDbGFzcyc7XG4gICAgfSBlbHNlXG5cbiAgICBpZiAodHlwZW9mIGJvVmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlID0gJ3ZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvbic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZTtcbiAgfVxuXG5cbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xuICAgIGlkOiAnY2FsbGFibGUtZWxlbWVudC1yZWYnLFxuICAgIGRhdGFWYWx1ZUxhYmVsOiAnY2FsbGFibGVFbGVtZW50TGFiZWwnLFxuICAgIG1vZGVsUHJvcGVydHk6ICdjYWxsYWJsZUVsZW1lbnRSZWYnLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgY2FsbGFibGVFbGVtZW50UmVmO1xuXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAnZWxlbWVudCcpO1xuICAgICAgaWYgKGF0dHIpIHtcbiAgICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgICAgIGNhbGxhYmxlRWxlbWVudFJlZiA9IGJvLmdldChhdHRyKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGxhYmVsID0gJyc7XG4gICAgICB2YXIgdHlwZSA9IGdldENhbGxhYmxlVHlwZShlbGVtZW50KTtcbiAgICAgIGlmICh0eXBlID09PSAnYnBtbicpIHtcbiAgICAgICAgbGFiZWwgPSB0cmFuc2xhdGUoJ0NhbGxlZCBFbGVtZW50Jyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0eXBlID09PSAnY21tbicpIHtcbiAgICAgICAgbGFiZWwgPSB0cmFuc2xhdGUoJ0Nhc2UgUmVmJyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0eXBlID09PSAnZG1uJykge1xuICAgICAgICBsYWJlbCA9IHRyYW5zbGF0ZSgnRGVjaXNpb24gUmVmJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNhbGxhYmxlRWxlbWVudFJlZjogY2FsbGFibGVFbGVtZW50UmVmLFxuICAgICAgICBjYWxsYWJsZUVsZW1lbnRMYWJlbDogbGFiZWxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgICB2YXIgbmV3Q2FsbGFibGVFbGVtZW50UmVmID0gdmFsdWVzLmNhbGxhYmxlRWxlbWVudFJlZjtcbiAgICAgIHZhciBhdHRyID0gZ2V0QXR0cmlidXRlKGVsZW1lbnQsICdlbGVtZW50Jyk7XG5cbiAgICAgIHZhciBwcm9wcyA9IHt9O1xuICAgICAgcHJvcHNbYXR0cl0gPSBuZXdDYWxsYWJsZUVsZW1lbnRSZWYgfHwgJyc7XG5cbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBwcm9wcyk7XG4gICAgfSxcblxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcbiAgICAgIHZhciBlbGVtZW50UmVmID0gdmFsdWVzLmNhbGxhYmxlRWxlbWVudFJlZjtcbiAgICAgIHZhciB0eXBlID0gZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpO1xuICAgICAgcmV0dXJuIGlzU3VwcG9ydGVkQ2FsbGFibGVUeXBlKHR5cGUpICYmICFlbGVtZW50UmVmID8geyBjYWxsYWJsZUVsZW1lbnRSZWY6IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKSB9IDoge307XG4gICAgfSxcblxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgcmV0dXJuICFpc1N1cHBvcnRlZENhbGxhYmxlVHlwZShnZXRDYWxsYWJsZVR5cGUoZWxlbWVudCkpO1xuICAgIH1cblxuICB9KSk7XG5cbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5zZWxlY3RCb3goe1xuICAgIGlkOiAnY2FsbGFibGUtYmluZGluZycsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQmluZGluZycpLFxuICAgIHNlbGVjdE9wdGlvbnM6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHZhciB0eXBlID0gZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpO1xuICAgICAgdmFyIG9wdGlvbnM7XG5cbiAgICAgIGlmICh0eXBlID09PSAnY21tbicpIHtcbiAgICAgICAgb3B0aW9ucyA9IGJpbmRpbmdPcHRpb25zLmZpbHRlcihmdW5jdGlvbihiaW5kaW5nT3B0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJpbmRpbmdPcHRpb24udmFsdWUgIT09ICd2ZXJzaW9uVGFnJztcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zID0gYmluZGluZ09wdGlvbnM7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9LFxuICAgIG1vZGVsUHJvcGVydHk6ICdjYWxsYWJsZUJpbmRpbmcnLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgY2FsbGFibGVCaW5kaW5nO1xuXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAnYmluZGluZycpO1xuICAgICAgaWYgKGF0dHIpIHtcbiAgICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgICAgIGNhbGxhYmxlQmluZGluZyA9IGJvLmdldChhdHRyKSB8fCAnbGF0ZXN0JztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2FsbGFibGVCaW5kaW5nOiBjYWxsYWJsZUJpbmRpbmdcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgICB2YXIgYmluZGluZyA9IHZhbHVlcy5jYWxsYWJsZUJpbmRpbmc7XG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAnYmluZGluZycpLFxuICAgICAgICAgIGF0dHJWZXIgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ3ZlcnNpb24nKSxcbiAgICAgICAgICBhdHRyVmVyVGFnID0gZ2V0QXR0cmlidXRlKGVsZW1lbnQsICd2ZXJzaW9uVGFnJyk7XG5cbiAgICAgIHZhciBwcm9wcyA9IHt9O1xuICAgICAgcHJvcHNbYXR0cl0gPSBiaW5kaW5nO1xuXG4gICAgICAvLyBzZXQgdmVyc2lvbiBhbmQgdmVyc2lvblRhZyB2YWx1ZXMgYWx3YXlzIHRvIHVuZGVmaW5lZCB0byBkZWxldGUgdGhlIGV4aXN0aW5nIHZhbHVlXG4gICAgICBwcm9wc1thdHRyVmVyXSA9IHVuZGVmaW5lZDtcbiAgICAgIHByb3BzW2F0dHJWZXJUYWddID0gdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcHJvcHMpO1xuICAgIH0sXG5cbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHJldHVybiAhaXNTdXBwb3J0ZWRDYWxsYWJsZVR5cGUoZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpKTtcbiAgICB9XG5cbiAgfSkpO1xuXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcbiAgICBpZDogJ2NhbGxhYmxlLXZlcnNpb24nLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1ZlcnNpb24nKSxcbiAgICBtb2RlbFByb3BlcnR5OiAnY2FsbGFibGVWZXJzaW9uJyxcblxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIGNhbGxhYmxlVmVyc2lvbjtcblxuICAgICAgdmFyIGF0dHIgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ3ZlcnNpb24nKTtcbiAgICAgIGlmIChhdHRyKSB7XG4gICAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgICAgICBjYWxsYWJsZVZlcnNpb24gPSBiby5nZXQoYXR0cik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNhbGxhYmxlVmVyc2lvbjogY2FsbGFibGVWZXJzaW9uXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgdmFyIHZlcnNpb24gPSB2YWx1ZXMuY2FsbGFibGVWZXJzaW9uO1xuICAgICAgdmFyIGF0dHIgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ3ZlcnNpb24nKTtcblxuICAgICAgdmFyIHByb3BzID0ge307XG4gICAgICBwcm9wc1thdHRyXSA9IHZlcnNpb24gfHwgdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcHJvcHMpO1xuICAgIH0sXG5cbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgICB2YXIgdmVyc2lvbiA9IHZhbHVlcy5jYWxsYWJsZVZlcnNpb247XG5cbiAgICAgIHZhciB0eXBlID0gZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgaXNTdXBwb3J0ZWRDYWxsYWJsZVR5cGUodHlwZSkgJiZcbiAgICAgICAgZ2V0Q2FsbEFjdGl2aXR5QmluZGluZ1ZhbHVlKGVsZW1lbnQpID09PSAndmVyc2lvbicgJiYgKFxuICAgICAgICAgICF2ZXJzaW9uID8geyBjYWxsYWJsZVZlcnNpb246IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKSB9IDoge31cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgdHlwZSA9IGdldENhbGxhYmxlVHlwZShlbGVtZW50KTtcbiAgICAgIHJldHVybiAhaXNTdXBwb3J0ZWRDYWxsYWJsZVR5cGUodHlwZSkgfHwgZ2V0Q2FsbEFjdGl2aXR5QmluZGluZ1ZhbHVlKGVsZW1lbnQpICE9PSAndmVyc2lvbic7XG4gICAgfVxuXG4gIH0pKTtcblxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XG4gICAgaWQ6ICdjYWxsYWJsZS12ZXJzaW9uLXRhZycsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmVyc2lvbiBUYWcnKSxcbiAgICBtb2RlbFByb3BlcnR5OiAndmVyc2lvblRhZycsXG5cbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHZhciB2ZXJzaW9uVGFnO1xuXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAndmVyc2lvblRhZycpO1xuXG4gICAgICBpZiAoYXR0cikge1xuICAgICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICAgICAgICB2ZXJzaW9uVGFnID0gYm8uZ2V0KGF0dHIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB2ZXJzaW9uVGFnOiB2ZXJzaW9uVGFnXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgdmFyIHZlcnNpb25UYWcgPSB2YWx1ZXMudmVyc2lvblRhZztcblxuICAgICAgdmFyIGF0dHIgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ3ZlcnNpb25UYWcnKTtcblxuICAgICAgdmFyIHByb3BzID0ge307XG5cbiAgICAgIHByb3BzW2F0dHJdID0gdmVyc2lvblRhZyB8fCB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBwcm9wcyk7XG4gICAgfSxcblxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcbiAgICAgIHZhciB2ZXJzaW9uVGFnID0gdmFsdWVzLnZlcnNpb25UYWc7XG5cbiAgICAgIHZhciB0eXBlID0gZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBpc1N1cHBvcnRlZENhbGxhYmxlVHlwZSh0eXBlKSAmJlxuICAgICAgICBnZXRDYWxsQWN0aXZpdHlCaW5kaW5nVmFsdWUoZWxlbWVudCkgPT09ICd2ZXJzaW9uVGFnJyAmJiAoXG4gICAgICAgICAgIXZlcnNpb25UYWcgPyB7IHZlcnNpb25UYWc6IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKSB9IDoge31cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgdHlwZSA9IGdldENhbGxhYmxlVHlwZShlbGVtZW50KTtcblxuICAgICAgcmV0dXJuICFpc1N1cHBvcnRlZENhbGxhYmxlVHlwZSh0eXBlKSB8fCBnZXRDYWxsQWN0aXZpdHlCaW5kaW5nVmFsdWUoZWxlbWVudCkgIT09ICd2ZXJzaW9uVGFnJztcbiAgICB9XG5cbiAgfSkpO1xuXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcbiAgICBpZDogJ3RlbmFudC1pZCcsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVGVuYW50IElkJyksXG4gICAgbW9kZWxQcm9wZXJ0eTogJ3RlbmFudElkJyxcblxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIHRlbmFudElkO1xuXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAndGVuYW50SWQnKTtcbiAgICAgIGlmIChhdHRyKSB7XG4gICAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgICAgICB0ZW5hbnRJZCA9IGJvLmdldChhdHRyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGVuYW50SWQ6IHRlbmFudElkXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgdmFyIHRlbmFudElkID0gdmFsdWVzLnRlbmFudElkO1xuICAgICAgdmFyIGF0dHIgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ3RlbmFudElkJyk7XG5cbiAgICAgIHZhciBwcm9wcyA9IHt9O1xuICAgICAgcHJvcHNbYXR0cl0gPSB0ZW5hbnRJZCB8fCB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBwcm9wcyk7XG4gICAgfSxcblxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIHR5cGUgPSBnZXRDYWxsYWJsZVR5cGUoZWxlbWVudCk7XG4gICAgICByZXR1cm4gIWlzU3VwcG9ydGVkQ2FsbGFibGVUeXBlKHR5cGUpO1xuICAgIH1cblxuICB9KSk7XG5cbiAgaWYgKGlzKGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLCAnYnBtbjpDYWxsQWN0aXZpdHknKSkge1xuICAgIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkuY2hlY2tib3goe1xuICAgICAgaWQ6ICdjYWxsYWJsZS1idXNpbmVzcy1rZXknLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnQnVzaW5lc3MgS2V5JyksXG4gICAgICBtb2RlbFByb3BlcnR5OiAnY2FsbGFibGVCdXNpbmVzc0tleScsXG5cbiAgICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgICB2YXIgYWN0aXZpdGlJbiA9IGdldEFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkoZWxlbWVudCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjYWxsYWJsZUJ1c2luZXNzS2V5OiAhIShhY3Rpdml0aUluICYmIGFjdGl2aXRpSW4ubGVuZ3RoID4gMClcbiAgICAgICAgfTtcbiAgICAgIH0sXG5cbiAgICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgICAgIGlmICh2YWx1ZXMuY2FsbGFibGVCdXNpbmVzc0tleSkge1xuICAgICAgICAgIHJldHVybiBzZXRCdXNpbmVzc0tleShlbGVtZW50LCAnI3tleGVjdXRpb24ucHJvY2Vzc0J1c2luZXNzS2V5fScsIGJwbW5GYWN0b3J5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZGVsZXRlQnVzaW5lc3NLZXkoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XG4gICAgaWQ6ICdidXNpbmVzcy1rZXktZXhwcmVzc2lvbicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQnVzaW5lc3MgS2V5IEV4cHJlc3Npb24nKSxcbiAgICBtb2RlbFByb3BlcnR5OiAnYnVzaW5lc3NLZXknLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgYWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleSA9IGdldEFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkoZWxlbWVudCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJ1c2luZXNzS2V5OiAoXG4gICAgICAgICAgYWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleS5sZW5ndGggP1xuICAgICAgICAgICAgYWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleVswXS5nZXQoJ2FjdGl2aXRpOmJ1c2luZXNzS2V5JykgOlxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgICB2YXIgYnVzaW5lc3NLZXkgPSB2YWx1ZXMuYnVzaW5lc3NLZXk7XG5cbiAgICAgIHJldHVybiBzZXRCdXNpbmVzc0tleShlbGVtZW50LCBidXNpbmVzc0tleSwgYnBtbkZhY3RvcnkpO1xuICAgIH0sXG5cbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgICB2YXIgYnVzaW5lc3NLZXkgPSB2YWx1ZXMuYnVzaW5lc3NLZXk7XG5cbiAgICAgIHJldHVybiBidXNpbmVzc0tleSA9PT0gJycgPyB7IGJ1c2luZXNzS2V5OiB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJykgfSA6IHt9O1xuICAgIH0sXG5cbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHJldHVybiAhZ2V0QWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleShlbGVtZW50KS5sZW5ndGg7XG4gICAgfVxuXG4gIH0pKTtcblxuICBlbnRyaWVzID0gZW50cmllcy5jb25jYXQocmVzdWx0VmFyaWFibGUoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcbiAgICBpZDogJ2Rtbi1yZXN1bHRWYXJpYWJsZScsXG4gICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGdldEJ1c2luZXNzT2JqZWN0LFxuICAgIGdldEltcGxlbWVudGF0aW9uVHlwZTogZ2V0Q2FsbGFibGVUeXBlLFxuICAgIGhpZGVSZXN1bHRWYXJpYWJsZTogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgcmV0dXJuIGdldENhbGxhYmxlVHlwZShlbGVtZW50KSAhPT0gJ2Rtbic7XG4gICAgfVxuICB9LCB0cmFuc2xhdGUpKTtcblxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnNlbGVjdEJveCh7XG4gICAgaWQ6ICdkbW4tbWFwLWRlY2lzaW9uLXJlc3VsdCcsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTWFwIERlY2lzaW9uIFJlc3VsdCcpLFxuICAgIHNlbGVjdE9wdGlvbnM6IG1hcERlY2lzaW9uUmVzdWx0T3B0aW9ucyxcbiAgICBtb2RlbFByb3BlcnR5OiAnbWFwRGVjaXNpb25SZXN1bHQnLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1hcERlY2lzaW9uUmVzdWx0OiBiby5nZXQoJ2FjdGl2aXRpOm1hcERlY2lzaW9uUmVzdWx0JykgfHwgJ3Jlc3VsdExpc3QnXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHtcbiAgICAgICAgJ2FjdGl2aXRpOm1hcERlY2lzaW9uUmVzdWx0JzogdmFsdWVzLm1hcERlY2lzaW9uUmVzdWx0IHx8ICdyZXN1bHRMaXN0J1xuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgICB2YXIgcmVzdWx0VmFyaWFibGUgPSBiby5nZXQoJ2FjdGl2aXRpOnJlc3VsdFZhcmlhYmxlJyk7XG4gICAgICByZXR1cm4gIShnZXRDYWxsYWJsZVR5cGUoZWxlbWVudCkgPT09ICdkbW4nICYmIHR5cGVvZiByZXN1bHRWYXJpYWJsZSAhPT0gJ3VuZGVmaW5lZCcpO1xuICAgIH1cblxuICB9KSk7XG5cblxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnNlbGVjdEJveCh7XG4gICAgaWQ6ICdkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0RlbGVnYXRlIFZhcmlhYmxlIE1hcHBpbmcnKSxcbiAgICBzZWxlY3RPcHRpb25zOiBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ09wdGlvbnMsXG4gICAgZW1wdHlQYXJhbWV0ZXI6IHRydWUsXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2RlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZScsXG5cbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZSA6IGdldERlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZShlbGVtZW50KVxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcbiAgICAgIHZhciBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUgPSB2YWx1ZXMuZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlO1xuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgICdhY3Rpdml0aTp2YXJpYWJsZU1hcHBpbmdDbGFzcycgOiB1bmRlZmluZWQsXG4gICAgICAgICdhY3Rpdml0aTp2YXJpYWJsZU1hcHBpbmdEZWxlZ2F0ZUV4cHJlc3Npb24nIDogdW5kZWZpbmVkXG4gICAgICB9O1xuXG4gICAgICBpZiAoZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlID09PSAndmFyaWFibGVNYXBwaW5nQ2xhc3MnKSB7XG4gICAgICAgIHByb3BzWydhY3Rpdml0aTp2YXJpYWJsZU1hcHBpbmdDbGFzcyddID0gJyc7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUgPT09ICd2YXJpYWJsZU1hcHBpbmdEZWxlZ2F0ZUV4cHJlc3Npb24nKSB7XG4gICAgICAgIHByb3BzWydhY3Rpdml0aTp2YXJpYWJsZU1hcHBpbmdEZWxlZ2F0ZUV4cHJlc3Npb24nXSA9ICcnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcHJvcHMpO1xuICAgIH0sXG5cbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHJldHVybiAoZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpICE9PSAnYnBtbicpO1xuICAgIH1cblxuICB9KSk7XG5cbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xuICAgIGlkOiAnZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmcnLFxuICAgIGRhdGFWYWx1ZUxhYmVsOiAnZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdMYWJlbCcsXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2RlbGVnYXRlVmFyaWFibGVNYXBwaW5nJyxcblxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgICAgIHZhciBsYWJlbCA9ICcnO1xuICAgICAgdmFyIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nID0gdW5kZWZpbmVkO1xuICAgICAgdmFyIHR5cGUgPSBnZXREZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUoZWxlbWVudCk7XG5cbiAgICAgIGlmICh0eXBlID09PSAndmFyaWFibGVNYXBwaW5nQ2xhc3MnKSB7XG4gICAgICAgIGxhYmVsID0gdHJhbnNsYXRlKCdDbGFzcycpO1xuICAgICAgICBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZyA9IGJvLmdldCgnYWN0aXZpdGk6dmFyaWFibGVNYXBwaW5nQ2xhc3MnKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICd2YXJpYWJsZU1hcHBpbmdEZWxlZ2F0ZUV4cHJlc3Npb24nKSB7XG4gICAgICAgIGxhYmVsID0gdHJhbnNsYXRlKCdEZWxlZ2F0ZSBFeHByZXNzaW9uJyk7XG4gICAgICAgIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nID0gYm8uZ2V0KCdhY3Rpdml0aTp2YXJpYWJsZU1hcHBpbmdEZWxlZ2F0ZUV4cHJlc3Npb24nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmc6IGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nLFxuICAgICAgICBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ0xhYmVsOiBsYWJlbFxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcbiAgICAgIHZhciBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZyA9IHZhbHVlcy5kZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZztcblxuICAgICAgdmFyIGF0dHIgPSAnYWN0aXZpdGk6JyArIGdldERlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZShlbGVtZW50KTtcblxuICAgICAgdmFyIHByb3BzID0ge307XG4gICAgICBwcm9wc1thdHRyXSA9IGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nIHx8IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHByb3BzKTtcbiAgICB9LFxuXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgdmFyIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nID0gdmFsdWVzLmRlbGVnYXRlVmFyaWFibGVNYXBwaW5nO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpID09PSAnYnBtbicgJiYgKFxuICAgICAgICAgICFkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZyA/IHsgZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmc6IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKSB9IDoge31cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICByZXR1cm4gIShnZXRDYWxsYWJsZVR5cGUoZWxlbWVudCkgPT09ICdicG1uJyAmJiBnZXREZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUoZWxlbWVudCkgIT09ICcnKTtcbiAgICB9XG5cbiAgfSkpO1xuXG4gIHJldHVybiBlbnRyaWVzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XG5cbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xuXG4gIHZhciBnZXRCdXNpbmVzc09iamVjdCA9IG9wdGlvbnMuZ2V0QnVzaW5lc3NPYmplY3Q7XG5cbiAgdmFyIGNhbmRpZGF0ZVN0YXJ0ZXJHcm91cHNFbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xuICAgIGlkOiAnY2FuZGlkYXRlU3RhcnRlckdyb3VwcycsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ2FuZGlkYXRlIFN0YXJ0ZXIgR3JvdXBzJyksXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2NhbmRpZGF0ZVN0YXJ0ZXJHcm91cHMnLFxuICAgIGRlc2NyaXB0aW9uOiB0cmFuc2xhdGUoJ1NwZWNpZnkgbW9yZSB0aGFuIG9uZSBncm91cCBhcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0LicpLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICAgIHZhciBjYW5kaWRhdGVTdGFydGVyR3JvdXBzID0gYm8uZ2V0KCdhY3Rpdml0aTpjYW5kaWRhdGVTdGFydGVyR3JvdXBzJyk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNhbmRpZGF0ZVN0YXJ0ZXJHcm91cHM6IGNhbmRpZGF0ZVN0YXJ0ZXJHcm91cHMgPyBjYW5kaWRhdGVTdGFydGVyR3JvdXBzIDogJydcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHtcbiAgICAgICAgJ2FjdGl2aXRpOmNhbmRpZGF0ZVN0YXJ0ZXJHcm91cHMnOiB2YWx1ZXMuY2FuZGlkYXRlU3RhcnRlckdyb3VwcyB8fCB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH1cblxuICB9KTtcblxuICB2YXIgY2FuZGlkYXRlU3RhcnRlclVzZXJzRW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcbiAgICBpZDogJ2NhbmRpZGF0ZVN0YXJ0ZXJVc2VycycsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ2FuZGlkYXRlIFN0YXJ0ZXIgVXNlcnMnKSxcbiAgICBtb2RlbFByb3BlcnR5OiAnY2FuZGlkYXRlU3RhcnRlclVzZXJzJyxcbiAgICBkZXNjcmlwdGlvbjogdHJhbnNsYXRlKCdTcGVjaWZ5IG1vcmUgdGhhbiBvbmUgdXNlciBhcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0LicpLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICAgIHZhciBjYW5kaWRhdGVTdGFydGVyVXNlcnMgPSBiby5nZXQoJ2FjdGl2aXRpOmNhbmRpZGF0ZVN0YXJ0ZXJVc2VycycpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjYW5kaWRhdGVTdGFydGVyVXNlcnM6IGNhbmRpZGF0ZVN0YXJ0ZXJVc2VycyA/IGNhbmRpZGF0ZVN0YXJ0ZXJVc2VycyA6ICcnXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLCB7XG4gICAgICAgICdhY3Rpdml0aTpjYW5kaWRhdGVTdGFydGVyVXNlcnMnOiB2YWx1ZXMuY2FuZGlkYXRlU3RhcnRlclVzZXJzIHx8IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfVxuXG4gIH0pO1xuXG4gIHJldHVybiBbXG4gICAgY2FuZGlkYXRlU3RhcnRlckdyb3Vwc0VudHJ5LFxuICAgIGNhbmRpZGF0ZVN0YXJ0ZXJVc2Vyc0VudHJ5XG4gIF07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XG5cbnZhciBERUxFR0FURV9UWVBFUyA9IFtcbiAgJ2NsYXNzJyxcbiAgJ2V4cHJlc3Npb24nLFxuICAnZGVsZWdhdGVFeHByZXNzaW9uJ1xuXTtcblxudmFyIFBST1BFUlRJRVMgPSB7XG4gIGNsYXNzOiAnYWN0aXZpdGk6Y2xhc3MnLFxuICBleHByZXNzaW9uOiAnYWN0aXZpdGk6ZXhwcmVzc2lvbicsXG4gIGRlbGVnYXRlRXhwcmVzc2lvbjogJ2FjdGl2aXRpOmRlbGVnYXRlRXhwcmVzc2lvbidcbn07XG5cbmZ1bmN0aW9uIGlzRGVsZWdhdGUodHlwZSkge1xuICByZXR1cm4gREVMRUdBVEVfVFlQRVMuaW5kZXhPZih0eXBlKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIGdldEF0dHJpYnV0ZSh0eXBlKSB7XG4gIHJldHVybiBQUk9QRVJUSUVTW3R5cGVdO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xuXG4gIHZhciBnZXRJbXBsZW1lbnRhdGlvblR5cGUgPSBvcHRpb25zLmdldEltcGxlbWVudGF0aW9uVHlwZSxcbiAgICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gb3B0aW9ucy5nZXRCdXNpbmVzc09iamVjdDtcblxuICBmdW5jdGlvbiBnZXREZWxlZ2F0aW9uTGFiZWwodHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2NsYXNzJzpcbiAgICAgIHJldHVybiB0cmFuc2xhdGUoJ0phdmEgQ2xhc3MnKTtcbiAgICBjYXNlICdleHByZXNzaW9uJzpcbiAgICAgIHJldHVybiB0cmFuc2xhdGUoJ0V4cHJlc3Npb24nKTtcbiAgICBjYXNlICdkZWxlZ2F0ZUV4cHJlc3Npb24nOlxuICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnRGVsZWdhdGUgRXhwcmVzc2lvbicpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgdmFyIGRlbGVnYXRlRW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcbiAgICBpZDogJ2RlbGVnYXRlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdWYWx1ZScpLFxuICAgIGRhdGFWYWx1ZUxhYmVsOiAnZGVsZWdhdGlvbkxhYmVsJyxcbiAgICBtb2RlbFByb3BlcnR5OiAnZGVsZWdhdGUnLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICAgIHZhciB0eXBlID0gZ2V0SW1wbGVtZW50YXRpb25UeXBlKGVsZW1lbnQpO1xuICAgICAgdmFyIGF0dHIgPSBnZXRBdHRyaWJ1dGUodHlwZSk7XG4gICAgICB2YXIgbGFiZWwgPSBnZXREZWxlZ2F0aW9uTGFiZWwodHlwZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWxlZ2F0ZTogYm8uZ2V0KGF0dHIpLFxuICAgICAgICBkZWxlZ2F0aW9uTGFiZWw6IGxhYmVsXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgICB2YXIgdHlwZSA9IGdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KTtcbiAgICAgIHZhciBhdHRyID0gZ2V0QXR0cmlidXRlKHR5cGUpO1xuICAgICAgdmFyIHByb3AgPSB7fTtcbiAgICAgIHByb3BbYXR0cl0gPSB2YWx1ZXMuZGVsZWdhdGUgfHwgJyc7XG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLCBwcm9wKTtcbiAgICB9LFxuXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgcmV0dXJuIGlzRGVsZWdhdGUoZ2V0SW1wbGVtZW50YXRpb25UeXBlKGVsZW1lbnQpKSAmJiAhdmFsdWVzLmRlbGVnYXRlID8geyBkZWxlZ2F0ZTogdHJhbnNsYXRlKCdNdXN0IHByb3ZpZGUgYSB2YWx1ZScpIH0gOiB7fTtcbiAgICB9LFxuXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICByZXR1cm4gIWlzRGVsZWdhdGUoZ2V0SW1wbGVtZW50YXRpb25UeXBlKGVsZW1lbnQpKTtcbiAgICB9XG5cbiAgfSk7XG5cbiAgcmV0dXJuIFsgZGVsZWdhdGVFbnRyeSBdO1xuXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXG4gICAgZWxlbWVudFJlZmVyZW5jZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vcHJvdmlkZXIvYnBtbi9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9FbGVtZW50UmVmZXJlbmNlUHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihcbiAgICBncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIGVycm9yRXZlbnREZWZpbml0aW9uLFxuICAgIHNob3dFcnJvckNvZGVWYXJpYWJsZSwgc2hvd0Vycm9yTWVzc2FnZVZhcmlhYmxlLCB0cmFuc2xhdGVcbikge1xuXG5cbiAgdmFyIGdldFZhbHVlID0gZnVuY3Rpb24obW9kZWxQcm9wZXJ0eSkge1xuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICB2YXIgbW9kZWxQcm9wZXJ0eVZhbHVlID0gZXJyb3JFdmVudERlZmluaXRpb24uZ2V0KCdhY3Rpdml0aTonICsgbW9kZWxQcm9wZXJ0eSk7XG4gICAgICB2YXIgdmFsdWUgPSB7fTtcblxuICAgICAgdmFsdWVbbW9kZWxQcm9wZXJ0eV0gPSBtb2RlbFByb3BlcnR5VmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgc2V0VmFsdWUgPSBmdW5jdGlvbihtb2RlbFByb3BlcnR5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xuICAgICAgdmFyIHByb3BzID0ge307XG5cbiAgICAgIHByb3BzWydhY3Rpdml0aTonICsgbW9kZWxQcm9wZXJ0eV0gPSB2YWx1ZXNbbW9kZWxQcm9wZXJ0eV0gfHwgdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGVycm9yRXZlbnREZWZpbml0aW9uLCBwcm9wcyk7XG4gICAgfTtcbiAgfTtcblxuXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChcbiAgICBlbGVtZW50UmVmZXJlbmNlUHJvcGVydHkoZWxlbWVudCwgZXJyb3JFdmVudERlZmluaXRpb24sIGJwbW5GYWN0b3J5LCB7XG4gICAgICBpZDogJ2Vycm9yLWVsZW1lbnQtbWVzc2FnZScsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdFcnJvciBNZXNzYWdlJyksXG4gICAgICByZWZlcmVuY2VQcm9wZXJ0eTogJ2Vycm9yUmVmJyxcbiAgICAgIG1vZGVsUHJvcGVydHk6ICdlcnJvck1lc3NhZ2UnXG4gICAgfSlcbiAgKTtcblxuICBpZiAoc2hvd0Vycm9yQ29kZVZhcmlhYmxlKSB7XG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xuICAgICAgaWQ6ICdlcnJvckNvZGVWYXJpYWJsZScsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdFcnJvciBDb2RlIFZhcmlhYmxlJyksXG4gICAgICBtb2RlbFByb3BlcnR5IDogJ2Vycm9yQ29kZVZhcmlhYmxlJyxcblxuICAgICAgZ2V0OiBnZXRWYWx1ZSgnZXJyb3JDb2RlVmFyaWFibGUnKSxcbiAgICAgIHNldDogc2V0VmFsdWUoJ2Vycm9yQ29kZVZhcmlhYmxlJylcbiAgICB9KSk7XG4gIH1cblxuICBpZiAoc2hvd0Vycm9yTWVzc2FnZVZhcmlhYmxlKSB7XG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xuICAgICAgaWQ6ICdlcnJvck1lc3NhZ2VWYXJpYWJsZScsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdFcnJvciBNZXNzYWdlIFZhcmlhYmxlJyksXG4gICAgICBtb2RlbFByb3BlcnR5OiAnZXJyb3JNZXNzYWdlVmFyaWFibGUnLFxuXG4gICAgICBnZXQ6IGdldFZhbHVlKCdlcnJvck1lc3NhZ2VWYXJpYWJsZScpLFxuICAgICAgc2V0OiBzZXRWYWx1ZSgnZXJyb3JNZXNzYWdlVmFyaWFibGUnKVxuICAgIH0pKTtcbiAgfVxuXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xuXG52YXIgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnksXG4gICAgZG9tQ2xvc2VzdCA9IHJlcXVpcmUoJ21pbi1kb20nKS5jbG9zZXN0LFxuICAgIGRvbWlmeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5kb21pZnksXG4gICAgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XG5cbnZhciBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKSxcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9VdGlscycpLFxuICAgIGVzY2FwZUhUTUwgPSB1dGlscy5lc2NhcGVIVE1MO1xuXG5mdW5jdGlvbiBnZXRTZWxlY3RCb3gobm9kZSwgaWQpIHtcbiAgdmFyIGN1cnJlbnRUYWIgPSBkb21DbG9zZXN0KG5vZGUsICdkaXYuYnBwLXByb3BlcnRpZXMtdGFiJyk7XG4gIHZhciBxdWVyeSA9ICdzZWxlY3RbbmFtZT1zZWxlY3RlZEV4dGVuc2lvbkVsZW1lbnRdJyArIChpZCA/ICdbaWQ9Y2FtLWV4dGVuc2lvbkVsZW1lbnRzLScgKyBpZCArICddJyA6ICcnKTtcbiAgcmV0dXJuIGRvbVF1ZXJ5KHF1ZXJ5LCBjdXJyZW50VGFiKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0ZWQobm9kZSwgaWQpIHtcbiAgdmFyIHNlbGVjdEJveCA9IGdldFNlbGVjdEJveChub2RlLCBpZCk7XG4gIHJldHVybiB7XG4gICAgdmFsdWU6IChzZWxlY3RCb3ggfHwge30pLnZhbHVlLFxuICAgIGlkeDogKHNlbGVjdEJveCB8fCB7fSkuc2VsZWN0ZWRJbmRleFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUVsZW1lbnRJZChwcmVmaXgpIHtcbiAgcHJlZml4ID0gcHJlZml4ICsgJ18nO1xuICByZXR1cm4gdXRpbHMubmV4dElkKHByZWZpeCk7XG59XG5cbnZhciBDUkVBVEVfRVhURU5TSU9OX0VMRU1FTlRfQUNUSU9OID0gJ2NyZWF0ZS1leHRlbnNpb24tZWxlbWVudCcsXG4gICAgUkVNT1ZFX0VYVEVOU0lPTl9FTEVNRU5UX0FDVElPTiA9ICdyZW1vdmUtZXh0ZW5zaW9uLWVsZW1lbnQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcblxuICB2YXIgaWQgPSBvcHRpb25zLmlkLFxuICAgICAgcHJlZml4ID0gb3B0aW9ucy5wcmVmaXggfHwgJ2VsZW0nLFxuICAgICAgbGFiZWwgPSBvcHRpb25zLmxhYmVsIHx8IGlkLFxuICAgICAgaWRHZW5lcmF0aW9uID0gKG9wdGlvbnMuaWRHZW5lcmF0aW9uID09PSBmYWxzZSkgPyBvcHRpb25zLmlkR2VuZXJhdGlvbiA6IHRydWUsXG4gICAgICBidXNpbmVzc09iamVjdCA9IG9wdGlvbnMuYnVzaW5lc3NPYmplY3QgfHwgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgdmFyIG1vZGVsUHJvcGVydHkgPSBvcHRpb25zLm1vZGVsUHJvcGVydHkgfHwgJ2lkJztcblxuICB2YXIgZ2V0RWxlbWVudHMgPSBvcHRpb25zLmdldEV4dGVuc2lvbkVsZW1lbnRzO1xuXG4gIHZhciBjcmVhdGVFbGVtZW50ID0gb3B0aW9ucy5jcmVhdGVFeHRlbnNpb25FbGVtZW50LFxuICAgICAgY2FuQ3JlYXRlID0gdHlwZW9mIGNyZWF0ZUVsZW1lbnQgPT09ICdmdW5jdGlvbic7XG5cbiAgdmFyIHJlbW92ZUVsZW1lbnQgPSBvcHRpb25zLnJlbW92ZUV4dGVuc2lvbkVsZW1lbnQsXG4gICAgICBjYW5SZW1vdmUgPSB0eXBlb2YgcmVtb3ZlRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJztcblxuICB2YXIgb25TZWxlY3Rpb25DaGFuZ2UgPSBvcHRpb25zLm9uU2VsZWN0aW9uQ2hhbmdlO1xuXG4gIHZhciBoaWRlRWxlbWVudHMgPSBvcHRpb25zLmhpZGVFeHRlbnNpb25FbGVtZW50cyxcbiAgICAgIGNhbkJlSGlkZGVuID0gdHlwZW9mIGhpZGVFbGVtZW50cyA9PT0gJ2Z1bmN0aW9uJztcblxuICB2YXIgc2V0T3B0aW9uTGFiZWxWYWx1ZSA9IG9wdGlvbnMuc2V0T3B0aW9uTGFiZWxWYWx1ZTtcblxuICB2YXIgZGVmYXVsdFNpemUgPSBvcHRpb25zLnNpemUgfHwgNSxcbiAgICAgIHJlc2l6YWJsZSA9IG9wdGlvbnMucmVzaXphYmxlO1xuXG4gIHZhciByZWZlcmVuY2UgPSBvcHRpb25zLnJlZmVyZW5jZSB8fCB1bmRlZmluZWQ7XG5cbiAgdmFyIHNlbGVjdGlvbkNoYW5nZWQgPSBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBldmVudCwgc2NvcGUpIHtcbiAgICBpZiAodHlwZW9mIG9uU2VsZWN0aW9uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gb25TZWxlY3Rpb25DaGFuZ2UoZWxlbWVudCwgbm9kZSwgZXZlbnQsIHNjb3BlKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGNyZWF0ZU9wdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuICc8b3B0aW9uIHZhbHVlPVwiJyArIGVzY2FwZUhUTUwodmFsdWUpICsgJ1wiIGRhdGEtdmFsdWUgZGF0YS1uYW1lPVwiZXh0ZW5zaW9uRWxlbWVudFZhbHVlXCI+JyArIGVzY2FwZUhUTUwodmFsdWUpICsgJzwvb3B0aW9uPic7XG4gIH07XG5cbiAgdmFyIGluaXRTZWxlY3Rpb25TaXplID0gZnVuY3Rpb24oc2VsZWN0Qm94LCBvcHRpb25zTGVuZ3RoKSB7XG4gICAgaWYgKHJlc2l6YWJsZSkge1xuICAgICAgc2VsZWN0Qm94LnNpemUgPSBvcHRpb25zTGVuZ3RoID4gZGVmYXVsdFNpemUgPyBvcHRpb25zTGVuZ3RoIDogZGVmYXVsdFNpemU7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgaWQ6IGlkLFxuICAgIGh0bWw6ICc8ZGl2IGNsYXNzPVwiYnBwLXJvdyBicHAtZWxlbWVudC1saXN0XCIgJyArXG4gICAgICAgICAgICAoY2FuQmVIaWRkZW4gPyAnZGF0YS1zaG93PVwiaGlkZUVsZW1lbnRzXCInIDogJycpICsgJz4nICtcbiAgICAgICAgICAgICc8bGFiZWwgZm9yPVwiY2FtLWV4dGVuc2lvbkVsZW1lbnRzLScgKyBlc2NhcGVIVE1MKGlkKSArICdcIj4nICsgZXNjYXBlSFRNTChsYWJlbCkgKyAnPC9sYWJlbD4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLXdyYXBwZXJcIj4nICtcbiAgICAgICAgICAgICAgJzxzZWxlY3QgaWQ9XCJjYW0tZXh0ZW5zaW9uRWxlbWVudHMtJyArIGVzY2FwZUhUTUwoaWQpICsgJ1wiJyArXG4gICAgICAgICAgICAgICAgICAgICAgJ25hbWU9XCJzZWxlY3RlZEV4dGVuc2lvbkVsZW1lbnRcIiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAnc2l6ZT1cIicgKyBlc2NhcGVIVE1MKGRlZmF1bHRTaXplKSArICdcIiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1saXN0LWVudHJ5LWNvbnRhaW5lciAnICtcbiAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1vbi1jaGFuZ2U9XCJzZWxlY3RFbGVtZW50XCI+JyArXG4gICAgICAgICAgICAgICc8L3NlbGVjdD4nICtcbiAgICAgICAgICAgICAgKGNhbkNyZWF0ZSA/ICc8YnV0dG9uIGNsYXNzPVwiYWRkXCIgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZD1cImNhbS1leHRlbnNpb25FbGVtZW50cy1jcmVhdGUtJyArIGVzY2FwZUhUTUwoaWQpICsgJ1wiICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1hY3Rpb249XCJjcmVhdGVFbGVtZW50XCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3Bhbj4rPC9zcGFuPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgOiAnJykgK1xuICAgICAgICAgICAgICAoY2FuUmVtb3ZlID8gJzxidXR0b24gY2xhc3M9XCJjbGVhclwiICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWQ9XCJjYW0tZXh0ZW5zaW9uRWxlbWVudHMtcmVtb3ZlLScgKyBlc2NhcGVIVE1MKGlkKSArICdcIiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtYWN0aW9uPVwicmVtb3ZlRWxlbWVudFwiICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1kaXNhYmxlPVwiZGlzYWJsZVJlbW92ZVwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4+LTwvc3Bhbj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nIDogJycpICtcbiAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAnPC9kaXY+JyxcblxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIGVsZW1lbnRzID0gZ2V0RWxlbWVudHMoZWxlbWVudCwgbm9kZSk7XG5cbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW0pIHtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgIGV4dGVuc2lvbkVsZW1lbnRWYWx1ZTogZWxlbS5nZXQobW9kZWxQcm9wZXJ0eSlcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgdmFyIHNlbGVjdEJveCA9IGdldFNlbGVjdEJveChub2RlLnBhcmVudE5vZGUsIGlkKTtcbiAgICAgIGluaXRTZWxlY3Rpb25TaXplKHNlbGVjdEJveCwgcmVzdWx0Lmxlbmd0aCk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgICB2YXIgYWN0aW9uID0gdGhpcy5fX2FjdGlvbjtcbiAgICAgIGRlbGV0ZSB0aGlzLl9fYWN0aW9uO1xuXG4gICAgICBidXNpbmVzc09iamVjdCA9IGJ1c2luZXNzT2JqZWN0IHx8IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gICAgICB2YXIgYm8gPVxuICAgICAgICAocmVmZXJlbmNlICYmIGJ1c2luZXNzT2JqZWN0LmdldChyZWZlcmVuY2UpKVxuICAgICAgICAgID8gYnVzaW5lc3NPYmplY3QuZ2V0KHJlZmVyZW5jZSlcbiAgICAgICAgICA6IGJ1c2luZXNzT2JqZWN0O1xuXG4gICAgICB2YXIgZXh0ZW5zaW9uRWxlbWVudHMgPSBiby5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG5cbiAgICAgIGlmIChhY3Rpb24uaWQgPT09IENSRUFURV9FWFRFTlNJT05fRUxFTUVOVF9BQ1RJT04pIHtcbiAgICAgICAgdmFyIGNvbW1hbmRzID0gW107XG4gICAgICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICAgICAgICBleHRlbnNpb25FbGVtZW50cyA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHsgdmFsdWVzOiBbXSB9LCBibywgYnBtbkZhY3RvcnkpO1xuICAgICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLCB7IGV4dGVuc2lvbkVsZW1lbnRzOiBleHRlbnNpb25FbGVtZW50cyB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZHMucHVzaChjcmVhdGVFbGVtZW50KGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCBhY3Rpb24udmFsdWUsIG5vZGUpKTtcbiAgICAgICAgcmV0dXJuIGNvbW1hbmRzO1xuXG4gICAgICB9XG4gICAgICBlbHNlIGlmIChhY3Rpb24uaWQgPT09IFJFTU9WRV9FWFRFTlNJT05fRUxFTUVOVF9BQ1RJT04pIHtcbiAgICAgICAgcmV0dXJuIHJlbW92ZUVsZW1lbnQoZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsIGFjdGlvbi52YWx1ZSwgYWN0aW9uLmlkeCwgbm9kZSk7XG4gICAgICB9XG5cbiAgICB9LFxuXG4gICAgY3JlYXRlTGlzdEVudHJ5VGVtcGxhdGU6IGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgc2VsZWN0Qm94KSB7XG4gICAgICBpbml0U2VsZWN0aW9uU2l6ZShzZWxlY3RCb3gsIHNlbGVjdEJveC5vcHRpb25zLmxlbmd0aCArIDEpO1xuICAgICAgcmV0dXJuIGNyZWF0ZU9wdGlvbih2YWx1ZS5leHRlbnNpb25FbGVtZW50VmFsdWUpO1xuICAgIH0sXG5cbiAgICBkZXNlbGVjdDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIHNlbGVjdEJveCA9IGdldFNlbGVjdEJveChub2RlLCBpZCk7XG4gICAgICBzZWxlY3RCb3guc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgIH0sXG5cbiAgICBnZXRTZWxlY3RlZDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgcmV0dXJuIGdldFNlbGVjdGVkKG5vZGUsIGlkKTtcbiAgICB9LFxuXG4gICAgc2V0Q29udHJvbFZhbHVlOiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBvcHRpb24sIHByb3BlcnR5LCB2YWx1ZSwgaWR4KSB7XG4gICAgICBub2RlLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgIGlmICghc2V0T3B0aW9uTGFiZWxWYWx1ZSkge1xuICAgICAgICBub2RlLnRleHQgPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldE9wdGlvbkxhYmVsVmFsdWUoZWxlbWVudCwgbm9kZSwgb3B0aW9uLCBwcm9wZXJ0eSwgdmFsdWUsIGlkeCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIC8vIGNyZWF0ZSBvcHRpb24gdGVtcGxhdGVcbiAgICAgIHZhciBnZW5lcmF0ZWRJZDtcbiAgICAgIGlmIChpZEdlbmVyYXRpb24pIHtcbiAgICAgICAgZ2VuZXJhdGVkSWQgPSBnZW5lcmF0ZUVsZW1lbnRJZChwcmVmaXgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2VsZWN0Qm94ID0gZ2V0U2VsZWN0Qm94KG5vZGUsIGlkKTtcbiAgICAgIHZhciB0ZW1wbGF0ZSA9IGRvbWlmeShjcmVhdGVPcHRpb24oZ2VuZXJhdGVkSWQpKTtcblxuICAgICAgLy8gYWRkIG5ldyBlbXB0eSBvcHRpb24gYXMgbGFzdCBjaGlsZCBlbGVtZW50XG4gICAgICBzZWxlY3RCb3guYXBwZW5kQ2hpbGQodGVtcGxhdGUpO1xuXG4gICAgICAvLyBzZWxlY3QgbGFzdCBjaGlsZCBlbGVtZW50XG4gICAgICBzZWxlY3RCb3gubGFzdENoaWxkLnNlbGVjdGVkID0gJ3NlbGVjdGVkJztcbiAgICAgIHNlbGVjdGlvbkNoYW5nZWQoZWxlbWVudCwgbm9kZSk7XG5cbiAgICAgIC8vIHVwZGF0ZSBzZWxlY3QgYm94IHNpemVcbiAgICAgIGluaXRTZWxlY3Rpb25TaXplKHNlbGVjdEJveCwgc2VsZWN0Qm94Lm9wdGlvbnMubGVuZ3RoKTtcblxuICAgICAgdGhpcy5fX2FjdGlvbiA9IHtcbiAgICAgICAgaWQ6IENSRUFURV9FWFRFTlNJT05fRUxFTUVOVF9BQ1RJT04sXG4gICAgICAgIHZhbHVlOiBnZW5lcmF0ZWRJZFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIHJlbW92ZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHZhciBzZWxlY3Rpb24gPSBnZXRTZWxlY3RlZChub2RlLCBpZCk7XG5cbiAgICAgIHZhciBzZWxlY3RCb3ggPSBnZXRTZWxlY3RCb3gobm9kZSwgaWQpO1xuICAgICAgc2VsZWN0Qm94LnJlbW92ZUNoaWxkKHNlbGVjdEJveC5vcHRpb25zW3NlbGVjdGlvbi5pZHhdKTtcblxuICAgICAgLy8gdXBkYXRlIHNlbGVjdCBib3ggc2l6ZVxuICAgICAgaW5pdFNlbGVjdGlvblNpemUoc2VsZWN0Qm94LCBzZWxlY3RCb3gub3B0aW9ucy5sZW5ndGgpO1xuXG4gICAgICB0aGlzLl9fYWN0aW9uID0ge1xuICAgICAgICBpZDogUkVNT1ZFX0VYVEVOU0lPTl9FTEVNRU5UX0FDVElPTixcbiAgICAgICAgdmFsdWU6IHNlbGVjdGlvbi52YWx1ZSxcbiAgICAgICAgaWR4OiBzZWxlY3Rpb24uaWR4XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuXG4gICAgaGlkZUVsZW1lbnRzOiBmdW5jdGlvbihlbGVtZW50LCBlbnRyeU5vZGUsIG5vZGUsIHNjb3BlTm9kZSkge1xuICAgICAgcmV0dXJuICFoaWRlRWxlbWVudHMoZWxlbWVudCwgZW50cnlOb2RlLCBub2RlLCBzY29wZU5vZGUpO1xuICAgIH0sXG5cbiAgICBkaXNhYmxlUmVtb3ZlOiBmdW5jdGlvbihlbGVtZW50LCBlbnRyeU5vZGUsIG5vZGUsIHNjb3BlTm9kZSkge1xuICAgICAgcmV0dXJuIChnZXRTZWxlY3RlZChlbnRyeU5vZGUsIGlkKSB8fCB7fSkuaWR4IDwgMDtcbiAgICB9LFxuXG4gICAgc2VsZWN0RWxlbWVudDogc2VsZWN0aW9uQ2hhbmdlZFxuICB9O1xuXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xuXG4gIHZhciBnZXRJbXBsZW1lbnRhdGlvblR5cGUgPSBvcHRpb25zLmdldEltcGxlbWVudGF0aW9uVHlwZSxcbiAgICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gb3B0aW9ucy5nZXRCdXNpbmVzc09iamVjdDtcblxuICBmdW5jdGlvbiBpc0V4dGVybmFsKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0SW1wbGVtZW50YXRpb25UeXBlKGVsZW1lbnQpID09PSAnZXh0ZXJuYWwnO1xuICB9XG5cbiAgdmFyIHRvcGljRW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcbiAgICBpZDogJ2V4dGVybmFsVG9waWMnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1RvcGljJyksXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2V4dGVybmFsVG9waWMnLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICAgIHJldHVybiB7IGV4dGVybmFsVG9waWM6IGJvLmdldCgnYWN0aXZpdGk6dG9waWMnKSB9O1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLCB7XG4gICAgICAgICdhY3Rpdml0aTp0b3BpYyc6IHZhbHVlcy5leHRlcm5hbFRvcGljXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgcmV0dXJuIGlzRXh0ZXJuYWwoZWxlbWVudCkgJiYgIXZhbHVlcy5leHRlcm5hbFRvcGljID8geyBleHRlcm5hbFRvcGljOiB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJykgfSA6IHt9O1xuICAgIH0sXG5cbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHJldHVybiAhaXNFeHRlcm5hbChlbGVtZW50KTtcbiAgICB9XG5cbiAgfSk7XG5cbiAgcmV0dXJuIFsgdG9waWNFbnRyeSBdO1xuXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcblxudmFyIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XG5cbiAgdmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gb3B0aW9ucy5nZXRCdXNpbmVzc09iamVjdDtcblxuICB2YXIgZXh0ZXJuYWxUYXNrUHJpb3JpdHlFbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xuICAgIGlkOiAnZXh0ZXJuYWxUYXNrUHJpb3JpdHknLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1Rhc2sgUHJpb3JpdHknKSxcbiAgICBtb2RlbFByb3BlcnR5OiAndGFza1ByaW9yaXR5JyxcblxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YXNrUHJpb3JpdHk6IGJvLmdldCgnYWN0aXZpdGk6dGFza1ByaW9yaXR5JylcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHtcbiAgICAgICAgJ2FjdGl2aXRpOnRhc2tQcmlvcml0eSc6IHZhbHVlcy50YXNrUHJpb3JpdHkgfHwgdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9XG5cbiAgfSk7XG5cbiAgcmV0dXJuIFsgZXh0ZXJuYWxUYXNrUHJpb3JpdHlFbnRyeSBdO1xuXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKSxcbiAgICBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKSxcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL1V0aWxzJyk7XG5cbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xuXG52YXIgZXh0ZW5zaW9uRWxlbWVudHNFbnRyeSA9IHJlcXVpcmUoJy4vRXh0ZW5zaW9uRWxlbWVudHMnKTtcblxudmFyIE1vZGVsVXRpbCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJyksXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSBNb2RlbFV0aWwuZ2V0QnVzaW5lc3NPYmplY3Q7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XG5cblxudmFyIERFRkFVTFRfUFJPUFMgPSB7XG4gICdzdHJpbmdWYWx1ZSc6IHVuZGVmaW5lZCxcbiAgJ3N0cmluZyc6IHVuZGVmaW5lZCxcbiAgJ2V4cHJlc3Npb24nOiB1bmRlZmluZWRcbn07XG5cbnZhciBBQ1RJVklUSV9GSUVMRF9FWFRFTlNJT05fRUxFTUVOVCA9ICdhY3Rpdml0aTpGaWVsZCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSwgb3B0aW9ucykge1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBpbnNpZGVMaXN0ZW5lciA9ICEhb3B0aW9ucy5pbnNpZGVMaXN0ZW5lcixcbiAgICAgIGlkUHJlZml4ID0gb3B0aW9ucy5pZFByZWZpeCB8fCAnJyxcbiAgICAgIGdldFNlbGVjdGVkTGlzdGVuZXIgPSBvcHRpb25zLmdldFNlbGVjdGVkTGlzdGVuZXIsXG4gICAgICBidXNpbmVzc09iamVjdCA9IG9wdGlvbnMuYnVzaW5lc3NPYmplY3QgfHwgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgdmFyIGVudHJpZXMgPSBbXTtcblxuICB2YXIgaXNTZWxlY3RlZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRGaWVsZChlbGVtZW50LCBub2RlKTtcbiAgfTtcblxuICBmdW5jdGlvbiBnZXRTZWxlY3RlZEZpZWxkKGVsZW1lbnQsIG5vZGUpIHtcbiAgICB2YXIgc2VsZWN0ZWQgPSBmaWVsZEVudHJ5LmdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUucGFyZW50Tm9kZSk7XG5cbiAgICBpZiAoc2VsZWN0ZWQuaWR4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBmaWVsZHMgPSBnZXRBY3Rpdml0aUZpZWxkcyhlbGVtZW50LCBub2RlKTtcblxuICAgIHJldHVybiBmaWVsZHNbc2VsZWN0ZWQuaWR4XTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFjdGl2aXRpRmllbGRzKGVsZW1lbnQsIG5vZGUpIHtcbiAgICBpZiAoIWluc2lkZUxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBidXNpbmVzc09iamVjdCAmJlxuICAgICAgICBleHRlbnNpb25FbGVtZW50c0hlbHBlci5nZXRFeHRlbnNpb25FbGVtZW50cyhidXNpbmVzc09iamVjdCwgQUNUSVZJVElfRklFTERfRVhURU5TSU9OX0VMRU1FTlQpXG4gICAgICApIHx8IFtdO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0QWN0aXZpdGlMaXN0ZW5lckZpZWxkcyhlbGVtZW50LCBub2RlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFjdGl2aXRpTGlzdGVuZXJGaWVsZHMoZWxlbWVudCwgbm9kZSkge1xuICAgIHZhciBzZWxlY3RlZExpc3RlbmVyID0gZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKTtcbiAgICByZXR1cm4gc2VsZWN0ZWRMaXN0ZW5lciAmJiBzZWxlY3RlZExpc3RlbmVyLmZpZWxkcyB8fCBbXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEZpZWxkVHlwZShibykge1xuICAgIHZhciBmaWVsZFR5cGUgPSAnc3RyaW5nJztcblxuICAgIHZhciBleHByZXNzaW9uVmFsdWUgPSBibyAmJiBiby5leHByZXNzaW9uO1xuICAgIHZhciBzdHJpbmdWYWx1ZSA9IGJvICYmIChiby5zdHJpbmcgfHwgYm8uc3RyaW5nVmFsdWUpO1xuXG4gICAgaWYgKHR5cGVvZiBzdHJpbmdWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZpZWxkVHlwZSA9ICdzdHJpbmcnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cHJlc3Npb25WYWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZpZWxkVHlwZSA9ICdleHByZXNzaW9uJztcbiAgICB9XG5cbiAgICByZXR1cm4gZmllbGRUeXBlO1xuICB9XG5cbiAgdmFyIHNldE9wdGlvbkxhYmVsVmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgb3B0aW9uLCBwcm9wZXJ0eSwgdmFsdWUsIGlkeCkge1xuICAgICAgdmFyIGFjdGl2aXRpRmllbGRzID0gZ2V0QWN0aXZpdGlGaWVsZHMoZWxlbWVudCwgbm9kZSk7XG4gICAgICB2YXIgZmllbGQgPSBhY3Rpdml0aUZpZWxkc1tpZHhdO1xuXG4gICAgICB2YWx1ZSA9IChmaWVsZC5uYW1lKSA/IGZpZWxkLm5hbWUgOiAnPGVtcHR5Pic7XG5cbiAgICAgIHZhciBsYWJlbCA9IGlkeCArICcgOiAnICsgdmFsdWU7XG5cbiAgICAgIG9wdGlvbi50ZXh0ID0gbGFiZWw7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgbmV3RWxlbWVudCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgdmFsdWUsIG5vZGUpIHtcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgc3RyaW5nOiAnJ1xuICAgICAgfTtcblxuICAgICAgdmFyIG5ld0ZpZWxkRWxlbTtcblxuICAgICAgaWYgKCFpbnNpZGVMaXN0ZW5lcikge1xuXG4gICAgICAgIG5ld0ZpZWxkRWxlbSA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudChBQ1RJVklUSV9GSUVMRF9FWFRFTlNJT05fRUxFTUVOVCwgcHJvcHMsIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XG4gICAgICAgIHJldHVybiBjbWRIZWxwZXIuYWRkRWxlbWVudHNUb2xpc3QoZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsICd2YWx1ZXMnLCBbIG5ld0ZpZWxkRWxlbSBdKTtcblxuICAgICAgfSBlbHNlIHtcblxuICAgICAgICB2YXIgc2VsZWN0ZWRMaXN0ZW5lciA9IGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSk7XG4gICAgICAgIG5ld0ZpZWxkRWxlbSA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudChBQ1RJVklUSV9GSUVMRF9FWFRFTlNJT05fRUxFTUVOVCwgcHJvcHMsIHNlbGVjdGVkTGlzdGVuZXIsIGJwbW5GYWN0b3J5KTtcbiAgICAgICAgcmV0dXJuIGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChlbGVtZW50LCBzZWxlY3RlZExpc3RlbmVyLCAnZmllbGRzJywgWyBuZXdGaWVsZEVsZW0gXSk7XG5cbiAgICAgIH1cblxuICAgIH07XG4gIH07XG5cbiAgdmFyIHJlbW92ZUVsZW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsIHZhbHVlLCBpZHgsIG5vZGUpIHtcbiAgICAgIHZhciBhY3Rpdml0aUZpZWxkcz0gZ2V0QWN0aXZpdGlGaWVsZHMoZWxlbWVudCwgbm9kZSk7XG4gICAgICB2YXIgZmllbGQgPSBhY3Rpdml0aUZpZWxkc1tpZHhdO1xuICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgIGlmICghaW5zaWRlTGlzdGVuZXIpIHtcbiAgICAgICAgICByZXR1cm4gZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIucmVtb3ZlRW50cnkoYnVzaW5lc3NPYmplY3QsIGVsZW1lbnQsIGZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc2VsZWN0ZWRMaXN0ZW5lciA9IGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSk7XG4gICAgICAgIHJldHVybiBjbWRIZWxwZXIucmVtb3ZlRWxlbWVudHNGcm9tTGlzdChlbGVtZW50LCBzZWxlY3RlZExpc3RlbmVyLCAnZmllbGRzJywgbnVsbCwgWyBmaWVsZCBdKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG5cbiAgdmFyIGZpZWxkRW50cnkgPSBleHRlbnNpb25FbGVtZW50c0VudHJ5KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XG4gICAgaWQgOiBpZFByZWZpeCArICdmaWVsZHMnLFxuICAgIGxhYmVsIDogdHJhbnNsYXRlKCdGaWVsZHMnKSxcbiAgICBtb2RlbFByb3BlcnR5OiAnZmllbGROYW1lJyxcbiAgICBpZEdlbmVyYXRpb246ICdmYWxzZScsXG5cbiAgICBidXNpbmVzc09iamVjdDogYnVzaW5lc3NPYmplY3QsXG5cbiAgICBjcmVhdGVFeHRlbnNpb25FbGVtZW50OiBuZXdFbGVtZW50KCksXG4gICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudDogcmVtb3ZlRWxlbWVudCgpLFxuXG4gICAgZ2V0RXh0ZW5zaW9uRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHJldHVybiBnZXRBY3Rpdml0aUZpZWxkcyhlbGVtZW50LCBub2RlKTtcbiAgICB9LFxuXG4gICAgc2V0T3B0aW9uTGFiZWxWYWx1ZTogc2V0T3B0aW9uTGFiZWxWYWx1ZSgpXG5cbiAgfSk7XG4gIGVudHJpZXMucHVzaChmaWVsZEVudHJ5KTtcblxuXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudmFsaWRhdGlvbkF3YXJlVGV4dEZpZWxkKHtcbiAgICBpZDogaWRQcmVmaXggKyAnZmllbGQtbmFtZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTmFtZScpLFxuICAgIG1vZGVsUHJvcGVydHk6ICdmaWVsZE5hbWUnLFxuXG4gICAgZ2V0UHJvcGVydHk6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHJldHVybiAoZ2V0U2VsZWN0ZWRGaWVsZChlbGVtZW50LCBub2RlKSB8fCB7fSkubmFtZTtcbiAgICB9LFxuXG4gICAgc2V0UHJvcGVydHk6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgdmFyIHNlbGVjdGVkRmllbGQgPSBnZXRTZWxlY3RlZEZpZWxkKGVsZW1lbnQsIG5vZGUpO1xuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBzZWxlY3RlZEZpZWxkLCB7IG5hbWUgOiB2YWx1ZXMuZmllbGROYW1lIH0pO1xuICAgIH0sXG5cbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZEZpZWxkKGVsZW1lbnQsIG5vZGUpO1xuXG4gICAgICB2YXIgdmFsaWRhdGlvbiA9IHt9O1xuICAgICAgaWYgKGJvKSB7XG4gICAgICAgIHZhciBuYW1lVmFsdWUgPSB2YWx1ZXMuZmllbGROYW1lO1xuXG4gICAgICAgIGlmIChuYW1lVmFsdWUpIHtcbiAgICAgICAgICBpZiAodXRpbHMuY29udGFpbnNTcGFjZShuYW1lVmFsdWUpKSB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uLmZpZWxkTmFtZSA9IHRyYW5zbGF0ZSgnTmFtZSBtdXN0IG5vdCBjb250YWluIHNwYWNlcycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9uLmZpZWxkTmFtZSA9IHRyYW5zbGF0ZSgnUGFyYW1ldGVyIG11c3QgaGF2ZSBhIG5hbWUnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsaWRhdGlvbjtcbiAgICB9LFxuXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICByZXR1cm4gIWlzU2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XG4gICAgfVxuXG4gIH0pKTtcblxuICB2YXIgZmllbGRUeXBlT3B0aW9ucyA9IFtcbiAgICB7XG4gICAgICBuYW1lOiB0cmFuc2xhdGUoJ1N0cmluZycpLFxuICAgICAgdmFsdWU6ICdzdHJpbmcnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiB0cmFuc2xhdGUoJ0V4cHJlc3Npb24nKSxcbiAgICAgIHZhbHVlOiAnZXhwcmVzc2lvbidcbiAgICB9XG4gIF07XG5cbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5zZWxlY3RCb3goe1xuICAgIGlkOiBpZFByZWZpeCArICdmaWVsZC10eXBlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUeXBlJyksXG4gICAgc2VsZWN0T3B0aW9uczogZmllbGRUeXBlT3B0aW9ucyxcbiAgICBtb2RlbFByb3BlcnR5OiAnZmllbGRUeXBlJyxcblxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWRGaWVsZChlbGVtZW50LCBub2RlKTtcblxuICAgICAgdmFyIGZpZWxkVHlwZSA9IGdldEZpZWxkVHlwZShibyk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpZWxkVHlwZTogZmllbGRUeXBlXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgdmFyIHByb3BzID0gYXNzaWduKHt9LCBERUZBVUxUX1BST1BTKTtcblxuICAgICAgdmFyIGZpZWxkVHlwZSA9IHZhbHVlcy5maWVsZFR5cGU7XG5cbiAgICAgIGlmIChmaWVsZFR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHByb3BzLnN0cmluZyA9ICcnO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZmllbGRUeXBlID09PSAnZXhwcmVzc2lvbicpIHtcbiAgICAgICAgcHJvcHMuZXhwcmVzc2lvbiA9ICcnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGdldFNlbGVjdGVkRmllbGQoZWxlbWVudCwgbm9kZSksIHByb3BzKTtcbiAgICB9LFxuXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICByZXR1cm4gIWlzU2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XG4gICAgfVxuXG4gIH0pKTtcblxuXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEJveCh7XG4gICAgaWQ6IGlkUHJlZml4ICsgJ2ZpZWxkLXZhbHVlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdWYWx1ZScpLFxuICAgIG1vZGVsUHJvcGVydHk6ICdmaWVsZFZhbHVlJyxcblxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWRGaWVsZChlbGVtZW50LCBub2RlKTtcbiAgICAgIHZhciBmaWVsZFR5cGUgPSBnZXRGaWVsZFR5cGUoYm8pO1xuXG4gICAgICB2YXIgZmllbGRWYWx1ZTtcblxuICAgICAgaWYgKGZpZWxkVHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZmllbGRWYWx1ZSA9IGJvICYmIChiby5zdHJpbmcgfHwgYm8uc3RyaW5nVmFsdWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZmllbGRUeXBlID09PSAnZXhwcmVzc2lvbicpIHtcbiAgICAgICAgZmllbGRWYWx1ZSA9IGJvICYmIGJvLmV4cHJlc3Npb247XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpZWxkVmFsdWU6IGZpZWxkVmFsdWVcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZEZpZWxkKGVsZW1lbnQsIG5vZGUpO1xuICAgICAgdmFyIGZpZWxkVHlwZSA9IGdldEZpZWxkVHlwZShibyk7XG5cbiAgICAgIHZhciBwcm9wcyA9IGFzc2lnbih7fSwgREVGQVVMVF9QUk9QUyk7XG5cbiAgICAgIHZhciBmaWVsZFZhbHVlID0gdmFsdWVzLmZpZWxkVmFsdWUgfHwgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoZmllbGRUeXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICBwcm9wcy5zdHJpbmcgPSBmaWVsZFZhbHVlO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZmllbGRUeXBlID09PSAnZXhwcmVzc2lvbicpIHtcbiAgICAgICAgcHJvcHMuZXhwcmVzc2lvbiA9IGZpZWxkVmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHByb3BzKTtcblxuICAgIH0sXG5cbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZEZpZWxkKGVsZW1lbnQsIG5vZGUpO1xuXG4gICAgICB2YXIgdmFsaWRhdGlvbiA9IHt9O1xuICAgICAgaWYgKGJvKSB7XG4gICAgICAgIGlmICghdmFsdWVzLmZpZWxkVmFsdWUpIHtcbiAgICAgICAgICB2YWxpZGF0aW9uLmZpZWxkVmFsdWUgPSB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbGlkYXRpb247XG4gICAgfSxcblxuICAgIHNob3c6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHJldHVybiBpc1NlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xuICAgIH1cblxuICB9KSk7XG5cbiAgcmV0dXJuIGVudHJpZXM7XG5cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xuXG52YXIgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcblxuICB2YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSBvcHRpb25zLmdldEJ1c2luZXNzT2JqZWN0O1xuXG4gIHZhciBoaXN0b3J5VGltZVRvTGl2ZUVudHJ5ID0gZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XG4gICAgaWQ6ICdoaXN0b3J5VGltZVRvTGl2ZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSGlzdG9yeSBUaW1lIFRvIExpdmUnKSxcbiAgICBtb2RlbFByb3BlcnR5OiAnaGlzdG9yeVRpbWVUb0xpdmUnLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICAgIHZhciBoaXN0b3J5VGltZVRvTGl2ZSA9IGJvLmdldCgnYWN0aXZpdGk6aGlzdG9yeVRpbWVUb0xpdmUnKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGlzdG9yeVRpbWVUb0xpdmU6IGhpc3RvcnlUaW1lVG9MaXZlID8gaGlzdG9yeVRpbWVUb0xpdmUgOiAnJ1xuICAgICAgfTtcbiAgICB9LFxuXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywge1xuICAgICAgICAnYWN0aXZpdGk6aGlzdG9yeVRpbWVUb0xpdmUnOiB2YWx1ZXMuaGlzdG9yeVRpbWVUb0xpdmUgfHwgdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9XG5cbiAgfSk7XG5cbiAgcmV0dXJuIFsgaGlzdG9yeVRpbWVUb0xpdmVFbnRyeSBdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxuICAgIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0V4dGVuc2lvbkVsZW1lbnRzSGVscGVyJyksXG4gICAgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyk7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XG52YXIgbWFwID0gcmVxdWlyZSgnbG9kYXNoL21hcCcpO1xuXG52YXIgREVGQVVMVF9ERUxFR0FURV9QUk9QUyA9IFsgJ2NsYXNzJywgJ2V4cHJlc3Npb24nLCAnZGVsZWdhdGVFeHByZXNzaW9uJyBdO1xuXG52YXIgREVMRUdBVEVfUFJPUFMgPSB7XG4gICdhY3Rpdml0aTpjbGFzcyc6IHVuZGVmaW5lZCxcbiAgJ2FjdGl2aXRpOmV4cHJlc3Npb24nOiB1bmRlZmluZWQsXG4gICdhY3Rpdml0aTpkZWxlZ2F0ZUV4cHJlc3Npb24nOiB1bmRlZmluZWQsXG4gICdhY3Rpdml0aTpyZXN1bHRWYXJpYWJsZSc6IHVuZGVmaW5lZFxufTtcblxudmFyIERNTl9DQVBBQkxFX1BST1BTID0ge1xuICAnYWN0aXZpdGk6ZGVjaXNpb25SZWYnOiB1bmRlZmluZWQsXG4gICdhY3Rpdml0aTpkZWNpc2lvblJlZkJpbmRpbmcnOiAnbGF0ZXN0JyxcbiAgJ2FjdGl2aXRpOmRlY2lzaW9uUmVmVmVyc2lvbic6IHVuZGVmaW5lZCxcbiAgJ2FjdGl2aXRpOm1hcERlY2lzaW9uUmVzdWx0JzogJ3Jlc3VsdExpc3QnLFxuICAnYWN0aXZpdGk6ZGVjaXNpb25SZWZUZW5hbnRJZCc6IHVuZGVmaW5lZFxufTtcblxuXG52YXIgRVhURVJOQUxfQ0FQQUJMRV9QUk9QUyA9IHtcbiAgJ2FjdGl2aXRpOnR5cGUnOiB1bmRlZmluZWQsXG4gICdhY3Rpdml0aTp0b3BpYyc6IHVuZGVmaW5lZFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XG5cbiAgdmFyIERFRkFVTFRfT1BUSU9OUyA9IFtcbiAgICB7IHZhbHVlOiAnY2xhc3MnLCBuYW1lOiB0cmFuc2xhdGUoJ0phdmEgQ2xhc3MnKSB9LFxuICAgIHsgdmFsdWU6ICdleHByZXNzaW9uJywgbmFtZTogdHJhbnNsYXRlKCdFeHByZXNzaW9uJykgfSxcbiAgICB7IHZhbHVlOiAnZGVsZWdhdGVFeHByZXNzaW9uJywgbmFtZTogdHJhbnNsYXRlKCdEZWxlZ2F0ZSBFeHByZXNzaW9uJykgfVxuICBdO1xuXG4gIHZhciBETU5fT1BUSU9OID0gW1xuICAgIHsgdmFsdWU6ICdkbW4nLCBuYW1lOiB0cmFuc2xhdGUoJ0RNTicpIH1cbiAgXTtcblxuICB2YXIgRVhURVJOQUxfT1BUSU9OID0gW1xuICAgIHsgdmFsdWU6ICdleHRlcm5hbCcsIG5hbWU6IHRyYW5zbGF0ZSgnRXh0ZXJuYWwnKSB9XG4gIF07XG5cbiAgdmFyIENPTk5FQ1RPUl9PUFRJT04gPSBbXG4gICAgeyB2YWx1ZTogJ2Nvbm5lY3RvcicsIG5hbWU6IHRyYW5zbGF0ZSgnQ29ubmVjdG9yJykgfVxuICBdO1xuXG4gIHZhciBTQ1JJUFRfT1BUSU9OID0gW1xuICAgIHsgdmFsdWU6ICdzY3JpcHQnLCBuYW1lOiB0cmFuc2xhdGUoJ1NjcmlwdCcpIH1cbiAgXTtcblxuICB2YXIgZ2V0VHlwZSA9IG9wdGlvbnMuZ2V0SW1wbGVtZW50YXRpb25UeXBlLFxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3QgPSBvcHRpb25zLmdldEJ1c2luZXNzT2JqZWN0O1xuXG4gIHZhciBoYXNEbW5TdXBwb3J0ID0gb3B0aW9ucy5oYXNEbW5TdXBwb3J0LFxuICAgICAgaGFzRXh0ZXJuYWxTdXBwb3J0ID0gb3B0aW9ucy5oYXNFeHRlcm5hbFN1cHBvcnQsXG4gICAgICBoYXNTZXJ2aWNlVGFza0xpa2VTdXBwb3J0ID0gb3B0aW9ucy5oYXNTZXJ2aWNlVGFza0xpa2VTdXBwb3J0LFxuICAgICAgaGFzU2NyaXB0U3VwcG9ydCA9IG9wdGlvbnMuaGFzU2NyaXB0U3VwcG9ydDtcblxuICB2YXIgZW50cmllcyA9IFtdO1xuXG4gIHZhciBzZWxlY3RPcHRpb25zID0gREVGQVVMVF9PUFRJT05TLmNvbmNhdChbXSk7XG5cbiAgaWYgKGhhc0RtblN1cHBvcnQpIHtcbiAgICBzZWxlY3RPcHRpb25zID0gc2VsZWN0T3B0aW9ucy5jb25jYXQoRE1OX09QVElPTik7XG4gIH1cblxuICBpZiAoaGFzRXh0ZXJuYWxTdXBwb3J0KSB7XG4gICAgc2VsZWN0T3B0aW9ucyA9IHNlbGVjdE9wdGlvbnMuY29uY2F0KEVYVEVSTkFMX09QVElPTik7XG4gIH1cblxuICBpZiAoaGFzU2VydmljZVRhc2tMaWtlU3VwcG9ydCkge1xuICAgIHNlbGVjdE9wdGlvbnMgPSBzZWxlY3RPcHRpb25zLmNvbmNhdChDT05ORUNUT1JfT1BUSU9OKTtcbiAgfVxuXG4gIGlmIChoYXNTY3JpcHRTdXBwb3J0KSB7XG4gICAgc2VsZWN0T3B0aW9ucyA9IHNlbGVjdE9wdGlvbnMuY29uY2F0KFNDUklQVF9PUFRJT04pO1xuICB9XG5cbiAgc2VsZWN0T3B0aW9ucy5wdXNoKHsgdmFsdWU6ICcnIH0pO1xuXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3Rvcnkuc2VsZWN0Qm94KHtcbiAgICBpZCA6ICdpbXBsZW1lbnRhdGlvbicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSW1wbGVtZW50YXRpb24nKSxcbiAgICBzZWxlY3RPcHRpb25zOiBzZWxlY3RPcHRpb25zLFxuICAgIG1vZGVsUHJvcGVydHk6ICdpbXBsVHlwZScsXG5cbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGltcGxUeXBlOiBnZXRUeXBlKGVsZW1lbnQpIHx8ICcnXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgICB2YXIgb2xkVHlwZSA9IGdldFR5cGUoZWxlbWVudCk7XG4gICAgICB2YXIgbmV3VHlwZSA9IHZhbHVlcy5pbXBsVHlwZTtcblxuICAgICAgdmFyIHByb3BzID0gYXNzaWduKHt9LCBERUxFR0FURV9QUk9QUyk7XG5cbiAgICAgIGlmIChERUZBVUxUX0RFTEVHQVRFX1BST1BTLmluZGV4T2YobmV3VHlwZSkgIT09IC0xKSB7XG5cbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gJyc7XG4gICAgICAgIGlmIChERUZBVUxUX0RFTEVHQVRFX1BST1BTLmluZGV4T2Yob2xkVHlwZSkgIT09IC0xKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBiby5nZXQoJ2FjdGl2aXRpOicgKyBvbGRUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICBwcm9wc1snYWN0aXZpdGk6JyArIG5ld1R5cGVdID0gbmV3VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNEbW5TdXBwb3J0KSB7XG4gICAgICAgIHByb3BzID0gYXNzaWduKHByb3BzLCBETU5fQ0FQQUJMRV9QUk9QUyk7XG4gICAgICAgIGlmIChuZXdUeXBlID09PSAnZG1uJykge1xuICAgICAgICAgIHByb3BzWydhY3Rpdml0aTpkZWNpc2lvblJlZiddID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGhhc0V4dGVybmFsU3VwcG9ydCkge1xuICAgICAgICBwcm9wcyA9IGFzc2lnbihwcm9wcywgRVhURVJOQUxfQ0FQQUJMRV9QUk9QUyk7XG4gICAgICAgIGlmIChuZXdUeXBlID09PSAnZXh0ZXJuYWwnKSB7XG4gICAgICAgICAgcHJvcHNbJ2FjdGl2aXRpOnR5cGUnXSA9ICdleHRlcm5hbCc7XG4gICAgICAgICAgcHJvcHNbJ2FjdGl2aXRpOnRvcGljJ10gPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzU2NyaXB0U3VwcG9ydCkge1xuICAgICAgICBwcm9wc1snYWN0aXZpdGk6c2NyaXB0J10gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKG5ld1R5cGUgPT09ICdzY3JpcHQnKSB7XG4gICAgICAgICAgcHJvcHNbJ2FjdGl2aXRpOnNjcmlwdCddID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdhY3Rpdml0aTpTY3JpcHQnLCB7fSwgYm8sIGJwbW5GYWN0b3J5KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgY29tbWFuZHMgPSBbXTtcbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLCBwcm9wcykpO1xuXG4gICAgICBpZiAoaGFzU2VydmljZVRhc2tMaWtlU3VwcG9ydCkge1xuICAgICAgICB2YXIgY29ubmVjdG9ycyA9IGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyLmdldEV4dGVuc2lvbkVsZW1lbnRzKGJvLCAnYWN0aXZpdGk6Q29ubmVjdG9yJyk7XG4gICAgICAgIGNvbW1hbmRzLnB1c2gobWFwKGNvbm5lY3RvcnMsIGZ1bmN0aW9uKGNvbm5lY3Rvcikge1xuICAgICAgICAgIHJldHVybiBleHRlbnNpb25FbGVtZW50c0hlbHBlci5yZW1vdmVFbnRyeShibywgZWxlbWVudCwgY29ubmVjdG9yKTtcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGlmIChuZXdUeXBlID09PSAnY29ubmVjdG9yJykge1xuICAgICAgICAgIHZhciBleHRlbnNpb25FbGVtZW50cyA9IGJvLmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcbiAgICAgICAgICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgICAgICAgICBleHRlbnNpb25FbGVtZW50cyA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHsgdmFsdWVzOiBbXSB9LCBibywgYnBtbkZhY3RvcnkpO1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHsgZXh0ZW5zaW9uRWxlbWVudHM6IGV4dGVuc2lvbkVsZW1lbnRzIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGNvbm5lY3RvciA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6Q29ubmVjdG9yJywge30sIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XG4gICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIuYWRkQW5kUmVtb3ZlRWxlbWVudHNGcm9tTGlzdChcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICAgICd2YWx1ZXMnLFxuICAgICAgICAgICAgJ2V4dGVuc2lvbkVsZW1lbnRzJyxcbiAgICAgICAgICAgIFsgY29ubmVjdG9yIF0sXG4gICAgICAgICAgICBbXVxuICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21tYW5kcztcblxuICAgIH1cbiAgfSkpO1xuXG4gIHJldHVybiBlbnRyaWVzO1xuXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xuXG52YXIgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyksXG4gICAgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKSxcbiAgICBpbnB1dE91dHB1dEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9JbnB1dE91dHB1dEhlbHBlcicpLFxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcblxudmFyIGV4dGVuc2lvbkVsZW1lbnRzRW50cnkgPSByZXF1aXJlKCcuL0V4dGVuc2lvbkVsZW1lbnRzJyk7XG5cblxuZnVuY3Rpb24gZ2V0SW5wdXRPdXRwdXQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSB7XG4gIHJldHVybiBpbnB1dE91dHB1dEhlbHBlci5nZXRJbnB1dE91dHB1dChlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpO1xufVxuXG5mdW5jdGlvbiBnZXRDb25uZWN0b3IoZWxlbWVudCkge1xuICByZXR1cm4gaW5wdXRPdXRwdXRIZWxwZXIuZ2V0Q29ubmVjdG9yKGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBnZXRJbnB1dFBhcmFtZXRlcnMoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSB7XG4gIHJldHVybiBpbnB1dE91dHB1dEhlbHBlci5nZXRJbnB1dFBhcmFtZXRlcnMoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKTtcbn1cblxuZnVuY3Rpb24gZ2V0T3V0cHV0UGFyYW1ldGVycyhlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpIHtcbiAgcmV0dXJuIGlucHV0T3V0cHV0SGVscGVyLmdldE91dHB1dFBhcmFtZXRlcnMoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5wdXRQYXJhbWV0ZXIoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yLCBpZHgpIHtcbiAgcmV0dXJuIGlucHV0T3V0cHV0SGVscGVyLmdldElucHV0UGFyYW1ldGVyKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvciwgaWR4KTtcbn1cblxuZnVuY3Rpb24gZ2V0T3V0cHV0UGFyYW1ldGVyKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvciwgaWR4KSB7XG4gIHJldHVybiBpbnB1dE91dHB1dEhlbHBlci5nZXRPdXRwdXRQYXJhbWV0ZXIoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yLCBpZHgpO1xufVxuXG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgcGFyZW50LCBmYWN0b3J5LCBwcm9wZXJ0aWVzKSB7XG4gIHJldHVybiBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQodHlwZSwgcHJvcGVydGllcywgcGFyZW50LCBmYWN0b3J5KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW5wdXRPdXRwdXQocGFyZW50LCBicG1uRmFjdG9yeSwgcHJvcGVydGllcykge1xuICByZXR1cm4gY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6SW5wdXRPdXRwdXQnLCBwYXJlbnQsIGJwbW5GYWN0b3J5LCBwcm9wZXJ0aWVzKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGFyYW1ldGVyKHR5cGUsIHBhcmVudCwgYnBtbkZhY3RvcnksIHByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQodHlwZSwgcGFyZW50LCBicG1uRmFjdG9yeSwgcHJvcGVydGllcyk7XG59XG5cblxuZnVuY3Rpb24gZW5zdXJlSW5wdXRPdXRwdXRTdXBwb3J0ZWQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSB7XG4gIHJldHVybiBpbnB1dE91dHB1dEhlbHBlci5pc0lucHV0T3V0cHV0U3VwcG9ydGVkKGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcik7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZU91dHBhcmFtZXRlclN1cHBvcnRlZChlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpIHtcbiAgcmV0dXJuIGlucHV0T3V0cHV0SGVscGVyLmFyZU91dHB1dFBhcmFtZXRlcnNTdXBwb3J0ZWQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XG5cbiAgdmFyIFRZUEVfTEFCRUwgPSB7XG4gICAgJ2FjdGl2aXRpOk1hcCc6IHRyYW5zbGF0ZSgnTWFwJyksXG4gICAgJ2FjdGl2aXRpOkxpc3QnOiB0cmFuc2xhdGUoJ0xpc3QnKSxcbiAgICAnYWN0aXZpdGk6U2NyaXB0JzogdHJhbnNsYXRlKCdTY3JpcHQnKVxuICB9O1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBpbnNpZGVDb25uZWN0b3IgPSAhIW9wdGlvbnMuaW5zaWRlQ29ubmVjdG9yLFxuICAgICAgaWRQcmVmaXggPSBvcHRpb25zLmlkUHJlZml4IHx8ICcnO1xuXG4gIHZhciBnZXRTZWxlY3RlZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICB2YXIgc2VsZWN0aW9uID0gKGlucHV0RW50cnkgJiYgaW5wdXRFbnRyeS5nZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKSkgfHwgeyBpZHg6IC0xIH07XG5cbiAgICB2YXIgcGFyYW1ldGVyID0gZ2V0SW5wdXRQYXJhbWV0ZXIoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yLCBzZWxlY3Rpb24uaWR4KTtcbiAgICBpZiAoIXBhcmFtZXRlciAmJiBvdXRwdXRFbnRyeSkge1xuICAgICAgc2VsZWN0aW9uID0gb3V0cHV0RW50cnkuZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XG4gICAgICBwYXJhbWV0ZXIgPSBnZXRPdXRwdXRQYXJhbWV0ZXIoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yLCBzZWxlY3Rpb24uaWR4KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgfTtcblxuICB2YXIgcmVzdWx0ID0ge1xuICAgIGdldFNlbGVjdGVkUGFyYW1ldGVyOiBnZXRTZWxlY3RlZFxuICB9O1xuXG4gIHZhciBlbnRyaWVzID0gcmVzdWx0LmVudHJpZXMgPSBbXTtcblxuICBpZiAoIWVuc3VyZUlucHV0T3V0cHV0U3VwcG9ydGVkKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBuZXdFbGVtZW50ID0gZnVuY3Rpb24odHlwZSwgcHJvcCwgZmFjdG9yeSkge1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCB2YWx1ZSkge1xuICAgICAgdmFyIGNvbW1hbmRzID0gW107XG5cbiAgICAgIHZhciBpbnB1dE91dHB1dCA9IGdldElucHV0T3V0cHV0KGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcik7XG4gICAgICBpZiAoIWlucHV0T3V0cHV0KSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSAhaW5zaWRlQ29ubmVjdG9yID8gZXh0ZW5zaW9uRWxlbWVudHMgOiBnZXRDb25uZWN0b3IoZWxlbWVudCk7XG4gICAgICAgIGlucHV0T3V0cHV0ID0gY3JlYXRlSW5wdXRPdXRwdXQocGFyZW50LCBicG1uRmFjdG9yeSwge1xuICAgICAgICAgIGlucHV0UGFyYW1ldGVyczogW10sXG4gICAgICAgICAgb3V0cHV0UGFyYW1ldGVyczogW11cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFpbnNpZGVDb25uZWN0b3IpIHtcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5hZGRBbmRSZW1vdmVFbGVtZW50c0Zyb21MaXN0KFxuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgICAgICAgJ3ZhbHVlcycsXG4gICAgICAgICAgICAnZXh0ZW5zaW9uRWxlbWVudHMnLFxuICAgICAgICAgICAgWyBpbnB1dE91dHB1dCBdLFxuICAgICAgICAgICAgW11cbiAgICAgICAgICApKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBwYXJlbnQsIHsgaW5wdXRPdXRwdXQ6IGlucHV0T3V0cHV0IH0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgbmV3RWxlbSA9IGNyZWF0ZVBhcmFtZXRlcih0eXBlLCBpbnB1dE91dHB1dCwgYnBtbkZhY3RvcnksIHsgbmFtZTogdmFsdWUgfSk7XG4gICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChlbGVtZW50LCBpbnB1dE91dHB1dCwgcHJvcCwgWyBuZXdFbGVtIF0pKTtcblxuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xuICAgIH07XG4gIH07XG5cbiAgdmFyIHJlbW92ZUVsZW1lbnQgPSBmdW5jdGlvbihnZXR0ZXIsIHByb3AsIG90aGVyUHJvcCkge1xuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgdmFsdWUsIGlkeCkge1xuICAgICAgdmFyIGlucHV0T3V0cHV0ID0gZ2V0SW5wdXRPdXRwdXQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKTtcbiAgICAgIHZhciBwYXJhbWV0ZXIgPSBnZXR0ZXIoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yLCBpZHgpO1xuXG4gICAgICB2YXIgY29tbWFuZHMgPSBbXTtcbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoZWxlbWVudCwgaW5wdXRPdXRwdXQsIHByb3AsIG51bGwsIFsgcGFyYW1ldGVyIF0pKTtcblxuICAgICAgdmFyIGZpcnN0TGVuZ3RoID0gaW5wdXRPdXRwdXQuZ2V0KHByb3ApLmxlbmd0aC0xO1xuICAgICAgdmFyIHNlY29uZExlbmd0aCA9IChpbnB1dE91dHB1dC5nZXQob3RoZXJQcm9wKSB8fCBbXSkubGVuZ3RoO1xuXG4gICAgICBpZiAoIWZpcnN0TGVuZ3RoICYmICFzZWNvbmRMZW5ndGgpIHtcblxuICAgICAgICBpZiAoIWluc2lkZUNvbm5lY3Rvcikge1xuICAgICAgICAgIGNvbW1hbmRzLnB1c2goZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIucmVtb3ZlRW50cnkoZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksIGVsZW1lbnQsIGlucHV0T3V0cHV0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGNvbm5lY3RvciA9IGdldENvbm5lY3RvcihlbGVtZW50KTtcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBjb25uZWN0b3IsIHsgaW5wdXRPdXRwdXQ6IHVuZGVmaW5lZCB9KSk7XG4gICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tbWFuZHM7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgc2V0T3B0aW9uTGFiZWxWYWx1ZSA9IGZ1bmN0aW9uKGdldHRlcikge1xuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBvcHRpb24sIHByb3BlcnR5LCB2YWx1ZSwgaWR4KSB7XG4gICAgICB2YXIgcGFyYW1ldGVyID0gZ2V0dGVyKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvciwgaWR4KTtcblxuICAgICAgdmFyIHN1ZmZpeCA9ICdUZXh0JztcblxuICAgICAgdmFyIGRlZmluaXRpb24gPSBwYXJhbWV0ZXIuZ2V0KCdkZWZpbml0aW9uJyk7XG4gICAgICBpZiAodHlwZW9mIGRlZmluaXRpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHZhciB0eXBlID0gZGVmaW5pdGlvbi4kdHlwZTtcbiAgICAgICAgc3VmZml4ID0gVFlQRV9MQUJFTFt0eXBlXTtcbiAgICAgIH1cblxuICAgICAgb3B0aW9uLnRleHQgPSAodmFsdWUgfHwgJycpICsgJyA6ICcgKyBzdWZmaXg7XG4gICAgfTtcbiAgfTtcblxuXG4gIC8vIGlucHV0IHBhcmFtZXRlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgdmFyIGlucHV0RW50cnkgPSBleHRlbnNpb25FbGVtZW50c0VudHJ5KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XG4gICAgaWQ6IGlkUHJlZml4ICsgJ2lucHV0cycsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSW5wdXQgUGFyYW1ldGVycycpLFxuICAgIG1vZGVsUHJvcGVydHk6ICduYW1lJyxcbiAgICBwcmVmaXg6ICdJbnB1dCcsXG4gICAgcmVzaXphYmxlOiB0cnVlLFxuXG4gICAgY3JlYXRlRXh0ZW5zaW9uRWxlbWVudDogbmV3RWxlbWVudCgnYWN0aXZpdGk6SW5wdXRQYXJhbWV0ZXInLCAnaW5wdXRQYXJhbWV0ZXJzJyksXG4gICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudDogcmVtb3ZlRWxlbWVudChnZXRJbnB1dFBhcmFtZXRlciwgJ2lucHV0UGFyYW1ldGVycycsICdvdXRwdXRQYXJhbWV0ZXJzJyksXG5cbiAgICBnZXRFeHRlbnNpb25FbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGdldElucHV0UGFyYW1ldGVycyhlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpO1xuICAgIH0sXG5cbiAgICBvblNlbGVjdGlvbkNoYW5nZTogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgZXZlbnQsIHNjb3BlKSB7XG4gICAgICBvdXRwdXRFbnRyeSAmJiBvdXRwdXRFbnRyeS5kZXNlbGVjdChlbGVtZW50LCBub2RlKTtcbiAgICB9LFxuXG4gICAgc2V0T3B0aW9uTGFiZWxWYWx1ZTogc2V0T3B0aW9uTGFiZWxWYWx1ZShnZXRJbnB1dFBhcmFtZXRlcilcblxuICB9KTtcbiAgZW50cmllcy5wdXNoKGlucHV0RW50cnkpO1xuXG5cbiAgLy8gb3V0cHV0IHBhcmFtZXRlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGlmIChlbnN1cmVPdXRwYXJhbWV0ZXJTdXBwb3J0ZWQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSkge1xuICAgIHZhciBvdXRwdXRFbnRyeSA9IGV4dGVuc2lvbkVsZW1lbnRzRW50cnkoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcbiAgICAgIGlkOiBpZFByZWZpeCArICdvdXRwdXRzJyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ091dHB1dCBQYXJhbWV0ZXJzJyksXG4gICAgICBtb2RlbFByb3BlcnR5OiAnbmFtZScsXG4gICAgICBwcmVmaXg6ICdPdXRwdXQnLFxuICAgICAgcmVzaXphYmxlOiB0cnVlLFxuXG4gICAgICBjcmVhdGVFeHRlbnNpb25FbGVtZW50OiBuZXdFbGVtZW50KCdhY3Rpdml0aTpPdXRwdXRQYXJhbWV0ZXInLCAnb3V0cHV0UGFyYW1ldGVycycpLFxuICAgICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudDogcmVtb3ZlRWxlbWVudChnZXRPdXRwdXRQYXJhbWV0ZXIsICdvdXRwdXRQYXJhbWV0ZXJzJywgJ2lucHV0UGFyYW1ldGVycycpLFxuXG4gICAgICBnZXRFeHRlbnNpb25FbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZ2V0T3V0cHV0UGFyYW1ldGVycyhlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpO1xuICAgICAgfSxcblxuICAgICAgb25TZWxlY3Rpb25DaGFuZ2U6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGV2ZW50LCBzY29wZSkge1xuICAgICAgICBpbnB1dEVudHJ5LmRlc2VsZWN0KGVsZW1lbnQsIG5vZGUpO1xuICAgICAgfSxcblxuICAgICAgc2V0T3B0aW9uTGFiZWxWYWx1ZTogc2V0T3B0aW9uTGFiZWxWYWx1ZShnZXRPdXRwdXRQYXJhbWV0ZXIpXG5cbiAgICB9KTtcbiAgICBlbnRyaWVzLnB1c2gob3V0cHV0RW50cnkpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcblxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcztcblxudmFyIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpLFxuICAgIGlucHV0T3V0cHV0SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0lucHV0T3V0cHV0SGVscGVyJyksXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vVXRpbHMnKTtcblxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXG4gICAgc2NyaXB0SW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL1NjcmlwdCcpO1xuXG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgcGFyZW50LCBmYWN0b3J5LCBwcm9wZXJ0aWVzKSB7XG4gIHJldHVybiBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQodHlwZSwgcHJvcGVydGllcywgcGFyZW50LCBmYWN0b3J5KTtcbn1cblxuZnVuY3Rpb24gaXNTY3JpcHQoZWxlbSkge1xuICByZXR1cm4gaXMoZWxlbSwgJ2FjdGl2aXRpOlNjcmlwdCcpO1xufVxuXG5mdW5jdGlvbiBpc0xpc3QoZWxlbSkge1xuICByZXR1cm4gaXMoZWxlbSwgJ2FjdGl2aXRpOkxpc3QnKTtcbn1cblxuZnVuY3Rpb24gaXNNYXAoZWxlbSkge1xuICByZXR1cm4gaXMoZWxlbSwgJ2FjdGl2aXRpOk1hcCcpO1xufVxuXG5mdW5jdGlvbiBlbnN1cmVJbnB1dE91dHB1dFN1cHBvcnRlZChlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpIHtcbiAgcmV0dXJuIGlucHV0T3V0cHV0SGVscGVyLmlzSW5wdXRPdXRwdXRTdXBwb3J0ZWQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XG5cbiAgdmFyIHR5cGVJbmZvID0ge1xuICAgICdhY3Rpdml0aTpNYXAnOiB7XG4gICAgICB2YWx1ZTogJ21hcCcsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdNYXAnKVxuICAgIH0sXG4gICAgJ2FjdGl2aXRpOkxpc3QnOiB7XG4gICAgICB2YWx1ZTogJ2xpc3QnLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnTGlzdCcpXG4gICAgfSxcbiAgICAnYWN0aXZpdGk6U2NyaXB0Jzoge1xuICAgICAgdmFsdWU6ICdzY3JpcHQnLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnU2NyaXB0JylcbiAgICB9XG4gIH07XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIGluc2lkZUNvbm5lY3RvciA9ICEhb3B0aW9ucy5pbnNpZGVDb25uZWN0b3IsXG4gICAgICBpZFByZWZpeCA9IG9wdGlvbnMuaWRQcmVmaXggfHwgJyc7XG5cbiAgdmFyIGdldFNlbGVjdGVkID0gb3B0aW9ucy5nZXRTZWxlY3RlZFBhcmFtZXRlcjtcblxuICBpZiAoIWVuc3VyZUlucHV0T3V0cHV0U3VwcG9ydGVkKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvcikpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgZW50cmllcyA9IFtdO1xuXG4gIHZhciBpc1NlbGVjdGVkID0gZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcbiAgfTtcblxuXG4gIC8vIHBhcmFtZXRlciBuYW1lIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS52YWxpZGF0aW9uQXdhcmVUZXh0RmllbGQoe1xuICAgIGlkOiBpZFByZWZpeCArICdwYXJhbWV0ZXJOYW1lJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdOYW1lJyksXG4gICAgbW9kZWxQcm9wZXJ0eTogJ25hbWUnLFxuXG4gICAgZ2V0UHJvcGVydHk6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHJldHVybiAoZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSkgfHwge30pLm5hbWU7XG4gICAgfSxcblxuICAgIHNldFByb3BlcnR5OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcbiAgICAgIHZhciBwYXJhbSA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBwYXJhbSwgdmFsdWVzKTtcbiAgICB9LFxuXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XG5cbiAgICAgIHZhciB2YWxpZGF0aW9uID0ge307XG4gICAgICBpZiAoYm8pIHtcbiAgICAgICAgdmFyIG5hbWVWYWx1ZSA9IHZhbHVlcy5uYW1lO1xuXG4gICAgICAgIGlmIChuYW1lVmFsdWUpIHtcbiAgICAgICAgICBpZiAodXRpbHMuY29udGFpbnNTcGFjZShuYW1lVmFsdWUpKSB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uLm5hbWUgPSB0cmFuc2xhdGUoJ05hbWUgbXVzdCBub3QgY29udGFpbiBzcGFjZXMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbi5uYW1lID0gdHJhbnNsYXRlKCdQYXJhbWV0ZXIgbXVzdCBoYXZlIGEgbmFtZScpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uO1xuICAgIH0sXG5cbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHJldHVybiAhaXNTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcbiAgICB9XG4gIH0pKTtcblxuXG4gIC8vIHBhcmFtZXRlciB0eXBlIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIHZhciBzZWxlY3RPcHRpb25zID0gW1xuICAgIHsgdmFsdWU6ICd0ZXh0JywgbmFtZTogdHJhbnNsYXRlKCdUZXh0JykgfSxcbiAgICB7IHZhbHVlOiAnc2NyaXB0JywgbmFtZTogdHJhbnNsYXRlKCdTY3JpcHQnKSB9LFxuICAgIHsgdmFsdWU6ICdsaXN0JywgbmFtZTogdHJhbnNsYXRlKCdMaXN0JykgfSxcbiAgICB7IHZhbHVlOiAnbWFwJywgbmFtZTogdHJhbnNsYXRlKCdNYXAnKSB9XG4gIF07XG5cbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5zZWxlY3RCb3goe1xuICAgIGlkIDogaWRQcmVmaXggKyAncGFyYW1ldGVyVHlwZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVHlwZScpLFxuICAgIHNlbGVjdE9wdGlvbnM6IHNlbGVjdE9wdGlvbnMsXG4gICAgbW9kZWxQcm9wZXJ0eTogJ3BhcmFtZXRlclR5cGUnLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcblxuICAgICAgdmFyIHBhcmFtZXRlclR5cGUgPSAndGV4dCc7XG5cbiAgICAgIGlmICh0eXBlb2YgYm8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHZhciBkZWZpbml0aW9uID0gYm8uZ2V0KCdkZWZpbml0aW9uJyk7XG4gICAgICAgIGlmICh0eXBlb2YgZGVmaW5pdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB2YXIgdHlwZSA9IGRlZmluaXRpb24uJHR5cGU7XG4gICAgICAgICAgcGFyYW1ldGVyVHlwZSA9IHR5cGVJbmZvW3R5cGVdLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhcmFtZXRlclR5cGU6IHBhcmFtZXRlclR5cGVcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcblxuICAgICAgdmFyIHByb3BlcnRpZXMgPSB7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRlZmluaXRpb246IHVuZGVmaW5lZFxuICAgICAgfTtcblxuICAgICAgdmFyIGNyZWF0ZVBhcmFtZXRlclR5cGVFbGVtID0gZnVuY3Rpb24odHlwZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudCh0eXBlLCBibywgYnBtbkZhY3RvcnkpO1xuICAgICAgfTtcblxuICAgICAgdmFyIHBhcmFtZXRlclR5cGUgPSB2YWx1ZXMucGFyYW1ldGVyVHlwZTtcblxuICAgICAgaWYgKHBhcmFtZXRlclR5cGUgPT09ICdzY3JpcHQnKSB7XG4gICAgICAgIHByb3BlcnRpZXMuZGVmaW5pdGlvbiA9IGNyZWF0ZVBhcmFtZXRlclR5cGVFbGVtKCdhY3Rpdml0aTpTY3JpcHQnKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHBhcmFtZXRlclR5cGUgPT09ICdsaXN0Jykge1xuICAgICAgICBwcm9wZXJ0aWVzLmRlZmluaXRpb24gPSBjcmVhdGVQYXJhbWV0ZXJUeXBlRWxlbSgnYWN0aXZpdGk6TGlzdCcpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAocGFyYW1ldGVyVHlwZSA9PT0gJ21hcCcpIHtcbiAgICAgICAgcHJvcGVydGllcy5kZWZpbml0aW9uID0gY3JlYXRlUGFyYW1ldGVyVHlwZUVsZW0oJ2FjdGl2aXRpOk1hcCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLCBwcm9wZXJ0aWVzKTtcbiAgICB9LFxuXG4gICAgc2hvdzogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgcmV0dXJuIGlzU2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XG4gICAgfVxuXG4gIH0pKTtcblxuXG4gIC8vIHBhcmFtZXRlciB2YWx1ZSAodHlwZSA9IHRleHQpIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRCb3goe1xuICAgIGlkIDogaWRQcmVmaXggKyAncGFyYW1ldGVyVHlwZS10ZXh0JyxcbiAgICBsYWJlbCA6IHRyYW5zbGF0ZSgnVmFsdWUnKSxcbiAgICBtb2RlbFByb3BlcnR5OiAndmFsdWUnLFxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IChnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKSB8fCB7fSkudmFsdWVcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgICB2YXIgcGFyYW0gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcbiAgICAgIHZhbHVlcy52YWx1ZSA9IHZhbHVlcy52YWx1ZSB8fCB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHBhcmFtLCB2YWx1ZXMpO1xuICAgIH0sXG5cbiAgICBzaG93OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcbiAgICAgIHJldHVybiBibyAmJiAhYm8uZGVmaW5pdGlvbjtcbiAgICB9XG5cbiAgfSkpO1xuXG5cbiAgLy8gcGFyYW1ldGVyIHZhbHVlICh0eXBlID0gc2NyaXB0KSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIHZhciBzY3JpcHQgPSBzY3JpcHRJbXBsZW1lbnRhdGlvbignc2NyaXB0Rm9ybWF0JywgJ3ZhbHVlJywgdHJ1ZSwgdHJhbnNsYXRlKTtcbiAgZW50cmllcy5wdXNoKHtcbiAgICBpZDogaWRQcmVmaXggKyAncGFyYW1ldGVyVHlwZS1zY3JpcHQnLFxuICAgIGh0bWw6ICc8ZGl2IGRhdGEtc2hvdz1cImlzU2NyaXB0XCI+JyArXG4gICAgICAgICAgICBzY3JpcHQudGVtcGxhdGUgK1xuICAgICAgICAgICc8L2Rpdj4nLFxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XG4gICAgICByZXR1cm4gYm8gJiYgaXNTY3JpcHQoYm8uZGVmaW5pdGlvbikgPyBzY3JpcHQuZ2V0KGVsZW1lbnQsIGJvLmRlZmluaXRpb24pIDoge307XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcbiAgICAgIHZhciB1cGRhdGUgPSBzY3JpcHQuc2V0KGVsZW1lbnQsIHZhbHVlcyk7XG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLmRlZmluaXRpb24sIHVwZGF0ZSk7XG4gICAgfSxcblxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xuICAgICAgcmV0dXJuIGJvICYmIGlzU2NyaXB0KGJvLmRlZmluaXRpb24pID8gc2NyaXB0LnZhbGlkYXRlKGVsZW1lbnQsIGJvLmRlZmluaXRpb24pIDoge307XG4gICAgfSxcblxuICAgIGlzU2NyaXB0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcbiAgICAgIHJldHVybiBibyAmJiBpc1NjcmlwdChiby5kZWZpbml0aW9uKTtcbiAgICB9LFxuXG4gICAgc2NyaXB0OiBzY3JpcHRcblxuICB9KTtcblxuXG4gIC8vIHBhcmFtZXRlciB2YWx1ZSAodHlwZSA9IGxpc3QpIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRhYmxlKHtcbiAgICBpZDogaWRQcmVmaXggKyAncGFyYW1ldGVyVHlwZS1saXN0JyxcbiAgICBtb2RlbFByb3BlcnRpZXM6IFsgJ3ZhbHVlJyBdLFxuICAgIGxhYmVsczogWyB0cmFuc2xhdGUoJ1ZhbHVlJykgXSxcbiAgICBhZGRMYWJlbDogdHJhbnNsYXRlKCdBZGQgVmFsdWUnKSxcblxuICAgIGdldEVsZW1lbnRzOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcblxuICAgICAgaWYgKGJvICYmIGlzTGlzdChiby5kZWZpbml0aW9uKSkge1xuICAgICAgICByZXR1cm4gYm8uZGVmaW5pdGlvbi5pdGVtcztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0sXG5cbiAgICB1cGRhdGVFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUsIGlkeCkge1xuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XG4gICAgICB2YXIgaXRlbSA9IGJvLmRlZmluaXRpb24uaXRlbXNbaWR4XTtcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgaXRlbSwgdmFsdWVzKTtcbiAgICB9LFxuXG4gICAgYWRkRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XG4gICAgICB2YXIgbmV3VmFsdWUgPSBjcmVhdGVFbGVtZW50KCdhY3Rpdml0aTpWYWx1ZScsIGJvLmRlZmluaXRpb24sIGJwbW5GYWN0b3J5LCB7IHZhbHVlOiB1bmRlZmluZWQgfSk7XG4gICAgICByZXR1cm4gY21kSGVscGVyLmFkZEVsZW1lbnRzVG9saXN0KGVsZW1lbnQsIGJvLmRlZmluaXRpb24sICdpdGVtcycsIFsgbmV3VmFsdWUgXSk7XG4gICAgfSxcblxuICAgIHJlbW92ZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGlkeCkge1xuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XG4gICAgICByZXR1cm4gY21kSGVscGVyLnJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoZWxlbWVudCwgYm8uZGVmaW5pdGlvbiwgJ2l0ZW1zJywgbnVsbCwgWyBiby5kZWZpbml0aW9uLml0ZW1zW2lkeF0gXSk7XG4gICAgfSxcblxuICAgIGVkaXRhYmxlOiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBwcm9wLCBpZHgpIHtcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xuICAgICAgdmFyIGl0ZW0gPSBiby5kZWZpbml0aW9uLml0ZW1zW2lkeF07XG4gICAgICByZXR1cm4gIWlzTWFwKGl0ZW0pICYmICFpc0xpc3QoaXRlbSkgJiYgIWlzU2NyaXB0KGl0ZW0pO1xuICAgIH0sXG5cbiAgICBzZXRDb250cm9sVmFsdWU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGlucHV0LCBwcm9wLCB2YWx1ZSwgaWR4KSB7XG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcbiAgICAgIHZhciBpdGVtID0gYm8uZGVmaW5pdGlvbi5pdGVtc1tpZHhdO1xuXG4gICAgICBpZiAoIWlzTWFwKGl0ZW0pICYmICFpc0xpc3QoaXRlbSkgJiYgIWlzU2NyaXB0KGl0ZW0pKSB7XG4gICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnB1dC52YWx1ZSA9IHR5cGVJbmZvW2l0ZW0uJHR5cGVdLmxhYmVsO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG93OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcbiAgICAgIHJldHVybiBibyAmJiBiby5kZWZpbml0aW9uICYmIGlzTGlzdChiby5kZWZpbml0aW9uKTtcbiAgICB9XG5cbiAgfSkpO1xuXG5cbiAgLy8gcGFyYW1ldGVyIHZhbHVlICh0eXBlID0gbWFwKSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50YWJsZSh7XG4gICAgaWQ6IGlkUHJlZml4ICsgJ3BhcmFtZXRlclR5cGUtbWFwJyxcbiAgICBtb2RlbFByb3BlcnRpZXM6IFsgJ2tleScsICd2YWx1ZScgXSxcbiAgICBsYWJlbHM6IFsgdHJhbnNsYXRlKCdLZXknKSwgdHJhbnNsYXRlKCdWYWx1ZScpIF0sXG4gICAgYWRkTGFiZWw6IHRyYW5zbGF0ZSgnQWRkIEVudHJ5JyksXG5cbiAgICBnZXRFbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XG5cbiAgICAgIGlmIChibyAmJiBpc01hcChiby5kZWZpbml0aW9uKSkge1xuICAgICAgICByZXR1cm4gYm8uZGVmaW5pdGlvbi5lbnRyaWVzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW107XG4gICAgfSxcblxuICAgIHVwZGF0ZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSwgaWR4KSB7XG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcbiAgICAgIHZhciBlbnRyeSA9IGJvLmRlZmluaXRpb24uZW50cmllc1tpZHhdO1xuXG4gICAgICBpZiAoaXNNYXAoZW50cnkuZGVmaW5pdGlvbikgfHwgaXNMaXN0KGVudHJ5LmRlZmluaXRpb24pIHx8IGlzU2NyaXB0KGVudHJ5LmRlZmluaXRpb24pKSB7XG4gICAgICAgIHZhbHVlcyA9IHtcbiAgICAgICAgICBrZXk6IHZhbHVlcy5rZXlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBlbnRyeSwgdmFsdWVzKTtcbiAgICB9LFxuXG4gICAgYWRkRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XG4gICAgICB2YXIgbmV3RW50cnkgPSBjcmVhdGVFbGVtZW50KCdhY3Rpdml0aTpFbnRyeScsIGJvLmRlZmluaXRpb24sIGJwbW5GYWN0b3J5LCB7IGtleTogdW5kZWZpbmVkLCB2YWx1ZTogdW5kZWZpbmVkIH0pO1xuICAgICAgcmV0dXJuIGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChlbGVtZW50LCBiby5kZWZpbml0aW9uLCAnZW50cmllcycsIFsgbmV3RW50cnkgXSk7XG4gICAgfSxcblxuICAgIHJlbW92ZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGlkeCkge1xuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XG4gICAgICByZXR1cm4gY21kSGVscGVyLnJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoZWxlbWVudCwgYm8uZGVmaW5pdGlvbiwgJ2VudHJpZXMnLCBudWxsLCBbIGJvLmRlZmluaXRpb24uZW50cmllc1tpZHhdIF0pO1xuICAgIH0sXG5cbiAgICBlZGl0YWJsZTogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgcHJvcCwgaWR4KSB7XG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcbiAgICAgIHZhciBlbnRyeSA9IGJvLmRlZmluaXRpb24uZW50cmllc1tpZHhdO1xuICAgICAgcmV0dXJuIHByb3AgPT09ICdrZXknIHx8ICghaXNNYXAoZW50cnkuZGVmaW5pdGlvbikgJiYgIWlzTGlzdChlbnRyeS5kZWZpbml0aW9uKSAmJiAhaXNTY3JpcHQoZW50cnkuZGVmaW5pdGlvbikpO1xuICAgIH0sXG5cbiAgICBzZXRDb250cm9sVmFsdWU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGlucHV0LCBwcm9wLCB2YWx1ZSwgaWR4KSB7XG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcbiAgICAgIHZhciBlbnRyeSA9IGJvLmRlZmluaXRpb24uZW50cmllc1tpZHhdO1xuXG4gICAgICBpZiAocHJvcCA9PT0gJ2tleScgfHwgKCFpc01hcChlbnRyeS5kZWZpbml0aW9uKSAmJiAhaXNMaXN0KGVudHJ5LmRlZmluaXRpb24pICYmICFpc1NjcmlwdChlbnRyeS5kZWZpbml0aW9uKSkpIHtcbiAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlucHV0LnZhbHVlID0gdHlwZUluZm9bZW50cnkuZGVmaW5pdGlvbi4kdHlwZV0ubGFiZWw7XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3c6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xuICAgICAgcmV0dXJuIGJvICYmIGJvLmRlZmluaXRpb24gJiYgaXNNYXAoYm8uZGVmaW5pdGlvbik7XG4gICAgfVxuXG4gIH0pKTtcblxuICByZXR1cm4gZW50cmllcztcblxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XG5cbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xuXG4gIHZhciBnZXRCdXNpbmVzc09iamVjdCA9IG9wdGlvbnMuZ2V0QnVzaW5lc3NPYmplY3Q7XG5cbiAgdmFyIGpvYlByaW9yaXR5RW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcbiAgICBpZDogJ2pvYlByaW9yaXR5JyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdKb2IgUHJpb3JpdHknKSxcbiAgICBtb2RlbFByb3BlcnR5OiAnam9iUHJpb3JpdHknLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpvYlByaW9yaXR5OiBiby5nZXQoJ2FjdGl2aXRpOmpvYlByaW9yaXR5JylcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHtcbiAgICAgICAgJ2FjdGl2aXRpOmpvYlByaW9yaXR5JzogdmFsdWVzLmpvYlByaW9yaXR5IHx8IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfVxuXG4gIH0pO1xuXG4gIHJldHVybiBbIGpvYlByaW9yaXR5RW50cnkgXTtcblxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcztcblxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XG5cbnZhciBhc3luY0NhcGFibGVIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQXN5bmNDYXBhYmxlSGVscGVyJyk7XG5cbnZhciBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKSxcbiAgICBldmVudERlZmluaXRpb25IZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRXZlbnREZWZpbml0aW9uSGVscGVyJyksXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xuXG5mdW5jdGlvbiBpc0FzeW5jQmVmb3JlKGJvKSB7XG4gIHJldHVybiBhc3luY0NhcGFibGVIZWxwZXIuaXNBc3luY0JlZm9yZShibyk7XG59XG5cbmZ1bmN0aW9uIGlzQXN5bmNBZnRlcihibykge1xuICByZXR1cm4gYXN5bmNDYXBhYmxlSGVscGVyLmlzQXN5bmNBZnRlcihibyk7XG59XG5cbmZ1bmN0aW9uIGdldEZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGJvKSB7XG4gIHJldHVybiBhc3luY0NhcGFibGVIZWxwZXIuZ2V0RmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoYm8pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShibywgZWxlbWVudCkge1xuICByZXR1cm4gYXN5bmNDYXBhYmxlSGVscGVyLnJlbW92ZUZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGJvLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXh0ZW5zaW9uRWxlbWVudHMocGFyZW50LCBicG1uRmFjdG9yeSkge1xuICByZXR1cm4gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywgeyB2YWx1ZXM6IFtdIH0sIHBhcmVudCwgYnBtbkZhY3RvcnkpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShwYXJlbnQsIGJwbW5GYWN0b3J5LCBjeWNsZSkge1xuICByZXR1cm4gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdhY3Rpdml0aTpGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZScsIHsgYm9keTogY3ljbGUgfSwgcGFyZW50LCBicG1uRmFjdG9yeSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xuXG4gIHZhciBnZXRCdXNpbmVzc09iamVjdCA9IG9wdGlvbnMuZ2V0QnVzaW5lc3NPYmplY3Q7XG5cbiAgdmFyIGlkUHJlZml4ID0gb3B0aW9ucy5pZFByZWZpeCB8fCAnJyxcbiAgICAgIGxhYmVsUHJlZml4ID0gb3B0aW9ucy5sYWJlbFByZWZpeCB8fCAnJztcblxuICB2YXIgcmV0cnlUaW1lQ3ljbGVFbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xuICAgIGlkOiBpZFByZWZpeCArICdyZXRyeVRpbWVDeWNsZScsXG4gICAgbGFiZWw6IGxhYmVsUHJlZml4ICsgdHJhbnNsYXRlKCdSZXRyeSBUaW1lIEN5Y2xlJyksXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2N5Y2xlJyxcblxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIHJldHJ5VGltZUN5Y2xlID0gZ2V0RmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkpO1xuICAgICAgdmFyIHZhbHVlID0gcmV0cnlUaW1lQ3ljbGUgJiYgcmV0cnlUaW1lQ3ljbGUuZ2V0KCdib2R5Jyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjeWNsZTogdmFsdWVcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgICB2YXIgbmV3Q3ljbGUgPSB2YWx1ZXMuY3ljbGU7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICAgICAgaWYgKG5ld0N5Y2xlID09PSAnJyB8fCB0eXBlb2YgbmV3Q3ljbGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIHJlbW92ZSByZXRyeSB0aW1lIGN5Y2xlIGVsZW1lbnQocylcbiAgICAgICAgcmV0dXJuIHJlbW92ZUZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGJvLCBlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJldHJ5VGltZUN5Y2xlID0gZ2V0RmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoYm8pO1xuXG4gICAgICBpZiAoIXJldHJ5VGltZUN5Y2xlKSB7XG4gICAgICAgIC8vIGFkZCBuZXcgcmV0cnkgdGltZSBjeWNsZSBlbGVtZW50XG4gICAgICAgIHZhciBjb21tYW5kcyA9IFtdO1xuXG4gICAgICAgIHZhciBleHRlbnNpb25FbGVtZW50cyA9IGJvLmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcbiAgICAgICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gY3JlYXRlRXh0ZW5zaW9uRWxlbWVudHMoYm8sIGJwbW5GYWN0b3J5KTtcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywgeyBleHRlbnNpb25FbGVtZW50czogZXh0ZW5zaW9uRWxlbWVudHMgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0cnlUaW1lQ3ljbGUgPSBjcmVhdGVGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShleHRlbnNpb25FbGVtZW50cywgYnBtbkZhY3RvcnksIG5ld0N5Y2xlKTtcbiAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIuYWRkQW5kUmVtb3ZlRWxlbWVudHNGcm9tTGlzdChcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgICAgICd2YWx1ZXMnLFxuICAgICAgICAgICdleHRlbnNpb25FbGVtZW50cycsXG4gICAgICAgICAgWyByZXRyeVRpbWVDeWNsZSBdLFxuICAgICAgICAgIFtdXG4gICAgICAgICkpO1xuXG4gICAgICAgIHJldHVybiBjb21tYW5kcztcbiAgICAgIH1cblxuICAgICAgLy8gdXBkYXRlIGV4aXN0aW5nIHJldHJ5IHRpbWUgY3ljbGUgZWxlbWVudFxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCByZXRyeVRpbWVDeWNsZSwgeyBib2R5OiBuZXdDeWNsZSB9KTtcbiAgICB9LFxuXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICAgICAgaWYgKGJvICYmIChpc0FzeW5jQmVmb3JlKGJvKSB8fCBpc0FzeW5jQWZ0ZXIoYm8pKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpFdmVudCcpKSB7XG4gICAgICAgIHJldHVybiAhZXZlbnREZWZpbml0aW9uSGVscGVyLmdldFRpbWVyRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgfSk7XG5cbiAgcmV0dXJuIFsgcmV0cnlUaW1lQ3ljbGVFbnRyeSBdO1xuXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcblxudmFyIGV4dGVuc2lvbkVsZW1lbnRzRW50cnkgPSByZXF1aXJlKCcuL0V4dGVuc2lvbkVsZW1lbnRzJyksXG4gICAgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKSxcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXG4gICAgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyksXG4gICAgSW1wbGVtZW50YXRpb25UeXBlSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0ltcGxlbWVudGF0aW9uVHlwZUhlbHBlcicpO1xuXG5cbmZ1bmN0aW9uIGdldExpc3RlbmVycyhibywgdHlwZSkge1xuICByZXR1cm4gYm8gJiYgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sIHR5cGUpIHx8IFtdO1xufVxuXG52YXIgQUNUSVZJVElfRVhFQ1VUSU9OX0xJU1RFTkVSX0VMRU1FTlQgPSAnYWN0aXZpdGk6RXhlY3V0aW9uTGlzdGVuZXInO1xudmFyIEFDVElWSVRJX1RBU0tfTElTVEVORVJfRUxFTUVOVCA9ICdhY3Rpdml0aTpUYXNrTGlzdGVuZXInO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcblxuICB2YXIgTElTVEVORVJfVFlQRV9MQUJFTCA9IHtcbiAgICBjbGFzczogdHJhbnNsYXRlKCdKYXZhIENsYXNzJyksXG4gICAgZXhwcmVzc2lvbjogdHJhbnNsYXRlKCdFeHByZXNzaW9uJyksXG4gICAgZGVsZWdhdGVFeHByZXNzaW9uOiB0cmFuc2xhdGUoJ0RlbGVnYXRlIEV4cHJlc3Npb24nKSxcbiAgICBzY3JpcHQ6IHRyYW5zbGF0ZSgnU2NyaXB0JylcbiAgfTtcblxuICB2YXIgYm87XG5cbiAgdmFyIHJlc3VsdCA9IHtcbiAgICBnZXRTZWxlY3RlZExpc3RlbmVyOiBnZXRTZWxlY3RlZExpc3RlbmVyXG4gIH07XG5cbiAgdmFyIGVudHJpZXMgPSByZXN1bHQuZW50cmllcyA9IFtdO1xuXG4gIHZhciBpc1NlcXVlbmNlRmxvdyA9IEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5pc1NlcXVlbmNlRmxvdyhlbGVtZW50KTtcblxuICBmdW5jdGlvbiBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpIHtcbiAgICB2YXIgc2VsZWN0aW9uID0gKGV4ZWN1dGlvbkxpc3RlbmVyRW50cnkgJiYgZXhlY3V0aW9uTGlzdGVuZXJFbnRyeS5nZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKSkgfHwgeyBpZHg6IC0xIH07XG5cbiAgICB2YXIgbGlzdGVuZXIgPSBnZXRMaXN0ZW5lcnMoYm8sIEFDVElWSVRJX0VYRUNVVElPTl9MSVNURU5FUl9FTEVNRU5UKVtzZWxlY3Rpb24uaWR4XTtcbiAgICBpZiAoIWxpc3RlbmVyICYmIHRhc2tMaXN0ZW5lckVudHJ5KSB7XG4gICAgICBzZWxlY3Rpb24gPSB0YXNrTGlzdGVuZXJFbnRyeS5nZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcbiAgICAgIGxpc3RlbmVyID0gZ2V0TGlzdGVuZXJzKGJvLCBBQ1RJVklUSV9UQVNLX0xJU1RFTkVSX0VMRU1FTlQpW3NlbGVjdGlvbi5pZHhdO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdGVuZXI7XG4gIH1cblxuICB2YXIgc2V0T3B0aW9uTGFiZWxWYWx1ZSA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgb3B0aW9uLCBwcm9wZXJ0eSwgdmFsdWUsIGlkeCkge1xuICAgICAgdmFyIGxpc3RlbmVycyA9IGdldExpc3RlbmVycyhibywgdHlwZSk7XG4gICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaWR4XTtcbiAgICAgIHZhciBsaXN0ZW5lclR5cGUgPSBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0SW1wbGVtZW50YXRpb25UeXBlKGxpc3RlbmVyKTtcblxuICAgICAgdmFyIGV2ZW50ID0gKGxpc3RlbmVyLmdldCgnZXZlbnQnKSkgPyBsaXN0ZW5lci5nZXQoJ2V2ZW50JykgOiAnPGVtcHR5Pic7XG5cbiAgICAgIHZhciBsYWJlbCA9IChldmVudCB8fCAnKicpICsgJyA6ICcgKyAoTElTVEVORVJfVFlQRV9MQUJFTFtsaXN0ZW5lclR5cGVdIHx8ICcnKTtcblxuICAgICAgb3B0aW9uLnRleHQgPSBsYWJlbDtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBuZXdFbGVtZW50ID0gZnVuY3Rpb24oZWxlbWVudCwgdHlwZSwgaW5pdGlhbEV2ZW50KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCB2YWx1ZSkge1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBldmVudDogaW5pdGlhbEV2ZW50LFxuICAgICAgICBjbGFzczogJydcbiAgICAgIH07XG5cbiAgICAgIHZhciBuZXdFbGVtID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KHR5cGUsIHByb3BzLCBleHRlbnNpb25FbGVtZW50cywgYnBtbkZhY3RvcnkpO1xuXG4gICAgICByZXR1cm4gY21kSGVscGVyLmFkZEVsZW1lbnRzVG9saXN0KGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCAndmFsdWVzJywgWyBuZXdFbGVtIF0pO1xuICAgIH07XG4gIH07XG5cbiAgdmFyIHJlbW92ZUVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50LCB0eXBlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCB2YWx1ZSwgaWR4KSB7XG4gICAgICB2YXIgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKGJvLCB0eXBlKTtcbiAgICAgIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpZHhdO1xuICAgICAgaWYgKGxpc3RlbmVyKSB7XG4gICAgICAgIHJldHVybiBleHRlbnNpb25FbGVtZW50c0hlbHBlci5yZW1vdmVFbnRyeShibywgZWxlbWVudCwgbGlzdGVuZXIpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cblxuICAvLyBFeGVjdXRpb24gTGlzdGVuZXJcblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46Rmxvd0VsZW1lbnQnKSB8fCBpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgfHwgaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnByb2Nlc3NSZWY7XG4gICAgICBibyA9IGJvLmdldCgncHJvY2Vzc1JlZicpO1xuICAgIH1cblxuICAgIGlmIChibykge1xuXG4gICAgICB2YXIgZXhlY3V0aW9uTGlzdGVuZXJFbnRyeSA9IGV4dGVuc2lvbkVsZW1lbnRzRW50cnkoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcbiAgICAgICAgaWQgOiAnZXhlY3V0aW9uTGlzdGVuZXJzJyxcbiAgICAgICAgbGFiZWwgOiB0cmFuc2xhdGUoJ0V4ZWN1dGlvbiBMaXN0ZW5lcicpLFxuICAgICAgICBtb2RlbFByb3BlcnR5OiAnbmFtZScsXG4gICAgICAgIGlkR2VuZXJhdGlvbjogJ2ZhbHNlJyxcbiAgICAgICAgcmVmZXJlbmNlOiAncHJvY2Vzc1JlZicsXG5cbiAgICAgICAgY3JlYXRlRXh0ZW5zaW9uRWxlbWVudDogbmV3RWxlbWVudChlbGVtZW50LCBBQ1RJVklUSV9FWEVDVVRJT05fTElTVEVORVJfRUxFTUVOVCwgKGlzU2VxdWVuY2VGbG93KSA/ICd0YWtlJyA6ICdzdGFydCcpLFxuICAgICAgICByZW1vdmVFeHRlbnNpb25FbGVtZW50OiByZW1vdmVFbGVtZW50KGVsZW1lbnQsIEFDVElWSVRJX0VYRUNVVElPTl9MSVNURU5FUl9FTEVNRU5UKSxcblxuICAgICAgICBnZXRFeHRlbnNpb25FbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcnMoYm8sIEFDVElWSVRJX0VYRUNVVElPTl9MSVNURU5FUl9FTEVNRU5UKTtcbiAgICAgICAgfSxcblxuICAgICAgICBvblNlbGVjdGlvbkNoYW5nZTogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgZXZlbnQsIHNjb3BlKSB7XG4gICAgICAgICAgdGFza0xpc3RlbmVyRW50cnkgJiYgdGFza0xpc3RlbmVyRW50cnkuZGVzZWxlY3QoZWxlbWVudCwgbm9kZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0T3B0aW9uTGFiZWxWYWx1ZTogc2V0T3B0aW9uTGFiZWxWYWx1ZShBQ1RJVklUSV9FWEVDVVRJT05fTElTVEVORVJfRUxFTUVOVClcblxuICAgICAgfSk7XG4gICAgICBlbnRyaWVzLnB1c2goZXhlY3V0aW9uTGlzdGVuZXJFbnRyeSk7XG5cbiAgICB9XG4gIH1cblxuXG4gIC8vIFRhc2sgTGlzdGVuZXJcblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46VXNlclRhc2snKSkge1xuICAgIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgICB2YXIgdGFza0xpc3RlbmVyRW50cnkgPSBleHRlbnNpb25FbGVtZW50c0VudHJ5KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XG4gICAgICBpZCA6ICd0YXNrTGlzdGVuZXJzJyxcbiAgICAgIGxhYmVsIDogdHJhbnNsYXRlKCdUYXNrIExpc3RlbmVyJyksXG4gICAgICBtb2RlbFByb3BlcnR5OiAnbmFtZScsXG4gICAgICBpZEdlbmVyYXRpb246ICdmYWxzZScsXG5cbiAgICAgIGNyZWF0ZUV4dGVuc2lvbkVsZW1lbnQ6IG5ld0VsZW1lbnQoZWxlbWVudCwgQUNUSVZJVElfVEFTS19MSVNURU5FUl9FTEVNRU5ULCAnY3JlYXRlJyksXG4gICAgICByZW1vdmVFeHRlbnNpb25FbGVtZW50OiByZW1vdmVFbGVtZW50KGVsZW1lbnQsIEFDVElWSVRJX1RBU0tfTElTVEVORVJfRUxFTUVOVCksXG5cbiAgICAgIGdldEV4dGVuc2lvbkVsZW1lbnRzOiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcnMoYm8sIEFDVElWSVRJX1RBU0tfTElTVEVORVJfRUxFTUVOVCk7XG4gICAgICB9LFxuXG4gICAgICBvblNlbGVjdGlvbkNoYW5nZTogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgZXZlbnQsIHNjb3BlKSB7XG4gICAgICAgIGV4ZWN1dGlvbkxpc3RlbmVyRW50cnkuZGVzZWxlY3QoZWxlbWVudCwgbm9kZSk7XG4gICAgICB9LFxuXG4gICAgICBzZXRPcHRpb25MYWJlbFZhbHVlOiBzZXRPcHRpb25MYWJlbFZhbHVlKEFDVElWSVRJX1RBU0tfTElTVEVORVJfRUxFTUVOVClcblxuICAgIH0pO1xuICAgIGVudHJpZXMucHVzaCh0YXNrTGlzdGVuZXJFbnRyeSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xuXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxuICAgIGVzY2FwZUhUTUwgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9VdGlscycpLmVzY2FwZUhUTUw7XG5cblxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XG5cbnZhciBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKSxcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XG5cbnZhciBkb21DbGFzc2VzID0gcmVxdWlyZSgnbWluLWRvbScpLmNsYXNzZXM7XG5cbi8qKlxuICogR2V0IGEgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGxvb3AgY2hhcmFjdGVyaXN0aWNzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eU5hbWVcbiAqXG4gKiBAcmV0dXJuIHthbnl9IHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICovXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgdmFyIGxvb3BDaGFyYWN0ZXJpc3RpY3MgPSBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzKGVsZW1lbnQpO1xuICByZXR1cm4gbG9vcENoYXJhY3RlcmlzdGljcyAmJiBsb29wQ2hhcmFjdGVyaXN0aWNzLmdldChwcm9wZXJ0eU5hbWUpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgYm9keSBvZiBhIGdpdmVuIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50PGJwbW46Rm9ybWFsRXhwcmVzc2lvbj59IGV4cHJlc3Npb25cbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBib2R5ICh2YWx1ZSkgb2YgdGhlIGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gZ2V0Qm9keShleHByZXNzaW9uKSB7XG4gIHJldHVybiBleHByZXNzaW9uICYmIGV4cHJlc3Npb24uZ2V0KCdib2R5Jyk7XG59XG5cblxuLyoqXG4gKiBHZXQgdGhlIGxvb3AgY2hhcmFjdGVyaXN0aWNzIG9mIGFuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnQ8YnBtbjpNdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcz59IHRoZSBsb29wIGNoYXJhY3RlcmlzdGljc1xuICovXG5mdW5jdGlvbiBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzKGVsZW1lbnQpIHtcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIHJldHVybiBiby5sb29wQ2hhcmFjdGVyaXN0aWNzO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbG9vcCBjYXJkaW5hbGl0eSBvZiB0aGUgbG9vcCBjaGFyYWN0ZXJpc3RpY3MuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnQ8YnBtbjpGb3JtYWxFeHByZXNzaW9uPn0gYW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGxvb3AgY2FyZGluYWxpdHlcbiAqL1xuZnVuY3Rpb24gZ2V0TG9vcENhcmRpbmFsaXR5KGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFByb3BlcnR5KGVsZW1lbnQsICdsb29wQ2FyZGluYWxpdHknKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGxvb3AgY2FyZGluYWxpdHkgdmFsdWUgb2YgdGhlIGxvb3AgY2hhcmFjdGVyaXN0aWNzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBsb29wIGNhcmRpbmFsaXR5IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGdldExvb3BDYXJkaW5hbGl0eVZhbHVlKGVsZW1lbnQpIHtcbiAgdmFyIGxvb3BDYXJkaW5hbGl0eSA9IGdldExvb3BDYXJkaW5hbGl0eShlbGVtZW50KTtcbiAgcmV0dXJuIGdldEJvZHkobG9vcENhcmRpbmFsaXR5KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGNvbXBsZXRpb24gY29uZGl0aW9uIG9mIHRoZSBsb29wIGNoYXJhY3RlcmlzdGljcy5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudDxicG1uOkZvcm1hbEV4cHJlc3Npb24+fSBhbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGxldGlvbiBjb25kaXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcGxldGlvbkNvbmRpdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBnZXRQcm9wZXJ0eShlbGVtZW50LCAnY29tcGxldGlvbkNvbmRpdGlvbicpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgY29tcGxldGlvbiBjb25kaXRpb24gdmFsdWUgb2YgdGhlIGxvb3AgY2hhcmFjdGVyaXN0aWNzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBjb21wbGV0aW9uIGNvbmRpdGlvbiB2YWx1ZVxuICovXG5mdW5jdGlvbiBnZXRDb21wbGV0aW9uQ29uZGl0aW9uVmFsdWUoZWxlbWVudCkge1xuICB2YXIgY29tcGxldGlvbkNvbmRpdGlvbiA9IGdldENvbXBsZXRpb25Db25kaXRpb24oZWxlbWVudCk7XG4gIHJldHVybiBnZXRCb2R5KGNvbXBsZXRpb25Db25kaXRpb24pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgJ2FjdGl2aXRpOmNvbGxlY3Rpb24nIGF0dHJpYnV0ZSB2YWx1ZSBvZiB0aGUgbG9vcCBjaGFyYWN0ZXJpc3RpY3MuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlICdhY3Rpdml0aTpjb2xsZWN0aW9uJyB2YWx1ZVxuICovXG5mdW5jdGlvbiBnZXRDb2xsZWN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFByb3BlcnR5KGVsZW1lbnQsICdhY3Rpdml0aTpjb2xsZWN0aW9uJyk7XG59XG5cbi8qKlxuICogR2V0IHRoZSAnYWN0aXZpdGk6ZWxlbWVudFZhcmlhYmxlJyBhdHRyaWJ1dGUgdmFsdWUgb2YgdGhlIGxvb3AgY2hhcmFjdGVyaXN0aWNzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSAnYWN0aXZpdGk6ZWxlbWVudFZhcmlhYmxlJyB2YWx1ZVxuICovXG5mdW5jdGlvbiBnZXRFbGVtZW50VmFyaWFibGUoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0UHJvcGVydHkoZWxlbWVudCwgJ2FjdGl2aXRpOmVsZW1lbnRWYXJpYWJsZScpO1xufVxuXG5cbi8qKlxuICogQ3JlYXRlcyAnYnBtbjpGb3JtYWxFeHByZXNzaW9uJyBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gYm9keVxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqXG4gKiBAcmVzdWx0IHtNb2RkbGVFbGVtZW50PGJwbW46Rm9ybWFsRXhwcmVzc2lvbj59IGEgZm9ybWFsIGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRm9ybWFsRXhwcmVzc2lvbihwYXJlbnQsIGJvZHksIGJwbW5GYWN0b3J5KSB7XG4gIHJldHVybiBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2JwbW46Rm9ybWFsRXhwcmVzc2lvbicsIHsgYm9keTogYm9keSB9LCBwYXJlbnQsIGJwbW5GYWN0b3J5KTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIGEgc3BlY2lmaWMgZm9ybWFsIGV4cHJlc3Npb24gb2YgdGhlIGxvb3AgY2hhcmFjdGVyaXN0aWNzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eU5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuZXdWYWx1ZVxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqL1xuZnVuY3Rpb24gdXBkYXRlRm9ybWFsRXhwcmVzc2lvbihlbGVtZW50LCBwcm9wZXJ0eU5hbWUsIG5ld1ZhbHVlLCBicG1uRmFjdG9yeSkge1xuICB2YXIgbG9vcENoYXJhY3RlcmlzdGljcyA9IGdldExvb3BDaGFyYWN0ZXJpc3RpY3MoZWxlbWVudCk7XG5cbiAgdmFyIGV4cHJlc3Npb25Qcm9wcyA9IHt9O1xuXG4gIGlmICghbmV3VmFsdWUpIHtcbiAgICAvLyByZW1vdmUgZm9ybWFsIGV4cHJlc3Npb25cbiAgICBleHByZXNzaW9uUHJvcHNbcHJvcGVydHlOYW1lXSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGxvb3BDaGFyYWN0ZXJpc3RpY3MsIGV4cHJlc3Npb25Qcm9wcyk7XG4gIH1cblxuICB2YXIgZXhpc3RpbmdFeHByZXNzaW9uID0gbG9vcENoYXJhY3RlcmlzdGljcy5nZXQocHJvcGVydHlOYW1lKTtcblxuICBpZiAoIWV4aXN0aW5nRXhwcmVzc2lvbikge1xuICAgIC8vIGFkZCBmb3JtYWwgZXhwcmVzc2lvblxuICAgIGV4cHJlc3Npb25Qcm9wc1twcm9wZXJ0eU5hbWVdID0gY3JlYXRlRm9ybWFsRXhwcmVzc2lvbihsb29wQ2hhcmFjdGVyaXN0aWNzLCBuZXdWYWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgbG9vcENoYXJhY3RlcmlzdGljcywgZXhwcmVzc2lvblByb3BzKTtcbiAgfVxuXG4gIC8vIGVkaXQgZXhpc3RpbmcgZm9ybWFsIGV4cHJlc3Npb25cbiAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBleGlzdGluZ0V4cHJlc3Npb24sIHtcbiAgICBib2R5OiBuZXdWYWx1ZVxuICB9KTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcblxuICB2YXIgZW50cmllcyA9IFtdO1xuXG4gIC8vIGVycm9yIG1lc3NhZ2UgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBlbnRyaWVzLnB1c2goe1xuICAgIGlkOiAnbXVsdGlJbnN0YW5jZS1lcnJvck1lc3NhZ2UnLFxuICAgIGh0bWw6ICc8ZGl2IGRhdGEtc2hvdz1cImlzVmFsaWRcIj4nICtcbiAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJicHAtaWNvbi13YXJuaW5nXCI+PC9zcGFuPiAnICtcbiAgICAgICAgICAgICBlc2NhcGVIVE1MKHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGVpdGhlciBsb29wIGNhcmRpbmFsaXR5IG9yIGNvbGxlY3Rpb24nKSkgK1xuICAgICAgICAgICc8L2Rpdj4nLFxuXG4gICAgaXNWYWxpZDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgbm90aWZpY2F0aW9uLCBzY29wZSkge1xuICAgICAgdmFyIGxvb3BDaGFyYWN0ZXJpc3RpY3MgPSBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzKGVsZW1lbnQpO1xuXG4gICAgICB2YXIgaXNWYWxpZCA9IHRydWU7XG4gICAgICBpZiAobG9vcENoYXJhY3RlcmlzdGljcykge1xuICAgICAgICB2YXIgbG9vcENhcmRpbmFsaXR5ID0gZ2V0TG9vcENhcmRpbmFsaXR5VmFsdWUoZWxlbWVudCk7XG4gICAgICAgIHZhciBjb2xsZWN0aW9uID0gZ2V0Q29sbGVjdGlvbihlbGVtZW50KTtcblxuICAgICAgICBpc1ZhbGlkID0gIWxvb3BDYXJkaW5hbGl0eSAmJiAhY29sbGVjdGlvbjtcbiAgICAgIH1cblxuICAgICAgZG9tQ2xhc3Nlcyhub2RlKS50b2dnbGUoJ2JwcC1oaWRkZW4nLCAhaXNWYWxpZCk7XG4gICAgICBkb21DbGFzc2VzKG5vdGlmaWNhdGlvbikudG9nZ2xlKCdicHAtZXJyb3ItbWVzc2FnZScsIGlzVmFsaWQpO1xuXG4gICAgICByZXR1cm4gaXNWYWxpZDtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGxvb3AgY2FyZGluYWxpdHkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XG4gICAgaWQ6ICdtdWx0aUluc3RhbmNlLWxvb3BDYXJkaW5hbGl0eScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTG9vcCBDYXJkaW5hbGl0eScpLFxuICAgIG1vZGVsUHJvcGVydHk6ICdsb29wQ2FyZGluYWxpdHknLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsb29wQ2FyZGluYWxpdHk6IGdldExvb3BDYXJkaW5hbGl0eVZhbHVlKGVsZW1lbnQpXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xuICAgICAgcmV0dXJuIHVwZGF0ZUZvcm1hbEV4cHJlc3Npb24oZWxlbWVudCwgJ2xvb3BDYXJkaW5hbGl0eScsIHZhbHVlcy5sb29wQ2FyZGluYWxpdHksIGJwbW5GYWN0b3J5KTtcbiAgICB9XG4gIH0pKTtcblxuXG4gIC8vIGNvbGxlY3Rpb24gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xuICAgIGlkOiAnbXVsdGlJbnN0YW5jZS1jb2xsZWN0aW9uJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDb2xsZWN0aW9uJyksXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2NvbGxlY3Rpb24nLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xsZWN0aW9uOiBnZXRDb2xsZWN0aW9uKGVsZW1lbnQpXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xuICAgICAgdmFyIGxvb3BDaGFyYWN0ZXJpc3RpY3MgPSBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzKGVsZW1lbnQpO1xuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBsb29wQ2hhcmFjdGVyaXN0aWNzLCB7XG4gICAgICAgICdhY3Rpdml0aTpjb2xsZWN0aW9uJzogdmFsdWVzLmNvbGxlY3Rpb24gfHwgdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgdmFyIGNvbGxlY3Rpb24gPSBnZXRDb2xsZWN0aW9uKGVsZW1lbnQpO1xuICAgICAgdmFyIGVsZW1lbnRWYXJpYWJsZSA9IGdldEVsZW1lbnRWYXJpYWJsZShlbGVtZW50KTtcblxuICAgICAgaWYgKCFjb2xsZWN0aW9uICYmIGVsZW1lbnRWYXJpYWJsZSkge1xuICAgICAgICByZXR1cm4geyBjb2xsZWN0aW9uIDogJ011c3QgcHJvdmlkZSBhIHZhbHVlJyB9O1xuICAgICAgfVxuICAgIH1cbiAgfSkpO1xuXG5cbiAgLy8gZWxlbWVudCB2YXJpYWJsZSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XG4gICAgaWQ6ICdtdWx0aUluc3RhbmNlLWVsZW1lbnRWYXJpYWJsZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRWxlbWVudCBWYXJpYWJsZScpLFxuICAgIG1vZGVsUHJvcGVydHk6ICdlbGVtZW50VmFyaWFibGUnLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbGVtZW50VmFyaWFibGU6IGdldEVsZW1lbnRWYXJpYWJsZShlbGVtZW50KVxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcbiAgICAgIHZhciBsb29wQ2hhcmFjdGVyaXN0aWNzID0gZ2V0TG9vcENoYXJhY3RlcmlzdGljcyhlbGVtZW50KTtcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgbG9vcENoYXJhY3RlcmlzdGljcywge1xuICAgICAgICAnYWN0aXZpdGk6ZWxlbWVudFZhcmlhYmxlJzogdmFsdWVzLmVsZW1lbnRWYXJpYWJsZSB8fCB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH1cbiAgfSkpO1xuXG5cbiAgLy8gQ29tcGxldGlvbiBDb25kaXRpb24gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xuICAgIGlkOiAnbXVsdGlJbnN0YW5jZS1jb21wbGV0aW9uQ29uZGl0aW9uJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDb21wbGV0aW9uIENvbmRpdGlvbicpLFxuICAgIG1vZGVsUHJvcGVydHk6ICdjb21wbGV0aW9uQ29uZGl0aW9uJyxcblxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tcGxldGlvbkNvbmRpdGlvbjogZ2V0Q29tcGxldGlvbkNvbmRpdGlvblZhbHVlKGVsZW1lbnQpXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xuICAgICAgcmV0dXJuIHVwZGF0ZUZvcm1hbEV4cHJlc3Npb24oZWxlbWVudCwgJ2NvbXBsZXRpb25Db25kaXRpb24nLCB2YWx1ZXMuY29tcGxldGlvbkNvbmRpdGlvbiwgYnBtbkZhY3RvcnkpO1xuICAgIH1cbiAgfSkpO1xuXG4gIHJldHVybiBlbnRyaWVzO1xuXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxuICAgIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcztcblxudmFyIGZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xuXG52YXIgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyksXG4gICAgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKSxcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9VdGlscycpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpLFxuICAgIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpLFxuICAgIGZpbmQgPSByZXF1aXJlKCdsb2Rhc2gvZmluZCcpO1xuXG5mdW5jdGlvbiBnZW5lcmF0ZVByb3BlcnR5SWQoKSB7XG4gIHJldHVybiB1dGlscy5uZXh0SWQoJ1Byb3BlcnR5XycpO1xufVxuXG4vKipcbiAqIEdldCBhbGwgYWN0aXZpdGk6cHJvcGVydHkgb2JqZWN0cyBmb3IgYSBzcGVjaWZpYyBidXNpbmVzcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSBwYXJlbnRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxNb2RkbGVFbGVtZW50Pn0gYSBsaXN0IG9mIGFjdGl2aXRpOnByb3BlcnR5IG9iamVjdHNcbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcGVydHlWYWx1ZXMocGFyZW50KSB7XG4gIHZhciBwcm9wZXJ0aWVzID0gcGFyZW50ICYmIGdldFByb3BlcnRpZXNFbGVtZW50KHBhcmVudCk7XG4gIGlmIChwcm9wZXJ0aWVzICYmIHByb3BlcnRpZXMudmFsdWVzKSB7XG4gICAgcmV0dXJuIHByb3BlcnRpZXMudmFsdWVzO1xuICB9XG4gIHJldHVybiBbXTtcbn1cblxuLyoqXG4gKiBHZXQgYWxsIGFjdGl2aXRpOlByb3BlcnRpZXMgb2JqZWN0IGZvciBhIHNwZWNpZmljIGJ1c2luZXNzIG9iamVjdFxuICpcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IHBhcmVudFxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9IGEgYWN0aXZpdGk6UHJvcGVydGllcyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcGVydGllc0VsZW1lbnQoZWxlbWVudCkge1xuICBpZiAoIWlzRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZWxlbWVudC5wcm9wZXJ0aWVzO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXRQcm9wZXJ0aWVzRWxlbWVudEluc2lkZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpO1xuICB9XG59XG5cbi8qKlxuICogR2V0IGZpcnN0IGFjdGl2aXRpOlByb3BlcnRpZXMgb2JqZWN0IGZvciBhIHNwZWNpZmljIGJwbW46RXh0ZW5zaW9uRWxlbWVudHNcbiAqIGJ1c2luZXNzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGV4dGVuc2lvbkVsZW1lbnRzXG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gYSBhY3Rpdml0aTpQcm9wZXJ0aWVzIG9iamVjdFxuICovXG5mdW5jdGlvbiBnZXRQcm9wZXJ0aWVzRWxlbWVudEluc2lkZUV4dGVuc2lvbkVsZW1lbnRzKGV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gIHJldHVybiBmaW5kKGV4dGVuc2lvbkVsZW1lbnRzLnZhbHVlcywgZnVuY3Rpb24oZWxlbSkge1xuICAgIHJldHVybiBpcyhlbGVtLCAnYWN0aXZpdGk6UHJvcGVydGllcycpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUsIGlmIHRoZSBnaXZlbiBidXNpbmVzcyBvYmplY3QgaXMgYSBicG1uOkV4dGVuc2lvbkVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGEgYm9vbGVhbiB2YWx1ZVxuICovXG5mdW5jdGlvbiBpc0V4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJyk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgYWN0aXZpdGk6cHJvcGVydHkgZW50cnkgdXNpbmcgdGFibGVFbnRyeUZhY3RvcnlcbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtICB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5pZFxuICogQHBhcmFtICB7QXJyYXk8c3RyaW5nPn0gb3B0aW9ucy5tb2RlbFByb3BlcnRpZXNcbiAqIEBwYXJhbSAge0FycmF5PHN0cmluZz59IG9wdGlvbnMubGFiZWxzXG4gKiBAcGFyYW0gIHtmdW5jdGlvbn0gb3B0aW9ucy5nZXRQYXJlbnQgR2V0cyB0aGUgcGFyZW50IGJ1c2luZXNzIG9iamVjdFxuICogQHBhcmFtICB7ZnVuY3Rpb259IG9wdGlvbnMuc2hvdyBJbmRpY2F0ZSB3aGVuIHRoZSBlbnRyeSB3aWxsIGJlIHNob3duLCBzaG91bGQgcmV0dXJuIGJvb2xlYW5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XG5cbiAgdmFyIGdldFBhcmVudCA9IG9wdGlvbnMuZ2V0UGFyZW50O1xuXG4gIHZhciBtb2RlbFByb3BlcnRpZXMgPSBvcHRpb25zLm1vZGVsUHJvcGVydGllcyxcbiAgICAgIGNyZWF0ZVBhcmVudCA9IG9wdGlvbnMuY3JlYXRlUGFyZW50O1xuXG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIGJvID0gYm8uZ2V0KCdwcm9jZXNzUmVmJyk7XG4gIH1cblxuICAvLyBidWlsZCBwcm9wZXJ0aWVzIGdyb3VwIG9ubHkgd2hlbiB0aGUgcGFydGljaXBhbnQgaGF2ZSBhIHByb2Nlc3NSZWZcbiAgaWYgKCFibykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFzc2lnbihvcHRpb25zLCB7XG4gICAgYWRkTGFiZWw6IHRyYW5zbGF0ZSgnQWRkIFByb3BlcnR5JyksXG4gICAgZ2V0RWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBnZXRQYXJlbnQoZWxlbWVudCwgbm9kZSwgYm8pO1xuICAgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWVzKHBhcmVudCk7XG4gICAgfSxcbiAgICBhZGRFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgY29tbWFuZHMgPSBbXSxcbiAgICAgICAgICBwYXJlbnQgPSBnZXRQYXJlbnQoZWxlbWVudCwgbm9kZSwgYm8pO1xuXG4gICAgICBpZiAoIXBhcmVudCAmJiB0eXBlb2YgY3JlYXRlUGFyZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVQYXJlbnQoZWxlbWVudCwgYm8pO1xuICAgICAgICBwYXJlbnQgPSByZXN1bHQucGFyZW50O1xuICAgICAgICBjb21tYW5kcy5wdXNoKHJlc3VsdC5jbWQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJvcGVydGllcyA9IGdldFByb3BlcnRpZXNFbGVtZW50KHBhcmVudCk7XG4gICAgICBpZiAoIXByb3BlcnRpZXMpIHtcbiAgICAgICAgcHJvcGVydGllcyA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6UHJvcGVydGllcycsIHt9LCBwYXJlbnQsIGJwbW5GYWN0b3J5KTtcblxuICAgICAgICBpZiAoIWlzRXh0ZW5zaW9uRWxlbWVudHMocGFyZW50KSkge1xuICAgICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHBhcmVudCwgeyAncHJvcGVydGllcyc6IHByb3BlcnRpZXMgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLmFkZEFuZFJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgcGFyZW50LFxuICAgICAgICAgICAgJ3ZhbHVlcycsXG4gICAgICAgICAgICAnZXh0ZW5zaW9uRWxlbWVudHMnLFxuICAgICAgICAgICAgWyBwcm9wZXJ0aWVzIF0sXG4gICAgICAgICAgICBbXVxuICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBwcm9wZXJ0eVByb3BzID0ge307XG4gICAgICBmb3JFYWNoKG1vZGVsUHJvcGVydGllcywgZnVuY3Rpb24ocHJvcCkge1xuICAgICAgICBwcm9wZXJ0eVByb3BzW3Byb3BdID0gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIGNyZWF0ZSBpZCBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChtb2RlbFByb3BlcnRpZXMuaW5kZXhPZignaWQnKSA+PSAwKSB7XG4gICAgICAgIHByb3BlcnR5UHJvcHMuaWQgPSBnZW5lcmF0ZVByb3BlcnR5SWQoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb3BlcnR5ID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdhY3Rpdml0aTpQcm9wZXJ0eScsIHByb3BlcnR5UHJvcHMsIHByb3BlcnRpZXMsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLmFkZEVsZW1lbnRzVG9saXN0KGVsZW1lbnQsIHByb3BlcnRpZXMsICd2YWx1ZXMnLCBbIHByb3BlcnR5IF0pKTtcblxuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xuICAgIH0sXG4gICAgdXBkYXRlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUsIG5vZGUsIGlkeCkge1xuICAgICAgdmFyIHBhcmVudCA9IGdldFBhcmVudChlbGVtZW50LCBub2RlLCBibyksXG4gICAgICAgICAgcHJvcGVydHkgPSBnZXRQcm9wZXJ0eVZhbHVlcyhwYXJlbnQpW2lkeF07XG5cbiAgICAgIGZvckVhY2gobW9kZWxQcm9wZXJ0aWVzLCBmdW5jdGlvbihwcm9wKSB7XG4gICAgICAgIHZhbHVlW3Byb3BdID0gdmFsdWVbcHJvcF0gfHwgdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlKTtcbiAgICB9LFxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSwgbm9kZSwgaWR4KSB7XG4gICAgICAvLyB2YWxpZGF0ZSBpZCBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChtb2RlbFByb3BlcnRpZXMuaW5kZXhPZignaWQnKSA+PSAwKSB7XG5cbiAgICAgICAgdmFyIHBhcmVudCA9IGdldFBhcmVudChlbGVtZW50LCBub2RlLCBibyksXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gZ2V0UHJvcGVydHlWYWx1ZXMocGFyZW50KSxcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpZHhdO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgICAgIC8vIGNoZWNrIGlmIGlkIGlzIHZhbGlkXG4gICAgICAgICAgdmFyIHZhbGlkYXRpb25FcnJvciA9IHV0aWxzLmlzSWRWYWxpZChwcm9wZXJ0eSwgdmFsdWUuaWQsIHRyYW5zbGF0ZSk7XG5cbiAgICAgICAgICBpZiAodmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4geyBpZDogdmFsaWRhdGlvbkVycm9yIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICByZW1vdmVFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBpZHgpIHtcbiAgICAgIHZhciBjb21tYW5kcyA9IFtdLFxuICAgICAgICAgIHBhcmVudCA9IGdldFBhcmVudChlbGVtZW50LCBub2RlLCBibyksXG4gICAgICAgICAgcHJvcGVydGllcyA9IGdldFByb3BlcnRpZXNFbGVtZW50KHBhcmVudCksXG4gICAgICAgICAgcHJvcGVydHlWYWx1ZXMgPSBnZXRQcm9wZXJ0eVZhbHVlcyhwYXJlbnQpLFxuICAgICAgICAgIGN1cnJlbnRQcm9wZXJ0eSA9IHByb3BlcnR5VmFsdWVzW2lkeF07XG5cbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoZWxlbWVudCwgcHJvcGVydGllcywgJ3ZhbHVlcycsIG51bGwsIFsgY3VycmVudFByb3BlcnR5IF0pKTtcblxuICAgICAgaWYgKHByb3BlcnR5VmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyByZW1vdmUgYWN0aXZpdGk6cHJvcGVydGllcyBpZiB0aGUgbGFzdCBleGlzdGluZyBwcm9wZXJ0eSBoYXMgYmVlbiByZW1vdmVkXG4gICAgICAgIGlmICghaXNFeHRlbnNpb25FbGVtZW50cyhwYXJlbnQpKSB7XG4gICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgcGFyZW50LCB7IHByb3BlcnRpZXM6IHVuZGVmaW5lZCB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yRWFjaChwYXJlbnQudmFsdWVzLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKGlzKHZhbHVlLCAnYWN0aXZpdGk6UHJvcGVydGllcycpKSB7XG4gICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIucmVtb3ZlRW50cnkoYm8sIGVsZW1lbnQsIHZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGZhY3RvcnkudGFibGUob3B0aW9ucyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xuXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xuXG4gIHZhciBnZXRCdXNpbmVzc09iamVjdCA9IG9wdGlvbnMuZ2V0QnVzaW5lc3NPYmplY3QsXG4gICAgICBoaWRlUmVzdWx0VmFyaWFibGUgPSBvcHRpb25zLmhpZGVSZXN1bHRWYXJpYWJsZSxcbiAgICAgIGlkID0gb3B0aW9ucy5pZCB8fCAncmVzdWx0VmFyaWFibGUnO1xuXG5cbiAgdmFyIHJlc3VsdFZhcmlhYmxlRW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcbiAgICBpZDogaWQsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnUmVzdWx0IFZhcmlhYmxlJyksXG4gICAgbW9kZWxQcm9wZXJ0eTogJ3Jlc3VsdFZhcmlhYmxlJyxcblxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgICByZXR1cm4geyByZXN1bHRWYXJpYWJsZTogYm8uZ2V0KCdhY3Rpdml0aTpyZXN1bHRWYXJpYWJsZScpIH07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICAgICAgdmFyIHJlc3VsdFZhcmlhYmxlID0gdmFsdWVzLnJlc3VsdFZhcmlhYmxlIHx8IHVuZGVmaW5lZDtcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICAnYWN0aXZpdGk6cmVzdWx0VmFyaWFibGUnOiByZXN1bHRWYXJpYWJsZVxuICAgICAgfTtcblxuICAgICAgaWYgKGlzKGJvLCAnYWN0aXZpdGk6RG1uQ2FwYWJsZScpICYmICFyZXN1bHRWYXJpYWJsZSkge1xuICAgICAgICBwcm9wcyA9IGFzc2lnbih7ICdhY3Rpdml0aTptYXBEZWNpc2lvblJlc3VsdCc6ICdyZXN1bHRMaXN0JyB9LCBwcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHByb3BzKTtcbiAgICB9LFxuXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICBpZiAodHlwZW9mIGhpZGVSZXN1bHRWYXJpYWJsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gaGlkZVJlc3VsdFZhcmlhYmxlLmFwcGx5KHJlc3VsdFZhcmlhYmxlRW50cnksIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfVxuXG4gIH0pO1xuXG4gIHJldHVybiBbIHJlc3VsdFZhcmlhYmxlRW50cnkgXTtcblxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRvbVF1ZXJ5ID0gcmVxdWlyZSgnbWluLWRvbScpLnF1ZXJ5LFxuICAgIGVzY2FwZUhUTUwgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9VdGlscycpLmVzY2FwZUhUTUwsXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9VdGlscycpO1xuXG5cbmZ1bmN0aW9uIGdldFNjcmlwdFR5cGUobm9kZSkge1xuICByZXR1cm4gdXRpbHMuc2VsZWN0ZWRUeXBlKCdzZWxlY3RbbmFtZT1zY3JpcHRUeXBlXScsIG5vZGUucGFyZW50RWxlbWVudCk7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihzY3JpcHRMYW5ndWFnZVByb3BOYW1lLCBzY3JpcHRWYWx1ZVByb3BOYW1lLCBpc0Zvcm1hdFJlcXVpcmVkLCB0cmFuc2xhdGUpIHtcblxuICByZXR1cm4ge1xuICAgIHRlbXBsYXRlOlxuICAgICc8ZGl2IGNsYXNzPVwiYnBwLXJvdyBicHAtdGV4dGZpZWxkXCI+JyArXG4gICAgICAnPGxhYmVsIGZvcj1cImNhbS1zY3JpcHQtZm9ybWF0XCI+JyArIGVzY2FwZUhUTUwodHJhbnNsYXRlKCdTY3JpcHQgRm9ybWF0JykpICsgJzwvbGFiZWw+JyArXG4gICAgICAnPGRpdiBjbGFzcz1cImJwcC1maWVsZC13cmFwcGVyXCI+JyArXG4gICAgICAgICc8aW5wdXQgaWQ9XCJjYW0tc2NyaXB0LWZvcm1hdFwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNjcmlwdEZvcm1hdFwiIC8+JyArXG4gICAgICAgICc8YnV0dG9uIGNsYXNzPVwiY2xlYXJcIiBkYXRhLWFjdGlvbj1cInNjcmlwdC5jbGVhclNjcmlwdEZvcm1hdFwiIGRhdGEtc2hvdz1cInNjcmlwdC5jYW5DbGVhclNjcmlwdEZvcm1hdFwiPicgK1xuICAgICAgICAgICc8c3Bhbj5YPC9zcGFuPicgK1xuICAgICAgICAnPC9idXR0b24+JyArXG4gICAgICAnPC9kaXY+JyArXG4gICAgJzwvZGl2PicgK1xuXG4gICAgJzxkaXYgY2xhc3M9XCJicHAtcm93XCI+JyArXG4gICAgICAnPGxhYmVsIGZvcj1cImNhbS1zY3JpcHQtdHlwZVwiPicgKyBlc2NhcGVIVE1MKHRyYW5zbGF0ZSgnU2NyaXB0IFR5cGUnKSkgKyAnPC9sYWJlbD4nICtcbiAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLXdyYXBwZXJcIj4nICtcbiAgICAgICAgJzxzZWxlY3QgaWQ9XCJjYW0tc2NyaXB0LXR5cGVcIiBuYW1lPVwic2NyaXB0VHlwZVwiIGRhdGEtdmFsdWU+JyArXG4gICAgICAgICAgJzxvcHRpb24gdmFsdWU9XCJzY3JpcHRcIiBzZWxlY3RlZD4nICsgZXNjYXBlSFRNTCh0cmFuc2xhdGUoJ0lubGluZSBTY3JpcHQnKSkgKyAnPC9vcHRpb24+JyArXG4gICAgICAgICAgJzxvcHRpb24gdmFsdWU9XCJzY3JpcHRSZXNvdXJjZVwiPicgKyBlc2NhcGVIVE1MKHRyYW5zbGF0ZSgnRXh0ZXJuYWwgUmVzb3VyY2UnKSkgKyAnPC9vcHRpb24+JyArXG4gICAgICAgICc8L3NlbGVjdD4nICtcbiAgICAgICc8L2Rpdj4nICtcbiAgICAnPC9kaXY+JyArXG5cbiAgICAnPGRpdiBjbGFzcz1cImJwcC1yb3cgYnBwLXRleHRmaWVsZFwiPicgK1xuICAgICAgJzxsYWJlbCBmb3I9XCJjYW0tc2NyaXB0LXJlc291cmNlLXZhbFwiIGRhdGEtc2hvdz1cInNjcmlwdC5pc1NjcmlwdFJlc291cmNlXCI+JyArIGVzY2FwZUhUTUwodHJhbnNsYXRlKCdSZXNvdXJjZScpKSArICc8L2xhYmVsPicgK1xuICAgICAgJzxkaXYgY2xhc3M9XCJicHAtZmllbGQtd3JhcHBlclwiIGRhdGEtc2hvdz1cInNjcmlwdC5pc1NjcmlwdFJlc291cmNlXCI+JyArXG4gICAgICAgICc8aW5wdXQgaWQ9XCJjYW0tc2NyaXB0LXJlc291cmNlLXZhbFwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNjcmlwdFJlc291cmNlVmFsdWVcIiAvPicgK1xuICAgICAgICAnPGJ1dHRvbiBjbGFzcz1cImNsZWFyXCIgZGF0YS1hY3Rpb249XCJzY3JpcHQuY2xlYXJTY3JpcHRSZXNvdXJjZVwiIGRhdGEtc2hvdz1cInNjcmlwdC5jYW5DbGVhclNjcmlwdFJlc291cmNlXCI+JyArXG4gICAgICAgICAgJzxzcGFuPlg8L3NwYW4+JyArXG4gICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICc8L2Rpdj4nICtcbiAgICAnPC9kaXY+JyArXG5cbiAgICAnPGRpdiBjbGFzcz1cImJwcC1yb3dcIj4nICtcbiAgICAgICc8bGFiZWwgZm9yPVwiY2FtLXNjcmlwdC12YWxcIiBkYXRhLXNob3c9XCJzY3JpcHQuaXNTY3JpcHRcIj4nICsgZXNjYXBlSFRNTCh0cmFuc2xhdGUoJ1NjcmlwdCcpKSArICc8L2xhYmVsPicgK1xuICAgICAgJzxkaXYgY2xhc3M9XCJicHAtZmllbGQtd3JhcHBlclwiIGRhdGEtc2hvdz1cInNjcmlwdC5pc1NjcmlwdFwiPicgK1xuICAgICAgICAnPHRleHRhcmVhIGlkPVwiY2FtLXNjcmlwdC12YWxcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJzY3JpcHRWYWx1ZVwiPjwvdGV4dGFyZWE+JyArXG4gICAgICAnPC9kaXY+JytcbiAgICAnPC9kaXY+JyxcblxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgYm8pIHtcbiAgICAgIHZhciB2YWx1ZXMgPSB7fTtcblxuICAgICAgLy8gcmVhZCB2YWx1ZXMgZnJvbSB4bWw6XG4gICAgICB2YXIgYm9TY3JpcHRSZXNvdXJjZSA9IGJvLmdldCgnYWN0aXZpdGk6cmVzb3VyY2UnKSxcbiAgICAgICAgICBib1NjcmlwdCA9IGJvLmdldChzY3JpcHRWYWx1ZVByb3BOYW1lKSxcbiAgICAgICAgICBib1NjcmlwdEZvcm1hdCA9IGJvLmdldChzY3JpcHRMYW5ndWFnZVByb3BOYW1lKTtcblxuICAgICAgaWYgKHR5cGVvZiBib1NjcmlwdFJlc291cmNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB2YWx1ZXMuc2NyaXB0UmVzb3VyY2VWYWx1ZSA9IGJvU2NyaXB0UmVzb3VyY2U7XG4gICAgICAgIHZhbHVlcy5zY3JpcHRUeXBlID0gJ3NjcmlwdFJlc291cmNlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlcy5zY3JpcHRWYWx1ZSA9IGJvU2NyaXB0O1xuICAgICAgICB2YWx1ZXMuc2NyaXB0VHlwZSA9ICdzY3JpcHQnO1xuICAgICAgfVxuXG4gICAgICB2YWx1ZXMuc2NyaXB0Rm9ybWF0ID0gYm9TY3JpcHRGb3JtYXQ7XG5cbiAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBjb250YWluZXJFbGVtZW50KSB7XG4gICAgICB2YXIgc2NyaXB0Rm9ybWF0ID0gdmFsdWVzLnNjcmlwdEZvcm1hdCxcbiAgICAgICAgICBzY3JpcHRUeXBlID0gdmFsdWVzLnNjcmlwdFR5cGUsXG4gICAgICAgICAgc2NyaXB0UmVzb3VyY2VWYWx1ZSA9IHZhbHVlcy5zY3JpcHRSZXNvdXJjZVZhbHVlLFxuICAgICAgICAgIHNjcmlwdFZhbHVlID0gdmFsdWVzLnNjcmlwdFZhbHVlO1xuXG4gICAgICAvLyBpbml0IHVwZGF0ZVxuICAgICAgdmFyIHVwZGF0ZSA9IHtcbiAgICAgICAgJ2FjdGl2aXRpOnJlc291cmNlJzogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgdXBkYXRlW3NjcmlwdFZhbHVlUHJvcE5hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgdXBkYXRlW3NjcmlwdExhbmd1YWdlUHJvcE5hbWVdID0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoaXNGb3JtYXRSZXF1aXJlZCkge1xuICAgICAgICAvLyBhbHdheXMgc2V0IGxhbmd1YWdlXG4gICAgICAgIHVwZGF0ZVtzY3JpcHRMYW5ndWFnZVByb3BOYW1lXSA9IHNjcmlwdEZvcm1hdCB8fCAnJztcbiAgICAgIH0gZWxzZVxuICAgICAgLy8gc2V0IGxhbmd1YWdlIG9ubHkgd2hlbiBzY3JpcHRGb3JtYXQgaGFzIGEgdmFsdWVcbiAgICAgIGlmIChzY3JpcHRGb3JtYXQgIT09ICcnKSB7XG4gICAgICAgIHVwZGF0ZVtzY3JpcHRMYW5ndWFnZVByb3BOYW1lXSA9IHNjcmlwdEZvcm1hdDtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0IGVpdGhlciBpbmxpbmUgc2NyaXB0IG9yIHJlc291cmNlXG4gICAgICBpZiAoJ3NjcmlwdFJlc291cmNlJyA9PT0gc2NyaXB0VHlwZSkge1xuICAgICAgICB1cGRhdGVbJ2FjdGl2aXRpOnJlc291cmNlJ10gPSBzY3JpcHRSZXNvdXJjZVZhbHVlIHx8ICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXBkYXRlW3NjcmlwdFZhbHVlUHJvcE5hbWVdID0gc2NyaXB0VmFsdWUgfHwgJyc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGU7XG4gICAgfSxcblxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcbiAgICAgIHZhciB2YWxpZGF0aW9uUmVzdWx0ID0ge307XG5cbiAgICAgIGlmICh2YWx1ZXMuc2NyaXB0VHlwZSA9PT0gJ3NjcmlwdCcgJiYgIXZhbHVlcy5zY3JpcHRWYWx1ZSkge1xuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0LnNjcmlwdFZhbHVlID0gdHJhbnNsYXRlKCdNdXN0IHByb3ZpZGUgYSB2YWx1ZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWVzLnNjcmlwdFR5cGUgPT09ICdzY3JpcHRSZXNvdXJjZScgJiYgIXZhbHVlcy5zY3JpcHRSZXNvdXJjZVZhbHVlKSB7XG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQuc2NyaXB0UmVzb3VyY2VWYWx1ZSA9IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRm9ybWF0UmVxdWlyZWQgJiYgKCF2YWx1ZXMuc2NyaXB0Rm9ybWF0IHx8IHZhbHVlcy5zY3JpcHRGb3JtYXQubGVuZ3RoID09PSAwKSkge1xuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0LnNjcmlwdEZvcm1hdCA9IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHQ7XG4gICAgfSxcblxuICAgIGNsZWFyU2NyaXB0Rm9ybWF0OiBmdW5jdGlvbihlbGVtZW50LCBpbnB1dE5vZGUsIGJ0bk5vZGUsIHNjb3BlTm9kZSkge1xuICAgICAgZG9tUXVlcnkoJ2lucHV0W25hbWU9c2NyaXB0Rm9ybWF0XScsIHNjb3BlTm9kZSkudmFsdWU9Jyc7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgICBjYW5DbGVhclNjcmlwdEZvcm1hdDogZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlLCBidG5Ob2RlLCBzY29wZU5vZGUpIHtcbiAgICAgIHZhciBpbnB1dCA9IGRvbVF1ZXJ5KCdpbnB1dFtuYW1lPXNjcmlwdEZvcm1hdF0nLCBzY29wZU5vZGUpO1xuXG4gICAgICByZXR1cm4gaW5wdXQudmFsdWUgIT09ICcnO1xuICAgIH0sXG5cbiAgICBjbGVhclNjcmlwdFJlc291cmNlOiBmdW5jdGlvbihlbGVtZW50LCBpbnB1dE5vZGUsIGJ0bk5vZGUsIHNjb3BlTm9kZSkge1xuICAgICAgZG9tUXVlcnkoJ2lucHV0W25hbWU9c2NyaXB0UmVzb3VyY2VWYWx1ZV0nLCBzY29wZU5vZGUpLnZhbHVlPScnO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuXG4gICAgY2FuQ2xlYXJTY3JpcHRSZXNvdXJjZTogZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlLCBidG5Ob2RlLCBzY29wZU5vZGUpIHtcbiAgICAgIHZhciBpbnB1dCA9IGRvbVF1ZXJ5KCdpbnB1dFtuYW1lPXNjcmlwdFJlc291cmNlVmFsdWVdJywgc2NvcGVOb2RlKTtcblxuICAgICAgcmV0dXJuIGlucHV0LnZhbHVlICE9PSAnJztcbiAgICB9LFxuXG4gICAgY2xlYXJTY3JpcHQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSwgYnRuTm9kZSwgc2NvcGVOb2RlKSB7XG4gICAgICBkb21RdWVyeSgndGV4dGFyZWFbbmFtZT1zY3JpcHRWYWx1ZV0nLCBzY29wZU5vZGUpLnZhbHVlPScnO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuXG4gICAgY2FuQ2xlYXJTY3JpcHQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSwgYnRuTm9kZSwgc2NvcGVOb2RlKSB7XG4gICAgICB2YXIgaW5wdXQgPSBkb21RdWVyeSgndGV4dGFyZWFbbmFtZT1zY3JpcHRWYWx1ZV0nLCBzY29wZU5vZGUpO1xuXG4gICAgICByZXR1cm4gaW5wdXQudmFsdWUgIT09ICcnO1xuICAgIH0sXG5cbiAgICBpc1NjcmlwdFJlc291cmNlOiBmdW5jdGlvbihlbGVtZW50LCBpbnB1dE5vZGUsIGJ0bk5vZGUsIHNjb3BlTm9kZSkge1xuICAgICAgdmFyIHNjcmlwdFR5cGUgPSBnZXRTY3JpcHRUeXBlKHNjb3BlTm9kZSk7XG4gICAgICByZXR1cm4gc2NyaXB0VHlwZSA9PT0gJ3NjcmlwdFJlc291cmNlJztcbiAgICB9LFxuXG4gICAgaXNTY3JpcHQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSwgYnRuTm9kZSwgc2NvcGVOb2RlKSB7XG4gICAgICB2YXIgc2NyaXB0VHlwZSA9IGdldFNjcmlwdFR5cGUoc2NvcGVOb2RlKTtcbiAgICAgIHJldHVybiBzY3JpcHRUeXBlID09PSAnc2NyaXB0JztcbiAgICB9XG5cbiAgfTtcblxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XG5cbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xuXG4gIHZhciBnZXRCdXNpbmVzc09iamVjdCA9IG9wdGlvbnMuZ2V0QnVzaW5lc3NPYmplY3Q7XG5cbiAgdmFyIGlzU3RhcnRhYmxlSW5UYXNrbGlzdEVudHJ5ID0gZW50cnlGYWN0b3J5LmNoZWNrYm94KHtcbiAgICBpZDogJ2lzU3RhcnRhYmxlSW5UYXNrbGlzdCcsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnU3RhcnRhYmxlJyksXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2lzU3RhcnRhYmxlSW5UYXNrbGlzdCcsXG5cbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgICAgdmFyIGlzU3RhcnRhYmxlSW5UYXNrbGlzdCA9IGJvLmdldCgnYWN0aXZpdGk6aXNTdGFydGFibGVJblRhc2tsaXN0Jyk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzU3RhcnRhYmxlSW5UYXNrbGlzdDogaXNTdGFydGFibGVJblRhc2tsaXN0ID8gaXNTdGFydGFibGVJblRhc2tsaXN0IDogJydcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHtcbiAgICAgICAgJ2FjdGl2aXRpOmlzU3RhcnRhYmxlSW5UYXNrbGlzdCc6ICEhdmFsdWVzLmlzU3RhcnRhYmxlSW5UYXNrbGlzdFxuICAgICAgfSk7XG4gICAgfVxuXG4gIH0pO1xuXG4gIHJldHVybiBbXG4gICAgaXNTdGFydGFibGVJblRhc2tsaXN0RW50cnlcbiAgXTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcblxudmFyIE1vZGVsVXRpbCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJyksXG4gICAgaXMgPSBNb2RlbFV0aWwuaXMsXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSBNb2RlbFV0aWwuZ2V0QnVzaW5lc3NPYmplY3Q7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xuXG4gIHZhciBnZXRWYWx1ZSA9IGZ1bmN0aW9uKGJ1c2luZXNzT2JqZWN0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHZhciBkb2N1bWVudGF0aW9ucyA9IGJ1c2luZXNzT2JqZWN0ICYmIGJ1c2luZXNzT2JqZWN0LmdldCgnZG9jdW1lbnRhdGlvbicpLFxuICAgICAgICAgIHRleHQgPSAoZG9jdW1lbnRhdGlvbnMgJiYgZG9jdW1lbnRhdGlvbnMubGVuZ3RoID4gMCkgPyBkb2N1bWVudGF0aW9uc1swXS50ZXh0IDogJyc7XG5cbiAgICAgIHJldHVybiB7IGRvY3VtZW50YXRpb246IHRleHQgfTtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBzZXRWYWx1ZSA9IGZ1bmN0aW9uKGJ1c2luZXNzT2JqZWN0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xuICAgICAgdmFyIG5ld09iamVjdExpc3QgPSBbXTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZXMuZG9jdW1lbnRhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWVzLmRvY3VtZW50YXRpb24gIT09ICcnKSB7XG4gICAgICAgIG5ld09iamVjdExpc3QucHVzaChicG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46RG9jdW1lbnRhdGlvbicsIHtcbiAgICAgICAgICB0ZXh0OiB2YWx1ZXMuZG9jdW1lbnRhdGlvblxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjbWRIZWxwZXIuc2V0TGlzdChlbGVtZW50LCBidXNpbmVzc09iamVjdCwgJ2RvY3VtZW50YXRpb24nLCBuZXdPYmplY3RMaXN0KTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEVsZW1lbnQgRG9jdW1lbnRhdGlvblxuICB2YXIgZWxlbWVudERvY3VFbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0Qm94KHtcbiAgICBpZDogJ2RvY3VtZW50YXRpb24nLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0VsZW1lbnQgRG9jdW1lbnRhdGlvbicpLFxuICAgIG1vZGVsUHJvcGVydHk6ICdkb2N1bWVudGF0aW9uJ1xuICB9KTtcblxuICBlbGVtZW50RG9jdUVudHJ5LnNldCA9IHNldFZhbHVlKGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpKTtcblxuICBlbGVtZW50RG9jdUVudHJ5LmdldCA9IGdldFZhbHVlKGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpKTtcblxuICBncm91cC5lbnRyaWVzLnB1c2goZWxlbWVudERvY3VFbnRyeSk7XG5cblxuICB2YXIgcHJvY2Vzc1JlZjtcblxuICAvLyBQcm9jZXNzIERvY3VtZW50YXRpb24gd2hlbiBoYXZpbmcgYSBDb2xsYWJvcmF0aW9uIERpYWdyYW1cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcblxuICAgIHByb2Nlc3NSZWYgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5wcm9jZXNzUmVmO1xuXG4gICAgLy8gZG8gbm90IHNob3cgZm9yIGNvbGxhcHNlZCBQb29scy9QYXJ0aWNpcGFudHNcbiAgICBpZiAocHJvY2Vzc1JlZikge1xuICAgICAgdmFyIHByb2Nlc3NEb2N1RW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEJveCh7XG4gICAgICAgIGlkOiAncHJvY2Vzcy1kb2N1bWVudGF0aW9uJyxcbiAgICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnUHJvY2VzcyBEb2N1bWVudGF0aW9uJyksXG4gICAgICAgIG1vZGVsUHJvcGVydHk6ICdkb2N1bWVudGF0aW9uJ1xuICAgICAgfSk7XG5cbiAgICAgIHByb2Nlc3NEb2N1RW50cnkuc2V0ID0gc2V0VmFsdWUocHJvY2Vzc1JlZik7XG5cbiAgICAgIHByb2Nlc3NEb2N1RW50cnkuZ2V0ID0gZ2V0VmFsdWUocHJvY2Vzc1JlZik7XG5cbiAgICAgIGdyb3VwLmVudHJpZXMucHVzaChwcm9jZXNzRG9jdUVudHJ5KTtcbiAgICB9XG4gIH1cblxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcbiAgICBpc0FueSA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsJykuaXNBbnksXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxuICAgIGV2ZW50RGVmaW5pdGlvbkhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9FdmVudERlZmluaXRpb25IZWxwZXInKTtcblxudmFyIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpO1xuXG52YXIgbWVzc2FnZSA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vTWVzc2FnZUV2ZW50RGVmaW5pdGlvbicpLFxuICAgIHNpZ25hbCA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vU2lnbmFsRXZlbnREZWZpbml0aW9uJyksXG4gICAgZXJyb3IgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0Vycm9yRXZlbnREZWZpbml0aW9uJyksXG4gICAgZXNjYWxhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vRXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbicpLFxuICAgIHRpbWVyID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9UaW1lckV2ZW50RGVmaW5pdGlvbicpLFxuICAgIGNvbXBlbnNhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vQ29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbicpLFxuICAgIGNvbmRpdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vQ29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpIHtcbiAgdmFyIGV2ZW50cyA9IFtcbiAgICAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAnYnBtbjpFbmRFdmVudCcsXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXG4gICAgJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCdcbiAgXTtcblxuICAvLyBNZXNzYWdlIGFuZCBTaWduYWwgRXZlbnQgRGVmaW5pdGlvblxuICBmb3JFYWNoKGV2ZW50cywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBpZiAoaXMoZWxlbWVudCwgZXZlbnQpKSB7XG5cbiAgICAgIHZhciBtZXNzYWdlRXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uSGVscGVyLmdldE1lc3NhZ2VFdmVudERlZmluaXRpb24oZWxlbWVudCksXG4gICAgICAgICAgc2lnbmFsRXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uSGVscGVyLmdldFNpZ25hbEV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcblxuICAgICAgaWYgKG1lc3NhZ2VFdmVudERlZmluaXRpb24pIHtcbiAgICAgICAgbWVzc2FnZShncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIG1lc3NhZ2VFdmVudERlZmluaXRpb24sIHRyYW5zbGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWxFdmVudERlZmluaXRpb24pIHtcbiAgICAgICAgc2lnbmFsKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgc2lnbmFsRXZlbnREZWZpbml0aW9uLCB0cmFuc2xhdGUpO1xuICAgICAgfVxuXG4gICAgfVxuICB9KTtcblxuICAvLyBTcGVjaWFsIENhc2U6IFJlY2VpdmUgVGFza1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UmVjZWl2ZVRhc2snKSkge1xuICAgIG1lc3NhZ2UoZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSwgdHJhbnNsYXRlKTtcbiAgfVxuXG4gIC8vIEVycm9yIEV2ZW50IERlZmluaXRpb25cbiAgdmFyIGVycm9yRXZlbnRzID0gW1xuICAgICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICdicG1uOkVuZEV2ZW50J1xuICBdO1xuXG4gIGZvckVhY2goZXJyb3JFdmVudHMsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaWYgKGlzKGVsZW1lbnQsIGV2ZW50KSkge1xuXG4gICAgICB2YXIgZXJyb3JFdmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25IZWxwZXIuZ2V0RXJyb3JFdmVudERlZmluaXRpb24oZWxlbWVudCk7XG5cbiAgICAgIGlmIChlcnJvckV2ZW50RGVmaW5pdGlvbikge1xuXG4gICAgICAgIGVycm9yKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgZXJyb3JFdmVudERlZmluaXRpb24sIHRyYW5zbGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyBFc2NhbGF0aW9uIEV2ZW50IERlZmluaXRpb25cbiAgdmFyIGVzY2FsYXRpb25FdmVudHMgPSBbXG4gICAgJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXG4gICAgJ2JwbW46RW5kRXZlbnQnXG4gIF07XG5cbiAgZm9yRWFjaChlc2NhbGF0aW9uRXZlbnRzLCBmdW5jdGlvbihldmVudCkge1xuICAgIGlmIChpcyhlbGVtZW50LCBldmVudCkpIHtcblxuICAgICAgdmFyIHNob3dFc2NhbGF0aW9uQ29kZVZhcmlhYmxlID0gaXMoZWxlbWVudCwgJ2JwbW46U3RhcnRFdmVudCcpIHx8IGlzKGVsZW1lbnQsICdicG1uOkJvdW5kYXJ5RXZlbnQnKTtcblxuICAgICAgLy8gZ2V0IGJ1c2luZXNzIG9iamVjdFxuICAgICAgdmFyIGVzY2FsYXRpb25FdmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25IZWxwZXIuZ2V0RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcblxuICAgICAgaWYgKGVzY2FsYXRpb25FdmVudERlZmluaXRpb24pIHtcbiAgICAgICAgZXNjYWxhdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIGVzY2FsYXRpb25FdmVudERlZmluaXRpb24sIHNob3dFc2NhbGF0aW9uQ29kZVZhcmlhYmxlLFxuICAgICAgICAgIHRyYW5zbGF0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gIH0pO1xuXG4gIC8vIFRpbWVyIEV2ZW50IERlZmluaXRpb25cbiAgdmFyIHRpbWVyRXZlbnRzID0gW1xuICAgICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnXG4gIF07XG5cbiAgZm9yRWFjaCh0aW1lckV2ZW50cywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBpZiAoaXMoZWxlbWVudCwgZXZlbnQpKSB7XG5cbiAgICAgIC8vIGdldCBidXNpbmVzcyBvYmplY3RcbiAgICAgIHZhciB0aW1lckV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRUaW1lckV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcblxuICAgICAgaWYgKHRpbWVyRXZlbnREZWZpbml0aW9uKSB7XG4gICAgICAgIHRpbWVyKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdGltZXJFdmVudERlZmluaXRpb24sIHRyYW5zbGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyBDb21wZW5zYXRlIEV2ZW50IERlZmluaXRpb25cbiAgdmFyIGNvbXBlbnNhdGlvbkV2ZW50cyA9IFtcbiAgICAnYnBtbjpFbmRFdmVudCcsXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCdcbiAgXTtcblxuICBmb3JFYWNoKGNvbXBlbnNhdGlvbkV2ZW50cywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBpZiAoaXMoZWxlbWVudCwgZXZlbnQpKSB7XG5cbiAgICAgIC8vIGdldCBidXNpbmVzcyBvYmplY3RcbiAgICAgIHZhciBjb21wZW5zYXRlRXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uSGVscGVyLmdldENvbXBlbnNhdGVFdmVudERlZmluaXRpb24oZWxlbWVudCk7XG5cbiAgICAgIGlmIChjb21wZW5zYXRlRXZlbnREZWZpbml0aW9uKSB7XG4gICAgICAgIGNvbXBlbnNhdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIGNvbXBlbnNhdGVFdmVudERlZmluaXRpb24sIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG5cbiAgLy8gQ29uZGl0aW9uYWwgRXZlbnQgRGVmaW5pdGlvblxuICB2YXIgY29uZGl0aW9uYWxFdmVudHMgPSBbXG4gICAgJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCdcbiAgXTtcblxuICBpZiAoaXNBbnkoZWxlbWVudCwgY29uZGl0aW9uYWxFdmVudHMpKSB7XG5cbiAgICAvLyBnZXQgYnVzaW5lc3Mgb2JqZWN0XG4gICAgdmFyIGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uSGVscGVyLmdldENvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xuXG4gICAgaWYgKGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uKSB7XG4gICAgICBjb25kaXRpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBjb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbiwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpO1xuICAgIH1cbiAgfVxuXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcblxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XG5cbnZhciBwYXJ0aWNpcGFudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9QYXJ0aWNpcGFudEhlbHBlcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCB0cmFuc2xhdGUpIHtcblxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICBpZiAoIWJvKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlByb2Nlc3MnKSB8fCAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBiby5nZXQoJ3Byb2Nlc3NSZWYnKSkpIHtcblxuICAgIHZhciBleGVjdXRhYmxlRW50cnkgPSBlbnRyeUZhY3RvcnkuY2hlY2tib3goe1xuICAgICAgaWQ6ICdwcm9jZXNzLWlzLWV4ZWN1dGFibGUnLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXhlY3V0YWJsZScpLFxuICAgICAgbW9kZWxQcm9wZXJ0eTogJ2lzRXhlY3V0YWJsZSdcbiAgICB9KTtcblxuICAgIC8vIGluIHBhcnRpY2lwYW50cyB3ZSBoYXZlIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBzZXQgYW5kIGdldFxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgICBleGVjdXRhYmxlRW50cnkuZ2V0ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gcGFydGljaXBhbnRIZWxwZXIuZ2V0UHJvY2Vzc0J1c2luZXNzT2JqZWN0KGVsZW1lbnQsICdpc0V4ZWN1dGFibGUnKTtcbiAgICAgIH07XG5cbiAgICAgIGV4ZWN1dGFibGVFbnRyeS5zZXQgPSBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuIHBhcnRpY2lwYW50SGVscGVyLm1vZGlmeVByb2Nlc3NCdXNpbmVzc09iamVjdChlbGVtZW50LCAnaXNFeGVjdXRhYmxlJywgdmFsdWVzKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKGV4ZWN1dGFibGVFbnRyeSk7XG4gIH1cblxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vVXRpbHMnKSxcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIHRyYW5zbGF0ZSwgb3B0aW9ucykge1xuXG4gIHZhciBkZXNjcmlwdGlvbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5kZXNjcmlwdGlvbjtcblxuICAvLyBJZFxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnZhbGlkYXRpb25Bd2FyZVRleHRGaWVsZCh7XG4gICAgaWQ6ICdpZCcsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSWQnKSxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gJiYgdHJhbnNsYXRlKGRlc2NyaXB0aW9uKSxcbiAgICBtb2RlbFByb3BlcnR5OiAnaWQnLFxuICAgIGdldFByb3BlcnR5OiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICByZXR1cm4gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkuaWQ7XG4gICAgfSxcbiAgICBzZXRQcm9wZXJ0eTogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydGllcykge1xuXG4gICAgICBlbGVtZW50ID0gZWxlbWVudC5sYWJlbFRhcmdldCB8fCBlbGVtZW50O1xuXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcHJvcGVydGllcyk7XG4gICAgfSxcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XG4gICAgICB2YXIgaWRWYWx1ZSA9IHZhbHVlcy5pZDtcblxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgICAgIHZhciBpZEVycm9yID0gdXRpbHMuaXNJZFZhbGlkKGJvLCBpZFZhbHVlLCB0cmFuc2xhdGUpO1xuXG4gICAgICByZXR1cm4gaWRFcnJvciA/IHsgaWQ6IGlkRXJyb3IgfSA6IHt9O1xuICAgIH1cbiAgfSkpO1xuXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcbiAgICBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcblxudmFyIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpO1xuXG5mdW5jdGlvbiBnZXRMaW5rRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcblxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICB2YXIgbGlua0V2ZW50RGVmaW5pdGlvbiA9IG51bGw7XG4gIGlmIChiby5ldmVudERlZmluaXRpb25zKSB7XG4gICAgZm9yRWFjaChiby5ldmVudERlZmluaXRpb25zLCBmdW5jdGlvbihldmVudERlZmluaXRpb24pIHtcbiAgICAgIGlmIChpcyhldmVudERlZmluaXRpb24sICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nKSkge1xuICAgICAgICBsaW5rRXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGxpbmtFdmVudERlZmluaXRpb247XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIHRyYW5zbGF0ZSkge1xuICB2YXIgbGlua0V2ZW50cyA9IFsgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnIF07XG5cbiAgZm9yRWFjaChsaW5rRXZlbnRzLCBmdW5jdGlvbihldmVudCkge1xuICAgIGlmIChpcyhlbGVtZW50LCBldmVudCkpIHtcblxuICAgICAgdmFyIGxpbmtFdmVudERlZmluaXRpb24gPSBnZXRMaW5rRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xuXG4gICAgICBpZiAobGlua0V2ZW50RGVmaW5pdGlvbikge1xuICAgICAgICB2YXIgZW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcbiAgICAgICAgICBpZDogJ2xpbmstZXZlbnQnLFxuICAgICAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0xpbmsgTmFtZScpLFxuICAgICAgICAgIG1vZGVsUHJvcGVydHk6ICdsaW5rLW5hbWUnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGVudHJ5LmdldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB7ICdsaW5rLW5hbWUnOiBsaW5rRXZlbnREZWZpbml0aW9uLmdldCgnbmFtZScpIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgZW50cnkuc2V0ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XG4gICAgICAgICAgdmFyIG5ld1Byb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICBuYW1lOiB2YWx1ZXNbJ2xpbmstbmFtZSddXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGxpbmtFdmVudERlZmluaXRpb24sIG5ld1Byb3BlcnRpZXMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn07XG5cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIG5hbWVFbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL05hbWUnKSxcbiAgICBjcmVhdGVDYXRlZ29yeVZhbHVlID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0NhdGVnb3J5SGVscGVyJykuY3JlYXRlQ2F0ZWdvcnlWYWx1ZSxcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgY2FudmFzLCB0cmFuc2xhdGUpIHtcblxuICBmdW5jdGlvbiBpbml0aWFsaXplQ2F0ZWdvcnkoc2VtYW50aWMpIHtcbiAgICB2YXIgcm9vdEVsZW1lbnQgPSBjYW52YXMuZ2V0Um9vdEVsZW1lbnQoKSxcbiAgICAgICAgZGVmaW5pdGlvbnMgPSBnZXRCdXNpbmVzc09iamVjdChyb290RWxlbWVudCkuJHBhcmVudCxcbiAgICAgICAgY2F0ZWdvcnlWYWx1ZSA9IGNyZWF0ZUNhdGVnb3J5VmFsdWUoZGVmaW5pdGlvbnMsIGJwbW5GYWN0b3J5KTtcblxuICAgIHNlbWFudGljLmNhdGVnb3J5VmFsdWVSZWYgPSBjYXRlZ29yeVZhbHVlO1xuXG4gIH1cblxuICBmdW5jdGlvbiBzZXRHcm91cE5hbWUoZWxlbWVudCwgdmFsdWVzKSB7XG4gICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXG4gICAgICAgIGNhdGVnb3J5VmFsdWVSZWYgPSBiby5jYXRlZ29yeVZhbHVlUmVmO1xuXG4gICAgaWYgKCFjYXRlZ29yeVZhbHVlUmVmKSB7XG4gICAgICBpbml0aWFsaXplQ2F0ZWdvcnkoYm8pO1xuICAgIH1cblxuICAgIC8vIG5lZWRzIGRpcmVjdCBjYWxsIHRvIHVwZGF0ZSBjYXRlZ29yeVZhbHVlIHByb3Blcmx5XG4gICAgcmV0dXJuIHtcbiAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTGFiZWwnLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICBuZXdMYWJlbDogdmFsdWVzLmNhdGVnb3J5VmFsdWVcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0R3JvdXBOYW1lKGVsZW1lbnQpIHtcbiAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICAgICAgdmFsdWUgPSAoYm8uY2F0ZWdvcnlWYWx1ZVJlZiB8fCB7fSkudmFsdWU7XG5cbiAgICByZXR1cm4geyBjYXRlZ29yeVZhbHVlOiB2YWx1ZSB9O1xuICB9XG5cbiAgaWYgKCFpcyhlbGVtZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJykpIHtcblxuICAgIHZhciBvcHRpb25zO1xuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XG4gICAgICBvcHRpb25zID0geyBtb2RlbFByb3BlcnR5OiAndGV4dCcsIGxhYmVsOiB0cmFuc2xhdGUoJ1RleHQnKSB9O1xuICAgIH0gZWxzZSBpZiAoaXMoZWxlbWVudCwgJ2JwbW46R3JvdXAnKSkge1xuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgbW9kZWxQcm9wZXJ0eTogJ2NhdGVnb3J5VmFsdWUnLFxuICAgICAgICBsYWJlbDogdHJhbnNsYXRlKCdDYXRlZ29yeSBWYWx1ZScpLFxuICAgICAgICBnZXQ6IGdldEdyb3VwTmFtZSxcbiAgICAgICAgc2V0OiBzZXRHcm91cE5hbWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gbmFtZVxuICAgIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChuYW1lRW50cnlGYWN0b3J5KGVsZW1lbnQsIG9wdGlvbnMsIHRyYW5zbGF0ZSkpO1xuXG4gIH1cblxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcbiAgICBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxuICAgIHBhcnRpY2lwYW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL1BhcnRpY2lwYW50SGVscGVyJyksXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxuICAgIG5hbWVFbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL05hbWUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL1V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIHRyYW5zbGF0ZSwgb3B0aW9ucykge1xuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICB2YXIgcHJvY2Vzc0lkRGVzY3JpcHRpb24gPSBvcHRpb25zICYmIG9wdGlvbnMucHJvY2Vzc0lkRGVzY3JpcHRpb247XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlByb2Nlc3MnKSB8fCAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBidXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKSkpIHtcblxuICAgIC8qKlxuICAgICAqIHByb2Nlc3NJZFxuICAgICAqL1xuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgICB2YXIgaWRFbnRyeSA9IGVudHJ5RmFjdG9yeS52YWxpZGF0aW9uQXdhcmVUZXh0RmllbGQoe1xuICAgICAgICBpZDogJ3Byb2Nlc3MtaWQnLFxuICAgICAgICBsYWJlbDogdHJhbnNsYXRlKCdQcm9jZXNzIElkJyksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBwcm9jZXNzSWREZXNjcmlwdGlvbiAmJiB0cmFuc2xhdGUocHJvY2Vzc0lkRGVzY3JpcHRpb24pLFxuICAgICAgICBtb2RlbFByb3BlcnR5OiAncHJvY2Vzc0lkJ1xuICAgICAgfSk7XG5cbiAgICAgIC8vIGluIHBhcnRpY2lwYW50cyB3ZSBoYXZlIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBzZXQgYW5kIGdldFxuICAgICAgaWRFbnRyeS5nZXQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gcGFydGljaXBhbnRIZWxwZXIuZ2V0UHJvY2Vzc0J1c2luZXNzT2JqZWN0KGVsZW1lbnQsICdpZCcpO1xuICAgICAgICByZXR1cm4geyBwcm9jZXNzSWQ6IHByb3BlcnRpZXMuaWQgfTtcbiAgICAgIH07XG5cbiAgICAgIGlkRW50cnkuc2V0ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XG4gICAgICAgIHJldHVybiBwYXJ0aWNpcGFudEhlbHBlci5tb2RpZnlQcm9jZXNzQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgJ2lkJywgeyBpZDogdmFsdWVzLnByb2Nlc3NJZCB9KTtcbiAgICAgIH07XG5cbiAgICAgIGlkRW50cnkudmFsaWRhdGUgPSBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcbiAgICAgICAgdmFyIGlkVmFsdWUgPSB2YWx1ZXMucHJvY2Vzc0lkO1xuXG4gICAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gICAgICAgIHZhciBwcm9jZXNzSWRFcnJvciA9IHV0aWxzLmlzSWRWYWxpZChiby5wcm9jZXNzUmVmLCBpZFZhbHVlLCB0cmFuc2xhdGUpO1xuXG4gICAgICAgIHJldHVybiBwcm9jZXNzSWRFcnJvciA/IHsgcHJvY2Vzc0lkOiBwcm9jZXNzSWRFcnJvciB9IDoge307XG4gICAgICB9O1xuXG4gICAgICBncm91cC5lbnRyaWVzLnB1c2goaWRFbnRyeSk7XG5cblxuICAgICAgLyoqXG4gICAgICAgKiBwcm9jZXNzIG5hbWVcbiAgICAgICAqL1xuICAgICAgdmFyIHByb2Nlc3NOYW1lRW50cnkgPSBuYW1lRW50cnlGYWN0b3J5KGVsZW1lbnQsIHtcbiAgICAgICAgaWQ6ICdwcm9jZXNzLW5hbWUnLFxuICAgICAgICBsYWJlbDogdHJhbnNsYXRlKCdQcm9jZXNzIE5hbWUnKVxuICAgICAgfSlbMF07XG5cbiAgICAgIC8vIGluIHBhcnRpY2lwYW50cyB3ZSBoYXZlIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBzZXQgYW5kIGdldFxuICAgICAgcHJvY2Vzc05hbWVFbnRyeS5nZXQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBwYXJ0aWNpcGFudEhlbHBlci5nZXRQcm9jZXNzQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgJ25hbWUnKTtcbiAgICAgIH07XG5cbiAgICAgIHByb2Nlc3NOYW1lRW50cnkuc2V0ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XG4gICAgICAgIHJldHVybiBwYXJ0aWNpcGFudEhlbHBlci5tb2RpZnlQcm9jZXNzQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgJ25hbWUnLCB2YWx1ZXMpO1xuICAgICAgfTtcblxuICAgICAgZ3JvdXAuZW50cmllcy5wdXNoKHByb2Nlc3NOYW1lRW50cnkpO1xuICAgIH1cbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XG5cbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXG4gICAgZXZlbnREZWZpbml0aW9uSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0V2ZW50RGVmaW5pdGlvbkhlbHBlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vVXRpbHMnKTtcblxudmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XG5cbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKSxcbiAgICBmaW5kID0gcmVxdWlyZSgnbG9kYXNoL2ZpbmQnKSxcbiAgICBmaWx0ZXIgPSByZXF1aXJlKCdsb2Rhc2gvZmlsdGVyJyk7XG5cblxuZnVuY3Rpb24gZ2V0Q29udGFpbmVkQWN0aXZpdGllcyhlbGVtZW50KSB7XG4gIHJldHVybiBnZXRGbG93RWxlbWVudHMoZWxlbWVudCwgJ2JwbW46QWN0aXZpdHknKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGFpbmVkQm91bmRhcnlFdmVudHMoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Rmxvd0VsZW1lbnRzKGVsZW1lbnQsICdicG1uOkJvdW5kYXJ5RXZlbnQnKTtcbn1cblxuZnVuY3Rpb24gZ2V0Rmxvd0VsZW1lbnRzKGVsZW1lbnQsIHR5cGUpIHtcbiAgcmV0dXJuIHV0aWxzLmZpbHRlckVsZW1lbnRzQnlUeXBlKGVsZW1lbnQuZmxvd0VsZW1lbnRzLCB0eXBlKTtcbn1cblxuZnVuY3Rpb24gaXNDb21wZW5zYXRpb25FdmVudEF0dGFjaGVkVG9BY3Rpdml0eShhY3Rpdml0eSwgYm91bmRhcnlFdmVudHMpIHtcbiAgdmFyIGFjdGl2aXR5SWQgPSBhY3Rpdml0eS5pZDtcbiAgdmFyIGJvdW5kYXJ5RXZlbnQgPSBmaW5kKGJvdW5kYXJ5RXZlbnRzLCBmdW5jdGlvbihib3VuZGFyeUV2ZW50KSB7XG4gICAgdmFyIGNvbXBlbnNhdGVFdmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25IZWxwZXIuZ2V0Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbihib3VuZGFyeUV2ZW50KTtcbiAgICB2YXIgYXR0YWNoZWRUb1JlZiA9IGJvdW5kYXJ5RXZlbnQuYXR0YWNoZWRUb1JlZjtcbiAgICByZXR1cm4gY29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbiAmJiBhdHRhY2hlZFRvUmVmICYmIGF0dGFjaGVkVG9SZWYuaWQgPT09IGFjdGl2aXR5SWQ7XG4gIH0pO1xuICByZXR1cm4gISFib3VuZGFyeUV2ZW50O1xufVxuXG4vLyBzdWJwcm9jZXNzOiBvbmx5IHdoZW4gaXQgaXMgbm90IHRyaWdnZXJlZEJ5RXZlbnRcbi8vIGFjdGl2aXR5OiBvbmx5IHdoZW4gaXQgYXR0YWNoIGEgY29tcGVuc2F0aW9uIGJvdW5kYXJ5IGV2ZW50XG4vLyBjYWxsQWN0aXZpdHk6IG5vIGxpbWl0YXRpb25cbmZ1bmN0aW9uIGNhbkFjdGl2aXR5QmVDb21wZW5zYXRlZChhY3Rpdml0eSwgYm91bmRhcnlFdmVudHMpIHtcbiAgcmV0dXJuIChpcyhhY3Rpdml0eSwgJ2JwbW46U3ViUHJvY2VzcycpICYmICFhY3Rpdml0eS50cmlnZ2VyZWRCeUV2ZW50KSB8fFxuICAgICAgICAgIGlzKGFjdGl2aXR5LCAnYnBtbjpDYWxsQWN0aXZpdHknKSB8fFxuICAgICAgICAgIGlzQ29tcGVuc2F0aW9uRXZlbnRBdHRhY2hlZFRvQWN0aXZpdHkoYWN0aXZpdHksIGJvdW5kYXJ5RXZlbnRzKTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aXZpdGllc0ZvckNvbXBlbnNhdGlvbihlbGVtZW50KSB7XG4gIHZhciBib3VuZGFyeUV2ZW50cyA9IGdldENvbnRhaW5lZEJvdW5kYXJ5RXZlbnRzKGVsZW1lbnQpO1xuICByZXR1cm4gZmlsdGVyKGdldENvbnRhaW5lZEFjdGl2aXRpZXMoZWxlbWVudCksIGZ1bmN0aW9uKGFjdGl2aXR5KSB7XG4gICAgcmV0dXJuIGNhbkFjdGl2aXR5QmVDb21wZW5zYXRlZChhY3Rpdml0eSwgYm91bmRhcnlFdmVudHMpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aXZpdGllc0ZvckFjdGl2aXR5UmVmKGVsZW1lbnQpIHtcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIHZhciBwYXJlbnQgPSBiby4kcGFyZW50O1xuXG4gIHZhciBhY3Rpdml0aWVzRm9yQWN0aXZpdHlSZWYgPSBnZXRBY3Rpdml0aWVzRm9yQ29tcGVuc2F0aW9uKHBhcmVudCk7XG5cbiAgLy8gaWYgdGhyb3dpbmcgY29tcGVuc2F0aW9uIGV2ZW50IGlzIGluIGFuIGV2ZW50IHN1YiBwcm9jZXNzOlxuICAvLyBnZXQgYWxzbyBhbGwgYWN0aXZpdGllcyBvdXRzaWRlIG9mIHRoZSBldmVudCBzdWIgcHJvY2Vzc1xuICBpZiAoaXMocGFyZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgcGFyZW50LnRyaWdnZXJlZEJ5RXZlbnQpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBhY3Rpdml0aWVzRm9yQWN0aXZpdHlSZWYgPSBhY3Rpdml0aWVzRm9yQWN0aXZpdHlSZWYuY29uY2F0KGdldEFjdGl2aXRpZXNGb3JDb21wZW5zYXRpb24ocGFyZW50KSk7XG4gICAgfVxuXG4gIH1cblxuICByZXR1cm4gYWN0aXZpdGllc0ZvckFjdGl2aXR5UmVmO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0eVJlZk9wdGlvbnMoZWxlbWVudCkge1xuICB2YXIgb3B0aW9ucyA9IFsgeyB2YWx1ZTogJycgfSBdO1xuXG4gIHZhciBhY3Rpdml0aWVzID0gZ2V0QWN0aXZpdGllc0ZvckFjdGl2aXR5UmVmKGVsZW1lbnQpO1xuICBmb3JFYWNoKGFjdGl2aXRpZXMsIGZ1bmN0aW9uKGFjdGl2aXR5KSB7XG4gICAgdmFyIGFjdGl2aXR5SWQgPSBhY3Rpdml0eS5pZDtcbiAgICB2YXIgbmFtZSA9IChhY3Rpdml0eS5uYW1lID8gKGFjdGl2aXR5Lm5hbWUgKyAnICcpIDogJycpICsgJyhpZD0nICsgYWN0aXZpdHlJZCArICcpJztcbiAgICBvcHRpb25zLnB1c2goeyB2YWx1ZTogYWN0aXZpdHlJZCwgbmFtZTogbmFtZSB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIGNvbXBlbnNhdGVFdmVudERlZmluaXRpb24sIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKSB7XG5cbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5jaGVja2JveCh7XG4gICAgaWQ6ICd3YWl0LWZvci1jb21wbGV0aW9uJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdXYWl0IGZvciBDb21wbGV0aW9uJyksXG4gICAgbW9kZWxQcm9wZXJ0eTogJ3dhaXRGb3JDb21wbGV0aW9uJyxcblxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2FpdEZvckNvbXBsZXRpb246IGNvbXBlbnNhdGVFdmVudERlZmluaXRpb24ud2FpdEZvckNvbXBsZXRpb25cbiAgICAgIH07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XG4gICAgICB2YWx1ZXMud2FpdEZvckNvbXBsZXRpb24gPSB2YWx1ZXMud2FpdEZvckNvbXBsZXRpb24gfHwgZmFsc2U7XG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGNvbXBlbnNhdGVFdmVudERlZmluaXRpb24sIHZhbHVlcyk7XG4gICAgfVxuICB9KSk7XG5cbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5zZWxlY3RCb3goe1xuICAgIGlkOiAnYWN0aXZpdHktcmVmJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdBY3Rpdml0eSBSZWYnKSxcbiAgICBzZWxlY3RPcHRpb25zOiBjcmVhdGVBY3Rpdml0eVJlZk9wdGlvbnMoZWxlbWVudCksXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2FjdGl2aXR5UmVmJyxcblxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIGFjdGl2aXR5UmVmID0gY29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbi5hY3Rpdml0eVJlZjtcbiAgICAgIGFjdGl2aXR5UmVmID0gYWN0aXZpdHlSZWYgJiYgYWN0aXZpdHlSZWYuaWQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhY3Rpdml0eVJlZjogYWN0aXZpdHlSZWYgfHwgJydcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XG4gICAgICB2YXIgYWN0aXZpdHlSZWYgPSB2YWx1ZXMuYWN0aXZpdHlSZWYgfHwgdW5kZWZpbmVkO1xuICAgICAgYWN0aXZpdHlSZWYgPSBhY3Rpdml0eVJlZiAmJiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50UmVnaXN0cnkuZ2V0KGFjdGl2aXR5UmVmKSk7XG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGNvbXBlbnNhdGVFdmVudERlZmluaXRpb24sIHtcbiAgICAgICAgYWN0aXZpdHlSZWY6IGFjdGl2aXR5UmVmXG4gICAgICB9KTtcbiAgICB9XG4gIH0pKTtcblxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xuXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxuICAgIGlzRXZlbnRTdWJQcm9jZXNzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9EaVV0aWwnKS5pc0V2ZW50U3ViUHJvY2VzcztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uLCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSkge1xuXG4gIHZhciBnZXRWYWx1ZSA9IGZ1bmN0aW9uKG1vZGVsUHJvcGVydHkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgdmFyIG1vZGVsUHJvcGVydHlWYWx1ZSA9IGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uLmdldCgnY2FtdW5kYTonICsgbW9kZWxQcm9wZXJ0eSk7XG4gICAgICB2YXIgdmFsdWUgPSB7fTtcblxuICAgICAgdmFsdWVbbW9kZWxQcm9wZXJ0eV0gPSBtb2RlbFByb3BlcnR5VmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgc2V0VmFsdWUgPSBmdW5jdGlvbihtb2RlbFByb3BlcnR5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xuICAgICAgdmFyIHByb3BzID0ge307XG5cbiAgICAgIHByb3BzWydjYW11bmRhOicgKyBtb2RlbFByb3BlcnR5XSA9IHZhbHVlc1ttb2RlbFByb3BlcnR5XSB8fCB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgY29uZGl0aW9uYWxFdmVudERlZmluaXRpb24sIHByb3BzKTtcbiAgICB9O1xuICB9O1xuXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcbiAgICBpZDogJ3ZhcmlhYmxlTmFtZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmFyaWFibGUgTmFtZScpLFxuICAgIG1vZGVsUHJvcGVydHkgOiAndmFyaWFibGVOYW1lJyxcblxuICAgIGdldDogZ2V0VmFsdWUoJ3ZhcmlhYmxlTmFtZScpLFxuICAgIHNldDogc2V0VmFsdWUoJ3ZhcmlhYmxlTmFtZScpXG4gIH0pKTtcblxuICB2YXIgaXNDb25kaXRpb25hbFN0YXJ0RXZlbnQgPVxuICAgIGlzKGVsZW1lbnQsICdicG1uOlN0YXJ0RXZlbnQnKSAmJiAhaXNFdmVudFN1YlByb2Nlc3MoZWxlbWVudC5wYXJlbnQpO1xuXG4gIGlmICghaXNDb25kaXRpb25hbFN0YXJ0RXZlbnQpIHtcbiAgICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XG4gICAgICBpZDogJ3ZhcmlhYmxlRXZlbnQnLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmFyaWFibGUgRXZlbnQnKSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0cmFuc2xhdGUoJ1NwZWNpZnkgbW9yZSB0aGFuIG9uZSB2YXJpYWJsZSBjaGFuZ2UgZXZlbnQgYXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdC4nKSxcbiAgICAgIG1vZGVsUHJvcGVydHkgOiAndmFyaWFibGVFdmVudCcsXG5cbiAgICAgIGdldDogZ2V0VmFsdWUoJ3ZhcmlhYmxlRXZlbnQnKSxcbiAgICAgIHNldDogc2V0VmFsdWUoJ3ZhcmlhYmxlRXZlbnQnKVxuICAgIH0pKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XG5cbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGVudHJ5IHRvIG1vZGlmeSBhIHByb3BlcnR5IG9mIGFuIGVsZW1lbnQgd2hpY2hcbiAqIGlzIHJlZmVyZW5jZWQgYnkgYSBldmVudCBkZWZpbml0aW9uLlxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSBkZWZpbml0aW9uXG4gKiBAcGFyYW0gIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmlkIHRoZSBpZCBvZiB0aGUgZW50cnlcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5sYWJlbCB0aGUgbGFiZWwgb2YgdGhlIGVudHJ5XG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMucmVmZXJlbmNlUHJvcGVydHkgdGhlIG5hbWUgb2YgcmVmZXJlbmNpbmcgcHJvcGVydHlcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5tb2RlbFByb3BlcnR5IHRoZSBuYW1lIG9mIHByb3BlcnR5IHRvIG1vZGlmeVxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLnNob3VsZFZhbGlkYXRlIGEgZmxhZyBpbmRpY2F0ZSB3aGV0aGVyIHRvIHZhbGlkYXRlIG9yIG5vdFxuICpcbiAqIEByZXR1cm4ge0FycmF5PE9iamVjdD59IHJldHVybiBhbiBhcnJheSBjb250YWluaW5nIHRoZSBlbnRyaWVzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgZGVmaW5pdGlvbiwgYnBtbkZhY3RvcnksIG9wdGlvbnMpIHtcblxuICB2YXIgaWQgPSBvcHRpb25zLmlkIHx8ICdlbGVtZW50LXByb3BlcnR5JztcbiAgdmFyIGxhYmVsID0gb3B0aW9ucy5sYWJlbDtcbiAgdmFyIHJlZmVyZW5jZVByb3BlcnR5ID0gb3B0aW9ucy5yZWZlcmVuY2VQcm9wZXJ0eTtcbiAgdmFyIG1vZGVsUHJvcGVydHkgPSBvcHRpb25zLm1vZGVsUHJvcGVydHkgfHwgJ25hbWUnO1xuICB2YXIgc2hvdWxkVmFsaWRhdGUgPSBvcHRpb25zLnNob3VsZFZhbGlkYXRlIHx8IGZhbHNlO1xuXG4gIHZhciBlbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xuICAgIGlkOiBpZCxcbiAgICBsYWJlbDogbGFiZWwsXG4gICAgbW9kZWxQcm9wZXJ0eTogbW9kZWxQcm9wZXJ0eSxcblxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgdmFyIHJlZmVyZW5jZSA9IGRlZmluaXRpb24uZ2V0KHJlZmVyZW5jZVByb3BlcnR5KTtcbiAgICAgIHZhciBwcm9wcyA9IHt9O1xuICAgICAgcHJvcHNbbW9kZWxQcm9wZXJ0eV0gPSByZWZlcmVuY2UgJiYgcmVmZXJlbmNlLmdldChtb2RlbFByb3BlcnR5KTtcbiAgICAgIHJldHVybiBwcm9wcztcbiAgICB9LFxuXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcbiAgICAgIHZhciByZWZlcmVuY2UgPSBkZWZpbml0aW9uLmdldChyZWZlcmVuY2VQcm9wZXJ0eSk7XG4gICAgICB2YXIgcHJvcHMgPSB7fTtcbiAgICAgIHByb3BzW21vZGVsUHJvcGVydHldID0gdmFsdWVzW21vZGVsUHJvcGVydHldIHx8IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgcmVmZXJlbmNlLCBwcm9wcyk7XG4gICAgfSxcblxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgcmV0dXJuICFkZWZpbml0aW9uLmdldChyZWZlcmVuY2VQcm9wZXJ0eSk7XG4gICAgfVxuICB9KTtcblxuICBpZiAoc2hvdWxkVmFsaWRhdGUpIHtcbiAgICBlbnRyeS52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xuICAgICAgdmFyIHJlZmVyZW5jZSA9IGRlZmluaXRpb24uZ2V0KHJlZmVyZW5jZVByb3BlcnR5KTtcbiAgICAgIGlmIChyZWZlcmVuY2UgJiYgIXZhbHVlc1ttb2RlbFByb3BlcnR5XSkge1xuICAgICAgICB2YXIgdmFsaWRhdGlvbkVycm9ycyA9IHt9O1xuICAgICAgICB2YWxpZGF0aW9uRXJyb3JzW21vZGVsUHJvcGVydHldID0gJ011c3QgcHJvdmlkZSBhIHZhbHVlJztcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvcnM7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBbIGVudHJ5IF07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZXZlbnREZWZpbml0aW9uUmVmZXJlbmNlID0gcmVxdWlyZSgnLi9FdmVudERlZmluaXRpb25SZWZlcmVuY2UnKSxcbiAgICBlbGVtZW50UmVmZXJlbmNlUHJvcGVydHkgPSByZXF1aXJlKCcuL0VsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eScpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlcnJvckV2ZW50RGVmaW5pdGlvbiwgdHJhbnNsYXRlKSB7XG5cblxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoZXZlbnREZWZpbml0aW9uUmVmZXJlbmNlKGVsZW1lbnQsIGVycm9yRXZlbnREZWZpbml0aW9uLCBicG1uRmFjdG9yeSwge1xuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Vycm9yJyksXG4gICAgZWxlbWVudE5hbWU6ICdlcnJvcicsXG4gICAgZWxlbWVudFR5cGU6ICdicG1uOkVycm9yJyxcbiAgICByZWZlcmVuY2VQcm9wZXJ0eTogJ2Vycm9yUmVmJyxcbiAgICBuZXdFbGVtZW50SWRQcmVmaXg6ICdFcnJvcl8nXG4gIH0pKTtcblxuXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChlbGVtZW50UmVmZXJlbmNlUHJvcGVydHkoZWxlbWVudCwgZXJyb3JFdmVudERlZmluaXRpb24sIGJwbW5GYWN0b3J5LCB7XG4gICAgaWQ6ICdlcnJvci1lbGVtZW50LW5hbWUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Vycm9yIE5hbWUnKSxcbiAgICByZWZlcmVuY2VQcm9wZXJ0eTogJ2Vycm9yUmVmJyxcbiAgICBtb2RlbFByb3BlcnR5OiAnbmFtZScsXG4gICAgc2hvdWxkVmFsaWRhdGU6IHRydWVcbiAgfSkpO1xuXG5cbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eShlbGVtZW50LCBlcnJvckV2ZW50RGVmaW5pdGlvbiwgYnBtbkZhY3RvcnksIHtcbiAgICBpZDogJ2Vycm9yLWVsZW1lbnQtY29kZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXJyb3IgQ29kZScpLFxuICAgIHJlZmVyZW5jZVByb3BlcnR5OiAnZXJyb3JSZWYnLFxuICAgIG1vZGVsUHJvcGVydHk6ICdlcnJvckNvZGUnXG4gIH0pKTtcblxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xuXG52YXIgZXZlbnREZWZpbml0aW9uUmVmZXJlbmNlID0gcmVxdWlyZSgnLi9FdmVudERlZmluaXRpb25SZWZlcmVuY2UnKSxcbiAgICBlbGVtZW50UmVmZXJlbmNlUHJvcGVydHkgPSByZXF1aXJlKCcuL0VsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eScpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uLCBzaG93RXNjYWxhdGlvbkNvZGVWYXJpYWJsZSwgdHJhbnNsYXRlKSB7XG5cbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGV2ZW50RGVmaW5pdGlvblJlZmVyZW5jZShlbGVtZW50LCBlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uLCBicG1uRmFjdG9yeSwge1xuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0VzY2FsYXRpb24nKSxcbiAgICBlbGVtZW50TmFtZTogJ2VzY2FsYXRpb24nLFxuICAgIGVsZW1lbnRUeXBlOiAnYnBtbjpFc2NhbGF0aW9uJyxcbiAgICByZWZlcmVuY2VQcm9wZXJ0eTogJ2VzY2FsYXRpb25SZWYnLFxuICAgIG5ld0VsZW1lbnRJZFByZWZpeDogJ0VzY2FsYXRpb25fJ1xuICB9KSk7XG5cblxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoZWxlbWVudFJlZmVyZW5jZVByb3BlcnR5KGVsZW1lbnQsIGVzY2FsYXRpb25FdmVudERlZmluaXRpb24sIGJwbW5GYWN0b3J5LCB7XG4gICAgaWQ6ICdlc2NhbGF0aW9uLWVsZW1lbnQtbmFtZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXNjYWxhdGlvbiBOYW1lJyksXG4gICAgcmVmZXJlbmNlUHJvcGVydHk6ICdlc2NhbGF0aW9uUmVmJyxcbiAgICBtb2RlbFByb3BlcnR5OiAnbmFtZScsXG4gICAgc2hvdWxkVmFsaWRhdGU6IHRydWVcbiAgfSkpO1xuXG5cbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eShlbGVtZW50LCBlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uLCBicG1uRmFjdG9yeSwge1xuICAgIGlkOiAnZXNjYWxhdGlvbi1lbGVtZW50LWNvZGUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0VzY2FsYXRpb24gQ29kZScpLFxuICAgIHJlZmVyZW5jZVByb3BlcnR5OiAnZXNjYWxhdGlvblJlZicsXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2VzY2FsYXRpb25Db2RlJ1xuICB9KSk7XG5cblxuICBpZiAoc2hvd0VzY2FsYXRpb25Db2RlVmFyaWFibGUpIHtcbiAgICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XG4gICAgICBpZCA6ICdlc2NhbGF0aW9uQ29kZVZhcmlhYmxlJyxcbiAgICAgIGxhYmVsIDogdHJhbnNsYXRlKCdFc2NhbGF0aW9uIENvZGUgVmFyaWFibGUnKSxcbiAgICAgIG1vZGVsUHJvcGVydHkgOiAnZXNjYWxhdGlvbkNvZGVWYXJpYWJsZScsXG5cbiAgICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICB2YXIgY29kZVZhcmlhYmxlID0gZXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbi5nZXQoJ2NhbXVuZGE6ZXNjYWxhdGlvbkNvZGVWYXJpYWJsZScpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVzY2FsYXRpb25Db2RlVmFyaWFibGU6IGNvZGVWYXJpYWJsZVxuICAgICAgICB9O1xuICAgICAgfSxcblxuICAgICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uLCB7XG4gICAgICAgICAgJ2NhbXVuZGE6ZXNjYWxhdGlvbkNvZGVWYXJpYWJsZSc6IHZhbHVlcy5lc2NhbGF0aW9uQ29kZVZhcmlhYmxlIHx8IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XG5cbnZhciBkb21RdWVyeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5xdWVyeSxcbiAgICBkb21pZnkgPSByZXF1aXJlKCdtaW4tZG9tJykuZG9taWZ5LFxuICAgIGRvbUF0dHIgPSByZXF1aXJlKCdtaW4tZG9tJykuYXR0cjtcblxudmFyIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpLFxuICAgIGZpbmQgPSByZXF1aXJlKCdsb2Rhc2gvZmluZCcpO1xuXG52YXIgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9VdGlscycpLFxuICAgIGVzY2FwZUhUTUwgPSB1dGlscy5lc2NhcGVIVE1MO1xuXG52YXIgc2VsZWN0b3IgPSAnc2VsZWN0W25hbWU9c2VsZWN0ZWRFbGVtZW50XSc7XG5cbi8qKlxuICogR2V0IHNlbGVjdCBib3ggY29udGFpbmluZyBhbGwgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKlxuICogQHJldHVybiB7RE9NRWxlbWVudH0gdGhlIHNlbGVjdCBib3hcbiAqL1xuZnVuY3Rpb24gZ2V0U2VsZWN0Qm94KG5vZGUpIHtcbiAgcmV0dXJuIGRvbVF1ZXJ5KHNlbGVjdG9yLCBub2RlLnBhcmVudEVsZW1lbnQpO1xufVxuXG4vKipcbiAqIEZpbmQgZWxlbWVudCBieSBnaXZlbiBpZC5cbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGV2ZW50RGVmaW5pdGlvblxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9IGFuIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZmluZEVsZW1lbnRCeUlkKGV2ZW50RGVmaW5pdGlvbiwgdHlwZSwgaWQpIHtcbiAgdmFyIGVsZW1lbnRzID0gdXRpbHMuZmluZFJvb3RFbGVtZW50c0J5VHlwZShldmVudERlZmluaXRpb24sIHR5cGUpO1xuICByZXR1cm4gZmluZChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LmlkID09PSBpZDtcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGVudHJ5IHRvIG1vZGlmeSB0aGUgcmVmZXJlbmNlIHRvIGFuIGVsZW1lbnQgZnJvbSBhblxuICogZXZlbnQgZGVmaW5pdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gZGVmaW5pdGlvblxuICogQHBhcmFtICB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5sYWJlbCB0aGUgbGFiZWwgb2YgdGhlIGVudHJ5XG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMuZGVzY3JpcHRpb24gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBlbnRyeVxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmVsZW1lbnROYW1lIHRoZSBuYW1lIG9mIHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMuZWxlbWVudFR5cGUgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5yZWZlcmVuY2VQcm9wZXJ0eSB0aGUgbmFtZSBvZiByZWZlcmVuY2luZyBwcm9wZXJ0eVxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLm5ld0VsZW1lbnRJZFByZWZpeCB0aGUgcHJlZml4IG9mIGEgbmV3IGNyZWF0ZWQgZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge0FycmF5PE9iamVjdD59IHJldHVybiBhbiBhcnJheSBjb250YWluaW5nIHRoZSBlbnRyaWVzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgZGVmaW5pdGlvbiwgYnBtbkZhY3RvcnksIG9wdGlvbnMpIHtcblxuICB2YXIgZWxlbWVudE5hbWUgPSBvcHRpb25zLmVsZW1lbnROYW1lIHx8ICcnLFxuICAgICAgZWxlbWVudFR5cGUgPSBvcHRpb25zLmVsZW1lbnRUeXBlLFxuICAgICAgcmVmZXJlbmNlUHJvcGVydHkgPSBvcHRpb25zLnJlZmVyZW5jZVByb3BlcnR5O1xuXG4gIHZhciBuZXdFbGVtZW50SWRQcmVmaXggPSBvcHRpb25zLm5ld0VsZW1lbnRJZFByZWZpeCB8fCAnZWxlbV8nO1xuXG4gIHZhciBsYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwgJycsXG4gICAgICBkZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRpb24gfHwgJyc7XG5cbiAgdmFyIGVudHJpZXMgPSBbXTtcblxuICBlbnRyaWVzLnB1c2goe1xuXG4gICAgaWQ6ICdldmVudC1kZWZpbml0aW9ucy0nICsgZWxlbWVudE5hbWUsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICAgIGh0bWw6ICc8ZGl2IGNsYXNzPVwiYnBwLXJvdyBicHAtc2VsZWN0XCI+JyArXG4gICAgICAgICAgICAgJzxsYWJlbCBmb3I9XCJjYW11bmRhLScgKyBlc2NhcGVIVE1MKGVsZW1lbnROYW1lKSArICdcIj4nICsgZXNjYXBlSFRNTChsYWJlbCkgKyAnPC9sYWJlbD4nICtcbiAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cImJwcC1maWVsZC13cmFwcGVyXCI+JyArXG4gICAgICAgICAgICAgICAnPHNlbGVjdCBpZD1cImNhbXVuZGEtJyArIGVzY2FwZUhUTUwoZWxlbWVudE5hbWUpICsgJ1wiIG5hbWU9XCJzZWxlY3RlZEVsZW1lbnRcIiBkYXRhLXZhbHVlPicgK1xuICAgICAgICAgICAgICAgJzwvc2VsZWN0PicgK1xuICAgICAgICAgICAgICAgJzxidXR0b24gY2xhc3M9XCJhZGRcIiBpZD1cImFkZEVsZW1lbnRcIiBkYXRhLWFjdGlvbj1cImFkZEVsZW1lbnRcIj48c3Bhbj4rPC9zcGFuPjwvYnV0dG9uPicgK1xuICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAnPC9kaXY+JyxcblxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgZW50cnlOb2RlKSB7XG4gICAgICB1dGlscy51cGRhdGVPcHRpb25zRHJvcERvd24oc2VsZWN0b3IsIGRlZmluaXRpb24sIGVsZW1lbnRUeXBlLCBlbnRyeU5vZGUpO1xuICAgICAgdmFyIHJlZmVyZW5jZSA9IGRlZmluaXRpb24uZ2V0KHJlZmVyZW5jZVByb3BlcnR5KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNlbGVjdGVkRWxlbWVudDogKHJlZmVyZW5jZSAmJiByZWZlcmVuY2UuaWQpIHx8ICcnXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xuICAgICAgdmFyIHNlbGVjdGlvbiA9IHZhbHVlcy5zZWxlY3RlZEVsZW1lbnQ7XG5cbiAgICAgIHZhciBwcm9wcyA9IHt9O1xuXG4gICAgICBpZiAoIXNlbGVjdGlvbiB8fCB0eXBlb2Ygc2VsZWN0aW9uID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvLyByZW1vdmUgcmVmZXJlbmNlIHRvIGVsZW1lbnRcbiAgICAgICAgcHJvcHNbcmVmZXJlbmNlUHJvcGVydHldID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGRlZmluaXRpb24sIHByb3BzKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbW1hbmRzID0gW107XG5cbiAgICAgIHZhciBzZWxlY3RlZEVsZW1lbnQgPSBmaW5kRWxlbWVudEJ5SWQoZGVmaW5pdGlvbiwgZWxlbWVudFR5cGUsIHNlbGVjdGlvbik7XG4gICAgICBpZiAoIXNlbGVjdGVkRWxlbWVudCkge1xuICAgICAgICB2YXIgcm9vdCA9IHV0aWxzLmdldFJvb3QoZGVmaW5pdGlvbik7XG5cbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGVsZW1lbnRcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50ID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KGVsZW1lbnRUeXBlLCB7IG5hbWU6IHNlbGVjdGlvbiB9LCByb290LCBicG1uRmFjdG9yeSk7XG4gICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLmFkZEFuZFJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoZWxlbWVudCwgcm9vdCwgJ3Jvb3RFbGVtZW50cycsIG51bGwsIFsgc2VsZWN0ZWRFbGVtZW50IF0pKTtcbiAgICAgIH1cblxuICAgICAgLy8gdXBkYXRlIHJlZmVyZW5jZSB0byBlbGVtZW50XG4gICAgICBwcm9wc1tyZWZlcmVuY2VQcm9wZXJ0eV0gPSBzZWxlY3RlZEVsZW1lbnQ7XG4gICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBkZWZpbml0aW9uLCBwcm9wcykpO1xuXG4gICAgICByZXR1cm4gY29tbWFuZHM7XG4gICAgfSxcblxuICAgIGFkZEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSkge1xuICAgICAgLy8gbm90ZTogdGhpcyBnZW5lcmF0ZWQgaWQgd2lsbCBiZSB1c2VkIGFzIG5hbWVcbiAgICAgIC8vIG9mIHRoZSBlbGVtZW50IGFuZCBub3QgYXMgaWRcbiAgICAgIHZhciBpZCA9IHV0aWxzLm5leHRJZChuZXdFbGVtZW50SWRQcmVmaXgpO1xuXG4gICAgICB2YXIgb3B0aW9uVGVtcGxhdGUgPSBkb21pZnkoJzxvcHRpb24gdmFsdWU9XCInICsgZXNjYXBlSFRNTChpZCkgKyAnXCI+IChpZD0nK2VzY2FwZUhUTUwoaWQpKycpJyArICc8L29wdGlvbj4nKTtcblxuICAgICAgLy8gYWRkIG5ldyBvcHRpb25cbiAgICAgIHZhciBzZWxlY3RCb3ggPSBnZXRTZWxlY3RCb3goaW5wdXROb2RlKTtcbiAgICAgIHNlbGVjdEJveC5pbnNlcnRCZWZvcmUob3B0aW9uVGVtcGxhdGUsIHNlbGVjdEJveC5maXJzdENoaWxkKTtcblxuICAgICAgLy8gc2VsZWN0IG5ldyBlbGVtZW50IGluIHRoZSBzZWxlY3QgYm94XG4gICAgICBmb3JFYWNoKHNlbGVjdEJveCwgZnVuY3Rpb24ob3B0aW9uKSB7XG4gICAgICAgIGlmIChvcHRpb24udmFsdWUgPT09IGlkKSB7XG4gICAgICAgICAgZG9tQXR0cihvcHRpb24sICdzZWxlY3RlZCcsICdzZWxlY3RlZCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbUF0dHIob3B0aW9uLCAnc2VsZWN0ZWQnLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICB9KTtcblxuICByZXR1cm4gZW50cmllcztcblxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGV2ZW50RGVmaW5pdGlvblJlZmVyZW5jZSA9IHJlcXVpcmUoJy4vRXZlbnREZWZpbml0aW9uUmVmZXJlbmNlJyksXG4gICAgZWxlbWVudFJlZmVyZW5jZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9FbGVtZW50UmVmZXJlbmNlUHJvcGVydHknKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgbWVzc2FnZUV2ZW50RGVmaW5pdGlvbiwgdHJhbnNsYXRlKSB7XG5cbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGV2ZW50RGVmaW5pdGlvblJlZmVyZW5jZShlbGVtZW50LCBtZXNzYWdlRXZlbnREZWZpbml0aW9uLCBicG1uRmFjdG9yeSwge1xuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ01lc3NhZ2UnKSxcbiAgICBlbGVtZW50TmFtZTogJ21lc3NhZ2UnLFxuICAgIGVsZW1lbnRUeXBlOiAnYnBtbjpNZXNzYWdlJyxcbiAgICByZWZlcmVuY2VQcm9wZXJ0eTogJ21lc3NhZ2VSZWYnLFxuICAgIG5ld0VsZW1lbnRJZFByZWZpeDogJ01lc3NhZ2VfJ1xuICB9KSk7XG5cblxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoZWxlbWVudFJlZmVyZW5jZVByb3BlcnR5KGVsZW1lbnQsIG1lc3NhZ2VFdmVudERlZmluaXRpb24sIGJwbW5GYWN0b3J5LCB7XG4gICAgaWQ6ICdtZXNzYWdlLWVsZW1lbnQtbmFtZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTWVzc2FnZSBOYW1lJyksXG4gICAgcmVmZXJlbmNlUHJvcGVydHk6ICdtZXNzYWdlUmVmJyxcbiAgICBtb2RlbFByb3BlcnR5OiAnbmFtZScsXG4gICAgc2hvdWxkVmFsaWRhdGU6IHRydWVcbiAgfSkpO1xuXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gZW50cnkgdG8gbW9kaWZ5IHRoZSBuYW1lIG9mIGFuIGFuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmlkIHRoZSBpZCBvZiB0aGUgZW50cnlcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5sYWJlbCB0aGUgbGFiZWwgb2YgdGhlIGVudHJ5XG4gKlxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gcmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBlbnRyeSB0byBtb2RpZnkgdGhlIG5hbWVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIGlkID0gb3B0aW9ucy5pZCB8fCAnbmFtZScsXG4gICAgICBsYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwgdHJhbnNsYXRlKCdOYW1lJyksXG4gICAgICBtb2RlbFByb3BlcnR5ID0gb3B0aW9ucy5tb2RlbFByb3BlcnR5IHx8ICduYW1lJztcblxuICB2YXIgbmFtZUVudHJ5ID0gZW50cnlGYWN0b3J5LnRleHRCb3goe1xuICAgIGlkOiBpZCxcbiAgICBsYWJlbDogbGFiZWwsXG4gICAgbW9kZWxQcm9wZXJ0eTogbW9kZWxQcm9wZXJ0eSxcbiAgICBnZXQ6IG9wdGlvbnMuZ2V0LFxuICAgIHNldDogb3B0aW9ucy5zZXRcbiAgfSk7XG5cbiAgcmV0dXJuIFsgbmFtZUVudHJ5IF07XG5cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBldmVudERlZmluaXRpb25SZWZlcmVuY2UgPSByZXF1aXJlKCcuL0V2ZW50RGVmaW5pdGlvblJlZmVyZW5jZScpLFxuICAgIGVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vRWxlbWVudFJlZmVyZW5jZVByb3BlcnR5Jyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHNpZ25hbEV2ZW50RGVmaW5pdGlvbiwgdHJhbnNsYXRlKSB7XG5cbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGV2ZW50RGVmaW5pdGlvblJlZmVyZW5jZShlbGVtZW50LCBzaWduYWxFdmVudERlZmluaXRpb24sIGJwbW5GYWN0b3J5LCB7XG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnU2lnbmFsJyksXG4gICAgZWxlbWVudE5hbWU6ICdzaWduYWwnLFxuICAgIGVsZW1lbnRUeXBlOiAnYnBtbjpTaWduYWwnLFxuICAgIHJlZmVyZW5jZVByb3BlcnR5OiAnc2lnbmFsUmVmJyxcbiAgICBuZXdFbGVtZW50SWRQcmVmaXg6ICdTaWduYWxfJ1xuICB9KSk7XG5cblxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoZWxlbWVudFJlZmVyZW5jZVByb3BlcnR5KGVsZW1lbnQsIHNpZ25hbEV2ZW50RGVmaW5pdGlvbiwgYnBtbkZhY3RvcnksIHtcbiAgICBpZDogJ3NpZ25hbC1lbGVtZW50LW5hbWUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1NpZ25hbCBOYW1lJyksXG4gICAgcmVmZXJlbmNlUHJvcGVydHk6ICdzaWduYWxSZWYnLFxuICAgIG1vZGVsUHJvcGVydHk6ICduYW1lJyxcbiAgICBzaG91bGRWYWxpZGF0ZTogdHJ1ZVxuICB9KSk7XG5cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKSxcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XG5cbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xuXG4vKipcbiAqIEdldCB0aGUgdGltZXIgZGVmaW5pdGlvbiB0eXBlIGZvciBhIGdpdmVuIHRpbWVyIGV2ZW50IGRlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50PGJwbW46VGltZXJFdmVudERlZmluaXRpb24+fSB0aW1lclxuICpcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9IHRoZSB0aW1lciBkZWZpbml0aW9uIHR5cGVcbiAqL1xuZnVuY3Rpb24gZ2V0VGltZXJEZWZpbml0aW9uVHlwZSh0aW1lcikge1xuICB2YXIgdGltZURhdGUgPSB0aW1lci5nZXQoJ3RpbWVEYXRlJyk7XG4gIGlmICh0eXBlb2YgdGltZURhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuICd0aW1lRGF0ZSc7XG4gIH1cblxuICB2YXIgdGltZUN5Y2xlID0gdGltZXIuZ2V0KCd0aW1lQ3ljbGUnKTtcbiAgaWYgKHR5cGVvZiB0aW1lQ3ljbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuICd0aW1lQ3ljbGUnO1xuICB9XG5cbiAgdmFyIHRpbWVEdXJhdGlvbiA9IHRpbWVyLmdldCgndGltZUR1cmF0aW9uJyk7XG4gIGlmICh0eXBlb2YgdGltZUR1cmF0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiAndGltZUR1cmF0aW9uJztcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgJ2JwbW46Rm9ybWFsRXhwcmVzc2lvbicgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmd9IGJvZHlcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudDxicG1uOkZvcm1hbEV4cHJlc3Npb24+fSBhIGZvcm1hbCBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUZvcm1hbEV4cHJlc3Npb24ocGFyZW50LCBib2R5LCBicG1uRmFjdG9yeSkge1xuICBib2R5ID0gYm9keSB8fCB1bmRlZmluZWQ7XG4gIHJldHVybiBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2JwbW46Rm9ybWFsRXhwcmVzc2lvbicsIHsgYm9keTogYm9keSB9LCBwYXJlbnQsIGJwbW5GYWN0b3J5KTtcbn1cblxuZnVuY3Rpb24gVGltZXJFdmVudERlZmluaXRpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0aW1lckV2ZW50RGVmaW5pdGlvbiwgdHJhbnNsYXRlKSB7XG5cbiAgdmFyIHNlbGVjdE9wdGlvbnMgPSBbXG4gICAgeyB2YWx1ZTogJ3RpbWVEYXRlJywgbmFtZTogdHJhbnNsYXRlKCdEYXRlJykgfSxcbiAgICB7IHZhbHVlOiAndGltZUR1cmF0aW9uJywgbmFtZTogdHJhbnNsYXRlKCdEdXJhdGlvbicpIH0sXG4gICAgeyB2YWx1ZTogJ3RpbWVDeWNsZScsIG5hbWU6IHRyYW5zbGF0ZSgnQ3ljbGUnKSB9XG4gIF07XG5cbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5zZWxlY3RCb3goe1xuICAgIGlkOiAndGltZXItZXZlbnQtZGVmaW5pdGlvbi10eXBlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUaW1lciBEZWZpbml0aW9uIFR5cGUnKSxcbiAgICBzZWxlY3RPcHRpb25zOiBzZWxlY3RPcHRpb25zLFxuICAgIGVtcHR5UGFyYW1ldGVyOiB0cnVlLFxuICAgIG1vZGVsUHJvcGVydHk6ICd0aW1lckRlZmluaXRpb25UeXBlJyxcblxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGltZXJEZWZpbml0aW9uVHlwZTogZ2V0VGltZXJEZWZpbml0aW9uVHlwZSh0aW1lckV2ZW50RGVmaW5pdGlvbikgfHwgJydcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIHRpbWVEdXJhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICB0aW1lRGF0ZTogdW5kZWZpbmVkLFxuICAgICAgICB0aW1lQ3ljbGU6IHVuZGVmaW5lZFxuICAgICAgfTtcblxuICAgICAgdmFyIG5ld1R5cGUgPSB2YWx1ZXMudGltZXJEZWZpbml0aW9uVHlwZTtcbiAgICAgIGlmICh2YWx1ZXMudGltZXJEZWZpbml0aW9uVHlwZSkge1xuICAgICAgICB2YXIgb2xkVHlwZSA9IGdldFRpbWVyRGVmaW5pdGlvblR5cGUodGltZXJFdmVudERlZmluaXRpb24pO1xuXG4gICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgaWYgKG9sZFR5cGUpIHtcbiAgICAgICAgICB2YXIgZGVmaW5pdGlvbiA9IHRpbWVyRXZlbnREZWZpbml0aW9uLmdldChvbGRUeXBlKTtcbiAgICAgICAgICB2YWx1ZSA9IGRlZmluaXRpb24uZ2V0KCdib2R5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wc1tuZXdUeXBlXSA9IGNyZWF0ZUZvcm1hbEV4cHJlc3Npb24odGltZXJFdmVudERlZmluaXRpb24sIHZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgdGltZXJFdmVudERlZmluaXRpb24sIHByb3BzKTtcbiAgICB9XG5cbiAgfSkpO1xuXG5cbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xuICAgIGlkOiAndGltZXItZXZlbnQtZGVmaW5pdGlvbicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVGltZXIgRGVmaW5pdGlvbicpLFxuICAgIG1vZGVsUHJvcGVydHk6ICd0aW1lckRlZmluaXRpb24nLFxuXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgICB2YXIgdHlwZSA9IGdldFRpbWVyRGVmaW5pdGlvblR5cGUodGltZXJFdmVudERlZmluaXRpb24pO1xuICAgICAgdmFyIGRlZmluaXRpb24gPSB0eXBlICYmIHRpbWVyRXZlbnREZWZpbml0aW9uLmdldCh0eXBlKTtcbiAgICAgIHZhciB2YWx1ZSA9IGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi5nZXQoJ2JvZHknKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpbWVyRGVmaW5pdGlvbjogdmFsdWVcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XG4gICAgICB2YXIgdHlwZSA9IGdldFRpbWVyRGVmaW5pdGlvblR5cGUodGltZXJFdmVudERlZmluaXRpb24pO1xuICAgICAgdmFyIGRlZmluaXRpb24gPSB0eXBlICYmIHRpbWVyRXZlbnREZWZpbml0aW9uLmdldCh0eXBlKTtcblxuICAgICAgaWYgKGRlZmluaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBkZWZpbml0aW9uLCB7XG4gICAgICAgICAgYm9keTogdmFsdWVzLnRpbWVyRGVmaW5pdGlvbiB8fCB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICB2YXIgdHlwZSA9IGdldFRpbWVyRGVmaW5pdGlvblR5cGUodGltZXJFdmVudERlZmluaXRpb24pO1xuICAgICAgdmFyIGRlZmluaXRpb24gPSB0eXBlICYmIHRpbWVyRXZlbnREZWZpbml0aW9uLmdldCh0eXBlKTtcbiAgICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGRlZmluaXRpb24uZ2V0KCdib2R5Jyk7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGltZXJEZWZpbml0aW9uOiB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJylcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuICFnZXRUaW1lckRlZmluaXRpb25UeXBlKHRpbWVyRXZlbnREZWZpbml0aW9uKTtcbiAgICB9XG5cbiAgfSkpO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGltZXJFdmVudERlZmluaXRpb247XG4iLCIvKipcclxuICogQGRlc2NyaXB0aW9uIOWFqOWxgOWKn+iDveWwgeijhVxyXG4gKiBAYXV0aG9yIHpyXHJcbiAqIEB0eXBlIHt7cmVnaXN0ZXJGaWxlRHJvcCgqLCAqKTogdm9pZCwgc2F2ZUJwbW4oT2JqZWN0KTogdm9pZCwgaGFuZGxlRHJhZ092ZXIoKik6IHZvaWQsIHNldENvbG9yKE9iamVjdCk6IHZvaWQsIGRvd25Mb2FkKE9iamVjdCk6IHZvaWQsIHVwbG9hZChPYmplY3QsIE9iamVjdCwgT2JqZWN0KTogdm9pZCwgaGFuZGxlRmlsZVNlbGVjdCgqKTogdm9pZCwgc2V0RW5jb2RlZChPYmplY3QsIHN0cmluZywgc3RyaW5nKTogdm9pZCwgb3BlbkZyb21VcmwoT2JqZWN0LCBPYmplY3QsIE9iamVjdCwgc3RyaW5nKTogdm9pZCwgY3JlYXRlRGlhZ3JhbShzdHJpbmcsIE9iamVjdCwgT2JqZWN0KTogUHJvbWlzZTx2b2lkPiwgZ2V0VXJsUGFyYW06IHRvb2xzLmdldFVybFBhcmFtfX1cclxuICovXHJcblxyXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xyXG5jb25zdCBwcm9Ib3N0ID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgd2luZG93LmxvY2F0aW9uLmhvc3Q7XHJcbmNvbnN0IGhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdChcImJwbW5qc1wiKVswXTtcclxuY29uc3Qga2V5ID0gaHJlZi5zcGxpdCh3aW5kb3cubG9jYXRpb24uaG9zdClbMV07XHJcbmNvbnN0IHB1YmxpY3VybCA9IHByb0hvc3QgKyBrZXk7XHJcbmNvbnN0IHRvb2xzID0ge1xyXG4gICAgcmVnaXN0ZXJGaWxlRHJvcChjb250YWluZXIsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29udGFpbmVyLmdldCgwKS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRvb2xzLmhhbmRsZURyYWdPdmVyLCBmYWxzZSk7XHJcbiAgICAgICAgY29udGFpbmVyLmdldCgwKS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgdG9vbHMuaGFuZGxlRmlsZVNlbGVjdCwgZmFsc2UpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog6I635Y+W5Zyw5Z2A5qCP5Y+C5pWwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcclxuICAgICAqL1xyXG4gICAgZ2V0VXJsUGFyYW06IGZ1bmN0aW9uICh1cmwpIHtcclxuICAgICAgICB2YXIgb2JqZWN0ID0ge307XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKFwiP1wiKSAhPSAtMSkge1xyXG4gICAgICAgICAgICB2YXIgc3RyID0gdXJsLnNwbGl0KFwiP1wiKVsxXTtcclxuICAgICAgICAgICAgdmFyIHN0cnMgPSBzdHIuc3BsaXQoXCImXCIpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG9iamVjdFtzdHJzW2ldLnNwbGl0KFwiPVwiKVswXV0gPSBzdHJzW2ldLnNwbGl0KFwiPVwiKVsxXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBvYmplY3RcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFt1cmxdO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog6YCa6L+HeG1s5Yib5bu6YnBtblxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHhtbCDliJvlu7picG1zIHhtbFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGJwbW5Nb2RlbGVyIGJwbW7lr7nosaFcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBjb250YWluZXIg5a655Zmo5a+56LGhXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZURpYWdyYW0oeG1sLCBicG1uTW9kZWxlciwgY29udGFpbmVyKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgYnBtbk1vZGVsZXIuaW1wb3J0WE1MKHhtbCk7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5yZW1vdmVDbGFzcygnd2l0aC1lcnJvcicpLmFkZENsYXNzKCd3aXRoLWRpYWdyYW0nKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyLnJlbW92ZUNsYXNzKCd3aXRoLWRpYWdyYW0nKS5hZGRDbGFzcygnd2l0aC1lcnJvcicpO1xyXG4gICAgICAgICAgICBjb250YWluZXIuZmluZCgnLmVycm9yIHByZScpLnRleHQoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog6YCa6L+HSnNvbuiuvue9ruminOiJslxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGpzb24ganNvbiDlrZfnrKbkuLJcclxuICAgICAqL1xyXG4gICAgc2V0Q29sb3IoanNvbixicG1uTW9kZWxlcikge1xyXG4gICAgICAgIHZhciBtb2RlbGluZyA9IGJwbW5Nb2RlbGVyLmdldCgnbW9kZWxpbmcnKTtcclxuICAgICAgICB2YXIgZWxlbWVudFJlZ2lzdHJ5ID0gYnBtbk1vZGVsZXIuZ2V0KCdlbGVtZW50UmVnaXN0cnknKVxyXG4gICAgICAgIHZhciBlbGVtZW50VG9Db2xvciA9IGVsZW1lbnRSZWdpc3RyeS5nZXQoanNvbi5uYW1lKTtcclxuICAgICAgICBpZihlbGVtZW50VG9Db2xvcil7XHJcbiAgICAgICAgICAgIG1vZGVsaW5nLnNldENvbG9yKFtlbGVtZW50VG9Db2xvcl0sIHtcclxuICAgICAgICAgICAgICAgIHN0cm9rZToganNvbi5zdHJva2UsXHJcbiAgICAgICAgICAgICAgICBmaWxsOiBqc29uLmZpbGxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog5L+d5a2YYnBtbuWvueixoVxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGJwbW5Nb2RlbGVyIGJwbW7lr7nosaFcclxuICAgICAqL1xyXG4gICAgc2F2ZUJwbW4oYnBtbk1vZGVsZXIpIHtcclxuICAgICAgICBicG1uTW9kZWxlci5zYXZlWE1MKHsgZm9ybWF0OiB0cnVlIH0sIGZ1bmN0aW9uIChlcnIsIHhtbCkge1xyXG4gICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uc29sZS5lcnJvcign5L+d5a2Y5aSx6LSl77yM6K+36YeN6K+VJywgZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh4bWwpXHJcbiAgICAgICAgICAgIHZhciBwYXJhbT17XHJcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJpbmdCUE1OXCI6eG1sXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6IHB1YmxpY3VybCsncHJvY2Vzc0RlZmluaXRpb24vYWRkRGVwbG95bWVudEJ5U3RyaW5nJyxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOlwianNvblwiLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogcGFyYW0sXHJcbiAgICAgICAgICAgICAgICAvL2hlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmOCd9LFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHJlc3VsdC5tc2c9PSfmiJDlip8nKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHMuc3loaWRlKCdhbGVydCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCfkv53lrZjmiJDlip8nKVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGVydChyZXN1bHQubXNnKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDkuIvovb1icG1uXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYnBtbk1vZGVsZXIgYnBtbuWvueixoVxyXG4gICAgICovXHJcbiAgICBkb3duTG9hZChicG1uTW9kZWxlcikge1xyXG4gICAgICAgIHZhciBkb3dubG9hZExpbmsgPSAkKFwiI2Rvd25sb2FkQnBtblwiKVxyXG4gICAgICAgIGJwbW5Nb2RlbGVyLnNhdmVYTUwoeyBmb3JtYXQ6IHRydWUgfSwgZnVuY3Rpb24gKGVyciwgeG1sKSB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKCdjb3VsZCBub3Qgc2F2ZSBCUE1OIDIuMCBkaWFncmFtJywgZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0b29scy5zZXRFbmNvZGVkKGRvd25sb2FkTGluaywgJ2RpYWdyYW0uYnBtbicsIGVyciA/IG51bGwgOiB4bWwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog6L2s56CBeG1s5bm25LiL6L29XHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gbGluayDmjInpkq5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIOS4i+i9veWQjeensFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgYmFzZTY0WE1MXHJcbiAgICAgKi9cclxuICAgIHNldEVuY29kZWQobGluaywgbmFtZSwgZGF0YSkge1xyXG4gICAgICAgIHZhciBlbmNvZGVkRGF0YSA9IGVuY29kZVVSSUNvbXBvbmVudChkYXRhKTtcclxuICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICBsaW5rLmFkZENsYXNzKCdhY3RpdmUnKS5hdHRyKHtcclxuICAgICAgICAgICAgICAgICdocmVmJzogJ2RhdGE6YXBwbGljYXRpb24vYnBtbjIwLXhtbDtjaGFyc2V0PVVURi04LCcgKyBlbmNvZGVkRGF0YSxcclxuICAgICAgICAgICAgICAgICdkb3dubG9hZCc6IG5hbWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGluay5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog5LiK5LygYnBtblxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGJwbW5Nb2RlbGVyIGJwbW7lr7nosaFcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBjb250YWluZXIg5a655Zmo5a+56LGhXHJcbiAgICAgKi9cclxuICAgIHVwbG9hZChicG1uTW9kZWxlciwgY29udGFpbmVyKSB7XHJcbiAgICAgICAgdmFyIEZpbGVVcGxvYWQgPSBkb2N1bWVudC5teUZvcm0udXBsb2FkRmlsZS5maWxlc1swXTtcclxuICAgICAgICB2YXIgZm0gPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgICBmbS5hcHBlbmQoJ3Byb2Nlc3NGaWxlJywgRmlsZVVwbG9hZCk7XHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOiBwdWJsaWN1cmwrJ3Byb2Nlc3NEZWZpbml0aW9uL3VwbG9hZCcsXHJcbiAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICAgICAgZGF0YTogZm0sXHJcbiAgICAgICAgICAgIGFzeW5jOiBmYWxzZSxcclxuICAgICAgICAgICAgY29udGVudFR5cGU6IGZhbHNlLCAvL+emgeatouiuvue9ruivt+axguexu+Wei1xyXG4gICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsIC8v56aB5q2ianF1ZXJ55a+5REF0YeaVsOaNrueahOWkhOeQhizpu5jorqTkvJrlpITnkIZcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IHB1YmxpY3VybCsnYnBtbi8nICsgcmVzdWx0Lm9ialxyXG4gICAgICAgICAgICAgICAgdG9vbHMub3BlbkZyb21VcmwoYnBtbk1vZGVsZXIsIGNvbnRhaW5lciwgdXJsKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDmiZPlvIB4bWwgIFVybCDlnLDlnYBcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBicG1uTW9kZWxlciBicG1u5a+56LGhXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gY29udGFpbmVyIOWuueWZqOWvueixoVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybCB1cmzlnLDlnYBcclxuICAgICAqL1xyXG4gICAgb3BlbkZyb21VcmwoYnBtbk1vZGVsZXIsIGNvbnRhaW5lciwgdXJsKSB7XHJcbiAgICAgICAgJC5hamF4KHVybCwgeyBkYXRhVHlwZTogJ3RleHQnIH0pLmRvbmUoYXN5bmMgZnVuY3Rpb24gKHhtbCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgYnBtbk1vZGVsZXIuaW1wb3J0WE1MKHhtbCk7XHJcbiAgICAgICAgICAgICAgICBjb250YWluZXIucmVtb3ZlQ2xhc3MoJ3dpdGgtZXJyb3InKS5hZGRDbGFzcygnd2l0aC1kaWFncmFtJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDmiZPlvIDlvLnlh7rmoYZcclxuICAgICAqIEBwYXJhbSBpZFxyXG4gICAgICovXHJcbiAgICBzeW9wZW4oaWQpIHtcclxuICAgICAgICB2YXIgZG9tID0gJChcIiNcIiArIGlkKTtcclxuICAgICAgICB0aGlzLnN5Y2VudGVyKGRvbSk7XHJcbiAgICAgICAgZG9tLmFkZENsYXNzKG5hbWUpO1xyXG4gICAgICAgIGRvbS5zaG93KCk7XHJcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xyXG4gICAgICAgICQoXCIuc3ktbWFza1wiKS5mYWRlSW4oMzAwKVxyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhuYW1lKVxyXG4gICAgICAgIH0sIDMwMCk7XHJcblxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog6ZqQ6JeP5by55Ye65qGGXHJcbiAgICAgKiBAcGFyYW0gaWRcclxuICAgICAqL1xyXG4gICAgc3loaWRlKGlkKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBpZCA9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgIHZhciBkb20gPSAkKFwiLnN5LWFsZXJ0XCIpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGRvbSA9ICQoXCIjXCIgKyBpZClcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5hbWUgPSBkb20uYXR0cihcInN5LWxlYXZlXCIpO1xyXG4gICAgICAgIGRvbS5hZGRDbGFzcyhuYW1lKTtcclxuICAgICAgICAkKFwiLnN5LW1hc2tcIikuZmFkZU91dCgzMDApO1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGRvbS5oaWRlKCk7XHJcbiAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhuYW1lKTtcclxuICAgICAgICB9LCAzMDApXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDlvLnlh7rmoYblsYXkuK1cclxuICAgICAqIEBwYXJhbSBkb21cclxuICAgICAqL1xyXG4gICAgc3ljZW50ZXIoZG9tKSB7XHJcbiAgICAgICAgdmFyIG1ndG9wID0gcGFyc2VGbG9hdChkb20uaGVpZ2h0KCkgLyAyKTtcclxuICAgICAgICBkb20uY3NzKHtcclxuICAgICAgICAgICAgXCJ0b3BcIjogXCI1MCVcIixcclxuICAgICAgICAgICAgXCJtYXJnaW4tdG9wXCI6IFwiLVwiICsgbWd0b3AgKyBcInB4XCJcclxuICAgICAgICB9KVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog5Yik5pat5piv5ZCm5piv5pWw57uEXHJcbiAgICAgKiBAcGFyYW0gdmFsdWVcclxuICAgICAqIEByZXR1cm5zIHthcmcgaXMgQXJyYXk8YW55Pnxib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc0FycmF5Rm4odmFsdWUpe1xyXG4gICAgICAgIGlmICh0eXBlb2YgQXJyYXkuaXNBcnJheSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IFwiW29iamVjdCBBcnJheV1cIjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDmoLnmja7mlbDmja7orr7nva7popzoibJcclxuICAgICAqIEBwYXJhbSBkYXRhXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9XHJcbiAgICAgKi9cclxuICAgIGdldEJ5Q29sb3IoZGF0YSl7XHJcblxyXG4gICAgICAgIHZhciBDb2xvckpzb249W11cclxuICAgICAgICBmb3IodmFyIGsgaW4gZGF0YVsnaGlnaExpbmUnXSl7XHJcbiAgICAgICAgICAgIHZhciBwYXI9e1xyXG4gICAgICAgICAgICAgICAgXCJuYW1lXCI6IGRhdGFbJ2hpZ2hMaW5lJ11ba10sXHJcbiAgICAgICAgICAgICAgICBcInN0cm9rZVwiOlwiZ3JlZW5cIixcclxuICAgICAgICAgICAgICAgIFwiZmlsbFwiOlwiZ3JlZW5cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIENvbG9ySnNvbi5wdXNoKHBhcilcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yKHZhciBrIGluIGRhdGFbJ2hpZ2hQb2ludCddKXtcclxuICAgICAgICAgICAgdmFyIHBhcj17XHJcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogZGF0YVsnaGlnaFBvaW50J11ba10sXHJcbiAgICAgICAgICAgICAgICBcInN0cm9rZVwiOlwiZ3JheVwiLFxyXG4gICAgICAgICAgICAgICAgXCJmaWxsXCI6XCIjZWFlOWU5XCJcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQ29sb3JKc29uLnB1c2gocGFyKVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IodmFyIGsgaW4gZGF0YVsnaURvJ10pe1xyXG4gICAgICAgICAgICB2YXIgcGFyPXtcclxuICAgICAgICAgICAgICAgIFwibmFtZVwiOiBkYXRhWydpRG8nXVtrXSxcclxuICAgICAgICAgICAgICAgIFwic3Ryb2tlXCI6XCJncmVlblwiLFxyXG4gICAgICAgICAgICAgICAgXCJmaWxsXCI6XCIjYTNkNjhlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBDb2xvckpzb24ucHVzaChwYXIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvcih2YXIgayBpbiBkYXRhWyd3YWl0aW5nVG9EbyddKXtcclxuICAgICAgICAgICAgdmFyIHBhcj17XHJcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogZGF0YVsnd2FpdGluZ1RvRG8nXVtrXSxcclxuICAgICAgICAgICAgICAgIFwic3Ryb2tlXCI6XCJncmVlblwiLFxyXG4gICAgICAgICAgICAgICAgXCJmaWxsXCI6XCJ5ZWxsb3dcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIENvbG9ySnNvbi5wdXNoKHBhcilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIENvbG9ySnNvblxyXG4gICAgfVxyXG59XHJcblxyXG5cclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCB0b29scyJdfQ== +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJhcHAvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMtcHJvcGVydGllcy1wYW5lbC9saWIvUHJvcGVydGllc1BhbmVsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMtcHJvcGVydGllcy1wYW5lbC9saWIvVXRpbHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2xpYi9jbWQvQ3JlYXRlQW5kUmVmZXJlbmNlSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzLXByb3BlcnRpZXMtcGFuZWwvbGliL2NtZC9DcmVhdGVCdXNpbmVzc09iamVjdExpc3RIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMtcHJvcGVydGllcy1wYW5lbC9saWIvY21kL011bHRpQ29tbWFuZEhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2xpYi9jbWQvVXBkYXRlQnVzaW5lc3NPYmplY3RIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMtcHJvcGVydGllcy1wYW5lbC9saWIvY21kL1VwZGF0ZUJ1c2luZXNzT2JqZWN0TGlzdEhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2xpYi9jbWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2xpYi9oZWxwZXIvRWxlbWVudEhlbHBlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzLXByb3BlcnRpZXMtcGFuZWwvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL0Jhc2VNb2RlbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL0Jhc2VWaWV3ZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvTW9kZWxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9OYXZpZ2F0ZWRWaWV3ZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvVmlld2VyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2NvcmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZHJhdy9CcG1uUmVuZGVyVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9kcmF3L0JwbW5SZW5kZXJlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9kcmF3L1BhdGhNYXAuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZHJhdy9UZXh0UmVuZGVyZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZHJhdy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXBsYWNlL0JwbW5BdXRvUGxhY2UuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvYXV0by1wbGFjZS9CcG1uQXV0b1BsYWNlVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXBsYWNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2F1dG8tcmVzaXplL0JwbW5BdXRvUmVzaXplLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2F1dG8tcmVzaXplL0JwbW5BdXRvUmVzaXplUHJvdmlkZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvYXV0by1yZXNpemUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvY29udGV4dC1wYWQvQ29udGV4dFBhZFByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2NvbnRleHQtcGFkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2NvcHktcGFzdGUvQnBtbkNvcHlQYXN0ZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9jb3B5LXBhc3RlL01vZGRsZUNvcHkuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvY29weS1wYXN0ZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kaS1vcmRlcmluZy9CcG1uRGlPcmRlcmluZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kaS1vcmRlcmluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kaXN0cmlidXRlLWVsZW1lbnRzL0JwbW5EaXN0cmlidXRlRWxlbWVudHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZGlzdHJpYnV0ZS1lbGVtZW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucy9CcG1uRWRpdG9yQWN0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL0JwbW5HcmlkU25hcHBpbmcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9iZWhhdmlvci9BdXRvUGxhY2VCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2JlaGF2aW9yL0NyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9iZWhhdmlvci9MYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9iZWhhdmlvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2ludGVyYWN0aW9uLWV2ZW50cy9CcG1uSW50ZXJhY3Rpb25FdmVudHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvaW50ZXJhY3Rpb24tZXZlbnRzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2tleWJvYXJkL0JwbW5LZXlib2FyZEJpbmRpbmdzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2tleWJvYXJkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2xhYmVsLWVkaXRpbmcvTGFiZWxFZGl0aW5nUHJldmlldy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1lZGl0aW5nL0xhYmVsRWRpdGluZ1Byb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2xhYmVsLWVkaXRpbmcvTGFiZWxVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2xhYmVsLWVkaXRpbmcvY21kL1VwZGF0ZUxhYmVsSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1lZGl0aW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL0JwbW5GYWN0b3J5LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL0JwbW5MYXlvdXRlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9CcG1uVXBkYXRlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9FbGVtZW50RmFjdG9yeS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9Nb2RlbGluZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9BZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9BcHBlbmRCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Bc3NvY2lhdGlvbkJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0F0dGFjaEV2ZW50QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvQm91bmRhcnlFdmVudEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0NyZWF0ZUJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0NyZWF0ZURhdGFPYmplY3RCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9DcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0RhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvRGF0YVN0b3JlQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvRGVsZXRlTGFuZUJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0RldGFjaEV2ZW50QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvRHJvcE9uRmxvd0JlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0V2ZW50QmFzZWRHYXRld2F5QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvRml4SG92ZXJCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Hcm91cEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0ltcG9ydERvY2tpbmdGaXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvSXNIb3Jpem9udGFsRml4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0xhYmVsQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvTW9kZWxpbmdGZWVkYmFjay5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9SZW1vdmVFbGVtZW50QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvUmVtb3ZlUGFydGljaXBhbnRCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9SZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1JlcGxhY2VFbGVtZW50QmVoYXZpb3VyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1Jlc2l6ZUJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1Jlc2l6ZUxhbmVCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Sb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1NwYWNlVG9vbEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1N1YlByb2Nlc3NTdGFydEV2ZW50QmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvVG9nZ2xlRWxlbWVudENvbGxhcHNlQmVoYXZpb3VyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1VuY2xhaW1JZEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1Vuc2V0RGVmYXVsdEZsb3dCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9VcGRhdGVGbG93Tm9kZVJlZnNCZWhhdmlvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci91dGlsL0NhdGVnb3J5VXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci91dGlsL0dlb21ldHJpY1V0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvdXRpbC9MYWJlbExheW91dFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvdXRpbC9MaW5lQXR0YWNobWVudFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvdXRpbC9MaW5lSW50ZXJzZWN0LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL3V0aWwvUmVzaXplVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvQWRkTGFuZUhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL0lkQ2xhaW1IYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9SZXNpemVMYW5lSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvU2V0Q29sb3JIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9TcGxpdExhbmVIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9VcGRhdGVDYW52YXNSb290SGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvVXBkYXRlRmxvd05vZGVSZWZzSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvVXBkYXRlUHJvcGVydGllc0hhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL1VwZGF0ZVNlbWFudGljUGFyZW50SGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy91dGlsL0xhbmVVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL29yZGVyaW5nL0JwbW5PcmRlcmluZ1Byb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL29yZGVyaW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3BhbGV0dGUvUGFsZXR0ZVByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3BhbGV0dGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvcG9wdXAtbWVudS9SZXBsYWNlTWVudVByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3BvcHVwLW1lbnUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvcG9wdXAtbWVudS91dGlsL1R5cGVVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3JlcGxhY2UtcHJldmlldy9CcG1uUmVwbGFjZVByZXZpZXcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvcmVwbGFjZS1wcmV2aWV3L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3JlcGxhY2UvQnBtblJlcGxhY2UuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvcmVwbGFjZS9SZXBsYWNlT3B0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9yZXBsYWNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3J1bGVzL0JwbW5SdWxlcy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ydWxlcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9zZWFyY2gvQnBtblNlYXJjaFByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3NlYXJjaC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9CcG1uQ29ubmVjdFNuYXBwaW5nLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL3NuYXBwaW5nL0JwbW5DcmVhdGVNb3ZlU25hcHBpbmcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvc25hcHBpbmcvQnBtblNuYXBwaW5nVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9pbXBvcnQvQnBtbkltcG9ydGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ltcG9ydC9CcG1uVHJlZVdhbGtlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9pbXBvcnQvSW1wb3J0ZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvaW1wb3J0L1V0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvaW1wb3J0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL3V0aWwvQ29tcGF0aWJpbGl0eVV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9EaVV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9MYWJlbFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9Qb3dlcmVkQnlVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvRGlhZ3JhbS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRTdGFjay5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9jb21tYW5kL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2NvcmUvQ2FudmFzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2NvcmUvRWxlbWVudEZhY3RvcnkuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvY29yZS9FbGVtZW50UmVnaXN0cnkuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9jb3JlL0dyYXBoaWNzRmFjdG9yeS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9jb3JlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2RyYXcvQmFzZVJlbmRlcmVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2RyYXcvRGVmYXVsdFJlbmRlcmVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2RyYXcvU3R5bGVzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2RyYXcvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYWxpZ24tZWxlbWVudHMvQWxpZ25FbGVtZW50cy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hbGlnbi1lbGVtZW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdHRhY2gtc3VwcG9ydC9BdHRhY2hTdXBwb3J0LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F0dGFjaC1zdXBwb3J0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcGxhY2UvQXV0b1BsYWNlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcGxhY2UvQXV0b1BsYWNlU2VsZWN0aW9uQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYXV0by1wbGFjZS9BdXRvUGxhY2VVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcGxhY2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYXV0by1yZXNpemUvQXV0b1Jlc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXJlc2l6ZS9BdXRvUmVzaXplUHJvdmlkZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYXV0by1zY3JvbGwvQXV0b1Njcm9sbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXNjcm9sbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9iZW5kcG9pbnRzL0JlbmRwb2ludE1vdmUuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYmVuZHBvaW50cy9CZW5kcG9pbnRNb3ZlUHJldmlldy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9iZW5kcG9pbnRzL0JlbmRwb2ludFNuYXBwaW5nLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2JlbmRwb2ludHMvQmVuZHBvaW50VXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9iZW5kcG9pbnRzL0JlbmRwb2ludHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYmVuZHBvaW50cy9Db25uZWN0aW9uU2VnbWVudE1vdmUuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYmVuZHBvaW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jaGFuZ2Utc3VwcG9ydC9DaGFuZ2VTdXBwb3J0LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NoYW5nZS1zdXBwb3J0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NsaXBib2FyZC9DbGlwYm9hcmQuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY2xpcGJvYXJkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2Nvbm5lY3QvQ29ubmVjdC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb25uZWN0L0Nvbm5lY3RQcmV2aWV3LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2Nvbm5lY3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY29ubmVjdGlvbi1wcmV2aWV3L0Nvbm5lY3Rpb25QcmV2aWV3LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2Nvbm5lY3Rpb24tcHJldmlldy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb250ZXh0LXBhZC9Db250ZXh0UGFkLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NvbnRleHQtcGFkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NvcHktcGFzdGUvQ29weVBhc3RlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NvcHktcGFzdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY3JlYXRlL0NyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jcmVhdGUvQ3JlYXRlUHJldmlldy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jcmVhdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZGlzdHJpYnV0ZS1lbGVtZW50cy9EaXN0cmlidXRlRWxlbWVudHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZGlzdHJpYnV0ZS1lbGVtZW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9kcmFnZ2luZy9EcmFnZ2luZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9kcmFnZ2luZy9Ib3ZlckZpeC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9kcmFnZ2luZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucy9FZGl0b3JBY3Rpb25zLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2VkaXRvci1hY3Rpb25zL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2dsb2JhbC1jb25uZWN0L0dsb2JhbENvbm5lY3QuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ2xvYmFsLWNvbm5lY3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9HcmlkU25hcHBpbmcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9HcmlkVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2JlaGF2aW9yL1Jlc2l6ZUJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2dyaWQtc25hcHBpbmcvYmVoYXZpb3IvU3BhY2VUb29sQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9iZWhhdmlvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2hhbmQtdG9vbC9IYW5kVG9vbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9oYW5kLXRvb2wvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvaW50ZXJhY3Rpb24tZXZlbnRzL0ludGVyYWN0aW9uRXZlbnRzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2ludGVyYWN0aW9uLWV2ZW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9rZXlib2FyZC1tb3ZlLXNlbGVjdGlvbi9LZXlib2FyZE1vdmVTZWxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQtbW92ZS1zZWxlY3Rpb24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQvS2V5Ym9hcmQuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQvS2V5Ym9hcmRCaW5kaW5ncy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9rZXlib2FyZC9LZXlib2FyZFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbGFiZWwtc3VwcG9ydC9MYWJlbFN1cHBvcnQuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbGFiZWwtc3VwcG9ydC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9sYXNzby10b29sL0xhc3NvVG9vbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9sYXNzby10b29sL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL01vZGVsaW5nLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9BbGlnbkVsZW1lbnRzSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvQXBwZW5kU2hhcGVIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9DcmVhdGVDb25uZWN0aW9uSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvQ3JlYXRlRWxlbWVudHNIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9DcmVhdGVMYWJlbEhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL0NyZWF0ZVNoYXBlSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvRGVsZXRlQ29ubmVjdGlvbkhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL0RlbGV0ZUVsZW1lbnRzSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvRGVsZXRlU2hhcGVIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9EaXN0cmlidXRlRWxlbWVudHNIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9MYXlvdXRDb25uZWN0aW9uSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvTW92ZUNvbm5lY3Rpb25IYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9Nb3ZlRWxlbWVudHNIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9Nb3ZlU2hhcGVIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9SZWNvbm5lY3RDb25uZWN0aW9uSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvUmVwbGFjZVNoYXBlSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvUmVzaXplU2hhcGVIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9TcGFjZVRvb2xIYW5kbGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9Ub2dnbGVTaGFwZUNvbGxhcHNlSGFuZGxlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvVXBkYXRlQXR0YWNobWVudEhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL1VwZGF0ZVdheXBvaW50c0hhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL2hlbHBlci9BbmNob3JzSGVscGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9oZWxwZXIvTW92ZUNsb3N1cmUuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL2hlbHBlci9Nb3ZlSGVscGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vdXNlL01vdXNlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vdXNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vdmUvTW92ZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb3ZlL01vdmVQcmV2aWV3LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vdmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvb3JkZXJpbmcvT3JkZXJpbmdQcm92aWRlci5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9vdXRsaW5lL091dGxpbmUuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvb3V0bGluZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9vdmVybGF5cy9PdmVybGF5cy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9vdmVybGF5cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wYWxldHRlL1BhbGV0dGUuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcGFsZXR0ZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wb3B1cC1tZW51L1BvcHVwTWVudS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wb3B1cC1tZW51L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3ByZXZpZXctc3VwcG9ydC9QcmV2aWV3U3VwcG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wcmV2aWV3LXN1cHBvcnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcmVwbGFjZS9SZXBsYWNlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3JlcGxhY2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcmVzaXplL1Jlc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvUmVzaXplSGFuZGxlcy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvUmVzaXplUHJldmlldy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvUmVzaXplVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcnVsZXMvUnVsZVByb3ZpZGVyLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3J1bGVzL1J1bGVzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3J1bGVzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NlYXJjaC1wYWQvU2VhcmNoUGFkLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NlYXJjaC1wYWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uL1NlbGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zZWxlY3Rpb24vU2VsZWN0aW9uQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uL1NlbGVjdGlvblZpc3VhbHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NuYXBwaW5nL0NyZWF0ZU1vdmVTbmFwcGluZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9SZXNpemVTbmFwcGluZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9TbmFwQ29udGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9TbmFwVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9TbmFwcGluZy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zcGFjZS10b29sL1NwYWNlVG9vbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zcGFjZS10b29sL1NwYWNlVG9vbFByZXZpZXcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc3BhY2UtdG9vbC9TcGFjZVV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc3BhY2UtdG9vbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9mZWF0dXJlcy90b29sLW1hbmFnZXIvVG9vbE1hbmFnZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvdG9vbC1tYW5hZ2VyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3Rvb2x0aXBzL1Rvb2x0aXBzLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3Rvb2x0aXBzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3RvdWNoL1RvdWNoRml4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3RvdWNoL1RvdWNoSW50ZXJhY3Rpb25FdmVudHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvdG91Y2gvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUvdHJhbnNsYXRlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2xheW91dC9CYXNlTGF5b3V0ZXIuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0Nyb3BwaW5nQ29ubmVjdGlvbkRvY2tpbmcuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvbGF5b3V0L01hbmhhdHRhbkxheW91dC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9tb2RlbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL2tleWJvYXJkLW1vdmUvS2V5Ym9hcmRNb3ZlLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL25hdmlnYXRpb24va2V5Ym9hcmQtbW92ZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL21vdmVjYW52YXMvTW92ZUNhbnZhcy5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL21vdmVjYW52YXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi90b3VjaC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL3pvb21zY3JvbGwvWm9vbVNjcm9sbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL3pvb21zY3JvbGwvWm9vbVV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi96b29tc2Nyb2xsL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvQXR0YWNoVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL0NsaWNrVHJhcC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvQ3Vyc29yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvRWxlbWVudHMuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvdXRpbC9Fc2NhcGVVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvRXZlbnQuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvdXRpbC9HZW9tZXRyeS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL0dyYXBoaWNzVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL0lkR2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvTGluZUludGVyc2VjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL01hdGguanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvdXRpbC9Nb3VzZS5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL1BsYXRmb3JtLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvUG9zaXRpb25VdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvUmVtb3ZhbC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLWpzL25vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL1JlbmRlclV0aWwuanMiLCJub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvdXRpbC9TdmdUcmFuc2Zvcm1VdGlsLmpzIiwibm9kZV9tb2R1bGVzL2JwbW4tanMvbm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL3V0aWwvVGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9icG1uLW1vZGRsZS9kaXN0L2luZGV4LmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9jc3MuZXNjYXBlL2Nzcy5lc2NhcGUuanMiLCJub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy1kaXJlY3QtZWRpdGluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kaWFncmFtLWpzLWRpcmVjdC1lZGl0aW5nL2xpYi9EaXJlY3RFZGl0aW5nLmpzIiwibm9kZV9tb2R1bGVzL2RpYWdyYW0tanMtZGlyZWN0LWVkaXRpbmcvbGliL1RleHRCb3guanMiLCJub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvaW50ZXJhY3Rpb24tZXZlbnRzL0ludGVyYWN0aW9uRXZlbnRzLmpzIiwibm9kZV9tb2R1bGVzL2RpYWdyYW0tanMvbGliL2kxOG4vdHJhbnNsYXRlL3RyYW5zbGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9kaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zLmpzIiwibm9kZV9tb2R1bGVzL2RpZGkvZGlzdC9pbmRleC5lc20uanMiLCJub2RlX21vZHVsZXMvaGFtbWVyanMvaGFtbWVyLmpzIiwibm9kZV9tb2R1bGVzL2lkcy9ub2RlX21vZHVsZXMvaGF0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2lkcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2pxdWVyeS9kaXN0L2pxdWVyeS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX0xhenlXcmFwcGVyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fTG9kYXNoV3JhcHBlci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcENhY2hlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fUHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldENhY2hlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19VaW50OEFycmF5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2FwcGx5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlBZ2dyZWdhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlFYWNoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlGaWx0ZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlJbmNsdWRlc1dpdGguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlNYXAuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hc3NpZ25WYWx1ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBZ2dyZWdhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnblZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VEaWZmZXJlbmNlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUVhY2guanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGbGF0dGVuLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZvci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3JPd24uanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldEFsbEtleXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUhhc0luLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUluZGV4T2YuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hdGNoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmFOLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJdGVyYXRlZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUxvZGFzaC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXAuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWF0Y2hlcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXRjaGVzUHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHlEZWVwLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVJlc3QuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2V0RGF0YS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXRUb1N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUb1N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmlxLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVZhbHVlcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VYb3IuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jYWNoZUhhcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RGdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RQYXRoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY29tcG9zZUFyZ3MuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jb21wb3NlQXJnc1JpZ2h0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jb3VudEhvbGRlcnMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVBZ2dyZWdhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQXNzaWduZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCYXNlRWFjaC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUJhc2VGb3IuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCaW5kLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQ3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUN1cnJ5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlRmluZC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUh5YnJpZC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZVBhcnRpYWwuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVSZWN1cnJ5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlU2V0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlV3JhcC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEJ5VGFnLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxPYmplY3RzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZnJlZUdsb2JhbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19nZXREYXRhLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0RnVuY05hbWUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19nZXRIb2xkZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19nZXRNYXBEYXRhLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWF0Y2hEYXRhLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0U3ltYm9scy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFRhZy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0V3JhcERldGFpbHMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19oYXNQYXRoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaENsZWFyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaERlbGV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoSGFzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaFNldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2luc2VydFdyYXBEZXRhaWxzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faXNGbGF0dGVuYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSW5kZXguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19pc0l0ZXJhdGVlQ2FsbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faXNMYXppYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzTWFza2VkLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19pc1N0cmljdENvbXBhcmFibGUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVDbGVhci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUdldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUhhcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlR2V0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVIYXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcFRvQXJyYXkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX21lbW9pemVDYXBwZWQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tZXJnZURhdGEuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tZXRhTWFwLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlS2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyQXJnLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlclJlc3QuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19yZWFsTmFtZXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19yZW9yZGVyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fcmVwbGFjZUhvbGRlcnMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldERhdGEuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb0FycmF5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9TdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zZXRXcmFwVG9TdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zaG9ydE91dC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrR2V0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmljdEluZGV4T2YuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb1BhdGguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fdXBkYXRlV3JhcERldGFpbHMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL193cmFwcGVyQ2xvbmUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2Fzc2lnbi5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvYmluZC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvY29uc3RhbnQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2RlYm91bmNlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9lcS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvZmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9maW5kLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9maW5kSW5kZXguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2ZsYXR0ZW5EZWVwLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9mb3JFYWNoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9nZXQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2hhc0luLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzRW1wdHkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlCeS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gva2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvbWFwLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9tZW1vaXplLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9ub29wLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9ub3cuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL3Byb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViQXJyYXkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJGYWxzZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvdG9GaW5pdGUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL3RvSW50ZWdlci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvdG9OdW1iZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL3RvU3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC90cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL3ZhbHVlcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvd3JhcHBlckxvZGFzaC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gveG9yLmpzIiwibm9kZV9tb2R1bGVzL21pbi1kYXNoL2Rpc3QvaW5kZXguZXNtLmpzIiwibm9kZV9tb2R1bGVzL21pbi1kb20vZGlzdC9pbmRleC5lc20uanMiLCJub2RlX21vZHVsZXMvbWl0dC9kaXN0L21pdHQuZXMuanMiLCJub2RlX21vZHVsZXMvbW9kZGxlLXhtbC9kaXN0L2luZGV4LmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9tb2RkbGUvZGlzdC9pbmRleC5lc20uanMiLCJub2RlX21vZHVsZXMvb2JqZWN0LXJlZnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvb2JqZWN0LXJlZnMvbGliL2NvbGxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvb2JqZWN0LXJlZnMvbGliL3JlZnMuanMiLCJub2RlX21vZHVsZXMvcGF0aC1pbnRlcnNlY3Rpb24vaW50ZXJzZWN0LmpzIiwibm9kZV9tb2R1bGVzL3NheGVuL2Rpc3QvaW5kZXguZXNtLmpzIiwibm9kZV9tb2R1bGVzL3Njcm9sbC10YWJzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NlbGVjdGlvbi11cGRhdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvdGlueS1zdmcvZGlzdC9pbmRleC5lc20uanMiLCJyZXNvdXJjZXMvYWN0aXZpdGkuanNvbiIsInJlc291cmNlcy9jdXN0b21Db250cm9scy9DdXN0b21Db250ZXh0UGFkLmpzIiwicmVzb3VyY2VzL2N1c3RvbUNvbnRyb2xzL0N1c3RvbVBhbGV0dGUuanMiLCJyZXNvdXJjZXMvY3VzdG9tQ29udHJvbHMvaW5kZXguanMiLCJyZXNvdXJjZXMvY3VzdG9tVHJhbnNsYXRlL2N1c3RvbVRyYW5zbGF0ZS5qcyIsInJlc291cmNlcy9jdXN0b21UcmFuc2xhdGUvdHJhbnNsYXRpb25zR2VybWFuLmpzIiwicmVzb3VyY2VzL25ld0RpYWdyYW0uYnBtbiIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL1Byb3BlcnRpZXNBY3RpdmF0b3IuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9VdGlscy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL2ZhY3RvcnkvQ2hlY2tib3hFbnRyeUZhY3RvcnkuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9mYWN0b3J5L0NvbWJvRW50cnlGYWN0b3J5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvZmFjdG9yeS9FbnRyeUZhY3RvcnkuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9mYWN0b3J5L0VudHJ5RmllbGREZXNjcmlwdGlvbi5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL2ZhY3RvcnkvTGFiZWxGYWN0b3J5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvZmFjdG9yeS9MaW5rRW50cnlGYWN0b3J5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvZmFjdG9yeS9TZWxlY3RFbnRyeUZhY3RvcnkuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9mYWN0b3J5L1RhYmxlRW50cnlGYWN0b3J5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvZmFjdG9yeS9UZXh0Qm94RW50cnlGYWN0b3J5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvZmFjdG9yeS9UZXh0SW5wdXRFbnRyeUZhY3RvcnkuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9mYWN0b3J5L1ZhbGlkYXRpb25Bd2FyZVRleHRJbnB1dC5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL2hlbHBlci9Bc3luY0NhcGFibGVIZWxwZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9oZWxwZXIvQ2F0ZWdvcnlIZWxwZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9oZWxwZXIvQ21kSGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvaGVscGVyL0VsZW1lbnRIZWxwZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9oZWxwZXIvRXZlbnREZWZpbml0aW9uSGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvaGVscGVyL0V4dGVuc2lvbkVsZW1lbnRzSGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvaGVscGVyL0Zvcm1IZWxwZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9oZWxwZXIvSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvaGVscGVyL0lucHV0T3V0cHV0SGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvaGVscGVyL1BhcnRpY2lwYW50SGVscGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvQWN0aXZpdGlQcm9wZXJ0aWVzUHJvdmlkZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9lbGVtZW50LXRlbXBsYXRlcy9DcmVhdGVIZWxwZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9lbGVtZW50LXRlbXBsYXRlcy9DdXN0b21FbGVtZW50c1Byb3BlcnRpZXNBY3RpdmF0b3IuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9lbGVtZW50LXRlbXBsYXRlcy9FbGVtZW50VGVtcGxhdGVzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvZWxlbWVudC10ZW1wbGF0ZXMvRWxlbWVudFRlbXBsYXRlc0xvYWRlci5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL2VsZW1lbnQtdGVtcGxhdGVzL0hlbHBlci5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL2VsZW1lbnQtdGVtcGxhdGVzL1ZhbGlkYXRvci5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL2VsZW1lbnQtdGVtcGxhdGVzL2NtZC9DaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvZWxlbWVudC10ZW1wbGF0ZXMvY21kL2luZGV4LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvZWxlbWVudC10ZW1wbGF0ZXMvaW5kZXguanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9lbGVtZW50LXRlbXBsYXRlcy9wYXJ0cy9DaG9vc2VyUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9lbGVtZW50LXRlbXBsYXRlcy9wYXJ0cy9DdXN0b21Qcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL2luZGV4LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvQXN5bmNocm9ub3VzQ29udGludWF0aW9uUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9DYWxsQWN0aXZpdHlQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0NhbmRpZGF0ZVN0YXJ0ZXJQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0NvbmRpdGlvbmFsUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9Db25uZWN0b3JEZXRhaWxQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0Nvbm5lY3RvcklucHV0T3V0cHV0UGFyYW1ldGVyUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9Db25uZWN0b3JJbnB1dE91dHB1dFByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvRXJyb3JFdmVudFByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvRXh0ZXJuYWxUYXNrQ29uZmlndXJhdGlvblByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvRmllbGRJbmplY3Rpb25Qcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0Zvcm1Qcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0hpc3RvcnlUaW1lVG9MaXZlUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9JbnB1dE91dHB1dFBhcmFtZXRlclByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvSW5wdXRPdXRwdXRQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0pvYkNvbmZpZ3VyYXRpb25Qcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL0xpc3RlbmVyRGV0YWlsUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9MaXN0ZW5lckZpZWxkSW5qZWN0aW9uUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9MaXN0ZW5lclByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvTXVsdGlJbnN0YW5jZUxvb3BQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL1Byb3BlcnRpZXNQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL1NjcmlwdFRhc2tQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL1NlcnZpY2VUYXNrRGVsZWdhdGVQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL1N0YXJ0RXZlbnRJbml0aWF0b3IuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9UYXNrbGlzdFByb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvVXNlclRhc2tQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL1ZhcmlhYmxlTWFwcGluZ1Byb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvVmVyc2lvblRhZ1Byb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vQXN5bmNDb250aW51YXRpb24uanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9DYWxsYWJsZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0NhbmRpZGF0ZVN0YXJ0ZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9EZWxlZ2F0ZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0Vycm9yRXZlbnREZWZpbml0aW9uLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vRXh0ZW5zaW9uRWxlbWVudHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9FeHRlcm5hbC5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0V4dGVybmFsVGFza1ByaW9yaXR5LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vRmllbGRJbmplY3Rpb24uanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9IaXN0b3J5VGltZVRvTGl2ZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0ltcGxlbWVudGF0aW9uVHlwZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0lucHV0T3V0cHV0LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vSW5wdXRPdXRwdXRQYXJhbWV0ZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9Kb2JQcmlvcml0eS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL0pvYlJldHJ5VGltZUN5Y2xlLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYWN0aXZpdGkvcGFydHMvaW1wbGVtZW50YXRpb24vTGlzdGVuZXIuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9NdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL1Byb3BlcnRpZXMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9hY3Rpdml0aS9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9SZXN1bHRWYXJpYWJsZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL1NjcmlwdC5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpL3BhcnRzL2ltcGxlbWVudGF0aW9uL1Rhc2tsaXN0LmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYnBtbi9wYXJ0cy9Eb2N1bWVudGF0aW9uUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL0V2ZW50UHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL0V4ZWN1dGFibGVQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvSWRQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvTGlua1Byb3BzLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYnBtbi9wYXJ0cy9OYW1lUHJvcHMuanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL1Byb2Nlc3NQcm9wcy5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vQ29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbi5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vQ29uZGl0aW9uYWxFdmVudERlZmluaXRpb24uanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL2ltcGxlbWVudGF0aW9uL0VsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vRXJyb3JFdmVudERlZmluaXRpb24uanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL2ltcGxlbWVudGF0aW9uL0VzY2FsYXRpb25FdmVudERlZmluaXRpb24uanMiLCJyZXNvdXJjZXMvcHJvcGVydGllcy1wYW5lbC9wcm92aWRlci9icG1uL3BhcnRzL2ltcGxlbWVudGF0aW9uL0V2ZW50RGVmaW5pdGlvblJlZmVyZW5jZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vTWVzc2FnZUV2ZW50RGVmaW5pdGlvbi5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vTmFtZS5qcyIsInJlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2JwbW4vcGFydHMvaW1wbGVtZW50YXRpb24vU2lnbmFsRXZlbnREZWZpbml0aW9uLmpzIiwicmVzb3VyY2VzL3Byb3BlcnRpZXMtcGFuZWwvcHJvdmlkZXIvYnBtbi9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9UaW1lckV2ZW50RGVmaW5pdGlvbi5qcyIsInJlc291cmNlcy90b29scy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0FDQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFQQTtBQVFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFQLENBQWdCLFFBQWhCLEdBQTJCLElBQTNCLEdBQWtDLE1BQU0sQ0FBQyxRQUFQLENBQWdCLElBQWxFO0FBQ0EsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVAsQ0FBZ0IsSUFBaEIsQ0FBcUIsS0FBckIsQ0FBMkIsUUFBM0IsRUFBcUMsQ0FBckMsQ0FBYjtBQUNBLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFMLENBQVcsTUFBTSxDQUFDLFFBQVAsQ0FBZ0IsSUFBM0IsRUFBaUMsQ0FBakMsQ0FBWjtBQUNBLE1BQU0sU0FBUyxHQUFHLE9BQU8sR0FBRyxHQUE1QixDLENBRUE7O0FBQ0EsSUFBSSxxQkFBcUIsR0FBRztBQUN4QixFQUFBLFNBQVMsRUFBRSxDQUFDLE9BQUQsRUFBVSx3QkFBVjtBQURhLENBQTVCO0FBR0E7QUFDQSxJQUFJLFNBQVMsR0FBRyxxQkFBRSxlQUFGLENBQWhCO0FBQ0EsSUFBSSxNQUFNLEdBQUcscUJBQUUsWUFBRixDQUFiO0FBQ0EsSUFBSSxXQUFXLEdBQUcsSUFBSSxnQkFBSixDQUFnQjtBQUM5QixFQUFBLFNBQVMsRUFBRSxNQURtQjtBQUU5QixFQUFBLGVBQWUsRUFBRTtBQUNiLElBQUEsTUFBTSxFQUFFO0FBREssR0FGYTtBQUs5QixFQUFBLGlCQUFpQixFQUFFLENBQ2YsOEJBRGUsRUFFZixpQkFGZSxF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QXBCLEVBQThCLFlBQVk7QUFDdEMsbUJBQU0sTUFBTixDQUFhLFdBQWIsRUFBeUIsU0FBekI7QUFDSCxHQUZEO0FBR0gsQ0FoR0Q7OztBQy9DQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3J2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25JQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNubEZBLE1BQUksR0FBRyxHQUFHLE1BQUEsQ0FBQSxPQUFBLEdBQWlCLFVB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4blZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RKQSxTQUFTLGNBQVQsQ0FBd0IsT0FBeEIsRUFBaUMsTUFBakMsRUFBeUM7QUFFdkMsTUFBSSxPQUFPLENBQUMsYUFBUixLQUEwQixNQUFNLENBQUMsYUFBckMsRUFBb0Q7QUFDbEQsUUFBSTtBQUNGO0FBQ0EsYUFBTyxNQUFNLENBQUMsYUFBUCxDQUFxQixV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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5aEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdmRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsd0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2puQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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OztBQUNELFNBQUksSUFBSSxDQUFSLElBQWEsSUFBSSxDQUFDLGFBQUQsQ0FBakIsRUFBaUM7QUFDN0IsVUFBSSxHQUFHLEdBQUM7QUFDSixnQkFBUSxJQUFJLENBQUMsYUFBRCxDQUFKLENBQW9CLENBQXBCLENBREo7QUFFSixrQkFBUyxPQUZMO0FBR0osZ0JBQU87QUFISCxPQUFSO0FBS0EsTUFBQSxTQUFTLENBQUMsSUFBVixDQUFlLEdBQWY7QUFDSDs7QUFDRCxXQUFPLFNBQVA7QUFDSDs7QUEvUFMsQ0FBZDtlQXFRZSxLIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiXHJcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XHJcbmltcG9ydCBCcG1uTW9kZWxlciBmcm9tICdicG1uLWpzL2xpYi9Nb2RlbGVyJztcclxuLy9pbXBvcnQgcHJvcGVydGllc1BhbmVsTW9kdWxlIGZyb20gJy4uL3Jlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsJztcclxuaW1wb3J0IHByb3BlcnRpZXNQYW5lbE1vZHVsZSBmcm9tICdicG1uLWpzLXByb3BlcnRpZXMtcGFuZWwnO1xyXG5pbXBvcnQgcHJvcGVydGllc1Byb3ZpZGVyTW9kdWxlIGZyb20gJy4uL3Jlc291cmNlcy9wcm9wZXJ0aWVzLXBhbmVsL3Byb3ZpZGVyL2FjdGl2aXRpJztcclxuaW1wb3J0IGFjdGl2aXRpTW9kZGxlRGVzY3JpcHRvciBmcm9tICcuLi9yZXNvdXJjZXMvYWN0aXZpdGkuanNvbic7XHJcbmltcG9ydCBjdXN0b21UcmFuc2xhdGUgZnJvbSAnLi4vcmVzb3VyY2VzL2N1c3RvbVRyYW5zbGF0ZS9jdXN0b21UcmFuc2xhdGUnO1xyXG5pbXBvcnQgY3VzdG9tQ29udHJvbHNNb2R1bGUgZnJvbSAnLi4vcmVzb3VyY2VzL2N1c3RvbUNvbnRyb2xzJztcclxuaW1wb3J0IHRvb2xzIGZyb20gJy4uL3Jlc291cmNlcy90b29scydcclxuaW1wb3J0IGRpYWdyYW1YTUwgZnJvbSAnLi4vcmVzb3VyY2VzL25ld0RpYWdyYW0uYnBtbic7XHJcbmNvbnN0IHByb0hvc3QgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyB3aW5kb3cubG9jYXRpb24uaG9zdDtcclxuY29uc3QgaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiYnBtbmpzXCIpWzBdO1xyXG5jb25zdCBrZXkgPSBocmVmLnNwbGl0KHdpbmRvdy5sb2NhdGlvbi5ob3N0KVsxXTtcclxuY29uc3QgcHVibGljdXJsID0gcHJvSG9zdCArIGtleTtcclxuXHJcbi8vIOa3u+WKoOe/u+ivkee7hOS7tlxyXG52YXIgY3VzdG9tVHJhbnNsYXRlTW9kdWxlID0ge1xyXG4gICAgdHJhbnNsYXRlOiBbJ3ZhbHVlJywgY3VzdG9tVHJhbnNsYXRlXVxyXG59O1xyXG5kZWJ1Z2dlclxyXG52YXIgY29udGFpbmVyID0gJCgnI2pzLWRyb3Atem9uZScpO1xyXG52YXIgY2FudmFzID0gJCgnI2pzLWNhbnZhcycpO1xyXG52YXIgYnBtbk1vZGVsZXIgPSBuZXcgQnBtbk1vZGVsZXIoe1xyXG4gICAgY29udGFpbmVyOiBjYW52YXMsXHJcbiAgICBwcm9wZXJ0aWVzUGFuZWw6IHtcclxuICAgICAgICBwYXJlbnQ6ICcjanMtcHJvcGVydGllcy1wYW5lbCdcclxuICAgIH0sXHJcbiAgICBhZGRpdGlvbmFsTW9kdWxlczogW1xyXG4gICAgICAgIHByb3BlcnRpZXNQYW5lbE1vZHVsZSxcclxuICAgICAgICBwcm9wZXJ0aWVzUHJvdmlkZXJNb2R1bGUsXHJcbiAgICAgICAgY3VzdG9tQ29udHJvbHNNb2R1bGUsXHJcbiAgICAgICAgY3VzdG9tVHJhbnNsYXRlTW9kdWxlXHJcbiAgICBdLFxyXG4gICAgbW9kZGxlRXh0ZW5zaW9uczoge1xyXG4gICAgICAgIGFjdGl2aXRpOmFjdGl2aXRpTW9kZGxlRGVzY3JpcHRvclxyXG4gICAgfVxyXG59KTtcclxuY29udGFpbmVyLnJlbW92ZUNsYXNzKCd3aXRoLWRpYWdyYW0nKTtcclxuLy8g5Yik5pat5rWP6KeI5Zmo5pSv5oyB56iL5bqmXHJcbmlmICghd2luZG93LkZpbGVMaXN0IHx8ICF3aW5kb3cuRmlsZVJlYWRlcikge1xyXG4gICAgd2luZG93LmFsZXJ0KCfor7fkvb/nlKjosLfmrYzjgIHngavni5DjgIFJRTEwK+a1j+iniOWZqCcpO1xyXG59IGVsc2Uge1xyXG4gICAgdG9vbHMucmVnaXN0ZXJGaWxlRHJvcChjb250YWluZXIsIHRvb2xzLmNyZWF0ZURpYWdyYW0oZGlhZ3JhbVhNTCwgYnBtbk1vZGVsZXIsIGNvbnRhaW5lcikpO1xyXG59XHJcblxyXG5cclxuJChmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyDliJvlu7picG1uXHJcbiAgICB2YXIgcGFyYW0gPSB0b29scy5nZXRVcmxQYXJhbSh3aW5kb3cubG9jYXRpb24uaHJlZilcclxuICAgICAgICAkKCcuaXRlbScpLnNob3coKVxyXG4gICAgaWYgKHBhcmFtLnR5cGUgPT09ICdhZGRCcG1uJykge1xyXG4gICAgICAgIHRvb2xzLmNyZWF0ZURpYWdyYW0oZGlhZ3JhbVhNTCwgYnBtbk1vZGVsZXIsIGNvbnRhaW5lcik7XHJcbiAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09ICdsb29rQnBtbicpIHsgLy/nvJbovpFicG1uXHJcbiAgICAgICAgZGVidWdnZXJcclxuICAgICAgICAkKCcuaXRlbScpLmhpZGUoKVxyXG4gICAgICAgICQoJy5kb3dubG9hZCcpLnNob3coKVxyXG4gICAgICAgIGNvbnN0IElkID0gcGFyYW0uZGVwbG95bWVudEZpbGVVVUlEIHx8ICc2ZDRhZjJkYy1iYWIwLTExZWEtYjU4NC0zY2YwMTFlYWFmY2EnXHJcbiAgICAgICAgY29uc3QgTmFtZT1wYXJhbS5kZXBsb3ltZW50TmFtZSB8fCAnU3RyaW5nLmJwbW4nXHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2VJZD1wYXJhbS5pbnN0YW5jZUlkXHJcbiAgICAgICAgdmFyIHBhcmFtPXtcclxuICAgICAgICAgICAgXCJkZXBsb3ltZW50SWRcIjpJZCxcclxuICAgICAgICAgICAgXCJyZXNvdXJjZU5hbWVcIjpkZWNvZGVVUkkoTmFtZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoaW5zdGFuY2VJZCl7XHJcbiAgICAgICAgICAgIHZhciBwYXJhbTE9e1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2VJZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6IHB1YmxpY3VybCsnYWN0aXZpdGlIaXN0b3J5L2dldGhpZ2hMaW5lJyxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogcGFyYW0xLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6J2pzb24nLFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgQ29sb3JKc29uPXRvb2xzLmdldEJ5Q29sb3IocmVzdWx0Lm9iailcclxuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHB1YmxpY3VybCsncHJvY2Vzc0RlZmluaXRpb24vZ2V0RGVmaW5pdGlvblhNTCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBwYXJhbSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6J3RleHQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3WG1sRGF0YSA9IHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHMuY3JlYXRlRGlhZ3JhbShuZXdYbWxEYXRhLCBicG1uTW9kZWxlciwgY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gQ29sb3JKc29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xzLnNldENvbG9yKENvbG9ySnNvbltpXSxicG1uTW9kZWxlcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAyMDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIC8v5Yqg6L295ZCO5Y+w5pa55rOV6I635Y+WeG1sXHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6IHB1YmxpY3VybCsncHJvY2Vzc0RlZmluaXRpb24vZ2V0RGVmaW5pdGlvblhNTCcsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IHBhcmFtLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6J3RleHQnLFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdYbWxEYXRhID0gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHMuY3JlYXRlRGlhZ3JhbShuZXdYbWxEYXRhLCBicG1uTW9kZWxlciwgY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIGlmKHBhcmFtLnR5cGUgPT09IFwiaGlzdG9yeUJwbW5cIikgeyAvLyBicG1u5Y6G5Y+yXHJcbiAgICAgICAgJCgnLml0ZW0nKS5oaWRlKClcclxuICAgICAgICAkKCcuZG93bmxvYWQnKS5zaG93KClcclxuICAgIH1cclxuICAgIC8vIOeCueWHu+aWsOWinlxyXG4gICAgJCgnI2pzLWRvd25sb2FkLWRpYWdyYW0nKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgIHRvb2xzLnN5b3BlbignYWxlcnQnKVxyXG4gICAgfSlcclxuXHJcbiAgICAvLyDngrnlh7vlj5bmtohcclxuICAgICQoJy5jYW5jZWwnKS5vbihcImNsaWNrXCIsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRvb2xzLnN5aGlkZSgnYWxlcnQnKVxyXG4gICAgfSlcclxuICAgIC8vIOeCueWHu+ehruWumlxyXG4gICAgJCgnI3N1cmUnKS5vbignY2xpY2snLGZ1bmN0aW9uKCl7XHJcbiAgICAgICAvLyBjb25zdCB0ZXh0PSQoXCIjZGVwbG95bWVudE5hbWVcIikudmFsKClcclxuICAgICAgICB0b29scy5zYXZlQnBtbihicG1uTW9kZWxlcilcclxuICAgIH0pXHJcblxyXG5cclxuXHJcbiAgICAvLyDngrnlh7vkuIvovb1cclxuICAgICQoXCIjZG93bmxvYWRCcG1uXCIpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRvb2xzLmRvd25Mb2FkKGJwbW5Nb2RlbGVyKVxyXG4gICAgfSlcclxuICAgIC8vIOeCueWHu+S4iuS8oFxyXG4gICAgJChcIiN1cGxvYWRGaWxlXCIpLm9uKFwiY2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0b29scy51cGxvYWQoYnBtbk1vZGVsZXIsY29udGFpbmVyKVxyXG4gICAgfSlcclxufSk7XHJcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWInKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVzY2FwZUhUTUwgPSByZXF1aXJlKCcuL1V0aWxzJykuZXNjYXBlSFRNTDtcblxudmFyIGRvbWlmeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5kb21pZnksXG4gICAgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnksXG4gICAgZG9tUXVlcnlBbGwgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnlBbGwsXG4gICAgZG9tUmVtb3ZlID0gcmVxdWlyZSgnbWluLWRvbScpLnJlbW92ZSxcbiAgICBkb21DbGFzc2VzID0gcmVxdWlyZSgnbWluLWRvbScpLmNsYXNzZXMsXG4gICAgZG9tQ2xvc2VzdCA9IHJlcXVpcmUoJ21pbi1kb20nKS5jbG9zZXN0LFxuICAgIGRvbUF0dHIgPSByZXF1aXJlKCdtaW4tZG9tJykuYXR0cixcbiAgICBkb21EZWxlZ2F0ZSA9IHJlcXVpcmUoJ21pbi1kb20nKS5kZWxlZ2F0ZSxcbiAgICBkb21NYXRjaGVzID0gcmVxdWlyZSgnbWluLWRvbScpLm1hdGNoZXM7XG5cbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKSxcbiAgICBmaWx0ZXIgPSByZXF1aXJlKCdsb2Rhc2gvZmlsdGVyJyksXG4gICAgZ2V0ID0gcmVxdWlyZSgnbG9kYXNoL2dldCcpLFxuICAgIGtleXMgPSByZXF1aXJlKCdsb2Rhc2gva2V5cycpLFxuICAgIGlzRW1wdHkgPSByZXF1aXJlKCdsb2Rhc2gvaXNFbXB0eScpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCdsb2Rhc2gvaXNBcnJheScpLFxuICAgIHhvciA9IHJlcXVpcmUoJ2xvZGFzaC94b3InKSxcbiAgICBkZWJvdW5jZSA9IHJlcXVpcmUoJ2xvZGFzaC9kZWJvdW5jZScpO1xuXG52YXIgdXBkYXRlU2VsZWN0aW9uID0gcmVxdWlyZSgnc2VsZWN0aW9uLXVwZGF0ZScpO1xuXG52YXIgc2Nyb2xsVGFicyA9IHJlcXVpcmUoJ3Njcm9sbC10YWJzJykuZGVmYXVsdDtcblxudmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcblxudmFyIEhJREVfQ0xBU1MgPSAnYnBwLWhpZGRlbic7XG52YXIgREVCT1VOQ0VfREVMQVkgPSAzMDA7XG5cblxuZnVuY3Rpb24gaXNUb2dnbGUobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnY2hlY2tib3gnIHx8IG5vZGUudHlwZSA9PT0gJ3JhZGlvJztcbn1cblxuZnVuY3Rpb24gaXNTZWxlY3Qobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnc2VsZWN0LW9uZSc7XG59XG5cbmZ1bmN0aW9uIGlzQ29udGVudEVkaXRhYmxlKG5vZGUpIHtcbiAgcmV0dXJuIGRvbUF0dHIobm9kZSwgJ2NvbnRlbnRlZGl0YWJsZScpO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eVBsYWNlaG9sZGVycyhub2RlKSB7XG4gIHZhciBzZWxlY3RvciA9ICdpbnB1dFtuYW1lXSwgdGV4dGFyZWFbbmFtZV0sIFtkYXRhLXZhbHVlXSwgW2NvbnRlbnRlZGl0YWJsZV0nO1xuICB2YXIgcGxhY2Vob2xkZXJzID0gZG9tUXVlcnlBbGwoc2VsZWN0b3IsIG5vZGUpO1xuICBpZiAoKCFwbGFjZWhvbGRlcnMgfHwgIXBsYWNlaG9sZGVycy5sZW5ndGgpICYmIGRvbU1hdGNoZXMobm9kZSwgc2VsZWN0b3IpKSB7XG4gICAgcGxhY2Vob2xkZXJzID0gWyBub2RlIF07XG4gIH1cbiAgcmV0dXJuIHBsYWNlaG9sZGVycztcbn1cblxuLyoqXG4gKiBSZXR1cm4gYWxsIGFjdGl2ZSBmb3JtIGNvbnRyb2xzLlxuICogVGhpcyBleGNsdWRlcyB0aGUgaW52aXNpYmxlIGNvbnRyb2xzIHVubGVzcyBhbGwgaXMgdHJ1ZVxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsPWZhbHNlXVxuICovXG5mdW5jdGlvbiBnZXRGb3JtQ29udHJvbHMobm9kZSwgYWxsKSB7XG4gIHZhciBjb250cm9scyA9IGRvbVF1ZXJ5QWxsKCdpbnB1dFtuYW1lXSwgdGV4dGFyZWFbbmFtZV0sIHNlbGVjdFtuYW1lXSwgW2NvbnRlbnRlZGl0YWJsZV0nLCBub2RlKTtcblxuICBpZiAoIWNvbnRyb2xzIHx8ICFjb250cm9scy5sZW5ndGgpIHtcbiAgICBjb250cm9scyA9IGRvbU1hdGNoZXMobm9kZSwgJ29wdGlvbicpID8gWyBub2RlIF0gOiBjb250cm9scztcbiAgfVxuXG4gIGlmICghYWxsKSB7XG4gICAgY29udHJvbHMgPSBmaWx0ZXIoY29udHJvbHMsIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHJldHVybiAhZG9tQ2xvc2VzdChub2RlLCAnLicgKyBISURFX0NMQVNTKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBjb250cm9scztcbn1cblxuZnVuY3Rpb24gZ2V0Rm9ybUNvbnRyb2xWYWx1ZXNJblNjb3BlKGVudHJ5Tm9kZSkge1xuICB2YXIgdmFsdWVzID0ge307XG5cbiAgdmFyIGNvbnRyb2xOb2RlcyA9IGdldEZvcm1Db250cm9scyhlbnRyeU5vZGUpO1xuXG4gIGZvckVhY2goY29udHJvbE5vZGVzLCBmdW5jdGlvbihjb250cm9sTm9kZSkge1xuICAgIHZhciB2YWx1ZSA9IGNvbnRyb2xOb2RlLnZhbHVlO1xuXG4gICAgdmFyIG5hbWUgPSBkb21BdHRyKGNvbnRyb2xOb2RlLCAnbmFtZScpIHx8IGRvbUF0dHIoY29udHJvbE5vZGUsICdkYXRhLW5hbWUnKTtcblxuICAgIC8vIHRha2UgdG9nZ2xlIHN0YXRlIGludG8gYWNjb3VudCBmb3IgcmFkaW8gLyBjaGVja2JveGVzXG4gICAgaWYgKGlzVG9nZ2xlKGNvbnRyb2xOb2RlKSkge1xuICAgICAgaWYgKGNvbnRyb2xOb2RlLmNoZWNrZWQpIHtcbiAgICAgICAgaWYgKCFkb21BdHRyKGNvbnRyb2xOb2RlLCAndmFsdWUnKSkge1xuICAgICAgICAgIHZhbHVlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IGNvbnRyb2xOb2RlLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlXG4gICAgaWYgKGlzQ29udGVudEVkaXRhYmxlKGNvbnRyb2xOb2RlKSkge1xuICAgICAgdmFsdWUgPSBjb250cm9sTm9kZS5pbm5lclRleHQ7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAvLyByZXR1cm4gdGhlIGFjdHVhbCB2YWx1ZVxuICAgICAgLy8gaGFuZGxlIHNlcmlhbGl6YXRpb24gaW4gZW50cnkgcHJvdmlkZXJcbiAgICAgIC8vIChpZS4gaWYgZW1wdHkgc3RyaW5nIHNob3VsZCBiZSBzZXJpYWxpemVkIG9yIG5vdClcbiAgICAgIHZhbHVlc1tuYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlcztcblxufVxuXG4vKipcbiAqIEV4dHJhY3QgaW5wdXQgdmFsdWVzIGZyb20gZW50cnkgbm9kZVxuICpcbiAqIEBwYXJhbSAge0RPTUVsZW1lbnR9IGVudHJ5Tm9kZVxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0Rm9ybUNvbnRyb2xWYWx1ZXMoZW50cnlOb2RlKSB7XG5cbiAgdmFyIHZhbHVlcztcblxuICB2YXIgbGlzdENvbnRhaW5lciA9IGRvbVF1ZXJ5KCdbZGF0YS1saXN0LWVudHJ5LWNvbnRhaW5lcl0nLCBlbnRyeU5vZGUpO1xuICBpZiAobGlzdENvbnRhaW5lcikge1xuICAgIHZhbHVlcyA9IFtdO1xuICAgIHZhciBsaXN0Tm9kZXMgPSBsaXN0Q29udGFpbmVyLmNoaWxkcmVuIHx8IFtdO1xuICAgIGZvckVhY2gobGlzdE5vZGVzLCBmdW5jdGlvbihsaXN0Tm9kZSkge1xuICAgICAgdmFsdWVzLnB1c2goZ2V0Rm9ybUNvbnRyb2xWYWx1ZXNJblNjb3BlKGxpc3ROb2RlKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWVzID0gZ2V0Rm9ybUNvbnRyb2xWYWx1ZXNJblNjb3BlKGVudHJ5Tm9kZSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWVzO1xufVxuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBmb3JtIGV4dHJhY3RlZCB2YWx1ZSBlcXVhbHNcbiAqIHRvIGFuIG9sZCBjYWNoZWQgdmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvbGRWYWx1ZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gdmFsdWVFcXVhbCh2YWx1ZSwgb2xkVmFsdWUpIHtcblxuICBpZiAodmFsdWUgJiYgIW9sZFZhbHVlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGFsbEtleXMgPSBrZXlzKHZhbHVlKS5jb25jYXQoa2V5cyhvbGRWYWx1ZSkpO1xuXG4gIHJldHVybiBhbGxLZXlzLmV2ZXJ5KGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiB2YWx1ZVtrZXldID09PSBvbGRWYWx1ZVtrZXldO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gZm9ybSBleHRyYWN0ZWQgdmFsdWUocylcbiAqIGVxdWFsIGFuIG9sZCBjYWNoZWQgdmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD58T2JqZWN0fSB2YWx1ZXNcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0PnxPYmplY3R9IG9sZFZhbHVlc1xuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gdmFsdWVzRXF1YWwodmFsdWVzLCBvbGRWYWx1ZXMpIHtcblxuICBpZiAoaXNBcnJheSh2YWx1ZXMpKSB7XG5cbiAgICBpZiAodmFsdWVzLmxlbmd0aCAhPT0gb2xkVmFsdWVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZXMuZXZlcnkoZnVuY3Rpb24odiwgaWR4KSB7XG4gICAgICByZXR1cm4gdmFsdWVFcXVhbCh2LCBvbGRWYWx1ZXNbaWR4XSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWVFcXVhbCh2YWx1ZXMsIG9sZFZhbHVlcyk7XG59XG5cbi8qKlxuICogUmV0dXJuIGEgbWFwcGluZyBvZiB7IGlkOiBlbnRyeSB9IGZvciBhbGwgZW50cmllcyBpbiB0aGUgZ2l2ZW4gZ3JvdXBzIGluIHRoZSBnaXZlbiB0YWJzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YWJzXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RFbnRyaWVzKHRhYnMpIHtcbiAgcmV0dXJuIGtleUJ5KGZsYXR0ZW5EZWVwKG1hcChmbGF0dGVuRGVlcChtYXAodGFicywgJ2dyb3VwcycpKSwgJ2VudHJpZXMnKSksICdpZCcpO1xufVxuXG4vKipcbiAqIFJldHVybiBhIG1hcHBpbmcgb2YgeyBpZDogZ3JvdXAgfSBmb3IgYWxsIGdyb3VwcyBpbiB0aGUgZ2l2ZW4gdGFicy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGFic1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBleHRyYWN0R3JvdXBzKHRhYnMpIHtcbiAgcmV0dXJuIGtleUJ5KGZsYXR0ZW5EZWVwKG1hcCh0YWJzLCAnZ3JvdXBzJykpLCAnaWQnKTtcbn1cblxuLyoqXG4gKiBBIHByb3BlcnRpZXMgcGFuZWwgaW1wbGVtZW50YXRpb24uXG4gKlxuICogVG8gdXNlIGl0IHByb3ZpZGUgYSBgcHJvcGVydGllc1Byb3ZpZGVyYCBjb21wb25lbnQgdGhhdCBrbm93c1xuICogYWJvdXQgd2hpY2ggcHJvcGVydGllcyB0byBkaXNwbGF5LlxuICpcbiAqIFByb3BlcnRpZXMgZWRpdCBzdGF0ZSAvIHZpc2liaWxpdHkgY2FuIGJlIGludGVyY2VwdGVkXG4gKiB2aWEgYSBjdXN0b20ge0BsaW5rIFByb3BlcnRpZXNBY3RpdmF0b3J9LlxuICpcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZ1xuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKiBAcGFyYW0ge1Byb3BlcnRpZXNQcm92aWRlcn0gcHJvcGVydGllc1Byb3ZpZGVyXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge0NvbW1hbmRTdGFja30gY29tbWFuZFN0YWNrXG4gKi9cbmZ1bmN0aW9uIFByb3BlcnRpZXNQYW5lbChjb25maWcsIGV2ZW50QnVzLCBtb2RlbGluZywgcHJvcGVydGllc1Byb3ZpZGVyLCBjb21tYW5kU3RhY2ssIGNhbnZhcykge1xuXG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gIHRoaXMuX2NvbW1hbmRTdGFjayA9IGNvbW1hbmRTdGFjaztcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9wcm9wZXJ0aWVzUHJvdmlkZXIgPSBwcm9wZXJ0aWVzUHJvdmlkZXI7XG5cbiAgdGhpcy5faW5pdChjb25maWcpO1xufVxuXG5Qcm9wZXJ0aWVzUGFuZWwuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5wcm9wZXJ0aWVzUGFuZWwnLFxuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnLFxuICAncHJvcGVydGllc1Byb3ZpZGVyJyxcbiAgJ2NvbW1hbmRTdGFjaycsXG4gICdjYW52YXMnXG5dO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByb3BlcnRpZXNQYW5lbDtcblxuXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24oY29uZmlnKSB7XG5cbiAgdmFyIGNhbnZhcyA9IHRoaXMuX2NhbnZhcyxcbiAgICAgIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8qKlxuICAgKiBTZWxlY3QgdGhlIHJvb3QgZWxlbWVudCBvbmNlIGl0IGlzIGFkZGVkIHRvIHRoZSBjYW52YXNcbiAgICovXG4gIGV2ZW50QnVzLm9uKCdyb290LmFkZGVkJywgZnVuY3Rpb24oZSkge1xuICAgIHZhciBlbGVtZW50ID0gZS5lbGVtZW50O1xuXG4gICAgaWYgKGlzSW1wbGljaXRSb290KGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZi51cGRhdGUoZWxlbWVudCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdzZWxlY3Rpb24uY2hhbmdlZCcsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbmV3RWxlbWVudCA9IGUubmV3U2VsZWN0aW9uWzBdO1xuXG4gICAgdmFyIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XG5cbiAgICBpZiAoaXNJbXBsaWNpdFJvb3Qocm9vdEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZi51cGRhdGUobmV3RWxlbWVudCk7XG4gIH0pO1xuXG4gIC8vIGFkZCAvIHVwZGF0ZSB0YWItYmFyIHNjcm9sbGluZ1xuICBldmVudEJ1cy5vbihbXG4gICAgJ3Byb3BlcnRpZXNQYW5lbC5jaGFuZ2VkJyxcbiAgICAncHJvcGVydGllc1BhbmVsLnJlc2l6ZWQnXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgdGFiQmFyTm9kZSA9IGRvbVF1ZXJ5KCcuYnBwLXByb3BlcnRpZXMtdGFiLWJhcicsIHNlbGYuX2NvbnRhaW5lcik7XG5cbiAgICBpZiAoIXRhYkJhck5vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc2Nyb2xsZXIgPSBzY3JvbGxUYWJzLmdldCh0YWJCYXJOb2RlKTtcblxuICAgIGlmICghc2Nyb2xsZXIpIHtcblxuICAgICAgLy8gd2UgZGlkIG5vdCBpbml0aWFsaXplIHlldCwgZG8gdGhhdFxuICAgICAgLy8gbm93IGFuZCBtYWtlIHN1cmUgd2Ugc2VsZWN0IHRoZSBhY3RpdmVcbiAgICAgIC8vIHRhYiBvbiBzY3JvbGwgdXBkYXRlXG4gICAgICBzY3JvbGxlciA9IHNjcm9sbFRhYnModGFiQmFyTm9kZSwge1xuICAgICAgICBzZWxlY3RvcnM6IHtcbiAgICAgICAgICB0YWJzQ29udGFpbmVyOiAnLmJwcC1wcm9wZXJ0aWVzLXRhYnMtbGlua3MnLFxuICAgICAgICAgIHRhYjogJy5icHAtcHJvcGVydGllcy10YWJzLWxpbmtzIGxpJyxcbiAgICAgICAgICBpZ25vcmU6ICcuYnBwLWhpZGRlbicsXG4gICAgICAgICAgYWN0aXZlOiAnLmJwcC1hY3RpdmUnXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG5cbiAgICAgIHNjcm9sbGVyLm9uKCdzY3JvbGwnLCBmdW5jdGlvbihuZXdBY3RpdmVOb2RlLCBvbGRBY3RpdmVOb2RlLCBkaXJlY3Rpb24pIHtcblxuICAgICAgICB2YXIgbGlua05vZGUgPSBkb21RdWVyeSgnW2RhdGEtdGFiLXRhcmdldF0nLCBuZXdBY3RpdmVOb2RlKTtcblxuICAgICAgICB2YXIgdGFiSWQgPSBkb21BdHRyKGxpbmtOb2RlLCAnZGF0YS10YWItdGFyZ2V0Jyk7XG5cbiAgICAgICAgc2VsZi5hY3RpdmF0ZVRhYih0YWJJZCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyByZWFjdCBvbiB0YWIgY2hhbmdlcyBhbmQgb3IgdGFiQ29udGFpbmVyIHJlc2l6ZVxuICAgIC8vIGFuZCBtYWtlIHN1cmUgdGhlIGFjdGl2ZSB0YWIgaXMgc2hvd24gY29tcGxldGVseVxuICAgIHNjcm9sbGVyLnVwZGF0ZSgpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignZWxlbWVudHMuY2hhbmdlZCcsIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjdXJyZW50ID0gc2VsZi5fY3VycmVudDtcbiAgICB2YXIgZWxlbWVudCA9IGN1cnJlbnQgJiYgY3VycmVudC5lbGVtZW50O1xuXG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGlmIChlLmVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgIT09IC0xKSB7XG4gICAgICAgIHNlbGYudXBkYXRlKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnRUZW1wbGF0ZXMuY2hhbmdlZCcsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBjdXJyZW50ID0gc2VsZi5fY3VycmVudDtcbiAgICB2YXIgZWxlbWVudCA9IGN1cnJlbnQgJiYgY3VycmVudC5lbGVtZW50O1xuXG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHNlbGYudXBkYXRlKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2RpYWdyYW0uZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuZGV0YWNoKCk7XG4gIH0pO1xuXG4gIHRoaXMuX2NvbnRhaW5lciA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImJwcC1wcm9wZXJ0aWVzLXBhbmVsXCI+PC9kaXY+Jyk7XG5cbiAgdGhpcy5fYmluZExpc3RlbmVycyh0aGlzLl9jb250YWluZXIpO1xuXG4gIGlmIChjb25maWcgJiYgY29uZmlnLnBhcmVudCkge1xuICAgIHRoaXMuYXR0YWNoVG8oY29uZmlnLnBhcmVudCk7XG4gIH1cbn07XG5cblxuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5hdHRhY2hUbyA9IGZ1bmN0aW9uKHBhcmVudE5vZGUpIHtcblxuICBpZiAoIXBhcmVudE5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudE5vZGUgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIC8vIGVuc3VyZSB3ZSBkZXRhY2ggZnJvbSB0aGVcbiAgLy8gcHJldmlvdXMsIG9sZCBwYXJlbnRcbiAgdGhpcy5kZXRhY2goKTtcblxuICAvLyB1bndyYXAgalF1ZXJ5IGlmIHByb3ZpZGVkXG4gIGlmIChwYXJlbnROb2RlLmdldCAmJiBwYXJlbnROb2RlLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5qcXVlcnkpIHtcbiAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5nZXQoMCk7XG4gIH1cblxuICBpZiAodHlwZW9mIHBhcmVudE5vZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcGFyZW50Tm9kZSA9IGRvbVF1ZXJ5KHBhcmVudE5vZGUpO1xuICB9XG5cbiAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lcjtcblxuICBwYXJlbnROb2RlLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG5cbiAgdGhpcy5fZW1pdCgnYXR0YWNoJyk7XG59O1xuXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLmRldGFjaCA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXIsXG4gICAgICBwYXJlbnROb2RlID0gY29udGFpbmVyLnBhcmVudE5vZGU7XG5cbiAgaWYgKCFwYXJlbnROb2RlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fZW1pdCgnZGV0YWNoJyk7XG5cbiAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjb250YWluZXIpO1xufTtcblxuXG4vKipcbiAqIFNlbGVjdCB0aGUgZ2l2ZW4gdGFiIHdpdGhpbiB0aGUgcHJvcGVydGllcyBwYW5lbC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHRhYlxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLmFjdGl2YXRlVGFiID0gZnVuY3Rpb24odGFiKSB7XG5cbiAgdmFyIHRhYklkID0gdHlwZW9mIHRhYiA9PT0gJ3N0cmluZycgPyB0YWIgOiB0YWIuaWQ7XG5cbiAgdmFyIGN1cnJlbnQgPSB0aGlzLl9jdXJyZW50O1xuXG4gIHZhciBwYW5lbE5vZGUgPSBjdXJyZW50LnBhbmVsO1xuXG4gIHZhciBhbGxUYWJOb2RlcyA9IGRvbVF1ZXJ5QWxsKCcuYnBwLXByb3BlcnRpZXMtdGFiJywgcGFuZWxOb2RlKSxcbiAgICAgIGFsbFRhYkxpbmtOb2RlcyA9IGRvbVF1ZXJ5QWxsKCcuYnBwLXByb3BlcnRpZXMtdGFiLWxpbmsnLCBwYW5lbE5vZGUpO1xuXG4gIGZvckVhY2goYWxsVGFiTm9kZXMsIGZ1bmN0aW9uKHRhYk5vZGUpIHtcblxuICAgIHZhciBjdXJyZW50VGFiSWQgPSBkb21BdHRyKHRhYk5vZGUsICdkYXRhLXRhYicpO1xuXG4gICAgZG9tQ2xhc3Nlcyh0YWJOb2RlKS50b2dnbGUoJ2JwcC1hY3RpdmUnLCB0YWJJZCA9PT0gY3VycmVudFRhYklkKTtcbiAgfSk7XG5cbiAgZm9yRWFjaChhbGxUYWJMaW5rTm9kZXMsIGZ1bmN0aW9uKHRhYkxpbmtOb2RlKSB7XG5cbiAgICB2YXIgdGFiTGluayA9IGRvbVF1ZXJ5KCdbZGF0YS10YWItdGFyZ2V0XScsIHRhYkxpbmtOb2RlKSxcbiAgICAgICAgY3VycmVudFRhYklkID0gZG9tQXR0cih0YWJMaW5rLCAnZGF0YS10YWItdGFyZ2V0Jyk7XG5cbiAgICBkb21DbGFzc2VzKHRhYkxpbmtOb2RlKS50b2dnbGUoJ2JwcC1hY3RpdmUnLCB0YWJJZCA9PT0gY3VycmVudFRhYklkKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgRE9NIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwcm9wZXJ0aWVzIHBhbmVsXG4gKi9cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgY3VycmVudCA9IHRoaXMuX2N1cnJlbnQ7XG5cbiAgLy8gbm8gYWN0dWFsIHNlbGVjdGlvbiBjaGFuZ2VcbiAgdmFyIG5lZWRzQ3JlYXRlID0gdHJ1ZTtcblxuICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG5cbiAgICAvLyB1c2UgUm9vdEVsZW1lbnQgb2YgQlBNTiBkaWFncmFtIHRvIGdlbmVyYXRlIHByb3BlcnRpZXMgcGFuZWwgaWYgbm8gZWxlbWVudCBpcyBzZWxlY3RlZFxuICAgIGVsZW1lbnQgPSB0aGlzLl9jYW52YXMuZ2V0Um9vdEVsZW1lbnQoKTtcbiAgfVxuXG4gIHZhciBuZXdUYWJzID0gdGhpcy5fcHJvcGVydGllc1Byb3ZpZGVyLmdldFRhYnMoZWxlbWVudCk7XG5cbiAgaWYgKGN1cnJlbnQgJiYgY3VycmVudC5lbGVtZW50ID09PSBlbGVtZW50KSB7XG4gICAgLy8gc2VlIGlmIHdlIGNhbiByZXVzZSB0aGUgZXhpc3RpbmcgcGFuZWxcblxuICAgIG5lZWRzQ3JlYXRlID0gdGhpcy5fZW50cmllc0NoYW5nZWQoY3VycmVudCwgbmV3VGFicyk7XG4gIH1cblxuICBpZiAobmVlZHNDcmVhdGUpIHtcblxuICAgIGlmIChjdXJyZW50KSB7XG5cbiAgICAgIC8vIGdldCBhY3RpdmUgdGFiIGZyb20gdGhlIGV4aXN0aW5nIHBhbmVsIGJlZm9yZSByZW1vdmUgaXRcbiAgICAgIHZhciBhY3RpdmVUYWJOb2RlID0gZG9tUXVlcnkoJy5icHAtcHJvcGVydGllcy10YWIuYnBwLWFjdGl2ZScsIGN1cnJlbnQucGFuZWwpO1xuXG4gICAgICB2YXIgYWN0aXZlVGFiSWQ7XG4gICAgICBpZiAoYWN0aXZlVGFiTm9kZSkge1xuICAgICAgICBhY3RpdmVUYWJJZCA9IGRvbUF0dHIoYWN0aXZlVGFiTm9kZSwgJ2RhdGEtdGFiJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIHJlbW92ZSBvbGQgcGFuZWxcbiAgICAgIGRvbVJlbW92ZShjdXJyZW50LnBhbmVsKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50ID0gdGhpcy5fY3JlYXRlKGVsZW1lbnQsIG5ld1RhYnMpO1xuXG4gICAgLy8gYWN0aXZhdGUgdGhlIHNhdmVkIGFjdGl2ZSB0YWIgZnJvbSB0aGUgcmVtb3ZlIHBhbmVsIG9yIHRoZSBmaXJzdCB0YWJcbiAgICAoYWN0aXZlVGFiSWQpID8gdGhpcy5hY3RpdmF0ZVRhYihhY3RpdmVUYWJJZCkgOiB0aGlzLmFjdGl2YXRlVGFiKHRoaXMuX2N1cnJlbnQudGFic1swXSk7XG5cbiAgfVxuXG4gIGlmICh0aGlzLl9jdXJyZW50KSB7XG4gICAgLy8gbWFrZSBzdXJlIGNvcnJlY3QgdGFiIGNvbnRlbnRzIGFyZSB2aXNpYmxlXG4gICAgdGhpcy5fdXBkYXRlQWN0aXZhdGlvbih0aGlzLl9jdXJyZW50KTtcblxuICB9XG5cbiAgdGhpcy5fZW1pdCgnY2hhbmdlZCcpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBvbmUgb2YgdHdvIGdyb3VwcyBoYXMgZGlmZmVyZW50IGVudHJpZXMgdGhhbiB0aGUgb3RoZXIuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBjdXJyZW50XG4gKiBAcGFyYW0gIHtPYmplY3R9IG5ld1RhYnNcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUuX2VudHJpZXNDaGFuZ2VkID0gZnVuY3Rpb24oY3VycmVudCwgbmV3VGFicykge1xuXG4gIHZhciBvbGRFbnRyeUlkcyA9IGtleXMoY3VycmVudC5lbnRyaWVzKSxcbiAgICAgIG5ld0VudHJ5SWRzID0ga2V5cyhleHRyYWN0RW50cmllcyhuZXdUYWJzKSk7XG5cbiAgcmV0dXJuICFpc0VtcHR5KHhvcihvbGRFbnRyeUlkcywgbmV3RW50cnlJZHMpKTtcbn07XG5cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUuX2VtaXQgPSBmdW5jdGlvbihldmVudCkge1xuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdwcm9wZXJ0aWVzUGFuZWwuJyArIGV2ZW50LCB7IHBhbmVsOiB0aGlzLCBjdXJyZW50OiB0aGlzLl9jdXJyZW50IH0pO1xufTtcblxuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5fYmluZExpc3RlbmVycyA9IGZ1bmN0aW9uKGNvbnRhaW5lcikge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvLyBoYW5kbGVzIGEgY2hhbmdlIGZvciBhIGdpdmVuIGV2ZW50XG4gIHZhciBoYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZXZlbnQpIHtcblxuICAgIC8vIHNlZSBpZiB3ZSBoYW5kbGUgYSBjaGFuZ2UgaW5zaWRlIGEgW2RhdGEtZW50cnldIGVsZW1lbnQuXG4gICAgLy8gaWYgbm90LCBkcm9wIG91dFxuICAgIHZhciBpbnB1dE5vZGUgPSBldmVudC5kZWxlZ2F0ZVRhcmdldCxcbiAgICAgICAgZW50cnlOb2RlID0gZG9tQ2xvc2VzdChpbnB1dE5vZGUsICdbZGF0YS1lbnRyeV0nKSxcbiAgICAgICAgZW50cnlJZCwgZW50cnk7XG5cbiAgICAvLyBjaGFuZ2UgZnJvbSBvdXRzaWRlIGEgW2RhdGEtZW50cnldIGVsZW1lbnQsIHNpbXBseSBpZ25vcmVcbiAgICBpZiAoIWVudHJ5Tm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVudHJ5SWQgPSBkb21BdHRyKGVudHJ5Tm9kZSwgJ2RhdGEtZW50cnknKTtcbiAgICBlbnRyeSA9IHNlbGYuZ2V0RW50cnkoZW50cnlJZCk7XG5cbiAgICB2YXIgdmFsdWVzID0gZ2V0Rm9ybUNvbnRyb2xWYWx1ZXMoZW50cnlOb2RlKTtcblxuICAgIGlmIChldmVudC50eXBlID09PSAnY2hhbmdlJykge1xuXG4gICAgICAvLyAtIGlmIHRoZSBcImRhdGEtb24tY2hhbmdlXCIgYXR0cmlidXRlIGlzIHByZXNlbnQgYW5kIGEgdmFsdWUgaXMgY2hhbmdlZCxcbiAgICAgIC8vICAgdGhlbiB0aGUgYXNzb2NpYXRlZCBhY3Rpb24gaXMgcGVyZm9ybWVkLlxuICAgICAgLy8gLSBpZiB0aGUgYXNzb2NpYXRlZCBhY3Rpb24gcmV0dXJucyBcInRydWVcIiB0aGVuIGFuIHVwZGF0ZSB0byB0aGUgYnVzaW5lc3NcbiAgICAgIC8vICAgb2JqZWN0IGlzIGRvbmVcbiAgICAgIC8vIC0gaWYgaXQgZG9lcyBub3QgcmV0dXJuIFwidHJ1ZVwiLCB0aGVuIG9ubHkgdGhlIERPTSBjb250ZW50IGlzIHVwZGF0ZWRcbiAgICAgIHZhciBvbkNoYW5nZUFjdGlvbiA9IGRvbUF0dHIoaW5wdXROb2RlLCAnZGF0YS1vbi1jaGFuZ2UnKTtcblxuICAgICAgaWYgKG9uQ2hhbmdlQWN0aW9uKSB7XG4gICAgICAgIHZhciBpc0VudHJ5RGlydHkgPSBzZWxmLmV4ZWN1dGVBY3Rpb24oZW50cnksIGVudHJ5Tm9kZSwgb25DaGFuZ2VBY3Rpb24sIGV2ZW50KTtcblxuICAgICAgICBpZiAoIWlzRW50cnlEaXJ0eSkge1xuICAgICAgICAgIHJldHVybiBzZWxmLnVwZGF0ZShzZWxmLl9jdXJyZW50LmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHNlbGYuYXBwbHlDaGFuZ2VzKGVudHJ5LCB2YWx1ZXMsIGVudHJ5Tm9kZSk7XG4gICAgc2VsZi51cGRhdGVTdGF0ZShlbnRyeSwgZW50cnlOb2RlKTtcbiAgfTtcblxuICAvLyBkZWJvdW5jZSB1cGRhdGUgb25seSBlbGVtZW50cyB0aGF0IGFyZSB0YXJnZXQgb2Yga2V5IGV2ZW50cyxcbiAgLy8gaS5lLiBJTlBVVCBhbmQgVEVYVEFSRUEuIFNFTEVDVHMgd2lsbCB0cmlnZ2VyIGFuIGltbWVkaWF0ZSB1cGRhdGUgYW55d2F5LlxuICBkb21EZWxlZ2F0ZS5iaW5kKGNvbnRhaW5lciwgJ2lucHV0LCB0ZXh0YXJlYSwgW2NvbnRlbnRlZGl0YWJsZV0nLCAnaW5wdXQnLCBkZWJvdW5jZShoYW5kbGVDaGFuZ2UsIERFQk9VTkNFX0RFTEFZKSk7XG4gIGRvbURlbGVnYXRlLmJpbmQoY29udGFpbmVyLCAnaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIFtjb250ZW50ZWRpdGFibGVdJywgJ2NoYW5nZScsIGhhbmRsZUNoYW5nZSk7XG5cbiAgLy8gaGFuZGxlIGtleSBldmVudHNcbiAgZG9tRGVsZWdhdGUuYmluZChjb250YWluZXIsICdzZWxlY3QnLCAna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHtcblxuICAgIC8vIERFTFxuICAgIGlmIChlLmtleUNvZGUgPT09IDQ2KSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfSk7XG5cbiAgZG9tRGVsZWdhdGUuYmluZChjb250YWluZXIsICdbZGF0YS1hY3Rpb25dJywgJ2NsaWNrJywgZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuXG4gICAgLy8gdHJpZ2dlcnMgb24gYWxsIGlucHV0c1xuICAgIHZhciBpbnB1dE5vZGUgPSBldmVudC5kZWxlZ2F0ZVRhcmdldCxcbiAgICAgICAgZW50cnlOb2RlID0gZG9tQ2xvc2VzdChpbnB1dE5vZGUsICdbZGF0YS1lbnRyeV0nKTtcblxuICAgIHZhciBhY3Rpb25JZCA9IGRvbUF0dHIoaW5wdXROb2RlLCAnZGF0YS1hY3Rpb24nKSxcbiAgICAgICAgZW50cnlJZCA9IGRvbUF0dHIoZW50cnlOb2RlLCAnZGF0YS1lbnRyeScpO1xuXG4gICAgdmFyIGVudHJ5ID0gc2VsZi5nZXRFbnRyeShlbnRyeUlkKTtcblxuICAgIHZhciBpc0VudHJ5RGlydHkgPSBzZWxmLmV4ZWN1dGVBY3Rpb24oZW50cnksIGVudHJ5Tm9kZSwgYWN0aW9uSWQsIGV2ZW50KTtcblxuICAgIGlmIChpc0VudHJ5RGlydHkpIHtcbiAgICAgIHZhciB2YWx1ZXMgPSBnZXRGb3JtQ29udHJvbFZhbHVlcyhlbnRyeU5vZGUpO1xuXG4gICAgICBzZWxmLmFwcGx5Q2hhbmdlcyhlbnRyeSwgdmFsdWVzLCBlbnRyeU5vZGUpO1xuICAgIH1cblxuICAgIHNlbGYudXBkYXRlU3RhdGUoZW50cnksIGVudHJ5Tm9kZSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZUlucHV0KGV2ZW50LCBlbGVtZW50KSB7XG4gICAgLy8gdHJpZ2dlcnMgb24gYWxsIGlucHV0c1xuICAgIHZhciBpbnB1dE5vZGUgPSBldmVudC5kZWxlZ2F0ZVRhcmdldDtcblxuICAgIHZhciBlbnRyeU5vZGUgPSBkb21DbG9zZXN0KGlucHV0Tm9kZSwgJ1tkYXRhLWVudHJ5XScpO1xuXG4gICAgLy8gb25seSB3b3JrIG9uIGRhdGEgZW50cmllc1xuICAgIGlmICghZW50cnlOb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGV2ZW50SGFuZGxlcklkID0gZG9tQXR0cihpbnB1dE5vZGUsICdkYXRhLWJsdXInKSxcbiAgICAgICAgZW50cnlJZCA9IGRvbUF0dHIoZW50cnlOb2RlLCAnZGF0YS1lbnRyeScpO1xuXG4gICAgdmFyIGVudHJ5ID0gc2VsZi5nZXRFbnRyeShlbnRyeUlkKTtcblxuICAgIHZhciBpc0VudHJ5RGlydHkgPSBzZWxmLmV4ZWN1dGVBY3Rpb24oZW50cnksIGVudHJ5Tm9kZSwgZXZlbnRIYW5kbGVySWQsIGV2ZW50KTtcblxuICAgIGlmIChpc0VudHJ5RGlydHkpIHtcbiAgICAgIHZhciB2YWx1ZXMgPSBnZXRGb3JtQ29udHJvbFZhbHVlcyhlbnRyeU5vZGUpO1xuXG4gICAgICBzZWxmLmFwcGx5Q2hhbmdlcyhlbnRyeSwgdmFsdWVzLCBlbnRyeU5vZGUpO1xuICAgIH1cblxuICAgIHNlbGYudXBkYXRlU3RhdGUoZW50cnksIGVudHJ5Tm9kZSk7XG4gIH1cblxuICBkb21EZWxlZ2F0ZS5iaW5kKGNvbnRhaW5lciwgJ1tkYXRhLWJsdXJdJywgJ2JsdXInLCBoYW5kbGVJbnB1dCwgdHJ1ZSk7XG5cbiAgLy8gbWFrZSB0YWIgbGlua3MgaW50ZXJhY3RpdmVcbiAgZG9tRGVsZWdhdGUuYmluZChjb250YWluZXIsICcuYnBwLXByb3BlcnRpZXMtdGFicy1saW5rcyBbZGF0YS10YWItdGFyZ2V0XScsICdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHZhciBkZWxlZ2F0ZVRhcmdldCA9IGV2ZW50LmRlbGVnYXRlVGFyZ2V0O1xuXG4gICAgdmFyIHRhYklkID0gZG9tQXR0cihkZWxlZ2F0ZVRhcmdldCwgJ2RhdGEtdGFiLXRhcmdldCcpO1xuXG4gICAgLy8gYWN0aXZhdGUgdGFiIG9uIGxpbmsgY2xpY2tcbiAgICBzZWxmLmFjdGl2YXRlVGFiKHRhYklkKTtcbiAgfSk7XG5cbn07XG5cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUudXBkYXRlU3RhdGUgPSBmdW5jdGlvbihlbnRyeSwgZW50cnlOb2RlKSB7XG4gIHRoaXMudXBkYXRlU2hvdyhlbnRyeSwgZW50cnlOb2RlKTtcbiAgdGhpcy51cGRhdGVEaXNhYmxlKGVudHJ5LCBlbnRyeU5vZGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGVudHJ5IG5vZGUgaW4gdGhlIERPTVxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLnVwZGF0ZVNob3cgPSBmdW5jdGlvbihlbnRyeSwgbm9kZSkge1xuXG4gIHZhciBjdXJyZW50ID0gdGhpcy5fY3VycmVudDtcblxuICBpZiAoIWN1cnJlbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2hvd05vZGVzID0gZG9tUXVlcnlBbGwoJ1tkYXRhLXNob3ddJywgbm9kZSkgfHwgW107XG5cbiAgZm9yRWFjaChzaG93Tm9kZXMsIGZ1bmN0aW9uKHNob3dOb2RlKSB7XG5cbiAgICB2YXIgZXhwciA9IGRvbUF0dHIoc2hvd05vZGUsICdkYXRhLXNob3cnKTtcbiAgICB2YXIgZm4gPSBnZXQoZW50cnksIGV4cHIpO1xuICAgIGlmIChmbikge1xuICAgICAgdmFyIHNjb3BlID0gZG9tQ2xvc2VzdChzaG93Tm9kZSwgJ1tkYXRhLXNjb3BlXScpIHx8IG5vZGU7XG4gICAgICB2YXIgc2hvdWxkU2hvdyA9IGZuKGN1cnJlbnQuZWxlbWVudCwgbm9kZSwgc2hvd05vZGUsIHNjb3BlKSB8fCBmYWxzZTtcbiAgICAgIGlmIChzaG91bGRTaG93KSB7XG4gICAgICAgIGRvbUNsYXNzZXMoc2hvd05vZGUpLnJlbW92ZShISURFX0NMQVNTKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbUNsYXNzZXMoc2hvd05vZGUpLmFkZChISURFX0NMQVNTKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBFdmFsdWF0ZXMgYSBnaXZlbiBmdW5jdGlvbi4gSWYgaXQgcmV0dXJucyB0cnVlLCB0aGVuIHRoZVxuICogbm9kZSBpcyBtYXJrZWQgYXMgXCJkaXNhYmxlZFwiLlxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLnVwZGF0ZURpc2FibGUgPSBmdW5jdGlvbihlbnRyeSwgbm9kZSkge1xuICB2YXIgY3VycmVudCA9IHRoaXMuX2N1cnJlbnQ7XG5cbiAgaWYgKCFjdXJyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5vZGVzID0gZG9tUXVlcnlBbGwoJ1tkYXRhLWRpc2FibGVdJywgbm9kZSkgfHwgW107XG5cbiAgZm9yRWFjaChub2RlcywgZnVuY3Rpb24oY3VycmVudE5vZGUpIHtcbiAgICB2YXIgZXhwciA9IGRvbUF0dHIoY3VycmVudE5vZGUsICdkYXRhLWRpc2FibGUnKTtcbiAgICB2YXIgZm4gPSBnZXQoZW50cnksIGV4cHIpO1xuICAgIGlmIChmbikge1xuICAgICAgdmFyIHNjb3BlID0gZG9tQ2xvc2VzdChjdXJyZW50Tm9kZSwgJ1tkYXRhLXNjb3BlXScpIHx8IG5vZGU7XG4gICAgICB2YXIgc2hvdWxkRGlzYWJsZSA9IGZuKGN1cnJlbnQuZWxlbWVudCwgbm9kZSwgY3VycmVudE5vZGUsIHNjb3BlKSB8fCBmYWxzZTtcbiAgICAgIGRvbUF0dHIoY3VycmVudE5vZGUsICdkaXNhYmxlZCcsIHNob3VsZERpc2FibGUgPyAnJyA6IG51bGwpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLmV4ZWN1dGVBY3Rpb24gPSBmdW5jdGlvbihlbnRyeSwgZW50cnlOb2RlLCBhY3Rpb25JZCwgZXZlbnQpIHtcbiAgdmFyIGN1cnJlbnQgPSB0aGlzLl9jdXJyZW50O1xuXG4gIGlmICghY3VycmVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBmbiA9IGdldChlbnRyeSwgYWN0aW9uSWQpO1xuICBpZiAoZm4pIHtcbiAgICB2YXIgc2NvcGVOb2RlID0gZG9tQ2xvc2VzdChldmVudC50YXJnZXQsICdbZGF0YS1zY29wZV0nKSB8fCBlbnRyeU5vZGU7XG4gICAgcmV0dXJuIGZuLmFwcGx5KGVudHJ5LCBbIGN1cnJlbnQuZWxlbWVudCwgZW50cnlOb2RlLCBldmVudCwgc2NvcGVOb2RlIF0pO1xuICB9XG59O1xuXG4vKipcbiAqIEFwcGx5IGNoYW5nZXMgdG8gdGhlIGJ1c2luZXNzIG9iamVjdCBieSBleGVjdXRpbmcgYSBjb21tYW5kXG4gKi9cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUuYXBwbHlDaGFuZ2VzID0gZnVuY3Rpb24oZW50cnksIHZhbHVlcywgY29udGFpbmVyRWxlbWVudCkge1xuXG4gIHZhciBlbGVtZW50ID0gdGhpcy5fY3VycmVudC5lbGVtZW50O1xuXG4gIC8vIGVuc3VyZSB3ZSBvbmx5IHVwZGF0ZSB0aGUgbW9kZWwgaWYgd2UgZ290IGRpcnR5IGNoYW5nZXNcbiAgaWYgKHZhbHVlc0VxdWFsKHZhbHVlcywgZW50cnkub2xkVmFsdWVzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjb21tYW5kID0gZW50cnkuc2V0KGVsZW1lbnQsIHZhbHVlcywgY29udGFpbmVyRWxlbWVudCk7XG5cbiAgdmFyIGNvbW1hbmRUb0V4ZWN1dGU7XG5cbiAgaWYgKGlzQXJyYXkoY29tbWFuZCkpIHtcbiAgICBpZiAoY29tbWFuZC5sZW5ndGgpIHtcbiAgICAgIGNvbW1hbmRUb0V4ZWN1dGUgPSB7XG4gICAgICAgIGNtZDogJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsXG4gICAgICAgIGNvbnRleHQ6IGZsYXR0ZW5EZWVwKGNvbW1hbmQpXG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb21tYW5kVG9FeGVjdXRlID0gY29tbWFuZDtcbiAgfVxuXG4gIGlmIChjb21tYW5kVG9FeGVjdXRlKSB7XG4gICAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoY29tbWFuZFRvRXhlY3V0ZS5jbWQsIGNvbW1hbmRUb0V4ZWN1dGUuY29udGV4dCB8fCB7IGVsZW1lbnQgOiBlbGVtZW50IH0pO1xuICB9IGVsc2Uge1xuICAgIHRoaXMudXBkYXRlKGVsZW1lbnQpO1xuICB9XG59O1xuXG5cbi8qKlxuICogYXBwbHkgdmFsaWRhdGlvbiBlcnJvcnMgaW4gdGhlIERPTSBhbmQgc2hvdyBvciByZW1vdmUgYW4gZXJyb3IgbWVzc2FnZSBuZWFyIHRoZSBlbnRyeSBub2RlLlxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLmFwcGx5VmFsaWRhdGlvbkVycm9ycyA9IGZ1bmN0aW9uKHZhbGlkYXRpb25FcnJvcnMsIGVudHJ5Tm9kZSkge1xuXG4gIHZhciB2YWxpZCA9IHRydWU7XG5cbiAgdmFyIGNvbnRyb2xOb2RlcyA9IGdldEZvcm1Db250cm9scyhlbnRyeU5vZGUsIHRydWUpO1xuXG4gIGZvckVhY2goY29udHJvbE5vZGVzLCBmdW5jdGlvbihjb250cm9sTm9kZSkge1xuXG4gICAgdmFyIG5hbWUgPSBkb21BdHRyKGNvbnRyb2xOb2RlLCAnbmFtZScpIHx8IGRvbUF0dHIoY29udHJvbE5vZGUsICdkYXRhLW5hbWUnKTtcblxuICAgIHZhciBlcnJvciA9IHZhbGlkYXRpb25FcnJvcnMgJiYgdmFsaWRhdGlvbkVycm9yc1tuYW1lXTtcblxuICAgIHZhciBlcnJvck1lc3NhZ2VOb2RlID0gZG9tUXVlcnkoJy5icHAtZXJyb3ItbWVzc2FnZScsIGNvbnRyb2xOb2RlLnBhcmVudE5vZGUpO1xuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICB2YWxpZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoIWVycm9yTWVzc2FnZU5vZGUpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlTm9kZSA9IGRvbWlmeSgnPGRpdj48L2Rpdj4nKTtcblxuICAgICAgICBkb21DbGFzc2VzKGVycm9yTWVzc2FnZU5vZGUpLmFkZCgnYnBwLWVycm9yLW1lc3NhZ2UnKTtcblxuICAgICAgICAvLyBpbnNlcnQgZXJyb3JNZXNzYWdlTm9kZSBhZnRlciBjb250cm9sTm9kZVxuICAgICAgICBjb250cm9sTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlcnJvck1lc3NhZ2VOb2RlLCBjb250cm9sTm9kZS5uZXh0U2libGluZyk7XG4gICAgICB9XG5cbiAgICAgIGVycm9yTWVzc2FnZU5vZGUudGV4dENvbnRlbnQgPSBlcnJvcjtcblxuICAgICAgZG9tQ2xhc3Nlcyhjb250cm9sTm9kZSkuYWRkKCdpbnZhbGlkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvbUNsYXNzZXMoY29udHJvbE5vZGUpLnJlbW92ZSgnaW52YWxpZCcpO1xuXG4gICAgICBpZiAoZXJyb3JNZXNzYWdlTm9kZSkge1xuICAgICAgICBjb250cm9sTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVycm9yTWVzc2FnZU5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHZhbGlkO1xufTtcblxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBlbnRyeSBjb250YWlucyB2YWxpZCBpbnB1dFxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oZW50cnksIHZhbHVlcywgZW50cnlOb2RlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICB2YXIgY3VycmVudCA9IHRoaXMuX2N1cnJlbnQ7XG5cbiAgdmFyIHZhbGlkID0gdHJ1ZTtcblxuICBlbnRyeU5vZGUgPSBlbnRyeU5vZGUgfHwgZG9tUXVlcnkoJ1tkYXRhLWVudHJ5PVwiJyArIGVudHJ5LmlkICsgJ1wiXScsIGN1cnJlbnQucGFuZWwpO1xuXG4gIGlmICh2YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIHZhciBsaXN0Q29udGFpbmVyID0gZG9tUXVlcnkoJ1tkYXRhLWxpc3QtZW50cnktY29udGFpbmVyXScsIGVudHJ5Tm9kZSksXG4gICAgICAgIGxpc3RFbnRyeU5vZGVzID0gbGlzdENvbnRhaW5lci5jaGlsZHJlbiB8fCBbXTtcblxuICAgIC8vIGNyZWF0ZSBuZXcgZWxlbWVudHNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGxpc3RWYWx1ZSA9IHZhbHVlc1tpXTtcblxuICAgICAgaWYgKGVudHJ5LnZhbGlkYXRlTGlzdEl0ZW0pIHtcblxuICAgICAgICB2YXIgdmFsaWRhdGlvbkVycm9ycyA9IGVudHJ5LnZhbGlkYXRlTGlzdEl0ZW0oY3VycmVudC5lbGVtZW50LCBsaXN0VmFsdWUsIGVudHJ5Tm9kZSwgaSksXG4gICAgICAgICAgICBsaXN0RW50cnlOb2RlID0gbGlzdEVudHJ5Tm9kZXNbaV07XG5cbiAgICAgICAgdmFsaWQgPSBzZWxmLmFwcGx5VmFsaWRhdGlvbkVycm9ycyh2YWxpZGF0aW9uRXJyb3JzLCBsaXN0RW50cnlOb2RlKSAmJiB2YWxpZDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGVudHJ5LnZhbGlkYXRlKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSBlbnRyeS52YWxpZGF0ZShjdXJyZW50LmVsZW1lbnQsIHZhbHVlcywgZW50cnlOb2RlKTtcblxuICAgICAgdmFsaWQgPSBzZWxmLmFwcGx5VmFsaWRhdGlvbkVycm9ycyh0aGlzLnZhbGlkYXRpb25FcnJvcnMsIGVudHJ5Tm9kZSkgJiYgdmFsaWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkO1xufTtcblxuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5nZXRFbnRyeSA9IGZ1bmN0aW9uKGlkKSB7XG4gIHJldHVybiB0aGlzLl9jdXJyZW50ICYmIHRoaXMuX2N1cnJlbnQuZW50cmllc1tpZF07XG59O1xuXG52YXIgZmxhdHRlbkRlZXAgPSByZXF1aXJlKCdsb2Rhc2gvZmxhdHRlbkRlZXAnKSxcbiAgICBrZXlCeSA9IHJlcXVpcmUoJ2xvZGFzaC9rZXlCeScpLFxuICAgIG1hcCA9IHJlcXVpcmUoJ2xvZGFzaC9tYXAnKTtcblxuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5fY3JlYXRlID0gZnVuY3Rpb24oZWxlbWVudCwgdGFicykge1xuXG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGNvbnRhaW5lck5vZGUgPSB0aGlzLl9jb250YWluZXI7XG5cbiAgdmFyIHBhbmVsTm9kZSA9IHRoaXMuX2NyZWF0ZVBhbmVsKGVsZW1lbnQsIHRhYnMpO1xuXG4gIGNvbnRhaW5lck5vZGUuYXBwZW5kQ2hpbGQocGFuZWxOb2RlKTtcblxuICB2YXIgZW50cmllcyA9IGV4dHJhY3RFbnRyaWVzKHRhYnMpO1xuICB2YXIgZ3JvdXBzID0gZXh0cmFjdEdyb3Vwcyh0YWJzKTtcblxuICByZXR1cm4ge1xuICAgIHRhYnM6IHRhYnMsXG4gICAgZ3JvdXBzOiBncm91cHMsXG4gICAgZW50cmllczogZW50cmllcyxcbiAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgIHBhbmVsOiBwYW5lbE5vZGVcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHZhcmlhYmxlIHBhcnRzIG9mIHRoZSBlbnRyeSBub2RlIG9uIGVsZW1lbnQgY2hhbmdlcy5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge0VudHJ5RGVzY3JpcHRvcn0gZW50cnlcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVudHJ5Tm9kZVxuICogQHBhcmFtIHtOdW1iZXJ9IGlkeFxuICovXG5Qcm9wZXJ0aWVzUGFuZWwucHJvdG90eXBlLl9iaW5kVGVtcGxhdGUgPSBmdW5jdGlvbihlbGVtZW50LCBlbnRyeSwgdmFsdWVzLCBlbnRyeU5vZGUsIGlkeCkge1xuXG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIGZ1bmN0aW9uIGlzUHJvcGVydHlFZGl0YWJsZShlbnRyeSwgcHJvcGVydHlOYW1lKSB7XG4gICAgcmV0dXJuIGV2ZW50QnVzLmZpcmUoJ3Byb3BlcnRpZXNQYW5lbC5pc1Byb3BlcnR5RWRpdGFibGUnLCB7XG4gICAgICBlbnRyeTogZW50cnksXG4gICAgICBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5TmFtZSxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBpbnB1dE5vZGVzID0gZ2V0UHJvcGVydHlQbGFjZWhvbGRlcnMoZW50cnlOb2RlKTtcblxuICBmb3JFYWNoKGlucHV0Tm9kZXMsIGZ1bmN0aW9uKG5vZGUpIHtcblxuICAgIHZhciBuYW1lLFxuICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgZWRpdGFibGU7XG5cbiAgICAvLyB3ZSBkZWFsIHdpdGggYW4gaW5wdXQgZWxlbWVudFxuICAgIGlmICgndmFsdWUnIGluIG5vZGUgfHwgaXNDb250ZW50RWRpdGFibGUobm9kZSkgPT09ICd0cnVlJykge1xuICAgICAgbmFtZSA9IGRvbUF0dHIobm9kZSwgJ25hbWUnKSB8fCBkb21BdHRyKG5vZGUsICdkYXRhLW5hbWUnKTtcbiAgICAgIG5ld1ZhbHVlID0gdmFsdWVzW25hbWVdO1xuXG4gICAgICBlZGl0YWJsZSA9IGlzUHJvcGVydHlFZGl0YWJsZShlbnRyeSwgbmFtZSk7XG4gICAgICBpZiAoZWRpdGFibGUgJiYgZW50cnkuZWRpdGFibGUpIHtcbiAgICAgICAgZWRpdGFibGUgPSBlbnRyeS5lZGl0YWJsZShlbGVtZW50LCBlbnRyeU5vZGUsIG5vZGUsIG5hbWUsIG5ld1ZhbHVlLCBpZHgpO1xuICAgICAgfVxuXG4gICAgICBkb21BdHRyKG5vZGUsICdyZWFkb25seScsIGVkaXRhYmxlID8gbnVsbCA6ICcnKTtcbiAgICAgIGRvbUF0dHIobm9kZSwgJ2Rpc2FibGVkJywgZWRpdGFibGUgPyBudWxsIDogJycpO1xuXG4gICAgICAvLyB0YWtlIGZ1bGwgY29udHJvbCBvdmVyIHNldHRpbmcgdGhlIHZhbHVlXG4gICAgICAvLyBhbmQgcG9zc2libHkgdXBkYXRpbmcgdGhlIGlucHV0IGluIGVudHJ5I3NldENvbnRyb2xWYWx1ZVxuICAgICAgaWYgKGVudHJ5LnNldENvbnRyb2xWYWx1ZSkge1xuICAgICAgICBlbnRyeS5zZXRDb250cm9sVmFsdWUoZWxlbWVudCwgZW50cnlOb2RlLCBub2RlLCBuYW1lLCBuZXdWYWx1ZSwgaWR4KTtcbiAgICAgIH0gZWxzZSBpZiAoaXNUb2dnbGUobm9kZSkpIHtcbiAgICAgICAgc2V0VG9nZ2xlVmFsdWUobm9kZSwgbmV3VmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChpc1NlbGVjdChub2RlKSkge1xuICAgICAgICBzZXRTZWxlY3RWYWx1ZShub2RlLCBuZXdWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRJbnB1dFZhbHVlKG5vZGUsIG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB3ZSBkZWFsIHdpdGggc29tZSBub24tZWRpdGFibGUgaHRtbCBlbGVtZW50XG4gICAgZWxzZSB7XG4gICAgICBuYW1lID0gZG9tQXR0cihub2RlLCAnZGF0YS12YWx1ZScpO1xuICAgICAgbmV3VmFsdWUgPSB2YWx1ZXNbbmFtZV07XG4gICAgICBpZiAoZW50cnkuc2V0Q29udHJvbFZhbHVlKSB7XG4gICAgICAgIGVudHJ5LnNldENvbnRyb2xWYWx1ZShlbGVtZW50LCBlbnRyeU5vZGUsIG5vZGUsIG5hbWUsIG5ld1ZhbHVlLCBpZHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VGV4dFZhbHVlKG5vZGUsIG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcblxuLy8gVE9ETyhuaWtrdSk6IFdURiBmcmVha2luZyBuYW1lPyBDaGFuZ2UgLyBjbGFyaWZ5LlxuUHJvcGVydGllc1BhbmVsLnByb3RvdHlwZS5fdXBkYXRlQWN0aXZhdGlvbiA9IGZ1bmN0aW9uKGN1cnJlbnQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHZhciBlbGVtZW50ID0gY3VycmVudC5lbGVtZW50O1xuXG4gIGZ1bmN0aW9uIGlzRW50cnlWaXNpYmxlKGVudHJ5KSB7XG4gICAgcmV0dXJuIGV2ZW50QnVzLmZpcmUoJ3Byb3BlcnRpZXNQYW5lbC5pc0VudHJ5VmlzaWJsZScsIHtcbiAgICAgIGVudHJ5OiBlbnRyeSxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzR3JvdXBWaXNpYmxlKGdyb3VwLCBlbGVtZW50LCBncm91cE5vZGUpIHtcbiAgICBpZiAodHlwZW9mIGdyb3VwLmVuYWJsZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBncm91cC5lbmFibGVkKGVsZW1lbnQsIGdyb3VwTm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzVGFiVmlzaWJsZSh0YWIsIGVsZW1lbnQpIHtcbiAgICBpZiAodHlwZW9mIHRhYi5lbmFibGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdGFiLmVuYWJsZWQoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZVZpc2libGUobm9kZSwgdmlzaWJsZSkge1xuICAgIGRvbUNsYXNzZXMobm9kZSkudG9nZ2xlKEhJREVfQ0xBU1MsICF2aXNpYmxlKTtcbiAgfVxuXG4gIC8vIGNoZWNrIHdoZXRoZXIgdGhlIGFjdGl2ZSB0YWIgaXMgdmlzaWJsZVxuICAvLyBpZiBub3Q6IHNldCB0aGUgZmlyc3QgdGFiIGFzIGFjdGl2ZSB0YWJcbiAgZnVuY3Rpb24gY2hlY2tBY3RpdmVUYWJWaXNpYmlsaXR5KG5vZGUsIHZpc2libGUpIHtcbiAgICB2YXIgaXNBY3RpdmUgPSBkb21DbGFzc2VzKG5vZGUpLmhhcygnYnBwLWFjdGl2ZScpO1xuICAgIGlmICghdmlzaWJsZSAmJiBpc0FjdGl2ZSkge1xuICAgICAgc2VsZi5hY3RpdmF0ZVRhYihjdXJyZW50LnRhYnNbMF0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUxhYmVsKGVsZW1lbnQsIHNlbGVjdG9yLCB0ZXh0KSB7XG4gICAgdmFyIGxhYmVsTm9kZSA9IGRvbVF1ZXJ5KHNlbGVjdG9yLCBlbGVtZW50KTtcblxuICAgIGlmICghbGFiZWxOb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGFiZWxOb2RlLnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxuXG4gIHZhciBwYW5lbE5vZGUgPSBjdXJyZW50LnBhbmVsO1xuXG4gIGZvckVhY2goY3VycmVudC50YWJzLCBmdW5jdGlvbih0YWIpIHtcblxuICAgIHZhciB0YWJOb2RlID0gZG9tUXVlcnkoJ1tkYXRhLXRhYj0nICsgdGFiLmlkICsgJ10nLCBwYW5lbE5vZGUpO1xuICAgIHZhciB0YWJMaW5rTm9kZSA9IGRvbVF1ZXJ5KCdbZGF0YS10YWItdGFyZ2V0PScgKyB0YWIuaWQgKyAnXScsIHBhbmVsTm9kZSkucGFyZW50Tm9kZTtcblxuICAgIHZhciB0YWJWaXNpYmxlID0gZmFsc2U7XG5cbiAgICBmb3JFYWNoKHRhYi5ncm91cHMsIGZ1bmN0aW9uKGdyb3VwKSB7XG5cbiAgICAgIHZhciBncm91cFZpc2libGUgPSBmYWxzZTtcblxuICAgICAgdmFyIGdyb3VwTm9kZSA9IGRvbVF1ZXJ5KCdbZGF0YS1ncm91cD0nICsgZ3JvdXAuaWQgKyAnXScsIHRhYk5vZGUpO1xuXG4gICAgICBmb3JFYWNoKGdyb3VwLmVudHJpZXMsIGZ1bmN0aW9uKGVudHJ5KSB7XG5cbiAgICAgICAgdmFyIGVudHJ5Tm9kZSA9IGRvbVF1ZXJ5KCdbZGF0YS1lbnRyeT1cIicgKyBlbnRyeS5pZCArICdcIl0nLCBncm91cE5vZGUpO1xuXG4gICAgICAgIHZhciBlbnRyeVZpc2libGUgPSBpc0VudHJ5VmlzaWJsZShlbnRyeSk7XG5cbiAgICAgICAgZ3JvdXBWaXNpYmxlID0gZ3JvdXBWaXNpYmxlIHx8IGVudHJ5VmlzaWJsZTtcblxuICAgICAgICB0b2dnbGVWaXNpYmxlKGVudHJ5Tm9kZSwgZW50cnlWaXNpYmxlKTtcblxuICAgICAgICB2YXIgdmFsdWVzID0gJ2dldCcgaW4gZW50cnkgPyBlbnRyeS5nZXQoZWxlbWVudCwgZW50cnlOb2RlKSA6IHt9O1xuXG4gICAgICAgIGlmICh2YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgIHZhciBsaXN0RW50cnlDb250YWluZXIgPSBkb21RdWVyeSgnW2RhdGEtbGlzdC1lbnRyeS1jb250YWluZXJdJywgZW50cnlOb2RlKTtcbiAgICAgICAgICB2YXIgZXhpc3RpbmdFbGVtZW50cyA9IGxpc3RFbnRyeUNvbnRhaW5lci5jaGlsZHJlbiB8fCBbXTtcblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbGlzdFZhbHVlID0gdmFsdWVzW2ldO1xuICAgICAgICAgICAgdmFyIGxpc3RJdGVtTm9kZSA9IGV4aXN0aW5nRWxlbWVudHNbaV07XG4gICAgICAgICAgICBpZiAoIWxpc3RJdGVtTm9kZSkge1xuICAgICAgICAgICAgICBsaXN0SXRlbU5vZGUgPSBkb21pZnkoZW50cnkuY3JlYXRlTGlzdEVudHJ5VGVtcGxhdGUobGlzdFZhbHVlLCBpLCBsaXN0RW50cnlDb250YWluZXIpKTtcbiAgICAgICAgICAgICAgbGlzdEVudHJ5Q29udGFpbmVyLmFwcGVuZENoaWxkKGxpc3RJdGVtTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkb21BdHRyKGxpc3RJdGVtTm9kZSwgJ2RhdGEtaW5kZXgnLCBpKTtcblxuICAgICAgICAgICAgc2VsZi5fYmluZFRlbXBsYXRlKGVsZW1lbnQsIGVudHJ5LCBsaXN0VmFsdWUsIGxpc3RJdGVtTm9kZSwgaSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGVudHJpZXNUb1JlbW92ZSA9IGV4aXN0aW5nRWxlbWVudHMubGVuZ3RoIC0gdmFsdWVzLmxlbmd0aDtcblxuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZW50cmllc1RvUmVtb3ZlOyBqKyspIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBvcnBoYW5lZCBlbGVtZW50XG4gICAgICAgICAgICBsaXN0RW50cnlDb250YWluZXIucmVtb3ZlQ2hpbGQobGlzdEVudHJ5Q29udGFpbmVyLmxhc3RDaGlsZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZi5fYmluZFRlbXBsYXRlKGVsZW1lbnQsIGVudHJ5LCB2YWx1ZXMsIGVudHJ5Tm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgY29uZGl0aW9uYWxseSB2aXNpYmxlIGVsZW1lbnRzXG4gICAgICAgIHNlbGYudXBkYXRlU3RhdGUoZW50cnksIGVudHJ5Tm9kZSk7XG4gICAgICAgIHNlbGYudmFsaWRhdGUoZW50cnksIHZhbHVlcywgZW50cnlOb2RlKTtcblxuICAgICAgICAvLyByZW1lbWJlciBpbml0aWFsIHN0YXRlIGZvciBsYXRlciBkaXJ0eSBjaGVja2luZ1xuICAgICAgICBlbnRyeS5vbGRWYWx1ZXMgPSBnZXRGb3JtQ29udHJvbFZhbHVlcyhlbnRyeU5vZGUpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgZ3JvdXAubGFiZWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdXBkYXRlTGFiZWwoZ3JvdXBOb2RlLCAnLmdyb3VwLWxhYmVsJywgZ3JvdXAubGFiZWwoZWxlbWVudCwgZ3JvdXBOb2RlKSk7XG4gICAgICB9XG5cbiAgICAgIGdyb3VwVmlzaWJsZSA9IGdyb3VwVmlzaWJsZSAmJiBpc0dyb3VwVmlzaWJsZShncm91cCwgZWxlbWVudCwgZ3JvdXBOb2RlKTtcblxuICAgICAgdGFiVmlzaWJsZSA9IHRhYlZpc2libGUgfHwgZ3JvdXBWaXNpYmxlO1xuXG4gICAgICB0b2dnbGVWaXNpYmxlKGdyb3VwTm9kZSwgZ3JvdXBWaXNpYmxlKTtcbiAgICB9KTtcblxuICAgIHRhYlZpc2libGUgPSB0YWJWaXNpYmxlICYmIGlzVGFiVmlzaWJsZSh0YWIsIGVsZW1lbnQpO1xuXG4gICAgdG9nZ2xlVmlzaWJsZSh0YWJOb2RlLCB0YWJWaXNpYmxlKTtcbiAgICB0b2dnbGVWaXNpYmxlKHRhYkxpbmtOb2RlLCB0YWJWaXNpYmxlKTtcblxuICAgIGNoZWNrQWN0aXZlVGFiVmlzaWJpbGl0eSh0YWJOb2RlLCB0YWJWaXNpYmxlKTtcbiAgfSk7XG5cbiAgLy8gaW5qZWN0IGVsZW1lbnRzIGlkIGludG8gaGVhZGVyXG4gIHVwZGF0ZUxhYmVsKHBhbmVsTm9kZSwgJ1tkYXRhLWxhYmVsLWlkXScsIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmlkIHx8ICcnKTtcbn07XG5cblByb3BlcnRpZXNQYW5lbC5wcm90b3R5cGUuX2NyZWF0ZVBhbmVsID0gZnVuY3Rpb24oZWxlbWVudCwgdGFicykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIHBhbmVsTm9kZSA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImJwcC1wcm9wZXJ0aWVzXCI+PC9kaXY+JyksXG4gICAgICBoZWFkZXJOb2RlID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiYnBwLXByb3BlcnRpZXMtaGVhZGVyXCI+JyArXG4gICAgICAgICc8ZGl2IGNsYXNzPVwibGFiZWxcIiBkYXRhLWxhYmVsLWlkPjwvZGl2PicgK1xuICAgICAgICAnPGRpdiBjbGFzcz1cInNlYXJjaFwiPicgK1xuICAgICAgICAgICc8aW5wdXQgdHlwZT1cInNlYXJjaFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGZvciBwcm9wZXJ0eVwiIC8+JyArXG4gICAgICAgICAgJzxidXR0b24+PHNwYW4+U2VhcmNoPC9zcGFuPjwvYnV0dG9uPicgK1xuICAgICAgICAnPC9kaXY+JyArXG4gICAgICAnPC9kaXY+JyksXG4gICAgICB0YWJCYXJOb2RlID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiYnBwLXByb3BlcnRpZXMtdGFiLWJhclwiPjwvZGl2PicpLFxuICAgICAgdGFiTGlua3NOb2RlID0gZG9taWZ5KCc8dWwgY2xhc3M9XCJicHAtcHJvcGVydGllcy10YWJzLWxpbmtzXCI+PC91bD4nKSxcbiAgICAgIHRhYkNvbnRhaW5lck5vZGUgPSBkb21pZnkoJzxkaXYgY2xhc3M9XCJicHAtcHJvcGVydGllcy10YWJzLWNvbnRhaW5lclwiPjwvZGl2PicpO1xuXG4gIHBhbmVsTm9kZS5hcHBlbmRDaGlsZChoZWFkZXJOb2RlKTtcblxuICBmb3JFYWNoKHRhYnMsIGZ1bmN0aW9uKHRhYiwgdGFiSW5kZXgpIHtcblxuICAgIGlmICghdGFiLmlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RhYiBtdXN0IGhhdmUgYW4gaWQnKTtcbiAgICB9XG5cbiAgICB2YXIgdGFiTm9kZSA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImJwcC1wcm9wZXJ0aWVzLXRhYlwiIGRhdGEtdGFiPVwiJyArIGVzY2FwZUhUTUwodGFiLmlkKSArICdcIj48L2Rpdj4nKSxcbiAgICAgICAgdGFiTGlua05vZGUgPSBkb21pZnkoJzxsaSBjbGFzcz1cImJwcC1wcm9wZXJ0aWVzLXRhYi1saW5rXCI+JyArXG4gICAgICAgICAgJzxhIGhyZWYgZGF0YS10YWItdGFyZ2V0PVwiJyArIGVzY2FwZUhUTUwodGFiLmlkKSArICdcIj4nICsgZXNjYXBlSFRNTCh0YWIubGFiZWwpICsgJzwvYT4nICtcbiAgICAgICAgJzwvbGk+Jyk7XG5cbiAgICB2YXIgZ3JvdXBzID0gdGFiLmdyb3VwcztcblxuICAgIGZvckVhY2goZ3JvdXBzLCBmdW5jdGlvbihncm91cCkge1xuXG4gICAgICBpZiAoIWdyb3VwLmlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ3JvdXAgbXVzdCBoYXZlIGFuIGlkJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBncm91cE5vZGUgPSBkb21pZnkoJzxkaXYgY2xhc3M9XCJicHAtcHJvcGVydGllcy1ncm91cFwiIGRhdGEtZ3JvdXA9XCInICsgZXNjYXBlSFRNTChncm91cC5pZCkgKyAnXCI+JyArXG4gICAgICAgICAgJzxzcGFuIGNsYXNzPVwiZ3JvdXAtdG9nZ2xlXCI+PC9zcGFuPicgK1xuICAgICAgICAgICc8c3BhbiBjbGFzcz1cImdyb3VwLWxhYmVsXCI+JyArIGVzY2FwZUhUTUwoZ3JvdXAubGFiZWwpICsgJzwvc3Bhbj4nICtcbiAgICAgICAgJzwvZGl2PicpO1xuXG4gICAgICAvLyBUT0RPKG5yZSk6IHVzZSBldmVudCBkZWxlZ2F0aW9uIHRvIGhhbmRsZSB0aGF0Li4uXG4gICAgICBncm91cE5vZGUucXVlcnlTZWxlY3RvcignLmdyb3VwLXRvZ2dsZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZXZ0KSB7XG4gICAgICAgIGRvbUNsYXNzZXMoZ3JvdXBOb2RlKS50b2dnbGUoJ2dyb3VwLWNsb3NlZCcpO1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfSk7XG4gICAgICBncm91cE5vZGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihldnQpIHtcbiAgICAgICAgaWYgKCFldnQuZGVmYXVsdFByZXZlbnRlZCAmJiBkb21DbGFzc2VzKGdyb3VwTm9kZSkuaGFzKCdncm91cC1jbG9zZWQnKSkge1xuICAgICAgICAgIGRvbUNsYXNzZXMoZ3JvdXBOb2RlKS5yZW1vdmUoJ2dyb3VwLWNsb3NlZCcpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZm9yRWFjaChncm91cC5lbnRyaWVzLCBmdW5jdGlvbihlbnRyeSkge1xuXG4gICAgICAgIGlmICghZW50cnkuaWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2VudHJ5IG11c3QgaGF2ZSBhbiBpZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGh0bWwgPSBlbnRyeS5odG1sO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaHRtbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBodG1sID0gZG9taWZ5KGh0bWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdW53cmFwIGpxdWVyeVxuICAgICAgICBpZiAoaHRtbC5nZXQgJiYgaHRtbC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuanF1ZXJ5KSB7XG4gICAgICAgICAgaHRtbCA9IGh0bWwuZ2V0KDApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGVudHJ5Tm9kZSA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImJwcC1wcm9wZXJ0aWVzLWVudHJ5XCIgZGF0YS1lbnRyeT1cIicgKyBlc2NhcGVIVE1MKGVudHJ5LmlkKSArICdcIj48L2Rpdj4nKTtcblxuICAgICAgICBmb3JFYWNoKGVudHJ5LmNzc0NsYXNzZXMgfHwgW10sIGZ1bmN0aW9uKGNzc0NsYXNzKSB7XG4gICAgICAgICAgZG9tQ2xhc3NlcyhlbnRyeU5vZGUpLmFkZChjc3NDbGFzcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGVudHJ5Tm9kZS5hcHBlbmRDaGlsZChodG1sKTtcblxuICAgICAgICBncm91cE5vZGUuYXBwZW5kQ2hpbGQoZW50cnlOb2RlKTtcblxuICAgICAgICAvLyB1cGRhdGUgY29uZGl0aW9uYWxseSB2aXNpYmxlIGVsZW1lbnRzXG4gICAgICAgIHNlbGYudXBkYXRlU3RhdGUoZW50cnksIGVudHJ5Tm9kZSk7XG4gICAgICB9KTtcblxuICAgICAgdGFiTm9kZS5hcHBlbmRDaGlsZChncm91cE5vZGUpO1xuICAgIH0pO1xuXG4gICAgdGFiTGlua3NOb2RlLmFwcGVuZENoaWxkKHRhYkxpbmtOb2RlKTtcbiAgICB0YWJDb250YWluZXJOb2RlLmFwcGVuZENoaWxkKHRhYk5vZGUpO1xuICB9KTtcblxuICB0YWJCYXJOb2RlLmFwcGVuZENoaWxkKHRhYkxpbmtzTm9kZSk7XG5cbiAgcGFuZWxOb2RlLmFwcGVuZENoaWxkKHRhYkJhck5vZGUpO1xuICBwYW5lbE5vZGUuYXBwZW5kQ2hpbGQodGFiQ29udGFpbmVyTm9kZSk7XG5cbiAgcmV0dXJuIHBhbmVsTm9kZTtcbn07XG5cblxuXG5mdW5jdGlvbiBzZXRJbnB1dFZhbHVlKG5vZGUsIHZhbHVlKSB7XG5cbiAgdmFyIGNvbnRlbnRFZGl0YWJsZSA9IGlzQ29udGVudEVkaXRhYmxlKG5vZGUpO1xuXG4gIHZhciBvbGRWYWx1ZSA9IGNvbnRlbnRFZGl0YWJsZSA/IG5vZGUuaW5uZXJUZXh0IDogbm9kZS52YWx1ZTtcblxuICB2YXIgc2VsZWN0aW9uO1xuXG4gIC8vIHByZXZlbnRzIGlucHV0IGZpZWxkcyBmcm9tIGhhdmluZyB0aGUgdmFsdWUgJ3VuZGVmaW5lZCdcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB2YWx1ZSA9ICcnO1xuICB9XG5cbiAgaWYgKG9sZFZhbHVlID09PSB2YWx1ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzZWxlY3Rpb24gb24gdW5kby9yZWRvXG4gIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBub2RlKSB7XG4gICAgc2VsZWN0aW9uID0gdXBkYXRlU2VsZWN0aW9uKGdldFNlbGVjdGlvbihub2RlKSwgb2xkVmFsdWUsIHZhbHVlKTtcbiAgfVxuXG4gIGlmIChjb250ZW50RWRpdGFibGUpIHtcbiAgICBub2RlLmlubmVyVGV4dCA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIG5vZGUudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGlmIChzZWxlY3Rpb24pIHtcbiAgICBzZXRTZWxlY3Rpb24obm9kZSwgc2VsZWN0aW9uKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRTZWxlY3RWYWx1ZShub2RlLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIG5vZGUudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRUb2dnbGVWYWx1ZShub2RlLCB2YWx1ZSkge1xuICB2YXIgbm9kZVZhbHVlID0gbm9kZS52YWx1ZTtcblxuICBub2RlLmNoZWNrZWQgPSAodmFsdWUgPT09IG5vZGVWYWx1ZSkgfHwgKCFkb21BdHRyKG5vZGUsICd2YWx1ZScpICYmIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gc2V0VGV4dFZhbHVlKG5vZGUsIHZhbHVlKSB7XG4gIG5vZGUudGV4dENvbnRlbnQgPSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKG5vZGUpIHtcblxuICByZXR1cm4gaXNDb250ZW50RWRpdGFibGUobm9kZSkgPyBnZXRDb250ZW50RWRpdGFibGVTZWxlY3Rpb24obm9kZSkgOiB7XG4gICAgc3RhcnQ6IG5vZGUuc2VsZWN0aW9uU3RhcnQsXG4gICAgZW5kOiBub2RlLnNlbGVjdGlvbkVuZFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZW50RWRpdGFibGVTZWxlY3Rpb24obm9kZSkge1xuXG4gIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgdmFyIGZvY3VzTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldCA9IHNlbGVjdGlvbi5mb2N1c09mZnNldCxcbiAgICAgIGFuY2hvck9mZnNldCA9IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQ7XG5cbiAgaWYgKCFmb2N1c05vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBzZWxlY3RlZCcpO1xuICB9XG5cbiAgLy8gdmVyaWZ5IHdlIGhhdmUgc2VsZWN0aW9uIG9uIHRoZSBjdXJyZW50IGVsZW1lbnRcbiAgaWYgKCFub2RlLmNvbnRhaW5zKGZvY3VzTm9kZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBzZWxlY3RlZCcpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydDogTWF0aC5taW4oZm9jdXNPZmZzZXQsIGFuY2hvck9mZnNldCksXG4gICAgZW5kOiBNYXRoLm1heChmb2N1c09mZnNldCwgYW5jaG9yT2Zmc2V0KVxuICB9O1xufVxuXG5mdW5jdGlvbiBzZXRTZWxlY3Rpb24obm9kZSwgc2VsZWN0aW9uKSB7XG5cbiAgaWYgKGlzQ29udGVudEVkaXRhYmxlKG5vZGUpKSB7XG4gICAgc2V0Q29udGVudEVkaXRhYmxlU2VsZWN0aW9uKG5vZGUsIHNlbGVjdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgbm9kZS5zZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi5zdGFydDtcbiAgICBub2RlLnNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi5lbmQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0Q29udGVudEVkaXRhYmxlU2VsZWN0aW9uKG5vZGUsIHNlbGVjdGlvbikge1xuXG4gIHZhciBmb2N1c05vZGUsXG4gICAgICBkb21SYW5nZSxcbiAgICAgIGRvbVNlbGVjdGlvbjtcblxuICBmb2N1c05vZGUgPSBub2RlLmZpcnN0Q2hpbGQgfHwgbm9kZSxcbiAgZG9tUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICBkb21SYW5nZS5zZXRTdGFydChmb2N1c05vZGUsIHNlbGVjdGlvbi5zdGFydCk7XG4gIGRvbVJhbmdlLnNldEVuZChmb2N1c05vZGUsIHNlbGVjdGlvbi5lbmQpO1xuXG4gIGRvbVNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgZG9tU2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICBkb21TZWxlY3Rpb24uYWRkUmFuZ2UoZG9tUmFuZ2UpO1xufVxuXG5mdW5jdGlvbiBpc0ltcGxpY2l0Um9vdChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LmlkID09PSAnX19pbXBsaWNpdHJvb3QnO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnksXG4gICAgZG9tQ2xlYXIgPSByZXF1aXJlKCdtaW4tZG9tJykuY2xlYXIsXG4gICAgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxuICAgIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpLFxuICAgIGRvbWlmeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5kb21pZnksXG4gICAgSWRzID0gcmVxdWlyZSgnaWRzJykuZGVmYXVsdDtcblxudmFyIFNQQUNFX1JFR0VYID0gL1xccy87XG5cbi8vIGZvciBRTmFtZSB2YWxpZGF0aW9uIGFzIHBlciBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLyNOVC1OYW1lQ2hhclxudmFyIFFOQU1FX1JFR0VYID0gL14oW2Etel1bXFx3LS5dKjopP1thLXpfXVtcXHctLl0qJC9pO1xuXG4vLyBmb3IgSUQgdmFsaWRhdGlvbiBhcyBwZXIgQlBNTiBTY2hlbWEgKFFOYW1lIC0gTmFtZXNwYWNlKVxudmFyIElEX1JFR0VYID0gL15bYS16X11bXFx3LS5dKiQvaTtcblxudmFyIFBMQUNFSE9MREVSX1JFR0VYID0gL1xcJFxceyhbXn1dKilcXH0vZztcblxudmFyIEhUTUxfRVNDQVBFX01BUCA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICAnXFwnJzogJyYjMzk7J1xufTtcblxuZnVuY3Rpb24gc2VsZWN0ZWRPcHRpb24oc2VsZWN0Qm94KSB7XG4gIGlmIChzZWxlY3RCb3guc2VsZWN0ZWRJbmRleCA+PSAwKSB7XG4gICAgcmV0dXJuIHNlbGVjdEJveC5vcHRpb25zW3NlbGVjdEJveC5zZWxlY3RlZEluZGV4XS52YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5zZWxlY3RlZE9wdGlvbiA9IHNlbGVjdGVkT3B0aW9uO1xuXG5cbmZ1bmN0aW9uIHNlbGVjdGVkVHlwZShlbGVtZW50U3ludGF4LCBpbnB1dE5vZGUpIHtcbiAgdmFyIHR5cGVTZWxlY3QgPSBkb21RdWVyeShlbGVtZW50U3ludGF4LCBpbnB1dE5vZGUpO1xuICByZXR1cm4gc2VsZWN0ZWRPcHRpb24odHlwZVNlbGVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLnNlbGVjdGVkVHlwZSA9IHNlbGVjdGVkVHlwZTtcblxuXG4vKipcbiAqIFJldHJpZXZlIHRoZSByb290IGVsZW1lbnQgdGhlIGRvY3VtZW50IHRoaXNcbiAqIGJ1c2luZXNzIG9iamVjdCBpcyBjb250YWluZWQgaW4uXG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gZ2V0Um9vdChidXNpbmVzc09iamVjdCkge1xuICB2YXIgcGFyZW50ID0gYnVzaW5lc3NPYmplY3Q7XG4gIHdoaWxlIChwYXJlbnQuJHBhcmVudCkge1xuICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICB9XG4gIHJldHVybiBwYXJlbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzLmdldFJvb3QgPSBnZXRSb290O1xuXG5cbi8qKlxuICogZmlsdGVycyBhbGwgZWxlbWVudHMgaW4gdGhlIGxpc3Qgd2hpY2ggaGF2ZSBhIGdpdmVuIHR5cGUuXG4gKiByZW1vdmVzIGEgbmV3IGxpc3RcbiAqL1xuZnVuY3Rpb24gZmlsdGVyRWxlbWVudHNCeVR5cGUob2JqZWN0TGlzdCwgdHlwZSkge1xuICB2YXIgbGlzdCA9IG9iamVjdExpc3QgfHwgW107XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yRWFjaChsaXN0LCBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoaXMob2JqLCB0eXBlKSkge1xuICAgICAgcmVzdWx0LnB1c2gob2JqKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cy5maWx0ZXJFbGVtZW50c0J5VHlwZSA9IGZpbHRlckVsZW1lbnRzQnlUeXBlO1xuXG5cbmZ1bmN0aW9uIGZpbmRSb290RWxlbWVudHNCeVR5cGUoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKSB7XG4gIHZhciByb290ID0gZ2V0Um9vdChidXNpbmVzc09iamVjdCk7XG5cbiAgcmV0dXJuIGZpbHRlckVsZW1lbnRzQnlUeXBlKHJvb3Qucm9vdEVsZW1lbnRzLCByZWZlcmVuY2VkVHlwZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmZpbmRSb290RWxlbWVudHNCeVR5cGUgPSBmaW5kUm9vdEVsZW1lbnRzQnlUeXBlO1xuXG5cbmZ1bmN0aW9uIHJlbW92ZUFsbENoaWxkcmVuKGRvbUVsZW1lbnQpIHtcbiAgd2hpbGUgKGRvbUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgIGRvbUVsZW1lbnQucmVtb3ZlQ2hpbGQoZG9tRWxlbWVudC5maXJzdENoaWxkKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5yZW1vdmVBbGxDaGlsZHJlbiA9IHJlbW92ZUFsbENoaWxkcmVuO1xuXG5cbi8qKlxuICogYWRkcyBhbiBlbXB0eSBvcHRpb24gdG8gdGhlIGxpc3RcbiAqL1xuZnVuY3Rpb24gYWRkRW1wdHlQYXJhbWV0ZXIobGlzdCkge1xuICByZXR1cm4gbGlzdC5wdXNoKHsgJ2xhYmVsJzogJycsICd2YWx1ZSc6ICcnLCAnbmFtZSc6ICcnIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5hZGRFbXB0eVBhcmFtZXRlciA9IGFkZEVtcHR5UGFyYW1ldGVyO1xuXG5cbi8qKlxuICogcmV0dXJucyBhIGxpc3Qgd2l0aCBhbGwgcm9vdCBlbGVtZW50cyBmb3IgdGhlIGdpdmVuIHBhcmFtZXRlciAncmVmZXJlbmNlZFR5cGUnXG4gKi9cbmZ1bmN0aW9uIHJlZnJlc2hPcHRpb25zTW9kZWwoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKSB7XG4gIHZhciBtb2RlbCA9IFtdO1xuICB2YXIgcmVmZXJhYmxlT2JqZWN0cyA9IGZpbmRSb290RWxlbWVudHNCeVR5cGUoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKTtcbiAgZm9yRWFjaChyZWZlcmFibGVPYmplY3RzLCBmdW5jdGlvbihvYmopIHtcbiAgICBtb2RlbC5wdXNoKHtcbiAgICAgIGxhYmVsOiAob2JqLm5hbWUgfHwgJycpICsgJyAoaWQ9JytvYmouaWQrJyknLFxuICAgICAgdmFsdWU6IG9iai5pZCxcbiAgICAgIG5hbWU6IG9iai5uYW1lXG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gbW9kZWw7XG59XG5cbm1vZHVsZS5leHBvcnRzLnJlZnJlc2hPcHRpb25zTW9kZWwgPSByZWZyZXNoT3B0aW9uc01vZGVsO1xuXG5cbi8qKlxuICogZmlsbHMgdGhlIGRyb3AgZG93biB3aXRoIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gdXBkYXRlT3B0aW9uc0Ryb3BEb3duKGRvbVNlbGVjdG9yLCBidXNpbmVzc09iamVjdCwgcmVmZXJlbmNlZFR5cGUsIGVudHJ5Tm9kZSkge1xuICB2YXIgb3B0aW9ucyA9IHJlZnJlc2hPcHRpb25zTW9kZWwoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKTtcbiAgYWRkRW1wdHlQYXJhbWV0ZXIob3B0aW9ucyk7XG4gIHZhciBzZWxlY3RCb3ggPSBkb21RdWVyeShkb21TZWxlY3RvciwgZW50cnlOb2RlKTtcbiAgZG9tQ2xlYXIoc2VsZWN0Qm94KTtcblxuICBmb3JFYWNoKG9wdGlvbnMsIGZ1bmN0aW9uKG9wdGlvbikge1xuICAgIHZhciBvcHRpb25FbnRyeSA9IGRvbWlmeSgnPG9wdGlvbiB2YWx1ZT1cIicgKyBlc2NhcGVIVE1MKG9wdGlvbi52YWx1ZSkgKyAnXCI+JyArIGVzY2FwZUhUTUwob3B0aW9uLmxhYmVsKSArICc8L29wdGlvbj4nKTtcbiAgICBzZWxlY3RCb3guYXBwZW5kQ2hpbGQob3B0aW9uRW50cnkpO1xuICB9KTtcbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbm1vZHVsZS5leHBvcnRzLnVwZGF0ZU9wdGlvbnNEcm9wRG93biA9IHVwZGF0ZU9wdGlvbnNEcm9wRG93bjtcblxuXG4vKipcbiAqIGNoZWNrcyB3aGV0aGVyIHRoZSBpZCB2YWx1ZSBpcyB2YWxpZFxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gYm9cbiAqIEBwYXJhbSB7U3RyaW5nfSBpZFZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2xhdGVcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGVycm9yIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gaXNJZFZhbGlkKGJvLCBpZFZhbHVlLCB0cmFuc2xhdGUpIHtcbiAgdmFyIGFzc2lnbmVkID0gYm8uJG1vZGVsLmlkcy5hc3NpZ25lZChpZFZhbHVlKTtcblxuICB2YXIgaWRFeGlzdHMgPSBhc3NpZ25lZCAmJiBhc3NpZ25lZCAhPT0gYm87XG5cbiAgaWYgKCFpZFZhbHVlIHx8IGlkRXhpc3RzKSB7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZSgnRWxlbWVudCBtdXN0IGhhdmUgYW4gdW5pcXVlIGlkLicpO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlSWQoaWRWYWx1ZSwgdHJhbnNsYXRlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMuaXNJZFZhbGlkID0gaXNJZFZhbGlkO1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlSWQoaWRWYWx1ZSwgdHJhbnNsYXRlKSB7XG5cbiAgaWRWYWx1ZSA9IHN0cmlwUGxhY2Vob2xkZXJzKGlkVmFsdWUpO1xuXG4gIGlmIChjb250YWluc1NwYWNlKGlkVmFsdWUpKSB7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZSgnSWQgbXVzdCBub3QgY29udGFpbiBzcGFjZXMuJyk7XG4gIH1cblxuICBpZiAoIUlEX1JFR0VYLnRlc3QoaWRWYWx1ZSkpIHtcblxuICAgIGlmIChRTkFNRV9SRUdFWC50ZXN0KGlkVmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJhbnNsYXRlKCdJZCBtdXN0IG5vdCBjb250YWluIHByZWZpeC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNsYXRlKCdJZCBtdXN0IGJlIGEgdmFsaWQgUU5hbWUuJyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMudmFsaWRhdGVJZCA9IHZhbGlkYXRlSWQ7XG5cblxuZnVuY3Rpb24gY29udGFpbnNTcGFjZSh2YWx1ZSkge1xuICByZXR1cm4gU1BBQ0VfUkVHRVgudGVzdCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmNvbnRhaW5zU3BhY2UgPSBjb250YWluc1NwYWNlO1xuXG5cbmZ1bmN0aW9uIHN0cmlwUGxhY2Vob2xkZXJzKGlkVmFsdWUpIHtcblxuICAvLyByZXBsYWNlIGV4cHJlc3Npb24gZS5nLiAke1ZFUlNJT05fVEFHfVxuICAvLyB1c2Ugb25seSB0aGUgY29udGVudCBiZXR3ZWVuICR7fVxuICAvLyBmb3IgdGhlIFJFR0VYIGNoZWNrXG4gIHJldHVybiBpZFZhbHVlLnJlcGxhY2UoUExBQ0VIT0xERVJfUkVHRVgsICckMScpO1xufVxuXG4vKipcbiAqIGdlbmVyYXRlIGEgc2VtYW50aWMgaWQgd2l0aCBnaXZlbiBwcmVmaXhcbiAqL1xuZnVuY3Rpb24gbmV4dElkKHByZWZpeCkge1xuICB2YXIgaWRzID0gbmV3IElkcyhbMzIsMzIsMV0pO1xuXG4gIHJldHVybiBpZHMubmV4dFByZWZpeGVkKHByZWZpeCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLm5leHRJZCA9IG5leHRJZDtcblxuXG5mdW5jdGlvbiB0cmlnZ2VyQ2xpY2tFdmVudChlbGVtZW50KSB7XG4gIHZhciBldnQ7XG4gIHZhciBldmVudFR5cGUgPSAnY2xpY2snO1xuXG4gIGlmIChkb2N1bWVudC5jcmVhdGVFdmVudCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBDaHJvbWUsIFNhZmFyaSwgRmlyZWZveFxuICAgICAgZXZ0ID0gbmV3IE1vdXNlRXZlbnQoKGV2ZW50VHlwZSksIHsgdmlldzogd2luZG93LCBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIElFIDExLCBQaGFudG9tSlMgKHdhdCEpXG4gICAgICBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudCcpO1xuXG4gICAgICBldnQuaW5pdEV2ZW50KChldmVudFR5cGUpLCB0cnVlLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldnQpO1xuICB9IGVsc2Uge1xuICAgIC8vIFdlbGNvbWUgSUVcbiAgICBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCgpO1xuXG4gICAgcmV0dXJuIGVsZW1lbnQuZmlyZUV2ZW50KCdvbicgKyBldmVudFR5cGUsIGV2dCk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMudHJpZ2dlckNsaWNrRXZlbnQgPSB0cmlnZ2VyQ2xpY2tFdmVudDtcblxuXG5mdW5jdGlvbiBlc2NhcGVIVE1MKHN0cikge1xuICBzdHIgPSAnJyArIHN0cjtcblxuICByZXR1cm4gc3RyICYmIHN0ci5yZXBsYWNlKC9bJjw+XCInXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBIVE1MX0VTQ0FQRV9NQVBbbWF0Y2hdO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZXNjYXBlSFRNTCA9IGVzY2FwZUhUTUw7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyk7XG5cbi8qKlxuICogQSBoYW5kbGVyIGNhcGFibGUgb2YgY3JlYXRpbmcgYSBuZXcgZWxlbWVudCB1bmRlciBhIHByb3ZpZGVkIHBhcmVudFxuICogYW5kIHVwZGF0aW5nIC8gY3JlYXRpbmcgYSByZWZlcmVuY2UgdG8gaXQgaW4gb25lIGF0b21pYyBhY3Rpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gQ3JlYXRlQW5kUmVmZXJlbmNlRWxlbWVudEhhbmRsZXIoZWxlbWVudFJlZ2lzdHJ5LCBicG1uRmFjdG9yeSkge1xuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG4gIHRoaXMuX2JwbW5GYWN0b3J5ID0gYnBtbkZhY3Rvcnk7XG59XG5cbkNyZWF0ZUFuZFJlZmVyZW5jZUVsZW1lbnRIYW5kbGVyLiRpbmplY3QgPSBbICdlbGVtZW50UmVnaXN0cnknLCAnYnBtbkZhY3RvcnknIF07XG5cbm1vZHVsZS5leHBvcnRzID0gQ3JlYXRlQW5kUmVmZXJlbmNlRWxlbWVudEhhbmRsZXI7XG5cblxuLy8gYXBpIC8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBlbGVtZW50IHVuZGVyIGEgcHJvdmlkZWQgcGFyZW50IGFuZCB1cGRhdGVzIC8gY3JlYXRlcyBhIHJlZmVyZW5jZSB0byBpdCBpblxuICogb25lIGF0b21pYyBhY3Rpb24uXG4gKlxuICogQG1ldGhvZCAgQ3JlYXRlQW5kUmVmZXJlbmNlRWxlbWVudEhhbmRsZXIjZXhlY3V0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBjb250ZXh0LmVsZW1lbnQgd2hpY2ggaXMgdGhlIGNvbnRleHQgZm9yIHRoZSByZWZlcmVuY2VcbiAqIEBwYXJhbSB7bW9kZGxlLnJlZmVyZW5jaW5nT2JqZWN0fSBjb250ZXh0LnJlZmVyZW5jaW5nT2JqZWN0IHRoZSBvYmplY3Qgd2hpY2ggY3JlYXRlcyB0aGUgcmVmZXJlbmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gY29udGV4dC5yZWZlcmVuY2VQcm9wZXJ0eSB0aGUgcHJvcGVydHkgb2YgdGhlIHJlZmVyZW5jaW5nT2JqZWN0IHdoaWNoIG1ha2VzIHRoZSByZWZlcmVuY2VcbiAqIEBwYXJhbSB7bW9kZGxlLm5ld09iamVjdH0gY29udGV4dC5uZXdPYmplY3QgdGhlIG5ldyBvYmplY3QgdG8gYWRkXG4gKiBAcGFyYW0ge21vZGRsZS5uZXdPYmplY3RDb250YWluZXJ9IGNvbnRleHQubmV3T2JqZWN0Q29udGFpbmVyIHRoZSBjb250YWluZXIgZm9yIHRoZSBuZXcgb2JqZWN0XG4gKlxuICogQHJldHVybnMge0FycmF5PGRqcy5tb2RlLkJhc2U+fSB0aGUgdXBkYXRlZCBlbGVtZW50XG4gKi9cbkNyZWF0ZUFuZFJlZmVyZW5jZUVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciByZWZlcmVuY2luZ09iamVjdCA9IGVuc3VyZU5vdE51bGwoY29udGV4dC5yZWZlcmVuY2luZ09iamVjdCwgJ3JlZmVyZW5jaW5nT2JqZWN0JyksXG4gICAgICByZWZlcmVuY2VQcm9wZXJ0eSA9IGVuc3VyZU5vdE51bGwoY29udGV4dC5yZWZlcmVuY2VQcm9wZXJ0eSwgJ3JlZmVyZW5jZVByb3BlcnR5JyksXG4gICAgICBuZXdPYmplY3QgPSBlbnN1cmVOb3ROdWxsKGNvbnRleHQubmV3T2JqZWN0LCAnbmV3T2JqZWN0JyksXG4gICAgICBuZXdPYmplY3RDb250YWluZXIgPSBlbnN1cmVOb3ROdWxsKGNvbnRleHQubmV3T2JqZWN0Q29udGFpbmVyLCAnbmV3T2JqZWN0Q29udGFpbmVyJyksXG4gICAgICBuZXdPYmplY3RQYXJlbnQgPSBlbnN1cmVOb3ROdWxsKGNvbnRleHQubmV3T2JqZWN0UGFyZW50LCAnbmV3T2JqZWN0UGFyZW50JyksXG4gICAgICBjaGFuZ2VkID0gWyBjb250ZXh0LmVsZW1lbnQgXTsgLy8gdGhpcyB3aWxsIG5vdCBjaGFuZ2UgYW55IGRpYWdyYW0tanMgZWxlbWVudHNcblxuICAvLyBjcmVhdGUgbmV3IG9iamVjdFxuICB2YXIgcmVmZXJlbmNlZE9iamVjdCA9IGVsZW1lbnRIZWxwZXJcbiAgICAuY3JlYXRlRWxlbWVudChuZXdPYmplY3QudHlwZSwgbmV3T2JqZWN0LnByb3BlcnRpZXMsIG5ld09iamVjdFBhcmVudCwgdGhpcy5fYnBtbkZhY3RvcnkpO1xuICBjb250ZXh0LnJlZmVyZW5jZWRPYmplY3QgPSByZWZlcmVuY2VkT2JqZWN0O1xuXG4gIC8vIGFkZCB0byBjb250YWluaW5nIGxpc3RcbiAgbmV3T2JqZWN0Q29udGFpbmVyLnB1c2gocmVmZXJlbmNlZE9iamVjdCk7XG5cbiAgLy8gYWRqdXN0IHJlZmVyZW5jZSBhdHRyaWJ1dGVcbiAgY29udGV4dC5wcmV2aW91c1JlZmVyZW5jZSA9IHJlZmVyZW5jaW5nT2JqZWN0W3JlZmVyZW5jZVByb3BlcnR5XTtcbiAgcmVmZXJlbmNpbmdPYmplY3RbcmVmZXJlbmNlUHJvcGVydHldID0gcmVmZXJlbmNlZE9iamVjdDtcblxuICBjb250ZXh0LmNoYW5nZWQgPSBjaGFuZ2VkO1xuXG4gIC8vIGluZGljYXRlIGNoYW5nZWQgb24gb2JqZWN0cyBhZmZlY3RlZCBieSB0aGUgdXBkYXRlXG4gIHJldHVybiBjaGFuZ2VkO1xufTtcblxuLyoqXG4gKiBSZXZlcnRzIHRoZSB1cGRhdGVcbiAqXG4gKiBAbWV0aG9kICBDcmVhdGVBbmRSZWZlcmVuY2VFbGVtZW50SGFuZGxlciNyZXZlcnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICpcbiAqIEByZXR1cm5zIHtkanMubW9kZS5CYXNlfSB0aGUgdXBkYXRlZCBlbGVtZW50XG4gKi9cbkNyZWF0ZUFuZFJlZmVyZW5jZUVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHJlZmVyZW5jaW5nT2JqZWN0ID0gY29udGV4dC5yZWZlcmVuY2luZ09iamVjdCxcbiAgICAgIHJlZmVyZW5jZVByb3BlcnR5ID0gY29udGV4dC5yZWZlcmVuY2VQcm9wZXJ0eSxcbiAgICAgIHByZXZpb3VzUmVmZXJlbmNlID0gY29udGV4dC5wcmV2aW91c1JlZmVyZW5jZSxcbiAgICAgIHJlZmVyZW5jZWRPYmplY3QgPSBjb250ZXh0LnJlZmVyZW5jZWRPYmplY3QsXG4gICAgICBuZXdPYmplY3RDb250YWluZXIgPSBjb250ZXh0Lm5ld09iamVjdENvbnRhaW5lcjtcblxuICAvLyByZXNldCByZWZlcmVuY2VcbiAgcmVmZXJlbmNpbmdPYmplY3Quc2V0KHJlZmVyZW5jZVByb3BlcnR5LCBwcmV2aW91c1JlZmVyZW5jZSk7XG5cbiAgLy8gcmVtb3ZlIG5ldyBlbGVtZW50XG4gIG5ld09iamVjdENvbnRhaW5lci5zcGxpY2UobmV3T2JqZWN0Q29udGFpbmVyLmluZGV4T2YocmVmZXJlbmNlZE9iamVjdCksIDEpO1xuXG4gIHJldHVybiBjb250ZXh0LmNoYW5nZWQ7XG59O1xuXG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBlbnN1cmVOb3ROdWxsKHByb3AsIG5hbWUpIHtcbiAgaWYgKCFwcm9wKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG5hbWUgKyAnIHJlcXVpcmVkJyk7XG4gIH1cbiAgcmV0dXJuIHByb3A7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKTtcblxudmFyIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpO1xuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgYSBCUE1OIDIuMCBwcm9wZXJ0eSB1cGRhdGVcbiAqIGZvciBidXNpbmVzcyBvYmplY3RzIHdoaWNoIGFyZSBub3QgcmVwcmVzZW50ZWQgaW4gdGhlXG4gKiBkaWFncmFtLlxuICpcbiAqIFRoaXMgaXMgdXNlZnVsIGluIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9wZXJ0aWVzIHBhbmVsIGluXG4gKiBvcmRlciB0byB1cGRhdGUgY2hpbGQgZWxlbWVudHMgb2YgZWxlbWVudHMgdmlzaWJsZSBpblxuICogdGhlIGRpYWdyYW0uXG4gKlxuICogRXhhbXBsZTogcGVyZm9ybSBhbiB1cGRhdGUgb2YgYSBzcGVjaWZpYyBldmVudCBkZWZpbml0aW9uXG4gKiBvZiBhbiBpbnRlcm1lZGlhdGUgZXZlbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gQ3JlYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlcihlbGVtZW50UmVnaXN0cnksIGJwbW5GYWN0b3J5KSB7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fYnBtbkZhY3RvcnkgPSBicG1uRmFjdG9yeTtcbn1cblxuQ3JlYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlci4kaW5qZWN0ID0gWyAnZWxlbWVudFJlZ2lzdHJ5JywgJ2JwbW5GYWN0b3J5JyBdO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENyZWF0ZUJ1c2luZXNzT2JqZWN0TGlzdEhhbmRsZXI7XG5cbmZ1bmN0aW9uIGVuc3VyZU5vdE51bGwocHJvcCwgbmFtZSkge1xuICBpZiAoIXByb3ApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobmFtZSArICcgcmVxdWlyZWQnKTtcbiAgfVxuICByZXR1cm4gcHJvcDtcblxufVxuZnVuY3Rpb24gZW5zdXJlTGlzdChwcm9wLCBuYW1lKSB7XG4gIGlmICghcHJvcCB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvcCkgIT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobmFtZSArICcgbmVlZHMgdG8gYmUgYSBsaXN0Jyk7XG4gIH1cbiAgcmV0dXJuIHByb3A7XG59XG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGVsZW1lbnQgdW5kZXIgYSBwcm92aWRlZCBwYXJlbnQgYW5kIHVwZGF0ZXMgLyBjcmVhdGVzIGEgcmVmZXJlbmNlIHRvIGl0IGluXG4gKiBvbmUgYXRvbWljIGFjdGlvbi5cbiAqXG4gKiBAbWV0aG9kICBDcmVhdGVCdXNpbmVzc09iamVjdExpc3RIYW5kbGVyI2V4ZWN1dGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gY29udGV4dC5lbGVtZW50IHdoaWNoIGlzIHRoZSBjb250ZXh0IGZvciB0aGUgcmVmZXJlbmNlXG4gKiBAcGFyYW0ge21vZGRsZS5yZWZlcmVuY2luZ09iamVjdH0gY29udGV4dC5yZWZlcmVuY2luZ09iamVjdCB0aGUgb2JqZWN0IHdoaWNoIGNyZWF0ZXMgdGhlIHJlZmVyZW5jZVxuICogQHBhcmFtIHtTdHJpbmd9IGNvbnRleHQucmVmZXJlbmNlUHJvcGVydHkgdGhlIHByb3BlcnR5IG9mIHRoZSByZWZlcmVuY2luZ09iamVjdCB3aGljaCBtYWtlcyB0aGUgcmVmZXJlbmNlXG4gKiBAcGFyYW0ge21vZGRsZS5uZXdPYmplY3R9IGNvbnRleHQubmV3T2JqZWN0IHRoZSBuZXcgb2JqZWN0IHRvIGFkZFxuICogQHBhcmFtIHttb2RkbGUubmV3T2JqZWN0Q29udGFpbmVyfSBjb250ZXh0Lm5ld09iamVjdENvbnRhaW5lciB0aGUgY29udGFpbmVyIGZvciB0aGUgbmV3IG9iamVjdFxuICpcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlLkJhc2U+fSB0aGUgdXBkYXRlZCBlbGVtZW50XG4gKi9cbkNyZWF0ZUJ1c2luZXNzT2JqZWN0TGlzdEhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGN1cnJlbnRPYmplY3QgPSBlbnN1cmVOb3ROdWxsKGNvbnRleHQuY3VycmVudE9iamVjdCwgJ2N1cnJlbnRPYmplY3QnKSxcbiAgICAgIHByb3BlcnR5TmFtZSA9IGVuc3VyZU5vdE51bGwoY29udGV4dC5wcm9wZXJ0eU5hbWUsICdwcm9wZXJ0eU5hbWUnKSxcbiAgICAgIG5ld09iamVjdHMgPSBlbnN1cmVMaXN0KGNvbnRleHQubmV3T2JqZWN0cywgJ25ld09iamVjdHMnKSxcbiAgICAgIGNoYW5nZWQgPSBbIGNvbnRleHQuZWxlbWVudCBdOyAvLyB0aGlzIHdpbGwgbm90IGNoYW5nZSBhbnkgZGlhZ3JhbS1qcyBlbGVtZW50c1xuXG5cbiAgdmFyIGNoaWxkT2JqZWN0cyA9IFtdO1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLy8gY3JlYXRlIG5ldyBhcnJheSBvZiBidXNpbmVzcyBvYmplY3RzXG4gIGZvckVhY2gobmV3T2JqZWN0cywgZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQob2JqLnR5cGUsIG9iai5wcm9wZXJ0aWVzLCBjdXJyZW50T2JqZWN0LCBzZWxmLl9icG1uRmFjdG9yeSk7XG5cbiAgICBjaGlsZE9iamVjdHMucHVzaChlbGVtZW50KTtcbiAgfSk7XG4gIGNvbnRleHQuY2hpbGRPYmplY3QgPSBjaGlsZE9iamVjdHM7XG5cbiAgLy8gYWRqdXN0IGFycmF5IHJlZmVyZW5jZSBpbiB0aGUgcGFyZW50IGJ1c2luZXNzIG9iamVjdFxuICBjb250ZXh0LnByZXZpb3VzQ2hpbGRzID0gY3VycmVudE9iamVjdFtwcm9wZXJ0eU5hbWVdO1xuICBjdXJyZW50T2JqZWN0W3Byb3BlcnR5TmFtZV0gPSBjaGlsZE9iamVjdHM7XG5cbiAgY29udGV4dC5jaGFuZ2VkID0gY2hhbmdlZDtcblxuICAvLyBpbmRpY2F0ZSBjaGFuZ2VkIG9uIG9iamVjdHMgYWZmZWN0ZWQgYnkgdGhlIHVwZGF0ZVxuICByZXR1cm4gY2hhbmdlZDtcbn07XG5cbi8qKlxuICogUmV2ZXJ0cyB0aGUgdXBkYXRlXG4gKlxuICogQG1ldGhvZCAgQ3JlYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlciNyZXZlcnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICpcbiAqIEByZXR1cm4ge2Rqcy5tb2RlLkJhc2V9IHRoZSB1cGRhdGVkIGVsZW1lbnRcbiAqL1xuQ3JlYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjdXJyZW50T2JqZWN0ID0gY29udGV4dC5jdXJyZW50T2JqZWN0LFxuICAgICAgcHJvcGVydHlOYW1lID0gY29udGV4dC5wcm9wZXJ0eU5hbWUsXG4gICAgICBwcmV2aW91c0NoaWxkcyA9IGNvbnRleHQucHJldmlvdXNDaGlsZHM7XG5cbiAgLy8gcmVtb3ZlIG5ldyBlbGVtZW50XG4gIGN1cnJlbnRPYmplY3Quc2V0KHByb3BlcnR5TmFtZSwgcHJldmlvdXNDaGlsZHMpO1xuXG4gIHJldHVybiBjb250ZXh0LmNoYW5nZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgY29tYmluZXMgYW5kIGV4ZWN1dGVzIG11bHRpcGxlIGNvbW1hbmRzLlxuICpcbiAqIEFsbCB1cGRhdGVzIGFyZSBidW5kbGVkIG9uIHRoZSBjb21tYW5kIHN0YWNrIGFuZCBleGVjdXRlZCBpbiBvbmUgc3RlcC5cbiAqIFRoaXMgYWxzbyBtYWtlcyBpdCBwb3NzaWJsZSB0byByZXZlcnQgdGhlIGNoYW5nZXMgaW4gb25lIHN0ZXAuXG4gKlxuICogRXhhbXBsZSB1c2UgY2FzZTogcmVtb3ZlIHRoZSBjYW11bmRhOmZvcm1LZXkgYXR0cmlidXRlIGFuZCBpbiBhZGRpdGlvblxuICogYWRkIGFsbCBmb3JtIGZpZWxkcyBuZWVkZWQgZm9yIHRoZSBjYW11bmRhOmZvcm1EYXRhIHByb3BlcnR5LlxuICpcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIE11bHRpQ29tbWFuZEhhbmRsZXIoY29tbWFuZFN0YWNrKSB7XG4gIHRoaXMuX2NvbW1hbmRTdGFjayA9IGNvbW1hbmRTdGFjaztcbn1cblxuTXVsdGlDb21tYW5kSGFuZGxlci4kaW5qZWN0ID0gWyAnY29tbWFuZFN0YWNrJyBdO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE11bHRpQ29tbWFuZEhhbmRsZXI7XG5cbk11bHRpQ29tbWFuZEhhbmRsZXIucHJvdG90eXBlLnByZUV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGNvbW1hbmRTdGFjayA9IHRoaXMuX2NvbW1hbmRTdGFjaztcblxuICBmb3JFYWNoKGNvbnRleHQsIGZ1bmN0aW9uKGNvbW1hbmQpIHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZShjb21tYW5kLmNtZCwgY29tbWFuZC5jb250ZXh0KTtcbiAgfSk7XG59OyIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlZHVjZSA9IHJlcXVpcmUoJ2xvZGFzaC90cmFuc2Zvcm0nKSxcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXG4gICAga2V5cyA9IHJlcXVpcmUoJ2xvZGFzaC9rZXlzJyksXG4gICAgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgaW1wbGVtZW50cyBhIEJQTU4gMi4wIHByb3BlcnR5IHVwZGF0ZVxuICogZm9yIGJ1c2luZXNzIG9iamVjdHMgd2hpY2ggYXJlIG5vdCByZXByZXNlbnRlZCBpbiB0aGVcbiAqIGRpYWdyYW0uXG4gKlxuICogVGhpcyBpcyB1c2VmdWwgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb3BlcnRpZXMgcGFuZWwgaW5cbiAqIG9yZGVyIHRvIHVwZGF0ZSBjaGlsZCBlbGVtZW50cyBvZiBlbGVtZW50cyB2aXNpYmxlIGluXG4gKiB0aGUgZGlhZ3JhbS5cbiAqXG4gKiBFeGFtcGxlOiBwZXJmb3JtIGFuIHVwZGF0ZSBvZiBhIHNwZWNpZmljIGV2ZW50IGRlZmluaXRpb25cbiAqIG9mIGFuIGludGVybWVkaWF0ZSBldmVudC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBVcGRhdGVCdXNpbmVzc09iamVjdEhhbmRsZXIoZWxlbWVudFJlZ2lzdHJ5KSB7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbn1cblxuVXBkYXRlQnVzaW5lc3NPYmplY3RIYW5kbGVyLiRpbmplY3QgPSBbICdlbGVtZW50UmVnaXN0cnknIF07XG5cbm1vZHVsZS5leHBvcnRzID0gVXBkYXRlQnVzaW5lc3NPYmplY3RIYW5kbGVyO1xuXG4vKipcbiAqIHJldHVybnMgdGhlIHJvb3QgZWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRSb290KGJ1c2luZXNzT2JqZWN0KSB7XG4gIHZhciBwYXJlbnQgPSBidXNpbmVzc09iamVjdDtcbiAgd2hpbGUgKHBhcmVudC4kcGFyZW50KSB7XG4gICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIHBhcmVudDtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwgcHJvcGVydHlOYW1lcykge1xuICByZXR1cm4gcmVkdWNlKHByb3BlcnR5TmFtZXMsIGZ1bmN0aW9uKHJlc3VsdCwga2V5KSB7XG4gICAgcmVzdWx0W2tleV0gPSBidXNpbmVzc09iamVjdC5nZXQoa2V5KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG59XG5cblxuZnVuY3Rpb24gc2V0UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwgcHJvcGVydGllcykge1xuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICBidXNpbmVzc09iamVjdC5zZXQoa2V5LCB2YWx1ZSk7XG4gIH0pO1xufVxuXG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBVcGRhdGVzIGEgYnVzaW5lc3Mgb2JqZWN0IHdpdGggYSBsaXN0IG9mIG5ldyBwcm9wZXJ0aWVzXG4gKlxuICogQG1ldGhvZCAgVXBkYXRlQnVzaW5lc3NPYmplY3RIYW5kbGVyI2V4ZWN1dGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gY29udGV4dC5lbGVtZW50IHRoZSBlbGVtZW50IHdoaWNoIGhhcyBhIGNoaWxkIGJ1c2luZXNzIG9iamVjdCB1cGRhdGVkXG4gKiBAcGFyYW0ge21vZGRsZS5idXNpbmVzc09iamVjdH0gY29udGV4dC5idXNpbmVzc09iamVjdCB0aGUgYnVzaW5lc3NPYmplY3QgdG8gdXBkYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5wcm9wZXJ0aWVzIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIHRvIHNldCBvbiB0aGUgYnVzaW5lc3NPYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZS5CYXNlPn0gdGhlIHVwZGF0ZWQgZWxlbWVudFxuICovXG5VcGRhdGVCdXNpbmVzc09iamVjdEhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICBidXNpbmVzc09iamVjdCA9IGNvbnRleHQuYnVzaW5lc3NPYmplY3QsXG4gICAgICByb290RWxlbWVudHMgPSBnZXRSb290KGJ1c2luZXNzT2JqZWN0KS5yb290RWxlbWVudHMsXG4gICAgICByZWZlcmVuY2VUeXBlID0gY29udGV4dC5yZWZlcmVuY2VUeXBlLFxuICAgICAgcmVmZXJlbmNlUHJvcGVydHkgPSBjb250ZXh0LnJlZmVyZW5jZVByb3BlcnR5LFxuICAgICAgY2hhbmdlZCA9IFsgZWxlbWVudCBdOyAvLyB0aGlzIHdpbGwgbm90IGNoYW5nZSBhbnkgZGlhZ3JhbS1qcyBlbGVtZW50c1xuXG4gIGlmICghZWxlbWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZWxlbWVudCByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKCFidXNpbmVzc09iamVjdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYnVzaW5lc3NPYmplY3QgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHZhciBwcm9wZXJ0aWVzID0gY29udGV4dC5wcm9wZXJ0aWVzLFxuICAgICAgb2xkUHJvcGVydGllcyA9IGNvbnRleHQub2xkUHJvcGVydGllcyB8fCBnZXRQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LCBrZXlzKHByb3BlcnRpZXMpKTtcblxuICAvLyBjaGVjayBpZiB0aGVyZSB0aGUgdXBkYXRlIG5lZWRzIGFuIGV4dGVybmFsIGVsZW1lbnQgZm9yIHJlZmVyZW5jZVxuICBpZiAodHlwZW9mIHJlZmVyZW5jZVR5cGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiByZWZlcmVuY2VQcm9wZXJ0eSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBmb3JFYWNoKHJvb3RFbGVtZW50cywgZnVuY3Rpb24ocm9vdEVsZW1lbnQpIHtcbiAgICAgIGlmIChpcyhyb290RWxlbWVudCwgcmVmZXJlbmNlVHlwZSkpIHtcbiAgICAgICAgaWYgKHJvb3RFbGVtZW50LmlkID09PSBwcm9wZXJ0aWVzW3JlZmVyZW5jZVByb3BlcnR5XSkge1xuICAgICAgICAgIHByb3BlcnRpZXNbcmVmZXJlbmNlUHJvcGVydHldID0gcm9vdEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBwcm9wZXJ0aWVzXG4gIHNldFByb3BlcnRpZXMoYnVzaW5lc3NPYmplY3QsIHByb3BlcnRpZXMpO1xuXG4gIC8vIHN0b3JlIG9sZCB2YWx1ZXNcbiAgY29udGV4dC5vbGRQcm9wZXJ0aWVzID0gb2xkUHJvcGVydGllcztcbiAgY29udGV4dC5jaGFuZ2VkID0gY2hhbmdlZDtcblxuICAvLyBpbmRpY2F0ZSBjaGFuZ2VkIG9uIG9iamVjdHMgYWZmZWN0ZWQgYnkgdGhlIHVwZGF0ZVxuICByZXR1cm4gY2hhbmdlZDtcbn07XG5cbi8qKlxuICogUmV2ZXJ0cyB0aGUgdXBkYXRlXG4gKlxuICogQG1ldGhvZCAgVXBkYXRlQnVzaW5lc3NPYmplY3RIYW5kbGVyI3JldmVydFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKlxuICogQHJldHVybiB7ZGpzLm1vZGUuQmFzZX0gdGhlIHVwZGF0ZWQgZWxlbWVudFxuICovXG5VcGRhdGVCdXNpbmVzc09iamVjdEhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgb2xkUHJvcGVydGllcyA9IGNvbnRleHQub2xkUHJvcGVydGllcyxcbiAgICAgIGJ1c2luZXNzT2JqZWN0ID0gY29udGV4dC5idXNpbmVzc09iamVjdDtcblxuICAvLyB1cGRhdGUgcHJvcGVydGllc1xuICBzZXRQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LCBvbGRQcm9wZXJ0aWVzKTtcblxuICByZXR1cm4gY29udGV4dC5jaGFuZ2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpO1xuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgYSBCUE1OIDIuMCBwcm9wZXJ0eSB1cGRhdGVcbiAqIGZvciBidXNpbmVzcyBvYmplY3QgbGlzdHMgd2hpY2ggYXJlIG5vdCByZXByZXNlbnRlZCBpbiB0aGVcbiAqIGRpYWdyYW0uXG4gKlxuICogVGhpcyBpcyB1c2VmdWwgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb3BlcnRpZXMgcGFuZWwgaW5cbiAqIG9yZGVyIHRvIHVwZGF0ZSBjaGlsZCBlbGVtZW50cyBvZiBlbGVtZW50cyB2aXNpYmxlIGluXG4gKiB0aGUgZGlhZ3JhbS5cbiAqXG4gKiBFeGFtcGxlOiBwZXJmb3JtIGFuIHVwZGF0ZSBvZiBhIHNwZWNpZmljIGV2ZW50IGRlZmluaXRpb25cbiAqIG9mIGFuIGludGVybWVkaWF0ZSBldmVudC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBVcGRhdGVCdXNpbmVzc09iamVjdExpc3RIYW5kbGVyKGVsZW1lbnRSZWdpc3RyeSwgYnBtbkZhY3RvcnkpIHtcbiAgdGhpcy5fZWxlbWVudFJlZ2lzdHJ5ID0gZWxlbWVudFJlZ2lzdHJ5O1xuICB0aGlzLl9icG1uRmFjdG9yeSA9IGJwbW5GYWN0b3J5O1xufVxuXG5VcGRhdGVCdXNpbmVzc09iamVjdExpc3RIYW5kbGVyLiRpbmplY3QgPSBbICdlbGVtZW50UmVnaXN0cnknLCAnYnBtbkZhY3RvcnknIF07XG5cbm1vZHVsZS5leHBvcnRzID0gVXBkYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlcjtcblxuZnVuY3Rpb24gZW5zdXJlTm90TnVsbChwcm9wLCBuYW1lKSB7XG4gIGlmICghcHJvcCkge1xuICAgIHRocm93IG5ldyBFcnJvcihuYW1lICsgJ3JlcXVpcmVkJyk7XG4gIH1cbiAgcmV0dXJuIHByb3A7XG59XG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBVcGRhdGVzIGEgZWxlbWVudCB1bmRlciBhIHByb3ZpZGVkIHBhcmVudC5cbiAqL1xuVXBkYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY3VycmVudE9iamVjdCA9IGVuc3VyZU5vdE51bGwoY29udGV4dC5jdXJyZW50T2JqZWN0LCAnY3VycmVudE9iamVjdCcpLFxuICAgICAgcHJvcGVydHlOYW1lID0gZW5zdXJlTm90TnVsbChjb250ZXh0LnByb3BlcnR5TmFtZSwgJ3Byb3BlcnR5TmFtZScpLFxuICAgICAgdXBkYXRlZE9iamVjdExpc3QgPSBjb250ZXh0LnVwZGF0ZWRPYmplY3RMaXN0LFxuICAgICAgb2JqZWN0c1RvUmVtb3ZlID0gY29udGV4dC5vYmplY3RzVG9SZW1vdmUgfHwgW10sXG4gICAgICBvYmplY3RzVG9BZGQgPSBjb250ZXh0Lm9iamVjdHNUb0FkZCB8fCBbXSxcbiAgICAgIGNoYW5nZWQgPSBbIGNvbnRleHQuZWxlbWVudF0sIC8vIHRoaXMgd2lsbCBub3QgY2hhbmdlIGFueSBkaWFncmFtLWpzIGVsZW1lbnRzXG4gICAgICByZWZlcmVuY2VQcm9wZXJ0eU5hbWU7XG5cbiAgaWYgKGNvbnRleHQucmVmZXJlbmNlUHJvcGVydHlOYW1lKSB7XG4gICAgcmVmZXJlbmNlUHJvcGVydHlOYW1lID0gY29udGV4dC5yZWZlcmVuY2VQcm9wZXJ0eU5hbWU7XG4gIH1cblxuICB2YXIgb2JqZWN0TGlzdCA9IGN1cnJlbnRPYmplY3RbcHJvcGVydHlOYW1lXTtcbiAgLy8gYWRqdXN0IGFycmF5IHJlZmVyZW5jZSBpbiB0aGUgcGFyZW50IGJ1c2luZXNzIG9iamVjdFxuICBjb250ZXh0LnByZXZpb3VzTGlzdCA9IGN1cnJlbnRPYmplY3RbcHJvcGVydHlOYW1lXTtcblxuICBpZiAodXBkYXRlZE9iamVjdExpc3QpIHtcbiAgICBjdXJyZW50T2JqZWN0W3Byb3BlcnR5TmFtZV0gPSB1cGRhdGVkT2JqZWN0TGlzdDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGlzdENvcHkgPSBbXTtcbiAgICAvLyByZW1vdmUgYWxsIG9iamVjdHMgd2hpY2ggc2hvdWxkIGJlIHJlbW92ZWRcbiAgICBmb3JFYWNoKG9iamVjdExpc3QsIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgaWYgKG9iamVjdHNUb1JlbW92ZS5pbmRleE9mKG9iamVjdCkgPT0gLTEpIHtcbiAgICAgICAgbGlzdENvcHkucHVzaChvYmplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIGFkZCBhbGwgb2JqZWN0cyB3aGljaCBzaG91bGQgYmUgYWRkZWRcbiAgICBsaXN0Q29weSA9IGxpc3RDb3B5LmNvbmNhdChvYmplY3RzVG9BZGQpO1xuXG4gICAgLy8gc2V0IHByb3BlcnR5IHRvIG5ldyBsaXN0XG4gICAgaWYgKGxpc3RDb3B5Lmxlbmd0aCA+IDAgfHwgIXJlZmVyZW5jZVByb3BlcnR5TmFtZSkge1xuXG4gICAgICAvLyBhcyBsb25nIGFzIHRoZXJlIGFyZSBlbGVtZW50cyBpbiB0aGUgbGlzdCB1cGRhdGUgdGhlIGxpc3RcbiAgICAgIGN1cnJlbnRPYmplY3RbcHJvcGVydHlOYW1lXSA9IGxpc3RDb3B5O1xuICAgIH0gZWxzZSBpZiAocmVmZXJlbmNlUHJvcGVydHlOYW1lKSB7XG5cbiAgICAgIC8vIHJlbW92ZSB0aGUgbGlzdCB3aGVuIGl0IGlzIGVtcHR5XG4gICAgICB2YXIgcGFyZW50T2JqZWN0ID0gY3VycmVudE9iamVjdC4kcGFyZW50O1xuICAgICAgcGFyZW50T2JqZWN0LnNldChyZWZlcmVuY2VQcm9wZXJ0eU5hbWUsIHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgY29udGV4dC5jaGFuZ2VkID0gY2hhbmdlZDtcblxuICAvLyBpbmRpY2F0ZSBjaGFuZ2VkIG9uIG9iamVjdHMgYWZmZWN0ZWQgYnkgdGhlIHVwZGF0ZVxuICByZXR1cm4gY2hhbmdlZDtcbn07XG5cbi8qKlxuICogUmV2ZXJ0cyB0aGUgdXBkYXRlXG4gKlxuICogQG1ldGhvZCAgQ3JlYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlciNyZXZlcnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICpcbiAqIEByZXR1cm4ge2Rqcy5tb2RlLkJhc2V9IHRoZSB1cGRhdGVkIGVsZW1lbnRcbiAqL1xuVXBkYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjdXJyZW50T2JqZWN0ID0gY29udGV4dC5jdXJyZW50T2JqZWN0LFxuICAgICAgcHJvcGVydHlOYW1lID0gY29udGV4dC5wcm9wZXJ0eU5hbWUsXG4gICAgICBwcmV2aW91c0xpc3QgPSBjb250ZXh0LnByZXZpb3VzTGlzdCxcbiAgICAgIHBhcmVudE9iamVjdCA9IGN1cnJlbnRPYmplY3QuJHBhcmVudDtcblxuICBpZiAoY29udGV4dC5yZWZlcmVuY2VQcm9wZXJ0eU5hbWUpIHtcbiAgICBwYXJlbnRPYmplY3Quc2V0KGNvbnRleHQucmVmZXJlbmNlUHJvcGVydHlOYW1lLCBjdXJyZW50T2JqZWN0KTtcbiAgfVxuXG4gIC8vIHJlbW92ZSBuZXcgZWxlbWVudFxuICBjdXJyZW50T2JqZWN0LnNldChwcm9wZXJ0eU5hbWUsIHByZXZpb3VzTGlzdCk7XG5cbiAgcmV0dXJuIGNvbnRleHQuY2hhbmdlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKTtcblxudmFyIEhBTkRMRVJTID0ge1xuICAncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QnOiByZXF1aXJlKCcuL1VwZGF0ZUJ1c2luZXNzT2JqZWN0SGFuZGxlcicpLFxuICAncHJvcGVydGllcy1wYW5lbC5jcmVhdGUtYW5kLXJlZmVyZW5jZSc6IHJlcXVpcmUoJy4vQ3JlYXRlQW5kUmVmZXJlbmNlSGFuZGxlcicpLFxuICAncHJvcGVydGllcy1wYW5lbC5jcmVhdGUtYnVzaW5lc3NvYmplY3QtbGlzdCc6IHJlcXVpcmUoJy4vQ3JlYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlcicpLFxuICAncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QtbGlzdCc6IHJlcXVpcmUoJy4vVXBkYXRlQnVzaW5lc3NPYmplY3RMaXN0SGFuZGxlcicpLFxuICAncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJzogcmVxdWlyZSgnLi9NdWx0aUNvbW1hbmRIYW5kbGVyJylcbn07XG5cblxuZnVuY3Rpb24gQ29tbWFuZEluaXRpYWxpemVyKGV2ZW50QnVzLCBjb21tYW5kU3RhY2spIHtcblxuICBldmVudEJ1cy5vbignZGlhZ3JhbS5pbml0JywgZnVuY3Rpb24oKSB7XG4gICAgZm9yRWFjaChIQU5ETEVSUywgZnVuY3Rpb24oaGFuZGxlciwgaWQpIHtcbiAgICAgIGNvbW1hbmRTdGFjay5yZWdpc3RlckhhbmRsZXIoaWQsIGhhbmRsZXIpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuQ29tbWFuZEluaXRpYWxpemVyLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdjb21tYW5kU3RhY2snIF07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBfX2luaXRfXzogWyBDb21tYW5kSW5pdGlhbGl6ZXIgXVxufTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciBFbGVtZW50SGVscGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IEVsZW1lbnRIZWxwZXI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBlbGVtZW50IGFuZCBzZXQgdGhlIHBhcmVudCB0byBpdFxuICpcbiAqIEBtZXRob2QgRWxlbWVudEhlbHBlciNjcmVhdGVFbGVtZW50XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGVsZW1lbnRUeXBlIG9mIHRoZSBuZXcgZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgb2YgdGhlIG5ldyBlbGVtZW50IGluIGtleS12YWx1ZSBwYWlyc1xuICogQHBhcmFtIHttb2RkbGUub2JqZWN0fSBwYXJlbnQgb2YgdGhlIG5ldyBlbGVtZW50XG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBmYWN0b3J5IHdoaWNoIGNyZWF0ZXMgdGhlIG5ldyBlbGVtZW50XG4gKlxuICogQHJldHVybnMge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50IHdoaWNoIGlzIGNyZWF0ZWRcbiAqL1xuRWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24oZWxlbWVudFR5cGUsIHByb3BlcnRpZXMsIHBhcmVudCwgZmFjdG9yeSkge1xuICB2YXIgZWxlbWVudCA9IGZhY3RvcnkuY3JlYXRlKGVsZW1lbnRUeXBlLCBwcm9wZXJ0aWVzKTtcbiAgZWxlbWVudC4kcGFyZW50ID0gcGFyZW50O1xuXG4gIHJldHVybiBlbGVtZW50O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIHJlcXVpcmUoJy4vY21kJyksXG4gICAgcmVxdWlyZSgnZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUnKS5kZWZhdWx0XG4gIF0sXG4gIF9faW5pdF9fOiBbICdwcm9wZXJ0aWVzUGFuZWwnIF0sXG4gIHByb3BlcnRpZXNQYW5lbDogWyAndHlwZScsIHJlcXVpcmUoJy4vUHJvcGVydGllc1BhbmVsJykgXVxufTtcbiIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBJZHMgZnJvbSAnaWRzJztcblxuaW1wb3J0IEJhc2VWaWV3ZXIgZnJvbSAnLi9CYXNlVmlld2VyJztcblxuXG4vKipcbiAqIEEgYmFzZSBtb2RlbGVyIGZvciBCUE1OIDIuMCBkaWFncmFtcy5cbiAqXG4gKiBIYXZlIGEgbG9vayBhdCB7QGxpbmsgTW9kZWxlcn0gZm9yIGEgYnVuZGxlIHRoYXQgaW5jbHVkZXMgYWN0dWFsIGZlYXR1cmVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIHZpZXdlclxuICogQHBhcmFtIHtET01FbGVtZW50fSBbb3B0aW9ucy5jb250YWluZXJdIHRoZSBjb250YWluZXIgdG8gcmVuZGVyIHRoZSB2aWV3ZXIgaW4sIGRlZmF1bHRzIHRvIGJvZHkuXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLndpZHRoXSB0aGUgd2lkdGggb2YgdGhlIHZpZXdlclxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5oZWlnaHRdIHRoZSBoZWlnaHQgb2YgdGhlIHZpZXdlclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLm1vZGRsZUV4dGVuc2lvbnNdIGV4dGVuc2lvbiBwYWNrYWdlcyB0byBwcm92aWRlXG4gKiBAcGFyYW0ge0FycmF5PGRpZGkuTW9kdWxlPn0gW29wdGlvbnMubW9kdWxlc10gYSBsaXN0IG9mIG1vZHVsZXMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbW9kdWxlc1xuICogQHBhcmFtIHtBcnJheTxkaWRpLk1vZHVsZT59IFtvcHRpb25zLmFkZGl0aW9uYWxNb2R1bGVzXSBhIGxpc3Qgb2YgbW9kdWxlcyB0byB1c2Ugd2l0aCB0aGUgZGVmYXVsdCBtb2R1bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJhc2VNb2RlbGVyKG9wdGlvbnMpIHtcbiAgQmFzZVZpZXdlci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIC8vIGhvb2sgSUQgY29sbGVjdGlvbiBpbnRvIHRoZSBtb2RlbGVyXG4gIHRoaXMub24oJ2ltcG9ydC5wYXJzZS5jb21wbGV0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaWYgKCFldmVudC5lcnJvcikge1xuICAgICAgdGhpcy5fY29sbGVjdElkcyhldmVudC5kZWZpbml0aW9ucywgZXZlbnQuZWxlbWVudHNCeUlkKTtcbiAgICB9XG4gIH0sIHRoaXMpO1xuXG4gIHRoaXMub24oJ2RpYWdyYW0uZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuZ2V0KCdtb2RkbGUnKS5pZHMuY2xlYXIoKTtcbiAgfSwgdGhpcyk7XG59XG5cbmluaGVyaXRzKEJhc2VNb2RlbGVyLCBCYXNlVmlld2VyKTtcblxuXG4vKipcbiAqIENyZWF0ZSBhIG1vZGRsZSBpbnN0YW5jZSwgYXR0YWNoaW5nIGlkcyB0byBpdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5CYXNlTW9kZWxlci5wcm90b3R5cGUuX2NyZWF0ZU1vZGRsZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgdmFyIG1vZGRsZSA9IEJhc2VWaWV3ZXIucHJvdG90eXBlLl9jcmVhdGVNb2RkbGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICAvLyBhdHRhY2ggaWRzIHRvIG1vZGRsZSB0byBiZSBhYmxlIHRvIHRyYWNrXG4gIC8vIGFuZCB2YWxpZGF0ZWQgaWRzIGluIHRoZSBCUE1OIDIuMCBYTUwgZG9jdW1lbnRcbiAgLy8gdHJlZVxuICBtb2RkbGUuaWRzID0gbmV3IElkcyhbIDMyLCAzNiwgMSBdKTtcblxuICByZXR1cm4gbW9kZGxlO1xufTtcblxuLyoqXG4gKiBDb2xsZWN0IGlkcyBwcm9jZXNzZWQgZHVyaW5nIHBhcnNpbmcgb2YgdGhlXG4gKiBkZWZpbml0aW9ucyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBkZWZpbml0aW9uc1xuICogQHBhcmFtIHtDb250ZXh0fSBjb250ZXh0XG4gKi9cbkJhc2VNb2RlbGVyLnByb3RvdHlwZS5fY29sbGVjdElkcyA9IGZ1bmN0aW9uKGRlZmluaXRpb25zLCBlbGVtZW50c0J5SWQpIHtcblxuICB2YXIgbW9kZGxlID0gZGVmaW5pdGlvbnMuJG1vZGVsLFxuICAgICAgaWRzID0gbW9kZGxlLmlkcyxcbiAgICAgIGlkO1xuXG4gIC8vIHJlbW92ZSByZWZlcmVuY2VzIGZyb20gcHJldmlvdXMgaW1wb3J0XG4gIGlkcy5jbGVhcigpO1xuXG4gIGZvciAoaWQgaW4gZWxlbWVudHNCeUlkKSB7XG4gICAgaWRzLmNsYWltKGlkLCBlbGVtZW50c0J5SWRbaWRdKTtcbiAgfVxufTtcbiIsIi8qKlxuICogVGhlIGNvZGUgaW4gdGhlIDxwcm9qZWN0LWxvZ28+PC9wcm9qZWN0LWxvZ28+IGFyZWFcbiAqIG11c3Qgbm90IGJlIGNoYW5nZWQuXG4gKlxuICogQHNlZSBodHRwOi8vYnBtbi5pby9saWNlbnNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICovXG5pbXBvcnQge1xuICBhc3NpZ24sXG4gIGZpbmQsXG4gIGlzTnVtYmVyLFxuICBvbWl0XG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZG9taWZ5LFxuICBxdWVyeSBhcyBkb21RdWVyeSxcbiAgcmVtb3ZlIGFzIGRvbVJlbW92ZVxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHtcbiAgaW5uZXJTVkdcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQgRGlhZ3JhbSBmcm9tICdkaWFncmFtLWpzJztcbmltcG9ydCBCcG1uTW9kZGxlIGZyb20gJ2JwbW4tbW9kZGxlJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHtcbiAgaW1wb3J0QnBtbkRpYWdyYW1cbn0gZnJvbSAnLi9pbXBvcnQvSW1wb3J0ZXInO1xuXG5pbXBvcnQge1xuICB3cmFwRm9yQ29tcGF0aWJpbGl0eVxufSBmcm9tICcuL3V0aWwvQ29tcGF0aWJpbGl0eVV0aWwnO1xuXG4vKipcbiAqIEEgYmFzZSB2aWV3ZXIgZm9yIEJQTU4gMi4wIGRpYWdyYW1zLlxuICpcbiAqIEhhdmUgYSBsb29rIGF0IHtAbGluayBWaWV3ZXJ9LCB7QGxpbmsgTmF2aWdhdGVkVmlld2VyfSBvciB7QGxpbmsgTW9kZWxlcn0gZm9yXG4gKiBidW5kbGVzIHRoYXQgaW5jbHVkZSBhY3R1YWwgZmVhdHVyZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgdmlld2VyXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IFtvcHRpb25zLmNvbnRhaW5lcl0gdGhlIGNvbnRhaW5lciB0byByZW5kZXIgdGhlIHZpZXdlciBpbiwgZGVmYXVsdHMgdG8gYm9keS5cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMud2lkdGhdIHRoZSB3aWR0aCBvZiB0aGUgdmlld2VyXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmhlaWdodF0gdGhlIGhlaWdodCBvZiB0aGUgdmlld2VyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMubW9kZGxlRXh0ZW5zaW9uc10gZXh0ZW5zaW9uIHBhY2thZ2VzIHRvIHByb3ZpZGVcbiAqIEBwYXJhbSB7QXJyYXk8ZGlkaS5Nb2R1bGU+fSBbb3B0aW9ucy5tb2R1bGVzXSBhIGxpc3Qgb2YgbW9kdWxlcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBtb2R1bGVzXG4gKiBAcGFyYW0ge0FycmF5PGRpZGkuTW9kdWxlPn0gW29wdGlvbnMuYWRkaXRpb25hbE1vZHVsZXNdIGEgbGlzdCBvZiBtb2R1bGVzIHRvIHVzZSB3aXRoIHRoZSBkZWZhdWx0IG1vZHVsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQmFzZVZpZXdlcihvcHRpb25zKSB7XG5cbiAgb3B0aW9ucyA9IGFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBvcHRpb25zKTtcblxuICB0aGlzLl9tb2RkbGUgPSB0aGlzLl9jcmVhdGVNb2RkbGUob3B0aW9ucyk7XG5cbiAgdGhpcy5fY29udGFpbmVyID0gdGhpcy5fY3JlYXRlQ29udGFpbmVyKG9wdGlvbnMpO1xuXG4gIC8qIDxwcm9qZWN0LWxvZ28+ICovXG5cbiAgYWRkUHJvamVjdExvZ28odGhpcy5fY29udGFpbmVyKTtcblxuICAvKiA8L3Byb2plY3QtbG9nbz4gKi9cblxuICB0aGlzLl9pbml0KHRoaXMuX2NvbnRhaW5lciwgdGhpcy5fbW9kZGxlLCBvcHRpb25zKTtcbn1cblxuaW5oZXJpdHMoQmFzZVZpZXdlciwgRGlhZ3JhbSk7XG5cbi8qKlxuKiBUaGUgaW1wb3J0WE1MIHJlc3VsdC5cbipcbiogQHR5cGVkZWYge09iamVjdH0gSW1wb3J0WE1MUmVzdWx0XG4qXG4qIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gd2FybmluZ3NcbiovXG5cbi8qKlxuKiBUaGUgaW1wb3J0WE1MIGVycm9yLlxuKlxuKiBAdHlwZWRlZiB7RXJyb3J9IEltcG9ydFhNTEVycm9yXG4qXG4qIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gd2FybmluZ3NcbiovXG5cbi8qKlxuICogUGFyc2UgYW5kIHJlbmRlciBhIEJQTU4gMi4wIGRpYWdyYW0uXG4gKlxuICogT25jZSBmaW5pc2hlZCB0aGUgdmlld2VyIHJlcG9ydHMgYmFjayB0aGUgcmVzdWx0IHRvIHRoZVxuICogcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCAoZXJyLCB3YXJuaW5ncykuXG4gKlxuICogIyMgTGlmZS1DeWNsZSBFdmVudHNcbiAqXG4gKiBEdXJpbmcgaW1wb3J0IHRoZSB2aWV3ZXIgd2lsbCBmaXJlIGxpZmUtY3ljbGUgZXZlbnRzOlxuICpcbiAqICAgKiBpbXBvcnQucGFyc2Uuc3RhcnQgKGFib3V0IHRvIHJlYWQgbW9kZWwgZnJvbSB4bWwpXG4gKiAgICogaW1wb3J0LnBhcnNlLmNvbXBsZXRlIChtb2RlbCByZWFkOyBtYXkgaGF2ZSB3b3JrZWQgb3Igbm90KVxuICogICAqIGltcG9ydC5yZW5kZXIuc3RhcnQgKGdyYXBoaWNhbCBpbXBvcnQgc3RhcnQpXG4gKiAgICogaW1wb3J0LnJlbmRlci5jb21wbGV0ZSAoZ3JhcGhpY2FsIGltcG9ydCBmaW5pc2hlZClcbiAqICAgKiBpbXBvcnQuZG9uZSAoZXZlcnl0aGluZyBkb25lKVxuICpcbiAqIFlvdSBjYW4gdXNlIHRoZXNlIGV2ZW50cyB0byBob29rIGludG8gdGhlIGxpZmUtY3ljbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHhtbCB0aGUgQlBNTiAyLjAgeG1sXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnQ8QlBNTkRpYWdyYW0+fHN0cmluZ30gW2JwbW5EaWFncmFtXSBCUE1OIGRpYWdyYW0gb3IgaWQgb2YgZGlhZ3JhbSB0byByZW5kZXIgKGlmIG5vdCBwcm92aWRlZCwgdGhlIGZpcnN0IG9uZSB3aWxsIGJlIHJlbmRlcmVkKVxuICpcbiAqIFJldHVybnMge1Byb21pc2U8SW1wb3J0WE1MUmVzdWx0LCBJbXBvcnRYTUxFcnJvcj59XG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLmltcG9ydFhNTCA9IHdyYXBGb3JDb21wYXRpYmlsaXR5KGZ1bmN0aW9uIGltcG9ydFhNTCh4bWwsIGJwbW5EaWFncmFtKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGZ1bmN0aW9uIFBhcnNlQ29tcGxldGVFdmVudChkYXRhKSB7XG5cbiAgICB2YXIgZXZlbnQgPSBzZWxmLmdldCgnZXZlbnRCdXMnKS5jcmVhdGVFdmVudChkYXRhKTtcblxuICAgIC8vIFRPRE8obmlra3UpOiByZW1vdmUgd2l0aCBmdXR1cmUgYnBtbi1qcyB2ZXJzaW9uXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV2ZW50LCAnY29udGV4dCcsIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoXG4gICAgICAgICAgJ2ltcG9ydC5wYXJzZS5jb21wbGV0ZSA8Y29udGV4dD4gaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgbGlicmFyeSB2ZXJzaW9ucydcbiAgICAgICAgKSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB3YXJuaW5nczogZGF0YS53YXJuaW5ncyxcbiAgICAgICAgICByZWZlcmVuY2VzOiBkYXRhLnJlZmVyZW5jZXMsXG4gICAgICAgICAgZWxlbWVudHNCeUlkOiBkYXRhLmVsZW1lbnRzQnlJZFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXG4gICAgLy8gaG9vayBpbiBwcmUtcGFyc2UgbGlzdGVuZXJzICtcbiAgICAvLyBhbGxvdyB4bWwgbWFuaXB1bGF0aW9uXG4gICAgeG1sID0gc2VsZi5fZW1pdCgnaW1wb3J0LnBhcnNlLnN0YXJ0JywgeyB4bWw6IHhtbCB9KSB8fCB4bWw7XG5cbiAgICBzZWxmLl9tb2RkbGUuZnJvbVhNTCh4bWwsICdicG1uOkRlZmluaXRpb25zJykudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgIHZhciBkZWZpbml0aW9ucyA9IHJlc3VsdC5yb290RWxlbWVudDtcbiAgICAgIHZhciByZWZlcmVuY2VzID0gcmVzdWx0LnJlZmVyZW5jZXM7XG4gICAgICB2YXIgcGFyc2VXYXJuaW5ncyA9IHJlc3VsdC53YXJuaW5ncztcbiAgICAgIHZhciBlbGVtZW50c0J5SWQgPSByZXN1bHQuZWxlbWVudHNCeUlkO1xuXG4gICAgICAvLyBob29rIGluIHBvc3QgcGFyc2UgbGlzdGVuZXJzICtcbiAgICAgIC8vIGFsbG93IGRlZmluaXRpb25zIG1hbmlwdWxhdGlvblxuICAgICAgZGVmaW5pdGlvbnMgPSBzZWxmLl9lbWl0KCdpbXBvcnQucGFyc2UuY29tcGxldGUnLCBQYXJzZUNvbXBsZXRlRXZlbnQoe1xuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgZGVmaW5pdGlvbnM6IGRlZmluaXRpb25zLFxuICAgICAgICBlbGVtZW50c0J5SWQ6IGVsZW1lbnRzQnlJZCxcbiAgICAgICAgcmVmZXJlbmNlczogcmVmZXJlbmNlcyxcbiAgICAgICAgd2FybmluZ3M6IHBhcnNlV2FybmluZ3NcbiAgICAgIH0pKSB8fCBkZWZpbml0aW9ucztcblxuICAgICAgc2VsZi5pbXBvcnREZWZpbml0aW9ucyhkZWZpbml0aW9ucywgYnBtbkRpYWdyYW0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgIHZhciBhbGxXYXJuaW5ncyA9IFtdLmNvbmNhdChwYXJzZVdhcm5pbmdzLCByZXN1bHQud2FybmluZ3MgfHwgW10pO1xuXG4gICAgICAgIHNlbGYuX2VtaXQoJ2ltcG9ydC5kb25lJywgeyBlcnJvcjogbnVsbCwgd2FybmluZ3M6IGFsbFdhcm5pbmdzIH0pO1xuXG4gICAgICAgIHJldHVybiByZXNvbHZlKHsgd2FybmluZ3M6IGFsbFdhcm5pbmdzIH0pO1xuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgIHZhciBhbGxXYXJuaW5ncyA9IFtdLmNvbmNhdChwYXJzZVdhcm5pbmdzLCBlcnIud2FybmluZ3MgfHwgW10pO1xuXG4gICAgICAgIHNlbGYuX2VtaXQoJ2ltcG9ydC5kb25lJywgeyBlcnJvcjogZXJyLCB3YXJuaW5nczogYWxsV2FybmluZ3MgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlamVjdChhZGRXYXJuaW5nc1RvRXJyb3IoZXJyLCBhbGxXYXJuaW5ncykpO1xuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG5cbiAgICAgIHNlbGYuX2VtaXQoJ2ltcG9ydC5wYXJzZS5jb21wbGV0ZScsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG5cbiAgICAgIGVyciA9IGNoZWNrVmFsaWRhdGlvbkVycm9yKGVycik7XG5cbiAgICAgIHNlbGYuX2VtaXQoJ2ltcG9ydC5kb25lJywgeyBlcnJvcjogZXJyLCB3YXJuaW5nczogZXJyLndhcm5pbmdzIH0pO1xuXG4gICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbi8qKlxuKiBUaGUgaW1wb3J0RGVmaW5pdGlvbnMgcmVzdWx0LlxuKlxuKiBAdHlwZWRlZiB7T2JqZWN0fSBJbXBvcnREZWZpbml0aW9uc1Jlc3VsdFxuKlxuKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IHdhcm5pbmdzXG4qL1xuXG4vKipcbiogVGhlIGltcG9ydERlZmluaXRpb25zIGVycm9yLlxuKlxuKiBAdHlwZWRlZiB7RXJyb3J9IEltcG9ydERlZmluaXRpb25zRXJyb3JcbipcbiogQHByb3BlcnR5IHtBcnJheTxzdHJpbmc+fSB3YXJuaW5nc1xuKi9cblxuLyoqXG4gKiBJbXBvcnQgcGFyc2VkIGRlZmluaXRpb25zIGFuZCByZW5kZXIgYSBCUE1OIDIuMCBkaWFncmFtLlxuICpcbiAqIE9uY2UgZmluaXNoZWQgdGhlIHZpZXdlciByZXBvcnRzIGJhY2sgdGhlIHJlc3VsdCB0byB0aGVcbiAqIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggKGVyciwgd2FybmluZ3MpLlxuICpcbiAqICMjIExpZmUtQ3ljbGUgRXZlbnRzXG4gKlxuICogRHVyaW5nIGltcG9ydCB0aGUgdmlld2VyIHdpbGwgZmlyZSBsaWZlLWN5Y2xlIGV2ZW50czpcbiAqXG4gKiAgICogaW1wb3J0LnJlbmRlci5zdGFydCAoZ3JhcGhpY2FsIGltcG9ydCBzdGFydClcbiAqICAgKiBpbXBvcnQucmVuZGVyLmNvbXBsZXRlIChncmFwaGljYWwgaW1wb3J0IGZpbmlzaGVkKVxuICpcbiAqIFlvdSBjYW4gdXNlIHRoZXNlIGV2ZW50cyB0byBob29rIGludG8gdGhlIGxpZmUtY3ljbGUuXG4gKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50PERlZmluaXRpb25zPn0gZGVmaW5pdGlvbnMgcGFyc2VkIEJQTU4gMi4wIGRlZmluaXRpb25zXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnQ8QlBNTkRpYWdyYW0+fHN0cmluZ30gW2JwbW5EaWFncmFtXSBCUE1OIGRpYWdyYW0gb3IgaWQgb2YgZGlhZ3JhbSB0byByZW5kZXIgKGlmIG5vdCBwcm92aWRlZCwgdGhlIGZpcnN0IG9uZSB3aWxsIGJlIHJlbmRlcmVkKVxuICpcbiAqIFJldHVybnMge1Byb21pc2U8SW1wb3J0RGVmaW5pdGlvbnNSZXN1bHQsIEltcG9ydERlZmluaXRpb25zRXJyb3I+fVxuICovXG5CYXNlVmlld2VyLnByb3RvdHlwZS5pbXBvcnREZWZpbml0aW9ucyA9IHdyYXBGb3JDb21wYXRpYmlsaXR5KGZ1bmN0aW9uIGltcG9ydERlZmluaXRpb25zKGRlZmluaXRpb25zLCBicG1uRGlhZ3JhbSkge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cbiAgICBzZWxmLl9zZXREZWZpbml0aW9ucyhkZWZpbml0aW9ucyk7XG5cbiAgICBzZWxmLm9wZW4oYnBtbkRpYWdyYW0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG5cbiAgICAgIHZhciB3YXJuaW5ncyA9IHJlc3VsdC53YXJuaW5ncztcblxuICAgICAgcmV0dXJuIHJlc29sdmUoeyB3YXJuaW5nczogd2FybmluZ3MgfSk7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG5cbiAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuLyoqXG4gKiBUaGUgb3BlbiByZXN1bHQuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gT3BlblJlc3VsdFxuICpcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gd2FybmluZ3NcbiAqL1xuXG4vKipcbiogVGhlIG9wZW4gZXJyb3IuXG4qXG4qIEB0eXBlZGVmIHtFcnJvcn0gT3BlbkVycm9yXG4qXG4qIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gd2FybmluZ3NcbiovXG5cbi8qKlxuICogT3BlbiBkaWFncmFtIG9mIHByZXZpb3VzbHkgaW1wb3J0ZWQgWE1MLlxuICpcbiAqIE9uY2UgZmluaXNoZWQgdGhlIHZpZXdlciByZXBvcnRzIGJhY2sgdGhlIHJlc3VsdCB0byB0aGVcbiAqIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggKGVyciwgd2FybmluZ3MpLlxuICpcbiAqICMjIExpZmUtQ3ljbGUgRXZlbnRzXG4gKlxuICogRHVyaW5nIHN3aXRjaCB0aGUgdmlld2VyIHdpbGwgZmlyZSBsaWZlLWN5Y2xlIGV2ZW50czpcbiAqXG4gKiAgICogaW1wb3J0LnJlbmRlci5zdGFydCAoZ3JhcGhpY2FsIGltcG9ydCBzdGFydClcbiAqICAgKiBpbXBvcnQucmVuZGVyLmNvbXBsZXRlIChncmFwaGljYWwgaW1wb3J0IGZpbmlzaGVkKVxuICpcbiAqIFlvdSBjYW4gdXNlIHRoZXNlIGV2ZW50cyB0byBob29rIGludG8gdGhlIGxpZmUtY3ljbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8TW9kZGxlRWxlbWVudDxCUE1ORGlhZ3JhbT59IFticG1uRGlhZ3JhbU9ySWRdIGlkIG9yIHRoZSBkaWFncmFtIHRvIG9wZW5cbiAqXG4gKiBSZXR1cm5zIHtQcm9taXNlPE9wZW5SZXN1bHQsIE9wZW5FcnJvcj59XG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLm9wZW4gPSB3cmFwRm9yQ29tcGF0aWJpbGl0eShmdW5jdGlvbiBvcGVuKGJwbW5EaWFncmFtT3JJZCkge1xuXG4gIHZhciBkZWZpbml0aW9ucyA9IHRoaXMuX2RlZmluaXRpb25zO1xuICB2YXIgYnBtbkRpYWdyYW0gPSBicG1uRGlhZ3JhbU9ySWQ7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICBpZiAoIWRlZmluaXRpb25zKSB7XG4gICAgICB2YXIgZXJyMSA9IG5ldyBFcnJvcignbm8gWE1MIGltcG9ydGVkJyk7XG5cbiAgICAgIHJldHVybiByZWplY3QoYWRkV2FybmluZ3NUb0Vycm9yKGVycjEsIFtdKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBicG1uRGlhZ3JhbU9ySWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBicG1uRGlhZ3JhbSA9IGZpbmRCUE1ORGlhZ3JhbShkZWZpbml0aW9ucywgYnBtbkRpYWdyYW1PcklkKTtcblxuICAgICAgaWYgKCFicG1uRGlhZ3JhbSkge1xuICAgICAgICB2YXIgZXJyMiA9IG5ldyBFcnJvcignQlBNTkRpYWdyYW0gPCcgKyBicG1uRGlhZ3JhbU9ySWQgKyAnPiBub3QgZm91bmQnKTtcblxuICAgICAgICByZXR1cm4gcmVqZWN0KGFkZFdhcm5pbmdzVG9FcnJvcihlcnIyLCBbXSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNsZWFyIGV4aXN0aW5nIHJlbmRlcmVkIGRpYWdyYW1cbiAgICAvLyBjYXRjaCBzeW5jaHJvbm91cyBleGNlcHRpb25zIGR1cmluZyAjY2xlYXIoKVxuICAgIHRyeSB7XG4gICAgICBzZWxmLmNsZWFyKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcblxuICAgICAgcmV0dXJuIHJlamVjdChhZGRXYXJuaW5nc1RvRXJyb3IoZXJyb3IsIFtdKSk7XG4gICAgfVxuXG4gICAgLy8gcGVyZm9ybSBncmFwaGljYWwgaW1wb3J0XG4gICAgaW1wb3J0QnBtbkRpYWdyYW0oc2VsZiwgZGVmaW5pdGlvbnMsIGJwbW5EaWFncmFtKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuXG4gICAgICB2YXIgd2FybmluZ3MgPSByZXN1bHQud2FybmluZ3M7XG5cbiAgICAgIHJldHVybiByZXNvbHZlKHsgd2FybmluZ3M6IHdhcm5pbmdzIH0pO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuXG4gICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbi8qKlxuICogVGhlIHNhdmVYTUwgcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNhdmVYTUxSZXN1bHRcbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30geG1sXG4gKi9cblxuLyoqXG4gKiBFeHBvcnQgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgQlBNTiAyLjAgZGlhZ3JhbSBhc1xuICogYSBCUE1OIDIuMCBYTUwgZG9jdW1lbnQuXG4gKlxuICogIyMgTGlmZS1DeWNsZSBFdmVudHNcbiAqXG4gKiBEdXJpbmcgWE1MIHNhdmluZyB0aGUgdmlld2VyIHdpbGwgZmlyZSBsaWZlLWN5Y2xlIGV2ZW50czpcbiAqXG4gKiAgICogc2F2ZVhNTC5zdGFydCAoYmVmb3JlIHNlcmlhbGl6YXRpb24pXG4gKiAgICogc2F2ZVhNTC5zZXJpYWxpemVkIChhZnRlciB4bWwgZ2VuZXJhdGlvbilcbiAqICAgKiBzYXZlWE1MLmRvbmUgKGV2ZXJ5dGhpbmcgZG9uZSlcbiAqXG4gKiBZb3UgY2FuIHVzZSB0aGVzZSBldmVudHMgdG8gaG9vayBpbnRvIHRoZSBsaWZlLWN5Y2xlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gZXhwb3J0IG9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZm9ybWF0PWZhbHNlXSBvdXRwdXQgZm9ybWF0dGVkIFhNTFxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5wcmVhbWJsZT10cnVlXSBvdXRwdXQgcHJlYW1ibGVcbiAqXG4gKiBSZXR1cm5zIHtQcm9taXNlPFNhdmVYTUxSZXN1bHQsIEVycm9yPn1cbiAqL1xuQmFzZVZpZXdlci5wcm90b3R5cGUuc2F2ZVhNTCA9IHdyYXBGb3JDb21wYXRpYmlsaXR5KGZ1bmN0aW9uIHNhdmVYTUwob3B0aW9ucykge1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB2YXIgZGVmaW5pdGlvbnMgPSB0aGlzLl9kZWZpbml0aW9ucztcblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cbiAgICBpZiAoIWRlZmluaXRpb25zKSB7XG4gICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdubyBkZWZpbml0aW9ucyBsb2FkZWQnKTtcblxuICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgIH1cblxuICAgIC8vIGFsbG93IHRvIGZpZGRsZSBhcm91bmQgd2l0aCBkZWZpbml0aW9uc1xuICAgIGRlZmluaXRpb25zID0gc2VsZi5fZW1pdCgnc2F2ZVhNTC5zdGFydCcsIHtcbiAgICAgIGRlZmluaXRpb25zOiBkZWZpbml0aW9uc1xuICAgIH0pIHx8IGRlZmluaXRpb25zO1xuXG4gICAgc2VsZi5fbW9kZGxlLnRvWE1MKGRlZmluaXRpb25zLCBvcHRpb25zKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuXG4gICAgICB2YXIgeG1sID0gcmVzdWx0LnhtbDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgeG1sID0gc2VsZi5fZW1pdCgnc2F2ZVhNTC5zZXJpYWxpemVkJywge1xuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIHhtbDogeG1sXG4gICAgICAgIH0pIHx8IHhtbDtcblxuICAgICAgICBzZWxmLl9lbWl0KCdzYXZlWE1MLmRvbmUnLCB7XG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgeG1sOiB4bWxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2Vycm9yIGluIHNhdmVYTUwgbGlmZS1jeWNsZSBsaXN0ZW5lcicsIGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh7IHhtbDogeG1sIH0pO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuXG4gICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbi8qKlxuICogVGhlIHNhdmVTVkcgcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNhdmVTVkdSZXN1bHRcbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3ZnXG4gKi9cblxuLyoqXG4gKiBFeHBvcnQgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgQlBNTiAyLjAgZGlhZ3JhbSBhc1xuICogYW4gU1ZHIGltYWdlLlxuICpcbiAqICMjIExpZmUtQ3ljbGUgRXZlbnRzXG4gKlxuICogRHVyaW5nIFNWRyBzYXZpbmcgdGhlIHZpZXdlciB3aWxsIGZpcmUgbGlmZS1jeWNsZSBldmVudHM6XG4gKlxuICogICAqIHNhdmVTVkcuc3RhcnQgKGJlZm9yZSBzZXJpYWxpemF0aW9uKVxuICogICAqIHNhdmVTVkcuZG9uZSAoZXZlcnl0aGluZyBkb25lKVxuICpcbiAqIFlvdSBjYW4gdXNlIHRoZXNlIGV2ZW50cyB0byBob29rIGludG8gdGhlIGxpZmUtY3ljbGUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICpcbiAqIFJldHVybnMge1Byb21pc2U8U2F2ZVNWR1Jlc3VsdCwgRXJyb3I+fVxuICovXG5CYXNlVmlld2VyLnByb3RvdHlwZS5zYXZlU1ZHID0gd3JhcEZvckNvbXBhdGliaWxpdHkoZnVuY3Rpb24gc2F2ZVNWRyhvcHRpb25zKSB7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblxuICAgIHNlbGYuX2VtaXQoJ3NhdmVTVkcuc3RhcnQnKTtcblxuICAgIHZhciBzdmcsIGVycjtcblxuICAgIHRyeSB7XG4gICAgICB2YXIgY2FudmFzID0gc2VsZi5nZXQoJ2NhbnZhcycpO1xuXG4gICAgICB2YXIgY29udGVudE5vZGUgPSBjYW52YXMuZ2V0RGVmYXVsdExheWVyKCksXG4gICAgICAgICAgZGVmc05vZGUgPSBkb21RdWVyeSgnZGVmcycsIGNhbnZhcy5fc3ZnKTtcblxuICAgICAgdmFyIGNvbnRlbnRzID0gaW5uZXJTVkcoY29udGVudE5vZGUpLFxuICAgICAgICAgIGRlZnMgPSBkZWZzTm9kZSA/ICc8ZGVmcz4nICsgaW5uZXJTVkcoZGVmc05vZGUpICsgJzwvZGVmcz4nIDogJyc7XG5cbiAgICAgIHZhciBiYm94ID0gY29udGVudE5vZGUuZ2V0QkJveCgpO1xuXG4gICAgICBzdmcgPVxuICAgICAgICAnPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIj8+XFxuJyArXG4gICAgICAgICc8IS0tIGNyZWF0ZWQgd2l0aCBicG1uLWpzIC8gaHR0cDovL2JwbW4uaW8gLS0+XFxuJyArXG4gICAgICAgICc8IURPQ1RZUEUgc3ZnIFBVQkxJQyBcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXCIgXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcIj5cXG4nICtcbiAgICAgICAgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiICcgK1xuICAgICAgICAgICAgICd3aWR0aD1cIicgKyBiYm94LndpZHRoICsgJ1wiIGhlaWdodD1cIicgKyBiYm94LmhlaWdodCArICdcIiAnICtcbiAgICAgICAgICAgICAndmlld0JveD1cIicgKyBiYm94LnggKyAnICcgKyBiYm94LnkgKyAnICcgKyBiYm94LndpZHRoICsgJyAnICsgYmJveC5oZWlnaHQgKyAnXCIgdmVyc2lvbj1cIjEuMVwiPicgK1xuICAgICAgICAgIGRlZnMgKyBjb250ZW50cyArXG4gICAgICAgICc8L3N2Zz4nO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVyciA9IGU7XG4gICAgfVxuXG4gICAgc2VsZi5fZW1pdCgnc2F2ZVNWRy5kb25lJywge1xuICAgICAgZXJyb3I6IGVycixcbiAgICAgIHN2Zzogc3ZnXG4gICAgfSk7XG5cbiAgICBpZiAoIWVycikge1xuICAgICAgcmV0dXJuIHJlc29sdmUoeyBzdmc6IHN2ZyB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gIH0pO1xufSk7XG5cbi8qKlxuICogR2V0IGEgbmFtZWQgZGlhZ3JhbSBzZXJ2aWNlLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGVsZW1lbnRSZWdpc3RyeSA9IHZpZXdlci5nZXQoJ2VsZW1lbnRSZWdpc3RyeScpO1xuICogdmFyIHN0YXJ0RXZlbnRTaGFwZSA9IGVsZW1lbnRSZWdpc3RyeS5nZXQoJ1N0YXJ0RXZlbnRfMScpO1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBkaWFncmFtIHNlcnZpY2UgaW5zdGFuY2VcbiAqXG4gKiBAbWV0aG9kIEJhc2VWaWV3ZXIjZ2V0XG4gKi9cblxuLyoqXG4gKiBJbnZva2UgYSBmdW5jdGlvbiBpbiB0aGUgY29udGV4dCBvZiB0aGlzIHZpZXdlci5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZpZXdlci5pbnZva2UoZnVuY3Rpb24oZWxlbWVudFJlZ2lzdHJ5KSB7XG4gKiAgIHZhciBzdGFydEV2ZW50U2hhcGUgPSBlbGVtZW50UmVnaXN0cnkuZ2V0KCdTdGFydEV2ZW50XzEnKTtcbiAqIH0pO1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGJlIGludm9rZWRcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBmdW5jdGlvbnMgcmV0dXJuIHZhbHVlXG4gKlxuICogQG1ldGhvZCBCYXNlVmlld2VyI2ludm9rZVxuICovXG5cblxuQmFzZVZpZXdlci5wcm90b3R5cGUuX3NldERlZmluaXRpb25zID0gZnVuY3Rpb24oZGVmaW5pdGlvbnMpIHtcbiAgdGhpcy5fZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbn07XG5cbkJhc2VWaWV3ZXIucHJvdG90eXBlLmdldE1vZHVsZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX21vZHVsZXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgZHJhd24gZWxlbWVudHMgZnJvbSB0aGUgdmlld2VyLlxuICpcbiAqIEFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgdGhlIHZpZXdlciBjYW4gc3RpbGxcbiAqIGJlIHJldXNlZCBmb3Igb3BlbmluZyBhbm90aGVyIGRpYWdyYW0uXG4gKlxuICogQG1ldGhvZCBCYXNlVmlld2VyI2NsZWFyXG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5nZXREZWZpbml0aW9ucygpKSB7XG5cbiAgICAvLyBubyBkaWFncmFtIHRvIGNsZWFyXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gcmVtb3ZlIGJ1c2luZXNzT2JqZWN0I2RpIGJpbmRpbmdcbiAgLy9cbiAgLy8gdGhpcyBpcyBuZWNlc3NhcnksIGFzIHdlIGVzdGFibGlzaCB0aGUgYmluZGluZ3NcbiAgLy8gaW4gdGhlIEJwbW5UcmVlV2Fsa2VyIChhbmQgYXNzdW1lIG5vbmUgYXJlIGdpdmVuXG4gIC8vIG9uIHJlaW1wb3J0KVxuICB0aGlzLmdldCgnZWxlbWVudFJlZ2lzdHJ5JykuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgdmFyIGJvID0gZWxlbWVudC5idXNpbmVzc09iamVjdDtcblxuICAgIGlmIChibyAmJiBiby5kaSkge1xuICAgICAgZGVsZXRlIGJvLmRpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcmVtb3ZlIGRyYXduIGVsZW1lbnRzXG4gIERpYWdyYW0ucHJvdG90eXBlLmNsZWFyLmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3kgdGhlIHZpZXdlciBpbnN0YW5jZSBhbmQgcmVtb3ZlIGFsbCBpdHNcbiAqIHJlbWFpbmRlcnMgZnJvbSB0aGUgZG9jdW1lbnQgdHJlZS5cbiAqL1xuQmFzZVZpZXdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuXG4gIC8vIGRpYWdyYW0gZGVzdHJveVxuICBEaWFncmFtLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgLy8gZG9tIGRldGFjaFxuICBkb21SZW1vdmUodGhpcy5fY29udGFpbmVyKTtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXIgYW4gZXZlbnQgbGlzdGVuZXJcbiAqXG4gKiBSZW1vdmUgYSBwcmV2aW91c2x5IGFkZGVkIGxpc3RlbmVyIHZpYSB7QGxpbmsgI29mZihldmVudCwgY2FsbGJhY2spfS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJpb3JpdHldXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtPYmplY3R9IFt0aGF0XVxuICovXG5CYXNlVmlld2VyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKGV2ZW50LCBwcmlvcml0eSwgY2FsbGJhY2ssIHRhcmdldCkge1xuICByZXR1cm4gdGhpcy5nZXQoJ2V2ZW50QnVzJykub24oZXZlbnQsIHByaW9yaXR5LCBjYWxsYmFjaywgdGFyZ2V0KTtcbn07XG5cbi8qKlxuICogRGUtcmVnaXN0ZXIgYW4gZXZlbnQgbGlzdGVuZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uKGV2ZW50LCBjYWxsYmFjaykge1xuICB0aGlzLmdldCgnZXZlbnRCdXMnKS5vZmYoZXZlbnQsIGNhbGxiYWNrKTtcbn07XG5cbkJhc2VWaWV3ZXIucHJvdG90eXBlLmF0dGFjaFRvID0gZnVuY3Rpb24ocGFyZW50Tm9kZSkge1xuXG4gIGlmICghcGFyZW50Tm9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50Tm9kZSByZXF1aXJlZCcpO1xuICB9XG5cbiAgLy8gZW5zdXJlIHdlIGRldGFjaCBmcm9tIHRoZVxuICAvLyBwcmV2aW91cywgb2xkIHBhcmVudFxuICB0aGlzLmRldGFjaCgpO1xuXG4gIC8vIHVud3JhcCBqUXVlcnkgaWYgcHJvdmlkZWRcbiAgaWYgKHBhcmVudE5vZGUuZ2V0ICYmIHBhcmVudE5vZGUuY29uc3RydWN0b3IucHJvdG90eXBlLmpxdWVyeSkge1xuICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLmdldCgwKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcGFyZW50Tm9kZSA9PT0gJ3N0cmluZycpIHtcbiAgICBwYXJlbnROb2RlID0gZG9tUXVlcnkocGFyZW50Tm9kZSk7XG4gIH1cblxuICBwYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lcik7XG5cbiAgdGhpcy5fZW1pdCgnYXR0YWNoJywge30pO1xuXG4gIHRoaXMuZ2V0KCdjYW52YXMnKS5yZXNpemVkKCk7XG59O1xuXG5CYXNlVmlld2VyLnByb3RvdHlwZS5nZXREZWZpbml0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fZGVmaW5pdGlvbnM7XG59O1xuXG5CYXNlVmlld2VyLnByb3RvdHlwZS5kZXRhY2ggPSBmdW5jdGlvbigpIHtcblxuICB2YXIgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyLFxuICAgICAgcGFyZW50Tm9kZSA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xuXG4gIGlmICghcGFyZW50Tm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX2VtaXQoJ2RldGFjaCcsIHt9KTtcblxuICBwYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNvbnRhaW5lcik7XG59O1xuXG5CYXNlVmlld2VyLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uKGNvbnRhaW5lciwgbW9kZGxlLCBvcHRpb25zKSB7XG5cbiAgdmFyIGJhc2VNb2R1bGVzID0gb3B0aW9ucy5tb2R1bGVzIHx8IHRoaXMuZ2V0TW9kdWxlcygpLFxuICAgICAgYWRkaXRpb25hbE1vZHVsZXMgPSBvcHRpb25zLmFkZGl0aW9uYWxNb2R1bGVzIHx8IFtdLFxuICAgICAgc3RhdGljTW9kdWxlcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGJwbW5qczogWyAndmFsdWUnLCB0aGlzIF0sXG4gICAgICAgICAgbW9kZGxlOiBbICd2YWx1ZScsIG1vZGRsZSBdXG4gICAgICAgIH1cbiAgICAgIF07XG5cbiAgdmFyIGRpYWdyYW1Nb2R1bGVzID0gW10uY29uY2F0KHN0YXRpY01vZHVsZXMsIGJhc2VNb2R1bGVzLCBhZGRpdGlvbmFsTW9kdWxlcyk7XG5cbiAgdmFyIGRpYWdyYW1PcHRpb25zID0gYXNzaWduKG9taXQob3B0aW9ucywgWyAnYWRkaXRpb25hbE1vZHVsZXMnIF0pLCB7XG4gICAgY2FudmFzOiBhc3NpZ24oe30sIG9wdGlvbnMuY2FudmFzLCB7IGNvbnRhaW5lcjogY29udGFpbmVyIH0pLFxuICAgIG1vZHVsZXM6IGRpYWdyYW1Nb2R1bGVzXG4gIH0pO1xuXG4gIC8vIGludm9rZSBkaWFncmFtIGNvbnN0cnVjdG9yXG4gIERpYWdyYW0uY2FsbCh0aGlzLCBkaWFncmFtT3B0aW9ucyk7XG5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jb250YWluZXIpIHtcbiAgICB0aGlzLmF0dGFjaFRvKG9wdGlvbnMuY29udGFpbmVyKTtcbiAgfVxufTtcblxuLyoqXG4gKiBFbWl0IGFuIGV2ZW50IG9uIHRoZSB1bmRlcmx5aW5nIHtAbGluayBFdmVudEJ1c31cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSAge09iamVjdH0gZXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IGV2ZW50IHByb2Nlc3NpbmcgcmVzdWx0IChpZiBhbnkpXG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLl9lbWl0ID0gZnVuY3Rpb24odHlwZSwgZXZlbnQpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0KCdldmVudEJ1cycpLmZpcmUodHlwZSwgZXZlbnQpO1xufTtcblxuQmFzZVZpZXdlci5wcm90b3R5cGUuX2NyZWF0ZUNvbnRhaW5lciA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblxuICB2YXIgY29udGFpbmVyID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiYmpzLWNvbnRhaW5lclwiPjwvZGl2PicpO1xuXG4gIGFzc2lnbihjb250YWluZXIuc3R5bGUsIHtcbiAgICB3aWR0aDogZW5zdXJlVW5pdChvcHRpb25zLndpZHRoKSxcbiAgICBoZWlnaHQ6IGVuc3VyZVVuaXQob3B0aW9ucy5oZWlnaHQpLFxuICAgIHBvc2l0aW9uOiBvcHRpb25zLnBvc2l0aW9uXG4gIH0pO1xuXG4gIHJldHVybiBjb250YWluZXI7XG59O1xuXG5CYXNlVmlld2VyLnByb3RvdHlwZS5fY3JlYXRlTW9kZGxlID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICB2YXIgbW9kZGxlT3B0aW9ucyA9IGFzc2lnbih7fSwgdGhpcy5fbW9kZGxlRXh0ZW5zaW9ucywgb3B0aW9ucy5tb2RkbGVFeHRlbnNpb25zKTtcblxuICByZXR1cm4gbmV3IEJwbW5Nb2RkbGUobW9kZGxlT3B0aW9ucyk7XG59O1xuXG5CYXNlVmlld2VyLnByb3RvdHlwZS5fbW9kdWxlcyA9IFtdO1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBhZGRXYXJuaW5nc1RvRXJyb3IoZXJyLCB3YXJuaW5nc0FyeSkge1xuICBlcnIud2FybmluZ3MgPSB3YXJuaW5nc0FyeTtcbiAgcmV0dXJuIGVycjtcbn1cblxuZnVuY3Rpb24gY2hlY2tWYWxpZGF0aW9uRXJyb3IoZXJyKSB7XG5cbiAgLy8gY2hlY2sgaWYgd2UgY2FuIGhlbHAgdGhlIHVzZXIgYnkgaW5kaWNhdGluZyB3cm9uZyBCUE1OIDIuMCB4bWxcbiAgLy8gKGluIGNhc2UgaGUgb3IgdGhlIGV4cG9ydGluZyB0b29sIGRpZCBub3QgZ2V0IHRoYXQgcmlnaHQpXG5cbiAgdmFyIHBhdHRlcm4gPSAvdW5wYXJzYWJsZSBjb250ZW50IDwoW14+XSspPiBkZXRlY3RlZChbXFxzXFxTXSopJC87XG4gIHZhciBtYXRjaCA9IHBhdHRlcm4uZXhlYyhlcnIubWVzc2FnZSk7XG5cbiAgaWYgKG1hdGNoKSB7XG4gICAgZXJyLm1lc3NhZ2UgPVxuICAgICAgJ3VucGFyc2FibGUgY29udGVudCA8JyArIG1hdGNoWzFdICsgJz4gZGV0ZWN0ZWQ7ICcgK1xuICAgICAgJ3RoaXMgbWF5IGluZGljYXRlIGFuIGludmFsaWQgQlBNTiAyLjAgZGlhZ3JhbSBmaWxlJyArIG1hdGNoWzJdO1xuICB9XG5cbiAgcmV0dXJuIGVycjtcbn1cblxudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgd2lkdGg6ICcxMDAlJyxcbiAgaGVpZ2h0OiAnMTAwJScsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnXG59O1xuXG5cbi8qKlxuICogRW5zdXJlIHRoZSBwYXNzZWQgYXJndW1lbnQgaXMgYSBwcm9wZXIgdW5pdCAoZGVmYXVsdGluZyB0byBweClcbiAqL1xuZnVuY3Rpb24gZW5zdXJlVW5pdCh2YWwpIHtcbiAgcmV0dXJuIHZhbCArIChpc051bWJlcih2YWwpID8gJ3B4JyA6ICcnKTtcbn1cblxuXG4vKipcbiAqIEZpbmQgQlBNTkRpYWdyYW0gaW4gZGVmaW5pdGlvbnMgYnkgSURcbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnQ8RGVmaW5pdGlvbnM+fSBkZWZpbml0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IGRpYWdyYW1JZFxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnQ8QlBNTkRpYWdyYW0+fG51bGx9XG4gKi9cbmZ1bmN0aW9uIGZpbmRCUE1ORGlhZ3JhbShkZWZpbml0aW9ucywgZGlhZ3JhbUlkKSB7XG4gIGlmICghZGlhZ3JhbUlkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZmluZChkZWZpbml0aW9ucy5kaWFncmFtcywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LmlkID09PSBkaWFncmFtSWQ7XG4gIH0pIHx8IG51bGw7XG59XG5cblxuLyogPHByb2plY3QtbG9nbz4gKi9cblxuaW1wb3J0IHtcbiAgb3BlbiBhcyBvcGVuUG93ZXJlZEJ5LFxuICBCUE1OSU9fSU1HLFxuICBMSU5LX1NUWUxFUyBhcyBCUE1OSU9fTElOS19TVFlMRVNcbn0gZnJvbSAnLi91dGlsL1Bvd2VyZWRCeVV0aWwnO1xuXG5pbXBvcnQge1xuICBldmVudCBhcyBkb21FdmVudFxufSBmcm9tICdtaW4tZG9tJztcblxuLyoqXG4gKiBBZGRzIHRoZSBwcm9qZWN0IGxvZ28gdG8gdGhlIGRpYWdyYW0gY29udGFpbmVyIGFzXG4gKiByZXF1aXJlZCBieSB0aGUgYnBtbi5pbyBsaWNlbnNlLlxuICpcbiAqIEBzZWUgaHR0cDovL2JwbW4uaW8vbGljZW5zZVxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGFpbmVyXG4gKi9cbmZ1bmN0aW9uIGFkZFByb2plY3RMb2dvKGNvbnRhaW5lcikge1xuICB2YXIgaW1nID0gQlBNTklPX0lNRztcblxuICB2YXIgbGlua01hcmt1cCA9XG4gICAgJzxhIGhyZWY9XCJodHRwOi8vYnBtbi5pb1wiICcgK1xuICAgICAgICd0YXJnZXQ9XCJfYmxhbmtcIiAnICtcbiAgICAgICAnY2xhc3M9XCJianMtcG93ZXJlZC1ieVwiICcgK1xuICAgICAgICd0aXRsZT1cIlBvd2VyZWQgYnkgYnBtbi5pb1wiICcgK1xuICAgICAgICdzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgYm90dG9tOiAxNXB4OyByaWdodDogMTVweDsgei1pbmRleDogMTAwOyAnICsgQlBNTklPX0xJTktfU1RZTEVTICsgJ1wiPicgK1xuICAgICAgaW1nICtcbiAgICAnPC9hPic7XG5cbiAgdmFyIGxpbmtFbGVtZW50ID0gZG9taWZ5KGxpbmtNYXJrdXApO1xuXG4gIGNvbnRhaW5lci5hcHBlbmRDaGlsZChsaW5rRWxlbWVudCk7XG5cbiAgZG9tRXZlbnQuYmluZChsaW5rRWxlbWVudCwgJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBvcGVuUG93ZXJlZEJ5KCk7XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9KTtcbn1cblxuLyogPC9wcm9qZWN0LWxvZ28+ICovXG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQmFzZU1vZGVsZXIgZnJvbSAnLi9CYXNlTW9kZWxlcic7XG5cbmltcG9ydCBWaWV3ZXIgZnJvbSAnLi9WaWV3ZXInO1xuaW1wb3J0IE5hdmlnYXRlZFZpZXdlciBmcm9tICcuL05hdmlnYXRlZFZpZXdlcic7XG5cbmltcG9ydCBLZXlib2FyZE1vdmVNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi9rZXlib2FyZC1tb3ZlJztcbmltcG9ydCBNb3ZlQ2FudmFzTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL25hdmlnYXRpb24vbW92ZWNhbnZhcyc7XG5pbXBvcnQgVG91Y2hNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi90b3VjaCc7XG5pbXBvcnQgWm9vbVNjcm9sbE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL3pvb21zY3JvbGwnO1xuXG5pbXBvcnQgQWxpZ25FbGVtZW50c01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hbGlnbi1lbGVtZW50cyc7XG5pbXBvcnQgQXV0b1BsYWNlTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvYXV0by1wbGFjZSc7XG5pbXBvcnQgQXV0b1Jlc2l6ZU1vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL2F1dG8tcmVzaXplJztcbmltcG9ydCBBdXRvU2Nyb2xsTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tc2Nyb2xsJztcbmltcG9ydCBCZW5kcG9pbnRzTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2JlbmRwb2ludHMnO1xuaW1wb3J0IENvbm5lY3RNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY29ubmVjdCc7XG5pbXBvcnQgQ29ubmVjdGlvblByZXZpZXdNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY29ubmVjdGlvbi1wcmV2aWV3JztcbmltcG9ydCBDb250ZXh0UGFkTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvY29udGV4dC1wYWQnO1xuaW1wb3J0IENvcHlQYXN0ZU1vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL2NvcHktcGFzdGUnO1xuaW1wb3J0IENyZWF0ZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jcmVhdGUnO1xuaW1wb3J0IERpc3RyaWJ1dGVFbGVtZW50c01vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL2Rpc3RyaWJ1dGUtZWxlbWVudHMnO1xuaW1wb3J0IEVkaXRvckFjdGlvbnNNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucyc7XG5pbXBvcnQgR3JpZFNuYXBwaW5nTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvZ3JpZC1zbmFwcGluZyc7XG5pbXBvcnQgSW50ZXJhY3Rpb25FdmVudHNNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9pbnRlcmFjdGlvbi1ldmVudHMnO1xuaW1wb3J0IEtleWJvYXJkTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMva2V5Ym9hcmQnO1xuaW1wb3J0IEtleWJvYXJkTW92ZVNlbGVjdGlvbk1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9rZXlib2FyZC1tb3ZlLXNlbGVjdGlvbic7XG5pbXBvcnQgTGFiZWxFZGl0aW5nTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvbGFiZWwtZWRpdGluZyc7XG5pbXBvcnQgTW9kZWxpbmdNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9tb2RlbGluZyc7XG5pbXBvcnQgTW92ZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb3ZlJztcbmltcG9ydCBQYWxldHRlTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvcGFsZXR0ZSc7XG5pbXBvcnQgUmVwbGFjZVByZXZpZXdNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9yZXBsYWNlLXByZXZpZXcnO1xuaW1wb3J0IFJlc2l6ZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUnO1xuaW1wb3J0IFNuYXBwaW5nTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvc25hcHBpbmcnO1xuaW1wb3J0IFNlYXJjaE1vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL3NlYXJjaCc7XG5cbmltcG9ydCB7XG4gIHdyYXBGb3JDb21wYXRpYmlsaXR5XG59IGZyb20gJy4vdXRpbC9Db21wYXRpYmlsaXR5VXRpbCc7XG5cbnZhciBpbml0aWFsRGlhZ3JhbSA9XG4gICc8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz4nICtcbiAgJzxicG1uOmRlZmluaXRpb25zIHhtbG5zOnhzaT1cImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlXCIgJyArXG4gICAgICAgICAgICAgICAgICAgICd4bWxuczpicG1uPVwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvQlBNTi8yMDEwMDUyNC9NT0RFTFwiICcgK1xuICAgICAgICAgICAgICAgICAgICAneG1sbnM6YnBtbmRpPVwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvQlBNTi8yMDEwMDUyNC9ESVwiICcgK1xuICAgICAgICAgICAgICAgICAgICAneG1sbnM6ZGM9XCJodHRwOi8vd3d3Lm9tZy5vcmcvc3BlYy9ERC8yMDEwMDUyNC9EQ1wiICcgK1xuICAgICAgICAgICAgICAgICAgICAndGFyZ2V0TmFtZXNwYWNlPVwiaHR0cDovL2JwbW4uaW8vc2NoZW1hL2JwbW5cIiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2lkPVwiRGVmaW5pdGlvbnNfMVwiPicgK1xuICAgICc8YnBtbjpwcm9jZXNzIGlkPVwiUHJvY2Vzc18xXCIgaXNFeGVjdXRhYmxlPVwiZmFsc2VcIj4nICtcbiAgICAgICc8YnBtbjpzdGFydEV2ZW50IGlkPVwiU3RhcnRFdmVudF8xXCIvPicgK1xuICAgICc8L2JwbW46cHJvY2Vzcz4nICtcbiAgICAnPGJwbW5kaTpCUE1ORGlhZ3JhbSBpZD1cIkJQTU5EaWFncmFtXzFcIj4nICtcbiAgICAgICc8YnBtbmRpOkJQTU5QbGFuZSBpZD1cIkJQTU5QbGFuZV8xXCIgYnBtbkVsZW1lbnQ9XCJQcm9jZXNzXzFcIj4nICtcbiAgICAgICAgJzxicG1uZGk6QlBNTlNoYXBlIGlkPVwiX0JQTU5TaGFwZV9TdGFydEV2ZW50XzJcIiBicG1uRWxlbWVudD1cIlN0YXJ0RXZlbnRfMVwiPicgK1xuICAgICAgICAgICc8ZGM6Qm91bmRzIGhlaWdodD1cIjM2LjBcIiB3aWR0aD1cIjM2LjBcIiB4PVwiMTczLjBcIiB5PVwiMTAyLjBcIi8+JyArXG4gICAgICAgICc8L2JwbW5kaTpCUE1OU2hhcGU+JyArXG4gICAgICAnPC9icG1uZGk6QlBNTlBsYW5lPicgK1xuICAgICc8L2JwbW5kaTpCUE1ORGlhZ3JhbT4nICtcbiAgJzwvYnBtbjpkZWZpbml0aW9ucz4nO1xuXG5cbi8qKlxuICogQSBtb2RlbGVyIGZvciBCUE1OIDIuMCBkaWFncmFtcy5cbiAqXG4gKlxuICogIyMgRXh0ZW5kaW5nIHRoZSBNb2RlbGVyXG4gKlxuICogSW4gb3JkZXIgdG8gZXh0ZW5kIHRoZSB2aWV3ZXIgcGFzcyBleHRlbnNpb24gbW9kdWxlcyB0byBib290c3RyYXAgdmlhIHRoZVxuICogYGFkZGl0aW9uYWxNb2R1bGVzYCBvcHRpb24uIEFuIGV4dGVuc2lvbiBtb2R1bGUgaXMgYW4gb2JqZWN0IHRoYXQgZXhwb3Nlc1xuICogbmFtZWQgc2VydmljZXMuXG4gKlxuICogVGhlIGZvbGxvd2luZyBleGFtcGxlIGRlcGljdHMgdGhlIGludGVncmF0aW9uIG9mIGEgc2ltcGxlXG4gKiBsb2dnaW5nIGNvbXBvbmVudCB0aGF0IGludGVncmF0ZXMgd2l0aCBpbnRlcmFjdGlvbiBldmVudHM6XG4gKlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqXG4gKiAvLyBsb2dnaW5nIGNvbXBvbmVudFxuICogZnVuY3Rpb24gSW50ZXJhY3Rpb25Mb2dnZXIoZXZlbnRCdXMpIHtcbiAqICAgZXZlbnRCdXMub24oJ2VsZW1lbnQuaG92ZXInLCBmdW5jdGlvbihldmVudCkge1xuICogICAgIGNvbnNvbGUubG9nKClcbiAqICAgfSlcbiAqIH1cbiAqXG4gKiBJbnRlcmFjdGlvbkxvZ2dlci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07IC8vIG1pbmlmaWNhdGlvbiBzYXZlXG4gKlxuICogLy8gZXh0ZW5zaW9uIG1vZHVsZVxuICogdmFyIGV4dGVuc2lvbk1vZHVsZSA9IHtcbiAqICAgX19pbml0X186IFsgJ2ludGVyYWN0aW9uTG9nZ2VyJyBdLFxuICogICBpbnRlcmFjdGlvbkxvZ2dlcjogWyAndHlwZScsIEludGVyYWN0aW9uTG9nZ2VyIF1cbiAqIH07XG4gKlxuICogLy8gZXh0ZW5kIHRoZSB2aWV3ZXJcbiAqIHZhciBicG1uTW9kZWxlciA9IG5ldyBNb2RlbGVyKHsgYWRkaXRpb25hbE1vZHVsZXM6IFsgZXh0ZW5zaW9uTW9kdWxlIF0gfSk7XG4gKiBicG1uTW9kZWxlci5pbXBvcnRYTUwoLi4uKTtcbiAqIGBgYFxuICpcbiAqXG4gKiAjIyBDdXN0b21pemluZyAvIFJlcGxhY2luZyBDb21wb25lbnRzXG4gKlxuICogWW91IGNhbiByZXBsYWNlIGluZGl2aWR1YWwgZGlhZ3JhbSBjb21wb25lbnRzIGJ5IHJlZGVmaW5pbmcgdGhlbSBpbiBvdmVycmlkZSBtb2R1bGVzLlxuICogVGhpcyB3b3JrcyBmb3IgYWxsIGNvbXBvbmVudHMsIGluY2x1ZGluZyB0aG9zZSBkZWZpbmVkIGluIHRoZSBjb3JlLlxuICpcbiAqIFBhc3MgaW4gb3ZlcnJpZGUgbW9kdWxlcyB2aWEgdGhlIGBvcHRpb25zLmFkZGl0aW9uYWxNb2R1bGVzYCBmbGFnIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBmdW5jdGlvbiBDdXN0b21Db250ZXh0UGFkUHJvdmlkZXIoY29udGV4dFBhZCkge1xuICpcbiAqICAgY29udGV4dFBhZC5yZWdpc3RlclByb3ZpZGVyKHRoaXMpO1xuICpcbiAqICAgdGhpcy5nZXRDb250ZXh0UGFkRW50cmllcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAqICAgICAvLyBubyBlbnRyaWVzLCBlZmZlY3RpdmVseSBkaXNhYmxlIHRoZSBjb250ZXh0IHBhZFxuICogICAgIHJldHVybiB7fTtcbiAqICAgfTtcbiAqIH1cbiAqXG4gKiBDdXN0b21Db250ZXh0UGFkUHJvdmlkZXIuJGluamVjdCA9IFsgJ2NvbnRleHRQYWQnIF07XG4gKlxuICogdmFyIG92ZXJyaWRlTW9kdWxlID0ge1xuICogICBjb250ZXh0UGFkUHJvdmlkZXI6IFsgJ3R5cGUnLCBDdXN0b21Db250ZXh0UGFkUHJvdmlkZXIgXVxuICogfTtcbiAqXG4gKiB2YXIgYnBtbk1vZGVsZXIgPSBuZXcgTW9kZWxlcih7IGFkZGl0aW9uYWxNb2R1bGVzOiBbIG92ZXJyaWRlTW9kdWxlIF19KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIHZpZXdlclxuICogQHBhcmFtIHtET01FbGVtZW50fSBbb3B0aW9ucy5jb250YWluZXJdIHRoZSBjb250YWluZXIgdG8gcmVuZGVyIHRoZSB2aWV3ZXIgaW4sIGRlZmF1bHRzIHRvIGJvZHkuXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLndpZHRoXSB0aGUgd2lkdGggb2YgdGhlIHZpZXdlclxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5oZWlnaHRdIHRoZSBoZWlnaHQgb2YgdGhlIHZpZXdlclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLm1vZGRsZUV4dGVuc2lvbnNdIGV4dGVuc2lvbiBwYWNrYWdlcyB0byBwcm92aWRlXG4gKiBAcGFyYW0ge0FycmF5PGRpZGkuTW9kdWxlPn0gW29wdGlvbnMubW9kdWxlc10gYSBsaXN0IG9mIG1vZHVsZXMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbW9kdWxlc1xuICogQHBhcmFtIHtBcnJheTxkaWRpLk1vZHVsZT59IFtvcHRpb25zLmFkZGl0aW9uYWxNb2R1bGVzXSBhIGxpc3Qgb2YgbW9kdWxlcyB0byB1c2Ugd2l0aCB0aGUgZGVmYXVsdCBtb2R1bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vZGVsZXIob3B0aW9ucykge1xuICBCYXNlTW9kZWxlci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5pbmhlcml0cyhNb2RlbGVyLCBCYXNlTW9kZWxlcik7XG5cblxuTW9kZWxlci5WaWV3ZXIgPSBWaWV3ZXI7XG5Nb2RlbGVyLk5hdmlnYXRlZFZpZXdlciA9IE5hdmlnYXRlZFZpZXdlcjtcblxuLyoqXG4qIFRoZSBjcmVhdGVEaWFncmFtIHJlc3VsdC5cbipcbiogQHR5cGVkZWYge09iamVjdH0gQ3JlYXRlRGlhZ3JhbVJlc3VsdFxuKlxuKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IHdhcm5pbmdzXG4qL1xuXG4vKipcbiogVGhlIGNyZWF0ZURpYWdyYW0gZXJyb3IuXG4qXG4qIEB0eXBlZGVmIHtFcnJvcn0gQ3JlYXRlRGlhZ3JhbUVycm9yXG4qXG4qIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gd2FybmluZ3NcbiovXG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGRpYWdyYW0gdG8gc3RhcnQgbW9kZWxpbmcuXG4gKlxuICogUmV0dXJucyB7UHJvbWlzZTxDcmVhdGVEaWFncmFtUmVzdWx0LCBDcmVhdGVEaWFncmFtRXJyb3I+fVxuICovXG5Nb2RlbGVyLnByb3RvdHlwZS5jcmVhdGVEaWFncmFtID0gd3JhcEZvckNvbXBhdGliaWxpdHkoZnVuY3Rpb24gY3JlYXRlRGlhZ3JhbSgpIHtcbiAgcmV0dXJuIHRoaXMuaW1wb3J0WE1MKGluaXRpYWxEaWFncmFtKTtcbn0pO1xuXG5cbk1vZGVsZXIucHJvdG90eXBlLl9pbnRlcmFjdGlvbk1vZHVsZXMgPSBbXG5cbiAgLy8gbm9uLW1vZGVsaW5nIGNvbXBvbmVudHNcbiAgS2V5Ym9hcmRNb3ZlTW9kdWxlLFxuICBNb3ZlQ2FudmFzTW9kdWxlLFxuICBUb3VjaE1vZHVsZSxcbiAgWm9vbVNjcm9sbE1vZHVsZVxuXTtcblxuTW9kZWxlci5wcm90b3R5cGUuX21vZGVsaW5nTW9kdWxlcyA9IFtcblxuICAvLyBtb2RlbGluZyBjb21wb25lbnRzXG4gIEFsaWduRWxlbWVudHNNb2R1bGUsXG4gIEF1dG9QbGFjZU1vZHVsZSxcbiAgQXV0b1Njcm9sbE1vZHVsZSxcbiAgQXV0b1Jlc2l6ZU1vZHVsZSxcbiAgQmVuZHBvaW50c01vZHVsZSxcbiAgQ29ubmVjdE1vZHVsZSxcbiAgQ29ubmVjdGlvblByZXZpZXdNb2R1bGUsXG4gIENvbnRleHRQYWRNb2R1bGUsXG4gIENvcHlQYXN0ZU1vZHVsZSxcbiAgQ3JlYXRlTW9kdWxlLFxuICBEaXN0cmlidXRlRWxlbWVudHNNb2R1bGUsXG4gIEVkaXRvckFjdGlvbnNNb2R1bGUsXG4gIEdyaWRTbmFwcGluZ01vZHVsZSxcbiAgSW50ZXJhY3Rpb25FdmVudHNNb2R1bGUsXG4gIEtleWJvYXJkTW9kdWxlLFxuICBLZXlib2FyZE1vdmVTZWxlY3Rpb25Nb2R1bGUsXG4gIExhYmVsRWRpdGluZ01vZHVsZSxcbiAgTW9kZWxpbmdNb2R1bGUsXG4gIE1vdmVNb2R1bGUsXG4gIFBhbGV0dGVNb2R1bGUsXG4gIFJlcGxhY2VQcmV2aWV3TW9kdWxlLFxuICBSZXNpemVNb2R1bGUsXG4gIFNuYXBwaW5nTW9kdWxlLFxuICBTZWFyY2hNb2R1bGVcbl07XG5cblxuLy8gbW9kdWxlcyB0aGUgbW9kZWxlciBpcyBjb21wb3NlZCBvZlxuLy9cbi8vIC0gdmlld2VyIG1vZHVsZXNcbi8vIC0gaW50ZXJhY3Rpb24gbW9kdWxlc1xuLy8gLSBtb2RlbGluZyBtb2R1bGVzXG5cbk1vZGVsZXIucHJvdG90eXBlLl9tb2R1bGVzID0gW10uY29uY2F0KFxuICBWaWV3ZXIucHJvdG90eXBlLl9tb2R1bGVzLFxuICBNb2RlbGVyLnByb3RvdHlwZS5faW50ZXJhY3Rpb25Nb2R1bGVzLFxuICBNb2RlbGVyLnByb3RvdHlwZS5fbW9kZWxpbmdNb2R1bGVzXG4pO1xuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IFZpZXdlciBmcm9tICcuL1ZpZXdlcic7XG5cbmltcG9ydCBLZXlib2FyZE1vdmVNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi9rZXlib2FyZC1tb3ZlJztcbmltcG9ydCBNb3ZlQ2FudmFzTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL25hdmlnYXRpb24vbW92ZWNhbnZhcyc7XG5pbXBvcnQgWm9vbVNjcm9sbE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL3pvb21zY3JvbGwnO1xuXG5cbi8qKlxuICogQSB2aWV3ZXIgdGhhdCBpbmNsdWRlcyBtb3VzZSBuYXZpZ2F0aW9uIGZhY2lsaXRpZXNcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBOYXZpZ2F0ZWRWaWV3ZXIob3B0aW9ucykge1xuICBWaWV3ZXIuY2FsbCh0aGlzLCBvcHRpb25zKTtcbn1cblxuaW5oZXJpdHMoTmF2aWdhdGVkVmlld2VyLCBWaWV3ZXIpO1xuXG5cbk5hdmlnYXRlZFZpZXdlci5wcm90b3R5cGUuX25hdmlnYXRpb25Nb2R1bGVzID0gW1xuICBLZXlib2FyZE1vdmVNb2R1bGUsXG4gIE1vdmVDYW52YXNNb2R1bGUsXG4gIFpvb21TY3JvbGxNb2R1bGVcbl07XG5cbk5hdmlnYXRlZFZpZXdlci5wcm90b3R5cGUuX21vZHVsZXMgPSBbXS5jb25jYXQoXG4gIFZpZXdlci5wcm90b3R5cGUuX21vZHVsZXMsXG4gIE5hdmlnYXRlZFZpZXdlci5wcm90b3R5cGUuX25hdmlnYXRpb25Nb2R1bGVzXG4pOyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb3JlTW9kdWxlIGZyb20gJy4vY29yZSc7XG5pbXBvcnQgVHJhbnNsYXRlTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2kxOG4vdHJhbnNsYXRlJztcbmltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uJztcbmltcG9ydCBPdmVybGF5c01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9vdmVybGF5cyc7XG5cbmltcG9ydCBCYXNlVmlld2VyIGZyb20gJy4vQmFzZVZpZXdlcic7XG5cblxuLyoqXG4gKiBBIHZpZXdlciBmb3IgQlBNTiAyLjAgZGlhZ3JhbXMuXG4gKlxuICogSGF2ZSBhIGxvb2sgYXQge0BsaW5rIE5hdmlnYXRlZFZpZXdlcn0gb3Ige0BsaW5rIE1vZGVsZXJ9IGZvciBidW5kbGVzIHRoYXQgaW5jbHVkZVxuICogYWRkaXRpb25hbCBmZWF0dXJlcy5cbiAqXG4gKlxuICogIyMgRXh0ZW5kaW5nIHRoZSBWaWV3ZXJcbiAqXG4gKiBJbiBvcmRlciB0byBleHRlbmQgdGhlIHZpZXdlciBwYXNzIGV4dGVuc2lvbiBtb2R1bGVzIHRvIGJvb3RzdHJhcCB2aWEgdGhlXG4gKiBgYWRkaXRpb25hbE1vZHVsZXNgIG9wdGlvbi4gQW4gZXh0ZW5zaW9uIG1vZHVsZSBpcyBhbiBvYmplY3QgdGhhdCBleHBvc2VzXG4gKiBuYW1lZCBzZXJ2aWNlcy5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZGVwaWN0cyB0aGUgaW50ZWdyYXRpb24gb2YgYSBzaW1wbGVcbiAqIGxvZ2dpbmcgY29tcG9uZW50IHRoYXQgaW50ZWdyYXRlcyB3aXRoIGludGVyYWN0aW9uIGV2ZW50czpcbiAqXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICpcbiAqIC8vIGxvZ2dpbmcgY29tcG9uZW50XG4gKiBmdW5jdGlvbiBJbnRlcmFjdGlvbkxvZ2dlcihldmVudEJ1cykge1xuICogICBldmVudEJ1cy5vbignZWxlbWVudC5ob3ZlcicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gKiAgICAgY29uc29sZS5sb2coKVxuICogICB9KVxuICogfVxuICpcbiAqIEludGVyYWN0aW9uTG9nZ2VyLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTsgLy8gbWluaWZpY2F0aW9uIHNhdmVcbiAqXG4gKiAvLyBleHRlbnNpb24gbW9kdWxlXG4gKiB2YXIgZXh0ZW5zaW9uTW9kdWxlID0ge1xuICogICBfX2luaXRfXzogWyAnaW50ZXJhY3Rpb25Mb2dnZXInIF0sXG4gKiAgIGludGVyYWN0aW9uTG9nZ2VyOiBbICd0eXBlJywgSW50ZXJhY3Rpb25Mb2dnZXIgXVxuICogfTtcbiAqXG4gKiAvLyBleHRlbmQgdGhlIHZpZXdlclxuICogdmFyIGJwbW5WaWV3ZXIgPSBuZXcgVmlld2VyKHsgYWRkaXRpb25hbE1vZHVsZXM6IFsgZXh0ZW5zaW9uTW9kdWxlIF0gfSk7XG4gKiBicG1uVmlld2VyLmltcG9ydFhNTCguLi4pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgdmlld2VyXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IFtvcHRpb25zLmNvbnRhaW5lcl0gdGhlIGNvbnRhaW5lciB0byByZW5kZXIgdGhlIHZpZXdlciBpbiwgZGVmYXVsdHMgdG8gYm9keS5cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMud2lkdGhdIHRoZSB3aWR0aCBvZiB0aGUgdmlld2VyXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmhlaWdodF0gdGhlIGhlaWdodCBvZiB0aGUgdmlld2VyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMubW9kZGxlRXh0ZW5zaW9uc10gZXh0ZW5zaW9uIHBhY2thZ2VzIHRvIHByb3ZpZGVcbiAqIEBwYXJhbSB7QXJyYXk8ZGlkaS5Nb2R1bGU+fSBbb3B0aW9ucy5tb2R1bGVzXSBhIGxpc3Qgb2YgbW9kdWxlcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBtb2R1bGVzXG4gKiBAcGFyYW0ge0FycmF5PGRpZGkuTW9kdWxlPn0gW29wdGlvbnMuYWRkaXRpb25hbE1vZHVsZXNdIGEgbGlzdCBvZiBtb2R1bGVzIHRvIHVzZSB3aXRoIHRoZSBkZWZhdWx0IG1vZHVsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVmlld2VyKG9wdGlvbnMpIHtcbiAgQmFzZVZpZXdlci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5pbmhlcml0cyhWaWV3ZXIsIEJhc2VWaWV3ZXIpO1xuXG4vLyBtb2R1bGVzIHRoZSB2aWV3ZXIgaXMgY29tcG9zZWQgb2ZcblZpZXdlci5wcm90b3R5cGUuX21vZHVsZXMgPSBbXG4gIENvcmVNb2R1bGUsXG4gIFRyYW5zbGF0ZU1vZHVsZSxcbiAgU2VsZWN0aW9uTW9kdWxlLFxuICBPdmVybGF5c01vZHVsZVxuXTtcblxuLy8gZGVmYXVsdCBtb2RkbGUgZXh0ZW5zaW9ucyB0aGUgdmlld2VyIGlzIGNvbXBvc2VkIG9mXG5WaWV3ZXIucHJvdG90eXBlLl9tb2RkbGVFeHRlbnNpb25zID0ge307IiwiaW1wb3J0IERyYXdNb2R1bGUgZnJvbSAnLi4vZHJhdyc7XG5pbXBvcnQgSW1wb3J0TW9kdWxlIGZyb20gJy4uL2ltcG9ydCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBEcmF3TW9kdWxlLFxuICAgIEltcG9ydE1vZHVsZVxuICBdXG59OyIsImltcG9ydCB7XG4gIGV2ZXJ5LFxuICBzb21lXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgY29tcG9uZW50c1RvUGF0aFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL1JlbmRlclV0aWwnO1xuXG5cbi8vIGVsZW1lbnQgdXRpbHMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIENoZWNrcyBpZiBldmVudERlZmluaXRpb24gb2YgdGhlIGdpdmVuIGVsZW1lbnQgbWF0Y2hlcyB3aXRoIHNlbWFudGljIHR5cGUuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBlbGVtZW50IGlzIG9mIHRoZSBnaXZlbiBzZW1hbnRpYyB0eXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1R5cGVkRXZlbnQoZXZlbnQsIGV2ZW50RGVmaW5pdGlvblR5cGUsIGZpbHRlcikge1xuXG4gIGZ1bmN0aW9uIG1hdGNoZXMoZGVmaW5pdGlvbiwgZmlsdGVyKSB7XG4gICAgcmV0dXJuIGV2ZXJ5KGZpbHRlciwgZnVuY3Rpb24odmFsLCBrZXkpIHtcblxuICAgICAgLy8gd2Ugd2FudCBhID09IGNvbnZlcnNpb24gaGVyZSwgdG8gYmUgYWJsZSB0byBjYXRjaFxuICAgICAgLy8gdW5kZWZpbmVkID09IGZhbHNlIGFuZCBmcmllbmRzXG4gICAgICAvKiBqc2hpbnQgLVcxMTYgKi9cbiAgICAgIHJldHVybiBkZWZpbml0aW9uW2tleV0gPT0gdmFsO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHNvbWUoZXZlbnQuZXZlbnREZWZpbml0aW9ucywgZnVuY3Rpb24oZGVmaW5pdGlvbikge1xuICAgIHJldHVybiBkZWZpbml0aW9uLiR0eXBlID09PSBldmVudERlZmluaXRpb25UeXBlICYmIG1hdGNoZXMoZXZlbnQsIGZpbHRlcik7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUaHJvd0V2ZW50KGV2ZW50KSB7XG4gIHJldHVybiAoZXZlbnQuJHR5cGUgPT09ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnKSB8fCAoZXZlbnQuJHR5cGUgPT09ICdicG1uOkVuZEV2ZW50Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbGxlY3Rpb24oZWxlbWVudCkge1xuICB2YXIgZGF0YU9iamVjdCA9IGVsZW1lbnQuZGF0YU9iamVjdFJlZjtcblxuICByZXR1cm4gZWxlbWVudC5pc0NvbGxlY3Rpb24gfHwgKGRhdGFPYmplY3QgJiYgZGF0YU9iamVjdC5pc0NvbGxlY3Rpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGkoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5idXNpbmVzc09iamVjdC5kaTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbWFudGljKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQuYnVzaW5lc3NPYmplY3Q7XG59XG5cblxuLy8gY29sb3IgYWNjZXNzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0Q29sb3IpIHtcbiAgcmV0dXJuIGdldERpKGVsZW1lbnQpLmdldCgnYmlvYzpmaWxsJykgfHwgZGVmYXVsdENvbG9yIHx8ICd3aGl0ZSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0Q29sb3IpIHtcbiAgcmV0dXJuIGdldERpKGVsZW1lbnQpLmdldCgnYmlvYzpzdHJva2UnKSB8fCBkZWZhdWx0Q29sb3IgfHwgJ2JsYWNrJztcbn1cblxuXG4vLyBjcm9wcGluZyBwYXRoIGN1c3RvbWl6YXRpb25zIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENpcmNsZVBhdGgoc2hhcGUpIHtcblxuICB2YXIgY3ggPSBzaGFwZS54ICsgc2hhcGUud2lkdGggLyAyLFxuICAgICAgY3kgPSBzaGFwZS55ICsgc2hhcGUuaGVpZ2h0IC8gMixcbiAgICAgIHJhZGl1cyA9IHNoYXBlLndpZHRoIC8gMjtcblxuICB2YXIgY2lyY2xlUGF0aCA9IFtcbiAgICBbJ00nLCBjeCwgY3ldLFxuICAgIFsnbScsIDAsIC1yYWRpdXNdLFxuICAgIFsnYScsIHJhZGl1cywgcmFkaXVzLCAwLCAxLCAxLCAwLCAyICogcmFkaXVzXSxcbiAgICBbJ2EnLCByYWRpdXMsIHJhZGl1cywgMCwgMSwgMSwgMCwgLTIgKiByYWRpdXNdLFxuICAgIFsneiddXG4gIF07XG5cbiAgcmV0dXJuIGNvbXBvbmVudHNUb1BhdGgoY2lyY2xlUGF0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3VuZFJlY3RQYXRoKHNoYXBlLCBib3JkZXJSYWRpdXMpIHtcblxuICB2YXIgeCA9IHNoYXBlLngsXG4gICAgICB5ID0gc2hhcGUueSxcbiAgICAgIHdpZHRoID0gc2hhcGUud2lkdGgsXG4gICAgICBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG5cbiAgdmFyIHJvdW5kUmVjdFBhdGggPSBbXG4gICAgWydNJywgeCArIGJvcmRlclJhZGl1cywgeV0sXG4gICAgWydsJywgd2lkdGggLSBib3JkZXJSYWRpdXMgKiAyLCAwXSxcbiAgICBbJ2EnLCBib3JkZXJSYWRpdXMsIGJvcmRlclJhZGl1cywgMCwgMCwgMSwgYm9yZGVyUmFkaXVzLCBib3JkZXJSYWRpdXNdLFxuICAgIFsnbCcsIDAsIGhlaWdodCAtIGJvcmRlclJhZGl1cyAqIDJdLFxuICAgIFsnYScsIGJvcmRlclJhZGl1cywgYm9yZGVyUmFkaXVzLCAwLCAwLCAxLCAtYm9yZGVyUmFkaXVzLCBib3JkZXJSYWRpdXNdLFxuICAgIFsnbCcsIGJvcmRlclJhZGl1cyAqIDIgLSB3aWR0aCwgMF0sXG4gICAgWydhJywgYm9yZGVyUmFkaXVzLCBib3JkZXJSYWRpdXMsIDAsIDAsIDEsIC1ib3JkZXJSYWRpdXMsIC1ib3JkZXJSYWRpdXNdLFxuICAgIFsnbCcsIDAsIGJvcmRlclJhZGl1cyAqIDIgLSBoZWlnaHRdLFxuICAgIFsnYScsIGJvcmRlclJhZGl1cywgYm9yZGVyUmFkaXVzLCAwLCAwLCAxLCBib3JkZXJSYWRpdXMsIC1ib3JkZXJSYWRpdXNdLFxuICAgIFsneiddXG4gIF07XG5cbiAgcmV0dXJuIGNvbXBvbmVudHNUb1BhdGgocm91bmRSZWN0UGF0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaWFtb25kUGF0aChzaGFwZSkge1xuXG4gIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0LFxuICAgICAgeCA9IHNoYXBlLngsXG4gICAgICB5ID0gc2hhcGUueSxcbiAgICAgIGhhbGZXaWR0aCA9IHdpZHRoIC8gMixcbiAgICAgIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuXG4gIHZhciBkaWFtb25kUGF0aCA9IFtcbiAgICBbJ00nLCB4ICsgaGFsZldpZHRoLCB5XSxcbiAgICBbJ2wnLCBoYWxmV2lkdGgsIGhhbGZIZWlnaHRdLFxuICAgIFsnbCcsIC1oYWxmV2lkdGgsIGhhbGZIZWlnaHRdLFxuICAgIFsnbCcsIC1oYWxmV2lkdGgsIC1oYWxmSGVpZ2h0XSxcbiAgICBbJ3onXVxuICBdO1xuXG4gIHJldHVybiBjb21wb25lbnRzVG9QYXRoKGRpYW1vbmRQYXRoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlY3RQYXRoKHNoYXBlKSB7XG4gIHZhciB4ID0gc2hhcGUueCxcbiAgICAgIHkgPSBzaGFwZS55LFxuICAgICAgd2lkdGggPSBzaGFwZS53aWR0aCxcbiAgICAgIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcblxuICB2YXIgcmVjdFBhdGggPSBbXG4gICAgWydNJywgeCwgeV0sXG4gICAgWydsJywgd2lkdGgsIDBdLFxuICAgIFsnbCcsIDAsIGhlaWdodF0sXG4gICAgWydsJywgLXdpZHRoLCAwXSxcbiAgICBbJ3onXVxuICBdO1xuXG4gIHJldHVybiBjb21wb25lbnRzVG9QYXRoKHJlY3RQYXRoKTtcbn0iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgYXNzaWduLFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IEJhc2VSZW5kZXJlciBmcm9tICdkaWFncmFtLWpzL2xpYi9kcmF3L0Jhc2VSZW5kZXJlcic7XG5cbmltcG9ydCB7XG4gIGlzRXhwYW5kZWQsXG4gIGlzRXZlbnRTdWJQcm9jZXNzXG59IGZyb20gJy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0TGFiZWxcbn0gZnJvbSAnLi4vZmVhdHVyZXMvbGFiZWwtZWRpdGluZy9MYWJlbFV0aWwnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgY3JlYXRlTGluZVxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL1JlbmRlclV0aWwnO1xuXG5pbXBvcnQge1xuICBpc1R5cGVkRXZlbnQsXG4gIGlzVGhyb3dFdmVudCxcbiAgaXNDb2xsZWN0aW9uLFxuICBnZXREaSxcbiAgZ2V0U2VtYW50aWMsXG4gIGdldENpcmNsZVBhdGgsXG4gIGdldFJvdW5kUmVjdFBhdGgsXG4gIGdldERpYW1vbmRQYXRoLFxuICBnZXRSZWN0UGF0aCxcbiAgZ2V0RmlsbENvbG9yLFxuICBnZXRTdHJva2VDb2xvclxufSBmcm9tICcuL0JwbW5SZW5kZXJVdGlsJztcblxuaW1wb3J0IHtcbiAgcXVlcnkgYXMgZG9tUXVlcnlcbn0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZSxcbiAgY2xhc3NlcyBhcyBzdmdDbGFzc2VzXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgcm90YXRlLFxuICB0cmFuc2Zvcm0sXG4gIHRyYW5zbGF0ZVxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL1N2Z1RyYW5zZm9ybVV0aWwnO1xuXG5pbXBvcnQgSWRzIGZyb20gJ2lkcyc7XG5cbnZhciBSRU5ERVJFUl9JRFMgPSBuZXcgSWRzKCk7XG5cbnZhciBUQVNLX0JPUkRFUl9SQURJVVMgPSAxMDtcbnZhciBJTk5FUl9PVVRFUl9ESVNUID0gMztcblxudmFyIERFRkFVTFRfRklMTF9PUEFDSVRZID0gLjk1LFxuICAgIEhJR0hfRklMTF9PUEFDSVRZID0gLjM1O1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5SZW5kZXJlcihcbiAgICBjb25maWcsIGV2ZW50QnVzLCBzdHlsZXMsIHBhdGhNYXAsXG4gICAgY2FudmFzLCB0ZXh0UmVuZGVyZXIsIHByaW9yaXR5KSB7XG5cbiAgQmFzZVJlbmRlcmVyLmNhbGwodGhpcywgZXZlbnRCdXMsIHByaW9yaXR5KTtcblxuICB2YXIgZGVmYXVsdEZpbGxDb2xvciA9IGNvbmZpZyAmJiBjb25maWcuZGVmYXVsdEZpbGxDb2xvcixcbiAgICAgIGRlZmF1bHRTdHJva2VDb2xvciA9IGNvbmZpZyAmJiBjb25maWcuZGVmYXVsdFN0cm9rZUNvbG9yO1xuXG4gIHZhciByZW5kZXJlcklkID0gUkVOREVSRVJfSURTLm5leHQoKTtcblxuICB2YXIgbWFya2VycyA9IHt9O1xuXG4gIHZhciBjb21wdXRlU3R5bGUgPSBzdHlsZXMuY29tcHV0ZVN0eWxlO1xuXG4gIGZ1bmN0aW9uIGFkZE1hcmtlcihpZCwgb3B0aW9ucykge1xuICAgIHZhciBhdHRycyA9IGFzc2lnbih7XG4gICAgICBmaWxsOiAnYmxhY2snLFxuICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICBzdHJva2VMaW5lY2FwOiAncm91bmQnLFxuICAgICAgc3Ryb2tlRGFzaGFycmF5OiAnbm9uZSdcbiAgICB9LCBvcHRpb25zLmF0dHJzKTtcblxuICAgIHZhciByZWYgPSBvcHRpb25zLnJlZiB8fCB7IHg6IDAsIHk6IDAgfTtcblxuICAgIHZhciBzY2FsZSA9IG9wdGlvbnMuc2NhbGUgfHwgMTtcblxuICAgIC8vIGZpeCBmb3Igc2FmYXJpIC8gY2hyb21lIC8gZmlyZWZveCBidWcgbm90IGNvcnJlY3RseVxuICAgIC8vIHJlc2V0dGluZyBzdHJva2UgZGFzaCBhcnJheVxuICAgIGlmIChhdHRycy5zdHJva2VEYXNoYXJyYXkgPT09ICdub25lJykge1xuICAgICAgYXR0cnMuc3Ryb2tlRGFzaGFycmF5ID0gWzEwMDAwLCAxXTtcbiAgICB9XG5cbiAgICB2YXIgbWFya2VyID0gc3ZnQ3JlYXRlKCdtYXJrZXInKTtcblxuICAgIHN2Z0F0dHIob3B0aW9ucy5lbGVtZW50LCBhdHRycyk7XG5cbiAgICBzdmdBcHBlbmQobWFya2VyLCBvcHRpb25zLmVsZW1lbnQpO1xuXG4gICAgc3ZnQXR0cihtYXJrZXIsIHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIHZpZXdCb3g6ICcwIDAgMjAgMjAnLFxuICAgICAgcmVmWDogcmVmLngsXG4gICAgICByZWZZOiByZWYueSxcbiAgICAgIG1hcmtlcldpZHRoOiAyMCAqIHNjYWxlLFxuICAgICAgbWFya2VySGVpZ2h0OiAyMCAqIHNjYWxlLFxuICAgICAgb3JpZW50OiAnYXV0bydcbiAgICB9KTtcblxuICAgIHZhciBkZWZzID0gZG9tUXVlcnkoJ2RlZnMnLCBjYW52YXMuX3N2Zyk7XG5cbiAgICBpZiAoIWRlZnMpIHtcbiAgICAgIGRlZnMgPSBzdmdDcmVhdGUoJ2RlZnMnKTtcblxuICAgICAgc3ZnQXBwZW5kKGNhbnZhcy5fc3ZnLCBkZWZzKTtcbiAgICB9XG5cbiAgICBzdmdBcHBlbmQoZGVmcywgbWFya2VyKTtcblxuICAgIG1hcmtlcnNbaWRdID0gbWFya2VyO1xuICB9XG5cbiAgZnVuY3Rpb24gY29sb3JFc2NhcGUoc3RyKSB7XG5cbiAgICAvLyBvbmx5IGFsbG93IGNoYXJhY3RlcnMgYW5kIG51bWJlcnNcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1teMC05YS16QS16XSsvZywgJ18nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtlcih0eXBlLCBmaWxsLCBzdHJva2UpIHtcbiAgICB2YXIgaWQgPSB0eXBlICsgJy0nICsgY29sb3JFc2NhcGUoZmlsbCkgKyAnLScgKyBjb2xvckVzY2FwZShzdHJva2UpICsgJy0nICsgcmVuZGVyZXJJZDtcblxuICAgIGlmICghbWFya2Vyc1tpZF0pIHtcbiAgICAgIGNyZWF0ZU1hcmtlcihpZCwgdHlwZSwgZmlsbCwgc3Ryb2tlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJ3VybCgjJyArIGlkICsgJyknO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTWFya2VyKGlkLCB0eXBlLCBmaWxsLCBzdHJva2UpIHtcblxuICAgIGlmICh0eXBlID09PSAnc2VxdWVuY2VmbG93LWVuZCcpIHtcbiAgICAgIHZhciBzZXF1ZW5jZWZsb3dFbmQgPSBzdmdDcmVhdGUoJ3BhdGgnKTtcbiAgICAgIHN2Z0F0dHIoc2VxdWVuY2VmbG93RW5kLCB7IGQ6ICdNIDEgNSBMIDExIDEwIEwgMSAxNSBaJyB9KTtcblxuICAgICAgYWRkTWFya2VyKGlkLCB7XG4gICAgICAgIGVsZW1lbnQ6IHNlcXVlbmNlZmxvd0VuZCxcbiAgICAgICAgcmVmOiB7IHg6IDExLCB5OiAxMCB9LFxuICAgICAgICBzY2FsZTogMC41LFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGZpbGw6IHN0cm9rZSxcbiAgICAgICAgICBzdHJva2U6IHN0cm9rZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ21lc3NhZ2VmbG93LXN0YXJ0Jykge1xuICAgICAgdmFyIG1lc3NhZ2VmbG93U3RhcnQgPSBzdmdDcmVhdGUoJ2NpcmNsZScpO1xuICAgICAgc3ZnQXR0cihtZXNzYWdlZmxvd1N0YXJ0LCB7IGN4OiA2LCBjeTogNiwgcjogMy41IH0pO1xuXG4gICAgICBhZGRNYXJrZXIoaWQsIHtcbiAgICAgICAgZWxlbWVudDogbWVzc2FnZWZsb3dTdGFydCxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBmaWxsOiBmaWxsLFxuICAgICAgICAgIHN0cm9rZTogc3Ryb2tlXG4gICAgICAgIH0sXG4gICAgICAgIHJlZjogeyB4OiA2LCB5OiA2IH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnbWVzc2FnZWZsb3ctZW5kJykge1xuICAgICAgdmFyIG1lc3NhZ2VmbG93RW5kID0gc3ZnQ3JlYXRlKCdwYXRoJyk7XG4gICAgICBzdmdBdHRyKG1lc3NhZ2VmbG93RW5kLCB7IGQ6ICdtIDEgNSBsIDAgLTMgbCA3IDMgbCAtNyAzIHonIH0pO1xuXG4gICAgICBhZGRNYXJrZXIoaWQsIHtcbiAgICAgICAgZWxlbWVudDogbWVzc2FnZWZsb3dFbmQsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgZmlsbDogZmlsbCxcbiAgICAgICAgICBzdHJva2U6IHN0cm9rZSxcbiAgICAgICAgICBzdHJva2VMaW5lY2FwOiAnYnV0dCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiB7IHg6IDguNSwgeTogNSB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ2Fzc29jaWF0aW9uLXN0YXJ0Jykge1xuICAgICAgdmFyIGFzc29jaWF0aW9uU3RhcnQgPSBzdmdDcmVhdGUoJ3BhdGgnKTtcbiAgICAgIHN2Z0F0dHIoYXNzb2NpYXRpb25TdGFydCwgeyBkOiAnTSAxMSA1IEwgMSAxMCBMIDExIDE1JyB9KTtcblxuICAgICAgYWRkTWFya2VyKGlkLCB7XG4gICAgICAgIGVsZW1lbnQ6IGFzc29jaWF0aW9uU3RhcnQsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgZmlsbDogJ25vbmUnLFxuICAgICAgICAgIHN0cm9rZTogc3Ryb2tlLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLjVcbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiB7IHg6IDEsIHk6IDEwIH0sXG4gICAgICAgIHNjYWxlOiAwLjVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnYXNzb2NpYXRpb24tZW5kJykge1xuICAgICAgdmFyIGFzc29jaWF0aW9uRW5kID0gc3ZnQ3JlYXRlKCdwYXRoJyk7XG4gICAgICBzdmdBdHRyKGFzc29jaWF0aW9uRW5kLCB7IGQ6ICdNIDEgNSBMIDExIDEwIEwgMSAxNScgfSk7XG5cbiAgICAgIGFkZE1hcmtlcihpZCwge1xuICAgICAgICBlbGVtZW50OiBhc3NvY2lhdGlvbkVuZCxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBmaWxsOiAnbm9uZScsXG4gICAgICAgICAgc3Ryb2tlOiBzdHJva2UsXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDEuNVxuICAgICAgICB9LFxuICAgICAgICByZWY6IHsgeDogMTIsIHk6IDEwIH0sXG4gICAgICAgIHNjYWxlOiAwLjVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnY29uZGl0aW9uYWwtZmxvdy1tYXJrZXInKSB7XG4gICAgICB2YXIgY29uZGl0aW9uYWxmbG93TWFya2VyID0gc3ZnQ3JlYXRlKCdwYXRoJyk7XG4gICAgICBzdmdBdHRyKGNvbmRpdGlvbmFsZmxvd01hcmtlciwgeyBkOiAnTSAwIDEwIEwgOCA2IEwgMTYgMTAgTCA4IDE0IFonIH0pO1xuXG4gICAgICBhZGRNYXJrZXIoaWQsIHtcbiAgICAgICAgZWxlbWVudDogY29uZGl0aW9uYWxmbG93TWFya2VyLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGZpbGw6IGZpbGwsXG4gICAgICAgICAgc3Ryb2tlOiBzdHJva2VcbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiB7IHg6IC0xLCB5OiAxMCB9LFxuICAgICAgICBzY2FsZTogMC41XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ2NvbmRpdGlvbmFsLWRlZmF1bHQtZmxvdy1tYXJrZXInKSB7XG4gICAgICB2YXIgY29uZGl0aW9uYWxkZWZhdWx0Zmxvd01hcmtlciA9IHN2Z0NyZWF0ZSgncGF0aCcpO1xuICAgICAgc3ZnQXR0cihjb25kaXRpb25hbGRlZmF1bHRmbG93TWFya2VyLCB7IGQ6ICdNIDYgNCBMIDEwIDE2JyB9KTtcblxuICAgICAgYWRkTWFya2VyKGlkLCB7XG4gICAgICAgIGVsZW1lbnQ6IGNvbmRpdGlvbmFsZGVmYXVsdGZsb3dNYXJrZXIsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgc3Ryb2tlOiBzdHJva2VcbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiB7IHg6IDAsIHk6IDEwIH0sXG4gICAgICAgIHNjYWxlOiAwLjVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYXdDaXJjbGUocGFyZW50R2Z4LCB3aWR0aCwgaGVpZ2h0LCBvZmZzZXQsIGF0dHJzKSB7XG5cbiAgICBpZiAoaXNPYmplY3Qob2Zmc2V0KSkge1xuICAgICAgYXR0cnMgPSBvZmZzZXQ7XG4gICAgICBvZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgYXR0cnMgPSBjb21wdXRlU3R5bGUoYXR0cnMsIHtcbiAgICAgIHN0cm9rZTogJ2JsYWNrJyxcbiAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgZmlsbDogJ3doaXRlJ1xuICAgIH0pO1xuXG4gICAgaWYgKGF0dHJzLmZpbGwgPT09ICdub25lJykge1xuICAgICAgZGVsZXRlIGF0dHJzLmZpbGxPcGFjaXR5O1xuICAgIH1cblxuICAgIHZhciBjeCA9IHdpZHRoIC8gMixcbiAgICAgICAgY3kgPSBoZWlnaHQgLyAyO1xuXG4gICAgdmFyIGNpcmNsZSA9IHN2Z0NyZWF0ZSgnY2lyY2xlJyk7XG4gICAgc3ZnQXR0cihjaXJjbGUsIHtcbiAgICAgIGN4OiBjeCxcbiAgICAgIGN5OiBjeSxcbiAgICAgIHI6IE1hdGgucm91bmQoKHdpZHRoICsgaGVpZ2h0KSAvIDQgLSBvZmZzZXQpXG4gICAgfSk7XG4gICAgc3ZnQXR0cihjaXJjbGUsIGF0dHJzKTtcblxuICAgIHN2Z0FwcGVuZChwYXJlbnRHZngsIGNpcmNsZSk7XG5cbiAgICByZXR1cm4gY2lyY2xlO1xuICB9XG5cbiAgZnVuY3Rpb24gZHJhd1JlY3QocGFyZW50R2Z4LCB3aWR0aCwgaGVpZ2h0LCByLCBvZmZzZXQsIGF0dHJzKSB7XG5cbiAgICBpZiAoaXNPYmplY3Qob2Zmc2V0KSkge1xuICAgICAgYXR0cnMgPSBvZmZzZXQ7XG4gICAgICBvZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgYXR0cnMgPSBjb21wdXRlU3R5bGUoYXR0cnMsIHtcbiAgICAgIHN0cm9rZTogJ2JsYWNrJyxcbiAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgZmlsbDogJ3doaXRlJ1xuICAgIH0pO1xuXG4gICAgdmFyIHJlY3QgPSBzdmdDcmVhdGUoJ3JlY3QnKTtcbiAgICBzdmdBdHRyKHJlY3QsIHtcbiAgICAgIHg6IG9mZnNldCxcbiAgICAgIHk6IG9mZnNldCxcbiAgICAgIHdpZHRoOiB3aWR0aCAtIG9mZnNldCAqIDIsXG4gICAgICBoZWlnaHQ6IGhlaWdodCAtIG9mZnNldCAqIDIsXG4gICAgICByeDogcixcbiAgICAgIHJ5OiByXG4gICAgfSk7XG4gICAgc3ZnQXR0cihyZWN0LCBhdHRycyk7XG5cbiAgICBzdmdBcHBlbmQocGFyZW50R2Z4LCByZWN0KTtcblxuICAgIHJldHVybiByZWN0O1xuICB9XG5cbiAgZnVuY3Rpb24gZHJhd0RpYW1vbmQocGFyZW50R2Z4LCB3aWR0aCwgaGVpZ2h0LCBhdHRycykge1xuXG4gICAgdmFyIHhfMiA9IHdpZHRoIC8gMjtcbiAgICB2YXIgeV8yID0gaGVpZ2h0IC8gMjtcblxuICAgIHZhciBwb2ludHMgPSBbeyB4OiB4XzIsIHk6IDAgfSwgeyB4OiB3aWR0aCwgeTogeV8yIH0sIHsgeDogeF8yLCB5OiBoZWlnaHQgfSwgeyB4OiAwLCB5OiB5XzIgfV07XG5cbiAgICB2YXIgcG9pbnRzU3RyaW5nID0gcG9pbnRzLm1hcChmdW5jdGlvbihwb2ludCkge1xuICAgICAgcmV0dXJuIHBvaW50LnggKyAnLCcgKyBwb2ludC55O1xuICAgIH0pLmpvaW4oJyAnKTtcblxuICAgIGF0dHJzID0gY29tcHV0ZVN0eWxlKGF0dHJzLCB7XG4gICAgICBzdHJva2U6ICdibGFjaycsXG4gICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgIGZpbGw6ICd3aGl0ZSdcbiAgICB9KTtcblxuICAgIHZhciBwb2x5Z29uID0gc3ZnQ3JlYXRlKCdwb2x5Z29uJyk7XG4gICAgc3ZnQXR0cihwb2x5Z29uLCB7XG4gICAgICBwb2ludHM6IHBvaW50c1N0cmluZ1xuICAgIH0pO1xuICAgIHN2Z0F0dHIocG9seWdvbiwgYXR0cnMpO1xuXG4gICAgc3ZnQXBwZW5kKHBhcmVudEdmeCwgcG9seWdvbik7XG5cbiAgICByZXR1cm4gcG9seWdvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYXdMaW5lKHBhcmVudEdmeCwgd2F5cG9pbnRzLCBhdHRycykge1xuICAgIGF0dHJzID0gY29tcHV0ZVN0eWxlKGF0dHJzLCBbICduby1maWxsJyBdLCB7XG4gICAgICBzdHJva2U6ICdibGFjaycsXG4gICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgIGZpbGw6ICdub25lJ1xuICAgIH0pO1xuXG4gICAgdmFyIGxpbmUgPSBjcmVhdGVMaW5lKHdheXBvaW50cywgYXR0cnMpO1xuXG4gICAgc3ZnQXBwZW5kKHBhcmVudEdmeCwgbGluZSk7XG5cbiAgICByZXR1cm4gbGluZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYXdQYXRoKHBhcmVudEdmeCwgZCwgYXR0cnMpIHtcblxuICAgIGF0dHJzID0gY29tcHV0ZVN0eWxlKGF0dHJzLCBbICduby1maWxsJyBdLCB7XG4gICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgIHN0cm9rZTogJ2JsYWNrJ1xuICAgIH0pO1xuXG4gICAgdmFyIHBhdGggPSBzdmdDcmVhdGUoJ3BhdGgnKTtcbiAgICBzdmdBdHRyKHBhdGgsIHsgZDogZCB9KTtcbiAgICBzdmdBdHRyKHBhdGgsIGF0dHJzKTtcblxuICAgIHN2Z0FwcGVuZChwYXJlbnRHZngsIHBhdGgpO1xuXG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICBmdW5jdGlvbiBkcmF3TWFya2VyKHR5cGUsIHBhcmVudEdmeCwgcGF0aCwgYXR0cnMpIHtcbiAgICByZXR1cm4gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoLCBhc3NpZ24oeyAnZGF0YS1tYXJrZXInOiB0eXBlIH0sIGF0dHJzKSk7XG4gIH1cblxuICBmdW5jdGlvbiBhcyh0eXBlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGhhbmRsZXJzW3R5cGVdKHBhcmVudEdmeCwgZWxlbWVudCk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlcmVyKHR5cGUpIHtcbiAgICByZXR1cm4gaGFuZGxlcnNbdHlwZV07XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJFdmVudENvbnRlbnQoZWxlbWVudCwgcGFyZW50R2Z4KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcbiAgICB2YXIgaXNUaHJvd2luZyA9IGlzVGhyb3dFdmVudChldmVudCk7XG5cbiAgICBpZiAoZXZlbnQuZXZlbnREZWZpbml0aW9ucyAmJiBldmVudC5ldmVudERlZmluaXRpb25zLmxlbmd0aD4xKSB7XG4gICAgICBpZiAoZXZlbnQucGFyYWxsZWxNdWx0aXBsZSkge1xuICAgICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46UGFyYWxsZWxNdWx0aXBsZUV2ZW50RGVmaW5pdGlvbicpKHBhcmVudEdmeCwgZWxlbWVudCwgaXNUaHJvd2luZyk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOk11bHRpcGxlRXZlbnREZWZpbml0aW9uJykocGFyZW50R2Z4LCBlbGVtZW50LCBpc1Rocm93aW5nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNUeXBlZEV2ZW50KGV2ZW50LCAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJykpIHtcbiAgICAgIHJldHVybiByZW5kZXJlcignYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJykocGFyZW50R2Z4LCBlbGVtZW50LCBpc1Rocm93aW5nKTtcbiAgICB9XG5cbiAgICBpZiAoaXNUeXBlZEV2ZW50KGV2ZW50LCAnYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbicpKSB7XG4gICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46VGltZXJFdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoZXZlbnQsICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJykpIHtcbiAgICAgIHJldHVybiByZW5kZXJlcignYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbicpKHBhcmVudEdmeCwgZWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlzVHlwZWRFdmVudChldmVudCwgJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJykpIHtcbiAgICAgIHJldHVybiByZW5kZXJlcignYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoZXZlbnQsICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nKSkge1xuICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoZXZlbnQsICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nKSkge1xuICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOkxpbmtFdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoZXZlbnQsICdicG1uOkVycm9yRXZlbnREZWZpbml0aW9uJykpIHtcbiAgICAgIHJldHVybiByZW5kZXJlcignYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbicpKHBhcmVudEdmeCwgZWxlbWVudCwgaXNUaHJvd2luZyk7XG4gICAgfVxuXG4gICAgaWYgKGlzVHlwZWRFdmVudChldmVudCwgJ2JwbW46Q2FuY2VsRXZlbnREZWZpbml0aW9uJykpIHtcbiAgICAgIHJldHVybiByZW5kZXJlcignYnBtbjpDYW5jZWxFdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoZXZlbnQsICdicG1uOkNvbXBlbnNhdGVFdmVudERlZmluaXRpb24nKSkge1xuICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOkNvbXBlbnNhdGVFdmVudERlZmluaXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoZXZlbnQsICdicG1uOlRlcm1pbmF0ZUV2ZW50RGVmaW5pdGlvbicpKSB7XG4gICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46VGVybWluYXRlRXZlbnREZWZpbml0aW9uJykocGFyZW50R2Z4LCBlbGVtZW50LCBpc1Rocm93aW5nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlckxhYmVsKHBhcmVudEdmeCwgbGFiZWwsIG9wdGlvbnMpIHtcblxuICAgIG9wdGlvbnMgPSBhc3NpZ24oe1xuICAgICAgc2l6ZToge1xuICAgICAgICB3aWR0aDogMTAwXG4gICAgICB9XG4gICAgfSwgb3B0aW9ucyk7XG5cbiAgICB2YXIgdGV4dCA9IHRleHRSZW5kZXJlci5jcmVhdGVUZXh0KGxhYmVsIHx8ICcnLCBvcHRpb25zKTtcblxuICAgIHN2Z0NsYXNzZXModGV4dCkuYWRkKCdkanMtbGFiZWwnKTtcblxuICAgIHN2Z0FwcGVuZChwYXJlbnRHZngsIHRleHQpO1xuXG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJFbWJlZGRlZExhYmVsKHBhcmVudEdmeCwgZWxlbWVudCwgYWxpZ24pIHtcbiAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcblxuICAgIHJldHVybiByZW5kZXJMYWJlbChwYXJlbnRHZngsIHNlbWFudGljLm5hbWUsIHtcbiAgICAgIGJveDogZWxlbWVudCxcbiAgICAgIGFsaWduOiBhbGlnbixcbiAgICAgIHBhZGRpbmc6IDUsXG4gICAgICBzdHlsZToge1xuICAgICAgICBmaWxsOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJFeHRlcm5hbExhYmVsKHBhcmVudEdmeCwgZWxlbWVudCkge1xuXG4gICAgdmFyIGJveCA9IHtcbiAgICAgIHdpZHRoOiA5MCxcbiAgICAgIGhlaWdodDogMzAsXG4gICAgICB4OiBlbGVtZW50LndpZHRoIC8gMiArIGVsZW1lbnQueCxcbiAgICAgIHk6IGVsZW1lbnQuaGVpZ2h0IC8gMiArIGVsZW1lbnQueVxuICAgIH07XG5cbiAgICByZXR1cm4gcmVuZGVyTGFiZWwocGFyZW50R2Z4LCBnZXRMYWJlbChlbGVtZW50KSwge1xuICAgICAgYm94OiBib3gsXG4gICAgICBmaXRCb3g6IHRydWUsXG4gICAgICBzdHlsZTogYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgdGV4dFJlbmRlcmVyLmdldEV4dGVybmFsU3R5bGUoKSxcbiAgICAgICAge1xuICAgICAgICAgIGZpbGw6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyTGFuZUxhYmVsKHBhcmVudEdmeCwgdGV4dCwgZWxlbWVudCkge1xuICAgIHZhciB0ZXh0Qm94ID0gcmVuZGVyTGFiZWwocGFyZW50R2Z4LCB0ZXh0LCB7XG4gICAgICBib3g6IHtcbiAgICAgICAgaGVpZ2h0OiAzMCxcbiAgICAgICAgd2lkdGg6IGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9LFxuICAgICAgYWxpZ246ICdjZW50ZXItbWlkZGxlJyxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGZpbGw6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciB0b3AgPSAtMSAqIGVsZW1lbnQuaGVpZ2h0O1xuXG4gICAgdHJhbnNmb3JtKHRleHRCb3gsIDAsIC10b3AsIDI3MCk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQYXRoRnJvbUNvbm5lY3Rpb24oY29ubmVjdGlvbikge1xuICAgIHZhciB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cztcblxuICAgIHZhciBwYXRoRGF0YSA9ICdtICAnICsgd2F5cG9pbnRzWzBdLnggKyAnLCcgKyB3YXlwb2ludHNbMF0ueTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHdheXBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgcGF0aERhdGEgKz0gJ0wnICsgd2F5cG9pbnRzW2ldLnggKyAnLCcgKyB3YXlwb2ludHNbaV0ueSArICcgJztcbiAgICB9XG4gICAgcmV0dXJuIHBhdGhEYXRhO1xuICB9XG5cbiAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycyA9IHtcbiAgICAnYnBtbjpFdmVudCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpIHtcblxuICAgICAgaWYgKCEoJ2ZpbGxPcGFjaXR5JyBpbiBhdHRycykpIHtcbiAgICAgICAgYXR0cnMuZmlsbE9wYWNpdHkgPSBERUZBVUxUX0ZJTExfT1BBQ0lUWTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRyYXdDaXJjbGUocGFyZW50R2Z4LCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgYXR0cnMpO1xuICAgIH0sXG4gICAgJ2JwbW46U3RhcnRFdmVudCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIGF0dHJzID0ge1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfTtcblxuICAgICAgdmFyIHNlbWFudGljID0gZ2V0U2VtYW50aWMoZWxlbWVudCk7XG5cbiAgICAgIGlmICghc2VtYW50aWMuaXNJbnRlcnJ1cHRpbmcpIHtcbiAgICAgICAgYXR0cnMgPSB7XG4gICAgICAgICAgc3Ryb2tlRGFzaGFycmF5OiAnNicsXG4gICAgICAgICAgc3Ryb2tlTGluZWNhcDogJ3JvdW5kJyxcbiAgICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBjaXJjbGUgPSByZW5kZXJlcignYnBtbjpFdmVudCcpKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpO1xuXG4gICAgICByZW5kZXJFdmVudENvbnRlbnQoZWxlbWVudCwgcGFyZW50R2Z4KTtcblxuICAgICAgcmV0dXJuIGNpcmNsZTtcbiAgICB9LFxuICAgICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGlzVGhyb3dpbmcpIHtcbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnRVZFTlRfTUVTU0FHRScsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAwLjksXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMC45LFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4yMzUsXG4gICAgICAgICAgbXk6IDAuMzE1XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZmlsbCA9IGlzVGhyb3dpbmcgPyBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpIDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpO1xuICAgICAgdmFyIHN0cm9rZSA9IGlzVGhyb3dpbmcgPyBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvcikgOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpO1xuXG4gICAgICB2YXIgbWVzc2FnZVBhdGggPSBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBmaWxsLFxuICAgICAgICBzdHJva2U6IHN0cm9rZVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBtZXNzYWdlUGF0aDtcbiAgICB9LFxuICAgICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgY2lyY2xlID0gZHJhd0NpcmNsZShwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCAwLjIgKiBlbGVtZW50LmhlaWdodCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0VWRU5UX1RJTUVSX1dIJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDAuNzUsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMC43NSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuNSxcbiAgICAgICAgICBteTogMC41XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICBzdHJva2VMaW5lY2FwOiAnc3F1YXJlJyxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IDEyOyBpKyspIHtcblxuICAgICAgICB2YXIgbGluZVBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9USU1FUl9MSU5FJywge1xuICAgICAgICAgIHhTY2FsZUZhY3RvcjogMC43NSxcbiAgICAgICAgICB5U2NhbGVGYWN0b3I6IDAuNzUsXG4gICAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgbXg6IDAuNSxcbiAgICAgICAgICAgIG15OiAwLjVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciB3aWR0aCA9IGVsZW1lbnQud2lkdGggLyAyO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5oZWlnaHQgLyAyO1xuXG4gICAgICAgIGRyYXdQYXRoKHBhcmVudEdmeCwgbGluZVBhdGhEYXRhLCB7XG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgICAgc3Ryb2tlTGluZWNhcDogJ3NxdWFyZScsXG4gICAgICAgICAgdHJhbnNmb3JtOiAncm90YXRlKCcgKyAoaSAqIDMwKSArICcsJyArIGhlaWdodCArICcsJyArIHdpZHRoICsgJyknLFxuICAgICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNpcmNsZTtcbiAgICB9LFxuICAgICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGV2ZW50LCBpc1Rocm93aW5nKSB7XG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0VWRU5UX0VTQ0FMQVRJT04nLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZXZlbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZXZlbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjUsXG4gICAgICAgICAgbXk6IDAuMlxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGZpbGwgPSBpc1Rocm93aW5nID8gZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvcikgOiAnbm9uZSc7XG5cbiAgICAgIHJldHVybiBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBmaWxsLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcbiAgICB9LFxuICAgICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBldmVudCkge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9DT05ESVRJT05BTCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBldmVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBldmVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuNSxcbiAgICAgICAgICBteTogMC4yMjJcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcbiAgICB9LFxuICAgICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGV2ZW50LCBpc1Rocm93aW5nKSB7XG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0VWRU5UX0xJTksnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZXZlbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZXZlbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjU3LFxuICAgICAgICAgIG15OiAwLjI2M1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGZpbGwgPSBpc1Rocm93aW5nID8gZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvcikgOiAnbm9uZSc7XG5cbiAgICAgIHJldHVybiBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBmaWxsLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcbiAgICB9LFxuICAgICdicG1uOkVycm9yRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBldmVudCwgaXNUaHJvd2luZykge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9FUlJPUicsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLjEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMS4xLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZXZlbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZXZlbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjIsXG4gICAgICAgICAgbXk6IDAuNzIyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZmlsbCA9IGlzVGhyb3dpbmcgPyBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSA6ICdub25lJztcblxuICAgICAgcmV0dXJuIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGZpbGwsXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46Q2FuY2VsRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBldmVudCwgaXNUaHJvd2luZykge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9DQU5DRUxfNDUnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMS4wLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEuMCxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGV2ZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGV2ZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC42MzgsXG4gICAgICAgICAgbXk6IC0wLjA1NVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGZpbGwgPSBpc1Rocm93aW5nID8gZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvcikgOiAnbm9uZSc7XG5cbiAgICAgIHZhciBwYXRoID0gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZmlsbCxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJvdGF0ZShwYXRoLCA0NSk7XG5cbiAgICAgIHJldHVybiBwYXRoO1xuICAgIH0sXG4gICAgJ2JwbW46Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZXZlbnQsIGlzVGhyb3dpbmcpIHtcbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnRVZFTlRfQ09NUEVOU0FUSU9OJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGV2ZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGV2ZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4yMixcbiAgICAgICAgICBteTogMC41XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZmlsbCA9IGlzVGhyb3dpbmcgPyBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSA6ICdub25lJztcblxuICAgICAgcmV0dXJuIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGZpbGwsXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBldmVudCwgaXNUaHJvd2luZykge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9TSUdOQUwnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMC45LFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDAuOSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGV2ZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGV2ZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC41LFxuICAgICAgICAgIG15OiAwLjJcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBmaWxsID0gaXNUaHJvd2luZyA/IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpIDogJ25vbmUnO1xuXG4gICAgICByZXR1cm4gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZmlsbCxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnYnBtbjpNdWx0aXBsZUV2ZW50RGVmaW5pdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZXZlbnQsIGlzVGhyb3dpbmcpIHtcbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnRVZFTlRfTVVMVElQTEUnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMS4xLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEuMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGV2ZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGV2ZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4yMjIsXG4gICAgICAgICAgbXk6IDAuMzZcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBmaWxsID0gaXNUaHJvd2luZyA/IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpIDogJ25vbmUnO1xuXG4gICAgICByZXR1cm4gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZmlsbFxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnYnBtbjpQYXJhbGxlbE11bHRpcGxlRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBldmVudCkge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9QQVJBTExFTF9NVUxUSVBMRScsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLjIsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMS4yLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZXZlbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZXZlbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjQ1OCxcbiAgICAgICAgICBteTogMC4xOTRcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnYnBtbjpFbmRFdmVudCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIGNpcmNsZSA9IHJlbmRlcmVyKCdicG1uOkV2ZW50JykocGFyZW50R2Z4LCBlbGVtZW50LCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiA0LFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJlbmRlckV2ZW50Q29udGVudChlbGVtZW50LCBwYXJlbnRHZngsIHRydWUpO1xuXG4gICAgICByZXR1cm4gY2lyY2xlO1xuICAgIH0sXG4gICAgJ2JwbW46VGVybWluYXRlRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgY2lyY2xlID0gZHJhd0NpcmNsZShwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCA4LCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiA0LFxuICAgICAgICBmaWxsOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY2lyY2xlO1xuICAgIH0sXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlRXZlbnQnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBvdXRlciA9IHJlbmRlcmVyKCdicG1uOkV2ZW50JykocGFyZW50R2Z4LCBlbGVtZW50LCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIC8qIGlubmVyICovXG4gICAgICBkcmF3Q2lyY2xlKHBhcmVudEdmeCwgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQsIElOTkVSX09VVEVSX0RJU1QsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCAnbm9uZScpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByZW5kZXJFdmVudENvbnRlbnQoZWxlbWVudCwgcGFyZW50R2Z4KTtcblxuICAgICAgcmV0dXJuIG91dGVyO1xuICAgIH0sXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCc6IGFzKCdicG1uOkludGVybWVkaWF0ZUV2ZW50JyksXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCc6IGFzKCdicG1uOkludGVybWVkaWF0ZUV2ZW50JyksXG5cbiAgICAnYnBtbjpBY3Rpdml0eSc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpIHtcblxuICAgICAgYXR0cnMgPSBhdHRycyB8fCB7fTtcblxuICAgICAgaWYgKCEoJ2ZpbGxPcGFjaXR5JyBpbiBhdHRycykpIHtcbiAgICAgICAgYXR0cnMuZmlsbE9wYWNpdHkgPSBERUZBVUxUX0ZJTExfT1BBQ0lUWTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRyYXdSZWN0KHBhcmVudEdmeCwgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQsIFRBU0tfQk9SREVSX1JBRElVUywgYXR0cnMpO1xuICAgIH0sXG5cbiAgICAnYnBtbjpUYXNrJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgYXR0cnMgPSB7XG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9O1xuXG4gICAgICB2YXIgcmVjdCA9IHJlbmRlcmVyKCdicG1uOkFjdGl2aXR5JykocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyk7XG5cbiAgICAgIHJlbmRlckVtYmVkZGVkTGFiZWwocGFyZW50R2Z4LCBlbGVtZW50LCAnY2VudGVyLW1pZGRsZScpO1xuICAgICAgYXR0YWNoVGFza01hcmtlcnMocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgcmV0dXJuIHJlY3Q7XG4gICAgfSxcbiAgICAnYnBtbjpTZXJ2aWNlVGFzayc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIHRhc2sgPSByZW5kZXJlcignYnBtbjpUYXNrJykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgdmFyIHBhdGhEYXRhQkcgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9TRVJWSUNFJywge1xuICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICB4OiAxMixcbiAgICAgICAgICB5OiAxOFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyogc2VydmljZSBiZyAqLyBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhQkcsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgdmFyIGZpbGxQYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEFTS19UWVBFX1NFUlZJQ0VfRklMTCcsIHtcbiAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgeDogMTcuMixcbiAgICAgICAgICB5OiAxOFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyogc2VydmljZSBmaWxsICovIGRyYXdQYXRoKHBhcmVudEdmeCwgZmlsbFBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9TRVJWSUNFJywge1xuICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICB4OiAxNyxcbiAgICAgICAgICB5OiAyMlxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyogc2VydmljZSAqLyBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0YXNrO1xuICAgIH0sXG4gICAgJ2JwbW46VXNlclRhc2snOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciB0YXNrID0gcmVuZGVyZXIoJ2JwbW46VGFzaycpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIHZhciB4ID0gMTU7XG4gICAgICB2YXIgeSA9IDEyO1xuXG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9VU0VSXzEnLCB7XG4gICAgICAgIGFic3Bvczoge1xuICAgICAgICAgIHg6IHgsXG4gICAgICAgICAgeTogeVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyogdXNlciBwYXRoICovIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuNSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcGF0aERhdGEyID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfVVNFUl8yJywge1xuICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICB4OiB4LFxuICAgICAgICAgIHk6IHlcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qIHVzZXIyIHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YTIsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuNSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcGF0aERhdGEzID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfVVNFUl8zJywge1xuICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICB4OiB4LFxuICAgICAgICAgIHk6IHlcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qIHVzZXIzIHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YTMsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuNSxcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRhc2s7XG4gICAgfSxcbiAgICAnYnBtbjpNYW51YWxUYXNrJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgdGFzayA9IHJlbmRlcmVyKCdicG1uOlRhc2snKShwYXJlbnRHZngsIGVsZW1lbnQpO1xuXG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9NQU5VQUwnLCB7XG4gICAgICAgIGFic3Bvczoge1xuICAgICAgICAgIHg6IDE3LFxuICAgICAgICAgIHk6IDE1XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKiBtYW51YWwgcGF0aCAqLyBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjUsIC8vIDAuMjUsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRhc2s7XG4gICAgfSxcbiAgICAnYnBtbjpTZW5kVGFzayc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIHRhc2sgPSByZW5kZXJlcignYnBtbjpUYXNrJykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfU0VORCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiAyMSxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiAxNCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4yODUsXG4gICAgICAgICAgbXk6IDAuMzU3XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKiBzZW5kIHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGFzaztcbiAgICB9LFxuICAgICdicG1uOlJlY2VpdmVUYXNrJyA6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIHNlbWFudGljID0gZ2V0U2VtYW50aWMoZWxlbWVudCk7XG5cbiAgICAgIHZhciB0YXNrID0gcmVuZGVyZXIoJ2JwbW46VGFzaycpKHBhcmVudEdmeCwgZWxlbWVudCk7XG4gICAgICB2YXIgcGF0aERhdGE7XG5cbiAgICAgIGlmIChzZW1hbnRpYy5pbnN0YW50aWF0ZSkge1xuICAgICAgICBkcmF3Q2lyY2xlKHBhcmVudEdmeCwgMjgsIDI4LCAyMCAqIDAuMjIsIHsgc3Ryb2tlV2lkdGg6IDEgfSk7XG5cbiAgICAgICAgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9JTlNUQU5USUFUSU5HX1NFTkQnLCB7XG4gICAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgICB4OiA3Ljc3LFxuICAgICAgICAgICAgeTogOS41MlxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfU0VORCcsIHtcbiAgICAgICAgICB4U2NhbGVGYWN0b3I6IDAuOSxcbiAgICAgICAgICB5U2NhbGVGYWN0b3I6IDAuOSxcbiAgICAgICAgICBjb250YWluZXJXaWR0aDogMjEsXG4gICAgICAgICAgY29udGFpbmVySGVpZ2h0OiAxNCxcbiAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgbXg6IDAuMyxcbiAgICAgICAgICAgIG15OiAwLjRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvKiByZWNlaXZlIHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGFzaztcbiAgICB9LFxuICAgICdicG1uOlNjcmlwdFRhc2snOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciB0YXNrID0gcmVuZGVyZXIoJ2JwbW46VGFzaycpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEFTS19UWVBFX1NDUklQVCcsIHtcbiAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgeDogMTUsXG4gICAgICAgICAgeTogMjBcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qIHNjcmlwdCBwYXRoICovIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0YXNrO1xuICAgIH0sXG4gICAgJ2JwbW46QnVzaW5lc3NSdWxlVGFzayc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIHRhc2sgPSByZW5kZXJlcignYnBtbjpUYXNrJykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgdmFyIGhlYWRlclBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfQlVTSU5FU1NfUlVMRV9IRUFERVInLCB7XG4gICAgICAgIGFic3Bvczoge1xuICAgICAgICAgIHg6IDgsXG4gICAgICAgICAgeTogOFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGJ1c2luZXNzSGVhZGVyUGF0aCA9IGRyYXdQYXRoKHBhcmVudEdmeCwgaGVhZGVyUGF0aERhdGEpO1xuICAgICAgc3ZnQXR0cihidXNpbmVzc0hlYWRlclBhdGgsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCAnI2FhYWFhYScpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgaGVhZGVyRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEFTS19UWVBFX0JVU0lORVNTX1JVTEVfTUFJTicsIHtcbiAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgeDogOCxcbiAgICAgICAgICB5OiA4XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgYnVzaW5lc3NQYXRoID0gZHJhd1BhdGgocGFyZW50R2Z4LCBoZWFkZXJEYXRhKTtcbiAgICAgIHN2Z0F0dHIoYnVzaW5lc3NQYXRoLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGFzaztcbiAgICB9LFxuICAgICdicG1uOlN1YlByb2Nlc3MnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKSB7XG4gICAgICBhdHRycyA9IGFzc2lnbih7XG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9LCBhdHRycyk7XG5cbiAgICAgIHZhciByZWN0ID0gcmVuZGVyZXIoJ2JwbW46QWN0aXZpdHknKShwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKTtcblxuICAgICAgdmFyIGV4cGFuZGVkID0gaXNFeHBhbmRlZChlbGVtZW50KTtcblxuICAgICAgaWYgKGlzRXZlbnRTdWJQcm9jZXNzKGVsZW1lbnQpKSB7XG4gICAgICAgIHN2Z0F0dHIocmVjdCwge1xuICAgICAgICAgIHN0cm9rZURhc2hhcnJheTogJzEsMidcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJlbmRlckVtYmVkZGVkTGFiZWwocGFyZW50R2Z4LCBlbGVtZW50LCBleHBhbmRlZCA/ICdjZW50ZXItdG9wJyA6ICdjZW50ZXItbWlkZGxlJyk7XG5cbiAgICAgIGlmIChleHBhbmRlZCkge1xuICAgICAgICBhdHRhY2hUYXNrTWFya2VycyhwYXJlbnRHZngsIGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0YWNoVGFza01hcmtlcnMocGFyZW50R2Z4LCBlbGVtZW50LCBbJ1N1YlByb2Nlc3NNYXJrZXInXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWN0O1xuICAgIH0sXG4gICAgJ2JwbW46QWRIb2NTdWJQcm9jZXNzJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46U3ViUHJvY2VzcycpKHBhcmVudEdmeCwgZWxlbWVudCk7XG4gICAgfSxcbiAgICAnYnBtbjpUcmFuc2FjdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIG91dGVyID0gcmVuZGVyZXIoJ2JwbW46U3ViUHJvY2VzcycpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIHZhciBpbm5lckF0dHJzID0gc3R5bGVzLnN0eWxlKFsgJ25vLWZpbGwnLCAnbm8tZXZlbnRzJyBdLCB7XG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIC8qIGlubmVyIHBhdGggKi8gZHJhd1JlY3QocGFyZW50R2Z4LCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgVEFTS19CT1JERVJfUkFESVVTIC0gMiwgSU5ORVJfT1VURVJfRElTVCwgaW5uZXJBdHRycyk7XG5cbiAgICAgIHJldHVybiBvdXRlcjtcbiAgICB9LFxuICAgICdicG1uOkNhbGxBY3Rpdml0eSc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHJlbmRlcmVyKCdicG1uOlN1YlByb2Nlc3MnKShwYXJlbnRHZngsIGVsZW1lbnQsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDVcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46UGFydGljaXBhbnQnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcblxuICAgICAgdmFyIGF0dHJzID0ge1xuICAgICAgICBmaWxsT3BhY2l0eTogREVGQVVMVF9GSUxMX09QQUNJVFksXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9O1xuXG4gICAgICB2YXIgbGFuZSA9IHJlbmRlcmVyKCdicG1uOkxhbmUnKShwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKTtcblxuICAgICAgdmFyIGV4cGFuZGVkUG9vbCA9IGlzRXhwYW5kZWQoZWxlbWVudCk7XG5cbiAgICAgIGlmIChleHBhbmRlZFBvb2wpIHtcbiAgICAgICAgZHJhd0xpbmUocGFyZW50R2Z4LCBbXG4gICAgICAgICAgeyB4OiAzMCwgeTogMCB9LFxuICAgICAgICAgIHsgeDogMzAsIHk6IGVsZW1lbnQuaGVpZ2h0IH1cbiAgICAgICAgXSwge1xuICAgICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHRleHQgPSBnZXRTZW1hbnRpYyhlbGVtZW50KS5uYW1lO1xuICAgICAgICByZW5kZXJMYW5lTGFiZWwocGFyZW50R2Z4LCB0ZXh0LCBlbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgLy8gQ29sbGFwc2VkIHBvb2wgZHJhdyB0ZXh0IGlubGluZVxuICAgICAgICB2YXIgdGV4dDIgPSBnZXRTZW1hbnRpYyhlbGVtZW50KS5uYW1lO1xuICAgICAgICByZW5kZXJMYWJlbChwYXJlbnRHZngsIHRleHQyLCB7XG4gICAgICAgICAgYm94OiBlbGVtZW50LCBhbGlnbjogJ2NlbnRlci1taWRkbGUnLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBmaWxsOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIHBhcnRpY2lwYW50TXVsdGlwbGljaXR5ID0gISEoZ2V0U2VtYW50aWMoZWxlbWVudCkucGFydGljaXBhbnRNdWx0aXBsaWNpdHkpO1xuXG4gICAgICBpZiAocGFydGljaXBhbnRNdWx0aXBsaWNpdHkpIHtcbiAgICAgICAgcmVuZGVyZXIoJ1BhcnRpY2lwYW50TXVsdGlwbGljaXR5TWFya2VyJykocGFyZW50R2Z4LCBlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxhbmU7XG4gICAgfSxcbiAgICAnYnBtbjpMYW5lJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycykge1xuICAgICAgdmFyIHJlY3QgPSBkcmF3UmVjdChwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCAwLCBhc3NpZ24oe1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIGZpbGxPcGFjaXR5OiBISUdIX0ZJTExfT1BBQ0lUWSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9LCBhdHRycykpO1xuXG4gICAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcblxuICAgICAgaWYgKHNlbWFudGljLiR0eXBlID09PSAnYnBtbjpMYW5lJykge1xuICAgICAgICB2YXIgdGV4dCA9IHNlbWFudGljLm5hbWU7XG4gICAgICAgIHJlbmRlckxhbmVMYWJlbChwYXJlbnRHZngsIHRleHQsIGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVjdDtcbiAgICB9LFxuICAgICdicG1uOkluY2x1c2l2ZUdhdGV3YXknOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBkaWFtb25kID0gcmVuZGVyZXIoJ2JwbW46R2F0ZXdheScpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIC8qIGNpcmNsZSBwYXRoICovXG4gICAgICBkcmF3Q2lyY2xlKHBhcmVudEdmeCwgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQsIGVsZW1lbnQuaGVpZ2h0ICogMC4yNCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMi41LFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBkaWFtb25kO1xuICAgIH0sXG4gICAgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheSc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIGRpYW1vbmQgPSByZW5kZXJlcignYnBtbjpHYXRld2F5JykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdHQVRFV0FZX0VYQ0xVU0lWRScsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAwLjQsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMC40LFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4zMixcbiAgICAgICAgICBteTogMC4zXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoKGdldERpKGVsZW1lbnQpLmlzTWFya2VyVmlzaWJsZSkpIHtcbiAgICAgICAgZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICAgIGZpbGw6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciksXG4gICAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGlhbW9uZDtcbiAgICB9LFxuICAgICdicG1uOkNvbXBsZXhHYXRld2F5JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgZGlhbW9uZCA9IHJlbmRlcmVyKCdicG1uOkdhdGV3YXknKShwYXJlbnRHZngsIGVsZW1lbnQpO1xuXG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0dBVEVXQVlfQ09NUExFWCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAwLjUsXG4gICAgICAgIHlTY2FsZUZhY3RvcjowLjUsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjQ2LFxuICAgICAgICAgIG15OiAwLjI2XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKiBjb21wbGV4IHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRpYW1vbmQ7XG4gICAgfSxcbiAgICAnYnBtbjpQYXJhbGxlbEdhdGV3YXknOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBkaWFtb25kID0gcmVuZGVyZXIoJ2JwbW46R2F0ZXdheScpKHBhcmVudEdmeCwgZWxlbWVudCk7XG5cbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnR0FURVdBWV9QQVJBTExFTCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAwLjYsXG4gICAgICAgIHlTY2FsZUZhY3RvcjowLjYsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjQ2LFxuICAgICAgICAgIG15OiAwLjJcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qIHBhcmFsbGVsIHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRpYW1vbmQ7XG4gICAgfSxcbiAgICAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheSc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuXG4gICAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcblxuICAgICAgdmFyIGRpYW1vbmQgPSByZW5kZXJlcignYnBtbjpHYXRld2F5JykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgLyogb3V0ZXIgY2lyY2xlIHBhdGggKi8gZHJhd0NpcmNsZShwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCBlbGVtZW50LmhlaWdodCAqIDAuMjAsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6ICdub25lJyxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcblxuICAgICAgdmFyIHR5cGUgPSBzZW1hbnRpYy5ldmVudEdhdGV3YXlUeXBlO1xuICAgICAgdmFyIGluc3RhbnRpYXRlID0gISFzZW1hbnRpYy5pbnN0YW50aWF0ZTtcblxuICAgICAgZnVuY3Rpb24gZHJhd0V2ZW50KCkge1xuXG4gICAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnR0FURVdBWV9FVkVOVF9CQVNFRCcsIHtcbiAgICAgICAgICB4U2NhbGVGYWN0b3I6IDAuMTgsXG4gICAgICAgICAgeVNjYWxlRmFjdG9yOiAwLjE4LFxuICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIG14OiAwLjM2LFxuICAgICAgICAgICAgbXk6IDAuNDRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBhdHRycyA9IHtcbiAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgJ25vbmUnKSxcbiAgICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgICAgfTtcblxuICAgICAgICAvKiBldmVudCBwYXRoICovIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIGF0dHJzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgPT09ICdQYXJhbGxlbCcpIHtcblxuICAgICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0dBVEVXQVlfUEFSQUxMRUwnLCB7XG4gICAgICAgICAgeFNjYWxlRmFjdG9yOiAwLjQsXG4gICAgICAgICAgeVNjYWxlRmFjdG9yOjAuNCxcbiAgICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICBteDogMC40NzQsXG4gICAgICAgICAgICBteTogMC4yOTZcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBwYXJhbGxlbFBhdGggPSBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhKTtcbiAgICAgICAgc3ZnQXR0cihwYXJhbGxlbFBhdGgsIHtcbiAgICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgICBmaWxsOiAnbm9uZSdcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdFeGNsdXNpdmUnKSB7XG5cbiAgICAgICAgaWYgKCFpbnN0YW50aWF0ZSkge1xuICAgICAgICAgIHZhciBpbm5lckNpcmNsZSA9IGRyYXdDaXJjbGUocGFyZW50R2Z4LCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgZWxlbWVudC5oZWlnaHQgKiAwLjI2KTtcbiAgICAgICAgICBzdmdBdHRyKGlubmVyQ2lyY2xlLCB7XG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgICAgIGZpbGw6ICdub25lJyxcbiAgICAgICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZHJhd0V2ZW50KCk7XG4gICAgICB9XG5cblxuICAgICAgcmV0dXJuIGRpYW1vbmQ7XG4gICAgfSxcbiAgICAnYnBtbjpHYXRld2F5JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgYXR0cnMgPSB7XG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgZmlsbE9wYWNpdHk6IERFRkFVTFRfRklMTF9PUEFDSVRZLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBkcmF3RGlhbW9uZChwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCBhdHRycyk7XG4gICAgfSxcbiAgICAnYnBtbjpTZXF1ZW5jZUZsb3cnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBwYXRoRGF0YSA9IGNyZWF0ZVBhdGhGcm9tQ29ubmVjdGlvbihlbGVtZW50KTtcblxuICAgICAgdmFyIGZpbGwgPSBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgICAgc3Ryb2tlID0gZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKTtcblxuICAgICAgdmFyIGF0dHJzID0ge1xuICAgICAgICBzdHJva2VMaW5lam9pbjogJ3JvdW5kJyxcbiAgICAgICAgbWFya2VyRW5kOiBtYXJrZXIoJ3NlcXVlbmNlZmxvdy1lbmQnLCBmaWxsLCBzdHJva2UpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH07XG5cbiAgICAgIHZhciBwYXRoID0gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwgYXR0cnMpO1xuXG4gICAgICB2YXIgc2VxdWVuY2VGbG93ID0gZ2V0U2VtYW50aWMoZWxlbWVudCk7XG5cbiAgICAgIHZhciBzb3VyY2U7XG5cbiAgICAgIGlmIChlbGVtZW50LnNvdXJjZSkge1xuICAgICAgICBzb3VyY2UgPSBlbGVtZW50LnNvdXJjZS5idXNpbmVzc09iamVjdDtcblxuICAgICAgICAvLyBjb25kaXRpb25hbCBmbG93IG1hcmtlclxuICAgICAgICBpZiAoc2VxdWVuY2VGbG93LmNvbmRpdGlvbkV4cHJlc3Npb24gJiYgc291cmNlLiRpbnN0YW5jZU9mKCdicG1uOkFjdGl2aXR5JykpIHtcbiAgICAgICAgICBzdmdBdHRyKHBhdGgsIHtcbiAgICAgICAgICAgIG1hcmtlclN0YXJ0OiBtYXJrZXIoJ2NvbmRpdGlvbmFsLWZsb3ctbWFya2VyJywgZmlsbCwgc3Ryb2tlKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZGVmYXVsdCBtYXJrZXJcbiAgICAgICAgaWYgKHNvdXJjZS5kZWZhdWx0ICYmIChzb3VyY2UuJGluc3RhbmNlT2YoJ2JwbW46R2F0ZXdheScpIHx8IHNvdXJjZS4kaW5zdGFuY2VPZignYnBtbjpBY3Rpdml0eScpKSAmJlxuICAgICAgICAgICAgc291cmNlLmRlZmF1bHQgPT09IHNlcXVlbmNlRmxvdykge1xuICAgICAgICAgIHN2Z0F0dHIocGF0aCwge1xuICAgICAgICAgICAgbWFya2VyU3RhcnQ6IG1hcmtlcignY29uZGl0aW9uYWwtZGVmYXVsdC1mbG93LW1hcmtlcicsIGZpbGwsIHN0cm9rZSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGF0aDtcbiAgICB9LFxuICAgICdicG1uOkFzc29jaWF0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycykge1xuXG4gICAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcblxuICAgICAgdmFyIGZpbGwgPSBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgICAgc3Ryb2tlID0gZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKTtcblxuICAgICAgYXR0cnMgPSBhc3NpZ24oe1xuICAgICAgICBzdHJva2VEYXNoYXJyYXk6ICcwLjUsIDUnLFxuICAgICAgICBzdHJva2VMaW5lY2FwOiAncm91bmQnLFxuICAgICAgICBzdHJva2VMaW5lam9pbjogJ3JvdW5kJyxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9LCBhdHRycyB8fCB7fSk7XG5cbiAgICAgIGlmIChzZW1hbnRpYy5hc3NvY2lhdGlvbkRpcmVjdGlvbiA9PT0gJ09uZScgfHxcbiAgICAgICAgICBzZW1hbnRpYy5hc3NvY2lhdGlvbkRpcmVjdGlvbiA9PT0gJ0JvdGgnKSB7XG4gICAgICAgIGF0dHJzLm1hcmtlckVuZCA9IG1hcmtlcignYXNzb2NpYXRpb24tZW5kJywgZmlsbCwgc3Ryb2tlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbWFudGljLmFzc29jaWF0aW9uRGlyZWN0aW9uID09PSAnQm90aCcpIHtcbiAgICAgICAgYXR0cnMubWFya2VyU3RhcnQgPSBtYXJrZXIoJ2Fzc29jaWF0aW9uLXN0YXJ0JywgZmlsbCwgc3Ryb2tlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRyYXdMaW5lKHBhcmVudEdmeCwgZWxlbWVudC53YXlwb2ludHMsIGF0dHJzKTtcbiAgICB9LFxuICAgICdicG1uOkRhdGFJbnB1dEFzc29jaWF0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgZmlsbCA9IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgICBzdHJva2UgPSBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpO1xuXG4gICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46QXNzb2NpYXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIHtcbiAgICAgICAgbWFya2VyRW5kOiBtYXJrZXIoJ2Fzc29jaWF0aW9uLWVuZCcsIGZpbGwsIHN0cm9rZSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46RGF0YU91dHB1dEFzc29jaWF0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgZmlsbCA9IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgICBzdHJva2UgPSBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpO1xuXG4gICAgICByZXR1cm4gcmVuZGVyZXIoJ2JwbW46QXNzb2NpYXRpb24nKShwYXJlbnRHZngsIGVsZW1lbnQsIHtcbiAgICAgICAgbWFya2VyRW5kOiBtYXJrZXIoJ2Fzc29jaWF0aW9uLWVuZCcsIGZpbGwsIHN0cm9rZSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46TWVzc2FnZUZsb3cnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcblxuICAgICAgdmFyIHNlbWFudGljID0gZ2V0U2VtYW50aWMoZWxlbWVudCksXG4gICAgICAgICAgZGkgPSBnZXREaShlbGVtZW50KTtcblxuICAgICAgdmFyIGZpbGwgPSBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgICAgc3Ryb2tlID0gZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKTtcblxuICAgICAgdmFyIHBhdGhEYXRhID0gY3JlYXRlUGF0aEZyb21Db25uZWN0aW9uKGVsZW1lbnQpO1xuXG4gICAgICB2YXIgYXR0cnMgPSB7XG4gICAgICAgIG1hcmtlckVuZDogbWFya2VyKCdtZXNzYWdlZmxvdy1lbmQnLCBmaWxsLCBzdHJva2UpLFxuICAgICAgICBtYXJrZXJTdGFydDogbWFya2VyKCdtZXNzYWdlZmxvdy1zdGFydCcsIGZpbGwsIHN0cm9rZSksXG4gICAgICAgIHN0cm9rZURhc2hhcnJheTogJzEwLCAxMicsXG4gICAgICAgIHN0cm9rZUxpbmVjYXA6ICdyb3VuZCcsXG4gICAgICAgIHN0cm9rZUxpbmVqb2luOiAncm91bmQnLFxuICAgICAgICBzdHJva2VXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9O1xuXG4gICAgICB2YXIgcGF0aCA9IGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIGF0dHJzKTtcblxuICAgICAgaWYgKHNlbWFudGljLm1lc3NhZ2VSZWYpIHtcbiAgICAgICAgdmFyIG1pZFBvaW50ID0gcGF0aC5nZXRQb2ludEF0TGVuZ3RoKHBhdGguZ2V0VG90YWxMZW5ndGgoKSAvIDIpO1xuXG4gICAgICAgIHZhciBtYXJrZXJQYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnTUVTU0FHRV9GTE9XX01BUktFUicsIHtcbiAgICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICAgIHg6IG1pZFBvaW50LngsXG4gICAgICAgICAgICB5OiBtaWRQb2ludC55XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgbWVzc2FnZUF0dHJzID0geyBzdHJva2VXaWR0aDogMSB9O1xuXG4gICAgICAgIGlmIChkaS5tZXNzYWdlVmlzaWJsZUtpbmQgPT09ICdpbml0aWF0aW5nJykge1xuICAgICAgICAgIG1lc3NhZ2VBdHRycy5maWxsID0gJ3doaXRlJztcbiAgICAgICAgICBtZXNzYWdlQXR0cnMuc3Ryb2tlID0gJ2JsYWNrJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXNzYWdlQXR0cnMuZmlsbCA9ICcjODg4JztcbiAgICAgICAgICBtZXNzYWdlQXR0cnMuc3Ryb2tlID0gJ3doaXRlJztcbiAgICAgICAgfVxuXG4gICAgICAgIGRyYXdQYXRoKHBhcmVudEdmeCwgbWFya2VyUGF0aERhdGEsIG1lc3NhZ2VBdHRycyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXRoO1xuICAgIH0sXG4gICAgJ2JwbW46RGF0YU9iamVjdCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdEQVRBX09CSkVDVF9QQVRIJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuNDc0LFxuICAgICAgICAgIG15OiAwLjI5NlxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGVsZW1lbnRPYmplY3QgPSBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgZmlsbE9wYWNpdHk6IERFRkFVTFRfRklMTF9PUEFDSVRZLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcblxuICAgICAgaWYgKGlzQ29sbGVjdGlvbihzZW1hbnRpYykpIHtcbiAgICAgICAgcmVuZGVyRGF0YUl0ZW1Db2xsZWN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbGVtZW50T2JqZWN0O1xuICAgIH0sXG4gICAgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZSc6IGFzKCdicG1uOkRhdGFPYmplY3QnKSxcbiAgICAnYnBtbjpEYXRhSW5wdXQnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcblxuICAgICAgdmFyIGFycm93UGF0aERhdGEgPSBwYXRoTWFwLmdldFJhd1BhdGgoJ0RBVEFfQVJST1cnKTtcblxuICAgICAgLy8gcGFnZVxuICAgICAgdmFyIGVsZW1lbnRPYmplY3QgPSByZW5kZXJlcignYnBtbjpEYXRhT2JqZWN0JykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgLyogaW5wdXQgYXJyb3cgcGF0aCAqLyBkcmF3UGF0aChwYXJlbnRHZngsIGFycm93UGF0aERhdGEsIHsgc3Ryb2tlV2lkdGg6IDEgfSk7XG5cbiAgICAgIHJldHVybiBlbGVtZW50T2JqZWN0O1xuICAgIH0sXG4gICAgJ2JwbW46RGF0YU91dHB1dCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIGFycm93UGF0aERhdGEgPSBwYXRoTWFwLmdldFJhd1BhdGgoJ0RBVEFfQVJST1cnKTtcblxuICAgICAgLy8gcGFnZVxuICAgICAgdmFyIGVsZW1lbnRPYmplY3QgPSByZW5kZXJlcignYnBtbjpEYXRhT2JqZWN0JykocGFyZW50R2Z4LCBlbGVtZW50KTtcblxuICAgICAgLyogb3V0cHV0IGFycm93IHBhdGggKi8gZHJhd1BhdGgocGFyZW50R2Z4LCBhcnJvd1BhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiAnYmxhY2snXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGVsZW1lbnRPYmplY3Q7XG4gICAgfSxcbiAgICAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBEQVRBX1NUT1JFX1BBVEggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0RBVEFfU1RPUkUnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMCxcbiAgICAgICAgICBteTogMC4xMzNcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBlbGVtZW50U3RvcmUgPSBkcmF3UGF0aChwYXJlbnRHZngsIERBVEFfU1RPUkVfUEFUSCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBmaWxsT3BhY2l0eTogREVGQVVMVF9GSUxMX09QQUNJVFksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBlbGVtZW50U3RvcmU7XG4gICAgfSxcbiAgICAnYnBtbjpCb3VuZGFyeUV2ZW50JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG5cbiAgICAgIHZhciBzZW1hbnRpYyA9IGdldFNlbWFudGljKGVsZW1lbnQpLFxuICAgICAgICAgIGNhbmNlbCA9IHNlbWFudGljLmNhbmNlbEFjdGl2aXR5O1xuXG4gICAgICB2YXIgYXR0cnMgPSB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfTtcblxuICAgICAgaWYgKCFjYW5jZWwpIHtcbiAgICAgICAgYXR0cnMuc3Ryb2tlRGFzaGFycmF5ID0gJzYnO1xuICAgICAgICBhdHRycy5zdHJva2VMaW5lY2FwID0gJ3JvdW5kJztcbiAgICAgIH1cblxuICAgICAgLy8gYXBwbHkgZmlsbE9wYWNpdHlcbiAgICAgIHZhciBvdXRlckF0dHJzID0gYXNzaWduKHt9LCBhdHRycywge1xuICAgICAgICBmaWxsT3BhY2l0eTogMVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGFwcGx5IG5vLWZpbGxcbiAgICAgIHZhciBpbm5lckF0dHJzID0gYXNzaWduKHt9LCBhdHRycywge1xuICAgICAgICBmaWxsOiAnbm9uZSdcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgb3V0ZXIgPSByZW5kZXJlcignYnBtbjpFdmVudCcpKHBhcmVudEdmeCwgZWxlbWVudCwgb3V0ZXJBdHRycyk7XG5cbiAgICAgIC8qIGlubmVyIHBhdGggKi8gZHJhd0NpcmNsZShwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCBJTk5FUl9PVVRFUl9ESVNULCBpbm5lckF0dHJzKTtcblxuICAgICAgcmVuZGVyRXZlbnRDb250ZW50KGVsZW1lbnQsIHBhcmVudEdmeCk7XG5cbiAgICAgIHJldHVybiBvdXRlcjtcbiAgICB9LFxuICAgICdicG1uOkdyb3VwJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG5cbiAgICAgIHZhciBncm91cCA9IGRyYXdSZWN0KHBhcmVudEdmeCwgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQsIFRBU0tfQk9SREVSX1JBRElVUywge1xuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciksXG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBzdHJva2VEYXNoYXJyYXk6ICc4LDMsMSwzJyxcbiAgICAgICAgZmlsbDogJ25vbmUnLFxuICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZSdcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfSxcbiAgICAnbGFiZWwnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiByZW5kZXJFeHRlcm5hbExhYmVsKHBhcmVudEdmeCwgZWxlbWVudCk7XG4gICAgfSxcbiAgICAnYnBtbjpUZXh0QW5ub3RhdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIHN0eWxlID0ge1xuICAgICAgICAnZmlsbCc6ICdub25lJyxcbiAgICAgICAgJ3N0cm9rZSc6ICdub25lJ1xuICAgICAgfTtcblxuICAgICAgdmFyIHRleHRFbGVtZW50ID0gZHJhd1JlY3QocGFyZW50R2Z4LCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgMCwgMCwgc3R5bGUpO1xuXG4gICAgICB2YXIgdGV4dFBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdURVhUX0FOTk9UQVRJT04nLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4wLFxuICAgICAgICAgIG15OiAwLjBcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRyYXdQYXRoKHBhcmVudEdmeCwgdGV4dFBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG5cbiAgICAgIHZhciB0ZXh0ID0gZ2V0U2VtYW50aWMoZWxlbWVudCkudGV4dCB8fCAnJztcbiAgICAgIHJlbmRlckxhYmVsKHBhcmVudEdmeCwgdGV4dCwge1xuICAgICAgICBib3g6IGVsZW1lbnQsXG4gICAgICAgIGFsaWduOiAnbGVmdC10b3AnLFxuICAgICAgICBwYWRkaW5nOiA1LFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGZpbGw6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0ZXh0RWxlbWVudDtcbiAgICB9LFxuICAgICdQYXJ0aWNpcGFudE11bHRpcGxpY2l0eU1hcmtlcic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIG1hcmtlclBhdGggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ01BUktFUl9QQVJBTExFTCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAoKGVsZW1lbnQud2lkdGggLyAyKSAvIGVsZW1lbnQud2lkdGgpLFxuICAgICAgICAgIG15OiAoZWxlbWVudC5oZWlnaHQgLSAxNSkgLyBlbGVtZW50LmhlaWdodFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZHJhd01hcmtlcigncGFydGljaXBhbnQtbXVsdGlwbGljaXR5JywgcGFyZW50R2Z4LCBtYXJrZXJQYXRoLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnU3ViUHJvY2Vzc01hcmtlcic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICAgICAgdmFyIG1hcmtlclJlY3QgPSBkcmF3UmVjdChwYXJlbnRHZngsIDE0LCAxNCwgMCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuXG4gICAgICAvLyBQcm9jZXNzIG1hcmtlciBpcyBwbGFjZWQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgYm94XG4gICAgICAvLyB0aGVyZWZvcmUgZml4ZWQgdmFsdWVzIGNhbiBiZSB1c2VkIGhlcmVcbiAgICAgIHRyYW5zbGF0ZShtYXJrZXJSZWN0LCBlbGVtZW50LndpZHRoIC8gMiAtIDcuNSwgZWxlbWVudC5oZWlnaHQgLSAyMCk7XG5cbiAgICAgIHZhciBtYXJrZXJQYXRoID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdNQVJLRVJfU1VCX1BST0NFU1MnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMS41LFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEuNSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IChlbGVtZW50LndpZHRoIC8gMiAtIDcuNSkgLyBlbGVtZW50LndpZHRoLFxuICAgICAgICAgIG15OiAoZWxlbWVudC5oZWlnaHQgLSAyMCkgLyBlbGVtZW50LmhlaWdodFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZHJhd01hcmtlcignc3ViLXByb2Nlc3MnLCBwYXJlbnRHZngsIG1hcmtlclBhdGgsIHtcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ1BhcmFsbGVsTWFya2VyJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBwb3NpdGlvbikge1xuICAgICAgdmFyIG1hcmtlclBhdGggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ01BUktFUl9QQVJBTExFTCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAoKGVsZW1lbnQud2lkdGggLyAyICsgcG9zaXRpb24ucGFyYWxsZWwpIC8gZWxlbWVudC53aWR0aCksXG4gICAgICAgICAgbXk6IChlbGVtZW50LmhlaWdodCAtIDIwKSAvIGVsZW1lbnQuaGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkcmF3TWFya2VyKCdwYXJhbGxlbCcsIHBhcmVudEdmeCwgbWFya2VyUGF0aCwge1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnU2VxdWVudGlhbE1hcmtlcic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgcG9zaXRpb24pIHtcbiAgICAgIHZhciBtYXJrZXJQYXRoID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdNQVJLRVJfU0VRVUVOVElBTCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAoKGVsZW1lbnQud2lkdGggLyAyICsgcG9zaXRpb24uc2VxKSAvIGVsZW1lbnQud2lkdGgpLFxuICAgICAgICAgIG15OiAoZWxlbWVudC5oZWlnaHQgLSAxOSkgLyBlbGVtZW50LmhlaWdodFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZHJhd01hcmtlcignc2VxdWVudGlhbCcsIHBhcmVudEdmeCwgbWFya2VyUGF0aCwge1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnQ29tcGVuc2F0aW9uTWFya2VyJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBwb3NpdGlvbikge1xuICAgICAgdmFyIG1hcmtlck1hdGggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ01BUktFUl9DT01QRU5TQVRJT04nLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogKChlbGVtZW50LndpZHRoIC8gMiArIHBvc2l0aW9uLmNvbXBlbnNhdGlvbikgLyBlbGVtZW50LndpZHRoKSxcbiAgICAgICAgICBteTogKGVsZW1lbnQuaGVpZ2h0IC0gMTMpIC8gZWxlbWVudC5oZWlnaHRcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRyYXdNYXJrZXIoJ2NvbXBlbnNhdGlvbicsIHBhcmVudEdmeCwgbWFya2VyTWF0aCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvcilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ0xvb3BNYXJrZXInOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIHBvc2l0aW9uKSB7XG4gICAgICB2YXIgbWFya2VyUGF0aCA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnTUFSS0VSX0xPT1AnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogKChlbGVtZW50LndpZHRoIC8gMiArIHBvc2l0aW9uLmxvb3ApIC8gZWxlbWVudC53aWR0aCksXG4gICAgICAgICAgbXk6IChlbGVtZW50LmhlaWdodCAtIDcpIC8gZWxlbWVudC5oZWlnaHRcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRyYXdNYXJrZXIoJ2xvb3AnLCBwYXJlbnRHZngsIG1hcmtlclBhdGgsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpLFxuICAgICAgICBzdHJva2VMaW5lY2FwOiAncm91bmQnLFxuICAgICAgICBzdHJva2VNaXRlcmxpbWl0OiAwLjVcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ0FkaG9jTWFya2VyJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBwb3NpdGlvbikge1xuICAgICAgdmFyIG1hcmtlclBhdGggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ01BUktFUl9BREhPQycsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAoKGVsZW1lbnQud2lkdGggLyAyICsgcG9zaXRpb24uYWRob2MpIC8gZWxlbWVudC53aWR0aCksXG4gICAgICAgICAgbXk6IChlbGVtZW50LmhlaWdodCAtIDE1KSAvIGVsZW1lbnQuaGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkcmF3TWFya2VyKCdhZGhvYycsIHBhcmVudEdmeCwgbWFya2VyUGF0aCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gYXR0YWNoVGFza01hcmtlcnMocGFyZW50R2Z4LCBlbGVtZW50LCB0YXNrTWFya2Vycykge1xuICAgIHZhciBvYmogPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcblxuICAgIHZhciBzdWJwcm9jZXNzID0gdGFza01hcmtlcnMgJiYgdGFza01hcmtlcnMuaW5kZXhPZignU3ViUHJvY2Vzc01hcmtlcicpICE9PSAtMTtcbiAgICB2YXIgcG9zaXRpb247XG5cbiAgICBpZiAoc3VicHJvY2Vzcykge1xuICAgICAgcG9zaXRpb24gPSB7XG4gICAgICAgIHNlcTogLTIxLFxuICAgICAgICBwYXJhbGxlbDogLTIyLFxuICAgICAgICBjb21wZW5zYXRpb246IC00MixcbiAgICAgICAgbG9vcDogLTE4LFxuICAgICAgICBhZGhvYzogMTBcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvc2l0aW9uID0ge1xuICAgICAgICBzZXE6IC0zLFxuICAgICAgICBwYXJhbGxlbDogLTYsXG4gICAgICAgIGNvbXBlbnNhdGlvbjogLTI3LFxuICAgICAgICBsb29wOiAwLFxuICAgICAgICBhZGhvYzogMTBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZm9yRWFjaCh0YXNrTWFya2VycywgZnVuY3Rpb24obWFya2VyKSB7XG4gICAgICByZW5kZXJlcihtYXJrZXIpKHBhcmVudEdmeCwgZWxlbWVudCwgcG9zaXRpb24pO1xuICAgIH0pO1xuXG4gICAgaWYgKG9iai5pc0ZvckNvbXBlbnNhdGlvbikge1xuICAgICAgcmVuZGVyZXIoJ0NvbXBlbnNhdGlvbk1hcmtlcicpKHBhcmVudEdmeCwgZWxlbWVudCwgcG9zaXRpb24pO1xuICAgIH1cblxuICAgIGlmIChvYmouJHR5cGUgPT09ICdicG1uOkFkSG9jU3ViUHJvY2VzcycpIHtcbiAgICAgIHJlbmRlcmVyKCdBZGhvY01hcmtlcicpKHBhcmVudEdmeCwgZWxlbWVudCwgcG9zaXRpb24pO1xuICAgIH1cblxuICAgIHZhciBsb29wQ2hhcmFjdGVyaXN0aWNzID0gb2JqLmxvb3BDaGFyYWN0ZXJpc3RpY3MsXG4gICAgICAgIGlzU2VxdWVudGlhbCA9IGxvb3BDaGFyYWN0ZXJpc3RpY3MgJiYgbG9vcENoYXJhY3RlcmlzdGljcy5pc1NlcXVlbnRpYWw7XG5cbiAgICBpZiAobG9vcENoYXJhY3RlcmlzdGljcykge1xuXG4gICAgICBpZiAoaXNTZXF1ZW50aWFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVuZGVyZXIoJ0xvb3BNYXJrZXInKShwYXJlbnRHZngsIGVsZW1lbnQsIHBvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzU2VxdWVudGlhbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmVuZGVyZXIoJ1BhcmFsbGVsTWFya2VyJykocGFyZW50R2Z4LCBlbGVtZW50LCBwb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1NlcXVlbnRpYWwgPT09IHRydWUpIHtcbiAgICAgICAgcmVuZGVyZXIoJ1NlcXVlbnRpYWxNYXJrZXInKShwYXJlbnRHZngsIGVsZW1lbnQsIHBvc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJEYXRhSXRlbUNvbGxlY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50KSB7XG5cbiAgICB2YXIgeVBvc2l0aW9uID0gKGVsZW1lbnQuaGVpZ2h0IC0gMTYpIC8gZWxlbWVudC5oZWlnaHQ7XG5cbiAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0RBVEFfT0JKRUNUX0NPTExFQ1RJT05fUEFUSCcsIHtcbiAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgIG14OiAwLjQ1MSxcbiAgICAgICAgbXk6IHlQb3NpdGlvblxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyogY29sbGVjdGlvbiBwYXRoICovIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgIHN0cm9rZVdpZHRoOiAyXG4gICAgfSk7XG4gIH1cblxuXG4gIC8vIGV4dGVuc2lvbiBBUEksIHVzZSBhdCB5b3VyIG93biByaXNrXG4gIHRoaXMuX2RyYXdQYXRoID0gZHJhd1BhdGg7XG5cbn1cblxuXG5pbmhlcml0cyhCcG1uUmVuZGVyZXIsIEJhc2VSZW5kZXJlcik7XG5cbkJwbW5SZW5kZXJlci4kaW5qZWN0ID0gW1xuICAnY29uZmlnLmJwbW5SZW5kZXJlcicsXG4gICdldmVudEJ1cycsXG4gICdzdHlsZXMnLFxuICAncGF0aE1hcCcsXG4gICdjYW52YXMnLFxuICAndGV4dFJlbmRlcmVyJ1xuXTtcblxuXG5CcG1uUmVuZGVyZXIucHJvdG90eXBlLmNhblJlbmRlciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOkJhc2VFbGVtZW50Jyk7XG59O1xuXG5CcG1uUmVuZGVyZXIucHJvdG90eXBlLmRyYXdTaGFwZSA9IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcbiAgdmFyIGggPSB0aGlzLmhhbmRsZXJzW3R5cGVdO1xuXG4gIC8qIGpzaGludCAtVzA0MCAqL1xuICByZXR1cm4gaChwYXJlbnRHZngsIGVsZW1lbnQpO1xufTtcblxuQnBtblJlbmRlcmVyLnByb3RvdHlwZS5kcmF3Q29ubmVjdGlvbiA9IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCkge1xuICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcbiAgdmFyIGggPSB0aGlzLmhhbmRsZXJzW3R5cGVdO1xuXG4gIC8qIGpzaGludCAtVzA0MCAqL1xuICByZXR1cm4gaChwYXJlbnRHZngsIGVsZW1lbnQpO1xufTtcblxuQnBtblJlbmRlcmVyLnByb3RvdHlwZS5nZXRTaGFwZVBhdGggPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkV2ZW50JykpIHtcbiAgICByZXR1cm4gZ2V0Q2lyY2xlUGF0aChlbGVtZW50KTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpBY3Rpdml0eScpKSB7XG4gICAgcmV0dXJuIGdldFJvdW5kUmVjdFBhdGgoZWxlbWVudCwgVEFTS19CT1JERVJfUkFESVVTKTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpHYXRld2F5JykpIHtcbiAgICByZXR1cm4gZ2V0RGlhbW9uZFBhdGgoZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZ2V0UmVjdFBhdGgoZWxlbWVudCk7XG59O1xuIiwiLyoqXG4gKiBNYXAgY29udGFpbmluZyBTVkcgcGF0aHMgbmVlZGVkIGJ5IEJwbW5SZW5kZXJlci5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQYXRoTWFwKCkge1xuXG4gIC8qKlxuICAgKiBDb250YWlucyBhIG1hcCBvZiBwYXRoIGVsZW1lbnRzXG4gICAqXG4gICAqIDxoMT5QYXRoIGRlZmluaXRpb248L2gxPlxuICAgKiBBIHBhcmFtZXRlcml6ZWQgcGF0aCBpcyBkZWZpbmVkIGxpa2UgdGhpczpcbiAgICogPHByZT5cbiAgICogJ0dBVEVXQVlfUEFSQUxMRUwnOiB7XG4gICAqICAgZDogJ20ge214fSx7bXl9IHtlLngwfSwwIDAse2UueDF9IHtlLngxfSwwIDAse2UueTB9IC17ZS54MX0sMCAwLHtlLnkxfSAnICtcbiAgICAgICAgICAnLXtlLngwfSwwIDAsLXtlLnkxfSAte2UueDF9LDAgMCwte2UueTB9IHtlLngxfSwwIHonLFxuICAgKiAgIGhlaWdodDogMTcuNSxcbiAgICogICB3aWR0aDogIDE3LjUsXG4gICAqICAgaGVpZ2h0RWxlbWVudHM6IFsyLjUsIDcuNV0sXG4gICAqICAgd2lkdGhFbGVtZW50czogWzIuNSwgNy41XVxuICAgKiB9XG4gICAqIDwvcHJlPlxuICAgKiA8cD5JdCdzIGltcG9ydGFudCB0byBzcGVjaWZ5IGEgY29ycmVjdCA8Yj5oZWlnaHQgYW5kIHdpZHRoPC9iPiBmb3IgdGhlIHBhdGggYXMgdGhlIHNjYWxpbmdcbiAgICogaXMgYmFzZWQgb24gdGhlIHJhdGlvIGJldHdlZW4gdGhlIHNwZWNpZmllZCBoZWlnaHQgYW5kIHdpZHRoIGluIHRoaXMgb2JqZWN0IGFuZCB0aGVcbiAgICogaGVpZ2h0IGFuZCB3aWR0aCB0aGF0IGlzIHNldCBhcyBzY2FsZSB0YXJnZXQgKE5vdGUgeCx5IGNvb3JkaW5hdGVzIHdpbGwgYmUgc2NhbGVkIHdpdGhcbiAgICogaW5kaXZpZHVhbCByYXRpb3MpLjwvcD5cbiAgICogPHA+VGhlICc8Yj5oZWlnaHRFbGVtZW50czwvYj4nIGFuZCAnPGI+d2lkdGhFbGVtZW50czwvYj4nIGFycmF5IG11c3QgY29udGFpbiB0aGUgdmFsdWVzIHRoYXQgd2lsbCBiZSBzY2FsZWQuXG4gICAqIFRoZSBzY2FsaW5nIGlzIGJhc2VkIG9uIHRoZSBjb21wdXRlZCByYXRpb3MuXG4gICAqIENvb3JkaW5hdGVzIG9uIHRoZSB5IGF4aXMgc2hvdWxkIGJlIGluIHRoZSA8Yj5oZWlnaHRFbGVtZW50PC9iPidzIGFycmF5LCB0aGV5IHdpbGwgYmUgc2NhbGVkIHVzaW5nXG4gICAqIHRoZSBjb21wdXRlZCByYXRpbyBjb2VmZmljaWVudC5cbiAgICogSW4gdGhlIHBhcmFtZXRlcml6ZWQgcGF0aCB0aGUgc2NhbGVkIHZhbHVlcyBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgJ2UnIG9iamVjdCBpbiB7fSBicmFja2V0cy5cbiAgICogICA8dWw+XG4gICAqICAgIDxsaT5UaGUgdmFsdWVzIGZvciB0aGUgeSBheGlzIGNhbiBiZSBhY2Nlc3NlZCBpbiB0aGUgcGF0aCBzdHJpbmcgdXNpbmcge2UueTB9LCB7ZS55MX0sIC4uLi48L2xpPlxuICAgKiAgICA8bGk+VGhlIHZhbHVlcyBmb3IgdGhlIHggYXhpcyBjYW4gYmUgYWNjZXNzZWQgaW4gdGhlIHBhdGggc3RyaW5nIHVzaW5nIHtlLngwfSwge2UueDF9LCAuLi4uPC9saT5cbiAgICogICA8L3VsPlxuICAgKiAgIFRoZSBudW1iZXJzIHgwLCB4MSByZXNwZWN0aXZlbHkgeTAsIHkxLCAuLi4gbWFwIHRvIHRoZSBjb3JyZXNwb25kaW5nIGFycmF5IGluZGV4LlxuICAgKiA8L3A+XG4gICAqL1xuICB0aGlzLnBhdGhNYXAgPSB7XG4gICAgJ0VWRU5UX01FU1NBR0UnOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gbCAwLHtlLnkxfSBsIHtlLngxfSwwIGwgMCwte2UueTF9IHogbCB7ZS54MH0se2UueTB9IGwge2UueDB9LC17ZS55MH0nLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAgMzYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzYsIDE0XSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFsxMC41LCAyMV1cbiAgICB9LFxuICAgICdFVkVOVF9TSUdOQUwnOiB7XG4gICAgICBkOiAnTSB7bXh9LHtteX0gbCB7ZS54MH0se2UueTB9IGwgLXtlLngxfSwwIFonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbMThdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzEwLCAyMF1cbiAgICB9LFxuICAgICdFVkVOVF9FU0NBTEFUSU9OJzoge1xuICAgICAgZDogJ00ge214fSx7bXl9IGwge2UueDB9LHtlLnkwfSBsIC17ZS54MH0sLXtlLnkxfSBsIC17ZS54MH0se2UueTF9IFonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbMjAsIDddLFxuICAgICAgd2lkdGhFbGVtZW50czogWzhdXG4gICAgfSxcbiAgICAnRVZFTlRfQ09ORElUSU9OQUwnOiB7XG4gICAgICBkOiAnTSB7ZS54MH0se2UueTB9IGwge2UueDF9LDAgbCAwLHtlLnkyfSBsIC17ZS54MX0sMCBaICcgK1xuICAgICAgICAgJ00ge2UueDJ9LHtlLnkzfSBsIHtlLngwfSwwICcgK1xuICAgICAgICAgJ00ge2UueDJ9LHtlLnk0fSBsIHtlLngwfSwwICcgK1xuICAgICAgICAgJ00ge2UueDJ9LHtlLnk1fSBsIHtlLngwfSwwICcgK1xuICAgICAgICAgJ00ge2UueDJ9LHtlLnk2fSBsIHtlLngwfSwwICcgK1xuICAgICAgICAgJ00ge2UueDJ9LHtlLnk3fSBsIHtlLngwfSwwICcgK1xuICAgICAgICAgJ00ge2UueDJ9LHtlLnk4fSBsIHtlLngwfSwwICcsXG4gICAgICBoZWlnaHQ6IDM2LFxuICAgICAgd2lkdGg6ICAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbOC41LCAxNC41LCAxOCwgMTEuNSwgMTQuNSwgMTcuNSwgMjAuNSwgMjMuNSwgMjYuNV0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiAgWzEwLjUsIDE0LjUsIDEyLjVdXG4gICAgfSxcbiAgICAnRVZFTlRfTElOSyc6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSAwLHtlLnkwfSAte2UueDF9LDAgMCx7ZS55MX0ge2UueDF9LDAgMCx7ZS55MH0ge2UueDB9LC17ZS55Mn0gLXtlLngwfSwte2UueTJ9IHonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbNC40Mzc1LCA2Ljc1LCA3LjgxMjVdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzkuODQzNzUsIDEzLjVdXG4gICAgfSxcbiAgICAnRVZFTlRfRVJST1InOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0ge2UueDB9LC17ZS55MH0ge2UueDF9LC17ZS55MX0ge2UueDJ9LHtlLnkyfSB7ZS54M30sLXtlLnkzfSAte2UueDR9LHtlLnk0fSAte2UueDV9LC17ZS55NX0geicsXG4gICAgICBoZWlnaHQ6IDM2LFxuICAgICAgd2lkdGg6IDM2LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFswLjAyMywgOC43MzcsIDguMTUxLCAxNi41NjQsIDEwLjU5MSwgOC43MTRdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzAuMDg1LCA2LjY3MiwgNi45NywgNC4yNzMsIDUuMzM3LCA2LjYzNl1cbiAgICB9LFxuICAgICdFVkVOVF9DQU5DRUxfNDUnOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gLXtlLngxfSwwIDAse2UueDB9IHtlLngxfSwwIDAse2UueTF9IHtlLngwfSwwICcgK1xuICAgICAgICAnMCwte2UueTF9IHtlLngxfSwwIDAsLXtlLnkwfSAte2UueDF9LDAgMCwte2UueTF9IC17ZS54MH0sMCB6JyxcbiAgICAgIGhlaWdodDogMzYsXG4gICAgICB3aWR0aDogMzYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzQuNzUsIDguNV0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbNC43NSwgOC41XVxuICAgIH0sXG4gICAgJ0VWRU5UX0NPTVBFTlNBVElPTic6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSB7ZS54MH0sLXtlLnkwfSAwLHtlLnkxfSB6IG0ge2UueDF9LC17ZS55Mn0ge2UueDJ9LC17ZS55M30gMCx7ZS55MX0gLXtlLngyfSwte2UueTN9IHonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbNi41LCAxMywgMC40LCA2LjFdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzksIDkuMywgOC43XVxuICAgIH0sXG4gICAgJ0VWRU5UX1RJTUVSX1dIJzoge1xuICAgICAgZDogJ00ge214fSx7bXl9IGwge2UueDB9LC17ZS55MH0gbSAte2UueDB9LHtlLnkwfSBsIHtlLngxfSx7ZS55MX0gJyxcbiAgICAgIGhlaWdodDogMzYsXG4gICAgICB3aWR0aDogIDM2LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFsxMCwgMl0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbMywgN11cbiAgICB9LFxuICAgICdFVkVOVF9USU1FUl9MSU5FJzoge1xuICAgICAgZDogICdNIHtteH0se215fSAnICtcbiAgICAgICAgICAnbSB7ZS54MH0se2UueTB9IGwgLXtlLngxfSx7ZS55MX0gJyxcbiAgICAgIGhlaWdodDogMzYsXG4gICAgICB3aWR0aDogIDM2LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFsxMCwgM10sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbMCwgMF1cbiAgICB9LFxuICAgICdFVkVOVF9NVUxUSVBMRSc6IHtcbiAgICAgIGQ6J20ge214fSx7bXl9IHtlLngxfSwte2UueTB9IHtlLngxfSx7ZS55MH0gLXtlLngwfSx7ZS55MX0gLXtlLngyfSwwIHonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAgMzYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzYuMjgwOTksIDEyLjU2MTk5XSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFszLjE0MDUsIDkuNDIxNDksIDEyLjU2MTk4XVxuICAgIH0sXG4gICAgJ0VWRU5UX1BBUkFMTEVMX01VTFRJUExFJzoge1xuICAgICAgZDonbSB7bXh9LHtteX0ge2UueDB9LDAgMCx7ZS55MX0ge2UueDF9LDAgMCx7ZS55MH0gLXtlLngxfSwwIDAse2UueTF9ICcgK1xuICAgICAgICAnLXtlLngwfSwwIDAsLXtlLnkxfSAte2UueDF9LDAgMCwte2UueTB9IHtlLngxfSwwIHonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAgMzYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzIuNTYyMjgsIDcuNjg2ODNdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzIuNTYyMjgsIDcuNjg2ODNdXG4gICAgfSxcbiAgICAnR0FURVdBWV9FWENMVVNJVkUnOiB7XG4gICAgICBkOidtIHtteH0se215fSB7ZS54MH0se2UueTB9IHtlLngxfSx7ZS55MH0ge2UueDJ9LDAge2UueDR9LHtlLnkyfSAnICtcbiAgICAgICAgICAgICAgICAgICAgJ3tlLng0fSx7ZS55MX0ge2UueDJ9LDAge2UueDF9LHtlLnkzfSB7ZS54MH0se2UueTN9ICcgK1xuICAgICAgICAgICAgICAgICAgICAne2UueDN9LDAge2UueDV9LHtlLnkxfSB7ZS54NX0se2UueTJ9IHtlLngzfSwwIHonLFxuICAgICAgaGVpZ2h0OiAxNy41LFxuICAgICAgd2lkdGg6ICAxNy41LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFs4LjUsIDYuNTMxMiwgLTYuNTMxMiwgLTguNV0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiAgWzYuNSwgLTYuNSwgMywgLTMsIDUsIC01XVxuICAgIH0sXG4gICAgJ0dBVEVXQVlfUEFSQUxMRUwnOiB7XG4gICAgICBkOidtIHtteH0se215fSAwLHtlLnkxfSAte2UueDF9LDAgMCx7ZS55MH0ge2UueDF9LDAgMCx7ZS55MX0ge2UueDB9LDAgJyArXG4gICAgICAgICcwLC17ZS55MX0ge2UueDF9LDAgMCwte2UueTB9IC17ZS54MX0sMCAwLC17ZS55MX0gLXtlLngwfSwwIHonLFxuICAgICAgaGVpZ2h0OiAzMCxcbiAgICAgIHdpZHRoOiAgMzAsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzUsIDEyLjVdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzUsIDEyLjVdXG4gICAgfSxcbiAgICAnR0FURVdBWV9FVkVOVF9CQVNFRCc6IHtcbiAgICAgIGQ6J20ge214fSx7bXl9IHtlLngwfSx7ZS55MH0ge2UueDB9LHtlLnkxfSB7ZS54MX0se2UueTJ9IHtlLngyfSwwIHonLFxuICAgICAgaGVpZ2h0OiAxMSxcbiAgICAgIHdpZHRoOiAgMTEsXG4gICAgICBoZWlnaHRFbGVtZW50czogWy02LCA2LCAxMiwgLTEyXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFs5LCAtMywgLTEyXVxuICAgIH0sXG4gICAgJ0dBVEVXQVlfQ09NUExFWCc6IHtcbiAgICAgIGQ6J20ge214fSx7bXl9IDAse2UueTB9IC17ZS54MH0sLXtlLnkxfSAte2UueDF9LHtlLnkyfSB7ZS54MH0se2UueTF9IC17ZS54Mn0sMCAwLHtlLnkzfSAnICtcbiAgICAgICAgJ3tlLngyfSwwICAte2UueDB9LHtlLnkxfSBsIHtlLngxfSx7ZS55Mn0ge2UueDB9LC17ZS55MX0gMCx7ZS55MH0ge2UueDN9LDAgMCwte2UueTB9IHtlLngwfSx7ZS55MX0gJyArXG4gICAgICAgICd7ZS54MX0sLXtlLnkyfSAte2UueDB9LC17ZS55MX0ge2UueDJ9LDAgMCwte2UueTN9IC17ZS54Mn0sMCB7ZS54MH0sLXtlLnkxfSAte2UueDF9LC17ZS55Mn0gJyArXG4gICAgICAgICcte2UueDB9LHtlLnkxfSAwLC17ZS55MH0gLXtlLngzfSwwIHonLFxuICAgICAgaGVpZ2h0OiAxNy4xMjUsXG4gICAgICB3aWR0aDogIDE3LjEyNSxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbNC44NzUsIDMuNDM3NSwgMi4xMjUsIDNdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzMuNDM3NSwgMi4xMjUsIDQuODc1LCAzXVxuICAgIH0sXG4gICAgJ0RBVEFfT0JKRUNUX1BBVEgnOiB7XG4gICAgICBkOidtIDAsMCB7ZS54MX0sMCB7ZS54MH0se2UueTB9IDAse2UueTF9IC17ZS54Mn0sMCAwLC17ZS55Mn0ge2UueDF9LDAgMCx7ZS55MH0ge2UueDB9LDAnLFxuICAgICAgaGVpZ2h0OiA2MSxcbiAgICAgIHdpZHRoOiAgNTEsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzEwLCA1MCwgNjBdLFxuICAgICAgd2lkdGhFbGVtZW50czogWzEwLCA0MCwgNTAsIDYwXVxuICAgIH0sXG4gICAgJ0RBVEFfT0JKRUNUX0NPTExFQ1RJT05fUEFUSCc6IHtcbiAgICAgIGQ6J20ge214fSwge215fSAnICtcbiAgICAgICAgJ20gIDAgMTUgIGwgMCAtMTUgJyArXG4gICAgICAgICdtICA0IDE1ICBsIDAgLTE1ICcgK1xuICAgICAgICAnbSAgNCAxNSAgbCAwIC0xNSAnLFxuICAgICAgaGVpZ2h0OiA2MSxcbiAgICAgIHdpZHRoOiAgNTEsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzEyXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFsxLCA2LCAxMiwgMTVdXG4gICAgfSxcbiAgICAnREFUQV9BUlJPVyc6IHtcbiAgICAgIGQ6J20gNSw5IDksMCAwLC0zIDUsNSAtNSw1IDAsLTMgLTksMCB6JyxcbiAgICAgIGhlaWdodDogNjEsXG4gICAgICB3aWR0aDogIDUxLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFtdLFxuICAgICAgd2lkdGhFbGVtZW50czogW11cbiAgICB9LFxuICAgICdEQVRBX1NUT1JFJzoge1xuICAgICAgZDonbSAge214fSx7bXl9ICcgK1xuICAgICAgICAnbCAgMCx7ZS55Mn0gJyArXG4gICAgICAgICdjICB7ZS54MH0se2UueTF9IHtlLngxfSx7ZS55MX0gIHtlLngyfSwwICcgK1xuICAgICAgICAnbCAgMCwte2UueTJ9ICcgK1xuICAgICAgICAnYyAte2UueDB9LC17ZS55MX0gLXtlLngxfSwte2UueTF9IC17ZS54Mn0sMCcgK1xuICAgICAgICAnYyAge2UueDB9LHtlLnkxfSB7ZS54MX0se2UueTF9ICB7ZS54Mn0sMCAnICtcbiAgICAgICAgJ20gIC17ZS54Mn0se2UueTB9JyArXG4gICAgICAgICdjICB7ZS54MH0se2UueTF9IHtlLngxfSx7ZS55MX0ge2UueDJ9LDAnICtcbiAgICAgICAgJ20gIC17ZS54Mn0se2UueTB9JyArXG4gICAgICAgICdjICB7ZS54MH0se2UueTF9IHtlLngxfSx7ZS55MX0gIHtlLngyfSwwJyxcbiAgICAgIGhlaWdodDogNjEsXG4gICAgICB3aWR0aDogIDYxLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFs3LCAxMCwgNDVdLFxuICAgICAgd2lkdGhFbGVtZW50czogIFsyLCA1OCwgNjBdXG4gICAgfSxcbiAgICAnVEVYVF9BTk5PVEFUSU9OJzoge1xuICAgICAgZDogJ20ge214fSwge215fSBtIDEwLDAgbCAtMTAsMCBsIDAse2UueTB9IGwgMTAsMCcsXG4gICAgICBoZWlnaHQ6IDMwLFxuICAgICAgd2lkdGg6IDEwLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFszMF0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbMTBdXG4gICAgfSxcbiAgICAnTUFSS0VSX1NVQl9QUk9DRVNTJzoge1xuICAgICAgZDogJ217bXh9LHtteX0gbSA3LDIgbCAwLDEwIG0gLTUsLTUgbCAxMCwwJyxcbiAgICAgIGhlaWdodDogMTAsXG4gICAgICB3aWR0aDogMTAsXG4gICAgICBoZWlnaHRFbGVtZW50czogW10sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbXVxuICAgIH0sXG4gICAgJ01BUktFUl9QQVJBTExFTCc6IHtcbiAgICAgIGQ6ICdte214fSx7bXl9IG0gMywyIGwgMCwxMCBtIDMsLTEwIGwgMCwxMCBtIDMsLTEwIGwgMCwxMCcsXG4gICAgICBoZWlnaHQ6IDEwLFxuICAgICAgd2lkdGg6IDEwLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFtdLFxuICAgICAgd2lkdGhFbGVtZW50czogW11cbiAgICB9LFxuICAgICdNQVJLRVJfU0VRVUVOVElBTCc6IHtcbiAgICAgIGQ6ICdte214fSx7bXl9IG0gMCwzIGwgMTAsMCBtIC0xMCwzIGwgMTAsMCBtIC0xMCwzIGwgMTAsMCcsXG4gICAgICBoZWlnaHQ6IDEwLFxuICAgICAgd2lkdGg6IDEwLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFtdLFxuICAgICAgd2lkdGhFbGVtZW50czogW11cbiAgICB9LFxuICAgICdNQVJLRVJfQ09NUEVOU0FUSU9OJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IDcsLTUgMCwxMCB6IG0gNy4xLC0wLjMgNi45LC00LjcgMCwxMCAtNi45LC00LjcgeicsXG4gICAgICBoZWlnaHQ6IDEwLFxuICAgICAgd2lkdGg6IDIxLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFtdLFxuICAgICAgd2lkdGhFbGVtZW50czogW11cbiAgICB9LFxuICAgICdNQVJLRVJfTE9PUCc6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBjIDMuNTI2OTc5LDAgNi4zODYxNjEsLTIuODI5ODU4IDYuMzg2MTYxLC02LjMyMDY2MSAwLC0zLjQ5MDgwNiAtMi44NTkxODIsLTYuMzIwNjYxICcgK1xuICAgICAgICAnLTYuMzg2MTYxLC02LjMyMDY2MSAtMy41MjY5NzgsMCAtNi4zODYxNiwyLjgyOTg1NSAtNi4zODYxNiw2LjMyMDY2MSAwLDEuNzQ1NDAyICcgK1xuICAgICAgICAnMC43MTQ3OTcsMy4zMjU1NjcgMS44NzA0NjMsNC40NjkzODEgMC41Nzc4MzQsMC41NzE5MDggMS4yNjU4ODUsMS4wMzQ3MjggMi4wMjk5MTYsMS4zNTQ1NyAnICtcbiAgICAgICAgJ2wgLTAuNzE4MTYzLC0zLjkwOTc5MyBtIDAuNzE4MTYzLDMuOTA5NzkzIC0zLjg4NTIxMSwwLjgwMjkwMicsXG4gICAgICBoZWlnaHQ6IDEzLjksXG4gICAgICB3aWR0aDogMTMuNyxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFtdXG4gICAgfSxcbiAgICAnTUFSS0VSX0FESE9DJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IG0gMC44NDQ2MSwyLjY0NDExIGMgMS4wNTUzMywtMS4yMzc4MDk5NiAyLjY0MzM3LC0yLjA3ODgyIDQuMjk2NTMsLTEuOTc5OTc5OTYgMi4wNTE2MywwLjA4MDUgJyArXG4gICAgICAgICczLjg1NTc5LDEuMTU4MDMgNS43NjA4MiwxLjc5MTA3IDEuMDYzODUsMC4zNDEzOTk5NiAyLjI0NDU0LDAuMTQzOCAzLjE4NzU5LC0wLjQzNzY3IDAuNjE3NDMsLTAuMzM2NDIgJyArXG4gICAgICAgICcxLjI3NzUsLTAuNjQwNzggMS43NTQyLC0xLjE3NTExIDAsMC41NjAyMyAwLDEuMTIwNDYgMCwxLjY4MDcgLTAuOTg3MDYsMC45NjIzNzk5NiAtMi4yOTc5MiwxLjYyMzkzOTk2ICcgK1xuICAgICAgICAnLTMuNjkxOCwxLjY2MTgxOTk2IC0xLjI0NDU5LDAuMDkyNyAtMi40NjY3MSwtMC4yNDkxIC0zLjU5NTA1LC0wLjc0ODEyIC0xLjM1Nzg5LC0wLjU1OTY1ICcgK1xuICAgICAgICAnLTIuNzUxMzMsLTEuMzM0MzY5OTYgLTQuMjcwMjcsLTEuMTgxMjE5OTYgLTEuMzc3NDEsMC4xNDYwMSAtMi40MTg0MiwxLjEzNjg1OTk2IC0zLjQ0Mjg4LDEuOTY3ODI5OTYgeicsXG4gICAgICBoZWlnaHQ6IDQsXG4gICAgICB3aWR0aDogMTUsXG4gICAgICBoZWlnaHRFbGVtZW50czogW10sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbXVxuICAgIH0sXG4gICAgJ1RBU0tfVFlQRV9TRU5EJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IGwgMCx7ZS55MX0gbCB7ZS54MX0sMCBsIDAsLXtlLnkxfSB6IGwge2UueDB9LHtlLnkwfSBsIHtlLngwfSwte2UueTB9JyxcbiAgICAgIGhlaWdodDogMTQsXG4gICAgICB3aWR0aDogIDIxLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFs2LCAxNF0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbMTAuNSwgMjFdXG4gICAgfSxcbiAgICAnVEFTS19UWVBFX1NDUklQVCc6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBjIDkuOTY2NTUzLC02LjI3Mjc2IC04LjAwMDkyNiwtNy45MTkzMiAyLjk2ODk2OCwtMTQuOTM4IGwgLTguODAyNzI4LDAgJyArXG4gICAgICAgICdjIC0xMC45Njk4OTQsNy4wMTg2OCA2Ljk5NzU4NSw4LjY2NTI0IC0yLjk2ODk2NywxNC45MzggeiAnICtcbiAgICAgICAgJ20gLTcsLTEyIGwgNSwwICcgK1xuICAgICAgICAnbSAtNC41LDMgbCA0LjUsMCAnICtcbiAgICAgICAgJ20gLTMsMyBsIDUsMCcgK1xuICAgICAgICAnbSAtNCwzIGwgNSwwJyxcbiAgICAgIGhlaWdodDogMTUsXG4gICAgICB3aWR0aDogIDEyLjYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWzYsIDE0XSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFsxMC41LCAyMV1cbiAgICB9LFxuICAgICdUQVNLX1RZUEVfVVNFUl8xJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IGMgMC45MDksLTAuODQ1IDEuNTk0LC0yLjA0OSAxLjU5NCwtMy4zODUgMCwtMi41NTQgLTEuODA1LC00LjYyMTk5OTk5ICcgK1xuICAgICAgICAnLTQuMzU3LC00LjYyMTk5OTk5IC0yLjU1MTk5OTk4LDAgLTQuMjg3OTk5OTgsMi4wNjc5OTk5OSAtNC4yODc5OTk5OCw0LjYyMTk5OTk5IDAsMS4zNDggJyArXG4gICAgICAgICcwLjk3NCwyLjU2MiAxLjg5NTk5OTk4LDMuNDA1IC0wLjUyODk5OTk4LDAuMTg3IC01LjY2OSwyLjA5NyAtNS43OTQsNC43NTYwMDA1IHYgNi43MTggJyArXG4gICAgICAgICdoIDE3IHYgLTYuNzE4IGMgMCwtMi4yOTgwMDA1IC01LjUyNzk5OTYsLTQuNTk1MDAwNSAtNi4wNTA5OTk2LC00Ljc3NjAwMDUgeicgK1xuICAgICAgICAnbSAtOCw2IGwgMCw1LjUgbSAxMSwwIGwgMCwtNSdcbiAgICB9LFxuICAgICdUQVNLX1RZUEVfVVNFUl8yJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IG0gMi4xNjIsMS4wMDkgYyAwLDIuNDQ3MDAwNSAtMi4xNTgsNC40MzEwMDA1IC00LjgyMSw0LjQzMTAwMDUgJyArXG4gICAgICAgICctMi42NjQ5OTk5OCwwIC00LjgyMiwtMS45ODEgLTQuODIyLC00LjQzMTAwMDUgJ1xuICAgIH0sXG4gICAgJ1RBU0tfVFlQRV9VU0VSXzMnOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gbSAtNi45LC0zLjgwIGMgMCwwIDIuMjUwOTk5OTgsLTIuMzU4IDQuMjczOTk5OTgsLTEuMTc3IDIuMDI0LDEuMTgxIDQuMjIxLDEuNTM3ICcgK1xuICAgICAgICAnNC4xMjQsMC45NjUgLTAuMDk4LC0wLjU3IC0wLjExNywtMy43OTA5OTk5OSAtNC4xOTEsLTQuMTM1OTk5OTkgLTMuNTc0OTk5OTgsMC4wMDEgJyArXG4gICAgICAgICctNC4yMDc5OTk5OCwzLjM2Njk5OTk5IC00LjIwNjk5OTk4LDQuMzQ3OTk5OTkgeidcbiAgICB9LFxuICAgICdUQVNLX1RZUEVfTUFOVUFMJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IGMgMC4yMzQsLTAuMDEgNS42MDQsMC4wMDggOC4wMjksMC4wMDQgMC44MDgsMCAxLjI3MSwtMC4xNzIgMS40MTcsLTAuNzUyIDAuMjI3LC0wLjg5OCAnICtcbiAgICAgICAgJy0wLjMzNCwtMS4zMTQgLTEuMzM4LC0xLjMxNiAtMi40NjcsLTAuMDEgLTcuODg2LC0wLjAwNCAtOC4xMDgsLTAuMDA0IC0wLjAxNCwtMC4wNzkgMC4wMTYsLTAuNTMzIDAsLTAuNjEgJyArXG4gICAgICAgICcwLjE5NSwtMC4wNDIgOC41MDcsMC4wMDYgOS42MTYsMC4wMDIgMC44NzcsLTAuMDA3IDEuMzUsLTAuNDM4IDEuMzUzLC0xLjIwOCAwLjAwMywtMC43NjggLTAuNDc5LC0xLjA5ICcgK1xuICAgICAgICAnLTEuMzUsLTEuMDkxIC0yLjk2OCwtMC4wMDIgLTkuNjE5LC0wLjAxMyAtOS42MTksLTAuMDEzIHYgLTAuNTkxIGMgMCwwIDUuMDUyLC0wLjAxNiA3LjIyNSwtMC4wMTYgJyArXG4gICAgICAgICcwLjg4OCwtMC4wMDIgMS4zNTQsLTAuNDE2IDEuMzUxLC0xLjE5MyAtMC4wMDYsLTAuNzYxIC0wLjQ5MiwtMS4xOTYgLTEuMzYxLC0xLjE5NiAtMy40NzMsLTAuMDA1ICcgK1xuICAgICAgICAnLTEwLjg2LC0wLjAwMyAtMTEuMDgyOTk5NSwtMC4wMDMgLTAuMDIyLC0wLjA0NyAtMC4wNDUsLTAuMDk0IC0wLjA2OSwtMC4xMzkgMC4zOTM5OTk1LC0wLjMxOSAnICtcbiAgICAgICAgJzIuMDQwOTk5NSwtMS42MjYgMi40MTQ5OTk1LC0yLjAxNyAwLjQ2OSwtMC40ODcwMDA1IDAuNTE5LC0xLjE2NTAwMDUgMC4xNjIsLTEuNjA0MDAwNSAtMC40MTQsLTAuNTExICcgK1xuICAgICAgICAnLTAuOTczLC0wLjUgLTEuNDgsLTAuMjM2IC0xLjQ2MDk5OTUsMC43NjQgLTYuNTk5OTk5NSwzLjY0MzAwMDUgLTcuNzMyOTk5NSw0LjI3MTAwMDUgLTAuOSwwLjQ5OSAnICtcbiAgICAgICAgJy0xLjUxNiwxLjI1MyAtMS44ODIsMi4xOSAtMC4zNzAwMDAwMiwwLjk1IC0wLjE3LDIuMDEgLTAuMTY2LDIuOTc5IDAuMDA0LDAuNzE4IC0wLjI3MzAwMDAyLDEuMzQ1ICcgK1xuICAgICAgICAnLTAuMDU1LDIuMDYzIDAuNjI5LDIuMDg3IDIuNDI1LDMuMzEyIDQuODU5LDMuMzE4IDQuNjE3OTk5NSwwLjAxNCA5LjIzNzk5OTUsLTAuMTM5IDEzLjg1Njk5OTUsLTAuMTU4ICcgK1xuICAgICAgICAnMC43NTUsLTAuMDA0IDEuMTcxLC0wLjMwMSAxLjE4MiwtMS4wMzMgMC4wMTIsLTAuNzU0IC0wLjQyMywtMC45NjkgLTEuMTgzLC0wLjk3MyAtMS43NzgsLTAuMDEgJyArXG4gICAgICAgICctNS44MjQsLTAuMDA0IC02LjA0LC0wLjAwNCAxMGUtNCwtMC4wODQgMC4wMDMsLTAuNTg2IDEwZS00LC0wLjY3IHonXG4gICAgfSxcbiAgICAnVEFTS19UWVBFX0lOU1RBTlRJQVRJTkdfU0VORCc6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBsIDAsOC40IGwgMTIuNiwwIGwgMCwtOC40IHogbCA2LjMsMy42IGwgNi4zLC0zLjYnXG4gICAgfSxcbiAgICAnVEFTS19UWVBFX1NFUlZJQ0UnOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gdiAtMS43MTMzNSBjIDAuMzUyMzI2LC0wLjA3MDUgMC43MDM5MzIsLTAuMTc4MzggMS4wNDc2MjgsLTAuMzIxMzMgJyArXG4gICAgICAgICcwLjM0NDQxNiwtMC4xNDQ2NSAwLjY2NTgyMiwtMC4zMjEzMyAwLjk2NjM3NywtMC41MjE0NSBsIDEuMTk0MzEsMS4xODAwNSAxLjU2NzQ4NywtMS41NzY4OCAnICtcbiAgICAgICAgJy0xLjE5NTAyOCwtMS4xODAxNCBjIDAuNDAzMzc2LC0wLjYxMzk0IDAuNjgzMDc5LC0xLjI5OTA4IDAuODI1NDQ3LC0yLjAxODI0IGwgMS42MjIxMzMsLTAuMDEgJyArXG4gICAgICAgICd2IC0yLjIxOTYgbCAtMS42MzY1MTQsMC4wMSBjIC0wLjA3MzMzLC0wLjM1MTUzIC0wLjE3ODMxOSwtMC43MDAyNCAtMC4zMjM1NjQsLTEuMDQzNzIgJyArXG4gICAgICAgICctMC4xNDUyNDQsLTAuMzQ0MDYgLTAuMzIxNDA3LC0wLjY2NDQgLTAuNTIyNzM1LC0wLjk2MjE3IGwgMS4xMzEwMzUsLTEuMTM2MzEgLTEuNTgzMzA1LC0xLjU2MjkzICcgK1xuICAgICAgICAnLTEuMTI5NTk4LDEuMTM1ODkgYyAtMC42MTQwNTIsLTAuNDAxMDggLTEuMzAyODgzLC0wLjY4MDkzIC0yLjAyMjYzMywtMC44MjI0NyBsIDAuMDA5MywtMS42MTg1MiAnICtcbiAgICAgICAgJ2ggLTIuMjQxMTczIGwgMC4wMDQyLDEuNjMxMjQgYyAtMC4zNTM3NjMsMC4wNzM2IC0wLjcwNTM2OSwwLjE3OTc3IC0xLjA0OTc4NSwwLjMyMzcxIC0wLjM0NDQxNSwwLjE0NDM3ICcgK1xuICAgICAgICAnLTAuNjY1MTAyLDAuMzIwOTIgLTAuOTYzNTAwNiwwLjUyMDQ2IGwgLTEuMTY5ODYyOCwtMS4xNTgyMyAtMS41NjY3NjkxLDEuNTc5MiAxLjE2ODQyNjUsMS4xNTY2OSAnICtcbiAgICAgICAgJ2MgLTAuNDAyNjU3MywwLjYxMjgzIC0wLjY4MzA4LDEuMjk3OTcgLTAuODI0NzI4NywyLjAxNzEzIGwgLTEuNjU4ODA0MSwwLjAwMyB2IDIuMjIxNzQgJyArXG4gICAgICAgICdsIDEuNjcyNDY0OCwtMC4wMDYgYyAwLjA3MzMyNywwLjM1MDc3IDAuMTc5NzU5OCwwLjcwMjQzIDAuMzI0Mjg1MSwxLjA0NDcyIDAuMTQ1MjQyOCwwLjM0NDQ4ICcgK1xuICAgICAgICAnMC4zMjE0MDY0LDAuNjY0NCAwLjUyMjczMzksMC45NjA2NiBsIC0xLjE5OTM0MzEsMS4xOTcyMyAxLjU4NDAyNTYsMS41NjAxMSAxLjE5NjQ2NjgsLTEuMTkzNDggJyArXG4gICAgICAgICdjIDAuNjE0MDUxNywwLjQwMzQ2IDEuMzAyODgyNywwLjY4MjMyIDIuMDIzMzUxNywwLjgyMzMxIGwgNy4xOWUtNCwxLjY5ODkyIGggMi4yMjY4NDggeiAnICtcbiAgICAgICAgJ20gMC4yMjE0NjIsLTMuOTk1NyBjIC0xLjc4ODk0OCwwLjc1MDIgLTMuODU3NiwtMC4wOTI4IC00LjYwOTcwNTUsLTEuODc0MzggLTAuNzUyMTA2NSwtMS43ODMyMSAnICtcbiAgICAgICAgJzAuMDkwNTk4LC0zLjg0NjI3IDEuODgwMjY0NSwtNC41OTYwNCAxLjc4ODIzLC0wLjc0OTM2IDMuODU2ODgxLDAuMDkyOSA0LjYwODk4NywxLjg3NDM3ICcgK1xuICAgICAgICAnMC43NTIxMDYsMS43ODE2NSAtMC4wOTA2LDMuODQ2MTIgLTEuODc5NTQ2LDQuNTk2MDUgeidcbiAgICB9LFxuICAgICdUQVNLX1RZUEVfU0VSVklDRV9GSUxMJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IGMgLTEuNzg4OTQ4LDAuNzUwMiAtMy44NTc2LC0wLjA5MjggLTQuNjA5NzA1NSwtMS44NzQzOCAtMC43NTIxMDY1LC0xLjc4MzIxICcgK1xuICAgICAgICAnMC4wOTA1OTgsLTMuODQ2MjcgMS44ODAyNjQ1LC00LjU5NjA0IDEuNzg4MjMsLTAuNzQ5MzYgMy44NTY4ODEsMC4wOTI5IDQuNjA4OTg3LDEuODc0MzcgJyArXG4gICAgICAgICcwLjc1MjEwNiwxLjc4MTY1IC0wLjA5MDYsMy44NDYxMiAtMS44Nzk1NDYsNC41OTYwNSB6J1xuICAgIH0sXG4gICAgJ1RBU0tfVFlQRV9CVVNJTkVTU19SVUxFX0hFQURFUic6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSAwLDQgMjAsMCAwLC00IHonXG4gICAgfSxcbiAgICAnVEFTS19UWVBFX0JVU0lORVNTX1JVTEVfTUFJTic6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSAwLDEyIDIwLDAgMCwtMTIgeicgK1xuICAgICAgICAnbSAwLDggbCAyMCwwICcgK1xuICAgICAgICAnbSAtMTMsLTQgbCAwLDgnXG4gICAgfSxcbiAgICAnTUVTU0FHRV9GTE9XX01BUktFUic6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBtIC0xMC41ICwtNyBsIDAsMTQgbCAyMSwwIGwgMCwtMTQgeiBsIDEwLjUsNiBsIDEwLjUsLTYnXG4gICAgfVxuICB9O1xuXG4gIHRoaXMuZ2V0UmF3UGF0aCA9IGZ1bmN0aW9uIGdldFJhd1BhdGgocGF0aElkKSB7XG4gICAgcmV0dXJuIHRoaXMucGF0aE1hcFtwYXRoSWRdLmQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNjYWxlcyB0aGUgcGF0aCB0byB0aGUgZ2l2ZW4gaGVpZ2h0IGFuZCB3aWR0aC5cbiAgICogPGgxPlVzZSBjYXNlPC9oMT5cbiAgICogPHA+VXNlIGNhc2UgaXMgdG8gc2NhbGUgdGhlIGNvbnRlbnQgb2YgZWxlbWVudHMgKGV2ZW50LCBnYXRld2F5cykgYmFzZWRcbiAgICogb24gdGhlIGVsZW1lbnQgYm91bmRpbmcgYm94J3Mgc2l6ZS5cbiAgICogPC9wPlxuICAgKiA8aDE+V2h5IG5vdCB0cmFuc2Zvcm08L2gxPlxuICAgKiA8cD5TY2FsaW5nIGEgcGF0aCB3aXRoIHRyYW5zZm9ybSgpIHdpbGwgYWxzbyBzY2FsZSB0aGUgc3Ryb2tlIGFuZCBJRSBkb2VzIG5vdCBzdXBwb3J0XG4gICAqIHRoZSBvcHRpb24gJ25vbi1zY2FsaW5nLXN0cm9rZScgdG8gcHJldmVudCB0aGlzLlxuICAgKiBBbHNvIHRoZXJlIGFyZSB1c2UgY2FzZXMgd2hlcmUgb25seSBzb21lIHBhcnRzIG9mIGEgcGF0aCBzaG91bGQgYmVcbiAgICogc2NhbGVkLjwvcD5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhJZCBUaGUgSUQgb2YgdGhlIHBhdGguXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbSA8cD5cbiAgICogICBFeGFtcGxlIHBhcmFtIG9iamVjdCBzY2FsZXMgdGhlIHBhdGggdG8gNjAlIHNpemUgb2YgdGhlIGNvbnRhaW5lciAoZGF0YS53aWR0aCwgZGF0YS5oZWlnaHQpLlxuICAgKiAgIDxwcmU+XG4gICAqICAge1xuICAgKiAgICAgeFNjYWxlRmFjdG9yOiAwLjYsXG4gICAqICAgICB5U2NhbGVGYWN0b3I6MC42LFxuICAgKiAgICAgY29udGFpbmVyV2lkdGg6IGRhdGEud2lkdGgsXG4gICAqICAgICBjb250YWluZXJIZWlnaHQ6IGRhdGEuaGVpZ2h0LFxuICAgKiAgICAgcG9zaXRpb246IHtcbiAgICogICAgICAgbXg6IDAuNDYsXG4gICAqICAgICAgIG15OiAwLjIsXG4gICAqICAgICB9XG4gICAqICAgfVxuICAgKiAgIDwvcHJlPlxuICAgKiAgIDx1bD5cbiAgICogICAgPGxpPnRhcmdldHBhdGh3aWR0aCA9IHhTY2FsZUZhY3RvciAqIGNvbnRhaW5lcldpZHRoPC9saT5cbiAgICogICAgPGxpPnRhcmdldHBhdGhoZWlnaHQgPSB5U2NhbGVGYWN0b3IgKiBjb250YWluZXJIZWlnaHQ8L2xpPlxuICAgKiAgICA8bGk+UG9zaXRpb24gaXMgdXNlZCB0byBzZXQgdGhlIHN0YXJ0aW5nIGNvb3JkaW5hdGUgb2YgdGhlIHBhdGguIE0gaXMgY29tcHV0ZWQ6XG4gICAgKiAgICA8dWw+XG4gICAgKiAgICAgIDxsaT5wb3NpdGlvbi54ICogY29udGFpbmVyV2lkdGg8L2xpPlxuICAgICogICAgICA8bGk+cG9zaXRpb24ueSAqIGNvbnRhaW5lckhlaWdodDwvbGk+XG4gICAgKiAgICA8L3VsPlxuICAgICogICAgQ2VudGVyIG9mIHRoZSBjb250YWluZXIgPHByZT4gcG9zaXRpb246IHtcbiAgICogICAgICAgbXg6IDAuNSxcbiAgICogICAgICAgbXk6IDAuNSxcbiAgICogICAgIH08L3ByZT5cbiAgICogICAgIFVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBjb250YWluZXJcbiAgICogICAgIDxwcmU+IHBvc2l0aW9uOiB7XG4gICAqICAgICAgIG14OiAwLjAsXG4gICAqICAgICAgIG15OiAwLjAsXG4gICAqICAgICB9PC9wcmU+XG4gICAqICAgIDwvbGk+XG4gICAqICAgPC91bD5cbiAgICogPC9wPlxuICAgKlxuICAgKi9cbiAgdGhpcy5nZXRTY2FsZWRQYXRoID0gZnVuY3Rpb24gZ2V0U2NhbGVkUGF0aChwYXRoSWQsIHBhcmFtKSB7XG4gICAgdmFyIHJhd1BhdGggPSB0aGlzLnBhdGhNYXBbcGF0aElkXTtcblxuICAgIC8vIHBvc2l0aW9uaW5nXG4gICAgLy8gY29tcHV0ZSB0aGUgc3RhcnQgcG9pbnQgb2YgdGhlIHBhdGhcbiAgICB2YXIgbXgsIG15O1xuXG4gICAgaWYgKHBhcmFtLmFic3Bvcykge1xuICAgICAgbXggPSBwYXJhbS5hYnNwb3MueDtcbiAgICAgIG15ID0gcGFyYW0uYWJzcG9zLnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG14ID0gcGFyYW0uY29udGFpbmVyV2lkdGggKiBwYXJhbS5wb3NpdGlvbi5teDtcbiAgICAgIG15ID0gcGFyYW0uY29udGFpbmVySGVpZ2h0ICogcGFyYW0ucG9zaXRpb24ubXk7XG4gICAgfVxuXG4gICAgdmFyIGNvb3JkaW5hdGVzID0ge307IC8vIG1hcCBmb3IgdGhlIHNjYWxlZCBjb29yZGluYXRlc1xuICAgIGlmIChwYXJhbS5wb3NpdGlvbikge1xuXG4gICAgICAvLyBwYXRoXG4gICAgICB2YXIgaGVpZ2h0UmF0aW8gPSAocGFyYW0uY29udGFpbmVySGVpZ2h0IC8gcmF3UGF0aC5oZWlnaHQpICogcGFyYW0ueVNjYWxlRmFjdG9yO1xuICAgICAgdmFyIHdpZHRoUmF0aW8gPSAocGFyYW0uY29udGFpbmVyV2lkdGggLyByYXdQYXRoLndpZHRoKSAqIHBhcmFtLnhTY2FsZUZhY3RvcjtcblxuXG4gICAgICAvLyBBcHBseSBoZWlnaHQgcmF0aW9cbiAgICAgIGZvciAodmFyIGhlaWdodEluZGV4ID0gMDsgaGVpZ2h0SW5kZXggPCByYXdQYXRoLmhlaWdodEVsZW1lbnRzLmxlbmd0aDsgaGVpZ2h0SW5kZXgrKykge1xuICAgICAgICBjb29yZGluYXRlc1sneScgKyBoZWlnaHRJbmRleF0gPSByYXdQYXRoLmhlaWdodEVsZW1lbnRzW2hlaWdodEluZGV4XSAqIGhlaWdodFJhdGlvO1xuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSB3aWR0aCByYXRpb1xuICAgICAgZm9yICh2YXIgd2lkdGhJbmRleCA9IDA7IHdpZHRoSW5kZXggPCByYXdQYXRoLndpZHRoRWxlbWVudHMubGVuZ3RoOyB3aWR0aEluZGV4KyspIHtcbiAgICAgICAgY29vcmRpbmF0ZXNbJ3gnICsgd2lkdGhJbmRleF0gPSByYXdQYXRoLndpZHRoRWxlbWVudHNbd2lkdGhJbmRleF0gKiB3aWR0aFJhdGlvO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFwcGx5IHZhbHVlIHRvIHJhdyBwYXRoXG4gICAgdmFyIHBhdGggPSBmb3JtYXQoXG4gICAgICByYXdQYXRoLmQsIHtcbiAgICAgICAgbXg6IG14LFxuICAgICAgICBteTogbXksXG4gICAgICAgIGU6IGNvb3JkaW5hdGVzXG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gcGF0aDtcbiAgfTtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8vIGNvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hZG9iZS13ZWJwbGF0Zm9ybS9TbmFwLnN2Zy9ibG9iL21hc3Rlci9zcmMvc3ZnLmpzXG52YXIgdG9rZW5SZWdleCA9IC9cXHsoW159XSspXFx9L2csXG4gICAgb2JqTm90YXRpb25SZWdleCA9IC8oPzooPzpefFxcLikoLis/KSg/PVxcW3xcXC58JHxcXCgpfFxcWygnfFwiKSguKz8pXFwyXFxdKShcXChcXCkpPy9nOyAvLyBtYXRjaGVzIC54eHh4eCBvciBbXCJ4eHh4eFwiXSB0byBydW4gb3ZlciBvYmplY3QgcHJvcGVydGllc1xuXG5mdW5jdGlvbiByZXBsYWNlcihhbGwsIGtleSwgb2JqKSB7XG4gIHZhciByZXMgPSBvYmo7XG4gIGtleS5yZXBsYWNlKG9iak5vdGF0aW9uUmVnZXgsIGZ1bmN0aW9uKGFsbCwgbmFtZSwgcXVvdGUsIHF1b3RlZE5hbWUsIGlzRnVuYykge1xuICAgIG5hbWUgPSBuYW1lIHx8IHF1b3RlZE5hbWU7XG4gICAgaWYgKHJlcykge1xuICAgICAgaWYgKG5hbWUgaW4gcmVzKSB7XG4gICAgICAgIHJlcyA9IHJlc1tuYW1lXTtcbiAgICAgIH1cbiAgICAgIHR5cGVvZiByZXMgPT0gJ2Z1bmN0aW9uJyAmJiBpc0Z1bmMgJiYgKHJlcyA9IHJlcygpKTtcbiAgICB9XG4gIH0pO1xuICByZXMgPSAocmVzID09IG51bGwgfHwgcmVzID09IG9iaiA/IGFsbCA6IHJlcykgKyAnJztcblxuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBmb3JtYXQoc3RyLCBvYmopIHtcbiAgcmV0dXJuIFN0cmluZyhzdHIpLnJlcGxhY2UodG9rZW5SZWdleCwgZnVuY3Rpb24oYWxsLCBrZXkpIHtcbiAgICByZXR1cm4gcmVwbGFjZXIoYWxsLCBrZXksIG9iaik7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgVGV4dFV0aWwgZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9UZXh0JztcblxudmFyIERFRkFVTFRfRk9OVF9TSVpFID0gMTI7XG52YXIgTElORV9IRUlHSFRfUkFUSU8gPSAxLjI7XG5cbnZhciBNSU5fVEVYVF9BTk5PVEFUSU9OX0hFSUdIVCA9IDMwO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRleHRSZW5kZXJlcihjb25maWcpIHtcblxuICB2YXIgZGVmYXVsdFN0eWxlID0gYXNzaWduKHtcbiAgICBmb250RmFtaWx5OiAnQXJpYWwsIHNhbnMtc2VyaWYnLFxuICAgIGZvbnRTaXplOiBERUZBVUxUX0ZPTlRfU0laRSxcbiAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcbiAgICBsaW5lSGVpZ2h0OiBMSU5FX0hFSUdIVF9SQVRJT1xuICB9LCBjb25maWcgJiYgY29uZmlnLmRlZmF1bHRTdHlsZSB8fCB7fSk7XG5cbiAgdmFyIGZvbnRTaXplID0gcGFyc2VJbnQoZGVmYXVsdFN0eWxlLmZvbnRTaXplLCAxMCkgLSAxO1xuXG4gIHZhciBleHRlcm5hbFN0eWxlID0gYXNzaWduKHt9LCBkZWZhdWx0U3R5bGUsIHtcbiAgICBmb250U2l6ZTogZm9udFNpemVcbiAgfSwgY29uZmlnICYmIGNvbmZpZy5leHRlcm5hbFN0eWxlIHx8IHt9KTtcblxuICB2YXIgdGV4dFV0aWwgPSBuZXcgVGV4dFV0aWwoe1xuICAgIHN0eWxlOiBkZWZhdWx0U3R5bGVcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbmV3IGJvdW5kcyBvZiBhbiBleHRlcm5hbGx5IHJlbmRlcmVkLFxuICAgKiBsYXlvdXRlZCBsYWJlbC5cbiAgICpcbiAgICogQHBhcmFtICB7Qm91bmRzfSBib3VuZHNcbiAgICogQHBhcmFtICB7c3RyaW5nfSB0ZXh0XG4gICAqXG4gICAqIEByZXR1cm4ge0JvdW5kc31cbiAgICovXG4gIHRoaXMuZ2V0RXh0ZXJuYWxMYWJlbEJvdW5kcyA9IGZ1bmN0aW9uKGJvdW5kcywgdGV4dCkge1xuXG4gICAgdmFyIGxheW91dGVkRGltZW5zaW9ucyA9IHRleHRVdGlsLmdldERpbWVuc2lvbnModGV4dCwge1xuICAgICAgYm94OiB7XG4gICAgICAgIHdpZHRoOiA5MCxcbiAgICAgICAgaGVpZ2h0OiAzMCxcbiAgICAgICAgeDogYm91bmRzLndpZHRoIC8gMiArIGJvdW5kcy54LFxuICAgICAgICB5OiBib3VuZHMuaGVpZ2h0IC8gMiArIGJvdW5kcy55XG4gICAgICB9LFxuICAgICAgc3R5bGU6IGV4dGVybmFsU3R5bGVcbiAgICB9KTtcblxuICAgIC8vIHJlc2l6ZSBsYWJlbCBzaGFwZSB0byBmaXQgbGFiZWwgdGV4dFxuICAgIHJldHVybiB7XG4gICAgICB4OiBNYXRoLnJvdW5kKGJvdW5kcy54ICsgYm91bmRzLndpZHRoIC8gMiAtIGxheW91dGVkRGltZW5zaW9ucy53aWR0aCAvIDIpLFxuICAgICAgeTogTWF0aC5yb3VuZChib3VuZHMueSksXG4gICAgICB3aWR0aDogTWF0aC5jZWlsKGxheW91dGVkRGltZW5zaW9ucy53aWR0aCksXG4gICAgICBoZWlnaHQ6IE1hdGguY2VpbChsYXlvdXRlZERpbWVuc2lvbnMuaGVpZ2h0KVxuICAgIH07XG5cbiAgfTtcblxuICAvKipcbiAgICogR2V0IHRoZSBuZXcgYm91bmRzIG9mIHRleHQgYW5ub3RhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtICB7Qm91bmRzfSBib3VuZHNcbiAgICogQHBhcmFtICB7c3RyaW5nfSB0ZXh0XG4gICAqXG4gICAqIEByZXR1cm4ge0JvdW5kc31cbiAgICovXG4gIHRoaXMuZ2V0VGV4dEFubm90YXRpb25Cb3VuZHMgPSBmdW5jdGlvbihib3VuZHMsIHRleHQpIHtcblxuICAgIHZhciBsYXlvdXRlZERpbWVuc2lvbnMgPSB0ZXh0VXRpbC5nZXREaW1lbnNpb25zKHRleHQsIHtcbiAgICAgIGJveDogYm91bmRzLFxuICAgICAgc3R5bGU6IGRlZmF1bHRTdHlsZSxcbiAgICAgIGFsaWduOiAnbGVmdC10b3AnLFxuICAgICAgcGFkZGluZzogNVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGJvdW5kcy54LFxuICAgICAgeTogYm91bmRzLnksXG4gICAgICB3aWR0aDogYm91bmRzLndpZHRoLFxuICAgICAgaGVpZ2h0OiBNYXRoLm1heChNSU5fVEVYVF9BTk5PVEFUSU9OX0hFSUdIVCwgTWF0aC5yb3VuZChsYXlvdXRlZERpbWVuc2lvbnMuaGVpZ2h0KSlcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBsYXlvdXRlZCB0ZXh0IGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICpcbiAgICogQHJldHVybiB7U1ZHRWxlbWVudH0gcmVuZGVyZWQgdGV4dFxuICAgKi9cbiAgdGhpcy5jcmVhdGVUZXh0ID0gZnVuY3Rpb24odGV4dCwgb3B0aW9ucykge1xuICAgIHJldHVybiB0ZXh0VXRpbC5jcmVhdGVUZXh0KHRleHQsIG9wdGlvbnMgfHwge30pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgZGVmYXVsdCB0ZXh0IHN0eWxlLlxuICAgKi9cbiAgdGhpcy5nZXREZWZhdWx0U3R5bGUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdFN0eWxlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGV4dGVybmFsIHRleHQgc3R5bGUuXG4gICAqL1xuICB0aGlzLmdldEV4dGVybmFsU3R5bGUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZXh0ZXJuYWxTdHlsZTtcbiAgfTtcblxufVxuXG5UZXh0UmVuZGVyZXIuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy50ZXh0UmVuZGVyZXInXG5dOyIsImltcG9ydCBCcG1uUmVuZGVyZXIgZnJvbSAnLi9CcG1uUmVuZGVyZXInO1xuaW1wb3J0IFRleHRSZW5kZXJlciBmcm9tICcuL1RleHRSZW5kZXJlcic7XG5cbmltcG9ydCBQYXRoTWFwIGZyb20gJy4vUGF0aE1hcCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ2JwbW5SZW5kZXJlcicgXSxcbiAgYnBtblJlbmRlcmVyOiBbICd0eXBlJywgQnBtblJlbmRlcmVyIF0sXG4gIHRleHRSZW5kZXJlcjogWyAndHlwZScsIFRleHRSZW5kZXJlciBdLFxuICBwYXRoTWFwOiBbICd0eXBlJywgUGF0aE1hcCBdXG59O1xuIiwiaW1wb3J0IHsgZ2V0TmV3U2hhcGVQb3NpdGlvbiB9IGZyb20gJy4vQnBtbkF1dG9QbGFjZVV0aWwnO1xuXG5cbi8qKlxuICogQlBNTiBhdXRvLXBsYWNlIGJlaGF2aW9yLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEF1dG9QbGFjZShldmVudEJ1cykge1xuICBldmVudEJ1cy5vbignYXV0b1BsYWNlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlO1xuXG4gICAgcmV0dXJuIGdldE5ld1NoYXBlUG9zaXRpb24oc291cmNlLCBzaGFwZSk7XG4gIH0pO1xufVxuXG5BdXRvUGxhY2UuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdOyIsImltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuaW1wb3J0IHsgaXNBbnkgfSBmcm9tICcuLi9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldE1pZCxcbiAgYXNUUkJMLFxuICBnZXRPcmllbnRhdGlvblxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIGZpbmRGcmVlUG9zaXRpb24sXG4gIGdlbmVyYXRlR2V0TmV4dFBvc2l0aW9uLFxuICBnZXRDb25uZWN0ZWREaXN0YW5jZVxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXBsYWNlL0F1dG9QbGFjZVV0aWwnO1xuXG5cbi8qKlxuICogRmluZCB0aGUgbmV3IHBvc2l0aW9uIGZvciB0aGUgdGFyZ2V0IGVsZW1lbnQgdG9cbiAqIGNvbm5lY3QgdG8gc291cmNlLlxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5TaGFwZX0gc291cmNlXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuU2hhcGV9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld1NoYXBlUG9zaXRpb24oc291cmNlLCBlbGVtZW50KSB7XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcbiAgICByZXR1cm4gZ2V0VGV4dEFubm90YXRpb25Qb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKGlzQW55KGVsZW1lbnQsIFsgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScgXSkpIHtcbiAgICByZXR1cm4gZ2V0RGF0YUVsZW1lbnRQb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkZsb3dOb2RlJykpIHtcbiAgICByZXR1cm4gZ2V0Rmxvd05vZGVQb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQpO1xuICB9XG59XG5cbi8qKlxuICogQWx3YXlzIHRyeSB0byBwbGFjZSBlbGVtZW50IHJpZ2h0IG9mIHNvdXJjZTtcbiAqIGNvbXB1dGUgYWN0dWFsIGRpc3RhbmNlIGZyb20gcHJldmlvdXMgbm9kZXMgaW4gZmxvdy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZsb3dOb2RlUG9zaXRpb24oc291cmNlLCBlbGVtZW50KSB7XG5cbiAgdmFyIHNvdXJjZVRyYmwgPSBhc1RSQkwoc291cmNlKTtcbiAgdmFyIHNvdXJjZU1pZCA9IGdldE1pZChzb3VyY2UpO1xuXG4gIHZhciBob3Jpem9udGFsRGlzdGFuY2UgPSBnZXRDb25uZWN0ZWREaXN0YW5jZShzb3VyY2UsIHtcbiAgICBmaWx0ZXI6IGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgIHJldHVybiBpcyhjb25uZWN0aW9uLCAnYnBtbjpTZXF1ZW5jZUZsb3cnKTtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciBtYXJnaW4gPSAzMCxcbiAgICAgIG1pbkRpc3RhbmNlID0gODAsXG4gICAgICBvcmllbnRhdGlvbiA9ICdsZWZ0JztcblxuICBpZiAoaXMoc291cmNlLCAnYnBtbjpCb3VuZGFyeUV2ZW50JykpIHtcbiAgICBvcmllbnRhdGlvbiA9IGdldE9yaWVudGF0aW9uKHNvdXJjZSwgc291cmNlLmhvc3QsIC0yNSk7XG5cbiAgICBpZiAob3JpZW50YXRpb24uaW5kZXhPZigndG9wJykgIT09IC0xKSB7XG4gICAgICBtYXJnaW4gKj0gLTE7XG4gICAgfVxuICB9XG5cbiAgdmFyIHBvc2l0aW9uID0ge1xuICAgIHg6IHNvdXJjZVRyYmwucmlnaHQgKyBob3Jpem9udGFsRGlzdGFuY2UgKyBlbGVtZW50LndpZHRoIC8gMixcbiAgICB5OiBzb3VyY2VNaWQueSArIGdldFZlcnRpY2FsRGlzdGFuY2Uob3JpZW50YXRpb24sIG1pbkRpc3RhbmNlKVxuICB9O1xuXG4gIHZhciBuZXh0UG9zaXRpb25EaXJlY3Rpb24gPSB7XG4gICAgeToge1xuICAgICAgbWFyZ2luOiBtYXJnaW4sXG4gICAgICBtaW5EaXN0YW5jZTogbWluRGlzdGFuY2VcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGZpbmRGcmVlUG9zaXRpb24oc291cmNlLCBlbGVtZW50LCBwb3NpdGlvbiwgZ2VuZXJhdGVHZXROZXh0UG9zaXRpb24obmV4dFBvc2l0aW9uRGlyZWN0aW9uKSk7XG59XG5cblxuZnVuY3Rpb24gZ2V0VmVydGljYWxEaXN0YW5jZShvcmllbnRhdGlvbiwgbWluRGlzdGFuY2UpIHtcbiAgaWYgKG9yaWVudGF0aW9uLmluZGV4T2YoJ3RvcCcpICE9IC0xKSB7XG4gICAgcmV0dXJuIC0xICogbWluRGlzdGFuY2U7XG4gIH0gZWxzZSBpZiAob3JpZW50YXRpb24uaW5kZXhPZignYm90dG9tJykgIT0gLTEpIHtcbiAgICByZXR1cm4gbWluRGlzdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuXG4vKipcbiAqIEFsd2F5cyB0cnkgdG8gcGxhY2UgdGV4dCBhbm5vdGF0aW9ucyB0b3AgcmlnaHQgb2Ygc291cmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGV4dEFubm90YXRpb25Qb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQpIHtcblxuICB2YXIgc291cmNlVHJibCA9IGFzVFJCTChzb3VyY2UpO1xuXG4gIHZhciBwb3NpdGlvbiA9IHtcbiAgICB4OiBzb3VyY2VUcmJsLnJpZ2h0ICsgZWxlbWVudC53aWR0aCAvIDIsXG4gICAgeTogc291cmNlVHJibC50b3AgLSA1MCAtIGVsZW1lbnQuaGVpZ2h0IC8gMlxuICB9O1xuXG4gIHZhciBuZXh0UG9zaXRpb25EaXJlY3Rpb24gPSB7XG4gICAgeToge1xuICAgICAgbWFyZ2luOiAtMzAsXG4gICAgICBtaW5EaXN0YW5jZTogMjBcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGZpbmRGcmVlUG9zaXRpb24oc291cmNlLCBlbGVtZW50LCBwb3NpdGlvbiwgZ2VuZXJhdGVHZXROZXh0UG9zaXRpb24obmV4dFBvc2l0aW9uRGlyZWN0aW9uKSk7XG59XG5cblxuLyoqXG4gKiBBbHdheXMgcHV0IGVsZW1lbnQgYm90dG9tIHJpZ2h0IG9mIHNvdXJjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGFFbGVtZW50UG9zaXRpb24oc291cmNlLCBlbGVtZW50KSB7XG5cbiAgdmFyIHNvdXJjZVRyYmwgPSBhc1RSQkwoc291cmNlKTtcblxuICB2YXIgcG9zaXRpb24gPSB7XG4gICAgeDogc291cmNlVHJibC5yaWdodCAtIDEwICsgZWxlbWVudC53aWR0aCAvIDIsXG4gICAgeTogc291cmNlVHJibC5ib3R0b20gKyA0MCArIGVsZW1lbnQud2lkdGggLyAyXG4gIH07XG5cbiAgdmFyIG5leHRQb3NpdGlvbkRpcmVjdGlvbiA9IHtcbiAgICB4OiB7XG4gICAgICBtYXJnaW46IDMwLFxuICAgICAgbWluRGlzdGFuY2U6IDMwXG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBmaW5kRnJlZVBvc2l0aW9uKHNvdXJjZSwgZWxlbWVudCwgcG9zaXRpb24sIGdlbmVyYXRlR2V0TmV4dFBvc2l0aW9uKG5leHRQb3NpdGlvbkRpcmVjdGlvbikpO1xufSIsImltcG9ydCBBdXRvUGxhY2VNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvYXV0by1wbGFjZSc7XG5cbmltcG9ydCBCcG1uQXV0b1BsYWNlIGZyb20gJy4vQnBtbkF1dG9QbGFjZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFsgQXV0b1BsYWNlTW9kdWxlIF0sXG4gIF9faW5pdF9fOiBbICdicG1uQXV0b1BsYWNlJyBdLFxuICBicG1uQXV0b1BsYWNlOiBbICd0eXBlJywgQnBtbkF1dG9QbGFjZSBdXG59OyIsImltcG9ydCBBdXRvUmVzaXplIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcmVzaXplL0F1dG9SZXNpemUnO1xuXG5pbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuXG4vKipcbiAqIFN1YiBjbGFzcyBvZiB0aGUgQXV0b1Jlc2l6ZSBtb2R1bGUgd2hpY2ggaW1wbGVtZW50cyBhIEJQTU5cbiAqIHNwZWNpZmljIHJlc2l6ZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkF1dG9SZXNpemUoaW5qZWN0b3IpIHtcblxuICBpbmplY3Rvci5pbnZva2UoQXV0b1Jlc2l6ZSwgdGhpcyk7XG59XG5cbkJwbW5BdXRvUmVzaXplLiRpbmplY3QgPSBbXG4gICdpbmplY3Rvcidcbl07XG5cbmluaGVyaXRzKEJwbW5BdXRvUmVzaXplLCBBdXRvUmVzaXplKTtcblxuXG4vKipcbiAqIFJlc2l6ZSBzaGFwZXMgYW5kIGxhbmVzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSB0YXJnZXRcbiAqIEBwYXJhbSB7Qm91bmRzfSBuZXdCb3VuZHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBoaW50c1xuICovXG5CcG1uQXV0b1Jlc2l6ZS5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24odGFyZ2V0LCBuZXdCb3VuZHMsIGhpbnRzKSB7XG5cbiAgaWYgKGlzKHRhcmdldCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIHRoaXMuX21vZGVsaW5nLnJlc2l6ZUxhbmUodGFyZ2V0LCBuZXdCb3VuZHMsIG51bGwsIGhpbnRzKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9tb2RlbGluZy5yZXNpemVTaGFwZSh0YXJnZXQsIG5ld0JvdW5kcywgbnVsbCwgaGludHMpO1xuICB9XG59OyIsImltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgQXV0b1Jlc2l6ZVByb3ZpZGVyIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcmVzaXplL0F1dG9SZXNpemVQcm92aWRlcic7XG5cblxuLyoqXG4gKiBUaGlzIG1vZHVsZSBpcyBhIHByb3ZpZGVyIGZvciBhdXRvbWF0aWNhbGx5IHJlc2l6aW5nIHBhcmVudCBCUE1OIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5BdXRvUmVzaXplUHJvdmlkZXIoZXZlbnRCdXMsIG1vZGVsaW5nKSB7XG4gIEF1dG9SZXNpemVQcm92aWRlci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5pbmhlcml0cyhCcG1uQXV0b1Jlc2l6ZVByb3ZpZGVyLCBBdXRvUmVzaXplUHJvdmlkZXIpO1xuXG5CcG1uQXV0b1Jlc2l6ZVByb3ZpZGVyLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZydcbl07XG5cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gdGFyZ2V0IGNhbiBiZSBleHBhbmRlZFxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5TaGFwZX0gdGFyZ2V0XG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuQnBtbkF1dG9SZXNpemVQcm92aWRlci5wcm90b3R5cGUuY2FuUmVzaXplID0gZnVuY3Rpb24oZWxlbWVudHMsIHRhcmdldCkge1xuXG4gIGlmICghaXModGFyZ2V0LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmICFpcyh0YXJnZXQsICdicG1uOkxhbmUnKSAmJiAhKGlzKHRhcmdldCwgJ2JwbW46U3ViUHJvY2VzcycpKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBjYW5SZXNpemUgPSB0cnVlO1xuXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpMYW5lJykgfHwgZWxlbWVudC5sYWJlbFRhcmdldCkge1xuICAgICAgY2FuUmVzaXplID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY2FuUmVzaXplO1xufTtcbiIsImltcG9ydCBCcG1uQXV0b1Jlc2l6ZSBmcm9tICcuL0JwbW5BdXRvUmVzaXplJztcbmltcG9ydCBCcG1uQXV0b1Jlc2l6ZVByb3ZpZGVyIGZyb20gJy4vQnBtbkF1dG9SZXNpemVQcm92aWRlcic7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogW1xuICAgICdicG1uQXV0b1Jlc2l6ZScsXG4gICAgJ2JwbW5BdXRvUmVzaXplUHJvdmlkZXInXG4gIF0sXG4gIGJwbW5BdXRvUmVzaXplOiBbICd0eXBlJywgQnBtbkF1dG9SZXNpemUgXSxcbiAgYnBtbkF1dG9SZXNpemVQcm92aWRlcjogWyAndHlwZScsIEJwbW5BdXRvUmVzaXplUHJvdmlkZXIgXVxufTtcbiIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZm9yRWFjaCxcbiAgaXNBcnJheVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGlzXG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNFeHBhbmRlZCxcbiAgaXNFdmVudFN1YlByb2Nlc3Ncbn0gZnJvbSAnLi4vLi4vdXRpbC9EaVV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0FueVxufSBmcm9tICcuLi9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldENoaWxkTGFuZXNcbn0gZnJvbSAnLi4vbW9kZWxpbmcvdXRpbC9MYW5lVXRpbCc7XG5cbmltcG9ydCB7XG4gIGhhc1ByaW1hcnlNb2RpZmllclxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL01vdXNlJztcblxuXG4vKipcbiAqIEEgcHJvdmlkZXIgZm9yIEJQTU4gMi4wIGVsZW1lbnRzIGNvbnRleHQgcGFkXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvbnRleHRQYWRQcm92aWRlcihcbiAgICBjb25maWcsIGluamVjdG9yLCBldmVudEJ1cyxcbiAgICBjb250ZXh0UGFkLCBtb2RlbGluZywgZWxlbWVudEZhY3RvcnksXG4gICAgY29ubmVjdCwgY3JlYXRlLCBwb3B1cE1lbnUsXG4gICAgY2FudmFzLCBydWxlcywgdHJhbnNsYXRlKSB7XG5cbiAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuXG4gIGNvbnRleHRQYWQucmVnaXN0ZXJQcm92aWRlcih0aGlzKTtcblxuICB0aGlzLl9jb250ZXh0UGFkID0gY29udGV4dFBhZDtcblxuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuXG4gIHRoaXMuX2VsZW1lbnRGYWN0b3J5ID0gZWxlbWVudEZhY3Rvcnk7XG4gIHRoaXMuX2Nvbm5lY3QgPSBjb25uZWN0O1xuICB0aGlzLl9jcmVhdGUgPSBjcmVhdGU7XG4gIHRoaXMuX3BvcHVwTWVudSA9IHBvcHVwTWVudTtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG5cbiAgaWYgKGNvbmZpZy5hdXRvUGxhY2UgIT09IGZhbHNlKSB7XG4gICAgdGhpcy5fYXV0b1BsYWNlID0gaW5qZWN0b3IuZ2V0KCdhdXRvUGxhY2UnLCBmYWxzZSk7XG4gIH1cblxuICBldmVudEJ1cy5vbignY3JlYXRlLmVuZCcsIDI1MCwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmICghaGFzUHJpbWFyeU1vZGlmaWVyKGV2ZW50KSB8fCAhY29udGV4dFBhZC5pc09wZW4oc2hhcGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVudHJpZXMgPSBjb250ZXh0UGFkLmdldEVudHJpZXMoc2hhcGUpO1xuXG4gICAgaWYgKGVudHJpZXMucmVwbGFjZSkge1xuICAgICAgZW50cmllcy5yZXBsYWNlLmFjdGlvbi5jbGljayhldmVudCwgc2hhcGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbkNvbnRleHRQYWRQcm92aWRlci4kaW5qZWN0ID0gW1xuICAnY29uZmlnLmNvbnRleHRQYWQnLFxuICAnaW5qZWN0b3InLFxuICAnZXZlbnRCdXMnLFxuICAnY29udGV4dFBhZCcsXG4gICdtb2RlbGluZycsXG4gICdlbGVtZW50RmFjdG9yeScsXG4gICdjb25uZWN0JyxcbiAgJ2NyZWF0ZScsXG4gICdwb3B1cE1lbnUnLFxuICAnY2FudmFzJyxcbiAgJ3J1bGVzJyxcbiAgJ3RyYW5zbGF0ZSdcbl07XG5cblxuQ29udGV4dFBhZFByb3ZpZGVyLnByb3RvdHlwZS5nZXRDb250ZXh0UGFkRW50cmllcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICB2YXIgY29udGV4dFBhZCA9IHRoaXMuX2NvbnRleHRQYWQsXG4gICAgICBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nLFxuXG4gICAgICBlbGVtZW50RmFjdG9yeSA9IHRoaXMuX2VsZW1lbnRGYWN0b3J5LFxuICAgICAgY29ubmVjdCA9IHRoaXMuX2Nvbm5lY3QsXG4gICAgICBjcmVhdGUgPSB0aGlzLl9jcmVhdGUsXG4gICAgICBwb3B1cE1lbnUgPSB0aGlzLl9wb3B1cE1lbnUsXG4gICAgICBjYW52YXMgPSB0aGlzLl9jYW52YXMsXG4gICAgICBydWxlcyA9IHRoaXMuX3J1bGVzLFxuICAgICAgYXV0b1BsYWNlID0gdGhpcy5fYXV0b1BsYWNlLFxuICAgICAgdHJhbnNsYXRlID0gdGhpcy5fdHJhbnNsYXRlO1xuXG4gIHZhciBhY3Rpb25zID0ge307XG5cbiAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2xhYmVsJykge1xuICAgIHJldHVybiBhY3Rpb25zO1xuICB9XG5cbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZWxlbWVudC5idXNpbmVzc09iamVjdDtcblxuICBmdW5jdGlvbiBzdGFydENvbm5lY3QoZXZlbnQsIGVsZW1lbnQpIHtcbiAgICBjb25uZWN0LnN0YXJ0KGV2ZW50LCBlbGVtZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUVsZW1lbnQoZSkge1xuICAgIG1vZGVsaW5nLnJlbW92ZUVsZW1lbnRzKFsgZWxlbWVudCBdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFJlcGxhY2VNZW51UG9zaXRpb24oZWxlbWVudCkge1xuXG4gICAgdmFyIFlfT0ZGU0VUID0gNTtcblxuICAgIHZhciBkaWFncmFtQ29udGFpbmVyID0gY2FudmFzLmdldENvbnRhaW5lcigpLFxuICAgICAgICBwYWQgPSBjb250ZXh0UGFkLmdldFBhZChlbGVtZW50KS5odG1sO1xuXG4gICAgdmFyIGRpYWdyYW1SZWN0ID0gZGlhZ3JhbUNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgcGFkUmVjdCA9IHBhZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHZhciB0b3AgPSBwYWRSZWN0LnRvcCAtIGRpYWdyYW1SZWN0LnRvcDtcbiAgICB2YXIgbGVmdCA9IHBhZFJlY3QubGVmdCAtIGRpYWdyYW1SZWN0LmxlZnQ7XG5cbiAgICB2YXIgcG9zID0ge1xuICAgICAgeDogbGVmdCxcbiAgICAgIHk6IHRvcCArIHBhZFJlY3QuaGVpZ2h0ICsgWV9PRkZTRVRcbiAgICB9O1xuXG4gICAgcmV0dXJuIHBvcztcbiAgfVxuXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhcHBlbmQgYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFt0aXRsZV1cbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGRlc2NyaXB0b3JcbiAgICovXG4gIGZ1bmN0aW9uIGFwcGVuZEFjdGlvbih0eXBlLCBjbGFzc05hbWUsIHRpdGxlLCBvcHRpb25zKSB7XG5cbiAgICBpZiAodHlwZW9mIHRpdGxlICE9PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucyA9IHRpdGxlO1xuICAgICAgdGl0bGUgPSB0cmFuc2xhdGUoJ0FwcGVuZCB7dHlwZX0nLCB7IHR5cGU6IHR5cGUucmVwbGFjZSgvXmJwbW46LywgJycpIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFwcGVuZFN0YXJ0KGV2ZW50LCBlbGVtZW50KSB7XG5cbiAgICAgIHZhciBzaGFwZSA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKGFzc2lnbih7IHR5cGU6IHR5cGUgfSwgb3B0aW9ucykpO1xuICAgICAgY3JlYXRlLnN0YXJ0KGV2ZW50LCBzaGFwZSwge1xuICAgICAgICBzb3VyY2U6IGVsZW1lbnRcbiAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgdmFyIGFwcGVuZCA9IGF1dG9QbGFjZSA/IGZ1bmN0aW9uKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgICB2YXIgc2hhcGUgPSBlbGVtZW50RmFjdG9yeS5jcmVhdGVTaGFwZShhc3NpZ24oeyB0eXBlOiB0eXBlIH0sIG9wdGlvbnMpKTtcblxuICAgICAgYXV0b1BsYWNlLmFwcGVuZChlbGVtZW50LCBzaGFwZSk7XG4gICAgfSA6IGFwcGVuZFN0YXJ0O1xuXG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3JvdXA6ICdtb2RlbCcsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgIGFjdGlvbjoge1xuICAgICAgICBkcmFnc3RhcnQ6IGFwcGVuZFN0YXJ0LFxuICAgICAgICBjbGljazogYXBwZW5kXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNwbGl0TGFuZUhhbmRsZXIoY291bnQpIHtcblxuICAgIHJldHVybiBmdW5jdGlvbihldmVudCwgZWxlbWVudCkge1xuXG4gICAgICAvLyBhY3R1YWwgc3BsaXRcbiAgICAgIG1vZGVsaW5nLnNwbGl0TGFuZShlbGVtZW50LCBjb3VudCk7XG5cbiAgICAgIC8vIHJlZnJlc2ggY29udGV4dCBwYWQgYWZ0ZXIgc3BsaXQgdG9cbiAgICAgIC8vIGdldCByaWQgb2Ygc3BsaXQgaWNvbnNcbiAgICAgIGNvbnRleHRQYWQub3BlbihlbGVtZW50LCB0cnVlKTtcbiAgICB9O1xuICB9XG5cblxuICBpZiAoaXNBbnkoYnVzaW5lc3NPYmplY3QsIFsgJ2JwbW46TGFuZScsICdicG1uOlBhcnRpY2lwYW50JyBdKSAmJiBpc0V4cGFuZGVkKGJ1c2luZXNzT2JqZWN0KSkge1xuXG4gICAgdmFyIGNoaWxkTGFuZXMgPSBnZXRDaGlsZExhbmVzKGVsZW1lbnQpO1xuXG4gICAgYXNzaWduKGFjdGlvbnMsIHtcbiAgICAgICdsYW5lLWluc2VydC1hYm92ZSc6IHtcbiAgICAgICAgZ3JvdXA6ICdsYW5lLWluc2VydC1hYm92ZScsXG4gICAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1sYW5lLWluc2VydC1hYm92ZScsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0FkZCBMYW5lIGFib3ZlJyksXG4gICAgICAgIGFjdGlvbjoge1xuICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbihldmVudCwgZWxlbWVudCkge1xuICAgICAgICAgICAgbW9kZWxpbmcuYWRkTGFuZShlbGVtZW50LCAndG9wJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoY2hpbGRMYW5lcy5sZW5ndGggPCAyKSB7XG5cbiAgICAgIGlmIChlbGVtZW50LmhlaWdodCA+PSAxMjApIHtcbiAgICAgICAgYXNzaWduKGFjdGlvbnMsIHtcbiAgICAgICAgICAnbGFuZS1kaXZpZGUtdHdvJzoge1xuICAgICAgICAgICAgZ3JvdXA6ICdsYW5lLWRpdmlkZScsXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbGFuZS1kaXZpZGUtdHdvJyxcbiAgICAgICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0RpdmlkZSBpbnRvIHR3byBMYW5lcycpLFxuICAgICAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgICAgIGNsaWNrOiBzcGxpdExhbmVIYW5kbGVyKDIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVsZW1lbnQuaGVpZ2h0ID49IDE4MCkge1xuICAgICAgICBhc3NpZ24oYWN0aW9ucywge1xuICAgICAgICAgICdsYW5lLWRpdmlkZS10aHJlZSc6IHtcbiAgICAgICAgICAgIGdyb3VwOiAnbGFuZS1kaXZpZGUnLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWxhbmUtZGl2aWRlLXRocmVlJyxcbiAgICAgICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0RpdmlkZSBpbnRvIHRocmVlIExhbmVzJyksXG4gICAgICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICAgICAgY2xpY2s6IHNwbGl0TGFuZUhhbmRsZXIoMylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAnbGFuZS1pbnNlcnQtYmVsb3cnOiB7XG4gICAgICAgIGdyb3VwOiAnbGFuZS1pbnNlcnQtYmVsb3cnLFxuICAgICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbGFuZS1pbnNlcnQtYmVsb3cnLFxuICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdBZGQgTGFuZSBiZWxvdycpLFxuICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICBjbGljazogZnVuY3Rpb24oZXZlbnQsIGVsZW1lbnQpIHtcbiAgICAgICAgICAgIG1vZGVsaW5nLmFkZExhbmUoZWxlbWVudCwgJ2JvdHRvbScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkZsb3dOb2RlJykpIHtcblxuICAgIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknKSkge1xuXG4gICAgICBhc3NpZ24oYWN0aW9ucywge1xuICAgICAgICAnYXBwZW5kLnJlY2VpdmUtdGFzayc6IGFwcGVuZEFjdGlvbihcbiAgICAgICAgICAnYnBtbjpSZWNlaXZlVGFzaycsXG4gICAgICAgICAgJ2JwbW4taWNvbi1yZWNlaXZlLXRhc2snLFxuICAgICAgICAgIHRyYW5zbGF0ZSgnQXBwZW5kIFJlY2VpdmVUYXNrJylcbiAgICAgICAgKSxcbiAgICAgICAgJ2FwcGVuZC5tZXNzYWdlLWludGVybWVkaWF0ZS1ldmVudCc6IGFwcGVuZEFjdGlvbihcbiAgICAgICAgICAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyxcbiAgICAgICAgICAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1tZXNzYWdlJyxcbiAgICAgICAgICB0cmFuc2xhdGUoJ0FwcGVuZCBNZXNzYWdlSW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcpLFxuICAgICAgICAgIHsgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicgfVxuICAgICAgICApLFxuICAgICAgICAnYXBwZW5kLnRpbWVyLWludGVybWVkaWF0ZS1ldmVudCc6IGFwcGVuZEFjdGlvbihcbiAgICAgICAgICAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyxcbiAgICAgICAgICAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC10aW1lcicsXG4gICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgVGltZXJJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyksXG4gICAgICAgICAgeyBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbicgfVxuICAgICAgICApLFxuICAgICAgICAnYXBwZW5kLmNvbmRpdGlvbi1pbnRlcm1lZGlhdGUtZXZlbnQnOiBhcHBlbmRBY3Rpb24oXG4gICAgICAgICAgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsXG4gICAgICAgICAgJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtY29uZGl0aW9uJyxcbiAgICAgICAgICB0cmFuc2xhdGUoJ0FwcGVuZCBDb25kaXRpb25JbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyksXG4gICAgICAgICAgeyBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbicgfVxuICAgICAgICApLFxuICAgICAgICAnYXBwZW5kLnNpZ25hbC1pbnRlcm1lZGlhdGUtZXZlbnQnOiBhcHBlbmRBY3Rpb24oXG4gICAgICAgICAgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsXG4gICAgICAgICAgJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtc2lnbmFsJyxcbiAgICAgICAgICB0cmFuc2xhdGUoJ0FwcGVuZCBTaWduYWxJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyksXG4gICAgICAgICAgeyBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nIH1cbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfSBlbHNlXG5cbiAgICBpZiAoaXNFdmVudFR5cGUoYnVzaW5lc3NPYmplY3QsICdicG1uOkJvdW5kYXJ5RXZlbnQnLCAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJykpIHtcblxuICAgICAgYXNzaWduKGFjdGlvbnMsIHtcbiAgICAgICAgJ2FwcGVuZC5jb21wZW5zYXRpb24tYWN0aXZpdHknOlxuICAgICAgICAgICAgYXBwZW5kQWN0aW9uKFxuICAgICAgICAgICAgICAnYnBtbjpUYXNrJyxcbiAgICAgICAgICAgICAgJ2JwbW4taWNvbi10YXNrJyxcbiAgICAgICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgY29tcGVuc2F0aW9uIGFjdGl2aXR5JyksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0ZvckNvbXBlbnNhdGlvbjogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICB9KTtcbiAgICB9IGVsc2VcblxuICAgIGlmICghaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkVuZEV2ZW50JykgJiZcbiAgICAgICAgIWJ1c2luZXNzT2JqZWN0LmlzRm9yQ29tcGVuc2F0aW9uICYmXG4gICAgICAgICFpc0V2ZW50VHlwZShidXNpbmVzc09iamVjdCwgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nKSAmJlxuICAgICAgICAhaXNFdmVudFN1YlByb2Nlc3MoYnVzaW5lc3NPYmplY3QpKSB7XG5cbiAgICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAgICdhcHBlbmQuZW5kLWV2ZW50JzogYXBwZW5kQWN0aW9uKFxuICAgICAgICAgICdicG1uOkVuZEV2ZW50JyxcbiAgICAgICAgICAnYnBtbi1pY29uLWVuZC1ldmVudC1ub25lJyxcbiAgICAgICAgICB0cmFuc2xhdGUoJ0FwcGVuZCBFbmRFdmVudCcpXG4gICAgICAgICksXG4gICAgICAgICdhcHBlbmQuZ2F0ZXdheSc6IGFwcGVuZEFjdGlvbihcbiAgICAgICAgICAnYnBtbjpFeGNsdXNpdmVHYXRld2F5JyxcbiAgICAgICAgICAnYnBtbi1pY29uLWdhdGV3YXktbm9uZScsXG4gICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgR2F0ZXdheScpXG4gICAgICAgICksXG4gICAgICAgICdhcHBlbmQuYXBwZW5kLXRhc2snOiBhcHBlbmRBY3Rpb24oXG4gICAgICAgICAgJ2JwbW46VGFzaycsXG4gICAgICAgICAgJ2JwbW4taWNvbi10YXNrJyxcbiAgICAgICAgICB0cmFuc2xhdGUoJ0FwcGVuZCBUYXNrJylcbiAgICAgICAgKSxcbiAgICAgICAgJ2FwcGVuZC5pbnRlcm1lZGlhdGUtZXZlbnQnOiBhcHBlbmRBY3Rpb24oXG4gICAgICAgICAgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXG4gICAgICAgICAgJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtbm9uZScsXG4gICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgSW50ZXJtZWRpYXRlL0JvdW5kYXJ5IEV2ZW50JylcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFwb3B1cE1lbnUuaXNFbXB0eShlbGVtZW50LCAnYnBtbi1yZXBsYWNlJykpIHtcblxuICAgIC8vIFJlcGxhY2UgbWVudSBlbnRyeVxuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAncmVwbGFjZSc6IHtcbiAgICAgICAgZ3JvdXA6ICdlZGl0JyxcbiAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXNjcmV3LXdyZW5jaCcsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0NoYW5nZSB0eXBlJyksXG4gICAgICAgIGFjdGlvbjoge1xuICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbihldmVudCwgZWxlbWVudCkge1xuXG4gICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBhc3NpZ24oZ2V0UmVwbGFjZU1lbnVQb3NpdGlvbihlbGVtZW50KSwge1xuICAgICAgICAgICAgICBjdXJzb3I6IHsgeDogZXZlbnQueCwgeTogZXZlbnQueSB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcG9wdXBNZW51Lm9wZW4oZWxlbWVudCwgJ2JwbW4tcmVwbGFjZScsIHBvc2l0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChpc0FueShidXNpbmVzc09iamVjdCwgW1xuICAgICdicG1uOkZsb3dOb2RlJyxcbiAgICAnYnBtbjpJbnRlcmFjdGlvbk5vZGUnLFxuICAgICdicG1uOkRhdGFPYmplY3RSZWZlcmVuY2UnLFxuICAgICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZSdcbiAgXSkpIHtcblxuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAnYXBwZW5kLnRleHQtYW5ub3RhdGlvbic6IGFwcGVuZEFjdGlvbignYnBtbjpUZXh0QW5ub3RhdGlvbicsICdicG1uLWljb24tdGV4dC1hbm5vdGF0aW9uJyksXG5cbiAgICAgICdjb25uZWN0Jzoge1xuICAgICAgICBncm91cDogJ2Nvbm5lY3QnLFxuICAgICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY29ubmVjdGlvbi1tdWx0aScsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0Nvbm5lY3QgdXNpbmcgJyArXG4gICAgICAgICAgICAgICAgICAoYnVzaW5lc3NPYmplY3QuaXNGb3JDb21wZW5zYXRpb24gPyAnJyA6ICdTZXF1ZW5jZS9NZXNzYWdlRmxvdyBvciAnKSArXG4gICAgICAgICAgICAgICAgICAnQXNzb2NpYXRpb24nKSxcbiAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgY2xpY2s6IHN0YXJ0Q29ubmVjdCxcbiAgICAgICAgICBkcmFnc3RhcnQ6IHN0YXJ0Q29ubmVjdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaXNBbnkoYnVzaW5lc3NPYmplY3QsIFsgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScgXSkpIHtcbiAgICBhc3NpZ24oYWN0aW9ucywge1xuICAgICAgJ2Nvbm5lY3QnOiB7XG4gICAgICAgIGdyb3VwOiAnY29ubmVjdCcsXG4gICAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1jb25uZWN0aW9uLW11bHRpJyxcbiAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQ29ubmVjdCB1c2luZyBEYXRhSW5wdXRBc3NvY2lhdGlvbicpLFxuICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICBjbGljazogc3RhcnRDb25uZWN0LFxuICAgICAgICAgIGRyYWdzdGFydDogc3RhcnRDb25uZWN0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46R3JvdXAnKSkge1xuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAnYXBwZW5kLnRleHQtYW5ub3RhdGlvbic6IGFwcGVuZEFjdGlvbignYnBtbjpUZXh0QW5ub3RhdGlvbicsICdicG1uLWljb24tdGV4dC1hbm5vdGF0aW9uJylcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGRlbGV0ZSBlbGVtZW50IGVudHJ5LCBvbmx5IHNob3cgaWYgYWxsb3dlZCBieSBydWxlc1xuICB2YXIgZGVsZXRlQWxsb3dlZCA9IHJ1bGVzLmFsbG93ZWQoJ2VsZW1lbnRzLmRlbGV0ZScsIHsgZWxlbWVudHM6IFsgZWxlbWVudCBdIH0pO1xuXG4gIGlmIChpc0FycmF5KGRlbGV0ZUFsbG93ZWQpKSB7XG5cbiAgICAvLyB3YXMgdGhlIGVsZW1lbnQgcmV0dXJuZWQgYXMgYSBkZWxldGlvbiBjYW5kaWRhdGU/XG4gICAgZGVsZXRlQWxsb3dlZCA9IGRlbGV0ZUFsbG93ZWRbMF0gPT09IGVsZW1lbnQ7XG4gIH1cblxuICBpZiAoZGVsZXRlQWxsb3dlZCkge1xuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAnZGVsZXRlJzoge1xuICAgICAgICBncm91cDogJ2VkaXQnLFxuICAgICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tdHJhc2gnLFxuICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdSZW1vdmUnKSxcbiAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgY2xpY2s6IHJlbW92ZUVsZW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGFjdGlvbnM7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzRXZlbnRUeXBlKGV2ZW50Qm8sIHR5cGUsIGRlZmluaXRpb24pIHtcblxuICB2YXIgaXNUeXBlID0gZXZlbnRCby4kaW5zdGFuY2VPZih0eXBlKTtcbiAgdmFyIGlzRGVmaW5pdGlvbiA9IGZhbHNlO1xuXG4gIHZhciBkZWZpbml0aW9ucyA9IGV2ZW50Qm8uZXZlbnREZWZpbml0aW9ucyB8fCBbXTtcbiAgZm9yRWFjaChkZWZpbml0aW9ucywgZnVuY3Rpb24oZGVmKSB7XG4gICAgaWYgKGRlZi4kdHlwZSA9PT0gZGVmaW5pdGlvbikge1xuICAgICAgaXNEZWZpbml0aW9uID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpc1R5cGUgJiYgaXNEZWZpbml0aW9uO1xufVxuIiwiaW1wb3J0IERpcmVjdEVkaXRpbmdNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy1kaXJlY3QtZWRpdGluZyc7XG5pbXBvcnQgQ29udGV4dFBhZE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb250ZXh0LXBhZCc7XG5pbXBvcnQgU2VsZWN0aW9uTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NlbGVjdGlvbic7XG5pbXBvcnQgQ29ubmVjdE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb25uZWN0JztcbmltcG9ydCBDcmVhdGVNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY3JlYXRlJztcbmltcG9ydCBQb3B1cE1lbnVNb2R1bGUgZnJvbSAnLi4vcG9wdXAtbWVudSc7XG5cbmltcG9ydCBDb250ZXh0UGFkUHJvdmlkZXIgZnJvbSAnLi9Db250ZXh0UGFkUHJvdmlkZXInO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgRGlyZWN0RWRpdGluZ01vZHVsZSxcbiAgICBDb250ZXh0UGFkTW9kdWxlLFxuICAgIFNlbGVjdGlvbk1vZHVsZSxcbiAgICBDb25uZWN0TW9kdWxlLFxuICAgIENyZWF0ZU1vZHVsZSxcbiAgICBQb3B1cE1lbnVNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFsgJ2NvbnRleHRQYWRQcm92aWRlcicgXSxcbiAgY29udGV4dFBhZFByb3ZpZGVyOiBbICd0eXBlJywgQ29udGV4dFBhZFByb3ZpZGVyIF1cbn07IiwiaW1wb3J0IHtcbiAgZ2V0QnVzaW5lc3NPYmplY3QsXG4gIGlzXG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZm9yRWFjaCxcbiAgaXNBcnJheSxcbiAgaXNVbmRlZmluZWQsXG4gIG9taXQsXG4gIHJlZHVjZVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmZ1bmN0aW9uIGNvcHlQcm9wZXJ0aWVzKHNvdXJjZSwgdGFyZ2V0LCBwcm9wZXJ0aWVzKSB7XG4gIGlmICghaXNBcnJheShwcm9wZXJ0aWVzKSkge1xuICAgIHByb3BlcnRpZXMgPSBbIHByb3BlcnRpZXMgXTtcbiAgfVxuXG4gIGZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24ocHJvcGVydHkpIHtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKHNvdXJjZVtwcm9wZXJ0eV0pKSB7XG4gICAgICB0YXJnZXRbcHJvcGVydHldID0gc291cmNlW3Byb3BlcnR5XTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVQcm9wZXJ0aWVzKGVsZW1lbnQsIHByb3BlcnRpZXMpIHtcbiAgaWYgKCFpc0FycmF5KHByb3BlcnRpZXMpKSB7XG4gICAgcHJvcGVydGllcyA9IFsgcHJvcGVydGllcyBdO1xuICB9XG5cbiAgZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihwcm9wZXJ0eSkge1xuICAgIGlmIChlbGVtZW50W3Byb3BlcnR5XSkge1xuICAgICAgZGVsZXRlIGVsZW1lbnRbcHJvcGVydHldO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBMT1dfUFJJT1JJVFkgPSA3NTA7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkNvcHlQYXN0ZShicG1uRmFjdG9yeSwgZXZlbnRCdXMsIG1vZGRsZUNvcHkpIHtcblxuICBldmVudEJ1cy5vbignY29weVBhc3RlLmNvcHlFbGVtZW50JywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBjb250ZXh0LmRlc2NyaXB0b3IsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQ7XG5cbiAgICB2YXIgYnVzaW5lc3NPYmplY3QgPSBkZXNjcmlwdG9yLm9sZEJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgICBkZXNjcmlwdG9yLnR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBjb3B5UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwgZGVzY3JpcHRvciwgJ25hbWUnKTtcblxuICAgIGRlc2NyaXB0b3IuZGkgPSB7fTtcblxuICAgIC8vIGZpbGwgYW5kIHN0cm9rZSB3aWxsIGJlIHNldCB0byBESVxuICAgIGNvcHlQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LmRpLCBkZXNjcmlwdG9yLmRpLCBbXG4gICAgICAnZmlsbCcsXG4gICAgICAnc3Ryb2tlJ1xuICAgIF0pO1xuXG4gICAgY29weVByb3BlcnRpZXMoYnVzaW5lc3NPYmplY3QuZGksIGRlc2NyaXB0b3IsICdpc0V4cGFuZGVkJyk7XG5cbiAgICBpZiAoaXNMYWJlbChkZXNjcmlwdG9yKSkge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBzZXF1ZW5jZSBmbG93XG4gICAgaWYgKGJ1c2luZXNzT2JqZWN0LmRlZmF1bHQpIHtcbiAgICAgIGRlc2NyaXB0b3IuZGVmYXVsdCA9IGJ1c2luZXNzT2JqZWN0LmRlZmF1bHQuaWQ7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignbW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydHknLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHBhcmVudCA9IGNvbnRleHQucGFyZW50LFxuICAgICAgICBwcm9wZXJ0eSA9IGNvbnRleHQucHJvcGVydHksXG4gICAgICAgIHByb3BlcnR5TmFtZSA9IGNvbnRleHQucHJvcGVydHlOYW1lLFxuICAgICAgICBicG1uUHJvY2VzcztcblxuICAgIGlmIChcbiAgICAgIHByb3BlcnR5TmFtZSA9PT0gJ3Byb2Nlc3NSZWYnICYmXG4gICAgICBpcyhwYXJlbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiZcbiAgICAgIGlzKHByb3BlcnR5LCAnYnBtbjpQcm9jZXNzJylcbiAgICApIHtcbiAgICAgIGJwbW5Qcm9jZXNzID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOlByb2Nlc3MnKTtcblxuICAgICAgLy8gcmV0dXJuIGNvcHkgb2YgcHJvY2Vzc1xuICAgICAgcmV0dXJuIG1vZGRsZUNvcHkuY29weUVsZW1lbnQocHJvcGVydHksIGJwbW5Qcm9jZXNzKTtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciByZWZlcmVuY2VzO1xuXG4gIGZ1bmN0aW9uIHJlc29sdmVSZWZlcmVuY2VzKGRlc2NyaXB0b3IsIGNhY2hlKSB7XG4gICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZGVzY3JpcHRvcik7XG5cbiAgICAvLyBkZWZhdWx0IHNlcXVlbmNlIGZsb3dzXG4gICAgaWYgKGRlc2NyaXB0b3IuZGVmYXVsdCkge1xuXG4gICAgICAvLyByZWxhdGlvbnNoaXAgY2Fubm90IGJlIHJlc29sdmVkIGltbWVkaWF0ZWx5XG4gICAgICByZWZlcmVuY2VzWyBkZXNjcmlwdG9yLmRlZmF1bHQgXSA9IHtcbiAgICAgICAgZWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHByb3BlcnR5OiAnZGVmYXVsdCdcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gYm91bmRhcnkgZXZlbnRzXG4gICAgaWYgKGRlc2NyaXB0b3IuaG9zdCkge1xuXG4gICAgICAvLyByZWxhdGlvbnNoaXAgY2FuIGJlIHJlc29sdmVkIGltbWVkaWF0ZWx5XG4gICAgICBnZXRCdXNpbmVzc09iamVjdChkZXNjcmlwdG9yKS5hdHRhY2hlZFRvUmVmID0gZ2V0QnVzaW5lc3NPYmplY3QoY2FjaGVbIGRlc2NyaXB0b3IuaG9zdCBdKTtcbiAgICB9XG5cbiAgICByZWZlcmVuY2VzID0gb21pdChyZWZlcmVuY2VzLCByZWR1Y2UocmVmZXJlbmNlcywgZnVuY3Rpb24oYXJyYXksIHJlZmVyZW5jZSwga2V5KSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHJlZmVyZW5jZS5lbGVtZW50LFxuICAgICAgICAgIHByb3BlcnR5ID0gcmVmZXJlbmNlLnByb3BlcnR5O1xuXG4gICAgICBpZiAoa2V5ID09PSBkZXNjcmlwdG9yLmlkKSB7XG4gICAgICAgIGVsZW1lbnRbIHByb3BlcnR5IF0gPSBidXNpbmVzc09iamVjdDtcblxuICAgICAgICBhcnJheS5wdXNoKGRlc2NyaXB0b3IuaWQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfSwgW10pKTtcbiAgfVxuXG4gIGV2ZW50QnVzLm9uKCdjb3B5UGFzdGUucGFzdGVFbGVtZW50cycsIGZ1bmN0aW9uKCkge1xuICAgIHJlZmVyZW5jZXMgPSB7fTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NvcHlQYXN0ZS5wYXN0ZUVsZW1lbnQnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGNhY2hlID0gY29udGV4dC5jYWNoZSxcbiAgICAgICAgZGVzY3JpcHRvciA9IGNvbnRleHQuZGVzY3JpcHRvcixcbiAgICAgICAgb2xkQnVzaW5lc3NPYmplY3QgPSBkZXNjcmlwdG9yLm9sZEJ1c2luZXNzT2JqZWN0LFxuICAgICAgICBuZXdCdXNpbmVzc09iamVjdDtcblxuICAgIC8vIGRvIE5PVCBjb3B5IGJ1c2luZXNzIG9iamVjdCBpZiBleHRlcm5hbCBsYWJlbFxuICAgIGlmIChpc0xhYmVsKGRlc2NyaXB0b3IpKSB7XG4gICAgICBkZXNjcmlwdG9yLmJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoY2FjaGVbIGRlc2NyaXB0b3IubGFiZWxUYXJnZXQgXSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBuZXdCdXNpbmVzc09iamVjdCA9IGJwbW5GYWN0b3J5LmNyZWF0ZShvbGRCdXNpbmVzc09iamVjdC4kdHlwZSk7XG5cbiAgICBkZXNjcmlwdG9yLmJ1c2luZXNzT2JqZWN0ID0gbW9kZGxlQ29weS5jb3B5RWxlbWVudChcbiAgICAgIG9sZEJ1c2luZXNzT2JqZWN0LFxuICAgICAgbmV3QnVzaW5lc3NPYmplY3RcbiAgICApO1xuXG4gICAgLy8gcmVzb2x2ZSByZWZlcmVuY2VzIGUuZy4gZGVmYXVsdCBzZXF1ZW5jZSBmbG93XG4gICAgcmVzb2x2ZVJlZmVyZW5jZXMoZGVzY3JpcHRvciwgY2FjaGUpO1xuXG4gICAgY29weVByb3BlcnRpZXMoZGVzY3JpcHRvciwgbmV3QnVzaW5lc3NPYmplY3QsIFtcbiAgICAgICdpc0V4cGFuZGVkJyxcbiAgICAgICduYW1lJ1xuICAgIF0pO1xuXG4gICAgcmVtb3ZlUHJvcGVydGllcyhkZXNjcmlwdG9yLCAnb2xkQnVzaW5lc3NPYmplY3QnKTtcbiAgfSk7XG5cbn1cblxuXG5CcG1uQ29weVBhc3RlLiRpbmplY3QgPSBbXG4gICdicG1uRmFjdG9yeScsXG4gICdldmVudEJ1cycsXG4gICdtb2RkbGVDb3B5J1xuXTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzTGFiZWwoZWxlbWVudCkge1xuICByZXR1cm4gISFlbGVtZW50LmxhYmVsVGFyZ2V0O1xufVxuIiwiaW1wb3J0IHtcbiAgZmluZCxcbiAgZm9yRWFjaCxcbiAgaXNBcnJheSxcbiAgaXNEZWZpbmVkLFxuICBpc09iamVjdCxcbiAgbWF0Y2hQYXR0ZXJuLFxuICByZWR1Y2UsXG4gIGhhcyxcbiAgc29ydEJ5XG59IGZyb20gJ21pbi1kYXNoJztcblxudmFyIERJU0FMTE9XRURfUFJPUEVSVElFUyA9IFtcbiAgJ2FydGlmYWN0cycsXG4gICdkYXRhSW5wdXRBc3NvY2lhdGlvbnMnLFxuICAnZGF0YU91dHB1dEFzc29jaWF0aW9ucycsXG4gICdkZWZhdWx0JyxcbiAgJ2Zsb3dFbGVtZW50cycsXG4gICdsYW5lcycsXG4gICdpbmNvbWluZycsXG4gICdvdXRnb2luZydcbl07XG5cbi8qKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSA8bW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydGllcz4gbGlzdGVuZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBjb250ZXh0LnByb3BlcnR5TmFtZXNcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gY29udGV4dC5zb3VyY2VFbGVtZW50XG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGNvbnRleHQudGFyZ2V0RWxlbWVudFxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fGJvb2xlYW59IC0gUmV0dXJuIHByb3BlcnRpZXMgdG8gYmUgY29waWVkIG9yIGZhbHNlIHRvIGRpc2FsbG93XG4gKiBjb3B5aW5nLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSA8bW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydHk+IGxpc3RlbmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gY29udGV4dC5wYXJlbnRcbiAqIEBwYXJhbSB7Kn0gY29udGV4dC5wcm9wZXJ0eVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRleHQucHJvcGVydHlOYW1lXG4gKlxuICogQHJldHVybnMgeyp8Ym9vbGVhbn0gLSBSZXR1cm4gY29waWVkIHByb3BlcnR5IG9yIGZhbHNlIHRvIGRpc2FsbG93XG4gKiBjb3B5aW5nLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSA8bW9kZGxlQ29weS5jYW5TZXRDb3BpZWRQcm9wZXJ0eT4gbGlzdGVuZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBjb250ZXh0LnBhcmVudFxuICogQHBhcmFtIHsqfSBjb250ZXh0LnByb3BlcnR5XG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGV4dC5wcm9wZXJ0eU5hbWVcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBSZXR1cm4gZmFsc2UgdG8gZGlzYWxsb3dcbiAqIHNldHRpbmcgY29waWVkIHByb3BlcnR5LlxuICovXG5cbi8qKlxuICogVXRpbGl0eSBmb3IgY29weWluZyBtb2RlbCBwcm9wZXJ0aWVzIGZyb20gc291cmNlIGVsZW1lbnQgdG8gdGFyZ2V0IGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKiBAcGFyYW0ge0JwbW5Nb2RkbGV9IG1vZGRsZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb2RkbGVDb3B5KGV2ZW50QnVzLCBicG1uRmFjdG9yeSwgbW9kZGxlKSB7XG4gIHRoaXMuX2JwbW5GYWN0b3J5ID0gYnBtbkZhY3Rvcnk7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX21vZGRsZSA9IG1vZGRsZTtcblxuICAvLyBjb3B5IGV4dGVuc2lvbiBlbGVtZW50cyBsYXN0XG4gIGV2ZW50QnVzLm9uKCdtb2RkbGVDb3B5LmNhbkNvcHlQcm9wZXJ0aWVzJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBwcm9wZXJ0eU5hbWVzID0gY29udGV4dC5wcm9wZXJ0eU5hbWVzO1xuXG4gICAgaWYgKCFwcm9wZXJ0eU5hbWVzIHx8ICFwcm9wZXJ0eU5hbWVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzb3J0QnkocHJvcGVydHlOYW1lcywgZnVuY3Rpb24ocHJvcGVydHlOYW1lKSB7XG4gICAgICByZXR1cm4gcHJvcGVydHlOYW1lID09PSAnZXh0ZW5zaW9uRWxlbWVudHMnO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBkZWZhdWx0IGNoZWNrIHdoZXRoZXIgcHJvcGVydHkgY2FuIGJlIGNvcGllZFxuICBldmVudEJ1cy5vbignbW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydHknLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHBhcmVudCA9IGNvbnRleHQucGFyZW50LFxuICAgICAgICBwYXJlbnREZXNjcmlwdG9yID0gaXNPYmplY3QocGFyZW50KSAmJiBwYXJlbnQuJGRlc2NyaXB0b3IsXG4gICAgICAgIHByb3BlcnR5TmFtZSA9IGNvbnRleHQucHJvcGVydHlOYW1lO1xuXG4gICAgaWYgKHByb3BlcnR5TmFtZSAmJiBESVNBTExPV0VEX1BST1BFUlRJRVMuaW5kZXhPZihwcm9wZXJ0eU5hbWUpICE9PSAtMSkge1xuXG4gICAgICAvLyBkaXNhbGxvdyBjb3B5aW5nIHByb3BlcnR5XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHByb3BlcnR5TmFtZSAmJlxuICAgICAgcGFyZW50RGVzY3JpcHRvciAmJlxuICAgICAgIWZpbmQocGFyZW50RGVzY3JpcHRvci5wcm9wZXJ0aWVzLCBtYXRjaFBhdHRlcm4oeyBuYW1lOiBwcm9wZXJ0eU5hbWUgfSkpKSB7XG5cbiAgICAgIC8vIGRpc2FsbG93IGNvcHlpbmcgcHJvcGVydHlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGRvIE5PVCBhbGxvdyB0byBjb3B5IGVtcHR5IGV4dGVuc2lvbiBlbGVtZW50c1xuICBldmVudEJ1cy5vbignbW9kZGxlQ29weS5jYW5TZXRDb3BpZWRQcm9wZXJ0eScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5O1xuXG4gICAgaWYgKGlzKHByb3BlcnR5LCAnYnBtbjpFeHRlbnNpb25FbGVtZW50cycpICYmICghcHJvcGVydHkudmFsdWVzIHx8ICFwcm9wZXJ0eS52YWx1ZXMubGVuZ3RoKSkge1xuXG4gICAgICAvLyBkaXNhbGxvdyBzZXR0aW5nIGNvcGllZCBwcm9wZXJ0eVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG59XG5cbk1vZGRsZUNvcHkuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2JwbW5GYWN0b3J5JyxcbiAgJ21vZGRsZSdcbl07XG5cbi8qKlxuICogQ29weSBtb2RlbCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBlbGVtZW50IHRvIHRhcmdldCBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gc291cmNlRWxlbWVudFxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSB0YXJnZXRFbGVtZW50XG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtwcm9wZXJ0eU5hbWVzXVxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH1cbiAqL1xuTW9kZGxlQ29weS5wcm90b3R5cGUuY29weUVsZW1lbnQgPSBmdW5jdGlvbihzb3VyY2VFbGVtZW50LCB0YXJnZXRFbGVtZW50LCBwcm9wZXJ0eU5hbWVzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBpZiAocHJvcGVydHlOYW1lcyAmJiAhaXNBcnJheShwcm9wZXJ0eU5hbWVzKSkge1xuICAgIHByb3BlcnR5TmFtZXMgPSBbIHByb3BlcnR5TmFtZXMgXTtcbiAgfVxuXG4gIHByb3BlcnR5TmFtZXMgPSBwcm9wZXJ0eU5hbWVzIHx8IGdldFByb3BlcnR5TmFtZXMoc291cmNlRWxlbWVudC4kZGVzY3JpcHRvcik7XG5cbiAgdmFyIGNhbkNvcHlQcm9wZXJ0aWVzID0gdGhpcy5fZXZlbnRCdXMuZmlyZSgnbW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydGllcycsIHtcbiAgICBwcm9wZXJ0eU5hbWVzOiBwcm9wZXJ0eU5hbWVzLFxuICAgIHNvdXJjZUVsZW1lbnQ6IHNvdXJjZUVsZW1lbnQsXG4gICAgdGFyZ2V0RWxlbWVudDogdGFyZ2V0RWxlbWVudFxuICB9KTtcblxuICBpZiAoY2FuQ29weVByb3BlcnRpZXMgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRhcmdldEVsZW1lbnQ7XG4gIH1cblxuICBpZiAoaXNBcnJheShjYW5Db3B5UHJvcGVydGllcykpIHtcbiAgICBwcm9wZXJ0eU5hbWVzID0gY2FuQ29weVByb3BlcnRpZXM7XG4gIH1cblxuICAvLyBjb3B5IHByb3BlcnRpZXNcbiAgZm9yRWFjaChwcm9wZXJ0eU5hbWVzLCBmdW5jdGlvbihwcm9wZXJ0eU5hbWUpIHtcbiAgICB2YXIgc291cmNlUHJvcGVydHk7XG5cbiAgICBpZiAoaGFzKHNvdXJjZUVsZW1lbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlRWxlbWVudC5nZXQocHJvcGVydHlOYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgY29waWVkUHJvcGVydHkgPSBzZWxmLmNvcHlQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0RWxlbWVudCwgcHJvcGVydHlOYW1lKTtcblxuICAgIHZhciBjYW5TZXRQcm9wZXJ0eSA9IHNlbGYuX2V2ZW50QnVzLmZpcmUoJ21vZGRsZUNvcHkuY2FuU2V0Q29waWVkUHJvcGVydHknLCB7XG4gICAgICBwYXJlbnQ6IHRhcmdldEVsZW1lbnQsXG4gICAgICBwcm9wZXJ0eTogY29waWVkUHJvcGVydHksXG4gICAgICBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5TmFtZVxuICAgIH0pO1xuXG4gICAgaWYgKGNhblNldFByb3BlcnR5ID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc0RlZmluZWQoY29waWVkUHJvcGVydHkpKSB7XG4gICAgICB0YXJnZXRFbGVtZW50LnNldChwcm9wZXJ0eU5hbWUsIGNvcGllZFByb3BlcnR5KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0YXJnZXRFbGVtZW50O1xufTtcblxuLyoqXG4gKiBDb3B5IG1vZGVsIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7Kn0gcHJvcGVydHlcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlOYW1lXG4gKlxuICogQHJldHVybnMgeyp9XG4gKi9cbk1vZGRsZUNvcHkucHJvdG90eXBlLmNvcHlQcm9wZXJ0eSA9IGZ1bmN0aW9uKHByb3BlcnR5LCBwYXJlbnQsIHByb3BlcnR5TmFtZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLy8gYWxsb3cgb3RoZXJzIHRvIGNvcHkgcHJvcGVydHlcbiAgdmFyIGNvcGllZFByb3BlcnR5ID0gdGhpcy5fZXZlbnRCdXMuZmlyZSgnbW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydHknLCB7XG4gICAgcGFyZW50OiBwYXJlbnQsXG4gICAgcHJvcGVydHk6IHByb3BlcnR5LFxuICAgIHByb3BlcnR5TmFtZTogcHJvcGVydHlOYW1lXG4gIH0pO1xuXG4gIC8vIHJldHVybiBpZiBjb3B5aW5nIGlzIE5PVCBhbGxvd2VkXG4gIGlmIChjb3BpZWRQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY29waWVkUHJvcGVydHkpIHtcbiAgICBpZiAoaXNPYmplY3QoY29waWVkUHJvcGVydHkpICYmIGNvcGllZFByb3BlcnR5LiR0eXBlICYmICFjb3BpZWRQcm9wZXJ0eS4kcGFyZW50KSB7XG4gICAgICBjb3BpZWRQcm9wZXJ0eS4kcGFyZW50ID0gcGFyZW50O1xuICAgIH1cblxuICAgIHJldHVybiBjb3BpZWRQcm9wZXJ0eTtcbiAgfVxuXG4gIHZhciBwcm9wZXJ0eURlc2NyaXB0b3IgPSB0aGlzLl9tb2RkbGUuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHBhcmVudCwgcHJvcGVydHlOYW1lKTtcblxuICAvLyBkbyBOT1QgY29weSBJZHMgYW5kIHJlZmVyZW5jZXNcbiAgaWYgKHByb3BlcnR5RGVzY3JpcHRvci5pc0lkIHx8IHByb3BlcnR5RGVzY3JpcHRvci5pc1JlZmVyZW5jZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGNvcHkgYXJyYXlzXG4gIGlmIChpc0FycmF5KHByb3BlcnR5KSkge1xuICAgIHJldHVybiByZWR1Y2UocHJvcGVydHksIGZ1bmN0aW9uKGNoaWxkUHJvcGVydGllcywgY2hpbGRQcm9wZXJ0eSkge1xuXG4gICAgICAvLyByZWN1cnNpb25cbiAgICAgIGNvcGllZFByb3BlcnR5ID0gc2VsZi5jb3B5UHJvcGVydHkoY2hpbGRQcm9wZXJ0eSwgcGFyZW50LCBwcm9wZXJ0eU5hbWUpO1xuXG4gICAgICAvLyBjb3B5aW5nIG1pZ2h0IE5PVCBiZSBhbGxvd2VkXG4gICAgICBpZiAoY29waWVkUHJvcGVydHkpIHtcbiAgICAgICAgY29waWVkUHJvcGVydHkuJHBhcmVudCA9IHBhcmVudDtcblxuICAgICAgICByZXR1cm4gY2hpbGRQcm9wZXJ0aWVzLmNvbmNhdChjb3BpZWRQcm9wZXJ0eSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGlsZFByb3BlcnRpZXM7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgLy8gY29weSBtb2RlbCBlbGVtZW50c1xuICBpZiAoaXNPYmplY3QocHJvcGVydHkpICYmIHByb3BlcnR5LiR0eXBlKSB7XG4gICAgaWYgKHRoaXMuX21vZGRsZS5nZXRFbGVtZW50RGVzY3JpcHRvcihwcm9wZXJ0eSkuaXNHZW5lcmljKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29waWVkUHJvcGVydHkgPSBzZWxmLl9icG1uRmFjdG9yeS5jcmVhdGUocHJvcGVydHkuJHR5cGUpO1xuXG4gICAgY29waWVkUHJvcGVydHkuJHBhcmVudCA9IHBhcmVudDtcblxuICAgIC8vIHJlY3Vyc2lvblxuICAgIGNvcGllZFByb3BlcnR5ID0gc2VsZi5jb3B5RWxlbWVudChwcm9wZXJ0eSwgY29waWVkUHJvcGVydHkpO1xuXG4gICAgcmV0dXJuIGNvcGllZFByb3BlcnR5O1xuICB9XG5cbiAgLy8gY29weSBwcmltaXRpdmUgcHJvcGVydGllc1xuICByZXR1cm4gcHJvcGVydHk7XG59O1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3BlcnR5TmFtZXMoZGVzY3JpcHRvciwga2VlcERlZmF1bHRQcm9wZXJ0aWVzKSB7XG4gIHJldHVybiByZWR1Y2UoZGVzY3JpcHRvci5wcm9wZXJ0aWVzLCBmdW5jdGlvbihwcm9wZXJ0aWVzLCBwcm9wZXJ0eSkge1xuXG4gICAgaWYgKGtlZXBEZWZhdWx0UHJvcGVydGllcyAmJiBwcm9wZXJ0eS5kZWZhdWx0KSB7XG4gICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcy5jb25jYXQocHJvcGVydHkubmFtZSk7XG4gIH0sIFtdKTtcbn1cblxuZnVuY3Rpb24gaXMoZWxlbWVudCwgdHlwZSkge1xuICByZXR1cm4gZWxlbWVudCAmJiAodHlwZW9mIGVsZW1lbnQuJGluc3RhbmNlT2YgPT09ICdmdW5jdGlvbicpICYmIGVsZW1lbnQuJGluc3RhbmNlT2YodHlwZSk7XG59IiwiaW1wb3J0IENvcHlQYXN0ZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb3B5LXBhc3RlJztcblxuaW1wb3J0IEJwbW5Db3B5UGFzdGUgZnJvbSAnLi9CcG1uQ29weVBhc3RlJztcbmltcG9ydCBNb2RkbGVDb3B5IGZyb20gJy4vTW9kZGxlQ29weSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBDb3B5UGFzdGVNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFsgJ2JwbW5Db3B5UGFzdGUnLCAnbW9kZGxlQ29weScgXSxcbiAgYnBtbkNvcHlQYXN0ZTogWyAndHlwZScsIEJwbW5Db3B5UGFzdGUgXSxcbiAgbW9kZGxlQ29weTogWyAndHlwZScsIE1vZGRsZUNvcHkgXVxufTtcbiIsImltcG9ydCB7IGdldERpIH0gZnJvbSAnLi4vLi4vZHJhdy9CcG1uUmVuZGVyVXRpbCc7XG5pbXBvcnQgeyBnZXRCdXNpbmVzc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZmlsdGVyLFxuICBtYXBcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBzZWxmQW5kQWxsQ2hpbGRyZW4gfSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0VsZW1lbnRzJztcblxuXG52YXIgSElHSF9QUklPUklUWSA9IDIwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5EaU9yZGVyaW5nKGV2ZW50QnVzLCBjYW52YXMpIHtcblxuICBldmVudEJ1cy5vbignc2F2ZVhNTC5zdGFydCcsIEhJR0hfUFJJT1JJVFksIG9yZGVyRGkpO1xuXG4gIGZ1bmN0aW9uIG9yZGVyRGkoKSB7XG4gICAgdmFyIHJvb3QgPSBjYW52YXMuZ2V0Um9vdEVsZW1lbnQoKSxcbiAgICAgICAgcm9vdERpID0gZ2V0QnVzaW5lc3NPYmplY3Qocm9vdCkuZGksXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICBkaUVsZW1lbnRzO1xuXG4gICAgZWxlbWVudHMgPSBzZWxmQW5kQWxsQ2hpbGRyZW4oWyByb290IF0sIGZhbHNlKTtcblxuICAgIC8vIG9ubHkgYnBtbmRpOlNoYXBlIGFuZCBicG1uZGk6RWRnZSBjYW4gYmUgZGlyZWN0IGNoaWxkcmVuIG9mIGJwbW5kaTpQbGFuZVxuICAgIGVsZW1lbnRzID0gZmlsdGVyKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICByZXR1cm4gZWxlbWVudCAhPT0gcm9vdCAmJiAhZWxlbWVudC5sYWJlbFRhcmdldDtcbiAgICB9KTtcblxuICAgIGRpRWxlbWVudHMgPSBtYXAoZWxlbWVudHMsIGdldERpKTtcblxuICAgIHJvb3REaS5zZXQoJ3BsYW5lRWxlbWVudCcsIGRpRWxlbWVudHMpO1xuICB9XG59XG5cbkJwbW5EaU9yZGVyaW5nLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdjYW52YXMnIF07XG4iLCJpbXBvcnQgQnBtbkRpT3JkZXJpbmcgZnJvbSAnLi4vZGktb3JkZXJpbmcvQnBtbkRpT3JkZXJpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbXG4gICAgJ2JwbW5EaU9yZGVyaW5nJ1xuICBdLFxuICBicG1uRGlPcmRlcmluZzogWyAndHlwZScsIEJwbW5EaU9yZGVyaW5nIF1cbn07IiwiaW1wb3J0IHtcbiAgZmlsdGVyXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgaXNBbnlcbn0gZnJvbSAnLi4vbW9kZWxpbmcvdXRpbC9Nb2RlbGluZ1V0aWwnO1xuXG5cbi8qKlxuICogUmVnaXN0ZXJzIGVsZW1lbnQgZXhjbHVkZSBmaWx0ZXJzIGZvciBlbGVtZW50cyB0aGF0XG4gKiBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgZGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uRGlzdHJpYnV0ZUVsZW1lbnRzKGRpc3RyaWJ1dGVFbGVtZW50cykge1xuXG4gIGRpc3RyaWJ1dGVFbGVtZW50cy5yZWdpc3RlckZpbHRlcihmdW5jdGlvbihlbGVtZW50cykge1xuICAgIHJldHVybiBmaWx0ZXIoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHZhciBjYW5ub3REaXN0cmlidXRlID0gaXNBbnkoZWxlbWVudCwgW1xuICAgICAgICAnYnBtbjpBc3NvY2lhdGlvbicsXG4gICAgICAgICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICAgICAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbicsXG4gICAgICAgICdicG1uOkRhdGFPdXRwdXRBc3NvY2lhdGlvbicsXG4gICAgICAgICdicG1uOkxhbmUnLFxuICAgICAgICAnYnBtbjpNZXNzYWdlRmxvdycsXG4gICAgICAgICdicG1uOlBhcnRpY2lwYW50JyxcbiAgICAgICAgJ2JwbW46U2VxdWVuY2VGbG93JyxcbiAgICAgICAgJ2JwbW46VGV4dEFubm90YXRpb24nXG4gICAgICBdKTtcblxuICAgICAgcmV0dXJuICEoZWxlbWVudC5sYWJlbFRhcmdldCB8fCBjYW5ub3REaXN0cmlidXRlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbkJwbW5EaXN0cmlidXRlRWxlbWVudHMuJGluamVjdCA9IFsgJ2Rpc3RyaWJ1dGVFbGVtZW50cycgXTsiLCJpbXBvcnQgRGlzdHJpYnV0ZUVsZW1lbnRzTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2Rpc3RyaWJ1dGUtZWxlbWVudHMnO1xuXG5pbXBvcnQgQnBtbkRpc3RyaWJ1dGVFbGVtZW50cyBmcm9tICcuL0JwbW5EaXN0cmlidXRlRWxlbWVudHMnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBEaXN0cmlidXRlRWxlbWVudHNNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFsgJ2JwbW5EaXN0cmlidXRlRWxlbWVudHMnIF0sXG4gIGJwbW5EaXN0cmlidXRlRWxlbWVudHM6IFsgJ3R5cGUnLCBCcG1uRGlzdHJpYnV0ZUVsZW1lbnRzIF1cbn07XG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgRWRpdG9yQWN0aW9ucyBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucy9FZGl0b3JBY3Rpb25zJztcblxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0QkJveFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0VsZW1lbnRzJztcblxuXG4vKipcbiAqIFJlZ2lzdGVycyBhbmQgZXhlY3V0ZXMgQlBNTiBzcGVjaWZpYyBlZGl0b3IgYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uRWRpdG9yQWN0aW9ucyhpbmplY3Rvcikge1xuICBpbmplY3Rvci5pbnZva2UoRWRpdG9yQWN0aW9ucywgdGhpcyk7XG59XG5cbmluaGVyaXRzKEJwbW5FZGl0b3JBY3Rpb25zLCBFZGl0b3JBY3Rpb25zKTtcblxuQnBtbkVkaXRvckFjdGlvbnMuJGluamVjdCA9IFtcbiAgJ2luamVjdG9yJ1xuXTtcblxuLyoqXG4gKiBSZWdpc3RlciBkZWZhdWx0IGFjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcbiAqL1xuQnBtbkVkaXRvckFjdGlvbnMucHJvdG90eXBlLl9yZWdpc3RlckRlZmF1bHRBY3Rpb25zID0gZnVuY3Rpb24oaW5qZWN0b3IpIHtcblxuICAvLyAoMCkgaW52b2tlIHN1cGVyIG1ldGhvZFxuXG4gIEVkaXRvckFjdGlvbnMucHJvdG90eXBlLl9yZWdpc3RlckRlZmF1bHRBY3Rpb25zLmNhbGwodGhpcywgaW5qZWN0b3IpO1xuXG4gIC8vICgxKSByZXRyaWV2ZSBvcHRpb25hbCBjb21wb25lbnRzIHRvIGludGVncmF0ZSB3aXRoXG5cbiAgdmFyIGNhbnZhcyA9IGluamVjdG9yLmdldCgnY2FudmFzJywgZmFsc2UpO1xuICB2YXIgZWxlbWVudFJlZ2lzdHJ5ID0gaW5qZWN0b3IuZ2V0KCdlbGVtZW50UmVnaXN0cnknLCBmYWxzZSk7XG4gIHZhciBzZWxlY3Rpb24gPSBpbmplY3Rvci5nZXQoJ3NlbGVjdGlvbicsIGZhbHNlKTtcbiAgdmFyIHNwYWNlVG9vbCA9IGluamVjdG9yLmdldCgnc3BhY2VUb29sJywgZmFsc2UpO1xuICB2YXIgbGFzc29Ub29sID0gaW5qZWN0b3IuZ2V0KCdsYXNzb1Rvb2wnLCBmYWxzZSk7XG4gIHZhciBoYW5kVG9vbCA9IGluamVjdG9yLmdldCgnaGFuZFRvb2wnLCBmYWxzZSk7XG4gIHZhciBnbG9iYWxDb25uZWN0ID0gaW5qZWN0b3IuZ2V0KCdnbG9iYWxDb25uZWN0JywgZmFsc2UpO1xuICB2YXIgZGlzdHJpYnV0ZUVsZW1lbnRzID0gaW5qZWN0b3IuZ2V0KCdkaXN0cmlidXRlRWxlbWVudHMnLCBmYWxzZSk7XG4gIHZhciBhbGlnbkVsZW1lbnRzID0gaW5qZWN0b3IuZ2V0KCdhbGlnbkVsZW1lbnRzJywgZmFsc2UpO1xuICB2YXIgZGlyZWN0RWRpdGluZyA9IGluamVjdG9yLmdldCgnZGlyZWN0RWRpdGluZycsIGZhbHNlKTtcbiAgdmFyIHNlYXJjaFBhZCA9IGluamVjdG9yLmdldCgnc2VhcmNoUGFkJywgZmFsc2UpO1xuICB2YXIgbW9kZWxpbmcgPSBpbmplY3Rvci5nZXQoJ21vZGVsaW5nJywgZmFsc2UpO1xuXG4gIC8vICgyKSBjaGVjayBjb21wb25lbnRzIGFuZCByZWdpc3RlciBhY3Rpb25zXG5cbiAgaWYgKGNhbnZhcyAmJiBlbGVtZW50UmVnaXN0cnkgJiYgc2VsZWN0aW9uKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJBY3Rpb24oJ3NlbGVjdEVsZW1lbnRzJywgZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIHNlbGVjdCBhbGwgZWxlbWVudHMgZXhjZXB0IGZvciB0aGUgaW52aXNpYmxlXG4gICAgICAvLyByb290IGVsZW1lbnRcbiAgICAgIHZhciByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpO1xuXG4gICAgICB2YXIgZWxlbWVudHMgPSBlbGVtZW50UmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgIT09IHJvb3RFbGVtZW50O1xuICAgICAgfSk7XG5cbiAgICAgIHNlbGVjdGlvbi5zZWxlY3QoZWxlbWVudHMpO1xuXG4gICAgICByZXR1cm4gZWxlbWVudHM7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoc3BhY2VUb29sKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJBY3Rpb24oJ3NwYWNlVG9vbCcsIGZ1bmN0aW9uKCkge1xuICAgICAgc3BhY2VUb29sLnRvZ2dsZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGxhc3NvVG9vbCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdsYXNzb1Rvb2wnLCBmdW5jdGlvbigpIHtcbiAgICAgIGxhc3NvVG9vbC50b2dnbGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChoYW5kVG9vbCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdoYW5kVG9vbCcsIGZ1bmN0aW9uKCkge1xuICAgICAgaGFuZFRvb2wudG9nZ2xlKCk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoZ2xvYmFsQ29ubmVjdCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdnbG9iYWxDb25uZWN0VG9vbCcsIGZ1bmN0aW9uKCkge1xuICAgICAgZ2xvYmFsQ29ubmVjdC50b2dnbGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChzZWxlY3Rpb24gJiYgZGlzdHJpYnV0ZUVsZW1lbnRzKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJBY3Rpb24oJ2Rpc3RyaWJ1dGVFbGVtZW50cycsIGZ1bmN0aW9uKG9wdHMpIHtcbiAgICAgIHZhciBjdXJyZW50U2VsZWN0aW9uID0gc2VsZWN0aW9uLmdldCgpLFxuICAgICAgICAgIHR5cGUgPSBvcHRzLnR5cGU7XG5cbiAgICAgIGlmIChjdXJyZW50U2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICBkaXN0cmlidXRlRWxlbWVudHMudHJpZ2dlcihjdXJyZW50U2VsZWN0aW9uLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChzZWxlY3Rpb24gJiYgYWxpZ25FbGVtZW50cykge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdhbGlnbkVsZW1lbnRzJywgZnVuY3Rpb24ob3B0cykge1xuICAgICAgdmFyIGN1cnJlbnRTZWxlY3Rpb24gPSBzZWxlY3Rpb24uZ2V0KCksXG4gICAgICAgICAgYWxpZ25lYWJsZUVsZW1lbnRzID0gW10sXG4gICAgICAgICAgdHlwZSA9IG9wdHMudHlwZTtcblxuICAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgIGFsaWduZWFibGVFbGVtZW50cyA9IGZpbHRlcihjdXJyZW50U2VsZWN0aW9uLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuICFpcyhlbGVtZW50LCAnYnBtbjpMYW5lJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFsaWduRWxlbWVudHMudHJpZ2dlcihhbGlnbmVhYmxlRWxlbWVudHMsIHR5cGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHNlbGVjdGlvbiAmJiBtb2RlbGluZykge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdzZXRDb2xvcicsIGZ1bmN0aW9uKG9wdHMpIHtcbiAgICAgIHZhciBjdXJyZW50U2VsZWN0aW9uID0gc2VsZWN0aW9uLmdldCgpO1xuXG4gICAgICBpZiAoY3VycmVudFNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgbW9kZWxpbmcuc2V0Q29sb3IoY3VycmVudFNlbGVjdGlvbiwgb3B0cyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoc2VsZWN0aW9uICYmIGRpcmVjdEVkaXRpbmcpIHtcbiAgICB0aGlzLl9yZWdpc3RlckFjdGlvbignZGlyZWN0RWRpdGluZycsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGN1cnJlbnRTZWxlY3Rpb24gPSBzZWxlY3Rpb24uZ2V0KCk7XG5cbiAgICAgIGlmIChjdXJyZW50U2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICBkaXJlY3RFZGl0aW5nLmFjdGl2YXRlKGN1cnJlbnRTZWxlY3Rpb25bMF0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHNlYXJjaFBhZCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdmaW5kJywgZnVuY3Rpb24oKSB7XG4gICAgICBzZWFyY2hQYWQudG9nZ2xlKCk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoY2FudmFzICYmIG1vZGVsaW5nKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJBY3Rpb24oJ21vdmVUb09yaWdpbicsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgICAgICAgYm91bmRpbmdCb3gsXG4gICAgICAgICAgZWxlbWVudHM7XG5cbiAgICAgIGlmIChpcyhyb290RWxlbWVudCwgJ2JwbW46Q29sbGFib3JhdGlvbicpKSB7XG4gICAgICAgIGVsZW1lbnRzID0gZWxlbWVudFJlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGlzKGVsZW1lbnQucGFyZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudHMgPSBlbGVtZW50UmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbWVudCAhPT0gcm9vdEVsZW1lbnQgJiYgIWlzKGVsZW1lbnQucGFyZW50LCAnYnBtbjpTdWJQcm9jZXNzJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBib3VuZGluZ0JveCA9IGdldEJCb3goZWxlbWVudHMpO1xuXG4gICAgICBtb2RlbGluZy5tb3ZlRWxlbWVudHMoXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICB7IHg6IC1ib3VuZGluZ0JveC54LCB5OiAtYm91bmRpbmdCb3gueSB9LFxuICAgICAgICByb290RWxlbWVudFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG59OyIsImltcG9ydCBFZGl0b3JBY3Rpb25zTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2VkaXRvci1hY3Rpb25zJztcblxuaW1wb3J0IEJwbW5FZGl0b3JBY3Rpb25zIGZyb20gJy4vQnBtbkVkaXRvckFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgRWRpdG9yQWN0aW9uc01vZHVsZVxuICBdLFxuICBlZGl0b3JBY3Rpb25zOiBbICd0eXBlJywgQnBtbkVkaXRvckFjdGlvbnMgXVxufTtcbiIsImltcG9ydCB7IGlzQW55IH0gZnJvbSAnLi4vbW9kZWxpbmcvdXRpbC9Nb2RlbGluZ1V0aWwnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkdyaWRTbmFwcGluZyhldmVudEJ1cykge1xyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdjcmVhdGUuaW5pdCcsXHJcbiAgICAnc2hhcGUubW92ZS5pbml0J1xyXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc2hhcGUgPSBldmVudC5zaGFwZTtcclxuXHJcbiAgICBpZiAoaXNBbnkoc2hhcGUsIFtcclxuICAgICAgJ2JwbW46UGFydGljaXBhbnQnLFxyXG4gICAgICAnYnBtbjpTdWJQcm9jZXNzJyxcclxuICAgICAgJ2JwbW46VGV4dEFubm90YXRpb24nXHJcbiAgICBdKSkge1xyXG4gICAgICBpZiAoIWNvbnRleHQuZ3JpZFNuYXBwaW5nQ29udGV4dCkge1xyXG4gICAgICAgIGNvbnRleHQuZ3JpZFNuYXBwaW5nQ29udGV4dCA9IHt9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb250ZXh0LmdyaWRTbmFwcGluZ0NvbnRleHQuc25hcExvY2F0aW9uID0gJ3RvcC1sZWZ0JztcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuQnBtbkdyaWRTbmFwcGluZy4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07IiwiaW1wb3J0IHsgZ2V0TmV3U2hhcGVQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2F1dG8tcGxhY2UvQnBtbkF1dG9QbGFjZVV0aWwnO1xyXG5cclxuaW1wb3J0IHsgZ2V0TWlkIH0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xyXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcclxuXHJcbnZhciBISUdIX1BSSU9SSVRZID0gMjAwMDtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBdXRvUGxhY2VCZWhhdmlvcihldmVudEJ1cywgZ3JpZFNuYXBwaW5nKSB7XHJcbiAgZXZlbnRCdXMub24oJ2F1dG9QbGFjZScsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgIHZhciBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcclxuICAgICAgICBzb3VyY2VNaWQgPSBnZXRNaWQoc291cmNlKSxcclxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XHJcblxyXG4gICAgdmFyIHBvc2l0aW9uID0gZ2V0TmV3U2hhcGVQb3NpdGlvbihzb3VyY2UsIHNoYXBlKTtcclxuXHJcbiAgICBbICd4JywgJ3knIF0uZm9yRWFjaChmdW5jdGlvbihheGlzKSB7XHJcbiAgICAgIHZhciBvcHRpb25zID0ge307XHJcblxyXG4gICAgICAvLyBkbyBub3Qgc25hcCBpZiB4L3kgZXF1YWxcclxuICAgICAgaWYgKHBvc2l0aW9uWyBheGlzIF0gPT09IHNvdXJjZU1pZFsgYXhpcyBdKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocG9zaXRpb25bIGF4aXMgXSA+IHNvdXJjZU1pZFsgYXhpcyBdKSB7XHJcbiAgICAgICAgb3B0aW9ucy5taW4gPSBwb3NpdGlvblsgYXhpcyBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9wdGlvbnMubWF4ID0gcG9zaXRpb25bIGF4aXMgXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XHJcblxyXG4gICAgICAgIGlmIChpc0hvcml6b250YWwoYXhpcykpIHtcclxuICAgICAgICAgIG9wdGlvbnMub2Zmc2V0ID0gLXNoYXBlLndpZHRoIC8gMjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb3B0aW9ucy5vZmZzZXQgPSAtc2hhcGUuaGVpZ2h0IC8gMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBwb3NpdGlvblsgYXhpcyBdID0gZ3JpZFNuYXBwaW5nLnNuYXBWYWx1ZShwb3NpdGlvblsgYXhpcyBdLCBvcHRpb25zKTtcclxuXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBtdXN0IGJlIHJldHVybmVkIHRvIGJlIGNvbnNpZGVyZWQgYnkgYXV0byBwbGFjZVxyXG4gICAgcmV0dXJuIHBvc2l0aW9uO1xyXG4gIH0pO1xyXG59XHJcblxyXG5BdXRvUGxhY2VCZWhhdmlvci4kaW5qZWN0ID0gW1xyXG4gICdldmVudEJ1cycsXHJcbiAgJ2dyaWRTbmFwcGluZydcclxuXTtcclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5cclxuZnVuY3Rpb24gaXNIb3Jpem9udGFsKGF4aXMpIHtcclxuICByZXR1cm4gYXhpcyA9PT0gJ3gnO1xyXG59IiwiaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG52YXIgSElHSEVSX1BSSU9SSVRZID0gMTc1MDtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yKGNhbnZhcywgZXZlbnRCdXMsIGdyaWRTbmFwcGluZykge1xyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdjcmVhdGUuc3RhcnQnLFxyXG4gICAgJ3NoYXBlLm1vdmUuc3RhcnQnXHJcbiAgXSwgSElHSEVSX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcclxuICAgICAgICByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpO1xyXG5cclxuICAgIGlmICghaXMoc2hhcGUsICdicG1uOlBhcnRpY2lwYW50JykgfHxcclxuICAgICAgIWlzKHJvb3RFbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgfHxcclxuICAgICAgIXJvb3RFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGNyZWF0ZUNvbnN0cmFpbnRzID0gY29udGV4dC5jcmVhdGVDb25zdHJhaW50cztcclxuXHJcbiAgICBpZiAoIWNyZWF0ZUNvbnN0cmFpbnRzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBzaGFwZS53aWR0aCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUoc2hhcGUud2lkdGgsIHsgbWluOiBzaGFwZS53aWR0aCB9KTtcclxuICAgIHNoYXBlLmhlaWdodCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUoc2hhcGUuaGVpZ2h0LCB7IG1pbjogc2hhcGUuaGVpZ2h0IH0pO1xyXG4gIH0pO1xyXG59XHJcblxyXG5DcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yLiRpbmplY3QgPSBbXHJcbiAgJ2NhbnZhcycsXHJcbiAgJ2V2ZW50QnVzJyxcclxuICAnZ3JpZFNuYXBwaW5nJ1xyXG5dOyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBwb2ludHNBbGlnbmVkIH0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9HZW9tZXRyeSc7XG5cbmltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciBISUdIX1BSSU9SSVRZID0gMzAwMDtcblxuXG4vKipcbiAqIFNuYXBzIGNvbm5lY3Rpb25zIHdpdGggTWFuaGF0dGFuIGxheW91dC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTGF5b3V0Q29ubmVjdGlvbkJlaGF2aW9yKGV2ZW50QnVzLCBncmlkU25hcHBpbmcsIG1vZGVsaW5nKSB7XG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLl9ncmlkU25hcHBpbmcgPSBncmlkU25hcHBpbmc7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFtcbiAgICAnY29ubmVjdGlvbi5jcmVhdGUnLFxuICAgICdjb25uZWN0aW9uLmxheW91dCdcbiAgXSwgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgd2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHM7XG5cbiAgICBpZiAoaGludHMuY29ubmVjdGlvblN0YXJ0IHx8IGhpbnRzLmNvbm5lY3Rpb25FbmQgfHwgaGludHMuY3JlYXRlRWxlbWVudHNCZWhhdmlvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWhhc01pZGRsZVNlZ21lbnRzKHdheXBvaW50cykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtb2RlbGluZy51cGRhdGVXYXlwb2ludHMoY29ubmVjdGlvbiwgc2VsZi5zbmFwTWlkZGxlU2VnbWVudHMod2F5cG9pbnRzKSk7XG4gIH0pO1xufVxuXG5MYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2dyaWRTbmFwcGluZycsXG4gICdtb2RlbGluZydcbl07XG5cbmluaGVyaXRzKExheW91dENvbm5lY3Rpb25CZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuLyoqXG4gKiBTbmFwIG1pZGRsZSBzZWdtZW50cyBvZiBhIGdpdmVuIGNvbm5lY3Rpb24uXG4gKlxuICogQHBhcmFtIHtBcnJheTxQb2ludD59IHdheXBvaW50c1xuICpcbiAqIEByZXR1cm5zIHtBcnJheTxQb2ludD59XG4gKi9cbkxheW91dENvbm5lY3Rpb25CZWhhdmlvci5wcm90b3R5cGUuc25hcE1pZGRsZVNlZ21lbnRzID0gZnVuY3Rpb24od2F5cG9pbnRzKSB7XG4gIHZhciBncmlkU25hcHBpbmcgPSB0aGlzLl9ncmlkU25hcHBpbmcsXG4gICAgICBzbmFwcGVkO1xuXG4gIHdheXBvaW50cyA9IHdheXBvaW50cy5zbGljZSgpO1xuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgd2F5cG9pbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuXG4gICAgc25hcHBlZCA9IHNuYXBTZWdtZW50KGdyaWRTbmFwcGluZywgd2F5cG9pbnRzW2ldLCB3YXlwb2ludHNbaSArIDFdKTtcblxuICAgIHdheXBvaW50c1tpXSA9IHNuYXBwZWRbMF07XG4gICAgd2F5cG9pbnRzW2kgKyAxXSA9IHNuYXBwZWRbMV07XG4gIH1cblxuICByZXR1cm4gd2F5cG9pbnRzO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGEgY29ubmVjdGlvbiBoYXMgYSBtaWRkbGUgc2VnbWVudHMuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gd2F5cG9pbnRzXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc01pZGRsZVNlZ21lbnRzKHdheXBvaW50cykge1xuICByZXR1cm4gd2F5cG9pbnRzLmxlbmd0aCA+IDM7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhbiBhbGlnbm1lbnQgaXMgaG9yaXpvbnRhbC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWxpZ25lZFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBob3Jpem9udGFsbHlBbGlnbmVkKGFsaWduZWQpIHtcbiAgcmV0dXJuIGFsaWduZWQgPT09ICdoJztcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGFuIGFsaWdubWVudCBpcyB2ZXJ0aWNhbC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWxpZ25lZFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB2ZXJ0aWNhbGx5QWxpZ25lZChhbGlnbmVkKSB7XG4gIHJldHVybiBhbGlnbmVkID09PSAndic7XG59XG5cbi8qKlxuICogR2V0IG1pZGRsZSBzZWdtZW50cyBmcm9tIGEgZ2l2ZW4gY29ubmVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB3YXlwb2ludHNcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHNuYXBTZWdtZW50KGdyaWRTbmFwcGluZywgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kKSB7XG5cbiAgdmFyIGFsaWduZWQgPSBwb2ludHNBbGlnbmVkKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCk7XG5cbiAgdmFyIHNuYXBwZWQgPSB7fTtcblxuICBpZiAoaG9yaXpvbnRhbGx5QWxpZ25lZChhbGlnbmVkKSkge1xuXG4gICAgLy8gc25hcCBob3Jpem9udGFsbHlcbiAgICBzbmFwcGVkLnkgPSBncmlkU25hcHBpbmcuc25hcFZhbHVlKHNlZ21lbnRTdGFydC55KTtcbiAgfVxuXG4gIGlmICh2ZXJ0aWNhbGx5QWxpZ25lZChhbGlnbmVkKSkge1xuXG4gICAgLy8gc25hcCB2ZXJ0aWNhbGx5XG4gICAgc25hcHBlZC54ID0gZ3JpZFNuYXBwaW5nLnNuYXBWYWx1ZShzZWdtZW50U3RhcnQueCk7XG4gIH1cblxuICBpZiAoJ3gnIGluIHNuYXBwZWQgfHwgJ3knIGluIHNuYXBwZWQpIHtcbiAgICBzZWdtZW50U3RhcnQgPSBhc3NpZ24oe30sIHNlZ21lbnRTdGFydCwgc25hcHBlZCk7XG4gICAgc2VnbWVudEVuZCA9IGFzc2lnbih7fSwgc2VnbWVudEVuZCwgc25hcHBlZCk7XG4gIH1cblxuICByZXR1cm4gWyBzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQgXTtcbn0iLCJpbXBvcnQgQXV0b1BsYWNlQmVoYXZpb3IgZnJvbSAnLi9BdXRvUGxhY2VCZWhhdmlvcic7XHJcbmltcG9ydCBDcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yIGZyb20gJy4vQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvcic7XHJcbmltcG9ydCBMYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IgZnJvbSAnLi9MYXlvdXRDb25uZWN0aW9uQmVoYXZpb3InO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIF9faW5pdF9fOiBbXHJcbiAgICAnZ3JpZFNuYXBwaW5nQXV0b1BsYWNlQmVoYXZpb3InLFxyXG4gICAgJ2dyaWRTbmFwcGluZ0NyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3InLFxyXG4gICAgJ2dyaWRTbmFwcGluZ0xheW91dENvbm5lY3Rpb25CZWhhdmlvcicsXHJcbiAgXSxcclxuICBncmlkU25hcHBpbmdBdXRvUGxhY2VCZWhhdmlvcjogWyAndHlwZScsIEF1dG9QbGFjZUJlaGF2aW9yIF0sXHJcbiAgZ3JpZFNuYXBwaW5nQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvcjogWyAndHlwZScsIENyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3IgXSxcclxuICBncmlkU25hcHBpbmdMYXlvdXRDb25uZWN0aW9uQmVoYXZpb3I6IFsgJ3R5cGUnLCBMYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IgXVxyXG59OyIsImltcG9ydCBCcG1uR3JpZFNuYXBwaW5nIGZyb20gJy4vQnBtbkdyaWRTbmFwcGluZyc7XHJcbmltcG9ydCBHcmlkU25hcHBpbmdNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZyc7XHJcblxyXG5pbXBvcnQgR3JpZFNuYXBwaW5nQmVoYXZpb3JNb2R1bGUgZnJvbSAnLi9iZWhhdmlvcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgX19kZXBlbmRzX186IFtcclxuICAgIEdyaWRTbmFwcGluZ01vZHVsZSxcclxuICAgIEdyaWRTbmFwcGluZ0JlaGF2aW9yTW9kdWxlXHJcbiAgXSxcclxuICBfX2luaXRfXzogWyAnYnBtbkdyaWRTbmFwcGluZycgXSxcclxuICBicG1uR3JpZFNuYXBwaW5nOiBbICd0eXBlJywgQnBtbkdyaWRTbmFwcGluZyBdXHJcbn07IiwiaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7IGlzRXhwYW5kZWQgfSBmcm9tICcuLi8uLi91dGlsL0RpVXRpbCc7XG5cbnZhciBMQUJFTF9XSURUSCA9IDMwLFxuICAgIExBQkVMX0hFSUdIVCA9IDMwO1xuXG5cbi8qKlxuICogQlBNTi1zcGVjaWZpYyBoaXQgem9uZXMgYW5kIGludGVyYWN0aW9uIGZpeGVzLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0ludGVyYWN0aW9uRXZlbnRzfSBpbnRlcmFjdGlvbkV2ZW50c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uSW50ZXJhY3Rpb25FdmVudHMoZXZlbnRCdXMsIGludGVyYWN0aW9uRXZlbnRzKSB7XG5cbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMgPSBpbnRlcmFjdGlvbkV2ZW50cztcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRCdXMub24oW1xuICAgICdpbnRlcmFjdGlvbkV2ZW50cy5jcmVhdGVIaXQnLFxuICAgICdpbnRlcmFjdGlvbkV2ZW50cy51cGRhdGVIaXQnXG4gIF0sIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgZ2Z4ID0gY29udGV4dC5nZng7XG5cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46TGFuZScpKSB7XG4gICAgICByZXR1cm4gc2VsZi5jcmVhdGVQYXJ0aWNpcGFudEhpdChlbGVtZW50LCBnZngpO1xuICAgIH0gZWxzZVxuXG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICAgIGlmIChpc0V4cGFuZGVkKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBzZWxmLmNyZWF0ZVBhcnRpY2lwYW50SGl0KGVsZW1lbnQsIGdmeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2VsZi5jcmVhdGVEZWZhdWx0SGl0KGVsZW1lbnQsIGdmeCk7XG4gICAgICB9XG4gICAgfSBlbHNlXG5cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46U3ViUHJvY2VzcycpKSB7XG4gICAgICBpZiAoaXNFeHBhbmRlZChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gc2VsZi5jcmVhdGVTdWJQcm9jZXNzSGl0KGVsZW1lbnQsIGdmeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2VsZi5jcmVhdGVEZWZhdWx0SGl0KGVsZW1lbnQsIGdmeCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxufVxuXG5CcG1uSW50ZXJhY3Rpb25FdmVudHMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2ludGVyYWN0aW9uRXZlbnRzJ1xuXTtcblxuXG5CcG1uSW50ZXJhY3Rpb25FdmVudHMucHJvdG90eXBlLmNyZWF0ZURlZmF1bHRIaXQgPSBmdW5jdGlvbihlbGVtZW50LCBnZngpIHtcbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMucmVtb3ZlSGl0cyhnZngpO1xuXG4gIHRoaXMuX2ludGVyYWN0aW9uRXZlbnRzLmNyZWF0ZURlZmF1bHRIaXQoZWxlbWVudCwgZ2Z4KTtcblxuICAvLyBpbmRpY2F0ZSB0aGF0IHdlIGNyZWF0ZWQgYSBoaXRcbiAgcmV0dXJuIHRydWU7XG59O1xuXG5CcG1uSW50ZXJhY3Rpb25FdmVudHMucHJvdG90eXBlLmNyZWF0ZVBhcnRpY2lwYW50SGl0ID0gZnVuY3Rpb24oZWxlbWVudCwgZ2Z4KSB7XG5cbiAgLy8gcmVtb3ZlIGV4aXN0aW5nIGhpdHNcbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMucmVtb3ZlSGl0cyhnZngpO1xuXG4gIC8vIGFkZCBvdXRsaW5lIGhpdFxuICB0aGlzLl9pbnRlcmFjdGlvbkV2ZW50cy5jcmVhdGVCb3hIaXQoZ2Z4LCAnY2xpY2stc3Ryb2tlJywge1xuICAgIHdpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHRcbiAgfSk7XG5cbiAgLy8gYWRkIGxhYmVsIGhpdFxuICB0aGlzLl9pbnRlcmFjdGlvbkV2ZW50cy5jcmVhdGVCb3hIaXQoZ2Z4LCAnYWxsJywge1xuICAgIHdpZHRoOiBMQUJFTF9XSURUSCxcbiAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0XG4gIH0pO1xuXG4gIC8vIGluZGljYXRlIHRoYXQgd2UgY3JlYXRlZCBhIGhpdFxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkJwbW5JbnRlcmFjdGlvbkV2ZW50cy5wcm90b3R5cGUuY3JlYXRlU3ViUHJvY2Vzc0hpdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGdmeCkge1xuXG4gIC8vIHJlbW92ZSBleGlzdGluZyBoaXRzXG4gIHRoaXMuX2ludGVyYWN0aW9uRXZlbnRzLnJlbW92ZUhpdHMoZ2Z4KTtcblxuICAvLyBhZGQgb3V0bGluZSBoaXRcbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlQm94SGl0KGdmeCwgJ2NsaWNrLXN0cm9rZScsIHtcbiAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0XG4gIH0pO1xuXG4gIC8vIGFkZCBsYWJlbCBoaXRcbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlQm94SGl0KGdmeCwgJ2FsbCcsIHtcbiAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICBoZWlnaHQ6IExBQkVMX0hFSUdIVFxuICB9KTtcblxuICAvLyBpbmRpY2F0ZSB0aGF0IHdlIGNyZWF0ZWQgYSBoaXRcbiAgcmV0dXJuIHRydWU7XG59OyIsImltcG9ydCBCcG1uSW50ZXJhY3Rpb25FdmVudHMgZnJvbSAnLi9CcG1uSW50ZXJhY3Rpb25FdmVudHMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdicG1uSW50ZXJhY3Rpb25FdmVudHMnIF0sXG4gIGJwbW5JbnRlcmFjdGlvbkV2ZW50czogWyAndHlwZScsIEJwbW5JbnRlcmFjdGlvbkV2ZW50cyBdXG59OyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBLZXlib2FyZEJpbmRpbmdzIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2tleWJvYXJkL0tleWJvYXJkQmluZGluZ3MnO1xuXG5cbi8qKlxuICogQlBNTiAyLjAgc3BlY2lmaWMga2V5Ym9hcmQgYmluZGluZ3MuXG4gKlxuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbktleWJvYXJkQmluZGluZ3MoaW5qZWN0b3IpIHtcbiAgaW5qZWN0b3IuaW52b2tlKEtleWJvYXJkQmluZGluZ3MsIHRoaXMpO1xufVxuXG5pbmhlcml0cyhCcG1uS2V5Ym9hcmRCaW5kaW5ncywgS2V5Ym9hcmRCaW5kaW5ncyk7XG5cbkJwbW5LZXlib2FyZEJpbmRpbmdzLiRpbmplY3QgPSBbXG4gICdpbmplY3Rvcidcbl07XG5cblxuLyoqXG4gKiBSZWdpc3RlciBhdmFpbGFibGUga2V5Ym9hcmQgYmluZGluZ3MuXG4gKlxuICogQHBhcmFtIHtLZXlib2FyZH0ga2V5Ym9hcmRcbiAqIEBwYXJhbSB7RWRpdG9yQWN0aW9uc30gZWRpdG9yQWN0aW9uc1xuICovXG5CcG1uS2V5Ym9hcmRCaW5kaW5ncy5wcm90b3R5cGUucmVnaXN0ZXJCaW5kaW5ncyA9IGZ1bmN0aW9uKGtleWJvYXJkLCBlZGl0b3JBY3Rpb25zKSB7XG5cbiAgLy8gaW5oZXJpdCBkZWZhdWx0IGJpbmRpbmdzXG4gIEtleWJvYXJkQmluZGluZ3MucHJvdG90eXBlLnJlZ2lzdGVyQmluZGluZ3MuY2FsbCh0aGlzLCBrZXlib2FyZCwgZWRpdG9yQWN0aW9ucyk7XG5cbiAgLyoqXG4gICAqIEFkZCBrZXlib2FyZCBiaW5kaW5nIGlmIHJlc3BlY3RpdmUgZWRpdG9yIGFjdGlvblxuICAgKiBpcyByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gdGhhdCBpbXBsZW1lbnRzIHRoZSBrZXkgYmluZGluZ1xuICAgKi9cbiAgZnVuY3Rpb24gYWRkTGlzdGVuZXIoYWN0aW9uLCBmbikge1xuXG4gICAgaWYgKGVkaXRvckFjdGlvbnMuaXNSZWdpc3RlcmVkKGFjdGlvbikpIHtcbiAgICAgIGtleWJvYXJkLmFkZExpc3RlbmVyKGZuKTtcbiAgICB9XG4gIH1cblxuICAvLyBzZWxlY3QgYWxsIGVsZW1lbnRzXG4gIC8vIENUUkwgKyBBXG4gIGFkZExpc3RlbmVyKCdzZWxlY3RFbGVtZW50cycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNLZXkoWydhJywgJ0EnXSwgZXZlbnQpICYmIGtleWJvYXJkLmlzQ21kKGV2ZW50KSkge1xuICAgICAgZWRpdG9yQWN0aW9ucy50cmlnZ2VyKCdzZWxlY3RFbGVtZW50cycpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHNlYXJjaCBsYWJlbHNcbiAgLy8gQ1RSTCArIEZcbiAgYWRkTGlzdGVuZXIoJ2ZpbmQnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGtleWJvYXJkLmlzS2V5KFsnZicsICdGJ10sIGV2ZW50KSAmJiBrZXlib2FyZC5pc0NtZChldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignZmluZCcpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGFjdGl2YXRlIHNwYWNlIHRvb2xcbiAgLy8gU1xuICBhZGRMaXN0ZW5lcignc3BhY2VUb29sJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChrZXlib2FyZC5oYXNNb2RpZmllcihldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNLZXkoWydzJywgJ1MnXSwgZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ3NwYWNlVG9vbCcpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGFjdGl2YXRlIGxhc3NvIHRvb2xcbiAgLy8gTFxuICBhZGRMaXN0ZW5lcignbGFzc29Ub29sJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChrZXlib2FyZC5oYXNNb2RpZmllcihldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNLZXkoWydsJywgJ0wnXSwgZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ2xhc3NvVG9vbCcpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGFjdGl2YXRlIGhhbmQgdG9vbFxuICAvLyBIXG4gIGFkZExpc3RlbmVyKCdoYW5kVG9vbCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoa2V5Ym9hcmQuaGFzTW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleWJvYXJkLmlzS2V5KFsnaCcsICdIJ10sIGV2ZW50KSkge1xuICAgICAgZWRpdG9yQWN0aW9ucy50cmlnZ2VyKCdoYW5kVG9vbCcpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGFjdGl2YXRlIGdsb2JhbCBjb25uZWN0IHRvb2xcbiAgLy8gQ1xuICBhZGRMaXN0ZW5lcignZ2xvYmFsQ29ubmVjdFRvb2wnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGtleWJvYXJkLmhhc01vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXlib2FyZC5pc0tleShbJ2MnLCAnQyddLCBldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignZ2xvYmFsQ29ubmVjdFRvb2wnKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyBhY3RpdmF0ZSBkaXJlY3QgZWRpdGluZ1xuICAvLyBFXG4gIGFkZExpc3RlbmVyKCdkaXJlY3RFZGl0aW5nJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChrZXlib2FyZC5oYXNNb2RpZmllcihldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNLZXkoWydlJywgJ0UnXSwgZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ2RpcmVjdEVkaXRpbmcnKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxufTsiLCJpbXBvcnQgS2V5Ym9hcmRNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQnO1xuXG5pbXBvcnQgQnBtbktleWJvYXJkQmluZGluZ3MgZnJvbSAnLi9CcG1uS2V5Ym9hcmRCaW5kaW5ncyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBLZXlib2FyZE1vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAna2V5Ym9hcmRCaW5kaW5ncycgXSxcbiAga2V5Ym9hcmRCaW5kaW5nczogWyAndHlwZScsIEJwbW5LZXlib2FyZEJpbmRpbmdzIF1cbn07XG4iLCJpbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGUsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICB0cmFuc2xhdGVcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9TdmdUcmFuc2Zvcm1VdGlsJztcblxudmFyIE1BUktFUl9ISURERU4gPSAnZGpzLWVsZW1lbnQtaGlkZGVuJyxcbiAgICBNQVJLRVJfTEFCRUxfSElEREVOID0gJ2Rqcy1sYWJlbC1oaWRkZW4nO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExhYmVsRWRpdGluZ1ByZXZpZXcoXG4gICAgZXZlbnRCdXMsIGNhbnZhcywgZWxlbWVudFJlZ2lzdHJ5LFxuICAgIHBhdGhNYXApIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIGRlZmF1bHRMYXllciA9IGNhbnZhcy5nZXREZWZhdWx0TGF5ZXIoKTtcblxuICB2YXIgZWxlbWVudCwgYWJzb2x1dGVFbGVtZW50QkJveCwgZ2Z4O1xuXG4gIGV2ZW50QnVzLm9uKCdkaXJlY3RFZGl0aW5nLmFjdGl2YXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBhY3RpdmVQcm92aWRlciA9IGNvbnRleHQuYWN0aXZlO1xuXG4gICAgZWxlbWVudCA9IGFjdGl2ZVByb3ZpZGVyLmVsZW1lbnQubGFiZWwgfHwgYWN0aXZlUHJvdmlkZXIuZWxlbWVudDtcblxuICAgIC8vIHRleHQgYW5ub3RhdGlvblxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XG4gICAgICBhYnNvbHV0ZUVsZW1lbnRCQm94ID0gY2FudmFzLmdldEFic29sdXRlQkJveChlbGVtZW50KTtcblxuICAgICAgZ2Z4ID0gc3ZnQ3JlYXRlKCdnJyk7XG5cbiAgICAgIHZhciB0ZXh0UGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RFWFRfQU5OT1RBVElPTicsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjAsXG4gICAgICAgICAgbXk6IDAuMFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIHBhdGggPSBzZWxmLnBhdGggPSBzdmdDcmVhdGUoJ3BhdGgnKTtcblxuICAgICAgc3ZnQXR0cihwYXRoLCB7XG4gICAgICAgIGQ6IHRleHRQYXRoRGF0YSxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudClcbiAgICAgIH0pO1xuXG4gICAgICBzdmdBcHBlbmQoZ2Z4LCBwYXRoKTtcblxuICAgICAgc3ZnQXBwZW5kKGRlZmF1bHRMYXllciwgZ2Z4KTtcblxuICAgICAgdHJhbnNsYXRlKGdmeCwgZWxlbWVudC54LCBlbGVtZW50LnkpO1xuICAgIH1cblxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpIHx8XG4gICAgICAgIGVsZW1lbnQubGFiZWxUYXJnZXQpIHtcbiAgICAgIGNhbnZhcy5hZGRNYXJrZXIoZWxlbWVudCwgTUFSS0VSX0hJRERFTik7XG4gICAgfSBlbHNlIGlmIChpcyhlbGVtZW50LCAnYnBtbjpUYXNrJykgfHxcbiAgICAgICAgICAgICAgIGlzKGVsZW1lbnQsICdicG1uOkNhbGxBY3Rpdml0eScpIHx8XG4gICAgICAgICAgICAgICBpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgfHxcbiAgICAgICAgICAgICAgIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICAgIGNhbnZhcy5hZGRNYXJrZXIoZWxlbWVudCwgTUFSS0VSX0xBQkVMX0hJRERFTik7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignZGlyZWN0RWRpdGluZy5yZXNpemUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICAvLyB0ZXh0IGFubm90YXRpb25cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgICAgdmFyIGhlaWdodCA9IGNvbnRleHQuaGVpZ2h0LFxuICAgICAgICAgIGR5ID0gY29udGV4dC5keTtcblxuICAgICAgdmFyIG5ld0VsZW1lbnRIZWlnaHQgPSBNYXRoLm1heChlbGVtZW50LmhlaWdodCAvIGFic29sdXRlRWxlbWVudEJCb3guaGVpZ2h0ICogKGhlaWdodCArIGR5KSwgMCk7XG5cbiAgICAgIHZhciB0ZXh0UGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RFWFRfQU5OT1RBVElPTicsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IG5ld0VsZW1lbnRIZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuMCxcbiAgICAgICAgICBteTogMC4wXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzdmdBdHRyKHNlbGYucGF0aCwge1xuICAgICAgICBkOiB0ZXh0UGF0aERhdGFcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnZGlyZWN0RWRpdGluZy5jb21wbGV0ZScsICdkaXJlY3RFZGl0aW5nLmNhbmNlbCcgXSwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBhY3RpdmVQcm92aWRlciA9IGNvbnRleHQuYWN0aXZlO1xuXG4gICAgaWYgKGFjdGl2ZVByb3ZpZGVyKSB7XG4gICAgICBjYW52YXMucmVtb3ZlTWFya2VyKGFjdGl2ZVByb3ZpZGVyLmVsZW1lbnQubGFiZWwgfHwgYWN0aXZlUHJvdmlkZXIuZWxlbWVudCwgTUFSS0VSX0hJRERFTik7XG4gICAgICBjYW52YXMucmVtb3ZlTWFya2VyKGVsZW1lbnQsIE1BUktFUl9MQUJFTF9ISURERU4pO1xuICAgIH1cblxuICAgIGVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgYWJzb2x1dGVFbGVtZW50QkJveCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChnZngpIHtcbiAgICAgIHN2Z1JlbW92ZShnZngpO1xuXG4gICAgICBnZnggPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9KTtcbn1cblxuTGFiZWxFZGl0aW5nUHJldmlldy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdwYXRoTWFwJ1xuXTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdENvbG9yKSB7XG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIHJldHVybiBiby5kaS5nZXQoJ3N0cm9rZScpIHx8IGRlZmF1bHRDb2xvciB8fCAnYmxhY2snO1xufSIsImltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGdldExhYmVsXG59IGZyb20gJy4vTGFiZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0QnVzaW5lc3NPYmplY3QsXG4gIGlzXG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgY3JlYXRlQ2F0ZWdvcnlWYWx1ZVxufSBmcm9tICcuLi9tb2RlbGluZy9iZWhhdmlvci91dGlsL0NhdGVnb3J5VXRpbCc7XG5cbmltcG9ydCB7IGlzQW55IH0gZnJvbSAnLi4vbW9kZWxpbmcvdXRpbC9Nb2RlbGluZ1V0aWwnO1xuaW1wb3J0IHsgaXNFeHBhbmRlZCB9IGZyb20gJy4uLy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0RXh0ZXJuYWxMYWJlbE1pZCxcbiAgaXNMYWJlbEV4dGVybmFsLFxuICBoYXNFeHRlcm5hbExhYmVsLFxuICBpc0xhYmVsXG59IGZyb20gJy4uLy4uL3V0aWwvTGFiZWxVdGlsJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMYWJlbEVkaXRpbmdQcm92aWRlcihcbiAgICBldmVudEJ1cywgYnBtbkZhY3RvcnksIGNhbnZhcywgZGlyZWN0RWRpdGluZyxcbiAgICBtb2RlbGluZywgcmVzaXplSGFuZGxlcywgdGV4dFJlbmRlcmVyKSB7XG5cbiAgdGhpcy5fYnBtbkZhY3RvcnkgPSBicG1uRmFjdG9yeTtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl90ZXh0UmVuZGVyZXIgPSB0ZXh0UmVuZGVyZXI7XG5cbiAgZGlyZWN0RWRpdGluZy5yZWdpc3RlclByb3ZpZGVyKHRoaXMpO1xuXG4gIC8vIGxpc3RlbiB0byBkYmxjbGljayBvbiBub24tcm9vdCBlbGVtZW50c1xuICBldmVudEJ1cy5vbignZWxlbWVudC5kYmxjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgYWN0aXZhdGVEaXJlY3RFZGl0KGV2ZW50LmVsZW1lbnQsIHRydWUpO1xuICB9KTtcblxuICAvLyBjb21wbGV0ZSBvbiBmb2xsb3d1cCBjYW52YXMgb3BlcmF0aW9uXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnYXV0b1BsYWNlLnN0YXJ0JyxcbiAgICAnY2FudmFzLnZpZXdib3guY2hhbmdpbmcnLFxuICAgICdkcmFnLmluaXQnLFxuICAgICdlbGVtZW50Lm1vdXNlZG93bicsXG4gICAgJ3BvcHVwTWVudS5vcGVuJ1xuICBdLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgaWYgKGRpcmVjdEVkaXRpbmcuaXNBY3RpdmUoKSkge1xuICAgICAgZGlyZWN0RWRpdGluZy5jb21wbGV0ZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gY2FuY2VsIG9uIGNvbW1hbmQgc3RhY2sgY2hhbmdlc1xuICBldmVudEJ1cy5vbihbICdjb21tYW5kU3RhY2suY2hhbmdlZCcgXSwgZnVuY3Rpb24oZSkge1xuICAgIGlmIChkaXJlY3RFZGl0aW5nLmlzQWN0aXZlKCkpIHtcbiAgICAgIGRpcmVjdEVkaXRpbmcuY2FuY2VsKCk7XG4gICAgfVxuICB9KTtcblxuXG4gIGV2ZW50QnVzLm9uKCdkaXJlY3RFZGl0aW5nLmFjdGl2YXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZXNpemVIYW5kbGVzLnJlbW92ZVJlc2l6ZXJzKCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjcmVhdGUuZW5kJywgNTAwLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBlbGVtZW50ID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgY2FuRXhlY3V0ZSA9IGV2ZW50LmNvbnRleHQuY2FuRXhlY3V0ZSxcbiAgICAgICAgaXNUb3VjaCA9IGV2ZW50LmlzVG91Y2g7XG5cbiAgICAvLyBUT0RPKG5pa2t1KTogd2UgbmVlZCB0byBmaW5kIGEgd2F5IHRvIHN1cHBvcnQgdGhlXG4gICAgLy8gZGlyZWN0IGVkaXRpbmcgb24gbW9iaWxlIGRldmljZXM7IHJpZ2h0IG5vdyB0aGlzIHdpbGxcbiAgICAvLyBicmVhayBmb3IgZGVzd29ya2Zsb3dlZGl0aW5nIG9uIG1vYmlsZSBkZXZpY2VzXG4gICAgLy8gYXMgaXQgYnJlYWtzIHRoZSB1c2VyIGludGVyYWN0aW9uIHdvcmtmbG93XG5cbiAgICAvLyBUT0RPKG5yZSk6IHdlIHNob3VsZCB0ZW1wb3JhcmlseSBmb2N1cyB0aGUgZWRpdGVkIGVsZW1lbnRcbiAgICAvLyBoZXJlIGFuZCByZWxlYXNlIHRoZSBmb2N1c2VkIHZpZXdwb3J0IGFmdGVyIHRoZSBkaXJlY3QgZWRpdFxuICAgIC8vIG9wZXJhdGlvbiBpcyBmaW5pc2hlZFxuICAgIGlmIChpc1RvdWNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjYW5FeGVjdXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQuaGludHMgJiYgY29udGV4dC5oaW50cy5jcmVhdGVFbGVtZW50c0JlaGF2aW9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFjdGl2YXRlRGlyZWN0RWRpdChlbGVtZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2F1dG9QbGFjZS5lbmQnLCA1MDAsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgYWN0aXZhdGVEaXJlY3RFZGl0KGV2ZW50LnNoYXBlKTtcbiAgfSk7XG5cblxuICBmdW5jdGlvbiBhY3RpdmF0ZURpcmVjdEVkaXQoZWxlbWVudCwgZm9yY2UpIHtcbiAgICBpZiAoZm9yY2UgfHxcbiAgICAgICAgaXNBbnkoZWxlbWVudCwgWyAnYnBtbjpUYXNrJywgJ2JwbW46VGV4dEFubm90YXRpb24nLCAnYnBtbjpHcm91cCcgXSkgfHxcbiAgICAgICAgaXNDb2xsYXBzZWRTdWJQcm9jZXNzKGVsZW1lbnQpKSB7XG5cbiAgICAgIGRpcmVjdEVkaXRpbmcuYWN0aXZhdGUoZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbn1cblxuTGFiZWxFZGl0aW5nUHJvdmlkZXIuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2JwbW5GYWN0b3J5JyxcbiAgJ2NhbnZhcycsXG4gICdkaXJlY3RFZGl0aW5nJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3Jlc2l6ZUhhbmRsZXMnLFxuICAndGV4dFJlbmRlcmVyJ1xuXTtcblxuXG4vKipcbiAqIEFjdGl2YXRlIGRpcmVjdCBlZGl0aW5nIGZvciBhY3Rpdml0aWVzIGFuZCB0ZXh0IGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGJvdW5kcyAocG9zaXRpb24gYW5kIHNpemUpLCB0ZXh0IGFuZCBvcHRpb25zXG4gKi9cbkxhYmVsRWRpdGluZ1Byb3ZpZGVyLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAvLyB0ZXh0XG4gIHZhciB0ZXh0ID0gZ2V0TGFiZWwoZWxlbWVudCk7XG5cbiAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgIHRleHQ6IHRleHRcbiAgfTtcblxuICAvLyBib3VuZHNcbiAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0RWRpdGluZ0JCb3goZWxlbWVudCk7XG5cbiAgYXNzaWduKGNvbnRleHQsIGJvdW5kcyk7XG5cbiAgdmFyIG9wdGlvbnMgPSB7fTtcblxuICAvLyB0YXNrc1xuICBpZiAoXG4gICAgaXNBbnkoZWxlbWVudCwgW1xuICAgICAgJ2JwbW46VGFzaycsXG4gICAgICAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgICAnYnBtbjpMYW5lJyxcbiAgICAgICdicG1uOkNhbGxBY3Rpdml0eSdcbiAgICBdKSB8fFxuICAgIGlzQ29sbGFwc2VkU3ViUHJvY2VzcyhlbGVtZW50KVxuICApIHtcbiAgICBhc3NpZ24ob3B0aW9ucywge1xuICAgICAgY2VudGVyVmVydGljYWxseTogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgLy8gZXh0ZXJuYWwgbGFiZWxzXG4gIGlmIChpc0xhYmVsRXh0ZXJuYWwoZWxlbWVudCkpIHtcbiAgICBhc3NpZ24ob3B0aW9ucywge1xuICAgICAgYXV0b1Jlc2l6ZTogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgLy8gdGV4dCBhbm5vdGF0aW9uc1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgIGFzc2lnbihvcHRpb25zLCB7XG4gICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICBhdXRvUmVzaXplOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICBhc3NpZ24oY29udGV4dCwge1xuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5cbi8qKlxuICogR2V0IHRoZSBlZGl0aW5nIGJvdW5kaW5nIGJveCBiYXNlZCBvbiB0aGUgZWxlbWVudCdzIHNpemUgYW5kIHBvc2l0aW9uXG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHBvc2l0aW9uXG4gKiAgICAgICAgICAgICAgICAgIGFuZCBzaXplIChmaXhlZCBvciBtaW5pbXVtIGFuZC9vciBtYXhpbXVtKVxuICovXG5MYWJlbEVkaXRpbmdQcm92aWRlci5wcm90b3R5cGUuZ2V0RWRpdGluZ0JCb3ggPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHZhciBjYW52YXMgPSB0aGlzLl9jYW52YXM7XG5cbiAgdmFyIHRhcmdldCA9IGVsZW1lbnQubGFiZWwgfHwgZWxlbWVudDtcblxuICB2YXIgYmJveCA9IGNhbnZhcy5nZXRBYnNvbHV0ZUJCb3godGFyZ2V0KTtcblxuICB2YXIgbWlkID0ge1xuICAgIHg6IGJib3gueCArIGJib3gud2lkdGggLyAyLFxuICAgIHk6IGJib3gueSArIGJib3guaGVpZ2h0IC8gMlxuICB9O1xuXG4gIC8vIGRlZmF1bHQgcG9zaXRpb25cbiAgdmFyIGJvdW5kcyA9IHsgeDogYmJveC54LCB5OiBiYm94LnkgfTtcblxuICB2YXIgem9vbSA9IGNhbnZhcy56b29tKCk7XG5cbiAgdmFyIGRlZmF1bHRTdHlsZSA9IHRoaXMuX3RleHRSZW5kZXJlci5nZXREZWZhdWx0U3R5bGUoKSxcbiAgICAgIGV4dGVybmFsU3R5bGUgPSB0aGlzLl90ZXh0UmVuZGVyZXIuZ2V0RXh0ZXJuYWxTdHlsZSgpO1xuXG4gIC8vIHRha2Ugem9vbSBpbnRvIGFjY291bnRcbiAgdmFyIGV4dGVybmFsRm9udFNpemUgPSBleHRlcm5hbFN0eWxlLmZvbnRTaXplICogem9vbSxcbiAgICAgIGV4dGVybmFsTGluZUhlaWdodCA9IGV4dGVybmFsU3R5bGUubGluZUhlaWdodCxcbiAgICAgIGRlZmF1bHRGb250U2l6ZSA9IGRlZmF1bHRTdHlsZS5mb250U2l6ZSAqIHpvb20sXG4gICAgICBkZWZhdWx0TGluZUhlaWdodCA9IGRlZmF1bHRTdHlsZS5saW5lSGVpZ2h0O1xuXG4gIHZhciBzdHlsZSA9IHtcbiAgICBmb250RmFtaWx5OiB0aGlzLl90ZXh0UmVuZGVyZXIuZ2V0RGVmYXVsdFN0eWxlKCkuZm9udEZhbWlseSxcbiAgICBmb250V2VpZ2h0OiB0aGlzLl90ZXh0UmVuZGVyZXIuZ2V0RGVmYXVsdFN0eWxlKCkuZm9udFdlaWdodFxuICB9O1xuXG4gIC8vIGFkanVzdCBmb3IgZXhwYW5kZWQgcG9vbHMgQU5EIGxhbmVzXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpMYW5lJykgfHwgaXNFeHBhbmRlZFBvb2woZWxlbWVudCkpIHtcblxuICAgIGFzc2lnbihib3VuZHMsIHtcbiAgICAgIHdpZHRoOiBiYm94LmhlaWdodCxcbiAgICAgIGhlaWdodDogMzAgKiB6b29tLFxuICAgICAgeDogYmJveC54IC0gYmJveC5oZWlnaHQgLyAyICsgKDE1ICogem9vbSksXG4gICAgICB5OiBtaWQueSAtICgzMCAqIHpvb20pIC8gMlxuICAgIH0pO1xuXG4gICAgYXNzaWduKHN0eWxlLCB7XG4gICAgICBmb250U2l6ZTogZGVmYXVsdEZvbnRTaXplICsgJ3B4JyxcbiAgICAgIGxpbmVIZWlnaHQ6IGRlZmF1bHRMaW5lSGVpZ2h0LFxuICAgICAgcGFkZGluZ1RvcDogKDcgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nQm90dG9tOiAoNyAqIHpvb20pICsgJ3B4JyxcbiAgICAgIHBhZGRpbmdMZWZ0OiAoNSAqIHpvb20pICsgJ3B4JyxcbiAgICAgIHBhZGRpbmdSaWdodDogKDUgKiB6b29tKSArICdweCcsXG4gICAgICB0cmFuc2Zvcm06ICdyb3RhdGUoLTkwZGVnKSdcbiAgICB9KTtcbiAgfVxuXG5cbiAgLy8gaW50ZXJuYWwgbGFiZWxzIGZvciB0YXNrcyBhbmQgY29sbGFwc2VkIGNhbGwgYWN0aXZpdGllcyxcbiAgLy8gc3ViIHByb2Nlc3NlcyBhbmQgcGFydGljaXBhbnRzXG4gIGlmIChpc0FueShlbGVtZW50LCBbICdicG1uOlRhc2snLCAnYnBtbjpDYWxsQWN0aXZpdHknXSkgfHxcbiAgICAgIGlzQ29sbGFwc2VkUG9vbChlbGVtZW50KSB8fFxuICAgICAgaXNDb2xsYXBzZWRTdWJQcm9jZXNzKGVsZW1lbnQpKSB7XG5cbiAgICBhc3NpZ24oYm91bmRzLCB7XG4gICAgICB3aWR0aDogYmJveC53aWR0aCxcbiAgICAgIGhlaWdodDogYmJveC5oZWlnaHRcbiAgICB9KTtcblxuICAgIGFzc2lnbihzdHlsZSwge1xuICAgICAgZm9udFNpemU6IGRlZmF1bHRGb250U2l6ZSArICdweCcsXG4gICAgICBsaW5lSGVpZ2h0OiBkZWZhdWx0TGluZUhlaWdodCxcbiAgICAgIHBhZGRpbmdUb3A6ICg3ICogem9vbSkgKyAncHgnLFxuICAgICAgcGFkZGluZ0JvdHRvbTogKDcgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nTGVmdDogKDUgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nUmlnaHQ6ICg1ICogem9vbSkgKyAncHgnXG4gICAgfSk7XG4gIH1cblxuXG4gIC8vIGludGVybmFsIGxhYmVscyBmb3IgZXhwYW5kZWQgc3ViIHByb2Nlc3Nlc1xuICBpZiAoaXNFeHBhbmRlZFN1YlByb2Nlc3MoZWxlbWVudCkpIHtcbiAgICBhc3NpZ24oYm91bmRzLCB7XG4gICAgICB3aWR0aDogYmJveC53aWR0aCxcbiAgICAgIHg6IGJib3gueFxuICAgIH0pO1xuXG4gICAgYXNzaWduKHN0eWxlLCB7XG4gICAgICBmb250U2l6ZTogZGVmYXVsdEZvbnRTaXplICsgJ3B4JyxcbiAgICAgIGxpbmVIZWlnaHQ6IGRlZmF1bHRMaW5lSGVpZ2h0LFxuICAgICAgcGFkZGluZ1RvcDogKDcgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nQm90dG9tOiAoNyAqIHpvb20pICsgJ3B4JyxcbiAgICAgIHBhZGRpbmdMZWZ0OiAoNSAqIHpvb20pICsgJ3B4JyxcbiAgICAgIHBhZGRpbmdSaWdodDogKDUgKiB6b29tKSArICdweCdcbiAgICB9KTtcbiAgfVxuXG4gIHZhciB3aWR0aCA9IDkwICogem9vbSxcbiAgICAgIHBhZGRpbmdUb3AgPSA3ICogem9vbSxcbiAgICAgIHBhZGRpbmdCb3R0b20gPSA0ICogem9vbTtcblxuICAvLyBleHRlcm5hbCBsYWJlbHMgZm9yIGV2ZW50cywgZGF0YSBlbGVtZW50cywgZ2F0ZXdheXMsIGdyb3VwcyBhbmQgY29ubmVjdGlvbnNcbiAgaWYgKHRhcmdldC5sYWJlbFRhcmdldCkge1xuICAgIGFzc2lnbihib3VuZHMsIHtcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogYmJveC5oZWlnaHQgKyBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbSxcbiAgICAgIHg6IG1pZC54IC0gd2lkdGggLyAyLFxuICAgICAgeTogYmJveC55IC0gcGFkZGluZ1RvcFxuICAgIH0pO1xuXG4gICAgYXNzaWduKHN0eWxlLCB7XG4gICAgICBmb250U2l6ZTogZXh0ZXJuYWxGb250U2l6ZSArICdweCcsXG4gICAgICBsaW5lSGVpZ2h0OiBleHRlcm5hbExpbmVIZWlnaHQsXG4gICAgICBwYWRkaW5nVG9wOiBwYWRkaW5nVG9wICsgJ3B4JyxcbiAgICAgIHBhZGRpbmdCb3R0b206IHBhZGRpbmdCb3R0b20gKyAncHgnXG4gICAgfSk7XG4gIH1cblxuICAvLyBleHRlcm5hbCBsYWJlbCBub3QgeWV0IGNyZWF0ZWRcbiAgaWYgKGlzTGFiZWxFeHRlcm5hbCh0YXJnZXQpXG4gICAgICAmJiAhaGFzRXh0ZXJuYWxMYWJlbCh0YXJnZXQpXG4gICAgICAmJiAhaXNMYWJlbCh0YXJnZXQpKSB7XG5cbiAgICB2YXIgZXh0ZXJuYWxMYWJlbE1pZCA9IGdldEV4dGVybmFsTGFiZWxNaWQoZWxlbWVudCk7XG5cbiAgICB2YXIgYWJzb2x1dGVCQm94ID0gY2FudmFzLmdldEFic29sdXRlQkJveCh7XG4gICAgICB4OiBleHRlcm5hbExhYmVsTWlkLngsXG4gICAgICB5OiBleHRlcm5hbExhYmVsTWlkLnksXG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMFxuICAgIH0pO1xuXG4gICAgdmFyIGhlaWdodCA9IGV4dGVybmFsRm9udFNpemUgKyBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbTtcblxuICAgIGFzc2lnbihib3VuZHMsIHtcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgeDogYWJzb2x1dGVCQm94LnggLSB3aWR0aCAvIDIsXG4gICAgICB5OiBhYnNvbHV0ZUJCb3gueSAtIGhlaWdodCAvIDJcbiAgICB9KTtcblxuICAgIGFzc2lnbihzdHlsZSwge1xuICAgICAgZm9udFNpemU6IGV4dGVybmFsRm9udFNpemUgKyAncHgnLFxuICAgICAgbGluZUhlaWdodDogZXh0ZXJuYWxMaW5lSGVpZ2h0LFxuICAgICAgcGFkZGluZ1RvcDogcGFkZGluZ1RvcCArICdweCcsXG4gICAgICBwYWRkaW5nQm90dG9tOiBwYWRkaW5nQm90dG9tICsgJ3B4J1xuICAgIH0pO1xuICB9XG5cbiAgLy8gdGV4dCBhbm5vdGF0aW9uc1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgIGFzc2lnbihib3VuZHMsIHtcbiAgICAgIHdpZHRoOiBiYm94LndpZHRoLFxuICAgICAgaGVpZ2h0OiBiYm94LmhlaWdodCxcbiAgICAgIG1pbldpZHRoOiAzMCAqIHpvb20sXG4gICAgICBtaW5IZWlnaHQ6IDEwICogem9vbVxuICAgIH0pO1xuXG4gICAgYXNzaWduKHN0eWxlLCB7XG4gICAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICAgIHBhZGRpbmdUb3A6ICg1ICogem9vbSkgKyAncHgnLFxuICAgICAgcGFkZGluZ0JvdHRvbTogKDcgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nTGVmdDogKDcgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nUmlnaHQ6ICg1ICogem9vbSkgKyAncHgnLFxuICAgICAgZm9udFNpemU6IGRlZmF1bHRGb250U2l6ZSArICdweCcsXG4gICAgICBsaW5lSGVpZ2h0OiBkZWZhdWx0TGluZUhlaWdodFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHsgYm91bmRzOiBib3VuZHMsIHN0eWxlOiBzdHlsZSB9O1xufTtcblxuXG5MYWJlbEVkaXRpbmdQcm92aWRlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oXG4gICAgZWxlbWVudCwgbmV3TGFiZWwsXG4gICAgYWN0aXZlQ29udGV4dFRleHQsIGJvdW5kcykge1xuXG4gIHZhciBuZXdCb3VuZHMsXG4gICAgICBiYm94O1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XG5cbiAgICBiYm94ID0gdGhpcy5fY2FudmFzLmdldEFic29sdXRlQkJveChlbGVtZW50KTtcblxuICAgIG5ld0JvdW5kcyA9IHtcbiAgICAgIHg6IGVsZW1lbnQueCxcbiAgICAgIHk6IGVsZW1lbnQueSxcbiAgICAgIHdpZHRoOiBlbGVtZW50LndpZHRoIC8gYmJveC53aWR0aCAqIGJvdW5kcy53aWR0aCxcbiAgICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHQgLyBiYm94LmhlaWdodCAqIGJvdW5kcy5oZWlnaHRcbiAgICB9O1xuICB9XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkdyb3VwJykpIHtcblxuICAgIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSBjYXRlZ29yeVZhbHVlIGlmIG5vdCBleGlzdGluZ1xuICAgIGlmICghYnVzaW5lc3NPYmplY3QuY2F0ZWdvcnlWYWx1ZVJlZikge1xuXG4gICAgICB2YXIgcm9vdEVsZW1lbnQgPSB0aGlzLl9jYW52YXMuZ2V0Um9vdEVsZW1lbnQoKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IGdldEJ1c2luZXNzT2JqZWN0KHJvb3RFbGVtZW50KS4kcGFyZW50O1xuXG4gICAgICB2YXIgY2F0ZWdvcnlWYWx1ZSA9IGNyZWF0ZUNhdGVnb3J5VmFsdWUoZGVmaW5pdGlvbnMsIHRoaXMuX2JwbW5GYWN0b3J5KTtcblxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkuY2F0ZWdvcnlWYWx1ZVJlZiA9IGNhdGVnb3J5VmFsdWU7XG4gICAgfVxuXG4gIH1cblxuICBpZiAoaXNFbXB0eVRleHQobmV3TGFiZWwpKSB7XG4gICAgbmV3TGFiZWwgPSBudWxsO1xuICB9XG5cbiAgdGhpcy5fbW9kZWxpbmcudXBkYXRlTGFiZWwoZWxlbWVudCwgbmV3TGFiZWwsIG5ld0JvdW5kcyk7XG59O1xuXG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzQ29sbGFwc2VkU3ViUHJvY2VzcyhlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgIWlzRXhwYW5kZWQoZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGlzRXhwYW5kZWRTdWJQcm9jZXNzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlN1YlByb2Nlc3MnKSAmJiBpc0V4cGFuZGVkKGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBpc0NvbGxhcHNlZFBvb2woZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiAhaXNFeHBhbmRlZChlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gaXNFeHBhbmRlZFBvb2woZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBpc0V4cGFuZGVkKGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBpc0VtcHR5VGV4dChsYWJlbCkge1xuICByZXR1cm4gIWxhYmVsIHx8ICFsYWJlbC50cmltKCk7XG59IiwiaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmZ1bmN0aW9uIGdldExhYmVsQXR0cihzZW1hbnRpYykge1xuICBpZiAoXG4gICAgaXMoc2VtYW50aWMsICdicG1uOkZsb3dFbGVtZW50JykgfHxcbiAgICBpcyhzZW1hbnRpYywgJ2JwbW46UGFydGljaXBhbnQnKSB8fFxuICAgIGlzKHNlbWFudGljLCAnYnBtbjpMYW5lJykgfHxcbiAgICBpcyhzZW1hbnRpYywgJ2JwbW46U2VxdWVuY2VGbG93JykgfHxcbiAgICBpcyhzZW1hbnRpYywgJ2JwbW46TWVzc2FnZUZsb3cnKSB8fFxuICAgIGlzKHNlbWFudGljLCAnYnBtbjpEYXRhSW5wdXQnKSB8fFxuICAgIGlzKHNlbWFudGljLCAnYnBtbjpEYXRhT3V0cHV0JylcbiAgKSB7XG4gICAgcmV0dXJuICduYW1lJztcbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgIHJldHVybiAndGV4dCc7XG4gIH1cblxuICBpZiAoaXMoc2VtYW50aWMsICdicG1uOkdyb3VwJykpIHtcbiAgICByZXR1cm4gJ2NhdGVnb3J5VmFsdWVSZWYnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldENhdGVnb3J5VmFsdWUoc2VtYW50aWMpIHtcbiAgdmFyIGNhdGVnb3J5VmFsdWVSZWYgPSBzZW1hbnRpY1snY2F0ZWdvcnlWYWx1ZVJlZiddO1xuXG4gIGlmICghY2F0ZWdvcnlWYWx1ZVJlZikge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG5cbiAgcmV0dXJuIGNhdGVnb3J5VmFsdWVSZWYudmFsdWUgfHwgJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYWJlbChlbGVtZW50KSB7XG4gIHZhciBzZW1hbnRpYyA9IGVsZW1lbnQuYnVzaW5lc3NPYmplY3QsXG4gICAgICBhdHRyID0gZ2V0TGFiZWxBdHRyKHNlbWFudGljKTtcblxuICBpZiAoYXR0cikge1xuXG4gICAgaWYgKGF0dHIgPT09ICdjYXRlZ29yeVZhbHVlUmVmJykge1xuXG4gICAgICByZXR1cm4gZ2V0Q2F0ZWdvcnlWYWx1ZShzZW1hbnRpYyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbWFudGljW2F0dHJdIHx8ICcnO1xuICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHNldExhYmVsKGVsZW1lbnQsIHRleHQsIGlzRXh0ZXJuYWwpIHtcbiAgdmFyIHNlbWFudGljID0gZWxlbWVudC5idXNpbmVzc09iamVjdCxcbiAgICAgIGF0dHIgPSBnZXRMYWJlbEF0dHIoc2VtYW50aWMpO1xuXG4gIGlmIChhdHRyKSB7XG5cbiAgICBpZiAoYXR0ciA9PT0gJ2NhdGVnb3J5VmFsdWVSZWYnKSB7XG4gICAgICBzZW1hbnRpY1snY2F0ZWdvcnlWYWx1ZVJlZiddLnZhbHVlID0gdGV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VtYW50aWNbYXR0cl0gPSB0ZXh0O1xuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59IiwiaW1wb3J0IHtcbiAgc2V0TGFiZWwsXG4gIGdldExhYmVsXG59IGZyb20gJy4uL0xhYmVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldEV4dGVybmFsTGFiZWxNaWQsXG4gIGlzTGFiZWxFeHRlcm5hbCxcbiAgaGFzRXh0ZXJuYWxMYWJlbCxcbiAgaXNMYWJlbFxufSBmcm9tICcuLi8uLi8uLi91dGlsL0xhYmVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxudmFyIE5VTExfRElNRU5TSU9OUyA9IHtcbiAgd2lkdGg6IDAsXG4gIGhlaWdodDogMFxufTtcblxuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IHVwZGF0ZXMgdGhlIHRleHQgb2YgYSBCUE1OIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVwZGF0ZUxhYmVsSGFuZGxlcihtb2RlbGluZywgdGV4dFJlbmRlcmVyKSB7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbGFiZWwgYW5kIHJldHVybiB0aGUgY2hhbmdlZCBlbGVtZW50cy5cbiAgICpcbiAgICogRWxlbWVudCBwYXJhbWV0ZXIgY2FuIGJlIGxhYmVsIGl0c2VsZiBvciBjb25uZWN0aW9uIChpLmUuIHNlcXVlbmNlIGZsb3cpLlxuICAgKlxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqL1xuICBmdW5jdGlvbiBzZXRUZXh0KGVsZW1lbnQsIHRleHQpIHtcblxuICAgIC8vIGV4dGVybmFsIGxhYmVsIGlmIHByZXNlbnRcbiAgICB2YXIgbGFiZWwgPSBlbGVtZW50LmxhYmVsIHx8IGVsZW1lbnQ7XG5cbiAgICB2YXIgbGFiZWxUYXJnZXQgPSBlbGVtZW50LmxhYmVsVGFyZ2V0IHx8IGVsZW1lbnQ7XG5cbiAgICBzZXRMYWJlbChsYWJlbCwgdGV4dCwgbGFiZWxUYXJnZXQgIT09IGxhYmVsKTtcblxuICAgIHJldHVybiBbIGxhYmVsLCBsYWJlbFRhcmdldCBdO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJlRXhlY3V0ZShjdHgpIHtcbiAgICB2YXIgZWxlbWVudCA9IGN0eC5lbGVtZW50LFxuICAgICAgICBidXNpbmVzc09iamVjdCA9IGVsZW1lbnQuYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIG5ld0xhYmVsID0gY3R4Lm5ld0xhYmVsO1xuXG4gICAgaWYgKCFpc0xhYmVsKGVsZW1lbnQpXG4gICAgICAgICYmIGlzTGFiZWxFeHRlcm5hbChlbGVtZW50KVxuICAgICAgICAmJiAhaGFzRXh0ZXJuYWxMYWJlbChlbGVtZW50KVxuICAgICAgICAmJiAhaXNFbXB0eVRleHQobmV3TGFiZWwpKSB7XG5cbiAgICAgIC8vIGNyZWF0ZSBsYWJlbFxuICAgICAgdmFyIHBhZGRpbmdUb3AgPSA3O1xuXG4gICAgICB2YXIgbGFiZWxDZW50ZXIgPSBnZXRFeHRlcm5hbExhYmVsTWlkKGVsZW1lbnQpO1xuXG4gICAgICBsYWJlbENlbnRlciA9IHtcbiAgICAgICAgeDogbGFiZWxDZW50ZXIueCxcbiAgICAgICAgeTogbGFiZWxDZW50ZXIueSArIHBhZGRpbmdUb3BcbiAgICAgIH07XG5cbiAgICAgIG1vZGVsaW5nLmNyZWF0ZUxhYmVsKGVsZW1lbnQsIGxhYmVsQ2VudGVyLCB7XG4gICAgICAgIGlkOiBidXNpbmVzc09iamVjdC5pZCArICdfbGFiZWwnLFxuICAgICAgICBidXNpbmVzc09iamVjdDogYnVzaW5lc3NPYmplY3RcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGV4ZWN1dGUoY3R4KSB7XG4gICAgY3R4Lm9sZExhYmVsID0gZ2V0TGFiZWwoY3R4LmVsZW1lbnQpO1xuICAgIHJldHVybiBzZXRUZXh0KGN0eC5lbGVtZW50LCBjdHgubmV3TGFiZWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmV2ZXJ0KGN0eCkge1xuICAgIHJldHVybiBzZXRUZXh0KGN0eC5lbGVtZW50LCBjdHgub2xkTGFiZWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gcG9zdEV4ZWN1dGUoY3R4KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBjdHguZWxlbWVudCxcbiAgICAgICAgbGFiZWwgPSBlbGVtZW50LmxhYmVsIHx8IGVsZW1lbnQsXG4gICAgICAgIG5ld0xhYmVsID0gY3R4Lm5ld0xhYmVsLFxuICAgICAgICBuZXdCb3VuZHMgPSBjdHgubmV3Qm91bmRzLFxuICAgICAgICBoaW50cyA9IGN0eC5oaW50cyB8fCB7fTtcblxuICAgIC8vIGlnbm9yZSBpbnRlcm5hbCBsYWJlbHMgZm9yIGVsZW1lbnRzIGV4Y2VwdCB0ZXh0IGFubm90YXRpb25zXG4gICAgaWYgKCFpc0xhYmVsKGxhYmVsKSAmJiAhaXMobGFiZWwsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNMYWJlbChsYWJlbCkgJiYgaXNFbXB0eVRleHQobmV3TGFiZWwpKSB7XG5cbiAgICAgIGlmIChoaW50cy5yZW1vdmVTaGFwZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgbW9kZWxpbmcucmVtb3ZlU2hhcGUobGFiZWwsIHsgdW5zZXRMYWJlbDogZmFsc2UgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGV4dCA9IGdldExhYmVsKGxhYmVsKTtcblxuICAgIC8vIHJlc2l6ZSBlbGVtZW50IGJhc2VkIG9uIGxhYmVsIF9vcl8gcHJlLWRlZmluZWQgYm91bmRzXG4gICAgaWYgKHR5cGVvZiBuZXdCb3VuZHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBuZXdCb3VuZHMgPSB0ZXh0UmVuZGVyZXIuZ2V0RXh0ZXJuYWxMYWJlbEJvdW5kcyhsYWJlbCwgdGV4dCk7XG4gICAgfVxuXG4gICAgLy8gc2V0dGluZyBuZXdCb3VuZHMgdG8gZmFsc2Ugb3IgX251bGxfIHdpbGxcbiAgICAvLyBkaXNhYmxlIHRoZSBwb3N0RXhlY3V0ZSByZXNpemUgb3BlcmF0aW9uXG4gICAgaWYgKG5ld0JvdW5kcykge1xuICAgICAgbW9kZWxpbmcucmVzaXplU2hhcGUobGFiZWwsIG5ld0JvdW5kcywgTlVMTF9ESU1FTlNJT05TKTtcbiAgICB9XG4gIH1cblxuICAvLyBBUElcblxuICB0aGlzLnByZUV4ZWN1dGUgPSBwcmVFeGVjdXRlO1xuICB0aGlzLmV4ZWN1dGUgPSBleGVjdXRlO1xuICB0aGlzLnJldmVydCA9IHJldmVydDtcbiAgdGhpcy5wb3N0RXhlY3V0ZSA9IHBvc3RFeGVjdXRlO1xufVxuXG5VcGRhdGVMYWJlbEhhbmRsZXIuJGluamVjdCA9IFtcbiAgJ21vZGVsaW5nJyxcbiAgJ3RleHRSZW5kZXJlcidcbl07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc0VtcHR5VGV4dChsYWJlbCkge1xuICByZXR1cm4gIWxhYmVsIHx8ICFsYWJlbC50cmltKCk7XG59IiwiaW1wb3J0IENoYW5nZVN1cHBvcnRNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY2hhbmdlLXN1cHBvcnQnO1xuaW1wb3J0IFJlc2l6ZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUnO1xuaW1wb3J0IERpcmVjdEVkaXRpbmdNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy1kaXJlY3QtZWRpdGluZyc7XG5cbmltcG9ydCBMYWJlbEVkaXRpbmdQcm92aWRlciBmcm9tICcuL0xhYmVsRWRpdGluZ1Byb3ZpZGVyJztcbmltcG9ydCBMYWJlbEVkaXRpbmdQcmV2aWV3IGZyb20gJy4vTGFiZWxFZGl0aW5nUHJldmlldyc7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIENoYW5nZVN1cHBvcnRNb2R1bGUsXG4gICAgUmVzaXplTW9kdWxlLFxuICAgIERpcmVjdEVkaXRpbmdNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFtcbiAgICAnbGFiZWxFZGl0aW5nUHJvdmlkZXInLFxuICAgICdsYWJlbEVkaXRpbmdQcmV2aWV3J1xuICBdLFxuICBsYWJlbEVkaXRpbmdQcm92aWRlcjogWyAndHlwZScsIExhYmVsRWRpdGluZ1Byb3ZpZGVyIF0sXG4gIGxhYmVsRWRpdGluZ1ByZXZpZXc6IFsgJ3R5cGUnLCBMYWJlbEVkaXRpbmdQcmV2aWV3IF1cbn07XG4iLCJpbXBvcnQge1xuICBtYXAsXG4gIGFzc2lnbixcbiAgcGlja1xufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGlzQW55XG59IGZyb20gJy4vdXRpbC9Nb2RlbGluZ1V0aWwnO1xuXG5pbXBvcnQge1xuICBpc1xufSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkZhY3RvcnkobW9kZGxlKSB7XG4gIHRoaXMuX21vZGVsID0gbW9kZGxlO1xufVxuXG5CcG1uRmFjdG9yeS4kaW5qZWN0ID0gWyAnbW9kZGxlJyBdO1xuXG5cbkJwbW5GYWN0b3J5LnByb3RvdHlwZS5fbmVlZHNJZCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIFtcbiAgICAnYnBtbjpSb290RWxlbWVudCcsXG4gICAgJ2JwbW46Rmxvd0VsZW1lbnQnLFxuICAgICdicG1uOk1lc3NhZ2VGbG93JyxcbiAgICAnYnBtbjpEYXRhQXNzb2NpYXRpb24nLFxuICAgICdicG1uOkFydGlmYWN0JyxcbiAgICAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgJ2JwbW46TGFuZScsXG4gICAgJ2JwbW46TGFuZVNldCcsXG4gICAgJ2JwbW46UHJvY2VzcycsXG4gICAgJ2JwbW46Q29sbGFib3JhdGlvbicsXG4gICAgJ2JwbW5kaTpCUE1OU2hhcGUnLFxuICAgICdicG1uZGk6QlBNTkVkZ2UnLFxuICAgICdicG1uZGk6QlBNTkRpYWdyYW0nLFxuICAgICdicG1uZGk6QlBNTlBsYW5lJyxcbiAgICAnYnBtbjpQcm9wZXJ0eScsXG4gICAgJ2JwbW46Q2F0ZWdvcnlWYWx1ZSdcbiAgXSk7XG59O1xuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuX2Vuc3VyZUlkID0gZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gIC8vIGdlbmVyYXRlIHNlbWFudGljIGlkcyBmb3IgZWxlbWVudHNcbiAgLy8gYnBtbjpTZXF1ZW5jZUZsb3cgLT4gU2VxdWVuY2VGbG93X0lEXG4gIHZhciBwcmVmaXg7XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkFjdGl2aXR5JykpIHtcbiAgICBwcmVmaXggPSAnQWN0aXZpdHknO1xuICB9IGVsc2UgaWYgKGlzKGVsZW1lbnQsICdicG1uOkV2ZW50JykpIHtcbiAgICBwcmVmaXggPSAnRXZlbnQnO1xuICB9IGVsc2UgaWYgKGlzKGVsZW1lbnQsICdicG1uOkdhdGV3YXknKSkge1xuICAgIHByZWZpeCA9ICdHYXRld2F5JztcbiAgfSBlbHNlIGlmIChpc0FueShlbGVtZW50LCBbICdicG1uOlNlcXVlbmNlRmxvdycsICdicG1uOk1lc3NhZ2VGbG93JyBdKSkge1xuICAgIHByZWZpeCA9ICdGbG93JztcbiAgfSBlbHNlIHtcbiAgICBwcmVmaXggPSAoZWxlbWVudC4kdHlwZSB8fCAnJykucmVwbGFjZSgvXlteOl0qOi9nLCAnJyk7XG4gIH1cblxuICBwcmVmaXggKz0gJ18nO1xuXG4gIGlmICghZWxlbWVudC5pZCAmJiB0aGlzLl9uZWVkc0lkKGVsZW1lbnQpKSB7XG4gICAgZWxlbWVudC5pZCA9IHRoaXMuX21vZGVsLmlkcy5uZXh0UHJlZml4ZWQocHJlZml4LCBlbGVtZW50KTtcbiAgfVxufTtcblxuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24odHlwZSwgYXR0cnMpIHtcbiAgdmFyIGVsZW1lbnQgPSB0aGlzLl9tb2RlbC5jcmVhdGUodHlwZSwgYXR0cnMgfHwge30pO1xuXG4gIHRoaXMuX2Vuc3VyZUlkKGVsZW1lbnQpO1xuXG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlRGlMYWJlbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5jcmVhdGUoJ2JwbW5kaTpCUE1OTGFiZWwnLCB7XG4gICAgYm91bmRzOiB0aGlzLmNyZWF0ZURpQm91bmRzKClcbiAgfSk7XG59O1xuXG5cbkJwbW5GYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVEaVNoYXBlID0gZnVuY3Rpb24oc2VtYW50aWMsIGJvdW5kcywgYXR0cnMpIHtcblxuICByZXR1cm4gdGhpcy5jcmVhdGUoJ2JwbW5kaTpCUE1OU2hhcGUnLCBhc3NpZ24oe1xuICAgIGJwbW5FbGVtZW50OiBzZW1hbnRpYyxcbiAgICBib3VuZHM6IHRoaXMuY3JlYXRlRGlCb3VuZHMoYm91bmRzKVxuICB9LCBhdHRycykpO1xufTtcblxuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlRGlCb3VuZHMgPSBmdW5jdGlvbihib3VuZHMpIHtcbiAgcmV0dXJuIHRoaXMuY3JlYXRlKCdkYzpCb3VuZHMnLCBib3VuZHMpO1xufTtcblxuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlRGlXYXlwb2ludHMgPSBmdW5jdGlvbih3YXlwb2ludHMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHJldHVybiBtYXAod2F5cG9pbnRzLCBmdW5jdGlvbihwb3MpIHtcbiAgICByZXR1cm4gc2VsZi5jcmVhdGVEaVdheXBvaW50KHBvcyk7XG4gIH0pO1xufTtcblxuQnBtbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZURpV2F5cG9pbnQgPSBmdW5jdGlvbihwb2ludCkge1xuICByZXR1cm4gdGhpcy5jcmVhdGUoJ2RjOlBvaW50JywgcGljayhwb2ludCwgWyAneCcsICd5JyBdKSk7XG59O1xuXG5cbkJwbW5GYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVEaUVkZ2UgPSBmdW5jdGlvbihzZW1hbnRpYywgd2F5cG9pbnRzLCBhdHRycykge1xuICByZXR1cm4gdGhpcy5jcmVhdGUoJ2JwbW5kaTpCUE1ORWRnZScsIGFzc2lnbih7XG4gICAgYnBtbkVsZW1lbnQ6IHNlbWFudGljXG4gIH0sIGF0dHJzKSk7XG59O1xuXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlRGlQbGFuZSA9IGZ1bmN0aW9uKHNlbWFudGljKSB7XG4gIHJldHVybiB0aGlzLmNyZWF0ZSgnYnBtbmRpOkJQTU5QbGFuZScsIHtcbiAgICBicG1uRWxlbWVudDogc2VtYW50aWNcbiAgfSk7XG59OyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBCYXNlTGF5b3V0ZXIgZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0Jhc2VMYXlvdXRlcic7XG5cbmltcG9ydCB7XG4gIHJlcGFpckNvbm5lY3Rpb24sXG4gIHdpdGhvdXRSZWR1bmRhbnRQb2ludHNcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L01hbmhhdHRhbkxheW91dCc7XG5cbmltcG9ydCB7XG4gIGdldE1pZCxcbiAgZ2V0T3JpZW50YXRpb25cbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0V4cGFuZGVkXG59IGZyb20gJy4uLy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbnZhciBBVFRBQ0hfT1JJRU5UQVRJT05fUEFERElORyA9IC0xMCxcbiAgICBCT1VOREFSWV9UT19IT1NUX1RIUkVTSE9MRCA9IDQwO1xuXG52YXIgb3Bwb3NpdGVPcmllbnRhdGlvbk1hcHBpbmcgPSB7XG4gICd0b3AnOiAnYm90dG9tJyxcbiAgJ3RvcC1yaWdodCc6ICdib3R0b20tbGVmdCcsXG4gICd0b3AtbGVmdCc6ICdib3R0b20tcmlnaHQnLFxuICAncmlnaHQnOiAnbGVmdCcsXG4gICdib3R0b20nOiAndG9wJyxcbiAgJ2JvdHRvbS1yaWdodCc6ICd0b3AtbGVmdCcsXG4gICdib3R0b20tbGVmdCc6ICd0b3AtcmlnaHQnLFxuICAnbGVmdCc6ICdyaWdodCdcbn07XG5cbnZhciBvcmllbnRhdGlvbkRpcmVjdGlvbk1hcHBpbmcgPSB7XG4gIHRvcDogJ3QnLFxuICByaWdodDogJ3InLFxuICBib3R0b206ICdiJyxcbiAgbGVmdDogJ2wnXG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5MYXlvdXRlcigpIHt9XG5cbmluaGVyaXRzKEJwbW5MYXlvdXRlciwgQmFzZUxheW91dGVyKTtcblxuXG5CcG1uTGF5b3V0ZXIucHJvdG90eXBlLmxheW91dENvbm5lY3Rpb24gPSBmdW5jdGlvbihjb25uZWN0aW9uLCBoaW50cykge1xuICBpZiAoIWhpbnRzKSB7XG4gICAgaGludHMgPSB7fTtcbiAgfVxuXG4gIHZhciBzb3VyY2UgPSBoaW50cy5zb3VyY2UgfHwgY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICB0YXJnZXQgPSBoaW50cy50YXJnZXQgfHwgY29ubmVjdGlvbi50YXJnZXQsXG4gICAgICB3YXlwb2ludHMgPSBoaW50cy53YXlwb2ludHMgfHwgY29ubmVjdGlvbi53YXlwb2ludHMsXG4gICAgICBjb25uZWN0aW9uU3RhcnQgPSBoaW50cy5jb25uZWN0aW9uU3RhcnQsXG4gICAgICBjb25uZWN0aW9uRW5kID0gaGludHMuY29ubmVjdGlvbkVuZDtcblxuICB2YXIgbWFuaGF0dGFuT3B0aW9ucyxcbiAgICAgIHVwZGF0ZWRXYXlwb2ludHM7XG5cbiAgaWYgKCFjb25uZWN0aW9uU3RhcnQpIHtcbiAgICBjb25uZWN0aW9uU3RhcnQgPSBnZXRDb25uZWN0aW9uRG9ja2luZyh3YXlwb2ludHMgJiYgd2F5cG9pbnRzWyAwIF0sIHNvdXJjZSk7XG4gIH1cblxuICBpZiAoIWNvbm5lY3Rpb25FbmQpIHtcbiAgICBjb25uZWN0aW9uRW5kID0gZ2V0Q29ubmVjdGlvbkRvY2tpbmcod2F5cG9pbnRzICYmIHdheXBvaW50c1sgd2F5cG9pbnRzLmxlbmd0aCAtIDEgXSwgdGFyZ2V0KTtcbiAgfVxuXG4gIC8vIFRPRE8obmlra3UpOiBzdXBwb3J0IHZlcnRpY2FsIG1vZGVsaW5nXG4gIC8vIGFuZCBpbnZlcnQgcHJlZmVycmVkTGF5b3V0cyBhY2NvcmRpbmdseVxuXG4gIGlmIChpcyhjb25uZWN0aW9uLCAnYnBtbjpBc3NvY2lhdGlvbicpIHx8XG4gICAgICBpcyhjb25uZWN0aW9uLCAnYnBtbjpEYXRhQXNzb2NpYXRpb24nKSkge1xuXG4gICAgaWYgKHdheXBvaW50cyAmJiAhaXNDb21wZW5zYXRpb25Bc3NvY2lhdGlvbihzb3VyY2UsIHRhcmdldCkpIHtcbiAgICAgIHJldHVybiBbXS5jb25jYXQoWyBjb25uZWN0aW9uU3RhcnQgXSwgd2F5cG9pbnRzLnNsaWNlKDEsIC0xKSwgWyBjb25uZWN0aW9uRW5kIF0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpcyhjb25uZWN0aW9uLCAnYnBtbjpNZXNzYWdlRmxvdycpKSB7XG4gICAgbWFuaGF0dGFuT3B0aW9ucyA9IGdldE1lc3NhZ2VGbG93TWFuaGF0dGFuT3B0aW9ucyhzb3VyY2UsIHRhcmdldCk7XG4gIH0gZWxzZSBpZiAoaXMoY29ubmVjdGlvbiwgJ2JwbW46U2VxdWVuY2VGbG93JykgfHwgaXNDb21wZW5zYXRpb25Bc3NvY2lhdGlvbihzb3VyY2UsIHRhcmdldCkpIHtcblxuICAgIC8vIGxheW91dCBhbGwgY29ubmVjdGlvbiBiZXR3ZWVuIGZsb3cgZWxlbWVudHMgaDpoLCBleGNlcHQgZm9yXG4gICAgLy8gKDEpIG91dGdvaW5nIG9mIGJvdW5kYXJ5IGV2ZW50cyAtPiBsYXlvdXQgYmFzZWQgb24gYXR0YWNoIG9yaWVudGF0aW9uIGFuZCB0YXJnZXQgb3JpZW50YXRpb25cbiAgICAvLyAoMikgaW5jb21pbmcvb3V0Z29pbmcgb2YgZ2F0ZXdheXMgLT4gdjpoIGZvciBvdXRnb2luZywgaDp2IGZvciBpbmNvbWluZ1xuICAgIC8vICgzKSBsb29wc1xuICAgIGlmIChzb3VyY2UgPT09IHRhcmdldCkge1xuICAgICAgbWFuaGF0dGFuT3B0aW9ucyA9IHtcbiAgICAgICAgcHJlZmVycmVkTGF5b3V0czogZ2V0TG9vcFByZWZlcnJlZExheW91dChzb3VyY2UsIGNvbm5lY3Rpb24pXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXMoc291cmNlLCAnYnBtbjpCb3VuZGFyeUV2ZW50JykpIHtcbiAgICAgIG1hbmhhdHRhbk9wdGlvbnMgPSB7XG4gICAgICAgIHByZWZlcnJlZExheW91dHM6IGdldEJvdW5kYXJ5RXZlbnRQcmVmZXJyZWRMYXlvdXRzKHNvdXJjZSwgdGFyZ2V0LCBjb25uZWN0aW9uRW5kKVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGlzRXhwYW5kZWRTdWJQcm9jZXNzKHNvdXJjZSkgfHwgaXNFeHBhbmRlZFN1YlByb2Nlc3ModGFyZ2V0KSkge1xuICAgICAgbWFuaGF0dGFuT3B0aW9ucyA9IGdldFN1YlByb2Nlc3NNYW5oYXR0YW5PcHRpb25zKHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmIChpcyhzb3VyY2UsICdicG1uOkdhdGV3YXknKSkge1xuICAgICAgbWFuaGF0dGFuT3B0aW9ucyA9IHtcbiAgICAgICAgcHJlZmVycmVkTGF5b3V0czogWyAndjpoJyBdXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXModGFyZ2V0LCAnYnBtbjpHYXRld2F5JykpIHtcbiAgICAgIG1hbmhhdHRhbk9wdGlvbnMgPSB7XG4gICAgICAgIHByZWZlcnJlZExheW91dHM6IFsgJ2g6dicgXVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWFuaGF0dGFuT3B0aW9ucyA9IHtcbiAgICAgICAgcHJlZmVycmVkTGF5b3V0czogWyAnaDpoJyBdXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChtYW5oYXR0YW5PcHRpb25zKSB7XG4gICAgbWFuaGF0dGFuT3B0aW9ucyA9IGFzc2lnbihtYW5oYXR0YW5PcHRpb25zLCBoaW50cyk7XG5cbiAgICB1cGRhdGVkV2F5cG9pbnRzID0gd2l0aG91dFJlZHVuZGFudFBvaW50cyhyZXBhaXJDb25uZWN0aW9uKFxuICAgICAgc291cmNlLFxuICAgICAgdGFyZ2V0LFxuICAgICAgY29ubmVjdGlvblN0YXJ0LFxuICAgICAgY29ubmVjdGlvbkVuZCxcbiAgICAgIHdheXBvaW50cyxcbiAgICAgIG1hbmhhdHRhbk9wdGlvbnNcbiAgICApKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkV2F5cG9pbnRzIHx8IFsgY29ubmVjdGlvblN0YXJ0LCBjb25uZWN0aW9uRW5kIF07XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRBdHRhY2hPcmllbnRhdGlvbihhdHRhY2hlZEVsZW1lbnQpIHtcbiAgdmFyIGhvc3RFbGVtZW50ID0gYXR0YWNoZWRFbGVtZW50Lmhvc3Q7XG5cbiAgcmV0dXJuIGdldE9yaWVudGF0aW9uKGdldE1pZChhdHRhY2hlZEVsZW1lbnQpLCBob3N0RWxlbWVudCwgQVRUQUNIX09SSUVOVEFUSU9OX1BBRERJTkcpO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlRmxvd01hbmhhdHRhbk9wdGlvbnMoc291cmNlLCB0YXJnZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBwcmVmZXJyZWRMYXlvdXRzOiBbICdzdHJhaWdodCcsICd2OnYnIF0sXG4gICAgcHJlc2VydmVEb2NraW5nOiBnZXRNZXNzYWdlRmxvd1ByZXNlcnZlRG9ja2luZyhzb3VyY2UsIHRhcmdldClcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0TWVzc2FnZUZsb3dQcmVzZXJ2ZURvY2tpbmcoc291cmNlLCB0YXJnZXQpIHtcblxuICAvLyAoMSkgZG9ja2luZyBlbGVtZW50IGNvbm5lY3RlZCB0byBwYXJ0aWNpcGFudCBoYXMgcHJlY2VkZW5jZVxuICBpZiAoaXModGFyZ2V0LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgcmV0dXJuICdzb3VyY2UnO1xuICB9XG5cbiAgaWYgKGlzKHNvdXJjZSwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIHJldHVybiAndGFyZ2V0JztcbiAgfVxuXG4gIC8vICgyKSBkb2NraW5nIGVsZW1lbnQgY29ubmVjdGVkIHRvIGV4cGFuZGVkIHN1Yi1wcm9jZXNzIGhhcyBwcmVjZWRlbmNlXG4gIGlmIChpc0V4cGFuZGVkU3ViUHJvY2Vzcyh0YXJnZXQpKSB7XG4gICAgcmV0dXJuICdzb3VyY2UnO1xuICB9XG5cbiAgaWYgKGlzRXhwYW5kZWRTdWJQcm9jZXNzKHNvdXJjZSkpIHtcbiAgICByZXR1cm4gJ3RhcmdldCc7XG4gIH1cblxuICAvLyAoMykgZG9ja2luZyBldmVudCBoYXMgcHJlY2VkZW5jZVxuICBpZiAoaXModGFyZ2V0LCAnYnBtbjpFdmVudCcpKSB7XG4gICAgcmV0dXJuICd0YXJnZXQnO1xuICB9XG5cbiAgaWYgKGlzKHNvdXJjZSwgJ2JwbW46RXZlbnQnKSkge1xuICAgIHJldHVybiAnc291cmNlJztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRTdWJQcm9jZXNzTWFuaGF0dGFuT3B0aW9ucyhzb3VyY2UpIHtcbiAgcmV0dXJuIHtcbiAgICBwcmVmZXJyZWRMYXlvdXRzOiBbICdzdHJhaWdodCcsICdoOmgnIF0sXG4gICAgcHJlc2VydmVEb2NraW5nOiBnZXRTdWJQcm9jZXNzUHJlc2VydmVEb2NraW5nKHNvdXJjZSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U3ViUHJvY2Vzc1ByZXNlcnZlRG9ja2luZyhzb3VyY2UpIHtcbiAgcmV0dXJuIGlzRXhwYW5kZWRTdWJQcm9jZXNzKHNvdXJjZSkgPyAndGFyZ2V0JyA6ICdzb3VyY2UnO1xufVxuXG5mdW5jdGlvbiBnZXRDb25uZWN0aW9uRG9ja2luZyhwb2ludCwgc2hhcGUpIHtcbiAgcmV0dXJuIHBvaW50ID8gKHBvaW50Lm9yaWdpbmFsIHx8IHBvaW50KSA6IGdldE1pZChzaGFwZSk7XG59XG5cbmZ1bmN0aW9uIGlzQ29tcGVuc2F0aW9uQXNzb2NpYXRpb24oc291cmNlLCB0YXJnZXQpIHtcbiAgcmV0dXJuIGlzKHRhcmdldCwgJ2JwbW46QWN0aXZpdHknKSAmJlxuICAgIGlzKHNvdXJjZSwgJ2JwbW46Qm91bmRhcnlFdmVudCcpICYmXG4gICAgdGFyZ2V0LmJ1c2luZXNzT2JqZWN0LmlzRm9yQ29tcGVuc2F0aW9uO1xufVxuXG5mdW5jdGlvbiBpc0V4cGFuZGVkU3ViUHJvY2VzcyhlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgaXNFeHBhbmRlZChlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gaXNTYW1lKGEsIGIpIHtcbiAgcmV0dXJuIGEgPT09IGI7XG59XG5cbmZ1bmN0aW9uIGlzQW55T3JpZW50YXRpb24ob3JpZW50YXRpb24sIG9yaWVudGF0aW9ucykge1xuICByZXR1cm4gb3JpZW50YXRpb25zLmluZGV4T2Yob3JpZW50YXRpb24pICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gZ2V0SG9yaXpvbnRhbE9yaWVudGF0aW9uKG9yaWVudGF0aW9uKSB7XG4gIHZhciBtYXRjaGVzID0gL3JpZ2h0fGxlZnQvLmV4ZWMob3JpZW50YXRpb24pO1xuXG4gIHJldHVybiBtYXRjaGVzICYmIG1hdGNoZXNbMF07XG59XG5cbmZ1bmN0aW9uIGdldFZlcnRpY2FsT3JpZW50YXRpb24ob3JpZW50YXRpb24pIHtcbiAgdmFyIG1hdGNoZXMgPSAvdG9wfGJvdHRvbS8uZXhlYyhvcmllbnRhdGlvbik7XG5cbiAgcmV0dXJuIG1hdGNoZXMgJiYgbWF0Y2hlc1swXTtcbn1cblxuZnVuY3Rpb24gaXNPcHBvc2l0ZU9yaWVudGF0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIG9wcG9zaXRlT3JpZW50YXRpb25NYXBwaW5nW2FdID09PSBiO1xufVxuXG5mdW5jdGlvbiBpc09wcG9zaXRlSG9yaXpvbnRhbE9yaWVudGF0aW9uKGEsIGIpIHtcbiAgdmFyIGhvcml6b250YWxPcmllbnRhdGlvbiA9IGdldEhvcml6b250YWxPcmllbnRhdGlvbihhKTtcblxuICB2YXIgb3Bwb3NpdGVIb3Jpem9udGFsT3JpZW50YXRpb24gPSBvcHBvc2l0ZU9yaWVudGF0aW9uTWFwcGluZ1tob3Jpem9udGFsT3JpZW50YXRpb25dO1xuXG4gIHJldHVybiBiLmluZGV4T2Yob3Bwb3NpdGVIb3Jpem9udGFsT3JpZW50YXRpb24pICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gaXNPcHBvc2l0ZVZlcnRpY2FsT3JpZW50YXRpb24oYSwgYikge1xuICB2YXIgdmVydGljYWxPcmllbnRhdGlvbiA9IGdldFZlcnRpY2FsT3JpZW50YXRpb24oYSk7XG5cbiAgdmFyIG9wcG9zaXRlVmVydGljYWxPcmllbnRhdGlvbiA9IG9wcG9zaXRlT3JpZW50YXRpb25NYXBwaW5nW3ZlcnRpY2FsT3JpZW50YXRpb25dO1xuXG4gIHJldHVybiBiLmluZGV4T2Yob3Bwb3NpdGVWZXJ0aWNhbE9yaWVudGF0aW9uKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIGlzSG9yaXpvbnRhbE9yaWVudGF0aW9uKG9yaWVudGF0aW9uKSB7XG4gIHJldHVybiBvcmllbnRhdGlvbiA9PT0gJ3JpZ2h0JyB8fCBvcmllbnRhdGlvbiA9PT0gJ2xlZnQnO1xufVxuXG5mdW5jdGlvbiBnZXRMb29wUHJlZmVycmVkTGF5b3V0KHNvdXJjZSwgY29ubmVjdGlvbikge1xuICB2YXIgd2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHM7XG5cbiAgdmFyIG9yaWVudGF0aW9uID0gd2F5cG9pbnRzICYmIHdheXBvaW50cy5sZW5ndGggJiYgZ2V0T3JpZW50YXRpb24od2F5cG9pbnRzWzBdLCBzb3VyY2UpO1xuXG4gIGlmIChvcmllbnRhdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICByZXR1cm4gWyAndDpyJyBdO1xuICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uID09PSAncmlnaHQnKSB7XG4gICAgcmV0dXJuIFsgJ3I6YicgXTtcbiAgfSBlbHNlIGlmIChvcmllbnRhdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgcmV0dXJuIFsgJ2w6dCcgXTtcbiAgfVxuXG4gIHJldHVybiBbICdiOmwnIF07XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kYXJ5RXZlbnRQcmVmZXJyZWRMYXlvdXRzKHNvdXJjZSwgdGFyZ2V0LCBlbmQpIHtcbiAgdmFyIHNvdXJjZU1pZCA9IGdldE1pZChzb3VyY2UpLFxuICAgICAgdGFyZ2V0TWlkID0gZ2V0TWlkKHRhcmdldCksXG4gICAgICBhdHRhY2hPcmllbnRhdGlvbiA9IGdldEF0dGFjaE9yaWVudGF0aW9uKHNvdXJjZSksXG4gICAgICBzb3VyY2VMYXlvdXQsXG4gICAgICB0YXJnZXRMYXlvdXQ7XG5cbiAgdmFyIGlzTG9vcCA9IGlzU2FtZShzb3VyY2UuaG9zdCwgdGFyZ2V0KTtcblxuICB2YXIgYXR0YWNoZWRUb1NpZGUgPSBpc0FueU9yaWVudGF0aW9uKGF0dGFjaE9yaWVudGF0aW9uLCBbICd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnIF0pO1xuXG4gIHZhciB0YXJnZXRPcmllbnRhdGlvbiA9IGdldE9yaWVudGF0aW9uKHRhcmdldE1pZCwgc291cmNlTWlkLCB7XG4gICAgeDogc291cmNlLndpZHRoIC8gMiArIHRhcmdldC53aWR0aCAvIDIsXG4gICAgeTogc291cmNlLmhlaWdodCAvIDIgKyB0YXJnZXQuaGVpZ2h0IC8gMlxuICB9KTtcblxuICBpZiAoaXNMb29wKSB7XG4gICAgcmV0dXJuIGdldEJvdW5kYXJ5RXZlbnRMb29wTGF5b3V0KGF0dGFjaE9yaWVudGF0aW9uLCBhdHRhY2hlZFRvU2lkZSwgc291cmNlLCB0YXJnZXQsIGVuZCk7XG4gIH1cblxuICAvLyBzb3VyY2UgbGF5b3V0XG4gIHNvdXJjZUxheW91dCA9IGdldEJvdW5kYXJ5RXZlbnRTb3VyY2VMYXlvdXQoYXR0YWNoT3JpZW50YXRpb24sIHRhcmdldE9yaWVudGF0aW9uLCBhdHRhY2hlZFRvU2lkZSk7XG5cbiAgLy8gdGFyZ2V0IGxheW91dFxuICB0YXJnZXRMYXlvdXQgPSBnZXRCb3VuZGFyeUV2ZW50VGFyZ2V0TGF5b3V0KGF0dGFjaE9yaWVudGF0aW9uLCB0YXJnZXRPcmllbnRhdGlvbiwgYXR0YWNoZWRUb1NpZGUpO1xuXG4gIHJldHVybiBbIHNvdXJjZUxheW91dCArICc6JyArIHRhcmdldExheW91dCBdO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGFyeUV2ZW50TG9vcExheW91dChhdHRhY2hPcmllbnRhdGlvbiwgYXR0YWNoZWRUb1NpZGUsIHNvdXJjZSwgdGFyZ2V0LCBlbmQpIHtcbiAgdmFyIG9yaWVudGF0aW9uID0gYXR0YWNoZWRUb1NpZGUgPyBhdHRhY2hPcmllbnRhdGlvbiA6IGdldFZlcnRpY2FsT3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24pLFxuICAgICAgc291cmNlTGF5b3V0ID0gb3JpZW50YXRpb25EaXJlY3Rpb25NYXBwaW5nWyBvcmllbnRhdGlvbiBdLFxuICAgICAgdGFyZ2V0TGF5b3V0O1xuXG4gIGlmIChhdHRhY2hlZFRvU2lkZSkge1xuICAgIGlmIChpc0hvcml6b250YWxPcmllbnRhdGlvbihhdHRhY2hPcmllbnRhdGlvbikpIHtcbiAgICAgIHRhcmdldExheW91dCA9IHNob3VsZENvbm5lY3RUb1NhbWVTaWRlKCd5Jywgc291cmNlLCB0YXJnZXQsIGVuZCkgPyAnaCcgOiAnYic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldExheW91dCA9IHNob3VsZENvbm5lY3RUb1NhbWVTaWRlKCd4Jywgc291cmNlLCB0YXJnZXQsIGVuZCkgPyAndicgOiAnbCc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRhcmdldExheW91dCA9ICd2JztcbiAgfVxuXG4gIHJldHVybiBbIHNvdXJjZUxheW91dCArICc6JyArIHRhcmdldExheW91dCBdO1xufVxuXG5mdW5jdGlvbiBzaG91bGRDb25uZWN0VG9TYW1lU2lkZShheGlzLCBzb3VyY2UsIHRhcmdldCwgZW5kKSB7XG4gIHZhciB0aHJlc2hvbGQgPSBCT1VOREFSWV9UT19IT1NUX1RIUkVTSE9MRDtcblxuICByZXR1cm4gIShcbiAgICBhcmVDbG9zZU9uQXhpcyhheGlzLCBlbmQsIHRhcmdldCwgdGhyZXNob2xkKSB8fFxuICAgIGFyZUNsb3NlT25BeGlzKGF4aXMsIGVuZCwge1xuICAgICAgeDogdGFyZ2V0LnggKyB0YXJnZXQud2lkdGgsXG4gICAgICB5OiB0YXJnZXQueSArIHRhcmdldC5oZWlnaHRcbiAgICB9LCB0aHJlc2hvbGQpIHx8XG4gICAgYXJlQ2xvc2VPbkF4aXMoYXhpcywgZW5kLCBnZXRNaWQoc291cmNlKSwgdGhyZXNob2xkKVxuICApO1xufVxuXG5mdW5jdGlvbiBhcmVDbG9zZU9uQXhpcyhheGlzLCBhLCBiLCB0aHJlc2hvbGQpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGFbIGF4aXMgXSAtIGJbIGF4aXMgXSkgPCB0aHJlc2hvbGQ7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kYXJ5RXZlbnRTb3VyY2VMYXlvdXQoYXR0YWNoT3JpZW50YXRpb24sIHRhcmdldE9yaWVudGF0aW9uLCBhdHRhY2hlZFRvU2lkZSkge1xuXG4gIC8vIGF0dGFjaGVkIHRvIGVpdGhlciB0b3AsIHJpZ2h0LCBib3R0b20gb3IgbGVmdCBzaWRlXG4gIGlmIChhdHRhY2hlZFRvU2lkZSkge1xuICAgIHJldHVybiBvcmllbnRhdGlvbkRpcmVjdGlvbk1hcHBpbmdbIGF0dGFjaE9yaWVudGF0aW9uIF07XG4gIH1cblxuICAvLyBhdHRhY2hlZCB0byBlaXRoZXIgdG9wLXJpZ2h0LCB0b3AtbGVmdCwgYm90dG9tLXJpZ2h0IG9yIGJvdHRvbS1sZWZ0IGNvcm5lclxuXG4gIC8vIHNhbWUgdmVydGljYWwgb3Igb3Bwb3NpdGUgaG9yaXpvbnRhbCBvcmllbnRhdGlvblxuICBpZiAoaXNTYW1lKFxuICAgIGdldFZlcnRpY2FsT3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24pLCBnZXRWZXJ0aWNhbE9yaWVudGF0aW9uKHRhcmdldE9yaWVudGF0aW9uKVxuICApIHx8IGlzT3Bwb3NpdGVPcmllbnRhdGlvbihcbiAgICBnZXRIb3Jpem9udGFsT3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24pLCBnZXRIb3Jpem9udGFsT3JpZW50YXRpb24odGFyZ2V0T3JpZW50YXRpb24pXG4gICkpIHtcbiAgICByZXR1cm4gb3JpZW50YXRpb25EaXJlY3Rpb25NYXBwaW5nWyBnZXRWZXJ0aWNhbE9yaWVudGF0aW9uKGF0dGFjaE9yaWVudGF0aW9uKSBdO1xuICB9XG5cbiAgLy8gZmFsbGJhY2tcbiAgcmV0dXJuIG9yaWVudGF0aW9uRGlyZWN0aW9uTWFwcGluZ1sgZ2V0SG9yaXpvbnRhbE9yaWVudGF0aW9uKGF0dGFjaE9yaWVudGF0aW9uKSBdO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGFyeUV2ZW50VGFyZ2V0TGF5b3V0KGF0dGFjaE9yaWVudGF0aW9uLCB0YXJnZXRPcmllbnRhdGlvbiwgYXR0YWNoZWRUb1NpZGUpIHtcblxuICAvLyBhdHRhY2hlZCB0byBlaXRoZXIgdG9wLCByaWdodCwgYm90dG9tIG9yIGxlZnQgc2lkZVxuICBpZiAoYXR0YWNoZWRUb1NpZGUpIHtcbiAgICBpZiAoaXNIb3Jpem9udGFsT3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24pKSB7XG5cbiAgICAgIC8vIG9yaWVudGF0aW9uIGlzIHJpZ2h0IG9yIGxlZnRcblxuICAgICAgLy8gb3Bwb3NpdGUgaG9yaXpvbnRhbCBvcmllbnRhdGlvbiBvciBzYW1lIG9yaWVudGF0aW9uXG4gICAgICBpZiAoXG4gICAgICAgIGlzT3Bwb3NpdGVIb3Jpem9udGFsT3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24sIHRhcmdldE9yaWVudGF0aW9uKSB8fFxuICAgICAgICBpc1NhbWUoYXR0YWNoT3JpZW50YXRpb24sIHRhcmdldE9yaWVudGF0aW9uKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiAnaCc7XG4gICAgICB9XG5cbiAgICAgIC8vIGZhbGxiYWNrXG4gICAgICByZXR1cm4gJ3YnO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIG9yaWVudGF0aW9uIGlzIHRvcCBvciBib3R0b21cblxuICAgICAgLy8gb3Bwb3NpdGUgdmVydGljYWwgb3JpZW50YXRpb24gb3Igc2FtZSBvcmllbnRhdGlvblxuICAgICAgaWYgKFxuICAgICAgICBpc09wcG9zaXRlVmVydGljYWxPcmllbnRhdGlvbihhdHRhY2hPcmllbnRhdGlvbiwgdGFyZ2V0T3JpZW50YXRpb24pIHx8XG4gICAgICAgIGlzU2FtZShhdHRhY2hPcmllbnRhdGlvbiwgdGFyZ2V0T3JpZW50YXRpb24pXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuICd2JztcbiAgICAgIH1cblxuICAgICAgLy8gZmFsbGJhY2tcbiAgICAgIHJldHVybiAnaCc7XG4gICAgfVxuICB9XG5cbiAgLy8gYXR0YWNoZWQgdG8gZWl0aGVyIHRvcC1yaWdodCwgdG9wLWxlZnQsIGJvdHRvbS1yaWdodCBvciBib3R0b20tbGVmdCBjb3JuZXJcblxuICAvLyBvcmllbnRhdGlvbiBpcyByaWdodCwgbGVmdFxuICAvLyBvciBzYW1lIHZlcnRpY2FsIG9yaWVudGF0aW9uIGJ1dCBhbHNvIHJpZ2h0IG9yIGxlZnRcbiAgaWYgKGlzSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRhcmdldE9yaWVudGF0aW9uKSB8fFxuICAgIChpc1NhbWUoZ2V0VmVydGljYWxPcmllbnRhdGlvbihhdHRhY2hPcmllbnRhdGlvbiksIGdldFZlcnRpY2FsT3JpZW50YXRpb24odGFyZ2V0T3JpZW50YXRpb24pKSAmJlxuICAgICAgZ2V0SG9yaXpvbnRhbE9yaWVudGF0aW9uKHRhcmdldE9yaWVudGF0aW9uKSkpIHtcbiAgICByZXR1cm4gJ2gnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAndic7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7XG4gIHJlbW92ZSBhcyBjb2xsZWN0aW9uUmVtb3ZlLFxuICBhZGQgYXMgY29sbGVjdGlvbkFkZFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zJztcblxuaW1wb3J0IHtcbiAgTGFiZWxcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbW9kZWwnO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0FueVxufSBmcm9tICcuL3V0aWwvTW9kZWxpbmdVdGlsJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbi8qKlxuICogQSBoYW5kbGVyIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyB0aGUgdW5kZXJseWluZyBCUE1OIDIuMCBYTUwgKyBESVxuICogb25jZSBjaGFuZ2VzIG9uIHRoZSBkaWFncmFtIGhhcHBlblxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uVXBkYXRlcihcbiAgICBldmVudEJ1cywgYnBtbkZhY3RvcnksIGNvbm5lY3Rpb25Eb2NraW5nLFxuICAgIHRyYW5zbGF0ZSkge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLl9icG1uRmFjdG9yeSA9IGJwbW5GYWN0b3J5O1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG5cblxuICAvLyBjb25uZWN0aW9uIGNyb3BwaW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAvLyBjcm9wIGNvbm5lY3Rpb24gZW5kcyBkdXJpbmcgY3JlYXRlL3VwZGF0ZVxuICBmdW5jdGlvbiBjcm9wQ29ubmVjdGlvbihlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgY29ubmVjdGlvbjtcblxuICAgIGlmICghY29udGV4dC5jcm9wcGVkICYmIGhpbnRzLmNyZWF0ZUVsZW1lbnRzQmVoYXZpb3IgIT09IGZhbHNlKSB7XG4gICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uO1xuICAgICAgY29ubmVjdGlvbi53YXlwb2ludHMgPSBjb25uZWN0aW9uRG9ja2luZy5nZXRDcm9wcGVkV2F5cG9pbnRzKGNvbm5lY3Rpb24pO1xuICAgICAgY29udGV4dC5jcm9wcGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB0aGlzLmV4ZWN1dGVkKFtcbiAgICAnY29ubmVjdGlvbi5sYXlvdXQnLFxuICAgICdjb25uZWN0aW9uLmNyZWF0ZSdcbiAgXSwgY3JvcENvbm5lY3Rpb24pO1xuXG4gIHRoaXMucmV2ZXJ0ZWQoWyAnY29ubmVjdGlvbi5sYXlvdXQnIF0sIGZ1bmN0aW9uKGUpIHtcbiAgICBkZWxldGUgZS5jb250ZXh0LmNyb3BwZWQ7XG4gIH0pO1xuXG5cblxuICAvLyBCUE1OICsgREkgdXBkYXRlIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG4gIC8vIHVwZGF0ZSBwYXJlbnRcbiAgZnVuY3Rpb24gdXBkYXRlUGFyZW50KGUpIHtcbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dDtcblxuICAgIHNlbGYudXBkYXRlUGFyZW50KGNvbnRleHQuc2hhcGUgfHwgY29udGV4dC5jb25uZWN0aW9uLCBjb250ZXh0Lm9sZFBhcmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiByZXZlcnNlVXBkYXRlUGFyZW50KGUpIHtcbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dDtcblxuICAgIHZhciBlbGVtZW50ID0gY29udGV4dC5zaGFwZSB8fCBjb250ZXh0LmNvbm5lY3Rpb24sXG5cbiAgICAgICAgLy8gb2xkUGFyZW50IGlzIHRoZSAob2xkKSBuZXcgcGFyZW50LCBiZWNhdXNlIHdlIGFyZSB1bmRvaW5nXG4gICAgICAgIG9sZFBhcmVudCA9IGNvbnRleHQucGFyZW50IHx8IGNvbnRleHQubmV3UGFyZW50O1xuXG4gICAgc2VsZi51cGRhdGVQYXJlbnQoZWxlbWVudCwgb2xkUGFyZW50KTtcbiAgfVxuXG4gIHRoaXMuZXhlY3V0ZWQoW1xuICAgICdzaGFwZS5tb3ZlJyxcbiAgICAnc2hhcGUuY3JlYXRlJyxcbiAgICAnc2hhcGUuZGVsZXRlJyxcbiAgICAnY29ubmVjdGlvbi5jcmVhdGUnLFxuICAgICdjb25uZWN0aW9uLm1vdmUnLFxuICAgICdjb25uZWN0aW9uLmRlbGV0ZSdcbiAgXSwgaWZCcG1uKHVwZGF0ZVBhcmVudCkpO1xuXG4gIHRoaXMucmV2ZXJ0ZWQoW1xuICAgICdzaGFwZS5tb3ZlJyxcbiAgICAnc2hhcGUuY3JlYXRlJyxcbiAgICAnc2hhcGUuZGVsZXRlJyxcbiAgICAnY29ubmVjdGlvbi5jcmVhdGUnLFxuICAgICdjb25uZWN0aW9uLm1vdmUnLFxuICAgICdjb25uZWN0aW9uLmRlbGV0ZSdcbiAgXSwgaWZCcG1uKHJldmVyc2VVcGRhdGVQYXJlbnQpKTtcblxuICAvKlxuICAgKiAjIyBVcGRhdGluZyBQYXJlbnRcbiAgICpcbiAgICogV2hlbiBtb3JwaGluZyBhIFByb2Nlc3MgaW50byBhIENvbGxhYm9yYXRpb24gb3IgdmljZS12ZXJzYSxcbiAgICogbWFrZSBzdXJlIHRoYXQgYm90aCB0aGUgKnNlbWFudGljKiBhbmQgKmRpKiBwYXJlbnQgb2YgZWFjaCBlbGVtZW50XG4gICAqIGlzIHVwZGF0ZWQuXG4gICAqXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGVSb290KGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBvbGRSb290ID0gY29udGV4dC5vbGRSb290LFxuICAgICAgICBjaGlsZHJlbiA9IG9sZFJvb3QuY2hpbGRyZW47XG5cbiAgICBmb3JFYWNoKGNoaWxkcmVuLCBmdW5jdGlvbihjaGlsZCkge1xuICAgICAgaWYgKGlzKGNoaWxkLCAnYnBtbjpCYXNlRWxlbWVudCcpKSB7XG4gICAgICAgIHNlbGYudXBkYXRlUGFyZW50KGNoaWxkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRoaXMuZXhlY3V0ZWQoWyAnY2FudmFzLnVwZGF0ZVJvb3QnIF0sIHVwZGF0ZVJvb3QpO1xuICB0aGlzLnJldmVydGVkKFsgJ2NhbnZhcy51cGRhdGVSb290JyBdLCB1cGRhdGVSb290KTtcblxuXG4gIC8vIHVwZGF0ZSBib3VuZHNcbiAgZnVuY3Rpb24gdXBkYXRlQm91bmRzKGUpIHtcbiAgICB2YXIgc2hhcGUgPSBlLmNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAoIWlzKHNoYXBlLCAnYnBtbjpCYXNlRWxlbWVudCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZi51cGRhdGVCb3VuZHMoc2hhcGUpO1xuICB9XG5cbiAgdGhpcy5leGVjdXRlZChbICdzaGFwZS5tb3ZlJywgJ3NoYXBlLmNyZWF0ZScsICdzaGFwZS5yZXNpemUnIF0sIGlmQnBtbihmdW5jdGlvbihldmVudCkge1xuXG4gICAgLy8gZXhjbHVkZSBsYWJlbHMgYmVjYXVzZSB0aGV5J3JlIGhhbmRsZWQgc2VwYXJhdGVseSBkdXJpbmcgc2hhcGUuY2hhbmdlZFxuICAgIGlmIChldmVudC5jb250ZXh0LnNoYXBlLnR5cGUgPT09ICdsYWJlbCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVCb3VuZHMoZXZlbnQpO1xuICB9KSk7XG5cbiAgdGhpcy5yZXZlcnRlZChbICdzaGFwZS5tb3ZlJywgJ3NoYXBlLmNyZWF0ZScsICdzaGFwZS5yZXNpemUnIF0sIGlmQnBtbihmdW5jdGlvbihldmVudCkge1xuXG4gICAgLy8gZXhjbHVkZSBsYWJlbHMgYmVjYXVzZSB0aGV5J3JlIGhhbmRsZWQgc2VwYXJhdGVseSBkdXJpbmcgc2hhcGUuY2hhbmdlZFxuICAgIGlmIChldmVudC5jb250ZXh0LnNoYXBlLnR5cGUgPT09ICdsYWJlbCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVCb3VuZHMoZXZlbnQpO1xuICB9KSk7XG5cbiAgLy8gSGFuZGxlIGxhYmVscyBzZXBhcmF0ZWx5LiBUaGlzIGlzIG5lY2Vzc2FyeSwgYmVjYXVzZSB0aGUgbGFiZWwgYm91bmRzIGhhdmUgdG8gYmUgdXBkYXRlZFxuICAvLyBldmVyeSB0aW1lIGl0cyBzaGFwZSBjaGFuZ2VzLCBub3Qgb25seSBvbiBtb3ZlLCBjcmVhdGUgYW5kIHJlc2l6ZS5cbiAgZXZlbnRCdXMub24oJ3NoYXBlLmNoYW5nZWQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIGlmIChldmVudC5lbGVtZW50LnR5cGUgPT09ICdsYWJlbCcpIHtcbiAgICAgIHVwZGF0ZUJvdW5kcyh7IGNvbnRleHQ6IHsgc2hhcGU6IGV2ZW50LmVsZW1lbnQgfSB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGF0dGFjaCAvIGRldGFjaCBjb25uZWN0aW9uXG4gIGZ1bmN0aW9uIHVwZGF0ZUNvbm5lY3Rpb24oZSkge1xuICAgIHNlbGYudXBkYXRlQ29ubmVjdGlvbihlLmNvbnRleHQpO1xuICB9XG5cbiAgdGhpcy5leGVjdXRlZChbXG4gICAgJ2Nvbm5lY3Rpb24uY3JlYXRlJyxcbiAgICAnY29ubmVjdGlvbi5tb3ZlJyxcbiAgICAnY29ubmVjdGlvbi5kZWxldGUnLFxuICAgICdjb25uZWN0aW9uLnJlY29ubmVjdCdcbiAgXSwgaWZCcG1uKHVwZGF0ZUNvbm5lY3Rpb24pKTtcblxuICB0aGlzLnJldmVydGVkKFtcbiAgICAnY29ubmVjdGlvbi5jcmVhdGUnLFxuICAgICdjb25uZWN0aW9uLm1vdmUnLFxuICAgICdjb25uZWN0aW9uLmRlbGV0ZScsXG4gICAgJ2Nvbm5lY3Rpb24ucmVjb25uZWN0J1xuICBdLCBpZkJwbW4odXBkYXRlQ29ubmVjdGlvbikpO1xuXG5cbiAgLy8gdXBkYXRlIHdheXBvaW50c1xuICBmdW5jdGlvbiB1cGRhdGVDb25uZWN0aW9uV2F5cG9pbnRzKGUpIHtcbiAgICBzZWxmLnVwZGF0ZUNvbm5lY3Rpb25XYXlwb2ludHMoZS5jb250ZXh0LmNvbm5lY3Rpb24pO1xuICB9XG5cbiAgdGhpcy5leGVjdXRlZChbXG4gICAgJ2Nvbm5lY3Rpb24ubGF5b3V0JyxcbiAgICAnY29ubmVjdGlvbi5tb3ZlJyxcbiAgICAnY29ubmVjdGlvbi51cGRhdGVXYXlwb2ludHMnLFxuICBdLCBpZkJwbW4odXBkYXRlQ29ubmVjdGlvbldheXBvaW50cykpO1xuXG4gIHRoaXMucmV2ZXJ0ZWQoW1xuICAgICdjb25uZWN0aW9uLmxheW91dCcsXG4gICAgJ2Nvbm5lY3Rpb24ubW92ZScsXG4gICAgJ2Nvbm5lY3Rpb24udXBkYXRlV2F5cG9pbnRzJyxcbiAgXSwgaWZCcG1uKHVwZGF0ZUNvbm5lY3Rpb25XYXlwb2ludHMpKTtcblxuICAvLyB1cGRhdGUgY29uZGl0aW9uYWwvZGVmYXVsdCBmbG93c1xuICB0aGlzLmV4ZWN1dGVkKCdjb25uZWN0aW9uLnJlY29ubmVjdCcsIGlmQnBtbihmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgb2xkU291cmNlID0gY29udGV4dC5vbGRTb3VyY2UsXG4gICAgICAgIG5ld1NvdXJjZSA9IGNvbnRleHQubmV3U291cmNlLFxuICAgICAgICBjb25uZWN0aW9uQm8gPSBnZXRCdXNpbmVzc09iamVjdChjb25uZWN0aW9uKSxcbiAgICAgICAgb2xkU291cmNlQm8gPSBnZXRCdXNpbmVzc09iamVjdChvbGRTb3VyY2UpLFxuICAgICAgICBuZXdTb3VyY2VCbyA9IGdldEJ1c2luZXNzT2JqZWN0KG5ld1NvdXJjZSk7XG5cbiAgICAvLyByZW1vdmUgY29uZGl0aW9uIGZyb20gY29ubmVjdGlvbiBvbiByZWNvbm5lY3QgdG8gbmV3IHNvdXJjZVxuICAgIC8vIGlmIG5ldyBzb3VyY2UgY2FuIE5PVCBoYXZlIGNvbmRpb25hbCBzZXF1ZW5jZSBmbG93XG4gICAgaWYgKGNvbm5lY3Rpb25Cby5jb25kaXRpb25FeHByZXNzaW9uICYmICFpc0FueShuZXdTb3VyY2VCbywgW1xuICAgICAgJ2JwbW46QWN0aXZpdHknLFxuICAgICAgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheScsXG4gICAgICAnYnBtbjpJbmNsdXNpdmVHYXRld2F5J1xuICAgIF0pKSB7XG4gICAgICBjb250ZXh0Lm9sZENvbmRpdGlvbkV4cHJlc3Npb24gPSBjb25uZWN0aW9uQm8uY29uZGl0aW9uRXhwcmVzc2lvbjtcblxuICAgICAgZGVsZXRlIGNvbm5lY3Rpb25Cby5jb25kaXRpb25FeHByZXNzaW9uO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSBkZWZhdWx0IGZyb20gb2xkIHNvdXJjZSBmbG93IG9uIHJlY29ubmVjdCB0byBuZXcgc291cmNlXG4gICAgLy8gaWYgc291cmNlIGNoYW5nZWRcbiAgICBpZiAob2xkU291cmNlICE9PSBuZXdTb3VyY2UgJiYgb2xkU291cmNlQm8uZGVmYXVsdCA9PT0gY29ubmVjdGlvbkJvKSB7XG4gICAgICBjb250ZXh0Lm9sZERlZmF1bHQgPSBvbGRTb3VyY2VCby5kZWZhdWx0O1xuXG4gICAgICBkZWxldGUgb2xkU291cmNlQm8uZGVmYXVsdDtcbiAgICB9XG4gIH0pKTtcblxuICB0aGlzLnJldmVydGVkKCdjb25uZWN0aW9uLnJlY29ubmVjdCcsIGlmQnBtbihmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgb2xkU291cmNlID0gY29udGV4dC5vbGRTb3VyY2UsXG4gICAgICAgIG5ld1NvdXJjZSA9IGNvbnRleHQubmV3U291cmNlLFxuICAgICAgICBjb25uZWN0aW9uQm8gPSBnZXRCdXNpbmVzc09iamVjdChjb25uZWN0aW9uKSxcbiAgICAgICAgb2xkU291cmNlQm8gPSBnZXRCdXNpbmVzc09iamVjdChvbGRTb3VyY2UpLFxuICAgICAgICBuZXdTb3VyY2VCbyA9IGdldEJ1c2luZXNzT2JqZWN0KG5ld1NvdXJjZSk7XG5cbiAgICAvLyBhZGQgY29uZGl0aW9uIHRvIGNvbm5lY3Rpb24gb24gcmV2ZXJ0IHJlY29ubmVjdCB0byBuZXcgc291cmNlXG4gICAgaWYgKGNvbnRleHQub2xkQ29uZGl0aW9uRXhwcmVzc2lvbikge1xuICAgICAgY29ubmVjdGlvbkJvLmNvbmRpdGlvbkV4cHJlc3Npb24gPSBjb250ZXh0Lm9sZENvbmRpdGlvbkV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgLy8gYWRkIGRlZmF1bHQgdG8gb2xkIHNvdXJjZSBvbiByZXZlcnQgcmVjb25uZWN0IHRvIG5ldyBzb3VyY2VcbiAgICBpZiAoY29udGV4dC5vbGREZWZhdWx0KSB7XG4gICAgICBvbGRTb3VyY2VCby5kZWZhdWx0ID0gY29udGV4dC5vbGREZWZhdWx0O1xuXG4gICAgICBkZWxldGUgbmV3U291cmNlQm8uZGVmYXVsdDtcbiAgICB9XG4gIH0pKTtcblxuICAvLyB1cGRhdGUgYXR0YWNobWVudHNcbiAgZnVuY3Rpb24gdXBkYXRlQXR0YWNobWVudChlKSB7XG4gICAgc2VsZi51cGRhdGVBdHRhY2htZW50KGUuY29udGV4dCk7XG4gIH1cblxuICB0aGlzLmV4ZWN1dGVkKFsgJ2VsZW1lbnQudXBkYXRlQXR0YWNobWVudCcgXSwgaWZCcG1uKHVwZGF0ZUF0dGFjaG1lbnQpKTtcbiAgdGhpcy5yZXZlcnRlZChbICdlbGVtZW50LnVwZGF0ZUF0dGFjaG1lbnQnIF0sIGlmQnBtbih1cGRhdGVBdHRhY2htZW50KSk7XG59XG5cbmluaGVyaXRzKEJwbW5VcGRhdGVyLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5CcG1uVXBkYXRlci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnYnBtbkZhY3RvcnknLFxuICAnY29ubmVjdGlvbkRvY2tpbmcnLFxuICAndHJhbnNsYXRlJ1xuXTtcblxuXG4vLyBpbXBsZW1lbnRhdGlvbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVBdHRhY2htZW50ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBidXNpbmVzc09iamVjdCA9IHNoYXBlLmJ1c2luZXNzT2JqZWN0LFxuICAgICAgaG9zdCA9IHNoYXBlLmhvc3Q7XG5cbiAgYnVzaW5lc3NPYmplY3QuYXR0YWNoZWRUb1JlZiA9IGhvc3QgJiYgaG9zdC5idXNpbmVzc09iamVjdDtcbn07XG5cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVQYXJlbnQgPSBmdW5jdGlvbihlbGVtZW50LCBvbGRQYXJlbnQpIHtcblxuICAvLyBkbyBub3QgdXBkYXRlIEJQTU4gMi4wIGxhYmVsIHBhcmVudFxuICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIExhYmVsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZGF0YSBzdG9yZXMgaW4gY29sbGFib3JhdGlvbnMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBieSBEYXRhU3RvcmVCZWhhdmlvclxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJykgJiZcbiAgICAgIGVsZW1lbnQucGFyZW50ICYmXG4gICAgICBpcyhlbGVtZW50LnBhcmVudCwgJ2JwbW46Q29sbGFib3JhdGlvbicpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBhcmVudFNoYXBlID0gZWxlbWVudC5wYXJlbnQ7XG5cbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZWxlbWVudC5idXNpbmVzc09iamVjdCxcbiAgICAgIHBhcmVudEJ1c2luZXNzT2JqZWN0ID0gcGFyZW50U2hhcGUgJiYgcGFyZW50U2hhcGUuYnVzaW5lc3NPYmplY3QsXG4gICAgICBwYXJlbnREaSA9IHBhcmVudEJ1c2luZXNzT2JqZWN0ICYmIHBhcmVudEJ1c2luZXNzT2JqZWN0LmRpO1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpGbG93Tm9kZScpKSB7XG4gICAgdGhpcy51cGRhdGVGbG93Tm9kZVJlZnMoYnVzaW5lc3NPYmplY3QsIHBhcmVudEJ1c2luZXNzT2JqZWN0LCBvbGRQYXJlbnQgJiYgb2xkUGFyZW50LmJ1c2luZXNzT2JqZWN0KTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpEYXRhT3V0cHV0QXNzb2NpYXRpb24nKSkge1xuICAgIGlmIChlbGVtZW50LnNvdXJjZSkge1xuICAgICAgcGFyZW50QnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LnNvdXJjZS5idXNpbmVzc09iamVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50QnVzaW5lc3NPYmplY3QgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbicpKSB7XG4gICAgaWYgKGVsZW1lbnQudGFyZ2V0KSB7XG4gICAgICBwYXJlbnRCdXNpbmVzc09iamVjdCA9IGVsZW1lbnQudGFyZ2V0LmJ1c2luZXNzT2JqZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJlbnRCdXNpbmVzc09iamVjdCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgdGhpcy51cGRhdGVTZW1hbnRpY1BhcmVudChidXNpbmVzc09iamVjdCwgcGFyZW50QnVzaW5lc3NPYmplY3QpO1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJykgJiYgYnVzaW5lc3NPYmplY3QuZGF0YU9iamVjdFJlZikge1xuICAgIHRoaXMudXBkYXRlU2VtYW50aWNQYXJlbnQoYnVzaW5lc3NPYmplY3QuZGF0YU9iamVjdFJlZiwgcGFyZW50QnVzaW5lc3NPYmplY3QpO1xuICB9XG5cbiAgdGhpcy51cGRhdGVEaVBhcmVudChidXNpbmVzc09iamVjdC5kaSwgcGFyZW50RGkpO1xufTtcblxuXG5CcG1uVXBkYXRlci5wcm90b3R5cGUudXBkYXRlQm91bmRzID0gZnVuY3Rpb24oc2hhcGUpIHtcblxuICB2YXIgZGkgPSBzaGFwZS5idXNpbmVzc09iamVjdC5kaTtcblxuICB2YXIgdGFyZ2V0ID0gKHNoYXBlIGluc3RhbmNlb2YgTGFiZWwpID8gdGhpcy5fZ2V0TGFiZWwoZGkpIDogZGk7XG5cbiAgdmFyIGJvdW5kcyA9IHRhcmdldC5ib3VuZHM7XG5cbiAgaWYgKCFib3VuZHMpIHtcbiAgICBib3VuZHMgPSB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGVEaUJvdW5kcygpO1xuICAgIHRhcmdldC5zZXQoJ2JvdW5kcycsIGJvdW5kcyk7XG4gIH1cblxuICBhc3NpZ24oYm91bmRzLCB7XG4gICAgeDogc2hhcGUueCxcbiAgICB5OiBzaGFwZS55LFxuICAgIHdpZHRoOiBzaGFwZS53aWR0aCxcbiAgICBoZWlnaHQ6IHNoYXBlLmhlaWdodFxuICB9KTtcbn07XG5cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVGbG93Tm9kZVJlZnMgPSBmdW5jdGlvbihidXNpbmVzc09iamVjdCwgbmV3Q29udGFpbm1lbnQsIG9sZENvbnRhaW5tZW50KSB7XG5cbiAgaWYgKG9sZENvbnRhaW5tZW50ID09PSBuZXdDb250YWlubWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBvbGRSZWZzLCBuZXdSZWZzO1xuXG4gIGlmIChpcyAob2xkQ29udGFpbm1lbnQsICdicG1uOkxhbmUnKSkge1xuICAgIG9sZFJlZnMgPSBvbGRDb250YWlubWVudC5nZXQoJ2Zsb3dOb2RlUmVmJyk7XG4gICAgY29sbGVjdGlvblJlbW92ZShvbGRSZWZzLCBidXNpbmVzc09iamVjdCk7XG4gIH1cblxuICBpZiAoaXMobmV3Q29udGFpbm1lbnQsICdicG1uOkxhbmUnKSkge1xuICAgIG5ld1JlZnMgPSBuZXdDb250YWlubWVudC5nZXQoJ2Zsb3dOb2RlUmVmJyk7XG4gICAgY29sbGVjdGlvbkFkZChuZXdSZWZzLCBidXNpbmVzc09iamVjdCk7XG4gIH1cbn07XG5cblxuLy8gdXBkYXRlIGV4aXN0aW5nIHNvdXJjZUVsZW1lbnQgYW5kIHRhcmdldEVsZW1lbnQgZGkgaW5mb3JtYXRpb25cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVEaUNvbm5lY3Rpb24gPSBmdW5jdGlvbihkaSwgbmV3U291cmNlLCBuZXdUYXJnZXQpIHtcblxuICBpZiAoZGkuc291cmNlRWxlbWVudCAmJiBkaS5zb3VyY2VFbGVtZW50LmJwbW5FbGVtZW50ICE9PSBuZXdTb3VyY2UpIHtcbiAgICBkaS5zb3VyY2VFbGVtZW50ID0gbmV3U291cmNlICYmIG5ld1NvdXJjZS5kaTtcbiAgfVxuXG4gIGlmIChkaS50YXJnZXRFbGVtZW50ICYmIGRpLnRhcmdldEVsZW1lbnQuYnBtbkVsZW1lbnQgIT09IG5ld1RhcmdldCkge1xuICAgIGRpLnRhcmdldEVsZW1lbnQgPSBuZXdUYXJnZXQgJiYgbmV3VGFyZ2V0LmRpO1xuICB9XG5cbn07XG5cblxuQnBtblVwZGF0ZXIucHJvdG90eXBlLnVwZGF0ZURpUGFyZW50ID0gZnVuY3Rpb24oZGksIHBhcmVudERpKSB7XG5cbiAgaWYgKHBhcmVudERpICYmICFpcyhwYXJlbnREaSwgJ2JwbW5kaTpCUE1OUGxhbmUnKSkge1xuICAgIHBhcmVudERpID0gcGFyZW50RGkuJHBhcmVudDtcbiAgfVxuXG4gIGlmIChkaS4kcGFyZW50ID09PSBwYXJlbnREaSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwbGFuZUVsZW1lbnRzID0gKHBhcmVudERpIHx8IGRpLiRwYXJlbnQpLmdldCgncGxhbmVFbGVtZW50Jyk7XG5cbiAgaWYgKHBhcmVudERpKSB7XG4gICAgcGxhbmVFbGVtZW50cy5wdXNoKGRpKTtcbiAgICBkaS4kcGFyZW50ID0gcGFyZW50RGk7XG4gIH0gZWxzZSB7XG4gICAgY29sbGVjdGlvblJlbW92ZShwbGFuZUVsZW1lbnRzLCBkaSk7XG4gICAgZGkuJHBhcmVudCA9IG51bGw7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldERlZmluaXRpb25zKGVsZW1lbnQpIHtcbiAgd2hpbGUgKGVsZW1lbnQgJiYgIWlzKGVsZW1lbnQsICdicG1uOkRlZmluaXRpb25zJykpIHtcbiAgICBlbGVtZW50ID0gZWxlbWVudC4kcGFyZW50O1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS5nZXRMYW5lU2V0ID0gZnVuY3Rpb24oY29udGFpbmVyKSB7XG5cbiAgdmFyIGxhbmVTZXQsIGxhbmVTZXRzO1xuXG4gIC8vIGJwbW46TGFuZVxuICBpZiAoaXMoY29udGFpbmVyLCAnYnBtbjpMYW5lJykpIHtcbiAgICBsYW5lU2V0ID0gY29udGFpbmVyLmNoaWxkTGFuZVNldDtcblxuICAgIGlmICghbGFuZVNldCkge1xuICAgICAgbGFuZVNldCA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpMYW5lU2V0Jyk7XG4gICAgICBjb250YWluZXIuY2hpbGRMYW5lU2V0ID0gbGFuZVNldDtcbiAgICAgIGxhbmVTZXQuJHBhcmVudCA9IGNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFuZVNldDtcbiAgfVxuXG4gIC8vIGJwbW46UGFydGljaXBhbnRcbiAgaWYgKGlzKGNvbnRhaW5lciwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5wcm9jZXNzUmVmO1xuICB9XG5cbiAgLy8gYnBtbjpGbG93RWxlbWVudHNDb250YWluZXJcbiAgbGFuZVNldHMgPSBjb250YWluZXIuZ2V0KCdsYW5lU2V0cycpO1xuICBsYW5lU2V0ID0gbGFuZVNldHNbMF07XG5cbiAgaWYgKCFsYW5lU2V0KSB7XG4gICAgbGFuZVNldCA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpMYW5lU2V0Jyk7XG4gICAgbGFuZVNldC4kcGFyZW50ID0gY29udGFpbmVyO1xuICAgIGxhbmVTZXRzLnB1c2gobGFuZVNldCk7XG4gIH1cblxuICByZXR1cm4gbGFuZVNldDtcbn07XG5cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVTZW1hbnRpY1BhcmVudCA9IGZ1bmN0aW9uKGJ1c2luZXNzT2JqZWN0LCBuZXdQYXJlbnQsIHZpc3VhbFBhcmVudCkge1xuXG4gIHZhciBjb250YWlubWVudCxcbiAgICAgIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcblxuICBpZiAoYnVzaW5lc3NPYmplY3QuJHBhcmVudCA9PT0gbmV3UGFyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpEYXRhSW5wdXQnKSB8fCBpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RGF0YU91dHB1dCcpKSB7XG5cbiAgICBpZiAoaXMobmV3UGFyZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmICdwcm9jZXNzUmVmJyBpbiBuZXdQYXJlbnQpIHtcbiAgICAgIG5ld1BhcmVudCA9IG5ld1BhcmVudC5wcm9jZXNzUmVmO1xuICAgIH1cblxuICAgIC8vIGFscmVhZHkgaW4gY29ycmVjdCBpb1NwZWNpZmljYXRpb25cbiAgICBpZiAoJ2lvU3BlY2lmaWNhdGlvbicgaW4gbmV3UGFyZW50ICYmIG5ld1BhcmVudC5pb1NwZWNpZmljYXRpb24gPT09IGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkxhbmUnKSkge1xuXG4gICAgaWYgKG5ld1BhcmVudCkge1xuICAgICAgbmV3UGFyZW50ID0gdGhpcy5nZXRMYW5lU2V0KG5ld1BhcmVudCk7XG4gICAgfVxuXG4gICAgY29udGFpbm1lbnQgPSAnbGFuZXMnO1xuICB9IGVsc2VcblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkZsb3dFbGVtZW50JykpIHtcblxuICAgIGlmIChuZXdQYXJlbnQpIHtcblxuICAgICAgaWYgKGlzKG5ld1BhcmVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgICAgICBuZXdQYXJlbnQgPSBuZXdQYXJlbnQucHJvY2Vzc1JlZjtcbiAgICAgIH0gZWxzZVxuXG4gICAgICBpZiAoaXMobmV3UGFyZW50LCAnYnBtbjpMYW5lJykpIHtcbiAgICAgICAgZG8ge1xuXG4gICAgICAgICAgLy8gdW53cmFwIExhbmUgLT4gTGFuZVNldCAtPiAoTGFuZSB8IEZsb3dFbGVtZW50c0NvbnRhaW5lcilcbiAgICAgICAgICBuZXdQYXJlbnQgPSBuZXdQYXJlbnQuJHBhcmVudC4kcGFyZW50O1xuICAgICAgICB9IHdoaWxlIChpcyhuZXdQYXJlbnQsICdicG1uOkxhbmUnKSk7XG5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb250YWlubWVudCA9ICdmbG93RWxlbWVudHMnO1xuXG4gIH0gZWxzZVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46QXJ0aWZhY3QnKSkge1xuXG4gICAgd2hpbGUgKG5ld1BhcmVudCAmJlxuICAgICAgICAgICAhaXMobmV3UGFyZW50LCAnYnBtbjpQcm9jZXNzJykgJiZcbiAgICAgICAgICAgIWlzKG5ld1BhcmVudCwgJ2JwbW46U3ViUHJvY2VzcycpICYmXG4gICAgICAgICAgICFpcyhuZXdQYXJlbnQsICdicG1uOkNvbGxhYm9yYXRpb24nKSkge1xuXG4gICAgICBpZiAoaXMobmV3UGFyZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgICAgIG5ld1BhcmVudCA9IG5ld1BhcmVudC5wcm9jZXNzUmVmO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1BhcmVudCA9IG5ld1BhcmVudC4kcGFyZW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRhaW5tZW50ID0gJ2FydGlmYWN0cyc7XG4gIH0gZWxzZVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46TWVzc2FnZUZsb3cnKSkge1xuICAgIGNvbnRhaW5tZW50ID0gJ21lc3NhZ2VGbG93cyc7XG5cbiAgfSBlbHNlXG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgY29udGFpbm1lbnQgPSAncGFydGljaXBhbnRzJztcblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgcGFydGljaXBhbnRzIHByb2Nlc3MgaXMgcHJvcGVybHkgYXR0YWNoZWQgLyBkZXRhY2hlZFxuICAgIC8vIGZyb20gdGhlIFhNTCBkb2N1bWVudFxuXG4gICAgdmFyIHByb2Nlc3MgPSBidXNpbmVzc09iamVjdC5wcm9jZXNzUmVmLFxuICAgICAgICBkZWZpbml0aW9ucztcblxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBkZWZpbml0aW9ucyA9IGdldERlZmluaXRpb25zKGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQgfHwgbmV3UGFyZW50KTtcblxuICAgICAgaWYgKGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQpIHtcbiAgICAgICAgY29sbGVjdGlvblJlbW92ZShkZWZpbml0aW9ucy5nZXQoJ3Jvb3RFbGVtZW50cycpLCBwcm9jZXNzKTtcbiAgICAgICAgcHJvY2Vzcy4kcGFyZW50ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1BhcmVudCkge1xuICAgICAgICBjb2xsZWN0aW9uQWRkKGRlZmluaXRpb25zLmdldCgncm9vdEVsZW1lbnRzJyksIHByb2Nlc3MpO1xuICAgICAgICBwcm9jZXNzLiRwYXJlbnQgPSBkZWZpbml0aW9ucztcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RGF0YU91dHB1dEFzc29jaWF0aW9uJykpIHtcbiAgICBjb250YWlubWVudCA9ICdkYXRhT3V0cHV0QXNzb2NpYXRpb25zJztcbiAgfSBlbHNlXG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbicpKSB7XG4gICAgY29udGFpbm1lbnQgPSAnZGF0YUlucHV0QXNzb2NpYXRpb25zJztcbiAgfVxuXG4gIGlmICghY29udGFpbm1lbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKFxuICAgICAgJ25vIHBhcmVudCBmb3Ige2VsZW1lbnR9IGluIHtwYXJlbnR9JyxcbiAgICAgIHtcbiAgICAgICAgZWxlbWVudDogYnVzaW5lc3NPYmplY3QuaWQsXG4gICAgICAgIHBhcmVudDogbmV3UGFyZW50LmlkXG4gICAgICB9XG4gICAgKSk7XG4gIH1cblxuICB2YXIgY2hpbGRyZW47XG5cbiAgaWYgKGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQpIHtcblxuICAgIC8vIHJlbW92ZSBmcm9tIG9sZCBwYXJlbnRcbiAgICBjaGlsZHJlbiA9IGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQuZ2V0KGNvbnRhaW5tZW50KTtcbiAgICBjb2xsZWN0aW9uUmVtb3ZlKGNoaWxkcmVuLCBidXNpbmVzc09iamVjdCk7XG4gIH1cblxuICBpZiAoIW5ld1BhcmVudCkge1xuICAgIGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQgPSBudWxsO1xuICB9IGVsc2Uge1xuXG4gICAgLy8gYWRkIHRvIG5ldyBwYXJlbnRcbiAgICBjaGlsZHJlbiA9IG5ld1BhcmVudC5nZXQoY29udGFpbm1lbnQpO1xuICAgIGNoaWxkcmVuLnB1c2goYnVzaW5lc3NPYmplY3QpO1xuICAgIGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQgPSBuZXdQYXJlbnQ7XG4gIH1cblxuICBpZiAodmlzdWFsUGFyZW50KSB7XG4gICAgdmFyIGRpQ2hpbGRyZW4gPSB2aXN1YWxQYXJlbnQuZ2V0KGNvbnRhaW5tZW50KTtcblxuICAgIGNvbGxlY3Rpb25SZW1vdmUoY2hpbGRyZW4sIGJ1c2luZXNzT2JqZWN0KTtcblxuICAgIGlmIChuZXdQYXJlbnQpIHtcblxuICAgICAgaWYgKCFkaUNoaWxkcmVuKSB7XG4gICAgICAgIGRpQ2hpbGRyZW4gPSBbXTtcbiAgICAgICAgbmV3UGFyZW50LnNldChjb250YWlubWVudCwgZGlDaGlsZHJlbik7XG4gICAgICB9XG5cbiAgICAgIGRpQ2hpbGRyZW4ucHVzaChidXNpbmVzc09iamVjdCk7XG4gICAgfVxuICB9XG59O1xuXG5cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVDb25uZWN0aW9uV2F5cG9pbnRzID0gZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICBjb25uZWN0aW9uLmJ1c2luZXNzT2JqZWN0LmRpLnNldCgnd2F5cG9pbnQnLCB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGVEaVdheXBvaW50cyhjb25uZWN0aW9uLndheXBvaW50cykpO1xufTtcblxuXG5CcG1uVXBkYXRlci5wcm90b3R5cGUudXBkYXRlQ29ubmVjdGlvbiA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoY29ubmVjdGlvbiksXG4gICAgICBuZXdTb3VyY2UgPSBnZXRCdXNpbmVzc09iamVjdChjb25uZWN0aW9uLnNvdXJjZSksXG4gICAgICBuZXdUYXJnZXQgPSBnZXRCdXNpbmVzc09iamVjdChjb25uZWN0aW9uLnRhcmdldCksXG4gICAgICB2aXN1YWxQYXJlbnQ7XG5cbiAgaWYgKCFpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RGF0YUFzc29jaWF0aW9uJykpIHtcblxuICAgIHZhciBpbnZlcnNlU2V0ID0gaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOlNlcXVlbmNlRmxvdycpO1xuXG4gICAgaWYgKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiAhPT0gbmV3U291cmNlKSB7XG4gICAgICBpZiAoaW52ZXJzZVNldCkge1xuICAgICAgICBjb2xsZWN0aW9uUmVtb3ZlKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiAmJiBidXNpbmVzc09iamVjdC5zb3VyY2VSZWYuZ2V0KCdvdXRnb2luZycpLCBidXNpbmVzc09iamVjdCk7XG5cbiAgICAgICAgaWYgKG5ld1NvdXJjZSAmJiBuZXdTb3VyY2UuZ2V0KCdvdXRnb2luZycpKSB7XG4gICAgICAgICAgbmV3U291cmNlLmdldCgnb3V0Z29pbmcnKS5wdXNoKGJ1c2luZXNzT2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBidXNpbmVzc09iamVjdC5zb3VyY2VSZWYgPSBuZXdTb3VyY2U7XG4gICAgfVxuXG4gICAgaWYgKGJ1c2luZXNzT2JqZWN0LnRhcmdldFJlZiAhPT0gbmV3VGFyZ2V0KSB7XG4gICAgICBpZiAoaW52ZXJzZVNldCkge1xuICAgICAgICBjb2xsZWN0aW9uUmVtb3ZlKGJ1c2luZXNzT2JqZWN0LnRhcmdldFJlZiAmJiBidXNpbmVzc09iamVjdC50YXJnZXRSZWYuZ2V0KCdpbmNvbWluZycpLCBidXNpbmVzc09iamVjdCk7XG5cbiAgICAgICAgaWYgKG5ld1RhcmdldCAmJiBuZXdUYXJnZXQuZ2V0KCdpbmNvbWluZycpKSB7XG4gICAgICAgICAgbmV3VGFyZ2V0LmdldCgnaW5jb21pbmcnKS5wdXNoKGJ1c2luZXNzT2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBidXNpbmVzc09iamVjdC50YXJnZXRSZWYgPSBuZXdUYXJnZXQ7XG4gICAgfVxuICB9IGVsc2VcblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkRhdGFJbnB1dEFzc29jaWF0aW9uJykpIHtcblxuICAgIC8vIGhhbmRsZSBvYm5veGlvdXMgaXNNc29tZSBzb3VyY2VSZWZcbiAgICBidXNpbmVzc09iamVjdC5nZXQoJ3NvdXJjZVJlZicpWzBdID0gbmV3U291cmNlO1xuXG4gICAgdmlzdWFsUGFyZW50ID0gY29udGV4dC5wYXJlbnQgfHwgY29udGV4dC5uZXdQYXJlbnQgfHwgbmV3VGFyZ2V0O1xuXG4gICAgdGhpcy51cGRhdGVTZW1hbnRpY1BhcmVudChidXNpbmVzc09iamVjdCwgbmV3VGFyZ2V0LCB2aXN1YWxQYXJlbnQpO1xuICB9IGVsc2VcblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkRhdGFPdXRwdXRBc3NvY2lhdGlvbicpKSB7XG4gICAgdmlzdWFsUGFyZW50ID0gY29udGV4dC5wYXJlbnQgfHwgY29udGV4dC5uZXdQYXJlbnQgfHwgbmV3U291cmNlO1xuXG4gICAgdGhpcy51cGRhdGVTZW1hbnRpY1BhcmVudChidXNpbmVzc09iamVjdCwgbmV3U291cmNlLCB2aXN1YWxQYXJlbnQpO1xuXG4gICAgLy8gdGFyZ2V0UmVmID0gbmV3IHRhcmdldFxuICAgIGJ1c2luZXNzT2JqZWN0LnRhcmdldFJlZiA9IG5ld1RhcmdldDtcbiAgfVxuXG4gIHRoaXMudXBkYXRlQ29ubmVjdGlvbldheXBvaW50cyhjb25uZWN0aW9uKTtcblxuICB0aGlzLnVwZGF0ZURpQ29ubmVjdGlvbihidXNpbmVzc09iamVjdC5kaSwgbmV3U291cmNlLCBuZXdUYXJnZXQpO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuQnBtblVwZGF0ZXIucHJvdG90eXBlLl9nZXRMYWJlbCA9IGZ1bmN0aW9uKGRpKSB7XG4gIGlmICghZGkubGFiZWwpIHtcbiAgICBkaS5sYWJlbCA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZURpTGFiZWwoKTtcbiAgfVxuXG4gIHJldHVybiBkaS5sYWJlbDtcbn07XG5cblxuLyoqXG4gKiBNYWtlIHN1cmUgdGhlIGV2ZW50IGxpc3RlbmVyIGlzIG9ubHkgY2FsbGVkXG4gKiBpZiB0aGUgdG91Y2hlZCBlbGVtZW50IGlzIGEgQlBNTiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7RnVuY3Rpb259IGd1YXJkZWQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gaWZCcG1uKGZuKSB7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LnNoYXBlIHx8IGNvbnRleHQuY29ubmVjdGlvbjtcblxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpCYXNlRWxlbWVudCcpKSB7XG4gICAgICBmbihldmVudCk7XG4gICAgfVxuICB9O1xufVxuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBpc09iamVjdFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0V4cGFuZGVkXG59IGZyb20gJy4uLy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IEJhc2VFbGVtZW50RmFjdG9yeSBmcm9tICdkaWFncmFtLWpzL2xpYi9jb3JlL0VsZW1lbnRGYWN0b3J5JztcblxuaW1wb3J0IHtcbiAgREVGQVVMVF9MQUJFTF9TSVpFXG59IGZyb20gJy4uLy4uL3V0aWwvTGFiZWxVdGlsJztcblxuXG4vKipcbiAqIEEgYnBtbi1hd2FyZSBmYWN0b3J5IGZvciBkaWFncmFtLWpzIHNoYXBlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFbGVtZW50RmFjdG9yeShicG1uRmFjdG9yeSwgbW9kZGxlLCB0cmFuc2xhdGUpIHtcbiAgQmFzZUVsZW1lbnRGYWN0b3J5LmNhbGwodGhpcyk7XG5cbiAgdGhpcy5fYnBtbkZhY3RvcnkgPSBicG1uRmFjdG9yeTtcbiAgdGhpcy5fbW9kZGxlID0gbW9kZGxlO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG59XG5cbmluaGVyaXRzKEVsZW1lbnRGYWN0b3J5LCBCYXNlRWxlbWVudEZhY3RvcnkpO1xuXG5FbGVtZW50RmFjdG9yeS4kaW5qZWN0ID0gW1xuICAnYnBtbkZhY3RvcnknLFxuICAnbW9kZGxlJyxcbiAgJ3RyYW5zbGF0ZSdcbl07XG5cbkVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5iYXNlQ3JlYXRlID0gQmFzZUVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGU7XG5cbkVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbihlbGVtZW50VHlwZSwgYXR0cnMpIHtcblxuICAvLyBubyBzcGVjaWFsIG1hZ2ljIGZvciBsYWJlbHMsXG4gIC8vIHdlIGFzc3VtZSB0aGVpciBidXNpbmVzc09iamVjdHMgaGF2ZSBhbHJlYWR5IGJlZW4gY3JlYXRlZFxuICAvLyBhbmQgd2lyZWQgdmlhIGF0dHJzXG4gIGlmIChlbGVtZW50VHlwZSA9PT0gJ2xhYmVsJykge1xuICAgIHJldHVybiB0aGlzLmJhc2VDcmVhdGUoZWxlbWVudFR5cGUsIGFzc2lnbih7IHR5cGU6ICdsYWJlbCcgfSwgREVGQVVMVF9MQUJFTF9TSVpFLCBhdHRycykpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuY3JlYXRlQnBtbkVsZW1lbnQoZWxlbWVudFR5cGUsIGF0dHJzKTtcbn07XG5cbkVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVCcG1uRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnRUeXBlLCBhdHRycykge1xuICB2YXIgc2l6ZSxcbiAgICAgIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcblxuICBhdHRycyA9IGF0dHJzIHx8IHt9O1xuXG4gIHZhciBidXNpbmVzc09iamVjdCA9IGF0dHJzLmJ1c2luZXNzT2JqZWN0O1xuXG4gIGlmICghYnVzaW5lc3NPYmplY3QpIHtcbiAgICBpZiAoIWF0dHJzLnR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ25vIHNoYXBlIHR5cGUgc3BlY2lmaWVkJykpO1xuICAgIH1cblxuICAgIGJ1c2luZXNzT2JqZWN0ID0gdGhpcy5fYnBtbkZhY3RvcnkuY3JlYXRlKGF0dHJzLnR5cGUpO1xuICB9XG5cbiAgaWYgKCFidXNpbmVzc09iamVjdC5kaSkge1xuICAgIGlmIChlbGVtZW50VHlwZSA9PT0gJ3Jvb3QnKSB7XG4gICAgICBidXNpbmVzc09iamVjdC5kaSA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZURpUGxhbmUoYnVzaW5lc3NPYmplY3QsIFtdLCB7XG4gICAgICAgIGlkOiBidXNpbmVzc09iamVjdC5pZCArICdfZGknXG4gICAgICB9KTtcbiAgICB9IGVsc2VcbiAgICBpZiAoZWxlbWVudFR5cGUgPT09ICdjb25uZWN0aW9uJykge1xuICAgICAgYnVzaW5lc3NPYmplY3QuZGkgPSB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGVEaUVkZ2UoYnVzaW5lc3NPYmplY3QsIFtdLCB7XG4gICAgICAgIGlkOiBidXNpbmVzc09iamVjdC5pZCArICdfZGknXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVzaW5lc3NPYmplY3QuZGkgPSB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGVEaVNoYXBlKGJ1c2luZXNzT2JqZWN0LCB7fSwge1xuICAgICAgICBpZDogYnVzaW5lc3NPYmplY3QuaWQgKyAnX2RpJ1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpHcm91cCcpKSB7XG4gICAgYXR0cnMgPSBhc3NpZ24oe1xuICAgICAgaXNGcmFtZTogdHJ1ZVxuICAgIH0sIGF0dHJzKTtcbiAgfVxuXG4gIGlmIChhdHRycy5kaSkge1xuICAgIGFzc2lnbihidXNpbmVzc09iamVjdC5kaSwgYXR0cnMuZGkpO1xuXG4gICAgZGVsZXRlIGF0dHJzLmRpO1xuICB9XG5cbiAgYXBwbHlBdHRyaWJ1dGVzKGJ1c2luZXNzT2JqZWN0LCBhdHRycywgW1xuICAgICdwcm9jZXNzUmVmJyxcbiAgICAnaXNJbnRlcnJ1cHRpbmcnLFxuICAgICdhc3NvY2lhdGlvbkRpcmVjdGlvbicsXG4gICAgJ2lzRm9yQ29tcGVuc2F0aW9uJ1xuICBdKTtcblxuICBpZiAoYXR0cnMuaXNFeHBhbmRlZCkge1xuICAgIGFwcGx5QXR0cmlidXRlKGJ1c2luZXNzT2JqZWN0LmRpLCBhdHRycywgJ2lzRXhwYW5kZWQnKTtcbiAgfVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheScpKSB7XG4gICAgYnVzaW5lc3NPYmplY3QuZGkuaXNNYXJrZXJWaXNpYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBldmVudERlZmluaXRpb25zLFxuICAgICAgbmV3RXZlbnREZWZpbml0aW9uO1xuXG4gIGlmIChhdHRycy5ldmVudERlZmluaXRpb25UeXBlKSB7XG4gICAgZXZlbnREZWZpbml0aW9ucyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXZlbnREZWZpbml0aW9ucycpIHx8IFtdO1xuICAgIG5ld0V2ZW50RGVmaW5pdGlvbiA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZShhdHRycy5ldmVudERlZmluaXRpb25UeXBlLCBhdHRycy5ldmVudERlZmluaXRpb25BdHRycyk7XG5cbiAgICBpZiAoYXR0cnMuZXZlbnREZWZpbml0aW9uVHlwZSA9PT0gJ2JwbW46Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nKSB7XG4gICAgICBuZXdFdmVudERlZmluaXRpb24uY29uZGl0aW9uID0gdGhpcy5fYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkZvcm1hbEV4cHJlc3Npb24nKTtcbiAgICB9XG5cbiAgICBldmVudERlZmluaXRpb25zLnB1c2gobmV3RXZlbnREZWZpbml0aW9uKTtcblxuICAgIG5ld0V2ZW50RGVmaW5pdGlvbi4kcGFyZW50ID0gYnVzaW5lc3NPYmplY3Q7XG4gICAgYnVzaW5lc3NPYmplY3QuZXZlbnREZWZpbml0aW9ucyA9IGV2ZW50RGVmaW5pdGlvbnM7XG5cbiAgICBkZWxldGUgYXR0cnMuZXZlbnREZWZpbml0aW9uVHlwZTtcbiAgfVxuXG4gIHNpemUgPSB0aGlzLl9nZXREZWZhdWx0U2l6ZShidXNpbmVzc09iamVjdCk7XG5cbiAgYXR0cnMgPSBhc3NpZ24oe1xuICAgIGJ1c2luZXNzT2JqZWN0OiBidXNpbmVzc09iamVjdCxcbiAgICBpZDogYnVzaW5lc3NPYmplY3QuaWRcbiAgfSwgc2l6ZSwgYXR0cnMpO1xuXG4gIHJldHVybiB0aGlzLmJhc2VDcmVhdGUoZWxlbWVudFR5cGUsIGF0dHJzKTtcbn07XG5cblxuRWxlbWVudEZhY3RvcnkucHJvdG90eXBlLl9nZXREZWZhdWx0U2l6ZSA9IGZ1bmN0aW9uKHNlbWFudGljKSB7XG5cbiAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcblxuICAgIGlmIChpc0V4cGFuZGVkKHNlbWFudGljKSkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6IDM1MCwgaGVpZ2h0OiAyMDAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6IDEwMCwgaGVpZ2h0OiA4MCB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46VGFzaycpKSB7XG4gICAgcmV0dXJuIHsgd2lkdGg6IDEwMCwgaGVpZ2h0OiA4MCB9O1xuICB9XG5cbiAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpHYXRld2F5JykpIHtcbiAgICByZXR1cm4geyB3aWR0aDogNTAsIGhlaWdodDogNTAgfTtcbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46RXZlbnQnKSkge1xuICAgIHJldHVybiB7IHdpZHRoOiAzNiwgaGVpZ2h0OiAzNiB9O1xuICB9XG5cbiAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgaWYgKGlzRXhwYW5kZWQoc2VtYW50aWMpKSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogNjAwLCBoZWlnaHQ6IDI1MCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogNDAwLCBoZWlnaHQ6IDYwIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpMYW5lJykpIHtcbiAgICByZXR1cm4geyB3aWR0aDogNDAwLCBoZWlnaHQ6IDEwMCB9O1xuICB9XG5cbiAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJykpIHtcbiAgICByZXR1cm4geyB3aWR0aDogMzYsIGhlaWdodDogNTAgfTtcbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJykpIHtcbiAgICByZXR1cm4geyB3aWR0aDogNTAsIGhlaWdodDogNTAgfTtcbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgIHJldHVybiB7IHdpZHRoOiAxMDAsIGhlaWdodDogMzAgfTtcbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46R3JvdXAnKSkge1xuICAgIHJldHVybiB7IHdpZHRoOiAzMDAsIGhlaWdodDogMzAwIH07XG4gIH1cblxuICByZXR1cm4geyB3aWR0aDogMTAwLCBoZWlnaHQ6IDgwIH07XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlIHBhcnRpY2lwYW50LlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3R9IFthdHRyc10gYXR0cnNcbiAqXG4gKiBAcmV0dXJucyB7ZGpzLm1vZGVsLlNoYXBlfVxuICovXG5FbGVtZW50RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlUGFydGljaXBhbnRTaGFwZSA9IGZ1bmN0aW9uKGF0dHJzKSB7XG5cbiAgaWYgKCFpc09iamVjdChhdHRycykpIHtcbiAgICBhdHRycyA9IHsgaXNFeHBhbmRlZDogYXR0cnMgfTtcbiAgfVxuXG4gIGF0dHJzID0gYXNzaWduKHsgdHlwZTogJ2JwbW46UGFydGljaXBhbnQnIH0sIGF0dHJzIHx8IHt9KTtcblxuICAvLyBwYXJ0aWNpcGFudHMgYXJlIGV4cGFuZGVkIGJ5IGRlZmF1bHRcbiAgaWYgKGF0dHJzLmlzRXhwYW5kZWQgIT09IGZhbHNlKSB7XG4gICAgYXR0cnMucHJvY2Vzc1JlZiA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpQcm9jZXNzJyk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5jcmVhdGVTaGFwZShhdHRycyk7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIEFwcGx5IGF0dHJpYnV0ZXMgZnJvbSBhIG1hcCB0byB0aGUgZ2l2ZW4gZWxlbWVudCxcbiAqIHJlbW92ZSBhdHRyaWJ1dGUgZnJvbSB0aGUgbWFwIG9uIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSB7QmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IGF0dHJzIChpbi9vdXQgbWFwIG9mIGF0dHJpYnV0ZXMpXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGF0dHJpYnV0ZU5hbWVzIG5hbWUgb2YgYXR0cmlidXRlcyB0byBhcHBseVxuICovXG5mdW5jdGlvbiBhcHBseUF0dHJpYnV0ZXMoZWxlbWVudCwgYXR0cnMsIGF0dHJpYnV0ZU5hbWVzKSB7XG5cbiAgZm9yRWFjaChhdHRyaWJ1dGVOYW1lcywgZnVuY3Rpb24ocHJvcGVydHkpIHtcbiAgICBpZiAoYXR0cnNbcHJvcGVydHldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFwcGx5QXR0cmlidXRlKGVsZW1lbnQsIGF0dHJzLCBwcm9wZXJ0eSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBBcHBseSBuYW1lZCBwcm9wZXJ0eSB0byBlbGVtZW50IGFuZCBkcmFpbiBpdCBmcm9tIHRoZSBhdHRyc1xuICogY29sbGVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Jhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBhdHRycyAoaW4vb3V0IG1hcCBvZiBhdHRyaWJ1dGVzKVxuICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZU5hbWUgdG8gYXBwbHlcbiAqL1xuZnVuY3Rpb24gYXBwbHlBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cnMsIGF0dHJpYnV0ZU5hbWUpIHtcbiAgZWxlbWVudFthdHRyaWJ1dGVOYW1lXSA9IGF0dHJzW2F0dHJpYnV0ZU5hbWVdO1xuXG4gIGRlbGV0ZSBhdHRyc1thdHRyaWJ1dGVOYW1lXTtcbn0iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQmFzZU1vZGVsaW5nIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL01vZGVsaW5nJztcblxuaW1wb3J0IFVwZGF0ZVByb3BlcnRpZXNIYW5kbGVyIGZyb20gJy4vY21kL1VwZGF0ZVByb3BlcnRpZXNIYW5kbGVyJztcbmltcG9ydCBVcGRhdGVDYW52YXNSb290SGFuZGxlciBmcm9tICcuL2NtZC9VcGRhdGVDYW52YXNSb290SGFuZGxlcic7XG5pbXBvcnQgQWRkTGFuZUhhbmRsZXIgZnJvbSAnLi9jbWQvQWRkTGFuZUhhbmRsZXInO1xuaW1wb3J0IFNwbGl0TGFuZUhhbmRsZXIgZnJvbSAnLi9jbWQvU3BsaXRMYW5lSGFuZGxlcic7XG5pbXBvcnQgUmVzaXplTGFuZUhhbmRsZXIgZnJvbSAnLi9jbWQvUmVzaXplTGFuZUhhbmRsZXInO1xuaW1wb3J0IFVwZGF0ZUZsb3dOb2RlUmVmc0hhbmRsZXIgZnJvbSAnLi9jbWQvVXBkYXRlRmxvd05vZGVSZWZzSGFuZGxlcic7XG5pbXBvcnQgSWRDbGFpbUhhbmRsZXIgZnJvbSAnLi9jbWQvSWRDbGFpbUhhbmRsZXInO1xuaW1wb3J0IFNldENvbG9ySGFuZGxlciBmcm9tICcuL2NtZC9TZXRDb2xvckhhbmRsZXInO1xuXG5pbXBvcnQgVXBkYXRlTGFiZWxIYW5kbGVyIGZyb20gJy4uL2xhYmVsLWVkaXRpbmcvY21kL1VwZGF0ZUxhYmVsSGFuZGxlcic7XG5cblxuLyoqXG4gKiBCUE1OIDIuMCBtb2RlbGluZyBmZWF0dXJlcyBhY3RpdmF0b3JcbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtFbGVtZW50RmFjdG9yeX0gZWxlbWVudEZhY3RvcnlcbiAqIEBwYXJhbSB7Q29tbWFuZFN0YWNrfSBjb21tYW5kU3RhY2tcbiAqIEBwYXJhbSB7QnBtblJ1bGVzfSBicG1uUnVsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW9kZWxpbmcoXG4gICAgZXZlbnRCdXMsIGVsZW1lbnRGYWN0b3J5LCBjb21tYW5kU3RhY2ssXG4gICAgYnBtblJ1bGVzKSB7XG5cbiAgQmFzZU1vZGVsaW5nLmNhbGwodGhpcywgZXZlbnRCdXMsIGVsZW1lbnRGYWN0b3J5LCBjb21tYW5kU3RhY2spO1xuXG4gIHRoaXMuX2JwbW5SdWxlcyA9IGJwbW5SdWxlcztcbn1cblxuaW5oZXJpdHMoTW9kZWxpbmcsIEJhc2VNb2RlbGluZyk7XG5cbk1vZGVsaW5nLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdlbGVtZW50RmFjdG9yeScsXG4gICdjb21tYW5kU3RhY2snLFxuICAnYnBtblJ1bGVzJ1xuXTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUuZ2V0SGFuZGxlcnMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhhbmRsZXJzID0gQmFzZU1vZGVsaW5nLnByb3RvdHlwZS5nZXRIYW5kbGVycy5jYWxsKHRoaXMpO1xuXG4gIGhhbmRsZXJzWydlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnXSA9IFVwZGF0ZVByb3BlcnRpZXNIYW5kbGVyO1xuICBoYW5kbGVyc1snY2FudmFzLnVwZGF0ZVJvb3QnXSA9IFVwZGF0ZUNhbnZhc1Jvb3RIYW5kbGVyO1xuICBoYW5kbGVyc1snbGFuZS5hZGQnXSA9IEFkZExhbmVIYW5kbGVyO1xuICBoYW5kbGVyc1snbGFuZS5yZXNpemUnXSA9IFJlc2l6ZUxhbmVIYW5kbGVyO1xuICBoYW5kbGVyc1snbGFuZS5zcGxpdCddID0gU3BsaXRMYW5lSGFuZGxlcjtcbiAgaGFuZGxlcnNbJ2xhbmUudXBkYXRlUmVmcyddID0gVXBkYXRlRmxvd05vZGVSZWZzSGFuZGxlcjtcbiAgaGFuZGxlcnNbJ2lkLnVwZGF0ZUNsYWltJ10gPSBJZENsYWltSGFuZGxlcjtcbiAgaGFuZGxlcnNbJ2VsZW1lbnQuc2V0Q29sb3InXSA9IFNldENvbG9ySGFuZGxlcjtcbiAgaGFuZGxlcnNbJ2VsZW1lbnQudXBkYXRlTGFiZWwnXSA9IFVwZGF0ZUxhYmVsSGFuZGxlcjtcblxuICByZXR1cm4gaGFuZGxlcnM7XG59O1xuXG5cbk1vZGVsaW5nLnByb3RvdHlwZS51cGRhdGVMYWJlbCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5ld0xhYmVsLCBuZXdCb3VuZHMsIGhpbnRzKSB7XG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZUxhYmVsJywge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgbmV3TGFiZWw6IG5ld0xhYmVsLFxuICAgIG5ld0JvdW5kczogbmV3Qm91bmRzLFxuICAgIGhpbnRzOiBoaW50cyB8fCB7fVxuICB9KTtcbn07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbihzb3VyY2UsIHRhcmdldCwgYXR0cnMsIGhpbnRzKSB7XG5cbiAgdmFyIGJwbW5SdWxlcyA9IHRoaXMuX2JwbW5SdWxlcztcblxuICBpZiAoIWF0dHJzKSB7XG4gICAgYXR0cnMgPSBicG1uUnVsZXMuY2FuQ29ubmVjdChzb3VyY2UsIHRhcmdldCk7XG4gIH1cblxuICBpZiAoIWF0dHJzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuY3JlYXRlQ29ubmVjdGlvbihzb3VyY2UsIHRhcmdldCwgYXR0cnMsIHNvdXJjZS5wYXJlbnQsIGhpbnRzKTtcbn07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLnVwZGF0ZVByb3BlcnRpZXMgPSBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0aWVzKSB7XG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLCB7XG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzXG4gIH0pO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLnJlc2l6ZUxhbmUgPSBmdW5jdGlvbihsYW5lU2hhcGUsIG5ld0JvdW5kcywgYmFsYW5jZWQpIHtcbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2xhbmUucmVzaXplJywge1xuICAgIHNoYXBlOiBsYW5lU2hhcGUsXG4gICAgbmV3Qm91bmRzOiBuZXdCb3VuZHMsXG4gICAgYmFsYW5jZWQ6IGJhbGFuY2VkXG4gIH0pO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLmFkZExhbmUgPSBmdW5jdGlvbih0YXJnZXRMYW5lU2hhcGUsIGxvY2F0aW9uKSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIHNoYXBlOiB0YXJnZXRMYW5lU2hhcGUsXG4gICAgbG9jYXRpb246IGxvY2F0aW9uXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2xhbmUuYWRkJywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbnRleHQubmV3TGFuZTtcbn07XG5cbk1vZGVsaW5nLnByb3RvdHlwZS5zcGxpdExhbmUgPSBmdW5jdGlvbih0YXJnZXRMYW5lLCBjb3VudCkge1xuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnbGFuZS5zcGxpdCcsIHtcbiAgICBzaGFwZTogdGFyZ2V0TGFuZSxcbiAgICBjb3VudDogY291bnRcbiAgfSk7XG59O1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgY3VycmVudCBkaWFncmFtIGludG8gYSBjb2xsYWJvcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge2Rqcy5tb2RlbC5Sb290fSB0aGUgbmV3IHJvb3QgZWxlbWVudFxuICovXG5Nb2RlbGluZy5wcm90b3R5cGUubWFrZUNvbGxhYm9yYXRpb24gPSBmdW5jdGlvbigpIHtcblxuICB2YXIgY29sbGFib3JhdGlvbkVsZW1lbnQgPSB0aGlzLl9jcmVhdGUoJ3Jvb3QnLCB7XG4gICAgdHlwZTogJ2JwbW46Q29sbGFib3JhdGlvbidcbiAgfSk7XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgbmV3Um9vdDogY29sbGFib3JhdGlvbkVsZW1lbnRcbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnY2FudmFzLnVwZGF0ZVJvb3QnLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29sbGFib3JhdGlvbkVsZW1lbnQ7XG59O1xuXG5Nb2RlbGluZy5wcm90b3R5cGUudXBkYXRlTGFuZVJlZnMgPSBmdW5jdGlvbihmbG93Tm9kZVNoYXBlcywgbGFuZVNoYXBlcykge1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdsYW5lLnVwZGF0ZVJlZnMnLCB7XG4gICAgZmxvd05vZGVTaGFwZXM6IGZsb3dOb2RlU2hhcGVzLFxuICAgIGxhbmVTaGFwZXM6IGxhbmVTaGFwZXNcbiAgfSk7XG59O1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgY3VycmVudCBkaWFncmFtIGludG8gYSBwcm9jZXNzLlxuICpcbiAqIEByZXR1cm4ge2Rqcy5tb2RlbC5Sb290fSB0aGUgbmV3IHJvb3QgZWxlbWVudFxuICovXG5Nb2RlbGluZy5wcm90b3R5cGUubWFrZVByb2Nlc3MgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgcHJvY2Vzc0VsZW1lbnQgPSB0aGlzLl9jcmVhdGUoJ3Jvb3QnLCB7XG4gICAgdHlwZTogJ2JwbW46UHJvY2VzcydcbiAgfSk7XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgbmV3Um9vdDogcHJvY2Vzc0VsZW1lbnRcbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnY2FudmFzLnVwZGF0ZVJvb3QnLCBjb250ZXh0KTtcbn07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLmNsYWltSWQgPSBmdW5jdGlvbihpZCwgbW9kZGxlRWxlbWVudCkge1xuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnaWQudXBkYXRlQ2xhaW0nLCB7XG4gICAgaWQ6IGlkLFxuICAgIGVsZW1lbnQ6IG1vZGRsZUVsZW1lbnQsXG4gICAgY2xhaW1pbmc6IHRydWVcbiAgfSk7XG59O1xuXG5cbk1vZGVsaW5nLnByb3RvdHlwZS51bmNsYWltSWQgPSBmdW5jdGlvbihpZCwgbW9kZGxlRWxlbWVudCkge1xuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnaWQudXBkYXRlQ2xhaW0nLCB7XG4gICAgaWQ6IGlkLFxuICAgIGVsZW1lbnQ6IG1vZGRsZUVsZW1lbnRcbiAgfSk7XG59O1xuXG5Nb2RlbGluZy5wcm90b3R5cGUuc2V0Q29sb3IgPSBmdW5jdGlvbihlbGVtZW50cywgY29sb3JzKSB7XG4gIGlmICghZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgZWxlbWVudHMgPSBbIGVsZW1lbnRzIF07XG4gIH1cblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC5zZXRDb2xvcicsIHtcbiAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgY29sb3JzOiBjb2xvcnNcbiAgfSk7XG59O1xuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHtcbiAgZ2V0T3JpZW50YXRpb24sXG4gIGdldE1pZCxcbiAgYXNUUkJMXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgc3Vic3RyYWN0XG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvTWF0aCc7XG5cbmltcG9ydCB7XG4gIGhhc0V4dGVybmFsTGFiZWxcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxudmFyIEFMSUdOTUVOVFMgPSBbXG4gICd0b3AnLFxuICAnYm90dG9tJyxcbiAgJ2xlZnQnLFxuICAncmlnaHQnXG5dO1xuXG52YXIgRUxFTUVOVF9MQUJFTF9ESVNUQU5DRSA9IDEwO1xuXG4vKipcbiAqIEEgY29tcG9uZW50IHRoYXQgbWFrZXMgc3VyZSB0aGF0IGV4dGVybmFsIGxhYmVscyBhcmUgYWRkZWRcbiAqIHRvZ2V0aGVyIHdpdGggcmVzcGVjdGl2ZSBlbGVtZW50cyBhbmQgcHJvcGVybHkgdXBkYXRlZCAoREkgd2lzZSlcbiAqIGR1cmluZyBtb3ZlLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvcihldmVudEJ1cywgbW9kZWxpbmcpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoW1xuICAgICdjb25uZWN0aW9uLmNyZWF0ZScsXG4gICAgJ2Nvbm5lY3Rpb24ubGF5b3V0JyxcbiAgICAnY29ubmVjdGlvbi51cGRhdGVXYXlwb2ludHMnXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBzb3VyY2UgPSBjb25uZWN0aW9uLnNvdXJjZSxcbiAgICAgICAgdGFyZ2V0ID0gY29ubmVjdGlvbi50YXJnZXQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICAgIGlmIChoaW50cy5jcmVhdGVFbGVtZW50c0JlaGF2aW9yICE9PSBmYWxzZSkge1xuICAgICAgY2hlY2tMYWJlbEFkanVzdG1lbnQoc291cmNlKTtcbiAgICAgIGNoZWNrTGFiZWxBZGp1c3RtZW50KHRhcmdldCk7XG4gICAgfVxuICB9KTtcblxuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFtcbiAgICAnbGFiZWwuY3JlYXRlJ1xuICBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge307XG5cbiAgICBpZiAoaGludHMuY3JlYXRlRWxlbWVudHNCZWhhdmlvciAhPT0gZmFsc2UpIHtcbiAgICAgIGNoZWNrTGFiZWxBZGp1c3RtZW50KHNoYXBlLmxhYmVsVGFyZ2V0KTtcbiAgICB9XG4gIH0pO1xuXG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoW1xuICAgICdlbGVtZW50cy5jcmVhdGUnXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHMsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICAgIGlmIChoaW50cy5jcmVhdGVFbGVtZW50c0JlaGF2aW9yICE9PSBmYWxzZSkge1xuICAgICAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIGNoZWNrTGFiZWxBZGp1c3RtZW50KGVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBjaGVja0xhYmVsQWRqdXN0bWVudChlbGVtZW50KSB7XG5cbiAgICAvLyBza2lwIG5vbi1leGlzdGluZyBsYWJlbHNcbiAgICBpZiAoIWhhc0V4dGVybmFsTGFiZWwoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3B0aW1hbFBvc2l0aW9uID0gZ2V0T3B0aW1hbFBvc2l0aW9uKGVsZW1lbnQpO1xuXG4gICAgLy8gbm8gb3B0aW1hbCBwb3NpdGlvbiBmb3VuZFxuICAgIGlmICghb3B0aW1hbFBvc2l0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYWRqdXN0TGFiZWxQb3NpdGlvbihlbGVtZW50LCBvcHRpbWFsUG9zaXRpb24pO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRqdXN0TGFiZWxQb3NpdGlvbihlbGVtZW50LCBvcmllbnRhdGlvbikge1xuXG4gICAgdmFyIGVsZW1lbnRNaWQgPSBnZXRNaWQoZWxlbWVudCksXG4gICAgICAgIGxhYmVsID0gZWxlbWVudC5sYWJlbCxcbiAgICAgICAgbGFiZWxNaWQgPSBnZXRNaWQobGFiZWwpO1xuXG4gICAgLy8gaWdub3JlIGxhYmVscyB0aGF0IGFyZSBiZWluZyBjcmVhdGVkXG4gICAgaWYgKCFsYWJlbC5wYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudFRyYmwgPSBhc1RSQkwoZWxlbWVudCk7XG5cbiAgICB2YXIgbmV3TGFiZWxNaWQ7XG5cbiAgICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIG5ld0xhYmVsTWlkID0ge1xuICAgICAgICB4OiBlbGVtZW50TWlkLngsXG4gICAgICAgIHk6IGVsZW1lbnRUcmJsLnRvcCAtIEVMRU1FTlRfTEFCRUxfRElTVEFOQ0UgLSBsYWJlbC5oZWlnaHQgLyAyXG4gICAgICB9O1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2xlZnQnOlxuXG4gICAgICBuZXdMYWJlbE1pZCA9IHtcbiAgICAgICAgeDogZWxlbWVudFRyYmwubGVmdCAtIEVMRU1FTlRfTEFCRUxfRElTVEFOQ0UgLSBsYWJlbC53aWR0aCAvIDIsXG4gICAgICAgIHk6IGVsZW1lbnRNaWQueVxuICAgICAgfTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdib3R0b20nOlxuXG4gICAgICBuZXdMYWJlbE1pZCA9IHtcbiAgICAgICAgeDogZWxlbWVudE1pZC54LFxuICAgICAgICB5OiBlbGVtZW50VHJibC5ib3R0b20gKyBFTEVNRU5UX0xBQkVMX0RJU1RBTkNFICsgbGFiZWwuaGVpZ2h0IC8gMlxuICAgICAgfTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdyaWdodCc6XG5cbiAgICAgIG5ld0xhYmVsTWlkID0ge1xuICAgICAgICB4OiBlbGVtZW50VHJibC5yaWdodCArIEVMRU1FTlRfTEFCRUxfRElTVEFOQ0UgKyBsYWJlbC53aWR0aCAvIDIsXG4gICAgICAgIHk6IGVsZW1lbnRNaWQueVxuICAgICAgfTtcblxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGRlbHRhID0gc3Vic3RyYWN0KG5ld0xhYmVsTWlkLCBsYWJlbE1pZCk7XG5cbiAgICBtb2RlbGluZy5tb3ZlU2hhcGUobGFiZWwsIGRlbHRhKTtcbiAgfVxuXG59XG5cbmluaGVyaXRzKEFkYXB0aXZlTGFiZWxQb3NpdGlvbmluZ0JlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5BZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIFJldHVybiBhbGlnbm1lbnRzIHdoaWNoIGFyZSB0YWtlbiBieSBhIGJvdW5kYXJ5J3MgaG9zdCBlbGVtZW50XG4gKlxuICogQHBhcmFtIHtTaGFwZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge0FycmF5PHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGdldFRha2VuSG9zdEFsaWdubWVudHMoZWxlbWVudCkge1xuXG4gIHZhciBob3N0RWxlbWVudCA9IGVsZW1lbnQuaG9zdCxcbiAgICAgIGVsZW1lbnRNaWQgPSBnZXRNaWQoZWxlbWVudCksXG4gICAgICBob3N0T3JpZW50YXRpb24gPSBnZXRPcmllbnRhdGlvbihlbGVtZW50TWlkLCBob3N0RWxlbWVudCk7XG5cbiAgdmFyIGZyZWVBbGlnbm1lbnRzO1xuXG4gIC8vIGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYSBtdWx0aS1vcmllbnRhdGlvbiwgZS5nLiAndG9wLWxlZnQnXG4gIGlmIChob3N0T3JpZW50YXRpb24uaW5kZXhPZignLScpID49IDApIHtcbiAgICBmcmVlQWxpZ25tZW50cyA9IGhvc3RPcmllbnRhdGlvbi5zcGxpdCgnLScpO1xuICB9IGVsc2Uge1xuICAgIGZyZWVBbGlnbm1lbnRzID0gWyBob3N0T3JpZW50YXRpb24gXTtcbiAgfVxuXG4gIHZhciB0YWtlbkFsaWdubWVudHMgPSBBTElHTk1FTlRTLmZpbHRlcihmdW5jdGlvbihhbGlnbm1lbnQpIHtcblxuICAgIHJldHVybiBmcmVlQWxpZ25tZW50cy5pbmRleE9mKGFsaWdubWVudCkgPT09IC0xO1xuICB9KTtcblxuICByZXR1cm4gdGFrZW5BbGlnbm1lbnRzO1xuXG59XG5cbi8qKlxuICogUmV0dXJuIGFsaWdubWVudHMgd2hpY2ggYXJlIHRha2VuIGJ5IHJlbGF0ZWQgY29ubmVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1NoYXBlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7QXJyYXk8c3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gZ2V0VGFrZW5Db25uZWN0aW9uQWxpZ25tZW50cyhlbGVtZW50KSB7XG5cbiAgdmFyIGVsZW1lbnRNaWQgPSBnZXRNaWQoZWxlbWVudCk7XG5cbiAgdmFyIHRha2VuQWxpZ25tZW50cyA9IFtdLmNvbmNhdChcbiAgICBlbGVtZW50LmluY29taW5nLm1hcChmdW5jdGlvbihjKSB7XG4gICAgICByZXR1cm4gYy53YXlwb2ludHNbYy53YXlwb2ludHMubGVuZ3RoIC0gMiBdO1xuICAgIH0pLFxuICAgIGVsZW1lbnQub3V0Z29pbmcubWFwKGZ1bmN0aW9uKGMpIHtcbiAgICAgIHJldHVybiBjLndheXBvaW50c1sxXTtcbiAgICB9KVxuICApLm1hcChmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBnZXRBcHByb3hpbWF0ZU9yaWVudGF0aW9uKGVsZW1lbnRNaWQsIHBvaW50KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRha2VuQWxpZ25tZW50cztcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIG9wdGltYWwgbGFiZWwgcG9zaXRpb24gYXJvdW5kIGFuIGVsZW1lbnRcbiAqIG9yIF91bmRlZmluZWRfLCBpZiBub25lIHdhcyBmb3VuZC5cbiAqXG4gKiBAcGFyYW0gIHtTaGFwZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gcG9zaXRpb25pbmcgaWRlbnRpZmllclxuICovXG5mdW5jdGlvbiBnZXRPcHRpbWFsUG9zaXRpb24oZWxlbWVudCkge1xuXG4gIHZhciBsYWJlbE1pZCA9IGdldE1pZChlbGVtZW50LmxhYmVsKTtcblxuICB2YXIgZWxlbWVudE1pZCA9IGdldE1pZChlbGVtZW50KTtcblxuICB2YXIgbGFiZWxPcmllbnRhdGlvbiA9IGdldEFwcHJveGltYXRlT3JpZW50YXRpb24oZWxlbWVudE1pZCwgbGFiZWxNaWQpO1xuXG4gIGlmICghaXNBbGlnbmVkKGxhYmVsT3JpZW50YXRpb24pKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHRha2VuQWxpZ25tZW50cyA9IGdldFRha2VuQ29ubmVjdGlvbkFsaWdubWVudHMoZWxlbWVudCk7XG5cbiAgaWYgKGVsZW1lbnQuaG9zdCkge1xuICAgIHZhciB0YWtlbkhvc3RBbGlnbm1lbnRzID0gZ2V0VGFrZW5Ib3N0QWxpZ25tZW50cyhlbGVtZW50KTtcblxuICAgIHRha2VuQWxpZ25tZW50cyA9IHRha2VuQWxpZ25tZW50cy5jb25jYXQodGFrZW5Ib3N0QWxpZ25tZW50cyk7XG4gIH1cblxuICB2YXIgZnJlZUFsaWdubWVudHMgPSBBTElHTk1FTlRTLmZpbHRlcihmdW5jdGlvbihhbGlnbm1lbnQpIHtcblxuICAgIHJldHVybiB0YWtlbkFsaWdubWVudHMuaW5kZXhPZihhbGlnbm1lbnQpID09PSAtMTtcbiAgfSk7XG5cbiAgLy8gTk9USElORyBUTyBETzsgbGFiZWwgYWxyZWFkeSBhbGlnbmVkIGEuTy5LLlxuICBpZiAoZnJlZUFsaWdubWVudHMuaW5kZXhPZihsYWJlbE9yaWVudGF0aW9uKSAhPT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gZnJlZUFsaWdubWVudHNbMF07XG59XG5cbmZ1bmN0aW9uIGdldEFwcHJveGltYXRlT3JpZW50YXRpb24ocDAsIHAxKSB7XG4gIHJldHVybiBnZXRPcmllbnRhdGlvbihwMSwgcDAsIDUpO1xufVxuXG5mdW5jdGlvbiBpc0FsaWduZWQob3JpZW50YXRpb24pIHtcbiAgcmV0dXJuIEFMSUdOTUVOVFMuaW5kZXhPZihvcmllbnRhdGlvbikgIT09IC0xO1xufVxuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFwcGVuZEJlaGF2aW9yKGV2ZW50QnVzLCBlbGVtZW50RmFjdG9yeSwgYnBtblJ1bGVzKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIC8vIGFzc2lnbiBjb3JyZWN0IHNoYXBlIHBvc2l0aW9uIHVubGVzcyBhbHJlYWR5IHNldFxuXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuYXBwZW5kJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAoIWNvbnRleHQucG9zaXRpb24pIHtcblxuICAgICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XG4gICAgICAgIGNvbnRleHQucG9zaXRpb24gPSB7XG4gICAgICAgICAgeDogc291cmNlLnggKyBzb3VyY2Uud2lkdGggLyAyICsgNzUsXG4gICAgICAgICAgeTogc291cmNlLnkgLSAoNTApIC0gc2hhcGUuaGVpZ2h0IC8gMlxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5wb3NpdGlvbiA9IHtcbiAgICAgICAgICB4OiBzb3VyY2UueCArIHNvdXJjZS53aWR0aCArIDgwICsgc2hhcGUud2lkdGggLyAyLFxuICAgICAgICAgIHk6IHNvdXJjZS55ICsgc291cmNlLmhlaWdodCAvIDJcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHRydWUpO1xufVxuXG5pbmhlcml0cyhBcHBlbmRCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuQXBwZW5kQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcbiAgJ2JwbW5SdWxlcydcbl07IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcclxuXHJcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIGZpbHRlcixcclxuICBmb3JFYWNoXHJcbn0gZnJvbSAnbWluLWRhc2gnO1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFzc29jaWF0aW9uQmVoYXZpb3IoaW5qZWN0b3IsIG1vZGVsaW5nKSB7XHJcbiAgaW5qZWN0b3IuaW52b2tlKENvbW1hbmRJbnRlcmNlcHRvciwgdGhpcyk7XHJcblxyXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLm1vdmUnLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICB2YXIgbmV3UGFyZW50ID0gY29udGV4dC5uZXdQYXJlbnQsXHJcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xyXG5cclxuICAgIHZhciBhc3NvY2lhdGlvbnMgPSBmaWx0ZXIoc2hhcGUuaW5jb21pbmcuY29uY2F0KHNoYXBlLm91dGdvaW5nKSwgZnVuY3Rpb24oY29ubmVjdGlvbikge1xyXG4gICAgICByZXR1cm4gaXMoY29ubmVjdGlvbiwgJ2JwbW46QXNzb2NpYXRpb24nKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZvckVhY2goYXNzb2NpYXRpb25zLCBmdW5jdGlvbihhc3NvY2lhdGlvbikge1xyXG4gICAgICBtb2RlbGluZy5tb3ZlQ29ubmVjdGlvbihhc3NvY2lhdGlvbiwgeyB4OiAwLCB5OiAwIH0sIG5ld1BhcmVudCk7XHJcbiAgICB9KTtcclxuICB9LCB0cnVlKTtcclxufVxyXG5cclxuaW5oZXJpdHMoQXNzb2NpYXRpb25CZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcclxuXHJcbkFzc29jaWF0aW9uQmVoYXZpb3IuJGluamVjdCA9IFtcclxuICAnaW5qZWN0b3InLFxyXG4gICdtb2RlbGluZydcclxuXTsiLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHsgZ2V0QnVzaW5lc3NPYmplY3QgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7IGlzQW55IH0gZnJvbSAnLi4vdXRpbC9Nb2RlbGluZ1V0aWwnO1xuXG5pbXBvcnQgeyBpc0xhYmVsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xuXG5cbi8qKlxuICogUmVwbGFjZSBpbnRlcm1lZGlhdGUgZXZlbnQgd2l0aCBib3VuZGFyeSBldmVudCB3aGVuIGNyZWF0aW5nIG9yIG1vdmluZyByZXN1bHRzIGluIGF0dGFjaGVkIGV2ZW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBdHRhY2hFdmVudEJlaGF2aW9yKGJwbW5SZXBsYWNlLCBpbmplY3Rvcikge1xuICBpbmplY3Rvci5pbnZva2UoQ29tbWFuZEludGVyY2VwdG9yLCB0aGlzKTtcblxuICB0aGlzLl9icG1uUmVwbGFjZSA9IGJwbW5SZXBsYWNlO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLnBvc3RFeGVjdXRlZCgnZWxlbWVudHMuY3JlYXRlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cztcblxuICAgIGVsZW1lbnRzID0gZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICB2YXIgaG9zdCA9IHNoYXBlLmhvc3Q7XG5cbiAgICAgIHJldHVybiBzaG91bGRSZXBsYWNlKHNoYXBlLCBob3N0KTtcbiAgICB9KTtcblxuICAgIGlmIChlbGVtZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlbGVtZW50cy5tYXAoZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XG4gICAgfSkuZm9yRWFjaChmdW5jdGlvbihpbmRleCkge1xuICAgICAgdmFyIGhvc3QgPSBlbGVtZW50c1sgaW5kZXggXTtcblxuICAgICAgY29udGV4dC5lbGVtZW50c1sgaW5kZXggXSA9IHNlbGYucmVwbGFjZVNoYXBlKGVsZW1lbnRzWyBpbmRleCBdLCBob3N0KTtcbiAgICB9KTtcbiAgfSwgdHJ1ZSk7XG5cblxuICB0aGlzLnByZUV4ZWN1dGUoJ2VsZW1lbnRzLm1vdmUnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgc2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIGhvc3QgPSBjb250ZXh0Lm5ld0hvc3Q7XG5cbiAgICBpZiAoc2hhcGVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IHNoYXBlc1swXTtcblxuICAgIGlmIChzaG91bGRSZXBsYWNlKHNoYXBlLCBob3N0KSkge1xuICAgICAgY29udGV4dC5zaGFwZXMgPSBbIHNlbGYucmVwbGFjZVNoYXBlKHNoYXBlLCBob3N0KSBdO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5cbkF0dGFjaEV2ZW50QmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2JwbW5SZXBsYWNlJyxcbiAgJ2luamVjdG9yJ1xuXTtcblxuaW5oZXJpdHMoQXR0YWNoRXZlbnRCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuQXR0YWNoRXZlbnRCZWhhdmlvci5wcm90b3R5cGUucmVwbGFjZVNoYXBlID0gZnVuY3Rpb24oc2hhcGUsIGhvc3QpIHtcbiAgdmFyIGV2ZW50RGVmaW5pdGlvbiA9IGdldEV2ZW50RGVmaW5pdGlvbihzaGFwZSk7XG5cbiAgdmFyIGJvdW5kYXJ5RXZlbnQgPSB7XG4gICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgaG9zdDogaG9zdFxuICB9O1xuXG4gIGlmIChldmVudERlZmluaXRpb24pIHtcbiAgICBib3VuZGFyeUV2ZW50LmV2ZW50RGVmaW5pdGlvblR5cGUgPSBldmVudERlZmluaXRpb24uJHR5cGU7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fYnBtblJlcGxhY2UucmVwbGFjZUVsZW1lbnQoc2hhcGUsIGJvdW5kYXJ5RXZlbnQsIHsgbGF5b3V0Q29ubmVjdGlvbjogZmFsc2UgfSk7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRFdmVudERlZmluaXRpb24oZWxlbWVudCkge1xuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICAgIGV2ZW50RGVmaW5pdGlvbnMgPSBidXNpbmVzc09iamVjdC5ldmVudERlZmluaXRpb25zO1xuXG4gIHJldHVybiBldmVudERlZmluaXRpb25zICYmIGV2ZW50RGVmaW5pdGlvbnNbMF07XG59XG5cbmZ1bmN0aW9uIHNob3VsZFJlcGxhY2Uoc2hhcGUsIGhvc3QpIHtcbiAgcmV0dXJuICFpc0xhYmVsKHNoYXBlKSAmJlxuICAgIGlzQW55KHNoYXBlLCBbICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLCAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyBdKSAmJiAhIWhvc3Q7XG59XG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGZpbHRlcixcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBCUE1OIHNwZWNpZmljIGJvdW5kYXJ5IGV2ZW50IGJlaGF2aW9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJvdW5kYXJ5RXZlbnRCZWhhdmlvcihldmVudEJ1cywgbW9kZWxpbmcpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgZnVuY3Rpb24gZ2V0Qm91bmRhcnlFdmVudHMoZWxlbWVudCkge1xuICAgIHJldHVybiBmaWx0ZXIoZWxlbWVudC5hdHRhY2hlcnMsIGZ1bmN0aW9uKGF0dGFjaGVyKSB7XG4gICAgICByZXR1cm4gaXMoYXR0YWNoZXIsICdicG1uOkJvdW5kYXJ5RXZlbnQnKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHJlbW92ZSBhZnRlciBjb25uZWN0aW5nIHRvIGV2ZW50LWJhc2VkIGdhdGV3YXlcbiAgdGhpcy5wb3N0RXhlY3V0ZSgnY29ubmVjdGlvbi5jcmVhdGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBzb3VyY2UgPSBldmVudC5jb250ZXh0LnNvdXJjZSxcbiAgICAgICAgdGFyZ2V0ID0gZXZlbnQuY29udGV4dC50YXJnZXQsXG4gICAgICAgIGJvdW5kYXJ5RXZlbnRzID0gZ2V0Qm91bmRhcnlFdmVudHModGFyZ2V0KTtcblxuICAgIGlmIChcbiAgICAgIGlzKHNvdXJjZSwgJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknKSAmJlxuICAgICAgaXModGFyZ2V0LCAnYnBtbjpSZWNlaXZlVGFzaycpICYmXG4gICAgICBib3VuZGFyeUV2ZW50cy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBtb2RlbGluZy5yZW1vdmVFbGVtZW50cyhib3VuZGFyeUV2ZW50cyk7XG4gICAgfVxuXG4gIH0pO1xuXG4gIC8vIHJlbW92ZSBhZnRlciByZXBsYWNpbmcgY29ubmVjdGVkIGdhdGV3YXkgd2l0aCBldmVudC1iYXNlZCBnYXRld2F5XG4gIHRoaXMucG9zdEV4ZWN1dGUoJ2Nvbm5lY3Rpb24ucmVjb25uZWN0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgb2xkU291cmNlID0gZXZlbnQuY29udGV4dC5vbGRTb3VyY2UsXG4gICAgICAgIG5ld1NvdXJjZSA9IGV2ZW50LmNvbnRleHQubmV3U291cmNlO1xuXG4gICAgaWYgKGlzKG9sZFNvdXJjZSwgJ2JwbW46R2F0ZXdheScpICYmXG4gICAgICAgIGlzKG5ld1NvdXJjZSwgJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknKSkge1xuICAgICAgZm9yRWFjaChuZXdTb3VyY2Uub3V0Z29pbmcsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgdmFyIHRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICAgICAgYXR0YWNoZWRib3VuZGFyeUV2ZW50cyA9IGdldEJvdW5kYXJ5RXZlbnRzKHRhcmdldCk7XG5cbiAgICAgICAgaWYgKGlzKHRhcmdldCwgJ2JwbW46UmVjZWl2ZVRhc2snKSAmJlxuICAgICAgICAgICAgYXR0YWNoZWRib3VuZGFyeUV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbW9kZWxpbmcucmVtb3ZlRWxlbWVudHMoYXR0YWNoZWRib3VuZGFyeUV2ZW50cyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbkJvdW5kYXJ5RXZlbnRCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5pbmhlcml0cyhCb3VuZGFyeUV2ZW50QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGdldFBhcmVudCB9IGZyb20gJy4uL3V0aWwvTW9kZWxpbmdVdGlsJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcmVhdGVCZWhhdmlvcihpbmplY3Rvcikge1xuICBpbmplY3Rvci5pbnZva2UoQ29tbWFuZEludGVyY2VwdG9yLCB0aGlzKTtcblxuICB0aGlzLnByZUV4ZWN1dGUoJ3NoYXBlLmNyZWF0ZScsIDE1MDAsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKGlzKHBhcmVudCwgJ2JwbW46TGFuZScpICYmICFpcyhzaGFwZSwgJ2JwbW46TGFuZScpKSB7XG4gICAgICBjb250ZXh0LnBhcmVudCA9IGdldFBhcmVudChwYXJlbnQsICdicG1uOlBhcnRpY2lwYW50Jyk7XG4gICAgfVxuICB9KTtcblxufVxuXG5cbkNyZWF0ZUJlaGF2aW9yLiRpbmplY3QgPSBbICdpbmplY3RvcicgXTtcblxuaW5oZXJpdHMoQ3JlYXRlQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5cbi8qKlxuICogQlBNTiBzcGVjaWZpYyBjcmVhdGUgZGF0YSBvYmplY3QgYmVoYXZpb3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yKGV2ZW50QnVzLCBicG1uRmFjdG9yeSwgbW9kZGxlKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJykgJiYgc2hhcGUudHlwZSAhPT0gJ2xhYmVsJykge1xuXG4gICAgICAvLyBjcmVhdGUgYSBEYXRhT2JqZWN0IGV2ZXJ5IHRpbWUgYSBEYXRhT2JqZWN0UmVmZXJlbmNlIGlzIGNyZWF0ZWRcbiAgICAgIHZhciBkYXRhT2JqZWN0ID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkRhdGFPYmplY3QnKTtcblxuICAgICAgLy8gc2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIERhdGFPYmplY3RcbiAgICAgIHNoYXBlLmJ1c2luZXNzT2JqZWN0LmRhdGFPYmplY3RSZWYgPSBkYXRhT2JqZWN0O1xuICAgIH1cbiAgfSk7XG5cbn1cblxuQ3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdicG1uRmFjdG9yeScsXG4gICdtb2RkbGUnXG5dO1xuXG5pbmhlcml0cyhDcmVhdGVEYXRhT2JqZWN0QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQgeyBpc0xhYmVsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG5pbXBvcnQgeyBnZXRCQm94IH0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCB7XG4gIGFzc2lnbixcbiAgZmluZFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7IGFzVFJCTCB9IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxudmFyIEhPUklaT05UQUxfUEFSVElDSVBBTlRfUEFERElORyA9IDIwLFxuICAgIFZFUlRJQ0FMX1BBUlRJQ0lQQU5UX1BBRERJTkcgPSAyMDtcblxuZXhwb3J0IHZhciBQQVJUSUNJUEFOVF9CT1JERVJfV0lEVEggPSAzMDtcblxudmFyIEhJR0hfUFJJT1JJVFkgPSAyMDAwO1xuXG5cbi8qKlxuICogQlBNTi1zcGVjaWZpYyBiZWhhdmlvciBmb3IgY3JlYXRpbmcgcGFydGljaXBhbnRzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yKGNhbnZhcywgZXZlbnRCdXMsIG1vZGVsaW5nKSB7XG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICAvLyBmaXQgcGFydGljaXBhbnRcbiAgZXZlbnRCdXMub24oW1xuICAgICdjcmVhdGUuc3RhcnQnLFxuICAgICdzaGFwZS5tb3ZlLnN0YXJ0J1xuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpO1xuXG4gICAgaWYgKCFpcyhzaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKSB8fFxuICAgICAgIWlzKHJvb3RFbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgfHxcbiAgICAgICFyb290RWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZ25vcmUgY29ubmVjdGlvbnMsIGdyb3VwcyBhbmQgbGFiZWxzXG4gICAgdmFyIGNoaWxkcmVuID0gcm9vdEVsZW1lbnQuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiAhaXMoZWxlbWVudCwgJ2JwbW46R3JvdXAnKSAmJlxuICAgICAgICAhaXNMYWJlbChlbGVtZW50KSAmJlxuICAgICAgICAhaXNDb25uZWN0aW9uKGVsZW1lbnQpO1xuICAgIH0pO1xuXG4gICAgLy8gZW5zdXJlIGZvciBhdmFpbGFibGUgY2hpbGRyZW4gdG8gY2FsY3VsYXRlIGJvdW5kc1xuICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkcmVuQkJveCA9IGdldEJCb3goY2hpbGRyZW4pO1xuXG4gICAgdmFyIHBhcnRpY2lwYW50Qm91bmRzID0gZ2V0UGFydGljaXBhbnRCb3VuZHMoc2hhcGUsIGNoaWxkcmVuQkJveCk7XG5cbiAgICAvLyBhc3NpZ24gd2lkdGggYW5kIGhlaWdodFxuICAgIGFzc2lnbihzaGFwZSwgcGFydGljaXBhbnRCb3VuZHMpO1xuXG4gICAgLy8gYXNzaWduIGNyZWF0ZSBjb25zdHJhaW50c1xuICAgIGNvbnRleHQuY3JlYXRlQ29uc3RyYWludHMgPSBnZXRQYXJ0aWNpcGFudENyZWF0ZUNvbnN0cmFpbnRzKHNoYXBlLCBjaGlsZHJlbkJCb3gpO1xuICB9KTtcblxuICAvLyBmb3JjZSBob3ZlcmluZyBwcm9jZXNzIHdoZW4gY3JlYXRpbmcgZmlyc3QgcGFydGljaXBhbnRcbiAgZXZlbnRCdXMub24oJ2NyZWF0ZS5zdGFydCcsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgICAgIHJvb3RFbGVtZW50R2Z4ID0gY2FudmFzLmdldEdyYXBoaWNzKHJvb3RFbGVtZW50KTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUhvdmVyaW5nUHJvY2VzcyhldmVudCkge1xuICAgICAgZXZlbnQuZWxlbWVudCA9IHJvb3RFbGVtZW50O1xuICAgICAgZXZlbnQuZ2Z4ID0gcm9vdEVsZW1lbnRHZng7XG4gICAgfVxuXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmIGlzKHJvb3RFbGVtZW50LCAnYnBtbjpQcm9jZXNzJykpIHtcbiAgICAgIGV2ZW50QnVzLm9uKCdlbGVtZW50LmhvdmVyJywgSElHSF9QUklPUklUWSwgZW5zdXJlSG92ZXJpbmdQcm9jZXNzKTtcblxuICAgICAgZXZlbnRCdXMub25jZSgnY3JlYXRlLmNsZWFudXAnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgZXZlbnRCdXMub2ZmKCdlbGVtZW50LmhvdmVyJywgZW5zdXJlSG92ZXJpbmdQcm9jZXNzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gZW5zdXJlQ29sbGFib3JhdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHBhcmVudCA9IGNvbnRleHQucGFyZW50LFxuICAgICAgICBjb2xsYWJvcmF0aW9uO1xuXG4gICAgdmFyIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XG5cbiAgICBpZiAoaXMocm9vdEVsZW1lbnQsICdicG1uOkNvbGxhYm9yYXRpb24nKSkge1xuICAgICAgY29sbGFib3JhdGlvbiA9IHJvb3RFbGVtZW50O1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIHVwZGF0ZSByb290IGVsZW1lbnQgYnkgbWFraW5nIGNvbGxhYm9yYXRpb25cbiAgICAgIGNvbGxhYm9yYXRpb24gPSBtb2RlbGluZy5tYWtlQ29sbGFib3JhdGlvbigpO1xuXG4gICAgICAvLyByZS11c2UgcHJvY2VzcyB3aGVuIGNyZWF0aW5nIGZpcnN0IHBhcnRpY2lwYW50XG4gICAgICBjb250ZXh0LnByb2Nlc3MgPSBwYXJlbnQ7XG4gICAgfVxuXG4gICAgY29udGV4dC5wYXJlbnQgPSBjb2xsYWJvcmF0aW9uO1xuICB9XG5cbiAgLy8gdHVybiBwcm9jZXNzIGludG8gY29sbGFib3JhdGlvbiBiZWZvcmUgYWRkaW5nIHBhcnRpY2lwYW50XG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmIGlzKHBhcmVudCwgJ2JwbW46UHJvY2VzcycpKSB7XG4gICAgICBlbnN1cmVDb2xsYWJvcmF0aW9uKGNvbnRleHQpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5leGVjdXRlKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHByb2Nlc3MgPSBjb250ZXh0LnByb2Nlc3MsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBjb250ZXh0Lm9sZFByb2Nlc3NSZWYgPSBzaGFwZS5idXNpbmVzc09iamVjdC5wcm9jZXNzUmVmO1xuXG4gICAgICAvLyByZS11c2UgcHJvY2VzcyB3aGVuIGNyZWF0aW5nIGZpcnN0IHBhcnRpY2lwYW50XG4gICAgICBzaGFwZS5idXNpbmVzc09iamVjdC5wcm9jZXNzUmVmID0gcHJvY2Vzcy5idXNpbmVzc09iamVjdDtcbiAgICB9XG4gIH0sIHRydWUpO1xuXG4gIHRoaXMucmV2ZXJ0KCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHByb2Nlc3MgPSBjb250ZXh0LnByb2Nlc3MsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChwcm9jZXNzKSB7XG5cbiAgICAgIC8vIHJlLXVzZSBwcm9jZXNzIHdoZW4gY3JlYXRpbmcgZmlyc3QgcGFydGljaXBhbnRcbiAgICAgIHNoYXBlLmJ1c2luZXNzT2JqZWN0LnByb2Nlc3NSZWYgPSBjb250ZXh0Lm9sZFByb2Nlc3NSZWY7XG4gICAgfVxuICB9LCB0cnVlKTtcblxuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHByb2Nlc3MgPSBjb250ZXh0LnByb2Nlc3MsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChwcm9jZXNzKSB7XG5cbiAgICAgIC8vIG1vdmUgY2hpbGRyZW4gZnJvbSBwcm9jZXNzIHRvIHBhcnRpY2lwYW50XG4gICAgICB2YXIgcHJvY2Vzc0NoaWxkcmVuID0gcHJvY2Vzcy5jaGlsZHJlbi5zbGljZSgpO1xuXG4gICAgICBtb2RlbGluZy5tb3ZlRWxlbWVudHMocHJvY2Vzc0NoaWxkcmVuLCB7IHg6IDAsIHk6IDAgfSwgc2hhcGUpO1xuICAgIH1cblxuICB9LCB0cnVlKTtcblxuICAvLyB0dXJuIHByb2Nlc3MgaW50byBjb2xsYWJvcmF0aW9uIHdoZW4gY3JlYXRpbmcgcGFydGljaXBhbnRzXG4gIHRoaXMucHJlRXhlY3V0ZSgnZWxlbWVudHMuY3JlYXRlJywgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHMsXG4gICAgICAgIHBhcmVudCA9IGNvbnRleHQucGFyZW50LFxuICAgICAgICBwYXJ0aWNpcGFudDtcblxuICAgIHZhciBoYXNQYXJ0aWNpcGFudHMgPSBmaW5kUGFydGljaXBhbnQoZWxlbWVudHMpO1xuXG4gICAgaWYgKGhhc1BhcnRpY2lwYW50cyAmJiBpcyhwYXJlbnQsICdicG1uOlByb2Nlc3MnKSkge1xuICAgICAgZW5zdXJlQ29sbGFib3JhdGlvbihjb250ZXh0KTtcblxuICAgICAgcGFydGljaXBhbnQgPSBmaW5kUGFydGljaXBhbnQoZWxlbWVudHMpO1xuXG4gICAgICBjb250ZXh0Lm9sZFByb2Nlc3NSZWYgPSBwYXJ0aWNpcGFudC5idXNpbmVzc09iamVjdC5wcm9jZXNzUmVmO1xuXG4gICAgICAvLyByZS11c2UgcHJvY2VzcyB3aGVuIGNyZWF0aW5nIGZpcnN0IHBhcnRpY2lwYW50XG4gICAgICBwYXJ0aWNpcGFudC5idXNpbmVzc09iamVjdC5wcm9jZXNzUmVmID0gcGFyZW50LmJ1c2luZXNzT2JqZWN0O1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5yZXZlcnQoJ2VsZW1lbnRzLmNyZWF0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzLFxuICAgICAgICBwcm9jZXNzID0gY29udGV4dC5wcm9jZXNzLFxuICAgICAgICBwYXJ0aWNpcGFudDtcblxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBwYXJ0aWNpcGFudCA9IGZpbmRQYXJ0aWNpcGFudChlbGVtZW50cyk7XG5cbiAgICAgIC8vIHJlLXVzZSBwcm9jZXNzIHdoZW4gY3JlYXRpbmcgZmlyc3QgcGFydGljaXBhbnRcbiAgICAgIHBhcnRpY2lwYW50LmJ1c2luZXNzT2JqZWN0LnByb2Nlc3NSZWYgPSBjb250ZXh0Lm9sZFByb2Nlc3NSZWY7XG4gICAgfVxuICB9LCB0cnVlKTtcblxuICB0aGlzLnBvc3RFeGVjdXRlKCdlbGVtZW50cy5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cyxcbiAgICAgICAgcHJvY2VzcyA9IGNvbnRleHQucHJvY2VzcyxcbiAgICAgICAgcGFydGljaXBhbnQ7XG5cbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgcGFydGljaXBhbnQgPSBmaW5kUGFydGljaXBhbnQoZWxlbWVudHMpO1xuXG4gICAgICAvLyBtb3ZlIGNoaWxkcmVuIGZyb20gcHJvY2VzcyB0byBmaXJzdCBwYXJ0aWNpcGFudFxuICAgICAgdmFyIHByb2Nlc3NDaGlsZHJlbiA9IHByb2Nlc3MuY2hpbGRyZW4uc2xpY2UoKTtcblxuICAgICAgbW9kZWxpbmcubW92ZUVsZW1lbnRzKHByb2Nlc3NDaGlsZHJlbiwgeyB4OiAwLCB5OiAwIH0sIHBhcnRpY2lwYW50KTtcbiAgICB9XG5cbiAgfSwgdHJ1ZSk7XG5cbn1cblxuQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnY2FudmFzJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuaW5oZXJpdHMoQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldFBhcnRpY2lwYW50Qm91bmRzKHNoYXBlLCBjaGlsZHJlbkJCb3gpIHtcbiAgY2hpbGRyZW5CQm94ID0ge1xuICAgIHdpZHRoOiBjaGlsZHJlbkJCb3gud2lkdGggKyBIT1JJWk9OVEFMX1BBUlRJQ0lQQU5UX1BBRERJTkcgKiAyICsgUEFSVElDSVBBTlRfQk9SREVSX1dJRFRILFxuICAgIGhlaWdodDogY2hpbGRyZW5CQm94LmhlaWdodCArIFZFUlRJQ0FMX1BBUlRJQ0lQQU5UX1BBRERJTkcgKiAyXG4gIH07XG5cbiAgdmFyIHdpZHRoID0gTWF0aC5tYXgoc2hhcGUud2lkdGgsIGNoaWxkcmVuQkJveC53aWR0aCksXG4gICAgICBoZWlnaHQgPSBNYXRoLm1heChzaGFwZS5oZWlnaHQsIGNoaWxkcmVuQkJveC5oZWlnaHQpO1xuXG4gIHJldHVybiB7XG4gICAgeDogLXdpZHRoIC8gMixcbiAgICB5OiAtaGVpZ2h0IC8gMixcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFydGljaXBhbnRDcmVhdGVDb25zdHJhaW50cyhzaGFwZSwgY2hpbGRyZW5CQm94KSB7XG4gIGNoaWxkcmVuQkJveCA9IGFzVFJCTChjaGlsZHJlbkJCb3gpO1xuXG4gIHJldHVybiB7XG4gICAgYm90dG9tOiBjaGlsZHJlbkJCb3gudG9wICsgc2hhcGUuaGVpZ2h0IC8gMiAtIFZFUlRJQ0FMX1BBUlRJQ0lQQU5UX1BBRERJTkcsXG4gICAgbGVmdDogY2hpbGRyZW5CQm94LnJpZ2h0IC0gc2hhcGUud2lkdGggLyAyICsgSE9SSVpPTlRBTF9QQVJUSUNJUEFOVF9QQURESU5HLFxuICAgIHRvcDogY2hpbGRyZW5CQm94LmJvdHRvbSAtIHNoYXBlLmhlaWdodCAvIDIgKyBWRVJUSUNBTF9QQVJUSUNJUEFOVF9QQURESU5HLFxuICAgIHJpZ2h0OiBjaGlsZHJlbkJCb3gubGVmdCArIHNoYXBlLndpZHRoIC8gMiAtIEhPUklaT05UQUxfUEFSVElDSVBBTlRfUEFERElORyAtIFBBUlRJQ0lQQU5UX0JPUkRFUl9XSURUSFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gISFlbGVtZW50LndheXBvaW50cztcbn1cblxuZnVuY3Rpb24gZmluZFBhcnRpY2lwYW50KGVsZW1lbnRzKSB7XG4gIHJldHVybiBmaW5kKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50Jyk7XG4gIH0pO1xufSIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBhZGQgYXMgY29sbGVjdGlvbkFkZCxcbiAgcmVtb3ZlIGFzIGNvbGxlY3Rpb25SZW1vdmVcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9Db2xsZWN0aW9ucyc7XG5cbmltcG9ydCB7XG4gIGZpbmRcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBpc1xufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbnZhciBUQVJHRVRfUkVGX1BMQUNFSE9MREVSX05BTUUgPSAnX190YXJnZXRSZWZfcGxhY2Vob2xkZXInO1xuXG5cbi8qKlxuICogVGhpcyBiZWhhdmlvciBtYWtlcyBzdXJlIHdlIGFsd2F5cyBzZXQgYSBmYWtlXG4gKiBEYXRhSW5wdXRBc3NvY2lhdGlvbiN0YXJnZXRSZWYgYXMgZGVtYW5kZWQgYnkgdGhlIEJQTU4gMi4wXG4gKiBYU0Qgc2NoZW1hLlxuICpcbiAqIFRoZSByZWZlcmVuY2UgaXMgc2V0IHRvIGEgYnBtbjpQcm9wZXJ0eXsgbmFtZTogJ19fdGFyZ2V0UmVmX3BsYWNlaG9sZGVyJyB9XG4gKiB3aGljaCBpcyBjcmVhdGVkIG9uIHRoZSBmbHkgYW5kIGNsZWFuZWQgdXAgYWZ0ZXJ3YXJkcyBpZiBub3QgbmVlZGVkXG4gKiBhbnltb3JlLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEYXRhSW5wdXRBc3NvY2lhdGlvbkJlaGF2aW9yKGV2ZW50QnVzLCBicG1uRmFjdG9yeSkge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuXG4gIHRoaXMuZXhlY3V0ZWQoW1xuICAgICdjb25uZWN0aW9uLmNyZWF0ZScsXG4gICAgJ2Nvbm5lY3Rpb24uZGVsZXRlJyxcbiAgICAnY29ubmVjdGlvbi5tb3ZlJyxcbiAgICAnY29ubmVjdGlvbi5yZWNvbm5lY3QnXG4gIF0sIGlmRGF0YUlucHV0QXNzb2NpYXRpb24oZml4VGFyZ2V0UmVmKSk7XG5cbiAgdGhpcy5yZXZlcnRlZChbXG4gICAgJ2Nvbm5lY3Rpb24uY3JlYXRlJyxcbiAgICAnY29ubmVjdGlvbi5kZWxldGUnLFxuICAgICdjb25uZWN0aW9uLm1vdmUnLFxuICAgICdjb25uZWN0aW9uLnJlY29ubmVjdCdcbiAgXSwgaWZEYXRhSW5wdXRBc3NvY2lhdGlvbihmaXhUYXJnZXRSZWYpKTtcblxuXG4gIGZ1bmN0aW9uIHVzZXNUYXJnZXRSZWYoZWxlbWVudCwgdGFyZ2V0UmVmLCByZW1vdmVkQ29ubmVjdGlvbikge1xuXG4gICAgdmFyIGlucHV0QXNzb2NpYXRpb25zID0gZWxlbWVudC5nZXQoJ2RhdGFJbnB1dEFzc29jaWF0aW9ucycpO1xuXG4gICAgcmV0dXJuIGZpbmQoaW5wdXRBc3NvY2lhdGlvbnMsIGZ1bmN0aW9uKGFzc29jaWF0aW9uKSB7XG4gICAgICByZXR1cm4gYXNzb2NpYXRpb24gIT09IHJlbW92ZWRDb25uZWN0aW9uICYmXG4gICAgICAgICAgICAgYXNzb2NpYXRpb24udGFyZ2V0UmVmID09PSB0YXJnZXRSZWY7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRUYXJnZXRSZWYoZWxlbWVudCwgY3JlYXRlKSB7XG5cbiAgICB2YXIgcHJvcGVydGllcyA9IGVsZW1lbnQuZ2V0KCdwcm9wZXJ0aWVzJyk7XG5cbiAgICB2YXIgdGFyZ2V0UmVmUHJvcCA9IGZpbmQocHJvcGVydGllcywgZnVuY3Rpb24ocCkge1xuICAgICAgcmV0dXJuIHAubmFtZSA9PT0gVEFSR0VUX1JFRl9QTEFDRUhPTERFUl9OQU1FO1xuICAgIH0pO1xuXG4gICAgaWYgKCF0YXJnZXRSZWZQcm9wICYmIGNyZWF0ZSkge1xuICAgICAgdGFyZ2V0UmVmUHJvcCA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpQcm9wZXJ0eScsIHtcbiAgICAgICAgbmFtZTogVEFSR0VUX1JFRl9QTEFDRUhPTERFUl9OQU1FXG4gICAgICB9KTtcblxuICAgICAgY29sbGVjdGlvbkFkZChwcm9wZXJ0aWVzLCB0YXJnZXRSZWZQcm9wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0UmVmUHJvcDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFudXBUYXJnZXRSZWYoZWxlbWVudCwgY29ubmVjdGlvbikge1xuXG4gICAgdmFyIHRhcmdldFJlZlByb3AgPSBnZXRUYXJnZXRSZWYoZWxlbWVudCk7XG5cbiAgICBpZiAoIXRhcmdldFJlZlByb3ApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXVzZXNUYXJnZXRSZWYoZWxlbWVudCwgdGFyZ2V0UmVmUHJvcCwgY29ubmVjdGlvbikpIHtcbiAgICAgIGNvbGxlY3Rpb25SZW1vdmUoZWxlbWVudC5nZXQoJ3Byb3BlcnRpZXMnKSwgdGFyZ2V0UmVmUHJvcCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ha2Ugc3VyZSB0YXJnZXRSZWYgaXMgc2V0IHRvIGEgdmFsaWQgcHJvcGVydHkgb3JcbiAgICogYG51bGxgIGlmIHRoZSBjb25uZWN0aW9uIGlzIGRldGFjaGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKi9cbiAgZnVuY3Rpb24gZml4VGFyZ2V0UmVmKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIGNvbm5lY3Rpb25CbyA9IGNvbm5lY3Rpb24uYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICB0YXJnZXRCbyA9IHRhcmdldCAmJiB0YXJnZXQuYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIG5ld1RhcmdldCA9IGNvbnRleHQubmV3VGFyZ2V0LFxuICAgICAgICBuZXdUYXJnZXRCbyA9IG5ld1RhcmdldCAmJiBuZXdUYXJnZXQuYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIG9sZFRhcmdldCA9IGNvbnRleHQub2xkVGFyZ2V0IHx8IGNvbnRleHQudGFyZ2V0LFxuICAgICAgICBvbGRUYXJnZXRCbyA9IG9sZFRhcmdldCAmJiBvbGRUYXJnZXQuYnVzaW5lc3NPYmplY3Q7XG5cbiAgICB2YXIgZGF0YUFzc29jaWF0aW9uID0gY29ubmVjdGlvbi5idXNpbmVzc09iamVjdCxcbiAgICAgICAgdGFyZ2V0UmVmUHJvcDtcblxuICAgIGlmIChvbGRUYXJnZXRCbyAmJiBvbGRUYXJnZXRCbyAhPT0gdGFyZ2V0Qm8pIHtcbiAgICAgIGNsZWFudXBUYXJnZXRSZWYob2xkVGFyZ2V0Qm8sIGNvbm5lY3Rpb25Cbyk7XG4gICAgfVxuXG4gICAgaWYgKG5ld1RhcmdldEJvICYmIG5ld1RhcmdldEJvICE9PSB0YXJnZXRCbykge1xuICAgICAgY2xlYW51cFRhcmdldFJlZihuZXdUYXJnZXRCbywgY29ubmVjdGlvbkJvKTtcbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0Qm8pIHtcbiAgICAgIHRhcmdldFJlZlByb3AgPSBnZXRUYXJnZXRSZWYodGFyZ2V0Qm8sIHRydWUpO1xuICAgICAgZGF0YUFzc29jaWF0aW9uLnRhcmdldFJlZiA9IHRhcmdldFJlZlByb3A7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFBc3NvY2lhdGlvbi50YXJnZXRSZWYgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5EYXRhSW5wdXRBc3NvY2lhdGlvbkJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdicG1uRmFjdG9yeSdcbl07XG5cbmluaGVyaXRzKERhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cblxuLyoqXG4gKiBPbmx5IGNhbGwgdGhlIGdpdmVuIGZ1bmN0aW9uIHdoZW4gdGhlIGV2ZW50XG4gKiB0b3VjaGVzIGEgYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGlmRGF0YUlucHV0QXNzb2NpYXRpb24oZm4pIHtcblxuICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb247XG5cbiAgICBpZiAoaXMoY29ubmVjdGlvbiwgJ2JwbW46RGF0YUlucHV0QXNzb2NpYXRpb24nKSkge1xuICAgICAgcmV0dXJuIGZuKGV2ZW50KTtcbiAgICB9XG4gIH07XG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcclxuXHJcbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xyXG5cclxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBpc0FueSB9IGZyb20gJy4uL3V0aWwvTW9kZWxpbmdVdGlsJztcclxuXHJcbmltcG9ydCBVcGRhdGVTZW1hbnRpY1BhcmVudEhhbmRsZXIgZnJvbSAnLi4vY21kL1VwZGF0ZVNlbWFudGljUGFyZW50SGFuZGxlcic7XHJcblxyXG5cclxuLyoqXHJcbiAqIEJQTU4gc3BlY2lmaWMgZGF0YSBzdG9yZSBiZWhhdmlvclxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGF0YVN0b3JlQmVoYXZpb3IoXHJcbiAgICBjYW52YXMsIGNvbW1hbmRTdGFjaywgZWxlbWVudFJlZ2lzdHJ5LFxyXG4gICAgZXZlbnRCdXMpIHtcclxuXHJcbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xyXG5cclxuICBjb21tYW5kU3RhY2sucmVnaXN0ZXJIYW5kbGVyKCdkYXRhU3RvcmUudXBkYXRlQ29udGFpbm1lbnQnLCBVcGRhdGVTZW1hbnRpY1BhcmVudEhhbmRsZXIpO1xyXG5cclxuICBmdW5jdGlvbiBnZXRGaXJzdFBhcnRpY2lwYW50KCkge1xyXG4gICAgcmV0dXJuIGVsZW1lbnRSZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKTtcclxuICAgIH0pWzBdO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0RGF0YVN0b3JlcyhlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oY2hpbGQpIHtcclxuICAgICAgcmV0dXJuIGlzKGNoaWxkLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnKSAmJiAhY2hpbGQubGFiZWxUYXJnZXQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwZGF0ZURhdGFTdG9yZVBhcmVudChkYXRhU3RvcmUsIG5ld0RhdGFTdG9yZVBhcmVudCkge1xyXG4gICAgdmFyIGRhdGFTdG9yZUJvID0gZGF0YVN0b3JlLmJ1c2luZXNzT2JqZWN0IHx8IGRhdGFTdG9yZTtcclxuXHJcbiAgICBuZXdEYXRhU3RvcmVQYXJlbnQgPSBuZXdEYXRhU3RvcmVQYXJlbnQgfHwgZ2V0Rmlyc3RQYXJ0aWNpcGFudCgpO1xyXG5cclxuICAgIGlmIChuZXdEYXRhU3RvcmVQYXJlbnQpIHtcclxuICAgICAgdmFyIG5ld0RhdGFTdG9yZVBhcmVudEJvID0gbmV3RGF0YVN0b3JlUGFyZW50LmJ1c2luZXNzT2JqZWN0IHx8IG5ld0RhdGFTdG9yZVBhcmVudDtcclxuXHJcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdkYXRhU3RvcmUudXBkYXRlQ29udGFpbm1lbnQnLCB7XHJcbiAgICAgICAgZGF0YVN0b3JlQm86IGRhdGFTdG9yZUJvLFxyXG4gICAgICAgIG5ld1NlbWFudGljUGFyZW50OiBuZXdEYXRhU3RvcmVQYXJlbnRCby5wcm9jZXNzUmVmIHx8IG5ld0RhdGFTdG9yZVBhcmVudEJvLFxyXG4gICAgICAgIG5ld0RpUGFyZW50OiBuZXdEYXRhU3RvcmVQYXJlbnRCby5kaVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLyBkaXNhYmxlIGF1dG8tcmVzaXplIGZvciBkYXRhIHN0b3Jlc1xyXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuXHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xyXG5cclxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJykgJiZcclxuICAgICAgICBzaGFwZS50eXBlICE9PSAnbGFiZWwnKSB7XHJcblxyXG4gICAgICBpZiAoIWNvbnRleHQuaGludHMpIHtcclxuICAgICAgICBjb250ZXh0LmhpbnRzID0ge307XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHByZXZlbnQgYXV0byByZXNpemluZ1xyXG4gICAgICBjb250ZXh0LmhpbnRzLmF1dG9SZXNpemUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIGRpc2FibGUgYXV0by1yZXNpemUgZm9yIGRhdGEgc3RvcmVzXHJcbiAgdGhpcy5wcmVFeGVjdXRlKCdlbGVtZW50cy5tb3ZlJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcztcclxuXHJcbiAgICB2YXIgZGF0YVN0b3JlUmVmZXJlbmNlcyA9IHNoYXBlcy5maWx0ZXIoZnVuY3Rpb24oc2hhcGUpIHtcclxuICAgICAgcmV0dXJuIGlzKHNoYXBlLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChkYXRhU3RvcmVSZWZlcmVuY2VzLmxlbmd0aCkge1xyXG4gICAgICBpZiAoIWNvbnRleHQuaGludHMpIHtcclxuICAgICAgICBjb250ZXh0LmhpbnRzID0ge307XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHByZXZlbnQgYXV0byByZXNpemluZyBmb3IgZGF0YSBzdG9yZSByZWZlcmVuY2VzXHJcbiAgICAgIGNvbnRleHQuaGludHMuYXV0b1Jlc2l6ZSA9IHNoYXBlcy5maWx0ZXIoZnVuY3Rpb24oc2hhcGUpIHtcclxuICAgICAgICByZXR1cm4gIWlzKHNoYXBlLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyB1cGRhdGUgcGFyZW50IG9uIGRhdGEgc3RvcmUgY3JlYXRlZFxyXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxyXG4gICAgICAgIHBhcmVudCA9IHNoYXBlLnBhcmVudDtcclxuXHJcblxyXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnKSAmJlxyXG4gICAgICAgIHNoYXBlLnR5cGUgIT09ICdsYWJlbCcgJiZcclxuICAgICAgICBpcyhwYXJlbnQsICdicG1uOkNvbGxhYm9yYXRpb24nKSkge1xyXG5cclxuICAgICAgdXBkYXRlRGF0YVN0b3JlUGFyZW50KHNoYXBlKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIHVwZGF0ZSBwYXJlbnQgb24gZGF0YSBzdG9yZSBtb3ZlZFxyXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcclxuICAgICAgICBvbGRQYXJlbnQgPSBjb250ZXh0Lm9sZFBhcmVudCxcclxuICAgICAgICBwYXJlbnQgPSBzaGFwZS5wYXJlbnQ7XHJcblxyXG4gICAgaWYgKGlzKG9sZFBhcmVudCwgJ2JwbW46Q29sbGFib3JhdGlvbicpKSB7XHJcblxyXG4gICAgICAvLyBkbyBub3RoaW5nIGlmIG5vdCBuZWNlc3NhcnlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJykgJiZcclxuICAgICAgICBzaGFwZS50eXBlICE9PSAnbGFiZWwnICYmXHJcbiAgICAgICAgaXMocGFyZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJykpIHtcclxuXHJcbiAgICAgIHZhciBwYXJ0aWNpcGFudCA9IGlzKG9sZFBhcmVudCwgJ2JwbW46UGFydGljaXBhbnQnKSA/XHJcbiAgICAgICAgb2xkUGFyZW50IDpcclxuICAgICAgICBnZXRBbmNlc3RvcihvbGRQYXJlbnQsICdicG1uOlBhcnRpY2lwYW50Jyk7XHJcblxyXG4gICAgICB1cGRhdGVEYXRhU3RvcmVQYXJlbnQoc2hhcGUsIHBhcnRpY2lwYW50KTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIHVwZGF0ZSBkYXRhIHN0b3JlIHBhcmVudHMgb24gcGFydGljaXBhbnQgb3Igc3VicHJvY2VzcyBkZWxldGVkXHJcbiAgdGhpcy5wb3N0RXhlY3V0ZSgnc2hhcGUuZGVsZXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXHJcbiAgICAgICAgcm9vdEVsZW1lbnQgPSBjYW52YXMuZ2V0Um9vdEVsZW1lbnQoKTtcclxuXHJcbiAgICBpZiAoaXNBbnkoc2hhcGUsIFsgJ2JwbW46UGFydGljaXBhbnQnLCAnYnBtbjpTdWJQcm9jZXNzJyBdKVxyXG4gICAgICAgICYmIGlzKHJvb3RFbGVtZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJykpIHtcclxuICAgICAgZ2V0RGF0YVN0b3Jlcyhyb290RWxlbWVudClcclxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKGRhdGFTdG9yZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGlzRGVzY2VuZGFudChkYXRhU3RvcmUsIHNoYXBlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGRhdGFTdG9yZSkge1xyXG4gICAgICAgICAgdXBkYXRlRGF0YVN0b3JlUGFyZW50KGRhdGFTdG9yZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vIHVwZGF0ZSBkYXRhIHN0b3JlIHBhcmVudHMgb24gY29sbGFib3JhdGlvbiAtPiBwcm9jZXNzXHJcbiAgdGhpcy5wb3N0RXhlY3V0ZSgnY2FudmFzLnVwZGF0ZVJvb3QnLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIG9sZFJvb3QgPSBjb250ZXh0Lm9sZFJvb3QsXHJcbiAgICAgICAgbmV3Um9vdCA9IGNvbnRleHQubmV3Um9vdDtcclxuXHJcbiAgICB2YXIgZGF0YVN0b3JlcyA9IGdldERhdGFTdG9yZXMob2xkUm9vdCk7XHJcblxyXG4gICAgZGF0YVN0b3Jlcy5mb3JFYWNoKGZ1bmN0aW9uKGRhdGFTdG9yZSkge1xyXG5cclxuICAgICAgaWYgKGlzKG5ld1Jvb3QsICdicG1uOlByb2Nlc3MnKSkge1xyXG4gICAgICAgIHVwZGF0ZURhdGFTdG9yZVBhcmVudChkYXRhU3RvcmUsIG5ld1Jvb3QpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbkRhdGFTdG9yZUJlaGF2aW9yLiRpbmplY3QgPSBbXHJcbiAgJ2NhbnZhcycsXHJcbiAgJ2NvbW1hbmRTdGFjaycsXHJcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXHJcbiAgJ2V2ZW50QnVzJyxcclxuXTtcclxuXHJcbmluaGVyaXRzKERhdGFTdG9yZUJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xyXG5cclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5cclxuZnVuY3Rpb24gaXNEZXNjZW5kYW50KGRlc2NlbmRhbnQsIGFuY2VzdG9yKSB7XHJcbiAgdmFyIGRlc2NlbmRhbnRCbyA9IGRlc2NlbmRhbnQuYnVzaW5lc3NPYmplY3QgfHwgZGVzY2VuZGFudCxcclxuICAgICAgYW5jZXN0b3JCbyA9IGFuY2VzdG9yLmJ1c2luZXNzT2JqZWN0IHx8IGFuY2VzdG9yO1xyXG5cclxuICB3aGlsZSAoZGVzY2VuZGFudEJvLiRwYXJlbnQpIHtcclxuICAgIGlmIChkZXNjZW5kYW50Qm8uJHBhcmVudCA9PT0gYW5jZXN0b3JCby5wcm9jZXNzUmVmIHx8IGFuY2VzdG9yQm8pIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZGVzY2VuZGFudEJvID0gZGVzY2VuZGFudEJvLiRwYXJlbnQ7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEFuY2VzdG9yKGVsZW1lbnQsIHR5cGUpIHtcclxuXHJcbiAgd2hpbGUgKGVsZW1lbnQucGFyZW50KSB7XHJcbiAgICBpZiAoaXMoZWxlbWVudC5wYXJlbnQsIHR5cGUpKSB7XHJcbiAgICAgIHJldHVybiBlbGVtZW50LnBhcmVudDtcclxuICAgIH1cclxuXHJcbiAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnQ7XHJcbiAgfVxyXG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRDaGlsZExhbmVzXG59IGZyb20gJy4uL3V0aWwvTGFuZVV0aWwnO1xuXG5pbXBvcnQge1xuICBlYWNoRWxlbWVudFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0VsZW1lbnRzJztcblxuXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xuXG5cbi8qKlxuICogQlBNTiBzcGVjaWZpYyBkZWxldGUgbGFuZSBiZWhhdmlvclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEZWxldGVMYW5lQmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nLCBzcGFjZVRvb2wpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cblxuICBmdW5jdGlvbiBjb21wZW5zYXRlTGFuZURlbGV0ZShzaGFwZSwgb2xkUGFyZW50KSB7XG5cbiAgICB2YXIgc2libGluZ3MgPSBnZXRDaGlsZExhbmVzKG9sZFBhcmVudCk7XG5cbiAgICB2YXIgdG9wQWZmZWN0ZWQgPSBbXTtcbiAgICB2YXIgYm90dG9tQWZmZWN0ZWQgPSBbXTtcblxuICAgIGVhY2hFbGVtZW50KHNpYmxpbmdzLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICAgIGlmIChlbGVtZW50LnkgPiBzaGFwZS55KSB7XG4gICAgICAgIGJvdHRvbUFmZmVjdGVkLnB1c2goZWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3BBZmZlY3RlZC5wdXNoKGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZWxlbWVudC5jaGlsZHJlbjtcbiAgICB9KTtcblxuICAgIGlmICghc2libGluZ3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG9mZnNldDtcblxuICAgIGlmIChib3R0b21BZmZlY3RlZC5sZW5ndGggJiYgdG9wQWZmZWN0ZWQubGVuZ3RoKSB7XG4gICAgICBvZmZzZXQgPSBzaGFwZS5oZWlnaHQgLyAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHRvcEFkanVzdG1lbnRzLFxuICAgICAgICBib3R0b21BZGp1c3RtZW50cztcblxuICAgIGlmICh0b3BBZmZlY3RlZC5sZW5ndGgpIHtcbiAgICAgIHRvcEFkanVzdG1lbnRzID0gc3BhY2VUb29sLmNhbGN1bGF0ZUFkanVzdG1lbnRzKFxuICAgICAgICB0b3BBZmZlY3RlZCwgJ3knLCBvZmZzZXQsIHNoYXBlLnkgLSAxMCk7XG5cbiAgICAgIHNwYWNlVG9vbC5tYWtlU3BhY2UoXG4gICAgICAgIHRvcEFkanVzdG1lbnRzLm1vdmluZ1NoYXBlcyxcbiAgICAgICAgdG9wQWRqdXN0bWVudHMucmVzaXppbmdTaGFwZXMsXG4gICAgICAgIHsgeDogMCwgeTogb2Zmc2V0IH0sICdzJyk7XG4gICAgfVxuXG4gICAgaWYgKGJvdHRvbUFmZmVjdGVkLmxlbmd0aCkge1xuICAgICAgYm90dG9tQWRqdXN0bWVudHMgPSBzcGFjZVRvb2wuY2FsY3VsYXRlQWRqdXN0bWVudHMoXG4gICAgICAgIGJvdHRvbUFmZmVjdGVkLCAneScsIC1vZmZzZXQsIHNoYXBlLnkgKyBzaGFwZS5oZWlnaHQgKyAxMCk7XG5cbiAgICAgIHNwYWNlVG9vbC5tYWtlU3BhY2UoXG4gICAgICAgIGJvdHRvbUFkanVzdG1lbnRzLm1vdmluZ1NoYXBlcyxcbiAgICAgICAgYm90dG9tQWRqdXN0bWVudHMucmVzaXppbmdTaGFwZXMsXG4gICAgICAgIHsgeDogMCwgeTogLW9mZnNldCB9LCAnbicpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIEFkanVzdCBzaXplcyBvZiBvdGhlciBsYW5lcyBhZnRlciBsYW5lIGRlbGV0aW9uXG4gICAqL1xuICB0aGlzLnBvc3RFeGVjdXRlZCgnc2hhcGUuZGVsZXRlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgb2xkUGFyZW50ID0gY29udGV4dC5vbGRQYXJlbnQ7XG5cbiAgICAvLyBvbmx5IGNvbXBlbnNhdGUgbGFuZSBkZWxldGVzXG4gICAgaWYgKCFpcyhzaGFwZSwgJ2JwbW46TGFuZScpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY29tcGVuc2F0ZSByb290IGRlbGV0ZXMgb25seVxuICAgIGlmIChoaW50cyAmJiBoaW50cy5uZXN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb21wZW5zYXRlTGFuZURlbGV0ZShzaGFwZSwgb2xkUGFyZW50KTtcbiAgfSk7XG59XG5cbkRlbGV0ZUxhbmVCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnLFxuICAnc3BhY2VUb29sJ1xuXTtcblxuaW5oZXJpdHMoRGVsZXRlTGFuZUJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpOyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQgeyBpc0xhYmVsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xuXG5cbi8qKlxuICogUmVwbGFjZSBib3VuZGFyeSBldmVudCB3aXRoIGludGVybWVkaWF0ZSBldmVudCB3aGVuIGNyZWF0aW5nIG9yIG1vdmluZyByZXN1bHRzIGluIGRldGFjaGVkIGV2ZW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEZXRhY2hFdmVudEJlaGF2aW9yKGJwbW5SZXBsYWNlLCBpbmplY3Rvcikge1xuICBpbmplY3Rvci5pbnZva2UoQ29tbWFuZEludGVyY2VwdG9yLCB0aGlzKTtcblxuICB0aGlzLl9icG1uUmVwbGFjZSA9IGJwbW5SZXBsYWNlO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLnBvc3RFeGVjdXRlZCgnZWxlbWVudHMuY3JlYXRlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cztcblxuICAgIGVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbihzaGFwZSkge1xuICAgICAgdmFyIGhvc3QgPSBzaGFwZS5ob3N0O1xuXG4gICAgICByZXR1cm4gc2hvdWxkUmVwbGFjZShzaGFwZSwgaG9zdCk7XG4gICAgfSkubWFwKGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICByZXR1cm4gZWxlbWVudHMuaW5kZXhPZihzaGFwZSk7XG4gICAgfSkuZm9yRWFjaChmdW5jdGlvbihpbmRleCkge1xuICAgICAgY29udGV4dC5lbGVtZW50c1sgaW5kZXggXSA9IHNlbGYucmVwbGFjZVNoYXBlKGVsZW1lbnRzWyBpbmRleCBdKTtcbiAgICB9KTtcbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5wcmVFeGVjdXRlKCdlbGVtZW50cy5tb3ZlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzLFxuICAgICAgICBuZXdIb3N0ID0gY29udGV4dC5uZXdIb3N0O1xuXG4gICAgc2hhcGVzLmZvckVhY2goZnVuY3Rpb24oc2hhcGUsIGluZGV4KSB7XG4gICAgICB2YXIgaG9zdCA9IHNoYXBlLmhvc3Q7XG5cbiAgICAgIGlmIChzaG91bGRSZXBsYWNlKHNoYXBlLCBpbmNsdWRlcyhzaGFwZXMsIGhvc3QpID8gaG9zdCA6IG5ld0hvc3QpKSB7XG4gICAgICAgIHNoYXBlc1sgaW5kZXggXSA9IHNlbGYucmVwbGFjZVNoYXBlKHNoYXBlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdHJ1ZSk7XG59XG5cbkRldGFjaEV2ZW50QmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2JwbW5SZXBsYWNlJyxcbiAgJ2luamVjdG9yJ1xuXTtcblxuaW5oZXJpdHMoRGV0YWNoRXZlbnRCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuRGV0YWNoRXZlbnRCZWhhdmlvci5wcm90b3R5cGUucmVwbGFjZVNoYXBlID0gZnVuY3Rpb24oc2hhcGUpIHtcbiAgdmFyIGV2ZW50RGVmaW5pdGlvbiA9IGdldEV2ZW50RGVmaW5pdGlvbihzaGFwZSksXG4gICAgICBpbnRlcm1lZGlhdGVFdmVudDtcblxuICBpZiAoZXZlbnREZWZpbml0aW9uKSB7XG4gICAgaW50ZXJtZWRpYXRlRXZlbnQgPSB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6IGV2ZW50RGVmaW5pdGlvbi4kdHlwZVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJtZWRpYXRlRXZlbnQgPSB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50J1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gdGhpcy5fYnBtblJlcGxhY2UucmVwbGFjZUVsZW1lbnQoc2hhcGUsIGludGVybWVkaWF0ZUV2ZW50LCB7IGxheW91dENvbm5lY3Rpb246IGZhbHNlIH0pO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0RXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXG4gICAgICBldmVudERlZmluaXRpb25zID0gYnVzaW5lc3NPYmplY3QuZXZlbnREZWZpbml0aW9ucztcblxuICByZXR1cm4gZXZlbnREZWZpbml0aW9ucyAmJiBldmVudERlZmluaXRpb25zWzBdO1xufVxuXG5mdW5jdGlvbiBzaG91bGRSZXBsYWNlKHNoYXBlLCBob3N0KSB7XG4gIHJldHVybiAhaXNMYWJlbChzaGFwZSkgJiYgaXMoc2hhcGUsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSAmJiAhaG9zdDtcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIGl0ZW0pIHtcbiAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSkgIT09IC0xO1xufSIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7XG4gIGFzc2lnbixcbiAgZmlsdGVyLFxuICBmaW5kLFxuICBpc051bWJlclxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7IGdldE1pZCB9IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7XG4gIGdldEFwcHJveEludGVyc2VjdGlvblxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0xpbmVJbnRlcnNlY3Rpb24nO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERyb3BPbkZsb3dCZWhhdmlvcihldmVudEJ1cywgYnBtblJ1bGVzLCBtb2RlbGluZykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICAvKipcbiAgICogUmVjb25uZWN0IHN0YXJ0IC8gZW5kIG9mIGEgY29ubmVjdGlvbiBhZnRlclxuICAgKiBkcm9wcGluZyBhbiBlbGVtZW50IG9uIGEgZmxvdy5cbiAgICovXG5cbiAgZnVuY3Rpb24gaW5zZXJ0U2hhcGUoc2hhcGUsIHRhcmdldEZsb3csIHBvc2l0aW9uT3JCb3VuZHMpIHtcbiAgICB2YXIgd2F5cG9pbnRzID0gdGFyZ2V0Rmxvdy53YXlwb2ludHMsXG4gICAgICAgIHdheXBvaW50c0JlZm9yZSxcbiAgICAgICAgd2F5cG9pbnRzQWZ0ZXIsXG4gICAgICAgIGRvY2tpbmdQb2ludCxcbiAgICAgICAgc291cmNlLFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIGluY29taW5nQ29ubmVjdGlvbixcbiAgICAgICAgb3V0Z29pbmdDb25uZWN0aW9uLFxuICAgICAgICBvbGRPdXRnb2luZyA9IHNoYXBlLm91dGdvaW5nLnNsaWNlKCksXG4gICAgICAgIG9sZEluY29taW5nID0gc2hhcGUuaW5jb21pbmcuc2xpY2UoKTtcblxuICAgIHZhciBtaWQ7XG5cbiAgICBpZiAoaXNOdW1iZXIocG9zaXRpb25PckJvdW5kcy53aWR0aCkpIHtcbiAgICAgIG1pZCA9IGdldE1pZChwb3NpdGlvbk9yQm91bmRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWlkID0gcG9zaXRpb25PckJvdW5kcztcbiAgICB9XG5cbiAgICB2YXIgaW50ZXJzZWN0aW9uID0gZ2V0QXBwcm94SW50ZXJzZWN0aW9uKHdheXBvaW50cywgbWlkKTtcblxuICAgIGlmIChpbnRlcnNlY3Rpb24pIHtcbiAgICAgIHdheXBvaW50c0JlZm9yZSA9IHdheXBvaW50cy5zbGljZSgwLCBpbnRlcnNlY3Rpb24uaW5kZXgpO1xuICAgICAgd2F5cG9pbnRzQWZ0ZXIgPSB3YXlwb2ludHMuc2xpY2UoaW50ZXJzZWN0aW9uLmluZGV4ICsgKGludGVyc2VjdGlvbi5iZW5kcG9pbnQgPyAxIDogMCkpO1xuXG4gICAgICAvLyBkdWUgdG8gaW5hY2N1cmFjeSBpbnRlcnNlY3Rpb24gbWlnaHQgaGF2ZSBiZWVuIGZvdW5kXG4gICAgICBpZiAoIXdheXBvaW50c0JlZm9yZS5sZW5ndGggfHwgIXdheXBvaW50c0FmdGVyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRvY2tpbmdQb2ludCA9IGludGVyc2VjdGlvbi5iZW5kcG9pbnQgPyB3YXlwb2ludHNbaW50ZXJzZWN0aW9uLmluZGV4XSA6IG1pZDtcblxuICAgICAgLy8gaWYgbGFzdCB3YXlwb2ludEJlZm9yZSBpcyBpbnNpZGUgc2hhcGUncyBib3VuZHMsIGlnbm9yZSBkb2NraW5nIHBvaW50XG4gICAgICBpZiAoIWlzUG9pbnRJbnNpZGVCQm94KHNoYXBlLCB3YXlwb2ludHNCZWZvcmVbd2F5cG9pbnRzQmVmb3JlLmxlbmd0aC0xXSkpIHtcbiAgICAgICAgd2F5cG9pbnRzQmVmb3JlLnB1c2goY29weShkb2NraW5nUG9pbnQpKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgZmlyc3Qgd2F5cG9pbnRBZnRlciBpcyBpbnNpZGUgc2hhcGUncyBib3VuZHMsIGlnbm9yZSBkb2NraW5nIHBvaW50XG4gICAgICBpZiAoIWlzUG9pbnRJbnNpZGVCQm94KHNoYXBlLCB3YXlwb2ludHNBZnRlclswXSkpIHtcbiAgICAgICAgd2F5cG9pbnRzQWZ0ZXIudW5zaGlmdChjb3B5KGRvY2tpbmdQb2ludCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNvdXJjZSA9IHRhcmdldEZsb3cuc291cmNlO1xuICAgIHRhcmdldCA9IHRhcmdldEZsb3cudGFyZ2V0O1xuXG4gICAgaWYgKGJwbW5SdWxlcy5jYW5Db25uZWN0KHNvdXJjZSwgc2hhcGUsIHRhcmdldEZsb3cpKSB7XG5cbiAgICAgIC8vIHJlY29ubmVjdCBzb3VyY2UgLT4gaW5zZXJ0ZWQgc2hhcGVcbiAgICAgIG1vZGVsaW5nLnJlY29ubmVjdEVuZCh0YXJnZXRGbG93LCBzaGFwZSwgd2F5cG9pbnRzQmVmb3JlIHx8IG1pZCk7XG5cbiAgICAgIGluY29taW5nQ29ubmVjdGlvbiA9IHRhcmdldEZsb3c7XG4gICAgfVxuXG4gICAgaWYgKGJwbW5SdWxlcy5jYW5Db25uZWN0KHNoYXBlLCB0YXJnZXQsIHRhcmdldEZsb3cpKSB7XG5cbiAgICAgIGlmICghaW5jb21pbmdDb25uZWN0aW9uKSB7XG5cbiAgICAgICAgLy8gcmVjb25uZWN0IGluc2VydGVkIHNoYXBlIC0+IGVuZFxuICAgICAgICBtb2RlbGluZy5yZWNvbm5lY3RTdGFydCh0YXJnZXRGbG93LCBzaGFwZSwgd2F5cG9pbnRzQWZ0ZXIgfHwgbWlkKTtcblxuICAgICAgICBvdXRnb2luZ0Nvbm5lY3Rpb24gPSB0YXJnZXRGbG93O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0Z29pbmdDb25uZWN0aW9uID0gbW9kZWxpbmcuY29ubmVjdChcbiAgICAgICAgICBzaGFwZSwgdGFyZ2V0LCB7IHR5cGU6IHRhcmdldEZsb3cudHlwZSwgd2F5cG9pbnRzOiB3YXlwb2ludHNBZnRlciB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGR1cGxpY2F0ZUNvbm5lY3Rpb25zID0gW10uY29uY2F0KFxuXG4gICAgICBpbmNvbWluZ0Nvbm5lY3Rpb24gJiYgZmlsdGVyKG9sZEluY29taW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uLnNvdXJjZSA9PT0gaW5jb21pbmdDb25uZWN0aW9uLnNvdXJjZTtcbiAgICAgIH0pIHx8IFtdLFxuXG4gICAgICBvdXRnb2luZ0Nvbm5lY3Rpb24gJiYgZmlsdGVyKG9sZE91dGdvaW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uLnRhcmdldCA9PT0gb3V0Z29pbmdDb25uZWN0aW9uLnRhcmdldDtcbiAgICAgIH0pIHx8IFtdXG4gICAgKTtcblxuICAgIGlmIChkdXBsaWNhdGVDb25uZWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIG1vZGVsaW5nLnJlbW92ZUVsZW1lbnRzKGR1cGxpY2F0ZUNvbm5lY3Rpb25zKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLnByZUV4ZWN1dGUoJ2VsZW1lbnRzLm1vdmUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgbmV3UGFyZW50ID0gY29udGV4dC5uZXdQYXJlbnQsXG4gICAgICAgIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzLFxuICAgICAgICBkZWx0YSA9IGNvbnRleHQuZGVsdGEsXG4gICAgICAgIHNoYXBlID0gc2hhcGVzWzBdO1xuXG4gICAgaWYgKCFzaGFwZSB8fCAhbmV3UGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIG5ldyBwYXJlbnQgaXMgYSBjb25uZWN0aW9uLFxuICAgIC8vIGNoYW5nZSBpdCB0byB0aGUgbmV3IHBhcmVudCdzIHBhcmVudFxuICAgIGlmIChuZXdQYXJlbnQgJiYgbmV3UGFyZW50LndheXBvaW50cykge1xuICAgICAgY29udGV4dC5uZXdQYXJlbnQgPSBuZXdQYXJlbnQgPSBuZXdQYXJlbnQucGFyZW50O1xuICAgIH1cblxuICAgIHZhciBzaGFwZU1pZCA9IGdldE1pZChzaGFwZSk7XG4gICAgdmFyIG5ld1NoYXBlTWlkID0ge1xuICAgICAgeDogc2hhcGVNaWQueCArIGRlbHRhLngsXG4gICAgICB5OiBzaGFwZU1pZC55ICsgZGVsdGEueVxuICAgIH07XG5cbiAgICAvLyBmaW5kIGEgY29ubmVjdGlvbiB3aGljaCBpbnRlcnNlY3RzIHdpdGggdGhlXG4gICAgLy8gZWxlbWVudCdzIG1pZCBwb2ludFxuICAgIHZhciBjb25uZWN0aW9uID0gZmluZChuZXdQYXJlbnQuY2hpbGRyZW4sIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHZhciBjYW5JbnNlcnQgPSBicG1uUnVsZXMuY2FuSW5zZXJ0KHNoYXBlcywgZWxlbWVudCk7XG5cbiAgICAgIHJldHVybiBjYW5JbnNlcnQgJiYgZ2V0QXBwcm94SW50ZXJzZWN0aW9uKGVsZW1lbnQud2F5cG9pbnRzLCBuZXdTaGFwZU1pZCk7XG4gICAgfSk7XG5cbiAgICBpZiAoY29ubmVjdGlvbikge1xuICAgICAgY29udGV4dC50YXJnZXRGbG93ID0gY29ubmVjdGlvbjtcbiAgICAgIGNvbnRleHQucG9zaXRpb24gPSBuZXdTaGFwZU1pZDtcbiAgICB9XG5cbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ2VsZW1lbnRzLm1vdmUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgc2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIHRhcmdldEZsb3cgPSBjb250ZXh0LnRhcmdldEZsb3csXG4gICAgICAgIHBvc2l0aW9uID0gY29udGV4dC5wb3NpdGlvbjtcblxuICAgIGlmICh0YXJnZXRGbG93KSB7XG4gICAgICBpbnNlcnRTaGFwZShzaGFwZXNbMF0sIHRhcmdldEZsb3csIHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5wcmVFeGVjdXRlKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgcGFyZW50ID0gY29udGV4dC5wYXJlbnQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChicG1uUnVsZXMuY2FuSW5zZXJ0KHNoYXBlLCBwYXJlbnQpKSB7XG4gICAgICBjb250ZXh0LnRhcmdldEZsb3cgPSBwYXJlbnQ7XG4gICAgICBjb250ZXh0LnBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgfVxuICB9LCB0cnVlKTtcblxuICB0aGlzLnBvc3RFeGVjdXRlZCgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgdGFyZ2V0RmxvdyA9IGNvbnRleHQudGFyZ2V0RmxvdyxcbiAgICAgICAgcG9zaXRpb25PckJvdW5kcyA9IGNvbnRleHQucG9zaXRpb247XG5cbiAgICBpZiAodGFyZ2V0Rmxvdykge1xuICAgICAgaW5zZXJ0U2hhcGUoc2hhcGUsIHRhcmdldEZsb3csIHBvc2l0aW9uT3JCb3VuZHMpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5cbmluaGVyaXRzKERyb3BPbkZsb3dCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuRHJvcE9uRmxvd0JlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdicG1uUnVsZXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzUG9pbnRJbnNpZGVCQm94KGJib3gsIHBvaW50KSB7XG4gIHZhciB4ID0gcG9pbnQueCxcbiAgICAgIHkgPSBwb2ludC55O1xuXG4gIHJldHVybiB4ID49IGJib3gueCAmJlxuICAgIHggPD0gYmJveC54ICsgYmJveC53aWR0aCAmJlxuICAgIHkgPj0gYmJveC55ICYmXG4gICAgeSA8PSBiYm94LnkgKyBiYm94LmhlaWdodDtcbn1cblxuZnVuY3Rpb24gY29weShvYmopIHtcbiAgcmV0dXJuIGFzc2lnbih7fSwgb2JqKTtcbn1cblxuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFdmVudEJhc2VkR2F0ZXdheUJlaGF2aW9yKGV2ZW50QnVzLCBtb2RlbGluZykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICAvKipcbiAgICogUmVtb3ZlIGV4aXN0aW5nIHNlcXVlbmNlIGZsb3dzIG9mIGV2ZW50LWJhc2VkIHRhcmdldCBiZWZvcmUgY29ubmVjdGluZ1xuICAgKiBmcm9tIGV2ZW50LWJhc2VkIGdhdGV3YXkuXG4gICAqL1xuICB0aGlzLnByZUV4ZWN1dGVkKCdjb25uZWN0aW9uLmNyZWF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgZXhpc3RpbmdJbmNvbWluZ0Nvbm5lY3Rpb25zID0gdGFyZ2V0LmluY29taW5nLnNsaWNlKCk7XG5cbiAgICBpZiAoY29udGV4dC5oaW50cyAmJiBjb250ZXh0LmhpbnRzLmNyZWF0ZUVsZW1lbnRzQmVoYXZpb3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaXMoc291cmNlLCAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheScpICYmXG4gICAgICB0YXJnZXQuaW5jb21pbmcubGVuZ3RoXG4gICAgKSB7XG5cbiAgICAgIGV4aXN0aW5nSW5jb21pbmdDb25uZWN0aW9ucy5maWx0ZXIoaXNTZXF1ZW5jZUZsb3cpXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uKHNlcXVlbmNlRmxvdykge1xuICAgICAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oc2VxdWVuY2VGbG93KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogIEFmdGVyIHJlcGxhY2luZyBzaGFwZSB3aXRoIGV2ZW50LWJhc2VkIGdhdGV3YXksIHJlbW92ZSBpbmNvbWluZyBzZXF1ZW5jZVxuICAgKiAgZmxvd3Mgb2YgZXZlbnQtYmFzZWQgdGFyZ2V0cyB3aGljaCBkbyBub3QgYmVsb25nIHRvIGV2ZW50LWJhc2VkIGdhdGV3YXlcbiAgICogIHNvdXJjZS5cbiAgICovXG4gIHRoaXMucHJlRXhlY3V0ZWQoJ3NoYXBlLnJlcGxhY2UnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIG5ld1NoYXBlID0gZXZlbnQuY29udGV4dC5uZXdTaGFwZSxcbiAgICAgICAgbmV3U2hhcGVUYXJnZXRzLFxuICAgICAgICBuZXdTaGFwZVRhcmdldHNJbmNvbWluZ1NlcXVlbmNlRmxvd3M7XG5cbiAgICBpZiAoIWlzKG5ld1NoYXBlLCAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheScpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbmV3U2hhcGVUYXJnZXRzID0gbmV3U2hhcGUub3V0Z29pbmcuZmlsdGVyKGlzU2VxdWVuY2VGbG93KVxuICAgICAgLm1hcChmdW5jdGlvbihzZXF1ZW5jZUZsb3cpIHtcbiAgICAgICAgcmV0dXJuIHNlcXVlbmNlRmxvdy50YXJnZXQ7XG4gICAgICB9KTtcblxuICAgIG5ld1NoYXBlVGFyZ2V0c0luY29taW5nU2VxdWVuY2VGbG93cyA9IG5ld1NoYXBlVGFyZ2V0cy5yZWR1Y2UoZnVuY3Rpb24oc2VxdWVuY2VGbG93cywgdGFyZ2V0KSB7XG4gICAgICB2YXIgaW5jb21pbmdTZXF1ZW5jZUZsb3dzID0gdGFyZ2V0LmluY29taW5nLmZpbHRlcihpc1NlcXVlbmNlRmxvdyk7XG5cbiAgICAgIHJldHVybiBzZXF1ZW5jZUZsb3dzLmNvbmNhdChpbmNvbWluZ1NlcXVlbmNlRmxvd3MpO1xuICAgIH0sIFtdKTtcblxuICAgIG5ld1NoYXBlVGFyZ2V0c0luY29taW5nU2VxdWVuY2VGbG93cy5mb3JFYWNoKGZ1bmN0aW9uKHNlcXVlbmNlRmxvdykge1xuICAgICAgaWYgKHNlcXVlbmNlRmxvdy5zb3VyY2UgIT09IG5ld1NoYXBlKSB7XG4gICAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oc2VxdWVuY2VGbG93KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbkV2ZW50QmFzZWRHYXRld2F5QmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuaW5oZXJpdHMoRXZlbnRCYXNlZEdhdGV3YXlCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc1NlcXVlbmNlRmxvdyhjb25uZWN0aW9uKSB7XG4gIHJldHVybiBpcyhjb25uZWN0aW9uLCAnYnBtbjpTZXF1ZW5jZUZsb3cnKTtcbn1cbiIsImltcG9ydCB7IGdldExhbmVzUm9vdCB9IGZyb20gJy4uL3V0aWwvTGFuZVV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBpc0FueSB9IGZyb20gJy4uL3V0aWwvTW9kZWxpbmdVdGlsJztcclxuXHJcbnZhciBISUdIX1BSSU9SSVRZID0gMTUwMDtcclxudmFyIEhJR0hFU1RfUFJJT1JJVFkgPSAyMDAwO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDb3JyZWN0IGhvdmVyIHRhcmdldHMgaW4gY2VydGFpbiBzaXR1YXRpb25zIHRvIGltcHJvdmUgZGlhZ3JhbSBpbnRlcmFjdGlvbi5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xyXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBGaXhIb3ZlckJlaGF2aW9yKGVsZW1lbnRSZWdpc3RyeSwgZXZlbnRCdXMsIGNhbnZhcykge1xyXG5cclxuICBldmVudEJ1cy5vbihbXHJcbiAgICAnY3JlYXRlLmhvdmVyJyxcclxuICAgICdjcmVhdGUubW92ZScsXHJcbiAgICAnY3JlYXRlLmVuZCcsXHJcbiAgICAnc2hhcGUubW92ZS5ob3ZlcicsXHJcbiAgICAnc2hhcGUubW92ZS5tb3ZlJyxcclxuICAgICdzaGFwZS5tb3ZlLmVuZCdcclxuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSB8fCBldmVudC5zaGFwZSxcclxuICAgICAgICBob3ZlciA9IGV2ZW50LmhvdmVyO1xyXG5cclxuICAgIC8vIGVuc3VyZSBlbGVtZW50cyBhcmUgbm90IGRyb3BwZWQgb250byBhIGJwbW46TGFuZSBidXQgb250b1xyXG4gICAgLy8gdGhlIHVuZGVybHlpbmcgYnBtbjpQYXJ0aWNpcGFudFxyXG4gICAgaWYgKGlzKGhvdmVyLCAnYnBtbjpMYW5lJykgJiYgIWlzQW55KHNoYXBlLCBbICdicG1uOkxhbmUnLCAnYnBtbjpQYXJ0aWNpcGFudCcgXSkpIHtcclxuICAgICAgZXZlbnQuaG92ZXIgPSBnZXRMYW5lc1Jvb3QoaG92ZXIpO1xyXG4gICAgICBldmVudC5ob3ZlckdmeCA9IGVsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhldmVudC5ob3Zlcik7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XHJcblxyXG4gICAgLy8gZW5zdXJlIGJwbW46R3JvdXAgYW5kIGxhYmVsIGVsZW1lbnRzIGFyZSBkcm9wcGVkXHJcbiAgICAvLyBhbHdheXMgb250byB0aGUgcm9vdFxyXG4gICAgaWYgKGhvdmVyICE9PSByb290RWxlbWVudCAmJiAoc2hhcGUubGFiZWxUYXJnZXQgfHwgaXMoc2hhcGUsICdicG1uOkdyb3VwJykpKSB7XHJcbiAgICAgIGV2ZW50LmhvdmVyID0gcm9vdEVsZW1lbnQ7XHJcbiAgICAgIGV2ZW50LmhvdmVyR2Z4ID0gZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGV2ZW50LmhvdmVyKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdjb25uZWN0LmhvdmVyJyxcclxuICAgICdjb25uZWN0Lm91dCcsXHJcbiAgICAnY29ubmVjdC5lbmQnLFxyXG4gICAgJ2Nvbm5lY3QuY2xlYW51cCcsXHJcbiAgICAnZ2xvYmFsLWNvbm5lY3QuaG92ZXInLFxyXG4gICAgJ2dsb2JhbC1jb25uZWN0Lm91dCcsXHJcbiAgICAnZ2xvYmFsLWNvbm5lY3QuZW5kJyxcclxuICAgICdnbG9iYWwtY29ubmVjdC5jbGVhbnVwJ1xyXG4gIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgaG92ZXIgPSBldmVudC5ob3ZlcjtcclxuXHJcbiAgICAvLyBlbnN1cmUgY29ubmVjdGlvbnMgc3RhcnQvZW5kIG9uIGJwbW46UGFydGljaXBhbnQsXHJcbiAgICAvLyBub3QgdGhlIHVuZGVybHlpbmcgYnBtbjpMYW5lXHJcbiAgICBpZiAoaXMoaG92ZXIsICdicG1uOkxhbmUnKSkge1xyXG4gICAgICBldmVudC5ob3ZlciA9IGdldExhbmVzUm9vdChob3ZlcikgfHwgaG92ZXI7XHJcbiAgICAgIGV2ZW50LmhvdmVyR2Z4ID0gZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGV2ZW50LmhvdmVyKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdiZW5kcG9pbnQubW92ZS5ob3ZlcidcclxuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIGhvdmVyID0gZXZlbnQuaG92ZXIsXHJcbiAgICAgICAgdHlwZSA9IGNvbnRleHQudHlwZTtcclxuXHJcbiAgICAvLyBlbnN1cmUgcmVjb25uZWN0IHN0YXJ0L2VuZCBvbiBicG1uOlBhcnRpY2lwYW50LFxyXG4gICAgLy8gbm90IHRoZSB1bmRlcmx5aW5nIGJwbW46TGFuZVxyXG4gICAgaWYgKGlzKGhvdmVyLCAnYnBtbjpMYW5lJykgJiYgL3JlY29ubmVjdC8udGVzdCh0eXBlKSkge1xyXG4gICAgICBldmVudC5ob3ZlciA9IGdldExhbmVzUm9vdChob3ZlcikgfHwgaG92ZXI7XHJcbiAgICAgIGV2ZW50LmhvdmVyR2Z4ID0gZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGV2ZW50LmhvdmVyKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdjb25uZWN0LnN0YXJ0J1xyXG4gIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc3RhcnQgPSBjb250ZXh0LnN0YXJ0O1xyXG5cclxuICAgIC8vIGVuc3VyZSBjb25uZWN0IHN0YXJ0IG9uIGJwbW46UGFydGljaXBhbnQsXHJcbiAgICAvLyBub3QgdGhlIHVuZGVybHlpbmcgYnBtbjpMYW5lXHJcbiAgICBpZiAoaXMoc3RhcnQsICdicG1uOkxhbmUnKSkge1xyXG4gICAgICBjb250ZXh0LnN0YXJ0ID0gZ2V0TGFuZXNSb290KHN0YXJ0KSB8fCBzdGFydDtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIGFsbG93IG1vdmVtZW50IG9mIHBhcnRpY2lwYW50cyBmcm9tIGxhbmVzXHJcbiAgZXZlbnRCdXMub24oJ3NoYXBlLm1vdmUuc3RhcnQnLCBISUdIRVNUX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIHNoYXBlID0gZXZlbnQuc2hhcGU7XHJcblxyXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpMYW5lJykpIHtcclxuICAgICAgZXZlbnQuc2hhcGUgPSBnZXRMYW5lc1Jvb3Qoc2hhcGUpIHx8IHNoYXBlO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxufVxyXG5cclxuRml4SG92ZXJCZWhhdmlvci4kaW5qZWN0ID0gW1xyXG4gICdlbGVtZW50UmVnaXN0cnknLFxyXG4gICdldmVudEJ1cycsXHJcbiAgJ2NhbnZhcydcclxuXTsiLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHtcbiAgYWRkIGFzIGNvbGxlY3Rpb25BZGQsXG4gIHJlbW92ZSBhcyBjb2xsZWN0aW9uUmVtb3ZlXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvQ29sbGVjdGlvbnMnO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBjcmVhdGVDYXRlZ29yeVZhbHVlXG59IGZyb20gJy4vdXRpbC9DYXRlZ29yeVV0aWwnO1xuXG52YXIgSElHSF9QUklPUklUWSA9IDIwMDA7XG5cblxuLyoqXG4gKiBCUE1OIHNwZWNpZmljIEdyb3VwIGJlaGF2aW9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEdyb3VwQmVoYXZpb3IoXG4gICAgYnBtbkZhY3RvcnksXG4gICAgY2FudmFzLFxuICAgIGVsZW1lbnRSZWdpc3RyeSxcbiAgICBldmVudEJ1cyxcbiAgICBpbmplY3RvcixcbiAgICBtb2RkbGVDb3B5XG4pIHtcbiAgaW5qZWN0b3IuaW52b2tlKENvbW1hbmRJbnRlcmNlcHRvciwgdGhpcyk7XG5cbiAgLyoqXG4gICAqIEdldHMgcHJvY2VzcyBkZWZpbml0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSBkZWZpbml0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gZ2V0RGVmaW5pdGlvbnMoKSB7XG4gICAgdmFyIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgICAgIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3Qocm9vdEVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQ7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHJlZmVyZW5jZWQgY2F0ZWdvcnkgdmFsdWUgZm9yIGEgZ2l2ZW4gZ3JvdXAgc2hhcGVcbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmVSZWZlcmVuY2VkQ2F0ZWdvcnlWYWx1ZShzaGFwZSkge1xuXG4gICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpLFxuICAgICAgICBjYXRlZ29yeVZhbHVlID0gYnVzaW5lc3NPYmplY3QuY2F0ZWdvcnlWYWx1ZVJlZjtcblxuICAgIGlmICghY2F0ZWdvcnlWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjYXRlZ29yeSA9IGNhdGVnb3J5VmFsdWUuJHBhcmVudDtcblxuICAgIGlmICghY2F0ZWdvcnlWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbGxlY3Rpb25SZW1vdmUoY2F0ZWdvcnkuY2F0ZWdvcnlWYWx1ZSwgY2F0ZWdvcnlWYWx1ZSk7XG5cbiAgICAvLyBjbGVhbnVwIGNhdGVnb3J5IGlmIGl0IGlzIGVtcHR5XG4gICAgaWYgKGNhdGVnb3J5ICYmICFjYXRlZ29yeS5jYXRlZ29yeVZhbHVlLmxlbmd0aCkge1xuICAgICAgcmVtb3ZlQ2F0ZWdvcnkoY2F0ZWdvcnkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgZ2l2ZW4gY2F0ZWdvcnkgZnJvbSB0aGUgZGVmaW5pdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBjYXRlZ29yeVxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlQ2F0ZWdvcnkoY2F0ZWdvcnkpIHtcblxuICAgIHZhciBkZWZpbml0aW9ucyA9IGdldERlZmluaXRpb25zKCk7XG5cbiAgICBjb2xsZWN0aW9uUmVtb3ZlKGRlZmluaXRpb25zLmdldCgncm9vdEVsZW1lbnRzJyksIGNhdGVnb3J5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBncm91cCBlbGVtZW50IGluIHRoZSBjdXJyZW50IHJlZ2lzdHJ5XG4gICAqXG4gICAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5zaGFwZT59IGEgbGlzdCBvZiBncm91cCBzaGFwZXNcbiAgICovXG4gIGZ1bmN0aW9uIGdldEdyb3VwRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRSZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIGlzKGUsICdicG1uOkdyb3VwJyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGdpdmVuIGNhdGVnb3J5VmFsdWUgaXMgcmVmZXJlbmNlZCBpbiBvbmUgb2YgdGhlIGdpdmVuIGVsZW1lbnRzXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLnNoYXBlPn0gZWxlbWVudHNcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBjYXRlZ29yeVZhbHVlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiBpc1JlZmVyZW5jZWQoZWxlbWVudHMsIGNhdGVnb3J5VmFsdWUpIHtcbiAgICByZXR1cm4gZWxlbWVudHMuc29tZShmdW5jdGlvbihlKSB7XG5cbiAgICAgIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGUpO1xuXG4gICAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuY2F0ZWdvcnlWYWx1ZVJlZlxuICAgICAgICAmJiBidXNpbmVzc09iamVjdC5jYXRlZ29yeVZhbHVlUmVmID09PSBjYXRlZ29yeVZhbHVlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHJlbW92ZSByZWZlcmVuY2VkIGNhdGVnb3J5ICsgdmFsdWUgd2hlbiBncm91cCB3YXMgZGVsZXRlZFxuICAgKi9cbiAgdGhpcy5leGVjdXRlZCgnc2hhcGUuZGVsZXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpHcm91cCcpKSB7XG5cbiAgICAgIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KHNoYXBlKSxcbiAgICAgICAgICBjYXRlZ29yeVZhbHVlUmVmID0gYnVzaW5lc3NPYmplY3QuY2F0ZWdvcnlWYWx1ZVJlZixcbiAgICAgICAgICBncm91cEVsZW1lbnRzID0gZ2V0R3JvdXBFbGVtZW50cygpO1xuXG4gICAgICBpZiAoIWlzUmVmZXJlbmNlZChncm91cEVsZW1lbnRzLCBjYXRlZ29yeVZhbHVlUmVmKSkge1xuICAgICAgICByZW1vdmVSZWZlcmVuY2VkQ2F0ZWdvcnlWYWx1ZShzaGFwZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogcmUtYXR0YWNoIHJlbW92ZWQgY2F0ZWdvcnlcbiAgICovXG4gIHRoaXMucmV2ZXJ0ZWQoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46R3JvdXAnKSkge1xuXG4gICAgICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChzaGFwZSksXG4gICAgICAgICAgY2F0ZWdvcnlWYWx1ZVJlZiA9IGJ1c2luZXNzT2JqZWN0LmNhdGVnb3J5VmFsdWVSZWYsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBnZXREZWZpbml0aW9ucygpLFxuICAgICAgICAgIGNhdGVnb3J5ID0gY2F0ZWdvcnlWYWx1ZVJlZiA/IGNhdGVnb3J5VmFsdWVSZWYuJHBhcmVudCA6IG51bGw7XG5cbiAgICAgIGNvbGxlY3Rpb25BZGQoY2F0ZWdvcnkuZ2V0KCdjYXRlZ29yeVZhbHVlJyksIGNhdGVnb3J5VmFsdWVSZWYpO1xuICAgICAgY29sbGVjdGlvbkFkZChkZWZpbml0aW9ucy5nZXQoJ3Jvb3RFbGVtZW50cycpLCBjYXRlZ29yeSk7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogY3JlYXRlIG5ldyBjYXRlZ29yeSArIHZhbHVlIHdoZW4gZ3JvdXAgd2FzIGNyZWF0ZWRcbiAgICovXG4gIHRoaXMuZXhlY3V0ZSgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChzaGFwZSk7XG5cbiAgICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkdyb3VwJykgJiYgIWJ1c2luZXNzT2JqZWN0LmNhdGVnb3J5VmFsdWVSZWYpIHtcblxuICAgICAgdmFyIGRlZmluaXRpb25zID0gZ2V0RGVmaW5pdGlvbnMoKSxcbiAgICAgICAgICBjYXRlZ29yeVZhbHVlID0gY3JlYXRlQ2F0ZWdvcnlWYWx1ZShkZWZpbml0aW9ucywgYnBtbkZhY3RvcnkpO1xuXG4gICAgICAvLyBsaW5rIHRoZSByZWZlcmVuY2UgdG8gdGhlIEdyb3VwXG4gICAgICBidXNpbmVzc09iamVjdC5jYXRlZ29yeVZhbHVlUmVmID0gY2F0ZWdvcnlWYWx1ZTtcbiAgICB9XG4gIH0pO1xuXG5cbiAgdGhpcy5yZXZlcnQoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46R3JvdXAnKSkge1xuICAgICAgcmVtb3ZlUmVmZXJlbmNlZENhdGVnb3J5VmFsdWUoc2hhcGUpO1xuXG4gICAgICBkZWxldGUgZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpLmNhdGVnb3J5VmFsdWVSZWY7XG5cbiAgICB9XG4gIH0pO1xuXG4gIC8vIGNvcHkgYnBtbjpDYXRlZ29yeVZhbHVlIHdoZW4gY29weWluZyBlbGVtZW50XG4gIGV2ZW50QnVzLm9uKCdtb2RkbGVDb3B5LmNhbkNvcHlQcm9wZXJ0eScsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5LFxuICAgICAgICBjYXRlZ29yeVZhbHVlO1xuXG4gICAgaWYgKGlzKHByb3BlcnR5LCAnYnBtbjpDYXRlZ29yeVZhbHVlJykpIHtcbiAgICAgIGNhdGVnb3J5VmFsdWUgPSBjcmVhdGVDYXRlZ29yeVZhbHVlKGdldERlZmluaXRpb25zKCksIGJwbW5GYWN0b3J5KTtcblxuICAgICAgLy8gcmV0dXJuIGNvcHkgb2YgY2F0ZWdvcnlcbiAgICAgIHJldHVybiBtb2RkbGVDb3B5LmNvcHlFbGVtZW50KHByb3BlcnR5LCBjYXRlZ29yeVZhbHVlKTtcbiAgICB9XG4gIH0pO1xuXG59XG5cbkdyb3VwQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2JwbW5GYWN0b3J5JyxcbiAgJ2NhbnZhcycsXG4gICdlbGVtZW50UmVnaXN0cnknLFxuICAnZXZlbnRCdXMnLFxuICAnaW5qZWN0b3InLFxuICAnbW9kZGxlQ29weSdcbl07XG5cbmluaGVyaXRzKEdyb3VwQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7IiwiaW1wb3J0IHtcbiAgZ2V0TWlkXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IGxpbmVJbnRlcnNlY3QgZnJvbSAnLi91dGlsL0xpbmVJbnRlcnNlY3QnO1xuXG5cbi8qKlxuICogRml4IGJyb2tlbiBkb2NraW5ncyBhZnRlciBESSBpbXBvcnRzLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEltcG9ydERvY2tpbmdGaXgoZXZlbnRCdXMpIHtcblxuICBmdW5jdGlvbiBhZGp1c3REb2NraW5nKHN0YXJ0UG9pbnQsIG5leHRQb2ludCwgZWxlbWVudE1pZCkge1xuXG4gICAgdmFyIGVsZW1lbnRUb3AgPSB7XG4gICAgICB4OiBlbGVtZW50TWlkLngsXG4gICAgICB5OiBlbGVtZW50TWlkLnkgLSA1MFxuICAgIH07XG5cbiAgICB2YXIgZWxlbWVudExlZnQgPSB7XG4gICAgICB4OiBlbGVtZW50TWlkLnggLSA1MCxcbiAgICAgIHk6IGVsZW1lbnRNaWQueVxuICAgIH07XG5cbiAgICB2YXIgdmVydGljYWxJbnRlcnNlY3QgPSBsaW5lSW50ZXJzZWN0KHN0YXJ0UG9pbnQsIG5leHRQb2ludCwgZWxlbWVudE1pZCwgZWxlbWVudFRvcCksXG4gICAgICAgIGhvcml6b250YWxJbnRlcnNlY3QgPSBsaW5lSW50ZXJzZWN0KHN0YXJ0UG9pbnQsIG5leHRQb2ludCwgZWxlbWVudE1pZCwgZWxlbWVudExlZnQpO1xuXG4gICAgLy8gb3JpZ2luYWwgaXMgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBjZW50ZXIgY3Jvc3MgaW50ZXJzZWN0aW9uXG4gICAgdmFyIGNlbnRlckludGVyc2VjdDtcblxuICAgIGlmICh2ZXJ0aWNhbEludGVyc2VjdCAmJiBob3Jpem9udGFsSW50ZXJzZWN0KSB7XG4gICAgICBpZiAoZ2V0RGlzdGFuY2UodmVydGljYWxJbnRlcnNlY3QsIGVsZW1lbnRNaWQpID4gZ2V0RGlzdGFuY2UoaG9yaXpvbnRhbEludGVyc2VjdCwgZWxlbWVudE1pZCkpIHtcbiAgICAgICAgY2VudGVySW50ZXJzZWN0ID0gaG9yaXpvbnRhbEludGVyc2VjdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNlbnRlckludGVyc2VjdCA9IHZlcnRpY2FsSW50ZXJzZWN0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjZW50ZXJJbnRlcnNlY3QgPSB2ZXJ0aWNhbEludGVyc2VjdCB8fCBob3Jpem9udGFsSW50ZXJzZWN0O1xuICAgIH1cblxuICAgIHN0YXJ0UG9pbnQub3JpZ2luYWwgPSBjZW50ZXJJbnRlcnNlY3Q7XG4gIH1cblxuICBmdW5jdGlvbiBmaXhEb2NraW5ncyhjb25uZWN0aW9uKSB7XG4gICAgdmFyIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzO1xuXG4gICAgYWRqdXN0RG9ja2luZyhcbiAgICAgIHdheXBvaW50c1swXSxcbiAgICAgIHdheXBvaW50c1sxXSxcbiAgICAgIGdldE1pZChjb25uZWN0aW9uLnNvdXJjZSlcbiAgICApO1xuXG4gICAgYWRqdXN0RG9ja2luZyhcbiAgICAgIHdheXBvaW50c1t3YXlwb2ludHMubGVuZ3RoIC0gMV0sXG4gICAgICB3YXlwb2ludHNbd2F5cG9pbnRzLmxlbmd0aCAtIDJdLFxuICAgICAgZ2V0TWlkKGNvbm5lY3Rpb24udGFyZ2V0KVxuICAgICk7XG4gIH1cblxuICBldmVudEJ1cy5vbignYnBtbkVsZW1lbnQuYWRkZWQnLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgZWxlbWVudCA9IGUuZWxlbWVudDtcblxuICAgIGlmIChlbGVtZW50LndheXBvaW50cykge1xuICAgICAgZml4RG9ja2luZ3MoZWxlbWVudCk7XG4gICAgfVxuICB9KTtcbn1cblxuSW1wb3J0RG9ja2luZ0ZpeC4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXREaXN0YW5jZShwMSwgcDIpIHtcbiAgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhwMS54IC0gcDIueCwgMikgKyBNYXRoLnBvdyhwMS55IC0gcDIueSwgMikpO1xufSIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdFxufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzQW55XG59IGZyb20gJy4uL3V0aWwvTW9kZWxpbmdVdGlsJztcblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IG1ha2VzIHN1cmUgdGhhdCBlYWNoIGNyZWF0ZWQgb3IgdXBkYXRlZFxuICogUG9vbCBhbmQgTGFuZSBpcyBhc3NpZ25lZCBhbiBpc0hvcml6b250YWwgcHJvcGVydHkgc2V0IHRvIHRydWUuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSXNIb3Jpem9udGFsRml4KGV2ZW50QnVzKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHZhciBlbGVtZW50VHlwZXNUb1VwZGF0ZSA9IFtcbiAgICAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgJ2JwbW46TGFuZSdcbiAgXTtcblxuICB0aGlzLmV4ZWN1dGVkKFsgJ3NoYXBlLm1vdmUnLCAnc2hhcGUuY3JlYXRlJywgJ3NoYXBlLnJlc2l6ZScgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChldmVudC5jb250ZXh0LnNoYXBlKTtcblxuICAgIGlmIChpc0FueShibywgZWxlbWVudFR5cGVzVG9VcGRhdGUpICYmICFiby5kaS5nZXQoJ2lzSG9yaXpvbnRhbCcpKSB7XG5cbiAgICAgIC8vIHNldCBhdHRyaWJ1dGUgZGlyZWN0bHkgdG8gYXZvaWQgbW9kZWxpbmcjdXBkYXRlUHJvcGVydHkgc2lkZSBlZmZlY3RzXG4gICAgICBiby5kaS5zZXQoJ2lzSG9yaXpvbnRhbCcsIHRydWUpO1xuICAgIH1cbiAgfSk7XG5cbn1cblxuSXNIb3Jpem9udGFsRml4LiRpbmplY3QgPSBbICdldmVudEJ1cycgXTtcblxuaW5oZXJpdHMoSXNIb3Jpem9udGFsRml4LCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHtcbiAgaXMsXG4gIGdldEJ1c2luZXNzT2JqZWN0XG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNMYWJlbEV4dGVybmFsLFxuICBnZXRFeHRlcm5hbExhYmVsTWlkLFxuICBoYXNFeHRlcm5hbExhYmVsLFxuICBpc0xhYmVsXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTGFiZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0TGFiZWxcbn0gZnJvbSAnLi4vLi4vbGFiZWwtZWRpdGluZy9MYWJlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRMYWJlbEFkanVzdG1lbnRcbn0gZnJvbSAnLi91dGlsL0xhYmVsTGF5b3V0VXRpbCc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBnZXROZXdBdHRhY2hQb2ludFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0F0dGFjaFV0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRNaWQsXG4gIHJvdW5kUG9pbnRcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQge1xuICBkZWx0YVxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL1Bvc2l0aW9uVXRpbCc7XG5cbmltcG9ydCB7XG4gIHNvcnRCeVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGdldERpc3RhbmNlUG9pbnRMaW5lLFxuICBwZXJwZW5kaWN1bGFyRm9vdFxufSBmcm9tICcuL3V0aWwvR2VvbWV0cmljVXRpbCc7XG5cbnZhciBERUZBVUxUX0xBQkVMX0RJTUVOU0lPTlMgPSB7XG4gIHdpZHRoOiA5MCxcbiAgaGVpZ2h0OiAyMFxufTtcblxudmFyIE5BTUVfUFJPUEVSVFkgPSAnbmFtZSc7XG52YXIgVEVYVF9QUk9QRVJUWSA9ICd0ZXh0JztcblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IG1ha2VzIHN1cmUgdGhhdCBleHRlcm5hbCBsYWJlbHMgYXJlIGFkZGVkXG4gKiB0b2dldGhlciB3aXRoIHJlc3BlY3RpdmUgZWxlbWVudHMgYW5kIHByb3Blcmx5IHVwZGF0ZWQgKERJIHdpc2UpXG4gKiBkdXJpbmcgbW92ZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKiBAcGFyYW0ge1RleHRSZW5kZXJlcn0gdGV4dFJlbmRlcmVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExhYmVsQmVoYXZpb3IoXG4gICAgZXZlbnRCdXMsIG1vZGVsaW5nLCBicG1uRmFjdG9yeSxcbiAgICB0ZXh0UmVuZGVyZXIpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgLy8gdXBkYXRlIGxhYmVsIGlmIG5hbWUgcHJvcGVydHkgd2FzIHVwZGF0ZWRcbiAgdGhpcy5wb3N0RXhlY3V0ZSgnZWxlbWVudC51cGRhdGVQcm9wZXJ0aWVzJywgZnVuY3Rpb24oZSkge1xuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50LFxuICAgICAgICBwcm9wZXJ0aWVzID0gY29udGV4dC5wcm9wZXJ0aWVzO1xuXG4gICAgaWYgKE5BTUVfUFJPUEVSVFkgaW4gcHJvcGVydGllcykge1xuICAgICAgbW9kZWxpbmcudXBkYXRlTGFiZWwoZWxlbWVudCwgcHJvcGVydGllc1tOQU1FX1BST1BFUlRZXSk7XG4gICAgfVxuXG4gICAgaWYgKFRFWFRfUFJPUEVSVFkgaW4gcHJvcGVydGllc1xuICAgICAgICAmJiBpcyhlbGVtZW50LCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XG5cbiAgICAgIHZhciBuZXdCb3VuZHMgPSB0ZXh0UmVuZGVyZXIuZ2V0VGV4dEFubm90YXRpb25Cb3VuZHMoXG4gICAgICAgIHtcbiAgICAgICAgICB4OiBlbGVtZW50LngsXG4gICAgICAgICAgeTogZWxlbWVudC55LFxuICAgICAgICAgIHdpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHRcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcGVydGllc1tURVhUX1BST1BFUlRZXSB8fCAnJ1xuICAgICAgKTtcblxuICAgICAgbW9kZWxpbmcudXBkYXRlTGFiZWwoZWxlbWVudCwgcHJvcGVydGllcy50ZXh0LCBuZXdCb3VuZHMpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gY3JlYXRlIGxhYmVsIHNoYXBlIGFmdGVyIHNoYXBlL2Nvbm5lY3Rpb24gd2FzIGNyZWF0ZWRcbiAgdGhpcy5wb3N0RXhlY3V0ZShbICdzaGFwZS5jcmVhdGUnLCAnY29ubmVjdGlvbi5jcmVhdGUnIF0sIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9O1xuXG4gICAgaWYgKGhpbnRzLmNyZWF0ZUVsZW1lbnRzQmVoYXZpb3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnQgPSBjb250ZXh0LnNoYXBlIHx8IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgYnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0O1xuXG4gICAgaWYgKGlzTGFiZWwoZWxlbWVudCkgfHwgIWlzTGFiZWxFeHRlcm5hbChlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG9ubHkgY3JlYXRlIGxhYmVsIGlmIGF0dHJpYnV0ZSBhdmFpbGFibGVcbiAgICBpZiAoIWdldExhYmVsKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGxhYmVsQ2VudGVyID0gZ2V0RXh0ZXJuYWxMYWJlbE1pZChlbGVtZW50KTtcblxuICAgIC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgeCBhbmQgeVxuICAgIHZhciBsYWJlbERpbWVuc2lvbnMgPSB0ZXh0UmVuZGVyZXIuZ2V0RXh0ZXJuYWxMYWJlbEJvdW5kcyhcbiAgICAgIERFRkFVTFRfTEFCRUxfRElNRU5TSU9OUyxcbiAgICAgIGdldExhYmVsKGVsZW1lbnQpXG4gICAgKTtcblxuICAgIG1vZGVsaW5nLmNyZWF0ZUxhYmVsKGVsZW1lbnQsIGxhYmVsQ2VudGVyLCB7XG4gICAgICBpZDogYnVzaW5lc3NPYmplY3QuaWQgKyAnX2xhYmVsJyxcbiAgICAgIGJ1c2luZXNzT2JqZWN0OiBidXNpbmVzc09iamVjdCxcbiAgICAgIHdpZHRoOiBsYWJlbERpbWVuc2lvbnMud2lkdGgsXG4gICAgICBoZWlnaHQ6IGxhYmVsRGltZW5zaW9ucy5oZWlnaHRcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIGxhYmVsIGFmdGVyIGxhYmVsIHNoYXBlIHdhcyBkZWxldGVkXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBsYWJlbFRhcmdldCA9IGNvbnRleHQubGFiZWxUYXJnZXQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICAgIC8vIGNoZWNrIGlmIGxhYmVsXG4gICAgaWYgKGxhYmVsVGFyZ2V0ICYmIGhpbnRzLnVuc2V0TGFiZWwgIT09IGZhbHNlKSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVMYWJlbChsYWJlbFRhcmdldCwgbnVsbCwgbnVsbCwgeyByZW1vdmVTaGFwZTogZmFsc2UgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyB1cGRhdGUgZGkgaW5mb3JtYXRpb24gb24gbGFiZWwgY3JlYXRpb25cbiAgdGhpcy5wb3N0RXhlY3V0ZShbICdsYWJlbC5jcmVhdGUnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBidXNpbmVzc09iamVjdCxcbiAgICAgICAgZGk7XG5cbiAgICAvLyB3ZSB3YW50IHRvIHRyaWdnZXIgb24gcmVhbCBsYWJlbHMgb25seVxuICAgIGlmICghZWxlbWVudC5sYWJlbFRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHdlIHdhbnQgdG8gdHJpZ2dlciBvbiBCUE1OIGVsZW1lbnRzIG9ubHlcbiAgICBpZiAoIWlzKGVsZW1lbnQubGFiZWxUYXJnZXQgfHwgZWxlbWVudCwgJ2JwbW46QmFzZUVsZW1lbnQnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJ1c2luZXNzT2JqZWN0ID0gZWxlbWVudC5idXNpbmVzc09iamVjdCxcbiAgICBkaSA9IGJ1c2luZXNzT2JqZWN0LmRpO1xuXG5cbiAgICBpZiAoIWRpLmxhYmVsKSB7XG4gICAgICBkaS5sYWJlbCA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbmRpOkJQTU5MYWJlbCcsIHtcbiAgICAgICAgYm91bmRzOiBicG1uRmFjdG9yeS5jcmVhdGUoJ2RjOkJvdW5kcycpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3NpZ24oZGkubGFiZWwuYm91bmRzLCB7XG4gICAgICB4OiBlbGVtZW50LngsXG4gICAgICB5OiBlbGVtZW50LnksXG4gICAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHRcbiAgICB9KTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gZ2V0VmlzaWJsZUxhYmVsQWRqdXN0bWVudChldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBsYWJlbCA9IGNvbm5lY3Rpb24ubGFiZWwsXG4gICAgICAgIGhpbnRzID0gYXNzaWduKHt9LCBjb250ZXh0LmhpbnRzKSxcbiAgICAgICAgbmV3V2F5cG9pbnRzID0gY29udGV4dC5uZXdXYXlwb2ludHMgfHwgY29ubmVjdGlvbi53YXlwb2ludHMsXG4gICAgICAgIG9sZFdheXBvaW50cyA9IGNvbnRleHQub2xkV2F5cG9pbnRzO1xuXG5cbiAgICBpZiAodHlwZW9mIGhpbnRzLnN0YXJ0Q2hhbmdlZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpbnRzLnN0YXJ0Q2hhbmdlZCA9ICEhaGludHMuY29ubmVjdGlvblN0YXJ0O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGludHMuZW5kQ2hhbmdlZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpbnRzLmVuZENoYW5nZWQgPSAhIWhpbnRzLmNvbm5lY3Rpb25FbmQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldExhYmVsQWRqdXN0bWVudChsYWJlbCwgbmV3V2F5cG9pbnRzLCBvbGRXYXlwb2ludHMsIGhpbnRzKTtcbiAgfVxuXG4gIHRoaXMucG9zdEV4ZWN1dGUoW1xuICAgICdjb25uZWN0aW9uLmxheW91dCcsXG4gICAgJ2Nvbm5lY3Rpb24udXBkYXRlV2F5cG9pbnRzJ1xuICBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9O1xuXG4gICAgaWYgKGhpbnRzLmxhYmVsQmVoYXZpb3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIGxhYmVsID0gY29ubmVjdGlvbi5sYWJlbCxcbiAgICAgICAgbGFiZWxBZGp1c3RtZW50O1xuXG4gICAgLy8gaGFuZGxlIG1pc3NpbmcgbGFiZWwgYXMgd2VsbCBhcyB0aGUgY2FzZVxuICAgIC8vIHRoYXQgdGhlIGxhYmVsIHBhcmVudCBkb2VzIG5vdCBleGlzdCAoeWV0KSxcbiAgICAvLyBiZWNhdXNlIGl0IGlzIGJlaW5nIHBhc3RlZCAvIGNyZWF0ZWQgdmlhIG11bHRpIGVsZW1lbnQgY3JlYXRlXG4gICAgLy9cbiAgICAvLyBDZi4gaHR0cHM6Ly9naXRodWIuY29tL2JwbW4taW8vYnBtbi1qcy9wdWxsLzEyMjdcbiAgICBpZiAoIWxhYmVsIHx8ICFsYWJlbC5wYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsYWJlbEFkanVzdG1lbnQgPSBnZXRWaXNpYmxlTGFiZWxBZGp1c3RtZW50KGV2ZW50KTtcblxuICAgIG1vZGVsaW5nLm1vdmVTaGFwZShsYWJlbCwgbGFiZWxBZGp1c3RtZW50KTtcbiAgfSk7XG5cblxuICAvLyBrZWVwIGxhYmVsIHBvc2l0aW9uIG9uIHNoYXBlIHJlcGxhY2VcbiAgdGhpcy5wb3N0RXhlY3V0ZShbICdzaGFwZS5yZXBsYWNlJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgbmV3U2hhcGUgPSBjb250ZXh0Lm5ld1NoYXBlLFxuICAgICAgICBvbGRTaGFwZSA9IGNvbnRleHQub2xkU2hhcGU7XG5cbiAgICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChuZXdTaGFwZSk7XG5cbiAgICBpZiAoYnVzaW5lc3NPYmplY3RcbiAgICAgICYmIGlzTGFiZWxFeHRlcm5hbChidXNpbmVzc09iamVjdClcbiAgICAgICYmIG9sZFNoYXBlLmxhYmVsXG4gICAgICAmJiBuZXdTaGFwZS5sYWJlbCkge1xuICAgICAgbmV3U2hhcGUubGFiZWwueCA9IG9sZFNoYXBlLmxhYmVsLng7XG4gICAgICBuZXdTaGFwZS5sYWJlbC55ID0gb2xkU2hhcGUubGFiZWwueTtcbiAgICB9XG4gIH0pO1xuXG5cbiAgLy8gbW92ZSBleHRlcm5hbCBsYWJlbCBhZnRlciByZXNpemluZ1xuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5yZXNpemUnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIG5ld0JvdW5kcyA9IGNvbnRleHQubmV3Qm91bmRzLFxuICAgICAgICBvbGRCb3VuZHMgPSBjb250ZXh0Lm9sZEJvdW5kcztcblxuICAgIGlmIChoYXNFeHRlcm5hbExhYmVsKHNoYXBlKSkge1xuXG4gICAgICB2YXIgbGFiZWwgPSBzaGFwZS5sYWJlbCxcbiAgICAgICAgICBsYWJlbE1pZCA9IGdldE1pZChsYWJlbCksXG4gICAgICAgICAgZWRnZXMgPSBhc0VkZ2VzKG9sZEJvdW5kcyk7XG5cbiAgICAgIC8vIGdldCBuZWFyZXN0IGJvcmRlciBwb2ludCB0byBsYWJlbCBhcyByZWZlcmVuY2UgcG9pbnRcbiAgICAgIHZhciByZWZlcmVuY2VQb2ludCA9IGdldFJlZmVyZW5jZVBvaW50KGxhYmVsTWlkLCBlZGdlcyk7XG5cbiAgICAgIHZhciBkZWx0YSA9IGdldFJlZmVyZW5jZVBvaW50RGVsdGEocmVmZXJlbmNlUG9pbnQsIG9sZEJvdW5kcywgbmV3Qm91bmRzKTtcblxuICAgICAgbW9kZWxpbmcubW92ZVNoYXBlKGxhYmVsLCBkZWx0YSk7XG5cbiAgICB9XG5cbiAgfSk7XG5cbn1cblxuaW5oZXJpdHMoTGFiZWxCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuTGFiZWxCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnLFxuICAnYnBtbkZhY3RvcnknLFxuICAndGV4dFJlbmRlcmVyJ1xuXTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQ2FsY3VsYXRlcyBhIHJlZmVyZW5jZSBwb2ludCBkZWx0YSByZWxhdGl2ZSB0byBhIG5ldyBwb3NpdGlvblxuICogb2YgYSBjZXJ0YWluIGVsZW1lbnQncyBib3VuZHNcbiAqXG4gKiBAcGFyYW0ge1BvaW50fSBwb2ludFxuICogQHBhcmFtIHtCb3VuZHN9IG9sZEJvdW5kc1xuICogQHBhcmFtIHtCb3VuZHN9IG5ld0JvdW5kc1xuICpcbiAqIEByZXR1cm4ge0RlbHRhfSBkZWx0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVmZXJlbmNlUG9pbnREZWx0YShyZWZlcmVuY2VQb2ludCwgb2xkQm91bmRzLCBuZXdCb3VuZHMpIHtcblxuICB2YXIgbmV3UmVmZXJlbmNlUG9pbnQgPSBnZXROZXdBdHRhY2hQb2ludChyZWZlcmVuY2VQb2ludCwgb2xkQm91bmRzLCBuZXdCb3VuZHMpO1xuXG4gIHJldHVybiByb3VuZFBvaW50KGRlbHRhKG5ld1JlZmVyZW5jZVBvaW50LCByZWZlcmVuY2VQb2ludCkpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgbmVhcmVzdCBwb2ludCAocmVmZXJlbmNlIHBvaW50KSBmb3IgYSBnaXZlbiBwb2ludFxuICogb250byBnaXZlbiBzZXQgb2YgbGluZXNcbiAqXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50LCBQb2ludD59IGxpbmVzXG4gKiBAcGFyYW0ge1BvaW50fSBwb2ludFxuICpcbiAqIEBwYXJhbSB7UG9pbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWZlcmVuY2VQb2ludChwb2ludCwgbGluZXMpIHtcblxuICBpZiAoIWxpbmVzLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBuZWFyZXN0TGluZSA9IGdldE5lYXJlc3RMaW5lKHBvaW50LCBsaW5lcyk7XG5cbiAgcmV0dXJuIHBlcnBlbmRpY3VsYXJGb290KHBvaW50LCBuZWFyZXN0TGluZSk7XG59XG5cbi8qKlxuICogQ29udmVydCB0aGUgZ2l2ZW4gYm91bmRzIHRvIGEgbGluZXMgYXJyYXkgY29udGFpbmluZyBhbGwgZWRnZXNcbiAqXG4gKiBAcGFyYW0ge0JvdW5kc3xQb2ludH0gYm91bmRzXG4gKlxuICogQHJldHVybiBBcnJheTxQb2ludD5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzRWRnZXMoYm91bmRzKSB7XG4gIHJldHVybiBbXG4gICAgWyAvLyB0b3BcbiAgICAgIHtcbiAgICAgICAgeDogYm91bmRzLngsXG4gICAgICAgIHk6IGJvdW5kcy55XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB4OiBib3VuZHMueCArIChib3VuZHMud2lkdGggfHwgMCksXG4gICAgICAgIHk6IGJvdW5kcy55XG4gICAgICB9XG4gICAgXSxcbiAgICBbIC8vIHJpZ2h0XG4gICAgICB7XG4gICAgICAgIHg6IGJvdW5kcy54ICsgKGJvdW5kcy53aWR0aCB8fCAwKSxcbiAgICAgICAgeTogYm91bmRzLnlcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHg6IGJvdW5kcy54ICsgKGJvdW5kcy53aWR0aCB8fCAwKSxcbiAgICAgICAgeTogYm91bmRzLnkgKyAoYm91bmRzLmhlaWdodCB8fCAwKVxuICAgICAgfVxuICAgIF0sXG4gICAgWyAvLyBib3R0b21cbiAgICAgIHtcbiAgICAgICAgeDogYm91bmRzLngsXG4gICAgICAgIHk6IGJvdW5kcy55ICsgKGJvdW5kcy5oZWlnaHQgfHwgMClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHg6IGJvdW5kcy54ICsgKGJvdW5kcy53aWR0aCB8fCAwKSxcbiAgICAgICAgeTogYm91bmRzLnkgKyAoYm91bmRzLmhlaWdodCB8fCAwKVxuICAgICAgfVxuICAgIF0sXG4gICAgWyAvLyBsZWZ0XG4gICAgICB7XG4gICAgICAgIHg6IGJvdW5kcy54LFxuICAgICAgICB5OiBib3VuZHMueVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgeDogYm91bmRzLngsXG4gICAgICAgIHk6IGJvdW5kcy55ICsgKGJvdW5kcy5oZWlnaHQgfHwgMClcbiAgICAgIH1cbiAgICBdXG4gIF07XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbmVhcmVzdCBsaW5lIGZvciBhIGdpdmVuIHBvaW50IGJ5IGRpc3RhbmNlXG4gKiBAcGFyYW0ge1BvaW50fSBwb2ludFxuICogQHBhcmFtIEFycmF5PFBvaW50PiBsaW5lc1xuICpcbiAqIEByZXR1cm4gQXJyYXk8UG9pbnQ+XG4gKi9cbmZ1bmN0aW9uIGdldE5lYXJlc3RMaW5lKHBvaW50LCBsaW5lcykge1xuXG4gIHZhciBkaXN0YW5jZXMgPSBsaW5lcy5tYXAoZnVuY3Rpb24obCkge1xuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBsLFxuICAgICAgZGlzdGFuY2U6IGdldERpc3RhbmNlUG9pbnRMaW5lKHBvaW50LCBsKVxuICAgIH07XG4gIH0pO1xuXG4gIHZhciBzb3J0ZWQgPSBzb3J0QnkoZGlzdGFuY2VzLCAnZGlzdGFuY2UnKTtcblxuICByZXR1cm4gc29ydGVkWzBdLmxpbmU7XG59XG4iLCJpbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxudmFyIENPTExBQl9FUlJfTVNHID0gJ2Zsb3cgZWxlbWVudHMgbXVzdCBiZSBjaGlsZHJlbiBvZiBwb29scy9wYXJ0aWNpcGFudHMnLFxuICAgIFBST0NFU1NfRVJSX01TRyA9ICdwYXJ0aWNpcGFudHMgY2Fubm90IGJlIHBhc3RlZCBvbnRvIGEgbm9uLWVtcHR5IHByb2Nlc3MgZGlhZ3JhbSc7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW9kZWxpbmdGZWVkYmFjayhldmVudEJ1cywgdG9vbHRpcHMsIHRyYW5zbGF0ZSkge1xuXG4gIGZ1bmN0aW9uIHNob3dFcnJvcihwb3NpdGlvbiwgbWVzc2FnZSwgdGltZW91dCkge1xuICAgIHRvb2x0aXBzLmFkZCh7XG4gICAgICBwb3NpdGlvbjoge1xuICAgICAgICB4OiBwb3NpdGlvbi54ICsgNSxcbiAgICAgICAgeTogcG9zaXRpb24ueSArIDVcbiAgICAgIH0sXG4gICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgdGltZW91dDogdGltZW91dCB8fCAyMDAwLFxuICAgICAgaHRtbDogJzxkaXY+JyArIG1lc3NhZ2UgKyAnPC9kaXY+J1xuICAgIH0pO1xuICB9XG5cbiAgZXZlbnRCdXMub24oWyAnc2hhcGUubW92ZS5yZWplY3RlZCcsICdjcmVhdGUucmVqZWN0ZWQnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0O1xuXG4gICAgaWYgKGlzKHRhcmdldCwgJ2JwbW46Q29sbGFib3JhdGlvbicpICYmIGlzKHNoYXBlLCAnYnBtbjpGbG93Tm9kZScpKSB7XG4gICAgICBzaG93RXJyb3IoZXZlbnQsIHRyYW5zbGF0ZShDT0xMQUJfRVJSX01TRykpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnZWxlbWVudHMucGFzdGUucmVqZWN0ZWQnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBwb3NpdGlvbiA9IGNvbnRleHQucG9zaXRpb24sXG4gICAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0O1xuXG4gICAgaWYgKGlzKHRhcmdldCwgJ2JwbW46Q29sbGFib3JhdGlvbicpKSB7XG4gICAgICBzaG93RXJyb3IocG9zaXRpb24sIHRyYW5zbGF0ZShDT0xMQUJfRVJSX01TRykpO1xuICAgIH1cblxuICAgIGlmIChpcyh0YXJnZXQsICdicG1uOlByb2Nlc3MnKSkge1xuICAgICAgc2hvd0Vycm9yKHBvc2l0aW9uLCB0cmFuc2xhdGUoUFJPQ0VTU19FUlJfTVNHKSwgMzAwMCk7XG4gICAgfVxuICB9KTtcbn1cblxuTW9kZWxpbmdGZWVkYmFjay4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAndG9vbHRpcHMnLFxuICAndHJhbnNsYXRlJ1xuXTtcbiIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IGxpbmVJbnRlcnNlY3QgZnJvbSAnLi91dGlsL0xpbmVJbnRlcnNlY3QnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlbW92ZUVsZW1lbnRCZWhhdmlvcihldmVudEJ1cywgYnBtblJ1bGVzLCBtb2RlbGluZykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICAvKipcbiAgICogQ29tYmluZSBzZXF1ZW5jZSBmbG93cyB3aGVuIGRlbGV0aW5nIGFuIGVsZW1lbnRcbiAgICogaWYgdGhlcmUgaXMgb25lIGluY29taW5nIGFuZCBvbmUgb3V0Z29pbmdcbiAgICogc2VxdWVuY2UgZmxvd1xuICAgKi9cbiAgdGhpcy5wcmVFeGVjdXRlKCdzaGFwZS5kZWxldGUnLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgc2hhcGUgPSBlLmNvbnRleHQuc2hhcGU7XG5cbiAgICAvLyBvbmx5IGhhbmRsZSBbYV0gLT4gW3NoYXBlXSAtPiBbYl0gcGF0dGVybnNcbiAgICBpZiAoc2hhcGUuaW5jb21pbmcubGVuZ3RoICE9PSAxIHx8IHNoYXBlLm91dGdvaW5nLmxlbmd0aCAhPT0gMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbkNvbm5lY3Rpb24gPSBzaGFwZS5pbmNvbWluZ1swXSxcbiAgICAgICAgb3V0Q29ubmVjdGlvbiA9IHNoYXBlLm91dGdvaW5nWzBdO1xuXG4gICAgLy8gb25seSBoYW5kbGUgc2VxdWVuY2UgZmxvd3NcbiAgICBpZiAoIWlzKGluQ29ubmVjdGlvbiwgJ2JwbW46U2VxdWVuY2VGbG93JykgfHwgIWlzKG91dENvbm5lY3Rpb24sICdicG1uOlNlcXVlbmNlRmxvdycpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGJwbW5SdWxlcy5jYW5Db25uZWN0KGluQ29ubmVjdGlvbi5zb3VyY2UsIG91dENvbm5lY3Rpb24udGFyZ2V0LCBpbkNvbm5lY3Rpb24pKSB7XG5cbiAgICAgIC8vIGNvbXB1dGUgbmV3LCBjb21iaW5lZCB3YXlwb2ludHNcbiAgICAgIHZhciBuZXdXYXlwb2ludHMgPSBnZXROZXdXYXlwb2ludHMoaW5Db25uZWN0aW9uLndheXBvaW50cywgb3V0Q29ubmVjdGlvbi53YXlwb2ludHMpO1xuXG4gICAgICBtb2RlbGluZy5yZWNvbm5lY3RFbmQoaW5Db25uZWN0aW9uLCBvdXRDb25uZWN0aW9uLnRhcmdldCwgbmV3V2F5cG9pbnRzKTtcbiAgICB9XG4gIH0pO1xuXG59XG5cbmluaGVyaXRzKFJlbW92ZUVsZW1lbnRCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuUmVtb3ZlRWxlbWVudEJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdicG1uUnVsZXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXREb2NraW5nKHBvaW50KSB7XG4gIHJldHVybiBwb2ludC5vcmlnaW5hbCB8fCBwb2ludDtcbn1cblxuXG5mdW5jdGlvbiBnZXROZXdXYXlwb2ludHMoaW5XYXlwb2ludHMsIG91dFdheXBvaW50cykge1xuXG4gIHZhciBpbnRlcnNlY3Rpb24gPSBsaW5lSW50ZXJzZWN0KFxuICAgIGdldERvY2tpbmcoaW5XYXlwb2ludHNbaW5XYXlwb2ludHMubGVuZ3RoIC0gMl0pLFxuICAgIGdldERvY2tpbmcoaW5XYXlwb2ludHNbaW5XYXlwb2ludHMubGVuZ3RoIC0gMV0pLFxuICAgIGdldERvY2tpbmcob3V0V2F5cG9pbnRzWzFdKSxcbiAgICBnZXREb2NraW5nKG91dFdheXBvaW50c1swXSkpO1xuXG4gIGlmIChpbnRlcnNlY3Rpb24pIHtcbiAgICByZXR1cm4gW10uY29uY2F0KFxuICAgICAgaW5XYXlwb2ludHMuc2xpY2UoMCwgaW5XYXlwb2ludHMubGVuZ3RoIC0gMSksXG4gICAgICBbIGludGVyc2VjdGlvbiBdLFxuICAgICAgb3V0V2F5cG9pbnRzLnNsaWNlKDEpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW1xuICAgICAgZ2V0RG9ja2luZyhpbldheXBvaW50c1swXSksXG4gICAgICBnZXREb2NraW5nKG91dFdheXBvaW50c1tvdXRXYXlwb2ludHMubGVuZ3RoIC0gMV0pXG4gICAgXTtcbiAgfVxufSIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuXG4vKipcbiAqIEJQTU4gc3BlY2lmaWMgcmVtb3ZlIGJlaGF2aW9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlbW92ZVBhcnRpY2lwYW50QmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG5cbiAgLyoqXG4gICAqIG1vcnBoIGNvbGxhYm9yYXRpb24gZGlhZ3JhbSBpbnRvIHByb2Nlc3MgZGlhZ3JhbVxuICAgKiBhZnRlciB0aGUgbGFzdCBwYXJ0aWNpcGFudCBoYXMgYmVlbiByZW1vdmVkXG4gICAqL1xuXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuZGVsZXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgcGFyZW50ID0gc2hhcGUucGFyZW50O1xuXG4gICAgLy8gYWN0aXZhdGUgdGhlIGJlaGF2aW9yIGlmIHRoZSBzaGFwZSB0byBiZSByZW1vdmVkXG4gICAgLy8gaXMgYSBwYXJ0aWNpcGFudFxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgICAgY29udGV4dC5jb2xsYWJvcmF0aW9uUm9vdCA9IHBhcmVudDtcbiAgICB9XG4gIH0sIHRydWUpO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBjb2xsYWJvcmF0aW9uUm9vdCA9IGNvbnRleHQuY29sbGFib3JhdGlvblJvb3Q7XG5cbiAgICBpZiAoY29sbGFib3JhdGlvblJvb3QgJiYgIWNvbGxhYm9yYXRpb25Sb290LmJ1c2luZXNzT2JqZWN0LnBhcnRpY2lwYW50cy5sZW5ndGgpIHtcblxuICAgICAgLy8gcmVwbGFjZSBlbXB0eSBjb2xsYWJvcmF0aW9uIHdpdGggcHJvY2VzcyBkaWFncmFtXG4gICAgICBtb2RlbGluZy5tYWtlUHJvY2VzcygpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG5cbn1cblxuUmVtb3ZlUGFydGljaXBhbnRCZWhhdmlvci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnLCAnbW9kZWxpbmcnIF07XG5cbmluaGVyaXRzKFJlbW92ZVBhcnRpY2lwYW50QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7IiwiaW1wb3J0IHtcbiAgZm9yRWFjaCxcbiAgZmluZCxcbiAgbWF0Y2hQYXR0ZXJuXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlcGxhY2VDb25uZWN0aW9uQmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nLCBicG1uUnVsZXMsIGluamVjdG9yKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHZhciBkcmFnZ2luZyA9IGluamVjdG9yLmdldCgnZHJhZ2dpbmcnLCBmYWxzZSk7XG5cbiAgZnVuY3Rpb24gZml4Q29ubmVjdGlvbihjb25uZWN0aW9uKSB7XG5cbiAgICB2YXIgc291cmNlID0gY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgIHRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICBwYXJlbnQgPSBjb25uZWN0aW9uLnBhcmVudDtcblxuICAgIC8vIGRvIG5vdCBkbyBhbnl0aGluZyBpZiBjb25uZWN0aW9uXG4gICAgLy8gaXMgYWxyZWFkeSBkZWxldGVkIChtYXkgaGFwcGVuIGR1ZSB0byBvdGhlclxuICAgIC8vIGJlaGF2aW9ycyBwbHVnZ2VkLWluIGJlZm9yZSlcbiAgICBpZiAoIXBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciByZXBsYWNlbWVudFR5cGUsXG4gICAgICAgIHJlbW92ZTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGluY29taW5nIG9yIG91dGdvaW5nIGNvbm5lY3Rpb25zXG4gICAgICogY2FuIHN0YXkgb3IgY291bGQgYmUgc3Vic3RpdHV0ZWQgd2l0aCBhblxuICAgICAqIGFwcHJvcHJpYXRlIHJlcGxhY2VtZW50LlxuICAgICAqXG4gICAgICogVGhpcyBob2xkcyB0cnVlIGZvciBTZXF1ZW5jZUZsb3cgPD4gTWVzc2FnZUZsb3cuXG4gICAgICovXG5cbiAgICBpZiAoaXMoY29ubmVjdGlvbiwgJ2JwbW46U2VxdWVuY2VGbG93JykpIHtcbiAgICAgIGlmICghYnBtblJ1bGVzLmNhbkNvbm5lY3RTZXF1ZW5jZUZsb3coc291cmNlLCB0YXJnZXQpKSB7XG4gICAgICAgIHJlbW92ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChicG1uUnVsZXMuY2FuQ29ubmVjdE1lc3NhZ2VGbG93KHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgICAgICByZXBsYWNlbWVudFR5cGUgPSAnYnBtbjpNZXNzYWdlRmxvdyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdHJhbnNmb3JtIG1lc3NhZ2UgZmxvd3MgaW50byBzZXF1ZW5jZSBmbG93cywgaWYgcG9zc2libGVcblxuICAgIGlmIChpcyhjb25uZWN0aW9uLCAnYnBtbjpNZXNzYWdlRmxvdycpKSB7XG5cbiAgICAgIGlmICghYnBtblJ1bGVzLmNhbkNvbm5lY3RNZXNzYWdlRmxvdyhzb3VyY2UsIHRhcmdldCkpIHtcbiAgICAgICAgcmVtb3ZlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJwbW5SdWxlcy5jYW5Db25uZWN0U2VxdWVuY2VGbG93KHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgICAgICByZXBsYWNlbWVudFR5cGUgPSAnYnBtbjpTZXF1ZW5jZUZsb3cnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpcyhjb25uZWN0aW9uLCAnYnBtbjpBc3NvY2lhdGlvbicpICYmICFicG1uUnVsZXMuY2FuQ29ubmVjdEFzc29jaWF0aW9uKHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgICAgcmVtb3ZlID0gdHJ1ZTtcbiAgICB9XG5cblxuICAgIC8vIHJlbW92ZSBpbnZhbGlkIGNvbm5lY3Rpb24sXG4gICAgLy8gdW5sZXNzIGl0IGhhcyBiZWVuIHJlbW92ZWQgYWxyZWFkeVxuICAgIGlmIChyZW1vdmUpIHtcbiAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7XG4gICAgfVxuXG4gICAgLy8gcmVwbGFjZSBTZXF1ZW5jZUZsb3cgPD4gTWVzc2FnZUZsb3dcblxuICAgIGlmIChyZXBsYWNlbWVudFR5cGUpIHtcbiAgICAgIG1vZGVsaW5nLmNvbm5lY3Qoc291cmNlLCB0YXJnZXQsIHtcbiAgICAgICAgdHlwZTogcmVwbGFjZW1lbnRUeXBlLFxuICAgICAgICB3YXlwb2ludHM6IGNvbm5lY3Rpb24ud2F5cG9pbnRzLnNsaWNlKClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcGxhY2VSZWNvbm5lY3RlZENvbm5lY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgc291cmNlID0gY29udGV4dC5uZXdTb3VyY2UgfHwgY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgIHRhcmdldCA9IGNvbnRleHQubmV3VGFyZ2V0IHx8IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICBhbGxvd2VkLFxuICAgICAgICByZXBsYWNlbWVudDtcblxuICAgIGFsbG93ZWQgPSBicG1uUnVsZXMuY2FuQ29ubmVjdChzb3VyY2UsIHRhcmdldCk7XG5cbiAgICBpZiAoIWFsbG93ZWQgfHwgYWxsb3dlZC50eXBlID09PSBjb25uZWN0aW9uLnR5cGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXBsYWNlbWVudCA9IG1vZGVsaW5nLmNvbm5lY3Qoc291cmNlLCB0YXJnZXQsIHtcbiAgICAgIHR5cGU6IGFsbG93ZWQudHlwZSxcbiAgICAgIHdheXBvaW50czogY29ubmVjdGlvbi53YXlwb2ludHMuc2xpY2UoKVxuICAgIH0pO1xuXG4gICAgLy8gcmVtb3ZlIG9sZCBjb25uZWN0aW9uXG4gICAgbW9kZWxpbmcucmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uKTtcblxuICAgIC8vIHJlcGxhY2UgY29ubmVjdGlvbiBpbiBjb250ZXh0IHRvIHJlY29ubmVjdCBlbmQvc3RhcnRcbiAgICBjb250ZXh0LmNvbm5lY3Rpb24gPSByZXBsYWNlbWVudDtcblxuICAgIGlmIChkcmFnZ2luZykge1xuICAgICAgY2xlYW5EcmFnZ2luZ1NlbGVjdGlvbihjb25uZWN0aW9uLCByZXBsYWNlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gbW9ua2V5LXBhdGNoIHNlbGVjdGlvbiBzYXZlZCBpbiBkcmFnZ2luZyBpbiBvcmRlciB0byByZS1zZWxlY3QgaXQgd2hlbiBvcGVyYXRpb24gaXMgZmluaXNoZWRcbiAgZnVuY3Rpb24gY2xlYW5EcmFnZ2luZ1NlbGVjdGlvbihvbGRDb25uZWN0aW9uLCBuZXdDb25uZWN0aW9uKSB7XG4gICAgdmFyIGNvbnRleHQgPSBkcmFnZ2luZy5jb250ZXh0KCksXG4gICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gY29udGV4dCAmJiBjb250ZXh0LnBheWxvYWQucHJldmlvdXNTZWxlY3Rpb24sXG4gICAgICAgIGluZGV4O1xuXG4gICAgLy8gZG8gbm90aGluZyBpZiBub3QgZHJhZ2dpbmcgb3Igbm8gc2VsZWN0aW9uIHdhcyBwcmVzZW50XG4gICAgaWYgKCFwcmV2aW91c1NlbGVjdGlvbiB8fCAhcHJldmlvdXNTZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW5kZXggPSBwcmV2aW91c1NlbGVjdGlvbi5pbmRleE9mKG9sZENvbm5lY3Rpb24pO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByZXZpb3VzU2VsZWN0aW9uLnNwbGljZShpbmRleCwgMSwgbmV3Q29ubmVjdGlvbik7XG4gIH1cblxuICAvLyBsaWZlY3ljbGUgaG9va3NcblxuICB0aGlzLnBvc3RFeGVjdXRlZCgnZWxlbWVudHMubW92ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBjbG9zdXJlID0gY29udGV4dC5jbG9zdXJlLFxuICAgICAgICBhbGxDb25uZWN0aW9ucyA9IGNsb3N1cmUuYWxsQ29ubmVjdGlvbnM7XG5cbiAgICBmb3JFYWNoKGFsbENvbm5lY3Rpb25zLCBmaXhDb25uZWN0aW9uKTtcbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5wcmVFeGVjdXRlKCdjb25uZWN0aW9uLnJlY29ubmVjdCcsIHJlcGxhY2VSZWNvbm5lY3RlZENvbm5lY3Rpb24pO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKCdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgcHJvcGVydGllcyA9IGNvbnRleHQucHJvcGVydGllcyxcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgYnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgICBjb25uZWN0aW9uO1xuXG4gICAgLy8gcmVtb3ZlIGNvbmRpdGlvbiBvbiBjaGFuZ2UgdG8gZGVmYXVsdFxuICAgIGlmIChwcm9wZXJ0aWVzLmRlZmF1bHQpIHtcbiAgICAgIGNvbm5lY3Rpb24gPSBmaW5kKFxuICAgICAgICBlbGVtZW50Lm91dGdvaW5nLFxuICAgICAgICBtYXRjaFBhdHRlcm4oeyBpZDogZWxlbWVudC5idXNpbmVzc09iamVjdC5kZWZhdWx0LmlkIH0pXG4gICAgICApO1xuXG4gICAgICBpZiAoY29ubmVjdGlvbikge1xuICAgICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGNvbm5lY3Rpb24sIHsgY29uZGl0aW9uRXhwcmVzc2lvbjogdW5kZWZpbmVkIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSBkZWZhdWx0IGZyb20gc291cmNlIG9uIGNoYW5nZSB0byBjb25kaXRpb25hbFxuICAgIGlmIChwcm9wZXJ0aWVzLmNvbmRpdGlvbkV4cHJlc3Npb24gJiYgYnVzaW5lc3NPYmplY3Quc291cmNlUmVmLmRlZmF1bHQgPT09IGJ1c2luZXNzT2JqZWN0KSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQuc291cmNlLCB7IGRlZmF1bHQ6IHVuZGVmaW5lZCB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5pbmhlcml0cyhSZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5SZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZycsXG4gICdicG1uUnVsZXMnLFxuICAnaW5qZWN0b3InXG5dO1xuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzRXZlbnRTdWJQcm9jZXNzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9EaVV0aWwnO1xuXG5cbi8qKlxuICogQlBNTi1zcGVjaWZpYyByZXBsYWNlIGJlaGF2aW9yLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXBsYWNlRWxlbWVudEJlaGF2aW91cihcbiAgICBicG1uUmVwbGFjZSxcbiAgICBicG1uUnVsZXMsXG4gICAgZWxlbWVudFJlZ2lzdHJ5LFxuICAgIGluamVjdG9yLFxuICAgIG1vZGVsaW5nLFxuICAgIHNlbGVjdGlvblxuKSB7XG4gIGluamVjdG9yLmludm9rZShDb21tYW5kSW50ZXJjZXB0b3IsIHRoaXMpO1xuXG4gIHRoaXMuX2JwbW5SZXBsYWNlID0gYnBtblJlcGxhY2U7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fc2VsZWN0aW9uID0gc2VsZWN0aW9uO1xuXG4gIC8vIHJlcGxhY2UgZWxlbWVudHMgb24gbW92ZVxuICB0aGlzLnBvc3RFeGVjdXRlZChbICdlbGVtZW50cy5tb3ZlJyBdLCA1MDAsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0Lm5ld1BhcmVudCxcbiAgICAgICAgbmV3SG9zdCA9IGNvbnRleHQubmV3SG9zdCxcbiAgICAgICAgZWxlbWVudHMgPSBbXTtcblxuICAgIGZvckVhY2goY29udGV4dC5jbG9zdXJlLnRvcExldmVsLCBmdW5jdGlvbih0b3BMZXZlbEVsZW1lbnRzKSB7XG4gICAgICBpZiAoaXNFdmVudFN1YlByb2Nlc3ModG9wTGV2ZWxFbGVtZW50cykpIHtcbiAgICAgICAgZWxlbWVudHMgPSBlbGVtZW50cy5jb25jYXQodG9wTGV2ZWxFbGVtZW50cy5jaGlsZHJlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50cyA9IGVsZW1lbnRzLmNvbmNhdCh0b3BMZXZlbEVsZW1lbnRzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHNldCB0YXJnZXQgdG8gaG9zdCBpZiBhdHRhY2hpbmdcbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAxICYmIG5ld0hvc3QpIHtcbiAgICAgIHRhcmdldCA9IG5ld0hvc3Q7XG4gICAgfVxuXG4gICAgdmFyIGNhblJlcGxhY2UgPSBicG1uUnVsZXMuY2FuUmVwbGFjZShlbGVtZW50cywgdGFyZ2V0KTtcblxuICAgIGlmIChjYW5SZXBsYWNlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VFbGVtZW50cyhlbGVtZW50cywgY2FuUmVwbGFjZS5yZXBsYWNlbWVudHMsIG5ld0hvc3QpO1xuICAgIH1cbiAgfSwgdGhpcyk7XG5cbiAgLy8gdXBkYXRlIGF0dGFjaG1lbnRzIG9uIGhvc3QgcmVwbGFjZVxuICB0aGlzLnBvc3RFeGVjdXRlKFsgJ3NoYXBlLnJlcGxhY2UnIF0sIDE1MDAsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgb2xkU2hhcGUgPSBjb250ZXh0Lm9sZFNoYXBlLFxuICAgICAgICBuZXdTaGFwZSA9IGNvbnRleHQubmV3U2hhcGUsXG4gICAgICAgIGF0dGFjaGVycyA9IG9sZFNoYXBlLmF0dGFjaGVycyxcbiAgICAgICAgY2FuUmVwbGFjZTtcblxuICAgIGlmIChhdHRhY2hlcnMgJiYgYXR0YWNoZXJzLmxlbmd0aCkge1xuICAgICAgY2FuUmVwbGFjZSA9IGJwbW5SdWxlcy5jYW5SZXBsYWNlKGF0dGFjaGVycywgbmV3U2hhcGUpO1xuXG4gICAgICB0aGlzLnJlcGxhY2VFbGVtZW50cyhhdHRhY2hlcnMsIGNhblJlcGxhY2UucmVwbGFjZW1lbnRzKTtcbiAgICB9XG5cbiAgfSwgdGhpcyk7XG5cbiAgLy8ga2VlcCBJRCBvbiBzaGFwZSByZXBsYWNlXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFsgJ3NoYXBlLnJlcGxhY2UnIF0sIDE1MDAsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgb2xkU2hhcGUgPSBjb250ZXh0Lm9sZFNoYXBlLFxuICAgICAgICBuZXdTaGFwZSA9IGNvbnRleHQubmV3U2hhcGU7XG5cbiAgICBtb2RlbGluZy51bmNsYWltSWQob2xkU2hhcGUuYnVzaW5lc3NPYmplY3QuaWQsIG9sZFNoYXBlLmJ1c2luZXNzT2JqZWN0KTtcbiAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKG5ld1NoYXBlLCB7IGlkOiBvbGRTaGFwZS5pZCB9KTtcbiAgfSk7XG59XG5cbmluaGVyaXRzKFJlcGxhY2VFbGVtZW50QmVoYXZpb3VyLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5SZXBsYWNlRWxlbWVudEJlaGF2aW91ci5wcm90b3R5cGUucmVwbGFjZUVsZW1lbnRzID0gZnVuY3Rpb24oZWxlbWVudHMsIG5ld0VsZW1lbnRzKSB7XG4gIHZhciBlbGVtZW50UmVnaXN0cnkgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnksXG4gICAgICBicG1uUmVwbGFjZSA9IHRoaXMuX2JwbW5SZXBsYWNlLFxuICAgICAgc2VsZWN0aW9uID0gdGhpcy5fc2VsZWN0aW9uO1xuXG4gIGZvckVhY2gobmV3RWxlbWVudHMsIGZ1bmN0aW9uKHJlcGxhY2VtZW50KSB7XG4gICAgdmFyIG5ld0VsZW1lbnQgPSB7XG4gICAgICB0eXBlOiByZXBsYWNlbWVudC5uZXdFbGVtZW50VHlwZVxuICAgIH07XG5cbiAgICB2YXIgb2xkRWxlbWVudCA9IGVsZW1lbnRSZWdpc3RyeS5nZXQocmVwbGFjZW1lbnQub2xkRWxlbWVudElkKTtcblxuICAgIHZhciBpZHggPSBlbGVtZW50cy5pbmRleE9mKG9sZEVsZW1lbnQpO1xuXG4gICAgZWxlbWVudHNbaWR4XSA9IGJwbW5SZXBsYWNlLnJlcGxhY2VFbGVtZW50KG9sZEVsZW1lbnQsIG5ld0VsZW1lbnQsIHsgc2VsZWN0OiBmYWxzZSB9KTtcbiAgfSk7XG5cbiAgaWYgKG5ld0VsZW1lbnRzKSB7XG4gICAgc2VsZWN0aW9uLnNlbGVjdChlbGVtZW50cyk7XG4gIH1cbn07XG5cblJlcGxhY2VFbGVtZW50QmVoYXZpb3VyLiRpbmplY3QgPSBbXG4gICdicG1uUmVwbGFjZScsXG4gICdicG1uUnVsZXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ2luamVjdG9yJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3NlbGVjdGlvbidcbl07XG4iLCJpbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcclxuXHJcbmltcG9ydCB7IGlzRXhwYW5kZWQgfSBmcm9tICcuLi8uLi8uLi91dGlsL0RpVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBnZXRQYXJ0aWNpcGFudFJlc2l6ZUNvbnN0cmFpbnRzIH0gZnJvbSAnLi91dGlsL1Jlc2l6ZVV0aWwnO1xyXG5cclxudmFyIEhJR0hfUFJJT1JJVFkgPSAxNTAwO1xyXG5cclxuZXhwb3J0IHZhciBMQU5FX01JTl9ESU1FTlNJT05TID0geyB3aWR0aDogMzAwLCBoZWlnaHQ6IDYwIH07XHJcblxyXG5leHBvcnQgdmFyIFBBUlRJQ0lQQU5UX01JTl9ESU1FTlNJT05TID0geyB3aWR0aDogMzAwLCBoZWlnaHQ6IDE1MCB9O1xyXG5cclxuZXhwb3J0IHZhciBTVUJfUFJPQ0VTU19NSU5fRElNRU5TSU9OUyA9IHsgd2lkdGg6IDE0MCwgaGVpZ2h0OiAxMjAgfTtcclxuXHJcbmV4cG9ydCB2YXIgVEVYVF9BTk5PVEFUSU9OX01JTl9ESU1FTlNJT05TID0geyB3aWR0aDogNTAsIGhlaWdodDogMzAgfTtcclxuXHJcblxyXG4vKipcclxuICogU2V0IG1pbmltdW0gYm91bmRzL3Jlc2l6ZSBjb25zdHJhaW50cyBvbiByZXNpemUuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXNpemVCZWhhdmlvcihldmVudEJ1cykge1xyXG4gIGV2ZW50QnVzLm9uKCdyZXNpemUuc3RhcnQnLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcclxuICAgICAgICBkaXJlY3Rpb24gPSBjb250ZXh0LmRpcmVjdGlvbixcclxuICAgICAgICBiYWxhbmNlZCA9IGNvbnRleHQuYmFsYW5jZWQ7XHJcblxyXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpMYW5lJykgfHwgaXMoc2hhcGUsICdicG1uOlBhcnRpY2lwYW50JykpIHtcclxuICAgICAgY29udGV4dC5yZXNpemVDb25zdHJhaW50cyA9IGdldFBhcnRpY2lwYW50UmVzaXplQ29uc3RyYWludHMoc2hhcGUsIGRpcmVjdGlvbiwgYmFsYW5jZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgICBjb250ZXh0Lm1pbkRpbWVuc2lvbnMgPSBQQVJUSUNJUEFOVF9NSU5fRElNRU5TSU9OUztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOlN1YlByb2Nlc3MnKSAmJiBpc0V4cGFuZGVkKHNoYXBlKSkge1xyXG4gICAgICBjb250ZXh0Lm1pbkRpbWVuc2lvbnMgPSBTVUJfUFJPQ0VTU19NSU5fRElNRU5TSU9OUztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcclxuICAgICAgY29udGV4dC5taW5EaW1lbnNpb25zID0gVEVYVF9BTk5PVEFUSU9OX01JTl9ESU1FTlNJT05TO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5SZXNpemVCZWhhdmlvci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07IiwiaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIHJvdW5kQm91bmRzXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgaGFzUHJpbWFyeU1vZGlmaWVyXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvTW91c2UnO1xuXG52YXIgU0xJR0hUTFlfSElHSEVSX1BSSU9SSVRZID0gMTAwMTtcblxuXG4vKipcbiAqIEludm9rZSB7QGxpbmsgTW9kZWxpbmcjcmVzaXplTGFuZX0gaW5zdGVhZCBvZlxuICoge0BsaW5rIE1vZGVsaW5nI3Jlc2l6ZVNoYXBlfSB3aGVuIHJlc2l6aW5nIGEgTGFuZVxuICogb3IgUGFydGljaXBhbnQgc2hhcGUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlc2l6ZUxhbmVCZWhhdmlvcihldmVudEJ1cywgbW9kZWxpbmcpIHtcblxuICBldmVudEJ1cy5vbigncmVzaXplLnN0YXJ0JywgU0xJR0hUTFlfSElHSEVSX1BSSU9SSVRZICsgNTAwLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpMYW5lJykgfHwgaXMoc2hhcGUsICdicG1uOlBhcnRpY2lwYW50JykpIHtcblxuICAgICAgLy8gc2hvdWxkIHdlIHJlc2l6ZSB0aGUgb3Bwb3NpdGUgbGFuZShzKSBpblxuICAgICAgLy8gb3JkZXIgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIHJlc2l6ZSBvcGVyYXRpb24/XG4gICAgICBjb250ZXh0LmJhbGFuY2VkID0gIWhhc1ByaW1hcnlNb2RpZmllcihldmVudCk7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogSW50ZXJjZXB0IHJlc2l6ZSBlbmQgYW5kIGNhbGwgcmVzaXplIGxhbmUgZnVuY3Rpb24gaW5zdGVhZC5cbiAgICovXG4gIGV2ZW50QnVzLm9uKCdyZXNpemUuZW5kJywgU0xJR0hUTFlfSElHSEVSX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlLFxuICAgICAgICBuZXdCb3VuZHMgPSBjb250ZXh0Lm5ld0JvdW5kcztcblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46TGFuZScpIHx8IGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG5cbiAgICAgIGlmIChjYW5FeGVjdXRlKSB7XG5cbiAgICAgICAgLy8gZW5zdXJlIHdlIGhhdmUgYWN0dWFsIHBpeGVsIHZhbHVlcyBmb3IgbmV3IGJvdW5kc1xuICAgICAgICAvLyAoaW1wb3J0YW50IHdoZW4gem9vbSBsZXZlbCB3YXMgPiAxIGR1cmluZyBtb3ZlKVxuICAgICAgICBuZXdCb3VuZHMgPSByb3VuZEJvdW5kcyhuZXdCb3VuZHMpO1xuXG4gICAgICAgIC8vIHBlcmZvcm0gdGhlIGFjdHVhbCByZXNpemVcbiAgICAgICAgbW9kZWxpbmcucmVzaXplTGFuZShzaGFwZSwgbmV3Qm91bmRzLCBjb250ZXh0LmJhbGFuY2VkKTtcbiAgICAgIH1cblxuICAgICAgLy8gc3RvcCBwcm9wYWdhdGlvblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG59XG5cblJlc2l6ZUxhbmVCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgZmluZCxcclxuICBpc0FycmF5LFxyXG4gIG1hdGNoUGF0dGVybixcclxuICBzb21lXHJcbn0gZnJvbSAnbWluLWRhc2gnO1xyXG5cclxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxyXG4gIHJlbW92ZSBhcyBjb2xsZWN0aW9uUmVtb3ZlXHJcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9Db2xsZWN0aW9ucyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGdldEJ1c2luZXNzT2JqZWN0LFxyXG4gIGlzXHJcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNBbnkgfSBmcm9tICcuLi91dGlsL01vZGVsaW5nVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBoYXNFdmVudERlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi91dGlsL0RpVXRpbCc7XHJcblxyXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBBZGQgcmVmZXJlbmNlZCByb290IGVsZW1lbnRzIChlcnJvciwgZXNjYWxhdGlvbiwgbWVzc2FnZSwgc2lnbmFsKSBpZiB0aGV5IGRvbid0IGV4aXN0LlxyXG4gKiBDb3B5IHJlZmVyZW5jZWQgcm9vdCBlbGVtZW50cyBvbiBjb3B5ICYgcGFzdGUuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yKFxyXG4gICAgYnBtbmpzLCBldmVudEJ1cywgaW5qZWN0b3IsIG1vZGRsZUNvcHksIGJwbW5GYWN0b3J5XHJcbikge1xyXG4gIGluamVjdG9yLmludm9rZShDb21tYW5kSW50ZXJjZXB0b3IsIHRoaXMpO1xyXG5cclxuICBmdW5jdGlvbiBjYW5IYXZlUm9vdEVsZW1lbnRSZWZlcmVuY2UoZWxlbWVudCkge1xyXG4gICAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIFsgJ2JwbW46UmVjZWl2ZVRhc2snLCAnYnBtbjpTZW5kVGFzaycgXSkgfHxcclxuICAgICAgaGFzQW55RXZlbnREZWZpbml0aW9uKGVsZW1lbnQsIFtcclxuICAgICAgICAnYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbicsXHJcbiAgICAgICAgJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbicsXHJcbiAgICAgICAgJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicsXHJcbiAgICAgICAgJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJ1xyXG4gICAgICBdKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGhhc1Jvb3RFbGVtZW50KHJvb3RFbGVtZW50KSB7XHJcbiAgICB2YXIgZGVmaW5pdGlvbnMgPSBicG1uanMuZ2V0RGVmaW5pdGlvbnMoKSxcclxuICAgICAgICByb290RWxlbWVudHMgPSBkZWZpbml0aW9ucy5nZXQoJ3Jvb3RFbGVtZW50cycpO1xyXG5cclxuICAgIHJldHVybiAhIWZpbmQocm9vdEVsZW1lbnRzLCBtYXRjaFBhdHRlcm4oeyBpZDogcm9vdEVsZW1lbnQuaWQgfSkpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0Um9vdEVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eU5hbWUoZXZlbnREZWZpbml0aW9uKSB7XHJcbiAgICBpZiAoaXMoZXZlbnREZWZpbml0aW9uLCAnYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbicpKSB7XHJcbiAgICAgIHJldHVybiAnZXJyb3JSZWYnO1xyXG4gICAgfSBlbHNlIGlmIChpcyhldmVudERlZmluaXRpb24sICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nKSkge1xyXG4gICAgICByZXR1cm4gJ2VzY2FsYXRpb25SZWYnO1xyXG4gICAgfSBlbHNlIGlmIChpcyhldmVudERlZmluaXRpb24sICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nKSkge1xyXG4gICAgICByZXR1cm4gJ21lc3NhZ2VSZWYnO1xyXG4gICAgfSBlbHNlIGlmIChpcyhldmVudERlZmluaXRpb24sICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicpKSB7XHJcbiAgICAgIHJldHVybiAnc2lnbmFsUmVmJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldFJvb3RFbGVtZW50KGJ1c2luZXNzT2JqZWN0KSB7XHJcbiAgICBpZiAoaXNBbnkoYnVzaW5lc3NPYmplY3QsIFsgJ2JwbW46UmVjZWl2ZVRhc2snLCAnYnBtbjpTZW5kVGFzaycgXSkpIHtcclxuICAgICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgnbWVzc2FnZVJlZicpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBldmVudERlZmluaXRpb25zID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdldmVudERlZmluaXRpb25zJyksXHJcbiAgICAgICAgZXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uc1sgMCBdO1xyXG5cclxuICAgIHJldHVybiBldmVudERlZmluaXRpb24uZ2V0KGdldFJvb3RFbGVtZW50UmVmZXJlbmNlUHJvcGVydHlOYW1lKGV2ZW50RGVmaW5pdGlvbikpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2V0Um9vdEVsZW1lbnQoYnVzaW5lc3NPYmplY3QsIHJvb3RFbGVtZW50KSB7XHJcbiAgICBpZiAoaXNBbnkoYnVzaW5lc3NPYmplY3QsIFsgJ2JwbW46UmVjZWl2ZVRhc2snLCAnYnBtbjpTZW5kVGFzaycgXSkpIHtcclxuICAgICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LnNldCgnbWVzc2FnZVJlZicsIHJvb3RFbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZXZlbnREZWZpbml0aW9ucyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXZlbnREZWZpbml0aW9ucycpLFxyXG4gICAgICAgIGV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbnNbIDAgXTtcclxuXHJcbiAgICByZXR1cm4gZXZlbnREZWZpbml0aW9uLnNldChnZXRSb290RWxlbWVudFJlZmVyZW5jZVByb3BlcnR5TmFtZShldmVudERlZmluaXRpb24pLCByb290RWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICAvLyBjcmVhdGUgc2hhcGVcclxuICB0aGlzLmV4ZWN1dGVkKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xyXG5cclxuICAgIGlmICghY2FuSGF2ZVJvb3RFbGVtZW50UmVmZXJlbmNlKHNoYXBlKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpLFxyXG4gICAgICAgIHJvb3RFbGVtZW50ID0gZ2V0Um9vdEVsZW1lbnQoYnVzaW5lc3NPYmplY3QpLFxyXG4gICAgICAgIHJvb3RFbGVtZW50cztcclxuXHJcbiAgICBpZiAocm9vdEVsZW1lbnQgJiYgIWhhc1Jvb3RFbGVtZW50KHJvb3RFbGVtZW50KSkge1xyXG4gICAgICByb290RWxlbWVudHMgPSBicG1uanMuZ2V0RGVmaW5pdGlvbnMoKS5nZXQoJ3Jvb3RFbGVtZW50cycpO1xyXG5cclxuICAgICAgLy8gYWRkIHJvb3QgZWxlbWVudFxyXG4gICAgICBjb2xsZWN0aW9uQWRkKHJvb3RFbGVtZW50cywgcm9vdEVsZW1lbnQpO1xyXG5cclxuICAgICAgY29udGV4dC5hZGRlZFJvb3RFbGVtZW50ID0gcm9vdEVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgfSwgdHJ1ZSk7XHJcblxyXG4gIHRoaXMucmV2ZXJ0ZWQoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgIHZhciBhZGRlZFJvb3RFbGVtZW50ID0gY29udGV4dC5hZGRlZFJvb3RFbGVtZW50O1xyXG5cclxuICAgIGlmICghYWRkZWRSb290RWxlbWVudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJvb3RFbGVtZW50cyA9IGJwbW5qcy5nZXREZWZpbml0aW9ucygpLmdldCgncm9vdEVsZW1lbnRzJyk7XHJcblxyXG4gICAgLy8gcmVtb3ZlIHJvb3QgZWxlbWVudFxyXG4gICAgY29sbGVjdGlvblJlbW92ZShyb290RWxlbWVudHMsIGFkZGVkUm9vdEVsZW1lbnQpO1xyXG4gIH0sIHRydWUpO1xyXG5cclxuICBldmVudEJ1cy5vbignY29weVBhc3RlLmNvcHlFbGVtZW50JywgZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBjb250ZXh0LmRlc2NyaXB0b3IsXHJcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDtcclxuXHJcbiAgICBpZiAoIWNhbkhhdmVSb290RWxlbWVudFJlZmVyZW5jZShlbGVtZW50KSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXHJcbiAgICAgICAgcm9vdEVsZW1lbnQgPSBnZXRSb290RWxlbWVudChidXNpbmVzc09iamVjdCk7XHJcblxyXG4gICAgaWYgKHJvb3RFbGVtZW50KSB7XHJcbiAgICAgIGRlc2NyaXB0b3IucmVmZXJlbmNlZFJvb3RFbGVtZW50ID0gcm9vdEVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGV2ZW50QnVzLm9uKCdjb3B5UGFzdGUucGFzdGVFbGVtZW50JywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICB2YXIgZGVzY3JpcHRvciA9IGNvbnRleHQuZGVzY3JpcHRvcixcclxuICAgICAgICBidXNpbmVzc09iamVjdCA9IGRlc2NyaXB0b3IuYnVzaW5lc3NPYmplY3Q7XHJcblxyXG4gICAgaWYgKCFjYW5IYXZlUm9vdEVsZW1lbnRSZWZlcmVuY2UoYnVzaW5lc3NPYmplY3QpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcmVmZXJlbmNlZFJvb3RFbGVtZW50ID0gZGVzY3JpcHRvci5yZWZlcmVuY2VkUm9vdEVsZW1lbnQ7XHJcblxyXG4gICAgaWYgKCFyZWZlcmVuY2VkUm9vdEVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGFzUm9vdEVsZW1lbnQocmVmZXJlbmNlZFJvb3RFbGVtZW50KSkge1xyXG4gICAgICByZWZlcmVuY2VkUm9vdEVsZW1lbnQgPSBtb2RkbGVDb3B5LmNvcHlFbGVtZW50KFxyXG4gICAgICAgIHJlZmVyZW5jZWRSb290RWxlbWVudCxcclxuICAgICAgICBicG1uRmFjdG9yeS5jcmVhdGUocmVmZXJlbmNlZFJvb3RFbGVtZW50LiR0eXBlKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFJvb3RFbGVtZW50KGJ1c2luZXNzT2JqZWN0LCByZWZlcmVuY2VkUm9vdEVsZW1lbnQpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5Sb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yLiRpbmplY3QgPSBbXHJcbiAgJ2JwbW5qcycsXHJcbiAgJ2V2ZW50QnVzJyxcclxuICAnaW5qZWN0b3InLFxyXG4gICdtb2RkbGVDb3B5JyxcclxuICAnYnBtbkZhY3RvcnknXHJcbl07XHJcblxyXG5pbmhlcml0cyhSb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBoYXNBbnlFdmVudERlZmluaXRpb24oZWxlbWVudCwgdHlwZXMpIHtcclxuICBpZiAoIWlzQXJyYXkodHlwZXMpKSB7XHJcbiAgICB0eXBlcyA9IFsgdHlwZXMgXTtcclxuICB9XHJcblxyXG4gIHJldHVybiBzb21lKHR5cGVzLCBmdW5jdGlvbih0eXBlKSB7XHJcbiAgICByZXR1cm4gaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsIHR5cGUpO1xyXG4gIH0pO1xyXG59IiwiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJ21pbi1kYXNoJztcclxuXHJcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNFeHBhbmRlZCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvRGlVdGlsJztcclxuXHJcbmltcG9ydCB7XHJcbiAgTEFORV9NSU5fRElNRU5TSU9OUyxcclxuICBQQVJUSUNJUEFOVF9NSU5fRElNRU5TSU9OUyxcclxuICBTVUJfUFJPQ0VTU19NSU5fRElNRU5TSU9OUyxcclxuICBURVhUX0FOTk9UQVRJT05fTUlOX0RJTUVOU0lPTlNcclxufSBmcm9tICcuL1Jlc2l6ZUJlaGF2aW9yJztcclxuXHJcbmltcG9ydCB7IGdldENoaWxkTGFuZXMgfSBmcm9tICcuLi91dGlsL0xhbmVVdGlsJztcclxuXHJcbnZhciBtYXggPSBNYXRoLm1heDtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTcGFjZVRvb2xCZWhhdmlvcihldmVudEJ1cykge1xyXG4gIGV2ZW50QnVzLm9uKCdzcGFjZVRvb2wuZ2V0TWluRGltZW5zaW9ucycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgIHZhciBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcyxcclxuICAgICAgICBheGlzID0gY29udGV4dC5heGlzLFxyXG4gICAgICAgIHN0YXJ0ID0gY29udGV4dC5zdGFydCxcclxuICAgICAgICBtaW5EaW1lbnNpb25zID0ge307XHJcblxyXG4gICAgZm9yRWFjaChzaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XHJcbiAgICAgIHZhciBpZCA9IHNoYXBlLmlkO1xyXG5cclxuICAgICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XHJcblxyXG4gICAgICAgIGlmIChpc0hvcml6b250YWwoYXhpcykpIHtcclxuICAgICAgICAgIG1pbkRpbWVuc2lvbnNbIGlkIF0gPSBQQVJUSUNJUEFOVF9NSU5fRElNRU5TSU9OUztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbWluRGltZW5zaW9uc1sgaWQgXSA9IHtcclxuICAgICAgICAgICAgd2lkdGg6IFBBUlRJQ0lQQU5UX01JTl9ESU1FTlNJT05TLndpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGdldFBhcnRpY2lwYW50TWluSGVpZ2h0KHNoYXBlLCBzdGFydClcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgaXNFeHBhbmRlZChzaGFwZSkpIHtcclxuICAgICAgICBtaW5EaW1lbnNpb25zWyBpZCBdID0gU1VCX1BST0NFU1NfTUlOX0RJTUVOU0lPTlM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xyXG4gICAgICAgIG1pbkRpbWVuc2lvbnNbIGlkIF0gPSBURVhUX0FOTk9UQVRJT05fTUlOX0RJTUVOU0lPTlM7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBtaW5EaW1lbnNpb25zO1xyXG4gIH0pO1xyXG59XHJcblxyXG5TcGFjZVRvb2xCZWhhdmlvci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07XHJcblxyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcbmZ1bmN0aW9uIGlzSG9yaXpvbnRhbChheGlzKSB7XHJcbiAgcmV0dXJuIGF4aXMgPT09ICd4JztcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCBtaW5pbXVtIGhlaWdodCBmb3IgcGFydGljaXBhbnQgdGFraW5nIGxhbmVzIGludG8gYWNjb3VudC5cclxuICpcclxuICogQHBhcmFtIHs8ZGpzLm1vZGVsLlNoYXBlPn0gcGFydGljaXBhbnRcclxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XHJcbiAqXHJcbiAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRQYXJ0aWNpcGFudE1pbkhlaWdodChwYXJ0aWNpcGFudCwgc3RhcnQpIHtcclxuICB2YXIgbGFuZXNNaW5IZWlnaHQ7XHJcblxyXG4gIGlmICghaGFzQ2hpbGRMYW5lcyhwYXJ0aWNpcGFudCkpIHtcclxuICAgIHJldHVybiBQQVJUSUNJUEFOVF9NSU5fRElNRU5TSU9OUy5oZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBsYW5lc01pbkhlaWdodCA9IGdldExhbmVzTWluSGVpZ2h0KHBhcnRpY2lwYW50LCBzdGFydCk7XHJcblxyXG4gIHJldHVybiBtYXgoUEFSVElDSVBBTlRfTUlOX0RJTUVOU0lPTlMuaGVpZ2h0LCBsYW5lc01pbkhlaWdodCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhc0NoaWxkTGFuZXMoZWxlbWVudCkge1xyXG4gIHJldHVybiAhIWdldENoaWxkTGFuZXMoZWxlbWVudCkubGVuZ3RoO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRMYW5lc01pbkhlaWdodChwYXJ0aWNpcGFudCwgcmVzaXplU3RhcnQpIHtcclxuICB2YXIgbGFuZXMgPSBnZXRDaGlsZExhbmVzKHBhcnRpY2lwYW50KSxcclxuICAgICAgcmVzaXplZExhbmU7XHJcblxyXG4gIC8vIGZpbmQgdGhlIG5lc3RlZCBsYW5lIHdoaWNoIGlzIGN1cnJlbnRseSByZXNpemVkXHJcbiAgcmVzaXplZExhbmUgPSBmaW5kUmVzaXplZExhbmUobGFuZXMsIHJlc2l6ZVN0YXJ0KTtcclxuXHJcbiAgLy8gcmVzaXplZCBsYW5lIGNhbm5vdCBzaHJpbmsgYmVsb3cgdGhlIG1pbmltdW0gaGVpZ2h0XHJcbiAgLy8gYnV0IHJlbWFpbmluZyBsYW5lcycgZGltZW5zaW9ucyBhcmUga2VwdCBpbnRhY3RcclxuICByZXR1cm4gcGFydGljaXBhbnQuaGVpZ2h0IC0gcmVzaXplZExhbmUuaGVpZ2h0ICsgTEFORV9NSU5fRElNRU5TSU9OUy5oZWlnaHQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBGaW5kIG5lc3RlZCBsYW5lIHdoaWNoIGlzIGN1cnJlbnRseSByZXNpemVkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5TaGFwZT59IGxhbmVzXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByZXNpemVTdGFydFxyXG4gKi9cclxuZnVuY3Rpb24gZmluZFJlc2l6ZWRMYW5lKGxhbmVzLCByZXNpemVTdGFydCkge1xyXG4gIHZhciBpLCBsYW5lLCBjaGlsZExhbmVzO1xyXG5cclxuICBmb3IgKGkgPSAwOyBpIDwgbGFuZXMubGVuZ3RoOyBpKyspIHtcclxuICAgIGxhbmUgPSBsYW5lc1tpXTtcclxuXHJcbiAgICAvLyByZXNpemluZyBjdXJyZW50IGxhbmUgb3IgYSBsYW5lIG5lc3RlZFxyXG4gICAgaWYgKHJlc2l6ZVN0YXJ0ID49IGxhbmUueSAmJiByZXNpemVTdGFydCA8PSBsYW5lLnkgKyBsYW5lLmhlaWdodCkge1xyXG4gICAgICBjaGlsZExhbmVzID0gZ2V0Q2hpbGRMYW5lcyhsYW5lKTtcclxuXHJcbiAgICAgIC8vIGEgbmVzdGVkIGxhbmUgaXMgcmVzaXplZFxyXG4gICAgICBpZiAoY2hpbGRMYW5lcy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmluZFJlc2l6ZWRMYW5lKGNoaWxkTGFuZXMsIHJlc2l6ZVN0YXJ0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gY3VycmVudCBsYW5lIGlzIHRoZSByZXNpemVkIG9uZVxyXG4gICAgICByZXR1cm4gbGFuZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuaW1wb3J0IHsgaXNFeHBhbmRlZCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvRGlVdGlsLmpzJztcblxuLyoqXG4gKiBBZGQgc3RhcnQgZXZlbnQgcmVwbGFjaW5nIGVsZW1lbnQgd2l0aCBleHBhbmRlZCBzdWIgcHJvY2Vzcy5cbiAqXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3ViUHJvY2Vzc1N0YXJ0RXZlbnRCZWhhdmlvcihpbmplY3RvciwgbW9kZWxpbmcpIHtcbiAgaW5qZWN0b3IuaW52b2tlKENvbW1hbmRJbnRlcmNlcHRvciwgdGhpcyk7XG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ3NoYXBlLnJlcGxhY2UnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBvbGRTaGFwZSA9IGV2ZW50LmNvbnRleHQub2xkU2hhcGUsXG4gICAgICAgIG5ld1NoYXBlID0gZXZlbnQuY29udGV4dC5uZXdTaGFwZTtcblxuICAgIGlmIChcbiAgICAgICFpcyhuZXdTaGFwZSwgJ2JwbW46U3ViUHJvY2VzcycpIHx8XG4gICAgICAhaXMob2xkU2hhcGUsICdicG1uOlRhc2snKSB8fFxuICAgICAgIWlzRXhwYW5kZWQobmV3U2hhcGUpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHBvc2l0aW9uID0gZ2V0U3RhcnRFdmVudFBvc2l0aW9uKG5ld1NoYXBlKTtcblxuICAgIG1vZGVsaW5nLmNyZWF0ZVNoYXBlKHsgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcgfSwgcG9zaXRpb24sIG5ld1NoYXBlKTtcbiAgfSk7XG59XG5cblN1YlByb2Nlc3NTdGFydEV2ZW50QmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2luamVjdG9yJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuaW5oZXJpdHMoU3ViUHJvY2Vzc1N0YXJ0RXZlbnRCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldFN0YXJ0RXZlbnRQb3NpdGlvbihzaGFwZSkge1xuICByZXR1cm4ge1xuICAgIHg6IHNoYXBlLnggKyBzaGFwZS53aWR0aCAvIDYsXG4gICAgeTogc2hhcGUueSArIHNoYXBlLmhlaWdodCAvIDJcbiAgfTtcbn1cbiIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBjb21wdXRlQ2hpbGRyZW5CQm94XG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3Jlc2l6ZS9SZXNpemVVdGlsJztcblxuXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRvZ2dsZUVsZW1lbnRDb2xsYXBzZUJlaGF2aW91cihcbiAgICBldmVudEJ1cywgZWxlbWVudEZhY3RvcnksIG1vZGVsaW5nLFxuICAgIHJlc2l6ZSkge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuXG4gIGZ1bmN0aW9uIGhpZGVFbXB0eUxhYmVscyhjaGlsZHJlbikge1xuICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdsYWJlbCcgJiYgIWNoaWxkLmJ1c2luZXNzT2JqZWN0Lm5hbWUpIHtcbiAgICAgICAgICBjaGlsZC5oaWRkZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBleHBhbmRlZEJvdW5kcyhzaGFwZSwgZGVmYXVsdFNpemUpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBzaGFwZS5jaGlsZHJlbixcbiAgICAgICAgbmV3Qm91bmRzID0gZGVmYXVsdFNpemUsXG4gICAgICAgIHZpc2libGVFbGVtZW50cyxcbiAgICAgICAgdmlzaWJsZUJCb3g7XG5cbiAgICB2aXNpYmxlRWxlbWVudHMgPSBmaWx0ZXJWaXNpYmxlKGNoaWxkcmVuKS5jb25jYXQoWyBzaGFwZSBdKTtcblxuICAgIHZpc2libGVCQm94ID0gY29tcHV0ZUNoaWxkcmVuQkJveCh2aXNpYmxlRWxlbWVudHMpO1xuXG4gICAgaWYgKHZpc2libGVCQm94KSB7XG5cbiAgICAgIC8vIGNlbnRlciB0byB2aXNpYmxlQkJveCB3aXRoIG1heChkZWZhdWx0U2l6ZSwgY2hpbGRyZW5Cb3VuZHMpXG4gICAgICBuZXdCb3VuZHMud2lkdGggPSBNYXRoLm1heCh2aXNpYmxlQkJveC53aWR0aCwgbmV3Qm91bmRzLndpZHRoKTtcbiAgICAgIG5ld0JvdW5kcy5oZWlnaHQgPSBNYXRoLm1heCh2aXNpYmxlQkJveC5oZWlnaHQsIG5ld0JvdW5kcy5oZWlnaHQpO1xuXG4gICAgICBuZXdCb3VuZHMueCA9IHZpc2libGVCQm94LnggKyAodmlzaWJsZUJCb3gud2lkdGggLSBuZXdCb3VuZHMud2lkdGgpIC8gMjtcbiAgICAgIG5ld0JvdW5kcy55ID0gdmlzaWJsZUJCb3gueSArICh2aXNpYmxlQkJveC5oZWlnaHQgLSBuZXdCb3VuZHMuaGVpZ2h0KSAvIDI7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gY2VudGVyIHRvIGNvbGxhcHNlZCBzaGFwZSB3aXRoIGRlZmF1bHRTaXplXG4gICAgICBuZXdCb3VuZHMueCA9IHNoYXBlLnggKyAoc2hhcGUud2lkdGggLSBuZXdCb3VuZHMud2lkdGgpIC8gMjtcbiAgICAgIG5ld0JvdW5kcy55ID0gc2hhcGUueSArIChzaGFwZS5oZWlnaHQgLSBuZXdCb3VuZHMuaGVpZ2h0KSAvIDI7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0JvdW5kcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbGxhcHNlZEJvdW5kcyhzaGFwZSwgZGVmYXVsdFNpemUpIHtcblxuICAgIHJldHVybiB7XG4gICAgICB4OiBzaGFwZS54ICsgKHNoYXBlLndpZHRoIC0gZGVmYXVsdFNpemUud2lkdGgpIC8gMixcbiAgICAgIHk6IHNoYXBlLnkgKyAoc2hhcGUuaGVpZ2h0IC0gZGVmYXVsdFNpemUuaGVpZ2h0KSAvIDIsXG4gICAgICB3aWR0aDogZGVmYXVsdFNpemUud2lkdGgsXG4gICAgICBoZWlnaHQ6IGRlZmF1bHRTaXplLmhlaWdodFxuICAgIH07XG4gIH1cblxuICB0aGlzLmV4ZWN1dGVkKFsgJ3NoYXBlLnRvZ2dsZUNvbGxhcHNlJyBdLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAoIWlzKHNoYXBlLCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXNoYXBlLmNvbGxhcHNlZCkge1xuXG4gICAgICAvLyBhbGwgY2hpbGRyZW4gZ290IG1hZGUgdmlzaWJsZSB0aHJvdWdoIGRqcywgaGlkZSBlbXB0eSBsYWJlbHNcbiAgICAgIGhpZGVFbXB0eUxhYmVscyhzaGFwZS5jaGlsZHJlbik7XG5cbiAgICAgIC8vIHJlbW92ZSBjb2xsYXBzZWQgbWFya2VyXG4gICAgICBnZXRCdXNpbmVzc09iamVjdChzaGFwZSkuZGkuaXNFeHBhbmRlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gcGxhY2UgY29sbGFwc2VkIG1hcmtlclxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpLmRpLmlzRXhwYW5kZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIHRoaXMucmV2ZXJ0ZWQoWyAnc2hhcGUudG9nZ2xlQ29sbGFwc2UnIF0sIExPV19QUklPUklUWSwgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQ7XG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuXG4gICAgLy8gcmV2ZXJ0IHJlbW92aW5nL3BsYWNpbmcgY29sbGFwc2VkIG1hcmtlclxuICAgIGlmICghc2hhcGUuY29sbGFwc2VkKSB7XG4gICAgICBnZXRCdXNpbmVzc09iamVjdChzaGFwZSkuZGkuaXNFeHBhbmRlZCA9IHRydWU7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpLmRpLmlzRXhwYW5kZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFsgJ3NoYXBlLnRvZ2dsZUNvbGxhcHNlJyBdLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgc2hhcGUgPSBlLmNvbnRleHQuc2hhcGUsXG4gICAgICAgIGRlZmF1bHRTaXplID0gZWxlbWVudEZhY3RvcnkuX2dldERlZmF1bHRTaXplKHNoYXBlKSxcbiAgICAgICAgbmV3Qm91bmRzO1xuXG4gICAgaWYgKHNoYXBlLmNvbGxhcHNlZCkge1xuXG4gICAgICAvLyByZXNpemUgdG8gZGVmYXVsdCBzaXplIG9mIGNvbGxhcHNlZCBzaGFwZXNcbiAgICAgIG5ld0JvdW5kcyA9IGNvbGxhcHNlZEJvdW5kcyhzaGFwZSwgZGVmYXVsdFNpemUpO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIHJlc2l6ZSB0byBib3VuZHMgb2YgbWF4KHZpc2libGUgY2hpbGRyZW4sIGRlZmF1bHRTaXplKVxuICAgICAgbmV3Qm91bmRzID0gZXhwYW5kZWRCb3VuZHMoc2hhcGUsIGRlZmF1bHRTaXplKTtcbiAgICB9XG5cbiAgICBtb2RlbGluZy5yZXNpemVTaGFwZShzaGFwZSwgbmV3Qm91bmRzLCBudWxsLCB7XG4gICAgICBhdXRvUmVzaXplOiBzaGFwZS5jb2xsYXBzZWQgPyBmYWxzZSA6ICdud3NlJ1xuICAgIH0pO1xuICB9KTtcblxufVxuXG5cbmluaGVyaXRzKFRvZ2dsZUVsZW1lbnRDb2xsYXBzZUJlaGF2aW91ciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuVG9nZ2xlRWxlbWVudENvbGxhcHNlQmVoYXZpb3VyLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdlbGVtZW50RmFjdG9yeScsXG4gICdtb2RlbGluZydcbl07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGZpbHRlclZpc2libGUoZWxlbWVudHMpIHtcbiAgcmV0dXJuIGVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuICFlLmhpZGRlbjtcbiAgfSk7XG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuaW1wb3J0IHsgaXNFeHBhbmRlZCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvRGlVdGlsJztcbmltcG9ydCB7IGlzTGFiZWwgfSBmcm9tICcuLi8uLi8uLi91dGlsL0xhYmVsVXRpbCc7XG5cblxuLyoqXG4gKiBVbmNsYWltcyBtb2RlbCBJRHMgb24gZWxlbWVudCBkZWxldGlvbi5cbiAqXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICogQHBhcmFtIHtNb2RkbGV9IG1vZGRsZVxuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVW5jbGFpbUlkQmVoYXZpb3IoY2FudmFzLCBpbmplY3RvciwgbW9kZGxlLCBtb2RlbGluZykge1xuICBpbmplY3Rvci5pbnZva2UoQ29tbWFuZEludGVyY2VwdG9yLCB0aGlzKTtcblxuICB0aGlzLnByZUV4ZWN1dGUoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIHNoYXBlQm8gPSBzaGFwZS5idXNpbmVzc09iamVjdDtcblxuICAgIGlmIChpc0xhYmVsKHNoYXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBpc0V4cGFuZGVkKHNoYXBlKSkge1xuICAgICAgbW9kZGxlLmlkcy51bmNsYWltKHNoYXBlQm8ucHJvY2Vzc1JlZi5pZCk7XG4gICAgfVxuXG4gICAgbW9kZWxpbmcudW5jbGFpbUlkKHNoYXBlQm8uaWQsIHNoYXBlQm8pO1xuICB9KTtcblxuXG4gIHRoaXMucHJlRXhlY3V0ZSgnY29ubmVjdGlvbi5kZWxldGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgY29ubmVjdGlvbkJvID0gY29ubmVjdGlvbi5idXNpbmVzc09iamVjdDtcblxuICAgIG1vZGVsaW5nLnVuY2xhaW1JZChjb25uZWN0aW9uQm8uaWQsIGNvbm5lY3Rpb25Cbyk7XG4gIH0pO1xuXG4gIHRoaXMucHJlRXhlY3V0ZSgnY2FudmFzLnVwZGF0ZVJvb3QnLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgcm9vdEVsZW1lbnQgPSBjYW52YXMuZ2V0Um9vdEVsZW1lbnQoKSxcbiAgICAgICAgcm9vdEVsZW1lbnRCbyA9IHJvb3RFbGVtZW50LmJ1c2luZXNzT2JqZWN0O1xuXG4gICAgbW9kZGxlLmlkcy51bmNsYWltKHJvb3RFbGVtZW50Qm8uaWQpO1xuICB9KTtcbn1cblxuaW5oZXJpdHMoVW5jbGFpbUlkQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cblVuY2xhaW1JZEJlaGF2aW9yLiRpbmplY3QgPSBbICdjYW52YXMnLCAnaW5qZWN0b3InLCAnbW9kZGxlJywgJ21vZGVsaW5nJyBdOyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5cbi8qKlxuICogQSBiZWhhdmlvciB0aGF0IHVuc2V0cyB0aGUgRGVmYXVsdCBwcm9wZXJ0eSBvZlxuICogc2VxdWVuY2UgZmxvdyBzb3VyY2Ugb24gZWxlbWVudCBkZWxldGUsIGlmIHRoZVxuICogcmVtb3ZlZCBlbGVtZW50IGlzIHRoZSBHYXRld2F5IG9yIFRhc2sncyBkZWZhdWx0IGZsb3cuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERlbGV0ZVNlcXVlbmNlRmxvd0JlaGF2aW9yKGV2ZW50QnVzLCBtb2RlbGluZykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuXG4gIHRoaXMucHJlRXhlY3V0ZSgnY29ubmVjdGlvbi5kZWxldGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgc291cmNlID0gY29ubmVjdGlvbi5zb3VyY2U7XG5cbiAgICBpZiAoaXNEZWZhdWx0Rmxvdyhjb25uZWN0aW9uLCBzb3VyY2UpKSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKHNvdXJjZSwge1xuICAgICAgICAnZGVmYXVsdCc6IG51bGxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmluaGVyaXRzKERlbGV0ZVNlcXVlbmNlRmxvd0JlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5EZWxldGVTZXF1ZW5jZUZsb3dCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc0RlZmF1bHRGbG93KGNvbm5lY3Rpb24sIHNvdXJjZSkge1xuXG4gIGlmICghaXMoY29ubmVjdGlvbiwgJ2JwbW46U2VxdWVuY2VGbG93JykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgc291cmNlQm8gPSBnZXRCdXNpbmVzc09iamVjdChzb3VyY2UpLFxuICAgICAgc2VxdWVuY2VGbG93ID0gZ2V0QnVzaW5lc3NPYmplY3QoY29ubmVjdGlvbik7XG5cbiAgcmV0dXJuIHNvdXJjZUJvLmdldCgnZGVmYXVsdCcpID09PSBzZXF1ZW5jZUZsb3c7XG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7XG4gIGlzXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxudmFyIExPV19QUklPUklUWSA9IDUwMCxcbiAgICBISUdIX1BSSU9SSVRZID0gNTAwMDtcblxuXG4vKipcbiAqIEJQTU4gc3BlY2lmaWMgZGVsZXRlIGxhbmUgYmVoYXZpb3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVXBkYXRlRmxvd05vZGVSZWZzQmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nLCB0cmFuc2xhdGUpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgLyoqXG4gICAqIE9rLCB0aGlzIGlzIGl0OlxuICAgKlxuICAgKiBXZSBoYXZlIHRvIHVwZGF0ZSB0aGUgTGFuZSNmbG93Tm9kZVJlZnMgX2FuZF9cbiAgICogRmxvd05vZGUjbGFuZXMgd2l0aCBldmVyeSBGbG93Tm9kZSBtb3ZlL3Jlc2l6ZSBhbmRcbiAgICogTGFuZSBtb3ZlL3Jlc2l6ZS5cbiAgICpcbiAgICogV2Ugd2FudCB0byBncm91cCB0aGF0IHN0dWZmIHRvIHJlY29tcHV0ZSBjb250YWlubWVudHNcbiAgICogYXMgZWZmaWNpZW50IGFzIHBvc3NpYmxlLlxuICAgKlxuICAgKiBZZWEhXG4gICAqL1xuXG4gIC8vIHRoZSB1cGRhdGUgY29udGV4dFxuICB2YXIgY29udGV4dDtcblxuXG4gIGZ1bmN0aW9uIGluaXRDb250ZXh0KCkge1xuICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IG5ldyBVcGRhdGVDb250ZXh0KCk7XG4gICAgY29udGV4dC5lbnRlcigpO1xuXG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDb250ZXh0KCkge1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgnb3V0IG9mIGJvdW5kcyByZWxlYXNlJykpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVsZWFzZUNvbnRleHQoKSB7XG5cbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ291dCBvZiBib3VuZHMgcmVsZWFzZScpKTtcbiAgICB9XG5cbiAgICB2YXIgdHJpZ2dlclVwZGF0ZSA9IGNvbnRleHQubGVhdmUoKTtcblxuICAgIGlmICh0cmlnZ2VyVXBkYXRlKSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVMYW5lUmVmcyhjb250ZXh0LmZsb3dOb2RlcywgY29udGV4dC5sYW5lcyk7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0cmlnZ2VyVXBkYXRlO1xuICB9XG5cblxuICB2YXIgbGFuZVJlZlVwZGF0ZUV2ZW50cyA9IFtcbiAgICAnc3BhY2VUb29sJyxcbiAgICAnbGFuZS5hZGQnLFxuICAgICdsYW5lLnJlc2l6ZScsXG4gICAgJ2xhbmUuc3BsaXQnLFxuICAgICdlbGVtZW50cy5jcmVhdGUnLFxuICAgICdlbGVtZW50cy5kZWxldGUnLFxuICAgICdlbGVtZW50cy5tb3ZlJyxcbiAgICAnc2hhcGUuY3JlYXRlJyxcbiAgICAnc2hhcGUuZGVsZXRlJyxcbiAgICAnc2hhcGUubW92ZScsXG4gICAgJ3NoYXBlLnJlc2l6ZSdcbiAgXTtcblxuXG4gIC8vIGxpc3RlbiB0byBhIGxvdCBvZiBzdHVmZiB0byBncm91cCBsYW5lIHVwZGF0ZXNcblxuICB0aGlzLnByZUV4ZWN1dGUobGFuZVJlZlVwZGF0ZUV2ZW50cywgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBpbml0Q29udGV4dCgpO1xuICB9KTtcblxuICB0aGlzLnBvc3RFeGVjdXRlZChsYW5lUmVmVXBkYXRlRXZlbnRzLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmVsZWFzZUNvbnRleHQoKTtcbiAgfSk7XG5cblxuICAvLyBNYXJrIGZsb3cgbm9kZXMgKyBsYW5lcyB0aGF0IG5lZWQgYW4gdXBkYXRlXG5cbiAgdGhpcy5wcmVFeGVjdXRlKFtcbiAgICAnc2hhcGUuY3JlYXRlJyxcbiAgICAnc2hhcGUubW92ZScsXG4gICAgJ3NoYXBlLmRlbGV0ZScsXG4gICAgJ3NoYXBlLnJlc2l6ZSdcbiAgXSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgdmFyIHVwZGF0ZUNvbnRleHQgPSBnZXRDb250ZXh0KCk7XG5cbiAgICAvLyBubyBuZWVkIHRvIHVwZGF0ZSBsYWJlbHNcbiAgICBpZiAoc2hhcGUubGFiZWxUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOkxhbmUnKSkge1xuICAgICAgdXBkYXRlQ29udGV4dC5hZGRMYW5lKHNoYXBlKTtcbiAgICB9XG5cbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOkZsb3dOb2RlJykpIHtcbiAgICAgIHVwZGF0ZUNvbnRleHQuYWRkRmxvd05vZGUoc2hhcGUpO1xuICAgIH1cbiAgfSk7XG59XG5cblVwZGF0ZUZsb3dOb2RlUmVmc0JlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZycgLFxuICAndHJhbnNsYXRlJ1xuXTtcblxuaW5oZXJpdHMoVXBkYXRlRmxvd05vZGVSZWZzQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cblxuZnVuY3Rpb24gVXBkYXRlQ29udGV4dCgpIHtcblxuICB0aGlzLmZsb3dOb2RlcyA9IFtdO1xuICB0aGlzLmxhbmVzID0gW107XG5cbiAgdGhpcy5jb3VudGVyID0gMDtcblxuICB0aGlzLmFkZExhbmUgPSBmdW5jdGlvbihsYW5lKSB7XG4gICAgdGhpcy5sYW5lcy5wdXNoKGxhbmUpO1xuICB9O1xuXG4gIHRoaXMuYWRkRmxvd05vZGUgPSBmdW5jdGlvbihmbG93Tm9kZSkge1xuICAgIHRoaXMuZmxvd05vZGVzLnB1c2goZmxvd05vZGUpO1xuICB9O1xuXG4gIHRoaXMuZW50ZXIgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNvdW50ZXIrKztcbiAgfTtcblxuICB0aGlzLmxlYXZlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jb3VudGVyLS07XG5cbiAgICByZXR1cm4gIXRoaXMuY291bnRlcjtcbiAgfTtcbn0iLCJpbXBvcnQgQWRhcHRpdmVMYWJlbFBvc2l0aW9uaW5nQmVoYXZpb3IgZnJvbSAnLi9BZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvcic7XG5pbXBvcnQgQXBwZW5kQmVoYXZpb3IgZnJvbSAnLi9BcHBlbmRCZWhhdmlvcic7XG5pbXBvcnQgQXNzb2NpYXRpb25CZWhhdmlvciBmcm9tICcuL0Fzc29jaWF0aW9uQmVoYXZpb3InO1xuaW1wb3J0IEF0dGFjaEV2ZW50QmVoYXZpb3IgZnJvbSAnLi9BdHRhY2hFdmVudEJlaGF2aW9yJztcbmltcG9ydCBCb3VuZGFyeUV2ZW50QmVoYXZpb3IgZnJvbSAnLi9Cb3VuZGFyeUV2ZW50QmVoYXZpb3InO1xuaW1wb3J0IFJvb3RFbGVtZW50UmVmZXJlbmNlQmVoYXZpb3IgZnJvbSAnLi9Sb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yJztcbmltcG9ydCBDcmVhdGVCZWhhdmlvciBmcm9tICcuL0NyZWF0ZUJlaGF2aW9yJztcbmltcG9ydCBGaXhIb3ZlckJlaGF2aW9yIGZyb20gJy4vRml4SG92ZXJCZWhhdmlvcic7XG5pbXBvcnQgQ3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yIGZyb20gJy4vQ3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yJztcbmltcG9ydCBDcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yIGZyb20gJy4vQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvcic7XG5pbXBvcnQgRGF0YUlucHV0QXNzb2NpYXRpb25CZWhhdmlvciBmcm9tICcuL0RhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3InO1xuaW1wb3J0IERhdGFTdG9yZUJlaGF2aW9yIGZyb20gJy4vRGF0YVN0b3JlQmVoYXZpb3InO1xuaW1wb3J0IERlbGV0ZUxhbmVCZWhhdmlvciBmcm9tICcuL0RlbGV0ZUxhbmVCZWhhdmlvcic7XG5pbXBvcnQgRGV0YWNoRXZlbnRCZWhhdmlvciBmcm9tICcuL0RldGFjaEV2ZW50QmVoYXZpb3InO1xuaW1wb3J0IERyb3BPbkZsb3dCZWhhdmlvciBmcm9tICcuL0Ryb3BPbkZsb3dCZWhhdmlvcic7XG5pbXBvcnQgRXZlbnRCYXNlZEdhdGV3YXlCZWhhdmlvciBmcm9tICcuL0V2ZW50QmFzZWRHYXRld2F5QmVoYXZpb3InO1xuaW1wb3J0IEdyb3VwQmVoYXZpb3IgZnJvbSAnLi9Hcm91cEJlaGF2aW9yJztcbmltcG9ydCBJbXBvcnREb2NraW5nRml4IGZyb20gJy4vSW1wb3J0RG9ja2luZ0ZpeCc7XG5pbXBvcnQgSXNIb3Jpem9udGFsRml4IGZyb20gJy4vSXNIb3Jpem9udGFsRml4JztcbmltcG9ydCBMYWJlbEJlaGF2aW9yIGZyb20gJy4vTGFiZWxCZWhhdmlvcic7XG5pbXBvcnQgTW9kZWxpbmdGZWVkYmFjayBmcm9tICcuL01vZGVsaW5nRmVlZGJhY2snO1xuaW1wb3J0IFJlcGxhY2VDb25uZWN0aW9uQmVoYXZpb3IgZnJvbSAnLi9SZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yJztcbmltcG9ydCBSZW1vdmVQYXJ0aWNpcGFudEJlaGF2aW9yIGZyb20gJy4vUmVtb3ZlUGFydGljaXBhbnRCZWhhdmlvcic7XG5pbXBvcnQgUmVwbGFjZUVsZW1lbnRCZWhhdmlvdXIgZnJvbSAnLi9SZXBsYWNlRWxlbWVudEJlaGF2aW91cic7XG5pbXBvcnQgUmVzaXplQmVoYXZpb3IgZnJvbSAnLi9SZXNpemVCZWhhdmlvcic7XG5pbXBvcnQgUmVzaXplTGFuZUJlaGF2aW9yIGZyb20gJy4vUmVzaXplTGFuZUJlaGF2aW9yJztcbmltcG9ydCBSZW1vdmVFbGVtZW50QmVoYXZpb3IgZnJvbSAnLi9SZW1vdmVFbGVtZW50QmVoYXZpb3InO1xuaW1wb3J0IFNwYWNlVG9vbEJlaGF2aW9yIGZyb20gJy4vU3BhY2VUb29sQmVoYXZpb3InO1xuaW1wb3J0IFN1YlByb2Nlc3NTdGFydEV2ZW50QmVoYXZpb3IgZnJvbSAnLi9TdWJQcm9jZXNzU3RhcnRFdmVudEJlaGF2aW9yJztcbmltcG9ydCBUb2dnbGVFbGVtZW50Q29sbGFwc2VCZWhhdmlvdXIgZnJvbSAnLi9Ub2dnbGVFbGVtZW50Q29sbGFwc2VCZWhhdmlvdXInO1xuaW1wb3J0IFVuY2xhaW1JZEJlaGF2aW9yIGZyb20gJy4vVW5jbGFpbUlkQmVoYXZpb3InO1xuaW1wb3J0IFVwZGF0ZUZsb3dOb2RlUmVmc0JlaGF2aW9yIGZyb20gJy4vVXBkYXRlRmxvd05vZGVSZWZzQmVoYXZpb3InO1xuaW1wb3J0IFVuc2V0RGVmYXVsdEZsb3dCZWhhdmlvciBmcm9tICcuL1Vuc2V0RGVmYXVsdEZsb3dCZWhhdmlvcic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFtcbiAgICAnYWRhcHRpdmVMYWJlbFBvc2l0aW9uaW5nQmVoYXZpb3InLFxuICAgICdhcHBlbmRCZWhhdmlvcicsXG4gICAgJ2Fzc29jaWF0aW9uQmVoYXZpb3InLFxuICAgICdhdHRhY2hFdmVudEJlaGF2aW9yJyxcbiAgICAnYm91bmRhcnlFdmVudEJlaGF2aW9yJyxcbiAgICAncm9vdEVsZW1lbnRSZWZlcmVuY2VCZWhhdmlvcicsXG4gICAgJ2NyZWF0ZUJlaGF2aW9yJyxcbiAgICAnZml4SG92ZXJCZWhhdmlvcicsXG4gICAgJ2NyZWF0ZURhdGFPYmplY3RCZWhhdmlvcicsXG4gICAgJ2NyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3InLFxuICAgICdkYXRhU3RvcmVCZWhhdmlvcicsXG4gICAgJ2RhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3InLFxuICAgICdkZWxldGVMYW5lQmVoYXZpb3InLFxuICAgICdkZXRhY2hFdmVudEJlaGF2aW9yJyxcbiAgICAnZHJvcE9uRmxvd0JlaGF2aW9yJyxcbiAgICAnZXZlbnRCYXNlZEdhdGV3YXlCZWhhdmlvcicsXG4gICAgJ2dyb3VwQmVoYXZpb3InLFxuICAgICdpbXBvcnREb2NraW5nRml4JyxcbiAgICAnaXNIb3Jpem9udGFsRml4JyxcbiAgICAnbGFiZWxCZWhhdmlvcicsXG4gICAgJ21vZGVsaW5nRmVlZGJhY2snLFxuICAgICdyZW1vdmVFbGVtZW50QmVoYXZpb3InLFxuICAgICdyZW1vdmVQYXJ0aWNpcGFudEJlaGF2aW9yJyxcbiAgICAncmVwbGFjZUNvbm5lY3Rpb25CZWhhdmlvcicsXG4gICAgJ3JlcGxhY2VFbGVtZW50QmVoYXZpb3VyJyxcbiAgICAncmVzaXplQmVoYXZpb3InLFxuICAgICdyZXNpemVMYW5lQmVoYXZpb3InLFxuICAgICd0b2dnbGVFbGVtZW50Q29sbGFwc2VCZWhhdmlvdXInLFxuICAgICdzcGFjZVRvb2xCZWhhdmlvcicsXG4gICAgJ3N1YlByb2Nlc3NTdGFydEV2ZW50QmVoYXZpb3InLFxuICAgICd1bmNsYWltSWRCZWhhdmlvcicsXG4gICAgJ3Vuc2V0RGVmYXVsdEZsb3dCZWhhdmlvcicsXG4gICAgJ3VwZGF0ZUZsb3dOb2RlUmVmc0JlaGF2aW9yJ1xuICBdLFxuICBhZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvcjogWyAndHlwZScsIEFkYXB0aXZlTGFiZWxQb3NpdGlvbmluZ0JlaGF2aW9yIF0sXG4gIGFwcGVuZEJlaGF2aW9yOiBbICd0eXBlJywgQXBwZW5kQmVoYXZpb3IgXSxcbiAgYXNzb2NpYXRpb25CZWhhdmlvcjogWyAndHlwZScsIEFzc29jaWF0aW9uQmVoYXZpb3IgXSxcbiAgYXR0YWNoRXZlbnRCZWhhdmlvcjogWyAndHlwZScsIEF0dGFjaEV2ZW50QmVoYXZpb3IgXSxcbiAgYm91bmRhcnlFdmVudEJlaGF2aW9yOiBbICd0eXBlJywgQm91bmRhcnlFdmVudEJlaGF2aW9yIF0sXG4gIHJvb3RFbGVtZW50UmVmZXJlbmNlQmVoYXZpb3I6IFsgJ3R5cGUnLCBSb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yIF0sXG4gIGNyZWF0ZUJlaGF2aW9yOiBbICd0eXBlJywgQ3JlYXRlQmVoYXZpb3IgXSxcbiAgZml4SG92ZXJCZWhhdmlvcjogWyAndHlwZScsIEZpeEhvdmVyQmVoYXZpb3IgXSxcbiAgY3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yOiBbICd0eXBlJywgQ3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yIF0sXG4gIGNyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3I6IFsgJ3R5cGUnLCBDcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yIF0sXG4gIGRhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3I6IFsgJ3R5cGUnLCBEYXRhSW5wdXRBc3NvY2lhdGlvbkJlaGF2aW9yIF0sXG4gIGRhdGFTdG9yZUJlaGF2aW9yOiBbICd0eXBlJywgRGF0YVN0b3JlQmVoYXZpb3IgXSxcbiAgZGVsZXRlTGFuZUJlaGF2aW9yOiBbICd0eXBlJywgRGVsZXRlTGFuZUJlaGF2aW9yIF0sXG4gIGRldGFjaEV2ZW50QmVoYXZpb3I6IFsgJ3R5cGUnLCBEZXRhY2hFdmVudEJlaGF2aW9yIF0sXG4gIGRyb3BPbkZsb3dCZWhhdmlvcjogWyAndHlwZScsIERyb3BPbkZsb3dCZWhhdmlvciBdLFxuICBldmVudEJhc2VkR2F0ZXdheUJlaGF2aW9yOiBbICd0eXBlJywgRXZlbnRCYXNlZEdhdGV3YXlCZWhhdmlvciBdLFxuICBncm91cEJlaGF2aW9yOiBbICd0eXBlJywgR3JvdXBCZWhhdmlvciBdLFxuICBpbXBvcnREb2NraW5nRml4OiBbICd0eXBlJywgSW1wb3J0RG9ja2luZ0ZpeCBdLFxuICBpc0hvcml6b250YWxGaXg6IFsgJ3R5cGUnLCBJc0hvcml6b250YWxGaXggXSxcbiAgbGFiZWxCZWhhdmlvcjogWyAndHlwZScsIExhYmVsQmVoYXZpb3IgXSxcbiAgbW9kZWxpbmdGZWVkYmFjazogWyAndHlwZScsIE1vZGVsaW5nRmVlZGJhY2sgXSxcbiAgcmVwbGFjZUNvbm5lY3Rpb25CZWhhdmlvcjogWyAndHlwZScsIFJlcGxhY2VDb25uZWN0aW9uQmVoYXZpb3IgXSxcbiAgcmVtb3ZlUGFydGljaXBhbnRCZWhhdmlvcjogWyAndHlwZScsIFJlbW92ZVBhcnRpY2lwYW50QmVoYXZpb3IgXSxcbiAgcmVwbGFjZUVsZW1lbnRCZWhhdmlvdXI6IFsgJ3R5cGUnLCBSZXBsYWNlRWxlbWVudEJlaGF2aW91ciBdLFxuICByZXNpemVCZWhhdmlvcjogWyAndHlwZScsIFJlc2l6ZUJlaGF2aW9yIF0sXG4gIHJlc2l6ZUxhbmVCZWhhdmlvcjogWyAndHlwZScsIFJlc2l6ZUxhbmVCZWhhdmlvciBdLFxuICByZW1vdmVFbGVtZW50QmVoYXZpb3I6IFsgJ3R5cGUnLCBSZW1vdmVFbGVtZW50QmVoYXZpb3IgXSxcbiAgdG9nZ2xlRWxlbWVudENvbGxhcHNlQmVoYXZpb3VyIDogWyAndHlwZScsIFRvZ2dsZUVsZW1lbnRDb2xsYXBzZUJlaGF2aW91ciBdLFxuICBzcGFjZVRvb2xCZWhhdmlvcjogWyAndHlwZScsIFNwYWNlVG9vbEJlaGF2aW9yIF0sXG4gIHN1YlByb2Nlc3NTdGFydEV2ZW50QmVoYXZpb3I6IFsgJ3R5cGUnLCBTdWJQcm9jZXNzU3RhcnRFdmVudEJlaGF2aW9yIF0sXG4gIHVuY2xhaW1JZEJlaGF2aW9yOiBbICd0eXBlJywgVW5jbGFpbUlkQmVoYXZpb3IgXSxcbiAgdXBkYXRlRmxvd05vZGVSZWZzQmVoYXZpb3I6IFsgJ3R5cGUnLCBVcGRhdGVGbG93Tm9kZVJlZnNCZWhhdmlvciBdLFxuICB1bnNldERlZmF1bHRGbG93QmVoYXZpb3I6IFsgJ3R5cGUnLCBVbnNldERlZmF1bHRGbG93QmVoYXZpb3IgXVxufTtcbiIsImltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvQ29sbGVjdGlvbnMnO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdFxufSBmcm9tICcuLi8uLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBicG1uOkNhdGVnb3J5VmFsdWUgaW5zaWRlIGEgbmV3IGJwbW46Q2F0ZWdvcnlcbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGRlZmluaXRpb25zXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9IGNhdGVnb3J5VmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXRlZ29yeVZhbHVlKGRlZmluaXRpb25zLCBicG1uRmFjdG9yeSkge1xuICB2YXIgY2F0ZWdvcnlWYWx1ZSA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpDYXRlZ29yeVZhbHVlJyksXG4gICAgICBjYXRlZ29yeSA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpDYXRlZ29yeScsIHtcbiAgICAgICAgY2F0ZWdvcnlWYWx1ZTogWyBjYXRlZ29yeVZhbHVlIF1cbiAgICAgIH0pO1xuXG4gIC8vIGFkZCB0byBjb3JyZWN0IHBsYWNlXG4gIGNvbGxlY3Rpb25BZGQoZGVmaW5pdGlvbnMuZ2V0KCdyb290RWxlbWVudHMnKSwgY2F0ZWdvcnkpO1xuICBnZXRCdXNpbmVzc09iamVjdChjYXRlZ29yeSkuJHBhcmVudCA9IGRlZmluaXRpb25zO1xuICBnZXRCdXNpbmVzc09iamVjdChjYXRlZ29yeVZhbHVlKS4kcGFyZW50ID0gY2F0ZWdvcnk7XG5cbiAgcmV0dXJuIGNhdGVnb3J5VmFsdWU7XG5cbn0iLCIvKipcbiAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiBhIHZlY3RvclxuICpcbiAqIEBwYXJhbSB7VmVjdG9yfVxuICogQHJldHVybiB7RmxvYXR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZWN0b3JMZW5ndGgodikge1xuICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHYueCwgMikgKyBNYXRoLnBvdyh2LnksIDIpKTtcbn1cblxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFuZ2xlIGJldHdlZW4gYSBsaW5lIGEgdGhlIHlBeGlzXG4gKlxuICogQHBhcmFtIHtBcnJheX1cbiAqIEByZXR1cm4ge0Zsb2F0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QW5nbGUobGluZSkge1xuXG4gIC8vIHJldHVybiB2YWx1ZSBpcyBiZXR3ZWVuIDAsIDE4MCBhbmQgLTE4MCwgLTBcbiAgLy8gQGphbnN0dWVtbWVsOiBtYXliZSByZXBsYWNlIHJldHVybiBhL2Igd2l0aCBiL2FcbiAgcmV0dXJuIE1hdGguYXRhbigobGluZVsxXS55IC0gbGluZVswXS55KSAvIChsaW5lWzFdLnggLSBsaW5lWzBdLngpKTtcbn1cblxuXG4vKipcbiAqIFJvdGF0ZXMgYSB2ZWN0b3IgYnkgYSBnaXZlbiBhbmdsZVxuICpcbiAqIEBwYXJhbSB7VmVjdG9yfVxuICogQHBhcmFtIHtGbG9hdH0gQW5nbGUgaW4gcmFkaWFuc1xuICogQHJldHVybiB7VmVjdG9yfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlVmVjdG9yKHZlY3RvciwgYW5nbGUpIHtcbiAgcmV0dXJuICghYW5nbGUpID8gdmVjdG9yIDoge1xuICAgIHg6IE1hdGguY29zKGFuZ2xlKSAqIHZlY3Rvci54IC0gTWF0aC5zaW4oYW5nbGUpICogdmVjdG9yLnksXG4gICAgeTogTWF0aC5zaW4oYW5nbGUpICogdmVjdG9yLnggKyBNYXRoLmNvcyhhbmdsZSkgKiB2ZWN0b3IueVxuICB9O1xufVxuXG5cbi8qKlxuICogU29sdmVzIGEgMkQgZXF1YXRpb24gc3lzdGVtXG4gKiBhICsgcipiID0gYywgd2hlcmUgYSxiLGMgYXJlIDJEIHZlY3RvcnNcbiAqXG4gKiBAcGFyYW0ge1ZlY3Rvcn1cbiAqIEBwYXJhbSB7VmVjdG9yfVxuICogQHBhcmFtIHtWZWN0b3J9XG4gKiBAcmV0dXJuIHtGbG9hdH1cbiAqL1xuZnVuY3Rpb24gc29sdmVMYW1iYVN5c3RlbShhLCBiLCBjKSB7XG5cbiAgLy8gdGhlIDJkIHN5c3RlbVxuICB2YXIgc3lzdGVtID0gW1xuICAgIHsgbjogYVswXSAtIGNbMF0sIGxhbWJkYTogYlswXSB9LFxuICAgIHsgbjogYVsxXSAtIGNbMV0sIGxhbWJkYTogYlsxXSB9XG4gIF07XG5cbiAgLy8gc29sdmVcbiAgdmFyIG4gPSBzeXN0ZW1bMF0ubiAqIGJbMF0gKyBzeXN0ZW1bMV0ubiAqIGJbMV0sXG4gICAgICBsID0gc3lzdGVtWzBdLmxhbWJkYSAqIGJbMF0gKyBzeXN0ZW1bMV0ubGFtYmRhICogYlsxXTtcblxuICByZXR1cm4gLW4vbDtcbn1cblxuXG4vKipcbiAqIFBvc2l0aW9uIG9mIHBlcnBlbmRpY3VsYXIgZm9vdFxuICpcbiAqIEBwYXJhbSB7UG9pbnR9XG4gKiBAcGFyYW0gWyB7UG9pbnR9LCB7UG9pbnR9IF0gbGluZSBkZWZpbmVkIHRocm91Z2ggdHdvIHBvaW50c1xuICogQHJldHVybiB7UG9pbnR9IHRoZSBwZXJwZW5kaWN1bGFyIGZvb3QgcG9zaXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlcnBlbmRpY3VsYXJGb290KHBvaW50LCBsaW5lKSB7XG5cbiAgdmFyIGEgPSBsaW5lWzBdLCBiID0gbGluZVsxXTtcblxuICAvLyByZWxhdGl2ZSBwb3NpdGlvbiBvZiBiIGZyb20gYVxuICB2YXIgYmQgPSB7IHg6IGIueCAtIGEueCwgeTogYi55IC0gYS55IH07XG5cbiAgLy8gc29sdmUgZXF1YXRpb24gc3lzdGVtIHRvIHRoZSBwYXJhbWV0cml6ZWQgdmVjdG9ycyBwYXJhbSByZWFsIHZhbHVlXG4gIHZhciByID0gc29sdmVMYW1iYVN5c3RlbShbIGEueCwgYS55IF0sIFsgYmQueCwgYmQueSBdLCBbIHBvaW50LngsIHBvaW50LnkgXSk7XG5cbiAgcmV0dXJuIHsgeDogYS54ICsgcipiZC54LCB5OiBhLnkgKyByKmJkLnkgfTtcbn1cblxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gYSBwb2ludCBhbmQgYSBsaW5lXG4gKlxuICogQHBhcmFtIHtQb2ludH1cbiAqIEBwYXJhbSBbIHtQb2ludH0sIHtQb2ludH0gXSBsaW5lIGRlZmluZWQgdGhyb3VnaCB0d28gcG9pbnRzXG4gKiBAcmV0dXJuIHtGbG9hdH0gZGlzdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpc3RhbmNlUG9pbnRMaW5lKHBvaW50LCBsaW5lKSB7XG5cbiAgdmFyIHBmUG9pbnQgPSBwZXJwZW5kaWN1bGFyRm9vdChwb2ludCwgbGluZSk7XG5cbiAgLy8gZGlzdGFuY2UgdmVjdG9yXG4gIHZhciBjb25uZWN0aW9uVmVjdG9yID0ge1xuICAgIHg6IHBmUG9pbnQueCAtIHBvaW50LngsXG4gICAgeTogcGZQb2ludC55IC0gcG9pbnQueVxuICB9O1xuXG4gIHJldHVybiB2ZWN0b3JMZW5ndGgoY29ubmVjdGlvblZlY3Rvcik7XG59XG5cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHNcbiAqXG4gKiBAcGFyYW0ge1BvaW50fVxuICogQHBhcmFtIHtQb2ludH1cbiAqIEByZXR1cm4ge0Zsb2F0fSBkaXN0YW5jZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlzdGFuY2VQb2ludFBvaW50KHBvaW50MSwgcG9pbnQyKSB7XG5cbiAgcmV0dXJuIHZlY3Rvckxlbmd0aCh7XG4gICAgeDogcG9pbnQxLnggLSBwb2ludDIueCxcbiAgICB5OiBwb2ludDEueSAtIHBvaW50Mi55XG4gIH0pO1xufSIsImltcG9ydCB7XG4gIGdldERpc3RhbmNlUG9pbnRQb2ludCxcbiAgcm90YXRlVmVjdG9yLFxuICBnZXRBbmdsZVxufSBmcm9tICcuL0dlb21ldHJpY1V0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRBdHRhY2htZW50XG59IGZyb20gJy4vTGluZUF0dGFjaG1lbnRVdGlsJztcblxuaW1wb3J0IHtcbiAgcm91bmRQb2ludFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmROZXdMYWJlbExpbmVTdGFydEluZGV4KG9sZFdheXBvaW50cywgbmV3V2F5cG9pbnRzLCBhdHRhY2htZW50LCBoaW50cykge1xuXG4gIHZhciBpbmRleCA9IGF0dGFjaG1lbnQuc2VnbWVudEluZGV4O1xuXG4gIHZhciBvZmZzZXQgPSBuZXdXYXlwb2ludHMubGVuZ3RoIC0gb2xkV2F5cG9pbnRzLmxlbmd0aDtcblxuICAvLyBzZWdtZW50TW92ZSBoYXBwZW5lZFxuICBpZiAoaGludHMuc2VnbWVudE1vdmUpIHtcblxuICAgIHZhciBvbGRTZWdtZW50U3RhcnRJbmRleCA9IGhpbnRzLnNlZ21lbnRNb3ZlLnNlZ21lbnRTdGFydEluZGV4LFxuICAgICAgICBuZXdTZWdtZW50U3RhcnRJbmRleCA9IGhpbnRzLnNlZ21lbnRNb3ZlLm5ld1NlZ21lbnRTdGFydEluZGV4O1xuXG4gICAgLy8gaWYgbGFiZWwgd2FzIG9uIG1vdmVkIHNlZ21lbnQgcmV0dXJuIG5ldyBzZWdtZW50IGluZGV4XG4gICAgaWYgKGluZGV4ID09PSBvbGRTZWdtZW50U3RhcnRJbmRleCkge1xuICAgICAgcmV0dXJuIG5ld1NlZ21lbnRTdGFydEluZGV4O1xuICAgIH1cblxuICAgIC8vIGxhYmVsIGlzIGFmdGVyIG5ldyBzZWdtZW50IGluZGV4XG4gICAgaWYgKGluZGV4ID49IG5ld1NlZ21lbnRTdGFydEluZGV4KSB7XG4gICAgICByZXR1cm4gKGluZGV4K29mZnNldCA8IG5ld1NlZ21lbnRTdGFydEluZGV4KSA/IG5ld1NlZ21lbnRTdGFydEluZGV4IDogaW5kZXgrb2Zmc2V0O1xuICAgIH1cblxuICAgIC8vIGlmIGxhYmVsIGlzIGJlZm9yZSBuZXcgc2VnbWVudCBpbmRleFxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8vIGJlbmRwb2ludE1vdmUgaGFwcGVuZWRcbiAgaWYgKGhpbnRzLmJlbmRwb2ludE1vdmUpIHtcblxuICAgIHZhciBpbnNlcnQgPSBoaW50cy5iZW5kcG9pbnRNb3ZlLmluc2VydCxcbiAgICAgICAgYmVuZHBvaW50SW5kZXggPSBoaW50cy5iZW5kcG9pbnRNb3ZlLmJlbmRwb2ludEluZGV4LFxuICAgICAgICBuZXdJbmRleDtcblxuICAgIC8vIHdheXBvaW50cyBsZW5ndGggZGlkbnQgY2hhbmdlXG4gICAgaWYgKG9mZnNldCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIC8vIGxhYmVsIGJlaGluZCBuZXcvcmVtb3ZlZCBiZW5kcG9pbnRcbiAgICBpZiAoaW5kZXggPj0gYmVuZHBvaW50SW5kZXgpIHtcbiAgICAgIG5ld0luZGV4ID0gaW5zZXJ0ID8gaW5kZXggKyAxIDogaW5kZXggLSAxO1xuICAgIH1cblxuICAgIC8vIGxhYmVsIGJlZm9yZSBuZXcvcmVtb3ZlZCBiZW5kcG9pbnRcbiAgICBpZiAoaW5kZXggPCBiZW5kcG9pbnRJbmRleCkge1xuXG4gICAgICBuZXdJbmRleCA9IGluZGV4O1xuXG4gICAgICAvLyBkZWNpZGUgbGFiZWwgc2hvdWxkIHRha2UgcmlnaHQgb3IgbGVmdCBzZWdtZW50XG4gICAgICBpZiAoaW5zZXJ0ICYmIGF0dGFjaG1lbnQudHlwZSAhPT0gJ2JlbmRwb2ludCcgJiYgYmVuZHBvaW50SW5kZXgtMSA9PT0gaW5kZXgpIHtcblxuICAgICAgICB2YXIgcmVsID0gcmVsYXRpdmVQb3NpdGlvbk1pZFdheXBvaW50KG5ld1dheXBvaW50cywgYmVuZHBvaW50SW5kZXgpO1xuXG4gICAgICAgIGlmIChyZWwgPCBhdHRhY2htZW50LnJlbGF0aXZlTG9jYXRpb24pIHtcbiAgICAgICAgICBuZXdJbmRleCsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0luZGV4O1xuICB9XG5cbiAgLy8gc3RhcnQvZW5kIGNoYW5nZWRcbiAgaWYgKG9mZnNldCA9PT0gMCkge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGlmIChoaW50cy5jb25uZWN0aW9uU3RhcnQpIHtcbiAgICByZXR1cm4gKGluZGV4ID09PSAwKSA/IDAgOiBudWxsO1xuICB9XG5cbiAgaWYgKGhpbnRzLmNvbm5lY3Rpb25FbmQpIHtcbiAgICByZXR1cm4gKGluZGV4ID09PSBvbGRXYXlwb2ludHMubGVuZ3RoIC0gMikgPyBuZXdXYXlwb2ludHMubGVuZ3RoIC0gMiA6IG51bGw7XG4gIH1cblxuICAvLyBpZiBub3RoaW5nIGZpdHMsIHJldHVybiBudWxsXG4gIHJldHVybiBudWxsO1xufVxuXG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSByZXF1aXJlZCBhZGp1c3RtZW50IChtb3ZlIGRlbHRhKSBmb3IgdGhlIGdpdmVuIGxhYmVsXG4gKiBhZnRlciB0aGUgY29ubmVjdGlvbiB3YXlwb2ludHMgZ290IHVwZGF0ZWQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuTGFiZWx9IGxhYmVsXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gbmV3V2F5cG9pbnRzXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gb2xkV2F5cG9pbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gaGludHNcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH0gZGVsdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExhYmVsQWRqdXN0bWVudChsYWJlbCwgbmV3V2F5cG9pbnRzLCBvbGRXYXlwb2ludHMsIGhpbnRzKSB7XG5cbiAgdmFyIHggPSAwLFxuICAgICAgeSA9IDA7XG5cbiAgdmFyIGxhYmVsUG9zaXRpb24gPSBnZXRMYWJlbE1pZChsYWJlbCk7XG5cbiAgLy8gZ2V0IGNsb3Nlc3QgYXR0YWNobWVudFxuICB2YXIgYXR0YWNobWVudCA9IGdldEF0dGFjaG1lbnQobGFiZWxQb3NpdGlvbiwgb2xkV2F5cG9pbnRzKSxcbiAgICAgIG9sZExhYmVsTGluZUluZGV4ID0gYXR0YWNobWVudC5zZWdtZW50SW5kZXgsXG4gICAgICBuZXdMYWJlbExpbmVJbmRleCA9IGZpbmROZXdMYWJlbExpbmVTdGFydEluZGV4KG9sZFdheXBvaW50cywgbmV3V2F5cG9pbnRzLCBhdHRhY2htZW50LCBoaW50cyk7XG5cbiAgaWYgKG5ld0xhYmVsTGluZUluZGV4ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHsgeDogeCwgeTogeSB9O1xuICB9XG5cbiAgLy8gc2hvdWxkIG5ldmVyIGhhcHBlblxuICAvLyBUT0RPKEBqYW5zdHVlbW1lbCk6IHRocm93IGFuIGVycm9yIGhlcmUgd2hlbiBjb25uZWN0aW9uU2VnbWVudE1vdmUgaXMgcmVmYWN0b3JlZFxuICBpZiAobmV3TGFiZWxMaW5lSW5kZXggPCAwIHx8XG4gICAgICBuZXdMYWJlbExpbmVJbmRleCA+IG5ld1dheXBvaW50cy5sZW5ndGggLSAyKSB7XG4gICAgcmV0dXJuIHsgeDogeCwgeTogeSB9O1xuICB9XG5cbiAgdmFyIG9sZExhYmVsTGluZSA9IGdldExpbmUob2xkV2F5cG9pbnRzLCBvbGRMYWJlbExpbmVJbmRleCksXG4gICAgICBuZXdMYWJlbExpbmUgPSBnZXRMaW5lKG5ld1dheXBvaW50cywgbmV3TGFiZWxMaW5lSW5kZXgpLFxuICAgICAgb2xkRm9vdCA9IGF0dGFjaG1lbnQucG9zaXRpb247XG5cbiAgdmFyIHJlbGF0aXZlRm9vdFBvc2l0aW9uID0gZ2V0UmVsYXRpdmVGb290UG9zaXRpb24ob2xkTGFiZWxMaW5lLCBvbGRGb290KSxcbiAgICAgIGFuZ2xlRGVsdGEgPSBnZXRBbmdsZURlbHRhKG9sZExhYmVsTGluZSwgbmV3TGFiZWxMaW5lKTtcblxuICAvLyBzcGVjaWFsIHJ1bGUgaWYgbGFiZWwgb24gYmVuZHBvaW50XG4gIGlmIChhdHRhY2htZW50LnR5cGUgPT09ICdiZW5kcG9pbnQnKSB7XG5cbiAgICB2YXIgb2Zmc2V0ID0gbmV3V2F5cG9pbnRzLmxlbmd0aCAtIG9sZFdheXBvaW50cy5sZW5ndGgsXG4gICAgICAgIG9sZEJlbmRwb2ludEluZGV4ID0gYXR0YWNobWVudC5iZW5kcG9pbnRJbmRleCxcbiAgICAgICAgb2xkQmVuZHBvaW50ID0gb2xkV2F5cG9pbnRzW29sZEJlbmRwb2ludEluZGV4XTtcblxuICAgIC8vIGJlbmRwb2ludCBwb3NpdGlvbiBoYXNuJ3QgY2hhbmdlZCwgcmV0dXJuIHNhbWUgcG9zaXRpb25cbiAgICBpZiAobmV3V2F5cG9pbnRzLmluZGV4T2Yob2xkQmVuZHBvaW50KSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB7IHg6IHgsIHk6IHkgfTtcbiAgICB9XG5cbiAgICAvLyBuZXcgYmVuZHBvaW50IGFuZCBvbGQgYmVuZHBvaW50IGhhdmUgc2FtZSBpbmRleCwgdGhlbiBqdXN0IHJldHVybiB0aGUgb2Zmc2V0XG4gICAgaWYgKG9mZnNldCA9PT0gMCkge1xuICAgICAgdmFyIG5ld0JlbmRwb2ludCA9IG5ld1dheXBvaW50c1tvbGRCZW5kcG9pbnRJbmRleF07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IG5ld0JlbmRwb2ludC54IC0gYXR0YWNobWVudC5wb3NpdGlvbi54LFxuICAgICAgICB5OiBuZXdCZW5kcG9pbnQueSAtIGF0dGFjaG1lbnQucG9zaXRpb24ueVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBpZiBiZW5kcG9pbnRzIGdldCByZW1vdmVkXG4gICAgaWYgKG9mZnNldCA8IDAgJiYgb2xkQmVuZHBvaW50SW5kZXggIT09IDAgJiYgb2xkQmVuZHBvaW50SW5kZXggPCBvbGRXYXlwb2ludHMubGVuZ3RoIC0gMSkge1xuICAgICAgcmVsYXRpdmVGb290UG9zaXRpb24gPSByZWxhdGl2ZVBvc2l0aW9uTWlkV2F5cG9pbnQob2xkV2F5cG9pbnRzLCBvbGRCZW5kcG9pbnRJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5ld0Zvb3QgPSB7XG4gICAgeDogKG5ld0xhYmVsTGluZVsxXS54IC0gbmV3TGFiZWxMaW5lWzBdLngpICogcmVsYXRpdmVGb290UG9zaXRpb24gKyBuZXdMYWJlbExpbmVbMF0ueCxcbiAgICB5OiAobmV3TGFiZWxMaW5lWzFdLnkgLSBuZXdMYWJlbExpbmVbMF0ueSkgKiByZWxhdGl2ZUZvb3RQb3NpdGlvbiArIG5ld0xhYmVsTGluZVswXS55XG4gIH07XG5cbiAgLy8gdGhlIHJvdGF0ZWQgdmVjdG9yIHRvIGxhYmVsXG4gIHZhciBuZXdMYWJlbFZlY3RvciA9IHJvdGF0ZVZlY3Rvcih7XG4gICAgeDogbGFiZWxQb3NpdGlvbi54IC0gb2xkRm9vdC54LFxuICAgIHk6IGxhYmVsUG9zaXRpb24ueSAtIG9sZEZvb3QueVxuICB9LCBhbmdsZURlbHRhKTtcblxuICAvLyB0aGUgbmV3IHJlbGF0aXZlIHBvc2l0aW9uXG4gIHggPSBuZXdGb290LnggKyBuZXdMYWJlbFZlY3Rvci54IC0gbGFiZWxQb3NpdGlvbi54O1xuICB5ID0gbmV3Rm9vdC55ICsgbmV3TGFiZWxWZWN0b3IueSAtIGxhYmVsUG9zaXRpb24ueTtcblxuICByZXR1cm4gcm91bmRQb2ludCh7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0pO1xufVxuXG5cbi8vIEhFTFBFUlMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiByZWxhdGl2ZVBvc2l0aW9uTWlkV2F5cG9pbnQod2F5cG9pbnRzLCBpZHgpIHtcblxuICB2YXIgZGlzdGFuY2VTZWdtZW50MSA9IGdldERpc3RhbmNlUG9pbnRQb2ludCh3YXlwb2ludHNbaWR4LTFdLCB3YXlwb2ludHNbaWR4XSksXG4gICAgICBkaXN0YW5jZVNlZ21lbnQyID0gZ2V0RGlzdGFuY2VQb2ludFBvaW50KHdheXBvaW50c1tpZHhdLCB3YXlwb2ludHNbaWR4KzFdKTtcblxuICB2YXIgcmVsYXRpdmVQb3NpdGlvbiA9IGRpc3RhbmNlU2VnbWVudDEgLyAoZGlzdGFuY2VTZWdtZW50MSArIGRpc3RhbmNlU2VnbWVudDIpO1xuXG4gIHJldHVybiByZWxhdGl2ZVBvc2l0aW9uO1xufVxuXG5mdW5jdGlvbiBnZXRMYWJlbE1pZChsYWJlbCkge1xuICByZXR1cm4ge1xuICAgIHg6IGxhYmVsLnggKyBsYWJlbC53aWR0aCAvIDIsXG4gICAgeTogbGFiZWwueSArIGxhYmVsLmhlaWdodCAvIDJcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0QW5nbGVEZWx0YShsMSwgbDIpIHtcbiAgdmFyIGExID0gZ2V0QW5nbGUobDEpLFxuICAgICAgYTIgPSBnZXRBbmdsZShsMik7XG4gIHJldHVybiBhMiAtIGExO1xufVxuXG5mdW5jdGlvbiBnZXRMaW5lKHdheXBvaW50cywgaWR4KSB7XG4gIHJldHVybiBbIHdheXBvaW50c1tpZHhdLCB3YXlwb2ludHNbaWR4KzFdIF07XG59XG5cbmZ1bmN0aW9uIGdldFJlbGF0aXZlRm9vdFBvc2l0aW9uKGxpbmUsIGZvb3QpIHtcblxuICB2YXIgbGVuZ3RoID0gZ2V0RGlzdGFuY2VQb2ludFBvaW50KGxpbmVbMF0sIGxpbmVbMV0pLFxuICAgICAgbGVuZ3RoVG9Gb290ID0gZ2V0RGlzdGFuY2VQb2ludFBvaW50KGxpbmVbMF0sIGZvb3QpO1xuXG4gIHJldHVybiBsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoVG9Gb290IC8gbGVuZ3RoO1xufVxuIiwidmFyIHNxcnQgPSBNYXRoLnNxcnQsXG4gICAgbWluID0gTWF0aC5taW4sXG4gICAgbWF4ID0gTWF0aC5tYXgsXG4gICAgYWJzID0gTWF0aC5hYnM7XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBzcXVhcmUgKHBvd2VyIHRvIHR3bykgb2YgYSBudW1iZXIuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IG5cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIHNxKG4pIHtcbiAgcmV0dXJuIE1hdGgucG93KG4sIDIpO1xufVxuXG4vKipcbiAqIEdldCBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHMuXG4gKlxuICogQHBhcmFtIHtQb2ludH0gcDFcbiAqIEBwYXJhbSB7UG9pbnR9IHAyXG4gKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBnZXREaXN0YW5jZShwMSwgcDIpIHtcbiAgcmV0dXJuIHNxcnQoc3EocDEueCAtIHAyLngpICsgc3EocDEueSAtIHAyLnkpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGF0dGFjaG1lbnQgb2YgdGhlIGdpdmVuIHBvaW50IG9uIHRoZSBzcGVjaWZpZWQgbGluZS5cbiAqXG4gKiBUaGUgYXR0YWNobWVudCBpcyBlaXRoZXIgYSBiZW5kcG9pbnQgKGF0dGFjaGVkIHRvIHRoZSBnaXZlbiBwb2ludClcbiAqIG9yIHNlZ21lbnQgKGF0dGFjaGVkIHRvIGEgbG9jYXRpb24gb24gYSBsaW5lIHNlZ21lbnQpIGF0dGFjaG1lbnQ6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogdmFyIHBvaW50QXR0YWNobWVudCA9IHtcbiAqICAgdHlwZTogJ2JlbmRwb2ludCcsXG4gKiAgIGJlbmRwb2ludEluZGV4OiAzLFxuICogICBwb3NpdGlvbjogeyB4OiAxMCwgeTogMTAgfSAvLyB0aGUgYXR0YWNoIHBvaW50IG9uIHRoZSBsaW5lXG4gKiB9O1xuICpcbiAqIHZhciBzZWdtZW50QXR0YWNobWVudCA9IHtcbiAqICAgdHlwZTogJ3NlZ21lbnQnLFxuICogICBzZWdtZW50SW5kZXg6IDIsXG4gKiAgIHJlbGF0aXZlTG9jYXRpb246IDAuMzEsIC8vIGF0dGFjaCBwb2ludCBsb2NhdGlvbiBiZXR3ZWVuIDAgKGF0IHN0YXJ0KSBhbmQgMSAoYXQgZW5kKVxuICogICBwb3NpdGlvbjogeyB4OiAxMCwgeTogMTAgfSAvLyB0aGUgYXR0YWNoIHBvaW50IG9uIHRoZSBsaW5lXG4gKiB9O1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtQb2ludH0gcG9pbnRcbiAqIEBwYXJhbSB7QXJyYXk8UG9pbnQ+fSBsaW5lXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBhdHRhY2htZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdHRhY2htZW50KHBvaW50LCBsaW5lKSB7XG5cbiAgdmFyIGlkeCA9IDAsXG4gICAgICBzZWdtZW50U3RhcnQsXG4gICAgICBzZWdtZW50RW5kLFxuICAgICAgc2VnbWVudFN0YXJ0RGlzdGFuY2UsXG4gICAgICBzZWdtZW50RW5kRGlzdGFuY2UsXG4gICAgICBhdHRhY2htZW50UG9zaXRpb24sXG4gICAgICBtaW5EaXN0YW5jZSxcbiAgICAgIGludGVyc2VjdGlvbnMsXG4gICAgICBhdHRhY2htZW50LFxuICAgICAgYXR0YWNobWVudERpc3RhbmNlLFxuICAgICAgY2xvc2VzdEF0dGFjaG1lbnREaXN0YW5jZSxcbiAgICAgIGNsb3Nlc3RBdHRhY2htZW50O1xuXG4gIGZvciAoaWR4ID0gMDsgaWR4IDwgbGluZS5sZW5ndGggLSAxOyBpZHgrKykge1xuXG4gICAgc2VnbWVudFN0YXJ0ID0gbGluZVtpZHhdO1xuICAgIHNlZ21lbnRFbmQgPSBsaW5lW2lkeCArIDFdO1xuXG4gICAgaWYgKHBvaW50c0VxdWFsKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCkpIHtcbiAgICAgIGludGVyc2VjdGlvbnMgPSBbIHNlZ21lbnRTdGFydCBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWdtZW50U3RhcnREaXN0YW5jZSA9IGdldERpc3RhbmNlKHBvaW50LCBzZWdtZW50U3RhcnQpO1xuICAgICAgc2VnbWVudEVuZERpc3RhbmNlID0gZ2V0RGlzdGFuY2UocG9pbnQsIHNlZ21lbnRFbmQpO1xuXG4gICAgICBtaW5EaXN0YW5jZSA9IG1pbihzZWdtZW50U3RhcnREaXN0YW5jZSwgc2VnbWVudEVuZERpc3RhbmNlKTtcblxuICAgICAgaW50ZXJzZWN0aW9ucyA9IGdldENpcmNsZVNlZ21lbnRJbnRlcnNlY3Rpb25zKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCwgcG9pbnQsIG1pbkRpc3RhbmNlKTtcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJzZWN0aW9ucy5sZW5ndGggPCAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGJldHdlZW4gWzEsIDJdIGNpcmNsZSAtPiBsaW5lIGludGVyc2VjdGlvbnMnKTtcbiAgICB9XG5cbiAgICAvLyBvbmUgaW50ZXJzZWN0aW9uIC0+IGJlbmRwb2ludCBhdHRhY2htZW50XG4gICAgaWYgKGludGVyc2VjdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICBhdHRhY2htZW50ID0ge1xuICAgICAgICB0eXBlOiAnYmVuZHBvaW50JyxcbiAgICAgICAgcG9zaXRpb246IGludGVyc2VjdGlvbnNbMF0sXG4gICAgICAgIHNlZ21lbnRJbmRleDogaWR4LFxuICAgICAgICBiZW5kcG9pbnRJbmRleDogcG9pbnRzRXF1YWwoc2VnbWVudFN0YXJ0LCBpbnRlcnNlY3Rpb25zWzBdKSA/IGlkeCA6IGlkeCArIDFcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gdHdvIGludGVyc2VjdGlvbnMgLT4gc2VnbWVudCBhdHRhY2htZW50XG4gICAgaWYgKGludGVyc2VjdGlvbnMubGVuZ3RoID09PSAyKSB7XG5cbiAgICAgIGF0dGFjaG1lbnRQb3NpdGlvbiA9IG1pZChpbnRlcnNlY3Rpb25zWzBdLCBpbnRlcnNlY3Rpb25zWzFdKTtcblxuICAgICAgYXR0YWNobWVudCA9IHtcbiAgICAgICAgdHlwZTogJ3NlZ21lbnQnLFxuICAgICAgICBwb3NpdGlvbjogYXR0YWNobWVudFBvc2l0aW9uLFxuICAgICAgICBzZWdtZW50SW5kZXg6IGlkeCxcbiAgICAgICAgcmVsYXRpdmVMb2NhdGlvbjogZ2V0RGlzdGFuY2Uoc2VnbWVudFN0YXJ0LCBhdHRhY2htZW50UG9zaXRpb24pIC8gZ2V0RGlzdGFuY2Uoc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBhdHRhY2htZW50RGlzdGFuY2UgPSBnZXREaXN0YW5jZShhdHRhY2htZW50LnBvc2l0aW9uLCBwb2ludCk7XG5cbiAgICBpZiAoIWNsb3Nlc3RBdHRhY2htZW50IHx8IGNsb3Nlc3RBdHRhY2htZW50RGlzdGFuY2UgPiBhdHRhY2htZW50RGlzdGFuY2UpIHtcbiAgICAgIGNsb3Nlc3RBdHRhY2htZW50ID0gYXR0YWNobWVudDtcbiAgICAgIGNsb3Nlc3RBdHRhY2htZW50RGlzdGFuY2UgPSBhdHRhY2htZW50RGlzdGFuY2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNsb3Nlc3RBdHRhY2htZW50O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIGEgY2lyY2xlIGFuZCBhIGxpbmUgc2VnbWVudC5cbiAqXG4gKiBAcGFyYW0ge1BvaW50fSBzMSBzZWdtZW50IHN0YXJ0XG4gKiBAcGFyYW0ge1BvaW50fSBzMiBzZWdtZW50IGVuZFxuICogQHBhcmFtIHtQb2ludH0gY2MgY2lyY2xlIGNlbnRlclxuICogQHBhcmFtIHtudW1iZXJ9IGNyIGNpcmNsZSByYWRpdXNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxQb2ludD59IGludGVyc2VjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0Q2lyY2xlU2VnbWVudEludGVyc2VjdGlvbnMoczEsIHMyLCBjYywgY3IpIHtcblxuICB2YXIgYmFYID0gczIueCAtIHMxLng7XG4gIHZhciBiYVkgPSBzMi55IC0gczEueTtcbiAgdmFyIGNhWCA9IGNjLnggLSBzMS54O1xuICB2YXIgY2FZID0gY2MueSAtIHMxLnk7XG5cbiAgdmFyIGEgPSBiYVggKiBiYVggKyBiYVkgKiBiYVk7XG4gIHZhciBiQnkyID0gYmFYICogY2FYICsgYmFZICogY2FZO1xuICB2YXIgYyA9IGNhWCAqIGNhWCArIGNhWSAqIGNhWSAtIGNyICogY3I7XG5cbiAgdmFyIHBCeTIgPSBiQnkyIC8gYTtcbiAgdmFyIHEgPSBjIC8gYTtcblxuICB2YXIgZGlzYyA9IHBCeTIgKiBwQnkyIC0gcTtcblxuICAvLyBjaGVjayBhZ2FpbnN0IG5lZ2F0aXZlIHZhbHVlIHRvIHdvcmsgYXJvdW5kXG4gIC8vIG5lZ2F0aXZlLCB2ZXJ5IGNsb3NlIHRvIHplcm8gcmVzdWx0cyAoLTRlLTE1KVxuICAvLyBiZWluZyBwcm9kdWNlZCBpbiBzb21lIGVudmlyb25tZW50c1xuICBpZiAoZGlzYyA8IDAgJiYgZGlzYyA+IC0wLjAwMDAwMSkge1xuICAgIGRpc2MgPSAwO1xuICB9XG5cbiAgaWYgKGRpc2MgPCAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gaWYgZGlzYyA9PSAwIC4uLiBkZWFsdCB3aXRoIGxhdGVyXG4gIHZhciB0bXBTcXJ0ID0gc3FydChkaXNjKTtcbiAgdmFyIGFiU2NhbGluZ0ZhY3RvcjEgPSAtcEJ5MiArIHRtcFNxcnQ7XG4gIHZhciBhYlNjYWxpbmdGYWN0b3IyID0gLXBCeTIgLSB0bXBTcXJ0O1xuXG4gIHZhciBpMSA9IHtcbiAgICB4OiBzMS54IC0gYmFYICogYWJTY2FsaW5nRmFjdG9yMSxcbiAgICB5OiBzMS55IC0gYmFZICogYWJTY2FsaW5nRmFjdG9yMVxuICB9O1xuXG4gIGlmIChkaXNjID09PSAwKSB7IC8vIGFiU2NhbGluZ0ZhY3RvcjEgPT0gYWJTY2FsaW5nRmFjdG9yMlxuICAgIHJldHVybiBbIGkxIF07XG4gIH1cblxuICB2YXIgaTIgPSB7XG4gICAgeDogczEueCAtIGJhWCAqIGFiU2NhbGluZ0ZhY3RvcjIsXG4gICAgeTogczEueSAtIGJhWSAqIGFiU2NhbGluZ0ZhY3RvcjJcbiAgfTtcblxuICAvLyByZXR1cm4gb25seSBwb2ludHMgb24gbGluZSBzZWdtZW50XG4gIHJldHVybiBbIGkxLCBpMiBdLmZpbHRlcihmdW5jdGlvbihwKSB7XG4gICAgcmV0dXJuIGlzUG9pbnRJblNlZ21lbnQocCwgczEsIHMyKTtcbiAgfSk7XG59XG5cblxuZnVuY3Rpb24gaXNQb2ludEluU2VnbWVudChwLCBzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQpIHtcbiAgcmV0dXJuIChcbiAgICBmZW5jZWQocC54LCBzZWdtZW50U3RhcnQueCwgc2VnbWVudEVuZC54KSAmJlxuICAgIGZlbmNlZChwLnksIHNlZ21lbnRTdGFydC55LCBzZWdtZW50RW5kLnkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZlbmNlZChuLCByYW5nZVN0YXJ0LCByYW5nZUVuZCkge1xuXG4gIC8vIHVzZSBtYXRjaGluZyB0aHJlc2hvbGQgdG8gd29yayBhcm91bmRcbiAgLy8gcHJlY2lzaW9uIGVycm9ycyBpbiBpbnRlcnNlY3Rpb24gY29tcHV0YXRpb25cblxuICByZXR1cm4gKFxuICAgIG4gPj0gbWluKHJhbmdlU3RhcnQsIHJhbmdlRW5kKSAtIEVRVUFMX1RIUkVTSE9MRCAmJlxuICAgIG4gPD0gbWF4KHJhbmdlU3RhcnQsIHJhbmdlRW5kKSArIEVRVUFMX1RIUkVTSE9MRFxuICApO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBtaWQgb2YgdHdvIHBvaW50cy5cbiAqXG4gKiBAcGFyYW0ge1BvaW50fSBwMVxuICogQHBhcmFtIHtQb2ludH0gcDJcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuZnVuY3Rpb24gbWlkKHAxLCBwMikge1xuXG4gIHJldHVybiB7XG4gICAgeDogKHAxLnggKyBwMi54KSAvIDIsXG4gICAgeTogKHAxLnkgKyBwMi55KSAvIDJcbiAgfTtcbn1cblxudmFyIEVRVUFMX1RIUkVTSE9MRCA9IDAuMTtcblxuZnVuY3Rpb24gcG9pbnRzRXF1YWwocDEsIHAyKSB7XG5cbiAgcmV0dXJuIChcbiAgICBhYnMocDEueCAtIHAyLngpIDw9IEVRVUFMX1RIUkVTSE9MRCAmJlxuICAgIGFicyhwMS55IC0gcDIueSkgPD0gRVFVQUxfVEhSRVNIT0xEXG4gICk7XG59XG4iLCIvKipcbiAqIFJldHVybnMgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHR3byBsaW5lIHNlZ21lbnRzIGEgYW5kIGIuXG4gKlxuICogQHBhcmFtIHtQb2ludH0gbDFzXG4gKiBAcGFyYW0ge1BvaW50fSBsMWVcbiAqIEBwYXJhbSB7UG9pbnR9IGwyc1xuICogQHBhcmFtIHtQb2ludH0gbDJlXG4gKlxuICogQHJldHVybiB7UG9pbnR9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpbmVJbnRlcnNlY3QobDFzLCBsMWUsIGwycywgbDJlKSB7XG5cbiAgLy8gaWYgdGhlIGxpbmVzIGludGVyc2VjdCwgdGhlIHJlc3VsdCBjb250YWlucyB0aGUgeCBhbmQgeSBvZiB0aGVcbiAgLy8gaW50ZXJzZWN0aW9uICh0cmVhdGluZyB0aGUgbGluZXMgYXMgaW5maW5pdGUpIGFuZCBib29sZWFucyBmb3JcbiAgLy8gd2hldGhlciBsaW5lIHNlZ21lbnQgMSBvciBsaW5lIHNlZ21lbnQgMiBjb250YWluIHRoZSBwb2ludFxuICB2YXIgZGVub21pbmF0b3IsIGEsIGIsIGMsIG51bWVyYXRvcjtcblxuICBkZW5vbWluYXRvciA9ICgobDJlLnkgLSBsMnMueSkgKiAobDFlLnggLSBsMXMueCkpIC0gKChsMmUueCAtIGwycy54KSAqIChsMWUueSAtIGwxcy55KSk7XG5cbiAgaWYgKGRlbm9taW5hdG9yID09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGEgPSBsMXMueSAtIGwycy55O1xuICBiID0gbDFzLnggLSBsMnMueDtcbiAgbnVtZXJhdG9yID0gKChsMmUueCAtIGwycy54KSAqIGEpIC0gKChsMmUueSAtIGwycy55KSAqIGIpO1xuXG4gIGMgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvcjtcblxuICAvLyBpZiB3ZSBjYXN0IHRoZXNlIGxpbmVzIGluZmluaXRlbHkgaW5cbiAgLy8gYm90aCBkaXJlY3Rpb25zLCB0aGV5IGludGVyc2VjdCBoZXJlXG4gIHJldHVybiB7XG4gICAgeDogTWF0aC5yb3VuZChsMXMueCArIChjICogKGwxZS54IC0gbDFzLngpKSksXG4gICAgeTogTWF0aC5yb3VuZChsMXMueSArIChjICogKGwxZS55IC0gbDFzLnkpKSlcbiAgfTtcbn0iLCJpbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcclxuXHJcbmltcG9ydCB7XHJcbiAgYXNUUkJMXHJcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xyXG5cclxuaW1wb3J0IHtcclxuICBjb2xsZWN0TGFuZXMsXHJcbiAgZ2V0TGFuZXNSb290XHJcbn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxpbmcvdXRpbC9MYW5lVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBMQU5FX01JTl9ESU1FTlNJT05TIH0gZnJvbSAnLi4vUmVzaXplQmVoYXZpb3InO1xyXG5cclxudmFyIGFicyA9IE1hdGguYWJzLFxyXG4gICAgbWluID0gTWF0aC5taW4sXHJcbiAgICBtYXggPSBNYXRoLm1heDtcclxuXHJcblxyXG5mdW5jdGlvbiBhZGRUb1RyYmwodHJibCwgYXR0ciwgdmFsdWUsIGNob2ljZSkge1xyXG4gIHZhciBjdXJyZW50ID0gdHJibFthdHRyXTtcclxuXHJcbiAgLy8gbWFrZSBzdXJlIHRvIHNldCB0aGUgdmFsdWUgaWYgaXQgZG9lcyBub3QgZXhpc3RcclxuICAvLyBvciBhcHBseSB0aGUgY29ycmVjdCB2YWx1ZSBieSBjb21wYXJpbmcgYWdhaW5zdFxyXG4gIC8vIGNob2ljZSh2YWx1ZSwgY3VycmVudFZhbHVlKVxyXG4gIHRyYmxbYXR0cl0gPSBjdXJyZW50ID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGNob2ljZSh2YWx1ZSwgY3VycmVudCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZE1pbih0cmJsLCBhdHRyLCB2YWx1ZSkge1xyXG4gIHJldHVybiBhZGRUb1RyYmwodHJibCwgYXR0ciwgdmFsdWUsIG1pbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZE1heCh0cmJsLCBhdHRyLCB2YWx1ZSkge1xyXG4gIHJldHVybiBhZGRUb1RyYmwodHJibCwgYXR0ciwgdmFsdWUsIG1heCk7XHJcbn1cclxuXHJcbnZhciBMQU5FX1JJR0hUX1BBRERJTkcgPSAyMCxcclxuICAgIExBTkVfTEVGVF9QQURESU5HID0gNTAsXHJcbiAgICBMQU5FX1RPUF9QQURESU5HID0gMjAsXHJcbiAgICBMQU5FX0JPVFRPTV9QQURESU5HID0gMjA7XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcnRpY2lwYW50UmVzaXplQ29uc3RyYWludHMobGFuZVNoYXBlLCByZXNpemVEaXJlY3Rpb24sIGJhbGFuY2VkKSB7XHJcbiAgdmFyIGxhbmVzUm9vdCA9IGdldExhbmVzUm9vdChsYW5lU2hhcGUpO1xyXG5cclxuICB2YXIgaXNGaXJzdCA9IHRydWUsXHJcbiAgICAgIGlzTGFzdCA9IHRydWU7XHJcblxyXG4gIC8vIG1heCB0b3AvYm90dG9tIHNpemUgZm9yIGxhbmVzXHJcbiAgdmFyIGFsbExhbmVzID0gY29sbGVjdExhbmVzKGxhbmVzUm9vdCwgWyBsYW5lc1Jvb3QgXSk7XHJcblxyXG4gIHZhciBsYW5lVHJibCA9IGFzVFJCTChsYW5lU2hhcGUpO1xyXG5cclxuICB2YXIgbWF4VHJibCA9IHt9LFxyXG4gICAgICBtaW5UcmJsID0ge307XHJcblxyXG4gIGlmICgvZS8udGVzdChyZXNpemVEaXJlY3Rpb24pKSB7XHJcbiAgICBtaW5UcmJsLnJpZ2h0ID0gbGFuZVRyYmwubGVmdCArIExBTkVfTUlOX0RJTUVOU0lPTlMud2lkdGg7XHJcbiAgfSBlbHNlXHJcbiAgaWYgKC93Ly50ZXN0KHJlc2l6ZURpcmVjdGlvbikpIHtcclxuICAgIG1pblRyYmwubGVmdCA9IGxhbmVUcmJsLnJpZ2h0IC0gTEFORV9NSU5fRElNRU5TSU9OUy53aWR0aDtcclxuICB9XHJcblxyXG4gIGFsbExhbmVzLmZvckVhY2goZnVuY3Rpb24ob3RoZXIpIHtcclxuXHJcbiAgICB2YXIgb3RoZXJUcmJsID0gYXNUUkJMKG90aGVyKTtcclxuXHJcbiAgICBpZiAoL24vLnRlc3QocmVzaXplRGlyZWN0aW9uKSkge1xyXG5cclxuICAgICAgaWYgKG90aGVyVHJibC50b3AgPCAobGFuZVRyYmwudG9wIC0gMTApKSB7XHJcbiAgICAgICAgaXNGaXJzdCA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBtYXggdG9wIHNpemUgKGJhc2VkIG9uIG5leHQgZWxlbWVudClcclxuICAgICAgaWYgKGJhbGFuY2VkICYmIGFicyhsYW5lVHJibC50b3AgLSBvdGhlclRyYmwuYm90dG9tKSA8IDEwKSB7XHJcbiAgICAgICAgYWRkTWF4KG1heFRyYmwsICd0b3AnLCBvdGhlclRyYmwudG9wICsgTEFORV9NSU5fRElNRU5TSU9OUy5oZWlnaHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBtaW4gdG9wIHNpemUgKGJhc2VkIG9uIHNlbGYgb3IgbmVzdGVkIGVsZW1lbnQpXHJcbiAgICAgIGlmIChhYnMobGFuZVRyYmwudG9wIC0gb3RoZXJUcmJsLnRvcCkgPCA1KSB7XHJcbiAgICAgICAgYWRkTWluKG1pblRyYmwsICd0b3AnLCBvdGhlclRyYmwuYm90dG9tIC0gTEFORV9NSU5fRElNRU5TSU9OUy5oZWlnaHQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKC9zLy50ZXN0KHJlc2l6ZURpcmVjdGlvbikpIHtcclxuXHJcbiAgICAgIGlmIChvdGhlclRyYmwuYm90dG9tID4gKGxhbmVUcmJsLmJvdHRvbSArIDEwKSkge1xyXG4gICAgICAgIGlzTGFzdCA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBtYXggYm90dG9tIHNpemUgKGJhc2VkIG9uIHByZXZpb3VzIGVsZW1lbnQpXHJcbiAgICAgIGlmIChiYWxhbmNlZCAmJiBhYnMobGFuZVRyYmwuYm90dG9tIC0gb3RoZXJUcmJsLnRvcCkgPCAxMCkge1xyXG4gICAgICAgIGFkZE1pbihtYXhUcmJsLCAnYm90dG9tJywgb3RoZXJUcmJsLmJvdHRvbSAtIExBTkVfTUlOX0RJTUVOU0lPTlMuaGVpZ2h0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gbWluIGJvdHRvbSBzaXplIChiYXNlZCBvbiBzZWxmIG9yIG5lc3RlZCBlbGVtZW50KVxyXG4gICAgICBpZiAoYWJzKGxhbmVUcmJsLmJvdHRvbSAtIG90aGVyVHJibC5ib3R0b20pIDwgNSkge1xyXG4gICAgICAgIGFkZE1heChtaW5UcmJsLCAnYm90dG9tJywgb3RoZXJUcmJsLnRvcCArIExBTkVfTUlOX0RJTUVOU0lPTlMuaGVpZ2h0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAvLyBtYXggdG9wL2JvdHRvbS9sZWZ0L3JpZ2h0IHNpemUgYmFzZWQgb24gZmxvdyBub2Rlc1xyXG4gIHZhciBmbG93RWxlbWVudHMgPSBsYW5lc1Jvb3QuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKHMpIHtcclxuICAgIHJldHVybiAhcy5oaWRkZW4gJiYgIXMud2F5cG9pbnRzICYmIChpcyhzLCAnYnBtbjpGbG93RWxlbWVudCcpIHx8IGlzKHMsICdicG1uOkFydGlmYWN0JykpO1xyXG4gIH0pO1xyXG5cclxuICBmbG93RWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihmbG93RWxlbWVudCkge1xyXG5cclxuICAgIHZhciBmbG93RWxlbWVudFRyYmwgPSBhc1RSQkwoZmxvd0VsZW1lbnQpO1xyXG5cclxuICAgIGlmIChpc0ZpcnN0ICYmIC9uLy50ZXN0KHJlc2l6ZURpcmVjdGlvbikpIHtcclxuICAgICAgYWRkTWluKG1pblRyYmwsICd0b3AnLCBmbG93RWxlbWVudFRyYmwudG9wIC0gTEFORV9UT1BfUEFERElORyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKC9lLy50ZXN0KHJlc2l6ZURpcmVjdGlvbikpIHtcclxuICAgICAgYWRkTWF4KG1pblRyYmwsICdyaWdodCcsIGZsb3dFbGVtZW50VHJibC5yaWdodCArIExBTkVfUklHSFRfUEFERElORyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzTGFzdCAmJiAvcy8udGVzdChyZXNpemVEaXJlY3Rpb24pKSB7XHJcbiAgICAgIGFkZE1heChtaW5UcmJsLCAnYm90dG9tJywgZmxvd0VsZW1lbnRUcmJsLmJvdHRvbSArIExBTkVfQk9UVE9NX1BBRERJTkcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgvdy8udGVzdChyZXNpemVEaXJlY3Rpb24pKSB7XHJcbiAgICAgIGFkZE1pbihtaW5UcmJsLCAnbGVmdCcsIGZsb3dFbGVtZW50VHJibC5sZWZ0IC0gTEFORV9MRUZUX1BBRERJTkcpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgbWluOiBtaW5UcmJsLFxyXG4gICAgbWF4OiBtYXhUcmJsXHJcbiAgfTtcclxufSIsImltcG9ydCB7XG4gIGZpbHRlclxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGVhY2hFbGVtZW50XG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvRWxlbWVudHMnO1xuXG5pbXBvcnQge1xuICBnZXRMYW5lc1Jvb3QsXG4gIGdldENoaWxkTGFuZXMsXG4gIExBTkVfSU5ERU5UQVRJT05cbn0gZnJvbSAnLi4vdXRpbC9MYW5lVXRpbCc7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBhbGxvd3MgdXMgdG8gYWRkIGEgbmV3IGxhbmVcbiAqIGFib3ZlIG9yIGJlbG93IGFuIGV4aXN0aW5nIG9uZS5cbiAqXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICogQHBhcmFtIHtTcGFjZVRvb2x9IHNwYWNlVG9vbFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBZGRMYW5lSGFuZGxlcihtb2RlbGluZywgc3BhY2VUb29sKSB7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gIHRoaXMuX3NwYWNlVG9vbCA9IHNwYWNlVG9vbDtcbn1cblxuQWRkTGFuZUhhbmRsZXIuJGluamVjdCA9IFtcbiAgJ21vZGVsaW5nJyxcbiAgJ3NwYWNlVG9vbCdcbl07XG5cblxuQWRkTGFuZUhhbmRsZXIucHJvdG90eXBlLnByZUV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHNwYWNlVG9vbCA9IHRoaXMuX3NwYWNlVG9vbCxcbiAgICAgIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIGxvY2F0aW9uID0gY29udGV4dC5sb2NhdGlvbjtcblxuICB2YXIgbGFuZXNSb290ID0gZ2V0TGFuZXNSb290KHNoYXBlKTtcblxuICB2YXIgaXNSb290ID0gbGFuZXNSb290ID09PSBzaGFwZSxcbiAgICAgIGxhbmVQYXJlbnQgPSBpc1Jvb3QgPyBzaGFwZSA6IHNoYXBlLnBhcmVudDtcblxuICB2YXIgZXhpc3RpbmdDaGlsZExhbmVzID0gZ2V0Q2hpbGRMYW5lcyhsYW5lUGFyZW50KTtcblxuICAvLyAoMCkgYWRkIGEgbGFuZSBpZiB3ZSBjdXJyZW50bHkgZ290IG5vbmUgYW5kIGFyZSBhZGRpbmcgdG8gcm9vdFxuICBpZiAoIWV4aXN0aW5nQ2hpbGRMYW5lcy5sZW5ndGgpIHtcbiAgICBtb2RlbGluZy5jcmVhdGVTaGFwZSh7IHR5cGU6ICdicG1uOkxhbmUnIH0sIHtcbiAgICAgIHg6IHNoYXBlLnggKyBMQU5FX0lOREVOVEFUSU9OLFxuICAgICAgeTogc2hhcGUueSxcbiAgICAgIHdpZHRoOiBzaGFwZS53aWR0aCAtIExBTkVfSU5ERU5UQVRJT04sXG4gICAgICBoZWlnaHQ6IHNoYXBlLmhlaWdodFxuICAgIH0sIGxhbmVQYXJlbnQpO1xuICB9XG5cbiAgLy8gKDEpIGNvbGxlY3QgYWZmZWN0ZWQgZWxlbWVudHMgdG8gY3JlYXRlIG5lY2Vzc2FyeSBzcGFjZVxuICB2YXIgYWxsQWZmZWN0ZWQgPSBbXTtcblxuICBlYWNoRWxlbWVudChsYW5lc1Jvb3QsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICBhbGxBZmZlY3RlZC5wdXNoKGVsZW1lbnQpO1xuXG4gICAgLy8gaGFuZGxlIGVsZW1lbnQgbGFiZWxzIGluIHRoZSBkaWFncmFtIHJvb3RcbiAgICBpZiAoZWxlbWVudC5sYWJlbCkge1xuICAgICAgYWxsQWZmZWN0ZWQucHVzaChlbGVtZW50LmxhYmVsKTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudCA9PT0gc2hhcGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyKGVsZW1lbnQuY2hpbGRyZW4sIGZ1bmN0aW9uKGMpIHtcbiAgICAgIHJldHVybiBjICE9PSBzaGFwZTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdmFyIG9mZnNldCA9IGxvY2F0aW9uID09PSAndG9wJyA/IC0xMjAgOiAxMjAsXG4gICAgICBsYW5lUG9zaXRpb24gPSBsb2NhdGlvbiA9PT0gJ3RvcCcgPyBzaGFwZS55IDogc2hhcGUueSArIHNoYXBlLmhlaWdodCxcbiAgICAgIHNwYWNlUG9zID0gbGFuZVBvc2l0aW9uICsgKGxvY2F0aW9uID09PSAndG9wJyA/IDEwIDogLTEwKSxcbiAgICAgIGRpcmVjdGlvbiA9IGxvY2F0aW9uID09PSAndG9wJyA/ICduJyA6ICdzJztcblxuICB2YXIgYWRqdXN0bWVudHMgPSBzcGFjZVRvb2wuY2FsY3VsYXRlQWRqdXN0bWVudHMoYWxsQWZmZWN0ZWQsICd5Jywgb2Zmc2V0LCBzcGFjZVBvcyk7XG5cbiAgc3BhY2VUb29sLm1ha2VTcGFjZShcbiAgICBhZGp1c3RtZW50cy5tb3ZpbmdTaGFwZXMsXG4gICAgYWRqdXN0bWVudHMucmVzaXppbmdTaGFwZXMsXG4gICAgeyB4OiAwLCB5OiBvZmZzZXQgfSxcbiAgICBkaXJlY3Rpb24sXG4gICAgc3BhY2VQb3NcbiAgKTtcblxuICAvLyAoMikgY3JlYXRlIG5ldyBsYW5lIGF0IG9wZW4gc3BhY2VcbiAgY29udGV4dC5uZXdMYW5lID0gbW9kZWxpbmcuY3JlYXRlU2hhcGUoeyB0eXBlOiAnYnBtbjpMYW5lJyB9LCB7XG4gICAgeDogc2hhcGUueCArIChpc1Jvb3QgPyBMQU5FX0lOREVOVEFUSU9OIDogMCksXG4gICAgeTogbGFuZVBvc2l0aW9uIC0gKGxvY2F0aW9uID09PSAndG9wJyA/IDEyMCA6IDApLFxuICAgIHdpZHRoOiBzaGFwZS53aWR0aCAtIChpc1Jvb3QgPyBMQU5FX0lOREVOVEFUSU9OIDogMCksXG4gICAgaGVpZ2h0OiAxMjBcbiAgfSwgbGFuZVBhcmVudCk7XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSWRDbGFpbUhhbmRsZXIobW9kZGxlKSB7XG4gIHRoaXMuX21vZGRsZSA9IG1vZGRsZTtcbn1cblxuSWRDbGFpbUhhbmRsZXIuJGluamVjdCA9IFsgJ21vZGRsZScgXTtcblxuXG5JZENsYWltSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIGlkcyA9IHRoaXMuX21vZGRsZS5pZHMsXG4gICAgICBpZCA9IGNvbnRleHQuaWQsXG4gICAgICBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50LFxuICAgICAgY2xhaW1pbmcgPSBjb250ZXh0LmNsYWltaW5nO1xuXG4gIGlmIChjbGFpbWluZykge1xuICAgIGlkcy5jbGFpbShpZCwgZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgaWRzLnVuY2xhaW0oaWQpO1xuICB9XG59O1xuXG4vKipcbiAqIENvbW1hbmQgcmV2ZXJ0IGltcGxlbWVudGF0aW9uLlxuICovXG5JZENsYWltSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgaWRzID0gdGhpcy5fbW9kZGxlLmlkcyxcbiAgICAgIGlkID0gY29udGV4dC5pZCxcbiAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICBjbGFpbWluZyA9IGNvbnRleHQuY2xhaW1pbmc7XG5cbiAgaWYgKGNsYWltaW5nKSB7XG4gICAgaWRzLnVuY2xhaW0oaWQpO1xuICB9IGVsc2Uge1xuICAgIGlkcy5jbGFpbShpZCwgZWxlbWVudCk7XG4gIH1cbn07XG5cbiIsImltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRMYW5lc1Jvb3QsXG4gIGNvbXB1dGVMYW5lc1Jlc2l6ZVxufSBmcm9tICcuLi91dGlsL0xhbmVVdGlsJztcblxuaW1wb3J0IHtcbiAgZWFjaEVsZW1lbnRcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCB7XG4gIGFzVFJCTFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIHN1YnN0cmFjdFRSQkxcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcmVzaXplL1Jlc2l6ZVV0aWwnO1xuXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgcmVzaXplcyBhIGxhbmUuXG4gKlxuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzaXplTGFuZUhhbmRsZXIobW9kZWxpbmcsIHNwYWNlVG9vbCkge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl9zcGFjZVRvb2wgPSBzcGFjZVRvb2w7XG59XG5cblJlc2l6ZUxhbmVIYW5kbGVyLiRpbmplY3QgPSBbXG4gICdtb2RlbGluZycsXG4gICdzcGFjZVRvb2wnXG5dO1xuXG5cblJlc2l6ZUxhbmVIYW5kbGVyLnByb3RvdHlwZS5wcmVFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBuZXdCb3VuZHMgPSBjb250ZXh0Lm5ld0JvdW5kcyxcbiAgICAgIGJhbGFuY2VkID0gY29udGV4dC5iYWxhbmNlZDtcblxuICBpZiAoYmFsYW5jZWQgIT09IGZhbHNlKSB7XG4gICAgdGhpcy5yZXNpemVCYWxhbmNlZChzaGFwZSwgbmV3Qm91bmRzKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlc2l6ZVNwYWNlKHNoYXBlLCBuZXdCb3VuZHMpO1xuICB9XG59O1xuXG5cbi8qKlxuICogUmVzaXplIGJhbGFuY2VkLCBhZGp1c3RpbmcgbmV4dCAvIHByZXZpb3VzIGxhbmUgc2l6ZXMuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gKiBAcGFyYW0ge0JvdW5kc30gbmV3Qm91bmRzXG4gKi9cblJlc2l6ZUxhbmVIYW5kbGVyLnByb3RvdHlwZS5yZXNpemVCYWxhbmNlZCA9IGZ1bmN0aW9uKHNoYXBlLCBuZXdCb3VuZHMpIHtcblxuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcblxuICB2YXIgcmVzaXplTmVlZGVkID0gY29tcHV0ZUxhbmVzUmVzaXplKHNoYXBlLCBuZXdCb3VuZHMpO1xuXG4gIC8vIHJlc2l6ZSB0aGUgbGFuZVxuICBtb2RlbGluZy5yZXNpemVTaGFwZShzaGFwZSwgbmV3Qm91bmRzKTtcblxuICAvLyByZXNpemUgb3RoZXIgbGFuZXMgYXMgbmVlZGVkXG4gIHJlc2l6ZU5lZWRlZC5mb3JFYWNoKGZ1bmN0aW9uKHIpIHtcbiAgICBtb2RlbGluZy5yZXNpemVTaGFwZShyLnNoYXBlLCByLm5ld0JvdW5kcyk7XG4gIH0pO1xufTtcblxuXG4vKipcbiAqIFJlc2l6ZSwgbWFraW5nIGFjdHVhbCBzcGFjZSBhbmQgbW92aW5nIGJlbG93IC8gYWJvdmUgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gKiBAcGFyYW0ge0JvdW5kc30gbmV3Qm91bmRzXG4gKi9cblJlc2l6ZUxhbmVIYW5kbGVyLnByb3RvdHlwZS5yZXNpemVTcGFjZSA9IGZ1bmN0aW9uKHNoYXBlLCBuZXdCb3VuZHMpIHtcbiAgdmFyIHNwYWNlVG9vbCA9IHRoaXMuX3NwYWNlVG9vbDtcblxuICB2YXIgc2hhcGVUcmJsID0gYXNUUkJMKHNoYXBlKSxcbiAgICAgIG5ld1RyYmwgPSBhc1RSQkwobmV3Qm91bmRzKTtcblxuICB2YXIgdHJibERpZmYgPSBzdWJzdHJhY3RUUkJMKG5ld1RyYmwsIHNoYXBlVHJibCk7XG5cbiAgdmFyIGxhbmVzUm9vdCA9IGdldExhbmVzUm9vdChzaGFwZSk7XG5cbiAgdmFyIGFsbEFmZmVjdGVkID0gW10sXG4gICAgICBhbGxMYW5lcyA9IFtdO1xuXG4gIGVhY2hFbGVtZW50KGxhbmVzUm9vdCwgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIGFsbEFmZmVjdGVkLnB1c2goZWxlbWVudCk7XG5cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46TGFuZScpIHx8IGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICAgIGFsbExhbmVzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnQuY2hpbGRyZW47XG4gIH0pO1xuXG4gIHZhciBjaGFuZ2UsXG4gICAgICBzcGFjZVBvcyxcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIG9mZnNldCxcbiAgICAgIGFkanVzdG1lbnRzO1xuXG4gIGlmICh0cmJsRGlmZi5ib3R0b20gfHwgdHJibERpZmYudG9wKSB7XG5cbiAgICBjaGFuZ2UgPSB0cmJsRGlmZi5ib3R0b20gfHwgdHJibERpZmYudG9wO1xuICAgIHNwYWNlUG9zID0gc2hhcGUueSArICh0cmJsRGlmZi5ib3R0b20gPyBzaGFwZS5oZWlnaHQgOiAwKSArICh0cmJsRGlmZi5ib3R0b20gPyAtMTAgOiAxMCk7XG4gICAgZGlyZWN0aW9uID0gdHJibERpZmYuYm90dG9tID8gJ3MnIDogJ24nO1xuXG4gICAgb2Zmc2V0ID0gdHJibERpZmYudG9wID4gMCB8fCB0cmJsRGlmZi5ib3R0b20gPCAwID8gLWNoYW5nZSA6IGNoYW5nZTtcblxuICAgIGFkanVzdG1lbnRzID0gc3BhY2VUb29sLmNhbGN1bGF0ZUFkanVzdG1lbnRzKGFsbEFmZmVjdGVkLCAneScsIG9mZnNldCwgc3BhY2VQb3MpO1xuXG4gICAgc3BhY2VUb29sLm1ha2VTcGFjZShhZGp1c3RtZW50cy5tb3ZpbmdTaGFwZXMsIGFkanVzdG1lbnRzLnJlc2l6aW5nU2hhcGVzLCB7IHg6IDAsIHk6IGNoYW5nZSB9LCBkaXJlY3Rpb24pO1xuICB9XG5cblxuICBpZiAodHJibERpZmYubGVmdCB8fCB0cmJsRGlmZi5yaWdodCkge1xuXG4gICAgY2hhbmdlID0gdHJibERpZmYucmlnaHQgfHwgdHJibERpZmYubGVmdDtcbiAgICBzcGFjZVBvcyA9IHNoYXBlLnggKyAodHJibERpZmYucmlnaHQgPyBzaGFwZS53aWR0aCA6IDApICsgKHRyYmxEaWZmLnJpZ2h0ID8gLTEwIDogMTAwKTtcbiAgICBkaXJlY3Rpb24gPSB0cmJsRGlmZi5yaWdodCA/ICdlJyA6ICd3JztcblxuICAgIG9mZnNldCA9IHRyYmxEaWZmLmxlZnQgPiAwIHx8IHRyYmxEaWZmLnJpZ2h0IDwgMCA/IC1jaGFuZ2UgOiBjaGFuZ2U7XG5cbiAgICBhZGp1c3RtZW50cyA9IHNwYWNlVG9vbC5jYWxjdWxhdGVBZGp1c3RtZW50cyhhbGxMYW5lcywgJ3gnLCBvZmZzZXQsIHNwYWNlUG9zKTtcblxuICAgIHNwYWNlVG9vbC5tYWtlU3BhY2UoYWRqdXN0bWVudHMubW92aW5nU2hhcGVzLCBhZGp1c3RtZW50cy5yZXNpemluZ1NoYXBlcywgeyB4OiBjaGFuZ2UsIHk6IDAgfSwgZGlyZWN0aW9uKTtcbiAgfVxufTsiLCJpbXBvcnQge1xyXG4gIGFzc2lnbixcclxuICBmb3JFYWNoXHJcbn0gZnJvbSAnbWluLWRhc2gnO1xyXG5cclxuXHJcbnZhciBERUZBVUxUX0NPTE9SUyA9IHtcclxuICBmaWxsOiB1bmRlZmluZWQsXHJcbiAgc3Ryb2tlOiB1bmRlZmluZWRcclxufTtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTZXRDb2xvckhhbmRsZXIoY29tbWFuZFN0YWNrKSB7XHJcbiAgdGhpcy5fY29tbWFuZFN0YWNrID0gY29tbWFuZFN0YWNrO1xyXG59XHJcblxyXG5TZXRDb2xvckhhbmRsZXIuJGluamVjdCA9IFtcclxuICAnY29tbWFuZFN0YWNrJ1xyXG5dO1xyXG5cclxuXHJcblNldENvbG9ySGFuZGxlci5wcm90b3R5cGUucG9zdEV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cyxcclxuICAgICAgY29sb3JzID0gY29udGV4dC5jb2xvcnMgfHwgREVGQVVMVF9DT0xPUlM7XHJcblxyXG4gIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgdmFyIGRpID0ge307XHJcblxyXG4gIGlmICgnZmlsbCcgaW4gY29sb3JzKSB7XHJcbiAgICBhc3NpZ24oZGksIHsgZmlsbDogY29sb3JzLmZpbGwgfSk7XHJcbiAgfVxyXG5cclxuICBpZiAoJ3N0cm9rZScgaW4gY29sb3JzKSB7XHJcbiAgICBhc3NpZ24oZGksIHsgc3Ryb2tlOiBjb2xvcnMuc3Ryb2tlIH0pO1xyXG4gIH1cclxuXHJcbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xyXG5cclxuICAgIHNlbGYuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLCB7XHJcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgICBkaTogZGlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSk7XHJcblxyXG59OyIsImltcG9ydCB7XG4gIGdldENoaWxkTGFuZXMsXG4gIExBTkVfSU5ERU5UQVRJT05cbn0gZnJvbSAnLi4vdXRpbC9MYW5lVXRpbCc7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBzcGxpdHMgYSBsYW5lIGludG8gYSBudW1iZXIgb2Ygc3ViLWxhbmVzLFxuICogY3JlYXRpbmcgbmV3IHN1YiBsYW5lcywgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNwbGl0TGFuZUhhbmRsZXIobW9kZWxpbmcsIHRyYW5zbGF0ZSkge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG59XG5cblNwbGl0TGFuZUhhbmRsZXIuJGluamVjdCA9IFtcbiAgJ21vZGVsaW5nJyxcbiAgJ3RyYW5zbGF0ZSdcbl07XG5cblxuU3BsaXRMYW5lSGFuZGxlci5wcm90b3R5cGUucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZyxcbiAgICAgIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgbmV3TGFuZXNDb3VudCA9IGNvbnRleHQuY291bnQ7XG5cbiAgdmFyIGNoaWxkTGFuZXMgPSBnZXRDaGlsZExhbmVzKHNoYXBlKSxcbiAgICAgIGV4aXN0aW5nTGFuZXNDb3VudCA9IGNoaWxkTGFuZXMubGVuZ3RoO1xuXG4gIGlmIChleGlzdGluZ0xhbmVzQ291bnQgPiBuZXdMYW5lc0NvdW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgnbW9yZSB0aGFuIHtjb3VudH0gY2hpbGQgbGFuZXMnLCB7IGNvdW50OiBuZXdMYW5lc0NvdW50IH0pKTtcbiAgfVxuXG4gIHZhciBuZXdMYW5lc0hlaWdodCA9IE1hdGgucm91bmQoc2hhcGUuaGVpZ2h0IC8gbmV3TGFuZXNDb3VudCk7XG5cbiAgLy8gSXRlcmF0ZSBmcm9tIHRvcCB0byBib3R0b20gaW4gY2hpbGQgbGFuZSBvcmRlcixcbiAgLy8gcmVzaXppbmcgZXhpc3RpbmcgbGFuZXMgYW5kIGNyZWF0aW5nIG5ldyBvbmVzXG4gIC8vIHNvIHRoYXQgdGhleSBzcGxpdCB0aGUgcGFyZW50IHByb3BvcnRpb25hbGx5LlxuICAvL1xuICAvLyBEdWUgdG8gcm91bmRpbmcgcmVsYXRlZCBlcnJvcnMsIHRoZSBib3R0b20gbGFuZVxuICAvLyBuZWVkcyB0byB0YWtlIHVwIGFsbCB0aGUgcmVtYWluaW5nIHNwYWNlLlxuICB2YXIgbGFuZVksXG4gICAgICBsYW5lSGVpZ2h0LFxuICAgICAgbGFuZUJvdW5kcyxcbiAgICAgIG5ld0xhbmVBdHRycyxcbiAgICAgIGlkeDtcblxuICBmb3IgKGlkeCA9IDA7IGlkeCA8IG5ld0xhbmVzQ291bnQ7IGlkeCsrKSB7XG5cbiAgICBsYW5lWSA9IHNoYXBlLnkgKyBpZHggKiBuZXdMYW5lc0hlaWdodDtcblxuICAgIC8vIGlmIGJvdHRvbSBsYW5lXG4gICAgaWYgKGlkeCA9PT0gbmV3TGFuZXNDb3VudCAtIDEpIHtcbiAgICAgIGxhbmVIZWlnaHQgPSBzaGFwZS5oZWlnaHQgLSAobmV3TGFuZXNIZWlnaHQgKiBpZHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYW5lSGVpZ2h0ID0gbmV3TGFuZXNIZWlnaHQ7XG4gICAgfVxuXG4gICAgbGFuZUJvdW5kcyA9IHtcbiAgICAgIHg6IHNoYXBlLnggKyBMQU5FX0lOREVOVEFUSU9OLFxuICAgICAgeTogbGFuZVksXG4gICAgICB3aWR0aDogc2hhcGUud2lkdGggLSBMQU5FX0lOREVOVEFUSU9OLFxuICAgICAgaGVpZ2h0OiBsYW5lSGVpZ2h0XG4gICAgfTtcblxuICAgIGlmIChpZHggPCBleGlzdGluZ0xhbmVzQ291bnQpIHtcblxuICAgICAgLy8gcmVzaXplIGV4aXN0aW5nIGxhbmVcbiAgICAgIG1vZGVsaW5nLnJlc2l6ZVNoYXBlKGNoaWxkTGFuZXNbaWR4XSwgbGFuZUJvdW5kcyk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gY3JlYXRlIGEgbmV3IGxhbmUgYXQgcG9zaXRpb25cbiAgICAgIG5ld0xhbmVBdHRycyA9IHtcbiAgICAgICAgdHlwZTogJ2JwbW46TGFuZSdcbiAgICAgIH07XG5cbiAgICAgIG1vZGVsaW5nLmNyZWF0ZVNoYXBlKG5ld0xhbmVBdHRycywgbGFuZUJvdW5kcywgc2hhcGUpO1xuICAgIH1cbiAgfVxufTtcbiIsImltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICByZW1vdmUgYXMgY29sbGVjdGlvblJlbW92ZVxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBVcGRhdGVDYW52YXNSb290SGFuZGxlcihjYW52YXMsIG1vZGVsaW5nKSB7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbn1cblxuVXBkYXRlQ2FudmFzUm9vdEhhbmRsZXIuJGluamVjdCA9IFtcbiAgJ2NhbnZhcycsXG4gICdtb2RlbGluZydcbl07XG5cblxuVXBkYXRlQ2FudmFzUm9vdEhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGNhbnZhcyA9IHRoaXMuX2NhbnZhcztcblxuICB2YXIgbmV3Um9vdCA9IGNvbnRleHQubmV3Um9vdCxcbiAgICAgIG5ld1Jvb3RCdXNpbmVzc09iamVjdCA9IG5ld1Jvb3QuYnVzaW5lc3NPYmplY3QsXG4gICAgICBvbGRSb290ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgICBvbGRSb290QnVzaW5lc3NPYmplY3QgPSBvbGRSb290LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgYnBtbkRlZmluaXRpb25zID0gb2xkUm9vdEJ1c2luZXNzT2JqZWN0LiRwYXJlbnQsXG4gICAgICBkaVBsYW5lID0gb2xkUm9vdEJ1c2luZXNzT2JqZWN0LmRpO1xuXG4gIC8vICgxKSByZXBsYWNlIHByb2Nlc3Mgb2xkIDw+IG5ldyByb290XG4gIGNhbnZhcy5zZXRSb290RWxlbWVudChuZXdSb290LCB0cnVlKTtcblxuICAvLyAoMikgdXBkYXRlIHJvb3QgZWxlbWVudHNcbiAgY29sbGVjdGlvbkFkZChicG1uRGVmaW5pdGlvbnMucm9vdEVsZW1lbnRzLCBuZXdSb290QnVzaW5lc3NPYmplY3QpO1xuICBuZXdSb290QnVzaW5lc3NPYmplY3QuJHBhcmVudCA9IGJwbW5EZWZpbml0aW9ucztcblxuICBjb2xsZWN0aW9uUmVtb3ZlKGJwbW5EZWZpbml0aW9ucy5yb290RWxlbWVudHMsIG9sZFJvb3RCdXNpbmVzc09iamVjdCk7XG4gIG9sZFJvb3RCdXNpbmVzc09iamVjdC4kcGFyZW50ID0gbnVsbDtcblxuICAvLyAoMykgd2lyZSBkaVxuICBvbGRSb290QnVzaW5lc3NPYmplY3QuZGkgPSBudWxsO1xuXG4gIGRpUGxhbmUuYnBtbkVsZW1lbnQgPSBuZXdSb290QnVzaW5lc3NPYmplY3Q7XG4gIG5ld1Jvb3RCdXNpbmVzc09iamVjdC5kaSA9IGRpUGxhbmU7XG5cbiAgY29udGV4dC5vbGRSb290ID0gb2xkUm9vdDtcblxuICAvLyBUT0RPKG5pa2t1KTogcmV0dXJuIGNoYW5nZWQgZWxlbWVudHM/XG4gIC8vIHJldHVybiBbIG5ld1Jvb3QsIG9sZFJvb3QgXTtcbn07XG5cblxuVXBkYXRlQ2FudmFzUm9vdEhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY2FudmFzID0gdGhpcy5fY2FudmFzO1xuXG4gIHZhciBuZXdSb290ID0gY29udGV4dC5uZXdSb290LFxuICAgICAgbmV3Um9vdEJ1c2luZXNzT2JqZWN0ID0gbmV3Um9vdC5idXNpbmVzc09iamVjdCxcbiAgICAgIG9sZFJvb3QgPSBjb250ZXh0Lm9sZFJvb3QsXG4gICAgICBvbGRSb290QnVzaW5lc3NPYmplY3QgPSBvbGRSb290LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgYnBtbkRlZmluaXRpb25zID0gbmV3Um9vdEJ1c2luZXNzT2JqZWN0LiRwYXJlbnQsXG4gICAgICBkaVBsYW5lID0gbmV3Um9vdEJ1c2luZXNzT2JqZWN0LmRpO1xuXG4gIC8vICgxKSByZXBsYWNlIHByb2Nlc3Mgb2xkIDw+IG5ldyByb290XG4gIGNhbnZhcy5zZXRSb290RWxlbWVudChvbGRSb290LCB0cnVlKTtcblxuICAvLyAoMikgdXBkYXRlIHJvb3QgZWxlbWVudHNcbiAgY29sbGVjdGlvblJlbW92ZShicG1uRGVmaW5pdGlvbnMucm9vdEVsZW1lbnRzLCBuZXdSb290QnVzaW5lc3NPYmplY3QpO1xuICBuZXdSb290QnVzaW5lc3NPYmplY3QuJHBhcmVudCA9IG51bGw7XG5cbiAgY29sbGVjdGlvbkFkZChicG1uRGVmaW5pdGlvbnMucm9vdEVsZW1lbnRzLCBvbGRSb290QnVzaW5lc3NPYmplY3QpO1xuICBvbGRSb290QnVzaW5lc3NPYmplY3QuJHBhcmVudCA9IGJwbW5EZWZpbml0aW9ucztcblxuICAvLyAoMykgd2lyZSBkaVxuICBuZXdSb290QnVzaW5lc3NPYmplY3QuZGkgPSBudWxsO1xuXG4gIGRpUGxhbmUuYnBtbkVsZW1lbnQgPSBvbGRSb290QnVzaW5lc3NPYmplY3Q7XG4gIG9sZFJvb3RCdXNpbmVzc09iamVjdC5kaSA9IGRpUGxhbmU7XG5cbiAgLy8gVE9ETyhuaWtrdSk6IHJldHVybiBjaGFuZ2VkIGVsZW1lbnRzP1xuICAvLyByZXR1cm4gWyBuZXdSb290LCBvbGRSb290IF07XG59OyIsImltcG9ydCB7XG4gIGNvbGxlY3RMYW5lcyxcbiAgZ2V0TGFuZXNSb290XG59IGZyb20gJy4uL3V0aWwvTGFuZVV0aWwnO1xuXG5pbXBvcnQge1xuICBpc1xufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICByZW1vdmUgYXMgY29sbGVjdGlvblJlbW92ZVxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zJztcblxuaW1wb3J0IHtcbiAgYXNUUkJMXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxudmFyIEZMT1dfTk9ERV9SRUZTX0FUVFIgPSAnZmxvd05vZGVSZWYnLFxuICAgIExBTkVTX0FUVFIgPSAnbGFuZXMnO1xuXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgdXBkYXRlcyBsYW5lIHJlZnMgb24gY2hhbmdlZCBlbGVtZW50c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBVcGRhdGVGbG93Tm9kZVJlZnNIYW5kbGVyKGVsZW1lbnRSZWdpc3RyeSkge1xuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG59XG5cblVwZGF0ZUZsb3dOb2RlUmVmc0hhbmRsZXIuJGluamVjdCA9IFtcbiAgJ2VsZW1lbnRSZWdpc3RyeSdcbl07XG5cblxuVXBkYXRlRmxvd05vZGVSZWZzSGFuZGxlci5wcm90b3R5cGUuY29tcHV0ZVVwZGF0ZXMgPSBmdW5jdGlvbihmbG93Tm9kZVNoYXBlcywgbGFuZVNoYXBlcykge1xuXG4gIHZhciBoYW5kbGVkTm9kZXMgPSBbXTtcblxuICB2YXIgdXBkYXRlcyA9IFtdO1xuXG4gIHZhciBwYXJ0aWNpcGFudENhY2hlID0ge307XG5cbiAgdmFyIGFsbEZsb3dOb2RlU2hhcGVzID0gW107XG5cbiAgZnVuY3Rpb24gaXNJbkxhbmVTaGFwZShlbGVtZW50LCBsYW5lU2hhcGUpIHtcblxuICAgIHZhciBsYW5lVHJibCA9IGFzVFJCTChsYW5lU2hhcGUpO1xuXG4gICAgdmFyIGVsZW1lbnRNaWQgPSB7XG4gICAgICB4OiBlbGVtZW50LnggKyBlbGVtZW50LndpZHRoIC8gMixcbiAgICAgIHk6IGVsZW1lbnQueSArIGVsZW1lbnQuaGVpZ2h0IC8gMlxuICAgIH07XG5cbiAgICByZXR1cm4gZWxlbWVudE1pZC54ID4gbGFuZVRyYmwubGVmdCAmJlxuICAgICAgICAgICBlbGVtZW50TWlkLnggPCBsYW5lVHJibC5yaWdodCAmJlxuICAgICAgICAgICBlbGVtZW50TWlkLnkgPiBsYW5lVHJibC50b3AgJiZcbiAgICAgICAgICAgZWxlbWVudE1pZC55IDwgbGFuZVRyYmwuYm90dG9tO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkRmxvd05vZGVTaGFwZShmbG93Tm9kZVNoYXBlKSB7XG4gICAgaWYgKGhhbmRsZWROb2Rlcy5pbmRleE9mKGZsb3dOb2RlU2hhcGUpID09PSAtMSkge1xuICAgICAgYWxsRmxvd05vZGVTaGFwZXMucHVzaChmbG93Tm9kZVNoYXBlKTtcbiAgICAgIGhhbmRsZWROb2Rlcy5wdXNoKGZsb3dOb2RlU2hhcGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFsbExhbmVTaGFwZXMoZmxvd05vZGVTaGFwZSkge1xuXG4gICAgdmFyIHJvb3QgPSBnZXRMYW5lc1Jvb3QoZmxvd05vZGVTaGFwZSk7XG5cbiAgICBpZiAoIXBhcnRpY2lwYW50Q2FjaGVbcm9vdC5pZF0pIHtcbiAgICAgIHBhcnRpY2lwYW50Q2FjaGVbcm9vdC5pZF0gPSBjb2xsZWN0TGFuZXMocm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRpY2lwYW50Q2FjaGVbcm9vdC5pZF07XG4gIH1cblxuICBmdW5jdGlvbiBnZXROZXdMYW5lcyhmbG93Tm9kZVNoYXBlKSB7XG4gICAgaWYgKCFmbG93Tm9kZVNoYXBlLnBhcmVudCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHZhciBhbGxMYW5lU2hhcGVzID0gZ2V0QWxsTGFuZVNoYXBlcyhmbG93Tm9kZVNoYXBlKTtcblxuICAgIHJldHVybiBhbGxMYW5lU2hhcGVzLmZpbHRlcihmdW5jdGlvbihsKSB7XG4gICAgICByZXR1cm4gaXNJbkxhbmVTaGFwZShmbG93Tm9kZVNoYXBlLCBsKTtcbiAgICB9KS5tYXAoZnVuY3Rpb24oc2hhcGUpIHtcbiAgICAgIHJldHVybiBzaGFwZS5idXNpbmVzc09iamVjdDtcbiAgICB9KTtcbiAgfVxuXG4gIGxhbmVTaGFwZXMuZm9yRWFjaChmdW5jdGlvbihsYW5lU2hhcGUpIHtcbiAgICB2YXIgcm9vdCA9IGdldExhbmVzUm9vdChsYW5lU2hhcGUpO1xuXG4gICAgaWYgKCFyb290IHx8IGhhbmRsZWROb2Rlcy5pbmRleE9mKHJvb3QpICE9PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjaGlsZHJlbiA9IHJvb3QuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGMpIHtcbiAgICAgIHJldHVybiBpcyhjLCAnYnBtbjpGbG93Tm9kZScpO1xuICAgIH0pO1xuXG4gICAgY2hpbGRyZW4uZm9yRWFjaChhZGRGbG93Tm9kZVNoYXBlKTtcblxuICAgIGhhbmRsZWROb2Rlcy5wdXNoKHJvb3QpO1xuICB9KTtcblxuICBmbG93Tm9kZVNoYXBlcy5mb3JFYWNoKGFkZEZsb3dOb2RlU2hhcGUpO1xuXG5cbiAgYWxsRmxvd05vZGVTaGFwZXMuZm9yRWFjaChmdW5jdGlvbihmbG93Tm9kZVNoYXBlKSB7XG5cbiAgICB2YXIgZmxvd05vZGUgPSBmbG93Tm9kZVNoYXBlLmJ1c2luZXNzT2JqZWN0O1xuXG4gICAgdmFyIGxhbmVzID0gZmxvd05vZGUuZ2V0KExBTkVTX0FUVFIpLFxuICAgICAgICByZW1vdmUgPSBsYW5lcy5zbGljZSgpLFxuICAgICAgICBhZGQgPSBnZXROZXdMYW5lcyhmbG93Tm9kZVNoYXBlKTtcblxuICAgIHVwZGF0ZXMucHVzaCh7IGZsb3dOb2RlOiBmbG93Tm9kZSwgcmVtb3ZlOiByZW1vdmUsIGFkZDogYWRkIH0pO1xuICB9KTtcblxuICBsYW5lU2hhcGVzLmZvckVhY2goZnVuY3Rpb24obGFuZVNoYXBlKSB7XG5cbiAgICB2YXIgbGFuZSA9IGxhbmVTaGFwZS5idXNpbmVzc09iamVjdDtcblxuICAgIC8vIGxhbmUgZ290IHJlbW92ZWQgWFgtKVxuICAgIGlmICghbGFuZVNoYXBlLnBhcmVudCkge1xuICAgICAgbGFuZS5nZXQoRkxPV19OT0RFX1JFRlNfQVRUUikuZm9yRWFjaChmdW5jdGlvbihmbG93Tm9kZSkge1xuICAgICAgICB1cGRhdGVzLnB1c2goeyBmbG93Tm9kZTogZmxvd05vZGUsIHJlbW92ZTogWyBsYW5lIF0sIGFkZDogW10gfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB1cGRhdGVzO1xufTtcblxuVXBkYXRlRmxvd05vZGVSZWZzSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgdXBkYXRlcyA9IGNvbnRleHQudXBkYXRlcztcblxuICBpZiAoIXVwZGF0ZXMpIHtcbiAgICB1cGRhdGVzID0gY29udGV4dC51cGRhdGVzID0gdGhpcy5jb21wdXRlVXBkYXRlcyhjb250ZXh0LmZsb3dOb2RlU2hhcGVzLCBjb250ZXh0LmxhbmVTaGFwZXMpO1xuICB9XG5cblxuICB1cGRhdGVzLmZvckVhY2goZnVuY3Rpb24odXBkYXRlKSB7XG5cbiAgICB2YXIgZmxvd05vZGUgPSB1cGRhdGUuZmxvd05vZGUsXG4gICAgICAgIGxhbmVzID0gZmxvd05vZGUuZ2V0KExBTkVTX0FUVFIpO1xuXG4gICAgLy8gdW53aXJlIG9sZFxuICAgIHVwZGF0ZS5yZW1vdmUuZm9yRWFjaChmdW5jdGlvbihvbGRMYW5lKSB7XG4gICAgICBjb2xsZWN0aW9uUmVtb3ZlKGxhbmVzLCBvbGRMYW5lKTtcbiAgICAgIGNvbGxlY3Rpb25SZW1vdmUob2xkTGFuZS5nZXQoRkxPV19OT0RFX1JFRlNfQVRUUiksIGZsb3dOb2RlKTtcbiAgICB9KTtcblxuICAgIC8vIHdpcmUgbmV3XG4gICAgdXBkYXRlLmFkZC5mb3JFYWNoKGZ1bmN0aW9uKG5ld0xhbmUpIHtcbiAgICAgIGNvbGxlY3Rpb25BZGQobGFuZXMsIG5ld0xhbmUpO1xuICAgICAgY29sbGVjdGlvbkFkZChuZXdMYW5lLmdldChGTE9XX05PREVfUkVGU19BVFRSKSwgZmxvd05vZGUpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBUT0RPKG5pa2t1KTogcmV0dXJuIGNoYW5nZWQgZWxlbWVudHNcbiAgLy8gcmV0dXJuIFsgLi4uIF07XG59O1xuXG5cblVwZGF0ZUZsb3dOb2RlUmVmc0hhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgdXBkYXRlcyA9IGNvbnRleHQudXBkYXRlcztcblxuICB1cGRhdGVzLmZvckVhY2goZnVuY3Rpb24odXBkYXRlKSB7XG5cbiAgICB2YXIgZmxvd05vZGUgPSB1cGRhdGUuZmxvd05vZGUsXG4gICAgICAgIGxhbmVzID0gZmxvd05vZGUuZ2V0KExBTkVTX0FUVFIpO1xuXG4gICAgLy8gdW53aXJlIG5ld1xuICAgIHVwZGF0ZS5hZGQuZm9yRWFjaChmdW5jdGlvbihuZXdMYW5lKSB7XG4gICAgICBjb2xsZWN0aW9uUmVtb3ZlKGxhbmVzLCBuZXdMYW5lKTtcbiAgICAgIGNvbGxlY3Rpb25SZW1vdmUobmV3TGFuZS5nZXQoRkxPV19OT0RFX1JFRlNfQVRUUiksIGZsb3dOb2RlKTtcbiAgICB9KTtcblxuICAgIC8vIHdpcmUgb2xkXG4gICAgdXBkYXRlLnJlbW92ZS5mb3JFYWNoKGZ1bmN0aW9uKG9sZExhbmUpIHtcbiAgICAgIGNvbGxlY3Rpb25BZGQobGFuZXMsIG9sZExhbmUpO1xuICAgICAgY29sbGVjdGlvbkFkZChvbGRMYW5lLmdldChGTE9XX05PREVfUkVGU19BVFRSKSwgZmxvd05vZGUpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBUT0RPKG5pa2t1KTogcmV0dXJuIGNoYW5nZWQgZWxlbWVudHNcbiAgLy8gcmV0dXJuIFsgLi4uIF07XG59O1xuIiwiaW1wb3J0IHtcbiAgcmVkdWNlLFxuICBrZXlzLFxuICBmb3JFYWNoLFxuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdFxufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbnZhciBERUZBVUxUX0ZMT1cgPSAnZGVmYXVsdCcsXG4gICAgSUQgPSAnaWQnLFxuICAgIERJID0gJ2RpJztcblxudmFyIE5VTExfRElNRU5TSU9OUyA9IHtcbiAgd2lkdGg6IDAsXG4gIGhlaWdodDogMFxufTtcblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIGEgQlBNTiAyLjAgcHJvcGVydHkgdXBkYXRlLlxuICpcbiAqIFRoaXMgc2hvdWxkIGJlIHVzZWQgdG8gc2V0IHNpbXBsZSBwcm9wZXJ0aWVzIG9uIGVsZW1lbnRzIHdpdGhcbiAqIGFuIHVuZGVybHlpbmcgQlBNTiBidXNpbmVzcyBvYmplY3QuXG4gKlxuICogVXNlIHJlc3BlY3RpdmUgZGlhZ3JhbS1qcyBwcm92aWRlZCBoYW5kbGVycyBpZiB5b3Ugd291bGRcbiAqIGxpa2UgdG8gcGVyZm9ybSBhdXRvbWF0ZWQgbW9kZWxpbmcuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVwZGF0ZVByb3BlcnRpZXNIYW5kbGVyKFxuICAgIGVsZW1lbnRSZWdpc3RyeSwgbW9kZGxlLCB0cmFuc2xhdGUsXG4gICAgbW9kZWxpbmcsIHRleHRSZW5kZXJlcikge1xuXG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fbW9kZGxlID0gbW9kZGxlO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gIHRoaXMuX3RleHRSZW5kZXJlciA9IHRleHRSZW5kZXJlcjtcbn1cblxuVXBkYXRlUHJvcGVydGllc0hhbmRsZXIuJGluamVjdCA9IFtcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdtb2RkbGUnLFxuICAndHJhbnNsYXRlJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3RleHRSZW5kZXJlcidcbl07XG5cblxuLy8gYXBpIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBVcGRhdGVzIGEgQlBNTiBlbGVtZW50IHdpdGggYSBsaXN0IG9mIG5ldyBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGNvbnRleHQuZWxlbWVudCB0aGUgZWxlbWVudCB0byB1cGRhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0LnByb3BlcnRpZXMgYSBsaXN0IG9mIHByb3BlcnRpZXMgdG8gc2V0IG9uIHRoZSBlbGVtZW50J3NcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzaW5lc3NPYmplY3QgKHRoZSBCUE1OIG1vZGVsIGVsZW1lbnQpXG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSB0aGUgdXBkYXRlZCBlbGVtZW50XG4gKi9cblVwZGF0ZVByb3BlcnRpZXNIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50LFxuICAgICAgY2hhbmdlZCA9IFsgZWxlbWVudCBdLFxuICAgICAgdHJhbnNsYXRlID0gdGhpcy5fdHJhbnNsYXRlO1xuXG4gIGlmICghZWxlbWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ2VsZW1lbnQgcmVxdWlyZWQnKSk7XG4gIH1cblxuICB2YXIgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LFxuICAgICAgaWRzID0gdGhpcy5fbW9kZGxlLmlkcztcblxuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgcHJvcGVydGllcyA9IHVud3JhcEJ1c2luZXNzT2JqZWN0cyhjb250ZXh0LnByb3BlcnRpZXMpLFxuICAgICAgb2xkUHJvcGVydGllcyA9IGNvbnRleHQub2xkUHJvcGVydGllcyB8fCBnZXRQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LCBwcm9wZXJ0aWVzKTtcblxuICBpZiAoaXNJZENoYW5nZShwcm9wZXJ0aWVzLCBidXNpbmVzc09iamVjdCkpIHtcbiAgICBpZHMudW5jbGFpbShidXNpbmVzc09iamVjdFtJRF0pO1xuXG4gICAgZWxlbWVudFJlZ2lzdHJ5LnVwZGF0ZUlkKGVsZW1lbnQsIHByb3BlcnRpZXNbSURdKTtcblxuICAgIGlkcy5jbGFpbShwcm9wZXJ0aWVzW0lEXSwgYnVzaW5lc3NPYmplY3QpO1xuICB9XG5cbiAgLy8gY29ycmVjdGx5IGluZGljYXRlIHZpc3VhbCBjaGFuZ2VzIG9uIGRlZmF1bHQgZmxvdyB1cGRhdGVzXG4gIGlmIChERUZBVUxUX0ZMT1cgaW4gcHJvcGVydGllcykge1xuXG4gICAgaWYgKHByb3BlcnRpZXNbREVGQVVMVF9GTE9XXSkge1xuICAgICAgY2hhbmdlZC5wdXNoKGVsZW1lbnRSZWdpc3RyeS5nZXQocHJvcGVydGllc1tERUZBVUxUX0ZMT1ddLmlkKSk7XG4gICAgfVxuXG4gICAgaWYgKGJ1c2luZXNzT2JqZWN0W0RFRkFVTFRfRkxPV10pIHtcbiAgICAgIGNoYW5nZWQucHVzaChlbGVtZW50UmVnaXN0cnkuZ2V0KGJ1c2luZXNzT2JqZWN0W0RFRkFVTFRfRkxPV10uaWQpKTtcbiAgICB9XG4gIH1cblxuICAvLyB1cGRhdGUgcHJvcGVydGllc1xuICBzZXRQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LCBwcm9wZXJ0aWVzKTtcblxuICAvLyBzdG9yZSBvbGQgdmFsdWVzXG4gIGNvbnRleHQub2xkUHJvcGVydGllcyA9IG9sZFByb3BlcnRpZXM7XG4gIGNvbnRleHQuY2hhbmdlZCA9IGNoYW5nZWQ7XG5cbiAgLy8gaW5kaWNhdGUgY2hhbmdlZCBvbiBvYmplY3RzIGFmZmVjdGVkIGJ5IHRoZSB1cGRhdGVcbiAgcmV0dXJuIGNoYW5nZWQ7XG59O1xuXG5cblVwZGF0ZVByb3BlcnRpZXNIYW5kbGVyLnByb3RvdHlwZS5wb3N0RXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICBsYWJlbCA9IGVsZW1lbnQubGFiZWw7XG5cbiAgdmFyIHRleHQgPSBsYWJlbCAmJiBnZXRCdXNpbmVzc09iamVjdChsYWJlbCkubmFtZTtcblxuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBnZXQgbGF5b3V0ZWQgdGV4dCBib3VuZHMgYW5kIHJlc2l6ZSBleHRlcm5hbFxuICAvLyBleHRlcm5hbCBsYWJlbCBhY2NvcmRpbmdseVxuICB2YXIgbmV3TGFiZWxCb3VuZHMgPSB0aGlzLl90ZXh0UmVuZGVyZXIuZ2V0RXh0ZXJuYWxMYWJlbEJvdW5kcyhsYWJlbCwgdGV4dCk7XG5cbiAgdGhpcy5fbW9kZWxpbmcucmVzaXplU2hhcGUobGFiZWwsIG5ld0xhYmVsQm91bmRzLCBOVUxMX0RJTUVOU0lPTlMpO1xufTtcblxuLyoqXG4gKiBSZXZlcnRzIHRoZSB1cGRhdGUgb24gYSBCUE1OIGVsZW1lbnRzIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBjb250ZXh0XG4gKlxuICogQHJldHVybiB7ZGpzLm1vZGVsLkJhc2V9IHRoZSB1cGRhdGVkIGVsZW1lbnRcbiAqL1xuVXBkYXRlUHJvcGVydGllc0hhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgIHByb3BlcnRpZXMgPSBjb250ZXh0LnByb3BlcnRpZXMsXG4gICAgICBvbGRQcm9wZXJ0aWVzID0gY29udGV4dC5vbGRQcm9wZXJ0aWVzLFxuICAgICAgYnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LFxuICAgICAgaWRzID0gdGhpcy5fbW9kZGxlLmlkcztcblxuICAvLyB1cGRhdGUgcHJvcGVydGllc1xuICBzZXRQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LCBvbGRQcm9wZXJ0aWVzKTtcblxuICBpZiAoaXNJZENoYW5nZShwcm9wZXJ0aWVzLCBidXNpbmVzc09iamVjdCkpIHtcbiAgICBpZHMudW5jbGFpbShwcm9wZXJ0aWVzW0lEXSk7XG5cbiAgICBlbGVtZW50UmVnaXN0cnkudXBkYXRlSWQoZWxlbWVudCwgb2xkUHJvcGVydGllc1tJRF0pO1xuXG4gICAgaWRzLmNsYWltKG9sZFByb3BlcnRpZXNbSURdLCBidXNpbmVzc09iamVjdCk7XG4gIH1cblxuICByZXR1cm4gY29udGV4dC5jaGFuZ2VkO1xufTtcblxuXG5mdW5jdGlvbiBpc0lkQ2hhbmdlKHByb3BlcnRpZXMsIGJ1c2luZXNzT2JqZWN0KSB7XG4gIHJldHVybiBJRCBpbiBwcm9wZXJ0aWVzICYmIHByb3BlcnRpZXNbSURdICE9PSBidXNpbmVzc09iamVjdFtJRF07XG59XG5cblxuZnVuY3Rpb24gZ2V0UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwgcHJvcGVydGllcykge1xuICB2YXIgcHJvcGVydHlOYW1lcyA9IGtleXMocHJvcGVydGllcyk7XG5cbiAgcmV0dXJuIHJlZHVjZShwcm9wZXJ0eU5hbWVzLCBmdW5jdGlvbihyZXN1bHQsIGtleSkge1xuXG4gICAgLy8gaGFuZGxlIERJIHNlcGFyYXRlbHlcbiAgICBpZiAoa2V5ICE9PSBESSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBidXNpbmVzc09iamVjdC5nZXQoa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSBnZXREaVByb3BlcnRpZXMoYnVzaW5lc3NPYmplY3QuZGksIGtleXMocHJvcGVydGllcy5kaSkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTtcbn1cblxuXG5mdW5jdGlvbiBnZXREaVByb3BlcnRpZXMoZGksIHByb3BlcnR5TmFtZXMpIHtcbiAgcmV0dXJuIHJlZHVjZShwcm9wZXJ0eU5hbWVzLCBmdW5jdGlvbihyZXN1bHQsIGtleSkge1xuICAgIHJlc3VsdFtrZXldID0gZGkuZ2V0KGtleSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG59XG5cblxuZnVuY3Rpb24gc2V0UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwgcHJvcGVydGllcykge1xuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcblxuICAgIGlmIChrZXkgIT09IERJKSB7XG4gICAgICBidXNpbmVzc09iamVjdC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gb25seSB1cGRhdGUsIGlmIGJ1c2luZXNzT2JqZWN0LmRpIGV4aXN0c1xuICAgICAgaWYgKGJ1c2luZXNzT2JqZWN0LmRpKSB7XG4gICAgICAgIHNldERpUHJvcGVydGllcyhidXNpbmVzc09iamVjdC5kaSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cblxuZnVuY3Rpb24gc2V0RGlQcm9wZXJ0aWVzKGRpLCBwcm9wZXJ0aWVzKSB7XG4gIGZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgIGRpLnNldChrZXksIHZhbHVlKTtcbiAgfSk7XG59XG5cblxudmFyIHJlZmVyZW5jZVByb3BlcnR5TmFtZXMgPSBbICdkZWZhdWx0JyBdO1xuXG4vKipcbiAqIE1ha2Ugc3VyZSB3ZSB1bndyYXAgdGhlIGFjdHVhbCBidXNpbmVzcyBvYmplY3RcbiAqIGJlaGluZCBkaWFncmFtIGVsZW1lbnQgdGhhdCBtYXkgaGF2ZSBiZWVuXG4gKiBwYXNzZWQgYXMgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gcHJvcGVydGllc1xuICpcbiAqIEByZXR1cm4ge09iamVjdH0gdW53cmFwcGVkUHJvcHNcbiAqL1xuZnVuY3Rpb24gdW53cmFwQnVzaW5lc3NPYmplY3RzKHByb3BlcnRpZXMpIHtcblxuICB2YXIgdW53cmFwcGVkUHJvcHMgPSBhc3NpZ24oe30sIHByb3BlcnRpZXMpO1xuXG4gIHJlZmVyZW5jZVByb3BlcnR5TmFtZXMuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgaWYgKG5hbWUgaW4gcHJvcGVydGllcykge1xuICAgICAgdW53cmFwcGVkUHJvcHNbbmFtZV0gPSBnZXRCdXNpbmVzc09iamVjdCh1bndyYXBwZWRQcm9wc1tuYW1lXSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdW53cmFwcGVkUHJvcHM7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVXBkYXRlU2VtYW50aWNQYXJlbnRIYW5kbGVyKGJwbW5VcGRhdGVyKSB7XHJcbiAgdGhpcy5fYnBtblVwZGF0ZXIgPSBicG1uVXBkYXRlcjtcclxufVxyXG5cclxuVXBkYXRlU2VtYW50aWNQYXJlbnRIYW5kbGVyLiRpbmplY3QgPSBbICdicG1uVXBkYXRlcicgXTtcclxuXHJcblxyXG5VcGRhdGVTZW1hbnRpY1BhcmVudEhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgdmFyIGRhdGFTdG9yZUJvID0gY29udGV4dC5kYXRhU3RvcmVCbyxcclxuICAgICAgbmV3U2VtYW50aWNQYXJlbnQgPSBjb250ZXh0Lm5ld1NlbWFudGljUGFyZW50LFxyXG4gICAgICBuZXdEaVBhcmVudCA9IGNvbnRleHQubmV3RGlQYXJlbnQ7XHJcblxyXG4gIGNvbnRleHQub2xkU2VtYW50aWNQYXJlbnQgPSBkYXRhU3RvcmVCby4kcGFyZW50O1xyXG4gIGNvbnRleHQub2xkRGlQYXJlbnQgPSBkYXRhU3RvcmVCby5kaS4kcGFyZW50O1xyXG5cclxuICAvLyB1cGRhdGUgc2VtYW50aWMgcGFyZW50XHJcbiAgdGhpcy5fYnBtblVwZGF0ZXIudXBkYXRlU2VtYW50aWNQYXJlbnQoZGF0YVN0b3JlQm8sIG5ld1NlbWFudGljUGFyZW50KTtcclxuXHJcbiAgLy8gdXBkYXRlIERJIHBhcmVudFxyXG4gIHRoaXMuX2JwbW5VcGRhdGVyLnVwZGF0ZURpUGFyZW50KGRhdGFTdG9yZUJvLmRpLCBuZXdEaVBhcmVudCk7XHJcbn07XHJcblxyXG5VcGRhdGVTZW1hbnRpY1BhcmVudEhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICB2YXIgZGF0YVN0b3JlQm8gPSBjb250ZXh0LmRhdGFTdG9yZUJvLFxyXG4gICAgICBvbGRTZW1hbnRpY1BhcmVudCA9IGNvbnRleHQub2xkU2VtYW50aWNQYXJlbnQsXHJcbiAgICAgIG9sZERpUGFyZW50ID0gY29udGV4dC5vbGREaVBhcmVudDtcclxuXHJcbiAgLy8gdXBkYXRlIHNlbWFudGljIHBhcmVudFxyXG4gIHRoaXMuX2JwbW5VcGRhdGVyLnVwZGF0ZVNlbWFudGljUGFyZW50KGRhdGFTdG9yZUJvLCBvbGRTZW1hbnRpY1BhcmVudCk7XHJcblxyXG4gIC8vIHVwZGF0ZSBESSBwYXJlbnRcclxuICB0aGlzLl9icG1uVXBkYXRlci51cGRhdGVEaVBhcmVudChkYXRhU3RvcmVCby5kaSwgb2xkRGlQYXJlbnQpO1xyXG59O1xyXG5cclxuIiwiaW1wb3J0IEJlaGF2aW9yTW9kdWxlIGZyb20gJy4vYmVoYXZpb3InO1xuaW1wb3J0IFJ1bGVzTW9kdWxlIGZyb20gJy4uL3J1bGVzJztcbmltcG9ydCBEaU9yZGVyaW5nTW9kdWxlIGZyb20gJy4uL2RpLW9yZGVyaW5nJztcbmltcG9ydCBPcmRlcmluZ01vZHVsZSBmcm9tICcuLi9vcmRlcmluZyc7XG5pbXBvcnQgUmVwbGFjZU1vZHVsZSBmcm9tICcuLi9yZXBsYWNlJztcblxuaW1wb3J0IENvbW1hbmRNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZCc7XG5pbXBvcnQgVG9vbHRpcHNNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvdG9vbHRpcHMnO1xuaW1wb3J0IExhYmVsU3VwcG9ydE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1zdXBwb3J0JztcbmltcG9ydCBBdHRhY2hTdXBwb3J0TW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F0dGFjaC1zdXBwb3J0JztcbmltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uJztcbmltcG9ydCBDaGFuZ2VTdXBwb3J0TW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NoYW5nZS1zdXBwb3J0JztcbmltcG9ydCBTcGFjZVRvb2xNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc3BhY2UtdG9vbCc7XG5cbmltcG9ydCBCcG1uRmFjdG9yeSBmcm9tICcuL0JwbW5GYWN0b3J5JztcbmltcG9ydCBCcG1uVXBkYXRlciBmcm9tICcuL0JwbW5VcGRhdGVyJztcbmltcG9ydCBFbGVtZW50RmFjdG9yeSBmcm9tICcuL0VsZW1lbnRGYWN0b3J5JztcbmltcG9ydCBNb2RlbGluZyBmcm9tICcuL01vZGVsaW5nJztcbmltcG9ydCBCcG1uTGF5b3V0ZXIgZnJvbSAnLi9CcG1uTGF5b3V0ZXInO1xuaW1wb3J0IENyb3BwaW5nQ29ubmVjdGlvbkRvY2tpbmcgZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0Nyb3BwaW5nQ29ubmVjdGlvbkRvY2tpbmcnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFtcbiAgICAnbW9kZWxpbmcnLFxuICAgICdicG1uVXBkYXRlcidcbiAgXSxcbiAgX19kZXBlbmRzX186IFtcbiAgICBCZWhhdmlvck1vZHVsZSxcbiAgICBSdWxlc01vZHVsZSxcbiAgICBEaU9yZGVyaW5nTW9kdWxlLFxuICAgIE9yZGVyaW5nTW9kdWxlLFxuICAgIFJlcGxhY2VNb2R1bGUsXG4gICAgQ29tbWFuZE1vZHVsZSxcbiAgICBUb29sdGlwc01vZHVsZSxcbiAgICBMYWJlbFN1cHBvcnRNb2R1bGUsXG4gICAgQXR0YWNoU3VwcG9ydE1vZHVsZSxcbiAgICBTZWxlY3Rpb25Nb2R1bGUsXG4gICAgQ2hhbmdlU3VwcG9ydE1vZHVsZSxcbiAgICBTcGFjZVRvb2xNb2R1bGVcbiAgXSxcbiAgYnBtbkZhY3Rvcnk6IFsgJ3R5cGUnLCBCcG1uRmFjdG9yeSBdLFxuICBicG1uVXBkYXRlcjogWyAndHlwZScsIEJwbW5VcGRhdGVyIF0sXG4gIGVsZW1lbnRGYWN0b3J5OiBbICd0eXBlJywgRWxlbWVudEZhY3RvcnkgXSxcbiAgbW9kZWxpbmc6IFsgJ3R5cGUnLCBNb2RlbGluZyBdLFxuICBsYXlvdXRlcjogWyAndHlwZScsIEJwbW5MYXlvdXRlciBdLFxuICBjb25uZWN0aW9uRG9ja2luZzogWyAndHlwZScsIENyb3BwaW5nQ29ubmVjdGlvbkRvY2tpbmcgXVxufTsiLCJpbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0UGFyZW50XG59IGZyb20gJy4vTW9kZWxpbmdVdGlsJztcblxuaW1wb3J0IHtcbiAgYXNUUkJMXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgc3Vic3RyYWN0VFJCTCxcbiAgcmVzaXplVFJCTFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvUmVzaXplVXRpbCc7XG5cbnZhciBhYnMgPSBNYXRoLmFicztcblxuXG5mdW5jdGlvbiBnZXRUUkJMUmVzaXplKG9sZEJvdW5kcywgbmV3Qm91bmRzKSB7XG4gIHJldHVybiBzdWJzdHJhY3RUUkJMKGFzVFJCTChuZXdCb3VuZHMpLCBhc1RSQkwob2xkQm91bmRzKSk7XG59XG5cblxudmFyIExBTkVfUEFSRU5UUyA9IFtcbiAgJ2JwbW46UGFydGljaXBhbnQnLFxuICAnYnBtbjpQcm9jZXNzJyxcbiAgJ2JwbW46U3ViUHJvY2Vzcydcbl07XG5cbmV4cG9ydCB2YXIgTEFORV9JTkRFTlRBVElPTiA9IDMwO1xuXG5cbi8qKlxuICogQ29sbGVjdCBhbGwgbGFuZSBzaGFwZXMgaW4gdGhlIGdpdmVuIHBhcmVuXG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLlNoYXBlfSBzaGFwZVxuICogQHBhcmFtICB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBbY29sbGVjdGVkU2hhcGVzXVxuICpcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RMYW5lcyhzaGFwZSwgY29sbGVjdGVkU2hhcGVzKSB7XG5cbiAgY29sbGVjdGVkU2hhcGVzID0gY29sbGVjdGVkU2hhcGVzIHx8IFtdO1xuXG4gIHNoYXBlLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihzKSB7XG4gICAgaWYgKGlzKHMsICdicG1uOkxhbmUnKSkge1xuICAgICAgY29sbGVjdExhbmVzKHMsIGNvbGxlY3RlZFNoYXBlcyk7XG5cbiAgICAgIGNvbGxlY3RlZFNoYXBlcy5wdXNoKHMpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNvbGxlY3RlZFNoYXBlcztcbn1cblxuXG4vKipcbiAqIFJldHVybiB0aGUgbGFuZSBjaGlsZHJlbiBvZiB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gc2hhcGVcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRMYW5lcyhzaGFwZSkge1xuICByZXR1cm4gc2hhcGUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4gaXMoYywgJ2JwbW46TGFuZScpO1xuICB9KTtcbn1cblxuXG4vKipcbiAqIFJldHVybiB0aGUgcm9vdCBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIGdpdmVuIGxhbmUgc2hhcGVcbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gc2hhcGVcbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuU2hhcGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYW5lc1Jvb3Qoc2hhcGUpIHtcbiAgcmV0dXJuIGdldFBhcmVudChzaGFwZSwgTEFORV9QQVJFTlRTKSB8fCBzaGFwZTtcbn1cblxuXG4vKipcbiAqIENvbXB1dGUgdGhlIHJlcXVpcmVkIHJlc2l6ZSBvcGVyYXRpb25zIGZvciBsYW5lc1xuICogYWRqYWNlbnQgdG8gdGhlIGdpdmVuIHNoYXBlLCBhc3N1bWluZyBpdCB3aWxsIGJlXG4gKiByZXNpemVkIHRvIHRoZSBnaXZlbiBuZXcgYm91bmRzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBzaGFwZVxuICogQHBhcmFtIHtCb3VuZHN9IG5ld0JvdW5kc1xuICpcbiAqIEByZXR1cm4ge0FycmF5PE9iamVjdD59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlTGFuZXNSZXNpemUoc2hhcGUsIG5ld0JvdW5kcykge1xuXG4gIHZhciByb290RWxlbWVudCA9IGdldExhbmVzUm9vdChzaGFwZSk7XG5cbiAgdmFyIGluaXRpYWxTaGFwZXMgPSBpcyhyb290RWxlbWVudCwgJ2JwbW46UHJvY2VzcycpID8gW10gOiBbIHJvb3RFbGVtZW50IF07XG5cbiAgdmFyIGFsbExhbmVzID0gY29sbGVjdExhbmVzKHJvb3RFbGVtZW50LCBpbml0aWFsU2hhcGVzKSxcbiAgICAgIHNoYXBlVHJibCA9IGFzVFJCTChzaGFwZSksXG4gICAgICBzaGFwZU5ld1RyYmwgPSBhc1RSQkwobmV3Qm91bmRzKSxcbiAgICAgIHRyYmxSZXNpemUgPSBnZXRUUkJMUmVzaXplKHNoYXBlLCBuZXdCb3VuZHMpLFxuICAgICAgcmVzaXplTmVlZGVkID0gW107XG5cbiAgYWxsTGFuZXMuZm9yRWFjaChmdW5jdGlvbihvdGhlcikge1xuXG4gICAgaWYgKG90aGVyID09PSBzaGFwZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0b3BSZXNpemUgPSAwLFxuICAgICAgICByaWdodFJlc2l6ZSA9IHRyYmxSZXNpemUucmlnaHQsXG4gICAgICAgIGJvdHRvbVJlc2l6ZSA9IDAsXG4gICAgICAgIGxlZnRSZXNpemUgPSB0cmJsUmVzaXplLmxlZnQ7XG5cbiAgICB2YXIgb3RoZXJUcmJsID0gYXNUUkJMKG90aGVyKTtcblxuICAgIGlmICh0cmJsUmVzaXplLnRvcCkge1xuICAgICAgaWYgKGFicyhvdGhlclRyYmwuYm90dG9tIC0gc2hhcGVUcmJsLnRvcCkgPCAxMCkge1xuICAgICAgICBib3R0b21SZXNpemUgPSBzaGFwZU5ld1RyYmwudG9wIC0gb3RoZXJUcmJsLmJvdHRvbTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFicyhvdGhlclRyYmwudG9wIC0gc2hhcGVUcmJsLnRvcCkgPCA1KSB7XG4gICAgICAgIHRvcFJlc2l6ZSA9IHNoYXBlTmV3VHJibC50b3AgLSBvdGhlclRyYmwudG9wO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0cmJsUmVzaXplLmJvdHRvbSkge1xuICAgICAgaWYgKGFicyhvdGhlclRyYmwudG9wIC0gc2hhcGVUcmJsLmJvdHRvbSkgPCAxMCkge1xuICAgICAgICB0b3BSZXNpemUgPSBzaGFwZU5ld1RyYmwuYm90dG9tIC0gb3RoZXJUcmJsLnRvcDtcbiAgICAgIH1cblxuICAgICAgaWYgKGFicyhvdGhlclRyYmwuYm90dG9tIC0gc2hhcGVUcmJsLmJvdHRvbSkgPCA1KSB7XG4gICAgICAgIGJvdHRvbVJlc2l6ZSA9IHNoYXBlTmV3VHJibC5ib3R0b20gLSBvdGhlclRyYmwuYm90dG9tO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0b3BSZXNpemUgfHwgcmlnaHRSZXNpemUgfHwgYm90dG9tUmVzaXplIHx8IGxlZnRSZXNpemUpIHtcblxuICAgICAgcmVzaXplTmVlZGVkLnB1c2goe1xuICAgICAgICBzaGFwZTogb3RoZXIsXG4gICAgICAgIG5ld0JvdW5kczogcmVzaXplVFJCTChvdGhlciwge1xuICAgICAgICAgIHRvcDogdG9wUmVzaXplLFxuICAgICAgICAgIHJpZ2h0OiByaWdodFJlc2l6ZSxcbiAgICAgICAgICBib3R0b206IGJvdHRvbVJlc2l6ZSxcbiAgICAgICAgICBsZWZ0OiBsZWZ0UmVzaXplXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG5cbiAgfSk7XG5cbiAgcmV0dXJuIHJlc2l6ZU5lZWRlZDtcbn0iLCJpbXBvcnQge1xuICBzb21lXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiBlbGVtZW50IGhhcyBhbnkgb2YgdGhlIGdpdmVuIHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gdHlwZXNcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBbnkoZWxlbWVudCwgdHlwZXMpIHtcbiAgcmV0dXJuIHNvbWUodHlwZXMsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gaXMoZWxlbWVudCwgdCk7XG4gIH0pO1xufVxuXG5cbi8qKlxuICogUmV0dXJuIHRoZSBwYXJlbnQgb2YgdGhlIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhlIGdpdmVuIHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PHN0cmluZz59IGFueVR5cGVcbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuQmFzZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudChlbGVtZW50LCBhbnlUeXBlKSB7XG5cbiAgaWYgKHR5cGVvZiBhbnlUeXBlID09PSAnc3RyaW5nJykge1xuICAgIGFueVR5cGUgPSBbIGFueVR5cGUgXTtcbiAgfVxuXG4gIHdoaWxlICgoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50KSkge1xuICAgIGlmIChpc0FueShlbGVtZW50LCBhbnlUeXBlKSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IE9yZGVyaW5nUHJvdmlkZXIgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvb3JkZXJpbmcvT3JkZXJpbmdQcm92aWRlcic7XG5cbmltcG9ydCB7XG4gIGlzQW55XG59IGZyb20gJy4uL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsJztcblxuaW1wb3J0IHtcbiAgZmluZEluZGV4LFxuICBmaW5kXG59IGZyb20gJ21pbi1kYXNoJztcblxuXG4vKipcbiAqIGEgc2ltcGxlIG9yZGVyaW5nIHByb3ZpZGVyIHRoYXQgbWFrZXMgc3VyZTpcbiAqXG4gKiAoMCkgbGFiZWxzIGFuZCBncm91cHMgYXJlIHJlbmRlcmVkIGFsd2F5cyBvbiB0b3BcbiAqICgxKSBlbGVtZW50cyBhcmUgb3JkZXJlZCBieSBhIHtsZXZlbH0gcHJvcGVydHlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbk9yZGVyaW5nUHJvdmlkZXIoZXZlbnRCdXMsIGNhbnZhcywgdHJhbnNsYXRlKSB7XG5cbiAgT3JkZXJpbmdQcm92aWRlci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB2YXIgb3JkZXJzID0gW1xuICAgIHsgdHlwZTogJ2JwbW46U3ViUHJvY2VzcycsIG9yZGVyOiB7IGxldmVsOiA2IH0gfSxcbiAgICB7XG4gICAgICB0eXBlOiAnYnBtbjpTZXF1ZW5jZUZsb3cnLFxuICAgICAgb3JkZXI6IHtcbiAgICAgICAgbGV2ZWw6IDMsXG4gICAgICAgIGNvbnRhaW5lcnM6IFtcbiAgICAgICAgICAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgICAgICAgJ2JwbW46Rmxvd0VsZW1lbnRzQ29udGFpbmVyJ1xuICAgICAgICBdXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIGhhbmRsZSBEYXRhQXNzb2NpYXRpb24ocykgbGlrZSBtZXNzYWdlIGZsb3dzIGFuZCByZW5kZXIgdGhlbSBhbHdheXMgb24gdG9wXG4gICAge1xuICAgICAgdHlwZTogJ2JwbW46RGF0YUFzc29jaWF0aW9uJyxcbiAgICAgIG9yZGVyOiB7XG4gICAgICAgIGxldmVsOiA5LFxuICAgICAgICBjb250YWluZXJzOiBbXG4gICAgICAgICAgJ2JwbW46Q29sbGFib3JhdGlvbicsXG4gICAgICAgICAgJ2JwbW46UHJvY2VzcydcbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogJ2JwbW46TWVzc2FnZUZsb3cnLCBvcmRlcjoge1xuICAgICAgICBsZXZlbDogOSxcbiAgICAgICAgY29udGFpbmVyczogWyAnYnBtbjpDb2xsYWJvcmF0aW9uJyBdXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiAnYnBtbjpBc3NvY2lhdGlvbicsXG4gICAgICBvcmRlcjoge1xuICAgICAgICBsZXZlbDogNixcbiAgICAgICAgY29udGFpbmVyczogW1xuICAgICAgICAgICdicG1uOlBhcnRpY2lwYW50JyxcbiAgICAgICAgICAnYnBtbjpGbG93RWxlbWVudHNDb250YWluZXInLFxuICAgICAgICAgICdicG1uOkNvbGxhYm9yYXRpb24nXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9LFxuICAgIHsgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsIG9yZGVyOiB7IGxldmVsOiA4IH0gfSxcbiAgICB7XG4gICAgICB0eXBlOiAnYnBtbjpHcm91cCcsXG4gICAgICBvcmRlcjoge1xuICAgICAgICBsZXZlbDogMTAsXG4gICAgICAgIGNvbnRhaW5lcnM6IFtcbiAgICAgICAgICAnYnBtbjpDb2xsYWJvcmF0aW9uJyxcbiAgICAgICAgICAnYnBtbjpQcm9jZXNzJ1xuICAgICAgICBdXG4gICAgICB9XG4gICAgfSxcbiAgICB7IHR5cGU6ICdicG1uOkZsb3dFbGVtZW50Jywgb3JkZXI6IHsgbGV2ZWw6IDUgfSB9LFxuICAgIHsgdHlwZTogJ2JwbW46UGFydGljaXBhbnQnLCBvcmRlcjogeyBsZXZlbDogLTIgfSB9LFxuICAgIHsgdHlwZTogJ2JwbW46TGFuZScsIG9yZGVyOiB7IGxldmVsOiAtMSB9IH1cbiAgXTtcblxuICBmdW5jdGlvbiBjb21wdXRlT3JkZXIoZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50LmxhYmVsVGFyZ2V0KSB7XG4gICAgICByZXR1cm4geyBsZXZlbDogMTAgfTtcbiAgICB9XG5cbiAgICB2YXIgZW50cnkgPSBmaW5kKG9yZGVycywgZnVuY3Rpb24obykge1xuICAgICAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIFsgby50eXBlIF0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5Lm9yZGVyIHx8IHsgbGV2ZWw6IDEgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE9yZGVyKGVsZW1lbnQpIHtcblxuICAgIHZhciBvcmRlciA9IGVsZW1lbnQub3JkZXI7XG5cbiAgICBpZiAoIW9yZGVyKSB7XG4gICAgICBlbGVtZW50Lm9yZGVyID0gb3JkZXIgPSBjb21wdXRlT3JkZXIoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9yZGVyO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZEFjdHVhbFBhcmVudChlbGVtZW50LCBuZXdQYXJlbnQsIGNvbnRhaW5lcnMpIHtcblxuICAgIHZhciBhY3R1YWxQYXJlbnQgPSBuZXdQYXJlbnQ7XG5cbiAgICB3aGlsZSAoYWN0dWFsUGFyZW50KSB7XG5cbiAgICAgIGlmIChpc0FueShhY3R1YWxQYXJlbnQsIGNvbnRhaW5lcnMpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBhY3R1YWxQYXJlbnQgPSBhY3R1YWxQYXJlbnQucGFyZW50O1xuICAgIH1cblxuICAgIGlmICghYWN0dWFsUGFyZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdubyBwYXJlbnQgZm9yIHtlbGVtZW50fSBpbiB7cGFyZW50fScsIHtcbiAgICAgICAgZWxlbWVudDogZWxlbWVudC5pZCxcbiAgICAgICAgcGFyZW50OiBuZXdQYXJlbnQuaWRcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0dWFsUGFyZW50O1xuICB9XG5cbiAgdGhpcy5nZXRPcmRlcmluZyA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5ld1BhcmVudCkge1xuXG4gICAgLy8gcmVuZGVyIGxhYmVscyBhbHdheXMgb24gdG9wXG4gICAgaWYgKGVsZW1lbnQubGFiZWxUYXJnZXQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhcmVudDogY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgICAgIGluZGV4OiAtMVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudE9yZGVyID0gZ2V0T3JkZXIoZWxlbWVudCk7XG5cblxuICAgIGlmIChlbGVtZW50T3JkZXIuY29udGFpbmVycykge1xuICAgICAgbmV3UGFyZW50ID0gZmluZEFjdHVhbFBhcmVudChlbGVtZW50LCBuZXdQYXJlbnQsIGVsZW1lbnRPcmRlci5jb250YWluZXJzKTtcbiAgICB9XG5cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSBuZXdQYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihlbGVtZW50KTtcblxuICAgIHZhciBpbnNlcnRJbmRleCA9IGZpbmRJbmRleChuZXdQYXJlbnQuY2hpbGRyZW4sIGZ1bmN0aW9uKGNoaWxkKSB7XG5cbiAgICAgIC8vIGRvIG5vdCBjb21wYXJlIHdpdGggbGFiZWxzLCB0aGV5IGFyZSBjcmVhdGVkXG4gICAgICAvLyBpbiB0aGUgd3Jvbmcgb3JkZXIgKHJpZ2h0IGFmdGVyIGVsZW1lbnRzKSBkdXJpbmcgaW1wb3J0IGFuZFxuICAgICAgLy8gbWVzcyB1cCB0aGUgcG9zaXRpb25pbmcuXG4gICAgICBpZiAoIWVsZW1lbnQubGFiZWxUYXJnZXQgJiYgY2hpbGQubGFiZWxUYXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZWxlbWVudE9yZGVyLmxldmVsIDwgZ2V0T3JkZXIoY2hpbGQpLmxldmVsO1xuICAgIH0pO1xuXG5cbiAgICAvLyBpZiB0aGUgZWxlbWVudCBpcyBhbHJlYWR5IGluIHRoZSBjaGlsZCBsaXN0IGF0XG4gICAgLy8gYSBzbWFsbGVyIGluZGV4LCB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgaW5zZXJ0IGluZGV4LlxuICAgIC8vIHRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoYXQgdGhlIGVsZW1lbnQgaXMgYmVpbmcgcmVtb3ZlZFxuICAgIC8vIGJlZm9yZSBiZWluZyByZS1pbnNlcnRlZFxuICAgIGlmIChpbnNlcnRJbmRleCAhPT0gLTEpIHtcbiAgICAgIGlmIChjdXJyZW50SW5kZXggIT09IC0xICYmIGN1cnJlbnRJbmRleCA8IGluc2VydEluZGV4KSB7XG4gICAgICAgIGluc2VydEluZGV4IC09IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGluZGV4OiBpbnNlcnRJbmRleCxcbiAgICAgIHBhcmVudDogbmV3UGFyZW50XG4gICAgfTtcbiAgfTtcbn1cblxuQnBtbk9yZGVyaW5nUHJvdmlkZXIuJGluamVjdCA9IFsgJ2V2ZW50QnVzJywgJ2NhbnZhcycsICd0cmFuc2xhdGUnIF07XG5cbmluaGVyaXRzKEJwbW5PcmRlcmluZ1Byb3ZpZGVyLCBPcmRlcmluZ1Byb3ZpZGVyKTsiLCJpbXBvcnQgdHJhbnNsYXRlIGZyb20gJ2RpYWdyYW0tanMvbGliL2kxOG4vdHJhbnNsYXRlJztcblxuaW1wb3J0IEJwbW5PcmRlcmluZ1Byb3ZpZGVyIGZyb20gJy4vQnBtbk9yZGVyaW5nUHJvdmlkZXInO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgdHJhbnNsYXRlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdicG1uT3JkZXJpbmdQcm92aWRlcicgXSxcbiAgYnBtbk9yZGVyaW5nUHJvdmlkZXI6IFsgJ3R5cGUnLCBCcG1uT3JkZXJpbmdQcm92aWRlciBdXG59OyIsImltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBBIHBhbGV0dGUgcHJvdmlkZXIgZm9yIEJQTU4gMi4wIGVsZW1lbnRzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQYWxldHRlUHJvdmlkZXIoXG4gICAgcGFsZXR0ZSwgY3JlYXRlLCBlbGVtZW50RmFjdG9yeSxcbiAgICBzcGFjZVRvb2wsIGxhc3NvVG9vbCwgaGFuZFRvb2wsXG4gICAgZ2xvYmFsQ29ubmVjdCwgdHJhbnNsYXRlKSB7XG5cbiAgdGhpcy5fcGFsZXR0ZSA9IHBhbGV0dGU7XG4gIHRoaXMuX2NyZWF0ZSA9IGNyZWF0ZTtcbiAgdGhpcy5fZWxlbWVudEZhY3RvcnkgPSBlbGVtZW50RmFjdG9yeTtcbiAgdGhpcy5fc3BhY2VUb29sID0gc3BhY2VUb29sO1xuICB0aGlzLl9sYXNzb1Rvb2wgPSBsYXNzb1Rvb2w7XG4gIHRoaXMuX2hhbmRUb29sID0gaGFuZFRvb2w7XG4gIHRoaXMuX2dsb2JhbENvbm5lY3QgPSBnbG9iYWxDb25uZWN0O1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG5cbiAgcGFsZXR0ZS5yZWdpc3RlclByb3ZpZGVyKHRoaXMpO1xufVxuXG5QYWxldHRlUHJvdmlkZXIuJGluamVjdCA9IFtcbiAgJ3BhbGV0dGUnLFxuICAnY3JlYXRlJyxcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcbiAgJ3NwYWNlVG9vbCcsXG4gICdsYXNzb1Rvb2wnLFxuICAnaGFuZFRvb2wnLFxuICAnZ2xvYmFsQ29ubmVjdCcsXG4gICd0cmFuc2xhdGUnXG5dO1xuXG5cblBhbGV0dGVQcm92aWRlci5wcm90b3R5cGUuZ2V0UGFsZXR0ZUVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgdmFyIGFjdGlvbnMgPSB7fSxcbiAgICAgIGNyZWF0ZSA9IHRoaXMuX2NyZWF0ZSxcbiAgICAgIGVsZW1lbnRGYWN0b3J5ID0gdGhpcy5fZWxlbWVudEZhY3RvcnksXG4gICAgICBzcGFjZVRvb2wgPSB0aGlzLl9zcGFjZVRvb2wsXG4gICAgICBsYXNzb1Rvb2wgPSB0aGlzLl9sYXNzb1Rvb2wsXG4gICAgICBoYW5kVG9vbCA9IHRoaXMuX2hhbmRUb29sLFxuICAgICAgZ2xvYmFsQ29ubmVjdCA9IHRoaXMuX2dsb2JhbENvbm5lY3QsXG4gICAgICB0cmFuc2xhdGUgPSB0aGlzLl90cmFuc2xhdGU7XG5cbiAgZnVuY3Rpb24gY3JlYXRlQWN0aW9uKHR5cGUsIGdyb3VwLCBjbGFzc05hbWUsIHRpdGxlLCBvcHRpb25zKSB7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVMaXN0ZW5lcihldmVudCkge1xuICAgICAgdmFyIHNoYXBlID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoYXNzaWduKHsgdHlwZTogdHlwZSB9LCBvcHRpb25zKSk7XG5cbiAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIHNoYXBlLmJ1c2luZXNzT2JqZWN0LmRpLmlzRXhwYW5kZWQgPSBvcHRpb25zLmlzRXhwYW5kZWQ7XG4gICAgICB9XG5cbiAgICAgIGNyZWF0ZS5zdGFydChldmVudCwgc2hhcGUpO1xuICAgIH1cblxuICAgIHZhciBzaG9ydFR5cGUgPSB0eXBlLnJlcGxhY2UoL15icG1uOi8sICcnKTtcblxuICAgIHJldHVybiB7XG4gICAgICBncm91cDogZ3JvdXAsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgIHRpdGxlOiB0aXRsZSB8fCB0cmFuc2xhdGUoJ0NyZWF0ZSB7dHlwZX0nLCB7IHR5cGU6IHNob3J0VHlwZSB9KSxcbiAgICAgIGFjdGlvbjoge1xuICAgICAgICBkcmFnc3RhcnQ6IGNyZWF0ZUxpc3RlbmVyLFxuICAgICAgICBjbGljazogY3JlYXRlTGlzdGVuZXJcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3VicHJvY2VzcyhldmVudCkge1xuICAgIHZhciBzdWJQcm9jZXNzID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoe1xuICAgICAgdHlwZTogJ2JwbW46U3ViUHJvY2VzcycsXG4gICAgICB4OiAwLFxuICAgICAgeTogMCxcbiAgICAgIGlzRXhwYW5kZWQ6IHRydWVcbiAgICB9KTtcblxuICAgIHZhciBzdGFydEV2ZW50ID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoe1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICB4OiA0MCxcbiAgICAgIHk6IDgyLFxuICAgICAgcGFyZW50OiBzdWJQcm9jZXNzXG4gICAgfSk7XG5cbiAgICBjcmVhdGUuc3RhcnQoZXZlbnQsIFsgc3ViUHJvY2Vzcywgc3RhcnRFdmVudCBdLCB7XG4gICAgICBoaW50czoge1xuICAgICAgICBhdXRvU2VsZWN0OiBbIHN0YXJ0RXZlbnQgXVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUGFydGljaXBhbnQoZXZlbnQpIHtcbiAgICBjcmVhdGUuc3RhcnQoZXZlbnQsIGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVBhcnRpY2lwYW50U2hhcGUoKSk7XG4gIH1cblxuICBhc3NpZ24oYWN0aW9ucywge1xuICAgICdoYW5kLXRvb2wnOiB7XG4gICAgICBncm91cDogJ3Rvb2xzJyxcbiAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1oYW5kLXRvb2wnLFxuICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQWN0aXZhdGUgdGhlIGhhbmQgdG9vbCcpLFxuICAgICAgYWN0aW9uOiB7XG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgIGhhbmRUb29sLmFjdGl2YXRlSGFuZChldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgICdsYXNzby10b29sJzoge1xuICAgICAgZ3JvdXA6ICd0b29scycsXG4gICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbGFzc28tdG9vbCcsXG4gICAgICB0aXRsZTogdHJhbnNsYXRlKCdBY3RpdmF0ZSB0aGUgbGFzc28gdG9vbCcpLFxuICAgICAgYWN0aW9uOiB7XG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgIGxhc3NvVG9vbC5hY3RpdmF0ZVNlbGVjdGlvbihldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgICdzcGFjZS10b29sJzoge1xuICAgICAgZ3JvdXA6ICd0b29scycsXG4gICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3BhY2UtdG9vbCcsXG4gICAgICB0aXRsZTogdHJhbnNsYXRlKCdBY3RpdmF0ZSB0aGUgY3JlYXRlL3JlbW92ZSBzcGFjZSB0b29sJyksXG4gICAgICBhY3Rpb246IHtcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgc3BhY2VUb29sLmFjdGl2YXRlU2VsZWN0aW9uKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgJ2dsb2JhbC1jb25uZWN0LXRvb2wnOiB7XG4gICAgICBncm91cDogJ3Rvb2xzJyxcbiAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1jb25uZWN0aW9uLW11bHRpJyxcbiAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0FjdGl2YXRlIHRoZSBnbG9iYWwgY29ubmVjdCB0b29sJyksXG4gICAgICBhY3Rpb246IHtcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgZ2xvYmFsQ29ubmVjdC50b2dnbGUoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICAndG9vbC1zZXBhcmF0b3InOiB7XG4gICAgICBncm91cDogJ3Rvb2xzJyxcbiAgICAgIHNlcGFyYXRvcjogdHJ1ZVxuICAgIH0sXG4gICAgJ2NyZWF0ZS5zdGFydC1ldmVudCc6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdicG1uOlN0YXJ0RXZlbnQnLCAnZXZlbnQnLCAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW5vbmUnLFxuICAgICAgdHJhbnNsYXRlKCdDcmVhdGUgU3RhcnRFdmVudCcpXG4gICAgKSxcbiAgICAnY3JlYXRlLmludGVybWVkaWF0ZS1ldmVudCc6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLCAnZXZlbnQnLCAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1ub25lJyxcbiAgICAgIHRyYW5zbGF0ZSgnQ3JlYXRlIEludGVybWVkaWF0ZS9Cb3VuZGFyeSBFdmVudCcpXG4gICAgKSxcbiAgICAnY3JlYXRlLmVuZC1ldmVudCc6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdicG1uOkVuZEV2ZW50JywgJ2V2ZW50JywgJ2JwbW4taWNvbi1lbmQtZXZlbnQtbm9uZScsXG4gICAgICB0cmFuc2xhdGUoJ0NyZWF0ZSBFbmRFdmVudCcpXG4gICAgKSxcbiAgICAnY3JlYXRlLmV4Y2x1c2l2ZS1nYXRld2F5JzogY3JlYXRlQWN0aW9uKFxuICAgICAgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheScsICdnYXRld2F5JywgJ2JwbW4taWNvbi1nYXRld2F5LW5vbmUnLFxuICAgICAgdHJhbnNsYXRlKCdDcmVhdGUgR2F0ZXdheScpXG4gICAgKSxcbiAgICAnY3JlYXRlLnRhc2snOiBjcmVhdGVBY3Rpb24oXG4gICAgICAnYnBtbjpUYXNrJywgJ2FjdGl2aXR5JywgJ2JwbW4taWNvbi10YXNrJyxcbiAgICAgIHRyYW5zbGF0ZSgnQ3JlYXRlIFRhc2snKVxuICAgICksXG4gICAgJ2NyZWF0ZS5kYXRhLW9iamVjdCc6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdicG1uOkRhdGFPYmplY3RSZWZlcmVuY2UnLCAnZGF0YS1vYmplY3QnLCAnYnBtbi1pY29uLWRhdGEtb2JqZWN0JyxcbiAgICAgIHRyYW5zbGF0ZSgnQ3JlYXRlIERhdGFPYmplY3RSZWZlcmVuY2UnKVxuICAgICksXG4gICAgJ2NyZWF0ZS5kYXRhLXN0b3JlJzogY3JlYXRlQWN0aW9uKFxuICAgICAgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJywgJ2RhdGEtc3RvcmUnLCAnYnBtbi1pY29uLWRhdGEtc3RvcmUnLFxuICAgICAgdHJhbnNsYXRlKCdDcmVhdGUgRGF0YVN0b3JlUmVmZXJlbmNlJylcbiAgICApLFxuICAgICdjcmVhdGUuc3VicHJvY2Vzcy1leHBhbmRlZCc6IHtcbiAgICAgIGdyb3VwOiAnYWN0aXZpdHknLFxuICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN1YnByb2Nlc3MtZXhwYW5kZWQnLFxuICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQ3JlYXRlIGV4cGFuZGVkIFN1YlByb2Nlc3MnKSxcbiAgICAgIGFjdGlvbjoge1xuICAgICAgICBkcmFnc3RhcnQ6IGNyZWF0ZVN1YnByb2Nlc3MsXG4gICAgICAgIGNsaWNrOiBjcmVhdGVTdWJwcm9jZXNzXG4gICAgICB9XG4gICAgfSxcbiAgICAnY3JlYXRlLnBhcnRpY2lwYW50LWV4cGFuZGVkJzoge1xuICAgICAgZ3JvdXA6ICdjb2xsYWJvcmF0aW9uJyxcbiAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1wYXJ0aWNpcGFudCcsXG4gICAgICB0aXRsZTogdHJhbnNsYXRlKCdDcmVhdGUgUG9vbC9QYXJ0aWNpcGFudCcpLFxuICAgICAgYWN0aW9uOiB7XG4gICAgICAgIGRyYWdzdGFydDogY3JlYXRlUGFydGljaXBhbnQsXG4gICAgICAgIGNsaWNrOiBjcmVhdGVQYXJ0aWNpcGFudFxuICAgICAgfVxuICAgIH0sXG4gICAgJ2NyZWF0ZS5ncm91cCc6IGNyZWF0ZUFjdGlvbihcbiAgICAgICdicG1uOkdyb3VwJywgJ2FydGlmYWN0JywgJ2JwbW4taWNvbi1ncm91cCcsXG4gICAgICB0cmFuc2xhdGUoJ0NyZWF0ZSBHcm91cCcpXG4gICAgKSxcbiAgfSk7XG5cbiAgcmV0dXJuIGFjdGlvbnM7XG59O1xuIiwiaW1wb3J0IFBhbGV0dGVNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcGFsZXR0ZSc7XG5pbXBvcnQgQ3JlYXRlTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NyZWF0ZSc7XG5pbXBvcnQgU3BhY2VUb29sTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NwYWNlLXRvb2wnO1xuaW1wb3J0IExhc3NvVG9vbE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9sYXNzby10b29sJztcbmltcG9ydCBIYW5kVG9vbE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9oYW5kLXRvb2wnO1xuaW1wb3J0IEdsb2JhbENvbm5lY3RNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZ2xvYmFsLWNvbm5lY3QnO1xuaW1wb3J0IHRyYW5zbGF0ZSBmcm9tICdkaWFncmFtLWpzL2xpYi9pMThuL3RyYW5zbGF0ZSc7XG5cbmltcG9ydCBQYWxldHRlUHJvdmlkZXIgZnJvbSAnLi9QYWxldHRlUHJvdmlkZXInO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgUGFsZXR0ZU1vZHVsZSxcbiAgICBDcmVhdGVNb2R1bGUsXG4gICAgU3BhY2VUb29sTW9kdWxlLFxuICAgIExhc3NvVG9vbE1vZHVsZSxcbiAgICBIYW5kVG9vbE1vZHVsZSxcbiAgICBHbG9iYWxDb25uZWN0TW9kdWxlLFxuICAgIHRyYW5zbGF0ZVxuICBdLFxuICBfX2luaXRfXzogWyAncGFsZXR0ZVByb3ZpZGVyJyBdLFxuICBwYWxldHRlUHJvdmlkZXI6IFsgJ3R5cGUnLCBQYWxldHRlUHJvdmlkZXIgXVxufTtcbiIsImltcG9ydCB7XG4gIGdldEJ1c2luZXNzT2JqZWN0LFxuICBpc1xufSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzRXZlbnRTdWJQcm9jZXNzLFxuICBpc0V4cGFuZGVkXG59IGZyb20gJy4uLy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNEaWZmZXJlbnRUeXBlXG59IGZyb20gJy4vdXRpbC9UeXBlVXRpbCc7XG5cbmltcG9ydCB7XG4gIGZvckVhY2gsXG4gIGZpbHRlclxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCAqIGFzIHJlcGxhY2VPcHRpb25zIGZyb20gJy4uL3JlcGxhY2UvUmVwbGFjZU9wdGlvbnMnO1xuXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgaXMgYW4gZWxlbWVudCBhZ25vc3RpYyByZXBsYWNlIG1lbnUgcHJvdmlkZXIgZm9yIHRoZSBwb3B1cCBtZW51LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXBsYWNlTWVudVByb3ZpZGVyKFxuICAgIHBvcHVwTWVudSwgbW9kZWxpbmcsIG1vZGRsZSxcbiAgICBicG1uUmVwbGFjZSwgcnVsZXMsIHRyYW5zbGF0ZSkge1xuXG4gIHRoaXMuX3BvcHVwTWVudSA9IHBvcHVwTWVudTtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbiAgdGhpcy5fbW9kZGxlID0gbW9kZGxlO1xuICB0aGlzLl9icG1uUmVwbGFjZSA9IGJwbW5SZXBsYWNlO1xuICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG5cbiAgdGhpcy5yZWdpc3RlcigpO1xufVxuXG5SZXBsYWNlTWVudVByb3ZpZGVyLiRpbmplY3QgPSBbXG4gICdwb3B1cE1lbnUnLFxuICAnbW9kZWxpbmcnLFxuICAnbW9kZGxlJyxcbiAgJ2JwbW5SZXBsYWNlJyxcbiAgJ3J1bGVzJyxcbiAgJ3RyYW5zbGF0ZSdcbl07XG5cblxuLyoqXG4gKiBSZWdpc3RlciByZXBsYWNlIG1lbnUgcHJvdmlkZXIgaW4gdGhlIHBvcHVwIG1lbnVcbiAqL1xuUmVwbGFjZU1lbnVQcm92aWRlci5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcG9wdXBNZW51LnJlZ2lzdGVyUHJvdmlkZXIoJ2JwbW4tcmVwbGFjZScsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIEdldCBhbGwgZW50cmllcyBmcm9tIHJlcGxhY2VPcHRpb25zIGZvciB0aGUgZ2l2ZW4gZWxlbWVudCBhbmQgYXBwbHkgZmlsdGVyc1xuICogb24gdGhlbS4gR2V0IGZvciBleGFtcGxlIG9ubHkgZWxlbWVudHMsIHdoaWNoIGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBvbmUuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge0FycmF5PE9iamVjdD59IGEgbGlzdCBvZiBtZW51IGVudHJ5IGl0ZW1zXG4gKi9cblJlcGxhY2VNZW51UHJvdmlkZXIucHJvdG90eXBlLmdldEVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZWxlbWVudC5idXNpbmVzc09iamVjdDtcblxuICB2YXIgcnVsZXMgPSB0aGlzLl9ydWxlcztcblxuICB2YXIgZW50cmllcztcblxuICBpZiAoIXJ1bGVzLmFsbG93ZWQoJ3NoYXBlLnJlcGxhY2UnLCB7IGVsZW1lbnQ6IGVsZW1lbnQgfSkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgZGlmZmVyZW50VHlwZSA9IGlzRGlmZmVyZW50VHlwZShlbGVtZW50KTtcblxuICAvLyBzdGFydCBldmVudHMgb3V0c2lkZSBzdWIgcHJvY2Vzc2VzXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46U3RhcnRFdmVudCcpICYmICFpcyhidXNpbmVzc09iamVjdC4kcGFyZW50LCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuU1RBUlRfRVZFTlQsIGRpZmZlcmVudFR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBleHBhbmRlZC9jb2xsYXBzZWQgcG9vbHNcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG5cbiAgICBlbnRyaWVzID0gZmlsdGVyKHJlcGxhY2VPcHRpb25zLlBBUlRJQ0lQQU5ULCBmdW5jdGlvbihlbnRyeSkge1xuICAgICAgcmV0dXJuIGlzRXhwYW5kZWQoYnVzaW5lc3NPYmplY3QpICE9PSBlbnRyeS50YXJnZXQuaXNFeHBhbmRlZDtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbnRyaWVzKGVsZW1lbnQsIGVudHJpZXMpO1xuICB9XG5cbiAgLy8gc3RhcnQgZXZlbnRzIGluc2lkZSBldmVudCBzdWIgcHJvY2Vzc2VzXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46U3RhcnRFdmVudCcpICYmIGlzRXZlbnRTdWJQcm9jZXNzKGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQpKSB7XG4gICAgZW50cmllcyA9IGZpbHRlcihyZXBsYWNlT3B0aW9ucy5FVkVOVF9TVUJfUFJPQ0VTU19TVEFSVF9FVkVOVCwgZnVuY3Rpb24oZW50cnkpIHtcblxuICAgICAgdmFyIHRhcmdldCA9IGVudHJ5LnRhcmdldDtcblxuICAgICAgdmFyIGlzSW50ZXJydXB0aW5nID0gdGFyZ2V0LmlzSW50ZXJydXB0aW5nICE9PSBmYWxzZTtcblxuICAgICAgdmFyIGlzSW50ZXJydXB0aW5nRXF1YWwgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5pc0ludGVycnVwdGluZyA9PT0gaXNJbnRlcnJ1cHRpbmc7XG5cbiAgICAgIC8vIGZpbHRlcnMgZWxlbWVudHMgd2hpY2ggdHlwZXMgYW5kIGV2ZW50IGRlZmluaXRpb24gYXJlIGVxdWFsIGJ1dCBoYXZlIGhhdmUgZGlmZmVyZW50IGludGVycnVwdGluZyB0eXBlc1xuICAgICAgcmV0dXJuIGRpZmZlcmVudFR5cGUoZW50cnkpIHx8ICFkaWZmZXJlbnRUeXBlKGVudHJ5KSAmJiAhaXNJbnRlcnJ1cHRpbmdFcXVhbDtcblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBzdGFydCBldmVudHMgaW5zaWRlIHN1YiBwcm9jZXNzZXNcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpTdGFydEV2ZW50JykgJiYgIWlzRXZlbnRTdWJQcm9jZXNzKGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQpXG4gICAgICAmJiBpcyhidXNpbmVzc09iamVjdC4kcGFyZW50LCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcbiAgICBlbnRyaWVzID0gZmlsdGVyKHJlcGxhY2VPcHRpb25zLlNUQVJUX0VWRU5UX1NVQl9QUk9DRVNTLCBkaWZmZXJlbnRUeXBlKTtcblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbnRyaWVzKGVsZW1lbnQsIGVudHJpZXMpO1xuICB9XG5cbiAgLy8gZW5kIGV2ZW50c1xuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkVuZEV2ZW50JykpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuRU5EX0VWRU5ULCBmdW5jdGlvbihlbnRyeSkge1xuICAgICAgdmFyIHRhcmdldCA9IGVudHJ5LnRhcmdldDtcblxuICAgICAgLy8gaGlkZSBjYW5jZWwgZW5kIGV2ZW50cyBvdXRzaWRlIHRyYW5zYWN0aW9uc1xuICAgICAgaWYgKHRhcmdldC5ldmVudERlZmluaXRpb25UeXBlID09ICdicG1uOkNhbmNlbEV2ZW50RGVmaW5pdGlvbicgJiYgIWlzKGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQsICdicG1uOlRyYW5zYWN0aW9uJykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGlmZmVyZW50VHlwZShlbnRyeSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW50cmllcyhlbGVtZW50LCBlbnRyaWVzKTtcbiAgfVxuXG4gIC8vIGJvdW5kYXJ5IGV2ZW50c1xuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSkge1xuXG4gICAgZW50cmllcyA9IGZpbHRlcihyZXBsYWNlT3B0aW9ucy5CT1VOREFSWV9FVkVOVCwgZnVuY3Rpb24oZW50cnkpIHtcblxuICAgICAgdmFyIHRhcmdldCA9IGVudHJ5LnRhcmdldDtcblxuICAgICAgaWYgKHRhcmdldC5ldmVudERlZmluaXRpb24gPT0gJ2JwbW46Q2FuY2VsRXZlbnREZWZpbml0aW9uJyAmJlxuICAgICAgICAgIWlzKGJ1c2luZXNzT2JqZWN0LmF0dGFjaGVkVG9SZWYsICdicG1uOlRyYW5zYWN0aW9uJykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIGNhbmNlbEFjdGl2aXR5ID0gdGFyZ2V0LmNhbmNlbEFjdGl2aXR5ICE9PSBmYWxzZTtcblxuICAgICAgdmFyIGlzQ2FuY2VsQWN0aXZpdHlFcXVhbCA9IGJ1c2luZXNzT2JqZWN0LmNhbmNlbEFjdGl2aXR5ID09IGNhbmNlbEFjdGl2aXR5O1xuXG4gICAgICByZXR1cm4gZGlmZmVyZW50VHlwZShlbnRyeSkgfHwgIWRpZmZlcmVudFR5cGUoZW50cnkpICYmICFpc0NhbmNlbEFjdGl2aXR5RXF1YWw7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW50cmllcyhlbGVtZW50LCBlbnRyaWVzKTtcbiAgfVxuXG4gIC8vIGludGVybWVkaWF0ZSBldmVudHNcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JykgfHxcbiAgICAgIGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JykpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuSU5URVJNRURJQVRFX0VWRU5ULCBkaWZmZXJlbnRUeXBlKTtcblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbnRyaWVzKGVsZW1lbnQsIGVudHJpZXMpO1xuICB9XG5cbiAgLy8gZ2F0ZXdheXNcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpHYXRld2F5JykpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuR0FURVdBWSwgZGlmZmVyZW50VHlwZSk7XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW50cmllcyhlbGVtZW50LCBlbnRyaWVzKTtcbiAgfVxuXG4gIC8vIHRyYW5zYWN0aW9uc1xuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOlRyYW5zYWN0aW9uJykpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuVFJBTlNBQ1RJT04sIGRpZmZlcmVudFR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBleHBhbmRlZCBldmVudCBzdWIgcHJvY2Vzc2VzXG4gIGlmIChpc0V2ZW50U3ViUHJvY2VzcyhidXNpbmVzc09iamVjdCkgJiYgaXNFeHBhbmRlZChidXNpbmVzc09iamVjdCkpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuRVZFTlRfU1VCX1BST0NFU1MsIGRpZmZlcmVudFR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBleHBhbmRlZCBzdWIgcHJvY2Vzc2VzXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46U3ViUHJvY2VzcycpICYmIGlzRXhwYW5kZWQoYnVzaW5lc3NPYmplY3QpKSB7XG5cbiAgICBlbnRyaWVzID0gZmlsdGVyKHJlcGxhY2VPcHRpb25zLlNVQlBST0NFU1NfRVhQQU5ERUQsIGRpZmZlcmVudFR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBjb2xsYXBzZWQgYWQgaG9jIHN1YiBwcm9jZXNzZXNcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpBZEhvY1N1YlByb2Nlc3MnKSAmJiAhaXNFeHBhbmRlZChidXNpbmVzc09iamVjdCkpIHtcblxuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuVEFTSywgZnVuY3Rpb24oZW50cnkpIHtcblxuICAgICAgdmFyIHRhcmdldCA9IGVudHJ5LnRhcmdldDtcblxuICAgICAgdmFyIGlzVGFyZ2V0U3ViUHJvY2VzcyA9IHRhcmdldC50eXBlID09PSAnYnBtbjpTdWJQcm9jZXNzJztcblxuICAgICAgdmFyIGlzVGFyZ2V0RXhwYW5kZWQgPSB0YXJnZXQuaXNFeHBhbmRlZCA9PT0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIGlzRGlmZmVyZW50VHlwZShlbGVtZW50LCB0YXJnZXQpICYmICghaXNUYXJnZXRTdWJQcm9jZXNzIHx8IGlzVGFyZ2V0RXhwYW5kZWQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVudHJpZXMoZWxlbWVudCwgZW50cmllcyk7XG4gIH1cblxuICAvLyBzZXF1ZW5jZSBmbG93c1xuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOlNlcXVlbmNlRmxvdycpKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVNlcXVlbmNlRmxvd0VudHJpZXMoZWxlbWVudCwgcmVwbGFjZU9wdGlvbnMuU0VRVUVOQ0VfRkxPVyk7XG4gIH1cblxuICAvLyBmbG93IG5vZGVzXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46Rmxvd05vZGUnKSkge1xuICAgIGVudHJpZXMgPSBmaWx0ZXIocmVwbGFjZU9wdGlvbnMuVEFTSywgZGlmZmVyZW50VHlwZSk7XG5cbiAgICAvLyBjb2xsYXBzZWQgU3ViUHJvY2VzcyBjYW4gbm90IGJlIHJlcGxhY2VkIHdpdGggaXRzZWxmXG4gICAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgIWlzRXhwYW5kZWQoYnVzaW5lc3NPYmplY3QpKSB7XG4gICAgICBlbnRyaWVzID0gZmlsdGVyKGVudHJpZXMsIGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiBlbnRyeS5sYWJlbCAhPT0gJ1N1YiBQcm9jZXNzIChjb2xsYXBzZWQpJztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbnRyaWVzKGVsZW1lbnQsIGVudHJpZXMpO1xuICB9XG5cbiAgcmV0dXJuIFtdO1xufTtcblxuXG4vKipcbiAqIEdldCBhIGxpc3Qgb2YgaGVhZGVyIGl0ZW1zIGZvciB0aGUgZ2l2ZW4gZWxlbWVudC4gVGhpcyBpbmNsdWRlcyBidXR0b25zXG4gKiBmb3IgbXVsdGkgaW5zdGFuY2UgbWFya2VycyBhbmQgZm9yIHRoZSBhZCBob2MgbWFya2VyLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxPYmplY3Q+fSBhIGxpc3Qgb2YgbWVudSBlbnRyeSBpdGVtc1xuICovXG5SZXBsYWNlTWVudVByb3ZpZGVyLnByb3RvdHlwZS5nZXRIZWFkZXJFbnRyaWVzID0gZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gIHZhciBoZWFkZXJFbnRyaWVzID0gW107XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkFjdGl2aXR5JykgJiYgIWlzRXZlbnRTdWJQcm9jZXNzKGVsZW1lbnQpKSB7XG4gICAgaGVhZGVyRW50cmllcyA9IGhlYWRlckVudHJpZXMuY29uY2F0KHRoaXMuX2dldExvb3BFbnRyaWVzKGVsZW1lbnQpKTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgJiZcbiAgICAgICFpcyhlbGVtZW50LCAnYnBtbjpUcmFuc2FjdGlvbicpICYmXG4gICAgICAhaXNFdmVudFN1YlByb2Nlc3MoZWxlbWVudCkpIHtcbiAgICBoZWFkZXJFbnRyaWVzLnB1c2godGhpcy5fZ2V0QWRIb2NFbnRyeShlbGVtZW50KSk7XG4gIH1cblxuICByZXR1cm4gaGVhZGVyRW50cmllcztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG1lbnUgZW50cnkgb2JqZWN0cyBmb3IgYSBnaXZlbiBlbGVtZW50IGFuZCBmaWx0ZXJzIHRoZSByZXBsYWNlT3B0aW9uc1xuICogYWNjb3JkaW5nIHRvIGEgZmlsdGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0gIHtPYmplY3R9IHJlcGxhY2VPcHRpb25zXG4gKlxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gYSBsaXN0IG9mIG1lbnUgaXRlbXNcbiAqL1xuUmVwbGFjZU1lbnVQcm92aWRlci5wcm90b3R5cGUuX2NyZWF0ZUVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50LCByZXBsYWNlT3B0aW9ucykge1xuICB2YXIgbWVudUVudHJpZXMgPSBbXTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZm9yRWFjaChyZXBsYWNlT3B0aW9ucywgZnVuY3Rpb24oZGVmaW5pdGlvbikge1xuICAgIHZhciBlbnRyeSA9IHNlbGYuX2NyZWF0ZU1lbnVFbnRyeShkZWZpbml0aW9uLCBlbGVtZW50KTtcblxuICAgIG1lbnVFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9KTtcblxuICByZXR1cm4gbWVudUVudHJpZXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgbWVudSBlbnRyeSBvYmplY3RzIGZvciBhIGdpdmVuIHNlcXVlbmNlIGZsb3cuXG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSAge09iamVjdH0gcmVwbGFjZU9wdGlvbnNcblxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gYSBsaXN0IG9mIG1lbnUgaXRlbXNcbiAqL1xuUmVwbGFjZU1lbnVQcm92aWRlci5wcm90b3R5cGUuX2NyZWF0ZVNlcXVlbmNlRmxvd0VudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50LCByZXBsYWNlT3B0aW9ucykge1xuXG4gIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIHZhciBtZW51RW50cmllcyA9IFtdO1xuXG4gIHZhciBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nLFxuICAgICAgbW9kZGxlID0gdGhpcy5fbW9kZGxlO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBmb3JFYWNoKHJlcGxhY2VPcHRpb25zLCBmdW5jdGlvbihlbnRyeSkge1xuXG4gICAgc3dpdGNoIChlbnRyeS5hY3Rpb25OYW1lKSB7XG4gICAgY2FzZSAncmVwbGFjZS13aXRoLWRlZmF1bHQtZmxvdyc6XG4gICAgICBpZiAoYnVzaW5lc3NPYmplY3Quc291cmNlUmVmLmRlZmF1bHQgIT09IGJ1c2luZXNzT2JqZWN0ICYmXG4gICAgICAgICAgICAoaXMoYnVzaW5lc3NPYmplY3Quc291cmNlUmVmLCAnYnBtbjpFeGNsdXNpdmVHYXRld2F5JykgfHxcbiAgICAgICAgICAgICBpcyhidXNpbmVzc09iamVjdC5zb3VyY2VSZWYsICdicG1uOkluY2x1c2l2ZUdhdGV3YXknKSB8fFxuICAgICAgICAgICAgIGlzKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiwgJ2JwbW46Q29tcGxleEdhdGV3YXknKSB8fFxuICAgICAgICAgICAgIGlzKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiwgJ2JwbW46QWN0aXZpdHknKSkpIHtcblxuICAgICAgICBtZW51RW50cmllcy5wdXNoKHNlbGYuX2NyZWF0ZU1lbnVFbnRyeShlbnRyeSwgZWxlbWVudCwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LnNvdXJjZSwgeyBkZWZhdWx0OiBidXNpbmVzc09iamVjdCB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncmVwbGFjZS13aXRoLWNvbmRpdGlvbmFsLWZsb3cnOlxuICAgICAgaWYgKCFidXNpbmVzc09iamVjdC5jb25kaXRpb25FeHByZXNzaW9uICYmIGlzKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiwgJ2JwbW46QWN0aXZpdHknKSkge1xuXG4gICAgICAgIG1lbnVFbnRyaWVzLnB1c2goc2VsZi5fY3JlYXRlTWVudUVudHJ5KGVudHJ5LCBlbGVtZW50LCBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgY29uZGl0aW9uRXhwcmVzc2lvbiA9IG1vZGRsZS5jcmVhdGUoJ2JwbW46Rm9ybWFsRXhwcmVzc2lvbicsIHsgYm9keTogJycgfSk7XG5cbiAgICAgICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHsgY29uZGl0aW9uRXhwcmVzc2lvbjogY29uZGl0aW9uRXhwcmVzc2lvbiB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcblxuICAgICAgLy8gZGVmYXVsdCBmbG93c1xuICAgICAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiwgJ2JwbW46QWN0aXZpdHknKSAmJiBidXNpbmVzc09iamVjdC5jb25kaXRpb25FeHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiBtZW51RW50cmllcy5wdXNoKHNlbGYuX2NyZWF0ZU1lbnVFbnRyeShlbnRyeSwgZWxlbWVudCwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7IGNvbmRpdGlvbkV4cHJlc3Npb246IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBjb25kaXRpb25hbCBmbG93c1xuICAgICAgaWYgKChpcyhidXNpbmVzc09iamVjdC5zb3VyY2VSZWYsICdicG1uOkV4Y2x1c2l2ZUdhdGV3YXknKSB8fFxuICAgICAgICAgICBpcyhidXNpbmVzc09iamVjdC5zb3VyY2VSZWYsICdicG1uOkluY2x1c2l2ZUdhdGV3YXknKSB8fFxuICAgICAgICAgICBpcyhidXNpbmVzc09iamVjdC5zb3VyY2VSZWYsICdicG1uOkNvbXBsZXhHYXRld2F5JykgfHxcbiAgICAgICAgICAgaXMoYnVzaW5lc3NPYmplY3Quc291cmNlUmVmLCAnYnBtbjpBY3Rpdml0eScpKSAmJlxuICAgICAgICAgICBidXNpbmVzc09iamVjdC5zb3VyY2VSZWYuZGVmYXVsdCA9PT0gYnVzaW5lc3NPYmplY3QpIHtcblxuICAgICAgICByZXR1cm4gbWVudUVudHJpZXMucHVzaChzZWxmLl9jcmVhdGVNZW51RW50cnkoZW50cnksIGVsZW1lbnQsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudC5zb3VyY2UsIHsgZGVmYXVsdDogdW5kZWZpbmVkIH0pO1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbWVudUVudHJpZXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhIHNpbmdsZSBtZW51IGVudHJ5IGl0ZW0uXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBkZWZpbml0aW9uIGEgc2luZ2xlIHJlcGxhY2Ugb3B0aW9ucyBkZWZpbml0aW9uIG9iamVjdFxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbYWN0aW9uXSBhbiBhY3Rpb24gY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggZ2V0cyBjYWxsZWQgd2hlblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtZW51IGVudHJ5IGlzIGJlaW5nIHRyaWdnZXJlZC5cbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IG1lbnUgZW50cnkgaXRlbVxuICovXG5SZXBsYWNlTWVudVByb3ZpZGVyLnByb3RvdHlwZS5fY3JlYXRlTWVudUVudHJ5ID0gZnVuY3Rpb24oZGVmaW5pdGlvbiwgZWxlbWVudCwgYWN0aW9uKSB7XG4gIHZhciB0cmFuc2xhdGUgPSB0aGlzLl90cmFuc2xhdGU7XG4gIHZhciByZXBsYWNlRWxlbWVudCA9IHRoaXMuX2JwbW5SZXBsYWNlLnJlcGxhY2VFbGVtZW50O1xuXG4gIHZhciByZXBsYWNlQWN0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHJlcGxhY2VFbGVtZW50KGVsZW1lbnQsIGRlZmluaXRpb24udGFyZ2V0KTtcbiAgfTtcblxuICBhY3Rpb24gPSBhY3Rpb24gfHwgcmVwbGFjZUFjdGlvbjtcblxuICB2YXIgbWVudUVudHJ5ID0ge1xuICAgIGxhYmVsOiB0cmFuc2xhdGUoZGVmaW5pdGlvbi5sYWJlbCksXG4gICAgY2xhc3NOYW1lOiBkZWZpbml0aW9uLmNsYXNzTmFtZSxcbiAgICBpZDogZGVmaW5pdGlvbi5hY3Rpb25OYW1lLFxuICAgIGFjdGlvbjogYWN0aW9uXG4gIH07XG5cbiAgcmV0dXJuIG1lbnVFbnRyeTtcbn07XG5cbi8qKlxuICogR2V0IGEgbGlzdCBvZiBtZW51IGl0ZW1zIGNvbnRhaW5pbmcgYnV0dG9ucyBmb3IgbXVsdGkgaW5zdGFuY2UgbWFya2Vyc1xuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gYSBsaXN0IG9mIG1lbnUgaXRlbXNcbiAqL1xuUmVwbGFjZU1lbnVQcm92aWRlci5wcm90b3R5cGUuX2dldExvb3BFbnRyaWVzID0gZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcblxuICBmdW5jdGlvbiB0b2dnbGVMb29wRW50cnkoZXZlbnQsIGVudHJ5KSB7XG4gICAgdmFyIGxvb3BDaGFyYWN0ZXJpc3RpY3M7XG5cbiAgICBpZiAoZW50cnkuYWN0aXZlKSB7XG4gICAgICBsb29wQ2hhcmFjdGVyaXN0aWNzID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb29wQ2hhcmFjdGVyaXN0aWNzID0gc2VsZi5fbW9kZGxlLmNyZWF0ZShlbnRyeS5vcHRpb25zLmxvb3BDaGFyYWN0ZXJpc3RpY3MpO1xuXG4gICAgICBpZiAoZW50cnkub3B0aW9ucy5pc1NlcXVlbnRpYWwpIHtcbiAgICAgICAgbG9vcENoYXJhY3RlcmlzdGljcy5pc1NlcXVlbnRpYWwgPSBlbnRyeS5vcHRpb25zLmlzU2VxdWVudGlhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgc2VsZi5fbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7IGxvb3BDaGFyYWN0ZXJpc3RpY3M6IGxvb3BDaGFyYWN0ZXJpc3RpY3MgfSk7XG4gIH1cblxuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICAgIGxvb3BDaGFyYWN0ZXJpc3RpY3MgPSBidXNpbmVzc09iamVjdC5sb29wQ2hhcmFjdGVyaXN0aWNzO1xuXG4gIHZhciBpc1NlcXVlbnRpYWwsXG4gICAgICBpc0xvb3AsXG4gICAgICBpc1BhcmFsbGVsO1xuXG4gIGlmIChsb29wQ2hhcmFjdGVyaXN0aWNzKSB7XG4gICAgaXNTZXF1ZW50aWFsID0gbG9vcENoYXJhY3RlcmlzdGljcy5pc1NlcXVlbnRpYWw7XG4gICAgaXNMb29wID0gbG9vcENoYXJhY3RlcmlzdGljcy5pc1NlcXVlbnRpYWwgPT09IHVuZGVmaW5lZDtcbiAgICBpc1BhcmFsbGVsID0gbG9vcENoYXJhY3RlcmlzdGljcy5pc1NlcXVlbnRpYWwgIT09IHVuZGVmaW5lZCAmJiAhbG9vcENoYXJhY3RlcmlzdGljcy5pc1NlcXVlbnRpYWw7XG4gIH1cblxuXG4gIHZhciBsb29wRW50cmllcyA9IFtcbiAgICB7XG4gICAgICBpZDogJ3RvZ2dsZS1wYXJhbGxlbC1taScsXG4gICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tcGFyYWxsZWwtbWktbWFya2VyJyxcbiAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ1BhcmFsbGVsIE11bHRpIEluc3RhbmNlJyksXG4gICAgICBhY3RpdmU6IGlzUGFyYWxsZWwsXG4gICAgICBhY3Rpb246IHRvZ2dsZUxvb3BFbnRyeSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgbG9vcENoYXJhY3RlcmlzdGljczogJ2JwbW46TXVsdGlJbnN0YW5jZUxvb3BDaGFyYWN0ZXJpc3RpY3MnLFxuICAgICAgICBpc1NlcXVlbnRpYWw6IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ3RvZ2dsZS1zZXF1ZW50aWFsLW1pJyxcbiAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zZXF1ZW50aWFsLW1pLW1hcmtlcicsXG4gICAgICB0aXRsZTogdHJhbnNsYXRlKCdTZXF1ZW50aWFsIE11bHRpIEluc3RhbmNlJyksXG4gICAgICBhY3RpdmU6IGlzU2VxdWVudGlhbCxcbiAgICAgIGFjdGlvbjogdG9nZ2xlTG9vcEVudHJ5LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBsb29wQ2hhcmFjdGVyaXN0aWNzOiAnYnBtbjpNdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcycsXG4gICAgICAgIGlzU2VxdWVudGlhbDogdHJ1ZVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICd0b2dnbGUtbG9vcCcsXG4gICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbG9vcC1tYXJrZXInLFxuICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnTG9vcCcpLFxuICAgICAgYWN0aXZlOiBpc0xvb3AsXG4gICAgICBhY3Rpb246IHRvZ2dsZUxvb3BFbnRyeSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgbG9vcENoYXJhY3RlcmlzdGljczogJ2JwbW46U3RhbmRhcmRMb29wQ2hhcmFjdGVyaXN0aWNzJ1xuICAgICAgfVxuICAgIH1cbiAgXTtcbiAgcmV0dXJuIGxvb3BFbnRyaWVzO1xufTtcblxuXG4vKipcbiAqIEdldCB0aGUgbWVudSBpdGVtcyBjb250YWluaW5nIGEgYnV0dG9uIGZvciB0aGUgYWQgaG9jIG1hcmtlclxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBhIG1lbnUgaXRlbVxuICovXG5SZXBsYWNlTWVudVByb3ZpZGVyLnByb3RvdHlwZS5fZ2V0QWRIb2NFbnRyeSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgdmFyIGlzQWRIb2MgPSBpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46QWRIb2NTdWJQcm9jZXNzJyk7XG5cbiAgdmFyIHJlcGxhY2VFbGVtZW50ID0gdGhpcy5fYnBtblJlcGxhY2UucmVwbGFjZUVsZW1lbnQ7XG5cbiAgdmFyIGFkSG9jRW50cnkgPSB7XG4gICAgaWQ6ICd0b2dnbGUtYWRob2MnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1hZC1ob2MtbWFya2VyJyxcbiAgICB0aXRsZTogdHJhbnNsYXRlKCdBZC1ob2MnKSxcbiAgICBhY3RpdmU6IGlzQWRIb2MsXG4gICAgYWN0aW9uOiBmdW5jdGlvbihldmVudCwgZW50cnkpIHtcbiAgICAgIGlmIChpc0FkSG9jKSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlRWxlbWVudChlbGVtZW50LCB7IHR5cGU6ICdicG1uOlN1YlByb2Nlc3MnIH0sIHtcbiAgICAgICAgICBhdXRvUmVzaXplOiBmYWxzZSxcbiAgICAgICAgICBsYXlvdXRDb25uZWN0aW9uOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlRWxlbWVudChlbGVtZW50LCB7IHR5cGU6ICdicG1uOkFkSG9jU3ViUHJvY2VzcycgfSwge1xuICAgICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICAgIGxheW91dENvbm5lY3Rpb246IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gYWRIb2NFbnRyeTtcbn07XG4iLCJpbXBvcnQgUG9wdXBNZW51TW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3BvcHVwLW1lbnUnO1xuaW1wb3J0IFJlcGxhY2VNb2R1bGUgZnJvbSAnLi4vcmVwbGFjZSc7XG5cbmltcG9ydCBSZXBsYWNlTWVudVByb3ZpZGVyIGZyb20gJy4vUmVwbGFjZU1lbnVQcm92aWRlcic7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIFBvcHVwTWVudU1vZHVsZSxcbiAgICBSZXBsYWNlTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdyZXBsYWNlTWVudVByb3ZpZGVyJyBdLFxuICByZXBsYWNlTWVudVByb3ZpZGVyOiBbICd0eXBlJywgUmVwbGFjZU1lbnVQcm92aWRlciBdXG59OyIsImltcG9ydCB7XG4gIGdldEJ1c2luZXNzT2JqZWN0XG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNFeHBhbmRlZFxufSBmcm9tICcuLi8uLi8uLi91dGlsL0RpVXRpbCc7XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUsIGlmIGFuIGVsZW1lbnQgaXMgZnJvbSBhIGRpZmZlcmVudCB0eXBlXG4gKiB0aGFuIGEgdGFyZ2V0IGRlZmluaXRpb24uIFRha2VzIGludG8gYWNjb3VudCB0aGUgdHlwZSxcbiAqIGV2ZW50IGRlZmluaXRpb24gdHlwZSBhbmQgdHJpZ2dlcmVkQnlFdmVudCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGlmZmVyZW50VHlwZShlbGVtZW50KSB7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgdmFyIHRhcmdldCA9IGVudHJ5LnRhcmdldDtcblxuICAgIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxuICAgICAgICBldmVudERlZmluaXRpb24gPSBidXNpbmVzc09iamVjdC5ldmVudERlZmluaXRpb25zICYmIGJ1c2luZXNzT2JqZWN0LmV2ZW50RGVmaW5pdGlvbnNbMF07XG5cbiAgICB2YXIgaXNUeXBlRXF1YWwgPSBidXNpbmVzc09iamVjdC4kdHlwZSA9PT0gdGFyZ2V0LnR5cGU7XG5cbiAgICB2YXIgaXNFdmVudERlZmluaXRpb25FcXVhbCA9IChcbiAgICAgIChldmVudERlZmluaXRpb24gJiYgZXZlbnREZWZpbml0aW9uLiR0eXBlKSA9PT0gdGFyZ2V0LmV2ZW50RGVmaW5pdGlvblR5cGVcbiAgICApO1xuXG4gICAgdmFyIGlzVHJpZ2dlcmVkQnlFdmVudEVxdWFsID0gKFxuICAgICAgYnVzaW5lc3NPYmplY3QudHJpZ2dlcmVkQnlFdmVudCA9PT0gdGFyZ2V0LnRyaWdnZXJlZEJ5RXZlbnRcbiAgICApO1xuXG4gICAgdmFyIGlzRXhwYW5kZWRFcXVhbCA9IChcbiAgICAgIHRhcmdldC5pc0V4cGFuZGVkID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRhcmdldC5pc0V4cGFuZGVkID09PSBpc0V4cGFuZGVkKGJ1c2luZXNzT2JqZWN0KVxuICAgICk7XG5cbiAgICByZXR1cm4gIWlzVHlwZUVxdWFsIHx8ICFpc0V2ZW50RGVmaW5pdGlvbkVxdWFsIHx8ICFpc1RyaWdnZXJlZEJ5RXZlbnRFcXVhbCB8fCAhaXNFeHBhbmRlZEVxdWFsO1xuICB9O1xufSIsImltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgY3NzRXNjYXBlIGZyb20gJ2Nzcy5lc2NhcGUnO1xuXG5pbXBvcnQge1xuICBhc3NpZ24sXG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBxdWVyeSBhcyBkb21RdWVyeVxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHtcbiAgYXR0ciBhcyBzdmdBdHRyXG59IGZyb20gJ3Rpbnktc3ZnJztcblxudmFyIExPV19QUklPUklUWSA9IDI1MDtcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uUmVwbGFjZVByZXZpZXcoXG4gICAgZXZlbnRCdXMsIGVsZW1lbnRSZWdpc3RyeSwgZWxlbWVudEZhY3RvcnksXG4gICAgY2FudmFzLCBwcmV2aWV3U3VwcG9ydCkge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICAvKipcbiAgICogUmVwbGFjZSB0aGUgdmlzdWFscyBvZiBhbGwgZWxlbWVudHMgaW4gdGhlIGNvbnRleHQgd2hpY2ggY2FuIGJlIHJlcGxhY2VkXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gY29udGV4dFxuICAgKi9cbiAgZnVuY3Rpb24gcmVwbGFjZVZpc3VhbChjb250ZXh0KSB7XG5cbiAgICB2YXIgcmVwbGFjZW1lbnRzID0gY29udGV4dC5jYW5FeGVjdXRlLnJlcGxhY2VtZW50cztcblxuICAgIGZvckVhY2gocmVwbGFjZW1lbnRzLCBmdW5jdGlvbihyZXBsYWNlbWVudCkge1xuXG4gICAgICB2YXIgaWQgPSByZXBsYWNlbWVudC5vbGRFbGVtZW50SWQ7XG5cbiAgICAgIHZhciBuZXdFbGVtZW50ID0ge1xuICAgICAgICB0eXBlOiByZXBsYWNlbWVudC5uZXdFbGVtZW50VHlwZVxuICAgICAgfTtcblxuICAgICAgLy8gaWYgdGhlIHZpc3VhbCBvZiB0aGUgZWxlbWVudCBpcyBhbHJlYWR5IHJlcGxhY2VkXG4gICAgICBpZiAoY29udGV4dC52aXN1YWxSZXBsYWNlbWVudHNbaWRdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGVsZW1lbnQgPSBlbGVtZW50UmVnaXN0cnkuZ2V0KGlkKTtcblxuICAgICAgYXNzaWduKG5ld0VsZW1lbnQsIHsgeDogZWxlbWVudC54LCB5OiBlbGVtZW50LnkgfSk7XG5cbiAgICAgIC8vIGNyZWF0ZSBhIHRlbXBvcmFyeSBzaGFwZVxuICAgICAgdmFyIHRlbXBTaGFwZSA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKG5ld0VsZW1lbnQpO1xuXG4gICAgICBjYW52YXMuYWRkU2hhcGUodGVtcFNoYXBlLCBlbGVtZW50LnBhcmVudCk7XG5cbiAgICAgIC8vIHNlbGVjdCB0aGUgb3JpZ2luYWwgU1ZHIGVsZW1lbnQgcmVsYXRlZCB0byB0aGUgZWxlbWVudCBhbmQgaGlkZSBpdFxuICAgICAgdmFyIGdmeCA9IGRvbVF1ZXJ5KCdbZGF0YS1lbGVtZW50LWlkPVwiJyArIGNzc0VzY2FwZShlbGVtZW50LmlkKSArICdcIl0nLCBjb250ZXh0LmRyYWdHcm91cCk7XG5cbiAgICAgIGlmIChnZngpIHtcbiAgICAgICAgc3ZnQXR0cihnZngsIHsgZGlzcGxheTogJ25vbmUnIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBjbG9uZSB0aGUgZ2Z4IG9mIHRoZSB0ZW1wb3Jhcnkgc2hhcGUgYW5kIGFkZCBpdCB0byB0aGUgZHJhZyBncm91cFxuICAgICAgdmFyIGRyYWdnZXIgPSBwcmV2aWV3U3VwcG9ydC5hZGREcmFnZ2VyKHRlbXBTaGFwZSwgY29udGV4dC5kcmFnR3JvdXApO1xuXG4gICAgICBjb250ZXh0LnZpc3VhbFJlcGxhY2VtZW50c1tpZF0gPSBkcmFnZ2VyO1xuXG4gICAgICBjYW52YXMucmVtb3ZlU2hhcGUodGVtcFNoYXBlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCB2aXN1YWxzIG9mIHRoZSBwcmV2aW91c2x5IHJlcGxhY2VkIGVsZW1lbnRzXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gY29udGV4dFxuICAgKi9cbiAgZnVuY3Rpb24gcmVzdG9yZVZpc3VhbChjb250ZXh0KSB7XG5cbiAgICB2YXIgdmlzdWFsUmVwbGFjZW1lbnRzID0gY29udGV4dC52aXN1YWxSZXBsYWNlbWVudHM7XG5cbiAgICBmb3JFYWNoKHZpc3VhbFJlcGxhY2VtZW50cywgZnVuY3Rpb24oZHJhZ2dlciwgaWQpIHtcblxuICAgICAgdmFyIG9yaWdpbmFsR2Z4ID0gZG9tUXVlcnkoJ1tkYXRhLWVsZW1lbnQtaWQ9XCInICsgY3NzRXNjYXBlKGlkKSArICdcIl0nLCBjb250ZXh0LmRyYWdHcm91cCk7XG5cbiAgICAgIGlmIChvcmlnaW5hbEdmeCkge1xuICAgICAgICBzdmdBdHRyKG9yaWdpbmFsR2Z4LCB7IGRpc3BsYXk6ICdpbmxpbmUnIH0pO1xuICAgICAgfVxuXG4gICAgICBkcmFnZ2VyLnJlbW92ZSgpO1xuXG4gICAgICBpZiAodmlzdWFsUmVwbGFjZW1lbnRzW2lkXSkge1xuICAgICAgICBkZWxldGUgdmlzdWFsUmVwbGFjZW1lbnRzW2lkXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLm1vdmUnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGU7XG5cbiAgICBpZiAoIWNvbnRleHQudmlzdWFsUmVwbGFjZW1lbnRzKSB7XG4gICAgICBjb250ZXh0LnZpc3VhbFJlcGxhY2VtZW50cyA9IHt9O1xuICAgIH1cblxuICAgIGlmIChjYW5FeGVjdXRlICYmIGNhbkV4ZWN1dGUucmVwbGFjZW1lbnRzKSB7XG4gICAgICByZXBsYWNlVmlzdWFsKGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN0b3JlVmlzdWFsKGNvbnRleHQpO1xuICAgIH1cbiAgfSk7XG59XG5cbkJwbW5SZXBsYWNlUHJldmlldy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcbiAgJ2NhbnZhcycsXG4gICdwcmV2aWV3U3VwcG9ydCdcbl07XG5cbmluaGVyaXRzKEJwbW5SZXBsYWNlUHJldmlldywgQ29tbWFuZEludGVyY2VwdG9yKTsiLCJpbXBvcnQgUHJldmlld1N1cHBvcnRNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcHJldmlldy1zdXBwb3J0JztcblxuaW1wb3J0IEJwbW5SZXBsYWNlUHJldmlldyBmcm9tICcuL0JwbW5SZXBsYWNlUHJldmlldyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBQcmV2aWV3U3VwcG9ydE1vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAnYnBtblJlcGxhY2VQcmV2aWV3JyBdLFxuICBicG1uUmVwbGFjZVByZXZpZXc6IFsgJ3R5cGUnLCBCcG1uUmVwbGFjZVByZXZpZXcgXVxufTtcbiIsImltcG9ydCB7XG4gIHBpY2ssXG4gIGFzc2lnbixcbiAgZmlsdGVyLFxuICBmb3JFYWNoLFxuICBpc0FycmF5LFxuICBpc1VuZGVmaW5lZCxcbiAgaGFzXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgaXMsXG4gIGdldEJ1c2luZXNzT2JqZWN0XG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNBbnlcbn0gZnJvbSAnLi4vbW9kZWxpbmcvdXRpbC9Nb2RlbGluZ1V0aWwnO1xuXG5pbXBvcnQge1xuICBpc0V4cGFuZGVkLFxuICBpc0V2ZW50U3ViUHJvY2Vzc1xufSBmcm9tICcuLi8uLi91dGlsL0RpVXRpbCc7XG5cbmltcG9ydCB7IGdldFByb3BlcnR5TmFtZXMgfSBmcm9tICcuLi9jb3B5LXBhc3RlL01vZGRsZUNvcHknO1xuXG5mdW5jdGlvbiBjb3B5UHJvcGVydGllcyhzb3VyY2UsIHRhcmdldCwgcHJvcGVydGllcykge1xuICBpZiAoIWlzQXJyYXkocHJvcGVydGllcykpIHtcbiAgICBwcm9wZXJ0aWVzID0gWyBwcm9wZXJ0aWVzIF07XG4gIH1cblxuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHByb3BlcnR5KSB7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChzb3VyY2VbcHJvcGVydHldKSkge1xuICAgICAgdGFyZ2V0W3Byb3BlcnR5XSA9IHNvdXJjZVtwcm9wZXJ0eV07XG4gICAgfVxuICB9KTtcbn1cblxudmFyIENVU1RPTV9QUk9QRVJUSUVTID0gW1xuICAnY2FuY2VsQWN0aXZpdHknLFxuICAnaW5zdGFudGlhdGUnLFxuICAnZXZlbnRHYXRld2F5VHlwZScsXG4gICd0cmlnZ2VyZWRCeUV2ZW50JyxcbiAgJ2lzSW50ZXJydXB0aW5nJ1xuXTtcblxuXG5mdW5jdGlvbiB0b2dnZWxpbmcoZWxlbWVudCwgdGFyZ2V0KSB7XG5cbiAgdmFyIG9sZENvbGxhcHNlZCA9IChcbiAgICBlbGVtZW50ICYmIGhhcyhlbGVtZW50LCAnY29sbGFwc2VkJykgPyBlbGVtZW50LmNvbGxhcHNlZCA6ICFpc0V4cGFuZGVkKGVsZW1lbnQpXG4gICk7XG5cbiAgdmFyIHRhcmdldENvbGxhcHNlZDtcblxuICBpZiAodGFyZ2V0ICYmIChoYXModGFyZ2V0LCAnY29sbGFwc2VkJykgfHwgaGFzKHRhcmdldCwgJ2lzRXhwYW5kZWQnKSkpIHtcblxuICAgIC8vIHByb3BlcnR5IGlzIGV4cGxpY2l0bHkgc2V0IHNvIHVzZSBpdFxuICAgIHRhcmdldENvbGxhcHNlZCA9IChcbiAgICAgIGhhcyh0YXJnZXQsICdjb2xsYXBzZWQnKSA/IHRhcmdldC5jb2xsYXBzZWQgOiAhdGFyZ2V0LmlzRXhwYW5kZWRcbiAgICApO1xuICB9IGVsc2Uge1xuXG4gICAgLy8ga2VlcCBvbGQgc3RhdGVcbiAgICB0YXJnZXRDb2xsYXBzZWQgPSBvbGRDb2xsYXBzZWQ7XG4gIH1cblxuICBpZiAob2xkQ29sbGFwc2VkICE9PSB0YXJnZXRDb2xsYXBzZWQpIHtcbiAgICBlbGVtZW50LmNvbGxhcHNlZCA9IG9sZENvbGxhcHNlZDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgdGFrZXMgY2FyZSBvZiByZXBsYWNpbmcgQlBNTiBlbGVtZW50c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uUmVwbGFjZShcbiAgICBicG1uRmFjdG9yeSxcbiAgICBlbGVtZW50RmFjdG9yeSxcbiAgICBtb2RkbGVDb3B5LFxuICAgIG1vZGVsaW5nLFxuICAgIHJlcGxhY2UsXG4gICAgc2VsZWN0aW9uXG4pIHtcblxuICAvKipcbiAgICogUHJlcGFyZXMgYSBuZXcgYnVzaW5lc3Mgb2JqZWN0IGZvciB0aGUgcmVwbGFjZW1lbnQgZWxlbWVudFxuICAgKiBhbmQgdHJpZ2dlcnMgdGhlIHJlcGxhY2Ugb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxuICAgKiBAcGFyYW0gIHtPYmplY3R9IFtoaW50c11cbiAgICpcbiAgICogQHJldHVybiB7ZGpzLm1vZGVsLkJhc2V9IHRoZSBuZXdseSBjcmVhdGVkIGVsZW1lbnRcbiAgICovXG4gIGZ1bmN0aW9uIHJlcGxhY2VFbGVtZW50KGVsZW1lbnQsIHRhcmdldCwgaGludHMpIHtcblxuICAgIGhpbnRzID0gaGludHMgfHwge307XG5cbiAgICB2YXIgdHlwZSA9IHRhcmdldC50eXBlLFxuICAgICAgICBvbGRCdXNpbmVzc09iamVjdCA9IGVsZW1lbnQuYnVzaW5lc3NPYmplY3Q7XG5cbiAgICBpZiAoaXNTdWJQcm9jZXNzKG9sZEJ1c2luZXNzT2JqZWN0KSkge1xuICAgICAgaWYgKHR5cGUgPT09ICdicG1uOlN1YlByb2Nlc3MnKSB7XG4gICAgICAgIGlmICh0b2dnZWxpbmcoZWxlbWVudCwgdGFyZ2V0KSkge1xuXG4gICAgICAgICAgLy8gZXhwYW5kaW5nIG9yIGNvbGxhcHNpbmcgcHJvY2Vzc1xuICAgICAgICAgIG1vZGVsaW5nLnRvZ2dsZUNvbGxhcHNlKGVsZW1lbnQpO1xuXG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbmV3QnVzaW5lc3NPYmplY3QgPSBicG1uRmFjdG9yeS5jcmVhdGUodHlwZSk7XG5cbiAgICB2YXIgbmV3RWxlbWVudCA9IHtcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBidXNpbmVzc09iamVjdDogbmV3QnVzaW5lc3NPYmplY3RcbiAgICB9O1xuXG4gICAgdmFyIGVsZW1lbnRQcm9wcyA9IGdldFByb3BlcnR5TmFtZXMob2xkQnVzaW5lc3NPYmplY3QuJGRlc2NyaXB0b3IpLFxuICAgICAgICBuZXdFbGVtZW50UHJvcHMgPSBnZXRQcm9wZXJ0eU5hbWVzKG5ld0J1c2luZXNzT2JqZWN0LiRkZXNjcmlwdG9yLCB0cnVlKSxcbiAgICAgICAgY29weVByb3BzID0gaW50ZXJzZWN0aW9uKGVsZW1lbnRQcm9wcywgbmV3RWxlbWVudFByb3BzKTtcblxuICAgIC8vIGluaXRpYWxpemUgc3BlY2lhbCBwcm9wZXJ0aWVzIGRlZmluZWQgaW4gdGFyZ2V0IGRlZmluaXRpb25cbiAgICBhc3NpZ24obmV3QnVzaW5lc3NPYmplY3QsIHBpY2sodGFyZ2V0LCBDVVNUT01fUFJPUEVSVElFUykpO1xuXG4gICAgdmFyIHByb3BlcnRpZXMgPSBmaWx0ZXIoY29weVByb3BzLCBmdW5jdGlvbihwcm9wZXJ0eU5hbWUpIHtcblxuICAgICAgLy8gY29weWluZyBldmVudCBkZWZpbml0aW9ucywgdW5sZXNzIHdlIHJlcGxhY2VcbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09ICdldmVudERlZmluaXRpb25zJykge1xuICAgICAgICByZXR1cm4gaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsIHRhcmdldC5ldmVudERlZmluaXRpb25UeXBlKTtcbiAgICAgIH1cblxuICAgICAgLy8gcmV0YWluIGxvb3AgY2hhcmFjdGVyaXN0aWNzIGlmIHRoZSB0YXJnZXQgZWxlbWVudFxuICAgICAgLy8gaXMgbm90IGFuIGV2ZW50IHN1YiBwcm9jZXNzXG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAnbG9vcENoYXJhY3RlcmlzdGljcycpIHtcbiAgICAgICAgcmV0dXJuICFpc0V2ZW50U3ViUHJvY2VzcyhuZXdCdXNpbmVzc09iamVjdCk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNvIHRoZSBhcHBsaWVkIHByb3BlcnRpZXMgZnJvbSAndGFyZ2V0JyBkb24ndCBnZXQgbG9zdFxuICAgICAgaWYgKG5ld0J1c2luZXNzT2JqZWN0Lmhhc093blByb3BlcnR5KHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAncHJvY2Vzc1JlZicgJiYgdGFyZ2V0LmlzRXhwYW5kZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gJ3RyaWdnZXJlZEJ5RXZlbnQnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBuZXdCdXNpbmVzc09iamVjdCA9IG1vZGRsZUNvcHkuY29weUVsZW1lbnQoXG4gICAgICBvbGRCdXNpbmVzc09iamVjdCxcbiAgICAgIG5ld0J1c2luZXNzT2JqZWN0LFxuICAgICAgcHJvcGVydGllc1xuICAgICk7XG5cbiAgICAvLyBpbml0aWFsaXplIGN1c3RvbSBCUE1OIGV4dGVuc2lvbnNcbiAgICBpZiAodGFyZ2V0LmV2ZW50RGVmaW5pdGlvblR5cGUpIHtcblxuICAgICAgLy8gb25seSBpbml0aWFsaXplIHdpdGggbmV3IGV2ZW50RGVmaW5pdGlvblxuICAgICAgLy8gaWYgd2UgZGlkIG5vdCBzZXQgYW4gZXZlbnQgZGVmaW5pdGlvbiB5ZXQsXG4gICAgICAvLyBpLmUuIGJlY2F1c2Ugd2UgY29waWVkIGl0XG4gICAgICBpZiAoIWhhc0V2ZW50RGVmaW5pdGlvbihuZXdCdXNpbmVzc09iamVjdCwgdGFyZ2V0LmV2ZW50RGVmaW5pdGlvblR5cGUpKSB7XG4gICAgICAgIG5ld0VsZW1lbnQuZXZlbnREZWZpbml0aW9uVHlwZSA9IHRhcmdldC5ldmVudERlZmluaXRpb25UeXBlO1xuICAgICAgICBuZXdFbGVtZW50LmV2ZW50RGVmaW5pdGlvbkF0dHJzID0gdGFyZ2V0LmV2ZW50RGVmaW5pdGlvbkF0dHJzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpcyhvbGRCdXNpbmVzc09iamVjdCwgJ2JwbW46QWN0aXZpdHknKSkge1xuXG4gICAgICBpZiAoaXNTdWJQcm9jZXNzKG9sZEJ1c2luZXNzT2JqZWN0KSkge1xuXG4gICAgICAgIC8vIG5vIHRvZ2dlbGluZywgc28ga2VlcCBvbGQgc3RhdGVcbiAgICAgICAgbmV3RWxlbWVudC5pc0V4cGFuZGVkID0gaXNFeHBhbmRlZChvbGRCdXNpbmVzc09iamVjdCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGVsc2UgaWYgcHJvcGVydHkgaXMgZXhwbGljaXRseSBzZXQsIHVzZSBpdFxuICAgICAgZWxzZSBpZiAodGFyZ2V0ICYmIGhhcyh0YXJnZXQsICdpc0V4cGFuZGVkJykpIHtcbiAgICAgICAgbmV3RWxlbWVudC5pc0V4cGFuZGVkID0gdGFyZ2V0LmlzRXhwYW5kZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFRPRE86IG5lZWQgYWxzbyB0byByZXNwZWN0IG1pbi9tYXggU2l6ZVxuICAgICAgLy8gY29weSBzaXplLCBmcm9tIGFuIGV4cGFuZGVkIHN1YnByb2Nlc3MgdG8gYW4gZXhwYW5kZWQgYWx0ZXJuYXRpdmUgc3VicHJvY2Vzc1xuICAgICAgLy8gZXhjZXB0IGJwbW46VGFzaywgYmVjYXVzZSBUYXNrIGlzIGFsd2F5cyBleHBhbmRlZFxuICAgICAgaWYgKChpc0V4cGFuZGVkKG9sZEJ1c2luZXNzT2JqZWN0KSAmJiAhaXMob2xkQnVzaW5lc3NPYmplY3QsICdicG1uOlRhc2snKSkgJiYgbmV3RWxlbWVudC5pc0V4cGFuZGVkKSB7XG4gICAgICAgIG5ld0VsZW1lbnQud2lkdGggPSBlbGVtZW50LndpZHRoO1xuICAgICAgICBuZXdFbGVtZW50LmhlaWdodCA9IGVsZW1lbnQuaGVpZ2h0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSBjaGlsZHJlbiBpZiBub3QgZXhwYW5kaW5nIHN1YiBwcm9jZXNzXG4gICAgaWYgKGlzU3ViUHJvY2VzcyhvbGRCdXNpbmVzc09iamVjdCkgJiYgIWlzU3ViUHJvY2VzcyhuZXdCdXNpbmVzc09iamVjdCkpIHtcbiAgICAgIGhpbnRzLm1vdmVDaGlsZHJlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIHRyYW5zZm9ybSBjb2xsYXBzZWQvZXhwYW5kZWQgcG9vbHNcbiAgICBpZiAoaXMob2xkQnVzaW5lc3NPYmplY3QsICdicG1uOlBhcnRpY2lwYW50JykpIHtcblxuICAgICAgLy8gY3JlYXRlIGV4cGFuZGVkIHBvb2xcbiAgICAgIGlmICh0YXJnZXQuaXNFeHBhbmRlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBuZXdCdXNpbmVzc09iamVjdC5wcm9jZXNzUmVmID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOlByb2Nlc3MnKTtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgLy8gcmVtb3ZlIGNoaWxkcmVuIHdoZW4gdHJhbnNmb3JtaW5nIHRvIGNvbGxhcHNlZCBwb29sXG4gICAgICAgIGhpbnRzLm1vdmVDaGlsZHJlbiA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBhcHBseSBzYW1lIHdpZHRoIGFuZCBkZWZhdWx0IGhlaWdodFxuICAgICAgbmV3RWxlbWVudC53aWR0aCA9IGVsZW1lbnQud2lkdGg7XG4gICAgICBuZXdFbGVtZW50LmhlaWdodCA9IGVsZW1lbnRGYWN0b3J5Ll9nZXREZWZhdWx0U2l6ZShuZXdCdXNpbmVzc09iamVjdCkuaGVpZ2h0O1xuICAgIH1cblxuICAgIG5ld0J1c2luZXNzT2JqZWN0Lm5hbWUgPSBvbGRCdXNpbmVzc09iamVjdC5uYW1lO1xuXG4gICAgLy8gcmV0YWluIGRlZmF1bHQgZmxvdydzIHJlZmVyZW5jZSBiZXR3ZWVuIGluY2x1c2l2ZSA8LT4gZXhjbHVzaXZlIGdhdGV3YXlzIGFuZCBhY3Rpdml0aWVzXG4gICAgaWYgKFxuICAgICAgaXNBbnkob2xkQnVzaW5lc3NPYmplY3QsIFtcbiAgICAgICAgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheScsXG4gICAgICAgICdicG1uOkluY2x1c2l2ZUdhdGV3YXknLFxuICAgICAgICAnYnBtbjpBY3Rpdml0eSdcbiAgICAgIF0pICYmXG4gICAgICBpc0FueShuZXdCdXNpbmVzc09iamVjdCwgW1xuICAgICAgICAnYnBtbjpFeGNsdXNpdmVHYXRld2F5JyxcbiAgICAgICAgJ2JwbW46SW5jbHVzaXZlR2F0ZXdheScsXG4gICAgICAgICdicG1uOkFjdGl2aXR5J1xuICAgICAgXSlcbiAgICApIHtcbiAgICAgIG5ld0J1c2luZXNzT2JqZWN0LmRlZmF1bHQgPSBvbGRCdXNpbmVzc09iamVjdC5kZWZhdWx0O1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRhcmdldC5ob3N0ICYmXG4gICAgICAhaXMob2xkQnVzaW5lc3NPYmplY3QsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSAmJlxuICAgICAgaXMobmV3QnVzaW5lc3NPYmplY3QsICdicG1uOkJvdW5kYXJ5RXZlbnQnKVxuICAgICkge1xuICAgICAgbmV3RWxlbWVudC5ob3N0ID0gdGFyZ2V0Lmhvc3Q7XG4gICAgfVxuXG4gICAgbmV3RWxlbWVudC5kaSA9IHt9O1xuXG4gICAgLy8gZmlsbCBhbmQgc3Ryb2tlIHdpbGwgYmUgc2V0IHRvIERJXG4gICAgY29weVByb3BlcnRpZXMob2xkQnVzaW5lc3NPYmplY3QuZGksIG5ld0VsZW1lbnQuZGksIFtcbiAgICAgICdmaWxsJyxcbiAgICAgICdzdHJva2UnXG4gICAgXSk7XG5cbiAgICBuZXdFbGVtZW50ID0gcmVwbGFjZS5yZXBsYWNlRWxlbWVudChlbGVtZW50LCBuZXdFbGVtZW50LCBoaW50cyk7XG5cbiAgICBpZiAoaGludHMuc2VsZWN0ICE9PSBmYWxzZSkge1xuICAgICAgc2VsZWN0aW9uLnNlbGVjdChuZXdFbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3RWxlbWVudDtcbiAgfVxuXG4gIHRoaXMucmVwbGFjZUVsZW1lbnQgPSByZXBsYWNlRWxlbWVudDtcbn1cblxuQnBtblJlcGxhY2UuJGluamVjdCA9IFtcbiAgJ2JwbW5GYWN0b3J5JyxcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcbiAgJ21vZGRsZUNvcHknLFxuICAnbW9kZWxpbmcnLFxuICAncmVwbGFjZScsXG4gICdzZWxlY3Rpb24nXG5dO1xuXG5cbmZ1bmN0aW9uIGlzU3ViUHJvY2Vzcyhibykge1xuICByZXR1cm4gaXMoYm8sICdicG1uOlN1YlByb2Nlc3MnKTtcbn1cblxuZnVuY3Rpb24gaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsIHR5cGUpIHtcblxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICByZXR1cm4gdHlwZSAmJiBiby5nZXQoJ2V2ZW50RGVmaW5pdGlvbnMnKS5zb21lKGZ1bmN0aW9uKGRlZmluaXRpb24pIHtcbiAgICByZXR1cm4gaXMoZGVmaW5pdGlvbiwgdHlwZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbXB1dGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdHdvIGFycmF5cy5cbiAqL1xuZnVuY3Rpb24gaW50ZXJzZWN0aW9uKGExLCBhMikge1xuICByZXR1cm4gYTEuZmlsdGVyKGZ1bmN0aW9uKGVsKSB7XG4gICAgcmV0dXJuIGEyLmluZGV4T2YoZWwpICE9PSAtMTtcbiAgfSk7XG59XG4iLCJleHBvcnQgdmFyIFNUQVJUX0VWRU5UID0gW1xuICB7XG4gICAgbGFiZWw6ICdTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub25lLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnSW50ZXJtZWRpYXRlIFRocm93IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbmUtaW50ZXJtZWRpYXRlLXRocm93aW5nJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LW5vbmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0VuZCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub25lLWVuZCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWVuZC1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkVuZEV2ZW50J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTWVzc2FnZSBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1tZXNzYWdlLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbWVzc2FnZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdUaW1lciBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC10aW1lci1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LXRpbWVyJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46VGltZXJFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb25kaXRpb25hbCBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb25kaXRpb25hbC1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LWNvbmRpdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2lnbmFsIFN0YXJ0IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXNpZ25hbC1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LXNpZ25hbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH1cbl07XG5cbmV4cG9ydCB2YXIgU1RBUlRfRVZFTlRfU1VCX1BST0NFU1MgPSBbXG4gIHtcbiAgICBsYWJlbDogJ1N0YXJ0IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbmUtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1pbnRlcm1lZGlhdGUtdGhyb3dpbmcnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRW5kIEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbmUtZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LW5vbmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIElOVEVSTUVESUFURV9FVkVOVCA9IFtcbiAge1xuICAgIGxhYmVsOiAnU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW5vbmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0ludGVybWVkaWF0ZSBUaHJvdyBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub25lLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFbmQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1lbmQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01lc3NhZ2UgSW50ZXJtZWRpYXRlIENhdGNoIEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW1lc3NhZ2UtaW50ZXJtZWRpYXRlLWNhdGNoJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLW1lc3NhZ2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTWVzc2FnZSBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbWVzc2FnZS1pbnRlcm1lZGlhdGUtdGhyb3cnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtdGhyb3ctbWVzc2FnZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdUaW1lciBJbnRlcm1lZGlhdGUgQ2F0Y2ggRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdGltZXItaW50ZXJtZWRpYXRlLWNhdGNoJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLXRpbWVyJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46VGltZXJFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFc2NhbGF0aW9uIEludGVybWVkaWF0ZSBUaHJvdyBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lc2NhbGF0aW9uLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC10aHJvdy1lc2NhbGF0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbmRpdGlvbmFsIEludGVybWVkaWF0ZSBDYXRjaCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb25kaXRpb25hbC1pbnRlcm1lZGlhdGUtY2F0Y2gnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtY29uZGl0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdMaW5rIEludGVybWVkaWF0ZSBDYXRjaCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1saW5rLWludGVybWVkaWF0ZS1jYXRjaCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1saW5rJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TGlua0V2ZW50RGVmaW5pdGlvbicsXG4gICAgICBldmVudERlZmluaXRpb25BdHRyczoge1xuICAgICAgICBuYW1lOiAnJ1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTGluayBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbGluay1pbnRlcm1lZGlhdGUtdGhyb3cnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtdGhyb3ctbGluaycsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nLFxuICAgICAgZXZlbnREZWZpbml0aW9uQXR0cnM6IHtcbiAgICAgICAgbmFtZTogJydcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbXBlbnNhdGlvbiBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29tcGVuc2F0aW9uLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC10aHJvdy1jb21wZW5zYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2lnbmFsIEludGVybWVkaWF0ZSBDYXRjaCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zaWduYWwtaW50ZXJtZWRpYXRlLWNhdGNoJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLXNpZ25hbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NpZ25hbCBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtc2lnbmFsLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC10aHJvdy1zaWduYWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIEVORF9FVkVOVCA9IFtcbiAge1xuICAgIGxhYmVsOiAnU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW5vbmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0ludGVybWVkaWF0ZSBUaHJvdyBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub25lLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFbmQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1lbmQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01lc3NhZ2UgRW5kIEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW1lc3NhZ2UtZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LW1lc3NhZ2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0VzY2FsYXRpb24gRW5kIEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWVzY2FsYXRpb24tZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LWVzY2FsYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0Vycm9yIEVuZCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lcnJvci1lbmQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtZXJyb3InLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXJyb3JFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDYW5jZWwgRW5kIEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWNhbmNlbC1lbmQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtY2FuY2VsJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkVuZEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNhbmNlbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbXBlbnNhdGlvbiBFbmQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29tcGVuc2F0aW9uLWVuZCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWVuZC1ldmVudC1jb21wZW5zYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NpZ25hbCBFbmQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtc2lnbmFsLWVuZCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWVuZC1ldmVudC1zaWduYWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVGVybWluYXRlIEVuZCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC10ZXJtaW5hdGUtZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LXRlcm1pbmF0ZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpUZXJtaW5hdGVFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIEdBVEVXQVkgPSBbXG4gIHtcbiAgICBsYWJlbDogJ0V4Y2x1c2l2ZSBHYXRld2F5JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWV4Y2x1c2l2ZS1nYXRld2F5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZ2F0ZXdheS14b3InLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RXhjbHVzaXZlR2F0ZXdheSdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1BhcmFsbGVsIEdhdGV3YXknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtcGFyYWxsZWwtZ2F0ZXdheScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWdhdGV3YXktcGFyYWxsZWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46UGFyYWxsZWxHYXRld2F5J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnSW5jbHVzaXZlIEdhdGV3YXknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtaW5jbHVzaXZlLWdhdGV3YXknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1nYXRld2F5LW9yJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkluY2x1c2l2ZUdhdGV3YXknXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb21wbGV4IEdhdGV3YXknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29tcGxleC1nYXRld2F5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZ2F0ZXdheS1jb21wbGV4JyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkNvbXBsZXhHYXRld2F5J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXZlbnQgYmFzZWQgR2F0ZXdheScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ldmVudC1iYXNlZC1nYXRld2F5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZ2F0ZXdheS1ldmVudGJhc2VkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkV2ZW50QmFzZWRHYXRld2F5JyxcbiAgICAgIGluc3RhbnRpYXRlOiBmYWxzZSxcbiAgICAgIGV2ZW50R2F0ZXdheVR5cGU6ICdFeGNsdXNpdmUnXG4gICAgfVxuICB9XG5cbiAgLy8gR2F0ZXdheXMgZGVhY3RpdmF0ZWQgdW50aWwgaHR0cHM6Ly9naXRodWIuY29tL2JwbW4taW8vYnBtbi1qcy9pc3N1ZXMvMTk0XG4gIC8vIHtcbiAgLy8gICBsYWJlbDogJ0V2ZW50IGJhc2VkIGluc3RhbnRpYXRpbmcgR2F0ZXdheScsXG4gIC8vICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1leGNsdXNpdmUtZXZlbnQtYmFzZWQtZ2F0ZXdheScsXG4gIC8vICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWV4Y2x1c2l2ZS1ldmVudC1iYXNlZCcsXG4gIC8vICAgdGFyZ2V0OiB7XG4gIC8vICAgICB0eXBlOiAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheSdcbiAgLy8gICB9LFxuICAvLyAgIG9wdGlvbnM6IHtcbiAgLy8gICAgIGJ1c2luZXNzT2JqZWN0OiB7IGluc3RhbnRpYXRlOiB0cnVlLCBldmVudEdhdGV3YXlUeXBlOiAnRXhjbHVzaXZlJyB9XG4gIC8vICAgfVxuICAvLyB9LFxuICAvLyB7XG4gIC8vICAgbGFiZWw6ICdQYXJhbGxlbCBFdmVudCBiYXNlZCBpbnN0YW50aWF0aW5nIEdhdGV3YXknLFxuICAvLyAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtcGFyYWxsZWwtZXZlbnQtYmFzZWQtaW5zdGFudGlhdGUtZ2F0ZXdheScsXG4gIC8vICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXBhcmFsbGVsLWV2ZW50LWJhc2VkLWluc3RhbnRpYXRlLWdhdGV3YXknLFxuICAvLyAgIHRhcmdldDoge1xuICAvLyAgICAgdHlwZTogJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknXG4gIC8vICAgfSxcbiAgLy8gICBvcHRpb25zOiB7XG4gIC8vICAgICBidXNpbmVzc09iamVjdDogeyBpbnN0YW50aWF0ZTogdHJ1ZSwgZXZlbnRHYXRld2F5VHlwZTogJ1BhcmFsbGVsJyB9XG4gIC8vICAgfVxuICAvLyB9XG5dO1xuXG5leHBvcnQgdmFyIFNVQlBST0NFU1NfRVhQQU5ERUQgPSBbXG4gIHtcbiAgICBsYWJlbDogJ1RyYW5zYWN0aW9uJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXRyYW5zYWN0aW9uJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tdHJhbnNhY3Rpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46VHJhbnNhY3Rpb24nLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXZlbnQgU3ViIFByb2Nlc3MnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtZXZlbnQtc3VicHJvY2VzcycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWV2ZW50LXN1YnByb2Nlc3MtZXhwYW5kZWQnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3ViUHJvY2VzcycsXG4gICAgICB0cmlnZ2VyZWRCeUV2ZW50OiB0cnVlLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU3ViIFByb2Nlc3MgKGNvbGxhcHNlZCknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29sbGFwc2VkLXN1YnByb2Nlc3MnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdWJwcm9jZXNzLWNvbGxhcHNlZCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdWJQcm9jZXNzJyxcbiAgICAgIGlzRXhwYW5kZWQ6IGZhbHNlXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIFRSQU5TQUNUSU9OID0gW1xuICB7XG4gICAgbGFiZWw6ICdTdWIgUHJvY2VzcycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zdWJwcm9jZXNzJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3VicHJvY2Vzcy1leHBhbmRlZCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdWJQcm9jZXNzJyxcbiAgICAgIGlzRXhwYW5kZWQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0V2ZW50IFN1YiBQcm9jZXNzJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWV2ZW50LXN1YnByb2Nlc3MnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1ldmVudC1zdWJwcm9jZXNzLWV4cGFuZGVkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN1YlByb2Nlc3MnLFxuICAgICAgdHJpZ2dlcmVkQnlFdmVudDogdHJ1ZSxcbiAgICAgIGlzRXhwYW5kZWQ6IHRydWVcbiAgICB9XG4gIH1cbl07XG5cbmV4cG9ydCB2YXIgRVZFTlRfU1VCX1BST0NFU1MgPSBbXG4gIHtcbiAgICBsYWJlbDogJ1N1YiBQcm9jZXNzJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXN1YnByb2Nlc3MnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdWJwcm9jZXNzLWV4cGFuZGVkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN1YlByb2Nlc3MnLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVHJhbnNhY3Rpb24nLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdHJhbnNhY3Rpb24nLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi10cmFuc2FjdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpUcmFuc2FjdGlvbicsXG4gICAgICBpc0V4cGFuZGVkOiB0cnVlXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIFRBU0sgPSBbXG4gIHtcbiAgICBsYWJlbDogJ1Rhc2snLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdGFzaycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXRhc2snLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46VGFzaydcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NlbmQgVGFzaycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zZW5kLXRhc2snLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zZW5kJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlNlbmRUYXNrJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUmVjZWl2ZSBUYXNrJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXJlY2VpdmUtdGFzaycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXJlY2VpdmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46UmVjZWl2ZVRhc2snXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdVc2VyIFRhc2snLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdXNlci10YXNrJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tdXNlcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpVc2VyVGFzaydcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01hbnVhbCBUYXNrJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW1hbnVhbC10YXNrJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbWFudWFsJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOk1hbnVhbFRhc2snXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdCdXNpbmVzcyBSdWxlIFRhc2snLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtcnVsZS10YXNrJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tYnVzaW5lc3MtcnVsZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCdXNpbmVzc1J1bGVUYXNrJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2VydmljZSBUYXNrJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXNlcnZpY2UtdGFzaycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXNlcnZpY2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U2VydmljZVRhc2snXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTY3JpcHQgVGFzaycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zY3JpcHQtdGFzaycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXNjcmlwdCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTY3JpcHRUYXNrJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ2FsbCBBY3Rpdml0eScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jYWxsLWFjdGl2aXR5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY2FsbC1hY3Rpdml0eScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpDYWxsQWN0aXZpdHknXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTdWIgUHJvY2VzcyAoY29sbGFwc2VkKScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb2xsYXBzZWQtc3VicHJvY2VzcycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN1YnByb2Nlc3MtY29sbGFwc2VkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN1YlByb2Nlc3MnLFxuICAgICAgaXNFeHBhbmRlZDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1N1YiBQcm9jZXNzIChleHBhbmRlZCknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtZXhwYW5kZWQtc3VicHJvY2VzcycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN1YnByb2Nlc3MtZXhwYW5kZWQnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3ViUHJvY2VzcycsXG4gICAgICBpc0V4cGFuZGVkOiB0cnVlXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgdmFyIEJPVU5EQVJZX0VWRU5UID0gW1xuICB7XG4gICAgbGFiZWw6ICdNZXNzYWdlIEJvdW5kYXJ5IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW1lc3NhZ2UtYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtbWVzc2FnZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdUaW1lciBCb3VuZGFyeSBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC10aW1lci1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXNjYWxhdGlvbiBCb3VuZGFyeSBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lc2NhbGF0aW9uLWJvdW5kYXJ5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLWVzY2FsYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29uZGl0aW9uYWwgQm91bmRhcnkgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29uZGl0aW9uYWwtYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtY29uZGl0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFcnJvciBCb3VuZGFyeSBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lcnJvci1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1lcnJvcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkVycm9yRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ2FuY2VsIEJvdW5kYXJ5IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWNhbmNlbC1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1jYW5jZWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDYW5jZWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTaWduYWwgQm91bmRhcnkgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtc2lnbmFsLWJvdW5kYXJ5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLXNpZ25hbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbXBlbnNhdGlvbiBCb3VuZGFyeSBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb21wZW5zYXRpb24tYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtY29tcGVuc2F0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01lc3NhZ2UgQm91bmRhcnkgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbi1pbnRlcnJ1cHRpbmctbWVzc2FnZS1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1ub24taW50ZXJydXB0aW5nLW1lc3NhZ2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGNhbmNlbEFjdGl2aXR5OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVGltZXIgQm91bmRhcnkgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbi1pbnRlcnJ1cHRpbmctdGltZXItYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtbm9uLWludGVycnVwdGluZy10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGNhbmNlbEFjdGl2aXR5OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXNjYWxhdGlvbiBCb3VuZGFyeSBFdmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uLWludGVycnVwdGluZy1lc2NhbGF0aW9uLWJvdW5kYXJ5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLW5vbi1pbnRlcnJ1cHRpbmctZXNjYWxhdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nLFxuICAgICAgY2FuY2VsQWN0aXZpdHk6IGZhbHNlXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb25kaXRpb25hbCBCb3VuZGFyeSBFdmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uLWludGVycnVwdGluZy1jb25kaXRpb25hbC1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1ub24taW50ZXJydXB0aW5nLWNvbmRpdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGNhbmNlbEFjdGl2aXR5OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2lnbmFsIEJvdW5kYXJ5IEV2ZW50IChub24taW50ZXJydXB0aW5nKScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub24taW50ZXJydXB0aW5nLXNpZ25hbC1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1ub24taW50ZXJydXB0aW5nLXNpZ25hbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBjYW5jZWxBY3Rpdml0eTogZmFsc2VcbiAgICB9XG4gIH1cbl07XG5cbmV4cG9ydCB2YXIgRVZFTlRfU1VCX1BST0NFU1NfU1RBUlRfRVZFTlQgPSBbXG4gIHtcbiAgICBsYWJlbDogJ01lc3NhZ2UgU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbWVzc2FnZS1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW1lc3NhZ2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVGltZXIgU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdGltZXItc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29uZGl0aW9uYWwgU3RhcnQgRXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29uZGl0aW9uYWwtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1jb25kaXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NpZ25hbCBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zaWduYWwtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1zaWduYWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFcnJvciBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lcnJvci1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LWVycm9yJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXJyb3JFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFc2NhbGF0aW9uIFN0YXJ0IEV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWVzY2FsYXRpb24tc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1lc2NhbGF0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbXBlbnNhdGlvbiBTdGFydCBFdmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb21wZW5zYXRpb24tc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1jb21wZW5zYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTWVzc2FnZSBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uLWludGVycnVwdGluZy1tZXNzYWdlLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbm9uLWludGVycnVwdGluZy1tZXNzYWdlJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBpc0ludGVycnVwdGluZzogZmFsc2VcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1RpbWVyIFN0YXJ0IEV2ZW50IChub24taW50ZXJydXB0aW5nKScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub24taW50ZXJydXB0aW5nLXRpbWVyLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbm9uLWludGVycnVwdGluZy10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGlzSW50ZXJydXB0aW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29uZGl0aW9uYWwgU3RhcnQgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbi1pbnRlcnJ1cHRpbmctY29uZGl0aW9uYWwtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1ub24taW50ZXJydXB0aW5nLWNvbmRpdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGlzSW50ZXJydXB0aW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2lnbmFsIFN0YXJ0IEV2ZW50IChub24taW50ZXJydXB0aW5nKScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub24taW50ZXJydXB0aW5nLXNpZ25hbC1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW5vbi1pbnRlcnJ1cHRpbmctc2lnbmFsJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGlzSW50ZXJydXB0aW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXNjYWxhdGlvbiBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uLWludGVycnVwdGluZy1lc2NhbGF0aW9uLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbm9uLWludGVycnVwdGluZy1lc2NhbGF0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBpc0ludGVycnVwdGluZzogZmFsc2VcbiAgICB9XG4gIH1cbl07XG5cbmV4cG9ydCB2YXIgU0VRVUVOQ0VfRkxPVyA9IFtcbiAge1xuICAgIGxhYmVsOiAnU2VxdWVuY2UgRmxvdycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zZXF1ZW5jZS1mbG93JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY29ubmVjdGlvbidcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRGVmYXVsdCBGbG93JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWRlZmF1bHQtZmxvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWRlZmF1bHQtZmxvdydcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29uZGl0aW9uYWwgRmxvdycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb25kaXRpb25hbC1mbG93JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY29uZGl0aW9uYWwtZmxvdydcbiAgfVxuXTtcblxuZXhwb3J0IHZhciBQQVJUSUNJUEFOVCA9IFtcbiAge1xuICAgIGxhYmVsOiAnRXhwYW5kZWQgUG9vbCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1leHBhbmRlZC1wb29sJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tcGFydGljaXBhbnQnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46UGFydGljaXBhbnQnLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29sbGFwc2VkIFBvb2wnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29sbGFwc2VkLXBvb2wnLFxuXG4gICAgLy8gVE9ETyhAamFuc3R1ZW1tZWwpOiBtYXliZSBkZXNpZ24gbmV3IGljb25cbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbGFuZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgICBpc0V4cGFuZGVkOiBmYWxzZVxuICAgIH1cbiAgfVxuXTtcbiIsImltcG9ydCBDb3B5UGFzdGVNb2R1bGUgZnJvbSAnLi4vY29weS1wYXN0ZSc7XG5pbXBvcnQgUmVwbGFjZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXBsYWNlJztcbmltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uJztcblxuaW1wb3J0IEJwbW5SZXBsYWNlIGZyb20gJy4vQnBtblJlcGxhY2UnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgQ29weVBhc3RlTW9kdWxlLFxuICAgIFJlcGxhY2VNb2R1bGUsXG4gICAgU2VsZWN0aW9uTW9kdWxlXG4gIF0sXG4gIGJwbW5SZXBsYWNlOiBbICd0eXBlJywgQnBtblJlcGxhY2UgXVxufTtcbiIsImltcG9ydCB7XG4gIGV2ZXJ5LFxuICBmaW5kLFxuICBmb3JFYWNoLFxuICBzb21lXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IHtcbiAgaXMsXG4gIGdldEJ1c2luZXNzT2JqZWN0XG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0UGFyZW50LFxuICBpc0FueVxufSBmcm9tICcuLi9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzTGFiZWxcbn0gZnJvbSAnLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0V4cGFuZGVkLFxuICBpc0V2ZW50U3ViUHJvY2VzcyxcbiAgaXNJbnRlcnJ1cHRpbmcsXG4gIGhhc0Vycm9yRXZlbnREZWZpbml0aW9uLFxuICBoYXNFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uLFxuICBoYXNDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uXG59IGZyb20gJy4uLy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IFJ1bGVQcm92aWRlciBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9ydWxlcy9SdWxlUHJvdmlkZXInO1xuXG5pbXBvcnQge1xuICBnZXRCb3VuZGFyeUF0dGFjaG1lbnQgYXMgaXNCb3VuZGFyeUF0dGFjaG1lbnRcbn0gZnJvbSAnLi4vc25hcHBpbmcvQnBtblNuYXBwaW5nVXRpbCc7XG5cblxuLyoqXG4gKiBCUE1OIHNwZWNpZmljIG1vZGVsaW5nIHJ1bGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtblJ1bGVzKGV2ZW50QnVzKSB7XG4gIFJ1bGVQcm92aWRlci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcbn1cblxuaW5oZXJpdHMoQnBtblJ1bGVzLCBSdWxlUHJvdmlkZXIpO1xuXG5CcG1uUnVsZXMuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdO1xuXG5CcG1uUnVsZXMucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICB0aGlzLmFkZFJ1bGUoJ2Nvbm5lY3Rpb24uc3RhcnQnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHNvdXJjZSA9IGNvbnRleHQuc291cmNlO1xuXG4gICAgcmV0dXJuIGNhblN0YXJ0Q29ubmVjdGlvbihzb3VyY2UpO1xuICB9KTtcblxuICB0aGlzLmFkZFJ1bGUoJ2Nvbm5lY3Rpb24uY3JlYXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgdGFyZ2V0UGFyZW50ID0gaGludHMudGFyZ2V0UGFyZW50LFxuICAgICAgICB0YXJnZXRBdHRhY2ggPSBoaW50cy50YXJnZXRBdHRhY2g7XG5cbiAgICAvLyBkb24ndCBhbGxvdyBpbmNvbWluZyBjb25uZWN0aW9ucyBvblxuICAgIC8vIG5ld2x5IGNyZWF0ZWQgYm91bmRhcnkgZXZlbnRzXG4gICAgLy8gdG8gYm91bmRhcnkgZXZlbnRzXG4gICAgaWYgKHRhcmdldEF0dGFjaCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIHRlbXBvcmFyaWx5IHNldCB0YXJnZXQgcGFyZW50IGZvciBzY29waW5nXG4gICAgLy8gY2hlY2tzIHRvIHdvcmtcbiAgICBpZiAodGFyZ2V0UGFyZW50KSB7XG4gICAgICB0YXJnZXQucGFyZW50ID0gdGFyZ2V0UGFyZW50O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2FuQ29ubmVjdChzb3VyY2UsIHRhcmdldCk7XG4gICAgfSBmaW5hbGx5IHtcblxuICAgICAgLy8gdW5zZXQgdGVtcG9yYXJ5IHRhcmdldCBwYXJlbnRcbiAgICAgIGlmICh0YXJnZXRQYXJlbnQpIHtcbiAgICAgICAgdGFyZ2V0LnBhcmVudCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICB0aGlzLmFkZFJ1bGUoJ2Nvbm5lY3Rpb24ucmVjb25uZWN0JywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldDtcblxuICAgIHJldHVybiBjYW5Db25uZWN0KHNvdXJjZSwgdGFyZ2V0LCBjb25uZWN0aW9uKTtcbiAgfSk7XG5cbiAgdGhpcy5hZGRSdWxlKCdjb25uZWN0aW9uLnVwZGF0ZVdheXBvaW50cycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogY29udGV4dC5jb25uZWN0aW9uLnR5cGVcbiAgICB9O1xuICB9KTtcblxuICB0aGlzLmFkZFJ1bGUoJ3NoYXBlLnJlc2l6ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIG5ld0JvdW5kcyA9IGNvbnRleHQubmV3Qm91bmRzO1xuXG4gICAgcmV0dXJuIGNhblJlc2l6ZShzaGFwZSwgbmV3Qm91bmRzKTtcbiAgfSk7XG5cbiAgdGhpcy5hZGRSdWxlKCdlbGVtZW50cy5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cyxcbiAgICAgICAgcG9zaXRpb24gPSBjb250ZXh0LnBvc2l0aW9uLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldDtcblxuICAgIHJldHVybiBldmVyeShlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgaWYgKGlzQ29ubmVjdGlvbihlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gY2FuQ29ubmVjdChlbGVtZW50LnNvdXJjZSwgZWxlbWVudC50YXJnZXQsIGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudC5ob3N0KSB7XG4gICAgICAgIHJldHVybiBjYW5BdHRhY2goZWxlbWVudCwgZWxlbWVudC5ob3N0LCBudWxsLCBwb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjYW5DcmVhdGUoZWxlbWVudCwgdGFyZ2V0LCBudWxsLCBwb3NpdGlvbik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRoaXMuYWRkUnVsZSgnZWxlbWVudHMubW92ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgc2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIHBvc2l0aW9uID0gY29udGV4dC5wb3NpdGlvbjtcblxuICAgIHJldHVybiBjYW5BdHRhY2goc2hhcGVzLCB0YXJnZXQsIG51bGwsIHBvc2l0aW9uKSB8fFxuICAgICAgICAgICBjYW5SZXBsYWNlKHNoYXBlcywgdGFyZ2V0LCBwb3NpdGlvbikgfHxcbiAgICAgICAgICAgY2FuTW92ZShzaGFwZXMsIHRhcmdldCwgcG9zaXRpb24pIHx8XG4gICAgICAgICAgIGNhbkluc2VydChzaGFwZXMsIHRhcmdldCwgcG9zaXRpb24pO1xuICB9KTtcblxuICB0aGlzLmFkZFJ1bGUoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICByZXR1cm4gY2FuQ3JlYXRlKFxuICAgICAgY29udGV4dC5zaGFwZSxcbiAgICAgIGNvbnRleHQudGFyZ2V0LFxuICAgICAgY29udGV4dC5zb3VyY2UsXG4gICAgICBjb250ZXh0LnBvc2l0aW9uXG4gICAgKTtcbiAgfSk7XG5cbiAgdGhpcy5hZGRSdWxlKCdzaGFwZS5hdHRhY2gnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICByZXR1cm4gY2FuQXR0YWNoKFxuICAgICAgY29udGV4dC5zaGFwZSxcbiAgICAgIGNvbnRleHQudGFyZ2V0LFxuICAgICAgbnVsbCxcbiAgICAgIGNvbnRleHQucG9zaXRpb25cbiAgICApO1xuICB9KTtcblxuICB0aGlzLmFkZFJ1bGUoJ2VsZW1lbnQuY29weScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzO1xuXG4gICAgcmV0dXJuIGNhbkNvcHkoZWxlbWVudHMsIGVsZW1lbnQpO1xuICB9KTtcbn07XG5cbkJwbW5SdWxlcy5wcm90b3R5cGUuY2FuQ29ubmVjdE1lc3NhZ2VGbG93ID0gY2FuQ29ubmVjdE1lc3NhZ2VGbG93O1xuXG5CcG1uUnVsZXMucHJvdG90eXBlLmNhbkNvbm5lY3RTZXF1ZW5jZUZsb3cgPSBjYW5Db25uZWN0U2VxdWVuY2VGbG93O1xuXG5CcG1uUnVsZXMucHJvdG90eXBlLmNhbkNvbm5lY3REYXRhQXNzb2NpYXRpb24gPSBjYW5Db25uZWN0RGF0YUFzc29jaWF0aW9uO1xuXG5CcG1uUnVsZXMucHJvdG90eXBlLmNhbkNvbm5lY3RBc3NvY2lhdGlvbiA9IGNhbkNvbm5lY3RBc3NvY2lhdGlvbjtcblxuQnBtblJ1bGVzLnByb3RvdHlwZS5jYW5Nb3ZlID0gY2FuTW92ZTtcblxuQnBtblJ1bGVzLnByb3RvdHlwZS5jYW5BdHRhY2ggPSBjYW5BdHRhY2g7XG5cbkJwbW5SdWxlcy5wcm90b3R5cGUuY2FuUmVwbGFjZSA9IGNhblJlcGxhY2U7XG5cbkJwbW5SdWxlcy5wcm90b3R5cGUuY2FuRHJvcCA9IGNhbkRyb3A7XG5cbkJwbW5SdWxlcy5wcm90b3R5cGUuY2FuSW5zZXJ0ID0gY2FuSW5zZXJ0O1xuXG5CcG1uUnVsZXMucHJvdG90eXBlLmNhbkNyZWF0ZSA9IGNhbkNyZWF0ZTtcblxuQnBtblJ1bGVzLnByb3RvdHlwZS5jYW5Db25uZWN0ID0gY2FuQ29ubmVjdDtcblxuQnBtblJ1bGVzLnByb3RvdHlwZS5jYW5SZXNpemUgPSBjYW5SZXNpemU7XG5cbkJwbW5SdWxlcy5wcm90b3R5cGUuY2FuQ29weSA9IGNhbkNvcHk7XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHJ1bGUgY2hlY2tpbmdcbiAqL1xuXG4vKipcbiAqIENoZWNrcyBpZiBnaXZlbiBlbGVtZW50IGNhbiBiZSB1c2VkIGZvciBzdGFydGluZyBjb25uZWN0aW9uLlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IHNvdXJjZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY2FuU3RhcnRDb25uZWN0aW9uKGVsZW1lbnQpIHtcbiAgaWYgKG5vbkV4aXN0aW5nT3JMYWJlbChlbGVtZW50KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIFtcbiAgICAnYnBtbjpGbG93Tm9kZScsXG4gICAgJ2JwbW46SW50ZXJhY3Rpb25Ob2RlJyxcbiAgICAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJyxcbiAgICAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnLFxuICAgICdicG1uOkdyb3VwJ1xuICBdKTtcbn1cblxuZnVuY3Rpb24gbm9uRXhpc3RpbmdPckxhYmVsKGVsZW1lbnQpIHtcbiAgcmV0dXJuICFlbGVtZW50IHx8IGlzTGFiZWwoZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGlzU2FtZShhLCBiKSB7XG4gIHJldHVybiBhID09PSBiO1xufVxuXG5mdW5jdGlvbiBnZXRPcmdhbml6YXRpb25hbFBhcmVudChlbGVtZW50KSB7XG5cbiAgZG8ge1xuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykpIHtcbiAgICAgIHJldHVybiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkucHJvY2Vzc1JlZiB8fFxuICAgICAgICBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KVxuICAgICAgKTtcbiAgICB9XG4gIH0gd2hpbGUgKChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnQpKTtcblxufVxuXG5mdW5jdGlvbiBpc1RleHRBbm5vdGF0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlRleHRBbm5vdGF0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIGlzR3JvdXAoZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46R3JvdXAnKSAmJiAhZWxlbWVudC5sYWJlbFRhcmdldDtcbn1cblxuZnVuY3Rpb24gaXNDb21wZW5zYXRpb25Cb3VuZGFyeShlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiZcbiAgICAgICAgIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIGlzRm9yQ29tcGVuc2F0aW9uKGUpIHtcbiAgcmV0dXJuIGdldEJ1c2luZXNzT2JqZWN0KGUpLmlzRm9yQ29tcGVuc2F0aW9uO1xufVxuXG5mdW5jdGlvbiBpc1NhbWVPcmdhbml6YXRpb24oYSwgYikge1xuICB2YXIgcGFyZW50QSA9IGdldE9yZ2FuaXphdGlvbmFsUGFyZW50KGEpLFxuICAgICAgcGFyZW50QiA9IGdldE9yZ2FuaXphdGlvbmFsUGFyZW50KGIpO1xuXG4gIHJldHVybiBwYXJlbnRBID09PSBwYXJlbnRCO1xufVxuXG5mdW5jdGlvbiBpc01lc3NhZ2VGbG93U291cmNlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBpcyhlbGVtZW50LCAnYnBtbjpJbnRlcmFjdGlvbk5vZGUnKSAmJlxuICAgICFpcyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiYgKFxuICAgICAgIWlzKGVsZW1lbnQsICdicG1uOkV2ZW50JykgfHwgKFxuICAgICAgICBpcyhlbGVtZW50LCAnYnBtbjpUaHJvd0V2ZW50JykgJiZcbiAgICAgICAgaGFzRXZlbnREZWZpbml0aW9uT3JOb25lKGVsZW1lbnQsICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nKVxuICAgICAgKVxuICAgIClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNNZXNzYWdlRmxvd1RhcmdldChlbGVtZW50KSB7XG4gIHJldHVybiAoXG4gICAgaXMoZWxlbWVudCwgJ2JwbW46SW50ZXJhY3Rpb25Ob2RlJykgJiZcbiAgICAhaXMoZWxlbWVudCwgJ2JwbW46Qm91bmRhcnlFdmVudCcpICYmXG4gICAgIWlzRm9yQ29tcGVuc2F0aW9uKGVsZW1lbnQpICYmIChcbiAgICAgICFpcyhlbGVtZW50LCAnYnBtbjpFdmVudCcpIHx8IChcbiAgICAgICAgaXMoZWxlbWVudCwgJ2JwbW46Q2F0Y2hFdmVudCcpICYmXG4gICAgICAgIGhhc0V2ZW50RGVmaW5pdGlvbk9yTm9uZShlbGVtZW50LCAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJylcbiAgICAgIClcbiAgICApXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldFNjb3BlUGFyZW50KGVsZW1lbnQpIHtcblxuICB2YXIgcGFyZW50ID0gZWxlbWVudDtcblxuICB3aGlsZSAoKHBhcmVudCA9IHBhcmVudC5wYXJlbnQpKSB7XG5cbiAgICBpZiAoaXMocGFyZW50LCAnYnBtbjpGbG93RWxlbWVudHNDb250YWluZXInKSkge1xuICAgICAgcmV0dXJuIGdldEJ1c2luZXNzT2JqZWN0KHBhcmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlzKHBhcmVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgICAgcmV0dXJuIGdldEJ1c2luZXNzT2JqZWN0KHBhcmVudCkucHJvY2Vzc1JlZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNTYW1lU2NvcGUoYSwgYikge1xuICB2YXIgc2NvcGVQYXJlbnRBID0gZ2V0U2NvcGVQYXJlbnQoYSksXG4gICAgICBzY29wZVBhcmVudEIgPSBnZXRTY29wZVBhcmVudChiKTtcblxuICByZXR1cm4gc2NvcGVQYXJlbnRBID09PSBzY29wZVBhcmVudEI7XG59XG5cbmZ1bmN0aW9uIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCBldmVudERlZmluaXRpb24pIHtcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgcmV0dXJuICEhZmluZChiby5ldmVudERlZmluaXRpb25zIHx8IFtdLCBmdW5jdGlvbihkZWZpbml0aW9uKSB7XG4gICAgcmV0dXJuIGlzKGRlZmluaXRpb24sIGV2ZW50RGVmaW5pdGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoYXNFdmVudERlZmluaXRpb25Pck5vbmUoZWxlbWVudCwgZXZlbnREZWZpbml0aW9uKSB7XG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIHJldHVybiAoYm8uZXZlbnREZWZpbml0aW9ucyB8fCBbXSkuZXZlcnkoZnVuY3Rpb24oZGVmaW5pdGlvbikge1xuICAgIHJldHVybiBpcyhkZWZpbml0aW9uLCBldmVudERlZmluaXRpb24pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNTZXF1ZW5jZUZsb3dTb3VyY2UoZWxlbWVudCkge1xuICByZXR1cm4gKFxuICAgIGlzKGVsZW1lbnQsICdicG1uOkZsb3dOb2RlJykgJiZcbiAgICAhaXMoZWxlbWVudCwgJ2JwbW46RW5kRXZlbnQnKSAmJlxuICAgICFpc0V2ZW50U3ViUHJvY2VzcyhlbGVtZW50KSAmJlxuICAgICEoaXMoZWxlbWVudCwgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcpICYmXG4gICAgICBoYXNFdmVudERlZmluaXRpb24oZWxlbWVudCwgJ2JwbW46TGlua0V2ZW50RGVmaW5pdGlvbicpXG4gICAgKSAmJlxuICAgICFpc0NvbXBlbnNhdGlvbkJvdW5kYXJ5KGVsZW1lbnQpICYmXG4gICAgIWlzRm9yQ29tcGVuc2F0aW9uKGVsZW1lbnQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzU2VxdWVuY2VGbG93VGFyZ2V0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBpcyhlbGVtZW50LCAnYnBtbjpGbG93Tm9kZScpICYmXG4gICAgIWlzKGVsZW1lbnQsICdicG1uOlN0YXJ0RXZlbnQnKSAmJlxuICAgICFpcyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiZcbiAgICAhaXNFdmVudFN1YlByb2Nlc3MoZWxlbWVudCkgJiZcbiAgICAhKGlzKGVsZW1lbnQsICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnKSAmJlxuICAgICAgaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nKVxuICAgICkgJiZcbiAgICAhaXNGb3JDb21wZW5zYXRpb24oZWxlbWVudClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNFdmVudEJhc2VkVGFyZ2V0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBpcyhlbGVtZW50LCAnYnBtbjpSZWNlaXZlVGFzaycpIHx8IChcbiAgICAgIGlzKGVsZW1lbnQsICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnKSAmJiAoXG4gICAgICAgIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJykgfHxcbiAgICAgICAgaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJykgfHxcbiAgICAgICAgaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJykgfHxcbiAgICAgICAgaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicpXG4gICAgICApXG4gICAgKVxuICApO1xufVxuXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC53YXlwb2ludHM7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmVudHMoZWxlbWVudCkge1xuXG4gIHZhciBwYXJlbnRzID0gW107XG5cbiAgd2hpbGUgKGVsZW1lbnQpIHtcbiAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnQ7XG5cbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcGFyZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJlbnRzO1xufVxuXG5mdW5jdGlvbiBpc1BhcmVudChwb3NzaWJsZVBhcmVudCwgZWxlbWVudCkge1xuICB2YXIgYWxsUGFyZW50cyA9IGdldFBhcmVudHMoZWxlbWVudCk7XG4gIHJldHVybiBhbGxQYXJlbnRzLmluZGV4T2YocG9zc2libGVQYXJlbnQpICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gY2FuQ29ubmVjdChzb3VyY2UsIHRhcmdldCwgY29ubmVjdGlvbikge1xuXG4gIGlmIChub25FeGlzdGluZ09yTGFiZWwoc291cmNlKSB8fCBub25FeGlzdGluZ09yTGFiZWwodGFyZ2V0KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKCFpcyhjb25uZWN0aW9uLCAnYnBtbjpEYXRhQXNzb2NpYXRpb24nKSkge1xuXG4gICAgaWYgKGNhbkNvbm5lY3RNZXNzYWdlRmxvdyhzb3VyY2UsIHRhcmdldCkpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdicG1uOk1lc3NhZ2VGbG93JyB9O1xuICAgIH1cblxuICAgIGlmIChjYW5Db25uZWN0U2VxdWVuY2VGbG93KHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ2JwbW46U2VxdWVuY2VGbG93JyB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb25uZWN0RGF0YUFzc29jaWF0aW9uID0gY2FuQ29ubmVjdERhdGFBc3NvY2lhdGlvbihzb3VyY2UsIHRhcmdldCk7XG5cbiAgaWYgKGNvbm5lY3REYXRhQXNzb2NpYXRpb24pIHtcbiAgICByZXR1cm4gY29ubmVjdERhdGFBc3NvY2lhdGlvbjtcbiAgfVxuXG4gIGlmIChpc0NvbXBlbnNhdGlvbkJvdW5kYXJ5KHNvdXJjZSkgJiYgaXNGb3JDb21wZW5zYXRpb24odGFyZ2V0KSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnYnBtbjpBc3NvY2lhdGlvbicsXG4gICAgICBhc3NvY2lhdGlvbkRpcmVjdGlvbjogJ09uZSdcbiAgICB9O1xuICB9XG5cbiAgaWYgKGNhbkNvbm5lY3RBc3NvY2lhdGlvbihzb3VyY2UsIHRhcmdldCkpIHtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnYnBtbjpBc3NvY2lhdGlvbidcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENhbiBhbiBlbGVtZW50IGJlIGRyb3BwZWQgaW50byB0aGUgdGFyZ2V0IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjYW5Ecm9wKGVsZW1lbnQsIHRhcmdldCwgcG9zaXRpb24pIHtcblxuICAvLyBjYW4gbW92ZSBsYWJlbHMgYW5kIGdyb3VwcyBldmVyeXdoZXJlXG4gIGlmIChpc0xhYmVsKGVsZW1lbnQpIHx8IGlzR3JvdXAoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG5cbiAgLy8gZGlzYWxsb3cgdG8gY3JlYXRlIGVsZW1lbnRzIG9uIGNvbGxhcHNlZCBwb29sc1xuICBpZiAoaXModGFyZ2V0LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmICFpc0V4cGFuZGVkKHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBhbGxvdyB0byBjcmVhdGUgbmV3IHBhcnRpY2lwYW50cyBvblxuICAvLyBleGlzdGluZyBjb2xsYWJvcmF0aW9uIGFuZCBwcm9jZXNzIGRpYWdyYW1zXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgcmV0dXJuIGlzKHRhcmdldCwgJ2JwbW46UHJvY2VzcycpIHx8IGlzKHRhcmdldCwgJ2JwbW46Q29sbGFib3JhdGlvbicpO1xuICB9XG5cbiAgLy8gYWxsb3cgbW92aW5nIERhdGFJbnB1dCAvIERhdGFPdXRwdXQgd2l0aGluIGl0cyBvcmlnaW5hbCBjb250YWluZXIgb25seVxuICBpZiAoaXNBbnkoZWxlbWVudCwgWyAnYnBtbjpEYXRhSW5wdXQnLCAnYnBtbjpEYXRhT3V0cHV0JyBdKSkge1xuXG4gICAgaWYgKGVsZW1lbnQucGFyZW50KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0ID09PSBlbGVtZW50LnBhcmVudDtcbiAgICB9XG4gIH1cblxuICAvLyBhbGxvdyBjcmVhdGluZyBsYW5lcyBvbiBwYXJ0aWNpcGFudHMgYW5kIG90aGVyIGxhbmVzIG9ubHlcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkxhbmUnKSkge1xuICAgIHJldHVybiBpcyh0YXJnZXQsICdicG1uOlBhcnRpY2lwYW50JykgfHwgaXModGFyZ2V0LCAnYnBtbjpMYW5lJyk7XG4gIH1cblxuICAvLyBkaXNhbGxvdyBkcm9wcGluZyBib3VuZGFyeSBldmVudHMgd2hpY2ggY2Fubm90IHJlcGxhY2Ugd2l0aCBpbnRlcm1lZGlhdGUgZXZlbnRcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSAmJiAhaXNEcm9wcGFibGVCb3VuZGFyeUV2ZW50KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gZHJvcCBmbG93IGVsZW1lbnRzIG9udG8gZmxvdyBlbGVtZW50IGNvbnRhaW5lcnNcbiAgLy8gYW5kIHBhcnRpY2lwYW50c1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46Rmxvd0VsZW1lbnQnKSAmJiAhaXMoZWxlbWVudCwgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJykpIHtcbiAgICBpZiAoaXModGFyZ2V0LCAnYnBtbjpGbG93RWxlbWVudHNDb250YWluZXInKSkge1xuICAgICAgcmV0dXJuIGlzRXhwYW5kZWQodGFyZ2V0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNBbnkodGFyZ2V0LCBbICdicG1uOlBhcnRpY2lwYW50JywgJ2JwbW46TGFuZScgXSk7XG4gIH1cblxuICAvLyBhY2NvdW50IGZvciB0aGUgZmFjdCB0aGF0IGRhdGEgYXNzb2NpYXRpb25zIGFyZSBhbHdheXNcbiAgLy8gcmVuZGVyZWQgYW5kIG1vdmVkIHRvIHRvcCAoUHJvY2VzcyBvciBDb2xsYWJvcmF0aW9uIGxldmVsKVxuICAvL1xuICAvLyBhcnRpZmFjdHMgbWF5IGJlIHBsYWNlZCB3aGVyZXZlciwgdG9vXG4gIGlmIChpc0FueShlbGVtZW50LCBbICdicG1uOkFydGlmYWN0JywgJ2JwbW46RGF0YUFzc29jaWF0aW9uJywgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJyBdKSkge1xuICAgIHJldHVybiBpc0FueSh0YXJnZXQsIFtcbiAgICAgICdicG1uOkNvbGxhYm9yYXRpb24nLFxuICAgICAgJ2JwbW46TGFuZScsXG4gICAgICAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgICAnYnBtbjpQcm9jZXNzJyxcbiAgICAgICdicG1uOlN1YlByb2Nlc3MnIF0pO1xuICB9XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOk1lc3NhZ2VGbG93JykpIHtcbiAgICByZXR1cm4gaXModGFyZ2V0LCAnYnBtbjpDb2xsYWJvcmF0aW9uJylcbiAgICAgIHx8IGVsZW1lbnQuc291cmNlLnBhcmVudCA9PSB0YXJnZXRcbiAgICAgIHx8IGVsZW1lbnQudGFyZ2V0LnBhcmVudCA9PSB0YXJnZXQ7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzRHJvcHBhYmxlQm91bmRhcnlFdmVudChldmVudCkge1xuICByZXR1cm4gZ2V0QnVzaW5lc3NPYmplY3QoZXZlbnQpLmNhbmNlbEFjdGl2aXR5ICYmIChcbiAgICBoYXNOb0V2ZW50RGVmaW5pdGlvbihldmVudCkgfHwgaGFzQ29tbW9uQm91bmRhcnlJbnRlcm1lZGlhdGVFdmVudERlZmluaXRpb24oZXZlbnQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzQm91bmRhcnlFdmVudChlbGVtZW50KSB7XG4gIHJldHVybiAhaXNMYWJlbChlbGVtZW50KSAmJiBpcyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50Jyk7XG59XG5cbmZ1bmN0aW9uIGlzTGFuZShlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpMYW5lJyk7XG59XG5cbi8qKlxuICogV2UgdHJlYXQgSW50ZXJtZWRpYXRlVGhyb3dFdmVudHMgYXMgYm91bmRhcnkgZXZlbnRzIGR1cmluZyBjcmVhdGUsXG4gKiB0aGlzIG11c3QgYmUgcmVmbGVjdGVkIGluIHRoZSBydWxlcy5cbiAqL1xuZnVuY3Rpb24gaXNCb3VuZGFyeUNhbmRpZGF0ZShlbGVtZW50KSB7XG4gIGlmIChpc0JvdW5kYXJ5RXZlbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JykgJiYgaGFzTm9FdmVudERlZmluaXRpb24oZWxlbWVudCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgaXMoZWxlbWVudCwgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcpICYmXG4gICAgaGFzQ29tbW9uQm91bmRhcnlJbnRlcm1lZGlhdGVFdmVudERlZmluaXRpb24oZWxlbWVudClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaGFzTm9FdmVudERlZmluaXRpb24oZWxlbWVudCkge1xuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICByZXR1cm4gYm8gJiYgIShiby5ldmVudERlZmluaXRpb25zICYmIGJvLmV2ZW50RGVmaW5pdGlvbnMubGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24gaGFzQ29tbW9uQm91bmRhcnlJbnRlcm1lZGlhdGVFdmVudERlZmluaXRpb24oZWxlbWVudCkge1xuICByZXR1cm4gaGFzT25lT2ZFdmVudERlZmluaXRpb25zKGVsZW1lbnQsIFtcbiAgICAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJyxcbiAgICAnYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbicsXG4gICAgJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbidcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGhhc09uZU9mRXZlbnREZWZpbml0aW9ucyhlbGVtZW50LCBldmVudERlZmluaXRpb25zKSB7XG4gIHJldHVybiBldmVudERlZmluaXRpb25zLnNvbWUoZnVuY3Rpb24oZGVmaW5pdGlvbikge1xuICAgIHJldHVybiBoYXNFdmVudERlZmluaXRpb24oZWxlbWVudCwgZGVmaW5pdGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc1JlY2VpdmVUYXNrQWZ0ZXJFdmVudEJhc2VkR2F0ZXdheShlbGVtZW50KSB7XG4gIHJldHVybiAoXG4gICAgaXMoZWxlbWVudCwgJ2JwbW46UmVjZWl2ZVRhc2snKSAmJlxuICAgIGZpbmQoZWxlbWVudC5pbmNvbWluZywgZnVuY3Rpb24oaW5jb21pbmcpIHtcbiAgICAgIHJldHVybiBpcyhpbmNvbWluZy5zb3VyY2UsICdicG1uOkV2ZW50QmFzZWRHYXRld2F5Jyk7XG4gICAgfSlcbiAgKTtcbn1cblxuXG5mdW5jdGlvbiBjYW5BdHRhY2goZWxlbWVudHMsIHRhcmdldCwgc291cmNlLCBwb3NpdGlvbikge1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IFsgZWxlbWVudHMgXTtcbiAgfVxuXG4gIC8vIG9ubHkgKHJlLSlhdHRhY2ggb25lIGVsZW1lbnQgYXQgYSB0aW1lXG4gIGlmIChlbGVtZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgZWxlbWVudCA9IGVsZW1lbnRzWzBdO1xuXG4gIC8vIGRvIG5vdCBhdHRhY2ggbGFiZWxzXG4gIGlmIChpc0xhYmVsKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gb25seSBoYW5kbGUgYm91bmRhcnkgZXZlbnRzXG4gIGlmICghaXNCb3VuZGFyeUNhbmRpZGF0ZShlbGVtZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGRpc2FsbG93IGRyb3Agb24gZXZlbnQgc3ViIHByb2Nlc3Nlc1xuICBpZiAoaXNFdmVudFN1YlByb2Nlc3ModGFyZ2V0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIG9ubHkgYWxsb3cgZHJvcCBvbiBub24gY29tcGVuc2F0aW9uIGFjdGl2aXRpZXNcbiAgaWYgKCFpcyh0YXJnZXQsICdicG1uOkFjdGl2aXR5JykgfHwgaXNGb3JDb21wZW5zYXRpb24odGFyZ2V0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIG9ubHkgYXR0YWNoIHRvIHN1YnByb2Nlc3MgYm9yZGVyXG4gIGlmIChwb3NpdGlvbiAmJiAhaXNCb3VuZGFyeUF0dGFjaG1lbnQocG9zaXRpb24sIHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBkbyBub3QgYXR0YWNoIG9uIHJlY2VpdmUgdGFza3MgYWZ0ZXIgZXZlbnQgYmFzZWQgZ2F0ZXdheXNcbiAgaWYgKGlzUmVjZWl2ZVRhc2tBZnRlckV2ZW50QmFzZWRHYXRld2F5KHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gJ2F0dGFjaCc7XG59XG5cblxuLyoqXG4gKiBEZWZpbmVzIGhvdyB0byByZXBsYWNlIGVsZW1lbnRzIGZvciBhIGdpdmVuIHRhcmdldC5cbiAqXG4gKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIGVsZW1lbnRzIHdoaWNoIHdpbGwgYmUgcmVwbGFjZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgW3sgaWQ6ICdJbnRlcm1lZGlhdGVFdmVudF8yJyxcbiAqICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50J1xuICogICB9LFxuICogICB7IGlkOiAnSW50ZXJtZWRpYXRlRXZlbnRfNScsXG4gKiAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnXG4gKiAgIH1dXG4gKlxuICogQHBhcmFtICB7QXJyYXl9IGVsZW1lbnRzXG4gKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIGVsZW1lbnRzIHdoaWNoIGhhdmUgdG8gYmUgcmVwbGFjZWRcbiAqL1xuZnVuY3Rpb24gY2FuUmVwbGFjZShlbGVtZW50cywgdGFyZ2V0LCBwb3NpdGlvbikge1xuXG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGNhbkV4ZWN1dGUgPSB7XG4gICAgcmVwbGFjZW1lbnRzOiBbXVxuICB9O1xuXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgIGlmICghaXNFdmVudFN1YlByb2Nlc3ModGFyZ2V0KSkge1xuXG4gICAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46U3RhcnRFdmVudCcpICYmXG4gICAgICAgICAgZWxlbWVudC50eXBlICE9PSAnbGFiZWwnICYmXG4gICAgICAgICAgY2FuRHJvcChlbGVtZW50LCB0YXJnZXQpKSB7XG5cbiAgICAgICAgLy8gcmVwbGFjZSBhIG5vbi1pbnRlcnJ1cHRpbmcgc3RhcnQgZXZlbnQgYnkgYSBibGFuayBpbnRlcnJ1cHRpbmcgc3RhcnQgZXZlbnRcbiAgICAgICAgLy8gd2hlbiB0aGUgdGFyZ2V0IGlzIG5vdCBhbiBldmVudCBzdWIgcHJvY2Vzc1xuICAgICAgICBpZiAoIWlzSW50ZXJydXB0aW5nKGVsZW1lbnQpKSB7XG4gICAgICAgICAgY2FuRXhlY3V0ZS5yZXBsYWNlbWVudHMucHVzaCh7XG4gICAgICAgICAgICBvbGRFbGVtZW50SWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgICAgICBuZXdFbGVtZW50VHlwZTogJ2JwbW46U3RhcnRFdmVudCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlcGxhY2UgYW4gZXJyb3IvZXNjYWxhdGlvbi9jb21wZW5zYXRlIHN0YXJ0IGV2ZW50IGJ5IGEgYmxhbmsgaW50ZXJydXB0aW5nIHN0YXJ0IGV2ZW50XG4gICAgICAgIC8vIHdoZW4gdGhlIHRhcmdldCBpcyBub3QgYW4gZXZlbnQgc3ViIHByb2Nlc3NcbiAgICAgICAgaWYgKGhhc0Vycm9yRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHx8XG4gICAgICAgICAgICBoYXNFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHx8XG4gICAgICAgICAgICBoYXNDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpKSB7XG4gICAgICAgICAgY2FuRXhlY3V0ZS5yZXBsYWNlbWVudHMucHVzaCh7XG4gICAgICAgICAgICBvbGRFbGVtZW50SWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgICAgICBuZXdFbGVtZW50VHlwZTogJ2JwbW46U3RhcnRFdmVudCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlcGxhY2UgYSB0eXBlZCBzdGFydCBldmVudCBieSBhIGJsYW5rIGludGVycnVwdGluZyBzdGFydCBldmVudFxuICAgICAgICAvLyB3aGVuIHRoZSB0YXJnZXQgaXMgYSBzdWIgcHJvY2VzcyBidXQgbm90IGFuIGV2ZW50IHN1YiBwcm9jZXNzXG4gICAgICAgIGlmIChoYXNPbmVPZkV2ZW50RGVmaW5pdGlvbnMoZWxlbWVudCxcbiAgICAgICAgICBbXG4gICAgICAgICAgICAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJyxcbiAgICAgICAgICAgICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJyxcbiAgICAgICAgICAgICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicsXG4gICAgICAgICAgICAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICAgICAgICBdKSAmJlxuICAgICAgICAgICAgaXModGFyZ2V0LCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcbiAgICAgICAgICBjYW5FeGVjdXRlLnJlcGxhY2VtZW50cy5wdXNoKHtcbiAgICAgICAgICAgIG9sZEVsZW1lbnRJZDogZWxlbWVudC5pZCxcbiAgICAgICAgICAgIG5ld0VsZW1lbnRUeXBlOiAnYnBtbjpTdGFydEV2ZW50J1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpcyh0YXJnZXQsICdicG1uOlRyYW5zYWN0aW9uJykpIHtcbiAgICAgIGlmIChoYXNFdmVudERlZmluaXRpb24oZWxlbWVudCwgJ2JwbW46Q2FuY2VsRXZlbnREZWZpbml0aW9uJykgJiZcbiAgICAgICAgICBlbGVtZW50LnR5cGUgIT09ICdsYWJlbCcpIHtcblxuICAgICAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46RW5kRXZlbnQnKSAmJiBjYW5Ecm9wKGVsZW1lbnQsIHRhcmdldCkpIHtcbiAgICAgICAgICBjYW5FeGVjdXRlLnJlcGxhY2VtZW50cy5wdXNoKHtcbiAgICAgICAgICAgIG9sZEVsZW1lbnRJZDogZWxlbWVudC5pZCxcbiAgICAgICAgICAgIG5ld0VsZW1lbnRUeXBlOiAnYnBtbjpFbmRFdmVudCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiYgY2FuQXR0YWNoKGVsZW1lbnQsIHRhcmdldCwgbnVsbCwgcG9zaXRpb24pKSB7XG4gICAgICAgICAgY2FuRXhlY3V0ZS5yZXBsYWNlbWVudHMucHVzaCh7XG4gICAgICAgICAgICBvbGRFbGVtZW50SWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgICAgICBuZXdFbGVtZW50VHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNhbkV4ZWN1dGUucmVwbGFjZW1lbnRzLmxlbmd0aCA/IGNhbkV4ZWN1dGUgOiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY2FuTW92ZShlbGVtZW50cywgdGFyZ2V0KSB7XG5cbiAgLy8gZG8gbm90IG1vdmUgc2VsZWN0aW9uIGNvbnRhaW5pbmcgbGFuZXNcbiAgaWYgKHNvbWUoZWxlbWVudHMsIGlzTGFuZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBhbGxvdyBkZWZhdWx0IG1vdmUgY2hlY2sgdG8gc3RhcnQgbW92ZSBvcGVyYXRpb25cbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50cy5ldmVyeShmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGNhbkRyb3AoZWxlbWVudCwgdGFyZ2V0KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNhbkNyZWF0ZShzaGFwZSwgdGFyZ2V0LCBzb3VyY2UsIHBvc2l0aW9uKSB7XG5cbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNMYWJlbChzaGFwZSkgfHwgaXNHcm91cChzaGFwZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc1NhbWUoc291cmNlLCB0YXJnZXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gZW5zdXJlIHdlIGRvIG5vdCBkcm9wIHRoZSBlbGVtZW50XG4gIC8vIGludG8gc291cmNlXG4gIGlmIChzb3VyY2UgJiYgaXNQYXJlbnQoc291cmNlLCB0YXJnZXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGNhbkRyb3Aoc2hhcGUsIHRhcmdldCwgcG9zaXRpb24pIHx8IGNhbkluc2VydChzaGFwZSwgdGFyZ2V0LCBwb3NpdGlvbik7XG59XG5cbmZ1bmN0aW9uIGNhblJlc2l6ZShzaGFwZSwgbmV3Qm91bmRzKSB7XG4gIGlmIChpcyhzaGFwZSwgJ2JwbW46U3ViUHJvY2VzcycpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGlzRXhwYW5kZWQoc2hhcGUpICYmIChcbiAgICAgICAgIW5ld0JvdW5kcyB8fCAobmV3Qm91bmRzLndpZHRoID49IDEwMCAmJiBuZXdCb3VuZHMuaGVpZ2h0ID49IDgwKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBpZiAoaXMoc2hhcGUsICdicG1uOkxhbmUnKSkge1xuICAgIHJldHVybiAhbmV3Qm91bmRzIHx8IChuZXdCb3VuZHMud2lkdGggPj0gMTMwICYmIG5ld0JvdW5kcy5oZWlnaHQgPj0gNjApO1xuICB9XG5cbiAgaWYgKGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgcmV0dXJuICFuZXdCb3VuZHMgfHwgKG5ld0JvdW5kcy53aWR0aCA+PSAyNTAgJiYgbmV3Qm91bmRzLmhlaWdodCA+PSA1MCk7XG4gIH1cblxuICBpZiAoaXNUZXh0QW5ub3RhdGlvbihzaGFwZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0dyb3VwKHNoYXBlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrLCB3aGV0aGVyIG9uZSBzaWRlIG9mIHRoZSByZWxhdGlvbnNoaXBcbiAqIGlzIGEgdGV4dCBhbm5vdGF0aW9uLlxuICovXG5mdW5jdGlvbiBpc09uZVRleHRBbm5vdGF0aW9uKHNvdXJjZSwgdGFyZ2V0KSB7XG5cbiAgdmFyIHNvdXJjZVRleHRBbm5vdGF0aW9uID0gaXNUZXh0QW5ub3RhdGlvbihzb3VyY2UpLFxuICAgICAgdGFyZ2V0VGV4dEFubm90YXRpb24gPSBpc1RleHRBbm5vdGF0aW9uKHRhcmdldCk7XG5cbiAgcmV0dXJuIChcbiAgICAoc291cmNlVGV4dEFubm90YXRpb24gfHwgdGFyZ2V0VGV4dEFubm90YXRpb24pICYmXG4gICAgKHNvdXJjZVRleHRBbm5vdGF0aW9uICE9PSB0YXJnZXRUZXh0QW5ub3RhdGlvbilcbiAgKTtcbn1cblxuXG5mdW5jdGlvbiBjYW5Db25uZWN0QXNzb2NpYXRpb24oc291cmNlLCB0YXJnZXQpIHtcblxuICAvLyBkbyBub3QgY29ubmVjdCBjb25uZWN0aW9uc1xuICBpZiAoaXNDb25uZWN0aW9uKHNvdXJjZSkgfHwgaXNDb25uZWN0aW9uKHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBjb21wZW5zYXRpb24gYm91bmRhcnkgZXZlbnRzIGFyZSBleGNlcHRpb25cbiAgaWYgKGlzQ29tcGVuc2F0aW9uQm91bmRhcnkoc291cmNlKSAmJiBpc0ZvckNvbXBlbnNhdGlvbih0YXJnZXQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBkb24ndCBjb25uZWN0IHBhcmVudCA8LT4gY2hpbGRcbiAgaWYgKGlzUGFyZW50KHRhcmdldCwgc291cmNlKSB8fCBpc1BhcmVudChzb3VyY2UsIHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBhbGxvdyBjb25uZWN0aW9uIG9mIGFzc29jaWF0aW9ucyBiZXR3ZWVuIDwhVGV4dEFubm90YXRpb24+IGFuZCA8VGV4dEFubm90YXRpb24+XG4gIGlmIChpc09uZVRleHRBbm5vdGF0aW9uKHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gY2FuIGNvbm5lY3QgYXNzb2NpYXRpb25zIHdoZXJlIHdlIGNhbiBjb25uZWN0XG4gIC8vIGRhdGEgYXNzb2NpYXRpb25zLCB0b28gKCEpXG4gIHJldHVybiAhIWNhbkNvbm5lY3REYXRhQXNzb2NpYXRpb24oc291cmNlLCB0YXJnZXQpO1xufVxuXG5mdW5jdGlvbiBjYW5Db25uZWN0TWVzc2FnZUZsb3coc291cmNlLCB0YXJnZXQpIHtcblxuICAvLyBkdXJpbmcgY29ubmVjdCB1c2VyIG1pZ2h0IG1vdmUgbW91c2Ugb3V0IG9mIGNhbnZhc1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnBtbi1pby9icG1uLWpzL2lzc3Vlcy8xMDMzXG4gIGlmIChnZXRSb290RWxlbWVudChzb3VyY2UpICYmICFnZXRSb290RWxlbWVudCh0YXJnZXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBpc01lc3NhZ2VGbG93U291cmNlKHNvdXJjZSkgJiZcbiAgICBpc01lc3NhZ2VGbG93VGFyZ2V0KHRhcmdldCkgJiZcbiAgICAhaXNTYW1lT3JnYW5pemF0aW9uKHNvdXJjZSwgdGFyZ2V0KVxuICApO1xufVxuXG5mdW5jdGlvbiBjYW5Db25uZWN0U2VxdWVuY2VGbG93KHNvdXJjZSwgdGFyZ2V0KSB7XG5cbiAgaWYgKFxuICAgIGlzRXZlbnRCYXNlZFRhcmdldCh0YXJnZXQpICYmXG4gICAgdGFyZ2V0LmluY29taW5nLmxlbmd0aCA+IDAgJiZcbiAgICBhcmVPdXRnb2luZ0V2ZW50QmFzZWRHYXRld2F5Q29ubmVjdGlvbnModGFyZ2V0LmluY29taW5nKSAmJlxuICAgICFpcyhzb3VyY2UsICdicG1uOkV2ZW50QmFzZWRHYXRld2F5JylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzU2VxdWVuY2VGbG93U291cmNlKHNvdXJjZSkgJiZcbiAgICAgICAgIGlzU2VxdWVuY2VGbG93VGFyZ2V0KHRhcmdldCkgJiZcbiAgICAgICAgIGlzU2FtZVNjb3BlKHNvdXJjZSwgdGFyZ2V0KSAmJlxuICAgICAgICAgIShpcyhzb3VyY2UsICdicG1uOkV2ZW50QmFzZWRHYXRld2F5JykgJiYgIWlzRXZlbnRCYXNlZFRhcmdldCh0YXJnZXQpKTtcbn1cblxuXG5mdW5jdGlvbiBjYW5Db25uZWN0RGF0YUFzc29jaWF0aW9uKHNvdXJjZSwgdGFyZ2V0KSB7XG5cbiAgaWYgKGlzQW55KHNvdXJjZSwgWyAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJywgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJyBdKSAmJlxuICAgICAgaXNBbnkodGFyZ2V0LCBbICdicG1uOkFjdGl2aXR5JywgJ2JwbW46VGhyb3dFdmVudCcgXSkpIHtcbiAgICByZXR1cm4geyB0eXBlOiAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbicgfTtcbiAgfVxuXG4gIGlmIChpc0FueSh0YXJnZXQsIFsgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScgXSkgJiZcbiAgICAgIGlzQW55KHNvdXJjZSwgWyAnYnBtbjpBY3Rpdml0eScsICdicG1uOkNhdGNoRXZlbnQnIF0pKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogJ2JwbW46RGF0YU91dHB1dEFzc29jaWF0aW9uJyB9O1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjYW5JbnNlcnQoc2hhcGUsIGZsb3csIHBvc2l0aW9uKSB7XG5cbiAgaWYgKCFmbG93KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc2hhcGUpKSB7XG4gICAgaWYgKHNoYXBlLmxlbmd0aCAhPT0gMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNoYXBlID0gc2hhcGVbMF07XG4gIH1cblxuICBpZiAoZmxvdy5zb3VyY2UgPT09IHNoYXBlIHx8XG4gICAgICBmbG93LnRhcmdldCA9PT0gc2hhcGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyByZXR1cm4gdHJ1ZSBpZiB3ZSBjYW4gZHJvcCBvbiB0aGVcbiAgLy8gdW5kZXJseWluZyBmbG93IHBhcmVudFxuICAvL1xuICAvLyBhdCB0aGlzIHBvaW50IHdlIGFyZSBub3QgcmVhbGx5IGFibGUgdG8gdGFsa1xuICAvLyBhYm91dCBjb25uZWN0aW9uIHJ1bGVzICh5ZXQpXG5cbiAgcmV0dXJuIChcbiAgICBpc0FueShmbG93LCBbICdicG1uOlNlcXVlbmNlRmxvdycsICdicG1uOk1lc3NhZ2VGbG93JyBdKSAmJlxuICAgICFpc0xhYmVsKGZsb3cpICYmXG4gICAgaXMoc2hhcGUsICdicG1uOkZsb3dOb2RlJykgJiZcbiAgICAhaXMoc2hhcGUsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSAmJlxuICAgIGNhbkRyb3Aoc2hhcGUsIGZsb3cucGFyZW50LCBwb3NpdGlvbikpO1xufVxuXG5mdW5jdGlvbiBpbmNsdWRlcyhlbGVtZW50cywgZWxlbWVudCkge1xuICByZXR1cm4gKGVsZW1lbnRzICYmIGVsZW1lbnQpICYmIGVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgIT09IC0xO1xufVxuXG5mdW5jdGlvbiBjYW5Db3B5KGVsZW1lbnRzLCBlbGVtZW50KSB7XG4gIGlmIChpc0xhYmVsKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46TGFuZScpICYmICFpbmNsdWRlcyhlbGVtZW50cywgZWxlbWVudC5wYXJlbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzT3V0Z29pbmdFdmVudEJhc2VkR2F0ZXdheUNvbm5lY3Rpb24oY29ubmVjdGlvbikge1xuXG4gIGlmIChjb25uZWN0aW9uICYmIGNvbm5lY3Rpb24uc291cmNlKSB7XG4gICAgcmV0dXJuIGlzKGNvbm5lY3Rpb24uc291cmNlLCAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFyZU91dGdvaW5nRXZlbnRCYXNlZEdhdGV3YXlDb25uZWN0aW9ucyhjb25uZWN0aW9ucykge1xuICBjb25uZWN0aW9ucyA9IGNvbm5lY3Rpb25zIHx8IFtdO1xuXG4gIHJldHVybiBjb25uZWN0aW9ucy5zb21lKGlzT3V0Z29pbmdFdmVudEJhc2VkR2F0ZXdheUNvbm5lY3Rpb24pO1xufVxuXG5mdW5jdGlvbiBnZXRSb290RWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRQYXJlbnQoZWxlbWVudCwgJ2JwbW46UHJvY2VzcycpIHx8IGdldFBhcmVudChlbGVtZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJyk7XG59XG4iLCJpbXBvcnQgUnVsZXNNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcnVsZXMnO1xuXG5pbXBvcnQgQnBtblJ1bGVzIGZyb20gJy4vQnBtblJ1bGVzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIFJ1bGVzTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdicG1uUnVsZXMnIF0sXG4gIGJwbW5SdWxlczogWyAndHlwZScsIEJwbW5SdWxlcyBdXG59O1xuIiwiaW1wb3J0IHtcbiAgbWFwLFxuICBmaWx0ZXIsXG4gIHNvcnRCeVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGdldExhYmVsXG59IGZyb20gJy4uL2xhYmVsLWVkaXRpbmcvTGFiZWxVdGlsJztcblxuXG4vKipcbiAqIFByb3ZpZGVzIGFiaWxpdHkgdG8gc2VhcmNoIHRocm91Z2ggQlBNTiBlbGVtZW50c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uU2VhcmNoUHJvdmlkZXIoZWxlbWVudFJlZ2lzdHJ5LCBzZWFyY2hQYWQsIGNhbnZhcykge1xuXG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuXG4gIHNlYXJjaFBhZC5yZWdpc3RlclByb3ZpZGVyKHRoaXMpO1xufVxuXG5CcG1uU2VhcmNoUHJvdmlkZXIuJGluamVjdCA9IFtcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdzZWFyY2hQYWQnLFxuICAnY2FudmFzJ1xuXTtcblxuXG4vKipcbiAqIEZpbmRzIGFsbCBlbGVtZW50cyB0aGF0IG1hdGNoIGdpdmVuIHBhdHRlcm5cbiAqXG4gKiA8UmVzdWx0PiA6XG4gKiAge1xuICogICAgcHJpbWFyeVRva2VuczogPEFycmF5PFRva2VuPj4sXG4gKiAgICBzZWNvbmRhcnlUb2tlbnM6IDxBcnJheTxUb2tlbj4+LFxuICogICAgZWxlbWVudDogPEVsZW1lbnQ+XG4gKiAgfVxuICpcbiAqIDxUb2tlbj4gOlxuICogIHtcbiAqICAgIG5vcm1hbHxtYXRjaGVkOiA8c3RyaW5nPlxuICogIH1cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHBhdHRlcm5cbiAqIEByZXR1cm4ge0FycmF5PFJlc3VsdD59XG4gKi9cbkJwbW5TZWFyY2hQcm92aWRlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHBhdHRlcm4pIHtcbiAgdmFyIHJvb3RFbGVtZW50ID0gdGhpcy5fY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XG5cbiAgdmFyIGVsZW1lbnRzID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQubGFiZWxUYXJnZXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG4gIC8vIGRvIG5vdCBpbmNsdWRlIHJvb3QgZWxlbWVudFxuICBlbGVtZW50cyA9IGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50ICE9PSByb290RWxlbWVudDtcbiAgfSk7XG5cbiAgZWxlbWVudHMgPSBtYXAoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJpbWFyeVRva2VuczogbWF0Y2hBbmRTcGxpdChnZXRMYWJlbChlbGVtZW50KSwgcGF0dGVybiksXG4gICAgICBzZWNvbmRhcnlUb2tlbnM6IG1hdGNoQW5kU3BsaXQoZWxlbWVudC5pZCwgcGF0dGVybiksXG4gICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gZXhjbHVkZSBub24tbWF0Y2hlZCBlbGVtZW50c1xuICBlbGVtZW50cyA9IGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBoYXNNYXRjaGVkKGVsZW1lbnQucHJpbWFyeVRva2VucykgfHwgaGFzTWF0Y2hlZChlbGVtZW50LnNlY29uZGFyeVRva2Vucyk7XG4gIH0pO1xuXG4gIGVsZW1lbnRzID0gc29ydEJ5KGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGdldExhYmVsKGVsZW1lbnQuZWxlbWVudCkgKyBlbGVtZW50LmVsZW1lbnQuaWQ7XG4gIH0pO1xuXG4gIHJldHVybiBlbGVtZW50cztcbn07XG5cblxuZnVuY3Rpb24gaGFzTWF0Y2hlZCh0b2tlbnMpIHtcbiAgdmFyIG1hdGNoZWQgPSBmaWx0ZXIodG9rZW5zLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuICEhdC5tYXRjaGVkO1xuICB9KTtcblxuICByZXR1cm4gbWF0Y2hlZC5sZW5ndGggPiAwO1xufVxuXG5cbmZ1bmN0aW9uIG1hdGNoQW5kU3BsaXQodGV4dCwgcGF0dGVybikge1xuICB2YXIgdG9rZW5zID0gW10sXG4gICAgICBvcmlnaW5hbFRleHQgPSB0ZXh0O1xuXG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiB0b2tlbnM7XG4gIH1cblxuICB0ZXh0ID0gdGV4dC50b0xvd2VyQ2FzZSgpO1xuICBwYXR0ZXJuID0gcGF0dGVybi50b0xvd2VyQ2FzZSgpO1xuXG4gIHZhciBpID0gdGV4dC5pbmRleE9mKHBhdHRlcm4pO1xuXG4gIGlmIChpID4gLTEpIHtcbiAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgdG9rZW5zLnB1c2goe1xuICAgICAgICBub3JtYWw6IG9yaWdpbmFsVGV4dC5zdWJzdHIoMCwgaSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRva2Vucy5wdXNoKHtcbiAgICAgIG1hdGNoZWQ6IG9yaWdpbmFsVGV4dC5zdWJzdHIoaSwgcGF0dGVybi5sZW5ndGgpXG4gICAgfSk7XG5cbiAgICBpZiAocGF0dGVybi5sZW5ndGggKyBpIDwgdGV4dC5sZW5ndGgpIHtcbiAgICAgIHRva2Vucy5wdXNoKHtcbiAgICAgICAgbm9ybWFsOiBvcmlnaW5hbFRleHQuc3Vic3RyKHBhdHRlcm4ubGVuZ3RoICsgaSwgdGV4dC5sZW5ndGgpXG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdG9rZW5zLnB1c2goe1xuICAgICAgbm9ybWFsOiBvcmlnaW5hbFRleHRcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59IiwiaW1wb3J0IFNlYXJjaFBhZE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zZWFyY2gtcGFkJztcblxuaW1wb3J0IEJwbW5TZWFyY2hQcm92aWRlciBmcm9tICcuL0JwbW5TZWFyY2hQcm92aWRlcic7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIFNlYXJjaFBhZE1vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAnYnBtblNlYXJjaCddLFxuICBicG1uU2VhcmNoOiBbICd0eXBlJywgQnBtblNlYXJjaFByb3ZpZGVyIF1cbn07XG4iLCJpbXBvcnQge1xyXG4gIG1pZCxcclxuICBzZXRTbmFwcGVkXHJcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc25hcHBpbmcvU25hcFV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNDbWQgfSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9rZXlib2FyZC9LZXlib2FyZFV0aWwnO1xyXG5cclxuaW1wb3J0IHtcclxuICBnZXRPcmllbnRhdGlvblxyXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcclxuXHJcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNBbnkgfSBmcm9tICcuLi9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBzb21lIH0gZnJvbSAnbWluLWRhc2gnO1xyXG5cclxudmFyIEhJR0hFUl9QUklPUklUWSA9IDEyNTA7XHJcblxyXG52YXIgQk9VTkRBUllfVE9fSE9TVF9USFJFU0hPTEQgPSA0MDtcclxuXHJcbnZhciBUQVJHRVRfQk9VTkRTX1BBRERJTkcgPSAyMCxcclxuICAgIFRBU0tfQk9VTkRTX1BBRERJTkcgPSAxMDtcclxuXHJcbnZhciBUQVJHRVRfQ0VOVEVSX1BBRERJTkcgPSAyMDtcclxuXHJcbnZhciBBWEVTID0gWyAneCcsICd5JyBdO1xyXG5cclxudmFyIGFicyA9IE1hdGguYWJzO1xyXG5cclxuLyoqXHJcbiAqIFNuYXAgZHVyaW5nIGNvbm5lY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uQ29ubmVjdFNuYXBwaW5nKGV2ZW50QnVzKSB7XHJcbiAgZXZlbnRCdXMub24oW1xyXG4gICAgJ2Nvbm5lY3QuaG92ZXInLFxyXG4gICAgJ2Nvbm5lY3QubW92ZScsXHJcbiAgICAnY29ubmVjdC5lbmQnLFxyXG4gIF0sIEhJR0hFUl9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlLFxyXG4gICAgICAgIHN0YXJ0ID0gY29udGV4dC5zdGFydCxcclxuICAgICAgICBob3ZlciA9IGNvbnRleHQuaG92ZXIsXHJcbiAgICAgICAgc291cmNlID0gY29udGV4dC5zb3VyY2UsXHJcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XHJcblxyXG4gICAgLy8gZG8gTk9UIHNuYXAgb24gQ01EXHJcbiAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudCAmJiBpc0NtZChldmVudC5vcmlnaW5hbEV2ZW50KSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjb250ZXh0LmluaXRpYWxDb25uZWN0aW9uU3RhcnQpIHtcclxuICAgICAgY29udGV4dC5pbml0aWFsQ29ubmVjdGlvblN0YXJ0ID0gY29udGV4dC5jb25uZWN0aW9uU3RhcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc25hcCBob3ZlclxyXG4gICAgaWYgKGNhbkV4ZWN1dGUgJiYgaG92ZXIpIHtcclxuICAgICAgc25hcFRvU2hhcGUoZXZlbnQsIGhvdmVyLCBnZXRUYXJnZXRCb3VuZHNQYWRkaW5nKGhvdmVyKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhvdmVyICYmIGlzQW55VHlwZShjYW5FeGVjdXRlLCBbXHJcbiAgICAgICdicG1uOkFzc29jaWF0aW9uJyxcclxuICAgICAgJ2JwbW46RGF0YUlucHV0QXNzb2NpYXRpb24nLFxyXG4gICAgICAnYnBtbjpEYXRhT3V0cHV0QXNzb2NpYXRpb24nLFxyXG4gICAgICAnYnBtbjpTZXF1ZW5jZUZsb3cnXHJcbiAgICBdKSkge1xyXG4gICAgICBjb250ZXh0LmNvbm5lY3Rpb25TdGFydCA9IG1pZChzdGFydCk7XHJcblxyXG4gICAgICAvLyBzbmFwIGhvdmVyXHJcbiAgICAgIGlmIChpc0FueShob3ZlciwgWyAnYnBtbjpFdmVudCcsICdicG1uOkdhdGV3YXknIF0pKSB7XHJcbiAgICAgICAgc25hcFRvUG9zaXRpb24oZXZlbnQsIG1pZChob3ZlcikpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBzbmFwIGhvdmVyXHJcbiAgICAgIGlmIChpc0FueShob3ZlciwgWyAnYnBtbjpUYXNrJywgJ2JwbW46U3ViUHJvY2VzcycgXSkpIHtcclxuICAgICAgICBzbmFwVG9UYXJnZXRNaWQoZXZlbnQsIGhvdmVyKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gc25hcCBzb3VyY2UgYW5kIHRhcmdldFxyXG4gICAgICBpZiAoaXMoc291cmNlLCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiYgdGFyZ2V0ID09PSBzb3VyY2UuaG9zdCkge1xyXG4gICAgICAgIHNuYXBCb3VuZGFyeUV2ZW50TG9vcChldmVudCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2UgaWYgKGlzVHlwZShjYW5FeGVjdXRlLCAnYnBtbjpNZXNzYWdlRmxvdycpKSB7XHJcblxyXG4gICAgICBpZiAoaXMoc3RhcnQsICdicG1uOkV2ZW50JykpIHtcclxuXHJcbiAgICAgICAgLy8gc25hcCBzdGFydFxyXG4gICAgICAgIGNvbnRleHQuY29ubmVjdGlvblN0YXJ0ID0gbWlkKHN0YXJ0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzKGhvdmVyLCAnYnBtbjpFdmVudCcpKSB7XHJcblxyXG4gICAgICAgIC8vIHNuYXAgaG92ZXJcclxuICAgICAgICBzbmFwVG9Qb3NpdGlvbihldmVudCwgbWlkKGhvdmVyKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgLy8gdW4tc25hcCBzb3VyY2VcclxuICAgICAgY29udGV4dC5jb25uZWN0aW9uU3RhcnQgPSBjb250ZXh0LmluaXRpYWxDb25uZWN0aW9uU3RhcnQ7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbkJwbW5Db25uZWN0U25hcHBpbmcuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdO1xyXG5cclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5cclxuLy8gc25hcCB0byB0YXJnZXQgaWYgZXZlbnQgaW4gdGFyZ2V0XHJcbmZ1bmN0aW9uIHNuYXBUb1NoYXBlKGV2ZW50LCB0YXJnZXQsIHBhZGRpbmcpIHtcclxuICBBWEVTLmZvckVhY2goZnVuY3Rpb24oYXhpcykge1xyXG4gICAgdmFyIGRpbWVuc2lvbkZvckF4aXMgPSBnZXREaW1lbnNpb25Gb3JBeGlzKGF4aXMsIHRhcmdldCk7XHJcblxyXG4gICAgaWYgKGV2ZW50WyBheGlzIF0gPCB0YXJnZXRbIGF4aXMgXSArIHBhZGRpbmcpIHtcclxuICAgICAgc2V0U25hcHBlZChldmVudCwgYXhpcywgdGFyZ2V0WyBheGlzIF0gKyBwYWRkaW5nKTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnRbIGF4aXMgXSA+IHRhcmdldFsgYXhpcyBdICsgZGltZW5zaW9uRm9yQXhpcyAtIHBhZGRpbmcpIHtcclxuICAgICAgc2V0U25hcHBlZChldmVudCwgYXhpcywgdGFyZ2V0WyBheGlzIF0gKyBkaW1lbnNpb25Gb3JBeGlzIC0gcGFkZGluZyk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbi8vIHNuYXAgdG8gdGFyZ2V0IG1pZCBpZiBldmVudCBpbiB0YXJnZXQgbWlkXHJcbmZ1bmN0aW9uIHNuYXBUb1RhcmdldE1pZChldmVudCwgdGFyZ2V0KSB7XHJcbiAgdmFyIHRhcmdldE1pZCA9IG1pZCh0YXJnZXQpO1xyXG5cclxuICBBWEVTLmZvckVhY2goZnVuY3Rpb24oYXhpcykge1xyXG4gICAgaWYgKGlzTWlkKGV2ZW50LCB0YXJnZXQsIGF4aXMpKSB7XHJcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsIGF4aXMsIHRhcmdldE1pZFsgYXhpcyBdKTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuLy8gc25hcCB0byBwcmV2ZW50IGxvb3Agb3ZlcmxhcHBpbmcgYm91bmRhcnkgZXZlbnRcclxuZnVuY3Rpb24gc25hcEJvdW5kYXJ5RXZlbnRMb29wKGV2ZW50KSB7XHJcbiAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcclxuICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XHJcblxyXG4gIGlmIChpc1JldmVyc2UoY29udGV4dCkpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHZhciBzb3VyY2VNaWQgPSBtaWQoc291cmNlKSxcclxuICAgICAgb3JpZW50YXRpb24gPSBnZXRPcmllbnRhdGlvbihzb3VyY2VNaWQsIHRhcmdldCwgLTEwKSxcclxuICAgICAgYXhlcyA9IFtdO1xyXG5cclxuICBpZiAoL3RvcHxib3R0b20vLnRlc3Qob3JpZW50YXRpb24pKSB7XHJcbiAgICBheGVzLnB1c2goJ3gnKTtcclxuICB9XHJcblxyXG4gIGlmICgvbGVmdHxyaWdodC8udGVzdChvcmllbnRhdGlvbikpIHtcclxuICAgIGF4ZXMucHVzaCgneScpO1xyXG4gIH1cclxuXHJcbiAgYXhlcy5mb3JFYWNoKGZ1bmN0aW9uKGF4aXMpIHtcclxuICAgIHZhciBjb29yZGluYXRlID0gZXZlbnRbIGF4aXMgXSwgbmV3Q29vcmRpbmF0ZTtcclxuXHJcbiAgICBpZiAoYWJzKGNvb3JkaW5hdGUgLSBzb3VyY2VNaWRbIGF4aXMgXSkgPCBCT1VOREFSWV9UT19IT1NUX1RIUkVTSE9MRCkge1xyXG4gICAgICBpZiAoY29vcmRpbmF0ZSA+IHNvdXJjZU1pZFsgYXhpcyBdKSB7XHJcbiAgICAgICAgbmV3Q29vcmRpbmF0ZSA9IHNvdXJjZU1pZFsgYXhpcyBdICsgQk9VTkRBUllfVE9fSE9TVF9USFJFU0hPTEQ7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbmV3Q29vcmRpbmF0ZSA9IHNvdXJjZU1pZFsgYXhpcyBdIC0gQk9VTkRBUllfVE9fSE9TVF9USFJFU0hPTEQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsIGF4aXMsIG5ld0Nvb3JkaW5hdGUpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzbmFwVG9Qb3NpdGlvbihldmVudCwgcG9zaXRpb24pIHtcclxuICBzZXRTbmFwcGVkKGV2ZW50LCAneCcsIHBvc2l0aW9uLngpO1xyXG4gIHNldFNuYXBwZWQoZXZlbnQsICd5JywgcG9zaXRpb24ueSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzVHlwZShhdHRycywgdHlwZSkge1xyXG4gIHJldHVybiBhdHRycyAmJiBhdHRycy50eXBlID09PSB0eXBlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FueVR5cGUoYXR0cnMsIHR5cGVzKSB7XHJcbiAgcmV0dXJuIHNvbWUodHlwZXMsIGZ1bmN0aW9uKHR5cGUpIHtcclxuICAgIHJldHVybiBpc1R5cGUoYXR0cnMsIHR5cGUpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXREaW1lbnNpb25Gb3JBeGlzKGF4aXMsIGVsZW1lbnQpIHtcclxuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gZWxlbWVudC53aWR0aCA6IGVsZW1lbnQuaGVpZ2h0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRUYXJnZXRCb3VuZHNQYWRkaW5nKHRhcmdldCkge1xyXG4gIGlmIChpcyh0YXJnZXQsICdicG1uOlRhc2snKSkge1xyXG4gICAgcmV0dXJuIFRBU0tfQk9VTkRTX1BBRERJTkc7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBUQVJHRVRfQk9VTkRTX1BBRERJTkc7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc01pZChldmVudCwgdGFyZ2V0LCBheGlzKSB7XHJcbiAgcmV0dXJuIGV2ZW50WyBheGlzIF0gPiB0YXJnZXRbIGF4aXMgXSArIFRBUkdFVF9DRU5URVJfUEFERElOR1xyXG4gICAgJiYgZXZlbnRbIGF4aXMgXSA8IHRhcmdldFsgYXhpcyBdICsgZ2V0RGltZW5zaW9uRm9yQXhpcyhheGlzLCB0YXJnZXQpIC0gVEFSR0VUX0NFTlRFUl9QQURESU5HO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1JldmVyc2UoY29udGV4dCkge1xyXG4gIHZhciBob3ZlciA9IGNvbnRleHQuaG92ZXIsXHJcbiAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlO1xyXG5cclxuICByZXR1cm4gaG92ZXIgJiYgc291cmNlICYmIGhvdmVyID09PSBzb3VyY2U7XHJcbn0iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ3JlYXRlTW92ZVNuYXBwaW5nIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3NuYXBwaW5nL0NyZWF0ZU1vdmVTbmFwcGluZyc7XG5cbmltcG9ydCB7XG4gIGlzU25hcHBlZCxcbiAgc2V0U25hcHBlZCxcbiAgdG9wTGVmdCxcbiAgYm90dG9tUmlnaHRcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc25hcHBpbmcvU25hcFV0aWwnO1xuXG5pbXBvcnQgeyBpc0V4cGFuZGVkIH0gZnJvbSAnLi4vLi4vdXRpbC9EaVV0aWwnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgYXNUUkJMLFxuICBnZXRNaWRcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQgeyBnZXRCb3VuZGFyeUF0dGFjaG1lbnQgfSBmcm9tICcuL0JwbW5TbmFwcGluZ1V0aWwnO1xuXG5pbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnbWluLWRhc2gnO1xuXG52YXIgSElHSF9QUklPUklUWSA9IDE1MDA7XG5cblxuLyoqXG4gKiBTbmFwIGR1cmluZyBjcmVhdGUgYW5kIG1vdmUuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5DcmVhdGVNb3ZlU25hcHBpbmcoZXZlbnRCdXMsIGluamVjdG9yKSB7XG4gIGluamVjdG9yLmludm9rZShDcmVhdGVNb3ZlU25hcHBpbmcsIHRoaXMpO1xuXG4gIC8vIGNyZWF0aW5nIGZpcnN0IHBhcnRpY2lwYW50XG4gIGV2ZW50QnVzLm9uKFsgJ2NyZWF0ZS5tb3ZlJywgJ2NyZWF0ZS5lbmQnIF0sIEhJR0hfUFJJT1JJVFksIHNldFNuYXBwZWRJZkNvbnN0cmFpbmVkKTtcblxuICAvLyBzbmFwIGJvdW5kYXJ5IGV2ZW50c1xuICBldmVudEJ1cy5vbihbXG4gICAgJ2NyZWF0ZS5tb3ZlJyxcbiAgICAnY3JlYXRlLmVuZCcsXG4gICAgJ3NoYXBlLm1vdmUubW92ZScsXG4gICAgJ3NoYXBlLm1vdmUuZW5kJ1xuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY2FuRXhlY3V0ZSA9IGNvbnRleHQuY2FuRXhlY3V0ZSxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XG5cbiAgICB2YXIgY2FuQXR0YWNoID0gY2FuRXhlY3V0ZSAmJiAoY2FuRXhlY3V0ZSA9PT0gJ2F0dGFjaCcgfHwgY2FuRXhlY3V0ZS5hdHRhY2gpO1xuXG4gICAgaWYgKGNhbkF0dGFjaCAmJiAhaXNTbmFwcGVkKGV2ZW50KSkge1xuICAgICAgc25hcEJvdW5kYXJ5RXZlbnQoZXZlbnQsIHRhcmdldCk7XG4gICAgfVxuICB9KTtcbn1cblxuaW5oZXJpdHMoQnBtbkNyZWF0ZU1vdmVTbmFwcGluZywgQ3JlYXRlTW92ZVNuYXBwaW5nKTtcblxuQnBtbkNyZWF0ZU1vdmVTbmFwcGluZy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnaW5qZWN0b3InXG5dO1xuXG5CcG1uQ3JlYXRlTW92ZVNuYXBwaW5nLnByb3RvdHlwZS5pbml0U25hcCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gIHZhciBzbmFwQ29udGV4dCA9IENyZWF0ZU1vdmVTbmFwcGluZy5wcm90b3R5cGUuaW5pdFNuYXAuY2FsbCh0aGlzLCBldmVudCk7XG5cbiAgdmFyIHNoYXBlID0gZXZlbnQuc2hhcGU7XG5cbiAgdmFyIGlzTW92ZSA9ICEhdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldChzaGFwZS5pZCk7XG5cbiAgLy8gc25hcCB0byBkb2NraW5nIHBvaW50c1xuICBmb3JFYWNoKHNoYXBlLm91dGdvaW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgdmFyIGRvY2tpbmcgPSBjb25uZWN0aW9uLndheXBvaW50c1swXTtcblxuICAgIGRvY2tpbmcgPSBkb2NraW5nLm9yaWdpbmFsIHx8IGRvY2tpbmc7XG5cbiAgICBzbmFwQ29udGV4dC5zZXRTbmFwT3JpZ2luKGNvbm5lY3Rpb24uaWQgKyAnLWRvY2tpbmcnLCBnZXREb2NraW5nU25hcE9yaWdpbihkb2NraW5nLCBpc01vdmUsIGV2ZW50KSk7XG4gIH0pO1xuXG4gIGZvckVhY2goc2hhcGUuaW5jb21pbmcsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICB2YXIgZG9ja2luZyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzW2Nvbm5lY3Rpb24ud2F5cG9pbnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgZG9ja2luZyA9IGRvY2tpbmcub3JpZ2luYWwgfHwgZG9ja2luZztcblxuICAgIHNuYXBDb250ZXh0LnNldFNuYXBPcmlnaW4oY29ubmVjdGlvbi5pZCArICctZG9ja2luZycsIGdldERvY2tpbmdTbmFwT3JpZ2luKGRvY2tpbmcsIGlzTW92ZSwgZXZlbnQpKTtcbiAgfSk7XG5cbiAgaWYgKGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG5cbiAgICAvLyBzbmFwIHRvIGJvcmRlcnMgd2l0aCBoaWdoZXIgcHJpb3JpdHlcbiAgICBzbmFwQ29udGV4dC5zZXRTbmFwTG9jYXRpb25zKFsgJ3RvcC1sZWZ0JywgJ2JvdHRvbS1yaWdodCcsICdtaWQnIF0pO1xuICB9XG5cbiAgcmV0dXJuIHNuYXBDb250ZXh0O1xufTtcblxuQnBtbkNyZWF0ZU1vdmVTbmFwcGluZy5wcm90b3R5cGUuYWRkU25hcFRhcmdldFBvaW50cyA9IGZ1bmN0aW9uKHNuYXBQb2ludHMsIHNoYXBlLCB0YXJnZXQpIHtcbiAgQ3JlYXRlTW92ZVNuYXBwaW5nLnByb3RvdHlwZS5hZGRTbmFwVGFyZ2V0UG9pbnRzLmNhbGwodGhpcywgc25hcFBvaW50cywgc2hhcGUsIHRhcmdldCk7XG5cbiAgdmFyIHNuYXBUYXJnZXRzID0gdGhpcy5nZXRTbmFwVGFyZ2V0cyhzaGFwZSwgdGFyZ2V0KTtcblxuICBmb3JFYWNoKHNuYXBUYXJnZXRzLCBmdW5jdGlvbihzbmFwVGFyZ2V0KSB7XG5cbiAgICAvLyBoYW5kbGUgVFJCTCBhbGlnbm1lbnRcbiAgICAvL1xuICAgIC8vICogd2l0aCBjb250YWluZXIgZWxlbWVudHNcbiAgICAvLyAqIHdpdGggdGV4dCBhbm5vdGF0aW9uc1xuICAgIGlmIChpc0NvbnRhaW5lcihzbmFwVGFyZ2V0KSB8fCBhcmVBbGwoWyBzaGFwZSwgc25hcFRhcmdldCBdLCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XG4gICAgICBzbmFwUG9pbnRzLmFkZCgndG9wLWxlZnQnLCB0b3BMZWZ0KHNuYXBUYXJnZXQpKTtcbiAgICAgIHNuYXBQb2ludHMuYWRkKCdib3R0b20tcmlnaHQnLCBib3R0b21SaWdodChzbmFwVGFyZ2V0KSk7XG4gICAgfVxuICB9KTtcblxuICB2YXIgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5O1xuXG4gIC8vIHNuYXAgdG8gZG9ja2luZyBwb2ludHMgaWYgbm90IGNyZWF0ZSBtb2RlXG4gIGZvckVhY2goc2hhcGUuaW5jb21pbmcsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICBpZiAoZWxlbWVudFJlZ2lzdHJ5LmdldChzaGFwZS5pZCkpIHtcblxuICAgICAgaWYgKCFpbmNsdWRlcyhzbmFwVGFyZ2V0cywgY29ubmVjdGlvbi5zb3VyY2UpKSB7XG4gICAgICAgIHNuYXBQb2ludHMuYWRkKCdtaWQnLCBnZXRNaWQoY29ubmVjdGlvbi5zb3VyY2UpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGRvY2tpbmcgPSBjb25uZWN0aW9uLndheXBvaW50c1swXTtcbiAgICAgIHNuYXBQb2ludHMuYWRkKGNvbm5lY3Rpb24uaWQgKyAnLWRvY2tpbmcnLCBkb2NraW5nLm9yaWdpbmFsIHx8IGRvY2tpbmcpO1xuICAgIH1cbiAgfSk7XG5cbiAgZm9yRWFjaChzaGFwZS5vdXRnb2luZywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgIGlmIChlbGVtZW50UmVnaXN0cnkuZ2V0KHNoYXBlLmlkKSkge1xuXG4gICAgICBpZiAoIWluY2x1ZGVzKHNuYXBUYXJnZXRzLCBjb25uZWN0aW9uLnRhcmdldCkpIHtcbiAgICAgICAgc25hcFBvaW50cy5hZGQoJ21pZCcsIGdldE1pZChjb25uZWN0aW9uLnRhcmdldCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZG9ja2luZyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzWyBjb25uZWN0aW9uLndheXBvaW50cy5sZW5ndGggLSAxIF07XG5cbiAgICAgIHNuYXBQb2ludHMuYWRkKGNvbm5lY3Rpb24uaWQgKyAnLWRvY2tpbmcnLCBkb2NraW5nLm9yaWdpbmFsIHx8IGRvY2tpbmcpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gYWRkIHNlcXVlbmNlIGZsb3cgcGFyZW50cyBhcyBzbmFwIHRhcmdldHNcbiAgaWYgKGlzKHRhcmdldCwgJ2JwbW46U2VxdWVuY2VGbG93JykpIHtcbiAgICBzbmFwUG9pbnRzID0gdGhpcy5hZGRTbmFwVGFyZ2V0UG9pbnRzKHNuYXBQb2ludHMsIHNoYXBlLCB0YXJnZXQucGFyZW50KTtcbiAgfVxuXG4gIHJldHVybiBzbmFwUG9pbnRzO1xufTtcblxuQnBtbkNyZWF0ZU1vdmVTbmFwcGluZy5wcm90b3R5cGUuZ2V0U25hcFRhcmdldHMgPSBmdW5jdGlvbihzaGFwZSwgdGFyZ2V0KSB7XG4gIHJldHVybiBDcmVhdGVNb3ZlU25hcHBpbmcucHJvdG90eXBlLmdldFNuYXBUYXJnZXRzLmNhbGwodGhpcywgc2hhcGUsIHRhcmdldClcbiAgICAuZmlsdGVyKGZ1bmN0aW9uKHNuYXBUYXJnZXQpIHtcblxuICAgICAgLy8gZG8gbm90IHNuYXAgdG8gbGFuZXNcbiAgICAgIHJldHVybiAhaXMoc25hcFRhcmdldCwgJ2JwbW46TGFuZScpO1xuICAgIH0pO1xufTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIHNuYXBCb3VuZGFyeUV2ZW50KGV2ZW50LCB0YXJnZXQpIHtcbiAgdmFyIHRhcmdldFRSQkwgPSBhc1RSQkwodGFyZ2V0KTtcblxuICB2YXIgZGlyZWN0aW9uID0gZ2V0Qm91bmRhcnlBdHRhY2htZW50KGV2ZW50LCB0YXJnZXQpO1xuXG4gIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICB2YXIgb2Zmc2V0O1xuXG4gIGlmIChzaGFwZS5wYXJlbnQpIHtcbiAgICBvZmZzZXQgPSB7IHg6IDAsIHk6IDAgfTtcbiAgfSBlbHNlIHtcbiAgICBvZmZzZXQgPSBnZXRNaWQoc2hhcGUpO1xuICB9XG5cbiAgaWYgKC90b3AvLnRlc3QoZGlyZWN0aW9uKSkge1xuICAgIHNldFNuYXBwZWQoZXZlbnQsICd5JywgdGFyZ2V0VFJCTC50b3AgLSBvZmZzZXQueSk7XG4gIH0gZWxzZSBpZiAoL2JvdHRvbS8udGVzdChkaXJlY3Rpb24pKSB7XG4gICAgc2V0U25hcHBlZChldmVudCwgJ3knLCB0YXJnZXRUUkJMLmJvdHRvbSAtIG9mZnNldC55KTtcbiAgfVxuXG4gIGlmICgvbGVmdC8udGVzdChkaXJlY3Rpb24pKSB7XG4gICAgc2V0U25hcHBlZChldmVudCwgJ3gnLCB0YXJnZXRUUkJMLmxlZnQgLSBvZmZzZXQueCk7XG4gIH0gZWxzZSBpZiAoL3JpZ2h0Ly50ZXN0KGRpcmVjdGlvbikpIHtcbiAgICBzZXRTbmFwcGVkKGV2ZW50LCAneCcsIHRhcmdldFRSQkwucmlnaHQgLSBvZmZzZXQueCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXJlQWxsKGVsZW1lbnRzLCB0eXBlKSB7XG4gIHJldHVybiBlbGVtZW50cy5ldmVyeShmdW5jdGlvbihlbCkge1xuICAgIHJldHVybiBpcyhlbCwgdHlwZSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc0NvbnRhaW5lcihlbGVtZW50KSB7XG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgaXNFeHBhbmRlZChlbGVtZW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50Jyk7XG59XG5cblxuZnVuY3Rpb24gc2V0U25hcHBlZElmQ29uc3RyYWluZWQoZXZlbnQpIHtcbiAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgY3JlYXRlQ29uc3RyYWludHMgPSBjb250ZXh0LmNyZWF0ZUNvbnN0cmFpbnRzO1xuXG4gIGlmICghY3JlYXRlQ29uc3RyYWludHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdG9wID0gY3JlYXRlQ29uc3RyYWludHMudG9wLFxuICAgICAgcmlnaHQgPSBjcmVhdGVDb25zdHJhaW50cy5yaWdodCxcbiAgICAgIGJvdHRvbSA9IGNyZWF0ZUNvbnN0cmFpbnRzLmJvdHRvbSxcbiAgICAgIGxlZnQgPSBjcmVhdGVDb25zdHJhaW50cy5sZWZ0O1xuXG4gIGlmICgobGVmdCAmJiBsZWZ0ID49IGV2ZW50LngpIHx8IChyaWdodCAmJiByaWdodCA8PSBldmVudC54KSkge1xuICAgIHNldFNuYXBwZWQoZXZlbnQsICd4JywgZXZlbnQueCk7XG4gIH1cblxuICBpZiAoKHRvcCAmJiB0b3AgPj0gZXZlbnQueSkgfHwgKGJvdHRvbSAmJiBib3R0b20gPD0gZXZlbnQueSkpIHtcbiAgICBzZXRTbmFwcGVkKGV2ZW50LCAneScsIGV2ZW50LnkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCB2YWx1ZSkge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZih2YWx1ZSkgIT09IC0xO1xufVxuXG5mdW5jdGlvbiBnZXREb2NraW5nU25hcE9yaWdpbihkb2NraW5nLCBpc01vdmUsIGV2ZW50KSB7XG4gIHJldHVybiBpc01vdmUgPyAoXG4gICAge1xuICAgICAgeDogZG9ja2luZy54IC0gZXZlbnQueCxcbiAgICAgIHk6IGRvY2tpbmcueSAtIGV2ZW50LnlcbiAgICB9XG4gICkgOiB7XG4gICAgeDogZG9ja2luZy54LFxuICAgIHk6IGRvY2tpbmcueVxuICB9O1xufVxuIiwiaW1wb3J0IHsgZ2V0T3JpZW50YXRpb24gfSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qm91bmRhcnlBdHRhY2htZW50KHBvc2l0aW9uLCB0YXJnZXRCb3VuZHMpIHtcclxuXHJcbiAgdmFyIG9yaWVudGF0aW9uID0gZ2V0T3JpZW50YXRpb24ocG9zaXRpb24sIHRhcmdldEJvdW5kcywgLTE1KTtcclxuXHJcbiAgaWYgKG9yaWVudGF0aW9uICE9PSAnaW50ZXJzZWN0Jykge1xyXG4gICAgcmV0dXJuIG9yaWVudGF0aW9uO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbn0iLCJpbXBvcnQgQnBtbkNvbm5lY3RTbmFwcGluZyBmcm9tICcuL0JwbW5Db25uZWN0U25hcHBpbmcnO1xuaW1wb3J0IEJwbW5DcmVhdGVNb3ZlU25hcHBpbmcgZnJvbSAnLi9CcG1uQ3JlYXRlTW92ZVNuYXBwaW5nJztcbmltcG9ydCBTbmFwcGluZ01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zbmFwcGluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFsgU25hcHBpbmdNb2R1bGUgXSxcbiAgX19pbml0X186IFtcbiAgICAnY29ubmVjdFNuYXBwaW5nJyxcbiAgICAnY3JlYXRlTW92ZVNuYXBwaW5nJ1xuICBdLFxuICBjb25uZWN0U25hcHBpbmc6IFsgJ3R5cGUnLCBCcG1uQ29ubmVjdFNuYXBwaW5nIF0sXG4gIGNyZWF0ZU1vdmVTbmFwcGluZzogWyAndHlwZScsIEJwbW5DcmVhdGVNb3ZlU25hcHBpbmcgXVxufTsiLCJpbXBvcnQge1xuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNMYWJlbEV4dGVybmFsLFxuICBnZXRFeHRlcm5hbExhYmVsQm91bmRzXG59IGZyb20gJy4uL3V0aWwvTGFiZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0TWlkXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNFeHBhbmRlZFxufSBmcm9tICcuLi91dGlsL0RpVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldExhYmVsXG59IGZyb20gJy4uL2ZlYXR1cmVzL2xhYmVsLWVkaXRpbmcvTGFiZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZWxlbWVudFRvU3RyaW5nXG59IGZyb20gJy4vVXRpbCc7XG5cblxuZnVuY3Rpb24gZWxlbWVudERhdGEoc2VtYW50aWMsIGF0dHJzKSB7XG4gIHJldHVybiBhc3NpZ24oe1xuICAgIGlkOiBzZW1hbnRpYy5pZCxcbiAgICB0eXBlOiBzZW1hbnRpYy4kdHlwZSxcbiAgICBidXNpbmVzc09iamVjdDogc2VtYW50aWNcbiAgfSwgYXR0cnMpO1xufVxuXG5mdW5jdGlvbiBnZXRXYXlwb2ludHMoYm8sIHNvdXJjZSwgdGFyZ2V0KSB7XG5cbiAgdmFyIHdheXBvaW50cyA9IGJvLmRpLndheXBvaW50O1xuXG4gIGlmICghd2F5cG9pbnRzIHx8IHdheXBvaW50cy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIFsgZ2V0TWlkKHNvdXJjZSksIGdldE1pZCh0YXJnZXQpIF07XG4gIH1cblxuICByZXR1cm4gd2F5cG9pbnRzLm1hcChmdW5jdGlvbihwKSB7XG4gICAgcmV0dXJuIHsgeDogcC54LCB5OiBwLnkgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vdFlldERyYXduKHRyYW5zbGF0ZSwgc2VtYW50aWMsIHJlZlNlbWFudGljLCBwcm9wZXJ0eSkge1xuICByZXR1cm4gbmV3IEVycm9yKHRyYW5zbGF0ZSgnZWxlbWVudCB7ZWxlbWVudH0gcmVmZXJlbmNlZCBieSB7cmVmZXJlbmNlZH0je3Byb3BlcnR5fSBub3QgeWV0IGRyYXduJywge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnRUb1N0cmluZyhyZWZTZW1hbnRpYyksXG4gICAgcmVmZXJlbmNlZDogZWxlbWVudFRvU3RyaW5nKHNlbWFudGljKSxcbiAgICBwcm9wZXJ0eTogcHJvcGVydHlcbiAgfSkpO1xufVxuXG5cbi8qKlxuICogQW4gaW1wb3J0ZXIgdGhhdCBhZGRzIGJwbW4gZWxlbWVudHMgdG8gdGhlIGNhbnZhc1xuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge0VsZW1lbnRGYWN0b3J5fSBlbGVtZW50RmFjdG9yeVxuICogQHBhcmFtIHtFbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNsYXRlXG4gKiBAcGFyYW0ge1RleHRSZW5kZXJlcn0gdGV4dFJlbmRlcmVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5JbXBvcnRlcihcbiAgICBldmVudEJ1cywgY2FudmFzLCBlbGVtZW50RmFjdG9yeSxcbiAgICBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSwgdGV4dFJlbmRlcmVyKSB7XG5cbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9lbGVtZW50RmFjdG9yeSA9IGVsZW1lbnRGYWN0b3J5O1xuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG4gIHRoaXMuX3RyYW5zbGF0ZSA9IHRyYW5zbGF0ZTtcbiAgdGhpcy5fdGV4dFJlbmRlcmVyID0gdGV4dFJlbmRlcmVyO1xufVxuXG5CcG1uSW1wb3J0ZXIuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdlbGVtZW50RmFjdG9yeScsXG4gICdlbGVtZW50UmVnaXN0cnknLFxuICAndHJhbnNsYXRlJyxcbiAgJ3RleHRSZW5kZXJlcidcbl07XG5cblxuLyoqXG4gKiBBZGQgYnBtbiBlbGVtZW50IChzZW1hbnRpYykgdG8gdGhlIGNhbnZhcyBvbnRvIHRoZVxuICogc3BlY2lmaWVkIHBhcmVudCBzaGFwZS5cbiAqL1xuQnBtbkltcG9ydGVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihzZW1hbnRpYywgcGFyZW50RWxlbWVudCkge1xuXG4gIHZhciBkaSA9IHNlbWFudGljLmRpLFxuICAgICAgZWxlbWVudCxcbiAgICAgIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZSxcbiAgICAgIGhpZGRlbjtcblxuICB2YXIgcGFyZW50SW5kZXg7XG5cbiAgLy8gUk9PVCBFTEVNRU5UXG4gIC8vIGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIHRoYXQgd2UgZGVhbCB3aXRoIGFcbiAgLy8gaW52aXNpYmxlIHJvb3QgZWxlbWVudCAocHJvY2VzcyBvciBjb2xsYWJvcmF0aW9uKVxuICBpZiAoaXMoZGksICdicG1uZGk6QlBNTlBsYW5lJykpIHtcblxuICAgIC8vIGFkZCBhIHZpcnR1YWwgZWxlbWVudCAobm90IGJlaW5nIGRyYXduKVxuICAgIGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50RmFjdG9yeS5jcmVhdGVSb290KGVsZW1lbnREYXRhKHNlbWFudGljKSk7XG5cbiAgICB0aGlzLl9jYW52YXMuc2V0Um9vdEVsZW1lbnQoZWxlbWVudCk7XG4gIH1cblxuICAvLyBTSEFQRVxuICBlbHNlIGlmIChpcyhkaSwgJ2JwbW5kaTpCUE1OU2hhcGUnKSkge1xuXG4gICAgdmFyIGNvbGxhcHNlZCA9ICFpc0V4cGFuZGVkKHNlbWFudGljKSxcbiAgICAgICAgaXNGcmFtZSA9IGlzRnJhbWVFbGVtZW50KHNlbWFudGljKTtcbiAgICBoaWRkZW4gPSBwYXJlbnRFbGVtZW50ICYmIChwYXJlbnRFbGVtZW50LmhpZGRlbiB8fCBwYXJlbnRFbGVtZW50LmNvbGxhcHNlZCk7XG5cbiAgICB2YXIgYm91bmRzID0gc2VtYW50aWMuZGkuYm91bmRzO1xuXG4gICAgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKGVsZW1lbnREYXRhKHNlbWFudGljLCB7XG4gICAgICBjb2xsYXBzZWQ6IGNvbGxhcHNlZCxcbiAgICAgIGhpZGRlbjogaGlkZGVuLFxuICAgICAgeDogTWF0aC5yb3VuZChib3VuZHMueCksXG4gICAgICB5OiBNYXRoLnJvdW5kKGJvdW5kcy55KSxcbiAgICAgIHdpZHRoOiBNYXRoLnJvdW5kKGJvdW5kcy53aWR0aCksXG4gICAgICBoZWlnaHQ6IE1hdGgucm91bmQoYm91bmRzLmhlaWdodCksXG4gICAgICBpc0ZyYW1lOiBpc0ZyYW1lXG4gICAgfSkpO1xuXG4gICAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpCb3VuZGFyeUV2ZW50JykpIHtcbiAgICAgIHRoaXMuX2F0dGFjaEJvdW5kYXJ5KHNlbWFudGljLCBlbGVtZW50KTtcbiAgICB9XG5cbiAgICAvLyBpbnNlcnQgbGFuZXMgYmVoaW5kIG90aGVyIGZsb3cgbm9kZXMgKGNmLiAjNzI3KVxuICAgIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46TGFuZScpKSB7XG4gICAgICBwYXJlbnRJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnKSkge1xuXG4gICAgICAvLyBjaGVjayB3aGV0aGVyIGRhdGEgc3RvcmUgaXMgaW5zaWRlIG91ciBvdXRzaWRlIG9mIGl0cyBzZW1hbnRpYyBwYXJlbnRcbiAgICAgIGlmICghaXNQb2ludEluc2lkZUJCb3gocGFyZW50RWxlbWVudCwgZ2V0TWlkKGJvdW5kcykpKSB7XG4gICAgICAgIHBhcmVudEVsZW1lbnQgPSB0aGlzLl9jYW52YXMuZ2V0Um9vdEVsZW1lbnQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9jYW52YXMuYWRkU2hhcGUoZWxlbWVudCwgcGFyZW50RWxlbWVudCwgcGFyZW50SW5kZXgpO1xuICB9XG5cbiAgLy8gQ09OTkVDVElPTlxuICBlbHNlIGlmIChpcyhkaSwgJ2JwbW5kaTpCUE1ORWRnZScpKSB7XG5cbiAgICB2YXIgc291cmNlID0gdGhpcy5fZ2V0U291cmNlKHNlbWFudGljKSxcbiAgICAgICAgdGFyZ2V0ID0gdGhpcy5fZ2V0VGFyZ2V0KHNlbWFudGljKTtcblxuICAgIGhpZGRlbiA9IHBhcmVudEVsZW1lbnQgJiYgKHBhcmVudEVsZW1lbnQuaGlkZGVuIHx8IHBhcmVudEVsZW1lbnQuY29sbGFwc2VkKTtcblxuICAgIGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50RmFjdG9yeS5jcmVhdGVDb25uZWN0aW9uKGVsZW1lbnREYXRhKHNlbWFudGljLCB7XG4gICAgICBoaWRkZW46IGhpZGRlbixcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICB3YXlwb2ludHM6IGdldFdheXBvaW50cyhzZW1hbnRpYywgc291cmNlLCB0YXJnZXQpXG4gICAgfSkpO1xuXG4gICAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpEYXRhQXNzb2NpYXRpb24nKSkge1xuXG4gICAgICAvLyByZW5kZXIgYWx3YXlzIG9uIHRvcDsgdGhpcyBlbnN1cmVzIERhdGFBc3NvY2lhdGlvbnNcbiAgICAgIC8vIGFyZSByZW5kZXJlZCBjb3JyZWN0bHkgYWNyb3NzIGRpZmZlcmVudCBcImhhY2tzXCIgcGVvcGxlXG4gICAgICAvLyBsb3ZlIHRvIG1vZGVsIHN1Y2ggYXMgY3Jvc3MgcGFydGljaXBhbnQgLyBzdWIgcHJvY2Vzc1xuICAgICAgLy8gYXNzb2NpYXRpb25zXG4gICAgICBwYXJlbnRFbGVtZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBpbnNlcnQgc2VxdWVuY2UgZmxvd3MgYmVoaW5kIG90aGVyIGZsb3cgbm9kZXMgKGNmLiAjNzI3KVxuICAgIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46U2VxdWVuY2VGbG93JykpIHtcbiAgICAgIHBhcmVudEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB0aGlzLl9jYW52YXMuYWRkQ29ubmVjdGlvbihlbGVtZW50LCBwYXJlbnRFbGVtZW50LCBwYXJlbnRJbmRleCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgndW5rbm93biBkaSB7ZGl9IGZvciBlbGVtZW50IHtzZW1hbnRpY30nLCB7XG4gICAgICBkaTogZWxlbWVudFRvU3RyaW5nKGRpKSxcbiAgICAgIHNlbWFudGljOiBlbGVtZW50VG9TdHJpbmcoc2VtYW50aWMpXG4gICAgfSkpO1xuICB9XG5cbiAgLy8gKG9wdGlvbmFsKSBMQUJFTFxuICBpZiAoaXNMYWJlbEV4dGVybmFsKHNlbWFudGljKSAmJiBnZXRMYWJlbChlbGVtZW50KSkge1xuICAgIHRoaXMuYWRkTGFiZWwoc2VtYW50aWMsIGVsZW1lbnQpO1xuICB9XG5cblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdicG1uRWxlbWVudC5hZGRlZCcsIHsgZWxlbWVudDogZWxlbWVudCB9KTtcblxuICByZXR1cm4gZWxlbWVudDtcbn07XG5cblxuLyoqXG4gKiBBdHRhY2ggdGhlIGJvdW5kYXJ5IGVsZW1lbnQgdG8gdGhlIGdpdmVuIGhvc3RcbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGJvdW5kYXJ5U2VtYW50aWNcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGJvdW5kYXJ5RWxlbWVudFxuICovXG5CcG1uSW1wb3J0ZXIucHJvdG90eXBlLl9hdHRhY2hCb3VuZGFyeSA9IGZ1bmN0aW9uKGJvdW5kYXJ5U2VtYW50aWMsIGJvdW5kYXJ5RWxlbWVudCkge1xuICB2YXIgdHJhbnNsYXRlID0gdGhpcy5fdHJhbnNsYXRlO1xuICB2YXIgaG9zdFNlbWFudGljID0gYm91bmRhcnlTZW1hbnRpYy5hdHRhY2hlZFRvUmVmO1xuXG4gIGlmICghaG9zdFNlbWFudGljKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgnbWlzc2luZyB7c2VtYW50aWN9I2F0dGFjaGVkVG9SZWYnLCB7XG4gICAgICBzZW1hbnRpYzogZWxlbWVudFRvU3RyaW5nKGJvdW5kYXJ5U2VtYW50aWMpXG4gICAgfSkpO1xuICB9XG5cbiAgdmFyIGhvc3QgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnkuZ2V0KGhvc3RTZW1hbnRpYy5pZCksXG4gICAgICBhdHRhY2hlcnMgPSBob3N0ICYmIGhvc3QuYXR0YWNoZXJzO1xuXG4gIGlmICghaG9zdCkge1xuICAgIHRocm93IG5vdFlldERyYXduKHRyYW5zbGF0ZSwgYm91bmRhcnlTZW1hbnRpYywgaG9zdFNlbWFudGljLCAnYXR0YWNoZWRUb1JlZicpO1xuICB9XG5cbiAgLy8gd2lyZSBlbGVtZW50Lmhvc3QgPD4gaG9zdC5hdHRhY2hlcnNcbiAgYm91bmRhcnlFbGVtZW50Lmhvc3QgPSBob3N0O1xuXG4gIGlmICghYXR0YWNoZXJzKSB7XG4gICAgaG9zdC5hdHRhY2hlcnMgPSBhdHRhY2hlcnMgPSBbXTtcbiAgfVxuXG4gIGlmIChhdHRhY2hlcnMuaW5kZXhPZihib3VuZGFyeUVsZW1lbnQpID09PSAtMSkge1xuICAgIGF0dGFjaGVycy5wdXNoKGJvdW5kYXJ5RWxlbWVudCk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBhZGQgbGFiZWwgZm9yIGFuIGVsZW1lbnRcbiAqL1xuQnBtbkltcG9ydGVyLnByb3RvdHlwZS5hZGRMYWJlbCA9IGZ1bmN0aW9uKHNlbWFudGljLCBlbGVtZW50KSB7XG4gIHZhciBib3VuZHMsXG4gICAgICB0ZXh0LFxuICAgICAgbGFiZWw7XG5cbiAgYm91bmRzID0gZ2V0RXh0ZXJuYWxMYWJlbEJvdW5kcyhzZW1hbnRpYywgZWxlbWVudCk7XG5cbiAgdGV4dCA9IGdldExhYmVsKGVsZW1lbnQpO1xuXG4gIGlmICh0ZXh0KSB7XG5cbiAgICAvLyBnZXQgY29ycmVjdGVkIGJvdW5kcyBmcm9tIGFjdHVhbCBsYXlvdXRlZCB0ZXh0XG4gICAgYm91bmRzID0gdGhpcy5fdGV4dFJlbmRlcmVyLmdldEV4dGVybmFsTGFiZWxCb3VuZHMoYm91bmRzLCB0ZXh0KTtcbiAgfVxuXG4gIGxhYmVsID0gdGhpcy5fZWxlbWVudEZhY3RvcnkuY3JlYXRlTGFiZWwoZWxlbWVudERhdGEoc2VtYW50aWMsIHtcbiAgICBpZDogc2VtYW50aWMuaWQgKyAnX2xhYmVsJyxcbiAgICBsYWJlbFRhcmdldDogZWxlbWVudCxcbiAgICB0eXBlOiAnbGFiZWwnLFxuICAgIGhpZGRlbjogZWxlbWVudC5oaWRkZW4gfHwgIWdldExhYmVsKGVsZW1lbnQpLFxuICAgIHg6IE1hdGgucm91bmQoYm91bmRzLngpLFxuICAgIHk6IE1hdGgucm91bmQoYm91bmRzLnkpLFxuICAgIHdpZHRoOiBNYXRoLnJvdW5kKGJvdW5kcy53aWR0aCksXG4gICAgaGVpZ2h0OiBNYXRoLnJvdW5kKGJvdW5kcy5oZWlnaHQpXG4gIH0pKTtcblxuICByZXR1cm4gdGhpcy5fY2FudmFzLmFkZFNoYXBlKGxhYmVsLCBlbGVtZW50LnBhcmVudCk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgZHJhd24gY29ubmVjdGlvbiBlbmQgYmFzZWQgb24gdGhlIGdpdmVuIHNpZGUuXG4gKlxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBlbmQgaXMgbm90IHlldCBkcmF3blxuICovXG5CcG1uSW1wb3J0ZXIucHJvdG90eXBlLl9nZXRFbmQgPSBmdW5jdGlvbihzZW1hbnRpYywgc2lkZSkge1xuXG4gIHZhciBlbGVtZW50LFxuICAgICAgcmVmU2VtYW50aWMsXG4gICAgICB0eXBlID0gc2VtYW50aWMuJHR5cGUsXG4gICAgICB0cmFuc2xhdGUgPSB0aGlzLl90cmFuc2xhdGU7XG5cbiAgcmVmU2VtYW50aWMgPSBzZW1hbnRpY1tzaWRlICsgJ1JlZiddO1xuXG4gIC8vIGhhbmRsZSBteXN0ZXJpb3VzIGlzTWFueSBEYXRhQXNzb2NpYXRpb24jc291cmNlUmVmXG4gIGlmIChzaWRlID09PSAnc291cmNlJyAmJiB0eXBlID09PSAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbicpIHtcbiAgICByZWZTZW1hbnRpYyA9IHJlZlNlbWFudGljICYmIHJlZlNlbWFudGljWzBdO1xuICB9XG5cbiAgLy8gZml4IHNvdXJjZSAvIHRhcmdldCBmb3IgRGF0YUlucHV0QXNzb2NpYXRpb24gLyBEYXRhT3V0cHV0QXNzb2NpYXRpb25cbiAgaWYgKHNpZGUgPT09ICdzb3VyY2UnICYmIHR5cGUgPT09ICdicG1uOkRhdGFPdXRwdXRBc3NvY2lhdGlvbicgfHxcbiAgICAgIHNpZGUgPT09ICd0YXJnZXQnICYmIHR5cGUgPT09ICdicG1uOkRhdGFJbnB1dEFzc29jaWF0aW9uJykge1xuXG4gICAgcmVmU2VtYW50aWMgPSBzZW1hbnRpYy4kcGFyZW50O1xuICB9XG5cbiAgZWxlbWVudCA9IHJlZlNlbWFudGljICYmIHRoaXMuX2dldEVsZW1lbnQocmVmU2VtYW50aWMpO1xuXG4gIGlmIChlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBpZiAocmVmU2VtYW50aWMpIHtcbiAgICB0aHJvdyBub3RZZXREcmF3bih0cmFuc2xhdGUsIHNlbWFudGljLCByZWZTZW1hbnRpYywgc2lkZSArICdSZWYnKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCd7c2VtYW50aWN9I3tzaWRlfSBSZWYgbm90IHNwZWNpZmllZCcsIHtcbiAgICAgIHNlbWFudGljOiBlbGVtZW50VG9TdHJpbmcoc2VtYW50aWMpLFxuICAgICAgc2lkZTogc2lkZVxuICAgIH0pKTtcbiAgfVxufTtcblxuQnBtbkltcG9ydGVyLnByb3RvdHlwZS5fZ2V0U291cmNlID0gZnVuY3Rpb24oc2VtYW50aWMpIHtcbiAgcmV0dXJuIHRoaXMuX2dldEVuZChzZW1hbnRpYywgJ3NvdXJjZScpO1xufTtcblxuQnBtbkltcG9ydGVyLnByb3RvdHlwZS5fZ2V0VGFyZ2V0ID0gZnVuY3Rpb24oc2VtYW50aWMpIHtcbiAgcmV0dXJuIHRoaXMuX2dldEVuZChzZW1hbnRpYywgJ3RhcmdldCcpO1xufTtcblxuXG5CcG1uSW1wb3J0ZXIucHJvdG90eXBlLl9nZXRFbGVtZW50ID0gZnVuY3Rpb24oc2VtYW50aWMpIHtcbiAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5nZXQoc2VtYW50aWMuaWQpO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzUG9pbnRJbnNpZGVCQm94KGJib3gsIHBvaW50KSB7XG4gIHZhciB4ID0gcG9pbnQueCxcbiAgICAgIHkgPSBwb2ludC55O1xuXG4gIHJldHVybiB4ID49IGJib3gueCAmJlxuICAgIHggPD0gYmJveC54ICsgYmJveC53aWR0aCAmJlxuICAgIHkgPj0gYmJveC55ICYmXG4gICAgeSA8PSBiYm94LnkgKyBiYm94LmhlaWdodDtcbn1cblxuZnVuY3Rpb24gaXNGcmFtZUVsZW1lbnQoc2VtYW50aWMpIHtcbiAgcmV0dXJuIGlzKHNlbWFudGljLCAnYnBtbjpHcm91cCcpO1xufSIsImltcG9ydCB7XG4gIGZpbHRlcixcbiAgZmluZCxcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBSZWZzIGZyb20gJ29iamVjdC1yZWZzJztcblxuaW1wb3J0IHtcbiAgZWxlbWVudFRvU3RyaW5nXG59IGZyb20gJy4vVXRpbCc7XG5cbnZhciBkaVJlZnMgPSBuZXcgUmVmcyhcbiAgeyBuYW1lOiAnYnBtbkVsZW1lbnQnLCBlbnVtZXJhYmxlOiB0cnVlIH0sXG4gIHsgbmFtZTogJ2RpJywgY29uZmlndXJhYmxlOiB0cnVlIH1cbik7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGFuIGVsZW1lbnQgaGFzIHRoZSBnaXZlbiBtZXRhLW1vZGVsIHR5cGVcbiAqXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSAgZWxlbWVudFxuICogQHBhcmFtICB7c3RyaW5nfSAgICAgICAgIHR5cGVcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpcyhlbGVtZW50LCB0eXBlKSB7XG4gIHJldHVybiBlbGVtZW50LiRpbnN0YW5jZU9mKHR5cGUpO1xufVxuXG5cbi8qKlxuICogRmluZCBhIHN1aXRhYmxlIGRpc3BsYXkgY2FuZGlkYXRlIGZvciBkZWZpbml0aW9ucyB3aGVyZSB0aGUgREkgZG9lcyBub3RcbiAqIGNvcnJlY3RseSBzcGVjaWZ5IG9uZS5cbiAqL1xuZnVuY3Rpb24gZmluZERpc3BsYXlDYW5kaWRhdGUoZGVmaW5pdGlvbnMpIHtcbiAgcmV0dXJuIGZpbmQoZGVmaW5pdGlvbnMucm9vdEVsZW1lbnRzLCBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGlzKGUsICdicG1uOlByb2Nlc3MnKSB8fCBpcyhlLCAnYnBtbjpDb2xsYWJvcmF0aW9uJyk7XG4gIH0pO1xufVxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5UcmVlV2Fsa2VyKGhhbmRsZXIsIHRyYW5zbGF0ZSkge1xuXG4gIC8vIGxpc3Qgb2YgY29udGFpbmVycyBhbHJlYWR5IHdhbGtlZFxuICB2YXIgaGFuZGxlZEVsZW1lbnRzID0ge307XG5cbiAgLy8gbGlzdCBvZiBlbGVtZW50cyB0byBoYW5kbGUgZGVmZXJyZWQgdG8gZW5zdXJlXG4gIC8vIHByZXJlcXVpc2l0ZXMgYXJlIGRyYXduXG4gIHZhciBkZWZlcnJlZCA9IFtdO1xuXG4gIC8vIEhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGZ1bmN0aW9uIGNvbnRleHR1YWwoZm4sIGN0eCkge1xuICAgIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgICBmbihlLCBjdHgpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVkKGVsZW1lbnQpIHtcbiAgICBoYW5kbGVkRWxlbWVudHNbZWxlbWVudC5pZF0gPSBlbGVtZW50O1xuICB9XG5cbiAgZnVuY3Rpb24gaXNIYW5kbGVkKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gaGFuZGxlZEVsZW1lbnRzW2VsZW1lbnQuaWRdO1xuICB9XG5cbiAgZnVuY3Rpb24gdmlzaXQoZWxlbWVudCwgY3R4KSB7XG5cbiAgICB2YXIgZ2Z4ID0gZWxlbWVudC5nZng7XG5cbiAgICAvLyBhdm9pZCBtdWx0aXBsZSByZW5kZXJpbmcgb2YgZWxlbWVudHNcbiAgICBpZiAoZ2Z4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIHRyYW5zbGF0ZSgnYWxyZWFkeSByZW5kZXJlZCB7ZWxlbWVudH0nLCB7IGVsZW1lbnQ6IGVsZW1lbnRUb1N0cmluZyhlbGVtZW50KSB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBjYWxsIGhhbmRsZXJcbiAgICByZXR1cm4gaGFuZGxlci5lbGVtZW50KGVsZW1lbnQsIGN0eCk7XG4gIH1cblxuICBmdW5jdGlvbiB2aXNpdFJvb3QoZWxlbWVudCwgZGlhZ3JhbSkge1xuICAgIHJldHVybiBoYW5kbGVyLnJvb3QoZWxlbWVudCwgZGlhZ3JhbSk7XG4gIH1cblxuICBmdW5jdGlvbiB2aXNpdElmRGkoZWxlbWVudCwgY3R4KSB7XG5cbiAgICB0cnkge1xuICAgICAgdmFyIGdmeCA9IGVsZW1lbnQuZGkgJiYgdmlzaXQoZWxlbWVudCwgY3R4KTtcblxuICAgICAgaGFuZGxlZChlbGVtZW50KTtcblxuICAgICAgcmV0dXJuIGdmeDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dFcnJvcihlLm1lc3NhZ2UsIHsgZWxlbWVudDogZWxlbWVudCwgZXJyb3I6IGUgfSk7XG5cbiAgICAgIGNvbnNvbGUuZXJyb3IodHJhbnNsYXRlKCdmYWlsZWQgdG8gaW1wb3J0IHtlbGVtZW50fScsIHsgZWxlbWVudDogZWxlbWVudFRvU3RyaW5nKGVsZW1lbnQpIH0pKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbG9nRXJyb3IobWVzc2FnZSwgY29udGV4dCkge1xuICAgIGhhbmRsZXIuZXJyb3IobWVzc2FnZSwgY29udGV4dCk7XG4gIH1cblxuICAvLyBESSBoYW5kbGluZyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJEaShkaSkge1xuICAgIHZhciBicG1uRWxlbWVudCA9IGRpLmJwbW5FbGVtZW50O1xuXG4gICAgaWYgKGJwbW5FbGVtZW50KSB7XG4gICAgICBpZiAoYnBtbkVsZW1lbnQuZGkpIHtcbiAgICAgICAgbG9nRXJyb3IoXG4gICAgICAgICAgdHJhbnNsYXRlKCdtdWx0aXBsZSBESSBlbGVtZW50cyBkZWZpbmVkIGZvciB7ZWxlbWVudH0nLCB7XG4gICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50VG9TdHJpbmcoYnBtbkVsZW1lbnQpXG4gICAgICAgICAgfSksXG4gICAgICAgICAgeyBlbGVtZW50OiBicG1uRWxlbWVudCB9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaVJlZnMuYmluZChicG1uRWxlbWVudCwgJ2RpJyk7XG4gICAgICAgIGJwbW5FbGVtZW50LmRpID0gZGk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ0Vycm9yKFxuICAgICAgICB0cmFuc2xhdGUoJ25vIGJwbW5FbGVtZW50IHJlZmVyZW5jZWQgaW4ge2VsZW1lbnR9Jywge1xuICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnRUb1N0cmluZyhkaSlcbiAgICAgICAgfSksXG4gICAgICAgIHsgZWxlbWVudDogZGkgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVEaWFncmFtKGRpYWdyYW0pIHtcbiAgICBoYW5kbGVQbGFuZShkaWFncmFtLnBsYW5lKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYW5lKHBsYW5lKSB7XG4gICAgcmVnaXN0ZXJEaShwbGFuZSk7XG5cbiAgICBmb3JFYWNoKHBsYW5lLnBsYW5lRWxlbWVudCwgaGFuZGxlUGxhbmVFbGVtZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYW5lRWxlbWVudChwbGFuZUVsZW1lbnQpIHtcbiAgICByZWdpc3RlckRpKHBsYW5lRWxlbWVudCk7XG4gIH1cblxuXG4gIC8vIFNlbWFudGljIGhhbmRsaW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAvKipcbiAgICogSGFuZGxlIGRlZmluaXRpb25zIGFuZCByZXR1cm4gdGhlIHJlbmRlcmVkIGRpYWdyYW0gKGlmIGFueSlcbiAgICpcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBkZWZpbml0aW9ucyB0byB3YWxrIGFuZCBpbXBvcnRcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBbZGlhZ3JhbV0gc3BlY2lmaWMgZGlhZ3JhbSB0byBpbXBvcnQgYW5kIGRpc3BsYXlcbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9IGlmIG5vIGRpYWdyYW0gdG8gZGlzcGxheSBjb3VsZCBiZSBmb3VuZFxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlRGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMsIGRpYWdyYW0pIHtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSB3YWxrIHRoZSBjb3JyZWN0IGJwbW5FbGVtZW50XG5cbiAgICB2YXIgZGlhZ3JhbXMgPSBkZWZpbml0aW9ucy5kaWFncmFtcztcblxuICAgIGlmIChkaWFncmFtICYmIGRpYWdyYW1zLmluZGV4T2YoZGlhZ3JhbSkgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdkaWFncmFtIG5vdCBwYXJ0IG9mIGJwbW46RGVmaW5pdGlvbnMnKSk7XG4gICAgfVxuXG4gICAgaWYgKCFkaWFncmFtICYmIGRpYWdyYW1zICYmIGRpYWdyYW1zLmxlbmd0aCkge1xuICAgICAgZGlhZ3JhbSA9IGRpYWdyYW1zWzBdO1xuICAgIH1cblxuICAgIC8vIG5vIGRpYWdyYW0gLT4gbm90aGluZyB0byBpbXBvcnRcbiAgICBpZiAoIWRpYWdyYW0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ25vIGRpYWdyYW0gdG8gZGlzcGxheScpKTtcbiAgICB9XG5cbiAgICAvLyBsb2FkIERJIGZyb20gc2VsZWN0ZWQgZGlhZ3JhbSBvbmx5XG4gICAgaGFuZGxlRGlhZ3JhbShkaWFncmFtKTtcblxuXG4gICAgdmFyIHBsYW5lID0gZGlhZ3JhbS5wbGFuZTtcblxuICAgIGlmICghcGxhbmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoXG4gICAgICAgICdubyBwbGFuZSBmb3Ige2VsZW1lbnR9JyxcbiAgICAgICAgeyBlbGVtZW50OiBlbGVtZW50VG9TdHJpbmcoZGlhZ3JhbSkgfVxuICAgICAgKSk7XG4gICAgfVxuXG4gICAgdmFyIHJvb3RFbGVtZW50ID0gcGxhbmUuYnBtbkVsZW1lbnQ7XG5cbiAgICAvLyBlbnN1cmUgd2UgZGVmYXVsdCB0byBhIHN1aXRhYmxlIGRpc3BsYXkgY2FuZGlkYXRlIChwcm9jZXNzIG9yIGNvbGxhYm9yYXRpb24pLFxuICAgIC8vIGV2ZW4gaWYgbm9uIGlzIHNwZWNpZmllZCBpbiBESVxuICAgIGlmICghcm9vdEVsZW1lbnQpIHtcbiAgICAgIHJvb3RFbGVtZW50ID0gZmluZERpc3BsYXlDYW5kaWRhdGUoZGVmaW5pdGlvbnMpO1xuXG4gICAgICBpZiAoIXJvb3RFbGVtZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ25vIHByb2Nlc3Mgb3IgY29sbGFib3JhdGlvbiB0byBkaXNwbGF5JykpO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBsb2dFcnJvcihcbiAgICAgICAgICB0cmFuc2xhdGUoJ2NvcnJlY3RpbmcgbWlzc2luZyBicG1uRWxlbWVudCBvbiB7cGxhbmV9IHRvIHtyb290RWxlbWVudH0nLCB7XG4gICAgICAgICAgICBwbGFuZTogZWxlbWVudFRvU3RyaW5nKHBsYW5lKSxcbiAgICAgICAgICAgIHJvb3RFbGVtZW50OiBlbGVtZW50VG9TdHJpbmcocm9vdEVsZW1lbnQpXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBjb3JyZWN0IERJIG9uIHRoZSBmbHlcbiAgICAgICAgcGxhbmUuYnBtbkVsZW1lbnQgPSByb290RWxlbWVudDtcbiAgICAgICAgcmVnaXN0ZXJEaShwbGFuZSk7XG4gICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgY3R4ID0gdmlzaXRSb290KHJvb3RFbGVtZW50LCBwbGFuZSk7XG5cbiAgICBpZiAoaXMocm9vdEVsZW1lbnQsICdicG1uOlByb2Nlc3MnKSkge1xuICAgICAgaGFuZGxlUHJvY2Vzcyhyb290RWxlbWVudCwgY3R4KTtcbiAgICB9IGVsc2UgaWYgKGlzKHJvb3RFbGVtZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJykpIHtcbiAgICAgIGhhbmRsZUNvbGxhYm9yYXRpb24ocm9vdEVsZW1lbnQsIGN0eCk7XG5cbiAgICAgIC8vIGZvcmNlIGRyYXdpbmcgb2YgZXZlcnl0aGluZyBub3QgeWV0IGRyYXduIHRoYXQgaXMgcGFydCBvZiB0aGUgdGFyZ2V0IERJXG4gICAgICBoYW5kbGVVbmhhbmRsZWRQcm9jZXNzZXMoZGVmaW5pdGlvbnMucm9vdEVsZW1lbnRzLCBjdHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIHRyYW5zbGF0ZSgndW5zdXBwb3J0ZWQgYnBtbkVsZW1lbnQgZm9yIHtwbGFuZX06IHtyb290RWxlbWVudH0nLCB7XG4gICAgICAgICAgcGxhbmU6IGVsZW1lbnRUb1N0cmluZyhwbGFuZSksXG4gICAgICAgICAgcm9vdEVsZW1lbnQ6IGVsZW1lbnRUb1N0cmluZyhyb290RWxlbWVudClcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIGFsbCBkZWZlcnJlZCBlbGVtZW50c1xuICAgIGhhbmRsZURlZmVycmVkKGRlZmVycmVkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZURlZmVycmVkKCkge1xuXG4gICAgdmFyIGZuO1xuXG4gICAgLy8gZHJhaW4gZGVmZXJyZWQgdW50aWwgZW1wdHlcbiAgICB3aGlsZSAoZGVmZXJyZWQubGVuZ3RoKSB7XG4gICAgICBmbiA9IGRlZmVycmVkLnNoaWZ0KCk7XG5cbiAgICAgIGZuKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUHJvY2Vzcyhwcm9jZXNzLCBjb250ZXh0KSB7XG4gICAgaGFuZGxlRmxvd0VsZW1lbnRzQ29udGFpbmVyKHByb2Nlc3MsIGNvbnRleHQpO1xuICAgIGhhbmRsZUlvU3BlY2lmaWNhdGlvbihwcm9jZXNzLmlvU3BlY2lmaWNhdGlvbiwgY29udGV4dCk7XG5cbiAgICBoYW5kbGVBcnRpZmFjdHMocHJvY2Vzcy5hcnRpZmFjdHMsIGNvbnRleHQpO1xuXG4gICAgLy8gbG9nIHByb2Nlc3MgaGFuZGxlZFxuICAgIGhhbmRsZWQocHJvY2Vzcyk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVVbmhhbmRsZWRQcm9jZXNzZXMocm9vdEVsZW1lbnRzLCBjdHgpIHtcblxuICAgIC8vIHdhbGsgdGhyb3VnaCBhbGwgcHJvY2Vzc2VzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gZHJhd24gYW5kIGRyYXcgdGhlbVxuICAgIC8vIGlmIHRoZXkgY29udGFpbiBsYW5lcyB3aXRoIERJIGluZm9ybWF0aW9uLlxuICAgIC8vIHdlIGRvIHRoaXMgdG8gcGFzcyB0aGUgZnJlZS1mbG9hdGluZyBsYW5lIHRlc3QgY2FzZXMgaW4gdGhlIE1JV0cgdGVzdCBzdWl0ZVxuICAgIHZhciBwcm9jZXNzZXMgPSBmaWx0ZXIocm9vdEVsZW1lbnRzLCBmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gIWlzSGFuZGxlZChlKSAmJiBpcyhlLCAnYnBtbjpQcm9jZXNzJykgJiYgZS5sYW5lU2V0cztcbiAgICB9KTtcblxuICAgIHByb2Nlc3Nlcy5mb3JFYWNoKGNvbnRleHR1YWwoaGFuZGxlUHJvY2VzcywgY3R4KSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVNZXNzYWdlRmxvdyhtZXNzYWdlRmxvdywgY29udGV4dCkge1xuICAgIHZpc2l0SWZEaShtZXNzYWdlRmxvdywgY29udGV4dCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVNZXNzYWdlRmxvd3MobWVzc2FnZUZsb3dzLCBjb250ZXh0KSB7XG4gICAgZm9yRWFjaChtZXNzYWdlRmxvd3MsIGNvbnRleHR1YWwoaGFuZGxlTWVzc2FnZUZsb3csIGNvbnRleHQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZURhdGFBc3NvY2lhdGlvbihhc3NvY2lhdGlvbiwgY29udGV4dCkge1xuICAgIHZpc2l0SWZEaShhc3NvY2lhdGlvbiwgY29udGV4dCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVEYXRhSW5wdXQoZGF0YUlucHV0LCBjb250ZXh0KSB7XG4gICAgdmlzaXRJZkRpKGRhdGFJbnB1dCwgY29udGV4dCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVEYXRhT3V0cHV0KGRhdGFPdXRwdXQsIGNvbnRleHQpIHtcbiAgICB2aXNpdElmRGkoZGF0YU91dHB1dCwgY29udGV4dCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVBcnRpZmFjdChhcnRpZmFjdCwgY29udGV4dCkge1xuXG4gICAgLy8gYnBtbjpUZXh0QW5ub3RhdGlvblxuICAgIC8vIGJwbW46R3JvdXBcbiAgICAvLyBicG1uOkFzc29jaWF0aW9uXG5cbiAgICB2aXNpdElmRGkoYXJ0aWZhY3QsIGNvbnRleHQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQXJ0aWZhY3RzKGFydGlmYWN0cywgY29udGV4dCkge1xuXG4gICAgZm9yRWFjaChhcnRpZmFjdHMsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmIChpcyhlLCAnYnBtbjpBc3NvY2lhdGlvbicpKSB7XG4gICAgICAgIGRlZmVycmVkLnB1c2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaGFuZGxlQXJ0aWZhY3QoZSwgY29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlQXJ0aWZhY3QoZSwgY29udGV4dCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVJb1NwZWNpZmljYXRpb24oaW9TcGVjaWZpY2F0aW9uLCBjb250ZXh0KSB7XG5cbiAgICBpZiAoIWlvU3BlY2lmaWNhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvckVhY2goaW9TcGVjaWZpY2F0aW9uLmRhdGFJbnB1dHMsIGNvbnRleHR1YWwoaGFuZGxlRGF0YUlucHV0LCBjb250ZXh0KSk7XG4gICAgZm9yRWFjaChpb1NwZWNpZmljYXRpb24uZGF0YU91dHB1dHMsIGNvbnRleHR1YWwoaGFuZGxlRGF0YU91dHB1dCwgY29udGV4dCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlU3ViUHJvY2VzcyhzdWJQcm9jZXNzLCBjb250ZXh0KSB7XG4gICAgaGFuZGxlRmxvd0VsZW1lbnRzQ29udGFpbmVyKHN1YlByb2Nlc3MsIGNvbnRleHQpO1xuICAgIGhhbmRsZUFydGlmYWN0cyhzdWJQcm9jZXNzLmFydGlmYWN0cywgY29udGV4dCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVGbG93Tm9kZShmbG93Tm9kZSwgY29udGV4dCkge1xuICAgIHZhciBjaGlsZEN0eCA9IHZpc2l0SWZEaShmbG93Tm9kZSwgY29udGV4dCk7XG5cbiAgICBpZiAoaXMoZmxvd05vZGUsICdicG1uOlN1YlByb2Nlc3MnKSkge1xuICAgICAgaGFuZGxlU3ViUHJvY2VzcyhmbG93Tm9kZSwgY2hpbGRDdHggfHwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKGlzKGZsb3dOb2RlLCAnYnBtbjpBY3Rpdml0eScpKSB7XG4gICAgICBoYW5kbGVJb1NwZWNpZmljYXRpb24oZmxvd05vZGUuaW9TcGVjaWZpY2F0aW9uLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICAvLyBkZWZlciBoYW5kbGluZyBvZiBhc3NvY2lhdGlvbnNcbiAgICAvLyBhZmZlY3RlZCB0eXBlczpcbiAgICAvL1xuICAgIC8vICAgKiBicG1uOkFjdGl2aXR5XG4gICAgLy8gICAqIGJwbW46VGhyb3dFdmVudFxuICAgIC8vICAgKiBicG1uOkNhdGNoRXZlbnRcbiAgICAvL1xuICAgIGRlZmVycmVkLnB1c2goZnVuY3Rpb24oKSB7XG4gICAgICBmb3JFYWNoKGZsb3dOb2RlLmRhdGFJbnB1dEFzc29jaWF0aW9ucywgY29udGV4dHVhbChoYW5kbGVEYXRhQXNzb2NpYXRpb24sIGNvbnRleHQpKTtcbiAgICAgIGZvckVhY2goZmxvd05vZGUuZGF0YU91dHB1dEFzc29jaWF0aW9ucywgY29udGV4dHVhbChoYW5kbGVEYXRhQXNzb2NpYXRpb24sIGNvbnRleHQpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVNlcXVlbmNlRmxvdyhzZXF1ZW5jZUZsb3csIGNvbnRleHQpIHtcbiAgICB2aXNpdElmRGkoc2VxdWVuY2VGbG93LCBjb250ZXh0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZURhdGFFbGVtZW50KGRhdGFPYmplY3QsIGNvbnRleHQpIHtcbiAgICB2aXNpdElmRGkoZGF0YU9iamVjdCwgY29udGV4dCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVMYW5lKGxhbmUsIGNvbnRleHQpIHtcblxuICAgIGRlZmVycmVkLnB1c2goZnVuY3Rpb24oKSB7XG5cbiAgICAgIHZhciBuZXdDb250ZXh0ID0gdmlzaXRJZkRpKGxhbmUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAobGFuZS5jaGlsZExhbmVTZXQpIHtcbiAgICAgICAgaGFuZGxlTGFuZVNldChsYW5lLmNoaWxkTGFuZVNldCwgbmV3Q29udGV4dCB8fCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgd2lyZUZsb3dOb2RlUmVmcyhsYW5lKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUxhbmVTZXQobGFuZVNldCwgY29udGV4dCkge1xuICAgIGZvckVhY2gobGFuZVNldC5sYW5lcywgY29udGV4dHVhbChoYW5kbGVMYW5lLCBjb250ZXh0KSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVMYW5lU2V0cyhsYW5lU2V0cywgY29udGV4dCkge1xuICAgIGZvckVhY2gobGFuZVNldHMsIGNvbnRleHR1YWwoaGFuZGxlTGFuZVNldCwgY29udGV4dCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRmxvd0VsZW1lbnRzQ29udGFpbmVyKGNvbnRhaW5lciwgY29udGV4dCkge1xuICAgIGhhbmRsZUZsb3dFbGVtZW50cyhjb250YWluZXIuZmxvd0VsZW1lbnRzLCBjb250ZXh0KTtcblxuICAgIGlmIChjb250YWluZXIubGFuZVNldHMpIHtcbiAgICAgIGhhbmRsZUxhbmVTZXRzKGNvbnRhaW5lci5sYW5lU2V0cywgY29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRmxvd0VsZW1lbnRzKGZsb3dFbGVtZW50cywgY29udGV4dCkge1xuICAgIGZvckVhY2goZmxvd0VsZW1lbnRzLCBmdW5jdGlvbihlKSB7XG4gICAgICBpZiAoaXMoZSwgJ2JwbW46U2VxdWVuY2VGbG93JykpIHtcbiAgICAgICAgZGVmZXJyZWQucHVzaChmdW5jdGlvbigpIHtcbiAgICAgICAgICBoYW5kbGVTZXF1ZW5jZUZsb3coZSwgY29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChpcyhlLCAnYnBtbjpCb3VuZGFyeUV2ZW50JykpIHtcbiAgICAgICAgZGVmZXJyZWQudW5zaGlmdChmdW5jdGlvbigpIHtcbiAgICAgICAgICBoYW5kbGVGbG93Tm9kZShlLCBjb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGlzKGUsICdicG1uOkZsb3dOb2RlJykpIHtcbiAgICAgICAgaGFuZGxlRmxvd05vZGUoZSwgY29udGV4dCk7XG4gICAgICB9IGVsc2UgaWYgKGlzKGUsICdicG1uOkRhdGFPYmplY3QnKSkge1xuXG4gICAgICAgIC8vIFNLSVAgKGFzc3VtZSBjb3JyZWN0IHJlZmVyZW5jaW5nIHZpYSBEYXRhT2JqZWN0UmVmZXJlbmNlKVxuICAgICAgfSBlbHNlIGlmIChpcyhlLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnKSkge1xuICAgICAgICBoYW5kbGVEYXRhRWxlbWVudChlLCBjb250ZXh0KTtcbiAgICAgIH0gZWxzZSBpZiAoaXMoZSwgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScpKSB7XG4gICAgICAgIGhhbmRsZURhdGFFbGVtZW50KGUsIGNvbnRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nRXJyb3IoXG4gICAgICAgICAgdHJhbnNsYXRlKCd1bnJlY29nbml6ZWQgZmxvd0VsZW1lbnQge2VsZW1lbnR9IGluIGNvbnRleHQge2NvbnRleHR9Jywge1xuICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudFRvU3RyaW5nKGUpLFxuICAgICAgICAgICAgY29udGV4dDogKGNvbnRleHQgPyBlbGVtZW50VG9TdHJpbmcoY29udGV4dC5idXNpbmVzc09iamVjdCkgOiAnbnVsbCcpXG4gICAgICAgICAgfSksXG4gICAgICAgICAgeyBlbGVtZW50OiBlLCBjb250ZXh0OiBjb250ZXh0IH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVBhcnRpY2lwYW50KHBhcnRpY2lwYW50LCBjb250ZXh0KSB7XG4gICAgdmFyIG5ld0N0eCA9IHZpc2l0SWZEaShwYXJ0aWNpcGFudCwgY29udGV4dCk7XG5cbiAgICB2YXIgcHJvY2VzcyA9IHBhcnRpY2lwYW50LnByb2Nlc3NSZWY7XG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIGhhbmRsZVByb2Nlc3MocHJvY2VzcywgbmV3Q3R4IHx8IGNvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNvbGxhYm9yYXRpb24oY29sbGFib3JhdGlvbikge1xuXG4gICAgZm9yRWFjaChjb2xsYWJvcmF0aW9uLnBhcnRpY2lwYW50cywgY29udGV4dHVhbChoYW5kbGVQYXJ0aWNpcGFudCkpO1xuXG4gICAgaGFuZGxlQXJ0aWZhY3RzKGNvbGxhYm9yYXRpb24uYXJ0aWZhY3RzKTtcblxuICAgIC8vIGhhbmRsZSBtZXNzYWdlIGZsb3dzIGxhdGVzdCBpbiB0aGUgcHJvY2Vzc1xuICAgIGRlZmVycmVkLnB1c2goZnVuY3Rpb24oKSB7XG4gICAgICBoYW5kbGVNZXNzYWdlRmxvd3MoY29sbGFib3JhdGlvbi5tZXNzYWdlRmxvd3MpO1xuICAgIH0pO1xuICB9XG5cblxuICBmdW5jdGlvbiB3aXJlRmxvd05vZGVSZWZzKGxhbmUpIHtcblxuICAgIC8vIHdpcmUgdGhlIHZpcnR1YWwgZmxvd05vZGVSZWZzIDwtPiByZWxhdGlvbnNoaXBcbiAgICBmb3JFYWNoKGxhbmUuZmxvd05vZGVSZWYsIGZ1bmN0aW9uKGZsb3dOb2RlKSB7XG4gICAgICB2YXIgbGFuZXMgPSBmbG93Tm9kZS5nZXQoJ2xhbmVzJyk7XG5cbiAgICAgIGlmIChsYW5lcykge1xuICAgICAgICBsYW5lcy5wdXNoKGxhbmUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gQVBJIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICByZXR1cm4ge1xuICAgIGhhbmRsZURlZmVycmVkOiBoYW5kbGVEZWZlcnJlZCxcbiAgICBoYW5kbGVEZWZpbml0aW9uczogaGFuZGxlRGVmaW5pdGlvbnMsXG4gICAgaGFuZGxlU3ViUHJvY2VzczogaGFuZGxlU3ViUHJvY2VzcyxcbiAgICByZWdpc3RlckRpOiByZWdpc3RlckRpXG4gIH07XG59IiwiaW1wb3J0IEJwbW5UcmVlV2Fsa2VyIGZyb20gJy4vQnBtblRyZWVXYWxrZXInO1xuXG5cbi8qKlxuICogVGhlIGltcG9ydEJwbW5EaWFncmFtIHJlc3VsdC5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbXBvcnRCUE1ORGlhZ3JhbVJlc3VsdFxuICpcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gd2FybmluZ3NcbiAqL1xuXG4vKipcbiogVGhlIGltcG9ydEJwbW5EaWFncmFtIGVycm9yLlxuKlxuKiBAdHlwZWRlZiB7RXJyb3J9IEltcG9ydEJQTU5EaWFncmFtRXJyb3JcbipcbiogQHByb3BlcnR5IHtBcnJheTxzdHJpbmc+fSB3YXJuaW5nc1xuKi9cblxuLyoqXG4gKiBJbXBvcnQgdGhlIGRlZmluaXRpb25zIGludG8gYSBkaWFncmFtLlxuICpcbiAqIEVycm9ycyBhbmQgd2FybmluZ3MgYXJlIHJlcG9ydGVkIHRocm91Z2ggdGhlIHNwZWNpZmllZCBjYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0gIHtkanMuRGlhZ3JhbX0gZGlhZ3JhbVxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudDxEZWZpbml0aW9ucz59IGRlZmluaXRpb25zXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50PEJQTU5EaWFncmFtPn0gW2JwbW5EaWFncmFtXSB0aGUgZGlhZ3JhbSB0byBiZSByZW5kZXJlZFxuICogKGlmIG5vdCBwcm92aWRlZCwgdGhlIGZpcnN0IG9uZSB3aWxsIGJlIHJlbmRlcmVkKVxuICpcbiAqIFJldHVybnMge1Byb21pc2U8SW1wb3J0QlBNTkRpYWdyYW1SZXN1bHQsIEltcG9ydEJQTU5EaWFncmFtRXJyb3I+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW1wb3J0QnBtbkRpYWdyYW0oZGlhZ3JhbSwgZGVmaW5pdGlvbnMsIGJwbW5EaWFncmFtKSB7XG5cbiAgdmFyIGltcG9ydGVyLFxuICAgICAgZXZlbnRCdXMsXG4gICAgICB0cmFuc2xhdGU7XG5cbiAgdmFyIGVycm9yLFxuICAgICAgd2FybmluZ3MgPSBbXTtcblxuICAvKipcbiAgICogV2FsayB0aGUgZGlhZ3JhbSBzZW1hbnRpY2FsbHksIGltcG9ydGluZyAoPWRyYXdpbmcpXG4gICAqIGFsbCBlbGVtZW50cyB5b3UgZW5jb3VudGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge01vZGRsZUVsZW1lbnQ8RGVmaW5pdGlvbnM+fSBkZWZpbml0aW9uc1xuICAgKiBAcGFyYW0ge01vZGRsZUVsZW1lbnQ8QlBNTkRpYWdyYW0+fSBicG1uRGlhZ3JhbVxuICAgKi9cbiAgZnVuY3Rpb24gcmVuZGVyKGRlZmluaXRpb25zLCBicG1uRGlhZ3JhbSkge1xuXG4gICAgdmFyIHZpc2l0b3IgPSB7XG5cbiAgICAgIHJvb3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGltcG9ydGVyLmFkZChlbGVtZW50KTtcbiAgICAgIH0sXG5cbiAgICAgIGVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHBhcmVudFNoYXBlKSB7XG4gICAgICAgIHJldHVybiBpbXBvcnRlci5hZGQoZWxlbWVudCwgcGFyZW50U2hhcGUpO1xuICAgICAgfSxcblxuICAgICAgZXJyb3I6IGZ1bmN0aW9uKG1lc3NhZ2UsIGNvbnRleHQpIHtcbiAgICAgICAgd2FybmluZ3MucHVzaCh7IG1lc3NhZ2U6IG1lc3NhZ2UsIGNvbnRleHQ6IGNvbnRleHQgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciB3YWxrZXIgPSBuZXcgQnBtblRyZWVXYWxrZXIodmlzaXRvciwgdHJhbnNsYXRlKTtcblxuICAgIC8vIHRyYXZlcnNlIEJQTU4gMi4wIGRvY3VtZW50IG1vZGVsLFxuICAgIC8vIHN0YXJ0aW5nIGF0IGRlZmluaXRpb25zXG4gICAgd2Fsa2VyLmhhbmRsZURlZmluaXRpb25zKGRlZmluaXRpb25zLCBicG1uRGlhZ3JhbSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGltcG9ydGVyID0gZGlhZ3JhbS5nZXQoJ2JwbW5JbXBvcnRlcicpO1xuICAgICAgZXZlbnRCdXMgPSBkaWFncmFtLmdldCgnZXZlbnRCdXMnKTtcbiAgICAgIHRyYW5zbGF0ZSA9IGRpYWdyYW0uZ2V0KCd0cmFuc2xhdGUnKTtcblxuICAgICAgZXZlbnRCdXMuZmlyZSgnaW1wb3J0LnJlbmRlci5zdGFydCcsIHsgZGVmaW5pdGlvbnM6IGRlZmluaXRpb25zIH0pO1xuXG4gICAgICByZW5kZXIoZGVmaW5pdGlvbnMsIGJwbW5EaWFncmFtKTtcblxuICAgICAgZXZlbnRCdXMuZmlyZSgnaW1wb3J0LnJlbmRlci5jb21wbGV0ZScsIHtcbiAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICB3YXJuaW5nczogd2FybmluZ3NcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh7IHdhcm5pbmdzOiB3YXJuaW5ncyB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG5cbiAgICAgIGUud2FybmluZ3MgPSB3YXJuaW5ncztcbiAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBlbGVtZW50VG9TdHJpbmcoZSkge1xuICBpZiAoIWUpIHtcbiAgICByZXR1cm4gJzxudWxsPic7XG4gIH1cblxuICByZXR1cm4gJzwnICsgZS4kdHlwZSArIChlLmlkID8gJyBpZD1cIicgKyBlLmlkIDogJycpICsgJ1wiIC8+Jztcbn0iLCJpbXBvcnQgdHJhbnNsYXRlIGZyb20gJ2RpYWdyYW0tanMvbGliL2kxOG4vdHJhbnNsYXRlJztcblxuaW1wb3J0IEJwbW5JbXBvcnRlciBmcm9tICcuL0JwbW5JbXBvcnRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICB0cmFuc2xhdGVcbiAgXSxcbiAgYnBtbkltcG9ydGVyOiBbICd0eXBlJywgQnBtbkltcG9ydGVyIF1cbn07IiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ21pbi1kYXNoJztcblxuLy8gVE9ETyhuaWtrdSk6IHJlbW92ZSB3aXRoIGZ1dHVyZSBicG1uLWpzIHZlcnNpb25cblxuLyoqXG4gKiBXcmFwcyBBUElzIHRvIGNoZWNrOlxuICpcbiAqIDEpIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkIC0+IFdhcm4gdXNlcnMgYWJvdXQgY2FsbGJhY2sgZGVwcmVjYXRpb24uXG4gKiAyKSBJZiBQcm9taXNlIGNsYXNzIGlzIGltcGxlbWVudGVkIGluIGN1cnJlbnQgZW52aXJvbm1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXBGb3JDb21wYXRpYmlsaXR5KGFwaSkge1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcblxuICAgIGlmICghd2luZG93LlByb21pc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJvbWlzZXMgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGVudmlyb25tZW50LiBQbGVhc2UgcG9seWZpbGwgUHJvbWlzZS4nKTtcbiAgICB9XG5cbiAgICB2YXIgYXJnTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZiAoYXJnTGVuID49IDEgJiYgaXNGdW5jdGlvbihhcmd1bWVudHNbYXJnTGVuIC0gMV0pKSB7XG5cbiAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1thcmdMZW4gLSAxXTtcblxuICAgICAgY29uc29sZS53YXJuKG5ldyBFcnJvcihcbiAgICAgICAgJ1Bhc3NpbmcgY2FsbGJhY2tzIHRvICcgKyBhcGkubmFtZSArICcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgK1xuICAgICAgICAnUGxlYXNlIHN3aXRjaCB0byBwcm9taXNlczogaHR0cHM6Ly9icG1uLmlvL2wvbW92aW5nLXRvLXByb21pc2VzLmh0bWwnXG4gICAgICApKTtcblxuICAgICAgdmFyIGFyZ3NXaXRob3V0Q2FsbGJhY2sgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDAsIC0xKTtcblxuICAgICAgYXBpLmFwcGx5KHRoaXMsIGFyZ3NXaXRob3V0Q2FsbGJhY2spLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG5cbiAgICAgICAgdmFyIGZpcnN0S2V5ID0gT2JqZWN0LmtleXMocmVzdWx0KVswXTtcblxuICAgICAgICAvLyBUaGUgQVBJcyB3ZSBhcmUgd3JhcHBpbmcgYWxsIHJlc29sdmUgYSBzaW5nbGUgaXRlbSBkZXBlbmRpbmcgb24gdGhlIEFQSS5cbiAgICAgICAgLy8gRm9yIGluc3RhbmNlLCBpbXBvcnRYTUwgcmVzb2x2ZXMgeyB3YXJuaW5ncyB9IGFuZCBzYXZlWE1MIHJldHVybnMgeyB4bWwgfS5cbiAgICAgICAgLy8gVGhhdCdzIHdoeSB3ZSBjYW4gY2FsbCB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgZmlyc3QgaXRlbSBvZiByZXN1bHQuXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCByZXN1bHRbZmlyc3RLZXldKTtcblxuICAgICAgICAvLyBQYXNzaW5nIGEgc2Vjb25kIHBhcmFtdGVyIGluc3RlYWQgb2YgY2F0Y2ggYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGNhdGNoIGVycm9ycyB0aHJvd24gYnkgY2FsbGJhY2soKS5cbiAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIsIGVyci53YXJuaW5ncyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICByZXR1cm4gYXBpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9O1xufVxuIiwiaW1wb3J0IHtcbiAgaXMsXG4gIGdldEJ1c2luZXNzT2JqZWN0XG59IGZyb20gJy4vTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXhwYW5kZWQoZWxlbWVudCkge1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpDYWxsQWN0aXZpdHknKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcbiAgICByZXR1cm4gISFnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5kaS5pc0V4cGFuZGVkO1xuICB9XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICByZXR1cm4gISFnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5wcm9jZXNzUmVmO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVycnVwdGluZyhlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50ICYmIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmlzSW50ZXJydXB0aW5nICE9PSBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXZlbnRTdWJQcm9jZXNzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgJiYgISFnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS50cmlnZ2VyZWRCeUV2ZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsIGV2ZW50VHlwZSkge1xuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICAgIGhhc0V2ZW50RGVmaW5pdGlvbiA9IGZhbHNlO1xuXG4gIGlmIChiby5ldmVudERlZmluaXRpb25zKSB7XG4gICAgZm9yRWFjaChiby5ldmVudERlZmluaXRpb25zLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgaWYgKGlzKGV2ZW50LCBldmVudFR5cGUpKSB7XG4gICAgICAgIGhhc0V2ZW50RGVmaW5pdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gaGFzRXZlbnREZWZpbml0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRXJyb3JFdmVudERlZmluaXRpb24oZWxlbWVudCkge1xuICByZXR1cm4gaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOkVycm9yRXZlbnREZWZpbml0aW9uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJyk7XG59XG4iLCJpbXBvcnQge1xuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4vTW9kZWxVdGlsJztcblxuXG5leHBvcnQgdmFyIERFRkFVTFRfTEFCRUxfU0laRSA9IHtcbiAgd2lkdGg6IDkwLFxuICBoZWlnaHQ6IDIwXG59O1xuXG5leHBvcnQgdmFyIEZMT1dfTEFCRUxfSU5ERU5UID0gMTU7XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHNlbWFudGljIGhhcyBhbiBleHRlcm5hbCBsYWJlbFxuICpcbiAqIEBwYXJhbSB7QnBtbkVsZW1lbnR9IHNlbWFudGljXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGhhcyBsYWJlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNMYWJlbEV4dGVybmFsKHNlbWFudGljKSB7XG4gIHJldHVybiBpcyhzZW1hbnRpYywgJ2JwbW46RXZlbnQnKSB8fFxuICAgICAgICAgaXMoc2VtYW50aWMsICdicG1uOkdhdGV3YXknKSB8fFxuICAgICAgICAgaXMoc2VtYW50aWMsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScpIHx8XG4gICAgICAgICBpcyhzZW1hbnRpYywgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScpIHx8XG4gICAgICAgICBpcyhzZW1hbnRpYywgJ2JwbW46RGF0YUlucHV0JykgfHxcbiAgICAgICAgIGlzKHNlbWFudGljLCAnYnBtbjpEYXRhT3V0cHV0JykgfHxcbiAgICAgICAgIGlzKHNlbWFudGljLCAnYnBtbjpTZXF1ZW5jZUZsb3cnKSB8fFxuICAgICAgICAgaXMoc2VtYW50aWMsICdicG1uOk1lc3NhZ2VGbG93JykgfHxcbiAgICAgICAgIGlzKHNlbWFudGljLCAnYnBtbjpHcm91cCcpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBoYXMgYW4gZXh0ZXJuYWwgbGFiZWxcbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5zaGFwZX0gZWxlbWVudFxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBoYXMgbGFiZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0V4dGVybmFsTGFiZWwoZWxlbWVudCkge1xuICByZXR1cm4gaXNMYWJlbChlbGVtZW50LmxhYmVsKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHBvc2l0aW9uIGZvciBzZXF1ZW5jZSBmbG93IGxhYmVsc1xuICpcbiAqIEBwYXJhbSAge0FycmF5PFBvaW50Pn0gd2F5cG9pbnRzXG4gKiBAcmV0dXJuIHtQb2ludH0gdGhlIGxhYmVsIHBvc2l0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbG93TGFiZWxQb3NpdGlvbih3YXlwb2ludHMpIHtcblxuICAvLyBnZXQgdGhlIHdheXBvaW50cyBtaWRcbiAgdmFyIG1pZCA9IHdheXBvaW50cy5sZW5ndGggLyAyIC0gMTtcblxuICB2YXIgZmlyc3QgPSB3YXlwb2ludHNbTWF0aC5mbG9vcihtaWQpXTtcbiAgdmFyIHNlY29uZCA9IHdheXBvaW50c1tNYXRoLmNlaWwobWlkICsgMC4wMSldO1xuXG4gIC8vIGdldCBwb3NpdGlvblxuICB2YXIgcG9zaXRpb24gPSBnZXRXYXlwb2ludHNNaWQod2F5cG9pbnRzKTtcblxuICAvLyBjYWxjdWxhdGUgYW5nbGVcbiAgdmFyIGFuZ2xlID0gTWF0aC5hdGFuKChzZWNvbmQueSAtIGZpcnN0LnkpIC8gKHNlY29uZC54IC0gZmlyc3QueCkpO1xuXG4gIHZhciB4ID0gcG9zaXRpb24ueCxcbiAgICAgIHkgPSBwb3NpdGlvbi55O1xuXG4gIGlmIChNYXRoLmFicyhhbmdsZSkgPCBNYXRoLlBJIC8gMikge1xuICAgIHkgLT0gRkxPV19MQUJFTF9JTkRFTlQ7XG4gIH0gZWxzZSB7XG4gICAgeCArPSBGTE9XX0xBQkVMX0lOREVOVDtcbiAgfVxuXG4gIHJldHVybiB7IHg6IHgsIHk6IHkgfTtcbn1cblxuXG4vKipcbiAqIEdldCB0aGUgbWlkZGxlIG9mIGEgbnVtYmVyIG9mIHdheXBvaW50c1xuICpcbiAqIEBwYXJhbSAge0FycmF5PFBvaW50Pn0gd2F5cG9pbnRzXG4gKiBAcmV0dXJuIHtQb2ludH0gdGhlIG1pZCBwb2ludFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2F5cG9pbnRzTWlkKHdheXBvaW50cykge1xuXG4gIHZhciBtaWQgPSB3YXlwb2ludHMubGVuZ3RoIC8gMiAtIDE7XG5cbiAgdmFyIGZpcnN0ID0gd2F5cG9pbnRzW01hdGguZmxvb3IobWlkKV07XG4gIHZhciBzZWNvbmQgPSB3YXlwb2ludHNbTWF0aC5jZWlsKG1pZCArIDAuMDEpXTtcblxuICByZXR1cm4ge1xuICAgIHg6IGZpcnN0LnggKyAoc2Vjb25kLnggLSBmaXJzdC54KSAvIDIsXG4gICAgeTogZmlyc3QueSArIChzZWNvbmQueSAtIGZpcnN0LnkpIC8gMlxuICB9O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlcm5hbExhYmVsTWlkKGVsZW1lbnQpIHtcblxuICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcbiAgICByZXR1cm4gZ2V0Rmxvd0xhYmVsUG9zaXRpb24oZWxlbWVudC53YXlwb2ludHMpO1xuICB9IGVsc2UgaWYgKGlzKGVsZW1lbnQsICdicG1uOkdyb3VwJykpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogZWxlbWVudC54ICsgZWxlbWVudC53aWR0aCAvIDIsXG4gICAgICB5OiBlbGVtZW50LnkgKyBERUZBVUxUX0xBQkVMX1NJWkUuaGVpZ2h0IC8gMlxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGVsZW1lbnQueCArIGVsZW1lbnQud2lkdGggLyAyLFxuICAgICAgeTogZWxlbWVudC55ICsgZWxlbWVudC5oZWlnaHQgKyBERUZBVUxUX0xBQkVMX1NJWkUuaGVpZ2h0IC8gMlxuICAgIH07XG4gIH1cbn1cblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiBhbiBlbGVtZW50cyBsYWJlbCwgcGFyc2VkIGZyb20gdGhlIGVsZW1lbnRzIERJIG9yXG4gKiBnZW5lcmF0ZWQgZnJvbSBpdHMgYm91bmRzLlxuICpcbiAqIEBwYXJhbSB7QnBtbkVsZW1lbnR9IHNlbWFudGljXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlcm5hbExhYmVsQm91bmRzKHNlbWFudGljLCBlbGVtZW50KSB7XG5cbiAgdmFyIG1pZCxcbiAgICAgIHNpemUsXG4gICAgICBib3VuZHMsXG4gICAgICBkaSA9IHNlbWFudGljLmRpLFxuICAgICAgbGFiZWwgPSBkaS5sYWJlbDtcblxuICBpZiAobGFiZWwgJiYgbGFiZWwuYm91bmRzKSB7XG4gICAgYm91bmRzID0gbGFiZWwuYm91bmRzO1xuXG4gICAgc2l6ZSA9IHtcbiAgICAgIHdpZHRoOiBNYXRoLm1heChERUZBVUxUX0xBQkVMX1NJWkUud2lkdGgsIGJvdW5kcy53aWR0aCksXG4gICAgICBoZWlnaHQ6IGJvdW5kcy5oZWlnaHRcbiAgICB9O1xuXG4gICAgbWlkID0ge1xuICAgICAgeDogYm91bmRzLnggKyBib3VuZHMud2lkdGggLyAyLFxuICAgICAgeTogYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0IC8gMlxuICAgIH07XG4gIH0gZWxzZSB7XG5cbiAgICBtaWQgPSBnZXRFeHRlcm5hbExhYmVsTWlkKGVsZW1lbnQpO1xuXG4gICAgc2l6ZSA9IERFRkFVTFRfTEFCRUxfU0laRTtcbiAgfVxuXG4gIHJldHVybiBhc3NpZ24oe1xuICAgIHg6IG1pZC54IC0gc2l6ZS53aWR0aCAvIDIsXG4gICAgeTogbWlkLnkgLSBzaXplLmhlaWdodCAvIDJcbiAgfSwgc2l6ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xhYmVsKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgJiYgISFlbGVtZW50LmxhYmVsVGFyZ2V0O1xufVxuIiwiLyoqXG4gKiBJcyBhbiBlbGVtZW50IG9mIHRoZSBnaXZlbiBCUE1OIHR5cGU/XG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V8TW9kZGxlRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtICB7c3RyaW5nfSB0eXBlXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzKGVsZW1lbnQsIHR5cGUpIHtcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgcmV0dXJuIGJvICYmICh0eXBlb2YgYm8uJGluc3RhbmNlT2YgPT09ICdmdW5jdGlvbicpICYmIGJvLiRpbnN0YW5jZU9mKHR5cGUpO1xufVxuXG5cbi8qKlxuICogUmV0dXJuIHRoZSBidXNpbmVzcyBvYmplY3QgZm9yIGEgZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZXxNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIChlbGVtZW50ICYmIGVsZW1lbnQuYnVzaW5lc3NPYmplY3QpIHx8IGVsZW1lbnQ7XG59IiwiLyoqXG4gKiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgY2hhbmdlZCBvciBleGNoYW5nZWQuXG4gKlxuICogQHNlZSBodHRwOi8vYnBtbi5pby9saWNlbnNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICovXG5cbmltcG9ydCB7XG4gIGRvbWlmeSxcbiAgZGVsZWdhdGUgYXMgZG9tRGVsZWdhdGVcbn0gZnJvbSAnbWluLWRvbSc7XG5cblxuLy8gaW5saW5lZCAuLi8uLi9yZXNvdXJjZXMvbG9nby5zdmdcbnZhciBCUE1OSU9fTE9HT19TVkcgPSAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNC4wMiA1LjU3XCIgd2lkdGg9XCI1M1wiIGhlaWdodD1cIjIxXCIgc3R5bGU9XCJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGVcIj48cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0xLjg4Ljkydi4xNGMwIC40MS0uMTMuNjgtLjQuOC4zMy4xNC40Ni40NC40Ni44NnYuMzNjMCAuNjEtLjMzLjk1LS45NS45NUgwVjBoLjk1Yy42NSAwIC45My4zLjkzLjkyek0uNjMuNTd2MS4wNmguMjRjLjI0IDAgLjM4LS4xLjM4LS40M1YuOThjMC0uMjgtLjEtLjQtLjMyLS40em0wIDEuNjN2MS4yMmguMzZjLjIgMCAuMzItLjEuMzItLjM5di0uMzVjMC0uMzctLjEyLS40OC0uNC0uNDhILjYzek00LjE4Ljk5di41MmMwIC42NC0uMzEuOTgtLjk0Ljk4aC0uM1Y0aC0uNjJWMGguOTJjLjYzIDAgLjk0LjM1Ljk0Ljk5ek0yLjk0LjU3djEuMzVoLjNjLjIgMCAuMy0uMDkuMy0uMzd2LS42YzAtLjI5LS4xLS4zOC0uMy0uMzhoLS4zem0yLjg5IDIuMjdMNi4yNSAwaC44OHY0aC0uNlYxLjEyTDYuMSAzLjk5aC0uNmwtLjQ2LTIuODJ2Mi44MmgtLjU1VjBoLjg3ek04LjE0IDEuMVY0aC0uNTZWMGguNzlMOSAyLjRWMGguNTZ2NGgtLjY0em0yLjQ5IDIuMjl2LjZoLS42di0uNnpNMTIuMTIgMWMwLS42My4zMy0xIC45NS0xIC42MSAwIC45NS4zNy45NSAxdjIuMDRjMCAuNjQtLjM0IDEtLjk1IDEtLjYyIDAtLjk1LS4zNy0uOTUtMXptLjYyIDIuMDhjMCAuMjguMTMuMzkuMzMuMzlzLjMyLS4xLjMyLS40Vi45OGMwLS4yOS0uMTItLjQtLjMyLS40cy0uMzMuMTEtLjMzLjR6XCIvPjxwYXRoIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTAgNC41M2gxNC4wMnYxLjA0SDB6TTExLjA4IDBoLjYzdi42MmgtLjYzem0uNjMgNFYxaC0uNjN2Mi45OHpcIi8+PC9zdmc+JztcblxuZXhwb3J0IHZhciBCUE1OSU9fSU1HID0gQlBNTklPX0xPR09fU1ZHO1xuXG5mdW5jdGlvbiBjc3MoYXR0cnMpIHtcbiAgcmV0dXJuIGF0dHJzLmpvaW4oJzsnKTtcbn1cblxuZXhwb3J0IHZhciBMSU5LX1NUWUxFUyA9IGNzcyhbXG4gICdjb2xvcjogIzQwNDA0MCdcbl0pO1xuXG52YXIgTElHSFRCT1hfU1RZTEVTID0gY3NzKFtcbiAgJ3otaW5kZXg6IDEwMDEnLFxuICAncG9zaXRpb246IGZpeGVkJyxcbiAgJ3RvcDogMCcsXG4gICdsZWZ0OiAwJyxcbiAgJ3JpZ2h0OiAwJyxcbiAgJ2JvdHRvbTogMCdcbl0pO1xuXG52YXIgQkFDS0RST1BfU1RZTEVTID0gY3NzKFtcbiAgJ3dpZHRoOiAxMDAlJyxcbiAgJ2hlaWdodDogMTAwJScsXG4gICdiYWNrZ3JvdW5kOiByZ2JhKDQwLDQwLDQwLDAuMiknXG5dKTtcblxudmFyIE5PVElDRV9TVFlMRVMgPSBjc3MoW1xuICAncG9zaXRpb246IGFic29sdXRlJyxcbiAgJ2xlZnQ6IDUwJScsXG4gICd0b3A6IDQwJScsXG4gICd0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlKScsXG4gICd3aWR0aDogMjYwcHgnLFxuICAncGFkZGluZzogMTBweCcsXG4gICdiYWNrZ3JvdW5kOiB3aGl0ZScsXG4gICdib3gtc2hhZG93OiAwIDFweCA0cHggcmdiYSgwLDAsMCwwLjMpJyxcbiAgJ2ZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmJyxcbiAgJ2ZvbnQtc2l6ZTogMTRweCcsXG4gICdkaXNwbGF5OiBmbGV4JyxcbiAgJ2xpbmUtaGVpZ2h0OiAxLjMnXG5dKTtcblxudmFyIExJR0hUQk9YX01BUktVUCA9XG4gICc8ZGl2IGNsYXNzPVwiYmpzLXBvd2VyZWQtYnktbGlnaHRib3hcIiBzdHlsZT1cIicgKyBMSUdIVEJPWF9TVFlMRVMgKyAnXCI+JyArXG4gICAgJzxkaXYgY2xhc3M9XCJiYWNrZHJvcFwiIHN0eWxlPVwiJyArIEJBQ0tEUk9QX1NUWUxFUyArICdcIj48L2Rpdj4nICtcbiAgICAnPGRpdiBjbGFzcz1cIm5vdGljZVwiIHN0eWxlPVwiJyArIE5PVElDRV9TVFlMRVMgKyAnXCI+JyArXG4gICAgICAnPGEgaHJlZj1cImh0dHBzOi8vYnBtbi5pb1wiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyXCIgc3R5bGU9XCJtYXJnaW46IDE1cHggMjBweCAxNXB4IDEwcHg7IGFsaWduLXNlbGY6IGNlbnRlcjsnICsgTElOS19TVFlMRVMgKyAnXCI+JyArXG4gICAgICAgIEJQTU5JT19JTUcgK1xuICAgICAgJzwvYT4nICtcbiAgICAgICc8c3Bhbj4nICtcbiAgICAgICAgJ1dlYi1iYXNlZCB0b29saW5nIGZvciBCUE1OLCBETU4gYW5kIENNTU4gZGlhZ3JhbXMgJyArXG4gICAgICAgICdwb3dlcmVkIGJ5IDxhIGhyZWY9XCJodHRwczovL2JwbW4uaW9cIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lclwiPmJwbW4uaW88L2E+LicgK1xuICAgICAgJzwvc3Bhbj4nICtcbiAgICAnPC9kaXY+JyArXG4gICc8L2Rpdj4nO1xuXG5cbnZhciBsaWdodGJveDtcblxuZXhwb3J0IGZ1bmN0aW9uIG9wZW4oKSB7XG5cbiAgaWYgKCFsaWdodGJveCkge1xuICAgIGxpZ2h0Ym94ID0gZG9taWZ5KExJR0hUQk9YX01BUktVUCk7XG5cbiAgICBkb21EZWxlZ2F0ZS5iaW5kKGxpZ2h0Ym94LCAnLmJhY2tkcm9wJywgJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGlnaHRib3gpO1xuICAgIH0pO1xuICB9XG5cbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaWdodGJveCk7XG59XG4iLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSAnLi9saWIvRGlhZ3JhbSc7IiwiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdkaWRpJztcblxuaW1wb3J0IENvcmVNb2R1bGUgZnJvbSAnLi9jb3JlJztcblxuXG4vKipcbiAqIEJvb3RzdHJhcCBhbiBpbmplY3RvciBmcm9tIGEgbGlzdCBvZiBtb2R1bGVzLCBpbnN0YW50aWF0aW5nIGEgbnVtYmVyIG9mIGRlZmF1bHQgY29tcG9uZW50c1xuICpcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7QXJyYXk8ZGlkaS5Nb2R1bGU+fSBib290c3RyYXBNb2R1bGVzXG4gKlxuICogQHJldHVybiB7ZGlkaS5JbmplY3Rvcn0gYSBpbmplY3RvciB0byB1c2UgdG8gYWNjZXNzIHRoZSBjb21wb25lbnRzXG4gKi9cbmZ1bmN0aW9uIGJvb3RzdHJhcChib290c3RyYXBNb2R1bGVzKSB7XG5cbiAgdmFyIG1vZHVsZXMgPSBbXSxcbiAgICAgIGNvbXBvbmVudHMgPSBbXTtcblxuICBmdW5jdGlvbiBoYXNNb2R1bGUobSkge1xuICAgIHJldHVybiBtb2R1bGVzLmluZGV4T2YobSkgPj0gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZE1vZHVsZShtKSB7XG4gICAgbW9kdWxlcy5wdXNoKG0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdmlzaXQobSkge1xuICAgIGlmIChoYXNNb2R1bGUobSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAobS5fX2RlcGVuZHNfXyB8fCBbXSkuZm9yRWFjaCh2aXNpdCk7XG5cbiAgICBpZiAoaGFzTW9kdWxlKG0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYWRkTW9kdWxlKG0pO1xuXG4gICAgKG0uX19pbml0X18gfHwgW10pLmZvckVhY2goZnVuY3Rpb24oYykge1xuICAgICAgY29tcG9uZW50cy5wdXNoKGMpO1xuICAgIH0pO1xuICB9XG5cbiAgYm9vdHN0cmFwTW9kdWxlcy5mb3JFYWNoKHZpc2l0KTtcblxuICB2YXIgaW5qZWN0b3IgPSBuZXcgSW5qZWN0b3IobW9kdWxlcyk7XG5cbiAgY29tcG9uZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGMpIHtcblxuICAgIHRyeSB7XG5cbiAgICAgIC8vIGVhZ2VybHkgcmVzb2x2ZSBjb21wb25lbnQgKGZuIG9yIHN0cmluZylcbiAgICAgIGluamVjdG9yW3R5cGVvZiBjID09PSAnc3RyaW5nJyA/ICdnZXQnIDogJ2ludm9rZSddKGMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBpbnN0YW50aWF0ZSBjb21wb25lbnQnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG5cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gaW5qZWN0b3I7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBpbmplY3RvciBmcm9tIHBhc3NlZCBvcHRpb25zLlxuICpcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7ZGlkaS5JbmplY3Rvcn1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5qZWN0b3Iob3B0aW9ucykge1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBjb25maWdNb2R1bGUgPSB7XG4gICAgJ2NvbmZpZyc6IFsndmFsdWUnLCBvcHRpb25zXVxuICB9O1xuXG4gIHZhciBtb2R1bGVzID0gWyBjb25maWdNb2R1bGUsIENvcmVNb2R1bGUgXS5jb25jYXQob3B0aW9ucy5tb2R1bGVzIHx8IFtdKTtcblxuICByZXR1cm4gYm9vdHN0cmFwKG1vZHVsZXMpO1xufVxuXG5cbi8qKlxuICogVGhlIG1haW4gZGlhZ3JhbS1qcyBlbnRyeSBwb2ludCB0aGF0IGJvb3RzdHJhcHMgdGhlIGRpYWdyYW0gd2l0aCB0aGUgZ2l2ZW5cbiAqIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogVG8gcmVnaXN0ZXIgZXh0ZW5zaW9ucyB3aXRoIHRoZSBkaWFncmFtLCBwYXNzIHRoZW0gYXMgQXJyYXk8ZGlkaS5Nb2R1bGU+IHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAY2xhc3MgZGpzLkRpYWdyYW1cbiAqIEBtZW1iZXJPZiBkanNcbiAqIEBjb25zdHJ1Y3RvclxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGNhcHRpb24+Q3JlYXRpbmcgYSBwbHVnLWluIHRoYXQgbG9ncyB3aGVuZXZlciBhIHNoYXBlIGlzIGFkZGVkIHRvIHRoZSBjYW52YXMuPC9jYXB0aW9uPlxuICpcbiAqIC8vIHBsdWctaW4gaW1wbGVtZW5lbnRhdGlvblxuICogZnVuY3Rpb24gTXlMb2dnaW5nUGx1Z2luKGV2ZW50QnVzKSB7XG4gKiAgIGV2ZW50QnVzLm9uKCdzaGFwZS5hZGRlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gKiAgICAgY29uc29sZS5sb2coJ3NoYXBlICcsIGV2ZW50LnNoYXBlLCAnIHdhcyBhZGRlZCB0byB0aGUgZGlhZ3JhbScpO1xuICogICB9KTtcbiAqIH1cbiAqXG4gKiAvLyBleHBvcnQgYXMgbW9kdWxlXG4gKiBleHBvcnQgZGVmYXVsdCB7XG4gKiAgIF9faW5pdF9fOiBbICdteUxvZ2dpbmdQbHVnaW4nIF0sXG4gKiAgICAgbXlMb2dnaW5nUGx1Z2luOiBbICd0eXBlJywgTXlMb2dnaW5nUGx1Z2luIF1cbiAqIH07XG4gKlxuICpcbiAqIC8vIGluc3RhbnRpYXRlIHRoZSBkaWFncmFtIHdpdGggdGhlIG5ldyBwbHVnLWluXG4gKlxuICogaW1wb3J0IE15TG9nZ2luZ01vZHVsZSBmcm9tICdwYXRoLXRvLW15LWxvZ2dpbmctcGx1Z2luJztcbiAqXG4gKiB2YXIgZGlhZ3JhbSA9IG5ldyBEaWFncmFtKHtcbiAqICAgbW9kdWxlczogW1xuICogICAgIE15TG9nZ2luZ01vZHVsZVxuICogICBdXG4gKiB9KTtcbiAqXG4gKiBkaWFncmFtLmludm9rZShbICdjYW52YXMnLCBmdW5jdGlvbihjYW52YXMpIHtcbiAqICAgLy8gYWRkIHNoYXBlIHRvIGRyYXdpbmcgY2FudmFzXG4gKiAgIGNhbnZhcy5hZGRTaGFwZSh7IHg6IDEwLCB5OiAxMCB9KTtcbiAqIH0pO1xuICpcbiAqIC8vICdzaGFwZSAuLi4gd2FzIGFkZGVkIHRvIHRoZSBkaWFncmFtJyBsb2dnZWQgdG8gY29uc29sZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge0FycmF5PGRpZGkuTW9kdWxlPn0gW29wdGlvbnMubW9kdWxlc10gZXh0ZXJuYWwgbW9kdWxlcyB0byBpbnN0YW50aWF0ZSB3aXRoIHRoZSBkaWFncmFtXG4gKiBAcGFyYW0ge2RpZGkuSW5qZWN0b3J9IFtpbmplY3Rvcl0gYW4gKG9wdGlvbmFsKSBpbmplY3RvciB0byBib290c3RyYXAgdGhlIGRpYWdyYW0gd2l0aFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEaWFncmFtKG9wdGlvbnMsIGluamVjdG9yKSB7XG5cbiAgLy8gY3JlYXRlIGluamVjdG9yIHVubGVzcyBleHBsaWNpdGx5IHNwZWNpZmllZFxuICB0aGlzLmluamVjdG9yID0gaW5qZWN0b3IgPSBpbmplY3RvciB8fCBjcmVhdGVJbmplY3RvcihvcHRpb25zKTtcblxuICAvLyBBUElcblxuICAvKipcbiAgICogUmVzb2x2ZXMgYSBkaWFncmFtIHNlcnZpY2VcbiAgICpcbiAgICogQG1ldGhvZCBEaWFncmFtI2dldFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZGlhZ3JhbSBzZXJ2aWNlIHRvIGJlIHJldHJpZXZlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdHJpY3Q9dHJ1ZV0gaWYgZmFsc2UsIHJlc29sdmUgbWlzc2luZyBzZXJ2aWNlcyB0byBudWxsXG4gICAqL1xuICB0aGlzLmdldCA9IGluamVjdG9yLmdldDtcblxuICAvKipcbiAgICogRXhlY3V0ZXMgYSBmdW5jdGlvbiBpbnRvIHdoaWNoIGRpYWdyYW0gc2VydmljZXMgYXJlIGluamVjdGVkXG4gICAqXG4gICAqIEBtZXRob2QgRGlhZ3JhbSNpbnZva2VcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3RbXX0gZm4gdGhlIGZ1bmN0aW9uIHRvIHJlc29sdmVcbiAgICogQHBhcmFtIHtPYmplY3R9IGxvY2FscyBhIG51bWJlciBvZiBsb2NhbHMgdG8gdXNlIHRvIHJlc29sdmUgY2VydGFpbiBkZXBlbmRlbmNpZXNcbiAgICovXG4gIHRoaXMuaW52b2tlID0gaW5qZWN0b3IuaW52b2tlO1xuXG4gIC8vIGluaXRcblxuICAvLyBpbmRpY2F0ZSB2aWEgZXZlbnRcblxuXG4gIC8qKlxuICAgKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgYWxsIHBsdWctaW5zIGFyZSBsb2FkZWQuXG4gICAqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGZpcmUgb3RoZXIgZXZlbnRzIHRvIGludGVyZXN0ZWQgcGx1Zy1pbnNcbiAgICpcbiAgICogQG1lbWJlck9mIERpYWdyYW1cbiAgICpcbiAgICogQGV2ZW50IGRpYWdyYW0uaW5pdFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBldmVudEJ1cy5vbignZGlhZ3JhbS5pbml0JywgZnVuY3Rpb24oKSB7XG4gICAqICAgZXZlbnRCdXMuZmlyZSgnbXktY3VzdG9tLWV2ZW50JywgeyBmb286ICdCQVInIH0pO1xuICAgKiB9KTtcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMuZ2V0KCdldmVudEJ1cycpLmZpcmUoJ2RpYWdyYW0uaW5pdCcpO1xufVxuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGRpYWdyYW1cbiAqXG4gKiBAbWV0aG9kICBEaWFncmFtI2Rlc3Ryb3lcbiAqL1xuRGlhZ3JhbS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmdldCgnZXZlbnRCdXMnKS5maXJlKCdkaWFncmFtLmRlc3Ryb3knKTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGhlIGRpYWdyYW0sIHJlbW92aW5nIGFsbCBjb250ZW50cy5cbiAqL1xuRGlhZ3JhbS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5nZXQoJ2V2ZW50QnVzJykuZmlyZSgnZGlhZ3JhbS5jbGVhcicpO1xufTtcbiIsImltcG9ydCB7XG4gIGZvckVhY2gsXG4gIGlzRnVuY3Rpb24sXG4gIGlzQXJyYXksXG4gIGlzTnVtYmVyLFxuICBpc09iamVjdFxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxudmFyIERFRkFVTFRfUFJJT1JJVFkgPSAxMDAwO1xuXG4vKipcbiAqIEEgdXRpbGl0eSB0aGF0IGNhbiBiZSB1c2VkIHRvIHBsdWctaW4gaW50byB0aGUgY29tbWFuZCBleGVjdXRpb24gZm9yXG4gKiBleHRlbnNpb24gYW5kL29yIHZhbGlkYXRpb24uXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG4gKlxuICogaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG4gKlxuICogZnVuY3Rpb24gQ29tbWFuZExvZ2dlcihldmVudEJ1cykge1xuICogICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG4gKlxuICogICB0aGlzLnByZUV4ZWN1dGUoZnVuY3Rpb24oZXZlbnQpIHtcbiAqICAgICBjb25zb2xlLmxvZygnY29tbWFuZCBwcmUtZXhlY3V0ZScsIGV2ZW50KTtcbiAqICAgfSk7XG4gKiB9XG4gKlxuICogaW5oZXJpdHMoQ29tbWFuZExvZ2dlciwgQ29tbWFuZEludGVyY2VwdG9yKTtcbiAqXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvbW1hbmRJbnRlcmNlcHRvcihldmVudEJ1cykge1xuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xufVxuXG5Db21tYW5kSW50ZXJjZXB0b3IuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdO1xuXG5mdW5jdGlvbiB1bndyYXBFdmVudChmbiwgdGhhdCkge1xuICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZXR1cm4gZm4uY2FsbCh0aGF0IHx8IG51bGwsIGV2ZW50LmNvbnRleHQsIGV2ZW50LmNvbW1hbmQsIGV2ZW50KTtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhbiBpbnRlcmNlcHRvciBmb3IgYSBjb21tYW5kIGV4ZWN1dGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PHN0cmluZz59IFtldmVudHNdIGxpc3Qgb2YgY29tbWFuZHMgdG8gcmVnaXN0ZXIgb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaG9va10gY29tbWFuZCBob29rLCBpLmUuIHByZUV4ZWN1dGUsIGV4ZWN1dGVkIHRvIGxpc3RlbiBvblxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmlvcml0eV0gdGhlIHByaW9yaXR5IG9uIHdoaWNoIHRvIGhvb2sgaW50byB0aGUgZXhlY3V0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyRm4gaW50ZXJjZXB0b3IgdG8gYmUgaW52b2tlZCB3aXRoIChldmVudClcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdW53cmFwIGlmIHRydWUsIHVud3JhcCB0aGUgZXZlbnQgYW5kIHBhc3MgKGNvbnRleHQsIGNvbW1hbmQsIGV2ZW50KSB0byB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lciBpbnN0ZWFkXG4gKiBAcGFyYW0ge09iamVjdH0gW3RoYXRdIFBhc3MgY29udGV4dCAoYHRoaXNgKSB0byB0aGUgaGFuZGxlciBmdW5jdGlvblxuICovXG5Db21tYW5kSW50ZXJjZXB0b3IucHJvdG90eXBlLm9uID0gZnVuY3Rpb24oZXZlbnRzLCBob29rLCBwcmlvcml0eSwgaGFuZGxlckZuLCB1bndyYXAsIHRoYXQpIHtcblxuICBpZiAoaXNGdW5jdGlvbihob29rKSB8fCBpc051bWJlcihob29rKSkge1xuICAgIHRoYXQgPSB1bndyYXA7XG4gICAgdW53cmFwID0gaGFuZGxlckZuO1xuICAgIGhhbmRsZXJGbiA9IHByaW9yaXR5O1xuICAgIHByaW9yaXR5ID0gaG9vaztcbiAgICBob29rID0gbnVsbDtcbiAgfVxuXG4gIGlmIChpc0Z1bmN0aW9uKHByaW9yaXR5KSkge1xuICAgIHRoYXQgPSB1bndyYXA7XG4gICAgdW53cmFwID0gaGFuZGxlckZuO1xuICAgIGhhbmRsZXJGbiA9IHByaW9yaXR5O1xuICAgIHByaW9yaXR5ID0gREVGQVVMVF9QUklPUklUWTtcbiAgfVxuXG4gIGlmIChpc09iamVjdCh1bndyYXApKSB7XG4gICAgdGhhdCA9IHVud3JhcDtcbiAgICB1bndyYXAgPSBmYWxzZTtcbiAgfVxuXG4gIGlmICghaXNGdW5jdGlvbihoYW5kbGVyRm4pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdoYW5kbGVyRm4gbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAoIWlzQXJyYXkoZXZlbnRzKSkge1xuICAgIGV2ZW50cyA9IFsgZXZlbnRzIF07XG4gIH1cblxuICB2YXIgZXZlbnRCdXMgPSB0aGlzLl9ldmVudEJ1cztcblxuICBmb3JFYWNoKGV2ZW50cywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIC8vIGNvbmNhdCBjb21tYW5kU3RhY2soLmV2ZW50KT8oLmhvb2spP1xuICAgIHZhciBmdWxsRXZlbnQgPSBbICdjb21tYW5kU3RhY2snLCBldmVudCwgaG9vayBdLmZpbHRlcihmdW5jdGlvbihlKSB7IHJldHVybiBlOyB9KS5qb2luKCcuJyk7XG5cbiAgICBldmVudEJ1cy5vbihmdWxsRXZlbnQsIHByaW9yaXR5LCB1bndyYXAgPyB1bndyYXBFdmVudChoYW5kbGVyRm4sIHRoYXQpIDogaGFuZGxlckZuLCB0aGF0KTtcbiAgfSk7XG59O1xuXG5cbnZhciBob29rcyA9IFtcbiAgJ2NhbkV4ZWN1dGUnLFxuICAncHJlRXhlY3V0ZScsXG4gICdwcmVFeGVjdXRlZCcsXG4gICdleGVjdXRlJyxcbiAgJ2V4ZWN1dGVkJyxcbiAgJ3Bvc3RFeGVjdXRlJyxcbiAgJ3Bvc3RFeGVjdXRlZCcsXG4gICdyZXZlcnQnLFxuICAncmV2ZXJ0ZWQnXG5dO1xuXG4vKlxuICogSW5zdGFsbCBob29rIHNob3J0Y3V0c1xuICpcbiAqIFRoaXMgd2lsbCBnZW5lcmF0ZSB0aGUgQ29tbWFuZEludGVyY2VwdG9yIyhwcmVFeGVjdXRlfC4uLnxyZXZlcnRlZCkgbWV0aG9kc1xuICogd2hpY2ggd2lsbCBpbiB0ZXJtIGZvcndhcmQgdG8gQ29tbWFuZEludGVyY2VwdG9yI29uLlxuICovXG5mb3JFYWNoKGhvb2tzLCBmdW5jdGlvbihob29rKSB7XG5cbiAgLyoqXG4gICAqIHtjYW5FeGVjdXRlfHByZUV4ZWN1dGV8cHJlRXhlY3V0ZWR8ZXhlY3V0ZXxleGVjdXRlZHxwb3N0RXhlY3V0ZXxwb3N0RXhlY3V0ZWR8cmV2ZXJ0fHJldmVydGVkfVxuICAgKlxuICAgKiBBIG5hbWVkIGhvb2sgZm9yIHBsdWdnaW5nIGludG8gdGhlIGNvbW1hbmQgZXhlY3V0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PHN0cmluZz59IFtldmVudHNdIGxpc3Qgb2YgY29tbWFuZHMgdG8gcmVnaXN0ZXIgb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwcmlvcml0eV0gdGhlIHByaW9yaXR5IG9uIHdoaWNoIHRvIGhvb2sgaW50byB0aGUgZXhlY3V0aW9uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJGbiBpbnRlcmNlcHRvciB0byBiZSBpbnZva2VkIHdpdGggKGV2ZW50KVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt1bndyYXA9ZmFsc2VdIGlmIHRydWUsIHVud3JhcCB0aGUgZXZlbnQgYW5kIHBhc3MgKGNvbnRleHQsIGNvbW1hbmQsIGV2ZW50KSB0byB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyIGluc3RlYWRcbiAgICogQHBhcmFtIHtPYmplY3R9IFt0aGF0XSBQYXNzIGNvbnRleHQgKGB0aGlzYCkgdG8gdGhlIGhhbmRsZXIgZnVuY3Rpb25cbiAgICovXG4gIENvbW1hbmRJbnRlcmNlcHRvci5wcm90b3R5cGVbaG9va10gPSBmdW5jdGlvbihldmVudHMsIHByaW9yaXR5LCBoYW5kbGVyRm4sIHVud3JhcCwgdGhhdCkge1xuXG4gICAgaWYgKGlzRnVuY3Rpb24oZXZlbnRzKSB8fCBpc051bWJlcihldmVudHMpKSB7XG4gICAgICB0aGF0ID0gdW53cmFwO1xuICAgICAgdW53cmFwID0gaGFuZGxlckZuO1xuICAgICAgaGFuZGxlckZuID0gcHJpb3JpdHk7XG4gICAgICBwcmlvcml0eSA9IGV2ZW50cztcbiAgICAgIGV2ZW50cyA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5vbihldmVudHMsIGhvb2ssIHByaW9yaXR5LCBoYW5kbGVyRm4sIHVud3JhcCwgdGhhdCk7XG4gIH07XG59KTtcbiIsImltcG9ydCB7XG4gIHVuaXF1ZUJ5LFxuICBpc0FycmF5XG59IGZyb20gJ21pbi1kYXNoJztcblxuXG4vKipcbiAqIEEgc2VydmljZSB0aGF0IG9mZmVycyB1bi0gYW5kIHJlZG9hYmxlIGV4ZWN1dGlvbiBvZiBjb21tYW5kcy5cbiAqXG4gKiBUaGUgY29tbWFuZCBzdGFjayBpcyByZXNwb25zaWJsZSBmb3IgZXhlY3V0aW5nIG1vZGVsaW5nIGFjdGlvbnNcbiAqIGluIGEgdW4tIGFuZCByZWRvYWJsZSBtYW5uZXIuIFRvIGRvIHRoaXMgaXQgZGVsZWdhdGVzIHRoZSBhY3R1YWxcbiAqIGNvbW1hbmQgZXhlY3V0aW9uIHRvIHtAbGluayBDb21tYW5kSGFuZGxlcn1zLlxuICpcbiAqIENvbW1hbmQgaGFuZGxlcnMgcHJvdmlkZSB7QGxpbmsgQ29tbWFuZEhhbmRsZXIjZXhlY3V0ZShjdHgpfSBhbmRcbiAqIHtAbGluayBDb21tYW5kSGFuZGxlciNyZXZlcnQoY3R4KX0gbWV0aG9kcyB0byB1bi0gYW5kIHJlZG8gYSBjb21tYW5kXG4gKiBpZGVudGlmaWVkIGJ5IGEgY29tbWFuZCBjb250ZXh0LlxuICpcbiAqXG4gKiAjIyBMaWZlLUN5Y2xlIGV2ZW50c1xuICpcbiAqIEluIHRoZSBwcm9jZXNzIHRoZSBjb21tYW5kIHN0YWNrIGZpcmVzIGEgbnVtYmVyIG9mIGxpZmUtY3ljbGUgZXZlbnRzXG4gKiB0aGF0IG90aGVyIGNvbXBvbmVudHMgdG8gcGFydGljaXBhdGUgaW4gdGhlIGNvbW1hbmQgZXhlY3V0aW9uLlxuICpcbiAqICAgICogcHJlRXhlY3V0ZVxuICogICAgKiBwcmVFeGVjdXRlZFxuICogICAgKiBleGVjdXRlXG4gKiAgICAqIGV4ZWN1dGVkXG4gKiAgICAqIHBvc3RFeGVjdXRlXG4gKiAgICAqIHBvc3RFeGVjdXRlZFxuICogICAgKiByZXZlcnRcbiAqICAgICogcmV2ZXJ0ZWRcbiAqXG4gKiBBIHNwZWNpYWwgZXZlbnQgaXMgdXNlZCBmb3IgdmFsaWRhdGluZywgd2hldGhlciBhIGNvbW1hbmQgY2FuIGJlXG4gKiBwZXJmb3JtZWQgcHJpb3IgdG8gaXRzIGV4ZWN1dGlvbi5cbiAqXG4gKiAgICAqIGNhbkV4ZWN1dGVcbiAqXG4gKiBFYWNoIG9mIHRoZSBldmVudHMgaXMgZmlyZWQgYXMgYGNvbW1hbmRTdGFjay57ZXZlbnROYW1lfWAgYW5kXG4gKiBgY29tbWFuZFN0YWNrLntjb21tYW5kTmFtZX0ue2V2ZW50TmFtZX1gLCByZXNwZWN0aXZlbHkuIFRoaXMgZ2l2ZXNcbiAqIGNvbXBvbmVudHMgZmluZSBncmFpbmVkIGNvbnRyb2wgb24gd2hlcmUgdG8gaG9vayBpbnRvLlxuICpcbiAqIFRoZSBldmVudCBvYmplY3QgZmlyZWQgdHJhbnNwb3J0cyBgY29tbWFuZGAsIHRoZSBuYW1lIG9mIHRoZVxuICogY29tbWFuZCBhbmQgYGNvbnRleHRgLCB0aGUgY29tbWFuZCBjb250ZXh0LlxuICpcbiAqXG4gKiAjIyBDcmVhdGluZyBDb21tYW5kIEhhbmRsZXJzXG4gKlxuICogQ29tbWFuZCBoYW5kbGVycyBzaG91bGQgcHJvdmlkZSB0aGUge0BsaW5rIENvbW1hbmRIYW5kbGVyI2V4ZWN1dGUoY3R4KX1cbiAqIGFuZCB7QGxpbmsgQ29tbWFuZEhhbmRsZXIjcmV2ZXJ0KGN0eCl9IG1ldGhvZHMgdG8gaW1wbGVtZW50XG4gKiByZWRvaW5nIGFuZCB1bmRvaW5nIG9mIGEgY29tbWFuZC5cbiAqXG4gKiBBIGNvbW1hbmQgaGFuZGxlciBfbXVzdF8gZW5zdXJlIHVuZG8gaXMgcGVyZm9ybWVkIHByb3Blcmx5IGluIG9yZGVyXG4gKiBub3QgdG8gYnJlYWsgdGhlIHVuZG8gY2hhaW4uIEl0IG11c3QgYWxzbyByZXR1cm4gdGhlIHNoYXBlcyB0aGF0XG4gKiBnb3QgY2hhbmdlZCBkdXJpbmcgdGhlIGBleGVjdXRlYCBhbmQgYHJldmVydGAgb3BlcmF0aW9ucy5cbiAqXG4gKiBDb21tYW5kIGhhbmRsZXJzIG1heSBleGVjdXRlIG90aGVyIG1vZGVsaW5nIG9wZXJhdGlvbnMgKGFuZCB0aHVzXG4gKiBjb21tYW5kcykgaW4gdGhlaXIgYHByZUV4ZWN1dGVgIGFuZCBgcG9zdEV4ZWN1dGVgIHBoYXNlcy4gVGhlIGNvbW1hbmRcbiAqIHN0YWNrIHdpbGwgcHJvcGVybHkgZ3JvdXAgYWxsIGNvbW1hbmRzIHRvZ2V0aGVyIGludG8gYSBsb2dpY2FsIHVuaXRcbiAqIHRoYXQgbWF5IGJlIHJlLSBhbmQgdW5kb25lIGF0b21pY2FsbHkuXG4gKlxuICogQ29tbWFuZCBoYW5kbGVycyBtdXN0IG5vdCBleGVjdXRlIG90aGVyIGNvbW1hbmRzIGZyb20gd2l0aGluIHRoZWlyXG4gKiBjb3JlIGltcGxlbWVudGF0aW9uIChgZXhlY3V0ZWAsIGByZXZlcnRgKS5cbiAqXG4gKlxuICogIyMgQ2hhbmdlIFRyYWNraW5nXG4gKlxuICogRHVyaW5nIHRoZSBleGVjdXRpb24gb2YgdGhlIENvbW1hbmRTdGFjayBpdCB3aWxsIGtlZXAgdHJhY2sgb2YgYWxsXG4gKiBlbGVtZW50cyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkIGR1cmluZyB0aGUgY29tbWFuZCdzIGV4ZWN1dGlvbi5cbiAqXG4gKiBBdCB0aGUgZW5kIG9mIHRoZSBDb21tYW5kU3RhY2sgZXhlY3V0aW9uIGl0IHdpbGwgbm90aWZ5IGludGVyZXN0ZWRcbiAqIGNvbXBvbmVudHMgdmlhIGFuICdlbGVtZW50cy5jaGFuZ2VkJyBldmVudCB3aXRoIGFsbCB0aGUgZGlydHlcbiAqIGVsZW1lbnRzLlxuICpcbiAqIFRoZSBldmVudCBjYW4gYmUgcGlja2VkIHVwIGJ5IGNvbXBvbmVudHMgdGhhdCBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgZmFjdFxuICogdGhhdCBlbGVtZW50cyBoYXZlIGJlZW4gY2hhbmdlZC4gT25lIHVzZSBjYXNlIGZvciB0aGlzIGlzIHVwZGF0aW5nXG4gKiB0aGVpciBncmFwaGljYWwgcmVwcmVzZW50YXRpb24gYWZ0ZXIgbW92aW5nIC8gcmVzaXppbmcgb3IgZGVsZXRpb24uXG4gKlxuICogQHNlZSBDb21tYW5kSGFuZGxlclxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDb21tYW5kU3RhY2soZXZlbnRCdXMsIGluamVjdG9yKSB7XG5cbiAgLyoqXG4gICAqIEEgbWFwIG9mIGFsbCByZWdpc3RlcmVkIGNvbW1hbmQgaGFuZGxlcnMuXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB0aGlzLl9oYW5kbGVyTWFwID0ge307XG5cbiAgLyoqXG4gICAqIEEgc3RhY2sgY29udGFpbmluZyBhbGwgcmUvdW5kb2FibGUgYWN0aW9ucyBvbiB0aGUgZGlhZ3JhbVxuICAgKlxuICAgKiBAdHlwZSB7QXJyYXk8T2JqZWN0Pn1cbiAgICovXG4gIHRoaXMuX3N0YWNrID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGluZGV4IG9uIHRoZSBzdGFja1xuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgdGhpcy5fc3RhY2tJZHggPSAtMTtcblxuICAvKipcbiAgICogQ3VycmVudCBhY3RpdmUgY29tbWFuZFN0YWNrIGV4ZWN1dGlvblxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdGhpcy5fY3VycmVudEV4ZWN1dGlvbiA9IHtcbiAgICBhY3Rpb25zOiBbXSxcbiAgICBkaXJ0eTogW11cbiAgfTtcblxuXG4gIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG5cbiAgdGhpcy5fdWlkID0gMTtcblxuICBldmVudEJ1cy5vbihbXG4gICAgJ2RpYWdyYW0uZGVzdHJveScsXG4gICAgJ2RpYWdyYW0uY2xlYXInXG4gIF0sIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY2xlYXIoZmFsc2UpO1xuICB9LCB0aGlzKTtcbn1cblxuQ29tbWFuZFN0YWNrLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdpbmplY3RvcicgXTtcblxuXG4vKipcbiAqIEV4ZWN1dGUgYSBjb21tYW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbW1hbmQgdGhlIGNvbW1hbmQgdG8gZXhlY3V0ZVxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgdGhlIGVudmlyb25tZW50IHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgaW5cbiAqL1xuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29tbWFuZCwgY29udGV4dCkge1xuICBpZiAoIWNvbW1hbmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbW1hbmQgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHZhciBhY3Rpb24gPSB7IGNvbW1hbmQ6IGNvbW1hbmQsIGNvbnRleHQ6IGNvbnRleHQgfTtcblxuICB0aGlzLl9wdXNoQWN0aW9uKGFjdGlvbik7XG4gIHRoaXMuX2ludGVybmFsRXhlY3V0ZShhY3Rpb24pO1xuICB0aGlzLl9wb3BBY3Rpb24oYWN0aW9uKTtcbn07XG5cblxuLyoqXG4gKiBBc2sgd2hldGhlciBhIGdpdmVuIGNvbW1hbmQgY2FuIGJlIGV4ZWN1dGVkLlxuICpcbiAqIEltcGxlbWVudG9ycyBtYXkgaG9vayBpbnRvIHRoZSBtZWNoYW5pc20gb24gdHdvIHdheXM6XG4gKlxuICogICAqIGluIGV2ZW50IGxpc3RlbmVyczpcbiAqXG4gKiAgICAgVXNlcnMgbWF5IHByZXZlbnQgdGhlIGV4ZWN1dGlvbiB2aWEgYW4gZXZlbnQgbGlzdGVuZXIuXG4gKiAgICAgSXQgbXVzdCBwcmV2ZW50IHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgYGNvbW1hbmRTdGFjay4oPGNvbW1hbmQ+LiljYW5FeGVjdXRlYCBldmVudHMuXG4gKlxuICogICAqIGluIGNvbW1hbmQgaGFuZGxlcnM6XG4gKlxuICogICAgIElmIHRoZSBtZXRob2Qge0BsaW5rIENvbW1hbmRIYW5kbGVyI2NhbkV4ZWN1dGV9IGlzIGltcGxlbWVudGVkIGluIGEgaGFuZGxlclxuICogICAgIGl0IHdpbGwgYmUgY2FsbGVkIHRvIGZpZ3VyZSBvdXQgd2hldGhlciB0aGUgZXhlY3V0aW9uIGlzIGFsbG93ZWQuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBjb21tYW5kIHRoZSBjb21tYW5kIHRvIGV4ZWN1dGVcbiAqIEBwYXJhbSAge09iamVjdH0gY29udGV4dCB0aGUgZW52aXJvbm1lbnQgdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCBpblxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGhlIGNvbW1hbmQgY2FuIGJlIGV4ZWN1dGVkXG4gKi9cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuY2FuRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbW1hbmQsIGNvbnRleHQpIHtcblxuICB2YXIgYWN0aW9uID0geyBjb21tYW5kOiBjb21tYW5kLCBjb250ZXh0OiBjb250ZXh0IH07XG5cbiAgdmFyIGhhbmRsZXIgPSB0aGlzLl9nZXRIYW5kbGVyKGNvbW1hbmQpO1xuXG4gIHZhciByZXN1bHQgPSB0aGlzLl9maXJlKGNvbW1hbmQsICdjYW5FeGVjdXRlJywgYWN0aW9uKTtcblxuICAvLyBoYW5kbGVyI2NhbkV4ZWN1dGUgd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiBubyBsaXN0ZW5lclxuICAvLyBkZWNpZGVkIG9uIGEgcmVzdWx0IGFscmVhZHlcbiAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGhhbmRsZXIuY2FuRXhlY3V0ZSkge1xuICAgICAgcmVzdWx0ID0gaGFuZGxlci5jYW5FeGVjdXRlKGNvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8qKlxuICogQ2xlYXIgdGhlIGNvbW1hbmQgc3RhY2ssIGVyYXNpbmcgYWxsIHVuZG8gLyByZWRvIGhpc3RvcnlcbiAqL1xuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGVtaXQpIHtcbiAgdGhpcy5fc3RhY2subGVuZ3RoID0gMDtcbiAgdGhpcy5fc3RhY2tJZHggPSAtMTtcblxuICBpZiAoZW1pdCAhPT0gZmFsc2UpIHtcbiAgICB0aGlzLl9maXJlKCdjaGFuZ2VkJyk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBVbmRvIGxhc3QgY29tbWFuZChzKVxuICovXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLnVuZG8gPSBmdW5jdGlvbigpIHtcbiAgdmFyIGFjdGlvbiA9IHRoaXMuX2dldFVuZG9BY3Rpb24oKSxcbiAgICAgIG5leHQ7XG5cbiAgaWYgKGFjdGlvbikge1xuICAgIHRoaXMuX3B1c2hBY3Rpb24oYWN0aW9uKTtcblxuICAgIHdoaWxlIChhY3Rpb24pIHtcbiAgICAgIHRoaXMuX2ludGVybmFsVW5kbyhhY3Rpb24pO1xuICAgICAgbmV4dCA9IHRoaXMuX2dldFVuZG9BY3Rpb24oKTtcblxuICAgICAgaWYgKCFuZXh0IHx8IG5leHQuaWQgIT09IGFjdGlvbi5pZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgYWN0aW9uID0gbmV4dDtcbiAgICB9XG5cbiAgICB0aGlzLl9wb3BBY3Rpb24oKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIFJlZG8gbGFzdCBjb21tYW5kKHMpXG4gKi9cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUucmVkbyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYWN0aW9uID0gdGhpcy5fZ2V0UmVkb0FjdGlvbigpLFxuICAgICAgbmV4dDtcblxuICBpZiAoYWN0aW9uKSB7XG4gICAgdGhpcy5fcHVzaEFjdGlvbihhY3Rpb24pO1xuXG4gICAgd2hpbGUgKGFjdGlvbikge1xuICAgICAgdGhpcy5faW50ZXJuYWxFeGVjdXRlKGFjdGlvbiwgdHJ1ZSk7XG4gICAgICBuZXh0ID0gdGhpcy5fZ2V0UmVkb0FjdGlvbigpO1xuXG4gICAgICBpZiAoIW5leHQgfHwgbmV4dC5pZCAhPT0gYWN0aW9uLmlkKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBhY3Rpb24gPSBuZXh0O1xuICAgIH1cblxuICAgIHRoaXMuX3BvcEFjdGlvbigpO1xuICB9XG59O1xuXG5cbi8qKlxuICogUmVnaXN0ZXIgYSBoYW5kbGVyIGluc3RhbmNlIHdpdGggdGhlIGNvbW1hbmQgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZFxuICogQHBhcmFtIHtDb21tYW5kSGFuZGxlcn0gaGFuZGxlclxuICovXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24oY29tbWFuZCwgaGFuZGxlcikge1xuICB0aGlzLl9zZXRIYW5kbGVyKGNvbW1hbmQsIGhhbmRsZXIpO1xufTtcblxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgaGFuZGxlciB0eXBlIHdpdGggdGhlIGNvbW1hbmQgc3RhY2tcbiAqIGJ5IGluc3RhbnRpYXRpbmcgaXQgYW5kIGluamVjdGluZyBpdHMgZGVwZW5kZW5jaWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhIGNvbnN0cnVjdG9yIGZvciBhIHtAbGluayBDb21tYW5kSGFuZGxlcn1cbiAqL1xuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5yZWdpc3RlckhhbmRsZXIgPSBmdW5jdGlvbihjb21tYW5kLCBoYW5kbGVyQ2xzKSB7XG5cbiAgaWYgKCFjb21tYW5kIHx8ICFoYW5kbGVyQ2xzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjb21tYW5kIGFuZCBoYW5kbGVyQ2xzIG11c3QgYmUgZGVmaW5lZCcpO1xuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSB0aGlzLl9pbmplY3Rvci5pbnN0YW50aWF0ZShoYW5kbGVyQ2xzKTtcbiAgdGhpcy5yZWdpc3Rlcihjb21tYW5kLCBoYW5kbGVyKTtcbn07XG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuY2FuVW5kbyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gISF0aGlzLl9nZXRVbmRvQWN0aW9uKCk7XG59O1xuXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLmNhblJlZG8gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICEhdGhpcy5fZ2V0UmVkb0FjdGlvbigpO1xufTtcblxuLy8gc3RhY2sgYWNjZXNzICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2dldFJlZG9BY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrSWR4ICsgMV07XG59O1xuXG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2dldFVuZG9BY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrSWR4XTtcbn07XG5cblxuLy8gaW50ZXJuYWwgZnVuY3Rpb25hbGl0eSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2ludGVybmFsVW5kbyA9IGZ1bmN0aW9uKGFjdGlvbikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIGNvbW1hbmQgPSBhY3Rpb24uY29tbWFuZCxcbiAgICAgIGNvbnRleHQgPSBhY3Rpb24uY29udGV4dDtcblxuICB2YXIgaGFuZGxlciA9IHRoaXMuX2dldEhhbmRsZXIoY29tbWFuZCk7XG5cbiAgLy8gZ3VhcmQgYWdhaW5zdCBpbGxlZ2FsIG5lc3RlZCBjb21tYW5kIHN0YWNrIGludm9jYXRpb25zXG4gIHRoaXMuX2F0b21pY0RvKGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuX2ZpcmUoY29tbWFuZCwgJ3JldmVydCcsIGFjdGlvbik7XG5cbiAgICBpZiAoaGFuZGxlci5yZXZlcnQpIHtcbiAgICAgIHNlbGYuX21hcmtEaXJ0eShoYW5kbGVyLnJldmVydChjb250ZXh0KSk7XG4gICAgfVxuXG4gICAgc2VsZi5fcmV2ZXJ0ZWRBY3Rpb24oYWN0aW9uKTtcblxuICAgIHNlbGYuX2ZpcmUoY29tbWFuZCwgJ3JldmVydGVkJywgYWN0aW9uKTtcbiAgfSk7XG59O1xuXG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2ZpcmUgPSBmdW5jdGlvbihjb21tYW5kLCBxdWFsaWZpZXIsIGV2ZW50KSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xuICAgIGV2ZW50ID0gcXVhbGlmaWVyO1xuICAgIHF1YWxpZmllciA9IG51bGw7XG4gIH1cblxuICB2YXIgbmFtZXMgPSBxdWFsaWZpZXIgPyBbIGNvbW1hbmQgKyAnLicgKyBxdWFsaWZpZXIsIHF1YWxpZmllciBdIDogWyBjb21tYW5kIF0sXG4gICAgICBpLCBuYW1lLCByZXN1bHQ7XG5cbiAgZXZlbnQgPSB0aGlzLl9ldmVudEJ1cy5jcmVhdGVFdmVudChldmVudCk7XG5cbiAgZm9yIChpID0gMDsgKG5hbWUgPSBuYW1lc1tpXSk7IGkrKykge1xuICAgIHJlc3VsdCA9IHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2NvbW1hbmRTdGFjay4nICsgbmFtZSwgZXZlbnQpO1xuXG4gICAgaWYgKGV2ZW50LmNhbmNlbEJ1YmJsZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2NyZWF0ZUlkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl91aWQrKztcbn07XG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2F0b21pY0RvID0gZnVuY3Rpb24oZm4pIHtcblxuICB2YXIgZXhlY3V0aW9uID0gdGhpcy5fY3VycmVudEV4ZWN1dGlvbjtcblxuICBleGVjdXRpb24uYXRvbWljID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIGZuKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhlY3V0aW9uLmF0b21pYyA9IGZhbHNlO1xuICB9XG59O1xuXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLl9pbnRlcm5hbEV4ZWN1dGUgPSBmdW5jdGlvbihhY3Rpb24sIHJlZG8pIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBjb21tYW5kID0gYWN0aW9uLmNvbW1hbmQsXG4gICAgICBjb250ZXh0ID0gYWN0aW9uLmNvbnRleHQ7XG5cbiAgdmFyIGhhbmRsZXIgPSB0aGlzLl9nZXRIYW5kbGVyKGNvbW1hbmQpO1xuXG4gIGlmICghaGFuZGxlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignbm8gY29tbWFuZCBoYW5kbGVyIHJlZ2lzdGVyZWQgZm9yIDwnICsgY29tbWFuZCArICc+Jyk7XG4gIH1cblxuICB0aGlzLl9wdXNoQWN0aW9uKGFjdGlvbik7XG5cbiAgaWYgKCFyZWRvKSB7XG4gICAgdGhpcy5fZmlyZShjb21tYW5kLCAncHJlRXhlY3V0ZScsIGFjdGlvbik7XG5cbiAgICBpZiAoaGFuZGxlci5wcmVFeGVjdXRlKSB7XG4gICAgICBoYW5kbGVyLnByZUV4ZWN1dGUoY29udGV4dCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmlyZShjb21tYW5kLCAncHJlRXhlY3V0ZWQnLCBhY3Rpb24pO1xuICB9XG5cbiAgLy8gZ3VhcmQgYWdhaW5zdCBpbGxlZ2FsIG5lc3RlZCBjb21tYW5kIHN0YWNrIGludm9jYXRpb25zXG4gIHRoaXMuX2F0b21pY0RvKGZ1bmN0aW9uKCkge1xuXG4gICAgc2VsZi5fZmlyZShjb21tYW5kLCAnZXhlY3V0ZScsIGFjdGlvbik7XG5cbiAgICBpZiAoaGFuZGxlci5leGVjdXRlKSB7XG5cbiAgICAgIC8vIGFjdHVhbCBleGVjdXRlICsgbWFyayByZXR1cm4gcmVzdWx0cyBhcyBkaXJ0eVxuICAgICAgc2VsZi5fbWFya0RpcnR5KGhhbmRsZXIuZXhlY3V0ZShjb250ZXh0KSk7XG4gICAgfVxuXG4gICAgLy8gbG9nIHRvIHN0YWNrXG4gICAgc2VsZi5fZXhlY3V0ZWRBY3Rpb24oYWN0aW9uLCByZWRvKTtcblxuICAgIHNlbGYuX2ZpcmUoY29tbWFuZCwgJ2V4ZWN1dGVkJywgYWN0aW9uKTtcbiAgfSk7XG5cbiAgaWYgKCFyZWRvKSB7XG4gICAgdGhpcy5fZmlyZShjb21tYW5kLCAncG9zdEV4ZWN1dGUnLCBhY3Rpb24pO1xuXG4gICAgaWYgKGhhbmRsZXIucG9zdEV4ZWN1dGUpIHtcbiAgICAgIGhhbmRsZXIucG9zdEV4ZWN1dGUoY29udGV4dCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmlyZShjb21tYW5kLCAncG9zdEV4ZWN1dGVkJywgYWN0aW9uKTtcbiAgfVxuXG4gIHRoaXMuX3BvcEFjdGlvbihhY3Rpb24pO1xufTtcblxuXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLl9wdXNoQWN0aW9uID0gZnVuY3Rpb24oYWN0aW9uKSB7XG5cbiAgdmFyIGV4ZWN1dGlvbiA9IHRoaXMuX2N1cnJlbnRFeGVjdXRpb24sXG4gICAgICBhY3Rpb25zID0gZXhlY3V0aW9uLmFjdGlvbnM7XG5cbiAgdmFyIGJhc2VBY3Rpb24gPSBhY3Rpb25zWzBdO1xuXG4gIGlmIChleGVjdXRpb24uYXRvbWljKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbGxlZ2FsIGludm9jYXRpb24gaW4gPGV4ZWN1dGU+IG9yIDxyZXZlcnQ+IHBoYXNlIChhY3Rpb246ICcgKyBhY3Rpb24uY29tbWFuZCArICcpJyk7XG4gIH1cblxuICBpZiAoIWFjdGlvbi5pZCkge1xuICAgIGFjdGlvbi5pZCA9IChiYXNlQWN0aW9uICYmIGJhc2VBY3Rpb24uaWQpIHx8IHRoaXMuX2NyZWF0ZUlkKCk7XG4gIH1cblxuICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbn07XG5cblxuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5fcG9wQWN0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHZhciBleGVjdXRpb24gPSB0aGlzLl9jdXJyZW50RXhlY3V0aW9uLFxuICAgICAgYWN0aW9ucyA9IGV4ZWN1dGlvbi5hY3Rpb25zLFxuICAgICAgZGlydHkgPSBleGVjdXRpb24uZGlydHk7XG5cbiAgYWN0aW9ucy5wb3AoKTtcblxuICBpZiAoIWFjdGlvbnMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnZWxlbWVudHMuY2hhbmdlZCcsIHsgZWxlbWVudHM6IHVuaXF1ZUJ5KCdpZCcsIGRpcnR5LnJldmVyc2UoKSkgfSk7XG5cbiAgICBkaXJ0eS5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fZmlyZSgnY2hhbmdlZCcpO1xuICB9XG59O1xuXG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX21hcmtEaXJ0eSA9IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XG4gIHZhciBleGVjdXRpb24gPSB0aGlzLl9jdXJyZW50RXhlY3V0aW9uO1xuXG4gIGlmICghZWxlbWVudHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBlbGVtZW50cyA9IGlzQXJyYXkoZWxlbWVudHMpID8gZWxlbWVudHMgOiBbIGVsZW1lbnRzIF07XG5cbiAgZXhlY3V0aW9uLmRpcnR5ID0gZXhlY3V0aW9uLmRpcnR5LmNvbmNhdChlbGVtZW50cyk7XG59O1xuXG5cbkNvbW1hbmRTdGFjay5wcm90b3R5cGUuX2V4ZWN1dGVkQWN0aW9uID0gZnVuY3Rpb24oYWN0aW9uLCByZWRvKSB7XG4gIHZhciBzdGFja0lkeCA9ICsrdGhpcy5fc3RhY2tJZHg7XG5cbiAgaWYgKCFyZWRvKSB7XG4gICAgdGhpcy5fc3RhY2suc3BsaWNlKHN0YWNrSWR4LCB0aGlzLl9zdGFjay5sZW5ndGgsIGFjdGlvbik7XG4gIH1cbn07XG5cblxuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5fcmV2ZXJ0ZWRBY3Rpb24gPSBmdW5jdGlvbihhY3Rpb24pIHtcbiAgdGhpcy5fc3RhY2tJZHgtLTtcbn07XG5cblxuQ29tbWFuZFN0YWNrLnByb3RvdHlwZS5fZ2V0SGFuZGxlciA9IGZ1bmN0aW9uKGNvbW1hbmQpIHtcbiAgcmV0dXJuIHRoaXMuX2hhbmRsZXJNYXBbY29tbWFuZF07XG59O1xuXG5Db21tYW5kU3RhY2sucHJvdG90eXBlLl9zZXRIYW5kbGVyID0gZnVuY3Rpb24oY29tbWFuZCwgaGFuZGxlcikge1xuICBpZiAoIWNvbW1hbmQgfHwgIWhhbmRsZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbW1hbmQgYW5kIGhhbmRsZXIgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9oYW5kbGVyTWFwW2NvbW1hbmRdKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdvdmVycmlkaW5nIGhhbmRsZXIgZm9yIGNvbW1hbmQgPCcgKyBjb21tYW5kICsgJz4nKTtcbiAgfVxuXG4gIHRoaXMuX2hhbmRsZXJNYXBbY29tbWFuZF0gPSBoYW5kbGVyO1xufTtcbiIsImltcG9ydCBDb21tYW5kU3RhY2sgZnJvbSAnLi9Db21tYW5kU3RhY2snO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbW1hbmRTdGFjazogWyAndHlwZScsIENvbW1hbmRTdGFjayBdXG59O1xuIiwiaW1wb3J0IHtcbiAgaXNOdW1iZXIsXG4gIGFzc2lnbixcbiAgZm9yRWFjaCxcbiAgZXZlcnksXG4gIGRlYm91bmNlLFxuICBiaW5kLFxuICByZWR1Y2Vcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBhZGQgYXMgY29sbGVjdGlvbkFkZCxcbiAgcmVtb3ZlIGFzIGNvbGxlY3Rpb25SZW1vdmVcbn0gZnJvbSAnLi4vdXRpbC9Db2xsZWN0aW9ucyc7XG5cbmltcG9ydCB7XG4gIGdldFR5cGVcbn0gZnJvbSAnLi4vdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY2xhc3NlcyBhcyBzdmdDbGFzc2VzLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxuICB0cmFuc2Zvcm0gYXMgc3ZnVHJhbnNmb3JtXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHsgY3JlYXRlTWF0cml4IGFzIGNyZWF0ZU1hdHJpeCB9IGZyb20gJ3Rpbnktc3ZnJztcblxuXG5mdW5jdGlvbiByb3VuZChudW1iZXIsIHJlc29sdXRpb24pIHtcbiAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogcmVzb2x1dGlvbikgLyByZXNvbHV0aW9uO1xufVxuXG5mdW5jdGlvbiBlbnN1cmVQeChudW1iZXIpIHtcbiAgcmV0dXJuIGlzTnVtYmVyKG51bWJlcikgPyBudW1iZXIgKyAncHgnIDogbnVtYmVyO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBIVE1MIGNvbnRhaW5lciBlbGVtZW50IGZvciBhIFNWRyBlbGVtZW50IHdpdGhcbiAqIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH0gdGhlIGNvbnRhaW5lciBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRhaW5lcihvcHRpb25zKSB7XG5cbiAgb3B0aW9ucyA9IGFzc2lnbih7fSwgeyB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJyB9LCBvcHRpb25zKTtcblxuICB2YXIgY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXIgfHwgZG9jdW1lbnQuYm9keTtcblxuICAvLyBjcmVhdGUgYSA8ZGl2PiBhcm91bmQgdGhlIHN2ZyBlbGVtZW50IHdpdGggdGhlIHJlc3BlY3RpdmUgc2l6ZVxuICAvLyB0aGlzIHdheSB3ZSBjYW4gYWx3YXlzIGdldCB0aGUgY29ycmVjdCBjb250YWluZXIgc2l6ZVxuICAvLyAodGhpcyBpcyBpbXBvc3NpYmxlIGZvciA8c3ZnPiBlbGVtZW50cyBhdCB0aGUgbW9tZW50KVxuICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHBhcmVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2Rqcy1jb250YWluZXInKTtcblxuICBhc3NpZ24ocGFyZW50LnN0eWxlLCB7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHdpZHRoOiBlbnN1cmVQeChvcHRpb25zLndpZHRoKSxcbiAgICBoZWlnaHQ6IGVuc3VyZVB4KG9wdGlvbnMuaGVpZ2h0KVxuICB9KTtcblxuICBjb250YWluZXIuYXBwZW5kQ2hpbGQocGFyZW50KTtcblxuICByZXR1cm4gcGFyZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVHcm91cChwYXJlbnQsIGNscywgY2hpbGRJbmRleCkge1xuICB2YXIgZ3JvdXAgPSBzdmdDcmVhdGUoJ2cnKTtcbiAgc3ZnQ2xhc3Nlcyhncm91cCkuYWRkKGNscyk7XG5cbiAgdmFyIGluZGV4ID0gY2hpbGRJbmRleCAhPT0gdW5kZWZpbmVkID8gY2hpbGRJbmRleCA6IHBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7XG5cbiAgLy8gbXVzdCBlbnN1cmUgc2Vjb25kIGFyZ3VtZW50IGlzIG5vZGUgb3IgX251bGxfXG4gIC8vIGNmLiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTm9kZS9pbnNlcnRCZWZvcmVcbiAgcGFyZW50Lmluc2VydEJlZm9yZShncm91cCwgcGFyZW50LmNoaWxkTm9kZXNbaW5kZXhdIHx8IG51bGwpO1xuXG4gIHJldHVybiBncm91cDtcbn1cblxudmFyIEJBU0VfTEFZRVIgPSAnYmFzZSc7XG5cblxudmFyIFJFUVVJUkVEX01PREVMX0FUVFJTID0ge1xuICBzaGFwZTogWyAneCcsICd5JywgJ3dpZHRoJywgJ2hlaWdodCcgXSxcbiAgY29ubmVjdGlvbjogWyAnd2F5cG9pbnRzJyBdXG59O1xuXG4vKipcbiAqIFRoZSBtYWluIGRyYXdpbmcgY2FudmFzLlxuICpcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQGVtaXRzIENhbnZhcyNjYW52YXMuaW5pdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWdcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0dyYXBoaWNzRmFjdG9yeX0gZ3JhcGhpY3NGYWN0b3J5XG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENhbnZhcyhjb25maWcsIGV2ZW50QnVzLCBncmFwaGljc0ZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSkge1xuXG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fZ3JhcGhpY3NGYWN0b3J5ID0gZ3JhcGhpY3NGYWN0b3J5O1xuXG4gIHRoaXMuX2luaXQoY29uZmlnIHx8IHt9KTtcbn1cblxuQ2FudmFzLiRpbmplY3QgPSBbXG4gICdjb25maWcuY2FudmFzJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2dyYXBoaWNzRmFjdG9yeScsXG4gICdlbGVtZW50UmVnaXN0cnknXG5dO1xuXG5cbkNhbnZhcy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbihjb25maWcpIHtcblxuICB2YXIgZXZlbnRCdXMgPSB0aGlzLl9ldmVudEJ1cztcblxuICAvLyBDcmVhdGVzIGEgPHN2Zz4gZWxlbWVudCB0aGF0IGlzIHdyYXBwZWQgaW50byBhIDxkaXY+LlxuICAvLyBUaGlzIHdheSB3ZSBhcmUgYWx3YXlzIGFibGUgdG8gY29ycmVjdGx5IGZpZ3VyZSBvdXQgdGhlIHNpemUgb2YgdGhlIHN2ZyBlbGVtZW50XG4gIC8vIGJ5IHF1ZXJ5aW5nIHRoZSBwYXJlbnQgbm9kZS5cbiAgLy9cbiAgLy8gKEl0IGlzIG5vdCBwb3NzaWJsZSB0byBnZXQgdGhlIHNpemUgb2YgYSBzdmcgZWxlbWVudCBjcm9zcyBicm93c2VyIEAgMjAxNC0wNC0wMSlcbiAgLy9cbiAgLy8gPGRpdiBjbGFzcz1cImRqcy1jb250YWluZXJcIiBzdHlsZT1cIndpZHRoOiB7ZGVzaXJlZC13aWR0aH0sIGhlaWdodDoge2Rlc2lyZWQtaGVpZ2h0fVwiPlxuICAvLyAgIDxzdmcgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPlxuICAvLyAgICAuLi5cbiAgLy8gICA8L3N2Zz5cbiAgLy8gPC9kaXY+XG5cbiAgLy8gaHRtbCBjb250YWluZXJcbiAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lciA9IGNyZWF0ZUNvbnRhaW5lcihjb25maWcpO1xuXG4gIHZhciBzdmcgPSB0aGlzLl9zdmcgPSBzdmdDcmVhdGUoJ3N2ZycpO1xuICBzdmdBdHRyKHN2ZywgeyB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJyB9KTtcblxuICBzdmdBcHBlbmQoY29udGFpbmVyLCBzdmcpO1xuXG4gIHZhciB2aWV3cG9ydCA9IHRoaXMuX3ZpZXdwb3J0ID0gY3JlYXRlR3JvdXAoc3ZnLCAndmlld3BvcnQnKTtcblxuICB0aGlzLl9sYXllcnMgPSB7fTtcblxuICAvLyBkZWJvdW5jZSBjYW52YXMudmlld2JveC5jaGFuZ2VkIGV2ZW50c1xuICAvLyBmb3Igc21vb3RoZXIgZGlhZ3JhbSBpbnRlcmFjdGlvblxuICBpZiAoY29uZmlnLmRlZmVyVXBkYXRlICE9PSBmYWxzZSkge1xuICAgIHRoaXMuX3ZpZXdib3hDaGFuZ2VkID0gZGVib3VuY2UoYmluZCh0aGlzLl92aWV3Ym94Q2hhbmdlZCwgdGhpcyksIDMwMCk7XG4gIH1cblxuICBldmVudEJ1cy5vbignZGlhZ3JhbS5pbml0JywgZnVuY3Rpb24oKSB7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIGNhbnZhcyBpcyByZWFkeSB0byBiZSBkcmF3biBvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBDYW52YXNcbiAgICAgKlxuICAgICAqIEBldmVudCBjYW52YXMuaW5pdFxuICAgICAqXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IHN2ZyB0aGUgY3JlYXRlZCBzdmcgZWxlbWVudFxuICAgICAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gdmlld3BvcnQgdGhlIGRpcmVjdCBwYXJlbnQgb2YgZGlhZ3JhbSBlbGVtZW50cyBhbmQgc2hhcGVzXG4gICAgICovXG4gICAgZXZlbnRCdXMuZmlyZSgnY2FudmFzLmluaXQnLCB7XG4gICAgICBzdmc6IHN2ZyxcbiAgICAgIHZpZXdwb3J0OiB2aWV3cG9ydFxuICAgIH0pO1xuXG4gIH0sIHRoaXMpO1xuXG4gIC8vIHJlc2V0IHZpZXdib3ggb24gc2hhcGUgY2hhbmdlcyB0b1xuICAvLyByZWNvbXB1dGUgdGhlIHZpZXdib3hcbiAgZXZlbnRCdXMub24oW1xuICAgICdzaGFwZS5hZGRlZCcsXG4gICAgJ2Nvbm5lY3Rpb24uYWRkZWQnLFxuICAgICdzaGFwZS5yZW1vdmVkJyxcbiAgICAnY29ubmVjdGlvbi5yZW1vdmVkJyxcbiAgICAnZWxlbWVudHMuY2hhbmdlZCdcbiAgXSwgZnVuY3Rpb24oKSB7XG4gICAgZGVsZXRlIHRoaXMuX2NhY2hlZFZpZXdib3g7XG4gIH0sIHRoaXMpO1xuXG4gIGV2ZW50QnVzLm9uKCdkaWFncmFtLmRlc3Ryb3knLCA1MDAsIHRoaXMuX2Rlc3Ryb3ksIHRoaXMpO1xuICBldmVudEJ1cy5vbignZGlhZ3JhbS5jbGVhcicsIDUwMCwgdGhpcy5fY2xlYXIsIHRoaXMpO1xufTtcblxuQ2FudmFzLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uKGVtaXQpIHtcbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY2FudmFzLmRlc3Ryb3knLCB7XG4gICAgc3ZnOiB0aGlzLl9zdmcsXG4gICAgdmlld3BvcnQ6IHRoaXMuX3ZpZXdwb3J0XG4gIH0pO1xuXG4gIHZhciBwYXJlbnQgPSB0aGlzLl9jb250YWluZXIucGFyZW50Tm9kZTtcblxuICBpZiAocGFyZW50KSB7XG4gICAgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lcik7XG4gIH1cblxuICBkZWxldGUgdGhpcy5fc3ZnO1xuICBkZWxldGUgdGhpcy5fY29udGFpbmVyO1xuICBkZWxldGUgdGhpcy5fbGF5ZXJzO1xuICBkZWxldGUgdGhpcy5fcm9vdEVsZW1lbnQ7XG4gIGRlbGV0ZSB0aGlzLl92aWV3cG9ydDtcbn07XG5cbkNhbnZhcy5wcm90b3R5cGUuX2NsZWFyID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBhbGxFbGVtZW50cyA9IHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5nZXRBbGwoKTtcblxuICAvLyByZW1vdmUgYWxsIGVsZW1lbnRzXG4gIGFsbEVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHZhciB0eXBlID0gZ2V0VHlwZShlbGVtZW50KTtcblxuICAgIGlmICh0eXBlID09PSAncm9vdCcpIHtcbiAgICAgIHNlbGYuc2V0Um9vdEVsZW1lbnQobnVsbCwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYuX3JlbW92ZUVsZW1lbnQoZWxlbWVudCwgdHlwZSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBmb3JjZSByZWNvbXB1dGF0aW9uIG9mIHZpZXcgYm94XG4gIGRlbGV0ZSB0aGlzLl9jYWNoZWRWaWV3Ym94O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZWZhdWx0IGxheWVyIG9uIHdoaWNoXG4gKiBhbGwgZWxlbWVudHMgYXJlIGRyYXduLlxuICpcbiAqIEByZXR1cm5zIHtTVkdFbGVtZW50fVxuICovXG5DYW52YXMucHJvdG90eXBlLmdldERlZmF1bHRMYXllciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5nZXRMYXllcihCQVNFX0xBWUVSLCAwKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIGxheWVyIHRoYXQgaXMgdXNlZCB0byBkcmF3IGVsZW1lbnRzXG4gKiBvciBhbm5vdGF0aW9ucyBvbiBpdC5cbiAqXG4gKiBOb24tZXhpc3RpbmcgbGF5ZXJzIHJldHJpZXZlZCB0aHJvdWdoIHRoaXMgbWV0aG9kXG4gKiB3aWxsIGJlIGNyZWF0ZWQuIER1cmluZyBjcmVhdGlvbiwgdGhlIG9wdGlvbmFsIGluZGV4XG4gKiBtYXkgYmUgdXNlZCB0byBjcmVhdGUgbGF5ZXJzIGJlbG93IG9yIGFib3ZlIGV4aXN0aW5nIGxheWVycy5cbiAqIEEgbGF5ZXIgd2l0aCBhIGNlcnRhaW4gaW5kZXggaXMgYWx3YXlzIGNyZWF0ZWQgYWJvdmUgYWxsXG4gKiBleGlzdGluZyBsYXllcnMgd2l0aCB0aGUgc2FtZSBpbmRleC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKlxuICogQHJldHVybnMge1NWR0VsZW1lbnR9XG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuZ2V0TGF5ZXIgPSBmdW5jdGlvbihuYW1lLCBpbmRleCkge1xuXG4gIGlmICghbmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVzdCBzcGVjaWZ5IGEgbmFtZScpO1xuICB9XG5cbiAgdmFyIGxheWVyID0gdGhpcy5fbGF5ZXJzW25hbWVdO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICBsYXllciA9IHRoaXMuX2xheWVyc1tuYW1lXSA9IHRoaXMuX2NyZWF0ZUxheWVyKG5hbWUsIGluZGV4KTtcbiAgfVxuXG4gIC8vIHRocm93IGFuIGVycm9yIGlmIGxheWVyIGNyZWF0aW9uIC8gcmV0cml2YWwgaXNcbiAgLy8gcmVxdWVzdGVkIG9uIGRpZmZlcmVudCBpbmRleFxuICBpZiAodHlwZW9mIGluZGV4ICE9PSAndW5kZWZpbmVkJyAmJiBsYXllci5pbmRleCAhPT0gaW5kZXgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2xheWVyIDwnICsgbmFtZSArICc+IGFscmVhZHkgY3JlYXRlZCBhdCBpbmRleCA8JyArIGluZGV4ICsgJz4nKTtcbiAgfVxuXG4gIHJldHVybiBsYXllci5ncm91cDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGdpdmVuIGxheWVyIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gW2luZGV4PTBdXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBsYXllciBkZXNjcmlwdG9yIHdpdGggeyBpbmRleCwgZ3JvdXA6IFNWR0dyb3VwIH1cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5fY3JlYXRlTGF5ZXIgPSBmdW5jdGlvbihuYW1lLCBpbmRleCkge1xuXG4gIGlmICghaW5kZXgpIHtcbiAgICBpbmRleCA9IDA7XG4gIH1cblxuICB2YXIgY2hpbGRJbmRleCA9IHJlZHVjZSh0aGlzLl9sYXllcnMsIGZ1bmN0aW9uKGNoaWxkSW5kZXgsIGxheWVyKSB7XG4gICAgaWYgKGluZGV4ID49IGxheWVyLmluZGV4KSB7XG4gICAgICBjaGlsZEluZGV4Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkSW5kZXg7XG4gIH0sIDApO1xuXG4gIHJldHVybiB7XG4gICAgZ3JvdXA6IGNyZWF0ZUdyb3VwKHRoaXMuX3ZpZXdwb3J0LCAnbGF5ZXItJyArIG5hbWUsIGNoaWxkSW5kZXgpLFxuICAgIGluZGV4OiBpbmRleFxuICB9O1xuXG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGh0bWwgZWxlbWVudCB0aGF0IGVuY2xvc2VzIHRoZVxuICogZHJhd2luZyBjYW52YXMuXG4gKlxuICogQHJldHVybiB7RE9NTm9kZX1cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5nZXRDb250YWluZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbn07XG5cblxuLy8gbWFya2VycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbkNhbnZhcy5wcm90b3R5cGUuX3VwZGF0ZU1hcmtlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIG1hcmtlciwgYWRkKSB7XG4gIHZhciBjb250YWluZXI7XG5cbiAgaWYgKCFlbGVtZW50LmlkKSB7XG4gICAgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5nZXQoZWxlbWVudCk7XG4gIH1cblxuICAvLyB3ZSBuZWVkIHRvIGFjY2VzcyBhbGxcbiAgY29udGFpbmVyID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5Ll9lbGVtZW50c1tlbGVtZW50LmlkXTtcblxuICBpZiAoIWNvbnRhaW5lcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvckVhY2goWyBjb250YWluZXIuZ2Z4LCBjb250YWluZXIuc2Vjb25kYXJ5R2Z4IF0sIGZ1bmN0aW9uKGdmeCkge1xuICAgIGlmIChnZngpIHtcblxuICAgICAgLy8gaW52b2tlIGVpdGhlciBhZGRDbGFzcyBvciByZW1vdmVDbGFzcyBiYXNlZCBvbiBtb2RlXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHN2Z0NsYXNzZXMoZ2Z4KS5hZGQobWFya2VyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN2Z0NsYXNzZXMoZ2Z4KS5yZW1vdmUobWFya2VyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgYSBtYXJrZXIgaGFzIGJlZW4gdXBkYXRlZCBmb3IgYW4gZWxlbWVudFxuICAgKlxuICAgKiBAZXZlbnQgZWxlbWVudC5tYXJrZXIudXBkYXRlXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkVsZW1lbnR9IGVsZW1lbnQgdGhlIHNoYXBlXG4gICAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBnZnggdGhlIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2hhcGVcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IG1hcmtlclxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IGFkZCB0cnVlIGlmIHRoZSBtYXJrZXIgd2FzIGFkZGVkLCBmYWxzZSBpZiBpdCBnb3QgcmVtb3ZlZFxuICAgKi9cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnZWxlbWVudC5tYXJrZXIudXBkYXRlJywgeyBlbGVtZW50OiBlbGVtZW50LCBnZng6IGNvbnRhaW5lci5nZngsIG1hcmtlcjogbWFya2VyLCBhZGQ6ICEhYWRkIH0pO1xufTtcblxuXG4vKipcbiAqIEFkZHMgYSBtYXJrZXIgdG8gYW4gZWxlbWVudCAoYmFzaWNhbGx5IGEgY3NzIGNsYXNzKS5cbiAqXG4gKiBGaXJlcyB0aGUgZWxlbWVudC5tYXJrZXIudXBkYXRlIGV2ZW50LCBtYWtpbmcgaXQgcG9zc2libGUgdG9cbiAqIGludGVncmF0ZSBleHRlbnNpb24gaW50byB0aGUgbWFya2VyIGxpZmUtY3ljbGUsIHRvby5cbiAqXG4gKiBAZXhhbXBsZVxuICogY2FudmFzLmFkZE1hcmtlcignZm9vJywgJ3NvbWUtbWFya2VyJyk7XG4gKlxuICogdmFyIGZvb0dmeCA9IGNhbnZhcy5nZXRHcmFwaGljcygnZm9vJyk7XG4gKlxuICogZm9vR2Z4OyAvLyA8ZyBjbGFzcz1cIi4uLiBzb21lLW1hcmtlclwiPiAuLi4gPC9nPlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfGRqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gbWFya2VyXG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuYWRkTWFya2VyID0gZnVuY3Rpb24oZWxlbWVudCwgbWFya2VyKSB7XG4gIHRoaXMuX3VwZGF0ZU1hcmtlcihlbGVtZW50LCBtYXJrZXIsIHRydWUpO1xufTtcblxuXG4vKipcbiAqIFJlbW92ZSBhIG1hcmtlciBmcm9tIGFuIGVsZW1lbnQuXG4gKlxuICogRmlyZXMgdGhlIGVsZW1lbnQubWFya2VyLnVwZGF0ZSBldmVudCwgbWFraW5nIGl0IHBvc3NpYmxlIHRvXG4gKiBpbnRlZ3JhdGUgZXh0ZW5zaW9uIGludG8gdGhlIG1hcmtlciBsaWZlLWN5Y2xlLCB0b28uXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfGRqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0gIHtzdHJpbmd9IG1hcmtlclxuICovXG5DYW52YXMucHJvdG90eXBlLnJlbW92ZU1hcmtlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIG1hcmtlcikge1xuICB0aGlzLl91cGRhdGVNYXJrZXIoZWxlbWVudCwgbWFya2VyLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIENoZWNrIHRoZSBleGlzdGVuY2Ugb2YgYSBtYXJrZXIgb24gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd8ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSAge3N0cmluZ30gbWFya2VyXG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuaGFzTWFya2VyID0gZnVuY3Rpb24oZWxlbWVudCwgbWFya2VyKSB7XG4gIGlmICghZWxlbWVudC5pZCkge1xuICAgIGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnkuZ2V0KGVsZW1lbnQpO1xuICB9XG5cbiAgdmFyIGdmeCA9IHRoaXMuZ2V0R3JhcGhpY3MoZWxlbWVudCk7XG5cbiAgcmV0dXJuIHN2Z0NsYXNzZXMoZ2Z4KS5oYXMobWFya2VyKTtcbn07XG5cbi8qKlxuICogVG9nZ2xlcyBhIG1hcmtlciBvbiBhbiBlbGVtZW50LlxuICpcbiAqIEZpcmVzIHRoZSBlbGVtZW50Lm1hcmtlci51cGRhdGUgZXZlbnQsIG1ha2luZyBpdCBwb3NzaWJsZSB0b1xuICogaW50ZWdyYXRlIGV4dGVuc2lvbiBpbnRvIHRoZSBtYXJrZXIgbGlmZS1jeWNsZSwgdG9vLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ3xkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtICB7c3RyaW5nfSBtYXJrZXJcbiAqL1xuQ2FudmFzLnByb3RvdHlwZS50b2dnbGVNYXJrZXIgPSBmdW5jdGlvbihlbGVtZW50LCBtYXJrZXIpIHtcbiAgaWYgKHRoaXMuaGFzTWFya2VyKGVsZW1lbnQsIG1hcmtlcikpIHtcbiAgICB0aGlzLnJlbW92ZU1hcmtlcihlbGVtZW50LCBtYXJrZXIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYWRkTWFya2VyKGVsZW1lbnQsIG1hcmtlcik7XG4gIH1cbn07XG5cbkNhbnZhcy5wcm90b3R5cGUuZ2V0Um9vdEVsZW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9yb290RWxlbWVudCkge1xuICAgIHRoaXMuc2V0Um9vdEVsZW1lbnQoeyBpZDogJ19faW1wbGljaXRyb290JywgY2hpbGRyZW46IFtdIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX3Jvb3RFbGVtZW50O1xufTtcblxuXG5cbi8vIHJvb3QgZWxlbWVudCBoYW5kbGluZyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogU2V0cyBhIGdpdmVuIGVsZW1lbnQgYXMgdGhlIG5ldyByb290IGVsZW1lbnQgZm9yIHRoZSBjYW52YXNcbiAqIGFuZCByZXR1cm5zIHRoZSBuZXcgcm9vdCBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fGRqcy5tb2RlbC5Sb290fSBlbGVtZW50XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvdmVycmlkZV0gd2hldGhlciB0byBvdmVycmlkZSB0aGUgY3VycmVudCByb290IGVsZW1lbnQsIGlmIGFueVxuICpcbiAqIEByZXR1cm4ge09iamVjdHxkanMubW9kZWwuUm9vdH0gbmV3IHJvb3QgZWxlbWVudFxuICovXG5DYW52YXMucHJvdG90eXBlLnNldFJvb3RFbGVtZW50ID0gZnVuY3Rpb24oZWxlbWVudCwgb3ZlcnJpZGUpIHtcblxuICBpZiAoZWxlbWVudCkge1xuICAgIHRoaXMuX2Vuc3VyZVZhbGlkKCdyb290JywgZWxlbWVudCk7XG4gIH1cblxuICB2YXIgY3VycmVudFJvb3QgPSB0aGlzLl9yb290RWxlbWVudCxcbiAgICAgIGVsZW1lbnRSZWdpc3RyeSA9IHRoaXMuX2VsZW1lbnRSZWdpc3RyeSxcbiAgICAgIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgaWYgKGN1cnJlbnRSb290KSB7XG4gICAgaWYgKCFvdmVycmlkZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb290RWxlbWVudCBhbHJlYWR5IHNldCwgbmVlZCB0byBzcGVjaWZ5IG92ZXJyaWRlJyk7XG4gICAgfVxuXG4gICAgLy8gc2ltdWxhdGUgZWxlbWVudCByZW1vdmUgZXZlbnQgc2VxdWVuY2VcbiAgICBldmVudEJ1cy5maXJlKCdyb290LnJlbW92ZScsIHsgZWxlbWVudDogY3VycmVudFJvb3QgfSk7XG4gICAgZXZlbnRCdXMuZmlyZSgncm9vdC5yZW1vdmVkJywgeyBlbGVtZW50OiBjdXJyZW50Um9vdCB9KTtcblxuICAgIGVsZW1lbnRSZWdpc3RyeS5yZW1vdmUoY3VycmVudFJvb3QpO1xuICB9XG5cbiAgaWYgKGVsZW1lbnQpIHtcbiAgICB2YXIgZ2Z4ID0gdGhpcy5nZXREZWZhdWx0TGF5ZXIoKTtcblxuICAgIC8vIHJlc2VtYmxlIGVsZW1lbnQgYWRkIGV2ZW50IHNlcXVlbmNlXG4gICAgZXZlbnRCdXMuZmlyZSgncm9vdC5hZGQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQgfSk7XG5cbiAgICBlbGVtZW50UmVnaXN0cnkuYWRkKGVsZW1lbnQsIGdmeCwgdGhpcy5fc3ZnKTtcblxuICAgIGV2ZW50QnVzLmZpcmUoJ3Jvb3QuYWRkZWQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIGdmeDogZ2Z4IH0pO1xuICB9XG5cbiAgdGhpcy5fcm9vdEVsZW1lbnQgPSBlbGVtZW50O1xuXG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuXG5cbi8vIGFkZCBmdW5jdGlvbmFsaXR5IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuQ2FudmFzLnByb3RvdHlwZS5fZW5zdXJlVmFsaWQgPSBmdW5jdGlvbih0eXBlLCBlbGVtZW50KSB7XG4gIGlmICghZWxlbWVudC5pZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZWxlbWVudCBtdXN0IGhhdmUgYW4gaWQnKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9lbGVtZW50UmVnaXN0cnkuZ2V0KGVsZW1lbnQuaWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlbGVtZW50IHdpdGggaWQgJyArIGVsZW1lbnQuaWQgKyAnIGFscmVhZHkgZXhpc3RzJyk7XG4gIH1cblxuICB2YXIgcmVxdWlyZWRBdHRycyA9IFJFUVVJUkVEX01PREVMX0FUVFJTW3R5cGVdO1xuXG4gIHZhciB2YWxpZCA9IGV2ZXJ5KHJlcXVpcmVkQXR0cnMsIGZ1bmN0aW9uKGF0dHIpIHtcbiAgICByZXR1cm4gdHlwZW9mIGVsZW1lbnRbYXR0cl0gIT09ICd1bmRlZmluZWQnO1xuICB9KTtcblxuICBpZiAoIXZhbGlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ211c3Qgc3VwcGx5IHsgJyArIHJlcXVpcmVkQXR0cnMuam9pbignLCAnKSArICcgfSB3aXRoICcgKyB0eXBlKTtcbiAgfVxufTtcblxuQ2FudmFzLnByb3RvdHlwZS5fc2V0UGFyZW50ID0gZnVuY3Rpb24oZWxlbWVudCwgcGFyZW50LCBwYXJlbnRJbmRleCkge1xuICBjb2xsZWN0aW9uQWRkKHBhcmVudC5jaGlsZHJlbiwgZWxlbWVudCwgcGFyZW50SW5kZXgpO1xuICBlbGVtZW50LnBhcmVudCA9IHBhcmVudDtcbn07XG5cbi8qKlxuICogQWRkcyBhbiBlbGVtZW50IHRvIHRoZSBjYW52YXMuXG4gKlxuICogVGhpcyB3aXJlcyB0aGUgcGFyZW50IDwtPiBjaGlsZCByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgZWxlbWVudCBhbmRcbiAqIGEgZXhwbGljaXRseSBzcGVjaWZpZWQgcGFyZW50IG9yIGFuIGltcGxpY2l0IHJvb3QgZWxlbWVudC5cbiAqXG4gKiBEdXJpbmcgYWRkIGl0IGVtaXRzIHRoZSBldmVudHNcbiAqXG4gKiAgKiA8e3R5cGV9LmFkZD4gKGVsZW1lbnQsIHBhcmVudClcbiAqICAqIDx7dHlwZX0uYWRkZWQ+IChlbGVtZW50LCBnZngpXG4gKlxuICogRXh0ZW5zaW9ucyBtYXkgaG9vayBpbnRvIHRoZXNlIGV2ZW50cyB0byBwZXJmb3JtIHRoZWlyIG1hZ2ljLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge09iamVjdHxkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R8ZGpzLm1vZGVsLkJhc2V9IFtwYXJlbnRdXG4gKiBAcGFyYW0ge251bWJlcn0gW3BhcmVudEluZGV4XVxuICpcbiAqIEByZXR1cm4ge09iamVjdHxkanMubW9kZWwuQmFzZX0gdGhlIGFkZGVkIGVsZW1lbnRcbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5fYWRkRWxlbWVudCA9IGZ1bmN0aW9uKHR5cGUsIGVsZW1lbnQsIHBhcmVudCwgcGFyZW50SW5kZXgpIHtcblxuICBwYXJlbnQgPSBwYXJlbnQgfHwgdGhpcy5nZXRSb290RWxlbWVudCgpO1xuXG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzLFxuICAgICAgZ3JhcGhpY3NGYWN0b3J5ID0gdGhpcy5fZ3JhcGhpY3NGYWN0b3J5O1xuXG4gIHRoaXMuX2Vuc3VyZVZhbGlkKHR5cGUsIGVsZW1lbnQpO1xuXG4gIGV2ZW50QnVzLmZpcmUodHlwZSArICcuYWRkJywgeyBlbGVtZW50OiBlbGVtZW50LCBwYXJlbnQ6IHBhcmVudCB9KTtcblxuICB0aGlzLl9zZXRQYXJlbnQoZWxlbWVudCwgcGFyZW50LCBwYXJlbnRJbmRleCk7XG5cbiAgLy8gY3JlYXRlIGdyYXBoaWNzXG4gIHZhciBnZnggPSBncmFwaGljc0ZhY3RvcnkuY3JlYXRlKHR5cGUsIGVsZW1lbnQsIHBhcmVudEluZGV4KTtcblxuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkuYWRkKGVsZW1lbnQsIGdmeCk7XG5cbiAgLy8gdXBkYXRlIGl0cyB2aXN1YWxcbiAgZ3JhcGhpY3NGYWN0b3J5LnVwZGF0ZSh0eXBlLCBlbGVtZW50LCBnZngpO1xuXG4gIGV2ZW50QnVzLmZpcmUodHlwZSArICcuYWRkZWQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIGdmeDogZ2Z4IH0pO1xuXG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuLyoqXG4gKiBBZGRzIGEgc2hhcGUgdG8gdGhlIGNhbnZhc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fGRqcy5tb2RlbC5TaGFwZX0gc2hhcGUgdG8gYWRkIHRvIHRoZSBkaWFncmFtXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBbcGFyZW50XVxuICogQHBhcmFtIHtudW1iZXJ9IFtwYXJlbnRJbmRleF1cbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuU2hhcGV9IHRoZSBhZGRlZCBzaGFwZVxuICovXG5DYW52YXMucHJvdG90eXBlLmFkZFNoYXBlID0gZnVuY3Rpb24oc2hhcGUsIHBhcmVudCwgcGFyZW50SW5kZXgpIHtcbiAgcmV0dXJuIHRoaXMuX2FkZEVsZW1lbnQoJ3NoYXBlJywgc2hhcGUsIHBhcmVudCwgcGFyZW50SW5kZXgpO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY29ubmVjdGlvbiB0byB0aGUgY2FudmFzXG4gKlxuICogQHBhcmFtIHtPYmplY3R8ZGpzLm1vZGVsLkNvbm5lY3Rpb259IGNvbm5lY3Rpb24gdG8gYWRkIHRvIHRoZSBkaWFncmFtXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBbcGFyZW50XVxuICogQHBhcmFtIHtudW1iZXJ9IFtwYXJlbnRJbmRleF1cbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuQ29ubmVjdGlvbn0gdGhlIGFkZGVkIGNvbm5lY3Rpb25cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5hZGRDb25uZWN0aW9uID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgcGFyZW50LCBwYXJlbnRJbmRleCkge1xuICByZXR1cm4gdGhpcy5fYWRkRWxlbWVudCgnY29ubmVjdGlvbicsIGNvbm5lY3Rpb24sIHBhcmVudCwgcGFyZW50SW5kZXgpO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIHJlbW92ZSBlbGVtZW50XG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuX3JlbW92ZUVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50LCB0eXBlKSB7XG5cbiAgdmFyIGVsZW1lbnRSZWdpc3RyeSA9IHRoaXMuX2VsZW1lbnRSZWdpc3RyeSxcbiAgICAgIGdyYXBoaWNzRmFjdG9yeSA9IHRoaXMuX2dyYXBoaWNzRmFjdG9yeSxcbiAgICAgIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgZWxlbWVudCA9IGVsZW1lbnRSZWdpc3RyeS5nZXQoZWxlbWVudC5pZCB8fCBlbGVtZW50KTtcblxuICBpZiAoIWVsZW1lbnQpIHtcblxuICAgIC8vIGVsZW1lbnQgd2FzIHJlbW92ZWQgYWxyZWFkeVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGV2ZW50QnVzLmZpcmUodHlwZSArICcucmVtb3ZlJywgeyBlbGVtZW50OiBlbGVtZW50IH0pO1xuXG4gIGdyYXBoaWNzRmFjdG9yeS5yZW1vdmUoZWxlbWVudCk7XG5cbiAgLy8gdW5zZXQgcGFyZW50IDwtPiBjaGlsZCByZWxhdGlvbnNoaXBcbiAgY29sbGVjdGlvblJlbW92ZShlbGVtZW50LnBhcmVudCAmJiBlbGVtZW50LnBhcmVudC5jaGlsZHJlbiwgZWxlbWVudCk7XG4gIGVsZW1lbnQucGFyZW50ID0gbnVsbDtcblxuICBldmVudEJ1cy5maXJlKHR5cGUgKyAnLnJlbW92ZWQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQgfSk7XG5cbiAgZWxlbWVudFJlZ2lzdHJ5LnJlbW92ZShlbGVtZW50KTtcblxuICByZXR1cm4gZWxlbWVudDtcbn07XG5cblxuLyoqXG4gKiBSZW1vdmVzIGEgc2hhcGUgZnJvbSB0aGUgY2FudmFzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8ZGpzLm1vZGVsLlNoYXBlfSBzaGFwZSBvciBzaGFwZSBpZCB0byBiZSByZW1vdmVkXG4gKlxuICogQHJldHVybiB7ZGpzLm1vZGVsLlNoYXBlfSB0aGUgcmVtb3ZlZCBzaGFwZVxuICovXG5DYW52YXMucHJvdG90eXBlLnJlbW92ZVNoYXBlID0gZnVuY3Rpb24oc2hhcGUpIHtcblxuICAvKipcbiAgICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IGEgc2hhcGUgaXMgYWJvdXQgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBjYW52YXMuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBDYW52YXNcbiAgICpcbiAgICogQGV2ZW50IHNoYXBlLnJlbW92ZVxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5TaGFwZX0gZWxlbWVudCB0aGUgc2hhcGUgZGVzY3JpcHRvclxuICAgKiBAcHJvcGVydHkge09iamVjdH0gZ2Z4IHRoZSBncmFwaGljYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNoYXBlXG4gICAqL1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgYSBzaGFwZSBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGNhbnZhcy5cbiAgICpcbiAgICogQG1lbWJlck9mIENhbnZhc1xuICAgKlxuICAgKiBAZXZlbnQgc2hhcGUucmVtb3ZlZFxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5TaGFwZX0gZWxlbWVudCB0aGUgc2hhcGUgZGVzY3JpcHRvclxuICAgKiBAcHJvcGVydHkge09iamVjdH0gZ2Z4IHRoZSBncmFwaGljYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNoYXBlXG4gICAqL1xuICByZXR1cm4gdGhpcy5fcmVtb3ZlRWxlbWVudChzaGFwZSwgJ3NoYXBlJyk7XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyBhIGNvbm5lY3Rpb24gZnJvbSB0aGUgY2FudmFzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8ZGpzLm1vZGVsLkNvbm5lY3Rpb259IGNvbm5lY3Rpb24gb3IgY29ubmVjdGlvbiBpZCB0byBiZSByZW1vdmVkXG4gKlxuICogQHJldHVybiB7ZGpzLm1vZGVsLkNvbm5lY3Rpb259IHRoZSByZW1vdmVkIGNvbm5lY3Rpb25cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5yZW1vdmVDb25uZWN0aW9uID0gZnVuY3Rpb24oY29ubmVjdGlvbikge1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgYSBjb25uZWN0aW9uIGlzIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgY2FudmFzLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgQ2FudmFzXG4gICAqXG4gICAqIEBldmVudCBjb25uZWN0aW9uLnJlbW92ZVxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5Db25uZWN0aW9ufSBlbGVtZW50IHRoZSBjb25uZWN0aW9uIGRlc2NyaXB0b3JcbiAgICogQHByb3BlcnR5IHtPYmplY3R9IGdmeCB0aGUgZ3JhcGhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb25uZWN0aW9uXG4gICAqL1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgYSBjb25uZWN0aW9uIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY2FudmFzLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgQ2FudmFzXG4gICAqXG4gICAqIEBldmVudCBjb25uZWN0aW9uLnJlbW92ZWRcbiAgICogQHR5cGUge09iamVjdH1cbiAgICogQHByb3BlcnR5IHtkanMubW9kZWwuQ29ubmVjdGlvbn0gZWxlbWVudCB0aGUgY29ubmVjdGlvbiBkZXNjcmlwdG9yXG4gICAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBnZnggdGhlIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29ubmVjdGlvblxuICAgKi9cbiAgcmV0dXJuIHRoaXMuX3JlbW92ZUVsZW1lbnQoY29ubmVjdGlvbiwgJ2Nvbm5lY3Rpb24nKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGdyYXBoaWNhbCBvYmplY3QgdW5kZXJsYXlpbmcgYSBjZXJ0YWluIGRpYWdyYW0gZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfGRqcy5tb2RlbC5CYXNlfSBlbGVtZW50IGRlc2NyaXB0b3Igb2YgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlY29uZGFyeT1mYWxzZV0gd2hldGhlciB0byByZXR1cm4gdGhlIHNlY29uZGFyeSBjb25uZWN0ZWQgZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge1NWR0VsZW1lbnR9XG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuZ2V0R3JhcGhpY3MgPSBmdW5jdGlvbihlbGVtZW50LCBzZWNvbmRhcnkpIHtcbiAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhlbGVtZW50LCBzZWNvbmRhcnkpO1xufTtcblxuXG4vKipcbiAqIFBlcmZvcm0gYSB2aWV3Ym94IHVwZGF0ZSB2aWEgYSBnaXZlbiBjaGFuZ2UgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2hhbmdlRm5cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5fY2hhbmdlVmlld2JveCA9IGZ1bmN0aW9uKGNoYW5nZUZuKSB7XG5cbiAgLy8gbm90aWZ5IG90aGVycyBvZiB0aGUgdXBjb21pbmcgdmlld2JveCBjaGFuZ2VcbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY2FudmFzLnZpZXdib3guY2hhbmdpbmcnKTtcblxuICAvLyBwZXJmb3JtIGFjdHVhbCBjaGFuZ2VcbiAgY2hhbmdlRm4uYXBwbHkodGhpcyk7XG5cbiAgLy8gcmVzZXQgdGhlIGNhY2hlZCB2aWV3Ym94IHNvIHRoYXRcbiAgLy8gYSBuZXcgZ2V0IG9wZXJhdGlvbiBvbiB2aWV3Ym94IG9yIHpvb21cbiAgLy8gdHJpZ2dlcnMgYSB2aWV3Ym94IHJlLWNvbXB1dGF0aW9uXG4gIHRoaXMuX2NhY2hlZFZpZXdib3ggPSBudWxsO1xuXG4gIC8vIG5vdGlmeSBvdGhlcnMgb2YgdGhlIGNoYW5nZTsgdGhpcyBzdGVwXG4gIC8vIG1heSBvciBtYXkgbm90IGJlIGRlYm91bmNlZFxuICB0aGlzLl92aWV3Ym94Q2hhbmdlZCgpO1xufTtcblxuQ2FudmFzLnByb3RvdHlwZS5fdmlld2JveENoYW5nZWQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY2FudmFzLnZpZXdib3guY2hhbmdlZCcsIHsgdmlld2JveDogdGhpcy52aWV3Ym94KCkgfSk7XG59O1xuXG5cbi8qKlxuICogR2V0cyBvciBzZXRzIHRoZSB2aWV3IGJveCBvZiB0aGUgY2FudmFzLCBpLmUuIHRoZVxuICogYXJlYSB0aGF0IGlzIGN1cnJlbnRseSBkaXNwbGF5ZWQuXG4gKlxuICogVGhlIGdldHRlciBtYXkgcmV0dXJuIGEgY2FjaGVkIHZpZXdib3ggKGlmIGl0IGlzIGN1cnJlbnRseVxuICogY2hhbmdpbmcpLiBUbyBmb3JjZSBhIHJlY29tcHV0YXRpb24sIHBhc3MgYGZhbHNlYCBhcyB0aGUgZmlyc3QgYXJndW1lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBjYW52YXMudmlld2JveCh7IHg6IDEwMCwgeTogMTAwLCB3aWR0aDogNTAwLCBoZWlnaHQ6IDUwMCB9KVxuICpcbiAqIC8vIHNldHMgdGhlIHZpc2libGUgYXJlYSBvZiB0aGUgZGlhZ3JhbSB0byAoMTAwfDEwMCkgLT4gKDYwMHwxMDApXG4gKiAvLyBhbmQgYW5kIHNjYWxlcyBpdCBhY2NvcmRpbmcgdG8gdGhlIGRpYWdyYW0gd2lkdGhcbiAqXG4gKiB2YXIgdmlld2JveCA9IGNhbnZhcy52aWV3Ym94KCk7IC8vIHBhc3MgYGZhbHNlYCB0byBmb3JjZSByZWNvbXB1dGluZyB0aGUgYm94LlxuICpcbiAqIGNvbnNvbGUubG9nKHZpZXdib3gpO1xuICogLy8ge1xuICogLy8gICBpbm5lcjogRGltZW5zaW9ucyxcbiAqIC8vICAgb3V0ZXI6IERpbWVuc2lvbnMsXG4gKiAvLyAgIHNjYWxlLFxuICogLy8gICB4LCB5LFxuICogLy8gICB3aWR0aCwgaGVpZ2h0XG4gKiAvLyB9XG4gKlxuICogLy8gaWYgdGhlIGN1cnJlbnQgZGlhZ3JhbSBpcyB6b29tZWQgYW5kIHNjcm9sbGVkLCB5b3UgbWF5IHJlc2V0IGl0IHRvIHRoZVxuICogLy8gZGVmYXVsdCB6b29tIHZpYSB0aGlzIG1ldGhvZCwgdG9vOlxuICpcbiAqIHZhciB6b29tZWRBbmRTY3JvbGxlZFZpZXdib3ggPSBjYW52YXMudmlld2JveCgpO1xuICpcbiAqIGNhbnZhcy52aWV3Ym94KHtcbiAqICAgeDogMCxcbiAqICAgeTogMCxcbiAqICAgd2lkdGg6IHpvb21lZEFuZFNjcm9sbGVkVmlld2JveC5vdXRlci53aWR0aCxcbiAqICAgaGVpZ2h0OiB6b29tZWRBbmRTY3JvbGxlZFZpZXdib3gub3V0ZXIuaGVpZ2h0XG4gKiB9KTtcbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IFtib3hdIHRoZSBuZXcgdmlldyBib3ggdG8gc2V0XG4gKiBAcGFyYW0gIHtudW1iZXJ9IGJveC54IHRoZSB0b3AgbGVmdCBYIGNvb3JkaW5hdGUgb2YgdGhlIGNhbnZhcyB2aXNpYmxlIGluIHZpZXcgYm94XG4gKiBAcGFyYW0gIHtudW1iZXJ9IGJveC55IHRoZSB0b3AgbGVmdCBZIGNvb3JkaW5hdGUgb2YgdGhlIGNhbnZhcyB2aXNpYmxlIGluIHZpZXcgYm94XG4gKiBAcGFyYW0gIHtudW1iZXJ9IGJveC53aWR0aCB0aGUgdmlzaWJsZSB3aWR0aFxuICogQHBhcmFtICB7bnVtYmVyfSBib3guaGVpZ2h0XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB0aGUgY3VycmVudCB2aWV3IGJveFxuICovXG5DYW52YXMucHJvdG90eXBlLnZpZXdib3ggPSBmdW5jdGlvbihib3gpIHtcblxuICBpZiAoYm94ID09PSB1bmRlZmluZWQgJiYgdGhpcy5fY2FjaGVkVmlld2JveCkge1xuICAgIHJldHVybiB0aGlzLl9jYWNoZWRWaWV3Ym94O1xuICB9XG5cbiAgdmFyIHZpZXdwb3J0ID0gdGhpcy5fdmlld3BvcnQsXG4gICAgICBpbm5lckJveCxcbiAgICAgIG91dGVyQm94ID0gdGhpcy5nZXRTaXplKCksXG4gICAgICBtYXRyaXgsXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICBzY2FsZSxcbiAgICAgIHgsIHk7XG5cbiAgaWYgKCFib3gpIHtcblxuICAgIC8vIGNvbXB1dGUgdGhlIGlubmVyIGJveCBiYXNlZCBvbiB0aGVcbiAgICAvLyBkaWFncmFtcyBkZWZhdWx0IGxheWVyLiBUaGlzIGFsbG93cyB1cyB0byBleGNsdWRlXG4gICAgLy8gZXh0ZXJuYWwgY29tcG9uZW50cywgc3VjaCBhcyBvdmVybGF5c1xuICAgIGlubmVyQm94ID0gdGhpcy5nZXREZWZhdWx0TGF5ZXIoKS5nZXRCQm94KCk7XG5cbiAgICB0cmFuc2Zvcm0gPSBzdmdUcmFuc2Zvcm0odmlld3BvcnQpO1xuICAgIG1hdHJpeCA9IHRyYW5zZm9ybSA/IHRyYW5zZm9ybS5tYXRyaXggOiBjcmVhdGVNYXRyaXgoKTtcbiAgICBzY2FsZSA9IHJvdW5kKG1hdHJpeC5hLCAxMDAwKTtcblxuICAgIHggPSByb3VuZCgtbWF0cml4LmUgfHwgMCwgMTAwMCk7XG4gICAgeSA9IHJvdW5kKC1tYXRyaXguZiB8fCAwLCAxMDAwKTtcblxuICAgIGJveCA9IHRoaXMuX2NhY2hlZFZpZXdib3ggPSB7XG4gICAgICB4OiB4ID8geCAvIHNjYWxlIDogMCxcbiAgICAgIHk6IHkgPyB5IC8gc2NhbGUgOiAwLFxuICAgICAgd2lkdGg6IG91dGVyQm94LndpZHRoIC8gc2NhbGUsXG4gICAgICBoZWlnaHQ6IG91dGVyQm94LmhlaWdodCAvIHNjYWxlLFxuICAgICAgc2NhbGU6IHNjYWxlLFxuICAgICAgaW5uZXI6IHtcbiAgICAgICAgd2lkdGg6IGlubmVyQm94LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGlubmVyQm94LmhlaWdodCxcbiAgICAgICAgeDogaW5uZXJCb3gueCxcbiAgICAgICAgeTogaW5uZXJCb3gueVxuICAgICAgfSxcbiAgICAgIG91dGVyOiBvdXRlckJveFxuICAgIH07XG5cbiAgICByZXR1cm4gYm94O1xuICB9IGVsc2Uge1xuXG4gICAgdGhpcy5fY2hhbmdlVmlld2JveChmdW5jdGlvbigpIHtcbiAgICAgIHNjYWxlID0gTWF0aC5taW4ob3V0ZXJCb3gud2lkdGggLyBib3gud2lkdGgsIG91dGVyQm94LmhlaWdodCAvIGJveC5oZWlnaHQpO1xuXG4gICAgICB2YXIgbWF0cml4ID0gdGhpcy5fc3ZnLmNyZWF0ZVNWR01hdHJpeCgpXG4gICAgICAgIC5zY2FsZShzY2FsZSlcbiAgICAgICAgLnRyYW5zbGF0ZSgtYm94LngsIC1ib3gueSk7XG5cbiAgICAgIHN2Z1RyYW5zZm9ybSh2aWV3cG9ydCwgbWF0cml4KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBib3g7XG59O1xuXG5cbi8qKlxuICogR2V0cyBvciBzZXRzIHRoZSBzY3JvbGwgb2YgdGhlIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW2RlbHRhXSB0aGUgbmV3IHNjcm9sbCB0byBhcHBseS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gW2RlbHRhLmR4XVxuICogQHBhcmFtIHtudW1iZXJ9IFtkZWx0YS5keV1cbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5zY3JvbGwgPSBmdW5jdGlvbihkZWx0YSkge1xuXG4gIHZhciBub2RlID0gdGhpcy5fdmlld3BvcnQ7XG4gIHZhciBtYXRyaXggPSBub2RlLmdldENUTSgpO1xuXG4gIGlmIChkZWx0YSkge1xuICAgIHRoaXMuX2NoYW5nZVZpZXdib3goZnVuY3Rpb24oKSB7XG4gICAgICBkZWx0YSA9IGFzc2lnbih7IGR4OiAwLCBkeTogMCB9LCBkZWx0YSB8fCB7fSk7XG5cbiAgICAgIG1hdHJpeCA9IHRoaXMuX3N2Zy5jcmVhdGVTVkdNYXRyaXgoKS50cmFuc2xhdGUoZGVsdGEuZHgsIGRlbHRhLmR5KS5tdWx0aXBseShtYXRyaXgpO1xuXG4gICAgICBzZXRDVE0obm9kZSwgbWF0cml4KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7IHg6IG1hdHJpeC5lLCB5OiBtYXRyaXguZiB9O1xufTtcblxuXG4vKipcbiAqIEdldHMgb3Igc2V0cyB0aGUgY3VycmVudCB6b29tIG9mIHRoZSBjYW52YXMsIG9wdGlvbmFsbHkgem9vbWluZ1xuICogdG8gdGhlIHNwZWNpZmllZCBwb3NpdGlvbi5cbiAqXG4gKiBUaGUgZ2V0dGVyIG1heSByZXR1cm4gYSBjYWNoZWQgem9vbSBsZXZlbC4gQ2FsbCBpdCB3aXRoIGBmYWxzZWAgYXNcbiAqIHRoZSBmaXJzdCBhcmd1bWVudCB0byBmb3JjZSByZWNvbXB1dGF0aW9uIG9mIHRoZSBjdXJyZW50IGxldmVsLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW25ld1NjYWxlXSB0aGUgbmV3IHpvb20gbGV2ZWwsIGVpdGhlciBhIG51bWJlciwgaS5lLiAwLjksXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYGZpdC12aWV3cG9ydGAgdG8gYWRqdXN0IHRoZSBzaXplIHRvIGZpdCB0aGUgY3VycmVudCB2aWV3cG9ydFxuICogQHBhcmFtIHtzdHJpbmd8UG9pbnR9IFtjZW50ZXJdIHRoZSByZWZlcmVuY2UgcG9pbnQgeyB4OiAuLiwgeTogLi59IHRvIHpvb20gdG8sICdhdXRvJyB0byB6b29tIGludG8gbWlkIG9yIG51bGxcbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjdXJyZW50IHNjYWxlXG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuem9vbSA9IGZ1bmN0aW9uKG5ld1NjYWxlLCBjZW50ZXIpIHtcblxuICBpZiAoIW5ld1NjYWxlKSB7XG4gICAgcmV0dXJuIHRoaXMudmlld2JveChuZXdTY2FsZSkuc2NhbGU7XG4gIH1cblxuICBpZiAobmV3U2NhbGUgPT09ICdmaXQtdmlld3BvcnQnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpdFZpZXdwb3J0KGNlbnRlcik7XG4gIH1cblxuICB2YXIgb3V0ZXIsXG4gICAgICBtYXRyaXg7XG5cbiAgdGhpcy5fY2hhbmdlVmlld2JveChmdW5jdGlvbigpIHtcblxuICAgIGlmICh0eXBlb2YgY2VudGVyICE9PSAnb2JqZWN0Jykge1xuICAgICAgb3V0ZXIgPSB0aGlzLnZpZXdib3goKS5vdXRlcjtcblxuICAgICAgY2VudGVyID0ge1xuICAgICAgICB4OiBvdXRlci53aWR0aCAvIDIsXG4gICAgICAgIHk6IG91dGVyLmhlaWdodCAvIDJcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbWF0cml4ID0gdGhpcy5fc2V0Wm9vbShuZXdTY2FsZSwgY2VudGVyKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJvdW5kKG1hdHJpeC5hLCAxMDAwKTtcbn07XG5cbmZ1bmN0aW9uIHNldENUTShub2RlLCBtKSB7XG4gIHZhciBtc3RyID0gJ21hdHJpeCgnICsgbS5hICsgJywnICsgbS5iICsgJywnICsgbS5jICsgJywnICsgbS5kICsgJywnICsgbS5lICsgJywnICsgbS5mICsgJyknO1xuICBub2RlLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywgbXN0cik7XG59XG5cbkNhbnZhcy5wcm90b3R5cGUuX2ZpdFZpZXdwb3J0ID0gZnVuY3Rpb24oY2VudGVyKSB7XG5cbiAgdmFyIHZib3ggPSB0aGlzLnZpZXdib3goKSxcbiAgICAgIG91dGVyID0gdmJveC5vdXRlcixcbiAgICAgIGlubmVyID0gdmJveC5pbm5lcixcbiAgICAgIG5ld1NjYWxlLFxuICAgICAgbmV3Vmlld2JveDtcblxuICAvLyBkaXNwbGF5IHRoZSBjb21wbGV0ZSBkaWFncmFtIHdpdGhvdXQgem9vbWluZyBpbi5cbiAgLy8gaW5zdGVhZCBvZiByZWx5aW5nIG9uIGludGVybmFsIHpvb20sIHdlIHBlcmZvcm0gYVxuICAvLyBoYXJkIHJlc2V0IG9uIHRoZSBjYW52YXMgdmlld2JveCB0byByZWFsaXplIHRoaXNcbiAgLy9cbiAgLy8gaWYgZGlhZ3JhbSBkb2VzIG5vdCBuZWVkIHRvIGJlIHpvb21lZCBpbiwgd2UgZm9jdXMgaXQgYXJvdW5kXG4gIC8vIHRoZSBkaWFncmFtIG9yaWdpbiBpbnN0ZWFkXG5cbiAgaWYgKGlubmVyLnggPj0gMCAmJlxuICAgICAgaW5uZXIueSA+PSAwICYmXG4gICAgICBpbm5lci54ICsgaW5uZXIud2lkdGggPD0gb3V0ZXIud2lkdGggJiZcbiAgICAgIGlubmVyLnkgKyBpbm5lci5oZWlnaHQgPD0gb3V0ZXIuaGVpZ2h0ICYmXG4gICAgICAhY2VudGVyKSB7XG5cbiAgICBuZXdWaWV3Ym94ID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogTWF0aC5tYXgoaW5uZXIud2lkdGggKyBpbm5lci54LCBvdXRlci53aWR0aCksXG4gICAgICBoZWlnaHQ6IE1hdGgubWF4KGlubmVyLmhlaWdodCArIGlubmVyLnksIG91dGVyLmhlaWdodClcbiAgICB9O1xuICB9IGVsc2Uge1xuXG4gICAgbmV3U2NhbGUgPSBNYXRoLm1pbigxLCBvdXRlci53aWR0aCAvIGlubmVyLndpZHRoLCBvdXRlci5oZWlnaHQgLyBpbm5lci5oZWlnaHQpO1xuICAgIG5ld1ZpZXdib3ggPSB7XG4gICAgICB4OiBpbm5lci54ICsgKGNlbnRlciA/IGlubmVyLndpZHRoIC8gMiAtIG91dGVyLndpZHRoIC8gbmV3U2NhbGUgLyAyIDogMCksXG4gICAgICB5OiBpbm5lci55ICsgKGNlbnRlciA/IGlubmVyLmhlaWdodCAvIDIgLSBvdXRlci5oZWlnaHQgLyBuZXdTY2FsZSAvIDIgOiAwKSxcbiAgICAgIHdpZHRoOiBvdXRlci53aWR0aCAvIG5ld1NjYWxlLFxuICAgICAgaGVpZ2h0OiBvdXRlci5oZWlnaHQgLyBuZXdTY2FsZVxuICAgIH07XG4gIH1cblxuICB0aGlzLnZpZXdib3gobmV3Vmlld2JveCk7XG5cbiAgcmV0dXJuIHRoaXMudmlld2JveChmYWxzZSkuc2NhbGU7XG59O1xuXG5cbkNhbnZhcy5wcm90b3R5cGUuX3NldFpvb20gPSBmdW5jdGlvbihzY2FsZSwgY2VudGVyKSB7XG5cbiAgdmFyIHN2ZyA9IHRoaXMuX3N2ZyxcbiAgICAgIHZpZXdwb3J0ID0gdGhpcy5fdmlld3BvcnQ7XG5cbiAgdmFyIG1hdHJpeCA9IHN2Zy5jcmVhdGVTVkdNYXRyaXgoKTtcbiAgdmFyIHBvaW50ID0gc3ZnLmNyZWF0ZVNWR1BvaW50KCk7XG5cbiAgdmFyIGNlbnRlclBvaW50LFxuICAgICAgb3JpZ2luYWxQb2ludCxcbiAgICAgIGN1cnJlbnRNYXRyaXgsXG4gICAgICBzY2FsZU1hdHJpeCxcbiAgICAgIG5ld01hdHJpeDtcblxuICBjdXJyZW50TWF0cml4ID0gdmlld3BvcnQuZ2V0Q1RNKCk7XG5cbiAgdmFyIGN1cnJlbnRTY2FsZSA9IGN1cnJlbnRNYXRyaXguYTtcblxuICBpZiAoY2VudGVyKSB7XG4gICAgY2VudGVyUG9pbnQgPSBhc3NpZ24ocG9pbnQsIGNlbnRlcik7XG5cbiAgICAvLyByZXZlcnQgYXBwbGllZCB2aWV3cG9ydCB0cmFuc2Zvcm1hdGlvbnNcbiAgICBvcmlnaW5hbFBvaW50ID0gY2VudGVyUG9pbnQubWF0cml4VHJhbnNmb3JtKGN1cnJlbnRNYXRyaXguaW52ZXJzZSgpKTtcblxuICAgIC8vIGNyZWF0ZSBzY2FsZSBtYXRyaXhcbiAgICBzY2FsZU1hdHJpeCA9IG1hdHJpeFxuICAgICAgLnRyYW5zbGF0ZShvcmlnaW5hbFBvaW50LngsIG9yaWdpbmFsUG9pbnQueSlcbiAgICAgIC5zY2FsZSgxIC8gY3VycmVudFNjYWxlICogc2NhbGUpXG4gICAgICAudHJhbnNsYXRlKC1vcmlnaW5hbFBvaW50LngsIC1vcmlnaW5hbFBvaW50LnkpO1xuXG4gICAgbmV3TWF0cml4ID0gY3VycmVudE1hdHJpeC5tdWx0aXBseShzY2FsZU1hdHJpeCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3TWF0cml4ID0gbWF0cml4LnNjYWxlKHNjYWxlKTtcbiAgfVxuXG4gIHNldENUTSh0aGlzLl92aWV3cG9ydCwgbmV3TWF0cml4KTtcblxuICByZXR1cm4gbmV3TWF0cml4O1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGNhbnZhc1xuICpcbiAqIEByZXR1cm4ge0RpbWVuc2lvbnN9XG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuZ2V0U2l6ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiB0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGgsXG4gICAgaGVpZ2h0OiB0aGlzLl9jb250YWluZXIuY2xpZW50SGVpZ2h0XG4gIH07XG59O1xuXG5cbi8qKlxuICogUmV0dXJuIHRoZSBhYnNvbHV0ZSBib3VuZGluZyBib3ggZm9yIHRoZSBnaXZlbiBlbGVtZW50XG4gKlxuICogVGhlIGFic29sdXRlIGJvdW5kaW5nIGJveCBtYXkgYmUgdXNlZCB0byBkaXNwbGF5IG92ZXJsYXlzIGluIHRoZVxuICogY2FsbGVycyAoYnJvd3NlcikgY29vcmRpbmF0ZSBzeXN0ZW0gcmF0aGVyIHRoYW4gdGhlIHpvb21lZCBpbi9vdXRcbiAqIGNhbnZhcyBjb29yZGluYXRlcy5cbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50RGVzY3JpcHRvcn0gZWxlbWVudFxuICogQHJldHVybiB7Qm91bmRzfSB0aGUgYWJzb2x1dGUgYm91bmRpbmcgYm94XG4gKi9cbkNhbnZhcy5wcm90b3R5cGUuZ2V0QWJzb2x1dGVCQm94ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgdmJveCA9IHRoaXMudmlld2JveCgpO1xuICB2YXIgYmJveDtcblxuICAvLyBjb25uZWN0aW9uXG4gIC8vIHVzZSBzdmcgYmJveFxuICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcbiAgICB2YXIgZ2Z4ID0gdGhpcy5nZXRHcmFwaGljcyhlbGVtZW50KTtcblxuICAgIGJib3ggPSBnZnguZ2V0QkJveCgpO1xuICB9XG5cbiAgLy8gc2hhcGVzXG4gIC8vIHVzZSBkYXRhXG4gIGVsc2Uge1xuICAgIGJib3ggPSBlbGVtZW50O1xuICB9XG5cbiAgdmFyIHggPSBiYm94LnggKiB2Ym94LnNjYWxlIC0gdmJveC54ICogdmJveC5zY2FsZTtcbiAgdmFyIHkgPSBiYm94LnkgKiB2Ym94LnNjYWxlIC0gdmJveC55ICogdmJveC5zY2FsZTtcblxuICB2YXIgd2lkdGggPSBiYm94LndpZHRoICogdmJveC5zY2FsZTtcbiAgdmFyIGhlaWdodCA9IGJib3guaGVpZ2h0ICogdmJveC5zY2FsZTtcblxuICByZXR1cm4ge1xuICAgIHg6IHgsXG4gICAgeTogeSxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn07XG5cbi8qKlxuICogRmlyZXMgYW4gZXZlbnQgaW4gb3JkZXIgb3RoZXIgbW9kdWxlcyBjYW4gcmVhY3QgdG8gdGhlXG4gKiBjYW52YXMgcmVzaXppbmdcbiAqL1xuQ2FudmFzLnByb3RvdHlwZS5yZXNpemVkID0gZnVuY3Rpb24oKSB7XG5cbiAgLy8gZm9yY2UgcmVjb21wdXRhdGlvbiBvZiB2aWV3IGJveFxuICBkZWxldGUgdGhpcy5fY2FjaGVkVmlld2JveDtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdjYW52YXMucmVzaXplZCcpO1xufTtcbiIsImltcG9ydCB7XG4gIGNyZWF0ZVxufSBmcm9tICcuLi9tb2RlbCc7XG5cbmltcG9ydCB7IGFzc2lnbiB9IGZyb20gJ21pbi1kYXNoJztcblxuLyoqXG4gKiBBIGZhY3RvcnkgZm9yIGRpYWdyYW0tanMgc2hhcGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEVsZW1lbnRGYWN0b3J5KCkge1xuICB0aGlzLl91aWQgPSAxMjtcbn1cblxuXG5FbGVtZW50RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlUm9vdCA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gIHJldHVybiB0aGlzLmNyZWF0ZSgncm9vdCcsIGF0dHJzKTtcbn07XG5cbkVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVMYWJlbCA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gIHJldHVybiB0aGlzLmNyZWF0ZSgnbGFiZWwnLCBhdHRycyk7XG59O1xuXG5FbGVtZW50RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlU2hhcGUgPSBmdW5jdGlvbihhdHRycykge1xuICByZXR1cm4gdGhpcy5jcmVhdGUoJ3NoYXBlJywgYXR0cnMpO1xufTtcblxuRWxlbWVudEZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZUNvbm5lY3Rpb24gPSBmdW5jdGlvbihhdHRycykge1xuICByZXR1cm4gdGhpcy5jcmVhdGUoJ2Nvbm5lY3Rpb24nLCBhdHRycyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIG1vZGVsIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gdHlwZSBhbmRcbiAqIGEgbnVtYmVyIG9mIHByZS1zZXQgYXR0cmlidXRlcy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSAge09iamVjdH0gYXR0cnNcbiAqIEByZXR1cm4ge2Rqcy5tb2RlbC5CYXNlfSB0aGUgbmV3bHkgY3JlYXRlZCBtb2RlbCBpbnN0YW5jZVxuICovXG5FbGVtZW50RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24odHlwZSwgYXR0cnMpIHtcblxuICBhdHRycyA9IGFzc2lnbih7fSwgYXR0cnMgfHwge30pO1xuXG4gIGlmICghYXR0cnMuaWQpIHtcbiAgICBhdHRycy5pZCA9IHR5cGUgKyAnXycgKyAodGhpcy5fdWlkKyspO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZSh0eXBlLCBhdHRycyk7XG59OyIsInZhciBFTEVNRU5UX0lEID0gJ2RhdGEtZWxlbWVudC1pZCc7XG5cbmltcG9ydCB7IGF0dHIgYXMgc3ZnQXR0ciB9IGZyb20gJ3Rpbnktc3ZnJztcblxuXG4vKipcbiAqIEBjbGFzc1xuICpcbiAqIEEgcmVnaXN0cnkgdGhhdCBrZWVwcyB0cmFjayBvZiBhbGwgc2hhcGVzIGluIHRoZSBkaWFncmFtLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFbGVtZW50UmVnaXN0cnkoZXZlbnRCdXMpIHtcbiAgdGhpcy5fZWxlbWVudHMgPSB7fTtcblxuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xufVxuXG5FbGVtZW50UmVnaXN0cnkuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdO1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgcGFpciBvZiAoZWxlbWVudCwgZ2Z4LCAoc2Vjb25kYXJ5R2Z4KSkuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gW3NlY29uZGFyeUdmeF0gb3B0aW9uYWwgb3RoZXIgZWxlbWVudCB0byByZWdpc3RlciwgdG9vXG4gKi9cbkVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oZWxlbWVudCwgZ2Z4LCBzZWNvbmRhcnlHZngpIHtcblxuICB2YXIgaWQgPSBlbGVtZW50LmlkO1xuXG4gIHRoaXMuX3ZhbGlkYXRlSWQoaWQpO1xuXG4gIC8vIGFzc29jaWF0ZSBkb20gbm9kZSB3aXRoIGVsZW1lbnRcbiAgc3ZnQXR0cihnZngsIEVMRU1FTlRfSUQsIGlkKTtcblxuICBpZiAoc2Vjb25kYXJ5R2Z4KSB7XG4gICAgc3ZnQXR0cihzZWNvbmRhcnlHZngsIEVMRU1FTlRfSUQsIGlkKTtcbiAgfVxuXG4gIHRoaXMuX2VsZW1lbnRzW2lkXSA9IHsgZWxlbWVudDogZWxlbWVudCwgZ2Z4OiBnZngsIHNlY29uZGFyeUdmeDogc2Vjb25kYXJ5R2Z4IH07XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYW4gZWxlbWVudCBmcm9tIHRoZSByZWdpc3RyeS5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKi9cbkVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgZWxlbWVudHMgPSB0aGlzLl9lbGVtZW50cyxcbiAgICAgIGlkID0gZWxlbWVudC5pZCB8fCBlbGVtZW50LFxuICAgICAgY29udGFpbmVyID0gaWQgJiYgZWxlbWVudHNbaWRdO1xuXG4gIGlmIChjb250YWluZXIpIHtcblxuICAgIC8vIHVuc2V0IGVsZW1lbnQgaWQgb24gZ2Z4XG4gICAgc3ZnQXR0cihjb250YWluZXIuZ2Z4LCBFTEVNRU5UX0lELCAnJyk7XG5cbiAgICBpZiAoY29udGFpbmVyLnNlY29uZGFyeUdmeCkge1xuICAgICAgc3ZnQXR0cihjb250YWluZXIuc2Vjb25kYXJ5R2Z4LCBFTEVNRU5UX0lELCAnJyk7XG4gICAgfVxuXG4gICAgZGVsZXRlIGVsZW1lbnRzW2lkXTtcbiAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIGlkIG9mIGFuIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gbmV3SWRcbiAqL1xuRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS51cGRhdGVJZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5ld0lkKSB7XG5cbiAgdGhpcy5fdmFsaWRhdGVJZChuZXdJZCk7XG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGVsZW1lbnQgPSB0aGlzLmdldChlbGVtZW50KTtcbiAgfVxuXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2VsZW1lbnQudXBkYXRlSWQnLCB7XG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBuZXdJZDogbmV3SWRcbiAgfSk7XG5cbiAgdmFyIGdmeCA9IHRoaXMuZ2V0R3JhcGhpY3MoZWxlbWVudCksXG4gICAgICBzZWNvbmRhcnlHZnggPSB0aGlzLmdldEdyYXBoaWNzKGVsZW1lbnQsIHRydWUpO1xuXG4gIHRoaXMucmVtb3ZlKGVsZW1lbnQpO1xuXG4gIGVsZW1lbnQuaWQgPSBuZXdJZDtcblxuICB0aGlzLmFkZChlbGVtZW50LCBnZngsIHNlY29uZGFyeUdmeCk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbW9kZWwgZWxlbWVudCBmb3IgYSBnaXZlbiBpZCBvciBncmFwaGljcy5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGVsZW1lbnRSZWdpc3RyeS5nZXQoJ1NvbWVFbGVtZW50SWRfMScpO1xuICogZWxlbWVudFJlZ2lzdHJ5LmdldChnZngpO1xuICpcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xTVkdFbGVtZW50fSBmaWx0ZXIgZm9yIHNlbGVjdGluZyB0aGUgZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge2Rqcy5tb2RlbC5CYXNlfVxuICovXG5FbGVtZW50UmVnaXN0cnkucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKGZpbHRlcikge1xuICB2YXIgaWQ7XG5cbiAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgaWQgPSBmaWx0ZXI7XG4gIH0gZWxzZSB7XG4gICAgaWQgPSBmaWx0ZXIgJiYgc3ZnQXR0cihmaWx0ZXIsIEVMRU1FTlRfSUQpO1xuICB9XG5cbiAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2VsZW1lbnRzW2lkXTtcbiAgcmV0dXJuIGNvbnRhaW5lciAmJiBjb250YWluZXIuZWxlbWVudDtcbn07XG5cbi8qKlxuICogUmV0dXJuIGFsbCBlbGVtZW50cyB0aGF0IG1hdGNoIGEgZ2l2ZW4gZmlsdGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fVxuICovXG5FbGVtZW50UmVnaXN0cnkucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uKGZuKSB7XG5cbiAgdmFyIGZpbHRlcmVkID0gW107XG5cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQsIGdmeCkge1xuICAgIGlmIChmbihlbGVtZW50LCBnZngpKSB7XG4gICAgICBmaWx0ZXJlZC5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGZpbHRlcmVkO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYWxsIHJlbmRlcmVkIG1vZGVsIGVsZW1lbnRzLlxuICpcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn1cbiAqL1xuRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS5nZXRBbGwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGUpIHsgcmV0dXJuIGU7IH0pO1xufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIGRpYWdyYW0gZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqL1xuRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oZm4pIHtcblxuICB2YXIgbWFwID0gdGhpcy5fZWxlbWVudHM7XG5cbiAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgdmFyIGNvbnRhaW5lciA9IG1hcFtpZF0sXG4gICAgICAgIGVsZW1lbnQgPSBjb250YWluZXIuZWxlbWVudCxcbiAgICAgICAgZ2Z4ID0gY29udGFpbmVyLmdmeDtcblxuICAgIHJldHVybiBmbihlbGVtZW50LCBnZngpO1xuICB9KTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBncmFwaGljYWwgcmVwcmVzZW50YXRpb24gb2YgYW4gZWxlbWVudCBvciBpdHMgaWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGVsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcygnU29tZUVsZW1lbnRJZF8xJyk7XG4gKiBlbGVtZW50UmVnaXN0cnkuZ2V0R3JhcGhpY3Mocm9vdEVsZW1lbnQpOyAvLyA8ZyAuLi4+XG4gKlxuICogZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKHJvb3RFbGVtZW50LCB0cnVlKTsgLy8gPHN2ZyAuLi4+XG4gKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfGRqcy5tb2RlbC5CYXNlfSBmaWx0ZXJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlY29uZGFyeT1mYWxzZV0gd2hldGhlciB0byByZXR1cm4gdGhlIHNlY29uZGFyeSBjb25uZWN0ZWQgZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge1NWR0VsZW1lbnR9XG4gKi9cbkVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUuZ2V0R3JhcGhpY3MgPSBmdW5jdGlvbihmaWx0ZXIsIHNlY29uZGFyeSkge1xuICB2YXIgaWQgPSBmaWx0ZXIuaWQgfHwgZmlsdGVyO1xuXG4gIHZhciBjb250YWluZXIgPSB0aGlzLl9lbGVtZW50c1tpZF07XG4gIHJldHVybiBjb250YWluZXIgJiYgKHNlY29uZGFyeSA/IGNvbnRhaW5lci5zZWNvbmRhcnlHZnggOiBjb250YWluZXIuZ2Z4KTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGUgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBnaXZlbiBpZCBhbmQgc2lnbmFscyBhIHByb2JsZW1cbiAqIHdpdGggYW4gZXhjZXB0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuICpcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBpZCBpcyBlbXB0eSBvciBhbHJlYWR5IGFzc2lnbmVkXG4gKi9cbkVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUuX3ZhbGlkYXRlSWQgPSBmdW5jdGlvbihpZCkge1xuICBpZiAoIWlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlbGVtZW50IG11c3QgaGF2ZSBhbiBpZCcpO1xuICB9XG5cbiAgaWYgKHRoaXMuX2VsZW1lbnRzW2lkXSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZWxlbWVudCB3aXRoIGlkICcgKyBpZCArICcgYWxyZWFkeSBhZGRlZCcpO1xuICB9XG59O1xuIiwiaW1wb3J0IHtcbiAgaXNGdW5jdGlvbixcbiAgaXNBcnJheSxcbiAgaXNOdW1iZXIsXG4gIGJpbmQsXG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciBGTl9SRUYgPSAnX19mbic7XG5cbnZhciBERUZBVUxUX1BSSU9SSVRZID0gMTAwMDtcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG4vKipcbiAqIEEgZ2VuZXJhbCBwdXJwb3NlIGV2ZW50IGJ1cy5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBpcyB1c2VkIHRvIGNvbW11bmljYXRlIGFjcm9zcyBhIGRpYWdyYW0gaW5zdGFuY2UuXG4gKiBPdGhlciBwYXJ0cyBvZiBhIGRpYWdyYW0gY2FuIHVzZSBpdCB0byBsaXN0ZW4gdG8gYW5kIGJyb2FkY2FzdCBldmVudHMuXG4gKlxuICpcbiAqICMjIFJlZ2lzdGVyaW5nIGZvciBFdmVudHNcbiAqXG4gKiBUaGUgZXZlbnQgYnVzIHByb3ZpZGVzIHRoZSB7QGxpbmsgRXZlbnRCdXMjb259IGFuZCB7QGxpbmsgRXZlbnRCdXMjb25jZX1cbiAqIG1ldGhvZHMgdG8gcmVnaXN0ZXIgZm9yIGV2ZW50cy4ge0BsaW5rIEV2ZW50QnVzI29mZn0gY2FuIGJlIHVzZWQgdG9cbiAqIHJlbW92ZSBldmVudCByZWdpc3RyYXRpb25zLiBMaXN0ZW5lcnMgcmVjZWl2ZSBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgRXZlbnR9XG4gKiBhcyB0aGUgZmlyc3QgYXJndW1lbnQuIEl0IGFsbG93cyB0aGVtIHRvIGhvb2sgaW50byB0aGUgZXZlbnQgZXhlY3V0aW9uLlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqXG4gKiAvLyBsaXN0ZW4gZm9yIGV2ZW50XG4gKiBldmVudEJ1cy5vbignZm9vJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAqXG4gKiAgIC8vIGFjY2VzcyBldmVudCB0eXBlXG4gKiAgIGV2ZW50LnR5cGU7IC8vICdmb28nXG4gKlxuICogICAvLyBzdG9wIHByb3BhZ2F0aW9uIHRvIG90aGVyIGxpc3RlbmVyc1xuICogICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAqXG4gKiAgIC8vIHByZXZlbnQgZXZlbnQgZGVmYXVsdFxuICogICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICogfSk7XG4gKlxuICogLy8gbGlzdGVuIGZvciBldmVudCB3aXRoIGN1c3RvbSBwYXlsb2FkXG4gKiBldmVudEJ1cy5vbignYmFyJywgZnVuY3Rpb24oZXZlbnQsIHBheWxvYWQpIHtcbiAqICAgY29uc29sZS5sb2cocGF5bG9hZCk7XG4gKiB9KTtcbiAqXG4gKiAvLyBsaXN0ZW4gZm9yIGV2ZW50IHJldHVybmluZyB2YWx1ZVxuICogZXZlbnRCdXMub24oJ2Zvb2JhcicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gKlxuICogICAvLyBzdG9wIGV2ZW50IHByb3BhZ2F0aW9uICsgcHJldmVudCBkZWZhdWx0XG4gKiAgIHJldHVybiBmYWxzZTtcbiAqXG4gKiAgIC8vIHN0b3AgZXZlbnQgcHJvcGFnYXRpb24gKyByZXR1cm4gY3VzdG9tIHJlc3VsdFxuICogICByZXR1cm4ge1xuICogICAgIGNvbXBsZXg6ICdsaXN0ZW5pbmcgcmVzdWx0J1xuICogICB9O1xuICogfSk7XG4gKlxuICpcbiAqIC8vIGxpc3RlbiB3aXRoIGN1c3RvbSBwcmlvcml0eSAoZGVmYXVsdD0xMDAwLCBoaWdoZXIgaXMgYmV0dGVyKVxuICogZXZlbnRCdXMub24oJ3ByaW9yaXR5Zm9vJywgMTUwMCwgZnVuY3Rpb24oZXZlbnQpIHtcbiAqICAgY29uc29sZS5sb2coJ2ludm9rZWQgZmlyc3QhJyk7XG4gKiB9KTtcbiAqXG4gKlxuICogLy8gbGlzdGVuIGZvciBldmVudCBhbmQgcGFzcyB0aGUgY29udGV4dCAoYHRoaXNgKVxuICogZXZlbnRCdXMub24oJ2Zvb2JhcicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gKiAgIHRoaXMuZm9vKCk7XG4gKiB9LCB0aGlzKTtcbiAqIGBgYFxuICpcbiAqXG4gKiAjIyBFbWl0dGluZyBFdmVudHNcbiAqXG4gKiBFdmVudHMgY2FuIGJlIGVtaXR0ZWQgdmlhIHRoZSBldmVudCBidXMgdXNpbmcge0BsaW5rIEV2ZW50QnVzI2ZpcmV9LlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqXG4gKiAvLyBmYWxzZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVmYXVsdCBhY3Rpb25cbiAqIC8vIHdhcyBwcmV2ZW50ZWQgYnkgbGlzdGVuZXJzXG4gKiBpZiAoZXZlbnRCdXMuZmlyZSgnZm9vJykgPT09IGZhbHNlKSB7XG4gKiAgIGNvbnNvbGUubG9nKCdkZWZhdWx0IGhhcyBiZWVuIHByZXZlbnRlZCEnKTtcbiAqIH07XG4gKlxuICpcbiAqIC8vIGN1c3RvbSBhcmdzICsgcmV0dXJuIHZhbHVlIGxpc3RlbmVyXG4gKiBldmVudEJ1cy5vbignc3VtJywgZnVuY3Rpb24oZXZlbnQsIGEsIGIpIHtcbiAqICAgcmV0dXJuIGEgKyBiO1xuICogfSk7XG4gKlxuICogLy8geW91IGNhbiBwYXNzIGN1c3RvbSBhcmd1bWVudHMgKyByZXRyaWV2ZSByZXN1bHQgdmFsdWVzLlxuICogdmFyIHN1bSA9IGV2ZW50QnVzLmZpcmUoJ3N1bScsIDEsIDIpO1xuICogY29uc29sZS5sb2coc3VtKTsgLy8gM1xuICogYGBgXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEV2ZW50QnVzKCkge1xuICB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcblxuICAvLyBjbGVhbnVwIG9uIGRlc3Ryb3kgb24gbG93ZXN0IHByaW9yaXR5IHRvIGFsbG93XG4gIC8vIG1lc3NhZ2UgcGFzc2luZyB1bnRpbCB0aGUgYml0dGVyIGVuZFxuICB0aGlzLm9uKCdkaWFncmFtLmRlc3Ryb3knLCAxLCB0aGlzLl9kZXN0cm95LCB0aGlzKTtcbn1cblxuXG4vKipcbiAqIFJlZ2lzdGVyIGFuIGV2ZW50IGxpc3RlbmVyIGZvciBldmVudHMgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cbiAqXG4gKiBUaGUgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIHdpdGggYGV2ZW50LCAuLi5hZGRpdGlvbmFsQXJndW1lbnRzYFxuICogdGhhdCBoYXZlIGJlZW4gcGFzc2VkIHRvIHtAbGluayBFdmVudEJ1cyNmaXJlfS5cbiAqXG4gKiBSZXR1cm5pbmcgZmFsc2UgZnJvbSBhIGxpc3RlbmVyIHdpbGwgcHJldmVudCB0aGUgZXZlbnRzIGRlZmF1bHQgYWN0aW9uXG4gKiAoaWYgYW55IGlzIHNwZWNpZmllZCkuIFRvIHN0b3AgYW4gZXZlbnQgZnJvbSBiZWluZyBwcm9jZXNzZWQgZnVydGhlciBpblxuICogb3RoZXIgbGlzdGVuZXJzIGV4ZWN1dGUge0BsaW5rIEV2ZW50I3N0b3BQcm9wYWdhdGlvbn0uXG4gKlxuICogUmV0dXJuaW5nIGFueXRoaW5nIGJ1dCBgdW5kZWZpbmVkYCBmcm9tIGEgbGlzdGVuZXIgd2lsbCBzdG9wIHRoZSBsaXN0ZW5lciBwcm9wYWdhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheTxzdHJpbmc+fSBldmVudHNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJpb3JpdHk9MTAwMF0gdGhlIHByaW9yaXR5IGluIHdoaWNoIHRoaXMgbGlzdGVuZXIgaXMgY2FsbGVkLCBsYXJnZXIgaXMgaGlnaGVyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtPYmplY3R9IFt0aGF0XSBQYXNzIGNvbnRleHQgKGB0aGlzYCkgdG8gdGhlIGNhbGxiYWNrXG4gKi9cbkV2ZW50QnVzLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKGV2ZW50cywgcHJpb3JpdHksIGNhbGxiYWNrLCB0aGF0KSB7XG5cbiAgZXZlbnRzID0gaXNBcnJheShldmVudHMpID8gZXZlbnRzIDogWyBldmVudHMgXTtcblxuICBpZiAoaXNGdW5jdGlvbihwcmlvcml0eSkpIHtcbiAgICB0aGF0ID0gY2FsbGJhY2s7XG4gICAgY2FsbGJhY2sgPSBwcmlvcml0eTtcbiAgICBwcmlvcml0eSA9IERFRkFVTFRfUFJJT1JJVFk7XG4gIH1cblxuICBpZiAoIWlzTnVtYmVyKHByaW9yaXR5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJpb3JpdHkgbXVzdCBiZSBhIG51bWJlcicpO1xuICB9XG5cbiAgdmFyIGFjdHVhbENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgaWYgKHRoYXQpIHtcbiAgICBhY3R1YWxDYWxsYmFjayA9IGJpbmQoY2FsbGJhY2ssIHRoYXQpO1xuXG4gICAgLy8gbWFrZSBzdXJlIHdlIHJlbWVtYmVyIGFuZCBhcmUgYWJsZSB0byByZW1vdmVcbiAgICAvLyBib3VuZCBjYWxsYmFja3MgdmlhIHtAbGluayAjb2ZmfSB1c2luZyB0aGUgb3JpZ2luYWxcbiAgICAvLyBjYWxsYmFja1xuICAgIGFjdHVhbENhbGxiYWNrW0ZOX1JFRl0gPSBjYWxsYmFja1tGTl9SRUZdIHx8IGNhbGxiYWNrO1xuICB9XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGUpIHtcbiAgICBzZWxmLl9hZGRMaXN0ZW5lcihlLCB7XG4gICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICBjYWxsYmFjazogYWN0dWFsQ2FsbGJhY2ssXG4gICAgICBuZXh0OiBudWxsXG4gICAgfSk7XG4gIH0pO1xufTtcblxuXG4vKipcbiAqIFJlZ2lzdGVyIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgaXMgZXhlY3V0ZWQgb25seSBvbmNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCB0aGUgZXZlbnQgbmFtZSB0byByZWdpc3RlciBmb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJpb3JpdHk9MTAwMF0gdGhlIHByaW9yaXR5IGluIHdoaWNoIHRoaXMgbGlzdGVuZXIgaXMgY2FsbGVkLCBsYXJnZXIgaXMgaGlnaGVyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayB0aGUgY2FsbGJhY2sgdG8gZXhlY3V0ZVxuICogQHBhcmFtIHtPYmplY3R9IFt0aGF0XSBQYXNzIGNvbnRleHQgKGB0aGlzYCkgdG8gdGhlIGNhbGxiYWNrXG4gKi9cbkV2ZW50QnVzLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24oZXZlbnQsIHByaW9yaXR5LCBjYWxsYmFjaywgdGhhdCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgaWYgKGlzRnVuY3Rpb24ocHJpb3JpdHkpKSB7XG4gICAgdGhhdCA9IGNhbGxiYWNrO1xuICAgIGNhbGxiYWNrID0gcHJpb3JpdHk7XG4gICAgcHJpb3JpdHkgPSBERUZBVUxUX1BSSU9SSVRZO1xuICB9XG5cbiAgaWYgKCFpc051bWJlcihwcmlvcml0eSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3ByaW9yaXR5IG11c3QgYmUgYSBudW1iZXInKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdyYXBwZWRDYWxsYmFjaygpIHtcbiAgICB2YXIgcmVzdWx0ID0gY2FsbGJhY2suYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcblxuICAgIHNlbGYub2ZmKGV2ZW50LCB3cmFwcGVkQ2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIG1ha2Ugc3VyZSB3ZSByZW1lbWJlciBhbmQgYXJlIGFibGUgdG8gcmVtb3ZlXG4gIC8vIGJvdW5kIGNhbGxiYWNrcyB2aWEge0BsaW5rICNvZmZ9IHVzaW5nIHRoZSBvcmlnaW5hbFxuICAvLyBjYWxsYmFja1xuICB3cmFwcGVkQ2FsbGJhY2tbRk5fUkVGXSA9IGNhbGxiYWNrO1xuXG4gIHRoaXMub24oZXZlbnQsIHByaW9yaXR5LCB3cmFwcGVkQ2FsbGJhY2spO1xufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgZXZlbnQgbGlzdGVuZXJzIGJ5IGV2ZW50IGFuZCBjYWxsYmFjay5cbiAqXG4gKiBJZiBubyBjYWxsYmFjayBpcyBnaXZlbiwgYWxsIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCBuYW1lIGFyZSBiZWluZyByZW1vdmVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PHN0cmluZz59IGV2ZW50c1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXVxuICovXG5FdmVudEJ1cy5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24oZXZlbnRzLCBjYWxsYmFjaykge1xuXG4gIGV2ZW50cyA9IGlzQXJyYXkoZXZlbnRzKSA/IGV2ZW50cyA6IFsgZXZlbnRzIF07XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgc2VsZi5fcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGNhbGxiYWNrKTtcbiAgfSk7XG5cbn07XG5cblxuLyoqXG4gKiBDcmVhdGUgYW4gRXZlbnRCdXMgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IGV2ZW50LCByZWNvZ25pemVkIGJ5IHRoZSBldmVudEJ1c1xuICovXG5FdmVudEJ1cy5wcm90b3R5cGUuY3JlYXRlRXZlbnQgPSBmdW5jdGlvbihkYXRhKSB7XG4gIHZhciBldmVudCA9IG5ldyBJbnRlcm5hbEV2ZW50KCk7XG5cbiAgZXZlbnQuaW5pdChkYXRhKTtcblxuICByZXR1cm4gZXZlbnQ7XG59O1xuXG5cbi8qKlxuICogRmlyZXMgYSBuYW1lZCBldmVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIGZpcmUgZXZlbnQgYnkgbmFtZVxuICogZXZlbnRzLmZpcmUoJ2ZvbycpO1xuICpcbiAqIC8vIGZpcmUgZXZlbnQgb2JqZWN0IHdpdGggbmVzdGVkIHR5cGVcbiAqIHZhciBldmVudCA9IHsgdHlwZTogJ2ZvbycgfTtcbiAqIGV2ZW50cy5maXJlKGV2ZW50KTtcbiAqXG4gKiAvLyBmaXJlIGV2ZW50IHdpdGggZXhwbGljaXQgdHlwZVxuICogdmFyIGV2ZW50ID0geyB4OiAxMCwgeTogMjAgfTtcbiAqIGV2ZW50cy5maXJlKCdlbGVtZW50Lm1vdmVkJywgZXZlbnQpO1xuICpcbiAqIC8vIHBhc3MgYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gdGhlIGV2ZW50XG4gKiBldmVudHMub24oJ2ZvbycsIGZ1bmN0aW9uKGV2ZW50LCBiYXIpIHtcbiAqICAgYWxlcnQoYmFyKTtcbiAqIH0pO1xuICpcbiAqIGV2ZW50cy5maXJlKHsgdHlwZTogJ2ZvbycgfSwgJ0kgYW0gYmFyIScpO1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gdGhlIG9wdGlvbmFsIGV2ZW50IG5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZXZlbnRdIHRoZSBldmVudCBvYmplY3RcbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRoZSBldmVudHMgcmV0dXJuIHZhbHVlLCBpZiBzcGVjaWZpZWQgb3IgZmFsc2UgaWYgdGhlXG4gKiAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGFjdGlvbiB3YXMgcHJldmVudGVkIGJ5IGxpc3RlbmVyc1xuICovXG5FdmVudEJ1cy5wcm90b3R5cGUuZmlyZSA9IGZ1bmN0aW9uKHR5cGUsIGRhdGEpIHtcbiAgdmFyIGV2ZW50LFxuICAgICAgZmlyc3RMaXN0ZW5lcixcbiAgICAgIHJldHVyblZhbHVlLFxuICAgICAgYXJncztcblxuICBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBkYXRhID0gdHlwZTtcbiAgICB0eXBlID0gZGF0YS50eXBlO1xuICB9XG5cbiAgaWYgKCF0eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdubyBldmVudCB0eXBlIHNwZWNpZmllZCcpO1xuICB9XG5cbiAgZmlyc3RMaXN0ZW5lciA9IHRoaXMuX2xpc3RlbmVyc1t0eXBlXTtcblxuICBpZiAoIWZpcnN0TGlzdGVuZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyB3ZSBtYWtlIHN1cmUgd2UgZmlyZSBpbnN0YW5jZXMgb2Ygb3VyIGhvbWUgbWFkZVxuICAvLyBldmVudHMgaGVyZS4gV2Ugd3JhcCB0aGVtIG9ubHkgb25jZSwgdGhvdWdoXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgSW50ZXJuYWxFdmVudCkge1xuXG4gICAgLy8gd2UgYXJlIGZpbmUsIHdlIGFscmVhZCBoYXZlIGFuIGV2ZW50XG4gICAgZXZlbnQgPSBkYXRhO1xuICB9IGVsc2Uge1xuICAgIGV2ZW50ID0gdGhpcy5jcmVhdGVFdmVudChkYXRhKTtcbiAgfVxuXG4gIC8vIGVuc3VyZSB3ZSBwYXNzIHRoZSBldmVudCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyXG4gIGFyZ3NbMF0gPSBldmVudDtcblxuICAvLyBvcmlnaW5hbCBldmVudCB0eXBlIChpbiBjYXNlIHdlIGRlbGVnYXRlKVxuICB2YXIgb3JpZ2luYWxUeXBlID0gZXZlbnQudHlwZTtcblxuICAvLyB1cGRhdGUgZXZlbnQgdHlwZSBiZWZvcmUgZGVsZWdhdGlvblxuICBpZiAodHlwZSAhPT0gb3JpZ2luYWxUeXBlKSB7XG4gICAgZXZlbnQudHlwZSA9IHR5cGU7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVyblZhbHVlID0gdGhpcy5faW52b2tlTGlzdGVuZXJzKGV2ZW50LCBhcmdzLCBmaXJzdExpc3RlbmVyKTtcbiAgfSBmaW5hbGx5IHtcblxuICAgIC8vIHJlc2V0IGV2ZW50IHR5cGUgYWZ0ZXIgZGVsZWdhdGlvblxuICAgIGlmICh0eXBlICE9PSBvcmlnaW5hbFR5cGUpIHtcbiAgICAgIGV2ZW50LnR5cGUgPSBvcmlnaW5hbFR5cGU7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IHRoZSByZXR1cm4gdmFsdWUgdG8gZmFsc2UgaWYgdGhlIGV2ZW50IGRlZmF1bHRcbiAgLy8gZ290IHByZXZlbnRlZCBhbmQgbm8gb3RoZXIgcmV0dXJuIHZhbHVlIGV4aXN0c1xuICBpZiAocmV0dXJuVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgcmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiByZXR1cm5WYWx1ZTtcbn07XG5cblxuRXZlbnRCdXMucHJvdG90eXBlLmhhbmRsZUVycm9yID0gZnVuY3Rpb24oZXJyb3IpIHtcbiAgcmV0dXJuIHRoaXMuZmlyZSgnZXJyb3InLCB7IGVycm9yOiBlcnJvciB9KSA9PT0gZmFsc2U7XG59O1xuXG5cbkV2ZW50QnVzLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcbn07XG5cbkV2ZW50QnVzLnByb3RvdHlwZS5faW52b2tlTGlzdGVuZXJzID0gZnVuY3Rpb24oZXZlbnQsIGFyZ3MsIGxpc3RlbmVyKSB7XG5cbiAgdmFyIHJldHVyblZhbHVlO1xuXG4gIHdoaWxlIChsaXN0ZW5lcikge1xuXG4gICAgLy8gaGFuZGxlIHN0b3BwZWQgcHJvcGFnYXRpb25cbiAgICBpZiAoZXZlbnQuY2FuY2VsQnViYmxlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm5WYWx1ZSA9IHRoaXMuX2ludm9rZUxpc3RlbmVyKGV2ZW50LCBhcmdzLCBsaXN0ZW5lcik7XG5cbiAgICBsaXN0ZW5lciA9IGxpc3RlbmVyLm5leHQ7XG4gIH1cblxuICByZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuXG5FdmVudEJ1cy5wcm90b3R5cGUuX2ludm9rZUxpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnQsIGFyZ3MsIGxpc3RlbmVyKSB7XG5cbiAgdmFyIHJldHVyblZhbHVlO1xuXG4gIHRyeSB7XG5cbiAgICAvLyByZXR1cm5pbmcgZmFsc2UgcHJldmVudHMgdGhlIGRlZmF1bHQgYWN0aW9uXG4gICAgcmV0dXJuVmFsdWUgPSBpbnZva2VGdW5jdGlvbihsaXN0ZW5lci5jYWxsYmFjaywgYXJncyk7XG5cbiAgICAvLyBzdG9wIHByb3BhZ2F0aW9uIG9uIHJldHVybiB2YWx1ZVxuICAgIGlmIChyZXR1cm5WYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLy8gcHJldmVudCBkZWZhdWx0IG9uIHJldHVybiBmYWxzZVxuICAgIGlmIChyZXR1cm5WYWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKCF0aGlzLmhhbmRsZUVycm9yKGUpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCd1bmhhbmRsZWQgZXJyb3IgaW4gZXZlbnQgbGlzdGVuZXInKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG5cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuLypcbiAqIEFkZCBuZXcgbGlzdGVuZXIgd2l0aCBhIGNlcnRhaW4gcHJpb3JpdHkgdG8gdGhlIGxpc3RcbiAqIG9mIGxpc3RlbmVycyAoZm9yIHRoZSBnaXZlbiBldmVudCkuXG4gKlxuICogVGhlIHNlbWFudGljcyBvZiBsaXN0ZW5lciByZWdpc3RyYXRpb24gLyBsaXN0ZW5lciBleGVjdXRpb24gYXJlXG4gKiBmaXJzdCByZWdpc3RlciwgZmlyc3Qgc2VydmU6IE5ldyBsaXN0ZW5lcnMgd2lsbCBhbHdheXMgYmUgaW5zZXJ0ZWRcbiAqIGFmdGVyIGV4aXN0aW5nIGxpc3RlbmVycyB3aXRoIHRoZSBzYW1lIHByaW9yaXR5LlxuICpcbiAqIEV4YW1wbGU6IEluc2VydGluZyB0d28gbGlzdGVuZXJzIHdpdGggcHJpb3JpdHkgMTAwMCBhbmQgMTMwMFxuICpcbiAqICAgICogYmVmb3JlOiBbIDE1MDAsIDE1MDAsIDEwMDAsIDEwMDAgXVxuICogICAgKiBhZnRlcjogWyAxNTAwLCAxNTAwLCAobmV3PTEzMDApLCAxMDAwLCAxMDAwLCAobmV3PTEwMDApIF1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBsaXN0ZW5lciB7IHByaW9yaXR5LCBjYWxsYmFjayB9XG4gKi9cbkV2ZW50QnVzLnByb3RvdHlwZS5fYWRkTGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCwgbmV3TGlzdGVuZXIpIHtcblxuICB2YXIgbGlzdGVuZXIgPSB0aGlzLl9nZXRMaXN0ZW5lcnMoZXZlbnQpLFxuICAgICAgcHJldmlvdXNMaXN0ZW5lcjtcblxuICAvLyBubyBwcmlvciBsaXN0ZW5lcnNcbiAgaWYgKCFsaXN0ZW5lcikge1xuICAgIHRoaXMuX3NldExpc3RlbmVycyhldmVudCwgbmV3TGlzdGVuZXIpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZW5zdXJlIHdlIG9yZGVyIGxpc3RlbmVycyBieSBwcmlvcml0eSBmcm9tXG4gIC8vIDAgKGhpZ2gpIHRvIG4gPiAwIChsb3cpXG4gIHdoaWxlIChsaXN0ZW5lcikge1xuXG4gICAgaWYgKGxpc3RlbmVyLnByaW9yaXR5IDwgbmV3TGlzdGVuZXIucHJpb3JpdHkpIHtcblxuICAgICAgbmV3TGlzdGVuZXIubmV4dCA9IGxpc3RlbmVyO1xuXG4gICAgICBpZiAocHJldmlvdXNMaXN0ZW5lcikge1xuICAgICAgICBwcmV2aW91c0xpc3RlbmVyLm5leHQgPSBuZXdMaXN0ZW5lcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3NldExpc3RlbmVycyhldmVudCwgbmV3TGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJldmlvdXNMaXN0ZW5lciA9IGxpc3RlbmVyO1xuICAgIGxpc3RlbmVyID0gbGlzdGVuZXIubmV4dDtcbiAgfVxuXG4gIC8vIGFkZCBuZXcgbGlzdGVuZXIgdG8gYmFja1xuICBwcmV2aW91c0xpc3RlbmVyLm5leHQgPSBuZXdMaXN0ZW5lcjtcbn07XG5cblxuRXZlbnRCdXMucHJvdG90eXBlLl9nZXRMaXN0ZW5lcnMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLl9saXN0ZW5lcnNbbmFtZV07XG59O1xuXG5FdmVudEJ1cy5wcm90b3R5cGUuX3NldExpc3RlbmVycyA9IGZ1bmN0aW9uKG5hbWUsIGxpc3RlbmVyKSB7XG4gIHRoaXMuX2xpc3RlbmVyc1tuYW1lXSA9IGxpc3RlbmVyO1xufTtcblxuRXZlbnRCdXMucHJvdG90eXBlLl9yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50LCBjYWxsYmFjaykge1xuXG4gIHZhciBsaXN0ZW5lciA9IHRoaXMuX2dldExpc3RlbmVycyhldmVudCksXG4gICAgICBuZXh0TGlzdGVuZXIsXG4gICAgICBwcmV2aW91c0xpc3RlbmVyLFxuICAgICAgbGlzdGVuZXJDYWxsYmFjaztcblxuICBpZiAoIWNhbGxiYWNrKSB7XG5cbiAgICAvLyBjbGVhciBsaXN0ZW5lcnNcbiAgICB0aGlzLl9zZXRMaXN0ZW5lcnMoZXZlbnQsIG51bGwpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd2hpbGUgKGxpc3RlbmVyKSB7XG5cbiAgICBuZXh0TGlzdGVuZXIgPSBsaXN0ZW5lci5uZXh0O1xuXG4gICAgbGlzdGVuZXJDYWxsYmFjayA9IGxpc3RlbmVyLmNhbGxiYWNrO1xuXG4gICAgaWYgKGxpc3RlbmVyQ2FsbGJhY2sgPT09IGNhbGxiYWNrIHx8IGxpc3RlbmVyQ2FsbGJhY2tbRk5fUkVGXSA9PT0gY2FsbGJhY2spIHtcbiAgICAgIGlmIChwcmV2aW91c0xpc3RlbmVyKSB7XG4gICAgICAgIHByZXZpb3VzTGlzdGVuZXIubmV4dCA9IG5leHRMaXN0ZW5lcjtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgLy8gbmV3IGZpcnN0IGxpc3RlbmVyXG4gICAgICAgIHRoaXMuX3NldExpc3RlbmVycyhldmVudCwgbmV4dExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcmV2aW91c0xpc3RlbmVyID0gbGlzdGVuZXI7XG4gICAgbGlzdGVuZXIgPSBuZXh0TGlzdGVuZXI7XG4gIH1cbn07XG5cbi8qKlxuICogQSBldmVudCB0aGF0IGlzIGVtaXR0ZWQgdmlhIHRoZSBldmVudCBidXMuXG4gKi9cbmZ1bmN0aW9uIEludGVybmFsRXZlbnQoKSB7IH1cblxuSW50ZXJuYWxFdmVudC5wcm90b3R5cGUuc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbn07XG5cbkludGVybmFsRXZlbnQucHJvdG90eXBlLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG59O1xuXG5JbnRlcm5hbEV2ZW50LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oZGF0YSkge1xuICBhc3NpZ24odGhpcywgZGF0YSB8fCB7fSk7XG59O1xuXG5cbi8qKlxuICogSW52b2tlIGZ1bmN0aW9uLiBCZSBmYXN0Li4uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gYXJnc1xuICpcbiAqIEByZXR1cm4ge0FueX1cbiAqL1xuZnVuY3Rpb24gaW52b2tlRnVuY3Rpb24oZm4sIGFyZ3MpIHtcbiAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xufVxuIiwiaW1wb3J0IHtcbiAgZm9yRWFjaCxcbiAgcmVkdWNlXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0Q2hpbGRyZW4sXG4gIGdldFZpc3VhbFxufSBmcm9tICcuLi91dGlsL0dyYXBoaWNzVXRpbCc7XG5cbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gJy4uL3V0aWwvU3ZnVHJhbnNmb3JtVXRpbCc7XG5cbmltcG9ydCB7IGNsZWFyIGFzIGRvbUNsZWFyIH0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY2xhc3NlcyBhcyBzdmdDbGFzc2VzLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgaXNGcmFtZUVsZW1lbnRcbn0gZnJvbSAnLi4vdXRpbC9FbGVtZW50cyc7XG5cbi8qKlxuICogQSBmYWN0b3J5IHRoYXQgY3JlYXRlcyBncmFwaGljYWwgZWxlbWVudHNcbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtFbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHcmFwaGljc0ZhY3RvcnkoZXZlbnRCdXMsIGVsZW1lbnRSZWdpc3RyeSkge1xuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG59XG5cbkdyYXBoaWNzRmFjdG9yeS4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnICwgJ2VsZW1lbnRSZWdpc3RyeScgXTtcblxuXG5HcmFwaGljc0ZhY3RvcnkucHJvdG90eXBlLl9nZXRDaGlsZHJlbkNvbnRhaW5lciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICB2YXIgZ2Z4ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGVsZW1lbnQpO1xuXG4gIHZhciBjaGlsZHJlbkdmeDtcblxuICAvLyByb290IGVsZW1lbnRcbiAgaWYgKCFlbGVtZW50LnBhcmVudCkge1xuICAgIGNoaWxkcmVuR2Z4ID0gZ2Z4O1xuICB9IGVsc2Uge1xuICAgIGNoaWxkcmVuR2Z4ID0gZ2V0Q2hpbGRyZW4oZ2Z4KTtcbiAgICBpZiAoIWNoaWxkcmVuR2Z4KSB7XG4gICAgICBjaGlsZHJlbkdmeCA9IHN2Z0NyZWF0ZSgnZycpO1xuICAgICAgc3ZnQ2xhc3NlcyhjaGlsZHJlbkdmeCkuYWRkKCdkanMtY2hpbGRyZW4nKTtcblxuICAgICAgc3ZnQXBwZW5kKGdmeC5wYXJlbnROb2RlLCBjaGlsZHJlbkdmeCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuR2Z4O1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZWxlbWVudCBhbmQgcmV0dXJucyB0aGVcbiAqIGNsZWFyZWQgdmlzdWFsICh0aGUgPGcgY2xhc3M9XCJkanMtdmlzdWFsXCIgLz4gZWxlbWVudCkuXG4gKi9cbkdyYXBoaWNzRmFjdG9yeS5wcm90b3R5cGUuX2NsZWFyID0gZnVuY3Rpb24oZ2Z4KSB7XG4gIHZhciB2aXN1YWwgPSBnZXRWaXN1YWwoZ2Z4KTtcblxuICBkb21DbGVhcih2aXN1YWwpO1xuXG4gIHJldHVybiB2aXN1YWw7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBnZnggY29udGFpbmVyIGZvciBzaGFwZXMgYW5kIGNvbm5lY3Rpb25zXG4gKlxuICogVGhlIGxheW91dCBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIDxnIGNsYXNzPVwiZGpzLWdyb3VwXCI+XG4gKlxuICogICA8IS0tIHRoZSBnZnggLS0+XG4gKiAgIDxnIGNsYXNzPVwiZGpzLWVsZW1lbnQgZGpzLShzaGFwZXxjb25uZWN0aW9ufGZyYW1lKVwiPlxuICogICAgIDxnIGNsYXNzPVwiZGpzLXZpc3VhbFwiPlxuICogICAgICAgPCEtLSB0aGUgcmVuZGVyZXIgZHJhd3MgaW4gaGVyZSAtLT5cbiAqICAgICA8L2c+XG4gKlxuICogICAgIDwhLS0gZXh0ZW5zaW9ucyAob3ZlcmxheXMsIGNsaWNrIGJveCwgLi4uKSBnb2VzIGhlcmVcbiAqICAgPC9nPlxuICpcbiAqICAgPCEtLSB0aGUgZ2Z4IGNoaWxkIG5vZGVzIC0tPlxuICogICA8ZyBjbGFzcz1cImRqcy1jaGlsZHJlblwiPjwvZz5cbiAqIDwvZz5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudCwgaS5lLiBzaGFwZSB8IGNvbm5lY3Rpb25cbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gW2NoaWxkcmVuR2Z4XVxuICogQHBhcmFtIHtudW1iZXJ9IFtwYXJlbnRJbmRleF0gcG9zaXRpb24gdG8gY3JlYXRlIGNvbnRhaW5lciBpbiBwYXJlbnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRnJhbWVdIGlzIGZyYW1lIGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtTVkdFbGVtZW50fVxuICovXG5HcmFwaGljc0ZhY3RvcnkucHJvdG90eXBlLl9jcmVhdGVDb250YWluZXIgPSBmdW5jdGlvbihcbiAgICB0eXBlLCBjaGlsZHJlbkdmeCwgcGFyZW50SW5kZXgsIGlzRnJhbWVcbikge1xuICB2YXIgb3V0ZXJHZnggPSBzdmdDcmVhdGUoJ2cnKTtcbiAgc3ZnQ2xhc3NlcyhvdXRlckdmeCkuYWRkKCdkanMtZ3JvdXAnKTtcblxuICAvLyBpbnNlcnQgbm9kZSBhdCBwb3NpdGlvblxuICBpZiAodHlwZW9mIHBhcmVudEluZGV4ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHByZXBlbmRUbyhvdXRlckdmeCwgY2hpbGRyZW5HZngsIGNoaWxkcmVuR2Z4LmNoaWxkTm9kZXNbcGFyZW50SW5kZXhdKTtcbiAgfSBlbHNlIHtcbiAgICBzdmdBcHBlbmQoY2hpbGRyZW5HZngsIG91dGVyR2Z4KTtcbiAgfVxuXG4gIHZhciBnZnggPSBzdmdDcmVhdGUoJ2cnKTtcbiAgc3ZnQ2xhc3NlcyhnZngpLmFkZCgnZGpzLWVsZW1lbnQnKTtcbiAgc3ZnQ2xhc3NlcyhnZngpLmFkZCgnZGpzLScgKyB0eXBlKTtcblxuICBpZiAoaXNGcmFtZSkge1xuICAgIHN2Z0NsYXNzZXMoZ2Z4KS5hZGQoJ2Rqcy1mcmFtZScpO1xuICB9XG5cbiAgc3ZnQXBwZW5kKG91dGVyR2Z4LCBnZngpO1xuXG4gIC8vIGNyZWF0ZSB2aXN1YWxcbiAgdmFyIHZpc3VhbCA9IHN2Z0NyZWF0ZSgnZycpO1xuICBzdmdDbGFzc2VzKHZpc3VhbCkuYWRkKCdkanMtdmlzdWFsJyk7XG5cbiAgc3ZnQXBwZW5kKGdmeCwgdmlzdWFsKTtcblxuICByZXR1cm4gZ2Z4O1xufTtcblxuR3JhcGhpY3NGYWN0b3J5LnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbih0eXBlLCBlbGVtZW50LCBwYXJlbnRJbmRleCkge1xuICB2YXIgY2hpbGRyZW5HZnggPSB0aGlzLl9nZXRDaGlsZHJlbkNvbnRhaW5lcihlbGVtZW50LnBhcmVudCk7XG4gIHJldHVybiB0aGlzLl9jcmVhdGVDb250YWluZXIodHlwZSwgY2hpbGRyZW5HZngsIHBhcmVudEluZGV4LCBpc0ZyYW1lRWxlbWVudChlbGVtZW50KSk7XG59O1xuXG5HcmFwaGljc0ZhY3RvcnkucHJvdG90eXBlLnVwZGF0ZUNvbnRhaW5tZW50cyA9IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LFxuICAgICAgcGFyZW50cztcblxuICBwYXJlbnRzID0gcmVkdWNlKGVsZW1lbnRzLCBmdW5jdGlvbihtYXAsIGUpIHtcblxuICAgIGlmIChlLnBhcmVudCkge1xuICAgICAgbWFwW2UucGFyZW50LmlkXSA9IGUucGFyZW50O1xuICAgIH1cblxuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcblxuICAvLyB1cGRhdGUgYWxsIHBhcmVudHMgb2YgY2hhbmdlZCBhbmQgcmVvcmdhbml6ZWQgdGhlaXIgY2hpbGRyZW5cbiAgLy8gaW4gdGhlIGNvcnJlY3Qgb3JkZXIgKGFzIGluZGljYXRlZCBpbiBvdXIgbW9kZWwpXG4gIGZvckVhY2gocGFyZW50cywgZnVuY3Rpb24ocGFyZW50KSB7XG5cbiAgICB2YXIgY2hpbGRyZW4gPSBwYXJlbnQuY2hpbGRyZW47XG5cbiAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkcmVuR2Z4ID0gc2VsZi5fZ2V0Q2hpbGRyZW5Db250YWluZXIocGFyZW50KTtcblxuICAgIGZvckVhY2goY2hpbGRyZW4uc2xpY2UoKS5yZXZlcnNlKCksIGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICB2YXIgY2hpbGRHZnggPSBlbGVtZW50UmVnaXN0cnkuZ2V0R3JhcGhpY3MoY2hpbGQpO1xuXG4gICAgICBwcmVwZW5kVG8oY2hpbGRHZngucGFyZW50Tm9kZSwgY2hpbGRyZW5HZngpO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbkdyYXBoaWNzRmFjdG9yeS5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24odmlzdWFsLCBlbGVtZW50KSB7XG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHJldHVybiBldmVudEJ1cy5maXJlKCdyZW5kZXIuc2hhcGUnLCB7IGdmeDogdmlzdWFsLCBlbGVtZW50OiBlbGVtZW50IH0pO1xufTtcblxuR3JhcGhpY3NGYWN0b3J5LnByb3RvdHlwZS5nZXRTaGFwZVBhdGggPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHJldHVybiBldmVudEJ1cy5maXJlKCdyZW5kZXIuZ2V0U2hhcGVQYXRoJywgZWxlbWVudCk7XG59O1xuXG5HcmFwaGljc0ZhY3RvcnkucHJvdG90eXBlLmRyYXdDb25uZWN0aW9uID0gZnVuY3Rpb24odmlzdWFsLCBlbGVtZW50KSB7XG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHJldHVybiBldmVudEJ1cy5maXJlKCdyZW5kZXIuY29ubmVjdGlvbicsIHsgZ2Z4OiB2aXN1YWwsIGVsZW1lbnQ6IGVsZW1lbnQgfSk7XG59O1xuXG5HcmFwaGljc0ZhY3RvcnkucHJvdG90eXBlLmdldENvbm5lY3Rpb25QYXRoID0gZnVuY3Rpb24od2F5cG9pbnRzKSB7XG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHJldHVybiBldmVudEJ1cy5maXJlKCdyZW5kZXIuZ2V0Q29ubmVjdGlvblBhdGgnLCB3YXlwb2ludHMpO1xufTtcblxuR3JhcGhpY3NGYWN0b3J5LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbih0eXBlLCBlbGVtZW50LCBnZngpIHtcblxuICAvLyBkbyBOT1QgdXBkYXRlIHJvb3QgZWxlbWVudFxuICBpZiAoIWVsZW1lbnQucGFyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZpc3VhbCA9IHRoaXMuX2NsZWFyKGdmeCk7XG5cbiAgLy8gcmVkcmF3XG4gIGlmICh0eXBlID09PSAnc2hhcGUnKSB7XG4gICAgdGhpcy5kcmF3U2hhcGUodmlzdWFsLCBlbGVtZW50KTtcblxuICAgIC8vIHVwZGF0ZSBwb3NpdGlvbmluZ1xuICAgIHRyYW5zbGF0ZShnZngsIGVsZW1lbnQueCwgZWxlbWVudC55KTtcbiAgfSBlbHNlXG4gIGlmICh0eXBlID09PSAnY29ubmVjdGlvbicpIHtcbiAgICB0aGlzLmRyYXdDb25uZWN0aW9uKHZpc3VhbCwgZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHR5cGU6ICcgKyB0eXBlKTtcbiAgfVxuXG4gIGlmIChlbGVtZW50LmhpZGRlbikge1xuICAgIHN2Z0F0dHIoZ2Z4LCAnZGlzcGxheScsICdub25lJyk7XG4gIH0gZWxzZSB7XG4gICAgc3ZnQXR0cihnZngsICdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gIH1cbn07XG5cbkdyYXBoaWNzRmFjdG9yeS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgZ2Z4ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGVsZW1lbnQpO1xuXG4gIC8vIHJlbW92ZVxuICBzdmdSZW1vdmUoZ2Z4LnBhcmVudE5vZGUpO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZnVuY3Rpb24gcHJlcGVuZFRvKG5ld05vZGUsIHBhcmVudE5vZGUsIHNpYmxpbmdOb2RlKSB7XG4gIHZhciBub2RlID0gc2libGluZ05vZGUgfHwgcGFyZW50Tm9kZS5maXJzdENoaWxkO1xuXG4gIC8vIGRvIG5vdCBwcmVwZW5kIG5vZGUgdG8gaXRzZWxmIHRvIHByZXZlbnQgSUUgZnJvbSBjcmFzaGluZ1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnBtbi1pby9icG1uLWpzL2lzc3Vlcy83NDZcbiAgaWYgKG5ld05vZGUgPT09IG5vZGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdOb2RlLCBub2RlKTtcbn1cbiIsImltcG9ydCBEcmF3TW9kdWxlIGZyb20gJy4uL2RyYXcnO1xuXG5pbXBvcnQgQ2FudmFzIGZyb20gJy4vQ2FudmFzJztcbmltcG9ydCBFbGVtZW50UmVnaXN0cnkgZnJvbSAnLi9FbGVtZW50UmVnaXN0cnknO1xuaW1wb3J0IEVsZW1lbnRGYWN0b3J5IGZyb20gJy4vRWxlbWVudEZhY3RvcnknO1xuaW1wb3J0IEV2ZW50QnVzIGZyb20gJy4vRXZlbnRCdXMnO1xuaW1wb3J0IEdyYXBoaWNzRmFjdG9yeSBmcm9tICcuL0dyYXBoaWNzRmFjdG9yeSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFsgRHJhd01vZHVsZSBdLFxuICBfX2luaXRfXzogWyAnY2FudmFzJyBdLFxuICBjYW52YXM6IFsgJ3R5cGUnLCBDYW52YXMgXSxcbiAgZWxlbWVudFJlZ2lzdHJ5OiBbICd0eXBlJywgRWxlbWVudFJlZ2lzdHJ5IF0sXG4gIGVsZW1lbnRGYWN0b3J5OiBbICd0eXBlJywgRWxlbWVudEZhY3RvcnkgXSxcbiAgZXZlbnRCdXM6IFsgJ3R5cGUnLCBFdmVudEJ1cyBdLFxuICBncmFwaGljc0ZhY3Rvcnk6IFsgJ3R5cGUnLCBHcmFwaGljc0ZhY3RvcnkgXVxufTsiLCJ2YXIgREVGQVVMVF9SRU5ERVJfUFJJT1JJVFkgPSAxMDAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIHNoYXBlIGFuZCBjb25uZWN0aW9uIHJlbmRlcmVycy5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtudW1iZXJ9IFtyZW5kZXJQcmlvcml0eT0xMDAwXVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCYXNlUmVuZGVyZXIoZXZlbnRCdXMsIHJlbmRlclByaW9yaXR5KSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICByZW5kZXJQcmlvcml0eSA9IHJlbmRlclByaW9yaXR5IHx8IERFRkFVTFRfUkVOREVSX1BSSU9SSVRZO1xuXG4gIGV2ZW50QnVzLm9uKFsgJ3JlbmRlci5zaGFwZScsICdyZW5kZXIuY29ubmVjdGlvbicgXSwgcmVuZGVyUHJpb3JpdHksIGZ1bmN0aW9uKGV2dCwgY29udGV4dCkge1xuICAgIHZhciB0eXBlID0gZXZ0LnR5cGUsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICAgIHZpc3VhbHMgPSBjb250ZXh0LmdmeDtcblxuICAgIGlmIChzZWxmLmNhblJlbmRlcihlbGVtZW50KSkge1xuICAgICAgaWYgKHR5cGUgPT09ICdyZW5kZXIuc2hhcGUnKSB7XG4gICAgICAgIHJldHVybiBzZWxmLmRyYXdTaGFwZSh2aXN1YWxzLCBlbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzZWxmLmRyYXdDb25uZWN0aW9uKHZpc3VhbHMsIGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAncmVuZGVyLmdldFNoYXBlUGF0aCcsICdyZW5kZXIuZ2V0Q29ubmVjdGlvblBhdGgnXSwgcmVuZGVyUHJpb3JpdHksIGZ1bmN0aW9uKGV2dCwgZWxlbWVudCkge1xuICAgIGlmIChzZWxmLmNhblJlbmRlcihlbGVtZW50KSkge1xuICAgICAgaWYgKGV2dC50eXBlID09PSAncmVuZGVyLmdldFNoYXBlUGF0aCcpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0U2hhcGVQYXRoKGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0Q29ubmVjdGlvblBhdGgoZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBTaG91bGQgY2hlY2sgd2hldGhlciAqdGhpcyogcmVuZGVyZXIgY2FuIHJlbmRlclxuICogdGhlIGVsZW1lbnQvY29ubmVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2VsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuQmFzZVJlbmRlcmVyLnByb3RvdHlwZS5jYW5SZW5kZXIgPSBmdW5jdGlvbigpIHt9O1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBzaGFwZSdzIHNuYXAgc3ZnIGVsZW1lbnQgdG8gYmUgZHJhd24gb24gdGhlIGBjYW52YXNgLlxuICpcbiAqIEBwYXJhbSB7ZGpzLkdyYXBoaWNzfSB2aXN1YWxzXG4gKiBAcGFyYW0ge1NoYXBlfSBzaGFwZVxuICpcbiAqIEByZXR1cm5zIHtTbmFwLnN2Z30gW3JldHVybnMgYSBTbmFwLnN2ZyBwYXBlciBlbGVtZW50IF1cbiAqL1xuQmFzZVJlbmRlcmVyLnByb3RvdHlwZS5kcmF3U2hhcGUgPSBmdW5jdGlvbigpIHt9O1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBzaGFwZSdzIHNuYXAgc3ZnIGVsZW1lbnQgdG8gYmUgZHJhd24gb24gdGhlIGBjYW52YXNgLlxuICpcbiAqIEBwYXJhbSB7ZGpzLkdyYXBoaWNzfSB2aXN1YWxzXG4gKiBAcGFyYW0ge0Nvbm5lY3Rpb259IGNvbm5lY3Rpb25cbiAqXG4gKiBAcmV0dXJucyB7U25hcC5zdmd9IFtyZXR1cm5zIGEgU25hcC5zdmcgcGFwZXIgZWxlbWVudCBdXG4gKi9cbkJhc2VSZW5kZXJlci5wcm90b3R5cGUuZHJhd0Nvbm5lY3Rpb24gPSBmdW5jdGlvbigpIHt9O1xuXG4vKipcbiAqIEdldHMgdGhlIFNWRyBwYXRoIG9mIGEgc2hhcGUgdGhhdCByZXByZXNlbnRzIGl0J3MgdmlzdWFsIGJvdW5kcy5cbiAqXG4gKiBAcGFyYW0ge1NoYXBlfSBzaGFwZVxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gc3ZnIHBhdGhcbiAqL1xuQmFzZVJlbmRlcmVyLnByb3RvdHlwZS5nZXRTaGFwZVBhdGggPSBmdW5jdGlvbigpIHt9O1xuXG4vKipcbiAqIEdldHMgdGhlIFNWRyBwYXRoIG9mIGEgY29ubmVjdGlvbiB0aGF0IHJlcHJlc2VudHMgaXQncyB2aXN1YWwgYm91bmRzLlxuICpcbiAqIEBwYXJhbSB7Q29ubmVjdGlvbn0gY29ubmVjdGlvblxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gc3ZnIHBhdGhcbiAqL1xuQmFzZVJlbmRlcmVyLnByb3RvdHlwZS5nZXRDb25uZWN0aW9uUGF0aCA9IGZ1bmN0aW9uKCkge307XG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQmFzZVJlbmRlcmVyIGZyb20gJy4vQmFzZVJlbmRlcmVyJztcblxuaW1wb3J0IHtcbiAgY29tcG9uZW50c1RvUGF0aCxcbiAgY3JlYXRlTGluZVxufSBmcm9tICcuLi91dGlsL1JlbmRlclV0aWwnO1xuXG5pbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQge1xuICBpc0ZyYW1lRWxlbWVudFxufSBmcm9tICcuLi91dGlsL0VsZW1lbnRzJztcblxuLy8gYXBwbHkgZGVmYXVsdCByZW5kZXJlciB3aXRoIGxvd2VzdCBwb3NzaWJsZSBwcmlvcml0eVxuLy8gc28gdGhhdCBpdCBvbmx5IGtpY2tzIGluIGlmIG5vb25lIGVsc2UgY291bGQgcmVuZGVyXG52YXIgREVGQVVMVF9SRU5ERVJfUFJJT1JJVFkgPSAxO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHJlbmRlcmVyIHVzZWQgZm9yIHNoYXBlcyBhbmQgY29ubmVjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7U3R5bGVzfSBzdHlsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGVmYXVsdFJlbmRlcmVyKGV2ZW50QnVzLCBzdHlsZXMpIHtcblxuICAvL1xuICBCYXNlUmVuZGVyZXIuY2FsbCh0aGlzLCBldmVudEJ1cywgREVGQVVMVF9SRU5ERVJfUFJJT1JJVFkpO1xuXG4gIHRoaXMuQ09OTkVDVElPTl9TVFlMRSA9IHN0eWxlcy5zdHlsZShbICduby1maWxsJyBdLCB7IHN0cm9rZVdpZHRoOiA1LCBzdHJva2U6ICdmdWNoc2lhJyB9KTtcbiAgdGhpcy5TSEFQRV9TVFlMRSA9IHN0eWxlcy5zdHlsZSh7IGZpbGw6ICd3aGl0ZScsIHN0cm9rZTogJ2Z1Y2hzaWEnLCBzdHJva2VXaWR0aDogMiB9KTtcbiAgdGhpcy5GUkFNRV9TVFlMRSA9IHN0eWxlcy5zdHlsZShbICduby1maWxsJyBdLCB7IHN0cm9rZTogJ2Z1Y2hzaWEnLCBzdHJva2VEYXNoYXJyYXk6IDQsIHN0cm9rZVdpZHRoOiAyIH0pO1xufVxuXG5pbmhlcml0cyhEZWZhdWx0UmVuZGVyZXIsIEJhc2VSZW5kZXJlcik7XG5cblxuRGVmYXVsdFJlbmRlcmVyLnByb3RvdHlwZS5jYW5SZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG5EZWZhdWx0UmVuZGVyZXIucHJvdG90eXBlLmRyYXdTaGFwZSA9IGZ1bmN0aW9uIGRyYXdTaGFwZSh2aXN1YWxzLCBlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gc3ZnQ3JlYXRlKCdyZWN0Jyk7XG5cbiAgc3ZnQXR0cihyZWN0LCB7XG4gICAgeDogMCxcbiAgICB5OiAwLFxuICAgIHdpZHRoOiBlbGVtZW50LndpZHRoIHx8IDAsXG4gICAgaGVpZ2h0OiBlbGVtZW50LmhlaWdodCB8fCAwXG4gIH0pO1xuXG4gIGlmIChpc0ZyYW1lRWxlbWVudChlbGVtZW50KSkge1xuICAgIHN2Z0F0dHIocmVjdCwgdGhpcy5GUkFNRV9TVFlMRSk7XG4gIH0gZWxzZSB7XG4gICAgc3ZnQXR0cihyZWN0LCB0aGlzLlNIQVBFX1NUWUxFKTtcbiAgfVxuXG4gIHN2Z0FwcGVuZCh2aXN1YWxzLCByZWN0KTtcblxuICByZXR1cm4gcmVjdDtcbn07XG5cbkRlZmF1bHRSZW5kZXJlci5wcm90b3R5cGUuZHJhd0Nvbm5lY3Rpb24gPSBmdW5jdGlvbiBkcmF3Q29ubmVjdGlvbih2aXN1YWxzLCBjb25uZWN0aW9uKSB7XG5cbiAgdmFyIGxpbmUgPSBjcmVhdGVMaW5lKGNvbm5lY3Rpb24ud2F5cG9pbnRzLCB0aGlzLkNPTk5FQ1RJT05fU1RZTEUpO1xuICBzdmdBcHBlbmQodmlzdWFscywgbGluZSk7XG5cbiAgcmV0dXJuIGxpbmU7XG59O1xuXG5EZWZhdWx0UmVuZGVyZXIucHJvdG90eXBlLmdldFNoYXBlUGF0aCA9IGZ1bmN0aW9uIGdldFNoYXBlUGF0aChzaGFwZSkge1xuXG4gIHZhciB4ID0gc2hhcGUueCxcbiAgICAgIHkgPSBzaGFwZS55LFxuICAgICAgd2lkdGggPSBzaGFwZS53aWR0aCxcbiAgICAgIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcblxuICB2YXIgc2hhcGVQYXRoID0gW1xuICAgIFsnTScsIHgsIHldLFxuICAgIFsnbCcsIHdpZHRoLCAwXSxcbiAgICBbJ2wnLCAwLCBoZWlnaHRdLFxuICAgIFsnbCcsIC13aWR0aCwgMF0sXG4gICAgWyd6J11cbiAgXTtcblxuICByZXR1cm4gY29tcG9uZW50c1RvUGF0aChzaGFwZVBhdGgpO1xufTtcblxuRGVmYXVsdFJlbmRlcmVyLnByb3RvdHlwZS5nZXRDb25uZWN0aW9uUGF0aCA9IGZ1bmN0aW9uIGdldENvbm5lY3Rpb25QYXRoKGNvbm5lY3Rpb24pIHtcbiAgdmFyIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzO1xuXG4gIHZhciBpZHgsIHBvaW50LCBjb25uZWN0aW9uUGF0aCA9IFtdO1xuXG4gIGZvciAoaWR4ID0gMDsgKHBvaW50ID0gd2F5cG9pbnRzW2lkeF0pOyBpZHgrKykge1xuXG4gICAgLy8gdGFrZSBpbnZpc2libGUgZG9ja2luZyBpbnRvIGFjY291bnRcbiAgICAvLyB3aGVuIGNyZWF0aW5nIHRoZSBwYXRoXG4gICAgcG9pbnQgPSBwb2ludC5vcmlnaW5hbCB8fCBwb2ludDtcblxuICAgIGNvbm5lY3Rpb25QYXRoLnB1c2goWyBpZHggPT09IDAgPyAnTScgOiAnTCcsIHBvaW50LngsIHBvaW50LnkgXSk7XG4gIH1cblxuICByZXR1cm4gY29tcG9uZW50c1RvUGF0aChjb25uZWN0aW9uUGF0aCk7XG59O1xuXG5cbkRlZmF1bHRSZW5kZXJlci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnLCAnc3R5bGVzJyBdO1xuIiwiaW1wb3J0IHtcbiAgaXNBcnJheSxcbiAgYXNzaWduLFxuICByZWR1Y2Vcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbi8qKlxuICogQSBjb21wb25lbnQgdGhhdCBtYW5hZ2VzIHNoYXBlIHN0eWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTdHlsZXMoKSB7XG5cbiAgdmFyIGRlZmF1bHRUcmFpdHMgPSB7XG5cbiAgICAnbm8tZmlsbCc6IHtcbiAgICAgIGZpbGw6ICdub25lJ1xuICAgIH0sXG4gICAgJ25vLWJvcmRlcic6IHtcbiAgICAgIHN0cm9rZU9wYWNpdHk6IDAuMFxuICAgIH0sXG4gICAgJ25vLWV2ZW50cyc6IHtcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJ1xuICAgIH1cbiAgfTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIHN0eWxlIGRlZmluaXRpb24gZnJvbSBhIGNsYXNzTmFtZSwgYSBsaXN0IG9mIHRyYWl0cyBhbmQgYW4gb2JqZWN0IG9mIGFkZGl0aW9uYWwgYXR0cmlidXRlcy5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSBjbGFzc05hbWVcbiAgICogQHBhcmFtICB7QXJyYXk8c3RyaW5nPn0gdHJhaXRzXG4gICAqIEBwYXJhbSAge09iamVjdH0gYWRkaXRpb25hbEF0dHJzXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdH0gdGhlIHN0eWxlIGRlZmludGlvblxuICAgKi9cbiAgdGhpcy5jbHMgPSBmdW5jdGlvbihjbGFzc05hbWUsIHRyYWl0cywgYWRkaXRpb25hbEF0dHJzKSB7XG4gICAgdmFyIGF0dHJzID0gdGhpcy5zdHlsZSh0cmFpdHMsIGFkZGl0aW9uYWxBdHRycyk7XG5cbiAgICByZXR1cm4gYXNzaWduKGF0dHJzLCB7ICdjbGFzcyc6IGNsYXNzTmFtZSB9KTtcbiAgfTtcblxuICAvKipcbiAgICogQnVpbGRzIGEgc3R5bGUgZGVmaW5pdGlvbiBmcm9tIGEgbGlzdCBvZiB0cmFpdHMgYW5kIGFuIG9iamVjdCBvZiBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSAge0FycmF5PHN0cmluZz59IHRyYWl0c1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGFkZGl0aW9uYWxBdHRyc1xuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBzdHlsZSBkZWZpbnRpb25cbiAgICovXG4gIHRoaXMuc3R5bGUgPSBmdW5jdGlvbih0cmFpdHMsIGFkZGl0aW9uYWxBdHRycykge1xuXG4gICAgaWYgKCFpc0FycmF5KHRyYWl0cykgJiYgIWFkZGl0aW9uYWxBdHRycykge1xuICAgICAgYWRkaXRpb25hbEF0dHJzID0gdHJhaXRzO1xuICAgICAgdHJhaXRzID0gW107XG4gICAgfVxuXG4gICAgdmFyIGF0dHJzID0gcmVkdWNlKHRyYWl0cywgZnVuY3Rpb24oYXR0cnMsIHQpIHtcbiAgICAgIHJldHVybiBhc3NpZ24oYXR0cnMsIGRlZmF1bHRUcmFpdHNbdF0gfHwge30pO1xuICAgIH0sIHt9KTtcblxuICAgIHJldHVybiBhZGRpdGlvbmFsQXR0cnMgPyBhc3NpZ24oYXR0cnMsIGFkZGl0aW9uYWxBdHRycykgOiBhdHRycztcbiAgfTtcblxuICB0aGlzLmNvbXB1dGVTdHlsZSA9IGZ1bmN0aW9uKGN1c3RvbSwgdHJhaXRzLCBkZWZhdWx0U3R5bGVzKSB7XG4gICAgaWYgKCFpc0FycmF5KHRyYWl0cykpIHtcbiAgICAgIGRlZmF1bHRTdHlsZXMgPSB0cmFpdHM7XG4gICAgICB0cmFpdHMgPSBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZi5zdHlsZSh0cmFpdHMgfHwgW10sIGFzc2lnbih7fSwgZGVmYXVsdFN0eWxlcywgY3VzdG9tIHx8IHt9KSk7XG4gIH07XG59XG4iLCJpbXBvcnQgRGVmYXVsdFJlbmRlcmVyIGZyb20gJy4vRGVmYXVsdFJlbmRlcmVyJztcbmltcG9ydCBTdHlsZXMgZnJvbSAnLi9TdHlsZXMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdkZWZhdWx0UmVuZGVyZXInIF0sXG4gIGRlZmF1bHRSZW5kZXJlcjogWyAndHlwZScsIERlZmF1bHRSZW5kZXJlciBdLFxuICBzdHlsZXM6IFsgJ3R5cGUnLCBTdHlsZXMgXVxufTtcbiIsImltcG9ydCB7XG4gIGZpbHRlcixcbiAgZm9yRWFjaCxcbiAgc29ydEJ5XG59IGZyb20gJ21pbi1kYXNoJztcblxuZnVuY3Rpb24gbGFzdChhcnIpIHtcbiAgcmV0dXJuIGFyciAmJiBhcnJbYXJyLmxlbmd0aCAtIDFdO1xufVxuXG5mdW5jdGlvbiBzb3J0VG9wT3JNaWRkbGUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC55O1xufVxuXG5mdW5jdGlvbiBzb3J0TGVmdE9yQ2VudGVyKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQueDtcbn1cblxuLyoqXG4gKiBTb3J0aW5nIGZ1bmN0aW9ucyBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIGFsaWdubWVudFxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKlxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbnZhciBBTElHTk1FTlRfU09SVElORyA9IHtcbiAgbGVmdDogc29ydExlZnRPckNlbnRlcixcbiAgY2VudGVyOiBzb3J0TGVmdE9yQ2VudGVyLFxuICByaWdodDogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LnggKyBlbGVtZW50LndpZHRoO1xuICB9LFxuICB0b3A6IHNvcnRUb3BPck1pZGRsZSxcbiAgbWlkZGxlOiBzb3J0VG9wT3JNaWRkbGUsXG4gIGJvdHRvbTogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LnkgKyBlbGVtZW50LmhlaWdodDtcbiAgfVxufTtcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBbGlnbkVsZW1lbnRzKG1vZGVsaW5nKSB7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG59XG5cbkFsaWduRWxlbWVudHMuJGluamVjdCA9IFsgJ21vZGVsaW5nJyBdO1xuXG5cbi8qKlxuICogR2V0IHRoZSByZWxldmFudCBcImF4aXNcIiBhbmQgXCJkaW1lbnNpb25cIiByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHR5cGUgb2YgYWxpZ25tZW50XG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSB0eXBlIGxlZnR8cmlnaHR8Y2VudGVyfHRvcHxib3R0b218bWlkZGxlXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB7IGF4aXMsIGRpbWVuc2lvbiB9XG4gKi9cbkFsaWduRWxlbWVudHMucHJvdG90eXBlLl9nZXRPcmllbnRhdGlvbkRldGFpbHMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciB2ZXJ0aWNhbCA9IFsgJ3RvcCcsICdib3R0b20nLCAnbWlkZGxlJyBdLFxuICAgICAgYXhpcyA9ICd4JyxcbiAgICAgIGRpbWVuc2lvbiA9ICd3aWR0aCc7XG5cbiAgaWYgKHZlcnRpY2FsLmluZGV4T2YodHlwZSkgIT09IC0xKSB7XG4gICAgYXhpcyA9ICd5JztcbiAgICBkaW1lbnNpb24gPSAnaGVpZ2h0JztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYXhpczogYXhpcyxcbiAgICBkaW1lbnNpb246IGRpbWVuc2lvblxuICB9O1xufTtcblxuQWxpZ25FbGVtZW50cy5wcm90b3R5cGUuX2lzVHlwZSA9IGZ1bmN0aW9uKHR5cGUsIHR5cGVzKSB7XG4gIHJldHVybiB0eXBlcy5pbmRleE9mKHR5cGUpICE9PSAtMTtcbn07XG5cbi8qKlxuICogR2V0IGEgcG9pbnQgb24gdGhlIHJlbGV2YW50IGF4aXMgd2hlcmUgZWxlbWVudHMgc2hvdWxkIGFsaWduIHRvXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSB0eXBlIGxlZnR8cmlnaHR8Y2VudGVyfHRvcHxib3R0b218bWlkZGxlXG4gKiBAcGFyYW0gIHtBcnJheX0gc29ydGVkRWxlbWVudHNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbkFsaWduRWxlbWVudHMucHJvdG90eXBlLl9hbGlnbm1lbnRQb3NpdGlvbiA9IGZ1bmN0aW9uKHR5cGUsIHNvcnRlZEVsZW1lbnRzKSB7XG4gIHZhciBvcmllbnRhdGlvbiA9IHRoaXMuX2dldE9yaWVudGF0aW9uRGV0YWlscyh0eXBlKSxcbiAgICAgIGF4aXMgPSBvcmllbnRhdGlvbi5heGlzLFxuICAgICAgZGltZW5zaW9uID0gb3JpZW50YXRpb24uZGltZW5zaW9uLFxuICAgICAgYWxpZ25tZW50ID0ge30sXG4gICAgICBjZW50ZXJzID0ge30sXG4gICAgICBoYXNTaGFyZWRDZW50ZXJzID0gZmFsc2UsXG4gICAgICBjZW50ZXJlZEVsZW1lbnRzLFxuICAgICAgZmlyc3RFbGVtZW50LFxuICAgICAgbGFzdEVsZW1lbnQ7XG5cbiAgZnVuY3Rpb24gZ2V0TWlkZGxlT3JUb3AoZmlyc3QsIGxhc3QpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCgoZmlyc3RbYXhpc10gKyBsYXN0W2F4aXNdICsgbGFzdFtkaW1lbnNpb25dKSAvIDIpO1xuICB9XG5cbiAgaWYgKHRoaXMuX2lzVHlwZSh0eXBlLCBbICdsZWZ0JywgJ3RvcCcgXSkpIHtcbiAgICBhbGlnbm1lbnRbdHlwZV0gPSBzb3J0ZWRFbGVtZW50c1swXVtheGlzXTtcblxuICB9IGVsc2UgaWYgKHRoaXMuX2lzVHlwZSh0eXBlLCBbICdyaWdodCcsICdib3R0b20nIF0pKSB7XG4gICAgbGFzdEVsZW1lbnQgPSBsYXN0KHNvcnRlZEVsZW1lbnRzKTtcblxuICAgIGFsaWdubWVudFt0eXBlXSA9IGxhc3RFbGVtZW50W2F4aXNdICsgbGFzdEVsZW1lbnRbZGltZW5zaW9uXTtcblxuICB9IGVsc2UgaWYgKHRoaXMuX2lzVHlwZSh0eXBlLCBbICdjZW50ZXInLCAnbWlkZGxlJyBdKSkge1xuXG4gICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSBjZW50ZXIgc2hhcmVkIGJ5IG1vcmUgdGhhbiBvbmUgc2hhcGVcbiAgICAvLyBpZiBub3QsIGp1c3QgdGFrZSB0aGUgbWlkZGxlIG9mIHRoZSByYW5nZVxuICAgIGZvckVhY2goc29ydGVkRWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHZhciBjZW50ZXIgPSBlbGVtZW50W2F4aXNdICsgTWF0aC5yb3VuZChlbGVtZW50W2RpbWVuc2lvbl0gLyAyKTtcblxuICAgICAgaWYgKGNlbnRlcnNbY2VudGVyXSkge1xuICAgICAgICBjZW50ZXJzW2NlbnRlcl0uZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNlbnRlcnNbY2VudGVyXSA9IHtcbiAgICAgICAgICBlbGVtZW50czogWyBlbGVtZW50IF0sXG4gICAgICAgICAgY2VudGVyOiBjZW50ZXJcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNlbnRlcmVkRWxlbWVudHMgPSBzb3J0QnkoY2VudGVycywgZnVuY3Rpb24oY2VudGVyKSB7XG4gICAgICBpZiAoY2VudGVyLmVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaGFzU2hhcmVkQ2VudGVycyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjZW50ZXIuZWxlbWVudHMubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgaWYgKGhhc1NoYXJlZENlbnRlcnMpIHtcbiAgICAgIGFsaWdubWVudFt0eXBlXSA9IGxhc3QoY2VudGVyZWRFbGVtZW50cykuY2VudGVyO1xuXG4gICAgICByZXR1cm4gYWxpZ25tZW50O1xuICAgIH1cblxuICAgIGZpcnN0RWxlbWVudCA9IHNvcnRlZEVsZW1lbnRzWzBdO1xuXG4gICAgc29ydGVkRWxlbWVudHMgPSBzb3J0Qnkoc29ydGVkRWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50W2F4aXNdICsgZWxlbWVudFtkaW1lbnNpb25dO1xuICAgIH0pO1xuXG4gICAgbGFzdEVsZW1lbnQgPSBsYXN0KHNvcnRlZEVsZW1lbnRzKTtcblxuICAgIGFsaWdubWVudFt0eXBlXSA9IGdldE1pZGRsZU9yVG9wKGZpcnN0RWxlbWVudCwgbGFzdEVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGFsaWdubWVudDtcbn07XG5cbi8qKlxuICogRXhlY3V0ZXMgdGhlIGFsaWdubWVudCBvZiBhIHNlbGVjdGlvbiBvZiBlbGVtZW50c1xuICpcbiAqIEBwYXJhbSAge0FycmF5fSBlbGVtZW50cyBbZGVzY3JpcHRpb25dXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHR5cGUgbGVmdHxyaWdodHxjZW50ZXJ8dG9wfGJvdHRvbXxtaWRkbGVcbiAqL1xuQWxpZ25FbGVtZW50cy5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uKGVsZW1lbnRzLCB0eXBlKSB7XG4gIHZhciBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nO1xuXG4gIHZhciBmaWx0ZXJlZEVsZW1lbnRzID0gZmlsdGVyKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuICEoZWxlbWVudC53YXlwb2ludHMgfHwgZWxlbWVudC5ob3N0IHx8IGVsZW1lbnQubGFiZWxUYXJnZXQpO1xuICB9KTtcblxuICB2YXIgc29ydEZuID0gQUxJR05NRU5UX1NPUlRJTkdbdHlwZV07XG5cbiAgdmFyIHNvcnRlZEVsZW1lbnRzID0gc29ydEJ5KGZpbHRlcmVkRWxlbWVudHMsIHNvcnRGbik7XG5cbiAgdmFyIGFsaWdubWVudCA9IHRoaXMuX2FsaWdubWVudFBvc2l0aW9uKHR5cGUsIHNvcnRlZEVsZW1lbnRzKTtcblxuICBtb2RlbGluZy5hbGlnbkVsZW1lbnRzKHNvcnRlZEVsZW1lbnRzLCBhbGlnbm1lbnQpO1xufTtcbiIsImltcG9ydCBBbGlnbkVsZW1lbnRzIGZyb20gJy4vQWxpZ25FbGVtZW50cyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ2FsaWduRWxlbWVudHMnIF0sXG4gIGFsaWduRWxlbWVudHM6IFsgJ3R5cGUnLCBBbGlnbkVsZW1lbnRzIF1cbn07XG4iLCJpbXBvcnQge1xuICBmbGF0dGVuLFxuICBmaWx0ZXIsXG4gIGZvckVhY2gsXG4gIGdyb3VwQnksXG4gIG1hcCxcbiAgdW5pb25CeVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7IHNhdmVDbGVhciB9IGZyb20gJy4uLy4uL3V0aWwvUmVtb3ZhbCc7XG5cbmltcG9ydCB7IGdldE5ld0F0dGFjaFNoYXBlRGVsdGEgfSBmcm9tICcuLi8uLi91dGlsL0F0dGFjaFV0aWwnO1xuXG5pbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJy4uLy4uL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxudmFyIExPV19QUklPUklUWSA9IDI1MSxcbiAgICBISUdIX1BSSU9SSVRZID0gMTQwMTtcblxudmFyIE1BUktFUl9BVFRBQ0ggPSAnYXR0YWNoLW9rJztcblxuXG4vKipcbiAqIEFkZHMgdGhlIG5vdGlvbiBvZiBhdHRhY2hlZCBlbGVtZW50cyB0byB0aGUgbW9kZWxlci5cbiAqXG4gKiBPcHRpb25hbGx5IGRlcGVuZHMgb24gYGRpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vdmVgIHRvIHJlbmRlclxuICogdGhlIGF0dGFjaGVkIGVsZW1lbnRzIGR1cmluZyBtb3ZlIHByZXZpZXcuXG4gKlxuICogT3B0aW9uYWxseSBkZXBlbmRzIG9uIGBkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1zdXBwb3J0YFxuICogdG8gcmVuZGVyIGF0dGFjaGVkIGxhYmVscyBkdXJpbmcgbW92ZSBwcmV2aWV3LlxuICpcbiAqIEBwYXJhbSB7ZGlkaS5JbmplY3Rvcn0gaW5qZWN0b3JcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge1J1bGVzfSBydWxlc1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQXR0YWNoU3VwcG9ydChpbmplY3RvciwgZXZlbnRCdXMsIGNhbnZhcywgcnVsZXMsIG1vZGVsaW5nKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHZhciBtb3ZlUHJldmlldyA9IGluamVjdG9yLmdldCgnbW92ZVByZXZpZXcnLCBmYWxzZSk7XG5cblxuICAvLyByZW1vdmUgYWxsIHRoZSBhdHRhY2hlZCBlbGVtZW50cyBmcm9tIHRoZSBzaGFwZXMgdG8gYmUgdmFsaWRhdGVkXG4gIC8vIGFkZCBhbGwgdGhlIGF0dGFjaGVkIHNoYXBlcyB0byB0aGUgb3ZlcmFsbCBsaXN0IG9mIG1vdmVkIHNoYXBlc1xuICBldmVudEJ1cy5vbignc2hhcGUubW92ZS5zdGFydCcsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcyxcbiAgICAgICAgdmFsaWRhdGVkU2hhcGVzID0gY29udGV4dC52YWxpZGF0ZWRTaGFwZXM7XG5cbiAgICBjb250ZXh0LnNoYXBlcyA9IGFkZEF0dGFjaGVkKHNoYXBlcyk7XG5cbiAgICBjb250ZXh0LnZhbGlkYXRlZFNoYXBlcyA9IHJlbW92ZUF0dGFjaGVkKHZhbGlkYXRlZFNoYXBlcyk7XG4gIH0pO1xuXG4gIC8vIGFkZCBhdHRhY2hlcnMgdG8gdGhlIHZpc3VhbCdzIGdyb3VwXG4gIG1vdmVQcmV2aWV3ICYmIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLnN0YXJ0JywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgc2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIGF0dGFjaGVycyA9IGdldEF0dGFjaGVycyhzaGFwZXMpO1xuXG4gICAgZm9yRWFjaChhdHRhY2hlcnMsIGZ1bmN0aW9uKGF0dGFjaGVyKSB7XG4gICAgICBtb3ZlUHJldmlldy5tYWtlRHJhZ2dhYmxlKGNvbnRleHQsIGF0dGFjaGVyLCB0cnVlKTtcblxuICAgICAgZm9yRWFjaChhdHRhY2hlci5sYWJlbHMsIGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgICAgIG1vdmVQcmV2aWV3Lm1ha2VEcmFnZ2FibGUoY29udGV4dCwgbGFiZWwsIHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIGFkZCBhdHRhY2gtb2sgbWFya2VyIHRvIGN1cnJlbnQgaG9zdFxuICBtb3ZlUHJldmlldyAmJiBldmVudEJ1cy5vbignc2hhcGUubW92ZS5zdGFydCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcztcblxuICAgIGlmIChzaGFwZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHNoYXBlID0gc2hhcGVzWzBdO1xuXG4gICAgdmFyIGhvc3QgPSBzaGFwZS5ob3N0O1xuXG4gICAgaWYgKGhvc3QpIHtcbiAgICAgIGNhbnZhcy5hZGRNYXJrZXIoaG9zdCwgTUFSS0VSX0FUVEFDSCk7XG5cbiAgICAgIGV2ZW50QnVzLm9uY2UoW1xuICAgICAgICAnc2hhcGUubW92ZS5vdXQnLFxuICAgICAgICAnc2hhcGUubW92ZS5jbGVhbnVwJ1xuICAgICAgXSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG9zdCwgTUFSS0VSX0FUVEFDSCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGFkZCBhbGwgYXR0YWNoZXJzIHRvIG1vdmUgY2xvc3VyZVxuICB0aGlzLnByZUV4ZWN1dGVkKCdlbGVtZW50cy5tb3ZlJywgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZSkge1xuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBjbG9zdXJlID0gY29udGV4dC5jbG9zdXJlLFxuICAgICAgICBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcyxcbiAgICAgICAgYXR0YWNoZXJzID0gZ2V0QXR0YWNoZXJzKHNoYXBlcyk7XG5cbiAgICBmb3JFYWNoKGF0dGFjaGVycywgZnVuY3Rpb24oYXR0YWNoZXIpIHtcbiAgICAgIGNsb3N1cmUuYWRkKGF0dGFjaGVyLCBjbG9zdXJlLnRvcExldmVsW2F0dGFjaGVyLmhvc3QuaWRdKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gcGVyZm9ybSB0aGUgYXR0YWNoaW5nIGFmdGVyIHNoYXBlcyBhcmUgZG9uZSBtb3ZpbmdcbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ2VsZW1lbnRzLm1vdmUnLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgc2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIG5ld0hvc3QgPSBjb250ZXh0Lm5ld0hvc3QsXG4gICAgICAgIGF0dGFjaGVycztcblxuICAgIC8vIG9ubHkgc2luZ2xlIGVsZW1lbnRzIGNhbiBiZSBhdHRhY2hlZFxuICAgIC8vIG11bHRpcGx5IGVsZW1lbnRzIGNhbiBiZSBkZXRhY2hlZFxuICAgIGlmIChuZXdIb3N0ICYmIHNoYXBlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobmV3SG9zdCkge1xuICAgICAgYXR0YWNoZXJzID0gc2hhcGVzO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIGZpbmQgYXR0YWNoZXJzIG1vdmVkIHdpdGhvdXQgaG9zdFxuICAgICAgYXR0YWNoZXJzID0gZmlsdGVyKHNoYXBlcywgZnVuY3Rpb24oc2hhcGUpIHtcbiAgICAgICAgdmFyIGhvc3QgPSBzaGFwZS5ob3N0O1xuXG4gICAgICAgIHJldHVybiBpc0F0dGFjaGVyKHNoYXBlKSAmJiAhaW5jbHVkZXMoc2hhcGVzLCBob3N0KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvckVhY2goYXR0YWNoZXJzLCBmdW5jdGlvbihhdHRhY2hlcikge1xuICAgICAgbW9kZWxpbmcudXBkYXRlQXR0YWNobWVudChhdHRhY2hlciwgbmV3SG9zdCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIGVuc3VyZSBpbnZhbGlkIGF0dGFjaG1lbnQgY29ubmVjdGlvbnMgYXJlIHJlbW92ZWRcbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ2VsZW1lbnRzLm1vdmUnLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgc2hhcGVzID0gZS5jb250ZXh0LnNoYXBlcztcblxuICAgIGZvckVhY2goc2hhcGVzLCBmdW5jdGlvbihzaGFwZSkge1xuXG4gICAgICBmb3JFYWNoKHNoYXBlLmF0dGFjaGVycywgZnVuY3Rpb24oYXR0YWNoZXIpIHtcblxuICAgICAgICAvLyByZW1vdmUgaW52YWxpZCBvdXRnb2luZyBjb25uZWN0aW9uc1xuICAgICAgICBmb3JFYWNoKGF0dGFjaGVyLm91dGdvaW5nLnNsaWNlKCksIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICB2YXIgYWxsb3dlZCA9IHJ1bGVzLmFsbG93ZWQoJ2Nvbm5lY3Rpb24ucmVjb25uZWN0Jywge1xuICAgICAgICAgICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICAgICAgICAgIHNvdXJjZTogY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgICAgICB0YXJnZXQ6IGNvbm5lY3Rpb24udGFyZ2V0XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoIWFsbG93ZWQpIHtcbiAgICAgICAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyByZW1vdmUgaW52YWxpZCBpbmNvbWluZyBjb25uZWN0aW9uc1xuICAgICAgICBmb3JFYWNoKGF0dGFjaGVyLmluY29taW5nLnNsaWNlKCksIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICB2YXIgYWxsb3dlZCA9IHJ1bGVzLmFsbG93ZWQoJ2Nvbm5lY3Rpb24ucmVjb25uZWN0Jywge1xuICAgICAgICAgICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICAgICAgICAgIHNvdXJjZTogY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgICAgICB0YXJnZXQ6IGNvbm5lY3Rpb24udGFyZ2V0XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoIWFsbG93ZWQpIHtcbiAgICAgICAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgaG9zdCA9IGNvbnRleHQuaG9zdDtcblxuICAgIGlmIChob3N0KSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVBdHRhY2htZW50KHNoYXBlLCBob3N0KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHVwZGF0ZSBhdHRhY2htZW50cyBpZiB0aGUgaG9zdCBpcyByZXBsYWNlZFxuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5yZXBsYWNlJywgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIG9sZFNoYXBlID0gY29udGV4dC5vbGRTaGFwZSxcbiAgICAgICAgbmV3U2hhcGUgPSBjb250ZXh0Lm5ld1NoYXBlO1xuXG4gICAgLy8gbW92ZSB0aGUgYXR0YWNoZXJzIHRvIHRoZSBuZXcgaG9zdFxuICAgIHNhdmVDbGVhcihvbGRTaGFwZS5hdHRhY2hlcnMsIGZ1bmN0aW9uKGF0dGFjaGVyKSB7XG4gICAgICB2YXIgYWxsb3dlZCA9IHJ1bGVzLmFsbG93ZWQoJ2VsZW1lbnRzLm1vdmUnLCB7XG4gICAgICAgIHRhcmdldDogbmV3U2hhcGUsXG4gICAgICAgIHNoYXBlczogW2F0dGFjaGVyXVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChhbGxvd2VkID09PSAnYXR0YWNoJykge1xuICAgICAgICBtb2RlbGluZy51cGRhdGVBdHRhY2htZW50KGF0dGFjaGVyLCBuZXdTaGFwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtb2RlbGluZy5yZW1vdmVTaGFwZShhdHRhY2hlcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBtb3ZlIGF0dGFjaGVycyBpZiBuZXcgaG9zdCBoYXMgZGlmZmVyZW50IHNpemVcbiAgICBpZiAobmV3U2hhcGUuYXR0YWNoZXJzLmxlbmd0aCkge1xuXG4gICAgICBmb3JFYWNoKG5ld1NoYXBlLmF0dGFjaGVycywgZnVuY3Rpb24oYXR0YWNoZXIpIHtcbiAgICAgICAgdmFyIGRlbHRhID0gZ2V0TmV3QXR0YWNoU2hhcGVEZWx0YShhdHRhY2hlciwgb2xkU2hhcGUsIG5ld1NoYXBlKTtcbiAgICAgICAgbW9kZWxpbmcubW92ZVNoYXBlKGF0dGFjaGVyLCBkZWx0YSwgYXR0YWNoZXIucGFyZW50KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICB9KTtcblxuICAvLyBtb3ZlIHNoYXBlIG9uIGhvc3QgcmVzaXplXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLnJlc2l6ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIG9sZEJvdW5kcyA9IGNvbnRleHQub2xkQm91bmRzLFxuICAgICAgICBuZXdCb3VuZHMgPSBjb250ZXh0Lm5ld0JvdW5kcyxcbiAgICAgICAgYXR0YWNoZXJzID0gc2hhcGUuYXR0YWNoZXJzLFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge307XG5cbiAgICBpZiAoaGludHMuYXR0YWNoU3VwcG9ydCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3JFYWNoKGF0dGFjaGVycywgZnVuY3Rpb24oYXR0YWNoZXIpIHtcbiAgICAgIHZhciBkZWx0YSA9IGdldE5ld0F0dGFjaFNoYXBlRGVsdGEoYXR0YWNoZXIsIG9sZEJvdW5kcywgbmV3Qm91bmRzKTtcblxuICAgICAgbW9kZWxpbmcubW92ZVNoYXBlKGF0dGFjaGVyLCBkZWx0YSwgYXR0YWNoZXIucGFyZW50KTtcblxuICAgICAgZm9yRWFjaChhdHRhY2hlci5sYWJlbHMsIGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgICAgIG1vZGVsaW5nLm1vdmVTaGFwZShsYWJlbCwgZGVsdGEsIGxhYmVsLnBhcmVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gcmVtb3ZlIGF0dGFjaG1lbnRzXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuZGVsZXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBzaGFwZSA9IGV2ZW50LmNvbnRleHQuc2hhcGU7XG5cbiAgICBzYXZlQ2xlYXIoc2hhcGUuYXR0YWNoZXJzLCBmdW5jdGlvbihhdHRhY2hlcikge1xuICAgICAgbW9kZWxpbmcucmVtb3ZlU2hhcGUoYXR0YWNoZXIpO1xuICAgIH0pO1xuXG4gICAgaWYgKHNoYXBlLmhvc3QpIHtcbiAgICAgIG1vZGVsaW5nLnVwZGF0ZUF0dGFjaG1lbnQoc2hhcGUsIG51bGwpO1xuICAgIH1cbiAgfSk7XG59XG5cbmluaGVyaXRzKEF0dGFjaFN1cHBvcnQsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbkF0dGFjaFN1cHBvcnQuJGluamVjdCA9IFtcbiAgJ2luamVjdG9yJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdydWxlcycsXG4gICdtb2RlbGluZydcbl07XG5cblxuLyoqXG4gKiBSZXR1cm4gYXR0YWNoZXJzIG9mIHRoZSBnaXZlbiBzaGFwZXNcbiAqXG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gc2hhcGVzXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuQmFzZT59XG4gKi9cbmZ1bmN0aW9uIGdldEF0dGFjaGVycyhzaGFwZXMpIHtcbiAgcmV0dXJuIGZsYXR0ZW4obWFwKHNoYXBlcywgZnVuY3Rpb24ocykge1xuICAgIHJldHVybiBzLmF0dGFjaGVycyB8fCBbXTtcbiAgfSkpO1xufVxuXG4vKipcbiAqIFJldHVybiBhIGNvbWJpbmVkIGxpc3Qgb2YgZWxlbWVudHMgYW5kXG4gKiBhdHRhY2hlcnMuXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGVsZW1lbnRzXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGZpbHRlcmVkXG4gKi9cbmZ1bmN0aW9uIGFkZEF0dGFjaGVkKGVsZW1lbnRzKSB7XG4gIHZhciBhdHRhY2hlcnMgPSBnZXRBdHRhY2hlcnMoZWxlbWVudHMpO1xuXG4gIHJldHVybiB1bmlvbkJ5KCdpZCcsIGVsZW1lbnRzLCBhdHRhY2hlcnMpO1xufVxuXG4vKipcbiAqIFJldHVybiBhIGZpbHRlcmVkIGxpc3Qgb2YgZWxlbWVudHMgdGhhdCBkbyBub3RcbiAqIGNvbnRhaW4gYXR0YWNoZWQgZWxlbWVudHMgd2l0aCBob3N0cyBiZWluZyBwYXJ0XG4gKiBvZiB0aGUgc2VsZWN0aW9uLlxuICpcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGZpbHRlcmVkXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUF0dGFjaGVkKGVsZW1lbnRzKSB7XG5cbiAgdmFyIGlkcyA9IGdyb3VwQnkoZWxlbWVudHMsICdpZCcpO1xuXG4gIHJldHVybiBmaWx0ZXIoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICB3aGlsZSAoZWxlbWVudCkge1xuXG4gICAgICAvLyBob3N0IGluIHNlbGVjdGlvblxuICAgICAgaWYgKGVsZW1lbnQuaG9zdCAmJiBpZHNbZWxlbWVudC5ob3N0LmlkXSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzQXR0YWNoZXIoc2hhcGUpIHtcbiAgcmV0dXJuICEhc2hhcGUuaG9zdDtcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIGl0ZW0pIHtcbiAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSkgIT09IC0xO1xufSIsImltcG9ydCBSdWxlc01vZHVsZSBmcm9tICcuLi9ydWxlcyc7XG5cbmltcG9ydCBBdHRhY2hTdXBwb3J0IGZyb20gJy4vQXR0YWNoU3VwcG9ydCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBSdWxlc01vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAnYXR0YWNoU3VwcG9ydCcgXSxcbiAgYXR0YWNoU3VwcG9ydDogWyAndHlwZScsIEF0dGFjaFN1cHBvcnQgXVxufTtcbiIsImltcG9ydCB7XG4gIGFzVFJCTCxcbiAgZ2V0TWlkXG59IGZyb20gJy4uLy4uL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHsgREVGQVVMVF9ESVNUQU5DRSB9IGZyb20gJy4vQXV0b1BsYWNlVXRpbCc7XG5cbnZhciBMT1dfUFJJT1JJVFkgPSAxMDA7XG5cblxuLyoqXG4gKiBBIHNlcnZpY2UgdGhhdCBwbGFjZXMgZWxlbWVudHMgY29ubmVjdGVkIHRvIGV4aXN0aW5nIG9uZXNcbiAqIHRvIGFuIGFwcHJvcHJpYXRlIHBvc2l0aW9uIGluIGFuIF9hdXRvbWF0ZWRfIGZhc2hpb24uXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEF1dG9QbGFjZShldmVudEJ1cywgbW9kZWxpbmcpIHtcblxuICBldmVudEJ1cy5vbignYXV0b1BsYWNlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgc291cmNlID0gY29udGV4dC5zb3VyY2U7XG5cbiAgICByZXR1cm4gZ2V0TmV3U2hhcGVQb3NpdGlvbihzb3VyY2UsIHNoYXBlKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFwcGVuZCBzaGFwZSB0byBzb3VyY2UgYXQgYXBwcm9wcmlhdGUgcG9zaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBzb3VyY2VcbiAgICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gICAqXG4gICAqIEByZXR1cm4ge2Rqcy5tb2RlbC5TaGFwZX0gYXBwZW5kZWQgc2hhcGVcbiAgICovXG4gIHRoaXMuYXBwZW5kID0gZnVuY3Rpb24oc291cmNlLCBzaGFwZSwgaGludHMpIHtcblxuICAgIGV2ZW50QnVzLmZpcmUoJ2F1dG9QbGFjZS5zdGFydCcsIHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgc2hhcGU6IHNoYXBlXG4gICAgfSk7XG5cbiAgICAvLyBhbGxvdyBvdGhlcnMgdG8gcHJvdmlkZSB0aGUgcG9zaXRpb25cbiAgICB2YXIgcG9zaXRpb24gPSBldmVudEJ1cy5maXJlKCdhdXRvUGxhY2UnLCB7XG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHNoYXBlOiBzaGFwZVxuICAgIH0pO1xuXG4gICAgdmFyIG5ld1NoYXBlID0gbW9kZWxpbmcuYXBwZW5kU2hhcGUoc291cmNlLCBzaGFwZSwgcG9zaXRpb24sIHNvdXJjZS5wYXJlbnQsIGhpbnRzKTtcblxuICAgIGV2ZW50QnVzLmZpcmUoJ2F1dG9QbGFjZS5lbmQnLCB7XG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHNoYXBlOiBuZXdTaGFwZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ld1NoYXBlO1xuICB9O1xuXG59XG5cbkF1dG9QbGFjZS4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuLyoqXG4gKiBGaW5kIHRoZSBuZXcgcG9zaXRpb24gZm9yIHRoZSB0YXJnZXQgZWxlbWVudCB0b1xuICogY29ubmVjdCB0byBzb3VyY2UuXG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLlNoYXBlfSBzb3VyY2VcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5TaGFwZX0gZWxlbWVudFxuICogQHBhcmFtICB7T2JqZWN0fSBbaGludHNdXG4gKiBAcGFyYW0gIHtPYmplY3R9IFtoaW50cy5kZWZhdWx0RGlzdGFuY2VdXG4gKlxuICogQHJldHVybnMge1BvaW50fVxuICovXG5mdW5jdGlvbiBnZXROZXdTaGFwZVBvc2l0aW9uKHNvdXJjZSwgZWxlbWVudCwgaGludHMpIHtcbiAgaWYgKCFoaW50cykge1xuICAgIGhpbnRzID0ge307XG4gIH1cblxuICB2YXIgZGlzdGFuY2UgPSBoaW50cy5kZWZhdWx0RGlzdGFuY2UgfHwgREVGQVVMVF9ESVNUQU5DRTtcblxuICB2YXIgc291cmNlTWlkID0gZ2V0TWlkKHNvdXJjZSksXG4gICAgICBzb3VyY2VUcmJsID0gYXNUUkJMKHNvdXJjZSk7XG5cbiAgLy8gc2ltcGx5IHB1dCBlbGVtZW50IHJpZ2h0IG5leHQgdG8gc291cmNlXG4gIHJldHVybiB7XG4gICAgeDogc291cmNlVHJibC5yaWdodCArIGRpc3RhbmNlICsgZWxlbWVudC53aWR0aCAvIDIsXG4gICAgeTogc291cmNlTWlkLnlcbiAgfTtcbn0iLCIvKipcbiAqIFNlbGVjdCBlbGVtZW50IGFmdGVyIGF1dG8gcGxhY2VtZW50LlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge1NlbGVjdGlvbn0gc2VsZWN0aW9uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEF1dG9QbGFjZVNlbGVjdGlvbkJlaGF2aW9yKGV2ZW50QnVzLCBzZWxlY3Rpb24pIHtcblxuICBldmVudEJ1cy5vbignYXV0b1BsYWNlLmVuZCcsIDUwMCwgZnVuY3Rpb24oZSkge1xuICAgIHNlbGVjdGlvbi5zZWxlY3QoZS5zaGFwZSk7XG4gIH0pO1xuXG59XG5cbkF1dG9QbGFjZVNlbGVjdGlvbkJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdzZWxlY3Rpb24nXG5dOyIsImltcG9ydCB7XG4gIGFzVFJCTCxcbiAgZ2V0T3JpZW50YXRpb24sXG4gIGdldE1pZFxufSBmcm9tICcuLi8uLi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIGZpbmQsXG4gIHJlZHVjZVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbi8vIHBhZGRpbmcgdG8gZGV0ZWN0IGVsZW1lbnQgcGxhY2VtZW50XG52YXIgUExBQ0VNRU5UX0RFVEVDVElPTl9QQUQgPSAxMDtcblxuZXhwb3J0IHZhciBERUZBVUxUX0RJU1RBTkNFID0gNTA7XG5cbnZhciBERUZBVUxUX01BWF9ESVNUQU5DRSA9IDI1MDtcblxuXG4vKipcbiAqIEdldCBmcmVlIHBvc2l0aW9uIHN0YXJ0aW5nIGZyb20gZ2l2ZW4gcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNvdXJjZVxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IGVsZW1lbnRcbiAqIEBwYXJhbSB7UG9pbnR9IHBvc2l0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZXROZXh0UG9zaXRpb25cbiAqXG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRGcmVlUG9zaXRpb24oc291cmNlLCBlbGVtZW50LCBwb3NpdGlvbiwgZ2V0TmV4dFBvc2l0aW9uKSB7XG4gIHZhciBjb25uZWN0ZWRBdFBvc2l0aW9uO1xuXG4gIHdoaWxlICgoY29ubmVjdGVkQXRQb3NpdGlvbiA9IGdldENvbm5lY3RlZEF0UG9zaXRpb24oc291cmNlLCBwb3NpdGlvbiwgZWxlbWVudCkpKSB7XG4gICAgcG9zaXRpb24gPSBnZXROZXh0UG9zaXRpb24oZWxlbWVudCwgcG9zaXRpb24sIGNvbm5lY3RlZEF0UG9zaXRpb24pO1xuICB9XG5cbiAgcmV0dXJuIHBvc2l0aW9uO1xufVxuXG4vKipcbiAqIFJldHVybnMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG5leHQgcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG5leHRQb3NpdGlvbkRpcmVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFtuZXh0UG9zaXRpb25EaXJlY3Rpb24ueF1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbbmV4dFBvc2l0aW9uRGlyZWN0aW9uLnldXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVHZXROZXh0UG9zaXRpb24obmV4dFBvc2l0aW9uRGlyZWN0aW9uKSB7XG4gIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBwcmV2aW91c1Bvc2l0aW9uLCBjb25uZWN0ZWRBdFBvc2l0aW9uKSB7XG4gICAgdmFyIG5leHRQb3NpdGlvbiA9IHtcbiAgICAgIHg6IHByZXZpb3VzUG9zaXRpb24ueCxcbiAgICAgIHk6IHByZXZpb3VzUG9zaXRpb24ueVxuICAgIH07XG5cbiAgICBbICd4JywgJ3knIF0uZm9yRWFjaChmdW5jdGlvbihheGlzKSB7XG5cbiAgICAgIHZhciBuZXh0UG9zaXRpb25EaXJlY3Rpb25Gb3JBeGlzID0gbmV4dFBvc2l0aW9uRGlyZWN0aW9uWyBheGlzIF07XG5cbiAgICAgIGlmICghbmV4dFBvc2l0aW9uRGlyZWN0aW9uRm9yQXhpcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBkaW1lbnNpb24gPSBheGlzID09PSAneCcgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG5cbiAgICAgIHZhciBtYXJnaW4gPSBuZXh0UG9zaXRpb25EaXJlY3Rpb25Gb3JBeGlzLm1hcmdpbixcbiAgICAgICAgICBtaW5EaXN0YW5jZSA9IG5leHRQb3NpdGlvbkRpcmVjdGlvbkZvckF4aXMubWluRGlzdGFuY2U7XG5cbiAgICAgIGlmIChtYXJnaW4gPCAwKSB7XG4gICAgICAgIG5leHRQb3NpdGlvblsgYXhpcyBdID0gTWF0aC5taW4oXG4gICAgICAgICAgY29ubmVjdGVkQXRQb3NpdGlvblsgYXhpcyBdICsgbWFyZ2luIC0gZWxlbWVudFsgZGltZW5zaW9uIF0gLyAyLFxuICAgICAgICAgIHByZXZpb3VzUG9zaXRpb25bIGF4aXMgXSAtIG1pbkRpc3RhbmNlICsgbWFyZ2luXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0UG9zaXRpb25bIGF4aXMgXSA9IE1hdGgubWF4KFxuICAgICAgICAgIGNvbm5lY3RlZEF0UG9zaXRpb25bIGF4aXMgXSArIGNvbm5lY3RlZEF0UG9zaXRpb25bIGRpbWVuc2lvbiBdICsgbWFyZ2luICsgZWxlbWVudFsgZGltZW5zaW9uIF0gLyAyLFxuICAgICAgICAgIHByZXZpb3VzUG9zaXRpb25bIGF4aXMgXSArIG1pbkRpc3RhbmNlICsgbWFyZ2luXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV4dFBvc2l0aW9uO1xuICB9O1xufVxuXG4vKipcbiAqIFJldHVybiB0YXJnZXQgYXQgZ2l2ZW4gcG9zaXRpb24sIGlmIGRlZmluZWQuXG4gKlxuICogVGhpcyB0YWtlcyBjb25uZWN0ZWQgZWxlbWVudHMgZnJvbSBob3N0IGFuZCBhdHRhY2hlcnNcbiAqIGludG8gYWNjb3VudCwgdG9vLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29ubmVjdGVkQXRQb3NpdGlvbihzb3VyY2UsIHBvc2l0aW9uLCBlbGVtZW50KSB7XG5cbiAgdmFyIGJvdW5kcyA9IHtcbiAgICB4OiBwb3NpdGlvbi54IC0gKGVsZW1lbnQud2lkdGggLyAyKSxcbiAgICB5OiBwb3NpdGlvbi55IC0gKGVsZW1lbnQuaGVpZ2h0IC8gMiksXG4gICAgd2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgaGVpZ2h0OiBlbGVtZW50LmhlaWdodFxuICB9O1xuXG4gIHZhciBjbG9zdXJlID0gZ2V0QXV0b1BsYWNlQ2xvc3VyZShzb3VyY2UsIGVsZW1lbnQpO1xuXG4gIHJldHVybiBmaW5kKGNsb3N1cmUsIGZ1bmN0aW9uKHRhcmdldCkge1xuXG4gICAgaWYgKHRhcmdldCA9PT0gZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBvcmllbnRhdGlvbiA9IGdldE9yaWVudGF0aW9uKHRhcmdldCwgYm91bmRzLCBQTEFDRU1FTlRfREVURUNUSU9OX1BBRCk7XG5cbiAgICByZXR1cm4gb3JpZW50YXRpb24gPT09ICdpbnRlcnNlY3QnO1xuICB9KTtcbn1cblxuLyoqXG4qIENvbXB1dGUgb3B0aW1hbCBkaXN0YW5jZSBiZXR3ZWVuIHNvdXJjZSBhbmQgdGFyZ2V0IGJhc2VkIG9uIGV4aXN0aW5nIGNvbm5lY3Rpb25zIHRvIGFuZCBmcm9tIHNvdXJjZS5cbiogQXNzdW1lcyBsZWZ0LXRvLXJpZ2h0IGFuZCB0b3AtdG8tZG93biBtb2RlbGluZy5cbipcbiogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNvdXJjZVxuKiBAcGFyYW0ge09iamVjdH0gW2hpbnRzXVxuKiBAcGFyYW0ge251bWJlcn0gW2hpbnRzLmRlZmF1bHREaXN0YW5jZV1cbiogQHBhcmFtIHtzdHJpbmd9IFtoaW50cy5kaXJlY3Rpb25dXG4qIEBwYXJhbSB7RnVuY3Rpb259IFtoaW50cy5maWx0ZXJdXG4qIEBwYXJhbSB7RnVuY3Rpb259IFtoaW50cy5nZXRXZWlnaHRdXG4qIEBwYXJhbSB7bnVtYmVyfSBbaGludHMubWF4RGlzdGFuY2VdXG4qIEBwYXJhbSB7c3RyaW5nfSBbaGludHMucmVmZXJlbmNlXVxuKlxuKiBAcmV0dXJuIHtudW1iZXJ9XG4qL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbm5lY3RlZERpc3RhbmNlKHNvdXJjZSwgaGludHMpIHtcbiAgaWYgKCFoaW50cykge1xuICAgIGhpbnRzID0ge307XG4gIH1cblxuICAvLyB0YXJnZXRzID4gc291cmNlcyBieSBkZWZhdWx0XG4gIGZ1bmN0aW9uIGdldERlZmF1bHRXZWlnaHQoY29ubmVjdGlvbikge1xuICAgIHJldHVybiBjb25uZWN0aW9uLnNvdXJjZSA9PT0gc291cmNlID8gMSA6IC0xO1xuICB9XG5cbiAgdmFyIGRlZmF1bHREaXN0YW5jZSA9IGhpbnRzLmRlZmF1bHREaXN0YW5jZSB8fCBERUZBVUxUX0RJU1RBTkNFLFxuICAgICAgZGlyZWN0aW9uID0gaGludHMuZGlyZWN0aW9uIHx8ICdlJyxcbiAgICAgIGZpbHRlciA9IGhpbnRzLmZpbHRlcixcbiAgICAgIGdldFdlaWdodCA9IGhpbnRzLmdldFdlaWdodCB8fCBnZXREZWZhdWx0V2VpZ2h0LFxuICAgICAgbWF4RGlzdGFuY2UgPSBoaW50cy5tYXhEaXN0YW5jZSB8fCBERUZBVUxUX01BWF9ESVNUQU5DRSxcbiAgICAgIHJlZmVyZW5jZSA9IGhpbnRzLnJlZmVyZW5jZSB8fCAnc3RhcnQnO1xuXG4gIGlmICghZmlsdGVyKSB7XG4gICAgZmlsdGVyID0gbm9uZUZpbHRlcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERpc3RhbmNlKGEsIGIpIHtcbiAgICBpZiAoZGlyZWN0aW9uID09PSAnbicpIHtcbiAgICAgIGlmIChyZWZlcmVuY2UgPT09ICdzdGFydCcpIHtcbiAgICAgICAgcmV0dXJuIGFzVFJCTChhKS50b3AgLSBhc1RSQkwoYikuYm90dG9tO1xuICAgICAgfSBlbHNlIGlmIChyZWZlcmVuY2UgPT09ICdjZW50ZXInKSB7XG4gICAgICAgIHJldHVybiBhc1RSQkwoYSkudG9wIC0gZ2V0TWlkKGIpLnk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXNUUkJMKGEpLnRvcCAtIGFzVFJCTChiKS50b3A7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICd3Jykge1xuICAgICAgaWYgKHJlZmVyZW5jZSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICByZXR1cm4gYXNUUkJMKGEpLmxlZnQgLSBhc1RSQkwoYikucmlnaHQ7XG4gICAgICB9IGVsc2UgaWYgKHJlZmVyZW5jZSA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgcmV0dXJuIGFzVFJCTChhKS5sZWZ0IC0gZ2V0TWlkKGIpLng7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXNUUkJMKGEpLmxlZnQgLSBhc1RSQkwoYikubGVmdDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3MnKSB7XG4gICAgICBpZiAocmVmZXJlbmNlID09PSAnc3RhcnQnKSB7XG4gICAgICAgIHJldHVybiBhc1RSQkwoYikudG9wIC0gYXNUUkJMKGEpLmJvdHRvbTtcbiAgICAgIH0gZWxzZSBpZiAocmVmZXJlbmNlID09PSAnY2VudGVyJykge1xuICAgICAgICByZXR1cm4gZ2V0TWlkKGIpLnkgLSBhc1RSQkwoYSkuYm90dG9tO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFzVFJCTChiKS5ib3R0b20gLSBhc1RSQkwoYSkuYm90dG9tO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVmZXJlbmNlID09PSAnc3RhcnQnKSB7XG4gICAgICAgIHJldHVybiBhc1RSQkwoYikubGVmdCAtIGFzVFJCTChhKS5yaWdodDtcbiAgICAgIH0gZWxzZSBpZiAocmVmZXJlbmNlID09PSAnY2VudGVyJykge1xuICAgICAgICByZXR1cm4gZ2V0TWlkKGIpLnggLSBhc1RSQkwoYSkucmlnaHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXNUUkJMKGIpLnJpZ2h0IC0gYXNUUkJMKGEpLnJpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBzb3VyY2VzRGlzdGFuY2VzID0gc291cmNlLmluY29taW5nXG4gICAgLmZpbHRlcihmaWx0ZXIpXG4gICAgLm1hcChmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICB2YXIgd2VpZ2h0ID0gZ2V0V2VpZ2h0KGNvbm5lY3Rpb24pO1xuXG4gICAgICB2YXIgZGlzdGFuY2UgPSB3ZWlnaHQgPCAwXG4gICAgICAgID8gZ2V0RGlzdGFuY2UoY29ubmVjdGlvbi5zb3VyY2UsIHNvdXJjZSlcbiAgICAgICAgOiBnZXREaXN0YW5jZShzb3VyY2UsIGNvbm5lY3Rpb24uc291cmNlKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGNvbm5lY3Rpb24uc291cmNlLmlkLFxuICAgICAgICBkaXN0YW5jZTogZGlzdGFuY2UsXG4gICAgICAgIHdlaWdodDogd2VpZ2h0XG4gICAgICB9O1xuICAgIH0pO1xuXG4gIHZhciB0YXJnZXRzRGlzdGFuY2VzID0gc291cmNlLm91dGdvaW5nXG4gICAgLmZpbHRlcihmaWx0ZXIpXG4gICAgLm1hcChmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICB2YXIgd2VpZ2h0ID0gZ2V0V2VpZ2h0KGNvbm5lY3Rpb24pO1xuXG4gICAgICB2YXIgZGlzdGFuY2UgPSB3ZWlnaHQgPiAwXG4gICAgICAgID8gZ2V0RGlzdGFuY2Uoc291cmNlLCBjb25uZWN0aW9uLnRhcmdldClcbiAgICAgICAgOiBnZXREaXN0YW5jZShjb25uZWN0aW9uLnRhcmdldCwgc291cmNlKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGNvbm5lY3Rpb24udGFyZ2V0LmlkLFxuICAgICAgICBkaXN0YW5jZTogZGlzdGFuY2UsXG4gICAgICAgIHdlaWdodDogd2VpZ2h0XG4gICAgICB9O1xuICAgIH0pO1xuXG4gIHZhciBkaXN0YW5jZXMgPSBzb3VyY2VzRGlzdGFuY2VzLmNvbmNhdCh0YXJnZXRzRGlzdGFuY2VzKS5yZWR1Y2UoZnVuY3Rpb24oYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkge1xuICAgIGFjY3VtdWxhdG9yWyBjdXJyZW50VmFsdWUuaWQgKyAnX193ZWlnaHRfJyArIGN1cnJlbnRWYWx1ZS53ZWlnaHQgXSA9IGN1cnJlbnRWYWx1ZTtcblxuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfSwge30pO1xuXG4gIHZhciBkaXN0YW5jZXNHcm91cGVkID0gcmVkdWNlKGRpc3RhbmNlcywgZnVuY3Rpb24oYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkge1xuICAgIHZhciBkaXN0YW5jZSA9IGN1cnJlbnRWYWx1ZS5kaXN0YW5jZSxcbiAgICAgICAgd2VpZ2h0ID0gY3VycmVudFZhbHVlLndlaWdodDtcblxuICAgIGlmIChkaXN0YW5jZSA8IDAgfHwgZGlzdGFuY2UgPiBtYXhEaXN0YW5jZSkge1xuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgIH1cblxuICAgIGlmICghYWNjdW11bGF0b3JbIFN0cmluZyhkaXN0YW5jZSkgXSkge1xuICAgICAgYWNjdW11bGF0b3JbIFN0cmluZyhkaXN0YW5jZSkgXSA9IDA7XG4gICAgfVxuXG4gICAgYWNjdW11bGF0b3JbIFN0cmluZyhkaXN0YW5jZSkgXSArPSAxICogd2VpZ2h0O1xuXG4gICAgaWYgKCFhY2N1bXVsYXRvci5kaXN0YW5jZSB8fCBhY2N1bXVsYXRvclsgYWNjdW11bGF0b3IuZGlzdGFuY2UgXSA8IGFjY3VtdWxhdG9yWyBTdHJpbmcoZGlzdGFuY2UpIF0pIHtcbiAgICAgIGFjY3VtdWxhdG9yLmRpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIGRpc3RhbmNlc0dyb3VwZWQuZGlzdGFuY2UgfHwgZGVmYXVsdERpc3RhbmNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgYWxsIGNvbm5lY3RlZCBlbGVtZW50cyBhcm91bmQgdGhlIGdpdmVuIHNvdXJjZS5cbiAqXG4gKiBUaGlzIGluY2x1ZGVzOlxuICpcbiAqICAgLSBjb25uZWN0ZWQgZWxlbWVudHNcbiAqICAgLSBob3N0IGNvbm5lY3RlZCBlbGVtZW50c1xuICogICAtIGF0dGFjaGVycyBjb25uZWN0ZWQgZWxlbWVudHNcbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuU2hhcGV9IHNvdXJjZVxuICpcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5TaGFwZT59XG4gKi9cbmZ1bmN0aW9uIGdldEF1dG9QbGFjZUNsb3N1cmUoc291cmNlKSB7XG5cbiAgdmFyIGFsbENvbm5lY3RlZCA9IGdldENvbm5lY3RlZChzb3VyY2UpO1xuXG4gIGlmIChzb3VyY2UuaG9zdCkge1xuICAgIGFsbENvbm5lY3RlZCA9IGFsbENvbm5lY3RlZC5jb25jYXQoZ2V0Q29ubmVjdGVkKHNvdXJjZS5ob3N0KSk7XG4gIH1cblxuICBpZiAoc291cmNlLmF0dGFjaGVycykge1xuICAgIGFsbENvbm5lY3RlZCA9IGFsbENvbm5lY3RlZC5jb25jYXQoc291cmNlLmF0dGFjaGVycy5yZWR1Y2UoZnVuY3Rpb24oc2hhcGVzLCBhdHRhY2hlcikge1xuICAgICAgcmV0dXJuIHNoYXBlcy5jb25jYXQoZ2V0Q29ubmVjdGVkKGF0dGFjaGVyKSk7XG4gICAgfSwgW10pKTtcbiAgfVxuXG4gIHJldHVybiBhbGxDb25uZWN0ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldENvbm5lY3RlZChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRUYXJnZXRzKGVsZW1lbnQpLmNvbmNhdChnZXRTb3VyY2VzKGVsZW1lbnQpKTtcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlcyhzaGFwZSkge1xuICByZXR1cm4gc2hhcGUuaW5jb21pbmcubWFwKGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICByZXR1cm4gY29ubmVjdGlvbi5zb3VyY2U7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRzKHNoYXBlKSB7XG4gIHJldHVybiBzaGFwZS5vdXRnb2luZy5tYXAoZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgIHJldHVybiBjb25uZWN0aW9uLnRhcmdldDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vbmVGaWx0ZXIoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuIiwiaW1wb3J0IEF1dG9QbGFjZSBmcm9tICcuL0F1dG9QbGFjZSc7XG5pbXBvcnQgQXV0b1BsYWNlU2VsZWN0aW9uQmVoYXZpb3IgZnJvbSAnLi9BdXRvUGxhY2VTZWxlY3Rpb25CZWhhdmlvcic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ2F1dG9QbGFjZVNlbGVjdGlvbkJlaGF2aW9yJyBdLFxuICBhdXRvUGxhY2U6IFsgJ3R5cGUnLCBBdXRvUGxhY2UgXSxcbiAgYXV0b1BsYWNlU2VsZWN0aW9uQmVoYXZpb3I6IFsgJ3R5cGUnLCBBdXRvUGxhY2VTZWxlY3Rpb25CZWhhdmlvciBdXG59OyIsImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbmltcG9ydCB7IGdldEJCb3ggYXMgZ2V0Qm91bmRpbmdCb3ggfSBmcm9tICcuLi8uLi91dGlsL0VsZW1lbnRzJztcblxuaW1wb3J0IHtcbiAgYXNUUkJMLFxuICBhc0JvdW5kc1xufSBmcm9tICcuLi8uLi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIGFzc2lnbixcbiAgZmxhdHRlbixcbiAgZmluZCxcbiAgZm9yRWFjaCxcbiAgZ3JvdXBCeSxcbiAgaXNBcnJheSxcbiAgbWF0Y2hQYXR0ZXJuLFxuICBwaWNrLFxuICB2YWx1ZXNcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJy4uLy4uL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuXG4vKipcbiAqIEFuIGF1dG8gcmVzaXplIGNvbXBvbmVudCB0aGF0IHRha2VzIGNhcmUgb2YgZXhwYW5kaW5nIGEgcGFyZW50IGVsZW1lbnRcbiAqIGlmIGNoaWxkIGVsZW1lbnRzIGFyZSBjcmVhdGVkIG9yIG1vdmVkIGNsb3NlIHRoZSBwYXJlbnRzIGVkZ2UuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKiBAcGFyYW0ge1J1bGVzfSBydWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBdXRvUmVzaXplKGV2ZW50QnVzLCBlbGVtZW50UmVnaXN0cnksIG1vZGVsaW5nLCBydWxlcykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gIHRoaXMuX3J1bGVzID0gcnVsZXM7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFsgJ3NoYXBlLmNyZWF0ZScgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCB8fCBjb250ZXh0Lm5ld1BhcmVudDtcblxuICAgIGlmIChoaW50cy5hdXRvUmVzaXplID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYuX2V4cGFuZChbIHNoYXBlIF0sIHBhcmVudCk7XG4gIH0pO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFsgJ2VsZW1lbnRzLm1vdmUnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBlbGVtZW50cyA9IGZsYXR0ZW4odmFsdWVzKGNvbnRleHQuY2xvc3VyZS50b3BMZXZlbCkpLFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHM7XG5cbiAgICB2YXIgYXV0b1Jlc2l6ZSA9IGhpbnRzID8gaGludHMuYXV0b1Jlc2l6ZSA6IHRydWU7XG5cbiAgICBpZiAoYXV0b1Jlc2l6ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZXhwYW5kaW5ncyA9IGdyb3VwQnkoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50LnBhcmVudC5pZDtcbiAgICB9KTtcblxuICAgIGZvckVhY2goZXhwYW5kaW5ncywgZnVuY3Rpb24oZWxlbWVudHMsIHBhcmVudElkKSB7XG5cbiAgICAgIC8vIG9wdGlvbmFsbHkgZmlsdGVyIGVsZW1lbnRzIHRvIGJlIGNvbnNpZGVyZWQgd2hlbiByZXNpemluZ1xuICAgICAgaWYgKGlzQXJyYXkoYXV0b1Jlc2l6ZSkpIHtcbiAgICAgICAgZWxlbWVudHMgPSBlbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgIHJldHVybiBmaW5kKGF1dG9SZXNpemUsIG1hdGNoUGF0dGVybih7IGlkOiBlbGVtZW50LmlkIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHNlbGYuX2V4cGFuZChlbGVtZW50cywgcGFyZW50SWQpO1xuICAgIH0pO1xuICB9KTtcblxuICB0aGlzLnBvc3RFeGVjdXRlZChbICdzaGFwZS50b2dnbGVDb2xsYXBzZScgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKGhpbnRzICYmIGhpbnRzLmF1dG9SZXNpemUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNoYXBlLmNvbGxhcHNlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYuX2V4cGFuZChzaGFwZS5jaGlsZHJlbiB8fCBbXSwgc2hhcGUpO1xuICB9KTtcblxuICB0aGlzLnBvc3RFeGVjdXRlZChbICdzaGFwZS5yZXNpemUnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgcGFyZW50ID0gc2hhcGUucGFyZW50O1xuXG4gICAgaWYgKGhpbnRzICYmIGhpbnRzLmF1dG9SZXNpemUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgc2VsZi5fZXhwYW5kKFsgc2hhcGUgXSwgcGFyZW50KTtcbiAgICB9XG4gIH0pO1xuXG59XG5cbkF1dG9SZXNpemUuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdtb2RlbGluZycsXG4gICdydWxlcydcbl07XG5cbmluaGVyaXRzKEF1dG9SZXNpemUsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIG5ldyBib3VuZHMgb2YgdGhlIHRhcmdldCBzaGFwZSwgZ2l2ZW5cbiAqIGEgbnVtYmVyIG9mIGVsZW1lbnRzIGhhdmUgYmVlbiBtb3ZlZCBvciBhZGRlZCBpbnRvIHRoZSBwYXJlbnQuXG4gKlxuICogVGhpcyBtZXRob2QgY29uc2lkZXJzIHRoZSBjdXJyZW50IHNpemUsIHRoZSBhZGRlZCBlbGVtZW50cyBhcyB3ZWxsIGFzXG4gKiB0aGUgcHJvdmlkZWQgcGFkZGluZyBmb3IgdGhlIG5ldyBib3VuZHMuXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fSBlbGVtZW50c1xuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHRhcmdldFxuICovXG5BdXRvUmVzaXplLnByb3RvdHlwZS5fZ2V0T3B0aW1hbEJvdW5kcyA9IGZ1bmN0aW9uKGVsZW1lbnRzLCB0YXJnZXQpIHtcblxuICB2YXIgb2Zmc2V0ID0gdGhpcy5nZXRPZmZzZXQodGFyZ2V0KSxcbiAgICAgIHBhZGRpbmcgPSB0aGlzLmdldFBhZGRpbmcodGFyZ2V0KTtcblxuICB2YXIgZWxlbWVudHNUcmJsID0gYXNUUkJMKGdldEJvdW5kaW5nQm94KGVsZW1lbnRzKSksXG4gICAgICB0YXJnZXRUcmJsID0gYXNUUkJMKHRhcmdldCk7XG5cbiAgdmFyIG5ld1RyYmwgPSB7fTtcblxuICBpZiAoZWxlbWVudHNUcmJsLnRvcCAtIHRhcmdldFRyYmwudG9wIDwgcGFkZGluZy50b3ApIHtcbiAgICBuZXdUcmJsLnRvcCA9IGVsZW1lbnRzVHJibC50b3AgLSBvZmZzZXQudG9wO1xuICB9XG5cbiAgaWYgKGVsZW1lbnRzVHJibC5sZWZ0IC0gdGFyZ2V0VHJibC5sZWZ0IDwgcGFkZGluZy5sZWZ0KSB7XG4gICAgbmV3VHJibC5sZWZ0ID0gZWxlbWVudHNUcmJsLmxlZnQgLSBvZmZzZXQubGVmdDtcbiAgfVxuXG4gIGlmICh0YXJnZXRUcmJsLnJpZ2h0IC0gZWxlbWVudHNUcmJsLnJpZ2h0IDwgcGFkZGluZy5yaWdodCkge1xuICAgIG5ld1RyYmwucmlnaHQgPSBlbGVtZW50c1RyYmwucmlnaHQgKyBvZmZzZXQucmlnaHQ7XG4gIH1cblxuICBpZiAodGFyZ2V0VHJibC5ib3R0b20gLSBlbGVtZW50c1RyYmwuYm90dG9tIDwgcGFkZGluZy5ib3R0b20pIHtcbiAgICBuZXdUcmJsLmJvdHRvbSA9IGVsZW1lbnRzVHJibC5ib3R0b20gKyBvZmZzZXQuYm90dG9tO1xuICB9XG5cbiAgcmV0dXJuIGFzQm91bmRzKGFzc2lnbih7fSwgdGFyZ2V0VHJibCwgbmV3VHJibCkpO1xufTtcblxuXG4vKipcbiAqIEV4cGFuZCB0aGUgdGFyZ2V0IHNoYXBlIHJlc3BlY3RpbmcgcnVsZXMsIG9mZnNldCBhbmQgcGFkZGluZ1xuICpcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlPn0gZWxlbWVudHNcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfHN0cmluZ30gdGFyZ2V0fHRhcmdldElkXG4gKi9cbkF1dG9SZXNpemUucHJvdG90eXBlLl9leHBhbmQgPSBmdW5jdGlvbihlbGVtZW50cywgdGFyZ2V0KSB7XG5cbiAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgdGFyZ2V0ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldCh0YXJnZXQpO1xuICB9XG5cbiAgdmFyIGFsbG93ZWQgPSB0aGlzLl9ydWxlcy5hbGxvd2VkKCdlbGVtZW50LmF1dG9SZXNpemUnLCB7XG4gICAgZWxlbWVudHM6IGVsZW1lbnRzLFxuICAgIHRhcmdldDogdGFyZ2V0XG4gIH0pO1xuXG4gIGlmICghYWxsb3dlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGNhbGN1bGF0ZSB0aGUgbmV3IGJvdW5kc1xuICB2YXIgbmV3Qm91bmRzID0gdGhpcy5fZ2V0T3B0aW1hbEJvdW5kcyhlbGVtZW50cywgdGFyZ2V0KTtcblxuICBpZiAoIWJvdW5kc0NoYW5nZWQobmV3Qm91bmRzLCB0YXJnZXQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHJlc2l6ZURpcmVjdGlvbnMgPSBnZXRSZXNpemVEaXJlY3Rpb25zKHBpY2sodGFyZ2V0LCBbICd4JywgJ3knLCAnd2lkdGgnLCAnaGVpZ2h0JyBdKSwgbmV3Qm91bmRzKTtcblxuICAvLyByZXNpemUgdGhlIHBhcmVudCBzaGFwZVxuICB0aGlzLnJlc2l6ZSh0YXJnZXQsIG5ld0JvdW5kcywge1xuICAgIGF1dG9SZXNpemU6IHJlc2l6ZURpcmVjdGlvbnNcbiAgfSk7XG5cbiAgdmFyIHBhcmVudCA9IHRhcmdldC5wYXJlbnQ7XG5cbiAgLy8gcmVjdXJzaXZlbHkgZXhwYW5kIHBhcmVudCBlbGVtZW50c1xuICBpZiAocGFyZW50KSB7XG4gICAgdGhpcy5fZXhwYW5kKFsgdGFyZ2V0IF0sIHBhcmVudCk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBHZXQgdGhlIGFtb3VudCB0byBleHBhbmQgdGhlIGdpdmVuIHNoYXBlIGluIGVhY2ggZGlyZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBzaGFwZVxuICpcbiAqIEByZXR1cm4ge1RSQkx9XG4gKi9cbkF1dG9SZXNpemUucHJvdG90eXBlLmdldE9mZnNldCA9IGZ1bmN0aW9uKHNoYXBlKSB7XG4gIHJldHVybiB7IHRvcDogNjAsIGJvdHRvbTogNjAsIGxlZnQ6IDEwMCwgcmlnaHQ6IDEwMCB9O1xufTtcblxuXG4vKipcbiAqIEdldCB0aGUgYWN0aXZhdGlvbiB0aHJlc2hvbGQgZm9yIGVhY2ggc2lkZSBmb3Igd2hpY2hcbiAqIHJlc2l6ZSB0cmlnZ2Vycy5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gc2hhcGVcbiAqXG4gKiBAcmV0dXJuIHtUUkJMfVxuICovXG5BdXRvUmVzaXplLnByb3RvdHlwZS5nZXRQYWRkaW5nID0gZnVuY3Rpb24oc2hhcGUpIHtcbiAgcmV0dXJuIHsgdG9wOiAyLCBib3R0b206IDIsIGxlZnQ6IDE1LCByaWdodDogMTUgfTtcbn07XG5cblxuLyoqXG4gKiBQZXJmb3JtIHRoZSBhY3R1YWwgcmVzaXplIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gc2hhcGVcbiAqIEBwYXJhbSB7Qm91bmRzfSBuZXdCb3VuZHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbaGludHNdXG4gKiBAcGFyYW0ge3N0cmluZ30gW2hpbnRzLmF1dG9SZXNpemVdXG4gKi9cbkF1dG9SZXNpemUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHNoYXBlLCBuZXdCb3VuZHMsIGhpbnRzKSB7XG4gIHRoaXMuX21vZGVsaW5nLnJlc2l6ZVNoYXBlKHNoYXBlLCBuZXdCb3VuZHMsIG51bGwsIGhpbnRzKTtcbn07XG5cblxuZnVuY3Rpb24gYm91bmRzQ2hhbmdlZChuZXdCb3VuZHMsIG9sZEJvdW5kcykge1xuICByZXR1cm4gKFxuICAgIG5ld0JvdW5kcy54ICE9PSBvbGRCb3VuZHMueCB8fFxuICAgIG5ld0JvdW5kcy55ICE9PSBvbGRCb3VuZHMueSB8fFxuICAgIG5ld0JvdW5kcy53aWR0aCAhPT0gb2xkQm91bmRzLndpZHRoIHx8XG4gICAgbmV3Qm91bmRzLmhlaWdodCAhPT0gb2xkQm91bmRzLmhlaWdodFxuICApO1xufVxuXG4vKipcbiAqIEdldCBkaXJlY3Rpb25zIG9mIHJlc2l6ZSBhcyB7bnx3fHN8ZX0gZS5nLiBcIm53XCIuXG4gKlxuICogQHBhcmFtIHtCb3VuZHN9IG9sZEJvdW5kc1xuICogQHBhcmFtIHtCb3VuZHN9IG5ld0JvdW5kc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJlc2l6ZSBkaXJlY3Rpb25zIGFzIHtufHd8c3xlfS5cbiAqL1xuZnVuY3Rpb24gZ2V0UmVzaXplRGlyZWN0aW9ucyhvbGRCb3VuZHMsIG5ld0JvdW5kcykge1xuICB2YXIgZGlyZWN0aW9ucyA9ICcnO1xuXG4gIG9sZEJvdW5kcyA9IGFzVFJCTChvbGRCb3VuZHMpO1xuICBuZXdCb3VuZHMgPSBhc1RSQkwobmV3Qm91bmRzKTtcblxuICBpZiAob2xkQm91bmRzLnRvcCA+IG5ld0JvdW5kcy50b3ApIHtcbiAgICBkaXJlY3Rpb25zID0gZGlyZWN0aW9ucy5jb25jYXQoJ24nKTtcbiAgfVxuXG4gIGlmIChvbGRCb3VuZHMucmlnaHQgPCBuZXdCb3VuZHMucmlnaHQpIHtcbiAgICBkaXJlY3Rpb25zID0gZGlyZWN0aW9ucy5jb25jYXQoJ3cnKTtcbiAgfVxuXG4gIGlmIChvbGRCb3VuZHMuYm90dG9tIDwgbmV3Qm91bmRzLmJvdHRvbSkge1xuICAgIGRpcmVjdGlvbnMgPSBkaXJlY3Rpb25zLmNvbmNhdCgncycpO1xuICB9XG5cbiAgaWYgKG9sZEJvdW5kcy5sZWZ0ID4gbmV3Qm91bmRzLmxlZnQpIHtcbiAgICBkaXJlY3Rpb25zID0gZGlyZWN0aW9ucy5jb25jYXQoJ2UnKTtcbiAgfVxuXG4gIHJldHVybiBkaXJlY3Rpb25zO1xufSIsImltcG9ydCBSdWxlUHJvdmlkZXIgZnJvbSAnLi4vcnVsZXMvUnVsZVByb3ZpZGVyJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuLyoqXG4gKiBUaGlzIGlzIGEgYmFzZSBydWxlIHByb3ZpZGVyIGZvciB0aGUgZWxlbWVudC5hdXRvUmVzaXplIHJ1bGUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEF1dG9SZXNpemVQcm92aWRlcihldmVudEJ1cykge1xuXG4gIFJ1bGVQcm92aWRlci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdGhpcy5hZGRSdWxlKCdlbGVtZW50LmF1dG9SZXNpemUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgcmV0dXJuIHNlbGYuY2FuUmVzaXplKGNvbnRleHQuZWxlbWVudHMsIGNvbnRleHQudGFyZ2V0KTtcbiAgfSk7XG59XG5cbkF1dG9SZXNpemVQcm92aWRlci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07XG5cbmluaGVyaXRzKEF1dG9SZXNpemVQcm92aWRlciwgUnVsZVByb3ZpZGVyKTtcblxuLyoqXG4gKiBOZWVkcyB0byBiZSBpbXBsZW1lbnRlZCBieSBzdWIgY2xhc3NlcyB0byBhbGxvdyBhY3R1YWwgYXV0byByZXNpemVcbiAqXG4gKiBAcGFyYW0gIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fSBlbGVtZW50c1xuICogQHBhcmFtICB7ZGpzLm1vZGVsLlNoYXBlfSB0YXJnZXRcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5BdXRvUmVzaXplUHJvdmlkZXIucHJvdG90eXBlLmNhblJlc2l6ZSA9IGZ1bmN0aW9uKGVsZW1lbnRzLCB0YXJnZXQpIHtcbiAgcmV0dXJuIGZhbHNlO1xufTsiLCJpbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIHRvUG9pbnRcbn0gZnJvbSAnLi4vLi4vdXRpbC9FdmVudCc7XG5cblxuLyoqXG4gKiBJbml0aWF0ZXMgY2FudmFzIHNjcm9sbGluZyBpZiBjdXJyZW50IGN1cnNvciBwb2ludCBpcyBjbG9zZSB0byBhIGJvcmRlci5cbiAqIENhbmNlbGxlZCB3aGVuIGN1cnJlbnQgcG9pbnQgbW92ZXMgYmFjayBpbnNpZGUgdGhlIHNjcm9sbGluZyBib3JkZXJzXG4gKiBvciBjYW5jZWxsZWQgbWFudWFsbHkuXG4gKlxuICogRGVmYXVsdCBvcHRpb25zIDpcbiAqICAgc2Nyb2xsVGhyZXNob2xkSW46IFsgMjAsIDIwLCAyMCwgMjAgXSxcbiAqICAgc2Nyb2xsVGhyZXNob2xkT3V0OiBbIDAsIDAsIDAsIDAgXSxcbiAqICAgc2Nyb2xsUmVwZWF0VGltZW91dDogMTUsXG4gKiAgIHNjcm9sbFN0ZXA6IDEwXG4gKlxuICogVGhyZXNob2xkIG9yZGVyOlxuICogICBbIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSBdXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEF1dG9TY3JvbGwoY29uZmlnLCBldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuXG4gIHRoaXMuX29wdHMgPSBhc3NpZ24oe1xuICAgIHNjcm9sbFRocmVzaG9sZEluOiBbIDIwLCAyMCwgMjAsIDIwIF0sXG4gICAgc2Nyb2xsVGhyZXNob2xkT3V0OiBbIDAsIDAsIDAsIDAgXSxcbiAgICBzY3JvbGxSZXBlYXRUaW1lb3V0OiAxNSxcbiAgICBzY3JvbGxTdGVwOiAxMFxuICB9LCBjb25maWcpO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBldmVudEJ1cy5vbignZHJhZy5tb3ZlJywgZnVuY3Rpb24oZSkge1xuICAgIHZhciBwb2ludCA9IHNlbGYuX3RvQm9yZGVyUG9pbnQoZSk7XG5cbiAgICBzZWxmLnN0YXJ0U2Nyb2xsKHBvaW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnZHJhZy5jbGVhbnVwJyBdLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLnN0b3BTY3JvbGwoKTtcbiAgfSk7XG59XG5cbkF1dG9TY3JvbGwuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5hdXRvU2Nyb2xsJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcydcbl07XG5cblxuLyoqXG4gKiBTdGFydHMgc2Nyb2xsaW5nIGxvb3AuXG4gKiBQb2ludCBpcyBnaXZlbiBpbiBnbG9iYWwgc2NhbGUgaW4gY2FudmFzIGNvbnRhaW5lciBib3ggcGxhbmUuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBwb2ludCB7IHg6IFgsIHk6IFkgfVxuICovXG5BdXRvU2Nyb2xsLnByb3RvdHlwZS5zdGFydFNjcm9sbCA9IGZ1bmN0aW9uKHBvaW50KSB7XG5cbiAgdmFyIGNhbnZhcyA9IHRoaXMuX2NhbnZhcztcbiAgdmFyIG9wdHMgPSB0aGlzLl9vcHRzO1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIGNsaWVudFJlY3QgPSBjYW52YXMuZ2V0Q29udGFpbmVyKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgdmFyIGRpZmYgPSBbXG4gICAgcG9pbnQueCxcbiAgICBwb2ludC55LFxuICAgIGNsaWVudFJlY3Qud2lkdGggLSBwb2ludC54LFxuICAgIGNsaWVudFJlY3QuaGVpZ2h0IC0gcG9pbnQueVxuICBdO1xuXG4gIHRoaXMuc3RvcFNjcm9sbCgpO1xuXG4gIHZhciBkeCA9IDAsXG4gICAgICBkeSA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICBpZiAoYmV0d2VlbihkaWZmW2ldLCBvcHRzLnNjcm9sbFRocmVzaG9sZE91dFtpXSwgb3B0cy5zY3JvbGxUaHJlc2hvbGRJbltpXSkpIHtcbiAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIGR4ID0gb3B0cy5zY3JvbGxTdGVwO1xuICAgICAgfSBlbHNlIGlmIChpID09IDEpIHtcbiAgICAgICAgZHkgPSBvcHRzLnNjcm9sbFN0ZXA7XG4gICAgICB9IGVsc2UgaWYgKGkgPT0gMikge1xuICAgICAgICBkeCA9IC1vcHRzLnNjcm9sbFN0ZXA7XG4gICAgICB9IGVsc2UgaWYgKGkgPT0gMykge1xuICAgICAgICBkeSA9IC1vcHRzLnNjcm9sbFN0ZXA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGR4ICE9PSAwIHx8IGR5ICE9PSAwKSB7XG4gICAgY2FudmFzLnNjcm9sbCh7IGR4OiBkeCwgZHk6IGR5IH0pO1xuXG4gICAgdGhpcy5fc2Nyb2xsaW5nID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuc3RhcnRTY3JvbGwocG9pbnQpO1xuICAgIH0sIG9wdHMuc2Nyb2xsUmVwZWF0VGltZW91dCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGJldHdlZW4odmFsLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA8IHZhbCAmJiB2YWwgPCBlbmQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuXG4vKipcbiAqIFN0b3BzIHNjcm9sbGluZyBsb29wLlxuICovXG5BdXRvU2Nyb2xsLnByb3RvdHlwZS5zdG9wU2Nyb2xsID0gZnVuY3Rpb24oKSB7XG4gIGNsZWFyVGltZW91dCh0aGlzLl9zY3JvbGxpbmcpO1xufTtcblxuXG4vKipcbiAqIE92ZXJyaWRlcyBkZWZhdWx0cyBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICovXG5BdXRvU2Nyb2xsLnByb3RvdHlwZS5zZXRPcHRpb25zID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICB0aGlzLl9vcHRzID0gYXNzaWduKHt9LCB0aGlzLl9vcHRzLCBvcHRpb25zKTtcbn07XG5cblxuLyoqXG4gKiBDb252ZXJ0cyBldmVudCB0byBhIHBvaW50IGluIGNhbnZhcyBjb250YWluZXIgcGxhbmUgaW4gZ2xvYmFsIHNjYWxlLlxuICpcbiAqIEBwYXJhbSAge0V2ZW50fSBldmVudFxuICogQHJldHVybiB7UG9pbnR9XG4gKi9cbkF1dG9TY3JvbGwucHJvdG90eXBlLl90b0JvcmRlclBvaW50ID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgdmFyIGNsaWVudFJlY3QgPSB0aGlzLl9jYW52YXMuX2NvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICB2YXIgZ2xvYmFsUG9zaXRpb24gPSB0b1BvaW50KGV2ZW50Lm9yaWdpbmFsRXZlbnQpO1xuXG4gIHJldHVybiB7XG4gICAgeDogZ2xvYmFsUG9zaXRpb24ueCAtIGNsaWVudFJlY3QubGVmdCxcbiAgICB5OiBnbG9iYWxQb3NpdGlvbi55IC0gY2xpZW50UmVjdC50b3BcbiAgfTtcbn07IiwiaW1wb3J0IERyYWdnaW5nTW9kdWxlIGZyb20gJy4uL2RyYWdnaW5nJztcblxuaW1wb3J0IEF1dG9TY3JvbGwgZnJvbSAnLi9BdXRvU2Nyb2xsJztcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgRHJhZ2dpbmdNb2R1bGUsXG4gIF0sXG4gIF9faW5pdF9fOiBbICdhdXRvU2Nyb2xsJyBdLFxuICBhdXRvU2Nyb2xsOiBbICd0eXBlJywgQXV0b1Njcm9sbCBdXG59OyIsImltcG9ydCB7IGZpbHRlclJlZHVuZGFudFdheXBvaW50cyB9IGZyb20gJy4uLy4uL2xheW91dC9MYXlvdXRVdGlsJztcblxudmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcblxudmFyIFJFQ09OTkVDVF9TVEFSVCA9ICdyZWNvbm5lY3RTdGFydCcsXG4gICAgUkVDT05ORUNUX0VORCA9ICdyZWNvbm5lY3RFbmQnLFxuICAgIFVQREFURV9XQVlQT0lOVFMgPSAndXBkYXRlV2F5cG9pbnRzJztcblxuXG4vKipcbiAqIE1vdmUgYmVuZHBvaW50cyB0aHJvdWdoIGRyYWcgYW5kIGRyb3AgdG8gYWRkL3JlbW92ZSBiZW5kcG9pbnRzIG9yIHJlY29ubmVjdCBjb25uZWN0aW9uLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCZW5kcG9pbnRNb3ZlKGluamVjdG9yLCBldmVudEJ1cywgY2FudmFzLCBkcmFnZ2luZywgcnVsZXMsIG1vZGVsaW5nKSB7XG4gIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG5cbiAgdGhpcy5zdGFydCA9IGZ1bmN0aW9uKGV2ZW50LCBjb25uZWN0aW9uLCBiZW5kcG9pbnRJbmRleCwgaW5zZXJ0KSB7XG4gICAgdmFyIGdmeCA9IGNhbnZhcy5nZXRHcmFwaGljcyhjb25uZWN0aW9uKSxcbiAgICAgICAgc291cmNlID0gY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgIHRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cyxcbiAgICAgICAgdHlwZTtcblxuICAgIGlmICghaW5zZXJ0ICYmIGJlbmRwb2ludEluZGV4ID09PSAwKSB7XG4gICAgICB0eXBlID0gUkVDT05ORUNUX1NUQVJUO1xuICAgIH0gZWxzZVxuICAgIGlmICghaW5zZXJ0ICYmIGJlbmRwb2ludEluZGV4ID09PSB3YXlwb2ludHMubGVuZ3RoIC0gMSkge1xuICAgICAgdHlwZSA9IFJFQ09OTkVDVF9FTkQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGUgPSBVUERBVEVfV0FZUE9JTlRTO1xuICAgIH1cblxuICAgIHZhciBjb21tYW5kID0gdHlwZSA9PT0gVVBEQVRFX1dBWVBPSU5UUyA/ICdjb25uZWN0aW9uLnVwZGF0ZVdheXBvaW50cycgOiAnY29ubmVjdGlvbi5yZWNvbm5lY3QnO1xuXG4gICAgdmFyIGFsbG93ZWQgPSBydWxlcy5hbGxvd2VkKGNvbW1hbmQsIHtcbiAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG5cbiAgICBpZiAoYWxsb3dlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGFsbG93ZWQgPSBydWxlcy5hbGxvd2VkKGNvbW1hbmQsIHtcbiAgICAgICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICAgICAgc291cmNlOiB0YXJnZXQsXG4gICAgICAgIHRhcmdldDogc291cmNlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoYWxsb3dlZCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkcmFnZ2luZy5pbml0KGV2ZW50LCAnYmVuZHBvaW50Lm1vdmUnLCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgICAgIGNvbm5lY3Rpb25HZng6IGdmeCxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGFsbG93ZWQ6IGFsbG93ZWQsXG4gICAgICAgICAgYmVuZHBvaW50SW5kZXg6IGJlbmRwb2ludEluZGV4LFxuICAgICAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgaW5zZXJ0OiBpbnNlcnQsXG4gICAgICAgICAgdHlwZTogdHlwZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgZXZlbnRCdXMub24oJ2JlbmRwb2ludC5tb3ZlLmhvdmVyJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIHNvdXJjZSA9IGNvbm5lY3Rpb24uc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb25uZWN0aW9uLnRhcmdldCxcbiAgICAgICAgaG92ZXIgPSBldmVudC5ob3ZlcixcbiAgICAgICAgdHlwZSA9IGNvbnRleHQudHlwZTtcblxuICAgIC8vIGNhY2hlIGhvdmVyIHN0YXRlXG4gICAgY29udGV4dC5ob3ZlciA9IGhvdmVyO1xuXG4gICAgdmFyIGFsbG93ZWQ7XG5cbiAgICBpZiAoIWhvdmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbW1hbmQgPSB0eXBlID09PSBVUERBVEVfV0FZUE9JTlRTID8gJ2Nvbm5lY3Rpb24udXBkYXRlV2F5cG9pbnRzJyA6ICdjb25uZWN0aW9uLnJlY29ubmVjdCc7XG5cbiAgICBhbGxvd2VkID0gY29udGV4dC5hbGxvd2VkID0gcnVsZXMuYWxsb3dlZChjb21tYW5kLCB7XG4gICAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgICAgc291cmNlOiB0eXBlID09PSBSRUNPTk5FQ1RfU1RBUlQgPyBob3ZlciA6IHNvdXJjZSxcbiAgICAgIHRhcmdldDogdHlwZSA9PT0gUkVDT05ORUNUX0VORCA/IGhvdmVyIDogdGFyZ2V0XG4gICAgfSk7XG5cbiAgICBpZiAoYWxsb3dlZCkge1xuICAgICAgY29udGV4dC5zb3VyY2UgPSB0eXBlID09PSBSRUNPTk5FQ1RfU1RBUlQgPyBob3ZlciA6IHNvdXJjZTtcbiAgICAgIGNvbnRleHQudGFyZ2V0ID0gdHlwZSA9PT0gUkVDT05ORUNUX0VORCA/IGhvdmVyIDogdGFyZ2V0O1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGFsbG93ZWQgPT09IGZhbHNlKSB7XG4gICAgICBhbGxvd2VkID0gY29udGV4dC5hbGxvd2VkID0gcnVsZXMuYWxsb3dlZChjb21tYW5kLCB7XG4gICAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgICAgIHNvdXJjZTogdHlwZSA9PT0gUkVDT05ORUNUX0VORCA/IGhvdmVyIDogdGFyZ2V0LFxuICAgICAgICB0YXJnZXQ6IHR5cGUgPT09IFJFQ09OTkVDVF9TVEFSVCA/IGhvdmVyIDogc291cmNlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoYWxsb3dlZCkge1xuICAgICAgY29udGV4dC5zb3VyY2UgPSB0eXBlID09PSBSRUNPTk5FQ1RfRU5EID8gaG92ZXIgOiB0YXJnZXQ7XG4gICAgICBjb250ZXh0LnRhcmdldCA9IHR5cGUgPT09IFJFQ09OTkVDVF9TVEFSVCA/IGhvdmVyIDogc291cmNlO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnYmVuZHBvaW50Lm1vdmUub3V0JywgJ2JlbmRwb2ludC5tb3ZlLmNsZWFudXAnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0O1xuXG4gICAgY29udGV4dC5ob3ZlciA9IG51bGw7XG4gICAgY29udGV4dC5zb3VyY2UgPSBudWxsO1xuICAgIGNvbnRleHQudGFyZ2V0ID0gbnVsbDtcblxuICAgIGNvbnRleHQuYWxsb3dlZCA9IGZhbHNlO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignYmVuZHBvaW50Lm1vdmUuZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGFsbG93ZWQgPSBjb250ZXh0LmFsbG93ZWQsXG4gICAgICAgIGJlbmRwb2ludEluZGV4ID0gY29udGV4dC5iZW5kcG9pbnRJbmRleCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgaW5zZXJ0ID0gY29udGV4dC5pbnNlcnQsXG4gICAgICAgIG5ld1dheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzLnNsaWNlKCksXG4gICAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgdHlwZSA9IGNvbnRleHQudHlwZSxcbiAgICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9O1xuXG4gICAgLy8gZW5zdXJlIGludGVnZXIgdmFsdWVzIChpbXBvcnRhbnQgaWYgem9vbSBsZXZlbCB3YXMgPiAxIGR1cmluZyBtb3ZlKVxuICAgIHZhciBkb2NraW5nID0ge1xuICAgICAgeDogcm91bmQoZXZlbnQueCksXG4gICAgICB5OiByb3VuZChldmVudC55KVxuICAgIH07XG5cbiAgICBpZiAoIWFsbG93ZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gVVBEQVRFX1dBWVBPSU5UUykge1xuICAgICAgaWYgKGluc2VydCkge1xuXG4gICAgICAgIC8vIGluc2VydCBuZXcgYmVuZHBvaW50XG4gICAgICAgIG5ld1dheXBvaW50cy5zcGxpY2UoYmVuZHBvaW50SW5kZXgsIDAsIGRvY2tpbmcpO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICAvLyBzd2FwIHByZXZpb3VzIHdheXBvaW50IHdpdGggbW92ZWQgb25lXG4gICAgICAgIG5ld1dheXBvaW50c1tiZW5kcG9pbnRJbmRleF0gPSBkb2NraW5nO1xuICAgICAgfVxuXG4gICAgICAvLyBwYXNzIGhpbnRzIGFib3V0IGFjdHVhbCBtb3ZlZCBiZW5kcG9pbnRcbiAgICAgIC8vIHVzZWZ1bCBmb3IgY29ubmVjdGlvbi9sYWJlbCBsYXlvdXRcbiAgICAgIGhpbnRzLmJlbmRwb2ludE1vdmUgPSB7XG4gICAgICAgIGluc2VydDogaW5zZXJ0LFxuICAgICAgICBiZW5kcG9pbnRJbmRleDogYmVuZHBvaW50SW5kZXhcbiAgICAgIH07XG5cbiAgICAgIG5ld1dheXBvaW50cyA9IHRoaXMuY3JvcFdheXBvaW50cyhjb25uZWN0aW9uLCBuZXdXYXlwb2ludHMpO1xuXG4gICAgICBtb2RlbGluZy51cGRhdGVXYXlwb2ludHMoY29ubmVjdGlvbiwgZmlsdGVyUmVkdW5kYW50V2F5cG9pbnRzKG5ld1dheXBvaW50cyksIGhpbnRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGUgPT09IFJFQ09OTkVDVF9TVEFSVCkge1xuICAgICAgICBoaW50cy5kb2NraW5nID0gJ3NvdXJjZSc7XG5cbiAgICAgICAgaWYgKGlzUmV2ZXJzZShjb250ZXh0KSkge1xuICAgICAgICAgIGhpbnRzLmRvY2tpbmcgPSAndGFyZ2V0JztcblxuICAgICAgICAgIGhpbnRzLm5ld1dheXBvaW50cyA9IG5ld1dheXBvaW50cy5yZXZlcnNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gUkVDT05ORUNUX0VORCkge1xuICAgICAgICBoaW50cy5kb2NraW5nID0gJ3RhcmdldCc7XG5cbiAgICAgICAgaWYgKGlzUmV2ZXJzZShjb250ZXh0KSkge1xuICAgICAgICAgIGhpbnRzLmRvY2tpbmcgPSAnc291cmNlJztcblxuICAgICAgICAgIGhpbnRzLm5ld1dheXBvaW50cyA9IG5ld1dheXBvaW50cy5yZXZlcnNlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbW9kZWxpbmcucmVjb25uZWN0KGNvbm5lY3Rpb24sIHNvdXJjZSwgdGFyZ2V0LCBkb2NraW5nLCBoaW50cyk7XG4gICAgfVxuICB9LCB0aGlzKTtcbn1cblxuQmVuZHBvaW50TW92ZS4kaW5qZWN0ID0gW1xuICAnaW5qZWN0b3InLFxuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJyxcbiAgJ2RyYWdnaW5nJyxcbiAgJ3J1bGVzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuQmVuZHBvaW50TW92ZS5wcm90b3R5cGUuY3JvcFdheXBvaW50cyA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIG5ld1dheXBvaW50cykge1xuICB2YXIgY29ubmVjdGlvbkRvY2tpbmcgPSB0aGlzLl9pbmplY3Rvci5nZXQoJ2Nvbm5lY3Rpb25Eb2NraW5nJywgZmFsc2UpO1xuXG4gIGlmICghY29ubmVjdGlvbkRvY2tpbmcpIHtcbiAgICByZXR1cm4gbmV3V2F5cG9pbnRzO1xuICB9XG5cbiAgdmFyIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzO1xuXG4gIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gbmV3V2F5cG9pbnRzO1xuXG4gIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gY29ubmVjdGlvbkRvY2tpbmcuZ2V0Q3JvcHBlZFdheXBvaW50cyhjb25uZWN0aW9uKTtcblxuICBuZXdXYXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cztcblxuICBjb25uZWN0aW9uLndheXBvaW50cyA9IHdheXBvaW50cztcblxuICByZXR1cm4gbmV3V2F5cG9pbnRzO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmV2ZXJzZShjb250ZXh0KSB7XG4gIHZhciBob3ZlciA9IGNvbnRleHQuaG92ZXIsXG4gICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0LFxuICAgICAgdHlwZSA9IGNvbnRleHQudHlwZTtcblxuICBpZiAodHlwZSA9PT0gUkVDT05ORUNUX1NUQVJUKSB7XG4gICAgcmV0dXJuIGhvdmVyICYmIHRhcmdldCAmJiBob3ZlciA9PT0gdGFyZ2V0ICYmIHNvdXJjZSAhPT0gdGFyZ2V0O1xuICB9XG5cbiAgaWYgKHR5cGUgPT09IFJFQ09OTkVDVF9FTkQpIHtcbiAgICByZXR1cm4gaG92ZXIgJiYgc291cmNlICYmIGhvdmVyID09PSBzb3VyY2UgJiYgc291cmNlICE9PSB0YXJnZXQ7XG4gIH1cbn0iLCJpbXBvcnQge1xuICBjbGFzc2VzIGFzIHN2Z0NsYXNzZXMsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQgeyBhZGRCZW5kcG9pbnQgfSBmcm9tICcuL0JlbmRwb2ludFV0aWwnO1xuXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tICcuLi8uLi91dGlsL1N2Z1RyYW5zZm9ybVV0aWwnO1xuXG5pbXBvcnQgeyBpc1JldmVyc2UgfSBmcm9tICcuL0JlbmRwb2ludE1vdmUnO1xuXG52YXIgUkVDT05ORUNUX1NUQVJUID0gJ3JlY29ubmVjdFN0YXJ0JyxcbiAgICBSRUNPTk5FQ1RfRU5EID0gJ3JlY29ubmVjdEVuZCcsXG4gICAgVVBEQVRFX1dBWVBPSU5UUyA9ICd1cGRhdGVXYXlwb2ludHMnO1xuXG52YXIgTUFSS0VSX09LID0gJ2Nvbm5lY3Qtb2snLFxuICAgIE1BUktFUl9OT1RfT0sgPSAnY29ubmVjdC1ub3Qtb2snLFxuICAgIE1BUktFUl9DT05ORUNUX0hPVkVSID0gJ2Nvbm5lY3QtaG92ZXInLFxuICAgIE1BUktFUl9DT05ORUNUX1VQREFUSU5HID0gJ2Rqcy11cGRhdGluZycsXG4gICAgTUFSS0VSX0VMRU1FTlRfSElEREVOID0gJ2Rqcy1lbGVtZW50LWhpZGRlbic7XG5cbnZhciBISUdIX1BSSU9SSVRZID0gMTEwMDtcblxuLyoqXG4gKiBQcmV2aWV3IGNvbm5lY3Rpb24gd2hpbGUgbW92aW5nIGJlbmRwb2ludHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJlbmRwb2ludE1vdmVQcmV2aWV3KGJlbmRwb2ludE1vdmUsIGluamVjdG9yLCBldmVudEJ1cywgY2FudmFzKSB7XG4gIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG5cbiAgdmFyIGNvbm5lY3Rpb25QcmV2aWV3ID0gaW5qZWN0b3IuZ2V0KCdjb25uZWN0aW9uUHJldmlldycsIGZhbHNlKTtcblxuICBldmVudEJ1cy5vbignYmVuZHBvaW50Lm1vdmUuc3RhcnQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgYmVuZHBvaW50SW5kZXggPSBjb250ZXh0LmJlbmRwb2ludEluZGV4LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBpbnNlcnQgPSBjb250ZXh0Lmluc2VydCxcbiAgICAgICAgd2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHMsXG4gICAgICAgIG5ld1dheXBvaW50cyA9IHdheXBvaW50cy5zbGljZSgpO1xuXG4gICAgY29udGV4dC53YXlwb2ludHMgPSB3YXlwb2ludHM7XG5cbiAgICBpZiAoaW5zZXJ0KSB7XG5cbiAgICAgIC8vIGluc2VydCBwbGFjZWhvbGRlciBmb3IgbmV3IGJlbmRwb2ludFxuICAgICAgbmV3V2F5cG9pbnRzLnNwbGljZShiZW5kcG9pbnRJbmRleCwgMCwgeyB4OiBldmVudC54LCB5OiBldmVudC55IH0pO1xuICAgIH1cblxuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gbmV3V2F5cG9pbnRzO1xuXG4gICAgLy8gYWRkIGRyYWdnZXIgZ2Z4XG4gICAgdmFyIGRyYWdnZXJHZnggPSBjb250ZXh0LmRyYWdnZXJHZnggPSBhZGRCZW5kcG9pbnQoY2FudmFzLmdldExheWVyKCdvdmVybGF5cycpKTtcblxuICAgIHN2Z0NsYXNzZXMoZHJhZ2dlckdmeCkuYWRkKCdkanMtZHJhZ2dpbmcnKTtcblxuICAgIGNhbnZhcy5hZGRNYXJrZXIoY29ubmVjdGlvbiwgTUFSS0VSX0VMRU1FTlRfSElEREVOKTtcbiAgICBjYW52YXMuYWRkTWFya2VyKGNvbm5lY3Rpb24sIE1BUktFUl9DT05ORUNUX1VQREFUSU5HKTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2JlbmRwb2ludC5tb3ZlLmhvdmVyJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGFsbG93ZWQgPSBjb250ZXh0LmFsbG93ZWQsXG4gICAgICAgIGhvdmVyID0gY29udGV4dC5ob3ZlcixcbiAgICAgICAgdHlwZSA9IGNvbnRleHQudHlwZTtcblxuICAgIGlmIChob3Zlcikge1xuICAgICAgY2FudmFzLmFkZE1hcmtlcihob3ZlciwgTUFSS0VSX0NPTk5FQ1RfSE9WRVIpO1xuXG4gICAgICBpZiAodHlwZSA9PT0gVVBEQVRFX1dBWVBPSU5UUykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChhbGxvd2VkKSB7XG4gICAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG92ZXIsIE1BUktFUl9OT1RfT0spO1xuICAgICAgICBjYW52YXMuYWRkTWFya2VyKGhvdmVyLCBNQVJLRVJfT0spO1xuICAgICAgfSBlbHNlIGlmIChhbGxvd2VkID09PSBmYWxzZSkge1xuICAgICAgICBjYW52YXMucmVtb3ZlTWFya2VyKGhvdmVyLCBNQVJLRVJfT0spO1xuICAgICAgICBjYW52YXMuYWRkTWFya2VyKGhvdmVyLCBNQVJLRVJfTk9UX09LKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnYmVuZHBvaW50Lm1vdmUub3V0JyxcbiAgICAnYmVuZHBvaW50Lm1vdmUuY2xlYW51cCdcbiAgXSwgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGhvdmVyID0gY29udGV4dC5ob3ZlcixcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XG5cbiAgICBpZiAoaG92ZXIpIHtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG92ZXIsIE1BUktFUl9DT05ORUNUX0hPVkVSKTtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG92ZXIsIHRhcmdldCA/IE1BUktFUl9PSyA6IE1BUktFUl9OT1RfT0spO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2JlbmRwb2ludC5tb3ZlLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgYWxsb3dlZCA9IGNvbnRleHQuYWxsb3dlZCxcbiAgICAgICAgYmVuZHBvaW50SW5kZXggPSBjb250ZXh0LmJlbmRwb2ludEluZGV4LFxuICAgICAgICBkcmFnZ2VyR2Z4ID0gY29udGV4dC5kcmFnZ2VyR2Z4LFxuICAgICAgICBob3ZlciA9IGNvbnRleHQuaG92ZXIsXG4gICAgICAgIHR5cGUgPSBjb250ZXh0LnR5cGUsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIHNvdXJjZSA9IGNvbm5lY3Rpb24uc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb25uZWN0aW9uLnRhcmdldCxcbiAgICAgICAgbmV3V2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHMuc2xpY2UoKSxcbiAgICAgICAgYmVuZHBvaW50ID0geyB4OiBldmVudC54LCB5OiBldmVudC55IH0sXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgZHJhd1ByZXZpZXdIaW50cyA9IHt9O1xuXG4gICAgaWYgKGNvbm5lY3Rpb25QcmV2aWV3KSB7XG4gICAgICBpZiAoaGludHMuY29ubmVjdGlvblN0YXJ0KSB7XG4gICAgICAgIGRyYXdQcmV2aWV3SGludHMuY29ubmVjdGlvblN0YXJ0ID0gaGludHMuY29ubmVjdGlvblN0YXJ0O1xuICAgICAgfVxuXG4gICAgICBpZiAoaGludHMuY29ubmVjdGlvbkVuZCkge1xuICAgICAgICBkcmF3UHJldmlld0hpbnRzLmNvbm5lY3Rpb25FbmQgPSBoaW50cy5jb25uZWN0aW9uRW5kO1xuICAgICAgfVxuXG5cbiAgICAgIGlmICh0eXBlID09PSBSRUNPTk5FQ1RfU1RBUlQpIHtcbiAgICAgICAgaWYgKGlzUmV2ZXJzZShjb250ZXh0KSkge1xuICAgICAgICAgIGRyYXdQcmV2aWV3SGludHMuY29ubmVjdGlvbkVuZCA9IGRyYXdQcmV2aWV3SGludHMuY29ubmVjdGlvbkVuZCB8fCBiZW5kcG9pbnQ7XG5cbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLnNvdXJjZSA9IHRhcmdldDtcbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLnRhcmdldCA9IGhvdmVyIHx8IHNvdXJjZTtcblxuICAgICAgICAgIG5ld1dheXBvaW50cyA9IG5ld1dheXBvaW50cy5yZXZlcnNlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZHJhd1ByZXZpZXdIaW50cy5jb25uZWN0aW9uU3RhcnQgPSBkcmF3UHJldmlld0hpbnRzLmNvbm5lY3Rpb25TdGFydCB8fCBiZW5kcG9pbnQ7XG5cbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLnNvdXJjZSA9IGhvdmVyIHx8IHNvdXJjZTtcbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBSRUNPTk5FQ1RfRU5EKSB7XG4gICAgICAgIGlmIChpc1JldmVyc2UoY29udGV4dCkpIHtcbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLmNvbm5lY3Rpb25TdGFydCA9IGRyYXdQcmV2aWV3SGludHMuY29ubmVjdGlvblN0YXJ0IHx8IGJlbmRwb2ludDtcblxuICAgICAgICAgIGRyYXdQcmV2aWV3SGludHMuc291cmNlID0gaG92ZXIgfHwgdGFyZ2V0O1xuICAgICAgICAgIGRyYXdQcmV2aWV3SGludHMudGFyZ2V0ID0gc291cmNlO1xuXG4gICAgICAgICAgbmV3V2F5cG9pbnRzID0gbmV3V2F5cG9pbnRzLnJldmVyc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkcmF3UHJldmlld0hpbnRzLmNvbm5lY3Rpb25FbmQgPSBkcmF3UHJldmlld0hpbnRzLmNvbm5lY3Rpb25FbmQgfHwgYmVuZHBvaW50O1xuXG4gICAgICAgICAgZHJhd1ByZXZpZXdIaW50cy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgICAgZHJhd1ByZXZpZXdIaW50cy50YXJnZXQgPSBob3ZlciB8fCB0YXJnZXQ7XG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhd1ByZXZpZXdIaW50cy5ub0Nyb3BwaW5nID0gdHJ1ZTtcbiAgICAgICAgZHJhd1ByZXZpZXdIaW50cy5ub0xheW91dCA9IHRydWU7XG4gICAgICAgIG5ld1dheXBvaW50c1sgYmVuZHBvaW50SW5kZXggXSA9IGJlbmRwb2ludDtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgPT09IFVQREFURV9XQVlQT0lOVFMpIHtcbiAgICAgICAgbmV3V2F5cG9pbnRzID0gYmVuZHBvaW50TW92ZS5jcm9wV2F5cG9pbnRzKGNvbm5lY3Rpb24sIG5ld1dheXBvaW50cyk7XG4gICAgICB9XG5cbiAgICAgIGRyYXdQcmV2aWV3SGludHMud2F5cG9pbnRzID0gbmV3V2F5cG9pbnRzO1xuXG4gICAgICBjb25uZWN0aW9uUHJldmlldy5kcmF3UHJldmlldyhjb250ZXh0LCBhbGxvd2VkLCBkcmF3UHJldmlld0hpbnRzKTtcbiAgICB9XG5cbiAgICB0cmFuc2xhdGUoZHJhZ2dlckdmeCwgZXZlbnQueCwgZXZlbnQueSk7XG4gIH0sIHRoaXMpO1xuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnYmVuZHBvaW50Lm1vdmUuZW5kJyxcbiAgICAnYmVuZHBvaW50Lm1vdmUuY2FuY2VsJ1xuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgZHJhZ2dlckdmeCA9IGNvbnRleHQuZHJhZ2dlckdmeCxcbiAgICAgICAgaG92ZXIgPSBjb250ZXh0LmhvdmVyLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgd2F5cG9pbnRzID0gY29udGV4dC53YXlwb2ludHM7XG5cbiAgICBjb25uZWN0aW9uLndheXBvaW50cyA9IHdheXBvaW50cztcblxuICAgIC8vIHJlbW92ZSBkcmFnZ2VyIGdmeFxuICAgIHN2Z1JlbW92ZShkcmFnZ2VyR2Z4KTtcblxuICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoY29ubmVjdGlvbiwgTUFSS0VSX0NPTk5FQ1RfVVBEQVRJTkcpO1xuICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoY29ubmVjdGlvbiwgTUFSS0VSX0VMRU1FTlRfSElEREVOKTtcblxuICAgIGlmIChob3Zlcikge1xuICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihob3ZlciwgTUFSS0VSX09LKTtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG92ZXIsIHRhcmdldCA/IE1BUktFUl9PSyA6IE1BUktFUl9OT1RfT0spO1xuICAgIH1cblxuICAgIGlmIChjb25uZWN0aW9uUHJldmlldykge1xuICAgICAgY29ubmVjdGlvblByZXZpZXcuY2xlYW5VcChjb250ZXh0KTtcbiAgICB9XG4gIH0pO1xufVxuXG5CZW5kcG9pbnRNb3ZlUHJldmlldy4kaW5qZWN0ID0gW1xuICAnYmVuZHBvaW50TW92ZScsXG4gICdpbmplY3RvcicsXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnXG5dOyIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZm9yRWFjaCxcbiAgaXNBcnJheVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7IHNldFNuYXBwZWQgfSBmcm9tICcuLi9zbmFwcGluZy9TbmFwVXRpbCc7XG5cbnZhciBhYnM9IE1hdGguYWJzLFxuICAgIHJvdW5kID0gTWF0aC5yb3VuZDtcblxudmFyIFRPTEVSQU5DRSA9IDEwO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJlbmRwb2ludFNuYXBwaW5nKGV2ZW50QnVzKSB7XG5cbiAgZnVuY3Rpb24gc25hcFRvKHZhbHVlcywgdmFsdWUpIHtcblxuICAgIGlmIChpc0FycmF5KHZhbHVlcykpIHtcbiAgICAgIHZhciBpID0gdmFsdWVzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSkgaWYgKGFicyh2YWx1ZXNbaV0gLSB2YWx1ZSkgPD0gVE9MRVJBTkNFKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZXNbaV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlcyA9ICt2YWx1ZXM7XG4gICAgICB2YXIgcmVtID0gdmFsdWUgJSB2YWx1ZXM7XG5cbiAgICAgIGlmIChyZW0gPCBUT0xFUkFOQ0UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIC0gcmVtO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVtID4gdmFsdWVzIC0gVE9MRVJBTkNFKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAtIHJlbSArIHZhbHVlcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiBtaWQoZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50LndpZHRoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiByb3VuZChlbGVtZW50LndpZHRoIC8gMiArIGVsZW1lbnQueCksXG4gICAgICAgIHk6IHJvdW5kKGVsZW1lbnQuaGVpZ2h0IC8gMiArIGVsZW1lbnQueSlcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8gY29ubmVjdGlvbiBzZWdtZW50IHNuYXBwaW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBmdW5jdGlvbiBnZXRDb25uZWN0aW9uU2VnbWVudFNuYXBzKGNvbnRleHQpIHtcblxuICAgIHZhciBzbmFwUG9pbnRzID0gY29udGV4dC5zbmFwUG9pbnRzLFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cyxcbiAgICAgICAgc2VnbWVudFN0YXJ0ID0gY29udGV4dC5zZWdtZW50U3RhcnQsXG4gICAgICAgIHNlZ21lbnRTdGFydEluZGV4ID0gY29udGV4dC5zZWdtZW50U3RhcnRJbmRleCxcbiAgICAgICAgc2VnbWVudEVuZCA9IGNvbnRleHQuc2VnbWVudEVuZCxcbiAgICAgICAgc2VnbWVudEVuZEluZGV4ID0gY29udGV4dC5zZWdtZW50RW5kSW5kZXgsXG4gICAgICAgIGF4aXMgPSBjb250ZXh0LmF4aXM7XG5cbiAgICBpZiAoc25hcFBvaW50cykge1xuICAgICAgcmV0dXJuIHNuYXBQb2ludHM7XG4gICAgfVxuXG4gICAgdmFyIHJlZmVyZW5jZVdheXBvaW50cyA9IFtcbiAgICAgIHdheXBvaW50c1tzZWdtZW50U3RhcnRJbmRleCAtIDFdLFxuICAgICAgc2VnbWVudFN0YXJ0LFxuICAgICAgc2VnbWVudEVuZCxcbiAgICAgIHdheXBvaW50c1tzZWdtZW50RW5kSW5kZXggKyAxXVxuICAgIF07XG5cbiAgICBpZiAoc2VnbWVudFN0YXJ0SW5kZXggPCAyKSB7XG4gICAgICByZWZlcmVuY2VXYXlwb2ludHMudW5zaGlmdChtaWQoY29ubmVjdGlvbi5zb3VyY2UpKTtcbiAgICB9XG5cbiAgICBpZiAoc2VnbWVudEVuZEluZGV4ID4gd2F5cG9pbnRzLmxlbmd0aCAtIDMpIHtcbiAgICAgIHJlZmVyZW5jZVdheXBvaW50cy51bnNoaWZ0KG1pZChjb25uZWN0aW9uLnRhcmdldCkpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc25hcFBvaW50cyA9IHNuYXBQb2ludHMgPSB7IGhvcml6b250YWw6IFtdICwgdmVydGljYWw6IFtdIH07XG5cbiAgICBmb3JFYWNoKHJlZmVyZW5jZVdheXBvaW50cywgZnVuY3Rpb24ocCkge1xuXG4gICAgICAvLyB3ZSBzbmFwIG9uIGV4aXN0aW5nIGJlbmRwb2ludHMgb25seSxcbiAgICAgIC8vIG5vdCBwbGFjZWhvbGRlcnMgdGhhdCBhcmUgaW5zZXJ0ZWQgZHVyaW5nIGFkZFxuICAgICAgaWYgKHApIHtcbiAgICAgICAgcCA9IHAub3JpZ2luYWwgfHwgcDtcblxuICAgICAgICBpZiAoYXhpcyA9PT0gJ3knKSB7XG4gICAgICAgICAgc25hcFBvaW50cy5ob3Jpem9udGFsLnB1c2gocC55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChheGlzID09PSAneCcpIHtcbiAgICAgICAgICBzbmFwUG9pbnRzLnZlcnRpY2FsLnB1c2gocC54KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNuYXBQb2ludHM7XG4gIH1cblxuICBldmVudEJ1cy5vbignY29ubmVjdGlvblNlZ21lbnQubW92ZS5tb3ZlJywgMTUwMCwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNuYXBQb2ludHMgPSBnZXRDb25uZWN0aW9uU2VnbWVudFNuYXBzKGNvbnRleHQpLFxuICAgICAgICB4ID0gZXZlbnQueCxcbiAgICAgICAgeSA9IGV2ZW50LnksXG4gICAgICAgIHN4LCBzeTtcblxuICAgIGlmICghc25hcFBvaW50cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHNuYXBcbiAgICBzeCA9IHNuYXBUbyhzbmFwUG9pbnRzLnZlcnRpY2FsLCB4KTtcbiAgICBzeSA9IHNuYXBUbyhzbmFwUG9pbnRzLmhvcml6b250YWwsIHkpO1xuXG5cbiAgICAvLyBjb3JyZWN0aW9uIHgveVxuICAgIHZhciBjeCA9ICh4IC0gc3gpLFxuICAgICAgICBjeSA9ICh5IC0gc3kpO1xuXG4gICAgLy8gdXBkYXRlIGRlbHRhXG4gICAgYXNzaWduKGV2ZW50LCB7XG4gICAgICBkeDogZXZlbnQuZHggLSBjeCxcbiAgICAgIGR5OiBldmVudC5keSAtIGN5LFxuICAgICAgeDogc3gsXG4gICAgICB5OiBzeVxuICAgIH0pO1xuXG4gICAgLy8gb25seSBzZXQgc25hcHBlZCBpZiBhY3R1YWxseSBzbmFwcGVkXG4gICAgaWYgKGN4IHx8IHNuYXBQb2ludHMudmVydGljYWwuaW5kZXhPZih4KSAhPT0gLTEpIHtcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsICd4Jywgc3gpO1xuICAgIH1cblxuICAgIGlmIChjeSB8fCBzbmFwUG9pbnRzLmhvcml6b250YWwuaW5kZXhPZih5KSAhPT0gLTEpIHtcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsICd5Jywgc3kpO1xuICAgIH1cbiAgfSk7XG5cblxuICAvLyBiZW5kcG9pbnQgc25hcHBpbmcgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGZ1bmN0aW9uIGdldEJlbmRwb2ludFNuYXBzKGNvbnRleHQpIHtcblxuICAgIHZhciBzbmFwUG9pbnRzID0gY29udGV4dC5zbmFwUG9pbnRzLFxuICAgICAgICB3YXlwb2ludHMgPSBjb250ZXh0LmNvbm5lY3Rpb24ud2F5cG9pbnRzLFxuICAgICAgICBiZW5kcG9pbnRJbmRleCA9IGNvbnRleHQuYmVuZHBvaW50SW5kZXg7XG5cbiAgICBpZiAoc25hcFBvaW50cykge1xuICAgICAgcmV0dXJuIHNuYXBQb2ludHM7XG4gICAgfVxuXG4gICAgdmFyIHJlZmVyZW5jZVdheXBvaW50cyA9IFsgd2F5cG9pbnRzW2JlbmRwb2ludEluZGV4IC0gMV0sIHdheXBvaW50c1tiZW5kcG9pbnRJbmRleCArIDFdIF07XG5cbiAgICBjb250ZXh0LnNuYXBQb2ludHMgPSBzbmFwUG9pbnRzID0geyBob3Jpem9udGFsOiBbXSAsIHZlcnRpY2FsOiBbXSB9O1xuXG4gICAgZm9yRWFjaChyZWZlcmVuY2VXYXlwb2ludHMsIGZ1bmN0aW9uKHApIHtcblxuICAgICAgLy8gd2Ugc25hcCBvbiBleGlzdGluZyBiZW5kcG9pbnRzIG9ubHksXG4gICAgICAvLyBub3QgcGxhY2Vob2xkZXJzIHRoYXQgYXJlIGluc2VydGVkIGR1cmluZyBhZGRcbiAgICAgIGlmIChwKSB7XG4gICAgICAgIHAgPSBwLm9yaWdpbmFsIHx8IHA7XG5cbiAgICAgICAgc25hcFBvaW50cy5ob3Jpem9udGFsLnB1c2gocC55KTtcbiAgICAgICAgc25hcFBvaW50cy52ZXJ0aWNhbC5wdXNoKHAueCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc25hcFBvaW50cztcbiAgfVxuXG5cbiAgZXZlbnRCdXMub24oWyAnYmVuZHBvaW50Lm1vdmUubW92ZScsICdiZW5kcG9pbnQubW92ZS5lbmQnIF0sIDE1MDAsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNuYXBQb2ludHMgPSBnZXRCZW5kcG9pbnRTbmFwcyhjb250ZXh0KSxcbiAgICAgICAgaG92ZXIgPSBjb250ZXh0LmhvdmVyLFxuICAgICAgICBob3Zlck1pZCA9IGhvdmVyICYmIG1pZChob3ZlciksXG4gICAgICAgIHggPSBldmVudC54LFxuICAgICAgICB5ID0gZXZlbnQueSxcbiAgICAgICAgc3gsIHN5O1xuXG4gICAgaWYgKCFzbmFwUG9pbnRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc25hcCB0byBob3ZlciBtaWRcbiAgICBzeCA9IHNuYXBUbyhob3Zlck1pZCA/IHNuYXBQb2ludHMudmVydGljYWwuY29uY2F0KFsgaG92ZXJNaWQueCBdKSA6IHNuYXBQb2ludHMudmVydGljYWwsIHgpO1xuICAgIHN5ID0gc25hcFRvKGhvdmVyTWlkID8gc25hcFBvaW50cy5ob3Jpem9udGFsLmNvbmNhdChbIGhvdmVyTWlkLnkgXSkgOiBzbmFwUG9pbnRzLmhvcml6b250YWwsIHkpO1xuXG4gICAgLy8gY29ycmVjdGlvbiB4L3lcbiAgICB2YXIgY3ggPSAoeCAtIHN4KSxcbiAgICAgICAgY3kgPSAoeSAtIHN5KTtcblxuICAgIC8vIHVwZGF0ZSBkZWx0YVxuICAgIGFzc2lnbihldmVudCwge1xuICAgICAgZHg6IGV2ZW50LmR4IC0gY3gsXG4gICAgICBkeTogZXZlbnQuZHkgLSBjeSxcbiAgICAgIHg6IGV2ZW50LnggLSBjeCxcbiAgICAgIHk6IGV2ZW50LnkgLSBjeVxuICAgIH0pO1xuXG4gICAgLy8gb25seSBzZXQgc25hcHBlZCBpZiBhY3R1YWxseSBzbmFwcGVkXG4gICAgaWYgKGN4IHx8IHNuYXBQb2ludHMudmVydGljYWwuaW5kZXhPZih4KSAhPT0gLTEpIHtcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsICd4Jywgc3gpO1xuICAgIH1cblxuICAgIGlmIChjeSB8fCBzbmFwUG9pbnRzLmhvcml6b250YWwuaW5kZXhPZih5KSAhPT0gLTEpIHtcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsICd5Jywgc3kpO1xuICAgIH1cbiAgfSk7XG59XG5cblxuQmVuZHBvaW50U25hcHBpbmcuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdOyIsImltcG9ydCB7XG4gIHRvUG9pbnRcbn0gZnJvbSAnLi4vLi4vdXRpbC9FdmVudCc7XG5cbmltcG9ydCB7XG4gIGdldE1pZFBvaW50LFxuICBwb2ludHNBbGlnbmVkXG59IGZyb20gJy4uLy4uL3V0aWwvR2VvbWV0cnknO1xuXG5pbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNsYXNzZXMgYXMgc3ZnQ2xhc3NlcyxcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZVxufSBmcm9tICd0aW55LXN2Zyc7XG5cbmltcG9ydCB7XG4gIHJvdGF0ZSxcbiAgdHJhbnNsYXRlXG59IGZyb20gJy4uLy4uL3V0aWwvU3ZnVHJhbnNmb3JtVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldEFwcHJveEludGVyc2VjdGlvblxufSBmcm9tICcuLi8uLi91dGlsL0xpbmVJbnRlcnNlY3Rpb24nO1xuXG5leHBvcnQgdmFyIEJFTkRQT0lOVF9DTFMgPSAnZGpzLWJlbmRwb2ludCc7XG5leHBvcnQgdmFyIFNFR01FTlRfRFJBR0dFUl9DTFMgPSAnZGpzLXNlZ21lbnQtZHJhZ2dlcic7XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0NhbnZhc0Nvb3JkaW5hdGVzKGNhbnZhcywgZXZlbnQpIHtcblxuICB2YXIgcG9zaXRpb24gPSB0b1BvaW50KGV2ZW50KSxcbiAgICAgIGNsaWVudFJlY3QgPSBjYW52YXMuX2NvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIG9mZnNldDtcblxuICAvLyBjYW52YXMgcmVsYXRpdmUgcG9zaXRpb25cblxuICBvZmZzZXQgPSB7XG4gICAgeDogY2xpZW50UmVjdC5sZWZ0LFxuICAgIHk6IGNsaWVudFJlY3QudG9wXG4gIH07XG5cbiAgLy8gdXBkYXRlIGFjdHVhbCBldmVudCBwYXlsb2FkIHdpdGggY2FudmFzIHJlbGF0aXZlIG1lYXN1cmVzXG5cbiAgdmFyIHZpZXdib3ggPSBjYW52YXMudmlld2JveCgpO1xuXG4gIHJldHVybiB7XG4gICAgeDogdmlld2JveC54ICsgKHBvc2l0aW9uLnggLSBvZmZzZXQueCkgLyB2aWV3Ym94LnNjYWxlLFxuICAgIHk6IHZpZXdib3gueSArIChwb3NpdGlvbi55IC0gb2Zmc2V0LnkpIC8gdmlld2JveC5zY2FsZVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29ubmVjdGlvbkludGVyc2VjdGlvbihjYW52YXMsIHdheXBvaW50cywgZXZlbnQpIHtcbiAgdmFyIGxvY2FsUG9zaXRpb24gPSB0b0NhbnZhc0Nvb3JkaW5hdGVzKGNhbnZhcywgZXZlbnQpLFxuICAgICAgaW50ZXJzZWN0aW9uID0gZ2V0QXBwcm94SW50ZXJzZWN0aW9uKHdheXBvaW50cywgbG9jYWxQb3NpdGlvbik7XG5cbiAgcmV0dXJuIGludGVyc2VjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEJlbmRwb2ludChwYXJlbnRHZngsIGNscykge1xuICB2YXIgZ3JvdXBHZnggPSBzdmdDcmVhdGUoJ2cnKTtcbiAgc3ZnQ2xhc3Nlcyhncm91cEdmeCkuYWRkKEJFTkRQT0lOVF9DTFMpO1xuXG4gIHN2Z0FwcGVuZChwYXJlbnRHZngsIGdyb3VwR2Z4KTtcblxuICB2YXIgdmlzdWFsID0gc3ZnQ3JlYXRlKCdjaXJjbGUnKTtcbiAgc3ZnQXR0cih2aXN1YWwsIHtcbiAgICBjeDogMCxcbiAgICBjeTogMCxcbiAgICByOiA0XG4gIH0pO1xuICBzdmdDbGFzc2VzKHZpc3VhbCkuYWRkKCdkanMtdmlzdWFsJyk7XG5cbiAgc3ZnQXBwZW5kKGdyb3VwR2Z4LCB2aXN1YWwpO1xuXG4gIHZhciBoaXQgPSBzdmdDcmVhdGUoJ2NpcmNsZScpO1xuICBzdmdBdHRyKGhpdCwge1xuICAgIGN4OiAwLFxuICAgIGN5OiAwLFxuICAgIHI6IDEwXG4gIH0pO1xuICBzdmdDbGFzc2VzKGhpdCkuYWRkKCdkanMtaGl0Jyk7XG5cbiAgc3ZnQXBwZW5kKGdyb3VwR2Z4LCBoaXQpO1xuXG4gIGlmIChjbHMpIHtcbiAgICBzdmdDbGFzc2VzKGdyb3VwR2Z4KS5hZGQoY2xzKTtcbiAgfVxuXG4gIHJldHVybiBncm91cEdmeDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGFyYWxsZWxEcmFnZ2VyKHBhcmVudEdmeCwgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kLCBhbGlnbm1lbnQpIHtcbiAgdmFyIGRyYWdnZXJHZnggPSBzdmdDcmVhdGUoJ2cnKTtcblxuICBzdmdBcHBlbmQocGFyZW50R2Z4LCBkcmFnZ2VyR2Z4KTtcblxuICB2YXIgd2lkdGggPSAxNCxcbiAgICAgIGhlaWdodCA9IDMsXG4gICAgICBwYWRkaW5nID0gMTEsXG4gICAgICBoaXRXaWR0aCA9IGNhbGN1bGF0ZUhpdFdpZHRoKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCwgYWxpZ25tZW50KSxcbiAgICAgIGhpdEhlaWdodCA9IGhlaWdodCArIHBhZGRpbmc7XG5cbiAgdmFyIHZpc3VhbCA9IHN2Z0NyZWF0ZSgncmVjdCcpO1xuICBzdmdBdHRyKHZpc3VhbCwge1xuICAgIHg6IC13aWR0aCAvIDIsXG4gICAgeTogLWhlaWdodCAvIDIsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH0pO1xuICBzdmdDbGFzc2VzKHZpc3VhbCkuYWRkKCdkanMtdmlzdWFsJyk7XG5cbiAgc3ZnQXBwZW5kKGRyYWdnZXJHZngsIHZpc3VhbCk7XG5cbiAgdmFyIGhpdCA9IHN2Z0NyZWF0ZSgncmVjdCcpO1xuICBzdmdBdHRyKGhpdCwge1xuICAgIHg6IC1oaXRXaWR0aCAvIDIsXG4gICAgeTogLWhpdEhlaWdodCAvIDIsXG4gICAgd2lkdGg6IGhpdFdpZHRoLFxuICAgIGhlaWdodDogaGl0SGVpZ2h0XG4gIH0pO1xuICBzdmdDbGFzc2VzKGhpdCkuYWRkKCdkanMtaGl0Jyk7XG5cbiAgc3ZnQXBwZW5kKGRyYWdnZXJHZngsIGhpdCk7XG5cbiAgcm90YXRlKGRyYWdnZXJHZngsIGFsaWdubWVudCA9PT0gJ3YnID8gOTAgOiAwLCAwLCAwKTtcblxuICByZXR1cm4gZHJhZ2dlckdmeDtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gYWRkU2VnbWVudERyYWdnZXIocGFyZW50R2Z4LCBzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQpIHtcblxuICB2YXIgZ3JvdXBHZnggPSBzdmdDcmVhdGUoJ2cnKSxcbiAgICAgIG1pZCA9IGdldE1pZFBvaW50KHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCksXG4gICAgICBhbGlnbm1lbnQgPSBwb2ludHNBbGlnbmVkKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCk7XG5cbiAgc3ZnQXBwZW5kKHBhcmVudEdmeCwgZ3JvdXBHZngpO1xuXG4gIGNyZWF0ZVBhcmFsbGVsRHJhZ2dlcihncm91cEdmeCwgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kLCBhbGlnbm1lbnQpO1xuXG4gIHN2Z0NsYXNzZXMoZ3JvdXBHZngpLmFkZChTRUdNRU5UX0RSQUdHRVJfQ0xTKTtcbiAgc3ZnQ2xhc3Nlcyhncm91cEdmeCkuYWRkKGFsaWdubWVudCA9PT0gJ2gnID8gJ2hvcml6b250YWwnIDogJ3ZlcnRpY2FsJyk7XG5cbiAgdHJhbnNsYXRlKGdyb3VwR2Z4LCBtaWQueCwgbWlkLnkpO1xuXG4gIHJldHVybiBncm91cEdmeDtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHJlZ2lvbiBmb3Igc2VnbWVudCBtb3ZlIHdoaWNoIGlzIDIvMyBvZiB0aGUgZnVsbCBzZWdtZW50IGxlbmd0aFxuICogQHBhcmFtIHtudW1iZXJ9IHNlZ21lbnRMZW5ndGhcbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVTZWdtZW50TW92ZVJlZ2lvbihzZWdtZW50TGVuZ3RoKSB7XG4gIHJldHVybiBNYXRoLmFicyhNYXRoLnJvdW5kKHNlZ21lbnRMZW5ndGggKiAyIC8gMykpO1xufVxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBjYWxjdWxhdGVIaXRXaWR0aChzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQsIGFsaWdubWVudCkge1xuICB2YXIgc2VnbWVudExlbmd0aFhBeGlzID0gc2VnbWVudEVuZC54IC0gc2VnbWVudFN0YXJ0LngsXG4gICAgICBzZWdtZW50TGVuZ3RoWUF4aXMgPSBzZWdtZW50RW5kLnkgLSBzZWdtZW50U3RhcnQueTtcblxuICByZXR1cm4gYWxpZ25tZW50ID09PSAnaCcgP1xuICAgIGNhbGN1bGF0ZVNlZ21lbnRNb3ZlUmVnaW9uKHNlZ21lbnRMZW5ndGhYQXhpcykgOlxuICAgIGNhbGN1bGF0ZVNlZ21lbnRNb3ZlUmVnaW9uKHNlZ21lbnRMZW5ndGhZQXhpcyk7XG59XG4iLCJpbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBldmVudCBhcyBkb21FdmVudCxcbiAgcXVlcnkgYXMgZG9tUXVlcnksXG4gIHF1ZXJ5QWxsIGFzIGRvbVF1ZXJ5QWxsXG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICBCRU5EUE9JTlRfQ0xTLFxuICBTRUdNRU5UX0RSQUdHRVJfQ0xTLFxuICBhZGRCZW5kcG9pbnQsXG4gIGFkZFNlZ21lbnREcmFnZ2VyLFxuICBjYWxjdWxhdGVTZWdtZW50TW92ZVJlZ2lvbixcbiAgZ2V0Q29ubmVjdGlvbkludGVyc2VjdGlvblxufSBmcm9tICcuL0JlbmRwb2ludFV0aWwnO1xuXG5pbXBvcnQge1xuICBlc2NhcGVDU1Ncbn0gZnJvbSAnLi4vLi4vdXRpbC9Fc2NhcGVVdGlsJztcblxuaW1wb3J0IHtcbiAgcG9pbnRzQWxpZ25lZCxcbiAgZ2V0TWlkUG9pbnRcbn0gZnJvbSAnLi4vLi4vdXRpbC9HZW9tZXRyeSc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY2xhc3NlcyBhcyBzdmdDbGFzc2VzLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgdHJhbnNsYXRlXG59IGZyb20gJy4uLy4uL3V0aWwvU3ZnVHJhbnNmb3JtVXRpbCc7XG5cblxuLyoqXG4gKiBBIHNlcnZpY2UgdGhhdCBhZGRzIGVkaXRhYmxlIGJlbmRwb2ludHMgdG8gY29ubmVjdGlvbnMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJlbmRwb2ludHMoXG4gICAgZXZlbnRCdXMsIGNhbnZhcywgaW50ZXJhY3Rpb25FdmVudHMsXG4gICAgYmVuZHBvaW50TW92ZSwgY29ubmVjdGlvblNlZ21lbnRNb3ZlKSB7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBpbnRlcnNlY3Rpb24gcG9pbnQgaXMgaW5zaWRlIG1pZGRsZSByZWdpb24gb2Ygc2VnbWVudCwgYWRqdXN0ZWQgYnlcbiAgICogb3B0aW9uYWwgdGhyZXNob2xkXG4gICAqL1xuICBmdW5jdGlvbiBpc0ludGVyc2VjdGlvbk1pZGRsZShpbnRlcnNlY3Rpb24sIHdheXBvaW50cywgdHJlc2hvbGQpIHtcbiAgICB2YXIgaWR4ID0gaW50ZXJzZWN0aW9uLmluZGV4LFxuICAgICAgICBwID0gaW50ZXJzZWN0aW9uLnBvaW50LFxuICAgICAgICBwMCwgcDEsIG1pZCwgYWxpZ25lZCwgeERlbHRhLCB5RGVsdGE7XG5cbiAgICBpZiAoaWR4IDw9IDAgfHwgaW50ZXJzZWN0aW9uLmJlbmRwb2ludCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHAwID0gd2F5cG9pbnRzW2lkeCAtIDFdO1xuICAgIHAxID0gd2F5cG9pbnRzW2lkeF07XG4gICAgbWlkID0gZ2V0TWlkUG9pbnQocDAsIHAxKSxcbiAgICBhbGlnbmVkID0gcG9pbnRzQWxpZ25lZChwMCwgcDEpO1xuICAgIHhEZWx0YSA9IE1hdGguYWJzKHAueCAtIG1pZC54KTtcbiAgICB5RGVsdGEgPSBNYXRoLmFicyhwLnkgLSBtaWQueSk7XG5cbiAgICByZXR1cm4gYWxpZ25lZCAmJiB4RGVsdGEgPD0gdHJlc2hvbGQgJiYgeURlbHRhIDw9IHRyZXNob2xkO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHRocmVzaG9sZCBmcm9tIGEgY29ubmVjdGlvbidzIG1pZGRsZSB3aGljaCBmaXRzIHRoZSB0d28tdGhpcmQtcmVnaW9uXG4gICAqL1xuICBmdW5jdGlvbiBjYWxjdWxhdGVJbnRlcnNlY3Rpb25UaHJlc2hvbGQoY29ubmVjdGlvbiwgaW50ZXJzZWN0aW9uKSB7XG4gICAgdmFyIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzLFxuICAgICAgICByZWxldmFudFNlZ21lbnQsIGFsaWdubWVudCwgc2VnbWVudExlbmd0aCwgdGhyZXNob2xkO1xuXG4gICAgaWYgKGludGVyc2VjdGlvbi5pbmRleCA8PSAwIHx8IGludGVyc2VjdGlvbi5iZW5kcG9pbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIHNlZ21lbnQgcmVsYXRpdmUgdG8gY29ubmVjdGlvbiBpbnRlcnNlY3Rpb25cbiAgICByZWxldmFudFNlZ21lbnQgPSB7XG4gICAgICBzdGFydDogd2F5cG9pbnRzW2ludGVyc2VjdGlvbi5pbmRleCAtIDFdLFxuICAgICAgZW5kOiB3YXlwb2ludHNbaW50ZXJzZWN0aW9uLmluZGV4XVxuICAgIH07XG5cbiAgICBhbGlnbm1lbnQgPSBwb2ludHNBbGlnbmVkKHJlbGV2YW50U2VnbWVudC5zdGFydCwgcmVsZXZhbnRTZWdtZW50LmVuZCk7XG5cbiAgICBpZiAoIWFsaWdubWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGFsaWdubWVudCA9PT0gJ2gnKSB7XG4gICAgICBzZWdtZW50TGVuZ3RoID0gcmVsZXZhbnRTZWdtZW50LmVuZC54IC0gcmVsZXZhbnRTZWdtZW50LnN0YXJ0Lng7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlZ21lbnRMZW5ndGggPSByZWxldmFudFNlZ21lbnQuZW5kLnkgLSByZWxldmFudFNlZ21lbnQuc3RhcnQueTtcbiAgICB9XG5cbiAgICAvLyBjYWxjdWxhdGUgdGhyZXNob2xkIHJlbGF0aXZlIHRvIDIvMyBvZiBzZWdtZW50IGxlbmd0aFxuICAgIHRocmVzaG9sZCA9IGNhbGN1bGF0ZVNlZ21lbnRNb3ZlUmVnaW9uKHNlZ21lbnRMZW5ndGgpIC8gMjtcblxuICAgIHJldHVybiB0aHJlc2hvbGQ7XG4gIH1cblxuICBmdW5jdGlvbiBhY3RpdmF0ZUJlbmRwb2ludE1vdmUoZXZlbnQsIGNvbm5lY3Rpb24pIHtcbiAgICB2YXIgd2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHMsXG4gICAgICAgIGludGVyc2VjdGlvbiA9IGdldENvbm5lY3Rpb25JbnRlcnNlY3Rpb24oY2FudmFzLCB3YXlwb2ludHMsIGV2ZW50KSxcbiAgICAgICAgdGhyZXNob2xkO1xuXG4gICAgaWYgKCFpbnRlcnNlY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aHJlc2hvbGQgPSBjYWxjdWxhdGVJbnRlcnNlY3Rpb25UaHJlc2hvbGQoY29ubmVjdGlvbiwgaW50ZXJzZWN0aW9uKTtcblxuICAgIGlmIChpc0ludGVyc2VjdGlvbk1pZGRsZShpbnRlcnNlY3Rpb24sIHdheXBvaW50cywgdGhyZXNob2xkKSkge1xuICAgICAgY29ubmVjdGlvblNlZ21lbnRNb3ZlLnN0YXJ0KGV2ZW50LCBjb25uZWN0aW9uLCBpbnRlcnNlY3Rpb24uaW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBiZW5kcG9pbnRNb3ZlLnN0YXJ0KGV2ZW50LCBjb25uZWN0aW9uLCBpbnRlcnNlY3Rpb24uaW5kZXgsICFpbnRlcnNlY3Rpb24uYmVuZHBvaW50KTtcbiAgICB9XG5cbiAgICAvLyB3ZSd2ZSBoYW5kbGVkIHRoZSBldmVudFxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gYmluZEludGVyYWN0aW9uRXZlbnRzKG5vZGUsIGV2ZW50TmFtZSwgZWxlbWVudCkge1xuXG4gICAgZG9tRXZlbnQuYmluZChub2RlLCBldmVudE5hbWUsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBpbnRlcmFjdGlvbkV2ZW50cy50cmlnZ2VyTW91c2VFdmVudChldmVudE5hbWUsIGV2ZW50LCBlbGVtZW50KTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QmVuZHBvaW50c0NvbnRhaW5lcihlbGVtZW50LCBjcmVhdGUpIHtcblxuICAgIHZhciBsYXllciA9IGNhbnZhcy5nZXRMYXllcignb3ZlcmxheXMnKSxcbiAgICAgICAgZ2Z4ID0gZG9tUXVlcnkoJy5kanMtYmVuZHBvaW50c1tkYXRhLWVsZW1lbnQtaWQ9XCInICsgZXNjYXBlQ1NTKGVsZW1lbnQuaWQpICsgJ1wiXScsIGxheWVyKTtcblxuICAgIGlmICghZ2Z4ICYmIGNyZWF0ZSkge1xuICAgICAgZ2Z4ID0gc3ZnQ3JlYXRlKCdnJyk7XG4gICAgICBzdmdBdHRyKGdmeCwgeyAnZGF0YS1lbGVtZW50LWlkJzogZWxlbWVudC5pZCB9KTtcbiAgICAgIHN2Z0NsYXNzZXMoZ2Z4KS5hZGQoJ2Rqcy1iZW5kcG9pbnRzJyk7XG5cbiAgICAgIHN2Z0FwcGVuZChsYXllciwgZ2Z4KTtcblxuICAgICAgYmluZEludGVyYWN0aW9uRXZlbnRzKGdmeCwgJ21vdXNlZG93bicsIGVsZW1lbnQpO1xuICAgICAgYmluZEludGVyYWN0aW9uRXZlbnRzKGdmeCwgJ2NsaWNrJywgZWxlbWVudCk7XG4gICAgICBiaW5kSW50ZXJhY3Rpb25FdmVudHMoZ2Z4LCAnZGJsY2xpY2snLCBlbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2Z4O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U2VnbWVudERyYWdnZXIoaWR4LCBwYXJlbnRHZngpIHtcbiAgICByZXR1cm4gZG9tUXVlcnkoXG4gICAgICAnLmRqcy1zZWdtZW50LWRyYWdnZXJbZGF0YS1zZWdtZW50LWlkeD1cIicgKyBpZHggKyAnXCJdJyxcbiAgICAgIHBhcmVudEdmeFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVCZW5kcG9pbnRzKGdmeCwgY29ubmVjdGlvbikge1xuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzLmZvckVhY2goZnVuY3Rpb24ocCwgaWR4KSB7XG4gICAgICB2YXIgYmVuZHBvaW50ID0gYWRkQmVuZHBvaW50KGdmeCk7XG5cbiAgICAgIHN2Z0FwcGVuZChnZngsIGJlbmRwb2ludCk7XG5cbiAgICAgIHRyYW5zbGF0ZShiZW5kcG9pbnQsIHAueCwgcC55KTtcbiAgICB9KTtcblxuICAgIC8vIGFkZCBmbG9hdGluZyBiZW5kcG9pbnRcbiAgICBhZGRCZW5kcG9pbnQoZ2Z4LCAnZmxvYXRpbmcnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNlZ21lbnREcmFnZ2VycyhnZngsIGNvbm5lY3Rpb24pIHtcblxuICAgIHZhciB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cztcblxuICAgIHZhciBzZWdtZW50U3RhcnQsXG4gICAgICAgIHNlZ21lbnRFbmQsXG4gICAgICAgIHNlZ21lbnREcmFnZ2VyR2Z4O1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCB3YXlwb2ludHMubGVuZ3RoOyBpKyspIHtcblxuICAgICAgc2VnbWVudFN0YXJ0ID0gd2F5cG9pbnRzW2kgLSAxXTtcbiAgICAgIHNlZ21lbnRFbmQgPSB3YXlwb2ludHNbaV07XG5cbiAgICAgIGlmIChwb2ludHNBbGlnbmVkKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCkpIHtcbiAgICAgICAgc2VnbWVudERyYWdnZXJHZnggPSBhZGRTZWdtZW50RHJhZ2dlcihnZngsIHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCk7XG5cbiAgICAgICAgc3ZnQXR0cihzZWdtZW50RHJhZ2dlckdmeCwgeyAnZGF0YS1zZWdtZW50LWlkeCc6IGkgfSk7XG5cbiAgICAgICAgYmluZEludGVyYWN0aW9uRXZlbnRzKHNlZ21lbnREcmFnZ2VyR2Z4LCAnbW91c2Vtb3ZlJywgY29ubmVjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJCZW5kcG9pbnRzKGdmeCkge1xuICAgIGZvckVhY2goZG9tUXVlcnlBbGwoJy4nICsgQkVORFBPSU5UX0NMUywgZ2Z4KSwgZnVuY3Rpb24obm9kZSkge1xuICAgICAgc3ZnUmVtb3ZlKG5vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJTZWdtZW50RHJhZ2dlcnMoZ2Z4KSB7XG4gICAgZm9yRWFjaChkb21RdWVyeUFsbCgnLicgKyBTRUdNRU5UX0RSQUdHRVJfQ0xTLCBnZngpLCBmdW5jdGlvbihub2RlKSB7XG4gICAgICBzdmdSZW1vdmUobm9kZSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBhZGRIYW5kbGVzKGNvbm5lY3Rpb24pIHtcblxuICAgIHZhciBnZnggPSBnZXRCZW5kcG9pbnRzQ29udGFpbmVyKGNvbm5lY3Rpb24pO1xuXG4gICAgaWYgKCFnZngpIHtcbiAgICAgIGdmeCA9IGdldEJlbmRwb2ludHNDb250YWluZXIoY29ubmVjdGlvbiwgdHJ1ZSk7XG5cbiAgICAgIGNyZWF0ZUJlbmRwb2ludHMoZ2Z4LCBjb25uZWN0aW9uKTtcbiAgICAgIGNyZWF0ZVNlZ21lbnREcmFnZ2VycyhnZngsIGNvbm5lY3Rpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBnZng7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVIYW5kbGVzKGNvbm5lY3Rpb24pIHtcblxuICAgIHZhciBnZnggPSBnZXRCZW5kcG9pbnRzQ29udGFpbmVyKGNvbm5lY3Rpb24pO1xuXG4gICAgaWYgKGdmeCkge1xuICAgICAgY2xlYXJTZWdtZW50RHJhZ2dlcnMoZ2Z4KTtcbiAgICAgIGNsZWFyQmVuZHBvaW50cyhnZngpO1xuICAgICAgY3JlYXRlU2VnbWVudERyYWdnZXJzKGdmeCwgY29ubmVjdGlvbik7XG4gICAgICBjcmVhdGVCZW5kcG9pbnRzKGdmeCwgY29ubmVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRmxvYXRpbmdCZW5kcG9pbnRQb3NpdGlvbihwYXJlbnRHZngsIGludGVyc2VjdGlvbikge1xuICAgIHZhciBmbG9hdGluZyA9IGRvbVF1ZXJ5KCcuZmxvYXRpbmcnLCBwYXJlbnRHZngpLFxuICAgICAgICBwb2ludCA9IGludGVyc2VjdGlvbi5wb2ludDtcblxuICAgIGlmICghZmxvYXRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cmFuc2xhdGUoZmxvYXRpbmcsIHBvaW50LngsIHBvaW50LnkpO1xuXG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVTZWdtZW50RHJhZ2dlclBvc2l0aW9uKHBhcmVudEdmeCwgaW50ZXJzZWN0aW9uLCB3YXlwb2ludHMpIHtcblxuICAgIHZhciBkcmFnZ2VyR2Z4ID0gZ2V0U2VnbWVudERyYWdnZXIoaW50ZXJzZWN0aW9uLmluZGV4LCBwYXJlbnRHZngpLFxuICAgICAgICBzZWdtZW50U3RhcnQgPSB3YXlwb2ludHNbaW50ZXJzZWN0aW9uLmluZGV4IC0gMV0sXG4gICAgICAgIHNlZ21lbnRFbmQgPSB3YXlwb2ludHNbaW50ZXJzZWN0aW9uLmluZGV4XSxcbiAgICAgICAgcG9pbnQgPSBpbnRlcnNlY3Rpb24ucG9pbnQsXG4gICAgICAgIG1pZCA9IGdldE1pZFBvaW50KHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCksXG4gICAgICAgIGFsaWdubWVudCA9IHBvaW50c0FsaWduZWQoc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kKSxcbiAgICAgICAgZHJhZ2dlclZpc3VhbCwgcmVsYXRpdmVQb3NpdGlvbjtcblxuICAgIGlmICghZHJhZ2dlckdmeCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRyYWdnZXJWaXN1YWwgPSBnZXREcmFnZ2VyVmlzdWFsKGRyYWdnZXJHZngpO1xuXG4gICAgcmVsYXRpdmVQb3NpdGlvbiA9IHtcbiAgICAgIHg6IHBvaW50LnggLSBtaWQueCxcbiAgICAgIHk6IHBvaW50LnkgLSBtaWQueVxuICAgIH07XG5cbiAgICBpZiAoYWxpZ25tZW50ID09PSAndicpIHtcblxuICAgICAgLy8gcm90YXRlIHBvc2l0aW9uXG4gICAgICByZWxhdGl2ZVBvc2l0aW9uID0ge1xuICAgICAgICB4OiByZWxhdGl2ZVBvc2l0aW9uLnksXG4gICAgICAgIHk6IHJlbGF0aXZlUG9zaXRpb24ueFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0cmFuc2xhdGUoZHJhZ2dlclZpc3VhbCwgcmVsYXRpdmVQb3NpdGlvbi54LCByZWxhdGl2ZVBvc2l0aW9uLnkpO1xuICB9XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3Rpb24uY2hhbmdlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdXBkYXRlSGFuZGxlcyhldmVudC5lbGVtZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3Rpb24ucmVtb3ZlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgZ2Z4ID0gZ2V0QmVuZHBvaW50c0NvbnRhaW5lcihldmVudC5lbGVtZW50KTtcblxuICAgIGlmIChnZngpIHtcbiAgICAgIHN2Z1JlbW92ZShnZngpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQubWFya2VyLnVwZGF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQsXG4gICAgICAgIGJlbmRwb2ludHNHZng7XG5cbiAgICBpZiAoIWVsZW1lbnQud2F5cG9pbnRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYmVuZHBvaW50c0dmeCA9IGFkZEhhbmRsZXMoZWxlbWVudCk7XG5cbiAgICBpZiAoZXZlbnQuYWRkKSB7XG4gICAgICBzdmdDbGFzc2VzKGJlbmRwb2ludHNHZngpLmFkZChldmVudC5tYXJrZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdmdDbGFzc2VzKGJlbmRwb2ludHNHZngpLnJlbW92ZShldmVudC5tYXJrZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQubW91c2Vtb3ZlJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgd2F5cG9pbnRzID0gZWxlbWVudC53YXlwb2ludHMsXG4gICAgICAgIGJlbmRwb2ludHNHZngsXG4gICAgICAgIGludGVyc2VjdGlvbjtcblxuICAgIGlmICh3YXlwb2ludHMpIHtcbiAgICAgIGJlbmRwb2ludHNHZnggPSBnZXRCZW5kcG9pbnRzQ29udGFpbmVyKGVsZW1lbnQsIHRydWUpO1xuXG4gICAgICBpbnRlcnNlY3Rpb24gPSBnZXRDb25uZWN0aW9uSW50ZXJzZWN0aW9uKGNhbnZhcywgd2F5cG9pbnRzLCBldmVudC5vcmlnaW5hbEV2ZW50KTtcblxuICAgICAgaWYgKCFpbnRlcnNlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGVGbG9hdGluZ0JlbmRwb2ludFBvc2l0aW9uKGJlbmRwb2ludHNHZngsIGludGVyc2VjdGlvbik7XG5cbiAgICAgIGlmICghaW50ZXJzZWN0aW9uLmJlbmRwb2ludCkge1xuICAgICAgICB1cGRhdGVTZWdtZW50RHJhZ2dlclBvc2l0aW9uKGJlbmRwb2ludHNHZngsIGludGVyc2VjdGlvbiwgd2F5cG9pbnRzKTtcbiAgICAgIH1cblxuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQubW91c2Vkb3duJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBvcmlnaW5hbEV2ZW50ID0gZXZlbnQub3JpZ2luYWxFdmVudCxcbiAgICAgICAgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQ7XG5cbiAgICBpZiAoIWVsZW1lbnQud2F5cG9pbnRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGl2YXRlQmVuZHBvaW50TW92ZShvcmlnaW5hbEV2ZW50LCBlbGVtZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ3NlbGVjdGlvbi5jaGFuZ2VkJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgbmV3U2VsZWN0aW9uID0gZXZlbnQubmV3U2VsZWN0aW9uLFxuICAgICAgICBwcmltYXJ5ID0gbmV3U2VsZWN0aW9uWzBdO1xuXG4gICAgaWYgKHByaW1hcnkgJiYgcHJpbWFyeS53YXlwb2ludHMpIHtcbiAgICAgIGFkZEhhbmRsZXMocHJpbWFyeSk7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignZWxlbWVudC5ob3ZlcicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50O1xuXG4gICAgaWYgKGVsZW1lbnQud2F5cG9pbnRzKSB7XG4gICAgICBhZGRIYW5kbGVzKGVsZW1lbnQpO1xuICAgICAgaW50ZXJhY3Rpb25FdmVudHMucmVnaXN0ZXJFdmVudChldmVudC5nZngsICdtb3VzZW1vdmUnLCAnZWxlbWVudC5tb3VzZW1vdmUnKTtcbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50Lm91dCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaW50ZXJhY3Rpb25FdmVudHMudW5yZWdpc3RlckV2ZW50KGV2ZW50LmdmeCwgJ21vdXNlbW92ZScsICdlbGVtZW50Lm1vdXNlbW92ZScpO1xuICB9KTtcblxuICAvLyB1cGRhdGUgYmVuZHBvaW50IGNvbnRhaW5lciBkYXRhIGF0dHJpYnV0ZSBvbiBlbGVtZW50IElEIGNoYW5nZVxuICBldmVudEJ1cy5vbignZWxlbWVudC51cGRhdGVJZCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgbmV3SWQgPSBjb250ZXh0Lm5ld0lkO1xuXG4gICAgaWYgKGVsZW1lbnQud2F5cG9pbnRzKSB7XG4gICAgICB2YXIgYmVuZHBvaW50Q29udGFpbmVyID0gZ2V0QmVuZHBvaW50c0NvbnRhaW5lcihlbGVtZW50KTtcblxuICAgICAgaWYgKGJlbmRwb2ludENvbnRhaW5lcikge1xuICAgICAgICBzdmdBdHRyKGJlbmRwb2ludENvbnRhaW5lciwgeyAnZGF0YS1lbGVtZW50LWlkJzogbmV3SWQgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyBBUElcblxuICB0aGlzLmFkZEhhbmRsZXMgPSBhZGRIYW5kbGVzO1xuICB0aGlzLnVwZGF0ZUhhbmRsZXMgPSB1cGRhdGVIYW5kbGVzO1xuICB0aGlzLmdldEJlbmRwb2ludHNDb250YWluZXIgPSBnZXRCZW5kcG9pbnRzQ29udGFpbmVyO1xuICB0aGlzLmdldFNlZ21lbnREcmFnZ2VyID0gZ2V0U2VnbWVudERyYWdnZXI7XG59XG5cbkJlbmRwb2ludHMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdpbnRlcmFjdGlvbkV2ZW50cycsXG4gICdiZW5kcG9pbnRNb3ZlJyxcbiAgJ2Nvbm5lY3Rpb25TZWdtZW50TW92ZSdcbl07XG5cblxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXREcmFnZ2VyVmlzdWFsKGRyYWdnZXJHZngpIHtcbiAgcmV0dXJuIGRvbVF1ZXJ5KCcuZGpzLXZpc3VhbCcsIGRyYWdnZXJHZngpO1xufSIsImltcG9ydCB7XG4gIHBvaW50c0FsaWduZWQsXG4gIHBvaW50c09uTGluZVxufSBmcm9tICcuLi8uLi91dGlsL0dlb21ldHJ5JztcblxuaW1wb3J0IHtcbiAgYWRkU2VnbWVudERyYWdnZXIsXG4gIGdldENvbm5lY3Rpb25JbnRlcnNlY3Rpb25cbn0gZnJvbSAnLi9CZW5kcG9pbnRVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0TWlkLFxuICBnZXRPcmllbnRhdGlvblxufSBmcm9tICcuLi8uLi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbnZhciBNQVJLRVJfQ09OTkVDVF9IT1ZFUiA9ICdjb25uZWN0LWhvdmVyJyxcbiAgICBNQVJLRVJfQ09OTkVDVF9VUERBVElORyA9ICdkanMtdXBkYXRpbmcnO1xuXG5pbXBvcnQge1xuICBjbGFzc2VzIGFzIHN2Z0NsYXNzZXMsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQge1xuICB0cmFuc2xhdGVcbn0gZnJvbSAnLi4vLi4vdXRpbC9TdmdUcmFuc2Zvcm1VdGlsJztcblxuXG5mdW5jdGlvbiBheGlzQWRkKHBvaW50LCBheGlzLCBkZWx0YSkge1xuICByZXR1cm4gYXhpc1NldChwb2ludCwgYXhpcywgcG9pbnRbYXhpc10gKyBkZWx0YSk7XG59XG5cbmZ1bmN0aW9uIGF4aXNTZXQocG9pbnQsIGF4aXMsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgeDogKGF4aXMgPT09ICd4JyA/IHZhbHVlIDogcG9pbnQueCksXG4gICAgeTogKGF4aXMgPT09ICd5JyA/IHZhbHVlIDogcG9pbnQueSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXhpc0ZlbmNlZChwb3NpdGlvbiwgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kLCBheGlzKSB7XG5cbiAgdmFyIG1heFZhbHVlID0gTWF0aC5tYXgoc2VnbWVudFN0YXJ0W2F4aXNdLCBzZWdtZW50RW5kW2F4aXNdKSxcbiAgICAgIG1pblZhbHVlID0gTWF0aC5taW4oc2VnbWVudFN0YXJ0W2F4aXNdLCBzZWdtZW50RW5kW2F4aXNdKTtcblxuICB2YXIgcGFkZGluZyA9IDIwO1xuXG4gIHZhciBmZW5jZWRWYWx1ZSA9IE1hdGgubWluKE1hdGgubWF4KG1pblZhbHVlICsgcGFkZGluZywgcG9zaXRpb25bYXhpc10pLCBtYXhWYWx1ZSAtIHBhZGRpbmcpO1xuXG4gIHJldHVybiBheGlzU2V0KHNlZ21lbnRTdGFydCwgYXhpcywgZmVuY2VkVmFsdWUpO1xufVxuXG5mdW5jdGlvbiBmbGlwQXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59XG5cbi8qKlxuICogR2V0IHRoZSBkb2NraW5nIHBvaW50IG9uIHRoZSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIENvbXB1dGUgYSByZWFzb25hYmxlIGRvY2tpbmcsIGlmIG5vbiBleGlzdHMuXG4gKlxuICogQHBhcmFtICB7UG9pbnR9IHBvaW50XG4gKiBAcGFyYW0gIHtkanMubW9kZWwuU2hhcGV9IHJlZmVyZW5jZUVsZW1lbnRcbiAqIEBwYXJhbSAge3N0cmluZ30gbW92ZUF4aXMgKHh8eSlcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuZnVuY3Rpb24gZ2V0RG9ja2luZyhwb2ludCwgcmVmZXJlbmNlRWxlbWVudCwgbW92ZUF4aXMpIHtcblxuICB2YXIgcmVmZXJlbmNlTWlkLFxuICAgICAgaW52ZXJzZUF4aXM7XG5cbiAgaWYgKHBvaW50Lm9yaWdpbmFsKSB7XG4gICAgcmV0dXJuIHBvaW50Lm9yaWdpbmFsO1xuICB9IGVsc2Uge1xuICAgIHJlZmVyZW5jZU1pZCA9IGdldE1pZChyZWZlcmVuY2VFbGVtZW50KTtcbiAgICBpbnZlcnNlQXhpcyA9IGZsaXBBeGlzKG1vdmVBeGlzKTtcblxuICAgIHJldHVybiBheGlzU2V0KHBvaW50LCBpbnZlcnNlQXhpcywgcmVmZXJlbmNlTWlkW2ludmVyc2VBeGlzXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IGltcGxlbWVudHMgbW92aW5nIG9mIGJlbmRwb2ludHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29ubmVjdGlvblNlZ21lbnRNb3ZlKFxuICAgIGluamVjdG9yLCBldmVudEJ1cywgY2FudmFzLFxuICAgIGRyYWdnaW5nLCBncmFwaGljc0ZhY3RvcnksIG1vZGVsaW5nKSB7XG5cbiAgLy8gb3B0aW9uYWwgY29ubmVjdGlvbiBkb2NraW5nIGludGVncmF0aW9uXG4gIHZhciBjb25uZWN0aW9uRG9ja2luZyA9IGluamVjdG9yLmdldCgnY29ubmVjdGlvbkRvY2tpbmcnLCBmYWxzZSk7XG5cblxuICAvLyBBUElcblxuICB0aGlzLnN0YXJ0ID0gZnVuY3Rpb24oZXZlbnQsIGNvbm5lY3Rpb24sIGlkeCkge1xuXG4gICAgdmFyIGNvbnRleHQsXG4gICAgICAgIGdmeCA9IGNhbnZhcy5nZXRHcmFwaGljcyhjb25uZWN0aW9uKSxcbiAgICAgICAgc2VnbWVudFN0YXJ0SW5kZXggPSBpZHggLSAxLFxuICAgICAgICBzZWdtZW50RW5kSW5kZXggPSBpZHgsXG4gICAgICAgIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzLFxuICAgICAgICBzZWdtZW50U3RhcnQgPSB3YXlwb2ludHNbc2VnbWVudFN0YXJ0SW5kZXhdLFxuICAgICAgICBzZWdtZW50RW5kID0gd2F5cG9pbnRzW3NlZ21lbnRFbmRJbmRleF0sXG4gICAgICAgIGludGVyc2VjdGlvbiA9IGdldENvbm5lY3Rpb25JbnRlcnNlY3Rpb24oY2FudmFzLCB3YXlwb2ludHMsIGV2ZW50KSxcbiAgICAgICAgZGlyZWN0aW9uLCBheGlzLCBkcmFnUG9zaXRpb247XG5cbiAgICBkaXJlY3Rpb24gPSBwb2ludHNBbGlnbmVkKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCk7XG5cbiAgICAvLyBkbyBub3QgbW92ZSBkaWFnb25hbCBjb25uZWN0aW9uXG4gICAgaWYgKCFkaXJlY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB0aGUgYXhpcyB3aGVyZSB3ZSBhcmUgZ29pbmcgdG8gbW92ZSB0aGluZ3NcbiAgICBheGlzID0gZGlyZWN0aW9uID09PSAndicgPyAneCcgOiAneSc7XG5cbiAgICBpZiAoc2VnbWVudFN0YXJ0SW5kZXggPT09IDApIHtcbiAgICAgIHNlZ21lbnRTdGFydCA9IGdldERvY2tpbmcoc2VnbWVudFN0YXJ0LCBjb25uZWN0aW9uLnNvdXJjZSwgYXhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHNlZ21lbnRFbmRJbmRleCA9PT0gd2F5cG9pbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHNlZ21lbnRFbmQgPSBnZXREb2NraW5nKHNlZ21lbnRFbmQsIGNvbm5lY3Rpb24udGFyZ2V0LCBheGlzKTtcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJzZWN0aW9uKSB7XG4gICAgICBkcmFnUG9zaXRpb24gPSBpbnRlcnNlY3Rpb24ucG9pbnQ7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gc2V0IHRvIHNlZ21lbnQgY2VudGVyIGFzIGRlZmF1bHRcbiAgICAgIGRyYWdQb3NpdGlvbiA9IHtcbiAgICAgICAgeDogKHNlZ21lbnRTdGFydC54ICsgc2VnbWVudEVuZC54KSAvIDIsXG4gICAgICAgIHk6IChzZWdtZW50U3RhcnQueSArIHNlZ21lbnRFbmQueSkgLyAyXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnRleHQgPSB7XG4gICAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgICAgc2VnbWVudFN0YXJ0SW5kZXg6IHNlZ21lbnRTdGFydEluZGV4LFxuICAgICAgc2VnbWVudEVuZEluZGV4OiBzZWdtZW50RW5kSW5kZXgsXG4gICAgICBzZWdtZW50U3RhcnQ6IHNlZ21lbnRTdGFydCxcbiAgICAgIHNlZ21lbnRFbmQ6IHNlZ21lbnRFbmQsXG4gICAgICBheGlzOiBheGlzLFxuICAgICAgZHJhZ1Bvc2l0aW9uOiBkcmFnUG9zaXRpb25cbiAgICB9O1xuXG4gICAgZHJhZ2dpbmcuaW5pdChldmVudCwgZHJhZ1Bvc2l0aW9uLCAnY29ubmVjdGlvblNlZ21lbnQubW92ZScsIHtcbiAgICAgIGN1cnNvcjogYXhpcyA9PT0gJ3gnID8gJ3Jlc2l6ZS1ldycgOiAncmVzaXplLW5zJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICAgICAgY29ubmVjdGlvbkdmeDogZ2Z4LFxuICAgICAgICBjb250ZXh0OiBjb250ZXh0XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENyb3AgY29ubmVjdGlvbiBpZiBjb25uZWN0aW9uIGNyb3BwaW5nIGlzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0Nvbm5lY3Rpb259IGNvbm5lY3Rpb25cbiAgICogQHBhcmFtIHtBcnJheTxQb2ludD59IG5ld1dheXBvaW50c1xuICAgKlxuICAgKiBAcmV0dXJuIHtBcnJheTxQb2ludD59IGNyb3BwZWQgY29ubmVjdGlvbiB3YXlwb2ludHNcbiAgICovXG4gIGZ1bmN0aW9uIGNyb3BDb25uZWN0aW9uKGNvbm5lY3Rpb24sIG5ld1dheXBvaW50cykge1xuXG4gICAgLy8gY3JvcCBjb25uZWN0aW9uLCBpZiBkb2NraW5nIHNlcnZpY2UgaXMgcHJvdmlkZWQgb25seVxuICAgIGlmICghY29ubmVjdGlvbkRvY2tpbmcpIHtcbiAgICAgIHJldHVybiBuZXdXYXlwb2ludHM7XG4gICAgfVxuXG4gICAgdmFyIG9sZFdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzLFxuICAgICAgICBjcm9wcGVkV2F5cG9pbnRzO1xuXG4gICAgLy8gdGVtcG9yYXJ5IHNldCBuZXcgd2F5cG9pbnRzXG4gICAgY29ubmVjdGlvbi53YXlwb2ludHMgPSBuZXdXYXlwb2ludHM7XG5cbiAgICBjcm9wcGVkV2F5cG9pbnRzID0gY29ubmVjdGlvbkRvY2tpbmcuZ2V0Q3JvcHBlZFdheXBvaW50cyhjb25uZWN0aW9uKTtcblxuICAgIC8vIHJlc3RvcmUgb2xkIHdheXBvaW50c1xuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gb2xkV2F5cG9pbnRzO1xuXG4gICAgcmV0dXJuIGNyb3BwZWRXYXlwb2ludHM7XG4gIH1cblxuICAvLyBEUkFHR0lORyBJTVBMRU1FTlRBVElPTlxuXG4gIGZ1bmN0aW9uIHJlZHJhd0Nvbm5lY3Rpb24oZGF0YSkge1xuICAgIGdyYXBoaWNzRmFjdG9yeS51cGRhdGUoJ2Nvbm5lY3Rpb24nLCBkYXRhLmNvbm5lY3Rpb24sIGRhdGEuY29ubmVjdGlvbkdmeCk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVEcmFnZ2VyKGNvbnRleHQsIHNlZ21lbnRPZmZzZXQsIGV2ZW50KSB7XG5cbiAgICB2YXIgbmV3V2F5cG9pbnRzID0gY29udGV4dC5uZXdXYXlwb2ludHMsXG4gICAgICAgIHNlZ21lbnRTdGFydEluZGV4ID0gY29udGV4dC5zZWdtZW50U3RhcnRJbmRleCArIHNlZ21lbnRPZmZzZXQsXG4gICAgICAgIHNlZ21lbnRTdGFydCA9IG5ld1dheXBvaW50c1tzZWdtZW50U3RhcnRJbmRleF0sXG4gICAgICAgIHNlZ21lbnRFbmRJbmRleCA9IGNvbnRleHQuc2VnbWVudEVuZEluZGV4ICsgc2VnbWVudE9mZnNldCxcbiAgICAgICAgc2VnbWVudEVuZCA9IG5ld1dheXBvaW50c1tzZWdtZW50RW5kSW5kZXhdLFxuICAgICAgICBheGlzID0gZmxpcEF4aXMoY29udGV4dC5heGlzKTtcblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgZHJhZ2dlciBkb2VzIG5vdCBtb3ZlXG4gICAgLy8gb3V0c2lkZSB0aGUgY29ubmVjdGlvblxuICAgIHZhciBkcmFnZ2VyUG9zaXRpb24gPSBheGlzRmVuY2VkKGV2ZW50LCBzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQsIGF4aXMpO1xuXG4gICAgLy8gdXBkYXRlIGRyYWdnZXJcbiAgICB0cmFuc2xhdGUoY29udGV4dC5kcmFnZ2VyR2Z4LCBkcmFnZ2VyUG9zaXRpb24ueCwgZHJhZ2dlclBvc2l0aW9uLnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB3YXlwb2ludHMgZm9yIHJlZHVuZGFudCBvbmVzIChpLmUuIG9uIHRoZSBzYW1lIGF4aXMpLlxuICAgKiBSZXR1cm5zIHRoZSBmaWx0ZXJlZCB3YXlwb2ludHMgYW5kIHRoZSBvZmZzZXQgcmVsYXRlZCB0byB0aGUgc2VnbWVudCBtb3ZlLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gd2F5cG9pbnRzXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gc2VnbWVudFN0YXJ0SW5kZXggb2YgbW92ZWQgc2VnbWVudCBzdGFydFxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IHsgZmlsdGVyZWRXYXlwb2ludHMsIHNlZ21lbnRPZmZzZXQgfVxuICAgKi9cbiAgZnVuY3Rpb24gZmlsdGVyUmVkdW5kYW50V2F5cG9pbnRzKHdheXBvaW50cywgc2VnbWVudFN0YXJ0SW5kZXgpIHtcblxuICAgIHZhciBzZWdtZW50T2Zmc2V0ID0gMDtcblxuICAgIHZhciBmaWx0ZXJlZFdheXBvaW50cyA9IHdheXBvaW50cy5maWx0ZXIoZnVuY3Rpb24ociwgaWR4KSB7XG4gICAgICBpZiAocG9pbnRzT25MaW5lKHdheXBvaW50c1tpZHggLSAxXSwgd2F5cG9pbnRzW2lkeCArIDFdLCByKSkge1xuXG4gICAgICAgIC8vIHJlbW92ZSBwb2ludCBhbmQgaW5jcmVtZW50IG9mZnNldFxuICAgICAgICBzZWdtZW50T2Zmc2V0ID0gaWR4IDw9IHNlZ21lbnRTdGFydEluZGV4ID8gc2VnbWVudE9mZnNldCAtIDEgOiBzZWdtZW50T2Zmc2V0O1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIGRvbnQgcmVtb3ZlIHBvaW50XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB3YXlwb2ludHM6IGZpbHRlcmVkV2F5cG9pbnRzLFxuICAgICAgc2VnbWVudE9mZnNldDogc2VnbWVudE9mZnNldFxuICAgIH07XG4gIH1cblxuICBldmVudEJ1cy5vbignY29ubmVjdGlvblNlZ21lbnQubW92ZS5zdGFydCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBldmVudC5jb25uZWN0aW9uLFxuICAgICAgICBsYXllciA9IGNhbnZhcy5nZXRMYXllcignb3ZlcmxheXMnKTtcblxuICAgIGNvbnRleHQub3JpZ2luYWxXYXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cy5zbGljZSgpO1xuXG4gICAgLy8gYWRkIGRyYWdnZXIgZ2Z4XG4gICAgY29udGV4dC5kcmFnZ2VyR2Z4ID0gYWRkU2VnbWVudERyYWdnZXIobGF5ZXIsIGNvbnRleHQuc2VnbWVudFN0YXJ0LCBjb250ZXh0LnNlZ21lbnRFbmQpO1xuICAgIHN2Z0NsYXNzZXMoY29udGV4dC5kcmFnZ2VyR2Z4KS5hZGQoJ2Rqcy1kcmFnZ2luZycpO1xuXG4gICAgY2FudmFzLmFkZE1hcmtlcihjb25uZWN0aW9uLCBNQVJLRVJfQ09OTkVDVF9VUERBVElORyk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjb25uZWN0aW9uU2VnbWVudC5tb3ZlLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBzZWdtZW50U3RhcnRJbmRleCA9IGNvbnRleHQuc2VnbWVudFN0YXJ0SW5kZXgsXG4gICAgICAgIHNlZ21lbnRFbmRJbmRleCA9IGNvbnRleHQuc2VnbWVudEVuZEluZGV4LFxuICAgICAgICBzZWdtZW50U3RhcnQgPSBjb250ZXh0LnNlZ21lbnRTdGFydCxcbiAgICAgICAgc2VnbWVudEVuZCA9IGNvbnRleHQuc2VnbWVudEVuZCxcbiAgICAgICAgYXhpcyA9IGNvbnRleHQuYXhpcztcblxuICAgIHZhciBuZXdXYXlwb2ludHMgPSBjb250ZXh0Lm9yaWdpbmFsV2F5cG9pbnRzLnNsaWNlKCksXG4gICAgICAgIG5ld1NlZ21lbnRTdGFydCA9IGF4aXNBZGQoc2VnbWVudFN0YXJ0LCBheGlzLCBldmVudFsnZCcgKyBheGlzXSksXG4gICAgICAgIG5ld1NlZ21lbnRFbmQgPSBheGlzQWRkKHNlZ21lbnRFbmQsIGF4aXMsIGV2ZW50WydkJyArIGF4aXNdKTtcblxuICAgIC8vIG9yaWdpbmFsIHdheXBvaW50IGNvdW50IGFuZCBhZGRlZCAvIHJlbW92ZWRcbiAgICAvLyBmcm9tIHN0YXJ0IHdheXBvaW50IGRlbHRhLiBXZSB1c2UgdGhlIGxhdGVyXG4gICAgLy8gdG8gcmV0cmlldmUgdGhlIHVwZGF0ZWQgc2VnbWVudFN0YXJ0SW5kZXggLyBzZWdtZW50RW5kSW5kZXhcbiAgICB2YXIgd2F5cG9pbnRDb3VudCA9IG5ld1dheXBvaW50cy5sZW5ndGgsXG4gICAgICAgIHNlZ21lbnRPZmZzZXQgPSAwO1xuXG4gICAgLy8gbW92ZSBzZWdtZW50IHN0YXJ0IC8gZW5kIGJ5IGF4aXMgZGVsdGFcbiAgICBuZXdXYXlwb2ludHNbc2VnbWVudFN0YXJ0SW5kZXhdID0gbmV3U2VnbWVudFN0YXJ0O1xuICAgIG5ld1dheXBvaW50c1tzZWdtZW50RW5kSW5kZXhdID0gbmV3U2VnbWVudEVuZDtcblxuICAgIHZhciBzb3VyY2VUb1NlZ21lbnRPcmllbnRhdGlvbixcbiAgICAgICAgdGFyZ2V0VG9TZWdtZW50T3JpZW50YXRpb247XG5cbiAgICAvLyBoYW5kbGUgZmlyc3Qgc2VnbWVudFxuICAgIGlmIChzZWdtZW50U3RhcnRJbmRleCA8IDIpIHtcbiAgICAgIHNvdXJjZVRvU2VnbWVudE9yaWVudGF0aW9uID0gZ2V0T3JpZW50YXRpb24oY29ubmVjdGlvbi5zb3VyY2UsIG5ld1NlZ21lbnRTdGFydCk7XG5cbiAgICAgIC8vIGZpcnN0IGJlbmRwb2ludCwgcmVtb3ZlIGZpcnN0IHNlZ21lbnQgaWYgaW50ZXJzZWN0aW5nXG4gICAgICBpZiAoc2VnbWVudFN0YXJ0SW5kZXggPT09IDEpIHtcblxuICAgICAgICBpZiAoc291cmNlVG9TZWdtZW50T3JpZW50YXRpb24gPT09ICdpbnRlcnNlY3QnKSB7XG4gICAgICAgICAgbmV3V2F5cG9pbnRzLnNoaWZ0KCk7XG4gICAgICAgICAgbmV3V2F5cG9pbnRzWzBdID0gbmV3U2VnbWVudFN0YXJ0O1xuICAgICAgICAgIHNlZ21lbnRPZmZzZXQtLTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBkb2NraW5nIHBvaW50LCBhZGQgc2VnbWVudCBpZiBub3QgaW50ZXJzZWN0aW5nIGFueW1vcmVcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoc291cmNlVG9TZWdtZW50T3JpZW50YXRpb24gIT09ICdpbnRlcnNlY3QnKSB7XG4gICAgICAgICAgbmV3V2F5cG9pbnRzLnVuc2hpZnQoc2VnbWVudFN0YXJ0KTtcbiAgICAgICAgICBzZWdtZW50T2Zmc2V0Kys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgbGFzdCBzZWdtZW50XG4gICAgaWYgKHNlZ21lbnRFbmRJbmRleCA+IHdheXBvaW50Q291bnQgLSAzKSB7XG4gICAgICB0YXJnZXRUb1NlZ21lbnRPcmllbnRhdGlvbiA9IGdldE9yaWVudGF0aW9uKGNvbm5lY3Rpb24udGFyZ2V0LCBuZXdTZWdtZW50RW5kKTtcblxuICAgICAgLy8gbGFzdCBiZW5kcG9pbnQsIHJlbW92ZSBsYXN0IHNlZ21lbnQgaWYgaW50ZXJzZWN0aW5nXG4gICAgICBpZiAoc2VnbWVudEVuZEluZGV4ID09PSB3YXlwb2ludENvdW50IC0gMikge1xuXG4gICAgICAgIGlmICh0YXJnZXRUb1NlZ21lbnRPcmllbnRhdGlvbiA9PT0gJ2ludGVyc2VjdCcpIHtcbiAgICAgICAgICBuZXdXYXlwb2ludHMucG9wKCk7XG4gICAgICAgICAgbmV3V2F5cG9pbnRzW25ld1dheXBvaW50cy5sZW5ndGggLSAxXSA9IG5ld1NlZ21lbnRFbmQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gbGFzdCBiZW5kcG9pbnQsIHJlbW92ZSBsYXN0IHNlZ21lbnQgaWYgaW50ZXJzZWN0aW5nXG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHRhcmdldFRvU2VnbWVudE9yaWVudGF0aW9uICE9PSAnaW50ZXJzZWN0Jykge1xuICAgICAgICAgIG5ld1dheXBvaW50cy5wdXNoKHNlZ21lbnRFbmQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGNvbm5lY3Rpb24gd2F5cG9pbnRzXG4gICAgY29udGV4dC5uZXdXYXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cyA9IGNyb3BDb25uZWN0aW9uKGNvbm5lY3Rpb24sIG5ld1dheXBvaW50cyk7XG5cbiAgICAvLyB1cGRhdGUgZHJhZ2dlciBwb3NpdGlvblxuICAgIHVwZGF0ZURyYWdnZXIoY29udGV4dCwgc2VnbWVudE9mZnNldCwgZXZlbnQpO1xuXG4gICAgLy8gc2F2ZSBzZWdtZW50T2Zmc2V0IGluIGNvbnRleHRcbiAgICBjb250ZXh0Lm5ld1NlZ21lbnRTdGFydEluZGV4ID0gc2VnbWVudFN0YXJ0SW5kZXggKyBzZWdtZW50T2Zmc2V0O1xuXG4gICAgLy8gcmVkcmF3IGNvbm5lY3Rpb25cbiAgICByZWRyYXdDb25uZWN0aW9uKGV2ZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3Rpb25TZWdtZW50Lm1vdmUuaG92ZXInLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgZXZlbnQuY29udGV4dC5ob3ZlciA9IGV2ZW50LmhvdmVyO1xuICAgIGNhbnZhcy5hZGRNYXJrZXIoZXZlbnQuaG92ZXIsIE1BUktFUl9DT05ORUNUX0hPVkVSKTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oW1xuICAgICdjb25uZWN0aW9uU2VnbWVudC5tb3ZlLm91dCcsXG4gICAgJ2Nvbm5lY3Rpb25TZWdtZW50Lm1vdmUuY2xlYW51cCdcbiAgXSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIC8vIHJlbW92ZSBjb25uZWN0IG1hcmtlclxuICAgIC8vIGlmIGl0IHdhcyBhZGRlZFxuICAgIHZhciBob3ZlciA9IGV2ZW50LmNvbnRleHQuaG92ZXI7XG5cbiAgICBpZiAoaG92ZXIpIHtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG92ZXIsIE1BUktFUl9DT05ORUNUX0hPVkVSKTtcbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdjb25uZWN0aW9uU2VnbWVudC5tb3ZlLmNsZWFudXAnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uO1xuXG4gICAgLy8gcmVtb3ZlIGRyYWdnZXIgZ2Z4XG4gICAgaWYgKGNvbnRleHQuZHJhZ2dlckdmeCkge1xuICAgICAgc3ZnUmVtb3ZlKGNvbnRleHQuZHJhZ2dlckdmeCk7XG4gICAgfVxuXG4gICAgY2FudmFzLnJlbW92ZU1hcmtlcihjb25uZWN0aW9uLCBNQVJLRVJfQ09OTkVDVF9VUERBVElORyk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnY29ubmVjdGlvblNlZ21lbnQubW92ZS5jYW5jZWwnLFxuICAgICdjb25uZWN0aW9uU2VnbWVudC5tb3ZlLmVuZCdcbiAgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb247XG5cbiAgICBjb25uZWN0aW9uLndheXBvaW50cyA9IGNvbnRleHQub3JpZ2luYWxXYXlwb2ludHM7XG5cbiAgICByZWRyYXdDb25uZWN0aW9uKGV2ZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3Rpb25TZWdtZW50Lm1vdmUuZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgbmV3V2F5cG9pbnRzID0gY29udGV4dC5uZXdXYXlwb2ludHMsXG4gICAgICAgIG5ld1NlZ21lbnRTdGFydEluZGV4ID0gY29udGV4dC5uZXdTZWdtZW50U3RhcnRJbmRleDtcblxuICAgIC8vIGVuc3VyZSB3ZSBoYXZlIGFjdHVhbCBwaXhlbCB2YWx1ZXMgYmVuZHBvaW50XG4gICAgLy8gY29vcmRpbmF0ZXMgKGltcG9ydGFudCB3aGVuIHpvb20gbGV2ZWwgd2FzID4gMSBkdXJpbmcgbW92ZSlcbiAgICBuZXdXYXlwb2ludHMgPSBuZXdXYXlwb2ludHMubWFwKGZ1bmN0aW9uKHApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9yaWdpbmFsOiBwLm9yaWdpbmFsLFxuICAgICAgICB4OiBNYXRoLnJvdW5kKHAueCksXG4gICAgICAgIHk6IE1hdGgucm91bmQocC55KVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIGFwcGx5IGZpbHRlciByZWR1bmFudCB3YXlwb2ludHNcbiAgICB2YXIgZmlsdGVyZWQgPSBmaWx0ZXJSZWR1bmRhbnRXYXlwb2ludHMobmV3V2F5cG9pbnRzLCBuZXdTZWdtZW50U3RhcnRJbmRleCk7XG5cbiAgICAvLyBnZXQgZmlsdGVyZWQgd2F5cG9pbnRzXG4gICAgdmFyIGZpbHRlcmVkV2F5cG9pbnRzID0gZmlsdGVyZWQud2F5cG9pbnRzLFxuICAgICAgICBjcm9wcGVkV2F5cG9pbnRzID0gY3JvcENvbm5lY3Rpb24oY29ubmVjdGlvbiwgZmlsdGVyZWRXYXlwb2ludHMpLFxuICAgICAgICBzZWdtZW50T2Zmc2V0ID0gZmlsdGVyZWQuc2VnbWVudE9mZnNldDtcblxuICAgIHZhciBoaW50cyA9IHtcbiAgICAgIHNlZ21lbnRNb3ZlOiB7XG4gICAgICAgIHNlZ21lbnRTdGFydEluZGV4OiBjb250ZXh0LnNlZ21lbnRTdGFydEluZGV4LFxuICAgICAgICBuZXdTZWdtZW50U3RhcnRJbmRleDogbmV3U2VnbWVudFN0YXJ0SW5kZXggKyBzZWdtZW50T2Zmc2V0XG4gICAgICB9XG4gICAgfTtcblxuICAgIG1vZGVsaW5nLnVwZGF0ZVdheXBvaW50cyhjb25uZWN0aW9uLCBjcm9wcGVkV2F5cG9pbnRzLCBoaW50cyk7XG4gIH0pO1xufVxuXG5Db25uZWN0aW9uU2VnbWVudE1vdmUuJGluamVjdCA9IFtcbiAgJ2luamVjdG9yJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdkcmFnZ2luZycsXG4gICdncmFwaGljc0ZhY3RvcnknLFxuICAnbW9kZWxpbmcnXG5dO1xuIiwiaW1wb3J0IERyYWdnaW5nTW9kdWxlIGZyb20gJy4uL2RyYWdnaW5nJztcbmltcG9ydCBSdWxlc01vZHVsZSBmcm9tICcuLi9ydWxlcyc7XG5cbmltcG9ydCBCZW5kcG9pbnRzIGZyb20gJy4vQmVuZHBvaW50cyc7XG5pbXBvcnQgQmVuZHBvaW50TW92ZSBmcm9tICcuL0JlbmRwb2ludE1vdmUnO1xuaW1wb3J0IEJlbmRwb2ludE1vdmVQcmV2aWV3IGZyb20gJy4vQmVuZHBvaW50TW92ZVByZXZpZXcnO1xuaW1wb3J0IENvbm5lY3Rpb25TZWdtZW50TW92ZSBmcm9tICcuL0Nvbm5lY3Rpb25TZWdtZW50TW92ZSc7XG5pbXBvcnQgQmVuZHBvaW50U25hcHBpbmcgZnJvbSAnLi9CZW5kcG9pbnRTbmFwcGluZyc7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIERyYWdnaW5nTW9kdWxlLFxuICAgIFJ1bGVzTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdiZW5kcG9pbnRzJywgJ2JlbmRwb2ludFNuYXBwaW5nJywgJ2JlbmRwb2ludE1vdmVQcmV2aWV3JyBdLFxuICBiZW5kcG9pbnRzOiBbICd0eXBlJywgQmVuZHBvaW50cyBdLFxuICBiZW5kcG9pbnRNb3ZlOiBbICd0eXBlJywgQmVuZHBvaW50TW92ZSBdLFxuICBiZW5kcG9pbnRNb3ZlUHJldmlldzogWyAndHlwZScsIEJlbmRwb2ludE1vdmVQcmV2aWV3IF0sXG4gIGNvbm5lY3Rpb25TZWdtZW50TW92ZTogWyAndHlwZScsIENvbm5lY3Rpb25TZWdtZW50TW92ZSBdLFxuICBiZW5kcG9pbnRTbmFwcGluZzogWyAndHlwZScsIEJlbmRwb2ludFNuYXBwaW5nIF1cbn07XG4iLCJpbXBvcnQge1xuICBnZXRUeXBlIGFzIGdldEVsZW1lbnRUeXBlXG59IGZyb20gJy4uLy4uL3V0aWwvRWxlbWVudHMnO1xuXG4vKipcbiAqIEFkZHMgY2hhbmdlIHN1cHBvcnQgdG8gdGhlIGRpYWdyYW0sIGluY2x1ZGluZ1xuICpcbiAqIDx1bD5cbiAqICAgPGxpPnJlZHJhd2luZyBzaGFwZXMgYW5kIGNvbm5lY3Rpb25zIG9uIGNoYW5nZTwvbGk+XG4gKiA8L3VsPlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XG4gKiBAcGFyYW0ge0dyYXBoaWNzRmFjdG9yeX0gZ3JhcGhpY3NGYWN0b3J5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENoYW5nZVN1cHBvcnQoXG4gICAgZXZlbnRCdXMsIGNhbnZhcywgZWxlbWVudFJlZ2lzdHJ5LFxuICAgIGdyYXBoaWNzRmFjdG9yeSkge1xuXG5cbiAgLy8gcmVkcmF3IHNoYXBlcyAvIGNvbm5lY3Rpb25zIG9uIGNoYW5nZVxuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50LmNoYW5nZWQnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50O1xuXG4gICAgLy8gZWxlbWVudCBtaWdodCBoYXZlIGJlZW4gZGVsZXRlZCBhbmQgcmVwbGFjZWQgYnkgbmV3IGVsZW1lbnQgd2l0aCBzYW1lIElEXG4gICAgLy8gdGh1cyBjaGVjayBmb3IgcGFyZW50IG9mIGVsZW1lbnQgZXhjZXB0IGZvciByb290IGVsZW1lbnRcbiAgICBpZiAoZWxlbWVudC5wYXJlbnQgfHwgZWxlbWVudCA9PT0gY2FudmFzLmdldFJvb3RFbGVtZW50KCkpIHtcbiAgICAgIGV2ZW50LmdmeCA9IGVsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhlbGVtZW50KTtcbiAgICB9XG5cbiAgICAvLyBzaGFwZSArIGdmeCBtYXkgaGF2ZSBiZWVuIGRlbGV0ZWRcbiAgICBpZiAoIWV2ZW50LmdmeCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50QnVzLmZpcmUoZ2V0RWxlbWVudFR5cGUoZWxlbWVudCkgKyAnLmNoYW5nZWQnLCBldmVudCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50cy5jaGFuZ2VkJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBlbGVtZW50cyA9IGV2ZW50LmVsZW1lbnRzO1xuXG4gICAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlKSB7XG4gICAgICBldmVudEJ1cy5maXJlKCdlbGVtZW50LmNoYW5nZWQnLCB7IGVsZW1lbnQ6IGUgfSk7XG4gICAgfSk7XG5cbiAgICBncmFwaGljc0ZhY3RvcnkudXBkYXRlQ29udGFpbm1lbnRzKGVsZW1lbnRzKTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ3NoYXBlLmNoYW5nZWQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIGdyYXBoaWNzRmFjdG9yeS51cGRhdGUoJ3NoYXBlJywgZXZlbnQuZWxlbWVudCwgZXZlbnQuZ2Z4KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3Rpb24uY2hhbmdlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgZ3JhcGhpY3NGYWN0b3J5LnVwZGF0ZSgnY29ubmVjdGlvbicsIGV2ZW50LmVsZW1lbnQsIGV2ZW50LmdmeCk7XG4gIH0pO1xufVxuXG5DaGFuZ2VTdXBwb3J0LiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ2dyYXBoaWNzRmFjdG9yeSdcbl07IiwiaW1wb3J0IENoYW5nZVN1cHBvcnQgZnJvbSAnLi9DaGFuZ2VTdXBwb3J0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAnY2hhbmdlU3VwcG9ydCddLFxuICBjaGFuZ2VTdXBwb3J0OiBbICd0eXBlJywgQ2hhbmdlU3VwcG9ydCBdXG59OyIsIi8qKlxuICogQSBjbGlwIGJvYXJkIHN0dWJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ2xpcGJvYXJkKCkge31cblxuXG5DbGlwYm9hcmQucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fZGF0YTtcbn07XG5cbkNsaXBib2FyZC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oZGF0YSkge1xuICB0aGlzLl9kYXRhID0gZGF0YTtcbn07XG5cbkNsaXBib2FyZC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gIGRlbGV0ZSB0aGlzLl9kYXRhO1xuXG4gIHJldHVybiBkYXRhO1xufTtcblxuQ2xpcGJvYXJkLnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhdGhpcy5fZGF0YTtcbn07IiwiaW1wb3J0IENsaXBib2FyZCBmcm9tICcuL0NsaXBib2FyZCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY2xpcGJvYXJkOiBbICd0eXBlJywgQ2xpcGJvYXJkIF1cbn07XG4iLCJpbXBvcnQge1xuICBnZXRNaWRcbn0gZnJvbSAnLi4vLi4vbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc05pbCxcbiAgaXNPYmplY3Rcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvbm5lY3QoZXZlbnRCdXMsIGRyYWdnaW5nLCBtb2RlbGluZywgcnVsZXMpIHtcblxuICAvLyBydWxlc1xuXG4gIGZ1bmN0aW9uIGNhbkNvbm5lY3Qoc291cmNlLCB0YXJnZXQpIHtcbiAgICByZXR1cm4gcnVsZXMuYWxsb3dlZCgnY29ubmVjdGlvbi5jcmVhdGUnLCB7XG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5Db25uZWN0UmV2ZXJzZShzb3VyY2UsIHRhcmdldCkge1xuICAgIHJldHVybiBjYW5Db25uZWN0KHRhcmdldCwgc291cmNlKTtcbiAgfVxuXG5cbiAgLy8gZXZlbnQgaGFuZGxlcnNcblxuICBldmVudEJ1cy5vbignY29ubmVjdC5ob3ZlcicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzdGFydCA9IGNvbnRleHQuc3RhcnQsXG4gICAgICAgIGhvdmVyID0gZXZlbnQuaG92ZXIsXG4gICAgICAgIGNhbkV4ZWN1dGU7XG5cbiAgICAvLyBjYWNoZSBob3ZlciBzdGF0ZVxuICAgIGNvbnRleHQuaG92ZXIgPSBob3ZlcjtcblxuICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGUgPSBjYW5Db25uZWN0KHN0YXJ0LCBob3Zlcik7XG5cbiAgICAvLyBpZ25vcmUgaG92ZXJcbiAgICBpZiAoaXNOaWwoY2FuRXhlY3V0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2FuRXhlY3V0ZSAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnRleHQuc291cmNlID0gc3RhcnQ7XG4gICAgICBjb250ZXh0LnRhcmdldCA9IGhvdmVyO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2FuRXhlY3V0ZSA9IGNvbnRleHQuY2FuRXhlY3V0ZSA9IGNhbkNvbm5lY3RSZXZlcnNlKHN0YXJ0LCBob3Zlcik7XG5cbiAgICAvLyBpZ25vcmUgaG92ZXJcbiAgICBpZiAoaXNOaWwoY2FuRXhlY3V0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2FuRXhlY3V0ZSAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnRleHQuc291cmNlID0gaG92ZXI7XG4gICAgICBjb250ZXh0LnRhcmdldCA9IHN0YXJ0O1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnY29ubmVjdC5vdXQnLCAnY29ubmVjdC5jbGVhbnVwJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dDtcblxuICAgIGNvbnRleHQuaG92ZXIgPSBudWxsO1xuICAgIGNvbnRleHQuc291cmNlID0gbnVsbDtcbiAgICBjb250ZXh0LnRhcmdldCA9IG51bGw7XG5cbiAgICBjb250ZXh0LmNhbkV4ZWN1dGUgPSBmYWxzZTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3QuZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGUsXG4gICAgICAgIGNvbm5lY3Rpb25TdGFydCA9IGNvbnRleHQuY29ubmVjdGlvblN0YXJ0LFxuICAgICAgICBjb25uZWN0aW9uRW5kID0ge1xuICAgICAgICAgIHg6IGV2ZW50LngsXG4gICAgICAgICAgeTogZXZlbnQueVxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XG5cbiAgICBpZiAoIWNhbkV4ZWN1dGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgYXR0cnMgPSBudWxsLFxuICAgICAgICBoaW50cyA9IHtcbiAgICAgICAgICBjb25uZWN0aW9uU3RhcnQ6IGlzUmV2ZXJzZShjb250ZXh0KSA/IGNvbm5lY3Rpb25FbmQgOiBjb25uZWN0aW9uU3RhcnQsXG4gICAgICAgICAgY29ubmVjdGlvbkVuZDogaXNSZXZlcnNlKGNvbnRleHQpID8gY29ubmVjdGlvblN0YXJ0IDogY29ubmVjdGlvbkVuZFxuICAgICAgICB9O1xuXG4gICAgaWYgKGlzT2JqZWN0KGNhbkV4ZWN1dGUpKSB7XG4gICAgICBhdHRycyA9IGNhbkV4ZWN1dGU7XG4gICAgfVxuXG4gICAgbW9kZWxpbmcuY29ubmVjdChzb3VyY2UsIHRhcmdldCwgYXR0cnMsIGhpbnRzKTtcbiAgfSk7XG5cblxuICAvLyBBUElcblxuICAvKipcbiAgICogU3RhcnQgY29ubmVjdCBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRXZlbnR9IGV2ZW50XG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IHN0YXJ0XG4gICAqIEBwYXJhbSB7UG9pbnR9IFtjb25uZWN0aW9uU3RhcnRdXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2F1dG9BY3RpdmF0ZT1mYWxzZV1cbiAgICovXG4gIHRoaXMuc3RhcnQgPSBmdW5jdGlvbihldmVudCwgc3RhcnQsIGNvbm5lY3Rpb25TdGFydCwgYXV0b0FjdGl2YXRlKSB7XG4gICAgaWYgKCFpc09iamVjdChjb25uZWN0aW9uU3RhcnQpKSB7XG4gICAgICBhdXRvQWN0aXZhdGUgPSBjb25uZWN0aW9uU3RhcnQ7XG4gICAgICBjb25uZWN0aW9uU3RhcnQgPSBnZXRNaWQoc3RhcnQpO1xuICAgIH1cblxuICAgIGRyYWdnaW5nLmluaXQoZXZlbnQsICdjb25uZWN0Jywge1xuICAgICAgYXV0b0FjdGl2YXRlOiBhdXRvQWN0aXZhdGUsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHNoYXBlOiBzdGFydCxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICBjb25uZWN0aW9uU3RhcnQ6IGNvbm5lY3Rpb25TdGFydFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59XG5cbkNvbm5lY3QuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2RyYWdnaW5nJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3J1bGVzJ1xuXTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmV2ZXJzZShjb250ZXh0KSB7XG4gIHZhciBob3ZlciA9IGNvbnRleHQuaG92ZXIsXG4gICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0O1xuXG4gIHJldHVybiBob3ZlciAmJiBzb3VyY2UgJiYgaG92ZXIgPT09IHNvdXJjZSAmJiBzb3VyY2UgIT09IHRhcmdldDtcbn0iLCJpbXBvcnQgeyBpc1JldmVyc2UgfSBmcm9tICcuL0Nvbm5lY3QnO1xuXG52YXIgSElHSF9QUklPUklUWSA9IDExMDAsXG4gICAgTE9XX1BSSU9SSVRZID0gOTAwO1xuXG52YXIgTUFSS0VSX09LID0gJ2Nvbm5lY3Qtb2snLFxuICAgIE1BUktFUl9OT1RfT0sgPSAnY29ubmVjdC1ub3Qtb2snO1xuXG4vKipcbiAqIFNob3dzIGNvbm5lY3Rpb24gcHJldmlldyBkdXJpbmcgY29ubmVjdC5cbiAqXG4gKiBAcGFyYW0ge2RpZGkuSW5qZWN0b3J9IGluamVjdG9yXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDb25uZWN0UHJldmlldyhpbmplY3RvciwgZXZlbnRCdXMsIGNhbnZhcykge1xuICB2YXIgY29ubmVjdGlvblByZXZpZXcgPSBpbmplY3Rvci5nZXQoJ2Nvbm5lY3Rpb25QcmV2aWV3JywgZmFsc2UpO1xuXG4gIGNvbm5lY3Rpb25QcmV2aWV3ICYmIGV2ZW50QnVzLm9uKCdjb25uZWN0Lm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY2FuQ29ubmVjdCA9IGNvbnRleHQuY2FuRXhlY3V0ZSxcbiAgICAgICAgaG92ZXIgPSBjb250ZXh0LmhvdmVyLFxuICAgICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgICAgc3RhcnQgPSBjb250ZXh0LnN0YXJ0LFxuICAgICAgICBzdGFydFBvc2l0aW9uID0gY29udGV4dC5zdGFydFBvc2l0aW9uLFxuICAgICAgICBjb25uZWN0aW9uU3RhcnQgPSBjb250ZXh0LmNvbm5lY3Rpb25TdGFydCxcbiAgICAgICAgY29ubmVjdGlvbkVuZCA9IGNvbnRleHQuY29ubmVjdGlvbkVuZCxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XG5cbiAgICBpZiAoIWNvbm5lY3Rpb25TdGFydCkge1xuICAgICAgY29ubmVjdGlvblN0YXJ0ID0gaXNSZXZlcnNlKGNvbnRleHQpID8ge1xuICAgICAgICB4OiBldmVudC54LFxuICAgICAgICB5OiBldmVudC55XG4gICAgICB9IDogc3RhcnRQb3NpdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoIWNvbm5lY3Rpb25FbmQpIHtcbiAgICAgIGNvbm5lY3Rpb25FbmQgPSBpc1JldmVyc2UoY29udGV4dCkgPyBzdGFydFBvc2l0aW9uIDoge1xuICAgICAgICB4OiBldmVudC54LFxuICAgICAgICB5OiBldmVudC55XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbm5lY3Rpb25QcmV2aWV3LmRyYXdQcmV2aWV3KGNvbnRleHQsIGNhbkNvbm5lY3QsIHtcbiAgICAgIHNvdXJjZTogc291cmNlIHx8IHN0YXJ0LFxuICAgICAgdGFyZ2V0OiB0YXJnZXQgfHwgaG92ZXIsXG4gICAgICBjb25uZWN0aW9uU3RhcnQ6IGNvbm5lY3Rpb25TdGFydCxcbiAgICAgIGNvbm5lY3Rpb25FbmQ6IGNvbm5lY3Rpb25FbmRcbiAgICB9KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3QuaG92ZXInLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBob3ZlciA9IGV2ZW50LmhvdmVyLFxuICAgICAgICBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlO1xuXG4gICAgLy8gaWdub3JlIGhvdmVyXG4gICAgaWYgKGNhbkV4ZWN1dGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjYW52YXMuYWRkTWFya2VyKGhvdmVyLCBjYW5FeGVjdXRlID8gTUFSS0VSX09LIDogTUFSS0VSX05PVF9PSyk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnY29ubmVjdC5vdXQnLFxuICAgICdjb25uZWN0LmNsZWFudXAnXG4gIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGhvdmVyID0gZXZlbnQuaG92ZXI7XG5cbiAgICBpZiAoaG92ZXIpIHtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoaG92ZXIsIE1BUktFUl9PSyk7XG4gICAgICBjYW52YXMucmVtb3ZlTWFya2VyKGhvdmVyLCBNQVJLRVJfTk9UX09LKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbm5lY3Rpb25QcmV2aWV3ICYmIGV2ZW50QnVzLm9uKCdjb25uZWN0LmNsZWFudXAnLCBmdW5jdGlvbihldmVudCkge1xuICAgIGNvbm5lY3Rpb25QcmV2aWV3LmNsZWFuVXAoZXZlbnQuY29udGV4dCk7XG4gIH0pO1xufVxuXG5Db25uZWN0UHJldmlldy4kaW5qZWN0ID0gW1xuICAnaW5qZWN0b3InLFxuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJ1xuXTtcbiIsImltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnLi4vc2VsZWN0aW9uJztcbmltcG9ydCBSdWxlc01vZHVsZSBmcm9tICcuLi9ydWxlcyc7XG5pbXBvcnQgRHJhZ2dpbmdNb2R1bGUgZnJvbSAnLi4vZHJhZ2dpbmcnO1xuXG5pbXBvcnQgQ29ubmVjdCBmcm9tICcuL0Nvbm5lY3QnO1xuaW1wb3J0IENvbm5lY3RQcmV2aWV3IGZyb20gJy4vQ29ubmVjdFByZXZpZXcnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgU2VsZWN0aW9uTW9kdWxlLFxuICAgIFJ1bGVzTW9kdWxlLFxuICAgIERyYWdnaW5nTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbXG4gICAgJ2Nvbm5lY3RQcmV2aWV3J1xuICBdLFxuICBjb25uZWN0OiBbICd0eXBlJywgQ29ubmVjdCBdLFxuICBjb25uZWN0UHJldmlldzogWyAndHlwZScsIENvbm5lY3RQcmV2aWV3IF1cbn07XG4iLCJpbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNsYXNzZXMgYXMgc3ZnQ2xhc3NlcyxcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZSxcbiAgcmVtb3ZlIGFzIHN2Z1JlbW92ZSxcbiAgY2xlYXIgYXMgc3ZnQ2xlYXJcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQge1xuICBpc09iamVjdFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGdldEVsZW1lbnRMaW5lSW50ZXJzZWN0aW9uLFxuICBnZXRNaWRcbn0gZnJvbSAnLi4vLi4vbGF5b3V0L0xheW91dFV0aWwnO1xuXG5cbnZhciBNQVJLRVJfQ09OTkVDVElPTl9QUkVWSUVXID0gJ2Rqcy1jb25uZWN0aW9uLXByZXZpZXcnO1xuXG4vKipcbiAqIERyYXdzIGNvbm5lY3Rpb24gcHJldmlldy4gT3B0aW9uYWxseSwgdGhpcyBjYW4gdXNlIGxheW91dGVyIGFuZCBjb25uZWN0aW9uIGRvY2tpbmcgdG8gZHJhd1xuICogYmV0dGVyIGxvb2tpbmcgcHJldmlld3MuXG4gKlxuICogQHBhcmFtIHtkaWRpLkluamVjdG9yfSBpbmplY3RvclxuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICogQHBhcmFtIHtHcmFwaGljc0ZhY3Rvcnl9IGdyYXBoaWNzRmFjdG9yeVxuICogQHBhcmFtIHtFbGVtZW50RmFjdG9yeX0gZWxlbWVudEZhY3RvcnlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29ubmVjdGlvblByZXZpZXcoXG4gICAgaW5qZWN0b3IsXG4gICAgY2FudmFzLFxuICAgIGdyYXBoaWNzRmFjdG9yeSxcbiAgICBlbGVtZW50RmFjdG9yeVxuKSB7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcbiAgdGhpcy5fZ3JhcGhpY3NGYWN0b3J5ID0gZ3JhcGhpY3NGYWN0b3J5O1xuICB0aGlzLl9lbGVtZW50RmFjdG9yeSA9IGVsZW1lbnRGYWN0b3J5O1xuXG4gIC8vIG9wdGlvbmFsIGNvbXBvbmVudHNcbiAgdGhpcy5fY29ubmVjdGlvbkRvY2tpbmcgPSBpbmplY3Rvci5nZXQoJ2Nvbm5lY3Rpb25Eb2NraW5nJywgZmFsc2UpO1xuICB0aGlzLl9sYXlvdXRlciA9IGluamVjdG9yLmdldCgnbGF5b3V0ZXInLCBmYWxzZSk7XG59XG5cbkNvbm5lY3Rpb25QcmV2aWV3LiRpbmplY3QgPSBbXG4gICdpbmplY3RvcicsXG4gICdjYW52YXMnLFxuICAnZ3JhcGhpY3NGYWN0b3J5JyxcbiAgJ2VsZW1lbnRGYWN0b3J5J1xuXTtcblxuLyoqXG4gKiBEcmF3IGNvbm5lY3Rpb24gcHJldmlldy5cbiAqXG4gKiBQcm92aWRlIGF0IGxlYXN0IG9uZSBvZiA8c291cmNlLCBjb25uZWN0aW9uU3RhcnQ+IGFuZCA8dGFyZ2V0LCBjb25uZWN0aW9uRW5kPiB0byBjcmVhdGUgYSBwcmV2aWV3LlxuICogSW4gdGhlIGNsZWFuIHVwIHN0YWdlLCBjYWxsIGBjb25uZWN0aW9uUHJldmlldyNjbGVhblVwYCB3aXRoIHRoZSBjb250ZXh0IHRvIHJlbW92ZSBwcmV2aWV3LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge09iamVjdHxib29sZWFufSBjYW5Db25uZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gaGludHNcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLnNoYXBlfSBbaGludHMuc291cmNlXSBzb3VyY2UgZWxlbWVudFxuICogQHBhcmFtIHtkanMubW9kZWwuc2hhcGV9IFtoaW50cy50YXJnZXRdIHRhcmdldCBlbGVtZW50XG4gKiBAcGFyYW0ge1BvaW50fSBbaGludHMuY29ubmVjdGlvblN0YXJ0XSBjb25uZWN0aW9uIHByZXZpZXcgc3RhcnRcbiAqIEBwYXJhbSB7UG9pbnR9IFtoaW50cy5jb25uZWN0aW9uRW5kXSBjb25uZWN0aW9uIHByZXZpZXcgZW5kXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gW2hpbnRzLndheXBvaW50c10gcHJvdmlkZWQgd2F5cG9pbnRzIGZvciBwcmV2aWV3XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtoaW50cy5ub0xheW91dF0gdHJ1ZSBpZiBwcmV2aWV3IHNob3VsZCBub3QgYmUgbGFpZCBvdXRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hpbnRzLm5vQ3JvcHBpbmddIHRydWUgaWYgcHJldmlldyBzaG91bGQgbm90IGJlIGNyb3BwZWRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hpbnRzLm5vTm9vcF0gdHJ1ZSBpZiBzaW1wbGUgY29ubmVjdGlvbiBzaG91bGQgbm90IGJlIGRyYXduXG4gKi9cbkNvbm5lY3Rpb25QcmV2aWV3LnByb3RvdHlwZS5kcmF3UHJldmlldyA9IGZ1bmN0aW9uKGNvbnRleHQsIGNhbkNvbm5lY3QsIGhpbnRzKSB7XG5cbiAgaGludHMgPSBoaW50cyB8fCB7fTtcblxuICB2YXIgY29ubmVjdGlvblByZXZpZXdHZnggPSBjb250ZXh0LmNvbm5lY3Rpb25QcmV2aWV3R2Z4LFxuICAgICAgZ2V0Q29ubmVjdGlvbiA9IGNvbnRleHQuZ2V0Q29ubmVjdGlvbixcbiAgICAgIHNvdXJjZSA9IGhpbnRzLnNvdXJjZSxcbiAgICAgIHRhcmdldCA9IGhpbnRzLnRhcmdldCxcbiAgICAgIHdheXBvaW50cyA9IGhpbnRzLndheXBvaW50cyxcbiAgICAgIGNvbm5lY3Rpb25TdGFydCA9IGhpbnRzLmNvbm5lY3Rpb25TdGFydCxcbiAgICAgIGNvbm5lY3Rpb25FbmQgPSBoaW50cy5jb25uZWN0aW9uRW5kLFxuICAgICAgbm9MYXlvdXQgPSBoaW50cy5ub0xheW91dCxcbiAgICAgIG5vQ3JvcHBpbmcgPSBoaW50cy5ub0Nyb3BwaW5nLFxuICAgICAgbm9Ob29wID0gaGludHMubm9Ob29wLFxuICAgICAgY29ubmVjdGlvbjtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgaWYgKCFjb25uZWN0aW9uUHJldmlld0dmeCkge1xuICAgIGNvbm5lY3Rpb25QcmV2aWV3R2Z4ID0gY29udGV4dC5jb25uZWN0aW9uUHJldmlld0dmeCA9IHRoaXMuY3JlYXRlQ29ubmVjdGlvblByZXZpZXdHZngoKTtcbiAgfVxuXG4gIHN2Z0NsZWFyKGNvbm5lY3Rpb25QcmV2aWV3R2Z4KTtcblxuICBpZiAoIWdldENvbm5lY3Rpb24pIHtcbiAgICBnZXRDb25uZWN0aW9uID0gY29udGV4dC5nZXRDb25uZWN0aW9uID0gY2FjaGVSZXR1cm5WYWx1ZXMoZnVuY3Rpb24oY2FuQ29ubmVjdCwgc291cmNlLCB0YXJnZXQpIHtcbiAgICAgIHJldHVybiBzZWxmLmdldENvbm5lY3Rpb24oY2FuQ29ubmVjdCwgc291cmNlLCB0YXJnZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGNhbkNvbm5lY3QpIHtcbiAgICBjb25uZWN0aW9uID0gZ2V0Q29ubmVjdGlvbihjYW5Db25uZWN0LCBzb3VyY2UsIHRhcmdldCk7XG4gIH1cblxuICBpZiAoIWNvbm5lY3Rpb24pIHtcbiAgICAhbm9Ob29wICYmIHRoaXMuZHJhd05vb3BQcmV2aWV3KGNvbm5lY3Rpb25QcmV2aWV3R2Z4LCBoaW50cyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29ubmVjdGlvbi53YXlwb2ludHMgPSB3YXlwb2ludHMgfHwgW107XG5cbiAgLy8gb3B0aW9uYWwgbGF5b3V0XG4gIGlmICh0aGlzLl9sYXlvdXRlciAmJiAhbm9MYXlvdXQpIHtcbiAgICBjb25uZWN0aW9uLndheXBvaW50cyA9IHRoaXMuX2xheW91dGVyLmxheW91dENvbm5lY3Rpb24oY29ubmVjdGlvbiwge1xuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIGNvbm5lY3Rpb25TdGFydDogY29ubmVjdGlvblN0YXJ0LFxuICAgICAgY29ubmVjdGlvbkVuZDogY29ubmVjdGlvbkVuZCxcbiAgICAgIHdheXBvaW50czogaGludHMud2F5cG9pbnRzIHx8IGNvbm5lY3Rpb24ud2F5cG9pbnRzXG4gICAgfSk7XG4gIH1cblxuICAvLyBmYWxsYmFjayBpZiBubyB3YXlwb2ludHMgd2VyZSBwcm92aWRlZCBub3IgY3JlYXRlZCB3aXRoIGxheW91dGVyXG4gIGlmICghY29ubmVjdGlvbi53YXlwb2ludHMgfHwgIWNvbm5lY3Rpb24ud2F5cG9pbnRzLmxlbmd0aCkge1xuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gW1xuICAgICAgc291cmNlID8gZ2V0TWlkKHNvdXJjZSkgOiBjb25uZWN0aW9uU3RhcnQsXG4gICAgICB0YXJnZXQgPyBnZXRNaWQodGFyZ2V0KSA6IGNvbm5lY3Rpb25FbmRcbiAgICBdO1xuICB9XG5cbiAgLy8gb3B0aW9uYWwgY3JvcHBpbmdcbiAgaWYgKHRoaXMuX2Nvbm5lY3Rpb25Eb2NraW5nICYmIChzb3VyY2UgfHwgdGFyZ2V0KSAmJiAhbm9Dcm9wcGluZykge1xuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gdGhpcy5fY29ubmVjdGlvbkRvY2tpbmcuZ2V0Q3JvcHBlZFdheXBvaW50cyhjb25uZWN0aW9uLCBzb3VyY2UsIHRhcmdldCk7XG4gIH1cblxuICB0aGlzLl9ncmFwaGljc0ZhY3RvcnkuZHJhd0Nvbm5lY3Rpb24oY29ubmVjdGlvblByZXZpZXdHZngsIGNvbm5lY3Rpb24pO1xufTtcblxuLyoqXG4gKiBEcmF3IHNpbXBsZSBjb25uZWN0aW9uIGJldHdlZW4gc291cmNlIGFuZCB0YXJnZXQgb3IgcHJvdmlkZWQgcG9pbnRzLlxuICpcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gY29ubmVjdGlvblByZXZpZXdHZnggY29udGFpbmVyIGZvciB0aGUgY29ubmVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGhpbnRzXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5zaGFwZX0gW2hpbnRzLnNvdXJjZV0gc291cmNlIGVsZW1lbnRcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLnNoYXBlfSBbaGludHMudGFyZ2V0XSB0YXJnZXQgZWxlbWVudFxuICogQHBhcmFtIHtQb2ludH0gW2hpbnRzLmNvbm5lY3Rpb25TdGFydF0gcmVxdWlyZWQgaWYgc291cmNlIGlzIG5vdCBwcm92aWRlZFxuICogQHBhcmFtIHtQb2ludH0gW2hpbnRzLmNvbm5lY3Rpb25FbmRdIHJlcXVpcmVkIGlmIHRhcmdldCBpcyBub3QgcHJvdmlkZWRcbiAqL1xuQ29ubmVjdGlvblByZXZpZXcucHJvdG90eXBlLmRyYXdOb29wUHJldmlldyA9IGZ1bmN0aW9uKGNvbm5lY3Rpb25QcmV2aWV3R2Z4LCBoaW50cykge1xuICB2YXIgc291cmNlID0gaGludHMuc291cmNlLFxuICAgICAgdGFyZ2V0ID0gaGludHMudGFyZ2V0LFxuICAgICAgc3RhcnQgPSBoaW50cy5jb25uZWN0aW9uU3RhcnQgfHwgZ2V0TWlkKHNvdXJjZSksXG4gICAgICBlbmQgPSBoaW50cy5jb25uZWN0aW9uRW5kIHx8IGdldE1pZCh0YXJnZXQpO1xuXG4gIHZhciB3YXlwb2ludHMgPSB0aGlzLmNyb3BXYXlwb2ludHMoc3RhcnQsIGVuZCwgc291cmNlLCB0YXJnZXQpO1xuXG4gIHZhciBjb25uZWN0aW9uID0gdGhpcy5jcmVhdGVOb29wQ29ubmVjdGlvbih3YXlwb2ludHNbMF0sIHdheXBvaW50c1sxXSk7XG5cbiAgc3ZnQXBwZW5kKGNvbm5lY3Rpb25QcmV2aWV3R2Z4LCBjb25uZWN0aW9uKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGNyb3BwZWQgd2F5cG9pbnRzLlxuICpcbiAqIEBwYXJhbSB7UG9pbnR9IHN0YXJ0XG4gKiBAcGFyYW0ge1BvaW50fSBlbmRcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLnNoYXBlfSBzb3VyY2VcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLnNoYXBlfSB0YXJnZXRcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbkNvbm5lY3Rpb25QcmV2aWV3LnByb3RvdHlwZS5jcm9wV2F5cG9pbnRzID0gZnVuY3Rpb24oc3RhcnQsIGVuZCwgc291cmNlLCB0YXJnZXQpIHtcbiAgdmFyIGdyYXBoaWNzRmFjdG9yeSA9IHRoaXMuX2dyYXBoaWNzRmFjdG9yeSxcbiAgICAgIHNvdXJjZVBhdGggPSBzb3VyY2UgJiYgZ3JhcGhpY3NGYWN0b3J5LmdldFNoYXBlUGF0aChzb3VyY2UpLFxuICAgICAgdGFyZ2V0UGF0aCA9IHRhcmdldCAmJiBncmFwaGljc0ZhY3RvcnkuZ2V0U2hhcGVQYXRoKHRhcmdldCksXG4gICAgICBjb25uZWN0aW9uUGF0aCA9IGdyYXBoaWNzRmFjdG9yeS5nZXRDb25uZWN0aW9uUGF0aCh7IHdheXBvaW50czogWyBzdGFydCwgZW5kIF0gfSk7XG5cbiAgc3RhcnQgPSAoc291cmNlICYmIGdldEVsZW1lbnRMaW5lSW50ZXJzZWN0aW9uKHNvdXJjZVBhdGgsIGNvbm5lY3Rpb25QYXRoLCB0cnVlKSkgfHwgc3RhcnQ7XG4gIGVuZCA9ICh0YXJnZXQgJiYgZ2V0RWxlbWVudExpbmVJbnRlcnNlY3Rpb24odGFyZ2V0UGF0aCwgY29ubmVjdGlvblBhdGgsIGZhbHNlKSkgfHwgZW5kO1xuXG4gIHJldHVybiBbIHN0YXJ0LCBlbmQgXTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGNvbm5lY3Rpb24gcHJldmlldyBjb250YWluZXIgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dF1cbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gW2NvbnRleHQuY29ubmVjdGlvblByZXZpZXdHZnhdIHByZXZpZXcgY29udGFpbmVyXG4gKi9cbkNvbm5lY3Rpb25QcmV2aWV3LnByb3RvdHlwZS5jbGVhblVwID0gZnVuY3Rpb24oY29udGV4dCkge1xuICBpZiAoY29udGV4dCAmJiBjb250ZXh0LmNvbm5lY3Rpb25QcmV2aWV3R2Z4KSB7XG4gICAgc3ZnUmVtb3ZlKGNvbnRleHQuY29ubmVjdGlvblByZXZpZXdHZngpO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCBjb25uZWN0aW9uIHRoYXQgY29ubmVjdHMgc291cmNlIGFuZCB0YXJnZXQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8Ym9vbGVhbn0gY2FuQ29ubmVjdFxuICpcbiAqIEByZXR1cm5zIHtkanMubW9kZWwuY29ubmVjdGlvbn1cbiAqL1xuQ29ubmVjdGlvblByZXZpZXcucHJvdG90eXBlLmdldENvbm5lY3Rpb24gPSBmdW5jdGlvbihjYW5Db25uZWN0KSB7XG4gIHZhciBhdHRycyA9IGVuc3VyZUNvbm5lY3Rpb25BdHRycyhjYW5Db25uZWN0KTtcblxuICByZXR1cm4gdGhpcy5fZWxlbWVudEZhY3RvcnkuY3JlYXRlQ29ubmVjdGlvbihhdHRycyk7XG59O1xuXG5cbi8qKlxuICogQWRkIGFuZCByZXR1cm4gcHJldmlldyBncmFwaGljcy5cbiAqXG4gKiBAcmV0dXJucyB7U1ZHRWxlbWVudH1cbiAqL1xuQ29ubmVjdGlvblByZXZpZXcucHJvdG90eXBlLmNyZWF0ZUNvbm5lY3Rpb25QcmV2aWV3R2Z4ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBnZnggPSBzdmdDcmVhdGUoJ2cnKTtcblxuICBzdmdBdHRyKGdmeCwge1xuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJ1xuICB9KTtcblxuICBzdmdDbGFzc2VzKGdmeCkuYWRkKE1BUktFUl9DT05ORUNUSU9OX1BSRVZJRVcpO1xuXG4gIHN2Z0FwcGVuZCh0aGlzLl9jYW52YXMuZ2V0RGVmYXVsdExheWVyKCksIGdmeCk7XG5cbiAgcmV0dXJuIGdmeDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGFuZCByZXR1cm4gc2ltcGxlIGNvbm5lY3Rpb24uXG4gKlxuICogQHBhcmFtIHtQb2ludH0gc3RhcnRcbiAqIEBwYXJhbSB7UG9pbnR9IGVuZFxuICpcbiAqIEByZXR1cm5zIHtTVkdFbGVtZW50fVxuICovXG5Db25uZWN0aW9uUHJldmlldy5wcm90b3R5cGUuY3JlYXRlTm9vcENvbm5lY3Rpb24gPSBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHZhciBjb25uZWN0aW9uID0gc3ZnQ3JlYXRlKCdwb2x5bGluZScpO1xuXG4gIHN2Z0F0dHIoY29ubmVjdGlvbiwge1xuICAgICdzdHJva2UnOiAnIzMzMycsXG4gICAgJ3N0cm9rZURhc2hhcnJheSc6IFsgMSBdLFxuICAgICdzdHJva2VXaWR0aCc6IDIsXG4gICAgJ3BvaW50ZXItZXZlbnRzJzogJ25vbmUnXG4gIH0pO1xuXG4gIHN2Z0F0dHIoY29ubmVjdGlvbiwgeyAncG9pbnRzJzogWyBzdGFydC54LCBzdGFydC55LCBlbmQueCwgZW5kLnkgXSB9KTtcblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG4vKipcbiAqIFJldHVybnMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGNhY2hlZCByZXR1cm4gdmFsdWVzIHJlZmVyZW5jZWQgYnkgc3RyaW5naWZpZWQgZmlyc3QgYXJndW1lbnQuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gY2FjaGVSZXR1cm5WYWx1ZXMoZm4pIHtcbiAgdmFyIHJldHVyblZhbHVlcyA9IHt9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gY2FjaGVkIHJldHVybiB2YWx1ZSByZWZlcmVuY2VkIGJ5IHN0cmluZ2lmaWVkIGZpcnN0IGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIHJldHVybiBmdW5jdGlvbihmaXJzdEFyZ3VtZW50KSB7XG4gICAgdmFyIGtleSA9IEpTT04uc3RyaW5naWZ5KGZpcnN0QXJndW1lbnQpO1xuXG4gICAgdmFyIHJldHVyblZhbHVlID0gcmV0dXJuVmFsdWVzW2tleV07XG5cbiAgICBpZiAoIXJldHVyblZhbHVlKSB7XG4gICAgICByZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlc1trZXldID0gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gIH07XG59XG5cbi8qKlxuICogRW5zdXJlIGNvbm5lY3Rpb24gYXR0cmlidXRlcyBpcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8Ym9vbGVhbn0gY2FuQ29ubmVjdFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGVuc3VyZUNvbm5lY3Rpb25BdHRycyhjYW5Db25uZWN0KSB7XG4gIGlmIChpc09iamVjdChjYW5Db25uZWN0KSkge1xuICAgIHJldHVybiBjYW5Db25uZWN0O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuIiwiaW1wb3J0IENvbm5lY3Rpb25QcmV2aWV3IGZyb20gJy4vQ29ubmVjdGlvblByZXZpZXcnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdjb25uZWN0aW9uUHJldmlldycgXSxcbiAgY29ubmVjdGlvblByZXZpZXc6IFsgJ3R5cGUnLCBDb25uZWN0aW9uUHJldmlldyBdXG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBpc0Z1bmN0aW9uLFxuICBpc0FycmF5LFxuICBmb3JFYWNoLFxuICBpc0RlZmluZWRcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBkZWxlZ2F0ZSBhcyBkb21EZWxlZ2F0ZSxcbiAgZXZlbnQgYXMgZG9tRXZlbnQsXG4gIGF0dHIgYXMgZG9tQXR0cixcbiAgcXVlcnkgYXMgZG9tUXVlcnksXG4gIGNsYXNzZXMgYXMgZG9tQ2xhc3NlcyxcbiAgZG9taWZ5IGFzIGRvbWlmeVxufSBmcm9tICdtaW4tZG9tJztcblxudmFyIGVudHJ5U2VsZWN0b3IgPSAnLmVudHJ5JztcblxudmFyIERFRkFVTFRfUFJJT1JJVFkgPSAxMDAwO1xuXG5cbi8qKlxuICogQSBjb250ZXh0IHBhZCB0aGF0IGRpc3BsYXlzIGVsZW1lbnQgc3BlY2lmaWMsIGNvbnRleHR1YWwgYWN0aW9ucyBuZXh0XG4gKiB0byBhIGRpYWdyYW0gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnXG4gKiBAcGFyYW0ge2Jvb2xlYW58T2JqZWN0fSBbY29uZmlnLnNjYWxlPXsgbWluOiAxLjAsIG1heDogMS41IH1dXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmZpZy5zY2FsZS5taW5dXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmZpZy5zY2FsZS5tYXhdXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtPdmVybGF5c30gb3ZlcmxheXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29udGV4dFBhZChjb25maWcsIGV2ZW50QnVzLCBvdmVybGF5cykge1xuXG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX292ZXJsYXlzID0gb3ZlcmxheXM7XG5cbiAgdmFyIHNjYWxlID0gaXNEZWZpbmVkKGNvbmZpZyAmJiBjb25maWcuc2NhbGUpID8gY29uZmlnLnNjYWxlIDoge1xuICAgIG1pbjogMSxcbiAgICBtYXg6IDEuNVxuICB9O1xuXG4gIHRoaXMuX292ZXJsYXlzQ29uZmlnID0ge1xuICAgIHBvc2l0aW9uOiB7XG4gICAgICByaWdodDogLTksXG4gICAgICB0b3A6IC02XG4gICAgfSxcbiAgICBzY2FsZTogc2NhbGVcbiAgfTtcblxuICB0aGlzLl9jdXJyZW50ID0gbnVsbDtcblxuICB0aGlzLl9pbml0KCk7XG59XG5cbkNvbnRleHRQYWQuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5jb250ZXh0UGFkJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ292ZXJsYXlzJ1xuXTtcblxuXG4vKipcbiAqIFJlZ2lzdGVycyBldmVudHMgbmVlZGVkIGZvciBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbXBvbmVudHNcbiAqL1xuQ29udGV4dFBhZC5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgZXZlbnRCdXMgPSB0aGlzLl9ldmVudEJ1cztcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRCdXMub24oJ3NlbGVjdGlvbi5jaGFuZ2VkJywgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIHNlbGVjdGlvbiA9IGUubmV3U2VsZWN0aW9uO1xuXG4gICAgaWYgKHNlbGVjdGlvbi5sZW5ndGggPT09IDEpIHtcbiAgICAgIHNlbGYub3BlbihzZWxlY3Rpb25bMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxmLmNsb3NlKCk7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignZWxlbWVudHMuZGVsZXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBldmVudC5lbGVtZW50cztcblxuICAgIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmIChzZWxmLmlzT3BlbihlKSkge1xuICAgICAgICBzZWxmLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50LmNoYW5nZWQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgY3VycmVudCA9IHNlbGYuX2N1cnJlbnQ7XG5cbiAgICAvLyBmb3JjZSByZW9wZW4gaWYgZWxlbWVudCBmb3Igd2hpY2ggd2UgYXJlIGN1cnJlbnRseSBvcGVuZWQgY2hhbmdlZFxuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQuZWxlbWVudCA9PT0gZWxlbWVudCkge1xuICAgICAgc2VsZi5vcGVuKGVsZW1lbnQsIHRydWUpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5cbi8qKlxuICogUmVnaXN0ZXIgYSBwcm92aWRlciB3aXRoIHRoZSBjb250ZXh0IHBhZFxuICpcbiAqIEBwYXJhbSAge251bWJlcn0gW3ByaW9yaXR5PTEwMDBdXG4gKiBAcGFyYW0gIHtDb250ZXh0UGFkUHJvdmlkZXJ9IHByb3ZpZGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGNvbnRleHRQYWRQcm92aWRlciA9IHtcbiAgKiAgIGdldENvbnRleHRQYWRFbnRyaWVzOiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICogICAgIHJldHVybiBmdW5jdGlvbihlbnRyaWVzKSB7XG4gICogICAgICAgcmV0dXJuIHtcbiAgKiAgICAgICAgIC4uLmVudHJpZXMsXG4gICogICAgICAgICAnZW50cnktMSc6IHtcbiAgKiAgICAgICAgICAgbGFiZWw6ICdNeSBFbnRyeScsXG4gICogICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24oKSB7IGFsZXJ0KFwiSSBoYXZlIGJlZW4gY2xpY2tlZCFcIik7IH1cbiAgKiAgICAgICAgIH1cbiAgKiAgICAgICB9O1xuICAqICAgICB9XG4gICogICB9XG4gICogfTtcbiAgKlxuICogY29udGV4dFBhZC5yZWdpc3RlclByb3ZpZGVyKDgwMCwgY29udGV4dFBhZFByb3ZpZGVyKTtcbiAqL1xuQ29udGV4dFBhZC5wcm90b3R5cGUucmVnaXN0ZXJQcm92aWRlciA9IGZ1bmN0aW9uKHByaW9yaXR5LCBwcm92aWRlcikge1xuICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgcHJvdmlkZXIgPSBwcmlvcml0eTtcbiAgICBwcmlvcml0eSA9IERFRkFVTFRfUFJJT1JJVFk7XG4gIH1cblxuICB0aGlzLl9ldmVudEJ1cy5vbignY29udGV4dFBhZC5nZXRQcm92aWRlcnMnLCBwcmlvcml0eSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBldmVudC5wcm92aWRlcnMucHVzaChwcm92aWRlcik7XG4gIH0pO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbnRleHQgcGFkIGVudHJpZXMgZm9yIGEgZ2l2ZW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7ZGpzLmVsZW1lbnQuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge0FycmF5PENvbnRleHRQYWRFbnRyeURlc2NyaXB0b3I+fSBsaXN0IG9mIGVudHJpZXNcbiAqL1xuQ29udGV4dFBhZC5wcm90b3R5cGUuZ2V0RW50cmllcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIHByb3ZpZGVycyA9IHRoaXMuX2dldFByb3ZpZGVycygpO1xuXG4gIHZhciBlbnRyaWVzID0ge307XG5cbiAgLy8gbG9vcCB0aHJvdWdoIGFsbCBwcm92aWRlcnMgYW5kIHRoZWlyIGVudHJpZXMuXG4gIC8vIGdyb3VwIGVudHJpZXMgYnkgaWQgc28gdGhhdCBvdmVycmlkaW5nIGFuIGVudHJ5IGlzIHBvc3NpYmxlXG4gIGZvckVhY2gocHJvdmlkZXJzLCBmdW5jdGlvbihwcm92aWRlcikge1xuICAgIHZhciBlbnRyaWVzT3JVcGRhdGVyID0gcHJvdmlkZXIuZ2V0Q29udGV4dFBhZEVudHJpZXMoZWxlbWVudCk7XG5cbiAgICBpZiAoaXNGdW5jdGlvbihlbnRyaWVzT3JVcGRhdGVyKSkge1xuICAgICAgZW50cmllcyA9IGVudHJpZXNPclVwZGF0ZXIoZW50cmllcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvckVhY2goZW50cmllc09yVXBkYXRlciwgZnVuY3Rpb24oZW50cnksIGlkKSB7XG4gICAgICAgIGVudHJpZXNbaWRdID0gZW50cnk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlbnRyaWVzO1xufTtcblxuXG4vKipcbiAqIFRyaWdnZXIgYW4gYWN0aW9uIGF2YWlsYWJsZSBvbiB0aGUgb3BlbmVkIGNvbnRleHQgcGFkXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBhY3Rpb25cbiAqIEBwYXJhbSAge0V2ZW50fSBldmVudFxuICogQHBhcmFtICB7Ym9vbGVhbn0gW2F1dG9BY3RpdmF0ZT1mYWxzZV1cbiAqL1xuQ29udGV4dFBhZC5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uKGFjdGlvbiwgZXZlbnQsIGF1dG9BY3RpdmF0ZSkge1xuXG4gIHZhciBlbGVtZW50ID0gdGhpcy5fY3VycmVudC5lbGVtZW50LFxuICAgICAgZW50cmllcyA9IHRoaXMuX2N1cnJlbnQuZW50cmllcyxcbiAgICAgIGVudHJ5LFxuICAgICAgaGFuZGxlcixcbiAgICAgIG9yaWdpbmFsRXZlbnQsXG4gICAgICBidXR0b24gPSBldmVudC5kZWxlZ2F0ZVRhcmdldCB8fCBldmVudC50YXJnZXQ7XG5cbiAgaWYgKCFidXR0b24pIHtcbiAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIGVudHJ5ID0gZW50cmllc1tkb21BdHRyKGJ1dHRvbiwgJ2RhdGEtYWN0aW9uJyldO1xuICBoYW5kbGVyID0gZW50cnkuYWN0aW9uO1xuXG4gIG9yaWdpbmFsRXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50IHx8IGV2ZW50O1xuXG4gIC8vIHNpbXBsZSBhY3Rpb24gKHZpYSBjYWxsYmFjayBmdW5jdGlvbilcbiAgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICBpZiAoYWN0aW9uID09PSAnY2xpY2snKSB7XG4gICAgICByZXR1cm4gaGFuZGxlcihvcmlnaW5hbEV2ZW50LCBlbGVtZW50LCBhdXRvQWN0aXZhdGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaGFuZGxlclthY3Rpb25dKSB7XG4gICAgICByZXR1cm4gaGFuZGxlclthY3Rpb25dKG9yaWdpbmFsRXZlbnQsIGVsZW1lbnQsIGF1dG9BY3RpdmF0ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gc2lsZW5jZSBvdGhlciBhY3Rpb25zXG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG5cbi8qKlxuICogT3BlbiB0aGUgY29udGV4dCBwYWQgZm9yIHRoZSBnaXZlbiBlbGVtZW50XG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtib29sZWFufSBmb3JjZSBpZiB0cnVlLCBmb3JjZSByZW9wZW5pbmcgdGhlIGNvbnRleHQgcGFkXG4gKi9cbkNvbnRleHRQYWQucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihlbGVtZW50LCBmb3JjZSkge1xuICBpZiAoIWZvcmNlICYmIHRoaXMuaXNPcGVuKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5jbG9zZSgpO1xuICB0aGlzLl91cGRhdGVBbmRPcGVuKGVsZW1lbnQpO1xufTtcblxuQ29udGV4dFBhZC5wcm90b3R5cGUuX2dldFByb3ZpZGVycyA9IGZ1bmN0aW9uKGlkKSB7XG5cbiAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRCdXMuY3JlYXRlRXZlbnQoe1xuICAgIHR5cGU6ICdjb250ZXh0UGFkLmdldFByb3ZpZGVycycsXG4gICAgcHJvdmlkZXJzOiBbXVxuICB9KTtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKGV2ZW50KTtcblxuICByZXR1cm4gZXZlbnQucHJvdmlkZXJzO1xufTtcblxuQ29udGV4dFBhZC5wcm90b3R5cGUuX3VwZGF0ZUFuZE9wZW4gPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgdmFyIGVudHJpZXMgPSB0aGlzLmdldEVudHJpZXMoZWxlbWVudCksXG4gICAgICBwYWQgPSB0aGlzLmdldFBhZChlbGVtZW50KSxcbiAgICAgIGh0bWwgPSBwYWQuaHRtbDtcblxuICBmb3JFYWNoKGVudHJpZXMsIGZ1bmN0aW9uKGVudHJ5LCBpZCkge1xuICAgIHZhciBncm91cGluZyA9IGVudHJ5Lmdyb3VwIHx8ICdkZWZhdWx0JyxcbiAgICAgICAgY29udHJvbCA9IGRvbWlmeShlbnRyeS5odG1sIHx8ICc8ZGl2IGNsYXNzPVwiZW50cnlcIiBkcmFnZ2FibGU9XCJ0cnVlXCI+PC9kaXY+JyksXG4gICAgICAgIGNvbnRhaW5lcjtcblxuICAgIGRvbUF0dHIoY29udHJvbCwgJ2RhdGEtYWN0aW9uJywgaWQpO1xuXG4gICAgY29udGFpbmVyID0gZG9tUXVlcnkoJ1tkYXRhLWdyb3VwPScgKyBncm91cGluZyArICddJywgaHRtbCk7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lciA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImdyb3VwXCIgZGF0YS1ncm91cD1cIicgKyBncm91cGluZyArICdcIj48L2Rpdj4nKTtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICB9XG5cbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY29udHJvbCk7XG5cbiAgICBpZiAoZW50cnkuY2xhc3NOYW1lKSB7XG4gICAgICBhZGRDbGFzc2VzKGNvbnRyb2wsIGVudHJ5LmNsYXNzTmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGVudHJ5LnRpdGxlKSB7XG4gICAgICBkb21BdHRyKGNvbnRyb2wsICd0aXRsZScsIGVudHJ5LnRpdGxlKTtcbiAgICB9XG5cbiAgICBpZiAoZW50cnkuaW1hZ2VVcmwpIHtcbiAgICAgIGNvbnRyb2wuYXBwZW5kQ2hpbGQoZG9taWZ5KCc8aW1nIHNyYz1cIicgKyBlbnRyeS5pbWFnZVVybCArICdcIj4nKSk7XG4gICAgfVxuICB9KTtcblxuICBkb21DbGFzc2VzKGh0bWwpLmFkZCgnb3BlbicpO1xuXG4gIHRoaXMuX2N1cnJlbnQgPSB7XG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBwYWQ6IHBhZCxcbiAgICBlbnRyaWVzOiBlbnRyaWVzXG4gIH07XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY29udGV4dFBhZC5vcGVuJywgeyBjdXJyZW50OiB0aGlzLl9jdXJyZW50IH0pO1xufTtcblxuXG5Db250ZXh0UGFkLnByb3RvdHlwZS5nZXRQYWQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQucGFkO1xuICB9XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBvdmVybGF5cyA9IHRoaXMuX292ZXJsYXlzO1xuXG4gIHZhciBodG1sID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiZGpzLWNvbnRleHQtcGFkXCI+PC9kaXY+Jyk7XG5cbiAgdmFyIG92ZXJsYXlzQ29uZmlnID0gYXNzaWduKHtcbiAgICBodG1sOiBodG1sXG4gIH0sIHRoaXMuX292ZXJsYXlzQ29uZmlnKTtcblxuICBkb21EZWxlZ2F0ZS5iaW5kKGh0bWwsIGVudHJ5U2VsZWN0b3IsICdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgc2VsZi50cmlnZ2VyKCdjbGljaycsIGV2ZW50KTtcbiAgfSk7XG5cbiAgZG9tRGVsZWdhdGUuYmluZChodG1sLCBlbnRyeVNlbGVjdG9yLCAnZHJhZ3N0YXJ0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBzZWxmLnRyaWdnZXIoJ2RyYWdzdGFydCcsIGV2ZW50KTtcbiAgfSk7XG5cbiAgLy8gc3RvcCBwcm9wYWdhdGlvbiBvZiBtb3VzZSBldmVudHNcbiAgZG9tRXZlbnQuYmluZChodG1sLCAnbW91c2Vkb3duJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSk7XG5cbiAgdGhpcy5fb3ZlcmxheUlkID0gb3ZlcmxheXMuYWRkKGVsZW1lbnQsICdjb250ZXh0LXBhZCcsIG92ZXJsYXlzQ29uZmlnKTtcblxuICB2YXIgcGFkID0gb3ZlcmxheXMuZ2V0KHRoaXMuX292ZXJsYXlJZCk7XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY29udGV4dFBhZC5jcmVhdGUnLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIHBhZDogcGFkIH0pO1xuXG4gIHJldHVybiBwYWQ7XG59O1xuXG5cbi8qKlxuICogQ2xvc2UgdGhlIGNvbnRleHQgcGFkXG4gKi9cbkNvbnRleHRQYWQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5pc09wZW4oKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX292ZXJsYXlzLnJlbW92ZSh0aGlzLl9vdmVybGF5SWQpO1xuXG4gIHRoaXMuX292ZXJsYXlJZCA9IG51bGw7XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY29udGV4dFBhZC5jbG9zZScsIHsgY3VycmVudDogdGhpcy5fY3VycmVudCB9KTtcblxuICB0aGlzLl9jdXJyZW50ID0gbnVsbDtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgcGFkIGlzIG9wZW4uIElmIGVsZW1lbnQgaXMgZ2l2ZW4sIHdpbGwgY2hlY2tcbiAqIGlmIHBhZCBpcyBvcGVuZWQgd2l0aCBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuQ29udGV4dFBhZC5wcm90b3R5cGUuaXNPcGVuID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gISF0aGlzLl9jdXJyZW50ICYmICghZWxlbWVudCA/IHRydWUgOiB0aGlzLl9jdXJyZW50LmVsZW1lbnQgPT09IGVsZW1lbnQpO1xufTtcblxuXG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGFkZENsYXNzZXMoZWxlbWVudCwgY2xhc3NOYW1lcykge1xuXG4gIHZhciBjbGFzc2VzID0gZG9tQ2xhc3NlcyhlbGVtZW50KTtcblxuICB2YXIgYWN0dWFsQ2xhc3NOYW1lcyA9IGlzQXJyYXkoY2xhc3NOYW1lcykgPyBjbGFzc05hbWVzIDogY2xhc3NOYW1lcy5zcGxpdCgvXFxzKy9nKTtcbiAgYWN0dWFsQ2xhc3NOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGNscykge1xuICAgIGNsYXNzZXMuYWRkKGNscyk7XG4gIH0pO1xufSIsImltcG9ydCBJbnRlcmFjdGlvbkV2ZW50c01vZHVsZSBmcm9tICcuLi9pbnRlcmFjdGlvbi1ldmVudHMnO1xuaW1wb3J0IE92ZXJsYXlzTW9kdWxlIGZyb20gJy4uL292ZXJsYXlzJztcblxuaW1wb3J0IENvbnRleHRQYWQgZnJvbSAnLi9Db250ZXh0UGFkJztcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgSW50ZXJhY3Rpb25FdmVudHNNb2R1bGUsXG4gICAgT3ZlcmxheXNNb2R1bGVcbiAgXSxcbiAgY29udGV4dFBhZDogWyAndHlwZScsIENvbnRleHRQYWQgXVxufTsiLCJpbXBvcnQge1xuICBhc3NpZ24sXG4gIGZpbmQsXG4gIGZvckVhY2gsXG4gIGlzQXJyYXksXG4gIGlzTnVtYmVyLFxuICBtYXAsXG4gIG1hdGNoUGF0dGVybixcbiAgb21pdCxcbiAgc29ydEJ5XG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0QkJveCxcbiAgZ2V0UGFyZW50c1xufSBmcm9tICcuLi8uLi91dGlsL0VsZW1lbnRzJztcblxuaW1wb3J0IHsgZWFjaEVsZW1lbnQgfSBmcm9tICcuLi8uLi91dGlsL0VsZW1lbnRzJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7RnVuY3Rpb259IDxjb3B5UGFzdGUuY2FuQ29weUVsZW1lbnRzPiBsaXN0ZW5lclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gY29udGV4dC5lbGVtZW50c1xuICpcbiAqIEByZXR1cm5zIHtBcnJheTxkanMubW9kZWwuQmFzZT58Ym9vbGVhbn0gLSBSZXR1cm4gZWxlbWVudHMgdG8gYmUgY29waWVkIG9yIGZhbHNlIHRvIGRpc2FsbG93XG4gKiBjb3B5aW5nLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSA8Y29weVBhc3RlLmNvcHlFbGVtZW50PiBsaXN0ZW5lclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5kZXNjcmlwdG9yXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBjb250ZXh0LmVsZW1lbnRcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBjb250ZXh0LmVsZW1lbnRzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7RnVuY3Rpb259IDxjb3B5UGFzdGUuZWxlbWVudHNDb3BpZWQ+IGxpc3RlbmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0LmVsZW1lbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC50cmVlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7RnVuY3Rpb259IDxjb3B5UGFzdGUucGFzdGVFbGVtZW50PiBsaXN0ZW5lclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5jYWNoZSAtIEFscmVhZHkgY3JlYXRlZCBlbGVtZW50cy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0LmRlc2NyaXB0b3JcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gPGNvcHlQYXN0ZS5wYXN0ZUVsZW1lbnRzPiBsaXN0ZW5lclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5oaW50cyAtIEFkZCBoaW50cyBiZWZvcmUgcGFzdGluZy5cbiAqL1xuXG4vKipcbiAqIENvcHkgYW5kIHBhc3RlIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7Q3JlYXRlfSBjcmVhdGVcbiAqIEBwYXJhbSB7Q2xpcGJvYXJkfSBjbGlwYm9hcmRcbiAqIEBwYXJhbSB7RWxlbWVudEZhY3Rvcnl9IGVsZW1lbnRGYWN0b3J5XG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7TW91c2V9IG1vdXNlXG4gKiBAcGFyYW0ge1J1bGVzfSBydWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDb3B5UGFzdGUoXG4gICAgY2FudmFzLFxuICAgIGNyZWF0ZSxcbiAgICBjbGlwYm9hcmQsXG4gICAgZWxlbWVudEZhY3RvcnksXG4gICAgZXZlbnRCdXMsXG4gICAgbW9kZWxpbmcsXG4gICAgbW91c2UsXG4gICAgcnVsZXNcbikge1xuXG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcbiAgdGhpcy5fY3JlYXRlID0gY3JlYXRlO1xuICB0aGlzLl9jbGlwYm9hcmQgPSBjbGlwYm9hcmQ7XG4gIHRoaXMuX2VsZW1lbnRGYWN0b3J5ID0gZWxlbWVudEZhY3Rvcnk7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gIHRoaXMuX21vdXNlID0gbW91c2U7XG4gIHRoaXMuX3J1bGVzID0gcnVsZXM7XG5cbiAgZXZlbnRCdXMub24oJ2NvcHlQYXN0ZS5jb3B5RWxlbWVudCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IGNvbnRleHQuZGVzY3JpcHRvcixcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzO1xuXG4gICAgLy8gZGVmYXVsdCBwcmlvcml0eSAocHJpb3JpdHkgPSAxKVxuICAgIGRlc2NyaXB0b3IucHJpb3JpdHkgPSAxO1xuXG4gICAgZGVzY3JpcHRvci5pZCA9IGVsZW1lbnQuaWQ7XG5cbiAgICB2YXIgcGFyZW50Q29waWVkID0gZmluZChlbGVtZW50cywgZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIGUgPT09IGVsZW1lbnQucGFyZW50O1xuICAgIH0pO1xuXG4gICAgLy8gZG8gTk9UIHJlZmVyZW5jZSBwYXJlbnQgaWYgcGFyZW50IHdhc24ndCBjb3BpZWRcbiAgICBpZiAocGFyZW50Q29waWVkKSB7XG4gICAgICBkZXNjcmlwdG9yLnBhcmVudCA9IGVsZW1lbnQucGFyZW50LmlkO1xuICAgIH1cblxuICAgIC8vIGF0dGFjaGVycyAocHJpb3JpdHkgPSAyKVxuICAgIGlmIChpc0F0dGFjaGVyKGVsZW1lbnQpKSB7XG4gICAgICBkZXNjcmlwdG9yLnByaW9yaXR5ID0gMjtcblxuICAgICAgZGVzY3JpcHRvci5ob3N0ID0gZWxlbWVudC5ob3N0LmlkO1xuICAgIH1cblxuICAgIC8vIGNvbm5lY3Rpb25zIChwcmlvcml0eSA9IDMpXG4gICAgaWYgKGlzQ29ubmVjdGlvbihlbGVtZW50KSkge1xuICAgICAgZGVzY3JpcHRvci5wcmlvcml0eSA9IDM7XG5cbiAgICAgIGRlc2NyaXB0b3Iuc291cmNlID0gZWxlbWVudC5zb3VyY2UuaWQ7XG4gICAgICBkZXNjcmlwdG9yLnRhcmdldCA9IGVsZW1lbnQudGFyZ2V0LmlkO1xuXG4gICAgICBkZXNjcmlwdG9yLndheXBvaW50cyA9IGNvcHlXYXlwb2ludHMoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgLy8gbGFiZWxzIChwcmlvcml0eSA9IDQpXG4gICAgaWYgKGlzTGFiZWwoZWxlbWVudCkpIHtcbiAgICAgIGRlc2NyaXB0b3IucHJpb3JpdHkgPSA0O1xuXG4gICAgICBkZXNjcmlwdG9yLmxhYmVsVGFyZ2V0ID0gZWxlbWVudC5sYWJlbFRhcmdldC5pZDtcbiAgICB9XG5cbiAgICBmb3JFYWNoKFsgJ3gnLCAneScsICd3aWR0aCcsICdoZWlnaHQnIF0sIGZ1bmN0aW9uKHByb3BlcnR5KSB7XG4gICAgICBpZiAoaXNOdW1iZXIoZWxlbWVudFsgcHJvcGVydHkgXSkpIHtcbiAgICAgICAgZGVzY3JpcHRvclsgcHJvcGVydHkgXSA9IGVsZW1lbnRbIHByb3BlcnR5IF07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBkZXNjcmlwdG9yLmhpZGRlbiA9IGVsZW1lbnQuaGlkZGVuO1xuICAgIGRlc2NyaXB0b3IuY29sbGFwc2VkID0gZWxlbWVudC5jb2xsYXBzZWQ7XG5cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NvcHlQYXN0ZS5wYXN0ZUVsZW1lbnRzJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBoaW50cyA9IGNvbnRleHQuaGludHM7XG5cbiAgICBhc3NpZ24oaGludHMsIHtcbiAgICAgIGNyZWF0ZUVsZW1lbnRzQmVoYXZpb3I6IGZhbHNlXG4gICAgfSk7XG4gIH0pO1xufVxuXG5Db3B5UGFzdGUuJGluamVjdCA9IFtcbiAgJ2NhbnZhcycsXG4gICdjcmVhdGUnLFxuICAnY2xpcGJvYXJkJyxcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ21vdXNlJyxcbiAgJ3J1bGVzJ1xuXTtcblxuXG4vKipcbiAqIENvcHkgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGVsZW1lbnRzXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuQ29weVBhc3RlLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24oZWxlbWVudHMpIHtcbiAgdmFyIGFsbG93ZWQsXG4gICAgICB0cmVlO1xuXG4gIGlmICghaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IGVsZW1lbnRzID8gWyBlbGVtZW50cyBdIDogW107XG4gIH1cblxuICBhbGxvd2VkID0gdGhpcy5fZXZlbnRCdXMuZmlyZSgnY29weVBhc3RlLmNhbkNvcHlFbGVtZW50cycsIHtcbiAgICBlbGVtZW50czogZWxlbWVudHNcbiAgfSk7XG5cbiAgaWYgKGFsbG93ZWQgPT09IGZhbHNlKSB7XG4gICAgdHJlZSA9IHt9O1xuICB9IGVsc2Uge1xuICAgIHRyZWUgPSB0aGlzLmNyZWF0ZVRyZWUoaXNBcnJheShhbGxvd2VkKSA/IGFsbG93ZWQgOiBlbGVtZW50cyk7XG4gIH1cblxuICAvLyB3ZSBzZXQgYW4gZW1wdHkgdHJlZSwgc2VsZWN0aW9uIG9mIGVsZW1lbnRzXG4gIC8vIHRvIGNvcHkgd2FzIGVtcHR5LlxuICB0aGlzLl9jbGlwYm9hcmQuc2V0KHRyZWUpO1xuXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2NvcHlQYXN0ZS5lbGVtZW50c0NvcGllZCcsIHtcbiAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgdHJlZTogdHJlZVxuICB9KTtcblxuICByZXR1cm4gdHJlZTtcbn07XG5cbi8qKlxuICogUGFzdGUgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0XVxuICogQHBhcmFtIHtkanMubW9kZWwuYmFzZX0gW2NvbnRleHQuZWxlbWVudF0gLSBQYXJlbnQuXG4gKiBAcGFyYW0ge1BvaW50fSBbY29udGV4dC5wb2ludF0gLSBQb3NpdGlvbi5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dC5oaW50c10gLSBIaW50cy5cbiAqL1xuQ29weVBhc3RlLnByb3RvdHlwZS5wYXN0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIHRyZWUgPSB0aGlzLl9jbGlwYm9hcmQuZ2V0KCk7XG5cbiAgaWYgKHRoaXMuX2NsaXBib2FyZC5pc0VtcHR5KCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaGludHMgPSBjb250ZXh0ICYmIGNvbnRleHQuaGludHMgfHwge307XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnY29weVBhc3RlLnBhc3RlRWxlbWVudHMnLCB7XG4gICAgaGludHM6IGhpbnRzXG4gIH0pO1xuXG4gIHZhciBlbGVtZW50cyA9IHRoaXMuX2NyZWF0ZUVsZW1lbnRzKHRyZWUpO1xuXG4gIC8vIHBhc3RlIGRpcmVjdGx5XG4gIGlmIChjb250ZXh0ICYmIGNvbnRleHQuZWxlbWVudCAmJiBjb250ZXh0LnBvaW50KSB7XG4gICAgcmV0dXJuIHRoaXMuX3Bhc3RlKGVsZW1lbnRzLCBjb250ZXh0LmVsZW1lbnQsIGNvbnRleHQucG9pbnQsIGhpbnRzKTtcbiAgfVxuXG4gIHRoaXMuX2NyZWF0ZS5zdGFydCh0aGlzLl9tb3VzZS5nZXRMYXN0TW92ZUV2ZW50KCksIGVsZW1lbnRzLCB7XG4gICAgaGludHM6IGhpbnRzIHx8IHt9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBQYXN0ZSBlbGVtZW50cyBkaXJlY3RseS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHNcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLmJhc2V9IHRhcmdldFxuICogQHBhcmFtIHtQb2ludH0gcG9zaXRpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBbaGludHNdXG4gKi9cbkNvcHlQYXN0ZS5wcm90b3R5cGUuX3Bhc3RlID0gZnVuY3Rpb24oZWxlbWVudHMsIHRhcmdldCwgcG9zaXRpb24sIGhpbnRzKSB7XG5cbiAgLy8gbWFrZSBzdXJlIGVhY2ggZWxlbWVudCBoYXMgeCBhbmQgeVxuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgaWYgKCFpc051bWJlcihlbGVtZW50LngpKSB7XG4gICAgICBlbGVtZW50LnggPSAwO1xuICAgIH1cblxuICAgIGlmICghaXNOdW1iZXIoZWxlbWVudC55KSkge1xuICAgICAgZWxlbWVudC55ID0gMDtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciBiYm94ID0gZ2V0QkJveChlbGVtZW50cyk7XG5cbiAgLy8gY2VudGVyIGVsZW1lbnRzIGFyb3VuZCBjdXJzb3JcbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIGlmIChpc0Nvbm5lY3Rpb24oZWxlbWVudCkpIHtcbiAgICAgIGVsZW1lbnQud2F5cG9pbnRzID0gbWFwKGVsZW1lbnQud2F5cG9pbnRzLCBmdW5jdGlvbih3YXlwb2ludCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IHdheXBvaW50LnggLSBiYm94LnggLSBiYm94LndpZHRoIC8gMixcbiAgICAgICAgICB5OiB3YXlwb2ludC55IC0gYmJveC55IC0gYmJveC5oZWlnaHQgLyAyXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3NpZ24oZWxlbWVudCwge1xuICAgICAgeDogZWxlbWVudC54IC0gYmJveC54IC0gYmJveC53aWR0aCAvIDIsXG4gICAgICB5OiBlbGVtZW50LnkgLSBiYm94LnkgLSBiYm94LmhlaWdodCAvIDJcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXMuX21vZGVsaW5nLmNyZWF0ZUVsZW1lbnRzKGVsZW1lbnRzLCBwb3NpdGlvbiwgdGFyZ2V0LCBhc3NpZ24oe30sIGhpbnRzKSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBlbGVtZW50cyBmcm9tIHRyZWUuXG4gKi9cbkNvcHlQYXN0ZS5wcm90b3R5cGUuX2NyZWF0ZUVsZW1lbnRzID0gZnVuY3Rpb24odHJlZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgdmFyIGNhY2hlID0ge307XG5cbiAgdmFyIGVsZW1lbnRzID0gW107XG5cbiAgZm9yRWFjaCh0cmVlLCBmdW5jdGlvbihicmFuY2gsIGRlcHRoKSB7XG5cbiAgICBkZXB0aCA9IHBhcnNlSW50KGRlcHRoLCAxMCk7XG5cbiAgICAvLyBzb3J0IGJ5IHByaW9yaXR5XG4gICAgYnJhbmNoID0gc29ydEJ5KGJyYW5jaCwgJ3ByaW9yaXR5Jyk7XG5cbiAgICBmb3JFYWNoKGJyYW5jaCwgZnVuY3Rpb24oZGVzY3JpcHRvcikge1xuXG4gICAgICAvLyByZW1vdmUgcHJpb3JpdHlcbiAgICAgIHZhciBhdHRycyA9IGFzc2lnbih7fSwgb21pdChkZXNjcmlwdG9yLCBbICdwcmlvcml0eScgXSkpO1xuXG4gICAgICBpZiAoY2FjaGVbIGRlc2NyaXB0b3IucGFyZW50IF0pIHtcbiAgICAgICAgYXR0cnMucGFyZW50ID0gY2FjaGVbIGRlc2NyaXB0b3IucGFyZW50IF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgYXR0cnMucGFyZW50O1xuICAgICAgfVxuXG4gICAgICBldmVudEJ1cy5maXJlKCdjb3B5UGFzdGUucGFzdGVFbGVtZW50Jywge1xuICAgICAgICBjYWNoZTogY2FjaGUsXG4gICAgICAgIGRlc2NyaXB0b3I6IGF0dHJzXG4gICAgICB9KTtcblxuICAgICAgdmFyIGVsZW1lbnQ7XG5cbiAgICAgIGlmIChpc0Nvbm5lY3Rpb24oYXR0cnMpKSB7XG4gICAgICAgIGF0dHJzLnNvdXJjZSA9IGNhY2hlWyBkZXNjcmlwdG9yLnNvdXJjZSBdO1xuICAgICAgICBhdHRycy50YXJnZXQgPSBjYWNoZVsgZGVzY3JpcHRvci50YXJnZXQgXTtcblxuICAgICAgICBlbGVtZW50ID0gY2FjaGVbIGRlc2NyaXB0b3IuaWQgXSA9IHNlbGYuY3JlYXRlQ29ubmVjdGlvbihhdHRycyk7XG5cbiAgICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0xhYmVsKGF0dHJzKSkge1xuICAgICAgICBhdHRycy5sYWJlbFRhcmdldCA9IGNhY2hlWyBhdHRycy5sYWJlbFRhcmdldCBdO1xuXG4gICAgICAgIGVsZW1lbnQgPSBjYWNoZVsgZGVzY3JpcHRvci5pZCBdID0gc2VsZi5jcmVhdGVMYWJlbChhdHRycyk7XG5cbiAgICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChhdHRycy5ob3N0KSB7XG4gICAgICAgIGF0dHJzLmhvc3QgPSBjYWNoZVsgYXR0cnMuaG9zdCBdO1xuICAgICAgfVxuXG4gICAgICBlbGVtZW50ID0gY2FjaGVbIGRlc2NyaXB0b3IuaWQgXSA9IHNlbGYuY3JlYXRlU2hhcGUoYXR0cnMpO1xuXG4gICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH0pO1xuXG4gIH0pO1xuXG4gIHJldHVybiBlbGVtZW50cztcbn07XG5cbkNvcHlQYXN0ZS5wcm90b3R5cGUuY3JlYXRlQ29ubmVjdGlvbiA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gIHZhciBjb25uZWN0aW9uID0gdGhpcy5fZWxlbWVudEZhY3RvcnkuY3JlYXRlQ29ubmVjdGlvbihvbWl0KGF0dHJzLCBbICdpZCcgXSkpO1xuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufTtcblxuQ29weVBhc3RlLnByb3RvdHlwZS5jcmVhdGVMYWJlbCA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gIHZhciBsYWJlbCA9IHRoaXMuX2VsZW1lbnRGYWN0b3J5LmNyZWF0ZUxhYmVsKG9taXQoYXR0cnMsIFsgJ2lkJyBdKSk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufTtcblxuQ29weVBhc3RlLnByb3RvdHlwZS5jcmVhdGVTaGFwZSA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gIHZhciBzaGFwZSA9IHRoaXMuX2VsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKG9taXQoYXR0cnMsIFsgJ2lkJyBdKSk7XG5cbiAgcmV0dXJuIHNoYXBlO1xufTtcblxuLyoqXG4gKiBDaGVjayB3ZXRoZXIgZWxlbWVudCBoYXMgcmVsYXRpb25zIHRvIG90aGVyIGVsZW1lbnRzIGUuZy4gYXR0YWNoZXJzLCBsYWJlbHMgYW5kIGNvbm5lY3Rpb25zLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gZWxlbWVudFxuICogQHBhcmFtICB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBlbGVtZW50c1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Db3B5UGFzdGUucHJvdG90eXBlLmhhc1JlbGF0aW9ucyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGVsZW1lbnRzKSB7XG4gIHZhciBsYWJlbFRhcmdldCxcbiAgICAgIHNvdXJjZSxcbiAgICAgIHRhcmdldDtcblxuICBpZiAoaXNDb25uZWN0aW9uKGVsZW1lbnQpKSB7XG4gICAgc291cmNlID0gZmluZChlbGVtZW50cywgbWF0Y2hQYXR0ZXJuKHsgaWQ6IGVsZW1lbnQuc291cmNlLmlkIH0pKTtcbiAgICB0YXJnZXQgPSBmaW5kKGVsZW1lbnRzLCBtYXRjaFBhdHRlcm4oeyBpZDogZWxlbWVudC50YXJnZXQuaWQgfSkpO1xuXG4gICAgaWYgKCFzb3VyY2UgfHwgIXRhcmdldCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc0xhYmVsKGVsZW1lbnQpKSB7XG4gICAgbGFiZWxUYXJnZXQgPSBmaW5kKGVsZW1lbnRzLCBtYXRjaFBhdHRlcm4oeyBpZDogZWxlbWVudC5sYWJlbFRhcmdldC5pZCB9KSk7XG5cbiAgICBpZiAoIWxhYmVsVGFyZ2V0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHRyZWUtbGlrZSBzdHJ1Y3R1cmUgZnJvbSBlbGVtZW50cy5cbiAqXG4gKiBAZXhhbXBsZVxuICogdHJlZToge1xuICAqICAwOiBbXG4gICogICAgeyBpZDogJ1NoYXBlXzEnLCBwcmlvcml0eTogMSwgLi4uIH0sXG4gICogICAgeyBpZDogJ1NoYXBlXzInLCBwcmlvcml0eTogMSwgLi4uIH0sXG4gICogICAgeyBpZDogJ0Nvbm5lY3Rpb25fMScsIHNvdXJjZTogJ1NoYXBlXzEnLCB0YXJnZXQ6ICdTaGFwZV8yJywgcHJpb3JpdHk6IDMsIC4uLiB9LFxuICAqICAgIC4uLlxuICAqICBdLFxuICAqICAxOiBbXG4gICogICAgeyBpZDogJ1NoYXBlXzMnLCBwYXJlbnQ6ICdTaGFwZTEnLCBwcmlvcml0eTogMSwgLi4uIH0sXG4gICogICAgLi4uXG4gICogIF1cbiAgKiB9O1xuICAqXG4gICogQHBhcmFtICB7QXJyYXk8ZGpzLm1vZGVsLmJhc2U+fSBlbGVtZW50c1xuICAqXG4gICogQHJldHVybiB7T2JqZWN0fVxuICAqL1xuQ29weVBhc3RlLnByb3RvdHlwZS5jcmVhdGVUcmVlID0gZnVuY3Rpb24oZWxlbWVudHMpIHtcbiAgdmFyIHJ1bGVzID0gdGhpcy5fcnVsZXMsXG4gICAgICBzZWxmID0gdGhpcztcblxuICB2YXIgdHJlZSA9IHt9LFxuICAgICAgZWxlbWVudHNEYXRhID0gW107XG5cbiAgdmFyIHBhcmVudHMgPSBnZXRQYXJlbnRzKGVsZW1lbnRzKTtcblxuICBmdW5jdGlvbiBjYW5Db3B5KGVsZW1lbnQsIGVsZW1lbnRzKSB7XG4gICAgcmV0dXJuIHJ1bGVzLmFsbG93ZWQoJ2VsZW1lbnQuY29weScsIHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBlbGVtZW50czogZWxlbWVudHNcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZEVsZW1lbnREYXRhKGVsZW1lbnQsIGRlcHRoKSB7XG5cbiAgICAvLyAoMSkgY2hlY2sgd2V0aGVyIGVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiBhZGRlZFxuICAgIHZhciBmb3VuZEVsZW1lbnREYXRhID0gZmluZChlbGVtZW50c0RhdGEsIGZ1bmN0aW9uKGVsZW1lbnRzRGF0YSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQgPT09IGVsZW1lbnRzRGF0YS5lbGVtZW50O1xuICAgIH0pO1xuXG4gICAgLy8gKDIpIGFkZCBlbGVtZW50IGlmIG5vdCBhbHJlYWR5IGFkZGVkXG4gICAgaWYgKCFmb3VuZEVsZW1lbnREYXRhKSB7XG4gICAgICBlbGVtZW50c0RhdGEucHVzaCh7XG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgIGRlcHRoOiBkZXB0aFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyAoMykgdXBkYXRlIGRlcHRoXG4gICAgaWYgKGZvdW5kRWxlbWVudERhdGEuZGVwdGggPCBkZXB0aCkge1xuICAgICAgZWxlbWVudHNEYXRhID0gcmVtb3ZlRWxlbWVudERhdGEoZm91bmRFbGVtZW50RGF0YSwgZWxlbWVudHNEYXRhKTtcblxuICAgICAgZWxlbWVudHNEYXRhLnB1c2goe1xuICAgICAgICBlbGVtZW50OiBmb3VuZEVsZW1lbnREYXRhLmVsZW1lbnQsXG4gICAgICAgIGRlcHRoOiBkZXB0aFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlRWxlbWVudERhdGEoZWxlbWVudERhdGEsIGVsZW1lbnRzRGF0YSkge1xuICAgIHZhciBpbmRleCA9IGVsZW1lbnRzRGF0YS5pbmRleE9mKGVsZW1lbnREYXRhKTtcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIGVsZW1lbnRzRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50c0RhdGE7XG4gIH1cblxuICAvLyAoMSkgYWRkIGVsZW1lbnRzXG4gIGVhY2hFbGVtZW50KHBhcmVudHMsIGZ1bmN0aW9uKGVsZW1lbnQsIF9pbmRleCwgZGVwdGgpIHtcblxuICAgIC8vIGRvIE5PVCBhZGQgZXh0ZXJuYWwgbGFiZWxzIGRpcmVjdGx5XG4gICAgaWYgKGlzTGFiZWwoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhbHdheXMgY29weSBleHRlcm5hbCBsYWJlbHNcbiAgICBmb3JFYWNoKGVsZW1lbnQubGFiZWxzLCBmdW5jdGlvbihsYWJlbCkge1xuICAgICAgYWRkRWxlbWVudERhdGEobGFiZWwsIGRlcHRoKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlbGF0ZWRFbGVtZW50cyhlbGVtZW50cykge1xuICAgICAgZWxlbWVudHMgJiYgZWxlbWVudHMubGVuZ3RoICYmIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgICAgICAvLyBhZGQgZXh0ZXJuYWwgbGFiZWxzXG4gICAgICAgIGZvckVhY2goZWxlbWVudC5sYWJlbHMsIGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgICAgICAgYWRkRWxlbWVudERhdGEobGFiZWwsIGRlcHRoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWRkRWxlbWVudERhdGEoZWxlbWVudCwgZGVwdGgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yRWFjaChbIGVsZW1lbnQuYXR0YWNoZXJzLCBlbGVtZW50LmluY29taW5nLCBlbGVtZW50Lm91dGdvaW5nIF0sIGFkZFJlbGF0ZWRFbGVtZW50cyk7XG5cbiAgICBhZGRFbGVtZW50RGF0YShlbGVtZW50LCBkZXB0aCk7XG5cbiAgICByZXR1cm4gZWxlbWVudC5jaGlsZHJlbjtcbiAgfSk7XG5cbiAgZWxlbWVudHMgPSBtYXAoZWxlbWVudHNEYXRhLCBmdW5jdGlvbihlbGVtZW50RGF0YSkge1xuICAgIHJldHVybiBlbGVtZW50RGF0YS5lbGVtZW50O1xuICB9KTtcblxuICAvLyAoMikgY29weSBlbGVtZW50c1xuICBlbGVtZW50c0RhdGEgPSBtYXAoZWxlbWVudHNEYXRhLCBmdW5jdGlvbihlbGVtZW50RGF0YSkge1xuICAgIGVsZW1lbnREYXRhLmRlc2NyaXB0b3IgPSB7fTtcblxuICAgIHNlbGYuX2V2ZW50QnVzLmZpcmUoJ2NvcHlQYXN0ZS5jb3B5RWxlbWVudCcsIHtcbiAgICAgIGRlc2NyaXB0b3I6IGVsZW1lbnREYXRhLmRlc2NyaXB0b3IsXG4gICAgICBlbGVtZW50OiBlbGVtZW50RGF0YS5lbGVtZW50LFxuICAgICAgZWxlbWVudHM6IGVsZW1lbnRzXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZWxlbWVudERhdGE7XG4gIH0pO1xuXG4gIC8vICgzKSBzb3J0IGVsZW1lbnRzIGJ5IHByaW9yaXR5XG4gIGVsZW1lbnRzRGF0YSA9IHNvcnRCeShlbGVtZW50c0RhdGEsIGZ1bmN0aW9uKGVsZW1lbnREYXRhKSB7XG4gICAgcmV0dXJuIGVsZW1lbnREYXRhLmRlc2NyaXB0b3IucHJpb3JpdHk7XG4gIH0pO1xuXG4gIGVsZW1lbnRzID0gbWFwKGVsZW1lbnRzRGF0YSwgZnVuY3Rpb24oZWxlbWVudERhdGEpIHtcbiAgICByZXR1cm4gZWxlbWVudERhdGEuZWxlbWVudDtcbiAgfSk7XG5cbiAgLy8gKDQpIGNyZWF0ZSB0cmVlXG4gIGZvckVhY2goZWxlbWVudHNEYXRhLCBmdW5jdGlvbihlbGVtZW50RGF0YSkge1xuICAgIHZhciBkZXB0aCA9IGVsZW1lbnREYXRhLmRlcHRoO1xuXG4gICAgaWYgKCFzZWxmLmhhc1JlbGF0aW9ucyhlbGVtZW50RGF0YS5lbGVtZW50LCBlbGVtZW50cykpIHtcbiAgICAgIHJlbW92ZUVsZW1lbnQoZWxlbWVudERhdGEuZWxlbWVudCwgZWxlbWVudHMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjYW5Db3B5KGVsZW1lbnREYXRhLmVsZW1lbnQsIGVsZW1lbnRzKSkge1xuICAgICAgcmVtb3ZlRWxlbWVudChlbGVtZW50RGF0YS5lbGVtZW50LCBlbGVtZW50cyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRyZWVbZGVwdGhdKSB7XG4gICAgICB0cmVlW2RlcHRoXSA9IFtdO1xuICAgIH1cblxuICAgIHRyZWVbZGVwdGhdLnB1c2goZWxlbWVudERhdGEuZGVzY3JpcHRvcik7XG4gIH0pO1xuXG4gIHJldHVybiB0cmVlO1xufTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzQXR0YWNoZXIoZWxlbWVudCkge1xuICByZXR1cm4gISFlbGVtZW50Lmhvc3Q7XG59XG5cbmZ1bmN0aW9uIGlzQ29ubmVjdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiAhIWVsZW1lbnQud2F5cG9pbnRzO1xufVxuXG5mdW5jdGlvbiBpc0xhYmVsKGVsZW1lbnQpIHtcbiAgcmV0dXJuICEhZWxlbWVudC5sYWJlbFRhcmdldDtcbn1cblxuZnVuY3Rpb24gY29weVdheXBvaW50cyhlbGVtZW50KSB7XG4gIHJldHVybiBtYXAoZWxlbWVudC53YXlwb2ludHMsIGZ1bmN0aW9uKHdheXBvaW50KSB7XG5cbiAgICB3YXlwb2ludCA9IGNvcHlXYXlwb2ludCh3YXlwb2ludCk7XG5cbiAgICBpZiAod2F5cG9pbnQub3JpZ2luYWwpIHtcbiAgICAgIHdheXBvaW50Lm9yaWdpbmFsID0gY29weVdheXBvaW50KHdheXBvaW50Lm9yaWdpbmFsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2F5cG9pbnQ7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb3B5V2F5cG9pbnQod2F5cG9pbnQpIHtcbiAgcmV0dXJuIGFzc2lnbih7fSwgd2F5cG9pbnQpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVFbGVtZW50KGVsZW1lbnQsIGVsZW1lbnRzKSB7XG4gIHZhciBpbmRleCA9IGVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBlbGVtZW50cztcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xufVxuIiwiaW1wb3J0IENsaXBib2FyZE1vZHVsZSBmcm9tICcuLi9jbGlwYm9hcmQnO1xuaW1wb3J0IENyZWF0ZU1vZHVsZSBmcm9tICcuLi9jcmVhdGUnO1xuaW1wb3J0IE1vdXNlTW9kdWxlIGZyb20gJy4uL21vdXNlJztcbmltcG9ydCBSdWxlc01vZHVsZSBmcm9tICcuLi9ydWxlcyc7XG5cbmltcG9ydCBDb3B5UGFzdGUgZnJvbSAnLi9Db3B5UGFzdGUnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBDbGlwYm9hcmRNb2R1bGUsXG4gICAgQ3JlYXRlTW9kdWxlLFxuICAgIE1vdXNlTW9kdWxlLFxuICAgIFJ1bGVzTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdjb3B5UGFzdGUnIF0sXG4gIGNvcHlQYXN0ZTogWyAndHlwZScsIENvcHlQYXN0ZSBdXG59O1xuIiwidmFyIE1BUktFUl9PSyA9ICdkcm9wLW9rJyxcbiAgICBNQVJLRVJfTk9UX09LID0gJ2Ryb3Atbm90LW9rJyxcbiAgICBNQVJLRVJfQVRUQUNIID0gJ2F0dGFjaC1vaycsXG4gICAgTUFSS0VSX05FV19QQVJFTlQgPSAnbmV3LXBhcmVudCc7XG5cbmltcG9ydCB7XG4gIGFzc2lnbixcbiAgZmlsdGVyLFxuICBmaW5kLFxuICBmb3JFYWNoLFxuICBpc0FycmF5LFxuICBpc051bWJlcixcbiAgbWFwXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHsgZ2V0QkJveCB9IGZyb20gJy4uLy4uL3V0aWwvRWxlbWVudHMnO1xuXG52YXIgUFJFRklYID0gJ2NyZWF0ZSc7XG5cbnZhciBISUdIX1BSSU9SSVRZID0gMjAwMDtcblxuXG4vKipcbiAqIENyZWF0ZSBuZXcgZWxlbWVudHMgdGhyb3VnaCBkcmFnIGFuZCBkcm9wLlxuICpcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7RHJhZ2dpbmd9IGRyYWdnaW5nXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7UnVsZXN9IHJ1bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENyZWF0ZShcbiAgICBjYW52YXMsXG4gICAgZHJhZ2dpbmcsXG4gICAgZXZlbnRCdXMsXG4gICAgbW9kZWxpbmcsXG4gICAgcnVsZXNcbikge1xuXG4gIC8vIHJ1bGVzIC8vLy8vLy8vLy9cblxuICAvKipcbiAgICogQ2hlY2sgd2V0aGVyIGVsZW1lbnRzIGNhbiBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHNcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7UG9pbnR9IHBvc2l0aW9uXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IFtzb3VyY2VdXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufG51bGx8T2JqZWN0fVxuICAgKi9cbiAgZnVuY3Rpb24gY2FuQ3JlYXRlKGVsZW1lbnRzLCB0YXJnZXQsIHBvc2l0aW9uLCBzb3VyY2UsIGhpbnRzKSB7XG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBpZ25vcmUgY2hpbGQgZWxlbWVudHMgYW5kIGV4dGVybmFsIGxhYmVsc1xuICAgIGVsZW1lbnRzID0gZmlsdGVyKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICB2YXIgbGFiZWxUYXJnZXQgPSBlbGVtZW50LmxhYmVsVGFyZ2V0O1xuXG4gICAgICByZXR1cm4gIWVsZW1lbnQucGFyZW50ICYmICEoaXNMYWJlbChlbGVtZW50KSAmJiBlbGVtZW50cy5pbmRleE9mKGxhYmVsVGFyZ2V0KSAhPT0gLTEpO1xuICAgIH0pO1xuXG4gICAgdmFyIHNoYXBlID0gZmluZChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuICFpc0Nvbm5lY3Rpb24oZWxlbWVudCk7XG4gICAgfSk7XG5cbiAgICB2YXIgYXR0YWNoID0gZmFsc2UsXG4gICAgICAgIGNvbm5lY3QgPSBmYWxzZSxcbiAgICAgICAgY3JlYXRlID0gZmFsc2U7XG5cbiAgICAvLyAoMSkgYXR0YWNoaW5nIHNpbmdsZSBzaGFwZXNcbiAgICBpZiAoaXNTaW5nbGVTaGFwZShlbGVtZW50cykpIHtcbiAgICAgIGF0dGFjaCA9IHJ1bGVzLmFsbG93ZWQoJ3NoYXBlLmF0dGFjaCcsIHtcbiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICBzaGFwZTogc2hhcGUsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWF0dGFjaCkge1xuXG4gICAgICAvLyAoMikgY3JlYXRpbmcgZWxlbWVudHNcbiAgICAgIGlmIChpc1NpbmdsZVNoYXBlKGVsZW1lbnRzKSkge1xuICAgICAgICBjcmVhdGUgPSBydWxlcy5hbGxvd2VkKCdzaGFwZS5jcmVhdGUnLCB7XG4gICAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICAgIHNoYXBlOiBzaGFwZSxcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICB0YXJnZXQ6IHRhcmdldFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNyZWF0ZSA9IHJ1bGVzLmFsbG93ZWQoJ2VsZW1lbnRzLmNyZWF0ZScsIHtcbiAgICAgICAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgdmFyIGNvbm5lY3Rpb25UYXJnZXQgPSBoaW50cy5jb25uZWN0aW9uVGFyZ2V0O1xuXG4gICAgLy8gKDMpIGFwcGVuZGluZyBzaW5nbGUgc2hhcGVzXG4gICAgaWYgKGNyZWF0ZSB8fCBhdHRhY2gpIHtcbiAgICAgIGlmIChzaGFwZSAmJiBzb3VyY2UpIHtcbiAgICAgICAgY29ubmVjdCA9IHJ1bGVzLmFsbG93ZWQoJ2Nvbm5lY3Rpb24uY3JlYXRlJywge1xuICAgICAgICAgIHNvdXJjZTogY29ubmVjdGlvblRhcmdldCA9PT0gc291cmNlID8gc2hhcGUgOiBzb3VyY2UsXG4gICAgICAgICAgdGFyZ2V0OiBjb25uZWN0aW9uVGFyZ2V0ID09PSBzb3VyY2UgPyBzb3VyY2UgOiBzaGFwZSxcbiAgICAgICAgICBoaW50czoge1xuICAgICAgICAgICAgdGFyZ2V0UGFyZW50OiB0YXJnZXQsXG4gICAgICAgICAgICB0YXJnZXRBdHRhY2g6IGF0dGFjaFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGF0dGFjaDogYXR0YWNoLFxuICAgICAgICBjb25uZWN0OiBjb25uZWN0XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGlnbm9yZSB3ZXRoZXIgb3Igbm90IGVsZW1lbnRzIGNhbiBiZSBjcmVhdGVkXG4gICAgaWYgKGNyZWF0ZSA9PT0gbnVsbCB8fCBhdHRhY2ggPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldE1hcmtlcihlbGVtZW50LCBtYXJrZXIpIHtcbiAgICBbIE1BUktFUl9BVFRBQ0gsIE1BUktFUl9PSywgTUFSS0VSX05PVF9PSywgTUFSS0VSX05FV19QQVJFTlQgXS5mb3JFYWNoKGZ1bmN0aW9uKG0pIHtcblxuICAgICAgaWYgKG0gPT09IG1hcmtlcikge1xuICAgICAgICBjYW52YXMuYWRkTWFya2VyKGVsZW1lbnQsIG0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihlbGVtZW50LCBtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIGV2ZW50IGhhbmRsaW5nIC8vLy8vLy8vLy9cblxuICBldmVudEJ1cy5vbihbICdjcmVhdGUubW92ZScsICdjcmVhdGUuaG92ZXInIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHMsXG4gICAgICAgIGhvdmVyID0gZXZlbnQuaG92ZXIsXG4gICAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge307XG5cbiAgICBpZiAoIWhvdmVyKSB7XG4gICAgICBjb250ZXh0LmNhbkV4ZWN1dGUgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQudGFyZ2V0ID0gbnVsbDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVuc3VyZUNvbnN0cmFpbnRzKGV2ZW50KTtcblxuICAgIHZhciBwb3NpdGlvbiA9IHtcbiAgICAgIHg6IGV2ZW50LngsXG4gICAgICB5OiBldmVudC55XG4gICAgfTtcblxuICAgIHZhciBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlID0gaG92ZXIgJiYgY2FuQ3JlYXRlKGVsZW1lbnRzLCBob3ZlciwgcG9zaXRpb24sIHNvdXJjZSwgaGludHMpO1xuXG4gICAgaWYgKGhvdmVyICYmIGNhbkV4ZWN1dGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQudGFyZ2V0ID0gaG92ZXI7XG5cbiAgICAgIGlmIChjYW5FeGVjdXRlICYmIGNhbkV4ZWN1dGUuYXR0YWNoKSB7XG4gICAgICAgIHNldE1hcmtlcihob3ZlciwgTUFSS0VSX0FUVEFDSCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRNYXJrZXIoaG92ZXIsIGNhbkV4ZWN1dGUgPyBNQVJLRVJfTkVXX1BBUkVOVCA6IE1BUktFUl9OT1RfT0spO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnY3JlYXRlLmVuZCcsICdjcmVhdGUub3V0JywgJ2NyZWF0ZS5jbGVhbnVwJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBob3ZlciA9IGV2ZW50LmhvdmVyO1xuXG4gICAgaWYgKGhvdmVyKSB7XG4gICAgICBzZXRNYXJrZXIoaG92ZXIsIG51bGwpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NyZWF0ZS5lbmQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc291cmNlID0gY29udGV4dC5zb3VyY2UsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgY2FuRXhlY3V0ZSA9IGNvbnRleHQuY2FuRXhlY3V0ZSxcbiAgICAgICAgYXR0YWNoID0gY2FuRXhlY3V0ZSAmJiBjYW5FeGVjdXRlLmF0dGFjaCxcbiAgICAgICAgY29ubmVjdCA9IGNhbkV4ZWN1dGUgJiYgY2FuRXhlY3V0ZS5jb25uZWN0LFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge307XG5cbiAgICBpZiAoY2FuRXhlY3V0ZSA9PT0gZmFsc2UgfHwgIXRhcmdldCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGVuc3VyZUNvbnN0cmFpbnRzKGV2ZW50KTtcblxuICAgIHZhciBwb3NpdGlvbiA9IHtcbiAgICAgIHg6IGV2ZW50LngsXG4gICAgICB5OiBldmVudC55XG4gICAgfTtcblxuICAgIGlmIChjb25uZWN0KSB7XG4gICAgICBzaGFwZSA9IG1vZGVsaW5nLmFwcGVuZFNoYXBlKHNvdXJjZSwgc2hhcGUsIHBvc2l0aW9uLCB0YXJnZXQsIHtcbiAgICAgICAgYXR0YWNoOiBhdHRhY2gsXG4gICAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3QgPT09IHRydWUgPyB7fSA6IGNvbm5lY3QsXG4gICAgICAgIGNvbm5lY3Rpb25UYXJnZXQ6IGhpbnRzLmNvbm5lY3Rpb25UYXJnZXRcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50cyA9IG1vZGVsaW5nLmNyZWF0ZUVsZW1lbnRzKGVsZW1lbnRzLCBwb3NpdGlvbiwgdGFyZ2V0LCBhc3NpZ24oe30sIGhpbnRzLCB7XG4gICAgICAgIGF0dGFjaDogYXR0YWNoXG4gICAgICB9KSk7XG5cbiAgICAgIC8vIHVwZGF0ZSBzaGFwZVxuICAgICAgc2hhcGUgPSBmaW5kKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiAhaXNDb25uZWN0aW9uKGVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGVsZW1lbnRzIGFuZCBzaGFwZVxuICAgIGFzc2lnbihjb250ZXh0LCB7XG4gICAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgICBzaGFwZTogc2hhcGVcbiAgICB9KTtcblxuICAgIGFzc2lnbihldmVudCwge1xuICAgICAgZWxlbWVudHM6IGVsZW1lbnRzLFxuICAgICAgc2hhcGU6IHNoYXBlXG4gICAgfSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICB2YXIgY29udGV4dCA9IGRyYWdnaW5nLmNvbnRleHQoKTtcblxuICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQucHJlZml4ID09PSBQUkVGSVgpIHtcbiAgICAgIGRyYWdnaW5nLmNhbmNlbCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNhbmNlbCBvbiA8ZWxlbWVudHMuY2hhbmdlZD4gdGhhdCBpcyBub3QgcmVzdWx0IG9mIDxkcmFnLmVuZD5cbiAgZXZlbnRCdXMub24oJ2NyZWF0ZS5pbml0JywgZnVuY3Rpb24oKSB7XG4gICAgZXZlbnRCdXMub24oJ2VsZW1lbnRzLmNoYW5nZWQnLCBjYW5jZWwpO1xuXG4gICAgZXZlbnRCdXMub25jZShbICdjcmVhdGUuY2FuY2VsJywgJ2NyZWF0ZS5lbmQnIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKCkge1xuICAgICAgZXZlbnRCdXMub2ZmKCdlbGVtZW50cy5jaGFuZ2VkJywgY2FuY2VsKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQVBJIC8vLy8vLy8vLy9cblxuICB0aGlzLnN0YXJ0ID0gZnVuY3Rpb24oZXZlbnQsIGVsZW1lbnRzLCBjb250ZXh0KSB7XG4gICAgaWYgKCFpc0FycmF5KGVsZW1lbnRzKSkge1xuICAgICAgZWxlbWVudHMgPSBbIGVsZW1lbnRzIF07XG4gICAgfVxuXG4gICAgdmFyIHNoYXBlID0gZmluZChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuICFpc0Nvbm5lY3Rpb24oZWxlbWVudCk7XG4gICAgfSk7XG5cbiAgICBpZiAoIXNoYXBlKSB7XG5cbiAgICAgIC8vIGF0IGxlYXN0IG9uZSBzaGFwZSBpcyByZXF1aXJlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQgPSBhc3NpZ24oe1xuICAgICAgZWxlbWVudHM6IGVsZW1lbnRzLFxuICAgICAgaGludHM6IHt9LFxuICAgICAgc2hhcGU6IHNoYXBlXG4gICAgfSwgY29udGV4dCB8fCB7fSk7XG5cbiAgICAvLyBtYWtlIHN1cmUgZWFjaCBlbGVtZW50IGhhcyB4IGFuZCB5XG4gICAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgaWYgKCFpc051bWJlcihlbGVtZW50LngpKSB7XG4gICAgICAgIGVsZW1lbnQueCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOdW1iZXIoZWxlbWVudC55KSkge1xuICAgICAgICBlbGVtZW50LnkgPSAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIGJib3ggPSBnZXRCQm94KGVsZW1lbnRzKTtcblxuICAgIC8vIGNlbnRlciBlbGVtZW50cyBhcm91bmQgY3Vyc29yXG4gICAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgaWYgKGlzQ29ubmVjdGlvbihlbGVtZW50KSkge1xuICAgICAgICBlbGVtZW50LndheXBvaW50cyA9IG1hcChlbGVtZW50LndheXBvaW50cywgZnVuY3Rpb24od2F5cG9pbnQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogd2F5cG9pbnQueCAtIGJib3gueCAtIGJib3gud2lkdGggLyAyLFxuICAgICAgICAgICAgeTogd2F5cG9pbnQueSAtIGJib3gueSAtIGJib3guaGVpZ2h0IC8gMlxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBhc3NpZ24oZWxlbWVudCwge1xuICAgICAgICB4OiBlbGVtZW50LnggLSBiYm94LnggLSBiYm94LndpZHRoIC8gMixcbiAgICAgICAgeTogZWxlbWVudC55IC0gYmJveC55IC0gYmJveC5oZWlnaHQgLyAyXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRyYWdnaW5nLmluaXQoZXZlbnQsIFBSRUZJWCwge1xuICAgICAgY3Vyc29yOiAnZ3JhYmJpbmcnLFxuICAgICAgYXV0b0FjdGl2YXRlOiB0cnVlLFxuICAgICAgZGF0YToge1xuICAgICAgICBzaGFwZTogc2hhcGUsXG4gICAgICAgIGVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuXG5DcmVhdGUuJGluamVjdCA9IFtcbiAgJ2NhbnZhcycsXG4gICdkcmFnZ2luZycsXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZycsXG4gICdydWxlcydcbl07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBlbnN1cmVDb25zdHJhaW50cyhldmVudCkge1xuICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICBjcmVhdGVDb25zdHJhaW50cyA9IGNvbnRleHQuY3JlYXRlQ29uc3RyYWludHM7XG5cbiAgaWYgKCFjcmVhdGVDb25zdHJhaW50cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjcmVhdGVDb25zdHJhaW50cy5sZWZ0KSB7XG4gICAgZXZlbnQueCA9IE1hdGgubWF4KGV2ZW50LngsIGNyZWF0ZUNvbnN0cmFpbnRzLmxlZnQpO1xuICB9XG5cbiAgaWYgKGNyZWF0ZUNvbnN0cmFpbnRzLnJpZ2h0KSB7XG4gICAgZXZlbnQueCA9IE1hdGgubWluKGV2ZW50LngsIGNyZWF0ZUNvbnN0cmFpbnRzLnJpZ2h0KTtcbiAgfVxuXG4gIGlmIChjcmVhdGVDb25zdHJhaW50cy50b3ApIHtcbiAgICBldmVudC55ID0gTWF0aC5tYXgoZXZlbnQueSwgY3JlYXRlQ29uc3RyYWludHMudG9wKTtcbiAgfVxuXG4gIGlmIChjcmVhdGVDb25zdHJhaW50cy5ib3R0b20pIHtcbiAgICBldmVudC55ID0gTWF0aC5taW4oZXZlbnQueSwgY3JlYXRlQ29uc3RyYWludHMuYm90dG9tKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gISFlbGVtZW50LndheXBvaW50cztcbn1cblxuZnVuY3Rpb24gaXNTaW5nbGVTaGFwZShlbGVtZW50cykge1xuICByZXR1cm4gZWxlbWVudHMgJiYgZWxlbWVudHMubGVuZ3RoID09PSAxICYmICFpc0Nvbm5lY3Rpb24oZWxlbWVudHNbMF0pO1xufVxuXG5mdW5jdGlvbiBpc0xhYmVsKGVsZW1lbnQpIHtcbiAgcmV0dXJuICEhZWxlbWVudC5sYWJlbFRhcmdldDtcbn1cbiIsImltcG9ydCB7XHJcbiAgdHJhbnNsYXRlXHJcbn0gZnJvbSAnLi4vLi4vdXRpbC9TdmdUcmFuc2Zvcm1VdGlsJztcclxuXHJcbmltcG9ydCB7IGdldFZpc3VhbCB9IGZyb20gJy4uLy4uL3V0aWwvR3JhcGhpY3NVdGlsJztcclxuXHJcbmltcG9ydCB7XHJcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcclxuICBhdHRyIGFzIHN2Z0F0dHIsXHJcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZSxcclxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXHJcbn0gZnJvbSAndGlueS1zdmcnO1xyXG5cclxudmFyIExPV19QUklPUklUWSA9IDc1MDtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcmVhdGVQcmV2aWV3KFxyXG4gICAgY2FudmFzLFxyXG4gICAgZXZlbnRCdXMsXHJcbiAgICBncmFwaGljc0ZhY3RvcnksXHJcbiAgICBwcmV2aWV3U3VwcG9ydCxcclxuICAgIHN0eWxlc1xyXG4pIHtcclxuICBmdW5jdGlvbiBjcmVhdGVEcmFnR3JvdXAoZWxlbWVudHMpIHtcclxuICAgIHZhciBkcmFnR3JvdXAgPSBzdmdDcmVhdGUoJ2cnKTtcclxuXHJcbiAgICBzdmdBdHRyKGRyYWdHcm91cCwgc3R5bGVzLmNscygnZGpzLWRyYWctZ3JvdXAnLCBbICduby1ldmVudHMnIF0pKTtcclxuXHJcbiAgICB2YXIgY2hpbGRyZW5HZnggPSBzdmdDcmVhdGUoJ2cnKTtcclxuXHJcbiAgICBlbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHJcbiAgICAgIC8vIGNyZWF0ZSBncmFwaGljc1xyXG4gICAgICB2YXIgZ2Z4O1xyXG5cclxuICAgICAgaWYgKGVsZW1lbnQuaGlkZGVuKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcclxuICAgICAgICBnZnggPSBncmFwaGljc0ZhY3RvcnkuX2NyZWF0ZUNvbnRhaW5lcignY29ubmVjdGlvbicsIGNoaWxkcmVuR2Z4KTtcclxuXHJcbiAgICAgICAgZ3JhcGhpY3NGYWN0b3J5LmRyYXdDb25uZWN0aW9uKGdldFZpc3VhbChnZngpLCBlbGVtZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBnZnggPSBncmFwaGljc0ZhY3RvcnkuX2NyZWF0ZUNvbnRhaW5lcignc2hhcGUnLCBjaGlsZHJlbkdmeCk7XHJcblxyXG4gICAgICAgIGdyYXBoaWNzRmFjdG9yeS5kcmF3U2hhcGUoZ2V0VmlzdWFsKGdmeCksIGVsZW1lbnQpO1xyXG5cclxuICAgICAgICB0cmFuc2xhdGUoZ2Z4LCBlbGVtZW50LngsIGVsZW1lbnQueSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFkZCBwcmV2aWV3XHJcbiAgICAgIHByZXZpZXdTdXBwb3J0LmFkZERyYWdnZXIoZWxlbWVudCwgZHJhZ0dyb3VwLCBnZngpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGRyYWdHcm91cDtcclxuICB9XHJcblxyXG4gIGV2ZW50QnVzLm9uKCdjcmVhdGUubW92ZScsIExPV19QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcclxuXHJcbiAgICB2YXIgaG92ZXIgPSBldmVudC5ob3ZlcixcclxuICAgICAgICBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHMsXHJcbiAgICAgICAgZHJhZ0dyb3VwID0gY29udGV4dC5kcmFnR3JvdXA7XHJcblxyXG4gICAgLy8gbGF6aWx5IGNyZWF0ZSBwcmV2aWV3c1xyXG4gICAgaWYgKCFkcmFnR3JvdXApIHtcclxuICAgICAgZHJhZ0dyb3VwID0gY29udGV4dC5kcmFnR3JvdXAgPSBjcmVhdGVEcmFnR3JvdXAoZWxlbWVudHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBkZWZhdWx0TGF5ZXI7XHJcblxyXG4gICAgaWYgKGhvdmVyKSB7XHJcbiAgICAgIGlmICghZHJhZ0dyb3VwLnBhcmVudE5vZGUpIHtcclxuICAgICAgICBkZWZhdWx0TGF5ZXIgPSBjYW52YXMuZ2V0RGVmYXVsdExheWVyKCk7XHJcblxyXG4gICAgICAgIHN2Z0FwcGVuZChkZWZhdWx0TGF5ZXIsIGRyYWdHcm91cCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRyYW5zbGF0ZShkcmFnR3JvdXAsIGV2ZW50LngsIGV2ZW50LnkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3ZnUmVtb3ZlKGRyYWdHcm91cCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGV2ZW50QnVzLm9uKCdjcmVhdGUuY2xlYW51cCcsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgZHJhZ0dyb3VwID0gY29udGV4dC5kcmFnR3JvdXA7XHJcblxyXG4gICAgaWYgKGRyYWdHcm91cCkge1xyXG4gICAgICBzdmdSZW1vdmUoZHJhZ0dyb3VwKTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuQ3JlYXRlUHJldmlldy4kaW5qZWN0ID0gW1xyXG4gICdjYW52YXMnLFxyXG4gICdldmVudEJ1cycsXHJcbiAgJ2dyYXBoaWNzRmFjdG9yeScsXHJcbiAgJ3ByZXZpZXdTdXBwb3J0JyxcclxuICAnc3R5bGVzJ1xyXG5dO1xyXG4iLCJpbXBvcnQgRHJhZ2dpbmdNb2R1bGUgZnJvbSAnLi4vZHJhZ2dpbmcnO1xuaW1wb3J0IFByZXZpZXdTdXBwb3J0TW9kdWxlIGZyb20gJy4uL3ByZXZpZXctc3VwcG9ydCc7XG5pbXBvcnQgUnVsZXNNb2R1bGUgZnJvbSAnLi4vcnVsZXMnO1xuaW1wb3J0IFNlbGVjdGlvbk1vZHVsZSBmcm9tICcuLi9zZWxlY3Rpb24nO1xuXG5pbXBvcnQgQ3JlYXRlIGZyb20gJy4vQ3JlYXRlJztcbmltcG9ydCBDcmVhdGVQcmV2aWV3IGZyb20gJy4vQ3JlYXRlUHJldmlldyc7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIERyYWdnaW5nTW9kdWxlLFxuICAgIFByZXZpZXdTdXBwb3J0TW9kdWxlLFxuICAgIFJ1bGVzTW9kdWxlLFxuICAgIFNlbGVjdGlvbk1vZHVsZVxuICBdLFxuICBfX2luaXRfXzogW1xuICAgICdjcmVhdGUnLFxuICAgICdjcmVhdGVQcmV2aWV3J1xuICBdLFxuICBjcmVhdGU6IFsgJ3R5cGUnLCBDcmVhdGUgXSxcbiAgY3JlYXRlUHJldmlldzogWyAndHlwZScsIENyZWF0ZVByZXZpZXcgXVxufTtcbiIsImltcG9ydCB7XG4gIHNvcnRCeSxcbiAgZm9yRWFjaCxcbiAgZmlsdGVyXG59IGZyb20gJ21pbi1kYXNoJztcblxudmFyIEFYSVNfRElNRU5TSU9OUyA9IHtcbiAgaG9yaXpvbnRhbDogWyAneCcsICd3aWR0aCcgXSxcbiAgdmVydGljYWw6IFsgJ3knLCAnaGVpZ2h0JyBdXG59O1xuXG52YXIgVEhSRVNIT0xEID0gNTtcblxuXG4vKipcbiAqIEdyb3VwcyBhbmQgZmlsdGVycyBlbGVtZW50cyBhbmQgdGhlbiB0cmlnZ2VyIGV2ZW4gZGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEaXN0cmlidXRlRWxlbWVudHMobW9kZWxpbmcpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcblxuICB0aGlzLl9maWx0ZXJzID0gW107XG5cbiAgLy8gcmVnaXN0ZXIgZmlsdGVyIGZvciBmaWx0ZXJpbmcgYmlnIGVsZW1lbnRzXG4gIHRoaXMucmVnaXN0ZXJGaWx0ZXIoZnVuY3Rpb24oZWxlbWVudHMsIGF4aXMsIGRpbWVuc2lvbikge1xuICAgIHZhciBlbGVtZW50c1NpemUgPSAwLFxuICAgICAgICBudW1PZlNoYXBlcyA9IDAsXG4gICAgICAgIGF2Z0RpbWVuc2lvbjtcblxuICAgIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIGlmIChlbGVtZW50LndheXBvaW50cyB8fCBlbGVtZW50LmxhYmVsVGFyZ2V0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZWxlbWVudHNTaXplICs9IGVsZW1lbnRbZGltZW5zaW9uXTtcblxuICAgICAgbnVtT2ZTaGFwZXMgKz0gMTtcbiAgICB9KTtcblxuICAgIGF2Z0RpbWVuc2lvbiA9IE1hdGgucm91bmQoZWxlbWVudHNTaXplIC8gbnVtT2ZTaGFwZXMpO1xuXG4gICAgcmV0dXJuIGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRbZGltZW5zaW9uXSA8IChhdmdEaW1lbnNpb24gKyA1MCk7XG4gICAgfSk7XG4gIH0pO1xuXG59XG5cbkRpc3RyaWJ1dGVFbGVtZW50cy4kaW5qZWN0ID0gWyAnbW9kZWxpbmcnIF07XG5cblxuLyoqXG4gKiBSZWdpc3RlcnMgZmlsdGVyIGZ1bmN0aW9ucyB0aGF0IGFsbG93IGV4dGVybmFsIHBhcnRpZXMgdG8gZmlsdGVyXG4gKiBvdXQgY2VydGFpbiBlbGVtZW50cy5cbiAqXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZmlsdGVyRm5cbiAqL1xuRGlzdHJpYnV0ZUVsZW1lbnRzLnByb3RvdHlwZS5yZWdpc3RlckZpbHRlciA9IGZ1bmN0aW9uKGZpbHRlckZuKSB7XG4gIGlmICh0eXBlb2YgZmlsdGVyRm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoZSBmaWx0ZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIHRoaXMuX2ZpbHRlcnMucHVzaChmaWx0ZXJGbik7XG59O1xuXG4vKipcbiAqIERpc3RyaWJ1dGVzIHRoZSBlbGVtZW50cyB3aXRoIGEgZ2l2ZW4gb3JpZW50YXRpb25cbiAqXG4gKiBAcGFyYW0gIHtBcnJheX0gZWxlbWVudHMgICAgW2Rlc2NyaXB0aW9uXVxuICogQHBhcmFtICB7c3RyaW5nfSBvcmllbnRhdGlvbiBbZGVzY3JpcHRpb25dXG4gKi9cbkRpc3RyaWJ1dGVFbGVtZW50cy5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uKGVsZW1lbnRzLCBvcmllbnRhdGlvbikge1xuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcblxuICB2YXIgZ3JvdXBzLFxuICAgICAgZGlzdHJpYnV0YWJsZUVsZW1lbnRzO1xuXG4gIGlmIChlbGVtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fc2V0T3JpZW50YXRpb24ob3JpZW50YXRpb24pO1xuXG4gIGRpc3RyaWJ1dGFibGVFbGVtZW50cyA9IHRoaXMuX2ZpbHRlckVsZW1lbnRzKGVsZW1lbnRzKTtcblxuICBncm91cHMgPSB0aGlzLl9jcmVhdGVHcm91cHMoZGlzdHJpYnV0YWJsZUVsZW1lbnRzKTtcblxuICAvLyBub3RoaW5nIHRvIGRpc3RyaWJ1dGVcbiAgaWYgKGdyb3Vwcy5sZW5ndGggPD0gMikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIG1vZGVsaW5nLmRpc3RyaWJ1dGVFbGVtZW50cyhncm91cHMsIHRoaXMuX2F4aXMsIHRoaXMuX2RpbWVuc2lvbik7XG5cbiAgcmV0dXJuIGdyb3Vwcztcbn07XG5cbi8qKlxuICogRmlsdGVycyB0aGUgZWxlbWVudHMgd2l0aCBwcm92aWRlZCBmaWx0ZXJzIGJ5IGV4dGVybmFsIHBhcnRpZXNcbiAqXG4gKiBAcGFyYW0gIHtBcnJheVtFbGVtZW50c119IGVsZW1lbnRzXG4gKlxuICogQHJldHVybiB7QXJyYXlbRWxlbWVudHNdfVxuICovXG5EaXN0cmlidXRlRWxlbWVudHMucHJvdG90eXBlLl9maWx0ZXJFbGVtZW50cyA9IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XG4gIHZhciBmaWx0ZXJzID0gdGhpcy5fZmlsdGVycyxcbiAgICAgIGF4aXMgPSB0aGlzLl9heGlzLFxuICAgICAgZGltZW5zaW9uID0gdGhpcy5fZGltZW5zaW9uLFxuICAgICAgZGlzdHJpYnV0YWJsZUVsZW1lbnRzID0gW10uY29uY2F0KGVsZW1lbnRzKTtcblxuICBpZiAoIWZpbHRlcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9XG5cbiAgZm9yRWFjaChmaWx0ZXJzLCBmdW5jdGlvbihmaWx0ZXJGbikge1xuICAgIGRpc3RyaWJ1dGFibGVFbGVtZW50cyA9IGZpbHRlckZuKGRpc3RyaWJ1dGFibGVFbGVtZW50cywgYXhpcywgZGltZW5zaW9uKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRpc3RyaWJ1dGFibGVFbGVtZW50cztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGUgcmFuZ2UgKG1pbiwgbWF4KSBncm91cHMuIEFsc28gdHJpZXMgdG8gZ3JvdXAgZWxlbWVudHNcbiAqIHRvZ2V0aGVyIHRoYXQgc2hhcmUgdGhlIHNhbWUgcmFuZ2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIFx0dmFyIGRpc3RyaWJ1dGFibGVFbGVtZW50cyA9IFtcbiAqIFx0XHR7XG4gKiBcdFx0XHRyYW5nZToge1xuICogXHRcdFx0XHRtaW46IDEwMCxcbiAqIFx0XHRcdFx0bWF4OiAyMDBcbiAqIFx0XHRcdH0sXG4gKiBcdFx0XHRlbGVtZW50czogWyB7IGlkOiAnc2hhcGUxJywgLi4gfV1cbiAqIFx0XHR9XG4gKiBcdF1cbiAqXG4gKiBAcGFyYW0gIHtBcnJheX0gZWxlbWVudHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheVtPYmplY3RzXX1cbiAqL1xuRGlzdHJpYnV0ZUVsZW1lbnRzLnByb3RvdHlwZS5fY3JlYXRlR3JvdXBzID0gZnVuY3Rpb24oZWxlbWVudHMpIHtcbiAgdmFyIHJhbmdlR3JvdXBzID0gW10sXG4gICAgICBzZWxmID0gdGhpcyxcbiAgICAgIGF4aXMgPSB0aGlzLl9heGlzLFxuICAgICAgZGltZW5zaW9uID0gdGhpcy5fZGltZW5zaW9uO1xuXG4gIGlmICghYXhpcykge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVzdCBoYXZlIGEgZGVmaW5lZCBcImF4aXNcIiBhbmQgXCJkaW1lbnNpb25cIicpO1xuICB9XG5cbiAgLy8gc29ydCBieSAnbGVmdC0+cmlnaHQnIG9yICd0b3AtPmJvdHRvbSdcbiAgdmFyIHNvcnRlZEVsZW1lbnRzID0gc29ydEJ5KGVsZW1lbnRzLCBheGlzKTtcblxuICBmb3JFYWNoKHNvcnRlZEVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50LCBpZHgpIHtcbiAgICB2YXIgZWxlbWVudFJhbmdlID0gc2VsZi5fZmluZFJhbmdlKGVsZW1lbnQsIGF4aXMsIGRpbWVuc2lvbiksXG4gICAgICAgIHJhbmdlO1xuXG4gICAgdmFyIHByZXZpb3VzID0gcmFuZ2VHcm91cHNbcmFuZ2VHcm91cHMubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAocHJldmlvdXMgJiYgc2VsZi5faGFzSW50ZXJzZWN0aW9uKHByZXZpb3VzLnJhbmdlLCBlbGVtZW50UmFuZ2UpKSB7XG4gICAgICByYW5nZUdyb3Vwc1tyYW5nZUdyb3Vwcy5sZW5ndGggLSAxXS5lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZSA9IHsgcmFuZ2U6IGVsZW1lbnRSYW5nZSwgZWxlbWVudHM6IFsgZWxlbWVudCBdIH07XG5cbiAgICAgIHJhbmdlR3JvdXBzLnB1c2gocmFuZ2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJhbmdlR3JvdXBzO1xufTtcblxuXG4vKipcbiAqIE1hcHMgYSBkaXJlY3Rpb24gdG8gdGhlIGFjY29yZGluZyBheGlzIGFuZCBkaW1lbnNpb25cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGRpcmVjdGlvbiAnaG9yaXpvbnRhbCcgb3IgJ3ZlcnRpY2FsJ1xuICovXG5EaXN0cmlidXRlRWxlbWVudHMucHJvdG90eXBlLl9zZXRPcmllbnRhdGlvbiA9IGZ1bmN0aW9uKGRpcmVjdGlvbikge1xuICB2YXIgb3JpZW50YXRpb24gPSBBWElTX0RJTUVOU0lPTlNbZGlyZWN0aW9uXTtcblxuICB0aGlzLl9heGlzID0gb3JpZW50YXRpb25bMF07XG4gIHRoaXMuX2RpbWVuc2lvbiA9IG9yaWVudGF0aW9uWzFdO1xufTtcblxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgdHdvIHJhbmdlcyBpbnRlcmNlcHQgZWFjaCBvdGhlclxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gcmFuZ2VBIHttaW4sIG1heH1cbiAqIEBwYXJhbSAge09iamVjdH0gcmFuZ2VCIHttaW4sIG1heH1cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5EaXN0cmlidXRlRWxlbWVudHMucHJvdG90eXBlLl9oYXNJbnRlcnNlY3Rpb24gPSBmdW5jdGlvbihyYW5nZUEsIHJhbmdlQikge1xuICByZXR1cm4gTWF0aC5tYXgocmFuZ2VBLm1pbiwgcmFuZ2VBLm1heCkgPj0gTWF0aC5taW4ocmFuZ2VCLm1pbiwgcmFuZ2VCLm1heCkgJiZcbiAgICAgICAgIE1hdGgubWluKHJhbmdlQS5taW4sIHJhbmdlQS5tYXgpIDw9IE1hdGgubWF4KHJhbmdlQi5taW4sIHJhbmdlQi5tYXgpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyBmb3IgYW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSAge1t0eXBlXX0gZWxlbWVudCAgIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge1t0eXBlXX0gYXhpcyAgICAgIFtkZXNjcmlwdGlvbl1cbiAqIEBwYXJhbSAge1t0eXBlXX0gZGltZW5zaW9uIFtkZXNjcmlwdGlvbl1cbiAqXG4gKiBAcmV0dXJuIHtbdHlwZV19ICAgICAgICAgICBbZGVzY3JpcHRpb25dXG4gKi9cbkRpc3RyaWJ1dGVFbGVtZW50cy5wcm90b3R5cGUuX2ZpbmRSYW5nZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIGF4aXMgPSBlbGVtZW50W3RoaXMuX2F4aXNdLFxuICAgICAgZGltZW5zaW9uID0gZWxlbWVudFt0aGlzLl9kaW1lbnNpb25dO1xuXG4gIHJldHVybiB7XG4gICAgbWluOiBheGlzICsgVEhSRVNIT0xELFxuICAgIG1heDogYXhpcyArIGRpbWVuc2lvbiAtIFRIUkVTSE9MRFxuICB9O1xufTtcbiIsImltcG9ydCBEaXN0cmlidXRlRWxlbWVudHMgZnJvbSAnLi9EaXN0cmlidXRlRWxlbWVudHMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdkaXN0cmlidXRlRWxlbWVudHMnIF0sXG4gIGRpc3RyaWJ1dGVFbGVtZW50czogWyAndHlwZScsIERpc3RyaWJ1dGVFbGVtZW50cyBdXG59O1xuIiwiLyogZ2xvYmFsIFRvdWNoRXZlbnQgKi9cblxudmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcblxuaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBldmVudCBhcyBkb21FdmVudFxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHtcbiAgZ2V0T3JpZ2luYWwsXG4gIHRvUG9pbnQsXG4gIHN0b3BQcm9wYWdhdGlvblxufSBmcm9tICcuLi8uLi91dGlsL0V2ZW50JztcblxuaW1wb3J0IHtcbiAgc2V0IGFzIGN1cnNvclNldCxcbiAgdW5zZXQgYXMgY3Vyc29yVW5zZXRcbn0gZnJvbSAnLi4vLi4vdXRpbC9DdXJzb3InO1xuXG5pbXBvcnQge1xuICBpbnN0YWxsIGFzIGluc3RhbGxDbGlja1RyYXBcbn0gZnJvbSAnLi4vLi4vdXRpbC9DbGlja1RyYXAnO1xuXG5pbXBvcnQge1xuICBkZWx0YSBhcyBkZWx0YVBvc1xufSBmcm9tICcuLi8uLi91dGlsL1Bvc2l0aW9uVXRpbCc7XG5cbnZhciBEUkFHX0FDVElWRV9DTFMgPSAnZGpzLWRyYWctYWN0aXZlJztcblxuXG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufVxuXG5mdW5jdGlvbiBpc1RvdWNoRXZlbnQoZXZlbnQpIHtcblxuICAvLyBjaGVjayBmb3IgVG91Y2hFdmVudCBiZWluZyBhdmFpbGFibGUgZmlyc3RcbiAgLy8gKGkuZS4gbm90IGF2YWlsYWJsZSBvbiBkZXNrdG9wIEZpcmVmb3gpXG4gIHJldHVybiB0eXBlb2YgVG91Y2hFdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZXZlbnQgaW5zdGFuY2VvZiBUb3VjaEV2ZW50O1xufVxuXG5mdW5jdGlvbiBnZXRMZW5ndGgocG9pbnQpIHtcbiAgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhwb2ludC54LCAyKSArIE1hdGgucG93KHBvaW50LnksIDIpKTtcbn1cblxuLyoqXG4gKiBBIGhlbHBlciB0aGF0IGZpcmVzIGNhbnZhcyBsb2NhbGl6ZWQgZHJhZyBldmVudHMgYW5kIHJlYWxpemVzXG4gKiB0aGUgZ2VuZXJhbCBcImRyYWctYW5kLWRyb3BcIiBsb29rIGFuZCBmZWVsLlxuICpcbiAqIENhbGxpbmcge0BsaW5rIERyYWdnaW5nI2FjdGl2YXRlfSBhY3RpdmF0ZXMgZHJhZ2dpbmcgb24gYSBjYW52YXMuXG4gKlxuICogSXQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZzpcbiAqXG4gKiAgICogZW1pdHMgbGlmZSBjeWNsZSBldmVudHMsIG5hbWVzcGFjZWQgd2l0aCBhIHByZWZpeCBhc3NpZ25lZFxuICogICAgIGR1cmluZyBkcmFnZ2luZyBhY3RpdmF0aW9uXG4gKiAgICogc2V0cyBhbmQgcmVzdG9yZXMgdGhlIGN1cnNvclxuICogICAqIHNldHMgYW5kIHJlc3RvcmVzIHRoZSBzZWxlY3Rpb24gaWYgZWxlbWVudHMgc3RpbGwgZXhpc3RcbiAqICAgKiBlbnN1cmVzIHRoZXJlIGNhbiBiZSBvbmx5IG9uZSBkcmFnIG9wZXJhdGlvbiBhY3RpdmUgYXQgYSB0aW1lXG4gKlxuICogRHJhZ2dpbmcgbWF5IGJlIGNhbmNlbGVkIG1hbnVhbGx5IGJ5IGNhbGxpbmcge0BsaW5rIERyYWdnaW5nI2NhbmNlbH1cbiAqIG9yIGJ5IHByZXNzaW5nIEVTQy5cbiAqXG4gKlxuICogIyMgTGlmZS1jeWNsZSBldmVudHNcbiAqXG4gKiBEcmFnZ2luZyBjYW4gYmUgaW4gdGhyZWUgZGlmZmVyZW50IHN0YXRlcywgb2ZmLCBpbml0aWFsaXplZFxuICogYW5kIGFjdGl2ZS5cbiAqXG4gKiAoMSkgb2ZmOiBubyBkcmFnZ2luZyBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3NcbiAqICgyKSBpbml0aWFsaXplZDogYSBuZXcgZHJhZyBvcGVyYXRpb24gZ290IGluaXRpYWxpemVkIGJ1dCBub3QgeWV0XG4gKiAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKGkuZS4gYmVjYXVzZSBvZiBubyBpbml0aWFsIG1vdmUpXG4gKiAoMykgc3RhcnRlZDogZHJhZ2dpbmcgaXMgaW4gcHJvZ3Jlc3NcbiAqXG4gKiBFdmVudHVhbGx5IGRyYWdnaW5nIHdpbGwgYmUgb2ZmIGFnYWluIGFmdGVyIGEgZHJhZyBvcGVyYXRpb24gaGFzXG4gKiBiZWVuIGVuZGVkIG9yIGNhbmNlbGVkIHZpYSB1c2VyIGNsaWNrIG9yIEVTQyBrZXkgcHJlc3MuXG4gKlxuICogVG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgYmV0d2VlbiB0aGVzZSBzdGF0ZXMgZHJhZ2dpbmcgZW1pdHMgZ2VuZXJpY1xuICogbGlmZS1jeWNsZSBldmVudHMgd2l0aCB0aGUgYGRyYWcuYCBwcmVmaXggX2FuZF8gZXZlbnRzIG5hbWVzcGFjZWRcbiAqIHRvIGEgcHJlZml4IGNob29zZW4gYnkgYSB1c2VyIGR1cmluZyBkcmFnIGluaXRpYWxpemF0aW9uLlxuICpcbiAqIFRoZSBmb2xsb3dpbmcgZXZlbnRzIGFyZSBlbWl0dGVkIChhcHByb3ByaWF0ZWx5IHByZWZpeGVkKSB2aWFcbiAqIHRoZSB7QGxpbmsgRXZlbnRCdXN9LlxuICpcbiAqICogYGluaXRgXG4gKiAqIGBzdGFydGBcbiAqICogYG1vdmVgXG4gKiAqIGBlbmRgXG4gKiAqIGBlbmRlZGAgKGRyYWdnaW5nIGFscmVhZHkgaW4gb2ZmIHN0YXRlKVxuICogKiBgY2FuY2VsYCAob25seSBpZiBwcmV2aW91c2x5IHN0YXJ0ZWQpXG4gKiAqIGBjYW5jZWxlZGAgKGRyYWdnaW5nIGFscmVhZHkgaW4gb2ZmIHN0YXRlLCBvbmx5IGlmIHByZXZpb3VzbHkgc3RhcnRlZClcbiAqICogYGNsZWFudXBgXG4gKlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gTXlEcmFnQ29tcG9uZW50KGV2ZW50QnVzLCBkcmFnZ2luZykge1xuICpcbiAqICAgZXZlbnRCdXMub24oJ215ZHJhZy5zdGFydCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gKiAgICAgY29uc29sZS5sb2coJ3llcywgd2Ugc3RhcnQgZHJhZ2dpbmcnKTtcbiAqICAgfSk7XG4gKlxuICogICBldmVudEJ1cy5vbignbXlkcmFnLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuICogICAgIGNvbnNvbGUubG9nKCdjYW52YXMgbG9jYWwgY29vcmRpbmF0ZXMnLCBldmVudC54LCBldmVudC55LCBldmVudC5keCwgZXZlbnQuZHkpO1xuICpcbiAqICAgICAvLyBsb2NhbCBkcmFnIGRhdGEgaXMgcGFzc2VkIHdpdGggdGhlIGV2ZW50XG4gKiAgICAgZXZlbnQuY29udGV4dC5mb287IC8vIFwiQkFSXCJcbiAqXG4gKiAgICAgLy8gdGhlIG9yaWdpbmFsIG1vdXNlIGV2ZW50LCB0b29cbiAqICAgICBldmVudC5vcmlnaW5hbEV2ZW50OyAvLyBNb3VzZUV2ZW50KC4uLilcbiAqICAgfSk7XG4gKlxuICogICBldmVudEJ1cy5vbignZWxlbWVudC5jbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gKiAgICAgZHJhZ2dpbmcuaW5pdChldmVudCwgJ215ZHJhZycsIHtcbiAqICAgICAgIGN1cnNvcjogJ2dyYWJiaW5nJyxcbiAqICAgICAgIGRhdGE6IHtcbiAqICAgICAgICAgY29udGV4dDoge1xuICogICAgICAgICAgIGZvbzogXCJCQVJcIlxuICogICAgICAgICB9XG4gKiAgICAgICB9XG4gKiAgICAgfSk7XG4gKiAgIH0pO1xuICogfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEcmFnZ2luZyhldmVudEJ1cywgY2FudmFzLCBzZWxlY3Rpb24sIGVsZW1lbnRSZWdpc3RyeSkge1xuXG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICB0aHJlc2hvbGQ6IDUsXG4gICAgdHJhcENsaWNrOiB0cnVlXG4gIH07XG5cbiAgLy8gdGhlIGN1cnJlbnRseSBhY3RpdmUgZHJhZyBvcGVyYXRpb25cbiAgLy8gZHJhZ2dpbmcgaXMgYWN0aXZlIGFzIHNvb24gYXMgdGhpcyBjb250ZXh0IGV4aXN0cy5cbiAgLy9cbiAgLy8gaXQgaXMgdmlzdWFsbHkgX2FjdGl2ZV8gb25seSB3aGVuIGEgY29udGV4dC5hY3RpdmUgZmxhZyBpcyBzZXQgdG8gdHJ1ZS5cbiAgdmFyIGNvbnRleHQ7XG5cbiAgLyogY29udmVydCBhIGdsb2JhbCBldmVudCBpbnRvIGxvY2FsIGNvb3JkaW5hdGVzICovXG4gIGZ1bmN0aW9uIHRvTG9jYWxQb2ludChnbG9iYWxQb3NpdGlvbikge1xuXG4gICAgdmFyIHZpZXdib3ggPSBjYW52YXMudmlld2JveCgpO1xuXG4gICAgdmFyIGNsaWVudFJlY3QgPSBjYW52YXMuX2NvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHJldHVybiB7XG4gICAgICB4OiB2aWV3Ym94LnggKyAoZ2xvYmFsUG9zaXRpb24ueCAtIGNsaWVudFJlY3QubGVmdCkgLyB2aWV3Ym94LnNjYWxlLFxuICAgICAgeTogdmlld2JveC55ICsgKGdsb2JhbFBvc2l0aW9uLnkgLSBjbGllbnRSZWN0LnRvcCkgLyB2aWV3Ym94LnNjYWxlXG4gICAgfTtcbiAgfVxuXG4gIC8vIGhlbHBlcnNcblxuICBmdW5jdGlvbiBmaXJlKHR5cGUsIGRyYWdDb250ZXh0KSB7XG4gICAgZHJhZ0NvbnRleHQgPSBkcmFnQ29udGV4dCB8fCBjb250ZXh0O1xuXG4gICAgdmFyIGV2ZW50ID0gZXZlbnRCdXMuY3JlYXRlRXZlbnQoXG4gICAgICBhc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICBkcmFnQ29udGV4dC5wYXlsb2FkLFxuICAgICAgICBkcmFnQ29udGV4dC5kYXRhLFxuICAgICAgICB7IGlzVG91Y2g6IGRyYWdDb250ZXh0LmlzVG91Y2ggfVxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBkZWZhdWx0IGludGVncmF0aW9uXG4gICAgaWYgKGV2ZW50QnVzLmZpcmUoJ2RyYWcuJyArIHR5cGUsIGV2ZW50KSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnRCdXMuZmlyZShkcmFnQ29udGV4dC5wcmVmaXggKyAnLicgKyB0eXBlLCBldmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiByZXN0b3JlU2VsZWN0aW9uKHByZXZpb3VzU2VsZWN0aW9uKSB7XG4gICAgdmFyIGV4aXN0aW5nU2VsZWN0aW9uID0gcHJldmlvdXNTZWxlY3Rpb24uZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50UmVnaXN0cnkuZ2V0KGVsZW1lbnQuaWQpO1xuICAgIH0pO1xuXG4gICAgZXhpc3RpbmdTZWxlY3Rpb24ubGVuZ3RoICYmIHNlbGVjdGlvbi5zZWxlY3QoZXhpc3RpbmdTZWxlY3Rpb24pO1xuICB9XG5cbiAgLy8gZXZlbnQgbGlzdGVuZXJzXG5cbiAgZnVuY3Rpb24gbW92ZShldmVudCwgYWN0aXZhdGUpIHtcbiAgICB2YXIgcGF5bG9hZCA9IGNvbnRleHQucGF5bG9hZCxcbiAgICAgICAgZGlzcGxhY2VtZW50ID0gY29udGV4dC5kaXNwbGFjZW1lbnQ7XG5cbiAgICB2YXIgZ2xvYmFsU3RhcnQgPSBjb250ZXh0Lmdsb2JhbFN0YXJ0LFxuICAgICAgICBnbG9iYWxDdXJyZW50ID0gdG9Qb2ludChldmVudCksXG4gICAgICAgIGdsb2JhbERlbHRhID0gZGVsdGFQb3MoZ2xvYmFsQ3VycmVudCwgZ2xvYmFsU3RhcnQpO1xuXG4gICAgdmFyIGxvY2FsU3RhcnQgPSBjb250ZXh0LmxvY2FsU3RhcnQsXG4gICAgICAgIGxvY2FsQ3VycmVudCA9IHRvTG9jYWxQb2ludChnbG9iYWxDdXJyZW50KSxcbiAgICAgICAgbG9jYWxEZWx0YSA9IGRlbHRhUG9zKGxvY2FsQ3VycmVudCwgbG9jYWxTdGFydCk7XG5cblxuICAgIC8vIGFjdGl2YXRlIGNvbnRleHQgZXhwbGljaXRseSBvciBvbmNlIHRocmVzaG9sZCBpcyByZWFjaGVkXG4gICAgaWYgKCFjb250ZXh0LmFjdGl2ZSAmJiAoYWN0aXZhdGUgfHwgZ2V0TGVuZ3RoKGdsb2JhbERlbHRhKSA+IGNvbnRleHQudGhyZXNob2xkKSkge1xuXG4gICAgICAvLyBmaXJlIHN0YXJ0IGV2ZW50IHdpdGggb3JpZ2luYWxcbiAgICAgIC8vIHN0YXJ0aW5nIGNvb3JkaW5hdGVzXG5cbiAgICAgIGFzc2lnbihwYXlsb2FkLCB7XG4gICAgICAgIHg6IHJvdW5kKGxvY2FsU3RhcnQueCArIGRpc3BsYWNlbWVudC54KSxcbiAgICAgICAgeTogcm91bmQobG9jYWxTdGFydC55ICsgZGlzcGxhY2VtZW50LnkpLFxuICAgICAgICBkeDogMCxcbiAgICAgICAgZHk6IDBcbiAgICAgIH0sIHsgb3JpZ2luYWxFdmVudDogZXZlbnQgfSk7XG5cbiAgICAgIGlmIChmYWxzZSA9PT0gZmlyZSgnc3RhcnQnKSkge1xuICAgICAgICByZXR1cm4gY2FuY2VsKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuYWN0aXZlID0gdHJ1ZTtcblxuICAgICAgLy8gdW5zZXQgc2VsZWN0aW9uIGFuZCByZW1lbWJlciBvbGQgc2VsZWN0aW9uXG4gICAgICAvLyB0aGUgcHJldmlvdXMgKG9sZCkgc2VsZWN0aW9uIHdpbGwgYWx3YXlzIHBhc3NlZFxuICAgICAgLy8gd2l0aCB0aGUgZXZlbnQgdmlhIHRoZSBldmVudC5wcmV2aW91c1NlbGVjdGlvbiBwcm9wZXJ0eVxuICAgICAgaWYgKCFjb250ZXh0LmtlZXBTZWxlY3Rpb24pIHtcbiAgICAgICAgcGF5bG9hZC5wcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbi5nZXQoKTtcbiAgICAgICAgc2VsZWN0aW9uLnNlbGVjdChudWxsKTtcbiAgICAgIH1cblxuICAgICAgLy8gYWxsb3cgY3VzdG9tIGN1cnNvclxuICAgICAgaWYgKGNvbnRleHQuY3Vyc29yKSB7XG4gICAgICAgIGN1cnNvclNldChjb250ZXh0LmN1cnNvcik7XG4gICAgICB9XG5cbiAgICAgIC8vIGluZGljYXRlIGRyYWdnaW5nIHZpYSBtYXJrZXIgb24gcm9vdCBlbGVtZW50XG4gICAgICBjYW52YXMuYWRkTWFya2VyKGNhbnZhcy5nZXRSb290RWxlbWVudCgpLCBEUkFHX0FDVElWRV9DTFMpO1xuICAgIH1cblxuICAgIHN0b3BQcm9wYWdhdGlvbihldmVudCk7XG5cbiAgICBpZiAoY29udGV4dC5hY3RpdmUpIHtcblxuICAgICAgLy8gdXBkYXRlIHBheWxvYWQgd2l0aCBhY3R1YWwgY29vcmRpbmF0ZXNcbiAgICAgIGFzc2lnbihwYXlsb2FkLCB7XG4gICAgICAgIHg6IHJvdW5kKGxvY2FsQ3VycmVudC54ICsgZGlzcGxhY2VtZW50LngpLFxuICAgICAgICB5OiByb3VuZChsb2NhbEN1cnJlbnQueSArIGRpc3BsYWNlbWVudC55KSxcbiAgICAgICAgZHg6IHJvdW5kKGxvY2FsRGVsdGEueCksXG4gICAgICAgIGR5OiByb3VuZChsb2NhbERlbHRhLnkpXG4gICAgICB9LCB7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50IH0pO1xuXG4gICAgICAvLyBlbWl0IG1vdmUgZXZlbnRcbiAgICAgIGZpcmUoJ21vdmUnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbmQoZXZlbnQpIHtcbiAgICB2YXIgcHJldmlvdXNDb250ZXh0LFxuICAgICAgICByZXR1cm5WYWx1ZSA9IHRydWU7XG5cbiAgICBpZiAoY29udGV4dC5hY3RpdmUpIHtcblxuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIGNvbnRleHQucGF5bG9hZC5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgLy8gc3VwcHJlc3Mgb3JpZ2luYWwgZXZlbnQgKGNsaWNrLCAuLi4pXG4gICAgICAgIC8vIGJlY2F1c2Ugd2UganVzdCBlbmRlZCBhIGRyYWcgb3BlcmF0aW9uXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbihldmVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGltcGxlbWVudGF0aW9ucyBtYXkgc3RvcCByZXN0b3JpbmcgdGhlXG4gICAgICAvLyBvcmlnaW5hbCBzdGF0ZSAoc2VsZWN0aW9ucywgLi4uKSBieSBwcmV2ZW50aW5nIHRoZVxuICAgICAgLy8gZW5kIGV2ZW50cyBkZWZhdWx0IGFjdGlvblxuICAgICAgcmV0dXJuVmFsdWUgPSBmaXJlKCdlbmQnKTtcbiAgICB9XG5cbiAgICBpZiAocmV0dXJuVmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICBmaXJlKCdyZWplY3RlZCcpO1xuICAgIH1cblxuICAgIHByZXZpb3VzQ29udGV4dCA9IGNsZWFudXAocmV0dXJuVmFsdWUgIT09IHRydWUpO1xuXG4gICAgLy8gbGFzdCBldmVudCB0byBiZSBmaXJlZCB3aGVuIGFsbCBkcmFnIG9wZXJhdGlvbnMgYXJlIGRvbmVcbiAgICAvLyBhdCB0aGlzIHBvaW50IGluIHRpbWUgbm8gZHJhZyBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MgYW55bW9yZVxuICAgIGZpcmUoJ2VuZGVkJywgcHJldmlvdXNDb250ZXh0KTtcbiAgfVxuXG5cbiAgLy8gY2FuY2VsIGFjdGl2ZSBkcmFnIG9wZXJhdGlvbiBpZiB0aGUgdXNlciBwcmVzc2VzXG4gIC8vIHRoZSBFU0Mga2V5IG9uIHRoZSBrZXlib2FyZFxuXG4gIGZ1bmN0aW9uIGNoZWNrQ2FuY2VsKGV2ZW50KSB7XG5cbiAgICBpZiAoZXZlbnQud2hpY2ggPT09IDI3KSB7XG4gICAgICBwcmV2ZW50RGVmYXVsdChldmVudCk7XG5cbiAgICAgIGNhbmNlbCgpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gcHJldmVudCBnaG9zdCBjbGljayB0aGF0IG1pZ2h0IG9jY3VyIGFmdGVyIGEgZmluaXNoZWRcbiAgLy8gZHJhZyBhbmQgZHJvcCBzZXNzaW9uXG5cbiAgZnVuY3Rpb24gdHJhcENsaWNrQW5kRW5kKGV2ZW50KSB7XG5cbiAgICB2YXIgdW50cmFwO1xuXG4gICAgLy8gdHJhcCB0aGUgY2xpY2sgaW4gY2FzZSB3ZSBhcmUgcGFydCBvZiBhbiBhY3RpdmVcbiAgICAvLyBkcmFnIG9wZXJhdGlvbi4gVGhpcyB3aWxsIGVmZmVjdGl2ZWx5IHByZXZlbnRcbiAgICAvLyB0aGUgZ2hvc3QgY2xpY2sgdGhhdCBjYW5ub3QgYmUgY2FuY2VsZWQgb3RoZXJ3aXNlLlxuICAgIGlmIChjb250ZXh0LmFjdGl2ZSkge1xuXG4gICAgICB1bnRyYXAgPSBpbnN0YWxsQ2xpY2tUcmFwKGV2ZW50QnVzKTtcblxuICAgICAgLy8gcmVtb3ZlIHRyYXAgYWZ0ZXIgbWluaW1hbCBkZWxheVxuICAgICAgc2V0VGltZW91dCh1bnRyYXAsIDQwMCk7XG5cbiAgICAgIC8vIHByZXZlbnQgZGVmYXVsdCBhY3Rpb24gKGNsaWNrKVxuICAgICAgcHJldmVudERlZmF1bHQoZXZlbnQpO1xuICAgIH1cblxuICAgIGVuZChldmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFwVG91Y2goZXZlbnQpIHtcbiAgICBtb3ZlKGV2ZW50KTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSB0aGUgZHJhZyBldmVudHMgaG92ZXIgKGRqcy5tb2RlbC5CYXNlKSBhbmQgaG92ZXJHZnggKFNuYXA8U1ZHRWxlbWVudD4pXG4gIC8vIHByb3BlcnRpZXMgZHVyaW5nIGhvdmVyIGFuZCBvdXQgYW5kIGZpcmUge3ByZWZpeH0uaG92ZXIgYW5kIHtwcmVmaXh9Lm91dCBwcm9wZXJ0aWVzXG4gIC8vIHJlc3BlY3RpdmVseVxuXG4gIGZ1bmN0aW9uIGhvdmVyKGV2ZW50KSB7XG4gICAgdmFyIHBheWxvYWQgPSBjb250ZXh0LnBheWxvYWQ7XG5cbiAgICBwYXlsb2FkLmhvdmVyR2Z4ID0gZXZlbnQuZ2Z4O1xuICAgIHBheWxvYWQuaG92ZXIgPSBldmVudC5lbGVtZW50O1xuXG4gICAgZmlyZSgnaG92ZXInKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG91dChldmVudCkge1xuICAgIGZpcmUoJ291dCcpO1xuXG4gICAgdmFyIHBheWxvYWQgPSBjb250ZXh0LnBheWxvYWQ7XG5cbiAgICBwYXlsb2FkLmhvdmVyR2Z4ID0gbnVsbDtcbiAgICBwYXlsb2FkLmhvdmVyID0gbnVsbDtcbiAgfVxuXG5cbiAgLy8gbGlmZS1jeWNsZSBtZXRob2RzXG5cbiAgZnVuY3Rpb24gY2FuY2VsKHJlc3RvcmUpIHtcbiAgICB2YXIgcHJldmlvdXNDb250ZXh0O1xuXG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHdhc0FjdGl2ZSA9IGNvbnRleHQuYWN0aXZlO1xuXG4gICAgaWYgKHdhc0FjdGl2ZSkge1xuICAgICAgZmlyZSgnY2FuY2VsJyk7XG4gICAgfVxuXG4gICAgcHJldmlvdXNDb250ZXh0ID0gY2xlYW51cChyZXN0b3JlKTtcblxuICAgIGlmICh3YXNBY3RpdmUpIHtcblxuICAgICAgLy8gbGFzdCBldmVudCB0byBiZSBmaXJlZCB3aGVuIGFsbCBkcmFnIG9wZXJhdGlvbnMgYXJlIGRvbmVcbiAgICAgIC8vIGF0IHRoaXMgcG9pbnQgaW4gdGltZSBubyBkcmFnIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyBhbnltb3JlXG4gICAgICBmaXJlKCdjYW5jZWxlZCcsIHByZXZpb3VzQ29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYW51cChyZXN0b3JlKSB7XG4gICAgdmFyIHByZXZpb3VzQ29udGV4dCxcbiAgICAgICAgZW5kRHJhZztcblxuICAgIGZpcmUoJ2NsZWFudXAnKTtcblxuICAgIC8vIHJlc2V0IGN1cnNvclxuICAgIGN1cnNvclVuc2V0KCk7XG5cbiAgICBpZiAoY29udGV4dC50cmFwQ2xpY2spIHtcbiAgICAgIGVuZERyYWcgPSB0cmFwQ2xpY2tBbmRFbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuZERyYWcgPSBlbmQ7XG4gICAgfVxuXG4gICAgLy8gcmVzZXQgZG9tIGxpc3RlbmVyc1xuICAgIGRvbUV2ZW50LnVuYmluZChkb2N1bWVudCwgJ21vdXNlbW92ZScsIG1vdmUpO1xuXG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAnZHJhZ3N0YXJ0JywgcHJldmVudERlZmF1bHQpO1xuICAgIGRvbUV2ZW50LnVuYmluZChkb2N1bWVudCwgJ3NlbGVjdHN0YXJ0JywgcHJldmVudERlZmF1bHQpO1xuXG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAnbW91c2Vkb3duJywgZW5kRHJhZywgdHJ1ZSk7XG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAnbW91c2V1cCcsIGVuZERyYWcsIHRydWUpO1xuXG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAna2V5dXAnLCBjaGVja0NhbmNlbCk7XG5cbiAgICBkb21FdmVudC51bmJpbmQoZG9jdW1lbnQsICd0b3VjaHN0YXJ0JywgdHJhcFRvdWNoLCB0cnVlKTtcbiAgICBkb21FdmVudC51bmJpbmQoZG9jdW1lbnQsICd0b3VjaGNhbmNlbCcsIGNhbmNlbCwgdHJ1ZSk7XG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAndG91Y2htb3ZlJywgbW92ZSwgdHJ1ZSk7XG4gICAgZG9tRXZlbnQudW5iaW5kKGRvY3VtZW50LCAndG91Y2hlbmQnLCBlbmQsIHRydWUpO1xuXG4gICAgZXZlbnRCdXMub2ZmKCdlbGVtZW50LmhvdmVyJywgaG92ZXIpO1xuICAgIGV2ZW50QnVzLm9mZignZWxlbWVudC5vdXQnLCBvdXQpO1xuXG4gICAgLy8gcmVtb3ZlIGRyYWcgbWFya2VyIG9uIHJvb3QgZWxlbWVudFxuICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoY2FudmFzLmdldFJvb3RFbGVtZW50KCksIERSQUdfQUNUSVZFX0NMUyk7XG5cbiAgICAvLyByZXN0b3JlIHNlbGVjdGlvbiwgdW5sZXNzIGl0IGhhcyBjaGFuZ2VkXG4gICAgdmFyIHByZXZpb3VzU2VsZWN0aW9uID0gY29udGV4dC5wYXlsb2FkLnByZXZpb3VzU2VsZWN0aW9uO1xuXG4gICAgaWYgKHJlc3RvcmUgIT09IGZhbHNlICYmIHByZXZpb3VzU2VsZWN0aW9uICYmICFzZWxlY3Rpb24uZ2V0KCkubGVuZ3RoKSB7XG4gICAgICByZXN0b3JlU2VsZWN0aW9uKHByZXZpb3VzU2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICBwcmV2aW91c0NvbnRleHQgPSBjb250ZXh0O1xuXG4gICAgY29udGV4dCA9IG51bGw7XG5cbiAgICByZXR1cm4gcHJldmlvdXNDb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYSBkcmFnIG9wZXJhdGlvbi5cbiAgICpcbiAgICogSWYgYGxvY2FsUG9zaXRpb25gIGlzIGdpdmVuLCBkcmFnIGV2ZW50cyB3aWxsIGJlIGVtaXR0ZWRcbiAgICogcmVsYXRpdmUgdG8gaXQuXG4gICAqXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudHxUb3VjaEV2ZW50fSBbZXZlbnRdXG4gICAqIEBwYXJhbSB7UG9pbnR9IFtsb2NhbFBvc2l0aW9uXSBhY3R1YWwgZGlhZ3JhbSBsb2NhbCBwb3NpdGlvbiB0aGlzIGRyYWcgb3BlcmF0aW9uIHNob3VsZCBzdGFydCBhdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICovXG4gIGZ1bmN0aW9uIGluaXQoZXZlbnQsIHJlbGF0aXZlVG8sIHByZWZpeCwgb3B0aW9ucykge1xuXG4gICAgLy8gb25seSBvbmUgZHJhZyBvcGVyYXRpb24gbWF5IGJlIGFjdGl2ZSwgYXQgYSB0aW1lXG4gICAgaWYgKGNvbnRleHQpIHtcbiAgICAgIGNhbmNlbChmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZWxhdGl2ZVRvID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucyA9IHByZWZpeDtcbiAgICAgIHByZWZpeCA9IHJlbGF0aXZlVG87XG4gICAgICByZWxhdGl2ZVRvID0gbnVsbDtcbiAgICB9XG5cbiAgICBvcHRpb25zID0gYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyB8fCB7fSk7XG5cbiAgICB2YXIgZGF0YSA9IG9wdGlvbnMuZGF0YSB8fCB7fSxcbiAgICAgICAgb3JpZ2luYWxFdmVudCxcbiAgICAgICAgZ2xvYmFsU3RhcnQsXG4gICAgICAgIGxvY2FsU3RhcnQsXG4gICAgICAgIGVuZERyYWcsXG4gICAgICAgIGlzVG91Y2g7XG5cbiAgICBpZiAob3B0aW9ucy50cmFwQ2xpY2spIHtcbiAgICAgIGVuZERyYWcgPSB0cmFwQ2xpY2tBbmRFbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuZERyYWcgPSBlbmQ7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBvcmlnaW5hbEV2ZW50ID0gZ2V0T3JpZ2luYWwoZXZlbnQpIHx8IGV2ZW50O1xuICAgICAgZ2xvYmFsU3RhcnQgPSB0b1BvaW50KGV2ZW50KTtcblxuICAgICAgc3RvcFByb3BhZ2F0aW9uKGV2ZW50KTtcblxuICAgICAgLy8gcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgZHJhZ2dpbmcgYmVoYXZpb3JcbiAgICAgIGlmIChvcmlnaW5hbEV2ZW50LnR5cGUgPT09ICdkcmFnc3RhcnQnKSB7XG4gICAgICAgIHByZXZlbnREZWZhdWx0KG9yaWdpbmFsRXZlbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcmlnaW5hbEV2ZW50ID0gbnVsbDtcbiAgICAgIGdsb2JhbFN0YXJ0ID0geyB4OiAwLCB5OiAwIH07XG4gICAgfVxuXG4gICAgbG9jYWxTdGFydCA9IHRvTG9jYWxQb2ludChnbG9iYWxTdGFydCk7XG5cbiAgICBpZiAoIXJlbGF0aXZlVG8pIHtcbiAgICAgIHJlbGF0aXZlVG8gPSBsb2NhbFN0YXJ0O1xuICAgIH1cblxuICAgIGlzVG91Y2ggPSBpc1RvdWNoRXZlbnQob3JpZ2luYWxFdmVudCk7XG5cbiAgICBjb250ZXh0ID0gYXNzaWduKHtcbiAgICAgIHByZWZpeDogcHJlZml4LFxuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIHBheWxvYWQ6IHt9LFxuICAgICAgZ2xvYmFsU3RhcnQ6IGdsb2JhbFN0YXJ0LFxuICAgICAgZGlzcGxhY2VtZW50OiBkZWx0YVBvcyhyZWxhdGl2ZVRvLCBsb2NhbFN0YXJ0KSxcbiAgICAgIGxvY2FsU3RhcnQ6IGxvY2FsU3RhcnQsXG4gICAgICBpc1RvdWNoOiBpc1RvdWNoXG4gICAgfSwgb3B0aW9ucyk7XG5cbiAgICAvLyBza2lwIGRvbSByZWdpc3RyYXRpb24gaWYgdHJpZ2dlclxuICAgIC8vIGlzIHNldCB0byBtYW51YWwgKGR1cmluZyB0ZXN0aW5nKVxuICAgIGlmICghb3B0aW9ucy5tYW51YWwpIHtcblxuICAgICAgLy8gYWRkIGRvbSBsaXN0ZW5lcnNcblxuICAgICAgaWYgKGlzVG91Y2gpIHtcbiAgICAgICAgZG9tRXZlbnQuYmluZChkb2N1bWVudCwgJ3RvdWNoc3RhcnQnLCB0cmFwVG91Y2gsIHRydWUpO1xuICAgICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAndG91Y2hjYW5jZWwnLCBjYW5jZWwsIHRydWUpO1xuICAgICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAndG91Y2htb3ZlJywgbW92ZSwgdHJ1ZSk7XG4gICAgICAgIGRvbUV2ZW50LmJpbmQoZG9jdW1lbnQsICd0b3VjaGVuZCcsIGVuZCwgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIC8vIGFzc3VtZSB3ZSB1c2UgdGhlIG1vdXNlIHRvIGludGVyYWN0IHBlciBkZWZhdWx0XG4gICAgICAgIGRvbUV2ZW50LmJpbmQoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCBtb3ZlKTtcblxuICAgICAgICAvLyBwcmV2ZW50IGRlZmF1bHQgYnJvd3NlciBkcmFnIGFuZCB0ZXh0IHNlbGVjdGlvbiBiZWhhdmlvclxuICAgICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAnZHJhZ3N0YXJ0JywgcHJldmVudERlZmF1bHQpO1xuICAgICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAnc2VsZWN0c3RhcnQnLCBwcmV2ZW50RGVmYXVsdCk7XG5cbiAgICAgICAgZG9tRXZlbnQuYmluZChkb2N1bWVudCwgJ21vdXNlZG93bicsIGVuZERyYWcsIHRydWUpO1xuICAgICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAnbW91c2V1cCcsIGVuZERyYWcsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAna2V5dXAnLCBjaGVja0NhbmNlbCk7XG5cbiAgICAgIGV2ZW50QnVzLm9uKCdlbGVtZW50LmhvdmVyJywgaG92ZXIpO1xuICAgICAgZXZlbnRCdXMub24oJ2VsZW1lbnQub3V0Jywgb3V0KTtcbiAgICB9XG5cbiAgICBmaXJlKCdpbml0Jyk7XG5cbiAgICBpZiAob3B0aW9ucy5hdXRvQWN0aXZhdGUpIHtcbiAgICAgIG1vdmUoZXZlbnQsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNhbmNlbCBvbiBkaWFncmFtIGRlc3RydWN0aW9uXG4gIGV2ZW50QnVzLm9uKCdkaWFncmFtLmRlc3Ryb3knLCBjYW5jZWwpO1xuXG5cbiAgLy8gQVBJXG5cbiAgdGhpcy5pbml0ID0gaW5pdDtcbiAgdGhpcy5tb3ZlID0gbW92ZTtcbiAgdGhpcy5ob3ZlciA9IGhvdmVyO1xuICB0aGlzLm91dCA9IG91dDtcbiAgdGhpcy5lbmQgPSBlbmQ7XG5cbiAgdGhpcy5jYW5jZWwgPSBjYW5jZWw7XG5cbiAgLy8gZm9yIGludHJvc3BlY3Rpb25cblxuICB0aGlzLmNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29udGV4dDtcbiAgfTtcblxuICB0aGlzLnNldE9wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgYXNzaWduKGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgfTtcbn1cblxuRHJhZ2dpbmcuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdzZWxlY3Rpb24nLFxuICAnZWxlbWVudFJlZ2lzdHJ5J1xuXTtcbiIsImltcG9ydCB7XG4gIGNsb3Nlc3QgYXMgZG9tQ2xvc2VzdFxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHtcbiAgdG9Qb2ludFxufSBmcm9tICcuLi8uLi91dGlsL0V2ZW50JztcblxudmFyIEhJR0hfUFJJT1JJVFkgPSAxNTAwO1xuXG5cbi8qKlxuICogQnJvd3NlcnMgbWF5IHN3YWxsb3cgY2VydGFpbiBldmVudHMgKGhvdmVyLCBvdXQgLi4uKSBpZiB1c2VycyBhcmUgdG9cbiAqIGZhc3Qgd2l0aCB0aGUgbW91c2UuXG4gKlxuICogQHNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc0NDg0Njgvd2h5LWNhbnQtaS1yZWxpYWJseS1jYXB0dXJlLWEtbW91c2VvdXQtZXZlbnRcbiAqXG4gKiBUaGUgZml4IGltcGxlbWVudGVkIGluIHRoaXMgY29tcG9uZW50IGVuc3VyZSB0aGF0IHdlXG4gKlxuICogMSkgaGF2ZSBhIGhvdmVyIHN0YXRlIGFmdGVyIGEgc3VjY2Vzc2Z1bCBkcmFnLm1vdmUgZXZlbnRcbiAqIDIpIGhhdmUgYW4gb3V0IGV2ZW50IHdoZW4gZHJhZ2dpbmcgbGVhdmVzIGFuIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtEcmFnZ2luZ30gZHJhZ2dpbmdcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSG92ZXJGaXgoZXZlbnRCdXMsIGRyYWdnaW5nLCBlbGVtZW50UmVnaXN0cnkpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLyoqXG4gICAqIE1ha2Ugc3VyZSB3ZSBhcmUgZ29kIGRhbW4gaG92ZXJpbmchXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGRyYWdnaW5nIGV2ZW50XG4gICAqL1xuICBmdW5jdGlvbiBlbnN1cmVIb3ZlcihldmVudCkge1xuXG4gICAgaWYgKGV2ZW50LmhvdmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG9yaWdpbmFsRXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50O1xuXG4gICAgdmFyIGdmeCA9IHNlbGYuX2ZpbmRUYXJnZXRHZngob3JpZ2luYWxFdmVudCk7XG5cbiAgICB2YXIgZWxlbWVudCA9IGdmeCAmJiBlbGVtZW50UmVnaXN0cnkuZ2V0KGdmeCk7XG5cbiAgICBpZiAoZ2Z4ICYmIGVsZW1lbnQpIHtcblxuICAgICAgLy8gMSkgY2FuY2VsIGN1cnJlbnQgbW91c2Vtb3ZlXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgLy8gMikgZW1pdCBmYWtlIGhvdmVyIGZvciBuZXcgdGFyZ2V0XG4gICAgICBkcmFnZ2luZy5ob3Zlcih7IGVsZW1lbnQ6IGVsZW1lbnQsIGdmeDogZ2Z4IH0pO1xuXG4gICAgICAvLyAzKSByZS10cmlnZ2VyIG1vdmUgZXZlbnRcbiAgICAgIGRyYWdnaW5nLm1vdmUob3JpZ2luYWxFdmVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdlIHdhaXQgZm9yIGEgc3BlY2lmaWMgc2VxdWVuY2Ugb2YgZXZlbnRzIGJlZm9yZVxuICAgKiBlbWl0dGluZyBhIGZha2UgZHJhZy5ob3ZlciBldmVudC5cbiAgICpcbiAgICogRXZlbnQgU2VxdWVuY2U6XG4gICAqXG4gICAqIGRyYWcuc3RhcnRcbiAgICogZHJhZy5tb3ZlID4+IGVuc3VyZSB3ZSBhcmUgaG92ZXJpbmdcbiAgICovXG4gIGV2ZW50QnVzLm9uKCdkcmFnLnN0YXJ0JywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIGV2ZW50QnVzLm9uY2UoJ2RyYWcubW92ZScsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICAgIGVuc3VyZUhvdmVyKGV2ZW50KTtcblxuICAgIH0pO1xuXG4gIH0pO1xuXG5cbiAgLyoqXG4gICAqIFdlIG1ha2Ugc3VyZSB0aGF0IGRyYWcub3V0IGlzIGFsd2F5cyBmaXJlZCwgZXZlbiBpZiB0aGVcbiAgICogYnJvd3NlciBzd2FsbG93cyBhbiBlbGVtZW50Lm91dCBldmVudC5cbiAgICpcbiAgICogRXZlbnQgc2VxdWVuY2U6XG4gICAqXG4gICAqIGRyYWcuaG92ZXJcbiAgICogKGVsZW1lbnQub3V0ID4+IHNvbWV0aW1lcyBzd2FsbG93ZWQpXG4gICAqIGVsZW1lbnQuaG92ZXIgPj4gZW5zdXJlIHdlIGZpcmVkIGRyYWcub3V0XG4gICAqL1xuICBldmVudEJ1cy5vbignZHJhZy5pbml0JywgZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgaG92ZXIsIGhvdmVyR2Z4O1xuXG4gICAgZnVuY3Rpb24gc2V0RHJhZ0hvdmVyKGV2ZW50KSB7XG4gICAgICBob3ZlciA9IGV2ZW50LmhvdmVyO1xuICAgICAgaG92ZXJHZnggPSBldmVudC5ob3ZlckdmeDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnNldEhvdmVyKCkge1xuICAgICAgaG92ZXIgPSBudWxsO1xuICAgICAgaG92ZXJHZnggPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuc3VyZU91dCgpIHtcblxuICAgICAgaWYgKCFob3Zlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBlbGVtZW50ID0gaG92ZXIsXG4gICAgICAgICAgZ2Z4ID0gaG92ZXJHZng7XG5cbiAgICAgIGhvdmVyID0gbnVsbDtcbiAgICAgIGhvdmVyR2Z4ID0gbnVsbDtcblxuICAgICAgLy8gZW1pdCBzeW50aGV0aWMgb3V0IGV2ZW50XG4gICAgICBkcmFnZ2luZy5vdXQoe1xuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICBnZng6IGdmeFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXZlbnRCdXMub24oJ2RyYWcuaG92ZXInLCBzZXREcmFnSG92ZXIpO1xuICAgIGV2ZW50QnVzLm9uKCdlbGVtZW50Lm91dCcsIHVuc2V0SG92ZXIpO1xuICAgIGV2ZW50QnVzLm9uKCdlbGVtZW50LmhvdmVyJywgSElHSF9QUklPUklUWSwgZW5zdXJlT3V0KTtcblxuICAgIGV2ZW50QnVzLm9uY2UoJ2RyYWcuY2xlYW51cCcsIGZ1bmN0aW9uKCkge1xuICAgICAgZXZlbnRCdXMub2ZmKCdkcmFnLmhvdmVyJywgc2V0RHJhZ0hvdmVyKTtcbiAgICAgIGV2ZW50QnVzLm9mZignZWxlbWVudC5vdXQnLCB1bnNldEhvdmVyKTtcbiAgICAgIGV2ZW50QnVzLm9mZignZWxlbWVudC5ob3ZlcicsIGVuc3VyZU91dCk7XG4gICAgfSk7XG5cbiAgfSk7XG5cbiAgdGhpcy5fZmluZFRhcmdldEdmeCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHBvc2l0aW9uLFxuICAgICAgICB0YXJnZXQ7XG5cbiAgICBpZiAoIShldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcG9zaXRpb24gPSB0b1BvaW50KGV2ZW50KTtcblxuICAgIC8vIGRhbW4gZXhwZW5zaXZlIG9wZXJhdGlvbiwgb3VjaCFcbiAgICB0YXJnZXQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpO1xuXG4gICAgcmV0dXJuIGdldEdmeCh0YXJnZXQpO1xuICB9O1xuXG59XG5cbkhvdmVyRml4LiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdkcmFnZ2luZycsXG4gICdlbGVtZW50UmVnaXN0cnknXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldEdmeCh0YXJnZXQpIHtcbiAgcmV0dXJuIGRvbUNsb3Nlc3QodGFyZ2V0LCAnc3ZnLCAuZGpzLWVsZW1lbnQnLCB0cnVlKTtcbn0iLCJpbXBvcnQgU2VsZWN0aW9uTW9kdWxlIGZyb20gJy4uL3NlbGVjdGlvbic7XG5cbmltcG9ydCBEcmFnZ2luZyBmcm9tICcuL0RyYWdnaW5nJztcbmltcG9ydCBIb3ZlckZpeCBmcm9tICcuL0hvdmVyRml4JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogW1xuICAgICdob3ZlckZpeCdcbiAgXSxcbiAgX19kZXBlbmRzX186IFtcbiAgICBTZWxlY3Rpb25Nb2R1bGVcbiAgXSxcbiAgZHJhZ2dpbmc6IFsgJ3R5cGUnLCBEcmFnZ2luZyBdLFxuICBob3ZlckZpeDogWyAndHlwZScsIEhvdmVyRml4IF1cbn07IiwiaW1wb3J0IHtcbiAgZm9yRWFjaCxcbiAgaXNBcnJheVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciBOT1RfUkVHSVNURVJFRF9FUlJPUiA9ICdpcyBub3QgYSByZWdpc3RlcmVkIGFjdGlvbicsXG4gICAgSVNfUkVHSVNURVJFRF9FUlJPUiA9ICdpcyBhbHJlYWR5IHJlZ2lzdGVyZWQnO1xuXG5cbi8qKlxuICogQW4gaW50ZXJmYWNlIHRoYXQgcHJvdmlkZXMgYWNjZXNzIHRvIG1vZGVsaW5nIGFjdGlvbnMgYnkgZGVjb3VwbGluZ1xuICogdGhlIG9uZSB3aG8gcmVxdWVzdHMgdGhlIGFjdGlvbiB0byBiZSB0cmlnZ2VyZWQgYW5kIHRoZSB0cmlnZ2VyIGl0c2VsZi5cbiAqXG4gKiBJdCdzIHBvc3NpYmxlIHRvIGFkZCBuZXcgYWN0aW9ucyBieSByZWdpc3RlcmluZyB0aGVtIHdpdGggwrRyZWdpc3RlckFjdGlvbsK0XG4gKiBhbmQgbGlrZXdpc2UgdW5yZWdpc3RlciBleGlzdGluZyBvbmVzIHdpdGggwrR1bnJlZ2lzdGVyQWN0aW9uwrQuXG4gKlxuICpcbiAqICMjIExpZmUtQ3ljbGUgYW5kIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBUaGUgZWRpdG9yIGFjdGlvbnMgd2lsbCB3YWl0IGZvciBkaWFncmFtIGluaXRpYWxpemF0aW9uIGJlZm9yZVxuICogcmVnaXN0ZXJpbmcgZGVmYXVsdCBhY3Rpb25zIF9hbmRfIGZpcmluZyBhbiBgZWRpdG9yQWN0aW9ucy5pbml0YCBldmVudC5cbiAqXG4gKiBJbnRlcmVzdGVkIHBhcnRpZXMgbWF5IGxpc3RlbiB0byB0aGUgYGVkaXRvckFjdGlvbnMuaW5pdGAgZXZlbnQgd2l0aFxuICogbG93IHByaW9yaXR5IHRvIGNoZWNrLCB3aGljaCBhY3Rpb25zIGdvdCByZWdpc3RlcmVkLiBPdGhlciBjb21wb25lbnRzXG4gKiBtYXkgdXNlIHRoZSBldmVudCB0byByZWdpc3RlciB0aGVpciBvd24gYWN0aW9ucyB2aWEgYHJlZ2lzdGVyQWN0aW9uYC5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRWRpdG9yQWN0aW9ucyhldmVudEJ1cywgaW5qZWN0b3IpIHtcblxuICAvLyBpbml0aWFsaXplIGFjdGlvbnNcbiAgdGhpcy5fYWN0aW9ucyA9IHt9O1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBldmVudEJ1cy5vbignZGlhZ3JhbS5pbml0JywgZnVuY3Rpb24oKSB7XG5cbiAgICAvLyBhbGwgZGlhZ3JhbSBtb2R1bGVzIGdvdCBsb2FkZWQ7IGNoZWNrIHdoaWNoIG9uZXNcbiAgICAvLyBhcmUgYXZhaWxhYmxlIGFuZCByZWdpc3RlciB0aGUgcmVzcGVjdGl2ZSBkZWZhdWx0IGFjdGlvbnNcbiAgICBzZWxmLl9yZWdpc3RlckRlZmF1bHRBY3Rpb25zKGluamVjdG9yKTtcblxuICAgIC8vIGFzayBpbnRlcmVzdGVkIHBhcnRpZXMgdG8gcmVnaXN0ZXIgYXZhaWxhYmxlIGVkaXRvclxuICAgIC8vIGFjdGlvbnMgb24gZGlhZ3JhbSBpbml0aWFsaXphdGlvblxuICAgIGV2ZW50QnVzLmZpcmUoJ2VkaXRvckFjdGlvbnMuaW5pdCcsIHtcbiAgICAgIGVkaXRvckFjdGlvbnM6IHNlbGZcbiAgICB9KTtcbiAgfSk7XG5cbn1cblxuRWRpdG9yQWN0aW9ucy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnaW5qZWN0b3InXG5dO1xuXG4vKipcbiAqIFJlZ2lzdGVyIGRlZmF1bHQgYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICovXG5FZGl0b3JBY3Rpb25zLnByb3RvdHlwZS5fcmVnaXN0ZXJEZWZhdWx0QWN0aW9ucyA9IGZ1bmN0aW9uKGluamVjdG9yKSB7XG5cbiAgLy8gKDEpIHJldHJpZXZlIG9wdGlvbmFsIGNvbXBvbmVudHMgdG8gaW50ZWdyYXRlIHdpdGhcblxuICB2YXIgY29tbWFuZFN0YWNrID0gaW5qZWN0b3IuZ2V0KCdjb21tYW5kU3RhY2snLCBmYWxzZSk7XG4gIHZhciBtb2RlbGluZyA9IGluamVjdG9yLmdldCgnbW9kZWxpbmcnLCBmYWxzZSk7XG4gIHZhciBzZWxlY3Rpb24gPSBpbmplY3Rvci5nZXQoJ3NlbGVjdGlvbicsIGZhbHNlKTtcbiAgdmFyIHpvb21TY3JvbGwgPSBpbmplY3Rvci5nZXQoJ3pvb21TY3JvbGwnLCBmYWxzZSk7XG4gIHZhciBjb3B5UGFzdGUgPSBpbmplY3Rvci5nZXQoJ2NvcHlQYXN0ZScsIGZhbHNlKTtcbiAgdmFyIGNhbnZhcyA9IGluamVjdG9yLmdldCgnY2FudmFzJywgZmFsc2UpO1xuICB2YXIgcnVsZXMgPSBpbmplY3Rvci5nZXQoJ3J1bGVzJywgZmFsc2UpO1xuICB2YXIga2V5Ym9hcmRNb3ZlID0gaW5qZWN0b3IuZ2V0KCdrZXlib2FyZE1vdmUnLCBmYWxzZSk7XG4gIHZhciBrZXlib2FyZE1vdmVTZWxlY3Rpb24gPSBpbmplY3Rvci5nZXQoJ2tleWJvYXJkTW92ZVNlbGVjdGlvbicsIGZhbHNlKTtcblxuICAvLyAoMikgY2hlY2sgY29tcG9uZW50cyBhbmQgcmVnaXN0ZXIgYWN0aW9uc1xuXG4gIGlmIChjb21tYW5kU3RhY2spIHtcbiAgICB0aGlzLnJlZ2lzdGVyKCd1bmRvJywgZnVuY3Rpb24oKSB7XG4gICAgICBjb21tYW5kU3RhY2sudW5kbygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3RlcigncmVkbycsIGZ1bmN0aW9uKCkge1xuICAgICAgY29tbWFuZFN0YWNrLnJlZG8oKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChjb3B5UGFzdGUgJiYgc2VsZWN0aW9uKSB7XG4gICAgdGhpcy5yZWdpc3RlcignY29weScsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHNlbGVjdGVkRWxlbWVudHMgPSBzZWxlY3Rpb24uZ2V0KCk7XG5cbiAgICAgIGNvcHlQYXN0ZS5jb3B5KHNlbGVjdGVkRWxlbWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGNvcHlQYXN0ZSkge1xuICAgIHRoaXMucmVnaXN0ZXIoJ3Bhc3RlJywgZnVuY3Rpb24oKSB7XG4gICAgICBjb3B5UGFzdGUucGFzdGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh6b29tU2Nyb2xsKSB7XG4gICAgdGhpcy5yZWdpc3Rlcignc3RlcFpvb20nLCBmdW5jdGlvbihvcHRzKSB7XG4gICAgICB6b29tU2Nyb2xsLnN0ZXBab29tKG9wdHMudmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGNhbnZhcykge1xuICAgIHRoaXMucmVnaXN0ZXIoJ3pvb20nLCBmdW5jdGlvbihvcHRzKSB7XG4gICAgICBjYW52YXMuem9vbShvcHRzLnZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChtb2RlbGluZyAmJiBzZWxlY3Rpb24gJiYgcnVsZXMpIHtcbiAgICB0aGlzLnJlZ2lzdGVyKCdyZW1vdmVTZWxlY3Rpb24nLCBmdW5jdGlvbigpIHtcblxuICAgICAgdmFyIHNlbGVjdGVkRWxlbWVudHMgPSBzZWxlY3Rpb24uZ2V0KCk7XG5cbiAgICAgIGlmICghc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgYWxsb3dlZCA9IHJ1bGVzLmFsbG93ZWQoJ2VsZW1lbnRzLmRlbGV0ZScsIHsgZWxlbWVudHM6IHNlbGVjdGVkRWxlbWVudHMgfSksXG4gICAgICAgICAgcmVtb3ZhYmxlRWxlbWVudHM7XG5cbiAgICAgIGlmIChhbGxvd2VkID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0FycmF5KGFsbG93ZWQpKSB7XG4gICAgICAgIHJlbW92YWJsZUVsZW1lbnRzID0gYWxsb3dlZDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZW1vdmFibGVFbGVtZW50cyA9IHNlbGVjdGVkRWxlbWVudHM7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZW1vdmFibGVFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgbW9kZWxpbmcucmVtb3ZlRWxlbWVudHMocmVtb3ZhYmxlRWxlbWVudHMuc2xpY2UoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoa2V5Ym9hcmRNb3ZlKSB7XG4gICAgdGhpcy5yZWdpc3RlcignbW92ZUNhbnZhcycsIGZ1bmN0aW9uKG9wdHMpIHtcbiAgICAgIGtleWJvYXJkTW92ZS5tb3ZlQ2FudmFzKG9wdHMpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGtleWJvYXJkTW92ZVNlbGVjdGlvbikge1xuICAgIHRoaXMucmVnaXN0ZXIoJ21vdmVTZWxlY3Rpb24nLCBmdW5jdGlvbihvcHRzKSB7XG4gICAgICBrZXlib2FyZE1vdmVTZWxlY3Rpb24ubW92ZVNlbGVjdGlvbihvcHRzLmRpcmVjdGlvbiwgb3B0cy5hY2NlbGVyYXRlZCk7XG4gICAgfSk7XG4gIH1cblxufTtcblxuXG4vKipcbiAqIFRyaWdnZXJzIGEgcmVnaXN0ZXJlZCBhY3Rpb25cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGFjdGlvblxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRzXG4gKlxuICogQHJldHVybiB7VW5rbm93bn0gUmV0dXJucyB3aGF0IHRoZSByZWdpc3RlcmVkIGxpc3RlbmVyIHJldHVybnNcbiAqL1xuRWRpdG9yQWN0aW9ucy5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uKGFjdGlvbiwgb3B0cykge1xuICBpZiAoIXRoaXMuX2FjdGlvbnNbYWN0aW9uXSkge1xuICAgIHRocm93IGVycm9yKGFjdGlvbiwgTk9UX1JFR0lTVEVSRURfRVJST1IpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2FjdGlvbnNbYWN0aW9uXShvcHRzKTtcbn07XG5cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBjb2xsZWN0aW9ucyBvZiBhY3Rpb25zLlxuICogVGhlIGtleSBvZiB0aGUgb2JqZWN0IHdpbGwgYmUgdGhlIG5hbWUgb2YgdGhlIGFjdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogwrTCtMK0XG4gKiB2YXIgYWN0aW9ucyA9IHtcbiAqICAgc3BhY2VUb29sOiBmdW5jdGlvbigpIHtcbiAqICAgICBzcGFjZVRvb2wuYWN0aXZhdGVTZWxlY3Rpb24oKTtcbiAqICAgfSxcbiAqICAgbGFzc29Ub29sOiBmdW5jdGlvbigpIHtcbiAqICAgICBsYXNzb1Rvb2wuYWN0aXZhdGVTZWxlY3Rpb24oKTtcbiAqICAgfVxuICogXTtcbiAqXG4gKiBlZGl0b3JBY3Rpb25zLnJlZ2lzdGVyKGFjdGlvbnMpO1xuICpcbiAqIGVkaXRvckFjdGlvbnMuaXNSZWdpc3RlcmVkKCdzcGFjZVRvb2wnKTsgLy8gdHJ1ZVxuICogwrTCtMK0XG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBhY3Rpb25zXG4gKi9cbkVkaXRvckFjdGlvbnMucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24oYWN0aW9ucywgbGlzdGVuZXIpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGlmICh0eXBlb2YgYWN0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVnaXN0ZXJBY3Rpb24oYWN0aW9ucywgbGlzdGVuZXIpO1xuICB9XG5cbiAgZm9yRWFjaChhY3Rpb25zLCBmdW5jdGlvbihsaXN0ZW5lciwgYWN0aW9uKSB7XG4gICAgc2VsZi5fcmVnaXN0ZXJBY3Rpb24oYWN0aW9uLCBsaXN0ZW5lcik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBsaXN0ZW5lciB0byBhbiBhY3Rpb24ga2V5XG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBhY3Rpb25cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBsaXN0ZW5lclxuICovXG5FZGl0b3JBY3Rpb25zLnByb3RvdHlwZS5fcmVnaXN0ZXJBY3Rpb24gPSBmdW5jdGlvbihhY3Rpb24sIGxpc3RlbmVyKSB7XG4gIGlmICh0aGlzLmlzUmVnaXN0ZXJlZChhY3Rpb24pKSB7XG4gICAgdGhyb3cgZXJyb3IoYWN0aW9uLCBJU19SRUdJU1RFUkVEX0VSUk9SKTtcbiAgfVxuXG4gIHRoaXMuX2FjdGlvbnNbYWN0aW9uXSA9IGxpc3RlbmVyO1xufTtcblxuLyoqXG4gKiBVbnJlZ2lzdGVyIGFuIGV4aXN0aW5nIGFjdGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb25cbiAqL1xuRWRpdG9yQWN0aW9ucy5wcm90b3R5cGUudW5yZWdpc3RlciA9IGZ1bmN0aW9uKGFjdGlvbikge1xuICBpZiAoIXRoaXMuaXNSZWdpc3RlcmVkKGFjdGlvbikpIHtcbiAgICB0aHJvdyBlcnJvcihhY3Rpb24sIE5PVF9SRUdJU1RFUkVEX0VSUk9SKTtcbiAgfVxuXG4gIHRoaXMuX2FjdGlvbnNbYWN0aW9uXSA9IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGFjdGlvbnMgdGhhdCBhcmUgY3VycmVudGx5IHJlZ2lzdGVyZWRcbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbkVkaXRvckFjdGlvbnMucHJvdG90eXBlLmdldEFjdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2FjdGlvbnMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2V0aGVyIHRoZSBnaXZlbiBhY3Rpb24gaXMgcmVnaXN0ZXJlZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb25cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5FZGl0b3JBY3Rpb25zLnByb3RvdHlwZS5pc1JlZ2lzdGVyZWQgPSBmdW5jdGlvbihhY3Rpb24pIHtcbiAgcmV0dXJuICEhdGhpcy5fYWN0aW9uc1thY3Rpb25dO1xufTtcblxuXG5mdW5jdGlvbiBlcnJvcihhY3Rpb24sIG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBFcnJvcihhY3Rpb24gKyAnICcgKyBtZXNzYWdlKTtcbn1cbiIsImltcG9ydCBFZGl0b3JBY3Rpb25zIGZyb20gJy4vRWRpdG9yQWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ2VkaXRvckFjdGlvbnMnIF0sXG4gIGVkaXRvckFjdGlvbnM6IFsgJ3R5cGUnLCBFZGl0b3JBY3Rpb25zIF1cbn07XG4iLCJ2YXIgTUFSS0VSX09LID0gJ2Nvbm5lY3Qtb2snLFxuICAgIE1BUktFUl9OT1RfT0sgPSAnY29ubmVjdC1ub3Qtb2snO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RHJhZ2dpbmd9IGRyYWdnaW5nXG4gKiBAcGFyYW0ge0Nvbm5lY3R9IGNvbm5lY3RcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7VG9vbE1hbmFnZXJ9IHRvb2xNYW5hZ2VyXG4gKiBAcGFyYW0ge1J1bGVzfSBydWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHbG9iYWxDb25uZWN0KFxuICAgIGV2ZW50QnVzLCBkcmFnZ2luZywgY29ubmVjdCxcbiAgICBjYW52YXMsIHRvb2xNYW5hZ2VyLCBydWxlcykge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLl9kcmFnZ2luZyA9IGRyYWdnaW5nO1xuICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xuXG4gIHRvb2xNYW5hZ2VyLnJlZ2lzdGVyVG9vbCgnZ2xvYmFsLWNvbm5lY3QnLCB7XG4gICAgdG9vbDogJ2dsb2JhbC1jb25uZWN0JyxcbiAgICBkcmFnZ2luZzogJ2dsb2JhbC1jb25uZWN0LmRyYWcnXG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdnbG9iYWwtY29ubmVjdC5ob3ZlcicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzdGFydFRhcmdldCA9IGV2ZW50LmhvdmVyO1xuXG4gICAgdmFyIGNhblN0YXJ0Q29ubmVjdCA9IGNvbnRleHQuY2FuU3RhcnRDb25uZWN0ID0gc2VsZi5jYW5TdGFydENvbm5lY3Qoc3RhcnRUYXJnZXQpO1xuXG4gICAgLy8gc2ltcGx5IGlnbm9yZSBob3ZlclxuICAgIGlmIChjYW5TdGFydENvbm5lY3QgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnN0YXJ0VGFyZ2V0ID0gc3RhcnRUYXJnZXQ7XG5cbiAgICBjYW52YXMuYWRkTWFya2VyKHN0YXJ0VGFyZ2V0LCBjYW5TdGFydENvbm5lY3QgPyBNQVJLRVJfT0sgOiBNQVJLRVJfTk9UX09LKTtcbiAgfSk7XG5cblxuICBldmVudEJ1cy5vbihbICdnbG9iYWwtY29ubmVjdC5vdXQnLCAnZ2xvYmFsLWNvbm5lY3QuY2xlYW51cCcgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgc3RhcnRUYXJnZXQgPSBldmVudC5jb250ZXh0LnN0YXJ0VGFyZ2V0LFxuICAgICAgICBjYW5TdGFydENvbm5lY3QgPSBldmVudC5jb250ZXh0LmNhblN0YXJ0Q29ubmVjdDtcblxuICAgIGlmIChzdGFydFRhcmdldCkge1xuICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihzdGFydFRhcmdldCwgY2FuU3RhcnRDb25uZWN0ID8gTUFSS0VSX09LIDogTUFSS0VSX05PVF9PSyk7XG4gICAgfVxuICB9KTtcblxuXG4gIGV2ZW50QnVzLm9uKFsgJ2dsb2JhbC1jb25uZWN0LmVuZGVkJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc3RhcnRUYXJnZXQgPSBjb250ZXh0LnN0YXJ0VGFyZ2V0LFxuICAgICAgICBzdGFydFBvc2l0aW9uID0ge1xuICAgICAgICAgIHg6IGV2ZW50LngsXG4gICAgICAgICAgeTogZXZlbnQueVxuICAgICAgICB9O1xuXG4gICAgdmFyIGNhblN0YXJ0Q29ubmVjdCA9IHNlbGYuY2FuU3RhcnRDb25uZWN0KHN0YXJ0VGFyZ2V0KTtcblxuICAgIGlmICghY2FuU3RhcnRDb25uZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnRCdXMub25jZSgnZWxlbWVudC5vdXQnLCBmdW5jdGlvbigpIHtcbiAgICAgIGV2ZW50QnVzLm9uY2UoWyAnY29ubmVjdC5lbmRlZCcsICdjb25uZWN0LmNhbmNlbGVkJyBdLCBmdW5jdGlvbigpIHtcbiAgICAgICAgZXZlbnRCdXMuZmlyZSgnZ2xvYmFsLWNvbm5lY3QuZHJhZy5lbmRlZCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbm5lY3Quc3RhcnQobnVsbCwgc3RhcnRUYXJnZXQsIHN0YXJ0UG9zaXRpb24pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbn1cblxuR2xvYmFsQ29ubmVjdC4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnZHJhZ2dpbmcnLFxuICAnY29ubmVjdCcsXG4gICdjYW52YXMnLFxuICAndG9vbE1hbmFnZXInLFxuICAncnVsZXMnXG5dO1xuXG4vKipcbiAqIEluaXRpYXRlcyB0b29sIGFjdGl2aXR5LlxuICovXG5HbG9iYWxDb25uZWN0LnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gIHRoaXMuX2RyYWdnaW5nLmluaXQoZXZlbnQsICdnbG9iYWwtY29ubmVjdCcsIHtcbiAgICB0cmFwQ2xpY2s6IGZhbHNlLFxuICAgIGRhdGE6IHtcbiAgICAgIGNvbnRleHQ6IHt9XG4gICAgfVxuICB9KTtcbn07XG5cbkdsb2JhbENvbm5lY3QucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgdGhpcy5fZHJhZ2dpbmcuY2FuY2VsKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG59O1xuXG5HbG9iYWxDb25uZWN0LnByb3RvdHlwZS5pc0FjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY29udGV4dCA9IHRoaXMuX2RyYWdnaW5nLmNvbnRleHQoKTtcblxuICByZXR1cm4gY29udGV4dCAmJiAvXmdsb2JhbC1jb25uZWN0Ly50ZXN0KGNvbnRleHQucHJlZml4KTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgc291cmNlIHNoYXBlIGNhbiBpbml0aWF0ZSBjb25uZWN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1NoYXBlfSBzdGFydFRhcmdldFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuR2xvYmFsQ29ubmVjdC5wcm90b3R5cGUuY2FuU3RhcnRDb25uZWN0ID0gZnVuY3Rpb24oc3RhcnRUYXJnZXQpIHtcbiAgcmV0dXJuIHRoaXMuX3J1bGVzLmFsbG93ZWQoJ2Nvbm5lY3Rpb24uc3RhcnQnLCB7IHNvdXJjZTogc3RhcnRUYXJnZXQgfSk7XG59O1xuIiwiaW1wb3J0IENvbm5lY3RNb2R1bGUgZnJvbSAnLi4vY29ubmVjdCc7XG5pbXBvcnQgUnVsZXNNb2R1bGUgZnJvbSAnLi4vcnVsZXMnO1xuaW1wb3J0IERyYWdnaW5nTW9kdWxlIGZyb20gJy4uL2RyYWdnaW5nJztcbmltcG9ydCBUb29sTWFuYWdlck1vZHVsZSBmcm9tICcuLi90b29sLW1hbmFnZXInO1xuXG5pbXBvcnQgR2xvYmFsQ29ubmVjdCBmcm9tICcuL0dsb2JhbENvbm5lY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgQ29ubmVjdE1vZHVsZSxcbiAgICBSdWxlc01vZHVsZSxcbiAgICBEcmFnZ2luZ01vZHVsZSxcbiAgICBUb29sTWFuYWdlck1vZHVsZVxuICBdLFxuICBnbG9iYWxDb25uZWN0OiBbICd0eXBlJywgR2xvYmFsQ29ubmVjdCBdXG59O1xuIiwiaW1wb3J0IHtcclxuICBzZXRTbmFwcGVkLFxyXG4gIGlzU25hcHBlZFxyXG59IGZyb20gJy4uL3NuYXBwaW5nL1NuYXBVdGlsJztcclxuXHJcbmltcG9ydCB7IGlzQ21kIH0gZnJvbSAnLi4va2V5Ym9hcmQvS2V5Ym9hcmRVdGlsJztcclxuXHJcbmltcG9ydCB7XHJcbiAgYXNzaWduLFxyXG4gIGlzTnVtYmVyXHJcbn0gZnJvbSAnbWluLWRhc2gnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTUEFDSU5HLFxyXG4gIHF1YW50aXplXHJcbn0gZnJvbSAnLi9HcmlkVXRpbCc7XHJcblxyXG52YXIgTE9XRVJfUFJJT1JJVFkgPSAxMjAwO1xyXG52YXIgTE9XX1BSSU9SSVRZID0gODAwO1xyXG5cclxuLyoqXHJcbiAqIEJhc2ljIGdyaWQgc25hcHBpbmcgdGhhdCBjb3ZlcnMgY29ubmVjdGluZywgY3JlYXRpbmcsIG1vdmluZywgcmVzaXppbmcgc2hhcGVzLCBtb3ZpbmcgYmVuZHBvaW50c1xyXG4gKiBhbmQgY29ubmVjdGlvbiBzZWdtZW50cy5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEdyaWRTbmFwcGluZyhlbGVtZW50UmVnaXN0cnksIGV2ZW50QnVzLCBjb25maWcpIHtcclxuXHJcbiAgdmFyIGFjdGl2ZSA9ICFjb25maWcgfHwgY29uZmlnLmFjdGl2ZSAhPT0gZmFsc2U7XHJcblxyXG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XHJcblxyXG4gIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgZXZlbnRCdXMub24oJ2RpYWdyYW0uaW5pdCcsIExPV19QUklPUklUWSwgZnVuY3Rpb24oKSB7XHJcbiAgICBzZWxmLnNldEFjdGl2ZShhY3RpdmUpO1xyXG4gIH0pO1xyXG5cclxuICBldmVudEJ1cy5vbihbXHJcbiAgICAnY3JlYXRlLm1vdmUnLFxyXG4gICAgJ2NyZWF0ZS5lbmQnLFxyXG4gICAgJ2JlbmRwb2ludC5tb3ZlLm1vdmUnLFxyXG4gICAgJ2JlbmRwb2ludC5tb3ZlLmVuZCcsXHJcbiAgICAnY29ubmVjdC5tb3ZlJyxcclxuICAgICdjb25uZWN0LmVuZCcsXHJcbiAgICAnY29ubmVjdGlvblNlZ21lbnQubW92ZS5tb3ZlJyxcclxuICAgICdjb25uZWN0aW9uU2VnbWVudC5tb3ZlLmVuZCcsXHJcbiAgICAncmVzaXplLm1vdmUnLFxyXG4gICAgJ3Jlc2l6ZS5lbmQnLFxyXG4gICAgJ3NoYXBlLm1vdmUubW92ZScsXHJcbiAgICAnc2hhcGUubW92ZS5lbmQnXHJcbiAgXSwgTE9XRVJfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgb3JpZ2luYWxFdmVudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQ7XHJcblxyXG4gICAgaWYgKCFzZWxmLmFjdGl2ZSB8fCAob3JpZ2luYWxFdmVudCAmJiBpc0NtZChvcmlnaW5hbEV2ZW50KSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBncmlkU25hcHBpbmdDb250ZXh0ID0gY29udGV4dC5ncmlkU25hcHBpbmdDb250ZXh0O1xyXG5cclxuICAgIGlmICghZ3JpZFNuYXBwaW5nQ29udGV4dCkge1xyXG4gICAgICBncmlkU25hcHBpbmdDb250ZXh0ID0gY29udGV4dC5ncmlkU25hcHBpbmdDb250ZXh0ID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgWyAneCcsICd5JyBdLmZvckVhY2goZnVuY3Rpb24oYXhpcykge1xyXG4gICAgICB2YXIgb3B0aW9ucyA9IHt9O1xyXG5cclxuICAgICAgLy8gYWxsb3cgc25hcHBpbmcgd2l0aCBvZmZzZXRcclxuICAgICAgdmFyIHNuYXBPZmZzZXQgPSBnZXRTbmFwT2Zmc2V0KGV2ZW50LCBheGlzLCBlbGVtZW50UmVnaXN0cnkpO1xyXG5cclxuICAgICAgaWYgKHNuYXBPZmZzZXQpIHtcclxuICAgICAgICBvcHRpb25zLm9mZnNldCA9IHNuYXBPZmZzZXQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFsbG93IHNuYXBwaW5nIHdpdGggbWluIGFuZCBtYXhcclxuICAgICAgdmFyIHNuYXBDb25zdHJhaW50cyA9IGdldFNuYXBDb25zdHJhaW50cyhldmVudCwgYXhpcyk7XHJcblxyXG4gICAgICBpZiAoc25hcENvbnN0cmFpbnRzKSB7XHJcbiAgICAgICAgYXNzaWduKG9wdGlvbnMsIHNuYXBDb25zdHJhaW50cyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghaXNTbmFwcGVkKGV2ZW50LCBheGlzKSkge1xyXG4gICAgICAgIHNlbGYuc25hcEV2ZW50KGV2ZW50LCBheGlzLCBvcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTbmFwIGFuIGV2ZW50cyB4IG9yIHkgd2l0aCBvcHRpb25hbCBtaW4sIG1heCBhbmQgb2Zmc2V0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcclxuICogQHBhcmFtIHtzdHJpbmd9IGF4aXNcclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1pbl1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm9mZnNldF1cclxuICovXHJcbkdyaWRTbmFwcGluZy5wcm90b3R5cGUuc25hcEV2ZW50ID0gZnVuY3Rpb24oZXZlbnQsIGF4aXMsIG9wdGlvbnMpIHtcclxuICB2YXIgc25hcHBlZFZhbHVlID0gdGhpcy5zbmFwVmFsdWUoZXZlbnRbIGF4aXMgXSwgb3B0aW9ucyk7XHJcblxyXG4gIHNldFNuYXBwZWQoZXZlbnQsIGF4aXMsIHNuYXBwZWRWYWx1ZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogRXhwb3NlIGdyaWQgc3BhY2luZyBmb3IgdGhpcmQgcGFydGllcyAoaS5lLiBleHRlbnNpb25zKS5cclxuICpcclxuICogQHJldHVybiB7bnVtYmVyfSBzcGFjaW5nIG9mIGdyaWQgZG90c1xyXG4gKi9cclxuR3JpZFNuYXBwaW5nLnByb3RvdHlwZS5nZXRHcmlkU3BhY2luZyA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiBTUEFDSU5HO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNuYXAgdmFsdWUgd2l0aCBvcHRpb25hbCBtaW4sIG1heCBhbmQgb2Zmc2V0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1pbl1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm9mZnNldF1cclxuICovXHJcbkdyaWRTbmFwcGluZy5wcm90b3R5cGUuc25hcFZhbHVlID0gZnVuY3Rpb24odmFsdWUsIG9wdGlvbnMpIHtcclxuICB2YXIgb2Zmc2V0ID0gMDtcclxuXHJcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5vZmZzZXQpIHtcclxuICAgIG9mZnNldCA9IG9wdGlvbnMub2Zmc2V0O1xyXG4gIH1cclxuXHJcbiAgdmFsdWUgKz0gb2Zmc2V0O1xyXG5cclxuICB2YWx1ZSA9IHF1YW50aXplKHZhbHVlLCBTUEFDSU5HKTtcclxuXHJcbiAgdmFyIG1pbiwgbWF4O1xyXG5cclxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm1pbikge1xyXG4gICAgbWluID0gb3B0aW9ucy5taW47XHJcblxyXG4gICAgaWYgKGlzTnVtYmVyKG1pbikpIHtcclxuICAgICAgbWluID0gcXVhbnRpemUobWluICsgb2Zmc2V0LCBTUEFDSU5HLCAnY2VpbCcpO1xyXG5cclxuICAgICAgdmFsdWUgPSBNYXRoLm1heCh2YWx1ZSwgbWluKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMubWF4KSB7XHJcbiAgICBtYXggPSBvcHRpb25zLm1heDtcclxuXHJcbiAgICBpZiAoaXNOdW1iZXIobWF4KSkge1xyXG4gICAgICBtYXggPSBxdWFudGl6ZShtYXggKyBvZmZzZXQsIFNQQUNJTkcsICdmbG9vcicpO1xyXG5cclxuICAgICAgdmFsdWUgPSBNYXRoLm1pbih2YWx1ZSwgbWF4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhbHVlIC09IG9mZnNldDtcclxuXHJcbiAgcmV0dXJuIHZhbHVlO1xyXG59O1xyXG5cclxuR3JpZFNuYXBwaW5nLnByb3RvdHlwZS5pc0FjdGl2ZSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiB0aGlzLmFjdGl2ZTtcclxufTtcclxuXHJcbkdyaWRTbmFwcGluZy5wcm90b3R5cGUuc2V0QWN0aXZlID0gZnVuY3Rpb24oYWN0aXZlKSB7XHJcbiAgdGhpcy5hY3RpdmUgPSBhY3RpdmU7XHJcblxyXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2dyaWRTbmFwcGluZy50b2dnbGUnLCB7IGFjdGl2ZTogYWN0aXZlIH0pO1xyXG59O1xyXG5cclxuR3JpZFNuYXBwaW5nLnByb3RvdHlwZS50b2dnbGVBY3RpdmUgPSBmdW5jdGlvbigpIHtcclxuICB0aGlzLnNldEFjdGl2ZSghdGhpcy5hY3RpdmUpO1xyXG59O1xyXG5cclxuR3JpZFNuYXBwaW5nLiRpbmplY3QgPSBbXHJcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXHJcbiAgJ2V2ZW50QnVzJyxcclxuICAnY29uZmlnLmdyaWRTbmFwcGluZydcclxuXTtcclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5cclxuLyoqXHJcbiAqIEdldCBtaW5pbXVtIGFuZCBtYXhpbXVtIHNuYXAgY29uc3RyYWludHMuXHJcbiAqIENvbnN0cmFpbnRzIGFyZSBjYWNoZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxyXG4gKiBAcGFyYW0ge09iamVjdH0gZXZlbnQuY29udGV4dFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gYXhpc1xyXG4gKlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbnxPYmplY3R9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTbmFwQ29uc3RyYWludHMoZXZlbnQsIGF4aXMpIHtcclxuICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgIGNyZWF0ZUNvbnN0cmFpbnRzID0gY29udGV4dC5jcmVhdGVDb25zdHJhaW50cyxcclxuICAgICAgcmVzaXplQ29uc3RyYWludHMgPSBjb250ZXh0LnJlc2l6ZUNvbnN0cmFpbnRzIHx8IHt9LFxyXG4gICAgICBncmlkU25hcHBpbmdDb250ZXh0ID0gY29udGV4dC5ncmlkU25hcHBpbmdDb250ZXh0LFxyXG4gICAgICBzbmFwQ29uc3RyYWludHMgPSBncmlkU25hcHBpbmdDb250ZXh0LnNuYXBDb25zdHJhaW50cztcclxuXHJcbiAgLy8gY2FjaGUgc25hcCBjb25zdHJhaW50c1xyXG4gIGlmIChzbmFwQ29uc3RyYWludHMgJiYgc25hcENvbnN0cmFpbnRzWyBheGlzIF0pIHtcclxuICAgIHJldHVybiBzbmFwQ29uc3RyYWludHNbIGF4aXMgXTtcclxuICB9XHJcblxyXG4gIGlmICghc25hcENvbnN0cmFpbnRzKSB7XHJcbiAgICBzbmFwQ29uc3RyYWludHMgPSBncmlkU25hcHBpbmdDb250ZXh0LnNuYXBDb25zdHJhaW50cyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgaWYgKCFzbmFwQ29uc3RyYWludHNbIGF4aXMgXSkge1xyXG4gICAgc25hcENvbnN0cmFpbnRzWyBheGlzIF0gPSB7fTtcclxuICB9XHJcblxyXG4gIHZhciBkaXJlY3Rpb24gPSBjb250ZXh0LmRpcmVjdGlvbjtcclxuXHJcbiAgLy8gY3JlYXRlXHJcbiAgaWYgKGNyZWF0ZUNvbnN0cmFpbnRzKSB7XHJcbiAgICBpZiAoaXNIb3Jpem9udGFsKGF4aXMpKSB7XHJcbiAgICAgIHNuYXBDb25zdHJhaW50cy54Lm1pbiA9IGNyZWF0ZUNvbnN0cmFpbnRzLmxlZnQ7XHJcbiAgICAgIHNuYXBDb25zdHJhaW50cy54Lm1heCA9IGNyZWF0ZUNvbnN0cmFpbnRzLnJpZ2h0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc25hcENvbnN0cmFpbnRzLnkubWluID0gY3JlYXRlQ29uc3RyYWludHMudG9wO1xyXG4gICAgICBzbmFwQ29uc3RyYWludHMueS5tYXggPSBjcmVhdGVDb25zdHJhaW50cy5ib3R0b207XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyByZXNpemVcclxuICB2YXIgbWluUmVzaXplQ29uc3RyYWludHMgPSByZXNpemVDb25zdHJhaW50cy5taW4sXHJcbiAgICAgIG1heFJlc2l6ZUNvbnN0cmFpbnRzID0gcmVzaXplQ29uc3RyYWludHMubWF4O1xyXG5cclxuICBpZiAobWluUmVzaXplQ29uc3RyYWludHMpIHtcclxuICAgIGlmIChpc0hvcml6b250YWwoYXhpcykpIHtcclxuXHJcbiAgICAgIGlmIChpc1dlc3QoZGlyZWN0aW9uKSkge1xyXG4gICAgICAgIHNuYXBDb25zdHJhaW50cy54Lm1heCA9IG1pblJlc2l6ZUNvbnN0cmFpbnRzLmxlZnQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc25hcENvbnN0cmFpbnRzLngubWluID0gbWluUmVzaXplQ29uc3RyYWludHMucmlnaHQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgaWYgKGlzTm9ydGgoZGlyZWN0aW9uKSkge1xyXG4gICAgICAgIHNuYXBDb25zdHJhaW50cy55Lm1heCA9IG1pblJlc2l6ZUNvbnN0cmFpbnRzLnRvcDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzbmFwQ29uc3RyYWludHMueS5taW4gPSBtaW5SZXNpemVDb25zdHJhaW50cy5ib3R0b207XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAobWF4UmVzaXplQ29uc3RyYWludHMpIHtcclxuICAgIGlmIChpc0hvcml6b250YWwoYXhpcykpIHtcclxuXHJcbiAgICAgIGlmIChpc1dlc3QoZGlyZWN0aW9uKSkge1xyXG4gICAgICAgIHNuYXBDb25zdHJhaW50cy54Lm1pbiA9IG1heFJlc2l6ZUNvbnN0cmFpbnRzLmxlZnQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc25hcENvbnN0cmFpbnRzLngubWF4ID0gbWF4UmVzaXplQ29uc3RyYWludHMucmlnaHQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgaWYgKGlzTm9ydGgoZGlyZWN0aW9uKSkge1xyXG4gICAgICAgIHNuYXBDb25zdHJhaW50cy55Lm1pbiA9IG1heFJlc2l6ZUNvbnN0cmFpbnRzLnRvcDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzbmFwQ29uc3RyYWludHMueS5tYXggPSBtYXhSZXNpemVDb25zdHJhaW50cy5ib3R0b207XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gc25hcENvbnN0cmFpbnRzWyBheGlzIF07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgc25hcCBvZmZzZXQuXHJcbiAqIE9mZnNldCBpcyBjYWNoZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gYXhpc1xyXG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XHJcbiAqXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTbmFwT2Zmc2V0KGV2ZW50LCBheGlzLCBlbGVtZW50UmVnaXN0cnkpIHtcclxuICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgIHNoYXBlID0gZXZlbnQuc2hhcGUsXHJcbiAgICAgIGdyaWRTbmFwcGluZ0NvbnRleHQgPSBjb250ZXh0LmdyaWRTbmFwcGluZ0NvbnRleHQsXHJcbiAgICAgIHNuYXBMb2NhdGlvbiA9IGdyaWRTbmFwcGluZ0NvbnRleHQuc25hcExvY2F0aW9uLFxyXG4gICAgICBzbmFwT2Zmc2V0ID0gZ3JpZFNuYXBwaW5nQ29udGV4dC5zbmFwT2Zmc2V0O1xyXG5cclxuICAvLyBjYWNoZSBzbmFwIG9mZnNldFxyXG4gIGlmIChzbmFwT2Zmc2V0ICYmIGlzTnVtYmVyKHNuYXBPZmZzZXRbIGF4aXMgXSkpIHtcclxuICAgIHJldHVybiBzbmFwT2Zmc2V0WyBheGlzIF07XHJcbiAgfVxyXG5cclxuICBpZiAoIXNuYXBPZmZzZXQpIHtcclxuICAgIHNuYXBPZmZzZXQgPSBncmlkU25hcHBpbmdDb250ZXh0LnNuYXBPZmZzZXQgPSB7fTtcclxuICB9XHJcblxyXG4gIGlmICghaXNOdW1iZXIoc25hcE9mZnNldFsgYXhpcyBdKSkge1xyXG4gICAgc25hcE9mZnNldFsgYXhpcyBdID0gMDtcclxuICB9XHJcblxyXG4gIGlmICghc2hhcGUpIHtcclxuICAgIHJldHVybiBzbmFwT2Zmc2V0WyBheGlzIF07XHJcbiAgfVxyXG5cclxuICBpZiAoIWVsZW1lbnRSZWdpc3RyeS5nZXQoc2hhcGUuaWQpKSB7XHJcblxyXG4gICAgaWYgKGlzSG9yaXpvbnRhbChheGlzKSkge1xyXG4gICAgICBzbmFwT2Zmc2V0WyBheGlzIF0gKz0gc2hhcGVbIGF4aXMgXSArIHNoYXBlLndpZHRoIC8gMjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNuYXBPZmZzZXRbIGF4aXMgXSArPSBzaGFwZVsgYXhpcyBdICsgc2hhcGUuaGVpZ2h0IC8gMjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICghc25hcExvY2F0aW9uKSB7XHJcbiAgICByZXR1cm4gc25hcE9mZnNldFsgYXhpcyBdO1xyXG4gIH1cclxuXHJcbiAgaWYgKGF4aXMgPT09ICd4Jykge1xyXG4gICAgaWYgKC9sZWZ0Ly50ZXN0KHNuYXBMb2NhdGlvbikpIHtcclxuICAgICAgc25hcE9mZnNldFsgYXhpcyBdIC09IHNoYXBlLndpZHRoIC8gMjtcclxuICAgIH0gZWxzZSBpZiAoL3JpZ2h0Ly50ZXN0KHNuYXBMb2NhdGlvbikpIHtcclxuICAgICAgc25hcE9mZnNldFsgYXhpcyBdICs9IHNoYXBlLndpZHRoIC8gMjtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKC90b3AvLnRlc3Qoc25hcExvY2F0aW9uKSkge1xyXG4gICAgICBzbmFwT2Zmc2V0WyBheGlzIF0gLT0gc2hhcGUuaGVpZ2h0IC8gMjtcclxuICAgIH0gZWxzZSBpZiAoL2JvdHRvbS8udGVzdChzbmFwTG9jYXRpb24pKSB7XHJcbiAgICAgIHNuYXBPZmZzZXRbIGF4aXMgXSArPSBzaGFwZS5oZWlnaHQgLyAyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHNuYXBPZmZzZXRbIGF4aXMgXTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNIb3Jpem9udGFsKGF4aXMpIHtcclxuICByZXR1cm4gYXhpcyA9PT0gJ3gnO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc05vcnRoKGRpcmVjdGlvbikge1xyXG4gIHJldHVybiBkaXJlY3Rpb24uaW5kZXhPZignbicpICE9PSAtMTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNXZXN0KGRpcmVjdGlvbikge1xyXG4gIHJldHVybiBkaXJlY3Rpb24uaW5kZXhPZigndycpICE9PSAtMTtcclxufSIsImV4cG9ydCB2YXIgU1BBQ0lORyA9IDEwO1xuXG5leHBvcnQgZnVuY3Rpb24gcXVhbnRpemUodmFsdWUsIHF1YW50dW0sIGZuKSB7XG4gIGlmICghZm4pIHtcbiAgICBmbiA9ICdyb3VuZCc7XG4gIH1cblxuICByZXR1cm4gTWF0aFsgZm4gXSh2YWx1ZSAvIHF1YW50dW0pICogcXVhbnR1bTtcbn0iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xyXG5cclxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICcuLi8uLi8uLi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIGFzc2lnbixcclxuICBpc1N0cmluZ1xyXG59IGZyb20gJ21pbi1kYXNoJztcclxuXHJcblxyXG4vKipcclxuICogSW50ZWdyYXRlcyByZXNpemluZyB3aXRoIGdyaWQgc25hcHBpbmcuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXNpemVCZWhhdmlvcihldmVudEJ1cywgZ3JpZFNuYXBwaW5nKSB7XHJcbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xyXG5cclxuICB0aGlzLl9ncmlkU25hcHBpbmcgPSBncmlkU25hcHBpbmc7XHJcblxyXG4gIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgdGhpcy5wcmVFeGVjdXRlKCdzaGFwZS5yZXNpemUnLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcclxuICAgICAgICBhdXRvUmVzaXplID0gaGludHMuYXV0b1Jlc2l6ZTtcclxuXHJcbiAgICBpZiAoIWF1dG9SZXNpemUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXHJcbiAgICAgICAgbmV3Qm91bmRzID0gY29udGV4dC5uZXdCb3VuZHM7XHJcblxyXG4gICAgaWYgKGlzU3RyaW5nKGF1dG9SZXNpemUpKSB7XHJcbiAgICAgIGNvbnRleHQubmV3Qm91bmRzID0gc2VsZi5zbmFwQ29tcGxleChuZXdCb3VuZHMsIGF1dG9SZXNpemUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29udGV4dC5uZXdCb3VuZHMgPSBzZWxmLnNuYXBTaW1wbGUoc2hhcGUsIG5ld0JvdW5kcyk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcblJlc2l6ZUJlaGF2aW9yLiRpbmplY3QgPSBbXHJcbiAgJ2V2ZW50QnVzJyxcclxuICAnZ3JpZFNuYXBwaW5nJyxcclxuICAnbW9kZWxpbmcnXHJcbl07XHJcblxyXG5pbmhlcml0cyhSZXNpemVCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcclxuXHJcbi8qKlxyXG4gKiBTbmFwIHdpZHRoIGFuZCBoZWlnaHQgaW4gcmVsYXRpb24gdG8gY2VudGVyLlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5zaGFwZX0gc2hhcGVcclxuICogQHBhcmFtIHtCb3VuZHN9IG5ld0JvdW5kc1xyXG4gKlxyXG4gKiBAcmV0dXJucyB7Qm91bmRzfSBTbmFwcGVkIGJvdW5kcy5cclxuICovXHJcblJlc2l6ZUJlaGF2aW9yLnByb3RvdHlwZS5zbmFwU2ltcGxlID0gZnVuY3Rpb24oc2hhcGUsIG5ld0JvdW5kcykge1xyXG4gIHZhciBncmlkU25hcHBpbmcgPSB0aGlzLl9ncmlkU25hcHBpbmc7XHJcblxyXG4gIG5ld0JvdW5kcy53aWR0aCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUobmV3Qm91bmRzLndpZHRoLCB7XHJcbiAgICBtaW46IG5ld0JvdW5kcy53aWR0aFxyXG4gIH0pO1xyXG5cclxuICBuZXdCb3VuZHMuaGVpZ2h0ID0gZ3JpZFNuYXBwaW5nLnNuYXBWYWx1ZShuZXdCb3VuZHMuaGVpZ2h0LCB7XHJcbiAgICBtaW46IG5ld0JvdW5kcy5oZWlnaHRcclxuICB9KTtcclxuXHJcbiAgbmV3Qm91bmRzLnggPSBzaGFwZS54ICsgKHNoYXBlLndpZHRoIC8gMikgLSAobmV3Qm91bmRzLndpZHRoIC8gMik7XHJcbiAgbmV3Qm91bmRzLnkgPSBzaGFwZS55ICsgKHNoYXBlLmhlaWdodCAvIDIpIC0gKG5ld0JvdW5kcy5oZWlnaHQgLyAyKTtcclxuXHJcbiAgcmV0dXJuIG5ld0JvdW5kcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTbmFwIHgsIHksIHdpZHRoIGFuZCBoZWlnaHQgYWNjb3JkaW5nIHRvIGdpdmVuIGRpcmVjdGlvbnMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Qm91bmRzfSBuZXdCb3VuZHNcclxuICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdGlvbnMgLSBEaXJlY3Rpb25zIGFzIHtufHd8c3xlfS5cclxuICpcclxuICogQHJldHVybnMge0JvdW5kc30gU25hcHBlZCBib3VuZHMuXHJcbiAqL1xyXG5SZXNpemVCZWhhdmlvci5wcm90b3R5cGUuc25hcENvbXBsZXggPSBmdW5jdGlvbihuZXdCb3VuZHMsIGRpcmVjdGlvbnMpIHtcclxuICBpZiAoL3d8ZS8udGVzdChkaXJlY3Rpb25zKSkge1xyXG4gICAgbmV3Qm91bmRzID0gdGhpcy5zbmFwSG9yaXpvbnRhbGx5KG5ld0JvdW5kcywgZGlyZWN0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBpZiAoL258cy8udGVzdChkaXJlY3Rpb25zKSkge1xyXG4gICAgbmV3Qm91bmRzID0gdGhpcy5zbmFwVmVydGljYWxseShuZXdCb3VuZHMsIGRpcmVjdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG5ld0JvdW5kcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTbmFwIGluIG9uZSBvciBib3RoIGRpcmVjdGlvbnMgaG9yaXpvbnRhbGx5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge0JvdW5kc30gbmV3Qm91bmRzXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXJlY3Rpb25zIC0gRGlyZWN0aW9ucyBhcyB7bnx3fHN8ZX0uXHJcbiAqXHJcbiAqIEByZXR1cm5zIHtCb3VuZHN9IFNuYXBwZWQgYm91bmRzLlxyXG4gKi9cclxuUmVzaXplQmVoYXZpb3IucHJvdG90eXBlLnNuYXBIb3Jpem9udGFsbHkgPSBmdW5jdGlvbihuZXdCb3VuZHMsIGRpcmVjdGlvbnMpIHtcclxuICB2YXIgZ3JpZFNuYXBwaW5nID0gdGhpcy5fZ3JpZFNuYXBwaW5nLFxyXG4gICAgICB3ZXN0ID0gL3cvLnRlc3QoZGlyZWN0aW9ucyksXHJcbiAgICAgIGVhc3QgPSAvZS8udGVzdChkaXJlY3Rpb25zKTtcclxuXHJcbiAgdmFyIHNuYXBwZWROZXdCb3VuZHMgPSB7fTtcclxuXHJcbiAgc25hcHBlZE5ld0JvdW5kcy53aWR0aCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUobmV3Qm91bmRzLndpZHRoLCB7XHJcbiAgICBtaW46IG5ld0JvdW5kcy53aWR0aFxyXG4gIH0pO1xyXG5cclxuICBpZiAoZWFzdCkge1xyXG5cclxuICAgIC8vIGhhbmRsZSA8d2U+XHJcbiAgICBpZiAod2VzdCkge1xyXG4gICAgICBzbmFwcGVkTmV3Qm91bmRzLnggPSBncmlkU25hcHBpbmcuc25hcFZhbHVlKG5ld0JvdW5kcy54LCB7XHJcbiAgICAgICAgbWF4OiBuZXdCb3VuZHMueFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHNuYXBwZWROZXdCb3VuZHMud2lkdGggKz0gZ3JpZFNuYXBwaW5nLnNuYXBWYWx1ZShuZXdCb3VuZHMueCAtIHNuYXBwZWROZXdCb3VuZHMueCwge1xyXG4gICAgICAgIG1pbjogbmV3Qm91bmRzLnggLSBzbmFwcGVkTmV3Qm91bmRzLnhcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaGFuZGxlIDxlPlxyXG4gICAgZWxzZSB7XHJcbiAgICAgIG5ld0JvdW5kcy54ID0gbmV3Qm91bmRzLnggKyBuZXdCb3VuZHMud2lkdGggLSBzbmFwcGVkTmV3Qm91bmRzLndpZHRoO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gYXNzaWduIHNuYXBwZWQgeCBhbmQgd2lkdGhcclxuICBhc3NpZ24obmV3Qm91bmRzLCBzbmFwcGVkTmV3Qm91bmRzKTtcclxuXHJcbiAgcmV0dXJuIG5ld0JvdW5kcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTbmFwIGluIG9uZSBvciBib3RoIGRpcmVjdGlvbnMgdmVydGljYWxseS5cclxuICpcclxuICogQHBhcmFtIHtCb3VuZHN9IG5ld0JvdW5kc1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0aW9ucyAtIERpcmVjdGlvbnMgYXMge258d3xzfGV9LlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7Qm91bmRzfSBTbmFwcGVkIGJvdW5kcy5cclxuICovXHJcblJlc2l6ZUJlaGF2aW9yLnByb3RvdHlwZS5zbmFwVmVydGljYWxseSA9IGZ1bmN0aW9uKG5ld0JvdW5kcywgZGlyZWN0aW9ucykge1xyXG4gIHZhciBncmlkU25hcHBpbmcgPSB0aGlzLl9ncmlkU25hcHBpbmcsXHJcbiAgICAgIG5vcnRoID0gL24vLnRlc3QoZGlyZWN0aW9ucyksXHJcbiAgICAgIHNvdXRoID0gL3MvLnRlc3QoZGlyZWN0aW9ucyk7XHJcblxyXG4gIHZhciBzbmFwcGVkTmV3Qm91bmRzID0ge307XHJcblxyXG4gIHNuYXBwZWROZXdCb3VuZHMuaGVpZ2h0ID0gZ3JpZFNuYXBwaW5nLnNuYXBWYWx1ZShuZXdCb3VuZHMuaGVpZ2h0LCB7XHJcbiAgICBtaW46IG5ld0JvdW5kcy5oZWlnaHRcclxuICB9KTtcclxuXHJcbiAgaWYgKG5vcnRoKSB7XHJcblxyXG4gICAgLy8gaGFuZGxlIDxucz5cclxuICAgIGlmIChzb3V0aCkge1xyXG4gICAgICBzbmFwcGVkTmV3Qm91bmRzLnkgPSBncmlkU25hcHBpbmcuc25hcFZhbHVlKG5ld0JvdW5kcy55LCB7XHJcbiAgICAgICAgbWF4OiBuZXdCb3VuZHMueVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHNuYXBwZWROZXdCb3VuZHMuaGVpZ2h0ICs9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUobmV3Qm91bmRzLnkgLSBzbmFwcGVkTmV3Qm91bmRzLnksIHtcclxuICAgICAgICBtaW46IG5ld0JvdW5kcy55IC0gc25hcHBlZE5ld0JvdW5kcy55XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhhbmRsZSA8bj5cclxuICAgIGVsc2Uge1xyXG4gICAgICBuZXdCb3VuZHMueSA9IG5ld0JvdW5kcy55ICsgbmV3Qm91bmRzLmhlaWdodCAtIHNuYXBwZWROZXdCb3VuZHMuaGVpZ2h0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gYXNzaWduIHNuYXBwZWQgeSBhbmQgaGVpZ2h0XHJcbiAgYXNzaWduKG5ld0JvdW5kcywgc25hcHBlZE5ld0JvdW5kcyk7XHJcblxyXG4gIHJldHVybiBuZXdCb3VuZHM7XHJcbn07IiwidmFyIEhJR0hfUFJJT1JJVFkgPSAyMDAwO1xyXG5cclxuLyoqXHJcbiAqIEludGVncmF0ZXMgc3BhY2UgdG9vbCB3aXRoIGdyaWQgc25hcHBpbmcuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTcGFjZVRvb2xCZWhhdmlvcihldmVudEJ1cywgZ3JpZFNuYXBwaW5nKSB7XHJcbiAgZXZlbnRCdXMub24oW1xyXG4gICAgJ3NwYWNlVG9vbC5tb3ZlJyxcclxuICAgICdzcGFjZVRvb2wuZW5kJ1xyXG4gIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQ7XHJcblxyXG4gICAgaWYgKCFjb250ZXh0LmluaXRpYWxpemVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgYXhpcyA9IGNvbnRleHQuYXhpcztcclxuXHJcbiAgICB2YXIgc25hcHBlZDtcclxuXHJcbiAgICBpZiAoYXhpcyA9PT0gJ3gnKSB7XHJcblxyXG4gICAgICAvLyBzbmFwIGRlbHRhIHggdG8gbXVsdGlwbGUgb2YgMTBcclxuICAgICAgc25hcHBlZCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUoZXZlbnQuZHgpO1xyXG5cclxuICAgICAgZXZlbnQueCA9IGV2ZW50LnggKyBzbmFwcGVkIC0gZXZlbnQuZHg7XHJcbiAgICAgIGV2ZW50LmR4ID0gc25hcHBlZDtcclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBzbmFwIGRlbHRhIHkgdG8gbXVsdGlwbGUgb2YgMTBcclxuICAgICAgc25hcHBlZCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUoZXZlbnQuZHkpO1xyXG5cclxuICAgICAgZXZlbnQueSA9IGV2ZW50LnkgKyBzbmFwcGVkIC0gZXZlbnQuZHk7XHJcbiAgICAgIGV2ZW50LmR5ID0gc25hcHBlZDtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuU3BhY2VUb29sQmVoYXZpb3IuJGluamVjdCA9IFtcclxuICAnZXZlbnRCdXMnLFxyXG4gICdncmlkU25hcHBpbmcnXHJcbl07IiwiaW1wb3J0IFJlc2l6ZUJlaGF2aW9yIGZyb20gJy4vUmVzaXplQmVoYXZpb3InO1xyXG5pbXBvcnQgU3BhY2VUb29sQmVoYXZpb3IgZnJvbSAnLi9TcGFjZVRvb2xCZWhhdmlvcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgX19pbml0X186IFtcclxuICAgICdncmlkU25hcHBpbmdSZXNpemVCZWhhdmlvcicsXHJcbiAgICAnZ3JpZFNuYXBwaW5nU3BhY2VUb29sQmVoYXZpb3InXHJcbiAgXSxcclxuICBncmlkU25hcHBpbmdSZXNpemVCZWhhdmlvcjogWyAndHlwZScsIFJlc2l6ZUJlaGF2aW9yIF0sXHJcbiAgZ3JpZFNuYXBwaW5nU3BhY2VUb29sQmVoYXZpb3I6IFsgJ3R5cGUnLCBTcGFjZVRvb2xCZWhhdmlvciBdXHJcbn07IiwiaW1wb3J0IEdyaWRTbmFwcGluZyBmcm9tICcuL0dyaWRTbmFwcGluZyc7XHJcblxyXG5pbXBvcnQgR3JpZFNuYXBwaW5nQmVoYXZpb3JNb2R1bGUgZnJvbSAnLi9iZWhhdmlvcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgX19kZXBlbmRzX186IFsgR3JpZFNuYXBwaW5nQmVoYXZpb3JNb2R1bGUgXSxcclxuICBfX2luaXRfXzogWyAnZ3JpZFNuYXBwaW5nJyBdLFxyXG4gIGdyaWRTbmFwcGluZzogWyAndHlwZScsIEdyaWRTbmFwcGluZyBdXHJcbn07IiwiaW1wb3J0IHsgaGFzUHJpbWFyeU1vZGlmaWVyIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb3VzZSc7XG5cbmltcG9ydCB7IGlzS2V5IH0gZnJvbSAnLi4vLi4vZmVhdHVyZXMva2V5Ym9hcmQvS2V5Ym9hcmRVdGlsJztcblxudmFyIEhJR0hfUFJJT1JJVFkgPSAxNTAwO1xudmFyIEhBTkRfQ1VSU09SID0gJ2dyYWInO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEhhbmRUb29sKGV2ZW50QnVzLCBjYW52YXMsIGRyYWdnaW5nLCBpbmplY3RvciwgdG9vbE1hbmFnZXIpIHtcbiAgdGhpcy5fZHJhZ2dpbmcgPSBkcmFnZ2luZztcblxuICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICBrZXlib2FyZCA9IGluamVjdG9yLmdldCgna2V5Ym9hcmQnLCBmYWxzZSk7XG5cbiAgdG9vbE1hbmFnZXIucmVnaXN0ZXJUb29sKCdoYW5kJywge1xuICAgIHRvb2w6ICdoYW5kJyxcbiAgICBkcmFnZ2luZzogJ2hhbmQubW92ZSdcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQubW91c2Vkb3duJywgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBpZiAoaGFzUHJpbWFyeU1vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgdGhpcy5hY3RpdmF0ZU1vdmUoZXZlbnQub3JpZ2luYWxFdmVudCk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sIHRoaXMpO1xuXG4gIGtleWJvYXJkICYmIGtleWJvYXJkLmFkZExpc3RlbmVyKEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGUpIHtcbiAgICBpZiAoIWlzU3BhY2UoZS5rZXlFdmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2VsZi5pc0FjdGl2ZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWN0aXZhdGVNb3ZlKGV2ZW50KSB7XG4gICAgICBzZWxmLmFjdGl2YXRlTW92ZShldmVudCk7XG5cbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBhY3RpdmF0ZU1vdmUpO1xuICAgIH1cblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBhY3RpdmF0ZU1vdmUpO1xuXG4gICAgZnVuY3Rpb24gZGVhY3RpdmF0ZU1vdmUoZSkge1xuICAgICAgaWYgKCFpc1NwYWNlKGUua2V5RXZlbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGFjdGl2YXRlTW92ZSk7XG5cbiAgICAgIGtleWJvYXJkLnJlbW92ZUxpc3RlbmVyKGRlYWN0aXZhdGVNb3ZlLCAna2V5Ym9hcmQua2V5dXAnKTtcblxuICAgICAgZHJhZ2dpbmcuY2FuY2VsKCk7XG4gICAgfVxuXG4gICAga2V5Ym9hcmQuYWRkTGlzdGVuZXIoSElHSF9QUklPUklUWSwgZGVhY3RpdmF0ZU1vdmUsICdrZXlib2FyZC5rZXl1cCcpO1xuICB9LCAna2V5Ym9hcmQua2V5ZG93bicpO1xuXG4gIGV2ZW50QnVzLm9uKCdoYW5kLmVuZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHRhcmdldCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQudGFyZ2V0O1xuXG4gICAgLy8gb25seSByZWFjdGl2ZSBvbiBkaWFncmFtIGNsaWNrXG4gICAgLy8gb24gc29tZSBvY2Nhc2lvbnMsIGV2ZW50LmhvdmVyIGlzIG5vdCBzZXQgYW5kIHdlIGhhdmUgdG8gY2hlY2sgaWYgdGhlIHRhcmdldCBpcyBhbiBzdmdcbiAgICBpZiAoIWV2ZW50LmhvdmVyICYmICEodGFyZ2V0IGluc3RhbmNlb2YgU1ZHRWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBldmVudEJ1cy5vbmNlKCdoYW5kLmVuZGVkJywgZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlTW92ZShldmVudC5vcmlnaW5hbEV2ZW50LCB7IHJlYWN0aXZhdGU6IHRydWUgfSk7XG4gICAgfSwgdGhpcyk7XG5cbiAgfSwgdGhpcyk7XG5cblxuICBldmVudEJ1cy5vbignaGFuZC5tb3ZlLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBzY2FsZSA9IGNhbnZhcy52aWV3Ym94KCkuc2NhbGU7XG5cbiAgICBjYW52YXMuc2Nyb2xsKHtcbiAgICAgIGR4OiBldmVudC5keCAqIHNjYWxlLFxuICAgICAgZHk6IGV2ZW50LmR5ICogc2NhbGVcbiAgICB9KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2hhbmQubW92ZS5lbmQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgcmVhY3RpdmF0ZSA9IGNvbnRleHQucmVhY3RpdmF0ZTtcblxuICAgIC8vIERvbid0IHJlYWN0aXZhdGUgaWYgdGhlIHVzZXIgaXMgdXNpbmcgdGhlIGtleWJvYXJkIGtleWJpbmRpbmdcbiAgICBpZiAoIWhhc1ByaW1hcnlNb2RpZmllcihldmVudCkgJiYgcmVhY3RpdmF0ZSkge1xuXG4gICAgICBldmVudEJ1cy5vbmNlKCdoYW5kLm1vdmUuZW5kZWQnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICB0aGlzLmFjdGl2YXRlSGFuZChldmVudC5vcmlnaW5hbEV2ZW50LCB0cnVlLCB0cnVlKTtcbiAgICAgIH0sIHRoaXMpO1xuXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LCB0aGlzKTtcblxufVxuXG5IYW5kVG9vbC4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJyxcbiAgJ2RyYWdnaW5nJyxcbiAgJ2luamVjdG9yJyxcbiAgJ3Rvb2xNYW5hZ2VyJ1xuXTtcblxuXG5IYW5kVG9vbC5wcm90b3R5cGUuYWN0aXZhdGVNb3ZlID0gZnVuY3Rpb24oZXZlbnQsIGF1dG9BY3RpdmF0ZSwgY29udGV4dCkge1xuICBpZiAodHlwZW9mIGF1dG9BY3RpdmF0ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb250ZXh0ID0gYXV0b0FjdGl2YXRlO1xuICAgIGF1dG9BY3RpdmF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgdGhpcy5fZHJhZ2dpbmcuaW5pdChldmVudCwgJ2hhbmQubW92ZScsIHtcbiAgICBhdXRvQWN0aXZhdGU6IGF1dG9BY3RpdmF0ZSxcbiAgICBjdXJzb3I6IEhBTkRfQ1VSU09SLFxuICAgIGRhdGE6IHtcbiAgICAgIGNvbnRleHQ6IGNvbnRleHQgfHwge31cbiAgICB9XG4gIH0pO1xufTtcblxuSGFuZFRvb2wucHJvdG90eXBlLmFjdGl2YXRlSGFuZCA9IGZ1bmN0aW9uKGV2ZW50LCBhdXRvQWN0aXZhdGUsIHJlYWN0aXZhdGUpIHtcbiAgdGhpcy5fZHJhZ2dpbmcuaW5pdChldmVudCwgJ2hhbmQnLCB7XG4gICAgdHJhcENsaWNrOiBmYWxzZSxcbiAgICBhdXRvQWN0aXZhdGU6IGF1dG9BY3RpdmF0ZSxcbiAgICBjdXJzb3I6IEhBTkRfQ1VSU09SLFxuICAgIGRhdGE6IHtcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgcmVhY3RpdmF0ZTogcmVhY3RpdmF0ZVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG59O1xuXG5IYW5kVG9vbC5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLmlzQWN0aXZlKCkpIHtcbiAgICB0aGlzLl9kcmFnZ2luZy5jYW5jZWwoKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFjdGl2YXRlSGFuZCgpO1xuICB9XG59O1xuXG5IYW5kVG9vbC5wcm90b3R5cGUuaXNBY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzLl9kcmFnZ2luZy5jb250ZXh0KCk7XG5cbiAgaWYgKGNvbnRleHQpIHtcbiAgICByZXR1cm4gL14oaGFuZHxoYW5kXFwubW92ZSkkLy50ZXN0KGNvbnRleHQucHJlZml4KTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc1NwYWNlKGtleUV2ZW50KSB7XG4gIHJldHVybiBpc0tleSgnICcsIGtleUV2ZW50KTtcbn0iLCJpbXBvcnQgVG9vbE1hbmFnZXJNb2R1bGUgZnJvbSAnLi4vdG9vbC1tYW5hZ2VyJztcblxuaW1wb3J0IEhhbmRUb29sIGZyb20gJy4vSGFuZFRvb2wnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgVG9vbE1hbmFnZXJNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFsgJ2hhbmRUb29sJyBdLFxuICBoYW5kVG9vbDogWyAndHlwZScsIEhhbmRUb29sIF1cbn07XG4iLCJpbXBvcnQge1xuICBmb3JFYWNoLFxuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBkZWxlZ2F0ZSBhcyBkb21EZWxlZ2F0ZSxcbiAgcXVlcnkgYXMgZG9tUXVlcnksXG4gIHF1ZXJ5QWxsIGFzIGRvbVF1ZXJ5QWxsXG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQgeyBpc1ByaW1hcnlCdXR0b24gfSBmcm9tICcuLi8uLi91dGlsL01vdXNlJztcblxuaW1wb3J0IHtcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgY3JlYXRlTGluZSxcbiAgdXBkYXRlTGluZVxufSBmcm9tICcuLi8uLi91dGlsL1JlbmRlclV0aWwnO1xuXG5mdW5jdGlvbiBhbGxvd0FsbChlKSB7IHJldHVybiB0cnVlOyB9XG5cbnZhciBMT1dfUFJJT1JJVFkgPSA1MDA7XG5cblxuLyoqXG4gKiBBIHBsdWdpbiB0aGF0IHByb3ZpZGVzIGludGVyYWN0aW9uIGV2ZW50cyBmb3IgZGlhZ3JhbSBlbGVtZW50cy5cbiAqXG4gKiBJdCBlbWl0cyB0aGUgZm9sbG93aW5nIGV2ZW50czpcbiAqXG4gKiAgICogZWxlbWVudC5jbGlja1xuICogICAqIGVsZW1lbnQuY29udGV4dG1lbnVcbiAqICAgKiBlbGVtZW50LmRibGNsaWNrXG4gKiAgICogZWxlbWVudC5ob3ZlclxuICogICAqIGVsZW1lbnQubW91c2Vkb3duXG4gKiAgICogZWxlbWVudC5tb3VzZW1vdmVcbiAqICAgKiBlbGVtZW50Lm1vdXNldXBcbiAqICAgKiBlbGVtZW50Lm91dFxuICpcbiAqIEVhY2ggZXZlbnQgaXMgYSB0dXBsZSB7IGVsZW1lbnQsIGdmeCwgb3JpZ2luYWxFdmVudCB9LlxuICpcbiAqIENhbmNlbGluZyB0aGUgZXZlbnQgdmlhIEV2ZW50I3ByZXZlbnREZWZhdWx0KClcbiAqIHByZXZlbnRzIHRoZSBvcmlnaW5hbCBET00gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEludGVyYWN0aW9uRXZlbnRzKGV2ZW50QnVzLCBlbGVtZW50UmVnaXN0cnksIHN0eWxlcykge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvKipcbiAgICogRmlyZSBhbiBpbnRlcmFjdGlvbiBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgbG9jYWwgZXZlbnQgbmFtZSwgZS5nLiBlbGVtZW50LmNsaWNrLlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50fSBldmVudCBuYXRpdmUgZXZlbnRcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gW2VsZW1lbnRdIHRoZSBkaWFncmFtIGVsZW1lbnQgdG8gZW1pdCB0aGUgZXZlbnQgb247XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0cyB0byB0aGUgZXZlbnQgdGFyZ2V0XG4gICAqL1xuICBmdW5jdGlvbiBmaXJlKHR5cGUsIGV2ZW50LCBlbGVtZW50KSB7XG5cbiAgICBpZiAoaXNJZ25vcmVkKHR5cGUsIGV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXQsIGdmeCwgcmV0dXJuVmFsdWU7XG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHRhcmdldCA9IGV2ZW50LmRlbGVnYXRlVGFyZ2V0IHx8IGV2ZW50LnRhcmdldDtcblxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBnZnggPSB0YXJnZXQ7XG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50UmVnaXN0cnkuZ2V0KGdmeCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGdmeCA9IGVsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhlbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAoIWdmeCB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVyblZhbHVlID0gZXZlbnRCdXMuZmlyZSh0eXBlLCB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgZ2Z4OiBnZngsXG4gICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgIH0pO1xuXG4gICAgaWYgKHJldHVyblZhbHVlID09PSBmYWxzZSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE8obmlra3UpOiBkb2N1bWVudCB0aGlzXG4gIHZhciBoYW5kbGVycyA9IHt9O1xuXG4gIGZ1bmN0aW9uIG1vdXNlSGFuZGxlcihsb2NhbEV2ZW50TmFtZSkge1xuICAgIHJldHVybiBoYW5kbGVyc1tsb2NhbEV2ZW50TmFtZV07XG4gIH1cblxuICBmdW5jdGlvbiBpc0lnbm9yZWQobG9jYWxFdmVudE5hbWUsIGV2ZW50KSB7XG5cbiAgICB2YXIgZmlsdGVyID0gaWdub3JlZEZpbHRlcnNbbG9jYWxFdmVudE5hbWVdIHx8IGlzUHJpbWFyeUJ1dHRvbjtcblxuICAgIC8vIG9ubHkgcmVhY3Qgb24gbGVmdCBtb3VzZSBidXR0b24gaW50ZXJhY3Rpb25zXG4gICAgLy8gZXhjZXB0IGZvciBpbnRlcmFjdGlvbiBldmVudHMgdGhhdCBhcmUgZW5hYmxlZFxuICAgIC8vIGZvciBzZWN1bmRhcnkgbW91c2UgYnV0dG9uXG4gICAgcmV0dXJuICFmaWx0ZXIoZXZlbnQpO1xuICB9XG5cbiAgdmFyIGJpbmRpbmdzID0ge1xuICAgIGNsaWNrOiAnZWxlbWVudC5jbGljaycsXG4gICAgY29udGV4dG1lbnU6ICdlbGVtZW50LmNvbnRleHRtZW51JyxcbiAgICBkYmxjbGljazogJ2VsZW1lbnQuZGJsY2xpY2snLFxuICAgIG1vdXNlZG93bjogJ2VsZW1lbnQubW91c2Vkb3duJyxcbiAgICBtb3VzZW1vdmU6ICdlbGVtZW50Lm1vdXNlbW92ZScsXG4gICAgbW91c2VvdmVyOiAnZWxlbWVudC5ob3ZlcicsXG4gICAgbW91c2VvdXQ6ICdlbGVtZW50Lm91dCcsXG4gICAgbW91c2V1cDogJ2VsZW1lbnQubW91c2V1cCcsXG4gIH07XG5cbiAgdmFyIGlnbm9yZWRGaWx0ZXJzID0ge1xuICAgICdlbGVtZW50LmNvbnRleHRtZW51JzogYWxsb3dBbGxcbiAgfTtcblxuXG4gIC8vIG1hbnVhbCBldmVudCB0cmlnZ2VyIC8vLy8vLy8vLy9cblxuICAvKipcbiAgICogVHJpZ2dlciBhbiBpbnRlcmFjdGlvbiBldmVudCAoYmFzZWQgb24gYSBuYXRpdmUgZG9tIGV2ZW50KVxuICAgKiBvbiB0aGUgdGFyZ2V0IHNoYXBlIG9yIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgdGhlIG5hbWUgb2YgdGhlIHRyaWdnZXJlZCBET00gZXZlbnRcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudFxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSB0YXJnZXRFbGVtZW50XG4gICAqL1xuICBmdW5jdGlvbiB0cmlnZ2VyTW91c2VFdmVudChldmVudE5hbWUsIGV2ZW50LCB0YXJnZXRFbGVtZW50KSB7XG5cbiAgICAvLyBpLmUuIGVsZW1lbnQubW91c2Vkb3duLi4uXG4gICAgdmFyIGxvY2FsRXZlbnROYW1lID0gYmluZGluZ3NbZXZlbnROYW1lXTtcblxuICAgIGlmICghbG9jYWxFdmVudE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5tYXBwZWQgRE9NIGV2ZW50IG5hbWUgPCcgKyBldmVudE5hbWUgKyAnPicpO1xuICAgIH1cblxuICAgIHJldHVybiBmaXJlKGxvY2FsRXZlbnROYW1lLCBldmVudCwgdGFyZ2V0RWxlbWVudCk7XG4gIH1cblxuXG4gIHZhciBFTEVNRU5UX1NFTEVDVE9SID0gJ3N2ZywgLmRqcy1lbGVtZW50JztcblxuICAvLyBldmVudCBoYW5kbGluZyAvLy8vLy8vXG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJFdmVudChub2RlLCBldmVudCwgbG9jYWxFdmVudCwgaWdub3JlZEZpbHRlcikge1xuXG4gICAgdmFyIGhhbmRsZXIgPSBoYW5kbGVyc1tsb2NhbEV2ZW50XSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBmaXJlKGxvY2FsRXZlbnQsIGV2ZW50KTtcbiAgICB9O1xuXG4gICAgaWYgKGlnbm9yZWRGaWx0ZXIpIHtcbiAgICAgIGlnbm9yZWRGaWx0ZXJzW2xvY2FsRXZlbnRdID0gaWdub3JlZEZpbHRlcjtcbiAgICB9XG5cbiAgICBoYW5kbGVyLiRkZWxlZ2F0ZSA9IGRvbURlbGVnYXRlLmJpbmQobm9kZSwgRUxFTUVOVF9TRUxFQ1RPUiwgZXZlbnQsIGhhbmRsZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gdW5yZWdpc3RlckV2ZW50KG5vZGUsIGV2ZW50LCBsb2NhbEV2ZW50KSB7XG5cbiAgICB2YXIgaGFuZGxlciA9IG1vdXNlSGFuZGxlcihsb2NhbEV2ZW50KTtcblxuICAgIGlmICghaGFuZGxlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRvbURlbGVnYXRlLnVuYmluZChub2RlLCBldmVudCwgaGFuZGxlci4kZGVsZWdhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMoc3ZnKSB7XG4gICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24odmFsLCBrZXkpIHtcbiAgICAgIHJlZ2lzdGVyRXZlbnQoc3ZnLCBrZXksIHZhbCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB1bnJlZ2lzdGVyRXZlbnRzKHN2Zykge1xuICAgIGZvckVhY2goYmluZGluZ3MsIGZ1bmN0aW9uKHZhbCwga2V5KSB7XG4gICAgICB1bnJlZ2lzdGVyRXZlbnQoc3ZnLCBrZXksIHZhbCk7XG4gICAgfSk7XG4gIH1cblxuICBldmVudEJ1cy5vbignY2FudmFzLmRlc3Ryb3knLCBmdW5jdGlvbihldmVudCkge1xuICAgIHVucmVnaXN0ZXJFdmVudHMoZXZlbnQuc3ZnKTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NhbnZhcy5pbml0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZWdpc3RlckV2ZW50cyhldmVudC5zdmcpO1xuICB9KTtcblxuXG4gIC8vIGhpdCBib3ggdXBkYXRpbmcgLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGV2ZW50QnVzLm9uKFsgJ3NoYXBlLmFkZGVkJywgJ2Nvbm5lY3Rpb24uYWRkZWQnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50LFxuICAgICAgICBnZnggPSBldmVudC5nZng7XG5cbiAgICBldmVudEJ1cy5maXJlKCdpbnRlcmFjdGlvbkV2ZW50cy5jcmVhdGVIaXQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIGdmeDogZ2Z4IH0pO1xuICB9KTtcblxuICAvLyBVcGRhdGUgZGpzLWhpdCBvbiBjaGFuZ2UuXG4gIC8vIEEgbG93IHByaW9ydGl0eSBpcyBuZWNlc3NhcnksIGJlY2F1c2UgZGpzLWhpdCBvZiBsYWJlbHMgaGFzIHRvIGJlIHVwZGF0ZWRcbiAgLy8gYWZ0ZXIgdGhlIGxhYmVsIGJvdW5kcyBoYXZlIGJlZW4gdXBkYXRlZCBpbiB0aGUgcmVuZGVyZXIuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnc2hhcGUuY2hhbmdlZCcsXG4gICAgJ2Nvbm5lY3Rpb24uY2hhbmdlZCdcbiAgXSwgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50LFxuICAgICAgICBnZnggPSBldmVudC5nZng7XG5cbiAgICBldmVudEJ1cy5maXJlKCdpbnRlcmFjdGlvbkV2ZW50cy51cGRhdGVIaXQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIGdmeDogZ2Z4IH0pO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignaW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlSGl0JywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgZ2Z4ID0gZXZlbnQuZ2Z4O1xuXG4gICAgc2VsZi5jcmVhdGVEZWZhdWx0SGl0KGVsZW1lbnQsIGdmeCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdpbnRlcmFjdGlvbkV2ZW50cy51cGRhdGVIaXQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgZ2Z4ID0gZXZlbnQuZ2Z4O1xuXG4gICAgc2VsZi51cGRhdGVEZWZhdWx0SGl0KGVsZW1lbnQsIGdmeCk7XG4gIH0pO1xuXG5cbiAgLy8gaGl0IHN0eWxlcyAvLy8vLy8vLy8vLy9cblxuICB2YXIgU1RST0tFX0hJVF9TVFlMRSA9IGNyZWF0ZUhpdFN0eWxlKCdkanMtaGl0IGRqcy1oaXQtc3Ryb2tlJyk7XG5cbiAgdmFyIENMSUNLX1NUUk9LRV9ISVRfU1RZTEUgPSBjcmVhdGVIaXRTdHlsZSgnZGpzLWhpdCBkanMtaGl0LWNsaWNrLXN0cm9rZScpO1xuXG4gIHZhciBBTExfSElUX1NUWUxFID0gY3JlYXRlSGl0U3R5bGUoJ2Rqcy1oaXQgZGpzLWhpdC1hbGwnKTtcblxuICB2YXIgSElUX1RZUEVTID0ge1xuICAgICdhbGwnOiBBTExfSElUX1NUWUxFLFxuICAgICdjbGljay1zdHJva2UnOiBDTElDS19TVFJPS0VfSElUX1NUWUxFLFxuICAgICdzdHJva2UnOiBTVFJPS0VfSElUX1NUWUxFXG4gIH07XG5cbiAgZnVuY3Rpb24gY3JlYXRlSGl0U3R5bGUoY2xhc3NOYW1lcywgYXR0cnMpIHtcblxuICAgIGF0dHJzID0gYXNzaWduKHtcbiAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgIHN0cm9rZVdpZHRoOiAxNVxuICAgIH0sIGF0dHJzIHx8IHt9KTtcblxuICAgIHJldHVybiBzdHlsZXMuY2xzKGNsYXNzTmFtZXMsIFsgJ25vLWZpbGwnLCAnbm8tYm9yZGVyJyBdLCBhdHRycyk7XG4gIH1cblxuXG4gIC8vIHN0eWxlIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vXG5cbiAgZnVuY3Rpb24gYXBwbHlTdHlsZShoaXQsIHR5cGUpIHtcblxuICAgIHZhciBhdHRycyA9IEhJVF9UWVBFU1t0eXBlXTtcblxuICAgIGlmICghYXR0cnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBoaXQgdHlwZSA8JyArIHR5cGUgKyAnPicpO1xuICAgIH1cblxuICAgIHN2Z0F0dHIoaGl0LCBhdHRycyk7XG5cbiAgICByZXR1cm4gaGl0O1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwZW5kSGl0KGdmeCwgaGl0KSB7XG4gICAgc3ZnQXBwZW5kKGdmeCwgaGl0KTtcbiAgfVxuXG5cbiAgLy8gQVBJXG5cbiAgLyoqXG4gICAqIFJlbW92ZSBoaW50cyBvbiB0aGUgZ2l2ZW4gZ3JhcGhpY3MuXG4gICAqXG4gICAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gZ2Z4XG4gICAqL1xuICB0aGlzLnJlbW92ZUhpdHMgPSBmdW5jdGlvbihnZngpIHtcbiAgICB2YXIgaGl0cyA9IGRvbVF1ZXJ5QWxsKCcuZGpzLWhpdCcsIGdmeCk7XG5cbiAgICBmb3JFYWNoKGhpdHMsIHN2Z1JlbW92ZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBkZWZhdWx0IGhpdCBmb3IgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtTVkdFbGVtZW50fSBnZnhcbiAgICpcbiAgICogQHJldHVybiB7U1ZHRWxlbWVudH0gY3JlYXRlZCBoaXRcbiAgICovXG4gIHRoaXMuY3JlYXRlRGVmYXVsdEhpdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGdmeCkge1xuICAgIHZhciB3YXlwb2ludHMgPSBlbGVtZW50LndheXBvaW50cyxcbiAgICAgICAgaXNGcmFtZSA9IGVsZW1lbnQuaXNGcmFtZSxcbiAgICAgICAgYm94VHlwZTtcblxuICAgIGlmICh3YXlwb2ludHMpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVdheXBvaW50c0hpdChnZngsIHdheXBvaW50cyk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgYm94VHlwZSA9IGlzRnJhbWUgPyAnc3Ryb2tlJyA6ICdhbGwnO1xuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVCb3hIaXQoZ2Z4LCBib3hUeXBlLCB7XG4gICAgICAgIHdpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBoaXRzIGZvciB0aGUgZ2l2ZW4gd2F5cG9pbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGdmeFxuICAgKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gd2F5cG9pbnRzXG4gICAqXG4gICAqIEByZXR1cm4ge1NWR0VsZW1lbnR9XG4gICAqL1xuICB0aGlzLmNyZWF0ZVdheXBvaW50c0hpdCA9IGZ1bmN0aW9uKGdmeCwgd2F5cG9pbnRzKSB7XG5cbiAgICB2YXIgaGl0ID0gY3JlYXRlTGluZSh3YXlwb2ludHMpO1xuXG4gICAgYXBwbHlTdHlsZShoaXQsICdzdHJva2UnKTtcblxuICAgIGFwcGVuZEhpdChnZngsIGhpdCk7XG5cbiAgICByZXR1cm4gaGl0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgaGl0cyBmb3IgYSBib3guXG4gICAqXG4gICAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gZ2Z4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoaXRUeXBlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyc1xuICAgKlxuICAgKiBAcmV0dXJuIHtTVkdFbGVtZW50fVxuICAgKi9cbiAgdGhpcy5jcmVhdGVCb3hIaXQgPSBmdW5jdGlvbihnZngsIHR5cGUsIGF0dHJzKSB7XG5cbiAgICBhdHRycyA9IGFzc2lnbih7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH0sIGF0dHJzKTtcblxuICAgIHZhciBoaXQgPSBzdmdDcmVhdGUoJ3JlY3QnKTtcblxuICAgIGFwcGx5U3R5bGUoaGl0LCB0eXBlKTtcblxuICAgIHN2Z0F0dHIoaGl0LCBhdHRycyk7XG5cbiAgICBhcHBlbmRIaXQoZ2Z4LCBoaXQpO1xuXG4gICAgcmV0dXJuIGhpdDtcbiAgfTtcblxuICAvKipcbiAgICogVXBkYXRlIGRlZmF1bHQgaGl0IG9mIHRoZSBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0gIHtTVkdFbGVtZW50fSBnZnhcbiAgICpcbiAgICogQHJldHVybiB7U1ZHRWxlbWVudH0gdXBkYXRlZCBoaXRcbiAgICovXG4gIHRoaXMudXBkYXRlRGVmYXVsdEhpdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGdmeCkge1xuXG4gICAgdmFyIGhpdCA9IGRvbVF1ZXJ5KCcuZGpzLWhpdCcsIGdmeCk7XG5cbiAgICBpZiAoIWhpdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50LndheXBvaW50cykge1xuICAgICAgdXBkYXRlTGluZShoaXQsIGVsZW1lbnQud2F5cG9pbnRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3ZnQXR0cihoaXQsIHtcbiAgICAgICAgd2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIH07XG5cbiAgdGhpcy5maXJlID0gZmlyZTtcblxuICB0aGlzLnRyaWdnZXJNb3VzZUV2ZW50ID0gdHJpZ2dlck1vdXNlRXZlbnQ7XG5cbiAgdGhpcy5tb3VzZUhhbmRsZXIgPSBtb3VzZUhhbmRsZXI7XG5cbiAgdGhpcy5yZWdpc3RlckV2ZW50ID0gcmVnaXN0ZXJFdmVudDtcbiAgdGhpcy51bnJlZ2lzdGVyRXZlbnQgPSB1bnJlZ2lzdGVyRXZlbnQ7XG59XG5cblxuSW50ZXJhY3Rpb25FdmVudHMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdzdHlsZXMnXG5dO1xuXG5cbi8qKlxuICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBtb3VzZSBob3ZlcmVkIG92ZXIgYW4gZWxlbWVudFxuICpcbiAqIEBldmVudCBlbGVtZW50LmhvdmVyXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gZ2Z4XG4gKiBAcHJvcGVydHkge0V2ZW50fSBvcmlnaW5hbEV2ZW50XG4gKi9cblxuLyoqXG4gKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIG1vdXNlIGhhcyBsZWZ0IGFuIGVsZW1lbnRcbiAqXG4gKiBAZXZlbnQgZWxlbWVudC5vdXRcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuXG4vKipcbiAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgbW91c2UgaGFzIGNsaWNrZWQgYW4gZWxlbWVudFxuICpcbiAqIEBldmVudCBlbGVtZW50LmNsaWNrXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gZ2Z4XG4gKiBAcHJvcGVydHkge0V2ZW50fSBvcmlnaW5hbEV2ZW50XG4gKi9cblxuLyoqXG4gKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIG1vdXNlIGhhcyBkb3VibGUgY2xpY2tlZCBhbiBlbGVtZW50XG4gKlxuICogQGV2ZW50IGVsZW1lbnQuZGJsY2xpY2tcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuXG4vKipcbiAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgbW91c2UgaGFzIGdvbmUgZG93biBvbiBhbiBlbGVtZW50LlxuICpcbiAqIEBldmVudCBlbGVtZW50Lm1vdXNlZG93blxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IGdmeFxuICogQHByb3BlcnR5IHtFdmVudH0gb3JpZ2luYWxFdmVudFxuICovXG5cbi8qKlxuICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBtb3VzZSBoYXMgZ29uZSB1cCBvbiBhbiBlbGVtZW50LlxuICpcbiAqIEBldmVudCBlbGVtZW50Lm1vdXNldXBcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuXG4vKipcbiAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgY29udGV4dCBtZW51IGFjdGlvbiBpcyB0cmlnZ2VyZWRcbiAqIHZpYSBtb3VzZSBvciB0b3VjaCBjb250cm9scy5cbiAqXG4gKiBAZXZlbnQgZWxlbWVudC5jb250ZXh0bWVudVxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IGdmeFxuICogQHByb3BlcnR5IHtFdmVudH0gb3JpZ2luYWxFdmVudFxuICovIiwiaW1wb3J0IEludGVyYWN0aW9uRXZlbnRzIGZyb20gJy4vSW50ZXJhY3Rpb25FdmVudHMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdpbnRlcmFjdGlvbkV2ZW50cycgXSxcbiAgaW50ZXJhY3Rpb25FdmVudHM6IFsgJ3R5cGUnLCBJbnRlcmFjdGlvbkV2ZW50cyBdXG59OyIsImltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxudmFyIERFRkFVTFRfQ09ORklHID0ge1xuICBtb3ZlU3BlZWQ6IDEsXG4gIG1vdmVTcGVlZEFjY2VsZXJhdGVkOiAxMFxufTtcblxudmFyIEhJR0hFUl9QUklPUklUWSA9IDE1MDA7XG5cbnZhciBMRUZUID0gJ2xlZnQnO1xudmFyIFVQID0gJ3VwJztcbnZhciBSSUdIVCA9ICdyaWdodCc7XG52YXIgRE9XTiA9ICdkb3duJztcblxudmFyIEtFWV9UT19ESVJFQ1RJT04gPSB7XG4gIEFycm93TGVmdDogTEVGVCxcbiAgTGVmdDogTEVGVCxcbiAgQXJyb3dVcDogVVAsXG4gIFVwOiBVUCxcbiAgQXJyb3dSaWdodDogUklHSFQsXG4gIFJpZ2h0OiBSSUdIVCxcbiAgQXJyb3dEb3duOiBET1dOLFxuICBEb3duOiBET1dOXG59O1xuXG52YXIgRElSRUNUSU9OU19ERUxUQSA9IHtcbiAgbGVmdDogZnVuY3Rpb24oc3BlZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogLXNwZWVkLFxuICAgICAgeTogMFxuICAgIH07XG4gIH0sXG4gIHVwOiBmdW5jdGlvbihzcGVlZCkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogLXNwZWVkXG4gICAgfTtcbiAgfSxcbiAgcmlnaHQ6IGZ1bmN0aW9uKHNwZWVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHNwZWVkLFxuICAgICAgeTogMFxuICAgIH07XG4gIH0sXG4gIGRvd246IGZ1bmN0aW9uKHNwZWVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiBzcGVlZFxuICAgIH07XG4gIH1cbn07XG5cblxuLyoqXG4gKiBFbmFibGVzIHRvIG1vdmUgc2VsZWN0aW9uIHdpdGgga2V5Ym9hcmQgYXJyb3dzLlxuICogVXNlIHdpdGggU2hpZnQgZm9yIG1vZGlmaWVkIHNwZWVkIChkZWZhdWx0PTEsIHdpdGggU2hpZnQ9MTApLlxuICogUHJlc3NlZCBDbWQvQ3RybCB0dXJucyB0aGUgZmVhdHVyZSBvZmYuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZ1xuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcubW92ZVNwZWVkPTFdXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmZpZy5tb3ZlU3BlZWRBY2NlbGVyYXRlZD0xMF1cbiAqIEBwYXJhbSB7S2V5Ym9hcmR9IGtleWJvYXJkXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICogQHBhcmFtIHtTZWxlY3Rpb259IHNlbGVjdGlvblxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBLZXlib2FyZE1vdmVTZWxlY3Rpb24oXG4gICAgY29uZmlnLFxuICAgIGtleWJvYXJkLFxuICAgIG1vZGVsaW5nLFxuICAgIHJ1bGVzLFxuICAgIHNlbGVjdGlvblxuKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMuX2NvbmZpZyA9IGFzc2lnbih7fSwgREVGQVVMVF9DT05GSUcsIGNvbmZpZyB8fCB7fSk7XG5cbiAga2V5Ym9hcmQuYWRkTGlzdGVuZXIoSElHSEVSX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGtleUV2ZW50ID0gZXZlbnQua2V5RXZlbnQ7XG5cbiAgICB2YXIgZGlyZWN0aW9uID0gS0VZX1RPX0RJUkVDVElPTltrZXlFdmVudC5rZXldO1xuXG4gICAgaWYgKCFkaXJlY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNDbWQoa2V5RXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFjY2VsZXJhdGVkID0ga2V5Ym9hcmQuaXNTaGlmdChrZXlFdmVudCk7XG5cbiAgICBzZWxmLm1vdmVTZWxlY3Rpb24oZGlyZWN0aW9uLCBhY2NlbGVyYXRlZCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG5cblxuICAvKipcbiAgICogTW92ZSBzZWxlY3RlZCBlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLFxuICAgKiBvcHRpb25hbGx5IHNwZWNpZnlpbmcgYWNjZWxlcmF0ZWQgbW92ZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaXJlY3Rpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbYWNjZWxlcmF0ZWQ9ZmFsc2VdXG4gICAqL1xuICB0aGlzLm1vdmVTZWxlY3Rpb24gPSBmdW5jdGlvbihkaXJlY3Rpb24sIGFjY2VsZXJhdGVkKSB7XG5cbiAgICB2YXIgc2VsZWN0ZWRFbGVtZW50cyA9IHNlbGVjdGlvbi5nZXQoKTtcblxuICAgIGlmICghc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc3BlZWQgPSB0aGlzLl9jb25maWdbXG4gICAgICBhY2NlbGVyYXRlZCA/XG4gICAgICAgICdtb3ZlU3BlZWRBY2NlbGVyYXRlZCcgOlxuICAgICAgICAnbW92ZVNwZWVkJ1xuICAgIF07XG5cbiAgICB2YXIgZGVsdGEgPSBESVJFQ1RJT05TX0RFTFRBW2RpcmVjdGlvbl0oc3BlZWQpO1xuXG4gICAgdmFyIGNhbk1vdmUgPSBydWxlcy5hbGxvd2VkKCdlbGVtZW50cy5tb3ZlJywge1xuICAgICAgc2hhcGVzOiBzZWxlY3RlZEVsZW1lbnRzXG4gICAgfSk7XG5cbiAgICBpZiAoY2FuTW92ZSkge1xuICAgICAgbW9kZWxpbmcubW92ZUVsZW1lbnRzKHNlbGVjdGVkRWxlbWVudHMsIGRlbHRhKTtcbiAgICB9XG4gIH07XG5cbn1cblxuS2V5Ym9hcmRNb3ZlU2VsZWN0aW9uLiRpbmplY3QgPSBbXG4gICdjb25maWcua2V5Ym9hcmRNb3ZlU2VsZWN0aW9uJyxcbiAgJ2tleWJvYXJkJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3J1bGVzJyxcbiAgJ3NlbGVjdGlvbidcbl07IiwiaW1wb3J0IEtleWJvYXJkTW9kdWxlIGZyb20gJy4uL2tleWJvYXJkJztcbmltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnLi4vc2VsZWN0aW9uJztcblxuaW1wb3J0IEtleWJvYXJkTW92ZVNlbGVjdGlvbiBmcm9tICcuL0tleWJvYXJkTW92ZVNlbGVjdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBLZXlib2FyZE1vZHVsZSxcbiAgICBTZWxlY3Rpb25Nb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFtcbiAgICAna2V5Ym9hcmRNb3ZlU2VsZWN0aW9uJ1xuICBdLFxuICBrZXlib2FyZE1vdmVTZWxlY3Rpb246IFsgJ3R5cGUnLCBLZXlib2FyZE1vdmVTZWxlY3Rpb24gXVxufTtcbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBldmVudCBhcyBkb21FdmVudCxcbiAgbWF0Y2hlcyBhcyBkb21NYXRjaGVzXG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICBoYXNNb2RpZmllcixcbiAgaXNDbWQsXG4gIGlzS2V5LFxuICBpc1NoaWZ0XG59IGZyb20gJy4vS2V5Ym9hcmRVdGlsJztcblxudmFyIEtFWURPV05fRVZFTlQgPSAna2V5Ym9hcmQua2V5ZG93bicsXG4gICAgS0VZVVBfRVZFTlQgPSAna2V5Ym9hcmQua2V5dXAnO1xuXG52YXIgREVGQVVMVF9QUklPUklUWSA9IDEwMDA7XG5cblxuLyoqXG4gKiBBIGtleWJvYXJkIGFic3RyYWN0aW9uIHRoYXQgbWF5IGJlIGFjdGl2YXRlZCBhbmRcbiAqIGRlYWN0aXZhdGVkIGJ5IHVzZXJzIGF0IHdpbGwsIGNvbnN1bWluZyBrZXkgZXZlbnRzXG4gKiBhbmQgdHJpZ2dlcmluZyBkaWFncmFtIGFjdGlvbnMuXG4gKlxuICogRm9yIGtleXMgcHJlc3NlZCBkb3duLCBrZXlib2FyZCBmaXJlcyBga2V5Ym9hcmQua2V5ZG93bmAgZXZlbnQuXG4gKiBUaGUgZXZlbnQgY29udGV4dCBjb250YWlucyBvbmUgZmllbGQgd2hpY2ggaXMgYEtleWJvYXJkRXZlbnRgIGV2ZW50LlxuICpcbiAqIFRoZSBpbXBsZW1lbnRhdGlvbiBmaXJlcyB0aGUgZm9sbG93aW5nIGtleSBldmVudHMgdGhhdCBhbGxvd1xuICogb3RoZXIgY29tcG9uZW50cyB0byBob29rIGludG8ga2V5IGhhbmRsaW5nOlxuICpcbiAqICAtIGtleWJvYXJkLmJpbmRcbiAqICAtIGtleWJvYXJkLnVuYmluZFxuICogIC0ga2V5Ym9hcmQuaW5pdFxuICogIC0ga2V5Ym9hcmQuZGVzdHJveVxuICpcbiAqIEFsbCBldmVudHMgY29udGFpbiBvbmUgZmllbGQgd2hpY2ggaXMgbm9kZS5cbiAqXG4gKiBBIGRlZmF1bHQgYmluZGluZyBmb3IgdGhlIGtleWJvYXJkIG1heSBiZSBzcGVjaWZpZWQgdmlhIHRoZVxuICogYGtleWJvYXJkLmJpbmRUb2AgY29uZmlndXJhdGlvbiBvcHRpb24uXG4gKlxuICogQHBhcmFtIHtDb25maWd9IGNvbmZpZ1xuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gS2V5Ym9hcmQoY29uZmlnLCBldmVudEJ1cykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdGhpcy5fY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuXG4gIHRoaXMuX2tleWRvd25IYW5kbGVyID0gdGhpcy5fa2V5ZG93bkhhbmRsZXIuYmluZCh0aGlzKTtcbiAgdGhpcy5fa2V5dXBIYW5kbGVyID0gdGhpcy5fa2V5dXBIYW5kbGVyLmJpbmQodGhpcyk7XG5cbiAgLy8gcHJvcGVybHkgY2xlYW4gZG9tIHJlZ2lzdHJhdGlvbnNcbiAgZXZlbnRCdXMub24oJ2RpYWdyYW0uZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuX2ZpcmUoJ2Rlc3Ryb3knKTtcblxuICAgIHNlbGYudW5iaW5kKCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdkaWFncmFtLmluaXQnLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLl9maXJlKCdpbml0Jyk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdhdHRhY2gnLCBmdW5jdGlvbigpIHtcbiAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5iaW5kVG8pIHtcbiAgICAgIHNlbGYuYmluZChjb25maWcuYmluZFRvKTtcbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdkZXRhY2gnLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLnVuYmluZCgpO1xuICB9KTtcbn1cblxuS2V5Ym9hcmQuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5rZXlib2FyZCcsXG4gICdldmVudEJ1cydcbl07XG5cbktleWJvYXJkLnByb3RvdHlwZS5fa2V5ZG93bkhhbmRsZXIgPSBmdW5jdGlvbihldmVudCkge1xuICB0aGlzLl9rZXlIYW5kbGVyKGV2ZW50LCBLRVlET1dOX0VWRU5UKTtcbn07XG5cbktleWJvYXJkLnByb3RvdHlwZS5fa2V5dXBIYW5kbGVyID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgdGhpcy5fa2V5SGFuZGxlcihldmVudCwgS0VZVVBfRVZFTlQpO1xufTtcblxuS2V5Ym9hcmQucHJvdG90eXBlLl9rZXlIYW5kbGVyID0gZnVuY3Rpb24oZXZlbnQsIHR5cGUpIHtcbiAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCxcbiAgICAgIGV2ZW50QnVzUmVzdWx0O1xuXG4gIGlmIChpc0lucHV0KHRhcmdldCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY29udGV4dCA9IHtcbiAgICBrZXlFdmVudDogZXZlbnRcbiAgfTtcblxuICBldmVudEJ1c1Jlc3VsdCA9IHRoaXMuX2V2ZW50QnVzLmZpcmUodHlwZSB8fCBLRVlET1dOX0VWRU5ULCBjb250ZXh0KTtcblxuICBpZiAoZXZlbnRCdXNSZXN1bHQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59O1xuXG5LZXlib2FyZC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKG5vZGUpIHtcblxuICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUga2V5Ym9hcmQgaXMgb25seSBib3VuZCBvbmNlIHRvIHRoZSBET01cbiAgdGhpcy51bmJpbmQoKTtcblxuICB0aGlzLl9ub2RlID0gbm9kZTtcblxuICAvLyBiaW5kIGtleSBldmVudHNcbiAgZG9tRXZlbnQuYmluZChub2RlLCAna2V5ZG93bicsIHRoaXMuX2tleWRvd25IYW5kbGVyLCB0cnVlKTtcbiAgZG9tRXZlbnQuYmluZChub2RlLCAna2V5dXAnLCB0aGlzLl9rZXl1cEhhbmRsZXIsIHRydWUpO1xuXG4gIHRoaXMuX2ZpcmUoJ2JpbmQnKTtcbn07XG5cbktleWJvYXJkLnByb3RvdHlwZS5nZXRCaW5kaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9ub2RlO1xufTtcblxuS2V5Ym9hcmQucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbm9kZSA9IHRoaXMuX25vZGU7XG5cbiAgaWYgKG5vZGUpIHtcbiAgICB0aGlzLl9maXJlKCd1bmJpbmQnKTtcblxuICAgIC8vIHVuYmluZCBrZXkgZXZlbnRzXG4gICAgZG9tRXZlbnQudW5iaW5kKG5vZGUsICdrZXlkb3duJywgdGhpcy5fa2V5ZG93bkhhbmRsZXIsIHRydWUpO1xuICAgIGRvbUV2ZW50LnVuYmluZChub2RlLCAna2V5dXAnLCB0aGlzLl9rZXl1cEhhbmRsZXIsIHRydWUpO1xuICB9XG5cbiAgdGhpcy5fbm9kZSA9IG51bGw7XG59O1xuXG5LZXlib2FyZC5wcm90b3R5cGUuX2ZpcmUgPSBmdW5jdGlvbihldmVudCkge1xuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdrZXlib2FyZC4nICsgZXZlbnQsIHsgbm9kZTogdGhpcy5fbm9kZSB9KTtcbn07XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZnVuY3Rpb24gdGhhdCBpcyBub3RpZmllZCB3aXRoIGBLZXlib2FyZEV2ZW50YCB3aGVuZXZlclxuICogdGhlIGtleWJvYXJkIGlzIGJvdW5kIGFuZCB0aGUgdXNlciBwcmVzc2VzIGEga2V5LiBJZiBubyBwcmlvcml0eSBpc1xuICogcHJvdmlkZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDEwMDAgaXMgdXNlZC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByaW9yaXR5XVxuICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKi9cbktleWJvYXJkLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uKHByaW9yaXR5LCBsaXN0ZW5lciwgdHlwZSkge1xuICBpZiAoaXNGdW5jdGlvbihwcmlvcml0eSkpIHtcbiAgICB0eXBlID0gbGlzdGVuZXI7XG4gICAgbGlzdGVuZXIgPSBwcmlvcml0eTtcbiAgICBwcmlvcml0eSA9IERFRkFVTFRfUFJJT1JJVFk7XG4gIH1cblxuICB0aGlzLl9ldmVudEJ1cy5vbih0eXBlIHx8IEtFWURPV05fRVZFTlQsIHByaW9yaXR5LCBsaXN0ZW5lcik7XG59O1xuXG5LZXlib2FyZC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbihsaXN0ZW5lciwgdHlwZSkge1xuICB0aGlzLl9ldmVudEJ1cy5vZmYodHlwZSB8fCBLRVlET1dOX0VWRU5ULCBsaXN0ZW5lcik7XG59O1xuXG5LZXlib2FyZC5wcm90b3R5cGUuaGFzTW9kaWZpZXIgPSBoYXNNb2RpZmllcjtcbktleWJvYXJkLnByb3RvdHlwZS5pc0NtZCA9IGlzQ21kO1xuS2V5Ym9hcmQucHJvdG90eXBlLmlzU2hpZnQgPSBpc1NoaWZ0O1xuS2V5Ym9hcmQucHJvdG90eXBlLmlzS2V5ID0gaXNLZXk7XG5cblxuXG4vLyBoZWxwZXJzIC8vLy8vLy9cblxuZnVuY3Rpb24gaXNJbnB1dCh0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldCAmJiAoZG9tTWF0Y2hlcyh0YXJnZXQsICdpbnB1dCwgdGV4dGFyZWEnKSB8fCB0YXJnZXQuY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpO1xufVxuIiwiaW1wb3J0IHtcbiAgaXNDbWQsXG4gIGlzS2V5LFxuICBpc1NoaWZ0XG59IGZyb20gJy4vS2V5Ym9hcmRVdGlsJztcblxudmFyIExPV19QUklPUklUWSA9IDUwMDtcblxuZXhwb3J0IHZhciBLRVlDT0RFX0MgPSA2NztcbmV4cG9ydCB2YXIgS0VZQ09ERV9WID0gODY7XG5leHBvcnQgdmFyIEtFWUNPREVfWSA9IDg5O1xuZXhwb3J0IHZhciBLRVlDT0RFX1ogPSA5MDtcblxuZXhwb3J0IHZhciBLRVlTX0NPUFkgPSBbJ2MnLCAnQycsIEtFWUNPREVfQyBdO1xuZXhwb3J0IHZhciBLRVlTX1BBU1RFID0gWyAndicsICdWJywgS0VZQ09ERV9WIF07XG5leHBvcnQgdmFyIEtFWVNfUkVETyA9IFsgJ3knLCAnWScsIEtFWUNPREVfWSBdO1xuZXhwb3J0IHZhciBLRVlTX1VORE8gPSBbICd6JywgJ1onLCBLRVlDT0RFX1ogXTtcblxuXG4vKipcbiAqIEFkZHMgZGVmYXVsdCBrZXlib2FyZCBiaW5kaW5ncy5cbiAqXG4gKiBUaGlzIGRvZXMgbm90IHB1bGwgaW4gYW55IGZlYXR1cmVzIHdpbGwgYmluZCBvbmx5IGFjdGlvbnMgdGhhdFxuICogaGF2ZSBwcmV2aW91c2x5IGJlZW4gcmVnaXN0ZXJlZCBhZ2FpbnN0IHRoZSBlZGl0b3JBY3Rpb25zIGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtLZXlib2FyZH0ga2V5Ym9hcmRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gS2V5Ym9hcmRCaW5kaW5ncyhldmVudEJ1cywga2V5Ym9hcmQpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRCdXMub24oJ2VkaXRvckFjdGlvbnMuaW5pdCcsIExPV19QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBlZGl0b3JBY3Rpb25zID0gZXZlbnQuZWRpdG9yQWN0aW9ucztcblxuICAgIHNlbGYucmVnaXN0ZXJCaW5kaW5ncyhrZXlib2FyZCwgZWRpdG9yQWN0aW9ucyk7XG4gIH0pO1xufVxuXG5LZXlib2FyZEJpbmRpbmdzLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdrZXlib2FyZCdcbl07XG5cblxuLyoqXG4gKiBSZWdpc3RlciBhdmFpbGFibGUga2V5Ym9hcmQgYmluZGluZ3MuXG4gKlxuICogQHBhcmFtIHtLZXlib2FyZH0ga2V5Ym9hcmRcbiAqIEBwYXJhbSB7RWRpdG9yQWN0aW9uc30gZWRpdG9yQWN0aW9uc1xuICovXG5LZXlib2FyZEJpbmRpbmdzLnByb3RvdHlwZS5yZWdpc3RlckJpbmRpbmdzID0gZnVuY3Rpb24oa2V5Ym9hcmQsIGVkaXRvckFjdGlvbnMpIHtcblxuICAvKipcbiAgICogQWRkIGtleWJvYXJkIGJpbmRpbmcgaWYgcmVzcGVjdGl2ZSBlZGl0b3IgYWN0aW9uXG4gICAqIGlzIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24gbmFtZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiB0aGF0IGltcGxlbWVudHMgdGhlIGtleSBiaW5kaW5nXG4gICAqL1xuICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihhY3Rpb24sIGZuKSB7XG5cbiAgICBpZiAoZWRpdG9yQWN0aW9ucy5pc1JlZ2lzdGVyZWQoYWN0aW9uKSkge1xuICAgICAga2V5Ym9hcmQuYWRkTGlzdGVuZXIoZm4pO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gdW5kb1xuICAvLyAoQ1RSTHxDTUQpICsgWlxuICBhZGRMaXN0ZW5lcigndW5kbycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoaXNDbWQoZXZlbnQpICYmICFpc1NoaWZ0KGV2ZW50KSAmJiBpc0tleShLRVlTX1VORE8sIGV2ZW50KSkge1xuICAgICAgZWRpdG9yQWN0aW9ucy50cmlnZ2VyKCd1bmRvJyk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcmVkb1xuICAvLyBDVFJMICsgWVxuICAvLyBDTUQgKyBTSElGVCArIFpcbiAgYWRkTGlzdGVuZXIoJ3JlZG8nLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGlzQ21kKGV2ZW50KSAmJiAoaXNLZXkoS0VZU19SRURPLCBldmVudCkgfHwgKGlzS2V5KEtFWVNfVU5ETywgZXZlbnQpICYmIGlzU2hpZnQoZXZlbnQpKSkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcigncmVkbycpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGNvcHlcbiAgLy8gQ1RSTC9DTUQgKyBDXG4gIGFkZExpc3RlbmVyKCdjb3B5JywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChpc0NtZChldmVudCkgJiYgaXNLZXkoS0VZU19DT1BZLCBldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignY29weScpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHBhc3RlXG4gIC8vIENUUkwvQ01EICsgVlxuICBhZGRMaXN0ZW5lcigncGFzdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGlzQ21kKGV2ZW50KSAmJiBpc0tleShLRVlTX1BBU1RFLCBldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcigncGFzdGUnKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyB6b29tIGluIG9uZSBzdGVwXG4gIC8vIENUUkwvQ01EICsgK1xuICBhZGRMaXN0ZW5lcignc3RlcFpvb20nLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGlzS2V5KFsgJysnLCAnQWRkJyBdLCBldmVudCkgJiYgaXNDbWQoZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ3N0ZXBab29tJywgeyB2YWx1ZTogMSB9KTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyB6b29tIG91dCBvbmUgc3RlcFxuICAvLyBDVFJMICsgLVxuICBhZGRMaXN0ZW5lcignc3RlcFpvb20nLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGlzS2V5KFsgJy0nLCAnU3VidHJhY3QnIF0sIGV2ZW50KSAmJiBpc0NtZChldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignc3RlcFpvb20nLCB7IHZhbHVlOiAtMSB9KTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyB6b29tIHRvIHRoZSBkZWZhdWx0IGxldmVsXG4gIC8vIENUUkwgKyAwXG4gIGFkZExpc3RlbmVyKCd6b29tJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChpc0tleSgnMCcsIGV2ZW50KSAmJiBpc0NtZChldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignem9vbScsIHsgdmFsdWU6IDEgfSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gZGVsZXRlIHNlbGVjdGVkIGVsZW1lbnRcbiAgLy8gREVMXG4gIGFkZExpc3RlbmVyKCdyZW1vdmVTZWxlY3Rpb24nLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGlzS2V5KFsgJ0RlbGV0ZScsICdEZWwnIF0sIGV2ZW50KSkge1xuICAgICAgZWRpdG9yQWN0aW9ucy50cmlnZ2VyKCdyZW1vdmVTZWxlY3Rpb24nKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbn07IiwiaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ21pbi1kYXNoJztcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgZXZlbnQgd2FzIHRyaWdnZXJlZCB3aXRoIGFueSBtb2RpZmllclxyXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaGFzTW9kaWZpZXIoZXZlbnQpIHtcclxuICByZXR1cm4gKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5hbHRLZXkpO1xyXG59XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQ21kKGV2ZW50KSB7XHJcblxyXG4gIC8vIGVuc3VyZSB3ZSBkb24ndCByZWFjdCB0byBBbHRHclxyXG4gIC8vIChtYXBwZWQgdG8gQ1RSTCArIEFMVClcclxuICBpZiAoZXZlbnQuYWx0S2V5KSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGlmIGtleSBwcmVzc2VkIGlzIG9uZSBvZiBwcm92aWRlZCBrZXlzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheTxzdHJpbmc+fSBrZXlzXHJcbiAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0tleShrZXlzLCBldmVudCkge1xyXG4gIGtleXMgPSBpc0FycmF5KGtleXMpID8ga2V5cyA6IFsga2V5cyBdO1xyXG5cclxuICByZXR1cm4ga2V5cy5pbmRleE9mKGV2ZW50LmtleSkgIT09IC0xIHx8IGtleXMuaW5kZXhPZihldmVudC5rZXlDb2RlKSAhPT0gLTE7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNTaGlmdChldmVudCkge1xyXG4gIHJldHVybiBldmVudC5zaGlmdEtleTtcclxufSIsImltcG9ydCBLZXlib2FyZCBmcm9tICcuL0tleWJvYXJkJztcbmltcG9ydCBLZXlib2FyZEJpbmRpbmdzIGZyb20gJy4vS2V5Ym9hcmRCaW5kaW5ncyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ2tleWJvYXJkJywgJ2tleWJvYXJkQmluZGluZ3MnIF0sXG4gIGtleWJvYXJkOiBbICd0eXBlJywgS2V5Ym9hcmQgXSxcbiAga2V5Ym9hcmRCaW5kaW5nczogWyAndHlwZScsIEtleWJvYXJkQmluZGluZ3MgXVxufTtcbiIsImltcG9ydCB7XG4gIGZvckVhY2gsXG4gIGZpbHRlclxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cyc7XG5cbnZhciBMT1dfUFJJT1JJVFkgPSAyNTAsXG4gICAgSElHSF9QUklPUklUWSA9IDE0MDA7XG5cbmltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICBpbmRleE9mIGFzIGNvbGxlY3Rpb25JZHhcbn0gZnJvbSAnLi4vLi4vdXRpbC9Db2xsZWN0aW9ucyc7XG5cbmltcG9ydCB7IHNhdmVDbGVhciB9IGZyb20gJy4uLy4uL3V0aWwvUmVtb3ZhbCc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnLi4vLi4vY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgbWFrZXMgc3VyZSBsYWJlbHMgYXJlIHByb3Blcmx5IG1vdmVkIHdpdGhcbiAqIHRoZWlyIGxhYmVsIHRhcmdldHMuXG4gKlxuICogQHBhcmFtIHtkaWRpLkluamVjdG9yfSBpbmplY3RvclxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExhYmVsU3VwcG9ydChpbmplY3RvciwgZXZlbnRCdXMsIG1vZGVsaW5nKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHZhciBtb3ZlUHJldmlldyA9IGluamVjdG9yLmdldCgnbW92ZVByZXZpZXcnLCBmYWxzZSk7XG5cbiAgLy8gcmVtb3ZlIGxhYmVscyBmcm9tIHRoZSBjb2xsZWN0aW9uIHRoYXQgYXJlIGJlaW5nXG4gIC8vIG1vdmVkIHdpdGggb3RoZXIgZWxlbWVudHMgYW55d2F5XG4gIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLnN0YXJ0JywgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzLFxuICAgICAgICB2YWxpZGF0ZWRTaGFwZXMgPSBjb250ZXh0LnZhbGlkYXRlZFNoYXBlcztcblxuICAgIGNvbnRleHQuc2hhcGVzID0gcmVtb3ZlTGFiZWxzKHNoYXBlcyk7XG4gICAgY29udGV4dC52YWxpZGF0ZWRTaGFwZXMgPSByZW1vdmVMYWJlbHModmFsaWRhdGVkU2hhcGVzKTtcbiAgfSk7XG5cbiAgLy8gYWRkIGxhYmVscyB0byB2aXN1YWwncyBncm91cFxuICBtb3ZlUHJldmlldyAmJiBldmVudEJ1cy5vbignc2hhcGUubW92ZS5zdGFydCcsIExPV19QUklPUklUWSwgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzO1xuXG4gICAgdmFyIGxhYmVscyA9IFtdO1xuXG4gICAgZm9yRWFjaChzaGFwZXMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgICAgZm9yRWFjaChlbGVtZW50LmxhYmVscywgZnVuY3Rpb24obGFiZWwpIHtcblxuICAgICAgICBpZiAoIWxhYmVsLmhpZGRlbiAmJiBjb250ZXh0LnNoYXBlcy5pbmRleE9mKGxhYmVsKSA9PT0gLTEpIHtcbiAgICAgICAgICBsYWJlbHMucHVzaChsYWJlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWxlbWVudC5sYWJlbFRhcmdldCkge1xuICAgICAgICAgIGxhYmVscy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZvckVhY2gobGFiZWxzLCBmdW5jdGlvbihsYWJlbCkge1xuICAgICAgbW92ZVByZXZpZXcubWFrZURyYWdnYWJsZShjb250ZXh0LCBsYWJlbCwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgfSk7XG5cbiAgLy8gYWRkIGFsbCBsYWJlbHMgdG8gbW92ZSBjbG9zdXJlXG4gIHRoaXMucHJlRXhlY3V0ZWQoJ2VsZW1lbnRzLm1vdmUnLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIGNsb3N1cmUgPSBjb250ZXh0LmNsb3N1cmUsXG4gICAgICAgIGVuY2xvc2VkRWxlbWVudHMgPSBjbG9zdXJlLmVuY2xvc2VkRWxlbWVudHM7XG5cbiAgICB2YXIgZW5jbG9zZWRMYWJlbHMgPSBbXTtcblxuICAgIC8vIGZpbmQgbGFiZWxzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mXG4gICAgLy8gbW92ZSBjbG9zdXJlIHlldCBhbmQgYWRkIHRoZW1cbiAgICBmb3JFYWNoKGVuY2xvc2VkRWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIGZvckVhY2goZWxlbWVudC5sYWJlbHMsIGZ1bmN0aW9uKGxhYmVsKSB7XG5cbiAgICAgICAgaWYgKCFlbmNsb3NlZEVsZW1lbnRzW2xhYmVsLmlkXSkge1xuICAgICAgICAgIGVuY2xvc2VkTGFiZWxzLnB1c2gobGFiZWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNsb3N1cmUuYWRkQWxsKGVuY2xvc2VkTGFiZWxzKTtcbiAgfSk7XG5cblxuICB0aGlzLnByZUV4ZWN1dGUoW1xuICAgICdjb25uZWN0aW9uLmRlbGV0ZScsXG4gICAgJ3NoYXBlLmRlbGV0ZSdcbiAgXSwgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmNvbm5lY3Rpb24gfHwgY29udGV4dC5zaGFwZTtcblxuICAgIHNhdmVDbGVhcihlbGVtZW50LmxhYmVscywgZnVuY3Rpb24obGFiZWwpIHtcbiAgICAgIG1vZGVsaW5nLnJlbW92ZVNoYXBlKGxhYmVsLCB7IG5lc3RlZDogdHJ1ZSB9KTtcbiAgICB9KTtcbiAgfSk7XG5cblxuICB0aGlzLmV4ZWN1dGUoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIGxhYmVsVGFyZ2V0ID0gc2hhcGUubGFiZWxUYXJnZXQ7XG5cbiAgICAvLyB1bnNldCBsYWJlbFRhcmdldFxuICAgIGlmIChsYWJlbFRhcmdldCkge1xuICAgICAgY29udGV4dC5sYWJlbFRhcmdldEluZGV4ID0gY29sbGVjdGlvbklkeChsYWJlbFRhcmdldC5sYWJlbHMsIHNoYXBlKTtcbiAgICAgIGNvbnRleHQubGFiZWxUYXJnZXQgPSBsYWJlbFRhcmdldDtcblxuICAgICAgc2hhcGUubGFiZWxUYXJnZXQgPSBudWxsO1xuICAgIH1cbiAgfSk7XG5cbiAgdGhpcy5yZXZlcnQoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIGxhYmVsVGFyZ2V0ID0gY29udGV4dC5sYWJlbFRhcmdldCxcbiAgICAgICAgbGFiZWxUYXJnZXRJbmRleCA9IGNvbnRleHQubGFiZWxUYXJnZXRJbmRleDtcblxuICAgIC8vIHJlc3RvcmUgbGFiZWxUYXJnZXRcbiAgICBpZiAobGFiZWxUYXJnZXQpIHtcbiAgICAgIGNvbGxlY3Rpb25BZGQobGFiZWxUYXJnZXQubGFiZWxzLCBzaGFwZSwgbGFiZWxUYXJnZXRJbmRleCk7XG5cbiAgICAgIHNoYXBlLmxhYmVsVGFyZ2V0ID0gbGFiZWxUYXJnZXQ7XG4gICAgfVxuICB9KTtcblxufVxuXG5pbmhlcml0cyhMYWJlbFN1cHBvcnQsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbkxhYmVsU3VwcG9ydC4kaW5qZWN0ID0gW1xuICAnaW5qZWN0b3InLFxuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbi8qKlxuICogUmV0dXJuIGEgZmlsdGVyZWQgbGlzdCBvZiBlbGVtZW50cyB0aGF0IGRvIG5vdFxuICogY29udGFpbiBhdHRhY2hlZCBlbGVtZW50cyB3aXRoIGhvc3RzIGJlaW5nIHBhcnRcbiAqIG9mIHRoZSBzZWxlY3Rpb24uXG4gKlxuICogQHBhcmFtICB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBlbGVtZW50c1xuICpcbiAqIEByZXR1cm4ge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZmlsdGVyZWRcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlTGFiZWxzKGVsZW1lbnRzKSB7XG5cbiAgcmV0dXJuIGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gICAgLy8gZmlsdGVyIG91dCBsYWJlbHMgdGhhdCBhcmUgbW92ZSB0b2dldGhlclxuICAgIC8vIHdpdGggdGhlaXIgbGFiZWwgdGFyZ2V0c1xuICAgIHJldHVybiBlbGVtZW50cy5pbmRleE9mKGVsZW1lbnQubGFiZWxUYXJnZXQpID09PSAtMTtcbiAgfSk7XG59XG4iLCJpbXBvcnQgTGFiZWxTdXBwb3J0IGZyb20gJy4vTGFiZWxTdXBwb3J0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAnbGFiZWxTdXBwb3J0J10sXG4gIGxhYmVsU3VwcG9ydDogWyAndHlwZScsIExhYmVsU3VwcG9ydCBdXG59O1xuIiwiaW1wb3J0IHsgdmFsdWVzIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBnZXRFbmNsb3NlZEVsZW1lbnRzIH0gZnJvbSAnLi4vLi4vdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCB7IGhhc1NlY29uZGFyeU1vZGlmaWVyIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb3VzZSc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZSxcbiAgcmVtb3ZlIGFzIHN2Z1JlbW92ZVxufSBmcm9tICd0aW55LXN2Zyc7XG5cbnZhciBMQVNTT19UT09MX0NVUlNPUiA9ICdjcm9zc2hhaXInO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExhc3NvVG9vbChcbiAgICBldmVudEJ1cywgY2FudmFzLCBkcmFnZ2luZyxcbiAgICBlbGVtZW50UmVnaXN0cnksIHNlbGVjdGlvbiwgdG9vbE1hbmFnZXIpIHtcblxuICB0aGlzLl9zZWxlY3Rpb24gPSBzZWxlY3Rpb247XG4gIHRoaXMuX2RyYWdnaW5nID0gZHJhZ2dpbmc7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8vIGxhc3NvIHZpc3VhbHMgaW1wbGVtZW50YXRpb25cblxuICAvKipcbiAgKiBBIGhlbHBlciB0aGF0IHJlYWxpemVzIHRoZSBzZWxlY3Rpb24gYm94IHZpc3VhbFxuICAqL1xuICB2YXIgdmlzdWFscyA9IHtcblxuICAgIGNyZWF0ZTogZnVuY3Rpb24oY29udGV4dCkge1xuICAgICAgdmFyIGNvbnRhaW5lciA9IGNhbnZhcy5nZXREZWZhdWx0TGF5ZXIoKSxcbiAgICAgICAgICBmcmFtZTtcblxuICAgICAgZnJhbWUgPSBjb250ZXh0LmZyYW1lID0gc3ZnQ3JlYXRlKCdyZWN0Jyk7XG4gICAgICBzdmdBdHRyKGZyYW1lLCB7XG4gICAgICAgIGNsYXNzOiAnZGpzLWxhc3NvLW92ZXJsYXknLFxuICAgICAgICB3aWR0aDogIDEsXG4gICAgICAgIGhlaWdodDogMSxcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogMFxuICAgICAgfSk7XG5cbiAgICAgIHN2Z0FwcGVuZChjb250YWluZXIsIGZyYW1lKTtcbiAgICB9LFxuXG4gICAgdXBkYXRlOiBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgICB2YXIgZnJhbWUgPSBjb250ZXh0LmZyYW1lLFxuICAgICAgICAgIGJib3ggPSBjb250ZXh0LmJib3g7XG5cbiAgICAgIHN2Z0F0dHIoZnJhbWUsIHtcbiAgICAgICAgeDogYmJveC54LFxuICAgICAgICB5OiBiYm94LnksXG4gICAgICAgIHdpZHRoOiBiYm94LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGJib3guaGVpZ2h0XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlOiBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICAgIGlmIChjb250ZXh0LmZyYW1lKSB7XG4gICAgICAgIHN2Z1JlbW92ZShjb250ZXh0LmZyYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdG9vbE1hbmFnZXIucmVnaXN0ZXJUb29sKCdsYXNzbycsIHtcbiAgICB0b29sOiAnbGFzc28uc2VsZWN0aW9uJyxcbiAgICBkcmFnZ2luZzogJ2xhc3NvJ1xuICB9KTtcblxuICBldmVudEJ1cy5vbignbGFzc28uc2VsZWN0aW9uLmVuZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHRhcmdldCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQudGFyZ2V0O1xuXG4gICAgLy8gb25seSByZWFjdGl2ZSBvbiBkaWFncmFtIGNsaWNrXG4gICAgLy8gb24gc29tZSBvY2Nhc2lvbnMsIGV2ZW50LmhvdmVyIGlzIG5vdCBzZXQgYW5kIHdlIGhhdmUgdG8gY2hlY2sgaWYgdGhlIHRhcmdldCBpcyBhbiBzdmdcbiAgICBpZiAoIWV2ZW50LmhvdmVyICYmICEodGFyZ2V0IGluc3RhbmNlb2YgU1ZHRWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudEJ1cy5vbmNlKCdsYXNzby5zZWxlY3Rpb24uZW5kZWQnLCBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuYWN0aXZhdGVMYXNzbyhldmVudC5vcmlnaW5hbEV2ZW50LCB0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gbGFzc28gaW50ZXJhY3Rpb24gaW1wbGVtZW50YXRpb25cblxuICBldmVudEJ1cy5vbignbGFzc28uZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBiYm94ID0gdG9CQm94KGV2ZW50KTtcblxuICAgIHZhciBlbGVtZW50cyA9IGVsZW1lbnRSZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfSk7XG5cbiAgICBzZWxmLnNlbGVjdChlbGVtZW50cywgYmJveCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdsYXNzby5zdGFydCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQ7XG5cbiAgICBjb250ZXh0LmJib3ggPSB0b0JCb3goZXZlbnQpO1xuICAgIHZpc3VhbHMuY3JlYXRlKGNvbnRleHQpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignbGFzc28ubW92ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQ7XG5cbiAgICBjb250ZXh0LmJib3ggPSB0b0JCb3goZXZlbnQpO1xuICAgIHZpc3VhbHMudXBkYXRlKGNvbnRleHQpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignbGFzc28uY2xlYW51cCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQ7XG5cbiAgICB2aXN1YWxzLnJlbW92ZShjb250ZXh0KTtcbiAgfSk7XG5cblxuICAvLyBldmVudCBpbnRlZ3JhdGlvblxuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50Lm1vdXNlZG93bicsIDE1MDAsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICBpZiAoaGFzU2Vjb25kYXJ5TW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICBzZWxmLmFjdGl2YXRlTGFzc28oZXZlbnQub3JpZ2luYWxFdmVudCk7XG5cbiAgICAgIC8vIHdlJ3ZlIGhhbmRsZWQgdGhlIGV2ZW50XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xufVxuXG5MYXNzb1Rvb2wuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdkcmFnZ2luZycsXG4gICdlbGVtZW50UmVnaXN0cnknLFxuICAnc2VsZWN0aW9uJyxcbiAgJ3Rvb2xNYW5hZ2VyJ1xuXTtcblxuXG5MYXNzb1Rvb2wucHJvdG90eXBlLmFjdGl2YXRlTGFzc28gPSBmdW5jdGlvbihldmVudCwgYXV0b0FjdGl2YXRlKSB7XG5cbiAgdGhpcy5fZHJhZ2dpbmcuaW5pdChldmVudCwgJ2xhc3NvJywge1xuICAgIGF1dG9BY3RpdmF0ZTogYXV0b0FjdGl2YXRlLFxuICAgIGN1cnNvcjogTEFTU09fVE9PTF9DVVJTT1IsXG4gICAgZGF0YToge1xuICAgICAgY29udGV4dDoge31cbiAgICB9XG4gIH0pO1xufTtcblxuTGFzc29Ub29sLnByb3RvdHlwZS5hY3RpdmF0ZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgdGhpcy5fZHJhZ2dpbmcuaW5pdChldmVudCwgJ2xhc3NvLnNlbGVjdGlvbicsIHtcbiAgICB0cmFwQ2xpY2s6IGZhbHNlLFxuICAgIGN1cnNvcjogTEFTU09fVE9PTF9DVVJTT1IsXG4gICAgZGF0YToge1xuICAgICAgY29udGV4dDoge31cbiAgICB9XG4gIH0pO1xufTtcblxuTGFzc29Ub29sLnByb3RvdHlwZS5zZWxlY3QgPSBmdW5jdGlvbihlbGVtZW50cywgYmJveCkge1xuICB2YXIgc2VsZWN0ZWRFbGVtZW50cyA9IGdldEVuY2xvc2VkRWxlbWVudHMoZWxlbWVudHMsIGJib3gpO1xuXG4gIHRoaXMuX3NlbGVjdGlvbi5zZWxlY3QodmFsdWVzKHNlbGVjdGVkRWxlbWVudHMpKTtcbn07XG5cbkxhc3NvVG9vbC5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLmlzQWN0aXZlKCkpIHtcbiAgICB0aGlzLl9kcmFnZ2luZy5jYW5jZWwoKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFjdGl2YXRlU2VsZWN0aW9uKCk7XG4gIH1cbn07XG5cbkxhc3NvVG9vbC5wcm90b3R5cGUuaXNBY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzLl9kcmFnZ2luZy5jb250ZXh0KCk7XG5cbiAgcmV0dXJuIGNvbnRleHQgJiYgL15sYXNzby8udGVzdChjb250ZXh0LnByZWZpeCk7XG59O1xuXG5cblxuZnVuY3Rpb24gdG9CQm94KGV2ZW50KSB7XG5cbiAgdmFyIHN0YXJ0ID0ge1xuXG4gICAgeDogZXZlbnQueCAtIGV2ZW50LmR4LFxuICAgIHk6IGV2ZW50LnkgLSBldmVudC5keVxuICB9O1xuXG4gIHZhciBlbmQgPSB7XG4gICAgeDogZXZlbnQueCxcbiAgICB5OiBldmVudC55XG4gIH07XG5cbiAgdmFyIGJib3g7XG5cbiAgaWYgKChzdGFydC54IDw9IGVuZC54ICYmIHN0YXJ0LnkgPCBlbmQueSkgfHxcbiAgICAgIChzdGFydC54IDwgZW5kLnggJiYgc3RhcnQueSA8PSBlbmQueSkpIHtcblxuICAgIGJib3ggPSB7XG4gICAgICB4OiBzdGFydC54LFxuICAgICAgeTogc3RhcnQueSxcbiAgICAgIHdpZHRoOiAgZW5kLnggLSBzdGFydC54LFxuICAgICAgaGVpZ2h0OiBlbmQueSAtIHN0YXJ0LnlcbiAgICB9O1xuICB9IGVsc2UgaWYgKChzdGFydC54ID49IGVuZC54ICYmIHN0YXJ0LnkgPCBlbmQueSkgfHxcbiAgICAgICAgICAgICAoc3RhcnQueCA+IGVuZC54ICYmIHN0YXJ0LnkgPD0gZW5kLnkpKSB7XG5cbiAgICBiYm94ID0ge1xuICAgICAgeDogZW5kLngsXG4gICAgICB5OiBzdGFydC55LFxuICAgICAgd2lkdGg6ICBzdGFydC54IC0gZW5kLngsXG4gICAgICBoZWlnaHQ6IGVuZC55IC0gc3RhcnQueVxuICAgIH07XG4gIH0gZWxzZSBpZiAoKHN0YXJ0LnggPD0gZW5kLnggJiYgc3RhcnQueSA+IGVuZC55KSB8fFxuICAgICAgICAgICAgIChzdGFydC54IDwgZW5kLnggJiYgc3RhcnQueSA+PSBlbmQueSkpIHtcblxuICAgIGJib3ggPSB7XG4gICAgICB4OiBzdGFydC54LFxuICAgICAgeTogZW5kLnksXG4gICAgICB3aWR0aDogIGVuZC54IC0gc3RhcnQueCxcbiAgICAgIGhlaWdodDogc3RhcnQueSAtIGVuZC55XG4gICAgfTtcbiAgfSBlbHNlIGlmICgoc3RhcnQueCA+PSBlbmQueCAmJiBzdGFydC55ID4gZW5kLnkpIHx8XG4gICAgICAgICAgICAgKHN0YXJ0LnggPiBlbmQueCAmJiBzdGFydC55ID49IGVuZC55KSkge1xuXG4gICAgYmJveCA9IHtcbiAgICAgIHg6IGVuZC54LFxuICAgICAgeTogZW5kLnksXG4gICAgICB3aWR0aDogIHN0YXJ0LnggLSBlbmQueCxcbiAgICAgIGhlaWdodDogc3RhcnQueSAtIGVuZC55XG4gICAgfTtcbiAgfSBlbHNlIHtcblxuICAgIGJib3ggPSB7XG4gICAgICB4OiBlbmQueCxcbiAgICAgIHk6IGVuZC55LFxuICAgICAgd2lkdGg6ICAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgfVxuICByZXR1cm4gYmJveDtcbn1cbiIsImltcG9ydCBUb29sTWFuYWdlck1vZHVsZSBmcm9tICcuLi90b29sLW1hbmFnZXInO1xuXG5pbXBvcnQgTGFzc29Ub29sIGZyb20gJy4vTGFzc29Ub29sJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIFRvb2xNYW5hZ2VyTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdsYXNzb1Rvb2wnIF0sXG4gIGxhc3NvVG9vbDogWyAndHlwZScsIExhc3NvVG9vbCBdXG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBpc0FycmF5XG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgQmFzZVxufSBmcm9tICcuLi8uLi9tb2RlbCc7XG5cbmltcG9ydCBBbGlnbkVsZW1lbnRzSGFuZGxlciBmcm9tICcuL2NtZC9BbGlnbkVsZW1lbnRzSGFuZGxlcic7XG5pbXBvcnQgQXBwZW5kU2hhcGVIYW5kbGVyIGZyb20gJy4vY21kL0FwcGVuZFNoYXBlSGFuZGxlcic7XG5pbXBvcnQgQ3JlYXRlQ29ubmVjdGlvbkhhbmRsZXIgZnJvbSAnLi9jbWQvQ3JlYXRlQ29ubmVjdGlvbkhhbmRsZXInO1xuaW1wb3J0IENyZWF0ZUVsZW1lbnRzSGFuZGxlciBmcm9tICcuL2NtZC9DcmVhdGVFbGVtZW50c0hhbmRsZXInO1xuaW1wb3J0IENyZWF0ZUxhYmVsSGFuZGxlciBmcm9tICcuL2NtZC9DcmVhdGVMYWJlbEhhbmRsZXInO1xuaW1wb3J0IENyZWF0ZVNoYXBlSGFuZGxlciBmcm9tICcuL2NtZC9DcmVhdGVTaGFwZUhhbmRsZXInO1xuaW1wb3J0IERlbGV0ZUNvbm5lY3Rpb25IYW5kbGVyIGZyb20gJy4vY21kL0RlbGV0ZUNvbm5lY3Rpb25IYW5kbGVyJztcbmltcG9ydCBEZWxldGVFbGVtZW50c0hhbmRsZXIgZnJvbSAnLi9jbWQvRGVsZXRlRWxlbWVudHNIYW5kbGVyJztcbmltcG9ydCBEZWxldGVTaGFwZUhhbmRsZXIgZnJvbSAnLi9jbWQvRGVsZXRlU2hhcGVIYW5kbGVyJztcbmltcG9ydCBEaXN0cmlidXRlRWxlbWVudHNIYW5kbGVyIGZyb20gJy4vY21kL0Rpc3RyaWJ1dGVFbGVtZW50c0hhbmRsZXInO1xuaW1wb3J0IExheW91dENvbm5lY3Rpb25IYW5kbGVyIGZyb20gJy4vY21kL0xheW91dENvbm5lY3Rpb25IYW5kbGVyJztcbmltcG9ydCBNb3ZlQ29ubmVjdGlvbkhhbmRsZXIgZnJvbSAnLi9jbWQvTW92ZUNvbm5lY3Rpb25IYW5kbGVyJztcbmltcG9ydCBNb3ZlRWxlbWVudHNIYW5kbGVyIGZyb20gJy4vY21kL01vdmVFbGVtZW50c0hhbmRsZXInO1xuaW1wb3J0IE1vdmVTaGFwZUhhbmRsZXIgZnJvbSAnLi9jbWQvTW92ZVNoYXBlSGFuZGxlcic7XG5pbXBvcnQgUmVjb25uZWN0Q29ubmVjdGlvbkhhbmRsZXIgZnJvbSAnLi9jbWQvUmVjb25uZWN0Q29ubmVjdGlvbkhhbmRsZXInO1xuaW1wb3J0IFJlcGxhY2VTaGFwZUhhbmRsZXIgZnJvbSAnLi9jbWQvUmVwbGFjZVNoYXBlSGFuZGxlcic7XG5pbXBvcnQgUmVzaXplU2hhcGVIYW5kbGVyIGZyb20gJy4vY21kL1Jlc2l6ZVNoYXBlSGFuZGxlcic7XG5pbXBvcnQgU3BhY2VUb29sSGFuZGxlciBmcm9tICcuL2NtZC9TcGFjZVRvb2xIYW5kbGVyJztcbmltcG9ydCBUb2dnbGVTaGFwZUNvbGxhcHNlSGFuZGxlciBmcm9tICcuL2NtZC9Ub2dnbGVTaGFwZUNvbGxhcHNlSGFuZGxlcic7XG5pbXBvcnQgVXBkYXRlQXR0YWNobWVudEhhbmRsZXIgZnJvbSAnLi9jbWQvVXBkYXRlQXR0YWNobWVudEhhbmRsZXInO1xuaW1wb3J0IFVwZGF0ZVdheXBvaW50c0hhbmRsZXIgZnJvbSAnLi9jbWQvVXBkYXRlV2F5cG9pbnRzSGFuZGxlcic7XG5cblxuLyoqXG4gKiBUaGUgYmFzaWMgbW9kZWxpbmcgZW50cnkgcG9pbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RWxlbWVudEZhY3Rvcnl9IGVsZW1lbnRGYWN0b3J5XG4gKiBAcGFyYW0ge0NvbW1hbmRTdGFja30gY29tbWFuZFN0YWNrXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vZGVsaW5nKGV2ZW50QnVzLCBlbGVtZW50RmFjdG9yeSwgY29tbWFuZFN0YWNrKSB7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX2VsZW1lbnRGYWN0b3J5ID0gZWxlbWVudEZhY3Rvcnk7XG4gIHRoaXMuX2NvbW1hbmRTdGFjayA9IGNvbW1hbmRTdGFjaztcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRCdXMub24oJ2RpYWdyYW0uaW5pdCcsIGZ1bmN0aW9uKCkge1xuXG4gICAgLy8gcmVnaXN0ZXIgbW9kZWxpbmcgaGFuZGxlcnNcbiAgICBzZWxmLnJlZ2lzdGVySGFuZGxlcnMoY29tbWFuZFN0YWNrKTtcbiAgfSk7XG59XG5cbk1vZGVsaW5nLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdlbGVtZW50RmFjdG9yeScsICdjb21tYW5kU3RhY2snIF07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLmdldEhhbmRsZXJzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgJ3NoYXBlLmFwcGVuZCc6IEFwcGVuZFNoYXBlSGFuZGxlcixcbiAgICAnc2hhcGUuY3JlYXRlJzogQ3JlYXRlU2hhcGVIYW5kbGVyLFxuICAgICdzaGFwZS5kZWxldGUnOiBEZWxldGVTaGFwZUhhbmRsZXIsXG4gICAgJ3NoYXBlLm1vdmUnOiBNb3ZlU2hhcGVIYW5kbGVyLFxuICAgICdzaGFwZS5yZXNpemUnOiBSZXNpemVTaGFwZUhhbmRsZXIsXG4gICAgJ3NoYXBlLnJlcGxhY2UnOiBSZXBsYWNlU2hhcGVIYW5kbGVyLFxuICAgICdzaGFwZS50b2dnbGVDb2xsYXBzZSc6IFRvZ2dsZVNoYXBlQ29sbGFwc2VIYW5kbGVyLFxuXG4gICAgJ3NwYWNlVG9vbCc6IFNwYWNlVG9vbEhhbmRsZXIsXG5cbiAgICAnbGFiZWwuY3JlYXRlJzogQ3JlYXRlTGFiZWxIYW5kbGVyLFxuXG4gICAgJ2Nvbm5lY3Rpb24uY3JlYXRlJzogQ3JlYXRlQ29ubmVjdGlvbkhhbmRsZXIsXG4gICAgJ2Nvbm5lY3Rpb24uZGVsZXRlJzogRGVsZXRlQ29ubmVjdGlvbkhhbmRsZXIsXG4gICAgJ2Nvbm5lY3Rpb24ubW92ZSc6IE1vdmVDb25uZWN0aW9uSGFuZGxlcixcbiAgICAnY29ubmVjdGlvbi5sYXlvdXQnOiBMYXlvdXRDb25uZWN0aW9uSGFuZGxlcixcblxuICAgICdjb25uZWN0aW9uLnVwZGF0ZVdheXBvaW50cyc6IFVwZGF0ZVdheXBvaW50c0hhbmRsZXIsXG5cbiAgICAnY29ubmVjdGlvbi5yZWNvbm5lY3QnOiBSZWNvbm5lY3RDb25uZWN0aW9uSGFuZGxlcixcblxuICAgICdlbGVtZW50cy5jcmVhdGUnOiBDcmVhdGVFbGVtZW50c0hhbmRsZXIsXG4gICAgJ2VsZW1lbnRzLm1vdmUnOiBNb3ZlRWxlbWVudHNIYW5kbGVyLFxuICAgICdlbGVtZW50cy5kZWxldGUnOiBEZWxldGVFbGVtZW50c0hhbmRsZXIsXG5cbiAgICAnZWxlbWVudHMuZGlzdHJpYnV0ZSc6IERpc3RyaWJ1dGVFbGVtZW50c0hhbmRsZXIsXG4gICAgJ2VsZW1lbnRzLmFsaWduJzogQWxpZ25FbGVtZW50c0hhbmRsZXIsXG5cbiAgICAnZWxlbWVudC51cGRhdGVBdHRhY2htZW50JzogVXBkYXRlQXR0YWNobWVudEhhbmRsZXJcbiAgfTtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXIgaGFuZGxlcnMgd2l0aCB0aGUgY29tbWFuZCBzdGFja1xuICpcbiAqIEBwYXJhbSB7Q29tbWFuZFN0YWNrfSBjb21tYW5kU3RhY2tcbiAqL1xuTW9kZWxpbmcucHJvdG90eXBlLnJlZ2lzdGVySGFuZGxlcnMgPSBmdW5jdGlvbihjb21tYW5kU3RhY2spIHtcbiAgZm9yRWFjaCh0aGlzLmdldEhhbmRsZXJzKCksIGZ1bmN0aW9uKGhhbmRsZXIsIGlkKSB7XG4gICAgY29tbWFuZFN0YWNrLnJlZ2lzdGVySGFuZGxlcihpZCwgaGFuZGxlcik7XG4gIH0pO1xufTtcblxuXG4vLyBtb2RlbGluZyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuTW9kZWxpbmcucHJvdG90eXBlLm1vdmVTaGFwZSA9IGZ1bmN0aW9uKHNoYXBlLCBkZWx0YSwgbmV3UGFyZW50LCBuZXdQYXJlbnRJbmRleCwgaGludHMpIHtcblxuICBpZiAodHlwZW9mIG5ld1BhcmVudEluZGV4ID09PSAnb2JqZWN0Jykge1xuICAgIGhpbnRzID0gbmV3UGFyZW50SW5kZXg7XG4gICAgbmV3UGFyZW50SW5kZXggPSBudWxsO1xuICB9XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgc2hhcGU6IHNoYXBlLFxuICAgIGRlbHRhOiAgZGVsdGEsXG4gICAgbmV3UGFyZW50OiBuZXdQYXJlbnQsXG4gICAgbmV3UGFyZW50SW5kZXg6IG5ld1BhcmVudEluZGV4LFxuICAgIGhpbnRzOiBoaW50cyB8fCB7fVxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdzaGFwZS5tb3ZlJywgY29udGV4dCk7XG59O1xuXG5cbi8qKlxuICogVXBkYXRlIHRoZSBhdHRhY2htZW50IG9mIHRoZSBnaXZlbiBzaGFwZS5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlLkJhc2V9IHNoYXBlXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBbbmV3SG9zdF1cbiAqL1xuTW9kZWxpbmcucHJvdG90eXBlLnVwZGF0ZUF0dGFjaG1lbnQgPSBmdW5jdGlvbihzaGFwZSwgbmV3SG9zdCkge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBzaGFwZTogc2hhcGUsXG4gICAgbmV3SG9zdDogbmV3SG9zdFxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZUF0dGFjaG1lbnQnLCBjb250ZXh0KTtcbn07XG5cblxuLyoqXG4gKiBNb3ZlIGEgbnVtYmVyIG9mIHNoYXBlcyB0byBhIG5ldyB0YXJnZXQsIGVpdGhlciBzZXR0aW5nIGl0IGFzXG4gKiB0aGUgbmV3IHBhcmVudCBvciBhdHRhY2hpbmcgaXQuXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZS5CYXNlPn0gc2hhcGVzXG4gKiBAcGFyYW0ge1BvaW50fSBkZWx0YVxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gW3RhcmdldF1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbaGludHNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtoaW50cy5hdHRhY2g9ZmFsc2VdXG4gKi9cbk1vZGVsaW5nLnByb3RvdHlwZS5tb3ZlRWxlbWVudHMgPSBmdW5jdGlvbihzaGFwZXMsIGRlbHRhLCB0YXJnZXQsIGhpbnRzKSB7XG5cbiAgaGludHMgPSBoaW50cyB8fCB7fTtcblxuICB2YXIgYXR0YWNoID0gaGludHMuYXR0YWNoO1xuXG4gIHZhciBuZXdQYXJlbnQgPSB0YXJnZXQsXG4gICAgICBuZXdIb3N0O1xuXG4gIGlmIChhdHRhY2ggPT09IHRydWUpIHtcbiAgICBuZXdIb3N0ID0gdGFyZ2V0O1xuICAgIG5ld1BhcmVudCA9IHRhcmdldC5wYXJlbnQ7XG4gIH0gZWxzZVxuXG4gIGlmIChhdHRhY2ggPT09IGZhbHNlKSB7XG4gICAgbmV3SG9zdCA9IG51bGw7XG4gIH1cblxuICB2YXIgY29udGV4dCA9IHtcbiAgICBzaGFwZXM6IHNoYXBlcyxcbiAgICBkZWx0YTogZGVsdGEsXG4gICAgbmV3UGFyZW50OiBuZXdQYXJlbnQsXG4gICAgbmV3SG9zdDogbmV3SG9zdCxcbiAgICBoaW50czogaGludHNcbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudHMubW92ZScsIGNvbnRleHQpO1xufTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUubW92ZUNvbm5lY3Rpb24gPSBmdW5jdGlvbihjb25uZWN0aW9uLCBkZWx0YSwgbmV3UGFyZW50LCBuZXdQYXJlbnRJbmRleCwgaGludHMpIHtcblxuICBpZiAodHlwZW9mIG5ld1BhcmVudEluZGV4ID09PSAnb2JqZWN0Jykge1xuICAgIGhpbnRzID0gbmV3UGFyZW50SW5kZXg7XG4gICAgbmV3UGFyZW50SW5kZXggPSB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgY29udGV4dCA9IHtcbiAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgIGRlbHRhOiBkZWx0YSxcbiAgICBuZXdQYXJlbnQ6IG5ld1BhcmVudCxcbiAgICBuZXdQYXJlbnRJbmRleDogbmV3UGFyZW50SW5kZXgsXG4gICAgaGludHM6IGhpbnRzIHx8IHt9XG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2Nvbm5lY3Rpb24ubW92ZScsIGNvbnRleHQpO1xufTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUubGF5b3V0Q29ubmVjdGlvbiA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIGhpbnRzKSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgaGludHM6IGhpbnRzIHx8IHt9XG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2Nvbm5lY3Rpb24ubGF5b3V0JywgY29udGV4dCk7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlIGNvbm5lY3Rpb24uXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gc291cmNlXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSB0YXJnZXRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGFyZW50SW5kZXhdXG4gKiBAcGFyYW0ge09iamVjdHxkanMubW9kZWwuQ29ubmVjdGlvbn0gY29ubmVjdGlvblxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gcGFyZW50XG4gKiBAcGFyYW0ge09iamVjdH0gaGludHNcbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuQ29ubmVjdGlvbn0gdGhlIGNyZWF0ZWQgY29ubmVjdGlvbi5cbiAqL1xuTW9kZWxpbmcucHJvdG90eXBlLmNyZWF0ZUNvbm5lY3Rpb24gPSBmdW5jdGlvbihzb3VyY2UsIHRhcmdldCwgcGFyZW50SW5kZXgsIGNvbm5lY3Rpb24sIHBhcmVudCwgaGludHMpIHtcblxuICBpZiAodHlwZW9mIHBhcmVudEluZGV4ID09PSAnb2JqZWN0Jykge1xuICAgIGhpbnRzID0gcGFyZW50O1xuICAgIHBhcmVudCA9IGNvbm5lY3Rpb247XG4gICAgY29ubmVjdGlvbiA9IHBhcmVudEluZGV4O1xuICAgIHBhcmVudEluZGV4ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29ubmVjdGlvbiA9IHRoaXMuX2NyZWF0ZSgnY29ubmVjdGlvbicsIGNvbm5lY3Rpb24pO1xuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHRhcmdldDogdGFyZ2V0LFxuICAgIHBhcmVudDogcGFyZW50LFxuICAgIHBhcmVudEluZGV4OiBwYXJlbnRJbmRleCxcbiAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgIGhpbnRzOiBoaW50c1xuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdjb25uZWN0aW9uLmNyZWF0ZScsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0LmNvbm5lY3Rpb247XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlIGEgc2hhcGUgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZXxPYmplY3R9IHNoYXBlXG4gKiBAcGFyYW0ge1BvaW50fSBwb3NpdGlvblxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV8ZGpzLm1vZGVsLlJvb3R9IHRhcmdldFxuICogQHBhcmFtIHtudW1iZXJ9IFtwYXJlbnRJbmRleF0gcG9zaXRpb24gaW4gcGFyZW50cyBjaGlsZHJlbiBsaXN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2hpbnRzXVxuICogQHBhcmFtIHtib29sZWFufSBbaGludHMuYXR0YWNoXSB3aGV0aGVyIHRvIGF0dGFjaCB0byB0YXJnZXQgb3IgYmVjb21lIGEgY2hpbGRcbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuU2hhcGV9IHRoZSBjcmVhdGVkIHNoYXBlXG4gKi9cbk1vZGVsaW5nLnByb3RvdHlwZS5jcmVhdGVTaGFwZSA9IGZ1bmN0aW9uKHNoYXBlLCBwb3NpdGlvbiwgdGFyZ2V0LCBwYXJlbnRJbmRleCwgaGludHMpIHtcblxuICBpZiAodHlwZW9mIHBhcmVudEluZGV4ICE9PSAnbnVtYmVyJykge1xuICAgIGhpbnRzID0gcGFyZW50SW5kZXg7XG4gICAgcGFyZW50SW5kZXggPSB1bmRlZmluZWQ7XG4gIH1cblxuICBoaW50cyA9IGhpbnRzIHx8IHt9O1xuXG4gIHZhciBhdHRhY2ggPSBoaW50cy5hdHRhY2gsXG4gICAgICBwYXJlbnQsXG4gICAgICBob3N0O1xuXG4gIHNoYXBlID0gdGhpcy5fY3JlYXRlKCdzaGFwZScsIHNoYXBlKTtcblxuICBpZiAoYXR0YWNoKSB7XG4gICAgcGFyZW50ID0gdGFyZ2V0LnBhcmVudDtcbiAgICBob3N0ID0gdGFyZ2V0O1xuICB9IGVsc2Uge1xuICAgIHBhcmVudCA9IHRhcmdldDtcbiAgfVxuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICBzaGFwZTogc2hhcGUsXG4gICAgcGFyZW50OiBwYXJlbnQsXG4gICAgcGFyZW50SW5kZXg6IHBhcmVudEluZGV4LFxuICAgIGhvc3Q6IGhvc3QsXG4gICAgaGludHM6IGhpbnRzXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3NoYXBlLmNyZWF0ZScsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0LnNoYXBlO1xufTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUuY3JlYXRlRWxlbWVudHMgPSBmdW5jdGlvbihlbGVtZW50cywgcG9zaXRpb24sIHBhcmVudCwgcGFyZW50SW5kZXgsIGhpbnRzKSB7XG4gIGlmICghaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IFsgZWxlbWVudHMgXTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcGFyZW50SW5kZXggIT09ICdudW1iZXInKSB7XG4gICAgaGludHMgPSBwYXJlbnRJbmRleDtcbiAgICBwYXJlbnRJbmRleCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGhpbnRzID0gaGludHMgfHwge307XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgIGVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICBwYXJlbnRJbmRleDogcGFyZW50SW5kZXgsXG4gICAgaGludHM6IGhpbnRzXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnRzLmNyZWF0ZScsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0LmVsZW1lbnRzO1xufTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUuY3JlYXRlTGFiZWwgPSBmdW5jdGlvbihsYWJlbFRhcmdldCwgcG9zaXRpb24sIGxhYmVsLCBwYXJlbnQpIHtcblxuICBsYWJlbCA9IHRoaXMuX2NyZWF0ZSgnbGFiZWwnLCBsYWJlbCk7XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgbGFiZWxUYXJnZXQ6IGxhYmVsVGFyZ2V0LFxuICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICBwYXJlbnQ6IHBhcmVudCB8fCBsYWJlbFRhcmdldC5wYXJlbnQsXG4gICAgc2hhcGU6IGxhYmVsXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2xhYmVsLmNyZWF0ZScsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0LnNoYXBlO1xufTtcblxuXG4vKipcbiAqIEFwcGVuZCBzaGFwZSB0byBnaXZlbiBzb3VyY2UsIGRyYXdpbmcgYSBjb25uZWN0aW9uXG4gKiBiZXR3ZWVuIHNvdXJjZSBhbmQgdGhlIG5ld2x5IGNyZWF0ZWQgc2hhcGUuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNvdXJjZVxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV8T2JqZWN0fSBzaGFwZVxuICogQHBhcmFtIHtQb2ludH0gcG9zaXRpb25cbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSB0YXJnZXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbaGludHNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtoaW50cy5hdHRhY2hdXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5Db25uZWN0aW9ufE9iamVjdH0gW2hpbnRzLmNvbm5lY3Rpb25dXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBbaGludHMuY29ubmVjdGlvblBhcmVudF1cbiAqXG4gKiBAcmV0dXJuIHtkanMubW9kZWwuU2hhcGV9IHRoZSBuZXdseSBjcmVhdGVkIHNoYXBlXG4gKi9cbk1vZGVsaW5nLnByb3RvdHlwZS5hcHBlbmRTaGFwZSA9IGZ1bmN0aW9uKHNvdXJjZSwgc2hhcGUsIHBvc2l0aW9uLCB0YXJnZXQsIGhpbnRzKSB7XG5cbiAgaGludHMgPSBoaW50cyB8fCB7fTtcblxuICBzaGFwZSA9IHRoaXMuX2NyZWF0ZSgnc2hhcGUnLCBzaGFwZSk7XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgIHRhcmdldDogdGFyZ2V0LFxuICAgIHNoYXBlOiBzaGFwZSxcbiAgICBjb25uZWN0aW9uOiBoaW50cy5jb25uZWN0aW9uLFxuICAgIGNvbm5lY3Rpb25QYXJlbnQ6IGhpbnRzLmNvbm5lY3Rpb25QYXJlbnQsXG4gICAgaGludHM6IGhpbnRzXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3NoYXBlLmFwcGVuZCcsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0LnNoYXBlO1xufTtcblxuXG5Nb2RlbGluZy5wcm90b3R5cGUucmVtb3ZlRWxlbWVudHMgPSBmdW5jdGlvbihlbGVtZW50cykge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBlbGVtZW50czogZWxlbWVudHNcbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudHMuZGVsZXRlJywgY29udGV4dCk7XG59O1xuXG5cbk1vZGVsaW5nLnByb3RvdHlwZS5kaXN0cmlidXRlRWxlbWVudHMgPSBmdW5jdGlvbihncm91cHMsIGF4aXMsIGRpbWVuc2lvbikge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBncm91cHM6IGdyb3VwcyxcbiAgICBheGlzOiBheGlzLFxuICAgIGRpbWVuc2lvbjogZGltZW5zaW9uXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnRzLmRpc3RyaWJ1dGUnLCBjb250ZXh0KTtcbn07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLnJlbW92ZVNoYXBlID0gZnVuY3Rpb24oc2hhcGUsIGhpbnRzKSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIHNoYXBlOiBzaGFwZSxcbiAgICBoaW50czogaGludHMgfHwge31cbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnc2hhcGUuZGVsZXRlJywgY29udGV4dCk7XG59O1xuXG5cbk1vZGVsaW5nLnByb3RvdHlwZS5yZW1vdmVDb25uZWN0aW9uID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgaGludHMpIHtcbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgY29ubmVjdGlvbjogY29ubmVjdGlvbixcbiAgICBoaW50czogaGludHMgfHwge31cbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnY29ubmVjdGlvbi5kZWxldGUnLCBjb250ZXh0KTtcbn07XG5cbk1vZGVsaW5nLnByb3RvdHlwZS5yZXBsYWNlU2hhcGUgPSBmdW5jdGlvbihvbGRTaGFwZSwgbmV3U2hhcGUsIGhpbnRzKSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIG9sZFNoYXBlOiBvbGRTaGFwZSxcbiAgICBuZXdEYXRhOiBuZXdTaGFwZSxcbiAgICBoaW50czogaGludHMgfHwge31cbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnc2hhcGUucmVwbGFjZScsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0Lm5ld1NoYXBlO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLmFsaWduRWxlbWVudHMgPSBmdW5jdGlvbihlbGVtZW50cywgYWxpZ25tZW50KSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIGVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICBhbGlnbm1lbnQ6IGFsaWdubWVudFxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50cy5hbGlnbicsIGNvbnRleHQpO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLnJlc2l6ZVNoYXBlID0gZnVuY3Rpb24oc2hhcGUsIG5ld0JvdW5kcywgbWluQm91bmRzLCBoaW50cykge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBzaGFwZTogc2hhcGUsXG4gICAgbmV3Qm91bmRzOiBuZXdCb3VuZHMsXG4gICAgbWluQm91bmRzOiBtaW5Cb3VuZHMsXG4gICAgaGludHM6IGhpbnRzXG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3NoYXBlLnJlc2l6ZScsIGNvbnRleHQpO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLmNyZWF0ZVNwYWNlID0gZnVuY3Rpb24obW92aW5nU2hhcGVzLCByZXNpemluZ1NoYXBlcywgZGVsdGEsIGRpcmVjdGlvbiwgc3RhcnQpIHtcbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgZGVsdGE6IGRlbHRhLFxuICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLFxuICAgIG1vdmluZ1NoYXBlczogbW92aW5nU2hhcGVzLFxuICAgIHJlc2l6aW5nU2hhcGVzOiByZXNpemluZ1NoYXBlcyxcbiAgICBzdGFydDogc3RhcnRcbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnc3BhY2VUb29sJywgY29udGV4dCk7XG59O1xuXG5Nb2RlbGluZy5wcm90b3R5cGUudXBkYXRlV2F5cG9pbnRzID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgbmV3V2F5cG9pbnRzLCBoaW50cykge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLFxuICAgIG5ld1dheXBvaW50czogbmV3V2F5cG9pbnRzLFxuICAgIGhpbnRzOiBoaW50cyB8fCB7fVxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdjb25uZWN0aW9uLnVwZGF0ZVdheXBvaW50cycsIGNvbnRleHQpO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLnJlY29ubmVjdCA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIHNvdXJjZSwgdGFyZ2V0LCBkb2NraW5nT3JQb2ludHMsIGhpbnRzKSB7XG4gIHZhciBjb250ZXh0ID0ge1xuICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgbmV3U291cmNlOiBzb3VyY2UsXG4gICAgbmV3VGFyZ2V0OiB0YXJnZXQsXG4gICAgZG9ja2luZ09yUG9pbnRzOiBkb2NraW5nT3JQb2ludHMsXG4gICAgaGludHM6IGhpbnRzIHx8IHt9XG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2Nvbm5lY3Rpb24ucmVjb25uZWN0JywgY29udGV4dCk7XG59O1xuXG5Nb2RlbGluZy5wcm90b3R5cGUucmVjb25uZWN0U3RhcnQgPSBmdW5jdGlvbihjb25uZWN0aW9uLCBuZXdTb3VyY2UsIGRvY2tpbmdPclBvaW50cywgaGludHMpIHtcbiAgaWYgKCFoaW50cykge1xuICAgIGhpbnRzID0ge307XG4gIH1cblxuICB0aGlzLnJlY29ubmVjdChjb25uZWN0aW9uLCBuZXdTb3VyY2UsIGNvbm5lY3Rpb24udGFyZ2V0LCBkb2NraW5nT3JQb2ludHMsIGFzc2lnbihoaW50cywge1xuICAgIGRvY2tpbmc6ICdzb3VyY2UnXG4gIH0pKTtcbn07XG5cbk1vZGVsaW5nLnByb3RvdHlwZS5yZWNvbm5lY3RFbmQgPSBmdW5jdGlvbihjb25uZWN0aW9uLCBuZXdUYXJnZXQsIGRvY2tpbmdPclBvaW50cywgaGludHMpIHtcbiAgaWYgKCFoaW50cykge1xuICAgIGhpbnRzID0ge307XG4gIH1cblxuICB0aGlzLnJlY29ubmVjdChjb25uZWN0aW9uLCBjb25uZWN0aW9uLnNvdXJjZSwgbmV3VGFyZ2V0LCBkb2NraW5nT3JQb2ludHMsIGFzc2lnbihoaW50cywge1xuICAgIGRvY2tpbmc6ICd0YXJnZXQnXG4gIH0pKTtcbn07XG5cbk1vZGVsaW5nLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24oc291cmNlLCB0YXJnZXQsIGF0dHJzLCBoaW50cykge1xuICByZXR1cm4gdGhpcy5jcmVhdGVDb25uZWN0aW9uKHNvdXJjZSwgdGFyZ2V0LCBhdHRycyB8fCB7fSwgc291cmNlLnBhcmVudCwgaGludHMpO1xufTtcblxuTW9kZWxpbmcucHJvdG90eXBlLl9jcmVhdGUgPSBmdW5jdGlvbih0eXBlLCBhdHRycykge1xuICBpZiAoYXR0cnMgaW5zdGFuY2VvZiBCYXNlKSB7XG4gICAgcmV0dXJuIGF0dHJzO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50RmFjdG9yeS5jcmVhdGUodHlwZSwgYXR0cnMpO1xuICB9XG59O1xuXG5Nb2RlbGluZy5wcm90b3R5cGUudG9nZ2xlQ29sbGFwc2UgPSBmdW5jdGlvbihzaGFwZSwgaGludHMpIHtcbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgc2hhcGU6IHNoYXBlLFxuICAgIGhpbnRzOiBoaW50cyB8fCB7fVxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdzaGFwZS50b2dnbGVDb2xsYXBzZScsIGNvbnRleHQpO1xufTtcbiIsImltcG9ydCB7IGZvckVhY2ggfSBmcm9tICdtaW4tZGFzaCc7XG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgYWxpZ24gZWxlbWVudHMgaW4gYSBjZXJ0YWluIHdheS5cbiAqXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFsaWduRWxlbWVudHMobW9kZWxpbmcsIGNhbnZhcykge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG59XG5cbkFsaWduRWxlbWVudHMuJGluamVjdCA9IFsgJ21vZGVsaW5nJywgJ2NhbnZhcycgXTtcblxuXG5BbGlnbkVsZW1lbnRzLnByb3RvdHlwZS5wcmVFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcblxuICB2YXIgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzLFxuICAgICAgYWxpZ25tZW50ID0gY29udGV4dC5hbGlnbm1lbnQ7XG5cblxuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgdmFyIGRlbHRhID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuXG4gICAgaWYgKGFsaWdubWVudC5sZWZ0KSB7XG4gICAgICBkZWx0YS54ID0gYWxpZ25tZW50LmxlZnQgLSBlbGVtZW50Lng7XG5cbiAgICB9IGVsc2UgaWYgKGFsaWdubWVudC5yaWdodCkge1xuICAgICAgZGVsdGEueCA9IChhbGlnbm1lbnQucmlnaHQgLSBlbGVtZW50LndpZHRoKSAtIGVsZW1lbnQueDtcblxuICAgIH0gZWxzZSBpZiAoYWxpZ25tZW50LmNlbnRlcikge1xuICAgICAgZGVsdGEueCA9IChhbGlnbm1lbnQuY2VudGVyIC0gTWF0aC5yb3VuZChlbGVtZW50LndpZHRoIC8gMikpIC0gZWxlbWVudC54O1xuXG4gICAgfSBlbHNlIGlmIChhbGlnbm1lbnQudG9wKSB7XG4gICAgICBkZWx0YS55ID0gYWxpZ25tZW50LnRvcCAtIGVsZW1lbnQueTtcblxuICAgIH0gZWxzZSBpZiAoYWxpZ25tZW50LmJvdHRvbSkge1xuICAgICAgZGVsdGEueSA9IChhbGlnbm1lbnQuYm90dG9tIC0gZWxlbWVudC5oZWlnaHQpIC0gZWxlbWVudC55O1xuXG4gICAgfSBlbHNlIGlmIChhbGlnbm1lbnQubWlkZGxlKSB7XG4gICAgICBkZWx0YS55ID0gKGFsaWdubWVudC5taWRkbGUgLSBNYXRoLnJvdW5kKGVsZW1lbnQuaGVpZ2h0IC8gMikpIC0gZWxlbWVudC55O1xuICAgIH1cblxuICAgIG1vZGVsaW5nLm1vdmVFbGVtZW50cyhbIGVsZW1lbnQgXSwgZGVsdGEsIGVsZW1lbnQucGFyZW50KTtcbiAgfSk7XG59O1xuXG5BbGlnbkVsZW1lbnRzLnByb3RvdHlwZS5wb3N0RXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxufTtcbiIsImltcG9ydCB7IHNvbWUgfSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIHJldmVyc2libGUgYXBwZW5kaW5nIG9mIHNoYXBlc1xuICogdG8gYSBzb3VyY2Ugc2hhcGUuXG4gKlxuICogQHBhcmFtIHtjYW52YXN9IENhbnZhc1xuICogQHBhcmFtIHtlbGVtZW50RmFjdG9yeX0gRWxlbWVudEZhY3RvcnlcbiAqIEBwYXJhbSB7bW9kZWxpbmd9IE1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFwcGVuZFNoYXBlSGFuZGxlcihtb2RlbGluZykge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5BcHBlbmRTaGFwZUhhbmRsZXIuJGluamVjdCA9IFsgJ21vZGVsaW5nJyBdO1xuXG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHNoYXBlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEBwYXJhbSB7RWxlbWVudERlc2NyaXB0b3J9IGNvbnRleHQuc2hhcGUgdGhlIG5ldyBzaGFwZVxuICogQHBhcmFtIHtFbGVtZW50RGVzY3JpcHRvcn0gY29udGV4dC5zb3VyY2UgdGhlIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7RWxlbWVudERlc2NyaXB0b3J9IGNvbnRleHQucGFyZW50IHRoZSBwYXJlbnQgb2JqZWN0XG4gKiBAcGFyYW0ge1BvaW50fSBjb250ZXh0LnBvc2l0aW9uIHBvc2l0aW9uIG9mIHRoZSBuZXcgZWxlbWVudFxuICovXG5BcHBlbmRTaGFwZUhhbmRsZXIucHJvdG90eXBlLnByZUV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHNvdXJjZSA9IGNvbnRleHQuc291cmNlO1xuXG4gIGlmICghc291cmNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzb3VyY2UgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHZhciB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCB8fCBzb3VyY2UucGFyZW50LFxuICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9O1xuXG4gIHNoYXBlID0gY29udGV4dC5zaGFwZSA9XG4gICAgdGhpcy5fbW9kZWxpbmcuY3JlYXRlU2hhcGUoXG4gICAgICBzaGFwZSxcbiAgICAgIGNvbnRleHQucG9zaXRpb24sXG4gICAgICB0YXJnZXQsIHsgYXR0YWNoOiBoaW50cy5hdHRhY2ggfSk7XG5cbiAgY29udGV4dC5zaGFwZSA9IHNoYXBlO1xufTtcblxuQXBwZW5kU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5wb3N0RXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICBpZiAoIWV4aXN0c0Nvbm5lY3Rpb24oY29udGV4dC5zb3VyY2UsIGNvbnRleHQuc2hhcGUpKSB7XG5cbiAgICAvLyBjcmVhdGUgY29ubmVjdGlvblxuICAgIGlmIChoaW50cy5jb25uZWN0aW9uVGFyZ2V0ID09PSBjb250ZXh0LnNvdXJjZSkge1xuICAgICAgdGhpcy5fbW9kZWxpbmcuY29ubmVjdChjb250ZXh0LnNoYXBlLCBjb250ZXh0LnNvdXJjZSwgY29udGV4dC5jb25uZWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbW9kZWxpbmcuY29ubmVjdChjb250ZXh0LnNvdXJjZSwgY29udGV4dC5zaGFwZSwgY29udGV4dC5jb25uZWN0aW9uKTtcbiAgICB9XG4gIH1cbn07XG5cblxuZnVuY3Rpb24gZXhpc3RzQ29ubmVjdGlvbihzb3VyY2UsIHRhcmdldCkge1xuICByZXR1cm4gc29tZShzb3VyY2Uub3V0Z29pbmcsIGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4gYy50YXJnZXQgPT09IHRhcmdldDtcbiAgfSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3JlYXRlQ29ubmVjdGlvbkhhbmRsZXIoY2FudmFzLCBsYXlvdXRlcikge1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX2xheW91dGVyID0gbGF5b3V0ZXI7XG59XG5cbkNyZWF0ZUNvbm5lY3Rpb25IYW5kbGVyLiRpbmplY3QgPSBbICdjYW52YXMnLCAnbGF5b3V0ZXInIF07XG5cblxuLy8gYXBpIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG4vKipcbiAqIEFwcGVuZHMgYSBzaGFwZSB0byBhIHRhcmdldCBzaGFwZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge2Rqcy5lbGVtZW50LkJhc2V9IGNvbnRleHQuc291cmNlIHRoZSBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge2Rqcy5lbGVtZW50LkJhc2V9IGNvbnRleHQudGFyZ2V0IHRoZSBwYXJlbnQgb2JqZWN0XG4gKiBAcGFyYW0ge1BvaW50fSBjb250ZXh0LnBvc2l0aW9uIHBvc2l0aW9uIG9mIHRoZSBuZXcgZWxlbWVudFxuICovXG5DcmVhdGVDb25uZWN0aW9uSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQsXG4gICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcbiAgICAgIHBhcmVudEluZGV4ID0gY29udGV4dC5wYXJlbnRJbmRleCxcbiAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cztcblxuICBpZiAoIXNvdXJjZSB8fCAhdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzb3VyY2UgYW5kIHRhcmdldCByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKCFwYXJlbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCByZXF1aXJlZCcpO1xuICB9XG5cbiAgY29ubmVjdGlvbi5zb3VyY2UgPSBzb3VyY2U7XG4gIGNvbm5lY3Rpb24udGFyZ2V0ID0gdGFyZ2V0O1xuXG4gIGlmICghY29ubmVjdGlvbi53YXlwb2ludHMpIHtcbiAgICBjb25uZWN0aW9uLndheXBvaW50cyA9IHRoaXMuX2xheW91dGVyLmxheW91dENvbm5lY3Rpb24oY29ubmVjdGlvbiwgaGludHMpO1xuICB9XG5cbiAgLy8gYWRkIGNvbm5lY3Rpb25cbiAgdGhpcy5fY2FudmFzLmFkZENvbm5lY3Rpb24oY29ubmVjdGlvbiwgcGFyZW50LCBwYXJlbnRJbmRleCk7XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59O1xuXG5DcmVhdGVDb25uZWN0aW9uSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbjtcblxuICB0aGlzLl9jYW52YXMucmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uKTtcblxuICBjb25uZWN0aW9uLnNvdXJjZSA9IG51bGw7XG4gIGNvbm5lY3Rpb24udGFyZ2V0ID0gbnVsbDtcblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07IiwiaW1wb3J0IHtcclxuICBhc3NpZ24sXHJcbiAgZm9yRWFjaCxcclxuICBpc051bWJlcixcclxuICBtYXAsXHJcbiAgcGljayxcclxuICB2YWx1ZXNcclxufSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGdldEJCb3gsXHJcbiAgZ2V0UGFyZW50c1xyXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvRWxlbWVudHMnO1xyXG5cclxudmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENyZWF0ZUVsZW1lbnRzSGFuZGxlcihtb2RlbGluZykge1xyXG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XHJcbn1cclxuXHJcbkNyZWF0ZUVsZW1lbnRzSGFuZGxlci4kaW5qZWN0ID0gW1xyXG4gICdtb2RlbGluZydcclxuXTtcclxuXHJcbkNyZWF0ZUVsZW1lbnRzSGFuZGxlci5wcm90b3R5cGUucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICB2YXIgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzLFxyXG4gICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcclxuICAgICAgcGFyZW50SW5kZXggPSBjb250ZXh0LnBhcmVudEluZGV4LFxyXG4gICAgICBwb3NpdGlvbiA9IGNvbnRleHQucG9zaXRpb24sXHJcbiAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cztcclxuXHJcbiAgdmFyIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XHJcblxyXG4gIC8vIG1ha2Ugc3VyZSBlYWNoIGVsZW1lbnQgaGFzIHggYW5kIHlcclxuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICBpZiAoIWlzTnVtYmVyKGVsZW1lbnQueCkpIHtcclxuICAgICAgZWxlbWVudC54ID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzTnVtYmVyKGVsZW1lbnQueSkpIHtcclxuICAgICAgZWxlbWVudC55ID0gMDtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgdmFyIGJib3ggPSBnZXRCQm94KGVsZW1lbnRzKTtcclxuXHJcbiAgLy8gY2VudGVyIGVsZW1lbnRzIGFyb3VuZCBwb3NpdGlvblxyXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgIGlmIChpc0Nvbm5lY3Rpb24oZWxlbWVudCkpIHtcclxuICAgICAgZWxlbWVudC53YXlwb2ludHMgPSBtYXAoZWxlbWVudC53YXlwb2ludHMsIGZ1bmN0aW9uKHdheXBvaW50KSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHg6IHJvdW5kKHdheXBvaW50LnggLSBiYm94LnggLSBiYm94LndpZHRoIC8gMiArIHBvc2l0aW9uLngpLFxyXG4gICAgICAgICAgeTogcm91bmQod2F5cG9pbnQueSAtIGJib3gueSAtIGJib3guaGVpZ2h0IC8gMiArIHBvc2l0aW9uLnkpXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXNzaWduKGVsZW1lbnQsIHtcclxuICAgICAgeDogcm91bmQoZWxlbWVudC54IC0gYmJveC54IC0gYmJveC53aWR0aCAvIDIgKyBwb3NpdGlvbi54KSxcclxuICAgICAgeTogcm91bmQoZWxlbWVudC55IC0gYmJveC55IC0gYmJveC5oZWlnaHQgLyAyICsgcG9zaXRpb24ueSlcclxuICAgIH0pO1xyXG4gIH0pO1xyXG5cclxuICB2YXIgcGFyZW50cyA9IGdldFBhcmVudHMoZWxlbWVudHMpO1xyXG5cclxuICB2YXIgY2FjaGUgPSB7fTtcclxuXHJcbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgaWYgKGlzQ29ubmVjdGlvbihlbGVtZW50KSkge1xyXG4gICAgICBjYWNoZVsgZWxlbWVudC5pZCBdID0gaXNOdW1iZXIocGFyZW50SW5kZXgpID9cclxuICAgICAgICBtb2RlbGluZy5jcmVhdGVDb25uZWN0aW9uKFxyXG4gICAgICAgICAgY2FjaGVbIGVsZW1lbnQuc291cmNlLmlkIF0sXHJcbiAgICAgICAgICBjYWNoZVsgZWxlbWVudC50YXJnZXQuaWQgXSxcclxuICAgICAgICAgIHBhcmVudEluZGV4LFxyXG4gICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgIGVsZW1lbnQucGFyZW50IHx8IHBhcmVudCxcclxuICAgICAgICAgIGhpbnRzXHJcbiAgICAgICAgKSA6XHJcbiAgICAgICAgbW9kZWxpbmcuY3JlYXRlQ29ubmVjdGlvbihcclxuICAgICAgICAgIGNhY2hlWyBlbGVtZW50LnNvdXJjZS5pZCBdLFxyXG4gICAgICAgICAgY2FjaGVbIGVsZW1lbnQudGFyZ2V0LmlkIF0sXHJcbiAgICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgICAgZWxlbWVudC5wYXJlbnQgfHwgcGFyZW50LFxyXG4gICAgICAgICAgaGludHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjcmVhdGVTaGFwZUhpbnRzID0gYXNzaWduKHt9LCBoaW50cyk7XHJcblxyXG4gICAgaWYgKHBhcmVudHMuaW5kZXhPZihlbGVtZW50KSA9PT0gLTEpIHtcclxuICAgICAgY3JlYXRlU2hhcGVIaW50cy5hdXRvUmVzaXplID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY2FjaGVbIGVsZW1lbnQuaWQgXSA9IGlzTnVtYmVyKHBhcmVudEluZGV4KSA/XHJcbiAgICAgIG1vZGVsaW5nLmNyZWF0ZVNoYXBlKFxyXG4gICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgcGljayhlbGVtZW50LCBbICd4JywgJ3knLCAnd2lkdGgnLCAnaGVpZ2h0JyBdKSxcclxuICAgICAgICBlbGVtZW50LnBhcmVudCB8fCBwYXJlbnQsXHJcbiAgICAgICAgcGFyZW50SW5kZXgsXHJcbiAgICAgICAgY3JlYXRlU2hhcGVIaW50c1xyXG4gICAgICApIDpcclxuICAgICAgbW9kZWxpbmcuY3JlYXRlU2hhcGUoXHJcbiAgICAgICAgZWxlbWVudCxcclxuICAgICAgICBwaWNrKGVsZW1lbnQsIFsgJ3gnLCAneScsICd3aWR0aCcsICdoZWlnaHQnIF0pLFxyXG4gICAgICAgIGVsZW1lbnQucGFyZW50IHx8IHBhcmVudCxcclxuICAgICAgICBjcmVhdGVTaGFwZUhpbnRzXHJcbiAgICAgICk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnRleHQuZWxlbWVudHMgPSB2YWx1ZXMoY2FjaGUpO1xyXG59O1xyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiAhIWVsZW1lbnQud2F5cG9pbnRzO1xyXG59IiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENyZWF0ZVNoYXBlSGFuZGxlciBmcm9tICcuL0NyZWF0ZVNoYXBlSGFuZGxlcic7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBhdHRhY2hlcyBhIGxhYmVsIHRvIGEgZ2l2ZW4gdGFyZ2V0IHNoYXBlLlxuICpcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3JlYXRlTGFiZWxIYW5kbGVyKGNhbnZhcykge1xuICBDcmVhdGVTaGFwZUhhbmRsZXIuY2FsbCh0aGlzLCBjYW52YXMpO1xufVxuXG5pbmhlcml0cyhDcmVhdGVMYWJlbEhhbmRsZXIsIENyZWF0ZVNoYXBlSGFuZGxlcik7XG5cbkNyZWF0ZUxhYmVsSGFuZGxlci4kaW5qZWN0ID0gWyAnY2FudmFzJyBdO1xuXG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxudmFyIG9yaWdpbmFsRXhlY3V0ZSA9IENyZWF0ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZTtcblxuLyoqXG4gKiBBcHBlbmRzIGEgbGFiZWwgdG8gYSB0YXJnZXQgc2hhcGUuXG4gKlxuICogQG1ldGhvZCBDcmVhdGVMYWJlbEhhbmRsZXIjZXhlY3V0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcGFyYW0ge0VsZW1lbnREZXNjcmlwdG9yfSBjb250ZXh0LnRhcmdldCB0aGUgZWxlbWVudCB0aGUgbGFiZWwgaXMgYXR0YWNoZWQgdG9cbiAqIEBwYXJhbSB7RWxlbWVudERlc2NyaXB0b3J9IGNvbnRleHQucGFyZW50IHRoZSBwYXJlbnQgb2JqZWN0XG4gKiBAcGFyYW0ge1BvaW50fSBjb250ZXh0LnBvc2l0aW9uIHBvc2l0aW9uIG9mIHRoZSBuZXcgZWxlbWVudFxuICovXG5DcmVhdGVMYWJlbEhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGxhYmVsID0gY29udGV4dC5zaGFwZTtcblxuICBlbnN1cmVWYWxpZERpbWVuc2lvbnMobGFiZWwpO1xuXG4gIGxhYmVsLmxhYmVsVGFyZ2V0ID0gY29udGV4dC5sYWJlbFRhcmdldDtcblxuICByZXR1cm4gb3JpZ2luYWxFeGVjdXRlLmNhbGwodGhpcywgY29udGV4dCk7XG59O1xuXG52YXIgb3JpZ2luYWxSZXZlcnQgPSBDcmVhdGVTaGFwZUhhbmRsZXIucHJvdG90eXBlLnJldmVydDtcblxuLyoqXG4gKiBVbmRvIGFwcGVuZCBieSByZW1vdmluZyB0aGUgc2hhcGVcbiAqL1xuQ3JlYXRlTGFiZWxIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIGNvbnRleHQuc2hhcGUubGFiZWxUYXJnZXQgPSBudWxsO1xuXG4gIHJldHVybiBvcmlnaW5hbFJldmVydC5jYWxsKHRoaXMsIGNvbnRleHQpO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZW5zdXJlVmFsaWREaW1lbnNpb25zKGxhYmVsKSB7XG5cbiAgLy8gbWFrZSBzdXJlIGEgbGFiZWwgaGFzIHZhbGlkIHsgd2lkdGgsIGhlaWdodCB9IGRpbWVuc2lvbnNcbiAgWyAnd2lkdGgnLCAnaGVpZ2h0JyBdLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICAgIGlmICh0eXBlb2YgbGFiZWxbcHJvcF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsYWJlbFtwcm9wXSA9IDA7XG4gICAgfVxuICB9KTtcbn0iLCJpbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciByb3VuZCA9IE1hdGgucm91bmQ7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIHJldmVyc2libGUgYWRkaXRpb24gb2Ygc2hhcGVzLlxuICpcbiAqIEBwYXJhbSB7Y2FudmFzfSBDYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3JlYXRlU2hhcGVIYW5kbGVyKGNhbnZhcykge1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG59XG5cbkNyZWF0ZVNoYXBlSGFuZGxlci4kaW5qZWN0ID0gWyAnY2FudmFzJyBdO1xuXG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxuLyoqXG4gKiBBcHBlbmRzIGEgc2hhcGUgdG8gYSB0YXJnZXQgc2hhcGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gY29udGV4dC5wYXJlbnQgdGhlIHBhcmVudCBvYmplY3RcbiAqIEBwYXJhbSB7UG9pbnR9IGNvbnRleHQucG9zaXRpb24gcG9zaXRpb24gb2YgdGhlIG5ldyBlbGVtZW50XG4gKi9cbkNyZWF0ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgcG9zaXRpb25PckJvdW5kcyA9IGNvbnRleHQucG9zaXRpb24sXG4gICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcbiAgICAgIHBhcmVudEluZGV4ID0gY29udGV4dC5wYXJlbnRJbmRleDtcblxuICBpZiAoIXBhcmVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAoIXBvc2l0aW9uT3JCb3VuZHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Bvc2l0aW9uIHJlcXVpcmVkJyk7XG4gIH1cblxuICAvLyAoMSkgYWRkIGF0IGV2ZW50IGNlbnRlciBwb3NpdGlvbiBfb3JfIGF0IGdpdmVuIGJvdW5kc1xuICBpZiAocG9zaXRpb25PckJvdW5kcy53aWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYXNzaWduKHNoYXBlLCBwb3NpdGlvbk9yQm91bmRzKTtcbiAgfSBlbHNlIHtcbiAgICBhc3NpZ24oc2hhcGUsIHtcbiAgICAgIHg6IHBvc2l0aW9uT3JCb3VuZHMueCAtIHJvdW5kKHNoYXBlLndpZHRoIC8gMiksXG4gICAgICB5OiBwb3NpdGlvbk9yQm91bmRzLnkgLSByb3VuZChzaGFwZS5oZWlnaHQgLyAyKVxuICAgIH0pO1xuICB9XG5cbiAgLy8gKDIpIGFkZCB0byBjYW52YXNcbiAgdGhpcy5fY2FudmFzLmFkZFNoYXBlKHNoYXBlLCBwYXJlbnQsIHBhcmVudEluZGV4KTtcblxuICByZXR1cm4gc2hhcGU7XG59O1xuXG5cbi8qKlxuICogVW5kbyBhcHBlbmQgYnkgcmVtb3ZpbmcgdGhlIHNoYXBlXG4gKi9cbkNyZWF0ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgLy8gKDMpIHJlbW92ZSBmb3JtIGNhbnZhc1xuICB0aGlzLl9jYW52YXMucmVtb3ZlU2hhcGUoc2hhcGUpO1xuXG4gIHJldHVybiBzaGFwZTtcbn07IiwiaW1wb3J0IHtcbiAgYWRkIGFzIGNvbGxlY3Rpb25BZGQsXG4gIGluZGV4T2YgYXMgY29sbGVjdGlvbklkeFxufSBmcm9tICcuLi8uLi8uLi91dGlsL0NvbGxlY3Rpb25zJztcblxuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgcmV2ZXJzaWJsZSBkZWxldGlvbiBvZiBDb25uZWN0aW9ucy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGVsZXRlQ29ubmVjdGlvbkhhbmRsZXIoY2FudmFzLCBtb2RlbGluZykge1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG59XG5cbkRlbGV0ZUNvbm5lY3Rpb25IYW5kbGVyLiRpbmplY3QgPSBbXG4gICdjYW52YXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbkRlbGV0ZUNvbm5lY3Rpb25IYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgcGFyZW50ID0gY29ubmVjdGlvbi5wYXJlbnQ7XG5cbiAgY29udGV4dC5wYXJlbnQgPSBwYXJlbnQ7XG5cbiAgLy8gcmVtZW1iZXIgY29udGFpbm1lbnRcbiAgY29udGV4dC5wYXJlbnRJbmRleCA9IGNvbGxlY3Rpb25JZHgocGFyZW50LmNoaWxkcmVuLCBjb25uZWN0aW9uKTtcblxuICBjb250ZXh0LnNvdXJjZSA9IGNvbm5lY3Rpb24uc291cmNlO1xuICBjb250ZXh0LnRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0O1xuXG4gIHRoaXMuX2NhbnZhcy5yZW1vdmVDb25uZWN0aW9uKGNvbm5lY3Rpb24pO1xuXG4gIGNvbm5lY3Rpb24uc291cmNlID0gbnVsbDtcbiAgY29ubmVjdGlvbi50YXJnZXQgPSBudWxsO1xuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufTtcblxuLyoqXG4gKiBDb21tYW5kIHJldmVydCBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuRGVsZXRlQ29ubmVjdGlvbkhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIHBhcmVudCA9IGNvbnRleHQucGFyZW50LFxuICAgICAgcGFyZW50SW5kZXggPSBjb250ZXh0LnBhcmVudEluZGV4O1xuXG4gIGNvbm5lY3Rpb24uc291cmNlID0gY29udGV4dC5zb3VyY2U7XG4gIGNvbm5lY3Rpb24udGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XG5cbiAgLy8gcmVzdG9yZSBjb250YWlubWVudFxuICBjb2xsZWN0aW9uQWRkKHBhcmVudC5jaGlsZHJlbiwgY29ubmVjdGlvbiwgcGFyZW50SW5kZXgpO1xuXG4gIHRoaXMuX2NhbnZhcy5hZGRDb25uZWN0aW9uKGNvbm5lY3Rpb24sIHBhcmVudCk7XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59O1xuIiwiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJ21pbi1kYXNoJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEZWxldGVFbGVtZW50c0hhbmRsZXIobW9kZWxpbmcsIGVsZW1lbnRSZWdpc3RyeSkge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl9lbGVtZW50UmVnaXN0cnkgPSBlbGVtZW50UmVnaXN0cnk7XG59XG5cbkRlbGV0ZUVsZW1lbnRzSGFuZGxlci4kaW5qZWN0ID0gW1xuICAnbW9kZWxpbmcnLFxuICAnZWxlbWVudFJlZ2lzdHJ5J1xuXTtcblxuXG5EZWxldGVFbGVtZW50c0hhbmRsZXIucHJvdG90eXBlLnBvc3RFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nLFxuICAgICAgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LFxuICAgICAgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzO1xuXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgIC8vIGVsZW1lbnQgbWF5IGhhdmUgYmVlbiByZW1vdmVkIHdpdGggcHJldmlvdXNcbiAgICAvLyByZW1vdmUgb3BlcmF0aW9ucyBhbHJlYWR5IChlLmcuIGluIGNhc2Ugb2YgbmVzdGluZylcbiAgICBpZiAoIWVsZW1lbnRSZWdpc3RyeS5nZXQoZWxlbWVudC5pZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcbiAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGVsaW5nLnJlbW92ZVNoYXBlKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG59OyIsImltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICBpbmRleE9mIGFzIGNvbGxlY3Rpb25JZHhcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Db2xsZWN0aW9ucyc7XG5cbmltcG9ydCB7IHNhdmVDbGVhciB9IGZyb20gJy4uLy4uLy4uL3V0aWwvUmVtb3ZhbCc7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIHJldmVyc2libGUgZGVsZXRpb24gb2Ygc2hhcGVzLlxuICpcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGVsZXRlU2hhcGVIYW5kbGVyKGNhbnZhcywgbW9kZWxpbmcpIHtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5EZWxldGVTaGFwZUhhbmRsZXIuJGluamVjdCA9IFsgJ2NhbnZhcycsICdtb2RlbGluZycgXTtcblxuXG4vKipcbiAqIC0gUmVtb3ZlIGNvbm5lY3Rpb25zXG4gKiAtIFJlbW92ZSBhbGwgZGlyZWN0IGNoaWxkcmVuXG4gKi9cbkRlbGV0ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gIC8vIHJlbW92ZSBjb25uZWN0aW9uc1xuICBzYXZlQ2xlYXIoc2hhcGUuaW5jb21pbmcsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcblxuICAgIC8vIFRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb25uZWN0aW9uIGlzbid0IHJlbW92ZWQgdHdpY2VcbiAgICAvLyBGb3IgZXhhbXBsZSBpZiBhIGNvbnRhaW5lciBpcyByZW1vdmVkXG4gICAgbW9kZWxpbmcucmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uLCB7IG5lc3RlZDogdHJ1ZSB9KTtcbiAgfSk7XG5cbiAgc2F2ZUNsZWFyKHNoYXBlLm91dGdvaW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgbW9kZWxpbmcucmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uLCB7IG5lc3RlZDogdHJ1ZSB9KTtcbiAgfSk7XG5cbiAgLy8gcmVtb3ZlIGNoaWxkIHNoYXBlcyBhbmQgY29ubmVjdGlvbnNcbiAgc2F2ZUNsZWFyKHNoYXBlLmNoaWxkcmVuLCBmdW5jdGlvbihjaGlsZCkge1xuICAgIGlmIChpc0Nvbm5lY3Rpb24oY2hpbGQpKSB7XG4gICAgICBtb2RlbGluZy5yZW1vdmVDb25uZWN0aW9uKGNoaWxkLCB7IG5lc3RlZDogdHJ1ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbW9kZWxpbmcucmVtb3ZlU2hhcGUoY2hpbGQsIHsgbmVzdGVkOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBzaGFwZSBhbmQgcmVtZW1iZXIgdGhlIHBhcmVudFxuICovXG5EZWxldGVTaGFwZUhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBjYW52YXMgPSB0aGlzLl9jYW52YXM7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIG9sZFBhcmVudCA9IHNoYXBlLnBhcmVudDtcblxuICBjb250ZXh0Lm9sZFBhcmVudCA9IG9sZFBhcmVudDtcblxuICAvLyByZW1vdmUgY29udGFpbm1lbnRcbiAgY29udGV4dC5vbGRQYXJlbnRJbmRleCA9IGNvbGxlY3Rpb25JZHgob2xkUGFyZW50LmNoaWxkcmVuLCBzaGFwZSk7XG5cbiAgLy8gcmVtb3ZlIHNoYXBlXG4gIGNhbnZhcy5yZW1vdmVTaGFwZShzaGFwZSk7XG5cbiAgcmV0dXJuIHNoYXBlO1xufTtcblxuXG4vKipcbiAqIENvbW1hbmQgcmV2ZXJ0IGltcGxlbWVudGF0aW9uXG4gKi9cbkRlbGV0ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjYW52YXMgPSB0aGlzLl9jYW52YXM7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIG9sZFBhcmVudCA9IGNvbnRleHQub2xkUGFyZW50LFxuICAgICAgb2xkUGFyZW50SW5kZXggPSBjb250ZXh0Lm9sZFBhcmVudEluZGV4O1xuXG4gIC8vIHJlc3RvcmUgY29udGFpbm1lbnRcbiAgY29sbGVjdGlvbkFkZChvbGRQYXJlbnQuY2hpbGRyZW4sIHNoYXBlLCBvbGRQYXJlbnRJbmRleCk7XG5cbiAgY2FudmFzLmFkZFNoYXBlKHNoYXBlLCBvbGRQYXJlbnQpO1xuXG4gIHJldHVybiBzaGFwZTtcbn07XG5cbmZ1bmN0aW9uIGlzQ29ubmVjdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LndheXBvaW50cztcbn1cbiIsImltcG9ydCB7XG4gIGZvckVhY2gsXG4gIHNvcnRCeVxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBkaXN0cmlidXRlcyBlbGVtZW50cyBldmVubHkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERpc3RyaWJ1dGVFbGVtZW50cyhtb2RlbGluZykge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5EaXN0cmlidXRlRWxlbWVudHMuJGluamVjdCA9IFsgJ21vZGVsaW5nJyBdO1xuXG52YXIgT0ZGX0FYSVMgPSB7XG4gIHg6ICd5JyxcbiAgeTogJ3gnXG59O1xuXG5EaXN0cmlidXRlRWxlbWVudHMucHJvdG90eXBlLnByZUV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nO1xuXG4gIHZhciBncm91cHMgPSBjb250ZXh0Lmdyb3VwcyxcbiAgICAgIGF4aXMgPSBjb250ZXh0LmF4aXMsXG4gICAgICBkaW1lbnNpb24gPSBjb250ZXh0LmRpbWVuc2lvbjtcblxuICBmdW5jdGlvbiB1cGRhdGVSYW5nZShncm91cCwgZWxlbWVudCkge1xuICAgIGdyb3VwLnJhbmdlLm1pbiA9IE1hdGgubWluKGVsZW1lbnRbYXhpc10sIGdyb3VwLnJhbmdlLm1pbik7XG4gICAgZ3JvdXAucmFuZ2UubWF4ID0gTWF0aC5tYXgoZWxlbWVudFtheGlzXSArIGVsZW1lbnRbZGltZW5zaW9uXSwgZ3JvdXAucmFuZ2UubWF4KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNlbnRlcihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnRbYXhpc10gKyBlbGVtZW50W2RpbWVuc2lvbl0gLyAyO1xuICB9XG5cbiAgZnVuY3Rpb24gbGFzdElkeChhcnIpIHtcbiAgICByZXR1cm4gYXJyLmxlbmd0aCAtIDE7XG4gIH1cblxuICBmdW5jdGlvbiByYW5nZURpZmYocmFuZ2UpIHtcbiAgICByZXR1cm4gcmFuZ2UubWF4IC0gcmFuZ2UubWluO1xuICB9XG5cbiAgZnVuY3Rpb24gY2VudGVyRWxlbWVudChyZWZDZW50ZXIsIGVsZW1lbnQpIHtcbiAgICB2YXIgZGVsdGEgPSB7IHk6IDAgfTtcblxuICAgIGRlbHRhW2F4aXNdID0gcmVmQ2VudGVyIC0gY2VudGVyKGVsZW1lbnQpO1xuXG4gICAgaWYgKGRlbHRhW2F4aXNdKSB7XG5cbiAgICAgIGRlbHRhW09GRl9BWElTW2F4aXNdXSA9IDA7XG5cbiAgICAgIG1vZGVsaW5nLm1vdmVFbGVtZW50cyhbIGVsZW1lbnQgXSwgZGVsdGEsIGVsZW1lbnQucGFyZW50KTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmlyc3RHcm91cCA9IGdyb3Vwc1swXSxcbiAgICAgIGxhc3RHcm91cElkeCA9IGxhc3RJZHgoZ3JvdXBzKSxcbiAgICAgIGxhc3RHcm91cCA9IGdyb3Vwc1sgbGFzdEdyb3VwSWR4IF07XG5cbiAgdmFyIG1hcmdpbixcbiAgICAgIHNwYWNlSW5CZXR3ZWVuLFxuICAgICAgZ3JvdXBzU2l6ZSA9IDA7IC8vIHRoZSBzaXplIG9mIGVhY2ggcmFuZ2VcblxuICBmb3JFYWNoKGdyb3VwcywgZnVuY3Rpb24oZ3JvdXAsIGlkeCkge1xuICAgIHZhciBzb3J0ZWRFbGVtZW50cyxcbiAgICAgICAgcmVmRWxlbSxcbiAgICAgICAgcmVmQ2VudGVyO1xuXG4gICAgaWYgKGdyb3VwLmVsZW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIGlmIChpZHggJiYgaWR4ICE9PSBncm91cHMubGVuZ3RoIC0gMSkge1xuICAgICAgICB1cGRhdGVSYW5nZShncm91cCwgZ3JvdXAuZWxlbWVudHNbMF0pO1xuXG4gICAgICAgIGdyb3Vwc1NpemUgKz0gcmFuZ2VEaWZmKGdyb3VwLnJhbmdlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzb3J0ZWRFbGVtZW50cyA9IHNvcnRCeShncm91cC5lbGVtZW50cywgYXhpcyk7XG5cbiAgICByZWZFbGVtID0gc29ydGVkRWxlbWVudHNbMF07XG5cbiAgICBpZiAoaWR4ID09PSBsYXN0R3JvdXBJZHgpIHtcbiAgICAgIHJlZkVsZW0gPSBzb3J0ZWRFbGVtZW50c1tsYXN0SWR4KHNvcnRlZEVsZW1lbnRzKV07XG4gICAgfVxuXG4gICAgcmVmQ2VudGVyID0gY2VudGVyKHJlZkVsZW0pO1xuXG4gICAgLy8gd2FubmEgdXBkYXRlIHRoZSByYW5nZXMgYWZ0ZXIgdGhlIHNoYXBlcyBoYXZlIGJlZW4gY2VudGVyZWRcbiAgICBncm91cC5yYW5nZSA9IG51bGw7XG5cbiAgICBmb3JFYWNoKHNvcnRlZEVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICAgIGNlbnRlckVsZW1lbnQocmVmQ2VudGVyLCBlbGVtZW50KTtcblxuICAgICAgaWYgKGdyb3VwLnJhbmdlID09PSBudWxsKSB7XG4gICAgICAgIGdyb3VwLnJhbmdlID0ge1xuICAgICAgICAgIG1pbjogZWxlbWVudFtheGlzXSxcbiAgICAgICAgICBtYXg6IGVsZW1lbnRbYXhpc10gKyBlbGVtZW50W2RpbWVuc2lvbl1cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSBncm91cCdzIHJhbmdlIGFmdGVyIGNlbnRlcmluZyB0aGUgcmFuZ2UgZWxlbWVudHNcbiAgICAgIHVwZGF0ZVJhbmdlKGdyb3VwLCBlbGVtZW50KTtcbiAgICB9KTtcblxuICAgIGlmIChpZHggJiYgaWR4ICE9PSBncm91cHMubGVuZ3RoIC0gMSkge1xuICAgICAgZ3JvdXBzU2l6ZSArPSByYW5nZURpZmYoZ3JvdXAucmFuZ2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgc3BhY2VJbkJldHdlZW4gPSBNYXRoLmFicyhsYXN0R3JvdXAucmFuZ2UubWluIC0gZmlyc3RHcm91cC5yYW5nZS5tYXgpO1xuXG4gIG1hcmdpbiA9IE1hdGgucm91bmQoKHNwYWNlSW5CZXR3ZWVuIC0gZ3JvdXBzU2l6ZSkgLyAoZ3JvdXBzLmxlbmd0aCAtIDEpKTtcblxuICBpZiAobWFyZ2luIDwgZ3JvdXBzLmxlbmd0aCAtIDEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3JFYWNoKGdyb3VwcywgZnVuY3Rpb24oZ3JvdXAsIGdyb3VwSWR4KSB7XG4gICAgdmFyIGRlbHRhID0ge30sXG4gICAgICAgIHByZXZHcm91cDtcblxuICAgIGlmIChncm91cCA9PT0gZmlyc3RHcm91cCB8fCBncm91cCA9PT0gbGFzdEdyb3VwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJldkdyb3VwID0gZ3JvdXBzW2dyb3VwSWR4IC0gMV07XG5cbiAgICBncm91cC5yYW5nZS5tYXggPSAwO1xuXG4gICAgZm9yRWFjaChncm91cC5lbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCwgaWR4KSB7XG4gICAgICBkZWx0YVtPRkZfQVhJU1theGlzXV0gPSAwO1xuICAgICAgZGVsdGFbYXhpc10gPSAocHJldkdyb3VwLnJhbmdlLm1heCAtIGVsZW1lbnRbYXhpc10pICsgbWFyZ2luO1xuXG4gICAgICBpZiAoZ3JvdXAucmFuZ2UubWluICE9PSBlbGVtZW50W2F4aXNdKSB7XG4gICAgICAgIGRlbHRhW2F4aXNdICs9IGVsZW1lbnRbYXhpc10gLSBncm91cC5yYW5nZS5taW47XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWx0YVtheGlzXSkge1xuICAgICAgICBtb2RlbGluZy5tb3ZlRWxlbWVudHMoWyBlbGVtZW50IF0sIGRlbHRhLCBlbGVtZW50LnBhcmVudCk7XG4gICAgICB9XG5cbiAgICAgIGdyb3VwLnJhbmdlLm1heCA9IE1hdGgubWF4KGVsZW1lbnRbYXhpc10gKyBlbGVtZW50W2RpbWVuc2lvbl0sIGlkeCA/IGdyb3VwLnJhbmdlLm1heCA6IDApO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbkRpc3RyaWJ1dGVFbGVtZW50cy5wcm90b3R5cGUucG9zdEV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbn07XG4iLCJpbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBpbXBsZW1lbnRzIHJldmVyc2libGUgbW92aW5nIG9mIHNoYXBlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTGF5b3V0Q29ubmVjdGlvbkhhbmRsZXIobGF5b3V0ZXIsIGNhbnZhcykge1xuICB0aGlzLl9sYXlvdXRlciA9IGxheW91dGVyO1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG59XG5cbkxheW91dENvbm5lY3Rpb25IYW5kbGVyLiRpbmplY3QgPSBbICdsYXlvdXRlcicsICdjYW52YXMnIF07XG5cbkxheW91dENvbm5lY3Rpb25IYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uO1xuXG4gIHZhciBvbGRXYXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cztcblxuICBhc3NpZ24oY29udGV4dCwge1xuICAgIG9sZFdheXBvaW50czogb2xkV2F5cG9pbnRzXG4gIH0pO1xuXG4gIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gdGhpcy5fbGF5b3V0ZXIubGF5b3V0Q29ubmVjdGlvbihjb25uZWN0aW9uLCBjb250ZXh0LmhpbnRzKTtcblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07XG5cbkxheW91dENvbm5lY3Rpb25IYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb247XG5cbiAgY29ubmVjdGlvbi53YXlwb2ludHMgPSBjb250ZXh0Lm9sZFdheXBvaW50cztcblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07XG4iLCJpbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbmltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICByZW1vdmUgYXMgY29sbGVjdGlvblJlbW92ZVxufSBmcm9tICcuLi8uLi8uLi91dGlsL0NvbGxlY3Rpb25zJztcblxuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgcmV2ZXJzaWJsZSBtb3Zpbmcgb2YgY29ubmVjdGlvbnMuXG4gKlxuICogVGhlIGhhbmRsZXIgZGlmZmVycyBmcm9tIHRoZSBsYXlvdXQgY29ubmVjdGlvbiBoYW5kbGVyIGluIGEgc2Vuc2VcbiAqIHRoYXQgaXQgcHJlc2VydmVzIHRoZSBjb25uZWN0aW9uIGxheW91dC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW92ZUNvbm5lY3Rpb25IYW5kbGVyKCkgeyB9XG5cblxuTW92ZUNvbm5lY3Rpb25IYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgZGVsdGEgPSBjb250ZXh0LmRlbHRhO1xuXG4gIHZhciBuZXdQYXJlbnQgPSBjb250ZXh0Lm5ld1BhcmVudCB8fCBjb25uZWN0aW9uLnBhcmVudCxcbiAgICAgIG5ld1BhcmVudEluZGV4ID0gY29udGV4dC5uZXdQYXJlbnRJbmRleCxcbiAgICAgIG9sZFBhcmVudCA9IGNvbm5lY3Rpb24ucGFyZW50O1xuXG4gIC8vIHNhdmUgb2xkIHBhcmVudCBpbiBjb250ZXh0XG4gIGNvbnRleHQub2xkUGFyZW50ID0gb2xkUGFyZW50O1xuICBjb250ZXh0Lm9sZFBhcmVudEluZGV4ID0gY29sbGVjdGlvblJlbW92ZShvbGRQYXJlbnQuY2hpbGRyZW4sIGNvbm5lY3Rpb24pO1xuXG4gIC8vIGFkZCB0byBuZXcgcGFyZW50IGF0IHBvc2l0aW9uXG4gIGNvbGxlY3Rpb25BZGQobmV3UGFyZW50LmNoaWxkcmVuLCBjb25uZWN0aW9uLCBuZXdQYXJlbnRJbmRleCk7XG5cbiAgLy8gdXBkYXRlIHBhcmVudFxuICBjb25uZWN0aW9uLnBhcmVudCA9IG5ld1BhcmVudDtcblxuICAvLyB1cGRhdGUgd2F5cG9pbnQgcG9zaXRpb25zXG4gIGZvckVhY2goY29ubmVjdGlvbi53YXlwb2ludHMsIGZ1bmN0aW9uKHApIHtcbiAgICBwLnggKz0gZGVsdGEueDtcbiAgICBwLnkgKz0gZGVsdGEueTtcblxuICAgIGlmIChwLm9yaWdpbmFsKSB7XG4gICAgICBwLm9yaWdpbmFsLnggKz0gZGVsdGEueDtcbiAgICAgIHAub3JpZ2luYWwueSArPSBkZWx0YS55O1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59O1xuXG5Nb3ZlQ29ubmVjdGlvbkhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIG5ld1BhcmVudCA9IGNvbm5lY3Rpb24ucGFyZW50LFxuICAgICAgb2xkUGFyZW50ID0gY29udGV4dC5vbGRQYXJlbnQsXG4gICAgICBvbGRQYXJlbnRJbmRleCA9IGNvbnRleHQub2xkUGFyZW50SW5kZXgsXG4gICAgICBkZWx0YSA9IGNvbnRleHQuZGVsdGE7XG5cbiAgLy8gcmVtb3ZlIGZyb20gbmV3UGFyZW50XG4gIGNvbGxlY3Rpb25SZW1vdmUobmV3UGFyZW50LmNoaWxkcmVuLCBjb25uZWN0aW9uKTtcblxuICAvLyByZXN0b3JlIHByZXZpb3VzIGxvY2F0aW9uIGluIG9sZCBwYXJlbnRcbiAgY29sbGVjdGlvbkFkZChvbGRQYXJlbnQuY2hpbGRyZW4sIGNvbm5lY3Rpb24sIG9sZFBhcmVudEluZGV4KTtcblxuICAvLyByZXN0b3JlIHBhcmVudFxuICBjb25uZWN0aW9uLnBhcmVudCA9IG9sZFBhcmVudDtcblxuICAvLyByZXZlcnQgdG8gb2xkIHdheXBvaW50IHBvc2l0aW9uc1xuICBmb3JFYWNoKGNvbm5lY3Rpb24ud2F5cG9pbnRzLCBmdW5jdGlvbihwKSB7XG4gICAgcC54IC09IGRlbHRhLng7XG4gICAgcC55IC09IGRlbHRhLnk7XG5cbiAgICBpZiAocC5vcmlnaW5hbCkge1xuICAgICAgcC5vcmlnaW5hbC54IC09IGRlbHRhLng7XG4gICAgICBwLm9yaWdpbmFsLnkgLT0gZGVsdGEueTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufTsiLCJpbXBvcnQgTW92ZUhlbHBlciBmcm9tICcuL2hlbHBlci9Nb3ZlSGVscGVyJztcblxuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgcmV2ZXJzaWJsZSBtb3Zpbmcgb2Ygc2hhcGVzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb3ZlRWxlbWVudHNIYW5kbGVyKG1vZGVsaW5nKSB7XG4gIHRoaXMuX2hlbHBlciA9IG5ldyBNb3ZlSGVscGVyKG1vZGVsaW5nKTtcbn1cblxuTW92ZUVsZW1lbnRzSGFuZGxlci4kaW5qZWN0ID0gWyAnbW9kZWxpbmcnIF07XG5cbk1vdmVFbGVtZW50c0hhbmRsZXIucHJvdG90eXBlLnByZUV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIGNvbnRleHQuY2xvc3VyZSA9IHRoaXMuX2hlbHBlci5nZXRDbG9zdXJlKGNvbnRleHQuc2hhcGVzKTtcbn07XG5cbk1vdmVFbGVtZW50c0hhbmRsZXIucHJvdG90eXBlLnBvc3RFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBoaW50cyA9IGNvbnRleHQuaGludHMsXG4gICAgICBwcmltYXJ5U2hhcGU7XG5cbiAgaWYgKGhpbnRzICYmIGhpbnRzLnByaW1hcnlTaGFwZSkge1xuICAgIHByaW1hcnlTaGFwZSA9IGhpbnRzLnByaW1hcnlTaGFwZTtcbiAgICBoaW50cy5vbGRQYXJlbnQgPSBwcmltYXJ5U2hhcGUucGFyZW50O1xuICB9XG5cbiAgdGhpcy5faGVscGVyLm1vdmVDbG9zdXJlKFxuICAgIGNvbnRleHQuY2xvc3VyZSxcbiAgICBjb250ZXh0LmRlbHRhLFxuICAgIGNvbnRleHQubmV3UGFyZW50LFxuICAgIGNvbnRleHQubmV3SG9zdCxcbiAgICBwcmltYXJ5U2hhcGVcbiAgKTtcbn07IiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBwaWNrXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IE1vdmVIZWxwZXIgZnJvbSAnLi9oZWxwZXIvTW92ZUhlbHBlcic7XG5cbmltcG9ydCB7XG4gIGFkZCBhcyBjb2xsZWN0aW9uQWRkLFxuICByZW1vdmUgYXMgY29sbGVjdGlvblJlbW92ZVxufSBmcm9tICcuLi8uLi8uLi91dGlsL0NvbGxlY3Rpb25zJztcblxuaW1wb3J0IHtcbiAgZ2V0TW92ZWRTb3VyY2VBbmNob3IsXG4gIGdldE1vdmVkVGFyZ2V0QW5jaG9yXG59IGZyb20gJy4vaGVscGVyL0FuY2hvcnNIZWxwZXInO1xuXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgaW1wbGVtZW50cyByZXZlcnNpYmxlIG1vdmluZyBvZiBzaGFwZXMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vdmVTaGFwZUhhbmRsZXIobW9kZWxpbmcpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcblxuICB0aGlzLl9oZWxwZXIgPSBuZXcgTW92ZUhlbHBlcihtb2RlbGluZyk7XG59XG5cbk1vdmVTaGFwZUhhbmRsZXIuJGluamVjdCA9IFsgJ21vZGVsaW5nJyBdO1xuXG5cbk1vdmVTaGFwZUhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIGRlbHRhID0gY29udGV4dC5kZWx0YSxcbiAgICAgIG5ld1BhcmVudCA9IGNvbnRleHQubmV3UGFyZW50IHx8IHNoYXBlLnBhcmVudCxcbiAgICAgIG5ld1BhcmVudEluZGV4ID0gY29udGV4dC5uZXdQYXJlbnRJbmRleCxcbiAgICAgIG9sZFBhcmVudCA9IHNoYXBlLnBhcmVudDtcblxuICBjb250ZXh0Lm9sZEJvdW5kcyA9IHBpY2soc2hhcGUsIFsgJ3gnLCAneScsICd3aWR0aCcsICdoZWlnaHQnXSk7XG5cbiAgLy8gc2F2ZSBvbGQgcGFyZW50IGluIGNvbnRleHRcbiAgY29udGV4dC5vbGRQYXJlbnQgPSBvbGRQYXJlbnQ7XG4gIGNvbnRleHQub2xkUGFyZW50SW5kZXggPSBjb2xsZWN0aW9uUmVtb3ZlKG9sZFBhcmVudC5jaGlsZHJlbiwgc2hhcGUpO1xuXG4gIC8vIGFkZCB0byBuZXcgcGFyZW50IGF0IHBvc2l0aW9uXG4gIGNvbGxlY3Rpb25BZGQobmV3UGFyZW50LmNoaWxkcmVuLCBzaGFwZSwgbmV3UGFyZW50SW5kZXgpO1xuXG4gIC8vIHVwZGF0ZSBzaGFwZSBwYXJlbnQgKyBwb3NpdGlvblxuICBhc3NpZ24oc2hhcGUsIHtcbiAgICBwYXJlbnQ6IG5ld1BhcmVudCxcbiAgICB4OiBzaGFwZS54ICsgZGVsdGEueCxcbiAgICB5OiBzaGFwZS55ICsgZGVsdGEueVxuICB9KTtcblxuICByZXR1cm4gc2hhcGU7XG59O1xuXG5Nb3ZlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5wb3N0RXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgZGVsdGEgPSBjb250ZXh0LmRlbHRhLFxuICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzO1xuXG4gIHZhciBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nO1xuXG4gIGlmIChoaW50cy5sYXlvdXQgIT09IGZhbHNlKSB7XG5cbiAgICBmb3JFYWNoKHNoYXBlLmluY29taW5nLCBmdW5jdGlvbihjKSB7XG4gICAgICBtb2RlbGluZy5sYXlvdXRDb25uZWN0aW9uKGMsIHtcbiAgICAgICAgY29ubmVjdGlvbkVuZDogZ2V0TW92ZWRUYXJnZXRBbmNob3IoYywgc2hhcGUsIGRlbHRhKVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBmb3JFYWNoKHNoYXBlLm91dGdvaW5nLCBmdW5jdGlvbihjKSB7XG4gICAgICBtb2RlbGluZy5sYXlvdXRDb25uZWN0aW9uKGMsIHtcbiAgICAgICAgY29ubmVjdGlvblN0YXJ0OiBnZXRNb3ZlZFNvdXJjZUFuY2hvcihjLCBzaGFwZSwgZGVsdGEpXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChoaW50cy5yZWN1cnNlICE9PSBmYWxzZSkge1xuICAgIHRoaXMubW92ZUNoaWxkcmVuKGNvbnRleHQpO1xuICB9XG59O1xuXG5Nb3ZlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIG9sZFBhcmVudCA9IGNvbnRleHQub2xkUGFyZW50LFxuICAgICAgb2xkUGFyZW50SW5kZXggPSBjb250ZXh0Lm9sZFBhcmVudEluZGV4LFxuICAgICAgZGVsdGEgPSBjb250ZXh0LmRlbHRhO1xuXG4gIC8vIHJlc3RvcmUgcHJldmlvdXMgbG9jYXRpb24gaW4gb2xkIHBhcmVudFxuICBjb2xsZWN0aW9uQWRkKG9sZFBhcmVudC5jaGlsZHJlbiwgc2hhcGUsIG9sZFBhcmVudEluZGV4KTtcblxuICAvLyByZXZlcnQgdG8gb2xkIHBvc2l0aW9uIGFuZCBwYXJlbnRcbiAgYXNzaWduKHNoYXBlLCB7XG4gICAgcGFyZW50OiBvbGRQYXJlbnQsXG4gICAgeDogc2hhcGUueCAtIGRlbHRhLngsXG4gICAgeTogc2hhcGUueSAtIGRlbHRhLnlcbiAgfSk7XG5cbiAgcmV0dXJuIHNoYXBlO1xufTtcblxuTW92ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUubW92ZUNoaWxkcmVuID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBkZWx0YSA9IGNvbnRleHQuZGVsdGEsXG4gICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgdGhpcy5faGVscGVyLm1vdmVSZWN1cnNpdmUoc2hhcGUuY2hpbGRyZW4sIGRlbHRhLCBudWxsKTtcbn07XG5cbk1vdmVTaGFwZUhhbmRsZXIucHJvdG90eXBlLmdldE5ld1BhcmVudCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgcmV0dXJuIGNvbnRleHQubmV3UGFyZW50IHx8IGNvbnRleHQuc2hhcGUucGFyZW50O1xufTtcbiIsImltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdtaW4tZGFzaCc7XG5cblxuLyoqXG4gKiBSZWNvbm5lY3QgY29ubmVjdGlvbiBoYW5kbGVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlY29ubmVjdENvbm5lY3Rpb25IYW5kbGVyKG1vZGVsaW5nKSB7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG59XG5cblJlY29ubmVjdENvbm5lY3Rpb25IYW5kbGVyLiRpbmplY3QgPSBbICdtb2RlbGluZycgXTtcblxuUmVjb25uZWN0Q29ubmVjdGlvbkhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBuZXdTb3VyY2UgPSBjb250ZXh0Lm5ld1NvdXJjZSxcbiAgICAgIG5ld1RhcmdldCA9IGNvbnRleHQubmV3VGFyZ2V0LFxuICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIGRvY2tpbmdPclBvaW50cyA9IGNvbnRleHQuZG9ja2luZ09yUG9pbnRzO1xuXG4gIGlmICghbmV3U291cmNlICYmICFuZXdUYXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25ld1NvdXJjZSBvciBuZXdUYXJnZXQgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KGRvY2tpbmdPclBvaW50cykpIHtcbiAgICBjb250ZXh0Lm9sZFdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzO1xuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gZG9ja2luZ09yUG9pbnRzO1xuICB9XG5cbiAgaWYgKG5ld1NvdXJjZSkge1xuICAgIGNvbnRleHQub2xkU291cmNlID0gY29ubmVjdGlvbi5zb3VyY2U7XG4gICAgY29ubmVjdGlvbi5zb3VyY2UgPSBuZXdTb3VyY2U7XG4gIH1cblxuICBpZiAobmV3VGFyZ2V0KSB7XG4gICAgY29udGV4dC5vbGRUYXJnZXQgPSBjb25uZWN0aW9uLnRhcmdldDtcbiAgICBjb25uZWN0aW9uLnRhcmdldCA9IG5ld1RhcmdldDtcbiAgfVxuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufTtcblxuUmVjb25uZWN0Q29ubmVjdGlvbkhhbmRsZXIucHJvdG90eXBlLnBvc3RFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIG5ld1NvdXJjZSA9IGNvbnRleHQubmV3U291cmNlLFxuICAgICAgbmV3VGFyZ2V0ID0gY29udGV4dC5uZXdUYXJnZXQsXG4gICAgICBkb2NraW5nT3JQb2ludHMgPSBjb250ZXh0LmRvY2tpbmdPclBvaW50cyxcbiAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICB2YXIgbGF5b3V0Q29ubmVjdGlvbkhpbnRzID0ge307XG5cbiAgaWYgKGhpbnRzLmNvbm5lY3Rpb25TdGFydCkge1xuICAgIGxheW91dENvbm5lY3Rpb25IaW50cy5jb25uZWN0aW9uU3RhcnQgPSBoaW50cy5jb25uZWN0aW9uU3RhcnQ7XG4gIH1cblxuICBpZiAoaGludHMuY29ubmVjdGlvbkVuZCkge1xuICAgIGxheW91dENvbm5lY3Rpb25IaW50cy5jb25uZWN0aW9uRW5kID0gaGludHMuY29ubmVjdGlvbkVuZDtcbiAgfVxuXG4gIGlmIChoaW50cy5sYXlvdXRDb25uZWN0aW9uID09PSBmYWxzZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChuZXdTb3VyY2UgJiYgKCFuZXdUYXJnZXQgfHwgaGludHMuZG9ja2luZyA9PT0gJ3NvdXJjZScpKSB7XG4gICAgbGF5b3V0Q29ubmVjdGlvbkhpbnRzLmNvbm5lY3Rpb25TdGFydCA9IGxheW91dENvbm5lY3Rpb25IaW50cy5jb25uZWN0aW9uU3RhcnRcbiAgICAgIHx8IGdldERvY2tpbmcoaXNBcnJheShkb2NraW5nT3JQb2ludHMpID8gZG9ja2luZ09yUG9pbnRzWyAwIF0gOiBkb2NraW5nT3JQb2ludHMpO1xuICB9XG5cbiAgaWYgKG5ld1RhcmdldCAmJiAoIW5ld1NvdXJjZSB8fCBoaW50cy5kb2NraW5nID09PSAndGFyZ2V0JykpIHtcbiAgICBsYXlvdXRDb25uZWN0aW9uSGludHMuY29ubmVjdGlvbkVuZCA9IGxheW91dENvbm5lY3Rpb25IaW50cy5jb25uZWN0aW9uRW5kXG4gICAgICB8fCBnZXREb2NraW5nKGlzQXJyYXkoZG9ja2luZ09yUG9pbnRzKSA/IGRvY2tpbmdPclBvaW50c1sgZG9ja2luZ09yUG9pbnRzLmxlbmd0aCAtIDEgXSA6IGRvY2tpbmdPclBvaW50cyk7XG4gIH1cblxuICBpZiAoaGludHMubmV3V2F5cG9pbnRzKSB7XG4gICAgbGF5b3V0Q29ubmVjdGlvbkhpbnRzLndheXBvaW50cyA9IGhpbnRzLm5ld1dheXBvaW50cztcbiAgfVxuXG4gIHRoaXMuX21vZGVsaW5nLmxheW91dENvbm5lY3Rpb24oY29ubmVjdGlvbiwgbGF5b3V0Q29ubmVjdGlvbkhpbnRzKTtcbn07XG5cblJlY29ubmVjdENvbm5lY3Rpb25IYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBvbGRTb3VyY2UgPSBjb250ZXh0Lm9sZFNvdXJjZSxcbiAgICAgIG9sZFRhcmdldCA9IGNvbnRleHQub2xkVGFyZ2V0LFxuICAgICAgb2xkV2F5cG9pbnRzID0gY29udGV4dC5vbGRXYXlwb2ludHMsXG4gICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uO1xuXG4gIGlmIChvbGRTb3VyY2UpIHtcbiAgICBjb25uZWN0aW9uLnNvdXJjZSA9IG9sZFNvdXJjZTtcbiAgfVxuXG4gIGlmIChvbGRUYXJnZXQpIHtcbiAgICBjb25uZWN0aW9uLnRhcmdldCA9IG9sZFRhcmdldDtcbiAgfVxuXG4gIGlmIChvbGRXYXlwb2ludHMpIHtcbiAgICBjb25uZWN0aW9uLndheXBvaW50cyA9IG9sZFdheXBvaW50cztcbiAgfVxuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufTtcblxuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXREb2NraW5nKHBvaW50KSB7XG4gIHJldHVybiBwb2ludC5vcmlnaW5hbCB8fCBwb2ludDtcbn0iLCJpbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBnZXRSZXNpemVkU291cmNlQW5jaG9yLFxuICBnZXRSZXNpemVkVGFyZ2V0QW5jaG9yXG59IGZyb20gJy4vaGVscGVyL0FuY2hvcnNIZWxwZXInO1xuXG4vKipcbiAqIFJlcGxhY2Ugc2hhcGUgYnkgYWRkaW5nIG5ldyBzaGFwZSBhbmQgcmVtb3Zpbmcgb2xkIHNoYXBlLiBJbmNvbWluZyBhbmQgb3V0Z29pbmcgY29ubmVjdGlvbnMgd2lsbFxuICogYmUga2VwdCBpZiBwb3NzaWJsZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBjb25zdHJ1Y3RvclxuICpcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKiBAcGFyYW0ge1J1bGVzfSBydWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXBsYWNlU2hhcGVIYW5kbGVyKG1vZGVsaW5nLCBydWxlcykge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xufVxuXG5SZXBsYWNlU2hhcGVIYW5kbGVyLiRpbmplY3QgPSBbICdtb2RlbGluZycsICdydWxlcycgXTtcblxuXG4vKipcbiAqIEFkZCBuZXcgc2hhcGUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBjb250ZXh0Lm9sZFNoYXBlXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5uZXdEYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGV4dC5uZXdEYXRhLnR5cGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb250ZXh0Lm5ld0RhdGEueFxuICogQHBhcmFtIHtudW1iZXJ9IGNvbnRleHQubmV3RGF0YS55XG4gKiBAcGFyYW0ge09iamVjdH0gW2hpbnRzXVxuICovXG5SZXBsYWNlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5wcmVFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nLFxuICAgICAgcnVsZXMgPSB0aGlzLl9ydWxlcztcblxuICB2YXIgb2xkU2hhcGUgPSBjb250ZXh0Lm9sZFNoYXBlLFxuICAgICAgbmV3RGF0YSA9IGNvbnRleHQubmV3RGF0YSxcbiAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgIG5ld1NoYXBlO1xuXG4gIGZ1bmN0aW9uIGNhblJlY29ubmVjdChzb3VyY2UsIHRhcmdldCwgY29ubmVjdGlvbikge1xuICAgIHJldHVybiBydWxlcy5hbGxvd2VkKCdjb25uZWN0aW9uLnJlY29ubmVjdCcsIHtcbiAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sXG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG4gIH1cblxuICAvLyAoMSkgYWRkIG5ldyBzaGFwZSBhdCBnaXZlbiBwb3NpdGlvblxuICB2YXIgcG9zaXRpb24gPSB7XG4gICAgeDogbmV3RGF0YS54LFxuICAgIHk6IG5ld0RhdGEueVxuICB9O1xuXG4gIHZhciBvbGRCb3VuZHMgPSB7XG4gICAgeDogb2xkU2hhcGUueCxcbiAgICB5OiBvbGRTaGFwZS55LFxuICAgIHdpZHRoOiBvbGRTaGFwZS53aWR0aCxcbiAgICBoZWlnaHQ6IG9sZFNoYXBlLmhlaWdodFxuICB9O1xuXG4gIG5ld1NoYXBlID0gY29udGV4dC5uZXdTaGFwZSA9XG4gICAgY29udGV4dC5uZXdTaGFwZSB8fFxuICAgIHNlbGYuY3JlYXRlU2hhcGUobmV3RGF0YSwgcG9zaXRpb24sIG9sZFNoYXBlLnBhcmVudCwgaGludHMpO1xuXG4gIC8vICgyKSB1cGRhdGUgaG9zdFxuICBpZiAob2xkU2hhcGUuaG9zdCkge1xuICAgIG1vZGVsaW5nLnVwZGF0ZUF0dGFjaG1lbnQobmV3U2hhcGUsIG9sZFNoYXBlLmhvc3QpO1xuICB9XG5cbiAgLy8gKDMpIGFkb3B0IGFsbCBjaGlsZHJlbiBmcm9tIG9sZCBzaGFwZVxuICB2YXIgY2hpbGRyZW47XG5cbiAgaWYgKGhpbnRzLm1vdmVDaGlsZHJlbiAhPT0gZmFsc2UpIHtcbiAgICBjaGlsZHJlbiA9IG9sZFNoYXBlLmNoaWxkcmVuLnNsaWNlKCk7XG5cbiAgICBtb2RlbGluZy5tb3ZlRWxlbWVudHMoY2hpbGRyZW4sIHsgeDogMCwgeTogMCB9LCBuZXdTaGFwZSwgaGludHMpO1xuICB9XG5cbiAgLy8gKDQpIHJlY29ubmVjdCBjb25uZWN0aW9ucyB0byBuZXcgc2hhcGUgaWYgcG9zc2libGVcbiAgdmFyIGluY29taW5nID0gb2xkU2hhcGUuaW5jb21pbmcuc2xpY2UoKSxcbiAgICAgIG91dGdvaW5nID0gb2xkU2hhcGUub3V0Z29pbmcuc2xpY2UoKTtcblxuICBmb3JFYWNoKGluY29taW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgdmFyIHNvdXJjZSA9IGNvbm5lY3Rpb24uc291cmNlLFxuICAgICAgICBhbGxvd2VkID0gY2FuUmVjb25uZWN0KHNvdXJjZSwgbmV3U2hhcGUsIGNvbm5lY3Rpb24pO1xuXG4gICAgaWYgKGFsbG93ZWQpIHtcbiAgICAgIHNlbGYucmVjb25uZWN0RW5kKFxuICAgICAgICBjb25uZWN0aW9uLCBuZXdTaGFwZSxcbiAgICAgICAgZ2V0UmVzaXplZFRhcmdldEFuY2hvcihjb25uZWN0aW9uLCBuZXdTaGFwZSwgb2xkQm91bmRzKSxcbiAgICAgICAgaGludHNcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBmb3JFYWNoKG91dGdvaW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgdmFyIHRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICBhbGxvd2VkID0gY2FuUmVjb25uZWN0KG5ld1NoYXBlLCB0YXJnZXQsIGNvbm5lY3Rpb24pO1xuXG4gICAgaWYgKGFsbG93ZWQpIHtcbiAgICAgIHNlbGYucmVjb25uZWN0U3RhcnQoXG4gICAgICAgIGNvbm5lY3Rpb24sIG5ld1NoYXBlLFxuICAgICAgICBnZXRSZXNpemVkU291cmNlQW5jaG9yKGNvbm5lY3Rpb24sIG5ld1NoYXBlLCBvbGRCb3VuZHMpLFxuICAgICAgICBoaW50c1xuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufTtcblxuXG4vKipcbiAqIFJlbW92ZSBvbGQgc2hhcGUuXG4gKi9cblJlcGxhY2VTaGFwZUhhbmRsZXIucHJvdG90eXBlLnBvc3RFeGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgb2xkU2hhcGUgPSBjb250ZXh0Lm9sZFNoYXBlO1xuXG4gIHRoaXMuX21vZGVsaW5nLnJlbW92ZVNoYXBlKG9sZFNoYXBlKTtcbn07XG5cblxuUmVwbGFjZVNoYXBlSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHt9O1xuXG5cblJlcGxhY2VTaGFwZUhhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHt9O1xuXG5cblJlcGxhY2VTaGFwZUhhbmRsZXIucHJvdG90eXBlLmNyZWF0ZVNoYXBlID0gZnVuY3Rpb24oc2hhcGUsIHBvc2l0aW9uLCB0YXJnZXQsIGhpbnRzKSB7XG4gIHJldHVybiB0aGlzLl9tb2RlbGluZy5jcmVhdGVTaGFwZShzaGFwZSwgcG9zaXRpb24sIHRhcmdldCwgaGludHMpO1xufTtcblxuXG5SZXBsYWNlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5yZWNvbm5lY3RTdGFydCA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIG5ld1NvdXJjZSwgZG9ja2luZ1BvaW50LCBoaW50cykge1xuICB0aGlzLl9tb2RlbGluZy5yZWNvbm5lY3RTdGFydChjb25uZWN0aW9uLCBuZXdTb3VyY2UsIGRvY2tpbmdQb2ludCwgaGludHMpO1xufTtcblxuXG5SZXBsYWNlU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5yZWNvbm5lY3RFbmQgPSBmdW5jdGlvbihjb25uZWN0aW9uLCBuZXdUYXJnZXQsIGRvY2tpbmdQb2ludCwgaGludHMpIHtcbiAgdGhpcy5fbW9kZWxpbmcucmVjb25uZWN0RW5kKGNvbm5lY3Rpb24sIG5ld1RhcmdldCwgZG9ja2luZ1BvaW50LCBoaW50cyk7XG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0UmVzaXplZFNvdXJjZUFuY2hvcixcbiAgZ2V0UmVzaXplZFRhcmdldEFuY2hvclxufSBmcm9tICcuL2hlbHBlci9BbmNob3JzSGVscGVyJztcblxuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IGltcGxlbWVudHMgcmV2ZXJzaWJsZSByZXNpemluZyBvZiBzaGFwZXMuXG4gKlxuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzaXplU2hhcGVIYW5kbGVyKG1vZGVsaW5nKSB7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG59XG5cblJlc2l6ZVNoYXBlSGFuZGxlci4kaW5qZWN0ID0gWyAnbW9kZWxpbmcnIF07XG5cbi8qKlxuICoge1xuICogICBzaGFwZTogey4uLi59XG4gKiAgIG5ld0JvdW5kczoge1xuICogICAgIHdpZHRoOiAgMjAsXG4gKiAgICAgaGVpZ2h0OiA0MCxcbiAqICAgICB4OiAgICAgICA1LFxuICogICAgIHk6ICAgICAgMTBcbiAqICAgfVxuICpcbiAqIH1cbiAqL1xuUmVzaXplU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgbmV3Qm91bmRzID0gY29udGV4dC5uZXdCb3VuZHMsXG4gICAgICBtaW5Cb3VuZHMgPSBjb250ZXh0Lm1pbkJvdW5kcztcblxuICBpZiAobmV3Qm91bmRzLnggPT09IHVuZGVmaW5lZCB8fCBuZXdCb3VuZHMueSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBuZXdCb3VuZHMud2lkdGggPT09IHVuZGVmaW5lZCB8fCBuZXdCb3VuZHMuaGVpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25ld0JvdW5kcyBtdXN0IGhhdmUge3gsIHksIHdpZHRoLCBoZWlnaHR9IHByb3BlcnRpZXMnKTtcbiAgfVxuXG4gIGlmIChtaW5Cb3VuZHMgJiYgKG5ld0JvdW5kcy53aWR0aCA8IG1pbkJvdW5kcy53aWR0aFxuICAgIHx8IG5ld0JvdW5kcy5oZWlnaHQgPCBtaW5Cb3VuZHMuaGVpZ2h0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignd2lkdGggYW5kIGhlaWdodCBjYW5ub3QgYmUgbGVzcyB0aGFuIG1pbmltdW0gaGVpZ2h0IGFuZCB3aWR0aCcpO1xuICB9IGVsc2UgaWYgKCFtaW5Cb3VuZHNcbiAgICAmJiBuZXdCb3VuZHMud2lkdGggPCAxMCB8fCBuZXdCb3VuZHMuaGVpZ2h0IDwgMTApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3dpZHRoIGFuZCBoZWlnaHQgY2Fubm90IGJlIGxlc3MgdGhhbiAxMHB4Jyk7XG4gIH1cblxuICAvLyBzYXZlIG9sZCBiYm94IGluIGNvbnRleHRcbiAgY29udGV4dC5vbGRCb3VuZHMgPSB7XG4gICAgd2lkdGg6ICBzaGFwZS53aWR0aCxcbiAgICBoZWlnaHQ6IHNoYXBlLmhlaWdodCxcbiAgICB4OiAgICAgIHNoYXBlLngsXG4gICAgeTogICAgICBzaGFwZS55XG4gIH07XG5cbiAgLy8gdXBkYXRlIHNoYXBlXG4gIGFzc2lnbihzaGFwZSwge1xuICAgIHdpZHRoOiAgbmV3Qm91bmRzLndpZHRoLFxuICAgIGhlaWdodDogbmV3Qm91bmRzLmhlaWdodCxcbiAgICB4OiAgICAgIG5ld0JvdW5kcy54LFxuICAgIHk6ICAgICAgbmV3Qm91bmRzLnlcbiAgfSk7XG5cbiAgcmV0dXJuIHNoYXBlO1xufTtcblxuUmVzaXplU2hhcGVIYW5kbGVyLnByb3RvdHlwZS5wb3N0RXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIG9sZEJvdW5kcyA9IGNvbnRleHQub2xkQm91bmRzLFxuICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9O1xuXG4gIGlmIChoaW50cy5sYXlvdXQgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yRWFjaChzaGFwZS5pbmNvbWluZywgZnVuY3Rpb24oYykge1xuICAgIG1vZGVsaW5nLmxheW91dENvbm5lY3Rpb24oYywge1xuICAgICAgY29ubmVjdGlvbkVuZDogZ2V0UmVzaXplZFRhcmdldEFuY2hvcihjLCBzaGFwZSwgb2xkQm91bmRzKVxuICAgIH0pO1xuICB9KTtcblxuICBmb3JFYWNoKHNoYXBlLm91dGdvaW5nLCBmdW5jdGlvbihjKSB7XG4gICAgbW9kZWxpbmcubGF5b3V0Q29ubmVjdGlvbihjLCB7XG4gICAgICBjb25uZWN0aW9uU3RhcnQ6IGdldFJlc2l6ZWRTb3VyY2VBbmNob3IoYywgc2hhcGUsIG9sZEJvdW5kcylcbiAgICB9KTtcbiAgfSk7XG5cbn07XG5cblJlc2l6ZVNoYXBlSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBvbGRCb3VuZHMgPSBjb250ZXh0Lm9sZEJvdW5kcztcblxuICAvLyByZXN0b3JlIHByZXZpb3VzIGJib3hcbiAgYXNzaWduKHNoYXBlLCB7XG4gICAgd2lkdGg6ICBvbGRCb3VuZHMud2lkdGgsXG4gICAgaGVpZ2h0OiBvbGRCb3VuZHMuaGVpZ2h0LFxuICAgIHg6ICAgICAgb2xkQm91bmRzLngsXG4gICAgeTogICAgICBvbGRCb3VuZHMueVxuICB9KTtcblxuICByZXR1cm4gc2hhcGU7XG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBtYXBcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBnZXRXYXlwb2ludHNVcGRhdGluZ0Nvbm5lY3Rpb25zLFxuICByZXNpemVCb3VuZHNcbn0gZnJvbSAnLi4vLi4vc3BhY2UtdG9vbC9TcGFjZVV0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRNb3ZlZFNvdXJjZUFuY2hvcixcbiAgZ2V0TW92ZWRUYXJnZXRBbmNob3IsXG4gIGdldFJlc2l6ZWRTb3VyY2VBbmNob3IsXG4gIGdldFJlc2l6ZWRUYXJnZXRBbmNob3Jcbn0gZnJvbSAnLi9oZWxwZXIvQW5jaG9yc0hlbHBlcic7XG5cblxuLyoqXG4gKiBBZGQgb3IgcmVtb3ZlIHNwYWNlIGJ5IG1vdmluZyBhbmQgcmVzaXppbmcgc2hhcGVzIGFuZCB1cGRhdGluZyBjb25uZWN0aW9uIHdheXBvaW50cy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3BhY2VUb29sSGFuZGxlcihtb2RlbGluZykge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5TcGFjZVRvb2xIYW5kbGVyLiRpbmplY3QgPSBbICdtb2RlbGluZycgXTtcblxuU3BhY2VUb29sSGFuZGxlci5wcm90b3R5cGUucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIGRlbHRhID0gY29udGV4dC5kZWx0YSxcbiAgICAgIGRpcmVjdGlvbiA9IGNvbnRleHQuZGlyZWN0aW9uLFxuICAgICAgbW92aW5nU2hhcGVzID0gY29udGV4dC5tb3ZpbmdTaGFwZXMsXG4gICAgICByZXNpemluZ1NoYXBlcyA9IGNvbnRleHQucmVzaXppbmdTaGFwZXMsXG4gICAgICBzdGFydCA9IGNvbnRleHQuc3RhcnQsXG4gICAgICBvbGRCb3VuZHMgPSB7fTtcblxuICAvLyAoMSkgbW92ZSBzaGFwZXNcbiAgdGhpcy5tb3ZlU2hhcGVzKG1vdmluZ1NoYXBlcywgZGVsdGEpO1xuXG4gIC8vICgyYSkgc2F2ZSBvbGQgYm91bmRzIG9mIHJlc2l6ZWQgc2hhcGVzXG4gIGZvckVhY2gocmVzaXppbmdTaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgb2xkQm91bmRzW3NoYXBlLmlkXSA9IGdldEJvdW5kcyhzaGFwZSk7XG4gIH0pO1xuXG4gIC8vICgyYikgcmVzaXplIHNoYXBlc1xuICB0aGlzLnJlc2l6ZVNoYXBlcyhyZXNpemluZ1NoYXBlcywgZGVsdGEsIGRpcmVjdGlvbik7XG5cbiAgLy8gKDMpIHVwZGF0ZSBjb25uZWN0aW9uIHdheXBvaW50c1xuICB0aGlzLnVwZGF0ZUNvbm5lY3Rpb25XYXlwb2ludHMoXG4gICAgZ2V0V2F5cG9pbnRzVXBkYXRpbmdDb25uZWN0aW9ucyhtb3ZpbmdTaGFwZXMsIHJlc2l6aW5nU2hhcGVzKSxcbiAgICBkZWx0YSxcbiAgICBkaXJlY3Rpb24sXG4gICAgc3RhcnQsXG4gICAgbW92aW5nU2hhcGVzLFxuICAgIHJlc2l6aW5nU2hhcGVzLFxuICAgIG9sZEJvdW5kc1xuICApO1xufTtcblxuU3BhY2VUb29sSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKCkge307XG5TcGFjZVRvb2xIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbigpIHt9O1xuXG5TcGFjZVRvb2xIYW5kbGVyLnByb3RvdHlwZS5tb3ZlU2hhcGVzID0gZnVuY3Rpb24oc2hhcGVzLCBkZWx0YSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZm9yRWFjaChzaGFwZXMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICBzZWxmLl9tb2RlbGluZy5tb3ZlU2hhcGUoZWxlbWVudCwgZGVsdGEsIG51bGwsIHtcbiAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgbGF5b3V0OiBmYWxzZSxcbiAgICAgIHJlY3Vyc2U6IGZhbHNlXG4gICAgfSk7XG4gIH0pO1xufTtcblxuU3BhY2VUb29sSGFuZGxlci5wcm90b3R5cGUucmVzaXplU2hhcGVzID0gZnVuY3Rpb24oc2hhcGVzLCBkZWx0YSwgZGlyZWN0aW9uKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBmb3JFYWNoKHNoYXBlcywgZnVuY3Rpb24oc2hhcGUpIHtcbiAgICB2YXIgbmV3Qm91bmRzID0gcmVzaXplQm91bmRzKHNoYXBlLCBkaXJlY3Rpb24sIGRlbHRhKTtcblxuICAgIHNlbGYuX21vZGVsaW5nLnJlc2l6ZVNoYXBlKHNoYXBlLCBuZXdCb3VuZHMsIG51bGwsIHtcbiAgICAgIGF0dGFjaFN1cHBvcnQ6IGZhbHNlLFxuICAgICAgYXV0b1Jlc2l6ZTogZmFsc2UsXG4gICAgICBsYXlvdXQ6IGZhbHNlXG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgY29ubmVjdGlvbnMgd2F5cG9pbnRzIGFjY29yZGluZyB0byB0aGUgcnVsZXM6XG4gKiAgIDEuIEJvdGggc291cmNlIGFuZCB0YXJnZXQgYXJlIG1vdmVkL3Jlc2l6ZWQgPT4gbW92ZSB3YXlwb2ludHMgYnkgdGhlIGRlbHRhXG4gKiAgIDIuIE9ubHkgb25lIG9mIHNvdXJjZSBhbmQgdGFyZ2V0IGlzIG1vdmVkL3Jlc2l6ZWQgPT4gcmUtbGF5b3V0IGNvbm5lY3Rpb24gd2l0aCBtb3ZlZCBzdGFydC9lbmRcbiAqL1xuU3BhY2VUb29sSGFuZGxlci5wcm90b3R5cGUudXBkYXRlQ29ubmVjdGlvbldheXBvaW50cyA9IGZ1bmN0aW9uKFxuICAgIGNvbm5lY3Rpb25zLFxuICAgIGRlbHRhLFxuICAgIGRpcmVjdGlvbixcbiAgICBzdGFydCxcbiAgICBtb3ZpbmdTaGFwZXMsXG4gICAgcmVzaXppbmdTaGFwZXMsXG4gICAgb2xkQm91bmRzXG4pIHtcbiAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgYWZmZWN0ZWRTaGFwZXMgPSBtb3ZpbmdTaGFwZXMuY29uY2F0KHJlc2l6aW5nU2hhcGVzKTtcblxuICBmb3JFYWNoKGNvbm5lY3Rpb25zLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgdmFyIHNvdXJjZSA9IGNvbm5lY3Rpb24uc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb25uZWN0aW9uLnRhcmdldCxcbiAgICAgICAgd2F5cG9pbnRzID0gY29weVdheXBvaW50cyhjb25uZWN0aW9uKSxcbiAgICAgICAgYXhpcyA9IGdldEF4aXNGcm9tRGlyZWN0aW9uKGRpcmVjdGlvbiksXG4gICAgICAgIGxheW91dEhpbnRzID0ge1xuICAgICAgICAgIGxhYmVsQmVoYXZpb3I6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICBpZiAoaW5jbHVkZXMoYWZmZWN0ZWRTaGFwZXMsIHNvdXJjZSkgJiYgaW5jbHVkZXMoYWZmZWN0ZWRTaGFwZXMsIHRhcmdldCkpIHtcblxuICAgICAgLy8gbW92ZSB3YXlwb2ludHNcbiAgICAgIHdheXBvaW50cyA9IG1hcCh3YXlwb2ludHMsIGZ1bmN0aW9uKHdheXBvaW50KSB7XG4gICAgICAgIGlmIChzaG91bGRNb3ZlV2F5cG9pbnQod2F5cG9pbnQsIHN0YXJ0LCBkaXJlY3Rpb24pKSB7XG5cbiAgICAgICAgICAvLyBtb3ZlIHdheXBvaW50XG4gICAgICAgICAgd2F5cG9pbnRbIGF4aXMgXSA9IHdheXBvaW50WyBheGlzIF0gKyBkZWx0YVsgYXhpcyBdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdheXBvaW50Lm9yaWdpbmFsICYmIHNob3VsZE1vdmVXYXlwb2ludCh3YXlwb2ludC5vcmlnaW5hbCwgc3RhcnQsIGRpcmVjdGlvbikpIHtcblxuICAgICAgICAgIC8vIG1vdmUgd2F5cG9pbnQgb3JpZ2luYWxcbiAgICAgICAgICB3YXlwb2ludC5vcmlnaW5hbFsgYXhpcyBdID0gd2F5cG9pbnQub3JpZ2luYWxbIGF4aXMgXSArIGRlbHRhWyBheGlzIF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2F5cG9pbnQ7XG4gICAgICB9KTtcblxuICAgICAgc2VsZi5fbW9kZWxpbmcudXBkYXRlV2F5cG9pbnRzKGNvbm5lY3Rpb24sIHdheXBvaW50cywge1xuICAgICAgICBsYWJlbEJlaGF2aW9yOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChpbmNsdWRlcyhhZmZlY3RlZFNoYXBlcywgc291cmNlKSB8fCBpbmNsdWRlcyhhZmZlY3RlZFNoYXBlcywgdGFyZ2V0KSkge1xuXG4gICAgICAvLyByZS1sYXlvdXQgY29ubmVjdGlvbiB3aXRoIG1vdmVkIHN0YXJ0L2VuZFxuICAgICAgaWYgKGluY2x1ZGVzKG1vdmluZ1NoYXBlcywgc291cmNlKSkge1xuICAgICAgICBsYXlvdXRIaW50cy5jb25uZWN0aW9uU3RhcnQgPSBnZXRNb3ZlZFNvdXJjZUFuY2hvcihjb25uZWN0aW9uLCBzb3VyY2UsIGRlbHRhKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZXMobW92aW5nU2hhcGVzLCB0YXJnZXQpKSB7XG4gICAgICAgIGxheW91dEhpbnRzLmNvbm5lY3Rpb25FbmQgPSBnZXRNb3ZlZFRhcmdldEFuY2hvcihjb25uZWN0aW9uLCB0YXJnZXQsIGRlbHRhKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZXMocmVzaXppbmdTaGFwZXMsIHNvdXJjZSkpIHtcbiAgICAgICAgbGF5b3V0SGludHMuY29ubmVjdGlvblN0YXJ0ID0gZ2V0UmVzaXplZFNvdXJjZUFuY2hvcihcbiAgICAgICAgICBjb25uZWN0aW9uLCBzb3VyY2UsIG9sZEJvdW5kc1tzb3VyY2UuaWRdXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGluY2x1ZGVzKHJlc2l6aW5nU2hhcGVzLCB0YXJnZXQpKSB7XG4gICAgICAgIGxheW91dEhpbnRzLmNvbm5lY3Rpb25FbmQgPSBnZXRSZXNpemVkVGFyZ2V0QW5jaG9yKFxuICAgICAgICAgIGNvbm5lY3Rpb24sIHRhcmdldCwgb2xkQm91bmRzW3RhcmdldC5pZF1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgc2VsZi5fbW9kZWxpbmcubGF5b3V0Q29ubmVjdGlvbihjb25uZWN0aW9uLCBsYXlvdXRIaW50cyk7XG4gICAgfVxuICB9KTtcbn07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGNvcHlXYXlwb2ludCh3YXlwb2ludCkge1xuICByZXR1cm4gYXNzaWduKHt9LCB3YXlwb2ludCk7XG59XG5cbmZ1bmN0aW9uIGNvcHlXYXlwb2ludHMoY29ubmVjdGlvbikge1xuICByZXR1cm4gbWFwKGNvbm5lY3Rpb24ud2F5cG9pbnRzLCBmdW5jdGlvbih3YXlwb2ludCkge1xuXG4gICAgd2F5cG9pbnQgPSBjb3B5V2F5cG9pbnQod2F5cG9pbnQpO1xuXG4gICAgaWYgKHdheXBvaW50Lm9yaWdpbmFsKSB7XG4gICAgICB3YXlwb2ludC5vcmlnaW5hbCA9IGNvcHlXYXlwb2ludCh3YXlwb2ludC5vcmlnaW5hbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdheXBvaW50O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0QXhpc0Zyb21EaXJlY3Rpb24oZGlyZWN0aW9uKSB7XG4gIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gIGNhc2UgJ24nOlxuICAgIHJldHVybiAneSc7XG4gIGNhc2UgJ3cnOlxuICAgIHJldHVybiAneCc7XG4gIGNhc2UgJ3MnOlxuICAgIHJldHVybiAneSc7XG4gIGNhc2UgJ2UnOlxuICAgIHJldHVybiAneCc7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkTW92ZVdheXBvaW50KHdheXBvaW50LCBzdGFydCwgZGlyZWN0aW9uKSB7XG4gIHZhciByZWxldmFudEF4aXMgPSBnZXRBeGlzRnJvbURpcmVjdGlvbihkaXJlY3Rpb24pO1xuXG4gIGlmICgvZXxzLy50ZXN0KGRpcmVjdGlvbikpIHtcbiAgICByZXR1cm4gd2F5cG9pbnRbIHJlbGV2YW50QXhpcyBdID4gc3RhcnQ7XG4gIH0gZWxzZSBpZiAoL258dy8udGVzdChkaXJlY3Rpb24pKSB7XG4gICAgcmV0dXJuIHdheXBvaW50WyByZWxldmFudEF4aXMgXSA8IHN0YXJ0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCBpdGVtKSB7XG4gIHJldHVybiBhcnJheS5pbmRleE9mKGl0ZW0pICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRzKHNoYXBlKSB7XG4gIHJldHVybiB7XG4gICAgeDogc2hhcGUueCxcbiAgICB5OiBzaGFwZS55LFxuICAgIGhlaWdodDogc2hhcGUuaGVpZ2h0LFxuICAgIHdpZHRoOiBzaGFwZS53aWR0aFxuICB9O1xufVxuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCB0b2dnbGVzIHRoZSBjb2xsYXBzZWQgc3RhdGUgb2YgYW4gZWxlbWVudFxuICogYW5kIHRoZSB2aXNpYmlsaXR5IG9mIGFsbCBpdHMgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVG9nZ2xlU2hhcGVDb2xsYXBzZUhhbmRsZXIobW9kZWxpbmcpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbn1cblxuVG9nZ2xlU2hhcGVDb2xsYXBzZUhhbmRsZXIuJGluamVjdCA9IFsgJ21vZGVsaW5nJyBdO1xuXG5cblRvZ2dsZVNoYXBlQ29sbGFwc2VIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBjaGlsZHJlbiA9IHNoYXBlLmNoaWxkcmVuO1xuXG4gIC8vIHJlY3Vyc2l2ZWx5IHJlbWVtYmVyIHByZXZpb3VzIHZpc2liaWxpdHkgb2YgY2hpbGRyZW5cbiAgY29udGV4dC5vbGRDaGlsZHJlblZpc2liaWxpdHkgPSBnZXRFbGVtZW50c1Zpc2liaWxpdHlSZWN1cnNpdmUoY2hpbGRyZW4pO1xuXG4gIC8vIHRvZ2dsZSBzdGF0ZVxuICBzaGFwZS5jb2xsYXBzZWQgPSAhc2hhcGUuY29sbGFwc2VkO1xuXG4gIC8vIHJlY3Vyc2l2ZWx5IGhpZGUvc2hvdyBjaGlsZHJlblxuICB2YXIgcmVzdWx0ID0gc2V0SGlkZGVuUmVjdXJzaXZlKGNoaWxkcmVuLCBzaGFwZS5jb2xsYXBzZWQpO1xuXG4gIHJldHVybiBbc2hhcGVdLmNvbmNhdChyZXN1bHQpO1xufTtcblxuXG5Ub2dnbGVTaGFwZUNvbGxhcHNlSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBvbGRDaGlsZHJlblZpc2liaWxpdHkgPSBjb250ZXh0Lm9sZENoaWxkcmVuVmlzaWJpbGl0eTtcblxuICB2YXIgY2hpbGRyZW4gPSBzaGFwZS5jaGlsZHJlbjtcblxuICAvLyByZWN1cnNpdmVseSBzZXQgb2xkIHZpc2FiaWxpdHkgb2YgY2hpbGRyZW5cbiAgdmFyIHJlc3VsdCA9IHJlc3RvcmVWaXNpYmlsaXR5UmVjdXJzaXZlKGNoaWxkcmVuLCBvbGRDaGlsZHJlblZpc2liaWxpdHkpO1xuXG4gIC8vIHJldG9nZ2xlIHN0YXRlXG4gIHNoYXBlLmNvbGxhcHNlZCA9ICFzaGFwZS5jb2xsYXBzZWQ7XG5cbiAgcmV0dXJuIFtzaGFwZV0uY29uY2F0KHJlc3VsdCk7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIFJldHVybiBhIG1hcCB7IGVsZW1lbnRJZCAtPiBoaWRkZW5TdGF0ZX0uXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fSBlbGVtZW50c1xuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0RWxlbWVudHNWaXNpYmlsaXR5UmVjdXJzaXZlKGVsZW1lbnRzKSB7XG5cbiAgdmFyIHJlc3VsdCA9IHt9O1xuXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICByZXN1bHRbZWxlbWVudC5pZF0gPSBlbGVtZW50LmhpZGRlbjtcblxuICAgIGlmIChlbGVtZW50LmNoaWxkcmVuKSB7XG4gICAgICByZXN1bHQgPSBhc3NpZ24oe30sIHJlc3VsdCwgZ2V0RWxlbWVudHNWaXNpYmlsaXR5UmVjdXJzaXZlKGVsZW1lbnQuY2hpbGRyZW4pKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cblxuZnVuY3Rpb24gc2V0SGlkZGVuUmVjdXJzaXZlKGVsZW1lbnRzLCBuZXdIaWRkZW4pIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgZWxlbWVudC5oaWRkZW4gPSBuZXdIaWRkZW47XG5cbiAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGVsZW1lbnQpO1xuXG4gICAgaWYgKGVsZW1lbnQuY2hpbGRyZW4pIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoc2V0SGlkZGVuUmVjdXJzaXZlKGVsZW1lbnQuY2hpbGRyZW4sIGVsZW1lbnQuY29sbGFwc2VkIHx8IG5ld0hpZGRlbikpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gcmVzdG9yZVZpc2liaWxpdHlSZWN1cnNpdmUoZWxlbWVudHMsIGxhc3RTdGF0ZSkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICBlbGVtZW50LmhpZGRlbiA9IGxhc3RTdGF0ZVtlbGVtZW50LmlkXTtcblxuICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZWxlbWVudCk7XG5cbiAgICBpZiAoZWxlbWVudC5jaGlsZHJlbikge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChyZXN0b3JlVmlzaWJpbGl0eVJlY3Vyc2l2ZShlbGVtZW50LmNoaWxkcmVuLCBsYXN0U3RhdGUpKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQge1xuICBhZGQgYXMgY29sbGVjdGlvbkFkZCxcbiAgcmVtb3ZlIGFzIGNvbGxlY3Rpb25SZW1vdmVcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Db2xsZWN0aW9ucyc7XG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgaW1wbGVtZW50cyByZXZlcnNpYmxlIGF0dGFjaGluZy9kZXRhY2hpbmcgb2Ygc2hhcGVzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBVcGRhdGVBdHRhY2htZW50SGFuZGxlcihtb2RlbGluZykge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5VcGRhdGVBdHRhY2htZW50SGFuZGxlci4kaW5qZWN0ID0gWyAnbW9kZWxpbmcnIF07XG5cblxuVXBkYXRlQXR0YWNobWVudEhhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBuZXdIb3N0ID0gY29udGV4dC5uZXdIb3N0LFxuICAgICAgb2xkSG9zdCA9IHNoYXBlLmhvc3Q7XG5cbiAgLy8gKDApIGRldGFjaCBmcm9tIG9sZCBob3N0XG4gIGNvbnRleHQub2xkSG9zdCA9IG9sZEhvc3Q7XG4gIGNvbnRleHQuYXR0YWNoZXJJZHggPSByZW1vdmVBdHRhY2hlcihvbGRIb3N0LCBzaGFwZSk7XG5cbiAgLy8gKDEpIGF0dGFjaCB0byBuZXcgaG9zdFxuICBhZGRBdHRhY2hlcihuZXdIb3N0LCBzaGFwZSk7XG5cbiAgLy8gKDIpIHVwZGF0ZSBob3N0XG4gIHNoYXBlLmhvc3QgPSBuZXdIb3N0O1xuXG4gIHJldHVybiBzaGFwZTtcbn07XG5cblVwZGF0ZUF0dGFjaG1lbnRIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICBuZXdIb3N0ID0gY29udGV4dC5uZXdIb3N0LFxuICAgICAgb2xkSG9zdCA9IGNvbnRleHQub2xkSG9zdCxcbiAgICAgIGF0dGFjaGVySWR4ID0gY29udGV4dC5hdHRhY2hlcklkeDtcblxuICAvLyAoMikgdXBkYXRlIGhvc3RcbiAgc2hhcGUuaG9zdCA9IG9sZEhvc3Q7XG5cbiAgLy8gKDEpIGF0dGFjaCB0byBuZXcgaG9zdFxuICByZW1vdmVBdHRhY2hlcihuZXdIb3N0LCBzaGFwZSk7XG5cbiAgLy8gKDApIGRldGFjaCBmcm9tIG9sZCBob3N0XG4gIGFkZEF0dGFjaGVyKG9sZEhvc3QsIHNoYXBlLCBhdHRhY2hlcklkeCk7XG5cbiAgcmV0dXJuIHNoYXBlO1xufTtcblxuXG5mdW5jdGlvbiByZW1vdmVBdHRhY2hlcihob3N0LCBhdHRhY2hlcikge1xuXG4gIC8vIHJlbW92ZSBhdHRhY2hlciBmcm9tIGhvc3RcbiAgcmV0dXJuIGNvbGxlY3Rpb25SZW1vdmUoaG9zdCAmJiBob3N0LmF0dGFjaGVycywgYXR0YWNoZXIpO1xufVxuXG5mdW5jdGlvbiBhZGRBdHRhY2hlcihob3N0LCBhdHRhY2hlciwgaWR4KSB7XG5cbiAgaWYgKCFob3N0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGF0dGFjaGVycyA9IGhvc3QuYXR0YWNoZXJzO1xuXG4gIGlmICghYXR0YWNoZXJzKSB7XG4gICAgaG9zdC5hdHRhY2hlcnMgPSBhdHRhY2hlcnMgPSBbXTtcbiAgfVxuXG4gIGNvbGxlY3Rpb25BZGQoYXR0YWNoZXJzLCBhdHRhY2hlciwgaWR4KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVwZGF0ZVdheXBvaW50c0hhbmRsZXIoKSB7IH1cblxuVXBkYXRlV2F5cG9pbnRzSGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgIG5ld1dheXBvaW50cyA9IGNvbnRleHQubmV3V2F5cG9pbnRzO1xuXG4gIGNvbnRleHQub2xkV2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHM7XG5cbiAgY29ubmVjdGlvbi53YXlwb2ludHMgPSBuZXdXYXlwb2ludHM7XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59O1xuXG5VcGRhdGVXYXlwb2ludHNIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBvbGRXYXlwb2ludHMgPSBjb250ZXh0Lm9sZFdheXBvaW50cztcblxuICBjb25uZWN0aW9uLndheXBvaW50cyA9IG9sZFdheXBvaW50cztcblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07IiwiaW1wb3J0IHtcbiAgZ2V0TmV3QXR0YWNoUG9pbnRcbn0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbC9BdHRhY2hVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0T3JpZW50YXRpb25cbn0gZnJvbSAnLi4vLi4vLi4vLi4vbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQge1xuICBmaWx0ZXIsXG4gIG1hcFxufSBmcm9tICdtaW4tZGFzaCc7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc2l6ZWRTb3VyY2VBbmNob3IoY29ubmVjdGlvbiwgc2hhcGUsIG9sZEJvdW5kcykge1xuXG4gIHZhciB3YXlwb2ludHMgPSBzYWZlR2V0V2F5cG9pbnRzKGNvbm5lY3Rpb24pLFxuICAgICAgd2F5cG9pbnRzSW5zaWRlTmV3Qm91bmRzID0gZ2V0V2F5cG9pbnRzSW5zaWRlQm91bmRzKHdheXBvaW50cywgc2hhcGUpLFxuICAgICAgb2xkQW5jaG9yID0gd2F5cG9pbnRzWzBdO1xuXG4gIC8vIG5ldyBhbmNob3IgaXMgdGhlIGxhc3Qgd2F5cG9pbnQgZW5jbG9zZWQgYmUgcmVzaXplZCBzb3VyY2VcbiAgaWYgKHdheXBvaW50c0luc2lkZU5ld0JvdW5kcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gd2F5cG9pbnRzSW5zaWRlTmV3Qm91bmRzWyB3YXlwb2ludHNJbnNpZGVOZXdCb3VuZHMubGVuZ3RoIC0gMSBdO1xuICB9XG5cbiAgcmV0dXJuIGdldE5ld0F0dGFjaFBvaW50KG9sZEFuY2hvci5vcmlnaW5hbCB8fCBvbGRBbmNob3IsIG9sZEJvdW5kcywgc2hhcGUpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNpemVkVGFyZ2V0QW5jaG9yKGNvbm5lY3Rpb24sIHNoYXBlLCBvbGRCb3VuZHMpIHtcblxuICB2YXIgd2F5cG9pbnRzID0gc2FmZUdldFdheXBvaW50cyhjb25uZWN0aW9uKSxcbiAgICAgIHdheXBvaW50c0luc2lkZU5ld0JvdW5kcyA9IGdldFdheXBvaW50c0luc2lkZUJvdW5kcyh3YXlwb2ludHMsIHNoYXBlKSxcbiAgICAgIG9sZEFuY2hvciA9IHdheXBvaW50c1t3YXlwb2ludHMubGVuZ3RoIC0gMV07XG5cbiAgLy8gbmV3IGFuY2hvciBpcyB0aGUgZmlyc3Qgd2F5cG9pbnQgZW5jbG9zZWQgYmUgcmVzaXplZCB0YXJnZXRcbiAgaWYgKHdheXBvaW50c0luc2lkZU5ld0JvdW5kcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gd2F5cG9pbnRzSW5zaWRlTmV3Qm91bmRzWyAwIF07XG4gIH1cblxuICByZXR1cm4gZ2V0TmV3QXR0YWNoUG9pbnQob2xkQW5jaG9yLm9yaWdpbmFsIHx8IG9sZEFuY2hvciwgb2xkQm91bmRzLCBzaGFwZSk7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vdmVkU291cmNlQW5jaG9yKGNvbm5lY3Rpb24sIHNvdXJjZSwgbW92ZURlbHRhKSB7XG5cbiAgdmFyIHdheXBvaW50cyA9IHNhZmVHZXRXYXlwb2ludHMoY29ubmVjdGlvbiksXG4gICAgICBvbGRCb3VuZHMgPSBzdWJ0cmFjdChzb3VyY2UsIG1vdmVEZWx0YSksXG4gICAgICBvbGRBbmNob3IgPSB3YXlwb2ludHNbIDAgXTtcblxuICByZXR1cm4gZ2V0TmV3QXR0YWNoUG9pbnQob2xkQW5jaG9yLm9yaWdpbmFsIHx8IG9sZEFuY2hvciwgb2xkQm91bmRzLCBzb3VyY2UpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb3ZlZFRhcmdldEFuY2hvcihjb25uZWN0aW9uLCB0YXJnZXQsIG1vdmVEZWx0YSkge1xuXG4gIHZhciB3YXlwb2ludHMgPSBzYWZlR2V0V2F5cG9pbnRzKGNvbm5lY3Rpb24pLFxuICAgICAgb2xkQm91bmRzID0gc3VidHJhY3QodGFyZ2V0LCBtb3ZlRGVsdGEpLFxuICAgICAgb2xkQW5jaG9yID0gd2F5cG9pbnRzWyB3YXlwb2ludHMubGVuZ3RoIC0gMSBdO1xuXG4gIHJldHVybiBnZXROZXdBdHRhY2hQb2ludChvbGRBbmNob3Iub3JpZ2luYWwgfHwgb2xkQW5jaG9yLCBvbGRCb3VuZHMsIHRhcmdldCk7XG59XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIHN1YnRyYWN0KGJvdW5kcywgZGVsdGEpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBib3VuZHMueCAtIGRlbHRhLngsXG4gICAgeTogYm91bmRzLnkgLSBkZWx0YS55LFxuICAgIHdpZHRoOiBib3VuZHMud2lkdGgsXG4gICAgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0XG4gIH07XG59XG5cblxuLyoqXG4gKiBSZXR1cm4gd2F5cG9pbnRzIG9mIGdpdmVuIGNvbm5lY3Rpb247IHRocm93IGlmIG5vbiBleGlzdHMgKHNob3VsZCBub3QgaGFwcGVuISEpLlxuICpcbiAqIEBwYXJhbSB7Q29ubmVjdGlvbn0gY29ubmVjdGlvblxuICpcbiAqIEByZXR1cm4ge0FycmF5PFBvaW50Pn1cbiAqL1xuZnVuY3Rpb24gc2FmZUdldFdheXBvaW50cyhjb25uZWN0aW9uKSB7XG5cbiAgdmFyIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzO1xuXG4gIGlmICghd2F5cG9pbnRzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY29ubmVjdGlvbiMnICsgY29ubmVjdGlvbi5pZCArICc6IG5vIHdheXBvaW50cycpO1xuICB9XG5cbiAgcmV0dXJuIHdheXBvaW50cztcbn1cblxuZnVuY3Rpb24gZ2V0V2F5cG9pbnRzSW5zaWRlQm91bmRzKHdheXBvaW50cywgYm91bmRzKSB7XG4gIHZhciBvcmlnaW5hbFdheXBvaW50cyA9IG1hcCh3YXlwb2ludHMsIGdldE9yaWdpbmFsKTtcblxuICByZXR1cm4gZmlsdGVyKG9yaWdpbmFsV2F5cG9pbnRzLCBmdW5jdGlvbih3YXlwb2ludCkge1xuICAgIHJldHVybiBpc0luc2lkZUJvdW5kcyh3YXlwb2ludCwgYm91bmRzKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHBvaW50IGlzIGluc2lkZSBib3VuZHMsIGluY2wuIGVkZ2VzLlxuICpcbiAqIEBwYXJhbSB7UG9pbnR9IHBvaW50XG4gKiBAcGFyYW0ge0JvdW5kc30gYm91bmRzXG4gKi9cbmZ1bmN0aW9uIGlzSW5zaWRlQm91bmRzKHBvaW50LCBib3VuZHMpIHtcbiAgcmV0dXJuIGdldE9yaWVudGF0aW9uKGJvdW5kcywgcG9pbnQsIDEpID09PSAnaW50ZXJzZWN0Jztcbn1cblxuZnVuY3Rpb24gZ2V0T3JpZ2luYWwocG9pbnQpIHtcbiAgcmV0dXJuIHBvaW50Lm9yaWdpbmFsIHx8IHBvaW50O1xufVxuIiwiaW1wb3J0IHtcbiAgYXNzaWduXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0Q2xvc3VyZVxufSBmcm9tICcuLi8uLi8uLi8uLi91dGlsL0VsZW1lbnRzJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb3ZlQ2xvc3VyZSgpIHtcblxuICB0aGlzLmFsbFNoYXBlcyA9IHt9O1xuICB0aGlzLmFsbENvbm5lY3Rpb25zID0ge307XG5cbiAgdGhpcy5lbmNsb3NlZEVsZW1lbnRzID0ge307XG4gIHRoaXMuZW5jbG9zZWRDb25uZWN0aW9ucyA9IHt9O1xuXG4gIHRoaXMudG9wTGV2ZWwgPSB7fTtcbn1cblxuXG5Nb3ZlQ2xvc3VyZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oZWxlbWVudCwgaXNUb3BMZXZlbCkge1xuICByZXR1cm4gdGhpcy5hZGRBbGwoWyBlbGVtZW50IF0sIGlzVG9wTGV2ZWwpO1xufTtcblxuXG5Nb3ZlQ2xvc3VyZS5wcm90b3R5cGUuYWRkQWxsID0gZnVuY3Rpb24oZWxlbWVudHMsIGlzVG9wTGV2ZWwpIHtcblxuICB2YXIgbmV3Q2xvc3VyZSA9IGdldENsb3N1cmUoZWxlbWVudHMsICEhaXNUb3BMZXZlbCwgdGhpcyk7XG5cbiAgYXNzaWduKHRoaXMsIG5ld0Nsb3N1cmUpO1xuXG4gIHJldHVybiB0aGlzO1xufTsiLCJpbXBvcnQge1xuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0TW92ZWRTb3VyY2VBbmNob3IsXG4gIGdldE1vdmVkVGFyZ2V0QW5jaG9yXG59IGZyb20gJy4vQW5jaG9yc0hlbHBlcic7XG5cbmltcG9ydCBNb3ZlQ2xvc3VyZSBmcm9tICcuL01vdmVDbG9zdXJlJztcblxuXG4vKipcbiAqIEEgaGVscGVyIHRoYXQgaXMgYWJsZSB0byBjYXJyeSBvdXQgc2VyaWFsaXplZCBtb3ZlXG4gKiBvcGVyYXRpb25zIG9uIG11bHRpcGxlIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vdmVIZWxwZXIobW9kZWxpbmcpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbn1cblxuLyoqXG4gKiBNb3ZlIHRoZSBzcGVjaWZpZWQgZWxlbWVudHMgYW5kIGFsbCBjaGlsZHJlbiBieSB0aGUgZ2l2ZW4gZGVsdGEuXG4gKlxuICogVGhpcyBtb3ZlcyBhbGwgZW5jbG9zZWQgY29ubmVjdGlvbnMsIHRvbyBhbmQgbGF5b3V0cyBhbGwgYWZmZWN0ZWRcbiAqIGV4dGVybmFsIGNvbm5lY3Rpb25zLlxuICpcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHNcbiAqIEBwYXJhbSAge1BvaW50fSBkZWx0YVxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IG5ld1BhcmVudCBhcHBsaWVkIHRvIHRoZSBmaXJzdCBsZXZlbCBvZiBzaGFwZXNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGxpc3Qgb2YgdG91Y2hlZCBlbGVtZW50c1xuICovXG5Nb3ZlSGVscGVyLnByb3RvdHlwZS5tb3ZlUmVjdXJzaXZlID0gZnVuY3Rpb24oZWxlbWVudHMsIGRlbHRhLCBuZXdQYXJlbnQpIHtcbiAgaWYgKCFlbGVtZW50cykge1xuICAgIHJldHVybiBbXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlQ2xvc3VyZSh0aGlzLmdldENsb3N1cmUoZWxlbWVudHMpLCBkZWx0YSwgbmV3UGFyZW50KTtcbiAgfVxufTtcblxuLyoqXG4gKiBNb3ZlIHRoZSBnaXZlbiBjbG9zdXJlIG9mIGVsbWVtZW50cy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY2xvc3VyZVxuICogQHBhcmFtIHtQb2ludH0gZGVsdGFcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IFtuZXdQYXJlbnRdXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBbbmV3SG9zdF1cbiAqL1xuTW92ZUhlbHBlci5wcm90b3R5cGUubW92ZUNsb3N1cmUgPSBmdW5jdGlvbihjbG9zdXJlLCBkZWx0YSwgbmV3UGFyZW50LCBuZXdIb3N0LCBwcmltYXJ5U2hhcGUpIHtcbiAgdmFyIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG5cbiAgdmFyIGFsbFNoYXBlcyA9IGNsb3N1cmUuYWxsU2hhcGVzLFxuICAgICAgYWxsQ29ubmVjdGlvbnMgPSBjbG9zdXJlLmFsbENvbm5lY3Rpb25zLFxuICAgICAgZW5jbG9zZWRDb25uZWN0aW9ucyA9IGNsb3N1cmUuZW5jbG9zZWRDb25uZWN0aW9ucyxcbiAgICAgIHRvcExldmVsID0gY2xvc3VyZS50b3BMZXZlbCxcbiAgICAgIGtlZXBQYXJlbnQgPSBmYWxzZTtcblxuICBpZiAocHJpbWFyeVNoYXBlICYmIHByaW1hcnlTaGFwZS5wYXJlbnQgPT09IG5ld1BhcmVudCkge1xuICAgIGtlZXBQYXJlbnQgPSB0cnVlO1xuICB9XG5cbiAgLy8gbW92ZSBhbGwgc2hhcGVzXG4gIGZvckVhY2goYWxsU2hhcGVzLCBmdW5jdGlvbihzaGFwZSkge1xuXG4gICAgLy8gbW92ZSB0aGUgZWxlbWVudCBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGRlbHRhXG4gICAgbW9kZWxpbmcubW92ZVNoYXBlKHNoYXBlLCBkZWx0YSwgdG9wTGV2ZWxbc2hhcGUuaWRdICYmICFrZWVwUGFyZW50ICYmIG5ld1BhcmVudCwge1xuICAgICAgcmVjdXJzZTogZmFsc2UsXG4gICAgICBsYXlvdXQ6IGZhbHNlXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIG1vdmUgYWxsIGNoaWxkIGNvbm5lY3Rpb25zIC8gbGF5b3V0IGV4dGVybmFsIGNvbm5lY3Rpb25zXG4gIGZvckVhY2goYWxsQ29ubmVjdGlvbnMsIGZ1bmN0aW9uKGMpIHtcblxuICAgIHZhciBzb3VyY2VNb3ZlZCA9ICEhYWxsU2hhcGVzW2Muc291cmNlLmlkXSxcbiAgICAgICAgdGFyZ2V0TW92ZWQgPSAhIWFsbFNoYXBlc1tjLnRhcmdldC5pZF07XG5cbiAgICBpZiAoZW5jbG9zZWRDb25uZWN0aW9uc1tjLmlkXSAmJiBzb3VyY2VNb3ZlZCAmJiB0YXJnZXRNb3ZlZCkge1xuICAgICAgbW9kZWxpbmcubW92ZUNvbm5lY3Rpb24oYywgZGVsdGEsIHRvcExldmVsW2MuaWRdICYmICFrZWVwUGFyZW50ICYmIG5ld1BhcmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGVsaW5nLmxheW91dENvbm5lY3Rpb24oYywge1xuICAgICAgICBjb25uZWN0aW9uU3RhcnQ6IHNvdXJjZU1vdmVkICYmIGdldE1vdmVkU291cmNlQW5jaG9yKGMsIGMuc291cmNlLCBkZWx0YSksXG4gICAgICAgIGNvbm5lY3Rpb25FbmQ6IHRhcmdldE1vdmVkICYmIGdldE1vdmVkVGFyZ2V0QW5jaG9yKGMsIGMudGFyZ2V0LCBkZWx0YSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNsb3N1cmUgZm9yIHRoZSBzZWxlY3RlZCBlbGVtZW50c1xuICpcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHNcbiAqIEByZXR1cm4ge01vdmVDbG9zdXJlfSBjbG9zdXJlXG4gKi9cbk1vdmVIZWxwZXIucHJvdG90eXBlLmdldENsb3N1cmUgPSBmdW5jdGlvbihlbGVtZW50cykge1xuICByZXR1cm4gbmV3IE1vdmVDbG9zdXJlKCkuYWRkQWxsKGVsZW1lbnRzLCB0cnVlKTtcbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW91c2UoZXZlbnRCdXMpIHtcclxuICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gIHRoaXMuX2xhc3RNb3ZlRXZlbnQgPSBudWxsO1xyXG5cclxuICBmdW5jdGlvbiBzZXRMYXN0TW92ZUV2ZW50KG1vdXNlbW92ZUV2ZW50KSB7XHJcbiAgICBzZWxmLl9sYXN0TW92ZUV2ZW50ID0gbW91c2Vtb3ZlRXZlbnQ7XHJcbiAgfVxyXG5cclxuICBldmVudEJ1cy5vbignY2FudmFzLmluaXQnLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICB2YXIgc3ZnID0gc2VsZi5fc3ZnID0gY29udGV4dC5zdmc7XHJcblxyXG4gICAgc3ZnLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHNldExhc3RNb3ZlRXZlbnQpO1xyXG4gIH0pO1xyXG5cclxuICBldmVudEJ1cy5vbignY2FudmFzLmRlc3Ryb3knLCBmdW5jdGlvbigpIHtcclxuICAgIHNlbGYuX2xhc3RNb3VzZUV2ZW50ID0gbnVsbDtcclxuXHJcbiAgICBzZWxmLl9zdmcucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgc2V0TGFzdE1vdmVFdmVudCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbk1vdXNlLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTtcclxuXHJcbk1vdXNlLnByb3RvdHlwZS5nZXRMYXN0TW92ZUV2ZW50ID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIHRoaXMuX2xhc3RNb3ZlRXZlbnQgfHwgY3JlYXRlTW92ZUV2ZW50KDAsIDApO1xyXG59O1xyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW92ZUV2ZW50KHgsIHkpIHtcclxuICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudCcpO1xyXG5cclxuICB2YXIgc2NyZWVuWCA9IHgsXHJcbiAgICAgIHNjcmVlblkgPSB5LFxyXG4gICAgICBjbGllbnRYID0geCxcclxuICAgICAgY2xpZW50WSA9IHk7XHJcblxyXG4gIGlmIChldmVudC5pbml0TW91c2VFdmVudCkge1xyXG4gICAgZXZlbnQuaW5pdE1vdXNlRXZlbnQoXHJcbiAgICAgICdtb3VzZW1vdmUnLFxyXG4gICAgICB0cnVlLFxyXG4gICAgICB0cnVlLFxyXG4gICAgICB3aW5kb3csXHJcbiAgICAgIDAsXHJcbiAgICAgIHNjcmVlblgsXHJcbiAgICAgIHNjcmVlblksXHJcbiAgICAgIGNsaWVudFgsXHJcbiAgICAgIGNsaWVudFksXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICBmYWxzZSxcclxuICAgICAgZmFsc2UsXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICAwLFxyXG4gICAgICBudWxsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGV2ZW50O1xyXG59IiwiaW1wb3J0IE1vdXNlIGZyb20gJy4vTW91c2UnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdtb3VzZScgXSxcbiAgbW91c2U6IFsgJ3R5cGUnLCBNb3VzZSBdXG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmaWx0ZXIsXG4gIGdyb3VwQnksXG4gIGlzT2JqZWN0XG59IGZyb20gJ21pbi1kYXNoJztcblxudmFyIExPV19QUklPUklUWSA9IDUwMCxcbiAgICBNRURJVU1fUFJJT1JJVFkgPSAxMjUwLFxuICAgIEhJR0hfUFJJT1JJVFkgPSAxNTAwO1xuXG5pbXBvcnQgeyBnZXRPcmlnaW5hbCBhcyBnZXRPcmlnaW5hbEV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbC9FdmVudCc7XG5cbnZhciByb3VuZCA9IE1hdGgucm91bmQ7XG5cbmZ1bmN0aW9uIG1pZChlbGVtZW50KSB7XG4gIHJldHVybiB7XG4gICAgeDogZWxlbWVudC54ICsgcm91bmQoZWxlbWVudC53aWR0aCAvIDIpLFxuICAgIHk6IGVsZW1lbnQueSArIHJvdW5kKGVsZW1lbnQuaGVpZ2h0IC8gMilcbiAgfTtcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiB0aGF0IG1ha2VzIHNoYXBlcyBkcmFnZ2FibGUgLyBkcm9wcGFibGUuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RHJhZ2dpbmd9IGRyYWdnaW5nXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICogQHBhcmFtIHtTZWxlY3Rpb259IHNlbGVjdGlvblxuICogQHBhcmFtIHtSdWxlc30gcnVsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW92ZUV2ZW50cyhcbiAgICBldmVudEJ1cywgZHJhZ2dpbmcsIG1vZGVsaW5nLFxuICAgIHNlbGVjdGlvbiwgcnVsZXMpIHtcblxuICAvLyBydWxlc1xuXG4gIGZ1bmN0aW9uIGNhbk1vdmUoc2hhcGVzLCBkZWx0YSwgcG9zaXRpb24sIHRhcmdldCkge1xuXG4gICAgcmV0dXJuIHJ1bGVzLmFsbG93ZWQoJ2VsZW1lbnRzLm1vdmUnLCB7XG4gICAgICBzaGFwZXM6IHNoYXBlcyxcbiAgICAgIGRlbHRhOiBkZWx0YSxcbiAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG4gIH1cblxuXG4gIC8vIG1vdmUgZXZlbnRzXG5cbiAgLy8gYXNzaWduIGEgaGlnaCBwcmlvcml0eSB0byB0aGlzIGhhbmRsZXIgdG8gc2V0dXAgdGhlIGVudmlyb25tZW50XG4gIC8vIG90aGVycyBtYXkgaG9vayB1cCBsYXRlciwgZS5nLiBhdCBkZWZhdWx0IHByaW9yaXR5IGFuZCBtb2RpZnlcbiAgLy8gdGhlIG1vdmUgZW52aXJvbm1lbnQuXG4gIC8vXG4gIC8vIFRoaXMgc2V0cyB1cCB0aGUgY29udGV4dCB3aXRoXG4gIC8vXG4gIC8vICogc2hhcGU6IHRoZSBwcmltYXJ5IHNoYXBlIGJlaW5nIG1vdmVkXG4gIC8vICogc2hhcGVzOiBhIGxpc3Qgb2Ygc2hhcGVzIHRvIGJlIG1vdmVkXG4gIC8vICogdmFsaWRhdGVkU2hhcGVzOiBhIGxpc3Qgb2Ygc2hhcGVzIHRoYXQgYXJlIGJlaW5nIGNoZWNrZWRcbiAgLy8gICAgICAgICAgICAgICAgICAgIGFnYWluc3QgdGhlIHJ1bGVzIGJlZm9yZSBhbmQgZHVyaW5nIG1vdmVcbiAgLy9cbiAgZXZlbnRCdXMub24oJ3NoYXBlLm1vdmUuc3RhcnQnLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGV2ZW50LnNoYXBlLFxuICAgICAgICBzaGFwZXMgPSBzZWxlY3Rpb24uZ2V0KCkuc2xpY2UoKTtcblxuICAgIC8vIG1vdmUgb25seSBzaW5nbGUgc2hhcGUgaWYgdGhlIGRyYWdnZWQgZWxlbWVudFxuICAgIC8vIGlzIG5vdCBwYXJ0IG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvblxuICAgIGlmIChzaGFwZXMuaW5kZXhPZihzaGFwZSkgPT09IC0xKSB7XG4gICAgICBzaGFwZXMgPSBbIHNoYXBlIF07XG4gICAgfVxuXG4gICAgLy8gZW5zdXJlIHdlIHJlbW92ZSBuZXN0ZWQgZWxlbWVudHMgaW4gdGhlIGNvbGxlY3Rpb25cbiAgICAvLyBhbmQgYWRkIGF0dGFjaGVycyBmb3IgYSBwcm9wZXIgZHJhZ2dlclxuICAgIHNoYXBlcyA9IHJlbW92ZU5lc3RlZChzaGFwZXMpO1xuXG4gICAgLy8gYXR0YWNoIHNoYXBlcyB0byBkcmFnIGNvbnRleHRcbiAgICBhc3NpZ24oY29udGV4dCwge1xuICAgICAgc2hhcGVzOiBzaGFwZXMsXG4gICAgICB2YWxpZGF0ZWRTaGFwZXM6IHNoYXBlcyxcbiAgICAgIHNoYXBlOiBzaGFwZVxuICAgIH0pO1xuICB9KTtcblxuXG4gIC8vIGFzc2lnbiBhIGhpZ2ggcHJpb3JpdHkgdG8gdGhpcyBoYW5kbGVyIHRvIHNldHVwIHRoZSBlbnZpcm9ubWVudFxuICAvLyBvdGhlcnMgbWF5IGhvb2sgdXAgbGF0ZXIsIGUuZy4gYXQgZGVmYXVsdCBwcmlvcml0eSBhbmQgbW9kaWZ5XG4gIC8vIHRoZSBtb3ZlIGVudmlyb25tZW50XG4gIC8vXG4gIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLnN0YXJ0JywgTUVESVVNX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICB2YWxpZGF0ZWRTaGFwZXMgPSBjb250ZXh0LnZhbGlkYXRlZFNoYXBlcyxcbiAgICAgICAgY2FuRXhlY3V0ZTtcblxuICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGUgPSBjYW5Nb3ZlKHZhbGlkYXRlZFNoYXBlcyk7XG5cbiAgICAvLyBjaGVjayBpZiB3ZSBjYW4gbW92ZSB0aGUgZWxlbWVudHNcbiAgICBpZiAoIWNhbkV4ZWN1dGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGFzc2lnbiBhIGxvdyBwcmlvcml0eSB0byB0aGlzIGhhbmRsZXJcbiAgLy8gdG8gbGV0IG90aGVycyBtb2RpZnkgdGhlIG1vdmUgZXZlbnQgYmVmb3JlIHdlIHVwZGF0ZVxuICAvLyB0aGUgY29udGV4dFxuICAvL1xuICBldmVudEJ1cy5vbignc2hhcGUubW92ZS5tb3ZlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICB2YWxpZGF0ZWRTaGFwZXMgPSBjb250ZXh0LnZhbGlkYXRlZFNoYXBlcyxcbiAgICAgICAgaG92ZXIgPSBldmVudC5ob3ZlcixcbiAgICAgICAgZGVsdGEgPSB7IHg6IGV2ZW50LmR4LCB5OiBldmVudC5keSB9LFxuICAgICAgICBwb3NpdGlvbiA9IHsgeDogZXZlbnQueCwgeTogZXZlbnQueSB9LFxuICAgICAgICBjYW5FeGVjdXRlO1xuXG4gICAgLy8gY2hlY2sgaWYgd2UgY2FuIG1vdmUgdGhlIGVsZW1lbnRzXG4gICAgY2FuRXhlY3V0ZSA9IGNhbk1vdmUodmFsaWRhdGVkU2hhcGVzLCBkZWx0YSwgcG9zaXRpb24sIGhvdmVyKTtcblxuICAgIGNvbnRleHQuZGVsdGEgPSBkZWx0YTtcbiAgICBjb250ZXh0LmNhbkV4ZWN1dGUgPSBjYW5FeGVjdXRlO1xuXG4gICAgLy8gc2ltcGx5IGlnbm9yZSBtb3ZlIG92ZXJcbiAgICBpZiAoY2FuRXhlY3V0ZSA9PT0gbnVsbCkge1xuICAgICAgY29udGV4dC50YXJnZXQgPSBudWxsO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGV4dC50YXJnZXQgPSBob3ZlcjtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ3NoYXBlLm1vdmUuZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dDtcblxuICAgIHZhciBkZWx0YSA9IGNvbnRleHQuZGVsdGEsXG4gICAgICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGUsXG4gICAgICAgIGlzQXR0YWNoID0gY2FuRXhlY3V0ZSA9PT0gJ2F0dGFjaCcsXG4gICAgICAgIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzO1xuXG4gICAgaWYgKGNhbkV4ZWN1dGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gZW5zdXJlIHdlIGhhdmUgYWN0dWFsIHBpeGVsIHZhbHVlcyBkZWx0YXNcbiAgICAvLyAoaW1wb3J0YW50IHdoZW4gem9vbSBsZXZlbCB3YXMgPiAxIGR1cmluZyBtb3ZlKVxuICAgIGRlbHRhLnggPSByb3VuZChkZWx0YS54KTtcbiAgICBkZWx0YS55ID0gcm91bmQoZGVsdGEueSk7XG5cbiAgICBpZiAoZGVsdGEueCA9PT0gMCAmJiBkZWx0YS55ID09PSAwKSB7XG5cbiAgICAgIC8vIGRpZG4ndCBtb3ZlXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbW9kZWxpbmcubW92ZUVsZW1lbnRzKHNoYXBlcywgZGVsdGEsIGNvbnRleHQudGFyZ2V0LCB7XG4gICAgICBwcmltYXJ5U2hhcGU6IGNvbnRleHQuc2hhcGUsXG4gICAgICBhdHRhY2g6IGlzQXR0YWNoXG4gICAgfSk7XG4gIH0pO1xuXG5cbiAgLy8gbW92ZSBhY3RpdmF0aW9uXG5cbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQubW91c2Vkb3duJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBvcmlnaW5hbEV2ZW50ID0gZ2V0T3JpZ2luYWxFdmVudChldmVudCk7XG5cbiAgICBpZiAoIW9yaWdpbmFsRXZlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbXVzdCBzdXBwbHkgRE9NIG1vdXNlZG93biBldmVudCcpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFydChvcmlnaW5hbEV2ZW50LCBldmVudC5lbGVtZW50KTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG1vdmUuXG4gICAqXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnRcbiAgICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FjdGl2YXRlXVxuICAgKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdXG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChldmVudCwgZWxlbWVudCwgYWN0aXZhdGUsIGNvbnRleHQpIHtcbiAgICBpZiAoaXNPYmplY3QoYWN0aXZhdGUpKSB7XG4gICAgICBjb250ZXh0ID0gYWN0aXZhdGU7XG4gICAgICBhY3RpdmF0ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGRvIG5vdCBtb3ZlIGNvbm5lY3Rpb25zIG9yIHRoZSByb290IGVsZW1lbnRcbiAgICBpZiAoZWxlbWVudC53YXlwb2ludHMgfHwgIWVsZW1lbnQucGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHJlZmVyZW5jZVBvaW50ID0gbWlkKGVsZW1lbnQpO1xuXG4gICAgZHJhZ2dpbmcuaW5pdChldmVudCwgcmVmZXJlbmNlUG9pbnQsICdzaGFwZS5tb3ZlJywge1xuICAgICAgY3Vyc29yOiAnZ3JhYmJpbmcnLFxuICAgICAgYXV0b0FjdGl2YXRlOiBhY3RpdmF0ZSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc2hhcGU6IGVsZW1lbnQsXG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHQgfHwge31cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHdlJ3ZlIGhhbmRsZWQgdGhlIGV2ZW50XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBBUElcblxuICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG59XG5cbk1vdmVFdmVudHMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2RyYWdnaW5nJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3NlbGVjdGlvbicsXG4gICdydWxlcydcbl07XG5cblxuLyoqXG4gKiBSZXR1cm4gYSBmaWx0ZXJlZCBsaXN0IG9mIGVsZW1lbnRzIHRoYXQgZG8gbm90IGNvbnRhaW5cbiAqIHRob3NlIG5lc3RlZCBpbnRvIG90aGVycy5cbiAqXG4gKiBAcGFyYW0gIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGVsZW1lbnRzXG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBmaWx0ZXJlZFxuICovXG5mdW5jdGlvbiByZW1vdmVOZXN0ZWQoZWxlbWVudHMpIHtcblxuICB2YXIgaWRzID0gZ3JvdXBCeShlbGVtZW50cywgJ2lkJyk7XG5cbiAgcmV0dXJuIGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHdoaWxlICgoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50KSkge1xuXG4gICAgICAvLyBwYXJlbnQgaW4gc2VsZWN0aW9uXG4gICAgICBpZiAoaWRzW2VsZW1lbnQuaWRdKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG4iLCJpbXBvcnQge1xuICBmbGF0dGVuLFxuICBmb3JFYWNoLFxuICBmaWx0ZXIsXG4gIGZpbmQsXG4gIGdyb3VwQnksXG4gIG1hcCxcbiAgbWF0Y2hQYXR0ZXJuLFxuICBzaXplXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgc2VsZkFuZEFsbENoaWxkcmVuXG59IGZyb20gJy4uLy4uL3V0aWwvRWxlbWVudHMnO1xuXG5pbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGUsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tICcuLi8uLi91dGlsL1N2Z1RyYW5zZm9ybVV0aWwnO1xuXG52YXIgTE9XX1BSSU9SSVRZID0gNDk5O1xuXG52YXIgTUFSS0VSX0RSQUdHSU5HID0gJ2Rqcy1kcmFnZ2luZycsXG4gICAgTUFSS0VSX09LID0gJ2Ryb3Atb2snLFxuICAgIE1BUktFUl9OT1RfT0sgPSAnZHJvcC1ub3Qtb2snLFxuICAgIE1BUktFUl9ORVdfUEFSRU5UID0gJ25ldy1wYXJlbnQnLFxuICAgIE1BUktFUl9BVFRBQ0ggPSAnYXR0YWNoLW9rJztcblxuXG4vKipcbiAqIFByb3ZpZGVzIHByZXZpZXdzIGZvciBtb3Zpbmcgc2hhcGVzIHdoZW4gbW92aW5nLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge1N0eWxlc30gc3R5bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vdmVQcmV2aWV3KFxuICAgIGV2ZW50QnVzLCBjYW52YXMsIHN0eWxlcywgcHJldmlld1N1cHBvcnQpIHtcblxuICBmdW5jdGlvbiBnZXRWaXN1YWxEcmFnU2hhcGVzKHNoYXBlcykge1xuICAgIHZhciBlbGVtZW50cyA9IGdldEFsbERyYWdnZWRFbGVtZW50cyhzaGFwZXMpO1xuXG4gICAgdmFyIGZpbHRlcmVkRWxlbWVudHMgPSByZW1vdmVFZGdlcyhlbGVtZW50cyk7XG5cbiAgICByZXR1cm4gZmlsdGVyZWRFbGVtZW50cztcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFsbERyYWdnZWRFbGVtZW50cyhzaGFwZXMpIHtcbiAgICB2YXIgYWxsU2hhcGVzID0gc2VsZkFuZEFsbENoaWxkcmVuKHNoYXBlcywgdHJ1ZSk7XG5cbiAgICB2YXIgYWxsQ29ubmVjdGlvbnMgPSBtYXAoYWxsU2hhcGVzLCBmdW5jdGlvbihzaGFwZSkge1xuICAgICAgcmV0dXJuIChzaGFwZS5pbmNvbWluZyB8fCBbXSkuY29uY2F0KHNoYXBlLm91dGdvaW5nIHx8IFtdKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBmbGF0dGVuKGFsbFNoYXBlcy5jb25jYXQoYWxsQ29ubmVjdGlvbnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGRyb3AgbWFya2VyIG9uIGFuIGVsZW1lbnQuXG4gICAqL1xuICBmdW5jdGlvbiBzZXRNYXJrZXIoZWxlbWVudCwgbWFya2VyKSB7XG5cbiAgICBbIE1BUktFUl9BVFRBQ0gsIE1BUktFUl9PSywgTUFSS0VSX05PVF9PSywgTUFSS0VSX05FV19QQVJFTlQgXS5mb3JFYWNoKGZ1bmN0aW9uKG0pIHtcblxuICAgICAgaWYgKG0gPT09IG1hcmtlcikge1xuICAgICAgICBjYW52YXMuYWRkTWFya2VyKGVsZW1lbnQsIG0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihlbGVtZW50LCBtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGFuIGVsZW1lbnQgZHJhZ2dhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYWRkTWFya2VyXG4gICAqL1xuICBmdW5jdGlvbiBtYWtlRHJhZ2dhYmxlKGNvbnRleHQsIGVsZW1lbnQsIGFkZE1hcmtlcikge1xuXG4gICAgcHJldmlld1N1cHBvcnQuYWRkRHJhZ2dlcihlbGVtZW50LCBjb250ZXh0LmRyYWdHcm91cCk7XG5cbiAgICBpZiAoYWRkTWFya2VyKSB7XG4gICAgICBjYW52YXMuYWRkTWFya2VyKGVsZW1lbnQsIE1BUktFUl9EUkFHR0lORyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQuYWxsRHJhZ2dlZEVsZW1lbnRzKSB7XG4gICAgICBjb250ZXh0LmFsbERyYWdnZWRFbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmFsbERyYWdnZWRFbGVtZW50cyA9IFsgZWxlbWVudCBdO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFzc2lnbiBhIGxvdyBwcmlvcml0eSB0byB0aGlzIGhhbmRsZXJcbiAgLy8gdG8gbGV0IG90aGVycyBtb2RpZnkgdGhlIG1vdmUgY29udGV4dCBiZWZvcmVcbiAgLy8gd2UgZHJhdyB0aGluZ3NcbiAgZXZlbnRCdXMub24oJ3NoYXBlLm1vdmUuc3RhcnQnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBkcmFnU2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIGFsbERyYWdnZWRFbGVtZW50cyA9IGNvbnRleHQuYWxsRHJhZ2dlZEVsZW1lbnRzO1xuXG4gICAgdmFyIHZpc3VhbGx5RHJhZ2dlZFNoYXBlcyA9IGdldFZpc3VhbERyYWdTaGFwZXMoZHJhZ1NoYXBlcyk7XG5cbiAgICBpZiAoIWNvbnRleHQuZHJhZ0dyb3VwKSB7XG4gICAgICB2YXIgZHJhZ0dyb3VwID0gc3ZnQ3JlYXRlKCdnJyk7XG5cbiAgICAgIHN2Z0F0dHIoZHJhZ0dyb3VwLCBzdHlsZXMuY2xzKCdkanMtZHJhZy1ncm91cCcsIFsgJ25vLWV2ZW50cycgXSkpO1xuXG4gICAgICB2YXIgZGVmYXVsdExheWVyID0gY2FudmFzLmdldERlZmF1bHRMYXllcigpO1xuXG4gICAgICBzdmdBcHBlbmQoZGVmYXVsdExheWVyLCBkcmFnR3JvdXApO1xuXG4gICAgICBjb250ZXh0LmRyYWdHcm91cCA9IGRyYWdHcm91cDtcbiAgICB9XG5cbiAgICAvLyBhZGQgcHJldmlld3NcbiAgICB2aXN1YWxseURyYWdnZWRTaGFwZXMuZm9yRWFjaChmdW5jdGlvbihzaGFwZSkge1xuICAgICAgcHJldmlld1N1cHBvcnQuYWRkRHJhZ2dlcihzaGFwZSwgY29udGV4dC5kcmFnR3JvdXApO1xuICAgIH0pO1xuXG4gICAgLy8gY2FjaGUgYWxsIGRyYWdnZWQgZWxlbWVudHMgLyBnZnhcbiAgICAvLyBzbyB0aGF0IHdlIGNhbiBxdWlja2x5IHVuZG8gdGhlaXIgc3RhdGUgY2hhbmdlcyBsYXRlclxuICAgIGlmICghYWxsRHJhZ2dlZEVsZW1lbnRzKSB7XG4gICAgICBhbGxEcmFnZ2VkRWxlbWVudHMgPSBnZXRBbGxEcmFnZ2VkRWxlbWVudHMoZHJhZ1NoYXBlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsbERyYWdnZWRFbGVtZW50cyA9IGZsYXR0ZW4oW1xuICAgICAgICBhbGxEcmFnZ2VkRWxlbWVudHMsXG4gICAgICAgIGdldEFsbERyYWdnZWRFbGVtZW50cyhkcmFnU2hhcGVzKVxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGRyYWdnaW5nIG1hcmtlclxuICAgIGZvckVhY2goYWxsRHJhZ2dlZEVsZW1lbnRzLCBmdW5jdGlvbihlKSB7XG4gICAgICBjYW52YXMuYWRkTWFya2VyKGUsIE1BUktFUl9EUkFHR0lORyk7XG4gICAgfSk7XG5cbiAgICBjb250ZXh0LmFsbERyYWdnZWRFbGVtZW50cyA9IGFsbERyYWdnZWRFbGVtZW50cztcblxuICAgIC8vIGRldGVybWluZSwgaWYgYW55IG9mIHRoZSBkcmFnZ2VkIGVsZW1lbnRzIGhhdmUgZGlmZmVyZW50IHBhcmVudHNcbiAgICBjb250ZXh0LmRpZmZlcmVudFBhcmVudHMgPSBoYXZlRGlmZmVyZW50UGFyZW50cyhkcmFnU2hhcGVzKTtcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIHByZXZpZXdzXG4gIGV2ZW50QnVzLm9uKCdzaGFwZS5tb3ZlLm1vdmUnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGRyYWdHcm91cCA9IGNvbnRleHQuZHJhZ0dyb3VwLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgcGFyZW50ID0gY29udGV4dC5zaGFwZS5wYXJlbnQsXG4gICAgICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGU7XG5cbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICBpZiAoY2FuRXhlY3V0ZSA9PT0gJ2F0dGFjaCcpIHtcbiAgICAgICAgc2V0TWFya2VyKHRhcmdldCwgTUFSS0VSX0FUVEFDSCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRleHQuY2FuRXhlY3V0ZSAmJiB0YXJnZXQgJiYgdGFyZ2V0LmlkICE9PSBwYXJlbnQuaWQpIHtcbiAgICAgICAgc2V0TWFya2VyKHRhcmdldCwgTUFSS0VSX05FV19QQVJFTlQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0TWFya2VyKHRhcmdldCwgY29udGV4dC5jYW5FeGVjdXRlID8gTUFSS0VSX09LIDogTUFSS0VSX05PVF9PSyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJhbnNsYXRlKGRyYWdHcm91cCwgZXZlbnQuZHgsIGV2ZW50LmR5KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnc2hhcGUubW92ZS5vdXQnLCAnc2hhcGUubW92ZS5jbGVhbnVwJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XG5cbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICBzZXRNYXJrZXIodGFyZ2V0LCBudWxsKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHJlbW92ZSBwcmV2aWV3c1xuICBldmVudEJ1cy5vbignc2hhcGUubW92ZS5jbGVhbnVwJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgYWxsRHJhZ2dlZEVsZW1lbnRzID0gY29udGV4dC5hbGxEcmFnZ2VkRWxlbWVudHMsXG4gICAgICAgIGRyYWdHcm91cCA9IGNvbnRleHQuZHJhZ0dyb3VwO1xuXG5cbiAgICAvLyByZW1vdmUgZHJhZ2dpbmcgbWFya2VyXG4gICAgZm9yRWFjaChhbGxEcmFnZ2VkRWxlbWVudHMsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoZSwgTUFSS0VSX0RSQUdHSU5HKTtcbiAgICB9KTtcblxuICAgIGlmIChkcmFnR3JvdXApIHtcbiAgICAgIHN2Z1JlbW92ZShkcmFnR3JvdXApO1xuICAgIH1cbiAgfSk7XG5cblxuICAvLyBBUEkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBNYWtlIGFuIGVsZW1lbnQgZHJhZ2dhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYWRkTWFya2VyXG4gICAqL1xuICB0aGlzLm1ha2VEcmFnZ2FibGUgPSBtYWtlRHJhZ2dhYmxlO1xufVxuXG5Nb3ZlUHJldmlldy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnY2FudmFzJyxcbiAgJ3N0eWxlcycsXG4gICdwcmV2aWV3U3VwcG9ydCdcbl07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogcmV0dXJucyBlbGVtZW50cyBtaW51cyBhbGwgY29ubmVjdGlvbnNcbiAqIHdoZXJlIHNvdXJjZSBvciB0YXJnZXQgaXMgbm90IGVsZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUVkZ2VzKGVsZW1lbnRzKSB7XG5cbiAgdmFyIGZpbHRlcmVkRWxlbWVudHMgPSBmaWx0ZXIoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgIGlmICghaXNDb25uZWN0aW9uKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBmaW5kKGVsZW1lbnRzLCBtYXRjaFBhdHRlcm4oeyBpZDogZWxlbWVudC5zb3VyY2UuaWQgfSkpICYmXG4gICAgICAgIGZpbmQoZWxlbWVudHMsIG1hdGNoUGF0dGVybih7IGlkOiBlbGVtZW50LnRhcmdldC5pZCB9KSlcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZmlsdGVyZWRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gaGF2ZURpZmZlcmVudFBhcmVudHMoZWxlbWVudHMpIHtcbiAgcmV0dXJuIHNpemUoZ3JvdXBCeShlbGVtZW50cywgZnVuY3Rpb24oZSkgeyByZXR1cm4gZS5wYXJlbnQgJiYgZS5wYXJlbnQuaWQ7IH0pKSAhPT0gMTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZWxlbWVudCBpcyBhIGNvbm5lY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGlzQ29ubmVjdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LndheXBvaW50cztcbn1cbiIsImltcG9ydCBJbnRlcmFjdGlvbkV2ZW50c01vZHVsZSBmcm9tICcuLi9pbnRlcmFjdGlvbi1ldmVudHMnO1xuaW1wb3J0IFNlbGVjdGlvbk1vZHVsZSBmcm9tICcuLi9zZWxlY3Rpb24nO1xuaW1wb3J0IE91dGxpbmVNb2R1bGUgZnJvbSAnLi4vb3V0bGluZSc7XG5pbXBvcnQgUnVsZXNNb2R1bGUgZnJvbSAnLi4vcnVsZXMnO1xuaW1wb3J0IERyYWdnaW5nTW9kdWxlIGZyb20gJy4uL2RyYWdnaW5nJztcbmltcG9ydCBQcmV2aWV3U3VwcG9ydE1vZHVsZSBmcm9tICcuLi9wcmV2aWV3LXN1cHBvcnQnO1xuXG5pbXBvcnQgTW92ZSBmcm9tICcuL01vdmUnO1xuaW1wb3J0IE1vdmVQcmV2aWV3IGZyb20gJy4vTW92ZVByZXZpZXcnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgSW50ZXJhY3Rpb25FdmVudHNNb2R1bGUsXG4gICAgU2VsZWN0aW9uTW9kdWxlLFxuICAgIE91dGxpbmVNb2R1bGUsXG4gICAgUnVsZXNNb2R1bGUsXG4gICAgRHJhZ2dpbmdNb2R1bGUsXG4gICAgUHJldmlld1N1cHBvcnRNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFtcbiAgICAnbW92ZScsXG4gICAgJ21vdmVQcmV2aWV3J1xuICBdLFxuICBtb3ZlOiBbICd0eXBlJywgTW92ZSBdLFxuICBtb3ZlUHJldmlldzogWyAndHlwZScsIE1vdmVQcmV2aWV3IF1cbn07XG4iLCJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJy4uLy4uL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuXG4vKipcbiAqIEFuIGFic3RyYWN0IHByb3ZpZGVyIHRoYXQgYWxsb3dzIG1vZGVsZXJzIHRvIGltcGxlbWVudCBhIGN1c3RvbVxuICogb3JkZXJpbmcgb2YgZGlhZ3JhbSBlbGVtZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIEl0IG1ha2VzIHN1cmUgdGhhdCB0aGUgb3JkZXIgaXMgYWx3YXlzIHByZXNlcnZlZCBkdXJpbmcgZWxlbWVudFxuICogY3JlYXRpb24gYW5kIG1vdmUgb3BlcmF0aW9ucy5cbiAqXG4gKiBJbiBvcmRlciB0byB1c2UgdGhpcyBiZWhhdmlvciwgaW5oZXJpdCBmcm9tIGl0IGFuZCBvdmVycmlkZVxuICogdGhlIG1ldGhvZCB7QGxpbmsgT3JkZXJpbmdQcm92aWRlciNnZXRPcmRlcmluZ30uXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBmdW5jdGlvbiBDdXN0b21PcmRlcmluZ1Byb3ZpZGVyKGV2ZW50QnVzKSB7XG4gKiAgIE9yZGVyaW5nUHJvdmlkZXIuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG4gKlxuICogICB0aGlzLmdldE9yZGVyaW5nID0gZnVuY3Rpb24oZWxlbWVudCwgbmV3UGFyZW50KSB7XG4gKiAgICAgLy8gYWx3YXlzIGluc2VydCBlbGVtZW50cyBhdCB0aGUgZnJvbnRcbiAqICAgICAvLyB3aGVuIG1vdmluZ1xuICogICAgIHJldHVybiB7XG4gKiAgICAgICBpbmRleDogMCxcbiAqICAgICAgIHBhcmVudDogbmV3UGFyZW50XG4gKiAgICAgfTtcbiAqICAgfTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE9yZGVyaW5nUHJvdmlkZXIoZXZlbnRCdXMpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdGhpcy5wcmVFeGVjdXRlKFsgJ3NoYXBlLmNyZWF0ZScsICdjb25uZWN0aW9uLmNyZWF0ZScgXSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuc2hhcGUgfHwgY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudDtcblxuICAgIHZhciBvcmRlcmluZyA9IHNlbGYuZ2V0T3JkZXJpbmcoZWxlbWVudCwgcGFyZW50KTtcblxuICAgIGlmIChvcmRlcmluZykge1xuXG4gICAgICBpZiAob3JkZXJpbmcucGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGV4dC5wYXJlbnQgPSBvcmRlcmluZy5wYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQucGFyZW50SW5kZXggPSBvcmRlcmluZy5pbmRleDtcbiAgICB9XG4gIH0pO1xuXG4gIHRoaXMucHJlRXhlY3V0ZShbICdzaGFwZS5tb3ZlJywgJ2Nvbm5lY3Rpb24ubW92ZScgXSwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuc2hhcGUgfHwgY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBwYXJlbnQgPSBjb250ZXh0Lm5ld1BhcmVudCB8fCBlbGVtZW50LnBhcmVudDtcblxuICAgIHZhciBvcmRlcmluZyA9IHNlbGYuZ2V0T3JkZXJpbmcoZWxlbWVudCwgcGFyZW50KTtcblxuICAgIGlmIChvcmRlcmluZykge1xuXG4gICAgICBpZiAob3JkZXJpbmcucGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGV4dC5uZXdQYXJlbnQgPSBvcmRlcmluZy5wYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubmV3UGFyZW50SW5kZXggPSBvcmRlcmluZy5pbmRleDtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybiBhIGN1c3RvbSBvcmRlcmluZyBvZiB0aGUgZWxlbWVudCwgYm90aCBpbiB0ZXJtc1xuICogb2YgcGFyZW50IGVsZW1lbnQgYW5kIGluZGV4IGluIHRoZSBuZXcgcGFyZW50LlxuICpcbiAqIEltcGxlbWVudG9ycyBvZiB0aGlzIG1ldGhvZCBtdXN0IHJldHVybiBhbiBvYmplY3Qgd2l0aFxuICogYHBhcmVudGAgX2FuZF8gYGluZGV4YCBpbiBpdC5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gbmV3UGFyZW50XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBvcmRlcmluZyBkZXNjcmlwdG9yXG4gKi9cbk9yZGVyaW5nUHJvdmlkZXIucHJvdG90eXBlLmdldE9yZGVyaW5nID0gZnVuY3Rpb24oZWxlbWVudCwgbmV3UGFyZW50KSB7XG4gIHJldHVybiBudWxsO1xufTtcblxuaW5oZXJpdHMoT3JkZXJpbmdQcm92aWRlciwgQ29tbWFuZEludGVyY2VwdG9yKTsiLCJpbXBvcnQgeyBnZXRCQm94IH0gZnJvbSAnLi4vLi4vdXRpbC9FbGVtZW50cyc7XG5cbnZhciBMT1dfUFJJT1JJVFkgPSA1MDA7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZVxufSBmcm9tICd0aW55LXN2Zyc7XG5cbmltcG9ydCB7XG4gIHF1ZXJ5IGFzIGRvbVF1ZXJ5XG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5cbi8qKlxuICogQGNsYXNzXG4gKlxuICogQSBwbHVnaW4gdGhhdCBhZGRzIGFuIG91dGxpbmUgdG8gc2hhcGVzIGFuZCBjb25uZWN0aW9ucyB0aGF0IG1heSBiZSBhY3RpdmF0ZWQgYW5kIHN0eWxlZFxuICogdmlhIENTUyBjbGFzc2VzLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge1N0eWxlc30gc3R5bGVzXG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE91dGxpbmUoZXZlbnRCdXMsIHN0eWxlcywgZWxlbWVudFJlZ2lzdHJ5KSB7XG5cbiAgdGhpcy5vZmZzZXQgPSA2O1xuXG4gIHZhciBPVVRMSU5FX1NUWUxFID0gc3R5bGVzLmNscygnZGpzLW91dGxpbmUnLCBbICduby1maWxsJyBdKTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZnVuY3Rpb24gY3JlYXRlT3V0bGluZShnZngsIGJvdW5kcykge1xuICAgIHZhciBvdXRsaW5lID0gc3ZnQ3JlYXRlKCdyZWN0Jyk7XG5cbiAgICBzdmdBdHRyKG91dGxpbmUsIGFzc2lnbih7XG4gICAgICB4OiAxMCxcbiAgICAgIHk6IDEwLFxuICAgICAgd2lkdGg6IDEwMCxcbiAgICAgIGhlaWdodDogMTAwXG4gICAgfSwgT1VUTElORV9TVFlMRSkpO1xuXG4gICAgc3ZnQXBwZW5kKGdmeCwgb3V0bGluZSk7XG5cbiAgICByZXR1cm4gb3V0bGluZTtcbiAgfVxuXG4gIC8vIEEgbG93IHByaW9ydGl0eSBpcyBuZWNlc3NhcnksIGJlY2F1c2Ugb3V0bGluZXMgb2YgbGFiZWxzIGhhdmUgdG8gYmUgdXBkYXRlZFxuICAvLyBhZnRlciB0aGUgbGFiZWwgYm91bmRzIGhhdmUgYmVlbiB1cGRhdGVkIGluIHRoZSByZW5kZXJlci5cbiAgZXZlbnRCdXMub24oWyAnc2hhcGUuYWRkZWQnLCAnc2hhcGUuY2hhbmdlZCcgXSwgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBlbGVtZW50ID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgZ2Z4ID0gZXZlbnQuZ2Z4O1xuXG4gICAgdmFyIG91dGxpbmUgPSBkb21RdWVyeSgnLmRqcy1vdXRsaW5lJywgZ2Z4KTtcblxuICAgIGlmICghb3V0bGluZSkge1xuICAgICAgb3V0bGluZSA9IGNyZWF0ZU91dGxpbmUoZ2Z4LCBlbGVtZW50KTtcbiAgICB9XG5cbiAgICBzZWxmLnVwZGF0ZVNoYXBlT3V0bGluZShvdXRsaW5lLCBlbGVtZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnY29ubmVjdGlvbi5hZGRlZCcsICdjb25uZWN0aW9uLmNoYW5nZWQnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50LFxuICAgICAgICBnZnggPSBldmVudC5nZng7XG5cbiAgICB2YXIgb3V0bGluZSA9IGRvbVF1ZXJ5KCcuZGpzLW91dGxpbmUnLCBnZngpO1xuXG4gICAgaWYgKCFvdXRsaW5lKSB7XG4gICAgICBvdXRsaW5lID0gY3JlYXRlT3V0bGluZShnZngsIGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHNlbGYudXBkYXRlQ29ubmVjdGlvbk91dGxpbmUob3V0bGluZSwgZWxlbWVudCk7XG4gIH0pO1xufVxuXG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb3V0bGluZSBvZiBhIHNoYXBlIHJlc3BlY3RpbmcgdGhlIGRpbWVuc2lvbiBvZiB0aGVcbiAqIGVsZW1lbnQgYW5kIGFuIG91dGxpbmUgb2Zmc2V0LlxuICpcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IG91dGxpbmVcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKi9cbk91dGxpbmUucHJvdG90eXBlLnVwZGF0ZVNoYXBlT3V0bGluZSA9IGZ1bmN0aW9uKG91dGxpbmUsIGVsZW1lbnQpIHtcblxuICBzdmdBdHRyKG91dGxpbmUsIHtcbiAgICB4OiAtdGhpcy5vZmZzZXQsXG4gICAgeTogLXRoaXMub2Zmc2V0LFxuICAgIHdpZHRoOiBlbGVtZW50LndpZHRoICsgdGhpcy5vZmZzZXQgKiAyLFxuICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHQgKyB0aGlzLm9mZnNldCAqIDJcbiAgfSk7XG5cbn07XG5cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvdXRsaW5lIG9mIGEgY29ubmVjdGlvbiByZXNwZWN0aW5nIHRoZSBib3VuZGluZyBib3ggb2ZcbiAqIHRoZSBjb25uZWN0aW9uIGFuZCBhbiBvdXRsaW5lIG9mZnNldC5cbiAqXG4gKiBAcGFyYW0gIHtTVkdFbGVtZW50fSBvdXRsaW5lXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICovXG5PdXRsaW5lLnByb3RvdHlwZS51cGRhdGVDb25uZWN0aW9uT3V0bGluZSA9IGZ1bmN0aW9uKG91dGxpbmUsIGNvbm5lY3Rpb24pIHtcblxuICB2YXIgYmJveCA9IGdldEJCb3goY29ubmVjdGlvbik7XG5cbiAgc3ZnQXR0cihvdXRsaW5lLCB7XG4gICAgeDogYmJveC54IC0gdGhpcy5vZmZzZXQsXG4gICAgeTogYmJveC55IC0gdGhpcy5vZmZzZXQsXG4gICAgd2lkdGg6IGJib3gud2lkdGggKyB0aGlzLm9mZnNldCAqIDIsXG4gICAgaGVpZ2h0OiBiYm94LmhlaWdodCArIHRoaXMub2Zmc2V0ICogMlxuICB9KTtcblxufTtcblxuXG5PdXRsaW5lLiRpbmplY3QgPSBbJ2V2ZW50QnVzJywgJ3N0eWxlcycsICdlbGVtZW50UmVnaXN0cnknXTsiLCJpbXBvcnQgT3V0bGluZSBmcm9tICcuL091dGxpbmUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdvdXRsaW5lJyBdLFxuICBvdXRsaW5lOiBbICd0eXBlJywgT3V0bGluZSBdXG59OyIsImltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzU3RyaW5nLFxuICBpc09iamVjdCxcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBmaW5kLFxuICBmaWx0ZXIsXG4gIG1hdGNoUGF0dGVybixcbiAgaXNEZWZpbmVkXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZG9taWZ5LFxuICBjbGFzc2VzIGFzIGRvbUNsYXNzZXMsXG4gIGF0dHIgYXMgZG9tQXR0cixcbiAgcmVtb3ZlIGFzIGRvbVJlbW92ZSxcbiAgY2xlYXIgYXMgZG9tQ2xlYXJcbn0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7XG4gIGdldEJCb3hcbn0gZnJvbSAnLi4vLi4vdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCBJZHMgZnJvbSAnLi4vLi4vdXRpbC9JZEdlbmVyYXRvcic7XG5cbi8vIGRvY3VtZW50IHdpZGUgdW5pcXVlIG92ZXJsYXkgaWRzXG52YXIgaWRzID0gbmV3IElkcygnb3YnKTtcblxudmFyIExPV19QUklPUklUWSA9IDUwMDtcblxuXG4vKipcbiAqIEEgc2VydmljZSB0aGF0IGFsbG93cyB1c2VycyB0byBhdHRhY2ggb3ZlcmxheXMgdG8gZGlhZ3JhbSBlbGVtZW50cy5cbiAqXG4gKiBUaGUgb3ZlcmxheSBzZXJ2aWNlIHdpbGwgdGFrZSBjYXJlIG9mIG92ZXJsYXkgcG9zaXRpb25pbmcgZHVyaW5nIHVwZGF0ZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBhZGQgYSBwaW5rIGJhZGdlIG9uIHRoZSB0b3AgbGVmdCBvZiB0aGUgc2hhcGVcbiAqIG92ZXJsYXlzLmFkZChzb21lU2hhcGUsIHtcbiAqICAgcG9zaXRpb246IHtcbiAqICAgICB0b3A6IC01LFxuICogICAgIGxlZnQ6IC01XG4gKiAgIH0sXG4gKiAgIGh0bWw6ICc8ZGl2IHN0eWxlPVwid2lkdGg6IDEwcHg7IGJhY2tncm91bmQ6IGZ1Y2hzaWE7IGNvbG9yOiB3aGl0ZTtcIj4wPC9kaXY+J1xuICogfSk7XG4gKlxuICogLy8gb3IgYWRkIHZpYSBzaGFwZSBpZFxuICpcbiAqIG92ZXJsYXlzLmFkZCgnc29tZS1lbGVtZW50LWlkJywge1xuICogICBwb3NpdGlvbjoge1xuICogICAgIHRvcDogLTUsXG4gKiAgICAgbGVmdDogLTVcbiAqICAgfVxuICogICBodG1sOiAnPGRpdiBzdHlsZT1cIndpZHRoOiAxMHB4OyBiYWNrZ3JvdW5kOiBmdWNoc2lhOyBjb2xvcjogd2hpdGU7XCI+MDwvZGl2PidcbiAqIH0pO1xuICpcbiAqIC8vIG9yIGFkZCB3aXRoIG9wdGlvbmFsIHR5cGVcbiAqXG4gKiBvdmVybGF5cy5hZGQoc29tZVNoYXBlLCAnYmFkZ2UnLCB7XG4gKiAgIHBvc2l0aW9uOiB7XG4gKiAgICAgdG9wOiAtNSxcbiAqICAgICBsZWZ0OiAtNVxuICogICB9XG4gKiAgIGh0bWw6ICc8ZGl2IHN0eWxlPVwid2lkdGg6IDEwcHg7IGJhY2tncm91bmQ6IGZ1Y2hzaWE7IGNvbG9yOiB3aGl0ZTtcIj4wPC9kaXY+J1xuICogfSk7XG4gKlxuICpcbiAqIC8vIHJlbW92ZSBhbiBvdmVybGF5XG4gKlxuICogdmFyIGlkID0gb3ZlcmxheXMuYWRkKC4uLik7XG4gKiBvdmVybGF5cy5yZW1vdmUoaWQpO1xuICpcbiAqXG4gKiBZb3UgbWF5IGNvbmZpZ3VyZSBvdmVybGF5IGRlZmF1bHRzIGR1cmluZyB0b29sIGJ5IHByb3ZpZGluZyBhIGBjb25maWdgIG1vZHVsZVxuICogd2l0aCBgb3ZlcmxheXMuZGVmYXVsdHNgIGFzIGFuIGVudHJ5OlxuICpcbiAqIHtcbiAqICAgb3ZlcmxheXM6IHtcbiAqICAgICBkZWZhdWx0czoge1xuICogICAgICAgc2hvdzoge1xuICogICAgICAgICBtaW5ab29tOiAwLjcsXG4gKiAgICAgICAgIG1heFpvb206IDUuMFxuICogICAgICAgfSxcbiAqICAgICAgIHNjYWxlOiB7XG4gKiAgICAgICAgIG1pbjogMVxuICogICAgICAgfVxuICogICAgIH1cbiAqIH1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICogQHBhcmFtIHtFbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBPdmVybGF5cyhjb25maWcsIGV2ZW50QnVzLCBjYW52YXMsIGVsZW1lbnRSZWdpc3RyeSkge1xuXG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcbiAgdGhpcy5fZWxlbWVudFJlZ2lzdHJ5ID0gZWxlbWVudFJlZ2lzdHJ5O1xuXG4gIHRoaXMuX2lkcyA9IGlkcztcblxuICB0aGlzLl9vdmVybGF5RGVmYXVsdHMgPSBhc3NpZ24oe1xuXG4gICAgLy8gbm8gc2hvdyBjb25zdHJhaW50c1xuICAgIHNob3c6IG51bGwsXG5cbiAgICAvLyBhbHdheXMgc2NhbGVcbiAgICBzY2FsZTogdHJ1ZVxuICB9LCBjb25maWcgJiYgY29uZmlnLmRlZmF1bHRzKTtcblxuICAvKipcbiAgICogTWFwcGluZyBvdmVybGF5SWQgLT4gb3ZlcmxheVxuICAgKi9cbiAgdGhpcy5fb3ZlcmxheXMgPSB7fTtcblxuICAvKipcbiAgICogTWFwcGluZyBlbGVtZW50SWQgLT4gb3ZlcmxheSBjb250YWluZXJcbiAgICovXG4gIHRoaXMuX292ZXJsYXlDb250YWluZXJzID0gW107XG5cbiAgLy8gcm9vdCBodG1sIGVsZW1lbnQgZm9yIGFsbCBvdmVybGF5c1xuICB0aGlzLl9vdmVybGF5Um9vdCA9IGNyZWF0ZVJvb3QoY2FudmFzLmdldENvbnRhaW5lcigpKTtcblxuICB0aGlzLl9pbml0KCk7XG59XG5cblxuT3ZlcmxheXMuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5vdmVybGF5cycsXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5J1xuXTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIG92ZXJsYXkgd2l0aCB0aGUgc3BlY2lmaWVkIGlkIG9yIGEgbGlzdCBvZiBvdmVybGF5c1xuICogZm9yIGFuIGVsZW1lbnQgd2l0aCBhIGdpdmVuIHR5cGUuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyByZXR1cm4gdGhlIHNpbmdsZSBvdmVybGF5IHdpdGggdGhlIGdpdmVuIGlkXG4gKiBvdmVybGF5cy5nZXQoJ3NvbWUtaWQnKTtcbiAqXG4gKiAvLyByZXR1cm4gYWxsIG92ZXJsYXlzIGZvciB0aGUgc2hhcGVcbiAqIG92ZXJsYXlzLmdldCh7IGVsZW1lbnQ6IHNvbWVTaGFwZSB9KTtcbiAqXG4gKiAvLyByZXR1cm4gYWxsIG92ZXJsYXlzIG9uIHNoYXBlIHdpdGggdHlwZSAnYmFkZ2UnXG4gKiBvdmVybGF5cy5nZXQoeyBlbGVtZW50OiBzb21lU2hhcGUsIHR5cGU6ICdiYWRnZScgfSk7XG4gKlxuICogLy8gc2hhcGUgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGFzIGlkXG4gKiBvdmVybGF5cy5nZXQoeyBlbGVtZW50OiAnZWxlbWVudC1pZCcsIHR5cGU6ICdiYWRnZScgfSk7XG4gKlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZWFyY2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc2VhcmNoLmlkXVxuICogQHBhcmFtIHtzdHJpbmd8ZGpzLm1vZGVsLkJhc2V9IFtzZWFyY2guZWxlbWVudF1cbiAqIEBwYXJhbSB7c3RyaW5nfSBbc2VhcmNoLnR5cGVdXG4gKlxuICogQHJldHVybiB7T2JqZWN0fEFycmF5PE9iamVjdD59IHRoZSBvdmVybGF5KHMpXG4gKi9cbk92ZXJsYXlzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihzZWFyY2gpIHtcblxuICBpZiAoaXNTdHJpbmcoc2VhcmNoKSkge1xuICAgIHNlYXJjaCA9IHsgaWQ6IHNlYXJjaCB9O1xuICB9XG5cbiAgaWYgKGlzU3RyaW5nKHNlYXJjaC5lbGVtZW50KSkge1xuICAgIHNlYXJjaC5lbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldChzZWFyY2guZWxlbWVudCk7XG4gIH1cblxuICBpZiAoc2VhcmNoLmVsZW1lbnQpIHtcbiAgICB2YXIgY29udGFpbmVyID0gdGhpcy5fZ2V0T3ZlcmxheUNvbnRhaW5lcihzZWFyY2guZWxlbWVudCwgdHJ1ZSk7XG5cbiAgICAvLyByZXR1cm4gYSBsaXN0IG9mIG92ZXJsYXlzIHdoZW4gc2VhcmNoaW5nIGJ5IGVsZW1lbnQgKCt0eXBlKVxuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIHJldHVybiBzZWFyY2gudHlwZSA/IGZpbHRlcihjb250YWluZXIub3ZlcmxheXMsIG1hdGNoUGF0dGVybih7IHR5cGU6IHNlYXJjaC50eXBlIH0pKSA6IGNvbnRhaW5lci5vdmVybGF5cy5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9IGVsc2VcbiAgaWYgKHNlYXJjaC50eXBlKSB7XG4gICAgcmV0dXJuIGZpbHRlcih0aGlzLl9vdmVybGF5cywgbWF0Y2hQYXR0ZXJuKHsgdHlwZTogc2VhcmNoLnR5cGUgfSkpO1xuICB9IGVsc2Uge1xuXG4gICAgLy8gcmV0dXJuIHNpbmdsZSBlbGVtZW50IHdoZW4gc2VhcmNoaW5nIGJ5IGlkXG4gICAgcmV0dXJuIHNlYXJjaC5pZCA/IHRoaXMuX292ZXJsYXlzW3NlYXJjaC5pZF0gOiBudWxsO1xuICB9XG59O1xuXG4vKipcbiAqIEFkZHMgYSBIVE1MIG92ZXJsYXkgdG8gYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xkanMubW9kZWwuQmFzZX0gICBlbGVtZW50ICAgYXR0YWNoIG92ZXJsYXkgdG8gdGhpcyBzaGFwZVxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgW3R5cGVdICAgIG9wdGlvbmFsIHR5cGUgdG8gYXNzaWduIHRvIHRoZSBvdmVybGF5XG4gKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgICAgICAgICBvdmVybGF5ICAgdGhlIG92ZXJsYXkgY29uZmlndXJhdGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfERPTUVsZW1lbnR9ICAgICAgIG92ZXJsYXkuaHRtbCAgICAgICAgICAgICAgICAgaHRtbCBlbGVtZW50IHRvIHVzZSBhcyBhbiBvdmVybGF5XG4gKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgICAgICAgICBbb3ZlcmxheS5zaG93XSAgICAgICAgICAgICAgIHNob3cgY29uZmlndXJhdGlvblxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgICAgICAgICAgICAgW292ZXJsYXkuc2hvdy5taW5ab29tXSAgICAgICBtaW5pbWFsIHpvb20gbGV2ZWwgdG8gc2hvdyB0aGUgb3ZlcmxheVxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgICAgICAgICAgICAgW292ZXJsYXkuc2hvdy5tYXhab29tXSAgICAgICBtYXhpbXVtIHpvb20gbGV2ZWwgdG8gc2hvdyB0aGUgb3ZlcmxheVxuICogQHBhcmFtIHtPYmplY3R9ICAgICAgICAgICAgICAgICAgb3ZlcmxheS5wb3NpdGlvbiAgICAgICAgICAgICB3aGVyZSB0byBhdHRhY2ggdGhlIG92ZXJsYXlcbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgICAgIFtvdmVybGF5LnBvc2l0aW9uLmxlZnRdICAgICAgcmVsYXRpdmUgdG8gZWxlbWVudCBiYm94IGxlZnQgYXR0YWNobWVudFxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgICAgICAgICAgICAgW292ZXJsYXkucG9zaXRpb24udG9wXSAgICAgICByZWxhdGl2ZSB0byBlbGVtZW50IGJib3ggdG9wIGF0dGFjaG1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgICAgIFtvdmVybGF5LnBvc2l0aW9uLmJvdHRvbV0gICAgcmVsYXRpdmUgdG8gZWxlbWVudCBiYm94IGJvdHRvbSBhdHRhY2htZW50XG4gKiBAcGFyYW0ge251bWJlcn0gICAgICAgICAgICAgICAgICBbb3ZlcmxheS5wb3NpdGlvbi5yaWdodF0gICAgIHJlbGF0aXZlIHRvIGVsZW1lbnQgYmJveCByaWdodCBhdHRhY2htZW50XG4gKiBAcGFyYW0ge2Jvb2xlYW58T2JqZWN0fSAgICAgICAgICBbb3ZlcmxheS5zY2FsZT10cnVlXSAgICAgICAgIGZhbHNlIHRvIHByZXNlcnZlIHRoZSBzYW1lIHNpemUgcmVnYXJkbGVzcyBvZlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFncmFtIHpvb21cbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgICAgIFtvdmVybGF5LnNjYWxlLm1pbl1cbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgICAgIFtvdmVybGF5LnNjYWxlLm1heF1cbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICAgICAgICBpZCB0aGF0IG1heSBiZSB1c2VkIHRvIHJlZmVyZW5jZSB0aGUgb3ZlcmxheSBmb3IgdXBkYXRlIG9yIHJlbW92YWxcbiAqL1xuT3ZlcmxheXMucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHR5cGUsIG92ZXJsYXkpIHtcblxuICBpZiAoaXNPYmplY3QodHlwZSkpIHtcbiAgICBvdmVybGF5ID0gdHlwZTtcbiAgICB0eXBlID0gbnVsbDtcbiAgfVxuXG4gIGlmICghZWxlbWVudC5pZCkge1xuICAgIGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnkuZ2V0KGVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKCFvdmVybGF5LnBvc2l0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHNwZWNpZml5IG92ZXJsYXkgcG9zaXRpb24nKTtcbiAgfVxuXG4gIGlmICghb3ZlcmxheS5odG1sKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHNwZWNpZml5IG92ZXJsYXkgaHRtbCcpO1xuICB9XG5cbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGVsZW1lbnQgc3BlY2lmaWVkJyk7XG4gIH1cblxuICB2YXIgaWQgPSB0aGlzLl9pZHMubmV4dCgpO1xuXG4gIG92ZXJsYXkgPSBhc3NpZ24oe30sIHRoaXMuX292ZXJsYXlEZWZhdWx0cywgb3ZlcmxheSwge1xuICAgIGlkOiBpZCxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgaHRtbDogb3ZlcmxheS5odG1sXG4gIH0pO1xuXG4gIHRoaXMuX2FkZE92ZXJsYXkob3ZlcmxheSk7XG5cbiAgcmV0dXJuIGlkO1xufTtcblxuXG4vKipcbiAqIFJlbW92ZSBhbiBvdmVybGF5IHdpdGggdGhlIGdpdmVuIGlkIG9yIGFsbCBvdmVybGF5cyBtYXRjaGluZyB0aGUgZ2l2ZW4gZmlsdGVyLlxuICpcbiAqIEBzZWUgT3ZlcmxheXMjZ2V0IGZvciBmaWx0ZXIgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW2lkXVxuICogQHBhcmFtIHtPYmplY3R9IFtmaWx0ZXJdXG4gKi9cbk92ZXJsYXlzLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihmaWx0ZXIpIHtcblxuICB2YXIgb3ZlcmxheXMgPSB0aGlzLmdldChmaWx0ZXIpIHx8IFtdO1xuXG4gIGlmICghaXNBcnJheShvdmVybGF5cykpIHtcbiAgICBvdmVybGF5cyA9IFsgb3ZlcmxheXMgXTtcbiAgfVxuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBmb3JFYWNoKG92ZXJsYXlzLCBmdW5jdGlvbihvdmVybGF5KSB7XG5cbiAgICB2YXIgY29udGFpbmVyID0gc2VsZi5fZ2V0T3ZlcmxheUNvbnRhaW5lcihvdmVybGF5LmVsZW1lbnQsIHRydWUpO1xuXG4gICAgaWYgKG92ZXJsYXkpIHtcbiAgICAgIGRvbVJlbW92ZShvdmVybGF5Lmh0bWwpO1xuICAgICAgZG9tUmVtb3ZlKG92ZXJsYXkuaHRtbENvbnRhaW5lcik7XG5cbiAgICAgIGRlbGV0ZSBvdmVybGF5Lmh0bWxDb250YWluZXI7XG4gICAgICBkZWxldGUgb3ZlcmxheS5lbGVtZW50O1xuXG4gICAgICBkZWxldGUgc2VsZi5fb3ZlcmxheXNbb3ZlcmxheS5pZF07XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgdmFyIGlkeCA9IGNvbnRhaW5lci5vdmVybGF5cy5pbmRleE9mKG92ZXJsYXkpO1xuICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgICAgY29udGFpbmVyLm92ZXJsYXlzLnNwbGljZShpZHgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbn07XG5cblxuT3ZlcmxheXMucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbigpIHtcbiAgc2V0VmlzaWJsZSh0aGlzLl9vdmVybGF5Um9vdCk7XG59O1xuXG5cbk92ZXJsYXlzLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24oKSB7XG4gIHNldFZpc2libGUodGhpcy5fb3ZlcmxheVJvb3QsIGZhbHNlKTtcbn07XG5cbk92ZXJsYXlzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9vdmVybGF5cyA9IHt9O1xuXG4gIHRoaXMuX292ZXJsYXlDb250YWluZXJzID0gW107XG5cbiAgZG9tQ2xlYXIodGhpcy5fb3ZlcmxheVJvb3QpO1xufTtcblxuT3ZlcmxheXMucHJvdG90eXBlLl91cGRhdGVPdmVybGF5Q29udGFpbmVyID0gZnVuY3Rpb24oY29udGFpbmVyKSB7XG4gIHZhciBlbGVtZW50ID0gY29udGFpbmVyLmVsZW1lbnQsXG4gICAgICBodG1sID0gY29udGFpbmVyLmh0bWw7XG5cbiAgLy8gdXBkYXRlIGNvbnRhaW5lciBsZWZ0LHRvcCBhY2NvcmRpbmcgdG8gdGhlIGVsZW1lbnRzIHgseSBjb29yZGluYXRlc1xuICAvLyB0aGlzIGVuc3VyZXMgd2UgY2FuIGF0dGFjaCBjaGlsZCBlbGVtZW50cyByZWxhdGl2ZSB0byB0aGlzIGNvbnRhaW5lclxuXG4gIHZhciB4ID0gZWxlbWVudC54LFxuICAgICAgeSA9IGVsZW1lbnQueTtcblxuICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcbiAgICB2YXIgYmJveCA9IGdldEJCb3goZWxlbWVudCk7XG4gICAgeCA9IGJib3gueDtcbiAgICB5ID0gYmJveC55O1xuICB9XG5cbiAgc2V0UG9zaXRpb24oaHRtbCwgeCwgeSk7XG5cbiAgZG9tQXR0cihjb250YWluZXIuaHRtbCwgJ2RhdGEtY29udGFpbmVyLWlkJywgZWxlbWVudC5pZCk7XG59O1xuXG5cbk92ZXJsYXlzLnByb3RvdHlwZS5fdXBkYXRlT3ZlcmxheSA9IGZ1bmN0aW9uKG92ZXJsYXkpIHtcblxuICB2YXIgcG9zaXRpb24gPSBvdmVybGF5LnBvc2l0aW9uLFxuICAgICAgaHRtbENvbnRhaW5lciA9IG92ZXJsYXkuaHRtbENvbnRhaW5lcixcbiAgICAgIGVsZW1lbnQgPSBvdmVybGF5LmVsZW1lbnQ7XG5cbiAgLy8gdXBkYXRlIG92ZXJsYXkgaHRtbCByZWxhdGl2ZSB0byBzaGFwZSBiZWNhdXNlXG4gIC8vIGl0IGlzIGFscmVhZHkgcG9zaXRpb25lZCBvbiB0aGUgZWxlbWVudFxuXG4gIC8vIHVwZGF0ZSByZWxhdGl2ZVxuICB2YXIgbGVmdCA9IHBvc2l0aW9uLmxlZnQsXG4gICAgICB0b3AgPSBwb3NpdGlvbi50b3A7XG5cbiAgaWYgKHBvc2l0aW9uLnJpZ2h0ICE9PSB1bmRlZmluZWQpIHtcblxuICAgIHZhciB3aWR0aDtcblxuICAgIGlmIChlbGVtZW50LndheXBvaW50cykge1xuICAgICAgd2lkdGggPSBnZXRCQm94KGVsZW1lbnQpLndpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aWR0aCA9IGVsZW1lbnQud2lkdGg7XG4gICAgfVxuXG4gICAgbGVmdCA9IHBvc2l0aW9uLnJpZ2h0ICogLTEgKyB3aWR0aDtcbiAgfVxuXG4gIGlmIChwb3NpdGlvbi5ib3R0b20gIT09IHVuZGVmaW5lZCkge1xuXG4gICAgdmFyIGhlaWdodDtcblxuICAgIGlmIChlbGVtZW50LndheXBvaW50cykge1xuICAgICAgaGVpZ2h0ID0gZ2V0QkJveChlbGVtZW50KS5oZWlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlaWdodCA9IGVsZW1lbnQuaGVpZ2h0O1xuICAgIH1cblxuICAgIHRvcCA9IHBvc2l0aW9uLmJvdHRvbSAqIC0xICsgaGVpZ2h0O1xuICB9XG5cbiAgc2V0UG9zaXRpb24oaHRtbENvbnRhaW5lciwgbGVmdCB8fCAwLCB0b3AgfHwgMCk7XG59O1xuXG5cbk92ZXJsYXlzLnByb3RvdHlwZS5fY3JlYXRlT3ZlcmxheUNvbnRhaW5lciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIGh0bWwgPSBkb21pZnkoJzxkaXYgY2xhc3M9XCJkanMtb3ZlcmxheXNcIiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZVwiIC8+Jyk7XG5cbiAgdGhpcy5fb3ZlcmxheVJvb3QuYXBwZW5kQ2hpbGQoaHRtbCk7XG5cbiAgdmFyIGNvbnRhaW5lciA9IHtcbiAgICBodG1sOiBodG1sLFxuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgb3ZlcmxheXM6IFtdXG4gIH07XG5cbiAgdGhpcy5fdXBkYXRlT3ZlcmxheUNvbnRhaW5lcihjb250YWluZXIpO1xuXG4gIHRoaXMuX292ZXJsYXlDb250YWluZXJzLnB1c2goY29udGFpbmVyKTtcblxuICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuXG5PdmVybGF5cy5wcm90b3R5cGUuX3VwZGF0ZVJvb3QgPSBmdW5jdGlvbih2aWV3Ym94KSB7XG4gIHZhciBzY2FsZSA9IHZpZXdib3guc2NhbGUgfHwgMTtcblxuICB2YXIgbWF0cml4ID0gJ21hdHJpeCgnICtcbiAgW1xuICAgIHNjYWxlLFxuICAgIDAsXG4gICAgMCxcbiAgICBzY2FsZSxcbiAgICAtMSAqIHZpZXdib3gueCAqIHNjYWxlLFxuICAgIC0xICogdmlld2JveC55ICogc2NhbGVcbiAgXS5qb2luKCcsJykgK1xuICAnKSc7XG5cbiAgc2V0VHJhbnNmb3JtKHRoaXMuX292ZXJsYXlSb290LCBtYXRyaXgpO1xufTtcblxuXG5PdmVybGF5cy5wcm90b3R5cGUuX2dldE92ZXJsYXlDb250YWluZXIgPSBmdW5jdGlvbihlbGVtZW50LCByYXcpIHtcbiAgdmFyIGNvbnRhaW5lciA9IGZpbmQodGhpcy5fb3ZlcmxheUNvbnRhaW5lcnMsIGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4gYy5lbGVtZW50ID09PSBlbGVtZW50O1xuICB9KTtcblxuXG4gIGlmICghY29udGFpbmVyICYmICFyYXcpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlT3ZlcmxheUNvbnRhaW5lcihlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZXI7XG59O1xuXG5cbk92ZXJsYXlzLnByb3RvdHlwZS5fYWRkT3ZlcmxheSA9IGZ1bmN0aW9uKG92ZXJsYXkpIHtcblxuICB2YXIgaWQgPSBvdmVybGF5LmlkLFxuICAgICAgZWxlbWVudCA9IG92ZXJsYXkuZWxlbWVudCxcbiAgICAgIGh0bWwgPSBvdmVybGF5Lmh0bWwsXG4gICAgICBodG1sQ29udGFpbmVyLFxuICAgICAgb3ZlcmxheUNvbnRhaW5lcjtcblxuICAvLyB1bndyYXAganF1ZXJ5IChmb3IgdGhvc2Ugd2hvIG5lZWQgaXQpXG4gIGlmIChodG1sLmdldCAmJiBodG1sLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5qcXVlcnkpIHtcbiAgICBodG1sID0gaHRtbC5nZXQoMCk7XG4gIH1cblxuICAvLyBjcmVhdGUgcHJvcGVyIGh0bWwgZWxlbWVudHMgZnJvbVxuICAvLyBvdmVybGF5IEhUTUwgc3RyaW5nc1xuICBpZiAoaXNTdHJpbmcoaHRtbCkpIHtcbiAgICBodG1sID0gZG9taWZ5KGh0bWwpO1xuICB9XG5cbiAgb3ZlcmxheUNvbnRhaW5lciA9IHRoaXMuX2dldE92ZXJsYXlDb250YWluZXIoZWxlbWVudCk7XG5cbiAgaHRtbENvbnRhaW5lciA9IGRvbWlmeSgnPGRpdiBjbGFzcz1cImRqcy1vdmVybGF5XCIgZGF0YS1vdmVybGF5LWlkPVwiJyArIGlkICsgJ1wiIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlXCI+Jyk7XG5cbiAgaHRtbENvbnRhaW5lci5hcHBlbmRDaGlsZChodG1sKTtcblxuICBpZiAob3ZlcmxheS50eXBlKSB7XG4gICAgZG9tQ2xhc3NlcyhodG1sQ29udGFpbmVyKS5hZGQoJ2Rqcy1vdmVybGF5LScgKyBvdmVybGF5LnR5cGUpO1xuICB9XG5cbiAgb3ZlcmxheS5odG1sQ29udGFpbmVyID0gaHRtbENvbnRhaW5lcjtcblxuICBvdmVybGF5Q29udGFpbmVyLm92ZXJsYXlzLnB1c2gob3ZlcmxheSk7XG4gIG92ZXJsYXlDb250YWluZXIuaHRtbC5hcHBlbmRDaGlsZChodG1sQ29udGFpbmVyKTtcblxuICB0aGlzLl9vdmVybGF5c1tpZF0gPSBvdmVybGF5O1xuXG4gIHRoaXMuX3VwZGF0ZU92ZXJsYXkob3ZlcmxheSk7XG4gIHRoaXMuX3VwZGF0ZU92ZXJsYXlWaXNpYmlsdHkob3ZlcmxheSwgdGhpcy5fY2FudmFzLnZpZXdib3goKSk7XG59O1xuXG5cbk92ZXJsYXlzLnByb3RvdHlwZS5fdXBkYXRlT3ZlcmxheVZpc2liaWx0eSA9IGZ1bmN0aW9uKG92ZXJsYXksIHZpZXdib3gpIHtcbiAgdmFyIHNob3cgPSBvdmVybGF5LnNob3csXG4gICAgICBtaW5ab29tID0gc2hvdyAmJiBzaG93Lm1pblpvb20sXG4gICAgICBtYXhab29tID0gc2hvdyAmJiBzaG93Lm1heFpvb20sXG4gICAgICBodG1sQ29udGFpbmVyID0gb3ZlcmxheS5odG1sQ29udGFpbmVyLFxuICAgICAgdmlzaWJsZSA9IHRydWU7XG5cbiAgaWYgKHNob3cpIHtcbiAgICBpZiAoXG4gICAgICAoaXNEZWZpbmVkKG1pblpvb20pICYmIG1pblpvb20gPiB2aWV3Ym94LnNjYWxlKSB8fFxuICAgICAgKGlzRGVmaW5lZChtYXhab29tKSAmJiBtYXhab29tIDwgdmlld2JveC5zY2FsZSlcbiAgICApIHtcbiAgICAgIHZpc2libGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBzZXRWaXNpYmxlKGh0bWxDb250YWluZXIsIHZpc2libGUpO1xuICB9XG5cbiAgdGhpcy5fdXBkYXRlT3ZlcmxheVNjYWxlKG92ZXJsYXksIHZpZXdib3gpO1xufTtcblxuXG5PdmVybGF5cy5wcm90b3R5cGUuX3VwZGF0ZU92ZXJsYXlTY2FsZSA9IGZ1bmN0aW9uKG92ZXJsYXksIHZpZXdib3gpIHtcbiAgdmFyIHNob3VsZFNjYWxlID0gb3ZlcmxheS5zY2FsZSxcbiAgICAgIG1pblNjYWxlLFxuICAgICAgbWF4U2NhbGUsXG4gICAgICBodG1sQ29udGFpbmVyID0gb3ZlcmxheS5odG1sQ29udGFpbmVyO1xuXG4gIHZhciBzY2FsZSwgdHJhbnNmb3JtID0gJyc7XG5cbiAgaWYgKHNob3VsZFNjYWxlICE9PSB0cnVlKSB7XG5cbiAgICBpZiAoc2hvdWxkU2NhbGUgPT09IGZhbHNlKSB7XG4gICAgICBtaW5TY2FsZSA9IDE7XG4gICAgICBtYXhTY2FsZSA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pblNjYWxlID0gc2hvdWxkU2NhbGUubWluO1xuICAgICAgbWF4U2NhbGUgPSBzaG91bGRTY2FsZS5tYXg7XG4gICAgfVxuXG4gICAgaWYgKGlzRGVmaW5lZChtaW5TY2FsZSkgJiYgdmlld2JveC5zY2FsZSA8IG1pblNjYWxlKSB7XG4gICAgICBzY2FsZSA9ICgxIC8gdmlld2JveC5zY2FsZSB8fCAxKSAqIG1pblNjYWxlO1xuICAgIH1cblxuICAgIGlmIChpc0RlZmluZWQobWF4U2NhbGUpICYmIHZpZXdib3guc2NhbGUgPiBtYXhTY2FsZSkge1xuICAgICAgc2NhbGUgPSAoMSAvIHZpZXdib3guc2NhbGUgfHwgMSkgKiBtYXhTY2FsZTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNEZWZpbmVkKHNjYWxlKSkge1xuICAgIHRyYW5zZm9ybSA9ICdzY2FsZSgnICsgc2NhbGUgKyAnLCcgKyBzY2FsZSArICcpJztcbiAgfVxuXG4gIHNldFRyYW5zZm9ybShodG1sQ29udGFpbmVyLCB0cmFuc2Zvcm0pO1xufTtcblxuXG5PdmVybGF5cy5wcm90b3R5cGUuX3VwZGF0ZU92ZXJsYXlzVmlzaWJpbHR5ID0gZnVuY3Rpb24odmlld2JveCkge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBmb3JFYWNoKHRoaXMuX292ZXJsYXlzLCBmdW5jdGlvbihvdmVybGF5KSB7XG4gICAgc2VsZi5fdXBkYXRlT3ZlcmxheVZpc2liaWx0eShvdmVybGF5LCB2aWV3Ym94KTtcbiAgfSk7XG59O1xuXG5cbk92ZXJsYXlzLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuXG4gIC8vIHNjcm9sbC96b29tIGludGVncmF0aW9uXG5cbiAgZnVuY3Rpb24gdXBkYXRlVmlld2JveCh2aWV3Ym94KSB7XG4gICAgc2VsZi5fdXBkYXRlUm9vdCh2aWV3Ym94KTtcbiAgICBzZWxmLl91cGRhdGVPdmVybGF5c1Zpc2liaWx0eSh2aWV3Ym94KTtcblxuICAgIHNlbGYuc2hvdygpO1xuICB9XG5cbiAgZXZlbnRCdXMub24oJ2NhbnZhcy52aWV3Ym94LmNoYW5naW5nJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBzZWxmLmhpZGUoKTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NhbnZhcy52aWV3Ym94LmNoYW5nZWQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHVwZGF0ZVZpZXdib3goZXZlbnQudmlld2JveCk7XG4gIH0pO1xuXG5cbiAgLy8gcmVtb3ZlIGludGVncmF0aW9uXG5cbiAgZXZlbnRCdXMub24oWyAnc2hhcGUucmVtb3ZlJywgJ2Nvbm5lY3Rpb24ucmVtb3ZlJyBdLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBlLmVsZW1lbnQ7XG4gICAgdmFyIG92ZXJsYXlzID0gc2VsZi5nZXQoeyBlbGVtZW50OiBlbGVtZW50IH0pO1xuXG4gICAgZm9yRWFjaChvdmVybGF5cywgZnVuY3Rpb24obykge1xuICAgICAgc2VsZi5yZW1vdmUoby5pZCk7XG4gICAgfSk7XG5cbiAgICB2YXIgY29udGFpbmVyID0gc2VsZi5fZ2V0T3ZlcmxheUNvbnRhaW5lcihlbGVtZW50KTtcblxuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGRvbVJlbW92ZShjb250YWluZXIuaHRtbCk7XG4gICAgICB2YXIgaSA9IHNlbGYuX292ZXJsYXlDb250YWluZXJzLmluZGV4T2YoY29udGFpbmVyKTtcbiAgICAgIGlmIChpICE9PSAtMSkge1xuICAgICAgICBzZWxmLl9vdmVybGF5Q29udGFpbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuXG4gIC8vIG1vdmUgaW50ZWdyYXRpb25cblxuICBldmVudEJ1cy5vbignZWxlbWVudC5jaGFuZ2VkJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBlLmVsZW1lbnQ7XG5cbiAgICB2YXIgY29udGFpbmVyID0gc2VsZi5fZ2V0T3ZlcmxheUNvbnRhaW5lcihlbGVtZW50LCB0cnVlKTtcblxuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGZvckVhY2goY29udGFpbmVyLm92ZXJsYXlzLCBmdW5jdGlvbihvdmVybGF5KSB7XG4gICAgICAgIHNlbGYuX3VwZGF0ZU92ZXJsYXkob3ZlcmxheSk7XG4gICAgICB9KTtcblxuICAgICAgc2VsZi5fdXBkYXRlT3ZlcmxheUNvbnRhaW5lcihjb250YWluZXIpO1xuICAgIH1cbiAgfSk7XG5cblxuICAvLyBtYXJrZXIgaW50ZWdyYXRpb24sIHNpbXBseSBhZGQgdGhlbSBvbiB0aGUgb3ZlcmxheXMgYXMgY2xhc3NlcywgdG9vLlxuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50Lm1hcmtlci51cGRhdGUnLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGNvbnRhaW5lciA9IHNlbGYuX2dldE92ZXJsYXlDb250YWluZXIoZS5lbGVtZW50LCB0cnVlKTtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBkb21DbGFzc2VzKGNvbnRhaW5lci5odG1sKVtlLmFkZCA/ICdhZGQnIDogJ3JlbW92ZSddKGUubWFya2VyKTtcbiAgICB9XG4gIH0pO1xuXG5cbiAgLy8gY2xlYXIgb3ZlcmxheXMgd2l0aCBkaWFncmFtXG5cbiAgZXZlbnRCdXMub24oJ2RpYWdyYW0uY2xlYXInLCB0aGlzLmNsZWFyLCB0aGlzKTtcbn07XG5cblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGNyZWF0ZVJvb3QocGFyZW50Tm9kZSkge1xuICB2YXIgcm9vdCA9IGRvbWlmeShcbiAgICAnPGRpdiBjbGFzcz1cImRqcy1vdmVybGF5LWNvbnRhaW5lclwiIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMDsgaGVpZ2h0OiAwO1wiIC8+J1xuICApO1xuXG4gIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHJvb3QsIHBhcmVudE5vZGUuZmlyc3RDaGlsZCk7XG5cbiAgcmV0dXJuIHJvb3Q7XG59XG5cbmZ1bmN0aW9uIHNldFBvc2l0aW9uKGVsLCB4LCB5KSB7XG4gIGFzc2lnbihlbC5zdHlsZSwgeyBsZWZ0OiB4ICsgJ3B4JywgdG9wOiB5ICsgJ3B4JyB9KTtcbn1cblxuZnVuY3Rpb24gc2V0VmlzaWJsZShlbCwgdmlzaWJsZSkge1xuICBlbC5zdHlsZS5kaXNwbGF5ID0gdmlzaWJsZSA9PT0gZmFsc2UgPyAnbm9uZScgOiAnJztcbn1cblxuZnVuY3Rpb24gc2V0VHJhbnNmb3JtKGVsLCB0cmFuc2Zvcm0pIHtcblxuICBlbC5zdHlsZVsndHJhbnNmb3JtLW9yaWdpbiddID0gJ3RvcCBsZWZ0JztcblxuICBbICcnLCAnLW1zLScsICctd2Via2l0LScgXS5mb3JFYWNoKGZ1bmN0aW9uKHByZWZpeCkge1xuICAgIGVsLnN0eWxlW3ByZWZpeCArICd0cmFuc2Zvcm0nXSA9IHRyYW5zZm9ybTtcbiAgfSk7XG59IiwiaW1wb3J0IE92ZXJsYXlzIGZyb20gJy4vT3ZlcmxheXMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdvdmVybGF5cycgXSxcbiAgb3ZlcmxheXM6IFsgJ3R5cGUnLCBPdmVybGF5cyBdXG59OyIsImltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb24sXG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBkb21pZnksXG4gIHF1ZXJ5IGFzIGRvbVF1ZXJ5LFxuICBhdHRyIGFzIGRvbUF0dHIsXG4gIGNsZWFyIGFzIGRvbUNsZWFyLFxuICBjbGFzc2VzIGFzIGRvbUNsYXNzZXMsXG4gIG1hdGNoZXMgYXMgZG9tTWF0Y2hlcyxcbiAgZGVsZWdhdGUgYXMgZG9tRGVsZWdhdGUsXG4gIGV2ZW50IGFzIGRvbUV2ZW50XG59IGZyb20gJ21pbi1kb20nO1xuXG5cbnZhciBUT0dHTEVfU0VMRUNUT1IgPSAnLmRqcy1wYWxldHRlLXRvZ2dsZScsXG4gICAgRU5UUllfU0VMRUNUT1IgPSAnLmVudHJ5JyxcbiAgICBFTEVNRU5UX1NFTEVDVE9SID0gVE9HR0xFX1NFTEVDVE9SICsgJywgJyArIEVOVFJZX1NFTEVDVE9SO1xuXG52YXIgUEFMRVRURV9PUEVOX0NMUyA9ICdvcGVuJyxcbiAgICBQQUxFVFRFX1RXT19DT0xVTU5fQ0xTID0gJ3R3by1jb2x1bW4nO1xuXG52YXIgREVGQVVMVF9QUklPUklUWSA9IDEwMDA7XG5cblxuLyoqXG4gKiBBIHBhbGV0dGUgY29udGFpbmluZyBtb2RlbGluZyBlbGVtZW50cy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUGFsZXR0ZShldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBldmVudEJ1cy5vbigndG9vbC1tYW5hZ2VyLnVwZGF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHRvb2wgPSBldmVudC50b29sO1xuXG4gICAgc2VsZi51cGRhdGVUb29sSGlnaGxpZ2h0KHRvb2wpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignaTE4bi5jaGFuZ2VkJywgZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5fdXBkYXRlKCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdkaWFncmFtLmluaXQnLCBmdW5jdGlvbigpIHtcblxuICAgIHNlbGYuX2RpYWdyYW1Jbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICBzZWxmLl9yZWJ1aWxkKCk7XG4gIH0pO1xufVxuXG5QYWxldHRlLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdjYW52YXMnIF07XG5cblxuLyoqXG4gKiBSZWdpc3RlciBhIHByb3ZpZGVyIHdpdGggdGhlIHBhbGV0dGVcbiAqXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFtwcmlvcml0eT0xMDAwXVxuICogQHBhcmFtICB7UGFsZXR0ZVByb3ZpZGVyfSBwcm92aWRlclxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwYWxldHRlUHJvdmlkZXIgPSB7XG4gKiAgIGdldFBhbGV0dGVFbnRyaWVzOiBmdW5jdGlvbigpIHtcbiAqICAgICByZXR1cm4gZnVuY3Rpb24oZW50cmllcykge1xuICogICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAgLi4uZW50cmllcyxcbiAqICAgICAgICAgJ2VudHJ5LTEnOiB7XG4gKiAgICAgICAgICAgbGFiZWw6ICdNeSBFbnRyeScsXG4gKiAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpIHsgYWxlcnQoXCJJIGhhdmUgYmVlbiBjbGlja2VkIVwiKTsgfVxuICogICAgICAgICB9XG4gKiAgICAgICB9O1xuICogICAgIH1cbiAqICAgfVxuICogfTtcbiAqXG4gKiBwYWxldHRlLnJlZ2lzdGVyUHJvdmlkZXIoODAwLCBwYWxldHRlUHJvdmlkZXIpO1xuICovXG5QYWxldHRlLnByb3RvdHlwZS5yZWdpc3RlclByb3ZpZGVyID0gZnVuY3Rpb24ocHJpb3JpdHksIHByb3ZpZGVyKSB7XG4gIGlmICghcHJvdmlkZXIpIHtcbiAgICBwcm92aWRlciA9IHByaW9yaXR5O1xuICAgIHByaW9yaXR5ID0gREVGQVVMVF9QUklPUklUWTtcbiAgfVxuXG4gIHRoaXMuX2V2ZW50QnVzLm9uKCdwYWxldHRlLmdldFByb3ZpZGVycycsIHByaW9yaXR5LCBmdW5jdGlvbihldmVudCkge1xuICAgIGV2ZW50LnByb3ZpZGVycy5wdXNoKHByb3ZpZGVyKTtcbiAgfSk7XG5cbiAgdGhpcy5fcmVidWlsZCgpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhbGV0dGUgZW50cmllc1xuICpcbiAqIEByZXR1cm4ge09iamVjdDxzdHJpbmcsIFBhbGV0dGVFbnRyeURlc2NyaXB0b3I+fSBtYXAgb2YgZW50cmllc1xuICovXG5QYWxldHRlLnByb3RvdHlwZS5nZXRFbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwcm92aWRlcnMgPSB0aGlzLl9nZXRQcm92aWRlcnMoKTtcblxuICByZXR1cm4gcHJvdmlkZXJzLnJlZHVjZShhZGRQYWxldHRlRW50cmllcywge30pO1xufTtcblxuUGFsZXR0ZS5wcm90b3R5cGUuX3JlYnVpbGQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAoIXRoaXMuX2RpYWdyYW1Jbml0aWFsaXplZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwcm92aWRlcnMgPSB0aGlzLl9nZXRQcm92aWRlcnMoKTtcblxuICBpZiAoIXByb3ZpZGVycy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIXRoaXMuX2NvbnRhaW5lcikge1xuICAgIHRoaXMuX2luaXQoKTtcbiAgfVxuXG4gIHRoaXMuX3VwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBJbml0aWFsaXplXG4gKi9cblBhbGV0dGUucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIHZhciBwYXJlbnRDb250YWluZXIgPSB0aGlzLl9nZXRQYXJlbnRDb250YWluZXIoKTtcblxuICB2YXIgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyID0gZG9taWZ5KFBhbGV0dGUuSFRNTF9NQVJLVVApO1xuXG4gIHBhcmVudENvbnRhaW5lci5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuXG4gIGRvbURlbGVnYXRlLmJpbmQoY29udGFpbmVyLCBFTEVNRU5UX1NFTEVDVE9SLCAnY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIHRhcmdldCA9IGV2ZW50LmRlbGVnYXRlVGFyZ2V0O1xuXG4gICAgaWYgKGRvbU1hdGNoZXModGFyZ2V0LCBUT0dHTEVfU0VMRUNUT1IpKSB7XG4gICAgICByZXR1cm4gc2VsZi50b2dnbGUoKTtcbiAgICB9XG5cbiAgICBzZWxmLnRyaWdnZXIoJ2NsaWNrJywgZXZlbnQpO1xuICB9KTtcblxuICAvLyBwcmV2ZW50IGRyYWcgcHJvcGFnYXRpb25cbiAgZG9tRXZlbnQuYmluZChjb250YWluZXIsICdtb3VzZWRvd24nLCBmdW5jdGlvbihldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9KTtcblxuICAvLyBwcmV2ZW50IGRyYWcgcHJvcGFnYXRpb25cbiAgZG9tRGVsZWdhdGUuYmluZChjb250YWluZXIsIEVOVFJZX1NFTEVDVE9SLCAnZHJhZ3N0YXJ0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBzZWxmLnRyaWdnZXIoJ2RyYWdzdGFydCcsIGV2ZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NhbnZhcy5yZXNpemVkJywgdGhpcy5fbGF5b3V0Q2hhbmdlZCwgdGhpcyk7XG5cbiAgZXZlbnRCdXMuZmlyZSgncGFsZXR0ZS5jcmVhdGUnLCB7XG4gICAgY29udGFpbmVyOiBjb250YWluZXJcbiAgfSk7XG59O1xuXG5QYWxldHRlLnByb3RvdHlwZS5fZ2V0UHJvdmlkZXJzID0gZnVuY3Rpb24oaWQpIHtcblxuICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudEJ1cy5jcmVhdGVFdmVudCh7XG4gICAgdHlwZTogJ3BhbGV0dGUuZ2V0UHJvdmlkZXJzJyxcbiAgICBwcm92aWRlcnM6IFtdXG4gIH0pO1xuXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoZXZlbnQpO1xuXG4gIHJldHVybiBldmVudC5wcm92aWRlcnM7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBwYWxldHRlIHN0YXRlLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gW3N0YXRlXSB7IG9wZW4sIHR3b0NvbHVtbiB9XG4gKi9cblBhbGV0dGUucHJvdG90eXBlLl90b2dnbGVTdGF0ZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG5cbiAgc3RhdGUgPSBzdGF0ZSB8fCB7fTtcblxuICB2YXIgcGFyZW50ID0gdGhpcy5fZ2V0UGFyZW50Q29udGFpbmVyKCksXG4gICAgICBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXI7XG5cbiAgdmFyIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgdmFyIHR3b0NvbHVtbjtcblxuICB2YXIgY2xzID0gZG9tQ2xhc3Nlcyhjb250YWluZXIpO1xuXG4gIGlmICgndHdvQ29sdW1uJyBpbiBzdGF0ZSkge1xuICAgIHR3b0NvbHVtbiA9IHN0YXRlLnR3b0NvbHVtbjtcbiAgfSBlbHNlIHtcbiAgICB0d29Db2x1bW4gPSB0aGlzLl9uZWVkc0NvbGxhcHNlKHBhcmVudC5jbGllbnRIZWlnaHQsIHRoaXMuX2VudHJpZXMgfHwge30pO1xuICB9XG5cbiAgLy8gYWx3YXlzIHVwZGF0ZSB0d28gY29sdW1uXG4gIGNscy50b2dnbGUoUEFMRVRURV9UV09fQ09MVU1OX0NMUywgdHdvQ29sdW1uKTtcblxuICBpZiAoJ29wZW4nIGluIHN0YXRlKSB7XG4gICAgY2xzLnRvZ2dsZShQQUxFVFRFX09QRU5fQ0xTLCBzdGF0ZS5vcGVuKTtcbiAgfVxuXG4gIGV2ZW50QnVzLmZpcmUoJ3BhbGV0dGUuY2hhbmdlZCcsIHtcbiAgICB0d29Db2x1bW46IHR3b0NvbHVtbixcbiAgICBvcGVuOiB0aGlzLmlzT3BlbigpXG4gIH0pO1xufTtcblxuUGFsZXR0ZS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciBlbnRyaWVzQ29udGFpbmVyID0gZG9tUXVlcnkoJy5kanMtcGFsZXR0ZS1lbnRyaWVzJywgdGhpcy5fY29udGFpbmVyKSxcbiAgICAgIGVudHJpZXMgPSB0aGlzLl9lbnRyaWVzID0gdGhpcy5nZXRFbnRyaWVzKCk7XG5cbiAgZG9tQ2xlYXIoZW50cmllc0NvbnRhaW5lcik7XG5cbiAgZm9yRWFjaChlbnRyaWVzLCBmdW5jdGlvbihlbnRyeSwgaWQpIHtcblxuICAgIHZhciBncm91cGluZyA9IGVudHJ5Lmdyb3VwIHx8ICdkZWZhdWx0JztcblxuICAgIHZhciBjb250YWluZXIgPSBkb21RdWVyeSgnW2RhdGEtZ3JvdXA9JyArIGdyb3VwaW5nICsgJ10nLCBlbnRyaWVzQ29udGFpbmVyKTtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiZ3JvdXBcIiBkYXRhLWdyb3VwPVwiJyArIGdyb3VwaW5nICsgJ1wiPjwvZGl2PicpO1xuICAgICAgZW50cmllc0NvbnRhaW5lci5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgIH1cblxuICAgIHZhciBodG1sID0gZW50cnkuaHRtbCB8fCAoXG4gICAgICBlbnRyeS5zZXBhcmF0b3IgP1xuICAgICAgICAnPGhyIGNsYXNzPVwic2VwYXJhdG9yXCIgLz4nIDpcbiAgICAgICAgJzxkaXYgY2xhc3M9XCJlbnRyeVwiIGRyYWdnYWJsZT1cInRydWVcIj48L2Rpdj4nKTtcblxuXG4gICAgdmFyIGNvbnRyb2wgPSBkb21pZnkoaHRtbCk7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGNvbnRyb2wpO1xuXG4gICAgaWYgKCFlbnRyeS5zZXBhcmF0b3IpIHtcbiAgICAgIGRvbUF0dHIoY29udHJvbCwgJ2RhdGEtYWN0aW9uJywgaWQpO1xuXG4gICAgICBpZiAoZW50cnkudGl0bGUpIHtcbiAgICAgICAgZG9tQXR0cihjb250cm9sLCAndGl0bGUnLCBlbnRyeS50aXRsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbnRyeS5jbGFzc05hbWUpIHtcbiAgICAgICAgYWRkQ2xhc3Nlcyhjb250cm9sLCBlbnRyeS5jbGFzc05hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZW50cnkuaW1hZ2VVcmwpIHtcbiAgICAgICAgY29udHJvbC5hcHBlbmRDaGlsZChkb21pZnkoJzxpbWcgc3JjPVwiJyArIGVudHJ5LmltYWdlVXJsICsgJ1wiPicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIG9wZW4gYWZ0ZXIgdXBkYXRlXG4gIHRoaXMub3BlbigpO1xufTtcblxuXG4vKipcbiAqIFRyaWdnZXIgYW4gYWN0aW9uIGF2YWlsYWJsZSBvbiB0aGUgcGFsZXR0ZVxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gYWN0aW9uXG4gKiBAcGFyYW0gIHtFdmVudH0gZXZlbnRcbiAqL1xuUGFsZXR0ZS5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uKGFjdGlvbiwgZXZlbnQsIGF1dG9BY3RpdmF0ZSkge1xuICB2YXIgZW50cmllcyA9IHRoaXMuX2VudHJpZXMsXG4gICAgICBlbnRyeSxcbiAgICAgIGhhbmRsZXIsXG4gICAgICBvcmlnaW5hbEV2ZW50LFxuICAgICAgYnV0dG9uID0gZXZlbnQuZGVsZWdhdGVUYXJnZXQgfHwgZXZlbnQudGFyZ2V0O1xuXG4gIGlmICghYnV0dG9uKSB7XG4gICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBlbnRyeSA9IGVudHJpZXNbZG9tQXR0cihidXR0b24sICdkYXRhLWFjdGlvbicpXTtcblxuICAvLyB3aGVuIHVzZXIgY2xpY2tzIG9uIHRoZSBwYWxldHRlIGFuZCBub3Qgb24gYW4gYWN0aW9uXG4gIGlmICghZW50cnkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBoYW5kbGVyID0gZW50cnkuYWN0aW9uO1xuXG4gIG9yaWdpbmFsRXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50IHx8IGV2ZW50O1xuXG4gIC8vIHNpbXBsZSBhY3Rpb24gKHZpYSBjYWxsYmFjayBmdW5jdGlvbilcbiAgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICBpZiAoYWN0aW9uID09PSAnY2xpY2snKSB7XG4gICAgICBoYW5kbGVyKG9yaWdpbmFsRXZlbnQsIGF1dG9BY3RpdmF0ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChoYW5kbGVyW2FjdGlvbl0pIHtcbiAgICAgIGhhbmRsZXJbYWN0aW9uXShvcmlnaW5hbEV2ZW50LCBhdXRvQWN0aXZhdGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNpbGVuY2Ugb3RoZXIgYWN0aW9uc1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuUGFsZXR0ZS5wcm90b3R5cGUuX2xheW91dENoYW5nZWQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fdG9nZ2xlU3RhdGUoe30pO1xufTtcblxuLyoqXG4gKiBEbyB3ZSBuZWVkIHRvIGNvbGxhcHNlIHRvIHR3byBjb2x1bW5zP1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhdmFpbGFibGVIZWlnaHRcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbnRyaWVzXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuUGFsZXR0ZS5wcm90b3R5cGUuX25lZWRzQ29sbGFwc2UgPSBmdW5jdGlvbihhdmFpbGFibGVIZWlnaHQsIGVudHJpZXMpIHtcblxuICAvLyB0b3AgbWFyZ2luICsgYm90dG9tIHRvZ2dsZSArIGJvdHRvbSBtYXJnaW5cbiAgLy8gaW1wbGVtZW50b3JzIG11c3Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgdGhleVxuICAvLyBjaGFuZ2UgdGhlIHBhbGV0dGUgc3R5bGVzXG4gIHZhciBtYXJnaW4gPSAyMCArIDEwICsgMjA7XG5cbiAgdmFyIGVudHJpZXNIZWlnaHQgPSBPYmplY3Qua2V5cyhlbnRyaWVzKS5sZW5ndGggKiA0NjtcblxuICByZXR1cm4gYXZhaWxhYmxlSGVpZ2h0IDwgZW50cmllc0hlaWdodCArIG1hcmdpbjtcbn07XG5cbi8qKlxuICogQ2xvc2UgdGhlIHBhbGV0dGVcbiAqL1xuUGFsZXR0ZS5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcblxuICB0aGlzLl90b2dnbGVTdGF0ZSh7XG4gICAgb3BlbjogZmFsc2UsXG4gICAgdHdvQ29sdW1uOiBmYWxzZVxuICB9KTtcbn07XG5cblxuLyoqXG4gKiBPcGVuIHRoZSBwYWxldHRlXG4gKi9cblBhbGV0dGUucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fdG9nZ2xlU3RhdGUoeyBvcGVuOiB0cnVlIH0pO1xufTtcblxuXG5QYWxldHRlLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbihvcGVuKSB7XG4gIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMub3BlbigpO1xuICB9XG59O1xuXG5QYWxldHRlLnByb3RvdHlwZS5pc0FjdGl2ZVRvb2wgPSBmdW5jdGlvbih0b29sKSB7XG4gIHJldHVybiB0b29sICYmIHRoaXMuX2FjdGl2ZVRvb2wgPT09IHRvb2w7XG59O1xuXG5QYWxldHRlLnByb3RvdHlwZS51cGRhdGVUb29sSGlnaGxpZ2h0ID0gZnVuY3Rpb24obmFtZSkge1xuICB2YXIgZW50cmllc0NvbnRhaW5lcixcbiAgICAgIHRvb2xzQ29udGFpbmVyO1xuXG4gIGlmICghdGhpcy5fdG9vbHNDb250YWluZXIpIHtcbiAgICBlbnRyaWVzQ29udGFpbmVyID0gZG9tUXVlcnkoJy5kanMtcGFsZXR0ZS1lbnRyaWVzJywgdGhpcy5fY29udGFpbmVyKTtcblxuICAgIHRoaXMuX3Rvb2xzQ29udGFpbmVyID0gZG9tUXVlcnkoJ1tkYXRhLWdyb3VwPXRvb2xzXScsIGVudHJpZXNDb250YWluZXIpO1xuICB9XG5cbiAgdG9vbHNDb250YWluZXIgPSB0aGlzLl90b29sc0NvbnRhaW5lcjtcblxuICBmb3JFYWNoKHRvb2xzQ29udGFpbmVyLmNoaWxkcmVuLCBmdW5jdGlvbih0b29sKSB7XG4gICAgdmFyIGFjdGlvbk5hbWUgPSB0b29sLmdldEF0dHJpYnV0ZSgnZGF0YS1hY3Rpb24nKTtcblxuICAgIGlmICghYWN0aW9uTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0b29sQ2xhc3NlcyA9IGRvbUNsYXNzZXModG9vbCk7XG5cbiAgICBhY3Rpb25OYW1lID0gYWN0aW9uTmFtZS5yZXBsYWNlKCctdG9vbCcsICcnKTtcblxuICAgIGlmICh0b29sQ2xhc3Nlcy5jb250YWlucygnZW50cnknKSAmJiBhY3Rpb25OYW1lID09PSBuYW1lKSB7XG4gICAgICB0b29sQ2xhc3Nlcy5hZGQoJ2hpZ2hsaWdodGVkLWVudHJ5Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvb2xDbGFzc2VzLnJlbW92ZSgnaGlnaGxpZ2h0ZWQtZW50cnknKTtcbiAgICB9XG4gIH0pO1xufTtcblxuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBwYWxldHRlIGlzIG9wZW5lZC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHBhbGV0dGUub3BlbigpO1xuICpcbiAqIGlmIChwYWxldHRlLmlzT3BlbigpKSB7XG4gKiAgIC8vIHllcywgd2UgYXJlIG9wZW5cbiAqIH1cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHBhbGV0dGUgaXMgb3BlbmVkXG4gKi9cblBhbGV0dGUucHJvdG90eXBlLmlzT3BlbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZG9tQ2xhc3Nlcyh0aGlzLl9jb250YWluZXIpLmhhcyhQQUxFVFRFX09QRU5fQ0xTKTtcbn07XG5cbi8qKlxuICogR2V0IGNvbnRhaW5lciB0aGUgcGFsZXR0ZSBsaXZlcyBpbi5cbiAqXG4gKiBAcmV0dXJuIHtFbGVtZW50fVxuICovXG5QYWxldHRlLnByb3RvdHlwZS5fZ2V0UGFyZW50Q29udGFpbmVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9jYW52YXMuZ2V0Q29udGFpbmVyKCk7XG59O1xuXG5cbi8qIG1hcmt1cCBkZWZpbml0aW9uICovXG5cblBhbGV0dGUuSFRNTF9NQVJLVVAgPVxuICAnPGRpdiBjbGFzcz1cImRqcy1wYWxldHRlXCI+JyArXG4gICAgJzxkaXYgY2xhc3M9XCJkanMtcGFsZXR0ZS1lbnRyaWVzXCI+PC9kaXY+JyArXG4gICAgJzxkaXYgY2xhc3M9XCJkanMtcGFsZXR0ZS10b2dnbGVcIj48L2Rpdj4nICtcbiAgJzwvZGl2Pic7XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGFkZENsYXNzZXMoZWxlbWVudCwgY2xhc3NOYW1lcykge1xuXG4gIHZhciBjbGFzc2VzID0gZG9tQ2xhc3NlcyhlbGVtZW50KTtcblxuICB2YXIgYWN0dWFsQ2xhc3NOYW1lcyA9IGlzQXJyYXkoY2xhc3NOYW1lcykgPyBjbGFzc05hbWVzIDogY2xhc3NOYW1lcy5zcGxpdCgvXFxzKy9nKTtcbiAgYWN0dWFsQ2xhc3NOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGNscykge1xuICAgIGNsYXNzZXMuYWRkKGNscyk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRQYWxldHRlRW50cmllcyhlbnRyaWVzLCBwcm92aWRlcikge1xuXG4gIHZhciBlbnRyaWVzT3JVcGRhdGVyID0gcHJvdmlkZXIuZ2V0UGFsZXR0ZUVudHJpZXMoKTtcblxuICBpZiAoaXNGdW5jdGlvbihlbnRyaWVzT3JVcGRhdGVyKSkge1xuICAgIHJldHVybiBlbnRyaWVzT3JVcGRhdGVyKGVudHJpZXMpO1xuICB9XG5cbiAgZm9yRWFjaChlbnRyaWVzT3JVcGRhdGVyLCBmdW5jdGlvbihlbnRyeSwgaWQpIHtcbiAgICBlbnRyaWVzW2lkXSA9IGVudHJ5O1xuICB9KTtcblxuICByZXR1cm4gZW50cmllcztcbn0iLCJpbXBvcnQgUGFsZXR0ZSBmcm9tICcuL1BhbGV0dGUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdwYWxldHRlJyBdLFxuICBwYWxldHRlOiBbICd0eXBlJywgUGFsZXR0ZSBdXG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBpc0Z1bmN0aW9uLFxuICBpc0RlZmluZWQsXG4gIG9taXQsXG4gIHNpemVcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBkZWxlZ2F0ZSBhcyBkb21EZWxlZ2F0ZSxcbiAgZG9taWZ5IGFzIGRvbWlmeSxcbiAgY2xhc3NlcyBhcyBkb21DbGFzc2VzLFxuICBhdHRyIGFzIGRvbUF0dHIsXG4gIHJlbW92ZSBhcyBkb21SZW1vdmVcbn0gZnJvbSAnbWluLWRvbSc7XG5cbnZhciBEQVRBX1JFRiA9ICdkYXRhLWlkJztcblxudmFyIENMT1NFX0VWRU5UUyA9IFtcbiAgJ2NvbnRleHRQYWQuY2xvc2UnLFxuICAnY2FudmFzLnZpZXdib3guY2hhbmdpbmcnLFxuICAnY29tbWFuZFN0YWNrLmNoYW5nZWQnXG5dO1xuXG52YXIgREVGQVVMVF9QUklPUklUWSA9IDEwMDA7XG5cblxuLyoqXG4gKiBBIHBvcHVwIG1lbnUgdGhhdCBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IGEgbGlzdCBvZiBhY3Rpb25zIGFueXdoZXJlIGluIHRoZSBjYW52YXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZ1xuICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gW2NvbmZpZy5zY2FsZT17IG1pbjogMS4wLCBtYXg6IDEuNSB9XVxuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcuc2NhbGUubWluXVxuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcuc2NhbGUubWF4XVxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqXG4gKiBAY2xhc3NcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQb3B1cE1lbnUoY29uZmlnLCBldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgdmFyIHNjYWxlID0gaXNEZWZpbmVkKGNvbmZpZyAmJiBjb25maWcuc2NhbGUpID8gY29uZmlnLnNjYWxlIDoge1xuICAgIG1pbjogMSxcbiAgICBtYXg6IDEuNVxuICB9O1xuXG4gIHRoaXMuX2NvbmZpZyA9IHtcbiAgICBzY2FsZTogc2NhbGVcbiAgfTtcblxuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX3Byb3ZpZGVycyA9IHt9O1xuICB0aGlzLl9jdXJyZW50ID0ge307XG59XG5cblBvcHVwTWVudS4kaW5qZWN0ID0gW1xuICAnY29uZmlnLnBvcHVwTWVudScsXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnXG5dO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIHBvcHVwIG1lbnUgcHJvdmlkZXJcbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGlkXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByaW9yaXR5PTEwMDBdXG4gKiBAcGFyYW0gIHtPYmplY3R9IHByb3ZpZGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHBvcHVwTWVudVByb3ZpZGVyID0ge1xuICogICBnZXRQb3B1cE1lbnVFbnRyaWVzOiBmdW5jdGlvbihlbGVtZW50KSB7XG4gKiAgICAgcmV0dXJuIHtcbiAqICAgICAgICdlbnRyeS0xJzoge1xuICogICAgICAgICBsYWJlbDogJ015IEVudHJ5JyxcbiAqICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpIHsgYWxlcnQoXCJJIGhhdmUgYmVlbiBjbGlja2VkIVwiKTsgfVxuICogICAgICAgfVxuICogICAgIH1cbiAqICAgfVxuICogfTtcbiAqXG4gKiBwb3B1cE1lbnUucmVnaXN0ZXJQcm92aWRlcignbXlNZW51SUQnLCBwb3B1cE1lbnVQcm92aWRlcik7XG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUucmVnaXN0ZXJQcm92aWRlciA9IGZ1bmN0aW9uKGlkLCBwcmlvcml0eSwgcHJvdmlkZXIpIHtcbiAgaWYgKCFwcm92aWRlcikge1xuICAgIHByb3ZpZGVyID0gcHJpb3JpdHk7XG4gICAgcHJpb3JpdHkgPSBERUZBVUxUX1BSSU9SSVRZO1xuICB9XG5cbiAgdGhpcy5fZXZlbnRCdXMub24oJ3BvcHVwTWVudS5nZXRQcm92aWRlcnMuJyArIGlkLCBwcmlvcml0eSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBldmVudC5wcm92aWRlcnMucHVzaChwcm92aWRlcik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgdGhlIHBvcHVwIG1lbnUgaGFzIGVudHJpZXMuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBlbXB0eVxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbihlbGVtZW50LCBwcm92aWRlcklkKSB7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZWxlbWVudCBwYXJhbWV0ZXIgaXMgbWlzc2luZycpO1xuICB9XG5cbiAgaWYgKCFwcm92aWRlcklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm92aWRlcklkIHBhcmFtZXRlciBpcyBtaXNzaW5nJyk7XG4gIH1cblxuICB2YXIgcHJvdmlkZXJzID0gdGhpcy5fZ2V0UHJvdmlkZXJzKHByb3ZpZGVySWQpO1xuXG4gIGlmICghcHJvdmlkZXJzKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgZW50cmllcyA9IHRoaXMuX2dldEVudHJpZXMoZWxlbWVudCwgcHJvdmlkZXJzKSxcbiAgICAgIGhlYWRlckVudHJpZXMgPSB0aGlzLl9nZXRIZWFkZXJFbnRyaWVzKGVsZW1lbnQsIHByb3ZpZGVycyk7XG5cbiAgdmFyIGhhc0VudHJpZXMgPSBzaXplKGVudHJpZXMpID4gMCxcbiAgICAgIGhhc0hlYWRlckVudHJpZXMgPSBoZWFkZXJFbnRyaWVzICYmIHNpemUoaGVhZGVyRW50cmllcykgPiAwO1xuXG4gIHJldHVybiAhaGFzRW50cmllcyAmJiAhaGFzSGVhZGVyRW50cmllcztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGUgZW50cmllcyBhbmQgb3BlbiBwb3B1cCBtZW51IGF0IGdpdmVuIHBvc2l0aW9uXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0gIHtzdHJpbmd9IGlkIHByb3ZpZGVyIGlkXG4gKiBAcGFyYW0gIHtPYmplY3R9IHBvc2l0aW9uXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBwb3B1cCBtZW51IGluc3RhbmNlXG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKGVsZW1lbnQsIGlkLCBwb3NpdGlvbikge1xuXG4gIHZhciBwcm92aWRlcnMgPSB0aGlzLl9nZXRQcm92aWRlcnMoaWQpO1xuXG4gIGlmICghZWxlbWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRWxlbWVudCBpcyBtaXNzaW5nJyk7XG4gIH1cblxuICBpZiAoIXByb3ZpZGVycyB8fCAhcHJvdmlkZXJzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVnaXN0ZXJlZCBwcm92aWRlcnMgZm9yOiAnICsgaWQpO1xuICB9XG5cbiAgaWYgKCFwb3NpdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcigndGhlIHBvc2l0aW9uIGFyZ3VtZW50IGlzIG1pc3NpbmcnKTtcbiAgfVxuXG4gIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgdGhpcy5fZW1pdCgnb3BlbicpO1xuXG4gIHZhciBjdXJyZW50ID0gdGhpcy5fY3VycmVudCA9IHtcbiAgICBjbGFzc05hbWU6IGlkLFxuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgcG9zaXRpb246IHBvc2l0aW9uXG4gIH07XG5cbiAgdmFyIGVudHJpZXMgPSB0aGlzLl9nZXRFbnRyaWVzKGVsZW1lbnQsIHByb3ZpZGVycyksXG4gICAgICBoZWFkZXJFbnRyaWVzID0gdGhpcy5fZ2V0SGVhZGVyRW50cmllcyhlbGVtZW50LCBwcm92aWRlcnMpO1xuXG4gIGN1cnJlbnQuZW50cmllcyA9IGFzc2lnbih7fSwgZW50cmllcywgaGVhZGVyRW50cmllcyk7XG5cbiAgY3VycmVudC5jb250YWluZXIgPSB0aGlzLl9jcmVhdGVDb250YWluZXIoKTtcblxuICBpZiAoc2l6ZShoZWFkZXJFbnRyaWVzKSkge1xuICAgIGN1cnJlbnQuY29udGFpbmVyLmFwcGVuZENoaWxkKFxuICAgICAgdGhpcy5fY3JlYXRlRW50cmllcyhoZWFkZXJFbnRyaWVzLCAnZGpzLXBvcHVwLWhlYWRlcicpXG4gICAgKTtcbiAgfVxuXG4gIGlmIChzaXplKGVudHJpZXMpKSB7XG4gICAgY3VycmVudC5jb250YWluZXIuYXBwZW5kQ2hpbGQoXG4gICAgICB0aGlzLl9jcmVhdGVFbnRyaWVzKGVudHJpZXMsICdkanMtcG9wdXAtYm9keScpXG4gICAgKTtcbiAgfVxuXG4gIHZhciBjYW52YXMgPSB0aGlzLl9jYW52YXMsXG4gICAgICBwYXJlbnQgPSBjYW52YXMuZ2V0Q29udGFpbmVyKCk7XG5cbiAgdGhpcy5fYXR0YWNoQ29udGFpbmVyKGN1cnJlbnQuY29udGFpbmVyLCBwYXJlbnQsIHBvc2l0aW9uLmN1cnNvcik7XG4gIHRoaXMuX2JpbmRBdXRvQ2xvc2UoKTtcbn07XG5cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBwb3B1cCBtZW51IGFuZCB1bmJpbmRzIHRoZSBldmVudCBoYW5kbGVycy5cbiAqL1xuUG9wdXBNZW51LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuXG4gIGlmICghdGhpcy5pc09wZW4oKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX2VtaXQoJ2Nsb3NlJyk7XG5cbiAgdGhpcy5fdW5iaW5kQXV0b0Nsb3NlKCk7XG4gIGRvbVJlbW92ZSh0aGlzLl9jdXJyZW50LmNvbnRhaW5lcik7XG4gIHRoaXMuX2N1cnJlbnQuY29udGFpbmVyID0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYW4gb3BlbiBwb3B1cCBtZW51IGV4aXN0LlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgb3BlblxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLmlzT3BlbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gISF0aGlzLl9jdXJyZW50LmNvbnRhaW5lcjtcbn07XG5cblxuLyoqXG4gKiBUcmlnZ2VyIGFuIGFjdGlvbiBhc3NvY2lhdGVkIHdpdGggYW4gZW50cnkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG4gKlxuICogQHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBhY3Rpb24gY2FsbGJhY2ssIGlmIGFueVxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLnRyaWdnZXIgPSBmdW5jdGlvbihldmVudCkge1xuXG4gIC8vIHNpbGVuY2Ugb3RoZXIgYWN0aW9uc1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gIHZhciBlbGVtZW50ID0gZXZlbnQuZGVsZWdhdGVUYXJnZXQgfHwgZXZlbnQudGFyZ2V0LFxuICAgICAgZW50cnlJZCA9IGRvbUF0dHIoZWxlbWVudCwgREFUQV9SRUYpO1xuXG4gIHZhciBlbnRyeSA9IHRoaXMuX2dldEVudHJ5KGVudHJ5SWQpO1xuXG4gIGlmIChlbnRyeS5hY3Rpb24pIHtcbiAgICByZXR1cm4gZW50cnkuYWN0aW9uLmNhbGwobnVsbCwgZXZlbnQsIGVudHJ5KTtcbiAgfVxufTtcblxuUG9wdXBNZW51LnByb3RvdHlwZS5fZ2V0UHJvdmlkZXJzID0gZnVuY3Rpb24oaWQpIHtcblxuICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudEJ1cy5jcmVhdGVFdmVudCh7XG4gICAgdHlwZTogJ3BvcHVwTWVudS5nZXRQcm92aWRlcnMuJyArIGlkLFxuICAgIHByb3ZpZGVyczogW11cbiAgfSk7XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZShldmVudCk7XG5cbiAgcmV0dXJuIGV2ZW50LnByb3ZpZGVycztcbn07XG5cblBvcHVwTWVudS5wcm90b3R5cGUuX2dldEVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50LCBwcm92aWRlcnMpIHtcblxuICB2YXIgZW50cmllcyA9IHt9O1xuXG4gIGZvckVhY2gocHJvdmlkZXJzLCBmdW5jdGlvbihwcm92aWRlcikge1xuXG4gICAgLy8gaGFuZGxlIGxlZ2FjeSBtZXRob2RcbiAgICBpZiAoIXByb3ZpZGVyLmdldFBvcHVwTWVudUVudHJpZXMpIHtcbiAgICAgIGZvckVhY2gocHJvdmlkZXIuZ2V0RW50cmllcyhlbGVtZW50KSwgZnVuY3Rpb24oZW50cnkpIHtcbiAgICAgICAgdmFyIGlkID0gZW50cnkuaWQ7XG5cbiAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXZlcnkgZW50cnkgbXVzdCBoYXZlIHRoZSBpZCBwcm9wZXJ0eSBzZXQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVudHJpZXNbaWRdID0gb21pdChlbnRyeSwgWyAnaWQnIF0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZW50cmllc09yVXBkYXRlciA9IHByb3ZpZGVyLmdldFBvcHVwTWVudUVudHJpZXMoZWxlbWVudCk7XG5cbiAgICBpZiAoaXNGdW5jdGlvbihlbnRyaWVzT3JVcGRhdGVyKSkge1xuICAgICAgZW50cmllcyA9IGVudHJpZXNPclVwZGF0ZXIoZW50cmllcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvckVhY2goZW50cmllc09yVXBkYXRlciwgZnVuY3Rpb24oZW50cnksIGlkKSB7XG4gICAgICAgIGVudHJpZXNbaWRdID0gZW50cnk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlbnRyaWVzO1xufTtcblxuUG9wdXBNZW51LnByb3RvdHlwZS5fZ2V0SGVhZGVyRW50cmllcyA9IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3ZpZGVycykge1xuXG4gIHZhciBlbnRyaWVzID0ge307XG5cbiAgZm9yRWFjaChwcm92aWRlcnMsIGZ1bmN0aW9uKHByb3ZpZGVyKSB7XG5cbiAgICAvLyBoYW5kbGUgbGVnYWN5IG1ldGhvZFxuICAgIGlmICghcHJvdmlkZXIuZ2V0UG9wdXBNZW51SGVhZGVyRW50cmllcykge1xuICAgICAgaWYgKCFwcm92aWRlci5nZXRIZWFkZXJFbnRyaWVzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZm9yRWFjaChwcm92aWRlci5nZXRIZWFkZXJFbnRyaWVzKGVsZW1lbnQpLCBmdW5jdGlvbihlbnRyeSkge1xuICAgICAgICB2YXIgaWQgPSBlbnRyeS5pZDtcblxuICAgICAgICBpZiAoIWlkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdldmVyeSBlbnRyeSBtdXN0IGhhdmUgdGhlIGlkIHByb3BlcnR5IHNldCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgZW50cmllc1tpZF0gPSBvbWl0KGVudHJ5LCBbICdpZCcgXSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBlbnRyaWVzT3JVcGRhdGVyID0gcHJvdmlkZXIuZ2V0UG9wdXBNZW51SGVhZGVyRW50cmllcyhlbGVtZW50KTtcblxuICAgIGlmIChpc0Z1bmN0aW9uKGVudHJpZXNPclVwZGF0ZXIpKSB7XG4gICAgICBlbnRyaWVzID0gZW50cmllc09yVXBkYXRlcihlbnRyaWVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yRWFjaChlbnRyaWVzT3JVcGRhdGVyLCBmdW5jdGlvbihlbnRyeSwgaWQpIHtcbiAgICAgICAgZW50cmllc1tpZF0gPSBlbnRyeTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGVudHJpZXM7XG5cblxufTtcblxuLyoqXG4gKiBHZXRzIGFuIGVudHJ5IGluc3RhbmNlIChlaXRoZXIgZW50cnkgb3IgaGVhZGVyRW50cnkpIGJ5IGlkLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gZW50cnlJZFxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gZW50cnkgaW5zdGFuY2VcbiAqL1xuUG9wdXBNZW51LnByb3RvdHlwZS5fZ2V0RW50cnkgPSBmdW5jdGlvbihlbnRyeUlkKSB7XG5cbiAgdmFyIGVudHJ5ID0gdGhpcy5fY3VycmVudC5lbnRyaWVzW2VudHJ5SWRdO1xuXG4gIGlmICghZW50cnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VudHJ5IG5vdCBmb3VuZCcpO1xuICB9XG5cbiAgcmV0dXJuIGVudHJ5O1xufTtcblxuUG9wdXBNZW51LnByb3RvdHlwZS5fZW1pdCA9IGZ1bmN0aW9uKGV2ZW50TmFtZSkge1xuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdwb3B1cE1lbnUuJyArIGV2ZW50TmFtZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHBvcHVwIG1lbnUgY29udGFpbmVyLlxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gYSBET00gY29udGFpbmVyXG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUuX2NyZWF0ZUNvbnRhaW5lciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY29udGFpbmVyID0gZG9taWZ5KCc8ZGl2IGNsYXNzPVwiZGpzLXBvcHVwXCI+JyksXG4gICAgICBwb3NpdGlvbiA9IHRoaXMuX2N1cnJlbnQucG9zaXRpb24sXG4gICAgICBjbGFzc05hbWUgPSB0aGlzLl9jdXJyZW50LmNsYXNzTmFtZTtcblxuICBhc3NpZ24oY29udGFpbmVyLnN0eWxlLCB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgbGVmdDogcG9zaXRpb24ueCArICdweCcsXG4gICAgdG9wOiBwb3NpdGlvbi55ICsgJ3B4JyxcbiAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJ1xuICB9KTtcblxuICBkb21DbGFzc2VzKGNvbnRhaW5lcikuYWRkKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIGNvbnRhaW5lcjtcbn07XG5cblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgY29udGFpbmVyIHRvIHRoZSBET00uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRhaW5lclxuICogQHBhcmFtIHtPYmplY3R9IHBhcmVudFxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLl9hdHRhY2hDb250YWluZXIgPSBmdW5jdGlvbihjb250YWluZXIsIHBhcmVudCwgY3Vyc29yKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvLyBFdmVudCBoYW5kbGVyXG4gIGRvbURlbGVnYXRlLmJpbmQoY29udGFpbmVyLCAnLmVudHJ5JyAsJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBzZWxmLnRyaWdnZXIoZXZlbnQpO1xuICB9KTtcblxuICB0aGlzLl91cGRhdGVTY2FsZShjb250YWluZXIpO1xuXG4gIC8vIEF0dGFjaCB0byBET01cbiAgcGFyZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG5cbiAgaWYgKGN1cnNvcikge1xuICAgIHRoaXMuX2Fzc3VyZUlzSW5ib3VuZHMoY29udGFpbmVyLCBjdXJzb3IpO1xuICB9XG59O1xuXG5cbi8qKlxuICogVXBkYXRlcyBwb3B1cCBzdHlsZS50cmFuc2Zvcm0gd2l0aCByZXNwZWN0IHRvIHRoZSBjb25maWcgYW5kIHpvb20gbGV2ZWwuXG4gKlxuICogQG1ldGhvZCBfdXBkYXRlU2NhbGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGFpbmVyXG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUuX3VwZGF0ZVNjYWxlID0gZnVuY3Rpb24oY29udGFpbmVyKSB7XG4gIHZhciB6b29tID0gdGhpcy5fY2FudmFzLnpvb20oKTtcblxuICB2YXIgc2NhbGVDb25maWcgPSB0aGlzLl9jb25maWcuc2NhbGUsXG4gICAgICBtaW5TY2FsZSxcbiAgICAgIG1heFNjYWxlLFxuICAgICAgc2NhbGUgPSB6b29tO1xuXG4gIGlmIChzY2FsZUNvbmZpZyAhPT0gdHJ1ZSkge1xuXG4gICAgaWYgKHNjYWxlQ29uZmlnID09PSBmYWxzZSkge1xuICAgICAgbWluU2NhbGUgPSAxO1xuICAgICAgbWF4U2NhbGUgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBtaW5TY2FsZSA9IHNjYWxlQ29uZmlnLm1pbjtcbiAgICAgIG1heFNjYWxlID0gc2NhbGVDb25maWcubWF4O1xuICAgIH1cblxuICAgIGlmIChpc0RlZmluZWQobWluU2NhbGUpICYmIHpvb20gPCBtaW5TY2FsZSkge1xuICAgICAgc2NhbGUgPSBtaW5TY2FsZTtcbiAgICB9XG5cbiAgICBpZiAoaXNEZWZpbmVkKG1heFNjYWxlKSAmJiB6b29tID4gbWF4U2NhbGUpIHtcbiAgICAgIHNjYWxlID0gbWF4U2NhbGU7XG4gICAgfVxuXG4gIH1cblxuICBzZXRUcmFuc2Zvcm0oY29udGFpbmVyLCAnc2NhbGUoJyArIHNjYWxlICsgJyknKTtcbn07XG5cblxuLyoqXG4gKiBNYWtlIHN1cmUgdGhhdCB0aGUgbWVudSBpcyBhbHdheXMgZnVsbHkgc2hvd25cbiAqXG4gKiBAbWV0aG9kIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBjb250YWluZXJcbiAqIEBwYXJhbSAge1Bvc2l0aW9ufSBjdXJzb3Ige3gsIHl9XG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUuX2Fzc3VyZUlzSW5ib3VuZHMgPSBmdW5jdGlvbihjb250YWluZXIsIGN1cnNvcikge1xuICB2YXIgY2FudmFzID0gdGhpcy5fY2FudmFzLFxuICAgICAgY2xpZW50UmVjdCA9IGNhbnZhcy5fY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIHZhciBjb250YWluZXJYID0gY29udGFpbmVyLm9mZnNldExlZnQsXG4gICAgICBjb250YWluZXJZID0gY29udGFpbmVyLm9mZnNldFRvcCxcbiAgICAgIGNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyLnNjcm9sbFdpZHRoLFxuICAgICAgY29udGFpbmVySGVpZ2h0ID0gY29udGFpbmVyLnNjcm9sbEhlaWdodCxcbiAgICAgIG92ZXJBeGlzID0ge30sXG4gICAgICBsZWZ0LCB0b3A7XG5cbiAgdmFyIGN1cnNvclBvc2l0aW9uID0ge1xuICAgIHg6IGN1cnNvci54IC0gY2xpZW50UmVjdC5sZWZ0LFxuICAgIHk6IGN1cnNvci55IC0gY2xpZW50UmVjdC50b3BcbiAgfTtcblxuICBpZiAoY29udGFpbmVyWCArIGNvbnRhaW5lcldpZHRoID4gY2xpZW50UmVjdC53aWR0aCkge1xuICAgIG92ZXJBeGlzLnggPSB0cnVlO1xuICB9XG5cbiAgaWYgKGNvbnRhaW5lclkgKyBjb250YWluZXJIZWlnaHQgPiBjbGllbnRSZWN0LmhlaWdodCkge1xuICAgIG92ZXJBeGlzLnkgPSB0cnVlO1xuICB9XG5cbiAgaWYgKG92ZXJBeGlzLnggJiYgb3ZlckF4aXMueSkge1xuICAgIGxlZnQgPSBjdXJzb3JQb3NpdGlvbi54IC0gY29udGFpbmVyV2lkdGggKyAncHgnO1xuICAgIHRvcCA9IGN1cnNvclBvc2l0aW9uLnkgLSBjb250YWluZXJIZWlnaHQgKyAncHgnO1xuICB9IGVsc2UgaWYgKG92ZXJBeGlzLngpIHtcbiAgICBsZWZ0ID0gY3Vyc29yUG9zaXRpb24ueCAtIGNvbnRhaW5lcldpZHRoICsgJ3B4JztcbiAgICB0b3AgPSBjdXJzb3JQb3NpdGlvbi55ICsgJ3B4JztcbiAgfSBlbHNlIGlmIChvdmVyQXhpcy55ICYmIGN1cnNvclBvc2l0aW9uLnkgPCBjb250YWluZXJIZWlnaHQpIHtcbiAgICBsZWZ0ID0gY3Vyc29yUG9zaXRpb24ueCArICdweCc7XG4gICAgdG9wID0gMTAgKyAncHgnO1xuICB9IGVsc2UgaWYgKG92ZXJBeGlzLnkpIHtcbiAgICBsZWZ0ID0gY3Vyc29yUG9zaXRpb24ueCArICdweCc7XG4gICAgdG9wID0gY3Vyc29yUG9zaXRpb24ueSAtIGNvbnRhaW5lckhlaWdodCArICdweCc7XG4gIH1cblxuICBhc3NpZ24oY29udGFpbmVyLnN0eWxlLCB7IGxlZnQ6IGxlZnQsIHRvcDogdG9wIH0sIHsgdmlzaWJpbGl0eTogJ3Zpc2libGUnLCAnei1pbmRleCc6IDEwMDAgfSk7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhIGxpc3Qgb2YgZW50cmllcyBhbmQgcmV0dXJucyB0aGVtIGFzIGEgRE9NIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGVudHJpZXMgYW4gYXJyYXkgb2YgZW50cnkgb2JqZWN0c1xuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZW50cnkgY29udGFpbmVyXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBhIERPTSBjb250YWluZXJcbiAqL1xuUG9wdXBNZW51LnByb3RvdHlwZS5fY3JlYXRlRW50cmllcyA9IGZ1bmN0aW9uKGVudHJpZXMsIGNsYXNzTmFtZSkge1xuXG4gIHZhciBlbnRyaWVzQ29udGFpbmVyID0gZG9taWZ5KCc8ZGl2PicpLFxuICAgICAgc2VsZiA9IHRoaXM7XG5cbiAgZG9tQ2xhc3NlcyhlbnRyaWVzQ29udGFpbmVyKS5hZGQoY2xhc3NOYW1lKTtcblxuICBmb3JFYWNoKGVudHJpZXMsIGZ1bmN0aW9uKGVudHJ5LCBpZCkge1xuICAgIHZhciBlbnRyeUNvbnRhaW5lciA9IHNlbGYuX2NyZWF0ZUVudHJ5KGVudHJ5LCBpZCk7XG4gICAgZW50cmllc0NvbnRhaW5lci5hcHBlbmRDaGlsZChlbnRyeUNvbnRhaW5lcik7XG4gIH0pO1xuXG4gIHJldHVybiBlbnRyaWVzQ29udGFpbmVyO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBzaW5nbGUgZW50cnkgYW5kIHJldHVybnMgaXQgYXMgYSBET00gY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gZW50cnlcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IGEgRE9NIGNvbnRhaW5lclxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLl9jcmVhdGVFbnRyeSA9IGZ1bmN0aW9uKGVudHJ5LCBpZCkge1xuXG4gIHZhciBlbnRyeUNvbnRhaW5lciA9IGRvbWlmeSgnPGRpdj4nKSxcbiAgICAgIGVudHJ5Q2xhc3NlcyA9IGRvbUNsYXNzZXMoZW50cnlDb250YWluZXIpO1xuXG4gIGVudHJ5Q2xhc3Nlcy5hZGQoJ2VudHJ5Jyk7XG5cbiAgaWYgKGVudHJ5LmNsYXNzTmFtZSkge1xuICAgIGVudHJ5LmNsYXNzTmFtZS5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24oY2xhc3NOYW1lKSB7XG4gICAgICBlbnRyeUNsYXNzZXMuYWRkKGNsYXNzTmFtZSk7XG4gICAgfSk7XG4gIH1cblxuICBkb21BdHRyKGVudHJ5Q29udGFpbmVyLCBEQVRBX1JFRiwgaWQpO1xuXG4gIGlmIChlbnRyeS5sYWJlbCkge1xuICAgIHZhciBsYWJlbCA9IGRvbWlmeSgnPHNwYW4+Jyk7XG4gICAgbGFiZWwudGV4dENvbnRlbnQgPSBlbnRyeS5sYWJlbDtcbiAgICBlbnRyeUNvbnRhaW5lci5hcHBlbmRDaGlsZChsYWJlbCk7XG4gIH1cblxuICBpZiAoZW50cnkuaW1hZ2VVcmwpIHtcbiAgICBlbnRyeUNvbnRhaW5lci5hcHBlbmRDaGlsZChkb21pZnkoJzxpbWcgc3JjPVwiJyArIGVudHJ5LmltYWdlVXJsICsgJ1wiIC8+JykpO1xuICB9XG5cbiAgaWYgKGVudHJ5LmFjdGl2ZSA9PT0gdHJ1ZSkge1xuICAgIGVudHJ5Q2xhc3Nlcy5hZGQoJ2FjdGl2ZScpO1xuICB9XG5cbiAgaWYgKGVudHJ5LmRpc2FibGVkID09PSB0cnVlKSB7XG4gICAgZW50cnlDbGFzc2VzLmFkZCgnZGlzYWJsZWQnKTtcbiAgfVxuXG4gIGlmIChlbnRyeS50aXRsZSkge1xuICAgIGVudHJ5Q29udGFpbmVyLnRpdGxlID0gZW50cnkudGl0bGU7XG4gIH1cblxuICByZXR1cm4gZW50cnlDb250YWluZXI7XG59O1xuXG5cbi8qKlxuICogU2V0IHVwIGxpc3RlbmVyIHRvIGNsb3NlIHBvcHVwIGF1dG9tYXRpY2FsbHkgb24gY2VydGFpbiBldmVudHMuXG4gKi9cblBvcHVwTWVudS5wcm90b3R5cGUuX2JpbmRBdXRvQ2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fZXZlbnRCdXMub25jZShDTE9TRV9FVkVOVFMsIHRoaXMuY2xvc2UsIHRoaXMpO1xufTtcblxuXG4vKipcbiAqIFJlbW92ZSB0aGUgYXV0by1jbG9zaW5nIGxpc3RlbmVyLlxuICovXG5Qb3B1cE1lbnUucHJvdG90eXBlLl91bmJpbmRBdXRvQ2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fZXZlbnRCdXMub2ZmKENMT1NFX0VWRU5UUywgdGhpcy5jbG9zZSwgdGhpcyk7XG59O1xuXG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBzZXRUcmFuc2Zvcm0oZWxlbWVudCwgdHJhbnNmb3JtKSB7XG4gIGVsZW1lbnQuc3R5bGVbJ3RyYW5zZm9ybS1vcmlnaW4nXSA9ICd0b3AgbGVmdCc7XG5cbiAgWyAnJywgJy1tcy0nLCAnLXdlYmtpdC0nIF0uZm9yRWFjaChmdW5jdGlvbihwcmVmaXgpIHtcbiAgICBlbGVtZW50LnN0eWxlW3ByZWZpeCArICd0cmFuc2Zvcm0nXSA9IHRyYW5zZm9ybTtcbiAgfSk7XG59IiwiaW1wb3J0IFBvcHVwTWVudSBmcm9tICcuL1BvcHVwTWVudSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ3BvcHVwTWVudScgXSxcbiAgcG9wdXBNZW51OiBbICd0eXBlJywgUG9wdXBNZW51IF1cbn07XG4iLCJpbXBvcnQge1xyXG4gIGZvckVhY2hcclxufSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXHJcbiAgYXR0ciBhcyBzdmdBdHRyLFxyXG4gIGNsYXNzZXMgYXMgc3ZnQ2xhc3NlcyxcclxuICBjbG9uZSBhcyBzdmdDbG9uZSxcclxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxyXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcclxufSBmcm9tICd0aW55LXN2Zyc7XHJcblxyXG5pbXBvcnQgeyBxdWVyeSBhcyBkb21RdWVyeSB9IGZyb20gJ21pbi1kb20nO1xyXG5cclxuaW1wb3J0IHsgZ2V0VmlzdWFsIH0gZnJvbSAnLi4vLi4vdXRpbC9HcmFwaGljc1V0aWwnO1xyXG5cclxudmFyIE1BUktFUl9UWVBFUyA9IFtcclxuICAnbWFya2VyLXN0YXJ0JyxcclxuICAnbWFya2VyLW1pZCcsXHJcbiAgJ21hcmtlci1lbmQnXHJcbl07XHJcblxyXG52YXIgTk9ERVNfQ0FOX0hBVkVfTUFSS0VSID0gW1xyXG4gICdjaXJjbGUnLFxyXG4gICdlbGxpcHNlJyxcclxuICAnbGluZScsXHJcbiAgJ3BhdGgnLFxyXG4gICdwb2x5Z29uJyxcclxuICAncG9seWxpbmUnLFxyXG4gICdyZWN0J1xyXG5dO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBBZGRzIHN1cHBvcnQgZm9yIHByZXZpZXdzIG9mIG1vdmluZy9yZXNpemluZyBlbGVtZW50cy5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFByZXZpZXdTdXBwb3J0KGVsZW1lbnRSZWdpc3RyeSwgZXZlbnRCdXMsIGNhbnZhcywgc3R5bGVzKSB7XHJcbiAgdGhpcy5fZWxlbWVudFJlZ2lzdHJ5ID0gZWxlbWVudFJlZ2lzdHJ5O1xyXG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcclxuICB0aGlzLl9zdHlsZXMgPSBzdHlsZXM7XHJcblxyXG4gIHRoaXMuX2Nsb25lZE1hcmtlcnMgPSB7fTtcclxuXHJcbiAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICBldmVudEJ1cy5vbignZHJhZy5jbGVhbnVwJywgZnVuY3Rpb24oKSB7XHJcbiAgICBmb3JFYWNoKHNlbGYuX2Nsb25lZE1hcmtlcnMsIGZ1bmN0aW9uKGNsb25lZE1hcmtlcikge1xyXG4gICAgICBzdmdSZW1vdmUoY2xvbmVkTWFya2VyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHNlbGYuX2Nsb25lZE1hcmtlcnMgPSB7fTtcclxuICB9KTtcclxufVxyXG5cclxuUHJldmlld1N1cHBvcnQuJGluamVjdCA9IFtcclxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcclxuICAnZXZlbnRCdXMnLFxyXG4gICdjYW52YXMnLFxyXG4gICdzdHlsZXMnXHJcbl07XHJcblxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgZ3JhcGhpY3Mgb2YgYW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtTVkdFbGVtZW50fVxyXG4gKi9cclxuUHJldmlld1N1cHBvcnQucHJvdG90eXBlLmdldEdmeCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGVsZW1lbnQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYSBtb3ZlIHByZXZpZXcgb2YgYSBnaXZlbiBzaGFwZSB0byBhIGdpdmVuIHN2ZyBncm91cC5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGdyb3VwXHJcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gW2dmeF1cclxuICpcclxuICogQHJldHVybiB7U1ZHRWxlbWVudH0gZHJhZ2dlclxyXG4gKi9cclxuUHJldmlld1N1cHBvcnQucHJvdG90eXBlLmFkZERyYWdnZXIgPSBmdW5jdGlvbihlbGVtZW50LCBncm91cCwgZ2Z4KSB7XHJcbiAgZ2Z4ID0gZ2Z4IHx8IHRoaXMuZ2V0R2Z4KGVsZW1lbnQpO1xyXG5cclxuICB2YXIgZHJhZ2dlciA9IHN2Z0Nsb25lKGdmeCk7XHJcbiAgdmFyIGJib3ggPSBnZnguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gIHRoaXMuX2Nsb25lTWFya2VycyhnZXRWaXN1YWwoZHJhZ2dlcikpO1xyXG5cclxuICBzdmdBdHRyKGRyYWdnZXIsIHRoaXMuX3N0eWxlcy5jbHMoJ2Rqcy1kcmFnZ2VyJywgW10sIHtcclxuICAgIHg6IGJib3gudG9wLFxyXG4gICAgeTogYmJveC5sZWZ0XHJcbiAgfSkpO1xyXG5cclxuICBzdmdBcHBlbmQoZ3JvdXAsIGRyYWdnZXIpO1xyXG5cclxuICByZXR1cm4gZHJhZ2dlcjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGEgcmVzaXplIHByZXZpZXcgb2YgYSBnaXZlbiBzaGFwZSB0byBhIGdpdmVuIHN2ZyBncm91cC5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGdyb3VwXHJcbiAqXHJcbiAqIEByZXR1cm4ge1NWR0VsZW1lbnR9IGZyYW1lXHJcbiAqL1xyXG5QcmV2aWV3U3VwcG9ydC5wcm90b3R5cGUuYWRkRnJhbWUgPSBmdW5jdGlvbihzaGFwZSwgZ3JvdXApIHtcclxuXHJcbiAgdmFyIGZyYW1lID0gc3ZnQ3JlYXRlKCdyZWN0Jywge1xyXG4gICAgY2xhc3M6ICdkanMtcmVzaXplLW92ZXJsYXknLFxyXG4gICAgd2lkdGg6ICBzaGFwZS53aWR0aCxcclxuICAgIGhlaWdodDogc2hhcGUuaGVpZ2h0LFxyXG4gICAgeDogc2hhcGUueCxcclxuICAgIHk6IHNoYXBlLnlcclxuICB9KTtcclxuXHJcbiAgc3ZnQXBwZW5kKGdyb3VwLCBmcmFtZSk7XHJcblxyXG4gIHJldHVybiBmcmFtZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDbG9uZSBhbGwgbWFya2VycyByZWZlcmVuY2VkIGJ5IGEgbm9kZSBhbmQgaXRzIGNoaWxkIG5vZGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGdmeFxyXG4gKi9cclxuUHJldmlld1N1cHBvcnQucHJvdG90eXBlLl9jbG9uZU1hcmtlcnMgPSBmdW5jdGlvbihnZngpIHtcclxuICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gIGlmIChnZnguY2hpbGROb2Rlcykge1xyXG5cclxuICAgIC8vIFRPRE86IHVzZSBmb3JFYWNoIG9uY2Ugd2UgZHJvcCBQaGFudG9tSlNcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2Z4LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuXHJcbiAgICAgIC8vIHJlY3Vyc2l2ZWx5IGNsb25lIG1hcmtlcnMgb2YgY2hpbGQgbm9kZXNcclxuICAgICAgc2VsZi5fY2xvbmVNYXJrZXJzKGdmeC5jaGlsZE5vZGVzWyBpIF0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKCFjYW5IYXZlTWFya2VyKGdmeCkpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIE1BUktFUl9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uKG1hcmtlclR5cGUpIHtcclxuICAgIGlmIChzdmdBdHRyKGdmeCwgbWFya2VyVHlwZSkpIHtcclxuICAgICAgdmFyIG1hcmtlciA9IGdldE1hcmtlcihnZngsIG1hcmtlclR5cGUsIHNlbGYuX2NhbnZhcy5nZXRDb250YWluZXIoKSk7XHJcblxyXG4gICAgICBzZWxmLl9jbG9uZU1hcmtlcihnZngsIG1hcmtlciwgbWFya2VyVHlwZSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xvbmUgbWFya2VyIHJlZmVyZW5jZWQgYnkgYW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtTVkdFbGVtZW50fSBnZnhcclxuICogQHBhcmFtIHtTVkdFbGVtZW50fSBtYXJrZXJcclxuICogQHBhcmFtIHtzdHJpbmd9IG1hcmtlclR5cGVcclxuICovXHJcblByZXZpZXdTdXBwb3J0LnByb3RvdHlwZS5fY2xvbmVNYXJrZXIgPSBmdW5jdGlvbihnZngsIG1hcmtlciwgbWFya2VyVHlwZSkge1xyXG4gIHZhciBtYXJrZXJJZCA9IG1hcmtlci5pZDtcclxuXHJcbiAgdmFyIGNsb25lZE1hcmtlciA9IHRoaXMuX2Nsb25lZE1hcmtlcnNbIG1hcmtlcklkIF07XHJcblxyXG4gIGlmICghY2xvbmVkTWFya2VyKSB7XHJcbiAgICBjbG9uZWRNYXJrZXIgPSBzdmdDbG9uZShtYXJrZXIpO1xyXG5cclxuICAgIHZhciBjbG9uZWRNYXJrZXJJZCA9IG1hcmtlcklkICsgJy1jbG9uZSc7XHJcblxyXG4gICAgY2xvbmVkTWFya2VyLmlkID0gY2xvbmVkTWFya2VySWQ7XHJcblxyXG4gICAgc3ZnQ2xhc3NlcyhjbG9uZWRNYXJrZXIpXHJcbiAgICAgIC5hZGQoJ2Rqcy1kcmFnZ2VyJylcclxuICAgICAgLmFkZCgnZGpzLWRyYWdnZXItbWFya2VyJyk7XHJcblxyXG4gICAgdGhpcy5fY2xvbmVkTWFya2Vyc1sgbWFya2VySWQgXSA9IGNsb25lZE1hcmtlcjtcclxuXHJcbiAgICB2YXIgZGVmcyA9IGRvbVF1ZXJ5KCdkZWZzJywgdGhpcy5fY2FudmFzLl9zdmcpO1xyXG5cclxuICAgIGlmICghZGVmcykge1xyXG4gICAgICBkZWZzID0gc3ZnQ3JlYXRlKCdkZWZzJyk7XHJcblxyXG4gICAgICBzdmdBcHBlbmQodGhpcy5fY2FudmFzLl9zdmcsIGRlZnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHN2Z0FwcGVuZChkZWZzLCBjbG9uZWRNYXJrZXIpO1xyXG4gIH1cclxuXHJcbiAgdmFyIHJlZmVyZW5jZSA9IGlkVG9SZWZlcmVuY2UodGhpcy5fY2xvbmVkTWFya2Vyc1sgbWFya2VySWQgXS5pZCk7XHJcblxyXG4gIHN2Z0F0dHIoZ2Z4LCBtYXJrZXJUeXBlLCByZWZlcmVuY2UpO1xyXG59O1xyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcblxyXG4vKipcclxuICogR2V0IG1hcmtlciBvZiBnaXZlbiB0eXBlIHJlZmVyZW5jZWQgYnkgbm9kZS5cclxuICpcclxuICogQHBhcmFtIHtOb2RlfSBub2RlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrZXJUeXBlXHJcbiAqIEBwYXJhbSB7Tm9kZX0gW3BhcmVudE5vZGVdXHJcbiAqXHJcbiAqIEBwYXJhbSB7Tm9kZX1cclxuICovXHJcbmZ1bmN0aW9uIGdldE1hcmtlcihub2RlLCBtYXJrZXJUeXBlLCBwYXJlbnROb2RlKSB7XHJcbiAgdmFyIGlkID0gcmVmZXJlbmNlVG9JZChzdmdBdHRyKG5vZGUsIG1hcmtlclR5cGUpKTtcclxuXHJcbiAgcmV0dXJuIGRvbVF1ZXJ5KCdtYXJrZXIjJyArIGlkLCBwYXJlbnROb2RlIHx8IGRvY3VtZW50KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCBJRCBvZiBmcmFnbWVudCB3aXRoaW4gY3VycmVudCBkb2N1bWVudCBmcm9tIGl0cyBmdW5jdGlvbmFsIElSSSByZWZlcmVuY2UuXHJcbiAqIFJlZmVyZW5jZXMgbWF5IHVzZSBzaW5nbGUgb3IgZG91YmxlIHF1b3Rlcy5cclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IHJlZmVyZW5jZVxyXG4gKlxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gKi9cclxuZnVuY3Rpb24gcmVmZXJlbmNlVG9JZChyZWZlcmVuY2UpIHtcclxuICByZXR1cm4gcmVmZXJlbmNlLm1hdGNoKC91cmxcXChbJ1wiXT8jKFteJ1wiXSopWydcIl0/XFwpLylbMV07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgZnVuY3Rpb25hbCBJUkkgcmVmZXJlbmNlIGZvciBnaXZlbiBJRCBvZiBmcmFnbWVudCB3aXRoaW4gY3VycmVudCBkb2N1bWVudC5cclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IGlkXHJcbiAqXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAqL1xyXG5mdW5jdGlvbiBpZFRvUmVmZXJlbmNlKGlkKSB7XHJcbiAgcmV0dXJuICd1cmwoIycgKyBpZCArICcpJztcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrIHdldGhlciBub2RlIHR5cGUgY2FuIGhhdmUgbWFya2VyIGF0dHJpYnV0ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxyXG4gKlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbmZ1bmN0aW9uIGNhbkhhdmVNYXJrZXIobm9kZSkge1xyXG4gIHJldHVybiBOT0RFU19DQU5fSEFWRV9NQVJLRVIuaW5kZXhPZihub2RlLm5vZGVOYW1lKSAhPT0gLTE7XHJcbn0iLCJpbXBvcnQgUHJldmlld1N1cHBvcnQgZnJvbSAnLi9QcmV2aWV3U3VwcG9ydCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ3ByZXZpZXdTdXBwb3J0JyBdLFxuICBwcmV2aWV3U3VwcG9ydDogWyAndHlwZScsIFByZXZpZXdTdXBwb3J0IF1cbn07XG4iLCJpbXBvcnQge1xuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG52YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xuXG4vKipcbiAqIFNlcnZpY2UgdGhhdCBhbGxvdyByZXBsYWNpbmcgb2YgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlcGxhY2UobW9kZWxpbmcpIHtcblxuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5SZXBsYWNlLiRpbmplY3QgPSBbICdtb2RlbGluZycgXTtcblxuLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IG9sZEVsZW1lbnQgLSBFbGVtZW50IHRvIGJlIHJlcGxhY2VkXG4gKiBAcGFyYW0ge09iamVjdH0gIG5ld0VsZW1lbnREYXRhIC0gQ29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbmV3IGVsZW1lbnQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGUgdGhlIG5ldyBib3VuZHMgYW5kIHR5cGUuXG4gKiBAcGFyYW0ge09iamVjdH0gIG9wdGlvbnMgLSBDdXN0b20gb3B0aW9ucyB0aGF0IHdpbGwgYmUgYXR0YWNoZWQgdG8gdGhlIGNvbnRleHQuIEl0IGNhbiBiZSB1c2VkIHRvIGluamVjdCBkYXRhXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGlzIG5lZWRlZCBpbiB0aGUgY29tbWFuZCBjaGFpbi4gRm9yIGV4YW1wbGUgaXQgY291bGQgYmUgdXNlZCBpblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRidXMub24oJ2NvbW1hbmRTdGFjay5zaGFwZS5yZXBsYWNlLnBvc3RFeGVjdXRlJykgdG8gY2hhbmdlIHNoYXBlIGF0dHJpYnV0ZXMgYWZ0ZXJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlIGNyZWF0aW9uLlxuICovXG5SZXBsYWNlLnByb3RvdHlwZS5yZXBsYWNlRWxlbWVudCA9IGZ1bmN0aW9uKG9sZEVsZW1lbnQsIG5ld0VsZW1lbnREYXRhLCBvcHRpb25zKSB7XG5cbiAgaWYgKG9sZEVsZW1lbnQud2F5cG9pbnRzKSB7XG5cbiAgICAvLyBUT0RPKG5pa2t1KTogd2UgZG8gbm90IHJlcGxhY2UgY29ubmVjdGlvbnMsIHlldFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG5cbiAgdmFyIHdpZHRoID0gbmV3RWxlbWVudERhdGEud2lkdGggfHwgb2xkRWxlbWVudC53aWR0aCxcbiAgICAgIGhlaWdodCA9IG5ld0VsZW1lbnREYXRhLmhlaWdodCB8fCBvbGRFbGVtZW50LmhlaWdodCxcbiAgICAgIHggPSBuZXdFbGVtZW50RGF0YS54IHx8IG9sZEVsZW1lbnQueCxcbiAgICAgIHkgPSBuZXdFbGVtZW50RGF0YS55IHx8IG9sZEVsZW1lbnQueSxcbiAgICAgIGNlbnRlclggPSByb3VuZCh4ICsgd2lkdGggLyAyKSxcbiAgICAgIGNlbnRlclkgPSByb3VuZCh5ICsgaGVpZ2h0IC8gMik7XG5cbiAgLy8gbW9kZWxpbmcgQVBJIHJlcXVpcmVzIGNlbnRlciBjb29yZGluYXRlcyxcbiAgLy8gYWNjb3VudCBmb3IgdGhhdCB3aGVuIGhhbmRsaW5nIHNoYXBlIGJvdW5kc1xuXG4gIHJldHVybiBtb2RlbGluZy5yZXBsYWNlU2hhcGUoXG4gICAgb2xkRWxlbWVudCxcbiAgICBhc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIG5ld0VsZW1lbnREYXRhLFxuICAgICAge1xuICAgICAgICB4OiBjZW50ZXJYLFxuICAgICAgICB5OiBjZW50ZXJZLFxuICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgIGhlaWdodDogaGVpZ2h0XG4gICAgICB9XG4gICAgKSxcbiAgICBvcHRpb25zXG4gICk7XG59O1xuIiwiaW1wb3J0IFJlcGxhY2UgZnJvbSAnLi9SZXBsYWNlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAncmVwbGFjZScgXSxcbiAgcmVwbGFjZTogWyAndHlwZScsIFJlcGxhY2UgXVxufTsiLCJpbXBvcnQge1xuICBwaWNrLFxuICBhc3NpZ25cbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICByZXNpemVCb3VuZHMsXG4gIGVuc3VyZUNvbnN0cmFpbnRzLFxuICBjb21wdXRlQ2hpbGRyZW5CQm94LFxuICBnZXRNaW5SZXNpemVCb3VuZHNcbn0gZnJvbSAnLi9SZXNpemVVdGlsJztcblxuaW1wb3J0IHtcbiAgYXNUUkJMLFxuICBnZXRNaWQsXG4gIHJvdW5kQm91bmRzXG59IGZyb20gJy4uLy4uL2xheW91dC9MYXlvdXRVdGlsJztcblxudmFyIERFRkFVTFRfTUlOX1dJRFRIID0gMTA7XG5cblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IHByb3ZpZGVzIHJlc2l6aW5nIG9mIHNoYXBlcyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBhcmUgcGFydCBvZiBzaGFwZSByZXNpemU6XG4gKlxuICogICogYWRkaW5nIHJlc2l6ZSBoYW5kbGVzLFxuICogICogY3JlYXRpbmcgYSB2aXN1YWwgZHVyaW5nIHJlc2l6ZVxuICogICogY2hlY2tpbmcgcmVzaXplIHJ1bGVzXG4gKiAgKiBjb21taXR0aW5nIGEgY2hhbmdlIG9uY2UgZmluaXNoZWRcbiAqXG4gKlxuICogIyMgQ3VzdG9taXppbmdcbiAqXG4gKiBJdCdzIHBvc3NpYmxlIHRvIGN1c3RvbWl6ZSB0aGUgcmVzaXppbmcgYmVoYXZpb3VyIGJ5IGludGVyY2VwdGluZyAncmVzaXplLnN0YXJ0J1xuICogYW5kIHByb3ZpZGluZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgdGhyb3VnaCB0aGUgJ2NvbnRleHQnOlxuICpcbiAqICAgKiBtaW5EaW1lbnNpb25zICh7IHdpZHRoLCBoZWlnaHQgfSk6IG1pbmltdW0gc2hhcGUgZGltZW5zaW9uc1xuICpcbiAqICAgKiBjaGlsZHJlbkJveFBhZGRpbmcgKHsgbGVmdCwgdG9wLCBib3R0b20sIHJpZ2h0IH0gfHwgbnVtYmVyKTpcbiAqICAgICBnYXAgYmV0d2VlbiB0aGUgbWluaW11bSBib3VuZGluZyBib3ggYW5kIHRoZSBjb250YWluZXJcbiAqXG4gKiBmLmV4OlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGV2ZW50QnVzLm9uKCdyZXNpemUuc3RhcnQnLCAxNTAwLCBmdW5jdGlvbihldmVudCkge1xuICogICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gKlxuICogIGNvbnRleHQubWluRGltZW5zaW9ucyA9IHsgd2lkdGg6IDE0MCwgaGVpZ2h0OiAxMjAgfTtcbiAqXG4gKiAgLy8gUGFzc2luZyBnZW5lcmFsIHBhZGRpbmdcbiAqICBjb250ZXh0LmNoaWxkcmVuQm94UGFkZGluZyA9IDMwO1xuICpcbiAqICAvLyBQYXNzaW5nIHBhZGRpbmcgdG8gYSBzcGVjaWZpYyBzaWRlXG4gKiAgY29udGV4dC5jaGlsZHJlbkJveFBhZGRpbmcubGVmdCA9IDIwO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzaXplKGV2ZW50QnVzLCBydWxlcywgbW9kZWxpbmcsIGRyYWdnaW5nKSB7XG5cbiAgdGhpcy5fZHJhZ2dpbmcgPSBkcmFnZ2luZztcbiAgdGhpcy5fcnVsZXMgPSBydWxlcztcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cblxuICAvKipcbiAgICogSGFuZGxlIHJlc2l6ZSBtb3ZlIGJ5IHNwZWNpZmllZCBkZWx0YS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAgICogQHBhcmFtIHtQb2ludH0gZGVsdGFcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZU1vdmUoY29udGV4dCwgZGVsdGEpIHtcblxuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIGRpcmVjdGlvbiA9IGNvbnRleHQuZGlyZWN0aW9uLFxuICAgICAgICByZXNpemVDb25zdHJhaW50cyA9IGNvbnRleHQucmVzaXplQ29uc3RyYWludHMsXG4gICAgICAgIG5ld0JvdW5kcztcblxuICAgIGNvbnRleHQuZGVsdGEgPSBkZWx0YTtcblxuICAgIG5ld0JvdW5kcyA9IHJlc2l6ZUJvdW5kcyhzaGFwZSwgZGlyZWN0aW9uLCBkZWx0YSk7XG5cbiAgICAvLyBlbnN1cmUgY29uc3RyYWludHMgZHVyaW5nIHJlc2l6ZVxuICAgIGNvbnRleHQubmV3Qm91bmRzID0gZW5zdXJlQ29uc3RyYWludHMobmV3Qm91bmRzLCByZXNpemVDb25zdHJhaW50cyk7XG5cbiAgICAvLyB1cGRhdGUgKyBjYWNoZSBleGVjdXRhYmxlIHN0YXRlXG4gICAgY29udGV4dC5jYW5FeGVjdXRlID0gc2VsZi5jYW5SZXNpemUoY29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHJlc2l6ZSBzdGFydC5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBjb250ZXh0XG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVTdGFydChjb250ZXh0KSB7XG5cbiAgICB2YXIgcmVzaXplQ29uc3RyYWludHMgPSBjb250ZXh0LnJlc2l6ZUNvbnN0cmFpbnRzLFxuXG4gICAgICAgIC8vIGV2YWx1YXRlIG1pbkJvdW5kcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICAgICAgbWluQm91bmRzID0gY29udGV4dC5taW5Cb3VuZHM7XG5cbiAgICBpZiAocmVzaXplQ29uc3RyYWludHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChtaW5Cb3VuZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbWluQm91bmRzID0gc2VsZi5jb21wdXRlTWluUmVzaXplQm94KGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnRleHQucmVzaXplQ29uc3RyYWludHMgPSB7XG4gICAgICBtaW46IGFzVFJCTChtaW5Cb3VuZHMpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgcmVzaXplIGVuZC5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBjb250ZXh0XG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVFbmQoY29udGV4dCkge1xuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGUsXG4gICAgICAgIG5ld0JvdW5kcyA9IGNvbnRleHQubmV3Qm91bmRzO1xuXG4gICAgaWYgKGNhbkV4ZWN1dGUpIHtcblxuICAgICAgLy8gZW5zdXJlIHdlIGhhdmUgYWN0dWFsIHBpeGVsIHZhbHVlcyBmb3IgbmV3IGJvdW5kc1xuICAgICAgLy8gKGltcG9ydGFudCB3aGVuIHpvb20gbGV2ZWwgd2FzID4gMSBkdXJpbmcgbW92ZSlcbiAgICAgIG5ld0JvdW5kcyA9IHJvdW5kQm91bmRzKG5ld0JvdW5kcyk7XG5cbiAgICAgIGlmICghYm91bmRzQ2hhbmdlZChzaGFwZSwgbmV3Qm91bmRzKSkge1xuXG4gICAgICAgIC8vIG5vIHJlc2l6ZSBuZWNlc3NhcnlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBwZXJmb3JtIHRoZSBhY3R1YWwgcmVzaXplXG4gICAgICBtb2RlbGluZy5yZXNpemVTaGFwZShzaGFwZSwgbmV3Qm91bmRzKTtcbiAgICB9XG4gIH1cblxuXG4gIGV2ZW50QnVzLm9uKCdyZXNpemUuc3RhcnQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIGhhbmRsZVN0YXJ0KGV2ZW50LmNvbnRleHQpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbigncmVzaXplLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBkZWx0YSA9IHtcbiAgICAgIHg6IGV2ZW50LmR4LFxuICAgICAgeTogZXZlbnQuZHlcbiAgICB9O1xuXG4gICAgaGFuZGxlTW92ZShldmVudC5jb250ZXh0LCBkZWx0YSk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdyZXNpemUuZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBoYW5kbGVFbmQoZXZlbnQuY29udGV4dCk7XG4gIH0pO1xuXG59XG5cblxuUmVzaXplLnByb3RvdHlwZS5jYW5SZXNpemUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBydWxlcyA9IHRoaXMuX3J1bGVzO1xuXG4gIHZhciBjdHggPSBwaWNrKGNvbnRleHQsIFsgJ25ld0JvdW5kcycsICdzaGFwZScsICdkZWx0YScsICdkaXJlY3Rpb24nIF0pO1xuXG4gIHJldHVybiBydWxlcy5hbGxvd2VkKCdzaGFwZS5yZXNpemUnLCBjdHgpO1xufTtcblxuLyoqXG4gKiBBY3RpdmF0ZSBhIHJlc2l6ZSBvcGVyYXRpb24uXG4gKlxuICogWW91IG1heSBzcGVjaWZ5IGFkZGl0aW9uYWwgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBhbmQgbXVzdCBzcGVjaWZ5IGFcbiAqIHJlc2l6ZSBkaXJlY3Rpb24gZHVyaW5nIGFjdGl2YXRpb24gb2YgdGhlIHJlc2l6ZSBldmVudC5cbiAqXG4gKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50XG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5TaGFwZX0gc2hhcGVcbiAqIEBwYXJhbSB7T2JqZWN0fHN0cmluZ30gY29udGV4dE9yRGlyZWN0aW9uXG4gKi9cblJlc2l6ZS5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbihldmVudCwgc2hhcGUsIGNvbnRleHRPckRpcmVjdGlvbikge1xuICB2YXIgZHJhZ2dpbmcgPSB0aGlzLl9kcmFnZ2luZyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBkaXJlY3Rpb247XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0T3JEaXJlY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgY29udGV4dE9yRGlyZWN0aW9uID0ge1xuICAgICAgZGlyZWN0aW9uOiBjb250ZXh0T3JEaXJlY3Rpb25cbiAgICB9O1xuICB9XG5cbiAgY29udGV4dCA9IGFzc2lnbih7IHNoYXBlOiBzaGFwZSB9LCBjb250ZXh0T3JEaXJlY3Rpb24pO1xuXG4gIGRpcmVjdGlvbiA9IGNvbnRleHQuZGlyZWN0aW9uO1xuXG4gIGlmICghZGlyZWN0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHByb3ZpZGUgYSBkaXJlY3Rpb24gKG58d3xzfGV8bnd8c2V8bmV8c3cpJyk7XG4gIH1cblxuICBkcmFnZ2luZy5pbml0KGV2ZW50LCBnZXRSZWZlcmVuY2VQb2ludChzaGFwZSwgZGlyZWN0aW9uKSwgJ3Jlc2l6ZScsIHtcbiAgICBhdXRvQWN0aXZhdGU6IHRydWUsXG4gICAgY3Vyc29yOiBnZXRDdXJzb3IoZGlyZWN0aW9uKSxcbiAgICBkYXRhOiB7XG4gICAgICBzaGFwZTogc2hhcGUsXG4gICAgICBjb250ZXh0OiBjb250ZXh0XG4gICAgfVxuICB9KTtcbn07XG5cblJlc2l6ZS5wcm90b3R5cGUuY29tcHV0ZU1pblJlc2l6ZUJveCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIGRpcmVjdGlvbiA9IGNvbnRleHQuZGlyZWN0aW9uLFxuICAgICAgbWluRGltZW5zaW9ucyxcbiAgICAgIGNoaWxkcmVuQm91bmRzO1xuXG4gIG1pbkRpbWVuc2lvbnMgPSBjb250ZXh0Lm1pbkRpbWVuc2lvbnMgfHwge1xuICAgIHdpZHRoOiBERUZBVUxUX01JTl9XSURUSCxcbiAgICBoZWlnaHQ6IERFRkFVTFRfTUlOX1dJRFRIXG4gIH07XG5cbiAgLy8gZ2V0IGNoaWxkcmVuIGJvdW5kc1xuICBjaGlsZHJlbkJvdW5kcyA9IGNvbXB1dGVDaGlsZHJlbkJCb3goc2hhcGUsIGNvbnRleHQuY2hpbGRyZW5Cb3hQYWRkaW5nKTtcblxuICAvLyBnZXQgY29ycmVjdCBtaW5pbXVtIGJvdW5kcyBmcm9tIGdpdmVuIHJlc2l6ZSBkaXJlY3Rpb25cbiAgLy8gYmFzaWNhbGx5IGVuc3VyZXMgdGhhdCB0aGUgbWluQm91bmRzIGlzIG1heChjaGlsZHJlbkJvdW5kcywgbWluRGltZW5zaW9ucylcbiAgcmV0dXJuIGdldE1pblJlc2l6ZUJvdW5kcyhkaXJlY3Rpb24sIHNoYXBlLCBtaW5EaW1lbnNpb25zLCBjaGlsZHJlbkJvdW5kcyk7XG59O1xuXG5cblJlc2l6ZS4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAncnVsZXMnLFxuICAnbW9kZWxpbmcnLFxuICAnZHJhZ2dpbmcnXG5dO1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZnVuY3Rpb24gYm91bmRzQ2hhbmdlZChzaGFwZSwgbmV3Qm91bmRzKSB7XG4gIHJldHVybiBzaGFwZS54ICE9PSBuZXdCb3VuZHMueCB8fFxuICAgIHNoYXBlLnkgIT09IG5ld0JvdW5kcy55IHx8XG4gICAgc2hhcGUud2lkdGggIT09IG5ld0JvdW5kcy53aWR0aCB8fFxuICAgIHNoYXBlLmhlaWdodCAhPT0gbmV3Qm91bmRzLmhlaWdodDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlZmVyZW5jZVBvaW50KHNoYXBlLCBkaXJlY3Rpb24pIHtcbiAgdmFyIG1pZCA9IGdldE1pZChzaGFwZSksXG4gICAgICB0cmJsID0gYXNUUkJMKHNoYXBlKTtcblxuICB2YXIgcmVmZXJlbmNlUG9pbnQgPSB7XG4gICAgeDogbWlkLngsXG4gICAgeTogbWlkLnlcbiAgfTtcblxuICBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ24nKSAhPT0gLTEpIHtcbiAgICByZWZlcmVuY2VQb2ludC55ID0gdHJibC50b3A7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ3MnKSAhPT0gLTEpIHtcbiAgICByZWZlcmVuY2VQb2ludC55ID0gdHJibC5ib3R0b207XG4gIH1cblxuICBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ2UnKSAhPT0gLTEpIHtcbiAgICByZWZlcmVuY2VQb2ludC54ID0gdHJibC5yaWdodDtcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24uaW5kZXhPZigndycpICE9PSAtMSkge1xuICAgIHJlZmVyZW5jZVBvaW50LnggPSB0cmJsLmxlZnQ7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlUG9pbnQ7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnNvcihkaXJlY3Rpb24pIHtcbiAgdmFyIHByZWZpeCA9ICdyZXNpemUtJztcblxuICBpZiAoZGlyZWN0aW9uID09PSAnbicgfHwgZGlyZWN0aW9uID09PSAncycpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJ25zJztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdlJyB8fCBkaXJlY3Rpb24gPT09ICd3Jykge1xuICAgIHJldHVybiBwcmVmaXggKyAnZXcnO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ253JyB8fCBkaXJlY3Rpb24gPT09ICdzZScpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJ253c2UnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwcmVmaXggKyAnbmVzdyc7XG4gIH1cbn0iLCJpbXBvcnQge1xuICBiaW5kLFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICBjbGFzc2VzIGFzIHN2Z0NsYXNzZXMsXG4gIGNsZWFyIGFzIHN2Z0NsZWFyLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgZXZlbnQgYXMgZG9tRXZlbnRcbn0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7XG4gIGlzUHJpbWFyeUJ1dHRvblxufSBmcm9tICcuLi8uLi91dGlsL01vdXNlJztcblxuaW1wb3J0IHtcbiAgdHJhbnNmb3JtXG59IGZyb20gJy4uLy4uL3V0aWwvU3ZnVHJhbnNmb3JtVXRpbCc7XG5cbmltcG9ydCB7IGdldFJlZmVyZW5jZVBvaW50IH0gZnJvbSAnLi9SZXNpemUnO1xuXG52YXIgSEFORExFX09GRlNFVCA9IC02LFxuICAgIEhBTkRMRV9TSVpFID0gNCxcbiAgICBIQU5ETEVfSElUX1NJWkUgPSAyMDtcblxudmFyIENMU19SRVNJWkVSID0gJ2Rqcy1yZXNpemVyJztcblxudmFyIGRpcmVjdGlvbnMgPSBbICduJywgJ3cnLCAncycsICdlJywgJ253JywgJ25lJywgJ3NlJywgJ3N3JyBdO1xuXG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVzcG9uc2libGUgZm9yIGFkZGluZyByZXNpemUgaGFuZGxlcy5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICogQHBhcmFtIHtTZWxlY3Rpb259IHNlbGVjdGlvblxuICogQHBhcmFtIHtSZXNpemV9IHJlc2l6ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXNpemVIYW5kbGVzKGV2ZW50QnVzLCBjYW52YXMsIHNlbGVjdGlvbiwgcmVzaXplKSB7XG5cbiAgdGhpcy5fcmVzaXplID0gcmVzaXplO1xuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGV2ZW50QnVzLm9uKCdzZWxlY3Rpb24uY2hhbmdlZCcsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbmV3U2VsZWN0aW9uID0gZS5uZXdTZWxlY3Rpb247XG5cbiAgICAvLyByZW1vdmUgb2xkIHNlbGVjdGlvbiBtYXJrZXJzXG4gICAgc2VsZi5yZW1vdmVSZXNpemVycygpO1xuXG4gICAgLy8gYWRkIG5ldyBzZWxlY3Rpb24gbWFya2VycyBPTkxZIGlmIHNpbmdsZSBzZWxlY3Rpb25cbiAgICBpZiAobmV3U2VsZWN0aW9uLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZm9yRWFjaChuZXdTZWxlY3Rpb24sIGJpbmQoc2VsZi5hZGRSZXNpemVyLCBzZWxmKSk7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignc2hhcGUuY2hhbmdlZCcsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgc2hhcGUgPSBlLmVsZW1lbnQ7XG5cbiAgICBpZiAoc2VsZWN0aW9uLmlzU2VsZWN0ZWQoc2hhcGUpKSB7XG4gICAgICBzZWxmLnJlbW92ZVJlc2l6ZXJzKCk7XG5cbiAgICAgIHNlbGYuYWRkUmVzaXplcihzaGFwZSk7XG4gICAgfVxuICB9KTtcbn1cblxuXG5SZXNpemVIYW5kbGVzLnByb3RvdHlwZS5tYWtlRHJhZ2dhYmxlID0gZnVuY3Rpb24oZWxlbWVudCwgZ2Z4LCBkaXJlY3Rpb24pIHtcbiAgdmFyIHJlc2l6ZSA9IHRoaXMuX3Jlc2l6ZTtcblxuICBmdW5jdGlvbiBzdGFydFJlc2l6ZShldmVudCkge1xuXG4gICAgLy8gb25seSB0cmlnZ2VyIG9uIGxlZnQgbW91c2UgYnV0dG9uXG4gICAgaWYgKGlzUHJpbWFyeUJ1dHRvbihldmVudCkpIHtcbiAgICAgIHJlc2l6ZS5hY3RpdmF0ZShldmVudCwgZWxlbWVudCwgZGlyZWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBkb21FdmVudC5iaW5kKGdmeCwgJ21vdXNlZG93bicsIHN0YXJ0UmVzaXplKTtcbiAgZG9tRXZlbnQuYmluZChnZngsICd0b3VjaHN0YXJ0Jywgc3RhcnRSZXNpemUpO1xufTtcblxuXG5SZXNpemVIYW5kbGVzLnByb3RvdHlwZS5fY3JlYXRlUmVzaXplciA9IGZ1bmN0aW9uKGVsZW1lbnQsIHgsIHksIGRpcmVjdGlvbikge1xuICB2YXIgcmVzaXplcnNQYXJlbnQgPSB0aGlzLl9nZXRSZXNpemVyc1BhcmVudCgpO1xuXG4gIHZhciBvZmZzZXQgPSBnZXRIYW5kbGVPZmZzZXQoZGlyZWN0aW9uKTtcblxuICB2YXIgZ3JvdXAgPSBzdmdDcmVhdGUoJ2cnKTtcblxuICBzdmdDbGFzc2VzKGdyb3VwKS5hZGQoQ0xTX1JFU0laRVIpO1xuICBzdmdDbGFzc2VzKGdyb3VwKS5hZGQoQ0xTX1JFU0laRVIgKyAnLScgKyBlbGVtZW50LmlkKTtcbiAgc3ZnQ2xhc3Nlcyhncm91cCkuYWRkKENMU19SRVNJWkVSICsgJy0nICsgZGlyZWN0aW9uKTtcblxuICBzdmdBcHBlbmQocmVzaXplcnNQYXJlbnQsIGdyb3VwKTtcblxuICB2YXIgdmlzdWFsID0gc3ZnQ3JlYXRlKCdyZWN0Jyk7XG5cbiAgc3ZnQXR0cih2aXN1YWwsIHtcbiAgICB4OiAtSEFORExFX1NJWkUgLyAyICsgb2Zmc2V0LngsXG4gICAgeTogLUhBTkRMRV9TSVpFIC8gMiArIG9mZnNldC55LFxuICAgIHdpZHRoOiBIQU5ETEVfU0laRSxcbiAgICBoZWlnaHQ6IEhBTkRMRV9TSVpFXG4gIH0pO1xuXG4gIHN2Z0NsYXNzZXModmlzdWFsKS5hZGQoQ0xTX1JFU0laRVIgKyAnLXZpc3VhbCcpO1xuXG4gIHN2Z0FwcGVuZChncm91cCwgdmlzdWFsKTtcblxuICB2YXIgaGl0ID0gc3ZnQ3JlYXRlKCdyZWN0Jyk7XG5cbiAgc3ZnQXR0cihoaXQsIHtcbiAgICB4OiAtSEFORExFX0hJVF9TSVpFIC8gMiArIG9mZnNldC54LFxuICAgIHk6IC1IQU5ETEVfSElUX1NJWkUgLyAyICsgb2Zmc2V0LnksXG4gICAgd2lkdGg6IEhBTkRMRV9ISVRfU0laRSxcbiAgICBoZWlnaHQ6IEhBTkRMRV9ISVRfU0laRVxuICB9KTtcblxuICBzdmdDbGFzc2VzKGhpdCkuYWRkKENMU19SRVNJWkVSICsgJy1oaXQnKTtcblxuICBzdmdBcHBlbmQoZ3JvdXAsIGhpdCk7XG5cbiAgdHJhbnNmb3JtKGdyb3VwLCB4LCB5KTtcblxuICByZXR1cm4gZ3JvdXA7XG59O1xuXG5SZXNpemVIYW5kbGVzLnByb3RvdHlwZS5jcmVhdGVSZXNpemVyID0gZnVuY3Rpb24oZWxlbWVudCwgZGlyZWN0aW9uKSB7XG4gIHZhciBwb2ludCA9IGdldFJlZmVyZW5jZVBvaW50KGVsZW1lbnQsIGRpcmVjdGlvbik7XG5cbiAgdmFyIHJlc2l6ZXIgPSB0aGlzLl9jcmVhdGVSZXNpemVyKGVsZW1lbnQsIHBvaW50LngsIHBvaW50LnksIGRpcmVjdGlvbik7XG5cbiAgdGhpcy5tYWtlRHJhZ2dhYmxlKGVsZW1lbnQsIHJlc2l6ZXIsIGRpcmVjdGlvbik7XG59O1xuXG4vLyByZXNpemUgaGFuZGxlcyBpbXBsZW1lbnRhdGlvbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQWRkIHJlc2l6ZXJzIGZvciBhIGdpdmVuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuU2hhcGV9IHNoYXBlXG4gKi9cblJlc2l6ZUhhbmRsZXMucHJvdG90eXBlLmFkZFJlc2l6ZXIgPSBmdW5jdGlvbihzaGFwZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIHJlc2l6ZSA9IHRoaXMuX3Jlc2l6ZTtcblxuICBpZiAoIXJlc2l6ZS5jYW5SZXNpemUoeyBzaGFwZTogc2hhcGUgfSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3JFYWNoKGRpcmVjdGlvbnMsIGZ1bmN0aW9uKGRpcmVjdGlvbikge1xuICAgIHNlbGYuY3JlYXRlUmVzaXplcihzaGFwZSwgZGlyZWN0aW9uKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgcmVzaXplcnNcbiAqL1xuUmVzaXplSGFuZGxlcy5wcm90b3R5cGUucmVtb3ZlUmVzaXplcnMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc2l6ZXJzUGFyZW50ID0gdGhpcy5fZ2V0UmVzaXplcnNQYXJlbnQoKTtcblxuICBzdmdDbGVhcihyZXNpemVyc1BhcmVudCk7XG59O1xuXG5SZXNpemVIYW5kbGVzLnByb3RvdHlwZS5fZ2V0UmVzaXplcnNQYXJlbnQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2NhbnZhcy5nZXRMYXllcigncmVzaXplcnMnKTtcbn07XG5cblJlc2l6ZUhhbmRsZXMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdzZWxlY3Rpb24nLFxuICAncmVzaXplJ1xuXTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldEhhbmRsZU9mZnNldChkaXJlY3Rpb24pIHtcbiAgdmFyIG9mZnNldCA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ2UnKSAhPT0gLTEpIHtcbiAgICBvZmZzZXQueCA9IC1IQU5ETEVfT0ZGU0VUO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCd3JykgIT09IC0xKSB7XG4gICAgb2Zmc2V0LnggPSBIQU5ETEVfT0ZGU0VUO1xuICB9XG5cbiAgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCdzJykgIT09IC0xKSB7XG4gICAgb2Zmc2V0LnkgPSAtSEFORExFX09GRlNFVDtcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24uaW5kZXhPZignbicpICE9PSAtMSkge1xuICAgIG9mZnNldC55ID0gSEFORExFX09GRlNFVDtcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQ7XG59IiwidmFyIE1BUktFUl9SRVNJWklORyA9ICdkanMtcmVzaXppbmcnLFxuICAgIE1BUktFUl9SRVNJWkVfTk9UX09LID0gJ3Jlc2l6ZS1ub3Qtb2snO1xuXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xuXG5pbXBvcnQge1xuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmUsXG4gIGNsYXNzZXMgYXMgc3ZnQ2xhc3Nlc1xufSBmcm9tICd0aW55LXN2Zyc7XG5cblxuLyoqXG4gKiBQcm92aWRlcyBwcmV2aWV3cyBmb3IgcmVzaXppbmcgc2hhcGVzIHdoZW4gcmVzaXppbmcuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7UHJldmlld1N1cHBvcnR9IHByZXZpZXdTdXBwb3J0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlc2l6ZVByZXZpZXcoZXZlbnRCdXMsIGNhbnZhcywgcHJldmlld1N1cHBvcnQpIHtcblxuICAvKipcbiAgICogVXBkYXRlIHJlc2l6ZXIgZnJhbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGVGcmFtZShjb250ZXh0KSB7XG5cbiAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBib3VuZHMgPSBjb250ZXh0Lm5ld0JvdW5kcyxcbiAgICAgICAgZnJhbWUgPSBjb250ZXh0LmZyYW1lO1xuXG4gICAgaWYgKCFmcmFtZSkge1xuICAgICAgZnJhbWUgPSBjb250ZXh0LmZyYW1lID0gcHJldmlld1N1cHBvcnQuYWRkRnJhbWUoc2hhcGUsIGNhbnZhcy5nZXREZWZhdWx0TGF5ZXIoKSk7XG5cbiAgICAgIGNhbnZhcy5hZGRNYXJrZXIoc2hhcGUsIE1BUktFUl9SRVNJWklORyk7XG4gICAgfVxuXG4gICAgaWYgKGJvdW5kcy53aWR0aCA+IDUpIHtcbiAgICAgIHN2Z0F0dHIoZnJhbWUsIHsgeDogYm91bmRzLngsIHdpZHRoOiBib3VuZHMud2lkdGggfSk7XG4gICAgfVxuXG4gICAgaWYgKGJvdW5kcy5oZWlnaHQgPiA1KSB7XG4gICAgICBzdmdBdHRyKGZyYW1lLCB7IHk6IGJvdW5kcy55LCBoZWlnaHQ6IGJvdW5kcy5oZWlnaHQgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQuY2FuRXhlY3V0ZSkge1xuICAgICAgc3ZnQ2xhc3NlcyhmcmFtZSkucmVtb3ZlKE1BUktFUl9SRVNJWkVfTk9UX09LKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3ZnQ2xhc3NlcyhmcmFtZSkuYWRkKE1BUktFUl9SRVNJWkVfTk9UX09LKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHJlc2l6ZXIgZnJhbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmVGcmFtZShjb250ZXh0KSB7XG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgZnJhbWUgPSBjb250ZXh0LmZyYW1lO1xuXG4gICAgaWYgKGZyYW1lKSB7XG4gICAgICBzdmdSZW1vdmUoY29udGV4dC5mcmFtZSk7XG4gICAgfVxuXG4gICAgY2FudmFzLnJlbW92ZU1hcmtlcihzaGFwZSwgTUFSS0VSX1JFU0laSU5HKTtcbiAgfVxuXG4gIC8vIGFkZCBhbmQgdXBkYXRlIHByZXZpZXdzXG4gIGV2ZW50QnVzLm9uKCdyZXNpemUubW92ZScsIExPV19QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB1cGRhdGVGcmFtZShldmVudC5jb250ZXh0KTtcbiAgfSk7XG5cbiAgLy8gcmVtb3ZlIHByZXZpZXdzXG4gIGV2ZW50QnVzLm9uKCdyZXNpemUuY2xlYW51cCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmVtb3ZlRnJhbWUoZXZlbnQuY29udGV4dCk7XG4gIH0pO1xuXG59XG5cblJlc2l6ZVByZXZpZXcuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcycsXG4gICdwcmV2aWV3U3VwcG9ydCdcbl07IiwiaW1wb3J0IHtcbiAgZmlsdGVyLFxuICBpc051bWJlclxufSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciBtYXggPSBNYXRoLm1heCxcbiAgICBtaW4gPSBNYXRoLm1pbjtcblxudmFyIERFRkFVTFRfQ0hJTERfQk9YX1BBRERJTkcgPSAyMDtcblxuaW1wb3J0IHtcbiAgZ2V0QkJveFxufSBmcm9tICcuLi8uLi91dGlsL0VsZW1lbnRzJztcblxuaW1wb3J0IHtcbiAgYXNUUkJMLFxuICBhc0JvdW5kc1xufSBmcm9tICcuLi8uLi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cblxuLyoqXG4gKiBTdWJzdHJhY3QgYSBUUkJMIGZyb20gYW5vdGhlclxuICpcbiAqIEBwYXJhbSAge1RSQkx9IHRyYmxBXG4gKiBAcGFyYW0gIHtUUkJMfSB0cmJsQlxuICpcbiAqIEByZXR1cm4ge1RSQkx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJhY3RUUkJMKHRyYmxBLCB0cmJsQikge1xuICByZXR1cm4ge1xuICAgIHRvcDogdHJibEEudG9wIC0gdHJibEIudG9wLFxuICAgIHJpZ2h0OiB0cmJsQS5yaWdodCAtIHRyYmxCLnJpZ2h0LFxuICAgIGJvdHRvbTogdHJibEEuYm90dG9tIC0gdHJibEIuYm90dG9tLFxuICAgIGxlZnQ6IHRyYmxBLmxlZnQgLSB0cmJsQi5sZWZ0XG4gIH07XG59XG5cbi8qKlxuICogUmVzaXplIHRoZSBnaXZlbiBib3VuZHMgYnkgdGhlIHNwZWNpZmllZCBkZWx0YSBmcm9tIGEgZ2l2ZW4gYW5jaG9yIHBvaW50LlxuICpcbiAqIEBwYXJhbSB7Qm91bmRzfSBib3VuZHMgdGhlIGJvdW5kaW5nIGJveCB0aGF0IHNob3VsZCBiZSByZXNpemVkXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0aW9uIGluIHdoaWNoIHRoZSBlbGVtZW50IGlzIHJlc2l6ZWQgKG53LCBuZSwgc2UsIHN3KVxuICogQHBhcmFtIHtQb2ludH0gZGVsdGEgb2YgdGhlIHJlc2l6ZSBvcGVyYXRpb25cbiAqXG4gKiBAcmV0dXJuIHtCb3VuZHN9IHJlc2l6ZWQgYm91bmRpbmcgYm94XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNpemVCb3VuZHMoYm91bmRzLCBkaXJlY3Rpb24sIGRlbHRhKSB7XG4gIHZhciBkeCA9IGRlbHRhLngsXG4gICAgICBkeSA9IGRlbHRhLnk7XG5cbiAgdmFyIG5ld0JvdW5kcyA9IHtcbiAgICB4OiBib3VuZHMueCxcbiAgICB5OiBib3VuZHMueSxcbiAgICB3aWR0aDogYm91bmRzLndpZHRoLFxuICAgIGhlaWdodDogYm91bmRzLmhlaWdodFxuICB9O1xuXG4gIGlmIChkaXJlY3Rpb24uaW5kZXhPZignbicpICE9PSAtMSkge1xuICAgIG5ld0JvdW5kcy55ID0gYm91bmRzLnkgKyBkeTtcbiAgICBuZXdCb3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCAtIGR5O1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCdzJykgIT09IC0xKSB7XG4gICAgbmV3Qm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgKyBkeTtcbiAgfVxuXG4gIGlmIChkaXJlY3Rpb24uaW5kZXhPZignZScpICE9PSAtMSkge1xuICAgIG5ld0JvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCArIGR4O1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCd3JykgIT09IC0xKSB7XG4gICAgbmV3Qm91bmRzLnggPSBib3VuZHMueCArIGR4O1xuICAgIG5ld0JvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCAtIGR4O1xuICB9XG5cbiAgcmV0dXJuIG5ld0JvdW5kcztcbn1cblxuXG4vKipcbiAqIFJlc2l6ZSB0aGUgZ2l2ZW4gYm91bmRzIGJ5IGFwcGx5aW5nIHRoZSBwYXNzZWRcbiAqIHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gZGVsdGEuXG4gKlxuICogQHBhcmFtIHtCb3VuZHN9IGJvdW5kc1xuICogQHBhcmFtIHtUUkJMfSB0cmJsUmVzaXplXG4gKlxuICogQHJldHVybiB7Qm91bmRzfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzaXplVFJCTChib3VuZHMsIHJlc2l6ZSkge1xuICByZXR1cm4ge1xuICAgIHg6IGJvdW5kcy54ICsgKHJlc2l6ZS5sZWZ0IHx8IDApLFxuICAgIHk6IGJvdW5kcy55ICsgKHJlc2l6ZS50b3AgfHwgMCksXG4gICAgd2lkdGg6IGJvdW5kcy53aWR0aCAtIChyZXNpemUubGVmdCB8fCAwKSArIChyZXNpemUucmlnaHQgfHwgMCksXG4gICAgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0IC0gKHJlc2l6ZS50b3AgfHwgMCkgKyAocmVzaXplLmJvdHRvbSB8fCAwKVxuICB9O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiByZWF0dGFjaFBvaW50KGJvdW5kcywgbmV3Qm91bmRzLCBwb2ludCkge1xuXG4gIHZhciBzeCA9IGJvdW5kcy53aWR0aCAvIG5ld0JvdW5kcy53aWR0aCxcbiAgICAgIHN5ID0gYm91bmRzLmhlaWdodCAvIG5ld0JvdW5kcy5oZWlnaHQ7XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBNYXRoLnJvdW5kKChuZXdCb3VuZHMueCArIG5ld0JvdW5kcy53aWR0aCAvIDIpKSAtIE1hdGguZmxvb3IoKChib3VuZHMueCArIGJvdW5kcy53aWR0aCAvIDIpIC0gcG9pbnQueCkgLyBzeCksXG4gICAgeTogTWF0aC5yb3VuZCgobmV3Qm91bmRzLnkgKyBuZXdCb3VuZHMuaGVpZ2h0IC8gMikpIC0gTWF0aC5mbG9vcigoKGJvdW5kcy55ICsgYm91bmRzLmhlaWdodCAvIDIpIC0gcG9pbnQueSkgLyBzeSlcbiAgfTtcbn1cblxuXG5mdW5jdGlvbiBhcHBseUNvbnN0cmFpbnRzKGF0dHIsIHRyYmwsIHJlc2l6ZUNvbnN0cmFpbnRzKSB7XG5cbiAgdmFyIHZhbHVlID0gdHJibFthdHRyXSxcbiAgICAgIG1pblZhbHVlID0gcmVzaXplQ29uc3RyYWludHMubWluICYmIHJlc2l6ZUNvbnN0cmFpbnRzLm1pblthdHRyXSxcbiAgICAgIG1heFZhbHVlID0gcmVzaXplQ29uc3RyYWludHMubWF4ICYmIHJlc2l6ZUNvbnN0cmFpbnRzLm1heFthdHRyXTtcblxuICBpZiAoaXNOdW1iZXIobWluVmFsdWUpKSB7XG4gICAgdmFsdWUgPSAoL3RvcHxsZWZ0Ly50ZXN0KGF0dHIpID8gbWluIDogbWF4KSh2YWx1ZSwgbWluVmFsdWUpO1xuICB9XG5cbiAgaWYgKGlzTnVtYmVyKG1heFZhbHVlKSkge1xuICAgIHZhbHVlID0gKC90b3B8bGVmdC8udGVzdChhdHRyKSA/IG1heCA6IG1pbikodmFsdWUsIG1heFZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUNvbnN0cmFpbnRzKGN1cnJlbnRCb3VuZHMsIHJlc2l6ZUNvbnN0cmFpbnRzKSB7XG5cbiAgaWYgKCFyZXNpemVDb25zdHJhaW50cykge1xuICAgIHJldHVybiBjdXJyZW50Qm91bmRzO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRUcmJsID0gYXNUUkJMKGN1cnJlbnRCb3VuZHMpO1xuXG4gIHJldHVybiBhc0JvdW5kcyh7XG4gICAgdG9wOiBhcHBseUNvbnN0cmFpbnRzKCd0b3AnLCBjdXJyZW50VHJibCwgcmVzaXplQ29uc3RyYWludHMpLFxuICAgIHJpZ2h0OiBhcHBseUNvbnN0cmFpbnRzKCdyaWdodCcsIGN1cnJlbnRUcmJsLCByZXNpemVDb25zdHJhaW50cyksXG4gICAgYm90dG9tOiBhcHBseUNvbnN0cmFpbnRzKCdib3R0b20nLCBjdXJyZW50VHJibCwgcmVzaXplQ29uc3RyYWludHMpLFxuICAgIGxlZnQ6IGFwcGx5Q29uc3RyYWludHMoJ2xlZnQnLCBjdXJyZW50VHJibCwgcmVzaXplQ29uc3RyYWludHMpXG4gIH0pO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNaW5SZXNpemVCb3VuZHMoZGlyZWN0aW9uLCBjdXJyZW50Qm91bmRzLCBtaW5EaW1lbnNpb25zLCBjaGlsZHJlbkJvdW5kcykge1xuXG4gIHZhciBjdXJyZW50Qm94ID0gYXNUUkJMKGN1cnJlbnRCb3VuZHMpO1xuXG4gIHZhciBtaW5Cb3ggPSB7XG4gICAgdG9wOiAvbi8udGVzdChkaXJlY3Rpb24pID8gY3VycmVudEJveC5ib3R0b20gLSBtaW5EaW1lbnNpb25zLmhlaWdodCA6IGN1cnJlbnRCb3gudG9wLFxuICAgIGxlZnQ6IC93Ly50ZXN0KGRpcmVjdGlvbikgPyBjdXJyZW50Qm94LnJpZ2h0IC0gbWluRGltZW5zaW9ucy53aWR0aCA6IGN1cnJlbnRCb3gubGVmdCxcbiAgICBib3R0b206IC9zLy50ZXN0KGRpcmVjdGlvbikgPyBjdXJyZW50Qm94LnRvcCArIG1pbkRpbWVuc2lvbnMuaGVpZ2h0IDogY3VycmVudEJveC5ib3R0b20sXG4gICAgcmlnaHQ6IC9lLy50ZXN0KGRpcmVjdGlvbikgPyBjdXJyZW50Qm94LmxlZnQgKyBtaW5EaW1lbnNpb25zLndpZHRoIDogY3VycmVudEJveC5yaWdodFxuICB9O1xuXG4gIHZhciBjaGlsZHJlbkJveCA9IGNoaWxkcmVuQm91bmRzID8gYXNUUkJMKGNoaWxkcmVuQm91bmRzKSA6IG1pbkJveDtcblxuICB2YXIgY29tYmluZWRCb3ggPSB7XG4gICAgdG9wOiBtaW4obWluQm94LnRvcCwgY2hpbGRyZW5Cb3gudG9wKSxcbiAgICBsZWZ0OiBtaW4obWluQm94LmxlZnQsIGNoaWxkcmVuQm94LmxlZnQpLFxuICAgIGJvdHRvbTogbWF4KG1pbkJveC5ib3R0b20sIGNoaWxkcmVuQm94LmJvdHRvbSksXG4gICAgcmlnaHQ6IG1heChtaW5Cb3gucmlnaHQsIGNoaWxkcmVuQm94LnJpZ2h0KVxuICB9O1xuXG4gIHJldHVybiBhc0JvdW5kcyhjb21iaW5lZEJveCk7XG59XG5cbmZ1bmN0aW9uIGFzUGFkZGluZyhtYXlCZVBhZGRpbmcsIGRlZmF1bHRWYWx1ZSkge1xuICBpZiAodHlwZW9mIG1heUJlUGFkZGluZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbWF5QmVQYWRkaW5nO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBERUZBVUxUX0NISUxEX0JPWF9QQURESU5HO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRQYWRkaW5nKGJib3gsIHBhZGRpbmcpIHtcbiAgdmFyIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbTtcblxuICBpZiAodHlwZW9mIHBhZGRpbmcgPT09ICdvYmplY3QnKSB7XG4gICAgbGVmdCA9IGFzUGFkZGluZyhwYWRkaW5nLmxlZnQpO1xuICAgIHJpZ2h0ID0gYXNQYWRkaW5nKHBhZGRpbmcucmlnaHQpO1xuICAgIHRvcCA9IGFzUGFkZGluZyhwYWRkaW5nLnRvcCk7XG4gICAgYm90dG9tID0gYXNQYWRkaW5nKHBhZGRpbmcuYm90dG9tKTtcbiAgfSBlbHNlIHtcbiAgICBsZWZ0ID0gcmlnaHQgPSB0b3AgPSBib3R0b20gPSBhc1BhZGRpbmcocGFkZGluZyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IGJib3gueCAtIGxlZnQsXG4gICAgeTogYmJveC55IC0gdG9wLFxuICAgIHdpZHRoOiBiYm94LndpZHRoICsgbGVmdCArIHJpZ2h0LFxuICAgIGhlaWdodDogYmJveC5oZWlnaHQgKyB0b3AgKyBib3R0b21cbiAgfTtcbn1cblxuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBlbGVtZW50IHBhcnQgb2YgdGhlIHJlc2l6ZVxuICogdGFyZ2V0cyBtaW4gYm91bmRhcnkgYm94P1xuICpcbiAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2hpY2ggZXhjbHVkZXNcbiAqIGNvbm5lY3Rpb25zIGFuZCBsYWJlbHMuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICovXG5mdW5jdGlvbiBpc0JCb3hDaGlsZChlbGVtZW50KSB7XG5cbiAgLy8gZXhjbHVkZSBjb25uZWN0aW9uc1xuICBpZiAoZWxlbWVudC53YXlwb2ludHMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBleGNsdWRlIGxhYmVsc1xuICBpZiAoZWxlbWVudC50eXBlID09PSAnbGFiZWwnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogUmV0dXJuIGNoaWxkcmVuIGJvdW5kaW5nIGNvbXB1dGVkIGZyb20gYSBzaGFwZXMgY2hpbGRyZW5cbiAqIG9yIGEgbGlzdCBvZiBwcmVmaWx0ZXJlZCBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuU2hhcGV8QXJyYXk8ZGpzLm1vZGVsLlNoYXBlPn0gc2hhcGVPckNoaWxkcmVuXG4gKiBAcGFyYW0gIHtudW1iZXJ8T2JqZWN0fSBwYWRkaW5nXG4gKlxuICogQHJldHVybiB7Qm91bmRzfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUNoaWxkcmVuQkJveChzaGFwZU9yQ2hpbGRyZW4sIHBhZGRpbmcpIHtcblxuICB2YXIgZWxlbWVudHM7XG5cbiAgLy8gY29tcHV0ZSBiYXNlZCBvbiBzaGFwZVxuICBpZiAoc2hhcGVPckNoaWxkcmVuLmxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG5cbiAgICAvLyBncmFiIGFsbCB0aGUgY2hpbGRyZW4gdGhhdCBhcmUgcGFydCBvZiB0aGVcbiAgICAvLyBwYXJlbnRzIGNoaWxkcmVuIGJveFxuICAgIGVsZW1lbnRzID0gZmlsdGVyKHNoYXBlT3JDaGlsZHJlbi5jaGlsZHJlbiwgaXNCQm94Q2hpbGQpO1xuXG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudHMgPSBzaGFwZU9yQ2hpbGRyZW47XG4gIH1cblxuICBpZiAoZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGFkZFBhZGRpbmcoZ2V0QkJveChlbGVtZW50cyksIHBhZGRpbmcpO1xuICB9XG59XG4iLCJpbXBvcnQgUnVsZXNNb2R1bGUgZnJvbSAnLi4vcnVsZXMnO1xuaW1wb3J0IERyYWdnaW5nTW9kdWxlIGZyb20gJy4uL2RyYWdnaW5nJztcbmltcG9ydCBQcmV2aWV3U3VwcG9ydE1vZHVsZSBmcm9tICcuLi9wcmV2aWV3LXN1cHBvcnQnO1xuXG5pbXBvcnQgUmVzaXplIGZyb20gJy4vUmVzaXplJztcbmltcG9ydCBSZXNpemVQcmV2aWV3IGZyb20gJy4vUmVzaXplUHJldmlldyc7XG5pbXBvcnQgUmVzaXplSGFuZGxlcyBmcm9tICcuL1Jlc2l6ZUhhbmRsZXMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgUnVsZXNNb2R1bGUsXG4gICAgRHJhZ2dpbmdNb2R1bGUsXG4gICAgUHJldmlld1N1cHBvcnRNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFtcbiAgICAncmVzaXplJyxcbiAgICAncmVzaXplUHJldmlldycsXG4gICAgJ3Jlc2l6ZUhhbmRsZXMnXG4gIF0sXG4gIHJlc2l6ZTogWyAndHlwZScsIFJlc2l6ZSBdLFxuICByZXNpemVQcmV2aWV3OiBbICd0eXBlJywgUmVzaXplUHJldmlldyBdLFxuICByZXNpemVIYW5kbGVzOiBbICd0eXBlJywgUmVzaXplSGFuZGxlcyBdXG59O1xuIiwiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICcuLi8uLi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbi8qKlxuICogQSBiYXNpYyBwcm92aWRlciB0aGF0IG1heSBiZSBleHRlbmRlZCB0byBpbXBsZW1lbnQgbW9kZWxpbmcgcnVsZXMuXG4gKlxuICogRXh0ZW5zaW9ucyBzaG91bGQgaW1wbGVtZW50IHRoZSBpbml0IG1ldGhvZCB0byBhY3R1YWxseSBhZGQgdGhlaXIgY3VzdG9tXG4gKiBtb2RlbGluZyBjaGVja3MuIENoZWNrcyBtYXkgYmUgYWRkZWQgdmlhIHRoZSAjYWRkUnVsZShhY3Rpb24sIGZuKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUnVsZVByb3ZpZGVyKGV2ZW50QnVzKSB7XG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLmluaXQoKTtcbn1cblxuUnVsZVByb3ZpZGVyLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTtcblxuaW5oZXJpdHMoUnVsZVByb3ZpZGVyLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5cbi8qKlxuICogQWRkcyBhIG1vZGVsaW5nIHJ1bGUgZm9yIHRoZSBnaXZlbiBhY3Rpb24sIGltcGxlbWVudGVkIHRocm91Z2hcbiAqIGEgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKlxuICogVGhlIGZ1bmN0aW9uIHdpbGwgcmVjZWl2ZSB0aGUgbW9kZWxpbmcgc3BlY2lmaWMgYWN0aW9uIGNvbnRleHRcbiAqIHRvIHBlcmZvcm0gaXRzIGNoZWNrLiBJdCBtdXN0IHJldHVybiBgZmFsc2VgIHRvIGRpc2FsbG93IHRoZVxuICogYWN0aW9uIGZyb20gaGFwcGVuaW5nIG9yIGB0cnVlYCB0byBhbGxvdyB0aGUgYWN0aW9uLlxuICpcbiAqIEEgcnVsZSBwcm92aWRlciBtYXkgcGFzcyBvdmVyIHRoZSBldmFsdWF0aW9uIHRvIGxvd2VyIHByaW9yaXR5XG4gKiBydWxlcyBieSByZXR1cm5pbmcgcmV0dXJuIG5vdGhpbmcgKG9yIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4pLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogUmVzaXphYmxlUnVsZXMucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHtcbiAqXG4gKiAgIFxcLyoqXG4gKiAgICAqIFJldHVybiBgdHJ1ZWAsIGBmYWxzZWAgb3Igbm90aGluZyB0byBkZW5vdGVcbiAqICAgICogX2FsbG93ZWRfLCBfbm90IGFsbG93ZWRfIGFuZCBfY29udGludWUgZXZhbHVhdGluZ18uXG4gKiAgICAqXFwvXG4gKiAgIHRoaXMuYWRkUnVsZSgnc2hhcGUucmVzaXplJywgZnVuY3Rpb24oY29udGV4dCkge1xuICpcbiAqICAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuICpcbiAqICAgICBpZiAoIWNvbnRleHQubmV3Qm91bmRzKSB7XG4gKiAgICAgICAvLyBjaGVjayBnZW5lcmFsIHJlc2l6YWJpbGl0eVxuICogICAgICAgaWYgKCFzaGFwZS5yZXNpemFibGUpIHtcbiAqICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICogICAgICAgfVxuICpcbiAqICAgICAgIC8vIG5vdCByZXR1cm5pbmcgYW55dGhpbmcgKHJlYWQ6IHVuZGVmaW5lZClcbiAqICAgICAgIC8vIHdpbGwgY29udGludWUgdGhlIGV2YWx1YXRpb24gb2Ygb3RoZXIgcnVsZXNcbiAqICAgICAgIC8vICh3aXRoIGxvd2VyIHByaW9yaXR5KVxuICogICAgICAgcmV0dXJuO1xuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAvLyBlbGVtZW50IG11c3QgaGF2ZSBtaW5pbXVtIHNpemUgb2YgMTAqMTAgcG9pbnRzXG4gKiAgICAgICByZXR1cm4gY29udGV4dC5uZXdCb3VuZHMud2lkdGggPiAxMCAmJiBjb250ZXh0Lm5ld0JvdW5kcy5oZWlnaHQgPiAxMDtcbiAqICAgICB9XG4gKiAgIH0pO1xuICogfTtcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheTxzdHJpbmc+fSBhY3Rpb25zIHRoZSBpZGVudGlmaWVyIGZvciB0aGUgbW9kZWxpbmcgYWN0aW9uIHRvIGNoZWNrXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByaW9yaXR5XSB0aGUgcHJpb3JpdHkgYXQgd2hpY2ggdGhpcyBydWxlIGlzIGJlaW5nIGFwcGxpZWRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIHRoZSBhY3R1YWwgY2hlY2tcbiAqL1xuUnVsZVByb3ZpZGVyLnByb3RvdHlwZS5hZGRSdWxlID0gZnVuY3Rpb24oYWN0aW9ucywgcHJpb3JpdHksIGZuKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGlmICh0eXBlb2YgYWN0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBhY3Rpb25zID0gWyBhY3Rpb25zIF07XG4gIH1cblxuICBhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oYWN0aW9uKSB7XG5cbiAgICBzZWxmLmNhbkV4ZWN1dGUoYWN0aW9uLCBwcmlvcml0eSwgZnVuY3Rpb24oY29udGV4dCwgYWN0aW9uLCBldmVudCkge1xuICAgICAgcmV0dXJuIGZuKGNvbnRleHQpO1xuICAgIH0sIHRydWUpO1xuICB9KTtcbn07XG5cbi8qKlxuICogSW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGFkZCBuZXcgcnVsZXMgZHVyaW5nIHByb3ZpZGVyIGluaXRpYWxpemF0aW9uLlxuICovXG5SdWxlUHJvdmlkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHt9OyIsIi8qKlxuICogQSBzZXJ2aWNlIHRoYXQgcHJvdmlkZXMgcnVsZXMgZm9yIGNlcnRhaW4gZGlhZ3JhbSBhY3Rpb25zLlxuICpcbiAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgaG9vayBpbnRvIHRoZSB7QGxpbmsgQ29tbWFuZFN0YWNrfVxuICogdG8gcGVyZm9ybSB0aGUgYWN0dWFsIHJ1bGUgZXZhbHVhdGlvbi4gTWFrZSBzdXJlIHRvIHByb3ZpZGUgdGhlXG4gKiBgY29tbWFuZFN0YWNrYCBzZXJ2aWNlIHdpdGggdGhpcyBtb2R1bGUgaWYgeW91IHBsYW4gdG8gdXNlIGl0LlxuICpcbiAqIFRvZ2V0aGVyIHdpdGggdGhpcyBpbXBsZW1lbnRhdGlvbiB5b3UgbWF5IHVzZSB0aGUge0BsaW5rIFJ1bGVQcm92aWRlcn1cbiAqIHRvIGltcGxlbWVudCB5b3VyIG93biBydWxlIGNoZWNrZXJzLlxuICpcbiAqIFRoaXMgbW9kdWxlIGlzIG1lbnQgdG8gYmUgZWFzaWx5IHJlcGxhY2VkLCB0aHVzIHRoZSB0aW55IGZvb3QgcHJpbnQuXG4gKlxuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUnVsZXMoaW5qZWN0b3IpIHtcbiAgdGhpcy5fY29tbWFuZFN0YWNrID0gaW5qZWN0b3IuZ2V0KCdjb21tYW5kU3RhY2snLCBmYWxzZSk7XG59XG5cblJ1bGVzLiRpbmplY3QgPSBbICdpbmplY3RvcicgXTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgYSBnaXZlbiBtb2RlbGluZyBhY3Rpb24gY2FuIGJlIGV4ZWN1dGVkXG4gKiBpbiB0aGUgc3BlY2lmaWVkIGNvbnRleHQuXG4gKlxuICogVGhpcyBpbXBsZW1lbnRhdGlvbiB3aWxsIHJlc3BvbmQgd2l0aCBhbGxvdyB1bmxlc3MgYW55b25lXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24gdGhlIGFjdGlvbiB0byBiZSBjaGVja2VkXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdIHRoZSBjb250ZXh0IHRvIGNoZWNrIHRoZSBhY3Rpb24gaW5cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSByZXR1cm5zIHRydWUsIGZhbHNlIG9yIG51bGwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlXG4gKiAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gaXMgYWxsb3dlZCwgbm90IGFsbG93ZWQgb3Igc2hvdWxkIGJlIGlnbm9yZWQuXG4gKi9cblJ1bGVzLnByb3RvdHlwZS5hbGxvd2VkID0gZnVuY3Rpb24oYWN0aW9uLCBjb250ZXh0KSB7XG4gIHZhciBhbGxvd2VkID0gdHJ1ZTtcblxuICB2YXIgY29tbWFuZFN0YWNrID0gdGhpcy5fY29tbWFuZFN0YWNrO1xuXG4gIGlmIChjb21tYW5kU3RhY2spIHtcbiAgICBhbGxvd2VkID0gY29tbWFuZFN0YWNrLmNhbkV4ZWN1dGUoYWN0aW9uLCBjb250ZXh0KTtcbiAgfVxuXG4gIC8vIG1hcCB1bmRlZmluZWQgdG8gdHJ1ZSwgaS5lLiBubyBydWxlc1xuICByZXR1cm4gYWxsb3dlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGFsbG93ZWQ7XG59OyIsImltcG9ydCBSdWxlcyBmcm9tICcuL1J1bGVzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAncnVsZXMnIF0sXG4gIHJ1bGVzOiBbICd0eXBlJywgUnVsZXMgXVxufTtcbiIsImltcG9ydCB7XG4gIGNsZWFyIGFzIGRvbUNsZWFyLFxuICBkZWxlZ2F0ZSBhcyBkb21EZWxlZ2F0ZSxcbiAgcXVlcnkgYXMgZG9tUXVlcnksXG4gIGNsYXNzZXMgYXMgZG9tQ2xhc3NlcyxcbiAgYXR0ciBhcyBkb21BdHRyLFxuICBkb21pZnkgYXMgZG9taWZ5XG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICBnZXRCQm94IGFzIGdldEJvdW5kaW5nQm94XG59IGZyb20gJy4uLy4uL3V0aWwvRWxlbWVudHMnO1xuXG5pbXBvcnQge1xuICBlc2NhcGVIVE1MXG59IGZyb20gJy4uLy4uL3V0aWwvRXNjYXBlVXRpbCc7XG5cbi8qKlxuICogUHJvdmlkZXMgc2VhcmNoaW5nIGluZnJhc3RydWN0dXJlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNlYXJjaFBhZChjYW52YXMsIGV2ZW50QnVzLCBvdmVybGF5cywgc2VsZWN0aW9uKSB7XG4gIHRoaXMuX29wZW4gPSBmYWxzZTtcbiAgdGhpcy5fcmVzdWx0cyA9IFtdO1xuICB0aGlzLl9ldmVudE1hcHMgPSBbXTtcblxuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX292ZXJsYXlzID0gb3ZlcmxheXM7XG4gIHRoaXMuX3NlbGVjdGlvbiA9IHNlbGVjdGlvbjtcblxuICAvLyBzZXR1cCBlbGVtZW50c1xuICB0aGlzLl9jb250YWluZXIgPSBkb21pZnkoU2VhcmNoUGFkLkJPWF9IVE1MKTtcbiAgdGhpcy5fc2VhcmNoSW5wdXQgPSBkb21RdWVyeShTZWFyY2hQYWQuSU5QVVRfU0VMRUNUT1IsIHRoaXMuX2NvbnRhaW5lcik7XG4gIHRoaXMuX3Jlc3VsdHNDb250YWluZXIgPSBkb21RdWVyeShTZWFyY2hQYWQuUkVTVUxUU19DT05UQUlORVJfU0VMRUNUT1IsIHRoaXMuX2NvbnRhaW5lcik7XG5cbiAgLy8gYXR0YWNoIHNlYXJjaCBwYWRcbiAgdGhpcy5fY2FudmFzLmdldENvbnRhaW5lcigpLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lcik7XG5cbiAgLy8gY2xlYW51cCBvbiBkZXN0cm95XG4gIGV2ZW50QnVzLm9uKFsgJ2NhbnZhcy5kZXN0cm95JywgJ2RpYWdyYW0uZGVzdHJveScgXSwgdGhpcy5jbG9zZSwgdGhpcyk7XG59XG5cblxuU2VhcmNoUGFkLiRpbmplY3QgPSBbXG4gICdjYW52YXMnLFxuICAnZXZlbnRCdXMnLFxuICAnb3ZlcmxheXMnLFxuICAnc2VsZWN0aW9uJ1xuXTtcblxuXG4vKipcbiAqIEJpbmRzIGFuZCBrZWVwcyB0cmFjayBvZiBhbGwgZXZlbnQgbGlzdGVyZW5lcnNcbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5fYmluZEV2ZW50cyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZnVuY3Rpb24gbGlzdGVuKGVsLCBzZWxlY3RvciwgdHlwZSwgZm4pIHtcbiAgICBzZWxmLl9ldmVudE1hcHMucHVzaCh7XG4gICAgICBlbDogZWwsXG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgbGlzdGVuZXI6IGRvbURlbGVnYXRlLmJpbmQoZWwsIHNlbGVjdG9yLCB0eXBlLCBmbilcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGNsb3NlIHNlYXJjaCBvbiBjbGlja2luZyBhbnl3aGVyZSBvdXRzaWRlXG4gIGxpc3Rlbihkb2N1bWVudCwgJ2h0bWwnLCAnY2xpY2snLCBmdW5jdGlvbihlKSB7XG4gICAgc2VsZi5jbG9zZSgpO1xuICB9KTtcblxuICAvLyBzdG9wIGV2ZW50IGZyb20gcHJvcGFnYXRpbmcgYW5kIGNsb3Npbmcgc2VhcmNoXG4gIC8vIGZvY3VzIG9uIGlucHV0XG4gIGxpc3Rlbih0aGlzLl9jb250YWluZXIsIFNlYXJjaFBhZC5JTlBVVF9TRUxFQ1RPUiwgJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5kZWxlZ2F0ZVRhcmdldC5mb2N1cygpO1xuICB9KTtcblxuICAvLyBwcmVzZWxlY3QgcmVzdWx0IG9uIGhvdmVyXG4gIGxpc3Rlbih0aGlzLl9jb250YWluZXIsIFNlYXJjaFBhZC5SRVNVTFRfU0VMRUNUT1IsICdtb3VzZW92ZXInLCBmdW5jdGlvbihlKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBzZWxmLl9zY3JvbGxUb05vZGUoZS5kZWxlZ2F0ZVRhcmdldCk7XG4gICAgc2VsZi5fcHJlc2VsZWN0KGUuZGVsZWdhdGVUYXJnZXQpO1xuICB9KTtcblxuICAvLyBzZWxlY3RzIGRlc2lyZWQgcmVzdWx0IG9uIG1vdXNlIGNsaWNrXG4gIGxpc3Rlbih0aGlzLl9jb250YWluZXIsIFNlYXJjaFBhZC5SRVNVTFRfU0VMRUNUT1IsICdjbGljaycsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHNlbGYuX3NlbGVjdChlLmRlbGVnYXRlVGFyZ2V0KTtcbiAgfSk7XG5cbiAgLy8gcHJldmVudCBjdXJzb3IgaW4gaW5wdXQgZnJvbSBnb2luZyBsZWZ0IGFuZCByaWdodCB3aGVuIHVzaW5nIHVwL2Rvd24gdG9cbiAgLy8gbmF2aWdhdGUgcmVzdWx0c1xuICBsaXN0ZW4odGhpcy5fY29udGFpbmVyLCBTZWFyY2hQYWQuSU5QVVRfU0VMRUNUT1IsICdrZXlkb3duJywgZnVuY3Rpb24oZSkge1xuXG4gICAgLy8gdXBcbiAgICBpZiAoZS5rZXlDb2RlID09PSAzOCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIC8vIGRvd25cbiAgICBpZiAoZS5rZXlDb2RlID09PSA0MCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gaGFuZGxlIGtleWJvYXJkIGlucHV0XG4gIGxpc3Rlbih0aGlzLl9jb250YWluZXIsIFNlYXJjaFBhZC5JTlBVVF9TRUxFQ1RPUiwgJ2tleXVwJywgZnVuY3Rpb24oZSkge1xuXG4gICAgLy8gZXNjYXBlXG4gICAgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgIHJldHVybiBzZWxmLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLy8gZW50ZXJcbiAgICBpZiAoZS5rZXlDb2RlID09PSAxMykge1xuICAgICAgdmFyIHNlbGVjdGVkID0gc2VsZi5fZ2V0Q3VycmVudFJlc3VsdCgpO1xuXG4gICAgICByZXR1cm4gc2VsZWN0ZWQgPyBzZWxmLl9zZWxlY3Qoc2VsZWN0ZWQpIDogc2VsZi5jbG9zZSgpO1xuICAgIH1cblxuICAgIC8vIHVwXG4gICAgaWYgKGUua2V5Q29kZSA9PT0gMzgpIHtcbiAgICAgIHJldHVybiBzZWxmLl9zY3JvbGxUb0RpcmVjdGlvbih0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBkb3duXG4gICAgaWYgKGUua2V5Q29kZSA9PT0gNDApIHtcbiAgICAgIHJldHVybiBzZWxmLl9zY3JvbGxUb0RpcmVjdGlvbigpO1xuICAgIH1cblxuICAgIC8vIGxlZnQgJiYgcmlnaHRcbiAgICAvLyBkbyBub3Qgc2VhcmNoIHdoaWxlIG5hdmlnYXRpbmcgdGV4dCBpbnB1dFxuICAgIGlmIChlLmtleUNvZGUgPT09IDM3IHx8IGUua2V5Q29kZSA9PT0gMzkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhbnl0aGluZyBlbHNlXG4gICAgc2VsZi5fc2VhcmNoKGUuZGVsZWdhdGVUYXJnZXQudmFsdWUpO1xuICB9KTtcbn07XG5cblxuLyoqXG4gKiBVbmJpbmRzIGFsbCBwcmV2aW91c2x5IGVzdGFibGlzaGVkIGxpc3RlbmVyc1xuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLl91bmJpbmRFdmVudHMgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fZXZlbnRNYXBzLmZvckVhY2goZnVuY3Rpb24obSkge1xuICAgIGRvbURlbGVnYXRlLnVuYmluZChtLmVsLCBtLnR5cGUsIG0ubGlzdGVuZXIpO1xuICB9KTtcbn07XG5cblxuLyoqXG4gKiBQZXJmb3JtcyBhIHNlYXJjaCBmb3IgdGhlIGdpdmVuIHBhdHRlcm4uXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBwYXR0ZXJuXG4gKi9cblNlYXJjaFBhZC5wcm90b3R5cGUuX3NlYXJjaCA9IGZ1bmN0aW9uKHBhdHRlcm4pIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMuX2NsZWFyUmVzdWx0cygpO1xuXG4gIC8vIGRvIG5vdCBzZWFyY2ggb24gZW1wdHkgcXVlcnlcbiAgaWYgKCFwYXR0ZXJuIHx8IHBhdHRlcm4gPT09ICcnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNlYXJjaFJlc3VsdHMgPSB0aGlzLl9zZWFyY2hQcm92aWRlci5maW5kKHBhdHRlcm4pO1xuXG4gIGlmICghc2VhcmNoUmVzdWx0cy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBhcHBlbmQgbmV3IHJlc3VsdHNcbiAgc2VhcmNoUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgIHZhciBpZCA9IHJlc3VsdC5lbGVtZW50LmlkO1xuICAgIHZhciBub2RlID0gc2VsZi5fY3JlYXRlUmVzdWx0Tm9kZShyZXN1bHQsIGlkKTtcbiAgICBzZWxmLl9yZXN1bHRzW2lkXSA9IHtcbiAgICAgIGVsZW1lbnQ6IHJlc3VsdC5lbGVtZW50LFxuICAgICAgbm9kZTogbm9kZVxuICAgIH07XG4gIH0pO1xuXG4gIC8vIHByZXNlbGVjdCBmaXJzdCByZXN1bHRcbiAgdmFyIG5vZGUgPSBkb21RdWVyeShTZWFyY2hQYWQuUkVTVUxUX1NFTEVDVE9SLCB0aGlzLl9yZXN1bHRzQ29udGFpbmVyKTtcbiAgdGhpcy5fc2Nyb2xsVG9Ob2RlKG5vZGUpO1xuICB0aGlzLl9wcmVzZWxlY3Qobm9kZSk7XG59O1xuXG5cbi8qKlxuICogTmF2aWdhdGUgdG8gdGhlIHByZXZpb3VzL25leHQgcmVzdWx0LiBEZWZhdWx0cyB0byBuZXh0IHJlc3VsdC5cbiAqIEBwYXJhbSAge2Jvb2xlYW59IHByZXZpb3VzXG4gKi9cblNlYXJjaFBhZC5wcm90b3R5cGUuX3Njcm9sbFRvRGlyZWN0aW9uID0gZnVuY3Rpb24ocHJldmlvdXMpIHtcbiAgdmFyIHNlbGVjdGVkID0gdGhpcy5fZ2V0Q3VycmVudFJlc3VsdCgpO1xuICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5vZGUgPSBwcmV2aW91cyA/IHNlbGVjdGVkLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgOiBzZWxlY3RlZC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gIGlmIChub2RlKSB7XG4gICAgdGhpcy5fc2Nyb2xsVG9Ob2RlKG5vZGUpO1xuICAgIHRoaXMuX3ByZXNlbGVjdChub2RlKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIFNjcm9sbCB0byB0aGUgbm9kZSBpZiBpdCBpcyBub3QgdmlzaWJsZS5cbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50fSBub2RlXG4gKi9cblNlYXJjaFBhZC5wcm90b3R5cGUuX3Njcm9sbFRvTm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgaWYgKCFub2RlIHx8IG5vZGUgPT09IHRoaXMuX2dldEN1cnJlbnRSZXN1bHQoKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBub2RlT2Zmc2V0ID0gbm9kZS5vZmZzZXRUb3A7XG4gIHZhciBjb250YWluZXJTY3JvbGwgPSB0aGlzLl9yZXN1bHRzQ29udGFpbmVyLnNjcm9sbFRvcDtcblxuICB2YXIgYm90dG9tU2Nyb2xsID0gbm9kZU9mZnNldCAtIHRoaXMuX3Jlc3VsdHNDb250YWluZXIuY2xpZW50SGVpZ2h0ICsgbm9kZS5jbGllbnRIZWlnaHQ7XG5cbiAgaWYgKG5vZGVPZmZzZXQgPCBjb250YWluZXJTY3JvbGwpIHtcbiAgICB0aGlzLl9yZXN1bHRzQ29udGFpbmVyLnNjcm9sbFRvcCA9IG5vZGVPZmZzZXQ7XG4gIH0gZWxzZSBpZiAoY29udGFpbmVyU2Nyb2xsIDwgYm90dG9tU2Nyb2xsKSB7XG4gICAgdGhpcy5fcmVzdWx0c0NvbnRhaW5lci5zY3JvbGxUb3AgPSBib3R0b21TY3JvbGw7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBDbGVhcnMgYWxsIHJlc3VsdHMgZGF0YS5cbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5fY2xlYXJSZXN1bHRzID0gZnVuY3Rpb24oKSB7XG4gIGRvbUNsZWFyKHRoaXMuX3Jlc3VsdHNDb250YWluZXIpO1xuXG4gIHRoaXMuX3Jlc3VsdHMgPSBbXTtcblxuICB0aGlzLl9yZXNldE92ZXJsYXkoKTtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdzZWFyY2hQYWQuY2xlYXJlZCcpO1xufTtcblxuXG4vKipcbiAqIEdldCBjdXJyZW50bHkgc2VsZWN0ZWQgcmVzdWx0LlxuICpcbiAqIEByZXR1cm4ge0VsZW1lbnR9XG4gKi9cblNlYXJjaFBhZC5wcm90b3R5cGUuX2dldEN1cnJlbnRSZXN1bHQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGRvbVF1ZXJ5KFNlYXJjaFBhZC5SRVNVTFRfU0VMRUNURURfU0VMRUNUT1IsIHRoaXMuX3Jlc3VsdHNDb250YWluZXIpO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZSByZXN1bHQgRE9NIGVsZW1lbnQgd2l0aGluIHJlc3VsdHMgY29udGFpbmVyXG4gKiB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgc2VhcmNoIHJlc3VsdC5cbiAqXG4gKiAncmVzdWx0JyA6IG9uZSBvZiB0aGUgZWxlbWVudHMgcmV0dXJuZWQgYnkgU2VhcmNoUHJvdmlkZXJcbiAqICdpZCcgOiBpZCBhdHRyaWJ1dGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBuZXcgRE9NIG5vZGVcbiAqIHJldHVybiA6IGNyZWF0ZWQgRE9NIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gIHtTZWFyY2hSZXN1bHR9IHJlc3VsdFxuICogQHBhcmFtICB7c3RyaW5nfSBpZFxuICogQHJldHVybiB7RWxlbWVudH1cbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5fY3JlYXRlUmVzdWx0Tm9kZSA9IGZ1bmN0aW9uKHJlc3VsdCwgaWQpIHtcbiAgdmFyIG5vZGUgPSBkb21pZnkoU2VhcmNoUGFkLlJFU1VMVF9IVE1MKTtcblxuICAvLyBjcmVhdGUgb25seSBpZiBhdmFpbGFibGVcbiAgaWYgKHJlc3VsdC5wcmltYXJ5VG9rZW5zLmxlbmd0aCA+IDApIHtcbiAgICBjcmVhdGVJbm5lclRleHROb2RlKG5vZGUsIHJlc3VsdC5wcmltYXJ5VG9rZW5zLCBTZWFyY2hQYWQuUkVTVUxUX1BSSU1BUllfSFRNTCk7XG4gIH1cblxuICAvLyBzZWNvbmRhcnkgdG9rZW5zIChyZXByZXNlbnQgZWxlbWVudCBJRCkgYXJlIGFsbHdheXMgYXZhaWxhYmxlXG4gIGNyZWF0ZUlubmVyVGV4dE5vZGUobm9kZSwgcmVzdWx0LnNlY29uZGFyeVRva2VucywgU2VhcmNoUGFkLlJFU1VMVF9TRUNPTkRBUllfSFRNTCk7XG5cbiAgZG9tQXR0cihub2RlLCBTZWFyY2hQYWQuUkVTVUxUX0lEX0FUVFJJQlVURSwgaWQpO1xuXG4gIHRoaXMuX3Jlc3VsdHNDb250YWluZXIuYXBwZW5kQ2hpbGQobm9kZSk7XG5cbiAgcmV0dXJuIG5vZGU7XG59O1xuXG5cbi8qKlxuICogUmVnaXN0ZXIgc2VhcmNoIGVsZW1lbnQgcHJvdmlkZXIuXG4gKlxuICogU2VhcmNoUHJvdmlkZXIuZmluZCAtIHByb3ZpZGVzIHNlYXJjaCBmdW5jdGlvbiBvdmVyIG93biBlbGVtZW50c1xuICogIChwYXR0ZXJuKSA9PiBbeyB0ZXh0OiA8U3RyaW5nPiwgZWxlbWVudDogPEVsZW1lbnQ+fSwgLi4uXVxuICpcbiAqIEBwYXJhbSAge1NlYXJjaFByb3ZpZGVyfSBwcm92aWRlclxuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLnJlZ2lzdGVyUHJvdmlkZXIgPSBmdW5jdGlvbihwcm92aWRlcikge1xuICB0aGlzLl9zZWFyY2hQcm92aWRlciA9IHByb3ZpZGVyO1xufTtcblxuXG4vKipcbiAqIE9wZW4gc2VhcmNoIHBhZC5cbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5fc2VhcmNoUHJvdmlkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHNlYXJjaCBwcm92aWRlciByZWdpc3RlcmVkJyk7XG4gIH1cblxuICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX2JpbmRFdmVudHMoKTtcblxuICB0aGlzLl9vcGVuID0gdHJ1ZTtcblxuICBkb21DbGFzc2VzKHRoaXMuX2NvbnRhaW5lcikuYWRkKCdvcGVuJyk7XG5cbiAgdGhpcy5fc2VhcmNoSW5wdXQuZm9jdXMoKTtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdzZWFyY2hQYWQub3BlbmVkJyk7XG59O1xuXG5cbi8qKlxuICogQ2xvc2Ugc2VhcmNoIHBhZC5cbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl91bmJpbmRFdmVudHMoKTtcblxuICB0aGlzLl9vcGVuID0gZmFsc2U7XG5cbiAgZG9tQ2xhc3Nlcyh0aGlzLl9jb250YWluZXIpLnJlbW92ZSgnb3BlbicpO1xuXG4gIHRoaXMuX2NsZWFyUmVzdWx0cygpO1xuXG4gIHRoaXMuX3NlYXJjaElucHV0LnZhbHVlID0gJyc7XG4gIHRoaXMuX3NlYXJjaElucHV0LmJsdXIoKTtcblxuICB0aGlzLl9yZXNldE92ZXJsYXkoKTtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdzZWFyY2hQYWQuY2xvc2VkJyk7XG59O1xuXG5cbi8qKlxuICogVG9nZ2xlcyBzZWFyY2ggcGFkIG9uL29mZi5cbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5pc09wZW4oKSA/IHRoaXMuY2xvc2UoKSA6IHRoaXMub3BlbigpO1xufTtcblxuXG4vKipcbiAqIFJlcG9ydCBzdGF0ZSBvZiBzZWFyY2ggcGFkLlxuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLmlzT3BlbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fb3Blbjtcbn07XG5cblxuLyoqXG4gKiBQcmVzZWxlY3QgcmVzdWx0IGVudHJ5LlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IGVsZW1lbnRcbiAqL1xuU2VhcmNoUGFkLnByb3RvdHlwZS5fcHJlc2VsZWN0ID0gZnVuY3Rpb24obm9kZSkge1xuICB2YXIgc2VsZWN0ZWROb2RlID0gdGhpcy5fZ2V0Q3VycmVudFJlc3VsdCgpO1xuXG4gIC8vIGFscmVhZHkgc2VsZWN0ZWRcbiAgaWYgKG5vZGUgPT09IHNlbGVjdGVkTm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHJlbW92aW5nIHByZXNlbGVjdGlvbiBmcm9tIGN1cnJlbnQgbm9kZVxuICBpZiAoc2VsZWN0ZWROb2RlKSB7XG4gICAgZG9tQ2xhc3NlcyhzZWxlY3RlZE5vZGUpLnJlbW92ZShTZWFyY2hQYWQuUkVTVUxUX1NFTEVDVEVEX0NMQVNTKTtcbiAgfVxuXG4gIHZhciBpZCA9IGRvbUF0dHIobm9kZSwgU2VhcmNoUGFkLlJFU1VMVF9JRF9BVFRSSUJVVEUpO1xuICB2YXIgZWxlbWVudCA9IHRoaXMuX3Jlc3VsdHNbaWRdLmVsZW1lbnQ7XG5cbiAgZG9tQ2xhc3Nlcyhub2RlKS5hZGQoU2VhcmNoUGFkLlJFU1VMVF9TRUxFQ1RFRF9DTEFTUyk7XG5cbiAgdGhpcy5fcmVzZXRPdmVybGF5KGVsZW1lbnQpO1xuXG4gIHRoaXMuX2NlbnRlclZpZXdib3goZWxlbWVudCk7XG5cbiAgdGhpcy5fc2VsZWN0aW9uLnNlbGVjdChlbGVtZW50KTtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdzZWFyY2hQYWQucHJlc2VsZWN0ZWQnLCBlbGVtZW50KTtcbn07XG5cblxuLyoqXG4gKiBTZWxlY3QgcmVzdWx0IG5vZGUuXG4gKlxuICogQHBhcmFtICB7RWxlbWVudH0gZWxlbWVudFxuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLl9zZWxlY3QgPSBmdW5jdGlvbihub2RlKSB7XG4gIHZhciBpZCA9IGRvbUF0dHIobm9kZSwgU2VhcmNoUGFkLlJFU1VMVF9JRF9BVFRSSUJVVEUpO1xuICB2YXIgZWxlbWVudCA9IHRoaXMuX3Jlc3VsdHNbaWRdLmVsZW1lbnQ7XG5cbiAgdGhpcy5jbG9zZSgpO1xuXG4gIHRoaXMuX3Jlc2V0T3ZlcmxheSgpO1xuXG4gIHRoaXMuX2NlbnRlclZpZXdib3goZWxlbWVudCk7XG5cbiAgdGhpcy5fc2VsZWN0aW9uLnNlbGVjdChlbGVtZW50KTtcblxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdzZWFyY2hQYWQuc2VsZWN0ZWQnLCBlbGVtZW50KTtcbn07XG5cblxuLyoqXG4gKiBDZW50ZXIgdmlld2JveCBvbiB0aGUgZWxlbWVudCBtaWRkbGUgcG9pbnQuXG4gKlxuICogQHBhcmFtICB7RWxlbWVudH0gZWxlbWVudFxuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLl9jZW50ZXJWaWV3Ym94ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgdmlld2JveCA9IHRoaXMuX2NhbnZhcy52aWV3Ym94KCk7XG5cbiAgdmFyIGJveCA9IGdldEJvdW5kaW5nQm94KGVsZW1lbnQpO1xuXG4gIHZhciBuZXdWaWV3Ym94ID0ge1xuICAgIHg6IChib3gueCArIGJveC53aWR0aC8yKSAtIHZpZXdib3gub3V0ZXIud2lkdGgvMixcbiAgICB5OiAoYm94LnkgKyBib3guaGVpZ2h0LzIpIC0gdmlld2JveC5vdXRlci5oZWlnaHQvMixcbiAgICB3aWR0aDogdmlld2JveC5vdXRlci53aWR0aCxcbiAgICBoZWlnaHQ6IHZpZXdib3gub3V0ZXIuaGVpZ2h0XG4gIH07XG5cbiAgdGhpcy5fY2FudmFzLnZpZXdib3gobmV3Vmlld2JveCk7XG5cbiAgdGhpcy5fY2FudmFzLnpvb20odmlld2JveC5zY2FsZSk7XG59O1xuXG5cbi8qKlxuICogUmVzZXQgb3ZlcmxheSByZW1vdmVzIGFuZCwgb3B0aW9uYWxseSwgc2V0XG4gKiBvdmVybGF5IHRvIGEgbmV3IGVsZW1lbnQuXG4gKlxuICogQHBhcmFtICB7RWxlbWVudH0gZWxlbWVudFxuICovXG5TZWFyY2hQYWQucHJvdG90eXBlLl9yZXNldE92ZXJsYXkgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIGlmICh0aGlzLl9vdmVybGF5SWQpIHtcbiAgICB0aGlzLl9vdmVybGF5cy5yZW1vdmUodGhpcy5fb3ZlcmxheUlkKTtcbiAgfVxuXG4gIGlmIChlbGVtZW50KSB7XG4gICAgdmFyIGJveCA9IGdldEJvdW5kaW5nQm94KGVsZW1lbnQpO1xuICAgIHZhciBvdmVybGF5ID0gY29uc3RydWN0T3ZlcmxheShib3gpO1xuICAgIHRoaXMuX292ZXJsYXlJZCA9IHRoaXMuX292ZXJsYXlzLmFkZChlbGVtZW50LCBvdmVybGF5KTtcbiAgfVxufTtcblxuXG4vKipcbiAqIENvbnN0cnVjdCBvdmVybGF5IG9iamVjdCBmb3IgdGhlIGdpdmVuIGJvdW5kaW5nIGJveC5cbiAqXG4gKiBAcGFyYW0gIHtCb3VuZGluZ0JveH0gYm94XG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGNvbnN0cnVjdE92ZXJsYXkoYm94KSB7XG5cbiAgdmFyIG9mZnNldCA9IDY7XG4gIHZhciB3ID0gYm94LndpZHRoICsgb2Zmc2V0ICogMjtcbiAgdmFyIGggPSBib3guaGVpZ2h0ICsgb2Zmc2V0ICogMjtcblxuICB2YXIgc3R5bGVzID0gW1xuICAgICd3aWR0aDogJysgdyArJ3B4JyxcbiAgICAnaGVpZ2h0OiAnKyBoICsgJ3B4J1xuICBdLmpvaW4oJzsgJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBwb3NpdGlvbjoge1xuICAgICAgYm90dG9tOiBoIC0gb2Zmc2V0LFxuICAgICAgcmlnaHQ6IHcgLSBvZmZzZXRcbiAgICB9LFxuICAgIHNob3c6IHRydWUsXG4gICAgaHRtbDogJzxkaXYgc3R5bGU9XCInICsgc3R5bGVzICsgJ1wiIGNsYXNzPVwiJyArIFNlYXJjaFBhZC5PVkVSTEFZX0NMQVNTICsgJ1wiPjwvZGl2PidcbiAgfTtcbn1cblxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIGFwcGVuZHMgY2hpbGQgbm9kZSBmcm9tIHJlc3VsdCB0b2tlbnMgYW5kIEhUTUwgdGVtcGxhdGUuXG4gKlxuICogQHBhcmFtICB7RWxlbWVudH0gbm9kZVxuICogQHBhcmFtICB7QXJyYXk8T2JqZWN0Pn0gdG9rZW5zXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHRlbXBsYXRlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlubmVyVGV4dE5vZGUocGFyZW50Tm9kZSwgdG9rZW5zLCB0ZW1wbGF0ZSkge1xuICB2YXIgdGV4dCA9IGNyZWF0ZUh0bWxUZXh0KHRva2Vucyk7XG4gIHZhciBjaGlsZE5vZGUgPSBkb21pZnkodGVtcGxhdGUpO1xuICBjaGlsZE5vZGUuaW5uZXJIVE1MID0gdGV4dDtcbiAgcGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjaGlsZE5vZGUpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBpbnRlcm5hbCBIVE1MIG1hcmt1cCBmcm9tIHJlc3VsdCB0b2tlbnMuXG4gKiBDYXRlcnMgZm9yIGhpZ2hsaWdodGluZyBwYXR0ZXJuIG1hdGNoZWQgdG9rZW5zLlxuICpcbiAqIEBwYXJhbSAge0FycmF5PE9iamVjdD59IHRva2Vuc1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjcmVhdGVIdG1sVGV4dCh0b2tlbnMpIHtcbiAgdmFyIGh0bWxUZXh0ID0gJyc7XG5cbiAgdG9rZW5zLmZvckVhY2goZnVuY3Rpb24odCkge1xuICAgIGlmICh0Lm1hdGNoZWQpIHtcbiAgICAgIGh0bWxUZXh0ICs9ICc8c3Ryb25nIGNsYXNzPVwiJyArIFNlYXJjaFBhZC5SRVNVTFRfSElHSExJR0hUX0NMQVNTICsgJ1wiPicgKyBlc2NhcGVIVE1MKHQubWF0Y2hlZCkgKyAnPC9zdHJvbmc+JztcbiAgICB9IGVsc2Uge1xuICAgICAgaHRtbFRleHQgKz0gZXNjYXBlSFRNTCh0Lm5vcm1hbCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gaHRtbFRleHQgIT09ICcnID8gaHRtbFRleHQgOiBudWxsO1xufVxuXG5cbi8qKlxuICogQ09OU1RBTlRTXG4gKi9cblNlYXJjaFBhZC5DT05UQUlORVJfU0VMRUNUT1IgPSAnLmRqcy1zZWFyY2gtY29udGFpbmVyJztcblNlYXJjaFBhZC5JTlBVVF9TRUxFQ1RPUiA9ICcuZGpzLXNlYXJjaC1pbnB1dCBpbnB1dCc7XG5TZWFyY2hQYWQuUkVTVUxUU19DT05UQUlORVJfU0VMRUNUT1IgPSAnLmRqcy1zZWFyY2gtcmVzdWx0cyc7XG5TZWFyY2hQYWQuUkVTVUxUX1NFTEVDVE9SID0gJy5kanMtc2VhcmNoLXJlc3VsdCc7XG5TZWFyY2hQYWQuUkVTVUxUX1NFTEVDVEVEX0NMQVNTID0gJ2Rqcy1zZWFyY2gtcmVzdWx0LXNlbGVjdGVkJztcblNlYXJjaFBhZC5SRVNVTFRfU0VMRUNURURfU0VMRUNUT1IgPSAnLicgKyBTZWFyY2hQYWQuUkVTVUxUX1NFTEVDVEVEX0NMQVNTO1xuU2VhcmNoUGFkLlJFU1VMVF9JRF9BVFRSSUJVVEUgPSAnZGF0YS1yZXN1bHQtaWQnO1xuU2VhcmNoUGFkLlJFU1VMVF9ISUdITElHSFRfQ0xBU1MgPSAnZGpzLXNlYXJjaC1oaWdobGlnaHQnO1xuU2VhcmNoUGFkLk9WRVJMQVlfQ0xBU1MgPSAnZGpzLXNlYXJjaC1vdmVybGF5JztcblxuU2VhcmNoUGFkLkJPWF9IVE1MID1cbiAgJzxkaXYgY2xhc3M9XCJkanMtc2VhcmNoLWNvbnRhaW5lciBkanMtZHJhZ2dhYmxlIGRqcy1zY3JvbGxhYmxlXCI+JyArXG4gICAgJzxkaXYgY2xhc3M9XCJkanMtc2VhcmNoLWlucHV0XCI+JyArXG4gICAgICAnPGlucHV0IHR5cGU9XCJ0ZXh0XCIvPicgK1xuICAgICc8L2Rpdj4nICtcbiAgICAnPGRpdiBjbGFzcz1cImRqcy1zZWFyY2gtcmVzdWx0c1wiPjwvZGl2PicgK1xuICAnPC9kaXY+JztcblxuU2VhcmNoUGFkLlJFU1VMVF9IVE1MID1cbiAgJzxkaXYgY2xhc3M9XCJkanMtc2VhcmNoLXJlc3VsdFwiPjwvZGl2Pic7XG5cblNlYXJjaFBhZC5SRVNVTFRfUFJJTUFSWV9IVE1MID1cbiAgJzxkaXYgY2xhc3M9XCJkanMtc2VhcmNoLXJlc3VsdC1wcmltYXJ5XCI+PC9kaXY+JztcblxuU2VhcmNoUGFkLlJFU1VMVF9TRUNPTkRBUllfSFRNTCA9XG4gICc8cCBjbGFzcz1cImRqcy1zZWFyY2gtcmVzdWx0LXNlY29uZGFyeVwiPjwvcD4nO1xuIiwiaW1wb3J0IE92ZXJsYXlzTW9kdWxlIGZyb20gJy4uL292ZXJsYXlzJztcbmltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnLi4vc2VsZWN0aW9uJztcblxuaW1wb3J0IFNlYXJjaFBhZCBmcm9tICcuL1NlYXJjaFBhZCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBPdmVybGF5c01vZHVsZSxcbiAgICBTZWxlY3Rpb25Nb2R1bGVcbiAgXSxcbiAgc2VhcmNoUGFkOiBbICd0eXBlJywgU2VhcmNoUGFkIF1cbn07XG4iLCJpbXBvcnQge1xuICBpc0FycmF5LFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuXG4vKipcbiAqIEEgc2VydmljZSB0aGF0IG9mZmVycyB0aGUgY3VycmVudCBzZWxlY3Rpb24gaW4gYSBkaWFncmFtLlxuICogT2ZmZXJzIHRoZSBhcGkgdG8gY29udHJvbCB0aGUgc2VsZWN0aW9uLCB0b28uXG4gKlxuICogQGNsYXNzXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXMgdGhlIGV2ZW50IGJ1c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTZWxlY3Rpb24oZXZlbnRCdXMpIHtcblxuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuXG4gIHRoaXMuX3NlbGVjdGVkRWxlbWVudHMgPSBbXTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRCdXMub24oWyAnc2hhcGUucmVtb3ZlJywgJ2Nvbm5lY3Rpb24ucmVtb3ZlJyBdLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBlLmVsZW1lbnQ7XG4gICAgc2VsZi5kZXNlbGVjdChlbGVtZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oWyAnZGlhZ3JhbS5jbGVhcicgXSwgZnVuY3Rpb24oZSkge1xuICAgIHNlbGYuc2VsZWN0KG51bGwpO1xuICB9KTtcbn1cblxuU2VsZWN0aW9uLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTtcblxuXG5TZWxlY3Rpb24ucHJvdG90eXBlLmRlc2VsZWN0ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgc2VsZWN0ZWRFbGVtZW50cyA9IHRoaXMuX3NlbGVjdGVkRWxlbWVudHM7XG5cbiAgdmFyIGlkeCA9IHNlbGVjdGVkRWxlbWVudHMuaW5kZXhPZihlbGVtZW50KTtcblxuICBpZiAoaWR4ICE9PSAtMSkge1xuICAgIHZhciBvbGRTZWxlY3Rpb24gPSBzZWxlY3RlZEVsZW1lbnRzLnNsaWNlKCk7XG5cbiAgICBzZWxlY3RlZEVsZW1lbnRzLnNwbGljZShpZHgsIDEpO1xuXG4gICAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnc2VsZWN0aW9uLmNoYW5nZWQnLCB7IG9sZFNlbGVjdGlvbjogb2xkU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb246IHNlbGVjdGVkRWxlbWVudHMgfSk7XG4gIH1cbn07XG5cblxuU2VsZWN0aW9uLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRWxlbWVudHM7XG59O1xuXG5TZWxlY3Rpb24ucHJvdG90eXBlLmlzU2VsZWN0ZWQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiB0aGlzLl9zZWxlY3RlZEVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgIT09IC0xO1xufTtcblxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHNlbGVjdHMgb25lIG9yIG1vcmUgZWxlbWVudHMgb24gdGhlIGRpYWdyYW0uXG4gKlxuICogQnkgcGFzc2luZyBhbiBhZGRpdGlvbmFsIGFkZCBwYXJhbWV0ZXIgeW91IGNhbiBkZWNpZGUgd2hldGhlciBvciBub3QgdGhlIGVsZW1lbnQocylcbiAqIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgYWxyZWFkeSBleGlzdGluZyBzZWxlY3Rpb24gb3Igbm90LlxuICpcbiAqIEBtZXRob2QgU2VsZWN0aW9uI3NlbGVjdFxuICpcbiAqIEBwYXJhbSAge09iamVjdHxPYmplY3RbXX0gZWxlbWVudHMgZWxlbWVudCBvciBhcnJheSBvZiBlbGVtZW50cyB0byBiZSBzZWxlY3RlZFxuICogQHBhcmFtICB7Ym9vbGVhbn0gW2FkZF0gd2hldGhlciB0aGUgZWxlbWVudChzKSBzaG91bGQgYmUgYXBwZW5kZWQgdG8gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLCBkZWZhdWx0cyB0byBmYWxzZVxuICovXG5TZWxlY3Rpb24ucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uKGVsZW1lbnRzLCBhZGQpIHtcbiAgdmFyIHNlbGVjdGVkRWxlbWVudHMgPSB0aGlzLl9zZWxlY3RlZEVsZW1lbnRzLFxuICAgICAgb2xkU2VsZWN0aW9uID0gc2VsZWN0ZWRFbGVtZW50cy5zbGljZSgpO1xuXG4gIGlmICghaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IGVsZW1lbnRzID8gWyBlbGVtZW50cyBdIDogW107XG4gIH1cblxuICAvLyBzZWxlY3Rpb24gbWF5IGJlIGNsZWFyZWQgYnkgcGFzc2luZyBhbiBlbXB0eSBhcnJheSBvciBudWxsXG4gIC8vIHRvIHRoZSBtZXRob2RcbiAgaWYgKGFkZCkge1xuICAgIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgIT09IC0xKSB7XG5cbiAgICAgICAgLy8gYWxyZWFkeSBzZWxlY3RlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3RlZEVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50cyA9IHNlbGVjdGVkRWxlbWVudHMgPSBlbGVtZW50cy5zbGljZSgpO1xuICB9XG5cbiAgdGhpcy5fZXZlbnRCdXMuZmlyZSgnc2VsZWN0aW9uLmNoYW5nZWQnLCB7IG9sZFNlbGVjdGlvbjogb2xkU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb246IHNlbGVjdGVkRWxlbWVudHMgfSk7XG59O1xuIiwiaW1wb3J0IHtcbiAgaGFzUHJpbWFyeU1vZGlmaWVyXG59IGZyb20gJy4uLy4uL3V0aWwvTW91c2UnO1xuXG5pbXBvcnQge1xuICBmaW5kLCBpc0FycmF5XG59IGZyb20gJ21pbi1kYXNoJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTZWxlY3Rpb25CZWhhdmlvcihcbiAgICBldmVudEJ1cywgc2VsZWN0aW9uLCBjYW52YXMsXG4gICAgZWxlbWVudFJlZ2lzdHJ5KSB7XG5cbiAgZXZlbnRCdXMub24oJ2NyZWF0ZS5lbmQnLCA1MDAsIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBjYW5FeGVjdXRlID0gY29udGV4dC5jYW5FeGVjdXRlLFxuICAgICAgICBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHMsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgYXV0b1NlbGVjdCA9IGhpbnRzLmF1dG9TZWxlY3Q7XG5cbiAgICAvLyBzZWxlY3QgZWxlbWVudHMgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gY3JlYXRlZFxuICAgIGlmIChjYW5FeGVjdXRlKSB7XG4gICAgICBpZiAoYXV0b1NlbGVjdCA9PT0gZmFsc2UpIHtcblxuICAgICAgICAvLyBzZWxlY3Qgbm8gZWxlbWVudHNcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheShhdXRvU2VsZWN0KSkge1xuICAgICAgICBzZWxlY3Rpb24uc2VsZWN0KGF1dG9TZWxlY3QpO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICAvLyBzZWxlY3QgYWxsIGVsZW1lbnRzIGJ5IGRlZmF1bHRcbiAgICAgICAgc2VsZWN0aW9uLnNlbGVjdChlbGVtZW50cy5maWx0ZXIoaXNTaG93bikpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2Nvbm5lY3QuZW5kJywgNTAwLCBmdW5jdGlvbihlKSB7XG5cbiAgICAvLyBzZWxlY3QgdGhlIGNvbm5lY3QgZW5kIHRhcmdldFxuICAgIC8vIGFmdGVyIGEgY29ubmVjdCBvcGVyYXRpb25cbiAgICBpZiAoZS5jb250ZXh0LmNhbkV4ZWN1dGUgJiYgZS5jb250ZXh0LmhvdmVyKSB7XG4gICAgICBzZWxlY3Rpb24uc2VsZWN0KGUuY29udGV4dC5ob3Zlcik7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignc2hhcGUubW92ZS5lbmQnLCA1MDAsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgcHJldmlvdXNTZWxlY3Rpb24gPSBlLnByZXZpb3VzU2VsZWN0aW9uIHx8IFtdO1xuXG4gICAgdmFyIHNoYXBlID0gZWxlbWVudFJlZ2lzdHJ5LmdldChlLmNvbnRleHQuc2hhcGUuaWQpO1xuXG4gICAgLy8gbWFrZSBzdXJlIGF0IGxlYXN0IHRoZSBtYWluIG1vdmVkIGVsZW1lbnQgaXMgYmVpbmdcbiAgICAvLyBzZWxlY3RlZCBhZnRlciBhIG1vdmUgb3BlcmF0aW9uXG4gICAgdmFyIGluU2VsZWN0aW9uID0gZmluZChwcmV2aW91c1NlbGVjdGlvbiwgZnVuY3Rpb24oc2VsZWN0ZWRTaGFwZSkge1xuICAgICAgcmV0dXJuIHNoYXBlLmlkID09PSBzZWxlY3RlZFNoYXBlLmlkO1xuICAgIH0pO1xuXG4gICAgaWYgKCFpblNlbGVjdGlvbikge1xuICAgICAgc2VsZWN0aW9uLnNlbGVjdChzaGFwZSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBTaGlmdCArIGNsaWNrIHNlbGVjdGlvblxuICBldmVudEJ1cy5vbignZWxlbWVudC5jbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQ7XG5cbiAgICAvLyBkbyBub3Qgc2VsZWN0IHRoZSByb290IGVsZW1lbnRcbiAgICAvLyBvciBjb25uZWN0aW9uc1xuICAgIGlmIChlbGVtZW50ID09PSBjYW52YXMuZ2V0Um9vdEVsZW1lbnQoKSkge1xuICAgICAgZWxlbWVudCA9IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGlzU2VsZWN0ZWQgPSBzZWxlY3Rpb24uaXNTZWxlY3RlZChlbGVtZW50KSxcbiAgICAgICAgaXNNdWx0aVNlbGVjdCA9IHNlbGVjdGlvbi5nZXQoKS5sZW5ndGggPiAxO1xuXG4gICAgLy8gbW91c2UtZXZlbnQ6IFNFTEVDVElPTl9LRVlcbiAgICB2YXIgYWRkID0gaGFzUHJpbWFyeU1vZGlmaWVyKGV2ZW50KTtcblxuICAgIC8vIHNlbGVjdCBPUiBkZXNlbGVjdCBlbGVtZW50IGluIG11bHRpIHNlbGVjdGlvblxuICAgIGlmIChpc1NlbGVjdGVkICYmIGlzTXVsdGlTZWxlY3QpIHtcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi5kZXNlbGVjdChlbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzZWxlY3Rpb24uc2VsZWN0KGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZVxuICAgIGlmICghaXNTZWxlY3RlZCkge1xuICAgICAgc2VsZWN0aW9uLnNlbGVjdChlbGVtZW50LCBhZGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3Rpb24uZGVzZWxlY3QoZWxlbWVudCk7XG4gICAgfVxuICB9KTtcbn1cblxuU2VsZWN0aW9uQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ3NlbGVjdGlvbicsXG4gICdjYW52YXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5J1xuXTtcblxuXG5mdW5jdGlvbiBpc1Nob3duKGVsZW1lbnQpIHtcbiAgcmV0dXJuICFlbGVtZW50LmhpZGRlbjtcbn1cbiIsImltcG9ydCB7XG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG52YXIgTUFSS0VSX0hPVkVSID0gJ2hvdmVyJyxcbiAgICBNQVJLRVJfU0VMRUNURUQgPSAnc2VsZWN0ZWQnO1xuXG5cbi8qKlxuICogQSBwbHVnaW4gdGhhdCBhZGRzIGEgdmlzaWJsZSBzZWxlY3Rpb24gVUkgdG8gc2hhcGVzIGFuZCBjb25uZWN0aW9uc1xuICogYnkgYXBwZW5kaW5nIHRoZSA8Y29kZT5ob3ZlcjwvY29kZT4gYW5kIDxjb2RlPnNlbGVjdGVkPC9jb2RlPiBjbGFzc2VzIHRvIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKlxuICogTWFrZXMgZWxlbWVudHMgc2VsZWN0YWJsZSwgdG9vLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50c1xuICogQHBhcmFtIHtTZWxlY3Rpb25TZXJ2aWNlfSBzZWxlY3Rpb25cbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU2VsZWN0aW9uVmlzdWFscyhldmVudHMsIGNhbnZhcywgc2VsZWN0aW9uLCBzdHlsZXMpIHtcblxuICB0aGlzLl9tdWx0aVNlbGVjdGlvbkJveCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gYWRkTWFya2VyKGUsIGNscykge1xuICAgIGNhbnZhcy5hZGRNYXJrZXIoZSwgY2xzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZU1hcmtlcihlLCBjbHMpIHtcbiAgICBjYW52YXMucmVtb3ZlTWFya2VyKGUsIGNscyk7XG4gIH1cblxuICBldmVudHMub24oJ2VsZW1lbnQuaG92ZXInLCBmdW5jdGlvbihldmVudCkge1xuICAgIGFkZE1hcmtlcihldmVudC5lbGVtZW50LCBNQVJLRVJfSE9WRVIpO1xuICB9KTtcblxuICBldmVudHMub24oJ2VsZW1lbnQub3V0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZW1vdmVNYXJrZXIoZXZlbnQuZWxlbWVudCwgTUFSS0VSX0hPVkVSKTtcbiAgfSk7XG5cbiAgZXZlbnRzLm9uKCdzZWxlY3Rpb24uY2hhbmdlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICBmdW5jdGlvbiBkZXNlbGVjdChzKSB7XG4gICAgICByZW1vdmVNYXJrZXIocywgTUFSS0VSX1NFTEVDVEVEKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZWxlY3Qocykge1xuICAgICAgYWRkTWFya2VyKHMsIE1BUktFUl9TRUxFQ1RFRCk7XG4gICAgfVxuXG4gICAgdmFyIG9sZFNlbGVjdGlvbiA9IGV2ZW50Lm9sZFNlbGVjdGlvbixcbiAgICAgICAgbmV3U2VsZWN0aW9uID0gZXZlbnQubmV3U2VsZWN0aW9uO1xuXG4gICAgZm9yRWFjaChvbGRTZWxlY3Rpb24sIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmIChuZXdTZWxlY3Rpb24uaW5kZXhPZihlKSA9PT0gLTEpIHtcbiAgICAgICAgZGVzZWxlY3QoZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmb3JFYWNoKG5ld1NlbGVjdGlvbiwgZnVuY3Rpb24oZSkge1xuICAgICAgaWYgKG9sZFNlbGVjdGlvbi5pbmRleE9mKGUpID09PSAtMSkge1xuICAgICAgICBzZWxlY3QoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5TZWxlY3Rpb25WaXN1YWxzLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnLFxuICAnc2VsZWN0aW9uJyxcbiAgJ3N0eWxlcydcbl07IiwiaW1wb3J0IEludGVyYWN0aW9uRXZlbnRzTW9kdWxlIGZyb20gJy4uL2ludGVyYWN0aW9uLWV2ZW50cyc7XG5pbXBvcnQgT3V0bGluZU1vZHVsZSBmcm9tICcuLi9vdXRsaW5lJztcblxuaW1wb3J0IFNlbGVjdGlvbiBmcm9tICcuL1NlbGVjdGlvbic7XG5pbXBvcnQgU2VsZWN0aW9uVmlzdWFscyBmcm9tICcuL1NlbGVjdGlvblZpc3VhbHMnO1xuaW1wb3J0IFNlbGVjdGlvbkJlaGF2aW9yIGZyb20gJy4vU2VsZWN0aW9uQmVoYXZpb3InO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFsgJ3NlbGVjdGlvblZpc3VhbHMnLCAnc2VsZWN0aW9uQmVoYXZpb3InIF0sXG4gIF9fZGVwZW5kc19fOiBbXG4gICAgSW50ZXJhY3Rpb25FdmVudHNNb2R1bGUsXG4gICAgT3V0bGluZU1vZHVsZVxuICBdLFxuICBzZWxlY3Rpb246IFsgJ3R5cGUnLCBTZWxlY3Rpb24gXSxcbiAgc2VsZWN0aW9uVmlzdWFsczogWyAndHlwZScsIFNlbGVjdGlvblZpc3VhbHMgXSxcbiAgc2VsZWN0aW9uQmVoYXZpb3I6IFsgJ3R5cGUnLCBTZWxlY3Rpb25CZWhhdmlvciBdXG59O1xuIiwiaW1wb3J0IFNuYXBDb250ZXh0IGZyb20gJy4vU25hcENvbnRleHQnO1xyXG5cclxuaW1wb3J0IHtcclxuICBnZXRDaGlsZHJlbixcclxuICBpc1NuYXBwZWQsXHJcbiAgbWlkXHJcbn0gZnJvbSAnLi9TbmFwVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBpc0NtZCB9IGZyb20gJy4uL2tleWJvYXJkL0tleWJvYXJkVXRpbCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGZvckVhY2gsXHJcbiAgaXNOdW1iZXJcclxufSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG52YXIgSElHSEVSX1BSSU9SSVRZID0gMTI1MDtcclxuXHJcblxyXG4vKipcclxuICogU25hcCBkdXJpbmcgY3JlYXRlIGFuZCBtb3ZlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBlbGVtZW50UmVnaXN0cnlcclxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcclxuICogQHBhcmFtIHtTbmFwcGluZ30gc25hcHBpbmdcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENyZWF0ZU1vdmVTbmFwcGluZyhlbGVtZW50UmVnaXN0cnksIGV2ZW50QnVzLCBzbmFwcGluZykge1xyXG4gIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgdGhpcy5fZWxlbWVudFJlZ2lzdHJ5ID0gZWxlbWVudFJlZ2lzdHJ5O1xyXG5cclxuICBldmVudEJ1cy5vbihbXHJcbiAgICAnY3JlYXRlLnN0YXJ0JyxcclxuICAgICdzaGFwZS5tb3ZlLnN0YXJ0J1xyXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICBzZWxmLmluaXRTbmFwKGV2ZW50KTtcclxuICB9KTtcclxuXHJcbiAgZXZlbnRCdXMub24oW1xyXG4gICAgJ2NyZWF0ZS5tb3ZlJyxcclxuICAgICdjcmVhdGUuZW5kJyxcclxuICAgICdzaGFwZS5tb3ZlLm1vdmUnLFxyXG4gICAgJ3NoYXBlLm1vdmUuZW5kJ1xyXG4gIF0sIEhJR0hFUl9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXHJcbiAgICAgICAgc25hcENvbnRleHQgPSBjb250ZXh0LnNuYXBDb250ZXh0LFxyXG4gICAgICAgIHRhcmdldCA9IGNvbnRleHQudGFyZ2V0O1xyXG5cclxuICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50ICYmIGlzQ21kKGV2ZW50Lm9yaWdpbmFsRXZlbnQpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNTbmFwcGVkKGV2ZW50KSB8fCAhdGFyZ2V0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgc25hcFBvaW50cyA9IHNuYXBDb250ZXh0LnBvaW50c0ZvclRhcmdldCh0YXJnZXQpO1xyXG5cclxuICAgIGlmICghc25hcFBvaW50cy5pbml0aWFsaXplZCkge1xyXG4gICAgICBzbmFwUG9pbnRzID0gc2VsZi5hZGRTbmFwVGFyZ2V0UG9pbnRzKHNuYXBQb2ludHMsIHNoYXBlLCB0YXJnZXQpO1xyXG5cclxuICAgICAgc25hcFBvaW50cy5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgc25hcHBpbmcuc25hcChldmVudCwgc25hcFBvaW50cyk7XHJcbiAgfSk7XHJcblxyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdjcmVhdGUuY2xlYW51cCcsXHJcbiAgICAnc2hhcGUubW92ZS5jbGVhbnVwJ1xyXG4gIF0sIGZ1bmN0aW9uKCkge1xyXG4gICAgc25hcHBpbmcuaGlkZSgpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5DcmVhdGVNb3ZlU25hcHBpbmcuJGluamVjdCA9IFtcclxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcclxuICAnZXZlbnRCdXMnLFxyXG4gICdzbmFwcGluZydcclxuXTtcclxuXHJcbkNyZWF0ZU1vdmVTbmFwcGluZy5wcm90b3R5cGUuaW5pdFNuYXAgPSBmdW5jdGlvbihldmVudCkge1xyXG4gIHZhciBlbGVtZW50UmVnaXN0cnkgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnk7XHJcblxyXG4gIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxyXG4gICAgICBzbmFwQ29udGV4dCA9IGNvbnRleHQuc25hcENvbnRleHQ7XHJcblxyXG4gIGlmICghc25hcENvbnRleHQpIHtcclxuICAgIHNuYXBDb250ZXh0ID0gY29udGV4dC5zbmFwQ29udGV4dCA9IG5ldyBTbmFwQ29udGV4dCgpO1xyXG4gIH1cclxuXHJcbiAgdmFyIHNoYXBlTWlkO1xyXG5cclxuICBpZiAoZWxlbWVudFJlZ2lzdHJ5LmdldChzaGFwZS5pZCkpIHtcclxuXHJcbiAgICAvLyBtb3ZlXHJcbiAgICBzaGFwZU1pZCA9IG1pZChzaGFwZSwgZXZlbnQpO1xyXG4gIH0gZWxzZSB7XHJcblxyXG4gICAgLy8gY3JlYXRlXHJcbiAgICBzaGFwZU1pZCA9IHtcclxuICAgICAgeDogZXZlbnQueCArIG1pZChzaGFwZSkueCxcclxuICAgICAgeTogZXZlbnQueSArIG1pZChzaGFwZSkueVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHZhciBzaGFwZVRvcExlZnQgPSB7XHJcbiAgICAgICAgeDogc2hhcGVNaWQueCAtIHNoYXBlLndpZHRoIC8gMixcclxuICAgICAgICB5OiBzaGFwZU1pZC55IC0gc2hhcGUuaGVpZ2h0IC8gMlxyXG4gICAgICB9LFxyXG4gICAgICBzaGFwZUJvdHRvbVJpZ2h0ID0ge1xyXG4gICAgICAgIHg6IHNoYXBlTWlkLnggKyBzaGFwZS53aWR0aCAvIDIsXHJcbiAgICAgICAgeTogc2hhcGVNaWQueSArIHNoYXBlLmhlaWdodCAvIDJcclxuICAgICAgfTtcclxuXHJcbiAgc25hcENvbnRleHQuc2V0U25hcE9yaWdpbignbWlkJywge1xyXG4gICAgeDogc2hhcGVNaWQueCAtIGV2ZW50LngsXHJcbiAgICB5OiBzaGFwZU1pZC55IC0gZXZlbnQueVxyXG4gIH0pO1xyXG5cclxuICAvLyBzbmFwIGxhYmVscyB0byBtaWQgb25seVxyXG4gIGlmIChpc0xhYmVsKHNoYXBlKSkge1xyXG4gICAgcmV0dXJuIHNuYXBDb250ZXh0O1xyXG4gIH1cclxuXHJcbiAgc25hcENvbnRleHQuc2V0U25hcE9yaWdpbigndG9wLWxlZnQnLCB7XHJcbiAgICB4OiBzaGFwZVRvcExlZnQueCAtIGV2ZW50LngsXHJcbiAgICB5OiBzaGFwZVRvcExlZnQueSAtIGV2ZW50LnlcclxuICB9KTtcclxuXHJcbiAgc25hcENvbnRleHQuc2V0U25hcE9yaWdpbignYm90dG9tLXJpZ2h0Jywge1xyXG4gICAgeDogc2hhcGVCb3R0b21SaWdodC54IC0gZXZlbnQueCxcclxuICAgIHk6IHNoYXBlQm90dG9tUmlnaHQueSAtIGV2ZW50LnlcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIHNuYXBDb250ZXh0O1xyXG59O1xyXG5cclxuQ3JlYXRlTW92ZVNuYXBwaW5nLnByb3RvdHlwZS5hZGRTbmFwVGFyZ2V0UG9pbnRzID0gZnVuY3Rpb24oc25hcFBvaW50cywgc2hhcGUsIHRhcmdldCkge1xyXG4gIHZhciBzbmFwVGFyZ2V0cyA9IHRoaXMuZ2V0U25hcFRhcmdldHMoc2hhcGUsIHRhcmdldCk7XHJcblxyXG4gIGZvckVhY2goc25hcFRhcmdldHMsIGZ1bmN0aW9uKHNuYXBUYXJnZXQpIHtcclxuXHJcbiAgICAvLyBoYW5kbGUgbGFiZWxzXHJcbiAgICBpZiAoaXNMYWJlbChzbmFwVGFyZ2V0KSkge1xyXG5cclxuICAgICAgaWYgKGlzTGFiZWwoc2hhcGUpKSB7XHJcbiAgICAgICAgc25hcFBvaW50cy5hZGQoJ21pZCcsIG1pZChzbmFwVGFyZ2V0KSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoYW5kbGUgY29ubmVjdGlvbnNcclxuICAgIGlmIChpc0Nvbm5lY3Rpb24oc25hcFRhcmdldCkpIHtcclxuXHJcbiAgICAgIC8vIGlnbm9yZSBzaW5nbGUgc2VnbWVudCBjb25uZWN0aW9uc1xyXG4gICAgICBpZiAoc25hcFRhcmdldC53YXlwb2ludHMubGVuZ3RoIDwgMykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gaWdub3JlIGZpcnN0IGFuZCBsYXN0IHdheXBvaW50XHJcbiAgICAgIHZhciB3YXlwb2ludHMgPSBzbmFwVGFyZ2V0LndheXBvaW50cy5zbGljZSgxLCAtMSk7XHJcblxyXG4gICAgICBmb3JFYWNoKHdheXBvaW50cywgZnVuY3Rpb24od2F5cG9pbnQpIHtcclxuICAgICAgICBzbmFwUG9pbnRzLmFkZCgnbWlkJywgd2F5cG9pbnQpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoYW5kbGUgc2hhcGVzXHJcbiAgICBzbmFwUG9pbnRzLmFkZCgnbWlkJywgbWlkKHNuYXBUYXJnZXQpKTtcclxuICB9KTtcclxuXHJcbiAgaWYgKCFpc051bWJlcihzaGFwZS54KSB8fCAhaXNOdW1iZXIoc2hhcGUueSkpIHtcclxuICAgIHJldHVybiBzbmFwUG9pbnRzO1xyXG4gIH1cclxuXHJcbiAgLy8gc25hcCB0byBvcmlnaW5hbCBwb3NpdGlvbiB3aGVuIG1vdmluZ1xyXG4gIGlmICh0aGlzLl9lbGVtZW50UmVnaXN0cnkuZ2V0KHNoYXBlLmlkKSkge1xyXG4gICAgc25hcFBvaW50cy5hZGQoJ21pZCcsIG1pZChzaGFwZSkpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHNuYXBQb2ludHM7XHJcbn07XHJcblxyXG5DcmVhdGVNb3ZlU25hcHBpbmcucHJvdG90eXBlLmdldFNuYXBUYXJnZXRzID0gZnVuY3Rpb24oc2hhcGUsIHRhcmdldCkge1xyXG4gIHJldHVybiBnZXRDaGlsZHJlbih0YXJnZXQpLmZpbHRlcihmdW5jdGlvbihjaGlsZCkge1xyXG4gICAgcmV0dXJuICFpc0hpZGRlbihjaGlsZCk7XHJcbiAgfSk7XHJcbn07XHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cclxuXHJcbmZ1bmN0aW9uIGlzQ29ubmVjdGlvbihlbGVtZW50KSB7XHJcbiAgcmV0dXJuICEhZWxlbWVudC53YXlwb2ludHM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSGlkZGVuKGVsZW1lbnQpIHtcclxuICByZXR1cm4gISFlbGVtZW50LmhpZGRlbjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNMYWJlbChlbGVtZW50KSB7XHJcbiAgcmV0dXJuICEhZWxlbWVudC5sYWJlbFRhcmdldDtcclxufSIsImltcG9ydCBTbmFwQ29udGV4dCBmcm9tICcuL1NuYXBDb250ZXh0JztcclxuXHJcbmltcG9ydCB7XHJcbiAgYm90dG9tUmlnaHQsXHJcbiAgZ2V0Q2hpbGRyZW4sXHJcbiAgaXNTbmFwcGVkLFxyXG4gIHNldFNuYXBwZWQsXHJcbiAgdG9wTGVmdCxcclxufSBmcm9tICcuL1NuYXBVdGlsJztcclxuXHJcbmltcG9ydCB7IGlzQ21kIH0gZnJvbSAnLi4va2V5Ym9hcmQvS2V5Ym9hcmRVdGlsJztcclxuXHJcbmltcG9ydCB7XHJcbiAgYXNUUkJMLFxyXG4gIGdldE1pZFxyXG59IGZyb20gJy4uLy4uL2xheW91dC9MYXlvdXRVdGlsJztcclxuXHJcbmltcG9ydCB7IGZvckVhY2ggfSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG52YXIgSElHSEVSX1BSSU9SSVRZID0gMTI1MDtcclxuXHJcblxyXG4vKipcclxuICogU25hcCBkdXJpbmcgcmVzaXplLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xyXG4gKiBAcGFyYW0ge1NuYXBwaW5nfSBzbmFwcGluZ1xyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzaXplU25hcHBpbmcoZXZlbnRCdXMsIHNuYXBwaW5nKSB7XHJcbiAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICBldmVudEJ1cy5vbihbICdyZXNpemUuc3RhcnQnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICBzZWxmLmluaXRTbmFwKGV2ZW50KTtcclxuICB9KTtcclxuXHJcbiAgZXZlbnRCdXMub24oW1xyXG4gICAgJ3Jlc2l6ZS5tb3ZlJyxcclxuICAgICdyZXNpemUuZW5kJyxcclxuICBdLCBISUdIRVJfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxyXG4gICAgICAgIHBhcmVudCA9IHNoYXBlLnBhcmVudCxcclxuICAgICAgICBkaXJlY3Rpb24gPSBjb250ZXh0LmRpcmVjdGlvbixcclxuICAgICAgICBzbmFwQ29udGV4dCA9IGNvbnRleHQuc25hcENvbnRleHQ7XHJcblxyXG4gICAgaWYgKGV2ZW50Lm9yaWdpbmFsRXZlbnQgJiYgaXNDbWQoZXZlbnQub3JpZ2luYWxFdmVudCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc1NuYXBwZWQoZXZlbnQpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgc25hcFBvaW50cyA9IHNuYXBDb250ZXh0LnBvaW50c0ZvclRhcmdldChwYXJlbnQpO1xyXG5cclxuICAgIGlmICghc25hcFBvaW50cy5pbml0aWFsaXplZCkge1xyXG4gICAgICBzbmFwUG9pbnRzID0gc2VsZi5hZGRTbmFwVGFyZ2V0UG9pbnRzKHNuYXBQb2ludHMsIHNoYXBlLCBwYXJlbnQsIGRpcmVjdGlvbik7XHJcblxyXG4gICAgICBzbmFwUG9pbnRzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNIb3Jpem9udGFsKGRpcmVjdGlvbikpIHtcclxuICAgICAgc2V0U25hcHBlZChldmVudCwgJ3gnLCBldmVudC54KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNWZXJ0aWNhbChkaXJlY3Rpb24pKSB7XHJcbiAgICAgIHNldFNuYXBwZWQoZXZlbnQsICd5JywgZXZlbnQueSk7XHJcbiAgICB9XHJcblxyXG4gICAgc25hcHBpbmcuc25hcChldmVudCwgc25hcFBvaW50cyk7XHJcbiAgfSk7XHJcblxyXG4gIGV2ZW50QnVzLm9uKFsgJ3Jlc2l6ZS5jbGVhbnVwJyBdLCBmdW5jdGlvbigpIHtcclxuICAgIHNuYXBwaW5nLmhpZGUoKTtcclxuICB9KTtcclxufVxyXG5cclxuUmVzaXplU25hcHBpbmcucHJvdG90eXBlLmluaXRTbmFwID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcclxuICAgICAgZGlyZWN0aW9uID0gY29udGV4dC5kaXJlY3Rpb24sXHJcbiAgICAgIHNuYXBDb250ZXh0ID0gY29udGV4dC5zbmFwQ29udGV4dDtcclxuXHJcbiAgaWYgKCFzbmFwQ29udGV4dCkge1xyXG4gICAgc25hcENvbnRleHQgPSBjb250ZXh0LnNuYXBDb250ZXh0ID0gbmV3IFNuYXBDb250ZXh0KCk7XHJcbiAgfVxyXG5cclxuICB2YXIgc25hcE9yaWdpbiA9IGdldFNuYXBPcmlnaW4oc2hhcGUsIGRpcmVjdGlvbik7XHJcblxyXG4gIHNuYXBDb250ZXh0LnNldFNuYXBPcmlnaW4oJ2Nvcm5lcicsIHtcclxuICAgIHg6IHNuYXBPcmlnaW4ueCAtIGV2ZW50LngsXHJcbiAgICB5OiBzbmFwT3JpZ2luLnkgLSBldmVudC55XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBzbmFwQ29udGV4dDtcclxufTtcclxuXHJcblJlc2l6ZVNuYXBwaW5nLnByb3RvdHlwZS5hZGRTbmFwVGFyZ2V0UG9pbnRzID0gZnVuY3Rpb24oc25hcFBvaW50cywgc2hhcGUsIHRhcmdldCwgZGlyZWN0aW9uKSB7XHJcbiAgdmFyIHNuYXBUYXJnZXRzID0gdGhpcy5nZXRTbmFwVGFyZ2V0cyhzaGFwZSwgdGFyZ2V0KTtcclxuXHJcbiAgZm9yRWFjaChzbmFwVGFyZ2V0cywgZnVuY3Rpb24oc25hcFRhcmdldCkge1xyXG4gICAgc25hcFBvaW50cy5hZGQoJ2Nvcm5lcicsIGJvdHRvbVJpZ2h0KHNuYXBUYXJnZXQpKTtcclxuICAgIHNuYXBQb2ludHMuYWRkKCdjb3JuZXInLCB0b3BMZWZ0KHNuYXBUYXJnZXQpKTtcclxuICB9KTtcclxuXHJcbiAgc25hcFBvaW50cy5hZGQoJ2Nvcm5lcicsIGdldFNuYXBPcmlnaW4oc2hhcGUsIGRpcmVjdGlvbikpO1xyXG5cclxuICByZXR1cm4gc25hcFBvaW50cztcclxufTtcclxuXHJcblJlc2l6ZVNuYXBwaW5nLiRpbmplY3QgPSBbXHJcbiAgJ2V2ZW50QnVzJyxcclxuICAnc25hcHBpbmcnXHJcbl07XHJcblxyXG5SZXNpemVTbmFwcGluZy5wcm90b3R5cGUuZ2V0U25hcFRhcmdldHMgPSBmdW5jdGlvbihzaGFwZSwgdGFyZ2V0KSB7XHJcbiAgcmV0dXJuIGdldENoaWxkcmVuKHRhcmdldCkuZmlsdGVyKGZ1bmN0aW9uKGNoaWxkKSB7XHJcbiAgICByZXR1cm4gIWlzQXR0YWNoZWQoY2hpbGQsIHNoYXBlKVxyXG4gICAgICAmJiAhaXNDb25uZWN0aW9uKGNoaWxkKVxyXG4gICAgICAmJiAhaXNIaWRkZW4oY2hpbGQpXHJcbiAgICAgICYmICFpc0xhYmVsKGNoaWxkKTtcclxuICB9KTtcclxufTtcclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5cclxuZnVuY3Rpb24gZ2V0U25hcE9yaWdpbihzaGFwZSwgZGlyZWN0aW9uKSB7XHJcbiAgdmFyIG1pZCA9IGdldE1pZChzaGFwZSksXHJcbiAgICAgIHRyYmwgPSBhc1RSQkwoc2hhcGUpO1xyXG5cclxuICB2YXIgc25hcE9yaWdpbiA9IHtcclxuICAgIHg6IG1pZC54LFxyXG4gICAgeTogbWlkLnlcclxuICB9O1xyXG5cclxuICBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ24nKSAhPT0gLTEpIHtcclxuICAgIHNuYXBPcmlnaW4ueSA9IHRyYmwudG9wO1xyXG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ3MnKSAhPT0gLTEpIHtcclxuICAgIHNuYXBPcmlnaW4ueSA9IHRyYmwuYm90dG9tO1xyXG4gIH1cclxuXHJcbiAgaWYgKGRpcmVjdGlvbi5pbmRleE9mKCdlJykgIT09IC0xKSB7XHJcbiAgICBzbmFwT3JpZ2luLnggPSB0cmJsLnJpZ2h0O1xyXG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uLmluZGV4T2YoJ3cnKSAhPT0gLTEpIHtcclxuICAgIHNuYXBPcmlnaW4ueCA9IHRyYmwubGVmdDtcclxuICB9XHJcblxyXG4gIHJldHVybiBzbmFwT3JpZ2luO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0F0dGFjaGVkKGVsZW1lbnQsIGhvc3QpIHtcclxuICByZXR1cm4gZWxlbWVudC5ob3N0ID09PSBob3N0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiAhIWVsZW1lbnQud2F5cG9pbnRzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0hpZGRlbihlbGVtZW50KSB7XHJcbiAgcmV0dXJuICEhZWxlbWVudC5oaWRkZW47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTGFiZWwoZWxlbWVudCkge1xyXG4gIHJldHVybiAhIWVsZW1lbnQubGFiZWxUYXJnZXQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSG9yaXpvbnRhbChkaXJlY3Rpb24pIHtcclxuICByZXR1cm4gZGlyZWN0aW9uID09PSAnbicgfHwgZGlyZWN0aW9uID09PSAncyc7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzVmVydGljYWwoZGlyZWN0aW9uKSB7XHJcbiAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gJ2UnIHx8IGRpcmVjdGlvbiA9PT0gJ3cnO1xyXG59IiwiaW1wb3J0IHtcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIHNuYXBUb1xufSBmcm9tICcuL1NuYXBVdGlsJztcblxuXG4vKipcbiAqIEEgc25hcCBjb250ZXh0LCBjb250YWluaW5nIHRoZSAocG9zc2libHkgaW5jb21wbGV0ZSlcbiAqIG1hcHBpbmdzIG9mIGRyb3AgdGFyZ2V0cyAodG8gaWRlbnRpZnkgdGhlIHNuYXBwaW5nKVxuICogdG8gY29tcHV0ZWQgc25hcCBwb2ludHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNuYXBDb250ZXh0KCkge1xuXG4gIC8qKlxuICAgKiBNYXA8U3RyaW5nLCBTbmFwUG9pbnRzPiBtYXBwaW5nIGRyb3AgdGFyZ2V0cyB0b1xuICAgKiBhIGxpc3Qgb2YgcG9zc2libGUgc25hcHBpbmdzLlxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdGhpcy5fdGFyZ2V0cyA9IHt9O1xuXG4gIC8qKlxuICAgKiBNYXA8U3RyaW5nLCBQb2ludD4gaW5pdGlhbCBwb3NpdGlvbmluZyBvZiBlbGVtZW50XG4gICAqIHJlZ2FyZGluZyB2YXJpb3VzIHNuYXAgZGlyZWN0aW9ucy5cbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMuX3NuYXBPcmlnaW5zID0ge307XG5cbiAgLyoqXG4gICAqIExpc3Qgb2Ygc25hcCBsb2NhdGlvbnNcbiAgICpcbiAgICogQHR5cGUge0FycmF5PHN0cmluZz59XG4gICAqL1xuICB0aGlzLl9zbmFwTG9jYXRpb25zID0gW107XG5cbiAgLyoqXG4gICAqIE1hcDxTdHJpbmcsIEFycmF5PFBvaW50Pj4gb2YgZGVmYXVsdCBzbmFwcGluZyBsb2NhdGlvbnNcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMuX2RlZmF1bHRTbmFwcyA9IHt9O1xufVxuXG5cblNuYXBDb250ZXh0LnByb3RvdHlwZS5nZXRTbmFwT3JpZ2luID0gZnVuY3Rpb24oc25hcExvY2F0aW9uKSB7XG4gIHJldHVybiB0aGlzLl9zbmFwT3JpZ2luc1tzbmFwTG9jYXRpb25dO1xufTtcblxuXG5TbmFwQ29udGV4dC5wcm90b3R5cGUuc2V0U25hcE9yaWdpbiA9IGZ1bmN0aW9uKHNuYXBMb2NhdGlvbiwgaW5pdGlhbFZhbHVlKSB7XG4gIHRoaXMuX3NuYXBPcmlnaW5zW3NuYXBMb2NhdGlvbl0gPSBpbml0aWFsVmFsdWU7XG5cbiAgaWYgKHRoaXMuX3NuYXBMb2NhdGlvbnMuaW5kZXhPZihzbmFwTG9jYXRpb24pID09PSAtMSkge1xuICAgIHRoaXMuX3NuYXBMb2NhdGlvbnMucHVzaChzbmFwTG9jYXRpb24pO1xuICB9XG59O1xuXG5cblNuYXBDb250ZXh0LnByb3RvdHlwZS5hZGREZWZhdWx0U25hcCA9IGZ1bmN0aW9uKHR5cGUsIHBvaW50KSB7XG5cbiAgdmFyIHNuYXBWYWx1ZXMgPSB0aGlzLl9kZWZhdWx0U25hcHNbdHlwZV07XG5cbiAgaWYgKCFzbmFwVmFsdWVzKSB7XG4gICAgc25hcFZhbHVlcyA9IHRoaXMuX2RlZmF1bHRTbmFwc1t0eXBlXSA9IFtdO1xuICB9XG5cbiAgc25hcFZhbHVlcy5wdXNoKHBvaW50KTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGEgbnVtYmVyIG9mIGluaXRpYWxpemVkIHNuYXBzLCBpLmUuIHNuYXAgbG9jYXRpb25zIHN1Y2ggYXNcbiAqIHRvcC1sZWZ0LCBtaWQsIGJvdHRvbS1yaWdodCBhbmQgc28gZm9ydGguXG4gKlxuICogQHJldHVybiB7QXJyYXk8c3RyaW5nPn0gc25hcExvY2F0aW9uc1xuICovXG5TbmFwQ29udGV4dC5wcm90b3R5cGUuZ2V0U25hcExvY2F0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fc25hcExvY2F0aW9ucztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzbmFwIGxvY2F0aW9ucyBmb3IgdGhpcyBjb250ZXh0LlxuICpcbiAqIFRoZSBvcmRlciBvZiBsb2NhdGlvbnMgZGV0ZXJtaW5lcyBwcmVjZWRlbmNlLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gc25hcExvY2F0aW9uc1xuICovXG5TbmFwQ29udGV4dC5wcm90b3R5cGUuc2V0U25hcExvY2F0aW9ucyA9IGZ1bmN0aW9uKHNuYXBMb2NhdGlvbnMpIHtcbiAgdGhpcy5fc25hcExvY2F0aW9ucyA9IHNuYXBMb2NhdGlvbnM7XG59O1xuXG4vKipcbiAqIEdldCBzbmFwIHBvaW50cyBmb3IgYSBnaXZlbiB0YXJnZXRcbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR8c3RyaW5nfSB0YXJnZXRcbiAqL1xuU25hcENvbnRleHQucHJvdG90eXBlLnBvaW50c0ZvclRhcmdldCA9IGZ1bmN0aW9uKHRhcmdldCkge1xuXG4gIHZhciB0YXJnZXRJZCA9IHRhcmdldC5pZCB8fCB0YXJnZXQ7XG5cbiAgdmFyIHNuYXBQb2ludHMgPSB0aGlzLl90YXJnZXRzW3RhcmdldElkXTtcblxuICBpZiAoIXNuYXBQb2ludHMpIHtcbiAgICBzbmFwUG9pbnRzID0gdGhpcy5fdGFyZ2V0c1t0YXJnZXRJZF0gPSBuZXcgU25hcFBvaW50cygpO1xuICAgIHNuYXBQb2ludHMuaW5pdERlZmF1bHRzKHRoaXMuX2RlZmF1bHRTbmFwcyk7XG4gIH1cblxuICByZXR1cm4gc25hcFBvaW50cztcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBzbmFwIHBvaW50cyBhbmQgaW5pdGlhbGl6ZXMgdGhlbSB3aXRoIHRoZVxuICogZ2l2ZW4gZGVmYXVsdCB2YWx1ZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBBcnJheTxQb2ludD4+fSBbZGVmYXVsdFBvaW50c11cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNuYXBQb2ludHMoZGVmYXVsdFNuYXBzKSB7XG5cbiAgLyoqXG4gICAqIE1hcDxTdHJpbmcsIE1hcDwoeHx5KSwgQXJyYXk8bnVtYmVyPj4+IG1hcHBpbmcgc25hcCBsb2NhdGlvbnMsXG4gICAqIGkuZS4gdG9wLWxlZnQsIGJvdHRvbS1yaWdodCwgY2VudGVyIHRvIGFjdHVhbCBzbmFwIHZhbHVlcy5cbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMuX3NuYXBWYWx1ZXMgPSB7fTtcbn1cblxuU25hcFBvaW50cy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oc25hcExvY2F0aW9uLCBwb2ludCkge1xuXG4gIHZhciBzbmFwVmFsdWVzID0gdGhpcy5fc25hcFZhbHVlc1tzbmFwTG9jYXRpb25dO1xuXG4gIGlmICghc25hcFZhbHVlcykge1xuICAgIHNuYXBWYWx1ZXMgPSB0aGlzLl9zbmFwVmFsdWVzW3NuYXBMb2NhdGlvbl0gPSB7IHg6IFtdLCB5OiBbXSB9O1xuICB9XG5cbiAgaWYgKHNuYXBWYWx1ZXMueC5pbmRleE9mKHBvaW50LngpID09PSAtMSkge1xuICAgIHNuYXBWYWx1ZXMueC5wdXNoKHBvaW50LngpO1xuICB9XG5cbiAgaWYgKHNuYXBWYWx1ZXMueS5pbmRleE9mKHBvaW50LnkpID09PSAtMSkge1xuICAgIHNuYXBWYWx1ZXMueS5wdXNoKHBvaW50LnkpO1xuICB9XG59O1xuXG5cblNuYXBQb2ludHMucHJvdG90eXBlLnNuYXAgPSBmdW5jdGlvbihwb2ludCwgc25hcExvY2F0aW9uLCBheGlzLCB0b2xlcmFuY2UpIHtcbiAgdmFyIHNuYXBwaW5nVmFsdWVzID0gdGhpcy5fc25hcFZhbHVlc1tzbmFwTG9jYXRpb25dO1xuXG4gIHJldHVybiBzbmFwcGluZ1ZhbHVlcyAmJiBzbmFwVG8ocG9pbnRbYXhpc10sIHNuYXBwaW5nVmFsdWVzW2F4aXNdLCB0b2xlcmFuY2UpO1xufTtcblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbnVtYmVyIG9mIGRlZmF1bHQgc25hcHBpbmcgcG9pbnRzLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gZGVmYXVsdFNuYXBzXG4gKi9cblNuYXBQb2ludHMucHJvdG90eXBlLmluaXREZWZhdWx0cyA9IGZ1bmN0aW9uKGRlZmF1bHRTbmFwcykge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBmb3JFYWNoKGRlZmF1bHRTbmFwcyB8fCB7fSwgZnVuY3Rpb24oc25hcFBvaW50cywgc25hcExvY2F0aW9uKSB7XG4gICAgZm9yRWFjaChzbmFwUG9pbnRzLCBmdW5jdGlvbihwb2ludCkge1xuICAgICAgc2VsZi5hZGQoc25hcExvY2F0aW9uLCBwb2ludCk7XG4gICAgfSk7XG4gIH0pO1xufTsiLCJ2YXIgYWJzID0gTWF0aC5hYnMsXG4gICAgcm91bmQgPSBNYXRoLnJvdW5kO1xuXG5cbi8qKlxuICogU25hcCB2YWx1ZSB0byBhIGNvbGxlY3Rpb24gb2YgcmVmZXJlbmNlIHZhbHVlcy5cbiAqXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0gIHtBcnJheTxudW1iZXI+fSB2YWx1ZXNcbiAqIEBwYXJhbSAge251bWJlcn0gW3RvbGVyYW5jZT0xMF1cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSB2YWx1ZSB3ZSBzbmFwcGVkIHRvIG9yIG51bGwsIGlmIG5vbmUgc25hcHBlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gc25hcFRvKHZhbHVlLCB2YWx1ZXMsIHRvbGVyYW5jZSkge1xuICB0b2xlcmFuY2UgPSB0b2xlcmFuY2UgPT09IHVuZGVmaW5lZCA/IDEwIDogdG9sZXJhbmNlO1xuXG4gIHZhciBpZHgsIHNuYXBWYWx1ZTtcblxuICBmb3IgKGlkeCA9IDA7IGlkeCA8IHZhbHVlcy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgc25hcFZhbHVlID0gdmFsdWVzW2lkeF07XG5cbiAgICBpZiAoYWJzKHNuYXBWYWx1ZSAtIHZhbHVlKSA8PSB0b2xlcmFuY2UpIHtcbiAgICAgIHJldHVybiBzbmFwVmFsdWU7XG4gICAgfVxuICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcExlZnQoYm91bmRzKSB7XG4gIHJldHVybiB7XG4gICAgeDogYm91bmRzLngsXG4gICAgeTogYm91bmRzLnlcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcFJpZ2h0KGJvdW5kcykge1xuICByZXR1cm4ge1xuICAgIHg6IGJvdW5kcy54ICsgYm91bmRzLndpZHRoLFxuICAgIHk6IGJvdW5kcy55XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBib3R0b21MZWZ0KGJvdW5kcykge1xuICByZXR1cm4ge1xuICAgIHg6IGJvdW5kcy54LFxuICAgIHk6IGJvdW5kcy55ICsgYm91bmRzLmhlaWdodFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm90dG9tUmlnaHQoYm91bmRzKSB7XG4gIHJldHVybiB7XG4gICAgeDogYm91bmRzLnggKyBib3VuZHMud2lkdGgsXG4gICAgeTogYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtaWQoYm91bmRzLCBkZWZhdWx0VmFsdWUpIHtcblxuICBpZiAoIWJvdW5kcyB8fCBpc05hTihib3VuZHMueCkgfHwgaXNOYU4oYm91bmRzLnkpKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoYm91bmRzLnggKyBib3VuZHMud2lkdGggLyAyKSxcbiAgICB5OiByb3VuZChib3VuZHMueSArIGJvdW5kcy5oZWlnaHQgLyAyKVxuICB9O1xufVxuXG5cbi8qKlxuICogUmV0cmlldmUgdGhlIHNuYXAgc3RhdGUgb2YgdGhlIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSAge0V2ZW50fSBldmVudFxuICogQHBhcmFtICB7c3RyaW5nfSBheGlzXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHNuYXBwZWQgc3RhdGVcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NuYXBwZWQoZXZlbnQsIGF4aXMpIHtcbiAgdmFyIHNuYXBwZWQgPSBldmVudC5zbmFwcGVkO1xuXG4gIGlmICghc25hcHBlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYXhpcyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gc25hcHBlZFtheGlzXTtcbiAgfVxuXG4gIHJldHVybiBzbmFwcGVkLnggJiYgc25hcHBlZC55O1xufVxuXG5cbi8qKlxuICogU2V0IHRoZSBnaXZlbiBldmVudCBhcyBzbmFwcGVkLlxuICpcbiAqIFRoaXMgbWV0aG9kIG1heSBjaGFuZ2UgdGhlIHggYW5kL29yIHkgcG9zaXRpb24gb2YgdGhlIHNoYXBlXG4gKiBmcm9tIHRoZSBnaXZlbiBldmVudCFcbiAqXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICogQHBhcmFtIHtzdHJpbmd9IGF4aXNcbiAqIEBwYXJhbSB7bnVtYmVyfGJvb2xlYW59IHZhbHVlXG4gKlxuICogQHJldHVybiB7bnVtYmVyfSBvbGQgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFNuYXBwZWQoZXZlbnQsIGF4aXMsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgYXhpcyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2F4aXMgbXVzdCBiZSBpbiBbeCwgeV0nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInICYmIHZhbHVlICE9PSBmYWxzZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndmFsdWUgbXVzdCBiZSBOdW1iZXIgb3IgZmFsc2UnKTtcbiAgfVxuXG4gIHZhciBkZWx0YSxcbiAgICAgIHByZXZpb3VzVmFsdWUgPSBldmVudFtheGlzXTtcblxuICB2YXIgc25hcHBlZCA9IGV2ZW50LnNuYXBwZWQgPSAoZXZlbnQuc25hcHBlZCB8fCB7fSk7XG5cblxuICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgc25hcHBlZFtheGlzXSA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHNuYXBwZWRbYXhpc10gPSB0cnVlO1xuXG4gICAgZGVsdGEgPSB2YWx1ZSAtIHByZXZpb3VzVmFsdWU7XG5cbiAgICBldmVudFtheGlzXSArPSBkZWx0YTtcbiAgICBldmVudFsnZCcgKyBheGlzXSArPSBkZWx0YTtcbiAgfVxuXG4gIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuXG4vKipcbiAqIEdldCBjaGlsZHJlbiBvZiBhIHNoYXBlLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBwYXJlbnRcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlfGRqcy5tb2RlbC5Db25uZWN0aW9uPn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoaWxkcmVuKHBhcmVudCkge1xuICByZXR1cm4gcGFyZW50LmNoaWxkcmVuIHx8IFtdO1xufSIsImltcG9ydCB7XG4gIGJpbmQsXG4gIGRlYm91bmNlLFxuICBmb3JFYWNoLFxuICBpc051bWJlcixcbiAgaXNPYmplY3Rcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBpc1NuYXBwZWQsXG4gIHNldFNuYXBwZWRcbn0gZnJvbSAnLi9TbmFwVXRpbCc7XG5cbmltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY2xhc3NlcyBhcyBzdmdDbGFzc2VzLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxudmFyIFNOQVBfVE9MRVJBTkNFID0gNztcblxuZXhwb3J0IHZhciBTTkFQX0xJTkVfSElERV9ERUxBWSA9IDEwMDA7XG5cblxuLyoqXG4gKiBHZW5lcmljIHNuYXBwaW5nIGZlYXR1cmUuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU25hcHBpbmcoY2FudmFzKSB7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcblxuICAvLyBkZWxheSBoaWRlIGJ5IDEwMDAgc2Vjb25kcyBzaW5jZSBsYXN0IHNuYXBcbiAgdGhpcy5fYXN5bmNIaWRlID0gZGVib3VuY2UoYmluZCh0aGlzLmhpZGUsIHRoaXMpLCBTTkFQX0xJTkVfSElERV9ERUxBWSk7XG59XG5cblNuYXBwaW5nLiRpbmplY3QgPSBbICdjYW52YXMnIF07XG5cbi8qKlxuICogU25hcCBhbiBldmVudCB0byBnaXZlbiBzbmFwIHBvaW50cy5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICogQHBhcmFtIHtTbmFwUG9pbnRzfSBzbmFwUG9pbnRzXG4gKi9cblNuYXBwaW5nLnByb3RvdHlwZS5zbmFwID0gZnVuY3Rpb24oZXZlbnQsIHNuYXBQb2ludHMpIHtcbiAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgc25hcENvbnRleHQgPSBjb250ZXh0LnNuYXBDb250ZXh0LFxuICAgICAgc25hcExvY2F0aW9ucyA9IHNuYXBDb250ZXh0LmdldFNuYXBMb2NhdGlvbnMoKTtcblxuICB2YXIgc25hcHBpbmcgPSB7XG4gICAgeDogaXNTbmFwcGVkKGV2ZW50LCAneCcpLFxuICAgIHk6IGlzU25hcHBlZChldmVudCwgJ3knKVxuICB9O1xuXG4gIGZvckVhY2goc25hcExvY2F0aW9ucywgZnVuY3Rpb24obG9jYXRpb24pIHtcbiAgICB2YXIgc25hcE9yaWdpbiA9IHNuYXBDb250ZXh0LmdldFNuYXBPcmlnaW4obG9jYXRpb24pO1xuXG4gICAgdmFyIHNuYXBDdXJyZW50ID0ge1xuICAgICAgeDogZXZlbnQueCArIHNuYXBPcmlnaW4ueCxcbiAgICAgIHk6IGV2ZW50LnkgKyBzbmFwT3JpZ2luLnlcbiAgICB9O1xuXG4gICAgLy8gc25hcCBib3RoIGF4aXMgaWYgbm90IHNuYXBwZWQgYWxyZWFkeVxuICAgIGZvckVhY2goWyAneCcsICd5JyBdLCBmdW5jdGlvbihheGlzKSB7XG4gICAgICB2YXIgbG9jYXRpb25TbmFwcGluZztcblxuICAgICAgaWYgKCFzbmFwcGluZ1theGlzXSkge1xuICAgICAgICBsb2NhdGlvblNuYXBwaW5nID0gc25hcFBvaW50cy5zbmFwKHNuYXBDdXJyZW50LCBsb2NhdGlvbiwgYXhpcywgU05BUF9UT0xFUkFOQ0UpO1xuXG4gICAgICAgIGlmIChsb2NhdGlvblNuYXBwaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzbmFwcGluZ1theGlzXSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBsb2NhdGlvblNuYXBwaW5nLFxuICAgICAgICAgICAgb3JpZ2luVmFsdWU6IGxvY2F0aW9uU25hcHBpbmcgLSBzbmFwT3JpZ2luW2F4aXNdXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gbm8gbmVlZCB0byBjb250aW51ZSBzbmFwcGluZ1xuICAgIGlmIChzbmFwcGluZy54ICYmIHNuYXBwaW5nLnkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHNob3cgc25hcCBsaW5lc1xuICB0aGlzLnNob3dTbmFwTGluZSgndmVydGljYWwnLCBzbmFwcGluZy54ICYmIHNuYXBwaW5nLngudmFsdWUpO1xuICB0aGlzLnNob3dTbmFwTGluZSgnaG9yaXpvbnRhbCcsIHNuYXBwaW5nLnkgJiYgc25hcHBpbmcueS52YWx1ZSk7XG5cbiAgLy8gc25hcCBldmVudFxuICBmb3JFYWNoKFsgJ3gnLCAneScgXSwgZnVuY3Rpb24oYXhpcykge1xuICAgIHZhciBheGlzU25hcHBpbmcgPSBzbmFwcGluZ1theGlzXTtcblxuICAgIGlmIChpc09iamVjdChheGlzU25hcHBpbmcpKSB7XG4gICAgICBzZXRTbmFwcGVkKGV2ZW50LCBheGlzLCBheGlzU25hcHBpbmcub3JpZ2luVmFsdWUpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5TbmFwcGluZy5wcm90b3R5cGUuX2NyZWF0ZUxpbmUgPSBmdW5jdGlvbihvcmllbnRhdGlvbikge1xuICB2YXIgcm9vdCA9IHRoaXMuX2NhbnZhcy5nZXRMYXllcignc25hcCcpO1xuXG4gIHZhciBsaW5lID0gc3ZnQ3JlYXRlKCdwYXRoJyk7XG5cbiAgc3ZnQXR0cihsaW5lLCB7IGQ6ICdNMCwwIEwwLDAnIH0pO1xuXG4gIHN2Z0NsYXNzZXMobGluZSkuYWRkKCdkanMtc25hcC1saW5lJyk7XG5cbiAgc3ZnQXBwZW5kKHJvb3QsIGxpbmUpO1xuXG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbihwb3NpdGlvbikge1xuXG4gICAgICBpZiAoIWlzTnVtYmVyKHBvc2l0aW9uKSkge1xuICAgICAgICBzdmdBdHRyKGxpbmUsIHsgZGlzcGxheTogJ25vbmUnIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBzdmdBdHRyKGxpbmUsIHtcbiAgICAgICAgICAgIGQ6ICdNLTEwMDAwMCwnICsgcG9zaXRpb24gKyAnIEwrMTAwMDAwLCcgKyBwb3NpdGlvbixcbiAgICAgICAgICAgIGRpc3BsYXk6ICcnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3ZnQXR0cihsaW5lLCB7XG4gICAgICAgICAgICBkOiAnTSAnICsgcG9zaXRpb24gKyAnLC0xMDAwMDAgTCAnICsgcG9zaXRpb24gKyAnLCArMTAwMDAwJyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICcnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG5TbmFwcGluZy5wcm90b3R5cGUuX2NyZWF0ZVNuYXBMaW5lcyA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9zbmFwTGluZXMgPSB7XG4gICAgaG9yaXpvbnRhbDogdGhpcy5fY3JlYXRlTGluZSgnaG9yaXpvbnRhbCcpLFxuICAgIHZlcnRpY2FsOiB0aGlzLl9jcmVhdGVMaW5lKCd2ZXJ0aWNhbCcpXG4gIH07XG59O1xuXG5TbmFwcGluZy5wcm90b3R5cGUuc2hvd1NuYXBMaW5lID0gZnVuY3Rpb24ob3JpZW50YXRpb24sIHBvc2l0aW9uKSB7XG5cbiAgdmFyIGxpbmUgPSB0aGlzLmdldFNuYXBMaW5lKG9yaWVudGF0aW9uKTtcblxuICBpZiAobGluZSkge1xuICAgIGxpbmUudXBkYXRlKHBvc2l0aW9uKTtcbiAgfVxuXG4gIHRoaXMuX2FzeW5jSGlkZSgpO1xufTtcblxuU25hcHBpbmcucHJvdG90eXBlLmdldFNuYXBMaW5lID0gZnVuY3Rpb24ob3JpZW50YXRpb24pIHtcbiAgaWYgKCF0aGlzLl9zbmFwTGluZXMpIHtcbiAgICB0aGlzLl9jcmVhdGVTbmFwTGluZXMoKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9zbmFwTGluZXNbb3JpZW50YXRpb25dO1xufTtcblxuU25hcHBpbmcucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbigpIHtcbiAgZm9yRWFjaCh0aGlzLl9zbmFwTGluZXMsIGZ1bmN0aW9uKHNuYXBMaW5lKSB7XG4gICAgc25hcExpbmUudXBkYXRlKCk7XG4gIH0pO1xufTtcbiIsImltcG9ydCBDcmVhdGVNb3ZlU25hcHBpbmcgZnJvbSAnLi9DcmVhdGVNb3ZlU25hcHBpbmcnO1xuaW1wb3J0IFJlc2l6ZVNuYXBwaW5nIGZyb20gJy4vUmVzaXplU25hcHBpbmcnO1xuaW1wb3J0IFNuYXBwaW5nIGZyb20gJy4vU25hcHBpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbXG4gICAgJ2NyZWF0ZU1vdmVTbmFwcGluZycsXG4gICAgJ3Jlc2l6ZVNuYXBwaW5nJyxcbiAgICAnc25hcHBpbmcnXG4gIF0sXG4gIGNyZWF0ZU1vdmVTbmFwcGluZzogWyAndHlwZScsIENyZWF0ZU1vdmVTbmFwcGluZyBdLFxuICByZXNpemVTbmFwcGluZzogWyAndHlwZScsIFJlc2l6ZVNuYXBwaW5nIF0sXG4gIHNuYXBwaW5nOiBbICd0eXBlJywgU25hcHBpbmcgXVxufTsiLCJpbXBvcnQge1xuICBhc3NpZ24sXG4gIGZpbHRlcixcbiAgZm9yRWFjaCxcbiAgaXNOdW1iZXJcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBhc1RSQkwgfSBmcm9tICcuLi8uLi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7IGdldEJCb3ggfSBmcm9tICcuLi8uLi91dGlsL0VsZW1lbnRzJztcblxuaW1wb3J0IHsgZ2V0RGlyZWN0aW9uIH0gZnJvbSAnLi9TcGFjZVV0aWwnO1xuXG5pbXBvcnQgeyBoYXNQcmltYXJ5TW9kaWZpZXIgfSBmcm9tICcuLi8uLi91dGlsL01vdXNlJztcblxuaW1wb3J0IHsgc2V0IGFzIHNldEN1cnNvciB9IGZyb20gJy4uLy4uL3V0aWwvQ3Vyc29yJztcblxuaW1wb3J0IHsgc2VsZkFuZEFsbENoaWxkcmVuIH0gZnJvbSAnLi4vLi4vdXRpbC9FbGVtZW50cyc7XG5cbnZhciBhYnMgPSBNYXRoLmFicyxcbiAgICByb3VuZCA9IE1hdGgucm91bmQ7XG5cbnZhciBBWElTX1RPX0RJTUVOU0lPTiA9IHtcbiAgeDogJ3dpZHRoJyxcbiAgeTogJ2hlaWdodCdcbn07XG5cbnZhciBDVVJTT1JfQ1JPU1NIQUlSID0gJ2Nyb3NzaGFpcic7XG5cbnZhciBESVJFQ1RJT05fVE9fVFJCTCA9IHtcbiAgbjogJ3RvcCcsXG4gIHc6ICdsZWZ0JyxcbiAgczogJ2JvdHRvbScsXG4gIGU6ICdyaWdodCdcbn07XG5cbnZhciBISUdIX1BSSU9SSVRZID0gMTUwMDtcblxudmFyIERJUkVDVElPTl9UT19PUFBPU0lURSA9IHtcbiAgbjogJ3MnLFxuICB3OiAnZScsXG4gIHM6ICduJyxcbiAgZTogJ3cnXG59O1xuXG52YXIgUEFERElORyA9IDIwO1xuXG5cbi8qKlxuICogQWRkIG9yIHJlbW92ZSBzcGFjZSBieSBtb3ZpbmcgYW5kIHJlc2l6aW5nIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7RHJhZ2dpbmd9IGRyYWdnaW5nXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7UnVsZXN9IHJ1bGVzXG4gKiBAcGFyYW0ge3Rvb2xNYW5hZ2VyfSB0b29sTWFuYWdlclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTcGFjZVRvb2woY2FudmFzLCBkcmFnZ2luZywgZXZlbnRCdXMsIG1vZGVsaW5nLCBydWxlcywgdG9vbE1hbmFnZXIpIHtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9kcmFnZ2luZyA9IGRyYWdnaW5nO1xuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xuICB0aGlzLl90b29sTWFuYWdlciA9IHRvb2xNYW5hZ2VyO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0b29sTWFuYWdlci5yZWdpc3RlclRvb2woJ3NwYWNlJywge1xuICAgIHRvb2w6ICdzcGFjZVRvb2wuc2VsZWN0aW9uJyxcbiAgICBkcmFnZ2luZzogJ3NwYWNlVG9vbCdcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ3NwYWNlVG9vbC5zZWxlY3Rpb24uZW5kJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBldmVudEJ1cy5vbmNlKCdzcGFjZVRvb2wuc2VsZWN0aW9uLmVuZGVkJywgZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmFjdGl2YXRlTWFrZVNwYWNlKGV2ZW50Lm9yaWdpbmFsRXZlbnQpO1xuICAgIH0pO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignc3BhY2VUb29sLm1vdmUnLCBISUdIX1BSSU9SSVRZICwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGluaXRpYWxpemVkID0gY29udGV4dC5pbml0aWFsaXplZDtcblxuICAgIGlmICghaW5pdGlhbGl6ZWQpIHtcbiAgICAgIGluaXRpYWxpemVkID0gY29udGV4dC5pbml0aWFsaXplZCA9IHNlbGYuaW5pdChldmVudCwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKGluaXRpYWxpemVkKSB7XG4gICAgICBlbnN1cmVDb25zdHJhaW50cyhldmVudCk7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignc3BhY2VUb29sLmVuZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBheGlzID0gY29udGV4dC5heGlzLFxuICAgICAgICBkaXJlY3Rpb24gPSBjb250ZXh0LmRpcmVjdGlvbixcbiAgICAgICAgbW92aW5nU2hhcGVzID0gY29udGV4dC5tb3ZpbmdTaGFwZXMsXG4gICAgICAgIHJlc2l6aW5nU2hhcGVzID0gY29udGV4dC5yZXNpemluZ1NoYXBlcyxcbiAgICAgICAgc3RhcnQgPSBjb250ZXh0LnN0YXJ0O1xuXG4gICAgaWYgKCFjb250ZXh0LmluaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZW5zdXJlQ29uc3RyYWludHMoZXZlbnQpO1xuXG4gICAgdmFyIGRlbHRhID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuXG4gICAgZGVsdGFbIGF4aXMgXSA9IHJvdW5kKGV2ZW50WyAnZCcgKyBheGlzIF0pO1xuXG4gICAgc2VsZi5tYWtlU3BhY2UobW92aW5nU2hhcGVzLCByZXNpemluZ1NoYXBlcywgZGVsdGEsIGRpcmVjdGlvbiwgc3RhcnQpO1xuXG4gICAgZXZlbnRCdXMub25jZSgnc3BhY2VUb29sLmVuZGVkJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgICAgLy8gYWN0aXZhdGUgc3BhY2UgdG9vbCBzZWxlY3Rpb24gYWZ0ZXIgbWFrZSBzcGFjZVxuICAgICAgc2VsZi5hY3RpdmF0ZVNlbGVjdGlvbihldmVudC5vcmlnaW5hbEV2ZW50LCB0cnVlLCB0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cblNwYWNlVG9vbC4kaW5qZWN0ID0gW1xuICAnY2FudmFzJyxcbiAgJ2RyYWdnaW5nJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3J1bGVzJyxcbiAgJ3Rvb2xNYW5hZ2VyJ1xuXTtcblxuLyoqXG4gKiBBY3RpdmF0ZSBzcGFjZSB0b29sIHNlbGVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYXV0b0FjdGl2YXRlXG4gKi9cblNwYWNlVG9vbC5wcm90b3R5cGUuYWN0aXZhdGVTZWxlY3Rpb24gPSBmdW5jdGlvbihldmVudCwgYXV0b0FjdGl2YXRlLCByZWFjdGl2YXRlKSB7XG4gIHRoaXMuX2RyYWdnaW5nLmluaXQoZXZlbnQsICdzcGFjZVRvb2wuc2VsZWN0aW9uJywge1xuICAgIGF1dG9BY3RpdmF0ZTogYXV0b0FjdGl2YXRlLFxuICAgIGN1cnNvcjogQ1VSU09SX0NST1NTSEFJUixcbiAgICBkYXRhOiB7XG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHJlYWN0aXZhdGU6IHJlYWN0aXZhdGVcbiAgICAgIH1cbiAgICB9LFxuICAgIHRyYXBDbGljazogZmFsc2VcbiAgfSk7XG59O1xuXG4vKipcbiAqIEFjdGl2YXRlIHNwYWNlIHRvb2wgbWFrZSBzcGFjZS5cbiAqXG4gKiBAcGFyYW0gIHtNb3VzZUV2ZW50fSBldmVudFxuICovXG5TcGFjZVRvb2wucHJvdG90eXBlLmFjdGl2YXRlTWFrZVNwYWNlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgdGhpcy5fZHJhZ2dpbmcuaW5pdChldmVudCwgJ3NwYWNlVG9vbCcsIHtcbiAgICBhdXRvQWN0aXZhdGU6IHRydWUsXG4gICAgY3Vyc29yOiBDVVJTT1JfQ1JPU1NIQUlSLFxuICAgIGRhdGE6IHtcbiAgICAgIGNvbnRleHQ6IHt9XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKlxuICogTWFrZSBzcGFjZS5cbiAqXG4gKiBAcGFyYW0gIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fSBtb3ZpbmdTaGFwZXNcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5TaGFwZT59IHJlc2l6aW5nU2hhcGVzXG4gKiBAcGFyYW0gIHtPYmplY3R9IGRlbHRhXG4gKiBAcGFyYW0gIHtudW1iZXJ9IGRlbHRhLnhcbiAqIEBwYXJhbSAge251bWJlcn0gZGVsdGEueVxuICogQHBhcmFtICB7c3RyaW5nfSBkaXJlY3Rpb25cbiAqIEBwYXJhbSAge251bWJlcn0gc3RhcnRcbiAqL1xuU3BhY2VUb29sLnByb3RvdHlwZS5tYWtlU3BhY2UgPSBmdW5jdGlvbihtb3ZpbmdTaGFwZXMsIHJlc2l6aW5nU2hhcGVzLCBkZWx0YSwgZGlyZWN0aW9uLCBzdGFydCkge1xuICByZXR1cm4gdGhpcy5fbW9kZWxpbmcuY3JlYXRlU3BhY2UobW92aW5nU2hhcGVzLCByZXNpemluZ1NoYXBlcywgZGVsdGEsIGRpcmVjdGlvbiwgc3RhcnQpO1xufTtcblxuLyoqXG4gKiBJbml0aWFsaXplIG1ha2Ugc3BhY2UgYW5kIHJldHVybiB0cnVlIGlmIHRoYXQgd2FzIHN1Y2Nlc3NmdWwuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblNwYWNlVG9vbC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKGV2ZW50LCBjb250ZXh0KSB7XG4gIHZhciBheGlzID0gYWJzKGV2ZW50LmR4KSA+IGFicyhldmVudC5keSkgPyAneCcgOiAneScsXG4gICAgICBkZWx0YSA9IGV2ZW50WyAnZCcgKyBheGlzIF0sXG4gICAgICBzdGFydCA9IGV2ZW50WyBheGlzIF0gLSBkZWx0YTtcblxuICBpZiAoYWJzKGRlbHRhKSA8IDUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBpbnZlcnQgZGVsdGEgdG8gcmVtb3ZlIHNwYWNlIHdoZW4gbW92aW5nIGxlZnRcbiAgaWYgKGRlbHRhIDwgMCkge1xuICAgIGRlbHRhICo9IC0xO1xuICB9XG5cbiAgLy8gaW52ZXJ0IGRlbHRhIHRvIGFkZC9yZW1vdmUgc3BhY2Ugd2hlbiByZW1vdmluZy9hZGRpbmcgc3BhY2UgaWYgbW9kaWZpZXIga2V5IGlzIHByZXNzZWRcbiAgaWYgKGhhc1ByaW1hcnlNb2RpZmllcihldmVudCkpIHtcbiAgICBkZWx0YSAqPSAtMTtcbiAgfVxuXG4gIHZhciBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oYXhpcywgZGVsdGEpO1xuXG4gIHZhciByb290ID0gdGhpcy5fY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XG5cbiAgdmFyIGNoaWxkcmVuID0gc2VsZkFuZEFsbENoaWxkcmVuKHJvb3QsIHRydWUpO1xuXG4gIHZhciBlbGVtZW50cyA9IHRoaXMuY2FsY3VsYXRlQWRqdXN0bWVudHMoY2hpbGRyZW4sIGF4aXMsIGRlbHRhLCBzdGFydCk7XG5cbiAgdmFyIG1pbkRpbWVuc2lvbnMgPSB0aGlzLl9ldmVudEJ1cy5maXJlKCdzcGFjZVRvb2wuZ2V0TWluRGltZW5zaW9ucycsIHtcbiAgICBheGlzOiBheGlzLFxuICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLFxuICAgIHNoYXBlczogZWxlbWVudHMucmVzaXppbmdTaGFwZXMsXG4gICAgc3RhcnQ6IHN0YXJ0XG4gIH0pO1xuXG4gIHZhciBzcGFjZVRvb2xDb25zdHJhaW50cyA9IGdldFNwYWNlVG9vbENvbnN0cmFpbnRzKGVsZW1lbnRzLCBheGlzLCBkaXJlY3Rpb24sIHN0YXJ0LCBtaW5EaW1lbnNpb25zKTtcblxuICBhc3NpZ24oXG4gICAgY29udGV4dCxcbiAgICBlbGVtZW50cyxcbiAgICB7XG4gICAgICBheGlzOiBheGlzLFxuICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb24sXG4gICAgICBzcGFjZVRvb2xDb25zdHJhaW50czogc3BhY2VUb29sQ29uc3RyYWludHMsXG4gICAgICBzdGFydDogc3RhcnRcbiAgICB9XG4gICk7XG5cbiAgc2V0Q3Vyc29yKCdyZXNpemUtJyArIChheGlzID09PSAneCcgPyAnZXcnIDogJ25zJykpO1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBHZXQgZWxlbWVudHMgdG8gYmUgbW92ZWQgYW5kIHJlc2l6ZWQuXG4gKlxuICogQHBhcmFtICB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlPn0gZWxlbWVudHNcbiAqIEBwYXJhbSAge3N0cmluZ30gYXhpc1xuICogQHBhcmFtICB7bnVtYmVyfSBkZWx0YVxuICogQHBhcmFtICB7bnVtYmVyfSBzdGFydFxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuU3BhY2VUb29sLnByb3RvdHlwZS5jYWxjdWxhdGVBZGp1c3RtZW50cyA9IGZ1bmN0aW9uKGVsZW1lbnRzLCBheGlzLCBkZWx0YSwgc3RhcnQpIHtcbiAgdmFyIHJ1bGVzID0gdGhpcy5fcnVsZXM7XG5cbiAgdmFyIG1vdmluZ1NoYXBlcyA9IFtdLFxuICAgICAgcmVzaXppbmdTaGFwZXMgPSBbXTtcblxuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50LnBhcmVudCB8fCBpc0Nvbm5lY3Rpb24oZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc2hhcGVTdGFydCA9IGVsZW1lbnRbIGF4aXMgXSxcbiAgICAgICAgc2hhcGVFbmQgPSBzaGFwZVN0YXJ0ICsgZWxlbWVudFsgQVhJU19UT19ESU1FTlNJT05bIGF4aXMgXSBdO1xuXG4gICAgLy8gc2hhcGUgdG8gYmUgbW92ZWRcbiAgICBpZiAoKGRlbHRhID4gMCAmJiBzaGFwZVN0YXJ0ID4gc3RhcnQpIHx8IChkZWx0YSA8IDAgJiYgc2hhcGVFbmQgPCBzdGFydCkpIHtcbiAgICAgIHJldHVybiBtb3ZpbmdTaGFwZXMucHVzaChlbGVtZW50KTtcbiAgICB9XG5cbiAgICAvLyBzaGFwZSB0byBiZSByZXNpemVkXG4gICAgaWYgKHNoYXBlU3RhcnQgPCBzdGFydCAmJlxuICAgICAgc2hhcGVFbmQgPiBzdGFydCAmJlxuICAgICAgcnVsZXMuYWxsb3dlZCgnc2hhcGUucmVzaXplJywgeyBzaGFwZTogZWxlbWVudCB9KVxuICAgICkge1xuXG4gICAgICByZXR1cm4gcmVzaXppbmdTaGFwZXMucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgbW92aW5nU2hhcGVzOiBtb3ZpbmdTaGFwZXMsXG4gICAgcmVzaXppbmdTaGFwZXM6IHJlc2l6aW5nU2hhcGVzXG4gIH07XG59O1xuXG5TcGFjZVRvb2wucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgdGhpcy5fZHJhZ2dpbmcuY2FuY2VsKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdGlvbigpO1xuICB9XG59O1xuXG5TcGFjZVRvb2wucHJvdG90eXBlLmlzQWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gIHZhciBjb250ZXh0ID0gdGhpcy5fZHJhZ2dpbmcuY29udGV4dCgpO1xuXG4gIHJldHVybiBjb250ZXh0ICYmIC9ec3BhY2VUb29sLy50ZXN0KGNvbnRleHQucHJlZml4KTtcbn07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBhZGRQYWRkaW5nKHRyYmwpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IHRyYmwudG9wIC0gUEFERElORyxcbiAgICByaWdodDogdHJibC5yaWdodCArIFBBRERJTkcsXG4gICAgYm90dG9tOiB0cmJsLmJvdHRvbSArIFBBRERJTkcsXG4gICAgbGVmdDogdHJibC5sZWZ0IC0gUEFERElOR1xuICB9O1xufVxuXG5mdW5jdGlvbiBlbnN1cmVDb25zdHJhaW50cyhldmVudCkge1xuICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICBzcGFjZVRvb2xDb25zdHJhaW50cyA9IGNvbnRleHQuc3BhY2VUb29sQ29uc3RyYWludHM7XG5cbiAgaWYgKCFzcGFjZVRvb2xDb25zdHJhaW50cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB4LCB5O1xuXG4gIGlmIChpc051bWJlcihzcGFjZVRvb2xDb25zdHJhaW50cy5sZWZ0KSkge1xuICAgIHggPSBNYXRoLm1heChldmVudC54LCBzcGFjZVRvb2xDb25zdHJhaW50cy5sZWZ0KTtcblxuICAgIGV2ZW50LmR4ID0gZXZlbnQuZHggKyB4IC0gZXZlbnQueDtcbiAgICBldmVudC54ID0geDtcbiAgfVxuXG4gIGlmIChpc051bWJlcihzcGFjZVRvb2xDb25zdHJhaW50cy5yaWdodCkpIHtcbiAgICB4ID0gTWF0aC5taW4oZXZlbnQueCwgc3BhY2VUb29sQ29uc3RyYWludHMucmlnaHQpO1xuXG4gICAgZXZlbnQuZHggPSBldmVudC5keCArIHggLSBldmVudC54O1xuICAgIGV2ZW50LnggPSB4O1xuICB9XG5cbiAgaWYgKGlzTnVtYmVyKHNwYWNlVG9vbENvbnN0cmFpbnRzLnRvcCkpIHtcbiAgICB5ID0gTWF0aC5tYXgoZXZlbnQueSwgc3BhY2VUb29sQ29uc3RyYWludHMudG9wKTtcblxuICAgIGV2ZW50LmR5ID0gZXZlbnQuZHkgKyB5IC0gZXZlbnQueTtcbiAgICBldmVudC55ID0geTtcbiAgfVxuXG4gIGlmIChpc051bWJlcihzcGFjZVRvb2xDb25zdHJhaW50cy5ib3R0b20pKSB7XG4gICAgeSA9IE1hdGgubWluKGV2ZW50LnksIHNwYWNlVG9vbENvbnN0cmFpbnRzLmJvdHRvbSk7XG5cbiAgICBldmVudC5keSA9IGV2ZW50LmR5ICsgeSAtIGV2ZW50Lnk7XG4gICAgZXZlbnQueSA9IHk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U3BhY2VUb29sQ29uc3RyYWludHMoZWxlbWVudHMsIGF4aXMsIGRpcmVjdGlvbiwgc3RhcnQsIG1pbkRpbWVuc2lvbnMpIHtcbiAgdmFyIG1vdmluZ1NoYXBlcyA9IGVsZW1lbnRzLm1vdmluZ1NoYXBlcyxcbiAgICAgIHJlc2l6aW5nU2hhcGVzID0gZWxlbWVudHMucmVzaXppbmdTaGFwZXM7XG5cbiAgaWYgKCFyZXNpemluZ1NoYXBlcy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc3BhY2VUb29sQ29uc3RyYWludHMgPSB7fSxcbiAgICAgIG1pbixcbiAgICAgIG1heDtcblxuICBmb3JFYWNoKHJlc2l6aW5nU2hhcGVzLCBmdW5jdGlvbihyZXNpemluZ1NoYXBlKSB7XG4gICAgdmFyIHJlc2l6aW5nU2hhcGVCQm94ID0gYXNUUkJMKHJlc2l6aW5nU2hhcGUpO1xuXG4gICAgLy8gZmluZCBjaGlsZHJlbiB0aGF0IGFyZSBub3QgbW92aW5nIG9yIHJlc2l6aW5nXG4gICAgdmFyIG5vbk1vdmluZ1Jlc2l6aW5nQ2hpbGRyZW4gPSBmaWx0ZXIocmVzaXppbmdTaGFwZS5jaGlsZHJlbiwgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgIHJldHVybiAhaXNDb25uZWN0aW9uKGNoaWxkKSAmJlxuICAgICAgICAhaXNMYWJlbChjaGlsZCkgJiZcbiAgICAgICAgIWluY2x1ZGVzKG1vdmluZ1NoYXBlcywgY2hpbGQpICYmXG4gICAgICAgICFpbmNsdWRlcyhyZXNpemluZ1NoYXBlcywgY2hpbGQpO1xuICAgIH0pO1xuXG4gICAgLy8gZmluZCBjaGlsZHJlbiB0aGF0IGFyZSBtb3ZpbmdcbiAgICB2YXIgbW92aW5nQ2hpbGRyZW4gPSBmaWx0ZXIocmVzaXppbmdTaGFwZS5jaGlsZHJlbiwgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgIHJldHVybiAhaXNDb25uZWN0aW9uKGNoaWxkKSAmJiAhaXNMYWJlbChjaGlsZCkgJiYgaW5jbHVkZXMobW92aW5nU2hhcGVzLCBjaGlsZCk7XG4gICAgfSk7XG5cbiAgICB2YXIgbWluT3JNYXgsXG4gICAgICAgIG5vbk1vdmluZ1Jlc2l6aW5nQ2hpbGRyZW5CQm94LFxuICAgICAgICBtb3ZpbmdDaGlsZHJlbkJCb3g7XG5cbiAgICBpZiAobm9uTW92aW5nUmVzaXppbmdDaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIG5vbk1vdmluZ1Jlc2l6aW5nQ2hpbGRyZW5CQm94ID0gYWRkUGFkZGluZyhhc1RSQkwoZ2V0QkJveChub25Nb3ZpbmdSZXNpemluZ0NoaWxkcmVuKSkpO1xuXG4gICAgICBtaW5Pck1heCA9IHN0YXJ0IC1cbiAgICAgICAgcmVzaXppbmdTaGFwZUJCb3hbIERJUkVDVElPTl9UT19UUkJMWyBkaXJlY3Rpb24gXSBdICtcbiAgICAgICAgbm9uTW92aW5nUmVzaXppbmdDaGlsZHJlbkJCb3hbIERJUkVDVElPTl9UT19UUkJMWyBkaXJlY3Rpb24gXSBdO1xuXG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAnbicpIHtcbiAgICAgICAgc3BhY2VUb29sQ29uc3RyYWludHMuYm90dG9tID0gbWF4ID0gaXNOdW1iZXIobWF4KSA/IE1hdGgubWluKG1heCwgbWluT3JNYXgpIDogbWluT3JNYXg7XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3cnKSB7XG4gICAgICAgIHNwYWNlVG9vbENvbnN0cmFpbnRzLnJpZ2h0ID0gbWF4ID0gaXNOdW1iZXIobWF4KSA/IE1hdGgubWluKG1heCwgbWluT3JNYXgpIDogbWluT3JNYXg7XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3MnKSB7XG4gICAgICAgIHNwYWNlVG9vbENvbnN0cmFpbnRzLnRvcCA9IG1pbiA9IGlzTnVtYmVyKG1pbikgPyBNYXRoLm1heChtaW4sIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdlJykge1xuICAgICAgICBzcGFjZVRvb2xDb25zdHJhaW50cy5sZWZ0ID0gbWluID0gaXNOdW1iZXIobWluKSA/IE1hdGgubWF4KG1pbiwgbWluT3JNYXgpIDogbWluT3JNYXg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1vdmluZ0NoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgbW92aW5nQ2hpbGRyZW5CQm94ID0gYWRkUGFkZGluZyhhc1RSQkwoZ2V0QkJveChtb3ZpbmdDaGlsZHJlbikpKTtcblxuICAgICAgbWluT3JNYXggPSBzdGFydCAtXG4gICAgICAgIG1vdmluZ0NoaWxkcmVuQkJveFsgRElSRUNUSU9OX1RPX1RSQkxbIERJUkVDVElPTl9UT19PUFBPU0lURVsgZGlyZWN0aW9uIF0gXSBdICtcbiAgICAgICAgcmVzaXppbmdTaGFwZUJCb3hbIERJUkVDVElPTl9UT19UUkJMWyBESVJFQ1RJT05fVE9fT1BQT1NJVEVbIGRpcmVjdGlvbiBdIF0gXTtcblxuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ24nKSB7XG4gICAgICAgIHNwYWNlVG9vbENvbnN0cmFpbnRzLmJvdHRvbSA9IG1heCA9IGlzTnVtYmVyKG1heCkgPyBNYXRoLm1pbihtYXgsIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICd3Jykge1xuICAgICAgICBzcGFjZVRvb2xDb25zdHJhaW50cy5yaWdodCA9IG1heCA9IGlzTnVtYmVyKG1heCkgPyBNYXRoLm1pbihtYXgsIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdzJykge1xuICAgICAgICBzcGFjZVRvb2xDb25zdHJhaW50cy50b3AgPSBtaW4gPSBpc051bWJlcihtaW4pID8gTWF0aC5tYXgobWluLCBtaW5Pck1heCkgOiBtaW5Pck1heDtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnZScpIHtcbiAgICAgICAgc3BhY2VUb29sQ29uc3RyYWludHMubGVmdCA9IG1pbiA9IGlzTnVtYmVyKG1pbikgPyBNYXRoLm1heChtaW4sIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXNpemluZ1NoYXBlTWluRGltZW5zaW9ucyA9IG1pbkRpbWVuc2lvbnMgJiYgbWluRGltZW5zaW9uc1sgcmVzaXppbmdTaGFwZS5pZCBdO1xuXG4gICAgaWYgKHJlc2l6aW5nU2hhcGVNaW5EaW1lbnNpb25zKSB7XG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAnbicpIHtcbiAgICAgICAgbWluT3JNYXggPSBzdGFydCArXG4gICAgICAgICAgcmVzaXppbmdTaGFwZVsgQVhJU19UT19ESU1FTlNJT04gWyBheGlzIF0gXSAtXG4gICAgICAgICAgcmVzaXppbmdTaGFwZU1pbkRpbWVuc2lvbnNbIEFYSVNfVE9fRElNRU5TSU9OWyBheGlzIF0gXTtcblxuICAgICAgICBzcGFjZVRvb2xDb25zdHJhaW50cy5ib3R0b20gPSBtYXggPSBpc051bWJlcihtYXgpID8gTWF0aC5taW4obWF4LCBtaW5Pck1heCkgOiBtaW5Pck1heDtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAndycpIHtcbiAgICAgICAgbWluT3JNYXggPSBzdGFydCArXG4gICAgICAgICAgcmVzaXppbmdTaGFwZVsgQVhJU19UT19ESU1FTlNJT04gWyBheGlzIF0gXSAtXG4gICAgICAgICAgcmVzaXppbmdTaGFwZU1pbkRpbWVuc2lvbnNbIEFYSVNfVE9fRElNRU5TSU9OWyBheGlzIF0gXTtcblxuICAgICAgICBzcGFjZVRvb2xDb25zdHJhaW50cy5yaWdodCA9IG1heCA9IGlzTnVtYmVyKG1heCkgPyBNYXRoLm1pbihtYXgsIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdzJykge1xuICAgICAgICBtaW5Pck1heCA9IHN0YXJ0IC1cbiAgICAgICAgICByZXNpemluZ1NoYXBlWyBBWElTX1RPX0RJTUVOU0lPTiBbIGF4aXMgXSBdICtcbiAgICAgICAgICByZXNpemluZ1NoYXBlTWluRGltZW5zaW9uc1sgQVhJU19UT19ESU1FTlNJT05bIGF4aXMgXSBdO1xuXG4gICAgICAgIHNwYWNlVG9vbENvbnN0cmFpbnRzLnRvcCA9IG1pbiA9IGlzTnVtYmVyKG1pbikgPyBNYXRoLm1heChtaW4sIG1pbk9yTWF4KSA6IG1pbk9yTWF4O1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdlJykge1xuICAgICAgICBtaW5Pck1heCA9IHN0YXJ0IC1cbiAgICAgICAgICByZXNpemluZ1NoYXBlWyBBWElTX1RPX0RJTUVOU0lPTiBbIGF4aXMgXSBdICtcbiAgICAgICAgICByZXNpemluZ1NoYXBlTWluRGltZW5zaW9uc1sgQVhJU19UT19ESU1FTlNJT05bIGF4aXMgXSBdO1xuXG4gICAgICAgIHNwYWNlVG9vbENvbnN0cmFpbnRzLmxlZnQgPSBtaW4gPSBpc051bWJlcihtaW4pID8gTWF0aC5tYXgobWluLCBtaW5Pck1heCkgOiBtaW5Pck1heDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBzcGFjZVRvb2xDb25zdHJhaW50cztcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIGl0ZW0pIHtcbiAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSkgIT09IC0xO1xufVxuXG5mdW5jdGlvbiBpc0Nvbm5lY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gISFlbGVtZW50LndheXBvaW50cztcbn1cblxuZnVuY3Rpb24gaXNMYWJlbChlbGVtZW50KSB7XG4gIHJldHVybiAhIWVsZW1lbnQubGFiZWxUYXJnZXQ7XG59IiwiaW1wb3J0IHtcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbnZhciBNQVJLRVJfRFJBR0dJTkcgPSAnZGpzLWRyYWdnaW5nJyxcbiAgICBNQVJLRVJfUkVTSVpJTkcgPSAnZGpzLXJlc2l6aW5nJztcblxudmFyIExPV19QUklPUklUWSA9IDI1MDtcblxuaW1wb3J0IHtcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICBjbGFzc2VzIGFzIHN2Z0NsYXNzZXMsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGUsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQge1xuICB0cmFuc2xhdGVcbn0gZnJvbSAnLi4vLi4vdXRpbC9TdmdUcmFuc2Zvcm1VdGlsJztcblxudmFyIG1heCA9IE1hdGgubWF4O1xuXG5cbi8qKlxuICogUHJvdmlkZXMgcHJldmlld3MgZm9yIHNlbGVjdGluZy9tb3ZpbmcvcmVzaXppbmcgc2hhcGVzIHdoZW4gY3JlYXRpbmcvcmVtb3Zpbmcgc3BhY2UuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7U3R5bGVzfSBzdHlsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3BhY2VUb29sUHJldmlldyhcbiAgICBldmVudEJ1cywgZWxlbWVudFJlZ2lzdHJ5LCBjYW52YXMsXG4gICAgc3R5bGVzLCBwcmV2aWV3U3VwcG9ydCkge1xuXG4gIGZ1bmN0aW9uIGFkZFByZXZpZXdHZngoY29sbGVjdGlvbiwgZHJhZ0dyb3VwKSB7XG4gICAgZm9yRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICBwcmV2aWV3U3VwcG9ydC5hZGREcmFnZ2VyKGVsZW1lbnQsIGRyYWdHcm91cCk7XG5cbiAgICAgIGNhbnZhcy5hZGRNYXJrZXIoZWxlbWVudCwgTUFSS0VSX0RSQUdHSU5HKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGFkZCBjcm9zc2hhaXJcbiAgZXZlbnRCdXMub24oJ3NwYWNlVG9vbC5zZWxlY3Rpb24uc3RhcnQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBzcGFjZSA9IGNhbnZhcy5nZXRMYXllcignc3BhY2UnKSxcbiAgICAgICAgY29udGV4dCA9IGV2ZW50LmNvbnRleHQ7XG5cbiAgICB2YXIgb3JpZW50YXRpb24gPSB7XG4gICAgICB4OiAnTSAwLC0xMDAwMCBMIDAsMTAwMDAnLFxuICAgICAgeTogJ00gLTEwMDAwLDAgTCAxMDAwMCwwJ1xuICAgIH07XG5cbiAgICB2YXIgY3Jvc3NoYWlyR3JvdXAgPSBzdmdDcmVhdGUoJ2cnKTtcbiAgICBzdmdBdHRyKGNyb3NzaGFpckdyb3VwLCBzdHlsZXMuY2xzKCdkanMtY3Jvc3NoYWlyLWdyb3VwJywgWyAnbm8tZXZlbnRzJyBdKSk7XG5cbiAgICBzdmdBcHBlbmQoc3BhY2UsIGNyb3NzaGFpckdyb3VwKTtcblxuICAgIC8vIGhvcml6b250YWwgcGF0aFxuICAgIHZhciBwYXRoWCA9IHN2Z0NyZWF0ZSgncGF0aCcpO1xuICAgIHN2Z0F0dHIocGF0aFgsICdkJywgb3JpZW50YXRpb24ueCk7XG4gICAgc3ZnQ2xhc3NlcyhwYXRoWCkuYWRkKCdkanMtY3Jvc3NoYWlyJyk7XG5cbiAgICBzdmdBcHBlbmQoY3Jvc3NoYWlyR3JvdXAsIHBhdGhYKTtcblxuICAgIC8vIHZlcnRpY2FsIHBhdGhcbiAgICB2YXIgcGF0aFkgPSBzdmdDcmVhdGUoJ3BhdGgnKTtcbiAgICBzdmdBdHRyKHBhdGhZLCAnZCcsIG9yaWVudGF0aW9uLnkpO1xuICAgIHN2Z0NsYXNzZXMocGF0aFkpLmFkZCgnZGpzLWNyb3NzaGFpcicpO1xuXG4gICAgc3ZnQXBwZW5kKGNyb3NzaGFpckdyb3VwLCBwYXRoWSk7XG5cbiAgICBjb250ZXh0LmNyb3NzaGFpckdyb3VwID0gY3Jvc3NoYWlyR3JvdXA7XG4gIH0pO1xuXG4gIC8vIHVwZGF0ZSBjcm9zc2hhaXJcbiAgZXZlbnRCdXMub24oJ3NwYWNlVG9vbC5zZWxlY3Rpb24ubW92ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNyb3NzaGFpckdyb3VwID0gZXZlbnQuY29udGV4dC5jcm9zc2hhaXJHcm91cDtcblxuICAgIHRyYW5zbGF0ZShjcm9zc2hhaXJHcm91cCwgZXZlbnQueCwgZXZlbnQueSk7XG4gIH0pO1xuXG4gIC8vIHJlbW92ZSBjcm9zc2hhaXJcbiAgZXZlbnRCdXMub24oJ3NwYWNlVG9vbC5zZWxlY3Rpb24uY2xlYW51cCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjcm9zc2hhaXJHcm91cCA9IGNvbnRleHQuY3Jvc3NoYWlyR3JvdXA7XG5cbiAgICBpZiAoY3Jvc3NoYWlyR3JvdXApIHtcbiAgICAgIHN2Z1JlbW92ZShjcm9zc2hhaXJHcm91cCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBhZGQgYW5kIHVwZGF0ZSBtb3ZlL3Jlc2l6ZSBwcmV2aWV3c1xuICBldmVudEJ1cy5vbignc3BhY2VUb29sLm1vdmUnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGxpbmUgPSBjb250ZXh0LmxpbmUsXG4gICAgICAgIGF4aXMgPSBjb250ZXh0LmF4aXMsXG4gICAgICAgIG1vdmluZ1NoYXBlcyA9IGNvbnRleHQubW92aW5nU2hhcGVzLFxuICAgICAgICByZXNpemluZ1NoYXBlcyA9IGNvbnRleHQucmVzaXppbmdTaGFwZXM7XG5cbiAgICBpZiAoIWNvbnRleHQuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNvbnRleHQuZHJhZ0dyb3VwKSB7XG4gICAgICB2YXIgc3BhY2VMYXllciA9IGNhbnZhcy5nZXRMYXllcignc3BhY2UnKTtcblxuICAgICAgbGluZSA9IHN2Z0NyZWF0ZSgncGF0aCcpO1xuICAgICAgc3ZnQXR0cihsaW5lLCAnZCcsICdNMCwwIEwwLDAnKTtcbiAgICAgIHN2Z0NsYXNzZXMobGluZSkuYWRkKCdkanMtY3Jvc3NoYWlyJyk7XG5cbiAgICAgIHN2Z0FwcGVuZChzcGFjZUxheWVyLCBsaW5lKTtcblxuICAgICAgY29udGV4dC5saW5lID0gbGluZTtcblxuICAgICAgdmFyIGRyYWdHcm91cCA9IHN2Z0NyZWF0ZSgnZycpO1xuICAgICAgc3ZnQXR0cihkcmFnR3JvdXAsIHN0eWxlcy5jbHMoJ2Rqcy1kcmFnLWdyb3VwJywgWyAnbm8tZXZlbnRzJyBdKSk7XG5cbiAgICAgIHN2Z0FwcGVuZChjYW52YXMuZ2V0RGVmYXVsdExheWVyKCksIGRyYWdHcm91cCk7XG5cbiAgICAgIC8vIHNoYXBlc1xuICAgICAgYWRkUHJldmlld0dmeChtb3ZpbmdTaGFwZXMsIGRyYWdHcm91cCk7XG5cbiAgICAgIC8vIGNvbm5lY3Rpb25zXG4gICAgICB2YXIgbW92aW5nQ29ubmVjdGlvbnMgPSBjb250ZXh0Lm1vdmluZ0Nvbm5lY3Rpb25zID0gZWxlbWVudFJlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHZhciBzb3VyY2VJc01vdmluZyA9IGZhbHNlO1xuXG4gICAgICAgIGZvckVhY2gobW92aW5nU2hhcGVzLCBmdW5jdGlvbihzaGFwZSkge1xuICAgICAgICAgIGZvckVhY2goc2hhcGUub3V0Z29pbmcsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50ID09PSBjb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgIHNvdXJjZUlzTW92aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIHRhcmdldElzTW92aW5nID0gZmFsc2U7XG5cbiAgICAgICAgZm9yRWFjaChtb3ZpbmdTaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICAgICAgZm9yRWFjaChzaGFwZS5pbmNvbWluZywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT09IGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgdGFyZ2V0SXNNb3ZpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgc291cmNlSXNSZXNpemluZyA9IGZhbHNlO1xuXG4gICAgICAgIGZvckVhY2gocmVzaXppbmdTaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICAgICAgZm9yRWFjaChzaGFwZS5vdXRnb2luZywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT09IGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgc291cmNlSXNSZXNpemluZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciB0YXJnZXRJc1Jlc2l6aW5nID0gZmFsc2U7XG5cbiAgICAgICAgZm9yRWFjaChyZXNpemluZ1NoYXBlcywgZnVuY3Rpb24oc2hhcGUpIHtcbiAgICAgICAgICBmb3JFYWNoKHNoYXBlLmluY29taW5nLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gY29ubmVjdGlvbikge1xuICAgICAgICAgICAgICB0YXJnZXRJc1Jlc2l6aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGlzQ29ubmVjdGlvbihlbGVtZW50KVxuICAgICAgICAgICYmIChzb3VyY2VJc01vdmluZyB8fCBzb3VyY2VJc1Jlc2l6aW5nKVxuICAgICAgICAgICYmICh0YXJnZXRJc01vdmluZyB8fCB0YXJnZXRJc1Jlc2l6aW5nKTtcbiAgICAgIH0pO1xuXG5cbiAgICAgIGFkZFByZXZpZXdHZngobW92aW5nQ29ubmVjdGlvbnMsIGRyYWdHcm91cCk7XG5cbiAgICAgIGNvbnRleHQuZHJhZ0dyb3VwID0gZHJhZ0dyb3VwO1xuICAgIH1cblxuICAgIGlmICghY29udGV4dC5mcmFtZUdyb3VwKSB7XG4gICAgICB2YXIgZnJhbWVHcm91cCA9IHN2Z0NyZWF0ZSgnZycpO1xuICAgICAgc3ZnQXR0cihmcmFtZUdyb3VwLCBzdHlsZXMuY2xzKCdkanMtZnJhbWUtZ3JvdXAnLCBbICduby1ldmVudHMnIF0pKTtcblxuICAgICAgc3ZnQXBwZW5kKGNhbnZhcy5nZXREZWZhdWx0TGF5ZXIoKSwgZnJhbWVHcm91cCk7XG5cbiAgICAgIHZhciBmcmFtZXMgPSBbXTtcblxuICAgICAgZm9yRWFjaChyZXNpemluZ1NoYXBlcywgZnVuY3Rpb24oc2hhcGUpIHtcbiAgICAgICAgdmFyIGZyYW1lID0gcHJldmlld1N1cHBvcnQuYWRkRnJhbWUoc2hhcGUsIGZyYW1lR3JvdXApO1xuXG4gICAgICAgIHZhciBpbml0aWFsQm91bmRzID0gZnJhbWUuZ2V0QkJveCgpO1xuXG4gICAgICAgIGZyYW1lcy5wdXNoKHtcbiAgICAgICAgICBlbGVtZW50OiBmcmFtZSxcbiAgICAgICAgICBpbml0aWFsQm91bmRzOiBpbml0aWFsQm91bmRzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNhbnZhcy5hZGRNYXJrZXIoc2hhcGUsIE1BUktFUl9SRVNJWklORyk7XG4gICAgICB9KTtcblxuICAgICAgY29udGV4dC5mcmFtZUdyb3VwID0gZnJhbWVHcm91cDtcbiAgICAgIGNvbnRleHQuZnJhbWVzID0gZnJhbWVzO1xuICAgIH1cblxuICAgIHZhciBvcmllbnRhdGlvbiA9IHtcbiAgICAgIHg6ICdNJyArIGV2ZW50LnggKyAnLCAtMTAwMDAgTCcgKyBldmVudC54ICsgJywgMTAwMDAnLFxuICAgICAgeTogJ00gLTEwMDAwLCAnICsgZXZlbnQueSArICcgTCAxMDAwMCwgJyArIGV2ZW50LnlcbiAgICB9O1xuXG4gICAgc3ZnQXR0cihsaW5lLCB7IGQ6IG9yaWVudGF0aW9uWyBheGlzIF0gfSk7XG5cbiAgICB2YXIgb3Bwb3NpdGUgPSB7IHg6ICd5JywgeTogJ3gnIH07XG4gICAgdmFyIGRlbHRhID0geyB4OiBldmVudC5keCwgeTogZXZlbnQuZHkgfTtcbiAgICBkZWx0YVsgb3Bwb3NpdGVbIGNvbnRleHQuYXhpcyBdIF0gPSAwO1xuXG4gICAgLy8gdXBkYXRlIG1vdmUgcHJldmlld3NcbiAgICB0cmFuc2xhdGUoY29udGV4dC5kcmFnR3JvdXAsIGRlbHRhLngsIGRlbHRhLnkpO1xuXG4gICAgLy8gdXBkYXRlIHJlc2l6ZSBwcmV2aWV3c1xuICAgIGZvckVhY2goY29udGV4dC5mcmFtZXMsIGZ1bmN0aW9uKGZyYW1lKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IGZyYW1lLmVsZW1lbnQsXG4gICAgICAgICAgaW5pdGlhbEJvdW5kcyA9IGZyYW1lLmluaXRpYWxCb3VuZHMsXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0O1xuXG4gICAgICBpZiAoY29udGV4dC5kaXJlY3Rpb24gPT09ICdlJykge1xuICAgICAgICBzdmdBdHRyKGVsZW1lbnQsIHtcbiAgICAgICAgICB3aWR0aDogbWF4KGluaXRpYWxCb3VuZHMud2lkdGggKyBkZWx0YS54LCA1KVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpZHRoID0gbWF4KGluaXRpYWxCb3VuZHMud2lkdGggLSBkZWx0YS54LCA1KTtcblxuICAgICAgICBzdmdBdHRyKGVsZW1lbnQsIHtcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgeDogaW5pdGlhbEJvdW5kcy54ICsgaW5pdGlhbEJvdW5kcy53aWR0aCAtIHdpZHRoXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29udGV4dC5kaXJlY3Rpb24gPT09ICdzJykge1xuICAgICAgICBzdmdBdHRyKGVsZW1lbnQsIHtcbiAgICAgICAgICBoZWlnaHQ6IG1heChpbml0aWFsQm91bmRzLmhlaWdodCArIGRlbHRhLnksIDUpXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVpZ2h0ID0gbWF4KGluaXRpYWxCb3VuZHMuaGVpZ2h0IC0gZGVsdGEueSwgNSk7XG5cbiAgICAgICAgc3ZnQXR0cihlbGVtZW50LCB7XG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgeTogaW5pdGlhbEJvdW5kcy55ICsgaW5pdGlhbEJvdW5kcy5oZWlnaHQgLSBoZWlnaHRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgfSk7XG5cbiAgLy8gcmVtb3ZlIG1vdmUvcmVzaXplIHByZXZpZXdzXG4gIGV2ZW50QnVzLm9uKCdzcGFjZVRvb2wuY2xlYW51cCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIG1vdmluZ1NoYXBlcyA9IGNvbnRleHQubW92aW5nU2hhcGVzLFxuICAgICAgICBtb3ZpbmdDb25uZWN0aW9ucyA9IGNvbnRleHQubW92aW5nQ29ubmVjdGlvbnMsXG4gICAgICAgIHJlc2l6aW5nU2hhcGVzID0gY29udGV4dC5yZXNpemluZ1NoYXBlcyxcbiAgICAgICAgbGluZSA9IGNvbnRleHQubGluZSxcbiAgICAgICAgZHJhZ0dyb3VwID0gY29udGV4dC5kcmFnR3JvdXAsXG4gICAgICAgIGZyYW1lR3JvdXAgPSBjb250ZXh0LmZyYW1lR3JvdXA7XG5cbiAgICAvLyBtb3Zpbmcgc2hhcGVzXG4gICAgZm9yRWFjaChtb3ZpbmdTaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICBjYW52YXMucmVtb3ZlTWFya2VyKHNoYXBlLCBNQVJLRVJfRFJBR0dJTkcpO1xuICAgIH0pO1xuXG4gICAgLy8gbW92aW5nIGNvbm5lY3Rpb25zXG4gICAgZm9yRWFjaChtb3ZpbmdDb25uZWN0aW9ucywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgICAgY2FudmFzLnJlbW92ZU1hcmtlcihjb25uZWN0aW9uLCBNQVJLRVJfRFJBR0dJTkcpO1xuICAgIH0pO1xuXG4gICAgaWYgKGRyYWdHcm91cCkge1xuICAgICAgc3ZnUmVtb3ZlKGxpbmUpO1xuICAgICAgc3ZnUmVtb3ZlKGRyYWdHcm91cCk7XG4gICAgfVxuXG4gICAgZm9yRWFjaChyZXNpemluZ1NoYXBlcywgZnVuY3Rpb24oc2hhcGUpIHtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoc2hhcGUsIE1BUktFUl9SRVNJWklORyk7XG4gICAgfSk7XG5cbiAgICBpZiAoZnJhbWVHcm91cCkge1xuICAgICAgc3ZnUmVtb3ZlKGZyYW1lR3JvdXApO1xuICAgIH1cbiAgfSk7XG59XG5cblNwYWNlVG9vbFByZXZpZXcuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdjYW52YXMnLFxuICAnc3R5bGVzJyxcbiAgJ3ByZXZpZXdTdXBwb3J0J1xuXTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZWxlbWVudCBpcyBhIGNvbm5lY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGlzQ29ubmVjdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LndheXBvaW50cztcbn1cbiIsImltcG9ydCB7IGZvckVhY2ggfSBmcm9tICdtaW4tZGFzaCc7XG5cbi8qKlxuICogUmV0dXJuIGRpcmVjdGlvbiBnaXZlbiBheGlzIGFuZCBkZWx0YS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXhpc1xuICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhXG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlyZWN0aW9uKGF4aXMsIGRlbHRhKSB7XG5cbiAgaWYgKGF4aXMgPT09ICd4Jykge1xuICAgIGlmIChkZWx0YSA+IDApIHtcbiAgICAgIHJldHVybiAnZSc7XG4gICAgfVxuXG4gICAgaWYgKGRlbHRhIDwgMCkge1xuICAgICAgcmV0dXJuICd3JztcbiAgICB9XG4gIH1cblxuICBpZiAoYXhpcyA9PT0gJ3knKSB7XG4gICAgaWYgKGRlbHRhID4gMCkge1xuICAgICAgcmV0dXJuICdzJztcbiAgICB9XG5cbiAgICBpZiAoZGVsdGEgPCAwKSB7XG4gICAgICByZXR1cm4gJ24nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFJldHVybnMgY29ubmVjdGlvbnMgd2hvc2Ugd2F5cG9pbnRzIGFyZSB0byBiZSB1cGRhdGVkLiBXYXlwb2ludHMgYXJlIHRvIGJlIHVwZGF0ZWQgaWYgc3RhcnRcbiAqIG9yIGVuZCBpcyB0byBiZSBtb3ZlZCBvciByZXNpemVkLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlfSBtb3ZpbmdTaGFwZXNcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLlNoYXBlfSByZXNpemluZ1NoYXBlc1xuICpcbiAqIEByZXR1cm5zIHtBcnJheTxkanMubW9kZWwuQ29ubmVjdGlvbj59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXYXlwb2ludHNVcGRhdGluZ0Nvbm5lY3Rpb25zKG1vdmluZ1NoYXBlcywgcmVzaXppbmdTaGFwZXMpIHtcbiAgdmFyIHdheXBvaW50c1VwZGF0aW5nQ29ubmVjdGlvbnMgPSBbXTtcblxuICBmb3JFYWNoKG1vdmluZ1NoYXBlcy5jb25jYXQocmVzaXppbmdTaGFwZXMpLCBmdW5jdGlvbihzaGFwZSkge1xuICAgIHZhciBpbmNvbWluZyA9IHNoYXBlLmluY29taW5nLFxuICAgICAgICBvdXRnb2luZyA9IHNoYXBlLm91dGdvaW5nO1xuXG4gICAgZm9yRWFjaChpbmNvbWluZy5jb25jYXQob3V0Z29pbmcpLCBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICB2YXIgc291cmNlID0gY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgICAgdGFyZ2V0ID0gY29ubmVjdGlvbi50YXJnZXQ7XG5cbiAgICAgIGlmIChpbmNsdWRlcyhtb3ZpbmdTaGFwZXMsIHNvdXJjZSkgfHxcbiAgICAgICAgaW5jbHVkZXMobW92aW5nU2hhcGVzLCB0YXJnZXQpIHx8XG4gICAgICAgIGluY2x1ZGVzKHJlc2l6aW5nU2hhcGVzLCBzb3VyY2UpIHx8XG4gICAgICAgIGluY2x1ZGVzKHJlc2l6aW5nU2hhcGVzLCB0YXJnZXQpKSB7XG5cbiAgICAgICAgaWYgKCFpbmNsdWRlcyh3YXlwb2ludHNVcGRhdGluZ0Nvbm5lY3Rpb25zLCBjb25uZWN0aW9uKSkge1xuICAgICAgICAgIHdheXBvaW50c1VwZGF0aW5nQ29ubmVjdGlvbnMucHVzaChjb25uZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gd2F5cG9pbnRzVXBkYXRpbmdDb25uZWN0aW9ucztcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIGl0ZW0pIHtcbiAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSkgIT09IC0xO1xufVxuXG4vKipcbiAqIFJlc2l6ZSBib3VuZHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGJvdW5kc1xuICogQHBhcmFtIHtudW1iZXJ9IGJvdW5kcy54XG4gKiBAcGFyYW0ge251bWJlcn0gYm91bmRzLnlcbiAqIEBwYXJhbSB7bnVtYmVyfSBib3VuZHMud2lkdGhcbiAqIEBwYXJhbSB7bnVtYmVyfSBib3VuZHMuaGVpZ2h0XG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gZGVsdGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YS54XG4gKiBAcGFyYW0ge251bWJlcn0gZGVsdGEueVxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2l6ZUJvdW5kcyhib3VuZHMsIGRpcmVjdGlvbiwgZGVsdGEpIHtcbiAgdmFyIHggPSBib3VuZHMueCxcbiAgICAgIHkgPSBib3VuZHMueSxcbiAgICAgIHdpZHRoID0gYm91bmRzLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gYm91bmRzLmhlaWdodCxcbiAgICAgIGR4ID0gZGVsdGEueCxcbiAgICAgIGR5ID0gZGVsdGEueTtcblxuICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICBjYXNlICduJzpcbiAgICByZXR1cm4ge1xuICAgICAgeDogeCxcbiAgICAgIHk6IHkgKyBkeSxcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogaGVpZ2h0IC0gZHlcbiAgICB9O1xuICBjYXNlICdzJzpcbiAgICByZXR1cm4ge1xuICAgICAgeDogeCxcbiAgICAgIHk6IHksXG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGhlaWdodCArIGR5XG4gICAgfTtcbiAgY2FzZSAndyc6XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHggKyBkeCxcbiAgICAgIHk6IHksXG4gICAgICB3aWR0aDogd2lkdGggLSBkeCxcbiAgICAgIGhlaWdodDogaGVpZ2h0XG4gICAgfTtcbiAgY2FzZSAnZSc6XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHgsXG4gICAgICB5OiB5LFxuICAgICAgd2lkdGg6IHdpZHRoICsgZHgsXG4gICAgICBoZWlnaHQ6IGhlaWdodFxuICAgIH07XG4gIGRlZmF1bHQ6XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGRpcmVjdGlvbjogJyArIGRpcmVjdGlvbik7XG4gIH1cbn0iLCJpbXBvcnQgRHJhZ2dpbmdNb2R1bGUgZnJvbSAnLi4vZHJhZ2dpbmcnO1xuaW1wb3J0IFJ1bGVzTW9kdWxlIGZyb20gJy4uL3J1bGVzJztcbmltcG9ydCBUb29sTWFuYWdlck1vZHVsZSBmcm9tICcuLi90b29sLW1hbmFnZXInO1xuaW1wb3J0IFByZXZpZXdTdXBwb3J0TW9kdWxlIGZyb20gJy4uL3ByZXZpZXctc3VwcG9ydCc7XG5cbmltcG9ydCBTcGFjZVRvb2wgZnJvbSAnLi9TcGFjZVRvb2wnO1xuaW1wb3J0IFNwYWNlVG9vbFByZXZpZXcgZnJvbSAnLi9TcGFjZVRvb2xQcmV2aWV3JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWydzcGFjZVRvb2xQcmV2aWV3J10sXG4gIF9fZGVwZW5kc19fOiBbXG4gICAgRHJhZ2dpbmdNb2R1bGUsXG4gICAgUnVsZXNNb2R1bGUsXG4gICAgVG9vbE1hbmFnZXJNb2R1bGUsXG4gICAgUHJldmlld1N1cHBvcnRNb2R1bGVcbiAgXSxcbiAgc3BhY2VUb29sOiBbJ3R5cGUnLCBTcGFjZVRvb2wgXSxcbiAgc3BhY2VUb29sUHJldmlldzogWyd0eXBlJywgU3BhY2VUb29sUHJldmlldyBdXG59O1xuIiwiaW1wb3J0IHtcbiAgZm9yRWFjaFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGNsb3Nlc3QgYXMgZG9tQ2xvc2VzdFxufSBmcm9tICdtaW4tZG9tJztcblxudmFyIExPV19QUklPUklUWSA9IDI1MDtcblxuLyoqXG4gKiBUaGUgdG9vbCBtYW5hZ2VyIGFjdHMgYXMgbWlkZGxlLW1hbiBiZXR3ZWVuIHRoZSBhdmFpbGFibGUgdG9vbCdzIGFuZCB0aGUgUGFsZXR0ZSxcbiAqIGl0IHRha2VzIGNhcmUgb2YgbWFraW5nIHN1cmUgdGhhdCB0aGUgY29ycmVjdCBhY3RpdmUgc3RhdGUgaXMgc2V0LlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gICAgZXZlbnRCdXNcbiAqIEBwYXJhbSAge09iamVjdH0gICAgZHJhZ2dpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVG9vbE1hbmFnZXIoZXZlbnRCdXMsIGRyYWdnaW5nKSB7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX2RyYWdnaW5nID0gZHJhZ2dpbmc7XG5cbiAgdGhpcy5fdG9vbHMgPSBbXTtcbiAgdGhpcy5fYWN0aXZlID0gbnVsbDtcbn1cblxuVG9vbE1hbmFnZXIuJGluamVjdCA9IFsgJ2V2ZW50QnVzJywgJ2RyYWdnaW5nJyBdO1xuXG5Ub29sTWFuYWdlci5wcm90b3R5cGUucmVnaXN0ZXJUb29sID0gZnVuY3Rpb24obmFtZSwgZXZlbnRzKSB7XG4gIHZhciB0b29scyA9IHRoaXMuX3Rvb2xzO1xuXG4gIGlmICghZXZlbnRzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBIHRvb2wgaGFzIHRvIGJlIHJlZ2lzdGVyZWQgd2l0aCBpdFxcJ3MgXCJldmVudHNcIicpO1xuICB9XG5cbiAgdG9vbHMucHVzaChuYW1lKTtcblxuICB0aGlzLmJpbmRFdmVudHMobmFtZSwgZXZlbnRzKTtcbn07XG5cblRvb2xNYW5hZ2VyLnByb3RvdHlwZS5pc0FjdGl2ZSA9IGZ1bmN0aW9uKHRvb2wpIHtcbiAgcmV0dXJuIHRvb2wgJiYgdGhpcy5fYWN0aXZlID09PSB0b29sO1xufTtcblxuVG9vbE1hbmFnZXIucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uKHRvb2wpIHtcbiAgcmV0dXJuIHRoaXMuX3Rvb2xzLmxlbmd0aDtcbn07XG5cblRvb2xNYW5hZ2VyLnByb3RvdHlwZS5zZXRBY3RpdmUgPSBmdW5jdGlvbih0b29sKSB7XG4gIHZhciBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzO1xuXG4gIGlmICh0aGlzLl9hY3RpdmUgIT09IHRvb2wpIHtcbiAgICB0aGlzLl9hY3RpdmUgPSB0b29sO1xuXG4gICAgZXZlbnRCdXMuZmlyZSgndG9vbC1tYW5hZ2VyLnVwZGF0ZScsIHsgdG9vbDogdG9vbCB9KTtcbiAgfVxufTtcblxuVG9vbE1hbmFnZXIucHJvdG90eXBlLmJpbmRFdmVudHMgPSBmdW5jdGlvbihuYW1lLCBldmVudHMpIHtcbiAgdmFyIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXMsXG4gICAgICBkcmFnZ2luZyA9IHRoaXMuX2RyYWdnaW5nO1xuXG4gIHZhciBldmVudHNUb1JlZ2lzdGVyID0gW107XG5cbiAgZXZlbnRCdXMub24oZXZlbnRzLnRvb2wgKyAnLmluaXQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dDtcblxuICAgIC8vIEFjdGl2ZSB0b29scyB0aGF0IHdhbnQgdG8gcmVhY3RpdmF0ZSB0aGVtc2VsdmVzIG11c3QgZG8gdGhpcyBleHBsaWNpdGx5XG4gICAgaWYgKCFjb250ZXh0LnJlYWN0aXZhdGUgJiYgdGhpcy5pc0FjdGl2ZShuYW1lKSkge1xuICAgICAgdGhpcy5zZXRBY3RpdmUobnVsbCk7XG5cbiAgICAgIGRyYWdnaW5nLmNhbmNlbCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0QWN0aXZlKG5hbWUpO1xuXG4gIH0sIHRoaXMpO1xuXG4gIC8vIFRvZG9bcmljYXJkb106IGFkZCB0ZXN0IGNhc2VzXG4gIGZvckVhY2goZXZlbnRzLCBmdW5jdGlvbihldmVudCkge1xuICAgIGV2ZW50c1RvUmVnaXN0ZXIucHVzaChldmVudCArICcuZW5kZWQnKTtcbiAgICBldmVudHNUb1JlZ2lzdGVyLnB1c2goZXZlbnQgKyAnLmNhbmNlbGVkJyk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKGV2ZW50c1RvUmVnaXN0ZXIsIExPV19QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgb3JpZ2luYWxFdmVudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQ7XG5cbiAgICAvLyBXZSBkZWZlciB0aGUgZGUtYWN0aXZhdGlvbiBvZiB0aGUgdG9vbCB0byB0aGUgLmFjdGl2YXRlIHBoYXNlLFxuICAgIC8vIHNvIHdlJ3JlIGFibGUgdG8gY2hlY2sgaWYgd2Ugd2FudCB0byB0b2dnbGUgb2ZmIHRoZSBjdXJyZW50XG4gICAgLy8gYWN0aXZlIHRvb2wgb3Igc3dpdGNoIHRvIGEgbmV3IG9uZVxuICAgIGlmICghdGhpcy5fYWN0aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9yaWdpbmFsRXZlbnQgJiYgZG9tQ2xvc2VzdChvcmlnaW5hbEV2ZW50LnRhcmdldCwgJy5ncm91cFtkYXRhLWdyb3VwPVwidG9vbHNcIl0nKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0QWN0aXZlKG51bGwpO1xuICB9LCB0aGlzKTtcbn07XG4iLCJpbXBvcnQgRHJhZ2dpbmdNb2R1bGUgZnJvbSAnLi4vZHJhZ2dpbmcnO1xuXG5pbXBvcnQgVG9vbE1hbmFnZXIgZnJvbSAnLi9Ub29sTWFuYWdlcic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBEcmFnZ2luZ01vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAndG9vbE1hbmFnZXInIF0sXG4gIHRvb2xNYW5hZ2VyOiBbICd0eXBlJywgVG9vbE1hbmFnZXIgXVxufTtcbiIsImltcG9ydCB7XG4gIGlzU3RyaW5nLFxuICBhc3NpZ24sXG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBkb21pZnksXG4gIGF0dHIgYXMgZG9tQXR0cixcbiAgY2xhc3NlcyBhcyBkb21DbGFzc2VzLFxuICByZW1vdmUgYXMgZG9tUmVtb3ZlLFxuICBkZWxlZ2F0ZSBhcyBkb21EZWxlZ2F0ZVxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IElkcyBmcm9tICcuLi8uLi91dGlsL0lkR2VuZXJhdG9yJztcblxuLy8gZG9jdW1lbnQgd2lkZSB1bmlxdWUgdG9vbHRpcCBpZHNcbnZhciBpZHMgPSBuZXcgSWRzKCd0dCcpO1xuXG5cbmZ1bmN0aW9uIGNyZWF0ZVJvb3QocGFyZW50Tm9kZSkge1xuICB2YXIgcm9vdCA9IGRvbWlmeShcbiAgICAnPGRpdiBjbGFzcz1cImRqcy10b29sdGlwLWNvbnRhaW5lclwiIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMDsgaGVpZ2h0OiAwO1wiIC8+J1xuICApO1xuXG4gIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHJvb3QsIHBhcmVudE5vZGUuZmlyc3RDaGlsZCk7XG5cbiAgcmV0dXJuIHJvb3Q7XG59XG5cblxuZnVuY3Rpb24gc2V0UG9zaXRpb24oZWwsIHgsIHkpIHtcbiAgYXNzaWduKGVsLnN0eWxlLCB7IGxlZnQ6IHggKyAncHgnLCB0b3A6IHkgKyAncHgnIH0pO1xufVxuXG5mdW5jdGlvbiBzZXRWaXNpYmxlKGVsLCB2aXNpYmxlKSB7XG4gIGVsLnN0eWxlLmRpc3BsYXkgPSB2aXNpYmxlID09PSBmYWxzZSA/ICdub25lJyA6ICcnO1xufVxuXG5cbnZhciB0b29sdGlwQ2xhc3MgPSAnZGpzLXRvb2x0aXAnLFxuICAgIHRvb2x0aXBTZWxlY3RvciA9ICcuJyArIHRvb2x0aXBDbGFzcztcblxuLyoqXG4gKiBBIHNlcnZpY2UgdGhhdCBhbGxvd3MgdXNlcnMgdG8gcmVuZGVyIHRvb2wgdGlwcyBvbiB0aGUgZGlhZ3JhbS5cbiAqXG4gKiBUaGUgdG9vbHRpcCBzZXJ2aWNlIHdpbGwgdGFrZSBjYXJlIG9mIHVwZGF0aW5nIHRoZSB0b29sdGlwIHBvc2l0aW9uaW5nXG4gKiBkdXJpbmcgbmF2aWdhdGlvbiArIHpvb21pbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKlxuICogLy8gYWRkIGEgcGluayBiYWRnZSBvbiB0aGUgdG9wIGxlZnQgb2YgdGhlIHNoYXBlXG4gKiB0b29sdGlwcy5hZGQoe1xuICogICBwb3NpdGlvbjoge1xuICogICAgIHg6IDUwLFxuICogICAgIHk6IDEwMFxuICogICB9LFxuICogICBodG1sOiAnPGRpdiBzdHlsZT1cIndpZHRoOiAxMHB4OyBiYWNrZ3JvdW5kOiBmdWNoc2lhOyBjb2xvcjogd2hpdGU7XCI+MDwvZGl2PidcbiAqIH0pO1xuICpcbiAqIC8vIG9yIHdpdGggb3B0aW9uYWwgbGlmZSBzcGFuXG4gKiB0b29sdGlwcy5hZGQoe1xuICogICBwb3NpdGlvbjoge1xuICogICAgIHRvcDogLTUsXG4gKiAgICAgbGVmdDogLTVcbiAqICAgfSxcbiAqICAgaHRtbDogJzxkaXYgc3R5bGU9XCJ3aWR0aDogMTBweDsgYmFja2dyb3VuZDogZnVjaHNpYTsgY29sb3I6IHdoaXRlO1wiPjA8L2Rpdj4nLFxuICogICB0dGw6IDIwMDBcbiAqIH0pO1xuICpcbiAqIC8vIHJlbW92ZSBhIHRvb2wgdGlwXG4gKiB2YXIgaWQgPSB0b29sdGlwcy5hZGQoLi4uKTtcbiAqIHRvb2x0aXBzLnJlbW92ZShpZCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUb29sdGlwcyhldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuXG4gIHRoaXMuX2lkcyA9IGlkcztcblxuICB0aGlzLl90b29sdGlwRGVmYXVsdHMgPSB7XG4gICAgc2hvdzoge1xuICAgICAgbWluWm9vbTogMC43LFxuICAgICAgbWF4Wm9vbTogNS4wXG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBNYXBwaW5nIHRvb2x0aXBJZCAtPiB0b29sdGlwXG4gICAqL1xuICB0aGlzLl90b29sdGlwcyA9IHt9O1xuXG4gIC8vIHJvb3QgaHRtbCBlbGVtZW50IGZvciBhbGwgdG9vbHRpcHNcbiAgdGhpcy5fdG9vbHRpcFJvb3QgPSBjcmVhdGVSb290KGNhbnZhcy5nZXRDb250YWluZXIoKSk7XG5cblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZG9tRGVsZWdhdGUuYmluZCh0aGlzLl90b29sdGlwUm9vdCwgdG9vbHRpcFNlbGVjdG9yLCAnbW91c2Vkb3duJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSk7XG5cbiAgZG9tRGVsZWdhdGUuYmluZCh0aGlzLl90b29sdGlwUm9vdCwgdG9vbHRpcFNlbGVjdG9yLCAnbW91c2VvdmVyJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBzZWxmLnRyaWdnZXIoJ21vdXNlb3ZlcicsIGV2ZW50KTtcbiAgfSk7XG5cbiAgZG9tRGVsZWdhdGUuYmluZCh0aGlzLl90b29sdGlwUm9vdCwgdG9vbHRpcFNlbGVjdG9yLCAnbW91c2VvdXQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHNlbGYudHJpZ2dlcignbW91c2VvdXQnLCBldmVudCk7XG4gIH0pO1xuXG4gIHRoaXMuX2luaXQoKTtcbn1cblxuXG5Ub29sdGlwcy4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnLCAnY2FudmFzJyBdO1xuXG5cbi8qKlxuICogQWRkcyBhIEhUTUwgdG9vbHRpcCB0byB0aGUgZGlhZ3JhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgIHRvb2x0aXAgICB0aGUgdG9vbHRpcCBjb25maWd1cmF0aW9uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8RE9NRWxlbWVudH0gICAgdG9vbHRpcC5odG1sICAgICAgICAgICAgICAgICBodG1sIGVsZW1lbnQgdG8gdXNlIGFzIGFuIHRvb2x0aXBcbiAqIEBwYXJhbSB7T2JqZWN0fSAgICAgICAgICAgICAgIFt0b29sdGlwLnNob3ddICAgICAgICAgICAgICAgc2hvdyBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gICAgICAgICAgICAgICBbdG9vbHRpcC5zaG93Lm1pblpvb21dICAgICAgIG1pbmltYWwgem9vbSBsZXZlbCB0byBzaG93IHRoZSB0b29sdGlwXG4gKiBAcGFyYW0ge251bWJlcn0gICAgICAgICAgICAgICBbdG9vbHRpcC5zaG93Lm1heFpvb21dICAgICAgIG1heGltdW0gem9vbSBsZXZlbCB0byBzaG93IHRoZSB0b29sdGlwXG4gKiBAcGFyYW0ge09iamVjdH0gICAgICAgICAgICAgICB0b29sdGlwLnBvc2l0aW9uICAgICAgICAgICAgIHdoZXJlIHRvIGF0dGFjaCB0aGUgdG9vbHRpcFxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgICAgICAgICAgW3Rvb2x0aXAucG9zaXRpb24ubGVmdF0gICAgICByZWxhdGl2ZSB0byBlbGVtZW50IGJib3ggbGVmdCBhdHRhY2htZW50XG4gKiBAcGFyYW0ge251bWJlcn0gICAgICAgICAgICAgICBbdG9vbHRpcC5wb3NpdGlvbi50b3BdICAgICAgIHJlbGF0aXZlIHRvIGVsZW1lbnQgYmJveCB0b3AgYXR0YWNobWVudFxuICogQHBhcmFtIHtudW1iZXJ9ICAgICAgICAgICAgICAgW3Rvb2x0aXAucG9zaXRpb24uYm90dG9tXSAgICByZWxhdGl2ZSB0byBlbGVtZW50IGJib3ggYm90dG9tIGF0dGFjaG1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgIFt0b29sdGlwLnBvc2l0aW9uLnJpZ2h0XSAgICAgcmVsYXRpdmUgdG8gZWxlbWVudCBiYm94IHJpZ2h0IGF0dGFjaG1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICAgICAgICAgIFt0b29sdGlwLnRpbWVvdXQ9LTFdXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgICAgaWQgdGhhdCBtYXkgYmUgdXNlZCB0byByZWZlcmVuY2UgdGhlIHRvb2x0aXAgZm9yIHVwZGF0ZSBvciByZW1vdmFsXG4gKi9cblRvb2x0aXBzLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbih0b29sdGlwKSB7XG5cbiAgaWYgKCF0b29sdGlwLnBvc2l0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHNwZWNpZml5IHRvb2x0aXAgcG9zaXRpb24nKTtcbiAgfVxuXG4gIGlmICghdG9vbHRpcC5odG1sKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHNwZWNpZml5IHRvb2x0aXAgaHRtbCcpO1xuICB9XG5cbiAgdmFyIGlkID0gdGhpcy5faWRzLm5leHQoKTtcblxuICB0b29sdGlwID0gYXNzaWduKHt9LCB0aGlzLl90b29sdGlwRGVmYXVsdHMsIHRvb2x0aXAsIHtcbiAgICBpZDogaWRcbiAgfSk7XG5cbiAgdGhpcy5fYWRkVG9vbHRpcCh0b29sdGlwKTtcblxuICBpZiAodG9vbHRpcC50aW1lb3V0KSB7XG4gICAgdGhpcy5zZXRUaW1lb3V0KHRvb2x0aXApO1xuICB9XG5cbiAgcmV0dXJuIGlkO1xufTtcblxuVG9vbHRpcHMucHJvdG90eXBlLnRyaWdnZXIgPSBmdW5jdGlvbihhY3Rpb24sIGV2ZW50KSB7XG5cbiAgdmFyIG5vZGUgPSBldmVudC5kZWxlZ2F0ZVRhcmdldCB8fCBldmVudC50YXJnZXQ7XG5cbiAgdmFyIHRvb2x0aXAgPSB0aGlzLmdldChkb21BdHRyKG5vZGUsICdkYXRhLXRvb2x0aXAtaWQnKSk7XG5cbiAgaWYgKCF0b29sdGlwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFjdGlvbiA9PT0gJ21vdXNlb3ZlcicgJiYgdG9vbHRpcC50aW1lb3V0KSB7XG4gICAgdGhpcy5jbGVhclRpbWVvdXQodG9vbHRpcCk7XG4gIH1cblxuICBpZiAoYWN0aW9uID09PSAnbW91c2VvdXQnICYmIHRvb2x0aXAudGltZW91dCkge1xuXG4gICAgLy8gY3V0IHRpbWVvdXQgYWZ0ZXIgbW91c2Ugb3V0XG4gICAgdG9vbHRpcC50aW1lb3V0ID0gMTAwMDtcblxuICAgIHRoaXMuc2V0VGltZW91dCh0b29sdGlwKTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgYSB0b29sdGlwIHdpdGggdGhlIGdpdmVuIGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gKi9cblRvb2x0aXBzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihpZCkge1xuXG4gIGlmICh0eXBlb2YgaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgaWQgPSBpZC5pZDtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl90b29sdGlwc1tpZF07XG59O1xuXG5Ub29sdGlwcy5wcm90b3R5cGUuY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24odG9vbHRpcCkge1xuXG4gIHRvb2x0aXAgPSB0aGlzLmdldCh0b29sdGlwKTtcblxuICBpZiAoIXRvb2x0aXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcmVtb3ZlVGltZXIgPSB0b29sdGlwLnJlbW92ZVRpbWVyO1xuXG4gIGlmIChyZW1vdmVUaW1lcikge1xuICAgIGNsZWFyVGltZW91dChyZW1vdmVUaW1lcik7XG4gICAgdG9vbHRpcC5yZW1vdmVUaW1lciA9IG51bGw7XG4gIH1cbn07XG5cblRvb2x0aXBzLnByb3RvdHlwZS5zZXRUaW1lb3V0ID0gZnVuY3Rpb24odG9vbHRpcCkge1xuXG4gIHRvb2x0aXAgPSB0aGlzLmdldCh0b29sdGlwKTtcblxuICBpZiAoIXRvb2x0aXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLmNsZWFyVGltZW91dCh0b29sdGlwKTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdG9vbHRpcC5yZW1vdmVUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5yZW1vdmUodG9vbHRpcCk7XG4gIH0sIHRvb2x0aXAudGltZW91dCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiB0b29sdGlwIHdpdGggdGhlIGdpdmVuIGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gKi9cblRvb2x0aXBzLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihpZCkge1xuXG4gIHZhciB0b29sdGlwID0gdGhpcy5nZXQoaWQpO1xuXG4gIGlmICh0b29sdGlwKSB7XG4gICAgZG9tUmVtb3ZlKHRvb2x0aXAuaHRtbCk7XG4gICAgZG9tUmVtb3ZlKHRvb2x0aXAuaHRtbENvbnRhaW5lcik7XG5cbiAgICBkZWxldGUgdG9vbHRpcC5odG1sQ29udGFpbmVyO1xuXG4gICAgZGVsZXRlIHRoaXMuX3Rvb2x0aXBzW3Rvb2x0aXAuaWRdO1xuICB9XG59O1xuXG5cblRvb2x0aXBzLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24oKSB7XG4gIHNldFZpc2libGUodGhpcy5fdG9vbHRpcFJvb3QpO1xufTtcblxuXG5Ub29sdGlwcy5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uKCkge1xuICBzZXRWaXNpYmxlKHRoaXMuX3Rvb2x0aXBSb290LCBmYWxzZSk7XG59O1xuXG5cblRvb2x0aXBzLnByb3RvdHlwZS5fdXBkYXRlUm9vdCA9IGZ1bmN0aW9uKHZpZXdib3gpIHtcbiAgdmFyIGEgPSB2aWV3Ym94LnNjYWxlIHx8IDE7XG4gIHZhciBkID0gdmlld2JveC5zY2FsZSB8fCAxO1xuXG4gIHZhciBtYXRyaXggPSAnbWF0cml4KCcgKyBhICsgJywwLDAsJyArIGQgKyAnLCcgKyAoLTEgKiB2aWV3Ym94LnggKiBhKSArICcsJyArICgtMSAqIHZpZXdib3gueSAqIGQpICsgJyknO1xuXG4gIHRoaXMuX3Rvb2x0aXBSb290LnN0eWxlLnRyYW5zZm9ybSA9IG1hdHJpeDtcbiAgdGhpcy5fdG9vbHRpcFJvb3Quc3R5bGVbJy1tcy10cmFuc2Zvcm0nXSA9IG1hdHJpeDtcbn07XG5cblxuVG9vbHRpcHMucHJvdG90eXBlLl9hZGRUb29sdGlwID0gZnVuY3Rpb24odG9vbHRpcCkge1xuXG4gIHZhciBpZCA9IHRvb2x0aXAuaWQsXG4gICAgICBodG1sID0gdG9vbHRpcC5odG1sLFxuICAgICAgaHRtbENvbnRhaW5lcixcbiAgICAgIHRvb2x0aXBSb290ID0gdGhpcy5fdG9vbHRpcFJvb3Q7XG5cbiAgLy8gdW53cmFwIGpxdWVyeSAoZm9yIHRob3NlIHdobyBuZWVkIGl0KVxuICBpZiAoaHRtbC5nZXQgJiYgaHRtbC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuanF1ZXJ5KSB7XG4gICAgaHRtbCA9IGh0bWwuZ2V0KDApO1xuICB9XG5cbiAgLy8gY3JlYXRlIHByb3BlciBodG1sIGVsZW1lbnRzIGZyb21cbiAgLy8gdG9vbHRpcCBIVE1MIHN0cmluZ3NcbiAgaWYgKGlzU3RyaW5nKGh0bWwpKSB7XG4gICAgaHRtbCA9IGRvbWlmeShodG1sKTtcbiAgfVxuXG4gIGh0bWxDb250YWluZXIgPSBkb21pZnkoJzxkaXYgZGF0YS10b29sdGlwLWlkPVwiJyArIGlkICsgJ1wiIGNsYXNzPVwiJyArIHRvb2x0aXBDbGFzcyArICdcIiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZVwiPicpO1xuXG4gIGh0bWxDb250YWluZXIuYXBwZW5kQ2hpbGQoaHRtbCk7XG5cbiAgaWYgKHRvb2x0aXAudHlwZSkge1xuICAgIGRvbUNsYXNzZXMoaHRtbENvbnRhaW5lcikuYWRkKCdkanMtdG9vbHRpcC0nICsgdG9vbHRpcC50eXBlKTtcbiAgfVxuXG4gIGlmICh0b29sdGlwLmNsYXNzTmFtZSkge1xuICAgIGRvbUNsYXNzZXMoaHRtbENvbnRhaW5lcikuYWRkKHRvb2x0aXAuY2xhc3NOYW1lKTtcbiAgfVxuXG4gIHRvb2x0aXAuaHRtbENvbnRhaW5lciA9IGh0bWxDb250YWluZXI7XG5cbiAgdG9vbHRpcFJvb3QuYXBwZW5kQ2hpbGQoaHRtbENvbnRhaW5lcik7XG5cbiAgdGhpcy5fdG9vbHRpcHNbaWRdID0gdG9vbHRpcDtcblxuICB0aGlzLl91cGRhdGVUb29sdGlwKHRvb2x0aXApO1xufTtcblxuXG5Ub29sdGlwcy5wcm90b3R5cGUuX3VwZGF0ZVRvb2x0aXAgPSBmdW5jdGlvbih0b29sdGlwKSB7XG5cbiAgdmFyIHBvc2l0aW9uID0gdG9vbHRpcC5wb3NpdGlvbixcbiAgICAgIGh0bWxDb250YWluZXIgPSB0b29sdGlwLmh0bWxDb250YWluZXI7XG5cbiAgLy8gdXBkYXRlIG92ZXJsYXkgaHRtbCBiYXNlZCBvbiB0b29sdGlwIHgsIHlcblxuICBzZXRQb3NpdGlvbihodG1sQ29udGFpbmVyLCBwb3NpdGlvbi54LCBwb3NpdGlvbi55KTtcbn07XG5cblxuVG9vbHRpcHMucHJvdG90eXBlLl91cGRhdGVUb29sdGlwVmlzaWJpbHR5ID0gZnVuY3Rpb24odmlld2JveCkge1xuXG4gIGZvckVhY2godGhpcy5fdG9vbHRpcHMsIGZ1bmN0aW9uKHRvb2x0aXApIHtcbiAgICB2YXIgc2hvdyA9IHRvb2x0aXAuc2hvdyxcbiAgICAgICAgaHRtbENvbnRhaW5lciA9IHRvb2x0aXAuaHRtbENvbnRhaW5lcixcbiAgICAgICAgdmlzaWJsZSA9IHRydWU7XG5cbiAgICBpZiAoc2hvdykge1xuICAgICAgaWYgKHNob3cubWluWm9vbSA+IHZpZXdib3guc2NhbGUgfHxcbiAgICAgICAgICBzaG93Lm1heFpvb20gPCB2aWV3Ym94LnNjYWxlKSB7XG4gICAgICAgIHZpc2libGUgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgc2V0VmlzaWJsZShodG1sQ29udGFpbmVyLCB2aXNpYmxlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuVG9vbHRpcHMucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8vIHNjcm9sbC96b29tIGludGVncmF0aW9uXG5cbiAgZnVuY3Rpb24gdXBkYXRlVmlld2JveCh2aWV3Ym94KSB7XG4gICAgc2VsZi5fdXBkYXRlUm9vdCh2aWV3Ym94KTtcbiAgICBzZWxmLl91cGRhdGVUb29sdGlwVmlzaWJpbHR5KHZpZXdib3gpO1xuXG4gICAgc2VsZi5zaG93KCk7XG4gIH1cblxuICB0aGlzLl9ldmVudEJ1cy5vbignY2FudmFzLnZpZXdib3guY2hhbmdpbmcnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHNlbGYuaGlkZSgpO1xuICB9KTtcblxuICB0aGlzLl9ldmVudEJ1cy5vbignY2FudmFzLnZpZXdib3guY2hhbmdlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdXBkYXRlVmlld2JveChldmVudC52aWV3Ym94KTtcbiAgfSk7XG59O1xuIiwiaW1wb3J0IFRvb2x0aXBzIGZyb20gJy4vVG9vbHRpcHMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICd0b29sdGlwcycgXSxcbiAgdG9vbHRpcHM6IFsgJ3R5cGUnLCBUb29sdGlwcyBdXG59OyIsImltcG9ydCB7XG4gIGFwcGVuZCBhcyBzdmdBcHBlbmQsXG4gIGF0dHIgYXMgc3ZnQXR0cixcbiAgY3JlYXRlIGFzIHN2Z0NyZWF0ZVxufSBmcm9tICd0aW55LXN2Zyc7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVG91Y2hGaXgoY2FudmFzLCBldmVudEJ1cykge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBldmVudEJ1cy5vbignY2FudmFzLmluaXQnLCBmdW5jdGlvbihlKSB7XG4gICAgc2VsZi5hZGRCQm94TWFya2VyKGUuc3ZnKTtcbiAgfSk7XG59XG5cblRvdWNoRml4LiRpbmplY3QgPSBbICdjYW52YXMnLCAnZXZlbnRCdXMnIF07XG5cblxuLyoqXG4gKiBTYWZhcmkgbW9iaWxlIChpT1MgNykgZG9lcyBub3QgZmlyZSB0b3VjaHN0YXJ0IGV2ZW50IGluIDxTVkc+IGVsZW1lbnRcbiAqIGlmIHRoZXJlIGlzIG5vIHNoYXBlIGJldHdlZW4gMCwwIGFuZCB2aWV3cG9ydCBlbGVtZW50cyBvcmlnaW4uXG4gKlxuICogU28gdG91Y2hzdGFydCBldmVudCBpcyBvbmx5IGZpcmVkIHdoZW4gdGhlIDxnIGNsYXNzPVwidmlld3BvcnRcIj4gZWxlbWVudCB3YXMgaGl0LlxuICogUHV0dGluZyBhbiBlbGVtZW50IG92ZXIgYW5kIGJlbG93IHRoZSAndmlld3BvcnQnIGZpeGVzIHRoYXQgYmVoYXZpb3IuXG4gKi9cblRvdWNoRml4LnByb3RvdHlwZS5hZGRCQm94TWFya2VyID0gZnVuY3Rpb24oc3ZnKSB7XG5cbiAgdmFyIG1hcmtlclN0eWxlID0ge1xuICAgIGZpbGw6ICdub25lJyxcbiAgICBjbGFzczogJ291dGVyLWJvdW5kLW1hcmtlcidcbiAgfTtcblxuICB2YXIgcmVjdDEgPSBzdmdDcmVhdGUoJ3JlY3QnKTtcbiAgc3ZnQXR0cihyZWN0MSwge1xuICAgIHg6IC0xMDAwMCxcbiAgICB5OiAxMDAwMCxcbiAgICB3aWR0aDogMTAsXG4gICAgaGVpZ2h0OiAxMFxuICB9KTtcbiAgc3ZnQXR0cihyZWN0MSwgbWFya2VyU3R5bGUpO1xuXG4gIHN2Z0FwcGVuZChzdmcsIHJlY3QxKTtcblxuICB2YXIgcmVjdDIgPSBzdmdDcmVhdGUoJ3JlY3QnKTtcbiAgc3ZnQXR0cihyZWN0Miwge1xuICAgIHg6IDEwMDAwLFxuICAgIHk6IDEwMDAwLFxuICAgIHdpZHRoOiAxMCxcbiAgICBoZWlnaHQ6IDEwXG4gIH0pO1xuICBzdmdBdHRyKHJlY3QyLCBtYXJrZXJTdHlsZSk7XG5cbiAgc3ZnQXBwZW5kKHN2ZywgcmVjdDIpO1xufTtcbiIsImltcG9ydCB7XG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBldmVudCBhcyBkb21FdmVudCxcbiAgY2xvc2VzdCBhcyBkb21DbG9zZXN0XG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQgSGFtbWVyIGZyb20gJ2hhbW1lcmpzJztcblxuaW1wb3J0IHtcbiAgdG9Qb2ludFxufSBmcm9tICcuLi8uLi91dGlsL0V2ZW50JztcblxudmFyIE1JTl9aT09NID0gMC4yLFxuICAgIE1BWF9aT09NID0gNDtcblxudmFyIG1vdXNlRXZlbnRzID0gW1xuICAnbW91c2Vkb3duJyxcbiAgJ21vdXNldXAnLFxuICAnbW91c2VvdmVyJyxcbiAgJ21vdXNlb3V0JyxcbiAgJ2NsaWNrJyxcbiAgJ2RibGNsaWNrJ1xuXTtcblxuZnVuY3Rpb24gbG9nKCkge1xuXG4gIC8vIGNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIGdldChzZXJ2aWNlLCBpbmplY3Rvcikge1xuICByZXR1cm4gaW5qZWN0b3IuZ2V0KHNlcnZpY2UsIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gc3RvcEV2ZW50KGV2ZW50KSB7XG5cbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgaWYgKHR5cGVvZiBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGNyZWF0ZVRvdWNoUmVjb2duaXplcihub2RlKSB7XG5cbiAgZnVuY3Rpb24gc3RvcE1vdXNlKGV2ZW50KSB7XG5cbiAgICBmb3JFYWNoKG1vdXNlRXZlbnRzLCBmdW5jdGlvbihlKSB7XG4gICAgICBkb21FdmVudC5iaW5kKG5vZGUsIGUsIHN0b3BFdmVudCwgdHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBhbGxvd01vdXNlKGV2ZW50KSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIGZvckVhY2gobW91c2VFdmVudHMsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZG9tRXZlbnQudW5iaW5kKG5vZGUsIGUsIHN0b3BFdmVudCwgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9LCA1MDApO1xuICB9XG5cbiAgZG9tRXZlbnQuYmluZChub2RlLCAndG91Y2hzdGFydCcsIHN0b3BNb3VzZSwgdHJ1ZSk7XG4gIGRvbUV2ZW50LmJpbmQobm9kZSwgJ3RvdWNoZW5kJywgYWxsb3dNb3VzZSwgdHJ1ZSk7XG4gIGRvbUV2ZW50LmJpbmQobm9kZSwgJ3RvdWNoY2FuY2VsJywgYWxsb3dNb3VzZSwgdHJ1ZSk7XG5cbiAgLy8gQSB0b3VjaCBldmVudCByZWNvZ25pemVyIHRoYXQgaGFuZGxlc1xuICAvLyB0b3VjaCBldmVudHMgb25seSAod2Uga25vdywgd2UgY2FuIGFscmVhZHkgaGFuZGxlXG4gIC8vIG1vdXNlIGV2ZW50cyBvdXQgb2YgdGhlIGJveClcblxuICB2YXIgcmVjb2duaXplciA9IG5ldyBIYW1tZXIuTWFuYWdlcihub2RlLCB7XG4gICAgaW5wdXRDbGFzczogSGFtbWVyLlRvdWNoSW5wdXQsXG4gICAgcmVjb2duaXplcnM6IFtdXG4gIH0pO1xuXG5cbiAgdmFyIHRhcCA9IG5ldyBIYW1tZXIuVGFwKCk7XG4gIHZhciBwYW4gPSBuZXcgSGFtbWVyLlBhbih7IHRocmVzaG9sZDogMTAgfSk7XG4gIHZhciBwcmVzcyA9IG5ldyBIYW1tZXIuUHJlc3MoKTtcbiAgdmFyIHBpbmNoID0gbmV3IEhhbW1lci5QaW5jaCgpO1xuXG4gIHZhciBkb3VibGVUYXAgPSBuZXcgSGFtbWVyLlRhcCh7IGV2ZW50OiAnZG91YmxldGFwJywgdGFwczogMiB9KTtcblxuICBwaW5jaC5yZXF1aXJlRmFpbHVyZShwYW4pO1xuICBwaW5jaC5yZXF1aXJlRmFpbHVyZShwcmVzcyk7XG5cbiAgcmVjb2duaXplci5hZGQoWyBwYW4sIHByZXNzLCBwaW5jaCwgZG91YmxlVGFwLCB0YXAgXSk7XG5cbiAgcmVjb2duaXplci5yZXNldCA9IGZ1bmN0aW9uKGZvcmNlKSB7XG4gICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVycyxcbiAgICAgICAgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcblxuICAgIGlmIChzZXNzaW9uLnN0b3BwZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2coJ3JlY29nbml6ZXInLCAnc3RvcCcpO1xuXG4gICAgcmVjb2duaXplci5zdG9wKGZvcmNlKTtcblxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSwgcjtcblxuICAgICAgbG9nKCdyZWNvZ25pemVyJywgJ3Jlc2V0Jyk7XG4gICAgICBmb3IgKGkgPSAwOyAociA9IHJlY29nbml6ZXJzW2ldKTsgaSsrKSB7XG4gICAgICAgIHIucmVzZXQoKTtcbiAgICAgICAgci5zdGF0ZSA9IDg7IC8vIEZBSUxFRCBTVEFURVxuICAgICAgfVxuXG4gICAgICBzZXNzaW9uLmN1clJlY29nbml6ZXIgPSBudWxsO1xuICAgIH0sIDApO1xuICB9O1xuXG4gIHJlY29nbml6ZXIub24oJ2hhbW1lci5pbnB1dCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnNyY0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJlY29nbml6ZXIucmVzZXQodHJ1ZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVjb2duaXplcjtcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiB0aGF0IHByb3ZpZGVzIHRvdWNoIGV2ZW50cyBmb3IgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7SW50ZXJhY3Rpb25FdmVudHN9IGludGVyYWN0aW9uRXZlbnRzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRvdWNoSW50ZXJhY3Rpb25FdmVudHMoXG4gICAgaW5qZWN0b3IsIGNhbnZhcywgZXZlbnRCdXMsXG4gICAgZWxlbWVudFJlZ2lzdHJ5LCBpbnRlcmFjdGlvbkV2ZW50cykge1xuXG4gIC8vIG9wdGlvbmFsIGludGVncmF0aW9uc1xuICB2YXIgZHJhZ2dpbmcgPSBnZXQoJ2RyYWdnaW5nJywgaW5qZWN0b3IpLFxuICAgICAgbW92ZSA9IGdldCgnbW92ZScsIGluamVjdG9yKSxcbiAgICAgIGNvbnRleHRQYWQgPSBnZXQoJ2NvbnRleHRQYWQnLCBpbmplY3RvciksXG4gICAgICBwYWxldHRlID0gZ2V0KCdwYWxldHRlJywgaW5qZWN0b3IpO1xuXG4gIC8vIHRoZSB0b3VjaCByZWNvZ25pemVyXG4gIHZhciByZWNvZ25pemVyO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZXIodHlwZSkge1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBsb2coJ2VsZW1lbnQnLCB0eXBlLCBldmVudCk7XG5cbiAgICAgIGludGVyYWN0aW9uRXZlbnRzLmZpcmUodHlwZSwgZXZlbnQpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRHZngodGFyZ2V0KSB7XG4gICAgdmFyIG5vZGUgPSBkb21DbG9zZXN0KHRhcmdldCwgJ3N2ZywgLmRqcy1lbGVtZW50JywgdHJ1ZSk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0RXZlbnRzKHN2Zykge1xuXG4gICAgLy8gdG91Y2ggcmVjb2duaXplclxuICAgIHJlY29nbml6ZXIgPSBjcmVhdGVUb3VjaFJlY29nbml6ZXIoc3ZnKTtcblxuICAgIHJlY29nbml6ZXIub24oJ2RvdWJsZXRhcCcsIGhhbmRsZXIoJ2VsZW1lbnQuZGJsY2xpY2snKSk7XG5cbiAgICByZWNvZ25pemVyLm9uKCd0YXAnLCBoYW5kbGVyKCdlbGVtZW50LmNsaWNrJykpO1xuXG4gICAgZnVuY3Rpb24gc3RhcnRHcmFiQ2FudmFzKGV2ZW50KSB7XG5cbiAgICAgIGxvZygnY2FudmFzJywgJ2dyYWIgc3RhcnQnKTtcblxuICAgICAgdmFyIGx4ID0gMCwgbHkgPSAwO1xuXG4gICAgICBmdW5jdGlvbiB1cGRhdGUoZSkge1xuXG4gICAgICAgIHZhciBkeCA9IGUuZGVsdGFYIC0gbHgsXG4gICAgICAgICAgICBkeSA9IGUuZGVsdGFZIC0gbHk7XG5cbiAgICAgICAgY2FudmFzLnNjcm9sbCh7IGR4OiBkeCwgZHk6IGR5IH0pO1xuXG4gICAgICAgIGx4ID0gZS5kZWx0YVg7XG4gICAgICAgIGx5ID0gZS5kZWx0YVk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGVuZChlKSB7XG4gICAgICAgIHJlY29nbml6ZXIub2ZmKCdwYW5tb3ZlJywgdXBkYXRlKTtcbiAgICAgICAgcmVjb2duaXplci5vZmYoJ3BhbmVuZCcsIGVuZCk7XG4gICAgICAgIHJlY29nbml6ZXIub2ZmKCdwYW5jYW5jZWwnLCBlbmQpO1xuXG4gICAgICAgIGxvZygnY2FudmFzJywgJ2dyYWIgZW5kJyk7XG4gICAgICB9XG5cbiAgICAgIHJlY29nbml6ZXIub24oJ3Bhbm1vdmUnLCB1cGRhdGUpO1xuICAgICAgcmVjb2duaXplci5vbigncGFuZW5kJywgZW5kKTtcbiAgICAgIHJlY29nbml6ZXIub24oJ3BhbmNhbmNlbCcsIGVuZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRHcmFiKGV2ZW50KSB7XG5cbiAgICAgIHZhciBnZnggPSBnZXRHZngoZXZlbnQudGFyZ2V0KSxcbiAgICAgICAgICBlbGVtZW50ID0gZ2Z4ICYmIGVsZW1lbnRSZWdpc3RyeS5nZXQoZ2Z4KTtcblxuICAgICAgLy8gcmVjb2duaXplclxuICAgICAgaWYgKG1vdmUgJiYgY2FudmFzLmdldFJvb3RFbGVtZW50KCkgIT09IGVsZW1lbnQpIHtcbiAgICAgICAgbG9nKCdlbGVtZW50JywgJ21vdmUgc3RhcnQnLCBlbGVtZW50LCBldmVudCwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBtb3ZlLnN0YXJ0KGV2ZW50LCBlbGVtZW50LCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0R3JhYkNhbnZhcyhldmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRab29tKGUpIHtcblxuICAgICAgbG9nKCdjYW52YXMnLCAnem9vbSBzdGFydCcpO1xuXG4gICAgICB2YXIgem9vbSA9IGNhbnZhcy56b29tKCksXG4gICAgICAgICAgbWlkID0gZS5jZW50ZXI7XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZShlKSB7XG5cbiAgICAgICAgdmFyIHJhdGlvID0gMSAtICgxIC0gZS5zY2FsZSkgLyAxLjUwLFxuICAgICAgICAgICAgbmV3Wm9vbSA9IE1hdGgubWF4KE1JTl9aT09NLCBNYXRoLm1pbihNQVhfWk9PTSwgcmF0aW8gKiB6b29tKSk7XG5cbiAgICAgICAgY2FudmFzLnpvb20obmV3Wm9vbSwgbWlkKTtcblxuICAgICAgICBzdG9wRXZlbnQoZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGVuZChlKSB7XG4gICAgICAgIHJlY29nbml6ZXIub2ZmKCdwaW5jaG1vdmUnLCB1cGRhdGUpO1xuICAgICAgICByZWNvZ25pemVyLm9mZigncGluY2hlbmQnLCBlbmQpO1xuICAgICAgICByZWNvZ25pemVyLm9mZigncGluY2hjYW5jZWwnLCBlbmQpO1xuXG4gICAgICAgIHJlY29nbml6ZXIucmVzZXQodHJ1ZSk7XG5cbiAgICAgICAgbG9nKCdjYW52YXMnLCAnem9vbSBlbmQnKTtcbiAgICAgIH1cblxuICAgICAgcmVjb2duaXplci5vbigncGluY2htb3ZlJywgdXBkYXRlKTtcbiAgICAgIHJlY29nbml6ZXIub24oJ3BpbmNoZW5kJywgZW5kKTtcbiAgICAgIHJlY29nbml6ZXIub24oJ3BpbmNoY2FuY2VsJywgZW5kKTtcbiAgICB9XG5cbiAgICByZWNvZ25pemVyLm9uKCdwYW5zdGFydCcsIHN0YXJ0R3JhYik7XG4gICAgcmVjb2duaXplci5vbigncHJlc3MnLCBzdGFydEdyYWIpO1xuXG4gICAgcmVjb2duaXplci5vbigncGluY2hzdGFydCcsIHN0YXJ0Wm9vbSk7XG4gIH1cblxuICBpZiAoZHJhZ2dpbmcpIHtcblxuICAgIC8vIHNpbXVsYXRlIGhvdmVyIGR1cmluZyBkcmFnZ2luZ1xuICAgIGV2ZW50QnVzLm9uKCdkcmFnLm1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgICB2YXIgb3JpZ2luYWxFdmVudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQ7XG5cbiAgICAgIGlmICghb3JpZ2luYWxFdmVudCB8fCBvcmlnaW5hbEV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBwb3NpdGlvbiA9IHRvUG9pbnQob3JpZ2luYWxFdmVudCk7XG5cbiAgICAgIC8vIHRoaXMgZ2V0cyByZWFsbHkgZXhwZW5zaXZlIC4uLlxuICAgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpLFxuICAgICAgICAgIGdmeCA9IGdldEdmeChub2RlKSxcbiAgICAgICAgICBlbGVtZW50ID0gZ2Z4ICYmIGVsZW1lbnRSZWdpc3RyeS5nZXQoZ2Z4KTtcblxuICAgICAgaWYgKGVsZW1lbnQgIT09IGV2ZW50LmhvdmVyKSB7XG4gICAgICAgIGlmIChldmVudC5ob3Zlcikge1xuICAgICAgICAgIGRyYWdnaW5nLm91dChldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgIGRyYWdnaW5nLmhvdmVyKHsgZWxlbWVudDogZWxlbWVudCwgZ2Z4OiBnZnggfSk7XG5cbiAgICAgICAgICBldmVudC5ob3ZlciA9IGVsZW1lbnQ7XG4gICAgICAgICAgZXZlbnQuaG92ZXJHZnggPSBnZng7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChjb250ZXh0UGFkKSB7XG5cbiAgICBldmVudEJ1cy5vbignY29udGV4dFBhZC5jcmVhdGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgdmFyIG5vZGUgPSBldmVudC5wYWQuaHRtbDtcblxuICAgICAgLy8gdG91Y2ggcmVjb2duaXplclxuICAgICAgdmFyIHBhZFJlY29nbml6ZXIgPSBjcmVhdGVUb3VjaFJlY29nbml6ZXIobm9kZSk7XG5cbiAgICAgIHBhZFJlY29nbml6ZXIub24oJ3BhbnN0YXJ0JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgbG9nKCdjb250ZXh0LXBhZCcsICdwYW5zdGFydCcsIGV2ZW50KTtcbiAgICAgICAgY29udGV4dFBhZC50cmlnZ2VyKCdkcmFnc3RhcnQnLCBldmVudCwgdHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgcGFkUmVjb2duaXplci5vbigncHJlc3MnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICBsb2coJ2NvbnRleHQtcGFkJywgJ3ByZXNzJywgZXZlbnQpO1xuICAgICAgICBjb250ZXh0UGFkLnRyaWdnZXIoJ2RyYWdzdGFydCcsIGV2ZW50LCB0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBwYWRSZWNvZ25pemVyLm9uKCd0YXAnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICBsb2coJ2NvbnRleHQtcGFkJywgJ3RhcCcsIGV2ZW50KTtcbiAgICAgICAgY29udGV4dFBhZC50cmlnZ2VyKCdjbGljaycsIGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHBhbGV0dGUpIHtcbiAgICBldmVudEJ1cy5vbigncGFsZXR0ZS5jcmVhdGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgdmFyIG5vZGUgPSBldmVudC5jb250YWluZXI7XG5cbiAgICAgIC8vIHRvdWNoIHJlY29nbml6ZXJcbiAgICAgIHZhciBwYWRSZWNvZ25pemVyID0gY3JlYXRlVG91Y2hSZWNvZ25pemVyKG5vZGUpO1xuXG4gICAgICBwYWRSZWNvZ25pemVyLm9uKCdwYW5zdGFydCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIGxvZygncGFsZXR0ZScsICdwYW5zdGFydCcsIGV2ZW50KTtcbiAgICAgICAgcGFsZXR0ZS50cmlnZ2VyKCdkcmFnc3RhcnQnLCBldmVudCwgdHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgcGFkUmVjb2duaXplci5vbigncHJlc3MnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICBsb2coJ3BhbGV0dGUnLCAncHJlc3MnLCBldmVudCk7XG4gICAgICAgIHBhbGV0dGUudHJpZ2dlcignZHJhZ3N0YXJ0JywgZXZlbnQsIHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIHBhZFJlY29nbml6ZXIub24oJ3RhcCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIGxvZygncGFsZXR0ZScsICd0YXAnLCBldmVudCk7XG4gICAgICAgIHBhbGV0dGUudHJpZ2dlcignY2xpY2snLCBldmVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGV2ZW50QnVzLm9uKCdjYW52YXMuaW5pdCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaW5pdEV2ZW50cyhldmVudC5zdmcpO1xuICB9KTtcbn1cblxuXG5Ub3VjaEludGVyYWN0aW9uRXZlbnRzLiRpbmplY3QgPSBbXG4gICdpbmplY3RvcicsXG4gICdjYW52YXMnLFxuICAnZXZlbnRCdXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ2ludGVyYWN0aW9uRXZlbnRzJyxcbiAgJ3RvdWNoRml4J1xuXTtcbiIsImltcG9ydCBJbnRlcmFjdGlvbkV2ZW50c01vZHVsZSBmcm9tICcuLi9pbnRlcmFjdGlvbi1ldmVudHMnO1xuXG5pbXBvcnQgVG91Y2hJbnRlcmFjdGlvbkV2ZW50cyBmcm9tICcuL1RvdWNoSW50ZXJhY3Rpb25FdmVudHMnO1xuaW1wb3J0IFRvdWNoRml4IGZyb20gJy4vVG91Y2hGaXgnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbIEludGVyYWN0aW9uRXZlbnRzTW9kdWxlIF0sXG4gIF9faW5pdF9fOiBbICd0b3VjaEludGVyYWN0aW9uRXZlbnRzJyBdLFxuICB0b3VjaEludGVyYWN0aW9uRXZlbnRzOiBbICd0eXBlJywgVG91Y2hJbnRlcmFjdGlvbkV2ZW50cyBdLFxuICB0b3VjaEZpeDogWyAndHlwZScsIFRvdWNoRml4IF1cbn07IiwiaW1wb3J0IHRyYW5zbGF0ZSBmcm9tICcuL3RyYW5zbGF0ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdHJhbnNsYXRlOiBbICd2YWx1ZScsIHRyYW5zbGF0ZSBdXG59OyIsIi8qKlxuICogQSBzaW1wbGUgdHJhbnNsYXRpb24gc3R1YiB0byBiZSB1c2VkIGZvciBtdWx0aS1sYW5ndWFnZSBzdXBwb3J0XG4gKiBpbiBkaWFncmFtcy4gQ2FuIGJlIGVhc2lseSByZXBsYWNlZCB3aXRoIGEgbW9yZSBzb3BoaXN0aWNhdGVkXG4gKiBzb2x1dGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIHVzZSBpdCBpbnNpZGUgYW55IGRpYWdyYW0gY29tcG9uZW50IGJ5IGluamVjdGluZyBgdHJhbnNsYXRlYC5cbiAqXG4gKiBmdW5jdGlvbiBNeVNlcnZpY2UodHJhbnNsYXRlKSB7XG4gKiAgIGFsZXJ0KHRyYW5zbGF0ZSgnSEVMTE8ge3lvdX0nLCB7IHlvdTogJ1lvdSEnIH0pKTtcbiAqIH1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGUgdG8gaW50ZXJwb2xhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVwbGFjZW1lbnRzXSBhIG1hcCB3aXRoIHN1YnN0aXR1dGVzXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgdHJhbnNsYXRlZCBzdHJpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNsYXRlKHRlbXBsYXRlLCByZXBsYWNlbWVudHMpIHtcblxuICByZXBsYWNlbWVudHMgPSByZXBsYWNlbWVudHMgfHwge307XG5cbiAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL3soW159XSspfS9nLCBmdW5jdGlvbihfLCBrZXkpIHtcbiAgICByZXR1cm4gcmVwbGFjZW1lbnRzW2tleV0gfHwgJ3snICsga2V5ICsgJ30nO1xuICB9KTtcbn0iLCJpbXBvcnQge1xuICBnZXRNaWRcbn0gZnJvbSAnLi9MYXlvdXRVdGlsJztcblxuXG4vKipcbiAqIEEgYmFzZSBjb25uZWN0aW9uIGxheW91dGVyIGltcGxlbWVudGF0aW9uXG4gKiB0aGF0IGxheW91dHMgdGhlIGNvbm5lY3Rpb24gYnkgZGlyZWN0bHkgY29ubmVjdGluZ1xuICogbWlkKHNvdXJjZSkgKyBtaWQodGFyZ2V0KS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQmFzZUxheW91dGVyKCkge31cblxuXG4vKipcbiAqIFJldHVybiB0aGUgbmV3IGxheW91dGVkIHdheXBvaW50cyBmb3IgdGhlIGdpdmVuIGNvbm5lY3Rpb24uXG4gKlxuICogVGhlIGNvbm5lY3Rpb24gcGFzc2VkIGlzIHN0aWxsIHVuY2hhbmdlZDsgeW91IG1heSBmaWd1cmUgb3V0IGFib3V0XG4gKiB0aGUgbmV3IGNvbm5lY3Rpb24gc3RhcnQgLyBlbmQgdmlhIHRoZSBsYXlvdXQgaGludHMgcHJvdmlkZWQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQ29ubmVjdGlvbn0gY29ubmVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFtoaW50c11cbiAqIEBwYXJhbSB7UG9pbnR9IFtoaW50cy5jb25uZWN0aW9uU3RhcnRdXG4gKiBAcGFyYW0ge1BvaW50fSBbaGludHMuY29ubmVjdGlvbkVuZF1cbiAqIEBwYXJhbSB7UG9pbnR9IFtoaW50cy5zb3VyY2VdXG4gKiBAcGFyYW0ge1BvaW50fSBbaGludHMudGFyZ2V0XVxuICpcbiAqIEByZXR1cm4ge0FycmF5PFBvaW50Pn0gdGhlIGxheW91dGVkIGNvbm5lY3Rpb24gd2F5cG9pbnRzXG4gKi9cbkJhc2VMYXlvdXRlci5wcm90b3R5cGUubGF5b3V0Q29ubmVjdGlvbiA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIGhpbnRzKSB7XG5cbiAgaGludHMgPSBoaW50cyB8fCB7fTtcblxuICByZXR1cm4gW1xuICAgIGhpbnRzLmNvbm5lY3Rpb25TdGFydCB8fCBnZXRNaWQoaGludHMuc291cmNlIHx8IGNvbm5lY3Rpb24uc291cmNlKSxcbiAgICBoaW50cy5jb25uZWN0aW9uRW5kIHx8IGdldE1pZChoaW50cy50YXJnZXQgfHwgY29ubmVjdGlvbi50YXJnZXQpXG4gIF07XG59O1xuIiwiaW1wb3J0IHtcbiAgYXNzaWduXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0RWxlbWVudExpbmVJbnRlcnNlY3Rpb25cbn0gZnJvbSAnLi9MYXlvdXRVdGlsJztcblxuXG5mdW5jdGlvbiBkb2NraW5nVG9Qb2ludChkb2NraW5nKSB7XG5cbiAgLy8gdXNlIHRoZSBkb2NraW5ncyBhY3R1YWwgcG9pbnQgYW5kXG4gIC8vIHJldGFpbiB0aGUgb3JpZ2luYWwgZG9ja2luZ1xuICByZXR1cm4gYXNzaWduKHsgb3JpZ2luYWw6IGRvY2tpbmcucG9pbnQub3JpZ2luYWwgfHwgZG9ja2luZy5wb2ludCB9LCBkb2NraW5nLmFjdHVhbCk7XG59XG5cblxuLyoqXG4gKiBBIHtAbGluayBDb25uZWN0aW9uRG9ja2luZ30gdGhhdCBjcm9wcyBjb25uZWN0aW9uIHdheXBvaW50cyBiYXNlZCBvblxuICogdGhlIHBhdGgocykgb2YgdGhlIGNvbm5lY3Rpb24gc291cmNlIGFuZCB0YXJnZXQuXG4gKlxuICogQHBhcmFtIHtkanMuY29yZS5FbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDcm9wcGluZ0Nvbm5lY3Rpb25Eb2NraW5nKGVsZW1lbnRSZWdpc3RyeSwgZ3JhcGhpY3NGYWN0b3J5KSB7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fZ3JhcGhpY3NGYWN0b3J5ID0gZ3JhcGhpY3NGYWN0b3J5O1xufVxuXG5Dcm9wcGluZ0Nvbm5lY3Rpb25Eb2NraW5nLiRpbmplY3QgPSBbICdlbGVtZW50UmVnaXN0cnknLCAnZ3JhcGhpY3NGYWN0b3J5JyBdO1xuXG5cbi8qKlxuICogQGluaGVyaXREb2MgQ29ubmVjdGlvbkRvY2tpbmcjZ2V0Q3JvcHBlZFdheXBvaW50c1xuICovXG5Dcm9wcGluZ0Nvbm5lY3Rpb25Eb2NraW5nLnByb3RvdHlwZS5nZXRDcm9wcGVkV2F5cG9pbnRzID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgc291cmNlLCB0YXJnZXQpIHtcblxuICBzb3VyY2UgPSBzb3VyY2UgfHwgY29ubmVjdGlvbi5zb3VyY2U7XG4gIHRhcmdldCA9IHRhcmdldCB8fCBjb25uZWN0aW9uLnRhcmdldDtcblxuICB2YXIgc291cmNlRG9ja2luZyA9IHRoaXMuZ2V0RG9ja2luZ1BvaW50KGNvbm5lY3Rpb24sIHNvdXJjZSwgdHJ1ZSksXG4gICAgICB0YXJnZXREb2NraW5nID0gdGhpcy5nZXREb2NraW5nUG9pbnQoY29ubmVjdGlvbiwgdGFyZ2V0KTtcblxuICB2YXIgY3JvcHBlZFdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzLnNsaWNlKHNvdXJjZURvY2tpbmcuaWR4ICsgMSwgdGFyZ2V0RG9ja2luZy5pZHgpO1xuXG4gIGNyb3BwZWRXYXlwb2ludHMudW5zaGlmdChkb2NraW5nVG9Qb2ludChzb3VyY2VEb2NraW5nKSk7XG4gIGNyb3BwZWRXYXlwb2ludHMucHVzaChkb2NraW5nVG9Qb2ludCh0YXJnZXREb2NraW5nKSk7XG5cbiAgcmV0dXJuIGNyb3BwZWRXYXlwb2ludHM7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgY29ubmVjdGlvbiBkb2NraW5nIHBvaW50IG9uIHRoZSBzcGVjaWZpZWQgc2hhcGVcbiAqXG4gKiBAaW5oZXJpdERvYyBDb25uZWN0aW9uRG9ja2luZyNnZXREb2NraW5nUG9pbnRcbiAqL1xuQ3JvcHBpbmdDb25uZWN0aW9uRG9ja2luZy5wcm90b3R5cGUuZ2V0RG9ja2luZ1BvaW50ID0gZnVuY3Rpb24oY29ubmVjdGlvbiwgc2hhcGUsIGRvY2tTdGFydCkge1xuXG4gIHZhciB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cyxcbiAgICAgIGRvY2tpbmdJZHgsXG4gICAgICBkb2NraW5nUG9pbnQsXG4gICAgICBjcm9wcGVkUG9pbnQ7XG5cbiAgZG9ja2luZ0lkeCA9IGRvY2tTdGFydCA/IDAgOiB3YXlwb2ludHMubGVuZ3RoIC0gMTtcbiAgZG9ja2luZ1BvaW50ID0gd2F5cG9pbnRzW2RvY2tpbmdJZHhdO1xuXG4gIGNyb3BwZWRQb2ludCA9IHRoaXMuX2dldEludGVyc2VjdGlvbihzaGFwZSwgY29ubmVjdGlvbiwgZG9ja1N0YXJ0KTtcblxuICByZXR1cm4ge1xuICAgIHBvaW50OiBkb2NraW5nUG9pbnQsXG4gICAgYWN0dWFsOiBjcm9wcGVkUG9pbnQgfHwgZG9ja2luZ1BvaW50LFxuICAgIGlkeDogZG9ja2luZ0lkeFxuICB9O1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuQ3JvcHBpbmdDb25uZWN0aW9uRG9ja2luZy5wcm90b3R5cGUuX2dldEludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKHNoYXBlLCBjb25uZWN0aW9uLCB0YWtlRmlyc3QpIHtcblxuICB2YXIgc2hhcGVQYXRoID0gdGhpcy5fZ2V0U2hhcGVQYXRoKHNoYXBlKSxcbiAgICAgIGNvbm5lY3Rpb25QYXRoID0gdGhpcy5fZ2V0Q29ubmVjdGlvblBhdGgoY29ubmVjdGlvbik7XG5cbiAgcmV0dXJuIGdldEVsZW1lbnRMaW5lSW50ZXJzZWN0aW9uKHNoYXBlUGF0aCwgY29ubmVjdGlvblBhdGgsIHRha2VGaXJzdCk7XG59O1xuXG5Dcm9wcGluZ0Nvbm5lY3Rpb25Eb2NraW5nLnByb3RvdHlwZS5fZ2V0Q29ubmVjdGlvblBhdGggPSBmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gIHJldHVybiB0aGlzLl9ncmFwaGljc0ZhY3RvcnkuZ2V0Q29ubmVjdGlvblBhdGgoY29ubmVjdGlvbik7XG59O1xuXG5Dcm9wcGluZ0Nvbm5lY3Rpb25Eb2NraW5nLnByb3RvdHlwZS5fZ2V0U2hhcGVQYXRoID0gZnVuY3Rpb24oc2hhcGUpIHtcbiAgcmV0dXJuIHRoaXMuX2dyYXBoaWNzRmFjdG9yeS5nZXRTaGFwZVBhdGgoc2hhcGUpO1xufTtcblxuQ3JvcHBpbmdDb25uZWN0aW9uRG9ja2luZy5wcm90b3R5cGUuX2dldEdmeCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhlbGVtZW50KTtcbn07XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCxcbiAgc29ydEJ5XG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgcG9pbnREaXN0YW5jZSxcbiAgcG9pbnRzT25MaW5lXG59IGZyb20gJy4uL3V0aWwvR2VvbWV0cnknO1xuXG5pbXBvcnQgaW50ZXJzZWN0UGF0aHMgZnJvbSAncGF0aC1pbnRlcnNlY3Rpb24nO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZEJvdW5kcyhib3VuZHMpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBNYXRoLnJvdW5kKGJvdW5kcy54KSxcbiAgICB5OiBNYXRoLnJvdW5kKGJvdW5kcy55KSxcbiAgICB3aWR0aDogTWF0aC5yb3VuZChib3VuZHMud2lkdGgpLFxuICAgIGhlaWdodDogTWF0aC5yb3VuZChib3VuZHMuaGVpZ2h0KVxuICB9O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZFBvaW50KHBvaW50KSB7XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBNYXRoLnJvdW5kKHBvaW50LngpLFxuICAgIHk6IE1hdGgucm91bmQocG9pbnQueSlcbiAgfTtcbn1cblxuXG4vKipcbiAqIENvbnZlcnQgdGhlIGdpdmVuIGJvdW5kcyB0byBhIHsgdG9wLCBsZWZ0LCBib3R0b20sIHJpZ2h0IH0gZGVzY3JpcHRvci5cbiAqXG4gKiBAcGFyYW0ge0JvdW5kc3xQb2ludH0gYm91bmRzXG4gKlxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNUUkJMKGJvdW5kcykge1xuICByZXR1cm4ge1xuICAgIHRvcDogYm91bmRzLnksXG4gICAgcmlnaHQ6IGJvdW5kcy54ICsgKGJvdW5kcy53aWR0aCB8fCAwKSxcbiAgICBib3R0b206IGJvdW5kcy55ICsgKGJvdW5kcy5oZWlnaHQgfHwgMCksXG4gICAgbGVmdDogYm91bmRzLnhcbiAgfTtcbn1cblxuXG4vKipcbiAqIENvbnZlcnQgYSB7IHRvcCwgbGVmdCwgYm90dG9tLCByaWdodCB9IHRvIGFuIG9iamVjdHMgYm91bmRzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0cmJsXG4gKlxuICogQHJldHVybiB7Qm91bmRzfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNCb3VuZHModHJibCkge1xuICByZXR1cm4ge1xuICAgIHg6IHRyYmwubGVmdCxcbiAgICB5OiB0cmJsLnRvcCxcbiAgICB3aWR0aDogdHJibC5yaWdodCAtIHRyYmwubGVmdCxcbiAgICBoZWlnaHQ6IHRyYmwuYm90dG9tIC0gdHJibC50b3BcbiAgfTtcbn1cblxuXG4vKipcbiAqIEdldCB0aGUgbWlkIG9mIHRoZSBnaXZlbiBib3VuZHMgb3IgcG9pbnQuXG4gKlxuICogQHBhcmFtIHtCb3VuZHN8UG9pbnR9IGJvdW5kc1xuICpcbiAqIEByZXR1cm4ge1BvaW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWlkKGJvdW5kcykge1xuICByZXR1cm4gcm91bmRQb2ludCh7XG4gICAgeDogYm91bmRzLnggKyAoYm91bmRzLndpZHRoIHx8IDApIC8gMixcbiAgICB5OiBib3VuZHMueSArIChib3VuZHMuaGVpZ2h0IHx8IDApIC8gMlxuICB9KTtcbn1cblxuXG4vLyBvcmllbnRhdGlvbiB1dGlscyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogR2V0IG9yaWVudGF0aW9uIG9mIHRoZSBnaXZlbiByZWN0YW5nbGUgd2l0aCByZXNwZWN0IHRvXG4gKiB0aGUgcmVmZXJlbmNlIHJlY3RhbmdsZS5cbiAqXG4gKiBBIHBhZGRpbmcgKHBvc2l0aXZlIG9yIG5lZ2F0aXZlKSBtYXkgYmUgcGFzc2VkIHRvIGluZmx1ZW5jZVxuICogaG9yaXpvbnRhbCAvIHZlcnRpY2FsIG9yaWVudGF0aW9uIGFuZCBpbnRlcnNlY3Rpb24uXG4gKlxuICogQHBhcmFtIHtCb3VuZHN9IHJlY3RcbiAqIEBwYXJhbSB7Qm91bmRzfSByZWZlcmVuY2VcbiAqIEBwYXJhbSB7UG9pbnR8bnVtYmVyfSBwYWRkaW5nXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgb3JpZW50YXRpb247IG9uZSBvZiB0b3AsIHRvcC1sZWZ0LCBsZWZ0LCAuLi4sIGJvdHRvbSwgcmlnaHQgb3IgaW50ZXJzZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JpZW50YXRpb24ocmVjdCwgcmVmZXJlbmNlLCBwYWRkaW5nKSB7XG5cbiAgcGFkZGluZyA9IHBhZGRpbmcgfHwgMDtcblxuICAvLyBtYWtlIHN1cmUgd2UgY2FuIHVzZSBhbiBvYmplY3QsIHRvb1xuICAvLyBmb3IgaW5kaXZpZHVhbCB7IHgsIHkgfSBwYWRkaW5nXG4gIGlmICghaXNPYmplY3QocGFkZGluZykpIHtcbiAgICBwYWRkaW5nID0geyB4OiBwYWRkaW5nLCB5OiBwYWRkaW5nIH07XG4gIH1cblxuXG4gIHZhciByZWN0T3JpZW50YXRpb24gPSBhc1RSQkwocmVjdCksXG4gICAgICByZWZlcmVuY2VPcmllbnRhdGlvbiA9IGFzVFJCTChyZWZlcmVuY2UpO1xuXG4gIHZhciB0b3AgPSByZWN0T3JpZW50YXRpb24uYm90dG9tICsgcGFkZGluZy55IDw9IHJlZmVyZW5jZU9yaWVudGF0aW9uLnRvcCxcbiAgICAgIHJpZ2h0ID0gcmVjdE9yaWVudGF0aW9uLmxlZnQgLSBwYWRkaW5nLnggPj0gcmVmZXJlbmNlT3JpZW50YXRpb24ucmlnaHQsXG4gICAgICBib3R0b20gPSByZWN0T3JpZW50YXRpb24udG9wIC0gcGFkZGluZy55ID49IHJlZmVyZW5jZU9yaWVudGF0aW9uLmJvdHRvbSxcbiAgICAgIGxlZnQgPSByZWN0T3JpZW50YXRpb24ucmlnaHQgKyBwYWRkaW5nLnggPD0gcmVmZXJlbmNlT3JpZW50YXRpb24ubGVmdDtcblxuICB2YXIgdmVydGljYWwgPSB0b3AgPyAndG9wJyA6IChib3R0b20gPyAnYm90dG9tJyA6IG51bGwpLFxuICAgICAgaG9yaXpvbnRhbCA9IGxlZnQgPyAnbGVmdCcgOiAocmlnaHQgPyAncmlnaHQnIDogbnVsbCk7XG5cbiAgaWYgKGhvcml6b250YWwgJiYgdmVydGljYWwpIHtcbiAgICByZXR1cm4gdmVydGljYWwgKyAnLScgKyBob3Jpem9udGFsO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBob3Jpem9udGFsIHx8IHZlcnRpY2FsIHx8ICdpbnRlcnNlY3QnO1xuICB9XG59XG5cblxuLy8gaW50ZXJzZWN0aW9uIHV0aWxzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBHZXQgaW50ZXJzZWN0aW9uIGJldHdlZW4gYW4gZWxlbWVudCBhbmQgYSBsaW5lIHBhdGguXG4gKlxuICogQHBhcmFtIHtQYXRoRGVmfSBlbGVtZW50UGF0aFxuICogQHBhcmFtIHtQYXRoRGVmfSBsaW5lUGF0aFxuICogQHBhcmFtIHtib29sZWFufSBjcm9wU3RhcnQgY3JvcCBmcm9tIHN0YXJ0IG9yIGVuZFxuICpcbiAqIEByZXR1cm4ge1BvaW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudExpbmVJbnRlcnNlY3Rpb24oZWxlbWVudFBhdGgsIGxpbmVQYXRoLCBjcm9wU3RhcnQpIHtcblxuICB2YXIgaW50ZXJzZWN0aW9ucyA9IGdldEludGVyc2VjdGlvbnMoZWxlbWVudFBhdGgsIGxpbmVQYXRoKTtcblxuICAvLyByZWNvZ25pemUgaW50ZXJzZWN0aW9uc1xuICAvLyBvbmx5IG9uZSAtPiBjaG9vc2VcbiAgLy8gdHdvIGNsb3NlIHRvZ2V0aGVyIC0+IGNob29zZSBmaXJzdFxuICAvLyB0d28gb3IgbW9yZSBkaXN0aW5jdCAtPiBwdWxsIG91dCBhcHByb3ByaWF0ZSBvbmVcbiAgLy8gbm9uZSAtPiBvayAoZmFsbGJhY2sgdG8gcG9pbnQgaXRzZWxmKVxuICBpZiAoaW50ZXJzZWN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gcm91bmRQb2ludChpbnRlcnNlY3Rpb25zWzBdKTtcbiAgfSBlbHNlIGlmIChpbnRlcnNlY3Rpb25zLmxlbmd0aCA9PT0gMiAmJiBwb2ludERpc3RhbmNlKGludGVyc2VjdGlvbnNbMF0sIGludGVyc2VjdGlvbnNbMV0pIDwgMSkge1xuICAgIHJldHVybiByb3VuZFBvaW50KGludGVyc2VjdGlvbnNbMF0pO1xuICB9IGVsc2UgaWYgKGludGVyc2VjdGlvbnMubGVuZ3RoID4gMSkge1xuXG4gICAgLy8gc29ydCBieSBpbnRlcnNlY3Rpb25zIGJhc2VkIG9uIGNvbm5lY3Rpb24gc2VnbWVudCArXG4gICAgLy8gZGlzdGFuY2UgZnJvbSBzdGFydFxuICAgIGludGVyc2VjdGlvbnMgPSBzb3J0QnkoaW50ZXJzZWN0aW9ucywgZnVuY3Rpb24oaSkge1xuICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5mbG9vcihpLnQyICogMTAwKSB8fCAxO1xuXG4gICAgICBkaXN0YW5jZSA9IDEwMCAtIGRpc3RhbmNlO1xuXG4gICAgICBkaXN0YW5jZSA9IChkaXN0YW5jZSA8IDEwID8gJzAnIDogJycpICsgZGlzdGFuY2U7XG5cbiAgICAgIC8vIGNyZWF0ZSBhIHNvcnQgc3RyaW5nIHRoYXQgbWFrZXMgc3VyZSB3ZSBzb3J0XG4gICAgICAvLyBsaW5lIHNlZ21lbnQgQVNDICsgbGluZSBzZWdtZW50IHBvc2l0aW9uIERFU0MgKGZvciBjcm9wU3RhcnQpXG4gICAgICAvLyBsaW5lIHNlZ21lbnQgQVNDICsgbGluZSBzZWdtZW50IHBvc2l0aW9uIEFTQyAoZm9yIGNyb3BFbmQpXG4gICAgICByZXR1cm4gaS5zZWdtZW50MiArICcjJyArIGRpc3RhbmNlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvdW5kUG9pbnQoaW50ZXJzZWN0aW9uc1tjcm9wU3RhcnQgPyAwIDogaW50ZXJzZWN0aW9ucy5sZW5ndGggLSAxXSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZXJzZWN0aW9ucyhhLCBiKSB7XG4gIHJldHVybiBpbnRlcnNlY3RQYXRocyhhLCBiKTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyUmVkdW5kYW50V2F5cG9pbnRzKHdheXBvaW50cykge1xuXG4gIC8vIGFsdGVyIGNvcHkgb2Ygd2F5cG9pbnRzLCBub3Qgb3JpZ2luYWxcbiAgd2F5cG9pbnRzID0gd2F5cG9pbnRzLnNsaWNlKCk7XG5cbiAgdmFyIGlkeCA9IDAsXG4gICAgICBwb2ludCxcbiAgICAgIHByZXZpb3VzUG9pbnQsXG4gICAgICBuZXh0UG9pbnQ7XG5cbiAgd2hpbGUgKHdheXBvaW50c1tpZHhdKSB7XG4gICAgcG9pbnQgPSB3YXlwb2ludHNbaWR4XTtcbiAgICBwcmV2aW91c1BvaW50ID0gd2F5cG9pbnRzW2lkeCAtIDFdO1xuICAgIG5leHRQb2ludCA9IHdheXBvaW50c1tpZHggKyAxXTtcblxuICAgIGlmIChwb2ludERpc3RhbmNlKHBvaW50LCBuZXh0UG9pbnQpID09PSAwIHx8XG4gICAgICAgIHBvaW50c09uTGluZShwcmV2aW91c1BvaW50LCBuZXh0UG9pbnQsIHBvaW50KSkge1xuXG4gICAgICAvLyByZW1vdmUgcG9pbnQsIGlmIG92ZXJsYXBwaW5nIHdpdGgge25leHRQb2ludH1cbiAgICAgIC8vIG9yIG9uIGxpbmUgd2l0aCB7cHJldmlvdXNQb2ludH0gLT4ge3BvaW50fSAtPiB7bmV4dFBvaW50fVxuICAgICAgd2F5cG9pbnRzLnNwbGljZShpZHgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZHgrKztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2F5cG9pbnRzO1xufVxuIiwiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmaW5kLFxuICBpc0FycmF5LFxuICB3aXRob3V0XG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0T3JpZW50YXRpb24sXG4gIGdldE1pZFxufSBmcm9tICcuL0xheW91dFV0aWwnO1xuXG5pbXBvcnQge1xuICBwb2ludEluUmVjdCxcbiAgcG9pbnREaXN0YW5jZSxcbiAgcG9pbnRzQWxpZ25lZCxcbiAgcG9pbnRzT25MaW5lXG59IGZyb20gJy4uL3V0aWwvR2VvbWV0cnknO1xuXG52YXIgTUlOX1NFR01FTlRfTEVOR1RIID0gMjAsXG4gICAgUE9JTlRfT1JJRU5UQVRJT05fUEFERElORyA9IDU7XG5cbnZhciByb3VuZCA9IE1hdGgucm91bmQ7XG5cbnZhciBJTlRFUlNFQ1RJT05fVEhSRVNIT0xEID0gMjAsXG4gICAgT1JJRU5UQVRJT05fVEhSRVNIT0xEID0ge1xuICAgICAgJ2g6aCc6IDIwLFxuICAgICAgJ3Y6dic6IDIwLFxuICAgICAgJ2g6dic6IC0xMCxcbiAgICAgICd2OmgnOiAtMTBcbiAgICB9O1xuXG5mdW5jdGlvbiBuZWVkc1R1cm4ob3JpZW50YXRpb24sIHN0YXJ0RGlyZWN0aW9uKSB7XG4gIHJldHVybiAhe1xuICAgIHQ6IC90b3AvLFxuICAgIHI6IC9yaWdodC8sXG4gICAgYjogL2JvdHRvbS8sXG4gICAgbDogL2xlZnQvLFxuICAgIGg6IC8uLyxcbiAgICB2OiAvLi9cbiAgfVtzdGFydERpcmVjdGlvbl0udGVzdChvcmllbnRhdGlvbik7XG59XG5cbmZ1bmN0aW9uIGNhbkxheW91dFN0cmFpZ2h0KGRpcmVjdGlvbiwgdGFyZ2V0T3JpZW50YXRpb24pIHtcbiAgcmV0dXJuIHtcbiAgICB0OiAvdG9wLyxcbiAgICByOiAvcmlnaHQvLFxuICAgIGI6IC9ib3R0b20vLFxuICAgIGw6IC9sZWZ0LyxcbiAgICBoOiAvbGVmdHxyaWdodC8sXG4gICAgdjogL3RvcHxib3R0b20vXG4gIH1bZGlyZWN0aW9uXS50ZXN0KHRhcmdldE9yaWVudGF0aW9uKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VnbWVudEJlbmRwb2ludHMoYSwgYiwgZGlyZWN0aW9ucykge1xuICB2YXIgb3JpZW50YXRpb24gPSBnZXRPcmllbnRhdGlvbihiLCBhLCBQT0lOVF9PUklFTlRBVElPTl9QQURESU5HKTtcblxuICB2YXIgc3RhcnREaXJlY3Rpb24gPSBkaXJlY3Rpb25zLnNwbGl0KCc6JylbMF07XG5cbiAgdmFyIHhtaWQgPSByb3VuZCgoYi54IC0gYS54KSAvIDIgKyBhLngpLFxuICAgICAgeW1pZCA9IHJvdW5kKChiLnkgLSBhLnkpIC8gMiArIGEueSk7XG5cbiAgdmFyIHNlZ21lbnRFbmQsIHNlZ21lbnREaXJlY3Rpb25zO1xuXG4gIHZhciBsYXlvdXRTdHJhaWdodCA9IGNhbkxheW91dFN0cmFpZ2h0KHN0YXJ0RGlyZWN0aW9uLCBvcmllbnRhdGlvbiksXG4gICAgICBsYXlvdXRIb3Jpem9udGFsID0gL2h8cnxsLy50ZXN0KHN0YXJ0RGlyZWN0aW9uKSxcbiAgICAgIGxheW91dFR1cm4gPSBmYWxzZTtcblxuICB2YXIgdHVybk5leHREaXJlY3Rpb25zID0gZmFsc2U7XG5cbiAgaWYgKGxheW91dFN0cmFpZ2h0KSB7XG4gICAgc2VnbWVudEVuZCA9IGxheW91dEhvcml6b250YWwgPyB7IHg6IHhtaWQsIHk6IGEueSB9IDogeyB4OiBhLngsIHk6IHltaWQgfTtcblxuICAgIHNlZ21lbnREaXJlY3Rpb25zID0gbGF5b3V0SG9yaXpvbnRhbCA/ICdoOmgnIDogJ3Y6dic7XG4gIH0gZWxzZSB7XG4gICAgbGF5b3V0VHVybiA9IG5lZWRzVHVybihvcmllbnRhdGlvbiwgc3RhcnREaXJlY3Rpb24pO1xuXG4gICAgc2VnbWVudERpcmVjdGlvbnMgPSBsYXlvdXRIb3Jpem9udGFsID8gJ2g6dicgOiAndjpoJztcblxuICAgIGlmIChsYXlvdXRUdXJuKSB7XG5cbiAgICAgIGlmIChsYXlvdXRIb3Jpem9udGFsKSB7XG4gICAgICAgIHR1cm5OZXh0RGlyZWN0aW9ucyA9IHltaWQgPT09IGEueTtcblxuICAgICAgICBzZWdtZW50RW5kID0ge1xuICAgICAgICAgIHg6IGEueCArIE1JTl9TRUdNRU5UX0xFTkdUSCAqICgvbC8udGVzdChzdGFydERpcmVjdGlvbikgPyAtMSA6IDEpLFxuICAgICAgICAgIHk6IHR1cm5OZXh0RGlyZWN0aW9ucyA/IHltaWQgKyBNSU5fU0VHTUVOVF9MRU5HVEggOiB5bWlkXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0dXJuTmV4dERpcmVjdGlvbnMgPSB4bWlkID09PSBhLng7XG5cbiAgICAgICAgc2VnbWVudEVuZCA9IHtcbiAgICAgICAgICB4OiB0dXJuTmV4dERpcmVjdGlvbnMgPyB4bWlkICsgTUlOX1NFR01FTlRfTEVOR1RIIDogeG1pZCxcbiAgICAgICAgICB5OiBhLnkgKyBNSU5fU0VHTUVOVF9MRU5HVEggKiAoL3QvLnRlc3Qoc3RhcnREaXJlY3Rpb24pID8gLTEgOiAxKVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIHNlZ21lbnRFbmQgPSB7XG4gICAgICAgIHg6IHhtaWQsXG4gICAgICAgIHk6IHltaWRcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3YXlwb2ludHM6IGdldEJlbmRwb2ludHMoYSwgc2VnbWVudEVuZCwgc2VnbWVudERpcmVjdGlvbnMpLmNvbmNhdChzZWdtZW50RW5kKSxcbiAgICBkaXJlY3Rpb25zOiAgc2VnbWVudERpcmVjdGlvbnMsXG4gICAgdHVybk5leHREaXJlY3Rpb25zOiB0dXJuTmV4dERpcmVjdGlvbnNcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhcnRTZWdtZW50KGEsIGIsIGRpcmVjdGlvbnMpIHtcbiAgcmV0dXJuIGdldFNlZ21lbnRCZW5kcG9pbnRzKGEsIGIsIGRpcmVjdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBnZXRFbmRTZWdtZW50KGEsIGIsIGRpcmVjdGlvbnMpIHtcbiAgdmFyIGludmVydGVkU2VnbWVudCA9IGdldFNlZ21lbnRCZW5kcG9pbnRzKGIsIGEsIGludmVydERpcmVjdGlvbnMoZGlyZWN0aW9ucykpO1xuXG4gIHJldHVybiB7XG4gICAgd2F5cG9pbnRzOiBpbnZlcnRlZFNlZ21lbnQud2F5cG9pbnRzLnNsaWNlKCkucmV2ZXJzZSgpLFxuICAgIGRpcmVjdGlvbnM6IGludmVydERpcmVjdGlvbnMoaW52ZXJ0ZWRTZWdtZW50LmRpcmVjdGlvbnMpLFxuICAgIHR1cm5OZXh0RGlyZWN0aW9uczogaW52ZXJ0ZWRTZWdtZW50LnR1cm5OZXh0RGlyZWN0aW9uc1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRNaWRTZWdtZW50KHN0YXJ0U2VnbWVudCwgZW5kU2VnbWVudCkge1xuXG4gIHZhciBzdGFydERpcmVjdGlvbiA9IHN0YXJ0U2VnbWVudC5kaXJlY3Rpb25zLnNwbGl0KCc6JylbMV0sXG4gICAgICBlbmREaXJlY3Rpb24gPSBlbmRTZWdtZW50LmRpcmVjdGlvbnMuc3BsaXQoJzonKVswXTtcblxuICBpZiAoc3RhcnRTZWdtZW50LnR1cm5OZXh0RGlyZWN0aW9ucykge1xuICAgIHN0YXJ0RGlyZWN0aW9uID0gc3RhcnREaXJlY3Rpb24gPT0gJ2gnID8gJ3YnIDogJ2gnO1xuICB9XG5cbiAgaWYgKGVuZFNlZ21lbnQudHVybk5leHREaXJlY3Rpb25zKSB7XG4gICAgZW5kRGlyZWN0aW9uID0gZW5kRGlyZWN0aW9uID09ICdoJyA/ICd2JyA6ICdoJztcbiAgfVxuXG4gIHZhciBkaXJlY3Rpb25zID0gc3RhcnREaXJlY3Rpb24gKyAnOicgKyBlbmREaXJlY3Rpb247XG5cbiAgdmFyIGJlbmRwb2ludHMgPSBnZXRCZW5kcG9pbnRzKFxuICAgIHN0YXJ0U2VnbWVudC53YXlwb2ludHNbc3RhcnRTZWdtZW50LndheXBvaW50cy5sZW5ndGggLSAxXSxcbiAgICBlbmRTZWdtZW50LndheXBvaW50c1swXSxcbiAgICBkaXJlY3Rpb25zXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICB3YXlwb2ludHM6IGJlbmRwb2ludHMsXG4gICAgZGlyZWN0aW9uczogZGlyZWN0aW9uc1xuICB9O1xufVxuXG5mdW5jdGlvbiBpbnZlcnREaXJlY3Rpb25zKGRpcmVjdGlvbnMpIHtcbiAgcmV0dXJuIGRpcmVjdGlvbnMuc3BsaXQoJzonKS5yZXZlcnNlKCkuam9pbignOicpO1xufVxuXG4vKipcbiAqIEhhbmRsZSBzaW1wbGUgbGF5b3V0cyB3aXRoIG1heGltdW0gdHdvIGJlbmRwb2ludHMuXG4gKi9cbmZ1bmN0aW9uIGdldFNpbXBsZUJlbmRwb2ludHMoYSwgYiwgZGlyZWN0aW9ucykge1xuXG4gIHZhciB4bWlkID0gcm91bmQoKGIueCAtIGEueCkgLyAyICsgYS54KSxcbiAgICAgIHltaWQgPSByb3VuZCgoYi55IC0gYS55KSAvIDIgKyBhLnkpO1xuXG4gIC8vIG9uZSBwb2ludCwgcmlnaHQgb3IgbGVmdCBmcm9tIGFcbiAgaWYgKGRpcmVjdGlvbnMgPT09ICdoOnYnKSB7XG4gICAgcmV0dXJuIFsgeyB4OiBiLngsIHk6IGEueSB9IF07XG4gIH1cblxuICAvLyBvbmUgcG9pbnQsIGFib3ZlIG9yIGJlbG93IGFcbiAgaWYgKGRpcmVjdGlvbnMgPT09ICd2OmgnKSB7XG4gICAgcmV0dXJuIFsgeyB4OiBhLngsIHk6IGIueSB9IF07XG4gIH1cblxuICAvLyB2ZXJ0aWNhbCBzZWdtZW50IGJldHdlZW4gYSBhbmQgYlxuICBpZiAoZGlyZWN0aW9ucyA9PT0gJ2g6aCcpIHtcbiAgICByZXR1cm4gW1xuICAgICAgeyB4OiB4bWlkLCB5OiBhLnkgfSxcbiAgICAgIHsgeDogeG1pZCwgeTogYi55IH1cbiAgICBdO1xuICB9XG5cbiAgLy8gaG9yaXpvbnRhbCBzZWdtZW50IGJldHdlZW4gYSBhbmQgYlxuICBpZiAoZGlyZWN0aW9ucyA9PT0gJ3Y6dicpIHtcbiAgICByZXR1cm4gW1xuICAgICAgeyB4OiBhLngsIHk6IHltaWQgfSxcbiAgICAgIHsgeDogYi54LCB5OiB5bWlkIH1cbiAgICBdO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGRpcmVjdGlvbnM6IGNhbiBvbmx5IGhhbmRsZSB2YXJpYW5zIG9mIFtodl06W2h2XScpO1xufVxuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgbWlkIHBvaW50cyBmb3IgYSBtYW5oYXR0YW4gY29ubmVjdGlvbiBiZXR3ZWVuIHR3byBwb2ludHMuXG4gKlxuICogQGV4YW1wbGUgaDpoIChob3Jpem9udGFsOmhvcml6b250YWwpXG4gKlxuICogW2FdLS0tLVt4XVxuICogICAgICAgICB8XG4gKiAgICAgICAgW3hdLS0tLVtiXVxuICpcbiAqIEBleGFtcGxlIGg6diAoaG9yaXpvbnRhbDp2ZXJ0aWNhbClcbiAqXG4gKiBbYV0tLS0tW3hdXG4gKiAgICAgICAgIHxcbiAqICAgICAgICBbYl1cbiAqXG4gKiBAZXhhbXBsZSBoOnIgKGhvcml6b250YWw6cmlnaHQpXG4gKlxuICogW2FdLS0tLVt4XVxuICogICAgICAgICB8XG4gKiAgICBbYl0tW3hdXG4gKlxuICogQHBhcmFtICB7UG9pbnR9IGFcbiAqIEBwYXJhbSAge1BvaW50fSBiXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGRpcmVjdGlvbnNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxQb2ludD59XG4gKi9cbmZ1bmN0aW9uIGdldEJlbmRwb2ludHMoYSwgYiwgZGlyZWN0aW9ucykge1xuICBkaXJlY3Rpb25zID0gZGlyZWN0aW9ucyB8fCAnaDpoJztcblxuICBpZiAoIWlzVmFsaWREaXJlY3Rpb25zKGRpcmVjdGlvbnMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ3Vua25vd24gZGlyZWN0aW9uczogPCcgKyBkaXJlY3Rpb25zICsgJz46ICcgK1xuICAgICAgJ211c3QgYmUgc3BlY2lmaWVkIGFzIDxzdGFydD46PGVuZD4gJyArXG4gICAgICAnd2l0aCBzdGFydC9lbmQgaW4geyBoLHYsdCxyLGIsbCB9J1xuICAgICk7XG4gIH1cblxuICAvLyBjb21wdXRlIGV4cGxpY2l0IGRpcmVjdGlvbnMsIGludm9sdmluZyB0cmJsIGRvY2tpbmdzXG4gIC8vIHVzaW5nIGEgdGhyZWUgc2VnbWVudGVkIGxheW91dGluZyBhbGdvcml0aG1cbiAgaWYgKGlzRXhwbGljaXREaXJlY3Rpb25zKGRpcmVjdGlvbnMpKSB7XG4gICAgdmFyIHN0YXJ0U2VnbWVudCA9IGdldFN0YXJ0U2VnbWVudChhLCBiLCBkaXJlY3Rpb25zKSxcbiAgICAgICAgZW5kU2VnbWVudCA9IGdldEVuZFNlZ21lbnQoYSwgYiwgZGlyZWN0aW9ucyksXG4gICAgICAgIG1pZFNlZ21lbnQgPSBnZXRNaWRTZWdtZW50KHN0YXJ0U2VnbWVudCwgZW5kU2VnbWVudCk7XG5cbiAgICByZXR1cm4gW10uY29uY2F0KFxuICAgICAgc3RhcnRTZWdtZW50LndheXBvaW50cyxcbiAgICAgIG1pZFNlZ21lbnQud2F5cG9pbnRzLFxuICAgICAgZW5kU2VnbWVudC53YXlwb2ludHNcbiAgICApO1xuICB9XG5cbiAgLy8gaGFuZGxlIHNpbXBsZSBbaHZdOltodl0gY2FzZXMgdGhhdCBjYW4gYmUgZWFzaWx5IGNvbXB1dGVkXG4gIHJldHVybiBnZXRTaW1wbGVCZW5kcG9pbnRzKGEsIGIsIGRpcmVjdGlvbnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgdHdvIHBvaW50cyBhY2NvcmRpbmdcbiAqIHRvIHRoZSBtYW5oYXR0YW4gbGF5b3V0IChvbmx5IGhvcml6b250YWwgYW5kIHZlcnRpY2FsKSBlZGdlcy5cbiAqXG4gKiBAcGFyYW0ge1BvaW50fSBhXG4gKiBAcGFyYW0ge1BvaW50fSBiXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtkaXJlY3Rpb25zPSdoOmgnXSBzcGVjaWZpZXMgbWFuaGF0dGFuIGRpcmVjdGlvbnMgZm9yIGVhY2ggcG9pbnQgYXMge2FkaXJlY3Rpb259OntiZGlyZWN0aW9ufS5cbiAgICAgICAgICAgICAgICAgICBBIGRpcmVjdGlvbmZvciBhIHBvaW50IGlzIGVpdGhlciBgaGAgKGhvcml6b250YWwpIG9yIGB2YCAodmVydGljYWwpXG4gKlxuICogQHJldHVybiB7QXJyYXk8UG9pbnQ+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29ubmVjdFBvaW50cyhhLCBiLCBkaXJlY3Rpb25zKSB7XG5cbiAgdmFyIHBvaW50cyA9IGdldEJlbmRwb2ludHMoYSwgYiwgZGlyZWN0aW9ucyk7XG5cbiAgcG9pbnRzLnVuc2hpZnQoYSk7XG4gIHBvaW50cy5wdXNoKGIpO1xuXG4gIHJldHVybiB3aXRob3V0UmVkdW5kYW50UG9pbnRzKHBvaW50cyk7XG59XG5cblxuLyoqXG4gKiBDb25uZWN0IHR3byByZWN0YW5nbGVzIHVzaW5nIGEgbWFuaGF0dGFuIGxheW91dGVkIGNvbm5lY3Rpb24uXG4gKlxuICogQHBhcmFtIHtCb3VuZHN9IHNvdXJjZSBzb3VyY2UgcmVjdGFuZ2xlXG4gKiBAcGFyYW0ge0JvdW5kc30gdGFyZ2V0IHRhcmdldCByZWN0YW5nbGVcbiAqIEBwYXJhbSB7UG9pbnR9IFtzdGFydF0gc291cmNlIGRvY2tpbmdcbiAqIEBwYXJhbSB7UG9pbnR9IFtlbmRdIHRhcmdldCBkb2NraW5nXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtoaW50c11cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaGludHMucHJlc2VydmVEb2NraW5nPXNvdXJjZV0gcHJlc2VydmUgZG9ja2luZyBvbiBzZWxlY3RlZCBzaWRlXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtoaW50cy5wcmVmZXJyZWRMYXlvdXRzXVxuICogQHBhcmFtIHtQb2ludHxib29sZWFufSBbaGludHMuY29ubmVjdGlvblN0YXJ0XSB3aGV0aGVyIHRoZSBzdGFydCBjaGFuZ2VkXG4gKiBAcGFyYW0ge1BvaW50fGJvb2xlYW59IFtoaW50cy5jb25uZWN0aW9uRW5kXSB3aGV0aGVyIHRoZSBlbmQgY2hhbmdlZFxuICpcbiAqIEByZXR1cm4ge0FycmF5PFBvaW50Pn0gY29ubmVjdGlvbiBwb2ludHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbm5lY3RSZWN0YW5nbGVzKHNvdXJjZSwgdGFyZ2V0LCBzdGFydCwgZW5kLCBoaW50cykge1xuXG4gIHZhciBwcmVmZXJyZWRMYXlvdXRzID0gaGludHMgJiYgaGludHMucHJlZmVycmVkTGF5b3V0cyB8fCBbXTtcblxuICB2YXIgcHJlZmVycmVkTGF5b3V0ID0gd2l0aG91dChwcmVmZXJyZWRMYXlvdXRzLCAnc3RyYWlnaHQnKVswXSB8fCAnaDpoJztcblxuICB2YXIgdGhyZXNob2xkID0gT1JJRU5UQVRJT05fVEhSRVNIT0xEW3ByZWZlcnJlZExheW91dF0gfHwgMDtcblxuICB2YXIgb3JpZW50YXRpb24gPSBnZXRPcmllbnRhdGlvbihzb3VyY2UsIHRhcmdldCwgdGhyZXNob2xkKTtcblxuICB2YXIgZGlyZWN0aW9ucyA9IGdldERpcmVjdGlvbnMob3JpZW50YXRpb24sIHByZWZlcnJlZExheW91dCk7XG5cbiAgc3RhcnQgPSBzdGFydCB8fCBnZXRNaWQoc291cmNlKTtcbiAgZW5kID0gZW5kIHx8IGdldE1pZCh0YXJnZXQpO1xuXG4gIHZhciBkaXJlY3Rpb25TcGxpdCA9IGRpcmVjdGlvbnMuc3BsaXQoJzonKTtcblxuICAvLyBjb21wdXRlIGFjdHVhbCBkb2NraW5nIHBvaW50cyBmb3Igc3RhcnQgLyBlbmRcbiAgLy8gdGhpcyBlbnN1cmVzIHdlIHByb3Blcmx5IGxheW91dCBvbmx5IHBhcnRzIG9mIHRoZVxuICAvLyBjb25uZWN0aW9uIHRoYXQgbGllcyBpbiBiZXR3ZWVuIHRoZSB0d28gcmVjdGFuZ2xlc1xuICB2YXIgc3RhcnREb2NraW5nID0gZ2V0RG9ja2luZ1BvaW50KHN0YXJ0LCBzb3VyY2UsIGRpcmVjdGlvblNwbGl0WzBdLCBpbnZlcnRPcmllbnRhdGlvbihvcmllbnRhdGlvbikpLFxuICAgICAgZW5kRG9ja2luZyA9IGdldERvY2tpbmdQb2ludChlbmQsIHRhcmdldCwgZGlyZWN0aW9uU3BsaXRbMV0sIG9yaWVudGF0aW9uKTtcblxuICByZXR1cm4gY29ubmVjdFBvaW50cyhzdGFydERvY2tpbmcsIGVuZERvY2tpbmcsIGRpcmVjdGlvbnMpO1xufVxuXG5cbi8qKlxuICogUmVwYWlyIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdHdvIHJlY3RhbmdsZXMsIG9mIHdoaWNoIG9uZSBoYXMgYmVlbiB1cGRhdGVkLlxuICpcbiAqIEBwYXJhbSB7Qm91bmRzfSBzb3VyY2VcbiAqIEBwYXJhbSB7Qm91bmRzfSB0YXJnZXRcbiAqIEBwYXJhbSB7UG9pbnR9IFtzdGFydF1cbiAqIEBwYXJhbSB7UG9pbnR9IFtlbmRdXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gW3dheXBvaW50c11cbiAqIEBwYXJhbSB7T2JqZWN0fSBbaGludHNdXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtoaW50cy5wcmVmZXJyZWRMYXlvdXRzXSBsaXN0IG9mIHByZWZlcnJlZCBsYXlvdXRzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtoaW50cy5jb25uZWN0aW9uU3RhcnRdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtoaW50cy5jb25uZWN0aW9uRW5kXVxuICpcbiAqIEByZXR1cm4ge0FycmF5PFBvaW50Pn0gcmVwYWlyZWQgd2F5cG9pbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBhaXJDb25uZWN0aW9uKHNvdXJjZSwgdGFyZ2V0LCBzdGFydCwgZW5kLCB3YXlwb2ludHMsIGhpbnRzKSB7XG5cbiAgaWYgKGlzQXJyYXkoc3RhcnQpKSB7XG4gICAgd2F5cG9pbnRzID0gc3RhcnQ7XG4gICAgaGludHMgPSBlbmQ7XG5cbiAgICBzdGFydCA9IGdldE1pZChzb3VyY2UpO1xuICAgIGVuZCA9IGdldE1pZCh0YXJnZXQpO1xuICB9XG5cbiAgaGludHMgPSBhc3NpZ24oeyBwcmVmZXJyZWRMYXlvdXRzOiBbXSB9LCBoaW50cyk7XG4gIHdheXBvaW50cyA9IHdheXBvaW50cyB8fCBbXTtcblxuICB2YXIgcHJlZmVycmVkTGF5b3V0cyA9IGhpbnRzLnByZWZlcnJlZExheW91dHMsXG4gICAgICBwcmVmZXJTdHJhaWdodCA9IHByZWZlcnJlZExheW91dHMuaW5kZXhPZignc3RyYWlnaHQnKSAhPT0gLTEsXG4gICAgICByZXBhaXJlZFdheXBvaW50cztcblxuICAvLyBqdXN0IGxheW91dCBub24tZXhpc3Rpbmcgb3Igc2ltcGxlIGNvbm5lY3Rpb25zXG4gIC8vIGF0dGVtcHQgdG8gcmVuZGVyIHN0cmFpZ2h0IGxpbmVzLCBpZiByZXF1aXJlZFxuXG4gIC8vIGF0dGVtcHQgdG8gbGF5b3V0IGEgc3RyYWlnaHQgbGluZVxuICByZXBhaXJlZFdheXBvaW50cyA9IHByZWZlclN0cmFpZ2h0ICYmIHRyeUxheW91dFN0cmFpZ2h0KHNvdXJjZSwgdGFyZ2V0LCBzdGFydCwgZW5kLCBoaW50cyk7XG5cbiAgaWYgKHJlcGFpcmVkV2F5cG9pbnRzKSB7XG4gICAgcmV0dXJuIHJlcGFpcmVkV2F5cG9pbnRzO1xuICB9XG5cbiAgLy8gdHJ5IHRvIGxheW91dCBmcm9tIGVuZFxuICByZXBhaXJlZFdheXBvaW50cyA9IGhpbnRzLmNvbm5lY3Rpb25FbmQgJiYgdHJ5UmVwYWlyQ29ubmVjdGlvbkVuZCh0YXJnZXQsIHNvdXJjZSwgZW5kLCB3YXlwb2ludHMpO1xuXG4gIGlmIChyZXBhaXJlZFdheXBvaW50cykge1xuICAgIHJldHVybiByZXBhaXJlZFdheXBvaW50cztcbiAgfVxuXG4gIC8vIHRyeSB0byBsYXlvdXQgZnJvbSBzdGFydFxuICByZXBhaXJlZFdheXBvaW50cyA9IGhpbnRzLmNvbm5lY3Rpb25TdGFydCAmJiB0cnlSZXBhaXJDb25uZWN0aW9uU3RhcnQoc291cmNlLCB0YXJnZXQsIHN0YXJ0LCB3YXlwb2ludHMpO1xuXG4gIGlmIChyZXBhaXJlZFdheXBvaW50cykge1xuICAgIHJldHVybiByZXBhaXJlZFdheXBvaW50cztcbiAgfVxuXG4gIC8vIG9yIHdoZXRoZXIgbm90aGluZyBzZWVtcyB0byBoYXZlIGNoYW5nZWRcbiAgaWYgKCFoaW50cy5jb25uZWN0aW9uU3RhcnQgJiYgIWhpbnRzLmNvbm5lY3Rpb25FbmQgJiYgd2F5cG9pbnRzICYmIHdheXBvaW50cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gd2F5cG9pbnRzO1xuICB9XG5cbiAgLy8gc2ltcGx5IHJlY29ubmVjdCBpZiBub3RoaW5nIGVsc2Ugd29ya2VkXG4gIHJldHVybiBjb25uZWN0UmVjdGFuZ2xlcyhzb3VyY2UsIHRhcmdldCwgc3RhcnQsIGVuZCwgaGludHMpO1xufVxuXG5cbmZ1bmN0aW9uIGluUmFuZ2UoYSwgc3RhcnQsIGVuZCkge1xuICByZXR1cm4gYSA+PSBzdGFydCAmJiBhIDw9IGVuZDtcbn1cblxuZnVuY3Rpb24gaXNJblJhbmdlKGF4aXMsIGEsIGIpIHtcbiAgdmFyIHNpemUgPSB7XG4gICAgeDogJ3dpZHRoJyxcbiAgICB5OiAnaGVpZ2h0J1xuICB9O1xuXG4gIHJldHVybiBpblJhbmdlKGFbYXhpc10sIGJbYXhpc10sIGJbYXhpc10gKyBiW3NpemVbYXhpc11dKTtcbn1cblxuLyoqXG4gKiBMYXlvdXQgYSBzdHJhaWdodCBjb25uZWN0aW9uXG4gKlxuICogQHBhcmFtIHtCb3VuZHN9IHNvdXJjZVxuICogQHBhcmFtIHtCb3VuZHN9IHRhcmdldFxuICogQHBhcmFtIHtQb2ludH0gc3RhcnRcbiAqIEBwYXJhbSB7UG9pbnR9IGVuZFxuICogQHBhcmFtIHtPYmplY3R9IFtoaW50c11cbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxQb2ludD58bnVsbH0gd2F5cG9pbnRzIGlmIHN0cmFpZ2h0IGxheW91dCB3b3JrZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyeUxheW91dFN0cmFpZ2h0KHNvdXJjZSwgdGFyZ2V0LCBzdGFydCwgZW5kLCBoaW50cykge1xuICB2YXIgYXhpcyA9IHt9LFxuICAgICAgcHJpbWFyeUF4aXMsXG4gICAgICBvcmllbnRhdGlvbjtcblxuICBvcmllbnRhdGlvbiA9IGdldE9yaWVudGF0aW9uKHNvdXJjZSwgdGFyZ2V0KTtcblxuICAvLyBvbmx5IGxheW91dCBhIHN0cmFpZ2h0IGNvbm5lY3Rpb24gaWYgc2hhcGVzIGFyZVxuICAvLyBob3Jpem9udGFsbHkgb3IgdmVydGljYWxseSBhbGlnbmVkXG4gIGlmICghL14odG9wfGJvdHRvbXxsZWZ0fHJpZ2h0KSQvLnRlc3Qob3JpZW50YXRpb24pKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoL3RvcHxib3R0b20vLnRlc3Qob3JpZW50YXRpb24pKSB7XG4gICAgcHJpbWFyeUF4aXMgPSAneCc7XG4gIH1cblxuICBpZiAoL2xlZnR8cmlnaHQvLnRlc3Qob3JpZW50YXRpb24pKSB7XG4gICAgcHJpbWFyeUF4aXMgPSAneSc7XG4gIH1cblxuICBpZiAoaGludHMucHJlc2VydmVEb2NraW5nID09PSAndGFyZ2V0Jykge1xuXG4gICAgaWYgKCFpc0luUmFuZ2UocHJpbWFyeUF4aXMsIGVuZCwgc291cmNlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXhpc1twcmltYXJ5QXhpc10gPSBlbmRbcHJpbWFyeUF4aXNdO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgeDogYXhpcy54ICE9PSB1bmRlZmluZWQgPyBheGlzLnggOiBzdGFydC54LFxuICAgICAgICB5OiBheGlzLnkgIT09IHVuZGVmaW5lZCA/IGF4aXMueSA6IHN0YXJ0LnksXG4gICAgICAgIG9yaWdpbmFsOiB7XG4gICAgICAgICAgeDogYXhpcy54ICE9PSB1bmRlZmluZWQgPyBheGlzLnggOiBzdGFydC54LFxuICAgICAgICAgIHk6IGF4aXMueSAhPT0gdW5kZWZpbmVkID8gYXhpcy55IDogc3RhcnQueVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB4OiBlbmQueCxcbiAgICAgICAgeTogZW5kLnlcbiAgICAgIH1cbiAgICBdO1xuXG4gIH0gZWxzZSB7XG5cbiAgICBpZiAoIWlzSW5SYW5nZShwcmltYXJ5QXhpcywgc3RhcnQsIHRhcmdldCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGF4aXNbcHJpbWFyeUF4aXNdID0gc3RhcnRbcHJpbWFyeUF4aXNdO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgeDogc3RhcnQueCxcbiAgICAgICAgeTogc3RhcnQueVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgeDogYXhpcy54ICE9PSB1bmRlZmluZWQgPyBheGlzLnggOiBlbmQueCxcbiAgICAgICAgeTogYXhpcy55ICE9PSB1bmRlZmluZWQgPyBheGlzLnkgOiBlbmQueSxcbiAgICAgICAgb3JpZ2luYWw6IHtcbiAgICAgICAgICB4OiBheGlzLnggIT09IHVuZGVmaW5lZCA/IGF4aXMueCA6IGVuZC54LFxuICAgICAgICAgIHk6IGF4aXMueSAhPT0gdW5kZWZpbmVkID8gYXhpcy55IDogZW5kLnlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF07XG4gIH1cblxufVxuXG4vKipcbiAqIFJlcGFpciBhIGNvbm5lY3Rpb24gZnJvbSBzdGFydC5cbiAqXG4gKiBAcGFyYW0ge0JvdW5kc30gbW92ZWRcbiAqIEBwYXJhbSB7Qm91bmRzfSBvdGhlclxuICogQHBhcmFtIHtQb2ludH0gbmV3RG9ja2luZ1xuICogQHBhcmFtIHtBcnJheTxQb2ludD59IHBvaW50cyBvcmlnaW5hbFBvaW50cyBmcm9tIG1vdmVkIHRvIG90aGVyXG4gKlxuICogQHJldHVybiB7QXJyYXk8UG9pbnQ+fG51bGx9IHRoZSByZXBhaXJlZCBwb2ludHMgYmV0d2VlbiB0aGUgdHdvIHJlY3RhbmdsZXNcbiAqL1xuZnVuY3Rpb24gdHJ5UmVwYWlyQ29ubmVjdGlvblN0YXJ0KG1vdmVkLCBvdGhlciwgbmV3RG9ja2luZywgcG9pbnRzKSB7XG4gIHJldHVybiBfdHJ5UmVwYWlyQ29ubmVjdGlvblNpZGUobW92ZWQsIG90aGVyLCBuZXdEb2NraW5nLCBwb2ludHMpO1xufVxuXG4vKipcbiAqIFJlcGFpciBhIGNvbm5lY3Rpb24gZnJvbSBlbmQuXG4gKlxuICogQHBhcmFtIHtCb3VuZHN9IG1vdmVkXG4gKiBAcGFyYW0ge0JvdW5kc30gb3RoZXJcbiAqIEBwYXJhbSB7UG9pbnR9IG5ld0RvY2tpbmdcbiAqIEBwYXJhbSB7QXJyYXk8UG9pbnQ+fSBwb2ludHMgb3JpZ2luYWxQb2ludHMgZnJvbSBtb3ZlZCB0byBvdGhlclxuICpcbiAqIEByZXR1cm4ge0FycmF5PFBvaW50PnxudWxsfSB0aGUgcmVwYWlyZWQgcG9pbnRzIGJldHdlZW4gdGhlIHR3byByZWN0YW5nbGVzXG4gKi9cbmZ1bmN0aW9uIHRyeVJlcGFpckNvbm5lY3Rpb25FbmQobW92ZWQsIG90aGVyLCBuZXdEb2NraW5nLCBwb2ludHMpIHtcbiAgdmFyIHdheXBvaW50cyA9IHBvaW50cy5zbGljZSgpLnJldmVyc2UoKTtcblxuICB3YXlwb2ludHMgPSBfdHJ5UmVwYWlyQ29ubmVjdGlvblNpZGUobW92ZWQsIG90aGVyLCBuZXdEb2NraW5nLCB3YXlwb2ludHMpO1xuXG4gIHJldHVybiB3YXlwb2ludHMgPyB3YXlwb2ludHMucmV2ZXJzZSgpIDogbnVsbDtcbn1cblxuLyoqXG4gKiBSZXBhaXIgYSBjb25uZWN0aW9uIGZyb20gb25lIHNpZGUgdGhhdCBtb3ZlZC5cbiAqXG4gKiBAcGFyYW0ge0JvdW5kc30gbW92ZWRcbiAqIEBwYXJhbSB7Qm91bmRzfSBvdGhlclxuICogQHBhcmFtIHtQb2ludH0gbmV3RG9ja2luZ1xuICogQHBhcmFtIHtBcnJheTxQb2ludD59IHBvaW50cyBvcmlnaW5hbFBvaW50cyBmcm9tIG1vdmVkIHRvIG90aGVyXG4gKlxuICogQHJldHVybiB7QXJyYXk8UG9pbnQ+fSB0aGUgcmVwYWlyZWQgcG9pbnRzIGJldHdlZW4gdGhlIHR3byByZWN0YW5nbGVzXG4gKi9cbmZ1bmN0aW9uIF90cnlSZXBhaXJDb25uZWN0aW9uU2lkZShtb3ZlZCwgb3RoZXIsIG5ld0RvY2tpbmcsIHBvaW50cykge1xuXG4gIGZ1bmN0aW9uIG5lZWRzUmVsYXlvdXQocG9pbnRzKSB7XG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA+IDQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyByZWxheW91dCBpZiB0d28gcG9pbnRzIG92ZXJsYXBcbiAgICAvLyB0aGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0b1xuICAgIHJldHVybiAhIWZpbmQocG9pbnRzLCBmdW5jdGlvbihwLCBpZHgpIHtcbiAgICAgIHZhciBxID0gcG9pbnRzW2lkeCAtIDFdO1xuXG4gICAgICByZXR1cm4gcSAmJiBwb2ludERpc3RhbmNlKHAsIHEpIDwgMztcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcGFpckJlbmRwb2ludChjYW5kaWRhdGUsIG9sZFBlZXIsIG5ld1BlZXIpIHtcblxuICAgIHZhciBhbGlnbm1lbnQgPSBwb2ludHNBbGlnbmVkKG9sZFBlZXIsIGNhbmRpZGF0ZSk7XG5cbiAgICBzd2l0Y2ggKGFsaWdubWVudCkge1xuICAgIGNhc2UgJ3YnOlxuXG4gICAgICAvLyByZXBhaXIgaG9yaXpvbnRhbCBhbGlnbm1lbnRcbiAgICAgIHJldHVybiB7IHg6IG5ld1BlZXIueCwgeTogY2FuZGlkYXRlLnkgfTtcbiAgICBjYXNlICdoJzpcblxuICAgICAgLy8gcmVwYWlyIHZlcnRpY2FsIGFsaWdubWVudFxuICAgICAgcmV0dXJuIHsgeDogY2FuZGlkYXRlLngsIHk6IG5ld1BlZXIueSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHg6IGNhbmRpZGF0ZS54LCB5OiBjYW5kaWRhdGUuIHkgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZU92ZXJsYXBwaW5nKHBvaW50cywgYSwgYikge1xuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gcG9pbnRzLmxlbmd0aCAtIDI7IGkgIT09IDA7IGktLSkge1xuXG4gICAgICAvLyBpbnRlcnNlY3RzICg/KSBicmVhaywgcmVtb3ZlIGFsbCBiZW5kcG9pbnRzIHVwIHRvIHRoaXMgb25lIGFuZCByZWxheW91dFxuICAgICAgaWYgKHBvaW50SW5SZWN0KHBvaW50c1tpXSwgYSwgSU5URVJTRUNUSU9OX1RIUkVTSE9MRCkgfHxcbiAgICAgICAgICBwb2ludEluUmVjdChwb2ludHNbaV0sIGIsIElOVEVSU0VDVElPTl9USFJFU0hPTEQpKSB7XG5cbiAgICAgICAgLy8gcmV0dXJuIHNsaWNlZCBvbGQgY29ubmVjdGlvblxuICAgICAgICByZXR1cm4gcG9pbnRzLnNsaWNlKGkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwb2ludHM7XG4gIH1cblxuICAvLyAoMCkgb25seSByZXBhaXIgd2hhdCBoYXMgbGF5b3V0YWJsZSBiZW5kcG9pbnRzXG5cbiAgLy8gKDEpIGlmIG9ubHkgb25lIGJlbmRwb2ludCBhbmQgb24gc2hhcGUgbW92ZWQgb250byBvdGhlciBzaGFwZXMgYXhpc1xuICAvLyAgICAgKGhvcml6b250YWxseSAvIHZlcnRpY2FsbHkpLCByZWxheW91dFxuXG4gIGlmIChuZWVkc1JlbGF5b3V0KHBvaW50cykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBvbGREb2NraW5nID0gcG9pbnRzWzBdLFxuICAgICAgbmV3UG9pbnRzID0gcG9pbnRzLnNsaWNlKCksXG4gICAgICBzbGljZWRQb2ludHM7XG5cbiAgLy8gKDIpIHJlcGFpciBvbmx5IGxhc3QgbGluZSBzZWdtZW50IGFuZCBvbmx5IGlmIGl0IHdhcyBsYXlvdXRlZCBiZWZvcmVcblxuICBuZXdQb2ludHNbMF0gPSBuZXdEb2NraW5nO1xuICBuZXdQb2ludHNbMV0gPSByZXBhaXJCZW5kcG9pbnQobmV3UG9pbnRzWzFdLCBvbGREb2NraW5nLCBuZXdEb2NraW5nKTtcblxuXG4gIC8vICgzKSBpZiBzaGFwZSBpbnRlcnNlY3RzIHdpdGggYW55IGJlbmRwb2ludCBhZnRlciByZXBhaXIsXG4gIC8vICAgICByZW1vdmUgYWxsIHNlZ21lbnRzIHVwIHRvIHRoaXMgYmVuZHBvaW50IGFuZCByZXBhaXIgZnJvbSB0aGVyZVxuICBzbGljZWRQb2ludHMgPSByZW1vdmVPdmVybGFwcGluZyhuZXdQb2ludHMsIG1vdmVkLCBvdGhlcik7XG5cbiAgaWYgKHNsaWNlZFBvaW50cyAhPT0gbmV3UG9pbnRzKSB7XG4gICAgbmV3UG9pbnRzID0gX3RyeVJlcGFpckNvbm5lY3Rpb25TaWRlKG1vdmVkLCBvdGhlciwgbmV3RG9ja2luZywgc2xpY2VkUG9pbnRzKTtcbiAgfVxuXG4gIC8vICg0KSBkbyBOT1QgcmVwYWlyIGlmIHJlcGFpcmVkIGJlbmRwb2ludHMgYXJlIGFsaWduZWRcbiAgaWYgKG5ld1BvaW50cyAmJiBwb2ludHNBbGlnbmVkKG5ld1BvaW50cykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXdQb2ludHM7XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtYW5oYXR0YW4gZGlyZWN0aW9ucyBjb25uZWN0aW5nIHR3byByZWN0YW5nbGVzXG4gKiB3aXRoIHRoZSBnaXZlbiBvcmllbnRhdGlvbi5cbiAqXG4gKiBXaWxsIGFsd2F5cyByZXR1cm4gdGhlIGRlZmF1bHQgbGF5b3V0LCBpZiBpdCBpcyBzcGVjaWZpY1xuICogcmVnYXJkaW5nIHNpZGVzIGFscmVhZHkgKHRyYmwpLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogZ2V0RGlyZWN0aW9ucygndG9wJyk7IC8vIC0+ICd2OnYnXG4gKiBnZXREaXJlY3Rpb25zKCdpbnRlcnNlY3QnKTsgLy8gLT4gJ3Q6dCdcbiAqXG4gKiBnZXREaXJlY3Rpb25zKCd0b3AtcmlnaHQnLCAndjpoJyk7IC8vIC0+ICd2OmgnXG4gKiBnZXREaXJlY3Rpb25zKCd0b3AtcmlnaHQnLCAnaDpoJyk7IC8vIC0+ICdoOmgnXG4gKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmllbnRhdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGRlZmF1bHRMYXlvdXRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldERpcmVjdGlvbnMob3JpZW50YXRpb24sIGRlZmF1bHRMYXlvdXQpIHtcblxuICAvLyBkb24ndCBvdmVycmlkZSBzcGVjaWZpYyB0cmJsIGRpcmVjdGlvbnNcbiAgaWYgKGlzRXhwbGljaXREaXJlY3Rpb25zKGRlZmF1bHRMYXlvdXQpKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRMYXlvdXQ7XG4gIH1cblxuICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7XG4gIGNhc2UgJ2ludGVyc2VjdCc6XG4gICAgcmV0dXJuICd0OnQnO1xuXG4gIGNhc2UgJ3RvcCc6XG4gIGNhc2UgJ2JvdHRvbSc6XG4gICAgcmV0dXJuICd2OnYnO1xuXG4gIGNhc2UgJ2xlZnQnOlxuICBjYXNlICdyaWdodCc6XG4gICAgcmV0dXJuICdoOmgnO1xuXG4gIC8vICd0b3AtbGVmdCdcbiAgLy8gJ3RvcC1yaWdodCdcbiAgLy8gJ2JvdHRvbS1sZWZ0J1xuICAvLyAnYm90dG9tLXJpZ2h0J1xuICBkZWZhdWx0OlxuICAgIHJldHVybiBkZWZhdWx0TGF5b3V0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREaXJlY3Rpb25zKGRpcmVjdGlvbnMpIHtcbiAgcmV0dXJuIGRpcmVjdGlvbnMgJiYgL15ofHZ8dHxyfGJ8bDpofHZ8dHxyfGJ8bCQvLnRlc3QoZGlyZWN0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGlzRXhwbGljaXREaXJlY3Rpb25zKGRpcmVjdGlvbnMpIHtcbiAgcmV0dXJuIGRpcmVjdGlvbnMgJiYgL3R8cnxifGwvLnRlc3QoZGlyZWN0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGludmVydE9yaWVudGF0aW9uKG9yaWVudGF0aW9uKSB7XG4gIHJldHVybiB7XG4gICAgJ3RvcCc6ICdib3R0b20nLFxuICAgICdib3R0b20nOiAndG9wJyxcbiAgICAnbGVmdCc6ICdyaWdodCcsXG4gICAgJ3JpZ2h0JzogJ2xlZnQnLFxuICAgICd0b3AtbGVmdCc6ICdib3R0b20tcmlnaHQnLFxuICAgICdib3R0b20tcmlnaHQnOiAndG9wLWxlZnQnLFxuICAgICd0b3AtcmlnaHQnOiAnYm90dG9tLWxlZnQnLFxuICAgICdib3R0b20tbGVmdCc6ICd0b3AtcmlnaHQnLFxuICB9W29yaWVudGF0aW9uXTtcbn1cblxuZnVuY3Rpb24gZ2V0RG9ja2luZ1BvaW50KHBvaW50LCByZWN0YW5nbGUsIGRvY2tpbmdEaXJlY3Rpb24sIHRhcmdldE9yaWVudGF0aW9uKSB7XG5cbiAgLy8gZW5zdXJlIHdlIGVuZCB1cCB3aXRoIGEgc3BlY2lmaWMgZG9ja2luZyBkaXJlY3Rpb25cbiAgLy8gYmFzZWQgb24gdGhlIHRhcmdldE9yaWVudGF0aW9uLCBpZiA8aHx2PiBpcyBiZWluZyBwYXNzZWRcblxuICBpZiAoZG9ja2luZ0RpcmVjdGlvbiA9PT0gJ2gnKSB7XG4gICAgZG9ja2luZ0RpcmVjdGlvbiA9IC9sZWZ0Ly50ZXN0KHRhcmdldE9yaWVudGF0aW9uKSA/ICdsJyA6ICdyJztcbiAgfVxuXG4gIGlmIChkb2NraW5nRGlyZWN0aW9uID09PSAndicpIHtcbiAgICBkb2NraW5nRGlyZWN0aW9uID0gL3RvcC8udGVzdCh0YXJnZXRPcmllbnRhdGlvbikgPyAndCcgOiAnYic7XG4gIH1cblxuICBpZiAoZG9ja2luZ0RpcmVjdGlvbiA9PT0gJ3QnKSB7XG4gICAgcmV0dXJuIHsgb3JpZ2luYWw6IHBvaW50LCB4OiBwb2ludC54LCB5OiByZWN0YW5nbGUueSB9O1xuICB9XG5cbiAgaWYgKGRvY2tpbmdEaXJlY3Rpb24gPT09ICdyJykge1xuICAgIHJldHVybiB7IG9yaWdpbmFsOiBwb2ludCwgeDogcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGgsIHk6IHBvaW50LnkgfTtcbiAgfVxuXG4gIGlmIChkb2NraW5nRGlyZWN0aW9uID09PSAnYicpIHtcbiAgICByZXR1cm4geyBvcmlnaW5hbDogcG9pbnQsIHg6IHBvaW50LngsIHk6IHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCB9O1xuICB9XG5cbiAgaWYgKGRvY2tpbmdEaXJlY3Rpb24gPT09ICdsJykge1xuICAgIHJldHVybiB7IG9yaWdpbmFsOiBwb2ludCwgeDogcmVjdGFuZ2xlLngsIHk6IHBvaW50LnkgfTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBkb2NraW5nRGlyZWN0aW9uOiA8JyArIGRvY2tpbmdEaXJlY3Rpb24gKyAnPicpO1xufVxuXG5cbi8qKlxuICogUmV0dXJuIGxpc3Qgb2Ygd2F5cG9pbnRzIHdpdGggcmVkdW5kYW50IG9uZXMgZmlsdGVyZWQgb3V0LlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogT3JpZ2luYWwgcG9pbnRzOlxuICpcbiAqICAgW3hdIC0tLS0tIFt4XSAtLS0tLS0gW3hdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFt4XSAtLS0tLSBbeF0gLSBbeF1cbiAqXG4gKiBGaWx0ZXJlZDpcbiAqXG4gKiAgIFt4XSAtLS0tLS0tLS0tLS0tLS0tIFt4XVxuICogICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICBbeF0gLS0tLS0tLS0tLS0gW3hdXG4gKlxuICogQHBhcmFtICB7QXJyYXk8UG9pbnQ+fSB3YXlwb2ludHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxQb2ludD59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRob3V0UmVkdW5kYW50UG9pbnRzKHdheXBvaW50cykge1xuICByZXR1cm4gd2F5cG9pbnRzLnJlZHVjZShmdW5jdGlvbihwb2ludHMsIHAsIGlkeCkge1xuXG4gICAgdmFyIHByZXZpb3VzID0gcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSxcbiAgICAgICAgbmV4dCA9IHdheXBvaW50c1tpZHggKyAxXTtcblxuICAgIGlmICghcG9pbnRzT25MaW5lKHByZXZpb3VzLCBuZXh0LCBwLCAwKSkge1xuICAgICAgcG9pbnRzLnB1c2gocCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50cztcbiAgfSwgW10pO1xufVxuIiwiaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnbWluLWRhc2gnO1xuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzJztcblxuaW1wb3J0IFJlZnMgZnJvbSAnb2JqZWN0LXJlZnMnO1xuXG52YXIgcGFyZW50UmVmcyA9IG5ldyBSZWZzKHsgbmFtZTogJ2NoaWxkcmVuJywgZW51bWVyYWJsZTogdHJ1ZSwgY29sbGVjdGlvbjogdHJ1ZSB9LCB7IG5hbWU6ICdwYXJlbnQnIH0pLFxuICAgIGxhYmVsUmVmcyA9IG5ldyBSZWZzKHsgbmFtZTogJ2xhYmVscycsIGVudW1lcmFibGU6IHRydWUsIGNvbGxlY3Rpb246IHRydWUgfSwgeyBuYW1lOiAnbGFiZWxUYXJnZXQnIH0pLFxuICAgIGF0dGFjaGVyUmVmcyA9IG5ldyBSZWZzKHsgbmFtZTogJ2F0dGFjaGVycycsIGNvbGxlY3Rpb246IHRydWUgfSwgeyBuYW1lOiAnaG9zdCcgfSksXG4gICAgb3V0Z29pbmdSZWZzID0gbmV3IFJlZnMoeyBuYW1lOiAnb3V0Z29pbmcnLCBjb2xsZWN0aW9uOiB0cnVlIH0sIHsgbmFtZTogJ3NvdXJjZScgfSksXG4gICAgaW5jb21pbmdSZWZzID0gbmV3IFJlZnMoeyBuYW1lOiAnaW5jb21pbmcnLCBjb2xsZWN0aW9uOiB0cnVlIH0sIHsgbmFtZTogJ3RhcmdldCcgfSk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBkanMubW9kZWxcbiAqL1xuXG4vKipcbiAqIEBtZW1iZXJPZiBkanMubW9kZWxcbiAqL1xuXG4vKipcbiAqIFRoZSBiYXNpYyBncmFwaGljYWwgcmVwcmVzZW50YXRpb25cbiAqXG4gKiBAY2xhc3NcbiAqXG4gKiBAYWJzdHJhY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEJhc2UoKSB7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgdGhhdCBiYWNrcyB1cCB0aGUgc2hhcGVcbiAgICpcbiAgICogQG5hbWUgQmFzZSNidXNpbmVzc09iamVjdFxuICAgKiBAdHlwZSBPYmplY3RcbiAgICovXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYnVzaW5lc3NPYmplY3QnLCB7XG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSk7XG5cblxuICAvKipcbiAgICogU2luZ2xlIGxhYmVsIHN1cHBvcnQsIHdpbGwgbWFwcGVkIHRvIG11bHRpIGxhYmVsIGFycmF5XG4gICAqXG4gICAqIEBuYW1lIEJhc2UjbGFiZWxcbiAgICogQHR5cGUgT2JqZWN0XG4gICAqL1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2xhYmVsJywge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYWJlbHNbMF07XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uKG5ld0xhYmVsKSB7XG5cbiAgICAgIHZhciBsYWJlbCA9IHRoaXMubGFiZWwsXG4gICAgICAgICAgbGFiZWxzID0gdGhpcy5sYWJlbHM7XG5cbiAgICAgIGlmICghbmV3TGFiZWwgJiYgbGFiZWwpIHtcbiAgICAgICAgbGFiZWxzLnJlbW92ZShsYWJlbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsYWJlbHMuYWRkKG5ld0xhYmVsLCAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IHNoYXBlXG4gICAqXG4gICAqIEBuYW1lIEJhc2UjcGFyZW50XG4gICAqIEB0eXBlIFNoYXBlXG4gICAqL1xuICBwYXJlbnRSZWZzLmJpbmQodGhpcywgJ3BhcmVudCcpO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBsYWJlbHNcbiAgICpcbiAgICogQG5hbWUgQmFzZSNsYWJlbHNcbiAgICogQHR5cGUgTGFiZWxcbiAgICovXG4gIGxhYmVsUmVmcy5iaW5kKHRoaXMsICdsYWJlbHMnKTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygb3V0Z29pbmcgY29ubmVjdGlvbnNcbiAgICpcbiAgICogQG5hbWUgQmFzZSNvdXRnb2luZ1xuICAgKiBAdHlwZSBBcnJheTxDb25uZWN0aW9uPlxuICAgKi9cbiAgb3V0Z29pbmdSZWZzLmJpbmQodGhpcywgJ291dGdvaW5nJyk7XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGluY29taW5nIGNvbm5lY3Rpb25zXG4gICAqXG4gICAqIEBuYW1lIEJhc2UjaW5jb21pbmdcbiAgICogQHR5cGUgQXJyYXk8Q29ubmVjdGlvbj5cbiAgICovXG4gIGluY29taW5nUmVmcy5iaW5kKHRoaXMsICdpbmNvbWluZycpO1xufVxuXG5cbi8qKlxuICogQSBncmFwaGljYWwgb2JqZWN0XG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqXG4gKiBAZXh0ZW5kcyBCYXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTaGFwZSgpIHtcbiAgQmFzZS5jYWxsKHRoaXMpO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgZnJhbWUgc2hhcGVzXG4gICAqXG4gICAqIEBuYW1lIFNoYXBlI2lzRnJhbWVcbiAgICogQHR5cGUgYm9vbGVhblxuICAgKi9cblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgY2hpbGRyZW5cbiAgICpcbiAgICogQG5hbWUgU2hhcGUjY2hpbGRyZW5cbiAgICogQHR5cGUgQXJyYXk8QmFzZT5cbiAgICovXG4gIHBhcmVudFJlZnMuYmluZCh0aGlzLCAnY2hpbGRyZW4nKTtcblxuICAvKipcbiAgICogQG5hbWUgU2hhcGUjaG9zdFxuICAgKiBAdHlwZSBTaGFwZVxuICAgKi9cbiAgYXR0YWNoZXJSZWZzLmJpbmQodGhpcywgJ2hvc3QnKTtcblxuICAvKipcbiAgICogQG5hbWUgU2hhcGUjYXR0YWNoZXJzXG4gICAqIEB0eXBlIFNoYXBlXG4gICAqL1xuICBhdHRhY2hlclJlZnMuYmluZCh0aGlzLCAnYXR0YWNoZXJzJyk7XG59XG5cbmluaGVyaXRzKFNoYXBlLCBCYXNlKTtcblxuXG4vKipcbiAqIEEgcm9vdCBncmFwaGljYWwgb2JqZWN0XG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqXG4gKiBAZXh0ZW5kcyBTaGFwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gUm9vdCgpIHtcbiAgU2hhcGUuY2FsbCh0aGlzKTtcbn1cblxuaW5oZXJpdHMoUm9vdCwgU2hhcGUpO1xuXG5cbi8qKlxuICogQSBsYWJlbCBmb3IgYW4gZWxlbWVudFxuICpcbiAqIEBjbGFzc1xuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQGV4dGVuZHMgU2hhcGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIExhYmVsKCkge1xuICBTaGFwZS5jYWxsKHRoaXMpO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFiZWxlZCBlbGVtZW50XG4gICAqXG4gICAqIEBuYW1lIExhYmVsI2xhYmVsVGFyZ2V0XG4gICAqIEB0eXBlIEJhc2VcbiAgICovXG4gIGxhYmVsUmVmcy5iaW5kKHRoaXMsICdsYWJlbFRhcmdldCcpO1xufVxuXG5pbmhlcml0cyhMYWJlbCwgU2hhcGUpO1xuXG5cbi8qKlxuICogQSBjb25uZWN0aW9uIGJldHdlZW4gdHdvIGVsZW1lbnRzXG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqXG4gKiBAZXh0ZW5kcyBCYXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDb25uZWN0aW9uKCkge1xuICBCYXNlLmNhbGwodGhpcyk7XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoaXMgY29ubmVjdGlvbiBvcmlnaW5hdGVzIGZyb21cbiAgICpcbiAgICogQG5hbWUgQ29ubmVjdGlvbiNzb3VyY2VcbiAgICogQHR5cGUgQmFzZVxuICAgKi9cbiAgb3V0Z29pbmdSZWZzLmJpbmQodGhpcywgJ3NvdXJjZScpO1xuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0aGlzIGNvbm5lY3Rpb24gcG9pbnRzIHRvXG4gICAqXG4gICAqIEBuYW1lIENvbm5lY3Rpb24jdGFyZ2V0XG4gICAqIEB0eXBlIEJhc2VcbiAgICovXG4gIGluY29taW5nUmVmcy5iaW5kKHRoaXMsICd0YXJnZXQnKTtcbn1cblxuaW5oZXJpdHMoQ29ubmVjdGlvbiwgQmFzZSk7XG5cblxudmFyIHR5cGVzID0ge1xuICBjb25uZWN0aW9uOiBDb25uZWN0aW9uLFxuICBzaGFwZTogU2hhcGUsXG4gIGxhYmVsOiBMYWJlbCxcbiAgcm9vdDogUm9vdFxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IG1vZGVsIGVsZW1lbnQgb2YgdGhlIHNwZWNpZmllZCB0eXBlXG4gKlxuICogQG1ldGhvZCBjcmVhdGVcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBzaGFwZTEgPSBNb2RlbC5jcmVhdGUoJ3NoYXBlJywgeyB4OiAxMCwgeTogMTAsIHdpZHRoOiAxMDAsIGhlaWdodDogMTAwIH0pO1xuICogdmFyIHNoYXBlMiA9IE1vZGVsLmNyZWF0ZSgnc2hhcGUnLCB7IHg6IDIxMCwgeTogMjEwLCB3aWR0aDogMTAwLCBoZWlnaHQ6IDEwMCB9KTtcbiAqXG4gKiB2YXIgY29ubmVjdGlvbiA9IE1vZGVsLmNyZWF0ZSgnY29ubmVjdGlvbicsIHsgd2F5cG9pbnRzOiBbIHsgeDogMTEwLCB5OiA1NSB9LCB7eDogMjEwLCB5OiA1NSB9IF0gfSk7XG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSB0eXBlIGxvd2VyLWNhc2VkIG1vZGVsIG5hbWVcbiAqIEBwYXJhbSAge09iamVjdH0gYXR0cnMgYXR0cmlidXRlcyB0byBpbml0aWFsaXplIHRoZSBuZXcgbW9kZWwgaW5zdGFuY2Ugd2l0aFxuICpcbiAqIEByZXR1cm4ge0Jhc2V9IHRoZSBuZXcgbW9kZWwgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSh0eXBlLCBhdHRycykge1xuICB2YXIgVHlwZSA9IHR5cGVzW3R5cGVdO1xuICBpZiAoIVR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gdHlwZTogPCcgKyB0eXBlICsgJz4nKTtcbiAgfVxuICByZXR1cm4gYXNzaWduKG5ldyBUeXBlKCksIGF0dHJzKTtcbn0iLCJpbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdtaW4tZGFzaCc7XG5cblxudmFyIERFRkFVTFRfQ09ORklHID0ge1xuICBtb3ZlU3BlZWQ6IDUwLFxuICBtb3ZlU3BlZWRBY2NlbGVyYXRlZDogMjAwXG59O1xuXG5cbi8qKlxuICogQSBmZWF0dXJlIHRoYXQgYWxsb3dzIHVzZXJzIHRvIG1vdmUgdGhlIGNhbnZhcyB1c2luZyB0aGUga2V5Ym9hcmQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZ1xuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcubW92ZVNwZWVkPTUwXVxuICogQHBhcmFtIHtudW1iZXJ9IFtjb25maWcubW92ZVNwZWVkQWNjZWxlcmF0ZWQ9MjAwXVxuICogQHBhcmFtIHtLZXlib2FyZH0ga2V5Ym9hcmRcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gS2V5Ym9hcmRNb3ZlKFxuICAgIGNvbmZpZyxcbiAgICBrZXlib2FyZCxcbiAgICBjYW52YXNcbikge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLl9jb25maWcgPSBhc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLCBjb25maWcgfHwge30pO1xuXG4gIGtleWJvYXJkLmFkZExpc3RlbmVyKGFycm93c0xpc3RlbmVyKTtcblxuXG4gIGZ1bmN0aW9uIGFycm93c0xpc3RlbmVyKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQsXG4gICAgICAgIGNvbmZpZyA9IHNlbGYuX2NvbmZpZztcblxuICAgIGlmICgha2V5Ym9hcmQuaXNDbWQoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleWJvYXJkLmlzS2V5KFtcbiAgICAgICdBcnJvd0xlZnQnLCAnTGVmdCcsXG4gICAgICAnQXJyb3dVcCcsICdVcCcsXG4gICAgICAnQXJyb3dEb3duJywgJ0Rvd24nLFxuICAgICAgJ0Fycm93UmlnaHQnLCAnUmlnaHQnXG4gICAgXSwgZXZlbnQpKSB7XG5cbiAgICAgIHZhciBzcGVlZCA9IChcbiAgICAgICAga2V5Ym9hcmQuaXNTaGlmdChldmVudCkgP1xuICAgICAgICAgIGNvbmZpZy5tb3ZlU3BlZWRBY2NlbGVyYXRlZCA6XG4gICAgICAgICAgY29uZmlnLm1vdmVTcGVlZFxuICAgICAgKTtcblxuICAgICAgdmFyIGRpcmVjdGlvbjtcblxuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICBjYXNlICdMZWZ0JzpcbiAgICAgICAgZGlyZWN0aW9uID0gJ2xlZnQnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgY2FzZSAnVXAnOlxuICAgICAgICBkaXJlY3Rpb24gPSAndXAnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgY2FzZSAnUmlnaHQnOlxuICAgICAgICBkaXJlY3Rpb24gPSAncmlnaHQnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICBjYXNlICdEb3duJzpcbiAgICAgICAgZGlyZWN0aW9uID0gJ2Rvd24nO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgc2VsZi5tb3ZlQ2FudmFzKHtcbiAgICAgICAgc3BlZWQ6IHNwZWVkLFxuICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvblxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMubW92ZUNhbnZhcyA9IGZ1bmN0aW9uKG9wdHMpIHtcblxuICAgIHZhciBkeCA9IDAsXG4gICAgICAgIGR5ID0gMCxcbiAgICAgICAgc3BlZWQgPSBvcHRzLnNwZWVkO1xuXG4gICAgdmFyIGFjdHVhbFNwZWVkID0gc3BlZWQgLyBNYXRoLm1pbihNYXRoLnNxcnQoY2FudmFzLnZpZXdib3goKS5zY2FsZSksIDEpO1xuXG4gICAgc3dpdGNoIChvcHRzLmRpcmVjdGlvbikge1xuICAgIGNhc2UgJ2xlZnQnOiAvLyBMZWZ0XG4gICAgICBkeCA9IGFjdHVhbFNwZWVkO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndXAnOiAvLyBVcFxuICAgICAgZHkgPSBhY3R1YWxTcGVlZDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JpZ2h0JzogLy8gUmlnaHRcbiAgICAgIGR4ID0gLWFjdHVhbFNwZWVkO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZG93bic6IC8vIERvd25cbiAgICAgIGR5ID0gLWFjdHVhbFNwZWVkO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FudmFzLnNjcm9sbCh7XG4gICAgICBkeDogZHgsXG4gICAgICBkeTogZHlcbiAgICB9KTtcbiAgfTtcblxufVxuXG5cbktleWJvYXJkTW92ZS4kaW5qZWN0ID0gW1xuICAnY29uZmlnLmtleWJvYXJkTW92ZScsXG4gICdrZXlib2FyZCcsXG4gICdjYW52YXMnXG5dO1xuIiwiaW1wb3J0IEtleWJvYXJkTW9kdWxlIGZyb20gJy4uLy4uL2ZlYXR1cmVzL2tleWJvYXJkJztcblxuaW1wb3J0IEtleWJvYXJkTW92ZSBmcm9tICcuL0tleWJvYXJkTW92ZSc7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIEtleWJvYXJkTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdrZXlib2FyZE1vdmUnIF0sXG4gIGtleWJvYXJkTW92ZTogWyAndHlwZScsIEtleWJvYXJkTW92ZSBdXG59OyIsImltcG9ydCB7XG4gIHNldCBhcyBjdXJzb3JTZXQsXG4gIHVuc2V0IGFzIGN1cnNvclVuc2V0XG59IGZyb20gJy4uLy4uL3V0aWwvQ3Vyc29yJztcblxuaW1wb3J0IHtcbiAgaW5zdGFsbCBhcyBpbnN0YWxsQ2xpY2tUcmFwXG59IGZyb20gJy4uLy4uL3V0aWwvQ2xpY2tUcmFwJztcblxuaW1wb3J0IHtcbiAgZGVsdGEgYXMgZGVsdGFQb3Ncbn0gZnJvbSAnLi4vLi4vdXRpbC9Qb3NpdGlvblV0aWwnO1xuXG5pbXBvcnQge1xuICBldmVudCBhcyBkb21FdmVudCxcbiAgY2xvc2VzdCBhcyBkb21DbG9zZXN0XG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICB0b1BvaW50XG59IGZyb20gJy4uLy4uL3V0aWwvRXZlbnQnO1xuXG5cbnZhciBUSFJFU0hPTEQgPSAxNTtcblxuXG4vKipcbiAqIE1vdmUgdGhlIGNhbnZhcyB2aWEgbW91c2UuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW92ZUNhbnZhcyhldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgdmFyIGNvbnRleHQ7XG5cblxuICAvLyBsaXN0ZW4gZm9yIG1vdmUgb24gZWxlbWVudCBtb3VzZSBkb3duO1xuICAvLyBhbGxvdyBvdGhlcnMgdG8gaG9vayBpbnRvIHRoZSBldmVudCBiZWZvcmUgdXMgdGhvdWdoXG4gIC8vIChkcmFnZ2luZyAvIGVsZW1lbnQgbW92aW5nIHdpbGwgZG8gdGhpcylcbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQubW91c2Vkb3duJywgNTAwLCBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGhhbmRsZVN0YXJ0KGUub3JpZ2luYWxFdmVudCk7XG4gIH0pO1xuXG5cbiAgZnVuY3Rpb24gaGFuZGxlTW92ZShldmVudCkge1xuXG4gICAgdmFyIHN0YXJ0ID0gY29udGV4dC5zdGFydCxcbiAgICAgICAgcG9zaXRpb24gPSB0b1BvaW50KGV2ZW50KSxcbiAgICAgICAgZGVsdGEgPSBkZWx0YVBvcyhwb3NpdGlvbiwgc3RhcnQpO1xuXG4gICAgaWYgKCFjb250ZXh0LmRyYWdnaW5nICYmIGxlbmd0aChkZWx0YSkgPiBUSFJFU0hPTEQpIHtcbiAgICAgIGNvbnRleHQuZHJhZ2dpbmcgPSB0cnVlO1xuXG4gICAgICBpbnN0YWxsQ2xpY2tUcmFwKGV2ZW50QnVzKTtcblxuICAgICAgY3Vyc29yU2V0KCdncmFiJyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQuZHJhZ2dpbmcpIHtcblxuICAgICAgdmFyIGxhc3RQb3NpdGlvbiA9IGNvbnRleHQubGFzdCB8fCBjb250ZXh0LnN0YXJ0O1xuXG4gICAgICBkZWx0YSA9IGRlbHRhUG9zKHBvc2l0aW9uLCBsYXN0UG9zaXRpb24pO1xuXG4gICAgICBjYW52YXMuc2Nyb2xsKHtcbiAgICAgICAgZHg6IGRlbHRhLngsXG4gICAgICAgIGR5OiBkZWx0YS55XG4gICAgICB9KTtcblxuICAgICAgY29udGV4dC5sYXN0ID0gcG9zaXRpb247XG4gICAgfVxuXG4gICAgLy8gcHJldmVudCBzZWxlY3RcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cblxuICBmdW5jdGlvbiBoYW5kbGVFbmQoZXZlbnQpIHtcbiAgICBkb21FdmVudC51bmJpbmQoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCBoYW5kbGVNb3ZlKTtcbiAgICBkb21FdmVudC51bmJpbmQoZG9jdW1lbnQsICdtb3VzZXVwJywgaGFuZGxlRW5kKTtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgY3Vyc29yVW5zZXQoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0KGV2ZW50KSB7XG5cbiAgICAvLyBldmVudCBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgJy5kanMtZHJhZ2dhYmxlJ1xuICAgIGlmIChkb21DbG9zZXN0KGV2ZW50LnRhcmdldCwgJy5kanMtZHJhZ2dhYmxlJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIHJlamVjdCBub24tbGVmdCBsZWZ0IG1vdXNlIGJ1dHRvbiBvciBtb2RpZmllciBrZXlcbiAgICBpZiAoZXZlbnQuYnV0dG9uIHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuYWx0S2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGV4dCA9IHtcbiAgICAgIHN0YXJ0OiB0b1BvaW50KGV2ZW50KVxuICAgIH07XG5cbiAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgaGFuZGxlTW92ZSk7XG4gICAgZG9tRXZlbnQuYmluZChkb2N1bWVudCwgJ21vdXNldXAnLCBoYW5kbGVFbmQpO1xuXG4gICAgLy8gd2UndmUgaGFuZGxlZCB0aGUgZXZlbnRcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5cbk1vdmVDYW52YXMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NhbnZhcydcbl07XG5cblxuXG4vLyBoZWxwZXJzIC8vLy8vLy9cblxuZnVuY3Rpb24gbGVuZ3RoKHBvaW50KSB7XG4gIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3cocG9pbnQueCwgMikgKyBNYXRoLnBvdyhwb2ludC55LCAyKSk7XG59XG4iLCJpbXBvcnQgTW92ZUNhbnZhcyBmcm9tICcuL01vdmVDYW52YXMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdtb3ZlQ2FudmFzJyBdLFxuICBtb3ZlQ2FudmFzOiBbICd0eXBlJywgTW92ZUNhbnZhcyBdXG59OyIsImltcG9ydCBUb3VjaE1vZHVsZSBmcm9tICcuLi8uLi9mZWF0dXJlcy90b3VjaCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBUb3VjaE1vZHVsZVxuICBdXG59OyIsImltcG9ydCB7XG4gIGV2ZW50IGFzIGRvbUV2ZW50LFxuICBjbG9zZXN0IGFzIGRvbUNsb3Nlc3Rcbn0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7XG4gIGdldFN0ZXBTaXplLFxuICBjYXBcbn0gZnJvbSAnLi9ab29tVXRpbCc7XG5cbmltcG9ydCB7XG4gIGxvZzEwXG59IGZyb20gJy4uLy4uL3V0aWwvTWF0aCc7XG5cbmltcG9ydCB7XG4gIGJpbmRcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG52YXIgc2lnbiA9IE1hdGguc2lnbiB8fCBmdW5jdGlvbihuKSB7XG4gIHJldHVybiBuID49IDAgPyAxIDogLTE7XG59O1xuXG52YXIgUkFOR0UgPSB7IG1pbjogMC4yLCBtYXg6IDQgfSxcbiAgICBOVU1fU1RFUFMgPSAxMDtcblxudmFyIERFTFRBX1RIUkVTSE9MRCA9IDAuMTtcblxudmFyIERFRkFVTFRfU0NBTEUgPSAwLjc1O1xuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHpvb21pbmcgYW5kIHNjcm9sbGluZyB3aXRoaW4gdGhlXG4gKiB7QGxpbmsgQ2FudmFzfSB2aWEgdGhlIG1vdXNlIHdoZWVsLlxuICpcbiAqIE1vdXNlIHdoZWVsIHpvb21pbmcgLyBzY3JvbGxpbmcgbWF5IGJlIGRpc2FibGVkIHVzaW5nXG4gKiB0aGUge0BsaW5rIHRvZ2dsZShlbmFibGVkKX0gbWV0aG9kLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXVxuICogQHBhcmFtIHtib29sZWFufSBbY29uZmlnLmVuYWJsZWQ9dHJ1ZV0gZGVmYXVsdCBlbmFibGVkIHN0YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmZpZy5zY2FsZT0uNzVdIHNjcm9sbCBzZW5zaXZpdHlcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFpvb21TY3JvbGwoY29uZmlnLCBldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuXG4gIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcblxuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX2NvbnRhaW5lciA9IGNhbnZhcy5fY29udGFpbmVyO1xuXG4gIHRoaXMuX2hhbmRsZVdoZWVsID0gYmluZCh0aGlzLl9oYW5kbGVXaGVlbCwgdGhpcyk7XG5cbiAgdGhpcy5fdG90YWxEZWx0YSA9IDA7XG4gIHRoaXMuX3NjYWxlID0gY29uZmlnLnNjYWxlIHx8IERFRkFVTFRfU0NBTEU7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGV2ZW50QnVzLm9uKCdjYW52YXMuaW5pdCcsIGZ1bmN0aW9uKGUpIHtcbiAgICBzZWxmLl9pbml0KGNvbmZpZy5lbmFibGVkICE9PSBmYWxzZSk7XG4gIH0pO1xufVxuXG5ab29tU2Nyb2xsLiRpbmplY3QgPSBbXG4gICdjb25maWcuem9vbVNjcm9sbCcsXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnXG5dO1xuXG5ab29tU2Nyb2xsLnByb3RvdHlwZS5zY3JvbGwgPSBmdW5jdGlvbiBzY3JvbGwoZGVsdGEpIHtcbiAgdGhpcy5fY2FudmFzLnNjcm9sbChkZWx0YSk7XG59O1xuXG5cblpvb21TY3JvbGwucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gIHRoaXMuX2NhbnZhcy56b29tKCdmaXQtdmlld3BvcnQnKTtcbn07XG5cbi8qKlxuICogWm9vbSBkZXBlbmRpbmcgb24gZGVsdGEuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhXG4gKiBAcGFyYW0ge09iamVjdH0gcG9zaXRpb25cbiAqL1xuWm9vbVNjcm9sbC5wcm90b3R5cGUuem9vbSA9IGZ1bmN0aW9uIHpvb20oZGVsdGEsIHBvc2l0aW9uKSB7XG5cbiAgLy8gem9vbSB3aXRoIGhhbGYgdGhlIHN0ZXAgc2l6ZSBvZiBzdGVwWm9vbVxuICB2YXIgc3RlcFNpemUgPSBnZXRTdGVwU2l6ZShSQU5HRSwgTlVNX1NURVBTICogMik7XG5cbiAgLy8gYWRkIHVudGlsIHRocmVzaG9sZCByZWFjaGVkXG4gIHRoaXMuX3RvdGFsRGVsdGEgKz0gZGVsdGE7XG5cbiAgaWYgKE1hdGguYWJzKHRoaXMuX3RvdGFsRGVsdGEpID4gREVMVEFfVEhSRVNIT0xEKSB7XG4gICAgdGhpcy5fem9vbShkZWx0YSwgcG9zaXRpb24sIHN0ZXBTaXplKTtcblxuICAgIC8vIHJlc2V0XG4gICAgdGhpcy5fdG90YWxEZWx0YSA9IDA7XG4gIH1cbn07XG5cblxuWm9vbVNjcm9sbC5wcm90b3R5cGUuX2hhbmRsZVdoZWVsID0gZnVuY3Rpb24gaGFuZGxlV2hlZWwoZXZlbnQpIHtcblxuICAvLyBldmVudCBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgJy5kanMtc2Nyb2xsYWJsZSdcbiAgaWYgKGRvbUNsb3Nlc3QoZXZlbnQudGFyZ2V0LCAnLmRqcy1zY3JvbGxhYmxlJywgdHJ1ZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZWxlbWVudCA9IHRoaXMuX2NvbnRhaW5lcjtcblxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gIC8vIHBpbmNoIHRvIHpvb20gaXMgbWFwcGVkIHRvIHdoZWVsICsgY3RybEtleSA9IHRydWVcbiAgLy8gaW4gbW9kZXJuIGJyb3dzZXJzICghKVxuXG4gIHZhciBpc1pvb20gPSBldmVudC5jdHJsS2V5O1xuXG4gIHZhciBpc0hvcml6b250YWxTY3JvbGwgPSBldmVudC5zaGlmdEtleTtcblxuICB2YXIgZmFjdG9yID0gLTEgKiB0aGlzLl9zY2FsZSxcbiAgICAgIGRlbHRhO1xuXG4gIGlmIChpc1pvb20pIHtcbiAgICBmYWN0b3IgKj0gZXZlbnQuZGVsdGFNb2RlID09PSAwID8gMC4wMjAgOiAwLjMyO1xuICB9IGVsc2Uge1xuICAgIGZhY3RvciAqPSBldmVudC5kZWx0YU1vZGUgPT09IDAgPyAxLjAgOiAxNi4wO1xuICB9XG5cbiAgaWYgKGlzWm9vbSkge1xuICAgIHZhciBlbGVtZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB2YXIgb2Zmc2V0ID0ge1xuICAgICAgeDogZXZlbnQuY2xpZW50WCAtIGVsZW1lbnRSZWN0LmxlZnQsXG4gICAgICB5OiBldmVudC5jbGllbnRZIC0gZWxlbWVudFJlY3QudG9wXG4gICAgfTtcblxuICAgIGRlbHRhID0gKFxuICAgICAgTWF0aC5zcXJ0KFxuICAgICAgICBNYXRoLnBvdyhldmVudC5kZWx0YVksIDIpICtcbiAgICAgICAgTWF0aC5wb3coZXZlbnQuZGVsdGFYLCAyKVxuICAgICAgKSAqIHNpZ24oZXZlbnQuZGVsdGFZKSAqIGZhY3RvclxuICAgICk7XG5cbiAgICAvLyB6b29tIGluIHJlbGF0aXZlIHRvIGRpYWdyYW0ge3gseX0gY29vcmRpbmF0ZXNcbiAgICB0aGlzLnpvb20oZGVsdGEsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG5cbiAgICBpZiAoaXNIb3Jpem9udGFsU2Nyb2xsKSB7XG4gICAgICBkZWx0YSA9IHtcbiAgICAgICAgZHg6IGZhY3RvciAqIGV2ZW50LmRlbHRhWSxcbiAgICAgICAgZHk6IDBcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbHRhID0ge1xuICAgICAgICBkeDogZmFjdG9yICogZXZlbnQuZGVsdGFYLFxuICAgICAgICBkeTogZmFjdG9yICogZXZlbnQuZGVsdGFZXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuc2Nyb2xsKGRlbHRhKTtcbiAgfVxufTtcblxuLyoqXG4gKiBab29tIHdpdGggZml4ZWQgc3RlcCBzaXplLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSAtIFpvb20gZGVsdGEgKDEgZm9yIHpvb21pbmcgaW4sIC0xIGZvciBvdXQpLlxuICogQHBhcmFtIHtPYmplY3R9IHBvc2l0aW9uXG4gKi9cblpvb21TY3JvbGwucHJvdG90eXBlLnN0ZXBab29tID0gZnVuY3Rpb24gc3RlcFpvb20oZGVsdGEsIHBvc2l0aW9uKSB7XG5cbiAgdmFyIHN0ZXBTaXplID0gZ2V0U3RlcFNpemUoUkFOR0UsIE5VTV9TVEVQUyk7XG5cbiAgdGhpcy5fem9vbShkZWx0YSwgcG9zaXRpb24sIHN0ZXBTaXplKTtcbn07XG5cblxuLyoqXG4gKiBab29tIGluL291dCBnaXZlbiBhIHN0ZXAgc2l6ZS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsdGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBwb3NpdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHN0ZXBTaXplXG4gKi9cblpvb21TY3JvbGwucHJvdG90eXBlLl96b29tID0gZnVuY3Rpb24oZGVsdGEsIHBvc2l0aW9uLCBzdGVwU2l6ZSkge1xuICB2YXIgY2FudmFzID0gdGhpcy5fY2FudmFzO1xuXG4gIHZhciBkaXJlY3Rpb24gPSBkZWx0YSA+IDAgPyAxIDogLTE7XG5cbiAgdmFyIGN1cnJlbnRMaW5lYXJab29tTGV2ZWwgPSBsb2cxMChjYW52YXMuem9vbSgpKTtcblxuICAvLyBzbmFwIHRvIGEgcHJveGltYXRlIHpvb20gc3RlcFxuICB2YXIgbmV3TGluZWFyWm9vbUxldmVsID0gTWF0aC5yb3VuZChjdXJyZW50TGluZWFyWm9vbUxldmVsIC8gc3RlcFNpemUpICogc3RlcFNpemU7XG5cbiAgLy8gaW5jcmVhc2Ugb3IgZGVjcmVhc2Ugb25lIHpvb20gc3RlcCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uXG4gIG5ld0xpbmVhclpvb21MZXZlbCArPSBzdGVwU2l6ZSAqIGRpcmVjdGlvbjtcblxuICAvLyBjYWxjdWxhdGUgdGhlIGFic29sdXRlIGxvZ2FyaXRobWljIHpvb20gbGV2ZWwgYmFzZWQgb24gdGhlIGxpbmVhciB6b29tIGxldmVsXG4gIC8vIChlLmcuIDIgZm9yIGFuIGFic29sdXRlIHgyIHpvb20pXG4gIHZhciBuZXdMb2dab29tTGV2ZWwgPSBNYXRoLnBvdygxMCwgbmV3TGluZWFyWm9vbUxldmVsKTtcblxuICBjYW52YXMuem9vbShjYXAoUkFOR0UsIG5ld0xvZ1pvb21MZXZlbCksIHBvc2l0aW9uKTtcbn07XG5cblxuLyoqXG4gKiBUb2dnbGUgdGhlIHpvb20gc2Nyb2xsIGFiaWxpdHkgdmlhIG1vdXNlIHdoZWVsLlxuICpcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFtuZXdFbmFibGVkXSBuZXcgZW5hYmxlZCBzdGF0ZVxuICovXG5ab29tU2Nyb2xsLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUobmV3RW5hYmxlZCkge1xuXG4gIHZhciBlbGVtZW50ID0gdGhpcy5fY29udGFpbmVyO1xuICB2YXIgaGFuZGxlV2hlZWwgPSB0aGlzLl9oYW5kbGVXaGVlbDtcblxuICB2YXIgb2xkRW5hYmxlZCA9IHRoaXMuX2VuYWJsZWQ7XG5cbiAgaWYgKHR5cGVvZiBuZXdFbmFibGVkID09PSAndW5kZWZpbmVkJykge1xuICAgIG5ld0VuYWJsZWQgPSAhb2xkRW5hYmxlZDtcbiAgfVxuXG4gIC8vIG9ubHkgcmVhY3Qgb24gYWN0dWFsIGNoYW5nZXNcbiAgaWYgKG9sZEVuYWJsZWQgIT09IG5ld0VuYWJsZWQpIHtcblxuICAgIC8vIGFkZCBvciByZW1vdmUgd2hlZWwgbGlzdGVuZXIgYmFzZWQgb25cbiAgICAvLyBjaGFuZ2VkIGVuYWJsZWQgc3RhdGVcbiAgICBkb21FdmVudFtuZXdFbmFibGVkID8gJ2JpbmQnIDogJ3VuYmluZCddKGVsZW1lbnQsICd3aGVlbCcsIGhhbmRsZVdoZWVsLCBmYWxzZSk7XG4gIH1cblxuICB0aGlzLl9lbmFibGVkID0gbmV3RW5hYmxlZDtcblxuICByZXR1cm4gbmV3RW5hYmxlZDtcbn07XG5cblxuWm9vbVNjcm9sbC5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbihuZXdFbmFibGVkKSB7XG4gIHRoaXMudG9nZ2xlKG5ld0VuYWJsZWQpO1xufTtcbiIsImltcG9ydCB7XG4gIGxvZzEwXG59IGZyb20gJy4uLy4uL3V0aWwvTWF0aCc7XG5cbi8qKlxuICogR2V0IHN0ZXAgc2l6ZSBmb3IgZ2l2ZW4gcmFuZ2UgYW5kIG51bWJlciBvZiBzdGVwcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcmFuZ2VcbiAqIEBwYXJhbSB7bnVtYmVyfSByYW5nZS5taW5cbiAqIEBwYXJhbSB7bnVtYmVyfSByYW5nZS5tYXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0ZXBTaXplKHJhbmdlLCBzdGVwcykge1xuXG4gIHZhciBtaW5MaW5lYXJSYW5nZSA9IGxvZzEwKHJhbmdlLm1pbiksXG4gICAgICBtYXhMaW5lYXJSYW5nZSA9IGxvZzEwKHJhbmdlLm1heCk7XG5cbiAgdmFyIGFic29sdXRlTGluZWFyUmFuZ2UgPSBNYXRoLmFicyhtaW5MaW5lYXJSYW5nZSkgKyBNYXRoLmFicyhtYXhMaW5lYXJSYW5nZSk7XG5cbiAgcmV0dXJuIGFic29sdXRlTGluZWFyUmFuZ2UgLyBzdGVwcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhcChyYW5nZSwgc2NhbGUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KHJhbmdlLm1pbiwgTWF0aC5taW4ocmFuZ2UubWF4LCBzY2FsZSkpO1xufVxuIiwiaW1wb3J0IFpvb21TY3JvbGwgZnJvbSAnLi9ab29tU2Nyb2xsJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAnem9vbVNjcm9sbCcgXSxcbiAgem9vbVNjcm9sbDogWyAndHlwZScsIFpvb21TY3JvbGwgXVxufTsiLCJpbXBvcnQge1xuICBhc1RSQkwsXG4gIGdldE9yaWVudGF0aW9uLFxuICByb3VuZFBvaW50XG59IGZyb20gJy4uL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgY2VudGVyLFxuICBkZWx0YVxufSBmcm9tICcuL1Bvc2l0aW9uVXRpbCc7XG5cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhYnNvbHV0ZSBwb2ludCByZWxhdGl2ZSB0byB0aGUgbmV3IGVsZW1lbnQncyBwb3NpdGlvblxuICpcbiAqIEBwYXJhbSB7cG9pbnR9IHBvaW50IFthYnNvbHV0ZV1cbiAqIEBwYXJhbSB7Ym91bmRzfSBvbGRCb3VuZHNcbiAqIEBwYXJhbSB7Ym91bmRzfSBuZXdCb3VuZHNcbiAqXG4gKiBAcmV0dXJuIHtwb2ludH0gcG9pbnQgW2Fic29sdXRlXVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3QXR0YWNoUG9pbnQocG9pbnQsIG9sZEJvdW5kcywgbmV3Qm91bmRzKSB7XG4gIHZhciBvbGRDZW50ZXIgPSBjZW50ZXIob2xkQm91bmRzKSxcbiAgICAgIG5ld0NlbnRlciA9IGNlbnRlcihuZXdCb3VuZHMpLFxuICAgICAgb2xkRGVsdGEgPSBkZWx0YShwb2ludCwgb2xkQ2VudGVyKTtcblxuICB2YXIgbmV3RGVsdGEgPSB7XG4gICAgeDogb2xkRGVsdGEueCAqIChuZXdCb3VuZHMud2lkdGggLyBvbGRCb3VuZHMud2lkdGgpLFxuICAgIHk6IG9sZERlbHRhLnkgKiAobmV3Qm91bmRzLmhlaWdodCAvIG9sZEJvdW5kcy5oZWlnaHQpXG4gIH07XG5cbiAgcmV0dXJuIHJvdW5kUG9pbnQoe1xuICAgIHg6IG5ld0NlbnRlci54ICsgbmV3RGVsdGEueCxcbiAgICB5OiBuZXdDZW50ZXIueSArIG5ld0RlbHRhLnlcbiAgfSk7XG59XG5cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBzaGFwZSdzIGRlbHRhIHJlbGF0aXZlIHRvIGEgbmV3IHBvc2l0aW9uXG4gKiBvZiBhIGNlcnRhaW4gZWxlbWVudCdzIGJvdW5kc1xuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBwb2ludCBbYWJzb2x1dGVdXG4gKiBAcGFyYW0ge2JvdW5kc30gb2xkQm91bmRzXG4gKiBAcGFyYW0ge2JvdW5kc30gbmV3Qm91bmRzXG4gKlxuICogQHJldHVybiB7ZGVsdGF9IGRlbHRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdBdHRhY2hTaGFwZURlbHRhKHNoYXBlLCBvbGRCb3VuZHMsIG5ld0JvdW5kcykge1xuICB2YXIgc2hhcGVDZW50ZXIgPSBjZW50ZXIoc2hhcGUpLFxuICAgICAgb2xkQ2VudGVyID0gY2VudGVyKG9sZEJvdW5kcyksXG4gICAgICBuZXdDZW50ZXIgPSBjZW50ZXIobmV3Qm91bmRzKSxcbiAgICAgIHNoYXBlRGVsdGEgPSBkZWx0YShzaGFwZSwgc2hhcGVDZW50ZXIpLFxuICAgICAgb2xkQ2VudGVyRGVsdGEgPSBkZWx0YShzaGFwZUNlbnRlciwgb2xkQ2VudGVyKSxcbiAgICAgIHN0aWNreVBvc2l0aW9uRGVsdGEgPSBnZXRTdGlja3lQb3NpdGlvbkRlbHRhKHNoYXBlQ2VudGVyLCBvbGRCb3VuZHMsIG5ld0JvdW5kcyk7XG5cbiAgaWYgKHN0aWNreVBvc2l0aW9uRGVsdGEpIHtcbiAgICByZXR1cm4gc3RpY2t5UG9zaXRpb25EZWx0YTtcbiAgfVxuXG4gIHZhciBuZXdDZW50ZXJEZWx0YSA9IHtcbiAgICB4OiBvbGRDZW50ZXJEZWx0YS54ICogKG5ld0JvdW5kcy53aWR0aCAvIG9sZEJvdW5kcy53aWR0aCksXG4gICAgeTogb2xkQ2VudGVyRGVsdGEueSAqIChuZXdCb3VuZHMuaGVpZ2h0IC8gb2xkQm91bmRzLmhlaWdodClcbiAgfTtcblxuICB2YXIgbmV3U2hhcGVDZW50ZXIgPSB7XG4gICAgeDogbmV3Q2VudGVyLnggKyBuZXdDZW50ZXJEZWx0YS54LFxuICAgIHk6IG5ld0NlbnRlci55ICsgbmV3Q2VudGVyRGVsdGEueVxuICB9O1xuXG4gIHJldHVybiByb3VuZFBvaW50KHtcbiAgICB4OiBuZXdTaGFwZUNlbnRlci54ICsgc2hhcGVEZWx0YS54IC0gc2hhcGUueCxcbiAgICB5OiBuZXdTaGFwZUNlbnRlci55ICsgc2hhcGVEZWx0YS55IC0gc2hhcGUueVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RpY2t5UG9zaXRpb25EZWx0YShvbGRTaGFwZUNlbnRlciwgb2xkQm91bmRzLCBuZXdCb3VuZHMpIHtcbiAgdmFyIG9sZFRSQkwgPSBhc1RSQkwob2xkQm91bmRzKSxcbiAgICAgIG5ld1RSQkwgPSBhc1RSQkwobmV3Qm91bmRzKTtcblxuICBpZiAoaXNNb3ZlZChvbGRUUkJMLCBuZXdUUkJMKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG9sZE9yaWVudGF0aW9uID0gZ2V0T3JpZW50YXRpb24ob2xkQm91bmRzLCBvbGRTaGFwZUNlbnRlciksXG4gICAgICBzdGlja3lQb3NpdGlvbkRlbHRhLFxuICAgICAgbmV3U2hhcGVDZW50ZXIsXG4gICAgICBuZXdPcmllbnRhdGlvbjtcblxuICBpZiAob2xkT3JpZW50YXRpb24gPT09ICd0b3AnKSB7XG4gICAgc3RpY2t5UG9zaXRpb25EZWx0YSA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiBuZXdUUkJMLmJvdHRvbSAtIG9sZFRSQkwuYm90dG9tXG4gICAgfTtcbiAgfSBlbHNlIGlmIChvbGRPcmllbnRhdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICBzdGlja3lQb3NpdGlvbkRlbHRhID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IG5ld1RSQkwudG9wIC0gb2xkVFJCTC50b3BcbiAgICB9O1xuICB9IGVsc2UgaWYgKG9sZE9yaWVudGF0aW9uID09PSAncmlnaHQnKSB7XG4gICAgc3RpY2t5UG9zaXRpb25EZWx0YSA9IHtcbiAgICAgIHg6IG5ld1RSQkwubGVmdCAtIG9sZFRSQkwubGVmdCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9IGVsc2UgaWYgKG9sZE9yaWVudGF0aW9uID09PSAnbGVmdCcpIHtcbiAgICBzdGlja3lQb3NpdGlvbkRlbHRhID0ge1xuICAgICAgeDogbmV3VFJCTC5yaWdodCAtIG9sZFRSQkwucmlnaHQsXG4gICAgICB5OiAwXG4gICAgfTtcbiAgfSBlbHNlIHtcblxuICAgIC8vIGZhbGxiYWNrIHRvIHByb3BvcnRpb25hbCBtb3ZlbWVudCBmb3IgY29ybmVyLXBsYWNlZCBhdHRhY2htZW50c1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbmV3U2hhcGVDZW50ZXIgPSB7XG4gICAgeDogb2xkU2hhcGVDZW50ZXIueCArIHN0aWNreVBvc2l0aW9uRGVsdGEueCxcbiAgICB5OiBvbGRTaGFwZUNlbnRlci55ICsgc3RpY2t5UG9zaXRpb25EZWx0YS55XG4gIH07XG5cbiAgbmV3T3JpZW50YXRpb24gPSBnZXRPcmllbnRhdGlvbihuZXdCb3VuZHMsIG5ld1NoYXBlQ2VudGVyKTtcblxuICBpZiAobmV3T3JpZW50YXRpb24gIT09IG9sZE9yaWVudGF0aW9uKSB7XG5cbiAgICAvLyBmYWxsYmFjayB0byBwcm9wb3J0aW9uYWwgbW92ZW1lbnQgaWYgb3JpZW50YXRpb24gd291bGQgb3RoZXJ3aXNlIGNoYW5nZVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHN0aWNreVBvc2l0aW9uRGVsdGE7XG59XG5cbmZ1bmN0aW9uIGlzTW92ZWQob2xkVFJCTCwgbmV3VFJCTCkge1xuICByZXR1cm4gaXNIb3Jpem9udGFsbHlNb3ZlZChvbGRUUkJMLCBuZXdUUkJMKSB8fCBpc1ZlcnRpY2FsbHlNb3ZlZChvbGRUUkJMLCBuZXdUUkJMKTtcbn1cblxuZnVuY3Rpb24gaXNIb3Jpem9udGFsbHlNb3ZlZChvbGRUUkJMLCBuZXdUUkJMKSB7XG4gIHJldHVybiBvbGRUUkJMLnJpZ2h0ICE9PSBuZXdUUkJMLnJpZ2h0ICYmIG9sZFRSQkwubGVmdCAhPT0gbmV3VFJCTC5sZWZ0O1xufVxuXG5mdW5jdGlvbiBpc1ZlcnRpY2FsbHlNb3ZlZChvbGRUUkJMLCBuZXdUUkJMKSB7XG4gIHJldHVybiBvbGRUUkJMLnRvcCAhPT0gbmV3VFJCTC50b3AgJiYgb2xkVFJCTC5ib3R0b20gIT09IG5ld1RSQkwuYm90dG9tO1xufVxuIiwidmFyIFRSQVBfUFJJT1JJVFkgPSA1MDAwO1xuXG4vKipcbiAqIEluc3RhbGxzIGEgY2xpY2sgdHJhcCB0aGF0IHByZXZlbnRzIGEgZ2hvc3QgY2xpY2sgZm9sbG93aW5nIGEgZHJhZ2dpbmcgb3BlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBhIGZ1bmN0aW9uIHRvIGltbWVkaWF0ZWx5IHJlbW92ZSB0aGUgaW5zdGFsbGVkIHRyYXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsKGV2ZW50QnVzLCBldmVudE5hbWUpIHtcblxuICBldmVudE5hbWUgPSBldmVudE5hbWUgfHwgJ2VsZW1lbnQuY2xpY2snO1xuXG4gIGZ1bmN0aW9uIHRyYXAoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZXZlbnRCdXMub25jZShldmVudE5hbWUsIFRSQVBfUFJJT1JJVFksIHRyYXApO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBldmVudEJ1cy5vZmYoZXZlbnROYW1lLCB0cmFwKTtcbiAgfTtcbn0iLCIvKipcbiAqIEZhaWxzYWZlIHJlbW92ZSBhbiBlbGVtZW50IGZyb20gYSBjb2xsZWN0aW9uXG4gKlxuICogQHBhcmFtICB7QXJyYXk8T2JqZWN0Pn0gW2NvbGxlY3Rpb25dXG4gKiBAcGFyYW0gIHtPYmplY3R9IFtlbGVtZW50XVxuICpcbiAqIEByZXR1cm4ge251bWJlcn0gdGhlIHByZXZpb3VzIGluZGV4IG9mIHRoZSBlbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmUoY29sbGVjdGlvbiwgZWxlbWVudCkge1xuXG4gIGlmICghY29sbGVjdGlvbiB8fCAhZWxlbWVudCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHZhciBpZHggPSBjb2xsZWN0aW9uLmluZGV4T2YoZWxlbWVudCk7XG5cbiAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICBjb2xsZWN0aW9uLnNwbGljZShpZHgsIDEpO1xuICB9XG5cbiAgcmV0dXJuIGlkeDtcbn1cblxuLyoqXG4gKiBGYWlsIHNhdmUgYWRkIGFuIGVsZW1lbnQgdG8gdGhlIGdpdmVuIGNvbm5lY3Rpb24sIGVuc3VyaW5nXG4gKiBpdCBkb2VzIG5vdCB5ZXQgZXhpc3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkKGNvbGxlY3Rpb24sIGVsZW1lbnQsIGlkeCkge1xuXG4gIGlmICghY29sbGVjdGlvbiB8fCAhZWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaWR4ICE9PSAnbnVtYmVyJykge1xuICAgIGlkeCA9IC0xO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRJZHggPSBjb2xsZWN0aW9uLmluZGV4T2YoZWxlbWVudCk7XG5cbiAgaWYgKGN1cnJlbnRJZHggIT09IC0xKSB7XG5cbiAgICBpZiAoY3VycmVudElkeCA9PT0gaWR4KSB7XG5cbiAgICAgIC8vIG5vdGhpbmcgdG8gZG8sIHBvc2l0aW9uIGhhcyBub3QgY2hhbmdlZFxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIGlmIChpZHggIT09IC0xKSB7XG5cbiAgICAgICAgLy8gcmVtb3ZlIGZyb20gY3VycmVudCBwb3NpdGlvblxuICAgICAgICBjb2xsZWN0aW9uLnNwbGljZShjdXJyZW50SWR4LCAxKTtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgLy8gYWxyZWFkeSBleGlzdHMgaW4gY29sbGVjdGlvblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGlkeCAhPT0gLTEpIHtcblxuICAgIC8vIGluc2VydCBhdCBzcGVjaWZpZWQgcG9zaXRpb25cbiAgICBjb2xsZWN0aW9uLnNwbGljZShpZHgsIDAsIGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuXG4gICAgLy8gcHVzaCB0byBlbmRcbiAgICBjb2xsZWN0aW9uLnB1c2goZWxlbWVudCk7XG4gIH1cbn1cblxuXG4vKipcbiAqIEZhaWwgc2F2ZSBnZXQgdGhlIGluZGV4IG9mIGFuIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gY29sbGVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBpbmRleCBvciAtMSBpZiBjb2xsZWN0aW9uIG9yIGVsZW1lbnQgZG9cbiAqICAgICAgICAgICAgICAgICAgbm90IGV4aXN0IG9yIHRoZSBlbGVtZW50IGlzIG5vdCBjb250YWluZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGNvbGxlY3Rpb24sIGVsZW1lbnQpIHtcblxuICBpZiAoIWNvbGxlY3Rpb24gfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICByZXR1cm4gY29sbGVjdGlvbi5pbmRleE9mKGVsZW1lbnQpO1xufVxuIiwiaW1wb3J0IHtcbiAgY2xhc3NlcyBhcyBkb21DbGFzc2VzXG59IGZyb20gJ21pbi1kb20nO1xuXG52YXIgQ1VSU09SX0NMU19QQVRURVJOID0gL15kanMtY3Vyc29yLS4qJC87XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChtb2RlKSB7XG4gIHZhciBjbGFzc2VzID0gZG9tQ2xhc3Nlcyhkb2N1bWVudC5ib2R5KTtcblxuICBjbGFzc2VzLnJlbW92ZU1hdGNoaW5nKENVUlNPUl9DTFNfUEFUVEVSTik7XG5cbiAgaWYgKG1vZGUpIHtcbiAgICBjbGFzc2VzLmFkZCgnZGpzLWN1cnNvci0nICsgbW9kZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2V0KCkge1xuICBzZXQobnVsbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXMobW9kZSkge1xuICB2YXIgY2xhc3NlcyA9IGRvbUNsYXNzZXMoZG9jdW1lbnQuYm9keSk7XG5cbiAgcmV0dXJuIGNsYXNzZXMuaGFzKCdkanMtY3Vyc29yLScgKyBtb2RlKTtcbn1cbiIsImltcG9ydCB7XG4gIGFzc2lnbixcbiAgZmlsdGVyLFxuICBmaW5kLFxuICBpc0FycmF5LFxuICBpc051bWJlcixcbiAgaXNPYmplY3QsXG4gIGlzVW5kZWZpbmVkLFxuICBncm91cEJ5LFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuXG4vKipcbiAqIEdldCBwYXJlbnQgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuYmFzZT59IGVsZW1lbnRzXG4gKlxuICogQHJldHVybnMge0FycmF5PGRqcy5tb2RlbC5CYXNlPn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudHMoZWxlbWVudHMpIHtcblxuICAvLyBmaW5kIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBjaGlsZHJlbiBvZiBhbnkgb3RoZXIgZWxlbWVudHNcbiAgcmV0dXJuIGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiAhZmluZChlbGVtZW50cywgZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIGUgIT09IGVsZW1lbnQgJiYgZ2V0UGFyZW50KGVsZW1lbnQsIGUpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuXG5mdW5jdGlvbiBnZXRQYXJlbnQoZWxlbWVudCwgcGFyZW50KSB7XG4gIGlmICghcGFyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGVsZW1lbnQgPT09IHBhcmVudCkge1xuICAgIHJldHVybiBwYXJlbnQ7XG4gIH1cblxuICBpZiAoIWVsZW1lbnQucGFyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGdldFBhcmVudChlbGVtZW50LnBhcmVudCwgcGFyZW50KTtcbn1cblxuXG4vKipcbiAqIEFkZHMgYW4gZWxlbWVudCB0byBhIGNvbGxlY3Rpb24gYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGVcbiAqIGVsZW1lbnQgd2FzIGFkZGVkLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gZWxlbWVudHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHVuaXF1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkKGVsZW1lbnRzLCBlLCB1bmlxdWUpIHtcbiAgdmFyIGNhbkFkZCA9ICF1bmlxdWUgfHwgZWxlbWVudHMuaW5kZXhPZihlKSA9PT0gLTE7XG5cbiAgaWYgKGNhbkFkZCkge1xuICAgIGVsZW1lbnRzLnB1c2goZSk7XG4gIH1cblxuICByZXR1cm4gY2FuQWRkO1xufVxuXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24sIGNhbGxpbmcgdGhlIGl0ZXJhdG9yIGZ1bmN0aW9uIGBmbmBcbiAqIHdpdGggKGVsZW1lbnQsIGluZGV4LCByZWN1cnNpb25EZXB0aCkuXG4gKlxuICogUmVjdXJzZSBpbnRvIGFsbCBlbGVtZW50cyB0aGF0IGFyZSByZXR1cm5lZCBieSBgZm5gLlxuICpcbiAqIEBwYXJhbSAge09iamVjdHxBcnJheTxPYmplY3Q+fSBlbGVtZW50c1xuICogQHBhcmFtICB7RnVuY3Rpb259IGZuIGl0ZXJhdG9yIGZ1bmN0aW9uIGNhbGxlZCB3aXRoIChlbGVtZW50LCBpbmRleCwgcmVjdXJzaW9uRGVwdGgpXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFtkZXB0aF0gbWF4aW11bSByZWN1cnNpb24gZGVwdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVhY2hFbGVtZW50KGVsZW1lbnRzLCBmbiwgZGVwdGgpIHtcblxuICBkZXB0aCA9IGRlcHRoIHx8IDA7XG5cbiAgaWYgKCFpc0FycmF5KGVsZW1lbnRzKSkge1xuICAgIGVsZW1lbnRzID0gWyBlbGVtZW50cyBdO1xuICB9XG5cbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24ocywgaSkge1xuICAgIHZhciBmaWx0ZXIgPSBmbihzLCBpLCBkZXB0aCk7XG5cbiAgICBpZiAoaXNBcnJheShmaWx0ZXIpICYmIGZpbHRlci5sZW5ndGgpIHtcbiAgICAgIGVhY2hFbGVtZW50KGZpbHRlciwgZm4sIGRlcHRoICsgMSk7XG4gICAgfVxuICB9KTtcbn1cblxuXG4vKipcbiAqIENvbGxlY3RzIHNlbGYgKyBjaGlsZCBlbGVtZW50cyB1cCB0byBhIGdpdmVuIGRlcHRoIGZyb20gYSBsaXN0IG9mIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfEFycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHMgdGhlIGVsZW1lbnRzIHRvIHNlbGVjdCB0aGUgY2hpbGRyZW4gZnJvbVxuICogQHBhcmFtICB7Ym9vbGVhbn0gdW5pcXVlIHdoZXRoZXIgdG8gcmV0dXJuIGEgdW5pcXVlIHJlc3VsdCBzZXQgKG5vIGR1cGxpY2F0ZXMpXG4gKiBAcGFyYW0gIHtudW1iZXJ9IG1heERlcHRoIHRoZSBkZXB0aCB0byBzZWFyY2ggdGhyb3VnaCBvciAtMSBmb3IgaW5maW5pdGVcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuQmFzZT59IGZvdW5kIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxmQW5kQ2hpbGRyZW4oZWxlbWVudHMsIHVuaXF1ZSwgbWF4RGVwdGgpIHtcbiAgdmFyIHJlc3VsdCA9IFtdLFxuICAgICAgcHJvY2Vzc2VkQ2hpbGRyZW4gPSBbXTtcblxuICBlYWNoRWxlbWVudChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCwgaSwgZGVwdGgpIHtcbiAgICBhZGQocmVzdWx0LCBlbGVtZW50LCB1bmlxdWUpO1xuXG4gICAgdmFyIGNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbjtcblxuICAgIC8vIG1heCB0cmF2ZXJzYWwgZGVwdGggbm90IHJlYWNoZWQgeWV0XG4gICAgaWYgKG1heERlcHRoID09PSAtMSB8fCBkZXB0aCA8IG1heERlcHRoKSB7XG5cbiAgICAgIC8vIGNoaWxkcmVuIGV4aXN0ICYmIGNoaWxkcmVuIG5vdCB5ZXQgcHJvY2Vzc2VkXG4gICAgICBpZiAoY2hpbGRyZW4gJiYgYWRkKHByb2Nlc3NlZENoaWxkcmVuLCBjaGlsZHJlbiwgdW5pcXVlKSkge1xuICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFJldHVybiBzZWxmICsgZGlyZWN0IGNoaWxkcmVuIGZvciBhIG51bWJlciBvZiBlbGVtZW50c1xuICpcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHMgdG8gcXVlcnlcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGFsbG93RHVwbGljYXRlcyB0byBhbGxvdyBkdXBsaWNhdGVzIGluIHRoZSByZXN1bHQgc2V0XG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSB0aGUgY29sbGVjdGVkIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxmQW5kRGlyZWN0Q2hpbGRyZW4oZWxlbWVudHMsIGFsbG93RHVwbGljYXRlcykge1xuICByZXR1cm4gc2VsZkFuZENoaWxkcmVuKGVsZW1lbnRzLCAhYWxsb3dEdXBsaWNhdGVzLCAxKTtcbn1cblxuXG4vKipcbiAqIFJldHVybiBzZWxmICsgQUxMIGNoaWxkcmVuIGZvciBhIG51bWJlciBvZiBlbGVtZW50c1xuICpcbiAqIEBwYXJhbSAge0FycmF5PGRqcy5tb2RlbC5CYXNlPn0gZWxlbWVudHMgdG8gcXVlcnlcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGFsbG93RHVwbGljYXRlcyB0byBhbGxvdyBkdXBsaWNhdGVzIGluIHRoZSByZXN1bHQgc2V0XG4gKlxuICogQHJldHVybiB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSB0aGUgY29sbGVjdGVkIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxmQW5kQWxsQ2hpbGRyZW4oZWxlbWVudHMsIGFsbG93RHVwbGljYXRlcykge1xuICByZXR1cm4gc2VsZkFuZENoaWxkcmVuKGVsZW1lbnRzLCAhYWxsb3dEdXBsaWNhdGVzLCAtMSk7XG59XG5cblxuLyoqXG4gKiBHZXRzIHRoZSB0aGUgY2xvc3VyZSBmb3IgYWxsIHNlbGVjdGVkIGVsZW1lbnRzLFxuICogdGhlaXIgZW5jbG9zZWQgY2hpbGRyZW4gYW5kIGNvbm5lY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8ZGpzLm1vZGVsLkJhc2U+fSBlbGVtZW50c1xuICogQHBhcmFtIHtib29sZWFufSBbaXNUb3BMZXZlbD10cnVlXVxuICogQHBhcmFtIHtPYmplY3R9IFtleGlzdGluZ0Nsb3N1cmVdXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBuZXdDbG9zdXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbG9zdXJlKGVsZW1lbnRzLCBpc1RvcExldmVsLCBjbG9zdXJlKSB7XG5cbiAgaWYgKGlzVW5kZWZpbmVkKGlzVG9wTGV2ZWwpKSB7XG4gICAgaXNUb3BMZXZlbCA9IHRydWU7XG4gIH1cblxuICBpZiAoaXNPYmplY3QoaXNUb3BMZXZlbCkpIHtcbiAgICBjbG9zdXJlID0gaXNUb3BMZXZlbDtcbiAgICBpc1RvcExldmVsID0gdHJ1ZTtcbiAgfVxuXG5cbiAgY2xvc3VyZSA9IGNsb3N1cmUgfHwge307XG5cbiAgdmFyIGFsbFNoYXBlcyA9IGNvcHlPYmplY3QoY2xvc3VyZS5hbGxTaGFwZXMpLFxuICAgICAgYWxsQ29ubmVjdGlvbnMgPSBjb3B5T2JqZWN0KGNsb3N1cmUuYWxsQ29ubmVjdGlvbnMpLFxuICAgICAgZW5jbG9zZWRFbGVtZW50cyA9IGNvcHlPYmplY3QoY2xvc3VyZS5lbmNsb3NlZEVsZW1lbnRzKSxcbiAgICAgIGVuY2xvc2VkQ29ubmVjdGlvbnMgPSBjb3B5T2JqZWN0KGNsb3N1cmUuZW5jbG9zZWRDb25uZWN0aW9ucyk7XG5cbiAgdmFyIHRvcExldmVsID0gY29weU9iamVjdChcbiAgICBjbG9zdXJlLnRvcExldmVsLFxuICAgIGlzVG9wTGV2ZWwgJiYgZ3JvdXBCeShlbGVtZW50cywgZnVuY3Rpb24oZSkgeyByZXR1cm4gZS5pZDsgfSlcbiAgKTtcblxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNvbm5lY3Rpb24oYykge1xuICAgIGlmICh0b3BMZXZlbFtjLnNvdXJjZS5pZF0gJiYgdG9wTGV2ZWxbYy50YXJnZXQuaWRdKSB7XG4gICAgICB0b3BMZXZlbFtjLmlkXSA9IFsgYyBdO1xuICAgIH1cblxuICAgIC8vIG5vdCBlbmNsb3NlZCBhcyBhIGNoaWxkLCBidXQgbWF5YmUgbG9naWNhbGx5XG4gICAgLy8gKGNvbm5lY3RpbmcgdHdvIG1vdmVkIGVsZW1lbnRzPylcbiAgICBpZiAoYWxsU2hhcGVzW2Muc291cmNlLmlkXSAmJiBhbGxTaGFwZXNbYy50YXJnZXQuaWRdKSB7XG4gICAgICBlbmNsb3NlZENvbm5lY3Rpb25zW2MuaWRdID0gZW5jbG9zZWRFbGVtZW50c1tjLmlkXSA9IGM7XG4gICAgfVxuXG4gICAgYWxsQ29ubmVjdGlvbnNbYy5pZF0gPSBjO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRWxlbWVudChlbGVtZW50KSB7XG5cbiAgICBlbmNsb3NlZEVsZW1lbnRzW2VsZW1lbnQuaWRdID0gZWxlbWVudDtcblxuICAgIGlmIChlbGVtZW50LndheXBvaW50cykge1xuXG4gICAgICAvLyByZW1lbWJlciBjb25uZWN0aW9uXG4gICAgICBlbmNsb3NlZENvbm5lY3Rpb25zW2VsZW1lbnQuaWRdID0gYWxsQ29ubmVjdGlvbnNbZWxlbWVudC5pZF0gPSBlbGVtZW50O1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIHJlbWVtYmVyIHNoYXBlXG4gICAgICBhbGxTaGFwZXNbZWxlbWVudC5pZF0gPSBlbGVtZW50O1xuXG4gICAgICAvLyByZW1lbWJlciBhbGwgY29ubmVjdGlvbnNcbiAgICAgIGZvckVhY2goZWxlbWVudC5pbmNvbWluZywgaGFuZGxlQ29ubmVjdGlvbik7XG5cbiAgICAgIGZvckVhY2goZWxlbWVudC5vdXRnb2luZywgaGFuZGxlQ29ubmVjdGlvbik7XG5cbiAgICAgIC8vIHJlY3Vyc2UgaW50byBjaGlsZHJlblxuICAgICAgcmV0dXJuIGVsZW1lbnQuY2hpbGRyZW47XG4gICAgfVxuICB9XG5cbiAgZWFjaEVsZW1lbnQoZWxlbWVudHMsIGhhbmRsZUVsZW1lbnQpO1xuXG4gIHJldHVybiB7XG4gICAgYWxsU2hhcGVzOiBhbGxTaGFwZXMsXG4gICAgYWxsQ29ubmVjdGlvbnM6IGFsbENvbm5lY3Rpb25zLFxuICAgIHRvcExldmVsOiB0b3BMZXZlbCxcbiAgICBlbmNsb3NlZENvbm5lY3Rpb25zOiBlbmNsb3NlZENvbm5lY3Rpb25zLFxuICAgIGVuY2xvc2VkRWxlbWVudHM6IGVuY2xvc2VkRWxlbWVudHNcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzdXJyb3VuZGluZyBiYm94IGZvciBhbGwgZWxlbWVudHMgaW5cbiAqIHRoZSBhcnJheSBvciB0aGUgZWxlbWVudCBwcmltaXRpdmUuXG4gKlxuICogQHBhcmFtIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fGRqcy5tb2RlbC5TaGFwZX0gZWxlbWVudHNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc3RvcFJlY3Vyc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QkJveChlbGVtZW50cywgc3RvcFJlY3Vyc2lvbikge1xuXG4gIHN0b3BSZWN1cnNpb24gPSAhIXN0b3BSZWN1cnNpb247XG4gIGlmICghaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IFtlbGVtZW50c107XG4gIH1cblxuICB2YXIgbWluWCxcbiAgICAgIG1pblksXG4gICAgICBtYXhYLFxuICAgICAgbWF4WTtcblxuICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICAvLyBJZiBlbGVtZW50IGlzIGEgY29ubmVjdGlvbiB0aGUgYmJveCBtdXN0IGJlIGNvbXB1dGVkIGZpcnN0XG4gICAgdmFyIGJib3ggPSBlbGVtZW50O1xuICAgIGlmIChlbGVtZW50LndheXBvaW50cyAmJiAhc3RvcFJlY3Vyc2lvbikge1xuICAgICAgYmJveCA9IGdldEJCb3goZWxlbWVudC53YXlwb2ludHMsIHRydWUpO1xuICAgIH1cblxuICAgIHZhciB4ID0gYmJveC54LFxuICAgICAgICB5ID0gYmJveC55LFxuICAgICAgICBoZWlnaHQgPSBiYm94LmhlaWdodCB8fCAwLFxuICAgICAgICB3aWR0aCA9IGJib3gud2lkdGggfHwgMDtcblxuICAgIGlmICh4IDwgbWluWCB8fCBtaW5YID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1pblggPSB4O1xuICAgIH1cbiAgICBpZiAoeSA8IG1pblkgfHwgbWluWSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBtaW5ZID0geTtcbiAgICB9XG5cbiAgICBpZiAoKHggKyB3aWR0aCkgPiBtYXhYIHx8IG1heFggPT09IHVuZGVmaW5lZCkge1xuICAgICAgbWF4WCA9IHggKyB3aWR0aDtcbiAgICB9XG4gICAgaWYgKCh5ICsgaGVpZ2h0KSA+IG1heFkgfHwgbWF4WSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBtYXhZID0geSArIGhlaWdodDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgeDogbWluWCxcbiAgICB5OiBtaW5ZLFxuICAgIGhlaWdodDogbWF4WSAtIG1pblksXG4gICAgd2lkdGg6IG1heFggLSBtaW5YXG4gIH07XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBlbGVtZW50cyB0aGF0IGFyZSBlbmNsb3NlZCBmcm9tIHRoZSBib3VuZGluZyBib3guXG4gKlxuICogICAqIElmIGJib3guKHdpZHRofGhlaWdodCkgaXMgbm90IHNwZWNpZmllZCB0aGUgbWV0aG9kIHJldHVybnNcbiAqICAgICBhbGwgZWxlbWVudHMgd2l0aCBlbGVtZW50LngveSA+IGJib3gueC95XG4gKiAgICogSWYgb25seSBiYm94Lnggb3IgYmJveC55IGlzIHNwZWNpZmllZCwgbWV0aG9kIHJldHVybiBhbGwgZWxlbWVudHMgd2l0aFxuICogICAgIGUueCA+IGJib3gueCBvciBlLnkgPiBiYm94LnlcbiAqXG4gKiBAcGFyYW0ge0FycmF5PGRqcy5tb2RlbC5TaGFwZT59IGVsZW1lbnRzIExpc3Qgb2YgRWxlbWVudHMgdG8gc2VhcmNoIHRocm91Z2hcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLlNoYXBlfSBiYm94IHRoZSBlbmNsb3NpbmcgYmJveC5cbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxkanMubW9kZWwuU2hhcGU+fSBlbmNsb3NlZCBlbGVtZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5jbG9zZWRFbGVtZW50cyhlbGVtZW50cywgYmJveCkge1xuXG4gIHZhciBmaWx0ZXJlZEVsZW1lbnRzID0ge307XG5cbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gICAgdmFyIGUgPSBlbGVtZW50O1xuXG4gICAgaWYgKGUud2F5cG9pbnRzKSB7XG4gICAgICBlID0gZ2V0QkJveChlKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzTnVtYmVyKGJib3gueSkgJiYgKGUueCA+IGJib3gueCkpIHtcbiAgICAgIGZpbHRlcmVkRWxlbWVudHNbZWxlbWVudC5pZF0gPSBlbGVtZW50O1xuICAgIH1cbiAgICBpZiAoIWlzTnVtYmVyKGJib3gueCkgJiYgKGUueSA+IGJib3gueSkpIHtcbiAgICAgIGZpbHRlcmVkRWxlbWVudHNbZWxlbWVudC5pZF0gPSBlbGVtZW50O1xuICAgIH1cbiAgICBpZiAoZS54ID4gYmJveC54ICYmIGUueSA+IGJib3gueSkge1xuICAgICAgaWYgKGlzTnVtYmVyKGJib3gud2lkdGgpICYmIGlzTnVtYmVyKGJib3guaGVpZ2h0KSAmJlxuICAgICAgICAgIGUud2lkdGggKyBlLnggPCBiYm94LndpZHRoICsgYmJveC54ICYmXG4gICAgICAgICAgZS5oZWlnaHQgKyBlLnkgPCBiYm94LmhlaWdodCArIGJib3gueSkge1xuXG4gICAgICAgIGZpbHRlcmVkRWxlbWVudHNbZWxlbWVudC5pZF0gPSBlbGVtZW50O1xuICAgICAgfSBlbHNlIGlmICghaXNOdW1iZXIoYmJveC53aWR0aCkgfHwgIWlzTnVtYmVyKGJib3guaGVpZ2h0KSkge1xuICAgICAgICBmaWx0ZXJlZEVsZW1lbnRzW2VsZW1lbnQuaWRdID0gZWxlbWVudDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBmaWx0ZXJlZEVsZW1lbnRzO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlKGVsZW1lbnQpIHtcblxuICBpZiAoJ3dheXBvaW50cycgaW4gZWxlbWVudCkge1xuICAgIHJldHVybiAnY29ubmVjdGlvbic7XG4gIH1cblxuICBpZiAoJ3gnIGluIGVsZW1lbnQpIHtcbiAgICByZXR1cm4gJ3NoYXBlJztcbiAgfVxuXG4gIHJldHVybiAncm9vdCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZyYW1lRWxlbWVudChlbGVtZW50KSB7XG5cbiAgcmV0dXJuICEhKGVsZW1lbnQgJiYgZWxlbWVudC5pc0ZyYW1lKTtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc3JjMSwgc3JjMikge1xuICByZXR1cm4gYXNzaWduKHt9LCBzcmMxIHx8IHt9LCBzcmMyIHx8IHt9KTtcbn0iLCJleHBvcnQge1xuICBkZWZhdWx0IGFzIGVzY2FwZUNTU1xufSBmcm9tICdjc3MuZXNjYXBlJztcblxudmFyIEhUTUxfRVNDQVBFX01BUCA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICAnXFwnJzogJyYjMzk7J1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUhUTUwoc3RyKSB7XG4gIHN0ciA9ICcnICsgc3RyO1xuXG4gIHJldHVybiBzdHIgJiYgc3RyLnJlcGxhY2UoL1smPD5cIiddL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIEhUTUxfRVNDQVBFX01BUFttYXRjaF07XG4gIH0pO1xufVxuIiwiZnVuY3Rpb24gX19zdG9wUHJvcGFnYXRpb24oZXZlbnQpIHtcbiAgaWYgKCFldmVudCB8fCB0eXBlb2YgZXZlbnQuc3RvcFByb3BhZ2F0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9yaWdpbmFsKGV2ZW50KSB7XG4gIHJldHVybiBldmVudC5vcmlnaW5hbEV2ZW50IHx8IGV2ZW50LnNyY0V2ZW50O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wUHJvcGFnYXRpb24oZXZlbnQsIGltbWVkaWF0ZSkge1xuICBfX3N0b3BQcm9wYWdhdGlvbihldmVudCwgaW1tZWRpYXRlKTtcbiAgX19zdG9wUHJvcGFnYXRpb24oZ2V0T3JpZ2luYWwoZXZlbnQpLCBpbW1lZGlhdGUpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiB0b1BvaW50KGV2ZW50KSB7XG5cbiAgaWYgKGV2ZW50LnBvaW50ZXJzICYmIGV2ZW50LnBvaW50ZXJzLmxlbmd0aCkge1xuICAgIGV2ZW50ID0gZXZlbnQucG9pbnRlcnNbMF07XG4gIH1cblxuICBpZiAoZXZlbnQudG91Y2hlcyAmJiBldmVudC50b3VjaGVzLmxlbmd0aCkge1xuICAgIGV2ZW50ID0gZXZlbnQudG91Y2hlc1swXTtcbiAgfVxuXG4gIHJldHVybiBldmVudCA/IHtcbiAgICB4OiBldmVudC5jbGllbnRYLFxuICAgIHk6IGV2ZW50LmNsaWVudFlcbiAgfSA6IG51bGw7XG59IiwiaW1wb3J0IHtcbiAgZXZlcnksXG4gIGlzQXJyYXlcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHNcbiAqXG4gKiBAcGFyYW0gIHtQb2ludH0gIHBcbiAqIEBwYXJhbSAge1BvaW50fSAgcVxuICpcbiAqIEByZXR1cm4ge251bWJlcn0gIGRpc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb2ludERpc3RhbmNlKGEsIGIpIHtcbiAgaWYgKCFhIHx8ICFiKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgcmV0dXJuIE1hdGguc3FydChcbiAgICBNYXRoLnBvdyhhLnggLSBiLngsIDIpICtcbiAgICBNYXRoLnBvdyhhLnkgLSBiLnksIDIpXG4gICk7XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBvaW50IHIgaXMgb24gdGhlIGxpbmUgYmV0d2VlbiBwIGFuZCBxXG4gKlxuICogQHBhcmFtICB7UG9pbnR9ICBwXG4gKiBAcGFyYW0gIHtQb2ludH0gIHFcbiAqIEBwYXJhbSAge1BvaW50fSAgclxuICogQHBhcmFtICB7bnVtYmVyfSBbYWNjdXJhY3k9NV0gYWNjdXJhY3kgZm9yIHBvaW50cyBvbiBsaW5lIGNoZWNrIChsb3dlciBpcyBiZXR0ZXIpXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvaW50c09uTGluZShwLCBxLCByLCBhY2N1cmFjeSkge1xuXG4gIGlmICh0eXBlb2YgYWNjdXJhY3kgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgYWNjdXJhY3kgPSA1O1xuICB9XG5cbiAgaWYgKCFwIHx8ICFxIHx8ICFyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHZhbCA9IChxLnggLSBwLngpICogKHIueSAtIHAueSkgLSAocS55IC0gcC55KSAqIChyLnggLSBwLngpLFxuICAgICAgZGlzdCA9IHBvaW50RGlzdGFuY2UocCwgcSk7XG5cbiAgLy8gQHNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS85MDc0OTEvNDEyMTkwXG4gIHJldHVybiBNYXRoLmFicyh2YWwgLyBkaXN0KSA8PSBhY2N1cmFjeTtcbn1cblxuXG52YXIgQUxJR05FRF9USFJFU0hPTEQgPSAyO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdHdvIHBvaW50cyBhcmUgaG9yaXpvbnRhbGx5IG9yIHZlcnRpY2FsbHkgYWxpZ25lZC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50PnxQb2ludH1cbiAqIEBwYXJhbSB7UG9pbnR9XG4gKlxuICogQHJldHVybiB7c3RyaW5nfGJvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb2ludHNBbGlnbmVkKGEsIGIpIHtcbiAgdmFyIHBvaW50cztcblxuICBpZiAoaXNBcnJheShhKSkge1xuICAgIHBvaW50cyA9IGE7XG4gIH0gZWxzZSB7XG4gICAgcG9pbnRzID0gWyBhLCBiIF07XG4gIH1cblxuICBpZiAocG9pbnRzQWxpZ25lZEhvcml6b250YWxseShwb2ludHMpKSB7XG4gICAgcmV0dXJuICdoJztcbiAgfVxuXG4gIGlmIChwb2ludHNBbGlnbmVkVmVydGljYWxseShwb2ludHMpKSB7XG4gICAgcmV0dXJuICd2JztcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvaW50c0FsaWduZWRIb3Jpem9udGFsbHkoYSwgYikge1xuICB2YXIgcG9pbnRzO1xuXG4gIGlmIChpc0FycmF5KGEpKSB7XG4gICAgcG9pbnRzID0gYTtcbiAgfSBlbHNlIHtcbiAgICBwb2ludHMgPSBbIGEsIGIgXTtcbiAgfVxuXG4gIHZhciBmaXJzdFBvaW50ID0gcG9pbnRzLnNsaWNlKCkuc2hpZnQoKTtcblxuICByZXR1cm4gZXZlcnkocG9pbnRzLCBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBNYXRoLmFicyhmaXJzdFBvaW50LnkgLSBwb2ludC55KSA8PSBBTElHTkVEX1RIUkVTSE9MRDtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb2ludHNBbGlnbmVkVmVydGljYWxseShhLCBiKSB7XG4gIHZhciBwb2ludHM7XG5cbiAgaWYgKGlzQXJyYXkoYSkpIHtcbiAgICBwb2ludHMgPSBhO1xuICB9IGVsc2Uge1xuICAgIHBvaW50cyA9IFsgYSwgYiBdO1xuICB9XG5cbiAgdmFyIGZpcnN0UG9pbnQgPSBwb2ludHMuc2xpY2UoKS5zaGlmdCgpO1xuXG4gIHJldHVybiBldmVyeShwb2ludHMsIGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKGZpcnN0UG9pbnQueCAtIHBvaW50LngpIDw9IEFMSUdORURfVEhSRVNIT0xEO1xuICB9KTtcbn1cblxuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBwb2ludCBwIGlzIGluc2lkZSB0aGUgcmVjdGFuZ2xlIHJlY3RcbiAqXG4gKiBAcGFyYW0gIHtQb2ludH0gIHBcbiAqIEBwYXJhbSAge1JlY3R9IHJlY3RcbiAqIEBwYXJhbSAge251bWJlcn0gdG9sZXJhbmNlXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvaW50SW5SZWN0KHAsIHJlY3QsIHRvbGVyYW5jZSkge1xuICB0b2xlcmFuY2UgPSB0b2xlcmFuY2UgfHwgMDtcblxuICByZXR1cm4gcC54ID4gcmVjdC54IC0gdG9sZXJhbmNlICYmXG4gICAgICAgICBwLnkgPiByZWN0LnkgLSB0b2xlcmFuY2UgJiZcbiAgICAgICAgIHAueCA8IHJlY3QueCArIHJlY3Qud2lkdGggKyB0b2xlcmFuY2UgJiZcbiAgICAgICAgIHAueSA8IHJlY3QueSArIHJlY3QuaGVpZ2h0ICsgdG9sZXJhbmNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBwb2ludCBpbiB0aGUgbWlkZGxlIG9mIHBvaW50cyBwIGFuZCBxXG4gKlxuICogQHBhcmFtICB7UG9pbnR9ICBwXG4gKiBAcGFyYW0gIHtQb2ludH0gIHFcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH0gbWlkZGxlIHBvaW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNaWRQb2ludChwLCBxKSB7XG4gIHJldHVybiB7XG4gICAgeDogTWF0aC5yb3VuZChwLnggKyAoKHEueCAtIHAueCkgLyAyLjApKSxcbiAgICB5OiBNYXRoLnJvdW5kKHAueSArICgocS55IC0gcC55KSAvIDIuMCkpXG4gIH07XG59XG4iLCIvKipcbiAqIFNWR3MgZm9yIGVsZW1lbnRzIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIHtAbGluayBHcmFwaGljc0ZhY3Rvcnl9LlxuICpcbiAqIFRoaXMgdXRpbGl0eSBnaXZlcyBxdWljayBhY2Nlc3MgdG8gdGhlIGltcG9ydGFudCBzZW1hbnRpY1xuICogcGFydHMgb2YgYW4gZWxlbWVudC5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpc3VhbCBwYXJ0IG9mIGEgZGlhZ3JhbSBlbGVtZW50XG4gKlxuICogQHBhcmFtIHtTbmFwPFNWR0VsZW1lbnQ+fSBnZnhcbiAqXG4gKiBAcmV0dXJuIHtTbmFwPFNWR0VsZW1lbnQ+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzdWFsKGdmeCkge1xuICByZXR1cm4gZ2Z4LmNoaWxkTm9kZXNbMF07XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGRyZW4gZm9yIGEgZ2l2ZW4gZGlhZ3JhbSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7U25hcDxTVkdFbGVtZW50Pn0gZ2Z4XG4gKiBAcmV0dXJuIHtTbmFwPFNWR0VsZW1lbnQ+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRyZW4oZ2Z4KSB7XG4gIHJldHVybiBnZngucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzFdO1xufSIsIi8qKlxuICogVXRpbCB0aGF0IHByb3ZpZGVzIHVuaXF1ZSBJRHMuXG4gKlxuICogQGNsYXNzIGRqcy51dGlsLklkR2VuZXJhdG9yXG4gKiBAY29uc3RydWN0b3JcbiAqIEBtZW1iZXJPZiBkanMudXRpbFxuICpcbiAqIFRoZSBpZHMgY2FuIGJlIGN1c3RvbWl6ZWQgdmlhIGEgZ2l2ZW4gcHJlZml4IGFuZCBjb250YWluIGEgcmFuZG9tIHZhbHVlIHRvIGF2b2lkIGNvbGxpc2lvbnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCBhIHByZWZpeCB0byBwcmVwZW5kIHRvIGdlbmVyYXRlZCBpZHMgKGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIElkR2VuZXJhdG9yKHByZWZpeCkge1xuXG4gIHRoaXMuX2NvdW50ZXIgPSAwO1xuICB0aGlzLl9wcmVmaXggPSAocHJlZml4ID8gcHJlZml4ICsgJy0nIDogJycpICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwMCkgKyAnLSc7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIG5leHQgdW5pcXVlIElELlxuICpcbiAqIEBtZXRob2QgZGpzLnV0aWwuSWRHZW5lcmF0b3IjbmV4dFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBpZFxuICovXG5JZEdlbmVyYXRvci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fcHJlZml4ICsgKCsrdGhpcy5fY291bnRlcik7XG59O1xuIiwiaW1wb3J0IHtcbiAgcG9pbnREaXN0YW5jZVxufSBmcm9tICcuL0dlb21ldHJ5JztcblxuaW1wb3J0IGludGVyc2VjdFBhdGhzIGZyb20gJ3BhdGgtaW50ZXJzZWN0aW9uJztcblxudmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICBtYXggPSBNYXRoLm1heDtcblxuXG5mdW5jdGlvbiBjaXJjbGVQYXRoKGNlbnRlciwgcikge1xuICB2YXIgeCA9IGNlbnRlci54LFxuICAgICAgeSA9IGNlbnRlci55O1xuXG4gIHJldHVybiBbXG4gICAgWydNJywgeCwgeV0sXG4gICAgWydtJywgMCwgLXJdLFxuICAgIFsnYScsIHIsIHIsIDAsIDEsIDEsIDAsIDIgKiByXSxcbiAgICBbJ2EnLCByLCByLCAwLCAxLCAxLCAwLCAtMiAqIHJdLFxuICAgIFsneiddXG4gIF07XG59XG5cbmZ1bmN0aW9uIGxpbmVQYXRoKHBvaW50cykge1xuICB2YXIgc2VnbWVudHMgPSBbXTtcblxuICBwb2ludHMuZm9yRWFjaChmdW5jdGlvbihwLCBpZHgpIHtcbiAgICBzZWdtZW50cy5wdXNoKFsgaWR4ID09PSAwID8gJ00nIDogJ0wnLCBwLngsIHAueSBdKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHNlZ21lbnRzO1xufVxuXG5cbnZhciBJTlRFUlNFQ1RJT05fVEhSRVNIT0xEID0gMTA7XG5cbmZ1bmN0aW9uIGdldEJlbmRwb2ludEludGVyc2VjdGlvbih3YXlwb2ludHMsIHJlZmVyZW5jZSkge1xuXG4gIHZhciBpLCB3O1xuXG4gIGZvciAoaSA9IDA7ICh3ID0gd2F5cG9pbnRzW2ldKTsgaSsrKSB7XG5cbiAgICBpZiAocG9pbnREaXN0YW5jZSh3LCByZWZlcmVuY2UpIDw9IElOVEVSU0VDVElPTl9USFJFU0hPTEQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBvaW50OiB3YXlwb2ludHNbaV0sXG4gICAgICAgIGJlbmRwb2ludDogdHJ1ZSxcbiAgICAgICAgaW5kZXg6IGlcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFBhdGhJbnRlcnNlY3Rpb24od2F5cG9pbnRzLCByZWZlcmVuY2UpIHtcblxuICB2YXIgaW50ZXJzZWN0aW9ucyA9IGludGVyc2VjdFBhdGhzKGNpcmNsZVBhdGgocmVmZXJlbmNlLCBJTlRFUlNFQ1RJT05fVEhSRVNIT0xEKSwgbGluZVBhdGgod2F5cG9pbnRzKSk7XG5cbiAgdmFyIGEgPSBpbnRlcnNlY3Rpb25zWzBdLFxuICAgICAgYiA9IGludGVyc2VjdGlvbnNbaW50ZXJzZWN0aW9ucy5sZW5ndGggLSAxXSxcbiAgICAgIGlkeDtcblxuICBpZiAoIWEpIHtcblxuICAgIC8vIG5vIGludGVyc2VjdGlvblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGEgIT09IGIpIHtcblxuICAgIGlmIChhLnNlZ21lbnQyICE9PSBiLnNlZ21lbnQyKSB7XG5cbiAgICAgIC8vIHdlIHVzZSB0aGUgYmVuZHBvaW50IGluIGJldHdlZW4gYm90aCBzZWdtZW50c1xuICAgICAgLy8gYXMgdGhlIGludGVyc2VjdGlvbiBwb2ludFxuXG4gICAgICBpZHggPSBtYXgoYS5zZWdtZW50MiwgYi5zZWdtZW50MikgLSAxO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBwb2ludDogd2F5cG9pbnRzW2lkeF0sXG4gICAgICAgIGJlbmRwb2ludDogdHJ1ZSxcbiAgICAgICAgaW5kZXg6IGlkeFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcG9pbnQ6IHtcbiAgICAgICAgeDogKHJvdW5kKGEueCArIGIueCkgLyAyKSxcbiAgICAgICAgeTogKHJvdW5kKGEueSArIGIueSkgLyAyKVxuICAgICAgfSxcbiAgICAgIGluZGV4OiBhLnNlZ21lbnQyXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcG9pbnQ6IHtcbiAgICAgIHg6IHJvdW5kKGEueCksXG4gICAgICB5OiByb3VuZChhLnkpXG4gICAgfSxcbiAgICBpbmRleDogYS5zZWdtZW50MlxuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNsb3Nlc3QgcG9pbnQgb24gdGhlIGNvbm5lY3Rpb24gdG93YXJkcyBhIGdpdmVuIHJlZmVyZW5jZSBwb2ludC5cbiAqXG4gKiBAcGFyYW0gIHtBcnJheTxQb2ludD59IHdheXBvaW50c1xuICogQHBhcmFtICB7UG9pbnR9IHJlZmVyZW5jZVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gaW50ZXJzZWN0aW9uIGRhdGEgKHNlZ21lbnQsIHBvaW50KVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwcm94SW50ZXJzZWN0aW9uKHdheXBvaW50cywgcmVmZXJlbmNlKSB7XG4gIHJldHVybiBnZXRCZW5kcG9pbnRJbnRlcnNlY3Rpb24od2F5cG9pbnRzLCByZWZlcmVuY2UpIHx8IGdldFBhdGhJbnRlcnNlY3Rpb24od2F5cG9pbnRzLCByZWZlcmVuY2UpO1xufVxuIiwiLyoqXG4gKiBHZXQgdGhlIGxvZ2FyaXRobSBvZiB4IHdpdGggYmFzZSAxMFxuICogQHBhcmFtICB7SW50ZWdlcn0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZzEwKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5sb2coMTApO1xufVxuXG5leHBvcnQgeyBkZWx0YSBhcyBzdWJzdHJhY3QgfSBmcm9tICcuL1Bvc2l0aW9uVXRpbCc7XG4iLCJpbXBvcnQge1xuICBnZXRPcmlnaW5hbCBhcyBnZXRPcmlnaW5hbEV2ZW50XG59IGZyb20gJy4vRXZlbnQnO1xuXG5pbXBvcnQge1xuICBpc01hY1xufSBmcm9tICcuL1BsYXRmb3JtJztcblxuZXhwb3J0IHtcbiAgaXNNYWNcbn0gZnJvbSAnLi9QbGF0Zm9ybSc7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJpbWFyeUJ1dHRvbihldmVudCkge1xuXG4gIC8vIGJ1dHRvbiA9PT0gMCAtPiBsZWZ0IMOha2EgcHJpbWFyeSBtb3VzZSBidXR0b25cbiAgcmV0dXJuICEoZ2V0T3JpZ2luYWxFdmVudChldmVudCkgfHwgZXZlbnQpLmJ1dHRvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ByaW1hcnlNb2RpZmllcihldmVudCkge1xuICB2YXIgb3JpZ2luYWxFdmVudCA9IGdldE9yaWdpbmFsRXZlbnQoZXZlbnQpIHx8IGV2ZW50O1xuXG4gIGlmICghaXNQcmltYXJ5QnV0dG9uKGV2ZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFVzZSBhbHQgYXMgcHJpbWFyeSBtb2RpZmllciBrZXkgZm9yIG1hYyBPU1xuICBpZiAoaXNNYWMoKSkge1xuICAgIHJldHVybiBvcmlnaW5hbEV2ZW50Lm1ldGFLZXk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9yaWdpbmFsRXZlbnQuY3RybEtleTtcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNTZWNvbmRhcnlNb2RpZmllcihldmVudCkge1xuICB2YXIgb3JpZ2luYWxFdmVudCA9IGdldE9yaWdpbmFsRXZlbnQoZXZlbnQpIHx8IGV2ZW50O1xuXG4gIHJldHVybiBpc1ByaW1hcnlCdXR0b24oZXZlbnQpICYmIG9yaWdpbmFsRXZlbnQuc2hpZnRLZXk7XG59IiwiZXhwb3J0IGZ1bmN0aW9uIGlzTWFjKCkge1xuICByZXR1cm4gKC9tYWMvaSkudGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pO1xufSIsImV4cG9ydCBmdW5jdGlvbiBjZW50ZXIoYm91bmRzKSB7XG4gIHJldHVybiB7XG4gICAgeDogYm91bmRzLnggKyAoYm91bmRzLndpZHRoIC8gMiksXG4gICAgeTogYm91bmRzLnkgKyAoYm91bmRzLmhlaWdodCAvIDIpXG4gIH07XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGRlbHRhKGEsIGIpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBhLnggLSBiLngsXG4gICAgeTogYS55IC0gYi55XG4gIH07XG59IiwiLyoqXG4gKiBSZW1vdmUgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGEgY29sbGVjdGlvbiB1bnRpbCBpdCBpcyBlbXB0eS5cbiAqXG4gKiBUaGlzIGlzIGEgbnVsbC1zYWZlIG9wZXJhdGlvbiB0aGF0IGVuc3VyZXMgZWxlbWVudHNcbiAqIGFyZSBiZWluZyByZW1vdmVkIGZyb20gdGhlIGdpdmVuIGNvbGxlY3Rpb24gdW50aWwgdGhlXG4gKiBjb2xsZWN0aW9uIGlzIGVtcHR5LlxuICpcbiAqIFRoZSBpbXBsZW1lbnRhdGlvbiBkZWFscyB3aXRoIHRoZSBmYWN0IHRoYXQgYSByZW1vdmUgb3BlcmF0aW9uXG4gKiBtYXkgdG91Y2gsIGkuZS4gcmVtb3ZlIG11bHRpcGxlIGVsZW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uXG4gKiBhdCBhIHRpbWUuXG4gKlxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBbY29sbGVjdGlvbl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlbW92ZUZuXG4gKlxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gdGhlIGNsZWFyZWQgY29sbGVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUNsZWFyKGNvbGxlY3Rpb24sIHJlbW92ZUZuKSB7XG5cbiAgaWYgKHR5cGVvZiByZW1vdmVGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVtb3ZlRm4gaXRlcmF0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAoIWNvbGxlY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZTtcblxuICB3aGlsZSAoKGUgPSBjb2xsZWN0aW9uWzBdKSkge1xuICAgIHJlbW92ZUZuKGUpO1xuICB9XG5cbiAgcmV0dXJuIGNvbGxlY3Rpb247XG59XG4iLCJpbXBvcnQge1xuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wb25lbnRzVG9QYXRoKGVsZW1lbnRzKSB7XG4gIHJldHVybiBlbGVtZW50cy5qb2luKCcsJykucmVwbGFjZSgvLD8oW0Etel0pLD8vZywgJyQxJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1NWR1BvaW50cyhwb2ludHMpIHtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuXG4gIGZvciAodmFyIGkgPSAwLCBwOyAocCA9IHBvaW50c1tpXSk7IGkrKykge1xuICAgIHJlc3VsdCArPSBwLnggKyAnLCcgKyBwLnkgKyAnICc7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGluZShwb2ludHMsIGF0dHJzKSB7XG5cbiAgdmFyIGxpbmUgPSBzdmdDcmVhdGUoJ3BvbHlsaW5lJyk7XG4gIHN2Z0F0dHIobGluZSwgeyBwb2ludHM6IHRvU1ZHUG9pbnRzKHBvaW50cykgfSk7XG5cbiAgaWYgKGF0dHJzKSB7XG4gICAgc3ZnQXR0cihsaW5lLCBhdHRycyk7XG4gIH1cblxuICByZXR1cm4gbGluZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUxpbmUoZ2Z4LCBwb2ludHMpIHtcbiAgc3ZnQXR0cihnZngsIHsgcG9pbnRzOiB0b1NWR1BvaW50cyhwb2ludHMpIH0pO1xuXG4gIHJldHVybiBnZng7XG59XG4iLCJpbXBvcnQge1xyXG4gIHRyYW5zZm9ybSBhcyBzdmdUcmFuc2Zvcm0sXHJcbiAgY3JlYXRlVHJhbnNmb3JtXHJcbn0gZnJvbSAndGlueS1zdmcnO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gezxTVkdFbGVtZW50Pn0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcclxuICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybShnZngsIHgsIHksIGFuZ2xlLCBhbW91bnQpIHtcclxuICB2YXIgdHJhbnNsYXRlID0gY3JlYXRlVHJhbnNmb3JtKCk7XHJcbiAgdHJhbnNsYXRlLnNldFRyYW5zbGF0ZSh4LCB5KTtcclxuXHJcbiAgdmFyIHJvdGF0ZSA9IGNyZWF0ZVRyYW5zZm9ybSgpO1xyXG4gIHJvdGF0ZS5zZXRSb3RhdGUoYW5nbGUgfHwgMCwgMCwgMCk7XHJcblxyXG4gIHZhciBzY2FsZSA9IGNyZWF0ZVRyYW5zZm9ybSgpO1xyXG4gIHNjYWxlLnNldFNjYWxlKGFtb3VudCB8fCAxLCBhbW91bnQgfHwgMSk7XHJcblxyXG4gIHN2Z1RyYW5zZm9ybShnZngsIFsgdHJhbnNsYXRlLCByb3RhdGUsIHNjYWxlIF0pO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZShnZngsIHgsIHkpIHtcclxuICB2YXIgdHJhbnNsYXRlID0gY3JlYXRlVHJhbnNmb3JtKCk7XHJcbiAgdHJhbnNsYXRlLnNldFRyYW5zbGF0ZSh4LCB5KTtcclxuXHJcbiAgc3ZnVHJhbnNmb3JtKGdmeCwgdHJhbnNsYXRlKTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGVsZW1lbnRcclxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlKGdmeCwgYW5nbGUpIHtcclxuICB2YXIgcm90YXRlID0gY3JlYXRlVHJhbnNmb3JtKCk7XHJcbiAgcm90YXRlLnNldFJvdGF0ZShhbmdsZSwgMCwgMCk7XHJcblxyXG4gIHN2Z1RyYW5zZm9ybShnZngsIHJvdGF0ZSk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogQHBhcmFtIHtTVkdFbGVtZW50fSBlbGVtZW50XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzY2FsZShnZngsIGFtb3VudCkge1xyXG4gIHZhciBzY2FsZSA9IGNyZWF0ZVRyYW5zZm9ybSgpO1xyXG4gIHNjYWxlLnNldFNjYWxlKGFtb3VudCwgYW1vdW50KTtcclxuXHJcbiAgc3ZnVHJhbnNmb3JtKGdmeCwgc2NhbGUpO1xyXG59IiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGFzc2lnbixcbiAgZm9yRWFjaCxcbiAgcmVkdWNlXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxudmFyIERFRkFVTFRfQk9YX1BBRERJTkcgPSAwO1xuXG52YXIgREVGQVVMVF9MQUJFTF9TSVpFID0ge1xuICB3aWR0aDogMTUwLFxuICBoZWlnaHQ6IDUwXG59O1xuXG5cbmZ1bmN0aW9uIHBhcnNlQWxpZ24oYWxpZ24pIHtcblxuICB2YXIgcGFydHMgPSBhbGlnbi5zcGxpdCgnLScpO1xuXG4gIHJldHVybiB7XG4gICAgaG9yaXpvbnRhbDogcGFydHNbMF0gfHwgJ2NlbnRlcicsXG4gICAgdmVydGljYWw6IHBhcnRzWzFdIHx8ICd0b3AnXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFkZGluZyhwYWRkaW5nKSB7XG5cbiAgaWYgKGlzT2JqZWN0KHBhZGRpbmcpKSB7XG4gICAgcmV0dXJuIGFzc2lnbih7IHRvcDogMCwgbGVmdDogMCwgcmlnaHQ6IDAsIGJvdHRvbTogMCB9LCBwYWRkaW5nKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiBwYWRkaW5nLFxuICAgICAgbGVmdDogcGFkZGluZyxcbiAgICAgIHJpZ2h0OiBwYWRkaW5nLFxuICAgICAgYm90dG9tOiBwYWRkaW5nXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUZXh0QkJveCh0ZXh0LCBmYWtlVGV4dCkge1xuXG4gIGZha2VUZXh0LnRleHRDb250ZW50ID0gdGV4dDtcblxuICB2YXIgdGV4dEJCb3g7XG5cbiAgdHJ5IHtcbiAgICB2YXIgYmJveCxcbiAgICAgICAgZW1wdHlMaW5lID0gdGV4dCA9PT0gJyc7XG5cbiAgICAvLyBhZGQgZHVtbXkgdGV4dCwgd2hlbiBsaW5lIGlzIGVtcHR5IHRvXG4gICAgLy8gZGV0ZXJtaW5lIGNvcnJlY3QgaGVpZ2h0XG4gICAgZmFrZVRleHQudGV4dENvbnRlbnQgPSBlbXB0eUxpbmUgPyAnZHVtbXknIDogdGV4dDtcblxuICAgIHRleHRCQm94ID0gZmFrZVRleHQuZ2V0QkJveCgpO1xuXG4gICAgLy8gdGFrZSB0ZXh0IHJlbmRlcmluZyByZWxhdGVkIGhvcml6b250YWxcbiAgICAvLyBwYWRkaW5nIGludG8gYWNjb3VudFxuICAgIGJib3ggPSB7XG4gICAgICB3aWR0aDogdGV4dEJCb3gud2lkdGggKyB0ZXh0QkJveC54ICogMixcbiAgICAgIGhlaWdodDogdGV4dEJCb3guaGVpZ2h0XG4gICAgfTtcblxuICAgIGlmIChlbXB0eUxpbmUpIHtcblxuICAgICAgLy8gY29ycmVjdCB3aWR0aFxuICAgICAgYmJveC53aWR0aCA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJib3g7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG4gIH1cbn1cblxuXG4vKipcbiAqIExheW91dCB0aGUgbmV4dCBsaW5lIGFuZCByZXR1cm4gdGhlIGxheW91dGVkIGVsZW1lbnQuXG4gKlxuICogQWx0ZXJzIHRoZSBsaW5lcyBwYXNzZWQuXG4gKlxuICogQHBhcmFtICB7QXJyYXk8c3RyaW5nPn0gbGluZXNcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIGxpbmUgZGVzY3JpcHRvciwgYW4gb2JqZWN0IHsgd2lkdGgsIGhlaWdodCwgdGV4dCB9XG4gKi9cbmZ1bmN0aW9uIGxheW91dE5leHQobGluZXMsIG1heFdpZHRoLCBmYWtlVGV4dCkge1xuXG4gIHZhciBvcmlnaW5hbExpbmUgPSBsaW5lcy5zaGlmdCgpLFxuICAgICAgZml0TGluZSA9IG9yaWdpbmFsTGluZTtcblxuICB2YXIgdGV4dEJCb3g7XG5cbiAgZm9yICg7Oykge1xuICAgIHRleHRCQm94ID0gZ2V0VGV4dEJCb3goZml0TGluZSwgZmFrZVRleHQpO1xuXG4gICAgdGV4dEJCb3gud2lkdGggPSBmaXRMaW5lID8gdGV4dEJCb3gud2lkdGggOiAwO1xuXG4gICAgLy8gdHJ5IHRvIGZpdFxuICAgIGlmIChmaXRMaW5lID09PSAnICcgfHwgZml0TGluZSA9PT0gJycgfHwgdGV4dEJCb3gud2lkdGggPCBNYXRoLnJvdW5kKG1heFdpZHRoKSB8fCBmaXRMaW5lLmxlbmd0aCA8IDIpIHtcbiAgICAgIHJldHVybiBmaXQobGluZXMsIGZpdExpbmUsIG9yaWdpbmFsTGluZSwgdGV4dEJCb3gpO1xuICAgIH1cblxuICAgIGZpdExpbmUgPSBzaG9ydGVuTGluZShmaXRMaW5lLCB0ZXh0QkJveC53aWR0aCwgbWF4V2lkdGgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpdChsaW5lcywgZml0TGluZSwgb3JpZ2luYWxMaW5lLCB0ZXh0QkJveCkge1xuICBpZiAoZml0TGluZS5sZW5ndGggPCBvcmlnaW5hbExpbmUubGVuZ3RoKSB7XG4gICAgdmFyIHJlbWFpbmRlciA9IG9yaWdpbmFsTGluZS5zbGljZShmaXRMaW5lLmxlbmd0aCkudHJpbSgpO1xuXG4gICAgbGluZXMudW5zaGlmdChyZW1haW5kZXIpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogdGV4dEJCb3gud2lkdGgsXG4gICAgaGVpZ2h0OiB0ZXh0QkJveC5oZWlnaHQsXG4gICAgdGV4dDogZml0TGluZVxuICB9O1xufVxuXG5cbi8qKlxuICogU2hvcnRlbnMgYSBsaW5lIGJhc2VkIG9uIHNwYWNpbmcgYW5kIGh5cGhlbnMuXG4gKiBSZXR1cm5zIHRoZSBzaG9ydGVuZWQgcmVzdWx0IG9uIHN1Y2Nlc3MuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBsaW5lXG4gKiBAcGFyYW0gIHtudW1iZXJ9IG1heExlbmd0aCB0aGUgbWF4aW11bSBjaGFyYWN0ZXJzIG9mIHRoZSBzdHJpbmdcbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIHNob3J0ZW5lZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gc2VtYW50aWNTaG9ydGVuKGxpbmUsIG1heExlbmd0aCkge1xuICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KC8oXFxzfC0pL2cpLFxuICAgICAgcGFydCxcbiAgICAgIHNob3J0ZW5lZFBhcnRzID0gW10sXG4gICAgICBsZW5ndGggPSAwO1xuXG4gIC8vIHRyeSB0byBzaG9ydGVuIHZpYSBzcGFjZXMgKyBoeXBoZW5zXG4gIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgd2hpbGUgKChwYXJ0ID0gcGFydHMuc2hpZnQoKSkpIHtcbiAgICAgIGlmIChwYXJ0Lmxlbmd0aCArIGxlbmd0aCA8IG1heExlbmd0aCkge1xuICAgICAgICBzaG9ydGVuZWRQYXJ0cy5wdXNoKHBhcnQpO1xuICAgICAgICBsZW5ndGggKz0gcGFydC5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIC8vIHJlbW92ZSBwcmV2aW91cyBwYXJ0LCB0b28gaWYgaHlwaGVuIGRvZXMgbm90IGZpdCBhbnltb3JlXG4gICAgICAgIGlmIChwYXJ0ID09PSAnLScpIHtcbiAgICAgICAgICBzaG9ydGVuZWRQYXJ0cy5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzaG9ydGVuZWRQYXJ0cy5qb2luKCcnKTtcbn1cblxuXG5mdW5jdGlvbiBzaG9ydGVuTGluZShsaW5lLCB3aWR0aCwgbWF4V2lkdGgpIHtcbiAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGxpbmUubGVuZ3RoICogKG1heFdpZHRoIC8gd2lkdGgpLCAxKTtcblxuICAvLyB0cnkgdG8gc2hvcnRlbiBzZW1hbnRpY2FsbHkgKGkuZS4gYmFzZWQgb24gc3BhY2VzIGFuZCBoeXBoZW5zKVxuICB2YXIgc2hvcnRlbmVkTGluZSA9IHNlbWFudGljU2hvcnRlbihsaW5lLCBsZW5ndGgpO1xuXG4gIGlmICghc2hvcnRlbmVkTGluZSkge1xuXG4gICAgLy8gZm9yY2Ugc2hvcnRlbiBieSBjdXR0aW5nIHRoZSBsb25nIHdvcmRcbiAgICBzaG9ydGVuZWRMaW5lID0gbGluZS5zbGljZSgwLCBNYXRoLm1heChNYXRoLnJvdW5kKGxlbmd0aCAtIDEpLCAxKSk7XG4gIH1cblxuICByZXR1cm4gc2hvcnRlbmVkTGluZTtcbn1cblxuXG5mdW5jdGlvbiBnZXRIZWxwZXJTdmcoKSB7XG4gIHZhciBoZWxwZXJTdmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGVscGVyLXN2ZycpO1xuXG4gIGlmICghaGVscGVyU3ZnKSB7XG4gICAgaGVscGVyU3ZnID0gc3ZnQ3JlYXRlKCdzdmcnKTtcblxuICAgIHN2Z0F0dHIoaGVscGVyU3ZnLCB7XG4gICAgICBpZDogJ2hlbHBlci1zdmcnLFxuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBzdHlsZTogJ3Zpc2liaWxpdHk6IGhpZGRlbjsgcG9zaXRpb246IGZpeGVkJ1xuICAgIH0pO1xuXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoZWxwZXJTdmcpO1xuICB9XG5cbiAgcmV0dXJuIGhlbHBlclN2Zztcbn1cblxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgbGFiZWwgdXRpbGl0eVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWdcbiAqIEBwYXJhbSB7RGltZW5zaW9uc30gY29uZmlnLnNpemVcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb25maWcucGFkZGluZ1xuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZy5zdHlsZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5hbGlnblxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUZXh0KGNvbmZpZykge1xuXG4gIHRoaXMuX2NvbmZpZyA9IGFzc2lnbih7fSwge1xuICAgIHNpemU6IERFRkFVTFRfTEFCRUxfU0laRSxcbiAgICBwYWRkaW5nOiBERUZBVUxUX0JPWF9QQURESU5HLFxuICAgIHN0eWxlOiB7fSxcbiAgICBhbGlnbjogJ2NlbnRlci10b3AnXG4gIH0sIGNvbmZpZyB8fCB7fSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbGF5b3V0ZWQgdGV4dCBhcyBhbiBTVkcgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuIHtTVkdFbGVtZW50fVxuICovXG5UZXh0LnByb3RvdHlwZS5jcmVhdGVUZXh0ID0gZnVuY3Rpb24odGV4dCwgb3B0aW9ucykge1xuICByZXR1cm4gdGhpcy5sYXlvdXRUZXh0KHRleHQsIG9wdGlvbnMpLmVsZW1lbnQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBsYWJlbHMgbGF5b3V0ZWQgZGltZW5zaW9ucy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCB0byBsYXlvdXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKlxuICogQHJldHVybiB7RGltZW5zaW9uc31cbiAqL1xuVGV4dC5wcm90b3R5cGUuZ2V0RGltZW5zaW9ucyA9IGZ1bmN0aW9uKHRleHQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRoaXMubGF5b3V0VGV4dCh0ZXh0LCBvcHRpb25zKS5kaW1lbnNpb25zO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEgbGFiZWwgYW5kIGl0cyBib3VuZGluZyBib3guXG4gKlxuICogQG1ldGhvZCBUZXh0I2NyZWF0ZVRleHRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCB0aGUgdGV4dCB0byByZW5kZXIgb24gdGhlIGxhYmVsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuYWxpZ24gaG93IHRvIGFsaWduIGluIHRoZSBib3VuZGluZyBib3guXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbnkgb2YgeyAnY2VudGVyLW1pZGRsZScsICdjZW50ZXItdG9wJyB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHMgdG8gJ2NlbnRlci10b3AnLlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuc3R5bGUgc3R5bGUgdG8gYmUgYXBwbGllZCB0byB0aGUgdGV4dFxuICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLmZpdEJveCBpbmRpY2F0ZXMgaWYgYm94IHdpbGwgYmUgcmVjYWxjdWxhdGVkIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpdCB0ZXh0XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB7IGVsZW1lbnQsIGRpbWVuc2lvbnMgfVxuICovXG5UZXh0LnByb3RvdHlwZS5sYXlvdXRUZXh0ID0gZnVuY3Rpb24odGV4dCwgb3B0aW9ucykge1xuICB2YXIgYm94ID0gYXNzaWduKHt9LCB0aGlzLl9jb25maWcuc2l6ZSwgb3B0aW9ucy5ib3gpLFxuICAgICAgc3R5bGUgPSBhc3NpZ24oe30sIHRoaXMuX2NvbmZpZy5zdHlsZSwgb3B0aW9ucy5zdHlsZSksXG4gICAgICBhbGlnbiA9IHBhcnNlQWxpZ24ob3B0aW9ucy5hbGlnbiB8fCB0aGlzLl9jb25maWcuYWxpZ24pLFxuICAgICAgcGFkZGluZyA9IHBhcnNlUGFkZGluZyhvcHRpb25zLnBhZGRpbmcgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMucGFkZGluZyA6IHRoaXMuX2NvbmZpZy5wYWRkaW5nKSxcbiAgICAgIGZpdEJveCA9IG9wdGlvbnMuZml0Qm94IHx8IGZhbHNlO1xuXG4gIHZhciBsaW5lSGVpZ2h0ID0gZ2V0TGluZUhlaWdodChzdHlsZSk7XG5cbiAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgvXFxyP1xcbi9nKSxcbiAgICAgIGxheW91dGVkID0gW107XG5cbiAgdmFyIG1heFdpZHRoID0gYm94LndpZHRoIC0gcGFkZGluZy5sZWZ0IC0gcGFkZGluZy5yaWdodDtcblxuICAvLyBlbnN1cmUgY29ycmVjdCByZW5kZXJpbmcgYnkgYXR0YWNoaW5nIGhlbHBlciB0ZXh0IG5vZGUgdG8gaW52aXNpYmxlIFNWR1xuICB2YXIgaGVscGVyVGV4dCA9IHN2Z0NyZWF0ZSgndGV4dCcpO1xuICBzdmdBdHRyKGhlbHBlclRleHQsIHsgeDogMCwgeTogMCB9KTtcbiAgc3ZnQXR0cihoZWxwZXJUZXh0LCBzdHlsZSk7XG5cbiAgdmFyIGhlbHBlclN2ZyA9IGdldEhlbHBlclN2ZygpO1xuXG4gIHN2Z0FwcGVuZChoZWxwZXJTdmcsIGhlbHBlclRleHQpO1xuXG4gIHdoaWxlIChsaW5lcy5sZW5ndGgpIHtcbiAgICBsYXlvdXRlZC5wdXNoKGxheW91dE5leHQobGluZXMsIG1heFdpZHRoLCBoZWxwZXJUZXh0KSk7XG4gIH1cblxuICBpZiAoYWxpZ24udmVydGljYWwgPT09ICdtaWRkbGUnKSB7XG4gICAgcGFkZGluZy50b3AgPSBwYWRkaW5nLmJvdHRvbSA9IDA7XG4gIH1cblxuICB2YXIgdG90YWxIZWlnaHQgPSByZWR1Y2UobGF5b3V0ZWQsIGZ1bmN0aW9uKHN1bSwgbGluZSwgaWR4KSB7XG4gICAgcmV0dXJuIHN1bSArIChsaW5lSGVpZ2h0IHx8IGxpbmUuaGVpZ2h0KTtcbiAgfSwgMCkgKyBwYWRkaW5nLnRvcCArIHBhZGRpbmcuYm90dG9tO1xuXG4gIHZhciBtYXhMaW5lV2lkdGggPSByZWR1Y2UobGF5b3V0ZWQsIGZ1bmN0aW9uKHN1bSwgbGluZSwgaWR4KSB7XG4gICAgcmV0dXJuIGxpbmUud2lkdGggPiBzdW0gPyBsaW5lLndpZHRoIDogc3VtO1xuICB9LCAwKTtcblxuICAvLyB0aGUgeSBwb3NpdGlvbiBvZiB0aGUgbmV4dCBsaW5lXG4gIHZhciB5ID0gcGFkZGluZy50b3A7XG5cbiAgaWYgKGFsaWduLnZlcnRpY2FsID09PSAnbWlkZGxlJykge1xuICAgIHkgKz0gKGJveC5oZWlnaHQgLSB0b3RhbEhlaWdodCkgLyAyO1xuICB9XG5cbiAgLy8gbWFnaWMgbnVtYmVyIGluaXRpYWwgb2Zmc2V0XG4gIHkgLT0gKGxpbmVIZWlnaHQgfHwgbGF5b3V0ZWRbMF0uaGVpZ2h0KSAvIDQ7XG5cblxuICB2YXIgdGV4dEVsZW1lbnQgPSBzdmdDcmVhdGUoJ3RleHQnKTtcblxuICBzdmdBdHRyKHRleHRFbGVtZW50LCBzdHlsZSk7XG5cbiAgLy8gbGF5b3V0IGVhY2ggbGluZSB0YWtpbmcgaW50byBhY2NvdW50IHRoYXQgcGFyZW50XG4gIC8vIHNoYXBlIG1pZ2h0IHJlc2l6ZSB0byBmaXQgdGV4dCBzaXplXG4gIGZvckVhY2gobGF5b3V0ZWQsIGZ1bmN0aW9uKGxpbmUpIHtcblxuICAgIHZhciB4O1xuXG4gICAgeSArPSAobGluZUhlaWdodCB8fCBsaW5lLmhlaWdodCk7XG5cbiAgICBzd2l0Y2ggKGFsaWduLmhvcml6b250YWwpIHtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHggPSBwYWRkaW5nLmxlZnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHggPSAoKGZpdEJveCA/IG1heExpbmVXaWR0aCA6IG1heFdpZHRoKVxuICAgICAgICAtIHBhZGRpbmcucmlnaHQgLSBsaW5lLndpZHRoKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcblxuICAgICAgLy8gYWthIGNlbnRlclxuICAgICAgeCA9IE1hdGgubWF4KCgoKGZpdEJveCA/IG1heExpbmVXaWR0aCA6IG1heFdpZHRoKVxuICAgICAgICAtIGxpbmUud2lkdGgpIC8gMiArIHBhZGRpbmcubGVmdCksIDApO1xuICAgIH1cblxuICAgIHZhciB0c3BhbiA9IHN2Z0NyZWF0ZSgndHNwYW4nKTtcbiAgICBzdmdBdHRyKHRzcGFuLCB7IHg6IHgsIHk6IHkgfSk7XG5cbiAgICB0c3Bhbi50ZXh0Q29udGVudCA9IGxpbmUudGV4dDtcblxuICAgIHN2Z0FwcGVuZCh0ZXh0RWxlbWVudCwgdHNwYW4pO1xuICB9KTtcblxuICBzdmdSZW1vdmUoaGVscGVyVGV4dCk7XG5cbiAgdmFyIGRpbWVuc2lvbnMgPSB7XG4gICAgd2lkdGg6IG1heExpbmVXaWR0aCxcbiAgICBoZWlnaHQ6IHRvdGFsSGVpZ2h0XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBkaW1lbnNpb25zOiBkaW1lbnNpb25zLFxuICAgIGVsZW1lbnQ6IHRleHRFbGVtZW50XG4gIH07XG59O1xuXG5cbmZ1bmN0aW9uIGdldExpbmVIZWlnaHQoc3R5bGUpIHtcbiAgaWYgKCdmb250U2l6ZScgaW4gc3R5bGUgJiYgJ2xpbmVIZWlnaHQnIGluIHN0eWxlKSB7XG4gICAgcmV0dXJuIHN0eWxlLmxpbmVIZWlnaHQgKiBwYXJzZUludChzdHlsZS5mb250U2l6ZSwgMTApO1xuICB9XG59IiwiaW1wb3J0IHsgaXNTdHJpbmcsIGFzc2lnbiB9IGZyb20gJ21pbi1kYXNoJztcbmltcG9ydCB7IE1vZGRsZSB9IGZyb20gJ21vZGRsZSc7XG5pbXBvcnQgeyBSZWFkZXIsIFdyaXRlciB9IGZyb20gJ21vZGRsZS14bWwnO1xuXG4vKipcbiAqIEEgc3ViIGNsYXNzIG9mIHtAbGluayBNb2RkbGV9IHdpdGggc3VwcG9ydCBmb3IgaW1wb3J0IGFuZCBleHBvcnQgb2YgQlBNTiAyLjAgeG1sIGZpbGVzLlxuICpcbiAqIEBjbGFzcyBCcG1uTW9kZGxlXG4gKiBAZXh0ZW5kcyBNb2RkbGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gcGFja2FnZXMgdG8gdXNlIGZvciBpbnN0YW50aWF0aW5nIHRoZSBtb2RlbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gcGFzcyBvdmVyXG4gKi9cbmZ1bmN0aW9uIEJwbW5Nb2RkbGUocGFja2FnZXMsIG9wdGlvbnMpIHtcbiAgTW9kZGxlLmNhbGwodGhpcywgcGFja2FnZXMsIG9wdGlvbnMpO1xufVxuXG5CcG1uTW9kZGxlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTW9kZGxlLnByb3RvdHlwZSk7XG5cbi8qKlxuICogVGhlIGZyb21YTUwgcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBhcnNlUmVzdWx0XG4gKlxuICogQHByb3BlcnR5IHtNb2RkbGVFbGVtZW50fSByb290RWxlbWVudFxuICogQHByb3BlcnR5IHtBcnJheTxPYmplY3Q+fSByZWZlcmVuY2VzXG4gKiBAcHJvcGVydHkge0FycmF5PEVycm9yPn0gd2FybmluZ3NcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBlbGVtZW50c0J5SWQgLSBhIG1hcHBpbmcgY29udGFpbmluZyBlYWNoIElEIC0+IE1vZGRsZUVsZW1lbnRcbiAqL1xuXG4vKipcbiAqIFRoZSBmcm9tWE1MIGVycm9yLlxuICpcbiAqIEB0eXBlZGVmIHtFcnJvcn0gUGFyc2VFcnJvclxuICpcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RXJyb3I+fSB3YXJuaW5nc1xuICovXG5cbi8qKlxuICogSW5zdGFudGlhdGVzIGEgQlBNTiBtb2RlbCB0cmVlIGZyb20gYSBnaXZlbiB4bWwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSAgIHhtbFN0clxuICogQHBhcmFtIHtTdHJpbmd9ICAgW3R5cGVOYW1lPSdicG1uOkRlZmluaXRpb25zJ10gbmFtZSBvZiB0aGUgcm9vdCBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9uc10gIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgdW5kZXJseWluZyByZWFkZXJcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxQYXJzZVJlc3VsdCwgUGFyc2VFcnJvcj59XG4gKi9cbkJwbW5Nb2RkbGUucHJvdG90eXBlLmZyb21YTUwgPSBmdW5jdGlvbih4bWxTdHIsIHR5cGVOYW1lLCBvcHRpb25zKSB7XG5cbiAgaWYgKCFpc1N0cmluZyh0eXBlTmFtZSkpIHtcbiAgICBvcHRpb25zID0gdHlwZU5hbWU7XG4gICAgdHlwZU5hbWUgPSAnYnBtbjpEZWZpbml0aW9ucyc7XG4gIH1cblxuICB2YXIgcmVhZGVyID0gbmV3IFJlYWRlcihhc3NpZ24oeyBtb2RlbDogdGhpcywgbGF4OiB0cnVlIH0sIG9wdGlvbnMpKTtcbiAgdmFyIHJvb3RIYW5kbGVyID0gcmVhZGVyLmhhbmRsZXIodHlwZU5hbWUpO1xuXG4gIHJldHVybiByZWFkZXIuZnJvbVhNTCh4bWxTdHIsIHJvb3RIYW5kbGVyKTtcbn07XG5cblxuLyoqXG4gKiBUaGUgdG9YTUwgcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNlcmlhbGl6YXRpb25SZXN1bHRcbiAqXG4gKiBAcHJvcGVydHkge1N0cmluZ30geG1sXG4gKi9cblxuLyoqXG4gKiBTZXJpYWxpemVzIGEgQlBNTiAyLjAgb2JqZWN0IHRyZWUgdG8gWE1MLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSAgIGVsZW1lbnQgICAgdGhlIHJvb3QgZWxlbWVudCwgdHlwaWNhbGx5IGFuIGluc3RhbmNlIG9mIGBicG1uOkRlZmluaXRpb25zYFxuICogQHBhcmFtIHtPYmplY3R9ICAgW29wdGlvbnNdICB0byBwYXNzIHRvIHRoZSB1bmRlcmx5aW5nIHdyaXRlclxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlPFNlcmlhbGl6YXRpb25SZXN1bHQsIEVycm9yPn1cbiAqL1xuQnBtbk1vZGRsZS5wcm90b3R5cGUudG9YTUwgPSBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKSB7XG5cbiAgdmFyIHdyaXRlciA9IG5ldyBXcml0ZXIob3B0aW9ucyk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgcmVzdWx0ID0gd3JpdGVyLnRvWE1MKGVsZW1lbnQpO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgIHhtbDogcmVzdWx0XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICB9XG4gIH0pO1xufTtcblxudmFyIG5hbWUgPSBcIkJQTU4yMFwiO1xudmFyIHVyaSA9IFwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvQlBNTi8yMDEwMDUyNC9NT0RFTFwiO1xudmFyIHByZWZpeCA9IFwiYnBtblwiO1xudmFyIGFzc29jaWF0aW9ucyA9IFtcbl07XG52YXIgdHlwZXMgPSBbXG5cdHtcblx0XHRuYW1lOiBcIkludGVyZmFjZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm9wZXJhdGlvbnNcIixcblx0XHRcdFx0dHlwZTogXCJPcGVyYXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImltcGxlbWVudGF0aW9uUmVmXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiT3BlcmF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5NZXNzYWdlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZVwiLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvdXRNZXNzYWdlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZVwiLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJlcnJvclJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkVycm9yXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wbGVtZW50YXRpb25SZWZcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJFbmRQb2ludFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQXVkaXRpbmdcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkdsb2JhbFRhc2tcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkNhbGxhYmxlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVzb3VyY2VzXCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVzb3VyY2VSb2xlXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTW9uaXRvcmluZ1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUGVyZm9ybWVyXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSZXNvdXJjZVJvbGVcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUHJvY2Vzc1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRmxvd0VsZW1lbnRzQ29udGFpbmVyXCIsXG5cdFx0XHRcIkNhbGxhYmxlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicHJvY2Vzc1R5cGVcIixcblx0XHRcdFx0dHlwZTogXCJQcm9jZXNzVHlwZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNDbG9zZWRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhdWRpdGluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIkF1ZGl0aW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibW9uaXRvcmluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIk1vbml0b3JpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwcm9wZXJ0aWVzXCIsXG5cdFx0XHRcdHR5cGU6IFwiUHJvcGVydHlcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxhbmVTZXRzXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0cmVwbGFjZXM6IFwiRmxvd0VsZW1lbnRzQ29udGFpbmVyI2xhbmVTZXRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiTGFuZVNldFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImZsb3dFbGVtZW50c1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdHJlcGxhY2VzOiBcIkZsb3dFbGVtZW50c0NvbnRhaW5lciNmbG93RWxlbWVudHNcIixcblx0XHRcdFx0dHlwZTogXCJGbG93RWxlbWVudFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImFydGlmYWN0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkFydGlmYWN0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJyZXNvdXJjZXNcIixcblx0XHRcdFx0dHlwZTogXCJSZXNvdXJjZVJvbGVcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvcnJlbGF0aW9uU3Vic2NyaXB0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkNvcnJlbGF0aW9uU3Vic2NyaXB0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzdXBwb3J0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIlByb2Nlc3NcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkZWZpbml0aW9uYWxDb2xsYWJvcmF0aW9uUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29sbGFib3JhdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzRXhlY3V0YWJsZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJMYW5lU2V0XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibGFuZXNcIixcblx0XHRcdFx0dHlwZTogXCJMYW5lXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTGFuZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcnRpdGlvbkVsZW1lbnRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJCYXNlRWxlbWVudFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcnRpdGlvbkVsZW1lbnRcIixcblx0XHRcdFx0dHlwZTogXCJCYXNlRWxlbWVudFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImZsb3dOb2RlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiRmxvd05vZGVcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjaGlsZExhbmVTZXRcIixcblx0XHRcdFx0dHlwZTogXCJMYW5lU2V0XCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkdsb2JhbE1hbnVhbFRhc2tcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkdsb2JhbFRhc2tcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTWFudWFsVGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiVGFza1wiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJVc2VyVGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiVGFza1wiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVuZGVyaW5nc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlJlbmRlcmluZ1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wbGVtZW50YXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSZW5kZXJpbmdcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkh1bWFuUGVyZm9ybWVyXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJQZXJmb3JtZXJcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUG90ZW50aWFsT3duZXJcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkh1bWFuUGVyZm9ybWVyXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkdsb2JhbFVzZXJUYXNrXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJHbG9iYWxUYXNrXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbXBsZW1lbnRhdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVuZGVyaW5nc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlJlbmRlcmluZ1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkdhdGV3YXlcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRmxvd05vZGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImdhdGV3YXlEaXJlY3Rpb25cIixcblx0XHRcdFx0dHlwZTogXCJHYXRld2F5RGlyZWN0aW9uXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIlVuc3BlY2lmaWVkXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXZlbnRCYXNlZEdhdGV3YXlcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkdhdGV3YXlcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImluc3RhbnRpYXRlXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJldmVudEdhdGV3YXlUeXBlXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXZlbnRCYXNlZEdhdGV3YXlUeXBlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiRXhjbHVzaXZlXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNvbXBsZXhHYXRld2F5XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJHYXRld2F5XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhY3RpdmF0aW9uQ29uZGl0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRlZmF1bHRcIixcblx0XHRcdFx0dHlwZTogXCJTZXF1ZW5jZUZsb3dcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXhjbHVzaXZlR2F0ZXdheVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiR2F0ZXdheVwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGVmYXVsdFwiLFxuXHRcdFx0XHR0eXBlOiBcIlNlcXVlbmNlRmxvd1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJbmNsdXNpdmVHYXRld2F5XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJHYXRld2F5XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkZWZhdWx0XCIsXG5cdFx0XHRcdHR5cGU6IFwiU2VxdWVuY2VGbG93XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlBhcmFsbGVsR2F0ZXdheVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiR2F0ZXdheVwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSb290RWxlbWVudFwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSZWxhdGlvbnNoaXBcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0eXBlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkaXJlY3Rpb25cIixcblx0XHRcdFx0dHlwZTogXCJSZWxhdGlvbnNoaXBEaXJlY3Rpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInNvdXJjZVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkVsZW1lbnRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0YXJnZXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJFbGVtZW50XCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkJhc2VFbGVtZW50XCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaWRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0lkOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRvY3VtZW50YXRpb25cIixcblx0XHRcdFx0dHlwZTogXCJEb2N1bWVudGF0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJleHRlbnNpb25EZWZpbml0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkV4dGVuc2lvbkRlZmluaXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJleHRlbnNpb25FbGVtZW50c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkV4dGVuc2lvbkVsZW1lbnRzXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkV4dGVuc2lvblwiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtdXN0VW5kZXJzdGFuZFwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogZmFsc2UsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGVmaW5pdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIkV4dGVuc2lvbkRlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXh0ZW5zaW9uRGVmaW5pdGlvblwiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJleHRlbnNpb25BdHRyaWJ1dGVEZWZpbml0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkV4dGVuc2lvbkF0dHJpYnV0ZURlZmluaXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJFeHRlbnNpb25BdHRyaWJ1dGVEZWZpbml0aW9uXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInR5cGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzUmVmZXJlbmNlXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJleHRlbnNpb25EZWZpbml0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXh0ZW5zaW9uRGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJFeHRlbnNpb25FbGVtZW50c1wiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ2YWx1ZVJlZlwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkVsZW1lbnRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ2YWx1ZXNcIixcblx0XHRcdFx0dHlwZTogXCJFbGVtZW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJleHRlbnNpb25BdHRyaWJ1dGVEZWZpbml0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXh0ZW5zaW9uQXR0cmlidXRlRGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJEb2N1bWVudGF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGV4dFwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0JvZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGV4dEZvcm1hdFwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXZlbnRcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRmxvd05vZGVcIixcblx0XHRcdFwiSW50ZXJhY3Rpb25Ob2RlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwcm9wZXJ0aWVzXCIsXG5cdFx0XHRcdHR5cGU6IFwiUHJvcGVydHlcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJbnRlcm1lZGlhdGVDYXRjaEV2ZW50XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJDYXRjaEV2ZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkludGVybWVkaWF0ZVRocm93RXZlbnRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlRocm93RXZlbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRW5kRXZlbnRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlRocm93RXZlbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiU3RhcnRFdmVudFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ2F0Y2hFdmVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNJbnRlcnJ1cHRpbmdcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IHRydWUsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlRocm93RXZlbnRcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFJbnB1dHNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhSW5wdXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFJbnB1dEFzc29jaWF0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFJbnB1dEFzc29jaWF0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dFNldFwiLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0U2V0XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXZlbnREZWZpbml0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXZlbnREZWZpbml0aW9uUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNhdGNoRXZlbnRcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcmFsbGVsTXVsdGlwbGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFPdXRwdXRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRGF0YU91dHB1dFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YU91dHB1dEFzc29jaWF0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFPdXRwdXRBc3NvY2lhdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0cHV0U2V0XCIsXG5cdFx0XHRcdHR5cGU6IFwiT3V0cHV0U2V0XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXZlbnREZWZpbml0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXZlbnREZWZpbml0aW9uUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkJvdW5kYXJ5RXZlbnRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkNhdGNoRXZlbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhbmNlbEFjdGl2aXR5XCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiB0cnVlLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImF0dGFjaGVkVG9SZWZcIixcblx0XHRcdFx0dHlwZTogXCJBY3Rpdml0eVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJFdmVudERlZmluaXRpb25cIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ2FuY2VsRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFdmVudERlZmluaXRpb25cIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXJyb3JFdmVudERlZmluaXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkV2ZW50RGVmaW5pdGlvblwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXJyb3JSZWZcIixcblx0XHRcdFx0dHlwZTogXCJFcnJvclwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJUZXJtaW5hdGVFdmVudERlZmluaXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkV2ZW50RGVmaW5pdGlvblwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFdmVudERlZmluaXRpb25cIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImVzY2FsYXRpb25SZWZcIixcblx0XHRcdFx0dHlwZTogXCJFc2NhbGF0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkVzY2FsYXRpb25cIixcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic3RydWN0dXJlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbURlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJlc2NhbGF0aW9uQ29kZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnREZWZpbml0aW9uXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ3YWl0Rm9yQ29tcGxldGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhY3Rpdml0eVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkFjdGl2aXR5XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlRpbWVyRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFdmVudERlZmluaXRpb25cIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRpbWVEYXRlXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRpbWVDeWNsZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkV4cHJlc3Npb25cIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInhzaTp0eXBlXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0aW1lRHVyYXRpb25cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkxpbmtFdmVudERlZmluaXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkV2ZW50RGVmaW5pdGlvblwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGFyZ2V0XCIsXG5cdFx0XHRcdHR5cGU6IFwiTGlua0V2ZW50RGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInNvdXJjZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkxpbmtFdmVudERlZmluaXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTWVzc2FnZUV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnREZWZpbml0aW9uXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm9wZXJhdGlvblJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIk9wZXJhdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnREZWZpbml0aW9uXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb25kaXRpb25cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlNpZ25hbEV2ZW50RGVmaW5pdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXZlbnREZWZpbml0aW9uXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzaWduYWxSZWZcIixcblx0XHRcdFx0dHlwZTogXCJTaWduYWxcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiU2lnbmFsXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic3RydWN0dXJlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbURlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSW1wbGljaXRUaHJvd0V2ZW50XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJUaHJvd0V2ZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkRhdGFTdGF0ZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJdGVtQXdhcmVFbGVtZW50XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXRlbVN1YmplY3RSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJdGVtRGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFTdGF0ZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFTdGF0ZVwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJEYXRhQXNzb2NpYXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzb3VyY2VSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJdGVtQXdhcmVFbGVtZW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGFyZ2V0UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbUF3YXJlRWxlbWVudFwiLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0cmFuc2Zvcm1hdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIkZvcm1hbEV4cHJlc3Npb25cIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInByb3BlcnR5XCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhc3NpZ25tZW50XCIsXG5cdFx0XHRcdHR5cGU6IFwiQXNzaWdubWVudFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkRhdGFJbnB1dFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiSXRlbUF3YXJlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNDb2xsZWN0aW9uXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dFNldFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0U2V0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dFNldFdpdGhPcHRpb25hbFwiLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0U2V0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dFNldFdpdGhXaGlsZUV4ZWN1dGluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0U2V0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRGF0YU91dHB1dFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiSXRlbUF3YXJlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNDb2xsZWN0aW9uXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvdXRwdXRTZXRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJPdXRwdXRTZXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm91dHB1dFNldFdpdGhPcHRpb25hbFwiLFxuXHRcdFx0XHR0eXBlOiBcIk91dHB1dFNldFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0cHV0U2V0V2l0aFdoaWxlRXhlY3V0aW5nXCIsXG5cdFx0XHRcdHR5cGU6IFwiT3V0cHV0U2V0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSW5wdXRTZXRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkYXRhSW5wdXRSZWZzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRGF0YUlucHV0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3B0aW9uYWxJbnB1dFJlZnNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhSW5wdXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ3aGlsZUV4ZWN1dGluZ0lucHV0UmVmc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFJbnB1dFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm91dHB1dFNldFJlZnNcIixcblx0XHRcdFx0dHlwZTogXCJPdXRwdXRTZXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiT3V0cHV0U2V0XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YU91dHB1dFJlZnNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhT3V0cHV0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5wdXRTZXRSZWZzXCIsXG5cdFx0XHRcdHR5cGU6IFwiSW5wdXRTZXRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvcHRpb25hbE91dHB1dFJlZnNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhT3V0cHV0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwid2hpbGVFeGVjdXRpbmdPdXRwdXRSZWZzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRGF0YU91dHB1dFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJQcm9wZXJ0eVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiSXRlbUF3YXJlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkRhdGFJbnB1dEFzc29jaWF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJEYXRhQXNzb2NpYXRpb25cIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRGF0YU91dHB1dEFzc29jaWF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJEYXRhQXNzb2NpYXRpb25cIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSW5wdXRPdXRwdXRTcGVjaWZpY2F0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YUlucHV0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFJbnB1dFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YU91dHB1dHNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhT3V0cHV0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dFNldHNcIixcblx0XHRcdFx0dHlwZTogXCJJbnB1dFNldFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0cHV0U2V0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIk91dHB1dFNldFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkRhdGFPYmplY3RcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkZsb3dFbGVtZW50XCIsXG5cdFx0XHRcIkl0ZW1Bd2FyZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzQ29sbGVjdGlvblwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogZmFsc2UsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIklucHV0T3V0cHV0QmluZGluZ1wiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dERhdGFSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJbnB1dFNldFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm91dHB1dERhdGFSZWZcIixcblx0XHRcdFx0dHlwZTogXCJPdXRwdXRTZXRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvcGVyYXRpb25SZWZcIixcblx0XHRcdFx0dHlwZTogXCJPcGVyYXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQXNzaWdubWVudFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImZyb21cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidG9cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkRhdGFTdG9yZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIixcblx0XHRcdFwiSXRlbUF3YXJlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY2FwYWNpdHlcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkludGVnZXJcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpc1VubGltaXRlZFwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogdHJ1ZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRGF0YVN0b3JlUmVmZXJlbmNlXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJJdGVtQXdhcmVFbGVtZW50XCIsXG5cdFx0XHRcIkZsb3dFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkYXRhU3RvcmVSZWZcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhU3RvcmVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRGF0YU9iamVjdFJlZmVyZW5jZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiSXRlbUF3YXJlRWxlbWVudFwiLFxuXHRcdFx0XCJGbG93RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YU9iamVjdFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFPYmplY3RcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29udmVyc2F0aW9uTGlua1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInNvdXJjZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkludGVyYWN0aW9uTm9kZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRhcmdldFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkludGVyYWN0aW9uTm9kZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb252ZXJzYXRpb25Bc3NvY2lhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlubmVyQ29udmVyc2F0aW9uTm9kZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkNvbnZlcnNhdGlvbk5vZGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvdXRlckNvbnZlcnNhdGlvbk5vZGVSZWZcIixcblx0XHRcdFx0dHlwZTogXCJDb252ZXJzYXRpb25Ob2RlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNhbGxDb252ZXJzYXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkNvbnZlcnNhdGlvbk5vZGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhbGxlZENvbGxhYm9yYXRpb25SZWZcIixcblx0XHRcdFx0dHlwZTogXCJDb2xsYWJvcmF0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicGFydGljaXBhbnRBc3NvY2lhdGlvbnNcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudEFzc29jaWF0aW9uXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29udmVyc2F0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJDb252ZXJzYXRpb25Ob2RlXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlN1YkNvbnZlcnNhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ29udmVyc2F0aW9uTm9kZVwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29udmVyc2F0aW9uTm9kZXNcIixcblx0XHRcdFx0dHlwZTogXCJDb252ZXJzYXRpb25Ob2RlXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29udmVyc2F0aW9uTm9kZVwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJJbnRlcmFjdGlvbk5vZGVcIixcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcnRpY2lwYW50UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiUGFydGljaXBhbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlRmxvd1JlZnNcIixcblx0XHRcdFx0dHlwZTogXCJNZXNzYWdlRmxvd1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvcnJlbGF0aW9uS2V5c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkNvcnJlbGF0aW9uS2V5XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiR2xvYmFsQ29udmVyc2F0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJDb2xsYWJvcmF0aW9uXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlBhcnRuZXJFbnRpdHlcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlJvb3RFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJ0aWNpcGFudFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlBhcnRuZXJSb2xlXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicGFydGljaXBhbnRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb3JyZWxhdGlvblByb3BlcnR5XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29ycmVsYXRpb25Qcm9wZXJ0eVJldHJpZXZhbEV4cHJlc3Npb25cIixcblx0XHRcdFx0dHlwZTogXCJDb3JyZWxhdGlvblByb3BlcnR5UmV0cmlldmFsRXhwcmVzc2lvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidHlwZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkl0ZW1EZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkVycm9yXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic3RydWN0dXJlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbURlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJlcnJvckNvZGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb3JyZWxhdGlvbktleVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvcnJlbGF0aW9uUHJvcGVydHlSZWZcIixcblx0XHRcdFx0dHlwZTogXCJDb3JyZWxhdGlvblByb3BlcnR5XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkV4cHJlc3Npb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdGlzQWJzdHJhY3Q6IGZhbHNlLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJib2R5XCIsXG5cdFx0XHRcdGlzQm9keTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRm9ybWFsRXhwcmVzc2lvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRXhwcmVzc2lvblwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibGFuZ3VhZ2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV2YWx1YXRlc1RvVHlwZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkl0ZW1EZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIk1lc3NhZ2VcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlJvb3RFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpdGVtUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbURlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSXRlbURlZmluaXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlJvb3RFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpdGVtS2luZFwiLFxuXHRcdFx0XHR0eXBlOiBcIkl0ZW1LaW5kXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzdHJ1Y3R1cmVSZWZcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzQ29sbGVjdGlvblwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogZmFsc2UsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wb3J0XCIsXG5cdFx0XHRcdHR5cGU6IFwiSW1wb3J0XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkZsb3dFbGVtZW50XCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhdWRpdGluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIkF1ZGl0aW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibW9uaXRvcmluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIk1vbml0b3JpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjYXRlZ29yeVZhbHVlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ2F0ZWdvcnlWYWx1ZVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJTZXF1ZW5jZUZsb3dcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkZsb3dFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpc0ltbWVkaWF0ZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvbmRpdGlvbkV4cHJlc3Npb25cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic291cmNlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiRmxvd05vZGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0YXJnZXRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJGbG93Tm9kZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJGbG93RWxlbWVudHNDb250YWluZXJcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxhbmVTZXRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiTGFuZVNldFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZmxvd0VsZW1lbnRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRmxvd0VsZW1lbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDYWxsYWJsZUVsZW1lbnRcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlvU3BlY2lmaWNhdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0T3V0cHV0U3BlY2lmaWNhdGlvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwicHJvcGVydHlcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInN1cHBvcnRlZEludGVyZmFjZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkludGVyZmFjZVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlvQmluZGluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0T3V0cHV0QmluZGluZ1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJwcm9wZXJ0eVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkZsb3dOb2RlXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkZsb3dFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbmNvbWluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIlNlcXVlbmNlRmxvd1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm91dGdvaW5nXCIsXG5cdFx0XHRcdHR5cGU6IFwiU2VxdWVuY2VGbG93XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibGFuZXNcIixcblx0XHRcdFx0dHlwZTogXCJMYW5lXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29ycmVsYXRpb25Qcm9wZXJ0eVJldHJpZXZhbEV4cHJlc3Npb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlUGF0aFwiLFxuXHRcdFx0XHR0eXBlOiBcIkZvcm1hbEV4cHJlc3Npb25cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb3JyZWxhdGlvblByb3BlcnR5QmluZGluZ1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRhdGFQYXRoXCIsXG5cdFx0XHRcdHR5cGU6IFwiRm9ybWFsRXhwcmVzc2lvblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvcnJlbGF0aW9uUHJvcGVydHlSZWZcIixcblx0XHRcdFx0dHlwZTogXCJDb3JyZWxhdGlvblByb3BlcnR5XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlJlc291cmNlXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVzb3VyY2VQYXJhbWV0ZXJzXCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVzb3VyY2VQYXJhbWV0ZXJcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSZXNvdXJjZVBhcmFtZXRlclwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzUmVxdWlyZWRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0eXBlXCIsXG5cdFx0XHRcdHR5cGU6IFwiSXRlbURlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ29ycmVsYXRpb25TdWJzY3JpcHRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb3JyZWxhdGlvbktleVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkNvcnJlbGF0aW9uS2V5XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29ycmVsYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIixcblx0XHRcdFx0dHlwZTogXCJDb3JyZWxhdGlvblByb3BlcnR5QmluZGluZ1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIk1lc3NhZ2VGbG93XCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic291cmNlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSW50ZXJhY3Rpb25Ob2RlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGFyZ2V0UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiSW50ZXJhY3Rpb25Ob2RlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibWVzc2FnZVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIk1lc3NhZ2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTWVzc2FnZUZsb3dBc3NvY2lhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlubmVyTWVzc2FnZUZsb3dSZWZcIixcblx0XHRcdFx0dHlwZTogXCJNZXNzYWdlRmxvd1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm91dGVyTWVzc2FnZUZsb3dSZWZcIixcblx0XHRcdFx0dHlwZTogXCJNZXNzYWdlRmxvd1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJbnRlcmFjdGlvbk5vZGVcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbmNvbWluZ0NvbnZlcnNhdGlvbkxpbmtzXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29udmVyc2F0aW9uTGlua1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0Z29pbmdDb252ZXJzYXRpb25MaW5rc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkNvbnZlcnNhdGlvbkxpbmtcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJQYXJ0aWNpcGFudFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiSW50ZXJhY3Rpb25Ob2RlXCIsXG5cdFx0XHRcIkJhc2VFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnRlcmZhY2VSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJbnRlcmZhY2VcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJ0aWNpcGFudE11bHRpcGxpY2l0eVwiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50TXVsdGlwbGljaXR5XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZW5kUG9pbnRSZWZzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRW5kUG9pbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwcm9jZXNzUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiUHJvY2Vzc1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJQYXJ0aWNpcGFudEFzc29jaWF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5uZXJQYXJ0aWNpcGFudFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0ZXJQYXJ0aWNpcGFudFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlBhcnRpY2lwYW50TXVsdGlwbGljaXR5XCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm1pbmltdW1cIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IDAsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJJbnRlZ2VyXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibWF4aW11bVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogMSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkludGVnZXJcIlxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb2xsYWJvcmF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJSb290RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNDbG9zZWRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJ0aWNpcGFudHNcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibWVzc2FnZUZsb3dzXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZUZsb3dcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImFydGlmYWN0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkFydGlmYWN0XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb252ZXJzYXRpb25zXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29udmVyc2F0aW9uTm9kZVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29udmVyc2F0aW9uQXNzb2NpYXRpb25zXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29udmVyc2F0aW9uQXNzb2NpYXRpb25cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJ0aWNpcGFudEFzc29jaWF0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50QXNzb2NpYXRpb25cIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm1lc3NhZ2VGbG93QXNzb2NpYXRpb25zXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZUZsb3dBc3NvY2lhdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29ycmVsYXRpb25LZXlzXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29ycmVsYXRpb25LZXlcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNob3Jlb2dyYXBoeVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkNob3Jlb2dyYXBoeVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvbnZlcnNhdGlvbkxpbmtzXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29udmVyc2F0aW9uTGlua1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNob3Jlb2dyYXBoeUFjdGl2aXR5XCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkZsb3dOb2RlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwYXJ0aWNpcGFudFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIlBhcnRpY2lwYW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW5pdGlhdGluZ1BhcnRpY2lwYW50UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiUGFydGljaXBhbnRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb3JyZWxhdGlvbktleXNcIixcblx0XHRcdFx0dHlwZTogXCJDb3JyZWxhdGlvbktleVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibG9vcFR5cGVcIixcblx0XHRcdFx0dHlwZTogXCJDaG9yZW9ncmFwaHlMb29wVHlwZVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCJOb25lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ2FsbENob3Jlb2dyYXBoeVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ2hvcmVvZ3JhcGh5QWN0aXZpdHlcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhbGxlZENob3Jlb2dyYXBoeVJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkNob3Jlb2dyYXBoeVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcnRpY2lwYW50QXNzb2NpYXRpb25zXCIsXG5cdFx0XHRcdHR5cGU6IFwiUGFydGljaXBhbnRBc3NvY2lhdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlN1YkNob3Jlb2dyYXBoeVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ2hvcmVvZ3JhcGh5QWN0aXZpdHlcIixcblx0XHRcdFwiRmxvd0VsZW1lbnRzQ29udGFpbmVyXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhcnRpZmFjdHNcIixcblx0XHRcdFx0dHlwZTogXCJBcnRpZmFjdFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNob3Jlb2dyYXBoeVRhc2tcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkNob3Jlb2dyYXBoeUFjdGl2aXR5XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlRmxvd1JlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIk1lc3NhZ2VGbG93XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNob3Jlb2dyYXBoeVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ29sbGFib3JhdGlvblwiLFxuXHRcdFx0XCJGbG93RWxlbWVudHNDb250YWluZXJcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiR2xvYmFsQ2hvcmVvZ3JhcGh5VGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQ2hvcmVvZ3JhcGh5XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbml0aWF0aW5nUGFydGljaXBhbnRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJUZXh0QW5ub3RhdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQXJ0aWZhY3RcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRleHRcIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0ZXh0Rm9ybWF0XCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcInRleHQvcGxhaW5cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJHcm91cFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQXJ0aWZhY3RcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhdGVnb3J5VmFsdWVSZWZcIixcblx0XHRcdFx0dHlwZTogXCJDYXRlZ29yeVZhbHVlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkFzc29jaWF0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJBcnRpZmFjdFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYXNzb2NpYXRpb25EaXJlY3Rpb25cIixcblx0XHRcdFx0dHlwZTogXCJBc3NvY2lhdGlvbkRpcmVjdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic291cmNlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiQmFzZUVsZW1lbnRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0YXJnZXRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJCYXNlRWxlbWVudFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDYXRlZ29yeVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiUm9vdEVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhdGVnb3J5VmFsdWVcIixcblx0XHRcdFx0dHlwZTogXCJDYXRlZ29yeVZhbHVlXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQXJ0aWZhY3RcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ2F0ZWdvcnlWYWx1ZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhdGVnb3JpemVkRmxvd0VsZW1lbnRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiRmxvd0VsZW1lbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInZhbHVlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQWN0aXZpdHlcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRmxvd05vZGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzRm9yQ29tcGVuc2F0aW9uXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkZWZhdWx0XCIsXG5cdFx0XHRcdHR5cGU6IFwiU2VxdWVuY2VGbG93XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW9TcGVjaWZpY2F0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiSW5wdXRPdXRwdXRTcGVjaWZpY2F0aW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJwcm9wZXJ0eVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYm91bmRhcnlFdmVudFJlZnNcIixcblx0XHRcdFx0dHlwZTogXCJCb3VuZGFyeUV2ZW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicHJvcGVydGllc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlByb3BlcnR5XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkYXRhSW5wdXRBc3NvY2lhdGlvbnNcIixcblx0XHRcdFx0dHlwZTogXCJEYXRhSW5wdXRBc3NvY2lhdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZGF0YU91dHB1dEFzc29jaWF0aW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFPdXRwdXRBc3NvY2lhdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic3RhcnRRdWFudGl0eVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogMSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkludGVnZXJcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJyZXNvdXJjZXNcIixcblx0XHRcdFx0dHlwZTogXCJSZXNvdXJjZVJvbGVcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNvbXBsZXRpb25RdWFudGl0eVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogMSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkludGVnZXJcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJsb29wQ2hhcmFjdGVyaXN0aWNzXCIsXG5cdFx0XHRcdHR5cGU6IFwiTG9vcENoYXJhY3RlcmlzdGljc1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJTZXJ2aWNlVGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiVGFza1wiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wbGVtZW50YXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm9wZXJhdGlvblJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIk9wZXJhdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJTdWJQcm9jZXNzXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJBY3Rpdml0eVwiLFxuXHRcdFx0XCJGbG93RWxlbWVudHNDb250YWluZXJcIixcblx0XHRcdFwiSW50ZXJhY3Rpb25Ob2RlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0cmlnZ2VyZWRCeUV2ZW50XCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJhcnRpZmFjdHNcIixcblx0XHRcdFx0dHlwZTogXCJBcnRpZmFjdFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkxvb3BDaGFyYWN0ZXJpc3RpY3NcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTXVsdGlJbnN0YW5jZUxvb3BDaGFyYWN0ZXJpc3RpY3NcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkxvb3BDaGFyYWN0ZXJpc3RpY3NcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzU2VxdWVudGlhbFwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogZmFsc2UsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYmVoYXZpb3JcIixcblx0XHRcdFx0dHlwZTogXCJNdWx0aUluc3RhbmNlQmVoYXZpb3JcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiQWxsXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJsb29wQ2FyZGluYWxpdHlcIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibG9vcERhdGFJbnB1dFJlZlwiLFxuXHRcdFx0XHR0eXBlOiBcIkl0ZW1Bd2FyZUVsZW1lbnRcIixcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibG9vcERhdGFPdXRwdXRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJJdGVtQXdhcmVFbGVtZW50XCIsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlucHV0RGF0YUl0ZW1cIixcblx0XHRcdFx0dHlwZTogXCJEYXRhSW5wdXRcIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInByb3BlcnR5XCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvdXRwdXREYXRhSXRlbVwiLFxuXHRcdFx0XHR0eXBlOiBcIkRhdGFPdXRwdXRcIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInByb3BlcnR5XCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjb21wbGV4QmVoYXZpb3JEZWZpbml0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiQ29tcGxleEJlaGF2aW9yRGVmaW5pdGlvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29tcGxldGlvbkNvbmRpdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIkV4cHJlc3Npb25cIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInhzaTp0eXBlXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvbmVCZWhhdmlvckV2ZW50UmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXZlbnREZWZpbml0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibm9uZUJlaGF2aW9yRXZlbnRSZWZcIixcblx0XHRcdFx0dHlwZTogXCJFdmVudERlZmluaXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiU3RhbmRhcmRMb29wQ2hhcmFjdGVyaXN0aWNzXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJMb29wQ2hhcmFjdGVyaXN0aWNzXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0ZXN0QmVmb3JlXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJsb29wQ29uZGl0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxvb3BNYXhpbXVtXCIsXG5cdFx0XHRcdHR5cGU6IFwiSW50ZWdlclwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNhbGxBY3Rpdml0eVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQWN0aXZpdHlcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhbGxlZEVsZW1lbnRcIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJUYXNrXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJBY3Rpdml0eVwiLFxuXHRcdFx0XCJJbnRlcmFjdGlvbk5vZGVcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiU2VuZFRhc2tcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlRhc2tcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImltcGxlbWVudGF0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvcGVyYXRpb25SZWZcIixcblx0XHRcdFx0dHlwZTogXCJPcGVyYXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSZWNlaXZlVGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiVGFza1wiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wbGVtZW50YXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImluc3RhbnRpYXRlXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBmYWxzZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvcGVyYXRpb25SZWZcIixcblx0XHRcdFx0dHlwZTogXCJPcGVyYXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXNzYWdlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiTWVzc2FnZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJTY3JpcHRUYXNrXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJUYXNrXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzY3JpcHRGb3JtYXRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInNjcmlwdFwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJCdXNpbmVzc1J1bGVUYXNrXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJUYXNrXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbXBsZW1lbnRhdGlvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkFkSG9jU3ViUHJvY2Vzc1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiU3ViUHJvY2Vzc1wiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29tcGxldGlvbkNvbmRpdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIkV4cHJlc3Npb25cIixcblx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0c2VyaWFsaXplOiBcInhzaTp0eXBlXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvcmRlcmluZ1wiLFxuXHRcdFx0XHR0eXBlOiBcIkFkSG9jT3JkZXJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhbmNlbFJlbWFpbmluZ0luc3RhbmNlc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogdHJ1ZSxcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiVHJhbnNhY3Rpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIlN1YlByb2Nlc3NcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInByb3RvY29sXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtZXRob2RcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJHbG9iYWxTY3JpcHRUYXNrXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJHbG9iYWxUYXNrXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzY3JpcHRMYW5ndWFnZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic2NyaXB0XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiR2xvYmFsQnVzaW5lc3NSdWxlVGFza1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiR2xvYmFsVGFza1wiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wbGVtZW50YXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJDb21wbGV4QmVoYXZpb3JEZWZpbml0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29uZGl0aW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRm9ybWFsRXhwcmVzc2lvblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV2ZW50XCIsXG5cdFx0XHRcdHR5cGU6IFwiSW1wbGljaXRUaHJvd0V2ZW50XCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlJlc291cmNlUm9sZVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJlc291cmNlUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVzb3VyY2VcIixcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVzb3VyY2VQYXJhbWV0ZXJCaW5kaW5nc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlJlc291cmNlUGFyYW1ldGVyQmluZGluZ1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVzb3VyY2VBc3NpZ25tZW50RXhwcmVzc2lvblwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlc291cmNlQXNzaWdubWVudEV4cHJlc3Npb25cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUmVzb3VyY2VQYXJhbWV0ZXJCaW5kaW5nXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV4cHJlc3Npb25cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicGFyYW1ldGVyUmVmXCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVzb3VyY2VQYXJhbWV0ZXJcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJCYXNlRWxlbWVudFwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJSZXNvdXJjZUFzc2lnbm1lbnRFeHByZXNzaW9uXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV4cHJlc3Npb25cIixcblx0XHRcdFx0dHlwZTogXCJFeHByZXNzaW9uXCIsXG5cdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSW1wb3J0XCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImltcG9ydFR5cGVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxvY2F0aW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJuYW1lc3BhY2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJEZWZpbml0aW9uc1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiQmFzZUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRhcmdldE5hbWVzcGFjZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXhwcmVzc2lvbkxhbmd1YWdlXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFBhdGhcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInR5cGVMYW5ndWFnZVwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaW1wb3J0c1wiLFxuXHRcdFx0XHR0eXBlOiBcIkltcG9ydFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXh0ZW5zaW9uc1wiLFxuXHRcdFx0XHR0eXBlOiBcIkV4dGVuc2lvblwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicm9vdEVsZW1lbnRzXCIsXG5cdFx0XHRcdHR5cGU6IFwiUm9vdEVsZW1lbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRpYWdyYW1zXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJicG1uZGk6QlBNTkRpYWdyYW1cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJleHBvcnRlclwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmVsYXRpb25zaGlwc1wiLFxuXHRcdFx0XHR0eXBlOiBcIlJlbGF0aW9uc2hpcFwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXhwb3J0ZXJWZXJzaW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fVxuXTtcbnZhciBlbnVtZXJhdGlvbnMgPSBbXG5cdHtcblx0XHRuYW1lOiBcIlByb2Nlc3NUeXBlXCIsXG5cdFx0bGl0ZXJhbFZhbHVlczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIk5vbmVcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJQdWJsaWNcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJQcml2YXRlXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkdhdGV3YXlEaXJlY3Rpb25cIixcblx0XHRsaXRlcmFsVmFsdWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiVW5zcGVjaWZpZWRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJDb252ZXJnaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiRGl2ZXJnaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiTWl4ZWRcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXZlbnRCYXNlZEdhdGV3YXlUeXBlXCIsXG5cdFx0bGl0ZXJhbFZhbHVlczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIlBhcmFsbGVsXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiRXhjbHVzaXZlXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlJlbGF0aW9uc2hpcERpcmVjdGlvblwiLFxuXHRcdGxpdGVyYWxWYWx1ZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJOb25lXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiRm9yd2FyZFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIkJhY2t3YXJkXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiQm90aFwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJdGVtS2luZFwiLFxuXHRcdGxpdGVyYWxWYWx1ZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJQaHlzaWNhbFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIkluZm9ybWF0aW9uXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNob3Jlb2dyYXBoeUxvb3BUeXBlXCIsXG5cdFx0bGl0ZXJhbFZhbHVlczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIk5vbmVcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJTdGFuZGFyZFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIk11bHRpSW5zdGFuY2VTZXF1ZW50aWFsXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiTXVsdGlJbnN0YW5jZVBhcmFsbGVsXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkFzc29jaWF0aW9uRGlyZWN0aW9uXCIsXG5cdFx0bGl0ZXJhbFZhbHVlczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIk5vbmVcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJPbmVcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJCb3RoXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIk11bHRpSW5zdGFuY2VCZWhhdmlvclwiLFxuXHRcdGxpdGVyYWxWYWx1ZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJOb25lXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiT25lXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiQWxsXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiQ29tcGxleFwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJBZEhvY09yZGVyaW5nXCIsXG5cdFx0bGl0ZXJhbFZhbHVlczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIlBhcmFsbGVsXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiU2VxdWVudGlhbFwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9XG5dO1xudmFyIHhtbCA9IHtcblx0dGFnQWxpYXM6IFwibG93ZXJDYXNlXCIsXG5cdHR5cGVQcmVmaXg6IFwidFwiXG59O1xudmFyIEJwbW5QYWNrYWdlID0ge1xuXHRuYW1lOiBuYW1lLFxuXHR1cmk6IHVyaSxcblx0cHJlZml4OiBwcmVmaXgsXG5cdGFzc29jaWF0aW9uczogYXNzb2NpYXRpb25zLFxuXHR0eXBlczogdHlwZXMsXG5cdGVudW1lcmF0aW9uczogZW51bWVyYXRpb25zLFxuXHR4bWw6IHhtbFxufTtcblxudmFyIG5hbWUkMSA9IFwiQlBNTkRJXCI7XG52YXIgdXJpJDEgPSBcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0JQTU4vMjAxMDA1MjQvRElcIjtcbnZhciBwcmVmaXgkMSA9IFwiYnBtbmRpXCI7XG52YXIgdHlwZXMkMSA9IFtcblx0e1xuXHRcdG5hbWU6IFwiQlBNTkRpYWdyYW1cIixcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicGxhbmVcIixcblx0XHRcdFx0dHlwZTogXCJCUE1OUGxhbmVcIixcblx0XHRcdFx0cmVkZWZpbmVzOiBcImRpOkRpYWdyYW0jcm9vdEVsZW1lbnRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJsYWJlbFN0eWxlXCIsXG5cdFx0XHRcdHR5cGU6IFwiQlBNTkxhYmVsU3R5bGVcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcImRpOkRpYWdyYW1cIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQlBNTlBsYW5lXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImJwbW5FbGVtZW50XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiYnBtbjpCYXNlRWxlbWVudFwiLFxuXHRcdFx0XHRyZWRlZmluZXM6IFwiZGk6RGlhZ3JhbUVsZW1lbnQjbW9kZWxFbGVtZW50XCJcblx0XHRcdH1cblx0XHRdLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiZGk6UGxhbmVcIlxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQlBNTlNoYXBlXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImJwbW5FbGVtZW50XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiYnBtbjpCYXNlRWxlbWVudFwiLFxuXHRcdFx0XHRyZWRlZmluZXM6IFwiZGk6RGlhZ3JhbUVsZW1lbnQjbW9kZWxFbGVtZW50XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNIb3Jpem9udGFsXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNFeHBhbmRlZFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzTWFya2VyVmlzaWJsZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxhYmVsXCIsXG5cdFx0XHRcdHR5cGU6IFwiQlBNTkxhYmVsXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNNZXNzYWdlVmlzaWJsZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInBhcnRpY2lwYW50QmFuZEtpbmRcIixcblx0XHRcdFx0dHlwZTogXCJQYXJ0aWNpcGFudEJhbmRLaW5kXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjaG9yZW9ncmFwaHlBY3Rpdml0eVNoYXBlXCIsXG5cdFx0XHRcdHR5cGU6IFwiQlBNTlNoYXBlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiZGk6TGFiZWxlZFNoYXBlXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkJQTU5FZGdlXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImxhYmVsXCIsXG5cdFx0XHRcdHR5cGU6IFwiQlBNTkxhYmVsXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYnBtbkVsZW1lbnRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJicG1uOkJhc2VFbGVtZW50XCIsXG5cdFx0XHRcdHJlZGVmaW5lczogXCJkaTpEaWFncmFtRWxlbWVudCNtb2RlbEVsZW1lbnRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzb3VyY2VFbGVtZW50XCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiZGk6RGlhZ3JhbUVsZW1lbnRcIixcblx0XHRcdFx0cmVkZWZpbmVzOiBcImRpOkVkZ2Ujc291cmNlXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGFyZ2V0RWxlbWVudFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcImRpOkRpYWdyYW1FbGVtZW50XCIsXG5cdFx0XHRcdHJlZGVmaW5lczogXCJkaTpFZGdlI3RhcmdldFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm1lc3NhZ2VWaXNpYmxlS2luZFwiLFxuXHRcdFx0XHR0eXBlOiBcIk1lc3NhZ2VWaXNpYmxlS2luZFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcImluaXRpYXRpbmdcIlxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJkaTpMYWJlbGVkRWRnZVwiXG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJCUE1OTGFiZWxcIixcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibGFiZWxTdHlsZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkJQTU5MYWJlbFN0eWxlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWUsXG5cdFx0XHRcdHJlZGVmaW5lczogXCJkaTpEaWFncmFtRWxlbWVudCNzdHlsZVwiXG5cdFx0XHR9XG5cdFx0XSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcImRpOkxhYmVsXCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkJQTU5MYWJlbFN0eWxlXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImZvbnRcIixcblx0XHRcdFx0dHlwZTogXCJkYzpGb250XCJcblx0XHRcdH1cblx0XHRdLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiZGk6U3R5bGVcIlxuXHRcdF1cblx0fVxuXTtcbnZhciBlbnVtZXJhdGlvbnMkMSA9IFtcblx0e1xuXHRcdG5hbWU6IFwiUGFydGljaXBhbnRCYW5kS2luZFwiLFxuXHRcdGxpdGVyYWxWYWx1ZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0b3BfaW5pdGlhdGluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm1pZGRsZV9pbml0aWF0aW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiYm90dG9tX2luaXRpYXRpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ0b3Bfbm9uX2luaXRpYXRpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtaWRkbGVfbm9uX2luaXRpYXRpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJib3R0b21fbm9uX2luaXRpYXRpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiTWVzc2FnZVZpc2libGVLaW5kXCIsXG5cdFx0bGl0ZXJhbFZhbHVlczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImluaXRpYXRpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJub25faW5pdGlhdGluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9XG5dO1xudmFyIGFzc29jaWF0aW9ucyQxID0gW1xuXTtcbnZhciBCcG1uRGlQYWNrYWdlID0ge1xuXHRuYW1lOiBuYW1lJDEsXG5cdHVyaTogdXJpJDEsXG5cdHByZWZpeDogcHJlZml4JDEsXG5cdHR5cGVzOiB0eXBlcyQxLFxuXHRlbnVtZXJhdGlvbnM6IGVudW1lcmF0aW9ucyQxLFxuXHRhc3NvY2lhdGlvbnM6IGFzc29jaWF0aW9ucyQxXG59O1xuXG52YXIgbmFtZSQyID0gXCJEQ1wiO1xudmFyIHVyaSQyID0gXCJodHRwOi8vd3d3Lm9tZy5vcmcvc3BlYy9ERC8yMDEwMDUyNC9EQ1wiO1xudmFyIHByZWZpeCQyID0gXCJkY1wiO1xudmFyIHR5cGVzJDIgPSBbXG5cdHtcblx0XHRuYW1lOiBcIkJvb2xlYW5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJbnRlZ2VyXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUmVhbFwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlN0cmluZ1wiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkZvbnRcIixcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibmFtZVwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic2l6ZVwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlYWxcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzQm9sZFwiLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlzSXRhbGljXCIsXG5cdFx0XHRcdHR5cGU6IFwiQm9vbGVhblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaXNVbmRlcmxpbmVcIixcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpc1N0cmlrZVRocm91Z2hcIixcblx0XHRcdFx0dHlwZTogXCJCb29sZWFuXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiUG9pbnRcIixcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwieFwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlYWxcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiMFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwieVwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlYWxcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiMFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkJvdW5kc1wiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ4XCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVhbFwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIwXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ5XCIsXG5cdFx0XHRcdHR5cGU6IFwiUmVhbFwiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIwXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ3aWR0aFwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlYWxcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImhlaWdodFwiLFxuXHRcdFx0XHR0eXBlOiBcIlJlYWxcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9XG5dO1xudmFyIGFzc29jaWF0aW9ucyQyID0gW1xuXTtcbnZhciBEY1BhY2thZ2UgPSB7XG5cdG5hbWU6IG5hbWUkMixcblx0dXJpOiB1cmkkMixcblx0cHJlZml4OiBwcmVmaXgkMixcblx0dHlwZXM6IHR5cGVzJDIsXG5cdGFzc29jaWF0aW9uczogYXNzb2NpYXRpb25zJDJcbn07XG5cbnZhciBuYW1lJDMgPSBcIkRJXCI7XG52YXIgdXJpJDMgPSBcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0RELzIwMTAwNTI0L0RJXCI7XG52YXIgcHJlZml4JDMgPSBcImRpXCI7XG52YXIgdHlwZXMkMyA9IFtcblx0e1xuXHRcdG5hbWU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpZFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdGlzSWQ6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZXh0ZW5zaW9uXCIsXG5cdFx0XHRcdHR5cGU6IFwiRXh0ZW5zaW9uXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3duaW5nRGlhZ3JhbVwiLFxuXHRcdFx0XHR0eXBlOiBcIkRpYWdyYW1cIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvd25pbmdFbGVtZW50XCIsXG5cdFx0XHRcdHR5cGU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtb2RlbEVsZW1lbnRcIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJFbGVtZW50XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwic3R5bGVcIixcblx0XHRcdFx0dHlwZTogXCJTdHlsZVwiLFxuXHRcdFx0XHRpc1JlYWRPbmx5OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWUsXG5cdFx0XHRcdGlzUmVmZXJlbmNlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm93bmVkRWxlbWVudFwiLFxuXHRcdFx0XHR0eXBlOiBcIkRpYWdyYW1FbGVtZW50XCIsXG5cdFx0XHRcdGlzUmVhZE9ubHk6IHRydWUsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJOb2RlXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkRpYWdyYW1FbGVtZW50XCJcblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkVkZ2VcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRGlhZ3JhbUVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInNvdXJjZVwiLFxuXHRcdFx0XHR0eXBlOiBcIkRpYWdyYW1FbGVtZW50XCIsXG5cdFx0XHRcdGlzUmVhZE9ubHk6IHRydWUsXG5cdFx0XHRcdGlzVmlydHVhbDogdHJ1ZSxcblx0XHRcdFx0aXNSZWZlcmVuY2U6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidGFyZ2V0XCIsXG5cdFx0XHRcdHR5cGU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlLFxuXHRcdFx0XHRpc1JlZmVyZW5jZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ3YXlwb2ludFwiLFxuXHRcdFx0XHRpc1VuaXF1ZTogZmFsc2UsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJkYzpQb2ludFwiLFxuXHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJEaWFncmFtXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiaWRcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHRpc0lkOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJvb3RFbGVtZW50XCIsXG5cdFx0XHRcdHR5cGU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImRvY3VtZW50YXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJlc29sdXRpb25cIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlJlYWxcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvd25lZFN0eWxlXCIsXG5cdFx0XHRcdHR5cGU6IFwiU3R5bGVcIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlNoYXBlXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIk5vZGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImJvdW5kc1wiLFxuXHRcdFx0XHR0eXBlOiBcImRjOkJvdW5kc1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJQbGFuZVwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJOb2RlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwbGFuZUVsZW1lbnRcIixcblx0XHRcdFx0dHlwZTogXCJEaWFncmFtRWxlbWVudFwiLFxuXHRcdFx0XHRzdWJzZXR0ZWRQcm9wZXJ0eTogXCJEaWFncmFtRWxlbWVudC1vd25lZEVsZW1lbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJMYWJlbGVkRWRnZVwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFZGdlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJvd25lZExhYmVsXCIsXG5cdFx0XHRcdHR5cGU6IFwiTGFiZWxcIixcblx0XHRcdFx0aXNSZWFkT25seTogdHJ1ZSxcblx0XHRcdFx0c3Vic2V0dGVkUHJvcGVydHk6IFwiRGlhZ3JhbUVsZW1lbnQtb3duZWRFbGVtZW50XCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZSxcblx0XHRcdFx0aXNWaXJ0dWFsOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJMYWJlbGVkU2hhcGVcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiU2hhcGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm93bmVkTGFiZWxcIixcblx0XHRcdFx0dHlwZTogXCJMYWJlbFwiLFxuXHRcdFx0XHRpc1JlYWRPbmx5OiB0cnVlLFxuXHRcdFx0XHRzdWJzZXR0ZWRQcm9wZXJ0eTogXCJEaWFncmFtRWxlbWVudC1vd25lZEVsZW1lbnRcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHRpc1ZpcnR1YWw6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkxhYmVsXCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIk5vZGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImJvdW5kc1wiLFxuXHRcdFx0XHR0eXBlOiBcImRjOkJvdW5kc1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJTdHlsZVwiLFxuXHRcdGlzQWJzdHJhY3Q6IHRydWUsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlkXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0aXNJZDogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRXh0ZW5zaW9uXCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInZhbHVlc1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiRWxlbWVudFwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9XG5dO1xudmFyIGFzc29jaWF0aW9ucyQzID0gW1xuXTtcbnZhciB4bWwkMSA9IHtcblx0dGFnQWxpYXM6IFwibG93ZXJDYXNlXCJcbn07XG52YXIgRGlQYWNrYWdlID0ge1xuXHRuYW1lOiBuYW1lJDMsXG5cdHVyaTogdXJpJDMsXG5cdHByZWZpeDogcHJlZml4JDMsXG5cdHR5cGVzOiB0eXBlcyQzLFxuXHRhc3NvY2lhdGlvbnM6IGFzc29jaWF0aW9ucyQzLFxuXHR4bWw6IHhtbCQxXG59O1xuXG52YXIgbmFtZSQ0ID0gXCJicG1uLmlvIGNvbG9ycyBmb3IgQlBNTlwiO1xudmFyIHVyaSQ0ID0gXCJodHRwOi8vYnBtbi5pby9zY2hlbWEvYnBtbi9iaW9jb2xvci8xLjBcIjtcbnZhciBwcmVmaXgkNCA9IFwiYmlvY1wiO1xudmFyIHR5cGVzJDQgPSBbXG5cdHtcblx0XHRuYW1lOiBcIkNvbG9yZWRTaGFwZVwiLFxuXHRcdFwiZXh0ZW5kc1wiOiBbXG5cdFx0XHRcImJwbW5kaTpCUE1OU2hhcGVcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInN0cm9rZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZmlsbFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNvbG9yZWRFZGdlXCIsXG5cdFx0XCJleHRlbmRzXCI6IFtcblx0XHRcdFwiYnBtbmRpOkJQTU5FZGdlXCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzdHJva2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImZpbGxcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9XG5dO1xudmFyIGVudW1lcmF0aW9ucyQyID0gW1xuXTtcbnZhciBhc3NvY2lhdGlvbnMkNCA9IFtcbl07XG52YXIgQmlvY1BhY2thZ2UgPSB7XG5cdG5hbWU6IG5hbWUkNCxcblx0dXJpOiB1cmkkNCxcblx0cHJlZml4OiBwcmVmaXgkNCxcblx0dHlwZXM6IHR5cGVzJDQsXG5cdGVudW1lcmF0aW9uczogZW51bWVyYXRpb25zJDIsXG5cdGFzc29jaWF0aW9uczogYXNzb2NpYXRpb25zJDRcbn07XG5cbnZhciBwYWNrYWdlcyA9IHtcbiAgYnBtbjogQnBtblBhY2thZ2UsXG4gIGJwbW5kaTogQnBtbkRpUGFja2FnZSxcbiAgZGM6IERjUGFja2FnZSxcbiAgZGk6IERpUGFja2FnZSxcbiAgYmlvYzogQmlvY1BhY2thZ2Vcbn07XG5cbmZ1bmN0aW9uIHNpbXBsZShhZGRpdGlvbmFsUGFja2FnZXMsIG9wdGlvbnMpIHtcbiAgdmFyIHBrcyA9IGFzc2lnbih7fSwgcGFja2FnZXMsIGFkZGl0aW9uYWxQYWNrYWdlcyk7XG5cbiAgcmV0dXJuIG5ldyBCcG1uTW9kZGxlKHBrcywgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNpbXBsZTtcbiIsIi8qISBodHRwczovL210aHMuYmUvY3NzZXNjYXBlIHYxLjUuMSBieSBAbWF0aGlhcyB8IE1JVCBsaWNlbnNlICovXG47KGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3VtZGpzL3VtZC9ibG9iL21hc3Rlci9yZXR1cm5FeHBvcnRzLmpzXG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0Jykge1xuXHRcdC8vIEZvciBOb2RlLmpzLlxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyb290KTtcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEZvciBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5LmJpbmQocm9vdCwgcm9vdCkpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIEZvciBicm93c2VyIGdsb2JhbHMgKG5vdCBleHBvc2luZyB0aGUgZnVuY3Rpb24gc2VwYXJhdGVseSkuXG5cdFx0ZmFjdG9yeShyb290KTtcblx0fVxufSh0eXBlb2YgZ2xvYmFsICE9ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogdGhpcywgZnVuY3Rpb24ocm9vdCkge1xuXG5cdGlmIChyb290LkNTUyAmJiByb290LkNTUy5lc2NhcGUpIHtcblx0XHRyZXR1cm4gcm9vdC5DU1MuZXNjYXBlO1xuXHR9XG5cblx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNzZXJpYWxpemUtYW4taWRlbnRpZmllclxuXHR2YXIgY3NzRXNjYXBlID0gZnVuY3Rpb24odmFsdWUpIHtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAwKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdgQ1NTLmVzY2FwZWAgcmVxdWlyZXMgYW4gYXJndW1lbnQuJyk7XG5cdFx0fVxuXHRcdHZhciBzdHJpbmcgPSBTdHJpbmcodmFsdWUpO1xuXHRcdHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuXHRcdHZhciBpbmRleCA9IC0xO1xuXHRcdHZhciBjb2RlVW5pdDtcblx0XHR2YXIgcmVzdWx0ID0gJyc7XG5cdFx0dmFyIGZpcnN0Q29kZVVuaXQgPSBzdHJpbmcuY2hhckNvZGVBdCgwKTtcblx0XHR3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuXHRcdFx0Y29kZVVuaXQgPSBzdHJpbmcuY2hhckNvZGVBdChpbmRleCk7XG5cdFx0XHQvLyBOb3RlOiB0aGVyZeKAmXMgbm8gbmVlZCB0byBzcGVjaWFsLWNhc2UgYXN0cmFsIHN5bWJvbHMsIHN1cnJvZ2F0ZVxuXHRcdFx0Ly8gcGFpcnMsIG9yIGxvbmUgc3Vycm9nYXRlcy5cblxuXHRcdFx0Ly8gSWYgdGhlIGNoYXJhY3RlciBpcyBOVUxMIChVKzAwMDApLCB0aGVuIHRoZSBSRVBMQUNFTUVOVCBDSEFSQUNURVJcblx0XHRcdC8vIChVK0ZGRkQpLlxuXHRcdFx0aWYgKGNvZGVVbml0ID09IDB4MDAwMCkge1xuXHRcdFx0XHRyZXN1bHQgKz0gJ1xcdUZGRkQnO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHQvLyBJZiB0aGUgY2hhcmFjdGVyIGlzIGluIHRoZSByYW5nZSBbXFwxLVxcMUZdIChVKzAwMDEgdG8gVSswMDFGKSBvciBpc1xuXHRcdFx0XHQvLyBVKzAwN0YsIFvigKZdXG5cdFx0XHRcdChjb2RlVW5pdCA+PSAweDAwMDEgJiYgY29kZVVuaXQgPD0gMHgwMDFGKSB8fCBjb2RlVW5pdCA9PSAweDAwN0YgfHxcblx0XHRcdFx0Ly8gSWYgdGhlIGNoYXJhY3RlciBpcyB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZCBpcyBpbiB0aGUgcmFuZ2UgWzAtOV1cblx0XHRcdFx0Ly8gKFUrMDAzMCB0byBVKzAwMzkpLCBb4oCmXVxuXHRcdFx0XHQoaW5kZXggPT0gMCAmJiBjb2RlVW5pdCA+PSAweDAwMzAgJiYgY29kZVVuaXQgPD0gMHgwMDM5KSB8fFxuXHRcdFx0XHQvLyBJZiB0aGUgY2hhcmFjdGVyIGlzIHRoZSBzZWNvbmQgY2hhcmFjdGVyIGFuZCBpcyBpbiB0aGUgcmFuZ2UgWzAtOV1cblx0XHRcdFx0Ly8gKFUrMDAzMCB0byBVKzAwMzkpIGFuZCB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIGEgYC1gIChVKzAwMkQpLCBb4oCmXVxuXHRcdFx0XHQoXG5cdFx0XHRcdFx0aW5kZXggPT0gMSAmJlxuXHRcdFx0XHRcdGNvZGVVbml0ID49IDB4MDAzMCAmJiBjb2RlVW5pdCA8PSAweDAwMzkgJiZcblx0XHRcdFx0XHRmaXJzdENvZGVVbml0ID09IDB4MDAyRFxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNlc2NhcGUtYS1jaGFyYWN0ZXItYXMtY29kZS1wb2ludFxuXHRcdFx0XHRyZXN1bHQgKz0gJ1xcXFwnICsgY29kZVVuaXQudG9TdHJpbmcoMTYpICsgJyAnO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHQvLyBJZiB0aGUgY2hhcmFjdGVyIGlzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYW5kIGlzIGEgYC1gIChVKzAwMkQpLCBhbmRcblx0XHRcdFx0Ly8gdGhlcmUgaXMgbm8gc2Vjb25kIGNoYXJhY3RlciwgW+KApl1cblx0XHRcdFx0aW5kZXggPT0gMCAmJlxuXHRcdFx0XHRsZW5ndGggPT0gMSAmJlxuXHRcdFx0XHRjb2RlVW5pdCA9PSAweDAwMkRcblx0XHRcdCkge1xuXHRcdFx0XHRyZXN1bHQgKz0gJ1xcXFwnICsgc3RyaW5nLmNoYXJBdChpbmRleCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGUgY2hhcmFjdGVyIGlzIG5vdCBoYW5kbGVkIGJ5IG9uZSBvZiB0aGUgYWJvdmUgcnVsZXMgYW5kIGlzXG5cdFx0XHQvLyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gVSswMDgwLCBpcyBgLWAgKFUrMDAyRCkgb3IgYF9gIChVKzAwNUYpLCBvclxuXHRcdFx0Ly8gaXMgaW4gb25lIG9mIHRoZSByYW5nZXMgWzAtOV0gKFUrMDAzMCB0byBVKzAwMzkpLCBbQS1aXSAoVSswMDQxIHRvXG5cdFx0XHQvLyBVKzAwNUEpLCBvciBbYS16XSAoVSswMDYxIHRvIFUrMDA3QSksIFvigKZdXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNvZGVVbml0ID49IDB4MDA4MCB8fFxuXHRcdFx0XHRjb2RlVW5pdCA9PSAweDAwMkQgfHxcblx0XHRcdFx0Y29kZVVuaXQgPT0gMHgwMDVGIHx8XG5cdFx0XHRcdGNvZGVVbml0ID49IDB4MDAzMCAmJiBjb2RlVW5pdCA8PSAweDAwMzkgfHxcblx0XHRcdFx0Y29kZVVuaXQgPj0gMHgwMDQxICYmIGNvZGVVbml0IDw9IDB4MDA1QSB8fFxuXHRcdFx0XHRjb2RlVW5pdCA+PSAweDAwNjEgJiYgY29kZVVuaXQgPD0gMHgwMDdBXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gdGhlIGNoYXJhY3RlciBpdHNlbGZcblx0XHRcdFx0cmVzdWx0ICs9IHN0cmluZy5jaGFyQXQoaW5kZXgpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuXG5cdFx0XHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI2VzY2FwZS1hLWNoYXJhY3RlclxuXHRcdFx0cmVzdWx0ICs9ICdcXFxcJyArIHN0cmluZy5jaGFyQXQoaW5kZXgpO1xuXG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH07XG5cblx0aWYgKCFyb290LkNTUykge1xuXHRcdHJvb3QuQ1NTID0ge307XG5cdH1cblxuXHRyb290LkNTUy5lc2NhcGUgPSBjc3NFc2NhcGU7XG5cdHJldHVybiBjc3NFc2NhcGU7XG5cbn0pKTtcbiIsImltcG9ydCBJbnRlcmFjdGlvbkV2ZW50c01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9pbnRlcmFjdGlvbi1ldmVudHMnO1xuXG5pbXBvcnQgRGlyZWN0RWRpdGluZyBmcm9tICcuL2xpYi9EaXJlY3RFZGl0aW5nJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIEludGVyYWN0aW9uRXZlbnRzTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbICdkaXJlY3RFZGl0aW5nJyBdLFxuICBkaXJlY3RFZGl0aW5nOiBbICd0eXBlJywgRGlyZWN0RWRpdGluZyBdXG59OyIsImltcG9ydCB7XG4gIGJpbmQsXG4gIGZpbmRcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgVGV4dEJveCBmcm9tICcuL1RleHRCb3gnO1xuXG5cbi8qKlxuICogQSBkaXJlY3QgZWRpdGluZyBjb21wb25lbnQgdGhhdCBhbGxvd3MgdXNlcnNcbiAqIHRvIGVkaXQgYW4gZWxlbWVudHMgdGV4dCBkaXJlY3RseSBpbiB0aGUgZGlhZ3JhbVxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzIHRoZSBldmVudCBidXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGlyZWN0RWRpdGluZyhldmVudEJ1cywgY2FudmFzKSB7XG5cbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcblxuICB0aGlzLl9wcm92aWRlcnMgPSBbXTtcbiAgdGhpcy5fdGV4dGJveCA9IG5ldyBUZXh0Qm94KHtcbiAgICBjb250YWluZXI6IGNhbnZhcy5nZXRDb250YWluZXIoKSxcbiAgICBrZXlIYW5kbGVyOiBiaW5kKHRoaXMuX2hhbmRsZUtleSwgdGhpcyksXG4gICAgcmVzaXplSGFuZGxlcjogYmluZCh0aGlzLl9oYW5kbGVSZXNpemUsIHRoaXMpXG4gIH0pO1xufVxuXG5EaXJlY3RFZGl0aW5nLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdjYW52YXMnIF07XG5cblxuLyoqXG4gKiBSZWdpc3RlciBhIGRpcmVjdCBlZGl0aW5nIHByb3ZpZGVyXG5cbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm92aWRlciB0aGUgcHJvdmlkZXIsIG11c3QgZXhwb3NlIGFuICNhY3RpdmF0ZShlbGVtZW50KSBtZXRob2QgdGhhdCByZXR1cm5zXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gYWN0aXZhdGlvbiBjb250ZXh0ICh7IGJvdW5kczoge3gsIHksIHdpZHRoLCBoZWlnaHQgfSwgdGV4dCB9KSBpZlxuICogICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdCBlZGl0aW5nIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGdpdmVuIGVsZW1lbnQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5IHRoZSBwcm92aWRlciBtdXN0IGV4cG9zZSBhICN1cGRhdGUoZWxlbWVudCwgdmFsdWUpIG1ldGhvZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHJlY2VpdmUgZGlyZWN0IGVkaXRpbmcgdXBkYXRlcy5cbiAqL1xuRGlyZWN0RWRpdGluZy5wcm90b3R5cGUucmVnaXN0ZXJQcm92aWRlciA9IGZ1bmN0aW9uKHByb3ZpZGVyKSB7XG4gIHRoaXMuX3Byb3ZpZGVycy5wdXNoKHByb3ZpZGVyKTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgZGlyZWN0IGVkaXRpbmcgaXMgY3VycmVudGx5IGFjdGl2ZVxuICpcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbkRpcmVjdEVkaXRpbmcucHJvdG90eXBlLmlzQWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhIXRoaXMuX2FjdGl2ZTtcbn07XG5cblxuLyoqXG4gKiBDYW5jZWwgZGlyZWN0IGVkaXRpbmcsIGlmIGl0IGlzIGN1cnJlbnRseSBhY3RpdmVcbiAqL1xuRGlyZWN0RWRpdGluZy5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5fYWN0aXZlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fZmlyZSgnY2FuY2VsJyk7XG4gIHRoaXMuY2xvc2UoKTtcbn07XG5cblxuRGlyZWN0RWRpdGluZy5wcm90b3R5cGUuX2ZpcmUgPSBmdW5jdGlvbihldmVudCwgY29udGV4dCkge1xuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdkaXJlY3RFZGl0aW5nLicgKyBldmVudCwgY29udGV4dCB8fCB7IGFjdGl2ZTogdGhpcy5fYWN0aXZlIH0pO1xufTtcblxuRGlyZWN0RWRpdGluZy5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fdGV4dGJveC5kZXN0cm95KCk7XG5cbiAgdGhpcy5fZmlyZSgnZGVhY3RpdmF0ZScpO1xuXG4gIHRoaXMuX2FjdGl2ZSA9IG51bGw7XG5cbiAgdGhpcy5yZXNpemFibGUgPSB1bmRlZmluZWQ7XG59O1xuXG5cbkRpcmVjdEVkaXRpbmcucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIGFjdGl2ZSA9IHRoaXMuX2FjdGl2ZTtcblxuICBpZiAoIWFjdGl2ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjb250YWluZXJCb3VuZHMsXG4gICAgICBwcmV2aW91c0JvdW5kcyA9IGFjdGl2ZS5jb250ZXh0LmJvdW5kcyxcbiAgICAgIG5ld0JvdW5kcyA9IHRoaXMuJHRleHRib3guZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICBuZXdUZXh0ID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgcHJldmlvdXNUZXh0ID0gYWN0aXZlLmNvbnRleHQudGV4dDtcblxuICBpZiAoXG4gICAgbmV3VGV4dCAhPT0gcHJldmlvdXNUZXh0IHx8XG4gICAgbmV3Qm91bmRzLmhlaWdodCAhPT0gcHJldmlvdXNCb3VuZHMuaGVpZ2h0IHx8XG4gICAgbmV3Qm91bmRzLndpZHRoICE9PSBwcmV2aW91c0JvdW5kcy53aWR0aFxuICApIHtcbiAgICBjb250YWluZXJCb3VuZHMgPSB0aGlzLl90ZXh0Ym94LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGFjdGl2ZS5wcm92aWRlci51cGRhdGUoYWN0aXZlLmVsZW1lbnQsIG5ld1RleHQsIGFjdGl2ZS5jb250ZXh0LnRleHQsIHtcbiAgICAgIHg6IG5ld0JvdW5kcy5sZWZ0IC0gY29udGFpbmVyQm91bmRzLmxlZnQsXG4gICAgICB5OiBuZXdCb3VuZHMudG9wIC0gY29udGFpbmVyQm91bmRzLnRvcCxcbiAgICAgIHdpZHRoOiBuZXdCb3VuZHMud2lkdGgsXG4gICAgICBoZWlnaHQ6IG5ld0JvdW5kcy5oZWlnaHRcbiAgICB9KTtcbiAgfVxuXG4gIHRoaXMuX2ZpcmUoJ2NvbXBsZXRlJyk7XG5cbiAgdGhpcy5jbG9zZSgpO1xufTtcblxuXG5EaXJlY3RFZGl0aW5nLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fdGV4dGJveC5nZXRWYWx1ZSgpO1xufTtcblxuXG5EaXJlY3RFZGl0aW5nLnByb3RvdHlwZS5faGFuZGxlS2V5ID0gZnVuY3Rpb24oZSkge1xuXG4gIC8vIHN0b3AgYnViYmxlXG4gIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgdmFyIGtleSA9IGUua2V5Q29kZSB8fCBlLmNoYXJDb2RlO1xuXG4gIC8vIEVTQ1xuICBpZiAoa2V5ID09PSAyNykge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICByZXR1cm4gdGhpcy5jYW5jZWwoKTtcbiAgfVxuXG4gIC8vIEVudGVyXG4gIGlmIChrZXkgPT09IDEzICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKCk7XG4gIH1cbn07XG5cblxuRGlyZWN0RWRpdGluZy5wcm90b3R5cGUuX2hhbmRsZVJlc2l6ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gIHRoaXMuX2ZpcmUoJ3Jlc2l6ZScsIGV2ZW50KTtcbn07XG5cblxuLyoqXG4gKiBBY3RpdmF0ZSBkaXJlY3QgZWRpdGluZyBvbiB0aGUgZ2l2ZW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBFbGVtZW50RGVzY3JpcHRvciB0aGUgZGVzY3JpcHRvciBmb3IgYSBzaGFwZSBvciBjb25uZWN0aW9uXG4gKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhY3RpdmF0aW9uIHdhcyBwb3NzaWJsZVxuICovXG5EaXJlY3RFZGl0aW5nLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgaWYgKHRoaXMuaXNBY3RpdmUoKSkge1xuICAgIHRoaXMuY2FuY2VsKCk7XG4gIH1cblxuICAvLyB0aGUgZGlyZWN0IGVkaXRpbmcgY29udGV4dFxuICB2YXIgY29udGV4dDtcblxuICB2YXIgcHJvdmlkZXIgPSBmaW5kKHRoaXMuX3Byb3ZpZGVycywgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAoY29udGV4dCA9IHAuYWN0aXZhdGUoZWxlbWVudCkpID8gcCA6IG51bGw7XG4gIH0pO1xuXG4gIC8vIGNoZWNrIGlmIGFjdGl2YXRpb24gdG9vayBwbGFjZVxuICBpZiAoY29udGV4dCkge1xuICAgIHRoaXMuJHRleHRib3ggPSB0aGlzLl90ZXh0Ym94LmNyZWF0ZShcbiAgICAgIGNvbnRleHQuYm91bmRzLFxuICAgICAgY29udGV4dC5zdHlsZSxcbiAgICAgIGNvbnRleHQudGV4dCxcbiAgICAgIGNvbnRleHQub3B0aW9uc1xuICAgICk7XG5cbiAgICB0aGlzLl9hY3RpdmUgPSB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgIHByb3ZpZGVyOiBwcm92aWRlclxuICAgIH07XG5cbiAgICBpZiAoY29udGV4dC5vcHRpb25zICYmIGNvbnRleHQub3B0aW9ucy5yZXNpemFibGUpIHtcbiAgICAgIHRoaXMucmVzaXphYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9maXJlKCdhY3RpdmF0ZScpO1xuICB9XG5cbiAgcmV0dXJuICEhY29udGV4dDtcbn07XG4iLCJpbXBvcnQge1xuICBhc3NpZ24sXG4gIGJpbmQsXG4gIHBpY2tcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBkb21pZnksXG4gIHF1ZXJ5IGFzIGRvbVF1ZXJ5LFxuICBldmVudCBhcyBkb21FdmVudCxcbiAgcmVtb3ZlIGFzIGRvbVJlbW92ZVxufSBmcm9tICdtaW4tZG9tJztcblxudmFyIG1pbiA9IE1hdGgubWluLFxuICAgIG1heCA9IE1hdGgubWF4O1xuXG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChlKSB7XG4gIGUucHJldmVudERlZmF1bHQoKTtcbn1cblxuZnVuY3Rpb24gc3RvcFByb3BhZ2F0aW9uKGUpIHtcbiAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbn1cblxuZnVuY3Rpb24gaXNUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERTtcbn1cblxuZnVuY3Rpb24gdG9BcnJheShub2RlTGlzdCkge1xuICByZXR1cm4gW10uc2xpY2UuY2FsbChub2RlTGlzdCk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYSBjb250YWluZXIgZm9yIGEgY29udGVudCBlZGl0YWJsZSBkaXYuXG4gKlxuICogU3RydWN0dXJlOlxuICpcbiAqIGNvbnRhaW5lclxuICogICBwYXJlbnRcbiAqICAgICBjb250ZW50XG4gKiAgICAgcmVzaXplLWhhbmRsZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG9wdGlvbnMuY29udGFpbmVyIFRoZSBET00gZWxlbWVudCB0byBhcHBlbmQgdGhlIGNvbnRlbnRDb250YWluZXIgdG9cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMua2V5SGFuZGxlciBIYW5kbGVyIGZvciBrZXkgZXZlbnRzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcHRpb25zLnJlc2l6ZUhhbmRsZXIgSGFuZGxlciBmb3IgcmVzaXplIGV2ZW50c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUZXh0Qm94KG9wdGlvbnMpIHtcbiAgdGhpcy5jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcblxuICB0aGlzLnBhcmVudCA9IGRvbWlmeShcbiAgICAnPGRpdiBjbGFzcz1cImRqcy1kaXJlY3QtZWRpdGluZy1wYXJlbnRcIj4nICtcbiAgICAgICc8ZGl2IGNsYXNzPVwiZGpzLWRpcmVjdC1lZGl0aW5nLWNvbnRlbnRcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+PC9kaXY+JyArXG4gICAgJzwvZGl2PidcbiAgKTtcblxuICB0aGlzLmNvbnRlbnQgPSBkb21RdWVyeSgnW2NvbnRlbnRlZGl0YWJsZV0nLCB0aGlzLnBhcmVudCk7XG5cbiAgdGhpcy5rZXlIYW5kbGVyID0gb3B0aW9ucy5rZXlIYW5kbGVyIHx8IGZ1bmN0aW9uKCkge307XG4gIHRoaXMucmVzaXplSGFuZGxlciA9IG9wdGlvbnMucmVzaXplSGFuZGxlciB8fCBmdW5jdGlvbigpIHt9O1xuXG4gIHRoaXMuYXV0b1Jlc2l6ZSA9IGJpbmQodGhpcy5hdXRvUmVzaXplLCB0aGlzKTtcbiAgdGhpcy5oYW5kbGVQYXN0ZSA9IGJpbmQodGhpcy5oYW5kbGVQYXN0ZSwgdGhpcyk7XG59XG5cblxuLyoqXG4gKiBDcmVhdGUgYSB0ZXh0IGJveCB3aXRoIHRoZSBnaXZlbiBwb3NpdGlvbiwgc2l6ZSwgc3R5bGUgYW5kIHRleHQgY29udGVudFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBib3VuZHNcbiAqIEBwYXJhbSB7TnVtYmVyfSBib3VuZHMueCBhYnNvbHV0ZSB4IHBvc2l0aW9uXG4gKiBAcGFyYW0ge051bWJlcn0gYm91bmRzLnkgYWJzb2x1dGUgeSBwb3NpdGlvblxuICogQHBhcmFtIHtOdW1iZXJ9IFtib3VuZHMud2lkdGhdIGZpeGVkIHdpZHRoIHZhbHVlXG4gKiBAcGFyYW0ge051bWJlcn0gW2JvdW5kcy5oZWlnaHRdIGZpeGVkIGhlaWdodCB2YWx1ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtib3VuZHMubWF4V2lkdGhdIG1heGltdW0gd2lkdGggdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbYm91bmRzLm1heEhlaWdodF0gbWF4aW11bSBoZWlnaHQgdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbYm91bmRzLm1pbldpZHRoXSBtaW5pbXVtIHdpZHRoIHZhbHVlXG4gKiBAcGFyYW0ge051bWJlcn0gW2JvdW5kcy5taW5IZWlnaHRdIG1pbmltdW0gaGVpZ2h0IHZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0eWxlXVxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIHRleHQgY29udGVudFxuICpcbiAqIEByZXR1cm4ge0RPTUVsZW1lbnR9IFRoZSBjcmVhdGVkIGNvbnRlbnQgRE9NIGVsZW1lbnRcbiAqL1xuVGV4dEJveC5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24oYm91bmRzLCBzdHlsZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCxcbiAgICAgIGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQsXG4gICAgICBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lcjtcblxuICBvcHRpb25zID0gdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBzdHlsZSA9IHRoaXMuc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICB2YXIgcGFyZW50U3R5bGUgPSBwaWNrKHN0eWxlLCBbXG4gICAgJ3dpZHRoJyxcbiAgICAnaGVpZ2h0JyxcbiAgICAnbWF4V2lkdGgnLFxuICAgICdtYXhIZWlnaHQnLFxuICAgICdtaW5XaWR0aCcsXG4gICAgJ21pbkhlaWdodCcsXG4gICAgJ2xlZnQnLFxuICAgICd0b3AnLFxuICAgICdiYWNrZ3JvdW5kQ29sb3InLFxuICAgICdwb3NpdGlvbicsXG4gICAgJ292ZXJmbG93JyxcbiAgICAnYm9yZGVyJyxcbiAgICAnd29yZFdyYXAnLFxuICAgICd0ZXh0QWxpZ24nLFxuICAgICdvdXRsaW5lJyxcbiAgICAndHJhbnNmb3JtJ1xuICBdKTtcblxuICBhc3NpZ24ocGFyZW50LnN0eWxlLCB7XG4gICAgd2lkdGg6IGJvdW5kcy53aWR0aCArICdweCcsXG4gICAgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0ICsgJ3B4JyxcbiAgICBtYXhXaWR0aDogYm91bmRzLm1heFdpZHRoICsgJ3B4JyxcbiAgICBtYXhIZWlnaHQ6IGJvdW5kcy5tYXhIZWlnaHQgKyAncHgnLFxuICAgIG1pbldpZHRoOiBib3VuZHMubWluV2lkdGggKyAncHgnLFxuICAgIG1pbkhlaWdodDogYm91bmRzLm1pbkhlaWdodCArICdweCcsXG4gICAgbGVmdDogYm91bmRzLnggKyAncHgnLFxuICAgIHRvcDogYm91bmRzLnkgKyAncHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkICNjY2MnLFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgIHdvcmRXcmFwOiAnbm9ybWFsJyxcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgIG91dGxpbmU6ICdub25lJ1xuICB9LCBwYXJlbnRTdHlsZSk7XG5cbiAgdmFyIGNvbnRlbnRTdHlsZSA9IHBpY2soc3R5bGUsIFtcbiAgICAnZm9udEZhbWlseScsXG4gICAgJ2ZvbnRTaXplJyxcbiAgICAnZm9udFdlaWdodCcsXG4gICAgJ2xpbmVIZWlnaHQnLFxuICAgICdwYWRkaW5nJyxcbiAgICAncGFkZGluZ1RvcCcsXG4gICAgJ3BhZGRpbmdSaWdodCcsXG4gICAgJ3BhZGRpbmdCb3R0b20nLFxuICAgICdwYWRkaW5nTGVmdCdcbiAgXSk7XG5cbiAgYXNzaWduKGNvbnRlbnQuc3R5bGUsIHtcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICB3b3JkV3JhcDogJ2JyZWFrLXdvcmQnXG4gIH0sIGNvbnRlbnRTdHlsZSk7XG5cbiAgaWYgKG9wdGlvbnMuY2VudGVyVmVydGljYWxseSkge1xuICAgIGFzc2lnbihjb250ZW50LnN0eWxlLCB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHRvcDogJzUwJScsXG4gICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMCwgLTUwJSknXG4gICAgfSwgY29udGVudFN0eWxlKTtcbiAgfVxuXG4gIGNvbnRlbnQuaW5uZXJUZXh0ID0gdmFsdWU7XG5cbiAgZG9tRXZlbnQuYmluZChjb250ZW50LCAna2V5ZG93bicsIHRoaXMua2V5SGFuZGxlcik7XG4gIGRvbUV2ZW50LmJpbmQoY29udGVudCwgJ21vdXNlZG93bicsIHN0b3BQcm9wYWdhdGlvbik7XG4gIGRvbUV2ZW50LmJpbmQoY29udGVudCwgJ3Bhc3RlJywgc2VsZi5oYW5kbGVQYXN0ZSk7XG5cbiAgaWYgKG9wdGlvbnMuYXV0b1Jlc2l6ZSkge1xuICAgIGRvbUV2ZW50LmJpbmQoY29udGVudCwgJ2lucHV0JywgdGhpcy5hdXRvUmVzaXplKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnJlc2l6YWJsZSkge1xuICAgIHRoaXMucmVzaXphYmxlKHN0eWxlKTtcbiAgfVxuXG4gIGNvbnRhaW5lci5hcHBlbmRDaGlsZChwYXJlbnQpO1xuXG4gIC8vIHNldCBzZWxlY3Rpb24gdG8gZW5kIG9mIHRleHRcbiAgdGhpcy5zZXRTZWxlY3Rpb24oY29udGVudC5sYXN0Q2hpbGQsIGNvbnRlbnQubGFzdENoaWxkICYmIGNvbnRlbnQubGFzdENoaWxkLmxlbmd0aCk7XG5cbiAgcmV0dXJuIHBhcmVudDtcbn07XG5cbi8qKlxuICogSW50ZXJjZXB0IHBhc3RlIGV2ZW50cyB0byByZW1vdmUgZm9ybWF0dGluZyBmcm9tIHBhc3RlZCB0ZXh0LlxuICovXG5UZXh0Qm94LnByb3RvdHlwZS5oYW5kbGVQYXN0ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICBzdHlsZSA9IHRoaXMuc3R5bGU7XG5cbiAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gIHZhciB0ZXh0O1xuXG4gIGlmIChlLmNsaXBib2FyZERhdGEpIHtcblxuICAgIC8vIENocm9tZSwgRmlyZWZveCwgU2FmYXJpXG4gICAgdGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJyk7XG4gIH0gZWxzZSB7XG5cbiAgICAvLyBJbnRlcm5ldCBFeHBsb3JlclxuICAgIHRleHQgPSB3aW5kb3cuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCdUZXh0Jyk7XG4gIH1cblxuICB0aGlzLmluc2VydFRleHQodGV4dCk7XG5cbiAgaWYgKG9wdGlvbnMuYXV0b1Jlc2l6ZSkge1xuICAgIHZhciBoYXNSZXNpemVkID0gdGhpcy5hdXRvUmVzaXplKHN0eWxlKTtcblxuICAgIGlmIChoYXNSZXNpemVkKSB7XG4gICAgICB0aGlzLnJlc2l6ZUhhbmRsZXIoaGFzUmVzaXplZCk7XG4gICAgfVxuICB9XG59O1xuXG5UZXh0Qm94LnByb3RvdHlwZS5pbnNlcnRUZXh0ID0gZnVuY3Rpb24odGV4dCkge1xuXG4gIC8vIGluc2VydFRleHQgY29tbWFuZCBub3Qgc3VwcG9ydGVkIGJ5IEludGVybmV0IEV4cGxvcmVyXG4gIHZhciBzdWNjZXNzID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgdGV4dCk7XG5cbiAgaWYgKHN1Y2Nlc3MpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9pbnNlcnRUZXh0SUUodGV4dCk7XG59O1xuXG5UZXh0Qm94LnByb3RvdHlwZS5faW5zZXJ0VGV4dElFID0gZnVuY3Rpb24odGV4dCkge1xuXG4gIC8vIEludGVybmV0IEV4cGxvcmVyXG4gIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXG4gICAgICBzdGFydENvbnRhaW5lciA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgZW5kQ29udGFpbmVyID0gcmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgc3RhcnRPZmZzZXQgPSByYW5nZS5zdGFydE9mZnNldCxcbiAgICAgIGVuZE9mZnNldCA9IHJhbmdlLmVuZE9mZnNldCxcbiAgICAgIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG5cbiAgdmFyIGNoaWxkTm9kZXNBcnJheSA9IHRvQXJyYXkoY29tbW9uQW5jZXN0b3JDb250YWluZXIuY2hpbGROb2Rlcyk7XG5cbiAgdmFyIGNvbnRhaW5lcixcbiAgICAgIG9mZnNldDtcblxuICBpZiAoaXNUZXh0Tm9kZShjb21tb25BbmNlc3RvckNvbnRhaW5lcikpIHtcbiAgICB2YXIgY29udGFpbmVyVGV4dENvbnRlbnQgPSBzdGFydENvbnRhaW5lci50ZXh0Q29udGVudDtcblxuICAgIHN0YXJ0Q29udGFpbmVyLnRleHRDb250ZW50ID1cbiAgICAgIGNvbnRhaW5lclRleHRDb250ZW50LnN1YnN0cmluZygwLCBzdGFydE9mZnNldClcbiAgICAgICsgdGV4dFxuICAgICAgKyBjb250YWluZXJUZXh0Q29udGVudC5zdWJzdHJpbmcoZW5kT2Zmc2V0KTtcblxuICAgIGNvbnRhaW5lciA9IHN0YXJ0Q29udGFpbmVyO1xuICAgIG9mZnNldCA9IHN0YXJ0T2Zmc2V0ICsgdGV4dC5sZW5ndGg7XG5cbiAgfSBlbHNlIGlmIChzdGFydENvbnRhaW5lciA9PT0gdGhpcy5jb250ZW50ICYmIGVuZENvbnRhaW5lciA9PT0gdGhpcy5jb250ZW50KSB7XG4gICAgdmFyIHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG5cbiAgICB0aGlzLmNvbnRlbnQuaW5zZXJ0QmVmb3JlKHRleHROb2RlLCBjaGlsZE5vZGVzQXJyYXlbc3RhcnRPZmZzZXRdKTtcblxuICAgIGNvbnRhaW5lciA9IHRleHROb2RlO1xuICAgIG9mZnNldCA9IHRleHROb2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgc3RhcnRDb250YWluZXJDaGlsZEluZGV4ID0gY2hpbGROb2Rlc0FycmF5LmluZGV4T2Yoc3RhcnRDb250YWluZXIpLFxuICAgICAgICBlbmRDb250YWluZXJDaGlsZEluZGV4ID0gY2hpbGROb2Rlc0FycmF5LmluZGV4T2YoZW5kQ29udGFpbmVyKTtcblxuICAgIGNoaWxkTm9kZXNBcnJheS5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkTm9kZSwgaW5kZXgpIHtcblxuICAgICAgaWYgKGluZGV4ID09PSBzdGFydENvbnRhaW5lckNoaWxkSW5kZXgpIHtcbiAgICAgICAgY2hpbGROb2RlLnRleHRDb250ZW50ID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lci50ZXh0Q29udGVudC5zdWJzdHJpbmcoMCwgc3RhcnRPZmZzZXQpICtcbiAgICAgICAgICB0ZXh0ICtcbiAgICAgICAgICBlbmRDb250YWluZXIudGV4dENvbnRlbnQuc3Vic3RyaW5nKGVuZE9mZnNldCk7XG4gICAgICB9IGVsc2UgaWYgKGluZGV4ID4gc3RhcnRDb250YWluZXJDaGlsZEluZGV4ICYmIGluZGV4IDw9IGVuZENvbnRhaW5lckNoaWxkSW5kZXgpIHtcbiAgICAgICAgZG9tUmVtb3ZlKGNoaWxkTm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIgPSBzdGFydENvbnRhaW5lcjtcbiAgICBvZmZzZXQgPSBzdGFydE9mZnNldCArIHRleHQubGVuZ3RoO1xuICB9XG5cbiAgaWYgKGNvbnRhaW5lciAmJiBvZmZzZXQgIT09IHVuZGVmaW5lZCkge1xuXG4gICAgLy8gaXMgbmVjZXNzYXJ5IGluIEludGVybmV0IEV4cGxvcmVyXG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuc2V0U2VsZWN0aW9uKGNvbnRhaW5lciwgb2Zmc2V0KTtcbiAgICB9KTtcbiAgfVxufTtcblxuLyoqXG4gKiBBdXRvbWF0aWNhbGx5IHJlc2l6ZSBlbGVtZW50IHZlcnRpY2FsbHkgdG8gZml0IGl0cyBjb250ZW50LlxuICovXG5UZXh0Qm94LnByb3RvdHlwZS5hdXRvUmVzaXplID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCxcbiAgICAgIGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG5cbiAgdmFyIGZvbnRTaXplID0gcGFyc2VJbnQodGhpcy5zdHlsZS5mb250U2l6ZSkgfHwgMTI7XG5cbiAgaWYgKGNvbnRlbnQuc2Nyb2xsSGVpZ2h0ID4gcGFyZW50Lm9mZnNldEhlaWdodCB8fFxuICAgICAgY29udGVudC5zY3JvbGxIZWlnaHQgPCBwYXJlbnQub2Zmc2V0SGVpZ2h0IC0gZm9udFNpemUpIHtcbiAgICB2YXIgYm91bmRzID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgdmFyIGhlaWdodCA9IGNvbnRlbnQuc2Nyb2xsSGVpZ2h0O1xuICAgIHBhcmVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuXG4gICAgdGhpcy5yZXNpemVIYW5kbGVyKHtcbiAgICAgIHdpZHRoOiBib3VuZHMud2lkdGgsXG4gICAgICBoZWlnaHQ6IGJvdW5kcy5oZWlnaHQsXG4gICAgICBkeDogMCxcbiAgICAgIGR5OiBoZWlnaHQgLSBib3VuZHMuaGVpZ2h0XG4gICAgfSk7XG4gIH1cbn07XG5cbi8qKlxuICogTWFrZSBhbiBlbGVtZW50IHJlc2l6YWJsZSBieSBhZGRpbmcgYSByZXNpemUgaGFuZGxlLlxuICovXG5UZXh0Qm94LnByb3RvdHlwZS5yZXNpemFibGUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCxcbiAgICAgIHJlc2l6ZUhhbmRsZSA9IHRoaXMucmVzaXplSGFuZGxlO1xuXG4gIHZhciBtaW5XaWR0aCA9IHBhcnNlSW50KHRoaXMuc3R5bGUubWluV2lkdGgpIHx8IDAsXG4gICAgICBtaW5IZWlnaHQgPSBwYXJzZUludCh0aGlzLnN0eWxlLm1pbkhlaWdodCkgfHwgMCxcbiAgICAgIG1heFdpZHRoID0gcGFyc2VJbnQodGhpcy5zdHlsZS5tYXhXaWR0aCkgfHwgSW5maW5pdHksXG4gICAgICBtYXhIZWlnaHQgPSBwYXJzZUludCh0aGlzLnN0eWxlLm1heEhlaWdodCkgfHwgSW5maW5pdHk7XG5cbiAgaWYgKCFyZXNpemVIYW5kbGUpIHtcbiAgICByZXNpemVIYW5kbGUgPSB0aGlzLnJlc2l6ZUhhbmRsZSA9IGRvbWlmeShcbiAgICAgICc8ZGl2IGNsYXNzPVwiZGpzLWRpcmVjdC1lZGl0aW5nLXJlc2l6ZS1oYW5kbGVcIj48L2Rpdj4nXG4gICAgKTtcblxuICAgIHZhciBzdGFydFgsIHN0YXJ0WSwgc3RhcnRXaWR0aCwgc3RhcnRIZWlnaHQ7XG5cbiAgICB2YXIgb25Nb3VzZURvd24gPSBmdW5jdGlvbihlKSB7XG4gICAgICBwcmV2ZW50RGVmYXVsdChlKTtcbiAgICAgIHN0b3BQcm9wYWdhdGlvbihlKTtcblxuICAgICAgc3RhcnRYID0gZS5jbGllbnRYO1xuICAgICAgc3RhcnRZID0gZS5jbGllbnRZO1xuXG4gICAgICB2YXIgYm91bmRzID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICBzdGFydFdpZHRoID0gYm91bmRzLndpZHRoO1xuICAgICAgc3RhcnRIZWlnaHQgPSBib3VuZHMuaGVpZ2h0O1xuXG4gICAgICBkb21FdmVudC5iaW5kKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgICAgZG9tRXZlbnQuYmluZChkb2N1bWVudCwgJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgIH07XG5cbiAgICB2YXIgb25Nb3VzZU1vdmUgPSBmdW5jdGlvbihlKSB7XG4gICAgICBwcmV2ZW50RGVmYXVsdChlKTtcbiAgICAgIHN0b3BQcm9wYWdhdGlvbihlKTtcblxuICAgICAgdmFyIG5ld1dpZHRoID0gbWluKG1heChzdGFydFdpZHRoICsgZS5jbGllbnRYIC0gc3RhcnRYLCBtaW5XaWR0aCksIG1heFdpZHRoKTtcbiAgICAgIHZhciBuZXdIZWlnaHQgPSBtaW4obWF4KHN0YXJ0SGVpZ2h0ICsgZS5jbGllbnRZIC0gc3RhcnRZLCBtaW5IZWlnaHQpLCBtYXhIZWlnaHQpO1xuXG4gICAgICBwYXJlbnQuc3R5bGUud2lkdGggPSBuZXdXaWR0aCArICdweCc7XG4gICAgICBwYXJlbnQuc3R5bGUuaGVpZ2h0ID0gbmV3SGVpZ2h0ICsgJ3B4JztcblxuICAgICAgc2VsZi5yZXNpemVIYW5kbGVyKHtcbiAgICAgICAgd2lkdGg6IHN0YXJ0V2lkdGgsXG4gICAgICAgIGhlaWdodDogc3RhcnRIZWlnaHQsXG4gICAgICAgIGR4OiBlLmNsaWVudFggLSBzdGFydFgsXG4gICAgICAgIGR5OiBlLmNsaWVudFkgLSBzdGFydFlcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB2YXIgb25Nb3VzZVVwID0gZnVuY3Rpb24oZSkge1xuICAgICAgcHJldmVudERlZmF1bHQoZSk7XG4gICAgICBzdG9wUHJvcGFnYXRpb24oZSk7XG5cbiAgICAgIGRvbUV2ZW50LnVuYmluZChkb2N1bWVudCwnbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUsIGZhbHNlKTtcbiAgICAgIGRvbUV2ZW50LnVuYmluZChkb2N1bWVudCwgJ21vdXNldXAnLCBvbk1vdXNlVXAsIGZhbHNlKTtcbiAgICB9O1xuXG4gICAgZG9tRXZlbnQuYmluZChyZXNpemVIYW5kbGUsICdtb3VzZWRvd24nLCBvbk1vdXNlRG93bik7XG4gIH1cblxuICBhc3NpZ24ocmVzaXplSGFuZGxlLnN0eWxlLCB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgYm90dG9tOiAnMHB4JyxcbiAgICByaWdodDogJzBweCcsXG4gICAgY3Vyc29yOiAnbndzZS1yZXNpemUnLFxuICAgIHdpZHRoOiAnMCcsXG4gICAgaGVpZ2h0OiAnMCcsXG4gICAgYm9yZGVyVG9wOiAocGFyc2VJbnQodGhpcy5zdHlsZS5mb250U2l6ZSkgLyA0IHx8IDMpICsgJ3B4IHNvbGlkIHRyYW5zcGFyZW50JyxcbiAgICBib3JkZXJSaWdodDogKHBhcnNlSW50KHRoaXMuc3R5bGUuZm9udFNpemUpIC8gNCB8fCAzKSArICdweCBzb2xpZCAjY2NjJyxcbiAgICBib3JkZXJCb3R0b206IChwYXJzZUludCh0aGlzLnN0eWxlLmZvbnRTaXplKSAvIDQgfHwgMykgKyAncHggc29saWQgI2NjYycsXG4gICAgYm9yZGVyTGVmdDogKHBhcnNlSW50KHRoaXMuc3R5bGUuZm9udFNpemUpIC8gNCB8fCAzKSArICdweCBzb2xpZCB0cmFuc3BhcmVudCdcbiAgfSk7XG5cbiAgcGFyZW50LmFwcGVuZENoaWxkKHJlc2l6ZUhhbmRsZSk7XG59O1xuXG5cbi8qKlxuICogQ2xlYXIgY29udGVudCBhbmQgc3R5bGUgb2YgdGhlIHRleHRib3gsIHVuYmluZCBsaXN0ZW5lcnMgYW5kXG4gKiByZXNldCBDU1Mgc3R5bGUuXG4gKi9cblRleHRCb3gucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50LFxuICAgICAgY29udGVudCA9IHRoaXMuY29udGVudCxcbiAgICAgIHJlc2l6ZUhhbmRsZSA9IHRoaXMucmVzaXplSGFuZGxlO1xuXG4gIC8vIGNsZWFyIGNvbnRlbnRcbiAgY29udGVudC5pbm5lclRleHQgPSAnJztcblxuICAvLyBjbGVhciBzdHlsZXNcbiAgcGFyZW50LnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgY29udGVudC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XG5cbiAgZG9tRXZlbnQudW5iaW5kKGNvbnRlbnQsICdrZXlkb3duJywgdGhpcy5rZXlIYW5kbGVyKTtcbiAgZG9tRXZlbnQudW5iaW5kKGNvbnRlbnQsICdtb3VzZWRvd24nLCBzdG9wUHJvcGFnYXRpb24pO1xuICBkb21FdmVudC51bmJpbmQoY29udGVudCwgJ2lucHV0JywgdGhpcy5hdXRvUmVzaXplKTtcbiAgZG9tRXZlbnQudW5iaW5kKGNvbnRlbnQsICdwYXN0ZScsIHRoaXMuaGFuZGxlUGFzdGUpO1xuXG4gIGlmIChyZXNpemVIYW5kbGUpIHtcbiAgICByZXNpemVIYW5kbGUucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuXG4gICAgZG9tUmVtb3ZlKHJlc2l6ZUhhbmRsZSk7XG4gIH1cblxuICBkb21SZW1vdmUocGFyZW50KTtcbn07XG5cblxuVGV4dEJveC5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuY29udGVudC5pbm5lclRleHQudHJpbSgpO1xufTtcblxuXG5UZXh0Qm94LnByb3RvdHlwZS5nZXRTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKSxcbiAgICAgIHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG5cbiAgcmV0dXJuIHJhbmdlO1xufTtcblxuXG5UZXh0Qm94LnByb3RvdHlwZS5zZXRTZWxlY3Rpb24gPSBmdW5jdGlvbihjb250YWluZXIsIG9mZnNldCkge1xuICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXG4gIGlmIChjb250YWluZXIgPT09IG51bGwpIHtcbiAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHModGhpcy5jb250ZW50KTtcbiAgfSBlbHNlIHtcbiAgICByYW5nZS5zZXRTdGFydChjb250YWluZXIsIG9mZnNldCk7XG4gICAgcmFuZ2Uuc2V0RW5kKGNvbnRhaW5lciwgb2Zmc2V0KTtcbiAgfVxuXG4gIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xufTtcbiIsImltcG9ydCB7XG4gIGZvckVhY2gsXG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGRlbGVnYXRlIGFzIGRvbURlbGVnYXRlLFxuICBxdWVyeSBhcyBkb21RdWVyeSxcbiAgcXVlcnlBbGwgYXMgZG9tUXVlcnlBbGxcbn0gZnJvbSAnbWluLWRvbSc7XG5cbmltcG9ydCB7IGlzUHJpbWFyeUJ1dHRvbiB9IGZyb20gJy4uLy4uL3V0aWwvTW91c2UnO1xuXG5pbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGUsXG4gIHJlbW92ZSBhcyBzdmdSZW1vdmVcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQge1xuICBjcmVhdGVMaW5lLFxuICB1cGRhdGVMaW5lXG59IGZyb20gJy4uLy4uL3V0aWwvUmVuZGVyVXRpbCc7XG5cbmZ1bmN0aW9uIGFsbG93QWxsKGUpIHsgcmV0dXJuIHRydWU7IH1cblxudmFyIExPV19QUklPUklUWSA9IDUwMDtcblxuXG4vKipcbiAqIEEgcGx1Z2luIHRoYXQgcHJvdmlkZXMgaW50ZXJhY3Rpb24gZXZlbnRzIGZvciBkaWFncmFtIGVsZW1lbnRzLlxuICpcbiAqIEl0IGVtaXRzIHRoZSBmb2xsb3dpbmcgZXZlbnRzOlxuICpcbiAqICAgKiBlbGVtZW50LmNsaWNrXG4gKiAgICogZWxlbWVudC5jb250ZXh0bWVudVxuICogICAqIGVsZW1lbnQuZGJsY2xpY2tcbiAqICAgKiBlbGVtZW50LmhvdmVyXG4gKiAgICogZWxlbWVudC5tb3VzZWRvd25cbiAqICAgKiBlbGVtZW50Lm1vdXNlbW92ZVxuICogICAqIGVsZW1lbnQubW91c2V1cFxuICogICAqIGVsZW1lbnQub3V0XG4gKlxuICogRWFjaCBldmVudCBpcyBhIHR1cGxlIHsgZWxlbWVudCwgZ2Z4LCBvcmlnaW5hbEV2ZW50IH0uXG4gKlxuICogQ2FuY2VsaW5nIHRoZSBldmVudCB2aWEgRXZlbnQjcHJldmVudERlZmF1bHQoKVxuICogcHJldmVudHMgdGhlIG9yaWdpbmFsIERPTSBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSW50ZXJhY3Rpb25FdmVudHMoZXZlbnRCdXMsIGVsZW1lbnRSZWdpc3RyeSwgc3R5bGVzKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8qKlxuICAgKiBGaXJlIGFuIGludGVyYWN0aW9uIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBsb2NhbCBldmVudCBuYW1lLCBlLmcuIGVsZW1lbnQuY2xpY2suXG4gICAqIEBwYXJhbSB7RE9NRXZlbnR9IGV2ZW50IG5hdGl2ZSBldmVudFxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBbZWxlbWVudF0gdGhlIGRpYWdyYW0gZWxlbWVudCB0byBlbWl0IHRoZSBldmVudCBvbjtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvIHRoZSBldmVudCB0YXJnZXRcbiAgICovXG4gIGZ1bmN0aW9uIGZpcmUodHlwZSwgZXZlbnQsIGVsZW1lbnQpIHtcblxuICAgIGlmIChpc0lnbm9yZWQodHlwZSwgZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldCwgZ2Z4LCByZXR1cm5WYWx1ZTtcblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgdGFyZ2V0ID0gZXZlbnQuZGVsZWdhdGVUYXJnZXQgfHwgZXZlbnQudGFyZ2V0O1xuXG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGdmeCA9IHRhcmdldDtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRSZWdpc3RyeS5nZXQoZ2Z4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZ2Z4ID0gZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmICghZ2Z4IHx8ICFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuVmFsdWUgPSBldmVudEJ1cy5maXJlKHR5cGUsIHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBnZng6IGdmeCxcbiAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50XG4gICAgfSk7XG5cbiAgICBpZiAocmV0dXJuVmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETyhuaWtrdSk6IGRvY3VtZW50IHRoaXNcbiAgdmFyIGhhbmRsZXJzID0ge307XG5cbiAgZnVuY3Rpb24gbW91c2VIYW5kbGVyKGxvY2FsRXZlbnROYW1lKSB7XG4gICAgcmV0dXJuIGhhbmRsZXJzW2xvY2FsRXZlbnROYW1lXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzSWdub3JlZChsb2NhbEV2ZW50TmFtZSwgZXZlbnQpIHtcblxuICAgIHZhciBmaWx0ZXIgPSBpZ25vcmVkRmlsdGVyc1tsb2NhbEV2ZW50TmFtZV0gfHwgaXNQcmltYXJ5QnV0dG9uO1xuXG4gICAgLy8gb25seSByZWFjdCBvbiBsZWZ0IG1vdXNlIGJ1dHRvbiBpbnRlcmFjdGlvbnNcbiAgICAvLyBleGNlcHQgZm9yIGludGVyYWN0aW9uIGV2ZW50cyB0aGF0IGFyZSBlbmFibGVkXG4gICAgLy8gZm9yIHNlY3VuZGFyeSBtb3VzZSBidXR0b25cbiAgICByZXR1cm4gIWZpbHRlcihldmVudCk7XG4gIH1cblxuICB2YXIgYmluZGluZ3MgPSB7XG4gICAgY2xpY2s6ICdlbGVtZW50LmNsaWNrJyxcbiAgICBjb250ZXh0bWVudTogJ2VsZW1lbnQuY29udGV4dG1lbnUnLFxuICAgIGRibGNsaWNrOiAnZWxlbWVudC5kYmxjbGljaycsXG4gICAgbW91c2Vkb3duOiAnZWxlbWVudC5tb3VzZWRvd24nLFxuICAgIG1vdXNlbW92ZTogJ2VsZW1lbnQubW91c2Vtb3ZlJyxcbiAgICBtb3VzZW92ZXI6ICdlbGVtZW50LmhvdmVyJyxcbiAgICBtb3VzZW91dDogJ2VsZW1lbnQub3V0JyxcbiAgICBtb3VzZXVwOiAnZWxlbWVudC5tb3VzZXVwJyxcbiAgfTtcblxuICB2YXIgaWdub3JlZEZpbHRlcnMgPSB7XG4gICAgJ2VsZW1lbnQuY29udGV4dG1lbnUnOiBhbGxvd0FsbFxuICB9O1xuXG5cbiAgLy8gbWFudWFsIGV2ZW50IHRyaWdnZXIgLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGFuIGludGVyYWN0aW9uIGV2ZW50IChiYXNlZCBvbiBhIG5hdGl2ZSBkb20gZXZlbnQpXG4gICAqIG9uIHRoZSB0YXJnZXQgc2hhcGUgb3IgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50TmFtZSB0aGUgbmFtZSBvZiB0aGUgdHJpZ2dlcmVkIERPTSBldmVudFxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50XG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IHRhcmdldEVsZW1lbnRcbiAgICovXG4gIGZ1bmN0aW9uIHRyaWdnZXJNb3VzZUV2ZW50KGV2ZW50TmFtZSwgZXZlbnQsIHRhcmdldEVsZW1lbnQpIHtcblxuICAgIC8vIGkuZS4gZWxlbWVudC5tb3VzZWRvd24uLi5cbiAgICB2YXIgbG9jYWxFdmVudE5hbWUgPSBiaW5kaW5nc1tldmVudE5hbWVdO1xuXG4gICAgaWYgKCFsb2NhbEV2ZW50TmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bm1hcHBlZCBET00gZXZlbnQgbmFtZSA8JyArIGV2ZW50TmFtZSArICc+Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpcmUobG9jYWxFdmVudE5hbWUsIGV2ZW50LCB0YXJnZXRFbGVtZW50KTtcbiAgfVxuXG5cbiAgdmFyIEVMRU1FTlRfU0VMRUNUT1IgPSAnc3ZnLCAuZGpzLWVsZW1lbnQnO1xuXG4gIC8vIGV2ZW50IGhhbmRsaW5nIC8vLy8vLy9cblxuICBmdW5jdGlvbiByZWdpc3RlckV2ZW50KG5vZGUsIGV2ZW50LCBsb2NhbEV2ZW50LCBpZ25vcmVkRmlsdGVyKSB7XG5cbiAgICB2YXIgaGFuZGxlciA9IGhhbmRsZXJzW2xvY2FsRXZlbnRdID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGZpcmUobG9jYWxFdmVudCwgZXZlbnQpO1xuICAgIH07XG5cbiAgICBpZiAoaWdub3JlZEZpbHRlcikge1xuICAgICAgaWdub3JlZEZpbHRlcnNbbG9jYWxFdmVudF0gPSBpZ25vcmVkRmlsdGVyO1xuICAgIH1cblxuICAgIGhhbmRsZXIuJGRlbGVnYXRlID0gZG9tRGVsZWdhdGUuYmluZChub2RlLCBFTEVNRU5UX1NFTEVDVE9SLCBldmVudCwgaGFuZGxlcik7XG4gIH1cblxuICBmdW5jdGlvbiB1bnJlZ2lzdGVyRXZlbnQobm9kZSwgZXZlbnQsIGxvY2FsRXZlbnQpIHtcblxuICAgIHZhciBoYW5kbGVyID0gbW91c2VIYW5kbGVyKGxvY2FsRXZlbnQpO1xuXG4gICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZG9tRGVsZWdhdGUudW5iaW5kKG5vZGUsIGV2ZW50LCBoYW5kbGVyLiRkZWxlZ2F0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3RlckV2ZW50cyhzdmcpIHtcbiAgICBmb3JFYWNoKGJpbmRpbmdzLCBmdW5jdGlvbih2YWwsIGtleSkge1xuICAgICAgcmVnaXN0ZXJFdmVudChzdmcsIGtleSwgdmFsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVucmVnaXN0ZXJFdmVudHMoc3ZnKSB7XG4gICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24odmFsLCBrZXkpIHtcbiAgICAgIHVucmVnaXN0ZXJFdmVudChzdmcsIGtleSwgdmFsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGV2ZW50QnVzLm9uKCdjYW52YXMuZGVzdHJveScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdW5yZWdpc3RlckV2ZW50cyhldmVudC5zdmcpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignY2FudmFzLmluaXQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHJlZ2lzdGVyRXZlbnRzKGV2ZW50LnN2Zyk7XG4gIH0pO1xuXG5cbiAgLy8gaGl0IGJveCB1cGRhdGluZyAvLy8vLy8vLy8vLy8vLy8vXG5cbiAgZXZlbnRCdXMub24oWyAnc2hhcGUuYWRkZWQnLCAnY29ubmVjdGlvbi5hZGRlZCcgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQsXG4gICAgICAgIGdmeCA9IGV2ZW50LmdmeDtcblxuICAgIGV2ZW50QnVzLmZpcmUoJ2ludGVyYWN0aW9uRXZlbnRzLmNyZWF0ZUhpdCcsIHsgZWxlbWVudDogZWxlbWVudCwgZ2Z4OiBnZnggfSk7XG4gIH0pO1xuXG4gIC8vIFVwZGF0ZSBkanMtaGl0IG9uIGNoYW5nZS5cbiAgLy8gQSBsb3cgcHJpb3J0aXR5IGlzIG5lY2Vzc2FyeSwgYmVjYXVzZSBkanMtaGl0IG9mIGxhYmVscyBoYXMgdG8gYmUgdXBkYXRlZFxuICAvLyBhZnRlciB0aGUgbGFiZWwgYm91bmRzIGhhdmUgYmVlbiB1cGRhdGVkIGluIHRoZSByZW5kZXJlci5cbiAgZXZlbnRCdXMub24oW1xuICAgICdzaGFwZS5jaGFuZ2VkJyxcbiAgICAnY29ubmVjdGlvbi5jaGFuZ2VkJ1xuICBdLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQsXG4gICAgICAgIGdmeCA9IGV2ZW50LmdmeDtcblxuICAgIGV2ZW50QnVzLmZpcmUoJ2ludGVyYWN0aW9uRXZlbnRzLnVwZGF0ZUhpdCcsIHsgZWxlbWVudDogZWxlbWVudCwgZ2Z4OiBnZnggfSk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdpbnRlcmFjdGlvbkV2ZW50cy5jcmVhdGVIaXQnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50LFxuICAgICAgICBnZnggPSBldmVudC5nZng7XG5cbiAgICBzZWxmLmNyZWF0ZURlZmF1bHRIaXQoZWxlbWVudCwgZ2Z4KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2ludGVyYWN0aW9uRXZlbnRzLnVwZGF0ZUhpdCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBldmVudC5lbGVtZW50LFxuICAgICAgICBnZnggPSBldmVudC5nZng7XG5cbiAgICBzZWxmLnVwZGF0ZURlZmF1bHRIaXQoZWxlbWVudCwgZ2Z4KTtcbiAgfSk7XG5cblxuICAvLyBoaXQgc3R5bGVzIC8vLy8vLy8vLy8vL1xuXG4gIHZhciBTVFJPS0VfSElUX1NUWUxFID0gY3JlYXRlSGl0U3R5bGUoJ2Rqcy1oaXQgZGpzLWhpdC1zdHJva2UnKTtcblxuICB2YXIgQ0xJQ0tfU1RST0tFX0hJVF9TVFlMRSA9IGNyZWF0ZUhpdFN0eWxlKCdkanMtaGl0IGRqcy1oaXQtY2xpY2stc3Ryb2tlJyk7XG5cbiAgdmFyIEFMTF9ISVRfU1RZTEUgPSBjcmVhdGVIaXRTdHlsZSgnZGpzLWhpdCBkanMtaGl0LWFsbCcpO1xuXG4gIHZhciBISVRfVFlQRVMgPSB7XG4gICAgJ2FsbCc6IEFMTF9ISVRfU1RZTEUsXG4gICAgJ2NsaWNrLXN0cm9rZSc6IENMSUNLX1NUUk9LRV9ISVRfU1RZTEUsXG4gICAgJ3N0cm9rZSc6IFNUUk9LRV9ISVRfU1RZTEVcbiAgfTtcblxuICBmdW5jdGlvbiBjcmVhdGVIaXRTdHlsZShjbGFzc05hbWVzLCBhdHRycykge1xuXG4gICAgYXR0cnMgPSBhc3NpZ24oe1xuICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgc3Ryb2tlV2lkdGg6IDE1XG4gICAgfSwgYXR0cnMgfHwge30pO1xuXG4gICAgcmV0dXJuIHN0eWxlcy5jbHMoY2xhc3NOYW1lcywgWyAnbm8tZmlsbCcsICduby1ib3JkZXInIF0sIGF0dHJzKTtcbiAgfVxuXG5cbiAgLy8gc3R5bGUgaGVscGVycyAvLy8vLy8vLy8vLy8vLy9cblxuICBmdW5jdGlvbiBhcHBseVN0eWxlKGhpdCwgdHlwZSkge1xuXG4gICAgdmFyIGF0dHJzID0gSElUX1RZUEVTW3R5cGVdO1xuXG4gICAgaWYgKCFhdHRycykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGhpdCB0eXBlIDwnICsgdHlwZSArICc+Jyk7XG4gICAgfVxuXG4gICAgc3ZnQXR0cihoaXQsIGF0dHJzKTtcblxuICAgIHJldHVybiBoaXQ7XG4gIH1cblxuICBmdW5jdGlvbiBhcHBlbmRIaXQoZ2Z4LCBoaXQpIHtcbiAgICBzdmdBcHBlbmQoZ2Z4LCBoaXQpO1xuICB9XG5cblxuICAvLyBBUElcblxuICAvKipcbiAgICogUmVtb3ZlIGhpbnRzIG9uIHRoZSBnaXZlbiBncmFwaGljcy5cbiAgICpcbiAgICogQHBhcmFtIHtTVkdFbGVtZW50fSBnZnhcbiAgICovXG4gIHRoaXMucmVtb3ZlSGl0cyA9IGZ1bmN0aW9uKGdmeCkge1xuICAgIHZhciBoaXRzID0gZG9tUXVlcnlBbGwoJy5kanMtaGl0JywgZ2Z4KTtcblxuICAgIGZvckVhY2goaGl0cywgc3ZnUmVtb3ZlKTtcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlIGRlZmF1bHQgaGl0IGZvciB0aGUgZ2l2ZW4gZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0ge1NWR0VsZW1lbnR9IGdmeFxuICAgKlxuICAgKiBAcmV0dXJuIHtTVkdFbGVtZW50fSBjcmVhdGVkIGhpdFxuICAgKi9cbiAgdGhpcy5jcmVhdGVEZWZhdWx0SGl0ID0gZnVuY3Rpb24oZWxlbWVudCwgZ2Z4KSB7XG4gICAgdmFyIHdheXBvaW50cyA9IGVsZW1lbnQud2F5cG9pbnRzLFxuICAgICAgICBpc0ZyYW1lID0gZWxlbWVudC5pc0ZyYW1lLFxuICAgICAgICBib3hUeXBlO1xuXG4gICAgaWYgKHdheXBvaW50cykge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlV2F5cG9pbnRzSGl0KGdmeCwgd2F5cG9pbnRzKTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICBib3hUeXBlID0gaXNGcmFtZSA/ICdzdHJva2UnIDogJ2FsbCc7XG5cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUJveEhpdChnZngsIGJveFR5cGUsIHtcbiAgICAgICAgd2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHRcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlIGhpdHMgZm9yIHRoZSBnaXZlbiB3YXlwb2ludHMuXG4gICAqXG4gICAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gZ2Z4XG4gICAqIEBwYXJhbSB7QXJyYXk8UG9pbnQ+fSB3YXlwb2ludHNcbiAgICpcbiAgICogQHJldHVybiB7U1ZHRWxlbWVudH1cbiAgICovXG4gIHRoaXMuY3JlYXRlV2F5cG9pbnRzSGl0ID0gZnVuY3Rpb24oZ2Z4LCB3YXlwb2ludHMpIHtcblxuICAgIHZhciBoaXQgPSBjcmVhdGVMaW5lKHdheXBvaW50cyk7XG5cbiAgICBhcHBseVN0eWxlKGhpdCwgJ3N0cm9rZScpO1xuXG4gICAgYXBwZW5kSGl0KGdmeCwgaGl0KTtcblxuICAgIHJldHVybiBoaXQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBoaXRzIGZvciBhIGJveC5cbiAgICpcbiAgICogQHBhcmFtIHtTVkdFbGVtZW50fSBnZnhcbiAgICogQHBhcmFtIHtTdHJpbmd9IGhpdFR5cGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGF0dHJzXG4gICAqXG4gICAqIEByZXR1cm4ge1NWR0VsZW1lbnR9XG4gICAqL1xuICB0aGlzLmNyZWF0ZUJveEhpdCA9IGZ1bmN0aW9uKGdmeCwgdHlwZSwgYXR0cnMpIHtcblxuICAgIGF0dHJzID0gYXNzaWduKHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfSwgYXR0cnMpO1xuXG4gICAgdmFyIGhpdCA9IHN2Z0NyZWF0ZSgncmVjdCcpO1xuXG4gICAgYXBwbHlTdHlsZShoaXQsIHR5cGUpO1xuXG4gICAgc3ZnQXR0cihoaXQsIGF0dHJzKTtcblxuICAgIGFwcGVuZEhpdChnZngsIGhpdCk7XG5cbiAgICByZXR1cm4gaGl0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgZGVmYXVsdCBoaXQgb2YgdGhlIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IGdmeFxuICAgKlxuICAgKiBAcmV0dXJuIHtTVkdFbGVtZW50fSB1cGRhdGVkIGhpdFxuICAgKi9cbiAgdGhpcy51cGRhdGVEZWZhdWx0SGl0ID0gZnVuY3Rpb24oZWxlbWVudCwgZ2Z4KSB7XG5cbiAgICB2YXIgaGl0ID0gZG9tUXVlcnkoJy5kanMtaGl0JywgZ2Z4KTtcblxuICAgIGlmICghaGl0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQud2F5cG9pbnRzKSB7XG4gICAgICB1cGRhdGVMaW5lKGhpdCwgZWxlbWVudC53YXlwb2ludHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdmdBdHRyKGhpdCwge1xuICAgICAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBlbGVtZW50LmhlaWdodFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpdDtcbiAgfTtcblxuICB0aGlzLmZpcmUgPSBmaXJlO1xuXG4gIHRoaXMudHJpZ2dlck1vdXNlRXZlbnQgPSB0cmlnZ2VyTW91c2VFdmVudDtcblxuICB0aGlzLm1vdXNlSGFuZGxlciA9IG1vdXNlSGFuZGxlcjtcblxuICB0aGlzLnJlZ2lzdGVyRXZlbnQgPSByZWdpc3RlckV2ZW50O1xuICB0aGlzLnVucmVnaXN0ZXJFdmVudCA9IHVucmVnaXN0ZXJFdmVudDtcbn1cblxuXG5JbnRlcmFjdGlvbkV2ZW50cy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ3N0eWxlcydcbl07XG5cblxuLyoqXG4gKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIG1vdXNlIGhvdmVyZWQgb3ZlciBhbiBlbGVtZW50XG4gKlxuICogQGV2ZW50IGVsZW1lbnQuaG92ZXJcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuXG4vKipcbiAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgbW91c2UgaGFzIGxlZnQgYW4gZWxlbWVudFxuICpcbiAqIEBldmVudCBlbGVtZW50Lm91dFxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IGdmeFxuICogQHByb3BlcnR5IHtFdmVudH0gb3JpZ2luYWxFdmVudFxuICovXG5cbi8qKlxuICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBtb3VzZSBoYXMgY2xpY2tlZCBhbiBlbGVtZW50XG4gKlxuICogQGV2ZW50IGVsZW1lbnQuY2xpY2tcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHByb3BlcnR5IHtTVkdFbGVtZW50fSBnZnhcbiAqIEBwcm9wZXJ0eSB7RXZlbnR9IG9yaWdpbmFsRXZlbnRcbiAqL1xuXG4vKipcbiAqIEFuIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgbW91c2UgaGFzIGRvdWJsZSBjbGlja2VkIGFuIGVsZW1lbnRcbiAqXG4gKiBAZXZlbnQgZWxlbWVudC5kYmxjbGlja1xuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IGdmeFxuICogQHByb3BlcnR5IHtFdmVudH0gb3JpZ2luYWxFdmVudFxuICovXG5cbi8qKlxuICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBtb3VzZSBoYXMgZ29uZSBkb3duIG9uIGFuIGVsZW1lbnQuXG4gKlxuICogQGV2ZW50IGVsZW1lbnQubW91c2Vkb3duXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gZ2Z4XG4gKiBAcHJvcGVydHkge0V2ZW50fSBvcmlnaW5hbEV2ZW50XG4gKi9cblxuLyoqXG4gKiBBbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIG1vdXNlIGhhcyBnb25lIHVwIG9uIGFuIGVsZW1lbnQuXG4gKlxuICogQGV2ZW50IGVsZW1lbnQubW91c2V1cFxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJvcGVydHkge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcHJvcGVydHkge1NWR0VsZW1lbnR9IGdmeFxuICogQHByb3BlcnR5IHtFdmVudH0gb3JpZ2luYWxFdmVudFxuICovXG5cbi8qKlxuICogQW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBjb250ZXh0IG1lbnUgYWN0aW9uIGlzIHRyaWdnZXJlZFxuICogdmlhIG1vdXNlIG9yIHRvdWNoIGNvbnRyb2xzLlxuICpcbiAqIEBldmVudCBlbGVtZW50LmNvbnRleHRtZW51XG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7U1ZHRWxlbWVudH0gZ2Z4XG4gKiBAcHJvcGVydHkge0V2ZW50fSBvcmlnaW5hbEV2ZW50XG4gKi8iLCIvKipcbiAqIEEgc2ltcGxlIHRyYW5zbGF0aW9uIHN0dWIgdG8gYmUgdXNlZCBmb3IgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydFxuICogaW4gZGlhZ3JhbXMuIENhbiBiZSBlYXNpbHkgcmVwbGFjZWQgd2l0aCBhIG1vcmUgc29waGlzdGljYXRlZFxuICogc29sdXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyB1c2UgaXQgaW5zaWRlIGFueSBkaWFncmFtIGNvbXBvbmVudCBieSBpbmplY3RpbmcgYHRyYW5zbGF0ZWAuXG4gKlxuICogZnVuY3Rpb24gTXlTZXJ2aWNlKHRyYW5zbGF0ZSkge1xuICogICBhbGVydCh0cmFuc2xhdGUoJ0hFTExPIHt5b3V9JywgeyB5b3U6ICdZb3UhJyB9KSk7XG4gKiB9XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHRlbXBsYXRlIHRvIGludGVycG9sYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcGxhY2VtZW50c10gYSBtYXAgd2l0aCBzdWJzdGl0dXRlc1xuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIHRyYW5zbGF0ZWQgc3RyaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zbGF0ZSh0ZW1wbGF0ZSwgcmVwbGFjZW1lbnRzKSB7XG5cbiAgcmVwbGFjZW1lbnRzID0gcmVwbGFjZW1lbnRzIHx8IHt9O1xuXG4gIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC97KFtefV0rKX0vZywgZnVuY3Rpb24oXywga2V5KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VtZW50c1trZXldIHx8ICd7JyArIGtleSArICd9JztcbiAgfSk7XG59IiwiLyoqXG4gKiBGYWlsc2FmZSByZW1vdmUgYW4gZWxlbWVudCBmcm9tIGEgY29sbGVjdGlvblxuICpcbiAqIEBwYXJhbSAge0FycmF5PE9iamVjdD59IFtjb2xsZWN0aW9uXVxuICogQHBhcmFtICB7T2JqZWN0fSBbZWxlbWVudF1cbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBwcmV2aW91cyBpbmRleCBvZiB0aGUgZWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlKGNvbGxlY3Rpb24sIGVsZW1lbnQpIHtcblxuICBpZiAoIWNvbGxlY3Rpb24gfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICB2YXIgaWR4ID0gY29sbGVjdGlvbi5pbmRleE9mKGVsZW1lbnQpO1xuXG4gIGlmIChpZHggIT09IC0xKSB7XG4gICAgY29sbGVjdGlvbi5zcGxpY2UoaWR4LCAxKTtcbiAgfVxuXG4gIHJldHVybiBpZHg7XG59XG5cbi8qKlxuICogRmFpbCBzYXZlIGFkZCBhbiBlbGVtZW50IHRvIHRoZSBnaXZlbiBjb25uZWN0aW9uLCBlbnN1cmluZ1xuICogaXQgZG9lcyBub3QgeWV0IGV4aXN0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gY29sbGVjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZHhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZChjb2xsZWN0aW9uLCBlbGVtZW50LCBpZHgpIHtcblxuICBpZiAoIWNvbGxlY3Rpb24gfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIGlkeCAhPT0gJ251bWJlcicpIHtcbiAgICBpZHggPSAtMTtcbiAgfVxuXG4gIHZhciBjdXJyZW50SWR4ID0gY29sbGVjdGlvbi5pbmRleE9mKGVsZW1lbnQpO1xuXG4gIGlmIChjdXJyZW50SWR4ICE9PSAtMSkge1xuXG4gICAgaWYgKGN1cnJlbnRJZHggPT09IGlkeCkge1xuXG4gICAgICAvLyBub3RoaW5nIHRvIGRvLCBwb3NpdGlvbiBoYXMgbm90IGNoYW5nZWRcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuXG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuXG4gICAgICAgIC8vIHJlbW92ZSBmcm9tIGN1cnJlbnQgcG9zaXRpb25cbiAgICAgICAgY29sbGVjdGlvbi5zcGxpY2UoY3VycmVudElkeCwgMSk7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIC8vIGFscmVhZHkgZXhpc3RzIGluIGNvbGxlY3Rpb25cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChpZHggIT09IC0xKSB7XG5cbiAgICAvLyBpbnNlcnQgYXQgc3BlY2lmaWVkIHBvc2l0aW9uXG4gICAgY29sbGVjdGlvbi5zcGxpY2UoaWR4LCAwLCBlbGVtZW50KTtcbiAgfSBlbHNlIHtcblxuICAgIC8vIHB1c2ggdG8gZW5kXG4gICAgY29sbGVjdGlvbi5wdXNoKGVsZW1lbnQpO1xuICB9XG59XG5cblxuLyoqXG4gKiBGYWlsIHNhdmUgZ2V0IHRoZSBpbmRleCBvZiBhbiBlbGVtZW50IGluIGEgY29sbGVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7TnVtYmVyfSB0aGUgaW5kZXggb3IgLTEgaWYgY29sbGVjdGlvbiBvciBlbGVtZW50IGRvXG4gKiAgICAgICAgICAgICAgICAgIG5vdCBleGlzdCBvciB0aGUgZWxlbWVudCBpcyBub3QgY29udGFpbmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhPZihjb2xsZWN0aW9uLCBlbGVtZW50KSB7XG5cbiAgaWYgKCFjb2xsZWN0aW9uIHx8ICFlbGVtZW50KSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgcmV0dXJuIGNvbGxlY3Rpb24uaW5kZXhPZihlbGVtZW50KTtcbn1cbiIsInZhciBDTEFTU19QQVRURVJOID0gL15jbGFzcyAvO1xuXG5mdW5jdGlvbiBpc0NsYXNzKGZuKSB7XG4gIHJldHVybiBDTEFTU19QQVRURVJOLnRlc3QoZm4udG9TdHJpbmcoKSk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cblxuZnVuY3Rpb24gYW5ub3RhdGUoKSB7XG4gIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShhcmdzWzBdKSkge1xuICAgIGFyZ3MgPSBhcmdzWzBdO1xuICB9XG5cbiAgdmFyIGZuID0gYXJncy5wb3AoKTtcblxuICBmbi4kaW5qZWN0ID0gYXJncztcblxuICByZXR1cm4gZm47XG59XG5cbi8vIEN1cnJlbnQgbGltaXRhdGlvbnM6XG4vLyAtIGNhbid0IHB1dCBpbnRvIFwiZnVuY3Rpb24gYXJnXCIgY29tbWVudHNcbi8vIGZ1bmN0aW9uIC8qIChubyBwYXJlbnRoZXNpcyBsaWtlIHRoaXMpICovICgpe31cbi8vIGZ1bmN0aW9uIGFiYyggLyogeHggKG5vIHBhcmVudGhlc2lzIGxpa2UgdGhpcykgKi8gYSwgYikge31cbi8vXG4vLyBKdXN0IHB1dCB0aGUgY29tbWVudCBiZWZvcmUgZnVuY3Rpb24gb3IgaW5zaWRlOlxuLy8gLyogKCgodGhpcyBpcyBmaW5lKSkpICovIGZ1bmN0aW9uKGEsIGIpIHt9XG4vLyBmdW5jdGlvbiBhYmMoYSkgeyAvKiAoKCh0aGlzIGlzIGZpbmUpKSkgKi99XG4vL1xuLy8gLSBjYW4ndCByZWxpYWJseSBhdXRvLWFubm90YXRlIGNvbnN0cnVjdG9yOyB3ZSdsbCBtYXRjaCB0aGVcbi8vIGZpcnN0IGNvbnN0cnVjdG9yKC4uLikgcGF0dGVybiBmb3VuZCB3aGljaCBtYXkgYmUgdGhlIG9uZVxuLy8gb2YgYSBuZXN0ZWQgY2xhc3MsIHRvby5cblxudmFyIENPTlNUUlVDVE9SX0FSR1MgPSAvY29uc3RydWN0b3JcXHMqW14oXSpcXChcXHMqKFteKV0qKVxcKS9tO1xudmFyIEZOX0FSR1MgPSAvXmZ1bmN0aW9uXFxzKlteKF0qXFwoXFxzKihbXildKilcXCkvbTtcbnZhciBGTl9BUkcgPSAvXFwvXFwqKFteKl0qKVxcKlxcLy9tO1xuXG5mdW5jdGlvbiBwYXJzZShmbikge1xuXG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhbm5vdGF0ZSBcIicgKyBmbiArICdcIi4gRXhwZWN0ZWQgYSBmdW5jdGlvbiEnKTtcbiAgfVxuXG4gIHZhciBtYXRjaCA9IGZuLnRvU3RyaW5nKCkubWF0Y2goaXNDbGFzcyhmbikgPyBDT05TVFJVQ1RPUl9BUkdTIDogRk5fQVJHUyk7XG5cbiAgLy8gbWF5IHBhcnNlIGNsYXNzIHdpdGhvdXQgY29uc3RydWN0b3JcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaFsxXSAmJiBtYXRjaFsxXS5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiAoYXJnKSB7XG4gICAgbWF0Y2ggPSBhcmcubWF0Y2goRk5fQVJHKTtcbiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXS50cmltKCkgOiBhcmcudHJpbSgpO1xuICB9KSB8fCBbXTtcbn1cblxuZnVuY3Rpb24gTW9kdWxlKCkge1xuICB2YXIgcHJvdmlkZXJzID0gW107XG5cbiAgdGhpcy5mYWN0b3J5ID0gZnVuY3Rpb24gKG5hbWUsIGZhY3RvcnkpIHtcbiAgICBwcm92aWRlcnMucHVzaChbbmFtZSwgJ2ZhY3RvcnknLCBmYWN0b3J5XSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdGhpcy52YWx1ZSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIHByb3ZpZGVycy5wdXNoKFtuYW1lLCAndmFsdWUnLCB2YWx1ZV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHRoaXMudHlwZSA9IGZ1bmN0aW9uIChuYW1lLCB0eXBlKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goW25hbWUsICd0eXBlJywgdHlwZV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHRoaXMuZm9yRWFjaCA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgIHByb3ZpZGVycy5mb3JFYWNoKGl0ZXJhdG9yKTtcbiAgfTtcbn1cblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9IGVsc2UgeyByZXR1cm4gQXJyYXkuZnJvbShhcnIpOyB9IH1cblxuZnVuY3Rpb24gSW5qZWN0b3IobW9kdWxlcywgcGFyZW50KSB7XG4gIHBhcmVudCA9IHBhcmVudCB8fCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQobmFtZSwgc3RyaWN0KSB7XG4gICAgICBjdXJyZW50bHlSZXNvbHZpbmcucHVzaChuYW1lKTtcblxuICAgICAgaWYgKHN0cmljdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnJvcignTm8gcHJvdmlkZXIgZm9yIFwiJyArIG5hbWUgKyAnXCIhJyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBjdXJyZW50bHlSZXNvbHZpbmcgPSBbXTtcbiAgdmFyIHByb3ZpZGVycyA9IHRoaXMuX3Byb3ZpZGVycyA9IE9iamVjdC5jcmVhdGUocGFyZW50Ll9wcm92aWRlcnMgfHwgbnVsbCk7XG4gIHZhciBpbnN0YW5jZXMgPSB0aGlzLl9pbnN0YW5jZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHZhciBzZWxmID0gaW5zdGFuY2VzLmluamVjdG9yID0gdGhpcztcblxuICB2YXIgZXJyb3IgPSBmdW5jdGlvbiBlcnJvcihtc2cpIHtcbiAgICB2YXIgc3RhY2sgPSBjdXJyZW50bHlSZXNvbHZpbmcuam9pbignIC0+ICcpO1xuICAgIGN1cnJlbnRseVJlc29sdmluZy5sZW5ndGggPSAwO1xuICAgIHJldHVybiBuZXcgRXJyb3Ioc3RhY2sgPyBtc2cgKyAnIChSZXNvbHZpbmc6ICcgKyBzdGFjayArICcpJyA6IG1zZyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG5hbWVkIHNlcnZpY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW3N0cmljdD10cnVlXSBpZiBmYWxzZSwgcmVzb2x2ZSBtaXNzaW5nIHNlcnZpY2VzIHRvIG51bGxcbiAgICpcbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIGdldCA9IGZ1bmN0aW9uIGdldChuYW1lLCBzdHJpY3QpIHtcbiAgICBpZiAoIXByb3ZpZGVyc1tuYW1lXSAmJiBuYW1lLmluZGV4T2YoJy4nKSAhPT0gLTEpIHtcbiAgICAgIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoJy4nKTtcbiAgICAgIHZhciBwaXZvdCA9IGdldChwYXJ0cy5zaGlmdCgpKTtcblxuICAgICAgd2hpbGUgKHBhcnRzLmxlbmd0aCkge1xuICAgICAgICBwaXZvdCA9IHBpdm90W3BhcnRzLnNoaWZ0KCldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGl2b3Q7XG4gICAgfVxuXG4gICAgaWYgKGhhc1Byb3AoaW5zdGFuY2VzLCBuYW1lKSkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlc1tuYW1lXTtcbiAgICB9XG5cbiAgICBpZiAoaGFzUHJvcChwcm92aWRlcnMsIG5hbWUpKSB7XG4gICAgICBpZiAoY3VycmVudGx5UmVzb2x2aW5nLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICAgIGN1cnJlbnRseVJlc29sdmluZy5wdXNoKG5hbWUpO1xuICAgICAgICB0aHJvdyBlcnJvcignQ2Fubm90IHJlc29sdmUgY2lyY3VsYXIgZGVwZW5kZW5jeSEnKTtcbiAgICAgIH1cblxuICAgICAgY3VycmVudGx5UmVzb2x2aW5nLnB1c2gobmFtZSk7XG4gICAgICBpbnN0YW5jZXNbbmFtZV0gPSBwcm92aWRlcnNbbmFtZV1bMF0ocHJvdmlkZXJzW25hbWVdWzFdKTtcbiAgICAgIGN1cnJlbnRseVJlc29sdmluZy5wb3AoKTtcblxuICAgICAgcmV0dXJuIGluc3RhbmNlc1tuYW1lXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyZW50LmdldChuYW1lLCBzdHJpY3QpO1xuICB9O1xuXG4gIHZhciBmbkRlZiA9IGZ1bmN0aW9uIGZuRGVmKGZuKSB7XG4gICAgdmFyIGxvY2FscyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoaXNBcnJheShmbikpIHtcbiAgICAgICAgZm4gPSBhbm5vdGF0ZShmbi5zbGljZSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBcIicgKyBmbiArICdcIi4gRXhwZWN0ZWQgYSBmdW5jdGlvbiEnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaW5qZWN0ID0gZm4uJGluamVjdCB8fCBwYXJzZShmbik7XG4gICAgdmFyIGRlcGVuZGVuY2llcyA9IGluamVjdC5tYXAoZnVuY3Rpb24gKGRlcCkge1xuICAgICAgaWYgKGhhc1Byb3AobG9jYWxzLCBkZXApKSB7XG4gICAgICAgIHJldHVybiBsb2NhbHNbZGVwXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBnZXQoZGVwKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBmbjogZm4sXG4gICAgICBkZXBlbmRlbmNpZXM6IGRlcGVuZGVuY2llc1xuICAgIH07XG4gIH07XG5cbiAgdmFyIGluc3RhbnRpYXRlID0gZnVuY3Rpb24gaW5zdGFudGlhdGUoVHlwZSkge1xuICAgIHZhciBfZm5EZWYgPSBmbkRlZihUeXBlKSxcbiAgICAgICAgZGVwZW5kZW5jaWVzID0gX2ZuRGVmLmRlcGVuZGVuY2llcyxcbiAgICAgICAgZm4gPSBfZm5EZWYuZm47XG5cbiAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShmbiwgW251bGxdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoZGVwZW5kZW5jaWVzKSkpKSgpO1xuICB9O1xuXG4gIHZhciBpbnZva2UgPSBmdW5jdGlvbiBpbnZva2UoZnVuYywgY29udGV4dCwgbG9jYWxzKSB7XG4gICAgdmFyIF9mbkRlZjIgPSBmbkRlZihmdW5jLCBsb2NhbHMpLFxuICAgICAgICBkZXBlbmRlbmNpZXMgPSBfZm5EZWYyLmRlcGVuZGVuY2llcyxcbiAgICAgICAgZm4gPSBfZm5EZWYyLmZuO1xuXG4gICAgcmV0dXJuIGZuLmNhbGwuYXBwbHkoZm4sIFtjb250ZXh0XS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGRlcGVuZGVuY2llcykpKTtcbiAgfTtcblxuICB2YXIgY3JlYXRlUHJpdmF0ZUluamVjdG9yRmFjdG9yeSA9IGZ1bmN0aW9uIGNyZWF0ZVByaXZhdGVJbmplY3RvckZhY3RvcnkocHJpdmF0ZUNoaWxkSW5qZWN0b3IpIHtcbiAgICByZXR1cm4gYW5ub3RhdGUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIHByaXZhdGVDaGlsZEluamVjdG9yLmdldChrZXkpO1xuICAgIH0pO1xuICB9O1xuXG4gIHZhciBjcmVhdGVDaGlsZCA9IGZ1bmN0aW9uIGNyZWF0ZUNoaWxkKG1vZHVsZXMsIGZvcmNlTmV3SW5zdGFuY2VzKSB7XG4gICAgaWYgKGZvcmNlTmV3SW5zdGFuY2VzICYmIGZvcmNlTmV3SW5zdGFuY2VzLmxlbmd0aCkge1xuICAgICAgdmFyIGZyb21QYXJlbnRNb2R1bGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgdmFyIG1hdGNoZWRTY29wZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICB2YXIgcHJpdmF0ZUluamVjdG9yc0NhY2hlID0gW107XG4gICAgICB2YXIgcHJpdmF0ZUNoaWxkSW5qZWN0b3JzID0gW107XG4gICAgICB2YXIgcHJpdmF0ZUNoaWxkRmFjdG9yaWVzID0gW107XG5cbiAgICAgIHZhciBwcm92aWRlcjtcbiAgICAgIHZhciBjYWNoZUlkeDtcbiAgICAgIHZhciBwcml2YXRlQ2hpbGRJbmplY3RvcjtcbiAgICAgIHZhciBwcml2YXRlQ2hpbGRJbmplY3RvckZhY3Rvcnk7XG4gICAgICBmb3IgKHZhciBuYW1lIGluIHByb3ZpZGVycykge1xuICAgICAgICBwcm92aWRlciA9IHByb3ZpZGVyc1tuYW1lXTtcblxuICAgICAgICBpZiAoZm9yY2VOZXdJbnN0YW5jZXMuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICBpZiAocHJvdmlkZXJbMl0gPT09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgY2FjaGVJZHggPSBwcml2YXRlSW5qZWN0b3JzQ2FjaGUuaW5kZXhPZihwcm92aWRlclszXSk7XG4gICAgICAgICAgICBpZiAoY2FjaGVJZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgIHByaXZhdGVDaGlsZEluamVjdG9yID0gcHJvdmlkZXJbM10uY3JlYXRlQ2hpbGQoW10sIGZvcmNlTmV3SW5zdGFuY2VzKTtcbiAgICAgICAgICAgICAgcHJpdmF0ZUNoaWxkSW5qZWN0b3JGYWN0b3J5ID0gY3JlYXRlUHJpdmF0ZUluamVjdG9yRmFjdG9yeShwcml2YXRlQ2hpbGRJbmplY3Rvcik7XG4gICAgICAgICAgICAgIHByaXZhdGVJbmplY3RvcnNDYWNoZS5wdXNoKHByb3ZpZGVyWzNdKTtcbiAgICAgICAgICAgICAgcHJpdmF0ZUNoaWxkSW5qZWN0b3JzLnB1c2gocHJpdmF0ZUNoaWxkSW5qZWN0b3IpO1xuICAgICAgICAgICAgICBwcml2YXRlQ2hpbGRGYWN0b3JpZXMucHVzaChwcml2YXRlQ2hpbGRJbmplY3RvckZhY3RvcnkpO1xuICAgICAgICAgICAgICBmcm9tUGFyZW50TW9kdWxlW25hbWVdID0gW3ByaXZhdGVDaGlsZEluamVjdG9yRmFjdG9yeSwgbmFtZSwgJ3ByaXZhdGUnLCBwcml2YXRlQ2hpbGRJbmplY3Rvcl07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmcm9tUGFyZW50TW9kdWxlW25hbWVdID0gW3ByaXZhdGVDaGlsZEZhY3Rvcmllc1tjYWNoZUlkeF0sIG5hbWUsICdwcml2YXRlJywgcHJpdmF0ZUNoaWxkSW5qZWN0b3JzW2NhY2hlSWR4XV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZyb21QYXJlbnRNb2R1bGVbbmFtZV0gPSBbcHJvdmlkZXJbMl0sIHByb3ZpZGVyWzFdXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWF0Y2hlZFNjb3Blc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKHByb3ZpZGVyWzJdID09PSAnZmFjdG9yeScgfHwgcHJvdmlkZXJbMl0gPT09ICd0eXBlJykgJiYgcHJvdmlkZXJbMV0uJHNjb3BlKSB7XG4gICAgICAgICAgLyoganNoaW50IC1XMDgzICovXG4gICAgICAgICAgZm9yY2VOZXdJbnN0YW5jZXMuZm9yRWFjaChmdW5jdGlvbiAoc2NvcGUpIHtcbiAgICAgICAgICAgIGlmIChwcm92aWRlclsxXS4kc2NvcGUuaW5kZXhPZihzY29wZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgIGZyb21QYXJlbnRNb2R1bGVbbmFtZV0gPSBbcHJvdmlkZXJbMl0sIHByb3ZpZGVyWzFdXTtcbiAgICAgICAgICAgICAgbWF0Y2hlZFNjb3Blc1tzY29wZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvcmNlTmV3SW5zdGFuY2VzLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7XG4gICAgICAgIGlmICghbWF0Y2hlZFNjb3Blc1tzY29wZV0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHByb3ZpZGVyIGZvciBcIicgKyBzY29wZSArICdcIi4gQ2Fubm90IHVzZSBwcm92aWRlciBmcm9tIHRoZSBwYXJlbnQhJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBtb2R1bGVzLnVuc2hpZnQoZnJvbVBhcmVudE1vZHVsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbmplY3Rvcihtb2R1bGVzLCBzZWxmKTtcbiAgfTtcblxuICB2YXIgZmFjdG9yeU1hcCA9IHtcbiAgICBmYWN0b3J5OiBpbnZva2UsXG4gICAgdHlwZTogaW5zdGFudGlhdGUsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKF92YWx1ZSkge1xuICAgICAgcmV0dXJuIF92YWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgbW9kdWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGUpIHtcblxuICAgIGZ1bmN0aW9uIGFycmF5VW53cmFwKHR5cGUsIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZSAhPT0gJ3ZhbHVlJyAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IGFubm90YXRlKHZhbHVlLnNsaWNlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gVE9ETyh2b2p0YSk6IGhhbmRsZSB3cm9uZyBpbnB1dHMgKG1vZHVsZXMpXG4gICAgaWYgKG1vZHVsZSBpbnN0YW5jZW9mIE1vZHVsZSkge1xuICAgICAgbW9kdWxlLmZvckVhY2goZnVuY3Rpb24gKHByb3ZpZGVyKSB7XG4gICAgICAgIHZhciBuYW1lID0gcHJvdmlkZXJbMF07XG4gICAgICAgIHZhciB0eXBlID0gcHJvdmlkZXJbMV07XG4gICAgICAgIHZhciB2YWx1ZSA9IHByb3ZpZGVyWzJdO1xuXG4gICAgICAgIHByb3ZpZGVyc1tuYW1lXSA9IFtmYWN0b3J5TWFwW3R5cGVdLCBhcnJheVVud3JhcCh0eXBlLCB2YWx1ZSksIHR5cGVdO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICgodHlwZW9mIG1vZHVsZSA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YobW9kdWxlKSkgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAobW9kdWxlLl9fZXhwb3J0c19fKSB7XG4gICAgICAgIHZhciBjbG9uZWRNb2R1bGUgPSBPYmplY3Qua2V5cyhtb2R1bGUpLnJlZHVjZShmdW5jdGlvbiAobSwga2V5KSB7XG4gICAgICAgICAgaWYgKGtleS5zdWJzdHJpbmcoMCwgMikgIT09ICdfXycpIHtcbiAgICAgICAgICAgIG1ba2V5XSA9IG1vZHVsZVtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgfSwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbiAgICAgICAgdmFyIHByaXZhdGVJbmplY3RvciA9IG5ldyBJbmplY3RvcigobW9kdWxlLl9fbW9kdWxlc19fIHx8IFtdKS5jb25jYXQoW2Nsb25lZE1vZHVsZV0pLCBzZWxmKTtcbiAgICAgICAgdmFyIGdldEZyb21Qcml2YXRlSW5qZWN0b3IgPSBhbm5vdGF0ZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIHByaXZhdGVJbmplY3Rvci5nZXQoa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1vZHVsZS5fX2V4cG9ydHNfXy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICBwcm92aWRlcnNba2V5XSA9IFtnZXRGcm9tUHJpdmF0ZUluamVjdG9yLCBrZXksICdwcml2YXRlJywgcHJpdmF0ZUluamVjdG9yXTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3Qua2V5cyhtb2R1bGUpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICBpZiAobW9kdWxlW25hbWVdWzJdID09PSAncHJpdmF0ZScpIHtcbiAgICAgICAgICAgIHByb3ZpZGVyc1tuYW1lXSA9IG1vZHVsZVtuYW1lXTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgdHlwZSA9IG1vZHVsZVtuYW1lXVswXTtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBtb2R1bGVbbmFtZV1bMV07XG5cbiAgICAgICAgICBwcm92aWRlcnNbbmFtZV0gPSBbZmFjdG9yeU1hcFt0eXBlXSwgYXJyYXlVbndyYXAodHlwZSwgdmFsdWUpLCB0eXBlXTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyBwdWJsaWMgQVBJXG4gIHRoaXMuZ2V0ID0gZ2V0O1xuICB0aGlzLmludm9rZSA9IGludm9rZTtcbiAgdGhpcy5pbnN0YW50aWF0ZSA9IGluc3RhbnRpYXRlO1xuICB0aGlzLmNyZWF0ZUNoaWxkID0gY3JlYXRlQ2hpbGQ7XG59XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gaGFzUHJvcChvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG5cbmV4cG9ydCB7IGFubm90YXRlLCBNb2R1bGUsIEluamVjdG9yIH07XG4iLCIvKiEgSGFtbWVyLkpTIC0gdjIuMC43IC0gMjAxNi0wNC0yMlxuICogaHR0cDovL2hhbW1lcmpzLmdpdGh1Yi5pby9cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSm9yaWsgVGFuZ2VsZGVyO1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlICovXG4oZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCwgZXhwb3J0TmFtZSwgdW5kZWZpbmVkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxudmFyIFZFTkRPUl9QUkVGSVhFUyA9IFsnJywgJ3dlYmtpdCcsICdNb3onLCAnTVMnLCAnbXMnLCAnbyddO1xudmFyIFRFU1RfRUxFTUVOVCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG52YXIgVFlQRV9GVU5DVElPTiA9ICdmdW5jdGlvbic7XG5cbnZhciByb3VuZCA9IE1hdGgucm91bmQ7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgbm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogc2V0IGEgdGltZW91dCB3aXRoIGEgZ2l2ZW4gc2NvcGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge051bWJlcn0gdGltZW91dFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIHNldFRpbWVvdXRDb250ZXh0KGZuLCB0aW1lb3V0LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoYmluZEZuKGZuLCBjb250ZXh0KSwgdGltZW91dCk7XG59XG5cbi8qKlxuICogaWYgdGhlIGFyZ3VtZW50IGlzIGFuIGFycmF5LCB3ZSB3YW50IHRvIGV4ZWN1dGUgdGhlIGZuIG9uIGVhY2ggZW50cnlcbiAqIGlmIGl0IGFpbnQgYW4gYXJyYXkgd2UgZG9uJ3Qgd2FudCB0byBkbyBhIHRoaW5nLlxuICogdGhpcyBpcyB1c2VkIGJ5IGFsbCB0aGUgbWV0aG9kcyB0aGF0IGFjY2VwdCBhIHNpbmdsZSBhbmQgYXJyYXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp8QXJyYXl9IGFyZ1xuICogQHBhcmFtIHtTdHJpbmd9IGZuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaW52b2tlQXJyYXlBcmcoYXJnLCBmbiwgY29udGV4dCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgZWFjaChhcmcsIGNvbnRleHRbZm5dLCBjb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiB3YWxrIG9iamVjdHMgYW5kIGFycmF5c1xuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIGVhY2gob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgIHZhciBpO1xuXG4gICAgaWYgKCFvYmopIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvYmouZm9yRWFjaCkge1xuICAgICAgICBvYmouZm9yRWFjaChpdGVyYXRvciwgY29udGV4dCk7XG4gICAgfSBlbHNlIGlmIChvYmoubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgb2JqLmxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgaW4gb2JqKSB7XG4gICAgICAgICAgICBvYmouaGFzT3duUHJvcGVydHkoaSkgJiYgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogd3JhcCBhIG1ldGhvZCB3aXRoIGEgZGVwcmVjYXRpb24gd2FybmluZyBhbmQgc3RhY2sgdHJhY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1ldGhvZFxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgbmV3IGZ1bmN0aW9uIHdyYXBwaW5nIHRoZSBzdXBwbGllZCBtZXRob2QuXG4gKi9cbmZ1bmN0aW9uIGRlcHJlY2F0ZShtZXRob2QsIG5hbWUsIG1lc3NhZ2UpIHtcbiAgICB2YXIgZGVwcmVjYXRpb25NZXNzYWdlID0gJ0RFUFJFQ0FURUQgTUVUSE9EOiAnICsgbmFtZSArICdcXG4nICsgbWVzc2FnZSArICcgQVQgXFxuJztcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlID0gbmV3IEVycm9yKCdnZXQtc3RhY2stdHJhY2UnKTtcbiAgICAgICAgdmFyIHN0YWNrID0gZSAmJiBlLnN0YWNrID8gZS5zdGFjay5yZXBsYWNlKC9eW15cXChdKz9bXFxuJF0vZ20sICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL15cXHMrYXRcXHMrL2dtLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eT2JqZWN0Ljxhbm9ueW1vdXM+XFxzKlxcKC9nbSwgJ3thbm9ueW1vdXN9KClAJykgOiAnVW5rbm93biBTdGFjayBUcmFjZSc7XG5cbiAgICAgICAgdmFyIGxvZyA9IHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS53YXJuIHx8IHdpbmRvdy5jb25zb2xlLmxvZyk7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICAgIGxvZy5jYWxsKHdpbmRvdy5jb25zb2xlLCBkZXByZWNhdGlvbk1lc3NhZ2UsIHN0YWNrKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBleHRlbmQgb2JqZWN0LlxuICogbWVhbnMgdGhhdCBwcm9wZXJ0aWVzIGluIGRlc3Qgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgb25lcyBpbiBzcmMuXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0gey4uLk9iamVjdH0gb2JqZWN0c190b19hc3NpZ25cbiAqIEByZXR1cm5zIHtPYmplY3R9IHRhcmdldFxuICovXG52YXIgYXNzaWduO1xuaWYgKHR5cGVvZiBPYmplY3QuYXNzaWduICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgYXNzaWduID0gZnVuY3Rpb24gYXNzaWduKHRhcmdldCkge1xuICAgICAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvdXRwdXQgPSBPYmplY3QodGFyZ2V0KTtcbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAxOyBpbmRleCA8IGFyZ3VtZW50cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkICYmIHNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG5leHRLZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtuZXh0S2V5XSA9IHNvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH07XG59IGVsc2Uge1xuICAgIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG59XG5cbi8qKlxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW21lcmdlPWZhbHNlXVxuICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICovXG52YXIgZXh0ZW5kID0gZGVwcmVjYXRlKGZ1bmN0aW9uIGV4dGVuZChkZXN0LCBzcmMsIG1lcmdlKSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzcmMpO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGtleXMubGVuZ3RoKSB7XG4gICAgICAgIGlmICghbWVyZ2UgfHwgKG1lcmdlICYmIGRlc3Rba2V5c1tpXV0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgIGRlc3Rba2V5c1tpXV0gPSBzcmNba2V5c1tpXV07XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgIH1cbiAgICByZXR1cm4gZGVzdDtcbn0sICdleHRlbmQnLCAnVXNlIGBhc3NpZ25gLicpO1xuXG4vKipcbiAqIG1lcmdlIHRoZSB2YWx1ZXMgZnJvbSBzcmMgaW4gdGhlIGRlc3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgdGhhdCBleGlzdCBpbiBkZXN0IHdpbGwgbm90IGJlIG92ZXJ3cml0dGVuIGJ5IHNyY1xuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEByZXR1cm5zIHtPYmplY3R9IGRlc3RcbiAqL1xudmFyIG1lcmdlID0gZGVwcmVjYXRlKGZ1bmN0aW9uIG1lcmdlKGRlc3QsIHNyYykge1xuICAgIHJldHVybiBleHRlbmQoZGVzdCwgc3JjLCB0cnVlKTtcbn0sICdtZXJnZScsICdVc2UgYGFzc2lnbmAuJyk7XG5cbi8qKlxuICogc2ltcGxlIGNsYXNzIGluaGVyaXRhbmNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjaGlsZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYmFzZVxuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzXVxuICovXG5mdW5jdGlvbiBpbmhlcml0KGNoaWxkLCBiYXNlLCBwcm9wZXJ0aWVzKSB7XG4gICAgdmFyIGJhc2VQID0gYmFzZS5wcm90b3R5cGUsXG4gICAgICAgIGNoaWxkUDtcblxuICAgIGNoaWxkUCA9IGNoaWxkLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYmFzZVApO1xuICAgIGNoaWxkUC5jb25zdHJ1Y3RvciA9IGNoaWxkO1xuICAgIGNoaWxkUC5fc3VwZXIgPSBiYXNlUDtcblxuICAgIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGFzc2lnbihjaGlsZFAsIHByb3BlcnRpZXMpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBzaW1wbGUgZnVuY3Rpb24gYmluZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGJpbmRGbihmbiwgY29udGV4dCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBib3VuZEZuKCkge1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xufVxuXG4vKipcbiAqIGxldCBhIGJvb2xlYW4gdmFsdWUgYWxzbyBiZSBhIGZ1bmN0aW9uIHRoYXQgbXVzdCByZXR1cm4gYSBib29sZWFuXG4gKiB0aGlzIGZpcnN0IGl0ZW0gaW4gYXJncyB3aWxsIGJlIHVzZWQgYXMgdGhlIGNvbnRleHRcbiAqIEBwYXJhbSB7Qm9vbGVhbnxGdW5jdGlvbn0gdmFsXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnc11cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBib29sT3JGbih2YWwsIGFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIHZhbCA9PSBUWVBFX0ZVTkNUSU9OKSB7XG4gICAgICAgIHJldHVybiB2YWwuYXBwbHkoYXJncyA/IGFyZ3NbMF0gfHwgdW5kZWZpbmVkIDogdW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn1cblxuLyoqXG4gKiB1c2UgdGhlIHZhbDIgd2hlbiB2YWwxIGlzIHVuZGVmaW5lZFxuICogQHBhcmFtIHsqfSB2YWwxXG4gKiBAcGFyYW0geyp9IHZhbDJcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBpZlVuZGVmaW5lZCh2YWwxLCB2YWwyKSB7XG4gICAgcmV0dXJuICh2YWwxID09PSB1bmRlZmluZWQpID8gdmFsMiA6IHZhbDE7XG59XG5cbi8qKlxuICogYWRkRXZlbnRMaXN0ZW5lciB3aXRoIG11bHRpcGxlIGV2ZW50cyBhdCBvbmNlXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSB0YXJnZXRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICovXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gICAgZWFjaChzcGxpdFN0cih0eXBlcyksIGZ1bmN0aW9uKHR5cGUpIHtcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIHJlbW92ZUV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGFyZ2V0LCB0eXBlcywgaGFuZGxlcikge1xuICAgIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbih0eXBlKSB7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBmaW5kIGlmIGEgbm9kZSBpcyBpbiB0aGUgZ2l2ZW4gcGFyZW50XG4gKiBAbWV0aG9kIGhhc1BhcmVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50XG4gKiBAcmV0dXJuIHtCb29sZWFufSBmb3VuZFxuICovXG5mdW5jdGlvbiBoYXNQYXJlbnQobm9kZSwgcGFyZW50KSB7XG4gICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT0gcGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogc21hbGwgaW5kZXhPZiB3cmFwcGVyXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gZmluZFxuICogQHJldHVybnMge0Jvb2xlYW59IGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGluU3RyKHN0ciwgZmluZCkge1xuICAgIHJldHVybiBzdHIuaW5kZXhPZihmaW5kKSA+IC0xO1xufVxuXG4vKipcbiAqIHNwbGl0IHN0cmluZyBvbiB3aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7QXJyYXl9IHdvcmRzXG4gKi9cbmZ1bmN0aW9uIHNwbGl0U3RyKHN0cikge1xuICAgIHJldHVybiBzdHIudHJpbSgpLnNwbGl0KC9cXHMrL2cpO1xufVxuXG4vKipcbiAqIGZpbmQgaWYgYSBhcnJheSBjb250YWlucyB0aGUgb2JqZWN0IHVzaW5nIGluZGV4T2Ygb3IgYSBzaW1wbGUgcG9seUZpbGxcbiAqIEBwYXJhbSB7QXJyYXl9IHNyY1xuICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZmluZEJ5S2V5XVxuICogQHJldHVybiB7Qm9vbGVhbnxOdW1iZXJ9IGZhbHNlIHdoZW4gbm90IGZvdW5kLCBvciB0aGUgaW5kZXhcbiAqL1xuZnVuY3Rpb24gaW5BcnJheShzcmMsIGZpbmQsIGZpbmRCeUtleSkge1xuICAgIGlmIChzcmMuaW5kZXhPZiAmJiAhZmluZEJ5S2V5KSB7XG4gICAgICAgIHJldHVybiBzcmMuaW5kZXhPZihmaW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgc3JjLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKChmaW5kQnlLZXkgJiYgc3JjW2ldW2ZpbmRCeUtleV0gPT0gZmluZCkgfHwgKCFmaW5kQnlLZXkgJiYgc3JjW2ldID09PSBmaW5kKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG59XG5cbi8qKlxuICogY29udmVydCBhcnJheS1saWtlIG9iamVjdHMgdG8gcmVhbCBhcnJheXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwob2JqLCAwKTtcbn1cblxuLyoqXG4gKiB1bmlxdWUgYXJyYXkgd2l0aCBvYmplY3RzIGJhc2VkIG9uIGEga2V5IChsaWtlICdpZCcpIG9yIGp1c3QgYnkgdGhlIGFycmF5J3MgdmFsdWVcbiAqIEBwYXJhbSB7QXJyYXl9IHNyYyBbe2lkOjF9LHtpZDoyfSx7aWQ6MX1dXG4gKiBAcGFyYW0ge1N0cmluZ30gW2tleV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW3NvcnQ9RmFsc2VdXG4gKiBAcmV0dXJucyB7QXJyYXl9IFt7aWQ6MX0se2lkOjJ9XVxuICovXG5mdW5jdGlvbiB1bmlxdWVBcnJheShzcmMsIGtleSwgc29ydCkge1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgc3JjLmxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsID0ga2V5ID8gc3JjW2ldW2tleV0gOiBzcmNbaV07XG4gICAgICAgIGlmIChpbkFycmF5KHZhbHVlcywgdmFsKSA8IDApIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChzcmNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlc1tpXSA9IHZhbDtcbiAgICAgICAgaSsrO1xuICAgIH1cblxuICAgIGlmIChzb3J0KSB7XG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KGZ1bmN0aW9uIHNvcnRVbmlxdWVBcnJheShhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFba2V5XSA+IGJba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbi8qKlxuICogZ2V0IHRoZSBwcmVmaXhlZCBwcm9wZXJ0eVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7U3RyaW5nfFVuZGVmaW5lZH0gcHJlZml4ZWRcbiAqL1xuZnVuY3Rpb24gcHJlZml4ZWQob2JqLCBwcm9wZXJ0eSkge1xuICAgIHZhciBwcmVmaXgsIHByb3A7XG4gICAgdmFyIGNhbWVsUHJvcCA9IHByb3BlcnR5WzBdLnRvVXBwZXJDYXNlKCkgKyBwcm9wZXJ0eS5zbGljZSgxKTtcblxuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IFZFTkRPUl9QUkVGSVhFUy5sZW5ndGgpIHtcbiAgICAgICAgcHJlZml4ID0gVkVORE9SX1BSRUZJWEVTW2ldO1xuICAgICAgICBwcm9wID0gKHByZWZpeCkgPyBwcmVmaXggKyBjYW1lbFByb3AgOiBwcm9wZXJ0eTtcblxuICAgICAgICBpZiAocHJvcCBpbiBvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9wO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBnZXQgYSB1bmlxdWUgaWRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHVuaXF1ZUlkXG4gKi9cbnZhciBfdW5pcXVlSWQgPSAxO1xuZnVuY3Rpb24gdW5pcXVlSWQoKSB7XG4gICAgcmV0dXJuIF91bmlxdWVJZCsrO1xufVxuXG4vKipcbiAqIGdldCB0aGUgd2luZG93IG9iamVjdCBvZiBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7RG9jdW1lbnRWaWV3fFdpbmRvd31cbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93Rm9yRWxlbWVudChlbGVtZW50KSB7XG4gICAgdmFyIGRvYyA9IGVsZW1lbnQub3duZXJEb2N1bWVudCB8fCBlbGVtZW50O1xuICAgIHJldHVybiAoZG9jLmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3cgfHwgd2luZG93KTtcbn1cblxudmFyIE1PQklMRV9SRUdFWCA9IC9tb2JpbGV8dGFibGV0fGlwKGFkfGhvbmV8b2QpfGFuZHJvaWQvaTtcblxudmFyIFNVUFBPUlRfVE9VQ0ggPSAoJ29udG91Y2hzdGFydCcgaW4gd2luZG93KTtcbnZhciBTVVBQT1JUX1BPSU5URVJfRVZFTlRTID0gcHJlZml4ZWQod2luZG93LCAnUG9pbnRlckV2ZW50JykgIT09IHVuZGVmaW5lZDtcbnZhciBTVVBQT1JUX09OTFlfVE9VQ0ggPSBTVVBQT1JUX1RPVUNIICYmIE1PQklMRV9SRUdFWC50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG52YXIgSU5QVVRfVFlQRV9UT1VDSCA9ICd0b3VjaCc7XG52YXIgSU5QVVRfVFlQRV9QRU4gPSAncGVuJztcbnZhciBJTlBVVF9UWVBFX01PVVNFID0gJ21vdXNlJztcbnZhciBJTlBVVF9UWVBFX0tJTkVDVCA9ICdraW5lY3QnO1xuXG52YXIgQ09NUFVURV9JTlRFUlZBTCA9IDI1O1xuXG52YXIgSU5QVVRfU1RBUlQgPSAxO1xudmFyIElOUFVUX01PVkUgPSAyO1xudmFyIElOUFVUX0VORCA9IDQ7XG52YXIgSU5QVVRfQ0FOQ0VMID0gODtcblxudmFyIERJUkVDVElPTl9OT05FID0gMTtcbnZhciBESVJFQ1RJT05fTEVGVCA9IDI7XG52YXIgRElSRUNUSU9OX1JJR0hUID0gNDtcbnZhciBESVJFQ1RJT05fVVAgPSA4O1xudmFyIERJUkVDVElPTl9ET1dOID0gMTY7XG5cbnZhciBESVJFQ1RJT05fSE9SSVpPTlRBTCA9IERJUkVDVElPTl9MRUZUIHwgRElSRUNUSU9OX1JJR0hUO1xudmFyIERJUkVDVElPTl9WRVJUSUNBTCA9IERJUkVDVElPTl9VUCB8IERJUkVDVElPTl9ET1dOO1xudmFyIERJUkVDVElPTl9BTEwgPSBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTDtcblxudmFyIFBST1BTX1hZID0gWyd4JywgJ3knXTtcbnZhciBQUk9QU19DTElFTlRfWFkgPSBbJ2NsaWVudFgnLCAnY2xpZW50WSddO1xuXG4vKipcbiAqIGNyZWF0ZSBuZXcgaW5wdXQgdHlwZSBtYW5hZ2VyXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7SW5wdXR9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gSW5wdXQobWFuYWdlciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5tYW5hZ2VyID0gbWFuYWdlcjtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5lbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuICAgIHRoaXMudGFyZ2V0ID0gbWFuYWdlci5vcHRpb25zLmlucHV0VGFyZ2V0O1xuXG4gICAgLy8gc21hbGxlciB3cmFwcGVyIGFyb3VuZCB0aGUgaGFuZGxlciwgZm9yIHRoZSBzY29wZSBhbmQgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIG1hbmFnZXIsXG4gICAgLy8gc28gd2hlbiBkaXNhYmxlZCB0aGUgaW5wdXQgZXZlbnRzIGFyZSBjb21wbGV0ZWx5IGJ5cGFzc2VkLlxuICAgIHRoaXMuZG9tSGFuZGxlciA9IGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgIGlmIChib29sT3JGbihtYW5hZ2VyLm9wdGlvbnMuZW5hYmxlLCBbbWFuYWdlcl0pKSB7XG4gICAgICAgICAgICBzZWxmLmhhbmRsZXIoZXYpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuaW5pdCgpO1xuXG59XG5cbklucHV0LnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBzaG91bGQgaGFuZGxlIHRoZSBpbnB1dEV2ZW50IGRhdGEgYW5kIHRyaWdnZXIgdGhlIGNhbGxiYWNrXG4gICAgICogQHZpcnR1YWxcbiAgICAgKi9cbiAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHsgfSxcblxuICAgIC8qKlxuICAgICAqIGJpbmQgdGhlIGV2ZW50c1xuICAgICAqL1xuICAgIGluaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmV2RWwgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgICAgIHRoaXMuZXZUYXJnZXQgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgICAgIHRoaXMuZXZXaW4gJiYgYWRkRXZlbnRMaXN0ZW5lcnMoZ2V0V2luZG93Rm9yRWxlbWVudCh0aGlzLmVsZW1lbnQpLCB0aGlzLmV2V2luLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiB1bmJpbmQgdGhlIGV2ZW50c1xuICAgICAqL1xuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmV2RWwgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgICAgIHRoaXMuZXZUYXJnZXQgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgICAgIHRoaXMuZXZXaW4gJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoZ2V0V2luZG93Rm9yRWxlbWVudCh0aGlzLmVsZW1lbnQpLCB0aGlzLmV2V2luLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAqIGNhbGxlZCBieSB0aGUgTWFuYWdlciBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtIYW1tZXJ9IG1hbmFnZXJcbiAqIEByZXR1cm5zIHtJbnB1dH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRJbnN0YW5jZShtYW5hZ2VyKSB7XG4gICAgdmFyIFR5cGU7XG4gICAgdmFyIGlucHV0Q2xhc3MgPSBtYW5hZ2VyLm9wdGlvbnMuaW5wdXRDbGFzcztcblxuICAgIGlmIChpbnB1dENsYXNzKSB7XG4gICAgICAgIFR5cGUgPSBpbnB1dENsYXNzO1xuICAgIH0gZWxzZSBpZiAoU1VQUE9SVF9QT0lOVEVSX0VWRU5UUykge1xuICAgICAgICBUeXBlID0gUG9pbnRlckV2ZW50SW5wdXQ7XG4gICAgfSBlbHNlIGlmIChTVVBQT1JUX09OTFlfVE9VQ0gpIHtcbiAgICAgICAgVHlwZSA9IFRvdWNoSW5wdXQ7XG4gICAgfSBlbHNlIGlmICghU1VQUE9SVF9UT1VDSCkge1xuICAgICAgICBUeXBlID0gTW91c2VJbnB1dDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBUeXBlID0gVG91Y2hNb3VzZUlucHV0O1xuICAgIH1cbiAgICByZXR1cm4gbmV3IChUeXBlKShtYW5hZ2VyLCBpbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIGhhbmRsZSBpbnB1dCBldmVudHNcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50VHlwZVxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cbmZ1bmN0aW9uIGlucHV0SGFuZGxlcihtYW5hZ2VyLCBldmVudFR5cGUsIGlucHV0KSB7XG4gICAgdmFyIHBvaW50ZXJzTGVuID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoO1xuICAgIHZhciBjaGFuZ2VkUG9pbnRlcnNMZW4gPSBpbnB1dC5jaGFuZ2VkUG9pbnRlcnMubGVuZ3RoO1xuICAgIHZhciBpc0ZpcnN0ID0gKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIChwb2ludGVyc0xlbiAtIGNoYW5nZWRQb2ludGVyc0xlbiA9PT0gMCkpO1xuICAgIHZhciBpc0ZpbmFsID0gKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmIChwb2ludGVyc0xlbiAtIGNoYW5nZWRQb2ludGVyc0xlbiA9PT0gMCkpO1xuXG4gICAgaW5wdXQuaXNGaXJzdCA9ICEhaXNGaXJzdDtcbiAgICBpbnB1dC5pc0ZpbmFsID0gISFpc0ZpbmFsO1xuXG4gICAgaWYgKGlzRmlyc3QpIHtcbiAgICAgICAgbWFuYWdlci5zZXNzaW9uID0ge307XG4gICAgfVxuXG4gICAgLy8gc291cmNlIGV2ZW50IGlzIHRoZSBub3JtYWxpemVkIHZhbHVlIG9mIHRoZSBkb21FdmVudHNcbiAgICAvLyBsaWtlICd0b3VjaHN0YXJ0LCBtb3VzZXVwLCBwb2ludGVyZG93bidcbiAgICBpbnB1dC5ldmVudFR5cGUgPSBldmVudFR5cGU7XG5cbiAgICAvLyBjb21wdXRlIHNjYWxlLCByb3RhdGlvbiBldGNcbiAgICBjb21wdXRlSW5wdXREYXRhKG1hbmFnZXIsIGlucHV0KTtcblxuICAgIC8vIGVtaXQgc2VjcmV0IGV2ZW50XG4gICAgbWFuYWdlci5lbWl0KCdoYW1tZXIuaW5wdXQnLCBpbnB1dCk7XG5cbiAgICBtYW5hZ2VyLnJlY29nbml6ZShpbnB1dCk7XG4gICAgbWFuYWdlci5zZXNzaW9uLnByZXZJbnB1dCA9IGlucHV0O1xufVxuXG4vKipcbiAqIGV4dGVuZCB0aGUgZGF0YSB3aXRoIHNvbWUgdXNhYmxlIHByb3BlcnRpZXMgbGlrZSBzY2FsZSwgcm90YXRlLCB2ZWxvY2l0eSBldGNcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYW5hZ2VyXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqL1xuZnVuY3Rpb24gY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCkge1xuICAgIHZhciBzZXNzaW9uID0gbWFuYWdlci5zZXNzaW9uO1xuICAgIHZhciBwb2ludGVycyA9IGlucHV0LnBvaW50ZXJzO1xuICAgIHZhciBwb2ludGVyc0xlbmd0aCA9IHBvaW50ZXJzLmxlbmd0aDtcblxuICAgIC8vIHN0b3JlIHRoZSBmaXJzdCBpbnB1dCB0byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGFuZCBkaXJlY3Rpb25cbiAgICBpZiAoIXNlc3Npb24uZmlyc3RJbnB1dCkge1xuICAgICAgICBzZXNzaW9uLmZpcnN0SW5wdXQgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gICAgfVxuXG4gICAgLy8gdG8gY29tcHV0ZSBzY2FsZSBhbmQgcm90YXRpb24gd2UgbmVlZCB0byBzdG9yZSB0aGUgbXVsdGlwbGUgdG91Y2hlc1xuICAgIGlmIChwb2ludGVyc0xlbmd0aCA+IDEgJiYgIXNlc3Npb24uZmlyc3RNdWx0aXBsZSkge1xuICAgICAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gICAgfSBlbHNlIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgICAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZmlyc3RJbnB1dCA9IHNlc3Npb24uZmlyc3RJbnB1dDtcbiAgICB2YXIgZmlyc3RNdWx0aXBsZSA9IHNlc3Npb24uZmlyc3RNdWx0aXBsZTtcbiAgICB2YXIgb2Zmc2V0Q2VudGVyID0gZmlyc3RNdWx0aXBsZSA/IGZpcnN0TXVsdGlwbGUuY2VudGVyIDogZmlyc3RJbnB1dC5jZW50ZXI7XG5cbiAgICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyID0gZ2V0Q2VudGVyKHBvaW50ZXJzKTtcbiAgICBpbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgICBpbnB1dC5kZWx0YVRpbWUgPSBpbnB1dC50aW1lU3RhbXAgLSBmaXJzdElucHV0LnRpbWVTdGFtcDtcblxuICAgIGlucHV0LmFuZ2xlID0gZ2V0QW5nbGUob2Zmc2V0Q2VudGVyLCBjZW50ZXIpO1xuICAgIGlucHV0LmRpc3RhbmNlID0gZ2V0RGlzdGFuY2Uob2Zmc2V0Q2VudGVyLCBjZW50ZXIpO1xuXG4gICAgY29tcHV0ZURlbHRhWFkoc2Vzc2lvbiwgaW5wdXQpO1xuICAgIGlucHV0Lm9mZnNldERpcmVjdGlvbiA9IGdldERpcmVjdGlvbihpbnB1dC5kZWx0YVgsIGlucHV0LmRlbHRhWSk7XG5cbiAgICB2YXIgb3ZlcmFsbFZlbG9jaXR5ID0gZ2V0VmVsb2NpdHkoaW5wdXQuZGVsdGFUaW1lLCBpbnB1dC5kZWx0YVgsIGlucHV0LmRlbHRhWSk7XG4gICAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5WCA9IG92ZXJhbGxWZWxvY2l0eS54O1xuICAgIGlucHV0Lm92ZXJhbGxWZWxvY2l0eVkgPSBvdmVyYWxsVmVsb2NpdHkueTtcbiAgICBpbnB1dC5vdmVyYWxsVmVsb2NpdHkgPSAoYWJzKG92ZXJhbGxWZWxvY2l0eS54KSA+IGFicyhvdmVyYWxsVmVsb2NpdHkueSkpID8gb3ZlcmFsbFZlbG9jaXR5LnggOiBvdmVyYWxsVmVsb2NpdHkueTtcblxuICAgIGlucHV0LnNjYWxlID0gZmlyc3RNdWx0aXBsZSA/IGdldFNjYWxlKGZpcnN0TXVsdGlwbGUucG9pbnRlcnMsIHBvaW50ZXJzKSA6IDE7XG4gICAgaW5wdXQucm90YXRpb24gPSBmaXJzdE11bHRpcGxlID8gZ2V0Um90YXRpb24oZmlyc3RNdWx0aXBsZS5wb2ludGVycywgcG9pbnRlcnMpIDogMDtcblxuICAgIGlucHV0Lm1heFBvaW50ZXJzID0gIXNlc3Npb24ucHJldklucHV0ID8gaW5wdXQucG9pbnRlcnMubGVuZ3RoIDogKChpbnB1dC5wb2ludGVycy5sZW5ndGggPlxuICAgICAgICBzZXNzaW9uLnByZXZJbnB1dC5tYXhQb2ludGVycykgPyBpbnB1dC5wb2ludGVycy5sZW5ndGggOiBzZXNzaW9uLnByZXZJbnB1dC5tYXhQb2ludGVycyk7XG5cbiAgICBjb21wdXRlSW50ZXJ2YWxJbnB1dERhdGEoc2Vzc2lvbiwgaW5wdXQpO1xuXG4gICAgLy8gZmluZCB0aGUgY29ycmVjdCB0YXJnZXRcbiAgICB2YXIgdGFyZ2V0ID0gbWFuYWdlci5lbGVtZW50O1xuICAgIGlmIChoYXNQYXJlbnQoaW5wdXQuc3JjRXZlbnQudGFyZ2V0LCB0YXJnZXQpKSB7XG4gICAgICAgIHRhcmdldCA9IGlucHV0LnNyY0V2ZW50LnRhcmdldDtcbiAgICB9XG4gICAgaW5wdXQudGFyZ2V0ID0gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVsdGFYWShzZXNzaW9uLCBpbnB1dCkge1xuICAgIHZhciBjZW50ZXIgPSBpbnB1dC5jZW50ZXI7XG4gICAgdmFyIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgfHwge307XG4gICAgdmFyIHByZXZEZWx0YSA9IHNlc3Npb24ucHJldkRlbHRhIHx8IHt9O1xuICAgIHZhciBwcmV2SW5wdXQgPSBzZXNzaW9uLnByZXZJbnB1dCB8fCB7fTtcblxuICAgIGlmIChpbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX1NUQVJUIHx8IHByZXZJbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX0VORCkge1xuICAgICAgICBwcmV2RGVsdGEgPSBzZXNzaW9uLnByZXZEZWx0YSA9IHtcbiAgICAgICAgICAgIHg6IHByZXZJbnB1dC5kZWx0YVggfHwgMCxcbiAgICAgICAgICAgIHk6IHByZXZJbnB1dC5kZWx0YVkgfHwgMFxuICAgICAgICB9O1xuXG4gICAgICAgIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgPSB7XG4gICAgICAgICAgICB4OiBjZW50ZXIueCxcbiAgICAgICAgICAgIHk6IGNlbnRlci55XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaW5wdXQuZGVsdGFYID0gcHJldkRlbHRhLnggKyAoY2VudGVyLnggLSBvZmZzZXQueCk7XG4gICAgaW5wdXQuZGVsdGFZID0gcHJldkRlbHRhLnkgKyAoY2VudGVyLnkgLSBvZmZzZXQueSk7XG59XG5cbi8qKlxuICogdmVsb2NpdHkgaXMgY2FsY3VsYXRlZCBldmVyeSB4IG1zXG4gKiBAcGFyYW0ge09iamVjdH0gc2Vzc2lvblxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCkge1xuICAgIHZhciBsYXN0ID0gc2Vzc2lvbi5sYXN0SW50ZXJ2YWwgfHwgaW5wdXQsXG4gICAgICAgIGRlbHRhVGltZSA9IGlucHV0LnRpbWVTdGFtcCAtIGxhc3QudGltZVN0YW1wLFxuICAgICAgICB2ZWxvY2l0eSwgdmVsb2NpdHlYLCB2ZWxvY2l0eVksIGRpcmVjdGlvbjtcblxuICAgIGlmIChpbnB1dC5ldmVudFR5cGUgIT0gSU5QVVRfQ0FOQ0VMICYmIChkZWx0YVRpbWUgPiBDT01QVVRFX0lOVEVSVkFMIHx8IGxhc3QudmVsb2NpdHkgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgdmFyIGRlbHRhWCA9IGlucHV0LmRlbHRhWCAtIGxhc3QuZGVsdGFYO1xuICAgICAgICB2YXIgZGVsdGFZID0gaW5wdXQuZGVsdGFZIC0gbGFzdC5kZWx0YVk7XG5cbiAgICAgICAgdmFyIHYgPSBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIGRlbHRhWCwgZGVsdGFZKTtcbiAgICAgICAgdmVsb2NpdHlYID0gdi54O1xuICAgICAgICB2ZWxvY2l0eVkgPSB2Lnk7XG4gICAgICAgIHZlbG9jaXR5ID0gKGFicyh2LngpID4gYWJzKHYueSkpID8gdi54IDogdi55O1xuICAgICAgICBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oZGVsdGFYLCBkZWx0YVkpO1xuXG4gICAgICAgIHNlc3Npb24ubGFzdEludGVydmFsID0gaW5wdXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXNlIGxhdGVzdCB2ZWxvY2l0eSBpbmZvIGlmIGl0IGRvZXNuJ3Qgb3ZlcnRha2UgYSBtaW5pbXVtIHBlcmlvZFxuICAgICAgICB2ZWxvY2l0eSA9IGxhc3QudmVsb2NpdHk7XG4gICAgICAgIHZlbG9jaXR5WCA9IGxhc3QudmVsb2NpdHlYO1xuICAgICAgICB2ZWxvY2l0eVkgPSBsYXN0LnZlbG9jaXR5WTtcbiAgICAgICAgZGlyZWN0aW9uID0gbGFzdC5kaXJlY3Rpb247XG4gICAgfVxuXG4gICAgaW5wdXQudmVsb2NpdHkgPSB2ZWxvY2l0eTtcbiAgICBpbnB1dC52ZWxvY2l0eVggPSB2ZWxvY2l0eVg7XG4gICAgaW5wdXQudmVsb2NpdHlZID0gdmVsb2NpdHlZO1xuICAgIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbn1cblxuLyoqXG4gKiBjcmVhdGUgYSBzaW1wbGUgY2xvbmUgZnJvbSB0aGUgaW5wdXQgdXNlZCBmb3Igc3RvcmFnZSBvZiBmaXJzdElucHV0IGFuZCBmaXJzdE11bHRpcGxlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IGNsb25lZElucHV0RGF0YVxuICovXG5mdW5jdGlvbiBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCkge1xuICAgIC8vIG1ha2UgYSBzaW1wbGUgY29weSBvZiB0aGUgcG9pbnRlcnMgYmVjYXVzZSB3ZSB3aWxsIGdldCBhIHJlZmVyZW5jZSBpZiB3ZSBkb24ndFxuICAgIC8vIHdlIG9ubHkgbmVlZCBjbGllbnRYWSBmb3IgdGhlIGNhbGN1bGF0aW9uc1xuICAgIHZhciBwb2ludGVycyA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGlucHV0LnBvaW50ZXJzLmxlbmd0aCkge1xuICAgICAgICBwb2ludGVyc1tpXSA9IHtcbiAgICAgICAgICAgIGNsaWVudFg6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFgpLFxuICAgICAgICAgICAgY2xpZW50WTogcm91bmQoaW5wdXQucG9pbnRlcnNbaV0uY2xpZW50WSlcbiAgICAgICAgfTtcbiAgICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHRpbWVTdGFtcDogbm93KCksXG4gICAgICAgIHBvaW50ZXJzOiBwb2ludGVycyxcbiAgICAgICAgY2VudGVyOiBnZXRDZW50ZXIocG9pbnRlcnMpLFxuICAgICAgICBkZWx0YVg6IGlucHV0LmRlbHRhWCxcbiAgICAgICAgZGVsdGFZOiBpbnB1dC5kZWx0YVlcbiAgICB9O1xufVxuXG4vKipcbiAqIGdldCB0aGUgY2VudGVyIG9mIGFsbCB0aGUgcG9pbnRlcnNcbiAqIEBwYXJhbSB7QXJyYXl9IHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtPYmplY3R9IGNlbnRlciBjb250YWlucyBgeGAgYW5kIGB5YCBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIGdldENlbnRlcihwb2ludGVycykge1xuICAgIHZhciBwb2ludGVyc0xlbmd0aCA9IHBvaW50ZXJzLmxlbmd0aDtcblxuICAgIC8vIG5vIG5lZWQgdG8gbG9vcCB3aGVuIG9ubHkgb25lIHRvdWNoXG4gICAgaWYgKHBvaW50ZXJzTGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRYKSxcbiAgICAgICAgICAgIHk6IHJvdW5kKHBvaW50ZXJzWzBdLmNsaWVudFkpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIHggPSAwLCB5ID0gMCwgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBwb2ludGVyc0xlbmd0aCkge1xuICAgICAgICB4ICs9IHBvaW50ZXJzW2ldLmNsaWVudFg7XG4gICAgICAgIHkgKz0gcG9pbnRlcnNbaV0uY2xpZW50WTtcbiAgICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJvdW5kKHggLyBwb2ludGVyc0xlbmd0aCksXG4gICAgICAgIHk6IHJvdW5kKHkgLyBwb2ludGVyc0xlbmd0aClcbiAgICB9O1xufVxuXG4vKipcbiAqIGNhbGN1bGF0ZSB0aGUgdmVsb2NpdHkgYmV0d2VlbiB0d28gcG9pbnRzLiB1bml0IGlzIGluIHB4IHBlciBtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVRpbWVcbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogQHJldHVybiB7T2JqZWN0fSB2ZWxvY2l0eSBgeGAgYW5kIGB5YFxuICovXG5mdW5jdGlvbiBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIHgsIHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiB4IC8gZGVsdGFUaW1lIHx8IDAsXG4gICAgICAgIHk6IHkgLyBkZWx0YVRpbWUgfHwgMFxuICAgIH07XG59XG5cbi8qKlxuICogZ2V0IHRoZSBkaXJlY3Rpb24gYmV0d2VlbiB0d28gcG9pbnRzXG4gKiBAcGFyYW0ge051bWJlcn0geFxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge051bWJlcn0gZGlyZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldERpcmVjdGlvbih4LCB5KSB7XG4gICAgaWYgKHggPT09IHkpIHtcbiAgICAgICAgcmV0dXJuIERJUkVDVElPTl9OT05FO1xuICAgIH1cblxuICAgIGlmIChhYnMoeCkgPj0gYWJzKHkpKSB7XG4gICAgICAgIHJldHVybiB4IDwgMCA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICAgIH1cbiAgICByZXR1cm4geSA8IDAgPyBESVJFQ1RJT05fVVAgOiBESVJFQ1RJT05fRE9XTjtcbn1cblxuLyoqXG4gKiBjYWxjdWxhdGUgdGhlIGFic29sdXRlIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50c1xuICogQHBhcmFtIHtPYmplY3R9IHAxIHt4LCB5fVxuICogQHBhcmFtIHtPYmplY3R9IHAyIHt4LCB5fVxuICogQHBhcmFtIHtBcnJheX0gW3Byb3BzXSBjb250YWluaW5nIHggYW5kIHkga2V5c1xuICogQHJldHVybiB7TnVtYmVyfSBkaXN0YW5jZVxuICovXG5mdW5jdGlvbiBnZXREaXN0YW5jZShwMSwgcDIsIHByb3BzKSB7XG4gICAgaWYgKCFwcm9wcykge1xuICAgICAgICBwcm9wcyA9IFBST1BTX1hZO1xuICAgIH1cbiAgICB2YXIgeCA9IHAyW3Byb3BzWzBdXSAtIHAxW3Byb3BzWzBdXSxcbiAgICAgICAgeSA9IHAyW3Byb3BzWzFdXSAtIHAxW3Byb3BzWzFdXTtcblxuICAgIHJldHVybiBNYXRoLnNxcnQoKHggKiB4KSArICh5ICogeSkpO1xufVxuXG4vKipcbiAqIGNhbGN1bGF0ZSB0aGUgYW5nbGUgYmV0d2VlbiB0d28gY29vcmRpbmF0ZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwMVxuICogQHBhcmFtIHtPYmplY3R9IHAyXG4gKiBAcGFyYW0ge0FycmF5fSBbcHJvcHNdIGNvbnRhaW5pbmcgeCBhbmQgeSBrZXlzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIGdldEFuZ2xlKHAxLCBwMiwgcHJvcHMpIHtcbiAgICBpZiAoIXByb3BzKSB7XG4gICAgICAgIHByb3BzID0gUFJPUFNfWFk7XG4gICAgfVxuICAgIHZhciB4ID0gcDJbcHJvcHNbMF1dIC0gcDFbcHJvcHNbMF1dLFxuICAgICAgICB5ID0gcDJbcHJvcHNbMV1dIC0gcDFbcHJvcHNbMV1dO1xuICAgIHJldHVybiBNYXRoLmF0YW4yKHksIHgpICogMTgwIC8gTWF0aC5QSTtcbn1cblxuLyoqXG4gKiBjYWxjdWxhdGUgdGhlIHJvdGF0aW9uIGRlZ3JlZXMgYmV0d2VlbiB0d28gcG9pbnRlcnNldHNcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBlbmQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEByZXR1cm4ge051bWJlcn0gcm90YXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0Um90YXRpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBnZXRBbmdsZShlbmRbMV0sIGVuZFswXSwgUFJPUFNfQ0xJRU5UX1hZKSArIGdldEFuZ2xlKHN0YXJ0WzFdLCBzdGFydFswXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbn1cblxuLyoqXG4gKiBjYWxjdWxhdGUgdGhlIHNjYWxlIGZhY3RvciBiZXR3ZWVuIHR3byBwb2ludGVyc2V0c1xuICogbm8gc2NhbGUgaXMgMSwgYW5kIGdvZXMgZG93biB0byAwIHdoZW4gcGluY2hlZCB0b2dldGhlciwgYW5kIGJpZ2dlciB3aGVuIHBpbmNoZWQgb3V0XG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydCBhcnJheSBvZiBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gZW5kIGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHNjYWxlXG4gKi9cbmZ1bmN0aW9uIGdldFNjYWxlKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gZ2V0RGlzdGFuY2UoZW5kWzBdLCBlbmRbMV0sIFBST1BTX0NMSUVOVF9YWSkgLyBnZXREaXN0YW5jZShzdGFydFswXSwgc3RhcnRbMV0sIFBST1BTX0NMSUVOVF9YWSk7XG59XG5cbnZhciBNT1VTRV9JTlBVVF9NQVAgPSB7XG4gICAgbW91c2Vkb3duOiBJTlBVVF9TVEFSVCxcbiAgICBtb3VzZW1vdmU6IElOUFVUX01PVkUsXG4gICAgbW91c2V1cDogSU5QVVRfRU5EXG59O1xuXG52YXIgTU9VU0VfRUxFTUVOVF9FVkVOVFMgPSAnbW91c2Vkb3duJztcbnZhciBNT1VTRV9XSU5ET1dfRVZFTlRTID0gJ21vdXNlbW92ZSBtb3VzZXVwJztcblxuLyoqXG4gKiBNb3VzZSBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuZnVuY3Rpb24gTW91c2VJbnB1dCgpIHtcbiAgICB0aGlzLmV2RWwgPSBNT1VTRV9FTEVNRU5UX0VWRU5UUztcbiAgICB0aGlzLmV2V2luID0gTU9VU0VfV0lORE9XX0VWRU5UUztcblxuICAgIHRoaXMucHJlc3NlZCA9IGZhbHNlOyAvLyBtb3VzZWRvd24gc3RhdGVcblxuICAgIElucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmluaGVyaXQoTW91c2VJbnB1dCwgSW5wdXQsIHtcbiAgICAvKipcbiAgICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAgICovXG4gICAgaGFuZGxlcjogZnVuY3Rpb24gTUVoYW5kbGVyKGV2KSB7XG4gICAgICAgIHZhciBldmVudFR5cGUgPSBNT1VTRV9JTlBVVF9NQVBbZXYudHlwZV07XG5cbiAgICAgICAgLy8gb24gc3RhcnQgd2Ugd2FudCB0byBoYXZlIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiBkb3duXG4gICAgICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBldi5idXR0b24gPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMucHJlc3NlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfTU9WRSAmJiBldi53aGljaCAhPT0gMSkge1xuICAgICAgICAgICAgZXZlbnRUeXBlID0gSU5QVVRfRU5EO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbW91c2UgbXVzdCBiZSBkb3duXG4gICAgICAgIGlmICghdGhpcy5wcmVzc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICAgICAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgICAgICAgIHBvaW50ZXJzOiBbZXZdLFxuICAgICAgICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfTU9VU0UsXG4gICAgICAgICAgICBzcmNFdmVudDogZXZcbiAgICAgICAgfSk7XG4gICAgfVxufSk7XG5cbnZhciBQT0lOVEVSX0lOUFVUX01BUCA9IHtcbiAgICBwb2ludGVyZG93bjogSU5QVVRfU1RBUlQsXG4gICAgcG9pbnRlcm1vdmU6IElOUFVUX01PVkUsXG4gICAgcG9pbnRlcnVwOiBJTlBVVF9FTkQsXG4gICAgcG9pbnRlcmNhbmNlbDogSU5QVVRfQ0FOQ0VMLFxuICAgIHBvaW50ZXJvdXQ6IElOUFVUX0NBTkNFTFxufTtcblxuLy8gaW4gSUUxMCB0aGUgcG9pbnRlciB0eXBlcyBpcyBkZWZpbmVkIGFzIGFuIGVudW1cbnZhciBJRTEwX1BPSU5URVJfVFlQRV9FTlVNID0ge1xuICAgIDI6IElOUFVUX1RZUEVfVE9VQ0gsXG4gICAgMzogSU5QVVRfVFlQRV9QRU4sXG4gICAgNDogSU5QVVRfVFlQRV9NT1VTRSxcbiAgICA1OiBJTlBVVF9UWVBFX0tJTkVDVCAvLyBzZWUgaHR0cHM6Ly90d2l0dGVyLmNvbS9qYWNvYnJvc3NpL3N0YXR1cy80ODA1OTY0Mzg0ODk4OTA4MTZcbn07XG5cbnZhciBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTID0gJ3BvaW50ZXJkb3duJztcbnZhciBQT0lOVEVSX1dJTkRPV19FVkVOVFMgPSAncG9pbnRlcm1vdmUgcG9pbnRlcnVwIHBvaW50ZXJjYW5jZWwnO1xuXG4vLyBJRTEwIGhhcyBwcmVmaXhlZCBzdXBwb3J0LCBhbmQgY2FzZS1zZW5zaXRpdmVcbmlmICh3aW5kb3cuTVNQb2ludGVyRXZlbnQgJiYgIXdpbmRvdy5Qb2ludGVyRXZlbnQpIHtcbiAgICBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTID0gJ01TUG9pbnRlckRvd24nO1xuICAgIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdNU1BvaW50ZXJNb3ZlIE1TUG9pbnRlclVwIE1TUG9pbnRlckNhbmNlbCc7XG59XG5cbi8qKlxuICogUG9pbnRlciBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuZnVuY3Rpb24gUG9pbnRlckV2ZW50SW5wdXQoKSB7XG4gICAgdGhpcy5ldkVsID0gUE9JTlRFUl9FTEVNRU5UX0VWRU5UUztcbiAgICB0aGlzLmV2V2luID0gUE9JTlRFUl9XSU5ET1dfRVZFTlRTO1xuXG4gICAgSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHRoaXMuc3RvcmUgPSAodGhpcy5tYW5hZ2VyLnNlc3Npb24ucG9pbnRlckV2ZW50cyA9IFtdKTtcbn1cblxuaW5oZXJpdChQb2ludGVyRXZlbnRJbnB1dCwgSW5wdXQsIHtcbiAgICAvKipcbiAgICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAgICovXG4gICAgaGFuZGxlcjogZnVuY3Rpb24gUEVoYW5kbGVyKGV2KSB7XG4gICAgICAgIHZhciBzdG9yZSA9IHRoaXMuc3RvcmU7XG4gICAgICAgIHZhciByZW1vdmVQb2ludGVyID0gZmFsc2U7XG5cbiAgICAgICAgdmFyIGV2ZW50VHlwZU5vcm1hbGl6ZWQgPSBldi50eXBlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnbXMnLCAnJyk7XG4gICAgICAgIHZhciBldmVudFR5cGUgPSBQT0lOVEVSX0lOUFVUX01BUFtldmVudFR5cGVOb3JtYWxpemVkXTtcbiAgICAgICAgdmFyIHBvaW50ZXJUeXBlID0gSUUxMF9QT0lOVEVSX1RZUEVfRU5VTVtldi5wb2ludGVyVHlwZV0gfHwgZXYucG9pbnRlclR5cGU7XG5cbiAgICAgICAgdmFyIGlzVG91Y2ggPSAocG9pbnRlclR5cGUgPT0gSU5QVVRfVFlQRV9UT1VDSCk7XG5cbiAgICAgICAgLy8gZ2V0IGluZGV4IG9mIHRoZSBldmVudCBpbiB0aGUgc3RvcmVcbiAgICAgICAgdmFyIHN0b3JlSW5kZXggPSBpbkFycmF5KHN0b3JlLCBldi5wb2ludGVySWQsICdwb2ludGVySWQnKTtcblxuICAgICAgICAvLyBzdGFydCBhbmQgbW91c2UgbXVzdCBiZSBkb3duXG4gICAgICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiAoZXYuYnV0dG9uID09PSAwIHx8IGlzVG91Y2gpKSB7XG4gICAgICAgICAgICBpZiAoc3RvcmVJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICBzdG9yZS5wdXNoKGV2KTtcbiAgICAgICAgICAgICAgICBzdG9yZUluZGV4ID0gc3RvcmUubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgICAgICAgICAgcmVtb3ZlUG9pbnRlciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpdCBub3QgZm91bmQsIHNvIHRoZSBwb2ludGVyIGhhc24ndCBiZWVuIGRvd24gKHNvIGl0J3MgcHJvYmFibHkgYSBob3ZlcilcbiAgICAgICAgaWYgKHN0b3JlSW5kZXggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuICAgICAgICBzdG9yZVtzdG9yZUluZGV4XSA9IGV2O1xuXG4gICAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgICAgICAgIHBvaW50ZXJzOiBzdG9yZSxcbiAgICAgICAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgICAgICAgIHBvaW50ZXJUeXBlOiBwb2ludGVyVHlwZSxcbiAgICAgICAgICAgIHNyY0V2ZW50OiBldlxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVtb3ZlUG9pbnRlcikge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIGZyb20gdGhlIHN0b3JlXG4gICAgICAgICAgICBzdG9yZS5zcGxpY2Uoc3RvcmVJbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxudmFyIFNJTkdMRV9UT1VDSF9JTlBVVF9NQVAgPSB7XG4gICAgdG91Y2hzdGFydDogSU5QVVRfU1RBUlQsXG4gICAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICAgIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gICAgdG91Y2hjYW5jZWw6IElOUFVUX0NBTkNFTFxufTtcblxudmFyIFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTID0gJ3RvdWNoc3RhcnQnO1xudmFyIFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTID0gJ3RvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsJztcblxuLyoqXG4gKiBUb3VjaCBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuZnVuY3Rpb24gU2luZ2xlVG91Y2hJbnB1dCgpIHtcbiAgICB0aGlzLmV2VGFyZ2V0ID0gU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgdGhpcy5ldldpbiA9IFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTO1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuaW5oZXJpdChTaW5nbGVUb3VjaElucHV0LCBJbnB1dCwge1xuICAgIGhhbmRsZXI6IGZ1bmN0aW9uIFRFaGFuZGxlcihldikge1xuICAgICAgICB2YXIgdHlwZSA9IFNJTkdMRV9UT1VDSF9JTlBVVF9NQVBbZXYudHlwZV07XG5cbiAgICAgICAgLy8gc2hvdWxkIHdlIGhhbmRsZSB0aGUgdG91Y2ggZXZlbnRzP1xuICAgICAgICBpZiAodHlwZSA9PT0gSU5QVVRfU1RBUlQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRvdWNoZXMgPSBub3JtYWxpemVTaW5nbGVUb3VjaGVzLmNhbGwodGhpcywgZXYsIHR5cGUpO1xuXG4gICAgICAgIC8vIHdoZW4gZG9uZSwgcmVzZXQgdGhlIHN0YXJ0ZWQgc3RhdGVcbiAgICAgICAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiB0b3VjaGVzWzBdLmxlbmd0aCAtIHRvdWNoZXNbMV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICAgICAgICBwb2ludGVyczogdG91Y2hlc1swXSxcbiAgICAgICAgICAgIGNoYW5nZWRQb2ludGVyczogdG91Y2hlc1sxXSxcbiAgICAgICAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgICAgIH0pO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIEB0aGlzIHtUb3VjaElucHV0fVxuICogQHBhcmFtIHtPYmplY3R9IGV2XG4gKiBAcGFyYW0ge051bWJlcn0gdHlwZSBmbGFnXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfEFycmF5fSBbYWxsLCBjaGFuZ2VkXVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVTaW5nbGVUb3VjaGVzKGV2LCB0eXBlKSB7XG4gICAgdmFyIGFsbCA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gICAgdmFyIGNoYW5nZWQgPSB0b0FycmF5KGV2LmNoYW5nZWRUb3VjaGVzKTtcblxuICAgIGlmICh0eXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICAgICAgYWxsID0gdW5pcXVlQXJyYXkoYWxsLmNvbmNhdChjaGFuZ2VkKSwgJ2lkZW50aWZpZXInLCB0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW2FsbCwgY2hhbmdlZF07XG59XG5cbnZhciBUT1VDSF9JTlBVVF9NQVAgPSB7XG4gICAgdG91Y2hzdGFydDogSU5QVVRfU1RBUlQsXG4gICAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICAgIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gICAgdG91Y2hjYW5jZWw6IElOUFVUX0NBTkNFTFxufTtcblxudmFyIFRPVUNIX1RBUkdFVF9FVkVOVFMgPSAndG91Y2hzdGFydCB0b3VjaG1vdmUgdG91Y2hlbmQgdG91Y2hjYW5jZWwnO1xuXG4vKipcbiAqIE11bHRpLXVzZXIgdG91Y2ggZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cbmZ1bmN0aW9uIFRvdWNoSW5wdXQoKSB7XG4gICAgdGhpcy5ldlRhcmdldCA9IFRPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgdGhpcy50YXJnZXRJZHMgPSB7fTtcblxuICAgIElucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmluaGVyaXQoVG91Y2hJbnB1dCwgSW5wdXQsIHtcbiAgICBoYW5kbGVyOiBmdW5jdGlvbiBNVEVoYW5kbGVyKGV2KSB7XG4gICAgICAgIHZhciB0eXBlID0gVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdO1xuICAgICAgICB2YXIgdG91Y2hlcyA9IGdldFRvdWNoZXMuY2FsbCh0aGlzLCBldiwgdHlwZSk7XG4gICAgICAgIGlmICghdG91Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIHR5cGUsIHtcbiAgICAgICAgICAgIHBvaW50ZXJzOiB0b3VjaGVzWzBdLFxuICAgICAgICAgICAgY2hhbmdlZFBvaW50ZXJzOiB0b3VjaGVzWzFdLFxuICAgICAgICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfVE9VQ0gsXG4gICAgICAgICAgICBzcmNFdmVudDogZXZcbiAgICAgICAgfSk7XG4gICAgfVxufSk7XG5cbi8qKlxuICogQHRoaXMge1RvdWNoSW5wdXR9XG4gKiBAcGFyYW0ge09iamVjdH0gZXZcbiAqIEBwYXJhbSB7TnVtYmVyfSB0eXBlIGZsYWdcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR8QXJyYXl9IFthbGwsIGNoYW5nZWRdXG4gKi9cbmZ1bmN0aW9uIGdldFRvdWNoZXMoZXYsIHR5cGUpIHtcbiAgICB2YXIgYWxsVG91Y2hlcyA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gICAgdmFyIHRhcmdldElkcyA9IHRoaXMudGFyZ2V0SWRzO1xuXG4gICAgLy8gd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSB0b3VjaCwgdGhlIHByb2Nlc3MgY2FuIGJlIHNpbXBsaWZpZWRcbiAgICBpZiAodHlwZSAmIChJTlBVVF9TVEFSVCB8IElOUFVUX01PVkUpICYmIGFsbFRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRhcmdldElkc1thbGxUb3VjaGVzWzBdLmlkZW50aWZpZXJdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIFthbGxUb3VjaGVzLCBhbGxUb3VjaGVzXTtcbiAgICB9XG5cbiAgICB2YXIgaSxcbiAgICAgICAgdGFyZ2V0VG91Y2hlcyxcbiAgICAgICAgY2hhbmdlZFRvdWNoZXMgPSB0b0FycmF5KGV2LmNoYW5nZWRUb3VjaGVzKSxcbiAgICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXMgPSBbXSxcbiAgICAgICAgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XG5cbiAgICAvLyBnZXQgdGFyZ2V0IHRvdWNoZXMgZnJvbSB0b3VjaGVzXG4gICAgdGFyZ2V0VG91Y2hlcyA9IGFsbFRvdWNoZXMuZmlsdGVyKGZ1bmN0aW9uKHRvdWNoKSB7XG4gICAgICAgIHJldHVybiBoYXNQYXJlbnQodG91Y2gudGFyZ2V0LCB0YXJnZXQpO1xuICAgIH0pO1xuXG4gICAgLy8gY29sbGVjdCB0b3VjaGVzXG4gICAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgICAgIGkgPSAwO1xuICAgICAgICB3aGlsZSAoaSA8IHRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0YXJnZXRJZHNbdGFyZ2V0VG91Y2hlc1tpXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmaWx0ZXIgY2hhbmdlZCB0b3VjaGVzIHRvIG9ubHkgY29udGFpbiB0b3VjaGVzIHRoYXQgZXhpc3QgaW4gdGhlIGNvbGxlY3RlZCB0YXJnZXQgaWRzXG4gICAgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBjaGFuZ2VkVG91Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXSkge1xuICAgICAgICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXMucHVzaChjaGFuZ2VkVG91Y2hlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhbnVwIHJlbW92ZWQgdG91Y2hlc1xuICAgICAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICAgICAgICBkZWxldGUgdGFyZ2V0SWRzW2NoYW5nZWRUb3VjaGVzW2ldLmlkZW50aWZpZXJdO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG5cbiAgICBpZiAoIWNoYW5nZWRUYXJnZXRUb3VjaGVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgICAgLy8gbWVyZ2UgdGFyZ2V0VG91Y2hlcyB3aXRoIGNoYW5nZWRUYXJnZXRUb3VjaGVzIHNvIGl0IGNvbnRhaW5zIEFMTCB0b3VjaGVzLCBpbmNsdWRpbmcgJ2VuZCcgYW5kICdjYW5jZWwnXG4gICAgICAgIHVuaXF1ZUFycmF5KHRhcmdldFRvdWNoZXMuY29uY2F0KGNoYW5nZWRUYXJnZXRUb3VjaGVzKSwgJ2lkZW50aWZpZXInLCB0cnVlKSxcbiAgICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXNcbiAgICBdO1xufVxuXG4vKipcbiAqIENvbWJpbmVkIHRvdWNoIGFuZCBtb3VzZSBpbnB1dFxuICpcbiAqIFRvdWNoIGhhcyBhIGhpZ2hlciBwcmlvcml0eSB0aGVuIG1vdXNlLCBhbmQgd2hpbGUgdG91Y2hpbmcgbm8gbW91c2UgZXZlbnRzIGFyZSBhbGxvd2VkLlxuICogVGhpcyBiZWNhdXNlIHRvdWNoIGRldmljZXMgYWxzbyBlbWl0IG1vdXNlIGV2ZW50cyB3aGlsZSBkb2luZyBhIHRvdWNoLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgREVEVVBfVElNRU9VVCA9IDI1MDA7XG52YXIgREVEVVBfRElTVEFOQ0UgPSAyNTtcblxuZnVuY3Rpb24gVG91Y2hNb3VzZUlucHV0KCkge1xuICAgIElucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB2YXIgaGFuZGxlciA9IGJpbmRGbih0aGlzLmhhbmRsZXIsIHRoaXMpO1xuICAgIHRoaXMudG91Y2ggPSBuZXcgVG91Y2hJbnB1dCh0aGlzLm1hbmFnZXIsIGhhbmRsZXIpO1xuICAgIHRoaXMubW91c2UgPSBuZXcgTW91c2VJbnB1dCh0aGlzLm1hbmFnZXIsIGhhbmRsZXIpO1xuXG4gICAgdGhpcy5wcmltYXJ5VG91Y2ggPSBudWxsO1xuICAgIHRoaXMubGFzdFRvdWNoZXMgPSBbXTtcbn1cblxuaW5oZXJpdChUb3VjaE1vdXNlSW5wdXQsIElucHV0LCB7XG4gICAgLyoqXG4gICAgICogaGFuZGxlIG1vdXNlIGFuZCB0b3VjaCBldmVudHNcbiAgICAgKiBAcGFyYW0ge0hhbW1lcn0gbWFuYWdlclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dEV2ZW50XG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgICAqL1xuICAgIGhhbmRsZXI6IGZ1bmN0aW9uIFRNRWhhbmRsZXIobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKSB7XG4gICAgICAgIHZhciBpc1RvdWNoID0gKGlucHV0RGF0YS5wb2ludGVyVHlwZSA9PSBJTlBVVF9UWVBFX1RPVUNIKSxcbiAgICAgICAgICAgIGlzTW91c2UgPSAoaW5wdXREYXRhLnBvaW50ZXJUeXBlID09IElOUFVUX1RZUEVfTU9VU0UpO1xuXG4gICAgICAgIGlmIChpc01vdXNlICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMgJiYgaW5wdXREYXRhLnNvdXJjZUNhcGFiaWxpdGllcy5maXJlc1RvdWNoRXZlbnRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3aGVuIHdlJ3JlIGluIGEgdG91Y2ggZXZlbnQsIHJlY29yZCB0b3VjaGVzIHRvICBkZS1kdXBlIHN5bnRoZXRpYyBtb3VzZSBldmVudFxuICAgICAgICBpZiAoaXNUb3VjaCkge1xuICAgICAgICAgICAgcmVjb3JkVG91Y2hlcy5jYWxsKHRoaXMsIGlucHV0RXZlbnQsIGlucHV0RGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb3VzZSAmJiBpc1N5bnRoZXRpY0V2ZW50LmNhbGwodGhpcywgaW5wdXREYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsYmFjayhtYW5hZ2VyLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyc1xuICAgICAqL1xuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudG91Y2guZGVzdHJveSgpO1xuICAgICAgICB0aGlzLm1vdXNlLmRlc3Ryb3koKTtcbiAgICB9XG59KTtcblxuZnVuY3Rpb24gcmVjb3JkVG91Y2hlcyhldmVudFR5cGUsIGV2ZW50RGF0YSkge1xuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCkge1xuICAgICAgICB0aGlzLnByaW1hcnlUb3VjaCA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnNbMF0uaWRlbnRpZmllcjtcbiAgICAgICAgc2V0TGFzdFRvdWNoLmNhbGwodGhpcywgZXZlbnREYXRhKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICAgIHNldExhc3RUb3VjaC5jYWxsKHRoaXMsIGV2ZW50RGF0YSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzZXRMYXN0VG91Y2goZXZlbnREYXRhKSB7XG4gICAgdmFyIHRvdWNoID0gZXZlbnREYXRhLmNoYW5nZWRQb2ludGVyc1swXTtcblxuICAgIGlmICh0b3VjaC5pZGVudGlmaWVyID09PSB0aGlzLnByaW1hcnlUb3VjaCkge1xuICAgICAgICB2YXIgbGFzdFRvdWNoID0ge3g6IHRvdWNoLmNsaWVudFgsIHk6IHRvdWNoLmNsaWVudFl9O1xuICAgICAgICB0aGlzLmxhc3RUb3VjaGVzLnB1c2gobGFzdFRvdWNoKTtcbiAgICAgICAgdmFyIGx0cyA9IHRoaXMubGFzdFRvdWNoZXM7XG4gICAgICAgIHZhciByZW1vdmVMYXN0VG91Y2ggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBpID0gbHRzLmluZGV4T2YobGFzdFRvdWNoKTtcbiAgICAgICAgICAgIGlmIChpID4gLTEpIHtcbiAgICAgICAgICAgICAgICBsdHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzZXRUaW1lb3V0KHJlbW92ZUxhc3RUb3VjaCwgREVEVVBfVElNRU9VVCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KGV2ZW50RGF0YSkge1xuICAgIHZhciB4ID0gZXZlbnREYXRhLnNyY0V2ZW50LmNsaWVudFgsIHkgPSBldmVudERhdGEuc3JjRXZlbnQuY2xpZW50WTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGFzdFRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHQgPSB0aGlzLmxhc3RUb3VjaGVzW2ldO1xuICAgICAgICB2YXIgZHggPSBNYXRoLmFicyh4IC0gdC54KSwgZHkgPSBNYXRoLmFicyh5IC0gdC55KTtcbiAgICAgICAgaWYgKGR4IDw9IERFRFVQX0RJU1RBTkNFICYmIGR5IDw9IERFRFVQX0RJU1RBTkNFKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBQUkVGSVhFRF9UT1VDSF9BQ1RJT04gPSBwcmVmaXhlZChURVNUX0VMRU1FTlQuc3R5bGUsICd0b3VjaEFjdGlvbicpO1xudmFyIE5BVElWRV9UT1VDSF9BQ1RJT04gPSBQUkVGSVhFRF9UT1VDSF9BQ1RJT04gIT09IHVuZGVmaW5lZDtcblxuLy8gbWFnaWNhbCB0b3VjaEFjdGlvbiB2YWx1ZVxudmFyIFRPVUNIX0FDVElPTl9DT01QVVRFID0gJ2NvbXB1dGUnO1xudmFyIFRPVUNIX0FDVElPTl9BVVRPID0gJ2F1dG8nO1xudmFyIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04gPSAnbWFuaXB1bGF0aW9uJzsgLy8gbm90IGltcGxlbWVudGVkXG52YXIgVE9VQ0hfQUNUSU9OX05PTkUgPSAnbm9uZSc7XG52YXIgVE9VQ0hfQUNUSU9OX1BBTl9YID0gJ3Bhbi14JztcbnZhciBUT1VDSF9BQ1RJT05fUEFOX1kgPSAncGFuLXknO1xudmFyIFRPVUNIX0FDVElPTl9NQVAgPSBnZXRUb3VjaEFjdGlvblByb3BzKCk7XG5cbi8qKlxuICogVG91Y2ggQWN0aW9uXG4gKiBzZXRzIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eSBvciB1c2VzIHRoZSBqcyBhbHRlcm5hdGl2ZVxuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBUb3VjaEFjdGlvbihtYW5hZ2VyLCB2YWx1ZSkge1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5zZXQodmFsdWUpO1xufVxuXG5Ub3VjaEFjdGlvbi5wcm90b3R5cGUgPSB7XG4gICAgLyoqXG4gICAgICogc2V0IHRoZSB0b3VjaEFjdGlvbiB2YWx1ZSBvbiB0aGUgZWxlbWVudCBvciBlbmFibGUgdGhlIHBvbHlmaWxsXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gICAgICovXG4gICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAvLyBmaW5kIG91dCB0aGUgdG91Y2gtYWN0aW9uIGJ5IHRoZSBldmVudCBoYW5kbGVyc1xuICAgICAgICBpZiAodmFsdWUgPT0gVE9VQ0hfQUNUSU9OX0NPTVBVVEUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5jb21wdXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTkFUSVZFX1RPVUNIX0FDVElPTiAmJiB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZSAmJiBUT1VDSF9BQ1RJT05fTUFQW3ZhbHVlXSkge1xuICAgICAgICAgICAgdGhpcy5tYW5hZ2VyLmVsZW1lbnQuc3R5bGVbUFJFRklYRURfVE9VQ0hfQUNUSU9OXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBqdXN0IHJlLXNldCB0aGUgdG91Y2hBY3Rpb24gdmFsdWVcbiAgICAgKi9cbiAgICB1cGRhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNldCh0aGlzLm1hbmFnZXIub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNvbXB1dGUgdGhlIHZhbHVlIGZvciB0aGUgdG91Y2hBY3Rpb24gcHJvcGVydHkgYmFzZWQgb24gdGhlIHJlY29nbml6ZXIncyBzZXR0aW5nc1xuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHZhbHVlXG4gICAgICovXG4gICAgY29tcHV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhY3Rpb25zID0gW107XG4gICAgICAgIGVhY2godGhpcy5tYW5hZ2VyLnJlY29nbml6ZXJzLCBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgICAgICAgICBpZiAoYm9vbE9yRm4ocmVjb2duaXplci5vcHRpb25zLmVuYWJsZSwgW3JlY29nbml6ZXJdKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbnMgPSBhY3Rpb25zLmNvbmNhdChyZWNvZ25pemVyLmdldFRvdWNoQWN0aW9uKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNsZWFuVG91Y2hBY3Rpb25zKGFjdGlvbnMuam9pbignICcpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogdGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIGVhY2ggaW5wdXQgY3ljbGUgYW5kIHByb3ZpZGVzIHRoZSBwcmV2ZW50aW5nIG9mIHRoZSBicm93c2VyIGJlaGF2aW9yXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAgICovXG4gICAgcHJldmVudERlZmF1bHRzOiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgc3JjRXZlbnQgPSBpbnB1dC5zcmNFdmVudDtcbiAgICAgICAgdmFyIGRpcmVjdGlvbiA9IGlucHV0Lm9mZnNldERpcmVjdGlvbjtcblxuICAgICAgICAvLyBpZiB0aGUgdG91Y2ggYWN0aW9uIGRpZCBwcmV2ZW50ZWQgb25jZSB0aGlzIHNlc3Npb25cbiAgICAgICAgaWYgKHRoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZCkge1xuICAgICAgICAgICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICB2YXIgaGFzTm9uZSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gICAgICAgIHZhciBoYXNQYW5ZID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9ZKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fUEFOX1ldO1xuICAgICAgICB2YXIgaGFzUGFuWCA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWCkgJiYgIVRPVUNIX0FDVElPTl9NQVBbVE9VQ0hfQUNUSU9OX1BBTl9YXTtcblxuICAgICAgICBpZiAoaGFzTm9uZSkge1xuICAgICAgICAgICAgLy9kbyBub3QgcHJldmVudCBkZWZhdWx0cyBpZiB0aGlzIGlzIGEgdGFwIGdlc3R1cmVcblxuICAgICAgICAgICAgdmFyIGlzVGFwUG9pbnRlciA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gMTtcbiAgICAgICAgICAgIHZhciBpc1RhcE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCAyO1xuICAgICAgICAgICAgdmFyIGlzVGFwVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgMjUwO1xuXG4gICAgICAgICAgICBpZiAoaXNUYXBQb2ludGVyICYmIGlzVGFwTW92ZW1lbnQgJiYgaXNUYXBUb3VjaFRpbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzUGFuWCAmJiBoYXNQYW5ZKSB7XG4gICAgICAgICAgICAvLyBgcGFuLXggcGFuLXlgIG1lYW5zIGJyb3dzZXIgaGFuZGxlcyBhbGwgc2Nyb2xsaW5nL3Bhbm5pbmcsIGRvIG5vdCBwcmV2ZW50XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzTm9uZSB8fFxuICAgICAgICAgICAgKGhhc1BhblkgJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHx8XG4gICAgICAgICAgICAoaGFzUGFuWCAmJiBkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmV2ZW50U3JjKHNyY0V2ZW50KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBjYWxsIHByZXZlbnREZWZhdWx0IHRvIHByZXZlbnQgdGhlIGJyb3dzZXIncyBkZWZhdWx0IGJlaGF2aW9yIChzY3JvbGxpbmcgaW4gbW9zdCBjYXNlcylcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc3JjRXZlbnRcbiAgICAgKi9cbiAgICBwcmV2ZW50U3JjOiBmdW5jdGlvbihzcmNFdmVudCkge1xuICAgICAgICB0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQgPSB0cnVlO1xuICAgICAgICBzcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogd2hlbiB0aGUgdG91Y2hBY3Rpb25zIGFyZSBjb2xsZWN0ZWQgdGhleSBhcmUgbm90IGEgdmFsaWQgdmFsdWUsIHNvIHdlIG5lZWQgdG8gY2xlYW4gdGhpbmdzIHVwLiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWN0aW9uc1xuICogQHJldHVybnMgeyp9XG4gKi9cbmZ1bmN0aW9uIGNsZWFuVG91Y2hBY3Rpb25zKGFjdGlvbnMpIHtcbiAgICAvLyBub25lXG4gICAgaWYgKGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSkge1xuICAgICAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gICAgfVxuXG4gICAgdmFyIGhhc1BhblggPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICAgIHZhciBoYXNQYW5ZID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9ZKTtcblxuICAgIC8vIGlmIGJvdGggcGFuLXggYW5kIHBhbi15IGFyZSBzZXQgKGRpZmZlcmVudCByZWNvZ25pemVyc1xuICAgIC8vIGZvciBkaWZmZXJlbnQgZGlyZWN0aW9ucywgZS5nLiBob3Jpem9udGFsIHBhbiBidXQgdmVydGljYWwgc3dpcGU/KVxuICAgIC8vIHdlIG5lZWQgbm9uZSAoYXMgb3RoZXJ3aXNlIHdpdGggcGFuLXggcGFuLXkgY29tYmluZWQgbm9uZSBvZiB0aGVzZVxuICAgIC8vIHJlY29nbml6ZXJzIHdpbGwgd29yaywgc2luY2UgdGhlIGJyb3dzZXIgd291bGQgaGFuZGxlIGFsbCBwYW5uaW5nXG4gICAgaWYgKGhhc1BhblggJiYgaGFzUGFuWSkge1xuICAgICAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gICAgfVxuXG4gICAgLy8gcGFuLXggT1IgcGFuLXlcbiAgICBpZiAoaGFzUGFuWCB8fCBoYXNQYW5ZKSB7XG4gICAgICAgIHJldHVybiBoYXNQYW5YID8gVE9VQ0hfQUNUSU9OX1BBTl9YIDogVE9VQ0hfQUNUSU9OX1BBTl9ZO1xuICAgIH1cblxuICAgIC8vIG1hbmlwdWxhdGlvblxuICAgIGlmIChpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OKSkge1xuICAgICAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTjtcbiAgICB9XG5cbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX0FVVE87XG59XG5cbmZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uUHJvcHMoKSB7XG4gICAgaWYgKCFOQVRJVkVfVE9VQ0hfQUNUSU9OKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIHRvdWNoTWFwID0ge307XG4gICAgdmFyIGNzc1N1cHBvcnRzID0gd2luZG93LkNTUyAmJiB3aW5kb3cuQ1NTLnN1cHBvcnRzO1xuICAgIFsnYXV0bycsICdtYW5pcHVsYXRpb24nLCAncGFuLXknLCAncGFuLXgnLCAncGFuLXggcGFuLXknLCAnbm9uZSddLmZvckVhY2goZnVuY3Rpb24odmFsKSB7XG5cbiAgICAgICAgLy8gSWYgY3NzLnN1cHBvcnRzIGlzIG5vdCBzdXBwb3J0ZWQgYnV0IHRoZXJlIGlzIG5hdGl2ZSB0b3VjaC1hY3Rpb24gYXNzdW1lIGl0IHN1cHBvcnRzXG4gICAgICAgIC8vIGFsbCB2YWx1ZXMuIFRoaXMgaXMgdGhlIGNhc2UgZm9yIElFIDEwIGFuZCAxMS5cbiAgICAgICAgdG91Y2hNYXBbdmFsXSA9IGNzc1N1cHBvcnRzID8gd2luZG93LkNTUy5zdXBwb3J0cygndG91Y2gtYWN0aW9uJywgdmFsKSA6IHRydWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRvdWNoTWFwO1xufVxuXG4vKipcbiAqIFJlY29nbml6ZXIgZmxvdyBleHBsYWluZWQ7ICpcbiAqIEFsbCByZWNvZ25pemVycyBoYXZlIHRoZSBpbml0aWFsIHN0YXRlIG9mIFBPU1NJQkxFIHdoZW4gYSBpbnB1dCBzZXNzaW9uIHN0YXJ0cy5cbiAqIFRoZSBkZWZpbml0aW9uIG9mIGEgaW5wdXQgc2Vzc2lvbiBpcyBmcm9tIHRoZSBmaXJzdCBpbnB1dCB1bnRpbCB0aGUgbGFzdCBpbnB1dCwgd2l0aCBhbGwgaXQncyBtb3ZlbWVudCBpbiBpdC4gKlxuICogRXhhbXBsZSBzZXNzaW9uIGZvciBtb3VzZS1pbnB1dDogbW91c2Vkb3duIC0+IG1vdXNlbW92ZSAtPiBtb3VzZXVwXG4gKlxuICogT24gZWFjaCByZWNvZ25pemluZyBjeWNsZSAoc2VlIE1hbmFnZXIucmVjb2duaXplKSB0aGUgLnJlY29nbml6ZSgpIG1ldGhvZCBpcyBleGVjdXRlZFxuICogd2hpY2ggZGV0ZXJtaW5lcyB3aXRoIHN0YXRlIGl0IHNob3VsZCBiZS5cbiAqXG4gKiBJZiB0aGUgcmVjb2duaXplciBoYXMgdGhlIHN0YXRlIEZBSUxFRCwgQ0FOQ0VMTEVEIG9yIFJFQ09HTklaRUQgKGVxdWFscyBFTkRFRCksIGl0IGlzIHJlc2V0IHRvXG4gKiBQT1NTSUJMRSB0byBnaXZlIGl0IGFub3RoZXIgY2hhbmdlIG9uIHRoZSBuZXh0IGN5Y2xlLlxuICpcbiAqICAgICAgICAgICAgICAgUG9zc2libGVcbiAqICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICArLS0tLS0rLS0tLS0tLS0tLS0tLS0tK1xuICogICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICArLS0tLS0rLS0tLS0rICAgICAgICAgICAgICAgfFxuICogICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgfFxuICogICBGYWlsZWQgICAgICBDYW5jZWxsZWQgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKy0tLS0tLStcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICBSZWNvZ25pemVkICAgICAgIEJlZ2FuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmRlZC9SZWNvZ25pemVkXG4gKi9cbnZhciBTVEFURV9QT1NTSUJMRSA9IDE7XG52YXIgU1RBVEVfQkVHQU4gPSAyO1xudmFyIFNUQVRFX0NIQU5HRUQgPSA0O1xudmFyIFNUQVRFX0VOREVEID0gODtcbnZhciBTVEFURV9SRUNPR05JWkVEID0gU1RBVEVfRU5ERUQ7XG52YXIgU1RBVEVfQ0FOQ0VMTEVEID0gMTY7XG52YXIgU1RBVEVfRkFJTEVEID0gMzI7XG5cbi8qKlxuICogUmVjb2duaXplclxuICogRXZlcnkgcmVjb2duaXplciBuZWVkcyB0byBleHRlbmQgZnJvbSB0aGlzIGNsYXNzLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5mdW5jdGlvbiBSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBhc3NpZ24oe30sIHRoaXMuZGVmYXVsdHMsIG9wdGlvbnMgfHwge30pO1xuXG4gICAgdGhpcy5pZCA9IHVuaXF1ZUlkKCk7XG5cbiAgICB0aGlzLm1hbmFnZXIgPSBudWxsO1xuXG4gICAgLy8gZGVmYXVsdCBpcyBlbmFibGUgdHJ1ZVxuICAgIHRoaXMub3B0aW9ucy5lbmFibGUgPSBpZlVuZGVmaW5lZCh0aGlzLm9wdGlvbnMuZW5hYmxlLCB0cnVlKTtcblxuICAgIHRoaXMuc3RhdGUgPSBTVEFURV9QT1NTSUJMRTtcblxuICAgIHRoaXMuc2ltdWx0YW5lb3VzID0ge307XG4gICAgdGhpcy5yZXF1aXJlRmFpbCA9IFtdO1xufVxuXG5SZWNvZ25pemVyLnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBAdmlydHVhbFxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgZGVmYXVsdHM6IHt9LFxuXG4gICAgLyoqXG4gICAgICogc2V0IG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgICAqIEByZXR1cm4ge1JlY29nbml6ZXJ9XG4gICAgICovXG4gICAgc2V0OiBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgIGFzc2lnbih0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIGFsc28gdXBkYXRlIHRoZSB0b3VjaEFjdGlvbiwgaW4gY2FzZSBzb21ldGhpbmcgY2hhbmdlZCBhYm91dCB0aGUgZGlyZWN0aW9ucy9lbmFibGVkIHN0YXRlXG4gICAgICAgIHRoaXMubWFuYWdlciAmJiB0aGlzLm1hbmFnZXIudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZWNvZ25pemUgc2ltdWx0YW5lb3VzIHdpdGggYW4gb3RoZXIgcmVjb2duaXplci5cbiAgICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAgICovXG4gICAgcmVjb2duaXplV2l0aDogZnVuY3Rpb24ob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpbXVsdGFuZW91cyA9IHRoaXMuc2ltdWx0YW5lb3VzO1xuICAgICAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgICAgIGlmICghc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF0pIHtcbiAgICAgICAgICAgIHNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdID0gb3RoZXJSZWNvZ25pemVyO1xuICAgICAgICAgICAgb3RoZXJSZWNvZ25pemVyLnJlY29nbml6ZVdpdGgodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGRyb3AgdGhlIHNpbXVsdGFuZW91cyBsaW5rLiBpdCBkb2VzbnQgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICAgKi9cbiAgICBkcm9wUmVjb2duaXplV2l0aDogZnVuY3Rpb24ob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdkcm9wUmVjb2duaXplV2l0aCcsIHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZWNvZ25pemVyIGNhbiBvbmx5IHJ1biB3aGVuIGFuIG90aGVyIGlzIGZhaWxpbmdcbiAgICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAgICovXG4gICAgcmVxdWlyZUZhaWx1cmU6IGZ1bmN0aW9uKG90aGVyUmVjb2duaXplcikge1xuICAgICAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAncmVxdWlyZUZhaWx1cmUnLCB0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVxdWlyZUZhaWwgPSB0aGlzLnJlcXVpcmVGYWlsO1xuICAgICAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgICAgIGlmIChpbkFycmF5KHJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpID09PSAtMSkge1xuICAgICAgICAgICAgcmVxdWlyZUZhaWwucHVzaChvdGhlclJlY29nbml6ZXIpO1xuICAgICAgICAgICAgb3RoZXJSZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBkcm9wIHRoZSByZXF1aXJlRmFpbHVyZSBsaW5rLiBpdCBkb2VzIG5vdCByZW1vdmUgdGhlIGxpbmsgb24gdGhlIG90aGVyIHJlY29nbml6ZXIuXG4gICAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgICAqL1xuICAgIGRyb3BSZXF1aXJlRmFpbHVyZTogZnVuY3Rpb24ob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdkcm9wUmVxdWlyZUZhaWx1cmUnLCB0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgICAgIHZhciBpbmRleCA9IGluQXJyYXkodGhpcy5yZXF1aXJlRmFpbCwgb3RoZXJSZWNvZ25pemVyKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWlyZUZhaWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogaGFzIHJlcXVpcmUgZmFpbHVyZXMgYm9vbGVhblxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGhhc1JlcXVpcmVGYWlsdXJlczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aCA+IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGlmIHRoZSByZWNvZ25pemVyIGNhbiByZWNvZ25pemUgc2ltdWx0YW5lb3VzIHdpdGggYW4gb3RoZXIgcmVjb2duaXplclxuICAgICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAgICovXG4gICAgY2FuUmVjb2duaXplV2l0aDogZnVuY3Rpb24ob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFlvdSBzaG91bGQgdXNlIGB0cnlFbWl0YCBpbnN0ZWFkIG9mIGBlbWl0YCBkaXJlY3RseSB0byBjaGVja1xuICAgICAqIHRoYXQgYWxsIHRoZSBuZWVkZWQgcmVjb2duaXplcnMgaGFzIGZhaWxlZCBiZWZvcmUgZW1pdHRpbmcuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAgICovXG4gICAgZW1pdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIGZ1bmN0aW9uIGVtaXQoZXZlbnQpIHtcbiAgICAgICAgICAgIHNlbGYubWFuYWdlci5lbWl0KGV2ZW50LCBpbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAncGFuc3RhcnQnIGFuZCAncGFubW92ZSdcbiAgICAgICAgaWYgKHN0YXRlIDwgU1RBVEVfRU5ERUQpIHtcbiAgICAgICAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50KTsgLy8gc2ltcGxlICdldmVudE5hbWUnIGV2ZW50c1xuXG4gICAgICAgIGlmIChpbnB1dC5hZGRpdGlvbmFsRXZlbnQpIHsgLy8gYWRkaXRpb25hbCBldmVudChwYW5sZWZ0LCBwYW5yaWdodCwgcGluY2hpbiwgcGluY2hvdXQuLi4pXG4gICAgICAgICAgICBlbWl0KGlucHV0LmFkZGl0aW9uYWxFdmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwYW5lbmQgYW5kIHBhbmNhbmNlbFxuICAgICAgICBpZiAoc3RhdGUgPj0gU1RBVEVfRU5ERUQpIHtcbiAgICAgICAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayB0aGF0IGFsbCB0aGUgcmVxdWlyZSBmYWlsdXJlIHJlY29nbml6ZXJzIGhhcyBmYWlsZWQsXG4gICAgICogaWYgdHJ1ZSwgaXQgZW1pdHMgYSBnZXN0dXJlIGV2ZW50LFxuICAgICAqIG90aGVyd2lzZSwgc2V0dXAgdGhlIHN0YXRlIHRvIEZBSUxFRC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICAgKi9cbiAgICB0cnlFbWl0OiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5jYW5FbWl0KCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVtaXQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGl0J3MgZmFpbGluZyBhbnl3YXlcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogY2FuIHdlIGVtaXQ/XG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgY2FuRW1pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPCB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKCEodGhpcy5yZXF1aXJlRmFpbFtpXS5zdGF0ZSAmIChTVEFURV9GQUlMRUQgfCBTVEFURV9QT1NTSUJMRSkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiB1cGRhdGUgdGhlIHJlY29nbml6ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICovXG4gICAgcmVjb2duaXplOiBmdW5jdGlvbihpbnB1dERhdGEpIHtcbiAgICAgICAgLy8gbWFrZSBhIG5ldyBjb3B5IG9mIHRoZSBpbnB1dERhdGFcbiAgICAgICAgLy8gc28gd2UgY2FuIGNoYW5nZSB0aGUgaW5wdXREYXRhIHdpdGhvdXQgbWVzc2luZyB1cCB0aGUgb3RoZXIgcmVjb2duaXplcnNcbiAgICAgICAgdmFyIGlucHV0RGF0YUNsb25lID0gYXNzaWduKHt9LCBpbnB1dERhdGEpO1xuXG4gICAgICAgIC8vIGlzIGlzIGVuYWJsZWQgYW5kIGFsbG93IHJlY29nbml6aW5nP1xuICAgICAgICBpZiAoIWJvb2xPckZuKHRoaXMub3B0aW9ucy5lbmFibGUsIFt0aGlzLCBpbnB1dERhdGFDbG9uZV0pKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVzZXQgd2hlbiB3ZSd2ZSByZWFjaGVkIHRoZSBlbmRcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgJiAoU1RBVEVfUkVDT0dOSVpFRCB8IFNUQVRFX0NBTkNFTExFRCB8IFNUQVRFX0ZBSUxFRCkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9QT1NTSUJMRTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLnByb2Nlc3MoaW5wdXREYXRhQ2xvbmUpO1xuXG4gICAgICAgIC8vIHRoZSByZWNvZ25pemVyIGhhcyByZWNvZ25pemVkIGEgZ2VzdHVyZVxuICAgICAgICAvLyBzbyB0cmlnZ2VyIGFuIGV2ZW50XG4gICAgICAgIGlmICh0aGlzLnN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCB8IFNUQVRFX0VOREVEIHwgU1RBVEVfQ0FOQ0VMTEVEKSkge1xuICAgICAgICAgICAgdGhpcy50cnlFbWl0KGlucHV0RGF0YUNsb25lKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZXR1cm4gdGhlIHN0YXRlIG9mIHRoZSByZWNvZ25pemVyXG4gICAgICogdGhlIGFjdHVhbCByZWNvZ25pemluZyBoYXBwZW5zIGluIHRoaXMgbWV0aG9kXG4gICAgICogQHZpcnR1YWxcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICogQHJldHVybnMge0NvbnN0fSBTVEFURVxuICAgICAqL1xuICAgIHByb2Nlc3M6IGZ1bmN0aW9uKGlucHV0RGF0YSkgeyB9LCAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuICAgIC8qKlxuICAgICAqIHJldHVybiB0aGUgcHJlZmVycmVkIHRvdWNoLWFjdGlvblxuICAgICAqIEB2aXJ0dWFsXG4gICAgICogQHJldHVybnMge0FycmF5fVxuICAgICAqL1xuICAgIGdldFRvdWNoQWN0aW9uOiBmdW5jdGlvbigpIHsgfSxcblxuICAgIC8qKlxuICAgICAqIGNhbGxlZCB3aGVuIHRoZSBnZXN0dXJlIGlzbid0IGFsbG93ZWQgdG8gcmVjb2duaXplXG4gICAgICogbGlrZSB3aGVuIGFub3RoZXIgaXMgYmVpbmcgcmVjb2duaXplZCBvciBpdCBpcyBkaXNhYmxlZFxuICAgICAqIEB2aXJ0dWFsXG4gICAgICovXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKCkgeyB9XG59O1xuXG4vKipcbiAqIGdldCBhIHVzYWJsZSBzdHJpbmcsIHVzZWQgYXMgZXZlbnQgcG9zdGZpeFxuICogQHBhcmFtIHtDb25zdH0gc3RhdGVcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0YXRlXG4gKi9cbmZ1bmN0aW9uIHN0YXRlU3RyKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlICYgU1RBVEVfQ0FOQ0VMTEVEKSB7XG4gICAgICAgIHJldHVybiAnY2FuY2VsJztcbiAgICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfRU5ERUQpIHtcbiAgICAgICAgcmV0dXJuICdlbmQnO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9DSEFOR0VEKSB7XG4gICAgICAgIHJldHVybiAnbW92ZSc7XG4gICAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0JFR0FOKSB7XG4gICAgICAgIHJldHVybiAnc3RhcnQnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogZGlyZWN0aW9uIGNvbnMgdG8gc3RyaW5nXG4gKiBAcGFyYW0ge0NvbnN0fSBkaXJlY3Rpb25cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGRpcmVjdGlvblN0cihkaXJlY3Rpb24pIHtcbiAgICBpZiAoZGlyZWN0aW9uID09IERJUkVDVElPTl9ET1dOKSB7XG4gICAgICAgIHJldHVybiAnZG93bic7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT0gRElSRUNUSU9OX1VQKSB7XG4gICAgICAgIHJldHVybiAndXAnO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09IERJUkVDVElPTl9MRUZUKSB7XG4gICAgICAgIHJldHVybiAnbGVmdCc7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT0gRElSRUNUSU9OX1JJR0hUKSB7XG4gICAgICAgIHJldHVybiAncmlnaHQnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogZ2V0IGEgcmVjb2duaXplciBieSBuYW1lIGlmIGl0IGlzIGJvdW5kIHRvIGEgbWFuYWdlclxuICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gb3RoZXJSZWNvZ25pemVyXG4gKiBAcGFyYW0ge1JlY29nbml6ZXJ9IHJlY29nbml6ZXJcbiAqIEByZXR1cm5zIHtSZWNvZ25pemVyfVxuICovXG5mdW5jdGlvbiBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgcmVjb2duaXplcikge1xuICAgIHZhciBtYW5hZ2VyID0gcmVjb2duaXplci5tYW5hZ2VyO1xuICAgIGlmIChtYW5hZ2VyKSB7XG4gICAgICAgIHJldHVybiBtYW5hZ2VyLmdldChvdGhlclJlY29nbml6ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gb3RoZXJSZWNvZ25pemVyO1xufVxuXG4vKipcbiAqIFRoaXMgcmVjb2duaXplciBpcyBqdXN0IHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgc2ltcGxlIGF0dHJpYnV0ZSByZWNvZ25pemVycy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBBdHRyUmVjb2duaXplcigpIHtcbiAgICBSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmluaGVyaXQoQXR0clJlY29nbml6ZXIsIFJlY29nbml6ZXIsIHtcbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAgICovXG4gICAgZGVmYXVsdHM6IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICAgICAqIEBkZWZhdWx0IDFcbiAgICAgICAgICovXG4gICAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gY2hlY2sgaWYgaXQgdGhlIHJlY29nbml6ZXIgcmVjZWl2ZXMgdmFsaWQgaW5wdXQsIGxpa2UgaW5wdXQuZGlzdGFuY2UgPiAxMC5cbiAgICAgKiBAbWVtYmVyb2YgQXR0clJlY29nbml6ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gcmVjb2duaXplZFxuICAgICAqL1xuICAgIGF0dHJUZXN0OiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgb3B0aW9uUG9pbnRlcnMgPSB0aGlzLm9wdGlvbnMucG9pbnRlcnM7XG4gICAgICAgIHJldHVybiBvcHRpb25Qb2ludGVycyA9PT0gMCB8fCBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvblBvaW50ZXJzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzIHRoZSBpbnB1dCBhbmQgcmV0dXJuIHRoZSBzdGF0ZSBmb3IgdGhlIHJlY29nbml6ZXJcbiAgICAgKiBAbWVtYmVyb2YgQXR0clJlY29nbml6ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICAgKiBAcmV0dXJucyB7Kn0gU3RhdGVcbiAgICAgKi9cbiAgICBwcm9jZXNzOiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgICAgICB2YXIgZXZlbnRUeXBlID0gaW5wdXQuZXZlbnRUeXBlO1xuXG4gICAgICAgIHZhciBpc1JlY29nbml6ZWQgPSBzdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQpO1xuICAgICAgICB2YXIgaXNWYWxpZCA9IHRoaXMuYXR0clRlc3QoaW5wdXQpO1xuXG4gICAgICAgIC8vIG9uIGNhbmNlbCBpbnB1dCBhbmQgd2UndmUgcmVjb2duaXplZCBiZWZvcmUsIHJldHVybiBTVEFURV9DQU5DRUxMRURcbiAgICAgICAgaWYgKGlzUmVjb2duaXplZCAmJiAoZXZlbnRUeXBlICYgSU5QVVRfQ0FOQ0VMIHx8ICFpc1ZhbGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfQ0FOQ0VMTEVEO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUmVjb2duaXplZCB8fCBpc1ZhbGlkKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfRU5ERUQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCEoc3RhdGUgJiBTVEFURV9CRUdBTikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9DSEFOR0VEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gICAgfVxufSk7XG5cbi8qKlxuICogUGFuXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG93biBhbmQgbW92ZWQgaW4gdGhlIGFsbG93ZWQgZGlyZWN0aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBQYW5SZWNvZ25pemVyKCkge1xuICAgIEF0dHJSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnBYID0gbnVsbDtcbiAgICB0aGlzLnBZID0gbnVsbDtcbn1cblxuaW5oZXJpdChQYW5SZWNvZ25pemVyLCBBdHRyUmVjb2duaXplciwge1xuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAbWVtYmVyb2YgUGFuUmVjb2duaXplclxuICAgICAqL1xuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGV2ZW50OiAncGFuJyxcbiAgICAgICAgdGhyZXNob2xkOiAxMCxcbiAgICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICAgIGRpcmVjdGlvbjogRElSRUNUSU9OX0FMTFxuICAgIH0sXG5cbiAgICBnZXRUb3VjaEFjdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgICAgICB2YXIgYWN0aW9ucyA9IFtdO1xuICAgICAgICBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1kpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY3Rpb25zO1xuICAgIH0sXG5cbiAgICBkaXJlY3Rpb25UZXN0OiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgdmFyIGhhc01vdmVkID0gdHJ1ZTtcbiAgICAgICAgdmFyIGRpc3RhbmNlID0gaW5wdXQuZGlzdGFuY2U7XG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5kaXJlY3Rpb247XG4gICAgICAgIHZhciB4ID0gaW5wdXQuZGVsdGFYO1xuICAgICAgICB2YXIgeSA9IGlucHV0LmRlbHRhWTtcblxuICAgICAgICAvLyBsb2NrIHRvIGF4aXM/XG4gICAgICAgIGlmICghKGRpcmVjdGlvbiAmIG9wdGlvbnMuZGlyZWN0aW9uKSkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAoeCA9PT0gMCkgPyBESVJFQ1RJT05fTk9ORSA6ICh4IDwgMCkgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgICAgICAgICAgICAgICBoYXNNb3ZlZCA9IHggIT0gdGhpcy5wWDtcbiAgICAgICAgICAgICAgICBkaXN0YW5jZSA9IE1hdGguYWJzKGlucHV0LmRlbHRhWCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICh5ID09PSAwKSA/IERJUkVDVElPTl9OT05FIDogKHkgPCAwKSA/IERJUkVDVElPTl9VUCA6IERJUkVDVElPTl9ET1dOO1xuICAgICAgICAgICAgICAgIGhhc01vdmVkID0geSAhPSB0aGlzLnBZO1xuICAgICAgICAgICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMoaW5wdXQuZGVsdGFZKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpbnB1dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgICAgIHJldHVybiBoYXNNb3ZlZCAmJiBkaXN0YW5jZSA+IG9wdGlvbnMudGhyZXNob2xkICYmIGRpcmVjdGlvbiAmIG9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIH0sXG5cbiAgICBhdHRyVGVzdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIEF0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJlxuICAgICAgICAgICAgKHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTiB8fCAoISh0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pICYmIHRoaXMuZGlyZWN0aW9uVGVzdChpbnB1dCkpKTtcbiAgICB9LFxuXG4gICAgZW1pdDogZnVuY3Rpb24oaW5wdXQpIHtcblxuICAgICAgICB0aGlzLnBYID0gaW5wdXQuZGVsdGFYO1xuICAgICAgICB0aGlzLnBZID0gaW5wdXQuZGVsdGFZO1xuXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBkaXJlY3Rpb25TdHIoaW5wdXQuZGlyZWN0aW9uKTtcblxuICAgICAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBkaXJlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc3VwZXIuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgICB9XG59KTtcblxuLyoqXG4gKiBQaW5jaFxuICogUmVjb2duaXplZCB3aGVuIHR3byBvciBtb3JlIHBvaW50ZXJzIGFyZSBtb3ZpbmcgdG93YXJkICh6b29tLWluKSBvciBhd2F5IGZyb20gZWFjaCBvdGhlciAoem9vbS1vdXQpLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBQaW5jaFJlY29nbml6ZXIoKSB7XG4gICAgQXR0clJlY29nbml6ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuaW5oZXJpdChQaW5jaFJlY29nbml6ZXIsIEF0dHJSZWNvZ25pemVyLCB7XG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBtZW1iZXJvZiBQaW5jaFJlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgICBldmVudDogJ3BpbmNoJyxcbiAgICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgICBwb2ludGVyczogMlxuICAgIH0sXG5cbiAgICBnZXRUb3VjaEFjdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICAgIH0sXG5cbiAgICBhdHRyVGVzdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1cGVyLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmXG4gICAgICAgICAgICAoTWF0aC5hYnMoaW5wdXQuc2NhbGUgLSAxKSA+IHRoaXMub3B0aW9ucy50aHJlc2hvbGQgfHwgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKTtcbiAgICB9LFxuXG4gICAgZW1pdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgaWYgKGlucHV0LnNjYWxlICE9PSAxKSB7XG4gICAgICAgICAgICB2YXIgaW5PdXQgPSBpbnB1dC5zY2FsZSA8IDEgPyAnaW4nIDogJ291dCc7XG4gICAgICAgICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBpbk91dDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zdXBlci5lbWl0LmNhbGwodGhpcywgaW5wdXQpO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIFByZXNzXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG93biBmb3IgeCBtcyB3aXRob3V0IGFueSBtb3ZlbWVudC5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBQcmVzc1JlY29nbml6ZXIoKSB7XG4gICAgUmVjb2duaXplci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIHRoaXMuX2lucHV0ID0gbnVsbDtcbn1cblxuaW5oZXJpdChQcmVzc1JlY29nbml6ZXIsIFJlY29nbml6ZXIsIHtcbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQG1lbWJlcm9mIFByZXNzUmVjb2duaXplclxuICAgICAqL1xuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGV2ZW50OiAncHJlc3MnLFxuICAgICAgICBwb2ludGVyczogMSxcbiAgICAgICAgdGltZTogMjUxLCAvLyBtaW5pbWFsIHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgcHJlc3NlZFxuICAgICAgICB0aHJlc2hvbGQ6IDkgLy8gYSBtaW5pbWFsIG1vdmVtZW50IGlzIG9rLCBidXQga2VlcCBpdCBsb3dcbiAgICB9LFxuXG4gICAgZ2V0VG91Y2hBY3Rpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9BVVRPXTtcbiAgICB9LFxuXG4gICAgcHJvY2VzczogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIHZhciB2YWxpZFBvaW50ZXJzID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSBvcHRpb25zLnBvaW50ZXJzO1xuICAgICAgICB2YXIgdmFsaWRNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgb3B0aW9ucy50aHJlc2hvbGQ7XG4gICAgICAgIHZhciB2YWxpZFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPiBvcHRpb25zLnRpbWU7XG5cbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcblxuICAgICAgICAvLyB3ZSBvbmx5IGFsbG93IGxpdHRsZSBtb3ZlbWVudFxuICAgICAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG4gICAgICAgIGlmICghdmFsaWRNb3ZlbWVudCB8fCAhdmFsaWRQb2ludGVycyB8fCAoaW5wdXQuZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgIXZhbGlkVGltZSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9TVEFSVCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0Q29udGV4dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgICAgICAgICB0aGlzLnRyeUVtaXQoKTtcbiAgICAgICAgICAgIH0sIG9wdGlvbnMudGltZSwgdGhpcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICAgICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICAgIH0sXG5cbiAgICByZXNldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gICAgfSxcblxuICAgIGVtaXQ6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBTVEFURV9SRUNPR05JWkVEKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5wdXQgJiYgKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORCkpIHtcbiAgICAgICAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArICd1cCcsIGlucHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0LnRpbWVTdGFtcCA9IG5vdygpO1xuICAgICAgICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCB0aGlzLl9pbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSb3RhdGVcbiAqIFJlY29nbml6ZWQgd2hlbiB0d28gb3IgbW9yZSBwb2ludGVyIGFyZSBtb3ZpbmcgaW4gYSBjaXJjdWxhciBtb3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cbmZ1bmN0aW9uIFJvdGF0ZVJlY29nbml6ZXIoKSB7XG4gICAgQXR0clJlY29nbml6ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuaW5oZXJpdChSb3RhdGVSZWNvZ25pemVyLCBBdHRyUmVjb2duaXplciwge1xuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAbWVtYmVyb2YgUm90YXRlUmVjb2duaXplclxuICAgICAqL1xuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGV2ZW50OiAncm90YXRlJyxcbiAgICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgICBwb2ludGVyczogMlxuICAgIH0sXG5cbiAgICBnZXRUb3VjaEFjdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICAgIH0sXG5cbiAgICBhdHRyVGVzdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1cGVyLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmXG4gICAgICAgICAgICAoTWF0aC5hYnMoaW5wdXQucm90YXRpb24pID4gdGhpcy5vcHRpb25zLnRocmVzaG9sZCB8fCB0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIFN3aXBlXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgbW92aW5nIGZhc3QgKHZlbG9jaXR5KSwgd2l0aCBlbm91Z2ggZGlzdGFuY2UgaW4gdGhlIGFsbG93ZWQgZGlyZWN0aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBTd2lwZVJlY29nbml6ZXIoKSB7XG4gICAgQXR0clJlY29nbml6ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuaW5oZXJpdChTd2lwZVJlY29nbml6ZXIsIEF0dHJSZWNvZ25pemVyLCB7XG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBtZW1iZXJvZiBTd2lwZVJlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgICBldmVudDogJ3N3aXBlJyxcbiAgICAgICAgdGhyZXNob2xkOiAxMCxcbiAgICAgICAgdmVsb2NpdHk6IDAuMyxcbiAgICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCxcbiAgICAgICAgcG9pbnRlcnM6IDFcbiAgICB9LFxuXG4gICAgZ2V0VG91Y2hBY3Rpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUGFuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG91Y2hBY3Rpb24uY2FsbCh0aGlzKTtcbiAgICB9LFxuXG4gICAgYXR0clRlc3Q6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgICAgICB2YXIgdmVsb2NpdHk7XG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiAmIChESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCkpIHtcbiAgICAgICAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5O1xuICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICAgICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVg7XG4gICAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX1ZFUlRJQ0FMKSB7XG4gICAgICAgICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXIuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiZcbiAgICAgICAgICAgIGRpcmVjdGlvbiAmIGlucHV0Lm9mZnNldERpcmVjdGlvbiAmJlxuICAgICAgICAgICAgaW5wdXQuZGlzdGFuY2UgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkICYmXG4gICAgICAgICAgICBpbnB1dC5tYXhQb2ludGVycyA9PSB0aGlzLm9wdGlvbnMucG9pbnRlcnMgJiZcbiAgICAgICAgICAgIGFicyh2ZWxvY2l0eSkgPiB0aGlzLm9wdGlvbnMudmVsb2NpdHkgJiYgaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EO1xuICAgIH0sXG5cbiAgICBlbWl0OiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgZGlyZWN0aW9uID0gZGlyZWN0aW9uU3RyKGlucHV0Lm9mZnNldERpcmVjdGlvbik7XG4gICAgICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArIGRpcmVjdGlvbiwgaW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCBpbnB1dCk7XG4gICAgfVxufSk7XG5cbi8qKlxuICogQSB0YXAgaXMgZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG9pbmcgYSBzbWFsbCB0YXAvY2xpY2suIE11bHRpcGxlIHRhcHMgYXJlIHJlY29nbml6ZWQgaWYgdGhleSBvY2N1clxuICogYmV0d2VlbiB0aGUgZ2l2ZW4gaW50ZXJ2YWwgYW5kIHBvc2l0aW9uLiBUaGUgZGVsYXkgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHJlY29nbml6ZSBtdWx0aS10YXBzIHdpdGhvdXQgZmlyaW5nXG4gKiBhIHNpbmdsZSB0YXAuXG4gKlxuICogVGhlIGV2ZW50RGF0YSBmcm9tIHRoZSBlbWl0dGVkIGV2ZW50IGNvbnRhaW5zIHRoZSBwcm9wZXJ0eSBgdGFwQ291bnRgLCB3aGljaCBjb250YWlucyB0aGUgYW1vdW50IG9mXG4gKiBtdWx0aS10YXBzIGJlaW5nIHJlY29nbml6ZWQuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIFJlY29nbml6ZXJcbiAqL1xuZnVuY3Rpb24gVGFwUmVjb2duaXplcigpIHtcbiAgICBSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBwcmV2aW91cyB0aW1lIGFuZCBjZW50ZXIsXG4gICAgLy8gdXNlZCBmb3IgdGFwIGNvdW50aW5nXG4gICAgdGhpcy5wVGltZSA9IGZhbHNlO1xuICAgIHRoaXMucENlbnRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIHRoaXMuX2lucHV0ID0gbnVsbDtcbiAgICB0aGlzLmNvdW50ID0gMDtcbn1cblxuaW5oZXJpdChUYXBSZWNvZ25pemVyLCBSZWNvZ25pemVyLCB7XG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBtZW1iZXJvZiBQaW5jaFJlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgICBldmVudDogJ3RhcCcsXG4gICAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgICB0YXBzOiAxLFxuICAgICAgICBpbnRlcnZhbDogMzAwLCAvLyBtYXggdGltZSBiZXR3ZWVuIHRoZSBtdWx0aS10YXAgdGFwc1xuICAgICAgICB0aW1lOiAyNTAsIC8vIG1heCB0aW1lIG9mIHRoZSBwb2ludGVyIHRvIGJlIGRvd24gKGxpa2UgZmluZ2VyIG9uIHRoZSBzY3JlZW4pXG4gICAgICAgIHRocmVzaG9sZDogOSwgLy8gYSBtaW5pbWFsIG1vdmVtZW50IGlzIG9rLCBidXQga2VlcCBpdCBsb3dcbiAgICAgICAgcG9zVGhyZXNob2xkOiAxMCAvLyBhIG11bHRpLXRhcCBjYW4gYmUgYSBiaXQgb2ZmIHRoZSBpbml0aWFsIHBvc2l0aW9uXG4gICAgfSxcblxuICAgIGdldFRvdWNoQWN0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OXTtcbiAgICB9LFxuXG4gICAgcHJvY2VzczogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgICAgdmFyIHZhbGlkUG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvbnMucG9pbnRlcnM7XG4gICAgICAgIHZhciB2YWxpZE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCBvcHRpb25zLnRocmVzaG9sZDtcbiAgICAgICAgdmFyIHZhbGlkVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgb3B0aW9ucy50aW1lO1xuXG4gICAgICAgIHRoaXMucmVzZXQoKTtcblxuICAgICAgICBpZiAoKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX1NUQVJUKSAmJiAodGhpcy5jb3VudCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZhaWxUaW1lb3V0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSBvbmx5IGFsbG93IGxpdHRsZSBtb3ZlbWVudFxuICAgICAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG4gICAgICAgIGlmICh2YWxpZE1vdmVtZW50ICYmIHZhbGlkVG91Y2hUaW1lICYmIHZhbGlkUG9pbnRlcnMpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5ldmVudFR5cGUgIT0gSU5QVVRfRU5EKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmFpbFRpbWVvdXQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHZhbGlkSW50ZXJ2YWwgPSB0aGlzLnBUaW1lID8gKGlucHV0LnRpbWVTdGFtcCAtIHRoaXMucFRpbWUgPCBvcHRpb25zLmludGVydmFsKSA6IHRydWU7XG4gICAgICAgICAgICB2YXIgdmFsaWRNdWx0aVRhcCA9ICF0aGlzLnBDZW50ZXIgfHwgZ2V0RGlzdGFuY2UodGhpcy5wQ2VudGVyLCBpbnB1dC5jZW50ZXIpIDwgb3B0aW9ucy5wb3NUaHJlc2hvbGQ7XG5cbiAgICAgICAgICAgIHRoaXMucFRpbWUgPSBpbnB1dC50aW1lU3RhbXA7XG4gICAgICAgICAgICB0aGlzLnBDZW50ZXIgPSBpbnB1dC5jZW50ZXI7XG5cbiAgICAgICAgICAgIGlmICghdmFsaWRNdWx0aVRhcCB8fCAhdmFsaWRJbnRlcnZhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY291bnQgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50ICs9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG5cbiAgICAgICAgICAgIC8vIGlmIHRhcCBjb3VudCBtYXRjaGVzIHdlIGhhdmUgcmVjb2duaXplZCBpdCxcbiAgICAgICAgICAgIC8vIGVsc2UgaXQgaGFzIGJlZ2FuIHJlY29nbml6aW5nLi4uXG4gICAgICAgICAgICB2YXIgdGFwQ291bnQgPSB0aGlzLmNvdW50ICUgb3B0aW9ucy50YXBzO1xuICAgICAgICAgICAgaWYgKHRhcENvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gbm8gZmFpbGluZyByZXF1aXJlbWVudHMsIGltbWVkaWF0ZWx5IHRyaWdnZXIgdGhlIHRhcCBldmVudFxuICAgICAgICAgICAgICAgIC8vIG9yIHdhaXQgYXMgbG9uZyBhcyB0aGUgbXVsdGl0YXAgaW50ZXJ2YWwgdG8gdHJpZ2dlclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5oYXNSZXF1aXJlRmFpbHVyZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXRDb250ZXh0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1JFQ09HTklaRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUVtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgb3B0aW9ucy5pbnRlcnZhbCwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTVEFURV9CRUdBTjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgICB9LFxuXG4gICAgZmFpbFRpbWVvdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXRDb250ZXh0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICAgICAgfSwgdGhpcy5vcHRpb25zLmludGVydmFsLCB0aGlzKTtcbiAgICAgICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgICB9LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICAgIH0sXG5cbiAgICBlbWl0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT0gU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXQudGFwQ291bnQgPSB0aGlzLmNvdW50O1xuICAgICAgICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCB0aGlzLl9pbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBTaW1wbGUgd2F5IHRvIGNyZWF0ZSBhIG1hbmFnZXIgd2l0aCBhIGRlZmF1bHQgc2V0IG9mIHJlY29nbml6ZXJzLlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIEhhbW1lcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy5yZWNvZ25pemVycyA9IGlmVW5kZWZpbmVkKG9wdGlvbnMucmVjb2duaXplcnMsIEhhbW1lci5kZWZhdWx0cy5wcmVzZXQpO1xuICAgIHJldHVybiBuZXcgTWFuYWdlcihlbGVtZW50LCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBAY29uc3Qge3N0cmluZ31cbiAqL1xuSGFtbWVyLlZFUlNJT04gPSAnMi4wLjcnO1xuXG4vKipcbiAqIGRlZmF1bHQgc2V0dGluZ3NcbiAqIEBuYW1lc3BhY2VcbiAqL1xuSGFtbWVyLmRlZmF1bHRzID0ge1xuICAgIC8qKlxuICAgICAqIHNldCBpZiBET00gZXZlbnRzIGFyZSBiZWluZyB0cmlnZ2VyZWQuXG4gICAgICogQnV0IHRoaXMgaXMgc2xvd2VyIGFuZCB1bnVzZWQgYnkgc2ltcGxlIGltcGxlbWVudGF0aW9ucywgc28gZGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIGRvbUV2ZW50czogZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgZm9yIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eS9mYWxsYmFjay5cbiAgICAgKiBXaGVuIHNldCB0byBgY29tcHV0ZWAgaXQgd2lsbCBtYWdpY2FsbHkgc2V0IHRoZSBjb3JyZWN0IHZhbHVlIGJhc2VkIG9uIHRoZSBhZGRlZCByZWNvZ25pemVycy5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0IGNvbXB1dGVcbiAgICAgKi9cbiAgICB0b3VjaEFjdGlvbjogVE9VQ0hfQUNUSU9OX0NPTVBVVEUsXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlOiB0cnVlLFxuXG4gICAgLyoqXG4gICAgICogRVhQRVJJTUVOVEFMIEZFQVRVUkUgLS0gY2FuIGJlIHJlbW92ZWQvY2hhbmdlZFxuICAgICAqIENoYW5nZSB0aGUgcGFyZW50IGlucHV0IHRhcmdldCBlbGVtZW50LlxuICAgICAqIElmIE51bGwsIHRoZW4gaXQgaXMgYmVpbmcgc2V0IHRoZSB0byBtYWluIGVsZW1lbnQuXG4gICAgICogQHR5cGUge051bGx8RXZlbnRUYXJnZXR9XG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIGlucHV0VGFyZ2V0OiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogZm9yY2UgYW4gaW5wdXQgY2xhc3NcbiAgICAgKiBAdHlwZSB7TnVsbHxGdW5jdGlvbn1cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgaW5wdXRDbGFzczogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgcmVjb2duaXplciBzZXR1cCB3aGVuIGNhbGxpbmcgYEhhbW1lcigpYFxuICAgICAqIFdoZW4gY3JlYXRpbmcgYSBuZXcgTWFuYWdlciB0aGVzZSB3aWxsIGJlIHNraXBwZWQuXG4gICAgICogQHR5cGUge0FycmF5fVxuICAgICAqL1xuICAgIHByZXNldDogW1xuICAgICAgICAvLyBSZWNvZ25pemVyQ2xhc3MsIG9wdGlvbnMsIFtyZWNvZ25pemVXaXRoLCAuLi5dLCBbcmVxdWlyZUZhaWx1cmUsIC4uLl1cbiAgICAgICAgW1JvdGF0ZVJlY29nbml6ZXIsIHtlbmFibGU6IGZhbHNlfV0sXG4gICAgICAgIFtQaW5jaFJlY29nbml6ZXIsIHtlbmFibGU6IGZhbHNlfSwgWydyb3RhdGUnXV0sXG4gICAgICAgIFtTd2lwZVJlY29nbml6ZXIsIHtkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMfV0sXG4gICAgICAgIFtQYW5SZWNvZ25pemVyLCB7ZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTH0sIFsnc3dpcGUnXV0sXG4gICAgICAgIFtUYXBSZWNvZ25pemVyXSxcbiAgICAgICAgW1RhcFJlY29nbml6ZXIsIHtldmVudDogJ2RvdWJsZXRhcCcsIHRhcHM6IDJ9LCBbJ3RhcCddXSxcbiAgICAgICAgW1ByZXNzUmVjb2duaXplcl1cbiAgICBdLFxuXG4gICAgLyoqXG4gICAgICogU29tZSBDU1MgcHJvcGVydGllcyBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSB3b3JraW5nIG9mIEhhbW1lci5cbiAgICAgKiBBZGQgdGhlbSB0byB0aGlzIG1ldGhvZCBhbmQgdGhleSB3aWxsIGJlIHNldCB3aGVuIGNyZWF0aW5nIGEgbmV3IE1hbmFnZXIuXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqL1xuICAgIGNzc1Byb3BzOiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEaXNhYmxlcyB0ZXh0IHNlbGVjdGlvbiB0byBpbXByb3ZlIHRoZSBkcmFnZ2luZyBnZXN0dXJlLiBNYWlubHkgZm9yIGRlc2t0b3AgYnJvd3NlcnMuXG4gICAgICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAgICAgKi9cbiAgICAgICAgdXNlclNlbGVjdDogJ25vbmUnLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEaXNhYmxlIHRoZSBXaW5kb3dzIFBob25lIGdyaXBwZXJzIHdoZW4gcHJlc3NpbmcgYW4gZWxlbWVudC5cbiAgICAgICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICAgICAqL1xuICAgICAgICB0b3VjaFNlbGVjdDogJ25vbmUnLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEaXNhYmxlcyB0aGUgZGVmYXVsdCBjYWxsb3V0IHNob3duIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0LlxuICAgICAgICAgKiBPbiBpT1MsIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0IHN1Y2ggYXMgYSBsaW5rLCBTYWZhcmkgZGlzcGxheXNcbiAgICAgICAgICogYSBjYWxsb3V0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmsuIFRoaXMgcHJvcGVydHkgYWxsb3dzIHlvdSB0byBkaXNhYmxlIHRoYXQgY2FsbG91dC5cbiAgICAgICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICAgICAqL1xuICAgICAgICB0b3VjaENhbGxvdXQ6ICdub25lJyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgem9vbWluZyBpcyBlbmFibGVkLiBVc2VkIGJ5IElFMTA+XG4gICAgICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAgICAgKi9cbiAgICAgICAgY29udGVudFpvb21pbmc6ICdub25lJyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgYW4gZW50aXJlIGVsZW1lbnQgc2hvdWxkIGJlIGRyYWdnYWJsZSBpbnN0ZWFkIG9mIGl0cyBjb250ZW50cy4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgICAgICovXG4gICAgICAgIHVzZXJEcmFnOiAnbm9uZScsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE92ZXJyaWRlcyB0aGUgaGlnaGxpZ2h0IGNvbG9yIHNob3duIHdoZW4gdGhlIHVzZXIgdGFwcyBhIGxpbmsgb3IgYSBKYXZhU2NyaXB0XG4gICAgICAgICAqIGNsaWNrYWJsZSBlbGVtZW50IGluIGlPUy4gVGhpcyBwcm9wZXJ0eSBvYmV5cyB0aGUgYWxwaGEgdmFsdWUsIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgICAgICogQGRlZmF1bHQgJ3JnYmEoMCwwLDAsMCknXG4gICAgICAgICAqL1xuICAgICAgICB0YXBIaWdobGlnaHRDb2xvcjogJ3JnYmEoMCwwLDAsMCknXG4gICAgfVxufTtcblxudmFyIFNUT1AgPSAxO1xudmFyIEZPUkNFRF9TVE9QID0gMjtcblxuLyoqXG4gKiBNYW5hZ2VyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gTWFuYWdlcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gYXNzaWduKHt9LCBIYW1tZXIuZGVmYXVsdHMsIG9wdGlvbnMgfHwge30pO1xuXG4gICAgdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0ID0gdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0IHx8IGVsZW1lbnQ7XG5cbiAgICB0aGlzLmhhbmRsZXJzID0ge307XG4gICAgdGhpcy5zZXNzaW9uID0ge307XG4gICAgdGhpcy5yZWNvZ25pemVycyA9IFtdO1xuICAgIHRoaXMub2xkQ3NzUHJvcHMgPSB7fTtcblxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5pbnB1dCA9IGNyZWF0ZUlucHV0SW5zdGFuY2UodGhpcyk7XG4gICAgdGhpcy50b3VjaEFjdGlvbiA9IG5ldyBUb3VjaEFjdGlvbih0aGlzLCB0aGlzLm9wdGlvbnMudG91Y2hBY3Rpb24pO1xuXG4gICAgdG9nZ2xlQ3NzUHJvcHModGhpcywgdHJ1ZSk7XG5cbiAgICBlYWNoKHRoaXMub3B0aW9ucy5yZWNvZ25pemVycywgZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICB2YXIgcmVjb2duaXplciA9IHRoaXMuYWRkKG5ldyAoaXRlbVswXSkoaXRlbVsxXSkpO1xuICAgICAgICBpdGVtWzJdICYmIHJlY29nbml6ZXIucmVjb2duaXplV2l0aChpdGVtWzJdKTtcbiAgICAgICAgaXRlbVszXSAmJiByZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKGl0ZW1bM10pO1xuICAgIH0sIHRoaXMpO1xufVxuXG5NYW5hZ2VyLnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBzZXQgb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAgICogQHJldHVybnMge01hbmFnZXJ9XG4gICAgICovXG4gICAgc2V0OiBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgIGFzc2lnbih0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIE9wdGlvbnMgdGhhdCBuZWVkIGEgbGl0dGxlIG1vcmUgc2V0dXBcbiAgICAgICAgaWYgKG9wdGlvbnMudG91Y2hBY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5wdXRUYXJnZXQpIHtcbiAgICAgICAgICAgIC8vIENsZWFuIHVwIGV4aXN0aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQgcmVpbml0aWFsaXplXG4gICAgICAgICAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQudGFyZ2V0ID0gb3B0aW9ucy5pbnB1dFRhcmdldDtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuaW5pdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBzdG9wIHJlY29nbml6aW5nIGZvciB0aGlzIHNlc3Npb24uXG4gICAgICogVGhpcyBzZXNzaW9uIHdpbGwgYmUgZGlzY2FyZGVkLCB3aGVuIGEgbmV3IFtpbnB1dF1zdGFydCBldmVudCBpcyBmaXJlZC5cbiAgICAgKiBXaGVuIGZvcmNlZCwgdGhlIHJlY29nbml6ZXIgY3ljbGUgaXMgc3RvcHBlZCBpbW1lZGlhdGVseS5cbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZV1cbiAgICAgKi9cbiAgICBzdG9wOiBmdW5jdGlvbihmb3JjZSkge1xuICAgICAgICB0aGlzLnNlc3Npb24uc3RvcHBlZCA9IGZvcmNlID8gRk9SQ0VEX1NUT1AgOiBTVE9QO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBydW4gdGhlIHJlY29nbml6ZXJzIVxuICAgICAqIGNhbGxlZCBieSB0aGUgaW5wdXRIYW5kbGVyIGZ1bmN0aW9uIG9uIGV2ZXJ5IG1vdmVtZW50IG9mIHRoZSBwb2ludGVycyAodG91Y2hlcylcbiAgICAgKiBpdCB3YWxrcyB0aHJvdWdoIGFsbCB0aGUgcmVjb2duaXplcnMgYW5kIHRyaWVzIHRvIGRldGVjdCB0aGUgZ2VzdHVyZSB0aGF0IGlzIGJlaW5nIG1hZGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICovXG4gICAgcmVjb2duaXplOiBmdW5jdGlvbihpbnB1dERhdGEpIHtcbiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG4gICAgICAgIGlmIChzZXNzaW9uLnN0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJ1biB0aGUgdG91Y2gtYWN0aW9uIHBvbHlmaWxsXG4gICAgICAgIHRoaXMudG91Y2hBY3Rpb24ucHJldmVudERlZmF1bHRzKGlucHV0RGF0YSk7XG5cbiAgICAgICAgdmFyIHJlY29nbml6ZXI7XG4gICAgICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7XG5cbiAgICAgICAgLy8gdGhpcyBob2xkcyB0aGUgcmVjb2duaXplciB0aGF0IGlzIGJlaW5nIHJlY29nbml6ZWQuXG4gICAgICAgIC8vIHNvIHRoZSByZWNvZ25pemVyJ3Mgc3RhdGUgbmVlZHMgdG8gYmUgQkVHQU4sIENIQU5HRUQsIEVOREVEIG9yIFJFQ09HTklaRURcbiAgICAgICAgLy8gaWYgbm8gcmVjb2duaXplciBpcyBkZXRlY3RpbmcgYSB0aGluZywgaXQgaXMgc2V0IHRvIGBudWxsYFxuICAgICAgICB2YXIgY3VyUmVjb2duaXplciA9IHNlc3Npb24uY3VyUmVjb2duaXplcjtcblxuICAgICAgICAvLyByZXNldCB3aGVuIHRoZSBsYXN0IHJlY29nbml6ZXIgaXMgcmVjb2duaXplZFxuICAgICAgICAvLyBvciB3aGVuIHdlJ3JlIGluIGEgbmV3IHNlc3Npb25cbiAgICAgICAgaWYgKCFjdXJSZWNvZ25pemVyIHx8IChjdXJSZWNvZ25pemVyICYmIGN1clJlY29nbml6ZXIuc3RhdGUgJiBTVEFURV9SRUNPR05JWkVEKSkge1xuICAgICAgICAgICAgY3VyUmVjb2duaXplciA9IHNlc3Npb24uY3VyUmVjb2duaXplciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgcmVjb2duaXplcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZWNvZ25pemVyID0gcmVjb2duaXplcnNbaV07XG5cbiAgICAgICAgICAgIC8vIGZpbmQgb3V0IGlmIHdlIGFyZSBhbGxvd2VkIHRyeSB0byByZWNvZ25pemUgdGhlIGlucHV0IGZvciB0aGlzIG9uZS5cbiAgICAgICAgICAgIC8vIDEuICAgYWxsb3cgaWYgdGhlIHNlc3Npb24gaXMgTk9UIGZvcmNlZCBzdG9wcGVkIChzZWUgdGhlIC5zdG9wKCkgbWV0aG9kKVxuICAgICAgICAgICAgLy8gMi4gICBhbGxvdyBpZiB3ZSBzdGlsbCBoYXZlbid0IHJlY29nbml6ZWQgYSBnZXN0dXJlIGluIHRoaXMgc2Vzc2lvbiwgb3IgdGhlIHRoaXMgcmVjb2duaXplciBpcyB0aGUgb25lXG4gICAgICAgICAgICAvLyAgICAgIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAgICAgICAgIC8vIDMuICAgYWxsb3cgaWYgdGhlIHJlY29nbml6ZXIgaXMgYWxsb3dlZCB0byBydW4gc2ltdWx0YW5lb3VzIHdpdGggdGhlIGN1cnJlbnQgcmVjb2duaXplZCByZWNvZ25pemVyLlxuICAgICAgICAgICAgLy8gICAgICB0aGlzIGNhbiBiZSBzZXR1cCB3aXRoIHRoZSBgcmVjb2duaXplV2l0aCgpYCBtZXRob2Qgb24gdGhlIHJlY29nbml6ZXIuXG4gICAgICAgICAgICBpZiAoc2Vzc2lvbi5zdG9wcGVkICE9PSBGT1JDRURfU1RPUCAmJiAoIC8vIDFcbiAgICAgICAgICAgICAgICAgICAgIWN1clJlY29nbml6ZXIgfHwgcmVjb2duaXplciA9PSBjdXJSZWNvZ25pemVyIHx8IC8vIDJcbiAgICAgICAgICAgICAgICAgICAgcmVjb2duaXplci5jYW5SZWNvZ25pemVXaXRoKGN1clJlY29nbml6ZXIpKSkgeyAvLyAzXG4gICAgICAgICAgICAgICAgcmVjb2duaXplci5yZWNvZ25pemUoaW5wdXREYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVjb2duaXplci5yZXNldCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgcmVjb2duaXplciBoYXMgYmVlbiByZWNvZ25pemluZyB0aGUgaW5wdXQgYXMgYSB2YWxpZCBnZXN0dXJlLCB3ZSB3YW50IHRvIHN0b3JlIHRoaXMgb25lIGFzIHRoZVxuICAgICAgICAgICAgLy8gY3VycmVudCBhY3RpdmUgcmVjb2duaXplci4gYnV0IG9ubHkgaWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIGFjdGl2ZSByZWNvZ25pemVyXG4gICAgICAgICAgICBpZiAoIWN1clJlY29nbml6ZXIgJiYgcmVjb2duaXplci5zdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQgfCBTVEFURV9FTkRFRCkpIHtcbiAgICAgICAgICAgICAgICBjdXJSZWNvZ25pemVyID0gc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gcmVjb2duaXplcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBnZXQgYSByZWNvZ25pemVyIGJ5IGl0cyBldmVudCBuYW1lLlxuICAgICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IHJlY29nbml6ZXJcbiAgICAgKiBAcmV0dXJucyB7UmVjb2duaXplcnxOdWxsfVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgICAgICBpZiAocmVjb2duaXplciBpbnN0YW5jZW9mIFJlY29nbml6ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWNvZ25pemVyO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVycztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWNvZ25pemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHJlY29nbml6ZXJzW2ldLm9wdGlvbnMuZXZlbnQgPT0gcmVjb2duaXplcikge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWNvZ25pemVyc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogYWRkIGEgcmVjb2duaXplciB0byB0aGUgbWFuYWdlclxuICAgICAqIGV4aXN0aW5nIHJlY29nbml6ZXJzIHdpdGggdGhlIHNhbWUgZXZlbnQgbmFtZSB3aWxsIGJlIHJlbW92ZWRcbiAgICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IHJlY29nbml6ZXJcbiAgICAgKiBAcmV0dXJucyB7UmVjb2duaXplcnxNYW5hZ2VyfVxuICAgICAqL1xuICAgIGFkZDogZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgICAgICBpZiAoaW52b2tlQXJyYXlBcmcocmVjb2duaXplciwgJ2FkZCcsIHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlbW92ZSBleGlzdGluZ1xuICAgICAgICB2YXIgZXhpc3RpbmcgPSB0aGlzLmdldChyZWNvZ25pemVyLm9wdGlvbnMuZXZlbnQpO1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKGV4aXN0aW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVjb2duaXplcnMucHVzaChyZWNvZ25pemVyKTtcbiAgICAgICAgcmVjb2duaXplci5tYW5hZ2VyID0gdGhpcztcblxuICAgICAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgICAgICByZXR1cm4gcmVjb2duaXplcjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlIGEgcmVjb2duaXplciBieSBuYW1lIG9yIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gcmVjb2duaXplclxuICAgICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgICAqL1xuICAgIHJlbW92ZTogZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgICAgICBpZiAoaW52b2tlQXJyYXlBcmcocmVjb2duaXplciwgJ3JlbW92ZScsIHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJlY29nbml6ZXIgPSB0aGlzLmdldChyZWNvZ25pemVyKTtcblxuICAgICAgICAvLyBsZXQncyBtYWtlIHN1cmUgdGhpcyByZWNvZ25pemVyIGV4aXN0c1xuICAgICAgICBpZiAocmVjb2duaXplcikge1xuICAgICAgICAgICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVycztcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGluQXJyYXkocmVjb2duaXplcnMsIHJlY29nbml6ZXIpO1xuXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmVjb2duaXplcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGJpbmQgZXZlbnRcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRzXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICAgICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICAgKi9cbiAgICBvbjogZnVuY3Rpb24oZXZlbnRzLCBoYW5kbGVyKSB7XG4gICAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYW5kbGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnM7XG4gICAgICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGhhbmRsZXJzW2V2ZW50XSA9IGhhbmRsZXJzW2V2ZW50XSB8fCBbXTtcbiAgICAgICAgICAgIGhhbmRsZXJzW2V2ZW50XS5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHVuYmluZCBldmVudCwgbGVhdmUgZW1pdCBibGFuayB0byByZW1vdmUgYWxsIGhhbmRsZXJzXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtoYW5kbGVyXVxuICAgICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICAgKi9cbiAgICBvZmY6IGZ1bmN0aW9uKGV2ZW50cywgaGFuZGxlcikge1xuICAgICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnM7XG4gICAgICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBoYW5kbGVyc1tldmVudF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZXJzW2V2ZW50XSAmJiBoYW5kbGVyc1tldmVudF0uc3BsaWNlKGluQXJyYXkoaGFuZGxlcnNbZXZlbnRdLCBoYW5kbGVyKSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZW1pdCBldmVudCB0byB0aGUgbGlzdGVuZXJzXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAgICAgKi9cbiAgICBlbWl0OiBmdW5jdGlvbihldmVudCwgZGF0YSkge1xuICAgICAgICAvLyB3ZSBhbHNvIHdhbnQgdG8gdHJpZ2dlciBkb20gZXZlbnRzXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZG9tRXZlbnRzKSB7XG4gICAgICAgICAgICB0cmlnZ2VyRG9tRXZlbnQoZXZlbnQsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm8gaGFuZGxlcnMsIHNvIHNraXAgaXQgYWxsXG4gICAgICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNbZXZlbnRdICYmIHRoaXMuaGFuZGxlcnNbZXZlbnRdLnNsaWNlKCk7XG4gICAgICAgIGlmICghaGFuZGxlcnMgfHwgIWhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS50eXBlID0gZXZlbnQ7XG4gICAgICAgIGRhdGEucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGRhdGEuc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBoYW5kbGVyc1tpXShkYXRhKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBkZXN0cm95IHRoZSBtYW5hZ2VyIGFuZCB1bmJpbmRzIGFsbCBldmVudHNcbiAgICAgKiBpdCBkb2Vzbid0IHVuYmluZCBkb20gZXZlbnRzLCB0aGF0IGlzIHRoZSB1c2VyIG93biByZXNwb25zaWJpbGl0eVxuICAgICAqL1xuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgJiYgdG9nZ2xlQ3NzUHJvcHModGhpcywgZmFsc2UpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSB7fTtcbiAgICAgICAgdGhpcy5zZXNzaW9uID0ge307XG4gICAgICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBudWxsO1xuICAgIH1cbn07XG5cbi8qKlxuICogYWRkL3JlbW92ZSB0aGUgY3NzIHByb3BlcnRpZXMgYXMgZGVmaW5lZCBpbiBtYW5hZ2VyLm9wdGlvbnMuY3NzUHJvcHNcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtCb29sZWFufSBhZGRcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlQ3NzUHJvcHMobWFuYWdlciwgYWRkKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBtYW5hZ2VyLmVsZW1lbnQ7XG4gICAgaWYgKCFlbGVtZW50LnN0eWxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHByb3A7XG4gICAgZWFjaChtYW5hZ2VyLm9wdGlvbnMuY3NzUHJvcHMsIGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHByb3AgPSBwcmVmaXhlZChlbGVtZW50LnN0eWxlLCBuYW1lKTtcbiAgICAgICAgaWYgKGFkZCkge1xuICAgICAgICAgICAgbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSA9IGVsZW1lbnQuc3R5bGVbcHJvcF07XG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSB8fCAnJztcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghYWRkKSB7XG4gICAgICAgIG1hbmFnZXIub2xkQ3NzUHJvcHMgPSB7fTtcbiAgICB9XG59XG5cbi8qKlxuICogdHJpZ2dlciBkb20gZXZlbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAqL1xuZnVuY3Rpb24gdHJpZ2dlckRvbUV2ZW50KGV2ZW50LCBkYXRhKSB7XG4gICAgdmFyIGdlc3R1cmVFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGdlc3R1cmVFdmVudC5pbml0RXZlbnQoZXZlbnQsIHRydWUsIHRydWUpO1xuICAgIGdlc3R1cmVFdmVudC5nZXN0dXJlID0gZGF0YTtcbiAgICBkYXRhLnRhcmdldC5kaXNwYXRjaEV2ZW50KGdlc3R1cmVFdmVudCk7XG59XG5cbmFzc2lnbihIYW1tZXIsIHtcbiAgICBJTlBVVF9TVEFSVDogSU5QVVRfU1RBUlQsXG4gICAgSU5QVVRfTU9WRTogSU5QVVRfTU9WRSxcbiAgICBJTlBVVF9FTkQ6IElOUFVUX0VORCxcbiAgICBJTlBVVF9DQU5DRUw6IElOUFVUX0NBTkNFTCxcblxuICAgIFNUQVRFX1BPU1NJQkxFOiBTVEFURV9QT1NTSUJMRSxcbiAgICBTVEFURV9CRUdBTjogU1RBVEVfQkVHQU4sXG4gICAgU1RBVEVfQ0hBTkdFRDogU1RBVEVfQ0hBTkdFRCxcbiAgICBTVEFURV9FTkRFRDogU1RBVEVfRU5ERUQsXG4gICAgU1RBVEVfUkVDT0dOSVpFRDogU1RBVEVfUkVDT0dOSVpFRCxcbiAgICBTVEFURV9DQU5DRUxMRUQ6IFNUQVRFX0NBTkNFTExFRCxcbiAgICBTVEFURV9GQUlMRUQ6IFNUQVRFX0ZBSUxFRCxcblxuICAgIERJUkVDVElPTl9OT05FOiBESVJFQ1RJT05fTk9ORSxcbiAgICBESVJFQ1RJT05fTEVGVDogRElSRUNUSU9OX0xFRlQsXG4gICAgRElSRUNUSU9OX1JJR0hUOiBESVJFQ1RJT05fUklHSFQsXG4gICAgRElSRUNUSU9OX1VQOiBESVJFQ1RJT05fVVAsXG4gICAgRElSRUNUSU9OX0RPV046IERJUkVDVElPTl9ET1dOLFxuICAgIERJUkVDVElPTl9IT1JJWk9OVEFMOiBESVJFQ1RJT05fSE9SSVpPTlRBTCxcbiAgICBESVJFQ1RJT05fVkVSVElDQUw6IERJUkVDVElPTl9WRVJUSUNBTCxcbiAgICBESVJFQ1RJT05fQUxMOiBESVJFQ1RJT05fQUxMLFxuXG4gICAgTWFuYWdlcjogTWFuYWdlcixcbiAgICBJbnB1dDogSW5wdXQsXG4gICAgVG91Y2hBY3Rpb246IFRvdWNoQWN0aW9uLFxuXG4gICAgVG91Y2hJbnB1dDogVG91Y2hJbnB1dCxcbiAgICBNb3VzZUlucHV0OiBNb3VzZUlucHV0LFxuICAgIFBvaW50ZXJFdmVudElucHV0OiBQb2ludGVyRXZlbnRJbnB1dCxcbiAgICBUb3VjaE1vdXNlSW5wdXQ6IFRvdWNoTW91c2VJbnB1dCxcbiAgICBTaW5nbGVUb3VjaElucHV0OiBTaW5nbGVUb3VjaElucHV0LFxuXG4gICAgUmVjb2duaXplcjogUmVjb2duaXplcixcbiAgICBBdHRyUmVjb2duaXplcjogQXR0clJlY29nbml6ZXIsXG4gICAgVGFwOiBUYXBSZWNvZ25pemVyLFxuICAgIFBhbjogUGFuUmVjb2duaXplcixcbiAgICBTd2lwZTogU3dpcGVSZWNvZ25pemVyLFxuICAgIFBpbmNoOiBQaW5jaFJlY29nbml6ZXIsXG4gICAgUm90YXRlOiBSb3RhdGVSZWNvZ25pemVyLFxuICAgIFByZXNzOiBQcmVzc1JlY29nbml6ZXIsXG5cbiAgICBvbjogYWRkRXZlbnRMaXN0ZW5lcnMsXG4gICAgb2ZmOiByZW1vdmVFdmVudExpc3RlbmVycyxcbiAgICBlYWNoOiBlYWNoLFxuICAgIG1lcmdlOiBtZXJnZSxcbiAgICBleHRlbmQ6IGV4dGVuZCxcbiAgICBhc3NpZ246IGFzc2lnbixcbiAgICBpbmhlcml0OiBpbmhlcml0LFxuICAgIGJpbmRGbjogYmluZEZuLFxuICAgIHByZWZpeGVkOiBwcmVmaXhlZFxufSk7XG5cbi8vIHRoaXMgcHJldmVudHMgZXJyb3JzIHdoZW4gSGFtbWVyIGlzIGxvYWRlZCBpbiB0aGUgcHJlc2VuY2Ugb2YgYW4gQU1EXG4vLyAgc3R5bGUgbG9hZGVyIGJ1dCBieSBzY3JpcHQgdGFnLCBub3QgYnkgdGhlIGxvYWRlci5cbnZhciBmcmVlR2xvYmFsID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fSkpOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmZyZWVHbG9iYWwuSGFtbWVyID0gSGFtbWVyO1xuXG5pZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gSGFtbWVyO1xuICAgIH0pO1xufSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBIYW1tZXI7XG59IGVsc2Uge1xuICAgIHdpbmRvd1tleHBvcnROYW1lXSA9IEhhbW1lcjtcbn1cblxufSkod2luZG93LCBkb2N1bWVudCwgJ0hhbW1lcicpO1xuIiwidmFyIGhhdCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdHMsIGJhc2UpIHtcbiAgICBpZiAoIWJhc2UpIGJhc2UgPSAxNjtcbiAgICBpZiAoYml0cyA9PT0gdW5kZWZpbmVkKSBiaXRzID0gMTI4O1xuICAgIGlmIChiaXRzIDw9IDApIHJldHVybiAnMCc7XG4gICAgXG4gICAgdmFyIGRpZ2l0cyA9IE1hdGgubG9nKE1hdGgucG93KDIsIGJpdHMpKSAvIE1hdGgubG9nKGJhc2UpO1xuICAgIGZvciAodmFyIGkgPSAyOyBkaWdpdHMgPT09IEluZmluaXR5OyBpICo9IDIpIHtcbiAgICAgICAgZGlnaXRzID0gTWF0aC5sb2coTWF0aC5wb3coMiwgYml0cyAvIGkpKSAvIE1hdGgubG9nKGJhc2UpICogaTtcbiAgICB9XG4gICAgXG4gICAgdmFyIHJlbSA9IGRpZ2l0cyAtIE1hdGguZmxvb3IoZGlnaXRzKTtcbiAgICBcbiAgICB2YXIgcmVzID0gJyc7XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBNYXRoLmZsb29yKGRpZ2l0cyk7IGkrKykge1xuICAgICAgICB2YXIgeCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGJhc2UpLnRvU3RyaW5nKGJhc2UpO1xuICAgICAgICByZXMgPSB4ICsgcmVzO1xuICAgIH1cbiAgICBcbiAgICBpZiAocmVtKSB7XG4gICAgICAgIHZhciBiID0gTWF0aC5wb3coYmFzZSwgcmVtKTtcbiAgICAgICAgdmFyIHggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBiKS50b1N0cmluZyhiYXNlKTtcbiAgICAgICAgcmVzID0geCArIHJlcztcbiAgICB9XG4gICAgXG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHJlcywgYmFzZSk7XG4gICAgaWYgKHBhcnNlZCAhPT0gSW5maW5pdHkgJiYgcGFyc2VkID49IE1hdGgucG93KDIsIGJpdHMpKSB7XG4gICAgICAgIHJldHVybiBoYXQoYml0cywgYmFzZSlcbiAgICB9XG4gICAgZWxzZSByZXR1cm4gcmVzO1xufTtcblxuaGF0LnJhY2sgPSBmdW5jdGlvbiAoYml0cywgYmFzZSwgZXhwYW5kQnkpIHtcbiAgICB2YXIgZm4gPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB2YXIgaXRlcnMgPSAwO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoaXRlcnMgKysgPiAxMCkge1xuICAgICAgICAgICAgICAgIGlmIChleHBhbmRCeSkgYml0cyArPSBleHBhbmRCeTtcbiAgICAgICAgICAgICAgICBlbHNlIHRocm93IG5ldyBFcnJvcigndG9vIG1hbnkgSUQgY29sbGlzaW9ucywgdXNlIG1vcmUgYml0cycpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBpZCA9IGhhdChiaXRzLCBiYXNlKTtcbiAgICAgICAgfSB3aGlsZSAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoaGF0cywgaWQpKTtcbiAgICAgICAgXG4gICAgICAgIGhhdHNbaWRdID0gZGF0YTtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH07XG4gICAgdmFyIGhhdHMgPSBmbi5oYXRzID0ge307XG4gICAgXG4gICAgZm4uZ2V0ID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgIHJldHVybiBmbi5oYXRzW2lkXTtcbiAgICB9O1xuICAgIFxuICAgIGZuLnNldCA9IGZ1bmN0aW9uIChpZCwgdmFsdWUpIHtcbiAgICAgICAgZm4uaGF0c1tpZF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGZuO1xuICAgIH07XG4gICAgXG4gICAgZm4uYml0cyA9IGJpdHMgfHwgMTI4O1xuICAgIGZuLmJhc2UgPSBiYXNlIHx8IDE2O1xuICAgIHJldHVybiBmbjtcbn07XG4iLCJpbXBvcnQgaGF0IGZyb20gJ2hhdCc7XG5cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaWQgZ2VuZXJhdG9yIC8gY2FjaGUgaW5zdGFuY2UuXG4gKlxuICogWW91IG1heSBvcHRpb25hbGx5IHByb3ZpZGUgYSBzZWVkIHRoYXQgaXMgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBwYXJhbSB7U2VlZH0gc2VlZFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBJZHMoc2VlZCkge1xuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJZHMpKSB7XG4gICAgcmV0dXJuIG5ldyBJZHMoc2VlZCk7XG4gIH1cblxuICBzZWVkID0gc2VlZCB8fCBbIDEyOCwgMzYsIDEgXTtcbiAgdGhpcy5fc2VlZCA9IHNlZWQubGVuZ3RoID8gaGF0LnJhY2soc2VlZFswXSwgc2VlZFsxXSwgc2VlZFsyXSkgOiBzZWVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgbmV4dCBpZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW2VsZW1lbnRdIGVsZW1lbnQgdG8gYmluZCB0aGUgaWQgdG9cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGlkXG4gKi9cbklkcy5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHRoaXMuX3NlZWQoZWxlbWVudCB8fCB0cnVlKTtcbn07XG5cbi8qKlxuICogR2VuZXJhdGUgYSBuZXh0IGlkIHdpdGggYSBnaXZlbiBwcmVmaXguXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtlbGVtZW50XSBlbGVtZW50IHRvIGJpbmQgdGhlIGlkIHRvXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSBpZFxuICovXG5JZHMucHJvdG90eXBlLm5leHRQcmVmaXhlZCA9IGZ1bmN0aW9uKHByZWZpeCwgZWxlbWVudCkge1xuICB2YXIgaWQ7XG5cbiAgZG8ge1xuICAgIGlkID0gcHJlZml4ICsgdGhpcy5uZXh0KHRydWUpO1xuICB9IHdoaWxlICh0aGlzLmFzc2lnbmVkKGlkKSk7XG5cbiAgLy8gY2xhaW0ge3ByZWZpeH17cmFuZG9tfVxuICB0aGlzLmNsYWltKGlkLCBlbGVtZW50KTtcblxuICAvLyByZXR1cm5cbiAgcmV0dXJuIGlkO1xufTtcblxuLyoqXG4gKiBNYW51YWxseSBjbGFpbSBhbiBleGlzdGluZyBpZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZWxlbWVudF0gZWxlbWVudCB0aGUgaWQgaXMgY2xhaW1lZCBieVxuICovXG5JZHMucHJvdG90eXBlLmNsYWltID0gZnVuY3Rpb24oaWQsIGVsZW1lbnQpIHtcbiAgdGhpcy5fc2VlZC5zZXQoaWQsIGVsZW1lbnQgfHwgdHJ1ZSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gaWQgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGlkXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5JZHMucHJvdG90eXBlLmFzc2lnbmVkID0gZnVuY3Rpb24oaWQpIHtcbiAgcmV0dXJuIHRoaXMuX3NlZWQuZ2V0KGlkKSB8fCBmYWxzZTtcbn07XG5cbi8qKlxuICogVW5jbGFpbSBhbiBpZC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGlkIHRoZSBpZCB0byB1bmNsYWltXG4gKi9cbklkcy5wcm90b3R5cGUudW5jbGFpbSA9IGZ1bmN0aW9uKGlkKSB7XG4gIGRlbGV0ZSB0aGlzLl9zZWVkLmhhdHNbaWRdO1xufTtcblxuXG4vKipcbiAqIENsZWFyIGFsbCBjbGFpbWVkIGlkcy5cbiAqL1xuSWRzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciBoYXRzID0gdGhpcy5fc2VlZC5oYXRzLFxuICAgICAgaWQ7XG5cbiAgZm9yIChpZCBpbiBoYXRzKSB7XG4gICAgdGhpcy51bmNsYWltKGlkKTtcbiAgfVxufTsiLCJpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgLy8gaW1wbGVtZW50YXRpb24gZnJvbSBzdGFuZGFyZCBub2RlLmpzICd1dGlsJyBtb2R1bGVcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICB2YWx1ZTogY3RvcixcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICB2YXIgVGVtcEN0b3IgPSBmdW5jdGlvbiAoKSB7fVxuICAgICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZVxuICAgICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgICAgY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yXG4gICAgfVxuICB9XG59XG4iLCIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNS4xXG4gKiBodHRwczovL2pxdWVyeS5jb20vXG4gKlxuICogSW5jbHVkZXMgU2l6emxlLmpzXG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAyMC0wNS0wNFQyMjo0OVpcbiAqL1xuKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGlmICggdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXG5cdFx0Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS5cblx0XHQvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YFxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxuXHRcdC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuXG5cdFx0Ly8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZShcImpxdWVyeVwiKSh3aW5kb3cpO1xuXHRcdC8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XG5cdFx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xuXHR9XG5cbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XG59ICkoIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcblxuLy8gRWRnZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBTYWZhcmkgNS4xIC0gOSssIGlPUyA2IC0gOS4xXG4vLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9uLXN0cmljdCBjb2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGVcbi8vIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uXG4vLyBlbm91Z2ggdGhhdCBhbGwgc3VjaCBhdHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyID0gW107XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcblxudmFyIHNsaWNlID0gYXJyLnNsaWNlO1xuXG52YXIgZmxhdCA9IGFyci5mbGF0ID8gZnVuY3Rpb24oIGFycmF5ICkge1xuXHRyZXR1cm4gYXJyLmZsYXQuY2FsbCggYXJyYXkgKTtcbn0gOiBmdW5jdGlvbiggYXJyYXkgKSB7XG5cdHJldHVybiBhcnIuY29uY2F0LmFwcGx5KCBbXSwgYXJyYXkgKTtcbn07XG5cblxudmFyIHB1c2ggPSBhcnIucHVzaDtcblxudmFyIGluZGV4T2YgPSBhcnIuaW5kZXhPZjtcblxudmFyIGNsYXNzMnR5cGUgPSB7fTtcblxudmFyIHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZztcblxudmFyIGhhc093biA9IGNsYXNzMnR5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBmblRvU3RyaW5nID0gaGFzT3duLnRvU3RyaW5nO1xuXG52YXIgT2JqZWN0RnVuY3Rpb25TdHJpbmcgPSBmblRvU3RyaW5nLmNhbGwoIE9iamVjdCApO1xuXG52YXIgc3VwcG9ydCA9IHt9O1xuXG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzRnVuY3Rpb24oIG9iaiApIHtcblxuICAgICAgLy8gU3VwcG9ydDogQ2hyb21lIDw9NTcsIEZpcmVmb3ggPD01MlxuICAgICAgLy8gSW4gc29tZSBicm93c2VycywgdHlwZW9mIHJldHVybnMgXCJmdW5jdGlvblwiIGZvciBIVE1MIDxvYmplY3Q+IGVsZW1lbnRzXG4gICAgICAvLyAoaS5lLiwgYHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9iamVjdFwiICkgPT09IFwiZnVuY3Rpb25cImApLlxuICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjbGFzc2lmeSAqYW55KiBET00gbm9kZSBhcyBhIGZ1bmN0aW9uLlxuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2Ygb2JqLm5vZGVUeXBlICE9PSBcIm51bWJlclwiO1xuICB9O1xuXG5cbnZhciBpc1dpbmRvdyA9IGZ1bmN0aW9uIGlzV2luZG93KCBvYmogKSB7XG5cdFx0cmV0dXJuIG9iaiAhPSBudWxsICYmIG9iaiA9PT0gb2JqLndpbmRvdztcblx0fTtcblxuXG52YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG5cblxuXG5cdHZhciBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzID0ge1xuXHRcdHR5cGU6IHRydWUsXG5cdFx0c3JjOiB0cnVlLFxuXHRcdG5vbmNlOiB0cnVlLFxuXHRcdG5vTW9kdWxlOiB0cnVlXG5cdH07XG5cblx0ZnVuY3Rpb24gRE9NRXZhbCggY29kZSwgbm9kZSwgZG9jICkge1xuXHRcdGRvYyA9IGRvYyB8fCBkb2N1bWVudDtcblxuXHRcdHZhciBpLCB2YWwsXG5cdFx0XHRzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudCggXCJzY3JpcHRcIiApO1xuXG5cdFx0c2NyaXB0LnRleHQgPSBjb2RlO1xuXHRcdGlmICggbm9kZSApIHtcblx0XHRcdGZvciAoIGkgaW4gcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDY0KywgRWRnZSAxOCtcblx0XHRcdFx0Ly8gU29tZSBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSBcIm5vbmNlXCIgcHJvcGVydHkgb24gc2NyaXB0cy5cblx0XHRcdFx0Ly8gT24gdGhlIG90aGVyIGhhbmQsIGp1c3QgdXNpbmcgYGdldEF0dHJpYnV0ZWAgaXMgbm90IGVub3VnaCBhc1xuXHRcdFx0XHQvLyB0aGUgYG5vbmNlYCBhdHRyaWJ1dGUgaXMgcmVzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIHdoZW5ldmVyIGl0XG5cdFx0XHRcdC8vIGJlY29tZXMgYnJvd3NpbmctY29udGV4dCBjb25uZWN0ZWQuXG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvaXNzdWVzLzIzNjlcblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI25vbmNlLWF0dHJpYnV0ZXNcblx0XHRcdFx0Ly8gVGhlIGBub2RlLmdldEF0dHJpYnV0ZWAgY2hlY2sgd2FzIGFkZGVkIGZvciB0aGUgc2FrZSBvZlxuXHRcdFx0XHQvLyBgalF1ZXJ5Lmdsb2JhbEV2YWxgIHNvIHRoYXQgaXQgY2FuIGZha2UgYSBub25jZS1jb250YWluaW5nIG5vZGVcblx0XHRcdFx0Ly8gdmlhIGFuIG9iamVjdC5cblx0XHRcdFx0dmFsID0gbm9kZVsgaSBdIHx8IG5vZGUuZ2V0QXR0cmlidXRlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCBpICk7XG5cdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoIGksIHZhbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGRvYy5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIHRvVHlwZSggb2JqICkge1xuXHRpZiAoIG9iaiA9PSBudWxsICkge1xuXHRcdHJldHVybiBvYmogKyBcIlwiO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5IChmdW5jdGlvbmlzaCBSZWdFeHApXG5cdHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiA/XG5cdFx0Y2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbCggb2JqICkgXSB8fCBcIm9iamVjdFwiIDpcblx0XHR0eXBlb2Ygb2JqO1xufVxuLyogZ2xvYmFsIFN5bWJvbCAqL1xuLy8gRGVmaW5pbmcgdGhpcyBnbG9iYWwgaW4gLmVzbGludHJjLmpzb24gd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5nIHRoZSBnbG9iYWxcbi8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBkZWZpbmUgZ2xvYmFsIG9ubHkgZm9yIHRoaXMgbW9kdWxlXG5cblxuXG52YXJcblx0dmVyc2lvbiA9IFwiMy41LjFcIixcblxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxuXHRqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH07XG5cbmpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7XG5cblx0Ly8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZFxuXHRqcXVlcnk6IHZlcnNpb24sXG5cblx0Y29uc3RydWN0b3I6IGpRdWVyeSxcblxuXHQvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDBcblx0bGVuZ3RoOiAwLFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdH0sXG5cblx0Ly8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUlxuXHQvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheVxuXHRnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7XG5cblx0XHQvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5XG5cdFx0aWYgKCBudW0gPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldFxuXHRcdHJldHVybiBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdO1xuXHR9LFxuXG5cdC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2tcblx0Ly8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpXG5cdHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkge1xuXG5cdFx0Ly8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXRcblx0XHR2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7XG5cblx0XHQvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKVxuXHRcdHJldC5wcmV2T2JqZWN0ID0gdGhpcztcblxuXHRcdC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0XG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHQvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LlxuXHRlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdHNsaWNlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApO1xuXHR9LFxuXG5cdGZpcnN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggMCApO1xuXHR9LFxuXG5cdGxhc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAtMSApO1xuXHR9LFxuXG5cdGV2ZW46IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAoIGkgKyAxICkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdG9kZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkuZ3JlcCggdGhpcywgZnVuY3Rpb24oIF9lbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdGVxOiBmdW5jdGlvbiggaSApIHtcblx0XHR2YXIgbGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApO1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTtcblx0fSxcblxuXHRlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpO1xuXHR9LFxuXG5cdC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS5cblx0Ly8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuXG5cdHB1c2g6IHB1c2gsXG5cdHNvcnQ6IGFyci5zb3J0LFxuXHRzcGxpY2U6IGFyci5zcGxpY2Vcbn07XG5cbmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIDAgXSB8fCB7fSxcblx0XHRpID0gMSxcblx0XHRsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICggdHlwZW9mIHRhcmdldCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0ZGVlcCA9IHRhcmdldDtcblxuXHRcdC8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIGkgXSB8fCB7fTtcblx0XHRpKys7XG5cdH1cblxuXHQvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSlcblx0aWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiICYmICFpc0Z1bmN0aW9uKCB0YXJnZXQgKSApIHtcblx0XHR0YXJnZXQgPSB7fTtcblx0fVxuXG5cdC8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZFxuXHRpZiAoIGkgPT09IGxlbmd0aCApIHtcblx0XHR0YXJnZXQgPSB0aGlzO1xuXHRcdGktLTtcblx0fVxuXG5cdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xuXHRcdGlmICggKCBvcHRpb25zID0gYXJndW1lbnRzWyBpIF0gKSAhPSBudWxsICkge1xuXG5cdFx0XHQvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XG5cdFx0XHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRcdGNvcHkgPSBvcHRpb25zWyBuYW1lIF07XG5cblx0XHRcdFx0Ly8gUHJldmVudCBPYmplY3QucHJvdG90eXBlIHBvbGx1dGlvblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICggbmFtZSA9PT0gXCJfX3Byb3RvX19cIiB8fCB0YXJnZXQgPT09IGNvcHkgKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0aWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29weSApIHx8XG5cdFx0XHRcdFx0KCBjb3B5SXNBcnJheSA9IEFycmF5LmlzQXJyYXkoIGNvcHkgKSApICkgKSB7XG5cdFx0XHRcdFx0c3JjID0gdGFyZ2V0WyBuYW1lIF07XG5cblx0XHRcdFx0XHQvLyBFbnN1cmUgcHJvcGVyIHR5cGUgZm9yIHRoZSBzb3VyY2UgdmFsdWVcblx0XHRcdFx0XHRpZiAoIGNvcHlJc0FycmF5ICYmICFBcnJheS5pc0FycmF5KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0gW107XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggIWNvcHlJc0FycmF5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHt9O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblxuXHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcblxuXHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGNvcHk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZVxuXHRleHBhbmRvOiBcImpRdWVyeVwiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cXEQvZywgXCJcIiApLFxuXG5cdC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlXG5cdGlzUmVhZHk6IHRydWUsXG5cblx0ZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCBtc2cgKTtcblx0fSxcblxuXHRub29wOiBmdW5jdGlvbigpIHt9LFxuXG5cdGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIHByb3RvLCBDdG9yO1xuXG5cdFx0Ly8gRGV0ZWN0IG9idmlvdXMgbmVnYXRpdmVzXG5cdFx0Ly8gVXNlIHRvU3RyaW5nIGluc3RlYWQgb2YgalF1ZXJ5LnR5cGUgdG8gY2F0Y2ggaG9zdCBvYmplY3RzXG5cdFx0aWYgKCAhb2JqIHx8IHRvU3RyaW5nLmNhbGwoIG9iaiApICE9PSBcIltvYmplY3QgT2JqZWN0XVwiICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHByb3RvID0gZ2V0UHJvdG8oIG9iaiApO1xuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIG5vIHByb3RvdHlwZSAoZS5nLiwgYE9iamVjdC5jcmVhdGUoIG51bGwgKWApIGFyZSBwbGFpblxuXHRcdGlmICggIXByb3RvICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIHByb3RvdHlwZSBhcmUgcGxhaW4gaWZmIHRoZXkgd2VyZSBjb25zdHJ1Y3RlZCBieSBhIGdsb2JhbCBPYmplY3QgZnVuY3Rpb25cblx0XHRDdG9yID0gaGFzT3duLmNhbGwoIHByb3RvLCBcImNvbnN0cnVjdG9yXCIgKSAmJiBwcm90by5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBmblRvU3RyaW5nLmNhbGwoIEN0b3IgKSA9PT0gT2JqZWN0RnVuY3Rpb25TdHJpbmc7XG5cdH0sXG5cblx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgbmFtZTtcblxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBwcm92aWRlZCBjb250ZXh0OyBmYWxscyBiYWNrIHRvIHRoZSBnbG9iYWwgb25lXG5cdC8vIGlmIG5vdCBzcGVjaWZpZWQuXG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlLCBvcHRpb25zLCBkb2MgKSB7XG5cdFx0RE9NRXZhbCggY29kZSwgeyBub25jZTogb3B0aW9ucyAmJiBvcHRpb25zLm5vbmNlIH0sIGRvYyApO1xuXHR9LFxuXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkge1xuXHRcdHZhciBsZW5ndGgsIGkgPSAwO1xuXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7XG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0Ly8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7XG5cdFx0dmFyIHJldCA9IHJlc3VsdHMgfHwgW107XG5cblx0XHRpZiAoIGFyciAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBpc0FycmF5TGlrZSggT2JqZWN0KCBhcnIgKSApICkge1xuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHJldCxcblx0XHRcdFx0XHR0eXBlb2YgYXJyID09PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRbIGFyciBdIDogYXJyXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmNhbGwoIHJldCwgYXJyICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHRpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkge1xuXHRcdHJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRtZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7XG5cdFx0dmFyIGxlbiA9ICtzZWNvbmQubGVuZ3RoLFxuXHRcdFx0aiA9IDAsXG5cdFx0XHRpID0gZmlyc3QubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTtcblx0XHR9XG5cblx0XHRmaXJzdC5sZW5ndGggPSBpO1xuXG5cdFx0cmV0dXJuIGZpcnN0O1xuXHR9LFxuXG5cdGdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGludmVydCApIHtcblx0XHR2YXIgY2FsbGJhY2tJbnZlcnNlLFxuXHRcdFx0bWF0Y2hlcyA9IFtdLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGgsXG5cdFx0XHRjYWxsYmFja0V4cGVjdCA9ICFpbnZlcnQ7XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0ZW1zXG5cdFx0Ly8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb25cblx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdGNhbGxiYWNrSW52ZXJzZSA9ICFjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApO1xuXHRcdFx0aWYgKCBjYWxsYmFja0ludmVyc2UgIT09IGNhbGxiYWNrRXhwZWN0ICkge1xuXHRcdFx0XHRtYXRjaGVzLnB1c2goIGVsZW1zWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbWF0Y2hlcztcblx0fSxcblxuXHQvLyBhcmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7XG5cdFx0dmFyIGxlbmd0aCwgdmFsdWUsXG5cdFx0XHRpID0gMCxcblx0XHRcdHJldCA9IFtdO1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIHRyYW5zbGF0aW5nIGVhY2ggb2YgdGhlIGl0ZW1zIHRvIHRoZWlyIG5ldyB2YWx1ZXNcblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBlbGVtcyApICkge1xuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVjdCxcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBlbGVtcyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRcdHJldHVybiBmbGF0KCByZXQgKTtcblx0fSxcblxuXHQvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVjdHNcblx0Z3VpZDogMSxcblxuXHQvLyBqUXVlcnkuc3VwcG9ydCBpcyBub3QgdXNlZCBpbiBDb3JlIGJ1dCBvdGhlciBwcm9qZWN0cyBhdHRhY2ggdGhlaXJcblx0Ly8gcHJvcGVydGllcyB0byBpdCBzbyBpdCBuZWVkcyB0byBleGlzdC5cblx0c3VwcG9ydDogc3VwcG9ydFxufSApO1xuXG5pZiAoIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiApIHtcblx0alF1ZXJ5LmZuWyBTeW1ib2wuaXRlcmF0b3IgXSA9IGFyclsgU3ltYm9sLml0ZXJhdG9yIF07XG59XG5cbi8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcFxualF1ZXJ5LmVhY2goIFwiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2xcIi5zcGxpdCggXCIgXCIgKSxcbmZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0Y2xhc3MydHlwZVsgXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG59ICk7XG5cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKCBvYmogKSB7XG5cblx0Ly8gU3VwcG9ydDogcmVhbCBpT1MgOC4yIG9ubHkgKG5vdCByZXByb2R1Y2libGUgaW4gc2ltdWxhdG9yKVxuXHQvLyBgaW5gIGNoZWNrIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3IgKGdoLTIxNDUpXG5cdC8vIGhhc093biBpc24ndCB1c2VkIGhlcmUgZHVlIHRvIGZhbHNlIG5lZ2F0aXZlc1xuXHQvLyByZWdhcmRpbmcgTm9kZWxpc3QgbGVuZ3RoIGluIElFXG5cdHZhciBsZW5ndGggPSAhIW9iaiAmJiBcImxlbmd0aFwiIGluIG9iaiAmJiBvYmoubGVuZ3RoLFxuXHRcdHR5cGUgPSB0b1R5cGUoIG9iaiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggb2JqICkgfHwgaXNXaW5kb3coIG9iaiApICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0eXBlID09PSBcImFycmF5XCIgfHwgbGVuZ3RoID09PSAwIHx8XG5cdFx0dHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJiBsZW5ndGggPiAwICYmICggbGVuZ3RoIC0gMSApIGluIG9iajtcbn1cbnZhciBTaXp6bGUgPVxuLyohXG4gKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSB2Mi4zLjVcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9qcy5mb3VuZGF0aW9uL1xuICpcbiAqIERhdGU6IDIwMjAtMDMtMTRcbiAqL1xuKCBmdW5jdGlvbiggd2luZG93ICkge1xudmFyIGksXG5cdHN1cHBvcnQsXG5cdEV4cHIsXG5cdGdldFRleHQsXG5cdGlzWE1MLFxuXHR0b2tlbml6ZSxcblx0Y29tcGlsZSxcblx0c2VsZWN0LFxuXHRvdXRlcm1vc3RDb250ZXh0LFxuXHRzb3J0SW5wdXQsXG5cdGhhc0R1cGxpY2F0ZSxcblxuXHQvLyBMb2NhbCBkb2N1bWVudCB2YXJzXG5cdHNldERvY3VtZW50LFxuXHRkb2N1bWVudCxcblx0ZG9jRWxlbSxcblx0ZG9jdW1lbnRJc0hUTUwsXG5cdHJidWdneVFTQSxcblx0cmJ1Z2d5TWF0Y2hlcyxcblx0bWF0Y2hlcyxcblx0Y29udGFpbnMsXG5cblx0Ly8gSW5zdGFuY2Utc3BlY2lmaWMgZGF0YVxuXHRleHBhbmRvID0gXCJzaXp6bGVcIiArIDEgKiBuZXcgRGF0ZSgpLFxuXHRwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsXG5cdGRpcnJ1bnMgPSAwLFxuXHRkb25lID0gMCxcblx0Y2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAwO1xuXHR9LFxuXG5cdC8vIEluc3RhbmNlIG1ldGhvZHNcblx0aGFzT3duID0gKCB7fSApLmhhc093blByb3BlcnR5LFxuXHRhcnIgPSBbXSxcblx0cG9wID0gYXJyLnBvcCxcblx0cHVzaE5hdGl2ZSA9IGFyci5wdXNoLFxuXHRwdXNoID0gYXJyLnB1c2gsXG5cdHNsaWNlID0gYXJyLnNsaWNlLFxuXG5cdC8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBhcyBpdCdzIGZhc3RlciB0aGFuIG5hdGl2ZVxuXHQvLyBodHRwczovL2pzcGVyZi5jb20vdGhvci1pbmRleG9mLXZzLWZvci81XG5cdGluZGV4T2YgPSBmdW5jdGlvbiggbGlzdCwgZWxlbSApIHtcblx0XHR2YXIgaSA9IDAsXG5cdFx0XHRsZW4gPSBsaXN0Lmxlbmd0aDtcblx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGlmICggbGlzdFsgaSBdID09PSBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIC0xO1xuXHR9LFxuXG5cdGJvb2xlYW5zID0gXCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58XCIgK1xuXHRcdFwiaXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLFxuXG5cdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnNcblxuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jd2hpdGVzcGFjZVxuXHR3aGl0ZXNwYWNlID0gXCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiLFxuXG5cdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtc3ludGF4LTMvI2lkZW50LXRva2VuLWRpYWdyYW1cblx0aWRlbnRpZmllciA9IFwiKD86XFxcXFxcXFxbXFxcXGRhLWZBLUZdezEsNn1cIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiP3xcXFxcXFxcXFteXFxcXHJcXFxcblxcXFxmXXxbXFxcXHctXXxbXlxcMC1cXFxceDdmXSkrXCIsXG5cblx0Ly8gQXR0cmlidXRlIHNlbGVjdG9yczogaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzXG5cdGF0dHJpYnV0ZXMgPSBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFwiICsgaWRlbnRpZmllciArIFwiKSg/OlwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBPcGVyYXRvciAoY2FwdHVyZSAyKVxuXHRcdFwiKihbKl4kfCF+XT89KVwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBcIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBDU1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV1cblx0XHQvLyBvciBzdHJpbmdzIFtjYXB0dXJlIDMgb3IgY2FwdHVyZSA0XVwiXG5cdFx0XCIqKD86JygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwifChcIiArIGlkZW50aWZpZXIgKyBcIikpfClcIiArXG5cdFx0d2hpdGVzcGFjZSArIFwiKlxcXFxdXCIsXG5cblx0cHNldWRvcyA9IFwiOihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcXFxcKChcIiArXG5cblx0XHQvLyBUbyByZWR1Y2UgdGhlIG51bWJlciBvZiBzZWxlY3RvcnMgbmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgcHJlRmlsdGVyLCBwcmVmZXIgYXJndW1lbnRzOlxuXHRcdC8vIDEuIHF1b3RlZCAoY2FwdHVyZSAzOyBjYXB0dXJlIDQgb3IgY2FwdHVyZSA1KVxuXHRcdFwiKCcoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcIil8XCIgK1xuXG5cdFx0Ly8gMi4gc2ltcGxlIChjYXB0dXJlIDYpXG5cdFx0XCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIgKyBhdHRyaWJ1dGVzICsgXCIpKil8XCIgK1xuXG5cdFx0Ly8gMy4gYW55dGhpbmcgZWxzZSAoY2FwdHVyZSAyKVxuXHRcdFwiLipcIiArXG5cdFx0XCIpXFxcXCl8KVwiLFxuXG5cdC8vIExlYWRpbmcgYW5kIG5vbi1lc2NhcGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBsYXR0ZXJcblx0cndoaXRlc3BhY2UgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCIrXCIsIFwiZ1wiICksXG5cdHJ0cmltID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICtcblx0XHR3aGl0ZXNwYWNlICsgXCIrJFwiLCBcImdcIiApLFxuXG5cdHJjb21tYSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKixcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRyY29tYmluYXRvcnMgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiooWz4rfl18XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIipcIiApLFxuXHRyZGVzY2VuZCA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcInw+XCIgKSxcblxuXHRycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLFxuXHRyaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoIFwiXlwiICsgaWRlbnRpZmllciArIFwiJFwiICksXG5cblx0bWF0Y2hFeHByID0ge1xuXHRcdFwiSURcIjogbmV3IFJlZ0V4cCggXCJeIyhcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiQ0xBU1NcIjogbmV3IFJlZ0V4cCggXCJeXFxcXC4oXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIlRBR1wiOiBuZXcgUmVnRXhwKCBcIl4oXCIgKyBpZGVudGlmaWVyICsgXCJ8WypdKVwiICksXG5cdFx0XCJBVFRSXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgYXR0cmlidXRlcyApLFxuXHRcdFwiUFNFVURPXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgcHNldWRvcyApLFxuXHRcdFwiQ0hJTERcIjogbmV3IFJlZ0V4cCggXCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKFwiICtcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiICsgd2hpdGVzcGFjZSArIFwiKig/OihbKy1dfClcIiArXG5cdFx0XHR3aGl0ZXNwYWNlICsgXCIqKFxcXFxkKyl8KSlcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpXCIsIFwiaVwiICksXG5cdFx0XCJib29sXCI6IG5ldyBSZWdFeHAoIFwiXig/OlwiICsgYm9vbGVhbnMgKyBcIikkXCIsIFwiaVwiICksXG5cblx0XHQvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKClcblx0XHQvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgXG5cdFx0XCJuZWVkc0NvbnRleHRcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFxcXChcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKCg/Oi1cXFxcZCk/XFxcXGQqKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfCkoPz1bXi1dfCQpXCIsIFwiaVwiIClcblx0fSxcblxuXHRyaHRtbCA9IC9IVE1MJC9pLFxuXHRyaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmhlYWRlciA9IC9eaFxcZCQvaSxcblxuXHRybmF0aXZlID0gL15bXntdK1xce1xccypcXFtuYXRpdmUgXFx3LyxcblxuXHQvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnNcblx0cnF1aWNrRXhwciA9IC9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLFxuXG5cdHJzaWJsaW5nID0gL1srfl0vLFxuXG5cdC8vIENTUyBlc2NhcGVzXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNlc2NhcGVkLWNoYXJhY3RlcnNcblx0cnVuZXNjYXBlID0gbmV3IFJlZ0V4cCggXCJcXFxcXFxcXFtcXFxcZGEtZkEtRl17MSw2fVwiICsgd2hpdGVzcGFjZSArIFwiP3xcXFxcXFxcXChbXlxcXFxyXFxcXG5cXFxcZl0pXCIsIFwiZ1wiICksXG5cdGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBlc2NhcGUsIG5vbkhleCApIHtcblx0XHR2YXIgaGlnaCA9IFwiMHhcIiArIGVzY2FwZS5zbGljZSggMSApIC0gMHgxMDAwMDtcblxuXHRcdHJldHVybiBub25IZXggP1xuXG5cdFx0XHQvLyBTdHJpcCB0aGUgYmFja3NsYXNoIHByZWZpeCBmcm9tIGEgbm9uLWhleCBlc2NhcGUgc2VxdWVuY2Vcblx0XHRcdG5vbkhleCA6XG5cblx0XHRcdC8vIFJlcGxhY2UgYSBoZXhhZGVjaW1hbCBlc2NhcGUgc2VxdWVuY2Ugd2l0aCB0aGUgZW5jb2RlZCBVbmljb2RlIGNvZGUgcG9pbnRcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTErXG5cdFx0XHQvLyBGb3IgdmFsdWVzIG91dHNpZGUgdGhlIEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZSAoQk1QKSwgbWFudWFsbHkgY29uc3RydWN0IGFcblx0XHRcdC8vIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRoaWdoIDwgMCA/XG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOlxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoID4+IDEwIHwgMHhEODAwLCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTtcblx0fSxcblxuXHQvLyBDU1Mgc3RyaW5nL2lkZW50aWZpZXIgc2VyaWFsaXphdGlvblxuXHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXNcblx0cmNzc2VzY2FwZSA9IC8oW1xcMC1cXHgxZlxceDdmXXxeLT9cXGQpfF4tJHxbXlxcMC1cXHgxZlxceDdmLVxcdUZGRkZcXHctXS9nLFxuXHRmY3NzZXNjYXBlID0gZnVuY3Rpb24oIGNoLCBhc0NvZGVQb2ludCApIHtcblx0XHRpZiAoIGFzQ29kZVBvaW50ICkge1xuXG5cdFx0XHQvLyBVKzAwMDAgTlVMTCBiZWNvbWVzIFUrRkZGRCBSRVBMQUNFTUVOVCBDSEFSQUNURVJcblx0XHRcdGlmICggY2ggPT09IFwiXFwwXCIgKSB7XG5cdFx0XHRcdHJldHVybiBcIlxcdUZGRkRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udHJvbCBjaGFyYWN0ZXJzIGFuZCAoZGVwZW5kZW50IHVwb24gcG9zaXRpb24pIG51bWJlcnMgZ2V0IGVzY2FwZWQgYXMgY29kZSBwb2ludHNcblx0XHRcdHJldHVybiBjaC5zbGljZSggMCwgLTEgKSArIFwiXFxcXFwiICtcblx0XHRcdFx0Y2guY2hhckNvZGVBdCggY2gubGVuZ3RoIC0gMSApLnRvU3RyaW5nKCAxNiApICsgXCIgXCI7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXIgcG90ZW50aWFsbHktc3BlY2lhbCBBU0NJSSBjaGFyYWN0ZXJzIGdldCBiYWNrc2xhc2gtZXNjYXBlZFxuXHRcdHJldHVybiBcIlxcXFxcIiArIGNoO1xuXHR9LFxuXG5cdC8vIFVzZWQgZm9yIGlmcmFtZXNcblx0Ly8gU2VlIHNldERvY3VtZW50KClcblx0Ly8gUmVtb3ZpbmcgdGhlIGZ1bmN0aW9uIHdyYXBwZXIgY2F1c2VzIGEgXCJQZXJtaXNzaW9uIERlbmllZFwiXG5cdC8vIGVycm9yIGluIElFXG5cdHVubG9hZEhhbmRsZXIgPSBmdW5jdGlvbigpIHtcblx0XHRzZXREb2N1bWVudCgpO1xuXHR9LFxuXG5cdGluRGlzYWJsZWRGaWVsZHNldCA9IGFkZENvbWJpbmF0b3IoXG5cdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiZmllbGRzZXRcIjtcblx0XHR9LFxuXHRcdHsgZGlyOiBcInBhcmVudE5vZGVcIiwgbmV4dDogXCJsZWdlbmRcIiB9XG5cdCk7XG5cbi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApXG50cnkge1xuXHRwdXNoLmFwcGx5KFxuXHRcdCggYXJyID0gc2xpY2UuY2FsbCggcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMgKSApLFxuXHRcdHByZWZlcnJlZERvYy5jaGlsZE5vZGVzXG5cdCk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjBcblx0Ly8gRGV0ZWN0IHNpbGVudGx5IGZhaWxpbmcgcHVzaC5hcHBseVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7XG59IGNhdGNoICggZSApIHtcblx0cHVzaCA9IHsgYXBwbHk6IGFyci5sZW5ndGggP1xuXG5cdFx0Ly8gTGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGVcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHRwdXNoTmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoIGVscyApICk7XG5cdFx0fSA6XG5cblx0XHQvLyBTdXBwb3J0OiBJRTw5XG5cdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZCBkaXJlY3RseVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHZhciBqID0gdGFyZ2V0Lmxlbmd0aCxcblx0XHRcdFx0aSA9IDA7XG5cblx0XHRcdC8vIENhbid0IHRydXN0IE5vZGVMaXN0Lmxlbmd0aFxuXHRcdFx0d2hpbGUgKCAoIHRhcmdldFsgaisrIF0gPSBlbHNbIGkrKyBdICkgKSB7fVxuXHRcdFx0dGFyZ2V0Lmxlbmd0aCA9IGogLSAxO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIG0sIGksIGVsZW0sIG5pZCwgbWF0Y2gsIGdyb3VwcywgbmV3U2VsZWN0b3IsXG5cdFx0bmV3Q29udGV4dCA9IGNvbnRleHQgJiYgY29udGV4dC5vd25lckRvY3VtZW50LFxuXG5cdFx0Ly8gbm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2UgY29udGV4dCBkZWZhdWx0cyB0byBkb2N1bWVudFxuXHRcdG5vZGVUeXBlID0gY29udGV4dCA/IGNvbnRleHQubm9kZVR5cGUgOiA5O1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFJldHVybiBlYXJseSBmcm9tIGNhbGxzIHdpdGggaW52YWxpZCBzZWxlY3RvciBvciBjb250ZXh0XG5cdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiIHx8ICFzZWxlY3RvciB8fFxuXHRcdG5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHtcblxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9XG5cblx0Ly8gVHJ5IHRvIHNob3J0Y3V0IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bwb3NlZCB0byBmaWx0ZXJzKSBpbiBIVE1MIGRvY3VtZW50c1xuXHRpZiAoICFzZWVkICkge1xuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdFx0Y29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7XG5cblx0XHRpZiAoIGRvY3VtZW50SXNIVE1MICkge1xuXG5cdFx0XHQvLyBJZiB0aGUgc2VsZWN0b3IgaXMgc3VmZmljaWVudGx5IHNpbXBsZSwgdHJ5IHVzaW5nIGEgXCJnZXQqQnkqXCIgRE9NIG1ldGhvZFxuXHRcdFx0Ly8gKGV4Y2VwdGluZyBEb2N1bWVudEZyYWdtZW50IGNvbnRleHQsIHdoZXJlIHRoZSBtZXRob2RzIGRvbid0IGV4aXN0KVxuXHRcdFx0aWYgKCBub2RlVHlwZSAhPT0gMTEgJiYgKCBtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSApICkge1xuXG5cdFx0XHRcdC8vIElEIHNlbGVjdG9yXG5cdFx0XHRcdGlmICggKCBtID0gbWF0Y2hbIDEgXSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9jdW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdFx0aWYgKCBlbGVtLmlkID09PSBtICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEVsZW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICYmICggZWxlbSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSApICYmXG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiZcblx0XHRcdFx0XHRcdFx0ZWxlbS5pZCA9PT0gbSApIHtcblxuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFR5cGUgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbIDIgXSApIHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdFx0Ly8gQ2xhc3Mgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggKCBtID0gbWF0Y2hbIDMgXSApICYmIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJlxuXHRcdFx0XHRcdGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGFrZSBhZHZhbnRhZ2Ugb2YgcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0aWYgKCBzdXBwb3J0LnFzYSAmJlxuXHRcdFx0XHQhbm9ubmF0aXZlU2VsZWN0b3JDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdICYmXG5cdFx0XHRcdCggIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkgKSAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDggb25seVxuXHRcdFx0XHQvLyBFeGNsdWRlIG9iamVjdCBlbGVtZW50c1xuXHRcdFx0XHQoIG5vZGVUeXBlICE9PSAxIHx8IGNvbnRleHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJvYmplY3RcIiApICkge1xuXG5cdFx0XHRcdG5ld1NlbGVjdG9yID0gc2VsZWN0b3I7XG5cdFx0XHRcdG5ld0NvbnRleHQgPSBjb250ZXh0O1xuXG5cdFx0XHRcdC8vIHFTQSBjb25zaWRlcnMgZWxlbWVudHMgb3V0c2lkZSBhIHNjb3Bpbmcgcm9vdCB3aGVuIGV2YWx1YXRpbmcgY2hpbGQgb3Jcblx0XHRcdFx0Ly8gZGVzY2VuZGFudCBjb21iaW5hdG9ycywgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudC5cblx0XHRcdFx0Ly8gSW4gc3VjaCBjYXNlcywgd2Ugd29yayBhcm91bmQgdGhlIGJlaGF2aW9yIGJ5IHByZWZpeGluZyBldmVyeSBzZWxlY3RvciBpbiB0aGVcblx0XHRcdFx0Ly8gbGlzdCB3aXRoIGFuIElEIHNlbGVjdG9yIHJlZmVyZW5jaW5nIHRoZSBzY29wZSBjb250ZXh0LlxuXHRcdFx0XHQvLyBUaGUgdGVjaG5pcXVlIGhhcyB0byBiZSB1c2VkIGFzIHdlbGwgd2hlbiBhIGxlYWRpbmcgY29tYmluYXRvciBpcyB1c2VkXG5cdFx0XHRcdC8vIGFzIHN1Y2ggc2VsZWN0b3JzIGFyZSBub3QgcmVjb2duaXplZCBieSBxdWVyeVNlbGVjdG9yQWxsLlxuXHRcdFx0XHQvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhpcyB0ZWNobmlxdWUuXG5cdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHQoIHJkZXNjZW5kLnRlc3QoIHNlbGVjdG9yICkgfHwgcmNvbWJpbmF0b3JzLnRlc3QoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHRcdC8vIEV4cGFuZCBjb250ZXh0IGZvciBzaWJsaW5nIHNlbGVjdG9yc1xuXHRcdFx0XHRcdG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dDtcblxuXHRcdFx0XHRcdC8vIFdlIGNhbiB1c2UgOnNjb3BlIGluc3RlYWQgb2YgdGhlIElEIGhhY2sgaWYgdGhlIGJyb3dzZXJcblx0XHRcdFx0XHQvLyBzdXBwb3J0cyBpdCAmIGlmIHdlJ3JlIG5vdCBjaGFuZ2luZyB0aGUgY29udGV4dC5cblx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgIT09IGNvbnRleHQgfHwgIXN1cHBvcnQuc2NvcGUgKSB7XG5cblx0XHRcdFx0XHRcdC8vIENhcHR1cmUgdGhlIGNvbnRleHQgSUQsIHNldHRpbmcgaXQgZmlyc3QgaWYgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0XHRpZiAoICggbmlkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoIFwiaWRcIiApICkgKSB7XG5cdFx0XHRcdFx0XHRcdG5pZCA9IG5pZC5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0LnNldEF0dHJpYnV0ZSggXCJpZFwiLCAoIG5pZCA9IGV4cGFuZG8gKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZWZpeCBldmVyeSBzZWxlY3RvciBpbiB0aGUgbGlzdFxuXHRcdFx0XHRcdGdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdFx0XHRcdGkgPSBncm91cHMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0Z3JvdXBzWyBpIF0gPSAoIG5pZCA/IFwiI1wiICsgbmlkIDogXCI6c2NvcGVcIiApICsgXCIgXCIgK1xuXHRcdFx0XHRcdFx0XHR0b1NlbGVjdG9yKCBncm91cHNbIGkgXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRuZXdTZWxlY3RvciA9IGdyb3Vwcy5qb2luKCBcIixcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLFxuXHRcdFx0XHRcdFx0bmV3Q29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCBuZXdTZWxlY3RvciApXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fSBjYXRjaCAoIHFzYUVycm9yICkge1xuXHRcdFx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0aWYgKCBuaWQgPT09IGV4cGFuZG8gKSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWxsIG90aGVyc1xuXHRyZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUga2V5LXZhbHVlIGNhY2hlcyBvZiBsaW1pdGVkIHNpemVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmcsIG9iamVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQgb24gaXRzZWxmIHdpdGhcbiAqXHRwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Utc3VmZml4ZWQpIHN0cmluZyBhbmQgKGlmIHRoZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNhY2hlTGVuZ3RoKVxuICpcdGRlbGV0aW5nIHRoZSBvbGRlc3QgZW50cnlcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7XG5cdHZhciBrZXlzID0gW107XG5cblx0ZnVuY3Rpb24gY2FjaGUoIGtleSwgdmFsdWUgKSB7XG5cblx0XHQvLyBVc2UgKGtleSArIFwiIFwiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgcHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSBJc3N1ZSAjMTU3KVxuXHRcdGlmICgga2V5cy5wdXNoKCBrZXkgKyBcIiBcIiApID4gRXhwci5jYWNoZUxlbmd0aCApIHtcblxuXHRcdFx0Ly8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xuXHRcdH1cblx0XHRyZXR1cm4gKCBjYWNoZVsga2V5ICsgXCIgXCIgXSA9IHZhbHVlICk7XG5cdH1cblx0cmV0dXJuIGNhY2hlO1xufVxuXG4vKipcbiAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbWFya1xuICovXG5mdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkge1xuXHRmblsgZXhwYW5kbyBdID0gdHJ1ZTtcblx0cmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIFN1cHBvcnQgdGVzdGluZyB1c2luZyBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBQYXNzZWQgdGhlIGNyZWF0ZWQgZWxlbWVudCBhbmQgcmV0dXJucyBhIGJvb2xlYW4gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzc2VydCggZm4gKSB7XG5cdHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZmllbGRzZXRcIiApO1xuXG5cdHRyeSB7XG5cdFx0cmV0dXJuICEhZm4oIGVsICk7XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBmaW5hbGx5IHtcblxuXHRcdC8vIFJlbW92ZSBmcm9tIGl0cyBwYXJlbnQgYnkgZGVmYXVsdFxuXHRcdGlmICggZWwucGFyZW50Tm9kZSApIHtcblx0XHRcdGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsICk7XG5cdFx0fVxuXG5cdFx0Ly8gcmVsZWFzZSBtZW1vcnkgaW4gSUVcblx0XHRlbCA9IG51bGw7XG5cdH1cbn1cblxuLyoqXG4gKiBBZGRzIHRoZSBzYW1lIGhhbmRsZXIgZm9yIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGF0dHJzXG4gKiBAcGFyYW0ge1N0cmluZ30gYXR0cnMgUGlwZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGFwcGxpZWRcbiAqL1xuZnVuY3Rpb24gYWRkSGFuZGxlKCBhdHRycywgaGFuZGxlciApIHtcblx0dmFyIGFyciA9IGF0dHJzLnNwbGl0KCBcInxcIiApLFxuXHRcdGkgPSBhcnIubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdEV4cHIuYXR0ckhhbmRsZVsgYXJyWyBpIF0gXSA9IGhhbmRsZXI7XG5cdH1cbn1cblxuLyoqXG4gKiBDaGVja3MgZG9jdW1lbnQgb3JkZXIgb2YgdHdvIHNpYmxpbmdzXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGFcbiAqIEBwYXJhbSB7RWxlbWVudH0gYlxuICogQHJldHVybnMge051bWJlcn0gUmV0dXJucyBsZXNzIHRoYW4gMCBpZiBhIHByZWNlZGVzIGIsIGdyZWF0ZXIgdGhhbiAwIGlmIGEgZm9sbG93cyBiXG4gKi9cbmZ1bmN0aW9uIHNpYmxpbmdDaGVjayggYSwgYiApIHtcblx0dmFyIGN1ciA9IGIgJiYgYSxcblx0XHRkaWZmID0gY3VyICYmIGEubm9kZVR5cGUgPT09IDEgJiYgYi5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0YS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7XG5cblx0Ly8gVXNlIElFIHNvdXJjZUluZGV4IGlmIGF2YWlsYWJsZSBvbiBib3RoIG5vZGVzXG5cdGlmICggZGlmZiApIHtcblx0XHRyZXR1cm4gZGlmZjtcblx0fVxuXG5cdC8vIENoZWNrIGlmIGIgZm9sbG93cyBhXG5cdGlmICggY3VyICkge1xuXHRcdHdoaWxlICggKCBjdXIgPSBjdXIubmV4dFNpYmxpbmcgKSApIHtcblx0XHRcdGlmICggY3VyID09PSBiICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGEgPyAxIDogLTE7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiAoIG5hbWUgPT09IFwiaW5wdXRcIiB8fCBuYW1lID09PSBcImJ1dHRvblwiICkgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgOmVuYWJsZWQvOmRpc2FibGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGRpc2FibGVkIHRydWUgZm9yIDpkaXNhYmxlZDsgZmFsc2UgZm9yIDplbmFibGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURpc2FibGVkUHNldWRvKCBkaXNhYmxlZCApIHtcblxuXHQvLyBLbm93biA6ZGlzYWJsZWQgZmFsc2UgcG9zaXRpdmVzOiBmaWVsZHNldFtkaXNhYmxlZF0gPiBsZWdlbmQ6bnRoLW9mLXR5cGUobisyKSA6Y2FuLWRpc2FibGVcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gT25seSBjZXJ0YWluIGVsZW1lbnRzIGNhbiBtYXRjaCA6ZW5hYmxlZCBvciA6ZGlzYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1lbmFibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZGlzYWJsZWRcblx0XHRpZiAoIFwiZm9ybVwiIGluIGVsZW0gKSB7XG5cblx0XHRcdC8vIENoZWNrIGZvciBpbmhlcml0ZWQgZGlzYWJsZWRuZXNzIG9uIHJlbGV2YW50IG5vbi1kaXNhYmxlZCBlbGVtZW50czpcblx0XHRcdC8vICogbGlzdGVkIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cyBpbiBhIGRpc2FibGVkIGZpZWxkc2V0XG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktbGlzdGVkXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1mZS1kaXNhYmxlZFxuXHRcdFx0Ly8gKiBvcHRpb24gZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtb3B0aW9uLWRpc2FibGVkXG5cdFx0XHQvLyBBbGwgc3VjaCBlbGVtZW50cyBoYXZlIGEgXCJmb3JtXCIgcHJvcGVydHkuXG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSAmJiBlbGVtLmRpc2FibGVkID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHQvLyBPcHRpb24gZWxlbWVudHMgZGVmZXIgdG8gYSBwYXJlbnQgb3B0Z3JvdXAgaWYgcHJlc2VudFxuXHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLnBhcmVudE5vZGUuZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDExXG5cdFx0XHRcdC8vIFVzZSB0aGUgaXNEaXNhYmxlZCBzaG9ydGN1dCBwcm9wZXJ0eSB0byBjaGVjayBmb3IgZGlzYWJsZWQgZmllbGRzZXQgYW5jZXN0b3JzXG5cdFx0XHRcdHJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8XG5cblx0XHRcdFx0XHQvLyBXaGVyZSB0aGVyZSBpcyBubyBpc0Rpc2FibGVkLCBjaGVjayBtYW51YWxseVxuXHRcdFx0XHRcdC8qIGpzaGludCAtVzAxOCAqL1xuXHRcdFx0XHRcdGVsZW0uaXNEaXNhYmxlZCAhPT0gIWRpc2FibGVkICYmXG5cdFx0XHRcdFx0aW5EaXNhYmxlZEZpZWxkc2V0KCBlbGVtICkgPT09IGRpc2FibGVkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cblx0XHQvLyBUcnkgdG8gd2lubm93IG91dCBlbGVtZW50cyB0aGF0IGNhbid0IGJlIGRpc2FibGVkIGJlZm9yZSB0cnVzdGluZyB0aGUgZGlzYWJsZWQgcHJvcGVydHkuXG5cdFx0Ly8gU29tZSB2aWN0aW1zIGdldCBjYXVnaHQgaW4gb3VyIG5ldCAobGFiZWwsIGxlZ2VuZCwgbWVudSwgdHJhY2spLCBidXQgaXQgc2hvdWxkbid0XG5cdFx0Ly8gZXZlbiBleGlzdCBvbiB0aGVtLCBsZXQgYWxvbmUgaGF2ZSBhIGJvb2xlYW4gdmFsdWUuXG5cdFx0fSBlbHNlIGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gUmVtYWluaW5nIGVsZW1lbnRzIGFyZSBuZWl0aGVyIDplbmFibGVkIG5vciA6ZGlzYWJsZWRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFsc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZm4gKSB7XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBhcmd1bWVudCApIHtcblx0XHRhcmd1bWVudCA9ICthcmd1bWVudDtcblx0XHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdHZhciBqLFxuXHRcdFx0XHRtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLFxuXHRcdFx0XHRpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDtcblxuXHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCBzZWVkWyAoIGogPSBtYXRjaEluZGV4ZXNbIGkgXSApIF0gKSB7XG5cdFx0XHRcdFx0c2VlZFsgaiBdID0gISggbWF0Y2hlc1sgaiBdID0gc2VlZFsgaiBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0gKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgYSBub2RlIGZvciB2YWxpZGl0eSBhcyBhIFNpenpsZSBjb250ZXh0XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0PX0gY29udGV4dFxuICogQHJldHVybnMge0VsZW1lbnR8T2JqZWN0fEJvb2xlYW59IFRoZSBpbnB1dCBub2RlIGlmIGFjY2VwdGFibGUsIG90aGVyd2lzZSBhIGZhbHN5IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHRlc3RDb250ZXh0KCBjb250ZXh0ICkge1xuXHRyZXR1cm4gY29udGV4dCAmJiB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb250ZXh0O1xufVxuXG4vLyBFeHBvc2Ugc3VwcG9ydCB2YXJzIGZvciBjb252ZW5pZW5jZVxuc3VwcG9ydCA9IFNpenpsZS5zdXBwb3J0ID0ge307XG5cbi8qKlxuICogRGV0ZWN0cyBYTUwgbm9kZXNcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IGVsZW0gQW4gZWxlbWVudCBvciBhIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZmYgZWxlbSBpcyBhIG5vbi1IVE1MIFhNTCBub2RlXG4gKi9cbmlzWE1MID0gU2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBuYW1lc3BhY2UgPSBlbGVtLm5hbWVzcGFjZVVSSSxcblx0XHRkb2NFbGVtID0gKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApLmRvY3VtZW50RWxlbWVudDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PThcblx0Ly8gQXNzdW1lIEhUTUwgd2hlbiBkb2N1bWVudEVsZW1lbnQgZG9lc24ndCB5ZXQgZXhpc3QsIHN1Y2ggYXMgaW5zaWRlIGxvYWRpbmcgaWZyYW1lc1xuXHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvNDgzM1xuXHRyZXR1cm4gIXJodG1sLnRlc3QoIG5hbWVzcGFjZSB8fCBkb2NFbGVtICYmIGRvY0VsZW0ubm9kZU5hbWUgfHwgXCJIVE1MXCIgKTtcbn07XG5cbi8qKlxuICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudFxuICovXG5zZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2RlICkge1xuXHR2YXIgaGFzQ29tcGFyZSwgc3ViV2luZG93LFxuXHRcdGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYztcblxuXHQvLyBSZXR1cm4gZWFybHkgaWYgZG9jIGlzIGludmFsaWQgb3IgYWxyZWFkeSBzZWxlY3RlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoIGRvYyA9PSBkb2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50O1xuXHR9XG5cblx0Ly8gVXBkYXRlIGdsb2JhbCB2YXJpYWJsZXNcblx0ZG9jdW1lbnQgPSBkb2M7XG5cdGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdGRvY3VtZW50SXNIVE1MID0gIWlzWE1MKCBkb2N1bWVudCApO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCtcblx0Ly8gQWNjZXNzaW5nIGlmcmFtZSBkb2N1bWVudHMgYWZ0ZXIgdW5sb2FkIHRocm93cyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3JzIChqUXVlcnkgIzEzOTM2KVxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoIHByZWZlcnJlZERvYyAhPSBkb2N1bWVudCAmJlxuXHRcdCggc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcgKSAmJiBzdWJXaW5kb3cudG9wICE9PSBzdWJXaW5kb3cgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMSwgRWRnZVxuXHRcdGlmICggc3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJ1bmxvYWRcIiwgdW5sb2FkSGFuZGxlciwgZmFsc2UgKTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMCBvbmx5XG5cdFx0fSBlbHNlIGlmICggc3ViV2luZG93LmF0dGFjaEV2ZW50ICkge1xuXHRcdFx0c3ViV2luZG93LmF0dGFjaEV2ZW50KCBcIm9udW5sb2FkXCIsIHVubG9hZEhhbmRsZXIgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gMTErLCBFZGdlIDEyIC0gMTgrLCBDaHJvbWUgPD0xNiAtIDI1IG9ubHksIEZpcmVmb3ggPD0zLjYgLSAzMSBvbmx5LFxuXHQvLyBTYWZhcmkgNCAtIDUgb25seSwgT3BlcmEgPD0xMS42IC0gMTIueCBvbmx5XG5cdC8vIElFL0VkZ2UgJiBvbGRlciBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSA6c2NvcGUgcHNldWRvLWNsYXNzLlxuXHQvLyBTdXBwb3J0OiBTYWZhcmkgNi4wIG9ubHlcblx0Ly8gU2FmYXJpIDYuMCBzdXBwb3J0cyA6c2NvcGUgYnV0IGl0J3MgYW4gYWxpYXMgb2YgOnJvb3QgdGhlcmUuXG5cdHN1cHBvcnQuc2NvcGUgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblx0XHRyZXR1cm4gdHlwZW9mIGVsLnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdCFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpzY29wZSBmaWVsZHNldCBkaXZcIiApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8qIEF0dHJpYnV0ZXNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFN1cHBvcnQ6IElFPDhcblx0Ly8gVmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSByZXR1cm5zIGF0dHJpYnV0ZXMgYW5kIG5vdCBwcm9wZXJ0aWVzXG5cdC8vIChleGNlcHRpbmcgSUU4IGJvb2xlYW5zKVxuXHRzdXBwb3J0LmF0dHJpYnV0ZXMgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5jbGFzc05hbWUgPSBcImlcIjtcblx0XHRyZXR1cm4gIWVsLmdldEF0dHJpYnV0ZSggXCJjbGFzc05hbWVcIiApO1xuXHR9ICk7XG5cblx0LyogZ2V0RWxlbWVudChzKUJ5KlxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpIHJldHVybnMgb25seSBlbGVtZW50c1xuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZWwuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIFwiXCIgKSApO1xuXHRcdHJldHVybiAhZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwiKlwiICkubGVuZ3RoO1xuXHR9ICk7XG5cblx0Ly8gU3VwcG9ydDogSUU8OVxuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKTtcblxuXHQvLyBTdXBwb3J0OiBJRTwxMFxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWVcblx0Ly8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbW1hdGljYWxseS1zZXQgbmFtZXMsXG5cdC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdFxuXHRzdXBwb3J0LmdldEJ5SWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlkID0gZXhwYW5kbztcblx0XHRyZXR1cm4gIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lIHx8ICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSggZXhwYW5kbyApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8vIElEIGZpbHRlciBhbmQgZmluZFxuXHRpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHtcblx0XHRFeHByLmZpbHRlclsgXCJJRFwiIF0gPSBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBcImlkXCIgKSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdEV4cHIuZmluZFsgXCJJRFwiIF0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cdFx0XHRcdHJldHVybiBlbGVtID8gWyBlbGVtIF0gOiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdEV4cHIuZmlsdGVyWyBcIklEXCIgXSA9ICBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBcImlkXCIgKTtcblx0XHRcdFx0cmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDcgb25seVxuXHRcdC8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXRcblx0XHRFeHByLmZpbmRbIFwiSURcIiBdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIG5vZGUsIGksIGVsZW1zLFxuXHRcdFx0XHRcdGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXG5cdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdC8vIFZlcmlmeSB0aGUgaWQgYXR0cmlidXRlXG5cdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZhbGwgYmFjayBvbiBnZXRFbGVtZW50c0J5TmFtZVxuXHRcdFx0XHRcdGVsZW1zID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSggaWQgKTtcblx0XHRcdFx0XHRpID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1zWyBpKysgXSApICkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8vIFRhZ1xuXHRFeHByLmZpbmRbIFwiVEFHXCIgXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgP1xuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTlxuXHRcdFx0fSBlbHNlIGlmICggc3VwcG9ydC5xc2EgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApO1xuXHRcdFx0fVxuXHRcdH0gOlxuXG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHR0bXAgPSBbXSxcblx0XHRcdFx0aSA9IDAsXG5cblx0XHRcdFx0Ly8gQnkgaGFwcHkgY29pbmNpZGVuY2UsIGEgKGJyb2tlbikgZ0VCVE4gYXBwZWFycyBvbiBEb2N1bWVudEZyYWdtZW50IG5vZGVzIHRvb1xuXHRcdFx0XHRyZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHNcblx0XHRcdGlmICggdGFnID09PSBcIipcIiApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSByZXN1bHRzWyBpKysgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdHRtcC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRtcDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdH07XG5cblx0Ly8gQ2xhc3Ncblx0RXhwci5maW5kWyBcIkNMQVNTXCIgXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkge1xuXHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XG5cblx0Ly8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSlcblx0cmJ1Z2d5TWF0Y2hlcyA9IFtdO1xuXG5cdC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChDaHJvbWUgMjEpXG5cdC8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJvclxuXHQvLyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZyYW1lXG5cdC8vIFNvLCB3ZSBhbGxvdyA6Zm9jdXMgdG8gcGFzcyB0aHJvdWdoIFFTQSBhbGwgdGhlIHRpbWUgdG8gYXZvaWQgdGhlIElFIGVycm9yXG5cdC8vIFNlZSBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzNzhcblx0cmJ1Z2d5UVNBID0gW107XG5cblx0aWYgKCAoIHN1cHBvcnQucXNhID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkgKSApIHtcblxuXHRcdC8vIEJ1aWxkIFFTQSByZWdleFxuXHRcdC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmlcblx0XHRhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHRcdFx0dmFyIGlucHV0O1xuXG5cdFx0XHQvLyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlXG5cdFx0XHQvLyBUaGlzIGlzIHRvIHRlc3QgSUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxpY2l0bHlcblx0XHRcdC8vIHNldHRpbmcgYSBib29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLFxuXHRcdFx0Ly8gc2luY2UgaXRzIHByZXNlbmNlIHNob3VsZCBiZSBlbm91Z2hcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OVxuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pbm5lckhUTUwgPSBcIjxhIGlkPSdcIiArIGV4cGFuZG8gKyBcIic+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGlkPSdcIiArIGV4cGFuZG8gKyBcIi1cXHJcXFxcJyBtc2FsbG93Y2FwdHVyZT0nJz5cIiArXG5cdFx0XHRcdFwiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4LCBPcGVyYSAxMS0xMi4xNlxuXHRcdFx0Ly8gTm90aGluZyBzaG91bGQgYmUgc2VsZWN0ZWQgd2hlbiBlbXB0eSBzdHJpbmdzIGZvbGxvdyBePSBvciAkPSBvciAqPVxuXHRcdFx0Ly8gVGhlIHRlc3QgYXR0cmlidXRlIG11c3QgYmUgdW5rbm93biBpbiBPcGVyYSBidXQgXCJzYWZlXCIgZm9yIFdpblJUXG5cdFx0XHQvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2hoNDY1Mzg4LmFzcHgjYXR0cmlidXRlX3NlY3Rpb25cblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbXNhbGxvd2NhcHR1cmVePScnXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbKl4kXT1cIiArIHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEJvb2xlYW4gYXR0cmlidXRlcyBhbmQgXCJ2YWx1ZVwiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHlcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW3NlbGVjdGVkXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKig/OnZhbHVlfFwiICsgYm9vbGVhbnMgKyBcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWU8MjksIEFuZHJvaWQ8NC40LCBTYWZhcmk8Ny4wKywgaU9TPDcuMCssIFBoYW50b21KUzwxLjkuOCtcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW2lkfj1cIiArIGV4cGFuZG8gKyBcIi1dXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIn49XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0XHQvLyBJRSAxMS9FZGdlIGRvbid0IGZpbmQgZWxlbWVudHMgb24gYSBgW25hbWU9JyddYCBxdWVyeSBpbiBzb21lIGNhc2VzLlxuXHRcdFx0Ly8gQWRkaW5nIGEgdGVtcG9yYXJ5IGF0dHJpYnV0ZSB0byB0aGUgZG9jdW1lbnQgYmVmb3JlIHRoZSBzZWxlY3Rpb24gd29ya3Ncblx0XHRcdC8vIGFyb3VuZCB0aGUgaXNzdWUuXG5cdFx0XHQvLyBJbnRlcmVzdGluZ2x5LCBJRSAxMCAmIG9sZGVyIGRvbid0IHNlZW0gdG8gaGF2ZSB0aGUgaXNzdWUuXG5cdFx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJcIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltuYW1lPScnXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIio9XCIgK1xuXHRcdFx0XHRcdHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBXZWJraXQvT3BlcmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbiBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpjaGVja2VkXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjpjaGVja2VkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrLCBpT1MgOCtcblx0XHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTFcblx0XHRcdC8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmxpbmctY29tYmluYXRvciBzZWxlY3RvcmAgZmFpbHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiYSNcIiArIGV4cGFuZG8gKyBcIisqXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIi4jLitbK35dXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTMuNiAtIDUgb25seVxuXHRcdFx0Ly8gT2xkIEZpcmVmb3ggZG9lc24ndCB0aHJvdyBvbiBhIGJhZGx5LWVzY2FwZWQgaWRlbnRpZmllci5cblx0XHRcdGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiXFxcXFxcZlwiICk7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbXFxcXHJcXFxcblxcXFxmXVwiICk7XG5cdFx0fSApO1xuXG5cdFx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+XCIgK1xuXHRcdFx0XHRcIjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogV2luZG93cyA4IE5hdGl2ZSBBcHBzXG5cdFx0XHQvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRyaWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnRcblx0XHRcdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJoaWRkZW5cIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJEXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBFbmZvcmNlIGNhc2Utc2Vuc2l0aXZpdHkgb2YgbmFtZSBhdHRyaWJ1dGVcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbmFtZT1kXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqWypeJHwhfl0/PVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjplbmFibGVkXCIgKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU5LTExK1xuXHRcdFx0Ly8gSUUncyA6ZGlzYWJsZWQgc2VsZWN0b3IgZG9lcyBub3QgcGljayB1cCB0aGUgY2hpbGRyZW4gb2YgZGlzYWJsZWQgZmllbGRzZXRzXG5cdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCI6ZGlzYWJsZWRcIiApLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBPcGVyYSAxMCAtIDExIG9ubHlcblx0XHRcdC8vIE9wZXJhIDEwLTExIGRvZXMgbm90IHRocm93IG9uIHBvc3QtY29tbWEgaW52YWxpZCBwc2V1ZG9zXG5cdFx0XHRlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIiosOnhcIiApO1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiLC4qOlwiICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50ZXN0KCAoIG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXMgfHxcblx0XHRkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvciApICkgKSApIHtcblxuXHRcdGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdFx0XHQvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3Jcblx0XHRcdC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpXG5cdFx0XHRzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBlbCwgXCIqXCIgKTtcblxuXHRcdFx0Ly8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvblxuXHRcdFx0Ly8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2UgaW5zdGVhZFxuXHRcdFx0bWF0Y2hlcy5jYWxsKCBlbCwgXCJbcyE9JyddOnhcIiApO1xuXHRcdFx0cmJ1Z2d5TWF0Y2hlcy5wdXNoKCBcIiE9XCIsIHBzZXVkb3MgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKCBcInxcIiApICk7XG5cdHJidWdneU1hdGNoZXMgPSByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oIFwifFwiICkgKTtcblxuXHQvKiBDb250YWluc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cdGhhc0NvbXBhcmUgPSBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gKTtcblxuXHQvLyBFbGVtZW50IGNvbnRhaW5zIGFub3RoZXJcblx0Ly8gUHVycG9zZWZ1bGx5IHNlbGYtZXhjbHVzaXZlXG5cdC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmXG5cdGNvbnRhaW5zID0gaGFzQ29tcGFyZSB8fCBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29udGFpbnMgKSA/XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHR2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLFxuXHRcdFx0XHRidXAgPSBiICYmIGIucGFyZW50Tm9kZTtcblx0XHRcdHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRhZG93bi5jb250YWlucyA/XG5cdFx0XHRcdFx0YWRvd24uY29udGFpbnMoIGJ1cCApIDpcblx0XHRcdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTZcblx0XHRcdCkgKTtcblx0XHR9IDpcblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdGlmICggYiApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGIgPSBiLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdFx0XHRpZiAoIGIgPT09IGEgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdC8qIFNvcnRpbmdcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0c29ydE9yZGVyID0gaGFzQ29tcGFyZSA/XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRmxhZyBmb3IgZHVwbGljYXRlIHJlbW92YWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Ly8gU29ydCBvbiBtZXRob2QgZXhpc3RlbmNlIGlmIG9ubHkgb25lIGlucHV0IGhhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuXHRcdHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtcblx0XHRpZiAoIGNvbXBhcmUgKSB7XG5cdFx0XHRyZXR1cm4gY29tcGFyZTtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50XG5cdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRjb21wYXJlID0gKCBhLm93bmVyRG9jdW1lbnQgfHwgYSApID09ICggYi5vd25lckRvY3VtZW50IHx8IGIgKSA/XG5cdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWRcblx0XHRcdDE7XG5cblx0XHQvLyBEaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRpZiAoIGNvbXBhcmUgJiAxIHx8XG5cdFx0XHQoICFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUgKSApIHtcblxuXHRcdFx0Ly8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJlZmVycmVkIGRvY3VtZW50XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0aWYgKCBhID09IGRvY3VtZW50IHx8IGEub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiZcblx0XHRcdFx0Y29udGFpbnMoIHByZWZlcnJlZERvYywgYSApICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRpZiAoIGIgPT0gZG9jdW1lbnQgfHwgYi5vd25lckRvY3VtZW50ID09IHByZWZlcnJlZERvYyAmJlxuXHRcdFx0XHRjb250YWlucyggcHJlZmVycmVkRG9jLCBiICkgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlclxuXHRcdFx0cmV0dXJuIHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7XG5cdH0gOlxuXHRmdW5jdGlvbiggYSwgYiApIHtcblxuXHRcdC8vIEV4aXQgZWFybHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0YXVwID0gYS5wYXJlbnROb2RlLFxuXHRcdFx0YnVwID0gYi5wYXJlbnROb2RlLFxuXHRcdFx0YXAgPSBbIGEgXSxcblx0XHRcdGJwID0gWyBiIF07XG5cblx0XHQvLyBQYXJlbnRsZXNzIG5vZGVzIGFyZSBlaXRoZXIgZG9jdW1lbnRzIG9yIGRpc2Nvbm5lY3RlZFxuXHRcdGlmICggIWF1cCB8fCAhYnVwICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG5cdFx0XHRyZXR1cm4gYSA9PSBkb2N1bWVudCA/IC0xIDpcblx0XHRcdFx0YiA9PSBkb2N1bWVudCA/IDEgOlxuXHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIGVxZXFlcSAqL1xuXHRcdFx0XHRhdXAgPyAtMSA6XG5cdFx0XHRcdGJ1cCA/IDEgOlxuXHRcdFx0XHRzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cblx0XHQvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzLCB3ZSBjYW4gZG8gYSBxdWljayBjaGVja1xuXHRcdH0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkge1xuXHRcdFx0cmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSB3ZSBuZWVkIGZ1bGwgbGlzdHMgb2YgdGhlaXIgYW5jZXN0b3JzIGZvciBjb21wYXJpc29uXG5cdFx0Y3VyID0gYTtcblx0XHR3aGlsZSAoICggY3VyID0gY3VyLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdGFwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblx0XHRjdXIgPSBiO1xuXHRcdHdoaWxlICggKCBjdXIgPSBjdXIucGFyZW50Tm9kZSApICkge1xuXHRcdFx0YnAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3lcblx0XHR3aGlsZSAoIGFwWyBpIF0gPT09IGJwWyBpIF0gKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGkgP1xuXG5cdFx0XHQvLyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3Jcblx0XHRcdHNpYmxpbmdDaGVjayggYXBbIGkgXSwgYnBbIGkgXSApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIG5vZGVzIGluIG91ciBkb2N1bWVudCBzb3J0IGZpcnN0XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG5cdFx0XHRhcFsgaSBdID09IHByZWZlcnJlZERvYyA/IC0xIDpcblx0XHRcdGJwWyBpIF0gPT0gcHJlZmVycmVkRG9jID8gMSA6XG5cdFx0XHQvKiBlc2xpbnQtZW5hYmxlIGVxZXFlcSAqL1xuXHRcdFx0MDtcblx0fTtcblxuXHRyZXR1cm4gZG9jdW1lbnQ7XG59O1xuXG5TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHtcblx0cmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTtcbn07XG5cblNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHtcblx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblxuXHRpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJlxuXHRcdCggIXJidWdneVFTQSAgICAgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7XG5cblx0XHRcdC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRcdGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcblxuXHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHQvLyBmcmFnbWVudCBpbiBJRSA5XG5cdFx0XHRcdGVsZW0uZG9jdW1lbnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBleHByLCB0cnVlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFNpenpsZSggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDtcbn07XG5cblNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkge1xuXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHR9XG5cdHJldHVybiBjb250YWlucyggY29udGV4dCwgZWxlbSApO1xufTtcblxuU2l6emxlLmF0dHIgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblxuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sXG5cblx0XHQvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoalF1ZXJ5ICMxMzgwNylcblx0XHR2YWwgPSBmbiAmJiBoYXNPd24uY2FsbCggRXhwci5hdHRySGFuZGxlLCBuYW1lLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRmbiggZWxlbSwgbmFtZSwgIWRvY3VtZW50SXNIVE1MICkgOlxuXHRcdFx0dW5kZWZpbmVkO1xuXG5cdHJldHVybiB2YWwgIT09IHVuZGVmaW5lZCA/XG5cdFx0dmFsIDpcblx0XHRzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWRvY3VtZW50SXNIVE1MID9cblx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICkgOlxuXHRcdFx0KCB2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSApICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xufTtcblxuU2l6emxlLmVzY2FwZSA9IGZ1bmN0aW9uKCBzZWwgKSB7XG5cdHJldHVybiAoIHNlbCArIFwiXCIgKS5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG59O1xuXG5TaXp6bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkge1xuXHR0aHJvdyBuZXcgRXJyb3IoIFwiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogXCIgKyBtc2cgKTtcbn07XG5cbi8qKlxuICogRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlc1xuICogQHBhcmFtIHtBcnJheUxpa2V9IHJlc3VsdHNcbiAqL1xuU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHtcblx0dmFyIGVsZW0sXG5cdFx0ZHVwbGljYXRlcyA9IFtdLFxuXHRcdGogPSAwLFxuXHRcdGkgPSAwO1xuXG5cdC8vIFVubGVzcyB3ZSAqa25vdyogd2UgY2FuIGRldGVjdCBkdXBsaWNhdGVzLCBhc3N1bWUgdGhlaXIgcHJlc2VuY2Vcblx0aGFzRHVwbGljYXRlID0gIXN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcztcblx0c29ydElucHV0ID0gIXN1cHBvcnQuc29ydFN0YWJsZSAmJiByZXN1bHRzLnNsaWNlKCAwICk7XG5cdHJlc3VsdHMuc29ydCggc29ydE9yZGVyICk7XG5cblx0aWYgKCBoYXNEdXBsaWNhdGUgKSB7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSByZXN1bHRzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG4gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW1cbiAqL1xuZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBub2RlLFxuXHRcdHJldCA9IFwiXCIsXG5cdFx0aSA9IDAsXG5cdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdGlmICggIW5vZGVUeXBlICkge1xuXG5cdFx0Ly8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXlcblx0XHR3aGlsZSAoICggbm9kZSA9IGVsZW1bIGkrKyBdICkgKSB7XG5cblx0XHRcdC8vIERvIG5vdCB0cmF2ZXJzZSBjb21tZW50IG5vZGVzXG5cdFx0XHRyZXQgKz0gZ2V0VGV4dCggbm9kZSApO1xuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDkgfHwgbm9kZVR5cGUgPT09IDExICkge1xuXG5cdFx0Ly8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50c1xuXHRcdC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5jeSBvZiBuZXcgbGluZXMgKGpRdWVyeSAjMTExNTMpXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLnRleHRDb250ZW50O1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdHJldCArPSBnZXRUZXh0KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdH1cblxuXHQvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gbm9kZXNcblxuXHRyZXR1cm4gcmV0O1xufTtcblxuRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7XG5cblx0Ly8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyXG5cdGNhY2hlTGVuZ3RoOiA1MCxcblxuXHRjcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbixcblxuXHRtYXRjaDogbWF0Y2hFeHByLFxuXG5cdGF0dHJIYW5kbGU6IHt9LFxuXG5cdGZpbmQ6IHt9LFxuXG5cdHJlbGF0aXZlOiB7XG5cdFx0XCI+XCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIiBcIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiIH0sXG5cdFx0XCIrXCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiflwiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiB9XG5cdH0sXG5cblx0cHJlRmlsdGVyOiB7XG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdG1hdGNoWyAxIF0gPSBtYXRjaFsgMSBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXG5cdFx0XHRtYXRjaFsgMyBdID0gKCBtYXRjaFsgMyBdIHx8IG1hdGNoWyA0IF0gfHxcblx0XHRcdFx0bWF0Y2hbIDUgXSB8fCBcIlwiICkucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsgMiBdID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdG1hdGNoWyAzIF0gPSBcIiBcIiArIG1hdGNoWyAzIF0gKyBcIiBcIjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXG5cdFx0XHQvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByW1wiQ0hJTERcIl1cblx0XHRcdFx0MSB0eXBlIChvbmx5fG50aHwuLi4pXG5cdFx0XHRcdDIgd2hhdCAoY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0MyBhcmd1bWVudCAoZXZlbnxvZGR8XFxkKnxcXGQqbihbKy1dXFxkKyk/fC4uLilcblx0XHRcdFx0NCB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cXGQqbnwpXG5cdFx0XHRcdDUgc2lnbiBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NiB4IG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ3IHNpZ24gb2YgeS1jb21wb25lbnRcblx0XHRcdFx0OCB5IG9mIHktY29tcG9uZW50XG5cdFx0XHQqL1xuXHRcdFx0bWF0Y2hbIDEgXSA9IG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsgMSBdLnNsaWNlKCAwLCAzICkgPT09IFwibnRoXCIgKSB7XG5cblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcblx0XHRcdFx0aWYgKCAhbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWyAwIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRFxuXHRcdFx0XHQvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xXG5cdFx0XHRcdG1hdGNoWyA0IF0gPSArKCBtYXRjaFsgNCBdID9cblx0XHRcdFx0XHRtYXRjaFsgNSBdICsgKCBtYXRjaFsgNiBdIHx8IDEgKSA6XG5cdFx0XHRcdFx0MiAqICggbWF0Y2hbIDMgXSA9PT0gXCJldmVuXCIgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApICk7XG5cdFx0XHRcdG1hdGNoWyA1IF0gPSArKCAoIG1hdGNoWyA3IF0gKyBtYXRjaFsgOCBdICkgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHRcdC8vIG90aGVyIHR5cGVzIHByb2hpYml0IGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaDtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbIDYgXSAmJiBtYXRjaFsgMiBdO1xuXG5cdFx0XHRpZiAoIG1hdGNoRXhwclsgXCJDSElMRFwiIF0udGVzdCggbWF0Y2hbIDAgXSApICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWNjZXB0IHF1b3RlZCBhcmd1bWVudHMgYXMtaXNcblx0XHRcdGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0bWF0Y2hbIDIgXSA9IG1hdGNoWyA0IF0gfHwgbWF0Y2hbIDUgXSB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmXG5cblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KCBleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSApICYmXG5cblx0XHRcdFx0Ly8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzXG5cdFx0XHRcdCggZXhjZXNzID0gdW5xdW90ZWQuaW5kZXhPZiggXCIpXCIsIHVucXVvdGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoICkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbIDAgXSA9IG1hdGNoWyAwIF0uc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0XHRtYXRjaFsgMiBdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFwiVEFHXCI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xuXHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbm9kZU5hbWU7XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0xBU1NcIjogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHtcblx0XHRcdHZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgY2xhc3NOYW1lICsgXCIgXCIgXTtcblxuXHRcdFx0cmV0dXJuIHBhdHRlcm4gfHxcblx0XHRcdFx0KCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XHRcdFwiKVwiICsgY2xhc3NOYW1lICsgXCIoXCIgKyB3aGl0ZXNwYWNlICsgXCJ8JClcIiApICkgJiYgY2xhc3NDYWNoZShcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBwYXR0ZXJuLnRlc3QoXG5cdFx0XHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsZW0uY2xhc3NOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHxcblx0XHRcdFx0XHRcdFx0XHRcIlwiXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gKTtcblx0XHR9LFxuXG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cblx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIj1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiE9XCIgPyByZXN1bHQgIT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJePVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIio9XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIkPVwiID8gY2hlY2sgJiYgcmVzdWx0LnNsaWNlKCAtY2hlY2subGVuZ3RoICkgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ+PVwiID8gKCBcIiBcIiArIHJlc3VsdC5yZXBsYWNlKCByd2hpdGVzcGFjZSwgXCIgXCIgKSArIFwiIFwiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ8PVwiID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyBcIi1cIiA6XG5cdFx0XHRcdFx0ZmFsc2U7XG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuXG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCB0eXBlLCB3aGF0LCBfYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkge1xuXHRcdFx0dmFyIHNpbXBsZSA9IHR5cGUuc2xpY2UoIDAsIDMgKSAhPT0gXCJudGhcIixcblx0XHRcdFx0Zm9yd2FyZCA9IHR5cGUuc2xpY2UoIC00ICkgIT09IFwibGFzdFwiLFxuXHRcdFx0XHRvZlR5cGUgPSB3aGF0ID09PSBcIm9mLXR5cGVcIjtcblxuXHRcdFx0cmV0dXJuIGZpcnN0ID09PSAxICYmIGxhc3QgPT09IDAgP1xuXG5cdFx0XHRcdC8vIFNob3J0Y3V0IGZvciA6bnRoLSoobilcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEhZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0XHR9IDpcblxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgY2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gbm9kZVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gUmV2ZXJzZSBkaXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnQgPSBkaXIgPSB0eXBlID09PSBcIm9ubHlcIiAmJiAhc3RhcnQgJiYgXCJuZXh0U2libGluZ1wiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRzdGFydCA9IFsgZm9yd2FyZCA/IHBhcmVudC5maXJzdENoaWxkIDogcGFyZW50Lmxhc3RDaGlsZCBdO1xuXG5cdFx0XHRcdFx0XHQvLyBub24teG1sIDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2FjaGUgZGF0YSBvbiBgcGFyZW50YFxuXHRcdFx0XHRcdFx0aWYgKCBmb3J3YXJkICYmIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91c2x5LWNhY2hlZCBpbmRleFxuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0bm9kZSA9IHBhcmVudDtcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAoIG5vZGVbIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXggJiYgY2FjaGVbIDIgXTtcblx0XHRcdFx0XHRcdFx0bm9kZSA9IG5vZGVJbmRleCAmJiBwYXJlbnQuY2hpbGROb2Rlc1sgbm9kZUluZGV4IF07XG5cblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdCggZGlmZiA9IG5vZGVJbmRleCA9IDAgKSB8fCBzdGFydC5wb3AoKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFVzZSBwcmV2aW91c2x5LWNhY2hlZCBlbGVtZW50IGluZGV4IGlmIGF2YWlsYWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHRjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXg7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyB4bWwgOm50aC1jaGlsZCguLi4pXG5cdFx0XHRcdFx0XHRcdC8vIG9yIDpudGgtbGFzdC1jaGlsZCguLi4pIG9yIDpudGgoLWxhc3QpPy1vZi10eXBlKC4uLilcblx0XHRcdFx0XHRcdFx0aWYgKCBkaWZmID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFVzZSB0aGUgc2FtZSBsb29wIGFzIGFib3ZlIHRvIHNlZWsgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQoIGRpZmYgPSBub2RlSW5kZXggPSAwICkgfHwgc3RhcnQucG9wKCkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQrK2RpZmYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FjaGUgdGhlIGluZGV4IG9mIGVhY2ggZW5jb3VudGVyZWQgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggbm9kZVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkge1xuXG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XG5cblx0XHRcdC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXRcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXG5cdFx0XHQvLyBqdXN0IGFzIFNpenpsZSBkb2VzXG5cdFx0XHRpZiAoIGZuWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXG5cdFx0XHRpZiAoIGZuLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHRcdGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCBcIlwiLCBhcmd1bWVudCBdO1xuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cblx0XHRcdFx0XHRtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0XHRcdFx0dmFyIGlkeCxcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLFxuXHRcdFx0XHRcdFx0XHRpID0gbWF0Y2hlZC5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWR4ID0gaW5kZXhPZiggc2VlZCwgbWF0Y2hlZFsgaSBdICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkWyBpIF0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cblx0XHQvLyBQb3RlbnRpYWxseSBjb21wbGV4IHBzZXVkb3Ncblx0XHRcIm5vdFwiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblxuXHRcdFx0Ly8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGVcblx0XHRcdC8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG5cdFx0XHQvLyBzcGFjZXMgYXMgY29tYmluYXRvcnNcblx0XHRcdHZhciBpbnB1dCA9IFtdLFxuXHRcdFx0XHRyZXN1bHRzID0gW10sXG5cdFx0XHRcdG1hdGNoZXIgPSBjb21waWxlKCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICkgKTtcblxuXHRcdFx0cmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/XG5cdFx0XHRcdG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksXG5cdFx0XHRcdFx0XHRpID0gc2VlZC5sZW5ndGg7XG5cblx0XHRcdFx0XHQvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IHVubWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGkgXSA9ICEoIG1hdGNoZXNbIGkgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdGlucHV0WyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTtcblxuXHRcdFx0XHRcdC8vIERvbid0IGtlZXAgdGhlIGVsZW1lbnQgKGlzc3VlICMyOTkpXG5cdFx0XHRcdFx0aW5wdXRbIDAgXSA9IG51bGw7XG5cdFx0XHRcdFx0cmV0dXJuICFyZXN1bHRzLnBvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdFwiaGFzXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdFwiY29udGFpbnNcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0udGV4dENvbnRlbnQgfHwgZ2V0VGV4dCggZWxlbSApICkuaW5kZXhPZiggdGV4dCApID4gLTE7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxuXHRcdC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxuXHRcdC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0XCJsYW5nXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7XG5cblx0XHRcdC8vIGxhbmcgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXJcblx0XHRcdGlmICggIXJpZGVudGlmaWVyLnRlc3QoIGxhbmcgfHwgXCJcIiApICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XG5cdFx0XHR9XG5cdFx0XHRsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBlbGVtTGFuZztcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtTGFuZyA9IGRvY3VtZW50SXNIVE1MID9cblx0XHRcdFx0XHRcdGVsZW0ubGFuZyA6XG5cdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJ4bWw6bGFuZ1wiICkgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoIFwibGFuZ1wiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0ZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5nLmluZGV4T2YoIGxhbmcgKyBcIi1cIiApID09PSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoICggZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSApICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHQvLyBNaXNjZWxsYW5lb3VzXG5cdFx0XCJ0YXJnZXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHRcdHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDtcblx0XHR9LFxuXG5cdFx0XCJyb290XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY0VsZW07XG5cdFx0fSxcblxuXHRcdFwiZm9jdXNcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJlxuXHRcdFx0XHQoICFkb2N1bWVudC5oYXNGb2N1cyB8fCBkb2N1bWVudC5oYXNGb2N1cygpICkgJiZcblx0XHRcdFx0ISEoIGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXggKTtcblx0XHR9LFxuXG5cdFx0Ly8gQm9vbGVhbiBwcm9wZXJ0aWVzXG5cdFx0XCJlbmFibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCBmYWxzZSApLFxuXHRcdFwiZGlzYWJsZWRcIjogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIHRydWUgKSxcblxuXHRcdFwiY2hlY2tlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0dmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiAhIWVsZW0uY2hlY2tlZCApIHx8XG5cdFx0XHRcdCggbm9kZU5hbWUgPT09IFwib3B0aW9uXCIgJiYgISFlbGVtLnNlbGVjdGVkICk7XG5cdFx0fSxcblxuXHRcdFwic2VsZWN0ZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHRcblx0XHRcdC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHlcblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gQ29udGVudHNcblx0XHRcImVtcHR5XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkb1xuXHRcdFx0Ly8gOmVtcHR5IGlzIG5lZ2F0ZWQgYnkgZWxlbWVudCAoMSkgb3IgY29udGVudCBub2RlcyAodGV4dDogMzsgY2RhdGE6IDQ7IGVudGl0eSByZWY6IDUpLFxuXHRcdFx0Ly8gICBidXQgbm90IGJ5IG90aGVycyAoY29tbWVudDogODsgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbjogNzsgZXRjLilcblx0XHRcdC8vIG5vZGVUeXBlIDwgNiB3b3JrcyBiZWNhdXNlIGF0dHJpYnV0ZXMgKDIpIGRvIG5vdCBhcHBlYXIgYXMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPCA2ICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdFwicGFyZW50XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICFFeHByLnBzZXVkb3NbIFwiZW1wdHlcIiBdKCBlbGVtICk7XG5cdFx0fSxcblxuXHRcdC8vIEVsZW1lbnQvaW5wdXQgdHlwZXNcblx0XHRcImhlYWRlclwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJpbnB1dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJidXR0b25cIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSBcImJ1dHRvblwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCI7XG5cdFx0fSxcblxuXHRcdFwidGV4dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBhdHRyO1xuXHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICYmXG5cdFx0XHRcdGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCIgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTw4XG5cdFx0XHRcdC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCBcInNlYXJjaFwiKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUgPT09IFwidGV4dFwiXG5cdFx0XHRcdCggKCBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgKSA9PSBudWxsIHx8XG5cdFx0XHRcdFx0YXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiApO1xuXHRcdH0sXG5cblx0XHQvLyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uXG5cdFx0XCJmaXJzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBbIDAgXTtcblx0XHR9ICksXG5cblx0XHRcImxhc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIF9tYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHJldHVybiBbIGxlbmd0aCAtIDEgXTtcblx0XHR9ICksXG5cblx0XHRcImVxXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBfbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0cmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdO1xuXHRcdH0gKSxcblxuXHRcdFwiZXZlblwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApLFxuXG5cdFx0XCJvZGRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdFwibHRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID9cblx0XHRcdFx0YXJndW1lbnQgKyBsZW5ndGggOlxuXHRcdFx0XHRhcmd1bWVudCA+IGxlbmd0aCA/XG5cdFx0XHRcdFx0bGVuZ3RoIDpcblx0XHRcdFx0XHRhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgLS1pID49IDA7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRcImd0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7ICsraSA8IGxlbmd0aDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKVxuXHR9XG59O1xuXG5FeHByLnBzZXVkb3NbIFwibnRoXCIgXSA9IEV4cHIucHNldWRvc1sgXCJlcVwiIF07XG5cbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXG5mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xufVxuZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcbn1cblxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cbnNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zO1xuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcblxudG9rZW5pemUgPSBTaXp6bGUudG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8ICggbWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSApICkge1xuXHRcdFx0aWYgKCBtYXRjaCApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZFxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFsgMCBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICggdG9rZW5zID0gW10gKSApO1xuXHRcdH1cblxuXHRcdG1hdGNoZWQgPSBmYWxzZTtcblxuXHRcdC8vIENvbWJpbmF0b3JzXG5cdFx0aWYgKCAoIG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkgKSApIHtcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXG5cdFx0XHRcdHR5cGU6IG1hdGNoWyAwIF0ucmVwbGFjZSggcnRyaW0sIFwiIFwiIClcblx0XHRcdH0gKTtcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmlsdGVyc1xuXHRcdGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7XG5cdFx0XHRpZiAoICggbWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApICkgJiYgKCAhcHJlRmlsdGVyc1sgdHlwZSBdIHx8XG5cdFx0XHRcdCggbWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkgKSApICkge1xuXHRcdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRcdG1hdGNoZXM6IG1hdGNoXG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0cmV0dXJuIHBhcnNlT25seSA/XG5cdFx0c29GYXIubGVuZ3RoIDpcblx0XHRzb0ZhciA/XG5cdFx0XHRTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHQvLyBDYWNoZSB0aGUgdG9rZW5zXG5cdFx0XHR0b2tlbkNhY2hlKCBzZWxlY3RvciwgZ3JvdXBzICkuc2xpY2UoIDAgKTtcbn07XG5cbmZ1bmN0aW9uIHRvU2VsZWN0b3IoIHRva2VucyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0c2VsZWN0b3IgPSBcIlwiO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRzZWxlY3RvciArPSB0b2tlbnNbIGkgXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7XG5cdHZhciBkaXIgPSBjb21iaW5hdG9yLmRpcixcblx0XHRza2lwID0gY29tYmluYXRvci5uZXh0LFxuXHRcdGtleSA9IHNraXAgfHwgZGlyLFxuXHRcdGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGtleSA9PT0gXCJwYXJlbnROb2RlXCIsXG5cdFx0ZG9uZU5hbWUgPSBkb25lKys7XG5cblx0cmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgP1xuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSA6XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHNcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIG9sZENhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSxcblx0XHRcdFx0bmV3Q2FjaGUgPSBbIGRpcnJ1bnMsIGRvbmVOYW1lIF07XG5cblx0XHRcdC8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGNvbWJpbmF0b3IgY2FjaGluZ1xuXHRcdFx0aWYgKCB4bWwgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoIGVsZW1bIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHNraXAgJiYgc2tpcCA9PT0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRlbGVtID0gZWxlbVsgZGlyIF0gfHwgZWxlbTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoICggb2xkQ2FjaGUgPSB1bmlxdWVDYWNoZVsga2V5IF0gKSAmJlxuXHRcdFx0XHRcdFx0XHRvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHJldHVybiAoIG5ld0NhY2hlWyAyIF0gPSBvbGRDYWNoZVsgMiBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFJldXNlIG5ld2NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIGtleSBdID0gbmV3Q2FjaGU7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nXG5cdFx0XHRcdFx0XHRcdGlmICggKCBuZXdDYWNoZVsgMiBdID0gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1sgaSBdKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gOlxuXHRcdG1hdGNoZXJzWyAwIF07XG59XG5cbmZ1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0U2l6emxlKCBzZWxlY3RvciwgY29udGV4dHNbIGkgXSwgcmVzdWx0cyApO1xuXHR9XG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xuXHR2YXIgZWxlbSxcblx0XHRuZXdVbm1hdGNoZWQgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLFxuXHRcdG1hcHBlZCA9IG1hcCAhPSBudWxsO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKCBlbGVtID0gdW5tYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRuZXdVbm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRpZiAoIG1hcHBlZCApIHtcblx0XHRcdFx0XHRtYXAucHVzaCggaSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG5ld1VubWF0Y2hlZDtcbn1cblxuZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkge1xuXHRpZiAoIHBvc3RGaWx0ZXIgJiYgIXBvc3RGaWx0ZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApO1xuXHR9XG5cdGlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTtcblx0fVxuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgcmVzdWx0cywgY29udGV4dCwgeG1sICkge1xuXHRcdHZhciB0ZW1wLCBpLCBlbGVtLFxuXHRcdFx0cHJlTWFwID0gW10sXG5cdFx0XHRwb3N0TWFwID0gW10sXG5cdFx0XHRwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dFxuXHRcdFx0ZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29udGV4dHMoXG5cdFx0XHRcdHNlbGVjdG9yIHx8IFwiKlwiLFxuXHRcdFx0XHRjb250ZXh0Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LFxuXHRcdFx0XHRbXVxuXHRcdFx0KSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcyxcblxuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXIgP1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2VlZCBwb3N0RmlsdGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsXG5cdFx0XHRcdHBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlciApID9cblxuXHRcdFx0XHRcdC8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFtdIDpcblxuXHRcdFx0XHRcdC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseVxuXHRcdFx0XHRcdHJlc3VsdHMgOlxuXHRcdFx0XHRtYXRjaGVySW47XG5cblx0XHQvLyBGaW5kIHByaW1hcnkgbWF0Y2hlc1xuXHRcdGlmICggbWF0Y2hlciApIHtcblx0XHRcdG1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcG9zdEZpbHRlclxuXHRcdGlmICggcG9zdEZpbHRlciApIHtcblx0XHRcdHRlbXAgPSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApO1xuXHRcdFx0cG9zdEZpbHRlciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApO1xuXG5cdFx0XHQvLyBVbi1tYXRjaCBmYWlsaW5nIGVsZW1lbnRzIGJ5IG1vdmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluXG5cdFx0XHRpID0gdGVtcC5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAoIGVsZW0gPSB0ZW1wWyBpIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwWyBpIF0gXSA9ICEoIG1hdGNoZXJJblsgcG9zdE1hcFsgaSBdIF0gPSBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cblx0XHRcdFx0XHQvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHNcblx0XHRcdFx0XHR0ZW1wID0gW107XG5cdFx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBtYXRjaGVyT3V0WyBpIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXN0b3JlIG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlzIG5vdCB5ZXQgYSBmaW5hbCBtYXRjaFxuXHRcdFx0XHRcdFx0XHR0ZW1wLnB1c2goICggbWF0Y2hlckluWyBpIF0gPSBlbGVtICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKCBtYXRjaGVyT3V0ID0gW10gKSwgdGVtcCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZFxuXHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtID0gbWF0Y2hlck91dFsgaSBdICkgJiZcblx0XHRcdFx0XHRcdCggdGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbIGkgXSApID4gLTEgKSB7XG5cblx0XHRcdFx0XHRcdHNlZWRbIHRlbXAgXSA9ICEoIHJlc3VsdHNbIHRlbXAgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyT3V0ID0gY29uZGVuc2UoXG5cdFx0XHRcdG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgP1xuXHRcdFx0XHRcdG1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6XG5cdFx0XHRcdFx0bWF0Y2hlck91dFxuXHRcdFx0KTtcblx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91dCwgeG1sICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMgKSB7XG5cdHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRsZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIDAgXS50eXBlIF0sXG5cdFx0aW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyBcIiBcIiBdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoIGNoZWNrQ29udGV4dCA9IGNvbnRleHQgKS5ub2RlVHlwZSA/XG5cdFx0XHRcdFx0bWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdFx0bWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApO1xuXG5cdFx0XHQvLyBBdm9pZCBoYW5naW5nIG9udG8gZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdGNoZWNrQ29udGV4dCA9IG51bGw7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0gXTtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoICggbWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaSBdLnR5cGUgXSApICkge1xuXHRcdFx0bWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyICkgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbIGkgXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1sgaSBdLm1hdGNoZXMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNoZXJcblx0XHRcdGlmICggbWF0Y2hlclsgZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZ1xuXHRcdFx0XHRqID0gKytpO1xuXHRcdFx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaiBdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXG5cdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcblx0XHRcdFx0XHR0b2tlbnNcblx0XHRcdFx0XHRcdC5zbGljZSggMCwgaSAtIDEgKVxuXHRcdFx0XHRcdFx0LmNvbmNhdCggeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0gKVxuXHRcdFx0XHRcdCkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLFxuXHRcdFx0XHRcdG1hdGNoZXIsXG5cdFx0XHRcdFx0aSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKCB0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cblx0XHRcdFx0Ly8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBvdXRlcm1vc3QgY29udGV4dFxuXHRcdFx0XHRlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZFsgXCJUQUdcIiBdKCBcIipcIiwgb3V0ZXJtb3N0ICksXG5cblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9ICggZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEgKSxcblx0XHRcdFx0bGVuID0gZWxlbXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCA9PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1lbnRzIGJ5IGlkXG5cdFx0XHRmb3IgKCA7IGkgIT09IGxlbiAmJiAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGJ5RWxlbWVudCAmJiBlbGVtICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdFx0XHRpZiAoICFjb250ZXh0ICYmIGVsZW0ub3duZXJEb2N1bWVudCAhPSBkb2N1bWVudCApIHtcblx0XHRcdFx0XHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdFx0XHRcdFx0XHR4bWwgPSAhZG9jdW1lbnRJc0hUTUw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0IHx8IGRvY3VtZW50LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcblx0XHRcdFx0aWYgKCBieVNldCApIHtcblxuXHRcdFx0XHRcdC8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnNcblx0XHRcdFx0XHRpZiAoICggZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0gKSApIHtcblx0XHRcdFx0XHRcdG1hdGNoZWRDb3VudC0tO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIExlbmd0aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVudCwgbWF0Y2hlZCBvciBub3Rcblx0XHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBgaWAgaXMgbm93IHRoZSBjb3VudCBvZiBlbGVtZW50cyB2aXNpdGVkIGFib3ZlLCBhbmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBtYWtlcyB0aGUgbGF0dGVyIG5vbm5lZ2F0aXZlLlxuXHRcdFx0bWF0Y2hlZENvdW50ICs9IGk7XG5cblx0XHRcdC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50c1xuXHRcdFx0Ly8gTk9URTogVGhpcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVyZSBhcmUgbm8gdW5tYXRjaGVkIGVsZW1lbnRzIChpLmUuLCBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gZXF1YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRuJ3QgdmlzaXQgX2FueV8gZWxlbWVudHMgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZlXG5cdFx0XHQvLyBubyBlbGVtZW50IG1hdGNoZXJzIGFuZCBubyBzZWVkLlxuXHRcdFx0Ly8gSW5jcmVtZW50aW5nIGFuIGluaXRpYWxseS1zdHJpbmcgXCIwXCIgYGlgIGFsbG93cyBgaWAgdG8gcmVtYWluIGEgc3RyaW5nIG9ubHkgaW4gdGhhdFxuXHRcdFx0Ly8gY2FzZSwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBcIjAwXCIgYG1hdGNoZWRDb3VudGAgdGhhdCBkaWZmZXJzIGZyb20gYGlgIGJ1dCBpcyBhbHNvXG5cdFx0XHQvLyBudW1lcmljYWxseSB6ZXJvLlxuXHRcdFx0aWYgKCBieVNldCAmJiBpICE9PSBtYXRjaGVkQ291bnQgKSB7XG5cdFx0XHRcdGogPSAwO1xuXHRcdFx0XHR3aGlsZSAoICggbWF0Y2hlciA9IHNldE1hdGNoZXJzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nXG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkQ291bnQgPiAwICkge1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggISggdW5tYXRjaGVkWyBpIF0gfHwgc2V0TWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0TWF0Y2hlZFsgaSBdID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTtcblxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcblx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7XG5cblx0XHRcdFx0XHRTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVyc1xuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVubWF0Y2hlZDtcblx0XHR9O1xuXG5cdHJldHVybiBieVNldCA/XG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XG5cdFx0c3VwZXJNYXRjaGVyO1xufVxuXG5jb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cblx0XHQvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnRcblx0XHRpZiAoICFtYXRjaCApIHtcblx0XHRcdG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0fVxuXHRcdGkgPSBtYXRjaC5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRjYWNoZWQgPSBtYXRjaGVyRnJvbVRva2VucyggbWF0Y2hbIGkgXSApO1xuXHRcdFx0aWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0c2V0TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZShcblx0XHRcdHNlbGVjdG9yLFxuXHRcdFx0bWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzIClcblx0XHQpO1xuXG5cdFx0Ly8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uXG5cdFx0Y2FjaGVkLnNlbGVjdG9yID0gc2VsZWN0b3I7XG5cdH1cblx0cmV0dXJuIGNhY2hlZDtcbn07XG5cbi8qKlxuICogQSBsb3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBTaXp6bGUncyBjb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbiBidWlsdCB3aXRoIFNpenpsZS5jb21waWxlXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHRcbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXVxuICogQHBhcmFtIHtBcnJheX0gW3NlZWRdIEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3RcbiAqL1xuc2VsZWN0ID0gU2l6emxlLnNlbGVjdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIGksIHRva2VucywgdG9rZW4sIHR5cGUsIGZpbmQsXG5cdFx0Y29tcGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBzZWxlY3Rvcixcblx0XHRtYXRjaCA9ICFzZWVkICYmIHRva2VuaXplKCAoIHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IgKSApO1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkXG5cdC8vICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJhbnRlZXMgdXMgY29udGV4dClcblx0aWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7XG5cblx0XHQvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBpcyBhbiBJRFxuXHRcdHRva2VucyA9IG1hdGNoWyAwIF0gPSBtYXRjaFsgMCBdLnNsaWNlKCAwICk7XG5cdFx0aWYgKCB0b2tlbnMubGVuZ3RoID4gMiAmJiAoIHRva2VuID0gdG9rZW5zWyAwIF0gKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJc0hUTUwgJiYgRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyAxIF0udHlwZSBdICkge1xuXG5cdFx0XHRjb250ZXh0ID0gKCBFeHByLmZpbmRbIFwiSURcIiBdKCB0b2tlbi5tYXRjaGVzWyAwIF1cblx0XHRcdFx0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksIGNvbnRleHQgKSB8fCBbXSApWyAwIF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByWyBcIm5lZWRzQ29udGV4dFwiIF0udGVzdCggc2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG9rZW4gPSB0b2tlbnNbIGkgXTtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvclxuXHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyAoIHR5cGUgPSB0b2tlbi50eXBlICkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICggZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdICkgKSB7XG5cblx0XHRcdFx0Ly8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzXG5cdFx0XHRcdGlmICggKCBzZWVkID0gZmluZChcblx0XHRcdFx0XHR0b2tlbi5tYXRjaGVzWyAwIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0XHRyc2libGluZy50ZXN0KCB0b2tlbnNbIDAgXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8XG5cdFx0XHRcdFx0XHRjb250ZXh0XG5cdFx0XHRcdCkgKSApIHtcblxuXHRcdFx0XHRcdC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBlYXJseVxuXHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoIGksIDEgKTtcblx0XHRcdFx0XHRzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyApO1xuXHRcdFx0XHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2VlZCApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDb21waWxlIGFuZCBleGVjdXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uIGlmIG9uZSBpcyBub3QgcHJvdmlkZWRcblx0Ly8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZVxuXHQoIGNvbXBpbGVkIHx8IGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCApICkoXG5cdFx0c2VlZCxcblx0XHRjb250ZXh0LFxuXHRcdCFkb2N1bWVudElzSFRNTCxcblx0XHRyZXN1bHRzLFxuXHRcdCFjb250ZXh0IHx8IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0KTtcblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vLyBPbmUtdGltZSBhc3NpZ25tZW50c1xuXG4vLyBTb3J0IHN0YWJpbGl0eVxuc3VwcG9ydC5zb3J0U3RhYmxlID0gZXhwYW5kby5zcGxpdCggXCJcIiApLnNvcnQoIHNvcnRPcmRlciApLmpvaW4oIFwiXCIgKSA9PT0gZXhwYW5kbztcblxuLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1K1xuLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvblxuc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7XG5cbi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudFxuc2V0RG9jdW1lbnQoKTtcblxuLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNylcbi8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKlxuc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHQvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZylcblx0cmV0dXJuIGVsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImZpZWxkc2V0XCIgKSApICYgMTtcbn0gKTtcblxuLy8gU3VwcG9ydDogSUU8OFxuLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgXCJpbnRlcnBvbGF0aW9uXCJcbi8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4XG5pZiAoICFhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScjJz48L2E+XCI7XG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSggXCJocmVmXCIgKSA9PT0gXCIjXCI7XG59ICkgKSB7XG5cdGFkZEhhbmRsZSggXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInR5cGVcIiA/IDEgOiAyICk7XG5cdFx0fVxuXHR9ICk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBkZWZhdWx0VmFsdWUgaW4gcGxhY2Ugb2YgZ2V0QXR0cmlidXRlKFwidmFsdWVcIilcbmlmICggIXN1cHBvcnQuYXR0cmlidXRlcyB8fCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdGVsLmlubmVySFRNTCA9IFwiPGlucHV0Lz5cIjtcblx0ZWwuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiwgXCJcIiApO1xuXHRyZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBcIlwiO1xufSApICkge1xuXHRhZGRIYW5kbGUoIFwidmFsdWVcIiwgZnVuY3Rpb24oIGVsZW0sIF9uYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLmRlZmF1bHRWYWx1ZTtcblx0XHR9XG5cdH0gKTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGdldEF0dHJpYnV0ZU5vZGUgdG8gZmV0Y2ggYm9vbGVhbnMgd2hlbiBnZXRBdHRyaWJ1dGUgbGllc1xuaWYgKCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoIFwiZGlzYWJsZWRcIiApID09IG51bGw7XG59ICkgKSB7XG5cdGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgdmFsO1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6XG5cdFx0XHRcdCggdmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkgKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRcdG51bGw7XG5cdFx0fVxuXHR9ICk7XG59XG5cbnJldHVybiBTaXp6bGU7XG5cbn0gKSggd2luZG93ICk7XG5cblxuXG5qUXVlcnkuZmluZCA9IFNpenpsZTtcbmpRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9ycztcblxuLy8gRGVwcmVjYXRlZFxualF1ZXJ5LmV4cHJbIFwiOlwiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zO1xualF1ZXJ5LnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7XG5qUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0O1xualF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MO1xualF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zO1xualF1ZXJ5LmVzY2FwZVNlbGVjdG9yID0gU2l6emxlLmVzY2FwZTtcblxuXG5cblxudmFyIGRpciA9IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdLFxuXHRcdHRydW5jYXRlID0gdW50aWwgIT09IHVuZGVmaW5lZDtcblxuXHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgJiYgZWxlbS5ub2RlVHlwZSAhPT0gOSApIHtcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRpZiAoIHRydW5jYXRlICYmIGpRdWVyeSggZWxlbSApLmlzKCB1bnRpbCApICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdG1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHNpYmxpbmdzID0gZnVuY3Rpb24oIG4sIGVsZW0gKSB7XG5cdHZhciBtYXRjaGVkID0gW107XG5cblx0Zm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHtcblx0XHRpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHtcblx0XHRcdG1hdGNoZWQucHVzaCggbiApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtcblxuXG5cbmZ1bmN0aW9uIG5vZGVOYW1lKCBlbGVtLCBuYW1lICkge1xuXG4gIHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG59O1xudmFyIHJzaW5nbGVUYWcgPSAoIC9ePChbYS16XVteXFwvXFwwPjpcXHgyMFxcdFxcclxcblxcZl0qKVtcXHgyMFxcdFxcclxcblxcZl0qXFwvPz4oPzo8XFwvXFwxPnwpJC9pICk7XG5cblxuXG4vLyBJbXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5vdFxuZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBub3QgKSB7XG5cdGlmICggaXNGdW5jdGlvbiggcXVhbGlmaWVyICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gU2luZ2xlIGVsZW1lbnRcblx0aWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEFycmF5bGlrZSBvZiBlbGVtZW50cyAoalF1ZXJ5LCBhcmd1bWVudHMsIEFycmF5KVxuXHRpZiAoIHR5cGVvZiBxdWFsaWZpZXIgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBpbmRleE9mLmNhbGwoIHF1YWxpZmllciwgZWxlbSApID4gLTEgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEZpbHRlcmVkIGRpcmVjdGx5IGZvciBib3RoIHNpbXBsZSBhbmQgY29tcGxleCBzZWxlY3RvcnNcblx0cmV0dXJuIGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVudHMsIG5vdCApO1xufVxuXG5qUXVlcnkuZmlsdGVyID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7XG5cdHZhciBlbGVtID0gZWxlbXNbIDAgXTtcblxuXHRpZiAoIG5vdCApIHtcblx0XHRleHByID0gXCI6bm90KFwiICsgZXhwciArIFwiKVwiO1xuXHR9XG5cblx0aWYgKCBlbGVtcy5sZW5ndGggPT09IDEgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBleHByICkgPyBbIGVsZW0gXSA6IFtdO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXMoIGV4cHIsIGpRdWVyeS5ncmVwKCBlbGVtcywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7XG5cdH0gKSApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGksIHJldCxcblx0XHRcdGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0c2VsZiA9IHRoaXM7XG5cblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICkgKTtcblx0XHR9XG5cblx0XHRyZXQgPSB0aGlzLnB1c2hTdGFjayggW10gKTtcblxuXHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRqUXVlcnkuZmluZCggc2VsZWN0b3IsIHNlbGZbIGkgXSwgcmV0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxlbiA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggcmV0ICkgOiByZXQ7XG5cdH0sXG5cdGZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgZmFsc2UgKSApO1xuXHR9LFxuXHRub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIHRydWUgKSApO1xuXHR9LFxuXHRpczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiAhIXdpbm5vdyhcblx0XHRcdHRoaXMsXG5cblx0XHRcdC8vIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1cm5lZCBzZXRcblx0XHRcdC8vIHNvICQoXCJwOmZpcnN0XCIpLmlzKFwicDpsYXN0XCIpIHdvbid0IHJldHVybiB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byBcInBcIi5cblx0XHRcdHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiAmJiBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkgP1xuXHRcdFx0XHRqUXVlcnkoIHNlbGVjdG9yICkgOlxuXHRcdFx0XHRzZWxlY3RvciB8fCBbXSxcblx0XHRcdGZhbHNlXG5cdFx0KS5sZW5ndGg7XG5cdH1cbn0gKTtcblxuXG4vLyBJbml0aWFsaXplIGEgalF1ZXJ5IG9iamVjdFxuXG5cbi8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3VtZW50KVxudmFyIHJvb3RqUXVlcnksXG5cblx0Ly8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3Ncblx0Ly8gUHJpb3JpdGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKCM5NTIxKVxuXHQvLyBTdHJpY3QgSFRNTCByZWNvZ25pdGlvbiAoIzExMjkwOiBtdXN0IHN0YXJ0IHdpdGggPClcblx0Ly8gU2hvcnRjdXQgc2ltcGxlICNpZCBjYXNlIGZvciBzcGVlZFxuXHRycXVpY2tFeHByID0gL14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKykpJC8sXG5cblx0aW5pdCA9IGpRdWVyeS5mbi5pbml0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290ICkge1xuXHRcdHZhciBtYXRjaCwgZWxlbTtcblxuXHRcdC8vIEhBTkRMRTogJChcIlwiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKVxuXHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gTWV0aG9kIGluaXQoKSBhY2NlcHRzIGFuIGFsdGVybmF0ZSByb290alF1ZXJ5XG5cdFx0Ly8gc28gbWlncmF0ZSBjYW4gc3VwcG9ydCBqUXVlcnkuc3ViIChnaC0yMTAxKVxuXHRcdHJvb3QgPSByb290IHx8IHJvb3RqUXVlcnk7XG5cblx0XHQvLyBIYW5kbGUgSFRNTCBzdHJpbmdzXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRpZiAoIHNlbGVjdG9yWyAwIF0gPT09IFwiPFwiICYmXG5cdFx0XHRcdHNlbGVjdG9yWyBzZWxlY3Rvci5sZW5ndGggLSAxIF0gPT09IFwiPlwiICYmXG5cdFx0XHRcdHNlbGVjdG9yLmxlbmd0aCA+PSAzICkge1xuXG5cdFx0XHRcdC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrXG5cdFx0XHRcdG1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVsbCBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZFxuXHRcdFx0aWYgKCBtYXRjaCAmJiAoIG1hdGNoWyAxIF0gfHwgIWNvbnRleHQgKSApIHtcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSlcblx0XHRcdFx0aWYgKCBtYXRjaFsgMSBdICkge1xuXHRcdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFsgMCBdIDogY29udGV4dDtcblxuXHRcdFx0XHRcdC8vIE9wdGlvbiB0byBydW4gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRcdC8vIEludGVudGlvbmFsbHkgbGV0IHRoZSBlcnJvciBiZSB0aHJvd24gaWYgcGFyc2VIVE1MIGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLCBqUXVlcnkucGFyc2VIVE1MKFxuXHRcdFx0XHRcdFx0bWF0Y2hbIDEgXSxcblx0XHRcdFx0XHRcdGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KSApO1xuXG5cdFx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwsIHByb3BzKVxuXHRcdFx0XHRcdGlmICggcnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsgMSBdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQgKSApIHtcblx0XHRcdFx0XHRcdGZvciAoIG1hdGNoIGluIGNvbnRleHQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUHJvcGVydGllcyBvZiBjb250ZXh0IGFyZSBjYWxsZWQgYXMgbWV0aG9kcyBpZiBwb3NzaWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoaXNbIG1hdGNoIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIG90aGVyd2lzZSBzZXQgYXMgYXR0cmlidXRlc1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYXR0ciggbWF0Y2gsIGNvbnRleHRbIG1hdGNoIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJCgjaWQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsgMiBdICk7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIEluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0XG5cdFx0XHRcdFx0XHR0aGlzWyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKVxuXHRcdFx0fSBlbHNlIGlmICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGNvbnRleHQgfHwgcm9vdCApLmZpbmQoIHNlbGVjdG9yICk7XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KVxuXHRcdFx0Ly8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHQvLyBIQU5ETEU6ICQoRE9NRWxlbWVudClcblx0XHR9IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHtcblx0XHRcdHRoaXNbIDAgXSA9IHNlbGVjdG9yO1xuXHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHQvLyBIQU5ETEU6ICQoZnVuY3Rpb24pXG5cdFx0Ly8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5XG5cdFx0fSBlbHNlIGlmICggaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHtcblx0XHRcdHJldHVybiByb290LnJlYWR5ICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRyb290LnJlYWR5KCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdHNlbGVjdG9yKCBqUXVlcnkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTtcblx0fTtcblxuLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvblxuaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47XG5cbi8vIEluaXRpYWxpemUgY2VudHJhbCByZWZlcmVuY2VcbnJvb3RqUXVlcnkgPSBqUXVlcnkoIGRvY3VtZW50ICk7XG5cblxudmFyIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFxuXG5cdC8vIE1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0XG5cdGd1YXJhbnRlZWRVbmlxdWUgPSB7XG5cdFx0Y2hpbGRyZW46IHRydWUsXG5cdFx0Y29udGVudHM6IHRydWUsXG5cdFx0bmV4dDogdHJ1ZSxcblx0XHRwcmV2OiB0cnVlXG5cdH07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aGFzOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdHZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSxcblx0XHRcdGwgPSB0YXJnZXRzLmxlbmd0aDtcblxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzWyBpIF0gKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRjbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkge1xuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGwgPSB0aGlzLmxlbmd0aCxcblx0XHRcdG1hdGNoZWQgPSBbXSxcblx0XHRcdHRhcmdldHMgPSB0eXBlb2Ygc2VsZWN0b3JzICE9PSBcInN0cmluZ1wiICYmIGpRdWVyeSggc2VsZWN0b3JzICk7XG5cblx0XHQvLyBQb3NpdGlvbmFsIHNlbGVjdG9ycyBuZXZlciBtYXRjaCwgc2luY2UgdGhlcmUncyBubyBfc2VsZWN0aW9uXyBjb250ZXh0XG5cdFx0aWYgKCAhcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSApIHtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zm9yICggY3VyID0gdGhpc1sgaSBdOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblxuXHRcdFx0XHRcdC8vIEFsd2F5cyBza2lwIGRvY3VtZW50IGZyYWdtZW50c1xuXHRcdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlIDwgMTEgJiYgKCB0YXJnZXRzID9cblx0XHRcdFx0XHRcdHRhcmdldHMuaW5kZXgoIGN1ciApID4gLTEgOlxuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBwYXNzIG5vbi1lbGVtZW50cyB0byBTaXp6bGVcblx0XHRcdFx0XHRcdGN1ci5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGN1ciwgc2VsZWN0b3JzICkgKSApIHtcblxuXHRcdFx0XHRcdFx0bWF0Y2hlZC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKSA6IG1hdGNoZWQgKTtcblx0fSxcblxuXHQvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluIHRoZSBzZXRcblx0aW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnRcblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuICggdGhpc1sgMCBdICYmIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xO1xuXHRcdH1cblxuXHRcdC8vIEluZGV4IGluIHNlbGVjdG9yXG5cdFx0aWYgKCB0eXBlb2YgZWxlbSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBpbmRleE9mLmNhbGwoIGpRdWVyeSggZWxlbSApLCB0aGlzWyAwIF0gKTtcblx0XHR9XG5cblx0XHQvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnRcblx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCB0aGlzLFxuXG5cdFx0XHQvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWRcblx0XHRcdGVsZW0uanF1ZXJ5ID8gZWxlbVsgMCBdIDogZWxlbVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkOiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKFxuXHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoXG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgalF1ZXJ5KCBzZWxlY3RvciwgY29udGV4dCApIClcblx0XHRcdClcblx0XHQpO1xuXHR9LFxuXG5cdGFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5hZGQoIHNlbGVjdG9yID09IG51bGwgP1xuXHRcdFx0dGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlciggc2VsZWN0b3IgKVxuXHRcdCk7XG5cdH1cbn0gKTtcblxuZnVuY3Rpb24gc2libGluZyggY3VyLCBkaXIgKSB7XG5cdHdoaWxlICggKCBjdXIgPSBjdXJbIGRpciBdICkgJiYgY3VyLm5vZGVUeXBlICE9PSAxICkge31cblx0cmV0dXJuIGN1cjtcbn1cblxualF1ZXJ5LmVhY2goIHtcblx0cGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7XG5cdH0sXG5cdHBhcmVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiICk7XG5cdH0sXG5cdHBhcmVudHNVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiwgdW50aWwgKTtcblx0fSxcblx0bmV4dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0c2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7XG5cdH0sXG5cdGNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoIGVsZW0uZmlyc3RDaGlsZCApO1xuXHR9LFxuXHRjb250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0aWYgKCBlbGVtLmNvbnRlbnREb2N1bWVudCAhPSBudWxsICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExK1xuXHRcdFx0Ly8gPG9iamVjdD4gZWxlbWVudHMgd2l0aCBubyBgZGF0YWAgYXR0cmlidXRlIGhhcyBhbiBvYmplY3Rcblx0XHRcdC8vIGBjb250ZW50RG9jdW1lbnRgIHdpdGggYSBgbnVsbGAgcHJvdG90eXBlLlxuXHRcdFx0Z2V0UHJvdG8oIGVsZW0uY29udGVudERvY3VtZW50ICkgKSB7XG5cblx0XHRcdHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudDtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seSwgaU9TIDcgb25seSwgQW5kcm9pZCBCcm93c2VyIDw9NC4zIG9ubHlcblx0XHQvLyBUcmVhdCB0aGUgdGVtcGxhdGUgZWxlbWVudCBhcyBhIHJlZ3VsYXIgb25lIGluIGJyb3dzZXJzIHRoYXRcblx0XHQvLyBkb24ndCBzdXBwb3J0IGl0LlxuXHRcdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGVtcGxhdGVcIiApICkge1xuXHRcdFx0ZWxlbSA9IGVsZW0uY29udGVudCB8fCBlbGVtO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTtcblx0fVxufSwgZnVuY3Rpb24oIG5hbWUsIGZuICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7XG5cdFx0dmFyIG1hdGNoZWQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTtcblxuXHRcdGlmICggbmFtZS5zbGljZSggLTUgKSAhPT0gXCJVbnRpbFwiICkge1xuXHRcdFx0c2VsZWN0b3IgPSB1bnRpbDtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5sZW5ndGggPiAxICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgZHVwbGljYXRlc1xuXHRcdFx0aWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkge1xuXHRcdFx0XHRqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXZlcnNlIG9yZGVyIGZvciBwYXJlbnRzKiBhbmQgcHJldi1kZXJpdmF0aXZlc1xuXHRcdFx0aWYgKCBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkge1xuXHRcdFx0XHRtYXRjaGVkLnJldmVyc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTtcblx0fTtcbn0gKTtcbnZhciBybm90aHRtbHdoaXRlID0gKCAvW15cXHgyMFxcdFxcclxcblxcZl0rL2cgKTtcblxuXG5cbi8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25zIGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzXG5mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkge1xuXHR2YXIgb2JqZWN0ID0ge307XG5cdGpRdWVyeS5lYWNoKCBvcHRpb25zLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkge1xuXHRcdG9iamVjdFsgZmxhZyBdID0gdHJ1ZTtcblx0fSApO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vKlxuICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICpcdG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3dcbiAqXHRcdFx0dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdFxuICpcbiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlXG4gKiBcImZpcmVkXCIgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogUG9zc2libGUgb3B0aW9uczpcbiAqXG4gKlx0b25jZTpcdFx0XHR3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdG1lbW9yeTpcdFx0XHR3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkXG4gKlx0XHRcdFx0XHRhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCBcIm1lbW9yaXplZFwiXG4gKlx0XHRcdFx0XHR2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0dW5pcXVlOlx0XHRcdHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KVxuICpcbiAqXHRzdG9wT25GYWxzZTpcdGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICpcbiAqL1xualF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWRcblx0Ly8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KVxuXHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgP1xuXHRcdGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6XG5cdFx0alF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHR2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZ1xuXHRcdGZpcmluZyxcblxuXHRcdC8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzXG5cdFx0bWVtb3J5LFxuXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWRcblx0XHRmaXJlZCxcblxuXHRcdC8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmdcblx0XHRsb2NrZWQsXG5cblx0XHQvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdFxuXHRcdGxpc3QgPSBbXSxcblxuXHRcdC8vIFF1ZXVlIG9mIGV4ZWN1dGlvbiBkYXRhIGZvciByZXBlYXRhYmxlIGxpc3RzXG5cdFx0cXVldWUgPSBbXSxcblxuXHRcdC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKVxuXHRcdGZpcmluZ0luZGV4ID0gLTEsXG5cblx0XHQvLyBGaXJlIGNhbGxiYWNrc1xuXHRcdGZpcmUgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nXG5cdFx0XHRsb2NrZWQgPSBsb2NrZWQgfHwgb3B0aW9ucy5vbmNlO1xuXG5cdFx0XHQvLyBFeGVjdXRlIGNhbGxiYWNrcyBmb3IgYWxsIHBlbmRpbmcgZXhlY3V0aW9ucyxcblx0XHRcdC8vIHJlc3BlY3RpbmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXNcblx0XHRcdGZpcmVkID0gZmlyaW5nID0gdHJ1ZTtcblx0XHRcdGZvciAoIDsgcXVldWUubGVuZ3RoOyBmaXJpbmdJbmRleCA9IC0xICkge1xuXHRcdFx0XHRtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0XHR3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFJ1biBjYWxsYmFjayBhbmQgY2hlY2sgZm9yIGVhcmx5IHRlcm1pbmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBtZW1vcnlbIDAgXSwgbWVtb3J5WyAxIF0gKSA9PT0gZmFsc2UgJiZcblx0XHRcdFx0XHRcdG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEp1bXAgdG8gZW5kIGFuZCBmb3JnZXQgdGhlIGRhdGEgc28gLmFkZCBkb2Vzbid0IHJlLWZpcmVcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yZ2V0IHRoZSBkYXRhIGlmIHdlJ3JlIGRvbmUgd2l0aCBpdFxuXHRcdFx0aWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRmaXJpbmcgPSBmYWxzZTtcblxuXHRcdFx0Ly8gQ2xlYW4gdXAgaWYgd2UncmUgZG9uZSBmaXJpbmcgZm9yIGdvb2Rcblx0XHRcdGlmICggbG9ja2VkICkge1xuXG5cdFx0XHRcdC8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHNcblx0XHRcdFx0aWYgKCBtZW1vcnkgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgdGhpcyBvYmplY3QgaXMgc3BlbnRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsaXN0ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdFxuXHRcdHNlbGYgPSB7XG5cblx0XHRcdC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3Rcblx0XHRcdGFkZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblxuXHRcdFx0XHRcdC8vIElmIHdlIGhhdmUgbWVtb3J5IGZyb20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0cXVldWUucHVzaCggbWVtb3J5ICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0KCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdC5wdXNoKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHRvVHlwZSggYXJnICkgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5XG5cdFx0XHRcdFx0XHRcdFx0YWRkKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdH0gKSggYXJndW1lbnRzICk7XG5cblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3Rcblx0XHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0dmFyIGluZGV4O1xuXHRcdFx0XHRcdHdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0bGlzdC5zcGxpY2UoIGluZGV4LCAxICk7XG5cblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlc1xuXHRcdFx0XHRcdFx0aWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHtcblx0XHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXgtLTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDaGVjayBpZiBhIGdpdmVuIGNhbGxiYWNrIGlzIGluIHRoZSBsaXN0LlxuXHRcdFx0Ly8gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVyIG9yIG5vdCBsaXN0IGhhcyBjYWxsYmFja3MgYXR0YWNoZWQuXG5cdFx0XHRoYXM6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0cmV0dXJuIGZuID9cblx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDpcblx0XHRcdFx0XHRsaXN0Lmxlbmd0aCA+IDA7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0XG5cdFx0XHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkXG5cdFx0XHQvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdC8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlc1xuXHRcdFx0ZGlzYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhbGlzdDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmVcblx0XHRcdC8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpXG5cdFx0XHQvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHRsb2NrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0aWYgKCAhbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0bG9ja2VkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhbG9ja2VkO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkge1xuXHRcdFx0XHRpZiAoICFsb2NrZWQgKSB7XG5cdFx0XHRcdFx0YXJncyA9IGFyZ3MgfHwgW107XG5cdFx0XHRcdFx0YXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBhcmdzICk7XG5cdFx0XHRcdFx0aWYgKCAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzXG5cdFx0XHRmaXJlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlXG5cdFx0XHRmaXJlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWZpcmVkO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIHNlbGY7XG59O1xuXG5cbmZ1bmN0aW9uIElkZW50aXR5KCB2ICkge1xuXHRyZXR1cm4gdjtcbn1cbmZ1bmN0aW9uIFRocm93ZXIoIGV4ICkge1xuXHR0aHJvdyBleDtcbn1cblxuZnVuY3Rpb24gYWRvcHRWYWx1ZSggdmFsdWUsIHJlc29sdmUsIHJlamVjdCwgbm9WYWx1ZSApIHtcblx0dmFyIG1ldGhvZDtcblxuXHR0cnkge1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIHByb21pc2UgYXNwZWN0IGZpcnN0IHRvIHByaXZpbGVnZSBzeW5jaHJvbm91cyBiZWhhdmlvclxuXHRcdGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS5wcm9taXNlICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSApLmRvbmUoIHJlc29sdmUgKS5mYWlsKCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIHRoZW5hYmxlc1xuXHRcdH0gZWxzZSBpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUudGhlbiApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUsIHJlc29sdmUsIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgbm9uLXRoZW5hYmxlc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvbnRyb2wgYHJlc29sdmVgIGFyZ3VtZW50cyBieSBsZXR0aW5nIEFycmF5I3NsaWNlIGNhc3QgYm9vbGVhbiBgbm9WYWx1ZWAgdG8gaW50ZWdlcjpcblx0XHRcdC8vICogZmFsc2U6IFsgdmFsdWUgXS5zbGljZSggMCApID0+IHJlc29sdmUoIHZhbHVlIClcblx0XHRcdC8vICogdHJ1ZTogWyB2YWx1ZSBdLnNsaWNlKCAxICkgPT4gcmVzb2x2ZSgpXG5cdFx0XHRyZXNvbHZlLmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXS5zbGljZSggbm9WYWx1ZSApICk7XG5cdFx0fVxuXG5cdC8vIEZvciBQcm9taXNlcy9BKywgY29udmVydCBleGNlcHRpb25zIGludG8gcmVqZWN0aW9uc1xuXHQvLyBTaW5jZSBqUXVlcnkud2hlbiBkb2Vzbid0IHVud3JhcCB0aGVuYWJsZXMsIHdlIGNhbiBza2lwIHRoZSBleHRyYSBjaGVja3MgYXBwZWFyaW5nIGluXG5cdC8vIERlZmVycmVkI3RoZW4gdG8gY29uZGl0aW9uYWxseSBzdXBwcmVzcyByZWplY3Rpb24uXG5cdH0gY2F0Y2ggKCB2YWx1ZSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIG9ubHlcblx0XHQvLyBTdHJpY3QgbW9kZSBmdW5jdGlvbnMgaW52b2tlZCB3aXRob3V0IC5jYWxsLy5hcHBseSBnZXQgZ2xvYmFsLW9iamVjdCBjb250ZXh0XG5cdFx0cmVqZWN0LmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXSApO1xuXHR9XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XG5cdFx0dmFyIHR1cGxlcyA9IFtcblxuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgY2FsbGJhY2tzLFxuXHRcdFx0XHQvLyAuLi4gLnRoZW4gaGFuZGxlcnMsIGFyZ3VtZW50IGluZGV4LCBbZmluYWwgc3RhdGVdXG5cdFx0XHRcdFsgXCJub3RpZnlcIiwgXCJwcm9ncmVzc1wiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLCAyIF0sXG5cdFx0XHRcdFsgXCJyZXNvbHZlXCIsIFwiZG9uZVwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMCwgXCJyZXNvbHZlZFwiIF0sXG5cdFx0XHRcdFsgXCJyZWplY3RcIiwgXCJmYWlsXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAxLCBcInJlamVjdGVkXCIgXVxuXHRcdFx0XSxcblx0XHRcdHN0YXRlID0gXCJwZW5kaW5nXCIsXG5cdFx0XHRwcm9taXNlID0ge1xuXHRcdFx0XHRzdGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbHdheXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImNhdGNoXCI6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJvbWlzZS50aGVuKCBudWxsLCBmbiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0cGlwZTogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkge1xuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggX2ksIHR1cGxlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE1hcCB0dXBsZXMgKHByb2dyZXNzLCBkb25lLCBmYWlsKSB0byBhcmd1bWVudHMgKGRvbmUsIGZhaWwsIHByb2dyZXNzKVxuXHRcdFx0XHRcdFx0XHR2YXIgZm4gPSBpc0Z1bmN0aW9uKCBmbnNbIHR1cGxlWyA0IF0gXSApICYmIGZuc1sgdHVwbGVbIDQgXSBdO1xuXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLnByb2dyZXNzKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLm5vdGlmeSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5kb25lKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlc29sdmUgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZmFpbChmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZWplY3QgfSlcblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAxIF0gXSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgJiYgaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlzZSApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQucHJvbWlzZSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5wcm9ncmVzcyggbmV3RGVmZXIubm90aWZ5IClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZmFpbCggbmV3RGVmZXIucmVqZWN0ICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXShcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm4gPyBbIHJldHVybmVkIF0gOiBhcmd1bWVudHNcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRmbnMgPSBudWxsO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoZW46IGZ1bmN0aW9uKCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgb25Qcm9ncmVzcyApIHtcblx0XHRcdFx0XHR2YXIgbWF4RGVwdGggPSAwO1xuXHRcdFx0XHRcdGZ1bmN0aW9uIHJlc29sdmUoIGRlcHRoLCBkZWZlcnJlZCwgaGFuZGxlciwgc3BlY2lhbCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBhcmd1bWVudHMsXG5cdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkLCB0aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuM1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBkb3VibGUtcmVzb2x1dGlvbiBhdHRlbXB0c1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCA8IG1heERlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkID0gaGFuZGxlci5hcHBseSggdGhhdCwgYXJncyApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4xXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC00OFxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCA9PT0gZGVmZXJyZWQucHJvbWlzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCBcIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvblwiICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb25zIDIuMy4zLjEsIDMuNVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTRcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTc1XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBSZXRyaWV2ZSBgdGhlbmAgb25seSBvbmNlXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGVuID0gcmV0dXJuZWQgJiZcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy40XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTY0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgY2hlY2sgb2JqZWN0cyBhbmQgZnVuY3Rpb25zIGZvciB0aGVuYWJpbGl0eVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHR5cGVvZiByZXR1cm5lZCA9PT0gXCJvYmplY3RcIiB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiByZXR1cm5lZCA9PT0gXCJmdW5jdGlvblwiICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQudGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGEgcmV0dXJuZWQgdGhlbmFibGVcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhlbiApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgcHJvY2Vzc29ycyAobm90aWZ5KSBqdXN0IHdhaXQgZm9yIHJlc29sdXRpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBhbHNvIGhvb2sgaW50byBwcm9ncmVzc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIGRpc3JlZ2FyZCBvbGRlciByZXNvbHV0aW9uIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1heERlcHRoKys7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYWxsIG90aGVyIHJldHVybmVkIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IElkZW50aXR5ICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgcmV0dXJuZWQgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFByb2Nlc3MgdGhlIHZhbHVlKHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmF1bHQgcHJvY2VzcyBpcyByZXNvbHZlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggc3BlY2lhbCB8fCBkZWZlcnJlZC5yZXNvbHZlV2l0aCApKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgbm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGNhdGNoIGFuZCByZWplY3QgZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MgPSBzcGVjaWFsID9cblx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgOlxuXHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayggZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjQuMVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTYxXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIHBvc3QtcmVzb2x1dGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCArIDEgPj0gbWF4RGVwdGggKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBUaHJvd2VyICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyBlIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjFcblx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTdcblx0XHRcdFx0XHRcdFx0Ly8gUmUtcmVzb2x2ZSBwcm9taXNlcyBpbW1lZGlhdGVseSB0byBkb2RnZSBmYWxzZSByZWplY3Rpb24gZnJvbVxuXHRcdFx0XHRcdFx0XHQvLyBzdWJzZXF1ZW50IGVycm9yc1xuXHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENhbGwgYW4gb3B0aW9uYWwgaG9vayB0byByZWNvcmQgdGhlIHN0YWNrLCBpbiBjYXNlIG9mIGV4Y2VwdGlvblxuXHRcdFx0XHRcdFx0XHRcdC8vIHNpbmNlIGl0J3Mgb3RoZXJ3aXNlIGxvc3Qgd2hlbiBleGVjdXRpb24gZ29lcyBhc3luY1xuXHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3Muc3RhY2tUcmFjZSA9IGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHByb2Nlc3MgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cblx0XHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25Qcm9ncmVzcyApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uUHJvZ3Jlc3MgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHksXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIubm90aWZ5V2l0aFxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAxIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvbkZ1bGZpbGxlZCApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uRnVsZmlsbGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMiBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25SZWplY3RlZCApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uUmVqZWN0ZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0VGhyb3dlclxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJlZFxuXHRcdFx0XHQvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBpcyBhZGRlZCB0byB0aGUgb2JqZWN0XG5cdFx0XHRcdHByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVmZXJyZWQgPSB7fTtcblxuXHRcdC8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHNcblx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cdFx0XHR2YXIgbGlzdCA9IHR1cGxlWyAyIF0sXG5cdFx0XHRcdHN0YXRlU3RyaW5nID0gdHVwbGVbIDUgXTtcblxuXHRcdFx0Ly8gcHJvbWlzZS5wcm9ncmVzcyA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmRvbmUgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5mYWlsID0gbGlzdC5hZGRcblx0XHRcdHByb21pc2VbIHR1cGxlWyAxIF0gXSA9IGxpc3QuYWRkO1xuXG5cdFx0XHQvLyBIYW5kbGUgc3RhdGVcblx0XHRcdGlmICggc3RhdGVTdHJpbmcgKSB7XG5cdFx0XHRcdGxpc3QuYWRkKFxuXHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVzb2x2ZWRcIiAoaS5lLiwgZnVsZmlsbGVkKVxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlamVjdGVkXCJcblx0XHRcdFx0XHRcdHN0YXRlID0gc3RhdGVTdHJpbmc7XG5cdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdC8vIHJlamVjdGVkX2NhbGxiYWNrcy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2NhbGxiYWNrcy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAyIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMyBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19jYWxsYmFja3MubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAyIF0ubG9jayxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmxvY2tcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmZpcmVcblx0XHRcdGxpc3QuYWRkKCB0dXBsZVsgMyBdLmZpcmUgKTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLm5vdGlmeVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlc29sdmVXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlamVjdFdpdGgoLi4uKSB9XG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyB1bmRlZmluZWQgOiB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnlXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3RXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdID0gbGlzdC5maXJlV2l0aDtcblx0XHR9ICk7XG5cblx0XHQvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2Vcblx0XHRwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7XG5cblx0XHQvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55XG5cdFx0aWYgKCBmdW5jICkge1xuXHRcdFx0ZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTtcblx0XHR9XG5cblx0XHQvLyBBbGwgZG9uZSFcblx0XHRyZXR1cm4gZGVmZXJyZWQ7XG5cdH0sXG5cblx0Ly8gRGVmZXJyZWQgaGVscGVyXG5cdHdoZW46IGZ1bmN0aW9uKCBzaW5nbGVWYWx1ZSApIHtcblx0XHR2YXJcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzXG5cdFx0XHRyZW1haW5pbmcgPSBhcmd1bWVudHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bnByb2Nlc3NlZCBhcmd1bWVudHNcblx0XHRcdGkgPSByZW1haW5pbmcsXG5cblx0XHRcdC8vIHN1Ym9yZGluYXRlIGZ1bGZpbGxtZW50IGRhdGFcblx0XHRcdHJlc29sdmVDb250ZXh0cyA9IEFycmF5KCBpICksXG5cdFx0XHRyZXNvbHZlVmFsdWVzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICksXG5cblx0XHRcdC8vIHRoZSBtYXN0ZXIgRGVmZXJyZWRcblx0XHRcdG1hc3RlciA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5XG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZUNvbnRleHRzWyBpIF0gPSB0aGlzO1xuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcblx0XHRcdFx0XHRpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7XG5cdFx0XHRcdFx0XHRtYXN0ZXIucmVzb2x2ZVdpdGgoIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH07XG5cblx0XHQvLyBTaW5nbGUtIGFuZCBlbXB0eSBhcmd1bWVudHMgYXJlIGFkb3B0ZWQgbGlrZSBQcm9taXNlLnJlc29sdmVcblx0XHRpZiAoIHJlbWFpbmluZyA8PSAxICkge1xuXHRcdFx0YWRvcHRWYWx1ZSggc2luZ2xlVmFsdWUsIG1hc3Rlci5kb25lKCB1cGRhdGVGdW5jKCBpICkgKS5yZXNvbHZlLCBtYXN0ZXIucmVqZWN0LFxuXHRcdFx0XHQhcmVtYWluaW5nICk7XG5cblx0XHRcdC8vIFVzZSAudGhlbigpIHRvIHVud3JhcCBzZWNvbmRhcnkgdGhlbmFibGVzIChjZi4gZ2gtMzAwMClcblx0XHRcdGlmICggbWFzdGVyLnN0YXRlKCkgPT09IFwicGVuZGluZ1wiIHx8XG5cdFx0XHRcdGlzRnVuY3Rpb24oIHJlc29sdmVWYWx1ZXNbIGkgXSAmJiByZXNvbHZlVmFsdWVzWyBpIF0udGhlbiApICkge1xuXG5cdFx0XHRcdHJldHVybiBtYXN0ZXIudGhlbigpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGFyZ3VtZW50cyBhcmUgYWdncmVnYXRlZCBsaWtlIFByb21pc2UuYWxsIGFycmF5IGVsZW1lbnRzXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCByZXNvbHZlVmFsdWVzWyBpIF0sIHVwZGF0ZUZ1bmMoIGkgKSwgbWFzdGVyLnJlamVjdCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBtYXN0ZXIucHJvbWlzZSgpO1xuXHR9XG59ICk7XG5cblxuLy8gVGhlc2UgdXN1YWxseSBpbmRpY2F0ZSBhIHByb2dyYW1tZXIgbWlzdGFrZSBkdXJpbmcgZGV2ZWxvcG1lbnQsXG4vLyB3YXJuIGFib3V0IHRoZW0gQVNBUCByYXRoZXIgdGhhbiBzd2FsbG93aW5nIHRoZW0gYnkgZGVmYXVsdC5cbnZhciByZXJyb3JOYW1lcyA9IC9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO1xuXG5qUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayA9IGZ1bmN0aW9uKCBlcnJvciwgc3RhY2sgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgOCAtIDkgb25seVxuXHQvLyBDb25zb2xlIGV4aXN0cyB3aGVuIGRldiB0b29scyBhcmUgb3Blbiwgd2hpY2ggY2FuIGhhcHBlbiBhdCBhbnkgdGltZVxuXHRpZiAoIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLndhcm4gJiYgZXJyb3IgJiYgcmVycm9yTmFtZXMudGVzdCggZXJyb3IubmFtZSApICkge1xuXHRcdHdpbmRvdy5jb25zb2xlLndhcm4oIFwialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogXCIgKyBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjaywgc3RhY2sgKTtcblx0fVxufTtcblxuXG5cblxualF1ZXJ5LnJlYWR5RXhjZXB0aW9uID0gZnVuY3Rpb24oIGVycm9yICkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0dGhyb3cgZXJyb3I7XG5cdH0gKTtcbn07XG5cblxuXG5cbi8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeVxudmFyIHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpO1xuXG5qUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlvbiggZm4gKSB7XG5cblx0cmVhZHlMaXN0XG5cdFx0LnRoZW4oIGZuIClcblxuXHRcdC8vIFdyYXAgalF1ZXJ5LnJlYWR5RXhjZXB0aW9uIGluIGEgZnVuY3Rpb24gc28gdGhhdCB0aGUgbG9va3VwXG5cdFx0Ly8gaGFwcGVucyBhdCB0aGUgdGltZSBvZiBlcnJvciBoYW5kbGluZyBpbnN0ZWFkIG9mIGNhbGxiYWNrXG5cdFx0Ly8gcmVnaXN0cmF0aW9uLlxuXHRcdC5jYXRjaCggZnVuY3Rpb24oIGVycm9yICkge1xuXHRcdFx0alF1ZXJ5LnJlYWR5RXhjZXB0aW9uKCBlcnJvciApO1xuXHRcdH0gKTtcblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLlxuXHRpc1JlYWR5OiBmYWxzZSxcblxuXHQvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMgdG8gd2FpdCBmb3IgYmVmb3JlXG5cdC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxXG5cdHJlYWR5V2FpdDogMSxcblxuXHQvLyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5XG5cdHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHtcblxuXHRcdC8vIEFib3J0IGlmIHRoZXJlIGFyZSBwZW5kaW5nIGhvbGRzIG9yIHdlJ3JlIGFscmVhZHkgcmVhZHlcblx0XHRpZiAoIHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHlcblx0XHRqUXVlcnkuaXNSZWFkeSA9IHRydWU7XG5cblx0XHQvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZVxuXHRcdGlmICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGVcblx0XHRyZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpRdWVyeSBdICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LnJlYWR5LnRoZW4gPSByZWFkeUxpc3QudGhlbjtcblxuLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2RcbmZ1bmN0aW9uIGNvbXBsZXRlZCgpIHtcblx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xuXHRqUXVlcnkucmVhZHkoKTtcbn1cblxuLy8gQ2F0Y2ggY2FzZXMgd2hlcmUgJChkb2N1bWVudCkucmVhZHkoKSBpcyBjYWxsZWRcbi8vIGFmdGVyIHRoZSBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLlxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTAgb25seVxuLy8gT2xkZXIgSUUgc29tZXRpbWVzIHNpZ25hbHMgXCJpbnRlcmFjdGl2ZVwiIHRvbyBzb29uXG5pZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIiB8fFxuXHQoIGRvY3VtZW50LnJlYWR5U3RhdGUgIT09IFwibG9hZGluZ1wiICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgKSApIHtcblxuXHQvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHlcblx0d2luZG93LnNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSApO1xuXG59IGVsc2Uge1xuXG5cdC8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2tcblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXG5cdC8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrXG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG59XG5cblxuXG5cbi8vIE11bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvblxuLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uXG52YXIgYWNjZXNzID0gZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hhaW5hYmxlLCBlbXB0eUdldCwgcmF3ICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gZWxlbXMubGVuZ3RoLFxuXHRcdGJ1bGsgPSBrZXkgPT0gbnVsbDtcblxuXHQvLyBTZXRzIG1hbnkgdmFsdWVzXG5cdGlmICggdG9UeXBlKCBrZXkgKSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXHRcdGZvciAoIGkgaW4ga2V5ICkge1xuXHRcdFx0YWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVsgaSBdLCB0cnVlLCBlbXB0eUdldCwgcmF3ICk7XG5cdFx0fVxuXG5cdC8vIFNldHMgb25lIHZhbHVlXG5cdH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblxuXHRcdGlmICggIWlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyYXcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICggYnVsayApIHtcblxuXHRcdFx0Ly8gQnVsayBvcGVyYXRpb25zIHJ1biBhZ2FpbnN0IHRoZSBlbnRpcmUgc2V0XG5cdFx0XHRpZiAoIHJhdyApIHtcblx0XHRcdFx0Zm4uY2FsbCggZWxlbXMsIHZhbHVlICk7XG5cdFx0XHRcdGZuID0gbnVsbDtcblxuXHRcdFx0Ly8gLi4uZXhjZXB0IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnVsayA9IGZuO1xuXHRcdFx0XHRmbiA9IGZ1bmN0aW9uKCBlbGVtLCBfa2V5LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gYnVsay5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdGZuKFxuXHRcdFx0XHRcdGVsZW1zWyBpIF0sIGtleSwgcmF3ID9cblx0XHRcdFx0XHR2YWx1ZSA6XG5cdFx0XHRcdFx0dmFsdWUuY2FsbCggZWxlbXNbIGkgXSwgaSwgZm4oIGVsZW1zWyBpIF0sIGtleSApIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIGNoYWluYWJsZSApIHtcblx0XHRyZXR1cm4gZWxlbXM7XG5cdH1cblxuXHQvLyBHZXRzXG5cdGlmICggYnVsayApIHtcblx0XHRyZXR1cm4gZm4uY2FsbCggZWxlbXMgKTtcblx0fVxuXG5cdHJldHVybiBsZW4gPyBmbiggZWxlbXNbIDAgXSwga2V5ICkgOiBlbXB0eUdldDtcbn07XG5cblxuLy8gTWF0Y2hlcyBkYXNoZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nXG52YXIgcm1zUHJlZml4ID0gL14tbXMtLyxcblx0cmRhc2hBbHBoYSA9IC8tKFthLXpdKS9nO1xuXG4vLyBVc2VkIGJ5IGNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKClcbmZ1bmN0aW9uIGZjYW1lbENhc2UoIF9hbGwsIGxldHRlciApIHtcblx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xufVxuXG4vLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG4vLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpXG5mdW5jdGlvbiBjYW1lbENhc2UoIHN0cmluZyApIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG59XG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0cmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xufVxuXG5EYXRhLnVpZCA9IDE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXG5cdGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS5cblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBvd25lciApICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHRcdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHRcdFx0Ly8gZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBkYXRhICkgXSA9IHZhbHVlO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCB7IHByb3BlcnRpZXMgfSBdIGFyZ3Ncblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdFxuXHRcdFx0Zm9yICggcHJvcCBpbiBkYXRhICkge1xuXHRcdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBwcm9wICkgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzLmNhY2hlKCBvd25lciApIDpcblxuXHRcdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsgY2FtZWxDYXNlKCBrZXkgKSBdO1xuXHR9LFxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWRcblx0XHQvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWRcblx0XHQvL1xuXHRcdC8vIFRha2UgdGhlIFwicmVhZFwiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZVxuXHRcdC8vIHdoaWNoIHZhbHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3Rcblx0XHQvLyAgIDIuIFRoZSBkYXRhIHN0b3JlZCBhdCB0aGUga2V5XG5cdFx0Ly9cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0KCBvd25lciwga2V5ICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWVcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXNcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vXG5cdFx0dGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcblx0XHQvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl1cblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHZhciBpLFxuXHRcdFx0Y2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHRpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSgga2V5ICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYga2V5IGlzIGFuIGFycmF5IG9mIGtleXMuLi5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHNldCBjYW1lbENhc2Uga2V5cywgc28gcmVtb3ZlIHRoYXQuXG5cdFx0XHRcdGtleSA9IGtleS5tYXAoIGNhbWVsQ2FzZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdGtleSA9IGtleSBpbiBjYWNoZSA/XG5cdFx0XHRcdFx0WyBrZXkgXSA6XG5cdFx0XHRcdFx0KCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0ga2V5Lmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgdGhlcmUncyBubyBtb3JlIGRhdGFcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1XG5cdFx0XHQvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllc1xuXHRcdFx0Ly8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3IChidWcgcmVzdHJpY3RlZClcblx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cdFx0dmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTtcblx0fVxufTtcbnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7XG5cbnZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvW0EtWl0vZztcblxuZnVuY3Rpb24gZ2V0RGF0YSggZGF0YSApIHtcblx0aWYgKCBkYXRhID09PSBcInRydWVcIiApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJmYWxzZVwiICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJudWxsXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZ1xuXHRpZiAoIGRhdGEgPT09ICtkYXRhICsgXCJcIiApIHtcblx0XHRyZXR1cm4gK2RhdGE7XG5cdH1cblxuXHRpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkgKSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKTtcblx0fVxuXG5cdHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xuXHR2YXIgbmFtZTtcblxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJCZcIiApLnRvTG93ZXJDYXNlKCk7XG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0YSA9IGdldERhdGEoIGRhdGEgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTtcblx0fSxcblxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0YXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlcztcblxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBUaGUgYXR0cnMgZWxlbWVudHMgY2FuIGJlIG51bGwgKCMxNDg5NClcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBuYW1lLmluZGV4T2YoIFwiZGF0YS1cIiApID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBjYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhO1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YVxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCB0aGUgZGF0YS4uLlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc3RvcmUgdGhlIGNhbWVsQ2FzZWQga2V5XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBxdWV1ZTtcblxuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXG5cdFx0XHRpZiAoIGRhdGEgKSB7XG5cdFx0XHRcdGlmICggIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG5cblx0dmFyIGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXHRcdH0sXG5cdFx0Y29tcG9zZWQgPSB7IGNvbXBvc2VkOiB0cnVlIH07XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4KywgaU9TIDEwLjAgLSAxMC4yIG9ubHlcblx0Ly8gQ2hlY2sgYXR0YWNobWVudCBhY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyaWVzIHdoZW4gcG9zc2libGUgKGdoLTM1MDQpXG5cdC8vIFN1cHBvcnQ6IGlPUyAxMC4wLTEwLjIgb25seVxuXHQvLyBFYXJseSBpT1MgMTAgdmVyc2lvbnMgc3VwcG9ydCBgYXR0YWNoU2hhZG93YCBidXQgbm90IGBnZXRSb290Tm9kZWAsXG5cdC8vIGxlYWRpbmcgdG8gZXJyb3JzLiBXZSBuZWVkIHRvIGNoZWNrIGZvciBgZ2V0Um9vdE5vZGVgLlxuXHRpZiAoIGRvY3VtZW50RWxlbWVudC5nZXRSb290Tm9kZSApIHtcblx0XHRpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSB8fFxuXHRcdFx0XHRlbGVtLmdldFJvb3ROb2RlKCBjb21wb3NlZCApID09PSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0fTtcblx0fVxudmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHtcblxuXHRcdC8vIGlzSGlkZGVuV2l0aGluVHJlZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxuXHRcdGVsZW0gPSBlbCB8fCBlbGVtO1xuXG5cdFx0Ly8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGxcblx0XHRyZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fFxuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmXG5cblx0XHRcdC8vIE90aGVyd2lzZSwgY2hlY2sgY29tcHV0ZWQgc3R5bGVcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MyAtIDQ1XG5cdFx0XHQvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhhdmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXNcblx0XHRcdC8vIGluIHRoZSBkb2N1bWVudC5cblx0XHRcdGlzQXR0YWNoZWQoIGVsZW0gKSAmJlxuXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApID09PSBcIm5vbmVcIjtcblx0fTtcblxuXG5cbmZ1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7XG5cdHZhciBhZGp1c3RlZCwgc2NhbGUsXG5cdFx0bWF4SXRlcmF0aW9ucyA9IDIwLFxuXHRcdGN1cnJlbnRWYWx1ZSA9IHR3ZWVuID9cblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uY3VyKCk7XG5cdFx0XHR9IDpcblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgcHJvcCwgXCJcIiApO1xuXHRcdFx0fSxcblx0XHRpbml0aWFsID0gY3VycmVudFZhbHVlKCksXG5cdFx0dW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApLFxuXG5cdFx0Ly8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXNcblx0XHRpbml0aWFsSW5Vbml0ID0gZWxlbS5ub2RlVHlwZSAmJlxuXHRcdFx0KCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gXCJweFwiICYmICtpbml0aWFsICkgJiZcblx0XHRcdHJjc3NOdW0uZXhlYyggalF1ZXJ5LmNzcyggZWxlbSwgcHJvcCApICk7XG5cblx0aWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0gdW5pdCApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHRcdC8vIEhhbHZlIHRoZSBpdGVyYXRpb24gdGFyZ2V0IHZhbHVlIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlIGZyb20gQ1NTIHVwcGVyIGJvdW5kcyAoZ2gtMjE0NClcblx0XHRpbml0aWFsID0gaW5pdGlhbCAvIDI7XG5cblx0XHQvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBqUXVlcnkuY3NzXG5cdFx0dW5pdCA9IHVuaXQgfHwgaW5pdGlhbEluVW5pdFsgMyBdO1xuXG5cdFx0Ly8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnRcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTtcblxuXHRcdHdoaWxlICggbWF4SXRlcmF0aW9ucy0tICkge1xuXG5cdFx0XHQvLyBFdmFsdWF0ZSBhbmQgdXBkYXRlIG91ciBiZXN0IGd1ZXNzIChkb3VibGluZyBndWVzc2VzIHRoYXQgemVybyBvdXQpLlxuXHRcdFx0Ly8gRmluaXNoIGlmIHRoZSBzY2FsZSBlcXVhbHMgb3IgY3Jvc3NlcyAxIChtYWtpbmcgdGhlIG9sZCpuZXcgcHJvZHVjdCBub24tcG9zaXRpdmUpLlxuXHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXHRcdFx0aWYgKCAoIDEgLSBzY2FsZSApICogKCAxIC0gKCBzY2FsZSA9IGN1cnJlbnRWYWx1ZSgpIC8gaW5pdGlhbCB8fCAwLjUgKSApIDw9IDAgKSB7XG5cdFx0XHRcdG1heEl0ZXJhdGlvbnMgPSAwO1xuXHRcdFx0fVxuXHRcdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTtcblxuXHRcdH1cblxuXHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0ICogMjtcblx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uXG5cdFx0dmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107XG5cdH1cblxuXHRpZiAoIHZhbHVlUGFydHMgKSB7XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsSW5Vbml0IHx8ICtpbml0aWFsIHx8IDA7XG5cblx0XHQvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWRcblx0XHRhZGp1c3RlZCA9IHZhbHVlUGFydHNbIDEgXSA/XG5cdFx0XHRpbml0aWFsSW5Vbml0ICsgKCB2YWx1ZVBhcnRzWyAxIF0gKyAxICkgKiB2YWx1ZVBhcnRzWyAyIF0gOlxuXHRcdFx0K3ZhbHVlUGFydHNbIDIgXTtcblx0XHRpZiAoIHR3ZWVuICkge1xuXHRcdFx0dHdlZW4udW5pdCA9IHVuaXQ7XG5cdFx0XHR0d2Vlbi5zdGFydCA9IGluaXRpYWxJblVuaXQ7XG5cdFx0XHR0d2Vlbi5lbmQgPSBhZGp1c3RlZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFkanVzdGVkO1xufVxuXG5cbnZhciBkZWZhdWx0RGlzcGxheU1hcCA9IHt9O1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApIHtcblx0dmFyIHRlbXAsXG5cdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50LFxuXHRcdG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSxcblx0XHRkaXNwbGF5ID0gZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF07XG5cblx0aWYgKCBkaXNwbGF5ICkge1xuXHRcdHJldHVybiBkaXNwbGF5O1xuXHR9XG5cblx0dGVtcCA9IGRvYy5ib2R5LmFwcGVuZENoaWxkKCBkb2MuY3JlYXRlRWxlbWVudCggbm9kZU5hbWUgKSApO1xuXHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGVtcCwgXCJkaXNwbGF5XCIgKTtcblxuXHR0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRlbXAgKTtcblxuXHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdGRpc3BsYXkgPSBcImJsb2NrXCI7XG5cdH1cblx0ZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF0gPSBkaXNwbGF5O1xuXG5cdHJldHVybiBkaXNwbGF5O1xufVxuXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XG5cdHZhciBkaXNwbGF5LCBlbGVtLFxuXHRcdHZhbHVlcyA9IFtdLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cblx0Ly8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5O1xuXHRcdGlmICggc2hvdyApIHtcblxuXHRcdFx0Ly8gU2luY2Ugd2UgZm9yY2UgdmlzaWJpbGl0eSB1cG9uIGNhc2NhZGUtaGlkZGVuIGVsZW1lbnRzLCBhbiBpbW1lZGlhdGUgKGFuZCBzbG93KVxuXHRcdFx0Ly8gY2hlY2sgaXMgcmVxdWlyZWQgaW4gdGhpcyBmaXJzdCBsb29wIHVubGVzcyB3ZSBoYXZlIGEgbm9uZW1wdHkgZGlzcGxheSB2YWx1ZSAoZWl0aGVyXG5cdFx0XHQvLyBpbmxpbmUgb3IgYWJvdXQtdG8tYmUtcmVzdG9yZWQpXG5cdFx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICkgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCAhdmFsdWVzWyBpbmRleCBdICkge1xuXHRcdFx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIGRpc3BsYXkgIT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBcIm5vbmVcIjtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB3aGF0IHdlJ3JlIG92ZXJ3cml0aW5nXG5cdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJkaXNwbGF5XCIsIGRpc3BsYXkgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTZXQgdGhlIGRpc3BsYXkgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AgdG8gYXZvaWQgY29uc3RhbnQgcmVmbG93XG5cdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCB2YWx1ZXNbIGluZGV4IF0gIT0gbnVsbCApIHtcblx0XHRcdGVsZW1lbnRzWyBpbmRleCBdLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZXNbIGluZGV4IF07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRzO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApO1xuXHR9LFxuXHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTtcblx0fSxcblx0dG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNIaWRkZW5XaXRoaW5UcmVlKCB0aGlzICkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnNob3coKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcbnZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTtcblxudmFyIHJ0YWdOYW1lID0gKCAvPChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSopL2kgKTtcblxudmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8Xm1vZHVsZSR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0ZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApLFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seVxuXHQvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAoIzExMjE3KVxuXHQvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpXG5cdC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKVxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcInJhZGlvXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJ0XCIgKTtcblxuXHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSBvbmx5XG5cdC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50c1xuXHRzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkXG5cdGRpdi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIjtcblx0c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0Ly8gSUUgPD05IHJlcGxhY2VzIDxvcHRpb24+IHRhZ3Mgd2l0aCB0aGVpciBjb250ZW50cyB3aGVuIGluc2VydGVkIG91dHNpZGUgb2Zcblx0Ly8gdGhlIHNlbGVjdCBlbGVtZW50LlxuXHRkaXYuaW5uZXJIVE1MID0gXCI8b3B0aW9uPjwvb3B0aW9uPlwiO1xuXHRzdXBwb3J0Lm9wdGlvbiA9ICEhZGl2Lmxhc3RDaGlsZDtcbn0gKSgpO1xuXG5cbi8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApXG52YXIgd3JhcE1hcCA9IHtcblxuXHQvLyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZVxuXHQvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuXG5cdC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1aXJlZCBlbGVtZW50cy5cblx0dGhlYWQ6IFsgMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIiBdLFxuXHRjb2w6IFsgMiwgXCI8dGFibGU+PGNvbGdyb3VwPlwiLCBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIiBdLFxuXHR0cjogWyAyLCBcIjx0YWJsZT48dGJvZHk+XCIsIFwiPC90Ym9keT48L3RhYmxlPlwiIF0sXG5cdHRkOiBbIDMsIFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsIFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCIgXSxcblxuXHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cbn07XG5cbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbmlmICggIXN1cHBvcnQub3B0aW9uICkge1xuXHR3cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb24gPSBbIDEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiIF07XG59XG5cblxuZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBVc2UgdHlwZW9mIHRvIGF2b2lkIHplcm8tYXJndW1lbnQgbWV0aG9kIGludm9jYXRpb24gb24gaG9zdCBvYmplY3RzICgjMTUxNTEpXG5cdHZhciByZXQ7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2UgaWYgKCB0eXBlb2YgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIHtcblx0XHRyZXQgPSBbXTtcblx0fVxuXG5cdGlmICggdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIG5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICk7XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufVxuXG5cbi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZFxuZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZGF0YVByaXYuc2V0KFxuXHRcdFx0ZWxlbXNbIGkgXSxcblx0XHRcdFwiZ2xvYmFsRXZhbFwiLFxuXHRcdFx0IXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgXCJnbG9iYWxFdmFsXCIgKVxuXHRcdCk7XG5cdH1cbn1cblxuXG52YXIgcmh0bWwgPSAvPHwmIz9cXHcrOy87XG5cbmZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7XG5cdHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgYXR0YWNoZWQsIGosXG5cdFx0ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRub2RlcyA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGVsZW0gPSBlbGVtc1sgaSBdO1xuXG5cdFx0aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7XG5cblx0XHRcdC8vIEFkZCBub2RlcyBkaXJlY3RseVxuXHRcdFx0aWYgKCB0b1R5cGUoIGVsZW0gKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCBlbGVtLm5vZGVUeXBlID8gWyBlbGVtIF0gOiBlbGVtICk7XG5cblx0XHRcdC8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRleHQgbm9kZVxuXHRcdFx0fSBlbHNlIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHtcblx0XHRcdFx0bm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7XG5cblx0XHRcdC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2Rlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXG5cdFx0XHRcdC8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25cblx0XHRcdFx0dGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0O1xuXHRcdFx0XHR0bXAuaW5uZXJIVE1MID0gd3JhcFsgMSBdICsgalF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIGVsZW0gKSArIHdyYXBbIDIgXTtcblxuXHRcdFx0XHQvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnRcblx0XHRcdFx0aiA9IHdyYXBbIDAgXTtcblx0XHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdFx0dG1wID0gdG1wLmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXJcblx0XHRcdFx0dG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdFx0XHQvLyBFbnN1cmUgdGhlIGNyZWF0ZWQgbm9kZXMgYXJlIG9ycGhhbmVkICgjMTIzOTIpXG5cdFx0XHRcdHRtcC50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBmcmFnbWVudFxuXHRmcmFnbWVudC50ZXh0Q29udGVudCA9IFwiXCI7XG5cblx0aSA9IDA7XG5cdHdoaWxlICggKCBlbGVtID0gbm9kZXNbIGkrKyBdICkgKSB7XG5cblx0XHQvLyBTa2lwIGVsZW1lbnRzIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgY29sbGVjdGlvbiAodHJhYy00MDg3KVxuXHRcdGlmICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSA+IC0xICkge1xuXHRcdFx0aWYgKCBpZ25vcmVkICkge1xuXHRcdFx0XHRpZ25vcmVkLnB1c2goIGVsZW0gKTtcblx0XHRcdH1cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGF0dGFjaGVkID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gQXBwZW5kIHRvIGZyYWdtZW50XG5cdFx0dG1wID0gZ2V0QWxsKCBmcmFnbWVudC5hcHBlbmRDaGlsZCggZWxlbSApLCBcInNjcmlwdFwiICk7XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0aWYgKCBhdHRhY2hlZCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIHRtcCApO1xuXHRcdH1cblxuXHRcdC8vIENhcHR1cmUgZXhlY3V0YWJsZXNcblx0XHRpZiAoIHNjcmlwdHMgKSB7XG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdG1wWyBqKysgXSApICkge1xuXHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdFx0c2NyaXB0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZnJhZ21lbnQ7XG59XG5cblxudmFyXG5cdHJrZXlFdmVudCA9IC9ea2V5Lyxcblx0cm1vdXNlRXZlbnQgPSAvXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sXG5cdHJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSopKD86XFwuKC4rKXwpLztcblxuZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJldHVybkZhbHNlKCkge1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuLy8gZm9jdXMoKSBhbmQgYmx1cigpIGFyZSBhc3luY2hyb25vdXMsIGV4Y2VwdCB3aGVuIHRoZXkgYXJlIG5vLW9wLlxuLy8gU28gZXhwZWN0IGZvY3VzIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSBhY3RpdmUsXG4vLyBhbmQgYmx1ciB0byBiZSBzeW5jaHJvbm91cyB3aGVuIHRoZSBlbGVtZW50IGlzIG5vdCBhbHJlYWR5IGFjdGl2ZS5cbi8vIChmb2N1cyBhbmQgYmx1ciBhcmUgYWx3YXlzIHN5bmNocm9ub3VzIGluIG90aGVyIHN1cHBvcnRlZCBicm93c2Vycyxcbi8vIHRoaXMganVzdCBkZWZpbmVzIHdoZW4gd2UgY2FuIGNvdW50IG9uIGl0KS5cbmZ1bmN0aW9uIGV4cGVjdFN5bmMoIGVsZW0sIHR5cGUgKSB7XG5cdHJldHVybiAoIGVsZW0gPT09IHNhZmVBY3RpdmVFbGVtZW50KCkgKSA9PT0gKCB0eXBlID09PSBcImZvY3VzXCIgKTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIEFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGNhbiB0aHJvdyB1bmV4cGVjdGVkbHlcbi8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM5M1xuZnVuY3Rpb24gc2FmZUFjdGl2ZUVsZW1lbnQoKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdH0gY2F0Y2ggKCBlcnIgKSB7IH1cbn1cblxuZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHtcblx0dmFyIG9yaWdGbiwgdHlwZTtcblxuXHQvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnNcblx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKVxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApXG5cdFx0XHRkYXRhID0gZGF0YSB8fCBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0b24oIGVsZW0sIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xuXG5cdFx0Ly8gKCB0eXBlcywgZm4gKVxuXHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0ZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkge1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBkYXRhLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0fSBlbHNlIGlmICggIWZuICkge1xuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBvbmUgPT09IDEgKSB7XG5cdFx0b3JpZ0ZuID0gZm47XG5cdFx0Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mb1xuXHRcdFx0alF1ZXJ5KCkub2ZmKCBldmVudCApO1xuXHRcdFx0cmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fTtcblxuXHRcdC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuXG5cdFx0Zm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7XG5cdH1cblx0cmV0dXJuIGVsZW0uZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0alF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApO1xuXHR9ICk7XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG4gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLlxuICovXG5qUXVlcnkuZXZlbnQgPSB7XG5cblx0Z2xvYmFsOiB7fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7XG5cblx0XHR2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHQvLyBPbmx5IGF0dGFjaCBldmVudHMgdG8gb2JqZWN0cyB0aGF0IGFjY2VwdCBkYXRhXG5cdFx0aWYgKCAhYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlclxuXHRcdGlmICggaGFuZGxlci5oYW5kbGVyICkge1xuXHRcdFx0aGFuZGxlT2JqSW4gPSBoYW5kbGVyO1xuXHRcdFx0aGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7XG5cdFx0XHRzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSB0aGF0IGludmFsaWQgc2VsZWN0b3JzIHRocm93IGV4Y2VwdGlvbnMgYXQgYXR0YWNoIHRpbWVcblx0XHQvLyBFdmFsdWF0ZSBhZ2FpbnN0IGRvY3VtZW50RWxlbWVudCBpbiBjYXNlIGVsZW0gaXMgYSBub24tZWxlbWVudCBub2RlIChlLmcuLCBkb2N1bWVudClcblx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBkb2N1bWVudEVsZW1lbnQsIHNlbGVjdG9yICk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyXG5cdFx0aWYgKCAhaGFuZGxlci5ndWlkICkge1xuXHRcdFx0aGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKztcblx0XHR9XG5cblx0XHQvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG5cdFx0aWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IE9iamVjdC5jcmVhdGUoIG51bGwgKTtcblx0XHR9XG5cdFx0aWYgKCAhKCBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSApICkge1xuXHRcdFx0ZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHtcblxuXHRcdFx0XHQvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZFxuXHRcdFx0XHQvLyB3aGVuIGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSA/XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZVxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBUaGVyZSAqbXVzdCogYmUgYSB0eXBlLCBubyBhdHRhY2hpbmcgbmFtZXNwYWNlLW9ubHkgaGFuZGxlcnNcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGVcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblxuXHRcdFx0Ly8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzXG5cdFx0XHRoYW5kbGVPYmogPSBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdG9yaWdUeXBlOiBvcmlnVHlwZSxcblx0XHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdFx0aGFuZGxlcjogaGFuZGxlcixcblx0XHRcdFx0Z3VpZDogaGFuZGxlci5ndWlkLFxuXHRcdFx0XHRzZWxlY3Rvcjogc2VsZWN0b3IsXG5cdFx0XHRcdG5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksXG5cdFx0XHRcdG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApXG5cdFx0XHR9LCBoYW5kbGVPYmpJbiApO1xuXG5cdFx0XHQvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdFxuXHRcdFx0aWYgKCAhKCBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdICkgKSB7XG5cdFx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTtcblx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7XG5cblx0XHRcdFx0Ly8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlXG5cdFx0XHRcdGlmICggIXNwZWNpYWwuc2V0dXAgfHxcblx0XHRcdFx0XHRzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggc3BlY2lhbC5hZGQgKSB7XG5cdFx0XHRcdHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXG5cdFx0XHRcdGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udFxuXHRcdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb25cblx0XHRcdGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7XG5cdFx0fVxuXG5cdH0sXG5cblx0Ly8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50XG5cdHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7XG5cblx0XHR2YXIgaiwgb3JpZ0NvdW50LCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0aWYgKCAhZWxlbURhdGEgfHwgISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZFxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhpcyBuYW1lc3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnRcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBlc1sgdCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107XG5cdFx0XHR0bXAgPSB0bXBbIDIgXSAmJlxuXHRcdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKTtcblxuXHRcdFx0Ly8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50c1xuXHRcdFx0b3JpZ0NvdW50ID0gaiA9IGhhbmRsZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBdO1xuXG5cdFx0XHRcdGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiZcblx0XHRcdFx0XHQoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJlxuXHRcdFx0XHRcdCggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiZcblx0XHRcdFx0XHQoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8XG5cdFx0XHRcdFx0XHRzZWxlY3RvciA9PT0gXCIqKlwiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkge1xuXHRcdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaiwgMSApO1xuXG5cdFx0XHRcdFx0aWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc3BlY2lhbC5yZW1vdmUgKSB7XG5cdFx0XHRcdFx0XHRzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdFxuXHRcdFx0Ly8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpXG5cdFx0XHRpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGVsZXRlIGV2ZW50c1sgdHlwZSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSBkYXRhIGFuZCB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkXG5cdFx0aWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdGRpc3BhdGNoOiBmdW5jdGlvbiggbmF0aXZlRXZlbnQgKSB7XG5cblx0XHR2YXIgaSwgaiwgcmV0LCBtYXRjaGVkLCBoYW5kbGVPYmosIGhhbmRsZXJRdWV1ZSxcblx0XHRcdGFyZ3MgPSBuZXcgQXJyYXkoIGFyZ3VtZW50cy5sZW5ndGggKSxcblxuXHRcdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0XHRldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICksXG5cblx0XHRcdGhhbmRsZXJzID0gKFxuXHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKVxuXHRcdFx0XHQpWyBldmVudC50eXBlIF0gfHwgW10sXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGV2ZW50LnR5cGUgXSB8fCB7fTtcblxuXHRcdC8vIFVzZSB0aGUgZml4LWVkIGpRdWVyeS5FdmVudCByYXRoZXIgdGhhbiB0aGUgKHJlYWQtb25seSkgbmF0aXZlIGV2ZW50XG5cdFx0YXJnc1sgMCBdID0gZXZlbnQ7XG5cblx0XHRmb3IgKCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdGFyZ3NbIGkgXSA9IGFyZ3VtZW50c1sgaSBdO1xuXHRcdH1cblxuXHRcdGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGhpcztcblxuXHRcdC8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZSwgYW5kIGxldCBpdCBiYWlsIGlmIGRlc2lyZWRcblx0XHRpZiAoIHNwZWNpYWwucHJlRGlzcGF0Y2ggJiYgc3BlY2lhbC5wcmVEaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgaGFuZGxlcnNcblx0XHRoYW5kbGVyUXVldWUgPSBqUXVlcnkuZXZlbnQuaGFuZGxlcnMuY2FsbCggdGhpcywgZXZlbnQsIGhhbmRsZXJzICk7XG5cblx0XHQvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5IG1heSB3YW50IHRvIHN0b3AgcHJvcGFnYXRpb24gYmVuZWF0aCB1c1xuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBtYXRjaGVkID0gaGFuZGxlclF1ZXVlWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0ZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoZWQuZWxlbTtcblxuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggaGFuZGxlT2JqID0gbWF0Y2hlZC5oYW5kbGVyc1sgaisrIF0gKSAmJlxuXHRcdFx0XHQhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGUgZXZlbnQgaXMgbmFtZXNwYWNlZCwgdGhlbiBlYWNoIGhhbmRsZXIgaXMgb25seSBpbnZva2VkIGlmIGl0IGlzXG5cdFx0XHRcdC8vIHNwZWNpYWxseSB1bml2ZXJzYWwgb3IgaXRzIG5hbWVzcGFjZXMgYXJlIGEgc3VwZXJzZXQgb2YgdGhlIGV2ZW50J3MuXG5cdFx0XHRcdGlmICggIWV2ZW50LnJuYW1lc3BhY2UgfHwgaGFuZGxlT2JqLm5hbWVzcGFjZSA9PT0gZmFsc2UgfHxcblx0XHRcdFx0XHRldmVudC5ybmFtZXNwYWNlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHtcblxuXHRcdFx0XHRcdGV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajtcblx0XHRcdFx0XHRldmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7XG5cblx0XHRcdFx0XHRyZXQgPSAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlwZSBdIHx8IHt9ICkuaGFuZGxlIHx8XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlciApLmFwcGx5KCBtYXRjaGVkLmVsZW0sIGFyZ3MgKTtcblxuXHRcdFx0XHRcdGlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZXZlbnQucmVzdWx0ID0gcmV0ICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsIHRoZSBwb3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlXG5cdFx0aWYgKCBzcGVjaWFsLnBvc3REaXNwYXRjaCApIHtcblx0XHRcdHNwZWNpYWwucG9zdERpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHRoYW5kbGVyczogZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVycyApIHtcblx0XHR2YXIgaSwgaGFuZGxlT2JqLCBzZWwsIG1hdGNoZWRIYW5kbGVycywgbWF0Y2hlZFNlbGVjdG9ycyxcblx0XHRcdGhhbmRsZXJRdWV1ZSA9IFtdLFxuXHRcdFx0ZGVsZWdhdGVDb3VudCA9IGhhbmRsZXJzLmRlbGVnYXRlQ291bnQsXG5cdFx0XHRjdXIgPSBldmVudC50YXJnZXQ7XG5cblx0XHQvLyBGaW5kIGRlbGVnYXRlIGhhbmRsZXJzXG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50ICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OVxuXHRcdFx0Ly8gQmxhY2staG9sZSBTVkcgPHVzZT4gaW5zdGFuY2UgdHJlZXMgKHRyYWMtMTMxODApXG5cdFx0XHRjdXIubm9kZVR5cGUgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQyXG5cdFx0XHQvLyBTdXBwcmVzcyBzcGVjLXZpb2xhdGluZyBjbGlja3MgaW5kaWNhdGluZyBhIG5vbi1wcmltYXJ5IHBvaW50ZXIgYnV0dG9uICh0cmFjLTM4NjEpXG5cdFx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudC10eXBlLWNsaWNrXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHQvLyAuLi5idXQgbm90IGFycm93IGtleSBcImNsaWNrc1wiIG9mIHJhZGlvIGlucHV0cywgd2hpY2ggY2FuIGhhdmUgYGJ1dHRvbmAgLTEgKGdoLTIzNDMpXG5cdFx0XHQhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgZXZlbnQuYnV0dG9uID49IDEgKSApIHtcblxuXHRcdFx0Zm9yICggOyBjdXIgIT09IHRoaXM7IGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IHRoaXMgKSB7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgY2hlY2sgbm9uLWVsZW1lbnRzICgjMTMyMDgpXG5cdFx0XHRcdC8vIERvbid0IHByb2Nlc3MgY2xpY2tzIG9uIGRpc2FibGVkIGVsZW1lbnRzICgjNjkxMSwgIzgxNjUsICMxMTM4MiwgIzExNzY0KVxuXHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgY3VyLmRpc2FibGVkID09PSB0cnVlICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzID0gW107XG5cdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9ycyA9IHt9O1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTtcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKCMxMzIwMylcblx0XHRcdFx0XHRcdHNlbCA9IGhhbmRsZU9iai5zZWxlY3RvciArIFwiIFwiO1xuXG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdID0gaGFuZGxlT2JqLm5lZWRzQ29udGV4dCA/XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5KCBzZWwsIHRoaXMgKS5pbmRleCggY3VyICkgPiAtMSA6XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQoIHNlbCwgdGhpcywgbnVsbCwgWyBjdXIgXSApLmxlbmd0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkSGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogbWF0Y2hlZEhhbmRsZXJzIH0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIHJlbWFpbmluZyAoZGlyZWN0bHktYm91bmQpIGhhbmRsZXJzXG5cdFx0Y3VyID0gdGhpcztcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgPCBoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBoYW5kbGVycy5zbGljZSggZGVsZWdhdGVDb3VudCApIH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaGFuZGxlclF1ZXVlO1xuXHR9LFxuXG5cdGFkZFByb3A6IGZ1bmN0aW9uKCBuYW1lLCBob29rICkge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSwgbmFtZSwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblxuXHRcdFx0Z2V0OiBpc0Z1bmN0aW9uKCBob29rICkgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGhvb2soIHRoaXMub3JpZ2luYWxFdmVudCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50WyBuYW1lIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLCBuYW1lLCB7XG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Zml4OiBmdW5jdGlvbiggb3JpZ2luYWxFdmVudCApIHtcblx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRvcmlnaW5hbEV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTtcblx0fSxcblxuXHRzcGVjaWFsOiB7XG5cdFx0bG9hZDoge1xuXG5cdFx0XHQvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkXG5cdFx0XHRub0J1YmJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0Y2xpY2s6IHtcblxuXHRcdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgdG8gZW5zdXJlIGNvcnJlY3Qgc3RhdGUgZm9yIGNoZWNrYWJsZSBpbnB1dHNcblx0XHRcdHNldHVwOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdC8vIGRhdGFQcml2LnNldCggZWwsIFwiY2xpY2tcIiwgLi4uIClcblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiwgcmV0dXJuVHJ1ZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJpbmcgYSBjbGlja1xuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0sXG5cblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBzdXBwcmVzcyBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3Ncblx0XHRcdC8vIEFsc28gcHJldmVudCBpdCBpZiB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFja1xuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0cmV0dXJuIHJjaGVja2FibGVUeXBlLnRlc3QoIHRhcmdldC50eXBlICkgJiZcblx0XHRcdFx0XHR0YXJnZXQuY2xpY2sgJiYgbm9kZU5hbWUoIHRhcmdldCwgXCJpbnB1dFwiICkgJiZcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRhcmdldCwgXCJjbGlja1wiICkgfHxcblx0XHRcdFx0XHRub2RlTmFtZSggdGFyZ2V0LCBcImFcIiApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiZWZvcmV1bmxvYWQ6IHtcblx0XHRcdHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArXG5cdFx0XHRcdC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUgZmllbGQgaXMgbm90IHNldC5cblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIEVuc3VyZSB0aGUgcHJlc2VuY2Ugb2YgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBoYW5kbGVzIG1hbnVhbGx5LXRyaWdnZXJlZFxuLy8gc3ludGhldGljIGV2ZW50cyBieSBpbnRlcnJ1cHRpbmcgcHJvZ3Jlc3MgdW50aWwgcmVpbnZva2VkIGluIHJlc3BvbnNlIHRvXG4vLyAqbmF0aXZlKiBldmVudHMgdGhhdCBpdCBmaXJlcyBkaXJlY3RseSwgZW5zdXJpbmcgdGhhdCBzdGF0ZSBjaGFuZ2VzIGhhdmVcbi8vIGFscmVhZHkgb2NjdXJyZWQgYmVmb3JlIG90aGVyIGxpc3RlbmVycyBhcmUgaW52b2tlZC5cbmZ1bmN0aW9uIGxldmVyYWdlTmF0aXZlKCBlbCwgdHlwZSwgZXhwZWN0U3luYyApIHtcblxuXHQvLyBNaXNzaW5nIGV4cGVjdFN5bmMgaW5kaWNhdGVzIGEgdHJpZ2dlciBjYWxsLCB3aGljaCBtdXN0IGZvcmNlIHNldHVwIHRocm91Z2ggalF1ZXJ5LmV2ZW50LmFkZFxuXHRpZiAoICFleHBlY3RTeW5jICkge1xuXHRcdGlmICggZGF0YVByaXYuZ2V0KCBlbCwgdHlwZSApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwgcmV0dXJuVHJ1ZSApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZWdpc3RlciB0aGUgY29udHJvbGxlciBhcyBhIHNwZWNpYWwgdW5pdmVyc2FsIGhhbmRsZXIgZm9yIGFsbCBldmVudCBuYW1lc3BhY2VzXG5cdGRhdGFQcml2LnNldCggZWwsIHR5cGUsIGZhbHNlICk7XG5cdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCB7XG5cdFx0bmFtZXNwYWNlOiBmYWxzZSxcblx0XHRoYW5kbGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgbm90QXN5bmMsIHJlc3VsdCxcblx0XHRcdFx0c2F2ZWQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0aWYgKCAoIGV2ZW50LmlzVHJpZ2dlciAmIDEgKSAmJiB0aGlzWyB0eXBlIF0gKSB7XG5cblx0XHRcdFx0Ly8gSW50ZXJydXB0IHByb2Nlc3Npbmcgb2YgdGhlIG91dGVyIHN5bnRoZXRpYyAudHJpZ2dlcigpZWQgZXZlbnRcblx0XHRcdFx0Ly8gU2F2ZWQgZGF0YSBzaG91bGQgYmUgZmFsc2UgaW4gc3VjaCBjYXNlcywgYnV0IG1pZ2h0IGJlIGEgbGVmdG92ZXIgY2FwdHVyZSBvYmplY3Rcblx0XHRcdFx0Ly8gZnJvbSBhbiBhc3luYyBuYXRpdmUgaGFuZGxlciAoZ2gtNDM1MClcblx0XHRcdFx0aWYgKCAhc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgYXJndW1lbnRzIGZvciB1c2Ugd2hlbiBoYW5kbGluZyB0aGUgaW5uZXIgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdFx0Ly8gVGhlcmUgd2lsbCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IChhbiBldmVudCBvYmplY3QpLCBzbyB0aGlzIGFycmF5XG5cdFx0XHRcdFx0Ly8gd2lsbCBub3QgYmUgY29uZnVzZWQgd2l0aCBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0LlxuXHRcdFx0XHRcdHNhdmVkID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBzYXZlZCApO1xuXG5cdFx0XHRcdFx0Ly8gVHJpZ2dlciB0aGUgbmF0aXZlIGV2ZW50IGFuZCBjYXB0dXJlIGl0cyByZXN1bHRcblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHQvLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91c1xuXHRcdFx0XHRcdG5vdEFzeW5jID0gZXhwZWN0U3luYyggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdHRoaXNbIHR5cGUgXSgpO1xuXHRcdFx0XHRcdHJlc3VsdCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCB8fCBub3RBc3luYyApIHtcblx0XHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgZmFsc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSBvdXRlciBzeW50aGV0aWMgZXZlbnRcblx0XHRcdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQudmFsdWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoaXMgaXMgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IGZvciBhbiBldmVudCB3aXRoIGEgYnViYmxpbmcgc3Vycm9nYXRlXG5cdFx0XHRcdC8vIChmb2N1cyBvciBibHVyKSwgYXNzdW1lIHRoYXQgdGhlIHN1cnJvZ2F0ZSBhbHJlYWR5IHByb3BhZ2F0ZWQgZnJvbSB0cmlnZ2VyaW5nIHRoZVxuXHRcdFx0XHQvLyBuYXRpdmUgZXZlbnQgYW5kIHByZXZlbnQgdGhhdCBmcm9tIGhhcHBlbmluZyBhZ2FpbiBoZXJlLlxuXHRcdFx0XHQvLyBUaGlzIHRlY2huaWNhbGx5IGdldHMgdGhlIG9yZGVyaW5nIHdyb25nIHcuci50LiB0byBgLnRyaWdnZXIoKWAgKGluIHdoaWNoIHRoZVxuXHRcdFx0XHQvLyBidWJibGluZyBzdXJyb2dhdGUgcHJvcGFnYXRlcyAqYWZ0ZXIqIHRoZSBub24tYnViYmxpbmcgYmFzZSksIGJ1dCB0aGF0IHNlZW1zXG5cdFx0XHRcdC8vIGxlc3MgYmFkIHRoYW4gZHVwbGljYXRpb24uXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fSApLmRlbGVnYXRlVHlwZSApIHtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgbmF0aXZlIGV2ZW50IHRyaWdnZXJlZCBhYm92ZSwgZXZlcnl0aGluZyBpcyBub3cgaW4gb3JkZXJcblx0XHRcdC8vIEZpcmUgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IHdpdGggdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdC8vIC4uLmFuZCBjYXB0dXJlIHRoZSByZXN1bHRcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCB7XG5cdFx0XHRcdFx0dmFsdWU6IGpRdWVyeS5ldmVudC50cmlnZ2VyKFxuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHRcdC8vIEV4dGVuZCB3aXRoIHRoZSBwcm90b3R5cGUgdG8gcmVzZXQgdGhlIGFib3ZlIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHRqUXVlcnkuZXh0ZW5kKCBzYXZlZFsgMCBdLCBqUXVlcnkuRXZlbnQucHJvdG90eXBlICksXG5cdFx0XHRcdFx0XHRzYXZlZC5zbGljZSggMSApLFxuXHRcdFx0XHRcdFx0dGhpc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIEFib3J0IGhhbmRsaW5nIG9mIHRoZSBuYXRpdmUgZXZlbnRcblx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmpRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7XG5cblx0Ly8gVGhpcyBcImlmXCIgaXMgbmVlZGVkIGZvciBwbGFpbiBvYmplY3RzXG5cdGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkge1xuXHRcdGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7XG5cdH1cbn07XG5cbmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkge1xuXG5cdC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZFxuXHRpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHtcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gRXZlbnQgb2JqZWN0XG5cdGlmICggc3JjICYmIHNyYy50eXBlICkge1xuXHRcdHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYztcblx0XHR0aGlzLnR5cGUgPSBzcmMudHlwZTtcblxuXHRcdC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXG5cdFx0Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fFxuXHRcdFx0XHRzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5XG5cdFx0XHRcdHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0cmV0dXJuVHJ1ZSA6XG5cdFx0XHRyZXR1cm5GYWxzZTtcblxuXHRcdC8vIENyZWF0ZSB0YXJnZXQgcHJvcGVydGllc1xuXHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA8PTYgLSA3IG9ubHlcblx0XHQvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgIzEzMTQzKVxuXHRcdHRoaXMudGFyZ2V0ID0gKCBzcmMudGFyZ2V0ICYmIHNyYy50YXJnZXQubm9kZVR5cGUgPT09IDMgKSA/XG5cdFx0XHRzcmMudGFyZ2V0LnBhcmVudE5vZGUgOlxuXHRcdFx0c3JjLnRhcmdldDtcblxuXHRcdHRoaXMuY3VycmVudFRhcmdldCA9IHNyYy5jdXJyZW50VGFyZ2V0O1xuXHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IHNyYy5yZWxhdGVkVGFyZ2V0O1xuXG5cdC8vIEV2ZW50IHR5cGVcblx0fSBlbHNlIHtcblx0XHR0aGlzLnR5cGUgPSBzcmM7XG5cdH1cblxuXHQvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxuXHRpZiAoIHByb3BzICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZVxuXHR0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG5cblx0Ly8gTWFyayBpdCBhcyBmaXhlZFxuXHR0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTtcbn07XG5cbi8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZ1xuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbFxualF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IGpRdWVyeS5FdmVudCxcblx0aXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcblx0aXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzU2ltdWxhdGVkOiBmYWxzZSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fSxcblx0c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cblx0XHR0aGlzLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9XG59O1xuXG4vLyBJbmNsdWRlcyBhbGwgY29tbW9uIGV2ZW50IHByb3BzIGluY2x1ZGluZyBLZXlFdmVudCBhbmQgTW91c2VFdmVudCBzcGVjaWZpYyBwcm9wc1xualF1ZXJ5LmVhY2goIHtcblx0YWx0S2V5OiB0cnVlLFxuXHRidWJibGVzOiB0cnVlLFxuXHRjYW5jZWxhYmxlOiB0cnVlLFxuXHRjaGFuZ2VkVG91Y2hlczogdHJ1ZSxcblx0Y3RybEtleTogdHJ1ZSxcblx0ZGV0YWlsOiB0cnVlLFxuXHRldmVudFBoYXNlOiB0cnVlLFxuXHRtZXRhS2V5OiB0cnVlLFxuXHRwYWdlWDogdHJ1ZSxcblx0cGFnZVk6IHRydWUsXG5cdHNoaWZ0S2V5OiB0cnVlLFxuXHR2aWV3OiB0cnVlLFxuXHRcImNoYXJcIjogdHJ1ZSxcblx0Y29kZTogdHJ1ZSxcblx0Y2hhckNvZGU6IHRydWUsXG5cdGtleTogdHJ1ZSxcblx0a2V5Q29kZTogdHJ1ZSxcblx0YnV0dG9uOiB0cnVlLFxuXHRidXR0b25zOiB0cnVlLFxuXHRjbGllbnRYOiB0cnVlLFxuXHRjbGllbnRZOiB0cnVlLFxuXHRvZmZzZXRYOiB0cnVlLFxuXHRvZmZzZXRZOiB0cnVlLFxuXHRwb2ludGVySWQ6IHRydWUsXG5cdHBvaW50ZXJUeXBlOiB0cnVlLFxuXHRzY3JlZW5YOiB0cnVlLFxuXHRzY3JlZW5ZOiB0cnVlLFxuXHR0YXJnZXRUb3VjaGVzOiB0cnVlLFxuXHR0b0VsZW1lbnQ6IHRydWUsXG5cdHRvdWNoZXM6IHRydWUsXG5cblx0d2hpY2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgYnV0dG9uID0gZXZlbnQuYnV0dG9uO1xuXG5cdFx0Ly8gQWRkIHdoaWNoIGZvciBrZXkgZXZlbnRzXG5cdFx0aWYgKCBldmVudC53aGljaCA9PSBudWxsICYmIHJrZXlFdmVudC50ZXN0KCBldmVudC50eXBlICkgKSB7XG5cdFx0XHRyZXR1cm4gZXZlbnQuY2hhckNvZGUgIT0gbnVsbCA/IGV2ZW50LmNoYXJDb2RlIDogZXZlbnQua2V5Q29kZTtcblx0XHR9XG5cblx0XHQvLyBBZGQgd2hpY2ggZm9yIGNsaWNrOiAxID09PSBsZWZ0OyAyID09PSBtaWRkbGU7IDMgPT09IHJpZ2h0XG5cdFx0aWYgKCAhZXZlbnQud2hpY2ggJiYgYnV0dG9uICE9PSB1bmRlZmluZWQgJiYgcm1vdXNlRXZlbnQudGVzdCggZXZlbnQudHlwZSApICkge1xuXHRcdFx0aWYgKCBidXR0b24gJiAxICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBidXR0b24gJiAyICkge1xuXHRcdFx0XHRyZXR1cm4gMztcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBidXR0b24gJiA0ICkge1xuXHRcdFx0XHRyZXR1cm4gMjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LndoaWNoO1xuXHR9XG59LCBqUXVlcnkuZXZlbnQuYWRkUHJvcCApO1xuXG5qUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggdHlwZSwgZGVsZWdhdGVUeXBlICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdID0ge1xuXG5cdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XG5cdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImZvY3VzXCIsIC4uLiApXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiYmx1clwiLCAuLi4gKVxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUsIGV4cGVjdFN5bmMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlclxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdGRlbGVnYXRlVHlwZTogZGVsZWdhdGVUeXBlXG5cdH07XG59ICk7XG5cbi8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrc1xuLy8gc28gdGhhdCBldmVudCBkZWxlZ2F0aW9uIHdvcmtzIGluIGpRdWVyeS5cbi8vIERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0XG4vL1xuLy8gU3VwcG9ydDogU2FmYXJpIDcgb25seVxuLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6XG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NzAyNThcbi8vIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyAoaXQgZXhpc3RlZCBpbiBvbGRlciBDaHJvbWUgdmVyc2lvbnMgYXMgd2VsbCkuXG5qUXVlcnkuZWFjaCgge1xuXHRtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxuXHRtb3VzZWxlYXZlOiBcIm1vdXNlb3V0XCIsXG5cdHBvaW50ZXJlbnRlcjogXCJwb2ludGVyb3ZlclwiLFxuXHRwb2ludGVybGVhdmU6IFwicG9pbnRlcm91dFwiXG59LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0ge1xuXHRcdGRlbGVnYXRlVHlwZTogZml4LFxuXHRcdGJpbmRUeXBlOiBmaXgsXG5cblx0XHRoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciByZXQsXG5cdFx0XHRcdHRhcmdldCA9IHRoaXMsXG5cdFx0XHRcdHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LFxuXHRcdFx0XHRoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7XG5cblx0XHRcdC8vIEZvciBtb3VzZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuXG5cdFx0XHQvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvd1xuXHRcdFx0aWYgKCAhcmVsYXRlZCB8fCAoIHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSApICkge1xuXHRcdFx0XHRldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlO1xuXHRcdFx0XHRyZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBmaXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0b25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTtcblx0fSxcblx0b2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHtcblx0XHR2YXIgaGFuZGxlT2JqLCB0eXBlO1xuXHRcdGlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkge1xuXG5cdFx0XHQvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50XG5cdFx0XHRoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7XG5cdFx0XHRqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKFxuXHRcdFx0XHRoYW5kbGVPYmoubmFtZXNwYWNlID9cblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUgKyBcIi5cIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOlxuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSxcblx0XHRcdFx0aGFuZGxlT2JqLnNlbGVjdG9yLFxuXHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlclxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdIClcblx0XHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRcdHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzIFssIGZuXSApXG5cdFx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxudmFyXG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExLCBFZGdlIDEyIC0gMTMgb25seVxuXHQvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLlxuXHQvLyBTZWUgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy8xNzM2NTEyL1xuXHRybm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxcblxuXHQvLyBjaGVja2VkPVwiY2hlY2tlZFwiIG9yIGNoZWNrZWRcblx0cmNoZWNrZWQgPSAvY2hlY2tlZFxccyooPzpbXj1dfD1cXHMqLmNoZWNrZWQuKS9pLFxuXHRyY2xlYW5TY3JpcHQgPSAvXlxccyo8ISg/OlxcW0NEQVRBXFxbfC0tKXwoPzpcXF1cXF18LS0pPlxccyokL2c7XG5cbi8vIFByZWZlciBhIHRib2R5IG92ZXIgaXRzIHBhcmVudCB0YWJsZSBmb3IgY29udGFpbmluZyBuZXcgcm93c1xuZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkge1xuXHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRhYmxlXCIgKSAmJlxuXHRcdG5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsIFwidHJcIiApICkge1xuXG5cdFx0cmV0dXJuIGpRdWVyeSggZWxlbSApLmNoaWxkcmVuKCBcInRib2R5XCIgKVsgMCBdIHx8IGVsZW07XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuLy8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvblxuZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHtcblx0ZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSAhPT0gbnVsbCApICsgXCIvXCIgKyBlbGVtLnR5cGU7XG5cdHJldHVybiBlbGVtO1xufVxuZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHtcblx0aWYgKCAoIGVsZW0udHlwZSB8fCBcIlwiICkuc2xpY2UoIDAsIDUgKSA9PT0gXCJ0cnVlL1wiICkge1xuXHRcdGVsZW0udHlwZSA9IGVsZW0udHlwZS5zbGljZSggNSApO1xuXHR9IGVsc2Uge1xuXHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBcInR5cGVcIiApO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBpLCBsLCB0eXBlLCBwZGF0YU9sZCwgdWRhdGFPbGQsIHVkYXRhQ3VyLCBldmVudHM7XG5cblx0aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuXG5cdGlmICggZGF0YVByaXYuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0cGRhdGFPbGQgPSBkYXRhUHJpdi5nZXQoIHNyYyApO1xuXHRcdGV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50cztcblxuXHRcdGlmICggZXZlbnRzICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkZXN0LCBcImhhbmRsZSBldmVudHNcIiApO1xuXG5cdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gMi4gQ29weSB1c2VyIGRhdGFcblx0aWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHR1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3JjICk7XG5cdFx0dWRhdGFDdXIgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgdWRhdGFPbGQgKTtcblxuXHRcdGRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTtcblx0fVxufVxuXG4vLyBGaXggSUUgYnVncywgc2VlIHN1cHBvcnQgdGVzdHNcbmZ1bmN0aW9uIGZpeElucHV0KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHQvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi5cblx0aWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7XG5cdFx0ZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7XG5cblx0Ly8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnNcblx0fSBlbHNlIGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiB8fCBub2RlTmFtZSA9PT0gXCJ0ZXh0YXJlYVwiICkge1xuXHRcdGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTtcblx0fVxufVxuXG5mdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7XG5cblx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRhcmdzID0gZmxhdCggYXJncyApO1xuXG5cdHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYyxcblx0XHRpID0gMCxcblx0XHRsID0gY29sbGVjdGlvbi5sZW5ndGgsXG5cdFx0aU5vQ2xvbmUgPSBsIC0gMSxcblx0XHR2YWx1ZSA9IGFyZ3NbIDAgXSxcblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdFxuXHRpZiAoIHZhbHVlSXNGdW5jdGlvbiB8fFxuXHRcdFx0KCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7XG5cdFx0cmV0dXJuIGNvbGxlY3Rpb24uZWFjaCggZnVuY3Rpb24oIGluZGV4ICkge1xuXHRcdFx0dmFyIHNlbGYgPSBjb2xsZWN0aW9uLmVxKCBpbmRleCApO1xuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdGFyZ3NbIDAgXSA9IHZhbHVlLmNhbGwoIHRoaXMsIGluZGV4LCBzZWxmLmh0bWwoKSApO1xuXHRcdFx0fVxuXHRcdFx0ZG9tTWFuaXAoIHNlbGYsIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCBsICkge1xuXHRcdGZyYWdtZW50ID0gYnVpbGRGcmFnbWVudCggYXJncywgY29sbGVjdGlvblsgMCBdLm93bmVyRG9jdW1lbnQsIGZhbHNlLCBjb2xsZWN0aW9uLCBpZ25vcmVkICk7XG5cdFx0Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0aWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdGZyYWdtZW50ID0gZmlyc3Q7XG5cdFx0fVxuXG5cdFx0Ly8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrXG5cdFx0aWYgKCBmaXJzdCB8fCBpZ25vcmVkICkge1xuXHRcdFx0c2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsIFwic2NyaXB0XCIgKSwgZGlzYWJsZVNjcmlwdCApO1xuXHRcdFx0aGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoO1xuXG5cdFx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtXG5cdFx0XHQvLyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXBcblx0XHRcdC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuXG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdG5vZGUgPSBmcmFnbWVudDtcblxuXHRcdFx0XHRpZiAoIGkgIT09IGlOb0Nsb25lICkge1xuXHRcdFx0XHRcdG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTtcblxuXHRcdFx0XHRcdC8vIEtlZXAgcmVmZXJlbmNlcyB0byBjbG9uZWQgc2NyaXB0cyBmb3IgbGF0ZXIgcmVzdG9yYXRpb25cblx0XHRcdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cdFx0XHRcdGRvYyA9IHNjcmlwdHNbIHNjcmlwdHMubGVuZ3RoIC0gMSBdLm93bmVyRG9jdW1lbnQ7XG5cblx0XHRcdFx0Ly8gUmVlbmFibGUgc2NyaXB0c1xuXHRcdFx0XHRqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7XG5cblx0XHRcdFx0Ly8gRXZhbHVhdGUgZXhlY3V0YWJsZSBzY3JpcHRzIG9uIGZpcnN0IGRvY3VtZW50IGluc2VydGlvblxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHtcblx0XHRcdFx0XHRub2RlID0gc2NyaXB0c1sgaSBdO1xuXHRcdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggbm9kZS50eXBlIHx8IFwiXCIgKSAmJlxuXHRcdFx0XHRcdFx0IWRhdGFQcml2LmFjY2Vzcyggbm9kZSwgXCJnbG9iYWxFdmFsXCIgKSAmJlxuXHRcdFx0XHRcdFx0alF1ZXJ5LmNvbnRhaW5zKCBkb2MsIG5vZGUgKSApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCBub2RlLnNyYyAmJiAoIG5vZGUudHlwZSB8fCBcIlwiICkudG9Mb3dlckNhc2UoKSAgIT09IFwibW9kdWxlXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gT3B0aW9uYWwgQUpBWCBkZXBlbmRlbmN5LCBidXQgd29uJ3QgcnVuIHNjcmlwdHMgaWYgbm90IHByZXNlbnRcblx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuX2V2YWxVcmwgJiYgIW5vZGUubm9Nb2R1bGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5Ll9ldmFsVXJsKCBub2RlLnNyYywge1xuXHRcdFx0XHRcdFx0XHRcdFx0bm9uY2U6IG5vZGUubm9uY2UgfHwgbm9kZS5nZXRBdHRyaWJ1dGUoIFwibm9uY2VcIiApXG5cdFx0XHRcdFx0XHRcdFx0fSwgZG9jICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdERPTUV2YWwoIG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSggcmNsZWFuU2NyaXB0LCBcIlwiICksIG5vZGUsIGRvYyApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjb2xsZWN0aW9uO1xufVxuXG5mdW5jdGlvbiByZW1vdmUoIGVsZW0sIHNlbGVjdG9yLCBrZWVwRGF0YSApIHtcblx0dmFyIG5vZGUsXG5cdFx0bm9kZXMgPSBzZWxlY3RvciA/IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBlbGVtICkgOiBlbGVtLFxuXHRcdGkgPSAwO1xuXG5cdGZvciAoIDsgKCBub2RlID0gbm9kZXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRpZiAoICFrZWVwRGF0YSAmJiBub2RlLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBub2RlICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG5vZGUucGFyZW50Tm9kZSApIHtcblx0XHRcdGlmICgga2VlcERhdGEgJiYgaXNBdHRhY2hlZCggbm9kZSApICkge1xuXHRcdFx0XHRzZXRHbG9iYWxFdmFsKCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0fVxuXHRcdFx0bm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBub2RlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aHRtbFByZWZpbHRlcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0cmV0dXJuIGh0bWw7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHR2YXIgaSwgbCwgc3JjRWxlbWVudHMsIGRlc3RFbGVtZW50cyxcblx0XHRcdGNsb25lID0gZWxlbS5jbG9uZU5vZGUoIHRydWUgKSxcblx0XHRcdGluUGFnZSA9IGlzQXR0YWNoZWQoIGVsZW0gKTtcblxuXHRcdC8vIEZpeCBJRSBjbG9uaW5nIGlzc3Vlc1xuXHRcdGlmICggIXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgJiYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExICkgJiZcblx0XHRcdFx0IWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBXZSBlc2NoZXcgU2l6emxlIGhlcmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnM6IGh0dHBzOi8vanNwZXJmLmNvbS9nZXRhbGwtdnMtc2l6emxlLzJcblx0XHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTtcblx0XHRcdHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7XG5cblx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmaXhJbnB1dCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb3B5IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lXG5cdFx0aWYgKCBkYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0aWYgKCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdFx0c3JjRWxlbWVudHMgPSBzcmNFbGVtZW50cyB8fCBnZXRBbGwoIGVsZW0gKTtcblx0XHRcdFx0ZGVzdEVsZW1lbnRzID0gZGVzdEVsZW1lbnRzIHx8IGdldEFsbCggY2xvbmUgKTtcblxuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRjbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUsIFwic2NyaXB0XCIgKTtcblx0XHRpZiAoIGRlc3RFbGVtZW50cy5sZW5ndGggPiAwICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggZGVzdEVsZW1lbnRzLCAhaW5QYWdlICYmIGdldEFsbCggZWxlbSwgXCJzY3JpcHRcIiApICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHRoZSBjbG9uZWQgc2V0XG5cdFx0cmV0dXJuIGNsb25lO1xuXHR9LFxuXG5cdGNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zICkge1xuXHRcdHZhciBkYXRhLCBlbGVtLCB0eXBlLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPT0gdW5kZWZpbmVkOyBpKysgKSB7XG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblx0XHRcdFx0aWYgKCAoIGRhdGEgPSBlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0Zm9yICggdHlwZSBpbiBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsWyB0eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnkuZXZlbnQucmVtb3ZlJ3Mgb3ZlcmhlYWRcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGRhdGEuaGFuZGxlICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSApIHtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciApO1xuXHR9LFxuXG5cdHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS50ZXh0KCB0aGlzICkgOlxuXHRcdFx0XHR0aGlzLmVtcHR5KCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRwcmVwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0YXJnZXQuZmlyc3RDaGlsZCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRiZWZvcmU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGluZyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gdGhpc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXG5cdFx0XHRcdC8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzXG5cdFx0XHRcdGVsZW0udGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0ZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50cztcblx0XHRkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7XG5cblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jbG9uZSggdGhpcywgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0aHRtbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBlbGVtID0gdGhpc1sgMCBdIHx8IHt9LFxuXHRcdFx0XHRpID0gMCxcblx0XHRcdFx0bCA9IHRoaXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uaW5uZXJIVE1MO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1MXG5cdFx0XHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhcm5vSW5uZXJodG1sLnRlc3QoIHZhbHVlICkgJiZcblx0XHRcdFx0IXdyYXBNYXBbICggcnRhZ05hbWUuZXhlYyggdmFsdWUgKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKSBdICkge1xuXG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIHZhbHVlICk7XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0XHRlbGVtID0gdGhpc1sgaSBdIHx8IHt9O1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cdFx0XHRcdFx0XHRcdGVsZW0uaW5uZXJIVE1MID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbSA9IDA7XG5cblx0XHRcdFx0Ly8gSWYgdXNpbmcgaW5uZXJIVE1MIHRocm93cyBhbiBleGNlcHRpb24sIHVzZSB0aGUgZmFsbGJhY2sgbWV0aG9kXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge31cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHR0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApO1xuXHRcdFx0fVxuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0cmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpZ25vcmVkID0gW107XG5cblx0XHQvLyBNYWtlIHRoZSBjaGFuZ2VzLCByZXBsYWNpbmcgZWFjaCBub24taWdub3JlZCBjb250ZXh0IGVsZW1lbnQgd2l0aCB0aGUgbmV3IGNvbnRlbnRcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuXG5cdFx0XHRpZiAoIGpRdWVyeS5pbkFycmF5KCB0aGlzLCBpZ25vcmVkICkgPCAwICkge1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIHRoaXMgKSApO1xuXHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0XHRwYXJlbnQucmVwbGFjZUNoaWxkKCBlbGVtLCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEZvcmNlIGNhbGxiYWNrIGludm9jYXRpb25cblx0XHR9LCBpZ25vcmVkICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIHtcblx0YXBwZW5kVG86IFwiYXBwZW5kXCIsXG5cdHByZXBlbmRUbzogXCJwcmVwZW5kXCIsXG5cdGluc2VydEJlZm9yZTogXCJiZWZvcmVcIixcblx0aW5zZXJ0QWZ0ZXI6IFwiYWZ0ZXJcIixcblx0cmVwbGFjZUFsbDogXCJyZXBsYWNlV2l0aFwiXG59LCBmdW5jdGlvbiggbmFtZSwgb3JpZ2luYWwgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBlbGVtcyxcblx0XHRcdHJldCA9IFtdLFxuXHRcdFx0aW5zZXJ0ID0galF1ZXJ5KCBzZWxlY3RvciApLFxuXHRcdFx0bGFzdCA9IGluc2VydC5sZW5ndGggLSAxLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7IGkgPD0gbGFzdDsgaSsrICkge1xuXHRcdFx0ZWxlbXMgPSBpID09PSBsYXN0ID8gdGhpcyA6IHRoaXMuY2xvbmUoIHRydWUgKTtcblx0XHRcdGpRdWVyeSggaW5zZXJ0WyBpIF0gKVsgb3JpZ2luYWwgXSggZWxlbXMgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHQvLyAuZ2V0KCkgYmVjYXVzZSBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRwdXNoLmFwcGx5KCByZXQsIGVsZW1zLmdldCgpICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQgKTtcblx0fTtcbn0gKTtcbnZhciBybnVtbm9ucHggPSBuZXcgUmVnRXhwKCBcIl4oXCIgKyBwbnVtICsgXCIpKD8hcHgpW2EteiVdKyRcIiwgXCJpXCIgKTtcblxudmFyIGdldFN0eWxlcyA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5LCBGaXJlZm94IDw9MzAgKCMxNTA5OCwgIzE0MTUwKVxuXHRcdC8vIElFIHRocm93cyBvbiBlbGVtZW50cyBjcmVhdGVkIGluIHBvcHVwc1xuXHRcdC8vIEZGIG1lYW53aGlsZSB0aHJvd3Mgb24gZnJhbWUgZWxlbWVudHMgdGhyb3VnaCBcImRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGVcIlxuXHRcdHZhciB2aWV3ID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXG5cdFx0aWYgKCAhdmlldyB8fCAhdmlldy5vcGVuZXIgKSB7XG5cdFx0XHR2aWV3ID0gd2luZG93O1xuXHRcdH1cblxuXHRcdHJldHVybiB2aWV3LmdldENvbXB1dGVkU3R5bGUoIGVsZW0gKTtcblx0fTtcblxudmFyIHN3YXAgPSBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2sgKSB7XG5cdHZhciByZXQsIG5hbWUsXG5cdFx0b2xkID0ge307XG5cblx0Ly8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07XG5cdH1cblxuXHRyZXQgPSBjYWxsYmFjay5jYWxsKCBlbGVtICk7XG5cblx0Ly8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59O1xuXG5cbnZhciByYm94U3R5bGUgPSBuZXcgUmVnRXhwKCBjc3NFeHBhbmQuam9pbiggXCJ8XCIgKSwgXCJpXCIgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cblx0Ly8gRXhlY3V0aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUgb25seSBvbmUgbGF5b3V0XG5cdC8vIHNvIHRoZXkncmUgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHRoZSBzZWNvbmQgY29tcHV0YXRpb24uXG5cdGZ1bmN0aW9uIGNvbXB1dGVTdHlsZVRlc3RzKCkge1xuXG5cdFx0Ly8gVGhpcyBpcyBhIHNpbmdsZXRvbiwgd2UgbmVlZCB0byBleGVjdXRlIGl0IG9ubHkgb25jZVxuXHRcdGlmICggIWRpdiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O1wiICtcblx0XHRcdFwibWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowXCI7XG5cdFx0ZGl2LnN0eWxlLmNzc1RleHQgPVxuXHRcdFx0XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7XCIgK1xuXHRcdFx0XCJtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O1wiICtcblx0XHRcdFwid2lkdGg6NjAlO3RvcDoxJVwiO1xuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApO1xuXG5cdFx0dmFyIGRpdlN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiApO1xuXHRcdHBpeGVsUG9zaXRpb25WYWwgPSBkaXZTdHlsZS50b3AgIT09IFwiMSVcIjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIEZpcmVmb3ggPD0zIC0gNDRcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnRWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLm1hcmdpbkxlZnQgKSA9PT0gMTI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBTYWZhcmkgPD05LjEgLSAxMC4xLCBpT1MgPD03LjAgLSA5LjNcblx0XHQvLyBTb21lIHN0eWxlcyBjb21lIGJhY2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZlbiB0aG91Z2ggdGhleSBzaG91bGRuJ3Rcblx0XHRkaXYuc3R5bGUucmlnaHQgPSBcIjYwJVwiO1xuXHRcdHBpeGVsQm94U3R5bGVzVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5yaWdodCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG1pc3JlcG9ydGluZyBvZiBjb250ZW50IGRpbWVuc2lvbnMgZm9yIGJveC1zaXppbmc6Ym9yZGVyLWJveCBlbGVtZW50c1xuXHRcdGJveFNpemluZ1JlbGlhYmxlVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS53aWR0aCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdC8vIERldGVjdCBvdmVyZmxvdzpzY3JvbGwgc2NyZXdpbmVzcyAoZ2gtMzY5OSlcblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD02NFxuXHRcdC8vIERvbid0IGdldCB0cmlja2VkIHdoZW4gem9vbSBhZmZlY3RzIG9mZnNldFdpZHRoIChnaC00MDI5KVxuXHRcdGRpdi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblx0XHRzY3JvbGxib3hTaXplVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXYub2Zmc2V0V2lkdGggLyAzICkgPT09IDEyO1xuXG5cdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcblxuXHRcdC8vIE51bGxpZnkgdGhlIGRpdiBzbyBpdCB3b3VsZG4ndCBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeSBhbmRcblx0XHQvLyBpdCB3aWxsIGFsc28gYmUgYSBzaWduIHRoYXQgY2hlY2tzIGFscmVhZHkgcGVyZm9ybWVkXG5cdFx0ZGl2ID0gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJvdW5kUGl4ZWxNZWFzdXJlcyggbWVhc3VyZSApIHtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCggcGFyc2VGbG9hdCggbWVhc3VyZSApICk7XG5cdH1cblxuXHR2YXIgcGl4ZWxQb3NpdGlvblZhbCwgYm94U2l6aW5nUmVsaWFibGVWYWwsIHNjcm9sbGJveFNpemVWYWwsIHBpeGVsQm94U3R5bGVzVmFsLFxuXHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsLCByZWxpYWJsZU1hcmdpbkxlZnRWYWwsXG5cdFx0Y29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLFxuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHQvLyBGaW5pc2ggZWFybHkgaW4gbGltaXRlZCAobm9uLWJyb3dzZXIpIGVudmlyb25tZW50c1xuXHRpZiAoICFkaXYuc3R5bGUgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBTdHlsZSBvZiBjbG9uZWQgZWxlbWVudCBhZmZlY3RzIHNvdXJjZSBlbGVtZW50IGNsb25lZCAoIzg5MDgpXG5cdGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiY29udGVudC1ib3hcIjtcblx0ZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJcIjtcblx0c3VwcG9ydC5jbGVhckNsb25lU3R5bGUgPSBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09IFwiY29udGVudC1ib3hcIjtcblxuXHRqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7XG5cdFx0Ym94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBib3hTaXppbmdSZWxpYWJsZVZhbDtcblx0XHR9LFxuXHRcdHBpeGVsQm94U3R5bGVzOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxCb3hTdHlsZXNWYWw7XG5cdFx0fSxcblx0XHRwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxQb3NpdGlvblZhbDtcblx0XHR9LFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdDogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHJlbGlhYmxlTWFyZ2luTGVmdFZhbDtcblx0XHR9LFxuXHRcdHNjcm9sbGJveFNpemU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBzY3JvbGxib3hTaXplVmFsO1xuXHRcdH0sXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBtaXNyZXBvcnQgYGdldENvbXB1dGVkU3R5bGVgIG9mIHRhYmxlIHJvd3Mgd2l0aCB3aWR0aC9oZWlnaHRcblx0XHQvLyBzZXQgaW4gQ1NTIHdoaWxlIGBvZmZzZXQqYCBwcm9wZXJ0aWVzIHJlcG9ydCBjb3JyZWN0IHZhbHVlcy5cblx0XHQvLyBCZWhhdmlvciBpbiBJRSA5IGlzIG1vcmUgc3VidGxlIHRoYW4gaW4gbmV3ZXIgdmVyc2lvbnMgJiBpdCBwYXNzZXNcblx0XHQvLyBzb21lIHZlcnNpb25zIG9mIHRoaXMgdGVzdDsgbWFrZSBzdXJlIG5vdCB0byBtYWtlIGl0IHBhc3MgdGhlcmUhXG5cdFx0cmVsaWFibGVUckRpbWVuc2lvbnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRhYmxlLCB0ciwgdHJDaGlsZCwgdHJTdHlsZTtcblx0XHRcdGlmICggcmVsaWFibGVUckRpbWVuc2lvbnNWYWwgPT0gbnVsbCApIHtcblx0XHRcdFx0dGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInRhYmxlXCIgKTtcblx0XHRcdFx0dHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInRyXCIgKTtcblx0XHRcdFx0dHJDaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHRcdFx0XHR0YWJsZS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4XCI7XG5cdFx0XHRcdHRyLnN0eWxlLmhlaWdodCA9IFwiMXB4XCI7XG5cdFx0XHRcdHRyQ2hpbGQuc3R5bGUuaGVpZ2h0ID0gXCI5cHhcIjtcblxuXHRcdFx0XHRkb2N1bWVudEVsZW1lbnRcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRhYmxlIClcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRyIClcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRyQ2hpbGQgKTtcblxuXHRcdFx0XHR0clN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIHRyICk7XG5cdFx0XHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsID0gcGFyc2VJbnQoIHRyU3R5bGUuaGVpZ2h0ICkgPiAzO1xuXG5cdFx0XHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggdGFibGUgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZWxpYWJsZVRyRGltZW5zaW9uc1ZhbDtcblx0XHR9XG5cdH0gKTtcbn0gKSgpO1xuXG5cbmZ1bmN0aW9uIGN1ckNTUyggZWxlbSwgbmFtZSwgY29tcHV0ZWQgKSB7XG5cdHZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLCByZXQsXG5cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDUxK1xuXHRcdC8vIFJldHJpZXZpbmcgc3R5bGUgYmVmb3JlIGNvbXB1dGVkIHNvbWVob3dcblx0XHQvLyBmaXhlcyBhbiBpc3N1ZSB3aXRoIGdldHRpbmcgd3JvbmcgdmFsdWVzXG5cdFx0Ly8gb24gZGV0YWNoZWQgZWxlbWVudHNcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0Y29tcHV0ZWQgPSBjb21wdXRlZCB8fCBnZXRTdHlsZXMoIGVsZW0gKTtcblxuXHQvLyBnZXRQcm9wZXJ0eVZhbHVlIGlzIG5lZWRlZCBmb3I6XG5cdC8vICAgLmNzcygnZmlsdGVyJykgKElFIDkgb25seSwgIzEyNTM3KVxuXHQvLyAgIC5jc3MoJy0tY3VzdG9tUHJvcGVydHkpICgjMzE0NClcblx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRyZXQgPSBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5hbWUgXTtcblxuXHRcdGlmICggcmV0ID09PSBcIlwiICYmICFpc0F0dGFjaGVkKCBlbGVtICkgKSB7XG5cdFx0XHRyZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBBIHRyaWJ1dGUgdG8gdGhlIFwiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkc1wiXG5cdFx0Ly8gQW5kcm9pZCBCcm93c2VyIHJldHVybnMgcGVyY2VudGFnZSBmb3Igc29tZSB2YWx1ZXMsXG5cdFx0Ly8gYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVscy5cblx0XHQvLyBUaGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6XG5cdFx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXNcblx0XHRpZiAoICFzdXBwb3J0LnBpeGVsQm94U3R5bGVzKCkgJiYgcm51bW5vbnB4LnRlc3QoIHJldCApICYmIHJib3hTdHlsZS50ZXN0KCBuYW1lICkgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXNcblx0XHRcdHdpZHRoID0gc3R5bGUud2lkdGg7XG5cdFx0XHRtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoO1xuXHRcdFx0bWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDtcblxuXHRcdFx0Ly8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dFxuXHRcdFx0c3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0O1xuXHRcdFx0cmV0ID0gY29tcHV0ZWQud2lkdGg7XG5cblx0XHRcdC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXNcblx0XHRcdHN0eWxlLndpZHRoID0gd2lkdGg7XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoO1xuXHRcdFx0c3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmV0ICE9PSB1bmRlZmluZWQgP1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdC8vIElFIHJldHVybnMgekluZGV4IHZhbHVlIGFzIGFuIGludGVnZXIuXG5cdFx0cmV0ICsgXCJcIiA6XG5cdFx0cmV0O1xufVxuXG5cbmZ1bmN0aW9uIGFkZEdldEhvb2tJZiggY29uZGl0aW9uRm4sIGhvb2tGbiApIHtcblxuXHQvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFsbHkgbmVlZGVkLlxuXHRyZXR1cm4ge1xuXHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGNvbmRpdGlvbkZuKCkgKSB7XG5cblx0XHRcdFx0Ly8gSG9vayBub3QgbmVlZGVkIChvciBpdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgaXQgZHVlXG5cdFx0XHRcdC8vIHRvIG1pc3NpbmcgZGVwZW5kZW5jeSksIHJlbW92ZSBpdC5cblx0XHRcdFx0ZGVsZXRlIHRoaXMuZ2V0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhvb2sgbmVlZGVkOyByZWRlZmluZSBpdCBzbyB0aGF0IHRoZSBzdXBwb3J0IHRlc3QgaXMgbm90IGV4ZWN1dGVkIGFnYWluLlxuXHRcdFx0cmV0dXJuICggdGhpcy5nZXQgPSBob29rRm4gKS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fVxuXHR9O1xufVxuXG5cbnZhciBjc3NQcmVmaXhlcyA9IFsgXCJXZWJraXRcIiwgXCJNb3pcIiwgXCJtc1wiIF0sXG5cdGVtcHR5U3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkuc3R5bGUsXG5cdHZlbmRvclByb3BzID0ge307XG5cbi8vIFJldHVybiBhIHZlbmRvci1wcmVmaXhlZCBwcm9wZXJ0eSBvciB1bmRlZmluZWRcbmZ1bmN0aW9uIHZlbmRvclByb3BOYW1lKCBuYW1lICkge1xuXG5cdC8vIENoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXNcblx0dmFyIGNhcE5hbWUgPSBuYW1lWyAwIF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoIDEgKSxcblx0XHRpID0gY3NzUHJlZml4ZXMubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdG5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTtcblx0XHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH1cblx0fVxufVxuXG4vLyBSZXR1cm4gYSBwb3RlbnRpYWxseS1tYXBwZWQgalF1ZXJ5LmNzc1Byb3BzIG9yIHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eVxuZnVuY3Rpb24gZmluYWxQcm9wTmFtZSggbmFtZSApIHtcblx0dmFyIGZpbmFsID0galF1ZXJ5LmNzc1Byb3BzWyBuYW1lIF0gfHwgdmVuZG9yUHJvcHNbIG5hbWUgXTtcblxuXHRpZiAoIGZpbmFsICkge1xuXHRcdHJldHVybiBmaW5hbDtcblx0fVxuXHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRyZXR1cm4gbmFtZTtcblx0fVxuXHRyZXR1cm4gdmVuZG9yUHJvcHNbIG5hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBuYW1lICkgfHwgbmFtZTtcbn1cblxuXG52YXJcblxuXHQvLyBTd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlXG5cdC8vIGV4Y2VwdCBcInRhYmxlXCIsIFwidGFibGUtY2VsbFwiLCBvciBcInRhYmxlLWNhcHRpb25cIlxuXHQvLyBTZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXlcblx0cmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFxuXHRyY3VzdG9tUHJvcCA9IC9eLS0vLFxuXHRjc3NTaG93ID0geyBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLCB2aXNpYmlsaXR5OiBcImhpZGRlblwiLCBkaXNwbGF5OiBcImJsb2NrXCIgfSxcblx0Y3NzTm9ybWFsVHJhbnNmb3JtID0ge1xuXHRcdGxldHRlclNwYWNpbmc6IFwiMFwiLFxuXHRcdGZvbnRXZWlnaHQ6IFwiNDAwXCJcblx0fTtcblxuZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIF9lbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7XG5cblx0Ly8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlblxuXHQvLyBub3JtYWxpemVkIGF0IHRoaXMgcG9pbnRcblx0dmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICk7XG5cdHJldHVybiBtYXRjaGVzID9cblxuXHRcdC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkIFwic3VidHJhY3RcIiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzXG5cdFx0TWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSA6XG5cdFx0dmFsdWU7XG59XG5cbmZ1bmN0aW9uIGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBib3gsIGlzQm9yZGVyQm94LCBzdHlsZXMsIGNvbXB1dGVkVmFsICkge1xuXHR2YXIgaSA9IGRpbWVuc2lvbiA9PT0gXCJ3aWR0aFwiID8gMSA6IDAsXG5cdFx0ZXh0cmEgPSAwLFxuXHRcdGRlbHRhID0gMDtcblxuXHQvLyBBZGp1c3RtZW50IG1heSBub3QgYmUgbmVjZXNzYXJ5XG5cdGlmICggYm94ID09PSAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICkgKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XG5cblx0XHQvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW5cblx0XHRpZiAoIGJveCA9PT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIGJveCArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgY29udGVudC1ib3gsIHdlJ3JlIHNlZWtpbmcgXCJwYWRkaW5nXCIgb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiXG5cdFx0aWYgKCAhaXNCb3JkZXJCb3ggKSB7XG5cblx0XHRcdC8vIEFkZCBwYWRkaW5nXG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gRm9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIiwgYWRkIGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwicGFkZGluZ1wiICkge1xuXHRcdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBCdXQgc3RpbGwga2VlcCB0cmFjayBvZiBpdCBvdGhlcndpc2Vcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGV4dHJhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgYm9yZGVyLWJveCAoY29udGVudCArIHBhZGRpbmcgKyBib3JkZXIpLCB3ZSdyZSBzZWVraW5nIFwiY29udGVudFwiIG9yXG5cdFx0Ly8gXCJwYWRkaW5nXCIgb3IgXCJtYXJnaW5cIlxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiwgc3VidHJhY3QgcGFkZGluZ1xuXHRcdFx0aWYgKCBib3ggPT09IFwiY29udGVudFwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiIG9yIFwicGFkZGluZ1wiLCBzdWJ0cmFjdCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFjY291bnQgZm9yIHBvc2l0aXZlIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXIgd2hlbiByZXF1ZXN0ZWQgYnkgcHJvdmlkaW5nIGNvbXB1dGVkVmFsXG5cdGlmICggIWlzQm9yZGVyQm94ICYmIGNvbXB1dGVkVmFsID49IDAgKSB7XG5cblx0XHQvLyBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgYSByb3VuZGVkIHN1bSBvZiBjb250ZW50LCBwYWRkaW5nLCBzY3JvbGwgZ3V0dGVyLCBhbmQgYm9yZGVyXG5cdFx0Ly8gQXNzdW1pbmcgaW50ZWdlciBzY3JvbGwgZ3V0dGVyLCBzdWJ0cmFjdCB0aGUgcmVzdCBhbmQgcm91bmQgZG93blxuXHRcdGRlbHRhICs9IE1hdGgubWF4KCAwLCBNYXRoLmNlaWwoXG5cdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0Y29tcHV0ZWRWYWwgLVxuXHRcdFx0ZGVsdGEgLVxuXHRcdFx0ZXh0cmEgLVxuXHRcdFx0MC41XG5cblx0XHQvLyBJZiBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgdW5rbm93biwgdGhlbiB3ZSBjYW4ndCBkZXRlcm1pbmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlclxuXHRcdC8vIFVzZSBhbiBleHBsaWNpdCB6ZXJvIHRvIGF2b2lkIE5hTiAoZ2gtMzk2NClcblx0XHQpICkgfHwgMDtcblx0fVxuXG5cdHJldHVybiBkZWx0YTtcbn1cblxuZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApIHtcblxuXHQvLyBTdGFydCB3aXRoIGNvbXB1dGVkIHN0eWxlXG5cdHZhciBzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTQzMjIpLlxuXHRcdC8vIEZha2UgY29udGVudC1ib3ggdW50aWwgd2Uga25vdyBpdCdzIG5lZWRlZCB0byBrbm93IHRoZSB0cnVlIHZhbHVlLlxuXHRcdGJveFNpemluZ05lZWRlZCA9ICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgfHwgZXh0cmEsXG5cdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94LFxuXG5cdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBkaW1lbnNpb24sIHN0eWxlcyApLFxuXHRcdG9mZnNldFByb3AgPSBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApO1xuXG5cdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHQvLyBSZXR1cm4gYSBjb25mb3VuZGluZyBub24tcGl4ZWwgdmFsdWUgb3IgZmVpZ24gaWdub3JhbmNlLCBhcyBhcHByb3ByaWF0ZS5cblx0aWYgKCBybnVtbm9ucHgudGVzdCggdmFsICkgKSB7XG5cdFx0aWYgKCAhZXh0cmEgKSB7XG5cdFx0XHRyZXR1cm4gdmFsO1xuXHRcdH1cblx0XHR2YWwgPSBcImF1dG9cIjtcblx0fVxuXG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gVXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3Igd2hlbiBib3ggc2l6aW5nIGlzIHVucmVsaWFibGUuXG5cdC8vIEluIHRob3NlIGNhc2VzLCB0aGUgY29tcHV0ZWQgdmFsdWUgY2FuIGJlIHRydXN0ZWQgdG8gYmUgYm9yZGVyLWJveC5cblx0aWYgKCAoICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgJiYgaXNCb3JkZXJCb3ggfHxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDEwIC0gMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBtaXNyZXBvcnQgYGdldENvbXB1dGVkU3R5bGVgIG9mIHRhYmxlIHJvd3Mgd2l0aCB3aWR0aC9oZWlnaHRcblx0XHQvLyBzZXQgaW4gQ1NTIHdoaWxlIGBvZmZzZXQqYCBwcm9wZXJ0aWVzIHJlcG9ydCBjb3JyZWN0IHZhbHVlcy5cblx0XHQvLyBJbnRlcmVzdGluZ2x5LCBpbiBzb21lIGNhc2VzIElFIDkgZG9lc24ndCBzdWZmZXIgZnJvbSB0aGlzIGlzc3VlLlxuXHRcdCFzdXBwb3J0LnJlbGlhYmxlVHJEaW1lbnNpb25zKCkgJiYgbm9kZU5hbWUoIGVsZW0sIFwidHJcIiApIHx8XG5cblx0XHQvLyBGYWxsIGJhY2sgdG8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IHdoZW4gdmFsdWUgaXMgXCJhdXRvXCJcblx0XHQvLyBUaGlzIGhhcHBlbnMgZm9yIGlubGluZSBlbGVtZW50cyB3aXRoIG5vIGV4cGxpY2l0IHNldHRpbmcgKGdoLTM1NzEpXG5cdFx0dmFsID09PSBcImF1dG9cIiB8fFxuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSAtIDQuMyBvbmx5XG5cdFx0Ly8gQWxzbyB1c2Ugb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGZvciBtaXNyZXBvcnRlZCBpbmxpbmUgZGltZW5zaW9ucyAoZ2gtMzYwMilcblx0XHQhcGFyc2VGbG9hdCggdmFsICkgJiYgalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJpbmxpbmVcIiApICYmXG5cblx0XHQvLyBNYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSAmIGNvbm5lY3RlZFxuXHRcdGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cblx0XHRpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCI7XG5cblx0XHQvLyBXaGVyZSBhdmFpbGFibGUsIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBhcHByb3hpbWF0ZSBib3JkZXIgYm94IGRpbWVuc2lvbnMuXG5cdFx0Ly8gV2hlcmUgbm90IGF2YWlsYWJsZSAoZS5nLiwgU1ZHKSwgYXNzdW1lIHVucmVsaWFibGUgYm94LXNpemluZyBhbmQgaW50ZXJwcmV0IHRoZVxuXHRcdC8vIHJldHJpZXZlZCB2YWx1ZSBhcyBhIGNvbnRlbnQgYm94IGRpbWVuc2lvbi5cblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gb2Zmc2V0UHJvcCBpbiBlbGVtO1xuXHRcdGlmICggdmFsdWVJc0JvcmRlckJveCApIHtcblx0XHRcdHZhbCA9IGVsZW1bIG9mZnNldFByb3AgXTtcblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgXCJcIiBhbmQgYXV0b1xuXHR2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwO1xuXG5cdC8vIEFkanVzdCBmb3IgdGhlIGVsZW1lbnQncyBib3ggbW9kZWxcblx0cmV0dXJuICggdmFsICtcblx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRlbGVtLFxuXHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0ZXh0cmEgfHwgKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApLFxuXHRcdFx0dmFsdWVJc0JvcmRlckJveCxcblx0XHRcdHN0eWxlcyxcblxuXHRcdFx0Ly8gUHJvdmlkZSB0aGUgY3VycmVudCBjb21wdXRlZCBzaXplIHRvIHJlcXVlc3Qgc2Nyb2xsIGd1dHRlciBjYWxjdWxhdGlvbiAoZ2gtMzU4OSlcblx0XHRcdHZhbFxuXHRcdClcblx0KSArIFwicHhcIjtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdFxuXHQvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHlcblx0Y3NzSG9va3M6IHtcblx0XHRvcGFjaXR5OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHRcdC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5XG5cdFx0XHRcdFx0dmFyIHJldCA9IGN1ckNTUyggZWxlbSwgXCJvcGFjaXR5XCIgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmV0ID09PSBcIlwiID8gXCIxXCIgOiByZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0Ly8gRG9uJ3QgYXV0b21hdGljYWxseSBhZGQgXCJweFwiIHRvIHRoZXNlIHBvc3NpYmx5LXVuaXRsZXNzIHByb3BlcnRpZXNcblx0Y3NzTnVtYmVyOiB7XG5cdFx0XCJhbmltYXRpb25JdGVyYXRpb25Db3VudFwiOiB0cnVlLFxuXHRcdFwiY29sdW1uQ291bnRcIjogdHJ1ZSxcblx0XHRcImZpbGxPcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJmbGV4R3Jvd1wiOiB0cnVlLFxuXHRcdFwiZmxleFNocmlua1wiOiB0cnVlLFxuXHRcdFwiZm9udFdlaWdodFwiOiB0cnVlLFxuXHRcdFwiZ3JpZEFyZWFcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5cIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5FbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5TdGFydFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1wiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd0VuZFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1N0YXJ0XCI6IHRydWUsXG5cdFx0XCJsaW5lSGVpZ2h0XCI6IHRydWUsXG5cdFx0XCJvcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJvcmRlclwiOiB0cnVlLFxuXHRcdFwib3JwaGFuc1wiOiB0cnVlLFxuXHRcdFwid2lkb3dzXCI6IHRydWUsXG5cdFx0XCJ6SW5kZXhcIjogdHJ1ZSxcblx0XHRcInpvb21cIjogdHJ1ZVxuXHR9LFxuXG5cdC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmVcblx0Ly8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZVxuXHRjc3NQcm9wczoge30sXG5cblx0Ly8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9uIGEgRE9NIE5vZGVcblx0c3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7XG5cblx0XHQvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWVcblx0XHR2YXIgcmV0LCB0eXBlLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICksXG5cdFx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBxdWVyeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24sIHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWVcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0XHQvLyBDb252ZXJ0IFwiKz1cIiBvciBcIi09XCIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgJiYgKCByZXQgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJiByZXRbIDEgXSApIHtcblx0XHRcdFx0dmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApO1xuXG5cdFx0XHRcdC8vIEZpeGVzIGJ1ZyAjOTIzN1xuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICgjNzExNilcblx0XHRcdGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBudW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRkIHRoZSB1bml0IChleGNlcHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpXG5cdFx0XHQvLyBUaGUgaXNDdXN0b21Qcm9wIGNoZWNrIGNhbiBiZSByZW1vdmVkIGluIGpRdWVyeSA0LjAgd2hlbiB3ZSBvbmx5IGF1dG8tYXBwZW5kXG5cdFx0XHQvLyBcInB4XCIgdG8gYSBmZXcgaGFyZGNvZGVkIHZhbHVlcy5cblx0XHRcdGlmICggdHlwZSA9PT0gXCJudW1iZXJcIiAmJiAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHR2YWx1ZSArPSByZXQgJiYgcmV0WyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdID8gXCJcIiA6IFwicHhcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZmZWN0IG9yaWdpbmFsIGNsb25lJ3MgdmFsdWVzXG5cdFx0XHRpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9PT0gXCJcIiAmJiBuYW1lLmluZGV4T2YoIFwiYmFja2dyb3VuZFwiICkgPT09IDAgKSB7XG5cdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSBcImluaGVyaXRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHxcblx0XHRcdFx0KCB2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGlmICggaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHRcdHN0eWxlLnNldFByb3BlcnR5KCBuYW1lLCB2YWx1ZSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdFxuXHRcdFx0cmV0dXJuIHN0eWxlWyBuYW1lIF07XG5cdFx0fVxuXHR9LFxuXG5cdGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhLCBzdHlsZXMgKSB7XG5cdFx0dmFyIHZhbCwgbnVtLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBtb2RpZnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBUcnkgcHJlZml4ZWQgbmFtZSBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1lXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdFxuXHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgXCJub3JtYWxcIiB0byBjb21wdXRlZCB2YWx1ZVxuXHRcdGlmICggdmFsID09PSBcIm5vcm1hbFwiICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkge1xuXHRcdFx0dmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBudW1lcmljIGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1lcmljXG5cdFx0aWYgKCBleHRyYSA9PT0gXCJcIiB8fCBleHRyYSApIHtcblx0XHRcdG51bSA9IHBhcnNlRmxvYXQoIHZhbCApO1xuXHRcdFx0cmV0dXJuIGV4dHJhID09PSB0cnVlIHx8IGlzRmluaXRlKCBudW0gKSA/IG51bSB8fCAwIDogdmFsO1xuXHRcdH1cblxuXHRcdHJldHVybiB2YWw7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJoZWlnaHRcIiwgXCJ3aWR0aFwiIF0sIGZ1bmN0aW9uKCBfaSwgZGltZW5zaW9uICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIGRpbWVuc2lvbiBdID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0Ly8gQ2VydGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1lbnNpb24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hvdyB0aGVtXG5cdFx0XHRcdC8vIGJ1dCBpdCBtdXN0IGhhdmUgYSBjdXJyZW50IGRpc3BsYXkgc3R5bGUgdGhhdCB3b3VsZCBiZW5lZml0XG5cdFx0XHRcdHJldHVybiByZGlzcGxheXN3YXAudGVzdCggalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSApICYmXG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCtcblx0XHRcdFx0XHQvLyBUYWJsZSBjb2x1bW5zIGluIFNhZmFyaSBoYXZlIG5vbi16ZXJvIG9mZnNldFdpZHRoICYgemVyb1xuXHRcdFx0XHRcdC8vIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHVubGVzcyBkaXNwbGF5IGlzIGNoYW5nZWQuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0XHRcdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYSBkaXNjb25uZWN0ZWQgbm9kZVxuXHRcdFx0XHRcdC8vIGluIElFIHRocm93cyBhbiBlcnJvci5cblx0XHRcdFx0XHQoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoIHx8ICFlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICkgP1xuXHRcdFx0XHRcdFx0c3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdFx0Z2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7XG5cdFx0XHR2YXIgbWF0Y2hlcyxcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHRcdFx0Ly8gT25seSByZWFkIHN0eWxlcy5wb3NpdGlvbiBpZiB0aGUgdGVzdCBoYXMgYSBjaGFuY2UgdG8gZmFpbFxuXHRcdFx0XHQvLyB0byBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LlxuXHRcdFx0XHRzY3JvbGxib3hTaXplQnVnZ3kgPSAhc3VwcG9ydC5zY3JvbGxib3hTaXplKCkgJiZcblx0XHRcdFx0XHRzdHlsZXMucG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIixcblxuXHRcdFx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC0zOTkxKVxuXHRcdFx0XHRib3hTaXppbmdOZWVkZWQgPSBzY3JvbGxib3hTaXplQnVnZ3kgfHwgZXh0cmEsXG5cdFx0XHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0c3VidHJhY3QgPSBleHRyYSA/XG5cdFx0XHRcdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0XHRcdFx0ZWxlbSxcblx0XHRcdFx0XHRcdGRpbWVuc2lvbixcblx0XHRcdFx0XHRcdGV4dHJhLFxuXHRcdFx0XHRcdFx0aXNCb3JkZXJCb3gsXG5cdFx0XHRcdFx0XHRzdHlsZXNcblx0XHRcdFx0XHQpIDpcblx0XHRcdFx0XHQwO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB1bnJlbGlhYmxlIGJvcmRlci1ib3ggZGltZW5zaW9ucyBieSBjb21wYXJpbmcgb2Zmc2V0KiB0byBjb21wdXRlZCBhbmRcblx0XHRcdC8vIGZha2luZyBhIGNvbnRlbnQtYm94IHRvIGdldCBib3JkZXIgYW5kIHBhZGRpbmcgKGdoLTM2OTkpXG5cdFx0XHRpZiAoIGlzQm9yZGVyQm94ICYmIHNjcm9sbGJveFNpemVCdWdneSApIHtcblx0XHRcdFx0c3VidHJhY3QgLT0gTWF0aC5jZWlsKFxuXHRcdFx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRcdFx0cGFyc2VGbG9hdCggc3R5bGVzWyBkaW1lbnNpb24gXSApIC1cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgXCJib3JkZXJcIiwgZmFsc2UsIHN0eWxlcyApIC1cblx0XHRcdFx0XHQwLjVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCB0byBwaXhlbHMgaWYgdmFsdWUgYWRqdXN0bWVudCBpcyBuZWVkZWRcblx0XHRcdGlmICggc3VidHJhY3QgJiYgKCBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiZcblx0XHRcdFx0KCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgIT09IFwicHhcIiApIHtcblxuXHRcdFx0XHRlbGVtLnN0eWxlWyBkaW1lbnNpb24gXSA9IHZhbHVlO1xuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIGRpbWVuc2lvbiApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApO1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmNzc0hvb2tzLm1hcmdpbkxlZnQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5MZWZ0LFxuXHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdHJldHVybiAoIHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIgKSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtXG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgeyBtYXJnaW5MZWZ0OiAwIH0sIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblx0XHRcdFx0XHR9IClcblx0XHRcdFx0KSArIFwicHhcIjtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcbmpRdWVyeS5lYWNoKCB7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICggcHJlZml4ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7XG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0XHRsZW4gPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHR9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0XHRqUXVlcnkuY3NzSG9va3NbIHR3ZWVuLnByb3AgXSB8fFxuXHRcdFx0XHRcdHR3ZWVuLmVsZW0uc3R5bGVbIGZpbmFsUHJvcE5hbWUoIHR3ZWVuLnByb3AgKSBdICE9IG51bGwgKSApIHtcblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gUGFuaWMgYmFzZWQgYXBwcm9hY2ggdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVkIG5vZGVzXG5Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xsVG9wID0gVHdlZW4ucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7XG5cdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZWFzaW5nID0ge1xuXHRsaW5lYXI6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiBwO1xuXHR9LFxuXHRzd2luZzogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIDAuNSAtIE1hdGguY29zKCBwICogTWF0aC5QSSApIC8gMjtcblx0fSxcblx0X2RlZmF1bHQ6IFwic3dpbmdcIlxufTtcblxualF1ZXJ5LmZ4ID0gVHdlZW4ucHJvdG90eXBlLmluaXQ7XG5cbi8vIEJhY2sgY29tcGF0IDwxLjggZXh0ZW5zaW9uIHBvaW50XG5qUXVlcnkuZnguc3RlcCA9IHt9O1xuXG5cblxuXG52YXJcblx0ZnhOb3csIGluUHJvZ3Jlc3MsXG5cdHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLFxuXHRycnVuID0gL3F1ZXVlSG9va3MkLztcblxuZnVuY3Rpb24gc2NoZWR1bGUoKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRpZiAoIGRvY3VtZW50LmhpZGRlbiA9PT0gZmFsc2UgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSApIHtcblx0XHRcdHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIHNjaGVkdWxlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBzY2hlZHVsZSwgalF1ZXJ5LmZ4LmludGVydmFsICk7XG5cdFx0fVxuXG5cdFx0alF1ZXJ5LmZ4LnRpY2soKTtcblx0fVxufVxuXG4vLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1biBzeW5jaHJvbm91c2x5XG5mdW5jdGlvbiBjcmVhdGVGeE5vdygpIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdGZ4Tm93ID0gdW5kZWZpbmVkO1xuXHR9ICk7XG5cdHJldHVybiAoIGZ4Tm93ID0gRGF0ZS5ub3coKSApO1xufVxuXG4vLyBHZW5lcmF0ZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBhIHN0YW5kYXJkIGFuaW1hdGlvblxuZnVuY3Rpb24gZ2VuRngoIHR5cGUsIGluY2x1ZGVXaWR0aCApIHtcblx0dmFyIHdoaWNoLFxuXHRcdGkgPSAwLFxuXHRcdGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfTtcblxuXHQvLyBJZiB3ZSBpbmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVlIGlzIDEgdG8gZG8gYWxsIGNzc0V4cGFuZCB2YWx1ZXMsXG5cdC8vIG90aGVyd2lzZSBzdGVwIHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0XG5cdGluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aCA/IDEgOiAwO1xuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgLSBpbmNsdWRlV2lkdGggKSB7XG5cdFx0d2hpY2ggPSBjc3NFeHBhbmRbIGkgXTtcblx0XHRhdHRyc1sgXCJtYXJnaW5cIiArIHdoaWNoIF0gPSBhdHRyc1sgXCJwYWRkaW5nXCIgKyB3aGljaCBdID0gdHlwZTtcblx0fVxuXG5cdGlmICggaW5jbHVkZVdpZHRoICkge1xuXHRcdGF0dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7XG5cdH1cblxuXHRyZXR1cm4gYXR0cnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVR3ZWVuKCB2YWx1ZSwgcHJvcCwgYW5pbWF0aW9uICkge1xuXHR2YXIgdHdlZW4sXG5cdFx0Y29sbGVjdGlvbiA9ICggQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW10gKS5jb25jYXQoIEFuaW1hdGlvbi50d2VlbmVyc1sgXCIqXCIgXSApLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoICggdHdlZW4gPSBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApICkge1xuXG5cdFx0XHQvLyBXZSdyZSBkb25lIHdpdGggdGhpcyBwcm9wZXJ0eVxuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJlZmlsdGVyKCBlbGVtLCBwcm9wcywgb3B0cyApIHtcblx0dmFyIHByb3AsIHZhbHVlLCB0b2dnbGUsIGhvb2tzLCBvbGRmaXJlLCBwcm9wVHdlZW4sIHJlc3RvcmVEaXNwbGF5LCBkaXNwbGF5LFxuXHRcdGlzQm94ID0gXCJ3aWR0aFwiIGluIHByb3BzIHx8IFwiaGVpZ2h0XCIgaW4gcHJvcHMsXG5cdFx0YW5pbSA9IHRoaXMsXG5cdFx0b3JpZyA9IHt9LFxuXHRcdHN0eWxlID0gZWxlbS5zdHlsZSxcblx0XHRoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApLFxuXHRcdGRhdGFTaG93ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cblx0Ly8gUXVldWUtc2tpcHBpbmcgYW5pbWF0aW9ucyBoaWphY2sgdGhlIGZ4IGhvb2tzXG5cdGlmICggIW9wdHMucXVldWUgKSB7XG5cdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIFwiZnhcIiApO1xuXHRcdGlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVsbCApIHtcblx0XHRcdGhvb2tzLnVucXVldWVkID0gMDtcblx0XHRcdG9sZGZpcmUgPSBob29rcy5lbXB0eS5maXJlO1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICFob29rcy51bnF1ZXVlZCApIHtcblx0XHRcdFx0XHRvbGRmaXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXHRcdGhvb2tzLnVucXVldWVkKys7XG5cblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuc3VyZSB0aGUgY29tcGxldGUgaGFuZGxlciBpcyBjYWxsZWQgYmVmb3JlIHRoaXMgY29tcGxldGVzXG5cdFx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGhvb2tzLnVucXVldWVkLS07XG5cdFx0XHRcdGlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgXCJmeFwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIERldGVjdCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRmb3IgKCBwcm9wIGluIHByb3BzICkge1xuXHRcdHZhbHVlID0gcHJvcHNbIHByb3AgXTtcblx0XHRpZiAoIHJmeHR5cGVzLnRlc3QoIHZhbHVlICkgKSB7XG5cdFx0XHRkZWxldGUgcHJvcHNbIHByb3AgXTtcblx0XHRcdHRvZ2dsZSA9IHRvZ2dsZSB8fCB2YWx1ZSA9PT0gXCJ0b2dnbGVcIjtcblx0XHRcdGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gXCJoaWRlXCIgOiBcInNob3dcIiApICkge1xuXG5cdFx0XHRcdC8vIFByZXRlbmQgdG8gYmUgaGlkZGVuIGlmIHRoaXMgaXMgYSBcInNob3dcIiBhbmRcblx0XHRcdFx0Ly8gdGhlcmUgaXMgc3RpbGwgZGF0YSBmcm9tIGEgc3RvcHBlZCBzaG93L2hpZGVcblx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gXCJzaG93XCIgJiYgZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IHRydWU7XG5cblx0XHRcdFx0Ly8gSWdub3JlIGFsbCBvdGhlciBuby1vcCBzaG93L2hpZGUgZGF0YVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRvcmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIEJhaWwgb3V0IGlmIHRoaXMgaXMgYSBuby1vcCBsaWtlIC5oaWRlKCkuaGlkZSgpXG5cdHByb3BUd2VlbiA9ICFqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcHMgKTtcblx0aWYgKCAhcHJvcFR3ZWVuICYmIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBvcmlnICkgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUmVzdHJpY3QgXCJvdmVyZmxvd1wiIGFuZCBcImRpc3BsYXlcIiBzdHlsZXMgZHVyaW5nIGJveCBhbmltYXRpb25zXG5cdGlmICggaXNCb3ggJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHQvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFIGRvZXMgbm90IGluZmVyIHRoZSBzaG9ydGhhbmRcblx0XHQvLyBmcm9tIGlkZW50aWNhbGx5LXZhbHVlZCBvdmVyZmxvd1ggYW5kIG92ZXJmbG93WSBhbmQgRWRnZSBqdXN0IG1pcnJvcnNcblx0XHQvLyB0aGUgb3ZlcmZsb3dYIHZhbHVlIHRoZXJlLlxuXHRcdG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdO1xuXG5cdFx0Ly8gSWRlbnRpZnkgYSBkaXNwbGF5IHR5cGUsIHByZWZlcnJpbmcgb2xkIHNob3cvaGlkZSBkYXRhIG92ZXIgdGhlIENTUyBjYXNjYWRlXG5cdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhU2hvdyAmJiBkYXRhU2hvdy5kaXNwbGF5O1xuXHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdH1cblx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSApIHtcblx0XHRcdFx0ZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBHZXQgbm9uZW1wdHkgdmFsdWUocykgYnkgdGVtcG9yYXJpbHkgZm9yY2luZyB2aXNpYmlsaXR5XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheSB8fCByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFuaW1hdGUgaW5saW5lIGVsZW1lbnRzIGFzIGlubGluZS1ibG9ja1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJpbmxpbmVcIiB8fCBkaXNwbGF5ID09PSBcImlubGluZS1ibG9ja1wiICYmIHJlc3RvcmVEaXNwbGF5ICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZmxvYXRcIiApID09PSBcIm5vbmVcIiApIHtcblxuXHRcdFx0XHQvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBkaXNwbGF5IHZhbHVlIGF0IHRoZSBlbmQgb2YgcHVyZSBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRcdFx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0ZGlzcGxheSA9IHN0eWxlLmRpc3BsYXk7XG5cdFx0XHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRpc3BsYXkgPT09IFwibm9uZVwiID8gXCJcIiA6IGRpc3BsYXk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSBcImlubGluZS1ibG9ja1wiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggb3B0cy5vdmVyZmxvdyApIHtcblx0XHRzdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0c3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1kgPSBvcHRzLm92ZXJmbG93WyAyIF07XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gSW1wbGVtZW50IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdHByb3BUd2VlbiA9IGZhbHNlO1xuXHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cblx0XHQvLyBHZW5lcmFsIHNob3cvaGlkZSBzZXR1cCBmb3IgdGhpcyBlbGVtZW50IGFuaW1hdGlvblxuXHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdGlmICggZGF0YVNob3cgKSB7XG5cdFx0XHRcdGlmICggXCJoaWRkZW5cIiBpbiBkYXRhU2hvdyApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSBkYXRhU2hvdy5oaWRkZW47XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGFTaG93ID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBcImZ4c2hvd1wiLCB7IGRpc3BsYXk6IHJlc3RvcmVEaXNwbGF5IH0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RvcmUgaGlkZGVuL3Zpc2libGUgZm9yIHRvZ2dsZSBzbyBgLnN0b3AoKS50b2dnbGUoKWAgXCJyZXZlcnNlc1wiXG5cdFx0XHRpZiAoIHRvZ2dsZSApIHtcblx0XHRcdFx0ZGF0YVNob3cuaGlkZGVuID0gIWhpZGRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2hvdyBlbGVtZW50cyBiZWZvcmUgYW5pbWF0aW5nIHRoZW1cblx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdFx0Ly8gVGhlIGZpbmFsIHN0ZXAgb2YgYSBcImhpZGVcIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRoZSBlbGVtZW50XG5cdFx0XHRcdGlmICggIWhpZGRlbiApIHtcblx0XHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiZnhzaG93XCIgKTtcblx0XHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBQZXItcHJvcGVydHkgc2V0dXBcblx0XHRwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcblx0XHRpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHtcblx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0cHJvcFR3ZWVuLmVuZCA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdFx0cHJvcFR3ZWVuLnN0YXJ0ID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XG5cblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xuXHRcdG5hbWUgPSBjYW1lbENhc2UoIGluZGV4ICk7XG5cdFx0ZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdO1xuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHlcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAoIzEyNDk3KVxuXHRcdFx0XHR0ZW1wID0gcmVtYWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsXG5cdFx0XHRcdHBlcmNlbnQgPSAxIC0gdGVtcCxcblx0XHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0XHRsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDtcblxuXHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNlbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdICk7XG5cblx0XHRcdC8vIElmIHRoZXJlJ3MgbW9yZSB0byBkbywgeWllbGRcblx0XHRcdGlmICggcGVyY2VudCA8IDEgJiYgbGVuZ3RoICkge1xuXHRcdFx0XHRyZXR1cm4gcmVtYWluaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIHdhcyBhbiBlbXB0eSBhbmltYXRpb24sIHN5bnRoZXNpemUgYSBmaW5hbCBwcm9ncmVzcyBub3RpZmljYXRpb25cblx0XHRcdGlmICggIWxlbmd0aCApIHtcblx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXNvbHZlIHRoZSBhbmltYXRpb24gYW5kIHJlcG9ydCBpdHMgY29uY2x1c2lvblxuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSxcblx0XHRcdG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHtcblx0XHRcdFx0c3BlY2lhbEVhc2luZzoge30sXG5cdFx0XHRcdGVhc2luZzogalF1ZXJ5LmVhc2luZy5fZGVmYXVsdFxuXHRcdFx0fSwgb3B0aW9ucyApLFxuXHRcdFx0b3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxuXHRcdFx0b3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLFxuXHRcdFx0c3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXG5cdFx0XHR0d2VlbnM6IFtdLFxuXHRcdFx0Y3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQgKSB7XG5cdFx0XHRcdHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCxcblx0XHRcdFx0XHRcdGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcgKTtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVucy5wdXNoKCB0d2VlbiApO1xuXHRcdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0XHR9LFxuXHRcdFx0c3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7XG5cdFx0XHRcdHZhciBpbmRleCA9IDAsXG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0byBydW4gYWxsIHRoZSB0d2VlbnNcblx0XHRcdFx0XHQvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlzIHBhcnRcblx0XHRcdFx0XHRsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwO1xuXHRcdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RvcHBlZCA9IHRydWU7XG5cdFx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIDEgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVqZWN0XG5cdFx0XHRcdGlmICggZ290b0VuZCApIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fSApLFxuXHRcdHByb3BzID0gYW5pbWF0aW9uLnByb3BzO1xuXG5cdHByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7XG5cblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRyZXN1bHQgPSBBbmltYXRpb24ucHJlZmlsdGVyc1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyApO1xuXHRcdGlmICggcmVzdWx0ICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCByZXN1bHQuc3RvcCApICkge1xuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIGFuaW1hdGlvbi5lbGVtLCBhbmltYXRpb24ub3B0cy5xdWV1ZSApLnN0b3AgPVxuXHRcdFx0XHRcdHJlc3VsdC5zdG9wLmJpbmQoIHJlc3VsdCApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRqUXVlcnkubWFwKCBwcm9wcywgY3JlYXRlVHdlZW4sIGFuaW1hdGlvbiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSApIHtcblx0XHRhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTtcblx0fVxuXG5cdC8vIEF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zXG5cdGFuaW1hdGlvblxuXHRcdC5wcm9ncmVzcyggYW5pbWF0aW9uLm9wdHMucHJvZ3Jlc3MgKVxuXHRcdC5kb25lKCBhbmltYXRpb24ub3B0cy5kb25lLCBhbmltYXRpb24ub3B0cy5jb21wbGV0ZSApXG5cdFx0LmZhaWwoIGFuaW1hdGlvbi5vcHRzLmZhaWwgKVxuXHRcdC5hbHdheXMoIGFuaW1hdGlvbi5vcHRzLmFsd2F5cyApO1xuXG5cdGpRdWVyeS5meC50aW1lcihcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aWNrLCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0YW5pbTogYW5pbWF0aW9uLFxuXHRcdFx0cXVldWU6IGFuaW1hdGlvbi5vcHRzLnF1ZXVlXG5cdFx0fSApXG5cdCk7XG5cblx0cmV0dXJuIGFuaW1hdGlvbjtcbn1cblxualF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQoIEFuaW1hdGlvbiwge1xuXG5cdHR3ZWVuZXJzOiB7XG5cdFx0XCIqXCI6IFsgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkge1xuXHRcdFx0dmFyIHR3ZWVuID0gdGhpcy5jcmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKTtcblx0XHRcdGFkanVzdENTUyggdHdlZW4uZWxlbSwgcHJvcCwgcmNzc051bS5leGVjKCB2YWx1ZSApLCB0d2VlbiApO1xuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH0gXVxuXHR9LFxuXG5cdHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBwcm9wcyApICkge1xuXHRcdFx0Y2FsbGJhY2sgPSBwcm9wcztcblx0XHRcdHByb3BzID0gWyBcIipcIiBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9wcyA9IHByb3BzLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cdFx0fVxuXG5cdFx0dmFyIHByb3AsXG5cdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0cHJvcCA9IHByb3BzWyBpbmRleCBdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gPSBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9LFxuXG5cdHByZWZpbHRlcnM6IFsgZGVmYXVsdFByZWZpbHRlciBdLFxuXG5cdHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkge1xuXHRcdGlmICggcHJlcGVuZCApIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHtcblx0dmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gXCJvYmplY3RcIiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDoge1xuXHRcdGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8XG5cdFx0XHRpc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLFxuXHRcdGR1cmF0aW9uOiBzcGVlZCxcblx0XHRlYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgIWlzRnVuY3Rpb24oIGVhc2luZyApICYmIGVhc2luZ1xuXHR9O1xuXG5cdC8vIEdvIHRvIHRoZSBlbmQgc3RhdGUgaWYgZnggYXJlIG9mZlxuXHRpZiAoIGpRdWVyeS5meC5vZmYgKSB7XG5cdFx0b3B0LmR1cmF0aW9uID0gMDtcblxuXHR9IGVsc2Uge1xuXHRcdGlmICggdHlwZW9mIG9wdC5kdXJhdGlvbiAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdGlmICggb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgKSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHNbIG9wdC5kdXJhdGlvbiBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBvcHQucXVldWUgLSB0cnVlL3VuZGVmaW5lZC9udWxsIC0+IFwiZnhcIlxuXHRpZiAoIG9wdC5xdWV1ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHtcblx0XHRvcHQucXVldWUgPSBcImZ4XCI7XG5cdH1cblxuXHQvLyBRdWV1ZWluZ1xuXHRvcHQub2xkID0gb3B0LmNvbXBsZXRlO1xuXG5cdG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0Lm9sZCApICkge1xuXHRcdFx0b3B0Lm9sZC5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHQucXVldWUgKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBvcHQ7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHtcblxuXHRcdC8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMFxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggaXNIaWRkZW5XaXRoaW5UcmVlICkuY3NzKCBcIm9wYWNpdHlcIiwgMCApLnNob3coKVxuXG5cdFx0XHQvLyBBbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWRcblx0XHRcdC5lbmQoKS5hbmltYXRlKCB7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH0sXG5cdGFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHR2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLFxuXHRcdFx0b3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLFxuXHRcdFx0ZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBPcGVyYXRlIG9uIGEgY29weSBvZiBwcm9wIHNvIHBlci1wcm9wZXJ0eSBlYXNpbmcgd29uJ3QgYmUgbG9zdFxuXHRcdFx0XHR2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7XG5cblx0XHRcdFx0Ly8gRW1wdHkgYW5pbWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGltbWVkaWF0ZWx5XG5cdFx0XHRcdGlmICggZW1wdHkgfHwgZGF0YVByaXYuZ2V0KCB0aGlzLCBcImZpbmlzaFwiICkgKSB7XG5cdFx0XHRcdFx0YW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRkb0FuaW1hdGlvbi5maW5pc2ggPSBkb0FuaW1hdGlvbjtcblxuXHRcdHJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID9cblx0XHRcdHRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6XG5cdFx0XHR0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7XG5cdH0sXG5cdHN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1ZXVlLCBnb3RvRW5kICkge1xuXHRcdHZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7XG5cdFx0XHR2YXIgc3RvcCA9IGhvb2tzLnN0b3A7XG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdHN0b3AoIGdvdG9FbmQgKTtcblx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGdvdG9FbmQgPSBjbGVhclF1ZXVlO1xuXHRcdFx0Y2xlYXJRdWV1ZSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGNsZWFyUXVldWUgKSB7XG5cdFx0XHR0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkZXF1ZXVlID0gdHJ1ZSxcblx0XHRcdFx0aW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArIFwicXVldWVIb29rc1wiLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICk7XG5cblx0XHRcdGlmICggaW5kZXggKSB7XG5cdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgKSB7XG5cdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoIGluZGV4IGluIGRhdGEgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3QoIGluZGV4ICkgKSB7XG5cdFx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJlxuXHRcdFx0XHRcdCggdHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApICkge1xuXG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggZ290b0VuZCApO1xuXHRcdFx0XHRcdGRlcXVldWUgPSBmYWxzZTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQuXG5cdFx0XHQvLyBUaW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNoXG5cdFx0XHQvLyB3aWxsIGRlcXVldWUgYnV0IG9ubHkgaWYgdGhleSB3ZXJlIGdvdG9FbmQuXG5cdFx0XHRpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXHRmaW5pc2g6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdGlmICggdHlwZSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGluZGV4LFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICksXG5cdFx0XHRcdHF1ZXVlID0gZGF0YVsgdHlwZSArIFwicXVldWVcIiBdLFxuXHRcdFx0XHRob29rcyA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlSG9va3NcIiBdLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRsZW5ndGggPSBxdWV1ZSA/IHF1ZXVlLmxlbmd0aCA6IDA7XG5cblx0XHRcdC8vIEVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2YXRlIGRhdGFcblx0XHRcdGRhdGEuZmluaXNoID0gdHJ1ZTtcblxuXHRcdFx0Ly8gRW1wdHkgdGhlIHF1ZXVlIGZpcnN0XG5cdFx0XHRqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7XG5cblx0XHRcdGlmICggaG9va3MgJiYgaG9va3Muc3RvcCApIHtcblx0XHRcdFx0aG9va3Muc3RvcC5jYWxsKCB0aGlzLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhY3RpdmUgYW5pbWF0aW9ucywgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmIHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApIHtcblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYW5pbWF0aW9ucyBpbiB0aGUgb2xkIHF1ZXVlIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0aWYgKCBxdWV1ZVsgaW5kZXggXSAmJiBxdWV1ZVsgaW5kZXggXS5maW5pc2ggKSB7XG5cdFx0XHRcdFx0cXVldWVbIGluZGV4IF0uZmluaXNoLmNhbGwoIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUdXJuIG9mZiBmaW5pc2hpbmcgZmxhZ1xuXHRcdFx0ZGVsZXRlIGRhdGEuZmluaXNoO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcInRvZ2dsZVwiLCBcInNob3dcIiwgXCJoaWRlXCIgXSwgZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHR2YXIgY3NzRm4gPSBqUXVlcnkuZm5bIG5hbWUgXTtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHNwZWVkID09IG51bGwgfHwgdHlwZW9mIHNwZWVkID09PSBcImJvb2xlYW5cIiA/XG5cdFx0XHRjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOlxuXHRcdFx0dGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG4vLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zXG5qUXVlcnkuZWFjaCgge1xuXHRzbGlkZURvd246IGdlbkZ4KCBcInNob3dcIiApLFxuXHRzbGlkZVVwOiBnZW5GeCggXCJoaWRlXCIgKSxcblx0c2xpZGVUb2dnbGU6IGdlbkZ4KCBcInRvZ2dsZVwiICksXG5cdGZhZGVJbjogeyBvcGFjaXR5OiBcInNob3dcIiB9LFxuXHRmYWRlT3V0OiB7IG9wYWNpdHk6IFwiaGlkZVwiIH0sXG5cdGZhZGVUb2dnbGU6IHsgb3BhY2l0eTogXCJ0b2dnbGVcIiB9XG59LCBmdW5jdGlvbiggbmFtZSwgcHJvcHMgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLmFuaW1hdGUoIHByb3BzLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkudGltZXJzID0gW107XG5qUXVlcnkuZngudGljayA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdGltZXIsXG5cdFx0aSA9IDAsXG5cdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycztcblxuXHRmeE5vdyA9IERhdGUubm93KCk7XG5cblx0Zm9yICggOyBpIDwgdGltZXJzLmxlbmd0aDsgaSsrICkge1xuXHRcdHRpbWVyID0gdGltZXJzWyBpIF07XG5cblx0XHQvLyBSdW4gdGhlIHRpbWVyIGFuZCBzYWZlbHkgcmVtb3ZlIGl0IHdoZW4gZG9uZSAoYWxsb3dpbmcgZm9yIGV4dGVybmFsIHJlbW92YWwpXG5cdFx0aWYgKCAhdGltZXIoKSAmJiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7XG5cdFx0XHR0aW1lcnMuc3BsaWNlKCBpLS0sIDEgKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoICF0aW1lcnMubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5meC5zdG9wKCk7XG5cdH1cblx0ZnhOb3cgPSB1bmRlZmluZWQ7XG59O1xuXG5qUXVlcnkuZngudGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7XG5cdGpRdWVyeS50aW1lcnMucHVzaCggdGltZXIgKTtcblx0alF1ZXJ5LmZ4LnN0YXJ0KCk7XG59O1xuXG5qUXVlcnkuZnguaW50ZXJ2YWwgPSAxMztcbmpRdWVyeS5meC5zdGFydCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aW5Qcm9ncmVzcyA9IHRydWU7XG5cdHNjaGVkdWxlKCk7XG59O1xuXG5qUXVlcnkuZnguc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRpblByb2dyZXNzID0gbnVsbDtcbn07XG5cbmpRdWVyeS5meC5zcGVlZHMgPSB7XG5cdHNsb3c6IDYwMCxcblx0ZmFzdDogMjAwLFxuXG5cdC8vIERlZmF1bHQgc3BlZWRcblx0X2RlZmF1bHQ6IDQwMFxufTtcblxuXG4vLyBCYXNlZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uXG4vLyBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMDAzMjQwMTQ3NDcvaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5L1xualF1ZXJ5LmZuLmRlbGF5ID0gZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7XG5cdHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRzWyB0aW1lIF0gfHwgdGltZSA6IHRpbWU7XG5cdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQsIGhvb2tzICkge1xuXHRcdHZhciB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoIG5leHQsIHRpbWUgKTtcblx0XHRob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdFx0fTtcblx0fSApO1xufTtcblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKSxcblx0XHRzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInNlbGVjdFwiICksXG5cdFx0b3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9wdGlvblwiICkgKTtcblxuXHRpbnB1dC50eXBlID0gXCJjaGVja2JveFwiO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjMgb25seVxuXHQvLyBEZWZhdWx0IHZhbHVlIGZvciBhIGNoZWNrYm94IHNob3VsZCBiZSBcIm9uXCJcblx0c3VwcG9ydC5jaGVja09uID0gaW5wdXQudmFsdWUgIT09IFwiXCI7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE11c3QgYWNjZXNzIHNlbGVjdGVkSW5kZXggdG8gbWFrZSBkZWZhdWx0IG9wdGlvbnMgc2VsZWN0XG5cdHN1cHBvcnQub3B0U2VsZWN0ZWQgPSBvcHQuc2VsZWN0ZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIEFuIGlucHV0IGxvc2VzIGl0cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBhIHJhZGlvXG5cdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdGlucHV0LnZhbHVlID0gXCJ0XCI7XG5cdGlucHV0LnR5cGUgPSBcInJhZGlvXCI7XG5cdHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSBcInRcIjtcbn0gKSgpO1xuXG5cbnZhciBib29sSG9vayxcblx0YXR0ckhhbmRsZSA9IGpRdWVyeS5leHByLmF0dHJIYW5kbGU7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBhdHRyaWJ1dGVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWRcblx0XHRpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSwgdmFsdWUgKTtcblx0XHR9XG5cblx0XHQvLyBBdHRyaWJ1dGUgaG9va3MgYXJlIGRldGVybWluZWQgYnkgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uXG5cdFx0Ly8gR3JhYiBuZWNlc3NhcnkgaG9vayBpZiBvbmUgaXMgZGVmaW5lZFxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXHRcdFx0aG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHQoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiB1bmRlZmluZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHZhbHVlID09PSBudWxsICkge1xuXHRcdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCB2YWx1ZSArIFwiXCIgKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXQgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHQvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZFxuXHRcdHJldHVybiByZXQgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDtcblx0fSxcblxuXHRhdHRySG9va3M6IHtcblx0XHR0eXBlOiB7XG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhc3VwcG9ydC5yYWRpb1ZhbHVlICYmIHZhbHVlID09PSBcInJhZGlvXCIgJiZcblx0XHRcdFx0XHRub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgKSB7XG5cdFx0XHRcdFx0dmFyIHZhbCA9IGVsZW0udmFsdWU7XG5cdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCB2YWx1ZSApO1xuXHRcdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdFx0ZWxlbS52YWx1ZSA9IHZhbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHR2YXIgbmFtZSxcblx0XHRcdGkgPSAwLFxuXG5cdFx0XHQvLyBBdHRyaWJ1dGUgbmFtZXMgY2FuIGNvbnRhaW4gbm9uLUhUTUwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzXG5cdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNhdHRyaWJ1dGVzLTJcblx0XHRcdGF0dHJOYW1lcyA9IHZhbHVlICYmIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cblx0XHRpZiAoIGF0dHJOYW1lcyAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0d2hpbGUgKCAoIG5hbWUgPSBhdHRyTmFtZXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBuYW1lICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhvb2tzIGZvciBib29sZWFuIGF0dHJpYnV0ZXNcbmJvb2xIb29rID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHtcblx0XHRpZiAoIHZhbHVlID09PSBmYWxzZSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGJvb2xlYW4gYXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZVxuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cbn07XG5cbmpRdWVyeS5lYWNoKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCggL1xcdysvZyApLCBmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdHZhciBnZXR0ZXIgPSBhdHRySGFuZGxlWyBuYW1lIF0gfHwgalF1ZXJ5LmZpbmQuYXR0cjtcblxuXHRhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHJldCwgaGFuZGxlLFxuXHRcdFx0bG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdGlmICggIWlzWE1MICkge1xuXG5cdFx0XHQvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wIGJ5IHRlbXBvcmFyaWx5IHJlbW92aW5nIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgZ2V0dGVyXG5cdFx0XHRoYW5kbGUgPSBhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF07XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSByZXQ7XG5cdFx0XHRyZXQgPSBnZXR0ZXIoIGVsZW0sIG5hbWUsIGlzWE1MICkgIT0gbnVsbCA/XG5cdFx0XHRcdGxvd2VyY2FzZU5hbWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gaGFuZGxlO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xufSApO1xuXG5cblxuXG52YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJjbGlja2FibGUgPSAvXig/OmF8YXJlYSkkL2k7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRlbGV0ZSB0aGlzWyBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWUgXTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rc1xuXHRcdFx0bmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTtcblx0XHRcdGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVsZW1bIG5hbWUgXTtcblx0fSxcblxuXHRwcm9wSG9va3M6IHtcblx0XHR0YWJJbmRleDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0XHRcdC8vIGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZVxuXHRcdFx0XHQvLyBjb3JyZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXRcblx0XHRcdFx0Ly8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTQxMTE2MjMzMzQ3L2h0dHA6Ly9mbHVpZHByb2plY3Qub3JnL2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmluZGV4LXZhbHVlcy13aXRoLWphdmFzY3JpcHQvXG5cdFx0XHRcdC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCgjMTIwNzIpXG5cdFx0XHRcdHZhciB0YWJpbmRleCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidGFiaW5kZXhcIiApO1xuXG5cdFx0XHRcdGlmICggdGFiaW5kZXggKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KCB0YWJpbmRleCwgMTAgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRyZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fFxuXHRcdFx0XHRcdHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmXG5cdFx0XHRcdFx0ZWxlbS5ocmVmXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRwcm9wRml4OiB7XG5cdFx0XCJmb3JcIjogXCJodG1sRm9yXCIsXG5cdFx0XCJjbGFzc1wiOiBcImNsYXNzTmFtZVwiXG5cdH1cbn0gKTtcblxuLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG4vLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHlcbi8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWRcbi8vIG9uIHRoZSBvcHRpb25cbi8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkXG4vLyB3aGVuIGluIGFuIG9wdGdyb3VwXG4vLyBlc2xpbnQgcnVsZSBcIm5vLXVudXNlZC1leHByZXNzaW9uc1wiIGlzIGRpc2FibGVkIGZvciB0aGlzIGNvZGVcbi8vIHNpbmNlIGl0IGNvbnNpZGVycyBzdWNoIGFjY2Vzc2lvbnMgbm9vcFxuaWYgKCAhc3VwcG9ydC5vcHRTZWxlY3RlZCApIHtcblx0alF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdHBhcmVudC5zZWxlY3RlZEluZGV4O1xuXG5cdFx0XHRcdGlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxualF1ZXJ5LmVhY2goIFtcblx0XCJ0YWJJbmRleFwiLFxuXHRcInJlYWRPbmx5XCIsXG5cdFwibWF4TGVuZ3RoXCIsXG5cdFwiY2VsbFNwYWNpbmdcIixcblx0XCJjZWxsUGFkZGluZ1wiLFxuXHRcInJvd1NwYW5cIixcblx0XCJjb2xTcGFuXCIsXG5cdFwidXNlTWFwXCIsXG5cdFwiZnJhbWVCb3JkZXJcIixcblx0XCJjb250ZW50RWRpdGFibGVcIlxuXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7XG59ICk7XG5cblxuXG5cblx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UgYWNjb3JkaW5nIHRvIEhUTUwgc3BlY1xuXHQvLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLWFzY2lpLXdoaXRlc3BhY2Vcblx0ZnVuY3Rpb24gc3RyaXBBbmRDb2xsYXBzZSggdmFsdWUgKSB7XG5cdFx0dmFyIHRva2VucyA9IHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdFx0cmV0dXJuIHRva2Vucy5qb2luKCBcIiBcIiApO1xuXHR9XG5cblxuZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7XG5cdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSAmJiBlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHwgXCJcIjtcbn1cblxuZnVuY3Rpb24gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICkge1xuXHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHR9XG5cdHJldHVybiBbXTtcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA8IDAgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciArPSBjbGF6eiArIFwiIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmF0dHIoIFwiY2xhc3NcIiwgXCJcIiApO1xuXHRcdH1cblxuXHRcdGNsYXNzZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3Nlcy5sZW5ndGggKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTtcblxuXHRcdFx0XHQvLyBUaGlzIGV4cHJlc3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIGFkZENsYXNzKVxuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgKmFsbCogaW5zdGFuY2VzXG5cdFx0XHRcdFx0XHR3aGlsZSAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgPSBjdXIucmVwbGFjZSggXCIgXCIgKyBjbGF6eiArIFwiIFwiLCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7XG5cdFx0dmFyIHR5cGUgPSB0eXBlb2YgdmFsdWUsXG5cdFx0XHRpc1ZhbGlkVmFsdWUgPSB0eXBlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIHR5cGVvZiBzdGF0ZVZhbCA9PT0gXCJib29sZWFuXCIgJiYgaXNWYWxpZFZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUgKSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKFxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENsYXNzKCB0aGlzICksIHN0YXRlVmFsICksXG5cdFx0XHRcdFx0c3RhdGVWYWxcblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBjbGFzc05hbWUsIGksIHNlbGYsIGNsYXNzTmFtZXM7XG5cblx0XHRcdGlmICggaXNWYWxpZFZhbHVlICkge1xuXG5cdFx0XHRcdC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzXG5cdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRzZWxmID0galF1ZXJ5KCB0aGlzICk7XG5cdFx0XHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdFx0XHR3aGlsZSAoICggY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdFxuXHRcdFx0XHRcdGlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7XG5cdFx0XHRcdFx0XHRzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5hZGRDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdC8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0XHRjbGFzc05hbWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXHRcdFx0XHRpZiAoIGNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGNsYXNzTmFtZSBpZiBzZXRcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiLCBjbGFzc05hbWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsXG5cdFx0XHRcdC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBicmluZyBiYWNrIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBhbnl0aGluZyksXG5cdFx0XHRcdC8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC5cblx0XHRcdFx0aWYgKCB0aGlzLnNldEF0dHJpYnV0ZSApIHtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRcdFx0XHRcIlwiIDpcblx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdldENsYXNzKCBlbGVtICkgKSArIFwiIFwiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIHJyZXR1cm4gPSAvXFxyL2c7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGhvb2tzLCByZXQsIHZhbHVlSXNGdW5jdGlvbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHxcblx0XHRcdFx0XHRqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHRcdGlmICggaG9va3MgJiZcblx0XHRcdFx0XHRcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIFwidmFsdWVcIiApICkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0ID0gZWxlbS52YWx1ZTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzXG5cdFx0XHRcdGlmICggdHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0LnJlcGxhY2UoIHJyZXR1cm4sIFwiXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlclxuXHRcdFx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0dmFyIHZhbDtcblxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnkoIHRoaXMgKS52YWwoKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzIFwiXCI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmdcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHZhbCA9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbCArPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0dmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHQvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZ1xuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCBcInZhbHVlXCIgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHZhbEhvb2tzOiB7XG5cdFx0b3B0aW9uOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdHZhciB2YWwgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInZhbHVlXCIgKTtcblx0XHRcdFx0cmV0dXJuIHZhbCAhPSBudWxsID9cblx0XHRcdFx0XHR2YWwgOlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExIG9ubHlcblx0XHRcdFx0XHQvLyBvcHRpb24udGV4dCB0aHJvd3MgZXhjZXB0aW9ucyAoIzE0Njg2LCAjMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sIGksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcblx0XHRcdFx0XHRpID0gbWF4O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IG9uZSA/IGluZGV4IDogMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSlcblx0XHRcdFx0XHRpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiZcblxuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHRcdFx0XHRcdCFvcHRpb24uZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdFx0KCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHxcblx0XHRcdFx0XHRcdFx0XHQhbm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XG5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheVxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgb3B0aW9uU2V0LCBvcHRpb24sXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxuXHRcdFx0XHRcdGkgPSBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXG5cdFx0XHRcdFx0aWYgKCBvcHRpb24uc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwgdmFsdWVzICkgPiAtMVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3B0aW9uU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbmQtYXNzaWduICovXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldFxuXHRcdFx0XHRpZiAoICFvcHRpb25TZXQgKSB7XG5cdFx0XHRcdFx0ZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXJcbmpRdWVyeS5lYWNoKCBbIFwicmFkaW9cIiwgXCJjaGVja2JveFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHtcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSggZWxlbSApLnZhbCgpLCB2YWx1ZSApID4gLTEgKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHtcblx0XHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IG51bGwgPyBcIm9uXCIgOiBlbGVtLnZhbHVlO1xuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvblxuXG5cbnN1cHBvcnQuZm9jdXNpbiA9IFwib25mb2N1c2luXCIgaW4gd2luZG93O1xuXG5cbnZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxcblx0c3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgPSBmdW5jdGlvbiggZSApIHtcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9O1xuXG5qUXVlcnkuZXh0ZW5kKCBqUXVlcnkuZXZlbnQsIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHtcblxuXHRcdHZhciBpLCBjdXIsIHRtcCwgYnViYmxlVHlwZSwgb250eXBlLCBoYW5kbGUsIHNwZWNpYWwsIGxhc3RFbGVtZW50LFxuXHRcdFx0ZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sXG5cdFx0XHR0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcInR5cGVcIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LFxuXHRcdFx0bmFtZXNwYWNlcyA9IGhhc093bi5jYWxsKCBldmVudCwgXCJuYW1lc3BhY2VcIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCBcIi5cIiApIDogW107XG5cblx0XHRjdXIgPSBsYXN0RWxlbWVudCA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50O1xuXG5cdFx0Ly8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3dcblx0XHRpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlLmluZGV4T2YoIFwiLlwiICkgPiAtMSApIHtcblxuXHRcdFx0Ly8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKVxuXHRcdFx0bmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIFwiLlwiICk7XG5cdFx0XHR0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpO1xuXHRcdFx0bmFtZXNwYWNlcy5zb3J0KCk7XG5cdFx0fVxuXHRcdG9udHlwZSA9IHR5cGUuaW5kZXhPZiggXCI6XCIgKSA8IDAgJiYgXCJvblwiICsgdHlwZTtcblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZ1xuXHRcdGV2ZW50ID0gZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0ZXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSBcIm9iamVjdFwiICYmIGV2ZW50ICk7XG5cblx0XHQvLyBUcmlnZ2VyIGJpdG1hc2s6ICYgMSBmb3IgbmF0aXZlIGhhbmRsZXJzOyAmIDIgZm9yIGpRdWVyeSAoYWx3YXlzIHRydWUpXG5cdFx0ZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7XG5cdFx0ZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApO1xuXHRcdGV2ZW50LnJuYW1lc3BhY2UgPSBldmVudC5uYW1lc3BhY2UgP1xuXHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICkgOlxuXHRcdFx0bnVsbDtcblxuXHRcdC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZFxuXHRcdGV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDtcblx0XHRpZiAoICFldmVudC50YXJnZXQgKSB7XG5cdFx0XHRldmVudC50YXJnZXQgPSBlbGVtO1xuXHRcdH1cblxuXHRcdC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3Rcblx0XHRkYXRhID0gZGF0YSA9PSBudWxsID9cblx0XHRcdFsgZXZlbnQgXSA6XG5cdFx0XHRqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTtcblxuXHRcdC8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXNcblx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgjOTk1MSlcblx0XHQvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KVxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGxhc3RFbGVtZW50ID0gY3VyO1xuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IChcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIGN1ciwgXCJldmVudHNcIiApIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKVxuXHRcdFx0XHQpWyBldmVudC50eXBlIF0gJiZcblx0XHRcdFx0ZGF0YVByaXYuZ2V0KCBjdXIsIFwiaGFuZGxlXCIgKTtcblx0XHRcdGlmICggaGFuZGxlICkge1xuXHRcdFx0XHRoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOYXRpdmUgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07XG5cdFx0XHRpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YSggY3VyICkgKSB7XG5cdFx0XHRcdGV2ZW50LnJlc3VsdCA9IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGV2ZW50LnR5cGUgPSB0eXBlO1xuXG5cdFx0Ly8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vd1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG5cblx0XHRcdGlmICggKCAhc3BlY2lhbC5fZGVmYXVsdCB8fFxuXHRcdFx0XHRzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBldmVudFBhdGgucG9wKCksIGRhdGEgKSA9PT0gZmFsc2UgKSAmJlxuXHRcdFx0XHRhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cblx0XHRcdFx0Ly8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBldmVudC5cblx0XHRcdFx0Ly8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKVxuXHRcdFx0XHRpZiAoIG9udHlwZSAmJiBpc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gKSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2Rcblx0XHRcdFx0XHR0bXAgPSBlbGVtWyBvbnR5cGUgXTtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW1bIHR5cGUgXSgpO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IHRtcDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZVxuXHQvLyBVc2VkIG9ubHkgZm9yIGBmb2N1cyhpbiB8IG91dClgIGV2ZW50c1xuXHRzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50ICkge1xuXHRcdHZhciBlID0galF1ZXJ5LmV4dGVuZChcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoKSxcblx0XHRcdGV2ZW50LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRpc1NpbXVsYXRlZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApO1xuXHR9XG5cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTtcblx0XHR9ICk7XG5cdH0sXG5cdHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXTtcblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG4vLyBTdXBwb3J0OiBGaXJlZm94IDw9NDRcbi8vIEZpcmVmb3ggZG9lc24ndCBoYXZlIGZvY3VzKGluIHwgb3V0KSBldmVudHNcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3Nzg3XG4vL1xuLy8gU3VwcG9ydDogQ2hyb21lIDw9NDggLSA0OSwgU2FmYXJpIDw9OS4wIC0gOS4xXG4vLyBmb2N1cyhpbiB8IG91dCkgZXZlbnRzIGZpcmUgYWZ0ZXIgZm9jdXMgJiBibHVyIGV2ZW50cyxcbi8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1ldmVudC1vcmRlclxuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDk4NTdcbmlmICggIXN1cHBvcnQuZm9jdXNpbiApIHtcblx0alF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblxuXHRcdC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnQgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0XG5cdFx0dmFyIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZpeCwgZXZlbnQudGFyZ2V0LCBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApICk7XG5cdFx0fTtcblxuXHRcdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHtcblx0XHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBIYW5kbGU6IHJlZ3VsYXIgbm9kZXMgKHZpYSBgdGhpcy5vd25lckRvY3VtZW50YCksIHdpbmRvd1xuXHRcdFx0XHQvLyAodmlhIGB0aGlzLmRvY3VtZW50YCkgJiBkb2N1bWVudCAodmlhIGB0aGlzYCkuXG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5kb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XG5cdFx0XHR9LFxuXHRcdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMuZG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKSAtIDE7XG5cblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0ZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGRvYywgZml4ICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCBhdHRhY2hlcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fSApO1xufVxudmFyIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uO1xuXG52YXIgbm9uY2UgPSB7IGd1aWQ6IERhdGUubm93KCkgfTtcblxudmFyIHJxdWVyeSA9ICggL1xcPy8gKTtcblxuXG5cbi8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNpbmdcbmpRdWVyeS5wYXJzZVhNTCA9IGZ1bmN0aW9uKCBkYXRhICkge1xuXHR2YXIgeG1sO1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gSUUgdGhyb3dzIG9uIHBhcnNlRnJvbVN0cmluZyB3aXRoIGludmFsaWQgaW5wdXQuXG5cdHRyeSB7XG5cdFx0eG1sID0gKCBuZXcgd2luZG93LkRPTVBhcnNlcigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCBcInRleHQveG1sXCIgKTtcblx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0eG1sID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKCAheG1sIHx8IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCJwYXJzZXJlcnJvclwiICkubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5lcnJvciggXCJJbnZhbGlkIFhNTDogXCIgKyBkYXRhICk7XG5cdH1cblx0cmV0dXJuIHhtbDtcbn07XG5cblxudmFyXG5cdHJicmFja2V0ID0gL1xcW1xcXSQvLFxuXHRyQ1JMRiA9IC9cXHI/XFxuL2csXG5cdHJzdWJtaXR0ZXJUeXBlcyA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxcblx0cnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO1xuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7XG5cdHZhciBuYW1lO1xuXG5cdGlmICggQXJyYXkuaXNBcnJheSggb2JqICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS5cblx0XHRqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHtcblx0XHRcdGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7XG5cblx0XHRcdFx0Ly8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLlxuXHRcdFx0XHRhZGQoIHByZWZpeCwgdiApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cyBudW1lcmljIGluZGV4LlxuXHRcdFx0XHRidWlsZFBhcmFtcyhcblx0XHRcdFx0XHRwcmVmaXggKyBcIltcIiArICggdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPSBudWxsID8gaSA6IFwiXCIgKSArIFwiXVwiLFxuXHRcdFx0XHRcdHYsXG5cdFx0XHRcdFx0dHJhZGl0aW9uYWwsXG5cdFx0XHRcdFx0YWRkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdH0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiB0b1R5cGUoIG9iaiApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIG9iamVjdCBpdGVtLlxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCArIFwiW1wiICsgbmFtZSArIFwiXVwiLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHNjYWxhciBpdGVtLlxuXHRcdGFkZCggcHJlZml4LCBvYmogKTtcblx0fVxufVxuXG4vLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZlxuLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nXG5qUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7XG5cdHZhciBwcmVmaXgsXG5cdFx0cyA9IFtdLFxuXHRcdGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlT3JGdW5jdGlvbiApIHtcblxuXHRcdFx0Ly8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCB1c2UgaXRzIHJldHVybiB2YWx1ZVxuXHRcdFx0dmFyIHZhbHVlID0gaXNGdW5jdGlvbiggdmFsdWVPckZ1bmN0aW9uICkgP1xuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb24oKSA6XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbjtcblxuXHRcdFx0c1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyBcIj1cIiArXG5cdFx0XHRcdGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSApO1xuXHRcdH07XG5cblx0aWYgKCBhID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLlxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApO1xuXHRcdH0gKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApO1xuXHR9LFxuXHRzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgXCJlbGVtZW50c1wiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50c1xuXHRcdFx0dmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsIFwiZWxlbWVudHNcIiApO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XG5cdFx0fSApXG5cdFx0LmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdFx0Ly8gVXNlIC5pcyggXCI6ZGlzYWJsZWRcIiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzXG5cdFx0XHRyZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggXCI6ZGlzYWJsZWRcIiApICYmXG5cdFx0XHRcdHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiZcblx0XHRcdFx0KCB0aGlzLmNoZWNrZWQgfHwgIXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApO1xuXHRcdH0gKVxuXHRcdC5tYXAoIGZ1bmN0aW9uKCBfaSwgZWxlbSApIHtcblx0XHRcdHZhciB2YWwgPSBqUXVlcnkoIHRoaXMgKS52YWwoKTtcblxuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdH0gKS5nZXQoKTtcblx0fVxufSApO1xuXG5cbnZhclxuXHRyMjAgPSAvJTIwL2csXG5cdHJoYXNoID0gLyMuKiQvLFxuXHRyYW50aUNhY2hlID0gLyhbPyZdKV89W14mXSovLFxuXHRyaGVhZGVycyA9IC9eKC4qPyk6WyBcXHRdKihbXlxcclxcbl0qKSQvbWcsXG5cblx0Ly8gIzc2NTMsICM4MTI1LCAjODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uXG5cdHJsb2NhbFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sXG5cdHJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLFxuXHRycHJvdG9jb2wgPSAvXlxcL1xcLy8sXG5cblx0LyogUHJlZmlsdGVyc1xuXHQgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKVxuXHQgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOlxuXHQgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0XG5cdCAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSlcblx0ICogMykga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHRwcmVmaWx0ZXJzID0ge30sXG5cblx0LyogVHJhbnNwb3J0cyBiaW5kaW5nc1xuXHQgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHR0cmFuc3BvcnRzID0ge30sXG5cblx0Ly8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uXG5cdGFsbFR5cGVzID0gXCIqL1wiLmNvbmNhdCggXCIqXCIgKSxcblxuXHQvLyBBbmNob3IgdGFnIGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b3JpZ2luQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblx0b3JpZ2luQW5jaG9yLmhyZWYgPSBsb2NhdGlvbi5ocmVmO1xuXG4vLyBCYXNlIFwiY29uc3RydWN0b3JcIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0XG5mdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHtcblxuXHQvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIFwiKlwiXG5cdHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkge1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjtcblx0XHRcdGRhdGFUeXBlRXhwcmVzc2lvbiA9IFwiKlwiO1xuXHRcdH1cblxuXHRcdHZhciBkYXRhVHlwZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0ZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggZnVuYyApICkge1xuXG5cdFx0XHQvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uXG5cdFx0XHR3aGlsZSAoICggZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJlcGVuZCBpZiByZXF1ZXN0ZWRcblx0XHRcdFx0aWYgKCBkYXRhVHlwZVsgMCBdID09PSBcIitcIiApIHtcblx0XHRcdFx0XHRkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNlKCAxICkgfHwgXCIqXCI7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS51bnNoaWZ0KCBmdW5jICk7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkucHVzaCggZnVuYyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRyYW5zcG9ydHNcbmZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKSB7XG5cblx0dmFyIGluc3BlY3RlZCA9IHt9LFxuXHRcdHNlZWtpbmdUcmFuc3BvcnQgPSAoIHN0cnVjdHVyZSA9PT0gdHJhbnNwb3J0cyApO1xuXG5cdGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBlICkge1xuXHRcdHZhciBzZWxlY3RlZDtcblx0XHRpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlO1xuXHRcdGpRdWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9uKCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7XG5cdFx0XHR2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApO1xuXHRcdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0gKSB7XG5cblx0XHRcdFx0b3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRpbnNwZWN0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7XG5cdFx0XHRcdHJldHVybiAhKCBzZWxlY3RlZCA9IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIHNlbGVjdGVkO1xuXHR9XG5cblx0cmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAwIF0gKSB8fCAhaW5zcGVjdGVkWyBcIipcIiBdICYmIGluc3BlY3QoIFwiKlwiICk7XG59XG5cbi8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9uc1xuLy8gdGhhdCB0YWtlcyBcImZsYXRcIiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZClcbi8vIEZpeGVzICM5ODg3XG5mdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHtcblx0dmFyIGtleSwgZGVlcCxcblx0XHRmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307XG5cblx0Zm9yICgga2V5IGluIHNyYyApIHtcblx0XHRpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdCggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07XG5cdFx0fVxuXHR9XG5cdGlmICggZGVlcCApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTtcblx0fVxuXG5cdHJldHVybiB0YXJnZXQ7XG59XG5cbi8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDpcbiAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpXG4gKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHtcblxuXHR2YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0YVR5cGUsXG5cdFx0Y29udGVudHMgPSBzLmNvbnRlbnRzLFxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzO1xuXG5cdC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzXG5cdHdoaWxlICggZGF0YVR5cGVzWyAwIF0gPT09IFwiKlwiICkge1xuXHRcdGRhdGFUeXBlcy5zaGlmdCgpO1xuXHRcdGlmICggY3QgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJDb250ZW50LVR5cGVcIiApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZVxuXHRpZiAoIGN0ICkge1xuXHRcdGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7XG5cdFx0XHRpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkge1xuXHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGVcblx0aWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7XG5cdFx0ZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdO1xuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlc1xuXHRcdGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkge1xuXHRcdFx0aWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgXCIgXCIgKyBkYXRhVHlwZXNbIDAgXSBdICkge1xuXHRcdFx0XHRmaW5hbERhdGFUeXBlID0gdHlwZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICFmaXJzdERhdGFUeXBlICkge1xuXHRcdFx0XHRmaXJzdERhdGFUeXBlID0gdHlwZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmVcblx0XHRmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlO1xuXHR9XG5cblx0Ly8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZVxuXHQvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZFxuXHQvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG5cdGlmICggZmluYWxEYXRhVHlwZSApIHtcblx0XHRpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkge1xuXHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdO1xuXHR9XG59XG5cbi8qIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9uc2VcbiAqIEFsc28gc2V0cyB0aGUgcmVzcG9uc2VYWFggZmllbGRzIG9uIHRoZSBqcVhIUiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKSB7XG5cdHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LFxuXHRcdGNvbnZlcnRlcnMgPSB7fSxcblxuXHRcdC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb25cblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpO1xuXG5cdC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5c1xuXHRpZiAoIGRhdGFUeXBlc1sgMSBdICkge1xuXHRcdGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkge1xuXHRcdFx0Y29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTtcblx0XHR9XG5cdH1cblxuXHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0Ly8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGVcblx0d2hpbGUgKCBjdXJyZW50ICkge1xuXG5cdFx0aWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7XG5cdFx0XHRqcVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZFxuXHRcdGlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHtcblx0XHRcdHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApO1xuXHRcdH1cblxuXHRcdHByZXYgPSBjdXJyZW50O1xuXHRcdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHRcdGlmICggY3VycmVudCApIHtcblxuXHRcdFx0Ly8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRhVHlwZSBpcyBub24tYXV0b1xuXHRcdFx0aWYgKCBjdXJyZW50ID09PSBcIipcIiApIHtcblxuXHRcdFx0XHRjdXJyZW50ID0gcHJldjtcblxuXHRcdFx0Ly8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudFxuXHRcdFx0fSBlbHNlIGlmICggcHJldiAhPT0gXCIqXCIgJiYgcHJldiAhPT0gY3VycmVudCApIHtcblxuXHRcdFx0XHQvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlclxuXHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgY3VycmVudCBdIHx8IGNvbnZlcnRlcnNbIFwiKiBcIiArIGN1cnJlbnQgXTtcblxuXHRcdFx0XHQvLyBJZiBub25lIGZvdW5kLCBzZWVrIGEgcGFpclxuXHRcdFx0XHRpZiAoICFjb252ICkge1xuXHRcdFx0XHRcdGZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudFxuXHRcdFx0XHRcdFx0dG1wID0gY29udjIuc3BsaXQoIFwiIFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRlZCBpbnB1dFxuXHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgdG1wWyAwIF0gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlcnNbIFwiKiBcIiArIHRtcFsgMCBdIF07XG5cdFx0XHRcdFx0XHRcdGlmICggY29udiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgPT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgY29udjIgXTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgaW5zZXJ0IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGVcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudCA9IHRtcFsgMCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpXG5cdFx0XHRcdGlmICggY29udiAhPT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW1cblx0XHRcdFx0XHRpZiAoIGNvbnYgJiYgcy50aHJvd3MgKSB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlOiBcInBhcnNlcmVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGNvbnYgPyBlIDogXCJObyBjb252ZXJzaW9uIGZyb20gXCIgKyBwcmV2ICsgXCIgdG8gXCIgKyBjdXJyZW50XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgc3RhdGU6IFwic3VjY2Vzc1wiLCBkYXRhOiByZXNwb25zZSB9O1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzXG5cdGFjdGl2ZTogMCxcblxuXHQvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0XG5cdGxhc3RNb2RpZmllZDoge30sXG5cdGV0YWc6IHt9LFxuXG5cdGFqYXhTZXR0aW5nczoge1xuXHRcdHVybDogbG9jYXRpb24uaHJlZixcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGlzTG9jYWw6IHJsb2NhbFByb3RvY29sLnRlc3QoIGxvY2F0aW9uLnByb3RvY29sICksXG5cdFx0Z2xvYmFsOiB0cnVlLFxuXHRcdHByb2Nlc3NEYXRhOiB0cnVlLFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLFxuXG5cdFx0Lypcblx0XHR0aW1lb3V0OiAwLFxuXHRcdGRhdGE6IG51bGwsXG5cdFx0ZGF0YVR5cGU6IG51bGwsXG5cdFx0dXNlcm5hbWU6IG51bGwsXG5cdFx0cGFzc3dvcmQ6IG51bGwsXG5cdFx0Y2FjaGU6IG51bGwsXG5cdFx0dGhyb3dzOiBmYWxzZSxcblx0XHR0cmFkaXRpb25hbDogZmFsc2UsXG5cdFx0aGVhZGVyczoge30sXG5cdFx0Ki9cblxuXHRcdGFjY2VwdHM6IHtcblx0XHRcdFwiKlwiOiBhbGxUeXBlcyxcblx0XHRcdHRleHQ6IFwidGV4dC9wbGFpblwiLFxuXHRcdFx0aHRtbDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdHhtbDogXCJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sXCIsXG5cdFx0XHRqc29uOiBcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdFwiXG5cdFx0fSxcblxuXHRcdGNvbnRlbnRzOiB7XG5cdFx0XHR4bWw6IC9cXGJ4bWxcXGIvLFxuXHRcdFx0aHRtbDogL1xcYmh0bWwvLFxuXHRcdFx0anNvbjogL1xcYmpzb25cXGIvXG5cdFx0fSxcblxuXHRcdHJlc3BvbnNlRmllbGRzOiB7XG5cdFx0XHR4bWw6IFwicmVzcG9uc2VYTUxcIixcblx0XHRcdHRleHQ6IFwicmVzcG9uc2VUZXh0XCIsXG5cdFx0XHRqc29uOiBcInJlc3BvbnNlSlNPTlwiXG5cdFx0fSxcblxuXHRcdC8vIERhdGEgY29udmVydGVyc1xuXHRcdC8vIEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRjaGFsbCBcIipcIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2Vcblx0XHRjb252ZXJ0ZXJzOiB7XG5cblx0XHRcdC8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dFxuXHRcdFx0XCIqIHRleHRcIjogU3RyaW5nLFxuXG5cdFx0XHQvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbilcblx0XHRcdFwidGV4dCBodG1sXCI6IHRydWUsXG5cblx0XHRcdC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb25cblx0XHRcdFwidGV4dCBqc29uXCI6IEpTT04ucGFyc2UsXG5cblx0XHRcdC8vIFBhcnNlIHRleHQgYXMgeG1sXG5cdFx0XHRcInRleHQgeG1sXCI6IGpRdWVyeS5wYXJzZVhNTFxuXHRcdH0sXG5cblx0XHQvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOlxuXHRcdC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWZcblx0XHQvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZVxuXHRcdC8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKVxuXHRcdGZsYXRPcHRpb25zOiB7XG5cdFx0XHR1cmw6IHRydWUsXG5cdFx0XHRjb250ZXh0OiB0cnVlXG5cdFx0fVxuXHR9LFxuXG5cdC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0XG5cdC8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy5cblx0Ly8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy5cblx0YWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHtcblx0XHRyZXR1cm4gc2V0dGluZ3MgP1xuXG5cdFx0XHQvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVjdFxuXHRcdFx0YWpheEV4dGVuZCggYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICksIHNldHRpbmdzICkgOlxuXG5cdFx0XHQvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzXG5cdFx0XHRhamF4RXh0ZW5kKCBqUXVlcnkuYWpheFNldHRpbmdzLCB0YXJnZXQgKTtcblx0fSxcblxuXHRhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSxcblx0YWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksXG5cblx0Ly8gTWFpbiBtZXRob2Rcblx0YWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHtcblxuXHRcdC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJlXG5cdFx0aWYgKCB0eXBlb2YgdXJsID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0b3B0aW9ucyA9IHVybDtcblx0XHRcdHVybCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdFxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0dmFyIHRyYW5zcG9ydCxcblxuXHRcdFx0Ly8gVVJMIHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbVxuXHRcdFx0Y2FjaGVVUkwsXG5cblx0XHRcdC8vIFJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyxcblx0XHRcdHJlc3BvbnNlSGVhZGVycyxcblxuXHRcdFx0Ly8gdGltZW91dCBoYW5kbGVcblx0XHRcdHRpbWVvdXRUaW1lcixcblxuXHRcdFx0Ly8gVXJsIGNsZWFudXAgdmFyXG5cdFx0XHR1cmxBbmNob3IsXG5cblx0XHRcdC8vIFJlcXVlc3Qgc3RhdGUgKGJlY29tZXMgZmFsc2UgdXBvbiBzZW5kIGFuZCB0cnVlIHVwb24gY29tcGxldGlvbilcblx0XHRcdGNvbXBsZXRlZCxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkXG5cdFx0XHRmaXJlR2xvYmFscyxcblxuXHRcdFx0Ly8gTG9vcCB2YXJpYWJsZVxuXHRcdFx0aSxcblxuXHRcdFx0Ly8gdW5jYWNoZWQgcGFydCBvZiB0aGUgdXJsXG5cdFx0XHR1bmNhY2hlZCxcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdFxuXHRcdFx0cyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksXG5cblx0XHRcdC8vIENhbGxiYWNrcyBjb250ZXh0XG5cdFx0XHRjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcyxcblxuXHRcdFx0Ly8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29sbGVjdGlvblxuXHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmXG5cdFx0XHRcdCggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LFxuXG5cdFx0XHQvLyBEZWZlcnJlZHNcblx0XHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LFxuXG5cdFx0XHQvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKVxuXHRcdFx0cmVxdWVzdEhlYWRlcnMgPSB7fSxcblx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSxcblxuXHRcdFx0Ly8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlXG5cdFx0XHRzdHJBYm9ydCA9IFwiY2FuY2VsZWRcIixcblxuXHRcdFx0Ly8gRmFrZSB4aHJcblx0XHRcdGpxWEhSID0ge1xuXHRcdFx0XHRyZWFkeVN0YXRlOiAwLFxuXG5cdFx0XHRcdC8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWRcblx0XHRcdFx0Z2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoO1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAhcmVzcG9uc2VIZWFkZXJzICkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnMgPSB7fTtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gPVxuXHRcdFx0XHRcdFx0XHRcdFx0KCByZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gfHwgW10gKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuY29uY2F0KCBtYXRjaFsgMiBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSArIFwiIFwiIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBtYXRjaCA9PSBudWxsID8gbnVsbCA6IG1hdGNoLmpvaW4oIFwiLCBcIiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFJhdyBzdHJpbmdcblx0XHRcdFx0Z2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29tcGxldGVkID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5nIDogbnVsbDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYWNoZXMgdGhlIGhlYWRlclxuXHRcdFx0XHRzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdG5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSA9XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8IG5hbWU7XG5cdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVyXG5cdFx0XHRcdG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRzLm1pbWVUeXBlID0gdHlwZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdFx0c3RhdHVzQ29kZTogZnVuY3Rpb24oIG1hcCApIHtcblx0XHRcdFx0XHR2YXIgY29kZTtcblx0XHRcdFx0XHRpZiAoIG1hcCApIHtcblx0XHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrc1xuXHRcdFx0XHRcdFx0XHRqcVhIUi5hbHdheXMoIG1hcFsganFYSFIuc3RhdHVzIF0gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTGF6eS1hZGQgdGhlIG5ldyBjYWxsYmFja3MgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXNcblx0XHRcdFx0XHRcdFx0Zm9yICggY29kZSBpbiBtYXAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdHVzQ29kZVsgY29kZSBdID0gWyBzdGF0dXNDb2RlWyBjb2RlIF0sIG1hcFsgY29kZSBdIF07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSByZXF1ZXN0XG5cdFx0XHRcdGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHR2YXIgZmluYWxUZXh0ID0gc3RhdHVzVGV4dCB8fCBzdHJBYm9ydDtcblx0XHRcdFx0XHRpZiAoIHRyYW5zcG9ydCApIHtcblx0XHRcdFx0XHRcdHRyYW5zcG9ydC5hYm9ydCggZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRvbmUoIDAsIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0Ly8gQXR0YWNoIGRlZmVycmVkc1xuXHRcdGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7XG5cblx0XHQvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVkIChwcmVmaWx0ZXJzIG1pZ2h0IGV4cGVjdCBpdClcblx0XHQvLyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBvYmplY3QgKCMxMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKVxuXHRcdC8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZVxuXHRcdHMudXJsID0gKCAoIHVybCB8fCBzLnVybCB8fCBsb2NhdGlvbi5ocmVmICkgKyBcIlwiIClcblx0XHRcdC5yZXBsYWNlKCBycHJvdG9jb2wsIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICk7XG5cblx0XHQvLyBBbGlhcyBtZXRob2Qgb3B0aW9uIHRvIHR5cGUgYXMgcGVyIHRpY2tldCAjMTIwMDRcblx0XHRzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlO1xuXG5cdFx0Ly8gRXh0cmFjdCBkYXRhVHlwZXMgbGlzdFxuXHRcdHMuZGF0YVR5cGVzID0gKCBzLmRhdGFUeXBlIHx8IFwiKlwiICkudG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXG5cdFx0Ly8gQSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHRoZSBvcmlnaW4gZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCBvcmlnaW4uXG5cdFx0aWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7XG5cdFx0XHR1cmxBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0XHQvLyBJRSB0aHJvd3MgZXhjZXB0aW9uIG9uIGFjY2Vzc2luZyB0aGUgaHJlZiBwcm9wZXJ0eSBpZiB1cmwgaXMgbWFsZm9ybWVkLFxuXHRcdFx0Ly8gZS5nLiBodHRwOi8vZXhhbXBsZS5jb206ODB4L1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSBzLnVybDtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSBvbmx5XG5cdFx0XHRcdC8vIEFuY2hvcidzIGhvc3QgcHJvcGVydHkgaXNuJ3QgY29ycmVjdGx5IHNldCB3aGVuIHMudXJsIGlzIHJlbGF0aXZlXG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gdXJsQW5jaG9yLmhyZWY7XG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSBvcmlnaW5BbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyBvcmlnaW5BbmNob3IuaG9zdCAhPT1cblx0XHRcdFx0XHR1cmxBbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyB1cmxBbmNob3IuaG9zdDtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZXJlIGlzIGFuIGVycm9yIHBhcnNpbmcgdGhlIFVSTCwgYXNzdW1lIGl0IGlzIGNyb3NzRG9tYWluLFxuXHRcdFx0XHQvLyBpdCBjYW4gYmUgcmVqZWN0ZWQgYnkgdGhlIHRyYW5zcG9ydCBpZiBpdCBpcyBpbnZhbGlkXG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZ1xuXHRcdGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBzLnRyYWRpdGlvbmFsICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcHJlZmlsdGVyc1xuXHRcdGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmVcblx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdHJldHVybiBqcVhIUjtcblx0XHR9XG5cblx0XHQvLyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZlbnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0b1xuXHRcdC8vIERvbid0IGZpcmUgZXZlbnRzIGlmIGpRdWVyeS5ldmVudCBpcyB1bmRlZmluZWQgaW4gYW4gQU1ELXVzYWdlIHNjZW5hcmlvICgjMTUxMTgpXG5cdFx0ZmlyZUdsb2JhbHMgPSBqUXVlcnkuZXZlbnQgJiYgcy5nbG9iYWw7XG5cblx0XHQvLyBXYXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3RzXG5cdFx0aWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RhcnRcIiApO1xuXHRcdH1cblxuXHRcdC8vIFVwcGVyY2FzZSB0aGUgdHlwZVxuXHRcdHMudHlwZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnRcblx0XHRzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTtcblxuXHRcdC8vIFNhdmUgdGhlIFVSTCBpbiBjYXNlIHdlJ3JlIHRveWluZyB3aXRoIHRoZSBJZi1Nb2RpZmllZC1TaW5jZVxuXHRcdC8vIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciBsYXRlciBvblxuXHRcdC8vIFJlbW92ZSBoYXNoIHRvIHNpbXBsaWZ5IHVybCBtYW5pcHVsYXRpb25cblx0XHRjYWNoZVVSTCA9IHMudXJsLnJlcGxhY2UoIHJoYXNoLCBcIlwiICk7XG5cblx0XHQvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudFxuXHRcdGlmICggIXMuaGFzQ29udGVudCApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIGhhc2ggc28gd2UgY2FuIHB1dCBpdCBiYWNrXG5cdFx0XHR1bmNhY2hlZCA9IHMudXJsLnNsaWNlKCBjYWNoZVVSTC5sZW5ndGggKTtcblxuXHRcdFx0Ly8gSWYgZGF0YSBpcyBhdmFpbGFibGUgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQsIGFwcGVuZCBkYXRhIHRvIHVybFxuXHRcdFx0aWYgKCBzLmRhdGEgJiYgKCBzLnByb2Nlc3NEYXRhIHx8IHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgKSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgKz0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuZGF0YTtcblxuXHRcdFx0XHQvLyAjOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5XG5cdFx0XHRcdGRlbGV0ZSBzLmRhdGE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBvciB1cGRhdGUgYW50aS1jYWNoZSBwYXJhbSBpZiBuZWVkZWRcblx0XHRcdGlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdGNhY2hlVVJMID0gY2FjaGVVUkwucmVwbGFjZSggcmFudGlDYWNoZSwgXCIkMVwiICk7XG5cdFx0XHRcdHVuY2FjaGVkID0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIFwiXz1cIiArICggbm9uY2UuZ3VpZCsrICkgK1xuXHRcdFx0XHRcdHVuY2FjaGVkO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQdXQgaGFzaCBhbmQgYW50aS1jYWNoZSBvbiB0aGUgVVJMIHRoYXQgd2lsbCBiZSByZXF1ZXN0ZWQgKGdoLTE3MzIpXG5cdFx0XHRzLnVybCA9IGNhY2hlVVJMICsgdW5jYWNoZWQ7XG5cblx0XHQvLyBDaGFuZ2UgJyUyMCcgdG8gJysnIGlmIHRoaXMgaXMgZW5jb2RlZCBmb3JtIGJvZHkgY29udGVudCAoZ2gtMjY1OClcblx0XHR9IGVsc2UgaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJlxuXHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKS5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgKSB7XG5cdFx0XHRzLmRhdGEgPSBzLmRhdGEucmVwbGFjZSggcjIwLCBcIitcIiApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTW9kaWZpZWQtU2luY2VcIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Ob25lLU1hdGNoXCIsIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50XG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiLCBzLmNvbnRlbnRUeXBlICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZVxuXHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoXG5cdFx0XHRcIkFjY2VwdFwiLFxuXHRcdFx0cy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSA/XG5cdFx0XHRcdHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdICtcblx0XHRcdFx0XHQoIHMuZGF0YVR5cGVzWyAwIF0gIT09IFwiKlwiID8gXCIsIFwiICsgYWxsVHlwZXMgKyBcIjsgcT0wLjAxXCIgOiBcIlwiICkgOlxuXHRcdFx0XHRzLmFjY2VwdHNbIFwiKlwiIF1cblx0XHQpO1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9uXG5cdFx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApO1xuXHRcdH1cblxuXHRcdC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnRcblx0XHRpZiAoIHMuYmVmb3JlU2VuZCAmJlxuXHRcdFx0KCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBjb21wbGV0ZWQgKSApIHtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuXG5cdFx0XHRyZXR1cm4ganFYSFIuYWJvcnQoKTtcblx0XHR9XG5cblx0XHQvLyBBYm9ydGluZyBpcyBubyBsb25nZXIgYSBjYW5jZWxsYXRpb25cblx0XHRzdHJBYm9ydCA9IFwiYWJvcnRcIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRlZmVycmVkc1xuXHRcdGNvbXBsZXRlRGVmZXJyZWQuYWRkKCBzLmNvbXBsZXRlICk7XG5cdFx0anFYSFIuZG9uZSggcy5zdWNjZXNzICk7XG5cdFx0anFYSFIuZmFpbCggcy5lcnJvciApO1xuXG5cdFx0Ly8gR2V0IHRyYW5zcG9ydFxuXHRcdHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0XG5cdFx0aWYgKCAhdHJhbnNwb3J0ICkge1xuXHRcdFx0ZG9uZSggLTEsIFwiTm8gVHJhbnNwb3J0XCIgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IDE7XG5cblx0XHRcdC8vIFNlbmQgZ2xvYmFsIGV2ZW50XG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4U2VuZFwiLCBbIGpxWEhSLCBzIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYWpheFNlbmQsIHN0b3AgdGhlcmVcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRpbWVvdXRcblx0XHRcdGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkge1xuXHRcdFx0XHR0aW1lb3V0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0anFYSFIuYWJvcnQoIFwidGltZW91dFwiICk7XG5cdFx0XHRcdH0sIHMudGltZW91dCApO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb21wbGV0ZWQgPSBmYWxzZTtcblx0XHRcdFx0dHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBSZXRocm93IHBvc3QtY29tcGxldGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBQcm9wYWdhdGUgb3RoZXJzIGFzIHJlc3VsdHNcblx0XHRcdFx0ZG9uZSggLTEsIGUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVyeXRoaW5nIGlzIGRvbmVcblx0XHRmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHtcblx0XHRcdHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsXG5cdFx0XHRcdHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0O1xuXG5cdFx0XHQvLyBJZ25vcmUgcmVwZWF0IGludm9jYXRpb25zXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb21wbGV0ZWQgPSB0cnVlO1xuXG5cdFx0XHQvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0c1xuXHRcdFx0aWYgKCB0aW1lb3V0VGltZXIgKSB7XG5cdFx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvblxuXHRcdFx0Ly8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZClcblx0XHRcdHRyYW5zcG9ydCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0Ly8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTZXQgcmVhZHlTdGF0ZVxuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDtcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWxcblx0XHRcdGlzU3VjY2VzcyA9IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0O1xuXG5cdFx0XHQvLyBHZXQgcmVzcG9uc2UgZGF0YVxuXHRcdFx0aWYgKCByZXNwb25zZXMgKSB7XG5cdFx0XHRcdHJlc3BvbnNlID0gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBVc2UgYSBub29wIGNvbnZlcnRlciBmb3IgbWlzc2luZyBzY3JpcHRcblx0XHRcdGlmICggIWlzU3VjY2VzcyAmJiBqUXVlcnkuaW5BcnJheSggXCJzY3JpcHRcIiwgcy5kYXRhVHlwZXMgKSA+IC0xICkge1xuXHRcdFx0XHRzLmNvbnZlcnRlcnNbIFwidGV4dCBzY3JpcHRcIiBdID0gZnVuY3Rpb24oKSB7fTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KVxuXHRcdFx0cmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTtcblxuXHRcdFx0Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmdcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXG5cdFx0XHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0XHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiTGFzdC1Nb2RpZmllZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJldGFnXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpZiBubyBjb250ZW50XG5cdFx0XHRcdGlmICggc3RhdHVzID09PSAyMDQgfHwgcy50eXBlID09PSBcIkhFQURcIiApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub2NvbnRlbnRcIjtcblxuXHRcdFx0XHQvLyBpZiBub3QgbW9kaWZpZWRcblx0XHRcdFx0fSBlbHNlIGlmICggc3RhdHVzID09PSAzMDQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm90bW9kaWZpZWRcIjtcblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7XG5cdFx0XHRcdFx0c3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0ZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRpc1N1Y2Nlc3MgPSAhZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5kIG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0c1xuXHRcdFx0XHRlcnJvciA9IHN0YXR1c1RleHQ7XG5cdFx0XHRcdGlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcImVycm9yXCI7XG5cdFx0XHRcdFx0aWYgKCBzdGF0dXMgPCAwICkge1xuXHRcdFx0XHRcdFx0c3RhdHVzID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3Rcblx0XHRcdGpxWEhSLnN0YXR1cyA9IHN0YXR1cztcblx0XHRcdGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgXCJcIjtcblxuXHRcdFx0Ly8gU3VjY2Vzcy9FcnJvclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7XG5cdFx0XHRzdGF0dXNDb2RlID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gXCJhamF4U3VjY2Vzc1wiIDogXCJhamF4RXJyb3JcIixcblx0XHRcdFx0XHRbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb21wbGV0ZVxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheENvbXBsZXRlXCIsIFsganFYSFIsIHMgXSApO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlclxuXHRcdFx0XHRpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdG9wXCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBqcVhIUjtcblx0fSxcblxuXHRnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgXCJqc29uXCIgKTtcblx0fSxcblxuXHRnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssIFwic2NyaXB0XCIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImdldFwiLCBcInBvc3RcIiBdLCBmdW5jdGlvbiggX2ksIG1ldGhvZCApIHtcblx0alF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkge1xuXG5cdFx0Ly8gU2hpZnQgYXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWRcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGRhdGEgKSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrO1xuXHRcdFx0Y2FsbGJhY2sgPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBUaGUgdXJsIGNhbiBiZSBhbiBvcHRpb25zIG9iamVjdCAod2hpY2ggdGhlbiBtdXN0IGhhdmUgLnVybClcblx0XHRyZXR1cm4galF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdHVybDogdXJsLFxuXHRcdFx0dHlwZTogbWV0aG9kLFxuXHRcdFx0ZGF0YVR5cGU6IHR5cGUsXG5cdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0c3VjY2VzczogY2FsbGJhY2tcblx0XHR9LCBqUXVlcnkuaXNQbGFpbk9iamVjdCggdXJsICkgJiYgdXJsICkgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHR2YXIgaTtcblx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0aWYgKCBpLnRvTG93ZXJDYXNlKCkgPT09IFwiY29udGVudC10eXBlXCIgKSB7XG5cdFx0XHRzLmNvbnRlbnRUeXBlID0gcy5oZWFkZXJzWyBpIF0gfHwgXCJcIjtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsLCBvcHRpb25zLCBkb2MgKSB7XG5cdHJldHVybiBqUXVlcnkuYWpheCgge1xuXHRcdHVybDogdXJsLFxuXG5cdFx0Ly8gTWFrZSB0aGlzIGV4cGxpY2l0LCBzaW5jZSB1c2VyIGNhbiBvdmVycmlkZSB0aGlzIHRocm91Z2ggYWpheFNldHVwICgjMTEyNjQpXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRkYXRhVHlwZTogXCJzY3JpcHRcIixcblx0XHRjYWNoZTogdHJ1ZSxcblx0XHRhc3luYzogZmFsc2UsXG5cdFx0Z2xvYmFsOiBmYWxzZSxcblxuXHRcdC8vIE9ubHkgZXZhbHVhdGUgdGhlIHJlc3BvbnNlIGlmIGl0IGlzIHN1Y2Nlc3NmdWwgKGdoLTQxMjYpXG5cdFx0Ly8gZGF0YUZpbHRlciBpcyBub3QgaW52b2tlZCBmb3IgZmFpbHVyZSByZXNwb25zZXMsIHNvIHVzaW5nIGl0IGluc3RlYWRcblx0XHQvLyBvZiB0aGUgZGVmYXVsdCBjb252ZXJ0ZXIgaXMga2x1ZGd5IGJ1dCBpdCB3b3Jrcy5cblx0XHRjb252ZXJ0ZXJzOiB7XG5cdFx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCkge31cblx0XHR9LFxuXHRcdGRhdGFGaWx0ZXI6IGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCByZXNwb25zZSwgb3B0aW9ucywgZG9jICk7XG5cdFx0fVxuXHR9ICk7XG59O1xuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0d3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIHdyYXA7XG5cblx0XHRpZiAoIHRoaXNbIDAgXSApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0XHRodG1sID0gaHRtbC5jYWxsKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmRcblx0XHRcdHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSApO1xuXG5cdFx0XHRpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR3cmFwLmluc2VydEJlZm9yZSggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHdyYXAubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGVsZW0gPSB0aGlzO1xuXG5cdFx0XHRcdHdoaWxlICggZWxlbS5maXJzdEVsZW1lbnRDaGlsZCApIHtcblx0XHRcdFx0XHRlbGVtID0gZWxlbS5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbGVtO1xuXHRcdFx0fSApLmFwcGVuZCggdGhpcyApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcElubmVyKCBodG1sLmNhbGwoIHRoaXMsIGkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSxcblx0XHRcdFx0Y29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7XG5cblx0XHRcdGlmICggY29udGVudHMubGVuZ3RoICkge1xuXHRcdFx0XHRjb250ZW50cy53cmFwQWxsKCBodG1sICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuYXBwZW5kKCBodG1sICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHdyYXA6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciBodG1sSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIGh0bWwgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaHRtbElzRnVuY3Rpb24gPyBodG1sLmNhbGwoIHRoaXMsIGkgKSA6IGh0bWwgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0dW53cmFwOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dGhpcy5wYXJlbnQoIHNlbGVjdG9yICkubm90KCBcImJvZHlcIiApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApO1xuXHRcdH0gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhalF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlKCBlbGVtICk7XG59O1xualF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhISggZWxlbS5vZmZzZXRXaWR0aCB8fCBlbGVtLm9mZnNldEhlaWdodCB8fCBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICk7XG59O1xuXG5cblxuXG5qUXVlcnkuYWpheFNldHRpbmdzLnhociA9IGZ1bmN0aW9uKCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG5cdH0gY2F0Y2ggKCBlICkge31cbn07XG5cbnZhciB4aHJTdWNjZXNzU3RhdHVzID0ge1xuXG5cdFx0Ly8gRmlsZSBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyBjb2RlIDAsIGFzc3VtZSAyMDBcblx0XHQwOiAyMDAsXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdC8vICMxNDUwOiBzb21ldGltZXMgSUUgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIwNFxuXHRcdDEyMjM6IDIwNFxuXHR9LFxuXHR4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpO1xuXG5zdXBwb3J0LmNvcnMgPSAhIXhoclN1cHBvcnRlZCAmJiAoIFwid2l0aENyZWRlbnRpYWxzXCIgaW4geGhyU3VwcG9ydGVkICk7XG5zdXBwb3J0LmFqYXggPSB4aHJTdXBwb3J0ZWQgPSAhIXhoclN1cHBvcnRlZDtcblxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHR2YXIgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2s7XG5cblx0Ly8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdFxuXHRpZiAoIHN1cHBvcnQuY29ycyB8fCB4aHJTdXBwb3J0ZWQgJiYgIW9wdGlvbnMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0dmFyIGksXG5cdFx0XHRcdFx0eGhyID0gb3B0aW9ucy54aHIoKTtcblxuXHRcdFx0XHR4aHIub3Blbihcblx0XHRcdFx0XHRvcHRpb25zLnR5cGUsXG5cdFx0XHRcdFx0b3B0aW9ucy51cmwsXG5cdFx0XHRcdFx0b3B0aW9ucy5hc3luYyxcblx0XHRcdFx0XHRvcHRpb25zLnVzZXJuYW1lLFxuXHRcdFx0XHRcdG9wdGlvbnMucGFzc3dvcmRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHQvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0Zm9yICggaSBpbiBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRcdHhoclsgaSBdID0gb3B0aW9ucy54aHJGaWVsZHNbIGkgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHtcblx0XHRcdFx0XHR4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlwZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXJcblx0XHRcdFx0Ly8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZVxuXHRcdFx0XHQvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLlxuXHRcdFx0XHQvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cClcblx0XHRcdFx0Ly8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuXG5cdFx0XHRcdGlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gKSB7XG5cdFx0XHRcdFx0aGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSA9IFwiWE1MSHR0cFJlcXVlc3RcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNldCBoZWFkZXJzXG5cdFx0XHRcdGZvciAoIGkgaW4gaGVhZGVycyApIHtcblx0XHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrID0gZXJyb3JDYWxsYmFjayA9IHhoci5vbmxvYWQgPVxuXHRcdFx0XHRcdFx0XHRcdHhoci5vbmVycm9yID0geGhyLm9uYWJvcnQgPSB4aHIub250aW1lb3V0ID1cblx0XHRcdFx0XHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdHlwZSA9PT0gXCJhYm9ydFwiICkge1xuXHRcdFx0XHRcdFx0XHRcdHhoci5hYm9ydCgpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSBcImVycm9yXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIE9uIGEgbWFudWFsIG5hdGl2ZSBhYm9ydCwgSUU5IHRocm93c1xuXHRcdFx0XHRcdFx0XHRcdC8vIGVycm9ycyBvbiBhbnkgcHJvcGVydHkgYWNjZXNzIHRoYXQgaXMgbm90IHJlYWR5U3RhdGVcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHR5cGVvZiB4aHIuc3RhdHVzICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIDAsIFwiZXJyb3JcIiApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyAwOyBzZWUgIzg2MDUsICMxNDIwN1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0gfHwgeGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0LFxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSUU5IGhhcyBubyBYSFIyIGJ1dCB0aHJvd3Mgb24gYmluYXJ5ICh0cmFjLTExNDI2KVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIFhIUjIgbm9uLXRleHQsIGxldCB0aGUgY2FsbGVyIGhhbmRsZSBpdCAoZ2gtMjQ5OClcblx0XHRcdFx0XHRcdFx0XHRcdCggeGhyLnJlc3BvbnNlVHlwZSB8fCBcInRleHRcIiApICE9PSBcInRleHRcIiAgfHxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ICE9PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBiaW5hcnk6IHhoci5yZXNwb25zZSB9IDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyB0ZXh0OiB4aHIucmVzcG9uc2VUZXh0IH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBMaXN0ZW4gdG8gZXZlbnRzXG5cdFx0XHRcdHhoci5vbmxvYWQgPSBjYWxsYmFjaygpO1xuXHRcdFx0XHRlcnJvckNhbGxiYWNrID0geGhyLm9uZXJyb3IgPSB4aHIub250aW1lb3V0ID0gY2FsbGJhY2soIFwiZXJyb3JcIiApO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdFx0XHQvLyBVc2Ugb25yZWFkeXN0YXRlY2hhbmdlIHRvIHJlcGxhY2Ugb25hYm9ydFxuXHRcdFx0XHQvLyB0byBoYW5kbGUgdW5jYXVnaHQgYWJvcnRzXG5cdFx0XHRcdGlmICggeGhyLm9uYWJvcnQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR4aHIub25hYm9ydCA9IGVycm9yQ2FsbGJhY2s7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBDaGVjayByZWFkeVN0YXRlIGJlZm9yZSB0aW1lb3V0IGFzIGl0IGNoYW5nZXNcblx0XHRcdFx0XHRcdGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQWxsb3cgb25lcnJvciB0byBiZSBjYWxsZWQgZmlyc3QsXG5cdFx0XHRcdFx0XHRcdC8vIGJ1dCB0aGF0IHdpbGwgbm90IGhhbmRsZSBhIG5hdGl2ZSBhYm9ydFxuXHRcdFx0XHRcdFx0XHQvLyBBbHNvLCBzYXZlIGVycm9yQ2FsbGJhY2sgdG8gYSB2YXJpYWJsZVxuXHRcdFx0XHRcdFx0XHQvLyBhcyB4aHIub25lcnJvciBjYW5ub3QgYmUgYWNjZXNzZWRcblx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBjYWxsYmFjayggXCJhYm9ydFwiICk7XG5cblx0XHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRcdC8vIERvIHNlbmQgdGhlIHJlcXVlc3QgKHRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbilcblx0XHRcdFx0XHR4aHIuc2VuZCggb3B0aW9ucy5oYXNDb250ZW50ICYmIG9wdGlvbnMuZGF0YSB8fCBudWxsICk7XG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0Ly8gIzE0NjgzOiBPbmx5IHJldGhyb3cgaWYgdGhpcyBoYXNuJ3QgYmVlbiBub3RpZmllZCBhcyBhbiBlcnJvciB5ZXRcblx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBQcmV2ZW50IGF1dG8tZXhlY3V0aW9uIG9mIHNjcmlwdHMgd2hlbiBubyBleHBsaWNpdCBkYXRhVHlwZSB3YXMgcHJvdmlkZWQgKFNlZSBnaC0yNDMyKVxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy5jb250ZW50cy5zY3JpcHQgPSBmYWxzZTtcblx0fVxufSApO1xuXG4vLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZVxualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRhY2NlcHRzOiB7XG5cdFx0c2NyaXB0OiBcInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgXCIgK1xuXHRcdFx0XCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIlxuXHR9LFxuXHRjb250ZW50czoge1xuXHRcdHNjcmlwdDogL1xcYig/OmphdmF8ZWNtYSlzY3JpcHRcXGIvXG5cdH0sXG5cdGNvbnZlcnRlcnM6IHtcblx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTtcblx0XHRcdHJldHVybiB0ZXh0O1xuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGNyb3NzRG9tYWluXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdHMuY2FjaGUgPSBmYWxzZTtcblx0fVxuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy50eXBlID0gXCJHRVRcIjtcblx0fVxufSApO1xuXG4vLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnRcbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblxuXHQvLyBUaGlzIHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWluIG9yIGZvcmNlZC1ieS1hdHRycyByZXF1ZXN0c1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gfHwgcy5zY3JpcHRBdHRycyApIHtcblx0XHR2YXIgc2NyaXB0LCBjYWxsYmFjaztcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIF8sIGNvbXBsZXRlICkge1xuXHRcdFx0XHRzY3JpcHQgPSBqUXVlcnkoIFwiPHNjcmlwdD5cIiApXG5cdFx0XHRcdFx0LmF0dHIoIHMuc2NyaXB0QXR0cnMgfHwge30gKVxuXHRcdFx0XHRcdC5wcm9wKCB7IGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNldCwgc3JjOiBzLnVybCB9IClcblx0XHRcdFx0XHQub24oIFwibG9hZCBlcnJvclwiLCBjYWxsYmFjayA9IGZ1bmN0aW9uKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRzY3JpcHQucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRjYWxsYmFjayA9IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAoIGV2dCApIHtcblx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIGV2dC50eXBlID09PSBcImVycm9yXCIgPyA0MDQgOiAyMDAsIGV2dC50eXBlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2VyeVxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHRbIDAgXSApO1xuXHRcdFx0fSxcblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgb2xkQ2FsbGJhY2tzID0gW10sXG5cdHJqc29ucCA9IC8oPSlcXD8oPz0mfCQpfFxcP1xcPy87XG5cbi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3NcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0anNvbnA6IFwiY2FsbGJhY2tcIixcblx0anNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyBcIl9cIiArICggbm9uY2UuZ3VpZCsrICkgKTtcblx0XHR0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTtcblx0XHRyZXR1cm4gY2FsbGJhY2s7XG5cdH1cbn0gKTtcblxuLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJqc29uIGpzb25wXCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHtcblxuXHR2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsXG5cdFx0anNvblByb3AgPSBzLmpzb25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVybCApID9cblx0XHRcdFwidXJsXCIgOlxuXHRcdFx0dHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApXG5cdFx0XHRcdFx0LmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCAmJlxuXHRcdFx0XHRyanNvbnAudGVzdCggcy5kYXRhICkgJiYgXCJkYXRhXCJcblx0XHQpO1xuXG5cdC8vIEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyBcImpzb25wXCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXRcblx0aWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sgMCBdID09PSBcImpzb25wXCIgKSB7XG5cblx0XHQvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0XG5cdFx0Y2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0gaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgP1xuXHRcdFx0cy5qc29ucENhbGxiYWNrKCkgOlxuXHRcdFx0cy5qc29ucENhbGxiYWNrO1xuXG5cdFx0Ly8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YVxuXHRcdGlmICgganNvblByb3AgKSB7XG5cdFx0XHRzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsIFwiJDFcIiArIGNhbGxiYWNrTmFtZSApO1xuXHRcdH0gZWxzZSBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkge1xuXHRcdFx0cy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuanNvbnAgKyBcIj1cIiArIGNhbGxiYWNrTmFtZTtcblx0XHR9XG5cblx0XHQvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uXG5cdFx0cy5jb252ZXJ0ZXJzWyBcInNjcmlwdCBqc29uXCIgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7XG5cdFx0XHRcdGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgXCIgd2FzIG5vdCBjYWxsZWRcIiApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07XG5cdFx0fTtcblxuXHRcdC8vIEZvcmNlIGpzb24gZGF0YVR5cGVcblx0XHRzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrXG5cdFx0b3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdO1xuXHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzO1xuXHRcdH07XG5cblx0XHQvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycylcblx0XHRqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXRcblx0XHRcdGlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0alF1ZXJ5KCB3aW5kb3cgKS5yZW1vdmVQcm9wKCBjYWxsYmFja05hbWUgKTtcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWVcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2F2ZSBiYWNrIGFzIGZyZWVcblx0XHRcdGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7XG5cblx0XHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kXG5cdFx0XHRcdHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjaztcblxuXHRcdFx0XHQvLyBTYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUgdXNlXG5cdFx0XHRcdG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlXG5cdFx0XHRpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7XG5cdFx0XHRcdG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7XG5cdFx0fSApO1xuXG5cdFx0Ly8gRGVsZWdhdGUgdG8gc2NyaXB0XG5cdFx0cmV0dXJuIFwic2NyaXB0XCI7XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gU3VwcG9ydDogU2FmYXJpIDggb25seVxuLy8gSW4gU2FmYXJpIDggZG9jdW1lbnRzIGNyZWF0ZWQgdmlhIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudFxuLy8gY29sbGFwc2Ugc2libGluZyBmb3JtczogdGhlIHNlY29uZCBvbmUgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBmaXJzdCBvbmUuXG4vLyBCZWNhdXNlIG9mIHRoYXQsIHRoaXMgc2VjdXJpdHkgbWVhc3VyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gU2FmYXJpIDguXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzM3XG5zdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCA9ICggZnVuY3Rpb24oKSB7XG5cdHZhciBib2R5ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICkuYm9keTtcblx0Ym9keS5pbm5lckhUTUwgPSBcIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+XCI7XG5cdHJldHVybiBib2R5LmNoaWxkTm9kZXMubGVuZ3RoID09PSAyO1xufSApKCk7XG5cblxuLy8gQXJndW1lbnQgXCJkYXRhXCIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sXG4vLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsXG4vLyBkZWZhdWx0cyB0byBkb2N1bWVudFxuLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZ1xualF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHtcblx0aWYgKCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0a2VlcFNjcmlwdHMgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQgPSBmYWxzZTtcblx0fVxuXG5cdHZhciBiYXNlLCBwYXJzZWQsIHNjcmlwdHM7XG5cblx0aWYgKCAhY29udGV4dCApIHtcblxuXHRcdC8vIFN0b3Agc2NyaXB0cyBvciBpbmxpbmUgZXZlbnQgaGFuZGxlcnMgZnJvbSBiZWluZyBleGVjdXRlZCBpbW1lZGlhdGVseVxuXHRcdC8vIGJ5IHVzaW5nIGRvY3VtZW50LmltcGxlbWVudGF0aW9uXG5cdFx0aWYgKCBzdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCApIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKTtcblxuXHRcdFx0Ly8gU2V0IHRoZSBiYXNlIGhyZWYgZm9yIHRoZSBjcmVhdGVkIGRvY3VtZW50XG5cdFx0XHQvLyBzbyBhbnkgcGFyc2VkIGVsZW1lbnRzIHdpdGggVVJMc1xuXHRcdFx0Ly8gYXJlIGJhc2VkIG9uIHRoZSBkb2N1bWVudCdzIFVSTCAoZ2gtMjk2NSlcblx0XHRcdGJhc2UgPSBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiYmFzZVwiICk7XG5cdFx0XHRiYXNlLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0Y29udGV4dC5oZWFkLmFwcGVuZENoaWxkKCBiYXNlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudDtcblx0XHR9XG5cdH1cblxuXHRwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKTtcblx0c2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTtcblxuXHQvLyBTaW5nbGUgdGFnXG5cdGlmICggcGFyc2VkICkge1xuXHRcdHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWyAxIF0gKSBdO1xuXHR9XG5cblx0cGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTtcblxuXHRpZiAoIHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTtcbn07XG5cblxuLyoqXG4gKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlXG4gKi9cbmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHtcblx0dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSxcblx0XHRzZWxmID0gdGhpcyxcblx0XHRvZmYgPSB1cmwuaW5kZXhPZiggXCIgXCIgKTtcblxuXHRpZiAoIG9mZiA+IC0xICkge1xuXHRcdHNlbGVjdG9yID0gc3RyaXBBbmRDb2xsYXBzZSggdXJsLnNsaWNlKCBvZmYgKSApO1xuXHRcdHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7XG5cdH1cblxuXHQvLyBJZiBpdCdzIGEgZnVuY3Rpb25cblx0aWYgKCBpc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHtcblxuXHRcdC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrXG5cdFx0Y2FsbGJhY2sgPSBwYXJhbXM7XG5cdFx0cGFyYW1zID0gdW5kZWZpbmVkO1xuXG5cdC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmdcblx0fSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0dHlwZSA9IFwiUE9TVFwiO1xuXHR9XG5cblx0Ly8gSWYgd2UgaGF2ZSBlbGVtZW50cyB0byBtb2RpZnksIG1ha2UgdGhlIHJlcXVlc3Rcblx0aWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7XG5cdFx0alF1ZXJ5LmFqYXgoIHtcblx0XHRcdHVybDogdXJsLFxuXG5cdFx0XHQvLyBJZiBcInR5cGVcIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gXCJHRVRcIiBtZXRob2Qgd2lsbCBiZSB1c2VkLlxuXHRcdFx0Ly8gTWFrZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGV4cGxpY2l0IHNpbmNlXG5cdFx0XHQvLyB1c2VyIGNhbiBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2Rcblx0XHRcdHR5cGU6IHR5cGUgfHwgXCJHRVRcIixcblx0XHRcdGRhdGFUeXBlOiBcImh0bWxcIixcblx0XHRcdGRhdGE6IHBhcmFtc1xuXHRcdH0gKS5kb25lKCBmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkge1xuXG5cdFx0XHQvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2tcblx0XHRcdHJlc3BvbnNlID0gYXJndW1lbnRzO1xuXG5cdFx0XHRzZWxmLmh0bWwoIHNlbGVjdG9yID9cblxuXHRcdFx0XHQvLyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXZcblx0XHRcdFx0Ly8gRXhjbHVkZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzXG5cdFx0XHRcdGpRdWVyeSggXCI8ZGl2PlwiICkuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0XG5cdFx0XHRcdHJlc3BvbnNlVGV4dCApO1xuXG5cdFx0Ly8gSWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImRhdGFcIiwgXCJzdGF0dXNcIiwgXCJqcVhIUlwiXG5cdFx0Ly8gYnV0IHRoZXkgYXJlIGlnbm9yZWQgYmVjYXVzZSByZXNwb25zZSB3YXMgc2V0IGFib3ZlLlxuXHRcdC8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJqcVhIUlwiLCBcInN0YXR1c1wiLCBcImVycm9yXCJcblx0XHR9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHtcblx0XHRcdHNlbGYuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5cblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiBlbGVtID09PSBmbi5lbGVtO1xuXHR9ICkubGVuZ3RoO1xufTtcblxuXG5cblxualF1ZXJ5Lm9mZnNldCA9IHtcblx0c2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHtcblx0XHR2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLFxuXHRcdFx0cG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSxcblx0XHRcdHByb3BzID0ge307XG5cblx0XHQvLyBTZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVuIG9uIHN0YXRpYyBlbGVtXG5cdFx0aWYgKCBwb3NpdGlvbiA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdGVsZW0uc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG5cdFx0fVxuXG5cdFx0Y3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTtcblx0XHRjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCBcInRvcFwiICk7XG5cdFx0Y3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwibGVmdFwiICk7XG5cdFx0Y2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIiApICYmXG5cdFx0XHQoIGN1ckNTU1RvcCArIGN1ckNTU0xlZnQgKS5pbmRleE9mKCBcImF1dG9cIiApID4gLTE7XG5cblx0XHQvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlclxuXHRcdC8vIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZFxuXHRcdGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7XG5cdFx0XHRjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTtcblx0XHRcdGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDtcblx0XHRcdGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0O1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7XG5cdFx0XHRjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7XG5cblx0XHRcdC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KVxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xuXHRcdH1cblxuXHRcdGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCB0eXBlb2YgcHJvcHMudG9wID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHRwcm9wcy50b3AgKz0gXCJweFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCB0eXBlb2YgcHJvcHMubGVmdCA9PT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0cHJvcHMubGVmdCArPSBcInB4XCI7XG5cdFx0XHR9XG5cdFx0XHRjdXJFbGVtLmNzcyggcHJvcHMgKTtcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHQvLyBvZmZzZXQoKSByZWxhdGVzIGFuIGVsZW1lbnQncyBib3JkZXIgYm94IHRvIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHRcdC8vIFByZXNlcnZlIGNoYWluaW5nIGZvciBzZXR0ZXJcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0dGhpcyA6XG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTtcblx0XHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHZhciByZWN0LCB3aW4sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nvbm5lY3RlZCBhbmQgaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cyAoZ2gtMjMxMClcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhXG5cdFx0Ly8gZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVycm9yXG5cdFx0aWYgKCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9O1xuXHRcdH1cblxuXHRcdC8vIEdldCBkb2N1bWVudC1yZWxhdGl2ZSBwb3NpdGlvbiBieSBhZGRpbmcgdmlld3BvcnQgc2Nyb2xsIHRvIHZpZXdwb3J0LXJlbGF0aXZlIGdCQ1Jcblx0XHRyZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHR3aW4gPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogcmVjdC50b3AgKyB3aW4ucGFnZVlPZmZzZXQsXG5cdFx0XHRsZWZ0OiByZWN0LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXRcblx0XHR9O1xuXHR9LFxuXG5cdC8vIHBvc2l0aW9uKCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgbWFyZ2luIGJveCB0byBpdHMgb2Zmc2V0IHBhcmVudCdzIHBhZGRpbmcgYm94XG5cdC8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGJlaGF2aW9yIG9mIENTUyBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xuXHRwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpc1sgMCBdICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwgZG9jLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cblx0XHQvLyBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gdGhlIHZpZXdwb3J0LCB3aGljaCBpdHNlbGYgYWx3YXlzIGhhcyB6ZXJvIG9mZnNldFxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcblxuXHRcdFx0Ly8gQXNzdW1lIHBvc2l0aW9uOmZpeGVkIGltcGxpZXMgYXZhaWxhYmlsaXR5IG9mIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuXHRcdFx0b2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB0aGUgKnJlYWwqIG9mZnNldCBwYXJlbnQsIHdoaWNoIGNhbiBiZSB0aGUgZG9jdW1lbnQgb3IgaXRzIHJvb3QgZWxlbWVudFxuXHRcdFx0Ly8gd2hlbiBhIHN0YXRpY2FsbHkgcG9zaXRpb25lZCBlbGVtZW50IGlzIGlkZW50aWZpZWRcblx0XHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHRcdG9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50IHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJlxuXHRcdFx0XHQoIG9mZnNldFBhcmVudCA9PT0gZG9jLmJvZHkgfHwgb2Zmc2V0UGFyZW50ID09PSBkb2MuZG9jdW1lbnRFbGVtZW50ICkgJiZcblx0XHRcdFx0alF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblxuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGlmICggb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudCAhPT0gZWxlbSAmJiBvZmZzZXRQYXJlbnQubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgYm9yZGVycyBpbnRvIGl0cyBvZmZzZXQsIHNpbmNlIHRoZXkgYXJlIG91dHNpZGUgaXRzIGNvbnRlbnQgb3JpZ2luXG5cdFx0XHRcdHBhcmVudE9mZnNldCA9IGpRdWVyeSggb2Zmc2V0UGFyZW50ICkub2Zmc2V0KCk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LmxlZnQgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlckxlZnRXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2luc1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5Ub3BcIiwgdHJ1ZSApLFxuXHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luTGVmdFwiLCB0cnVlIClcblx0XHR9O1xuXHR9LFxuXG5cdC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuXHQvLyAxKSBGb3IgdGhlIGVsZW1lbnQgaW5zaWRlIHRoZSBpZnJhbWUgd2l0aG91dCBvZmZzZXRQYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuXG5cdC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvd1xuXHQvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50XG5cdC8vIDMpIEZvciBib2R5IG9yIGh0bWwgZWxlbWVudCwgaS5lLiBpbiBjYXNlIG9mIHRoZSBodG1sIG5vZGUgLSBpdCB3aWxsIHJldHVybiBpdHNlbGZcblx0Ly9cblx0Ly8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzXG5cdC8vIGFuZCBtaWdodCBiZSBjb25zaWRlcmVkIGFzIG1vcmUgcHJlZmVyYWJsZSByZXN1bHRzLlxuXHQvL1xuXHQvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZVxuXHRvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7XG5cblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG4vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6IFwicGFnZVhPZmZzZXRcIiwgc2Nyb2xsVG9wOiBcInBhZ2VZT2Zmc2V0XCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHtcblx0dmFyIHRvcCA9IFwicGFnZVlPZmZzZXRcIiA9PT0gcHJvcDtcblxuXHRqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7XG5cblx0XHRcdC8vIENvYWxlc2NlIGRvY3VtZW50cyBhbmQgd2luZG93c1xuXHRcdFx0dmFyIHdpbjtcblx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblx0XHRcdFx0d2luID0gZWxlbTtcblx0XHRcdH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW0uZGVmYXVsdFZpZXc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiB3aW4gPyB3aW5bIHByb3AgXSA6IGVsZW1bIG1ldGhvZCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHdpbiApIHtcblx0XHRcdFx0d2luLnNjcm9sbFRvKFxuXHRcdFx0XHRcdCF0b3AgPyB2YWwgOiB3aW4ucGFnZVhPZmZzZXQsXG5cdFx0XHRcdFx0dG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0XG5cdFx0XHRcdCk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1bIG1ldGhvZCBdID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH07XG59ICk7XG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA8PTcgLSA5LjEsIENocm9tZSA8PTM3IC0gNDlcbi8vIEFkZCB0aGUgdG9wL2xlZnQgY3NzSG9va3MgdXNpbmcgalF1ZXJ5LmZuLnBvc2l0aW9uXG4vLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODRcbi8vIEJsaW5rIGJ1ZzogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTg5MzQ3XG4vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0O1xuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcbmpRdWVyeS5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiIF0sIGZ1bmN0aW9uKCBfaSwgcHJvcCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbixcblx0XHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0XHRjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApO1xuXG5cdFx0XHRcdC8vIElmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldFxuXHRcdFx0XHRyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArIFwicHhcIiA6XG5cdFx0XHRcdFx0Y29tcHV0ZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufSApO1xuXG5cbi8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiBcImhlaWdodFwiLCBXaWR0aDogXCJ3aWR0aFwiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkge1xuXHRqUXVlcnkuZWFjaCggeyBwYWRkaW5nOiBcImlubmVyXCIgKyBuYW1lLCBjb250ZW50OiB0eXBlLCBcIlwiOiBcIm91dGVyXCIgKyBuYW1lIH0sXG5cdFx0ZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7XG5cblx0XHQvLyBNYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGhcblx0XHRqUXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHtcblx0XHRcdHZhciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVvZiBtYXJnaW4gIT09IFwiYm9vbGVhblwiICksXG5cdFx0XHRcdGV4dHJhID0gZGVmYXVsdEV4dHJhIHx8ICggbWFyZ2luID09PSB0cnVlIHx8IHZhbHVlID09PSB0cnVlID8gXCJtYXJnaW5cIiA6IFwiYm9yZGVyXCIgKTtcblxuXHRcdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgZG9jO1xuXG5cdFx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vICQoIHdpbmRvdyApLm91dGVyV2lkdGgvSGVpZ2h0IHJldHVybiB3L2ggaW5jbHVkaW5nIHNjcm9sbGJhcnMgKGdoLTE3MjkpXG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmNOYW1lLmluZGV4T2YoIFwib3V0ZXJcIiApID09PSAwID9cblx0XHRcdFx0XHRcdGVsZW1bIFwiaW5uZXJcIiArIG5hbWUgXSA6XG5cdFx0XHRcdFx0XHRlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgXCJjbGllbnRcIiArIG5hbWUgXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHRcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50O1xuXG5cdFx0XHRcdFx0Ly8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRdLFxuXHRcdFx0XHRcdC8vIHdoaWNoZXZlciBpcyBncmVhdGVzdFxuXHRcdFx0XHRcdHJldHVybiBNYXRoLm1heChcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJzY3JvbGxcIiArIG5hbWUgXSwgZG9jWyBcInNjcm9sbFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcIm9mZnNldFwiICsgbmFtZSBdLCBkb2NbIFwib2Zmc2V0XCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRkb2NbIFwiY2xpZW50XCIgKyBuYW1lIF1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdFxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIGV4dHJhICkgOlxuXG5cdFx0XHRcdFx0Ly8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7XG5cdFx0XHR9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSApO1xuXHRcdH07XG5cdH0gKTtcbn0gKTtcblxuXG5qUXVlcnkuZWFjaCggW1xuXHRcImFqYXhTdGFydFwiLFxuXHRcImFqYXhTdG9wXCIsXG5cdFwiYWpheENvbXBsZXRlXCIsXG5cdFwiYWpheEVycm9yXCIsXG5cdFwiYWpheFN1Y2Nlc3NcIixcblx0XCJhamF4U2VuZFwiXG5dLCBmdW5jdGlvbiggX2ksIHR5cGUgKSB7XG5cdGpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlLCBmbiApO1xuXHR9O1xufSApO1xuXG5cblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0YmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuYmluZDogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApO1xuXHR9LFxuXG5cdGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHtcblxuXHRcdC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dIClcblx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/XG5cdFx0XHR0aGlzLm9mZiggc2VsZWN0b3IsIFwiKipcIiApIDpcblx0XHRcdHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgXCIqKlwiLCBmbiApO1xuXHR9LFxuXG5cdGhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHtcblx0XHRyZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggKCBcImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCByZXNpemUgc2Nyb2xsIGNsaWNrIGRibGNsaWNrIFwiICtcblx0XCJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBcIiArXG5cdFwiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudVwiICkuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblxuXHRcdC8vIEhhbmRsZSBldmVudCBiaW5kaW5nXG5cdFx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7XG5cdFx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDAgP1xuXHRcdFx0XHR0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDpcblx0XHRcdFx0dGhpcy50cmlnZ2VyKCBuYW1lICk7XG5cdFx0fTtcblx0fSApO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHlcbi8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUFxudmFyIHJ0cmltID0gL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nO1xuXG4vLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnlcbi8vIGFyZ3VtZW50cy5cbi8vIGpRdWVyeS5wcm94eSBpcyBkZXByZWNhdGVkIHRvIHByb21vdGUgc3RhbmRhcmRzIChzcGVjaWZpY2FsbHkgRnVuY3Rpb24jYmluZClcbi8vIEhvd2V2ZXIsIGl0IGlzIG5vdCBzbGF0ZWQgZm9yIHJlbW92YWwgYW55IHRpbWUgc29vblxualF1ZXJ5LnByb3h5ID0gZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkge1xuXHR2YXIgdG1wLCBhcmdzLCBwcm94eTtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdHRtcCA9IGZuWyBjb250ZXh0IF07XG5cdFx0Y29udGV4dCA9IGZuO1xuXHRcdGZuID0gdG1wO1xuXHR9XG5cblx0Ly8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWNcblx0Ly8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC5cblx0aWYgKCAhaXNGdW5jdGlvbiggZm4gKSApIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gU2ltdWxhdGVkIGJpbmRcblx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApO1xuXHRwcm94eSA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApO1xuXHR9O1xuXG5cdC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZFxuXHRwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKztcblxuXHRyZXR1cm4gcHJveHk7XG59O1xuXG5qUXVlcnkuaG9sZFJlYWR5ID0gZnVuY3Rpb24oIGhvbGQgKSB7XG5cdGlmICggaG9sZCApIHtcblx0XHRqUXVlcnkucmVhZHlXYWl0Kys7XG5cdH0gZWxzZSB7XG5cdFx0alF1ZXJ5LnJlYWR5KCB0cnVlICk7XG5cdH1cbn07XG5qUXVlcnkuaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5qUXVlcnkucGFyc2VKU09OID0gSlNPTi5wYXJzZTtcbmpRdWVyeS5ub2RlTmFtZSA9IG5vZGVOYW1lO1xualF1ZXJ5LmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xualF1ZXJ5LmlzV2luZG93ID0gaXNXaW5kb3c7XG5qUXVlcnkuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xualF1ZXJ5LnR5cGUgPSB0b1R5cGU7XG5cbmpRdWVyeS5ub3cgPSBEYXRlLm5vdztcblxualF1ZXJ5LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKCBvYmogKSB7XG5cblx0Ly8gQXMgb2YgalF1ZXJ5IDMuMCwgaXNOdW1lcmljIGlzIGxpbWl0ZWQgdG9cblx0Ly8gc3RyaW5ncyBhbmQgbnVtYmVycyAocHJpbWl0aXZlcyBvciBvYmplY3RzKVxuXHQvLyB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIGZpbml0ZSBudW1iZXJzIChnaC0yNjYyKVxuXHR2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTtcblx0cmV0dXJuICggdHlwZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlID09PSBcInN0cmluZ1wiICkgJiZcblxuXHRcdC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChcIlwiKVxuXHRcdC8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKFwiMHguLi5cIilcblx0XHQvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU5cblx0XHQhaXNOYU4oIG9iaiAtIHBhcnNlRmxvYXQoIG9iaiApICk7XG59O1xuXG5qUXVlcnkudHJpbSA9IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRyZXR1cm4gdGV4dCA9PSBudWxsID9cblx0XHRcIlwiIDpcblx0XHQoIHRleHQgKyBcIlwiICkucmVwbGFjZSggcnRyaW0sIFwiXCIgKTtcbn07XG5cblxuXG4vLyBSZWdpc3RlciBhcyBhIG5hbWVkIEFNRCBtb2R1bGUsIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXJcbi8vIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXRcbi8vIHVuZGVyc3RhbmRzIGFub255bW91cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdFxuLy8gd2F5IHRvIHJlZ2lzdGVyLiBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFyZVxuLy8gZGVyaXZlZCBmcm9tIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlXG4vLyBmaWxlIG5hbWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHNcbi8vIHRvIGNhbGwgbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnksIGl0IHdpbGwgd29yay5cblxuLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGpRdWVyeSBzaG91bGRcbi8vIGRlY2xhcmUgdGhlbXNlbHZlcyBhcyBhbm9ueW1vdXMgbW9kdWxlcywgYW5kIGF2b2lkIHNldHRpbmcgYSBnbG9iYWwgaWYgYW5cbi8vIEFNRCBsb2FkZXIgaXMgcHJlc2VudC4galF1ZXJ5IGlzIGEgc3BlY2lhbCBjYXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvd2lraS9VcGRhdGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9uXG5cbmlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cdGRlZmluZSggXCJqcXVlcnlcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnk7XG5cdH0gKTtcbn1cblxuXG5cblxudmFyXG5cblx0Ly8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LFxuXG5cdC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF8kID0gd2luZG93LiQ7XG5cbmpRdWVyeS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oIGRlZXAgKSB7XG5cdGlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cuJCA9IF8kO1xuXHR9XG5cblx0aWYgKCBkZWVwICYmIHdpbmRvdy5qUXVlcnkgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnk7XG59O1xuXG4vLyBFeHBvc2UgalF1ZXJ5IGFuZCAkIGlkZW50aWZpZXJzLCBldmVuIGluIEFNRFxuLy8gKCM3MTAyI2NvbW1lbnQ6MTAsIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNTU3KVxuLy8gYW5kIENvbW1vbkpTIGZvciBicm93c2VyIGVtdWxhdG9ycyAoIzEzNTY2KVxuaWYgKCB0eXBlb2Ygbm9HbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdHdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTtcbn1cblxuXG5cblxucmV0dXJuIGpRdWVyeTtcbn0gKTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgRGF0YVZpZXcgPSBnZXROYXRpdmUocm9vdCwgJ0RhdGFWaWV3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGF0YVZpZXc7XG4iLCJ2YXIgaGFzaENsZWFyID0gcmVxdWlyZSgnLi9faGFzaENsZWFyJyksXG4gICAgaGFzaERlbGV0ZSA9IHJlcXVpcmUoJy4vX2hhc2hEZWxldGUnKSxcbiAgICBoYXNoR2V0ID0gcmVxdWlyZSgnLi9faGFzaEdldCcpLFxuICAgIGhhc2hIYXMgPSByZXF1aXJlKCcuL19oYXNoSGFzJyksXG4gICAgaGFzaFNldCA9IHJlcXVpcmUoJy4vX2hhc2hTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjtcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IGhhc2hEZWxldGU7XG5IYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhcztcbkhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaDtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGJhc2VMb2Rhc2ggPSByZXF1aXJlKCcuL19iYXNlTG9kYXNoJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHRoZSBtYXhpbXVtIGxlbmd0aCBhbmQgaW5kZXggb2YgYW4gYXJyYXkuICovXG52YXIgTUFYX0FSUkFZX0xFTkdUSCA9IDQyOTQ5NjcyOTU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGxhenkgd3JhcHBlciBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgbGF6eSBldmFsdWF0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gKi9cbmZ1bmN0aW9uIExhenlXcmFwcGVyKHZhbHVlKSB7XG4gIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgdGhpcy5fX2FjdGlvbnNfXyA9IFtdO1xuICB0aGlzLl9fZGlyX18gPSAxO1xuICB0aGlzLl9fZmlsdGVyZWRfXyA9IGZhbHNlO1xuICB0aGlzLl9faXRlcmF0ZWVzX18gPSBbXTtcbiAgdGhpcy5fX3Rha2VDb3VudF9fID0gTUFYX0FSUkFZX0xFTkdUSDtcbiAgdGhpcy5fX3ZpZXdzX18gPSBbXTtcbn1cblxuLy8gRW5zdXJlIGBMYXp5V3JhcHBlcmAgaXMgYW4gaW5zdGFuY2Ugb2YgYGJhc2VMb2Rhc2hgLlxuTGF6eVdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG5MYXp5V3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMYXp5V3JhcHBlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBMYXp5V3JhcHBlcjtcbiIsInZhciBsaXN0Q2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUNsZWFyJyksXG4gICAgbGlzdENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlRGVsZXRlJyksXG4gICAgbGlzdENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlR2V0JyksXG4gICAgbGlzdENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlSGFzJyksXG4gICAgbGlzdENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXN0Q2FjaGU7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGNvbnN0cnVjdG9yIGZvciBjcmVhdGluZyBgbG9kYXNoYCB3cmFwcGVyIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtjaGFpbkFsbF0gRW5hYmxlIGV4cGxpY2l0IG1ldGhvZCBjaGFpbiBzZXF1ZW5jZXMuXG4gKi9cbmZ1bmN0aW9uIExvZGFzaFdyYXBwZXIodmFsdWUsIGNoYWluQWxsKSB7XG4gIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgdGhpcy5fX2FjdGlvbnNfXyA9IFtdO1xuICB0aGlzLl9fY2hhaW5fXyA9ICEhY2hhaW5BbGw7XG4gIHRoaXMuX19pbmRleF9fID0gMDtcbiAgdGhpcy5fX3ZhbHVlc19fID0gdW5kZWZpbmVkO1xufVxuXG5Mb2Rhc2hXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpO1xuTG9kYXNoV3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2Rhc2hXcmFwcGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvZGFzaFdyYXBwZXI7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwO1xuIiwidmFyIG1hcENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19tYXBDYWNoZUNsZWFyJyksXG4gICAgbWFwQ2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19tYXBDYWNoZURlbGV0ZScpLFxuICAgIG1hcENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVHZXQnKSxcbiAgICBtYXBDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX21hcENhY2hlSGFzJyksXG4gICAgbWFwQ2FjaGVTZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTWFwQ2FjaGVgLlxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBDYWNoZURlbGV0ZTtcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBtYXBDYWNoZUdldDtcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXBDYWNoZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0O1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKSxcbiAgICBzZXRDYWNoZUFkZCA9IHJlcXVpcmUoJy4vX3NldENhY2hlQWRkJyksXG4gICAgc2V0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19zZXRDYWNoZUhhcycpO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0Q2FjaGU7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgc3RhY2tDbGVhciA9IHJlcXVpcmUoJy4vX3N0YWNrQ2xlYXInKSxcbiAgICBzdGFja0RlbGV0ZSA9IHJlcXVpcmUoJy4vX3N0YWNrRGVsZXRlJyksXG4gICAgc3RhY2tHZXQgPSByZXF1aXJlKCcuL19zdGFja0dldCcpLFxuICAgIHN0YWNrSGFzID0gcmVxdWlyZSgnLi9fc3RhY2tIYXMnKSxcbiAgICBzdGFja1NldCA9IHJlcXVpcmUoJy4vX3N0YWNrU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGFjaztcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2Vha01hcDtcbiIsIi8qKlxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcHBseTtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlQWdncmVnYXRvcmAgZm9yIGFycmF5cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlBZ2dyZWdhdG9yKGFycmF5LCBzZXR0ZXIsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIHNldHRlcihhY2N1bXVsYXRvciwgdmFsdWUsIGl0ZXJhdGVlKHZhbHVlKSwgYXJyYXkpO1xuICB9XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUFnZ3JlZ2F0b3I7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlFYWNoO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RmlsdGVyO1xuIiwidmFyIGJhc2VJbmRleE9mID0gcmVxdWlyZSgnLi9fYmFzZUluZGV4T2YnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogc3BlY2lmeWluZyBhbiBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgMCkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzO1xuIiwiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFycmF5SW5jbHVkZXNgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBjb21wYXJhdG9yLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB0YXJnZXQgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHRhcmdldGAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlJbmNsdWRlc1dpdGgoYXJyYXksIHZhbHVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgYXJyYXlbaW5kZXhdKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiIsInZhciBiYXNlVGltZXMgPSByZXF1aXJlKCcuL19iYXNlVGltZXMnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlMaWtlS2V5cztcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlNYXA7XG4iLCIvKipcbiAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlQdXNoO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVNvbWU7XG4iLCJ2YXIgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxKG9ialZhbHVlLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduVmFsdWU7XG4iLCJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzb2NJbmRleE9mO1xuIiwidmFyIGJhc2VFYWNoID0gcmVxdWlyZSgnLi9fYmFzZUVhY2gnKTtcblxuLyoqXG4gKiBBZ2dyZWdhdGVzIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCBvbiBgYWNjdW11bGF0b3JgIHdpdGgga2V5cyB0cmFuc2Zvcm1lZFxuICogYnkgYGl0ZXJhdGVlYCBhbmQgdmFsdWVzIHNldCBieSBgc2V0dGVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFnZ3JlZ2F0b3IoY29sbGVjdGlvbiwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgIHNldHRlcihhY2N1bXVsYXRvciwgdmFsdWUsIGl0ZXJhdGVlKHZhbHVlKSwgY29sbGVjdGlvbik7XG4gIH0pO1xuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFnZ3JlZ2F0b3I7XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgIH1cbiAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ3JlYXRlO1xuIiwidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlcycpLFxuICAgIGFycmF5SW5jbHVkZXNXaXRoID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlc1dpdGgnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5kaWZmZXJlbmNlYCB3aXRob3V0IHN1cHBvcnRcbiAqIGZvciBleGNsdWRpbmcgbXVsdGlwbGUgYXJyYXlzIG9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBbXSxcbiAgICAgIHZhbHVlc0xlbmd0aCA9IHZhbHVlcy5sZW5ndGg7XG5cbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChpdGVyYXRlZSkge1xuICAgIHZhbHVlcyA9IGFycmF5TWFwKHZhbHVlcywgYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7XG4gIH1cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gIH1cbiAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIHZhbHVlcyA9IG5ldyBTZXRDYWNoZSh2YWx1ZXMpO1xuICB9XG4gIG91dGVyOlxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA9PSBudWxsID8gdmFsdWUgOiBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICB2YXIgdmFsdWVzSW5kZXggPSB2YWx1ZXNMZW5ndGg7XG4gICAgICB3aGlsZSAodmFsdWVzSW5kZXgtLSkge1xuICAgICAgICBpZiAodmFsdWVzW3ZhbHVlc0luZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaW5jbHVkZXModmFsdWVzLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRGlmZmVyZW5jZTtcbiIsInZhciBiYXNlRm9yT3duID0gcmVxdWlyZSgnLi9fYmFzZUZvck93bicpLFxuICAgIGNyZWF0ZUJhc2VFYWNoID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUVhY2gnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JFYWNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqL1xudmFyIGJhc2VFYWNoID0gY3JlYXRlQmFzZUVhY2goYmFzZUZvck93bik7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUVhY2g7XG4iLCJ2YXIgYmFzZUVhY2ggPSByZXF1aXJlKCcuL19iYXNlRWFjaCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbHRlcmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZpbHRlcjtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmluZEluZGV4YCBhbmQgYF8uZmluZExhc3RJbmRleGAgd2l0aG91dFxuICogc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlRmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCwgZnJvbVJpZ2h0KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpbmRleCA9IGZyb21JbmRleCArIChmcm9tUmlnaHQgPyAxIDogLTEpO1xuXG4gIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGaW5kSW5kZXg7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNGbGF0dGVuYWJsZSA9IHJlcXVpcmUoJy4vX2lzRmxhdHRlbmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBwcmVkaWNhdGUgfHwgKHByZWRpY2F0ZSA9IGlzRmxhdHRlbmFibGUpO1xuICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZsYXR0ZW47XG4iLCJ2YXIgY3JlYXRlQmFzZUZvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUJhc2VGb3InKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgb2JqZWN0YFxuICogcHJvcGVydGllcyByZXR1cm5lZCBieSBga2V5c0Z1bmNgIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuXG4gKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbnZhciBiYXNlRm9yID0gY3JlYXRlQmFzZUZvcigpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGb3I7XG4iLCJ2YXIgYmFzZUZvciA9IHJlcXVpcmUoJy4vX2Jhc2VGb3InKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yT3duYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgYmFzZUZvcihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRm9yT3duO1xuIiwidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldDtcbiIsInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRvIGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7XG4gIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0QWxsS2V5cztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc0luYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzSW4ob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSGFzSW47XG4iLCJ2YXIgYmFzZUZpbmRJbmRleCA9IHJlcXVpcmUoJy4vX2Jhc2VGaW5kSW5kZXgnKSxcbiAgICBiYXNlSXNOYU4gPSByZXF1aXJlKCcuL19iYXNlSXNOYU4nKSxcbiAgICBzdHJpY3RJbmRleE9mID0gcmVxdWlyZSgnLi9fc3RyaWN0SW5kZXhPZicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgPyBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KVxuICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUlzTmFOLCBmcm9tSW5kZXgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJbmRleE9mO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNBcmd1bWVudHM7XG4iLCJ2YXIgYmFzZUlzRXF1YWxEZWVwID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWxEZWVwJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWw7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBlcXVhbEJ5VGFnID0gcmVxdWlyZSgnLi9fZXF1YWxCeVRhZycpLFxuICAgIGVxdWFsT2JqZWN0cyA9IHJlcXVpcmUoJy4vX2VxdWFsT2JqZWN0cycpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG9iamVjdCksXG4gICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XG5cbiAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgIG9iaklzT2JqID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICA6IGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgfVxuICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxuICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbERlZXA7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGJhc2VJc0VxdWFsID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWwnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtBcnJheX0gbWF0Y2hEYXRhIFRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSwgY3VzdG9taXplcikge1xuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxuICAgICAgbGVuZ3RoID0gaW5kZXgsXG4gICAgICBub0N1c3RvbWl6ZXIgPSAhY3VzdG9taXplcjtcblxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gIWxlbmd0aDtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgaWYgKChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSlcbiAgICAgICAgICA/IGRhdGFbMV0gIT09IG9iamVjdFtkYXRhWzBdXVxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcbiAgICAgICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgdmFyIGtleSA9IGRhdGFbMF0sXG4gICAgICAgIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcblxuICAgIGlmIChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSkge1xuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFjayA9IG5ldyBTdGFjaztcbiAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spO1xuICAgICAgfVxuICAgICAgaWYgKCEocmVzdWx0ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgOiByZXN1bHRcbiAgICAgICAgICApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTWF0Y2g7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmFOYCB3aXRob3V0IHN1cHBvcnQgZm9yIG51bWJlciBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hTjtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzVHlwZWRBcnJheTtcbiIsInZhciBiYXNlTWF0Y2hlcyA9IHJlcXVpcmUoJy4vX2Jhc2VNYXRjaGVzJyksXG4gICAgYmFzZU1hdGNoZXNQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2Jhc2VNYXRjaGVzUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgcHJvcGVydHkgPSByZXF1aXJlKCcuL3Byb3BlcnR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgaXRlcmF0ZWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xuICAvLyBEb24ndCBzdG9yZSB0aGUgYHR5cGVvZmAgcmVzdWx0IGluIGEgdmFyaWFibGUgdG8gYXZvaWQgYSBKSVQgYnVnIGluIFNhZmFyaSA5LlxuICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjAzNCBmb3IgbW9yZSBkZXRhaWxzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gaWRlbnRpdHk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBpc0FycmF5KHZhbHVlKVxuICAgICAgPyBiYXNlTWF0Y2hlc1Byb3BlcnR5KHZhbHVlWzBdLCB2YWx1ZVsxXSlcbiAgICAgIDogYmFzZU1hdGNoZXModmFsdWUpO1xuICB9XG4gIHJldHVybiBwcm9wZXJ0eSh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUl0ZXJhdGVlO1xuIiwidmFyIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXM7XG4iLCIvKipcbiAqIFRoZSBmdW5jdGlvbiB3aG9zZSBwcm90b3R5cGUgY2hhaW4gc2VxdWVuY2Ugd3JhcHBlcnMgaW5oZXJpdCBmcm9tLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJhc2VMb2Rhc2goKSB7XG4gIC8vIE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUxvZGFzaDtcbiIsInZhciBiYXNlRWFjaCA9IHJlcXVpcmUoJy4vX2Jhc2VFYWNoJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWFwYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IEFycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKSA6IFtdO1xuXG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBpdGVyYXRlZSh2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZU1hcDtcbiIsInZhciBiYXNlSXNNYXRjaCA9IHJlcXVpcmUoJy4vX2Jhc2VJc01hdGNoJyksXG4gICAgZ2V0TWF0Y2hEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWF0Y2hEYXRhJyksXG4gICAgbWF0Y2hlc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcbiAgdmFyIG1hdGNoRGF0YSA9IGdldE1hdGNoRGF0YShzb3VyY2UpO1xuICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShtYXRjaERhdGFbMF1bMF0sIG1hdGNoRGF0YVswXVsxXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT09IHNvdXJjZSB8fCBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWF0Y2hlcztcbiIsInZhciBiYXNlSXNFcXVhbCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsJyksXG4gICAgZ2V0ID0gcmVxdWlyZSgnLi9nZXQnKSxcbiAgICBoYXNJbiA9IHJlcXVpcmUoJy4vaGFzSW4nKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgaXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9faXNTdHJpY3RDb21wYXJhYmxlJyksXG4gICAgbWF0Y2hlc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZScpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNQcm9wZXJ0eWAgd2hpY2ggZG9lc24ndCBjbG9uZSBgc3JjVmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsIHNyY1ZhbHVlKSB7XG4gIGlmIChpc0tleShwYXRoKSAmJiBpc1N0cmljdENvbXBhcmFibGUoc3JjVmFsdWUpKSB7XG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKHRvS2V5KHBhdGgpLCBzcmNWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBvYmpWYWx1ZSA9IGdldChvYmplY3QsIHBhdGgpO1xuICAgIHJldHVybiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvYmpWYWx1ZSA9PT0gc3JjVmFsdWUpXG4gICAgICA/IGhhc0luKG9iamVjdCwgcGF0aClcbiAgICAgIDogYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNYXRjaGVzUHJvcGVydHk7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VQcm9wZXJ0eTtcbiIsInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVByb3BlcnR5YCB3aGljaCBzdXBwb3J0cyBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUHJvcGVydHlEZWVwO1xuIiwidmFyIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VSZXN0O1xuIiwidmFyIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIG1ldGFNYXAgPSByZXF1aXJlKCcuL19tZXRhTWFwJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldERhdGFgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc29jaWF0ZSBtZXRhZGF0YSB3aXRoLlxuICogQHBhcmFtIHsqfSBkYXRhIFRoZSBtZXRhZGF0YS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0RGF0YSA9ICFtZXRhTWFwID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBkYXRhKSB7XG4gIG1ldGFNYXAuc2V0KGZ1bmMsIGRhdGEpO1xuICByZXR1cm4gZnVuYztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldERhdGE7XG4iLCJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xuICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgdmFsdWVzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBzeW1ib2xUb1N0cmluZyA/IHN5bWJvbFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUb1N0cmluZztcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLCJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzJyksXG4gICAgYXJyYXlJbmNsdWRlc1dpdGggPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzV2l0aCcpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKSxcbiAgICBjcmVhdGVTZXQgPSByZXF1aXJlKCcuL19jcmVhdGVTZXQnKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuaXFCeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlVW5pcShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICByZXN1bHQgPSBbXSxcbiAgICAgIHNlZW4gPSByZXN1bHQ7XG5cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gIH1cbiAgZWxzZSBpZiAobGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICB2YXIgc2V0ID0gaXRlcmF0ZWUgPyBudWxsIDogY3JlYXRlU2V0KGFycmF5KTtcbiAgICBpZiAoc2V0KSB7XG4gICAgICByZXR1cm4gc2V0VG9BcnJheShzZXQpO1xuICAgIH1cbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIGluY2x1ZGVzID0gY2FjaGVIYXM7XG4gICAgc2VlbiA9IG5ldyBTZXRDYWNoZTtcbiAgfVxuICBlbHNlIHtcbiAgICBzZWVuID0gaXRlcmF0ZWUgPyBbXSA6IHJlc3VsdDtcbiAgfVxuICBvdXRlcjpcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgIHZhciBzZWVuSW5kZXggPSBzZWVuLmxlbmd0aDtcbiAgICAgIHdoaWxlIChzZWVuSW5kZXgtLSkge1xuICAgICAgICBpZiAoc2VlbltzZWVuSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWluY2x1ZGVzKHNlZW4sIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgaWYgKHNlZW4gIT09IHJlc3VsdCkge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmlxO1xuIiwidmFyIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICogYXJyYXkgb2YgYG9iamVjdGAgcHJvcGVydHkgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzXG4gKiBvZiBgcHJvcHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICByZXR1cm4gYXJyYXlNYXAocHJvcHMsIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVZhbHVlcztcbiIsInZhciBiYXNlRGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4vX2Jhc2VEaWZmZXJlbmNlJyksXG4gICAgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpLFxuICAgIGJhc2VVbmlxID0gcmVxdWlyZSgnLi9fYmFzZVVuaXEnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8ueG9yYCwgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcywgdGhhdCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyB0byBpbnNwZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheXMgVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlWG9yKGFycmF5cywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5cy5sZW5ndGg7XG4gIGlmIChsZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VVbmlxKGFycmF5c1swXSkgOiBbXTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgYXJyYXkgPSBhcnJheXNbaW5kZXhdLFxuICAgICAgICBvdGhJbmRleCA9IC0xO1xuXG4gICAgd2hpbGUgKCsrb3RoSW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChvdGhJbmRleCAhPSBpbmRleCkge1xuICAgICAgICByZXN1bHRbaW5kZXhdID0gYmFzZURpZmZlcmVuY2UocmVzdWx0W2luZGV4XSB8fCBhcnJheSwgYXJyYXlzW290aEluZGV4XSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4ocmVzdWx0LCAxKSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VYb3I7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIGBjYWNoZWAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIFRoZSBjYWNoZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBjYWNoZUhhcyhjYWNoZSwga2V5KSB7XG4gIHJldHVybiBjYWNoZS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYWNoZUhhcztcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGBpZGVudGl0eWAgaWYgaXQncyBub3QgYSBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBjYXN0IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjYXN0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nID8gdmFsdWUgOiBpZGVudGl0eTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0RnVuY3Rpb247XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBzdHJpbmdUb1BhdGggPSByZXF1aXJlKCcuL19zdHJpbmdUb1BhdGgnKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0UGF0aDtcbiIsIi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cyxcbiAqIHBsYWNlaG9sZGVycywgYW5kIHByb3ZpZGVkIGFyZ3VtZW50cyBpbnRvIGEgc2luZ2xlIGFycmF5IG9mIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbXBvc2VkIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gY29tcG9zZUFyZ3MoYXJncywgcGFydGlhbHMsIGhvbGRlcnMsIGlzQ3VycmllZCkge1xuICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGgsXG4gICAgICBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsXG4gICAgICBsZWZ0SW5kZXggPSAtMSxcbiAgICAgIGxlZnRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICByYW5nZUxlbmd0aCA9IG5hdGl2ZU1heChhcmdzTGVuZ3RoIC0gaG9sZGVyc0xlbmd0aCwgMCksXG4gICAgICByZXN1bHQgPSBBcnJheShsZWZ0TGVuZ3RoICsgcmFuZ2VMZW5ndGgpLFxuICAgICAgaXNVbmN1cnJpZWQgPSAhaXNDdXJyaWVkO1xuXG4gIHdoaWxlICgrK2xlZnRJbmRleCA8IGxlZnRMZW5ndGgpIHtcbiAgICByZXN1bHRbbGVmdEluZGV4XSA9IHBhcnRpYWxzW2xlZnRJbmRleF07XG4gIH1cbiAgd2hpbGUgKCsrYXJnc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgIGlmIChpc1VuY3VycmllZCB8fCBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoKSB7XG4gICAgICByZXN1bHRbaG9sZGVyc1thcmdzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4XTtcbiAgICB9XG4gIH1cbiAgd2hpbGUgKHJhbmdlTGVuZ3RoLS0pIHtcbiAgICByZXN1bHRbbGVmdEluZGV4KytdID0gYXJnc1thcmdzSW5kZXgrK107XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb21wb3NlQXJncztcbiIsIi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGNvbXBvc2VBcmdzYCBleGNlcHQgdGhhdCB0aGUgYXJndW1lbnRzIGNvbXBvc2l0aW9uXG4gKiBpcyB0YWlsb3JlZCBmb3IgYF8ucGFydGlhbFJpZ2h0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWQuXG4gKiBAcGFyYW0ge0FycmF5fSBob2xkZXJzIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW1zIHtib29sZWFufSBbaXNDdXJyaWVkXSBTcGVjaWZ5IGNvbXBvc2luZyBmb3IgYSBjdXJyaWVkIGZ1bmN0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tcG9zZWQgYXJndW1lbnRzLlxuICovXG5mdW5jdGlvbiBjb21wb3NlQXJnc1JpZ2h0KGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgaG9sZGVyc0luZGV4ID0gLTEsXG4gICAgICBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsXG4gICAgICByaWdodEluZGV4ID0gLTEsXG4gICAgICByaWdodExlbmd0aCA9IHBhcnRpYWxzLmxlbmd0aCxcbiAgICAgIHJhbmdlTGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3NMZW5ndGggLSBob2xkZXJzTGVuZ3RoLCAwKSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHJhbmdlTGVuZ3RoICsgcmlnaHRMZW5ndGgpLFxuICAgICAgaXNVbmN1cnJpZWQgPSAhaXNDdXJyaWVkO1xuXG4gIHdoaWxlICgrK2FyZ3NJbmRleCA8IHJhbmdlTGVuZ3RoKSB7XG4gICAgcmVzdWx0W2FyZ3NJbmRleF0gPSBhcmdzW2FyZ3NJbmRleF07XG4gIH1cbiAgdmFyIG9mZnNldCA9IGFyZ3NJbmRleDtcbiAgd2hpbGUgKCsrcmlnaHRJbmRleCA8IHJpZ2h0TGVuZ3RoKSB7XG4gICAgcmVzdWx0W29mZnNldCArIHJpZ2h0SW5kZXhdID0gcGFydGlhbHNbcmlnaHRJbmRleF07XG4gIH1cbiAgd2hpbGUgKCsraG9sZGVyc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgIGlmIChpc1VuY3VycmllZCB8fCBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoKSB7XG4gICAgICByZXN1bHRbb2Zmc2V0ICsgaG9sZGVyc1tob2xkZXJzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBvc2VBcmdzUmlnaHQ7XG4iLCIvKipcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcblxuICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5QXJyYXk7XG4iLCJ2YXIgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpO1xuXG4vKipcbiAqIENvcGllcyBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvcGllZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSwgcHJvcHMsIG9iamVjdCwgY3VzdG9taXplcikge1xuICB2YXIgaXNOZXcgPSAhb2JqZWN0O1xuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG5cbiAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3VmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5T2JqZWN0O1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiIsIi8qKlxuICogR2V0cyB0aGUgbnVtYmVyIG9mIGBwbGFjZWhvbGRlcmAgb2NjdXJyZW5jZXMgaW4gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcGxhY2Vob2xkZXIgY291bnQuXG4gKi9cbmZ1bmN0aW9uIGNvdW50SG9sZGVycyhhcnJheSwgcGxhY2Vob2xkZXIpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IDA7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGFycmF5W2xlbmd0aF0gPT09IHBsYWNlaG9sZGVyKSB7XG4gICAgICArK3Jlc3VsdDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3VudEhvbGRlcnM7XG4iLCJ2YXIgYXJyYXlBZ2dyZWdhdG9yID0gcmVxdWlyZSgnLi9fYXJyYXlBZ2dyZWdhdG9yJyksXG4gICAgYmFzZUFnZ3JlZ2F0b3IgPSByZXF1aXJlKCcuL19iYXNlQWdncmVnYXRvcicpLFxuICAgIGJhc2VJdGVyYXRlZSA9IHJlcXVpcmUoJy4vX2Jhc2VJdGVyYXRlZScpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5ncm91cEJ5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYWNjdW11bGF0b3IgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2luaXRpYWxpemVyXSBUaGUgYWNjdW11bGF0b3Igb2JqZWN0IGluaXRpYWxpemVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWdncmVnYXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQWdncmVnYXRvcihzZXR0ZXIsIGluaXRpYWxpemVyKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5QWdncmVnYXRvciA6IGJhc2VBZ2dyZWdhdG9yLFxuICAgICAgICBhY2N1bXVsYXRvciA9IGluaXRpYWxpemVyID8gaW5pdGlhbGl6ZXIoKSA6IHt9O1xuXG4gICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgc2V0dGVyLCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCBhY2N1bXVsYXRvcik7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQWdncmVnYXRvcjtcbiIsInZhciBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgaXNJdGVyYXRlZUNhbGwgPSByZXF1aXJlKCcuL19pc0l0ZXJhdGVlQ2FsbCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmFzc2lnbmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XG4gIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXG4gICAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPiAxID8gc291cmNlc1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICAgIGN1c3RvbWl6ZXIgPSAoYXNzaWduZXIubGVuZ3RoID4gMyAmJiB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nKVxuICAgICAgPyAobGVuZ3RoLS0sIGN1c3RvbWl6ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPCAzID8gdW5kZWZpbmVkIDogY3VzdG9taXplcjtcbiAgICAgIGxlbmd0aCA9IDE7XG4gICAgfVxuICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGFzc2lnbmVyKG9iamVjdCwgc291cmNlLCBpbmRleCwgY3VzdG9taXplcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUFzc2lnbmVyO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgYmFzZUVhY2hgIG9yIGBiYXNlRWFjaFJpZ2h0YCBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFYWNoKGVhY2hGdW5jLCBmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgfVxuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHJldHVybiBlYWNoRnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSk7XG4gICAgfVxuICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG5cbiAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2luZGV4XSwgaW5kZXgsIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJhc2VFYWNoO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgYmFzZSBmdW5jdGlvbiBmb3IgbWV0aG9kcyBsaWtlIGBfLmZvckluYCBhbmQgYF8uZm9yT3duYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCYXNlRm9yKGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSwga2V5c0Z1bmMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3Qob2JqZWN0KSxcbiAgICAgICAgcHJvcHMgPSBrZXlzRnVuYyhvYmplY3QpLFxuICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcbiAgICAgIGlmIChpdGVyYXRlZShpdGVyYWJsZVtrZXldLCBrZXksIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmFzZUZvcjtcbiIsInZhciBjcmVhdGVDdG9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3RvcicpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggdGhlIG9wdGlvbmFsIGB0aGlzYFxuICogYmluZGluZyBvZiBgdGhpc0FyZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJpbmQoZnVuYywgYml0bWFzaywgdGhpc0FyZykge1xuICB2YXIgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuICAgIHJldHVybiBmbi5hcHBseShpc0JpbmQgPyB0aGlzQXJnIDogdGhpcywgYXJndW1lbnRzKTtcbiAgfVxuICByZXR1cm4gd3JhcHBlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVCaW5kO1xuIiwidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgYW4gaW5zdGFuY2Ugb2YgYEN0b3JgIHJlZ2FyZGxlc3Mgb2ZcbiAqIHdoZXRoZXIgaXQgd2FzIGludm9rZWQgYXMgcGFydCBvZiBhIGBuZXdgIGV4cHJlc3Npb24gb3IgYnkgYGNhbGxgIG9yIGBhcHBseWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IEN0b3IgVGhlIGNvbnN0cnVjdG9yIHRvIHdyYXAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDdG9yKEN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIC8vIFVzZSBhIGBzd2l0Y2hgIHN0YXRlbWVudCB0byB3b3JrIHdpdGggY2xhc3MgY29uc3RydWN0b3JzLiBTZWVcbiAgICAvLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWZ1bmN0aW9uLW9iamVjdHMtY2FsbC10aGlzYXJndW1lbnQtYXJndW1lbnRzbGlzdFxuICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEN0b3I7XG4gICAgICBjYXNlIDE6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdKTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICBjYXNlIDQ6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0pO1xuICAgICAgY2FzZSA2OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7XG4gICAgICBjYXNlIDc6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdLCBhcmdzWzZdKTtcbiAgICB9XG4gICAgdmFyIHRoaXNCaW5kaW5nID0gYmFzZUNyZWF0ZShDdG9yLnByb3RvdHlwZSksXG4gICAgICAgIHJlc3VsdCA9IEN0b3IuYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuXG4gICAgLy8gTWltaWMgdGhlIGNvbnN0cnVjdG9yJ3MgYHJldHVybmAgYmVoYXZpb3IuXG4gICAgLy8gU2VlIGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDEzLjIuMiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogdGhpc0JpbmRpbmc7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQ3RvcjtcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5JyksXG4gICAgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICBjcmVhdGVIeWJyaWQgPSByZXF1aXJlKCcuL19jcmVhdGVIeWJyaWQnKSxcbiAgICBjcmVhdGVSZWN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlUmVjdXJyeScpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBlbmFibGUgY3VycnlpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtudW1iZXJ9IGFyaXR5IFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDdXJyeShmdW5jLCBiaXRtYXNrLCBhcml0eSkge1xuICB2YXIgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoLFxuICAgICAgICBwbGFjZWhvbGRlciA9IGdldEhvbGRlcih3cmFwcGVyKTtcblxuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgfVxuICAgIHZhciBob2xkZXJzID0gKGxlbmd0aCA8IDMgJiYgYXJnc1swXSAhPT0gcGxhY2Vob2xkZXIgJiYgYXJnc1tsZW5ndGggLSAxXSAhPT0gcGxhY2Vob2xkZXIpXG4gICAgICA/IFtdXG4gICAgICA6IHJlcGxhY2VIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcblxuICAgIGxlbmd0aCAtPSBob2xkZXJzLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVSZWN1cnJ5KFxuICAgICAgICBmdW5jLCBiaXRtYXNrLCBjcmVhdGVIeWJyaWQsIHdyYXBwZXIucGxhY2Vob2xkZXIsIHVuZGVmaW5lZCxcbiAgICAgICAgYXJncywgaG9sZGVycywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5IC0gbGVuZ3RoKTtcbiAgICB9XG4gICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICByZXR1cm4gYXBwbHkoZm4sIHRoaXMsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUN1cnJ5O1xuIiwidmFyIGJhc2VJdGVyYXRlZSA9IHJlcXVpcmUoJy4vX2Jhc2VJdGVyYXRlZScpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYF8uZmluZGAgb3IgYF8uZmluZExhc3RgIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaW5kSW5kZXhGdW5jIFRoZSBmdW5jdGlvbiB0byBmaW5kIHRoZSBjb2xsZWN0aW9uIGluZGV4LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmluZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmluZChmaW5kSW5kZXhGdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGZyb21JbmRleCkge1xuICAgIHZhciBpdGVyYWJsZSA9IE9iamVjdChjb2xsZWN0aW9uKTtcbiAgICBpZiAoIWlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKSB7XG4gICAgICB2YXIgaXRlcmF0ZWUgPSBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKTtcbiAgICAgIGNvbGxlY3Rpb24gPSBrZXlzKGNvbGxlY3Rpb24pO1xuICAgICAgcHJlZGljYXRlID0gZnVuY3Rpb24oa2V5KSB7IHJldHVybiBpdGVyYXRlZShpdGVyYWJsZVtrZXldLCBrZXksIGl0ZXJhYmxlKTsgfTtcbiAgICB9XG4gICAgdmFyIGluZGV4ID0gZmluZEluZGV4RnVuYyhjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGZyb21JbmRleCk7XG4gICAgcmV0dXJuIGluZGV4ID4gLTEgPyBpdGVyYWJsZVtpdGVyYXRlZSA/IGNvbGxlY3Rpb25baW5kZXhdIDogaW5kZXhdIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUZpbmQ7XG4iLCJ2YXIgY29tcG9zZUFyZ3MgPSByZXF1aXJlKCcuL19jb21wb3NlQXJncycpLFxuICAgIGNvbXBvc2VBcmdzUmlnaHQgPSByZXF1aXJlKCcuL19jb21wb3NlQXJnc1JpZ2h0JyksXG4gICAgY291bnRIb2xkZXJzID0gcmVxdWlyZSgnLi9fY291bnRIb2xkZXJzJyksXG4gICAgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICBjcmVhdGVSZWN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlUmVjdXJyeScpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlb3JkZXIgPSByZXF1aXJlKCcuL19yZW9yZGVyJyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX0ZMSVBfRkxBRyA9IDUxMjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggb3B0aW9uYWwgYHRoaXNgXG4gKiBiaW5kaW5nIG9mIGB0aGlzQXJnYCwgcGFydGlhbCBhcHBsaWNhdGlvbiwgYW5kIGN1cnJ5aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNSaWdodF0gVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWRcbiAqICB0byB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNSaWdodF0gVGhlIGBwYXJ0aWFsc1JpZ2h0YCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUh5YnJpZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQXJ5ID0gYml0bWFzayAmIFdSQVBfQVJZX0ZMQUcsXG4gICAgICBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHLFxuICAgICAgaXNDdXJyaWVkID0gYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpLFxuICAgICAgaXNGbGlwID0gYml0bWFzayAmIFdSQVBfRkxJUF9GTEFHLFxuICAgICAgQ3RvciA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuXG4gICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICB9XG4gICAgaWYgKGlzQ3VycmllZCkge1xuICAgICAgdmFyIHBsYWNlaG9sZGVyID0gZ2V0SG9sZGVyKHdyYXBwZXIpLFxuICAgICAgICAgIGhvbGRlcnNDb3VudCA9IGNvdW50SG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG4gICAgfVxuICAgIGlmIChwYXJ0aWFscykge1xuICAgICAgYXJncyA9IGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpO1xuICAgIH1cbiAgICBpZiAocGFydGlhbHNSaWdodCkge1xuICAgICAgYXJncyA9IGNvbXBvc2VBcmdzUmlnaHQoYXJncywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBpc0N1cnJpZWQpO1xuICAgIH1cbiAgICBsZW5ndGggLT0gaG9sZGVyc0NvdW50O1xuICAgIGlmIChpc0N1cnJpZWQgJiYgbGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgIHZhciBuZXdIb2xkZXJzID0gcmVwbGFjZUhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlY3VycnkoXG4gICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdGhpc0FyZyxcbiAgICAgICAgYXJncywgbmV3SG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5IC0gbGVuZ3RoXG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgdGhpc0JpbmRpbmcgPSBpc0JpbmQgPyB0aGlzQXJnIDogdGhpcyxcbiAgICAgICAgZm4gPSBpc0JpbmRLZXkgPyB0aGlzQmluZGluZ1tmdW5jXSA6IGZ1bmM7XG5cbiAgICBsZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgICBpZiAoYXJnUG9zKSB7XG4gICAgICBhcmdzID0gcmVvcmRlcihhcmdzLCBhcmdQb3MpO1xuICAgIH0gZWxzZSBpZiAoaXNGbGlwICYmIGxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBpZiAoaXNBcnkgJiYgYXJ5IDwgbGVuZ3RoKSB7XG4gICAgICBhcmdzLmxlbmd0aCA9IGFyeTtcbiAgICB9XG4gICAgaWYgKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikge1xuICAgICAgZm4gPSBDdG9yIHx8IGNyZWF0ZUN0b3IoZm4pO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUh5YnJpZDtcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5JyksXG4gICAgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZ1xuICogb2YgYHRoaXNBcmdgIGFuZCBgcGFydGlhbHNgIHByZXBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gKiAgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBhcnRpYWwoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMpIHtcbiAgdmFyIGlzQmluZCA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyxcbiAgICAgIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgICBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgbGVmdEluZGV4ID0gLTEsXG4gICAgICAgIGxlZnRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICAgIGFyZ3MgPSBBcnJheShsZWZ0TGVuZ3RoICsgYXJnc0xlbmd0aCksXG4gICAgICAgIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcblxuICAgIHdoaWxlICgrK2xlZnRJbmRleCA8IGxlZnRMZW5ndGgpIHtcbiAgICAgIGFyZ3NbbGVmdEluZGV4XSA9IHBhcnRpYWxzW2xlZnRJbmRleF07XG4gICAgfVxuICAgIHdoaWxlIChhcmdzTGVuZ3RoLS0pIHtcbiAgICAgIGFyZ3NbbGVmdEluZGV4KytdID0gYXJndW1lbnRzWysrYXJnc0luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIGFwcGx5KGZuLCBpc0JpbmQgPyB0aGlzQXJnIDogdGhpcywgYXJncyk7XG4gIH1cbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUGFydGlhbDtcbiIsInZhciBpc0xhemlhYmxlID0gcmVxdWlyZSgnLi9faXNMYXppYWJsZScpLFxuICAgIHNldERhdGEgPSByZXF1aXJlKCcuL19zZXREYXRhJyksXG4gICAgc2V0V3JhcFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0V3JhcFRvU3RyaW5nJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfQk9VTkRfRkxBRyA9IDQsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGNvbnRpbnVlIGN1cnJ5aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBGdW5jIFRoZSBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGBmdW5jYCB3cmFwcGVyLlxuICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdmFsdWUuXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmVjdXJyeShmdW5jLCBiaXRtYXNrLCB3cmFwRnVuYywgcGxhY2Vob2xkZXIsIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQ3VycnkgPSBiaXRtYXNrICYgV1JBUF9DVVJSWV9GTEFHLFxuICAgICAgbmV3SG9sZGVycyA9IGlzQ3VycnkgPyBob2xkZXJzIDogdW5kZWZpbmVkLFxuICAgICAgbmV3SG9sZGVyc1JpZ2h0ID0gaXNDdXJyeSA/IHVuZGVmaW5lZCA6IGhvbGRlcnMsXG4gICAgICBuZXdQYXJ0aWFscyA9IGlzQ3VycnkgPyBwYXJ0aWFscyA6IHVuZGVmaW5lZCxcbiAgICAgIG5ld1BhcnRpYWxzUmlnaHQgPSBpc0N1cnJ5ID8gdW5kZWZpbmVkIDogcGFydGlhbHM7XG5cbiAgYml0bWFzayB8PSAoaXNDdXJyeSA/IFdSQVBfUEFSVElBTF9GTEFHIDogV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpO1xuICBiaXRtYXNrICY9IH4oaXNDdXJyeSA/IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHIDogV1JBUF9QQVJUSUFMX0ZMQUcpO1xuXG4gIGlmICghKGJpdG1hc2sgJiBXUkFQX0NVUlJZX0JPVU5EX0ZMQUcpKSB7XG4gICAgYml0bWFzayAmPSB+KFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHKTtcbiAgfVxuICB2YXIgbmV3RGF0YSA9IFtcbiAgICBmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBuZXdQYXJ0aWFscywgbmV3SG9sZGVycywgbmV3UGFydGlhbHNSaWdodCxcbiAgICBuZXdIb2xkZXJzUmlnaHQsIGFyZ1BvcywgYXJ5LCBhcml0eVxuICBdO1xuXG4gIHZhciByZXN1bHQgPSB3cmFwRnVuYy5hcHBseSh1bmRlZmluZWQsIG5ld0RhdGEpO1xuICBpZiAoaXNMYXppYWJsZShmdW5jKSkge1xuICAgIHNldERhdGEocmVzdWx0LCBuZXdEYXRhKTtcbiAgfVxuICByZXN1bHQucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcbiAgcmV0dXJuIHNldFdyYXBUb1N0cmluZyhyZXN1bHQsIGZ1bmMsIGJpdG1hc2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJlY3Vycnk7XG4iLCJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgbm9vcCA9IHJlcXVpcmUoJy4vbm9vcCcpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNldCBvYmplY3Qgb2YgYHZhbHVlc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFkZCB0byB0aGUgc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IHNldC5cbiAqL1xudmFyIGNyZWF0ZVNldCA9ICEoU2V0ICYmICgxIC8gc2V0VG9BcnJheShuZXcgU2V0KFssLTBdKSlbMV0pID09IElORklOSVRZKSA/IG5vb3AgOiBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgcmV0dXJuIG5ldyBTZXQodmFsdWVzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlU2V0O1xuIiwidmFyIGJhc2VTZXREYXRhID0gcmVxdWlyZSgnLi9fYmFzZVNldERhdGEnKSxcbiAgICBjcmVhdGVCaW5kID0gcmVxdWlyZSgnLi9fY3JlYXRlQmluZCcpLFxuICAgIGNyZWF0ZUN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3VycnknKSxcbiAgICBjcmVhdGVIeWJyaWQgPSByZXF1aXJlKCcuL19jcmVhdGVIeWJyaWQnKSxcbiAgICBjcmVhdGVQYXJ0aWFsID0gcmVxdWlyZSgnLi9fY3JlYXRlUGFydGlhbCcpLFxuICAgIGdldERhdGEgPSByZXF1aXJlKCcuL19nZXREYXRhJyksXG4gICAgbWVyZ2VEYXRhID0gcmVxdWlyZSgnLi9fbWVyZ2VEYXRhJyksXG4gICAgc2V0RGF0YSA9IHJlcXVpcmUoJy4vX3NldERhdGEnKSxcbiAgICBzZXRXcmFwVG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRXcmFwVG9TdHJpbmcnKSxcbiAgICB0b0ludGVnZXIgPSByZXF1aXJlKCcuL3RvSW50ZWdlcicpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfQ1VSUllfUklHSFRfRkxBRyA9IDE2LFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgPSA2NDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGVpdGhlciBjdXJyaWVzIG9yIGludm9rZXMgYGZ1bmNgIHdpdGggb3B0aW9uYWxcbiAqIGB0aGlzYCBiaW5kaW5nIGFuZCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb258c3RyaW5nfSBmdW5jIFRoZSBmdW5jdGlvbiBvciBtZXRob2QgbmFtZSB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgICAxIC0gYF8uYmluZGBcbiAqICAgIDIgLSBgXy5iaW5kS2V5YFxuICogICAgNCAtIGBfLmN1cnJ5YCBvciBgXy5jdXJyeVJpZ2h0YCBvZiBhIGJvdW5kIGZ1bmN0aW9uXG4gKiAgICA4IC0gYF8uY3VycnlgXG4gKiAgIDE2IC0gYF8uY3VycnlSaWdodGBcbiAqICAgMzIgLSBgXy5wYXJ0aWFsYFxuICogICA2NCAtIGBfLnBhcnRpYWxSaWdodGBcbiAqICAxMjggLSBgXy5yZWFyZ2BcbiAqICAyNTYgLSBgXy5hcnlgXG4gKiAgNTEyIC0gYF8uZmxpcGBcbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQmluZEtleSA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfS0VZX0ZMQUc7XG4gIGlmICghaXNCaW5kS2V5ICYmIHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IHBhcnRpYWxzID8gcGFydGlhbHMubGVuZ3RoIDogMDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBiaXRtYXNrICY9IH4oV1JBUF9QQVJUSUFMX0ZMQUcgfCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyk7XG4gICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICB9XG4gIGFyeSA9IGFyeSA9PT0gdW5kZWZpbmVkID8gYXJ5IDogbmF0aXZlTWF4KHRvSW50ZWdlcihhcnkpLCAwKTtcbiAgYXJpdHkgPSBhcml0eSA9PT0gdW5kZWZpbmVkID8gYXJpdHkgOiB0b0ludGVnZXIoYXJpdHkpO1xuICBsZW5ndGggLT0gaG9sZGVycyA/IGhvbGRlcnMubGVuZ3RoIDogMDtcblxuICBpZiAoYml0bWFzayAmIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKSB7XG4gICAgdmFyIHBhcnRpYWxzUmlnaHQgPSBwYXJ0aWFscyxcbiAgICAgICAgaG9sZGVyc1JpZ2h0ID0gaG9sZGVycztcblxuICAgIHBhcnRpYWxzID0gaG9sZGVycyA9IHVuZGVmaW5lZDtcbiAgfVxuICB2YXIgZGF0YSA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGdldERhdGEoZnVuYyk7XG5cbiAgdmFyIG5ld0RhdGEgPSBbXG4gICAgZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCxcbiAgICBhcmdQb3MsIGFyeSwgYXJpdHlcbiAgXTtcblxuICBpZiAoZGF0YSkge1xuICAgIG1lcmdlRGF0YShuZXdEYXRhLCBkYXRhKTtcbiAgfVxuICBmdW5jID0gbmV3RGF0YVswXTtcbiAgYml0bWFzayA9IG5ld0RhdGFbMV07XG4gIHRoaXNBcmcgPSBuZXdEYXRhWzJdO1xuICBwYXJ0aWFscyA9IG5ld0RhdGFbM107XG4gIGhvbGRlcnMgPSBuZXdEYXRhWzRdO1xuICBhcml0eSA9IG5ld0RhdGFbOV0gPSBuZXdEYXRhWzldID09PSB1bmRlZmluZWRcbiAgICA/IChpc0JpbmRLZXkgPyAwIDogZnVuYy5sZW5ndGgpXG4gICAgOiBuYXRpdmVNYXgobmV3RGF0YVs5XSAtIGxlbmd0aCwgMCk7XG5cbiAgaWYgKCFhcml0eSAmJiBiaXRtYXNrICYgKFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfQ1VSUllfUklHSFRfRkxBRykpIHtcbiAgICBiaXRtYXNrICY9IH4oV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKTtcbiAgfVxuICBpZiAoIWJpdG1hc2sgfHwgYml0bWFzayA9PSBXUkFQX0JJTkRfRkxBRykge1xuICAgIHZhciByZXN1bHQgPSBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpO1xuICB9IGVsc2UgaWYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHIHx8IGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSB7XG4gICAgcmVzdWx0ID0gY3JlYXRlQ3VycnkoZnVuYywgYml0bWFzaywgYXJpdHkpO1xuICB9IGVsc2UgaWYgKChiaXRtYXNrID09IFdSQVBfUEFSVElBTF9GTEFHIHx8IGJpdG1hc2sgPT0gKFdSQVBfQklORF9GTEFHIHwgV1JBUF9QQVJUSUFMX0ZMQUcpKSAmJiAhaG9sZGVycy5sZW5ndGgpIHtcbiAgICByZXN1bHQgPSBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSBjcmVhdGVIeWJyaWQuYXBwbHkodW5kZWZpbmVkLCBuZXdEYXRhKTtcbiAgfVxuICB2YXIgc2V0dGVyID0gZGF0YSA/IGJhc2VTZXREYXRhIDogc2V0RGF0YTtcbiAgcmV0dXJuIHNldFdyYXBUb1N0cmluZyhzZXR0ZXIocmVzdWx0LCBuZXdEYXRhKSwgZnVuYywgYml0bWFzayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlV3JhcDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5U29tZSA9IHJlcXVpcmUoJy4vX2FycmF5U29tZScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcnJheXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XG5cbiAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgYXJyU3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKGFyclN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBhcnJTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gYXJyYXk7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQXJyYXlzO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5JyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyksXG4gICAgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuL19lcXVhbEFycmF5cycpLFxuICAgIG1hcFRvQXJyYXkgPSByZXF1aXJlKCcuL19tYXBUb0FycmF5JyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICBvdGhlciA9IG90aGVyLmJ1ZmZlcjtcblxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgIWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLCBuZXcgVWludDhBcnJheShvdGhlcikpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgcmV0dXJuIGVxKCtvYmplY3QsICtvdGhlcik7XG5cbiAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgIC8vIGFzIGVxdWFsLiBTZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xuICAgICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbEJ5VGFnO1xuIiwidmFyIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIG9iamVjdHMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIG9ialByb3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLFxuICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLFxuICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICBpZiAob2JqTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBpbmRleCA9IG9iakxlbmd0aDtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIGlmICghKGlzUGFydGlhbCA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBvYmpTdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKG9ialN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBvYmpTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gb2JqZWN0O1xuICB9XG4gIHZhciByZXN1bHQgPSB0cnVlO1xuICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcblxuICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XG4gICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSwgb3RoZXIsIG9iamVjdCwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcbiAgICAgICAgICA6IGNvbXBhcmVkXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcbiAgfVxuICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7XG5cbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmXG4gICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsT2JqZWN0cztcbiIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5cztcbiIsInZhciBtZXRhTWFwID0gcmVxdWlyZSgnLi9fbWV0YU1hcCcpLFxuICAgIG5vb3AgPSByZXF1aXJlKCcuL25vb3AnKTtcblxuLyoqXG4gKiBHZXRzIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHF1ZXJ5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gKi9cbnZhciBnZXREYXRhID0gIW1ldGFNYXAgPyBub29wIDogZnVuY3Rpb24oZnVuYykge1xuICByZXR1cm4gbWV0YU1hcC5nZXQoZnVuYyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldERhdGE7XG4iLCJ2YXIgcmVhbE5hbWVzID0gcmVxdWlyZSgnLi9fcmVhbE5hbWVzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmFtZSBvZiBgZnVuY2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZnVuY3Rpb24gbmFtZS5cbiAqL1xuZnVuY3Rpb24gZ2V0RnVuY05hbWUoZnVuYykge1xuICB2YXIgcmVzdWx0ID0gKGZ1bmMubmFtZSArICcnKSxcbiAgICAgIGFycmF5ID0gcmVhbE5hbWVzW3Jlc3VsdF0sXG4gICAgICBsZW5ndGggPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlYWxOYW1lcywgcmVzdWx0KSA/IGFycmF5Lmxlbmd0aCA6IDA7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgdmFyIGRhdGEgPSBhcnJheVtsZW5ndGhdLFxuICAgICAgICBvdGhlckZ1bmMgPSBkYXRhLmZ1bmM7XG4gICAgaWYgKG90aGVyRnVuYyA9PSBudWxsIHx8IG90aGVyRnVuYyA9PSBmdW5jKSB7XG4gICAgICByZXR1cm4gZGF0YS5uYW1lO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEZ1bmNOYW1lO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBhcmd1bWVudCBwbGFjZWhvbGRlciB2YWx1ZSBmb3IgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnNwZWN0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHBsYWNlaG9sZGVyIHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRIb2xkZXIoZnVuYykge1xuICB2YXIgb2JqZWN0ID0gZnVuYztcbiAgcmV0dXJuIG9iamVjdC5wbGFjZWhvbGRlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRIb2xkZXI7XG4iLCJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwidmFyIGlzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX2lzU3RyaWN0Q29tcGFyYWJsZScpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBtYXRjaCBkYXRhIG9mIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBnZXRNYXRjaERhdGEob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBrZXlzKG9iamVjdCksXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIHZhciBrZXkgPSByZXN1bHRbbGVuZ3RoXSxcbiAgICAgICAgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgIHJlc3VsdFtsZW5ndGhdID0gW2tleSwgdmFsdWUsIGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSldO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWF0Y2hEYXRhO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgZ2V0UHJvdG90eXBlID0gb3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UHJvdG90eXBlO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwidmFyIGFycmF5RmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXlGaWx0ZXInKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9scyA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgcmV0dXJuIGFycmF5RmlsdGVyKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBzeW1ib2wpO1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3ltYm9scztcbiIsInZhciBEYXRhVmlldyA9IHJlcXVpcmUoJy4vX0RhdGFWaWV3JyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgUHJvbWlzZSA9IHJlcXVpcmUoJy4vX1Byb21pc2UnKSxcbiAgICBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpLFxuICAgIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcHJvbWlzZVRhZyA9ICdbb2JqZWN0IFByb21pc2VdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWFwcywgc2V0cywgYW5kIHdlYWttYXBzLiAqL1xudmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwKSxcbiAgICBwcm9taXNlQ3RvclN0cmluZyA9IHRvU291cmNlKFByb21pc2UpLFxuICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcCk7XG5cbi8qKlxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbnZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4vLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG5pZiAoKERhdGFWaWV3ICYmIGdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XG4gICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAoU2V0ICYmIGdldFRhZyhuZXcgU2V0KSAhPSBzZXRUYWcpIHx8XG4gICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciByZXN1bHQgPSBiYXNlR2V0VGFnKHZhbHVlKSxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnO1xuXG4gICAgaWYgKGN0b3JTdHJpbmcpIHtcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7XG4gICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVybiB3ZWFrTWFwVGFnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFRhZztcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggd3JhcCBkZXRhaWwgY29tbWVudHMuICovXG52YXIgcmVXcmFwRGV0YWlscyA9IC9cXHtcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoICguKylcXF0gXFwqLyxcbiAgICByZVNwbGl0RGV0YWlscyA9IC8sPyAmIC87XG5cbi8qKlxuICogRXh0cmFjdHMgd3JhcHBlciBkZXRhaWxzIGZyb20gdGhlIGBzb3VyY2VgIGJvZHkgY29tbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc291cmNlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdyYXBwZXIgZGV0YWlscy5cbiAqL1xuZnVuY3Rpb24gZ2V0V3JhcERldGFpbHMoc291cmNlKSB7XG4gIHZhciBtYXRjaCA9IHNvdXJjZS5tYXRjaChyZVdyYXBEZXRhaWxzKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0uc3BsaXQocmVTcGxpdERldGFpbHMpIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0V3JhcERldGFpbHM7XG4iLCJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGV4aXN0cyBvbiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYXNGdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjayBwcm9wZXJ0aWVzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzUGF0aChvYmplY3QsIHBhdGgsIGhhc0Z1bmMpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKTtcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcbiAgfVxuICBpZiAocmVzdWx0IHx8ICsraW5kZXggIT0gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBsZW5ndGggPSBvYmplY3QgPT0gbnVsbCA/IDAgOiBvYmplY3QubGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiYgaXNMZW5ndGgobGVuZ3RoKSAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSAmJlxuICAgIChpc0FycmF5KG9iamVjdCkgfHwgaXNBcmd1bWVudHMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzUGF0aDtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEdldDtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hIYXM7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLCIvKiogVXNlZCB0byBtYXRjaCB3cmFwIGRldGFpbCBjb21tZW50cy4gKi9cbnZhciByZVdyYXBDb21tZW50ID0gL1xceyg/OlxcblxcL1xcKiBcXFt3cmFwcGVkIHdpdGggLitcXF0gXFwqXFwvKT9cXG4/LztcblxuLyoqXG4gKiBJbnNlcnRzIHdyYXBwZXIgYGRldGFpbHNgIGluIGEgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBgc291cmNlYCBib2R5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBzb3VyY2UgdG8gbW9kaWZ5LlxuICogQHJldHVybnMge0FycmF5fSBkZXRhaWxzIFRoZSBkZXRhaWxzIHRvIGluc2VydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIG1vZGlmaWVkIHNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLCBkZXRhaWxzKSB7XG4gIHZhciBsZW5ndGggPSBkZXRhaWxzLmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBsZW5ndGggLSAxO1xuICBkZXRhaWxzW2xhc3RJbmRleF0gPSAobGVuZ3RoID4gMSA/ICcmICcgOiAnJykgKyBkZXRhaWxzW2xhc3RJbmRleF07XG4gIGRldGFpbHMgPSBkZXRhaWxzLmpvaW4obGVuZ3RoID4gMiA/ICcsICcgOiAnICcpO1xuICByZXR1cm4gc291cmNlLnJlcGxhY2UocmVXcmFwQ29tbWVudCwgJ3tcXG4vKiBbd3JhcHBlZCB3aXRoICcgKyBkZXRhaWxzICsgJ10gKi9cXG4nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRXcmFwRGV0YWlscztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmxhdHRlbmFibGUgYGFyZ3VtZW50c2Agb2JqZWN0IG9yIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZsYXR0ZW5hYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzRmxhdHRlbmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSB8fFxuICAgICEhKHNwcmVhZGFibGVTeW1ib2wgJiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRmxhdHRlbmFibGU7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXk7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwidmFyIExhenlXcmFwcGVyID0gcmVxdWlyZSgnLi9fTGF6eVdyYXBwZXInKSxcbiAgICBnZXREYXRhID0gcmVxdWlyZSgnLi9fZ2V0RGF0YScpLFxuICAgIGdldEZ1bmNOYW1lID0gcmVxdWlyZSgnLi9fZ2V0RnVuY05hbWUnKSxcbiAgICBsb2Rhc2ggPSByZXF1aXJlKCcuL3dyYXBwZXJMb2Rhc2gnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBhIGxhenkgY291bnRlcnBhcnQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNMYXppYWJsZShmdW5jKSB7XG4gIHZhciBmdW5jTmFtZSA9IGdldEZ1bmNOYW1lKGZ1bmMpLFxuICAgICAgb3RoZXIgPSBsb2Rhc2hbZnVuY05hbWVdO1xuXG4gIGlmICh0eXBlb2Ygb3RoZXIgIT0gJ2Z1bmN0aW9uJyB8fCAhKGZ1bmNOYW1lIGluIExhenlXcmFwcGVyLnByb3RvdHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGZ1bmMgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGRhdGEgPSBnZXREYXRhKG90aGVyKTtcbiAgcmV0dXJuICEhZGF0YSAmJiBmdW5jID09PSBkYXRhWzBdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGF6aWFibGU7XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaWN0Q29tcGFyYWJsZTtcbiIsIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUhhcztcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKi9cbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xuXG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFRvQXJyYXk7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxuICogZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKGtleSwgc3JjVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHNyY1ZhbHVlICYmXG4gICAgICAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIE9iamVjdChvYmplY3QpKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWF0Y2hlc1N0cmljdENvbXBhcmFibGU7XG4iLCJ2YXIgbWVtb2l6ZSA9IHJlcXVpcmUoJy4vbWVtb2l6ZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICBjYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZUNhcHBlZDtcbiIsInZhciBjb21wb3NlQXJncyA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzJyksXG4gICAgY29tcG9zZUFyZ3NSaWdodCA9IHJlcXVpcmUoJy4vX2NvbXBvc2VBcmdzUmlnaHQnKSxcbiAgICByZXBsYWNlSG9sZGVycyA9IHJlcXVpcmUoJy4vX3JlcGxhY2VIb2xkZXJzJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBpbnRlcm5hbCBhcmd1bWVudCBwbGFjZWhvbGRlci4gKi9cbnZhciBQTEFDRUhPTERFUiA9ICdfX2xvZGFzaF9wbGFjZWhvbGRlcl9fJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9CT1VORF9GTEFHID0gNCxcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfQVJZX0ZMQUcgPSAxMjgsXG4gICAgV1JBUF9SRUFSR19GTEFHID0gMjU2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogTWVyZ2VzIHRoZSBmdW5jdGlvbiBtZXRhZGF0YSBvZiBgc291cmNlYCBpbnRvIGBkYXRhYC5cbiAqXG4gKiBNZXJnaW5nIG1ldGFkYXRhIHJlZHVjZXMgdGhlIG51bWJlciBvZiB3cmFwcGVycyB1c2VkIHRvIGludm9rZSBhIGZ1bmN0aW9uLlxuICogVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIG1ldGhvZHMgbGlrZSBgXy5iaW5kYCwgYF8uY3VycnlgLCBhbmQgYF8ucGFydGlhbGBcbiAqIG1heSBiZSBhcHBsaWVkIHJlZ2FyZGxlc3Mgb2YgZXhlY3V0aW9uIG9yZGVyLiBNZXRob2RzIGxpa2UgYF8uYXJ5YCBhbmRcbiAqIGBfLnJlYXJnYCBtb2RpZnkgZnVuY3Rpb24gYXJndW1lbnRzLCBtYWtpbmcgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlXG4gKiBleGVjdXRlZCBpbXBvcnRhbnQsIHByZXZlbnRpbmcgdGhlIG1lcmdpbmcgb2YgbWV0YWRhdGEuIEhvd2V2ZXIsIHdlIG1ha2VcbiAqIGFuIGV4Y2VwdGlvbiBmb3IgYSBzYWZlIGNvbWJpbmVkIGNhc2Ugd2hlcmUgY3VycmllZCBmdW5jdGlvbnMgaGF2ZSBgXy5hcnlgXG4gKiBhbmQgb3IgYF8ucmVhcmdgIGFwcGxpZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgVGhlIGRlc3RpbmF0aW9uIG1ldGFkYXRhLlxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBzb3VyY2UgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGRhdGFgLlxuICovXG5mdW5jdGlvbiBtZXJnZURhdGEoZGF0YSwgc291cmNlKSB7XG4gIHZhciBiaXRtYXNrID0gZGF0YVsxXSxcbiAgICAgIHNyY0JpdG1hc2sgPSBzb3VyY2VbMV0sXG4gICAgICBuZXdCaXRtYXNrID0gYml0bWFzayB8IHNyY0JpdG1hc2ssXG4gICAgICBpc0NvbW1vbiA9IG5ld0JpdG1hc2sgPCAoV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUcgfCBXUkFQX0FSWV9GTEFHKTtcblxuICB2YXIgaXNDb21ibyA9XG4gICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRykpIHx8XG4gICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBfUkVBUkdfRkxBRykgJiYgKGRhdGFbN10ubGVuZ3RoIDw9IHNvdXJjZVs4XSkpIHx8XG4gICAgKChzcmNCaXRtYXNrID09IChXUkFQX0FSWV9GTEFHIHwgV1JBUF9SRUFSR19GTEFHKSkgJiYgKHNvdXJjZVs3XS5sZW5ndGggPD0gc291cmNlWzhdKSAmJiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcpKTtcblxuICAvLyBFeGl0IGVhcmx5IGlmIG1ldGFkYXRhIGNhbid0IGJlIG1lcmdlZC5cbiAgaWYgKCEoaXNDb21tb24gfHwgaXNDb21ibykpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGB0aGlzQXJnYCBpZiBhdmFpbGFibGUuXG4gIGlmIChzcmNCaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcpIHtcbiAgICBkYXRhWzJdID0gc291cmNlWzJdO1xuICAgIC8vIFNldCB3aGVuIGN1cnJ5aW5nIGEgYm91bmQgZnVuY3Rpb24uXG4gICAgbmV3Qml0bWFzayB8PSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcgPyAwIDogV1JBUF9DVVJSWV9CT1VORF9GTEFHO1xuICB9XG4gIC8vIENvbXBvc2UgcGFydGlhbCBhcmd1bWVudHMuXG4gIHZhciB2YWx1ZSA9IHNvdXJjZVszXTtcbiAgaWYgKHZhbHVlKSB7XG4gICAgdmFyIHBhcnRpYWxzID0gZGF0YVszXTtcbiAgICBkYXRhWzNdID0gcGFydGlhbHMgPyBjb21wb3NlQXJncyhwYXJ0aWFscywgdmFsdWUsIHNvdXJjZVs0XSkgOiB2YWx1ZTtcbiAgICBkYXRhWzRdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzNdLCBQTEFDRUhPTERFUikgOiBzb3VyY2VbNF07XG4gIH1cbiAgLy8gQ29tcG9zZSBwYXJ0aWFsIHJpZ2h0IGFyZ3VtZW50cy5cbiAgdmFsdWUgPSBzb3VyY2VbNV07XG4gIGlmICh2YWx1ZSkge1xuICAgIHBhcnRpYWxzID0gZGF0YVs1XTtcbiAgICBkYXRhWzVdID0gcGFydGlhbHMgPyBjb21wb3NlQXJnc1JpZ2h0KHBhcnRpYWxzLCB2YWx1ZSwgc291cmNlWzZdKSA6IHZhbHVlO1xuICAgIGRhdGFbNl0gPSBwYXJ0aWFscyA/IHJlcGxhY2VIb2xkZXJzKGRhdGFbNV0sIFBMQUNFSE9MREVSKSA6IHNvdXJjZVs2XTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBhcmdQb3NgIGlmIGF2YWlsYWJsZS5cbiAgdmFsdWUgPSBzb3VyY2VbN107XG4gIGlmICh2YWx1ZSkge1xuICAgIGRhdGFbN10gPSB2YWx1ZTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBhcnlgIGlmIGl0J3Mgc21hbGxlci5cbiAgaWYgKHNyY0JpdG1hc2sgJiBXUkFQX0FSWV9GTEFHKSB7XG4gICAgZGF0YVs4XSA9IGRhdGFbOF0gPT0gbnVsbCA/IHNvdXJjZVs4XSA6IG5hdGl2ZU1pbihkYXRhWzhdLCBzb3VyY2VbOF0pO1xuICB9XG4gIC8vIFVzZSBzb3VyY2UgYGFyaXR5YCBpZiBvbmUgaXMgbm90IHByb3ZpZGVkLlxuICBpZiAoZGF0YVs5XSA9PSBudWxsKSB7XG4gICAgZGF0YVs5XSA9IHNvdXJjZVs5XTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBmdW5jYCBhbmQgbWVyZ2UgYml0bWFza3MuXG4gIGRhdGFbMF0gPSBzb3VyY2VbMF07XG4gIGRhdGFbMV0gPSBuZXdCaXRtYXNrO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlRGF0YTtcbiIsInZhciBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpO1xuXG4vKiogVXNlZCB0byBzdG9yZSBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBtZXRhTWFwID0gV2Vha01hcCAmJiBuZXcgV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBtZXRhTWFwO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUNyZWF0ZTtcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5cztcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsIi8qKiBVc2VkIHRvIGxvb2t1cCB1bm1pbmlmaWVkIGZ1bmN0aW9uIG5hbWVzLiAqL1xudmFyIHJlYWxOYW1lcyA9IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlYWxOYW1lcztcbiIsInZhciBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogUmVvcmRlciBgYXJyYXlgIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGluZGV4ZXMgd2hlcmUgdGhlIGVsZW1lbnQgYXRcbiAqIHRoZSBmaXJzdCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgZmlyc3QgZWxlbWVudCwgdGhlIGVsZW1lbnQgYXRcbiAqIHRoZSBzZWNvbmQgaW5kZXggaXMgYXNzaWduZWQgYXMgdGhlIHNlY29uZCBlbGVtZW50LCBhbmQgc28gb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byByZW9yZGVyLlxuICogQHBhcmFtIHtBcnJheX0gaW5kZXhlcyBUaGUgYXJyYW5nZWQgYXJyYXkgaW5kZXhlcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiByZW9yZGVyKGFycmF5LCBpbmRleGVzKSB7XG4gIHZhciBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBsZW5ndGggPSBuYXRpdmVNaW4oaW5kZXhlcy5sZW5ndGgsIGFyckxlbmd0aCksXG4gICAgICBvbGRBcnJheSA9IGNvcHlBcnJheShhcnJheSk7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgdmFyIGluZGV4ID0gaW5kZXhlc1tsZW5ndGhdO1xuICAgIGFycmF5W2xlbmd0aF0gPSBpc0luZGV4KGluZGV4LCBhcnJMZW5ndGgpID8gb2xkQXJyYXlbaW5kZXhdIDogdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZW9yZGVyO1xuIiwiLyoqIFVzZWQgYXMgdGhlIGludGVybmFsIGFyZ3VtZW50IHBsYWNlaG9sZGVyLiAqL1xudmFyIFBMQUNFSE9MREVSID0gJ19fbG9kYXNoX3BsYWNlaG9sZGVyX18nO1xuXG4vKipcbiAqIFJlcGxhY2VzIGFsbCBgcGxhY2Vob2xkZXJgIGVsZW1lbnRzIGluIGBhcnJheWAgd2l0aCBhbiBpbnRlcm5hbCBwbGFjZWhvbGRlclxuICogYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlaXIgaW5kZXhlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHRvIHJlcGxhY2UuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBwbGFjZWhvbGRlciBpbmRleGVzLlxuICovXG5mdW5jdGlvbiByZXBsYWNlSG9sZGVycyhhcnJheSwgcGxhY2Vob2xkZXIpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAodmFsdWUgPT09IHBsYWNlaG9sZGVyIHx8IHZhbHVlID09PSBQTEFDRUhPTERFUikge1xuICAgICAgYXJyYXlbaW5kZXhdID0gUExBQ0VIT0xERVI7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXBsYWNlSG9sZGVycztcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsIi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBBZGRzIGB2YWx1ZWAgdG8gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBhZGRcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQGFsaWFzIHB1c2hcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlQWRkKHZhbHVlKSB7XG4gIHRoaXMuX19kYXRhX18uc2V0KHZhbHVlLCBIQVNIX1VOREVGSU5FRCk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlQWRkO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlSGFzO1xuIiwidmFyIGJhc2VTZXREYXRhID0gcmVxdWlyZSgnLi9fYmFzZVNldERhdGEnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICpcbiAqICoqTm90ZToqKiBJZiB0aGlzIGZ1bmN0aW9uIGJlY29tZXMgaG90LCBpLmUuIGlzIGludm9rZWQgYSBsb3QgaW4gYSBzaG9ydFxuICogcGVyaW9kIG9mIHRpbWUsIGl0IHdpbGwgdHJpcCBpdHMgYnJlYWtlciBhbmQgdHJhbnNpdGlvbiB0byBhbiBpZGVudGl0eVxuICogZnVuY3Rpb24gdG8gYXZvaWQgZ2FyYmFnZSBjb2xsZWN0aW9uIHBhdXNlcyBpbiBWOC4gU2VlXG4gKiBbVjggaXNzdWUgMjA3MF0oaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MjA3MClcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc29jaWF0ZSBtZXRhZGF0YSB3aXRoLlxuICogQHBhcmFtIHsqfSBkYXRhIFRoZSBtZXRhZGF0YS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXREYXRhID0gc2hvcnRPdXQoYmFzZVNldERhdGEpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldERhdGE7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBzZXRgIHRvIGFuIGFycmF5IG9mIGl0cyB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXQgVGhlIHNldCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xuXG4gIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvQXJyYXk7XG4iLCJ2YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuIiwidmFyIGdldFdyYXBEZXRhaWxzID0gcmVxdWlyZSgnLi9fZ2V0V3JhcERldGFpbHMnKSxcbiAgICBpbnNlcnRXcmFwRGV0YWlscyA9IHJlcXVpcmUoJy4vX2luc2VydFdyYXBEZXRhaWxzJyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpLFxuICAgIHVwZGF0ZVdyYXBEZXRhaWxzID0gcmVxdWlyZSgnLi9fdXBkYXRlV3JhcERldGFpbHMnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgd3JhcHBlcmAgdG8gbWltaWMgdGhlIHNvdXJjZSBvZiBgcmVmZXJlbmNlYFxuICogd2l0aCB3cmFwcGVyIGRldGFpbHMgaW4gYSBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSBib2R5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cmFwcGVyIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWZlcmVuY2UgVGhlIHJlZmVyZW5jZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYHdyYXBwZXJgLlxuICovXG5mdW5jdGlvbiBzZXRXcmFwVG9TdHJpbmcod3JhcHBlciwgcmVmZXJlbmNlLCBiaXRtYXNrKSB7XG4gIHZhciBzb3VyY2UgPSAocmVmZXJlbmNlICsgJycpO1xuICByZXR1cm4gc2V0VG9TdHJpbmcod3JhcHBlciwgaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLCB1cGRhdGVXcmFwRGV0YWlscyhnZXRXcmFwRGV0YWlscyhzb3VyY2UpLCBiaXRtYXNrKSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFdyYXBUb1N0cmluZztcbiIsIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG9ydE91dDtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBTdGFja1xuICovXG5mdW5jdGlvbiBzdGFja0NsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0NsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIHJlc3VsdCA9IGRhdGFbJ2RlbGV0ZSddKGtleSk7XG5cbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrRGVsZXRlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrR2V0O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0hhcztcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgc3RhY2sgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIExpc3RDYWNoZSkge1xuICAgIHZhciBwYWlycyA9IGRhdGEuX19kYXRhX187XG4gICAgaWYgKCFNYXAgfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgdGhpcy5zaXplID0gKytkYXRhLnNpemU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGUocGFpcnMpO1xuICB9XG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrU2V0O1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gKiBjb21wYXJpc29ucyBvZiB2YWx1ZXMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICB2YXIgaW5kZXggPSBmcm9tSW5kZXggLSAxLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGFycmF5W2luZGV4XSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmljdEluZGV4T2Y7XG4iLCJ2YXIgbWVtb2l6ZUNhcHBlZCA9IHJlcXVpcmUoJy4vX21lbW9pemVDYXBwZWQnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1RvUGF0aDtcbiIsInZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9LZXk7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLCJ2YXIgYXJyYXlFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXlFYWNoJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX1JFQVJHX0ZMQUcgPSAyNTYsXG4gICAgV1JBUF9GTElQX0ZMQUcgPSA1MTI7XG5cbi8qKiBVc2VkIHRvIGFzc29jaWF0ZSB3cmFwIG1ldGhvZHMgd2l0aCB0aGVpciBiaXQgZmxhZ3MuICovXG52YXIgd3JhcEZsYWdzID0gW1xuICBbJ2FyeScsIFdSQVBfQVJZX0ZMQUddLFxuICBbJ2JpbmQnLCBXUkFQX0JJTkRfRkxBR10sXG4gIFsnYmluZEtleScsIFdSQVBfQklORF9LRVlfRkxBR10sXG4gIFsnY3VycnknLCBXUkFQX0NVUlJZX0ZMQUddLFxuICBbJ2N1cnJ5UmlnaHQnLCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUddLFxuICBbJ2ZsaXAnLCBXUkFQX0ZMSVBfRkxBR10sXG4gIFsncGFydGlhbCcsIFdSQVBfUEFSVElBTF9GTEFHXSxcbiAgWydwYXJ0aWFsUmlnaHQnLCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBR10sXG4gIFsncmVhcmcnLCBXUkFQX1JFQVJHX0ZMQUddXG5dO1xuXG4vKipcbiAqIFVwZGF0ZXMgd3JhcHBlciBgZGV0YWlsc2AgYmFzZWQgb24gYGJpdG1hc2tgIGZsYWdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7QXJyYXl9IGRldGFpbHMgVGhlIGRldGFpbHMgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgZGV0YWlsc2AuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVdyYXBEZXRhaWxzKGRldGFpbHMsIGJpdG1hc2spIHtcbiAgYXJyYXlFYWNoKHdyYXBGbGFncywgZnVuY3Rpb24ocGFpcikge1xuICAgIHZhciB2YWx1ZSA9ICdfLicgKyBwYWlyWzBdO1xuICAgIGlmICgoYml0bWFzayAmIHBhaXJbMV0pICYmICFhcnJheUluY2x1ZGVzKGRldGFpbHMsIHZhbHVlKSkge1xuICAgICAgZGV0YWlscy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZGV0YWlscy5zb3J0KCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdXBkYXRlV3JhcERldGFpbHM7XG4iLCJ2YXIgTGF6eVdyYXBwZXIgPSByZXF1aXJlKCcuL19MYXp5V3JhcHBlcicpLFxuICAgIExvZGFzaFdyYXBwZXIgPSByZXF1aXJlKCcuL19Mb2Rhc2hXcmFwcGVyJyksXG4gICAgY29weUFycmF5ID0gcmVxdWlyZSgnLi9fY29weUFycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB3cmFwcGVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHdyYXBwZXIgVGhlIHdyYXBwZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgd3JhcHBlci5cbiAqL1xuZnVuY3Rpb24gd3JhcHBlckNsb25lKHdyYXBwZXIpIHtcbiAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikge1xuICAgIHJldHVybiB3cmFwcGVyLmNsb25lKCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IG5ldyBMb2Rhc2hXcmFwcGVyKHdyYXBwZXIuX193cmFwcGVkX18sIHdyYXBwZXIuX19jaGFpbl9fKTtcbiAgcmVzdWx0Ll9fYWN0aW9uc19fID0gY29weUFycmF5KHdyYXBwZXIuX19hY3Rpb25zX18pO1xuICByZXN1bHQuX19pbmRleF9fICA9IHdyYXBwZXIuX19pbmRleF9fO1xuICByZXN1bHQuX192YWx1ZXNfXyA9IHdyYXBwZXIuX192YWx1ZXNfXztcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3cmFwcGVyQ2xvbmU7XG4iLCJ2YXIgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAgY3JlYXRlQXNzaWduZXIgPSByZXF1aXJlKCcuL19jcmVhdGVBc3NpZ25lcicpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyB0byB0aGVcbiAqIGRlc3RpbmF0aW9uIG9iamVjdC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICogU3Vic2VxdWVudCBzb3VyY2VzIG92ZXJ3cml0ZSBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyBzb3VyY2VzLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgIGFuZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYE9iamVjdC5hc3NpZ25gXShodHRwczovL21kbi5pby9PYmplY3QvYXNzaWduKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMTAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmFzc2lnbkluXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBmdW5jdGlvbiBCYXIoKSB7XG4gKiAgIHRoaXMuYyA9IDM7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5iID0gMjtcbiAqIEJhci5wcm90b3R5cGUuZCA9IDQ7XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDAgfSwgbmV3IEZvbywgbmV3IEJhcik7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2MnOiAzIH1cbiAqL1xudmFyIGFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlKSB7XG4gIGlmIChpc1Byb3RvdHlwZShzb3VyY2UpIHx8IGlzQXJyYXlMaWtlKHNvdXJjZSkpIHtcbiAgICBjb3B5T2JqZWN0KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QpO1xuICAgIHJldHVybjtcbiAgfVxuICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgc291cmNlW2tleV0pO1xuICAgIH1cbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduO1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBjcmVhdGVXcmFwID0gcmVxdWlyZSgnLi9fY3JlYXRlV3JhcCcpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgXG4gKiBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBUaGUgYF8uYmluZC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljIGJ1aWxkcyxcbiAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIG5hdGl2ZSBgRnVuY3Rpb24jYmluZGAsIHRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiXG4gKiBwcm9wZXJ0eSBvZiBib3VuZCBmdW5jdGlvbnMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBiaW5kLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJvdW5kIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBncmVldChncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gKiB9XG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ3VzZXInOiAnZnJlZCcgfTtcbiAqXG4gKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgJ2hpJyk7XG4gKiBib3VuZCgnIScpO1xuICogLy8gPT4gJ2hpIGZyZWQhJ1xuICpcbiAqIC8vIEJvdW5kIHdpdGggcGxhY2Vob2xkZXJzLlxuICogdmFyIGJvdW5kID0gXy5iaW5kKGdyZWV0LCBvYmplY3QsIF8sICchJyk7XG4gKiBib3VuZCgnaGknKTtcbiAqIC8vID0+ICdoaSBmcmVkISdcbiAqL1xudmFyIGJpbmQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCB0aGlzQXJnLCBwYXJ0aWFscykge1xuICB2YXIgYml0bWFzayA9IFdSQVBfQklORF9GTEFHO1xuICBpZiAocGFydGlhbHMubGVuZ3RoKSB7XG4gICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKGJpbmQpKTtcbiAgICBiaXRtYXNrIHw9IFdSQVBfUEFSVElBTF9GTEFHO1xuICB9XG4gIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzKTtcbn0pO1xuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5iaW5kLnBsYWNlaG9sZGVyID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gYmluZDtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIG5vdyA9IHJlcXVpcmUoJy4vbm93JyksXG4gICAgdG9OdW1iZXIgPSByZXF1aXJlKCcuL3RvTnVtYmVyJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVib3VuY2VkIGZ1bmN0aW9uIHRoYXQgZGVsYXlzIGludm9raW5nIGBmdW5jYCB1bnRpbCBhZnRlciBgd2FpdGBcbiAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICogaW52b2tlZC4gVGhlIGRlYm91bmNlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGAgbWV0aG9kIHRvIGNhbmNlbFxuICogZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG8gaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uXG4gKiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGVcbiAqIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YCB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWRcbiAqIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnRcbiAqIGNhbGxzIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgXG4gKiBpbnZvY2F0aW9uLlxuICpcbiAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uXG4gKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gKlxuICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gKlxuICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLmRlYm91bmNlYCBhbmQgYF8udGhyb3R0bGVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVib3VuY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2FpdF1cbiAqICBUaGUgbWF4aW11bSB0aW1lIGBmdW5jYCBpcyBhbGxvd2VkIHRvIGJlIGRlbGF5ZWQgYmVmb3JlIGl0J3MgaW52b2tlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVib3VuY2VkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCBjb3N0bHkgY2FsY3VsYXRpb25zIHdoaWxlIHRoZSB3aW5kb3cgc2l6ZSBpcyBpbiBmbHV4LlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcbiAqXG4gKiAvLyBJbnZva2UgYHNlbmRNYWlsYCB3aGVuIGNsaWNrZWQsIGRlYm91bmNpbmcgc3Vic2VxdWVudCBjYWxscy5cbiAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAqICAgJ2xlYWRpbmcnOiB0cnVlLFxuICogICAndHJhaWxpbmcnOiBmYWxzZVxuICogfSkpO1xuICpcbiAqIC8vIEVuc3VyZSBgYmF0Y2hMb2dgIGlzIGludm9rZWQgb25jZSBhZnRlciAxIHNlY29uZCBvZiBkZWJvdW5jZWQgY2FsbHMuXG4gKiB2YXIgZGVib3VuY2VkID0gXy5kZWJvdW5jZShiYXRjaExvZywgMjUwLCB7ICdtYXhXYWl0JzogMTAwMCB9KTtcbiAqIHZhciBzb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoJy9zdHJlYW0nKTtcbiAqIGpRdWVyeShzb3VyY2UpLm9uKCdtZXNzYWdlJywgZGVib3VuY2VkKTtcbiAqXG4gKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIGRlYm91bmNlZCBpbnZvY2F0aW9uLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgZGVib3VuY2VkLmNhbmNlbCk7XG4gKi9cbmZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIGxhc3RBcmdzLFxuICAgICAgbGFzdFRoaXMsXG4gICAgICBtYXhXYWl0LFxuICAgICAgcmVzdWx0LFxuICAgICAgdGltZXJJZCxcbiAgICAgIGxhc3RDYWxsVGltZSxcbiAgICAgIGxhc3RJbnZva2VUaW1lID0gMCxcbiAgICAgIGxlYWRpbmcgPSBmYWxzZSxcbiAgICAgIG1heGluZyA9IGZhbHNlLFxuICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHdhaXQgPSB0b051bWJlcih3YWl0KSB8fCAwO1xuICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICBsZWFkaW5nID0gISFvcHRpb25zLmxlYWRpbmc7XG4gICAgbWF4aW5nID0gJ21heFdhaXQnIGluIG9wdGlvbnM7XG4gICAgbWF4V2FpdCA9IG1heGluZyA/IG5hdGl2ZU1heCh0b051bWJlcihvcHRpb25zLm1heFdhaXQpIHx8IDAsIHdhaXQpIDogbWF4V2FpdDtcbiAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRnVuYyh0aW1lKSB7XG4gICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzO1xuXG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSkge1xuICAgIC8vIFJlc2V0IGFueSBgbWF4V2FpdGAgdGltZXIuXG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIC8vIFN0YXJ0IHRoZSB0aW1lciBmb3IgdGhlIHRyYWlsaW5nIGVkZ2UuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS5cbiAgICByZXR1cm4gbGVhZGluZyA/IGludm9rZUZ1bmModGltZSkgOiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lLFxuICAgICAgICB0aW1lV2FpdGluZyA9IHdhaXQgLSB0aW1lU2luY2VMYXN0Q2FsbDtcblxuICAgIHJldHVybiBtYXhpbmdcbiAgICAgID8gbmF0aXZlTWluKHRpbWVXYWl0aW5nLCBtYXhXYWl0IC0gdGltZVNpbmNlTGFzdEludm9rZSlcbiAgICAgIDogdGltZVdhaXRpbmc7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRJbnZva2UodGltZSkge1xuICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWU7XG5cbiAgICAvLyBFaXRoZXIgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCwgYWN0aXZpdHkgaGFzIHN0b3BwZWQgYW5kIHdlJ3JlIGF0IHRoZVxuICAgIC8vIHRyYWlsaW5nIGVkZ2UsIHRoZSBzeXN0ZW0gdGltZSBoYXMgZ29uZSBiYWNrd2FyZHMgYW5kIHdlJ3JlIHRyZWF0aW5nXG4gICAgLy8gaXQgYXMgdGhlIHRyYWlsaW5nIGVkZ2UsIG9yIHdlJ3ZlIGhpdCB0aGUgYG1heFdhaXRgIGxpbWl0LlxuICAgIHJldHVybiAobGFzdENhbGxUaW1lID09PSB1bmRlZmluZWQgfHwgKHRpbWVTaW5jZUxhc3RDYWxsID49IHdhaXQpIHx8XG4gICAgICAodGltZVNpbmNlTGFzdENhbGwgPCAwKSB8fCAobWF4aW5nICYmIHRpbWVTaW5jZUxhc3RJbnZva2UgPj0gbWF4V2FpdCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGltZXJFeHBpcmVkKCkge1xuICAgIHZhciB0aW1lID0gbm93KCk7XG4gICAgaWYgKHNob3VsZEludm9rZSh0aW1lKSkge1xuICAgICAgcmV0dXJuIHRyYWlsaW5nRWRnZSh0aW1lKTtcbiAgICB9XG4gICAgLy8gUmVzdGFydCB0aGUgdGltZXIuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCByZW1haW5pbmdXYWl0KHRpbWUpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYWlsaW5nRWRnZSh0aW1lKSB7XG4gICAgdGltZXJJZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIE9ubHkgaW52b2tlIGlmIHdlIGhhdmUgYGxhc3RBcmdzYCB3aGljaCBtZWFucyBgZnVuY2AgaGFzIGJlZW5cbiAgICAvLyBkZWJvdW5jZWQgYXQgbGVhc3Qgb25jZS5cbiAgICBpZiAodHJhaWxpbmcgJiYgbGFzdEFyZ3MpIHtcbiAgICAgIHJldHVybiBpbnZva2VGdW5jKHRpbWUpO1xuICAgIH1cbiAgICBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgaWYgKHRpbWVySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgIH1cbiAgICBsYXN0SW52b2tlVGltZSA9IDA7XG4gICAgbGFzdEFyZ3MgPSBsYXN0Q2FsbFRpbWUgPSBsYXN0VGhpcyA9IHRpbWVySWQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICByZXR1cm4gdGltZXJJZCA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogdHJhaWxpbmdFZGdlKG5vdygpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlYm91bmNlZCgpIHtcbiAgICB2YXIgdGltZSA9IG5vdygpLFxuICAgICAgICBpc0ludm9raW5nID0gc2hvdWxkSW52b2tlKHRpbWUpO1xuXG4gICAgbGFzdEFyZ3MgPSBhcmd1bWVudHM7XG4gICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgIGxhc3RDYWxsVGltZSA9IHRpbWU7XG5cbiAgICBpZiAoaXNJbnZva2luZykge1xuICAgICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbGVhZGluZ0VkZ2UobGFzdENhbGxUaW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChtYXhpbmcpIHtcbiAgICAgICAgLy8gSGFuZGxlIGludm9jYXRpb25zIGluIGEgdGlnaHQgbG9vcC5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICByZXR1cm4gaW52b2tlRnVuYyhsYXN0Q2FsbFRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGRlYm91bmNlZC5jYW5jZWwgPSBjYW5jZWw7XG4gIGRlYm91bmNlZC5mbHVzaCA9IGZsdXNoO1xuICByZXR1cm4gZGVib3VuY2VkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlYm91bmNlO1xuIiwiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXE7XG4iLCJ2YXIgYXJyYXlGaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheUZpbHRlcicpLFxuICAgIGJhc2VGaWx0ZXIgPSByZXF1aXJlKCcuL19iYXNlRmlsdGVyJyksXG4gICAgYmFzZUl0ZXJhdGVlID0gcmVxdWlyZSgnLi9fYmFzZUl0ZXJhdGVlJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLCByZXR1cm5pbmcgYW4gYXJyYXkgb2YgYWxsIGVsZW1lbnRzXG4gKiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gKiBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIGBfLnJlbW92ZWAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICogQHNlZSBfLnJlamVjdFxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAqIF07XG4gKlxuICogXy5maWx0ZXIodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnXVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbHRlcih1c2VycywgeyAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0pO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmlsdGVyKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnXVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maWx0ZXIodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAqXG4gKiAvLyBDb21iaW5pbmcgc2V2ZXJhbCBwcmVkaWNhdGVzIHVzaW5nIGBfLm92ZXJFdmVyeWAgb3IgYF8ub3ZlclNvbWVgLlxuICogXy5maWx0ZXIodXNlcnMsIF8ub3ZlclNvbWUoW3sgJ2FnZSc6IDM2IH0sIFsnYWdlJywgNDBdXSkpO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ2Jhcm5leSddXG4gKi9cbmZ1bmN0aW9uIGZpbHRlcihjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlGaWx0ZXIgOiBiYXNlRmlsdGVyO1xuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmlsdGVyO1xuIiwidmFyIGNyZWF0ZUZpbmQgPSByZXF1aXJlKCcuL19jcmVhdGVGaW5kJyksXG4gICAgZmluZEluZGV4ID0gcmVxdWlyZSgnLi9maW5kSW5kZXgnKTtcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nIHRoZSBmaXJzdCBlbGVtZW50XG4gKiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gKiBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXRjaGVkIGVsZW1lbnQsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSwgICdhY3RpdmUnOiB0cnVlIH1cbiAqIF07XG4gKlxuICogXy5maW5kKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZSA8IDQwOyB9KTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2Jhcm5leSdcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kKHVzZXJzLCB7ICdhZ2UnOiAxLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ3BlYmJsZXMnXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiBvYmplY3QgZm9yICdmcmVkJ1xuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kKHVzZXJzLCAnYWN0aXZlJyk7XG4gKiAvLyA9PiBvYmplY3QgZm9yICdiYXJuZXknXG4gKi9cbnZhciBmaW5kID0gY3JlYXRlRmluZChmaW5kSW5kZXgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZpbmQ7XG4iLCJ2YXIgYmFzZUZpbmRJbmRleCA9IHJlcXVpcmUoJy4vX2Jhc2VGaW5kSW5kZXgnKSxcbiAgICBiYXNlSXRlcmF0ZWUgPSByZXF1aXJlKCcuL19iYXNlSXRlcmF0ZWUnKSxcbiAgICB0b0ludGVnZXIgPSByZXF1aXJlKCcuL3RvSW50ZWdlcicpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3RcbiAqIGVsZW1lbnQgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yIGluc3RlYWQgb2YgdGhlIGVsZW1lbnQgaXRzZWxmLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMS4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgZWxlbWVudCwgZWxzZSBgLTFgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IHRydWUgfVxuICogXTtcbiAqXG4gKiBfLmZpbmRJbmRleCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby51c2VyID09ICdiYXJuZXknOyB9KTtcbiAqIC8vID0+IDBcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kSW5kZXgodXNlcnMsIHsgJ3VzZXInOiAnZnJlZCcsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAqIC8vID0+IDFcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRJbmRleCh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICogLy8gPT4gMFxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kSW5kZXgodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IDJcbiAqL1xuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHZhciBpbmRleCA9IGZyb21JbmRleCA9PSBudWxsID8gMCA6IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgaW5kZXggPSBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApO1xuICB9XG4gIHJldHVybiBiYXNlRmluZEluZGV4KGFycmF5LCBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgaW5kZXgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZpbmRJbmRleDtcbiIsInZhciBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJy4vX2Jhc2VGbGF0dGVuJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgZmxhdHRlbnMgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmZsYXR0ZW5EZWVwKFsxLCBbMiwgWzMsIFs0XV0sIDVdXSk7XG4gKiAvLyA9PiBbMSwgMiwgMywgNCwgNV1cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbkRlZXAoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIElORklOSVRZKSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5EZWVwO1xuIiwidmFyIGFycmF5RWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5RWFjaCcpLFxuICAgIGJhc2VFYWNoID0gcmVxdWlyZSgnLi9fYmFzZUVhY2gnKSxcbiAgICBjYXN0RnVuY3Rpb24gPSByZXF1aXJlKCcuL19jYXN0RnVuY3Rpb24nKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBlbGVtZW50LlxuICogVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiAqKk5vdGU6KiogQXMgd2l0aCBvdGhlciBcIkNvbGxlY3Rpb25zXCIgbWV0aG9kcywgb2JqZWN0cyB3aXRoIGEgXCJsZW5ndGhcIlxuICogcHJvcGVydHkgYXJlIGl0ZXJhdGVkIGxpa2UgYXJyYXlzLiBUbyBhdm9pZCB0aGlzIGJlaGF2aW9yIHVzZSBgXy5mb3JJbmBcbiAqIG9yIGBfLmZvck93bmAgZm9yIG9iamVjdCBpdGVyYXRpb24uXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGFsaWFzIGVhY2hcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICogQHNlZSBfLmZvckVhY2hSaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmZvckVhY2goWzEsIDJdLCBmdW5jdGlvbih2YWx1ZSkge1xuICogICBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gKiB9KTtcbiAqIC8vID0+IExvZ3MgYDFgIHRoZW4gYDJgLlxuICpcbiAqIF8uZm9yRWFjaCh7ICdhJzogMSwgJ2InOiAyIH0sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAqICAgY29uc29sZS5sb2coa2V5KTtcbiAqIH0pO1xuICogLy8gPT4gTG9ncyAnYScgdGhlbiAnYicgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkuXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2goY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlFYWNoIDogYmFzZUVhY2g7XG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGNhc3RGdW5jdGlvbihpdGVyYXRlZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZvckVhY2g7XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjcuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldDtcbiIsInZhciBiYXNlSGFzSW4gPSByZXF1aXJlKCcuL19iYXNlSGFzSW4nKSxcbiAgICBoYXNQYXRoID0gcmVxdWlyZSgnLi9faGFzUGF0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IF8uY3JlYXRlKHsgJ2EnOiBfLmNyZWF0ZSh7ICdiJzogMiB9KSB9KTtcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXNJbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzSW47XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZU9iamVjdDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpLFxuICAgIHN0dWJGYWxzZSA9IHJlcXVpcmUoJy4vc3R1YkZhbHNlJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0J1ZmZlcjtcbiIsInZhciBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gZW1wdHkgb2JqZWN0LCBjb2xsZWN0aW9uLCBtYXAsIG9yIHNldC5cbiAqXG4gKiBPYmplY3RzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBubyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWRcbiAqIHByb3BlcnRpZXMuXG4gKlxuICogQXJyYXktbGlrZSB2YWx1ZXMgc3VjaCBhcyBgYXJndW1lbnRzYCBvYmplY3RzLCBhcnJheXMsIGJ1ZmZlcnMsIHN0cmluZ3MsIG9yXG4gKiBqUXVlcnktbGlrZSBjb2xsZWN0aW9ucyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgbGVuZ3RoYCBvZiBgMGAuXG4gKiBTaW1pbGFybHksIG1hcHMgYW5kIHNldHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYHNpemVgIG9mIGAwYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBlbXB0eSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRW1wdHkobnVsbCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KHRydWUpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eSgxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0VtcHR5KHsgJ2EnOiAxIH0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgIChpc0FycmF5KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlLnNwbGljZSA9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIGlzQnVmZmVyKHZhbHVlKSB8fCBpc1R5cGVkQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICByZXR1cm4gIXZhbHVlLmxlbmd0aDtcbiAgfVxuICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKTtcbiAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNldFRhZykge1xuICAgIHJldHVybiAhdmFsdWUuc2l6ZTtcbiAgfVxuICBpZiAoaXNQcm90b3R5cGUodmFsdWUpKSB7XG4gICAgcmV0dXJuICFiYXNlS2V5cyh2YWx1ZSkubGVuZ3RoO1xuICB9XG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRW1wdHk7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGVuZ3RoO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTeW1ib2w7XG4iLCJ2YXIgYmFzZUlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Jhc2VJc1R5cGVkQXJyYXknKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVHlwZWRBcnJheTtcbiIsInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBjcmVhdGVBZ2dyZWdhdG9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQWdncmVnYXRvcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIGtleXMgZ2VuZXJhdGVkIGZyb20gdGhlIHJlc3VsdHMgb2YgcnVubmluZ1xuICogZWFjaCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCB0aHJ1IGBpdGVyYXRlZWAuIFRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIG9mXG4gKiBlYWNoIGtleSBpcyB0aGUgbGFzdCBlbGVtZW50IHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBrZXkuIFRoZVxuICogaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheSA9IFtcbiAqICAgeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sXG4gKiAgIHsgJ2Rpcic6ICdyaWdodCcsICdjb2RlJzogMTAwIH1cbiAqIF07XG4gKlxuICogXy5rZXlCeShhcnJheSwgZnVuY3Rpb24obykge1xuICogICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShvLmNvZGUpO1xuICogfSk7XG4gKiAvLyA9PiB7ICdhJzogeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sICdkJzogeyAnZGlyJzogJ3JpZ2h0JywgJ2NvZGUnOiAxMDAgfSB9XG4gKlxuICogXy5rZXlCeShhcnJheSwgJ2RpcicpO1xuICogLy8gPT4geyAnbGVmdCc6IHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LCAncmlnaHQnOiB7ICdkaXInOiAncmlnaHQnLCAnY29kZSc6IDEwMCB9IH1cbiAqL1xudmFyIGtleUJ5ID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCB2YWx1ZSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBrZXlCeTtcbiIsInZhciBhcnJheUxpa2VLZXlzID0gcmVxdWlyZSgnLi9fYXJyYXlMaWtlS2V5cycpLFxuICAgIGJhc2VLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUtleXMnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy5rZXlzKCdoaScpO1xuICogLy8gPT4gWycwJywgJzEnXVxuICovXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5cztcbiIsInZhciBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZUl0ZXJhdGVlID0gcmVxdWlyZSgnLi9fYmFzZUl0ZXJhdGVlJyksXG4gICAgYmFzZU1hcCA9IHJlcXVpcmUoJy4vX2Jhc2VNYXAnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB2YWx1ZXMgYnkgcnVubmluZyBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gIHRocnVcbiAqIGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqIE1hbnkgbG9kYXNoIG1ldGhvZHMgYXJlIGd1YXJkZWQgdG8gd29yayBhcyBpdGVyYXRlZXMgZm9yIG1ldGhvZHMgbGlrZVxuICogYF8uZXZlcnlgLCBgXy5maWx0ZXJgLCBgXy5tYXBgLCBgXy5tYXBWYWx1ZXNgLCBgXy5yZWplY3RgLCBhbmQgYF8uc29tZWAuXG4gKlxuICogVGhlIGd1YXJkZWQgbWV0aG9kcyBhcmU6XG4gKiBgYXJ5YCwgYGNodW5rYCwgYGN1cnJ5YCwgYGN1cnJ5UmlnaHRgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZXZlcnlgLFxuICogYGZpbGxgLCBgaW52ZXJ0YCwgYHBhcnNlSW50YCwgYHJhbmRvbWAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlcGVhdGAsXG4gKiBgc2FtcGxlU2l6ZWAsIGBzbGljZWAsIGBzb21lYCwgYHNvcnRCeWAsIGBzcGxpdGAsIGB0YWtlYCwgYHRha2VSaWdodGAsXG4gKiBgdGVtcGxhdGVgLCBgdHJpbWAsIGB0cmltRW5kYCwgYHRyaW1TdGFydGAsIGFuZCBgd29yZHNgXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICogICByZXR1cm4gbiAqIG47XG4gKiB9XG4gKlxuICogXy5tYXAoWzQsIDhdLCBzcXVhcmUpO1xuICogLy8gPT4gWzE2LCA2NF1cbiAqXG4gKiBfLm1hcCh7ICdhJzogNCwgJ2InOiA4IH0sIHNxdWFyZSk7XG4gKiAvLyA9PiBbMTYsIDY0XSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcgfVxuICogXTtcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8ubWFwKHVzZXJzLCAndXNlcicpO1xuICogLy8gPT4gWydiYXJuZXknLCAnZnJlZCddXG4gKi9cbmZ1bmN0aW9uIG1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheU1hcCA6IGJhc2VNYXA7XG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgMykpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcDtcbiIsInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbWVtb2l6ZXMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuIElmIGByZXNvbHZlcmAgaXNcbiAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxuICogcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uIGlzIHVzZWQgYXMgdGhlIG1hcCBjYWNoZSBrZXkuIFRoZSBgZnVuY2BcbiAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGUgY2FjaGUgaXMgZXhwb3NlZCBhcyB0aGUgYGNhY2hlYCBwcm9wZXJ0eSBvbiB0aGUgbWVtb2l6ZWRcbiAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcbiAqIFtgTWFwYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcHJvcGVydGllcy1vZi10aGUtbWFwLXByb3RvdHlwZS1vYmplY3QpXG4gKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICpcbiAqIHZhciB2YWx1ZXMgPSBfLm1lbW9pemUoXy52YWx1ZXMpO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiB2YWx1ZXMob3RoZXIpO1xuICogLy8gPT4gWzMsIDRdXG4gKlxuICogb2JqZWN0LmEgPSAyO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cbiAqIHZhbHVlcy5jYWNoZS5zZXQob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWydhJywgJ2InXVxuICpcbiAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xuICovXG5mdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cbm1lbW9pemUuQ2FjaGUgPSBNYXBDYWNoZTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4zLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5ub29wKTtcbiAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAqL1xuZnVuY3Rpb24gbm9vcCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBub29wO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKlxuICogR2V0cyB0aGUgdGltZXN0YW1wIG9mIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgaGF2ZSBlbGFwc2VkIHNpbmNlXG4gKiB0aGUgVW5peCBlcG9jaCAoMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgRGF0ZVxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdGltZXN0YW1wLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRlZmVyKGZ1bmN0aW9uKHN0YW1wKSB7XG4gKiAgIGNvbnNvbGUubG9nKF8ubm93KCkgLSBzdGFtcCk7XG4gKiB9LCBfLm5vdygpKTtcbiAqIC8vID0+IExvZ3MgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaXQgdG9vayBmb3IgdGhlIGRlZmVycmVkIGludm9jYXRpb24uXG4gKi9cbnZhciBub3cgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHJvb3QuRGF0ZS5ub3coKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbm93O1xuIiwidmFyIGJhc2VQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2Jhc2VQcm9wZXJ0eScpLFxuICAgIGJhc2VQcm9wZXJ0eURlZXAgPSByZXF1aXJlKCcuL19iYXNlUHJvcGVydHlEZWVwJyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbXG4gKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cbiAqIF07XG4gKlxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xuICogLy8gPT4gWzIsIDFdXG4gKlxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcbiAqIC8vID0+IFsxLCAyXVxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gIHJldHVybiBpc0tleShwYXRoKSA/IGJhc2VQcm9wZXJ0eSh0b0tleShwYXRoKSkgOiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHByb3BlcnR5O1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIHRvTnVtYmVyID0gcmVxdWlyZSgnLi90b051bWJlcicpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwLFxuICAgIE1BWF9JTlRFR0VSID0gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIGZpbml0ZSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEyLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0Zpbml0ZSgzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9GaW5pdGUoSW5maW5pdHkpO1xuICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiBfLnRvRmluaXRlKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiAwO1xuICB9XG4gIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpO1xuICBpZiAodmFsdWUgPT09IElORklOSVRZIHx8IHZhbHVlID09PSAtSU5GSU5JVFkpIHtcbiAgICB2YXIgc2lnbiA9ICh2YWx1ZSA8IDAgPyAtMSA6IDEpO1xuICAgIHJldHVybiBzaWduICogTUFYX0lOVEVHRVI7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IHZhbHVlIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0Zpbml0ZTtcbiIsInZhciB0b0Zpbml0ZSA9IHJlcXVpcmUoJy4vdG9GaW5pdGUnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGludGVnZXIuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9JbnRlZ2VyYF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvaW50ZWdlcikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0ludGVnZXIoMy4yKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLnRvSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDBcbiAqXG4gKiBfLnRvSW50ZWdlcihJbmZpbml0eSk7XG4gKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICpcbiAqIF8udG9JbnRlZ2VyKCczLjInKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSB0b0Zpbml0ZSh2YWx1ZSksXG4gICAgICByZW1haW5kZXIgPSByZXN1bHQgJSAxO1xuXG4gIHJldHVybiByZXN1bHQgPT09IHJlc3VsdCA/IChyZW1haW5kZXIgPyByZXN1bHQgLSByZW1haW5kZXIgOiByZXN1bHQpIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0ludGVnZXI7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE5BTiA9IDAgLyAwO1xuXG4vKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbSA9IC9eXFxzK3xcXHMrJC9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmFkIHNpZ25lZCBoZXhhZGVjaW1hbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCaW5hcnkgPSAvXjBiWzAxXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG5cbi8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovXG52YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b051bWJlcigzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9OdW1iZXIoSW5maW5pdHkpO1xuICogLy8gPT4gSW5maW5pdHlcbiAqXG4gKiBfLnRvTnVtYmVyKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b051bWJlcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gTkFOO1xuICB9XG4gIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICB2YXIgb3RoZXIgPSB0eXBlb2YgdmFsdWUudmFsdWVPZiA9PSAnZnVuY3Rpb24nID8gdmFsdWUudmFsdWVPZigpIDogdmFsdWU7XG4gICAgdmFsdWUgPSBpc09iamVjdChvdGhlcikgPyAob3RoZXIgKyAnJykgOiBvdGhlcjtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiArdmFsdWU7XG4gIH1cbiAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHJlVHJpbSwgJycpO1xuICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOClcbiAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b051bWJlcjtcbiIsInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwidmFyIGFycmF5RWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5RWFjaCcpLFxuICAgIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgYmFzZUZvck93biA9IHJlcXVpcmUoJy4vX2Jhc2VGb3JPd24nKSxcbiAgICBiYXNlSXRlcmF0ZWUgPSByZXF1aXJlKCcuL19iYXNlSXRlcmF0ZWUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKlxuICogQW4gYWx0ZXJuYXRpdmUgdG8gYF8ucmVkdWNlYDsgdGhpcyBtZXRob2QgdHJhbnNmb3JtcyBgb2JqZWN0YCB0byBhIG5ld1xuICogYGFjY3VtdWxhdG9yYCBvYmplY3Qgd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGVhY2ggb2YgaXRzIG93blxuICogZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyB0aHJ1IGBpdGVyYXRlZWAsIHdpdGggZWFjaCBpbnZvY2F0aW9uXG4gKiBwb3RlbnRpYWxseSBtdXRhdGluZyB0aGUgYGFjY3VtdWxhdG9yYCBvYmplY3QuIElmIGBhY2N1bXVsYXRvcmAgaXMgbm90XG4gKiBwcm92aWRlZCwgYSBuZXcgb2JqZWN0IHdpdGggdGhlIHNhbWUgYFtbUHJvdG90eXBlXV1gIHdpbGwgYmUgdXNlZC4gVGhlXG4gKiBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggZm91ciBhcmd1bWVudHM6IChhY2N1bXVsYXRvciwgdmFsdWUsIGtleSwgb2JqZWN0KS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGN1c3RvbSBhY2N1bXVsYXRvciB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50cmFuc2Zvcm0oWzIsIDMsIDRdLCBmdW5jdGlvbihyZXN1bHQsIG4pIHtcbiAqICAgcmVzdWx0LnB1c2gobiAqPSBuKTtcbiAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gKiB9LCBbXSk7XG4gKiAvLyA9PiBbNCwgOV1cbiAqXG4gKiBfLnRyYW5zZm9ybSh7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfSwgZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gKiAgIChyZXN1bHRbdmFsdWVdIHx8IChyZXN1bHRbdmFsdWVdID0gW10pKS5wdXNoKGtleSk7XG4gKiB9LCB7fSk7XG4gKiAvLyA9PiB7ICcxJzogWydhJywgJ2MnXSwgJzInOiBbJ2InXSB9XG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybShvYmplY3QsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBpc0Fyckxpa2UgPSBpc0FyciB8fCBpc0J1ZmZlcihvYmplY3QpIHx8IGlzVHlwZWRBcnJheShvYmplY3QpO1xuXG4gIGl0ZXJhdGVlID0gYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCA0KTtcbiAgaWYgKGFjY3VtdWxhdG9yID09IG51bGwpIHtcbiAgICB2YXIgQ3RvciA9IG9iamVjdCAmJiBvYmplY3QuY29uc3RydWN0b3I7XG4gICAgaWYgKGlzQXJyTGlrZSkge1xuICAgICAgYWNjdW11bGF0b3IgPSBpc0FyciA/IG5ldyBDdG9yIDogW107XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gaXNGdW5jdGlvbihDdG9yKSA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpIDoge307XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgYWNjdW11bGF0b3IgPSB7fTtcbiAgICB9XG4gIH1cbiAgKGlzQXJyTGlrZSA/IGFycmF5RWFjaCA6IGJhc2VGb3JPd24pKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBvYmplY3QpIHtcbiAgICByZXR1cm4gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgb2JqZWN0KTtcbiAgfSk7XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0cmFuc2Zvcm07XG4iLCJ2YXIgYmFzZVZhbHVlcyA9IHJlcXVpcmUoJy4vX2Jhc2VWYWx1ZXMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnR5IHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy52YWx1ZXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbMSwgMl0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLnZhbHVlcygnaGknKTtcbiAqIC8vID0+IFsnaCcsICdpJ11cbiAqL1xuZnVuY3Rpb24gdmFsdWVzKG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBbXSA6IGJhc2VWYWx1ZXMob2JqZWN0LCBrZXlzKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZhbHVlcztcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgTG9kYXNoV3JhcHBlciA9IHJlcXVpcmUoJy4vX0xvZGFzaFdyYXBwZXInKSxcbiAgICBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpLFxuICAgIHdyYXBwZXJDbG9uZSA9IHJlcXVpcmUoJy4vX3dyYXBwZXJDbG9uZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgbG9kYXNoYCBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgaW1wbGljaXQgbWV0aG9kXG4gKiBjaGFpbiBzZXF1ZW5jZXMuIE1ldGhvZHMgdGhhdCBvcGVyYXRlIG9uIGFuZCByZXR1cm4gYXJyYXlzLCBjb2xsZWN0aW9ucyxcbiAqIGFuZCBmdW5jdGlvbnMgY2FuIGJlIGNoYWluZWQgdG9nZXRoZXIuIE1ldGhvZHMgdGhhdCByZXRyaWV2ZSBhIHNpbmdsZSB2YWx1ZVxuICogb3IgbWF5IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgZW5kIHRoZSBjaGFpbiBzZXF1ZW5jZVxuICogYW5kIHJldHVybiB0aGUgdW53cmFwcGVkIHZhbHVlLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBtdXN0IGJlIHVud3JhcHBlZFxuICogd2l0aCBgXyN2YWx1ZWAuXG4gKlxuICogRXhwbGljaXQgY2hhaW4gc2VxdWVuY2VzLCB3aGljaCBtdXN0IGJlIHVud3JhcHBlZCB3aXRoIGBfI3ZhbHVlYCwgbWF5IGJlXG4gKiBlbmFibGVkIHVzaW5nIGBfLmNoYWluYC5cbiAqXG4gKiBUaGUgZXhlY3V0aW9uIG9mIGNoYWluZWQgbWV0aG9kcyBpcyBsYXp5LCB0aGF0IGlzLCBpdCdzIGRlZmVycmVkIHVudGlsXG4gKiBgXyN2YWx1ZWAgaXMgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGNhbGxlZC5cbiAqXG4gKiBMYXp5IGV2YWx1YXRpb24gYWxsb3dzIHNldmVyYWwgbWV0aG9kcyB0byBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbi5cbiAqIFNob3J0Y3V0IGZ1c2lvbiBpcyBhbiBvcHRpbWl6YXRpb24gdG8gbWVyZ2UgaXRlcmF0ZWUgY2FsbHM7IHRoaXMgYXZvaWRzXG4gKiB0aGUgY3JlYXRpb24gb2YgaW50ZXJtZWRpYXRlIGFycmF5cyBhbmQgY2FuIGdyZWF0bHkgcmVkdWNlIHRoZSBudW1iZXIgb2ZcbiAqIGl0ZXJhdGVlIGV4ZWN1dGlvbnMuIFNlY3Rpb25zIG9mIGEgY2hhaW4gc2VxdWVuY2UgcXVhbGlmeSBmb3Igc2hvcnRjdXRcbiAqIGZ1c2lvbiBpZiB0aGUgc2VjdGlvbiBpcyBhcHBsaWVkIHRvIGFuIGFycmF5IGFuZCBpdGVyYXRlZXMgYWNjZXB0IG9ubHlcbiAqIG9uZSBhcmd1bWVudC4gVGhlIGhldXJpc3RpYyBmb3Igd2hldGhlciBhIHNlY3Rpb24gcXVhbGlmaWVzIGZvciBzaG9ydGN1dFxuICogZnVzaW9uIGlzIHN1YmplY3QgdG8gY2hhbmdlLlxuICpcbiAqIENoYWluaW5nIGlzIHN1cHBvcnRlZCBpbiBjdXN0b20gYnVpbGRzIGFzIGxvbmcgYXMgdGhlIGBfI3ZhbHVlYCBtZXRob2QgaXNcbiAqIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLlxuICpcbiAqIEluIGFkZGl0aW9uIHRvIGxvZGFzaCBtZXRob2RzLCB3cmFwcGVycyBoYXZlIGBBcnJheWAgYW5kIGBTdHJpbmdgIG1ldGhvZHMuXG4gKlxuICogVGhlIHdyYXBwZXIgYEFycmF5YCBtZXRob2RzIGFyZTpcbiAqIGBjb25jYXRgLCBgam9pbmAsIGBwb3BgLCBgcHVzaGAsIGBzaGlmdGAsIGBzb3J0YCwgYHNwbGljZWAsIGFuZCBgdW5zaGlmdGBcbiAqXG4gKiBUaGUgd3JhcHBlciBgU3RyaW5nYCBtZXRob2RzIGFyZTpcbiAqIGByZXBsYWNlYCBhbmQgYHNwbGl0YFxuICpcbiAqIFRoZSB3cmFwcGVyIG1ldGhvZHMgdGhhdCBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbiBhcmU6XG4gKiBgYXRgLCBgY29tcGFjdGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsIGBkcm9wV2hpbGVgLCBgZmlsdGVyYCwgYGZpbmRgLFxuICogYGZpbmRMYXN0YCwgYGhlYWRgLCBgaW5pdGlhbGAsIGBsYXN0YCwgYG1hcGAsIGByZWplY3RgLCBgcmV2ZXJzZWAsIGBzbGljZWAsXG4gKiBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBhbmQgYHRvQXJyYXlgXG4gKlxuICogVGhlIGNoYWluYWJsZSB3cmFwcGVyIG1ldGhvZHMgYXJlOlxuICogYGFmdGVyYCwgYGFyeWAsIGBhc3NpZ25gLCBgYXNzaWduSW5gLCBgYXNzaWduSW5XaXRoYCwgYGFzc2lnbldpdGhgLCBgYXRgLFxuICogYGJlZm9yZWAsIGBiaW5kYCwgYGJpbmRBbGxgLCBgYmluZEtleWAsIGBjYXN0QXJyYXlgLCBgY2hhaW5gLCBgY2h1bmtgLFxuICogYGNvbW1pdGAsIGBjb21wYWN0YCwgYGNvbmNhdGAsIGBjb25mb3Jtc2AsIGBjb25zdGFudGAsIGBjb3VudEJ5YCwgYGNyZWF0ZWAsXG4gKiBgY3VycnlgLCBgZGVib3VuY2VgLCBgZGVmYXVsdHNgLCBgZGVmYXVsdHNEZWVwYCwgYGRlZmVyYCwgYGRlbGF5YCxcbiAqIGBkaWZmZXJlbmNlYCwgYGRpZmZlcmVuY2VCeWAsIGBkaWZmZXJlbmNlV2l0aGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsXG4gKiBgZHJvcFJpZ2h0V2hpbGVgLCBgZHJvcFdoaWxlYCwgYGV4dGVuZGAsIGBleHRlbmRXaXRoYCwgYGZpbGxgLCBgZmlsdGVyYCxcbiAqIGBmbGF0TWFwYCwgYGZsYXRNYXBEZWVwYCwgYGZsYXRNYXBEZXB0aGAsIGBmbGF0dGVuYCwgYGZsYXR0ZW5EZWVwYCxcbiAqIGBmbGF0dGVuRGVwdGhgLCBgZmxpcGAsIGBmbG93YCwgYGZsb3dSaWdodGAsIGBmcm9tUGFpcnNgLCBgZnVuY3Rpb25zYCxcbiAqIGBmdW5jdGlvbnNJbmAsIGBncm91cEJ5YCwgYGluaXRpYWxgLCBgaW50ZXJzZWN0aW9uYCwgYGludGVyc2VjdGlvbkJ5YCxcbiAqIGBpbnRlcnNlY3Rpb25XaXRoYCwgYGludmVydGAsIGBpbnZlcnRCeWAsIGBpbnZva2VNYXBgLCBgaXRlcmF0ZWVgLCBga2V5QnlgLFxuICogYGtleXNgLCBga2V5c0luYCwgYG1hcGAsIGBtYXBLZXlzYCwgYG1hcFZhbHVlc2AsIGBtYXRjaGVzYCwgYG1hdGNoZXNQcm9wZXJ0eWAsXG4gKiBgbWVtb2l6ZWAsIGBtZXJnZWAsIGBtZXJnZVdpdGhgLCBgbWV0aG9kYCwgYG1ldGhvZE9mYCwgYG1peGluYCwgYG5lZ2F0ZWAsXG4gKiBgbnRoQXJnYCwgYG9taXRgLCBgb21pdEJ5YCwgYG9uY2VgLCBgb3JkZXJCeWAsIGBvdmVyYCwgYG92ZXJBcmdzYCxcbiAqIGBvdmVyRXZlcnlgLCBgb3ZlclNvbWVgLCBgcGFydGlhbGAsIGBwYXJ0aWFsUmlnaHRgLCBgcGFydGl0aW9uYCwgYHBpY2tgLFxuICogYHBpY2tCeWAsIGBwbGFudGAsIGBwcm9wZXJ0eWAsIGBwcm9wZXJ0eU9mYCwgYHB1bGxgLCBgcHVsbEFsbGAsIGBwdWxsQWxsQnlgLFxuICogYHB1bGxBbGxXaXRoYCwgYHB1bGxBdGAsIGBwdXNoYCwgYHJhbmdlYCwgYHJhbmdlUmlnaHRgLCBgcmVhcmdgLCBgcmVqZWN0YCxcbiAqIGByZW1vdmVgLCBgcmVzdGAsIGByZXZlcnNlYCwgYHNhbXBsZVNpemVgLCBgc2V0YCwgYHNldFdpdGhgLCBgc2h1ZmZsZWAsXG4gKiBgc2xpY2VgLCBgc29ydGAsIGBzb3J0QnlgLCBgc3BsaWNlYCwgYHNwcmVhZGAsIGB0YWlsYCwgYHRha2VgLCBgdGFrZVJpZ2h0YCxcbiAqIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBgdGFwYCwgYHRocm90dGxlYCwgYHRocnVgLCBgdG9BcnJheWAsXG4gKiBgdG9QYWlyc2AsIGB0b1BhaXJzSW5gLCBgdG9QYXRoYCwgYHRvUGxhaW5PYmplY3RgLCBgdHJhbnNmb3JtYCwgYHVuYXJ5YCxcbiAqIGB1bmlvbmAsIGB1bmlvbkJ5YCwgYHVuaW9uV2l0aGAsIGB1bmlxYCwgYHVuaXFCeWAsIGB1bmlxV2l0aGAsIGB1bnNldGAsXG4gKiBgdW5zaGlmdGAsIGB1bnppcGAsIGB1bnppcFdpdGhgLCBgdXBkYXRlYCwgYHVwZGF0ZVdpdGhgLCBgdmFsdWVzYCxcbiAqIGB2YWx1ZXNJbmAsIGB3aXRob3V0YCwgYHdyYXBgLCBgeG9yYCwgYHhvckJ5YCwgYHhvcldpdGhgLCBgemlwYCxcbiAqIGB6aXBPYmplY3RgLCBgemlwT2JqZWN0RGVlcGAsIGFuZCBgemlwV2l0aGBcbiAqXG4gKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgYXJlICoqbm90KiogY2hhaW5hYmxlIGJ5IGRlZmF1bHQgYXJlOlxuICogYGFkZGAsIGBhdHRlbXB0YCwgYGNhbWVsQ2FzZWAsIGBjYXBpdGFsaXplYCwgYGNlaWxgLCBgY2xhbXBgLCBgY2xvbmVgLFxuICogYGNsb25lRGVlcGAsIGBjbG9uZURlZXBXaXRoYCwgYGNsb25lV2l0aGAsIGBjb25mb3Jtc1RvYCwgYGRlYnVycmAsXG4gKiBgZGVmYXVsdFRvYCwgYGRpdmlkZWAsIGBlYWNoYCwgYGVhY2hSaWdodGAsIGBlbmRzV2l0aGAsIGBlcWAsIGBlc2NhcGVgLFxuICogYGVzY2FwZVJlZ0V4cGAsIGBldmVyeWAsIGBmaW5kYCwgYGZpbmRJbmRleGAsIGBmaW5kS2V5YCwgYGZpbmRMYXN0YCxcbiAqIGBmaW5kTGFzdEluZGV4YCwgYGZpbmRMYXN0S2V5YCwgYGZpcnN0YCwgYGZsb29yYCwgYGZvckVhY2hgLCBgZm9yRWFjaFJpZ2h0YCxcbiAqIGBmb3JJbmAsIGBmb3JJblJpZ2h0YCwgYGZvck93bmAsIGBmb3JPd25SaWdodGAsIGBnZXRgLCBgZ3RgLCBgZ3RlYCwgYGhhc2AsXG4gKiBgaGFzSW5gLCBgaGVhZGAsIGBpZGVudGl0eWAsIGBpbmNsdWRlc2AsIGBpbmRleE9mYCwgYGluUmFuZ2VgLCBgaW52b2tlYCxcbiAqIGBpc0FyZ3VtZW50c2AsIGBpc0FycmF5YCwgYGlzQXJyYXlCdWZmZXJgLCBgaXNBcnJheUxpa2VgLCBgaXNBcnJheUxpa2VPYmplY3RgLFxuICogYGlzQm9vbGVhbmAsIGBpc0J1ZmZlcmAsIGBpc0RhdGVgLCBgaXNFbGVtZW50YCwgYGlzRW1wdHlgLCBgaXNFcXVhbGAsXG4gKiBgaXNFcXVhbFdpdGhgLCBgaXNFcnJvcmAsIGBpc0Zpbml0ZWAsIGBpc0Z1bmN0aW9uYCwgYGlzSW50ZWdlcmAsIGBpc0xlbmd0aGAsXG4gKiBgaXNNYXBgLCBgaXNNYXRjaGAsIGBpc01hdGNoV2l0aGAsIGBpc05hTmAsIGBpc05hdGl2ZWAsIGBpc05pbGAsIGBpc051bGxgLFxuICogYGlzTnVtYmVyYCwgYGlzT2JqZWN0YCwgYGlzT2JqZWN0TGlrZWAsIGBpc1BsYWluT2JqZWN0YCwgYGlzUmVnRXhwYCxcbiAqIGBpc1NhZmVJbnRlZ2VyYCwgYGlzU2V0YCwgYGlzU3RyaW5nYCwgYGlzVW5kZWZpbmVkYCwgYGlzVHlwZWRBcnJheWAsXG4gKiBgaXNXZWFrTWFwYCwgYGlzV2Vha1NldGAsIGBqb2luYCwgYGtlYmFiQ2FzZWAsIGBsYXN0YCwgYGxhc3RJbmRleE9mYCxcbiAqIGBsb3dlckNhc2VgLCBgbG93ZXJGaXJzdGAsIGBsdGAsIGBsdGVgLCBgbWF4YCwgYG1heEJ5YCwgYG1lYW5gLCBgbWVhbkJ5YCxcbiAqIGBtaW5gLCBgbWluQnlgLCBgbXVsdGlwbHlgLCBgbm9Db25mbGljdGAsIGBub29wYCwgYG5vd2AsIGBudGhgLCBgcGFkYCxcbiAqIGBwYWRFbmRgLCBgcGFkU3RhcnRgLCBgcGFyc2VJbnRgLCBgcG9wYCwgYHJhbmRvbWAsIGByZWR1Y2VgLCBgcmVkdWNlUmlnaHRgLFxuICogYHJlcGVhdGAsIGByZXN1bHRgLCBgcm91bmRgLCBgcnVuSW5Db250ZXh0YCwgYHNhbXBsZWAsIGBzaGlmdGAsIGBzaXplYCxcbiAqIGBzbmFrZUNhc2VgLCBgc29tZWAsIGBzb3J0ZWRJbmRleGAsIGBzb3J0ZWRJbmRleEJ5YCwgYHNvcnRlZExhc3RJbmRleGAsXG4gKiBgc29ydGVkTGFzdEluZGV4QnlgLCBgc3RhcnRDYXNlYCwgYHN0YXJ0c1dpdGhgLCBgc3R1YkFycmF5YCwgYHN0dWJGYWxzZWAsXG4gKiBgc3R1Yk9iamVjdGAsIGBzdHViU3RyaW5nYCwgYHN0dWJUcnVlYCwgYHN1YnRyYWN0YCwgYHN1bWAsIGBzdW1CeWAsXG4gKiBgdGVtcGxhdGVgLCBgdGltZXNgLCBgdG9GaW5pdGVgLCBgdG9JbnRlZ2VyYCwgYHRvSlNPTmAsIGB0b0xlbmd0aGAsXG4gKiBgdG9Mb3dlcmAsIGB0b051bWJlcmAsIGB0b1NhZmVJbnRlZ2VyYCwgYHRvU3RyaW5nYCwgYHRvVXBwZXJgLCBgdHJpbWAsXG4gKiBgdHJpbUVuZGAsIGB0cmltU3RhcnRgLCBgdHJ1bmNhdGVgLCBgdW5lc2NhcGVgLCBgdW5pcXVlSWRgLCBgdXBwZXJDYXNlYCxcbiAqIGB1cHBlckZpcnN0YCwgYHZhbHVlYCwgYW5kIGB3b3Jkc2BcbiAqXG4gKiBAbmFtZSBfXG4gKiBAY29uc3RydWN0b3JcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAgaW4gYSBgbG9kYXNoYCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICogICByZXR1cm4gbiAqIG47XG4gKiB9XG4gKlxuICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyLCAzXSk7XG4gKlxuICogLy8gUmV0dXJucyBhbiB1bndyYXBwZWQgdmFsdWUuXG4gKiB3cmFwcGVkLnJlZHVjZShfLmFkZCk7XG4gKiAvLyA9PiA2XG4gKlxuICogLy8gUmV0dXJucyBhIHdyYXBwZWQgdmFsdWUuXG4gKiB2YXIgc3F1YXJlcyA9IHdyYXBwZWQubWFwKHNxdWFyZSk7XG4gKlxuICogXy5pc0FycmF5KHNxdWFyZXMpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoc3F1YXJlcy52YWx1ZSgpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gbG9kYXNoKHZhbHVlKSB7XG4gIGlmIChpc09iamVjdExpa2UodmFsdWUpICYmICFpc0FycmF5KHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTG9kYXNoV3JhcHBlcikge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ19fd3JhcHBlZF9fJykpIHtcbiAgICAgIHJldHVybiB3cmFwcGVyQ2xvbmUodmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodmFsdWUpO1xufVxuXG4vLyBFbnN1cmUgd3JhcHBlcnMgYXJlIGluc3RhbmNlcyBvZiBgYmFzZUxvZGFzaGAuXG5sb2Rhc2gucHJvdG90eXBlID0gYmFzZUxvZGFzaC5wcm90b3R5cGU7XG5sb2Rhc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbG9kYXNoO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxvZGFzaDtcbiIsInZhciBhcnJheUZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5RmlsdGVyJyksXG4gICAgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGJhc2VYb3IgPSByZXF1aXJlKCcuL19iYXNlWG9yJyksXG4gICAgaXNBcnJheUxpa2VPYmplY3QgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlT2JqZWN0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzIHRoYXQgaXMgdGhlXG4gKiBbc3ltbWV0cmljIGRpZmZlcmVuY2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N5bW1ldHJpY19kaWZmZXJlbmNlKVxuICogb2YgdGhlIGdpdmVuIGFycmF5cy4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXJcbiAqIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqIEBzZWUgXy5kaWZmZXJlbmNlLCBfLndpdGhvdXRcbiAqIEBleGFtcGxlXG4gKlxuICogXy54b3IoWzIsIDFdLCBbMiwgM10pO1xuICogLy8gPT4gWzEsIDNdXG4gKi9cbnZhciB4b3IgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgcmV0dXJuIGJhc2VYb3IoYXJyYXlGaWx0ZXIoYXJyYXlzLCBpc0FycmF5TGlrZU9iamVjdCkpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0geG9yO1xuIiwiLyoqXG4gKiBGbGF0dGVuIGFycmF5LCBvbmUgbGV2ZWwgZGVlcC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PD8+fSBhcnJcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTw/Pn1cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbihhcnIpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGFycik7XG59XG5cbnZhciBuYXRpdmVUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgbmF0aXZlSGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuZnVuY3Rpb24gaXNVbmRlZmluZWQob2JqKSB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGlzRGVmaW5lZChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gaXNOaWwob2JqKSB7XG4gIHJldHVybiBvYmogPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7XG4gIHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5mdW5jdGlvbiBpc09iamVjdChvYmopIHtcbiAgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5mdW5jdGlvbiBpc051bWJlcihvYmopIHtcbiAgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXSc7XG59XG5mdW5jdGlvbiBpc0Z1bmN0aW9uKG9iaikge1xuICB2YXIgdGFnID0gbmF0aXZlVG9TdHJpbmcuY2FsbChvYmopO1xuICByZXR1cm4gdGFnID09PSAnW29iamVjdCBGdW5jdGlvbl0nIHx8IHRhZyA9PT0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nIHx8IHRhZyA9PT0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyB8fCB0YWcgPT09ICdbb2JqZWN0IEFzeW5jR2VuZXJhdG9yRnVuY3Rpb25dJyB8fCB0YWcgPT09ICdbb2JqZWN0IFByb3h5XSc7XG59XG5mdW5jdGlvbiBpc1N0cmluZyhvYmopIHtcbiAgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG59XG4vKipcbiAqIEVuc3VyZSBjb2xsZWN0aW9uIGlzIGFuIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5mdW5jdGlvbiBlbnN1cmVBcnJheShvYmopIHtcbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignbXVzdCBzdXBwbHkgYXJyYXknKTtcbn1cbi8qKlxuICogUmV0dXJuIHRydWUsIGlmIHRhcmdldCBvd25zIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4ga2V5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXlcbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGhhcyh0YXJnZXQsIGtleSkge1xuICByZXR1cm4gbmF0aXZlSGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIGtleSk7XG59XG5cbi8qKlxuICogRmluZCBlbGVtZW50IGluIGNvbGxlY3Rpb24uXG4gKlxuICogQHBhcmFtICB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gIHtGdW5jdGlvbnxPYmplY3R9IG1hdGNoZXJcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gZmluZChjb2xsZWN0aW9uLCBtYXRjaGVyKSB7XG4gIG1hdGNoZXIgPSB0b01hdGNoZXIobWF0Y2hlcik7XG4gIHZhciBtYXRjaDtcbiAgZm9yRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbiAodmFsLCBrZXkpIHtcbiAgICBpZiAobWF0Y2hlcih2YWwsIGtleSkpIHtcbiAgICAgIG1hdGNoID0gdmFsO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBtYXRjaDtcbn1cbi8qKlxuICogRmluZCBlbGVtZW50IGluZGV4IGluIGNvbGxlY3Rpb24uXG4gKlxuICogQHBhcmFtICB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gbWF0Y2hlclxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBmaW5kSW5kZXgoY29sbGVjdGlvbiwgbWF0Y2hlcikge1xuICBtYXRjaGVyID0gdG9NYXRjaGVyKG1hdGNoZXIpO1xuICB2YXIgaWR4ID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IC0xIDogdW5kZWZpbmVkO1xuICBmb3JFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uICh2YWwsIGtleSkge1xuICAgIGlmIChtYXRjaGVyKHZhbCwga2V5KSkge1xuICAgICAgaWR4ID0ga2V5O1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpZHg7XG59XG4vKipcbiAqIEZpbmQgZWxlbWVudCBpbiBjb2xsZWN0aW9uLlxuICpcbiAqIEBwYXJhbSAge0FycmF5fE9iamVjdH0gY29sbGVjdGlvblxuICogQHBhcmFtICB7RnVuY3Rpb259IG1hdGNoZXJcbiAqXG4gKiBAcmV0dXJuIHtBcnJheX0gcmVzdWx0XG4gKi9cblxuZnVuY3Rpb24gZmlsdGVyKGNvbGxlY3Rpb24sIG1hdGNoZXIpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3JFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uICh2YWwsIGtleSkge1xuICAgIGlmIChtYXRjaGVyKHZhbCwga2V5KSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgY29sbGVjdGlvbjsgcmV0dXJuaW5nIHNvbWV0aGluZ1xuICogKG5vbi11bmRlZmluZWQpIHdpbGwgc3RvcCBpdGVyYXRpb24uXG4gKlxuICogQHBhcmFtICB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gaXRlcmF0b3JcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJldHVybiByZXN1bHQgdGhhdCBzdG9wcGVkIHRoZSBpdGVyYXRpb25cbiAqL1xuXG5mdW5jdGlvbiBmb3JFYWNoKGNvbGxlY3Rpb24sIGl0ZXJhdG9yKSB7XG4gIHZhciB2YWwsIHJlc3VsdDtcblxuICBpZiAoaXNVbmRlZmluZWQoY29sbGVjdGlvbikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY29udmVydEtleSA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyB0b051bSA6IGlkZW50aXR5O1xuXG4gIGZvciAodmFyIGtleSBpbiBjb2xsZWN0aW9uKSB7XG4gICAgaWYgKGhhcyhjb2xsZWN0aW9uLCBrZXkpKSB7XG4gICAgICB2YWwgPSBjb2xsZWN0aW9uW2tleV07XG4gICAgICByZXN1bHQgPSBpdGVyYXRvcih2YWwsIGNvbnZlcnRLZXkoa2V5KSk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFJldHVybiBjb2xsZWN0aW9uIHdpdGhvdXQgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gIHtBcnJheX0gYXJyXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gbWF0Y2hlclxuICpcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5cbmZ1bmN0aW9uIHdpdGhvdXQoYXJyLCBtYXRjaGVyKSB7XG4gIGlmIChpc1VuZGVmaW5lZChhcnIpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZW5zdXJlQXJyYXkoYXJyKTtcbiAgbWF0Y2hlciA9IHRvTWF0Y2hlcihtYXRjaGVyKTtcbiAgcmV0dXJuIGFyci5maWx0ZXIoZnVuY3Rpb24gKGVsLCBpZHgpIHtcbiAgICByZXR1cm4gIW1hdGNoZXIoZWwsIGlkeCk7XG4gIH0pO1xufVxuLyoqXG4gKiBSZWR1Y2UgY29sbGVjdGlvbiwgcmV0dXJuaW5nIGEgc2luZ2xlIHJlc3VsdC5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R8QXJyYXl9IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBpdGVyYXRvclxuICogQHBhcmFtICB7QW55fSByZXN1bHRcbiAqXG4gKiBAcmV0dXJuIHtBbnl9IHJlc3VsdCByZXR1cm5lZCBmcm9tIGxhc3QgaXRlcmF0b3JcbiAqL1xuXG5mdW5jdGlvbiByZWR1Y2UoY29sbGVjdGlvbiwgaXRlcmF0b3IsIHJlc3VsdCkge1xuICBmb3JFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uICh2YWx1ZSwgaWR4KSB7XG4gICAgcmVzdWx0ID0gaXRlcmF0b3IocmVzdWx0LCB2YWx1ZSwgaWR4KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFJldHVybiB0cnVlIGlmIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIGNvbGxlY3Rpb25cbiAqIG1hdGNoZXMgdGhlIGNyaXRlcmlhLlxuICpcbiAqIEBwYXJhbSAge09iamVjdHxBcnJheX0gY29sbGVjdGlvblxuICogQHBhcmFtICB7RnVuY3Rpb259IG1hdGNoZXJcbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGV2ZXJ5KGNvbGxlY3Rpb24sIG1hdGNoZXIpIHtcbiAgcmV0dXJuICEhcmVkdWNlKGNvbGxlY3Rpb24sIGZ1bmN0aW9uIChtYXRjaGVzLCB2YWwsIGtleSkge1xuICAgIHJldHVybiBtYXRjaGVzICYmIG1hdGNoZXIodmFsLCBrZXkpO1xuICB9LCB0cnVlKTtcbn1cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgc29tZSBlbGVtZW50cyBpbiB0aGUgY29sbGVjdGlvblxuICogbWF0Y2ggdGhlIGNyaXRlcmlhLlxuICpcbiAqIEBwYXJhbSAge09iamVjdHxBcnJheX0gY29sbGVjdGlvblxuICogQHBhcmFtICB7RnVuY3Rpb259IG1hdGNoZXJcbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIHNvbWUoY29sbGVjdGlvbiwgbWF0Y2hlcikge1xuICByZXR1cm4gISFmaW5kKGNvbGxlY3Rpb24sIG1hdGNoZXIpO1xufVxuLyoqXG4gKiBUcmFuc2Zvcm0gYSBjb2xsZWN0aW9uIGludG8gYW5vdGhlciBjb2xsZWN0aW9uXG4gKiBieSBwaXBpbmcgZWFjaCBtZW1iZXIgdGhyb3VnaCB0aGUgZ2l2ZW4gZm4uXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fEFycmF5fSAgIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmblxuICpcbiAqIEByZXR1cm4ge0FycmF5fSB0cmFuc2Zvcm1lZCBjb2xsZWN0aW9uXG4gKi9cblxuZnVuY3Rpb24gbWFwKGNvbGxlY3Rpb24sIGZuKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbiAodmFsLCBrZXkpIHtcbiAgICByZXN1bHQucHVzaChmbih2YWwsIGtleSkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogR2V0IHRoZSBjb2xsZWN0aW9ucyBrZXlzLlxuICpcbiAqIEBwYXJhbSAge09iamVjdHxBcnJheX0gY29sbGVjdGlvblxuICpcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5cbmZ1bmN0aW9uIGtleXMoY29sbGVjdGlvbikge1xuICByZXR1cm4gY29sbGVjdGlvbiAmJiBPYmplY3Qua2V5cyhjb2xsZWN0aW9uKSB8fCBbXTtcbn1cbi8qKlxuICogU2hvcnRoYW5kIGZvciBga2V5cyhvKS5sZW5ndGhgLlxuICpcbiAqIEBwYXJhbSAge09iamVjdHxBcnJheX0gY29sbGVjdGlvblxuICpcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuXG5mdW5jdGlvbiBzaXplKGNvbGxlY3Rpb24pIHtcbiAgcmV0dXJuIGtleXMoY29sbGVjdGlvbikubGVuZ3RoO1xufVxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlcyBpbiB0aGUgY29sbGVjdGlvbi5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R8QXJyYXl9IGNvbGxlY3Rpb25cbiAqXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuXG5mdW5jdGlvbiB2YWx1ZXMoY29sbGVjdGlvbikge1xuICByZXR1cm4gbWFwKGNvbGxlY3Rpb24sIGZ1bmN0aW9uICh2YWwpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9KTtcbn1cbi8qKlxuICogR3JvdXAgY29sbGVjdGlvbiBtZW1iZXJzIGJ5IGF0dHJpYnV0ZS5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R8QXJyYXl9IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBleHRyYWN0b3JcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IG1hcCB3aXRoIHsgYXR0clZhbHVlID0+IFsgYSwgYiwgYyBdIH1cbiAqL1xuXG5mdW5jdGlvbiBncm91cEJ5KGNvbGxlY3Rpb24sIGV4dHJhY3Rvcikge1xuICB2YXIgZ3JvdXBlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gIGV4dHJhY3RvciA9IHRvRXh0cmFjdG9yKGV4dHJhY3Rvcik7XG4gIGZvckVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24gKHZhbCkge1xuICAgIHZhciBkaXNjcmltaW5hdG9yID0gZXh0cmFjdG9yKHZhbCkgfHwgJ18nO1xuICAgIHZhciBncm91cCA9IGdyb3VwZWRbZGlzY3JpbWluYXRvcl07XG5cbiAgICBpZiAoIWdyb3VwKSB7XG4gICAgICBncm91cCA9IGdyb3VwZWRbZGlzY3JpbWluYXRvcl0gPSBbXTtcbiAgICB9XG5cbiAgICBncm91cC5wdXNoKHZhbCk7XG4gIH0pO1xuICByZXR1cm4gZ3JvdXBlZDtcbn1cbmZ1bmN0aW9uIHVuaXF1ZUJ5KGV4dHJhY3Rvcikge1xuICBleHRyYWN0b3IgPSB0b0V4dHJhY3RvcihleHRyYWN0b3IpO1xuICB2YXIgZ3JvdXBlZCA9IHt9O1xuXG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBjb2xsZWN0aW9ucyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgY29sbGVjdGlvbnNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgZm9yRWFjaChjb2xsZWN0aW9ucywgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gZ3JvdXBCeShjLCBleHRyYWN0b3IsIGdyb3VwZWQpO1xuICB9KTtcbiAgdmFyIHJlc3VsdCA9IG1hcChncm91cGVkLCBmdW5jdGlvbiAodmFsLCBrZXkpIHtcbiAgICByZXR1cm4gdmFsWzBdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbnZhciB1bmlvbkJ5ID0gdW5pcXVlQnk7XG4vKipcbiAqIFNvcnQgY29sbGVjdGlvbiBieSBjcml0ZXJpYS5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R8QXJyYXl9IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSAge1N0cmluZ3xGdW5jdGlvbn0gZXh0cmFjdG9yXG4gKlxuICogQHJldHVybiB7QXJyYXl9XG4gKi9cblxuZnVuY3Rpb24gc29ydEJ5KGNvbGxlY3Rpb24sIGV4dHJhY3Rvcikge1xuICBleHRyYWN0b3IgPSB0b0V4dHJhY3RvcihleHRyYWN0b3IpO1xuICB2YXIgc29ydGVkID0gW107XG4gIGZvckVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICB2YXIgZGlzYyA9IGV4dHJhY3Rvcih2YWx1ZSwga2V5KTtcbiAgICB2YXIgZW50cnkgPSB7XG4gICAgICBkOiBkaXNjLFxuICAgICAgdjogdmFsdWVcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgc29ydGVkLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgIHZhciBkID0gc29ydGVkW2lkeF0uZDtcblxuICAgICAgaWYgKGRpc2MgPCBkKSB7XG4gICAgICAgIHNvcnRlZC5zcGxpY2UoaWR4LCAwLCBlbnRyeSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IC8vIG5vdCBpbnNlcnRlZCwgYXBwZW5kICghKVxuXG5cbiAgICBzb3J0ZWQucHVzaChlbnRyeSk7XG4gIH0pO1xuICByZXR1cm4gbWFwKHNvcnRlZCwgZnVuY3Rpb24gKGUpIHtcbiAgICByZXR1cm4gZS52O1xuICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGFuIG9iamVjdCBwYXR0ZXJuIG1hdGNoZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBjb25zdCBtYXRjaGVyID0gbWF0Y2hQYXR0ZXJuKHsgaWQ6IDEgfSk7XG4gKlxuICogdmFyIGVsZW1lbnQgPSBmaW5kKGVsZW1lbnRzLCBtYXRjaGVyKTtcbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IHBhdHRlcm5cbiAqXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gbWF0Y2hlckZuXG4gKi9cblxuZnVuY3Rpb24gbWF0Y2hQYXR0ZXJuKHBhdHRlcm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChlbCkge1xuICAgIHJldHVybiBldmVyeShwYXR0ZXJuLCBmdW5jdGlvbiAodmFsLCBrZXkpIHtcbiAgICAgIHJldHVybiBlbFtrZXldID09PSB2YWw7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRvRXh0cmFjdG9yKGV4dHJhY3Rvcikge1xuICByZXR1cm4gaXNGdW5jdGlvbihleHRyYWN0b3IpID8gZXh0cmFjdG9yIDogZnVuY3Rpb24gKGUpIHtcbiAgICByZXR1cm4gZVtleHRyYWN0b3JdO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0b01hdGNoZXIobWF0Y2hlcikge1xuICByZXR1cm4gaXNGdW5jdGlvbihtYXRjaGVyKSA/IG1hdGNoZXIgOiBmdW5jdGlvbiAoZSkge1xuICAgIHJldHVybiBlID09PSBtYXRjaGVyO1xuICB9O1xufVxuXG5mdW5jdGlvbiBpZGVudGl0eShhcmcpIHtcbiAgcmV0dXJuIGFyZztcbn1cblxuZnVuY3Rpb24gdG9OdW0oYXJnKSB7XG4gIHJldHVybiBOdW1iZXIoYXJnKTtcbn1cblxuLyoqXG4gKiBEZWJvdW5jZSBmbiwgY2FsbGluZyBpdCBvbmx5IG9uY2UgaWZcbiAqIHRoZSBnaXZlbiB0aW1lIGVsYXBzZWQgYmV0d2VlbiBjYWxscy5cbiAqXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSAge051bWJlcn0gdGltZW91dFxuICpcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBkZWJvdW5jZWQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZGVib3VuY2UoZm4sIHRpbWVvdXQpIHtcbiAgdmFyIHRpbWVyO1xuICB2YXIgbGFzdEFyZ3M7XG4gIHZhciBsYXN0VGhpcztcbiAgdmFyIGxhc3ROb3c7XG5cbiAgZnVuY3Rpb24gZmlyZSgpIHtcbiAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgICB2YXIgc2NoZWR1bGVkRGlmZiA9IGxhc3ROb3cgKyB0aW1lb3V0IC0gbm93O1xuXG4gICAgaWYgKHNjaGVkdWxlZERpZmYgPiAwKSB7XG4gICAgICByZXR1cm4gc2NoZWR1bGUoc2NoZWR1bGVkRGlmZik7XG4gICAgfVxuXG4gICAgZm4uYXBwbHkobGFzdFRoaXMsIGxhc3RBcmdzKTtcbiAgICB0aW1lciA9IGxhc3ROb3cgPSBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NoZWR1bGUodGltZW91dCkge1xuICAgIHRpbWVyID0gc2V0VGltZW91dChmaXJlLCB0aW1lb3V0KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgbGFzdE5vdyA9IERhdGUubm93KCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgIGxhc3RUaGlzID0gdGhpczsgLy8gZW5zdXJlIGFuIGV4ZWN1dGlvbiBpcyBzY2hlZHVsZWRcblxuICAgIGlmICghdGltZXIpIHtcbiAgICAgIHNjaGVkdWxlKHRpbWVvdXQpO1xuICAgIH1cbiAgfTtcbn1cbi8qKlxuICogVGhyb3R0bGUgZm4sIGNhbGxpbmcgYXQgbW9zdCBvbmNlXG4gKiBpbiB0aGUgZ2l2ZW4gaW50ZXJ2YWwuXG4gKlxuICogQHBhcmFtICB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IGludGVydmFsXG4gKlxuICogQHJldHVybiB7RnVuY3Rpb259IHRocm90dGxlZCBmdW5jdGlvblxuICovXG5cbmZ1bmN0aW9uIHRocm90dGxlKGZuLCBpbnRlcnZhbCkge1xuICB2YXIgdGhyb3R0bGluZyA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aHJvdHRsaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm4uYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgIHRocm90dGxpbmcgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3R0bGluZyA9IGZhbHNlO1xuICAgIH0sIGludGVydmFsKTtcbiAgfTtcbn1cbi8qKlxuICogQmluZCBmdW5jdGlvbiBhZ2FpbnN0IHRhcmdldCA8dGhpcz4uXG4gKlxuICogQHBhcmFtICB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgdGFyZ2V0XG4gKlxuICogQHJldHVybiB7RnVuY3Rpb259IGJvdW5kIGZ1bmN0aW9uXG4gKi9cblxuZnVuY3Rpb24gYmluZChmbiwgdGFyZ2V0KSB7XG4gIHJldHVybiBmbi5iaW5kKHRhcmdldCk7XG59XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbi8qKlxuICogQ29udmVuaWVuY2Ugd3JhcHBlciBmb3IgYE9iamVjdC5hc3NpZ25gLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBvdGhlcnNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSB0YXJnZXRcbiAqL1xuXG5mdW5jdGlvbiBhc3NpZ24odGFyZ2V0KSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBvdGhlcnMgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIG90aGVyc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodm9pZCAwLCBbdGFyZ2V0XS5jb25jYXQob3RoZXJzKSk7XG59XG4vKipcbiAqIFBpY2sgZ2l2ZW4gcHJvcGVydGllcyBmcm9tIHRoZSB0YXJnZXQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BlcnRpZXNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRhcmdldFxuICovXG5cbmZ1bmN0aW9uIHBpY2sodGFyZ2V0LCBwcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgdmFyIG9iaiA9IE9iamVjdCh0YXJnZXQpO1xuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gb2JqKSB7XG4gICAgICByZXN1bHRbcHJvcF0gPSB0YXJnZXRbcHJvcF07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogUGljayBhbGwgdGFyZ2V0IHByb3BlcnRpZXMsIGV4Y2x1ZGluZyB0aGUgZ2l2ZW4gb25lcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wZXJ0aWVzXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB0YXJnZXRcbiAqL1xuXG5mdW5jdGlvbiBvbWl0KHRhcmdldCwgcHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIHZhciBvYmogPSBPYmplY3QodGFyZ2V0KTtcbiAgZm9yRWFjaChvYmosIGZ1bmN0aW9uIChwcm9wLCBrZXkpIHtcbiAgICBpZiAocHJvcGVydGllcy5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHByb3A7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgbWVyZ2UgYC4uLnNvdXJjZXNgIGludG8gZ2l2ZW4gdGFyZ2V0LlxuICpcbiAqIERvZXMgc3VwcG9ydCBtZXJnaW5nIG9iamVjdHM7IGRvZXMgbm90IHN1cHBvcnQgbWVyZ2luZyBhcnJheXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHBhcmFtIHsuLi5PYmplY3R9IHNvdXJjZXNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSB0YXJnZXRcbiAqL1xuXG5mdW5jdGlvbiBtZXJnZSh0YXJnZXQpIHtcbiAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBzb3VyY2VzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICBzb3VyY2VzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICB9XG5cbiAgaWYgKCFzb3VyY2VzLmxlbmd0aCkge1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBmb3JFYWNoKHNvdXJjZXMsIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAvLyBza2lwIG5vbi1vYmogc291cmNlcywgaS5lLiBudWxsXG4gICAgaWYgKCFzb3VyY2UgfHwgIWlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3JFYWNoKHNvdXJjZSwgZnVuY3Rpb24gKHNvdXJjZVZhbCwga2V5KSB7XG4gICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB0YXJnZXRWYWwgPSB0YXJnZXRba2V5XTtcblxuICAgICAgaWYgKGlzT2JqZWN0KHNvdXJjZVZhbCkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdCh0YXJnZXRWYWwpKSB7XG4gICAgICAgICAgLy8gb3ZlcnJpZGUgdGFyZ2V0W2tleV0gd2l0aCBvYmplY3RcbiAgICAgICAgICB0YXJnZXRWYWwgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldFtrZXldID0gbWVyZ2UodGFyZ2V0VmFsLCBzb3VyY2VWYWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2VWYWw7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5leHBvcnQgeyBmbGF0dGVuLCBmaW5kLCBmaW5kSW5kZXgsIGZpbHRlciwgZm9yRWFjaCwgd2l0aG91dCwgcmVkdWNlLCBldmVyeSwgc29tZSwgbWFwLCBrZXlzLCBzaXplLCB2YWx1ZXMsIGdyb3VwQnksIHVuaXF1ZUJ5LCB1bmlvbkJ5LCBzb3J0QnksIG1hdGNoUGF0dGVybiwgZGVib3VuY2UsIHRocm90dGxlLCBiaW5kLCBpc1VuZGVmaW5lZCwgaXNEZWZpbmVkLCBpc05pbCwgaXNBcnJheSwgaXNPYmplY3QsIGlzTnVtYmVyLCBpc0Z1bmN0aW9uLCBpc1N0cmluZywgZW5zdXJlQXJyYXksIGhhcywgYXNzaWduLCBwaWNrLCBvbWl0LCBtZXJnZSB9O1xuIiwiLyoqXG4gKiBTZXQgYXR0cmlidXRlIGBuYW1lYCB0byBgdmFsYCwgb3IgZ2V0IGF0dHIgYG5hbWVgLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gW3ZhbF1cbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbCkge1xuICAvLyBnZXRcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikge1xuICAgIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIH1cblxuICAvLyByZW1vdmVcbiAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH1cblxuICAvLyBzZXRcbiAgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbCk7XG5cbiAgcmV0dXJuIGVsO1xufVxuXG52YXIgaW5kZXhPZiA9IFtdLmluZGV4T2Y7XG5cbnZhciBpbmRleG9mID0gZnVuY3Rpb24oYXJyLCBvYmope1xuICBpZiAoaW5kZXhPZikgcmV0dXJuIGFyci5pbmRleE9mKG9iaik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGFycltpXSA9PT0gb2JqKSByZXR1cm4gaTtcbiAgfVxuICByZXR1cm4gLTE7XG59O1xuXG4vKipcbiAqIFRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2NvbXBvbmVudC9jbGFzc2VzXG4gKlxuICogV2l0aG91dCB0aGUgY29tcG9uZW50IGJpdHMuXG4gKi9cblxuLyoqXG4gKiBXaGl0ZXNwYWNlIHJlZ2V4cC5cbiAqL1xuXG52YXIgcmUgPSAvXFxzKy87XG5cbi8qKlxuICogdG9TdHJpbmcgcmVmZXJlbmNlLlxuICovXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qKlxuICogV3JhcCBgZWxgIGluIGEgYENsYXNzTGlzdGAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbFxuICogQHJldHVybiB7Q2xhc3NMaXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBjbGFzc2VzKGVsKSB7XG4gIHJldHVybiBuZXcgQ2xhc3NMaXN0KGVsKTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbmV3IENsYXNzTGlzdCBmb3IgYGVsYC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBDbGFzc0xpc3QoZWwpIHtcbiAgaWYgKCFlbCB8fCAhZWwubm9kZVR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgRE9NIGVsZW1lbnQgcmVmZXJlbmNlIGlzIHJlcXVpcmVkJyk7XG4gIH1cbiAgdGhpcy5lbCA9IGVsO1xuICB0aGlzLmxpc3QgPSBlbC5jbGFzc0xpc3Q7XG59XG5cbi8qKlxuICogQWRkIGNsYXNzIGBuYW1lYCBpZiBub3QgYWxyZWFkeSBwcmVzZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJuIHtDbGFzc0xpc3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkNsYXNzTGlzdC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgLy8gY2xhc3NMaXN0XG4gIGlmICh0aGlzLmxpc3QpIHtcbiAgICB0aGlzLmxpc3QuYWRkKG5hbWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZmFsbGJhY2tcbiAgdmFyIGFyciA9IHRoaXMuYXJyYXkoKTtcbiAgdmFyIGkgPSBpbmRleG9mKGFyciwgbmFtZSk7XG4gIGlmICghfmkpIGFyci5wdXNoKG5hbWUpO1xuICB0aGlzLmVsLmNsYXNzTmFtZSA9IGFyci5qb2luKCcgJyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgY2xhc3MgYG5hbWVgIHdoZW4gcHJlc2VudCwgb3JcbiAqIHBhc3MgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gcmVtb3ZlXG4gKiBhbnkgd2hpY2ggbWF0Y2guXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSBuYW1lXG4gKiBAcmV0dXJuIHtDbGFzc0xpc3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkNsYXNzTGlzdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCdbb2JqZWN0IFJlZ0V4cF0nID09IHRvU3RyaW5nLmNhbGwobmFtZSkpIHtcbiAgICByZXR1cm4gdGhpcy5yZW1vdmVNYXRjaGluZyhuYW1lKTtcbiAgfVxuXG4gIC8vIGNsYXNzTGlzdFxuICBpZiAodGhpcy5saXN0KSB7XG4gICAgdGhpcy5saXN0LnJlbW92ZShuYW1lKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGZhbGxiYWNrXG4gIHZhciBhcnIgPSB0aGlzLmFycmF5KCk7XG4gIHZhciBpID0gaW5kZXhvZihhcnIsIG5hbWUpO1xuICBpZiAofmkpIGFyci5zcGxpY2UoaSwgMSk7XG4gIHRoaXMuZWwuY2xhc3NOYW1lID0gYXJyLmpvaW4oJyAnKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgY2xhc3NlcyBtYXRjaGluZyBgcmVgLlxuICpcbiAqIEBwYXJhbSB7UmVnRXhwfSByZVxuICogQHJldHVybiB7Q2xhc3NMaXN0fVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ2xhc3NMaXN0LnByb3RvdHlwZS5yZW1vdmVNYXRjaGluZyA9IGZ1bmN0aW9uIChyZSkge1xuICB2YXIgYXJyID0gdGhpcy5hcnJheSgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChyZS50ZXN0KGFycltpXSkpIHtcbiAgICAgIHRoaXMucmVtb3ZlKGFycltpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBUb2dnbGUgY2xhc3MgYG5hbWVgLCBjYW4gZm9yY2Ugc3RhdGUgdmlhIGBmb3JjZWAuXG4gKlxuICogRm9yIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBjbGFzc0xpc3QsIGJ1dCBkbyBub3Qgc3VwcG9ydCBgZm9yY2VgIHlldCxcbiAqIHRoZSBtaXN0YWtlIHdpbGwgYmUgZGV0ZWN0ZWQgYW5kIGNvcnJlY3RlZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtCb29sZWFufSBmb3JjZVxuICogQHJldHVybiB7Q2xhc3NMaXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5DbGFzc0xpc3QucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChuYW1lLCBmb3JjZSkge1xuICAvLyBjbGFzc0xpc3RcbiAgaWYgKHRoaXMubGlzdCkge1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGZvcmNlKSB7XG4gICAgICBpZiAoZm9yY2UgIT09IHRoaXMubGlzdC50b2dnbGUobmFtZSwgZm9yY2UpKSB7XG4gICAgICAgIHRoaXMubGlzdC50b2dnbGUobmFtZSk7IC8vIHRvZ2dsZSBhZ2FpbiB0byBjb3JyZWN0XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGlzdC50b2dnbGUobmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZmFsbGJhY2tcbiAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgZm9yY2UpIHtcbiAgICBpZiAoIWZvcmNlKSB7XG4gICAgICB0aGlzLnJlbW92ZShuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGQobmFtZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh0aGlzLmhhcyhuYW1lKSkge1xuICAgICAgdGhpcy5yZW1vdmUobmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkKG5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYW4gYXJyYXkgb2YgY2xhc3Nlcy5cbiAqXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ2xhc3NMaXN0LnByb3RvdHlwZS5hcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IHRoaXMuZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnO1xuICB2YXIgc3RyID0gY2xhc3NOYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcbiAgdmFyIGFyciA9IHN0ci5zcGxpdChyZSk7XG4gIGlmICgnJyA9PT0gYXJyWzBdKSBhcnIuc2hpZnQoKTtcbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgY2xhc3MgYG5hbWVgIGlzIHByZXNlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEByZXR1cm4ge0NsYXNzTGlzdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ2xhc3NMaXN0LnByb3RvdHlwZS5oYXMgPSBDbGFzc0xpc3QucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubGlzdCA/IHRoaXMubGlzdC5jb250YWlucyhuYW1lKSA6ICEhfmluZGV4b2YodGhpcy5hcnJheSgpLCBuYW1lKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBjaGlsZHJlbiBmcm9tIHRoZSBnaXZlbiBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBjbGVhcihlbCkge1xuXG4gIHZhciBjO1xuXG4gIHdoaWxlIChlbC5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgIGMgPSBlbC5jaGlsZE5vZGVzWzBdO1xuICAgIGVsLnJlbW92ZUNoaWxkKGMpO1xuICB9XG5cbiAgcmV0dXJuIGVsO1xufVxuXG52YXIgcHJvdG8gPSB0eXBlb2YgRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBFbGVtZW50LnByb3RvdHlwZSA6IHt9O1xudmFyIHZlbmRvciA9IHByb3RvLm1hdGNoZXNcbiAgfHwgcHJvdG8ubWF0Y2hlc1NlbGVjdG9yXG4gIHx8IHByb3RvLndlYmtpdE1hdGNoZXNTZWxlY3RvclxuICB8fCBwcm90by5tb3pNYXRjaGVzU2VsZWN0b3JcbiAgfHwgcHJvdG8ubXNNYXRjaGVzU2VsZWN0b3JcbiAgfHwgcHJvdG8ub01hdGNoZXNTZWxlY3RvcjtcblxudmFyIG1hdGNoZXNTZWxlY3RvciA9IG1hdGNoO1xuXG4vKipcbiAqIE1hdGNoIGBlbGAgdG8gYHNlbGVjdG9yYC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIG1hdGNoKGVsLCBzZWxlY3Rvcikge1xuICBpZiAoIWVsIHx8IGVsLm5vZGVUeXBlICE9PSAxKSByZXR1cm4gZmFsc2U7XG4gIGlmICh2ZW5kb3IpIHJldHVybiB2ZW5kb3IuY2FsbChlbCwgc2VsZWN0b3IpO1xuICB2YXIgbm9kZXMgPSBlbC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG5vZGVzW2ldID09IGVsKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2xvc2VzdFxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvclxuICogQHBhcmFtIHtCb29sZWFufSBjaGVja1lvdXJTZWxmIChvcHRpb25hbClcbiAqL1xuZnVuY3Rpb24gY2xvc2VzdCAoZWxlbWVudCwgc2VsZWN0b3IsIGNoZWNrWW91clNlbGYpIHtcbiAgdmFyIGN1cnJlbnRFbGVtID0gY2hlY2tZb3VyU2VsZiA/IGVsZW1lbnQgOiBlbGVtZW50LnBhcmVudE5vZGU7XG5cbiAgd2hpbGUgKGN1cnJlbnRFbGVtICYmIGN1cnJlbnRFbGVtLm5vZGVUeXBlICE9PSBkb2N1bWVudC5ET0NVTUVOVF9OT0RFICYmIGN1cnJlbnRFbGVtLm5vZGVUeXBlICE9PSBkb2N1bWVudC5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKSB7XG5cbiAgICBpZiAobWF0Y2hlc1NlbGVjdG9yKGN1cnJlbnRFbGVtLCBzZWxlY3RvcikpIHtcbiAgICAgIHJldHVybiBjdXJyZW50RWxlbTtcbiAgICB9XG5cbiAgICBjdXJyZW50RWxlbSA9IGN1cnJlbnRFbGVtLnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlc1NlbGVjdG9yKGN1cnJlbnRFbGVtLCBzZWxlY3RvcikgPyBjdXJyZW50RWxlbSA6IG51bGw7XG59XG5cbnZhciBiaW5kID0gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgPyAnYWRkRXZlbnRMaXN0ZW5lcicgOiAnYXR0YWNoRXZlbnQnLFxuICAgIHVuYmluZCA9IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyID8gJ3JlbW92ZUV2ZW50TGlzdGVuZXInIDogJ2RldGFjaEV2ZW50JyxcbiAgICBwcmVmaXggPSBiaW5kICE9PSAnYWRkRXZlbnRMaXN0ZW5lcicgPyAnb24nIDogJyc7XG5cbi8qKlxuICogQmluZCBgZWxgIGV2ZW50IGB0eXBlYCB0byBgZm5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtCb29sZWFufSBjYXB0dXJlXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxudmFyIGJpbmRfMSA9IGZ1bmN0aW9uKGVsLCB0eXBlLCBmbiwgY2FwdHVyZSl7XG4gIGVsW2JpbmRdKHByZWZpeCArIHR5cGUsIGZuLCBjYXB0dXJlIHx8IGZhbHNlKTtcbiAgcmV0dXJuIGZuO1xufTtcblxuLyoqXG4gKiBVbmJpbmQgYGVsYCBldmVudCBgdHlwZWAncyBjYWxsYmFjayBgZm5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtCb29sZWFufSBjYXB0dXJlXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxudmFyIHVuYmluZF8xID0gZnVuY3Rpb24oZWwsIHR5cGUsIGZuLCBjYXB0dXJlKXtcbiAgZWxbdW5iaW5kXShwcmVmaXggKyB0eXBlLCBmbiwgY2FwdHVyZSB8fCBmYWxzZSk7XG4gIHJldHVybiBmbjtcbn07XG5cbnZhciBjb21wb25lbnRFdmVudCA9IHtcblx0YmluZDogYmluZF8xLFxuXHR1bmJpbmQ6IHVuYmluZF8xXG59O1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxuLyoqXG4gKiBEZWxlZ2F0ZSBldmVudCBgdHlwZWAgdG8gYHNlbGVjdG9yYFxuICogYW5kIGludm9rZSBgZm4oZSlgLiBBIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKiBpcyByZXR1cm5lZCB3aGljaCBtYXkgYmUgcGFzc2VkIHRvIGAudW5iaW5kKClgLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvclxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGNhcHR1cmVcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG4vLyBTb21lIGV2ZW50cyBkb24ndCBidWJibGUsIHNvIHdlIHdhbnQgdG8gYmluZCB0byB0aGUgY2FwdHVyZSBwaGFzZSBpbnN0ZWFkXG4vLyB3aGVuIGRlbGVnYXRpbmcuXG52YXIgZm9yY2VDYXB0dXJlRXZlbnRzID0gWydmb2N1cycsICdibHVyJ107XG5cbmZ1bmN0aW9uIGJpbmQkMShlbCwgc2VsZWN0b3IsIHR5cGUsIGZuLCBjYXB0dXJlKSB7XG4gIGlmIChmb3JjZUNhcHR1cmVFdmVudHMuaW5kZXhPZih0eXBlKSAhPT0gLTEpIHtcbiAgICBjYXB0dXJlID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnRFdmVudC5iaW5kKGVsLCB0eXBlLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7XG4gICAgZS5kZWxlZ2F0ZVRhcmdldCA9IGNsb3Nlc3QodGFyZ2V0LCBzZWxlY3RvciwgdHJ1ZSwgZWwpO1xuICAgIGlmIChlLmRlbGVnYXRlVGFyZ2V0KSB7XG4gICAgICBmbi5jYWxsKGVsLCBlKTtcbiAgICB9XG4gIH0sIGNhcHR1cmUpO1xufVxuXG4vKipcbiAqIFVuYmluZCBldmVudCBgdHlwZWAncyBjYWxsYmFjayBgZm5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtCb29sZWFufSBjYXB0dXJlXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiB1bmJpbmQkMShlbCwgdHlwZSwgZm4sIGNhcHR1cmUpIHtcbiAgaWYgKGZvcmNlQ2FwdHVyZUV2ZW50cy5pbmRleE9mKHR5cGUpICE9PSAtMSkge1xuICAgIGNhcHR1cmUgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBvbmVudEV2ZW50LnVuYmluZChlbCwgdHlwZSwgZm4sIGNhcHR1cmUpO1xufVxuXG52YXIgZGVsZWdhdGUgPSB7XG4gIGJpbmQ6IGJpbmQkMSxcbiAgdW5iaW5kOiB1bmJpbmQkMVxufTtcblxuLyoqXG4gKiBFeHBvc2UgYHBhcnNlYC5cbiAqL1xuXG52YXIgZG9taWZ5ID0gcGFyc2U7XG5cbi8qKlxuICogVGVzdHMgZm9yIGJyb3dzZXIgc3VwcG9ydC5cbiAqL1xuXG52YXIgaW5uZXJIVE1MQnVnID0gZmFsc2U7XG52YXIgYnVnVGVzdERpdjtcbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gIGJ1Z1Rlc3REaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgLy8gU2V0dXBcbiAgYnVnVGVzdERpdi5pbm5lckhUTUwgPSAnICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj1cIi9hXCI+YTwvYT48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIvPic7XG4gIC8vIE1ha2Ugc3VyZSB0aGF0IGxpbmsgZWxlbWVudHMgZ2V0IHNlcmlhbGl6ZWQgY29ycmVjdGx5IGJ5IGlubmVySFRNTFxuICAvLyBUaGlzIHJlcXVpcmVzIGEgd3JhcHBlciBlbGVtZW50IGluIElFXG4gIGlubmVySFRNTEJ1ZyA9ICFidWdUZXN0RGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaW5rJykubGVuZ3RoO1xuICBidWdUZXN0RGl2ID0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFdyYXAgbWFwIGZyb20ganF1ZXJ5LlxuICovXG5cbnZhciBtYXAgPSB7XG4gIGxlZ2VuZDogWzEsICc8ZmllbGRzZXQ+JywgJzwvZmllbGRzZXQ+J10sXG4gIHRyOiBbMiwgJzx0YWJsZT48dGJvZHk+JywgJzwvdGJvZHk+PC90YWJsZT4nXSxcbiAgY29sOiBbMiwgJzx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+JywgJzwvY29sZ3JvdXA+PC90YWJsZT4nXSxcbiAgLy8gZm9yIHNjcmlwdC9saW5rL3N0eWxlIHRhZ3MgdG8gd29yayBpbiBJRTYtOCwgeW91IGhhdmUgdG8gd3JhcFxuICAvLyBpbiBhIGRpdiB3aXRoIGEgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGluIGZyb250LCBoYSFcbiAgX2RlZmF1bHQ6IGlubmVySFRNTEJ1ZyA/IFsxLCAnWDxkaXY+JywgJzwvZGl2PiddIDogWzAsICcnLCAnJ11cbn07XG5cbm1hcC50ZCA9XG5tYXAudGggPSBbMywgJzx0YWJsZT48dGJvZHk+PHRyPicsICc8L3RyPjwvdGJvZHk+PC90YWJsZT4nXTtcblxubWFwLm9wdGlvbiA9XG5tYXAub3B0Z3JvdXAgPSBbMSwgJzxzZWxlY3QgbXVsdGlwbGU9XCJtdWx0aXBsZVwiPicsICc8L3NlbGVjdD4nXTtcblxubWFwLnRoZWFkID1cbm1hcC50Ym9keSA9XG5tYXAuY29sZ3JvdXAgPVxubWFwLmNhcHRpb24gPVxubWFwLnRmb290ID0gWzEsICc8dGFibGU+JywgJzwvdGFibGU+J107XG5cbm1hcC5wb2x5bGluZSA9XG5tYXAuZWxsaXBzZSA9XG5tYXAucG9seWdvbiA9XG5tYXAuY2lyY2xlID1cbm1hcC50ZXh0ID1cbm1hcC5saW5lID1cbm1hcC5wYXRoID1cbm1hcC5yZWN0ID1cbm1hcC5nID0gWzEsICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2ZXJzaW9uPVwiMS4xXCI+JywnPC9zdmc+J107XG5cbi8qKlxuICogUGFyc2UgYGh0bWxgIGFuZCByZXR1cm4gYSBET00gTm9kZSBpbnN0YW5jZSwgd2hpY2ggY291bGQgYmUgYSBUZXh0Tm9kZSxcbiAqIEhUTUwgRE9NIE5vZGUgb2Ygc29tZSBraW5kICg8ZGl2PiBmb3IgZXhhbXBsZSksIG9yIGEgRG9jdW1lbnRGcmFnbWVudFxuICogaW5zdGFuY2UsIGRlcGVuZGluZyBvbiB0aGUgY29udGVudHMgb2YgdGhlIGBodG1sYCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgLSBIVE1MIHN0cmluZyB0byBcImRvbWlmeVwiXG4gKiBAcGFyYW0ge0RvY3VtZW50fSBkb2MgLSBUaGUgYGRvY3VtZW50YCBpbnN0YW5jZSB0byBjcmVhdGUgdGhlIE5vZGUgZm9yXG4gKiBAcmV0dXJuIHtET01Ob2RlfSB0aGUgVGV4dE5vZGUsIERPTSBOb2RlLCBvciBEb2N1bWVudEZyYWdtZW50IGluc3RhbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShodG1sLCBkb2MpIHtcbiAgaWYgKCdzdHJpbmcnICE9IHR5cGVvZiBodG1sKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdHJpbmcgZXhwZWN0ZWQnKTtcblxuICAvLyBkZWZhdWx0IHRvIHRoZSBnbG9iYWwgYGRvY3VtZW50YCBvYmplY3RcbiAgaWYgKCFkb2MpIGRvYyA9IGRvY3VtZW50O1xuXG4gIC8vIHRhZyBuYW1lXG4gIHZhciBtID0gLzwoW1xcdzpdKykvLmV4ZWMoaHRtbCk7XG4gIGlmICghbSkgcmV0dXJuIGRvYy5jcmVhdGVUZXh0Tm9kZShodG1sKTtcblxuICBodG1sID0gaHRtbC5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7IC8vIFJlbW92ZSBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2VcblxuICB2YXIgdGFnID0gbVsxXTtcblxuICAvLyBib2R5IHN1cHBvcnRcbiAgaWYgKHRhZyA9PSAnYm9keScpIHtcbiAgICB2YXIgZWwgPSBkb2MuY3JlYXRlRWxlbWVudCgnaHRtbCcpO1xuICAgIGVsLmlubmVySFRNTCA9IGh0bWw7XG4gICAgcmV0dXJuIGVsLnJlbW92ZUNoaWxkKGVsLmxhc3RDaGlsZCk7XG4gIH1cblxuICAvLyB3cmFwIG1hcFxuICB2YXIgd3JhcCA9IG1hcFt0YWddIHx8IG1hcC5fZGVmYXVsdDtcbiAgdmFyIGRlcHRoID0gd3JhcFswXTtcbiAgdmFyIHByZWZpeCA9IHdyYXBbMV07XG4gIHZhciBzdWZmaXggPSB3cmFwWzJdO1xuICB2YXIgZWwgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGVsLmlubmVySFRNTCA9IHByZWZpeCArIGh0bWwgKyBzdWZmaXg7XG4gIHdoaWxlIChkZXB0aC0tKSBlbCA9IGVsLmxhc3RDaGlsZDtcblxuICAvLyBvbmUgZWxlbWVudFxuICBpZiAoZWwuZmlyc3RDaGlsZCA9PSBlbC5sYXN0Q2hpbGQpIHtcbiAgICByZXR1cm4gZWwucmVtb3ZlQ2hpbGQoZWwuZmlyc3RDaGlsZCk7XG4gIH1cblxuICAvLyBzZXZlcmFsIGVsZW1lbnRzXG4gIHZhciBmcmFnbWVudCA9IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gIHdoaWxlIChlbC5maXJzdENoaWxkKSB7XG4gICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZWwucmVtb3ZlQ2hpbGQoZWwuZmlyc3RDaGlsZCkpO1xuICB9XG5cbiAgcmV0dXJuIGZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiBxdWVyeShzZWxlY3RvciwgZWwpIHtcbiAgZWwgPSBlbCB8fCBkb2N1bWVudDtcblxuICByZXR1cm4gZWwucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG59XG5cbmZ1bmN0aW9uIGFsbChzZWxlY3RvciwgZWwpIHtcbiAgZWwgPSBlbCB8fCBkb2N1bWVudDtcblxuICByZXR1cm4gZWwucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZShlbCkge1xuICBlbC5wYXJlbnROb2RlICYmIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xufVxuXG5leHBvcnQgeyBhdHRyLCBjbGFzc2VzLCBjbGVhciwgY2xvc2VzdCwgZGVsZWdhdGUsIGRvbWlmeSwgY29tcG9uZW50RXZlbnQgYXMgZXZlbnQsIG1hdGNoZXNTZWxlY3RvciBhcyBtYXRjaGVzLCBxdWVyeSwgYWxsIGFzIHF1ZXJ5QWxsLCByZW1vdmUgfTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG4vLyAgICAgIFxuLy8gQW4gZXZlbnQgaGFuZGxlciBjYW4gdGFrZSBhbiBvcHRpb25hbCBldmVudCBhcmd1bWVudFxuLy8gYW5kIHNob3VsZCBub3QgcmV0dXJuIGEgdmFsdWVcbi8vIEFuIGFycmF5IG9mIGFsbCBjdXJyZW50bHkgcmVnaXN0ZXJlZCBldmVudCBoYW5kbGVycyBmb3IgYSB0eXBlXG4vLyBBIG1hcCBvZiBldmVudCB0eXBlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBldmVudCBoYW5kbGVycy5cblxuLyoqIE1pdHQ6IFRpbnkgKH4yMDBiKSBmdW5jdGlvbmFsIGV2ZW50IGVtaXR0ZXIgLyBwdWJzdWIuXG4gKiAgQG5hbWUgbWl0dFxuICogIEByZXR1cm5zIHtNaXR0fVxuICovXG5mdW5jdGlvbiBtaXR0KGFsbCkge1xuICBhbGwgPSBhbGwgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIHtcbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciBhbiBldmVudCBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAge1N0cmluZ30gdHlwZVx0VHlwZSBvZiBldmVudCB0byBsaXN0ZW4gZm9yLCBvciBgXCIqXCJgIGZvciBhbGwgZXZlbnRzXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGhhbmRsZXIgRnVuY3Rpb24gdG8gY2FsbCBpbiByZXNwb25zZSB0byBnaXZlbiBldmVudFxuICAgICAqIEBtZW1iZXJPZiBtaXR0XG4gICAgICovXG4gICAgb246IGZ1bmN0aW9uIG9uKHR5cGUsIGhhbmRsZXIpIHtcbiAgICAgIChhbGxbdHlwZV0gfHwgKGFsbFt0eXBlXSA9IFtdKSkucHVzaChoYW5kbGVyKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBnaXZlbiB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtICB7U3RyaW5nfSB0eXBlXHRUeXBlIG9mIGV2ZW50IHRvIHVucmVnaXN0ZXIgYGhhbmRsZXJgIGZyb20sIG9yIGBcIipcImBcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gaGFuZGxlciBIYW5kbGVyIGZ1bmN0aW9uIHRvIHJlbW92ZVxuICAgICAqIEBtZW1iZXJPZiBtaXR0XG4gICAgICovXG4gICAgb2ZmOiBmdW5jdGlvbiBvZmYodHlwZSwgaGFuZGxlcikge1xuICAgICAgaWYgKGFsbFt0eXBlXSkge1xuICAgICAgICBhbGxbdHlwZV0uc3BsaWNlKGFsbFt0eXBlXS5pbmRleE9mKGhhbmRsZXIpID4+PiAwLCAxKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW52b2tlIGFsbCBoYW5kbGVycyBmb3IgdGhlIGdpdmVuIHR5cGUuXG4gICAgICogSWYgcHJlc2VudCwgYFwiKlwiYCBoYW5kbGVycyBhcmUgaW52b2tlZCBhZnRlciB0eXBlLW1hdGNoZWQgaGFuZGxlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSAgVGhlIGV2ZW50IHR5cGUgdG8gaW52b2tlXG4gICAgICogQHBhcmFtIHtBbnl9IFtldnRdICBBbnkgdmFsdWUgKG9iamVjdCBpcyByZWNvbW1lbmRlZCBhbmQgcG93ZXJmdWwpLCBwYXNzZWQgdG8gZWFjaCBoYW5kbGVyXG4gICAgICogQG1lbWJlck9mIG1pdHRcbiAgICAgKi9cbiAgICBlbWl0OiBmdW5jdGlvbiBlbWl0KHR5cGUsIGV2dCkge1xuICAgICAgKGFsbFt0eXBlXSB8fCBbXSkuc2xpY2UoKS5tYXAoZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgaGFuZGxlcihldnQpO1xuICAgICAgfSk7XG4gICAgICAoYWxsWycqJ10gfHwgW10pLnNsaWNlKCkubWFwKGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICAgIGhhbmRsZXIodHlwZSwgZXZ0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIF9kZWZhdWx0ID0gbWl0dDtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJaUo5IiwiaW1wb3J0IHsgZm9yRWFjaCwgYXNzaWduLCBmaW5kLCBmaWx0ZXIsIGlzU3RyaW5nLCBtYXAgfSBmcm9tICdtaW4tZGFzaCc7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tICdzYXhlbic7XG5pbXBvcnQgeyBjb2VyY2VUeXBlLCBwYXJzZU5hbWVOUywgaXNTaW1wbGVUeXBlLCBNb2RkbGUgfSBmcm9tICdtb2RkbGUnO1xuXG5mdW5jdGlvbiBoYXNMb3dlckNhc2VBbGlhcyhwa2cpIHtcbiAgcmV0dXJuIHBrZy54bWwgJiYgcGtnLnhtbC50YWdBbGlhcyA9PT0gJ2xvd2VyQ2FzZSc7XG59XG5cbnZhciBERUZBVUxUX05TX01BUCA9IHtcbiAgJ3hzaSc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZScsXG4gICd4bWwnOiAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJ1xufTtcblxudmFyIFhTSV9UWVBFID0gJ3hzaTp0eXBlJztcblxuZnVuY3Rpb24gc2VyaWFsaXplRm9ybWF0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQueG1sICYmIGVsZW1lbnQueG1sLnNlcmlhbGl6ZTtcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplQXNUeXBlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHNlcmlhbGl6ZUZvcm1hdChlbGVtZW50KSA9PT0gWFNJX1RZUEU7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZUFzUHJvcGVydHkoZWxlbWVudCkge1xuICByZXR1cm4gc2VyaWFsaXplRm9ybWF0KGVsZW1lbnQpID09PSAncHJvcGVydHknO1xufVxuXG5mdW5jdGlvbiBjYXBpdGFsaXplKHN0cikge1xuICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xufVxuXG5mdW5jdGlvbiBhbGlhc1RvTmFtZShhbGlhc05zLCBwa2cpIHtcblxuICBpZiAoIWhhc0xvd2VyQ2FzZUFsaWFzKHBrZykpIHtcbiAgICByZXR1cm4gYWxpYXNOcy5uYW1lO1xuICB9XG5cbiAgcmV0dXJuIGFsaWFzTnMucHJlZml4ICsgJzonICsgY2FwaXRhbGl6ZShhbGlhc05zLmxvY2FsTmFtZSk7XG59XG5cbmZ1bmN0aW9uIHByZWZpeGVkVG9OYW1lKG5hbWVOcywgcGtnKSB7XG5cbiAgdmFyIG5hbWUgPSBuYW1lTnMubmFtZSxcbiAgICAgIGxvY2FsTmFtZSA9IG5hbWVOcy5sb2NhbE5hbWU7XG5cbiAgdmFyIHR5cGVQcmVmaXggPSBwa2cueG1sICYmIHBrZy54bWwudHlwZVByZWZpeDtcblxuICBpZiAodHlwZVByZWZpeCAmJiBsb2NhbE5hbWUuaW5kZXhPZih0eXBlUHJlZml4KSA9PT0gMCkge1xuICAgIHJldHVybiBuYW1lTnMucHJlZml4ICsgJzonICsgbG9jYWxOYW1lLnNsaWNlKHR5cGVQcmVmaXgubGVuZ3RoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVYc2lUeXBlTmFtZShuYW1lLCBtb2RlbCkge1xuXG4gIHZhciBuYW1lTnMgPSBwYXJzZU5hbWVOUyhuYW1lKTtcbiAgdmFyIHBrZyA9IG1vZGVsLmdldFBhY2thZ2UobmFtZU5zLnByZWZpeCk7XG5cbiAgcmV0dXJuIHByZWZpeGVkVG9OYW1lKG5hbWVOcywgcGtnKTtcbn1cblxuZnVuY3Rpb24gZXJyb3IobWVzc2FnZSkge1xuICByZXR1cm4gbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbW9kZGxlIGRlc2NyaXB0b3IgZm9yIGEgZ2l2ZW4gaW5zdGFuY2Ugb3IgdHlwZS5cbiAqXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fEZ1bmN0aW9ufSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB0aGUgbW9kZGxlIGRlc2NyaXB0b3JcbiAqL1xuZnVuY3Rpb24gZ2V0TW9kZGxlRGVzY3JpcHRvcihlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LiRkZXNjcmlwdG9yO1xufVxuXG5cbi8qKlxuICogQSBwYXJzZSBjb250ZXh0LlxuICpcbiAqIEBjbGFzc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge0VsZW1lbnRIYW5kbGVyfSBvcHRpb25zLnJvb3RIYW5kbGVyIHRoZSByb290IGhhbmRsZXIgZm9yIHBhcnNpbmcgYSBkb2N1bWVudFxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sYXg9ZmFsc2VdIHdoZXRoZXIgb3Igbm90IHRvIGlnbm9yZSBpbnZhbGlkIGVsZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIENvbnRleHQob3B0aW9ucykge1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkge0VsZW1lbnRIYW5kbGVyfSByb290SGFuZGxlclxuICAgKi9cblxuICAvKipcbiAgICogQHByb3BlcnR5IHtCb29sZWFufSBsYXhcbiAgICovXG5cbiAgYXNzaWduKHRoaXMsIG9wdGlvbnMpO1xuXG4gIHRoaXMuZWxlbWVudHNCeUlkID0ge307XG4gIHRoaXMucmVmZXJlbmNlcyA9IFtdO1xuICB0aGlzLndhcm5pbmdzID0gW107XG5cbiAgLyoqXG4gICAqIEFkZCBhbiB1bnJlc29sdmVkIHJlZmVyZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZVxuICAgKi9cbiAgdGhpcy5hZGRSZWZlcmVuY2UgPSBmdW5jdGlvbihyZWZlcmVuY2UpIHtcbiAgICB0aGlzLnJlZmVyZW5jZXMucHVzaChyZWZlcmVuY2UpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYSBwcm9jZXNzZWQgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gICAqL1xuICB0aGlzLmFkZEVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHRocm93IGVycm9yKCdleHBlY3RlZCBlbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnRzQnlJZCA9IHRoaXMuZWxlbWVudHNCeUlkO1xuXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRNb2RkbGVEZXNjcmlwdG9yKGVsZW1lbnQpO1xuXG4gICAgdmFyIGlkUHJvcGVydHkgPSBkZXNjcmlwdG9yLmlkUHJvcGVydHksXG4gICAgICAgIGlkO1xuXG4gICAgaWYgKGlkUHJvcGVydHkpIHtcbiAgICAgIGlkID0gZWxlbWVudC5nZXQoaWRQcm9wZXJ0eS5uYW1lKTtcblxuICAgICAgaWYgKGlkKSB7XG4gICAgICAgIC8vIGZvciBRTmFtZSB2YWxpZGF0aW9uIGFzIHBlciBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLyNOVC1OYW1lQ2hhclxuICAgICAgICBpZiAoIS9eKFthLXpdW1xcdy0uXSo6KT9bYS16X11bXFx3LS5dKiQvaS50ZXN0KGlkKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaWxsZWdhbCBJRCA8JyArIGlkICsgJz4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbGVtZW50c0J5SWRbaWRdKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3IoJ2R1cGxpY2F0ZSBJRCA8JyArIGlkICsgJz4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnRzQnlJZFtpZF0gPSBlbGVtZW50O1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQWRkIGFuIGltcG9ydCB3YXJuaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gd2FybmluZ1xuICAgKiBAcGFyYW0ge1N0cmluZ30gd2FybmluZy5tZXNzYWdlXG4gICAqIEBwYXJhbSB7RXJyb3J9IFt3YXJuaW5nLmVycm9yXVxuICAgKi9cbiAgdGhpcy5hZGRXYXJuaW5nID0gZnVuY3Rpb24od2FybmluZykge1xuICAgIHRoaXMud2FybmluZ3MucHVzaCh3YXJuaW5nKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gQmFzZUhhbmRsZXIoKSB7fVxuXG5CYXNlSGFuZGxlci5wcm90b3R5cGUuaGFuZGxlRW5kID0gZnVuY3Rpb24oKSB7fTtcbkJhc2VIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVUZXh0ID0gZnVuY3Rpb24oKSB7fTtcbkJhc2VIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVOb2RlID0gZnVuY3Rpb24oKSB7fTtcblxuXG4vKipcbiAqIEEgc2ltcGxlIHBhc3MgdGhyb3VnaCBoYW5kbGVyIHRoYXQgZG9lcyBub3RoaW5nIGV4Y2VwdCBmb3JcbiAqIGlnbm9yaW5nIGFsbCBpbnB1dCBpdCByZWNlaXZlcy5cbiAqXG4gKiBUaGlzIGlzIHVzZWQgdG8gaWdub3JlIHVua25vd24gZWxlbWVudHMgYW5kXG4gKiBhdHRyaWJ1dGVzLlxuICovXG5mdW5jdGlvbiBOb29wSGFuZGxlcigpIHsgfVxuXG5Ob29wSGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VIYW5kbGVyLnByb3RvdHlwZSk7XG5cbk5vb3BIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVOb2RlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gQm9keUhhbmRsZXIoKSB7fVxuXG5Cb2R5SGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VIYW5kbGVyLnByb3RvdHlwZSk7XG5cbkJvZHlIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVUZXh0ID0gZnVuY3Rpb24odGV4dCkge1xuICB0aGlzLmJvZHkgPSAodGhpcy5ib2R5IHx8ICcnKSArIHRleHQ7XG59O1xuXG5mdW5jdGlvbiBSZWZlcmVuY2VIYW5kbGVyKHByb3BlcnR5LCBjb250ZXh0KSB7XG4gIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbn1cblxuUmVmZXJlbmNlSGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJvZHlIYW5kbGVyLnByb3RvdHlwZSk7XG5cblJlZmVyZW5jZUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZU5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG5cbiAgaWYgKHRoaXMuZWxlbWVudCkge1xuICAgIHRocm93IGVycm9yKCdleHBlY3RlZCBubyBzdWIgbm9kZXMnKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmVsZW1lbnQgPSB0aGlzLmNyZWF0ZVJlZmVyZW5jZShub2RlKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuUmVmZXJlbmNlSGFuZGxlci5wcm90b3R5cGUuaGFuZGxlRW5kID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZWxlbWVudC5pZCA9IHRoaXMuYm9keTtcbn07XG5cblJlZmVyZW5jZUhhbmRsZXIucHJvdG90eXBlLmNyZWF0ZVJlZmVyZW5jZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgcmV0dXJuIHtcbiAgICBwcm9wZXJ0eTogdGhpcy5wcm9wZXJ0eS5ucy5uYW1lLFxuICAgIGlkOiAnJ1xuICB9O1xufTtcblxuZnVuY3Rpb24gVmFsdWVIYW5kbGVyKHByb3BlcnR5RGVzYywgZWxlbWVudCkge1xuICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICB0aGlzLnByb3BlcnR5RGVzYyA9IHByb3BlcnR5RGVzYztcbn1cblxuVmFsdWVIYW5kbGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQm9keUhhbmRsZXIucHJvdG90eXBlKTtcblxuVmFsdWVIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVFbmQgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgdmFsdWUgPSB0aGlzLmJvZHkgfHwgJycsXG4gICAgICBlbGVtZW50ID0gdGhpcy5lbGVtZW50LFxuICAgICAgcHJvcGVydHlEZXNjID0gdGhpcy5wcm9wZXJ0eURlc2M7XG5cbiAgdmFsdWUgPSBjb2VyY2VUeXBlKHByb3BlcnR5RGVzYy50eXBlLCB2YWx1ZSk7XG5cbiAgaWYgKHByb3BlcnR5RGVzYy5pc01hbnkpIHtcbiAgICBlbGVtZW50LmdldChwcm9wZXJ0eURlc2MubmFtZSkucHVzaCh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5zZXQocHJvcGVydHlEZXNjLm5hbWUsIHZhbHVlKTtcbiAgfVxufTtcblxuXG5mdW5jdGlvbiBCYXNlRWxlbWVudEhhbmRsZXIoKSB7fVxuXG5CYXNlRWxlbWVudEhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCb2R5SGFuZGxlci5wcm90b3R5cGUpO1xuXG5CYXNlRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmhhbmRsZU5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG4gIHZhciBwYXJzZXIgPSB0aGlzLFxuICAgICAgZWxlbWVudCA9IHRoaXMuZWxlbWVudDtcblxuICBpZiAoIWVsZW1lbnQpIHtcbiAgICBlbGVtZW50ID0gdGhpcy5lbGVtZW50ID0gdGhpcy5jcmVhdGVFbGVtZW50KG5vZGUpO1xuXG4gICAgdGhpcy5jb250ZXh0LmFkZEVsZW1lbnQoZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VyID0gdGhpcy5oYW5kbGVDaGlsZChub2RlKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZXI7XG59O1xuXG4vKipcbiAqIEBjbGFzcyBSZWFkZXIuRWxlbWVudEhhbmRsZXJcbiAqXG4gKi9cbmZ1bmN0aW9uIEVsZW1lbnRIYW5kbGVyKG1vZGVsLCB0eXBlTmFtZSwgY29udGV4dCkge1xuICB0aGlzLm1vZGVsID0gbW9kZWw7XG4gIHRoaXMudHlwZSA9IG1vZGVsLmdldFR5cGUodHlwZU5hbWUpO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xufVxuXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VFbGVtZW50SGFuZGxlci5wcm90b3R5cGUpO1xuXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUuYWRkUmVmZXJlbmNlID0gZnVuY3Rpb24ocmVmZXJlbmNlKSB7XG4gIHRoaXMuY29udGV4dC5hZGRSZWZlcmVuY2UocmVmZXJlbmNlKTtcbn07XG5cbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVUZXh0ID0gZnVuY3Rpb24odGV4dCkge1xuXG4gIHZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50LFxuICAgICAgZGVzY3JpcHRvciA9IGdldE1vZGRsZURlc2NyaXB0b3IoZWxlbWVudCksXG4gICAgICBib2R5UHJvcGVydHkgPSBkZXNjcmlwdG9yLmJvZHlQcm9wZXJ0eTtcblxuICBpZiAoIWJvZHlQcm9wZXJ0eSkge1xuICAgIHRocm93IGVycm9yKCd1bmV4cGVjdGVkIGJvZHkgdGV4dCA8JyArIHRleHQgKyAnPicpO1xuICB9XG5cbiAgQm9keUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZVRleHQuY2FsbCh0aGlzLCB0ZXh0KTtcbn07XG5cbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVFbmQgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgdmFsdWUgPSB0aGlzLmJvZHksXG4gICAgICBlbGVtZW50ID0gdGhpcy5lbGVtZW50LFxuICAgICAgZGVzY3JpcHRvciA9IGdldE1vZGRsZURlc2NyaXB0b3IoZWxlbWVudCksXG4gICAgICBib2R5UHJvcGVydHkgPSBkZXNjcmlwdG9yLmJvZHlQcm9wZXJ0eTtcblxuICBpZiAoYm9keVByb3BlcnR5ICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YWx1ZSA9IGNvZXJjZVR5cGUoYm9keVByb3BlcnR5LnR5cGUsIHZhbHVlKTtcbiAgICBlbGVtZW50LnNldChib2R5UHJvcGVydHkubmFtZSwgdmFsdWUpO1xuICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgZnJvbSB0aGUgZ2l2ZW4gbm9kZS5cbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50fSBub2RlIHRoZSB4bWwgbm9kZVxuICovXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdmFyIGF0dHJpYnV0ZXMgPSBub2RlLmF0dHJpYnV0ZXMsXG4gICAgICBUeXBlID0gdGhpcy50eXBlLFxuICAgICAgZGVzY3JpcHRvciA9IGdldE1vZGRsZURlc2NyaXB0b3IoVHlwZSksXG4gICAgICBjb250ZXh0ID0gdGhpcy5jb250ZXh0LFxuICAgICAgaW5zdGFuY2UgPSBuZXcgVHlwZSh7fSksXG4gICAgICBtb2RlbCA9IHRoaXMubW9kZWwsXG4gICAgICBwcm9wTmFtZU5zO1xuXG4gIGZvckVhY2goYXR0cmlidXRlcywgZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcblxuICAgIHZhciBwcm9wID0gZGVzY3JpcHRvci5wcm9wZXJ0aWVzQnlOYW1lW25hbWVdLFxuICAgICAgICB2YWx1ZXM7XG5cbiAgICBpZiAocHJvcCAmJiBwcm9wLmlzUmVmZXJlbmNlKSB7XG5cbiAgICAgIGlmICghcHJvcC5pc01hbnkpIHtcbiAgICAgICAgY29udGV4dC5hZGRSZWZlcmVuY2Uoe1xuICAgICAgICAgIGVsZW1lbnQ6IGluc3RhbmNlLFxuICAgICAgICAgIHByb3BlcnR5OiBwcm9wLm5zLm5hbWUsXG4gICAgICAgICAgaWQ6IHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSURSRUZTOiBwYXJzZSByZWZlcmVuY2VzIGFzIHdoaXRlc3BhY2Utc2VwYXJhdGVkIGxpc3RcbiAgICAgICAgdmFsdWVzID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICBmb3JFYWNoKHZhbHVlcywgZnVuY3Rpb24odikge1xuICAgICAgICAgIGNvbnRleHQuYWRkUmVmZXJlbmNlKHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGluc3RhbmNlLFxuICAgICAgICAgICAgcHJvcGVydHk6IHByb3AubnMubmFtZSxcbiAgICAgICAgICAgIGlkOiB2XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wKSB7XG4gICAgICAgIHZhbHVlID0gY29lcmNlVHlwZShwcm9wLnR5cGUsIHZhbHVlKTtcbiAgICAgIH0gZWxzZVxuICAgICAgaWYgKG5hbWUgIT09ICd4bWxucycpIHtcbiAgICAgICAgcHJvcE5hbWVOcyA9IHBhcnNlTmFtZU5TKG5hbWUsIGRlc2NyaXB0b3IubnMucHJlZml4KTtcblxuICAgICAgICAvLyBjaGVjayB3aGV0aGVyIGF0dHJpYnV0ZSBpcyBkZWZpbmVkIGluIGEgd2VsbC1rbm93biBuYW1lc3BhY2VcbiAgICAgICAgLy8gaWYgdGhhdCBpcyB0aGUgY2FzZSB3ZSBlbWl0IGEgd2FybmluZyB0byBpbmRpY2F0ZSBwb3RlbnRpYWwgbWlzdXNlXG4gICAgICAgIGlmIChtb2RlbC5nZXRQYWNrYWdlKHByb3BOYW1lTnMucHJlZml4KSkge1xuXG4gICAgICAgICAgY29udGV4dC5hZGRXYXJuaW5nKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICd1bmtub3duIGF0dHJpYnV0ZSA8JyArIG5hbWUgKyAnPicsXG4gICAgICAgICAgICBlbGVtZW50OiBpbnN0YW5jZSxcbiAgICAgICAgICAgIHByb3BlcnR5OiBuYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2Uuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn07XG5cbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5nZXRQcm9wZXJ0eUZvck5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG5cbiAgdmFyIG5hbWUgPSBub2RlLm5hbWU7XG4gIHZhciBuYW1lTnMgPSBwYXJzZU5hbWVOUyhuYW1lKTtcblxuICB2YXIgdHlwZSA9IHRoaXMudHlwZSxcbiAgICAgIG1vZGVsID0gdGhpcy5tb2RlbCxcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRNb2RkbGVEZXNjcmlwdG9yKHR5cGUpO1xuXG4gIHZhciBwcm9wZXJ0eU5hbWUgPSBuYW1lTnMubmFtZSxcbiAgICAgIHByb3BlcnR5ID0gZGVzY3JpcHRvci5wcm9wZXJ0aWVzQnlOYW1lW3Byb3BlcnR5TmFtZV0sXG4gICAgICBlbGVtZW50VHlwZU5hbWUsXG4gICAgICBlbGVtZW50VHlwZTtcblxuICAvLyBzZWFyY2ggZm9yIHByb3BlcnRpZXMgYnkgbmFtZSBmaXJzdFxuXG4gIGlmIChwcm9wZXJ0eSAmJiAhcHJvcGVydHkuaXNBdHRyKSB7XG5cbiAgICBpZiAoc2VyaWFsaXplQXNUeXBlKHByb3BlcnR5KSkge1xuICAgICAgZWxlbWVudFR5cGVOYW1lID0gbm9kZS5hdHRyaWJ1dGVzW1hTSV9UWVBFXTtcblxuICAgICAgLy8geHNpIHR5cGUgaXMgb3B0aW9uYWwsIGlmIGl0IGRvZXMgbm90IGV4aXN0cyB0aGVcbiAgICAgIC8vIGRlZmF1bHQgdHlwZSBpcyBhc3N1bWVkXG4gICAgICBpZiAoZWxlbWVudFR5cGVOYW1lKSB7XG5cbiAgICAgICAgLy8gdGFrZSBwb3NzaWJsZSB0eXBlIHByZWZpeGVzIGZyb20gWE1MXG4gICAgICAgIC8vIGludG8gYWNjb3VudCwgaS5lLjogeHNpOnR5cGU9XCJ0e0FjdHVhbFR5cGV9XCJcbiAgICAgICAgZWxlbWVudFR5cGVOYW1lID0gbm9ybWFsaXplWHNpVHlwZU5hbWUoZWxlbWVudFR5cGVOYW1lLCBtb2RlbCk7XG5cbiAgICAgICAgZWxlbWVudFR5cGUgPSBtb2RlbC5nZXRUeXBlKGVsZW1lbnRUeXBlTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIGFzc2lnbih7fSwgcHJvcGVydHksIHtcbiAgICAgICAgICBlZmZlY3RpdmVUeXBlOiBnZXRNb2RkbGVEZXNjcmlwdG9yKGVsZW1lbnRUeXBlKS5uYW1lXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNlYXJjaCBmb3IgcHJvcGVydGllcyBieSBuYW1lIGZpcnN0XG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9XG5cbiAgdmFyIHBrZyA9IG1vZGVsLmdldFBhY2thZ2UobmFtZU5zLnByZWZpeCk7XG5cbiAgaWYgKHBrZykge1xuICAgIGVsZW1lbnRUeXBlTmFtZSA9IGFsaWFzVG9OYW1lKG5hbWVOcywgcGtnKTtcbiAgICBlbGVtZW50VHlwZSA9IG1vZGVsLmdldFR5cGUoZWxlbWVudFR5cGVOYW1lKTtcblxuICAgIC8vIHNlYXJjaCBmb3IgY29sbGVjdGlvbiBtZW1iZXJzIGxhdGVyXG4gICAgcHJvcGVydHkgPSBmaW5kKGRlc2NyaXB0b3IucHJvcGVydGllcywgZnVuY3Rpb24ocCkge1xuICAgICAgcmV0dXJuICFwLmlzVmlydHVhbCAmJiAhcC5pc1JlZmVyZW5jZSAmJiAhcC5pc0F0dHJpYnV0ZSAmJiBlbGVtZW50VHlwZS5oYXNUeXBlKHAudHlwZSk7XG4gICAgfSk7XG5cbiAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBhc3NpZ24oe30sIHByb3BlcnR5LCB7XG4gICAgICAgIGVmZmVjdGl2ZVR5cGU6IGdldE1vZGRsZURlc2NyaXB0b3IoZWxlbWVudFR5cGUpLm5hbWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBwYXJzZSB1bmtub3duIGVsZW1lbnQgKG1heWJlIGV4dGVuc2lvbilcbiAgICBwcm9wZXJ0eSA9IGZpbmQoZGVzY3JpcHRvci5wcm9wZXJ0aWVzLCBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gIXAuaXNSZWZlcmVuY2UgJiYgIXAuaXNBdHRyaWJ1dGUgJiYgcC50eXBlID09PSAnRWxlbWVudCc7XG4gICAgfSk7XG5cbiAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBlcnJvcigndW5yZWNvZ25pemVkIGVsZW1lbnQgPCcgKyBuYW1lTnMubmFtZSArICc+Jyk7XG59O1xuXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICdFbGVtZW50RGVzY3JpcHRvclsnICsgZ2V0TW9kZGxlRGVzY3JpcHRvcih0aGlzLnR5cGUpLm5hbWUgKyAnXSc7XG59O1xuXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUudmFsdWVIYW5kbGVyID0gZnVuY3Rpb24ocHJvcGVydHlEZXNjLCBlbGVtZW50KSB7XG4gIHJldHVybiBuZXcgVmFsdWVIYW5kbGVyKHByb3BlcnR5RGVzYywgZWxlbWVudCk7XG59O1xuXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUucmVmZXJlbmNlSGFuZGxlciA9IGZ1bmN0aW9uKHByb3BlcnR5RGVzYykge1xuICByZXR1cm4gbmV3IFJlZmVyZW5jZUhhbmRsZXIocHJvcGVydHlEZXNjLCB0aGlzLmNvbnRleHQpO1xufTtcblxuRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmhhbmRsZXIgPSBmdW5jdGlvbih0eXBlKSB7XG4gIGlmICh0eXBlID09PSAnRWxlbWVudCcpIHtcbiAgICByZXR1cm4gbmV3IEdlbmVyaWNFbGVtZW50SGFuZGxlcih0aGlzLm1vZGVsLCB0eXBlLCB0aGlzLmNvbnRleHQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgRWxlbWVudEhhbmRsZXIodGhpcy5tb2RlbCwgdHlwZSwgdGhpcy5jb250ZXh0KTtcbiAgfVxufTtcblxuLyoqXG4gKiBIYW5kbGUgdGhlIGNoaWxkIGVsZW1lbnQgcGFyc2luZ1xuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IG5vZGUgdGhlIHhtbCBub2RlXG4gKi9cbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVDaGlsZCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdmFyIHByb3BlcnR5RGVzYywgdHlwZSwgZWxlbWVudCwgY2hpbGRIYW5kbGVyO1xuXG4gIHByb3BlcnR5RGVzYyA9IHRoaXMuZ2V0UHJvcGVydHlGb3JOb2RlKG5vZGUpO1xuICBlbGVtZW50ID0gdGhpcy5lbGVtZW50O1xuXG4gIHR5cGUgPSBwcm9wZXJ0eURlc2MuZWZmZWN0aXZlVHlwZSB8fCBwcm9wZXJ0eURlc2MudHlwZTtcblxuICBpZiAoaXNTaW1wbGVUeXBlKHR5cGUpKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVIYW5kbGVyKHByb3BlcnR5RGVzYywgZWxlbWVudCk7XG4gIH1cblxuICBpZiAocHJvcGVydHlEZXNjLmlzUmVmZXJlbmNlKSB7XG4gICAgY2hpbGRIYW5kbGVyID0gdGhpcy5yZWZlcmVuY2VIYW5kbGVyKHByb3BlcnR5RGVzYykuaGFuZGxlTm9kZShub2RlKTtcbiAgfSBlbHNlIHtcbiAgICBjaGlsZEhhbmRsZXIgPSB0aGlzLmhhbmRsZXIodHlwZSkuaGFuZGxlTm9kZShub2RlKTtcbiAgfVxuXG4gIHZhciBuZXdFbGVtZW50ID0gY2hpbGRIYW5kbGVyLmVsZW1lbnQ7XG5cbiAgLy8gY2hpbGQgaGFuZGxlcyBtYXkgZGVjaWRlIHRvIHNraXAgZWxlbWVudHNcbiAgLy8gYnkgbm90IHJldHVybmluZyBhbnl0aGluZ1xuICBpZiAobmV3RWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG5cbiAgICBpZiAocHJvcGVydHlEZXNjLmlzTWFueSkge1xuICAgICAgZWxlbWVudC5nZXQocHJvcGVydHlEZXNjLm5hbWUpLnB1c2gobmV3RWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc2V0KHByb3BlcnR5RGVzYy5uYW1lLCBuZXdFbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAocHJvcGVydHlEZXNjLmlzUmVmZXJlbmNlKSB7XG4gICAgICBhc3NpZ24obmV3RWxlbWVudCwge1xuICAgICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jb250ZXh0LmFkZFJlZmVyZW5jZShuZXdFbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXN0YWJsaXNoIGNoaWxkIC0+IHBhcmVudCByZWxhdGlvbnNoaXBcbiAgICAgIG5ld0VsZW1lbnQuJHBhcmVudCA9IGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkSGFuZGxlcjtcbn07XG5cbi8qKlxuICogQW4gZWxlbWVudCBoYW5kbGVyIHRoYXQgcGVyZm9ybXMgc3BlY2lhbCB2YWxpZGF0aW9uXG4gKiB0byBlbnN1cmUgdGhlIG5vZGUgaXQgZ2V0cyBpbml0aWFsaXplZCB3aXRoIG1hdGNoZXNcbiAqIHRoZSBoYW5kbGVycyB0eXBlIChuYW1lc3BhY2Ugd2lzZSkuXG4gKlxuICogQHBhcmFtIHtNb2RkbGV9IG1vZGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZU5hbWVcbiAqIEBwYXJhbSB7Q29udGV4dH0gY29udGV4dFxuICovXG5mdW5jdGlvbiBSb290RWxlbWVudEhhbmRsZXIobW9kZWwsIHR5cGVOYW1lLCBjb250ZXh0KSB7XG4gIEVsZW1lbnRIYW5kbGVyLmNhbGwodGhpcywgbW9kZWwsIHR5cGVOYW1lLCBjb250ZXh0KTtcbn1cblxuUm9vdEVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRWxlbWVudEhhbmRsZXIucHJvdG90eXBlKTtcblxuUm9vdEVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuXG4gIHZhciBuYW1lID0gbm9kZS5uYW1lLFxuICAgICAgbmFtZU5zID0gcGFyc2VOYW1lTlMobmFtZSksXG4gICAgICBtb2RlbCA9IHRoaXMubW9kZWwsXG4gICAgICB0eXBlID0gdGhpcy50eXBlLFxuICAgICAgcGtnID0gbW9kZWwuZ2V0UGFja2FnZShuYW1lTnMucHJlZml4KSxcbiAgICAgIHR5cGVOYW1lID0gcGtnICYmIGFsaWFzVG9OYW1lKG5hbWVOcywgcGtnKSB8fCBuYW1lO1xuXG4gIC8vIHZlcmlmeSB0aGUgY29ycmVjdCBuYW1lc3BhY2UgaWYgd2UgcGFyc2VcbiAgLy8gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGhhbmRsZXIgdHJlZVxuICAvL1xuICAvLyB0aGlzIGVuc3VyZXMgd2UgZG9uJ3QgbWlzdGFrZW5seSBpbXBvcnQgd3JvbmcgbmFtZXNwYWNlIGVsZW1lbnRzXG4gIGlmICghdHlwZS5oYXNUeXBlKHR5cGVOYW1lKSkge1xuICAgIHRocm93IGVycm9yKCd1bmV4cGVjdGVkIGVsZW1lbnQgPCcgKyBub2RlLm9yaWdpbmFsTmFtZSArICc+Jyk7XG4gIH1cblxuICByZXR1cm4gRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQuY2FsbCh0aGlzLCBub2RlKTtcbn07XG5cblxuZnVuY3Rpb24gR2VuZXJpY0VsZW1lbnRIYW5kbGVyKG1vZGVsLCB0eXBlTmFtZSwgY29udGV4dCkge1xuICB0aGlzLm1vZGVsID0gbW9kZWw7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkdlbmVyaWNFbGVtZW50SGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VFbGVtZW50SGFuZGxlci5wcm90b3R5cGUpO1xuXG5HZW5lcmljRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG5cbiAgdmFyIG5hbWUgPSBub2RlLm5hbWUsXG4gICAgICBucyA9IHBhcnNlTmFtZU5TKG5hbWUpLFxuICAgICAgcHJlZml4ID0gbnMucHJlZml4LFxuICAgICAgdXJpID0gbm9kZS5uc1twcmVmaXggKyAnJHVyaSddLFxuICAgICAgYXR0cmlidXRlcyA9IG5vZGUuYXR0cmlidXRlcztcblxuICByZXR1cm4gdGhpcy5tb2RlbC5jcmVhdGVBbnkobmFtZSwgdXJpLCBhdHRyaWJ1dGVzKTtcbn07XG5cbkdlbmVyaWNFbGVtZW50SGFuZGxlci5wcm90b3R5cGUuaGFuZGxlQ2hpbGQgPSBmdW5jdGlvbihub2RlKSB7XG5cbiAgdmFyIGhhbmRsZXIgPSBuZXcgR2VuZXJpY0VsZW1lbnRIYW5kbGVyKHRoaXMubW9kZWwsICdFbGVtZW50JywgdGhpcy5jb250ZXh0KS5oYW5kbGVOb2RlKG5vZGUpLFxuICAgICAgZWxlbWVudCA9IHRoaXMuZWxlbWVudDtcblxuICB2YXIgbmV3RWxlbWVudCA9IGhhbmRsZXIuZWxlbWVudCxcbiAgICAgIGNoaWxkcmVuO1xuXG4gIGlmIChuZXdFbGVtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjaGlsZHJlbiA9IGVsZW1lbnQuJGNoaWxkcmVuID0gZWxlbWVudC4kY2hpbGRyZW4gfHwgW107XG4gICAgY2hpbGRyZW4ucHVzaChuZXdFbGVtZW50KTtcblxuICAgIC8vIGVzdGFibGlzaCBjaGlsZCAtPiBwYXJlbnQgcmVsYXRpb25zaGlwXG4gICAgbmV3RWxlbWVudC4kcGFyZW50ID0gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBoYW5kbGVyO1xufTtcblxuR2VuZXJpY0VsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVFbmQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuYm9keSkge1xuICAgIHRoaXMuZWxlbWVudC4kYm9keSA9IHRoaXMuYm9keTtcbiAgfVxufTtcblxuLyoqXG4gKiBBIHJlYWRlciBmb3IgYSBtZXRhLW1vZGVsXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7TW9kZWx9IG9wdGlvbnMubW9kZWwgdXNlZCB0byByZWFkIHhtbCBmaWxlc1xuICogQHBhcmFtIHtCb29sZWFufSBvcHRpb25zLmxheCB3aGV0aGVyIHRvIG1ha2UgcGFyc2UgZXJyb3JzIHdhcm5pbmdzXG4gKi9cbmZ1bmN0aW9uIFJlYWRlcihvcHRpb25zKSB7XG5cbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBNb2RkbGUpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgbW9kZWw6IG9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgYXNzaWduKHRoaXMsIHsgbGF4OiBmYWxzZSB9LCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBUaGUgZnJvbVhNTCByZXN1bHQuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gUGFyc2VSZXN1bHRcbiAqXG4gKiBAcHJvcGVydHkge01vZGRsZUVsZW1lbnR9IHJvb3RFbGVtZW50XG4gKiBAcHJvcGVydHkge0FycmF5PE9iamVjdD59IHJlZmVyZW5jZXNcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RXJyb3I+fSB3YXJuaW5nc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGVsZW1lbnRzQnlJZCAtIGEgbWFwcGluZyBjb250YWluaW5nIGVhY2ggSUQgLT4gTW9kZGxlRWxlbWVudFxuICovXG5cbi8qKlxuICogVGhlIGZyb21YTUwgcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtFcnJvcn0gUGFyc2VFcnJvclxuICpcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RXJyb3I+fSB3YXJuaW5nc1xuICovXG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIFhNTCBpbnRvIGEgbW9kZGxlIGRvY3VtZW50IHRyZWUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHhtbFxuICogQHBhcmFtIHtFbGVtZW50SGFuZGxlcnxPYmplY3R9IG9wdGlvbnMgb3Igcm9vdEhhbmRsZXJcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxQYXJzZVJlc3VsdCwgUGFyc2VFcnJvcj59XG4gKi9cblJlYWRlci5wcm90b3R5cGUuZnJvbVhNTCA9IGZ1bmN0aW9uKHhtbCwgb3B0aW9ucywgZG9uZSkge1xuXG4gIHZhciByb290SGFuZGxlciA9IG9wdGlvbnMucm9vdEhhbmRsZXI7XG5cbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBFbGVtZW50SGFuZGxlcikge1xuICAgIC8vIHJvb3QgaGFuZGxlciBwYXNzZWQgdmlhICh4bWwsIHsgcm9vdEhhbmRsZXI6IEVsZW1lbnRIYW5kbGVyIH0sIC4uLilcbiAgICByb290SGFuZGxlciA9IG9wdGlvbnM7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIHJvb3RIYW5kbGVyIHBhc3NlZCB2aWEgKHhtbCwgJ3NvbWVTdHJpbmcnLCAuLi4pXG4gICAgICByb290SGFuZGxlciA9IHRoaXMuaGFuZGxlcihvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiByb290SGFuZGxlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIHJvb3RIYW5kbGVyIHBhc3NlZCB2aWEgKHhtbCwgeyByb290SGFuZGxlcjogJ3NvbWVTdHJpbmcnIH0sIC4uLilcbiAgICAgIHJvb3RIYW5kbGVyID0gdGhpcy5oYW5kbGVyKHJvb3RIYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbW9kZWwgPSB0aGlzLm1vZGVsLFxuICAgICAgbGF4ID0gdGhpcy5sYXg7XG5cbiAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dChhc3NpZ24oe30sIG9wdGlvbnMsIHsgcm9vdEhhbmRsZXI6IHJvb3RIYW5kbGVyIH0pKSxcbiAgICAgIHBhcnNlciA9IG5ldyBQYXJzZXIoeyBwcm94eTogdHJ1ZSB9KSxcbiAgICAgIHN0YWNrID0gY3JlYXRlU3RhY2soKTtcblxuICByb290SGFuZGxlci5jb250ZXh0ID0gY29udGV4dDtcblxuICAvLyBwdXNoIHJvb3QgaGFuZGxlclxuICBzdGFjay5wdXNoKHJvb3RIYW5kbGVyKTtcblxuXG4gIC8qKlxuICAgKiBIYW5kbGUgZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSAge0Vycm9yfSBlcnJcbiAgICogQHBhcmFtICB7RnVuY3Rpb259IGdldENvbnRleHRcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gbGF4XG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgaGFuZGxlZFxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXJyLCBnZXRDb250ZXh0LCBsYXgpIHtcblxuICAgIHZhciBjdHggPSBnZXRDb250ZXh0KCk7XG5cbiAgICB2YXIgbGluZSA9IGN0eC5saW5lLFxuICAgICAgICBjb2x1bW4gPSBjdHguY29sdW1uLFxuICAgICAgICBkYXRhID0gY3R4LmRhdGE7XG5cbiAgICAvLyB3ZSByZWNlaXZlIHRoZSBmdWxsIGNvbnRleHQgZGF0YSBoZXJlLFxuICAgIC8vIGZvciBlbGVtZW50cyB0cmltIGRvd24gdGhlIGluZm9ybWF0aW9uXG4gICAgLy8gdG8gdGhlIHRhZyBuYW1lLCBvbmx5XG4gICAgaWYgKGRhdGEuY2hhckF0KDApID09PSAnPCcgJiYgZGF0YS5pbmRleE9mKCcgJykgIT09IC0xKSB7XG4gICAgICBkYXRhID0gZGF0YS5zbGljZSgwLCBkYXRhLmluZGV4T2YoJyAnKSkgKyAnPic7XG4gICAgfVxuXG4gICAgdmFyIG1lc3NhZ2UgPVxuICAgICAgJ3VucGFyc2FibGUgY29udGVudCAnICsgKGRhdGEgPyBkYXRhICsgJyAnIDogJycpICsgJ2RldGVjdGVkXFxuXFx0JyArXG4gICAgICAgICdsaW5lOiAnICsgbGluZSArICdcXG5cXHQnICtcbiAgICAgICAgJ2NvbHVtbjogJyArIGNvbHVtbiArICdcXG5cXHQnICtcbiAgICAgICAgJ25lc3RlZCBlcnJvcjogJyArIGVyci5tZXNzYWdlO1xuXG4gICAgaWYgKGxheCkge1xuICAgICAgY29udGV4dC5hZGRXYXJuaW5nKHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVXYXJuaW5nKGVyciwgZ2V0Q29udGV4dCkge1xuICAgIC8vIGp1c3QgbGlrZSBoYW5kbGluZyBlcnJvcnMgaW4gPGxheD10cnVlPiBtb2RlXG4gICAgcmV0dXJuIGhhbmRsZUVycm9yKGVyciwgZ2V0Q29udGV4dCwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBjb2xsZWN0ZWQgcmVmZXJlbmNlcyBvbiBwYXJzZSBlbmQuXG4gICAqL1xuICBmdW5jdGlvbiByZXNvbHZlUmVmZXJlbmNlcygpIHtcblxuICAgIHZhciBlbGVtZW50c0J5SWQgPSBjb250ZXh0LmVsZW1lbnRzQnlJZDtcbiAgICB2YXIgcmVmZXJlbmNlcyA9IGNvbnRleHQucmVmZXJlbmNlcztcblxuICAgIHZhciBpLCByO1xuXG4gICAgZm9yIChpID0gMDsgKHIgPSByZWZlcmVuY2VzW2ldKTsgaSsrKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHIuZWxlbWVudDtcbiAgICAgIHZhciByZWZlcmVuY2UgPSBlbGVtZW50c0J5SWRbci5pZF07XG4gICAgICB2YXIgcHJvcGVydHkgPSBnZXRNb2RkbGVEZXNjcmlwdG9yKGVsZW1lbnQpLnByb3BlcnRpZXNCeU5hbWVbci5wcm9wZXJ0eV07XG5cbiAgICAgIGlmICghcmVmZXJlbmNlKSB7XG4gICAgICAgIGNvbnRleHQuYWRkV2FybmluZyh7XG4gICAgICAgICAgbWVzc2FnZTogJ3VucmVzb2x2ZWQgcmVmZXJlbmNlIDwnICsgci5pZCArICc+JyxcbiAgICAgICAgICBlbGVtZW50OiByLmVsZW1lbnQsXG4gICAgICAgICAgcHJvcGVydHk6IHIucHJvcGVydHksXG4gICAgICAgICAgdmFsdWU6IHIuaWRcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wZXJ0eS5pc01hbnkpIHtcbiAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBlbGVtZW50LmdldChwcm9wZXJ0eS5uYW1lKSxcbiAgICAgICAgICAgIGlkeCA9IGNvbGxlY3Rpb24uaW5kZXhPZihyKTtcblxuICAgICAgICAvLyB3ZSByZXBsYWNlIGFuIGV4aXN0aW5nIHBsYWNlIGhvbGRlciAoaWR4ICE9IC0xKSBvclxuICAgICAgICAvLyBhcHBlbmQgdG8gdGhlIGNvbGxlY3Rpb24gaW5zdGVhZFxuICAgICAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgICAgIGlkeCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZWZlcmVuY2UpIHtcbiAgICAgICAgICAvLyByZW1vdmUgdW5yZXNvbHZhYmxlIHJlZmVyZW5jZVxuICAgICAgICAgIGNvbGxlY3Rpb24uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gYWRkIG9yIHVwZGF0ZSByZWZlcmVuY2UgaW4gY29sbGVjdGlvblxuICAgICAgICAgIGNvbGxlY3Rpb25baWR4XSA9IHJlZmVyZW5jZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zZXQocHJvcGVydHkubmFtZSwgcmVmZXJlbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVDbG9zZSgpIHtcbiAgICBzdGFjay5wb3AoKS5oYW5kbGVFbmQoKTtcbiAgfVxuXG4gIHZhciBQUkVBTUJMRV9TVEFSVF9QQVRURVJOID0gL148XFw/eG1sIC9pO1xuXG4gIHZhciBFTkNPRElOR19QQVRURVJOID0gLyBlbmNvZGluZz1cIihbXlwiXSspXCIvaTtcblxuICB2YXIgVVRGXzhfUEFUVEVSTiA9IC9edXRmLTgkL2k7XG5cbiAgZnVuY3Rpb24gaGFuZGxlUXVlc3Rpb24ocXVlc3Rpb24pIHtcblxuICAgIGlmICghUFJFQU1CTEVfU1RBUlRfUEFUVEVSTi50ZXN0KHF1ZXN0aW9uKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBtYXRjaCA9IEVOQ09ESU5HX1BBVFRFUk4uZXhlYyhxdWVzdGlvbik7XG4gICAgdmFyIGVuY29kaW5nID0gbWF0Y2ggJiYgbWF0Y2hbMV07XG5cbiAgICBpZiAoIWVuY29kaW5nIHx8IFVURl84X1BBVFRFUk4udGVzdChlbmNvZGluZykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmFkZFdhcm5pbmcoe1xuICAgICAgbWVzc2FnZTpcbiAgICAgICAgJ3Vuc3VwcG9ydGVkIGRvY3VtZW50IGVuY29kaW5nIDwnICsgZW5jb2RpbmcgKyAnPiwgJyArXG4gICAgICAgICdmYWxsaW5nIGJhY2sgdG8gVVRGLTgnXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVPcGVuKG5vZGUsIGdldENvbnRleHQpIHtcbiAgICB2YXIgaGFuZGxlciA9IHN0YWNrLnBlZWsoKTtcblxuICAgIHRyeSB7XG4gICAgICBzdGFjay5wdXNoKGhhbmRsZXIuaGFuZGxlTm9kZShub2RlKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG5cbiAgICAgIGlmIChoYW5kbGVFcnJvcihlcnIsIGdldENvbnRleHQsIGxheCkpIHtcbiAgICAgICAgc3RhY2sucHVzaChuZXcgTm9vcEhhbmRsZXIoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ0RhdGEodGV4dCwgZ2V0Q29udGV4dCkge1xuXG4gICAgdHJ5IHtcbiAgICAgIHN0YWNrLnBlZWsoKS5oYW5kbGVUZXh0KHRleHQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaGFuZGxlV2FybmluZyhlcnIsIGdldENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVRleHQodGV4dCwgZ2V0Q29udGV4dCkge1xuICAgIC8vIHN0cmlwIHdoaXRlc3BhY2Ugb25seSBub2RlcywgaS5lLiBiZWZvcmVcbiAgICAvLyA8IUNEQVRBWyAuLi4gXT4gc2VjdGlvbnMgYW5kIGluIGJldHdlZW4gdGFnc1xuICAgIHRleHQgPSB0ZXh0LnRyaW0oKTtcblxuICAgIGlmICghdGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGhhbmRsZUNEYXRhKHRleHQsIGdldENvbnRleHQpO1xuICB9XG5cbiAgdmFyIHVyaU1hcCA9IG1vZGVsLmdldFBhY2thZ2VzKCkucmVkdWNlKGZ1bmN0aW9uKHVyaU1hcCwgcCkge1xuICAgIHVyaU1hcFtwLnVyaV0gPSBwLnByZWZpeDtcblxuICAgIHJldHVybiB1cmlNYXA7XG4gIH0sIHtcbiAgICAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJzogJ3htbCcgLy8gYWRkIGRlZmF1bHQgeG1sIG5zXG4gIH0pO1xuICBwYXJzZXJcbiAgICAubnModXJpTWFwKVxuICAgIC5vbignb3BlblRhZycsIGZ1bmN0aW9uKG9iaiwgZGVjb2RlU3RyLCBzZWxmQ2xvc2luZywgZ2V0Q29udGV4dCkge1xuXG4gICAgICAvLyBncmFjZWZ1bGx5IGhhbmRsZSB1bnBhcnNhYmxlIGF0dHJpYnV0ZXMgKGF0dHJzPWZhbHNlKVxuICAgICAgdmFyIGF0dHJzID0gb2JqLmF0dHJzIHx8IHt9O1xuXG4gICAgICB2YXIgZGVjb2RlZEF0dHJzID0gT2JqZWN0LmtleXMoYXR0cnMpLnJlZHVjZShmdW5jdGlvbihkLCBrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gZGVjb2RlU3RyKGF0dHJzW2tleV0pO1xuXG4gICAgICAgIGRba2V5XSA9IHZhbHVlO1xuXG4gICAgICAgIHJldHVybiBkO1xuICAgICAgfSwge30pO1xuXG4gICAgICB2YXIgbm9kZSA9IHtcbiAgICAgICAgbmFtZTogb2JqLm5hbWUsXG4gICAgICAgIG9yaWdpbmFsTmFtZTogb2JqLm9yaWdpbmFsTmFtZSxcbiAgICAgICAgYXR0cmlidXRlczogZGVjb2RlZEF0dHJzLFxuICAgICAgICBuczogb2JqLm5zXG4gICAgICB9O1xuXG4gICAgICBoYW5kbGVPcGVuKG5vZGUsIGdldENvbnRleHQpO1xuICAgIH0pXG4gICAgLm9uKCdxdWVzdGlvbicsIGhhbmRsZVF1ZXN0aW9uKVxuICAgIC5vbignY2xvc2VUYWcnLCBoYW5kbGVDbG9zZSlcbiAgICAub24oJ2NkYXRhJywgaGFuZGxlQ0RhdGEpXG4gICAgLm9uKCd0ZXh0JywgZnVuY3Rpb24odGV4dCwgZGVjb2RlRW50aXRpZXMsIGdldENvbnRleHQpIHtcbiAgICAgIGhhbmRsZVRleHQoZGVjb2RlRW50aXRpZXModGV4dCksIGdldENvbnRleHQpO1xuICAgIH0pXG4gICAgLm9uKCdlcnJvcicsIGhhbmRsZUVycm9yKVxuICAgIC5vbignd2FybicsIGhhbmRsZVdhcm5pbmcpO1xuXG4gIC8vIGFzeW5jIFhNTCBwYXJzaW5nIHRvIG1ha2Ugc3VyZSB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50XG4gIC8vIChub2RlIG9yIGJyb3dlcikgaXMga2VwdCByZXNwb25zaXZlIGFuZCB0aGF0IGNlcnRhaW4gb3B0aW1pemF0aW9uXG4gIC8vIHN0cmF0ZWdpZXMgY2FuIGtpY2sgaW4uXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblxuICAgIHZhciBlcnI7XG5cbiAgICB0cnkge1xuICAgICAgcGFyc2VyLnBhcnNlKHhtbCk7XG5cbiAgICAgIHJlc29sdmVSZWZlcmVuY2VzKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyID0gZTtcbiAgICB9XG5cbiAgICB2YXIgcm9vdEVsZW1lbnQgPSByb290SGFuZGxlci5lbGVtZW50O1xuXG4gICAgaWYgKCFlcnIgJiYgIXJvb3RFbGVtZW50KSB7XG4gICAgICBlcnIgPSBlcnJvcignZmFpbGVkIHRvIHBhcnNlIGRvY3VtZW50IGFzIDwnICsgcm9vdEhhbmRsZXIudHlwZS4kZGVzY3JpcHRvci5uYW1lICsgJz4nKTtcbiAgICB9XG5cbiAgICB2YXIgd2FybmluZ3MgPSBjb250ZXh0Lndhcm5pbmdzO1xuICAgIHZhciByZWZlcmVuY2VzID0gY29udGV4dC5yZWZlcmVuY2VzO1xuICAgIHZhciBlbGVtZW50c0J5SWQgPSBjb250ZXh0LmVsZW1lbnRzQnlJZDtcblxuICAgIGlmIChlcnIpIHtcbiAgICAgIGVyci53YXJuaW5ncyA9IHdhcm5pbmdzO1xuXG4gICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXNvbHZlKHtcbiAgICAgICAgcm9vdEVsZW1lbnQ6IHJvb3RFbGVtZW50LFxuICAgICAgICBlbGVtZW50c0J5SWQ6IGVsZW1lbnRzQnlJZCxcbiAgICAgICAgcmVmZXJlbmNlczogcmVmZXJlbmNlcyxcbiAgICAgICAgd2FybmluZ3M6IHdhcm5pbmdzXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufTtcblxuUmVhZGVyLnByb3RvdHlwZS5oYW5kbGVyID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gbmV3IFJvb3RFbGVtZW50SGFuZGxlcih0aGlzLm1vZGVsLCBuYW1lKTtcbn07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBjcmVhdGVTdGFjaygpIHtcbiAgdmFyIHN0YWNrID0gW107XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN0YWNrLCAncGVlaycsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpc1t0aGlzLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHN0YWNrO1xufVxuXG52YXIgWE1MX1BSRUFNQkxFID0gJzw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/Plxcbic7XG5cbnZhciBFU0NBUEVfQVRUUl9DSEFSUyA9IC88fD58J3xcInwmfFxcblxccnxcXG4vZztcbnZhciBFU0NBUEVfQ0hBUlMgPSAvPHw+fCYvZztcblxuXG5mdW5jdGlvbiBOYW1lc3BhY2VzKHBhcmVudCkge1xuXG4gIHZhciBwcmVmaXhNYXAgPSB7fTtcbiAgdmFyIHVyaU1hcCA9IHt9O1xuICB2YXIgdXNlZCA9IHt9O1xuXG4gIHZhciB3ZWxsa25vd24gPSBbXTtcbiAgdmFyIGN1c3RvbSA9IFtdO1xuXG4gIC8vIEFQSVxuXG4gIHRoaXMuYnlVcmkgPSBmdW5jdGlvbih1cmkpIHtcbiAgICByZXR1cm4gdXJpTWFwW3VyaV0gfHwgKFxuICAgICAgcGFyZW50ICYmIHBhcmVudC5ieVVyaSh1cmkpXG4gICAgKTtcbiAgfTtcblxuICB0aGlzLmFkZCA9IGZ1bmN0aW9uKG5zLCBpc1dlbGxrbm93bikge1xuXG4gICAgdXJpTWFwW25zLnVyaV0gPSBucztcblxuICAgIGlmIChpc1dlbGxrbm93bikge1xuICAgICAgd2VsbGtub3duLnB1c2gobnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXN0b20ucHVzaChucyk7XG4gICAgfVxuXG4gICAgdGhpcy5tYXBQcmVmaXgobnMucHJlZml4LCBucy51cmkpO1xuICB9O1xuXG4gIHRoaXMudXJpQnlQcmVmaXggPSBmdW5jdGlvbihwcmVmaXgpIHtcbiAgICByZXR1cm4gcHJlZml4TWFwW3ByZWZpeCB8fCAneG1sbnMnXTtcbiAgfTtcblxuICB0aGlzLm1hcFByZWZpeCA9IGZ1bmN0aW9uKHByZWZpeCwgdXJpKSB7XG4gICAgcHJlZml4TWFwW3ByZWZpeCB8fCAneG1sbnMnXSA9IHVyaTtcbiAgfTtcblxuICB0aGlzLmdldE5TS2V5ID0gZnVuY3Rpb24obnMpIHtcbiAgICByZXR1cm4gKG5zLnByZWZpeCAhPT0gdW5kZWZpbmVkKSA/IChucy51cmkgKyAnfCcgKyBucy5wcmVmaXgpIDogbnMudXJpO1xuICB9O1xuXG4gIHRoaXMubG9nVXNlZCA9IGZ1bmN0aW9uKG5zKSB7XG5cbiAgICB2YXIgdXJpID0gbnMudXJpO1xuICAgIHZhciBuc0tleSA9IHRoaXMuZ2V0TlNLZXkobnMpO1xuXG4gICAgdXNlZFtuc0tleV0gPSB0aGlzLmJ5VXJpKHVyaSk7XG5cbiAgICAvLyBJbmZvcm0gcGFyZW50IHJlY3Vyc2l2ZWx5IGFib3V0IHRoZSB1c2FnZSBvZiB0aGlzIE5TXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgcGFyZW50LmxvZ1VzZWQobnMpO1xuICAgIH1cbiAgfTtcblxuICB0aGlzLmdldFVzZWQgPSBmdW5jdGlvbihucykge1xuXG4gICAgZnVuY3Rpb24gaXNVc2VkKG5zKSB7XG4gICAgICB2YXIgbnNLZXkgPSBzZWxmLmdldE5TS2V5KG5zKTtcblxuICAgICAgcmV0dXJuIHVzZWRbbnNLZXldO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBhbGxOcyA9IFtdLmNvbmNhdCh3ZWxsa25vd24sIGN1c3RvbSk7XG5cbiAgICByZXR1cm4gYWxsTnMuZmlsdGVyKGlzVXNlZCk7XG4gIH07XG5cbn1cblxuZnVuY3Rpb24gbG93ZXIoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59XG5cbmZ1bmN0aW9uIG5hbWVUb0FsaWFzKG5hbWUsIHBrZykge1xuICBpZiAoaGFzTG93ZXJDYXNlQWxpYXMocGtnKSkge1xuICAgIHJldHVybiBsb3dlcihuYW1lKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3I7XG4gIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG5zTmFtZShucykge1xuICBpZiAoaXNTdHJpbmcobnMpKSB7XG4gICAgcmV0dXJuIG5zO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAobnMucHJlZml4ID8gbnMucHJlZml4ICsgJzonIDogJycpICsgbnMubG9jYWxOYW1lO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldE5zQXR0cnMobmFtZXNwYWNlcykge1xuXG4gIHJldHVybiBtYXAobmFtZXNwYWNlcy5nZXRVc2VkKCksIGZ1bmN0aW9uKG5zKSB7XG4gICAgdmFyIG5hbWUgPSAneG1sbnMnICsgKG5zLnByZWZpeCA/ICc6JyArIG5zLnByZWZpeCA6ICcnKTtcbiAgICByZXR1cm4geyBuYW1lOiBuYW1lLCB2YWx1ZTogbnMudXJpIH07XG4gIH0pO1xuXG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnROcyhucywgZGVzY3JpcHRvcikge1xuICBpZiAoZGVzY3JpcHRvci5pc0dlbmVyaWMpIHtcbiAgICByZXR1cm4gYXNzaWduKHsgbG9jYWxOYW1lOiBkZXNjcmlwdG9yLm5zLmxvY2FsTmFtZSB9LCBucyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGFzc2lnbih7IGxvY2FsTmFtZTogbmFtZVRvQWxpYXMoZGVzY3JpcHRvci5ucy5sb2NhbE5hbWUsIGRlc2NyaXB0b3IuJHBrZykgfSwgbnMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5TnMobnMsIGRlc2NyaXB0b3IpIHtcbiAgcmV0dXJuIGFzc2lnbih7IGxvY2FsTmFtZTogZGVzY3JpcHRvci5ucy5sb2NhbE5hbWUgfSwgbnMpO1xufVxuXG5mdW5jdGlvbiBnZXRTZXJpYWxpemFibGVQcm9wZXJ0aWVzKGVsZW1lbnQpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBlbGVtZW50LiRkZXNjcmlwdG9yO1xuXG4gIHJldHVybiBmaWx0ZXIoZGVzY3JpcHRvci5wcm9wZXJ0aWVzLCBmdW5jdGlvbihwKSB7XG4gICAgdmFyIG5hbWUgPSBwLm5hbWU7XG5cbiAgICBpZiAocC5pc1ZpcnR1YWwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBkbyBub3Qgc2VyaWFsaXplIGRlZmF1bHRzXG4gICAgaWYgKCFlbGVtZW50Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlID0gZWxlbWVudFtuYW1lXTtcblxuICAgIC8vIGRvIG5vdCBzZXJpYWxpemUgZGVmYXVsdCBlcXVhbHNcbiAgICBpZiAodmFsdWUgPT09IHAuZGVmYXVsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGRvIG5vdCBzZXJpYWxpemUgbnVsbCBwcm9wZXJ0aWVzXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHAuaXNNYW55ID8gdmFsdWUubGVuZ3RoIDogdHJ1ZTtcbiAgfSk7XG59XG5cbnZhciBFU0NBUEVfQVRUUl9NQVAgPSB7XG4gICdcXG4nOiAnIzEwJyxcbiAgJ1xcblxccic6ICcjMTAnLFxuICAnXCInOiAnIzM0JyxcbiAgJ1xcJyc6ICcjMzknLFxuICAnPCc6ICcjNjAnLFxuICAnPic6ICcjNjInLFxuICAnJic6ICcjMzgnXG59O1xuXG52YXIgRVNDQVBFX01BUCA9IHtcbiAgJzwnOiAnbHQnLFxuICAnPic6ICdndCcsXG4gICcmJzogJ2FtcCdcbn07XG5cbmZ1bmN0aW9uIGVzY2FwZShzdHIsIGNoYXJQYXR0ZXJuLCByZXBsYWNlTWFwKSB7XG5cbiAgLy8gZW5zdXJlIHdlIGFyZSBoYW5kbGluZyBzdHJpbmdzIGhlcmVcbiAgc3RyID0gaXNTdHJpbmcoc3RyKSA/IHN0ciA6ICcnICsgc3RyO1xuXG4gIHJldHVybiBzdHIucmVwbGFjZShjaGFyUGF0dGVybiwgZnVuY3Rpb24ocykge1xuICAgIHJldHVybiAnJicgKyByZXBsYWNlTWFwW3NdICsgJzsnO1xuICB9KTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgYSBzdHJpbmcgYXR0cmlidXRlIHRvIG5vdCBjb250YWluIGFueSBiYWQgdmFsdWVzIChsaW5lIGJyZWFrcywgJ1wiJywgLi4uKVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgdGhlIHN0cmluZyB0byBlc2NhcGVcbiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIGVzY2FwZWQgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZUF0dHIoc3RyKSB7XG4gIHJldHVybiBlc2NhcGUoc3RyLCBFU0NBUEVfQVRUUl9DSEFSUywgRVNDQVBFX0FUVFJfTUFQKTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlQm9keShzdHIpIHtcbiAgcmV0dXJuIGVzY2FwZShzdHIsIEVTQ0FQRV9DSEFSUywgRVNDQVBFX01BUCk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlckF0dHJpYnV0ZXMocHJvcHMpIHtcbiAgcmV0dXJuIGZpbHRlcihwcm9wcywgZnVuY3Rpb24ocCkgeyByZXR1cm4gcC5pc0F0dHI7IH0pO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJDb250YWluZWQocHJvcHMpIHtcbiAgcmV0dXJuIGZpbHRlcihwcm9wcywgZnVuY3Rpb24ocCkgeyByZXR1cm4gIXAuaXNBdHRyOyB9KTtcbn1cblxuXG5mdW5jdGlvbiBSZWZlcmVuY2VTZXJpYWxpemVyKHRhZ05hbWUpIHtcbiAgdGhpcy50YWdOYW1lID0gdGFnTmFtZTtcbn1cblxuUmVmZXJlbmNlU2VyaWFsaXplci5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gIHJldHVybiB0aGlzO1xufTtcblxuUmVmZXJlbmNlU2VyaWFsaXplci5wcm90b3R5cGUuc2VyaWFsaXplVG8gPSBmdW5jdGlvbih3cml0ZXIpIHtcbiAgd3JpdGVyXG4gICAgLmFwcGVuZEluZGVudCgpXG4gICAgLmFwcGVuZCgnPCcgKyB0aGlzLnRhZ05hbWUgKyAnPicgKyB0aGlzLmVsZW1lbnQuaWQgKyAnPC8nICsgdGhpcy50YWdOYW1lICsgJz4nKVxuICAgIC5hcHBlbmROZXdMaW5lKCk7XG59O1xuXG5mdW5jdGlvbiBCb2R5U2VyaWFsaXplcigpIHt9XG5cbkJvZHlTZXJpYWxpemVyLnByb3RvdHlwZS5zZXJpYWxpemVWYWx1ZSA9XG5Cb2R5U2VyaWFsaXplci5wcm90b3R5cGUuc2VyaWFsaXplVG8gPSBmdW5jdGlvbih3cml0ZXIpIHtcbiAgd3JpdGVyLmFwcGVuZChcbiAgICB0aGlzLmVzY2FwZVxuICAgICAgPyBlc2NhcGVCb2R5KHRoaXMudmFsdWUpXG4gICAgICA6IHRoaXMudmFsdWVcbiAgKTtcbn07XG5cbkJvZHlTZXJpYWxpemVyLnByb3RvdHlwZS5idWlsZCA9IGZ1bmN0aW9uKHByb3AsIHZhbHVlKSB7XG4gIHRoaXMudmFsdWUgPSB2YWx1ZTtcblxuICBpZiAocHJvcC50eXBlID09PSAnU3RyaW5nJyAmJiB2YWx1ZS5zZWFyY2goRVNDQVBFX0NIQVJTKSAhPT0gLTEpIHtcbiAgICB0aGlzLmVzY2FwZSA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIFZhbHVlU2VyaWFsaXplcih0YWdOYW1lKSB7XG4gIHRoaXMudGFnTmFtZSA9IHRhZ05hbWU7XG59XG5cbmluaGVyaXRzKFZhbHVlU2VyaWFsaXplciwgQm9keVNlcmlhbGl6ZXIpO1xuXG5WYWx1ZVNlcmlhbGl6ZXIucHJvdG90eXBlLnNlcmlhbGl6ZVRvID0gZnVuY3Rpb24od3JpdGVyKSB7XG5cbiAgd3JpdGVyXG4gICAgLmFwcGVuZEluZGVudCgpXG4gICAgLmFwcGVuZCgnPCcgKyB0aGlzLnRhZ05hbWUgKyAnPicpO1xuXG4gIHRoaXMuc2VyaWFsaXplVmFsdWUod3JpdGVyKTtcblxuICB3cml0ZXJcbiAgICAuYXBwZW5kKCc8LycgKyB0aGlzLnRhZ05hbWUgKyAnPicpXG4gICAgLmFwcGVuZE5ld0xpbmUoKTtcbn07XG5cbmZ1bmN0aW9uIEVsZW1lbnRTZXJpYWxpemVyKHBhcmVudCwgcHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gIHRoaXMuYm9keSA9IFtdO1xuICB0aGlzLmF0dHJzID0gW107XG5cbiAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMucHJvcGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yO1xufVxuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgdmFyIGVsZW1lbnREZXNjcmlwdG9yID0gZWxlbWVudC4kZGVzY3JpcHRvcixcbiAgICAgIHByb3BlcnR5RGVzY3JpcHRvciA9IHRoaXMucHJvcGVydHlEZXNjcmlwdG9yO1xuXG4gIHZhciBvdGhlckF0dHJzLFxuICAgICAgcHJvcGVydGllcztcblxuICB2YXIgaXNHZW5lcmljID0gZWxlbWVudERlc2NyaXB0b3IuaXNHZW5lcmljO1xuXG4gIGlmIChpc0dlbmVyaWMpIHtcbiAgICBvdGhlckF0dHJzID0gdGhpcy5wYXJzZUdlbmVyaWMoZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgb3RoZXJBdHRycyA9IHRoaXMucGFyc2VOc0F0dHJpYnV0ZXMoZWxlbWVudCk7XG4gIH1cblxuICBpZiAocHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gICAgdGhpcy5ucyA9IHRoaXMubnNQcm9wZXJ0eVRhZ05hbWUocHJvcGVydHlEZXNjcmlwdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm5zID0gdGhpcy5uc1RhZ05hbWUoZWxlbWVudERlc2NyaXB0b3IpO1xuICB9XG5cbiAgLy8gY29tcHV0ZSB0YWcgbmFtZVxuICB0aGlzLnRhZ05hbWUgPSB0aGlzLmFkZFRhZ05hbWUodGhpcy5ucyk7XG5cbiAgaWYgKCFpc0dlbmVyaWMpIHtcbiAgICBwcm9wZXJ0aWVzID0gZ2V0U2VyaWFsaXphYmxlUHJvcGVydGllcyhlbGVtZW50KTtcblxuICAgIHRoaXMucGFyc2VBdHRyaWJ1dGVzKGZpbHRlckF0dHJpYnV0ZXMocHJvcGVydGllcykpO1xuICAgIHRoaXMucGFyc2VDb250YWlubWVudHMoZmlsdGVyQ29udGFpbmVkKHByb3BlcnRpZXMpKTtcbiAgfVxuXG4gIHRoaXMucGFyc2VHZW5lcmljQXR0cmlidXRlcyhlbGVtZW50LCBvdGhlckF0dHJzKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5uc1RhZ05hbWUgPSBmdW5jdGlvbihkZXNjcmlwdG9yKSB7XG4gIHZhciBlZmZlY3RpdmVOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChkZXNjcmlwdG9yLm5zKTtcbiAgcmV0dXJuIGdldEVsZW1lbnROcyhlZmZlY3RpdmVOcywgZGVzY3JpcHRvcik7XG59O1xuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUubnNQcm9wZXJ0eVRhZ05hbWUgPSBmdW5jdGlvbihkZXNjcmlwdG9yKSB7XG4gIHZhciBlZmZlY3RpdmVOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChkZXNjcmlwdG9yLm5zKTtcbiAgcmV0dXJuIGdldFByb3BlcnR5TnMoZWZmZWN0aXZlTnMsIGRlc2NyaXB0b3IpO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmlzTG9jYWxOcyA9IGZ1bmN0aW9uKG5zKSB7XG4gIHJldHVybiBucy51cmkgPT09IHRoaXMubnMudXJpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGFjdHVhbCBucyBhdHRyaWJ1dGUgbmFtZSBmb3IgdGhlIGdpdmVuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2VsZW1lbnQuaW5oZXJpdGVkPWZhbHNlXVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gbnNOYW1lXG4gKi9cbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5uc0F0dHJpYnV0ZU5hbWUgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgdmFyIG5zO1xuXG4gIGlmIChpc1N0cmluZyhlbGVtZW50KSkge1xuICAgIG5zID0gcGFyc2VOYW1lTlMoZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgbnMgPSBlbGVtZW50Lm5zO1xuICB9XG5cbiAgLy8gcmV0dXJuIGp1c3QgbG9jYWwgbmFtZSBmb3IgaW5oZXJpdGVkIGF0dHJpYnV0ZXNcbiAgaWYgKGVsZW1lbnQuaW5oZXJpdGVkKSB7XG4gICAgcmV0dXJuIHsgbG9jYWxOYW1lOiBucy5sb2NhbE5hbWUgfTtcbiAgfVxuXG4gIC8vIHBhcnNlICsgbG9nIGVmZmVjdGl2ZSBuc1xuICB2YXIgZWZmZWN0aXZlTnMgPSB0aGlzLmxvZ05hbWVzcGFjZVVzZWQobnMpO1xuXG4gIC8vIExPRyBBQ1RVQUwgbmFtZXNwYWNlIHVzZVxuICB0aGlzLmdldE5hbWVzcGFjZXMoKS5sb2dVc2VkKGVmZmVjdGl2ZU5zKTtcblxuICAvLyBzdHJpcCBwcmVmaXggaWYgc2FtZSBuYW1lc3BhY2UgbGlrZSBwYXJlbnRcbiAgaWYgKHRoaXMuaXNMb2NhbE5zKGVmZmVjdGl2ZU5zKSkge1xuICAgIHJldHVybiB7IGxvY2FsTmFtZTogbnMubG9jYWxOYW1lIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGFzc2lnbih7IGxvY2FsTmFtZTogbnMubG9jYWxOYW1lIH0sIGVmZmVjdGl2ZU5zKTtcbiAgfVxufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlR2VuZXJpYyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICBib2R5ID0gdGhpcy5ib2R5O1xuXG4gIHZhciBhdHRyaWJ1dGVzID0gW107XG5cbiAgZm9yRWFjaChlbGVtZW50LCBmdW5jdGlvbih2YWwsIGtleSkge1xuXG4gICAgdmFyIG5vbk5zQXR0cjtcblxuICAgIGlmIChrZXkgPT09ICckYm9keScpIHtcbiAgICAgIGJvZHkucHVzaChuZXcgQm9keVNlcmlhbGl6ZXIoKS5idWlsZCh7IHR5cGU6ICdTdHJpbmcnIH0sIHZhbCkpO1xuICAgIH0gZWxzZVxuICAgIGlmIChrZXkgPT09ICckY2hpbGRyZW4nKSB7XG4gICAgICBmb3JFYWNoKHZhbCwgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgICAgYm9keS5wdXNoKG5ldyBFbGVtZW50U2VyaWFsaXplcihzZWxmKS5idWlsZChjaGlsZCkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlXG4gICAgaWYgKGtleS5pbmRleE9mKCckJykgIT09IDApIHtcbiAgICAgIG5vbk5zQXR0ciA9IHNlbGYucGFyc2VOc0F0dHJpYnV0ZShlbGVtZW50LCBrZXksIHZhbCk7XG5cbiAgICAgIGlmIChub25Oc0F0dHIpIHtcbiAgICAgICAgYXR0cmlidXRlcy5wdXNoKHsgbmFtZToga2V5LCB2YWx1ZTogdmFsIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGF0dHJpYnV0ZXM7XG59O1xuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VOc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBtb2RlbCA9IGVsZW1lbnQuJG1vZGVsO1xuXG4gIHZhciBuYW1lTnMgPSBwYXJzZU5hbWVOUyhuYW1lKTtcblxuICB2YXIgbnM7XG5cbiAgLy8gcGFyc2UgeG1sbnM6Zm9vPVwiaHR0cDovL2Zvby5iYXJcIlxuICBpZiAobmFtZU5zLnByZWZpeCA9PT0gJ3htbG5zJykge1xuICAgIG5zID0geyBwcmVmaXg6IG5hbWVOcy5sb2NhbE5hbWUsIHVyaTogdmFsdWUgfTtcbiAgfVxuXG4gIC8vIHBhcnNlIHhtbG5zPVwiaHR0cDovL2Zvby5iYXJcIlxuICBpZiAoIW5hbWVOcy5wcmVmaXggJiYgbmFtZU5zLmxvY2FsTmFtZSA9PT0gJ3htbG5zJykge1xuICAgIG5zID0geyB1cmk6IHZhbHVlIH07XG4gIH1cblxuICBpZiAoIW5zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogdmFsdWVcbiAgICB9O1xuICB9XG5cbiAgaWYgKG1vZGVsICYmIG1vZGVsLmdldFBhY2thZ2UodmFsdWUpKSB7XG4gICAgLy8gcmVnaXN0ZXIgd2VsbCBrbm93biBuYW1lc3BhY2VcbiAgICB0aGlzLmxvZ05hbWVzcGFjZShucywgdHJ1ZSwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gbG9nIGN1c3RvbSBuYW1lc3BhY2UgZGlyZWN0bHkgYXMgdXNlZFxuICAgIHZhciBhY3R1YWxOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChucywgdHJ1ZSk7XG5cbiAgICB0aGlzLmdldE5hbWVzcGFjZXMoKS5sb2dVc2VkKGFjdHVhbE5zKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIFBhcnNlIG5hbWVzcGFjZXMgYW5kIHJldHVybiBhIGxpc3Qgb2YgbGVmdCBvdmVyIGdlbmVyaWMgYXR0cmlidXRlc1xuICpcbiAqIEBwYXJhbSAge09iamVjdH0gZWxlbWVudFxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn1cbiAqL1xuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlTnNBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZWxlbWVudCwgYXR0cnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBnZW5lcmljQXR0cnMgPSBlbGVtZW50LiRhdHRycztcblxuICB2YXIgYXR0cmlidXRlcyA9IFtdO1xuXG4gIC8vIHBhcnNlIG5hbWVzcGFjZSBhdHRyaWJ1dGVzIGZpcnN0XG4gIC8vIGFuZCBsb2cgdGhlbS4gcHVzaCBub24gbmFtZXNwYWNlIGF0dHJpYnV0ZXMgdG8gYSBsaXN0XG4gIC8vIGFuZCBwcm9jZXNzIHRoZW0gbGF0ZXJcbiAgZm9yRWFjaChnZW5lcmljQXR0cnMsIGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG5cbiAgICB2YXIgbm9uTnNBdHRyID0gc2VsZi5wYXJzZU5zQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcblxuICAgIGlmIChub25Oc0F0dHIpIHtcbiAgICAgIGF0dHJpYnV0ZXMucHVzaChub25Oc0F0dHIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGF0dHJpYnV0ZXM7XG59O1xuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VHZW5lcmljQXR0cmlidXRlcyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZXMpIHtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZm9yRWFjaChhdHRyaWJ1dGVzLCBmdW5jdGlvbihhdHRyKSB7XG5cbiAgICAvLyBkbyBub3Qgc2VyaWFsaXplIHhzaTp0eXBlIGF0dHJpYnV0ZVxuICAgIC8vIGl0IGlzIHNldCBtYW51YWxseSBiYXNlZCBvbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIHR5cGVcbiAgICBpZiAoYXR0ci5uYW1lID09PSBYU0lfVFlQRSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBzZWxmLmFkZEF0dHJpYnV0ZShzZWxmLm5zQXR0cmlidXRlTmFtZShhdHRyLm5hbWUpLCBhdHRyLnZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdtaXNzaW5nIG5hbWVzcGFjZSBpbmZvcm1hdGlvbiBmb3IgJyxcbiAgICAgICAgYXR0ci5uYW1lLCAnPScsIGF0dHIudmFsdWUsICdvbicsIGVsZW1lbnQsXG4gICAgICAgIGUpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VDb250YWlubWVudHMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgYm9keSA9IHRoaXMuYm9keSxcbiAgICAgIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG5cbiAgZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihwKSB7XG4gICAgdmFyIHZhbHVlID0gZWxlbWVudC5nZXQocC5uYW1lKSxcbiAgICAgICAgaXNSZWZlcmVuY2UgPSBwLmlzUmVmZXJlbmNlLFxuICAgICAgICBpc01hbnkgPSBwLmlzTWFueTtcblxuICAgIGlmICghaXNNYW55KSB7XG4gICAgICB2YWx1ZSA9IFsgdmFsdWUgXTtcbiAgICB9XG5cbiAgICBpZiAocC5pc0JvZHkpIHtcbiAgICAgIGJvZHkucHVzaChuZXcgQm9keVNlcmlhbGl6ZXIoKS5idWlsZChwLCB2YWx1ZVswXSkpO1xuICAgIH0gZWxzZVxuICAgIGlmIChpc1NpbXBsZVR5cGUocC50eXBlKSkge1xuICAgICAgZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24odikge1xuICAgICAgICBib2R5LnB1c2gobmV3IFZhbHVlU2VyaWFsaXplcihzZWxmLmFkZFRhZ05hbWUoc2VsZi5uc1Byb3BlcnR5VGFnTmFtZShwKSkpLmJ1aWxkKHAsIHYpKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZVxuICAgIGlmIChpc1JlZmVyZW5jZSkge1xuICAgICAgZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24odikge1xuICAgICAgICBib2R5LnB1c2gobmV3IFJlZmVyZW5jZVNlcmlhbGl6ZXIoc2VsZi5hZGRUYWdOYW1lKHNlbGYubnNQcm9wZXJ0eVRhZ05hbWUocCkpKS5idWlsZCh2KSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYWxsb3cgc2VyaWFsaXphdGlvbiB2aWEgdHlwZVxuICAgICAgLy8gcmF0aGVyIHRoYW4gZWxlbWVudCBuYW1lXG4gICAgICB2YXIgYXNUeXBlID0gc2VyaWFsaXplQXNUeXBlKHApLFxuICAgICAgICAgIGFzUHJvcGVydHkgPSBzZXJpYWxpemVBc1Byb3BlcnR5KHApO1xuXG4gICAgICBmb3JFYWNoKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgIHZhciBzZXJpYWxpemVyO1xuXG4gICAgICAgIGlmIChhc1R5cGUpIHtcbiAgICAgICAgICBzZXJpYWxpemVyID0gbmV3IFR5cGVTZXJpYWxpemVyKHNlbGYsIHApO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgaWYgKGFzUHJvcGVydHkpIHtcbiAgICAgICAgICBzZXJpYWxpemVyID0gbmV3IEVsZW1lbnRTZXJpYWxpemVyKHNlbGYsIHApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlcmlhbGl6ZXIgPSBuZXcgRWxlbWVudFNlcmlhbGl6ZXIoc2VsZik7XG4gICAgICAgIH1cblxuICAgICAgICBib2R5LnB1c2goc2VyaWFsaXplci5idWlsZCh2KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmdldE5hbWVzcGFjZXMgPSBmdW5jdGlvbihsb2NhbCkge1xuXG4gIHZhciBuYW1lc3BhY2VzID0gdGhpcy5uYW1lc3BhY2VzLFxuICAgICAgcGFyZW50ID0gdGhpcy5wYXJlbnQsXG4gICAgICBwYXJlbnROYW1lc3BhY2VzO1xuXG4gIGlmICghbmFtZXNwYWNlcykge1xuICAgIHBhcmVudE5hbWVzcGFjZXMgPSBwYXJlbnQgJiYgcGFyZW50LmdldE5hbWVzcGFjZXMoKTtcblxuICAgIGlmIChsb2NhbCB8fCAhcGFyZW50TmFtZXNwYWNlcykge1xuICAgICAgdGhpcy5uYW1lc3BhY2VzID0gbmFtZXNwYWNlcyA9IG5ldyBOYW1lc3BhY2VzKHBhcmVudE5hbWVzcGFjZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYW1lc3BhY2VzID0gcGFyZW50TmFtZXNwYWNlcztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmFtZXNwYWNlcztcbn07XG5cbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5sb2dOYW1lc3BhY2UgPSBmdW5jdGlvbihucywgd2VsbGtub3duLCBsb2NhbCkge1xuICB2YXIgbmFtZXNwYWNlcyA9IHRoaXMuZ2V0TmFtZXNwYWNlcyhsb2NhbCk7XG5cbiAgdmFyIG5zVXJpID0gbnMudXJpLFxuICAgICAgbnNQcmVmaXggPSBucy5wcmVmaXg7XG5cbiAgdmFyIGV4aXN0aW5nID0gbmFtZXNwYWNlcy5ieVVyaShuc1VyaSk7XG5cbiAgaWYgKG5zUHJlZml4ICE9PSAneG1sJyAmJiAoIWV4aXN0aW5nIHx8IGxvY2FsKSkge1xuICAgIG5hbWVzcGFjZXMuYWRkKG5zLCB3ZWxsa25vd24pO1xuICB9XG5cbiAgbmFtZXNwYWNlcy5tYXBQcmVmaXgobnNQcmVmaXgsIG5zVXJpKTtcblxuICByZXR1cm4gbnM7XG59O1xuXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUubG9nTmFtZXNwYWNlVXNlZCA9IGZ1bmN0aW9uKG5zLCBsb2NhbCkge1xuICB2YXIgZWxlbWVudCA9IHRoaXMuZWxlbWVudCxcbiAgICAgIG1vZGVsID0gZWxlbWVudC4kbW9kZWwsXG4gICAgICBuYW1lc3BhY2VzID0gdGhpcy5nZXROYW1lc3BhY2VzKGxvY2FsKTtcblxuICAvLyBucyBtYXkgYmVcbiAgLy9cbiAgLy8gICAqIHByZWZpeCBvbmx5XG4gIC8vICAgKiBwcmVmaXg6dXJpXG4gIC8vICAgKiBsb2NhbE5hbWUgb25seVxuXG4gIHZhciBwcmVmaXggPSBucy5wcmVmaXgsXG4gICAgICB1cmkgPSBucy51cmksXG4gICAgICBuZXdQcmVmaXgsIGlkeCxcbiAgICAgIHdlbGxrbm93blVyaTtcblxuICAvLyBoYW5kbGUgYW5vbnltb3VzIG5hbWVzcGFjZXMgKGVsZW1lbnRGb3JtPXVucXVhbGlmaWVkKSwgY2YuICMyM1xuICBpZiAoIXByZWZpeCAmJiAhdXJpKSB7XG4gICAgcmV0dXJuIHsgbG9jYWxOYW1lOiBucy5sb2NhbE5hbWUgfTtcbiAgfVxuXG4gIHdlbGxrbm93blVyaSA9IERFRkFVTFRfTlNfTUFQW3ByZWZpeF0gfHwgbW9kZWwgJiYgKG1vZGVsLmdldFBhY2thZ2UocHJlZml4KSB8fCB7fSkudXJpO1xuXG4gIHVyaSA9IHVyaSB8fCB3ZWxsa25vd25VcmkgfHwgbmFtZXNwYWNlcy51cmlCeVByZWZpeChwcmVmaXgpO1xuXG4gIGlmICghdXJpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdubyBuYW1lc3BhY2UgdXJpIGdpdmVuIGZvciBwcmVmaXggPCcgKyBwcmVmaXggKyAnPicpO1xuICB9XG5cbiAgbnMgPSBuYW1lc3BhY2VzLmJ5VXJpKHVyaSk7XG5cbiAgaWYgKCFucykge1xuICAgIG5ld1ByZWZpeCA9IHByZWZpeDtcbiAgICBpZHggPSAxO1xuXG4gICAgLy8gZmluZCBhIHByZWZpeCB0aGF0IGlzIG5vdCBtYXBwZWQgeWV0XG4gICAgd2hpbGUgKG5hbWVzcGFjZXMudXJpQnlQcmVmaXgobmV3UHJlZml4KSkge1xuICAgICAgbmV3UHJlZml4ID0gcHJlZml4ICsgJ18nICsgaWR4Kys7XG4gICAgfVxuXG4gICAgbnMgPSB0aGlzLmxvZ05hbWVzcGFjZSh7IHByZWZpeDogbmV3UHJlZml4LCB1cmk6IHVyaSB9LCB3ZWxsa25vd25VcmkgPT09IHVyaSk7XG4gIH1cblxuICBpZiAocHJlZml4KSB7XG4gICAgbmFtZXNwYWNlcy5tYXBQcmVmaXgocHJlZml4LCB1cmkpO1xuICB9XG5cbiAgcmV0dXJuIG5zO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlQXR0cmlidXRlcyA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgZWxlbWVudCA9IHRoaXMuZWxlbWVudDtcblxuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHApIHtcblxuICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQuZ2V0KHAubmFtZSk7XG5cbiAgICBpZiAocC5pc1JlZmVyZW5jZSkge1xuXG4gICAgICBpZiAoIXAuaXNNYW55KSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuaWQ7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgICBmb3JFYWNoKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgdmFsdWVzLnB1c2godi5pZCk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBJRFJFRlMgaXMgYSB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHJlZmVyZW5jZXMuXG4gICAgICAgIHZhbHVlID0gdmFsdWVzLmpvaW4oJyAnKTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIHNlbGYuYWRkQXR0cmlidXRlKHNlbGYubnNBdHRyaWJ1dGVOYW1lKHApLCB2YWx1ZSk7XG4gIH0pO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmFkZFRhZ05hbWUgPSBmdW5jdGlvbihuc1RhZ05hbWUpIHtcbiAgdmFyIGFjdHVhbE5zID0gdGhpcy5sb2dOYW1lc3BhY2VVc2VkKG5zVGFnTmFtZSk7XG5cbiAgdGhpcy5nZXROYW1lc3BhY2VzKCkubG9nVXNlZChhY3R1YWxOcyk7XG5cbiAgcmV0dXJuIG5zTmFtZShuc1RhZ05hbWUpO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBhdHRycyA9IHRoaXMuYXR0cnM7XG5cbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHZhbHVlID0gZXNjYXBlQXR0cih2YWx1ZSk7XG4gIH1cblxuICBhdHRycy5wdXNoKHsgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlIH0pO1xufTtcblxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnNlcmlhbGl6ZUF0dHJpYnV0ZXMgPSBmdW5jdGlvbih3cml0ZXIpIHtcbiAgdmFyIGF0dHJzID0gdGhpcy5hdHRycyxcbiAgICAgIG5hbWVzcGFjZXMgPSB0aGlzLm5hbWVzcGFjZXM7XG5cbiAgaWYgKG5hbWVzcGFjZXMpIHtcbiAgICBhdHRycyA9IGdldE5zQXR0cnMobmFtZXNwYWNlcykuY29uY2F0KGF0dHJzKTtcbiAgfVxuXG4gIGZvckVhY2goYXR0cnMsIGZ1bmN0aW9uKGEpIHtcbiAgICB3cml0ZXJcbiAgICAgIC5hcHBlbmQoJyAnKVxuICAgICAgLmFwcGVuZChuc05hbWUoYS5uYW1lKSkuYXBwZW5kKCc9XCInKS5hcHBlbmQoYS52YWx1ZSkuYXBwZW5kKCdcIicpO1xuICB9KTtcbn07XG5cbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5zZXJpYWxpemVUbyA9IGZ1bmN0aW9uKHdyaXRlcikge1xuICB2YXIgZmlyc3RCb2R5ID0gdGhpcy5ib2R5WzBdLFxuICAgICAgaW5kZW50ID0gZmlyc3RCb2R5ICYmIGZpcnN0Qm9keS5jb25zdHJ1Y3RvciAhPT0gQm9keVNlcmlhbGl6ZXI7XG5cbiAgd3JpdGVyXG4gICAgLmFwcGVuZEluZGVudCgpXG4gICAgLmFwcGVuZCgnPCcgKyB0aGlzLnRhZ05hbWUpO1xuXG4gIHRoaXMuc2VyaWFsaXplQXR0cmlidXRlcyh3cml0ZXIpO1xuXG4gIHdyaXRlci5hcHBlbmQoZmlyc3RCb2R5ID8gJz4nIDogJyAvPicpO1xuXG4gIGlmIChmaXJzdEJvZHkpIHtcblxuICAgIGlmIChpbmRlbnQpIHtcbiAgICAgIHdyaXRlclxuICAgICAgICAuYXBwZW5kTmV3TGluZSgpXG4gICAgICAgIC5pbmRlbnQoKTtcbiAgICB9XG5cbiAgICBmb3JFYWNoKHRoaXMuYm9keSwgZnVuY3Rpb24oYikge1xuICAgICAgYi5zZXJpYWxpemVUbyh3cml0ZXIpO1xuICAgIH0pO1xuXG4gICAgaWYgKGluZGVudCkge1xuICAgICAgd3JpdGVyXG4gICAgICAgIC51bmluZGVudCgpXG4gICAgICAgIC5hcHBlbmRJbmRlbnQoKTtcbiAgICB9XG5cbiAgICB3cml0ZXIuYXBwZW5kKCc8LycgKyB0aGlzLnRhZ05hbWUgKyAnPicpO1xuICB9XG5cbiAgd3JpdGVyLmFwcGVuZE5ld0xpbmUoKTtcbn07XG5cbi8qKlxuICogQSBzZXJpYWxpemVyIGZvciB0eXBlcyB0aGF0IGhhbmRsZXMgc2VyaWFsaXphdGlvbiBvZiBkYXRhIHR5cGVzXG4gKi9cbmZ1bmN0aW9uIFR5cGVTZXJpYWxpemVyKHBhcmVudCwgcHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gIEVsZW1lbnRTZXJpYWxpemVyLmNhbGwodGhpcywgcGFyZW50LCBwcm9wZXJ0eURlc2NyaXB0b3IpO1xufVxuXG5pbmhlcml0cyhUeXBlU2VyaWFsaXplciwgRWxlbWVudFNlcmlhbGl6ZXIpO1xuXG5UeXBlU2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VOc0F0dHJpYnV0ZXMgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgLy8gZXh0cmFjdGVkIGF0dHJpYnV0ZXNcbiAgdmFyIGF0dHJpYnV0ZXMgPSBFbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VOc0F0dHJpYnV0ZXMuY2FsbCh0aGlzLCBlbGVtZW50KTtcblxuICB2YXIgZGVzY3JpcHRvciA9IGVsZW1lbnQuJGRlc2NyaXB0b3I7XG5cbiAgLy8gb25seSBzZXJpYWxpemUgeHNpOnR5cGUgaWYgbmVjZXNzYXJ5XG4gIGlmIChkZXNjcmlwdG9yLm5hbWUgPT09IHRoaXMucHJvcGVydHlEZXNjcmlwdG9yLnR5cGUpIHtcbiAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgfVxuXG4gIHZhciB0eXBlTnMgPSB0aGlzLnR5cGVOcyA9IHRoaXMubnNUYWdOYW1lKGRlc2NyaXB0b3IpO1xuICB0aGlzLmdldE5hbWVzcGFjZXMoKS5sb2dVc2VkKHRoaXMudHlwZU5zKTtcblxuICAvLyBhZGQgeHNpOnR5cGUgYXR0cmlidXRlIHRvIHJlcHJlc2VudCB0aGUgZWxlbWVudHNcbiAgLy8gYWN0dWFsIHR5cGVcblxuICB2YXIgcGtnID0gZWxlbWVudC4kbW9kZWwuZ2V0UGFja2FnZSh0eXBlTnMudXJpKSxcbiAgICAgIHR5cGVQcmVmaXggPSAocGtnLnhtbCAmJiBwa2cueG1sLnR5cGVQcmVmaXgpIHx8ICcnO1xuXG4gIHRoaXMuYWRkQXR0cmlidXRlKFxuICAgIHRoaXMubnNBdHRyaWJ1dGVOYW1lKFhTSV9UWVBFKSxcbiAgICAodHlwZU5zLnByZWZpeCA/IHR5cGVOcy5wcmVmaXggKyAnOicgOiAnJykgKyB0eXBlUHJlZml4ICsgZGVzY3JpcHRvci5ucy5sb2NhbE5hbWVcbiAgKTtcblxuICByZXR1cm4gYXR0cmlidXRlcztcbn07XG5cblR5cGVTZXJpYWxpemVyLnByb3RvdHlwZS5pc0xvY2FsTnMgPSBmdW5jdGlvbihucykge1xuICByZXR1cm4gbnMudXJpID09PSAodGhpcy50eXBlTnMgfHwgdGhpcy5ucykudXJpO1xufTtcblxuZnVuY3Rpb24gU2F2aW5nV3JpdGVyKCkge1xuICB0aGlzLnZhbHVlID0gJyc7XG5cbiAgdGhpcy53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHRoaXMudmFsdWUgKz0gc3RyO1xuICB9O1xufVxuXG5mdW5jdGlvbiBGb3JtYXRpbmdXcml0ZXIob3V0LCBmb3JtYXQpIHtcblxuICB2YXIgaW5kZW50ID0gWycnXTtcblxuICB0aGlzLmFwcGVuZCA9IGZ1bmN0aW9uKHN0cikge1xuICAgIG91dC53cml0ZShzdHIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdGhpcy5hcHBlbmROZXdMaW5lID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgb3V0LndyaXRlKCdcXG4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB0aGlzLmFwcGVuZEluZGVudCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChmb3JtYXQpIHtcbiAgICAgIG91dC53cml0ZShpbmRlbnQuam9pbignICAnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdGhpcy5pbmRlbnQgPSBmdW5jdGlvbigpIHtcbiAgICBpbmRlbnQucHVzaCgnJyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdGhpcy51bmluZGVudCA9IGZ1bmN0aW9uKCkge1xuICAgIGluZGVudC5wb3AoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbn1cblxuLyoqXG4gKiBBIHdyaXRlciBmb3IgbWV0YS1tb2RlbCBiYWNrZWQgZG9jdW1lbnQgdHJlZXNcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBvdXRwdXQgb3B0aW9ucyB0byBwYXNzIGludG8gdGhlIHdyaXRlclxuICovXG5mdW5jdGlvbiBXcml0ZXIob3B0aW9ucykge1xuXG4gIG9wdGlvbnMgPSBhc3NpZ24oeyBmb3JtYXQ6IGZhbHNlLCBwcmVhbWJsZTogdHJ1ZSB9LCBvcHRpb25zIHx8IHt9KTtcblxuICBmdW5jdGlvbiB0b1hNTCh0cmVlLCB3cml0ZXIpIHtcbiAgICB2YXIgaW50ZXJuYWxXcml0ZXIgPSB3cml0ZXIgfHwgbmV3IFNhdmluZ1dyaXRlcigpO1xuICAgIHZhciBmb3JtYXRpbmdXcml0ZXIgPSBuZXcgRm9ybWF0aW5nV3JpdGVyKGludGVybmFsV3JpdGVyLCBvcHRpb25zLmZvcm1hdCk7XG5cbiAgICBpZiAob3B0aW9ucy5wcmVhbWJsZSkge1xuICAgICAgZm9ybWF0aW5nV3JpdGVyLmFwcGVuZChYTUxfUFJFQU1CTEUpO1xuICAgIH1cblxuICAgIG5ldyBFbGVtZW50U2VyaWFsaXplcigpLmJ1aWxkKHRyZWUpLnNlcmlhbGl6ZVRvKGZvcm1hdGluZ1dyaXRlcik7XG5cbiAgICBpZiAoIXdyaXRlcikge1xuICAgICAgcmV0dXJuIGludGVybmFsV3JpdGVyLnZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9YTUw6IHRvWE1MXG4gIH07XG59XG5cbmV4cG9ydCB7IFJlYWRlciwgV3JpdGVyIH07XG4iLCJpbXBvcnQgeyBmb3JFYWNoLCBiaW5kLCBwaWNrLCBhc3NpZ24sIGlzU3RyaW5nLCBpc09iamVjdCB9IGZyb20gJ21pbi1kYXNoJztcblxuLyoqXG4gKiBNb2RkbGUgYmFzZSBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBCYXNlKCkgeyB9XG5cbkJhc2UucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMuJG1vZGVsLnByb3BlcnRpZXMuZ2V0KHRoaXMsIG5hbWUpO1xufTtcblxuQmFzZS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdGhpcy4kbW9kZWwucHJvcGVydGllcy5zZXQodGhpcywgbmFtZSwgdmFsdWUpO1xufTtcblxuLyoqXG4gKiBBIG1vZGVsIGVsZW1lbnQgZmFjdG9yeS5cbiAqXG4gKiBAcGFyYW0ge01vZGRsZX0gbW9kZWxcbiAqIEBwYXJhbSB7UHJvcGVydGllc30gcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBGYWN0b3J5KG1vZGVsLCBwcm9wZXJ0aWVzKSB7XG4gIHRoaXMubW9kZWwgPSBtb2RlbDtcbiAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbn1cblxuXG5GYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVUeXBlID0gZnVuY3Rpb24oZGVzY3JpcHRvcikge1xuXG4gIHZhciBtb2RlbCA9IHRoaXMubW9kZWw7XG5cbiAgdmFyIHByb3BzID0gdGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlLnByb3RvdHlwZSk7XG5cbiAgLy8gaW5pdGlhbGl6ZSBkZWZhdWx0IHZhbHVlc1xuICBmb3JFYWNoKGRlc2NyaXB0b3IucHJvcGVydGllcywgZnVuY3Rpb24ocCkge1xuICAgIGlmICghcC5pc01hbnkgJiYgcC5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb3RvdHlwZVtwLm5hbWVdID0gcC5kZWZhdWx0O1xuICAgIH1cbiAgfSk7XG5cbiAgcHJvcHMuZGVmaW5lTW9kZWwocHJvdG90eXBlLCBtb2RlbCk7XG4gIHByb3BzLmRlZmluZURlc2NyaXB0b3IocHJvdG90eXBlLCBkZXNjcmlwdG9yKTtcblxuICB2YXIgbmFtZSA9IGRlc2NyaXB0b3IubnMubmFtZTtcblxuICAvKipcbiAgICogVGhlIG5ldyB0eXBlIGNvbnN0cnVjdG9yXG4gICAqL1xuICBmdW5jdGlvbiBNb2RkbGVFbGVtZW50KGF0dHJzKSB7XG4gICAgcHJvcHMuZGVmaW5lKHRoaXMsICckdHlwZScsIHsgdmFsdWU6IG5hbWUsIGVudW1lcmFibGU6IHRydWUgfSk7XG4gICAgcHJvcHMuZGVmaW5lKHRoaXMsICckYXR0cnMnLCB7IHZhbHVlOiB7fSB9KTtcbiAgICBwcm9wcy5kZWZpbmUodGhpcywgJyRwYXJlbnQnLCB7IHdyaXRhYmxlOiB0cnVlIH0pO1xuXG4gICAgZm9yRWFjaChhdHRycywgYmluZChmdW5jdGlvbih2YWwsIGtleSkge1xuICAgICAgdGhpcy5zZXQoa2V5LCB2YWwpO1xuICAgIH0sIHRoaXMpKTtcbiAgfVxuXG4gIE1vZGRsZUVsZW1lbnQucHJvdG90eXBlID0gcHJvdG90eXBlO1xuXG4gIE1vZGRsZUVsZW1lbnQuaGFzVHlwZSA9IHByb3RvdHlwZS4kaW5zdGFuY2VPZiA9IHRoaXMubW9kZWwuaGFzVHlwZTtcblxuICAvLyBzdGF0aWMgbGlua3NcbiAgcHJvcHMuZGVmaW5lTW9kZWwoTW9kZGxlRWxlbWVudCwgbW9kZWwpO1xuICBwcm9wcy5kZWZpbmVEZXNjcmlwdG9yKE1vZGRsZUVsZW1lbnQsIGRlc2NyaXB0b3IpO1xuXG4gIHJldHVybiBNb2RkbGVFbGVtZW50O1xufTtcblxuLyoqXG4gKiBCdWlsdC1pbiBtb2RkbGUgdHlwZXNcbiAqL1xudmFyIEJVSUxUSU5TID0ge1xuICBTdHJpbmc6IHRydWUsXG4gIEJvb2xlYW46IHRydWUsXG4gIEludGVnZXI6IHRydWUsXG4gIFJlYWw6IHRydWUsXG4gIEVsZW1lbnQ6IHRydWVcbn07XG5cbi8qKlxuICogQ29udmVydGVycyBmb3IgYnVpbHQgaW4gdHlwZXMgZnJvbSBzdHJpbmcgcmVwcmVzZW50YXRpb25zXG4gKi9cbnZhciBUWVBFX0NPTlZFUlRFUlMgPSB7XG4gIFN0cmluZzogZnVuY3Rpb24ocykgeyByZXR1cm4gczsgfSxcbiAgQm9vbGVhbjogZnVuY3Rpb24ocykgeyByZXR1cm4gcyA9PT0gJ3RydWUnOyB9LFxuICBJbnRlZ2VyOiBmdW5jdGlvbihzKSB7IHJldHVybiBwYXJzZUludChzLCAxMCk7IH0sXG4gIFJlYWw6IGZ1bmN0aW9uKHMpIHsgcmV0dXJuIHBhcnNlRmxvYXQocywgMTApOyB9XG59O1xuXG4vKipcbiAqIENvbnZlcnQgYSB0eXBlIHRvIGl0cyByZWFsIHJlcHJlc2VudGF0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvZXJjZVR5cGUodHlwZSwgdmFsdWUpIHtcblxuICB2YXIgY29udmVydGVyID0gVFlQRV9DT05WRVJURVJTW3R5cGVdO1xuXG4gIGlmIChjb252ZXJ0ZXIpIHtcbiAgICByZXR1cm4gY29udmVydGVyKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gdHlwZSBpcyBidWlsdC1pblxuICovXG5mdW5jdGlvbiBpc0J1aWx0SW4odHlwZSkge1xuICByZXR1cm4gISFCVUlMVElOU1t0eXBlXTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gdHlwZSBpcyBzaW1wbGVcbiAqL1xuZnVuY3Rpb24gaXNTaW1wbGUodHlwZSkge1xuICByZXR1cm4gISFUWVBFX0NPTlZFUlRFUlNbdHlwZV07XG59XG5cbi8qKlxuICogUGFyc2VzIGEgbmFtZXNwYWNlZCBhdHRyaWJ1dGUgbmFtZSBvZiB0aGUgZm9ybSAobnM6KWxvY2FsTmFtZSB0byBhbiBvYmplY3QsXG4gKiBnaXZlbiBhIGRlZmF1bHQgcHJlZml4IHRvIGFzc3VtZSBpbiBjYXNlIG5vIGV4cGxpY2l0IG5hbWVzcGFjZSBpcyBnaXZlbi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtTdHJpbmd9IFtkZWZhdWx0UHJlZml4XSB0aGUgZGVmYXVsdCBwcmVmaXggdG8gdGFrZSwgaWYgbm9uZSBpcyBwcmVzZW50LlxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIHBhcnNlZCBuYW1lXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTmFtZShuYW1lLCBkZWZhdWx0UHJlZml4KSB7XG4gIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoLzovKSxcbiAgICAgIGxvY2FsTmFtZSwgcHJlZml4O1xuXG4gIC8vIG5vIHByZWZpeCAoaS5lLiBvbmx5IGxvY2FsIG5hbWUpXG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICBsb2NhbE5hbWUgPSBuYW1lO1xuICAgIHByZWZpeCA9IGRlZmF1bHRQcmVmaXg7XG4gIH0gZWxzZVxuICAvLyBwcmVmaXggKyBsb2NhbCBuYW1lXG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDIpIHtcbiAgICBsb2NhbE5hbWUgPSBwYXJ0c1sxXTtcbiAgICBwcmVmaXggPSBwYXJ0c1swXTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIDxwcmVmaXg6bG9jYWxOYW1lPiBvciA8bG9jYWxOYW1lPiwgZ290ICcgKyBuYW1lKTtcbiAgfVxuXG4gIG5hbWUgPSAocHJlZml4ID8gcHJlZml4ICsgJzonIDogJycpICsgbG9jYWxOYW1lO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBwcmVmaXg6IHByZWZpeCxcbiAgICBsb2NhbE5hbWU6IGxvY2FsTmFtZVxuICB9O1xufVxuXG4vKipcbiAqIEEgdXRpbGl0eSB0byBidWlsZCBlbGVtZW50IGRlc2NyaXB0b3JzLlxuICovXG5mdW5jdGlvbiBEZXNjcmlwdG9yQnVpbGRlcihuYW1lTnMpIHtcbiAgdGhpcy5ucyA9IG5hbWVOcztcbiAgdGhpcy5uYW1lID0gbmFtZU5zLm5hbWU7XG4gIHRoaXMuYWxsVHlwZXMgPSBbXTtcbiAgdGhpcy5hbGxUeXBlc0J5TmFtZSA9IHt9O1xuICB0aGlzLnByb3BlcnRpZXMgPSBbXTtcbiAgdGhpcy5wcm9wZXJ0aWVzQnlOYW1lID0ge307XG59XG5cblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBwaWNrKHRoaXMsIFtcbiAgICAnbnMnLFxuICAgICduYW1lJyxcbiAgICAnYWxsVHlwZXMnLFxuICAgICdhbGxUeXBlc0J5TmFtZScsXG4gICAgJ3Byb3BlcnRpZXMnLFxuICAgICdwcm9wZXJ0aWVzQnlOYW1lJyxcbiAgICAnYm9keVByb3BlcnR5JyxcbiAgICAnaWRQcm9wZXJ0eSdcbiAgXSk7XG59O1xuXG4vKipcbiAqIEFkZCBwcm9wZXJ0eSBhdCBnaXZlbiBpbmRleC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcFxuICogQHBhcmFtIHtOdW1iZXJ9IFtpZHhdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFt2YWxpZGF0ZT10cnVlXVxuICovXG5EZXNjcmlwdG9yQnVpbGRlci5wcm90b3R5cGUuYWRkUHJvcGVydHkgPSBmdW5jdGlvbihwLCBpZHgsIHZhbGlkYXRlKSB7XG5cbiAgaWYgKHR5cGVvZiBpZHggPT09ICdib29sZWFuJykge1xuICAgIHZhbGlkYXRlID0gaWR4O1xuICAgIGlkeCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRoaXMuYWRkTmFtZWRQcm9wZXJ0eShwLCB2YWxpZGF0ZSAhPT0gZmFsc2UpO1xuXG4gIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5wcm9wZXJ0aWVzO1xuXG4gIGlmIChpZHggIT09IHVuZGVmaW5lZCkge1xuICAgIHByb3BlcnRpZXMuc3BsaWNlKGlkeCwgMCwgcCk7XG4gIH0gZWxzZSB7XG4gICAgcHJvcGVydGllcy5wdXNoKHApO1xuICB9XG59O1xuXG5cbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5yZXBsYWNlUHJvcGVydHkgPSBmdW5jdGlvbihvbGRQcm9wZXJ0eSwgbmV3UHJvcGVydHksIHJlcGxhY2UpIHtcbiAgdmFyIG9sZE5hbWVOcyA9IG9sZFByb3BlcnR5Lm5zO1xuXG4gIHZhciBwcm9wcyA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgIHByb3BlcnRpZXNCeU5hbWUgPSB0aGlzLnByb3BlcnRpZXNCeU5hbWUsXG4gICAgICByZW5hbWUgPSBvbGRQcm9wZXJ0eS5uYW1lICE9PSBuZXdQcm9wZXJ0eS5uYW1lO1xuXG4gIGlmIChvbGRQcm9wZXJ0eS5pc0lkKSB7XG4gICAgaWYgKCFuZXdQcm9wZXJ0eS5pc0lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdwcm9wZXJ0eSA8JyArIG5ld1Byb3BlcnR5Lm5zLm5hbWUgKyAnPiBtdXN0IGJlIGlkIHByb3BlcnR5ICcgK1xuICAgICAgICAndG8gcmVmaW5lIDwnICsgb2xkUHJvcGVydHkubnMubmFtZSArICc+Jyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJZFByb3BlcnR5KG5ld1Byb3BlcnR5LCBmYWxzZSk7XG4gIH1cblxuICBpZiAob2xkUHJvcGVydHkuaXNCb2R5KSB7XG5cbiAgICBpZiAoIW5ld1Byb3BlcnR5LmlzQm9keSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAncHJvcGVydHkgPCcgKyBuZXdQcm9wZXJ0eS5ucy5uYW1lICsgJz4gbXVzdCBiZSBib2R5IHByb3BlcnR5ICcgK1xuICAgICAgICAndG8gcmVmaW5lIDwnICsgb2xkUHJvcGVydHkubnMubmFtZSArICc+Jyk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgY29tcGF0aWJpbGl0eVxuICAgIHRoaXMuc2V0Qm9keVByb3BlcnR5KG5ld1Byb3BlcnR5LCBmYWxzZSk7XG4gIH1cblxuICAvLyB2YWxpZGF0ZSBleGlzdGVuY2UgYW5kIGdldCBsb2NhdGlvbiBvZiBvbGQgcHJvcGVydHlcbiAgdmFyIGlkeCA9IHByb3BzLmluZGV4T2Yob2xkUHJvcGVydHkpO1xuICBpZiAoaWR4ID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvcGVydHkgPCcgKyBvbGROYW1lTnMubmFtZSArICc+IG5vdCBmb3VuZCBpbiBwcm9wZXJ0eSBsaXN0Jyk7XG4gIH1cblxuICAvLyByZW1vdmUgb2xkIHByb3BlcnR5XG4gIHByb3BzLnNwbGljZShpZHgsIDEpO1xuXG4gIC8vIHJlcGxhY2luZyB0aGUgbmFtZWQgcHJvcGVydHkgaXMgaW50ZW50aW9uYWxcbiAgLy9cbiAgLy8gICogdmFsaWRhdGUgb25seSBpZiB0aGlzIGlzIGEgXCJyZW5hbWVcIiBvcGVyYXRpb25cbiAgLy8gICogYWRkIGF0IHNwZWNpZmljIGluZGV4IHVubGVzcyB3ZSBcInJlcGxhY2VcIlxuICAvL1xuICB0aGlzLmFkZFByb3BlcnR5KG5ld1Byb3BlcnR5LCByZXBsYWNlID8gdW5kZWZpbmVkIDogaWR4LCByZW5hbWUpO1xuXG4gIC8vIG1ha2UgbmV3IHByb3BlcnR5IGF2YWlsYWJsZSB1bmRlciBvbGQgbmFtZVxuICBwcm9wZXJ0aWVzQnlOYW1lW29sZE5hbWVOcy5uYW1lXSA9IHByb3BlcnRpZXNCeU5hbWVbb2xkTmFtZU5zLmxvY2FsTmFtZV0gPSBuZXdQcm9wZXJ0eTtcbn07XG5cblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLnJlZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbihwLCB0YXJnZXRQcm9wZXJ0eU5hbWUsIHJlcGxhY2UpIHtcblxuICB2YXIgbnNQcmVmaXggPSBwLm5zLnByZWZpeDtcbiAgdmFyIHBhcnRzID0gdGFyZ2V0UHJvcGVydHlOYW1lLnNwbGl0KCcjJyk7XG5cbiAgdmFyIG5hbWUgPSBwYXJzZU5hbWUocGFydHNbMF0sIG5zUHJlZml4KTtcbiAgdmFyIGF0dHJOYW1lID0gcGFyc2VOYW1lKHBhcnRzWzFdLCBuYW1lLnByZWZpeCkubmFtZTtcblxuICB2YXIgcmVkZWZpbmVkUHJvcGVydHkgPSB0aGlzLnByb3BlcnRpZXNCeU5hbWVbYXR0ck5hbWVdO1xuICBpZiAoIXJlZGVmaW5lZFByb3BlcnR5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZWZpbmVkIHByb3BlcnR5IDwnICsgYXR0ck5hbWUgKyAnPiBub3QgZm91bmQnKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlcGxhY2VQcm9wZXJ0eShyZWRlZmluZWRQcm9wZXJ0eSwgcCwgcmVwbGFjZSk7XG4gIH1cblxuICBkZWxldGUgcC5yZWRlZmluZXM7XG59O1xuXG5EZXNjcmlwdG9yQnVpbGRlci5wcm90b3R5cGUuYWRkTmFtZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uKHAsIHZhbGlkYXRlKSB7XG4gIHZhciBucyA9IHAubnMsXG4gICAgICBwcm9wc0J5TmFtZSA9IHRoaXMucHJvcGVydGllc0J5TmFtZTtcblxuICBpZiAodmFsaWRhdGUpIHtcbiAgICB0aGlzLmFzc2VydE5vdERlZmluZWQocCwgbnMubmFtZSk7XG4gICAgdGhpcy5hc3NlcnROb3REZWZpbmVkKHAsIG5zLmxvY2FsTmFtZSk7XG4gIH1cblxuICBwcm9wc0J5TmFtZVtucy5uYW1lXSA9IHByb3BzQnlOYW1lW25zLmxvY2FsTmFtZV0gPSBwO1xufTtcblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLnJlbW92ZU5hbWVkUHJvcGVydHkgPSBmdW5jdGlvbihwKSB7XG4gIHZhciBucyA9IHAubnMsXG4gICAgICBwcm9wc0J5TmFtZSA9IHRoaXMucHJvcGVydGllc0J5TmFtZTtcblxuICBkZWxldGUgcHJvcHNCeU5hbWVbbnMubmFtZV07XG4gIGRlbGV0ZSBwcm9wc0J5TmFtZVtucy5sb2NhbE5hbWVdO1xufTtcblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLnNldEJvZHlQcm9wZXJ0eSA9IGZ1bmN0aW9uKHAsIHZhbGlkYXRlKSB7XG5cbiAgaWYgKHZhbGlkYXRlICYmIHRoaXMuYm9keVByb3BlcnR5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ2JvZHkgcHJvcGVydHkgZGVmaW5lZCBtdWx0aXBsZSB0aW1lcyAnICtcbiAgICAgICcoPCcgKyB0aGlzLmJvZHlQcm9wZXJ0eS5ucy5uYW1lICsgJz4sIDwnICsgcC5ucy5uYW1lICsgJz4pJyk7XG4gIH1cblxuICB0aGlzLmJvZHlQcm9wZXJ0eSA9IHA7XG59O1xuXG5EZXNjcmlwdG9yQnVpbGRlci5wcm90b3R5cGUuc2V0SWRQcm9wZXJ0eSA9IGZ1bmN0aW9uKHAsIHZhbGlkYXRlKSB7XG5cbiAgaWYgKHZhbGlkYXRlICYmIHRoaXMuaWRQcm9wZXJ0eSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdpZCBwcm9wZXJ0eSBkZWZpbmVkIG11bHRpcGxlIHRpbWVzICcgK1xuICAgICAgJyg8JyArIHRoaXMuaWRQcm9wZXJ0eS5ucy5uYW1lICsgJz4sIDwnICsgcC5ucy5uYW1lICsgJz4pJyk7XG4gIH1cblxuICB0aGlzLmlkUHJvcGVydHkgPSBwO1xufTtcblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmFzc2VydE5vdERlZmluZWQgPSBmdW5jdGlvbihwLCBuYW1lKSB7XG4gIHZhciBwcm9wZXJ0eU5hbWUgPSBwLm5hbWUsXG4gICAgICBkZWZpbmVkUHJvcGVydHkgPSB0aGlzLnByb3BlcnRpZXNCeU5hbWVbcHJvcGVydHlOYW1lXTtcblxuICBpZiAoZGVmaW5lZFByb3BlcnR5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ3Byb3BlcnR5IDwnICsgcHJvcGVydHlOYW1lICsgJz4gYWxyZWFkeSBkZWZpbmVkOyAnICtcbiAgICAgICdvdmVycmlkZSBvZiA8JyArIGRlZmluZWRQcm9wZXJ0eS5kZWZpbmVkQnkubnMubmFtZSArICcjJyArIGRlZmluZWRQcm9wZXJ0eS5ucy5uYW1lICsgJz4gYnkgJyArXG4gICAgICAnPCcgKyBwLmRlZmluZWRCeS5ucy5uYW1lICsgJyMnICsgcC5ucy5uYW1lICsgJz4gbm90IGFsbG93ZWQgd2l0aG91dCByZWRlZmluZXMnKTtcbiAgfVxufTtcblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmhhc1Byb3BlcnR5ID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzQnlOYW1lW25hbWVdO1xufTtcblxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmFkZFRyYWl0ID0gZnVuY3Rpb24odCwgaW5oZXJpdGVkKSB7XG5cbiAgdmFyIHR5cGVzQnlOYW1lID0gdGhpcy5hbGxUeXBlc0J5TmFtZSxcbiAgICAgIHR5cGVzID0gdGhpcy5hbGxUeXBlcztcblxuICB2YXIgdHlwZU5hbWUgPSB0Lm5hbWU7XG5cbiAgaWYgKHR5cGVOYW1lIGluIHR5cGVzQnlOYW1lKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yRWFjaCh0LnByb3BlcnRpZXMsIGJpbmQoZnVuY3Rpb24ocCkge1xuXG4gICAgLy8gY2xvbmUgcHJvcGVydHkgdG8gYWxsb3cgZXh0ZW5zaW9uc1xuICAgIHAgPSBhc3NpZ24oe30sIHAsIHtcbiAgICAgIG5hbWU6IHAubnMubG9jYWxOYW1lLFxuICAgICAgaW5oZXJpdGVkOiBpbmhlcml0ZWRcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCAnZGVmaW5lZEJ5Jywge1xuICAgICAgdmFsdWU6IHRcbiAgICB9KTtcblxuICAgIHZhciByZXBsYWNlcyA9IHAucmVwbGFjZXMsXG4gICAgICAgIHJlZGVmaW5lcyA9IHAucmVkZWZpbmVzO1xuXG4gICAgLy8gYWRkIHJlcGxhY2UvcmVkZWZpbmUgc3VwcG9ydFxuICAgIGlmIChyZXBsYWNlcyB8fCByZWRlZmluZXMpIHtcbiAgICAgIHRoaXMucmVkZWZpbmVQcm9wZXJ0eShwLCByZXBsYWNlcyB8fCByZWRlZmluZXMsIHJlcGxhY2VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHAuaXNCb2R5KSB7XG4gICAgICAgIHRoaXMuc2V0Qm9keVByb3BlcnR5KHApO1xuICAgICAgfVxuICAgICAgaWYgKHAuaXNJZCkge1xuICAgICAgICB0aGlzLnNldElkUHJvcGVydHkocCk7XG4gICAgICB9XG4gICAgICB0aGlzLmFkZFByb3BlcnR5KHApO1xuICAgIH1cbiAgfSwgdGhpcykpO1xuXG4gIHR5cGVzLnB1c2godCk7XG4gIHR5cGVzQnlOYW1lW3R5cGVOYW1lXSA9IHQ7XG59O1xuXG4vKipcbiAqIEEgcmVnaXN0cnkgb2YgTW9kZGxlIHBhY2thZ2VzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8UGFja2FnZT59IHBhY2thZ2VzXG4gKiBAcGFyYW0ge1Byb3BlcnRpZXN9IHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gUmVnaXN0cnkocGFja2FnZXMsIHByb3BlcnRpZXMpIHtcbiAgdGhpcy5wYWNrYWdlTWFwID0ge307XG4gIHRoaXMudHlwZU1hcCA9IHt9O1xuXG4gIHRoaXMucGFja2FnZXMgPSBbXTtcblxuICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuXG4gIGZvckVhY2gocGFja2FnZXMsIGJpbmQodGhpcy5yZWdpc3RlclBhY2thZ2UsIHRoaXMpKTtcbn1cblxuXG5SZWdpc3RyeS5wcm90b3R5cGUuZ2V0UGFja2FnZSA9IGZ1bmN0aW9uKHVyaU9yUHJlZml4KSB7XG4gIHJldHVybiB0aGlzLnBhY2thZ2VNYXBbdXJpT3JQcmVmaXhdO1xufTtcblxuUmVnaXN0cnkucHJvdG90eXBlLmdldFBhY2thZ2VzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnBhY2thZ2VzO1xufTtcblxuXG5SZWdpc3RyeS5wcm90b3R5cGUucmVnaXN0ZXJQYWNrYWdlID0gZnVuY3Rpb24ocGtnKSB7XG5cbiAgLy8gY29weSBwYWNrYWdlXG4gIHBrZyA9IGFzc2lnbih7fSwgcGtnKTtcblxuICB2YXIgcGtnTWFwID0gdGhpcy5wYWNrYWdlTWFwO1xuXG4gIGVuc3VyZUF2YWlsYWJsZShwa2dNYXAsIHBrZywgJ3ByZWZpeCcpO1xuICBlbnN1cmVBdmFpbGFibGUocGtnTWFwLCBwa2csICd1cmknKTtcblxuICAvLyByZWdpc3RlciB0eXBlc1xuICBmb3JFYWNoKHBrZy50eXBlcywgYmluZChmdW5jdGlvbihkZXNjcmlwdG9yKSB7XG4gICAgdGhpcy5yZWdpc3RlclR5cGUoZGVzY3JpcHRvciwgcGtnKTtcbiAgfSwgdGhpcykpO1xuXG4gIHBrZ01hcFtwa2cudXJpXSA9IHBrZ01hcFtwa2cucHJlZml4XSA9IHBrZztcbiAgdGhpcy5wYWNrYWdlcy5wdXNoKHBrZyk7XG59O1xuXG5cbi8qKlxuICogUmVnaXN0ZXIgYSB0eXBlIGZyb20gYSBzcGVjaWZpYyBwYWNrYWdlIHdpdGggdXNcbiAqL1xuUmVnaXN0cnkucHJvdG90eXBlLnJlZ2lzdGVyVHlwZSA9IGZ1bmN0aW9uKHR5cGUsIHBrZykge1xuXG4gIHR5cGUgPSBhc3NpZ24oe30sIHR5cGUsIHtcbiAgICBzdXBlckNsYXNzOiAodHlwZS5zdXBlckNsYXNzIHx8IFtdKS5zbGljZSgpLFxuICAgIGV4dGVuZHM6ICh0eXBlLmV4dGVuZHMgfHwgW10pLnNsaWNlKCksXG4gICAgcHJvcGVydGllczogKHR5cGUucHJvcGVydGllcyB8fCBbXSkuc2xpY2UoKSxcbiAgICBtZXRhOiBhc3NpZ24oKHR5cGUubWV0YSB8fCB7fSkpXG4gIH0pO1xuXG4gIHZhciBucyA9IHBhcnNlTmFtZSh0eXBlLm5hbWUsIHBrZy5wcmVmaXgpLFxuICAgICAgbmFtZSA9IG5zLm5hbWUsXG4gICAgICBwcm9wZXJ0aWVzQnlOYW1lID0ge307XG5cbiAgLy8gcGFyc2UgcHJvcGVydGllc1xuICBmb3JFYWNoKHR5cGUucHJvcGVydGllcywgYmluZChmdW5jdGlvbihwKSB7XG5cbiAgICAvLyBuYW1lc3BhY2UgcHJvcGVydHkgbmFtZXNcbiAgICB2YXIgcHJvcGVydHlOcyA9IHBhcnNlTmFtZShwLm5hbWUsIG5zLnByZWZpeCksXG4gICAgICAgIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5TnMubmFtZTtcblxuICAgIC8vIG5hbWVzcGFjZSBwcm9wZXJ0eSB0eXBlc1xuICAgIGlmICghaXNCdWlsdEluKHAudHlwZSkpIHtcbiAgICAgIHAudHlwZSA9IHBhcnNlTmFtZShwLnR5cGUsIHByb3BlcnR5TnMucHJlZml4KS5uYW1lO1xuICAgIH1cblxuICAgIGFzc2lnbihwLCB7XG4gICAgICBuczogcHJvcGVydHlOcyxcbiAgICAgIG5hbWU6IHByb3BlcnR5TmFtZVxuICAgIH0pO1xuXG4gICAgcHJvcGVydGllc0J5TmFtZVtwcm9wZXJ0eU5hbWVdID0gcDtcbiAgfSwgdGhpcykpO1xuXG4gIC8vIHVwZGF0ZSBucyArIG5hbWVcbiAgYXNzaWduKHR5cGUsIHtcbiAgICBuczogbnMsXG4gICAgbmFtZTogbmFtZSxcbiAgICBwcm9wZXJ0aWVzQnlOYW1lOiBwcm9wZXJ0aWVzQnlOYW1lXG4gIH0pO1xuXG4gIGZvckVhY2godHlwZS5leHRlbmRzLCBiaW5kKGZ1bmN0aW9uKGV4dGVuZHNOYW1lKSB7XG4gICAgdmFyIGV4dGVuZGVkID0gdGhpcy50eXBlTWFwW2V4dGVuZHNOYW1lXTtcblxuICAgIGV4dGVuZGVkLnRyYWl0cyA9IGV4dGVuZGVkLnRyYWl0cyB8fCBbXTtcbiAgICBleHRlbmRlZC50cmFpdHMucHVzaChuYW1lKTtcbiAgfSwgdGhpcykpO1xuXG4gIC8vIGxpbmsgdG8gcGFja2FnZVxuICB0aGlzLmRlZmluZVBhY2thZ2UodHlwZSwgcGtnKTtcblxuICAvLyByZWdpc3RlclxuICB0aGlzLnR5cGVNYXBbbmFtZV0gPSB0eXBlO1xufTtcblxuXG4vKipcbiAqIFRyYXZlcnNlIHRoZSB0eXBlIGhpZXJhcmNoeSBmcm9tIGJvdHRvbSB0byB0b3AsXG4gKiBjYWxsaW5nIGl0ZXJhdG9yIHdpdGggKHR5cGUsIGluaGVyaXRlZCkgZm9yIGFsbCBlbGVtZW50cyBpblxuICogdGhlIGluaGVyaXRhbmNlIGNoYWluLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBuc05hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdG9yXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFt0cmFpdD1mYWxzZV1cbiAqL1xuUmVnaXN0cnkucHJvdG90eXBlLm1hcFR5cGVzID0gZnVuY3Rpb24obnNOYW1lLCBpdGVyYXRvciwgdHJhaXQpIHtcblxuICB2YXIgdHlwZSA9IGlzQnVpbHRJbihuc05hbWUubmFtZSkgPyB7IG5hbWU6IG5zTmFtZS5uYW1lIH0gOiB0aGlzLnR5cGVNYXBbbnNOYW1lLm5hbWVdO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvKipcbiAgICogVHJhdmVyc2UgdGhlIHNlbGVjdGVkIHRyYWl0LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gY2xzXG4gICAqL1xuICBmdW5jdGlvbiB0cmF2ZXJzZVRyYWl0KGNscykge1xuICAgIHJldHVybiB0cmF2ZXJzZVN1cGVyKGNscywgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogVHJhdmVyc2UgdGhlIHNlbGVjdGVkIHN1cGVyIHR5cGUgb3IgdHJhaXRcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGNsc1xuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFt0cmFpdD1mYWxzZV1cbiAgICovXG4gIGZ1bmN0aW9uIHRyYXZlcnNlU3VwZXIoY2xzLCB0cmFpdCkge1xuICAgIHZhciBwYXJlbnROcyA9IHBhcnNlTmFtZShjbHMsIGlzQnVpbHRJbihjbHMpID8gJycgOiBuc05hbWUucHJlZml4KTtcbiAgICBzZWxmLm1hcFR5cGVzKHBhcmVudE5zLCBpdGVyYXRvciwgdHJhaXQpO1xuICB9XG5cbiAgaWYgKCF0eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHR5cGUgPCcgKyBuc05hbWUubmFtZSArICc+Jyk7XG4gIH1cblxuICBmb3JFYWNoKHR5cGUuc3VwZXJDbGFzcywgdHJhaXQgPyB0cmF2ZXJzZVRyYWl0IDogdHJhdmVyc2VTdXBlcik7XG5cbiAgLy8gY2FsbCBpdGVyYXRvciB3aXRoICh0eXBlLCBpbmhlcml0ZWQ9IXRyYWl0KVxuICBpdGVyYXRvcih0eXBlLCAhdHJhaXQpO1xuXG4gIGZvckVhY2godHlwZS50cmFpdHMsIHRyYXZlcnNlVHJhaXQpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGVmZmVjdGl2ZSBkZXNjcmlwdG9yIGZvciBhIHR5cGUuXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSB0eXBlIHRoZSBuYW1lc3BhY2VkIG5hbWUgKG5zOmxvY2FsTmFtZSkgb2YgdGhlIHR5cGVcbiAqXG4gKiBAcmV0dXJuIHtEZXNjcmlwdG9yfSB0aGUgcmVzdWx0aW5nIGVmZmVjdGl2ZSBkZXNjcmlwdG9yXG4gKi9cblJlZ2lzdHJ5LnByb3RvdHlwZS5nZXRFZmZlY3RpdmVEZXNjcmlwdG9yID0gZnVuY3Rpb24obmFtZSkge1xuXG4gIHZhciBuc05hbWUgPSBwYXJzZU5hbWUobmFtZSk7XG5cbiAgdmFyIGJ1aWxkZXIgPSBuZXcgRGVzY3JpcHRvckJ1aWxkZXIobnNOYW1lKTtcblxuICB0aGlzLm1hcFR5cGVzKG5zTmFtZSwgZnVuY3Rpb24odHlwZSwgaW5oZXJpdGVkKSB7XG4gICAgYnVpbGRlci5hZGRUcmFpdCh0eXBlLCBpbmhlcml0ZWQpO1xuICB9KTtcblxuICB2YXIgZGVzY3JpcHRvciA9IGJ1aWxkZXIuYnVpbGQoKTtcblxuICAvLyBkZWZpbmUgcGFja2FnZSBsaW5rXG4gIHRoaXMuZGVmaW5lUGFja2FnZShkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmFsbFR5cGVzW2Rlc2NyaXB0b3IuYWxsVHlwZXMubGVuZ3RoIC0gMV0uJHBrZyk7XG5cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG5cblJlZ2lzdHJ5LnByb3RvdHlwZS5kZWZpbmVQYWNrYWdlID0gZnVuY3Rpb24odGFyZ2V0LCBwa2cpIHtcbiAgdGhpcy5wcm9wZXJ0aWVzLmRlZmluZSh0YXJnZXQsICckcGtnJywgeyB2YWx1ZTogcGtnIH0pO1xufTtcblxuXG5cbi8vLy8vLy8vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZW5zdXJlQXZhaWxhYmxlKHBhY2thZ2VNYXAsIHBrZywgaWRlbnRpZmllcktleSkge1xuXG4gIHZhciB2YWx1ZSA9IHBrZ1tpZGVudGlmaWVyS2V5XTtcblxuICBpZiAodmFsdWUgaW4gcGFja2FnZU1hcCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGFja2FnZSB3aXRoICcgKyBpZGVudGlmaWVyS2V5ICsgJyA8JyArIHZhbHVlICsgJz4gYWxyZWFkeSBkZWZpbmVkJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHV0aWxpdHkgdGhhdCBnZXRzIGFuZCBzZXRzIHByb3BlcnRpZXMgb2YgbW9kZWwgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtNb2RlbH0gbW9kZWxcbiAqL1xuZnVuY3Rpb24gUHJvcGVydGllcyhtb2RlbCkge1xuICB0aGlzLm1vZGVsID0gbW9kZWw7XG59XG5cblxuLyoqXG4gKiBTZXRzIGEgbmFtZWQgcHJvcGVydHkgb24gdGhlIHRhcmdldCBlbGVtZW50LlxuICogSWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgdGhlIHByb3BlcnR5IGdldHMgZGVsZXRlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtPYmplY3R9IHZhbHVlXG4gKi9cblByb3BlcnRpZXMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKHRhcmdldCwgbmFtZSwgdmFsdWUpIHtcblxuICB2YXIgcHJvcGVydHkgPSB0aGlzLm1vZGVsLmdldFByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIG5hbWUpO1xuXG4gIHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5uYW1lO1xuXG4gIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAvLyB1bnNldCB0aGUgcHJvcGVydHksIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgdW5kZWZpbmVkO1xuICAgIC8vIGRlbGV0ZSBmcm9tICRhdHRycyAoZm9yIGV4dGVuc2lvbnMpIG9yIHRoZSB0YXJnZXQgaXRzZWxmXG4gICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5TmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0YXJnZXQuJGF0dHJzW25hbWVdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBzZXQgdGhlIHByb3BlcnR5LCBkZWZpbmluZyB3ZWxsIGRlZmluZWQgcHJvcGVydGllcyBvbiB0aGUgZmx5XG4gICAgLy8gb3Igc2ltcGx5IHVwZGF0aW5nIHRoZW0gaW4gdGFyZ2V0LiRhdHRycyAoZm9yIGV4dGVuc2lvbnMpXG4gICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICBpZiAocHJvcGVydHlOYW1lIGluIHRhcmdldCkge1xuICAgICAgICB0YXJnZXRbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXQuJGF0dHJzW25hbWVdID0gdmFsdWU7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG5hbWVkIHByb3BlcnR5IG9mIHRoZSBnaXZlbiBlbGVtZW50XG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSAge1N0cmluZ30gbmFtZVxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuUHJvcGVydGllcy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24odGFyZ2V0LCBuYW1lKSB7XG5cbiAgdmFyIHByb3BlcnR5ID0gdGhpcy5tb2RlbC5nZXRQcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBuYW1lKTtcblxuICBpZiAoIXByb3BlcnR5KSB7XG4gICAgcmV0dXJuIHRhcmdldC4kYXR0cnNbbmFtZV07XG4gIH1cblxuICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHkubmFtZTtcblxuICAvLyBjaGVjayBpZiBhY2Nlc3MgdG8gY29sbGVjdGlvbiBwcm9wZXJ0eSBhbmQgbGF6aWx5IGluaXRpYWxpemUgaXRcbiAgaWYgKCF0YXJnZXRbcHJvcGVydHlOYW1lXSAmJiBwcm9wZXJ0eS5pc01hbnkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCBbXSk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5TmFtZV07XG59O1xuXG5cbi8qKlxuICogRGVmaW5lIGEgcHJvcGVydHkgb24gdGhlIHRhcmdldCBlbGVtZW50XG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSAge1N0cmluZ30gbmFtZVxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKi9cblByb3BlcnRpZXMucHJvdG90eXBlLmRlZmluZSA9IGZ1bmN0aW9uKHRhcmdldCwgbmFtZSwgb3B0aW9ucykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCBvcHRpb25zKTtcbn07XG5cblxuLyoqXG4gKiBEZWZpbmUgdGhlIGRlc2NyaXB0b3IgZm9yIGFuIGVsZW1lbnRcbiAqL1xuUHJvcGVydGllcy5wcm90b3R5cGUuZGVmaW5lRGVzY3JpcHRvciA9IGZ1bmN0aW9uKHRhcmdldCwgZGVzY3JpcHRvcikge1xuICB0aGlzLmRlZmluZSh0YXJnZXQsICckZGVzY3JpcHRvcicsIHsgdmFsdWU6IGRlc2NyaXB0b3IgfSk7XG59O1xuXG4vKipcbiAqIERlZmluZSB0aGUgbW9kZWwgZm9yIGFuIGVsZW1lbnRcbiAqL1xuUHJvcGVydGllcy5wcm90b3R5cGUuZGVmaW5lTW9kZWwgPSBmdW5jdGlvbih0YXJnZXQsIG1vZGVsKSB7XG4gIHRoaXMuZGVmaW5lKHRhcmdldCwgJyRtb2RlbCcsIHsgdmFsdWU6IG1vZGVsIH0pO1xufTtcblxuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eS5uYW1lLCB7XG4gICAgZW51bWVyYWJsZTogIXByb3BlcnR5LmlzUmVmZXJlbmNlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbi8vLy8gTW9kZGxlIGltcGxlbWVudGF0aW9uIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBAY2xhc3MgTW9kZGxlXG4gKlxuICogQSBtb2RlbCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBlbGVtZW50cyBvZiBhIHNwZWNpZmljIHR5cGUuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgTW9kZGxlID0gcmVxdWlyZSgnbW9kZGxlJyk7XG4gKlxuICogdmFyIHBrZyA9IHtcbiAqICAgbmFtZTogJ215cGFja2FnZScsXG4gKiAgIHByZWZpeDogJ215JyxcbiAqICAgdHlwZXM6IFtcbiAqICAgICB7IG5hbWU6ICdSb290JyB9XG4gKiAgIF1cbiAqIH07XG4gKlxuICogdmFyIG1vZGRsZSA9IG5ldyBNb2RkbGUoW3BrZ10pO1xuICpcbiAqIEBwYXJhbSB7QXJyYXk8UGFja2FnZT59IHBhY2thZ2VzIHRoZSBwYWNrYWdlcyB0byBjb250YWluXG4gKi9cbmZ1bmN0aW9uIE1vZGRsZShwYWNrYWdlcykge1xuXG4gIHRoaXMucHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKHRoaXMpO1xuXG4gIHRoaXMuZmFjdG9yeSA9IG5ldyBGYWN0b3J5KHRoaXMsIHRoaXMucHJvcGVydGllcyk7XG4gIHRoaXMucmVnaXN0cnkgPSBuZXcgUmVnaXN0cnkocGFja2FnZXMsIHRoaXMucHJvcGVydGllcyk7XG5cbiAgdGhpcy50eXBlQ2FjaGUgPSB7fTtcbn1cblxuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuXG4gKlxuICogQG1ldGhvZCBNb2RkbGUjY3JlYXRlXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgZm9vID0gbW9kZGxlLmNyZWF0ZSgnbXk6Rm9vJyk7XG4gKiB2YXIgYmFyID0gbW9kZGxlLmNyZWF0ZSgnbXk6QmFyJywgeyBpZDogJ0JBUl8xJyB9KTtcbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd8T2JqZWN0fSBkZXNjcmlwdG9yIHRoZSB0eXBlIGRlc2NyaXB0b3Igb3IgbmFtZSBrbm93IHRvIHRoZSBtb2RlbFxuICogQHBhcmFtICB7T2JqZWN0fSBhdHRycyAgIGEgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgdG8gaW5pdGlhbGl6ZSB0aGUgbW9kZWwgaW5zdGFuY2Ugd2l0aFxuICogQHJldHVybiB7T2JqZWN0fSAgICAgICAgIG1vZGVsIGluc3RhbmNlXG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24oZGVzY3JpcHRvciwgYXR0cnMpIHtcbiAgdmFyIFR5cGUgPSB0aGlzLmdldFR5cGUoZGVzY3JpcHRvcik7XG5cbiAgaWYgKCFUeXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHR5cGUgPCcgKyBkZXNjcmlwdG9yICsgJz4nKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZShhdHRycyk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgdHlwZSByZXByZXNlbnRpbmcgYSBnaXZlbiBkZXNjcmlwdG9yXG4gKlxuICogQG1ldGhvZCBNb2RkbGUjZ2V0VHlwZVxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIEZvbyA9IG1vZGRsZS5nZXRUeXBlKCdteTpGb28nKTtcbiAqIHZhciBmb28gPSBuZXcgRm9vKHsgJ2lkJyA6ICdGT09fMScgfSk7XG4gKlxuICogQHBhcmFtICB7U3RyaW5nfE9iamVjdH0gZGVzY3JpcHRvciB0aGUgdHlwZSBkZXNjcmlwdG9yIG9yIG5hbWUga25vdyB0byB0aGUgbW9kZWxcbiAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICB0aGUgdHlwZSByZXByZXNlbnRpbmcgdGhlIGRlc2NyaXB0b3JcbiAqL1xuTW9kZGxlLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24oZGVzY3JpcHRvcikge1xuXG4gIHZhciBjYWNoZSA9IHRoaXMudHlwZUNhY2hlO1xuXG4gIHZhciBuYW1lID0gaXNTdHJpbmcoZGVzY3JpcHRvcikgPyBkZXNjcmlwdG9yIDogZGVzY3JpcHRvci5ucy5uYW1lO1xuXG4gIHZhciB0eXBlID0gY2FjaGVbbmFtZV07XG5cbiAgaWYgKCF0eXBlKSB7XG4gICAgZGVzY3JpcHRvciA9IHRoaXMucmVnaXN0cnkuZ2V0RWZmZWN0aXZlRGVzY3JpcHRvcihuYW1lKTtcbiAgICB0eXBlID0gY2FjaGVbbmFtZV0gPSB0aGlzLmZhY3RvcnkuY3JlYXRlVHlwZShkZXNjcmlwdG9yKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYW55LWVsZW1lbnQgdHlwZSB0byBiZSB1c2VkIHdpdGhpbiBtb2RlbCBpbnN0YW5jZXMuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBjcmVhdGUgY3VzdG9tIGVsZW1lbnRzIHRoYXQgbGllIG91dHNpZGUgdGhlIG1ldGEtbW9kZWwuXG4gKiBUaGUgY3JlYXRlZCBlbGVtZW50IGNvbnRhaW5zIGFsbCB0aGUgbWV0YS1kYXRhIHJlcXVpcmVkIHRvIHNlcmlhbGl6ZSBpdFxuICogYXMgcGFydCBvZiBtZXRhLW1vZGVsIGVsZW1lbnRzLlxuICpcbiAqIEBtZXRob2QgTW9kZGxlI2NyZWF0ZUFueVxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGZvbyA9IG1vZGRsZS5jcmVhdGVBbnkoJ3ZlbmRvcjpGb28nLCAnaHR0cDovL3ZlbmRvcicsIHtcbiAqICAgdmFsdWU6ICdiYXInXG4gKiB9KTtcbiAqXG4gKiB2YXIgY29udGFpbmVyID0gbW9kZGxlLmNyZWF0ZSgnbXk6Q29udGFpbmVyJywgJ2h0dHA6Ly9teScsIHtcbiAqICAgYW55OiBbIGZvbyBdXG4gKiB9KTtcbiAqXG4gKiAvLyBnbyBhaGVhZCBhbmQgc2VyaWFsaXplIHRoZSBzdHVmZlxuICpcbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWUgIHRoZSBuYW1lIG9mIHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gIHtTdHJpbmd9IG5zVXJpIHRoZSBuYW1lc3BhY2UgdXJpIG9mIHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gIHtPYmplY3R9IFtwcm9wZXJ0aWVzXSBhIG1hcCBvZiBwcm9wZXJ0aWVzIHRvIGluaXRpYWxpemUgdGhlIGluc3RhbmNlIHdpdGhcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIGFueSB0eXBlIGluc3RhbmNlXG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuY3JlYXRlQW55ID0gZnVuY3Rpb24obmFtZSwgbnNVcmksIHByb3BlcnRpZXMpIHtcblxuICB2YXIgbmFtZU5zID0gcGFyc2VOYW1lKG5hbWUpO1xuXG4gIHZhciBlbGVtZW50ID0ge1xuICAgICR0eXBlOiBuYW1lLFxuICAgICRpbnN0YW5jZU9mOiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICByZXR1cm4gdHlwZSA9PT0gdGhpcy4kdHlwZTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGRlc2NyaXB0b3IgPSB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBpc0dlbmVyaWM6IHRydWUsXG4gICAgbnM6IHtcbiAgICAgIHByZWZpeDogbmFtZU5zLnByZWZpeCxcbiAgICAgIGxvY2FsTmFtZTogbmFtZU5zLmxvY2FsTmFtZSxcbiAgICAgIHVyaTogbnNVcmlcbiAgICB9XG4gIH07XG5cbiAgdGhpcy5wcm9wZXJ0aWVzLmRlZmluZURlc2NyaXB0b3IoZWxlbWVudCwgZGVzY3JpcHRvcik7XG4gIHRoaXMucHJvcGVydGllcy5kZWZpbmVNb2RlbChlbGVtZW50LCB0aGlzKTtcbiAgdGhpcy5wcm9wZXJ0aWVzLmRlZmluZShlbGVtZW50LCAnJHBhcmVudCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlIH0pO1xuXG4gIGZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24oYSwga2V5KSB7XG4gICAgaWYgKGlzT2JqZWN0KGEpICYmIGEudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZWxlbWVudFthLm5hbWVdID0gYS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudFtrZXldID0gYTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcmVnaXN0ZXJlZCBwYWNrYWdlIGJ5IHVyaSBvciBwcmVmaXhcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBwYWNrYWdlXG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuZ2V0UGFja2FnZSA9IGZ1bmN0aW9uKHVyaU9yUHJlZml4KSB7XG4gIHJldHVybiB0aGlzLnJlZ2lzdHJ5LmdldFBhY2thZ2UodXJpT3JQcmVmaXgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgc25hcHNob3Qgb2YgYWxsIGtub3duIHBhY2thZ2VzXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSB0aGUgcGFja2FnZVxuICovXG5Nb2RkbGUucHJvdG90eXBlLmdldFBhY2thZ2VzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnJlZ2lzdHJ5LmdldFBhY2thZ2VzKCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGRlc2NyaXB0b3IgZm9yIGFuIGVsZW1lbnRcbiAqL1xuTW9kZGxlLnByb3RvdHlwZS5nZXRFbGVtZW50RGVzY3JpcHRvciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQuJGRlc2NyaXB0b3I7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gZGVzY3JpcHRvciBvciBpbnN0YW5jZVxuICogcmVwcmVzZW50cyB0aGUgZ2l2ZW4gdHlwZS5cbiAqXG4gKiBNYXkgYmUgYXBwbGllZCB0byB0aGlzLCBpZiBlbGVtZW50IGlzIG9taXR0ZWQuXG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuaGFzVHlwZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIHR5cGUpIHtcbiAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHR5cGUgPSBlbGVtZW50O1xuICAgIGVsZW1lbnQgPSB0aGlzO1xuICB9XG5cbiAgdmFyIGRlc2NyaXB0b3IgPSBlbGVtZW50LiRtb2RlbC5nZXRFbGVtZW50RGVzY3JpcHRvcihlbGVtZW50KTtcblxuICByZXR1cm4gKHR5cGUgaW4gZGVzY3JpcHRvci5hbGxUeXBlc0J5TmFtZSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGRlc2NyaXB0b3Igb2YgYW4gZWxlbWVudHMgbmFtZWQgcHJvcGVydHlcbiAqL1xuTW9kZGxlLnByb3RvdHlwZS5nZXRQcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSkge1xuICByZXR1cm4gdGhpcy5nZXRFbGVtZW50RGVzY3JpcHRvcihlbGVtZW50KS5wcm9wZXJ0aWVzQnlOYW1lW3Byb3BlcnR5XTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIG1hcHBlZCB0eXBlJ3MgZGVzY3JpcHRvclxuICovXG5Nb2RkbGUucHJvdG90eXBlLmdldFR5cGVEZXNjcmlwdG9yID0gZnVuY3Rpb24odHlwZSkge1xuICByZXR1cm4gdGhpcy5yZWdpc3RyeS50eXBlTWFwW3R5cGVdO1xufTtcblxuZXhwb3J0IHsgTW9kZGxlLCBjb2VyY2VUeXBlLCBpc0J1aWx0SW4gYXMgaXNCdWlsdEluVHlwZSwgaXNTaW1wbGUgYXMgaXNTaW1wbGVUeXBlLCBwYXJzZU5hbWUgYXMgcGFyc2VOYW1lTlMgfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvcmVmcycpO1xuXG5tb2R1bGUuZXhwb3J0cy5Db2xsZWN0aW9uID0gcmVxdWlyZSgnLi9saWIvY29sbGVjdGlvbicpOyIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBBbiBlbXB0eSBjb2xsZWN0aW9uIHN0dWIuIFVzZSB7QGxpbmsgUmVmc0NvbGxlY3Rpb24uZXh0ZW5kfSB0byBleHRlbmQgYVxuICogY29sbGVjdGlvbiB3aXRoIHJlZiBzZW1hbnRpY3MuXG4gKlxuICogQGNsYXNzIFJlZnNDb2xsZWN0aW9uXG4gKi9cblxuLyoqXG4gKiBFeHRlbmRzIGEgY29sbGVjdGlvbiB3aXRoIHtAbGluayBSZWZzfSBhd2FyZSBtZXRob2RzXG4gKlxuICogQG1lbWJlcm9mIFJlZnNDb2xsZWN0aW9uXG4gKiBAc3RhdGljXG4gKlxuICogQHBhcmFtICB7QXJyYXk8T2JqZWN0Pn0gY29sbGVjdGlvblxuICogQHBhcmFtICB7UmVmc30gcmVmcyBpbnN0YW5jZVxuICogQHBhcmFtICB7T2JqZWN0fSBwcm9wZXJ0eSByZXByZXNlbnRlZCBieSB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXQgb2JqZWN0IHRoZSBjb2xsZWN0aW9uIGlzIGF0dGFjaGVkIHRvXG4gKlxuICogQHJldHVybiB7UmVmc0NvbGxlY3Rpb248T2JqZWN0Pn0gdGhlIGV4dGVuZGVkIGFycmF5XG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChjb2xsZWN0aW9uLCByZWZzLCBwcm9wZXJ0eSwgdGFyZ2V0KSB7XG5cbiAgdmFyIGludmVyc2VQcm9wZXJ0eSA9IHByb3BlcnR5LmludmVyc2U7XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGdpdmVuIGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkgYW5kIHJldHVybnMgaXQuXG4gICAqXG4gICAqIEBtZXRob2QgUmVmc0NvbGxlY3Rpb24jcmVtb3ZlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIHJlbW92ZVxuICAgKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbGxlY3Rpb24sICdyZW1vdmUnLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHZhciBpZHggPSB0aGlzLmluZGV4T2YoZWxlbWVudCk7XG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLnNwbGljZShpZHgsIDEpO1xuXG4gICAgICAgIC8vIHVuc2V0IGludmVyc2VcbiAgICAgICAgcmVmcy51bnNldChlbGVtZW50LCBpbnZlcnNlUHJvcGVydHksIHRhcmdldCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29sbGVjdGlvbiBjb250YWlucyB0aGUgZ2l2ZW4gZWxlbWVudFxuICAgKlxuICAgKiBAbWV0aG9kIFJlZnNDb2xsZWN0aW9uI2NvbnRhaW5zXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIGNoZWNrIGZvclxuICAgKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbGxlY3Rpb24sICdjb250YWlucycsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZXhPZihlbGVtZW50KSAhPT0gLTE7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogQWRkcyBhbiBlbGVtZW50IHRvIHRoZSBhcnJheSwgdW5sZXNzIGl0IGV4aXN0cyBhbHJlYWR5IChzZXQgc2VtYW50aWNzKS5cbiAgICpcbiAgICogQG1ldGhvZCBSZWZzQ29sbGVjdGlvbiNhZGRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgdGhlIGVsZW1lbnQgdG8gYWRkXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBvcHRpb25hbCBpbmRleCB0byBhZGQgZWxlbWVudCB0b1xuICAgKiAgICAgICAgICAgICAgICAgKHBvc3NpYmx5IG1vdmluZyBvdGhlciBlbGVtZW50cyBhcm91bmQpXG4gICAqL1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29sbGVjdGlvbiwgJ2FkZCcsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24oZWxlbWVudCwgaWR4KSB7XG5cbiAgICAgIHZhciBjdXJyZW50SWR4ID0gdGhpcy5pbmRleE9mKGVsZW1lbnQpO1xuXG4gICAgICBpZiAodHlwZW9mIGlkeCA9PT0gJ3VuZGVmaW5lZCcpIHtcblxuICAgICAgICBpZiAoY3VycmVudElkeCAhPT0gLTEpIHtcbiAgICAgICAgICAvLyBlbGVtZW50IGFscmVhZHkgaW4gY29sbGVjdGlvbiAoISlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgdG8gZW5kIG9mIGFycmF5LCBhcyBubyBpZHggaXMgc3BlY2lmaWVkXG4gICAgICAgIGlkeCA9IHRoaXMubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICAvLyBoYW5kbGUgYWxyZWFkeSBpbiBjb2xsZWN0aW9uXG4gICAgICBpZiAoY3VycmVudElkeCAhPT0gLTEpIHtcblxuICAgICAgICAvLyByZW1vdmUgZWxlbWVudCBmcm9tIGN1cnJlbnRJZHhcbiAgICAgICAgdGhpcy5zcGxpY2UoY3VycmVudElkeCwgMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCBlbGVtZW50IGF0IGlkeFxuICAgICAgdGhpcy5zcGxpY2UoaWR4LCAwLCBlbGVtZW50KTtcblxuICAgICAgaWYgKGN1cnJlbnRJZHggPT09IC0xKSB7XG4gICAgICAgIC8vIHNldCBpbnZlcnNlLCB1bmxlc3MgZWxlbWVudCB3YXNcbiAgICAgICAgLy8gaW4gY29sbGVjdGlvbiBhbHJlYWR5XG4gICAgICAgIHJlZnMuc2V0KGVsZW1lbnQsIGludmVyc2VQcm9wZXJ0eSwgdGFyZ2V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIGEgc2ltcGxlIG1hcmtlciwgaWRlbnRpZnlpbmcgdGhpcyBlbGVtZW50XG4gIC8vIGFzIGJlaW5nIGEgcmVmcyBjb2xsZWN0aW9uXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb2xsZWN0aW9uLCAnX19yZWZzX2NvbGxlY3Rpb24nLCB7XG4gICAgdmFsdWU6IHRydWVcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbGxlY3Rpb247XG59XG5cblxuZnVuY3Rpb24gaXNFeHRlbmRlZChjb2xsZWN0aW9uKSB7XG4gIHJldHVybiBjb2xsZWN0aW9uLl9fcmVmc19jb2xsZWN0aW9uID09PSB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5leHRlbmQgPSBleHRlbmQ7XG5cbm1vZHVsZS5leHBvcnRzLmlzRXh0ZW5kZWQgPSBpc0V4dGVuZGVkOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIENvbGxlY3Rpb24gPSByZXF1aXJlKCcuL2NvbGxlY3Rpb24nKTtcblxuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkoZSwgcHJvcGVydHkpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCBwcm9wZXJ0eS5uYW1lIHx8IHByb3BlcnR5KTtcbn1cblxuZnVuY3Rpb24gZGVmaW5lQ29sbGVjdGlvblByb3BlcnR5KHJlZiwgcHJvcGVydHksIHRhcmdldCkge1xuXG4gIHZhciBjb2xsZWN0aW9uID0gQ29sbGVjdGlvbi5leHRlbmQodGFyZ2V0W3Byb3BlcnR5Lm5hbWVdIHx8IFtdLCByZWYsIHByb3BlcnR5LCB0YXJnZXQpO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5Lm5hbWUsIHtcbiAgICBlbnVtZXJhYmxlOiBwcm9wZXJ0eS5lbnVtZXJhYmxlLFxuICAgIHZhbHVlOiBjb2xsZWN0aW9uXG4gIH0pO1xuXG4gIGlmIChjb2xsZWN0aW9uLmxlbmd0aCkge1xuXG4gICAgY29sbGVjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uKG8pIHtcbiAgICAgIHJlZi5zZXQobywgcHJvcGVydHkuaW52ZXJzZSwgdGFyZ2V0KTtcbiAgICB9KTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHJlZiwgcHJvcGVydHksIHRhcmdldCkge1xuXG4gIHZhciBpbnZlcnNlUHJvcGVydHkgPSBwcm9wZXJ0eS5pbnZlcnNlO1xuXG4gIHZhciBfdmFsdWUgPSB0YXJnZXRbcHJvcGVydHkubmFtZV07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHkubmFtZSwge1xuICAgIGNvbmZpZ3VyYWJsZTogcHJvcGVydHkuY29uZmlndXJhYmxlLFxuICAgIGVudW1lcmFibGU6IHByb3BlcnR5LmVudW1lcmFibGUsXG5cbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIF92YWx1ZTtcbiAgICB9LFxuXG4gICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuXG4gICAgICAvLyByZXR1cm4gaWYgd2UgYWxyZWFkeSBwZXJmb3JtZWQgYWxsIGNoYW5nZXNcbiAgICAgIGlmICh2YWx1ZSA9PT0gX3ZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIG9sZCA9IF92YWx1ZTtcblxuICAgICAgLy8gdGVtcG9yYXJ5IHNldCBudWxsXG4gICAgICBfdmFsdWUgPSBudWxsO1xuXG4gICAgICBpZiAob2xkKSB7XG4gICAgICAgIHJlZi51bnNldChvbGQsIGludmVyc2VQcm9wZXJ0eSwgdGFyZ2V0KTtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0IG5ldyB2YWx1ZVxuICAgICAgX3ZhbHVlID0gdmFsdWU7XG5cbiAgICAgIC8vIHNldCBpbnZlcnNlIHZhbHVlXG4gICAgICByZWYuc2V0KF92YWx1ZSwgaW52ZXJzZVByb3BlcnR5LCB0YXJnZXQpO1xuICAgIH1cbiAgfSk7XG5cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHJlZmVyZW5jZXMgb2JqZWN0IGRlZmluaW5nIHR3byBpbnZlcnNseSByZWxhdGVkXG4gKiBhdHRyaWJ1dGUgZGVzY3JpcHRvcnMgYSBhbmQgYi5cbiAqXG4gKiA8cD5cbiAqICAgV2hlbiBib3VuZCB0byBhbiBvYmplY3QgdXNpbmcge0BsaW5rIFJlZnMjYmluZH0gdGhlIHJlZmVyZW5jZXNcbiAqICAgZ2V0IGFjdGl2YXRlZCBhbmQgZW5zdXJlIHRoYXQgYWRkIGFuZCByZW1vdmUgb3BlcmF0aW9ucyBhcmUgYXBwbGllZFxuICogICByZXZlcnNlbHksIHRvby5cbiAqIDwvcD5cbiAqXG4gKiA8cD5cbiAqICAgRm9yIGF0dHJpYnV0ZXMgcmVwcmVzZW50ZWQgYXMgY29sbGVjdGlvbnMge0BsaW5rIFJlZnN9IHByb3ZpZGVzIHRoZVxuICogICB7QGxpbmsgUmVmc0NvbGxlY3Rpb24jYWRkfSwge0BsaW5rIFJlZnNDb2xsZWN0aW9uI3JlbW92ZX0gYW5kIHtAbGluayBSZWZzQ29sbGVjdGlvbiNjb250YWluc30gZXh0ZW5zaW9uc1xuICogICB0aGF0IG11c3QgYmUgdXNlZCB0byBwcm9wZXJseSBob29rIGludG8gdGhlIGludmVyc2UgY2hhbmdlIG1lY2hhbmlzbS5cbiAqIDwvcD5cbiAqXG4gKiBAY2xhc3MgUmVmc1xuICpcbiAqIEBjbGFzc2Rlc2MgQSBiaS1kaXJlY3Rpb25hbCByZWZlcmVuY2UgYmV0d2VlbiB0d28gYXR0cmlidXRlcy5cbiAqXG4gKiBAcGFyYW0ge1JlZnMuQXR0cmlidXRlRGVzY3JpcHRvcn0gYSBwcm9wZXJ0eSBkZXNjcmlwdG9yXG4gKiBAcGFyYW0ge1JlZnMuQXR0cmlidXRlRGVzY3JpcHRvcn0gYiBwcm9wZXJ0eSBkZXNjcmlwdG9yXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgcmVmcyA9IFJlZnMoeyBuYW1lOiAnd2hlZWxzJywgY29sbGVjdGlvbjogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9LCB7IG5hbWU6ICdjYXInIH0pO1xuICpcbiAqIHZhciBjYXIgPSB7IG5hbWU6ICd0b3lvdGEnIH07XG4gKiB2YXIgd2hlZWxzID0gW3sgcG9zOiAnZnJvbnQtbGVmdCcgfSwgeyBwb3M6ICdmcm9udC1yaWdodCcgfV07XG4gKlxuICogcmVmcy5iaW5kKGNhciwgJ3doZWVscycpO1xuICpcbiAqIGNhci53aGVlbHMgLy8gW11cbiAqIGNhci53aGVlbHMuYWRkKHdoZWVsc1swXSk7XG4gKiBjYXIud2hlZWxzLmFkZCh3aGVlbHNbMV0pO1xuICpcbiAqIGNhci53aGVlbHMgLy8gW3sgcG9zOiAnZnJvbnQtbGVmdCcgfSwgeyBwb3M6ICdmcm9udC1yaWdodCcgfV1cbiAqXG4gKiB3aGVlbHNbMF0uY2FyIC8vIHsgbmFtZTogJ3RveW90YScgfTtcbiAqIGNhci53aGVlbHMucmVtb3ZlKHdoZWVsc1swXSk7XG4gKlxuICogd2hlZWxzWzBdLmNhciAvLyB1bmRlZmluZWRcbiAqL1xuZnVuY3Rpb24gUmVmcyhhLCBiKSB7XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlZnMpKSB7XG4gICAgcmV0dXJuIG5ldyBSZWZzKGEsIGIpO1xuICB9XG5cbiAgLy8gbGlua1xuICBhLmludmVyc2UgPSBiO1xuICBiLmludmVyc2UgPSBhO1xuXG4gIHRoaXMucHJvcHMgPSB7fTtcbiAgdGhpcy5wcm9wc1thLm5hbWVdID0gYTtcbiAgdGhpcy5wcm9wc1tiLm5hbWVdID0gYjtcbn1cblxuLyoqXG4gKiBCaW5kcyBvbmUgc2lkZSBvZiBhIGJpLWRpcmVjdGlvbmFsIHJlZmVyZW5jZSB0byBhXG4gKiB0YXJnZXQgb2JqZWN0LlxuICpcbiAqIEBtZW1iZXJPZiBSZWZzXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSAge1N0cmluZ30gcHJvcGVydHlcbiAqL1xuUmVmcy5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHRhcmdldCwgcHJvcGVydHkpIHtcbiAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoIXRoaXMucHJvcHNbcHJvcGVydHldKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHByb3BlcnR5IDwnICsgcHJvcGVydHkgKyAnPiBpbiByZWYnKTtcbiAgICB9XG4gICAgcHJvcGVydHkgPSB0aGlzLnByb3BzW3Byb3BlcnR5XTtcbiAgfVxuXG4gIGlmIChwcm9wZXJ0eS5jb2xsZWN0aW9uKSB7XG4gICAgZGVmaW5lQ29sbGVjdGlvblByb3BlcnR5KHRoaXMsIHByb3BlcnR5LCB0YXJnZXQpO1xuICB9IGVsc2Uge1xuICAgIGRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5LCB0YXJnZXQpO1xuICB9XG59O1xuXG5SZWZzLnByb3RvdHlwZS5lbnN1cmVSZWZzQ29sbGVjdGlvbiA9IGZ1bmN0aW9uKHRhcmdldCwgcHJvcGVydHkpIHtcblxuICB2YXIgY29sbGVjdGlvbiA9IHRhcmdldFtwcm9wZXJ0eS5uYW1lXTtcblxuICBpZiAoIUNvbGxlY3Rpb24uaXNFeHRlbmRlZChjb2xsZWN0aW9uKSkge1xuICAgIGRlZmluZUNvbGxlY3Rpb25Qcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eSwgdGFyZ2V0KTtcbiAgfVxuXG4gIHJldHVybiBjb2xsZWN0aW9uO1xufTtcblxuUmVmcy5wcm90b3R5cGUuZW5zdXJlQm91bmQgPSBmdW5jdGlvbih0YXJnZXQsIHByb3BlcnR5KSB7XG4gIGlmICghaGFzT3duUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSkpIHtcbiAgICB0aGlzLmJpbmQodGFyZ2V0LCBwcm9wZXJ0eSk7XG4gIH1cbn07XG5cblJlZnMucHJvdG90eXBlLnVuc2V0ID0gZnVuY3Rpb24odGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUpIHtcblxuICBpZiAodGFyZ2V0KSB7XG4gICAgdGhpcy5lbnN1cmVCb3VuZCh0YXJnZXQsIHByb3BlcnR5KTtcblxuICAgIGlmIChwcm9wZXJ0eS5jb2xsZWN0aW9uKSB7XG4gICAgICB0aGlzLmVuc3VyZVJlZnNDb2xsZWN0aW9uKHRhcmdldCwgcHJvcGVydHkpLnJlbW92ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldFtwcm9wZXJ0eS5uYW1lXSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn07XG5cblJlZnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKHRhcmdldCwgcHJvcGVydHksIHZhbHVlKSB7XG5cbiAgaWYgKHRhcmdldCkge1xuICAgIHRoaXMuZW5zdXJlQm91bmQodGFyZ2V0LCBwcm9wZXJ0eSk7XG5cbiAgICBpZiAocHJvcGVydHkuY29sbGVjdGlvbikge1xuICAgICAgdGhpcy5lbnN1cmVSZWZzQ29sbGVjdGlvbih0YXJnZXQsIHByb3BlcnR5KS5hZGQodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRbcHJvcGVydHkubmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVmcztcblxuXG4vKipcbiAqIEFuIGF0dHJpYnV0ZSBkZXNjcmlwdG9yIHRvIGJlIHVzZWQgc3BlY2lmeSBhbiBhdHRyaWJ1dGUgaW4gYSB7QGxpbmsgUmVmc30gaW5zdGFuY2VcbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBSZWZzLkF0dHJpYnV0ZURlc2NyaXB0b3JcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBuYW1lXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjb2xsZWN0aW9uPWZhbHNlXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbZW51bWVyYWJsZT1mYWxzZV1cbiAqLyIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgc291cmNlIGNvZGUgYWRhcHRlZCBmcm9tIFNuYXAuc3ZnIChsaWNlbnNlZCBBcGFjaGUtMi4wKS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hZG9iZS13ZWJwbGF0Zm9ybS9TbmFwLnN2Zy9ibG9iL21hc3Rlci9zcmMvcGF0aC5qc1xuICovXG5cbi8qIGVzbGludCBuby1mYWxsdGhyb3VnaDogXCJvZmZcIiAqL1xuXG52YXIgcDJzID0gLyw/KFthLXpdKSw/L2dpLFxuICAgIHRvRmxvYXQgPSBwYXJzZUZsb2F0LFxuICAgIG1hdGggPSBNYXRoLFxuICAgIFBJID0gbWF0aC5QSSxcbiAgICBtbWluID0gbWF0aC5taW4sXG4gICAgbW1heCA9IG1hdGgubWF4LFxuICAgIHBvdyA9IG1hdGgucG93LFxuICAgIGFicyA9IG1hdGguYWJzLFxuICAgIHBhdGhDb21tYW5kID0gLyhbYS16XSlbXFxzLF0qKCgtP1xcZCpcXC4/XFxkKig/OmVbLStdP1xcZCspP1tcXHNdKiw/W1xcc10qKSspL2lnLFxuICAgIHBhdGhWYWx1ZXMgPSAvKC0/XFxkKlxcLj9cXGQqKD86ZVstK10/XFxcXGQrKT8pW1xcc10qLD9bXFxzXSovaWc7XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbihvKSB7IHJldHVybiBvIGluc3RhbmNlb2YgQXJyYXk7IH07XG5cbmZ1bmN0aW9uIGhhc1Byb3BlcnR5KG9iaiwgcHJvcGVydHkpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3BlcnR5KTtcbn1cblxuZnVuY3Rpb24gY2xvbmUob2JqKSB7XG5cbiAgaWYgKHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBPYmplY3Qob2JqKSAhPT0gb2JqKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZXMgPSBuZXcgb2JqLmNvbnN0cnVjdG9yO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAoaGFzUHJvcGVydHkob2JqLCBrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IGNsb25lKG9ialtrZXldKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiByZXB1c2goYXJyYXksIGl0ZW0pIHtcbiAgZm9yICh2YXIgaSA9IDAsIGlpID0gYXJyYXkubGVuZ3RoOyBpIDwgaWk7IGkrKykgaWYgKGFycmF5W2ldID09PSBpdGVtKSB7XG4gICAgcmV0dXJuIGFycmF5LnB1c2goYXJyYXkuc3BsaWNlKGksIDEpWzBdKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWNoZXIoZikge1xuXG4gIGZ1bmN0aW9uIG5ld2YoKSB7XG5cbiAgICB2YXIgYXJnID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSxcbiAgICAgICAgYXJncyA9IGFyZy5qb2luKCdcXHUyNDAwJyksXG4gICAgICAgIGNhY2hlID0gbmV3Zi5jYWNoZSA9IG5ld2YuY2FjaGUgfHwge30sXG4gICAgICAgIGNvdW50ID0gbmV3Zi5jb3VudCA9IG5ld2YuY291bnQgfHwgW107XG5cbiAgICBpZiAoaGFzUHJvcGVydHkoY2FjaGUsIGFyZ3MpKSB7XG4gICAgICByZXB1c2goY291bnQsIGFyZ3MpO1xuICAgICAgcmV0dXJuIGNhY2hlW2FyZ3NdO1xuICAgIH1cblxuICAgIGNvdW50Lmxlbmd0aCA+PSAxZTMgJiYgZGVsZXRlIGNhY2hlW2NvdW50LnNoaWZ0KCldO1xuICAgIGNvdW50LnB1c2goYXJncyk7XG4gICAgY2FjaGVbYXJnc10gPSBmLmFwcGx5KDAsIGFyZyk7XG5cbiAgICByZXR1cm4gY2FjaGVbYXJnc107XG4gIH1cbiAgcmV0dXJuIG5ld2Y7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGF0aFN0cmluZyhwYXRoU3RyaW5nKSB7XG5cbiAgaWYgKCFwYXRoU3RyaW5nKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgcHRoID0gcGF0aHMocGF0aFN0cmluZyk7XG5cbiAgaWYgKHB0aC5hcnIpIHtcbiAgICByZXR1cm4gY2xvbmUocHRoLmFycik7XG4gIH1cblxuICB2YXIgcGFyYW1Db3VudHMgPSB7IGE6IDcsIGM6IDYsIGg6IDEsIGw6IDIsIG06IDIsIHE6IDQsIHM6IDQsIHQ6IDIsIHY6IDEsIHo6IDAgfSxcbiAgICAgIGRhdGEgPSBbXTtcblxuICBpZiAoaXNBcnJheShwYXRoU3RyaW5nKSAmJiBpc0FycmF5KHBhdGhTdHJpbmdbMF0pKSB7IC8vIHJvdWdoIGFzc3VtcHRpb25cbiAgICBkYXRhID0gY2xvbmUocGF0aFN0cmluZyk7XG4gIH1cblxuICBpZiAoIWRhdGEubGVuZ3RoKSB7XG5cbiAgICBTdHJpbmcocGF0aFN0cmluZykucmVwbGFjZShwYXRoQ29tbWFuZCwgZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAgdmFyIHBhcmFtcyA9IFtdLFxuICAgICAgICAgIG5hbWUgPSBiLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGMucmVwbGFjZShwYXRoVmFsdWVzLCBmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgIGIgJiYgcGFyYW1zLnB1c2goK2IpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChuYW1lID09ICdtJyAmJiBwYXJhbXMubGVuZ3RoID4gMikge1xuICAgICAgICBkYXRhLnB1c2goW2JdLmNvbmNhdChwYXJhbXMuc3BsaWNlKDAsIDIpKSk7XG4gICAgICAgIG5hbWUgPSAnbCc7XG4gICAgICAgIGIgPSBiID09ICdtJyA/ICdsJyA6ICdMJztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHBhcmFtcy5sZW5ndGggPj0gcGFyYW1Db3VudHNbbmFtZV0pIHtcbiAgICAgICAgZGF0YS5wdXNoKFtiXS5jb25jYXQocGFyYW1zLnNwbGljZSgwLCBwYXJhbUNvdW50c1tuYW1lXSkpKTtcbiAgICAgICAgaWYgKCFwYXJhbUNvdW50c1tuYW1lXSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBkYXRhLnRvU3RyaW5nID0gcGF0aHMudG9TdHJpbmc7XG4gIHB0aC5hcnIgPSBjbG9uZShkYXRhKTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gcGF0aHMocHMpIHtcbiAgdmFyIHAgPSBwYXRocy5wcyA9IHBhdGhzLnBzIHx8IHt9O1xuXG4gIGlmIChwW3BzXSkge1xuICAgIHBbcHNdLnNsZWVwID0gMTAwO1xuICB9IGVsc2Uge1xuICAgIHBbcHNdID0ge1xuICAgICAgc2xlZXA6IDEwMFxuICAgIH07XG4gIH1cblxuICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIGtleSBpbiBwKSB7XG4gICAgICBpZiAoaGFzUHJvcGVydHkocCwga2V5KSAmJiBrZXkgIT0gcHMpIHtcbiAgICAgICAgcFtrZXldLnNsZWVwLS07XG4gICAgICAgICFwW2tleV0uc2xlZXAgJiYgZGVsZXRlIHBba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwW3BzXTtcbn1cblxuZnVuY3Rpb24gcmVjdEJCb3goeCwgeSwgd2lkdGgsIGhlaWdodCkge1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgeSA9IHgueTtcbiAgICB3aWR0aCA9IHgud2lkdGg7XG4gICAgaGVpZ2h0ID0geC5oZWlnaHQ7XG4gICAgeCA9IHgueDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogeCxcbiAgICB5OiB5LFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4MjogeCArIHdpZHRoLFxuICAgIHkyOiB5ICsgaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhdGhUb1N0cmluZygpIHtcbiAgcmV0dXJuIHRoaXMuam9pbignLCcpLnJlcGxhY2UocDJzLCAnJDEnKTtcbn1cblxuZnVuY3Rpb24gcGF0aENsb25lKHBhdGhBcnJheSkge1xuICB2YXIgcmVzID0gY2xvbmUocGF0aEFycmF5KTtcbiAgcmVzLnRvU3RyaW5nID0gcGF0aFRvU3RyaW5nO1xuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBmaW5kRG90c0F0U2VnbWVudChwMXgsIHAxeSwgYzF4LCBjMXksIGMyeCwgYzJ5LCBwMngsIHAyeSwgdCkge1xuICB2YXIgdDEgPSAxIC0gdCxcbiAgICAgIHQxMyA9IHBvdyh0MSwgMyksXG4gICAgICB0MTIgPSBwb3codDEsIDIpLFxuICAgICAgdDIgPSB0ICogdCxcbiAgICAgIHQzID0gdDIgKiB0LFxuICAgICAgeCA9IHQxMyAqIHAxeCArIHQxMiAqIDMgKiB0ICogYzF4ICsgdDEgKiAzICogdCAqIHQgKiBjMnggKyB0MyAqIHAyeCxcbiAgICAgIHkgPSB0MTMgKiBwMXkgKyB0MTIgKiAzICogdCAqIGMxeSArIHQxICogMyAqIHQgKiB0ICogYzJ5ICsgdDMgKiBwMnk7XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBmaXhFcnJvcih4KSxcbiAgICB5OiBmaXhFcnJvcih5KVxuICB9O1xufVxuXG5mdW5jdGlvbiBiZXppZXJCQm94KHBvaW50cykge1xuXG4gIHZhciBiYm94ID0gY3VydmVCQm94LmFwcGx5KG51bGwsIHBvaW50cyk7XG5cbiAgcmV0dXJuIHJlY3RCQm94KFxuICAgIGJib3gueDAsXG4gICAgYmJveC55MCxcbiAgICBiYm94LngxIC0gYmJveC54MCxcbiAgICBiYm94LnkxIC0gYmJveC55MFxuICApO1xufVxuXG5mdW5jdGlvbiBpc1BvaW50SW5zaWRlQkJveChiYm94LCB4LCB5KSB7XG4gIHJldHVybiB4ID49IGJib3gueCAmJlxuICAgIHggPD0gYmJveC54ICsgYmJveC53aWR0aCAmJlxuICAgIHkgPj0gYmJveC55ICYmXG4gICAgeSA8PSBiYm94LnkgKyBiYm94LmhlaWdodDtcbn1cblxuZnVuY3Rpb24gaXNCQm94SW50ZXJzZWN0KGJib3gxLCBiYm94Mikge1xuICBiYm94MSA9IHJlY3RCQm94KGJib3gxKTtcbiAgYmJveDIgPSByZWN0QkJveChiYm94Mik7XG4gIHJldHVybiBpc1BvaW50SW5zaWRlQkJveChiYm94MiwgYmJveDEueCwgYmJveDEueSlcbiAgICB8fCBpc1BvaW50SW5zaWRlQkJveChiYm94MiwgYmJveDEueDIsIGJib3gxLnkpXG4gICAgfHwgaXNQb2ludEluc2lkZUJCb3goYmJveDIsIGJib3gxLngsIGJib3gxLnkyKVxuICAgIHx8IGlzUG9pbnRJbnNpZGVCQm94KGJib3gyLCBiYm94MS54MiwgYmJveDEueTIpXG4gICAgfHwgaXNQb2ludEluc2lkZUJCb3goYmJveDEsIGJib3gyLngsIGJib3gyLnkpXG4gICAgfHwgaXNQb2ludEluc2lkZUJCb3goYmJveDEsIGJib3gyLngyLCBiYm94Mi55KVxuICAgIHx8IGlzUG9pbnRJbnNpZGVCQm94KGJib3gxLCBiYm94Mi54LCBiYm94Mi55MilcbiAgICB8fCBpc1BvaW50SW5zaWRlQkJveChiYm94MSwgYmJveDIueDIsIGJib3gyLnkyKVxuICAgIHx8IChiYm94MS54IDwgYmJveDIueDIgJiYgYmJveDEueCA+IGJib3gyLnhcbiAgICAgICAgfHwgYmJveDIueCA8IGJib3gxLngyICYmIGJib3gyLnggPiBiYm94MS54KVxuICAgICYmIChiYm94MS55IDwgYmJveDIueTIgJiYgYmJveDEueSA+IGJib3gyLnlcbiAgICAgICAgfHwgYmJveDIueSA8IGJib3gxLnkyICYmIGJib3gyLnkgPiBiYm94MS55KTtcbn1cblxuZnVuY3Rpb24gYmFzZTModCwgcDEsIHAyLCBwMywgcDQpIHtcbiAgdmFyIHQxID0gLTMgKiBwMSArIDkgKiBwMiAtIDkgKiBwMyArIDMgKiBwNCxcbiAgICAgIHQyID0gdCAqIHQxICsgNiAqIHAxIC0gMTIgKiBwMiArIDYgKiBwMztcbiAgcmV0dXJuIHQgKiB0MiAtIDMgKiBwMSArIDMgKiBwMjtcbn1cblxuZnVuY3Rpb24gYmV6bGVuKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHg0LCB5NCwgeikge1xuXG4gIGlmICh6ID09IG51bGwpIHtcbiAgICB6ID0gMTtcbiAgfVxuXG4gIHogPSB6ID4gMSA/IDEgOiB6IDwgMCA/IDAgOiB6O1xuXG4gIHZhciB6MiA9IHogLyAyLFxuICAgICAgbiA9IDEyLFxuICAgICAgVHZhbHVlcyA9IFstLjEyNTIsLjEyNTIsLS4zNjc4LC4zNjc4LC0uNTg3MywuNTg3MywtLjc2OTksLjc2OTksLS45MDQxLC45MDQxLC0uOTgxNiwuOTgxNl0sXG4gICAgICBDdmFsdWVzID0gWzAuMjQ5MSwwLjI0OTEsMC4yMzM1LDAuMjMzNSwwLjIwMzIsMC4yMDMyLDAuMTYwMSwwLjE2MDEsMC4xMDY5LDAuMTA2OSwwLjA0NzIsMC4wNDcyXSxcbiAgICAgIHN1bSA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICB2YXIgY3QgPSB6MiAqIFR2YWx1ZXNbaV0gKyB6MixcbiAgICAgICAgeGJhc2UgPSBiYXNlMyhjdCwgeDEsIHgyLCB4MywgeDQpLFxuICAgICAgICB5YmFzZSA9IGJhc2UzKGN0LCB5MSwgeTIsIHkzLCB5NCksXG4gICAgICAgIGNvbWIgPSB4YmFzZSAqIHhiYXNlICsgeWJhc2UgKiB5YmFzZTtcblxuICAgIHN1bSArPSBDdmFsdWVzW2ldICogbWF0aC5zcXJ0KGNvbWIpO1xuICB9XG5cbiAgcmV0dXJuIHoyICogc3VtO1xufVxuXG5cbmZ1bmN0aW9uIGludGVyc2VjdExpbmVzKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHg0LCB5NCkge1xuXG4gIGlmIChcbiAgICBtbWF4KHgxLCB4MikgPCBtbWluKHgzLCB4NCkgfHxcbiAgICAgIG1taW4oeDEsIHgyKSA+IG1tYXgoeDMsIHg0KSB8fFxuICAgICAgbW1heCh5MSwgeTIpIDwgbW1pbih5MywgeTQpIHx8XG4gICAgICBtbWluKHkxLCB5MikgPiBtbWF4KHkzLCB5NClcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG54ID0gKHgxICogeTIgLSB5MSAqIHgyKSAqICh4MyAtIHg0KSAtICh4MSAtIHgyKSAqICh4MyAqIHk0IC0geTMgKiB4NCksXG4gICAgICBueSA9ICh4MSAqIHkyIC0geTEgKiB4MikgKiAoeTMgLSB5NCkgLSAoeTEgLSB5MikgKiAoeDMgKiB5NCAtIHkzICogeDQpLFxuICAgICAgZGVub21pbmF0b3IgPSAoeDEgLSB4MikgKiAoeTMgLSB5NCkgLSAoeTEgLSB5MikgKiAoeDMgLSB4NCk7XG5cbiAgaWYgKCFkZW5vbWluYXRvcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBweCA9IGZpeEVycm9yKG54IC8gZGVub21pbmF0b3IpLFxuICAgICAgcHkgPSBmaXhFcnJvcihueSAvIGRlbm9taW5hdG9yKSxcbiAgICAgIHB4MiA9ICtweC50b0ZpeGVkKDIpLFxuICAgICAgcHkyID0gK3B5LnRvRml4ZWQoMik7XG5cbiAgaWYgKFxuICAgIHB4MiA8ICttbWluKHgxLCB4MikudG9GaXhlZCgyKSB8fFxuICAgICAgcHgyID4gK21tYXgoeDEsIHgyKS50b0ZpeGVkKDIpIHx8XG4gICAgICBweDIgPCArbW1pbih4MywgeDQpLnRvRml4ZWQoMikgfHxcbiAgICAgIHB4MiA+ICttbWF4KHgzLCB4NCkudG9GaXhlZCgyKSB8fFxuICAgICAgcHkyIDwgK21taW4oeTEsIHkyKS50b0ZpeGVkKDIpIHx8XG4gICAgICBweTIgPiArbW1heCh5MSwgeTIpLnRvRml4ZWQoMikgfHxcbiAgICAgIHB5MiA8ICttbWluKHkzLCB5NCkudG9GaXhlZCgyKSB8fFxuICAgICAgcHkyID4gK21tYXgoeTMsIHk0KS50b0ZpeGVkKDIpXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiB7IHg6IHB4LCB5OiBweSB9O1xufVxuXG5mdW5jdGlvbiBmaXhFcnJvcihudW1iZXIpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogMTAwMDAwMDAwMDAwKSAvIDEwMDAwMDAwMDAwMDtcbn1cblxuZnVuY3Rpb24gZmluZEJlemllckludGVyc2VjdGlvbnMoYmV6MSwgYmV6MiwganVzdENvdW50KSB7XG4gIHZhciBiYm94MSA9IGJlemllckJCb3goYmV6MSksXG4gICAgICBiYm94MiA9IGJlemllckJCb3goYmV6Mik7XG5cbiAgaWYgKCFpc0JCb3hJbnRlcnNlY3QoYmJveDEsIGJib3gyKSkge1xuICAgIHJldHVybiBqdXN0Q291bnQgPyAwIDogW107XG4gIH1cblxuICAvLyBBcyBhbiBvcHRpbWl6YXRpb24sIGxpbmVzIHdpbGwgaGF2ZSBvbmx5IDEgc2VnbWVudFxuXG4gIHZhciBsMSA9IGJlemxlbi5hcHBseSgwLCBiZXoxKSxcbiAgICAgIGwyID0gYmV6bGVuLmFwcGx5KDAsIGJlejIpLFxuICAgICAgbjEgPSBpc0xpbmUoYmV6MSkgPyAxIDogfn4obDEgLyA1KSB8fCAxLFxuICAgICAgbjIgPSBpc0xpbmUoYmV6MikgPyAxIDogfn4obDIgLyA1KSB8fCAxLFxuICAgICAgZG90czEgPSBbXSxcbiAgICAgIGRvdHMyID0gW10sXG4gICAgICB4eSA9IHt9LFxuICAgICAgcmVzID0ganVzdENvdW50ID8gMCA6IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjEgKyAxOyBpKyspIHtcbiAgICB2YXIgcCA9IGZpbmREb3RzQXRTZWdtZW50LmFwcGx5KDAsIGJlejEuY29uY2F0KGkgLyBuMSkpO1xuICAgIGRvdHMxLnB1c2goeyB4OiBwLngsIHk6IHAueSwgdDogaSAvIG4xIH0pO1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IG4yICsgMTsgaSsrKSB7XG4gICAgcCA9IGZpbmREb3RzQXRTZWdtZW50LmFwcGx5KDAsIGJlejIuY29uY2F0KGkgLyBuMikpO1xuICAgIGRvdHMyLnB1c2goeyB4OiBwLngsIHk6IHAueSwgdDogaSAvIG4yIH0pO1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IG4xOyBpKyspIHtcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjI7IGorKykge1xuICAgICAgdmFyIGRpID0gZG90czFbaV0sXG4gICAgICAgICAgZGkxID0gZG90czFbaSArIDFdLFxuICAgICAgICAgIGRqID0gZG90czJbal0sXG4gICAgICAgICAgZGoxID0gZG90czJbaiArIDFdLFxuICAgICAgICAgIGNpID0gYWJzKGRpMS54IC0gZGkueCkgPCAuMDEgPyAneScgOiAneCcsXG4gICAgICAgICAgY2ogPSBhYnMoZGoxLnggLSBkai54KSA8IC4wMSA/ICd5JyA6ICd4JyxcbiAgICAgICAgICBpcyA9IGludGVyc2VjdExpbmVzKGRpLngsIGRpLnksIGRpMS54LCBkaTEueSwgZGoueCwgZGoueSwgZGoxLngsIGRqMS55KSxcbiAgICAgICAgICBrZXk7XG5cbiAgICAgIGlmIChpcykge1xuICAgICAgICBrZXkgPSBpcy54LnRvRml4ZWQoOSkgKyAnIycgKyBpcy55LnRvRml4ZWQoOSk7XG5cbiAgICAgICAgaWYgKHh5W2tleV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHh5W2tleV0gPSB0cnVlO1xuXG4gICAgICAgIHZhciB0MSA9IGRpLnQgKyBhYnMoKGlzW2NpXSAtIGRpW2NpXSkgLyAoZGkxW2NpXSAtIGRpW2NpXSkpICogKGRpMS50IC0gZGkudCksXG4gICAgICAgICAgICB0MiA9IGRqLnQgKyBhYnMoKGlzW2NqXSAtIGRqW2NqXSkgLyAoZGoxW2NqXSAtIGRqW2NqXSkpICogKGRqMS50IC0gZGoudCk7XG5cbiAgICAgICAgaWYgKHQxID49IDAgJiYgdDEgPD0gMSAmJiB0MiA+PSAwICYmIHQyIDw9IDEpIHtcblxuICAgICAgICAgIGlmIChqdXN0Q291bnQpIHtcbiAgICAgICAgICAgIHJlcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMucHVzaCh7XG4gICAgICAgICAgICAgIHg6IGlzLngsXG4gICAgICAgICAgICAgIHk6IGlzLnksXG4gICAgICAgICAgICAgIHQxOiB0MSxcbiAgICAgICAgICAgICAgdDI6IHQyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzO1xufVxuXG5cbi8qKlxuICogRmluZCBvciBjb3VudHMgdGhlIGludGVyc2VjdGlvbnMgYmV0d2VlbiB0d28gU1ZHIHBhdGhzLlxuICpcbiAqIFJldHVybnMgYSBudW1iZXIgaW4gY291bnRpbmcgbW9kZSBhbmQgYSBsaXN0IG9mIGludGVyc2VjdGlvbnMgb3RoZXJ3aXNlLlxuICpcbiAqIEEgc2luZ2xlIGludGVyc2VjdGlvbiBlbnRyeSBjb250YWlucyB0aGUgaW50ZXJzZWN0aW9uIGNvb3JkaW5hdGVzICh4LCB5KVxuICogYXMgd2VsbCBhcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgaW50ZXJzZWN0aW5nIHNlZ21lbnRzXG4gKiBvbiBlYWNoIHBhdGggKHNlZ21lbnQxLCBzZWdtZW50MikgYW5kIHRoZSByZWxhdGl2ZSBsb2NhdGlvbiBvZiB0aGVcbiAqIGludGVyc2VjdGlvbiBvbiB0aGVzZSBzZWdtZW50cyAodDEsIHQyKS5cbiAqXG4gKiBUaGUgcGF0aCBtYXkgYmUgYW4gU1ZHIHBhdGggc3RyaW5nIG9yIGEgbGlzdCBvZiBwYXRoIGNvbXBvbmVudHNcbiAqIHN1Y2ggYXMgYFsgWyAnTScsIDAsIDEwIF0sIFsgJ0wnLCAyMCwgMCBdIF1gLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGludGVyc2VjdGlvbnMgPSBmaW5kUGF0aEludGVyc2VjdGlvbnMoXG4gKiAgICdNMCwwTDEwMCwxMDAnLFxuICogICBbIFsgJ00nLCAwLCAxMDAgXSwgWyAnTCcsIDEwMCwgMCBdIF1cbiAqICk7XG4gKlxuICogLy8gaW50ZXJzZWN0aW9ucyA9IFtcbiAqIC8vICAgeyB4OiA1MCwgeTogNTAsIHNlZ21lbnQxOiAxLCBzZWdtZW50MjogMSwgdDE6IDAuNSwgdDI6IDAuNSB9XG4gKiAvLyBdXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXk8UGF0aERlZj59IHBhdGgxXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheTxQYXRoRGVmPn0gcGF0aDJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2p1c3RDb3VudD1mYWxzZV1cbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxJbnRlcnNlY3Rpb24+fE51bWJlcn1cbiAqL1xuZnVuY3Rpb24gZmluZFBhdGhJbnRlcnNlY3Rpb25zKHBhdGgxLCBwYXRoMiwganVzdENvdW50KSB7XG4gIHBhdGgxID0gcGF0aFRvQ3VydmUocGF0aDEpO1xuICBwYXRoMiA9IHBhdGhUb0N1cnZlKHBhdGgyKTtcblxuICB2YXIgeDEsIHkxLCB4MiwgeTIsIHgxbSwgeTFtLCB4Mm0sIHkybSwgYmV6MSwgYmV6MixcbiAgICAgIHJlcyA9IGp1c3RDb3VudCA/IDAgOiBbXTtcblxuICBmb3IgKHZhciBpID0gMCwgaWkgPSBwYXRoMS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgdmFyIHBpID0gcGF0aDFbaV07XG5cbiAgICBpZiAocGlbMF0gPT0gJ00nKSB7XG4gICAgICB4MSA9IHgxbSA9IHBpWzFdO1xuICAgICAgeTEgPSB5MW0gPSBwaVsyXTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICBpZiAocGlbMF0gPT0gJ0MnKSB7XG4gICAgICAgIGJlejEgPSBbeDEsIHkxXS5jb25jYXQocGkuc2xpY2UoMSkpO1xuICAgICAgICB4MSA9IGJlejFbNl07XG4gICAgICAgIHkxID0gYmV6MVs3XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJlejEgPSBbeDEsIHkxLCB4MSwgeTEsIHgxbSwgeTFtLCB4MW0sIHkxbV07XG4gICAgICAgIHgxID0geDFtO1xuICAgICAgICB5MSA9IHkxbTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gcGF0aDIubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICB2YXIgcGogPSBwYXRoMltqXTtcblxuICAgICAgICBpZiAocGpbMF0gPT0gJ00nKSB7XG4gICAgICAgICAgeDIgPSB4Mm0gPSBwalsxXTtcbiAgICAgICAgICB5MiA9IHkybSA9IHBqWzJdO1xuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgaWYgKHBqWzBdID09ICdDJykge1xuICAgICAgICAgICAgYmV6MiA9IFt4MiwgeTJdLmNvbmNhdChwai5zbGljZSgxKSk7XG4gICAgICAgICAgICB4MiA9IGJlejJbNl07XG4gICAgICAgICAgICB5MiA9IGJlejJbN107XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJlejIgPSBbeDIsIHkyLCB4MiwgeTIsIHgybSwgeTJtLCB4Mm0sIHkybV07XG4gICAgICAgICAgICB4MiA9IHgybTtcbiAgICAgICAgICAgIHkyID0geTJtO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBpbnRyID0gZmluZEJlemllckludGVyc2VjdGlvbnMoYmV6MSwgYmV6MiwganVzdENvdW50KTtcblxuICAgICAgICAgIGlmIChqdXN0Q291bnQpIHtcbiAgICAgICAgICAgIHJlcyArPSBpbnRyO1xuICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwLCBrayA9IGludHIubGVuZ3RoOyBrIDwga2s7IGsrKykge1xuICAgICAgICAgICAgICBpbnRyW2tdLnNlZ21lbnQxID0gaTtcbiAgICAgICAgICAgICAgaW50cltrXS5zZWdtZW50MiA9IGo7XG4gICAgICAgICAgICAgIGludHJba10uYmV6MSA9IGJlejE7XG4gICAgICAgICAgICAgIGludHJba10uYmV6MiA9IGJlejI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlcyA9IHJlcy5jb25jYXQoaW50cik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuXG5mdW5jdGlvbiBwYXRoVG9BYnNvbHV0ZShwYXRoQXJyYXkpIHtcbiAgdmFyIHB0aCA9IHBhdGhzKHBhdGhBcnJheSk7XG5cbiAgaWYgKHB0aC5hYnMpIHtcbiAgICByZXR1cm4gcGF0aENsb25lKHB0aC5hYnMpO1xuICB9XG5cbiAgaWYgKCFpc0FycmF5KHBhdGhBcnJheSkgfHwgIWlzQXJyYXkocGF0aEFycmF5ICYmIHBhdGhBcnJheVswXSkpIHsgLy8gcm91Z2ggYXNzdW1wdGlvblxuICAgIHBhdGhBcnJheSA9IHBhcnNlUGF0aFN0cmluZyhwYXRoQXJyYXkpO1xuICB9XG5cbiAgaWYgKCFwYXRoQXJyYXkgfHwgIXBhdGhBcnJheS5sZW5ndGgpIHtcbiAgICByZXR1cm4gW1snTScsIDAsIDBdXTtcbiAgfVxuXG4gIHZhciByZXMgPSBbXSxcbiAgICAgIHggPSAwLFxuICAgICAgeSA9IDAsXG4gICAgICBteCA9IDAsXG4gICAgICBteSA9IDAsXG4gICAgICBzdGFydCA9IDAsXG4gICAgICBwYTA7XG5cbiAgaWYgKHBhdGhBcnJheVswXVswXSA9PSAnTScpIHtcbiAgICB4ID0gK3BhdGhBcnJheVswXVsxXTtcbiAgICB5ID0gK3BhdGhBcnJheVswXVsyXTtcbiAgICBteCA9IHg7XG4gICAgbXkgPSB5O1xuICAgIHN0YXJ0Kys7XG4gICAgcmVzWzBdID0gWydNJywgeCwgeV07XG4gIH1cblxuICBmb3IgKHZhciByLCBwYSwgaSA9IHN0YXJ0LCBpaSA9IHBhdGhBcnJheS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgcmVzLnB1c2gociA9IFtdKTtcbiAgICBwYSA9IHBhdGhBcnJheVtpXTtcbiAgICBwYTAgPSBwYVswXTtcblxuICAgIGlmIChwYTAgIT0gcGEwLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIHJbMF0gPSBwYTAudG9VcHBlckNhc2UoKTtcblxuICAgICAgc3dpdGNoIChyWzBdKSB7XG4gICAgICBjYXNlICdBJzpcbiAgICAgICAgclsxXSA9IHBhWzFdO1xuICAgICAgICByWzJdID0gcGFbMl07XG4gICAgICAgIHJbM10gPSBwYVszXTtcbiAgICAgICAgcls0XSA9IHBhWzRdO1xuICAgICAgICByWzVdID0gcGFbNV07XG4gICAgICAgIHJbNl0gPSArcGFbNl0gKyB4O1xuICAgICAgICByWzddID0gK3BhWzddICsgeTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdWJzpcbiAgICAgICAgclsxXSA9ICtwYVsxXSArIHk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnSCc6XG4gICAgICAgIHJbMV0gPSArcGFbMV0gKyB4O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ00nOlxuICAgICAgICBteCA9ICtwYVsxXSArIHg7XG4gICAgICAgIG15ID0gK3BhWzJdICsgeTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGZvciAodmFyIGogPSAxLCBqaiA9IHBhLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICByW2pdID0gK3BhW2pdICsgKChqICUgMikgPyB4IDogeSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgayA9IDAsIGtrID0gcGEubGVuZ3RoOyBrIDwga2s7IGsrKykge1xuICAgICAgICByW2tdID0gcGFba107XG4gICAgICB9XG4gICAgfVxuICAgIHBhMCA9IHBhMC50b1VwcGVyQ2FzZSgpO1xuXG4gICAgc3dpdGNoIChyWzBdKSB7XG4gICAgY2FzZSAnWic6XG4gICAgICB4ID0gK214O1xuICAgICAgeSA9ICtteTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0gnOlxuICAgICAgeCA9IHJbMV07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdWJzpcbiAgICAgIHkgPSByWzFdO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnTSc6XG4gICAgICBteCA9IHJbci5sZW5ndGggLSAyXTtcbiAgICAgIG15ID0gcltyLmxlbmd0aCAtIDFdO1xuICAgIGRlZmF1bHQ6XG4gICAgICB4ID0gcltyLmxlbmd0aCAtIDJdO1xuICAgICAgeSA9IHJbci5sZW5ndGggLSAxXTtcbiAgICB9XG4gIH1cblxuICByZXMudG9TdHJpbmcgPSBwYXRoVG9TdHJpbmc7XG4gIHB0aC5hYnMgPSBwYXRoQ2xvbmUocmVzKTtcblxuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBpc0xpbmUoYmV6KSB7XG4gIHJldHVybiAoXG4gICAgYmV6WzBdID09PSBiZXpbMl0gJiZcbiAgICBiZXpbMV0gPT09IGJlelszXSAmJlxuICAgIGJlels0XSA9PT0gYmV6WzZdICYmXG4gICAgYmV6WzVdID09PSBiZXpbN11cbiAgKTtcbn1cblxuZnVuY3Rpb24gbGluZVRvQ3VydmUoeDEsIHkxLCB4MiwgeTIpIHtcbiAgcmV0dXJuIFtcbiAgICB4MSwgeTEsIHgyLFxuICAgIHkyLCB4MiwgeTJcbiAgXTtcbn1cblxuZnVuY3Rpb24gcXViaWNUb0N1cnZlKHgxLCB5MSwgYXgsIGF5LCB4MiwgeTIpIHtcbiAgdmFyIF8xMyA9IDEgLyAzLFxuICAgICAgXzIzID0gMiAvIDM7XG5cbiAgcmV0dXJuIFtcbiAgICBfMTMgKiB4MSArIF8yMyAqIGF4LFxuICAgIF8xMyAqIHkxICsgXzIzICogYXksXG4gICAgXzEzICogeDIgKyBfMjMgKiBheCxcbiAgICBfMTMgKiB5MiArIF8yMyAqIGF5LFxuICAgIHgyLFxuICAgIHkyXG4gIF07XG59XG5cbmZ1bmN0aW9uIGFyY1RvQ3VydmUoeDEsIHkxLCByeCwgcnksIGFuZ2xlLCBsYXJnZV9hcmNfZmxhZywgc3dlZXBfZmxhZywgeDIsIHkyLCByZWN1cnNpdmUpIHtcblxuICAvLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvZiB3aGVyZSB0aGlzIG1hdGggY2FtZSBmcm9tIHZpc2l0OlxuICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9pbXBsbm90ZS5odG1sI0FyY0ltcGxlbWVudGF0aW9uTm90ZXNcbiAgdmFyIF8xMjAgPSBQSSAqIDEyMCAvIDE4MCxcbiAgICAgIHJhZCA9IFBJIC8gMTgwICogKCthbmdsZSB8fCAwKSxcbiAgICAgIHJlcyA9IFtdLFxuICAgICAgeHksXG4gICAgICByb3RhdGUgPSBjYWNoZXIoZnVuY3Rpb24oeCwgeSwgcmFkKSB7XG4gICAgICAgIHZhciBYID0geCAqIG1hdGguY29zKHJhZCkgLSB5ICogbWF0aC5zaW4ocmFkKSxcbiAgICAgICAgICAgIFkgPSB4ICogbWF0aC5zaW4ocmFkKSArIHkgKiBtYXRoLmNvcyhyYWQpO1xuXG4gICAgICAgIHJldHVybiB7IHg6IFgsIHk6IFkgfTtcbiAgICAgIH0pO1xuXG4gIGlmICghcmVjdXJzaXZlKSB7XG4gICAgeHkgPSByb3RhdGUoeDEsIHkxLCAtcmFkKTtcbiAgICB4MSA9IHh5Lng7XG4gICAgeTEgPSB4eS55O1xuICAgIHh5ID0gcm90YXRlKHgyLCB5MiwgLXJhZCk7XG4gICAgeDIgPSB4eS54O1xuICAgIHkyID0geHkueTtcblxuICAgIHZhciB4ID0gKHgxIC0geDIpIC8gMixcbiAgICAgICAgeSA9ICh5MSAtIHkyKSAvIDI7XG5cbiAgICB2YXIgaCA9ICh4ICogeCkgLyAocnggKiByeCkgKyAoeSAqIHkpIC8gKHJ5ICogcnkpO1xuXG4gICAgaWYgKGggPiAxKSB7XG4gICAgICBoID0gbWF0aC5zcXJ0KGgpO1xuICAgICAgcnggPSBoICogcng7XG4gICAgICByeSA9IGggKiByeTtcbiAgICB9XG5cbiAgICB2YXIgcngyID0gcnggKiByeCxcbiAgICAgICAgcnkyID0gcnkgKiByeSxcbiAgICAgICAgayA9IChsYXJnZV9hcmNfZmxhZyA9PSBzd2VlcF9mbGFnID8gLTEgOiAxKSAqXG4gICAgICAgICAgICBtYXRoLnNxcnQoYWJzKChyeDIgKiByeTIgLSByeDIgKiB5ICogeSAtIHJ5MiAqIHggKiB4KSAvIChyeDIgKiB5ICogeSArIHJ5MiAqIHggKiB4KSkpLFxuICAgICAgICBjeCA9IGsgKiByeCAqIHkgLyByeSArICh4MSArIHgyKSAvIDIsXG4gICAgICAgIGN5ID0gayAqIC1yeSAqIHggLyByeCArICh5MSArIHkyKSAvIDIsXG4gICAgICAgIGYxID0gbWF0aC5hc2luKCgoeTEgLSBjeSkgLyByeSkudG9GaXhlZCg5KSksXG4gICAgICAgIGYyID0gbWF0aC5hc2luKCgoeTIgLSBjeSkgLyByeSkudG9GaXhlZCg5KSk7XG5cbiAgICBmMSA9IHgxIDwgY3ggPyBQSSAtIGYxIDogZjE7XG4gICAgZjIgPSB4MiA8IGN4ID8gUEkgLSBmMiA6IGYyO1xuICAgIGYxIDwgMCAmJiAoZjEgPSBQSSAqIDIgKyBmMSk7XG4gICAgZjIgPCAwICYmIChmMiA9IFBJICogMiArIGYyKTtcblxuICAgIGlmIChzd2VlcF9mbGFnICYmIGYxID4gZjIpIHtcbiAgICAgIGYxID0gZjEgLSBQSSAqIDI7XG4gICAgfVxuICAgIGlmICghc3dlZXBfZmxhZyAmJiBmMiA+IGYxKSB7XG4gICAgICBmMiA9IGYyIC0gUEkgKiAyO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmMSA9IHJlY3Vyc2l2ZVswXTtcbiAgICBmMiA9IHJlY3Vyc2l2ZVsxXTtcbiAgICBjeCA9IHJlY3Vyc2l2ZVsyXTtcbiAgICBjeSA9IHJlY3Vyc2l2ZVszXTtcbiAgfVxuXG4gIHZhciBkZiA9IGYyIC0gZjE7XG5cbiAgaWYgKGFicyhkZikgPiBfMTIwKSB7XG4gICAgdmFyIGYyb2xkID0gZjIsXG4gICAgICAgIHgyb2xkID0geDIsXG4gICAgICAgIHkyb2xkID0geTI7XG5cbiAgICBmMiA9IGYxICsgXzEyMCAqIChzd2VlcF9mbGFnICYmIGYyID4gZjEgPyAxIDogLTEpO1xuICAgIHgyID0gY3ggKyByeCAqIG1hdGguY29zKGYyKTtcbiAgICB5MiA9IGN5ICsgcnkgKiBtYXRoLnNpbihmMik7XG4gICAgcmVzID0gYXJjVG9DdXJ2ZSh4MiwgeTIsIHJ4LCByeSwgYW5nbGUsIDAsIHN3ZWVwX2ZsYWcsIHgyb2xkLCB5Mm9sZCwgW2YyLCBmMm9sZCwgY3gsIGN5XSk7XG4gIH1cblxuICBkZiA9IGYyIC0gZjE7XG5cbiAgdmFyIGMxID0gbWF0aC5jb3MoZjEpLFxuICAgICAgczEgPSBtYXRoLnNpbihmMSksXG4gICAgICBjMiA9IG1hdGguY29zKGYyKSxcbiAgICAgIHMyID0gbWF0aC5zaW4oZjIpLFxuICAgICAgdCA9IG1hdGgudGFuKGRmIC8gNCksXG4gICAgICBoeCA9IDQgLyAzICogcnggKiB0LFxuICAgICAgaHkgPSA0IC8gMyAqIHJ5ICogdCxcbiAgICAgIG0xID0gW3gxLCB5MV0sXG4gICAgICBtMiA9IFt4MSArIGh4ICogczEsIHkxIC0gaHkgKiBjMV0sXG4gICAgICBtMyA9IFt4MiArIGh4ICogczIsIHkyIC0gaHkgKiBjMl0sXG4gICAgICBtNCA9IFt4MiwgeTJdO1xuXG4gIG0yWzBdID0gMiAqIG0xWzBdIC0gbTJbMF07XG4gIG0yWzFdID0gMiAqIG0xWzFdIC0gbTJbMV07XG5cbiAgaWYgKHJlY3Vyc2l2ZSkge1xuICAgIHJldHVybiBbbTIsIG0zLCBtNF0uY29uY2F0KHJlcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVzID0gW20yLCBtMywgbTRdLmNvbmNhdChyZXMpLmpvaW4oKS5zcGxpdCgnLCcpO1xuICAgIHZhciBuZXdyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHJlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBuZXdyZXNbaV0gPSBpICUgMiA/IHJvdGF0ZShyZXNbaSAtIDFdLCByZXNbaV0sIHJhZCkueSA6IHJvdGF0ZShyZXNbaV0sIHJlc1tpICsgMV0sIHJhZCkueDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3cmVzO1xuICB9XG59XG5cbi8vIFJldHVybnMgYm91bmRpbmcgYm94IG9mIGN1YmljIGJlemllciBjdXJ2ZS5cbi8vIFNvdXJjZTogaHR0cDovL2Jsb2cuaGFja2Vycy1jYWZlLm5ldC8yMDA5LzA2L2hvdy10by1jYWxjdWxhdGUtYmV6aWVyLWN1cnZlcy1ib3VuZGluZy5odG1sXG4vLyBPcmlnaW5hbCB2ZXJzaW9uOiBOSVNISU8gSGlyb2thenVcbi8vIE1vZGlmaWNhdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS90aW1vMjIzNDVcbmZ1bmN0aW9uIGN1cnZlQkJveCh4MCwgeTAsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpIHtcbiAgdmFyIHR2YWx1ZXMgPSBbXSxcbiAgICAgIGJvdW5kcyA9IFtbXSwgW11dLFxuICAgICAgYSwgYiwgYywgdCwgdDEsIHQyLCBiMmFjLCBzcXJ0YjJhYztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDI7ICsraSkge1xuXG4gICAgaWYgKGkgPT0gMCkge1xuICAgICAgYiA9IDYgKiB4MCAtIDEyICogeDEgKyA2ICogeDI7XG4gICAgICBhID0gLTMgKiB4MCArIDkgKiB4MSAtIDkgKiB4MiArIDMgKiB4MztcbiAgICAgIGMgPSAzICogeDEgLSAzICogeDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGIgPSA2ICogeTAgLSAxMiAqIHkxICsgNiAqIHkyO1xuICAgICAgYSA9IC0zICogeTAgKyA5ICogeTEgLSA5ICogeTIgKyAzICogeTM7XG4gICAgICBjID0gMyAqIHkxIC0gMyAqIHkwO1xuICAgIH1cblxuICAgIGlmIChhYnMoYSkgPCAxZS0xMikge1xuXG4gICAgICBpZiAoYWJzKGIpIDwgMWUtMTIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHQgPSAtYyAvIGI7XG5cbiAgICAgIGlmICgwIDwgdCAmJiB0IDwgMSkge1xuICAgICAgICB0dmFsdWVzLnB1c2godCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGIyYWMgPSBiICogYiAtIDQgKiBjICogYTtcbiAgICBzcXJ0YjJhYyA9IG1hdGguc3FydChiMmFjKTtcblxuICAgIGlmIChiMmFjIDwgMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdDEgPSAoLWIgKyBzcXJ0YjJhYykgLyAoMiAqIGEpO1xuXG4gICAgaWYgKDAgPCB0MSAmJiB0MSA8IDEpIHtcbiAgICAgIHR2YWx1ZXMucHVzaCh0MSk7XG4gICAgfVxuXG4gICAgdDIgPSAoLWIgLSBzcXJ0YjJhYykgLyAoMiAqIGEpO1xuXG4gICAgaWYgKDAgPCB0MiAmJiB0MiA8IDEpIHtcbiAgICAgIHR2YWx1ZXMucHVzaCh0Mik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGogPSB0dmFsdWVzLmxlbmd0aCxcbiAgICAgIGpsZW4gPSBqLFxuICAgICAgbXQ7XG5cbiAgd2hpbGUgKGotLSkge1xuICAgIHQgPSB0dmFsdWVzW2pdO1xuICAgIG10ID0gMSAtIHQ7XG4gICAgYm91bmRzWzBdW2pdID0gKG10ICogbXQgKiBtdCAqIHgwKSArICgzICogbXQgKiBtdCAqIHQgKiB4MSkgKyAoMyAqIG10ICogdCAqIHQgKiB4MikgKyAodCAqIHQgKiB0ICogeDMpO1xuICAgIGJvdW5kc1sxXVtqXSA9IChtdCAqIG10ICogbXQgKiB5MCkgKyAoMyAqIG10ICogbXQgKiB0ICogeTEpICsgKDMgKiBtdCAqIHQgKiB0ICogeTIpICsgKHQgKiB0ICogdCAqIHkzKTtcbiAgfVxuXG4gIGJvdW5kc1swXVtqbGVuXSA9IHgwO1xuICBib3VuZHNbMV1bamxlbl0gPSB5MDtcbiAgYm91bmRzWzBdW2psZW4gKyAxXSA9IHgzO1xuICBib3VuZHNbMV1bamxlbiArIDFdID0geTM7XG4gIGJvdW5kc1swXS5sZW5ndGggPSBib3VuZHNbMV0ubGVuZ3RoID0gamxlbiArIDI7XG5cbiAgcmV0dXJuIHtcbiAgICB4MDogbW1pbi5hcHBseSgwLCBib3VuZHNbMF0pLFxuICAgIHkwOiBtbWluLmFwcGx5KDAsIGJvdW5kc1sxXSksXG4gICAgeDE6IG1tYXguYXBwbHkoMCwgYm91bmRzWzBdKSxcbiAgICB5MTogbW1heC5hcHBseSgwLCBib3VuZHNbMV0pXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhdGhUb0N1cnZlKHBhdGgpIHtcblxuICB2YXIgcHRoID0gcGF0aHMocGF0aCk7XG5cbiAgLy8gcmV0dXJuIGNhY2hlZCBjdXJ2ZSwgaWYgZXhpc3RpbmdcbiAgaWYgKHB0aC5jdXJ2ZSkge1xuICAgIHJldHVybiBwYXRoQ2xvbmUocHRoLmN1cnZlKTtcbiAgfVxuXG4gIHZhciBjdXJ2ZWRQYXRoID0gcGF0aFRvQWJzb2x1dGUocGF0aCksXG4gICAgICBhdHRycyA9IHsgeDogMCwgeTogMCwgYng6IDAsIGJ5OiAwLCBYOiAwLCBZOiAwLCBxeDogbnVsbCwgcXk6IG51bGwgfSxcbiAgICAgIHByb2Nlc3NQYXRoID0gZnVuY3Rpb24ocGF0aCwgZCwgcGF0aENvbW1hbmQpIHtcbiAgICAgICAgdmFyIG54LCBueTtcblxuICAgICAgICBpZiAoIXBhdGgpIHtcbiAgICAgICAgICByZXR1cm4gWydDJywgZC54LCBkLnksIGQueCwgZC55LCBkLngsIGQueV07XG4gICAgICAgIH1cblxuICAgICAgICAhKHBhdGhbMF0gaW4geyBUOiAxLCBROiAxIH0pICYmIChkLnF4ID0gZC5xeSA9IG51bGwpO1xuXG4gICAgICAgIHN3aXRjaCAocGF0aFswXSkge1xuICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICBkLlggPSBwYXRoWzFdO1xuICAgICAgICAgIGQuWSA9IHBhdGhbMl07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0EnOlxuICAgICAgICAgIHBhdGggPSBbJ0MnXS5jb25jYXQoYXJjVG9DdXJ2ZS5hcHBseSgwLCBbZC54LCBkLnldLmNvbmNhdChwYXRoLnNsaWNlKDEpKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdTJzpcbiAgICAgICAgICBpZiAocGF0aENvbW1hbmQgPT0gJ0MnIHx8IHBhdGhDb21tYW5kID09ICdTJykge1xuICAgICAgICAgICAgLy8gSW4gJ1MnIGNhc2Ugd2UgaGF2ZSB0byB0YWtlIGludG8gYWNjb3VudCwgaWYgdGhlIHByZXZpb3VzIGNvbW1hbmQgaXMgQy9TLlxuICAgICAgICAgICAgbnggPSBkLnggKiAyIC0gZC5ieDtcbiAgICAgICAgICAgIC8vIEFuZCByZWZsZWN0IHRoZSBwcmV2aW91c1xuICAgICAgICAgICAgbnkgPSBkLnkgKiAyIC0gZC5ieTtcbiAgICAgICAgICAgIC8vIGNvbW1hbmQncyBjb250cm9sIHBvaW50IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvaW50LlxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIG9yIHNvbWUgZWxzZSBvciBub3RoaW5nXG4gICAgICAgICAgICBueCA9IGQueDtcbiAgICAgICAgICAgIG55ID0gZC55O1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXRoID0gWydDJywgbngsIG55XS5jb25jYXQocGF0aC5zbGljZSgxKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1QnOlxuICAgICAgICAgIGlmIChwYXRoQ29tbWFuZCA9PSAnUScgfHwgcGF0aENvbW1hbmQgPT0gJ1QnKSB7XG4gICAgICAgICAgICAvLyBJbiAnVCcgY2FzZSB3ZSBoYXZlIHRvIHRha2UgaW50byBhY2NvdW50LCBpZiB0aGUgcHJldmlvdXMgY29tbWFuZCBpcyBRL1QuXG4gICAgICAgICAgICBkLnF4ID0gZC54ICogMiAtIGQucXg7XG4gICAgICAgICAgICAvLyBBbmQgbWFrZSBhIHJlZmxlY3Rpb24gc2ltaWxhclxuICAgICAgICAgICAgZC5xeSA9IGQueSAqIDIgLSBkLnF5O1xuICAgICAgICAgICAgLy8gdG8gY2FzZSAnUycuXG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gb3Igc29tZXRoaW5nIGVsc2Ugb3Igbm90aGluZ1xuICAgICAgICAgICAgZC5xeCA9IGQueDtcbiAgICAgICAgICAgIGQucXkgPSBkLnk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhdGggPSBbJ0MnXS5jb25jYXQocXViaWNUb0N1cnZlKGQueCwgZC55LCBkLnF4LCBkLnF5LCBwYXRoWzFdLCBwYXRoWzJdKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgIGQucXggPSBwYXRoWzFdO1xuICAgICAgICAgIGQucXkgPSBwYXRoWzJdO1xuICAgICAgICAgIHBhdGggPSBbJ0MnXS5jb25jYXQocXViaWNUb0N1cnZlKGQueCwgZC55LCBwYXRoWzFdLCBwYXRoWzJdLCBwYXRoWzNdLCBwYXRoWzRdKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0wnOlxuICAgICAgICAgIHBhdGggPSBbJ0MnXS5jb25jYXQobGluZVRvQ3VydmUoZC54LCBkLnksIHBhdGhbMV0sIHBhdGhbMl0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnSCc6XG4gICAgICAgICAgcGF0aCA9IFsnQyddLmNvbmNhdChsaW5lVG9DdXJ2ZShkLngsIGQueSwgcGF0aFsxXSwgZC55KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1YnOlxuICAgICAgICAgIHBhdGggPSBbJ0MnXS5jb25jYXQobGluZVRvQ3VydmUoZC54LCBkLnksIGQueCwgcGF0aFsxXSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdaJzpcbiAgICAgICAgICBwYXRoID0gWydDJ10uY29uY2F0KGxpbmVUb0N1cnZlKGQueCwgZC55LCBkLlgsIGQuWSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICB9LFxuXG4gICAgICBmaXhBcmMgPSBmdW5jdGlvbihwcCwgaSkge1xuXG4gICAgICAgIGlmIChwcFtpXS5sZW5ndGggPiA3KSB7XG4gICAgICAgICAgcHBbaV0uc2hpZnQoKTtcbiAgICAgICAgICB2YXIgcGkgPSBwcFtpXTtcblxuICAgICAgICAgIHdoaWxlIChwaS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBhdGhDb21tYW5kc1tpXSA9ICdBJzsgLy8gaWYgY3JlYXRlZCBtdWx0aXBsZSBDOnMsIHRoZWlyIG9yaWdpbmFsIHNlZyBpcyBzYXZlZFxuICAgICAgICAgICAgcHAuc3BsaWNlKGkrKywgMCwgWydDJ10uY29uY2F0KHBpLnNwbGljZSgwLCA2KSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBwLnNwbGljZShpLCAxKTtcbiAgICAgICAgICBpaSA9IGN1cnZlZFBhdGgubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBwYXRoQ29tbWFuZHMgPSBbXSwgLy8gcGF0aCBjb21tYW5kcyBvZiBvcmlnaW5hbCBwYXRoIHBcbiAgICAgIHBmaXJzdCA9ICcnLCAvLyB0ZW1wb3JhcnkgaG9sZGVyIGZvciBvcmlnaW5hbCBwYXRoIGNvbW1hbmRcbiAgICAgIHBhdGhDb21tYW5kID0gJyc7IC8vIGhvbGRlciBmb3IgcHJldmlvdXMgcGF0aCBjb21tYW5kIG9mIG9yaWdpbmFsIHBhdGhcblxuICBmb3IgKHZhciBpID0gMCwgaWkgPSBjdXJ2ZWRQYXRoLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBjdXJ2ZWRQYXRoW2ldICYmIChwZmlyc3QgPSBjdXJ2ZWRQYXRoW2ldWzBdKTsgLy8gc2F2ZSBjdXJyZW50IHBhdGggY29tbWFuZFxuXG4gICAgaWYgKHBmaXJzdCAhPSAnQycpIC8vIEMgaXMgbm90IHNhdmVkIHlldCwgYmVjYXVzZSBpdCBtYXkgYmUgcmVzdWx0IG9mIGNvbnZlcnNpb25cbiAgICB7XG4gICAgICBwYXRoQ29tbWFuZHNbaV0gPSBwZmlyc3Q7IC8vIFNhdmUgY3VycmVudCBwYXRoIGNvbW1hbmRcbiAgICAgIGkgJiYgKHBhdGhDb21tYW5kID0gcGF0aENvbW1hbmRzW2kgLSAxXSk7IC8vIEdldCBwcmV2aW91cyBwYXRoIGNvbW1hbmQgcGF0aENvbW1hbmRcbiAgICB9XG4gICAgY3VydmVkUGF0aFtpXSA9IHByb2Nlc3NQYXRoKGN1cnZlZFBhdGhbaV0sIGF0dHJzLCBwYXRoQ29tbWFuZCk7IC8vIFByZXZpb3VzIHBhdGggY29tbWFuZCBpcyBpbnB1dHRlZCB0byBwcm9jZXNzUGF0aFxuXG4gICAgaWYgKHBhdGhDb21tYW5kc1tpXSAhPSAnQScgJiYgcGZpcnN0ID09ICdDJykgcGF0aENvbW1hbmRzW2ldID0gJ0MnOyAvLyBBIGlzIHRoZSBvbmx5IGNvbW1hbmRcbiAgICAvLyB3aGljaCBtYXkgcHJvZHVjZSBtdWx0aXBsZSBDOnNcbiAgICAvLyBzbyB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IEMgaXMgYWxzbyBDIGluIG9yaWdpbmFsIHBhdGhcblxuICAgIGZpeEFyYyhjdXJ2ZWRQYXRoLCBpKTsgLy8gZml4QXJjIGFkZHMgYWxzbyB0aGUgcmlnaHQgYW1vdW50IG9mIEE6cyB0byBwYXRoQ29tbWFuZHNcblxuICAgIHZhciBzZWcgPSBjdXJ2ZWRQYXRoW2ldLFxuICAgICAgICBzZWdsZW4gPSBzZWcubGVuZ3RoO1xuXG4gICAgYXR0cnMueCA9IHNlZ1tzZWdsZW4gLSAyXTtcbiAgICBhdHRycy55ID0gc2VnW3NlZ2xlbiAtIDFdO1xuICAgIGF0dHJzLmJ4ID0gdG9GbG9hdChzZWdbc2VnbGVuIC0gNF0pIHx8IGF0dHJzLng7XG4gICAgYXR0cnMuYnkgPSB0b0Zsb2F0KHNlZ1tzZWdsZW4gLSAzXSkgfHwgYXR0cnMueTtcbiAgfVxuXG4gIC8vIGNhY2hlIGN1cnZlXG4gIHB0aC5jdXJ2ZSA9IHBhdGhDbG9uZShjdXJ2ZWRQYXRoKTtcblxuICByZXR1cm4gY3VydmVkUGF0aDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmaW5kUGF0aEludGVyc2VjdGlvbnM7XG4iLCJ2YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIEVOVElUWV9QQVRURVJOID0gLyYjKFxcZCspO3wmI3goWzAtOWEtZl0rKTt8JihcXHcrKTsvaWc7XG5cbnZhciBFTlRJVFlfTUFQUElORyA9IHtcbiAgJ2FtcCc6ICcmJyxcbiAgJ2Fwb3MnOiAnXFwnJyxcbiAgJ2d0JzogJz4nLFxuICAnbHQnOiAnPCcsXG4gICdxdW90JzogJ1wiJ1xufTtcblxuLy8gbWFwIFVQUEVSQ0FTRSB2YXJpYW50cyBvZiBzdXBwb3J0ZWQgc3BlY2lhbCBjaGFyc1xuT2JqZWN0LmtleXMoRU5USVRZX01BUFBJTkcpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICBFTlRJVFlfTUFQUElOR1trLnRvVXBwZXJDYXNlKCldID0gRU5USVRZX01BUFBJTkdba107XG59KTtcblxuXG5mdW5jdGlvbiByZXBsYWNlRW50aXRpZXMoXywgZCwgeCwgeikge1xuXG4gIC8vIHJlc2VydmVkIG5hbWVzLCBpLmUuICZuYnNwO1xuICBpZiAoeikge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKEVOVElUWV9NQVBQSU5HLCB6KSkge1xuICAgICAgcmV0dXJuIEVOVElUWV9NQVBQSU5HW3pdO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIGZhbGwgYmFjayB0byBvcmlnaW5hbCB2YWx1ZVxuICAgICAgcmV0dXJuICcmJyArIHogKyAnOyc7XG4gICAgfVxuICB9XG5cbiAgLy8gZGVjaW1hbCBlbmNvZGVkIGNoYXJcbiAgaWYgKGQpIHtcbiAgICByZXR1cm4gZnJvbUNoYXJDb2RlKGQpO1xuICB9XG5cbiAgLy8gaGV4IGVuY29kZWQgY2hhclxuICByZXR1cm4gZnJvbUNoYXJDb2RlKHBhcnNlSW50KHgsIDE2KSk7XG59XG5cblxuLyoqXG4gKiBBIGJhc2ljIGVudGl0eSBkZWNvZGVyIHRoYXQgY2FuIGRlY29kZSBhIG1pbmltYWxcbiAqIHN1Yi1zZXQgb2YgcmVzZXJ2ZWQgbmFtZXMgKCZhbXA7KSBhcyB3ZWxsIGFzXG4gKiBoZXggKCYjeGFhZjspIGFuZCBkZWNpbWFsICgmIzEyMzE7KSBlbmNvZGVkIGNoYXJhY3RlcnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gZGVjb2RlZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZGVjb2RlRW50aXRpZXMocykge1xuICBpZiAocy5sZW5ndGggPiAzICYmIHMuaW5kZXhPZignJicpICE9PSAtMSkge1xuICAgIHJldHVybiBzLnJlcGxhY2UoRU5USVRZX1BBVFRFUk4sIHJlcGxhY2VFbnRpdGllcyk7XG4gIH1cblxuICByZXR1cm4gcztcbn1cblxudmFyIFhTSV9VUkkgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UnO1xudmFyIFhTSV9QUkVGSVggPSAneHNpJztcbnZhciBYU0lfVFlQRSA9ICd4c2k6dHlwZSc7XG5cbnZhciBOT05fV0hJVEVTUEFDRV9PVVRTSURFX1JPT1RfTk9ERSA9ICdub24td2hpdGVzcGFjZSBvdXRzaWRlIG9mIHJvb3Qgbm9kZSc7XG5cbmZ1bmN0aW9uIGVycm9yKG1zZykge1xuICByZXR1cm4gbmV3IEVycm9yKG1zZyk7XG59XG5cbmZ1bmN0aW9uIG1pc3NpbmdOYW1lc3BhY2VGb3JQcmVmaXgocHJlZml4KSB7XG4gIHJldHVybiAnbWlzc2luZyBuYW1lc3BhY2UgZm9yIHByZWZpeCA8JyArIHByZWZpeCArICc+Jztcbn1cblxuZnVuY3Rpb24gZ2V0dGVyKGdldEZuKSB7XG4gIHJldHVybiB7XG4gICAgJ2dldCc6IGdldEZuLFxuICAgICdlbnVtZXJhYmxlJzogdHJ1ZVxuICB9O1xufVxuXG5mdW5jdGlvbiBjbG9uZU5zTWF0cml4KG5zTWF0cml4KSB7XG4gIHZhciBjbG9uZSA9IHt9LCBrZXk7XG4gIGZvciAoa2V5IGluIG5zTWF0cml4KSB7XG4gICAgY2xvbmVba2V5XSA9IG5zTWF0cml4W2tleV07XG4gIH1cbiAgcmV0dXJuIGNsb25lO1xufVxuXG5mdW5jdGlvbiB1cmlQcmVmaXgocHJlZml4KSB7XG4gIHJldHVybiBwcmVmaXggKyAnJHVyaSc7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTnNNYXRyaXgobnNVcmlUb1ByZWZpeCkge1xuICB2YXIgbnNNYXRyaXggPSB7fSxcbiAgICAgIHVyaSxcbiAgICAgIHByZWZpeDtcblxuICBmb3IgKHVyaSBpbiBuc1VyaVRvUHJlZml4KSB7XG4gICAgcHJlZml4ID0gbnNVcmlUb1ByZWZpeFt1cmldO1xuICAgIG5zTWF0cml4W3ByZWZpeF0gPSBwcmVmaXg7XG4gICAgbnNNYXRyaXhbdXJpUHJlZml4KHByZWZpeCldID0gdXJpO1xuICB9XG5cbiAgcmV0dXJuIG5zTWF0cml4O1xufVxuXG5mdW5jdGlvbiBub29wR2V0Q29udGV4dCgpIHtcbiAgcmV0dXJuIHsgJ2xpbmUnOiAwLCAnY29sdW1uJzogMCB9O1xufVxuXG5mdW5jdGlvbiB0aHJvd0Z1bmMoZXJyKSB7XG4gIHRocm93IGVycjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHBhcnNlciB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICpcbiAqIEBwYXJhbSAgeyFPYmplY3Q8c3RyaW5nLCA/Pj19IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gUGFyc2VyKG9wdGlvbnMpIHtcblxuICBpZiAoIXRoaXMpIHtcbiAgICByZXR1cm4gbmV3IFBhcnNlcihvcHRpb25zKTtcbiAgfVxuXG4gIHZhciBwcm94eSA9IG9wdGlvbnMgJiYgb3B0aW9uc1sncHJveHknXTtcblxuICB2YXIgb25UZXh0LFxuICAgICAgb25PcGVuVGFnLFxuICAgICAgb25DbG9zZVRhZyxcbiAgICAgIG9uQ0RBVEEsXG4gICAgICBvbkVycm9yID0gdGhyb3dGdW5jLFxuICAgICAgb25XYXJuaW5nLFxuICAgICAgb25Db21tZW50LFxuICAgICAgb25RdWVzdGlvbixcbiAgICAgIG9uQXR0ZW50aW9uO1xuXG4gIHZhciBnZXRDb250ZXh0ID0gbm9vcEdldENvbnRleHQ7XG5cbiAgLyoqXG4gICAqIERvIHdlIG5lZWQgdG8gcGFyc2UgdGhlIGN1cnJlbnQgZWxlbWVudHMgYXR0cmlidXRlcyBmb3IgbmFtZXNwYWNlcz9cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICB2YXIgbWF5YmVOUyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEbyB3ZSBwcm9jZXNzIG5hbWVzcGFjZXMgYXQgYWxsP1xuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIHZhciBpc05hbWVzcGFjZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgY2F1Z2h0IGVycm9yIHJldHVybmVkIG9uIHBhcnNlIGVuZFxuICAgKlxuICAgKiBAdHlwZSB7RXJyb3J9XG4gICAqL1xuICB2YXIgcmV0dXJuRXJyb3IgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBTaG91bGQgd2Ugc3RvcCBwYXJzaW5nP1xuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIHZhciBwYXJzZVN0b3AgPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBtYXAgb2YgeyB1cmk6IHByZWZpeCB9IHVzZWQgYnkgdGhlIHBhcnNlci5cbiAgICpcbiAgICogVGhpcyBtYXAgd2lsbCBlbnN1cmUgd2UgY2FuIG5vcm1hbGl6ZSBwcmVmaXhlcyBkdXJpbmcgcHJvY2Vzc2luZztcbiAgICogZm9yIGVhY2ggdXJpLCBvbmx5IG9uZSBwcmVmaXggd2lsbCBiZSBleHBvc2VkIHRvIHRoZSBoYW5kbGVycy5cbiAgICpcbiAgICogQHR5cGUgeyFPYmplY3Q8c3RyaW5nLCBzdHJpbmc+fX1cbiAgICovXG4gIHZhciBuc1VyaVRvUHJlZml4O1xuXG4gIC8qKlxuICAgKiBIYW5kbGUgcGFyc2UgZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ3xFcnJvcn0gZXJyXG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVFcnJvcihlcnIpIHtcbiAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgIGVyciA9IGVycm9yKGVycik7XG4gICAgfVxuXG4gICAgcmV0dXJuRXJyb3IgPSBlcnI7XG5cbiAgICBvbkVycm9yKGVyciwgZ2V0Q29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHBhcnNlIGVycm9yLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd8RXJyb3J9IGVyclxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlV2FybmluZyhlcnIpIHtcblxuICAgIGlmICghb25XYXJuaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICBlcnIgPSBlcnJvcihlcnIpO1xuICAgIH1cblxuICAgIG9uV2FybmluZyhlcnIsIGdldENvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHBhcnNlIGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICAgbmFtZVxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2JcbiAgICpcbiAgICogQHJldHVybiB7UGFyc2VyfVxuICAgKi9cbiAgdGhpc1snb24nXSA9IGZ1bmN0aW9uKG5hbWUsIGNiKSB7XG5cbiAgICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJvcigncmVxdWlyZWQgYXJncyA8bmFtZSwgY2I+Jyk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChuYW1lKSB7XG4gICAgY2FzZSAnb3BlblRhZyc6IG9uT3BlblRhZyA9IGNiOyBicmVhaztcbiAgICBjYXNlICd0ZXh0Jzogb25UZXh0ID0gY2I7IGJyZWFrO1xuICAgIGNhc2UgJ2Nsb3NlVGFnJzogb25DbG9zZVRhZyA9IGNiOyBicmVhaztcbiAgICBjYXNlICdlcnJvcic6IG9uRXJyb3IgPSBjYjsgYnJlYWs7XG4gICAgY2FzZSAnd2Fybic6IG9uV2FybmluZyA9IGNiOyBicmVhaztcbiAgICBjYXNlICdjZGF0YSc6IG9uQ0RBVEEgPSBjYjsgYnJlYWs7XG4gICAgY2FzZSAnYXR0ZW50aW9uJzogb25BdHRlbnRpb24gPSBjYjsgYnJlYWs7IC8vIDwhWFhYWFggenp6ej1cImVlZWVcIj5cbiAgICBjYXNlICdxdWVzdGlvbic6IG9uUXVlc3Rpb24gPSBjYjsgYnJlYWs7IC8vIDw/IC4uLi4gID8+XG4gICAgY2FzZSAnY29tbWVudCc6IG9uQ29tbWVudCA9IGNiOyBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgZXJyb3IoJ3Vuc3VwcG9ydGVkIGV2ZW50OiAnICsgbmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbmFtZXNwYWNlIHRvIHByZWZpeCBtYXBwaW5nLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBwYXJzZXIubnMoe1xuICAgKiAgICdodHRwOi8vZm9vJzogJ2ZvbycsXG4gICAqICAgJ2h0dHA6Ly9iYXInOiAnYmFyJ1xuICAgKiB9KTtcbiAgICpcbiAgICogQHBhcmFtICB7IU9iamVjdDxzdHJpbmcsIHN0cmluZz59IG5zTWFwXG4gICAqXG4gICAqIEByZXR1cm4ge1BhcnNlcn1cbiAgICovXG4gIHRoaXNbJ25zJ10gPSBmdW5jdGlvbihuc01hcCkge1xuXG4gICAgaWYgKHR5cGVvZiBuc01hcCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG5zTWFwID0ge307XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuc01hcCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IGVycm9yKCdyZXF1aXJlZCBhcmdzIDxuc01hcD17fT4nKTtcbiAgICB9XG5cbiAgICB2YXIgX25zVXJpVG9QcmVmaXggPSB7fSwgaztcblxuICAgIGZvciAoayBpbiBuc01hcCkge1xuICAgICAgX25zVXJpVG9QcmVmaXhba10gPSBuc01hcFtrXTtcbiAgICB9XG5cbiAgICAvLyBGT1JDRSBkZWZhdWx0IG1hcHBpbmcgZm9yIHNjaGVtYSBpbnN0YW5jZVxuICAgIF9uc1VyaVRvUHJlZml4W1hTSV9VUkldID0gWFNJX1BSRUZJWDtcblxuICAgIGlzTmFtZXNwYWNlID0gdHJ1ZTtcbiAgICBuc1VyaVRvUHJlZml4ID0gX25zVXJpVG9QcmVmaXg7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvKipcbiAgICogUGFyc2UgeG1sIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSB4bWxcbiAgICpcbiAgICogQHJldHVybiB7RXJyb3J9IHJldHVybkVycm9yLCBpZiBub3QgdGhyb3duXG4gICAqL1xuICB0aGlzWydwYXJzZSddID0gZnVuY3Rpb24oeG1sKSB7XG4gICAgaWYgKHR5cGVvZiB4bWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBlcnJvcigncmVxdWlyZWQgYXJncyA8eG1sPXN0cmluZz4nKTtcbiAgICB9XG5cbiAgICByZXR1cm5FcnJvciA9IG51bGw7XG5cbiAgICBwYXJzZSh4bWwpO1xuXG4gICAgZ2V0Q29udGV4dCA9IG5vb3BHZXRDb250ZXh0O1xuICAgIHBhcnNlU3RvcCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHJldHVybkVycm9yO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTdG9wIHBhcnNpbmcuXG4gICAqL1xuICB0aGlzWydzdG9wJ10gPSBmdW5jdGlvbigpIHtcbiAgICBwYXJzZVN0b3AgPSB0cnVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQYXJzZSBzdHJpbmcsIGludm9raW5nIGNvbmZpZ3VyZWQgbGlzdGVuZXJzIG9uIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ30geG1sXG4gICAqL1xuICBmdW5jdGlvbiBwYXJzZSh4bWwpIHtcbiAgICB2YXIgbnNNYXRyaXhTdGFjayA9IGlzTmFtZXNwYWNlID8gW10gOiBudWxsLFxuICAgICAgICBuc01hdHJpeCA9IGlzTmFtZXNwYWNlID8gYnVpbGROc01hdHJpeChuc1VyaVRvUHJlZml4KSA6IG51bGwsXG4gICAgICAgIF9uc01hdHJpeCxcbiAgICAgICAgbm9kZVN0YWNrID0gW10sXG4gICAgICAgIGFub255bW91c05zQ291bnQgPSAwLFxuICAgICAgICB0YWdTdGFydCA9IGZhbHNlLFxuICAgICAgICB0YWdFbmQgPSBmYWxzZSxcbiAgICAgICAgaSA9IDAsIGogPSAwLFxuICAgICAgICB4LCB5LCBxLCB3LCB2LFxuICAgICAgICB4bWxucyxcbiAgICAgICAgZWxlbWVudE5hbWUsXG4gICAgICAgIF9lbGVtZW50TmFtZSxcbiAgICAgICAgZWxlbWVudFByb3h5XG4gICAgICAgIDtcblxuICAgIHZhciBhdHRyc1N0cmluZyA9ICcnLFxuICAgICAgICBhdHRyc1N0YXJ0ID0gMCxcbiAgICAgICAgY2FjaGVkQXR0cnMgLy8gZmFsc2UgPSBwYXJzZWQgd2l0aCBlcnJvcnMsIG51bGwgPSBuZWVkcyBwYXJzaW5nXG4gICAgICAgIDtcblxuICAgIC8qKlxuICAgICAqIFBhcnNlIGF0dHJpYnV0ZXMgb24gZGVtYW5kIGFuZCByZXR1cm5zIHRoZSBwYXJzZWQgYXR0cmlidXRlcy5cbiAgICAgKlxuICAgICAqIFJldHVybiBzZW1hbnRpY3M6ICgxKSBgZmFsc2VgIG9uIGF0dHJpYnV0ZSBwYXJzZSBlcnJvcixcbiAgICAgKiAoMikgb2JqZWN0IGhhc2ggb24gZXh0cmFjdGVkIGF0dHJzLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbnxPYmplY3R9XG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0QXR0cnMoKSB7XG4gICAgICBpZiAoY2FjaGVkQXR0cnMgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZEF0dHJzO1xuICAgICAgfVxuXG4gICAgICB2YXIgbnNVcmksXG4gICAgICAgICAgbnNVcmlQcmVmaXgsXG4gICAgICAgICAgbnNOYW1lLFxuICAgICAgICAgIGRlZmF1bHRBbGlhcyA9IGlzTmFtZXNwYWNlICYmIG5zTWF0cml4Wyd4bWxucyddLFxuICAgICAgICAgIGF0dHJMaXN0ID0gaXNOYW1lc3BhY2UgJiYgbWF5YmVOUyA/IFtdIDogbnVsbCxcbiAgICAgICAgICBpID0gYXR0cnNTdGFydCxcbiAgICAgICAgICBzID0gYXR0cnNTdHJpbmcsXG4gICAgICAgICAgbCA9IHMubGVuZ3RoLFxuICAgICAgICAgIGhhc05ld01hdHJpeCxcbiAgICAgICAgICBuZXdhbGlhcyxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBhbGlhcyxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGF0dHJzID0ge30sXG4gICAgICAgICAgc2VlbkF0dHJzID0ge30sXG4gICAgICAgICAgc2tpcEF0dHIsXG4gICAgICAgICAgdyxcbiAgICAgICAgICBqO1xuXG4gICAgICBwYXJzZUF0dHI6XG4gICAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgICAgICBza2lwQXR0ciA9IGZhbHNlO1xuICAgICAgICB3ID0gcy5jaGFyQ29kZUF0KGkpO1xuXG4gICAgICAgIGlmICh3ID09PSAzMiB8fCAodyA8IDE0ICYmIHcgPiA4KSkgeyAvLyBXSElURVNQQUNFPXsgXFxmXFxuXFxyXFx0XFx2fVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2FpdCBmb3Igbm9uIHdoaXRlc3BhY2UgY2hhcmFjdGVyXG4gICAgICAgIGlmICh3IDwgNjUgfHwgdyA+IDEyMiB8fCAodyA+IDkwICYmIHcgPCA5NykpIHtcbiAgICAgICAgICBpZiAodyAhPT0gOTUgJiYgdyAhPT0gNTgpIHsgLy8gY2hhciA5NVwiX1wiIDU4XCI6XCJcbiAgICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ2lsbGVnYWwgZmlyc3QgY2hhciBhdHRyaWJ1dGUgbmFtZScpO1xuICAgICAgICAgICAgc2tpcEF0dHIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHBhcnNlIGF0dHJpYnV0ZSBuYW1lXG4gICAgICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgbDsgaisrKSB7XG4gICAgICAgICAgdyA9IHMuY2hhckNvZGVBdChqKTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHcgPiA5NiAmJiB3IDwgMTIzIHx8XG4gICAgICAgICAgICB3ID4gNjQgJiYgdyA8IDkxIHx8XG4gICAgICAgICAgICB3ID4gNDcgJiYgdyA8IDU5IHx8XG4gICAgICAgICAgICB3ID09PSA0NiB8fCAvLyAnLidcbiAgICAgICAgICAgIHcgPT09IDQ1IHx8IC8vICctJ1xuICAgICAgICAgICAgdyA9PT0gOTUgLy8gJ18nXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHdoaXRlc3BhY2VcbiAgICAgICAgICBpZiAodyA9PT0gMzIgfHwgKHcgPCAxNCAmJiB3ID4gOCkpIHsgLy8gV0hJVEVTUEFDRVxuICAgICAgICAgICAgaGFuZGxlV2FybmluZygnbWlzc2luZyBhdHRyaWJ1dGUgdmFsdWUnKTtcbiAgICAgICAgICAgIGkgPSBqO1xuXG4gICAgICAgICAgICBjb250aW51ZSBwYXJzZUF0dHI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZXhwZWN0ZWQgXCI9XCJcbiAgICAgICAgICBpZiAodyA9PT0gNjEpIHsgLy8gXCI9XCIgPT0gNjFcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ2lsbGVnYWwgYXR0cmlidXRlIG5hbWUgY2hhcicpO1xuICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5hbWUgPSBzLnN1YnN0cmluZyhpLCBqKTtcblxuICAgICAgICBpZiAobmFtZSA9PT0gJ3htbG5zOnhtbG5zJykge1xuICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ2lsbGVnYWwgZGVjbGFyYXRpb24gb2YgeG1sbnMnKTtcbiAgICAgICAgICBza2lwQXR0ciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB3ID0gcy5jaGFyQ29kZUF0KGogKyAxKTtcblxuICAgICAgICBpZiAodyA9PT0gMzQpIHsgLy8gJ1wiJ1xuICAgICAgICAgIGogPSBzLmluZGV4T2YoJ1wiJywgaSA9IGogKyAyKTtcblxuICAgICAgICAgIGlmIChqID09PSAtMSkge1xuICAgICAgICAgICAgaiA9IHMuaW5kZXhPZignXFwnJywgaSk7XG5cbiAgICAgICAgICAgIGlmIChqICE9PSAtMSkge1xuICAgICAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdhdHRyaWJ1dGUgdmFsdWUgcXVvdGUgbWlzc21hdGNoJyk7XG4gICAgICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmICh3ID09PSAzOSkgeyAvLyBcIidcIlxuICAgICAgICAgIGogPSBzLmluZGV4T2YoJ1xcJycsIGkgPSBqICsgMik7XG5cbiAgICAgICAgICBpZiAoaiA9PT0gLTEpIHtcbiAgICAgICAgICAgIGogPSBzLmluZGV4T2YoJ1wiJywgaSk7XG5cbiAgICAgICAgICAgIGlmIChqICE9PSAtMSkge1xuICAgICAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdhdHRyaWJ1dGUgdmFsdWUgcXVvdGUgbWlzc21hdGNoJyk7XG4gICAgICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdtaXNzaW5nIGF0dHJpYnV0ZSB2YWx1ZSBxdW90ZXMnKTtcbiAgICAgICAgICBza2lwQXR0ciA9IHRydWU7XG5cbiAgICAgICAgICAvLyBza2lwIHRvIG5leHQgc3BhY2VcbiAgICAgICAgICBmb3IgKGogPSBqICsgMTsgaiA8IGw7IGorKykge1xuICAgICAgICAgICAgdyA9IHMuY2hhckNvZGVBdChqICsgMSk7XG5cbiAgICAgICAgICAgIGlmICh3ID09PSAzMiB8fCAodyA8IDE0ICYmIHcgPiA4KSkgeyAvLyBXSElURVNQQUNFXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGogPT09IC0xKSB7XG4gICAgICAgICAgaGFuZGxlV2FybmluZygnbWlzc2luZyBjbG9zaW5nIHF1b3RlcycpO1xuXG4gICAgICAgICAgaiA9IGw7XG4gICAgICAgICAgc2tpcEF0dHIgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFza2lwQXR0cikge1xuICAgICAgICAgIHZhbHVlID0gcy5zdWJzdHJpbmcoaSwgaik7XG4gICAgICAgIH1cblxuICAgICAgICBpID0gajtcblxuICAgICAgICAvLyBlbnN1cmUgU1BBQ0UgZm9sbG93cyBhdHRyaWJ1dGVcbiAgICAgICAgLy8gc2tpcCBpbGxlZ2FsIGNvbnRlbnQgb3RoZXJ3aXNlXG4gICAgICAgIC8vIGV4YW1wbGUgYT1cImJcImNcbiAgICAgICAgZm9yICg7IGogKyAxIDwgbDsgaisrKSB7XG4gICAgICAgICAgdyA9IHMuY2hhckNvZGVBdChqICsgMSk7XG5cbiAgICAgICAgICBpZiAodyA9PT0gMzIgfHwgKHcgPCAxNCAmJiB3ID4gOCkpIHsgLy8gV0hJVEVTUEFDRVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRklSU1QgSUxMRUdBTCBDSEFSXG4gICAgICAgICAgaWYgKGkgPT09IGopIHtcbiAgICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ2lsbGVnYWwgY2hhcmFjdGVyIGFmdGVyIGF0dHJpYnV0ZSBlbmQnKTtcbiAgICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZHZhbmNlIGN1cnNvciB0byBuZXh0IGF0dHJpYnV0ZVxuICAgICAgICBpID0gaiArIDE7XG5cbiAgICAgICAgaWYgKHNraXBBdHRyKSB7XG4gICAgICAgICAgY29udGludWUgcGFyc2VBdHRyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgYXR0cmlidXRlIHJlLWRlY2xhcmF0aW9uXG4gICAgICAgIGlmIChuYW1lIGluIHNlZW5BdHRycykge1xuICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ2F0dHJpYnV0ZSA8JyArIG5hbWUgKyAnPiBhbHJlYWR5IGRlZmluZWQnKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlZW5BdHRyc1tuYW1lXSA9IHRydWU7XG5cbiAgICAgICAgaWYgKCFpc05hbWVzcGFjZSkge1xuICAgICAgICAgIGF0dHJzW25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0cnkgdG8gZXh0cmFjdCBuYW1lc3BhY2UgaW5mb3JtYXRpb25cbiAgICAgICAgaWYgKG1heWJlTlMpIHtcbiAgICAgICAgICBuZXdhbGlhcyA9IChcbiAgICAgICAgICAgIG5hbWUgPT09ICd4bWxucydcbiAgICAgICAgICAgICAgPyAneG1sbnMnXG4gICAgICAgICAgICAgIDogKG5hbWUuY2hhckNvZGVBdCgwKSA9PT0gMTIwICYmIG5hbWUuc3Vic3RyKDAsIDYpID09PSAneG1sbnM6JylcbiAgICAgICAgICAgICAgICA/IG5hbWUuc3Vic3RyKDYpXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIGhhbmRsZSB4bWxucyg6YWxpYXMpIGFzc2lnbm1lbnRcbiAgICAgICAgICBpZiAobmV3YWxpYXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG5zVXJpID0gZGVjb2RlRW50aXRpZXModmFsdWUpO1xuICAgICAgICAgICAgbnNVcmlQcmVmaXggPSB1cmlQcmVmaXgobmV3YWxpYXMpO1xuXG4gICAgICAgICAgICBhbGlhcyA9IG5zVXJpVG9QcmVmaXhbbnNVcmldO1xuXG4gICAgICAgICAgICBpZiAoIWFsaWFzKSB7XG5cbiAgICAgICAgICAgICAgLy8gbm8gcHJlZml4IGRlZmluZWQgb3IgcHJlZml4IGNvbGxpc2lvblxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKG5ld2FsaWFzID09PSAneG1sbnMnKSB8fFxuICAgICAgICAgICAgICAgIChuc1VyaVByZWZpeCBpbiBuc01hdHJpeCAmJiBuc01hdHJpeFtuc1VyaVByZWZpeF0gIT09IG5zVXJpKVxuICAgICAgICAgICAgICApIHtcblxuICAgICAgICAgICAgICAgIC8vIGFsb2NhdGUgZnJlZSBucyBwcmVmaXhcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICBhbGlhcyA9ICducycgKyAoYW5vbnltb3VzTnNDb3VudCsrKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlICh0eXBlb2YgbnNNYXRyaXhbYWxpYXNdICE9PSAndW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWxpYXMgPSBuZXdhbGlhcztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG5zVXJpVG9QcmVmaXhbbnNVcmldID0gYWxpYXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuc01hdHJpeFtuZXdhbGlhc10gIT09IGFsaWFzKSB7XG4gICAgICAgICAgICAgIGlmICghaGFzTmV3TWF0cml4KSB7XG4gICAgICAgICAgICAgICAgbnNNYXRyaXggPSBjbG9uZU5zTWF0cml4KG5zTWF0cml4KTtcbiAgICAgICAgICAgICAgICBoYXNOZXdNYXRyaXggPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbnNNYXRyaXhbbmV3YWxpYXNdID0gYWxpYXM7XG4gICAgICAgICAgICAgIGlmIChuZXdhbGlhcyA9PT0gJ3htbG5zJykge1xuICAgICAgICAgICAgICAgIG5zTWF0cml4W3VyaVByZWZpeChhbGlhcyldID0gbnNVcmk7XG4gICAgICAgICAgICAgICAgZGVmYXVsdEFsaWFzID0gYWxpYXM7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBuc01hdHJpeFtuc1VyaVByZWZpeF0gPSBuc1VyaTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZXhwb3NlIHhtbG5zKDphc2QpPVwiLi4uXCIgaW4gYXR0cmlidXRlc1xuICAgICAgICAgICAgYXR0cnNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNvbGxlY3QgYXR0cmlidXRlcyB1bnRpbCBhbGwgbmFtZXNwYWNlXG4gICAgICAgICAgLy8gZGVjbGFyYXRpb25zIGFyZSBwcm9jZXNzZWRcbiAgICAgICAgICBhdHRyTGlzdC5wdXNoKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICB9IC8qKiBlbmQgaWYgKG1heWJlTnMpICovXG5cbiAgICAgICAgLy8gaGFuZGxlIGF0dHJpYnV0ZXMgb24gZWxlbWVudCB3aXRob3V0XG4gICAgICAgIC8vIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnNcbiAgICAgICAgdyA9IG5hbWUuaW5kZXhPZignOicpO1xuICAgICAgICBpZiAodyA9PT0gLTEpIHtcbiAgICAgICAgICBhdHRyc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm9ybWFsaXplIG5zIGF0dHJpYnV0ZSBuYW1lXG4gICAgICAgIGlmICghKG5zTmFtZSA9IG5zTWF0cml4W25hbWUuc3Vic3RyaW5nKDAsIHcpXSkpIHtcbiAgICAgICAgICBoYW5kbGVXYXJuaW5nKG1pc3NpbmdOYW1lc3BhY2VGb3JQcmVmaXgobmFtZS5zdWJzdHJpbmcoMCwgdykpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5hbWUgPSBkZWZhdWx0QWxpYXMgPT09IG5zTmFtZVxuICAgICAgICAgID8gbmFtZS5zdWJzdHIodyArIDEpXG4gICAgICAgICAgOiBuc05hbWUgKyBuYW1lLnN1YnN0cih3KTtcblxuICAgICAgICAvLyBlbmQ6IG5vcm1hbGl6ZSBucyBhdHRyaWJ1dGUgbmFtZVxuXG4gICAgICAgIC8vIG5vcm1hbGl6ZSB4c2k6dHlwZSBucyBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgICAgaWYgKG5hbWUgPT09IFhTSV9UWVBFKSB7XG4gICAgICAgICAgdyA9IHZhbHVlLmluZGV4T2YoJzonKTtcblxuICAgICAgICAgIGlmICh3ICE9PSAtMSkge1xuICAgICAgICAgICAgbnNOYW1lID0gdmFsdWUuc3Vic3RyaW5nKDAsIHcpO1xuXG4gICAgICAgICAgICAvLyBoYW5kbGUgZGVmYXVsdCBwcmVmaXhlcywgaS5lLiB4czpTdHJpbmcgZ3JhY2VmdWxseVxuICAgICAgICAgICAgbnNOYW1lID0gbnNNYXRyaXhbbnNOYW1lXSB8fCBuc05hbWU7XG4gICAgICAgICAgICB2YWx1ZSA9IG5zTmFtZSArIHZhbHVlLnN1YnN0cmluZyh3KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBkZWZhdWx0QWxpYXMgKyAnOicgKyB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbmQ6IG5vcm1hbGl6ZSB4c2k6dHlwZSBucyBhdHRyaWJ1dGUgdmFsdWVcblxuICAgICAgICBhdHRyc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG5cbiAgICAgIC8vIGhhbmRsZSBkZWZlcnJlZCwgcG9zc2libHkgbmFtZXNwYWNlZCBhdHRyaWJ1dGVzXG4gICAgICBpZiAobWF5YmVOUykge1xuXG4gICAgICAgIC8vIG5vcm1hbGl6ZSBjYXB0dXJlZCBhdHRyaWJ1dGVzXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBhdHRyTGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblxuICAgICAgICAgIG5hbWUgPSBhdHRyTGlzdFtpKytdO1xuICAgICAgICAgIHZhbHVlID0gYXR0ckxpc3RbaV07XG5cbiAgICAgICAgICB3ID0gbmFtZS5pbmRleE9mKCc6Jyk7XG5cbiAgICAgICAgICBpZiAodyAhPT0gLTEpIHtcblxuICAgICAgICAgICAgLy8gbm9ybWFsaXplIG5zIGF0dHJpYnV0ZSBuYW1lXG4gICAgICAgICAgICBpZiAoIShuc05hbWUgPSBuc01hdHJpeFtuYW1lLnN1YnN0cmluZygwLCB3KV0pKSB7XG4gICAgICAgICAgICAgIGhhbmRsZVdhcm5pbmcobWlzc2luZ05hbWVzcGFjZUZvclByZWZpeChuYW1lLnN1YnN0cmluZygwLCB3KSkpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmFtZSA9IGRlZmF1bHRBbGlhcyA9PT0gbnNOYW1lXG4gICAgICAgICAgICAgID8gbmFtZS5zdWJzdHIodyArIDEpXG4gICAgICAgICAgICAgIDogbnNOYW1lICsgbmFtZS5zdWJzdHIodyk7XG5cbiAgICAgICAgICAgIC8vIGVuZDogbm9ybWFsaXplIG5zIGF0dHJpYnV0ZSBuYW1lXG5cbiAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSB4c2k6dHlwZSBucyBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgICAgICAgIGlmIChuYW1lID09PSBYU0lfVFlQRSkge1xuICAgICAgICAgICAgICB3ID0gdmFsdWUuaW5kZXhPZignOicpO1xuXG4gICAgICAgICAgICAgIGlmICh3ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIG5zTmFtZSA9IHZhbHVlLnN1YnN0cmluZygwLCB3KTtcblxuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBkZWZhdWx0IHByZWZpeGVzLCBpLmUuIHhzOlN0cmluZyBncmFjZWZ1bGx5XG4gICAgICAgICAgICAgICAgbnNOYW1lID0gbnNNYXRyaXhbbnNOYW1lXSB8fCBuc05hbWU7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBuc05hbWUgKyB2YWx1ZS5zdWJzdHJpbmcodyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBkZWZhdWx0QWxpYXMgKyAnOicgKyB2YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBlbmQ6IG5vcm1hbGl6ZSB4c2k6dHlwZSBucyBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhdHRyc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW5kOiBub3JtYWxpemUgY2FwdHVyZWQgYXR0cmlidXRlc1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2FjaGVkQXR0cnMgPSBhdHRycztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHRyYWN0IHRoZSBwYXJzZSBjb250ZXh0IHsgbGluZSwgY29sdW1uLCBwYXJ0IH1cbiAgICAgKiBmcm9tIHRoZSBjdXJyZW50IHBhcnNlciBwb3NpdGlvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge09iamVjdH0gcGFyc2UgY29udGV4dFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFBhcnNlQ29udGV4dCgpIHtcbiAgICAgIHZhciBzcGxpdHNSZSA9IC8oXFxyXFxufFxccnxcXG4pL2c7XG5cbiAgICAgIHZhciBsaW5lID0gMDtcbiAgICAgIHZhciBjb2x1bW4gPSAwO1xuICAgICAgdmFyIHN0YXJ0T2ZMaW5lID0gMDtcbiAgICAgIHZhciBlbmRPZkxpbmUgPSBqO1xuICAgICAgdmFyIG1hdGNoO1xuICAgICAgdmFyIGRhdGE7XG5cbiAgICAgIHdoaWxlIChpID49IHN0YXJ0T2ZMaW5lKSB7XG5cbiAgICAgICAgbWF0Y2ggPSBzcGxpdHNSZS5leGVjKHhtbCk7XG5cbiAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW5kIG9mIGxpbmUgPSAoYnJlYWsgaWR4ICsgYnJlYWsgY2hhcnMpXG4gICAgICAgIGVuZE9mTGluZSA9IG1hdGNoWzBdLmxlbmd0aCArIG1hdGNoLmluZGV4O1xuXG4gICAgICAgIGlmIChlbmRPZkxpbmUgPiBpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZHZhbmNlIHRvIG5leHQgbGluZVxuICAgICAgICBsaW5lICs9IDE7XG5cbiAgICAgICAgc3RhcnRPZkxpbmUgPSBlbmRPZkxpbmU7XG4gICAgICB9XG5cbiAgICAgIC8vIEVPRiBlcnJvcnNcbiAgICAgIGlmIChpID09IC0xKSB7XG4gICAgICAgIGNvbHVtbiA9IGVuZE9mTGluZTtcbiAgICAgICAgZGF0YSA9IHhtbC5zdWJzdHJpbmcoaik7XG4gICAgICB9IGVsc2VcblxuICAgICAgLy8gc3RhcnQgZXJyb3JzXG4gICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICBkYXRhID0geG1sLnN1YnN0cmluZyhqLCBpKTtcbiAgICAgIH1cblxuICAgICAgLy8gb3RoZXIgZXJyb3JzXG4gICAgICBlbHNlIHtcbiAgICAgICAgY29sdW1uID0gaSAtIHN0YXJ0T2ZMaW5lO1xuICAgICAgICBkYXRhID0gKGogPT0gLTEgPyB4bWwuc3Vic3RyaW5nKGkpIDogeG1sLnN1YnN0cmluZyhpLCBqICsgMSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGF0YSc6IGRhdGEsXG4gICAgICAgICdsaW5lJzogbGluZSxcbiAgICAgICAgJ2NvbHVtbic6IGNvbHVtblxuICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRDb250ZXh0ID0gZ2V0UGFyc2VDb250ZXh0O1xuXG5cbiAgICBpZiAocHJveHkpIHtcbiAgICAgIGVsZW1lbnRQcm94eSA9IE9iamVjdC5jcmVhdGUoe30sIHtcbiAgICAgICAgJ25hbWUnOiBnZXR0ZXIoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnROYW1lO1xuICAgICAgICB9KSxcbiAgICAgICAgJ29yaWdpbmFsTmFtZSc6IGdldHRlcihmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gX2VsZW1lbnROYW1lO1xuICAgICAgICB9KSxcbiAgICAgICAgJ2F0dHJzJzogZ2V0dGVyKGdldEF0dHJzKSxcbiAgICAgICAgJ25zJzogZ2V0dGVyKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBuc01hdHJpeDtcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGFjdHVhbCBwYXJzZSBsb2dpY1xuICAgIHdoaWxlIChqICE9PSAtMSkge1xuXG4gICAgICBpZiAoeG1sLmNoYXJDb2RlQXQoaikgPT09IDYwKSB7IC8vIFwiPFwiXG4gICAgICAgIGkgPSBqO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaSA9IHhtbC5pbmRleE9mKCc8Jywgaik7XG4gICAgICB9XG5cbiAgICAgIC8vIHBhcnNlIGVuZFxuICAgICAgaWYgKGkgPT09IC0xKSB7XG4gICAgICAgIGlmIChub2RlU3RhY2subGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCd1bmV4cGVjdGVkIGVuZCBvZiBmaWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcignbWlzc2luZyBzdGFydCB0YWcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChqIDwgeG1sLmxlbmd0aCkge1xuICAgICAgICAgIGlmICh4bWwuc3Vic3RyaW5nKGopLnRyaW0oKSkge1xuICAgICAgICAgICAgaGFuZGxlV2FybmluZyhOT05fV0hJVEVTUEFDRV9PVVRTSURFX1JPT1RfTk9ERSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBwYXJzZSB0ZXh0XG4gICAgICBpZiAoaiAhPT0gaSkge1xuXG4gICAgICAgIGlmIChub2RlU3RhY2subGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKG9uVGV4dCkge1xuICAgICAgICAgICAgb25UZXh0KHhtbC5zdWJzdHJpbmcoaiwgaSksIGRlY29kZUVudGl0aWVzLCBnZXRDb250ZXh0KTtcblxuICAgICAgICAgICAgaWYgKHBhcnNlU3RvcCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh4bWwuc3Vic3RyaW5nKGosIGkpLnRyaW0oKSkge1xuICAgICAgICAgICAgaGFuZGxlV2FybmluZyhOT05fV0hJVEVTUEFDRV9PVVRTSURFX1JPT1RfTk9ERSk7XG5cbiAgICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB3ID0geG1sLmNoYXJDb2RlQXQoaSsxKTtcblxuICAgICAgLy8gcGFyc2UgY29tbWVudHMgKyBDREFUQVxuICAgICAgaWYgKHcgPT09IDMzKSB7IC8vIFwiIVwiXG4gICAgICAgIHEgPSB4bWwuY2hhckNvZGVBdChpKzIpO1xuXG4gICAgICAgIC8vIENEQVRBIHNlY3Rpb25cbiAgICAgICAgaWYgKHEgPT09IDkxICYmIHhtbC5zdWJzdHIoaSArIDMsIDYpID09PSAnQ0RBVEFbJykgeyAvLyA5MSA9PSBcIltcIlxuICAgICAgICAgIGogPSB4bWwuaW5kZXhPZignXV0+JywgaSk7XG4gICAgICAgICAgaWYgKGogPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ3VuY2xvc2VkIGNkYXRhJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG9uQ0RBVEEpIHtcbiAgICAgICAgICAgIG9uQ0RBVEEoeG1sLnN1YnN0cmluZyhpICsgOSwgaiksIGdldENvbnRleHQpO1xuICAgICAgICAgICAgaWYgKHBhcnNlU3RvcCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaiArPSAzO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY29tbWVudFxuICAgICAgICBpZiAocSA9PT0gNDUgJiYgeG1sLmNoYXJDb2RlQXQoaSArIDMpID09PSA0NSkgeyAvLyA0NSA9PSBcIi1cIlxuICAgICAgICAgIGogPSB4bWwuaW5kZXhPZignLS0+JywgaSk7XG4gICAgICAgICAgaWYgKGogPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ3VuY2xvc2VkIGNvbW1lbnQnKTtcbiAgICAgICAgICB9XG5cblxuICAgICAgICAgIGlmIChvbkNvbW1lbnQpIHtcbiAgICAgICAgICAgIG9uQ29tbWVudCh4bWwuc3Vic3RyaW5nKGkgKyA0LCBqKSwgZGVjb2RlRW50aXRpZXMsIGdldENvbnRleHQpO1xuICAgICAgICAgICAgaWYgKHBhcnNlU3RvcCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaiArPSAzO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHBhcnNlIHF1ZXN0aW9uIDw/IC4uLiA/PlxuICAgICAgaWYgKHcgPT09IDYzKSB7IC8vIFwiP1wiXG4gICAgICAgIGogPSB4bWwuaW5kZXhPZignPz4nLCBpKTtcbiAgICAgICAgaWYgKGogPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCd1bmNsb3NlZCBxdWVzdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9uUXVlc3Rpb24pIHtcbiAgICAgICAgICBvblF1ZXN0aW9uKHhtbC5zdWJzdHJpbmcoaSwgaiArIDIpLCBnZXRDb250ZXh0KTtcbiAgICAgICAgICBpZiAocGFyc2VTdG9wKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaiArPSAyO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZmluZCBtYXRjaGluZyBjbG9zaW5nIHRhZyBmb3IgYXR0ZW50aW9uIG9yIHN0YW5kYXJkIHRhZ3NcbiAgICAgIC8vIGZvciB0aGF0IHdlIG11c3Qgc2tpcCB0aHJvdWdoIGF0dHJpYnV0ZSB2YWx1ZXNcbiAgICAgIC8vIChlbmNsb3NlZCBpbiBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcylcbiAgICAgIGZvciAoeCA9IGkgKyAxOyA7IHgrKykge1xuICAgICAgICB2ID0geG1sLmNoYXJDb2RlQXQoeCk7XG4gICAgICAgIGlmIChpc05hTih2KSkge1xuICAgICAgICAgIGogPSAtMTtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ3VuY2xvc2VkIHRhZycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWzEwXSBBdHRWYWx1ZSA6Oj0gJ1wiJyAoW148JlwiXSB8IFJlZmVyZW5jZSkqICdcIicgfCBcIidcIiAoW148JiddIHwgUmVmZXJlbmNlKSogXCInXCJcbiAgICAgICAgLy8gc2tpcHMgdGhlIHF1b3RlZCBzdHJpbmdcbiAgICAgICAgLy8gKGRvdWJsZSBxdW90ZXMpIGRvZXMgbm90IGFwcGVhciBpbiBhIGxpdGVyYWwgZW5jbG9zZWQgYnkgKGRvdWJsZSBxdW90ZXMpXG4gICAgICAgIC8vIChzaW5nbGUgcXVvdGUpIGRvZXMgbm90IGFwcGVhciBpbiBhIGxpdGVyYWwgZW5jbG9zZWQgYnkgKHNpbmdsZSBxdW90ZSlcbiAgICAgICAgaWYgKHYgPT09IDM0KSB7IC8vICAnXCInXG4gICAgICAgICAgcSA9IHhtbC5pbmRleE9mKCdcIicsIHggKyAxKTtcbiAgICAgICAgICB4ID0gcSAhPT0gLTEgPyBxIDogeDtcbiAgICAgICAgfSBlbHNlIGlmICh2ID09PSAzOSkgeyAvLyBcIidcIlxuICAgICAgICAgIHEgPSB4bWwuaW5kZXhPZihcIidcIiwgeCArIDEpO1xuICAgICAgICAgIHggPSBxICE9PSAtMSA/IHEgOiB4O1xuICAgICAgICB9IGVsc2UgaWYgKHYgPT09IDYyKSB7IC8vICc+J1xuICAgICAgICAgIGogPSB4O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cblxuICAgICAgLy8gcGFyc2UgYXR0ZW50aW9uIDwhIC4uLj5cbiAgICAgIC8vIHByZXZpb3VzbHkgY29tbWVudCBhbmQgQ0RBVEEgaGF2ZSBhbHJlYWR5IGJlZW4gcGFyc2VkXG4gICAgICBpZiAodyA9PT0gMzMpIHsgLy8gXCIhXCJcblxuICAgICAgICBpZiAob25BdHRlbnRpb24pIHtcbiAgICAgICAgICBvbkF0dGVudGlvbih4bWwuc3Vic3RyaW5nKGksIGogKyAxKSwgZGVjb2RlRW50aXRpZXMsIGdldENvbnRleHQpO1xuICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBqICs9IDE7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBkb24ndCBwcm9jZXNzIGF0dHJpYnV0ZXM7XG4gICAgICAvLyB0aGVyZSBhcmUgbm9uZVxuICAgICAgY2FjaGVkQXR0cnMgPSB7fTtcblxuICAgICAgLy8gaWYgKHhtbC5jaGFyQ29kZUF0KGkrMSkgPT09IDQ3KSB7IC8vIDwvLi4uXG4gICAgICBpZiAodyA9PT0gNDcpIHsgLy8gPC8uLi5cbiAgICAgICAgdGFnU3RhcnQgPSBmYWxzZTtcbiAgICAgICAgdGFnRW5kID0gdHJ1ZTtcblxuICAgICAgICBpZiAoIW5vZGVTdGFjay5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ21pc3Npbmcgb3BlbiB0YWcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZlcmlmeSBvcGVuIDwtPiBjbG9zZSB0YWcgbWF0Y2hcbiAgICAgICAgeCA9IGVsZW1lbnROYW1lID0gbm9kZVN0YWNrLnBvcCgpO1xuICAgICAgICBxID0gaSArIDIgKyB4Lmxlbmd0aDtcblxuICAgICAgICBpZiAoeG1sLnN1YnN0cmluZyhpICsgMiwgcSkgIT09IHgpIHtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ2Nsb3NpbmcgdGFnIG1pc21hdGNoJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB2ZXJpZnkgY2hhcnMgaW4gY2xvc2UgdGFnXG4gICAgICAgIGZvciAoOyBxIDwgajsgcSsrKSB7XG4gICAgICAgICAgdyA9IHhtbC5jaGFyQ29kZUF0KHEpO1xuXG4gICAgICAgICAgaWYgKHcgPT09IDMyIHx8ICh3ID4gOCAmJiB3IDwgMTQpKSB7IC8vIFxcZlxcblxcclxcdFxcdiBzcGFjZVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCdjbG9zZSB0YWcnKTtcbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoeG1sLmNoYXJDb2RlQXQoaiAtIDEpID09PSA0NykgeyAvLyAuLi4vPlxuICAgICAgICAgIHggPSBlbGVtZW50TmFtZSA9IHhtbC5zdWJzdHJpbmcoaSArIDEsIGogLSAxKTtcblxuICAgICAgICAgIHRhZ1N0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgICB0YWdFbmQgPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeCA9IGVsZW1lbnROYW1lID0geG1sLnN1YnN0cmluZyhpICsgMSwgaik7XG5cbiAgICAgICAgICB0YWdTdGFydCA9IHRydWU7XG4gICAgICAgICAgdGFnRW5kID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISh3ID4gOTYgJiYgdyA8IDEyMyB8fCB3ID4gNjQgJiYgdyA8IDkxIHx8IHcgPT09IDk1IHx8IHcgPT09IDU4KSkgeyAvLyBjaGFyIDk1XCJfXCIgNThcIjpcIlxuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcignaWxsZWdhbCBmaXJzdCBjaGFyIG5vZGVOYW1lJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHEgPSAxLCB5ID0geC5sZW5ndGg7IHEgPCB5OyBxKyspIHtcbiAgICAgICAgICB3ID0geC5jaGFyQ29kZUF0KHEpO1xuXG4gICAgICAgICAgaWYgKHcgPiA5NiAmJiB3IDwgMTIzIHx8IHcgPiA2NCAmJiB3IDwgOTEgfHwgdyA+IDQ3ICYmIHcgPCA1OSB8fCB3ID09PSA0NSB8fCB3ID09PSA5NSB8fCB3ID09IDQ2KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodyA9PT0gMzIgfHwgKHcgPCAxNCAmJiB3ID4gOCkpIHsgLy8gXFxmXFxuXFxyXFx0XFx2IHNwYWNlXG4gICAgICAgICAgICBlbGVtZW50TmFtZSA9IHguc3Vic3RyaW5nKDAsIHEpO1xuXG4gICAgICAgICAgICAvLyBtYXliZSB0aGVyZSBhcmUgYXR0cmlidXRlc1xuICAgICAgICAgICAgY2FjaGVkQXR0cnMgPSBudWxsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCdpbnZhbGlkIG5vZGVOYW1lJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRhZ0VuZCkge1xuICAgICAgICAgIG5vZGVTdGFjay5wdXNoKGVsZW1lbnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNOYW1lc3BhY2UpIHtcblxuICAgICAgICBfbnNNYXRyaXggPSBuc01hdHJpeDtcblxuICAgICAgICBpZiAodGFnU3RhcnQpIHtcblxuICAgICAgICAgIC8vIHJlbWVtYmVyIG9sZCBuYW1lc3BhY2VcbiAgICAgICAgICAvLyB1bmxlc3Mgd2UncmUgc2VsZi1jbG9zaW5nXG4gICAgICAgICAgaWYgKCF0YWdFbmQpIHtcbiAgICAgICAgICAgIG5zTWF0cml4U3RhY2sucHVzaChfbnNNYXRyaXgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjYWNoZWRBdHRycyA9PT0gbnVsbCkge1xuXG4gICAgICAgICAgICAvLyBxdWljayBjaGVjaywgd2hldGhlciB0aGVyZSBtYXkgYmUgbmFtZXNwYWNlXG4gICAgICAgICAgICAvLyBkZWNsYXJhdGlvbnMgb24gdGhlIG5vZGU7IGlmIHRoYXQgaXMgdGhlIGNhc2VcbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gZWFnZXJseSBwYXJzZSB0aGUgbm9kZSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICBpZiAoKG1heWJlTlMgPSB4LmluZGV4T2YoJ3htbG5zJywgcSkgIT09IC0xKSkge1xuICAgICAgICAgICAgICBhdHRyc1N0YXJ0ID0gcTtcbiAgICAgICAgICAgICAgYXR0cnNTdHJpbmcgPSB4O1xuXG4gICAgICAgICAgICAgIGdldEF0dHJzKCk7XG5cbiAgICAgICAgICAgICAgbWF5YmVOUyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF9lbGVtZW50TmFtZSA9IGVsZW1lbnROYW1lO1xuXG4gICAgICAgIHcgPSBlbGVtZW50TmFtZS5pbmRleE9mKCc6Jyk7XG4gICAgICAgIGlmICh3ICE9PSAtMSkge1xuICAgICAgICAgIHhtbG5zID0gbnNNYXRyaXhbZWxlbWVudE5hbWUuc3Vic3RyaW5nKDAsIHcpXTtcblxuICAgICAgICAgIC8vIHByZWZpeCBnaXZlbjsgbmFtZXNwYWNlIG11c3QgZXhpc3RcbiAgICAgICAgICBpZiAoIXhtbG5zKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ21pc3NpbmcgbmFtZXNwYWNlIG9uIDwnICsgX2VsZW1lbnROYW1lICsgJz4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbGVtZW50TmFtZSA9IGVsZW1lbnROYW1lLnN1YnN0cih3ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeG1sbnMgPSBuc01hdHJpeFsneG1sbnMnXTtcblxuICAgICAgICAgIC8vIGlmIG5vIGRlZmF1bHQgbmFtZXNwYWNlIGlzIGRlZmluZWQsXG4gICAgICAgICAgLy8gd2UnbGwgaW1wb3J0IHRoZSBlbGVtZW50IGFzIGFub255bW91cy5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIGl0IGlzIHVwIHRvIHVzZXJzIHRvIGNvcnJlY3QgdGhhdCB0byB0aGUgZG9jdW1lbnQgZGVmaW5lZFxuICAgICAgICAgIC8vIHRhcmdldE5hbWVzcGFjZSwgb3Igd2hhdGV2ZXIgdGhlaXIgdW5kZXJzYW5kaW5nIG9mIHRoZVxuICAgICAgICAgIC8vIFhNTCBzcGVjIG1hbmRhdGVzLlxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRqdXN0IG5hbWVzcGFjZSBwcmVmaXhzIGFzIGNvbmZpZ3VyZWRcbiAgICAgICAgaWYgKHhtbG5zKSB7XG4gICAgICAgICAgZWxlbWVudE5hbWUgPSB4bWxucyArICc6JyArIGVsZW1lbnROYW1lO1xuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgaWYgKHRhZ1N0YXJ0KSB7XG4gICAgICAgIGF0dHJzU3RhcnQgPSBxO1xuICAgICAgICBhdHRyc1N0cmluZyA9IHg7XG5cbiAgICAgICAgaWYgKG9uT3BlblRhZykge1xuICAgICAgICAgIGlmIChwcm94eSkge1xuICAgICAgICAgICAgb25PcGVuVGFnKGVsZW1lbnRQcm94eSwgZGVjb2RlRW50aXRpZXMsIHRhZ0VuZCwgZ2V0Q29udGV4dCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9uT3BlblRhZyhlbGVtZW50TmFtZSwgZ2V0QXR0cnMsIGRlY29kZUVudGl0aWVzLCB0YWdFbmQsIGdldENvbnRleHQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgICBpZiAodGFnRW5kKSB7XG5cbiAgICAgICAgaWYgKG9uQ2xvc2VUYWcpIHtcbiAgICAgICAgICBvbkNsb3NlVGFnKHByb3h5ID8gZWxlbWVudFByb3h5IDogZWxlbWVudE5hbWUsIGRlY29kZUVudGl0aWVzLCB0YWdTdGFydCwgZ2V0Q29udGV4dCk7XG5cbiAgICAgICAgICBpZiAocGFyc2VTdG9wKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVzdG9yZSBvbGQgbmFtZXNwYWNlXG4gICAgICAgIGlmIChpc05hbWVzcGFjZSkge1xuICAgICAgICAgIGlmICghdGFnU3RhcnQpIHtcbiAgICAgICAgICAgIG5zTWF0cml4ID0gbnNNYXRyaXhTdGFjay5wb3AoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbnNNYXRyaXggPSBfbnNNYXRyaXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGogKz0gMTtcbiAgICB9XG4gIH0gLyoqIGVuZCBwYXJzZSAqL1xuXG59XG5cbmV4cG9ydCB7IFBhcnNlciwgZGVjb2RlRW50aXRpZXMgYXMgZGVjb2RlIH07XG4iLCJpbXBvcnQge1xuICBkb21pZnksXG4gIGNsYXNzZXMgYXMgZG9tQ2xhc3NlcyxcbiAgbWF0Y2hlcyBhcyBkb21NYXRjaGVzLFxuICBkZWxlZ2F0ZSBhcyBkb21EZWxlZ2F0ZSxcbiAgcXVlcnkgYXMgZG9tUXVlcnksXG4gIHF1ZXJ5QWxsIGFzIGRvbVF1ZXJ5QWxsLFxuICBldmVudCBhcyBkb21FdmVudCxcbiAgYXR0ciBhcyBkb21BdHRyXG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICBmaWx0ZXIsXG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBjcmVhdGVFbWl0dGVyIGZyb20gJ21pdHQnO1xuXG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICBzY3JvbGxTeW1ib2xMZWZ0OiAn4oC5JyxcbiAgc2Nyb2xsU3ltYm9sUmlnaHQ6ICfigLonXG59O1xuXG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgYWRkcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBzY3JvbGwgb3ZlciBhIGxpc3Qgb2YgdGFicy5cbiAqXG4gKiBJdCBhZGRzIHNjcm9sbCBidXR0b25zIG9uIHRoZSBsZWZ0IGFuZCByaWdodCBzaWRlIG9mIHRoZSB0YWJzIGNvbnRhaW5lclxuICogaWYgbm90IGFsbCB0YWJzIGFyZSB2aXNpYmxlLiBJdCBhbHNvIGFkZHMgYSBtb3VzZSB3aGVlbCBsaXN0ZW5lciBvbiB0aGVcbiAqIGNvbnRhaW5lci5cbiAqXG4gKiBJZiBlaXRoZXIgYSBidXR0b24gaXMgY2xpY2tlZCBvciB0aGUgbW91c2Ugd2hlZWwgaXMgdXNlZCBvdmVyIHRoZSB0YWJzLFxuICogYSAnc2Nyb2xsJyBldmVudCBpcyBiZWluZyBmaXJlZC4gVGhpcyBldmVudCBjb250YWlucyB0aGUgbm9kZSBlbGVtZW50c1xuICogb2YgdGhlIG5ldyBhbmQgb2xkIGFjdGl2ZSB0YWIsIGFuZCB0aGUgZGlyZWN0aW9uIGluIHdoaWNoIHRoZSB0YWIgaGFzXG4gKiBjaGFuZ2VkIHJlbGF0aXZlIHRvIHRoZSBvbGQgYWN0aXZlIHRhYi5cbiAqXG4gKiBAZXhhbXBsZTpcbiAqICgxKSBwcm92aWRlIGEgdGFicy1jb250YWluZXI6XG4gKlxuICogdmFyICRlbCA9IChcbiAqICAgPGRpdj5cbiAqICAgICA8IS0tIGJ1dHRvbiBhZGRlZCBieSBzY3JvbGxUYWJzIC0tPlxuICogICAgIDxzcGFuIGNsYXNzPVwic2Nyb2xsLXRhYnMtYnV0dG9uIHNjcm9sbC10YWJzLWxlZnRcIj48L3NwYW4+XG4gKiAgICAgPHVsIGNsYXNzPVwibXktdGFicy1jb250YWluZXJcIj5cbiAqICAgICAgIDxsaSBjbGFzcz1cIm15LXRhYiBpLWFtLWFjdGl2ZVwiPjwvbGk+XG4gKiAgICAgICA8bGkgY2xhc3M9XCJteS10YWJcIj48L2xpPlxuICogICAgICAgPGxpIGNsYXNzPVwibXktdGFiIGlnbm9yZS1tZVwiPjwvbGk+XG4gKiAgICAgPC91bD5cbiAqICAgICA8IS0tIGJ1dHRvbiBhZGRlZCBieSBzY3JvbGxUYWJzIC0tPlxuICogICAgIDxzcGFuIGNsYXNzPVwic2Nyb2xsLXRhYnMtYnV0dG9uIHNjcm9sbC10YWJzLXJpZ2h0XCI+PC9zcGFuPlxuICogICA8L2Rpdj5cbiAqICk7XG4gKlxuICpcbiAqICgyKSBpbml0aWFsaXplIHNjcm9sbFRhYnM6XG4gKlxuICogIHZhciBzY3JvbGxlciA9IHNjcm9sbFRhYnModGFiQmFyTm9kZSwge1xuICogICAgc2VsZWN0b3JzOiB7XG4gKiAgICAgIHRhYnNDb250YWluZXI6ICcubXktdGFicy1jb250YWluZXInLFxuICogICAgICB0YWI6ICcubXktdGFiJyxcbiAqICAgICAgaWdub3JlOiAnLmlnbm9yZS1tZScsXG4gKiAgICAgIGFjdGl2ZTogJy5pLWFtLWFjdGl2ZSdcbiAqICAgIH1cbiAqICB9KTtcbiAqXG4gKlxuICogKDMpIGxpc3RlbiB0byB0aGUgc2Nyb2xsIGV2ZW50OlxuICpcbiAqIHNjcm9sbGVyLm9uKCdzY3JvbGwnLCBmdW5jdGlvbihuZXdBY3RpdmVOb2RlLCBvbGRBY3RpdmVOb2RlLCBkaXJlY3Rpb24pIHtcbiAqICAgLy8gZGlyZWN0aW9uIGlzIGFueSBvZiAoLTE6IGxlZnQsIDE6IHJpZ2h0KVxuICogICAvLyBhY3RpdmF0ZSB0aGUgbmV3IGFjdGl2ZSB0YWJcbiAqIH0pO1xuICpcbiAqXG4gKiAoNCkgdXBkYXRlIHRoZSBzY3JvbGxlciBpZiB0YWJzIGNoYW5nZSBhbmQgb3IgdGhlIHRhYiBjb250YWluZXIgcmVzaXplczpcbiAqXG4gKiBzY3JvbGxlci51cGRhdGUoKTtcbiAqXG4gKlxuICogQHBhcmFtICB7RE9NRWxlbWVudH0gZWxcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zLnNlbGVjdG9yc1xuICogQHBhcmFtICB7U3RyaW5nfSBvcHRpb25zLnNlbGVjdG9ycy50YWJzQ29udGFpbmVyIHRoZSBjb250YWluZXIgYWxsIHRhYnMgYXJlIGNvbnRhaW5lZCBpblxuICogQHBhcmFtICB7U3RyaW5nfSBvcHRpb25zLnNlbGVjdG9ycy50YWIgYSBzaW5nbGUgdGFiIGluc2lkZSB0aGUgdGFiIGNvbnRhaW5lclxuICogQHBhcmFtICB7U3RyaW5nfSBvcHRpb25zLnNlbGVjdG9ycy5pZ25vcmUgdGFicyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkIGR1cmluZyBzY3JvbGwgbGVmdC9yaWdodFxuICogQHBhcmFtICB7U3RyaW5nfSBvcHRpb25zLnNlbGVjdG9ycy5hY3RpdmUgc2VsZWN0b3IgZm9yIHRoZSBjdXJyZW50IGFjdGl2ZSB0YWJcbiAqIEBwYXJhbSAge1N0cmluZ30gW29wdGlvbnMuc2Nyb2xsU3ltYm9sTGVmdF1cbiAqIEBwYXJhbSAge1N0cmluZ30gW29wdGlvbnMuc2Nyb2xsU3ltYm9sUmlnaHRdXG4gKi9cbmZ1bmN0aW9uIFNjcm9sbFRhYnMoJGVsLCBvcHRpb25zKSB7XG5cbiAgLy8gd2UgYXJlIGFuIGV2ZW50IGVtaXR0ZXJcbiAgYXNzaWduKHRoaXMsIGNyZWF0ZUVtaXR0ZXIoKSk7XG5cbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA9IGFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBvcHRpb25zKTtcbiAgdGhpcy5jb250YWluZXIgPSAkZWw7XG5cbiAgdGhpcy5fY3JlYXRlU2Nyb2xsQnV0dG9ucygkZWwsIG9wdGlvbnMpO1xuXG4gIHRoaXMuX2JpbmRFdmVudHMoJGVsKTtcbn1cblxuXG4vKipcbiAqIENyZWF0ZSBhIGNsaWNrYWJsZSBzY3JvbGwgYnV0dG9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLmNsYXNzTmFtZVxuICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMubGFiZWxcbiAqIEBwYXJhbSB7TnVtYmVyfSBvcHRpb25zLmRpcmVjdGlvblxuICpcbiAqIEByZXR1cm4ge0RPTUVsZW1lbnR9IFRoZSBjcmVhdGVkIHNjcm9sbCBidXR0b24gbm9kZVxuICovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5fY3JlYXRlQnV0dG9uID0gZnVuY3Rpb24ocGFyZW50Tm9kZSwgb3B0aW9ucykge1xuXG4gIHZhciBjbGFzc05hbWUgPSBvcHRpb25zLmNsYXNzTmFtZSxcbiAgICAgIGRpcmVjdGlvbiA9IG9wdGlvbnMuZGlyZWN0aW9uO1xuXG5cbiAgdmFyIGJ1dHRvbiA9IGRvbVF1ZXJ5KCcuJyArIGNsYXNzTmFtZSwgcGFyZW50Tm9kZSk7XG5cbiAgaWYgKCFidXR0b24pIHtcbiAgICBidXR0b24gPSBkb21pZnkoJzxzcGFuIGNsYXNzPVwic2Nyb2xsLXRhYnMtYnV0dG9uICcgKyBjbGFzc05hbWUgKyAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubGFiZWwgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3Bhbj4nKTtcblxuICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGJ1dHRvbiwgcGFyZW50Tm9kZS5jaGlsZE5vZGVzWzBdKTtcbiAgfVxuXG4gIGRvbUF0dHIoYnV0dG9uLCAnZGF0YS1kaXJlY3Rpb24nLCBkaXJlY3Rpb24pO1xuXG4gIHJldHVybiBidXR0b247XG59O1xuXG4vKipcbiAqIENyZWF0ZSBib3RoIHNjcm9sbCBidXR0b25zXG4gKlxuICogQHBhcmFtICB7RE9NRWxlbWVudH0gcGFyZW50Tm9kZVxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0gIHtTdHJpbmd9IG9wdGlvbnMuc2Nyb2xsU3ltYm9sTGVmdFxuICogQHBhcmFtICB7U3RyaW5nfSBvcHRpb25zLnNjcm9sbFN5bWJvbFJpZ2h0XG4gKi9cblNjcm9sbFRhYnMucHJvdG90eXBlLl9jcmVhdGVTY3JvbGxCdXR0b25zID0gZnVuY3Rpb24ocGFyZW50Tm9kZSwgb3B0aW9ucykge1xuXG4gIC8vIENyZWF0ZSBhIGJ1dHRvbiB0aGF0IHNjcm9sbHMgdG8gdGhlIHRhYiBsZWZ0IHRvIHRoZSBjdXJyZW50bHkgYWN0aXZlIHRhYlxuICB0aGlzLl9jcmVhdGVCdXR0b24ocGFyZW50Tm9kZSwge1xuICAgIGNsYXNzTmFtZTogJ3Njcm9sbC10YWJzLWxlZnQnLFxuICAgIGxhYmVsOiBvcHRpb25zLnNjcm9sbFN5bWJvbExlZnQsXG4gICAgZGlyZWN0aW9uOiAtMVxuICB9KTtcblxuICAvLyBDcmVhdGUgYSBidXR0b24gdGhhdCBzY3JvbGxzIHRvIHRoZSB0YWIgcmlnaHQgdG8gdGhlIGN1cnJlbnRseSBhY3RpdmUgdGFiXG4gIHRoaXMuX2NyZWF0ZUJ1dHRvbihwYXJlbnROb2RlLCB7XG4gICAgY2xhc3NOYW1lOiAnc2Nyb2xsLXRhYnMtcmlnaHQnLFxuICAgIGxhYmVsOiBvcHRpb25zLnNjcm9sbFN5bWJvbFJpZ2h0LFxuICAgIGRpcmVjdGlvbjogMVxuICB9KTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBjdXJyZW50IGFjdGl2ZSB0YWJcbiAqXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fVxuICovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5nZXRBY3RpdmVUYWJOb2RlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBkb21RdWVyeSh0aGlzLm9wdGlvbnMuc2VsZWN0b3JzLmFjdGl2ZSwgdGhpcy5jb250YWluZXIpO1xufTtcblxuXG4vKipcbiAqIEdldCB0aGUgY29udGFpbmVyIGFsbCB0YWJzIGFyZSBjb250YWluZWQgaW5cbiAqXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fVxuICovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5nZXRUYWJzQ29udGFpbmVyTm9kZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZG9tUXVlcnkodGhpcy5vcHRpb25zLnNlbGVjdG9ycy50YWJzQ29udGFpbmVyLCB0aGlzLmNvbnRhaW5lcik7XG59O1xuXG5cbi8qKlxuICogR2V0IGFsbCB0YWJzICh2aXNpYmxlIGFuZCBpbnZpc2libGUgb25lcylcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxET01FbGVtZW50Pn1cbiAqL1xuU2Nyb2xsVGFicy5wcm90b3R5cGUuZ2V0QWxsVGFiTm9kZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGRvbVF1ZXJ5QWxsKHRoaXMub3B0aW9ucy5zZWxlY3RvcnMudGFiLCB0aGlzLmNvbnRhaW5lcik7XG59O1xuXG5cbi8qKlxuICogR2V0cyBhbGwgdGFicyB0aGF0IGRvbid0IGhhdmUgdGhlIGlnbm9yZSBjbGFzcyBzZXRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxET01FbGVtZW50Pn1cbiAqL1xuU2Nyb2xsVGFicy5wcm90b3R5cGUuZ2V0VmlzaWJsZVRhYnMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGFsbFRhYnMgPSB0aGlzLmdldEFsbFRhYk5vZGVzKCk7XG5cbiAgdmFyIGlnbm9yZSA9IHRoaXMub3B0aW9ucy5zZWxlY3RvcnMuaWdub3JlO1xuXG4gIHJldHVybiBmaWx0ZXIoYWxsVGFicywgZnVuY3Rpb24odGFiTm9kZSkge1xuICAgIHJldHVybiAhZG9tTWF0Y2hlcyh0YWJOb2RlLCBpZ25vcmUpO1xuICB9KTtcbn07XG5cblxuLyoqXG4gKiBHZXQgYSB0YWIgcmVsYXRpdmUgdG8gYSByZWZlcmVuY2UgdGFiLlxuICpcbiAqIEBwYXJhbSAge0RPTUVsZW1lbnR9IHJlZmVyZW5jZVRhYk5vZGVcbiAqIEBwYXJhbSAge051bWJlcn0gbiBnZXRzIHRoZSBudGggdGFiIG5leHQgb3IgcHJldmlvdXMgdG8gdGhlIHJlZmVyZW5jZSB0YWJcbiAqXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fVxuICpcbiAqIEBleGFtcGxlOlxuICogVmlzaWJsZSB0YWJzOiBbIEEgfCBCIHwgQyB8IEQgfCBFIF1cbiAqIEFzc3VtZSB0YWIgJ0MnIGlzIHRoZSByZWZlcmVuY2UgdGFiOlxuICogSWYgZGlyZWN0aW9uID09PSAtMSwgaXQgcmV0dXJucyB0YWIgJ0InLFxuICogaWYgZGlyZWN0aW9uID09PSAgMiwgaXQgcmV0dXJucyB0YWIgJ0UnXG4gKi9cblNjcm9sbFRhYnMucHJvdG90eXBlLmdldEFkamFjZW50VGFiID0gZnVuY3Rpb24ocmVmZXJlbmNlVGFiTm9kZSwgbikge1xuICB2YXIgdmlzaWJsZVRhYnMgPSB0aGlzLmdldFZpc2libGVUYWJzKCk7XG5cbiAgdmFyIGluZGV4ID0gdmlzaWJsZVRhYnMuaW5kZXhPZihyZWZlcmVuY2VUYWJOb2RlKTtcblxuICByZXR1cm4gdmlzaWJsZVRhYnNbaW5kZXggKyBuXTtcbn07XG5cblNjcm9sbFRhYnMucHJvdG90eXBlLl9iaW5kRXZlbnRzID0gZnVuY3Rpb24obm9kZSkge1xuICB0aGlzLl9iaW5kV2hlZWxFdmVudChub2RlKTtcbiAgdGhpcy5fYmluZFRhYkNsaWNrRXZlbnRzKG5vZGUpO1xuICB0aGlzLl9iaW5kU2Nyb2xsQnV0dG9uRXZlbnRzKG5vZGUpO1xufTtcblxuLyoqXG4gKiAgQmluZCBhIGNsaWNrIGxpc3RlbmVyIHRvIGEgRE9NIG5vZGUuXG4gKiAgTWFrZSBzdXJlIGEgdGFiIGxpbmsgaXMgZW50aXJlbHkgdmlzaWJsZSBhZnRlciBvbkNsaWNrLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5fYmluZFRhYkNsaWNrRXZlbnRzID0gZnVuY3Rpb24obm9kZSkge1xuICB2YXIgc2VsZWN0b3IgPSB0aGlzLm9wdGlvbnMuc2VsZWN0b3JzLnRhYjtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZG9tRGVsZWdhdGUuYmluZChub2RlLCBzZWxlY3RvciwgJ2NsaWNrJywgZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICAgIHNlbGYuc2Nyb2xsVG9UYWJOb2RlKGV2ZW50LmRlbGVnYXRlVGFyZ2V0KTtcbiAgfSk7XG59O1xuXG5cbi8qKlxuICogQmluZCB0aGUgd2hlZWwgZXZlbnQgbGlzdGVuZXIgdG8gYSBET00gbm9kZVxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5fYmluZFdoZWVsRXZlbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBkb21FdmVudC5iaW5kKG5vZGUsICd3aGVlbCcsIGZ1bmN0aW9uKGUpIHtcblxuICAgIC8vIHNjcm9sbCBkaXJlY3Rpb24gKC0xOiBsZWZ0LCAxOiByaWdodClcbiAgICB2YXIgZGlyZWN0aW9uID0gTWF0aC5zaWduKGUuZGVsdGFZKTtcblxuICAgIHZhciBvbGRBY3RpdmVUYWIgPSBzZWxmLmdldEFjdGl2ZVRhYk5vZGUoKTtcblxuICAgIHZhciBuZXdBY3RpdmVUYWIgPSBzZWxmLmdldEFkamFjZW50VGFiKG9sZEFjdGl2ZVRhYiwgZGlyZWN0aW9uKTtcblxuICAgIGlmIChuZXdBY3RpdmVUYWIpIHtcbiAgICAgIHNlbGYuc2Nyb2xsVG9UYWJOb2RlKG5ld0FjdGl2ZVRhYik7XG4gICAgICBzZWxmLmVtaXQoJ3Njcm9sbCcsIG5ld0FjdGl2ZVRhYiwgb2xkQWN0aXZlVGFiLCBkaXJlY3Rpb24pO1xuICAgIH1cblxuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIEJpbmQgc2Nyb2xsIGJ1dHRvbiBldmVudHMgdG8gYSBET00gbm9kZVxuICpcbiAqIEBwYXJhbSAge0RPTUVsZW1lbnR9IG5vZGVcbiAqL1xuU2Nyb2xsVGFicy5wcm90b3R5cGUuX2JpbmRTY3JvbGxCdXR0b25FdmVudHMgPSBmdW5jdGlvbihub2RlKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGRvbURlbGVnYXRlLmJpbmQobm9kZSwgJy5zY3JvbGwtdGFicy1idXR0b24nLCAnY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIHRhcmdldCA9IGV2ZW50LmRlbGVnYXRlVGFyZ2V0O1xuXG4gICAgLy8gZGF0YS1kaXJlY3Rpb24gaXMgZWl0aGVyIC0xIG9yIDFcbiAgICB2YXIgZGlyZWN0aW9uID0gcGFyc2VJbnQoZG9tQXR0cih0YXJnZXQsICdkYXRhLWRpcmVjdGlvbicpLCAxMCk7XG5cbiAgICB2YXIgb2xkQWN0aXZlVGFiTm9kZSA9IHNlbGYuZ2V0QWN0aXZlVGFiTm9kZSgpO1xuXG4gICAgdmFyIG5ld0FjdGl2ZVRhYk5vZGUgPSBzZWxmLmdldEFkamFjZW50VGFiKG9sZEFjdGl2ZVRhYk5vZGUsIGRpcmVjdGlvbik7XG5cbiAgICBpZiAobmV3QWN0aXZlVGFiTm9kZSkge1xuICAgICAgc2VsZi5zY3JvbGxUb1RhYk5vZGUobmV3QWN0aXZlVGFiTm9kZSk7XG4gICAgICBzZWxmLmVtaXQoJ3Njcm9sbCcsIG5ld0FjdGl2ZVRhYk5vZGUsIG9sZEFjdGl2ZVRhYk5vZGUsIGRpcmVjdGlvbik7XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfSk7XG59O1xuXG5cbi8qKlxuKiBTY3JvbGwgdG8gYSB0YWIgaWYgaXQgaXMgbm90IGVudGlyZWx5IHZpc2libGVcbipcbiogQHBhcmFtICB7RE9NRWxlbWVudH0gdGFiTm9kZSB0YWIgbm9kZSB0byBzY3JvbGwgdG9cbiovXG5TY3JvbGxUYWJzLnByb3RvdHlwZS5zY3JvbGxUb1RhYk5vZGUgPSBmdW5jdGlvbih0YWJOb2RlKSB7XG4gIGlmICghdGFiTm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0YWJzQ29udGFpbmVyTm9kZSA9IHRhYk5vZGUucGFyZW50Tm9kZTtcblxuICB2YXIgdGFiV2lkdGggPSB0YWJOb2RlLm9mZnNldFdpZHRoLFxuICAgICAgdGFiT2Zmc2V0TGVmdCA9IHRhYk5vZGUub2Zmc2V0TGVmdCxcbiAgICAgIHRhYk9mZnNldFJpZ2h0ID0gdGFiT2Zmc2V0TGVmdCArIHRhYldpZHRoLFxuICAgICAgY29udGFpbmVyV2lkdGggPSB0YWJzQ29udGFpbmVyTm9kZS5vZmZzZXRXaWR0aCxcbiAgICAgIGNvbnRhaW5lclNjcm9sbExlZnQgPSB0YWJzQ29udGFpbmVyTm9kZS5zY3JvbGxMZWZ0O1xuXG4gIGlmIChjb250YWluZXJTY3JvbGxMZWZ0ID4gdGFiT2Zmc2V0TGVmdCkge1xuICAgIC8vIHNjcm9sbCB0byB0aGUgbGVmdCwgaWYgdGhlIHRhYiBpcyBvdmVyZmxvd2luZyBvbiB0aGUgbGVmdCBzaWRlXG4gICAgdGFic0NvbnRhaW5lck5vZGUuc2Nyb2xsTGVmdCA9IDA7XG4gIH0gZWxzZSBpZiAodGFiT2Zmc2V0UmlnaHQgPiBjb250YWluZXJXaWR0aCkge1xuICAgIC8vIHNjcm9sbCB0byB0aGUgcmlnaHQsIGlmIHRoZSB0YWIgaXMgb3ZlcmZsb3dpbmcgb24gdGhlIHJpZ2h0IHNpZGVcbiAgICB0YWJzQ29udGFpbmVyTm9kZS5zY3JvbGxMZWZ0ID0gdGFiT2Zmc2V0UmlnaHQgLSBjb250YWluZXJXaWR0aDtcbiAgfVxufTtcblxuXG4vKipcbiAqIFJlYWN0IG9uIHRhYiBjaGFuZ2VzIGZyb20gb3V0c2lkZSAocmVzaXplL3Nob3cvaGlkZS9hZGQvcmVtb3ZlKSxcbiAqIHVwZGF0ZSBzY3JvbGwgYnV0dG9uIHZpc2liaWxpdHkuXG4gKi9cblNjcm9sbFRhYnMucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciB0YWJzQ29udGFpbmVyTm9kZSA9IHRoaXMuZ2V0VGFic0NvbnRhaW5lck5vZGUoKTtcblxuICAvLyBjaGVjayBpZiB0YWJzIGZpdCBpbiBjb250YWluZXJcbiAgdmFyIG92ZXJmbG93ID0gdGFic0NvbnRhaW5lck5vZGUuc2Nyb2xsV2lkdGggPiB0YWJzQ29udGFpbmVyTm9kZS5vZmZzZXRXaWR0aDtcblxuICAvLyBUT0RPKG5pa2t1KTogZGlzdGluZ3Vpc2ggb3ZlcmZsb3cgbGVmdCAvIG92ZXJmbG93IHJpZ2h0P1xuICB2YXIgb3ZlcmZsb3dDbGFzcyA9ICdzY3JvbGwtdGFicy1vdmVyZmxvdyc7XG5cbiAgZG9tQ2xhc3Nlcyh0aGlzLmNvbnRhaW5lcikudG9nZ2xlKG92ZXJmbG93Q2xhc3MsIG92ZXJmbG93KTtcblxuICBpZiAob3ZlcmZsb3cpIHtcbiAgICAvLyBtYWtlIHN1cmUgdGhlIGN1cnJlbnQgYWN0aXZlIHRhYiBpcyBhbHdheXMgdmlzaWJsZVxuICAgIHRoaXMuc2Nyb2xsVG9UYWJOb2RlKHRoaXMuZ2V0QWN0aXZlVGFiTm9kZSgpKTtcbiAgfVxufTtcblxuXG4vLyBleHBvcnRzIC8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBDcmVhdGUgYSBzY3JvbGxUYWJzIGluc3RhbmNlIG9uIHRoZSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gJGVsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm4ge1Njcm9sbFRhYnN9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZSgkZWwsIG9wdGlvbnMpIHtcblxuICB2YXIgc2Nyb2xsVGFicyA9IGdldCgkZWwpO1xuXG4gIGlmICghc2Nyb2xsVGFicykge1xuICAgIHNjcm9sbFRhYnMgPSBuZXcgU2Nyb2xsVGFicygkZWwsIG9wdGlvbnMpO1xuXG4gICAgJGVsLl9fc2Nyb2xsVGFicyA9IHNjcm9sbFRhYnM7XG4gIH1cblxuICByZXR1cm4gc2Nyb2xsVGFicztcbn1cblxuXG4vKipcbiAqIFJldHVybiB0aGUgc2Nyb2xsVGFicyBpbnN0YW5jZSB0aGF0IGhhcyBiZWVuIHByZXZpb3VzbHlcbiAqIGluaXRpYWxpemVkIG9uIHRoZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gJGVsXG4gKiBAcmV0dXJuIHtTY3JvbGxUYWJzfVxuICovXG5mdW5jdGlvbiBnZXQoJGVsKSB7XG4gIHJldHVybiAkZWwuX19zY3JvbGxUYWJzO1xufVxuXG5jcmVhdGUuZ2V0ID0gZ2V0OyIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHNlbGVjdGlvbiB1cGRhdGUgZm9yIHRoZSBnaXZlblxuICogY3VycmVudCBhbmQgbmV3IGlucHV0IHZhbHVlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY3VycmVudFNlbGVjdGlvbiBhcyB7c3RhcnQsIGVuZH1cbiAqIEBwYXJhbSB7U3RyaW5nfSBjdXJyZW50VmFsdWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBuZXdWYWx1ZVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gbmV3U2VsZWN0aW9uIGFzIHtzdGFydCwgZW5kfVxuICovXG5mdW5jdGlvbiBjYWxjdWxhdGVVcGRhdGUoY3VycmVudFNlbGVjdGlvbiwgY3VycmVudFZhbHVlLCBuZXdWYWx1ZSkge1xuXG4gIHZhciBjdXJyZW50Q3Vyc29yID0gY3VycmVudFNlbGVjdGlvbi5zdGFydCxcbiAgICAgIG5ld0N1cnNvciA9IGN1cnJlbnRDdXJzb3IsXG4gICAgICBkaWZmID0gbmV3VmFsdWUubGVuZ3RoIC0gY3VycmVudFZhbHVlLmxlbmd0aCxcbiAgICAgIGlkeDtcblxuICB2YXIgbGVuZ3RoRGVsdGEgPSBuZXdWYWx1ZS5sZW5ndGggLSBjdXJyZW50VmFsdWUubGVuZ3RoO1xuXG4gIHZhciBjdXJyZW50VGFpbCA9IGN1cnJlbnRWYWx1ZS5zdWJzdHJpbmcoY3VycmVudEN1cnNvcik7XG5cbiAgLy8gY2hlY2sgaWYgd2UgY2FuIHJlbW92ZSBjb21tb24gZW5kaW5nIGZyb20gdGhlIGVxdWF0aW9uXG4gIC8vIHRvIGJlIGFibGUgdG8gcHJvcGVybHkgZGV0ZWN0IGEgc2VsZWN0aW9uIGNoYW5nZSBmb3JcbiAgLy8gdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6XG4gIC8vXG4gIC8vICAqIChBQUFUVFR8VEYpID0+IChBQUFUfFRGKVxuICAvLyAgKiAoQUFBVHxURikgPT4gIChBQUFUVFR8VEYpXG4gIC8vXG4gIGlmIChuZXdWYWx1ZS5sYXN0SW5kZXhPZihjdXJyZW50VGFpbCkgPT09IG5ld1ZhbHVlLmxlbmd0aCAtIGN1cnJlbnRUYWlsLmxlbmd0aCkge1xuICAgIGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZS5zdWJzdHJpbmcoMCwgY3VycmVudFZhbHVlLmxlbmd0aCAtIGN1cnJlbnRUYWlsLmxlbmd0aCk7XG4gICAgbmV3VmFsdWUgPSBuZXdWYWx1ZS5zdWJzdHJpbmcoMCwgbmV3VmFsdWUubGVuZ3RoIC0gY3VycmVudFRhaWwubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGRpZmZcbiAgdmFyIGRpZmYgPSBjcmVhdGVEaWZmKGN1cnJlbnRWYWx1ZSwgbmV3VmFsdWUpO1xuXG4gIGlmIChkaWZmKSB7XG4gICAgaWYgKGRpZmYudHlwZSA9PT0gJ3JlbW92ZScpIHtcbiAgICAgIG5ld0N1cnNvciA9IGRpZmYubmV3U3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0N1cnNvciA9IGRpZmYubmV3RW5kO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByYW5nZShuZXdDdXJzb3IpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhbGN1bGF0ZVVwZGF0ZTtcblxuXG5mdW5jdGlvbiBjcmVhdGVEaWZmKGN1cnJlbnRWYWx1ZSwgbmV3VmFsdWUpIHtcblxuICB2YXIgaW5zZXJ0O1xuXG4gIHZhciBsX3N0ciwgbF9jaGFyLCBsX2lkeCA9IDAsXG4gICAgICBzX3N0ciwgc19jaGFyLCBzX2lkeCA9IDA7XG5cbiAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA+IGN1cnJlbnRWYWx1ZS5sZW5ndGgpIHtcbiAgICBsX3N0ciA9IG5ld1ZhbHVlO1xuICAgIHNfc3RyID0gY3VycmVudFZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGxfc3RyID0gY3VycmVudFZhbHVlO1xuICAgIHNfc3RyID0gbmV3VmFsdWU7XG4gIH1cblxuICAvLyBhc3N1bWUgdGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBpbnNlcnQgLyByZW1vdmUgYW5kXG4gIC8vIGRldGVjdCB0aGF0IF9maXJzdF8gZWRpdCBvcGVyYXRpb24gb25seVxuICB3aGlsZSAobF9pZHggPCBsX3N0ci5sZW5ndGgpIHtcblxuICAgIGxfY2hhciA9IGxfc3RyLmNoYXJBdChsX2lkeCk7XG4gICAgc19jaGFyID0gc19zdHIuY2hhckF0KHNfaWR4KTtcblxuICAgIC8vIGNoYXJzIG5vIG5vdCBlcXVhbFxuICAgIGlmIChsX2NoYXIgIT09IHNfY2hhcikge1xuXG4gICAgICBpZiAoIWluc2VydCkge1xuICAgICAgICBpbnNlcnQgPSB7XG4gICAgICAgICAgbF9zdGFydDogbF9pZHgsXG4gICAgICAgICAgc19zdGFydDogc19pZHhcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgbF9pZHgrKztcbiAgICB9XG5cbiAgICAvLyBjaGFycyBlcXVhbCAoYWdhaW4/KVxuICAgIGVsc2Uge1xuXG4gICAgICBpZiAoaW5zZXJ0ICYmICFpbnNlcnQuY29tcGxldGUpIHtcbiAgICAgICAgaW5zZXJ0LmxfZW5kID0gbF9pZHg7XG4gICAgICAgIGluc2VydC5zX2VuZCA9IHNfaWR4O1xuICAgICAgICBpbnNlcnQuY29tcGxldGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBzX2lkeCsrO1xuICAgICAgbF9pZHgrKztcbiAgICB9XG4gIH1cblxuICBpZiAoaW5zZXJ0ICYmICFpbnNlcnQuY29tcGxldGUpIHtcbiAgICBpbnNlcnQuY29tcGxldGUgPSB0cnVlO1xuICAgIGluc2VydC5zX2VuZCA9IHNfc3RyLmxlbmd0aDtcbiAgICBpbnNlcnQubF9lbmQgPSBsX3N0ci5sZW5ndGg7XG4gIH1cblxuICAvLyBubyBkaWZmXG4gIGlmICghaW5zZXJ0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA+IGN1cnJlbnRWYWx1ZS5sZW5ndGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmV3U3RhcnQ6IGluc2VydC5sX3N0YXJ0LFxuICAgICAgbmV3RW5kOiBpbnNlcnQubF9lbmQsXG4gICAgICB0eXBlOiAnYWRkJ1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5ld1N0YXJ0OiBpbnNlcnQuc19zdGFydCxcbiAgICAgIG5ld0VuZDogaW5zZXJ0LnNfZW5kLFxuICAgICAgdHlwZTogbmV3VmFsdWUubGVuZ3RoIDwgY3VycmVudFZhbHVlLmxlbmd0aCA/ICdyZW1vdmUnIDogJ3JlcGxhY2UnXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFV0aWxpdHkgbWV0aG9kIGZvciBjcmVhdGluZyBhIG5ldyBzZWxlY3Rpb24gcmFuZ2Uge3N0YXJ0LCBlbmR9IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gc3RhcnRcbiAqIEBwYXJhbSB7TnVtYmVyfSBbZW5kXVxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gc2VsZWN0aW9uIHJhbmdlIGFzIHtzdGFydCwgZW5kfVxuICovXG5mdW5jdGlvbiByYW5nZShzdGFydCwgZW5kKSB7XG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVuZDogZW5kID09PSB1bmRlZmluZWQgPyBzdGFydCA6IGVuZFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cy5yYW5nZSA9IHJhbmdlO1xuXG5cbmZ1bmN0aW9uIHNwbGl0U3RyKHN0ciwgcG9zaXRpb24pIHtcbiAgcmV0dXJuIHtcbiAgICBiZWZvcmU6IHN0ci5zdWJzdHJpbmcoMCwgcG9zaXRpb24pLFxuICAgIGFmdGVyOiBzdHIuc3Vic3RyaW5nKHBvc2l0aW9uKVxuICB9O1xufSIsImZ1bmN0aW9uIGVuc3VyZUltcG9ydGVkKGVsZW1lbnQsIHRhcmdldCkge1xuXG4gIGlmIChlbGVtZW50Lm93bmVyRG9jdW1lbnQgIT09IHRhcmdldC5vd25lckRvY3VtZW50KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIG1heSBmYWlsIG9uIHdlYmtpdFxuICAgICAgcmV0dXJuIHRhcmdldC5vd25lckRvY3VtZW50LmltcG9ydE5vZGUoZWxlbWVudCwgdHJ1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogYXBwZW5kVG8gdXRpbGl0eVxuICovXG5cbi8qKlxuICogQXBwZW5kIGEgbm9kZSB0byBhIHRhcmdldCBlbGVtZW50IGFuZCByZXR1cm4gdGhlIGFwcGVuZGVkIG5vZGUuXG4gKlxuICogQHBhcmFtICB7U1ZHRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtICB7U1ZHRWxlbWVudH0gdGFyZ2V0XG4gKlxuICogQHJldHVybiB7U1ZHRWxlbWVudH0gdGhlIGFwcGVuZGVkIG5vZGVcbiAqL1xuZnVuY3Rpb24gYXBwZW5kVG8oZWxlbWVudCwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQuYXBwZW5kQ2hpbGQoZW5zdXJlSW1wb3J0ZWQoZWxlbWVudCwgdGFyZ2V0KSk7XG59XG5cbi8qKlxuICogYXBwZW5kIHV0aWxpdHlcbiAqL1xuXG4vKipcbiAqIEFwcGVuZCBhIG5vZGUgdG8gYW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IG5vZGVcbiAqXG4gKiBAcmV0dXJuIHtTVkdFbGVtZW50fSB0aGUgZWxlbWVudFxuICovXG5mdW5jdGlvbiBhcHBlbmQodGFyZ2V0LCBub2RlKSB7XG4gIGFwcGVuZFRvKG5vZGUsIHRhcmdldCk7XG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbi8qKlxuICogYXR0cmlidXRlIGFjY2Vzc29yIHV0aWxpdHlcbiAqL1xuXG52YXIgTEVOR1RIX0FUVFIgPSAyO1xuXG52YXIgQ1NTX1BST1BFUlRJRVMgPSB7XG4gICdhbGlnbm1lbnQtYmFzZWxpbmUnOiAxLFxuICAnYmFzZWxpbmUtc2hpZnQnOiAxLFxuICAnY2xpcCc6IDEsXG4gICdjbGlwLXBhdGgnOiAxLFxuICAnY2xpcC1ydWxlJzogMSxcbiAgJ2NvbG9yJzogMSxcbiAgJ2NvbG9yLWludGVycG9sYXRpb24nOiAxLFxuICAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJzogMSxcbiAgJ2NvbG9yLXByb2ZpbGUnOiAxLFxuICAnY29sb3ItcmVuZGVyaW5nJzogMSxcbiAgJ2N1cnNvcic6IDEsXG4gICdkaXJlY3Rpb24nOiAxLFxuICAnZGlzcGxheSc6IDEsXG4gICdkb21pbmFudC1iYXNlbGluZSc6IDEsXG4gICdlbmFibGUtYmFja2dyb3VuZCc6IDEsXG4gICdmaWxsJzogMSxcbiAgJ2ZpbGwtb3BhY2l0eSc6IDEsXG4gICdmaWxsLXJ1bGUnOiAxLFxuICAnZmlsdGVyJzogMSxcbiAgJ2Zsb29kLWNvbG9yJzogMSxcbiAgJ2Zsb29kLW9wYWNpdHknOiAxLFxuICAnZm9udCc6IDEsXG4gICdmb250LWZhbWlseSc6IDEsXG4gICdmb250LXNpemUnOiBMRU5HVEhfQVRUUixcbiAgJ2ZvbnQtc2l6ZS1hZGp1c3QnOiAxLFxuICAnZm9udC1zdHJldGNoJzogMSxcbiAgJ2ZvbnQtc3R5bGUnOiAxLFxuICAnZm9udC12YXJpYW50JzogMSxcbiAgJ2ZvbnQtd2VpZ2h0JzogMSxcbiAgJ2dseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnOiAxLFxuICAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnOiAxLFxuICAnaW1hZ2UtcmVuZGVyaW5nJzogMSxcbiAgJ2tlcm5pbmcnOiAxLFxuICAnbGV0dGVyLXNwYWNpbmcnOiAxLFxuICAnbGlnaHRpbmctY29sb3InOiAxLFxuICAnbWFya2VyJzogMSxcbiAgJ21hcmtlci1lbmQnOiAxLFxuICAnbWFya2VyLW1pZCc6IDEsXG4gICdtYXJrZXItc3RhcnQnOiAxLFxuICAnbWFzayc6IDEsXG4gICdvcGFjaXR5JzogMSxcbiAgJ292ZXJmbG93JzogMSxcbiAgJ3BvaW50ZXItZXZlbnRzJzogMSxcbiAgJ3NoYXBlLXJlbmRlcmluZyc6IDEsXG4gICdzdG9wLWNvbG9yJzogMSxcbiAgJ3N0b3Atb3BhY2l0eSc6IDEsXG4gICdzdHJva2UnOiAxLFxuICAnc3Ryb2tlLWRhc2hhcnJheSc6IDEsXG4gICdzdHJva2UtZGFzaG9mZnNldCc6IDEsXG4gICdzdHJva2UtbGluZWNhcCc6IDEsXG4gICdzdHJva2UtbGluZWpvaW4nOiAxLFxuICAnc3Ryb2tlLW1pdGVybGltaXQnOiAxLFxuICAnc3Ryb2tlLW9wYWNpdHknOiAxLFxuICAnc3Ryb2tlLXdpZHRoJzogTEVOR1RIX0FUVFIsXG4gICd0ZXh0LWFuY2hvcic6IDEsXG4gICd0ZXh0LWRlY29yYXRpb24nOiAxLFxuICAndGV4dC1yZW5kZXJpbmcnOiAxLFxuICAndW5pY29kZS1iaWRpJzogMSxcbiAgJ3Zpc2liaWxpdHknOiAxLFxuICAnd29yZC1zcGFjaW5nJzogMSxcbiAgJ3dyaXRpbmctbW9kZSc6IDFcbn07XG5cblxuZnVuY3Rpb24gZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpIHtcbiAgaWYgKENTU19QUk9QRVJUSUVTW25hbWVdKSB7XG4gICAgcmV0dXJuIG5vZGUuc3R5bGVbbmFtZV07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlTlMobnVsbCwgbmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0QXR0cmlidXRlKG5vZGUsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBoeXBoZW5hdGVkID0gbmFtZS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEtJDInKS50b0xvd2VyQ2FzZSgpO1xuXG4gIHZhciB0eXBlID0gQ1NTX1BST1BFUlRJRVNbaHlwaGVuYXRlZF07XG5cbiAgaWYgKHR5cGUpIHtcbiAgICAvLyBhcHBlbmQgcGl4ZWwgdW5pdCwgdW5sZXNzIHByZXNlbnRcbiAgICBpZiAodHlwZSA9PT0gTEVOR1RIX0FUVFIgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpICsgJ3B4JztcbiAgICB9XG5cbiAgICBub2RlLnN0eWxlW2h5cGhlbmF0ZWRdID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCBuYW1lLCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0QXR0cmlidXRlcyhub2RlLCBhdHRycykge1xuXG4gIHZhciBuYW1lcyA9IE9iamVjdC5rZXlzKGF0dHJzKSwgaSwgbmFtZTtcblxuICBmb3IgKGkgPSAwLCBuYW1lOyAobmFtZSA9IG5hbWVzW2ldKTsgaSsrKSB7XG4gICAgc2V0QXR0cmlidXRlKG5vZGUsIG5hbWUsIGF0dHJzW25hbWVdKTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgb3Igc2V0cyByYXcgYXR0cmlidXRlcyBvbiBhIG5vZGUuXG4gKlxuICogQHBhcmFtICB7U1ZHRWxlbWVudH0gbm9kZVxuICogQHBhcmFtICB7T2JqZWN0fSBbYXR0cnNdXG4gKiBAcGFyYW0gIHtTdHJpbmd9IFtuYW1lXVxuICogQHBhcmFtICB7U3RyaW5nfSBbdmFsdWVdXG4gKlxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBhdHRyKG5vZGUsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2V0QXR0cmlidXRlKG5vZGUsIG5hbWUsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShub2RlLCBuYW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc2V0QXR0cmlidXRlcyhub2RlLCBuYW1lKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuXG4vKipcclxuICogQ2xlYXIgdXRpbGl0eVxyXG4gKi9cclxuZnVuY3Rpb24gaW5kZXgoYXJyLCBvYmopIHtcclxuICBpZiAoYXJyLmluZGV4T2YpIHtcclxuICAgIHJldHVybiBhcnIuaW5kZXhPZihvYmopO1xyXG4gIH1cclxuXHJcblxyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7XHJcbiAgICBpZiAoYXJyW2ldID09PSBvYmopIHtcclxuICAgICAgcmV0dXJuIGk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gLTE7XHJcbn1cclxuXHJcbnZhciByZSA9IC9cXHMrLztcclxuXHJcbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XHJcblxyXG5mdW5jdGlvbiBkZWZpbmVkKG8pIHtcclxuICByZXR1cm4gdHlwZW9mIG8gIT09ICd1bmRlZmluZWQnO1xyXG59XHJcblxyXG4vKipcclxuICogV3JhcCBgZWxgIGluIGEgYENsYXNzTGlzdGAuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxcclxuICogQHJldHVybiB7Q2xhc3NMaXN0fVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbmZ1bmN0aW9uIGNsYXNzZXMoZWwpIHtcclxuICByZXR1cm4gbmV3IENsYXNzTGlzdChlbCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENsYXNzTGlzdChlbCkge1xyXG4gIGlmICghZWwgfHwgIWVsLm5vZGVUeXBlKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgRE9NIGVsZW1lbnQgcmVmZXJlbmNlIGlzIHJlcXVpcmVkJyk7XHJcbiAgfVxyXG4gIHRoaXMuZWwgPSBlbDtcclxuICB0aGlzLmxpc3QgPSBlbC5jbGFzc0xpc3Q7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBZGQgY2xhc3MgYG5hbWVgIGlmIG5vdCBhbHJlYWR5IHByZXNlbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXHJcbiAqIEByZXR1cm4ge0NsYXNzTGlzdH1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5DbGFzc0xpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuXHJcbiAgLy8gY2xhc3NMaXN0XHJcbiAgaWYgKHRoaXMubGlzdCkge1xyXG4gICAgdGhpcy5saXN0LmFkZChuYW1lKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gZmFsbGJhY2tcclxuICB2YXIgYXJyID0gdGhpcy5hcnJheSgpO1xyXG4gIHZhciBpID0gaW5kZXgoYXJyLCBuYW1lKTtcclxuICBpZiAoIX5pKSB7XHJcbiAgICBhcnIucHVzaChuYW1lKTtcclxuICB9XHJcblxyXG4gIGlmIChkZWZpbmVkKHRoaXMuZWwuY2xhc3NOYW1lLmJhc2VWYWwpKSB7XHJcbiAgICB0aGlzLmVsLmNsYXNzTmFtZS5iYXNlVmFsID0gYXJyLmpvaW4oJyAnKTtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5lbC5jbGFzc05hbWUgPSBhcnIuam9pbignICcpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogUmVtb3ZlIGNsYXNzIGBuYW1lYCB3aGVuIHByZXNlbnQsIG9yXHJcbiAqIHBhc3MgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gcmVtb3ZlXHJcbiAqIGFueSB3aGljaCBtYXRjaC5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSBuYW1lXHJcbiAqIEByZXR1cm4ge0NsYXNzTGlzdH1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5DbGFzc0xpc3QucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICBpZiAoJ1tvYmplY3QgUmVnRXhwXScgPT09IHRvU3RyaW5nLmNhbGwobmFtZSkpIHtcclxuICAgIHJldHVybiB0aGlzLnJlbW92ZU1hdGNoaW5nKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8gY2xhc3NMaXN0XHJcbiAgaWYgKHRoaXMubGlzdCkge1xyXG4gICAgdGhpcy5saXN0LnJlbW92ZShuYW1lKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gZmFsbGJhY2tcclxuICB2YXIgYXJyID0gdGhpcy5hcnJheSgpO1xyXG4gIHZhciBpID0gaW5kZXgoYXJyLCBuYW1lKTtcclxuICBpZiAofmkpIHtcclxuICAgIGFyci5zcGxpY2UoaSwgMSk7XHJcbiAgfVxyXG4gIHRoaXMuZWwuY2xhc3NOYW1lLmJhc2VWYWwgPSBhcnIuam9pbignICcpO1xyXG4gIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSBhbGwgY2xhc3NlcyBtYXRjaGluZyBgcmVgLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlZ0V4cH0gcmVcclxuICogQHJldHVybiB7Q2xhc3NMaXN0fVxyXG4gKiBAYXBpIHByaXZhdGVcclxuICovXHJcblxyXG5DbGFzc0xpc3QucHJvdG90eXBlLnJlbW92ZU1hdGNoaW5nID0gZnVuY3Rpb24ocmUpIHtcclxuICB2YXIgYXJyID0gdGhpcy5hcnJheSgpO1xyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBpZiAocmUudGVzdChhcnJbaV0pKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlKGFycltpXSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRvZ2dsZSBjbGFzcyBgbmFtZWAsIGNhbiBmb3JjZSBzdGF0ZSB2aWEgYGZvcmNlYC5cclxuICpcclxuICogRm9yIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBjbGFzc0xpc3QsIGJ1dCBkbyBub3Qgc3VwcG9ydCBgZm9yY2VgIHlldCxcclxuICogdGhlIG1pc3Rha2Ugd2lsbCBiZSBkZXRlY3RlZCBhbmQgY29ycmVjdGVkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGZvcmNlXHJcbiAqIEByZXR1cm4ge0NsYXNzTGlzdH1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5DbGFzc0xpc3QucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uKG5hbWUsIGZvcmNlKSB7XHJcbiAgLy8gY2xhc3NMaXN0XHJcbiAgaWYgKHRoaXMubGlzdCkge1xyXG4gICAgaWYgKGRlZmluZWQoZm9yY2UpKSB7XHJcbiAgICAgIGlmIChmb3JjZSAhPT0gdGhpcy5saXN0LnRvZ2dsZShuYW1lLCBmb3JjZSkpIHtcclxuICAgICAgICB0aGlzLmxpc3QudG9nZ2xlKG5hbWUpOyAvLyB0b2dnbGUgYWdhaW4gdG8gY29ycmVjdFxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxpc3QudG9nZ2xlKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyBmYWxsYmFja1xyXG4gIGlmIChkZWZpbmVkKGZvcmNlKSkge1xyXG4gICAgaWYgKCFmb3JjZSkge1xyXG4gICAgICB0aGlzLnJlbW92ZShuYW1lKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWRkKG5hbWUpO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAodGhpcy5oYXMobmFtZSkpIHtcclxuICAgICAgdGhpcy5yZW1vdmUobmFtZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFkZChuYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybiBhbiBhcnJheSBvZiBjbGFzc2VzLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHtBcnJheX1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5DbGFzc0xpc3QucHJvdG90eXBlLmFycmF5ID0gZnVuY3Rpb24oKSB7XHJcbiAgdmFyIGNsYXNzTmFtZSA9IHRoaXMuZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnO1xyXG4gIHZhciBzdHIgPSBjbGFzc05hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xyXG4gIHZhciBhcnIgPSBzdHIuc3BsaXQocmUpO1xyXG4gIGlmICgnJyA9PT0gYXJyWzBdKSB7XHJcbiAgICBhcnIuc2hpZnQoKTtcclxuICB9XHJcbiAgcmV0dXJuIGFycjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiBjbGFzcyBgbmFtZWAgaXMgcHJlc2VudC5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcclxuICogQHJldHVybiB7Q2xhc3NMaXN0fVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbkNsYXNzTGlzdC5wcm90b3R5cGUuaGFzID1cclxuQ2xhc3NMaXN0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICByZXR1cm4gKFxyXG4gICAgdGhpcy5saXN0ID9cclxuICAgICAgdGhpcy5saXN0LmNvbnRhaW5zKG5hbWUpIDpcclxuICAgICAgISEgfmluZGV4KHRoaXMuYXJyYXkoKSwgbmFtZSlcclxuICApO1xyXG59O1xuXG5mdW5jdGlvbiByZW1vdmUoZWxlbWVudCkge1xuICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXG4gIGlmIChwYXJlbnQpIHtcbiAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBDbGVhciB1dGlsaXR5XG4gKi9cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBjaGlsZHJlbiBmcm9tIHRoZSBnaXZlbiBlbGVtZW50XG4gKlxuICogQHBhcmFtICB7RE9NRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB7RE9NRWxlbWVudH0gdGhlIGVsZW1lbnQgKGZvciBjaGFpbmluZylcbiAqL1xuZnVuY3Rpb24gY2xlYXIoZWxlbWVudCkge1xuICB2YXIgY2hpbGQ7XG5cbiAgd2hpbGUgKChjaGlsZCA9IGVsZW1lbnQuZmlyc3RDaGlsZCkpIHtcbiAgICByZW1vdmUoY2hpbGQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGNsb25lKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQuY2xvbmVOb2RlKHRydWUpO1xufVxuXG52YXIgbnMgPSB7XG4gIHN2ZzogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJ1xufTtcblxuLyoqXG4gKiBET00gcGFyc2luZyB1dGlsaXR5XG4gKi9cblxudmFyIFNWR19TVEFSVCA9ICc8c3ZnIHhtbG5zPVwiJyArIG5zLnN2ZyArICdcIic7XG5cbmZ1bmN0aW9uIHBhcnNlKHN2Zykge1xuXG4gIHZhciB1bndyYXAgPSBmYWxzZTtcblxuICAvLyBlbnN1cmUgd2UgaW1wb3J0IGEgdmFsaWQgc3ZnIGRvY3VtZW50XG4gIGlmIChzdmcuc3Vic3RyaW5nKDAsIDQpID09PSAnPHN2ZycpIHtcbiAgICBpZiAoc3ZnLmluZGV4T2YobnMuc3ZnKSA9PT0gLTEpIHtcbiAgICAgIHN2ZyA9IFNWR19TVEFSVCArIHN2Zy5zdWJzdHJpbmcoNCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIG5hbWVzcGFjZSBzdmdcbiAgICBzdmcgPSBTVkdfU1RBUlQgKyAnPicgKyBzdmcgKyAnPC9zdmc+JztcbiAgICB1bndyYXAgPSB0cnVlO1xuICB9XG5cbiAgdmFyIHBhcnNlZCA9IHBhcnNlRG9jdW1lbnQoc3ZnKTtcblxuICBpZiAoIXVud3JhcCkge1xuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgdmFyIHBhcmVudCA9IHBhcnNlZC5maXJzdENoaWxkO1xuXG4gIHdoaWxlIChwYXJlbnQuZmlyc3RDaGlsZCkge1xuICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHBhcmVudC5maXJzdENoaWxkKTtcbiAgfVxuXG4gIHJldHVybiBmcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gcGFyc2VEb2N1bWVudChzdmcpIHtcblxuICB2YXIgcGFyc2VyO1xuXG4gIC8vIHBhcnNlXG4gIHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcbiAgcGFyc2VyLmFzeW5jID0gZmFsc2U7XG5cbiAgcmV0dXJuIHBhcnNlci5wYXJzZUZyb21TdHJpbmcoc3ZnLCAndGV4dC94bWwnKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgdXRpbGl0eSBmb3IgU1ZHIGVsZW1lbnRzXG4gKi9cblxuXG4vKipcbiAqIENyZWF0ZSBhIHNwZWNpZmljIHR5cGUgZnJvbSBuYW1lIG9yIFNWRyBtYXJrdXAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUgb3IgbWFya3VwIG9mIHRoZSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW2F0dHJzXSBhdHRyaWJ1dGVzIHRvIHNldCBvbiB0aGUgZWxlbWVudFxuICpcbiAqIEByZXR1cm5zIHtTVkdFbGVtZW50fVxuICovXG5mdW5jdGlvbiBjcmVhdGUobmFtZSwgYXR0cnMpIHtcbiAgdmFyIGVsZW1lbnQ7XG5cbiAgaWYgKG5hbWUuY2hhckF0KDApID09PSAnPCcpIHtcbiAgICBlbGVtZW50ID0gcGFyc2UobmFtZSkuZmlyc3RDaGlsZDtcbiAgICBlbGVtZW50ID0gZG9jdW1lbnQuaW1wb3J0Tm9kZShlbGVtZW50LCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLnN2ZywgbmFtZSk7XG4gIH1cblxuICBpZiAoYXR0cnMpIHtcbiAgICBhdHRyKGVsZW1lbnQsIGF0dHJzKTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIEV2ZW50cyBoYW5kbGluZyB1dGlsaXR5XG4gKi9cblxuZnVuY3Rpb24gb24obm9kZSwgZXZlbnQsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSB7XG4gIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpO1xufVxuXG5mdW5jdGlvbiBvZmYobm9kZSwgZXZlbnQsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSB7XG4gIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpO1xufVxuXG4vKipcbiAqIEdlb21ldHJ5IGhlbHBlcnNcbiAqL1xuXG4vLyBmYWtlIG5vZGUgdXNlZCB0byBpbnN0YW50aWF0ZSBzdmcgZ2VvbWV0cnkgZWxlbWVudHNcbnZhciBub2RlID0gY3JlYXRlKCdzdmcnKTtcblxuZnVuY3Rpb24gZXh0ZW5kKG9iamVjdCwgcHJvcHMpIHtcbiAgdmFyIGksIGssIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wcyk7XG5cbiAgZm9yIChpID0gMDsgKGsgPSBrZXlzW2ldKTsgaSsrKSB7XG4gICAgb2JqZWN0W2tdID0gcHJvcHNba107XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5cbmZ1bmN0aW9uIGNyZWF0ZVBvaW50KHgsIHkpIHtcbiAgdmFyIHBvaW50ID0gbm9kZS5jcmVhdGVTVkdQb2ludCgpO1xuXG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICBjYXNlIDA6XG4gICAgcmV0dXJuIHBvaW50O1xuICBjYXNlIDI6XG4gICAgeCA9IHtcbiAgICAgIHg6IHgsXG4gICAgICB5OiB5XG4gICAgfTtcbiAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBleHRlbmQocG9pbnQsIHgpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBtYXRyaXggdmlhIGFyZ3MuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBjcmVhdGVNYXRyaXgoeyBhOiAxLCBiOiAxIH0pO1xuICogY3JlYXRlTWF0cml4KCk7XG4gKiBjcmVhdGVNYXRyaXgoMSwgMiwgMCwgMCwgMzAsIDIwKTtcbiAqXG4gKiBAcmV0dXJuIHtTVkdNYXRyaXh9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1hdHJpeChhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBtYXRyaXggPSBub2RlLmNyZWF0ZVNWR01hdHJpeCgpO1xuXG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICBjYXNlIDA6XG4gICAgcmV0dXJuIG1hdHJpeDtcbiAgY2FzZSAxOlxuICAgIHJldHVybiBleHRlbmQobWF0cml4LCBhKTtcbiAgY2FzZSA2OlxuICAgIHJldHVybiBleHRlbmQobWF0cml4LCB7XG4gICAgICBhOiBhLFxuICAgICAgYjogYixcbiAgICAgIGM6IGMsXG4gICAgICBkOiBkLFxuICAgICAgZTogZSxcbiAgICAgIGY6IGZcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVUcmFuc2Zvcm0obWF0cml4KSB7XG4gIGlmIChtYXRyaXgpIHtcbiAgICByZXR1cm4gbm9kZS5jcmVhdGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4KG1hdHJpeCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vZGUuY3JlYXRlU1ZHVHJhbnNmb3JtKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBTZXJpYWxpemF0aW9uIHV0aWxcbiAqL1xuXG52YXIgVEVYVF9FTlRJVElFUyA9IC8oWyY8Pl17MX0pL2c7XG52YXIgQVRUUl9FTlRJVElFUyA9IC8oW1xcblxcclwiXXsxfSkvZztcblxudmFyIEVOVElUWV9SRVBMQUNFTUVOVCA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICdcXCcnXG59O1xuXG5mdW5jdGlvbiBlc2NhcGUoc3RyLCBwYXR0ZXJuKSB7XG5cbiAgZnVuY3Rpb24gcmVwbGFjZUZuKG1hdGNoLCBlbnRpdHkpIHtcbiAgICByZXR1cm4gRU5USVRZX1JFUExBQ0VNRU5UW2VudGl0eV0gfHwgZW50aXR5O1xuICB9XG5cbiAgcmV0dXJuIHN0ci5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VGbik7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZShub2RlLCBvdXRwdXQpIHtcblxuICB2YXIgaSwgbGVuLCBhdHRyTWFwLCBhdHRyTm9kZSwgY2hpbGROb2RlcztcblxuICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgLy8gVEVYVFxuICBjYXNlIDM6XG4gICAgLy8gcmVwbGFjZSBzcGVjaWFsIFhNTCBjaGFyYWN0ZXJzXG4gICAgb3V0cHV0LnB1c2goZXNjYXBlKG5vZGUudGV4dENvbnRlbnQsIFRFWFRfRU5USVRJRVMpKTtcbiAgICBicmVhaztcblxuICAvLyBFTEVNRU5UXG4gIGNhc2UgMTpcbiAgICBvdXRwdXQucHVzaCgnPCcsIG5vZGUudGFnTmFtZSk7XG5cbiAgICBpZiAobm9kZS5oYXNBdHRyaWJ1dGVzKCkpIHtcbiAgICAgIGF0dHJNYXAgPSBub2RlLmF0dHJpYnV0ZXM7XG4gICAgICBmb3IgKGkgPSAwLCBsZW4gPSBhdHRyTWFwLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIGF0dHJOb2RlID0gYXR0ck1hcC5pdGVtKGkpO1xuICAgICAgICBvdXRwdXQucHVzaCgnICcsIGF0dHJOb2RlLm5hbWUsICc9XCInLCBlc2NhcGUoYXR0ck5vZGUudmFsdWUsIEFUVFJfRU5USVRJRVMpLCAnXCInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobm9kZS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgIG91dHB1dC5wdXNoKCc+Jyk7XG4gICAgICBjaGlsZE5vZGVzID0gbm9kZS5jaGlsZE5vZGVzO1xuICAgICAgZm9yIChpID0gMCwgbGVuID0gY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBzZXJpYWxpemUoY2hpbGROb2Rlcy5pdGVtKGkpLCBvdXRwdXQpO1xuICAgICAgfVxuICAgICAgb3V0cHV0LnB1c2goJzwvJywgbm9kZS50YWdOYW1lLCAnPicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCgnLz4nKTtcbiAgICB9XG4gICAgYnJlYWs7XG5cbiAgLy8gQ09NTUVOVFxuICBjYXNlIDg6XG4gICAgb3V0cHV0LnB1c2goJzwhLS0nLCBlc2NhcGUobm9kZS5ub2RlVmFsdWUsIFRFWFRfRU5USVRJRVMpLCAnLS0+Jyk7XG4gICAgYnJlYWs7XG5cbiAgLy8gQ0RBVEFcbiAgY2FzZSA0OlxuICAgIG91dHB1dC5wdXNoKCc8IVtDREFUQVsnLCBub2RlLm5vZGVWYWx1ZSwgJ11dPicpO1xuICAgIGJyZWFrO1xuXG4gIGRlZmF1bHQ6XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmFibGUgdG8gaGFuZGxlIG5vZGUgJyArIG5vZGUubm9kZVR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBpbm5lckhUTUwgbGlrZSBmdW5jdGlvbmFsaXR5IGZvciBTVkcgZWxlbWVudHMuXG4gKiBiYXNlZCBvbiBpbm5lclNWRyAoaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9pbm5lcnN2ZylcbiAqL1xuXG5cbmZ1bmN0aW9uIHNldChlbGVtZW50LCBzdmcpIHtcblxuICB2YXIgcGFyc2VkID0gcGFyc2Uoc3ZnKTtcblxuICAvLyBjbGVhciBlbGVtZW50IGNvbnRlbnRzXG4gIGNsZWFyKGVsZW1lbnQpO1xuXG4gIGlmICghc3ZnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFpc0ZyYWdtZW50KHBhcnNlZCkpIHtcbiAgICAvLyBleHRyYWN0IDxzdmc+IGZyb20gcGFyc2VkIGRvY3VtZW50XG4gICAgcGFyc2VkID0gcGFyc2VkLmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIHZhciBub2RlcyA9IHNsaWNlKHBhcnNlZC5jaGlsZE5vZGVzKTtcblxuICAvLyBpbXBvcnQgKyBhcHBlbmQgZWFjaCBub2RlXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBhcHBlbmRUbyhub2Rlc1tpXSwgZWxlbWVudCk7XG4gIH1cblxufVxuXG5mdW5jdGlvbiBnZXQoZWxlbWVudCkge1xuICB2YXIgY2hpbGQgPSBlbGVtZW50LmZpcnN0Q2hpbGQsXG4gICAgICBvdXRwdXQgPSBbXTtcblxuICB3aGlsZSAoY2hpbGQpIHtcbiAgICBzZXJpYWxpemUoY2hpbGQsIG91dHB1dCk7XG4gICAgY2hpbGQgPSBjaGlsZC5uZXh0U2libGluZztcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQuam9pbignJyk7XG59XG5cbmZ1bmN0aW9uIGlzRnJhZ21lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudC1mcmFnbWVudCc7XG59XG5cbmZ1bmN0aW9uIGlubmVyU1ZHKGVsZW1lbnQsIHN2Zykge1xuXG4gIGlmIChzdmcgIT09IHVuZGVmaW5lZCkge1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldChlbGVtZW50LCBzdmcpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXJyb3IgcGFyc2luZyBTVkc6ICcgKyBlLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXQoZWxlbWVudCk7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBzbGljZShhcnIpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycik7XG59XG5cbi8qKlxuICogU2VsZWN0aW9uIHV0aWxpdGllc1xuICovXG5cbmZ1bmN0aW9uIHNlbGVjdChub2RlLCBzZWxlY3Rvcikge1xuICByZXR1cm4gbm9kZS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0QWxsKG5vZGUsIHNlbGVjdG9yKSB7XG4gIHZhciBub2RlcyA9IG5vZGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cbiAgcmV0dXJuIFtdLm1hcC5jYWxsKG5vZGVzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0pO1xufVxuXG4vKipcbiAqIHByZXBlbmRUbyB1dGlsaXR5XG4gKi9cblxuLyoqXG4gKiBQcmVwZW5kIGEgbm9kZSB0byBhIHRhcmdldCBlbGVtZW50IGFuZCByZXR1cm4gdGhlIHByZXBlbmRlZCBub2RlLlxuICpcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IHRhcmdldFxuICpcbiAqIEByZXR1cm4ge1NWR0VsZW1lbnR9IHRoZSBwcmVwZW5kZWQgbm9kZVxuICovXG5mdW5jdGlvbiBwcmVwZW5kVG8obm9kZSwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQuaW5zZXJ0QmVmb3JlKGVuc3VyZUltcG9ydGVkKG5vZGUsIHRhcmdldCksIHRhcmdldC5maXJzdENoaWxkIHx8IG51bGwpO1xufVxuXG4vKipcbiAqIHByZXBlbmQgdXRpbGl0eVxuICovXG5cbi8qKlxuICogUHJlcGVuZCBhIG5vZGUgdG8gYSB0YXJnZXQgZWxlbWVudFxuICpcbiAqIEBwYXJhbSAge1NWR0VsZW1lbnR9IHRhcmdldFxuICogQHBhcmFtICB7U1ZHRWxlbWVudH0gbm9kZVxuICpcbiAqIEByZXR1cm4ge1NWR0VsZW1lbnR9IHRoZSB0YXJnZXQgZWxlbWVudFxuICovXG5mdW5jdGlvbiBwcmVwZW5kKHRhcmdldCwgbm9kZSkge1xuICBwcmVwZW5kVG8obm9kZSwgdGFyZ2V0KTtcbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuLyoqXG4gKiBSZXBsYWNlIHV0aWxpdHlcbiAqL1xuXG5mdW5jdGlvbiByZXBsYWNlKGVsZW1lbnQsIHJlcGxhY2VtZW50KSB7XG4gIGVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZW5zdXJlSW1wb3J0ZWQocmVwbGFjZW1lbnQsIGVsZW1lbnQpLCBlbGVtZW50KTtcbiAgcmV0dXJuIHJlcGxhY2VtZW50O1xufVxuXG4vKipcbiAqIHRyYW5zZm9ybSBhY2Nlc3NvciB1dGlsaXR5XG4gKi9cblxuZnVuY3Rpb24gd3JhcE1hdHJpeCh0cmFuc2Zvcm1MaXN0LCB0cmFuc2Zvcm0pIHtcbiAgaWYgKHRyYW5zZm9ybSBpbnN0YW5jZW9mIFNWR01hdHJpeCkge1xuICAgIHJldHVybiB0cmFuc2Zvcm1MaXN0LmNyZWF0ZVNWR1RyYW5zZm9ybUZyb21NYXRyaXgodHJhbnNmb3JtKTtcbiAgfVxuXG4gIHJldHVybiB0cmFuc2Zvcm07XG59XG5cblxuZnVuY3Rpb24gc2V0VHJhbnNmb3Jtcyh0cmFuc2Zvcm1MaXN0LCB0cmFuc2Zvcm1zKSB7XG4gIHZhciBpLCB0O1xuXG4gIHRyYW5zZm9ybUxpc3QuY2xlYXIoKTtcblxuICBmb3IgKGkgPSAwOyAodCA9IHRyYW5zZm9ybXNbaV0pOyBpKyspIHtcbiAgICB0cmFuc2Zvcm1MaXN0LmFwcGVuZEl0ZW0od3JhcE1hdHJpeCh0cmFuc2Zvcm1MaXN0LCB0KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgb3Igc2V0IHRoZSB0cmFuc2Zvcm1zIG9uIHRoZSBnaXZlbiBub2RlLlxuICpcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gbm9kZVxuICogQHBhcmFtICB7U1ZHVHJhbnNmb3JtfFNWR01hdHJpeHxBcnJheTxTVkdUcmFuc2Zvcm18U1ZHTWF0cml4Pn0gW3RyYW5zZm9ybXNdXG4gKlxuICogQHJldHVybiB7U1ZHVHJhbnNmb3JtfSB0aGUgY29uc29saWRhdGVkIHRyYW5zZm9ybVxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm0obm9kZSwgdHJhbnNmb3Jtcykge1xuICB2YXIgdHJhbnNmb3JtTGlzdCA9IG5vZGUudHJhbnNmb3JtLmJhc2VWYWw7XG5cbiAgaWYgKHRyYW5zZm9ybXMpIHtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm1zKSkge1xuICAgICAgdHJhbnNmb3JtcyA9IFsgdHJhbnNmb3JtcyBdO1xuICAgIH1cblxuICAgIHNldFRyYW5zZm9ybXModHJhbnNmb3JtTGlzdCwgdHJhbnNmb3Jtcyk7XG4gIH1cblxuICByZXR1cm4gdHJhbnNmb3JtTGlzdC5jb25zb2xpZGF0ZSgpO1xufVxuXG5leHBvcnQgeyBhcHBlbmQsIGFwcGVuZFRvLCBhdHRyLCBjbGFzc2VzLCBjbGVhciwgY2xvbmUsIGNyZWF0ZSwgaW5uZXJTVkcsIHByZXBlbmQsIHByZXBlbmRUbywgcmVtb3ZlLCByZXBsYWNlLCB0cmFuc2Zvcm0sIG9uLCBvZmYsIGNyZWF0ZVBvaW50LCBjcmVhdGVNYXRyaXgsIGNyZWF0ZVRyYW5zZm9ybSwgc2VsZWN0LCBzZWxlY3RBbGwgfTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcclxuICBcIm5hbWVcIjogXCJBY3Rpdml0aVwiLFxyXG4gIFwidXJpXCI6IFwiaHR0cDovL2FjdGl2aXRpLm9yZy9icG1uXCIsXHJcbiAgXCJwcmVmaXhcIjogXCJhY3Rpdml0aVwiLFxyXG4gIFwieG1sXCI6IHtcclxuICAgIFwidGFnQWxpYXNcIjogXCJsb3dlckNhc2VcIlxyXG4gIH0sXHJcbiAgXCJhc3NvY2lhdGlvbnNcIjogW10sXHJcbiAgXCJ0eXBlc1wiOiBbXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkRlZmluaXRpb25zXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpEZWZpbml0aW9uc1wiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZGlhZ3JhbVJlbGF0aW9uSWRcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiSW5PdXRCaW5kaW5nXCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbXHJcbiAgICAgICAgXCJFbGVtZW50XCJcclxuICAgICAgXSxcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwic291cmNlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInNvdXJjZUV4cHJlc3Npb25cIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidGFyZ2V0XCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImJ1c2luZXNzS2V5XCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImxvY2FsXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiQm9vbGVhblwiLFxyXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YXJpYWJsZXNcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiSW5cIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFtcclxuICAgICAgICBcIkluT3V0QmluZGluZ1wiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwibWV0YVwiOiB7XHJcbiAgICAgICAgXCJhbGxvd2VkSW5cIjogW1xyXG4gICAgICAgICAgXCJicG1uOkNhbGxBY3Rpdml0eVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJPdXRcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFtcclxuICAgICAgICBcIkluT3V0QmluZGluZ1wiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwibWV0YVwiOiB7XHJcbiAgICAgICAgXCJhbGxvd2VkSW5cIjogW1xyXG4gICAgICAgICAgXCJicG1uOkNhbGxBY3Rpdml0eVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJBc3luY0NhcGFibGVcIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOkFjdGl2aXR5XCIsXHJcbiAgICAgICAgXCJicG1uOkdhdGV3YXlcIixcclxuICAgICAgICBcImJwbW46RXZlbnRcIlxyXG4gICAgICBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImFzeW5jXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiQm9vbGVhblwiLFxyXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJhc3luY0JlZm9yZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkJvb2xlYW5cIixcclxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiYXN5bmNBZnRlclwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkJvb2xlYW5cIixcclxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZXhjbHVzaXZlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiQm9vbGVhblwiLFxyXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkpvYlByaW9yaXplZFwiLFxyXG4gICAgICBcImlzQWJzdHJhY3RcIjogdHJ1ZSxcclxuICAgICAgXCJleHRlbmRzXCI6IFtcclxuICAgICAgICBcImJwbW46UHJvY2Vzc1wiLFxyXG4gICAgICAgIFwiYWN0aXZpdGk6QXN5bmNDYXBhYmxlXCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJqb2JQcmlvcml0eVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJTaWduYWxFdmVudERlZmluaXRpb25cIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvblwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiYXN5bmNcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJCb29sZWFuXCIsXHJcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkVycm9yRXZlbnREZWZpbml0aW9uXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvblwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZXJyb3JDb2RlVmFyaWFibGVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZXJyb3JNZXNzYWdlVmFyaWFibGVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiRXJyb3JcIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOkVycm9yXCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJhY3Rpdml0aTplcnJvck1lc3NhZ2VcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiUG90ZW50aWFsU3RhcnRlclwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogW1xyXG4gICAgICAgIFwiRWxlbWVudFwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwicmVzb3VyY2VBc3NpZ25tZW50RXhwcmVzc2lvblwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYnBtbjpSZXNvdXJjZUFzc2lnbm1lbnRFeHByZXNzaW9uXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkZvcm1TdXBwb3J0ZWRcIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOlN0YXJ0RXZlbnRcIixcclxuICAgICAgICBcImJwbW46VXNlclRhc2tcIlxyXG4gICAgICBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImZvcm1IYW5kbGVyQ2xhc3NcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZm9ybUtleVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJUZW1wbGF0ZVN1cHBvcnRlZFwiLFxyXG4gICAgICBcImlzQWJzdHJhY3RcIjogdHJ1ZSxcclxuICAgICAgXCJleHRlbmRzXCI6IFtcclxuICAgICAgICBcImJwbW46UHJvY2Vzc1wiLFxyXG4gICAgICAgIFwiYnBtbjpGbG93RWxlbWVudFwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwibW9kZWxlclRlbXBsYXRlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkluaXRpYXRvclwiLFxyXG4gICAgICBcImlzQWJzdHJhY3RcIjogdHJ1ZSxcclxuICAgICAgXCJleHRlbmRzXCI6IFsgXCJicG1uOlN0YXJ0RXZlbnRcIiBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImluaXRpYXRvclwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJTY3JpcHRUYXNrXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpTY3JpcHRUYXNrXCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJyZXN1bHRWYXJpYWJsZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJyZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJQcm9jZXNzXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpQcm9jZXNzXCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYW5kaWRhdGVTdGFydGVyQ29uZmlndXJhdGlvblwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYW5kaWRhdGVTdGFydGVyVXNlcnNcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidmVyc2lvblRhZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJoaXN0b3J5VGltZVRvTGl2ZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJpc1N0YXJ0YWJsZUluVGFza2xpc3RcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJCb29sZWFuXCIsXHJcbiAgICAgICAgICBcImRlZmF1bHRcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwicHJvY2Vzcy1pcy1leGVjdXRhYmxlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiQm9vbGVhblwiLFxyXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkVzY2FsYXRpb25FdmVudERlZmluaXRpb25cIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb25cIlxyXG4gICAgICBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImVzY2FsYXRpb25Db2RlVmFyaWFibGVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiRm9ybWFsRXhwcmVzc2lvblwiLFxyXG4gICAgICBcImlzQWJzdHJhY3RcIjogdHJ1ZSxcclxuICAgICAgXCJleHRlbmRzXCI6IFtcclxuICAgICAgICBcImJwbW46Rm9ybWFsRXhwcmVzc2lvblwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwicmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiQXNzaWduYWJsZVwiLFxyXG4gICAgICBcImV4dGVuZHNcIjogWyBcImJwbW46VXNlclRhc2tcIiBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImFzc2lnbmVlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNhbmRpZGF0ZVVzZXJzXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNhbmRpZGF0ZUdyb3Vwc1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkdWVEYXRlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImZvbGxvd1VwRGF0ZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJwcmlvcml0eVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJDYWxsQWN0aXZpdHlcIixcclxuICAgICAgXCJleHRlbmRzXCI6IFsgXCJicG1uOkNhbGxBY3Rpdml0eVwiIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY2FsbGVkRWxlbWVudEJpbmRpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBcImxhdGVzdFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYWxsZWRFbGVtZW50VmVyc2lvblwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYWxsZWRFbGVtZW50VmVyc2lvblRhZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYWxsZWRFbGVtZW50VGVuYW50SWRcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY2FzZVJlZlwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjYXNlQmluZGluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJkZWZhdWx0XCI6IFwibGF0ZXN0XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNhc2VWZXJzaW9uXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNhc2VUZW5hbnRJZFwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YXJpYWJsZU1hcHBpbmdDbGFzc1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YXJpYWJsZU1hcHBpbmdEZWxlZ2F0ZUV4cHJlc3Npb25cIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiU2VydmljZVRhc2tMaWtlXCIsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOlNlcnZpY2VUYXNrXCIsXHJcbiAgICAgICAgXCJicG1uOkJ1c2luZXNzUnVsZVRhc2tcIixcclxuICAgICAgICBcImJwbW46U2VuZFRhc2tcIixcclxuICAgICAgICBcImJwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvblwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZXhwcmVzc2lvblwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjbGFzc1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkZWxlZ2F0ZUV4cHJlc3Npb25cIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwicmVzdWx0VmFyaWFibGVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiRG1uQ2FwYWJsZVwiLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpCdXNpbmVzc1J1bGVUYXNrXCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkZWNpc2lvblJlZlwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkZWNpc2lvblJlZkJpbmRpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBcImxhdGVzdFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkZWNpc2lvblJlZlZlcnNpb25cIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwibWFwRGVjaXNpb25SZXN1bHRcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInJlc3VsdExpc3RcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZGVjaXNpb25SZWZUZW5hbnRJZFwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJFeHRlcm5hbENhcGFibGVcIixcclxuICAgICAgXCJleHRlbmRzXCI6IFtcclxuICAgICAgICBcImFjdGl2aXRpOlNlcnZpY2VUYXNrTGlrZVwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidHlwZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ0b3BpY1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJUYXNrUHJpb3JpemVkXCIsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbXHJcbiAgICAgICAgXCJicG1uOlByb2Nlc3NcIixcclxuICAgICAgICBcImFjdGl2aXRpOkV4dGVybmFsQ2FwYWJsZVwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidGFza1ByaW9yaXR5XCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIlByb3BlcnRpZXNcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFtcclxuICAgICAgICBcIkVsZW1lbnRcIlxyXG4gICAgICBdLFxyXG4gICAgICBcIm1ldGFcIjoge1xyXG4gICAgICAgIFwiYWxsb3dlZEluXCI6IFsgXCIqXCIgXVxyXG4gICAgICB9LFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlc1wiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiUHJvcGVydHlcIixcclxuICAgICAgICAgIFwiaXNNYW55XCI6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIlByb3BlcnR5XCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbXHJcbiAgICAgICAgXCJFbGVtZW50XCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJpZFwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJuYW1lXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkNvbm5lY3RvclwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogW1xyXG4gICAgICAgIFwiRWxlbWVudFwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwibWV0YVwiOiB7XHJcbiAgICAgICAgXCJhbGxvd2VkSW5cIjogW1xyXG4gICAgICAgICAgXCJhY3Rpdml0aTpTZXJ2aWNlVGFza0xpa2VcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJpbnB1dE91dHB1dFwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiSW5wdXRPdXRwdXRcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY29ubmVjdG9ySWRcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJJbnB1dE91dHB1dFwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogW1xyXG4gICAgICAgIFwiRWxlbWVudFwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwibWV0YVwiOiB7XHJcbiAgICAgICAgXCJhbGxvd2VkSW5cIjogW1xyXG4gICAgICAgICAgXCJicG1uOkZsb3dOb2RlXCIsXHJcbiAgICAgICAgICBcImFjdGl2aXRpOkNvbm5lY3RvclwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImlucHV0T3V0cHV0XCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJJbnB1dE91dHB1dFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjb25uZWN0b3JJZFwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImlucHV0UGFyYW1ldGVyc1wiLFxyXG4gICAgICAgICAgXCJpc01hbnlcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIklucHV0UGFyYW1ldGVyXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcIm91dHB1dFBhcmFtZXRlcnNcIixcclxuICAgICAgICAgIFwiaXNNYW55XCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJPdXRwdXRQYXJhbWV0ZXJcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiSW5wdXRPdXRwdXRQYXJhbWV0ZXJcIixcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJuYW1lXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlXCIsXHJcbiAgICAgICAgICBcImlzQm9keVwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImRlZmluaXRpb25cIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIklucHV0T3V0cHV0UGFyYW1ldGVyRGVmaW5pdGlvblwiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJJbnB1dE91dHB1dFBhcmFtZXRlckRlZmluaXRpb25cIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkxpc3RcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJJbnB1dE91dHB1dFBhcmFtZXRlckRlZmluaXRpb25cIiBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcIml0ZW1zXCIsXHJcbiAgICAgICAgICBcImlzTWFueVwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiSW5wdXRPdXRwdXRQYXJhbWV0ZXJEZWZpbml0aW9uXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIk1hcFwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIklucHV0T3V0cHV0UGFyYW1ldGVyRGVmaW5pdGlvblwiIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZW50cmllc1wiLFxyXG4gICAgICAgICAgXCJpc01hbnlcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkVudHJ5XCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkVudHJ5XCIsXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwia2V5XCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlXCIsXHJcbiAgICAgICAgICBcImlzQm9keVwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImRlZmluaXRpb25cIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIklucHV0T3V0cHV0UGFyYW1ldGVyRGVmaW5pdGlvblwiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJWYWx1ZVwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogW1xyXG4gICAgICAgIFwiSW5wdXRPdXRwdXRQYXJhbWV0ZXJEZWZpbml0aW9uXCJcclxuICAgICAgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJpZFwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJuYW1lXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlXCIsXHJcbiAgICAgICAgICBcImlzQm9keVwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIlNjcmlwdFwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIklucHV0T3V0cHV0UGFyYW1ldGVyRGVmaW5pdGlvblwiIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwic2NyaXB0Rm9ybWF0XCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInJlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlXCIsXHJcbiAgICAgICAgICBcImlzQm9keVwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkZpZWxkXCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbIFwiRWxlbWVudFwiIF0sXHJcbiAgICAgIFwibWV0YVwiOiB7XHJcbiAgICAgICAgXCJhbGxvd2VkSW5cIjogW1xyXG4gICAgICAgICAgXCJhY3Rpdml0aTpTZXJ2aWNlVGFza0xpa2VcIixcclxuICAgICAgICAgIFwiYWN0aXZpdGk6RXhlY3V0aW9uTGlzdGVuZXJcIixcclxuICAgICAgICAgIFwiYWN0aXZpdGk6VGFza0xpc3RlbmVyXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwibmFtZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJleHByZXNzaW9uXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwic3RyaW5nVmFsdWVcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiSW5wdXRQYXJhbWV0ZXJcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJJbnB1dE91dHB1dFBhcmFtZXRlclwiIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIk91dHB1dFBhcmFtZXRlclwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIklucHV0T3V0cHV0UGFyYW1ldGVyXCIgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiQ29sbGVjdGFibGVcIixcclxuICAgICAgXCJpc0Fic3RyYWN0XCI6IHRydWUsXHJcbiAgICAgIFwiZXh0ZW5kc1wiOiBbIFwiYnBtbjpNdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljc1wiIF0sXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbIFwiYWN0aXZpdGk6QXN5bmNDYXBhYmxlXCIgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjb2xsZWN0aW9uXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImVsZW1lbnRWYXJpYWJsZVwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZVwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIkVsZW1lbnRcIiBdLFxyXG4gICAgICBcIm1ldGFcIjoge1xyXG4gICAgICAgIFwiYWxsb3dlZEluXCI6IFtcclxuICAgICAgICAgIFwiYWN0aXZpdGk6QXN5bmNDYXBhYmxlXCIsXHJcbiAgICAgICAgICBcImJwbW46TXVsdGlJbnN0YW5jZUxvb3BDaGFyYWN0ZXJpc3RpY3NcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJib2R5XCIsXHJcbiAgICAgICAgICBcImlzQm9keVwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkV4ZWN1dGlvbkxpc3RlbmVyXCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbIFwiRWxlbWVudFwiIF0sXHJcbiAgICAgIFwibWV0YVwiOiB7XHJcbiAgICAgICAgXCJhbGxvd2VkSW5cIjogW1xyXG4gICAgICAgICAgXCJicG1uOlRhc2tcIixcclxuICAgICAgICAgIFwiYnBtbjpTZXJ2aWNlVGFza1wiLFxyXG4gICAgICAgICAgXCJicG1uOlVzZXJUYXNrXCIsXHJcbiAgICAgICAgICBcImJwbW46QnVzaW5lc3NSdWxlVGFza1wiLFxyXG4gICAgICAgICAgXCJicG1uOlNjcmlwdFRhc2tcIixcclxuICAgICAgICAgIFwiYnBtbjpSZWNlaXZlVGFza1wiLFxyXG4gICAgICAgICAgXCJicG1uOk1hbnVhbFRhc2tcIixcclxuICAgICAgICAgIFwiYnBtbjpFeGNsdXNpdmVHYXRld2F5XCIsXHJcbiAgICAgICAgICBcImJwbW46U2VxdWVuY2VGbG93XCIsXHJcbiAgICAgICAgICBcImJwbW46UGFyYWxsZWxHYXRld2F5XCIsXHJcbiAgICAgICAgICBcImJwbW46SW5jbHVzaXZlR2F0ZXdheVwiLFxyXG4gICAgICAgICAgXCJicG1uOkV2ZW50QmFzZWRHYXRld2F5XCIsXHJcbiAgICAgICAgICBcImJwbW46U3RhcnRFdmVudFwiLFxyXG4gICAgICAgICAgXCJicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnRcIixcclxuICAgICAgICAgIFwiYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50XCIsXHJcbiAgICAgICAgICBcImJwbW46RW5kRXZlbnRcIixcclxuICAgICAgICAgIFwiYnBtbjpCb3VuZGFyeUV2ZW50XCIsXHJcbiAgICAgICAgICBcImJwbW46Q2FsbEFjdGl2aXR5XCIsXHJcbiAgICAgICAgICBcImJwbW46U3ViUHJvY2Vzc1wiLFxyXG4gICAgICAgICAgXCJicG1uOlByb2Nlc3NcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJleHByZXNzaW9uXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNsYXNzXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImRlbGVnYXRlRXhwcmVzc2lvblwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJldmVudFwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJzY3JpcHRcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlNjcmlwdFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJmaWVsZHNcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkZpZWxkXCIsXHJcbiAgICAgICAgICBcImlzTWFueVwiOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJUYXNrTGlzdGVuZXJcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJFbGVtZW50XCIgXSxcclxuICAgICAgXCJtZXRhXCI6IHtcclxuICAgICAgICBcImFsbG93ZWRJblwiOiBbXHJcbiAgICAgICAgICBcImJwbW46VXNlclRhc2tcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJleHByZXNzaW9uXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImNsYXNzXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImRlbGVnYXRlRXhwcmVzc2lvblwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJldmVudFwiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJzY3JpcHRcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlNjcmlwdFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJmaWVsZHNcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkZpZWxkXCIsXHJcbiAgICAgICAgICBcImlzTWFueVwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJpZFwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJldmVudERlZmluaXRpb25zXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uXCIsXHJcbiAgICAgICAgICBcImlzTWFueVwiOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJGb3JtUHJvcGVydHlcIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJFbGVtZW50XCIgXSxcclxuICAgICAgXCJtZXRhXCI6IHtcclxuICAgICAgICBcImFsbG93ZWRJblwiOiBbXHJcbiAgICAgICAgICBcImJwbW46U3RhcnRFdmVudFwiLFxyXG4gICAgICAgICAgXCJicG1uOlVzZXJUYXNrXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiaWRcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwibmFtZVwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ0eXBlXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInJlcXVpcmVkXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInJlYWRhYmxlXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcIndyaXRhYmxlXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhcmlhYmxlXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcImV4cHJlc3Npb25cIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZGF0ZVBhdHRlcm5cIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiZGVmYXVsdFwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YWx1ZXNcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlZhbHVlXCIsXHJcbiAgICAgICAgICBcImlzTWFueVwiOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBcIm5hbWVcIjogXCJGb3JtRGF0YVwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIkVsZW1lbnRcIiBdLFxyXG4gICAgICBcIm1ldGFcIjoge1xyXG4gICAgICAgIFwiYWxsb3dlZEluXCI6IFtcclxuICAgICAgICAgIFwiYnBtbjpTdGFydEV2ZW50XCIsXHJcbiAgICAgICAgICBcImJwbW46VXNlclRhc2tcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJmaWVsZHNcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIkZvcm1GaWVsZFwiLFxyXG4gICAgICAgICAgXCJpc01hbnlcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiYnVzaW5lc3NLZXlcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiRm9ybUZpZWxkXCIsXHJcbiAgICAgIFwic3VwZXJDbGFzc1wiOiBbIFwiRWxlbWVudFwiIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiaWRcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwibGFiZWxcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidHlwZVwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkYXRlUGF0dGVyblwiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJkZWZhdWx0VmFsdWVcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwicHJvcGVydGllc1wiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiUHJvcGVydGllc1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJ2YWxpZGF0aW9uXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJWYWxpZGF0aW9uXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhbHVlc1wiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiVmFsdWVcIixcclxuICAgICAgICAgIFwiaXNNYW55XCI6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIlZhbGlkYXRpb25cIixcclxuICAgICAgXCJzdXBlckNsYXNzXCI6IFsgXCJFbGVtZW50XCIgXSxcclxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJjb25zdHJhaW50c1wiLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiQ29uc3RyYWludFwiLFxyXG4gICAgICAgICAgXCJpc01hbnlcIjogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgXCJuYW1lXCI6IFwiQ29uc3RyYWludFwiLFxyXG4gICAgICBcInN1cGVyQ2xhc3NcIjogWyBcIkVsZW1lbnRcIiBdLFxyXG4gICAgICBcInByb3BlcnRpZXNcIjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcIm5hbWVcIixcclxuICAgICAgICAgIFwidHlwZVwiOiBcIlN0cmluZ1wiLFxyXG4gICAgICAgICAgXCJpc0F0dHJcIjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiY29uZmlnXCIsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIFwibmFtZVwiOiBcIkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uXCIsXHJcbiAgICAgIFwiaXNBYnN0cmFjdFwiOiB0cnVlLFxyXG4gICAgICBcImV4dGVuZHNcIjogW1xyXG4gICAgICAgIFwiYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvblwiXHJcbiAgICAgIF0sXHJcbiAgICAgIFwicHJvcGVydGllc1wiOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IFwidmFyaWFibGVOYW1lXCIsXHJcbiAgICAgICAgICBcImlzQXR0clwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiU3RyaW5nXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBcInZhcmlhYmxlRXZlbnRcIixcclxuICAgICAgICAgIFwiaXNBdHRyXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJTdHJpbmdcIlxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfVxyXG4gIF0sXHJcbiAgXCJlbXVtZXJhdGlvbnNcIjogWyBdXHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tQ29udGV4dFBhZCB7XHJcbiAgY29uc3RydWN0b3IoY29uZmlnLCBjb250ZXh0UGFkLCBjcmVhdGUsIGVsZW1lbnRGYWN0b3J5LCBpbmplY3RvciwgdHJhbnNsYXRlKSB7XHJcbiAgICB0aGlzLmNyZWF0ZSA9IGNyZWF0ZTtcclxuICAgIHRoaXMuZWxlbWVudEZhY3RvcnkgPSBlbGVtZW50RmFjdG9yeTtcclxuICAgIHRoaXMudHJhbnNsYXRlID0gdHJhbnNsYXRlO1xyXG4gICAgLy/oh6rliqjmkYbmlL7kvY3nva5cclxuICAgIGlmIChjb25maWcuYXV0b1BsYWNlICE9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLmF1dG9QbGFjZSA9IGluamVjdG9yLmdldCgnYXV0b1BsYWNlJywgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgLy/ms6jlhozlt6XlhbdcclxuICAgIGNvbnRleHRQYWQucmVnaXN0ZXJQcm92aWRlcih0aGlzKTtcclxuICB9XHJcbiAgZ2V0Q29udGV4dFBhZEVudHJpZXMoZWxlbWVudCkge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBhdXRvUGxhY2UsXHJcbiAgICAgIGNyZWF0ZSxcclxuICAgICAgZWxlbWVudEZhY3RvcnksXHJcbiAgICAgIHRyYW5zbGF0ZVxyXG4gICAgfSA9IHRoaXM7XHJcblxyXG4gICAgZnVuY3Rpb24gYXBwZW5kVXNlclRhc2soZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgICAgaWYgKGF1dG9QbGFjZSkge1xyXG4gICAgICAgIGNvbnN0IHNoYXBlID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoeyB0eXBlOiAnYnBtbjpVc2VyVGFzaycgfSk7XHJcbiAgICAgICAgYXV0b1BsYWNlLmFwcGVuZChlbGVtZW50LCBzaGFwZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYXBwZW5kVXNlclRhc2tTdGFydChldmVudCwgZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBhcHBlbmRVc2VyVGFza1N0YXJ0KGV2ZW50KSB7XHJcbiAgICAgICAgICBjb25zdCBzaGFwZSA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKHsgdHlwZTogJ2JwbW46VXNlclRhc2snIH0pO1xyXG4gICAgICAgICAgY3JlYXRlLnN0YXJ0KGV2ZW50LCBzaGFwZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhcHBlbmRDYWxsQWN0aXZpdHlTdGFydChldmVudCkge1xyXG4gICAgICBjb25zdCBzaGFwZSA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKHsgdHlwZTogJ2JwbW46Q2FsbEFjdGl2aXR5JyB9KTtcclxuICAgICAgY3JlYXRlLnN0YXJ0KGV2ZW50LCBzaGFwZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYXBwZW5kQ2FsbEFjdGl2aXR5KGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKGF1dG9QbGFjZSkge1xyXG4gICAgICAgICAgICBjb25zdCBzaGFwZSA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKHsgdHlwZTogJ2JwbW46Q2FsbEFjdGl2aXR5JyB9KTtcclxuICAgICAgICAgICAgYXV0b1BsYWNlLmFwcGVuZChlbGVtZW50LCBzaGFwZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXBwZW5kQ2FsbEFjdGl2aXR5U3RhcnQoZXZlbnQsIGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICdhcHBlbmQudXNlci10YXNrJzoge1xyXG4gICAgICAgIGdyb3VwOiAnbW9kZWwnLFxyXG4gICAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi11c2VyLXRhc2snLFxyXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0FwcGVuZCBTZXJ2aWNlVGFzaycpLFxyXG4gICAgICAgIGFjdGlvbjoge1xyXG4gICAgICAgICAgY2xpY2s6IGFwcGVuZFVzZXJUYXNrLFxyXG4gICAgICAgICAgZHJhZ3N0YXJ0OiBhcHBlbmRVc2VyVGFza1N0YXJ0XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAnYXBwZW5kLmNhbGwtYWN0aXZpdHknOntcclxuICAgICAgICAgIGdyb3VwOiAnbW9kZWwnLFxyXG4gICAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWNhbGwtYWN0aXZpdHknLFxyXG4gICAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQXBwZW5kIENhbGxBY3Rpdml0eScpLFxyXG4gICAgICAgICAgYWN0aW9uOiB7XHJcbiAgICAgICAgICAgICAgY2xpY2s6IGFwcGVuZENhbGxBY3Rpdml0eSxcclxuICAgICAgICAgICAgICBkcmFnc3RhcnQ6IGFwcGVuZENhbGxBY3Rpdml0eVN0YXJ0XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG59XHJcbkN1c3RvbUNvbnRleHRQYWQuJGluamVjdCA9IFtcclxuICAnY29uZmlnJyxcclxuICAnY29udGV4dFBhZCcsXHJcbiAgJ2NyZWF0ZScsXHJcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcclxuICAnaW5qZWN0b3InLFxyXG4gICd0cmFuc2xhdGUnXHJcbl07IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tUGFsZXR0ZSB7XHJcbiAgY29uc3RydWN0b3IoY3JlYXRlLCBlbGVtZW50RmFjdG9yeSwgcGFsZXR0ZSwgdHJhbnNsYXRlKSB7XHJcbiAgICB0aGlzLmNyZWF0ZSA9IGNyZWF0ZTtcclxuICAgIHRoaXMuZWxlbWVudEZhY3RvcnkgPSBlbGVtZW50RmFjdG9yeTtcclxuICAgIHRoaXMudHJhbnNsYXRlID0gdHJhbnNsYXRlO1xyXG4gICAgcGFsZXR0ZS5yZWdpc3RlclByb3ZpZGVyKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFsZXR0ZUVudHJpZXMoZWxlbWVudCkge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBjcmVhdGUsXHJcbiAgICAgIGVsZW1lbnRGYWN0b3J5LFxyXG4gICAgICB0cmFuc2xhdGVcclxuICAgIH0gPSB0aGlzO1xyXG5cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZVNlcnZpY2VUYXNrKGV2ZW50KSB7XHJcbiAgICAgIGNvbnN0IHNoYXBlID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoeyB0eXBlOiAnYnBtbjpVc2VyVGFzaycgfSk7XHJcbiAgICAgIGNyZWF0ZS5zdGFydChldmVudCwgc2hhcGUpO1xyXG4gICAgfVxyXG4gICAgICBmdW5jdGlvbiBjcmVhdGVDYWxsQWN0aXZpdHkoZXZlbnQpIHtcclxuICAgICAgICAgIGNvbnN0IHNoYXBlID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoeyB0eXBlOiAnYnBtbjpDYWxsQWN0aXZpdHknIH0pO1xyXG4gICAgICAgICAgY3JlYXRlLnN0YXJ0KGV2ZW50LCBzaGFwZSk7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJ2NyZWF0ZS51c2VyLXRhc2snOiB7XHJcbiAgICAgICAgZ3JvdXA6ICdhY3Rpdml0eScsXHJcbiAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXVzZXItdGFzaycsXHJcbiAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQ3JlYXRlIFVzZXJUYXNrJyksXHJcbiAgICAgICAgYWN0aW9uOiB7XHJcbiAgICAgICAgICBkcmFnc3RhcnQ6IGNyZWF0ZVNlcnZpY2VUYXNrLFxyXG4gICAgICAgICAgY2xpY2s6IGNyZWF0ZVNlcnZpY2VUYXNrXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAgICdjcmVhdGUuY2FsbC1hY3Rpdml0eSc6IHtcclxuICAgICAgICAgICAgZ3JvdXA6ICdhY3Rpdml0eScsXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1jYWxsLWFjdGl2aXR5JyxcclxuICAgICAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQ3JlYXRlIENhbGxBY3Rpdml0eScpLFxyXG4gICAgICAgICAgICBhY3Rpb246IHtcclxuICAgICAgICAgICAgICAgIGRyYWdzdGFydDogY3JlYXRlQ2FsbEFjdGl2aXR5LFxyXG4gICAgICAgICAgICAgICAgY2xpY2s6IGNyZWF0ZUNhbGxBY3Rpdml0eVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuQ3VzdG9tUGFsZXR0ZS4kaW5qZWN0ID0gW1xyXG4gICdjcmVhdGUnLFxyXG4gICdlbGVtZW50RmFjdG9yeScsXHJcbiAgJ3BhbGV0dGUnLFxyXG4gICd0cmFuc2xhdGUnXHJcbl07IiwiaW1wb3J0IEN1c3RvbUNvbnRleHRQYWQgZnJvbSAnLi9DdXN0b21Db250ZXh0UGFkJztcclxuaW1wb3J0IEN1c3RvbVBhbGV0dGUgZnJvbSAnLi9DdXN0b21QYWxldHRlJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBfX2luaXRfXzogWyAnY3VzdG9tQ29udGV4dFBhZCcsICdjdXN0b21QYWxldHRlJyBdLFxyXG4gIGN1c3RvbUNvbnRleHRQYWQ6IFsgJ3R5cGUnLCBDdXN0b21Db250ZXh0UGFkIF0sXHJcbiAgY3VzdG9tUGFsZXR0ZTogWyAndHlwZScsIEN1c3RvbVBhbGV0dGUgXVxyXG59OyIsImltcG9ydCB0cmFuc2xhdGlvbnMgZnJvbSAnLi90cmFuc2xhdGlvbnNHZXJtYW4nO1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjdXN0b21UcmFuc2xhdGUodGVtcGxhdGUsIHJlcGxhY2VtZW50cykge1xyXG4gIHJlcGxhY2VtZW50cyA9IHJlcGxhY2VtZW50cyB8fCB7fTtcclxuICB0ZW1wbGF0ZSA9IHRyYW5zbGF0aW9uc1t0ZW1wbGF0ZV0gfHwgdGVtcGxhdGU7XHJcbiAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL3soW159XSspfS9nLCBmdW5jdGlvbihfLCBrZXkpIHtcclxuXHQgdmFyIHN0ciA9IHJlcGxhY2VtZW50c1trZXldO1xyXG5cdCAgaWYodHJhbnNsYXRpb25zW3JlcGxhY2VtZW50c1trZXldXSAhPSBudWxsICYmIHRyYW5zbGF0aW9ucyBbcmVwbGFjZW1lbnRzW2tleV1dICE9ICd1bmRlZmluZWQnKXtcclxuXHRcdCAgc3RyID0gdHJhbnNsYXRpb25zW3JlcGxhY2VtZW50c1trZXldXTtcclxuXHQgIH1cclxuICAgIHJldHVybiAgc3RyIHx8ICd7JyArIGtleSArICd9JztcclxuICB9KTtcclxufSIsImV4cG9ydCBkZWZhdWx0IHtcclxuICAgIC8vIExhYmVsc1xyXG4gICAgJ0FjdGl2YXRlIHRoZSBnbG9iYWwgY29ubmVjdCB0b29sJyA6ICfmv4DmtLvlhajlsYDov57mjqXlt6XlhbcnLFxyXG4gICAgJ0FwcGVuZCB7dHlwZX0nOiAn6L+95YqgIHt0eXBlfScsXHJcbiAgICAnQXBwZW5kIEVuZEV2ZW50JzogJ+i/veWKoCDnu5PmnZ/kuovku7YgJyxcclxuICAgICdBcHBlbmQgVGFzayc6J+i/veWKoCDku7vliqEnLFxyXG4gICAgJ0FwcGVuZCBHYXRld2F5Jzon6L+95YqgIOe9keWFsycsXHJcbiAgICAnQXBwZW5kIEludGVybWVkaWF0ZS9Cb3VuZGFyeSBFdmVudCc6J+i/veWKoCDkuK3pl7Qv6L6555WMIOS6i+S7ticsXHJcbiAgICAnQWRkIExhbmUgYWJvdmUnOiAn5Zyo5LiK6Z2i5re75Yqg6YGTJyxcclxuICAgICdEaXZpZGUgaW50byB0d28gTGFuZXMnOiAn5YiG5Ymy5oiQ5Lik5Liq6YGTJyxcclxuICAgICdEaXZpZGUgaW50byB0aHJlZSBMYW5lcyc6ICfliIblibLmiJDkuInkuKrpgZMnLFxyXG4gICAgJ0FkZCBMYW5lIGJlbG93JzogJ+WcqOS4i+mdoua3u+WKoOmBkycsXHJcbiAgICAnQXBwZW5kIGNvbXBlbnNhdGlvbiBhY3Rpdml0eSc6ICfov73liqDooaXlgb/mtLvliqgnLFxyXG4gICAgJ0NoYW5nZSB0eXBlJzogJ+S/ruaUueexu+WeiycsXHJcbiAgICAnQ29ubmVjdCB1c2luZyBBc3NvY2lhdGlvbic6ICfkvb/nlKjlhbPogZTov57mjqUnLFxyXG4gICAgJ0Nvbm5lY3QgdXNpbmcgU2VxdWVuY2UvTWVzc2FnZUZsb3cgb3IgQXNzb2NpYXRpb24nOiAn5L2/55So6aG65bqPL+a2iOaBr+a1geaIluiAheWFs+iBlOi/nuaOpScsXHJcbiAgICAnQ29ubmVjdCB1c2luZyBEYXRhSW5wdXRBc3NvY2lhdGlvbic6ICfkvb/nlKjmlbDmja7ovpPlhaXlhbPogZTov57mjqUnLFxyXG4gICAgJ1JlbW92ZSc6ICfnp7vpmaQnLFxyXG4gICAgJ0FjdGl2YXRlIHRoZSBoYW5kIHRvb2wnOiAn5r+A5rS75oqT5omL5bel5YW3JyxcclxuICAgICdBY3RpdmF0ZSB0aGUgbGFzc28gdG9vbCc6ICfmv4DmtLvlpZfntKLlt6XlhbcnLFxyXG4gICAgJ0FjdGl2YXRlIHRoZSBjcmVhdGUvcmVtb3ZlIHNwYWNlIHRvb2wnOiAn5r+A5rS75Yib5bu6L+WIoOmZpOepuumXtOW3peWFtycsXHJcbiAgICAnQ3JlYXRlIGV4cGFuZGVkIFN1YlByb2Nlc3MnOiAn5Yib5bu65omp5bGV5a2Q6L+H56iLJyxcclxuICAgICdDcmVhdGUgSW50ZXJtZWRpYXRlVGhyb3dFdmVudC9Cb3VuZGFyeUV2ZW50JyA6ICfliJvlu7rkuK3pl7Tmipvlh7rkuovku7Yv6L6555WM5LqL5Lu2JyxcclxuICAgICdDcmVhdGUgUG9vbC9QYXJ0aWNpcGFudCc6ICfliJvlu7rmsaAv5Y+C5LiO6ICFJyxcclxuICAgICdQYXJhbGxlbCBNdWx0aSBJbnN0YW5jZSc6ICflubbooYzlpJrph43kuovku7YnLFxyXG4gICAgJ1NlcXVlbnRpYWwgTXVsdGkgSW5zdGFuY2UnOiAn5pe25bqP5aSa6YeN5LqL5Lu2JyxcclxuICAgICdEYXRhT2JqZWN0UmVmZXJlbmNlJzon5pWw5o2u5a+56LGh5Y+C6ICDJyxcclxuICAgICdEYXRhU3RvcmVSZWZlcmVuY2UnOifmlbDmja7lrZjlgqjlj4LogIMnLFxyXG4gICAgJ0xvb3AnOiAn5b6q546vJyxcclxuICAgICdBZC1ob2MnOiAn5Y2z5bitJyxcclxuICAgICdDcmVhdGUge3R5cGV9JzogJ+WIm+W7uiB7dHlwZX0nLFxyXG4gICAgJ0NyZWF0ZSBUYXNrJzon5Yib5bu65Lu75YqhJyxcclxuICAgICdDcmVhdGUgU3RhcnRFdmVudCc6J+WIm+W7uuW8gOWni+S6i+S7ticsXHJcbiAgICAnQ3JlYXRlIEVuZEV2ZW50Jzon5Yib5bu657uT5p2f5LqL5Lu2JyxcclxuICAgICdDcmVhdGUgR3JvdXAnOifliJvlu7rnu4QnLFxyXG4gICAgJ1Rhc2snOiAn5Lu75YqhJyxcclxuICAgICdTZW5kIFRhc2snOiAn5Y+R6YCB5Lu75YqhJyxcclxuICAgICdSZWNlaXZlIFRhc2snOiAn5o6l5pS25Lu75YqhJyxcclxuICAgICdVc2VyIFRhc2snOiAn55So5oi35Lu75YqhJyxcclxuICAgICdNYW51YWwgVGFzayc6ICfmiYvlt6Xku7vliqEnLFxyXG4gICAgJ0J1c2luZXNzIFJ1bGUgVGFzayc6ICfkuJrliqHop4TliJnku7vliqEnLFxyXG4gICAgJ1NlcnZpY2UgVGFzayc6ICfmnI3liqHku7vliqEnLFxyXG4gICAgJ1NjcmlwdCBUYXNrJzogJ+iEmuacrOS7u+WKoScsXHJcbiAgICAnQ2FsbCBBY3Rpdml0eSc6ICfosIPnlKjmtLvliqgnLFxyXG4gICAgJ1N1YiBQcm9jZXNzIChjb2xsYXBzZWQpJzogJ+WtkOa1geeoi++8iOaKmOWPoOeahO+8iScsXHJcbiAgICAnU3ViIFByb2Nlc3MgKGV4cGFuZGVkKSc6ICflrZDmtYHnqIvvvIjlsZXlvIDnmoTvvIknLFxyXG4gICAgJ1N0YXJ0IEV2ZW50JzogJ+W8gOWni+S6i+S7ticsXHJcbiAgICAnU3RhcnRFdmVudCc6ICflvIDlp4vkuovku7YnLFxyXG4gICAgJ0ludGVybWVkaWF0ZSBUaHJvdyBFdmVudCc6ICfkuK3pl7Tkuovku7YnLFxyXG4gICAgJ0VuZCBFdmVudCc6ICfnu5PmnZ/kuovku7YnLFxyXG4gICAgJ0VuZEV2ZW50JzogJ+e7k+adn+S6i+S7ticsXHJcbiAgICAnQ3JlYXRlIEdhdGV3YXknOiAn5Yib5bu6572R5YWzJyxcclxuICAgICdHYXRlV2F5Jzon572R5YWzJyxcclxuICAgICdDcmVhdGUgSW50ZXJtZWRpYXRlL0JvdW5kYXJ5IEV2ZW50JzogJ+WIm+W7uuS4remXtC/ovrnnlYzkuovku7YnLFxyXG4gICAgJ01lc3NhZ2UgU3RhcnQgRXZlbnQnOiAn5raI5oGv5byA5aeL5LqL5Lu2JyxcclxuICAgICdUaW1lciBTdGFydCBFdmVudCc6ICflrprml7blvIDlp4vkuovku7YnLFxyXG4gICAgJ0NvbmRpdGlvbmFsIFN0YXJ0IEV2ZW50JzogJ+adoeS7tuW8gOWni+S6i+S7ticsXHJcbiAgICAnU2lnbmFsIFN0YXJ0IEV2ZW50JzogJ+S/oeWPt+W8gOWni+S6i+S7ticsXHJcbiAgICAnRXJyb3IgU3RhcnQgRXZlbnQnOiAn6ZSZ6K+v5byA5aeL5LqL5Lu2JyxcclxuICAgICdFc2NhbGF0aW9uIFN0YXJ0IEV2ZW50JzogJ+WNh+e6p+W8gOWni+S6i+S7ticsXHJcbiAgICAnQ29tcGVuc2F0aW9uIFN0YXJ0IEV2ZW50JzogJ+ihpeWBv+W8gOWni+S6i+S7ticsXHJcbiAgICAnTWVzc2FnZSBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknOiAn5raI5oGv5byA5aeL5LqL5Lu277yI6Z2e5Lit5pat77yJJyxcclxuICAgICdUaW1lciBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknOiAn5a6a5pe25byA5aeL5LqL5Lu277yI6Z2e5Lit5pat77yJJyxcclxuICAgICdDb25kaXRpb25hbCBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknOiAn5p2h5Lu25byA5aeL5LqL5Lu277yI6Z2e5Lit5pat77yJJyxcclxuICAgICdTaWduYWwgU3RhcnQgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJzogJ+S/oeWPt+W8gOWni+S6i+S7tu+8iOmdnuS4reaWre+8iScsXHJcbiAgICAnRXNjYWxhdGlvbiBTdGFydCBFdmVudCAobm9uLWludGVycnVwdGluZyknOiAn5Y2H57qn5byA5aeL5LqL5Lu277yI6Z2e5Lit5pat77yJJyxcclxuICAgICdNZXNzYWdlIEludGVybWVkaWF0ZSBDYXRjaCBFdmVudCc6ICfmtojmga/kuK3pl7TmjZXojrfkuovku7YnLFxyXG4gICAgJ01lc3NhZ2UgSW50ZXJtZWRpYXRlIFRocm93IEV2ZW50JzogJ+a2iOaBr+S4remXtOaKm+WHuuS6i+S7ticsXHJcbiAgICAnVGltZXIgSW50ZXJtZWRpYXRlIENhdGNoIEV2ZW50JzogJ+WumuaXtuS4remXtOaNleiOt+S6i+S7ticsXHJcbiAgICAnRXNjYWxhdGlvbiBJbnRlcm1lZGlhdGUgVGhyb3cgRXZlbnQnOiAn5Y2H57qn5Lit6Ze05oqb5Ye65LqL5Lu2JyxcclxuICAgICdDb25kaXRpb25hbCBJbnRlcm1lZGlhdGUgQ2F0Y2ggRXZlbnQnOiAn5p2h5Lu25Lit6Ze05o2V6I635LqL5Lu2JyxcclxuICAgICdMaW5rIEludGVybWVkaWF0ZSBDYXRjaCBFdmVudCc6ICfpk77mjqXkuK3pl7TmjZXojrfkuovku7YnLFxyXG4gICAgJ0xpbmsgSW50ZXJtZWRpYXRlIFRocm93IEV2ZW50JzogJ+mTvuaOpeS4remXtOaKm+WHuuS6i+S7ticsXHJcbiAgICAnQ29tcGVuc2F0aW9uIEludGVybWVkaWF0ZSBUaHJvdyBFdmVudCc6ICfooaXlgb/kuK3pl7Tmipvlh7rkuovku7YnLFxyXG4gICAgJ1NpZ25hbCBJbnRlcm1lZGlhdGUgQ2F0Y2ggRXZlbnQnOiAn5L+h5Y+35Lit6Ze05o2V6I635LqL5Lu2JyxcclxuICAgICdTaWduYWwgSW50ZXJtZWRpYXRlIFRocm93IEV2ZW50JzogJ+S/oeWPt+S4remXtOaKm+WHuuS6i+S7ticsXHJcbiAgICAnTWVzc2FnZSBFbmQgRXZlbnQnOiAn5raI5oGv57uT5p2f5LqL5Lu2JyxcclxuICAgICdFc2NhbGF0aW9uIEVuZCBFdmVudCc6ICflrprml7bnu5PmnZ/kuovku7YnLFxyXG4gICAgJ0Vycm9yIEVuZCBFdmVudCc6ICfplJnor6/nu5PmnZ/kuovku7YnLFxyXG4gICAgJ0NhbmNlbCBFbmQgRXZlbnQnOiAn5Y+W5raI57uT5p2f5LqL5Lu2JyxcclxuICAgICdDb21wZW5zYXRpb24gRW5kIEV2ZW50JzogJ+ihpeWBv+e7k+adn+S6i+S7ticsXHJcbiAgICAnU2lnbmFsIEVuZCBFdmVudCc6ICfkv6Hlj7fnu5PmnZ/kuovku7YnLFxyXG4gICAgJ1Rlcm1pbmF0ZSBFbmQgRXZlbnQnOiAn57uI5q2i57uT5p2f5LqL5Lu2JyxcclxuICAgICdNZXNzYWdlIEJvdW5kYXJ5IEV2ZW50JzogJ+a2iOaBr+i+ueeVjOS6i+S7ticsXHJcbiAgICAnTWVzc2FnZSBCb3VuZGFyeSBFdmVudCAobm9uLWludGVycnVwdGluZyknOiAn5raI5oGv6L6555WM5LqL5Lu277yI6Z2e5Lit5pat77yJJyxcclxuICAgICdUaW1lciBCb3VuZGFyeSBFdmVudCc6ICflrprml7bovrnnlYzkuovku7YnLFxyXG4gICAgJ1RpbWVyIEJvdW5kYXJ5IEV2ZW50IChub24taW50ZXJydXB0aW5nKSc6ICflrprml7bovrnnlYzkuovku7bvvIjpnZ7kuK3mlq3vvIknLFxyXG4gICAgJ0VzY2FsYXRpb24gQm91bmRhcnkgRXZlbnQnOiAn5Y2H57qn6L6555WM5LqL5Lu2JyxcclxuICAgICdFc2NhbGF0aW9uIEJvdW5kYXJ5IEV2ZW50IChub24taW50ZXJydXB0aW5nKSc6ICfljYfnuqfovrnnlYzkuovku7bvvIjpnZ7kuK3mlq3vvIknLFxyXG4gICAgJ0NvbmRpdGlvbmFsIEJvdW5kYXJ5IEV2ZW50JzogJ+adoeS7tui+ueeVjOS6i+S7ticsXHJcbiAgICAnQ29uZGl0aW9uYWwgQm91bmRhcnkgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJzogJ+adoeS7tui+ueeVjOS6i+S7tu+8iOmdnuS4reaWre+8iScsXHJcbiAgICAnRXJyb3IgQm91bmRhcnkgRXZlbnQnOiAn6ZSZ6K+v6L6555WM5LqL5Lu2JyxcclxuICAgICdDYW5jZWwgQm91bmRhcnkgRXZlbnQnOiAn5Y+W5raI6L6555WM5LqL5Lu2JyxcclxuICAgICdTaWduYWwgQm91bmRhcnkgRXZlbnQnOiAn5L+h5Y+36L6555WM5LqL5Lu2JyxcclxuICAgICdTaWduYWwgQm91bmRhcnkgRXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJzogJ+S/oeWPt+i+ueeVjOS6i+S7tu+8iOmdnuS4reaWre+8iScsXHJcbiAgICAnQ29tcGVuc2F0aW9uIEJvdW5kYXJ5IEV2ZW50JzogJ+ihpeWBv+i+ueeVjOS6i+S7ticsXHJcbiAgICAnRXhjbHVzaXZlIEdhdGV3YXknOiAn5LqS5pal572R5YWzJyxcclxuICAgICdQYXJhbGxlbCBHYXRld2F5JzogJ+W5tuihjOe9keWFsycsXHJcbiAgICAnSW5jbHVzaXZlIEdhdGV3YXknOiAn55u45a65572R5YWzJyxcclxuICAgICdDb21wbGV4IEdhdGV3YXknOiAn5aSN5p2C572R5YWzJyxcclxuICAgICdFdmVudCBiYXNlZCBHYXRld2F5JzogJ+S6i+S7tue9keWFsycsXHJcbiAgICAnVHJhbnNhY3Rpb24nOiAn6L2s6L+QJyxcclxuICAgICdTdWIgUHJvY2Vzcyc6ICflrZDmtYHnqIsnLFxyXG4gICAgJ0V2ZW50IFN1YiBQcm9jZXNzJzogJ+S6i+S7tuWtkOa1geeoiycsXHJcbiAgICAnQ29sbGFwc2VkIFBvb2wnOiAn5oqY5Y+g5rGgJyxcclxuICAgICdFeHBhbmRlZCBQb29sJzogJ+WxleW8gOaxoCcsXHJcbiAgICAvLyBFcnJvcnNcclxuICAgICdubyBwYXJlbnQgZm9yIHtlbGVtZW50fSBpbiB7cGFyZW50fSc6ICflnKh7cGFyZW50femHjO+8jHtlbGVtZW50feayoeacieeItuexuycsXHJcbiAgICAnbm8gc2hhcGUgdHlwZSBzcGVjaWZpZWQnOiAn5rKh5pyJ5oyH5a6a55qE5b2i54q257G75Z6LJyxcclxuICAgICdmbG93IGVsZW1lbnRzIG11c3QgYmUgY2hpbGRyZW4gb2YgcG9vbHMvcGFydGljaXBhbnRzJzogJ+a1geWFg+e0oOW/hemhu+aYr+axoC/lj4LkuI7ogIXnmoTlrZDnsbsnLFxyXG4gICAgJ291dCBvZiBib3VuZHMgcmVsZWFzZSc6ICdvdXQgb2YgYm91bmRzIHJlbGVhc2UnLFxyXG4gICAgJ21vcmUgdGhhbiB7Y291bnR9IGNoaWxkIGxhbmVzJzogJ+WtkOmBk+Wkp+S6jntjb3VudH0gJyxcclxuICAgICdlbGVtZW50IHJlcXVpcmVkJzogJ+WFg+e0oOS4jeiDveS4uuepuicsXHJcbiAgICAnZGlhZ3JhbSBub3QgcGFydCBvZiBicG1uOkRlZmluaXRpb25zJzogJ+a1geeoi+WbvuS4jeespuWQiGJwbW7op4TojIMnLFxyXG4gICAgJ25vIGRpYWdyYW0gdG8gZGlzcGxheSc6ICfmsqHmnInlj6/lsZXnpLrnmoTmtYHnqIvlm74nLFxyXG4gICAgJ25vIHByb2Nlc3Mgb3IgY29sbGFib3JhdGlvbiB0byBkaXNwbGF5JzogJ+ayoeacieWPr+WxleekuueahOa1geeoiy/ljY/kvZwnLFxyXG4gICAgJ2VsZW1lbnQge2VsZW1lbnR9IHJlZmVyZW5jZWQgYnkge3JlZmVyZW5jZWR9I3twcm9wZXJ0eX0gbm90IHlldCBkcmF3bic6ICfnlLF7cmVmZXJlbmNlZH0je3Byb3BlcnR5feW8leeUqOeahHtlbGVtZW50feWFg+e0oOS7jeacque7mOWIticsXHJcbiAgICAnYWxyZWFkeSByZW5kZXJlZCB7ZWxlbWVudH0nOiAne2VsZW1lbnR9IOW3suiiq+a4suafkycsXHJcbiAgICAnZmFpbGVkIHRvIGltcG9ydCB7ZWxlbWVudH0nOiAn5a+85YWle2VsZW1lbnR95aSx6LSlJyxcclxuICAgIC8v5bGe5oCn6Z2i5p2/55qE5Y+C5pWwXHJcbiAgICAnSWQnOifnvJblj7cnLFxyXG4gICAgJ05hbWUnOiflkI3np7AnLFxyXG4gICAgJ0dlbmVyYWwnOifluLjop4QnLFxyXG4gICAgJ0RldGFpbHMnOifor6bmg4UnLFxyXG4gICAgJ01lc3NhZ2UgTmFtZSc6J+a2iOaBr+WQjeensCcsXHJcbiAgICAnTWVzc2FnZSc6J+a2iOaBrycsXHJcbiAgICAnSW5pdGlhdG9yJzon5Yib5bu66ICFJyxcclxuICAgICdBc3luY2hyb25vdXMgQ29udGludWF0aW9ucyc6J+aMgee7reW8guatpScsXHJcbiAgICAnQXN5bmNocm9ub3VzIEJlZm9yZSc6J+W8guatpeWJjScsXHJcbiAgICAnQXN5bmNocm9ub3VzIEFmdGVyJzon5byC5q2l5ZCOJyxcclxuICAgICdKb2IgQ29uZmlndXJhdGlvbic6J+W3peS9nOmFjee9ricsXHJcbiAgICAnRXhjbHVzaXZlJzon5o6S6ZmkJyxcclxuICAgICdKb2IgUHJpb3JpdHknOiflt6XkvZzkvJjlhYjnuqcnLFxyXG4gICAgJ1JldHJ5IFRpbWUgQ3ljbGUnOifph43or5Xml7bpl7TlkajmnJ8nLFxyXG4gICAgJ0RvY3VtZW50YXRpb24nOifmlofmoaMnLFxyXG4gICAgJ0VsZW1lbnQgRG9jdW1lbnRhdGlvbic6J+WFg+e0oOaWh+ahoycsXHJcbiAgICAnSGlzdG9yeSBDb25maWd1cmF0aW9uJzon5Y6G5Y+y6YWN572uJyxcclxuICAgICdIaXN0b3J5IFRpbWUgVG8gTGl2ZSc6J+WOhuWPsueahOeUn+WtmOaXtumXtCcsXHJcbiAgICAnRm9ybXMnOifooajljZUnLFxyXG4gICAgJ0Zvcm0gS2V5Jzon6KGo5Y2Va2V5JyxcclxuICAgICdGb3JtIEZpZWxkcyc6J+ihqOWNleWtl+autScsXHJcbiAgICAnQnVzaW5lc3MgS2V5Jzon5Lia5Yqha2V5JyxcclxuICAgICdGb3JtIEZpZWxkJzon6KGo5Y2V5a2X5q61JyxcclxuICAgICdJRCc6J+e8luWPtycsXHJcbiAgICAnVHlwZSc6J+exu+WeiycsXHJcbiAgICAnTGFiZWwnOiflkI3np7AnLFxyXG4gICAgJ0RlZmF1bHQgVmFsdWUnOifpu5jorqTlgLwnLFxyXG4gICAgJ1ZhbGlkYXRpb24nOifmoKHpqownLFxyXG4gICAgJ0FkZCBDb25zdHJhaW50Jzon5re75Yqg57qm5p2fJyxcclxuICAgICdDb25maWcnOifphY3nva4nLFxyXG4gICAgJ1Byb3BlcnRpZXMnOiflsZ7mgKcnLFxyXG4gICAgJ0FkZCBQcm9wZXJ0eSc6J+a3u+WKoOWxnuaApycsXHJcbiAgICAnVmFsdWUnOiflgLwnLFxyXG4gICAgJ0FkZCc6J+a3u+WKoCcsXHJcbiAgICAnVmFsdWVzJzon5YC8JyxcclxuICAgICdBZGQgVmFsdWUnOifmt7vliqDlgLwnLFxyXG4gICAgJ0xpc3RlbmVycyc6J+ebkeWQrOWZqCcsXHJcbiAgICAnRXhlY3V0aW9uIExpc3RlbmVyJzon5omn6KGM55uR5ZCsJyxcclxuICAgICdFdmVudCBUeXBlJzon5LqL5Lu257G75Z6LJyxcclxuICAgICdMaXN0ZW5lciBUeXBlJzon55uR5ZCs5Zmo57G75Z6LJyxcclxuICAgICdKYXZhIENsYXNzJzonSmF2YeexuycsXHJcbiAgICAnRXhwcmVzc2lvbic6J+ihqOi+vuW8jycsXHJcbiAgICAnTXVzdCBwcm92aWRlIGEgdmFsdWUnOiflv4Xpobvmj5DkvpvkuIDkuKrlgLwnLFxyXG4gICAgJ0RlbGVnYXRlIEV4cHJlc3Npb24nOifku6PnkIbooajovr7lvI8nLFxyXG4gICAgJ1NjcmlwdCc6J+iEmuacrCcsXHJcbiAgICAnU2NyaXB0IEZvcm1hdCc6J+iEmuacrOagvOW8jycsXHJcbiAgICAnU2NyaXB0IFR5cGUnOifohJrmnKznsbvlnosnLFxyXG4gICAgJ0lubGluZSBTY3JpcHQnOiflhoXogZTohJrmnKwnLFxyXG4gICAgJ0V4dGVybmFsIFNjcmlwdCc6J+WklumDqOiEmuacrCcsXHJcbiAgICAnUmVzb3VyY2UnOifotYTmupAnLFxyXG4gICAgJ0ZpZWxkIEluamVjdGlvbic6J+Wtl+auteazqOWFpScsXHJcbiAgICAnRXh0ZW5zaW9ucyc6J+aJqeWxlScsXHJcbiAgICAnSW5wdXQvT3V0cHV0Jzon6L6T5YWlL+i+k+WHuicsXHJcbiAgICAnSW5wdXQgUGFyYW1ldGVycyc6J+i+k+WFpeWPguaVsCcsXHJcbiAgICAnT3V0cHV0IFBhcmFtZXRlcnMnOifovpPlh7rlj4LmlbAnLFxyXG4gICAgJ1BhcmFtZXRlcnMnOiflj4LmlbAnLFxyXG4gICAgJ091dHB1dCBQYXJhbWV0ZXInOifovpPlh7rlj4LmlbAnLFxyXG4gICAgJ1RpbWVyIERlZmluaXRpb24gVHlwZSc6J+WumuaXtuWZqOWumuS5ieexu+WeiycsXHJcbiAgICAnVGltZXIgRGVmaW5pdGlvbic6J+WumuaXtuWZqOWumuS5iScsXHJcbiAgICAnRGF0ZSc6J+aXpeacnycsXHJcbiAgICAnRHVyYXRpb24nOifmjIHnu60nLFxyXG4gICAgJ0N5Y2xlJzon5b6q546vJyxcclxuICAgICdTaWduYWwnOifkv6Hlj7cnLFxyXG4gICAgJ1NpZ25hbCBOYW1lJzon5L+h5Y+35ZCN56ewJyxcclxuICAgICdFc2NhbGF0aW9uJzon5Y2H57qnJyxcclxuICAgICdFcnJvcic6J+mUmeivrycsXHJcbiAgICAnTGluayBOYW1lJzon6ZO+5o6l5ZCN56ewJyxcclxuICAgICdDb25kaXRpb24nOifmnaHku7blkI3np7AnLFxyXG4gICAgJ1ZhcmlhYmxlIE5hbWUnOiflj5jph4/lkI3np7AnLFxyXG4gICAgJ1ZhcmlhYmxlIEV2ZW50Jzon5Y+Y6YeP5LqL5Lu2JyxcclxuICAgICdTcGVjaWZ5IG1vcmUgdGhhbiBvbmUgdmFyaWFibGUgY2hhbmdlIGV2ZW50IGFzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QuJzon5aSa5Liq5Y+Y6YeP5LqL5Lu25Lul6YCX5Y+36ZqU5byAJyxcclxuICAgICdXYWl0IGZvciBDb21wbGV0aW9uJzon562J5b6F5a6M5oiQJyxcclxuICAgICdBY3Rpdml0eSBSZWYnOifmtLvliqjlj4LogIMnLFxyXG4gICAgJ1ZlcnNpb24gVGFnJzon54mI5pys5qCH562+JyxcclxuICAgICdFeGVjdXRhYmxlJzon5Y+v5omn6KGM5paH5Lu2JyxcclxuICAgICdFeHRlcm5hbCBUYXNrIENvbmZpZ3VyYXRpb24nOifmianlsZXku7vliqHphY3nva4nLFxyXG4gICAgJ1Rhc2sgUHJpb3JpdHknOifku7vliqHkvJjlhYjnuqcnLFxyXG4gICAgJ0V4dGVybmFsJzon5aSW6YOoJyxcclxuICAgICdDb25uZWN0b3InOifov57mjqXlmagnLFxyXG4gICAgJ011c3QgY29uZmlndXJlIENvbm5lY3Rvcic6J+W/hemhu+mFjee9rui/nuaOpeWZqCcsXHJcbiAgICAnQ29ubmVjdG9yIElkJzon6L+e5o6l5Zmo57yW5Y+3JyxcclxuICAgICdJbXBsZW1lbnRhdGlvbic6J+WunueOsOaWueW8jycsXHJcbiAgICAnRmllbGQgSW5qZWN0aW9ucyc6J+Wtl+auteazqOWFpScsXHJcbiAgICAnRmllbGRzJzon5a2X5q61JyxcclxuICAgICdSZXN1bHQgVmFyaWFibGUnOifnu5Pmnpzlj5jph48nLFxyXG4gICAgJ1RvcGljJzon5Li76aKYJyxcclxuICAgICdDb25maWd1cmUgQ29ubmVjdG9yJzon6YWN572u6L+e5o6l5ZmoJyxcclxuICAgICdJbnB1dCBQYXJhbWV0ZXInOifovpPlhaXlj4LmlbAnLFxyXG4gICAgJ0Fzc2lnbmVlJzon5Luj55CG5Lq6JyxcclxuICAgICdDYW5kaWRhdGUgVXNlcnMnOiflgJnpgInnlKjmiLcnLFxyXG4gICAgJ0NhbmRpZGF0ZSBHcm91cHMnOiflgJnpgInnu4QnLFxyXG4gICAgJ0R1ZSBEYXRlJzon5Yiw5pyf5pe26Ze0JyxcclxuICAgICdGb2xsb3cgVXAgRGF0ZSc6J+i3n+i4quaXpeacnycsXHJcbiAgICAnUHJpb3JpdHknOifkvJjlhYjnuqcnLFxyXG4gICAgJ1RoZSBmb2xsb3cgdXAgZGF0ZSBhcyBhbiBFTCBleHByZXNzaW9uIChlLmcuICR7c29tZURhdGV9IG9yIGFuIElTTyBkYXRlIChlLmcuIDIwMTUtMDYtMjZUMDk6NTQ6MDApJzon6Lef6Liq5pel5pyf5b+F6aG756ym5ZCIRUzooajovr7lvI/vvIzlpoLvvJogJHtzb21lRGF0ZX0gLOaIluiAheS4gOS4qklTT+agh+WHhuaXpeacn++8jOWmgu+8mjIwMTUtMDYtMjZUMDk6NTQ6MDAnLFxyXG4gICAgJ1RoZSBkdWUgZGF0ZSBhcyBhbiBFTCBleHByZXNzaW9uIChlLmcuICR7c29tZURhdGV9IG9yIGFuIElTTyBkYXRlIChlLmcuIDIwMTUtMDYtMjZUMDk6NTQ6MDApJzon6Lef6Liq5pel5pyf5b+F6aG756ym5ZCIRUzooajovr7lvI/vvIzlpoLvvJogJHtzb21lRGF0ZX0gLOaIluiAheS4gOS4qklTT+agh+WHhuaXpeacn++8jOWmgu+8mjIwMTUtMDYtMjZUMDk6NTQ6MDAnLFxyXG4gICAgJ1ZhcmlhYmxlcyc6J+WPmOmHjycsXHJcbiAgICAnQ2FuZGlkYXRlIFN0YXJ0ZXIgQ29uZmlndXJhdGlvbic6J+WAmemAieW8gOWni+mFjee9ricsXHJcbiAgICAnVGFzayBMaXN0ZW5lcic6J+S7u+WKoeebkeWQrOWZqCcsXHJcbiAgICAnQ2FuZGlkYXRlIFN0YXJ0ZXIgR3JvdXBzJzon5YCZ6YCJ5byA5aeL57uEJyxcclxuICAgICdDYW5kaWRhdGUgU3RhcnRlciBVc2Vycyc6J+WAmemAieW8gOWni+eUqOaItycsXHJcbiAgICAnVGFza2xpc3QgQ29uZmlndXJhdGlvbic6J+S7u+WKoeWIl+ihqOmFjee9ricsXHJcbiAgICAnU3RhcnRhYmxlJzon5ZCv5YqoJyxcclxuICAgICdTcGVjaWZ5IG1vcmUgdGhhbiBvbmUgZ3JvdXAgYXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdC4nOifmjIflrprlpJrkuKrnu4Qs55So6YCX5Y+35YiG6ZqUJyxcclxuICAgICdTcGVjaWZ5IG1vcmUgdGhhbiBvbmUgdXNlciBhcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0Lic6J+aMh+WumuWkmuS4queUqOaItyznlKjpgJflj7fliIbpmpQnLFxyXG4gICAgJ1RoaXMgbWFwcyB0byB0aGUgcHJvY2VzcyBkZWZpbml0aW9uIGtleS4nOifov5nkvJrmmKDlsITkuLrmtYHnqIvlrprkuYnnmoTplK4nLFxyXG4gICAgJ0NhbGxBY3Rpdml0eSBUeXBlJzon6LCD55So5rS75Yqo57G75Z6LJyxcclxuICAgICdDb25kaXRpb24gVHlwZSc6J+adoeS7tuexu+WeiycsXHJcbiAgICAnQ3JlYXRlIFVzZXJUYXNrJzon5Yib5bu655So5oi35Lu75YqhJyxcclxuICAgICdDcmVhdGUgQ2FsbEFjdGl2aXR5Jzon5Yib5bu66LCD55So5rS75YqoJyxcclxuICAgICdDYWxsZWQgRWxlbWVudCc6J+iwg+eUqOWFg+e0oCcsXHJcbiAgICAnQ3JlYXRlIERhdGFPYmplY3RSZWZlcmVuY2UnOifliJvlu7rmlbDmja7lr7nosaHlvJXnlKgnLFxyXG4gICAgJ0NyZWF0ZSBEYXRhU3RvcmVSZWZlcmVuY2UnOifliJvlu7rmlbDmja7lrZjlgqjlvJXnlKgnLFxyXG4gICAgJ011bHRpIEluc3RhbmNlJzon5aSa5a6e5L6LJyxcclxuICAgICdMb29wIENhcmRpbmFsaXR5Jzon5a6e5L6L5pWw6YePJyxcclxuICAgICdDb2xsZWN0aW9uJzon5Lu75Yqh5Y+C5LiO5Lq65YiX6KGoJyxcclxuICAgICdFbGVtZW50IFZhcmlhYmxlJzon5YWD57Sg5Y+Y6YePJyxcclxuICAgICdDb21wbGV0aW9uIENvbmRpdGlvbic6J+WujOaIkOadoeS7tidcclxufTtcclxuIiwibW9kdWxlLmV4cG9ydHMgPSBcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxyXFxuPGJwbW4yOmRlZmluaXRpb25zIHhtbG5zOnhzaT1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2VcXFwiIHhtbG5zOmJwbW4yPVxcXCJodHRwOi8vd3d3Lm9tZy5vcmcvc3BlYy9CUE1OLzIwMTAwNTI0L01PREVMXFxcIiB4bWxuczpicG1uZGk9XFxcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0JQTU4vMjAxMDA1MjQvRElcXFwiIHhtbG5zOmRjPVxcXCJodHRwOi8vd3d3Lm9tZy5vcmcvc3BlYy9ERC8yMDEwMDUyNC9EQ1xcXCIgeG1sbnM6ZGk9XFxcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0RELzIwMTAwNTI0L0RJXFxcIiB4c2k6c2NoZW1hTG9jYXRpb249XFxcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0JQTU4vMjAxMDA1MjQvTU9ERUwgQlBNTjIwLnhzZFxcXCIgaWQ9XFxcInNhbXBsZS1kaWFncmFtXFxcIiB0YXJnZXROYW1lc3BhY2U9XFxcImh0dHA6Ly9hY3Rpdml0aS5vcmcvYnBtblxcXCI+XFxyXFxuICA8YnBtbjI6cHJvY2VzcyBpZD1cXFwiUHJvY2Vzc18xXFxcIiBpc0V4ZWN1dGFibGU9XFxcInRydWVcXFwiPlxcclxcbiAgICA8YnBtbjI6c3RhcnRFdmVudCBpZD1cXFwiU3RhcnRFdmVudF8xXFxcIi8+XFxyXFxuICA8L2JwbW4yOnByb2Nlc3M+XFxyXFxuICA8YnBtbmRpOkJQTU5EaWFncmFtIGlkPVxcXCJCUE1ORGlhZ3JhbV8xXFxcIj5cXHJcXG4gICAgPGJwbW5kaTpCUE1OUGxhbmUgaWQ9XFxcIkJQTU5QbGFuZV8xXFxcIiBicG1uRWxlbWVudD1cXFwiUHJvY2Vzc18xXFxcIj5cXHJcXG4gICAgICA8YnBtbmRpOkJQTU5TaGFwZSBpZD1cXFwiX0JQTU5TaGFwZV9TdGFydEV2ZW50XzJcXFwiIGJwbW5FbGVtZW50PVxcXCJTdGFydEV2ZW50XzFcXFwiPlxcclxcbiAgICAgICAgPGRjOkJvdW5kcyBoZWlnaHQ9XFxcIjM2LjBcXFwiIHdpZHRoPVxcXCIzNi4wXFxcIiB4PVxcXCI0MTIuMFxcXCIgeT1cXFwiMjQwLjBcXFwiLz5cXHJcXG4gICAgICA8L2JwbW5kaTpCUE1OU2hhcGU+XFxyXFxuICAgIDwvYnBtbmRpOkJQTU5QbGFuZT5cXHJcXG4gIDwvYnBtbmRpOkJQTU5EaWFncmFtPlxcclxcbjwvYnBtbjI6ZGVmaW5pdGlvbnM+XCI7XG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgREVGQVVMVF9QUklPUklUWSA9IDEwMDA7XHJcblxyXG5cclxuLyoqXHJcbiAqIEEgY29tcG9uZW50IHRoYXQgZGVjaWRlcyB1cG9uIHRoZSB2aXNpYmlsaXR5IC8gZWRpdGFibGVcclxuICogc3RhdGUgb2YgcHJvcGVydGllcyBpbiB0aGUgcHJvcGVydGllcyBwYW5lbC5cclxuICpcclxuICogSW1wbGVtZW50b3JzIG11c3Qgc3ViY2xhc3MgdGhpcyBjb21wb25lbnQgYW5kIG92ZXJyaWRlXHJcbiAqIHtAbGluayBQcm9wZXJ0aWVzQWN0aXZhdG9yI2lzRW50cnlWaXNpYmxlfSBhbmRcclxuICoge0BsaW5rIFByb3BlcnRpZXNBY3RpdmF0b3IjaXNQcm9wZXJ0eUVkaXRhYmxlfSB0byBwcm92aWRlXHJcbiAqIGN1c3RvbSBiZWhhdmlvci5cclxuICpcclxuICogQGNsYXNzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xyXG4gKiBAcGFyYW0ge051bWJlcn0gW3ByaW9yaXR5XSBhdCB3aGljaCBwcmlvcml0eSB0byBob29rIGludG8gdGhlIGFjdGl2YXRpb25cclxuICovXHJcbmZ1bmN0aW9uIFByb3BlcnRpZXNBY3RpdmF0b3IoZXZlbnRCdXMsIHByaW9yaXR5KSB7XHJcbiAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICBwcmlvcml0eSA9IHByaW9yaXR5IHx8IERFRkFVTFRfUFJJT1JJVFk7XHJcblxyXG4gIGV2ZW50QnVzLm9uKCdwcm9wZXJ0aWVzUGFuZWwuaXNFbnRyeVZpc2libGUnLCBwcmlvcml0eSwgZnVuY3Rpb24oZSkge1xyXG4gICAgcmV0dXJuIHNlbGYuaXNFbnRyeVZpc2libGUoZS5lbnRyeSwgZS5lbGVtZW50KTtcclxuICB9KTtcclxuXHJcbiAgZXZlbnRCdXMub24oJ3Byb3BlcnRpZXNQYW5lbC5pc1Byb3BlcnR5RWRpdGFibGUnLCBwcmlvcml0eSwgZnVuY3Rpb24oZSkge1xyXG4gICAgcmV0dXJuIHNlbGYuaXNQcm9wZXJ0eUVkaXRhYmxlKGUuZW50cnksIGUucHJvcGVydHlOYW1lLCBlLmVsZW1lbnQpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5Qcm9wZXJ0aWVzQWN0aXZhdG9yLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUHJvcGVydGllc0FjdGl2YXRvcjtcclxuXHJcblxyXG4vKipcclxuICogU2hvdWxkIHRoZSBnaXZlbiBlbnRyeSBiZSB2aXNpYmxlIGZvciB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBtZXRob2QgIFByb3BlcnRpZXNBY3RpdmF0b3IjaXNFbnRyeVZpc2libGVcclxuICpcclxuICogQHBhcmFtIHtFbnRyeURlc2NyaXB0b3J9IGVudHJ5XHJcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICovXHJcblByb3BlcnRpZXNBY3RpdmF0b3IucHJvdG90eXBlLmlzRW50cnlWaXNpYmxlID0gZnVuY3Rpb24oZW50cnksIGVsZW1lbnQpIHtcclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTaG91bGQgdGhlIGdpdmVuIHByb3BlcnR5IGJlIGVkaXRhYmxlIGZvciB0aGUgc3BlY2lmaWVkIGVsZW1lbnRcclxuICpcclxuICogQG1ldGhvZCAgUHJvcGVydGllc0FjdGl2YXRvciNpc1Byb3BlcnR5RWRpdGFibGVcclxuICpcclxuICogQHBhcmFtIHtFbnRyeURlc2NyaXB0b3J9IGVudHJ5XHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eU5hbWVcclxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gKi9cclxuUHJvcGVydGllc0FjdGl2YXRvci5wcm90b3R5cGUuaXNQcm9wZXJ0eUVkaXRhYmxlID0gZnVuY3Rpb24oZW50cnksIHByb3BlcnR5TmFtZSwgZWxlbWVudCkge1xyXG4gIHJldHVybiB0cnVlO1xyXG59OyIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBkb21RdWVyeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5xdWVyeSxcclxuICAgIGRvbUNsZWFyID0gcmVxdWlyZSgnbWluLWRvbScpLmNsZWFyLFxyXG4gICAgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyksXHJcbiAgICBkb21pZnkgPSByZXF1aXJlKCdtaW4tZG9tJykuZG9taWZ5LFxyXG4gICAgSWRzID0gcmVxdWlyZSgnaWRzJykuZGVmYXVsdDtcclxuXHJcbnZhciBTUEFDRV9SRUdFWCA9IC9cXHMvO1xyXG5cclxuLy8gZm9yIFFOYW1lIHZhbGlkYXRpb24gYXMgcGVyIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwvI05ULU5hbWVDaGFyXHJcbnZhciBRTkFNRV9SRUdFWCA9IC9eKFthLXpdW1xcdy0uXSo6KT9bYS16X11bXFx3LS5dKiQvaTtcclxuXHJcbi8vIGZvciBJRCB2YWxpZGF0aW9uIGFzIHBlciBCUE1OIFNjaGVtYSAoUU5hbWUgLSBOYW1lc3BhY2UpXHJcbnZhciBJRF9SRUdFWCA9IC9eW2Etel9dW1xcdy0uXSokL2k7XHJcblxyXG52YXIgUExBQ0VIT0xERVJfUkVHRVggPSAvXFwkXFx7KFtefV0qKVxcfS9nO1xyXG5cclxudmFyIEhUTUxfRVNDQVBFX01BUCA9IHtcclxuICAnJic6ICcmYW1wOycsXHJcbiAgJzwnOiAnJmx0OycsXHJcbiAgJz4nOiAnJmd0OycsXHJcbiAgJ1wiJzogJyZxdW90OycsXHJcbiAgJ1xcJyc6ICcmIzM5OydcclxufTtcclxuXHJcbmZ1bmN0aW9uIHNlbGVjdGVkT3B0aW9uKHNlbGVjdEJveCkge1xyXG4gIGlmIChzZWxlY3RCb3guc2VsZWN0ZWRJbmRleCA+PSAwKSB7XHJcbiAgICByZXR1cm4gc2VsZWN0Qm94Lm9wdGlvbnNbc2VsZWN0Qm94LnNlbGVjdGVkSW5kZXhdLnZhbHVlO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VsZWN0ZWRPcHRpb24gPSBzZWxlY3RlZE9wdGlvbjtcclxuXHJcblxyXG5mdW5jdGlvbiBzZWxlY3RlZFR5cGUoZWxlbWVudFN5bnRheCwgaW5wdXROb2RlKSB7XHJcbiAgdmFyIHR5cGVTZWxlY3QgPSBkb21RdWVyeShlbGVtZW50U3ludGF4LCBpbnB1dE5vZGUpO1xyXG4gIHJldHVybiBzZWxlY3RlZE9wdGlvbih0eXBlU2VsZWN0KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VsZWN0ZWRUeXBlID0gc2VsZWN0ZWRUeXBlO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSB0aGUgcm9vdCBlbGVtZW50IHRoZSBkb2N1bWVudCB0aGlzXHJcbiAqIGJ1c2luZXNzIG9iamVjdCBpcyBjb250YWluZWQgaW4uXHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRSb290KGJ1c2luZXNzT2JqZWN0KSB7XHJcbiAgdmFyIHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xyXG4gIHdoaWxlIChwYXJlbnQuJHBhcmVudCkge1xyXG4gICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XHJcbiAgfVxyXG4gIHJldHVybiBwYXJlbnQ7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmdldFJvb3QgPSBnZXRSb290O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBmaWx0ZXJzIGFsbCBlbGVtZW50cyBpbiB0aGUgbGlzdCB3aGljaCBoYXZlIGEgZ2l2ZW4gdHlwZS5cclxuICogcmVtb3ZlcyBhIG5ldyBsaXN0XHJcbiAqL1xyXG5mdW5jdGlvbiBmaWx0ZXJFbGVtZW50c0J5VHlwZShvYmplY3RMaXN0LCB0eXBlKSB7XHJcbiAgdmFyIGxpc3QgPSBvYmplY3RMaXN0IHx8IFtdO1xyXG4gIHZhciByZXN1bHQgPSBbXTtcclxuICBmb3JFYWNoKGxpc3QsIGZ1bmN0aW9uKG9iaikge1xyXG4gICAgaWYgKGlzKG9iaiwgdHlwZSkpIHtcclxuICAgICAgcmVzdWx0LnB1c2gob2JqKTtcclxuICAgIH1cclxuICB9KTtcclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5maWx0ZXJFbGVtZW50c0J5VHlwZSA9IGZpbHRlckVsZW1lbnRzQnlUeXBlO1xyXG5cclxuXHJcbmZ1bmN0aW9uIGZpbmRSb290RWxlbWVudHNCeVR5cGUoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKSB7XHJcbiAgdmFyIHJvb3QgPSBnZXRSb290KGJ1c2luZXNzT2JqZWN0KTtcclxuXHJcbiAgcmV0dXJuIGZpbHRlckVsZW1lbnRzQnlUeXBlKHJvb3Qucm9vdEVsZW1lbnRzLCByZWZlcmVuY2VkVHlwZSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmZpbmRSb290RWxlbWVudHNCeVR5cGUgPSBmaW5kUm9vdEVsZW1lbnRzQnlUeXBlO1xyXG5cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUFsbENoaWxkcmVuKGRvbUVsZW1lbnQpIHtcclxuICB3aGlsZSAoZG9tRWxlbWVudC5maXJzdENoaWxkKSB7XHJcbiAgICBkb21FbGVtZW50LnJlbW92ZUNoaWxkKGRvbUVsZW1lbnQuZmlyc3RDaGlsZCk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5yZW1vdmVBbGxDaGlsZHJlbiA9IHJlbW92ZUFsbENoaWxkcmVuO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBhZGRzIGFuIGVtcHR5IG9wdGlvbiB0byB0aGUgbGlzdFxyXG4gKi9cclxuZnVuY3Rpb24gYWRkRW1wdHlQYXJhbWV0ZXIobGlzdCkge1xyXG4gIHJldHVybiBsaXN0LnB1c2goeyAnbGFiZWwnOiAnJywgJ3ZhbHVlJzogJycsICduYW1lJzogJycgfSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmFkZEVtcHR5UGFyYW1ldGVyID0gYWRkRW1wdHlQYXJhbWV0ZXI7XHJcblxyXG5cclxuLyoqXHJcbiAqIHJldHVybnMgYSBsaXN0IHdpdGggYWxsIHJvb3QgZWxlbWVudHMgZm9yIHRoZSBnaXZlbiBwYXJhbWV0ZXIgJ3JlZmVyZW5jZWRUeXBlJ1xyXG4gKi9cclxuZnVuY3Rpb24gcmVmcmVzaE9wdGlvbnNNb2RlbChidXNpbmVzc09iamVjdCwgcmVmZXJlbmNlZFR5cGUpIHtcclxuICB2YXIgbW9kZWwgPSBbXTtcclxuICB2YXIgcmVmZXJhYmxlT2JqZWN0cyA9IGZpbmRSb290RWxlbWVudHNCeVR5cGUoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKTtcclxuICBmb3JFYWNoKHJlZmVyYWJsZU9iamVjdHMsIGZ1bmN0aW9uKG9iaikge1xyXG4gICAgbW9kZWwucHVzaCh7XHJcbiAgICAgIGxhYmVsOiAob2JqLm5hbWUgfHwgJycpICsgJyAoaWQ9JytvYmouaWQrJyknLFxyXG4gICAgICB2YWx1ZTogb2JqLmlkLFxyXG4gICAgICBuYW1lOiBvYmoubmFtZVxyXG4gICAgfSk7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIG1vZGVsO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5yZWZyZXNoT3B0aW9uc01vZGVsID0gcmVmcmVzaE9wdGlvbnNNb2RlbDtcclxuXHJcblxyXG4vKipcclxuICogZmlsbHMgdGhlIGRyb3AgZG93biB3aXRoIG9wdGlvbnNcclxuICovXHJcbmZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnNEcm9wRG93bihkb21TZWxlY3RvciwgYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlLCBlbnRyeU5vZGUpIHtcclxuICB2YXIgb3B0aW9ucyA9IHJlZnJlc2hPcHRpb25zTW9kZWwoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKTtcclxuICBhZGRFbXB0eVBhcmFtZXRlcihvcHRpb25zKTtcclxuICB2YXIgc2VsZWN0Qm94ID0gZG9tUXVlcnkoZG9tU2VsZWN0b3IsIGVudHJ5Tm9kZSk7XHJcbiAgZG9tQ2xlYXIoc2VsZWN0Qm94KTtcclxuXHJcbiAgZm9yRWFjaChvcHRpb25zLCBmdW5jdGlvbihvcHRpb24pIHtcclxuICAgIHZhciBvcHRpb25FbnRyeSA9IGRvbWlmeSgnPG9wdGlvbiB2YWx1ZT1cIicgKyBlc2NhcGVIVE1MKG9wdGlvbi52YWx1ZSkgKyAnXCI+JyArIGVzY2FwZUhUTUwob3B0aW9uLmxhYmVsKSArICc8L29wdGlvbj4nKTtcclxuICAgIHNlbGVjdEJveC5hcHBlbmRDaGlsZChvcHRpb25FbnRyeSk7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIG9wdGlvbnM7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLnVwZGF0ZU9wdGlvbnNEcm9wRG93biA9IHVwZGF0ZU9wdGlvbnNEcm9wRG93bjtcclxuXHJcblxyXG4vKipcclxuICogY2hlY2tzIHdoZXRoZXIgdGhlIGlkIHZhbHVlIGlzIHZhbGlkXHJcbiAqXHJcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gYm9cclxuICogQHBhcmFtIHtTdHJpbmd9IGlkVmFsdWVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNsYXRlXHJcbiAqXHJcbiAqIEByZXR1cm4ge1N0cmluZ30gZXJyb3IgbWVzc2FnZVxyXG4gKi9cclxuZnVuY3Rpb24gaXNJZFZhbGlkKGJvLCBpZFZhbHVlLCB0cmFuc2xhdGUpIHtcclxuICB2YXIgYXNzaWduZWQgPSBiby4kbW9kZWwuaWRzLmFzc2lnbmVkKGlkVmFsdWUpO1xyXG5cclxuICB2YXIgaWRFeGlzdHMgPSBhc3NpZ25lZCAmJiBhc3NpZ25lZCAhPT0gYm87XHJcblxyXG4gIGlmICghaWRWYWx1ZSB8fCBpZEV4aXN0cykge1xyXG4gICAgcmV0dXJuIHRyYW5zbGF0ZSgnRWxlbWVudCBtdXN0IGhhdmUgYW4gdW5pcXVlIGlkLicpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHZhbGlkYXRlSWQoaWRWYWx1ZSwgdHJhbnNsYXRlKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuaXNJZFZhbGlkID0gaXNJZFZhbGlkO1xyXG5cclxuXHJcbmZ1bmN0aW9uIHZhbGlkYXRlSWQoaWRWYWx1ZSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGlkVmFsdWUgPSBzdHJpcFBsYWNlaG9sZGVycyhpZFZhbHVlKTtcclxuXHJcbiAgaWYgKGNvbnRhaW5zU3BhY2UoaWRWYWx1ZSkpIHtcclxuICAgIHJldHVybiB0cmFuc2xhdGUoJ0lkIG11c3Qgbm90IGNvbnRhaW4gc3BhY2VzLicpO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFJRF9SRUdFWC50ZXN0KGlkVmFsdWUpKSB7XHJcblxyXG4gICAgaWYgKFFOQU1FX1JFR0VYLnRlc3QoaWRWYWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnSWQgbXVzdCBub3QgY29udGFpbiBwcmVmaXguJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRyYW5zbGF0ZSgnSWQgbXVzdCBiZSBhIHZhbGlkIFFOYW1lLicpO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMudmFsaWRhdGVJZCA9IHZhbGlkYXRlSWQ7XHJcblxyXG5cclxuZnVuY3Rpb24gY29udGFpbnNTcGFjZSh2YWx1ZSkge1xyXG4gIHJldHVybiBTUEFDRV9SRUdFWC50ZXN0KHZhbHVlKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuY29udGFpbnNTcGFjZSA9IGNvbnRhaW5zU3BhY2U7XHJcblxyXG5cclxuZnVuY3Rpb24gc3RyaXBQbGFjZWhvbGRlcnMoaWRWYWx1ZSkge1xyXG5cclxuICAvLyByZXBsYWNlIGV4cHJlc3Npb24gZS5nLiAke1ZFUlNJT05fVEFHfVxyXG4gIC8vIHVzZSBvbmx5IHRoZSBjb250ZW50IGJldHdlZW4gJHt9XHJcbiAgLy8gZm9yIHRoZSBSRUdFWCBjaGVja1xyXG4gIHJldHVybiBpZFZhbHVlLnJlcGxhY2UoUExBQ0VIT0xERVJfUkVHRVgsICckMScpO1xyXG59XHJcblxyXG4vKipcclxuICogZ2VuZXJhdGUgYSBzZW1hbnRpYyBpZCB3aXRoIGdpdmVuIHByZWZpeFxyXG4gKi9cclxuZnVuY3Rpb24gbmV4dElkKHByZWZpeCkge1xyXG4gIHZhciBpZHMgPSBuZXcgSWRzKFszMiwzMiwxXSk7XHJcblxyXG4gIHJldHVybiBpZHMubmV4dFByZWZpeGVkKHByZWZpeCk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLm5leHRJZCA9IG5leHRJZDtcclxuXHJcblxyXG5mdW5jdGlvbiB0cmlnZ2VyQ2xpY2tFdmVudChlbGVtZW50KSB7XHJcbiAgdmFyIGV2dDtcclxuICB2YXIgZXZlbnRUeXBlID0gJ2NsaWNrJztcclxuXHJcbiAgaWYgKGRvY3VtZW50LmNyZWF0ZUV2ZW50KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBDaHJvbWUsIFNhZmFyaSwgRmlyZWZveFxyXG4gICAgICBldnQgPSBuZXcgTW91c2VFdmVudCgoZXZlbnRUeXBlKSwgeyB2aWV3OiB3aW5kb3csIGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIElFIDExLCBQaGFudG9tSlMgKHdhdCEpXHJcbiAgICAgIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdNb3VzZUV2ZW50Jyk7XHJcblxyXG4gICAgICBldnQuaW5pdEV2ZW50KChldmVudFR5cGUpLCB0cnVlLCB0cnVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZ0KTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gV2VsY29tZSBJRVxyXG4gICAgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QoKTtcclxuXHJcbiAgICByZXR1cm4gZWxlbWVudC5maXJlRXZlbnQoJ29uJyArIGV2ZW50VHlwZSwgZXZ0KTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLnRyaWdnZXJDbGlja0V2ZW50ID0gdHJpZ2dlckNsaWNrRXZlbnQ7XHJcblxyXG5cclxuZnVuY3Rpb24gZXNjYXBlSFRNTChzdHIpIHtcclxuICBzdHIgPSAnJyArIHN0cjtcclxuXHJcbiAgcmV0dXJuIHN0ciAmJiBzdHIucmVwbGFjZSgvWyY8PlwiJ10vZywgZnVuY3Rpb24obWF0Y2gpIHtcclxuICAgIHJldHVybiBIVE1MX0VTQ0FQRV9NQVBbbWF0Y2hdO1xyXG4gIH0pO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5lc2NhcGVIVE1MID0gZXNjYXBlSFRNTDsiLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vaGVscGVyL0NtZEhlbHBlcicpLFxyXG4gICAgZXNjYXBlSFRNTCA9IHJlcXVpcmUoJy4uL1V0aWxzJykuZXNjYXBlSFRNTDtcclxuXHJcbnZhciBlbnRyeUZpZWxkRGVzY3JpcHRpb24gPSByZXF1aXJlKCcuL0VudHJ5RmllbGREZXNjcmlwdGlvbicpO1xyXG5cclxuXHJcbnZhciBjaGVja2JveCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGRlZmF1bHRQYXJhbWV0ZXJzKSB7XHJcbiAgdmFyIHJlc291cmNlID0gZGVmYXVsdFBhcmFtZXRlcnMsXHJcbiAgICAgIGlkID0gcmVzb3VyY2UuaWQsXHJcbiAgICAgIGxhYmVsID0gb3B0aW9ucy5sYWJlbCB8fCBpZCxcclxuICAgICAgY2FuQmVEaXNhYmxlZCA9ICEhb3B0aW9ucy5kaXNhYmxlZCAmJiB0eXBlb2Ygb3B0aW9ucy5kaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJyxcclxuICAgICAgY2FuQmVIaWRkZW4gPSAhIW9wdGlvbnMuaGlkZGVuICYmIHR5cGVvZiBvcHRpb25zLmhpZGRlbiA9PT0gJ2Z1bmN0aW9uJyxcclxuICAgICAgZGVzY3JpcHRpb24gPSBvcHRpb25zLmRlc2NyaXB0aW9uO1xyXG5cclxuICByZXNvdXJjZS5odG1sID1cclxuICAgICc8aW5wdXQgaWQ9XCJhY3Rpdml0aS0nICsgZXNjYXBlSFRNTChpZCkgKyAnXCIgJyArXHJcbiAgICAgICAgICd0eXBlPVwiY2hlY2tib3hcIiAnICtcclxuICAgICAgICAgJ25hbWU9XCInICsgZXNjYXBlSFRNTChvcHRpb25zLm1vZGVsUHJvcGVydHkpICsgJ1wiICcgK1xyXG4gICAgICAgICAoY2FuQmVEaXNhYmxlZCA/ICdkYXRhLWRpc2FibGU9XCJpc0Rpc2FibGVkXCInIDogJycpICtcclxuICAgICAgICAgKGNhbkJlSGlkZGVuID8gJ2RhdGEtc2hvdz1cImlzSGlkZGVuXCInIDogJycpICtcclxuICAgICAgICAgJyAvPicgK1xyXG4gICAgJzxsYWJlbCBmb3I9XCJhY3Rpdml0aS0nICsgZXNjYXBlSFRNTChpZCkgKyAnXCIgJyArXHJcbiAgICAgICAgIChjYW5CZURpc2FibGVkID8gJ2RhdGEtZGlzYWJsZT1cImlzRGlzYWJsZWRcIicgOiAnJykgK1xyXG4gICAgICAgICAoY2FuQmVIaWRkZW4gPyAnZGF0YS1zaG93PVwiaXNIaWRkZW5cIicgOiAnJykgK1xyXG4gICAgICAgICAnPicgKyBlc2NhcGVIVE1MKGxhYmVsKSArICc8L2xhYmVsPic7XHJcblxyXG4gIC8vIGFkZCBkZXNjcmlwdGlvbiBiZWxvdyBjaGVja2JveCBlbnRyeSBmaWVsZFxyXG4gIGlmIChkZXNjcmlwdGlvbikge1xyXG4gICAgcmVzb3VyY2UuaHRtbCArPSBlbnRyeUZpZWxkRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgcmVzb3VyY2UuZ2V0ID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXHJcbiAgICAgICAgcmVzID0ge307XHJcblxyXG4gICAgcmVzW29wdGlvbnMubW9kZWxQcm9wZXJ0eV0gPSBiby5nZXQob3B0aW9ucy5tb2RlbFByb3BlcnR5KTtcclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH07XHJcblxyXG4gIHJlc291cmNlLnNldCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgdmFyIHJlcyA9IHt9O1xyXG5cclxuICAgIHJlc1tvcHRpb25zLm1vZGVsUHJvcGVydHldID0gISF2YWx1ZXNbb3B0aW9ucy5tb2RlbFByb3BlcnR5XTtcclxuXHJcbiAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcmVzKTtcclxuICB9O1xyXG5cclxuICBpZiAodHlwZW9mIG9wdGlvbnMuc2V0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICByZXNvdXJjZS5zZXQgPSBvcHRpb25zLnNldDtcclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5nZXQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIHJlc291cmNlLmdldCA9IG9wdGlvbnMuZ2V0O1xyXG4gIH1cclxuXHJcbiAgaWYgKGNhbkJlRGlzYWJsZWQpIHtcclxuICAgIHJlc291cmNlLmlzRGlzYWJsZWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIG9wdGlvbnMuZGlzYWJsZWQuYXBwbHkocmVzb3VyY2UsIGFyZ3VtZW50cyk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgaWYgKGNhbkJlSGlkZGVuKSB7XHJcbiAgICByZXNvdXJjZS5pc0hpZGRlbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gIW9wdGlvbnMuaGlkZGVuLmFwcGx5KHJlc291cmNlLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlc291cmNlLmNzc0NsYXNzZXMgPSBbJ2JwcC1jaGVja2JveCddO1xyXG5cclxuICByZXR1cm4gcmVzb3VyY2U7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrYm94O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpLFxyXG4gICAgZmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9maW5kJyk7XHJcblxyXG52YXIgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnk7XHJcblxyXG52YXIgZXNjYXBlSFRNTCA9IHJlcXVpcmUoJy4uL1V0aWxzJykuZXNjYXBlSFRNTDtcclxuXHJcbnZhciBzZWxlY3RFbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuL1NlbGVjdEVudHJ5RmFjdG9yeScpLFxyXG4gICAgZW50cnlGaWVsZERlc2NyaXB0aW9uID0gcmVxdWlyZSgnLi9FbnRyeUZpZWxkRGVzY3JpcHRpb24nKTtcclxuXHJcblxyXG4vKipcclxuICogVGhlIGNvbWJvIGJveCBpcyBhIHNwZWNpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIHNlbGVjdCBlbnRyeSBhbmQgYWRkcyB0aGUgb3B0aW9uICdjdXN0b20nIHRvIHRoZVxyXG4gKiBzZWxlY3QgYm94LiBJZiAnY3VzdG9tJyBpcyBzZWxlY3RlZCwgYW4gYWRkaXRpb25hbCB0ZXh0IGlucHV0IGZpZWxkIGlzIHNob3duIHdoaWNoIGFsbG93cyB0byBkZWZpbmVcclxuICogYSBjdXN0b20gdmFsdWUuXHJcbiAqXHJcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMuaWRcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmxhYmVsXHJcbiAqIEBwYXJhbSAge0FycmF5PE9iamVjdD59IG9wdGlvbnMuc2VsZWN0T3B0aW9ucyBsaXN0IG9mIG5hbWUvdmFsdWUgcGFpcnNcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLm1vZGVsUHJvcGVydHlcclxuICogQHBhcmFtICB7ZnVuY3Rpb259IG9wdGlvbnMuZ2V0XHJcbiAqIEBwYXJhbSAge2Z1bmN0aW9ufSBvcHRpb25zLnNldFxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IFtvcHRpb25zLmN1c3RvbVZhbHVlXSBjdXN0b20gc2VsZWN0IG9wdGlvbiB2YWx1ZSAoZGVmYXVsdDogJ2N1c3RvbScpXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gW29wdGlvbnMuY3VzdG9tTmFtZV0gY3VzdG9tIHNlbGVjdCBvcHRpb24gbmFtZSB2aXNpYmxlIGluIHRoZSBzZWxlY3QgYm94IChkZWZhdWx0OiAnY3VzdG9tJylcclxuICpcclxuICogQHJldHVybiB7T2JqZWN0fVxyXG4gKi9cclxudmFyIGNvbWJvQm94ID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG5cclxuICB2YXIgc2VsZWN0T3B0aW9ucyA9IG9wdGlvbnMuc2VsZWN0T3B0aW9ucyxcclxuICAgICAgbW9kZWxQcm9wZXJ0eSA9IG9wdGlvbnMubW9kZWxQcm9wZXJ0eSxcclxuICAgICAgY3VzdG9tVmFsdWUgPSBvcHRpb25zLmN1c3RvbVZhbHVlIHx8ICdjdXN0b20nLFxyXG4gICAgICBjdXN0b21OYW1lID0gb3B0aW9ucy5jdXN0b21OYW1lIHx8ICdjdXN0b20gJyArIG1vZGVsUHJvcGVydHksXHJcbiAgICAgIGRlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbjtcclxuXHJcbiAgLy8gY2hlY2sgaWYgYSB2YWx1ZSBpcyBub3QgYSBidWlsdCBpbiB2YWx1ZVxyXG4gIHZhciBpc0N1c3RvbVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWVbbW9kZWxQcm9wZXJ0eV0gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgaXNDdXN0b20gPSAhZmluZChzZWxlY3RPcHRpb25zLCBmdW5jdGlvbihvcHRpb24pIHtcclxuICAgICAgcmV0dXJuIHZhbHVlW21vZGVsUHJvcGVydHldID09PSBvcHRpb24udmFsdWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gaXNDdXN0b207XHJcbiAgfTtcclxuXHJcbiAgdmFyIGNvbWJvT3B0aW9ucyA9IGFzc2lnbih7fSwgb3B0aW9ucyk7XHJcblxyXG4gIC8vIHRydWUgaWYgdGhlIHNlbGVjdGVkIHZhbHVlIGluIHRoZSBzZWxlY3QgYm94IGlzIGN1c3RvbVZhbHVlXHJcbiAgY29tYm9PcHRpb25zLnNob3dDdXN0b21JbnB1dCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgIHZhciBzZWxlY3RCb3ggPSBkb21RdWVyeSgnW2RhdGEtZW50cnk9XCInKyBvcHRpb25zLmlkICsnXCJdIHNlbGVjdCcsIG5vZGUucGFyZW50Tm9kZSk7XHJcblxyXG4gICAgaWYgKHNlbGVjdEJveCkge1xyXG4gICAgICByZXR1cm4gc2VsZWN0Qm94LnZhbHVlID09PSBjdXN0b21WYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfTtcclxuXHJcbiAgY29tYm9PcHRpb25zLmdldCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgIHZhciB2YWx1ZSA9IG9wdGlvbnMuZ2V0KGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgIHZhciBtb2RpZmllZFZhbHVlcyA9IHt9O1xyXG5cclxuICAgIGlmICghaXNDdXN0b21WYWx1ZSh2YWx1ZSkpIHtcclxuICAgICAgbW9kaWZpZWRWYWx1ZXNbbW9kZWxQcm9wZXJ0eV0gPSB2YWx1ZVttb2RlbFByb3BlcnR5XSB8fCAnJztcclxuXHJcbiAgICAgIHJldHVybiBtb2RpZmllZFZhbHVlcztcclxuICAgIH1cclxuXHJcbiAgICBtb2RpZmllZFZhbHVlc1ttb2RlbFByb3BlcnR5XSA9IGN1c3RvbVZhbHVlO1xyXG4gICAgbW9kaWZpZWRWYWx1ZXNbJ2N1c3RvbS0nK21vZGVsUHJvcGVydHldID0gdmFsdWVbbW9kZWxQcm9wZXJ0eV07XHJcblxyXG4gICAgcmV0dXJuIG1vZGlmaWVkVmFsdWVzO1xyXG4gIH07XHJcblxyXG4gIGNvbWJvT3B0aW9ucy5zZXQgPSBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgIHZhciBtb2RpZmllZFZhbHVlcyA9IHt9O1xyXG5cclxuICAgIC8vIGlmIHRoZSBjdXN0b20gc2VsZWN0IG9wdGlvbiBoYXMgYmVlbiBzZWxlY3RlZFxyXG4gICAgLy8gdGFrZSB0aGUgdmFsdWUgZnJvbSB0aGUgdGV4dCBpbnB1dCBmaWVsZFxyXG4gICAgaWYgKHZhbHVlc1ttb2RlbFByb3BlcnR5XSA9PT0gY3VzdG9tVmFsdWUpIHtcclxuICAgICAgbW9kaWZpZWRWYWx1ZXNbbW9kZWxQcm9wZXJ0eV0gPSB2YWx1ZXNbJ2N1c3RvbS0nICsgbW9kZWxQcm9wZXJ0eV0gfHwgJyc7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChvcHRpb25zLmVtcHR5UGFyYW1ldGVyICYmIHZhbHVlc1ttb2RlbFByb3BlcnR5XSA9PT0gJycpIHtcclxuICAgICAgbW9kaWZpZWRWYWx1ZXNbbW9kZWxQcm9wZXJ0eV0gPSB1bmRlZmluZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBtb2RpZmllZFZhbHVlc1ttb2RlbFByb3BlcnR5XSA9IHZhbHVlc1ttb2RlbFByb3BlcnR5XTtcclxuICAgIH1cclxuICAgIHJldHVybiBvcHRpb25zLnNldChlbGVtZW50LCBtb2RpZmllZFZhbHVlcywgbm9kZSk7XHJcbiAgfTtcclxuXHJcbiAgY29tYm9PcHRpb25zLnNlbGVjdE9wdGlvbnMucHVzaCh7IG5hbWU6IGN1c3RvbU5hbWUsIHZhbHVlOiBjdXN0b21WYWx1ZSB9KTtcclxuXHJcbiAgdmFyIGNvbWJvQm94RW50cnkgPSBhc3NpZ24oe30sIHNlbGVjdEVudHJ5RmFjdG9yeShjb21ib09wdGlvbnMsIGNvbWJvT3B0aW9ucykpO1xyXG5cclxuICBjb21ib0JveEVudHJ5Lmh0bWwgKz0gJzxkaXYgY2xhc3M9XCJicHAtZmllbGQtd3JhcHBlciBicHAtY29tYm8taW5wdXRcIiAnICtcclxuICAgICdkYXRhLXNob3c9XCJzaG93Q3VzdG9tSW5wdXRcIicgK1xyXG4gICAgJz4nICtcclxuICAgICc8aW5wdXQgaWQ9XCJhY3Rpdml0aS0nICsgZXNjYXBlSFRNTChvcHRpb25zLmlkKSArICctaW5wdXRcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJjdXN0b20tJyArXHJcbiAgICAgIGVzY2FwZUhUTUwobW9kZWxQcm9wZXJ0eSkgKyAnXCIgJyArXHJcbiAgICAnIC8+JyArXHJcbiAgJzwvZGl2Pic7XHJcblxyXG4gIC8vIGFkZCBkZXNjcmlwdGlvbiBiZWxvdyBjb21ibyBib3ggZW50cnkgZmllbGRcclxuICBpZiAoZGVzY3JpcHRpb24pIHtcclxuICAgIGNvbWJvQm94RW50cnkuaHRtbCArPSBlbnRyeUZpZWxkRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGNvbWJvQm94RW50cnk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGNvbWJvQm94O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxuLy8gaW5wdXQgZW50aXRpZXNcclxudmFyIHRleHRJbnB1dEZpZWxkID0gcmVxdWlyZSgnLi9UZXh0SW5wdXRFbnRyeUZhY3RvcnknKSxcclxuICAgIGNoZWNrYm94RmllbGQgPSByZXF1aXJlKCcuL0NoZWNrYm94RW50cnlGYWN0b3J5JyksXHJcbiAgICBzZWxlY3RCb3hGaWVsZCA9IHJlcXVpcmUoJy4vU2VsZWN0RW50cnlGYWN0b3J5JyksXHJcbiAgICBjb21ib0JveEZpZWxkID0gcmVxdWlyZSgnLi9Db21ib0VudHJ5RmFjdG9yeScpLFxyXG4gICAgdGV4dEJveEZpZWxkID0gcmVxdWlyZSgnLi9UZXh0Qm94RW50cnlGYWN0b3J5JyksXHJcbiAgICB2YWxpZGF0aW9uQXdhcmVUZXh0SW5wdXRGaWVsZCA9IHJlcXVpcmUoJy4vVmFsaWRhdGlvbkF3YXJlVGV4dElucHV0JyksXHJcbiAgICB0YWJsZUZpZWxkID0gcmVxdWlyZSgnLi9UYWJsZUVudHJ5RmFjdG9yeScpLFxyXG4gICAgbGFiZWxFbnRyeSA9IHJlcXVpcmUoJy4vTGFiZWxGYWN0b3J5JyksXHJcbiAgICBsaW5rID0gcmVxdWlyZSgnLi9MaW5rRW50cnlGYWN0b3J5Jyk7XHJcblxyXG52YXIgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vaGVscGVyL0NtZEhlbHBlcicpO1xyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBlbnN1cmVOb3ROdWxsKHByb3ApIHtcclxuICBpZiAoIXByb3ApIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihwcm9wICsgJyBtdXN0IGJlIHNldC4nKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBwcm9wO1xyXG59XHJcblxyXG4vKipcclxuICogc2V0cyB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzIHdoaWNoIGFyZSBuZWVkZWQgdG8gY3JlYXRlIGFuIGVudHJ5XHJcbiAqXHJcbiAqIEBwYXJhbSBvcHRpb25zXHJcbiAqIEByZXR1cm5zIHt7aWQ6ICosIGRlc2NyaXB0aW9uOiAoKnxzdHJpbmcpLCBnZXQ6ICgqfEZ1bmN0aW9uKSwgc2V0OiAoKnxGdW5jdGlvbiksXHJcbiAqICAgICAgICAgICAgdmFsaWRhdGU6ICgqfEZ1bmN0aW9uKSwgaHRtbDogc3RyaW5nfX1cclxuICovXHJcbnZhciBzZXREZWZhdWx0UGFyYW1ldGVycyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuXHJcbiAgLy8gZGVmYXVsdCBtZXRob2QgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlucHV0IGZpZWxkXHJcbiAgdmFyIGRlZmF1bHRHZXQgPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcclxuICAgICAgICByZXMgPSB7fSxcclxuICAgICAgICBwcm9wID0gZW5zdXJlTm90TnVsbChvcHRpb25zLm1vZGVsUHJvcGVydHkpO1xyXG4gICAgcmVzW3Byb3BdID0gYm8uZ2V0KHByb3ApO1xyXG5cclxuICAgIHJldHVybiByZXM7XHJcbiAgfTtcclxuXHJcbiAgLy8gZGVmYXVsdCBtZXRob2QgdG8gc2V0IGEgbmV3IHZhbHVlIHRvIHRoZSBpbnB1dCBmaWVsZFxyXG4gIHZhciBkZWZhdWx0U2V0ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICB2YXIgcmVzID0ge30sXHJcbiAgICAgICAgcHJvcCA9IGVuc3VyZU5vdE51bGwob3B0aW9ucy5tb2RlbFByb3BlcnR5KTtcclxuICAgIGlmICh2YWx1ZXNbcHJvcF0gIT09ICcnKSB7XHJcbiAgICAgIHJlc1twcm9wXSA9IHZhbHVlc1twcm9wXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlc1twcm9wXSA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcmVzKTtcclxuICB9O1xyXG5cclxuICAvLyBkZWZhdWx0IHZhbGlkYXRpb24gbWV0aG9kXHJcbiAgdmFyIGRlZmF1bHRWYWxpZGF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH07XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBpZCA6IG9wdGlvbnMuaWQsXHJcbiAgICBkZXNjcmlwdGlvbiA6IChvcHRpb25zLmRlc2NyaXB0aW9uIHx8ICcnKSxcclxuICAgIGdldCA6IChvcHRpb25zLmdldCB8fCBkZWZhdWx0R2V0KSxcclxuICAgIHNldCA6IChvcHRpb25zLnNldCB8fCBkZWZhdWx0U2V0KSxcclxuICAgIHZhbGlkYXRlIDogKG9wdGlvbnMudmFsaWRhdGUgfHwgZGVmYXVsdFZhbGlkYXRlKSxcclxuICAgIGh0bWw6ICcnXHJcbiAgfTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIEVudHJ5RmFjdG9yeSgpIHtcclxuXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYW4gdGV4dCBpbnB1dCBlbnRyeSBvYmplY3QgZm9yIGEgcHJvcGVydHkgcGFuZWwuXHJcbiAqIG9wdGlvbnMgYXJlOlxyXG4gKiAtIGlkOiBpZCBvZiB0aGUgZW50cnkgLSBTdHJpbmdcclxuICpcclxuICogLSBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gb2YgdGhlIHByb3BlcnR5IC0gU3RyaW5nXHJcbiAqXHJcbiAqIC0gbGFiZWw6IGxhYmVsIGZvciB0aGUgaW5wdXQgZmllbGQgLSBTdHJpbmdcclxuICpcclxuICogLSBzZXQ6IHNldHRlciBtZXRob2QgLSBGdW5jdGlvblxyXG4gKlxyXG4gKiAtIGdldDogZ2V0dGVyIG1ldGhvZCAtIEZ1bmN0aW9uXHJcbiAqXHJcbiAqIC0gdmFsaWRhdGU6IHZhbGlkYXRpb24gbWVodG9kIC0gRnVuY3Rpb25cclxuICpcclxuICogLSBtb2RlbFByb3BlcnR5OiBuYW1lIG9mIHRoZSBtb2RlbCBwcm9wZXJ0eSAtIFN0cmluZ1xyXG4gKlxyXG4gKiAtIGJ1dHRvbkFjdGlvbjogT2JqZWN0IHdoaWNoIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczogLSBPYmplY3RcclxuICogLS0tLSBuYW1lOiBuYW1lIG9mIHRoZSBbZGF0YS1hY3Rpb25dIGNhbGxiYWNrIC0gU3RyaW5nXHJcbiAqIC0tLS0gbWV0aG9kOiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgW2RhdGEtYWN0aW9uXSAtIEZ1bmN0aW9uXHJcbiAqXHJcbiAqIC0gYnV0dG9uU2hvdzogT2JqZWN0IHdoaWNoIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczogLSBPYmplY3RcclxuICogLS0tLSBuYW1lOiBuYW1lIG9mIHRoZSBbZGF0YS1zaG93XSBjYWxsYmFjayAtIFN0cmluZ1xyXG4gKiAtLS0tIG1ldGhvZDogY2FsbGJhY2sgZnVuY3Rpb24gZm9yIFtkYXRhLXNob3ddIC0gRnVuY3Rpb25cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnNcclxuICogQHJldHVybnMgdGhlIHByb3BlcnR5UGFuZWwgZW50cnkgcmVzb3VyY2Ugb2JqZWN0XHJcbiAqL1xyXG5FbnRyeUZhY3RvcnkudGV4dEZpZWxkID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG4gIHJldHVybiB0ZXh0SW5wdXRGaWVsZChvcHRpb25zLCBzZXREZWZhdWx0UGFyYW1ldGVycyhvcHRpb25zKSk7XHJcbn07XHJcblxyXG5FbnRyeUZhY3RvcnkudmFsaWRhdGlvbkF3YXJlVGV4dEZpZWxkID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG4gIHJldHVybiB2YWxpZGF0aW9uQXdhcmVUZXh0SW5wdXRGaWVsZChvcHRpb25zLCBzZXREZWZhdWx0UGFyYW1ldGVycyhvcHRpb25zKSk7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgY2hlY2tib3ggaW5wdXQgZW50cnkgb2JqZWN0IGZvciBhIHByb3BlcnR5IHBhbmVsLlxyXG4gKiBvcHRpb25zIGFyZTpcclxuICogLSBpZDogaWQgb2YgdGhlIGVudHJ5IC0gU3RyaW5nXHJcbiAqXHJcbiAqIC0gZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9wZXJ0eSAtIFN0cmluZ1xyXG4gKlxyXG4gKiAtIGxhYmVsOiBsYWJlbCBmb3IgdGhlIGlucHV0IGZpZWxkIC0gU3RyaW5nXHJcbiAqXHJcbiAqIC0gc2V0OiBzZXR0ZXIgbWV0aG9kIC0gRnVuY3Rpb25cclxuICpcclxuICogLSBnZXQ6IGdldHRlciBtZXRob2QgLSBGdW5jdGlvblxyXG4gKlxyXG4gKiAtIHZhbGlkYXRlOiB2YWxpZGF0aW9uIG1ldGhvZCAtIEZ1bmN0aW9uXHJcbiAqXHJcbiAqIC0gbW9kZWxQcm9wZXJ0eTogbmFtZSBvZiB0aGUgbW9kZWwgcHJvcGVydHkgLSBTdHJpbmdcclxuICpcclxuICogQHBhcmFtIG9wdGlvbnNcclxuICogQHJldHVybnMgdGhlIHByb3BlcnR5UGFuZWwgZW50cnkgcmVzb3VyY2Ugb2JqZWN0XHJcbiAqL1xyXG5FbnRyeUZhY3RvcnkuY2hlY2tib3ggPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgcmV0dXJuIGNoZWNrYm94RmllbGQob3B0aW9ucywgc2V0RGVmYXVsdFBhcmFtZXRlcnMob3B0aW9ucykpO1xyXG59O1xyXG5cclxuRW50cnlGYWN0b3J5LnRleHRCb3ggPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgcmV0dXJuIHRleHRCb3hGaWVsZChvcHRpb25zLCBzZXREZWZhdWx0UGFyYW1ldGVycyhvcHRpb25zKSk7XHJcbn07XHJcblxyXG5FbnRyeUZhY3Rvcnkuc2VsZWN0Qm94ID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG4gIHJldHVybiBzZWxlY3RCb3hGaWVsZChvcHRpb25zLCBzZXREZWZhdWx0UGFyYW1ldGVycyhvcHRpb25zKSk7XHJcbn07XHJcblxyXG5FbnRyeUZhY3RvcnkuY29tYm9Cb3ggPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgcmV0dXJuIGNvbWJvQm94RmllbGQob3B0aW9ucyk7XHJcbn07XHJcblxyXG5FbnRyeUZhY3RvcnkudGFibGUgPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgcmV0dXJuIHRhYmxlRmllbGQob3B0aW9ucyk7XHJcbn07XHJcblxyXG5FbnRyeUZhY3RvcnkubGFiZWwgPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgcmV0dXJuIGxhYmVsRW50cnkob3B0aW9ucyk7XHJcbn07XHJcblxyXG5FbnRyeUZhY3RvcnkubGluayA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICByZXR1cm4gbGluayhvcHRpb25zKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRW50cnlGYWN0b3J5O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZXNjYXBlSFRNTCA9IHJlcXVpcmUoJy4uL1V0aWxzJykuZXNjYXBlSFRNTDtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBsaW5raWZpZWQgYW5kIEhUTUwgZXNjYXBlZCBlbnRyeSBmaWVsZCBkZXNjcmlwdGlvbi5cclxuICpcclxuICogQXMgYSBzcGVjaWFsIGZlYXR1cmUsIHRoaXMgZGVzY3JpcHRpb24gbWF5IGNvbnRhaW4gYm90aCBtYXJrZG93blxyXG4gKiBhbmQgcGxhaW4gPGEgaHJlZj4gbGlua3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBkZXNjcmlwdGlvblxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbnRyeUZpZWxkRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIHtcclxuXHJcbiAgLy8gd2UgdG9rZW5pemUgdGhlIGRlc2NyaXB0aW9uIHRvIGV4dHJhY3QgdGV4dCwgSFRNTCBhbmQgbWFya2Rvd24gbGlua3NcclxuICAvLyB0ZXh0IGFuZCBsaW5rcyBhcmUgaGFuZGxlZCBzZXBlcmF0ZWx5XHJcblxyXG4gIHZhciBlc2NhcGVkID0gW107XHJcblxyXG4gIC8vIG1hdGNoIG1hcmtkb3duIFt7VEVYVH1dKHtVUkx9KSBhbmQgSFRNTCBsaW5rcyA8YSBocmVmPVwie1VSTH1cIj57VEVYVH08L2E+XHJcbiAgdmFyIHBhdHRlcm4gPSAvKD86XFxbKFteXFxdXSspXFxdXFwoKGh0dHBzPzpcXC9cXC9bXlwiPD5cXF1dKylcXCkpfCg/OjxhIGhyZWY9XCIoaHR0cHM/OlxcL1xcL1teXCI8Pl0rKVwiPihbXjxdKik8XFwvYT4pL2dpO1xyXG5cclxuICB2YXIgaW5kZXggPSAwO1xyXG4gIHZhciBtYXRjaDtcclxuICB2YXIgbGluaywgdGV4dDtcclxuXHJcbiAgd2hpbGUgKChtYXRjaCA9IHBhdHRlcm4uZXhlYyhkZXNjcmlwdGlvbikpKSB7XHJcblxyXG4gICAgLy8gZXNjYXBlICsgaW5zZXJ0IHRleHQgYmVmb3JlIG1hdGNoXHJcbiAgICBpZiAobWF0Y2guaW5kZXggPiBpbmRleCkge1xyXG4gICAgICBlc2NhcGVkLnB1c2goZXNjYXBlSFRNTChkZXNjcmlwdGlvbi5zdWJzdHJpbmcoaW5kZXgsIG1hdGNoLmluZGV4KSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGxpbmsgPSBtYXRjaFsyXSB8fCBtYXRjaFszXTtcclxuICAgIHRleHQgPSBtYXRjaFsxXSB8fCBtYXRjaFs0XTtcclxuXHJcbiAgICAvLyBpbnNlcnQgc2FmZSBsaW5rXHJcbiAgICBlc2NhcGVkLnB1c2goJzxhIGhyZWY9XCInICsgbGluayArICdcIiB0YXJnZXQ9XCJfYmxhbmtcIj4nICsgZXNjYXBlSFRNTCh0ZXh0KSArICc8L2E+Jyk7XHJcblxyXG4gICAgaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIC8vIGVzY2FwZSBhbmQgaW5zZXJ0IHRleHQgYWZ0ZXIgbGFzdCBtYXRjaFxyXG4gIGlmIChpbmRleCA8IGRlc2NyaXB0aW9uLmxlbmd0aCkge1xyXG4gICAgZXNjYXBlZC5wdXNoKGVzY2FwZUhUTUwoZGVzY3JpcHRpb24uc3Vic3RyaW5nKGluZGV4KSkpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLWRlc2NyaXB0aW9uXCI+JyArIGVzY2FwZWQuam9pbignJykgKyAnPC9kaXY+JztcclxufTsiLCIndXNlIHN0cmljdCc7XHJcblxyXG4vKipcclxuICogVGhlIGxhYmVsIGZhY3RvcnkgcHJvdmlkZXMgYSBsYWJlbCBlbnRyeS4gRm9yIHRoZSBsYWJlbCB0ZXh0XHJcbiAqIGl0IGV4cGVjdHMgZWl0aGVyIGEgc3RyaW5nIHByb3ZpZGVkIGJ5IHRoZSBvcHRpb25zLmxhYmVsVGV4dFxyXG4gKiBwYXJhbWV0ZXIgb3IgaXQgY291bGQgYmUgZ2VuZXJhdGVkIHByb2dyYW1tYXRpY2FsbHkgdXNpbmcgYVxyXG4gKiBmdW5jdGlvbiBwYXNzZWQgYXMgdGhlIG9wdGlvbnMuZ2V0IHBhcmFtZXRlci5cclxuICpcclxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5pZFxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IFtvcHRpb25zLmxhYmVsVGV4dF1cclxuICogQHBhcmFtICB7RnVuY3Rpb259IFtvcHRpb25zLmdldF1cclxuICogQHBhcmFtICB7RnVuY3Rpb259IFtvcHRpb25zLnNob3dMYWJlbF1cclxuICogQHBhcmFtICB7Qm9vbGVhbn0gW29wdGlvbnMuZGl2aWRlcl0gYWRkcyBhIGRpdmlkZXIgYXQgdGhlIHRvcCBvZiB0aGUgbGFiZWwgaWYgdHJ1ZTsgZGVmYXVsdDogZmFsc2VcclxuICovXHJcbnZhciBsYWJlbCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICByZXR1cm4ge1xyXG4gICAgaWQ6IG9wdGlvbnMuaWQsXHJcbiAgICBodG1sOiAnPGxhYmVsIGRhdGEtdmFsdWU9XCJsYWJlbFwiICcgK1xyXG4gICAgICAgICAgICAnZGF0YS1zaG93PVwic2hvd0xhYmVsXCIgJyArXHJcbiAgICAgICAgICAgICdjbGFzcz1cImVudHJ5LWxhYmVsJyArIChvcHRpb25zLmRpdmlkZXIgPyAnIGRpdmlkZXInIDogJycpICsgJ1wiPicgK1xyXG4gICAgICAgICAgJzwvbGFiZWw+JyxcclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZ2V0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZ2V0KGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB7IGxhYmVsOiBvcHRpb25zLmxhYmVsVGV4dCB9O1xyXG4gICAgfSxcclxuICAgIHNob3dMYWJlbDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2hvd0xhYmVsID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2hvd0xhYmVsKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH07XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGxhYmVsO1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZXNjYXBlSFRNTCA9IHJlcXVpcmUoJy4uL1V0aWxzJykuZXNjYXBlSFRNTDtcclxuXHJcbnZhciBlbnRyeUZpZWxkRGVzY3JpcHRpb24gPSByZXF1aXJlKCcuL0VudHJ5RmllbGREZXNjcmlwdGlvbicpO1xyXG5cclxudmFyIGJpbmQgPSByZXF1aXJlKCdsb2Rhc2gvYmluZCcpO1xyXG5cclxuLyoqXHJcbiAqIEFuIGVudHJ5IHRoYXQgcmVuZGVycyBhIGNsaWNrYWJsZSBsaW5rLlxyXG4gKlxyXG4gKiBBIHBhc3NlZCB7QGxpbmsgb3B0aW9ucyNoYW5kbGVDbGlja30gaGFuZGxlciBpcyByZXNwb25zaWJsZVxyXG4gKiB0byBwcm9jZXNzIHRoZSBjbGljay5cclxuICpcclxuICogVGhlIGxpbmsgbWF5IGJlIGNvbmRpdGlvbmFsbHkgc2hvd24gb3IgaGlkZGVuLiBUaGlzIGNhbiBiZVxyXG4gKiBjb250cm9sbGVkIHZpYSB0aGUge0BsaW5rIG9wdGlvbnMuc2hvd0xpbmt9LlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xyXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy5pZFxyXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMubGFiZWxdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMuaGFuZGxlQ2xpY2tcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuc2hvd0xpbmtdIHJldHVybmluZyBmYWxzZSB0byBoaWRlIGxpbmtcclxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmRlc2NyaXB0aW9uXVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKlxyXG4gKiB2YXIgbGlua0VudHJ5ID0gbGluayh7XHJcbiAqICAgaWQ6ICdmb28nLFxyXG4gKiAgIGRlc2NyaXB0aW9uOiAnU29tZSBEZXNjcmlwdGlvbicsXHJcbiAqICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGV2ZW50KSB7IC4uLiB9LFxyXG4gKiAgIHNob3dMaW5rOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7IC4uLiB9XHJcbiAqIH0pO1xyXG4gKlxyXG4gKiBAcmV0dXJuIHtFbnRyeX0gdGhlIG5ld2x5IGNyZWF0ZWQgZW50cnlcclxuICovXHJcbmZ1bmN0aW9uIGxpbmsob3B0aW9ucykge1xyXG5cclxuICB2YXIgaWQgPSBvcHRpb25zLmlkLFxyXG4gICAgICBsYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwgaWQsXHJcbiAgICAgIHNob3dMaW5rID0gb3B0aW9ucy5zaG93TGluayxcclxuICAgICAgaGFuZGxlQ2xpY2sgPSBvcHRpb25zLmhhbmRsZUNsaWNrLFxyXG4gICAgICBkZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRpb247XHJcblxyXG4gIGlmIChzaG93TGluayAmJiB0eXBlb2Ygc2hvd0xpbmsgIT09ICdmdW5jdGlvbicpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5zaG93TGluayBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2YgaGFuZGxlQ2xpY2sgIT09ICdmdW5jdGlvbicpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5oYW5kbGVDbGljayBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICB9XHJcblxyXG4gIHZhciByZXNvdXJjZSA9IHtcclxuICAgIGlkOiBpZFxyXG4gIH07XHJcblxyXG4gIHJlc291cmNlLmh0bWwgPVxyXG4gICAgJzxhIGRhdGEtYWN0aW9uPVwiaGFuZGxlQ2xpY2tcIiAnICtcclxuICAgIChzaG93TGluayA/ICdkYXRhLXNob3c9XCJzaG93TGlua1wiICcgOiAnJykgK1xyXG4gICAgJ2NsYXNzPVwiYnBwLWVudHJ5LWxpbmsnICsgKG9wdGlvbnMuY3NzQ2xhc3NlcyA/ICcgJyArIGVzY2FwZUhUTUwob3B0aW9ucy5jc3NDbGFzc2VzKSA6ICcnKSArXHJcbiAgICAnXCI+JyArIGVzY2FwZUhUTUwobGFiZWwpICsgJzwvYT4nO1xyXG5cclxuICAvLyBhZGQgZGVzY3JpcHRpb24gYmVsb3cgbGluayBlbnRyeSBmaWVsZFxyXG4gIGlmIChkZXNjcmlwdGlvbikge1xyXG4gICAgcmVzb3VyY2UuaHRtbCArPSBlbnRyeUZpZWxkRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgcmVzb3VyY2UuaGFuZGxlQ2xpY2sgPSBiaW5kKGhhbmRsZUNsaWNrLCByZXNvdXJjZSk7XHJcblxyXG4gIGlmICh0eXBlb2Ygc2hvd0xpbmsgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIHJlc291cmNlLnNob3dMaW5rID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiBzaG93TGluay5hcHBseShyZXNvdXJjZSwgYXJndW1lbnRzKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmVzb3VyY2U7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gbGluaztcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVzY2FwZUhUTUwgPSByZXF1aXJlKCcuLi9VdGlscycpLmVzY2FwZUhUTUw7XHJcblxyXG52YXIgZG9taWZ5ID0gcmVxdWlyZSgnbWluLWRvbScpLmRvbWlmeTtcclxuXHJcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKTtcclxuXHJcbnZhciBlbnRyeUZpZWxkRGVzY3JpcHRpb24gPSByZXF1aXJlKCcuL0VudHJ5RmllbGREZXNjcmlwdGlvbicpO1xyXG5cclxuXHJcbnZhciBpc0xpc3QgPSBmdW5jdGlvbihsaXN0KSB7XHJcbiAgcmV0dXJuICEoIWxpc3QgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGxpc3QpICE9PSAnW29iamVjdCBBcnJheV0nKTtcclxufTtcclxuXHJcbnZhciBhZGRFbXB0eVBhcmFtZXRlciA9IGZ1bmN0aW9uKGxpc3QpIHtcclxuICByZXR1cm4gbGlzdC5jb25jYXQoWyB7IG5hbWU6ICcnLCB2YWx1ZTogJycgfSBdKTtcclxufTtcclxuXHJcbnZhciBjcmVhdGVPcHRpb24gPSBmdW5jdGlvbihvcHRpb24pIHtcclxuICByZXR1cm4gJzxvcHRpb24gdmFsdWU9XCInICsgb3B0aW9uLnZhbHVlICsgJ1wiPicgKyBvcHRpb24ubmFtZSArICc8L29wdGlvbj4nO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMuaWRcclxuICogQHBhcmFtICB7c3RyaW5nfSBbb3B0aW9ucy5sYWJlbF1cclxuICogQHBhcmFtICB7QXJyYXk8T2JqZWN0Pn0gb3B0aW9ucy5zZWxlY3RPcHRpb25zXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5tb2RlbFByb3BlcnR5XHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IG9wdGlvbnMuZW1wdHlQYXJhbWV0ZXJcclxuICogQHBhcmFtICB7ZnVuY3Rpb259IG9wdGlvbnMuZGlzYWJsZWRcclxuICogQHBhcmFtICB7ZnVuY3Rpb259IG9wdGlvbnMuaGlkZGVuXHJcbiAqIEBwYXJhbSAge09iamVjdH0gZGVmYXVsdFBhcmFtZXRlcnNcclxuICpcclxuICogQHJldHVybiB7T2JqZWN0fVxyXG4gKi9cclxudmFyIHNlbGVjdGJveCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGRlZmF1bHRQYXJhbWV0ZXJzKSB7XHJcbiAgdmFyIHJlc291cmNlID0gZGVmYXVsdFBhcmFtZXRlcnMsXHJcbiAgICAgIGxhYmVsID0gb3B0aW9ucy5sYWJlbCB8fCByZXNvdXJjZS5pZCxcclxuICAgICAgc2VsZWN0T3B0aW9ucyA9IG9wdGlvbnMuc2VsZWN0T3B0aW9ucyB8fCBbIHsgbmFtZTogJycsIHZhbHVlOiAnJyB9IF0sXHJcbiAgICAgIG1vZGVsUHJvcGVydHkgPSBvcHRpb25zLm1vZGVsUHJvcGVydHksXHJcbiAgICAgIGVtcHR5UGFyYW1ldGVyID0gb3B0aW9ucy5lbXB0eVBhcmFtZXRlcixcclxuICAgICAgY2FuQmVEaXNhYmxlZCA9ICEhb3B0aW9ucy5kaXNhYmxlZCAmJiB0eXBlb2Ygb3B0aW9ucy5kaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJyxcclxuICAgICAgY2FuQmVIaWRkZW4gPSAhIW9wdGlvbnMuaGlkZGVuICYmIHR5cGVvZiBvcHRpb25zLmhpZGRlbiA9PT0gJ2Z1bmN0aW9uJyxcclxuICAgICAgZGVzY3JpcHRpb24gPSBvcHRpb25zLmRlc2NyaXB0aW9uO1xyXG5cclxuXHJcbiAgaWYgKGVtcHR5UGFyYW1ldGVyKSB7XHJcbiAgICBzZWxlY3RPcHRpb25zID0gYWRkRW1wdHlQYXJhbWV0ZXIoc2VsZWN0T3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcmVzb3VyY2UuaHRtbCA9XHJcbiAgICAnPGxhYmVsIGZvcj1cImFjdGl2aXRpLScgKyBlc2NhcGVIVE1MKHJlc291cmNlLmlkKSArICdcIicgK1xyXG4gICAgKGNhbkJlRGlzYWJsZWQgPyAnZGF0YS1kaXNhYmxlPVwiaXNEaXNhYmxlZFwiICcgOiAnJykgK1xyXG4gICAgKGNhbkJlSGlkZGVuID8gJ2RhdGEtc2hvdz1cImlzSGlkZGVuXCIgJyA6ICcnKSArXHJcbiAgICAnPicgKyBlc2NhcGVIVE1MKGxhYmVsKSArICc8L2xhYmVsPicgK1xyXG4gICAgJzxzZWxlY3QgaWQ9XCJhY3Rpdml0aS0nICsgZXNjYXBlSFRNTChyZXNvdXJjZS5pZCkgKyAnLXNlbGVjdFwiIG5hbWU9XCInICtcclxuICAgIGVzY2FwZUhUTUwobW9kZWxQcm9wZXJ0eSkgKyAnXCInICtcclxuICAgIChjYW5CZURpc2FibGVkID8gJ2RhdGEtZGlzYWJsZT1cImlzRGlzYWJsZWRcIiAnIDogJycpICtcclxuICAgIChjYW5CZUhpZGRlbiA/ICdkYXRhLXNob3c9XCJpc0hpZGRlblwiICcgOiAnJykgK1xyXG4gICAgJyBkYXRhLXZhbHVlPic7XHJcblxyXG4gIGlmIChpc0xpc3Qoc2VsZWN0T3B0aW9ucykpIHtcclxuICAgIGZvckVhY2goc2VsZWN0T3B0aW9ucywgZnVuY3Rpb24ob3B0aW9uKSB7XHJcbiAgICAgIHJlc291cmNlLmh0bWwgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgZXNjYXBlSFRNTChvcHRpb24udmFsdWUpICsgJ1wiPicgK1xyXG4gICAgICAob3B0aW9uLm5hbWUgPyBlc2NhcGVIVE1MKG9wdGlvbi5uYW1lKSA6ICcnKSArICc8L29wdGlvbj4nO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXNvdXJjZS5odG1sICs9ICc8L3NlbGVjdD4nO1xyXG5cclxuICAvLyBhZGQgZGVzY3JpcHRpb24gYmVsb3cgc2VsZWN0IGJveCBlbnRyeSBmaWVsZFxyXG4gIGlmIChkZXNjcmlwdGlvbiAmJiB0eXBlb2Ygb3B0aW9ucy5zaG93Q3VzdG9tSW5wdXQgIT09ICdmdW5jdGlvbicpIHtcclxuICAgIHJlc291cmNlLmh0bWwgKz0gZW50cnlGaWVsZERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbGwgdGhlIHNlbGVjdCBib3ggb3B0aW9ucyBkeW5hbWljYWxseS5cclxuICAgKlxyXG4gICAqIENhbGxzIHRoZSBkZWZpbmVkIGZ1bmN0aW9uICNzZWxlY3RPcHRpb25zIGluIHRoZSBlbnRyeSB0byBnZXQgdGhlXHJcbiAgICogdmFsdWVzIGZvciB0aGUgb3B0aW9ucyBhbmQgc2V0IHRoZSB2YWx1ZSB0byB0aGUgaW5wdXROb2RlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVudHJ5Tm9kZVxyXG4gICAqIEBwYXJhbSB7RW50cnlEZXNjcmlwdG9yfSBpbnB1dE5vZGVcclxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXROYW1lXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld1ZhbHVlXHJcbiAgICovXHJcbiAgcmVzb3VyY2Uuc2V0Q29udHJvbFZhbHVlID0gZnVuY3Rpb24oZWxlbWVudCwgZW50cnlOb2RlLCBpbnB1dE5vZGUsIGlucHV0TmFtZSwgbmV3VmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2Ygc2VsZWN0T3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cclxuICAgICAgdmFyIG9wdGlvbnMgPSBzZWxlY3RPcHRpb25zKGVsZW1lbnQsIGlucHV0Tm9kZSk7XHJcblxyXG4gICAgICBpZiAob3B0aW9ucykge1xyXG5cclxuICAgICAgICAvLyByZW1vdmUgZXhpc3Rpbmcgb3B0aW9uc1xyXG4gICAgICAgIHdoaWxlIChpbnB1dE5vZGUuZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgaW5wdXROb2RlLnJlbW92ZUNoaWxkKGlucHV0Tm9kZS5maXJzdENoaWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFkZCBvcHRpb25zXHJcbiAgICAgICAgZm9yRWFjaChvcHRpb25zLCBmdW5jdGlvbihvcHRpb24pIHtcclxuICAgICAgICAgIHZhciB0ZW1wbGF0ZSA9IGRvbWlmeShjcmVhdGVPcHRpb24ob3B0aW9uKSk7XHJcblxyXG4gICAgICAgICAgaW5wdXROb2RlLmFwcGVuZENoaWxkKHRlbXBsYXRlKTtcclxuICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0IHNlbGVjdCB2YWx1ZVxyXG4gICAgaWYgKG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaW5wdXROb2RlLnZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICB9XHJcblxyXG4gIH07XHJcblxyXG4gIGlmIChjYW5CZURpc2FibGVkKSB7XHJcbiAgICByZXNvdXJjZS5pc0Rpc2FibGVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiBvcHRpb25zLmRpc2FibGVkLmFwcGx5KHJlc291cmNlLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGlmIChjYW5CZUhpZGRlbikge1xyXG4gICAgcmVzb3VyY2UuaXNIaWRkZW4gPSBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuICFvcHRpb25zLmhpZGRlbi5hcHBseShyZXNvdXJjZSwgYXJndW1lbnRzKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZXNvdXJjZS5jc3NDbGFzc2VzID0gWydicHAtZHJvcGRvd24nXTtcclxuXHJcbiAgcmV0dXJuIHJlc291cmNlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBzZWxlY3Rib3g7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlc2NhcGVIVE1MID0gcmVxdWlyZSgnLi4vVXRpbHMnKS5lc2NhcGVIVE1MO1xyXG5cclxudmFyIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbnZhciBkb21RdWVyeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5xdWVyeSxcclxuICAgIGRvbUF0dHIgPSByZXF1aXJlKCdtaW4tZG9tJykuYXR0cixcclxuICAgIGRvbUNsb3Nlc3QgPSByZXF1aXJlKCdtaW4tZG9tJykuY2xvc2VzdDtcclxuXHJcbnZhciBmaWx0ZXIgPSByZXF1aXJlKCdsb2Rhc2gvZmlsdGVyJyksXHJcbiAgICBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKSxcclxuICAgIGtleXMgPSByZXF1aXJlKCdsb2Rhc2gva2V5cycpO1xyXG5cclxudmFyIGRvbWlmeSA9IHJlcXVpcmUoJ21pbi1kb20nKS5kb21pZnk7XHJcblxyXG52YXIgZW50cnlGaWVsZERlc2NyaXB0aW9uID0gcmVxdWlyZSgnLi9FbnRyeUZpZWxkRGVzY3JpcHRpb24nKTtcclxuXHJcbnZhciB1cGRhdGVTZWxlY3Rpb24gPSByZXF1aXJlKCdzZWxlY3Rpb24tdXBkYXRlJyk7XHJcblxyXG52YXIgVEFCTEVfUk9XX0RJVl9TTklQUEVUID0gJzxkaXYgY2xhc3M9XCJicHAtZmllbGQtd3JhcHBlciBicHAtdGFibGUtcm93XCI+JztcclxudmFyIERFTEVURV9ST1dfQlVUVE9OX1NOSVBQRVQgPSAnPGJ1dHRvbiBjbGFzcz1cImNsZWFyXCIgZGF0YS1hY3Rpb249XCJkZWxldGVFbGVtZW50XCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4+WDwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JztcclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUlucHV0Um93VGVtcGxhdGUocHJvcGVydGllcywgY2FuUmVtb3ZlKSB7XHJcbiAgdmFyIHRlbXBsYXRlID0gVEFCTEVfUk9XX0RJVl9TTklQUEVUO1xyXG4gIHRlbXBsYXRlICs9IGNyZWF0ZUlucHV0VGVtcGxhdGUocHJvcGVydGllcywgY2FuUmVtb3ZlKTtcclxuICB0ZW1wbGF0ZSArPSBjYW5SZW1vdmUgPyBERUxFVEVfUk9XX0JVVFRPTl9TTklQUEVUIDogJyc7XHJcbiAgdGVtcGxhdGUgKz0gJzwvZGl2Pic7XHJcblxyXG4gIHJldHVybiB0ZW1wbGF0ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlSW5wdXRUZW1wbGF0ZShwcm9wZXJ0aWVzLCBjYW5SZW1vdmUpIHtcclxuICB2YXIgY29sdW1ucyA9IHByb3BlcnRpZXMubGVuZ3RoO1xyXG4gIHZhciB0ZW1wbGF0ZSA9ICcnO1xyXG4gIGZvckVhY2gocHJvcGVydGllcywgZnVuY3Rpb24ocHJvcCkge1xyXG4gICAgdGVtcGxhdGUgKz0gJzxpbnB1dCBjbGFzcz1cImJwcC10YWJsZS1yb3ctY29sdW1ucy0nICsgY29sdW1ucyArICcgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FuUmVtb3ZlID8gJ2JwcC10YWJsZS1yb3ctcmVtb3ZhYmxlJyA6ICcnKSArICdcIiAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAnaWQ9XCJhY3Rpdml0aS10YWJsZS1yb3ctY2VsbC1pbnB1dC12YWx1ZVwiICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICd0eXBlPVwidGV4dFwiICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICduYW1lPVwiJyArIGVzY2FwZUhUTUwocHJvcCkgKyAnXCIgLz4nO1xyXG4gIH0pO1xyXG4gIHJldHVybiB0ZW1wbGF0ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlTGFiZWxSb3dUZW1wbGF0ZShsYWJlbHMpIHtcclxuICB2YXIgdGVtcGxhdGUgPSBUQUJMRV9ST1dfRElWX1NOSVBQRVQ7XHJcbiAgdGVtcGxhdGUgKz0gY3JlYXRlTGFiZWxUZW1wbGF0ZShsYWJlbHMpO1xyXG4gIHRlbXBsYXRlICs9ICc8L2Rpdj4nO1xyXG5cclxuICByZXR1cm4gdGVtcGxhdGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUxhYmVsVGVtcGxhdGUobGFiZWxzKSB7XHJcbiAgdmFyIGNvbHVtbnMgPSBsYWJlbHMubGVuZ3RoO1xyXG4gIHZhciB0ZW1wbGF0ZSA9ICcnO1xyXG4gIGZvckVhY2gobGFiZWxzLCBmdW5jdGlvbihsYWJlbCkge1xyXG4gICAgdGVtcGxhdGUgKz0gJzxsYWJlbCBjbGFzcz1cImJwcC10YWJsZS1yb3ctY29sdW1ucy0nICsgY29sdW1ucyArICdcIj4nICsgZXNjYXBlSFRNTChsYWJlbCkgKyAnPC9sYWJlbD4nO1xyXG4gIH0pO1xyXG4gIHJldHVybiB0ZW1wbGF0ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGljayhlbGVtZW50cywgcHJvcGVydGllcykge1xyXG4gIHJldHVybiAoZWxlbWVudHMgfHwgW10pLm1hcChmdW5jdGlvbihlbGVtKSB7XHJcbiAgICB2YXIgbmV3RWxlbWVudCA9IHt9O1xyXG4gICAgZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihwcm9wKSB7XHJcbiAgICAgIG5ld0VsZW1lbnRbcHJvcF0gPSBlbGVtW3Byb3BdIHx8ICcnO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbmV3RWxlbWVudDtcclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZGlmZihlbGVtZW50LCBub2RlLCB2YWx1ZXMsIG9sZFZhbHVlcywgZWRpdGFibGUpIHtcclxuICByZXR1cm4gZmlsdGVyKHZhbHVlcywgZnVuY3Rpb24odmFsdWUsIGlkeCkge1xyXG4gICAgcmV0dXJuICF2YWx1ZUVxdWFsKGVsZW1lbnQsIG5vZGUsIHZhbHVlLCBvbGRWYWx1ZXNbaWR4XSwgZWRpdGFibGUsIGlkeCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHZhbHVlRXF1YWwoZWxlbWVudCwgbm9kZSwgdmFsdWUsIG9sZFZhbHVlLCBlZGl0YWJsZSwgaWR4KSB7XHJcbiAgaWYgKHZhbHVlICYmICFvbGRWYWx1ZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICB2YXIgYWxsS2V5cyA9IGtleXModmFsdWUpLmNvbmNhdChrZXlzKG9sZFZhbHVlKSk7XHJcblxyXG4gIHJldHVybiBhbGxLZXlzLmV2ZXJ5KGZ1bmN0aW9uKGtleSkge1xyXG4gICAgdmFyIG4gPSB2YWx1ZVtrZXldIHx8IHVuZGVmaW5lZDtcclxuICAgIHZhciBvID0gb2xkVmFsdWVba2V5XSB8fCB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gIWVkaXRhYmxlKGVsZW1lbnQsIG5vZGUsIGtleSwgaWR4KSB8fCBuID09PSBvO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRFbnRyeU5vZGUobm9kZSkge1xyXG4gIHJldHVybiBkb21DbG9zZXN0KG5vZGUsICdbZGF0YS1lbnRyeV0nLCB0cnVlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q29udGFpbmVyKG5vZGUpIHtcclxuICByZXR1cm4gZG9tUXVlcnkoJ2RpdltkYXRhLWxpc3QtZW50cnktY29udGFpbmVyXScsIG5vZGUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24obm9kZSkge1xyXG4gIHJldHVybiB7XHJcbiAgICBzdGFydDogbm9kZS5zZWxlY3Rpb25TdGFydCxcclxuICAgIGVuZDogbm9kZS5zZWxlY3Rpb25FbmRcclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRTZWxlY3Rpb24obm9kZSwgc2VsZWN0aW9uKSB7XHJcbiAgbm9kZS5zZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi5zdGFydDtcclxuICBub2RlLnNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi5lbmQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmlkXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5kZXNjcmlwdGlvblxyXG4gKiBAcGFyYW0gIHtBcnJheTxzdHJpbmc+fSBvcHRpb25zLm1vZGVsUHJvcGVydGllc1xyXG4gKiBAcGFyYW0gIHtBcnJheTxzdHJpbmc+fSBvcHRpb25zLmxhYmVsc1xyXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gb3B0aW9ucy5nZXRFbGVtZW50cyAtIHRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBsaXN0IG9mIGJ1c2luZXNzIG9iamVjdCBpdGVtc1xyXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gb3B0aW9ucy5yZW1vdmVFbGVtZW50XHJcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBvcHRpb25zLmFkZEVsZW1lbnRcclxuICogQHBhcmFtICB7RnVuY3Rpb259IG9wdGlvbnMudXBkYXRlRWxlbWVudFxyXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gb3B0aW9ucy5lZGl0YWJsZVxyXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gb3B0aW9ucy5zZXRDb250cm9sVmFsdWVcclxuICogQHBhcmFtICB7RnVuY3Rpb259IG9wdGlvbnMuc2hvd1xyXG4gKlxyXG4gKiBAcmV0dXJuIHtPYmplY3R9XHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuXHJcbiAgdmFyIGlkID0gb3B0aW9ucy5pZCxcclxuICAgICAgbW9kZWxQcm9wZXJ0aWVzID0gb3B0aW9ucy5tb2RlbFByb3BlcnRpZXMsXHJcbiAgICAgIGxhYmVscyA9IG9wdGlvbnMubGFiZWxzLFxyXG4gICAgICBkZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRpb247XHJcblxyXG4gIHZhciBsYWJlbFJvdyA9IGNyZWF0ZUxhYmVsUm93VGVtcGxhdGUobGFiZWxzKTtcclxuXHJcbiAgdmFyIGdldEVsZW1lbnRzID0gb3B0aW9ucy5nZXRFbGVtZW50cztcclxuXHJcbiAgdmFyIHJlbW92ZUVsZW1lbnQgPSBvcHRpb25zLnJlbW92ZUVsZW1lbnQsXHJcbiAgICAgIGNhblJlbW92ZSA9IHR5cGVvZiByZW1vdmVFbGVtZW50ID09PSAnZnVuY3Rpb24nO1xyXG5cclxuICB2YXIgYWRkRWxlbWVudCA9IG9wdGlvbnMuYWRkRWxlbWVudCxcclxuICAgICAgY2FuQWRkID0gdHlwZW9mIGFkZEVsZW1lbnQgPT09ICdmdW5jdGlvbicsXHJcbiAgICAgIGFkZExhYmVsID0gb3B0aW9ucy5hZGRMYWJlbCB8fCAnQWRkIFZhbHVlJztcclxuXHJcbiAgdmFyIHVwZGF0ZUVsZW1lbnQgPSBvcHRpb25zLnVwZGF0ZUVsZW1lbnQsXHJcbiAgICAgIGNhblVwZGF0ZSA9IHR5cGVvZiB1cGRhdGVFbGVtZW50ID09PSAnZnVuY3Rpb24nO1xyXG5cclxuICB2YXIgZWRpdGFibGUgPSBvcHRpb25zLmVkaXRhYmxlIHx8IGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuICAgICAgc2V0Q29udHJvbFZhbHVlID0gb3B0aW9ucy5zZXRDb250cm9sVmFsdWU7XHJcblxyXG4gIHZhciBzaG93ID0gb3B0aW9ucy5zaG93LFxyXG4gICAgICBjYW5CZVNob3duID0gdHlwZW9mIHNob3cgPT09ICdmdW5jdGlvbic7XHJcblxyXG4gIHZhciBlbGVtZW50cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgIHJldHVybiBwaWNrKGdldEVsZW1lbnRzKGVsZW1lbnQsIG5vZGUpLCBtb2RlbFByb3BlcnRpZXMpO1xyXG4gIH07XHJcblxyXG4gIHZhciBmYWN0b3J5ID0ge1xyXG4gICAgaWQ6IGlkLFxyXG4gICAgaHRtbDogKGNhbkFkZCA/XHJcbiAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLXRhYmxlLWFkZC1yb3dcIiAnICsgKGNhbkJlU2hvd24gPyAnZGF0YS1zaG93PVwic2hvd1wiJyA6ICcnKSArICc+JyArXHJcbiAgICAgICAgICAgICc8bGFiZWw+JyArIGVzY2FwZUhUTUwoYWRkTGFiZWwpICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICc8YnV0dG9uIGNsYXNzPVwiYWRkXCIgZGF0YS1hY3Rpb249XCJhZGRFbGVtZW50XCI+PHNwYW4+Kzwvc3Bhbj48L2J1dHRvbj4nICtcclxuICAgICAgICAgICc8L2Rpdj4nIDogJycpICtcclxuICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLXRhYmxlXCIgZGF0YS1zaG93PVwic2hvd1RhYmxlXCI+JyArXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLXdyYXBwZXIgYnBwLXRhYmxlLXJvd1wiPicgK1xyXG4gICAgICAgICAgICAgICBsYWJlbFJvdyArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzxkaXYgZGF0YS1saXN0LWVudHJ5LWNvbnRhaW5lcj4nICtcclxuICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgJzwvZGl2PicgK1xyXG5cclxuICAgICAgICAgIC8vIGFkZCBkZXNjcmlwdGlvbiBiZWxvdyB0YWJsZSBlbnRyeSBmaWVsZFxyXG4gICAgICAgICAgKGRlc2NyaXB0aW9uID8gZW50cnlGaWVsZERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6ICcnKSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvRWxlbWVudHMgPSBlbGVtZW50cyhlbGVtZW50LCBub2RlLCB0aGlzLl9faW52YWxpZFZhbHVlcyk7XHJcblxyXG4gICAgICB2YXIgaW52YWxpZFZhbHVlcyA9IHRoaXMuX19pbnZhbGlkVmFsdWVzO1xyXG5cclxuICAgICAgZGVsZXRlIHRoaXMuX19pbnZhbGlkVmFsdWVzO1xyXG5cclxuICAgICAgZm9yRWFjaChpbnZhbGlkVmFsdWVzLCBmdW5jdGlvbih2YWx1ZSwgaWR4KSB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBib0VsZW1lbnRzW2lkeF07XHJcblxyXG4gICAgICAgIGZvckVhY2gobW9kZWxQcm9wZXJ0aWVzLCBmdW5jdGlvbihwcm9wKSB7XHJcbiAgICAgICAgICBlbGVtZW50W3Byb3BdID0gdmFsdWVbcHJvcF07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGJvRWxlbWVudHM7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBhY3Rpb24gPSB0aGlzLl9fYWN0aW9uIHx8IHt9O1xyXG4gICAgICBkZWxldGUgdGhpcy5fX2FjdGlvbjtcclxuXHJcbiAgICAgIGlmIChhY3Rpb24uaWQgPT09ICdkZWxldGUtZWxlbWVudCcpIHtcclxuICAgICAgICByZXR1cm4gcmVtb3ZlRWxlbWVudChlbGVtZW50LCBub2RlLCBhY3Rpb24uaWR4KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChhY3Rpb24uaWQgPT09ICdhZGQtZWxlbWVudCcpIHtcclxuICAgICAgICByZXR1cm4gYWRkRWxlbWVudChlbGVtZW50LCBub2RlKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChjYW5VcGRhdGUpIHtcclxuICAgICAgICB2YXIgY29tbWFuZHMgPSBbXSxcclxuICAgICAgICAgICAgdmFsdWVzVG9WYWxpZGF0ZSA9IHZhbHVlcztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnZhbGlkYXRlICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICB2YWx1ZXNUb1ZhbGlkYXRlID0gZGlmZihlbGVtZW50LCBub2RlLCB2YWx1ZXMsIGVsZW1lbnRzKGVsZW1lbnQsIG5vZGUpLCBlZGl0YWJsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIGZvckVhY2godmFsdWVzVG9WYWxpZGF0ZSwgZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAgIHZhciB2YWxpZGF0aW9uRXJyb3IsXHJcbiAgICAgICAgICAgICAgaWR4ID0gdmFsdWVzLmluZGV4T2YodmFsdWUpO1xyXG5cclxuICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy52YWxpZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IgPSBvcHRpb25zLnZhbGlkYXRlKGVsZW1lbnQsIHZhbHVlLCBub2RlLCBpZHgpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICghdmFsaWRhdGlvbkVycm9yKSB7XHJcbiAgICAgICAgICAgIHZhciBjbWQgPSB1cGRhdGVFbGVtZW50KGVsZW1lbnQsIHZhbHVlLCBub2RlLCBpZHgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNtZCkge1xyXG4gICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goY21kKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gY2FjaGUgaW52YWxpZCB2YWx1ZSBpbiBhbiBvYmplY3QgYnkgaW5kZXggYXMga2V5XHJcbiAgICAgICAgICAgIHNlbGYuX19pbnZhbGlkVmFsdWVzID0gc2VsZi5fX2ludmFsaWRWYWx1ZXMgfHwge307XHJcbiAgICAgICAgICAgIHNlbGYuX19pbnZhbGlkVmFsdWVzW2lkeF0gPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIC8vIGV4ZWN1dGUgYSBjb21tYW5kLCB3aGljaCBkb2VzIG5vdCBkbyBhbnl0aGluZ1xyXG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHt9KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjb21tYW5kcztcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNyZWF0ZUxpc3RFbnRyeVRlbXBsYXRlOiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIHNlbGVjdEJveCkge1xyXG4gICAgICByZXR1cm4gY3JlYXRlSW5wdXRSb3dUZW1wbGF0ZShtb2RlbFByb3BlcnRpZXMsIGNhblJlbW92ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGFkZEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGV2ZW50LCBzY29wZU5vZGUpIHtcclxuICAgICAgdmFyIHRlbXBsYXRlID0gZG9taWZ5KGNyZWF0ZUlucHV0Um93VGVtcGxhdGUobW9kZWxQcm9wZXJ0aWVzLCBjYW5SZW1vdmUpKTtcclxuXHJcbiAgICAgIHZhciBjb250YWluZXIgPSBnZXRDb250YWluZXIobm9kZSk7XHJcbiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0ZW1wbGF0ZSk7XHJcblxyXG4gICAgICB0aGlzLl9fYWN0aW9uID0ge1xyXG4gICAgICAgIGlkOiAnYWRkLWVsZW1lbnQnXHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZGVsZXRlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgZXZlbnQsIHNjb3BlTm9kZSkge1xyXG4gICAgICB2YXIgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyKG5vZGUpO1xyXG4gICAgICB2YXIgcm93VG9EZWxldGUgPSBldmVudC5kZWxlZ2F0ZVRhcmdldC5wYXJlbnROb2RlO1xyXG4gICAgICB2YXIgaWR4ID0gcGFyc2VJbnQoZG9tQXR0cihyb3dUb0RlbGV0ZSwgJ2RhdGEtaW5kZXgnKSwgMTApO1xyXG5cclxuICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKHJvd1RvRGVsZXRlKTtcclxuXHJcbiAgICAgIHRoaXMuX19hY3Rpb24gPSB7XHJcbiAgICAgICAgaWQ6ICdkZWxldGUtZWxlbWVudCcsXHJcbiAgICAgICAgaWR4OiBpZHhcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBlZGl0YWJsZTogZnVuY3Rpb24oZWxlbWVudCwgcm93Tm9kZSwgaW5wdXQsIHByb3AsIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIGVudHJ5Tm9kZSA9IGRvbUNsb3Nlc3Qocm93Tm9kZSwgJ1tkYXRhLWVudHJ5XScpO1xyXG4gICAgICByZXR1cm4gZWRpdGFibGUoZWxlbWVudCwgZW50cnlOb2RlLCBwcm9wLCBpZHgpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzaG93OiBmdW5jdGlvbihlbGVtZW50LCBlbnRyeU5vZGUsIG5vZGUsIHNjb3BlTm9kZSkge1xyXG4gICAgICBlbnRyeU5vZGUgPSBnZXRFbnRyeU5vZGUoZW50cnlOb2RlKTtcclxuICAgICAgcmV0dXJuIHNob3coZWxlbWVudCwgZW50cnlOb2RlLCBub2RlLCBzY29wZU5vZGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzaG93VGFibGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGVudHJ5Tm9kZSwgbm9kZSwgc2NvcGVOb2RlKSB7XHJcbiAgICAgIGVudHJ5Tm9kZSA9IGdldEVudHJ5Tm9kZShlbnRyeU5vZGUpO1xyXG4gICAgICB2YXIgZWxlbXMgPSBlbGVtZW50cyhlbGVtZW50LCBlbnRyeU5vZGUpO1xyXG4gICAgICByZXR1cm4gZWxlbXMgJiYgZWxlbXMubGVuZ3RoICYmICghY2FuQmVTaG93biB8fCBzaG93KGVsZW1lbnQsIGVudHJ5Tm9kZSwgbm9kZSwgc2NvcGVOb2RlKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlTGlzdEl0ZW06IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlLCBub2RlLCBpZHgpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnZhbGlkYXRlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMudmFsaWRhdGUoZWxlbWVudCwgdmFsdWUsIG5vZGUsIGlkeCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfTtcclxuXHJcbiAgLy8gVXBkYXRlL3NldCB0aGUgc2VsZWN0aW9uIG9uIHRoZSBjb3JyZWN0IHBvc2l0aW9uLlxyXG4gIC8vIEl0J3MgdGhlIHNhbWUgY29kZSBsaWtlIGZvciBhbiBpbnB1dCB2YWx1ZSBpbiB0aGUgUHJvcGVydGllc1BhbmVsLmpzLlxyXG4gIGlmIChzZXRDb250cm9sVmFsdWUpIHtcclxuICAgIGZhY3Rvcnkuc2V0Q29udHJvbFZhbHVlID0gZnVuY3Rpb24oZWxlbWVudCwgcm93Tm9kZSwgaW5wdXQsIHByb3AsIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIGVudHJ5Tm9kZSA9IGdldEVudHJ5Tm9kZShyb3dOb2RlKTtcclxuXHJcbiAgICAgIHZhciBpc1JlYWRPbmx5ID0gZG9tQXR0cihpbnB1dCwgJ3JlYWRvbmx5Jyk7XHJcbiAgICAgIHZhciBvbGRWYWx1ZSA9IGlucHV0LnZhbHVlO1xyXG5cclxuICAgICAgdmFyIHNlbGVjdGlvbjtcclxuXHJcbiAgICAgIC8vIHByZXZlbnRzIGlucHV0IGZpZWxkcyBmcm9tIGhhdmluZyB0aGUgdmFsdWUgJ3VuZGVmaW5lZCdcclxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB2YWx1ZSA9ICcnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB3aGVuIHRoZSBhdHRyaWJ1dGUgJ3JlYWRvbmx5JyBleGlzdHMsIGlnbm9yZSB0aGUgY29tcGFyaXNvblxyXG4gICAgICAvLyB3aXRoICdvbGRWYWx1ZScgYW5kICd2YWx1ZSdcclxuICAgICAgaWYgKCEhaXNSZWFkT25seSAmJiBvbGRWYWx1ZSA9PT0gdmFsdWUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHVwZGF0ZSBzZWxlY3Rpb24gb24gdW5kby9yZWRvXHJcbiAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBpbnB1dCkge1xyXG4gICAgICAgIHNlbGVjdGlvbiA9IHVwZGF0ZVNlbGVjdGlvbihnZXRTZWxlY3Rpb24oaW5wdXQpLCBvbGRWYWx1ZSwgdmFsdWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZXRDb250cm9sVmFsdWUoZWxlbWVudCwgZW50cnlOb2RlLCBpbnB1dCwgcHJvcCwgdmFsdWUsIGlkeCk7XHJcblxyXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCBzZWxlY3Rpb24pO1xyXG4gICAgICB9XHJcblxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJldHVybiBmYWN0b3J5O1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVzY2FwZUhUTUwgPSByZXF1aXJlKCcuLi9VdGlscycpLmVzY2FwZUhUTUw7XHJcblxyXG52YXIgZW50cnlGaWVsZERlc2NyaXB0aW9uID0gcmVxdWlyZSgnLi9FbnRyeUZpZWxkRGVzY3JpcHRpb24nKTtcclxuXHJcblxyXG52YXIgdGV4dEJveCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGRlZmF1bHRQYXJhbWV0ZXJzKSB7XHJcblxyXG4gIHZhciByZXNvdXJjZSA9IGRlZmF1bHRQYXJhbWV0ZXJzLFxyXG4gICAgICBsYWJlbCA9IG9wdGlvbnMubGFiZWwgfHwgcmVzb3VyY2UuaWQsXHJcbiAgICAgIGNhbkJlU2hvd24gPSAhIW9wdGlvbnMuc2hvdyAmJiB0eXBlb2Ygb3B0aW9ucy5zaG93ID09PSAnZnVuY3Rpb24nLFxyXG4gICAgICBkZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRpb247XHJcblxyXG4gIHJlc291cmNlLmh0bWwgPVxyXG4gICAgJzxsYWJlbCBmb3I9XCJhY3Rpdml0aS0nICsgZXNjYXBlSFRNTChyZXNvdXJjZS5pZCkgKyAnXCIgJyArXHJcbiAgICAoY2FuQmVTaG93biA/ICdkYXRhLXNob3c9XCJpc1Nob3duXCInIDogJycpICtcclxuICAgICc+JyArIGxhYmVsICsgJzwvbGFiZWw+JyArXHJcbiAgICAnPGRpdiBjbGFzcz1cImJwcC1maWVsZC13cmFwcGVyXCIgJyArXHJcbiAgICAoY2FuQmVTaG93biA/ICdkYXRhLXNob3c9XCJpc1Nob3duXCInIDogJycpICtcclxuICAgICc+JyArXHJcbiAgICAgICc8ZGl2IGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiBpZD1cImFjdGl2aXRpLScgKyBlc2NhcGVIVE1MKHJlc291cmNlLmlkKSArICdcIiAnICtcclxuICAgICAgICAgICAgJ25hbWU9XCInICsgZXNjYXBlSFRNTChvcHRpb25zLm1vZGVsUHJvcGVydHkpICsgJ1wiIC8+JyArXHJcbiAgICAnPC9kaXY+JztcclxuXHJcbiAgLy8gYWRkIGRlc2NyaXB0aW9uIGJlbG93IHRleHQgYm94IGVudHJ5IGZpZWxkXHJcbiAgaWYgKGRlc2NyaXB0aW9uKSB7XHJcbiAgICByZXNvdXJjZS5odG1sICs9IGVudHJ5RmllbGREZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7XHJcbiAgfVxyXG5cclxuICBpZiAoY2FuQmVTaG93bikge1xyXG4gICAgcmVzb3VyY2UuaXNTaG93biA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gb3B0aW9ucy5zaG93LmFwcGx5KHJlc291cmNlLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlc291cmNlLmNzc0NsYXNzZXMgPSBbJ2JwcC10ZXh0Ym94J107XHJcblxyXG4gIHJldHVybiByZXNvdXJjZTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gdGV4dEJveDtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVzY2FwZUhUTUwgPSByZXF1aXJlKCcuLi9VdGlscycpLmVzY2FwZUhUTUw7XHJcblxyXG52YXIgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnk7XHJcblxyXG52YXIgZW50cnlGaWVsZERlc2NyaXB0aW9uID0gcmVxdWlyZSgnLi9FbnRyeUZpZWxkRGVzY3JpcHRpb24nKTtcclxuXHJcblxyXG52YXIgdGV4dEZpZWxkID0gZnVuY3Rpb24ob3B0aW9ucywgZGVmYXVsdFBhcmFtZXRlcnMpIHtcclxuXHJcbiAgLy8gRGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBidXR0b24gbmV4dCB0byB0aGUgaW5wdXQtZmllbGRcclxuICB2YXIgZGVmYXVsdEJ1dHRvbkFjdGlvbiA9IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSkge1xyXG4gICAgdmFyIGlucHV0ID0gZG9tUXVlcnkoJ2lucHV0W25hbWU9XCInICsgb3B0aW9ucy5tb2RlbFByb3BlcnR5ICsgJ1wiXScsIGlucHV0Tm9kZSk7XHJcbiAgICBpbnB1dC52YWx1ZSA9ICcnO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH07XHJcblxyXG4gIC8vIGRlZmF1bHQgbWV0aG9kIHRvIGRldGVybWluZSBpZiB0aGUgYnV0dG9uIHNob3VsZCBiZSB2aXNpYmxlXHJcbiAgdmFyIGRlZmF1bHRCdXR0b25TaG93ID0gZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlKSB7XHJcbiAgICB2YXIgaW5wdXQgPSBkb21RdWVyeSgnaW5wdXRbbmFtZT1cIicgKyBvcHRpb25zLm1vZGVsUHJvcGVydHkgKyAnXCJdJywgaW5wdXROb2RlKTtcclxuXHJcbiAgICByZXR1cm4gaW5wdXQudmFsdWUgIT09ICcnO1xyXG4gIH07XHJcblxyXG5cclxuICB2YXIgcmVzb3VyY2UgPSBkZWZhdWx0UGFyYW1ldGVycyxcclxuICAgICAgbGFiZWwgPSBvcHRpb25zLmxhYmVsIHx8IHJlc291cmNlLmlkLFxyXG4gICAgICBkYXRhVmFsdWVMYWJlbCA9IG9wdGlvbnMuZGF0YVZhbHVlTGFiZWwsXHJcbiAgICAgIGJ1dHRvbkxhYmVsID0gKG9wdGlvbnMuYnV0dG9uTGFiZWwgfHwgJ1gnKSxcclxuICAgICAgYWN0aW9uTmFtZSA9ICh0eXBlb2Ygb3B0aW9ucy5idXR0b25BY3Rpb24gIT0gJ3VuZGVmaW5lZCcpID8gb3B0aW9ucy5idXR0b25BY3Rpb24ubmFtZSA6ICdjbGVhcicsXHJcbiAgICAgIGFjdGlvbk1ldGhvZCA9ICh0eXBlb2Ygb3B0aW9ucy5idXR0b25BY3Rpb24gIT0gJ3VuZGVmaW5lZCcpID8gb3B0aW9ucy5idXR0b25BY3Rpb24ubWV0aG9kIDogZGVmYXVsdEJ1dHRvbkFjdGlvbixcclxuICAgICAgc2hvd05hbWUgPSAodHlwZW9mIG9wdGlvbnMuYnV0dG9uU2hvdyAhPSAndW5kZWZpbmVkJykgPyBvcHRpb25zLmJ1dHRvblNob3cubmFtZSA6ICdjYW5DbGVhcicsXHJcbiAgICAgIHNob3dNZXRob2QgPSAodHlwZW9mIG9wdGlvbnMuYnV0dG9uU2hvdyAhPSAndW5kZWZpbmVkJykgPyBvcHRpb25zLmJ1dHRvblNob3cubWV0aG9kIDogZGVmYXVsdEJ1dHRvblNob3csXHJcbiAgICAgIGNhbkJlRGlzYWJsZWQgPSAhIW9wdGlvbnMuZGlzYWJsZWQgJiYgdHlwZW9mIG9wdGlvbnMuZGlzYWJsZWQgPT09ICdmdW5jdGlvbicsXHJcbiAgICAgIGNhbkJlSGlkZGVuID0gISFvcHRpb25zLmhpZGRlbiAmJiB0eXBlb2Ygb3B0aW9ucy5oaWRkZW4gPT09ICdmdW5jdGlvbicsXHJcbiAgICAgIGRlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbjtcclxuXHJcbiAgcmVzb3VyY2UuaHRtbCA9XHJcbiAgICAnPGxhYmVsIGZvcj1cImFjdGl2aXRpLScgKyBlc2NhcGVIVE1MKHJlc291cmNlLmlkKSArICdcIiAnICtcclxuICAgICAgKGNhbkJlRGlzYWJsZWQgPyAnZGF0YS1kaXNhYmxlPVwiaXNEaXNhYmxlZFwiICcgOiAnJykgK1xyXG4gICAgICAoY2FuQmVIaWRkZW4gPyAnZGF0YS1zaG93PVwiaXNIaWRkZW5cIiAnIDogJycpICtcclxuICAgICAgKGRhdGFWYWx1ZUxhYmVsID8gJ2RhdGEtdmFsdWU9XCInICsgZXNjYXBlSFRNTChkYXRhVmFsdWVMYWJlbCkgKyAnXCInIDogJycpICsgJz4nKyBlc2NhcGVIVE1MKGxhYmVsKSArJzwvbGFiZWw+JyArXHJcbiAgICAnPGRpdiBjbGFzcz1cImJwcC1maWVsZC13cmFwcGVyXCIgJyArXHJcbiAgICAgIChjYW5CZURpc2FibGVkID8gJ2RhdGEtZGlzYWJsZT1cImlzRGlzYWJsZWRcIicgOiAnJykgK1xyXG4gICAgICAoY2FuQmVIaWRkZW4gPyAnZGF0YS1zaG93PVwiaXNIaWRkZW5cIicgOiAnJykgK1xyXG4gICAgICAnPicgK1xyXG4gICAgICAnPGlucHV0IGlkPVwiYWN0aXZpdGktJyArIGVzY2FwZUhUTUwocmVzb3VyY2UuaWQpICsgJ1wiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIicgKyBlc2NhcGVIVE1MKG9wdGlvbnMubW9kZWxQcm9wZXJ0eSkgKyAnXCIgJyArXHJcbiAgICAgICAgKGNhbkJlRGlzYWJsZWQgPyAnZGF0YS1kaXNhYmxlPVwiaXNEaXNhYmxlZFwiJyA6ICcnKSArXHJcbiAgICAgICAgKGNhbkJlSGlkZGVuID8gJ2RhdGEtc2hvdz1cImlzSGlkZGVuXCInIDogJycpICtcclxuICAgICAgICAnIC8+JyArXHJcbiAgICAgICc8YnV0dG9uIGNsYXNzPVwiJyArIGVzY2FwZUhUTUwoYWN0aW9uTmFtZSkgKyAnXCIgZGF0YS1hY3Rpb249XCInICsgZXNjYXBlSFRNTChhY3Rpb25OYW1lKSArICdcIiBkYXRhLXNob3c9XCInICsgZXNjYXBlSFRNTChzaG93TmFtZSkgKyAnXCIgJyArXHJcbiAgICAgICAgKGNhbkJlRGlzYWJsZWQgPyAnZGF0YS1kaXNhYmxlPVwiaXNEaXNhYmxlZFwiJyA6ICcnKSArXHJcbiAgICAgICAgKGNhbkJlSGlkZGVuID8gJyBkYXRhLXNob3c9XCJpc0hpZGRlblwiJyA6ICcnKSArICc+JyArXHJcbiAgICAgICAgJzxzcGFuPicgKyBlc2NhcGVIVE1MKGJ1dHRvbkxhYmVsKSArICc8L3NwYW4+JyArXHJcbiAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICc8L2Rpdj4nO1xyXG5cclxuICAvLyBhZGQgZGVzY3JpcHRpb24gYmVsb3cgdGV4dCBpbnB1dCBlbnRyeSBmaWVsZFxyXG4gIGlmIChkZXNjcmlwdGlvbikge1xyXG4gICAgcmVzb3VyY2UuaHRtbCArPSBlbnRyeUZpZWxkRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgcmVzb3VyY2VbYWN0aW9uTmFtZV0gPSBhY3Rpb25NZXRob2Q7XHJcbiAgcmVzb3VyY2Vbc2hvd05hbWVdID0gc2hvd01ldGhvZDtcclxuXHJcbiAgaWYgKGNhbkJlRGlzYWJsZWQpIHtcclxuICAgIHJlc291cmNlLmlzRGlzYWJsZWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIG9wdGlvbnMuZGlzYWJsZWQuYXBwbHkocmVzb3VyY2UsIGFyZ3VtZW50cyk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgaWYgKGNhbkJlSGlkZGVuKSB7XHJcbiAgICByZXNvdXJjZS5pc0hpZGRlbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gIW9wdGlvbnMuaGlkZGVuLmFwcGx5KHJlc291cmNlLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlc291cmNlLmNzc0NsYXNzZXMgPSBbJ2JwcC10ZXh0ZmllbGQnXTtcclxuXHJcbiAgcmV0dXJuIHJlc291cmNlO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB0ZXh0RmllbGQ7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciB0ZXh0RmllbGQgPSByZXF1aXJlKCcuL1RleHRJbnB1dEVudHJ5RmFjdG9yeScpO1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgZnVuY3Rpb24gaXMgYSB3cmFwcGVyIGFyb3VuZCBUZXh0SW5wdXRFbnRyeUZhY3RvcnkuXHJcbiAqIEl0IGFkZHMgZnVuY3Rpb25hbGl0eSB0byBjYWNoZSBhbiBpbnZhbGlkIHZhbHVlIGVudGVyZWQgaW4gdGhlXHJcbiAqIHRleHQgaW5wdXQsIGluc3RlYWQgb2Ygc2V0dGluZyBpdCBvbiB0aGUgYnVzaW5lc3Mgb2JqZWN0LlxyXG4gKi9cclxudmFyIHZhbGlkYXRpb25Bd2FyZVRleHRGaWVsZCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGRlZmF1bHRQYXJhbWV0ZXJzKSB7XHJcblxyXG4gIHZhciBtb2RlbFByb3BlcnR5ID0gb3B0aW9ucy5tb2RlbFByb3BlcnR5O1xyXG5cclxuICBkZWZhdWx0UGFyYW1ldGVycy5nZXQgPSBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICB2YXIgdmFsdWUgPSB0aGlzLl9fbGFzdEludmFsaWRWYWx1ZTtcclxuXHJcbiAgICBkZWxldGUgdGhpcy5fX2xhc3RJbnZhbGlkVmFsdWU7XHJcblxyXG4gICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcclxuXHJcbiAgICBwcm9wZXJ0aWVzW21vZGVsUHJvcGVydHldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogb3B0aW9ucy5nZXRQcm9wZXJ0eShlbGVtZW50LCBub2RlKTtcclxuXHJcbiAgICByZXR1cm4gcHJvcGVydGllcztcclxuICB9O1xyXG5cclxuICBkZWZhdWx0UGFyYW1ldGVycy5zZXQgPSBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgIHZhciB2YWxpZGF0aW9uRXJyb3JzID0gdmFsaWRhdGUuYXBwbHkodGhpcywgWyBlbGVtZW50LCB2YWx1ZXMsIG5vZGUgXSksXHJcbiAgICAgICAgcHJvcGVydHlWYWx1ZSA9IHZhbHVlc1ttb2RlbFByb3BlcnR5XTtcclxuXHJcbiAgICAvLyBtYWtlIHN1cmUgd2UgZG8gbm90IHVwZGF0ZSB0aGUgaWRcclxuICAgIGlmICh2YWxpZGF0aW9uRXJyb3JzICYmIHZhbGlkYXRpb25FcnJvcnNbbW9kZWxQcm9wZXJ0eV0pIHtcclxuICAgICAgdGhpcy5fX2xhc3RJbnZhbGlkVmFsdWUgPSBwcm9wZXJ0eVZhbHVlO1xyXG5cclxuICAgICAgcmV0dXJuIG9wdGlvbnMuc2V0UHJvcGVydHkoZWxlbWVudCwge30sIG5vZGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcclxuXHJcbiAgICAgIHByb3BlcnRpZXNbbW9kZWxQcm9wZXJ0eV0gPSBwcm9wZXJ0eVZhbHVlO1xyXG5cclxuICAgICAgcmV0dXJuIG9wdGlvbnMuc2V0UHJvcGVydHkoZWxlbWVudCwgcHJvcGVydGllcywgbm9kZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgdmFyIHZhbGlkYXRlID0gZGVmYXVsdFBhcmFtZXRlcnMudmFsaWRhdGUgPSBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgIHZhciB2YWx1ZSA9IHZhbHVlc1ttb2RlbFByb3BlcnR5XSB8fCB0aGlzLl9fbGFzdEludmFsaWRWYWx1ZTtcclxuXHJcbiAgICB2YXIgcHJvcGVydHkgPSB7fTtcclxuICAgIHByb3BlcnR5W21vZGVsUHJvcGVydHldID0gdmFsdWU7XHJcblxyXG4gICAgcmV0dXJuIG9wdGlvbnMudmFsaWRhdGUoZWxlbWVudCwgcHJvcGVydHksIG5vZGUpO1xyXG4gIH07XHJcblxyXG4gIHJldHVybiB0ZXh0RmllbGQob3B0aW9ucywgZGVmYXVsdFBhcmFtZXRlcnMpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB2YWxpZGF0aW9uQXdhcmVUZXh0RmllbGQ7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBtYXAgPSByZXF1aXJlKCdsb2Rhc2gvbWFwJyk7XHJcblxyXG52YXIgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIgPSByZXF1aXJlKCcuL0V4dGVuc2lvbkVsZW1lbnRzSGVscGVyJyk7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBhdHRyaWJ1dGUgJ2FjdGl2aXRpOmFzeW5jQmVmb3JlJyBpcyBzZXRcclxuICogdG8gdHJ1ZS5cclxuICpcclxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gYm9cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYSBib29sZWFuIHZhbHVlXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0FzeW5jQmVmb3JlKGJvKSB7XHJcbiAgcmV0dXJuICEhKGJvLmdldCgnYWN0aXZpdGk6YXN5bmNCZWZvcmUnKSB8fCBiby5nZXQoJ2FjdGl2aXRpOmFzeW5jJykpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5pc0FzeW5jQmVmb3JlID0gaXNBc3luY0JlZm9yZTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSAnYWN0aXZpdGk6YXN5bmNBZnRlcicgaXMgc2V0XHJcbiAqIHRvIHRydWUuXHJcbiAqXHJcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IGJvXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGEgYm9vbGVhbiB2YWx1ZVxyXG4gKi9cclxuZnVuY3Rpb24gaXNBc3luY0FmdGVyKGJvKSB7XHJcbiAgcmV0dXJuICEhYm8uZ2V0KCdhY3Rpdml0aTphc3luY0FmdGVyJyk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmlzQXN5bmNBZnRlciA9IGlzQXN5bmNBZnRlcjtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSAnYWN0aXZpdGk6ZXhjbHVzaXZlJyBpcyBzZXRcclxuICogdG8gdHJ1ZS5cclxuICpcclxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gYm9cclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYSBib29sZWFuIHZhbHVlXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0V4Y2x1c2l2ZShibykge1xyXG4gIHJldHVybiAhIWJvLmdldCgnYWN0aXZpdGk6ZXhjbHVzaXZlJyk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmlzRXhjbHVzaXZlID0gaXNFeGNsdXNpdmU7XHJcblxyXG4vKipcclxuICogR2V0IGZpcnN0ICdhY3Rpdml0aTpGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZScgZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSBib1xyXG4gKlxyXG4gKiBAcmV0dXJuIHtBcnJheTxNb2RkbGVFbGVtZW50Pn0gYSBsaXN0IG9mICdhY3Rpdml0aTpGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZSdcclxuICovXHJcbmZ1bmN0aW9uIGdldEZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGJvKSB7XHJcbiAgcmV0dXJuIChleHRlbnNpb25FbGVtZW50c0hlbHBlci5nZXRFeHRlbnNpb25FbGVtZW50cyhibywgJ2FjdGl2aXRpOkZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlJykgfHwgW10pWzBdO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5nZXRGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZSA9IGdldEZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlO1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZXMgYWxsIGV4aXN0aW5nICdhY3Rpdml0aTpGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZScgZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0XHJcbiAqXHJcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IGJvXHJcbiAqXHJcbiAqIEByZXR1cm4ge0FycmF5PE1vZGRsZUVsZW1lbnQ+fSBhIGxpc3Qgb2YgJ2FjdGl2aXRpOkZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlJ1xyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoYm8sIGVsZW1lbnQpIHtcclxuICB2YXIgcmV0cnlUaW1lQ3ljbGVzID0gZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sICdhY3Rpdml0aTpGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZScpO1xyXG4gIHJldHVybiBtYXAocmV0cnlUaW1lQ3ljbGVzLCBmdW5jdGlvbihjeWNsZSkge1xyXG4gICAgcmV0dXJuIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyLnJlbW92ZUVudHJ5KGJvLCBlbGVtZW50LCBjeWNsZSk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLnJlbW92ZUZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlID0gcmVtb3ZlRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGU7IiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGNvbGxlY3Rpb25BZGQgPSByZXF1aXJlKCdkaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zJykuYWRkLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxudmFyIENhdGVnb3J5SGVscGVyID0ge307XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IENhdGVnb3J5SGVscGVyO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgYnBtbjpDYXRlZ29yeVZhbHVlIGluc2lkZSBhIG5ldyBicG1uOkNhdGVnb3J5XHJcbiAqXHJcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZGVmaW5pdGlvbnNcclxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gY2F0ZWdvcnlWYWx1ZS5cclxuICovXHJcbkNhdGVnb3J5SGVscGVyLmNyZWF0ZUNhdGVnb3J5VmFsdWUgPSBmdW5jdGlvbihkZWZpbml0aW9ucywgYnBtbkZhY3RvcnkpIHtcclxuICB2YXIgY2F0ZWdvcnlWYWx1ZSA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpDYXRlZ29yeVZhbHVlJyksXHJcbiAgICAgIGNhdGVnb3J5ID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkNhdGVnb3J5Jywge1xyXG4gICAgICAgIGNhdGVnb3J5VmFsdWU6IFsgY2F0ZWdvcnlWYWx1ZSBdXHJcbiAgICAgIH0pO1xyXG5cclxuICAvLyBhZGQgdG8gY29ycmVjdCBwbGFjZVxyXG4gIGNvbGxlY3Rpb25BZGQoZGVmaW5pdGlvbnMuZ2V0KCdyb290RWxlbWVudHMnKSwgY2F0ZWdvcnkpO1xyXG4gIGdldEJ1c2luZXNzT2JqZWN0KGNhdGVnb3J5KS4kcGFyZW50ID0gZGVmaW5pdGlvbnM7XHJcbiAgZ2V0QnVzaW5lc3NPYmplY3QoY2F0ZWdvcnlWYWx1ZSkuJHBhcmVudCA9IGNhdGVnb3J5O1xyXG5cclxuICByZXR1cm4gY2F0ZWdvcnlWYWx1ZTtcclxuXHJcbn07IiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIENtZEhlbHBlciA9IHt9O1xyXG5tb2R1bGUuZXhwb3J0cyA9IENtZEhlbHBlcjtcclxuXHJcbkNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzID0gZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydGllcykge1xyXG4gIHJldHVybiB7XHJcbiAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLFxyXG4gICAgY29udGV4dDogeyBlbGVtZW50OiBlbGVtZW50LCBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzIH1cclxuICB9O1xyXG59O1xyXG5cclxuQ21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0ID0gZnVuY3Rpb24oZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIG5ld1Byb3BlcnRpZXMpIHtcclxuICByZXR1cm4ge1xyXG4gICAgY21kOiAncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QnLFxyXG4gICAgY29udGV4dDoge1xyXG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICBidXNpbmVzc09iamVjdDogYnVzaW5lc3NPYmplY3QsXHJcbiAgICAgIHByb3BlcnRpZXM6IG5ld1Byb3BlcnRpZXNcclxuICAgIH1cclxuICB9O1xyXG59O1xyXG5cclxuQ21kSGVscGVyLmFkZEVsZW1lbnRzVG9saXN0ID0gZnVuY3Rpb24oZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIGxpc3RQcm9wZXJ0eU5hbWUsIG9iamVjdHNUb0FkZCkge1xyXG4gIHJldHVybiB7XHJcbiAgICBjbWQ6ICdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0JyxcclxuICAgIGNvbnRleHQ6IHtcclxuICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgY3VycmVudE9iamVjdDogYnVzaW5lc3NPYmplY3QsXHJcbiAgICAgIHByb3BlcnR5TmFtZTogbGlzdFByb3BlcnR5TmFtZSxcclxuICAgICAgb2JqZWN0c1RvQWRkOiBvYmplY3RzVG9BZGRcclxuICAgIH1cclxuICB9O1xyXG59O1xyXG5cclxuQ21kSGVscGVyLnJlbW92ZUVsZW1lbnRzRnJvbUxpc3QgPSBmdW5jdGlvbihlbGVtZW50LCBidXNpbmVzc09iamVjdCwgbGlzdFByb3BlcnR5TmFtZSwgcmVmZXJlbmNlUHJvcGVydHlOYW1lLCBvYmplY3RzVG9SZW1vdmUpIHtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGNtZDogJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0LWxpc3QnLFxyXG4gICAgY29udGV4dDoge1xyXG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICBjdXJyZW50T2JqZWN0OiBidXNpbmVzc09iamVjdCxcclxuICAgICAgcHJvcGVydHlOYW1lOiBsaXN0UHJvcGVydHlOYW1lLFxyXG4gICAgICByZWZlcmVuY2VQcm9wZXJ0eU5hbWU6IHJlZmVyZW5jZVByb3BlcnR5TmFtZSxcclxuICAgICAgb2JqZWN0c1RvUmVtb3ZlOiBvYmplY3RzVG9SZW1vdmVcclxuICAgIH1cclxuICB9O1xyXG59O1xyXG5cclxuXHJcbkNtZEhlbHBlci5hZGRBbmRSZW1vdmVFbGVtZW50c0Zyb21MaXN0ID0gZnVuY3Rpb24oZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIGxpc3RQcm9wZXJ0eU5hbWUsIHJlZmVyZW5jZVByb3BlcnR5TmFtZSwgb2JqZWN0c1RvQWRkLCBvYmplY3RzVG9SZW1vdmUpIHtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGNtZDogJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0LWxpc3QnLFxyXG4gICAgY29udGV4dDoge1xyXG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICBjdXJyZW50T2JqZWN0OiBidXNpbmVzc09iamVjdCxcclxuICAgICAgcHJvcGVydHlOYW1lOiBsaXN0UHJvcGVydHlOYW1lLFxyXG4gICAgICByZWZlcmVuY2VQcm9wZXJ0eU5hbWU6IHJlZmVyZW5jZVByb3BlcnR5TmFtZSxcclxuICAgICAgb2JqZWN0c1RvQWRkOiBvYmplY3RzVG9BZGQsXHJcbiAgICAgIG9iamVjdHNUb1JlbW92ZTogb2JqZWN0c1RvUmVtb3ZlXHJcbiAgICB9XHJcbiAgfTtcclxufTtcclxuXHJcblxyXG5DbWRIZWxwZXIuc2V0TGlzdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJ1c2luZXNzT2JqZWN0LCBsaXN0UHJvcGVydHlOYW1lLCB1cGRhdGVkT2JqZWN0TGlzdCkge1xyXG4gIHJldHVybiB7XHJcbiAgICBjbWQ6ICdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0JyxcclxuICAgIGNvbnRleHQ6IHtcclxuICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgY3VycmVudE9iamVjdDogYnVzaW5lc3NPYmplY3QsXHJcbiAgICAgIHByb3BlcnR5TmFtZTogbGlzdFByb3BlcnR5TmFtZSxcclxuICAgICAgdXBkYXRlZE9iamVjdExpc3Q6IHVwZGF0ZWRPYmplY3RMaXN0XHJcbiAgICB9XHJcbiAgfTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIEVsZW1lbnRIZWxwZXIgPSB7fTtcclxubW9kdWxlLmV4cG9ydHMgPSBFbGVtZW50SGVscGVyO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgZWxlbWVudCBhbmQgc2V0IHRoZSBwYXJlbnQgdG8gaXRcclxuICpcclxuICogQG1ldGhvZCBFbGVtZW50SGVscGVyI2NyZWF0ZUVsZW1lbnRcclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGVsZW1lbnRUeXBlIG9mIHRoZSBuZXcgZWxlbWVudFxyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydGllcyBvZiB0aGUgbmV3IGVsZW1lbnQgaW4ga2V5LXZhbHVlIHBhaXJzXHJcbiAqIEBwYXJhbSB7bW9kZGxlLm9iamVjdH0gcGFyZW50IG9mIHRoZSBuZXcgZWxlbWVudFxyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBmYWN0b3J5IHdoaWNoIGNyZWF0ZXMgdGhlIG5ldyBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm5zIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudCB3aGljaCBpcyBjcmVhdGVkXHJcbiAqL1xyXG5FbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50VHlwZSwgcHJvcGVydGllcywgcGFyZW50LCBmYWN0b3J5KSB7XHJcbiAgdmFyIGVsZW1lbnQgPSBmYWN0b3J5LmNyZWF0ZShlbGVtZW50VHlwZSwgcHJvcGVydGllcyk7XHJcbiAgZWxlbWVudC4kcGFyZW50ID0gcGFyZW50O1xyXG5cclxuICByZXR1cm4gZWxlbWVudDtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcclxuICAgIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpO1xyXG5cclxudmFyIEV2ZW50RGVmaW5pdGlvbkhlbHBlciA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFdmVudERlZmluaXRpb25IZWxwZXI7XHJcblxyXG5FdmVudERlZmluaXRpb25IZWxwZXIuZ2V0RXZlbnREZWZpbml0aW9uID0gZnVuY3Rpb24oZWxlbWVudCwgZXZlbnRUeXBlKSB7XHJcblxyXG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxyXG4gICAgICBldmVudERlZmluaXRpb24gPSBudWxsO1xyXG5cclxuICBpZiAoYm8uZXZlbnREZWZpbml0aW9ucykge1xyXG4gICAgZm9yRWFjaChiby5ldmVudERlZmluaXRpb25zLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICBpZiAoaXMoZXZlbnQsIGV2ZW50VHlwZSkpIHtcclxuICAgICAgICBldmVudERlZmluaXRpb24gPSBldmVudDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZXZlbnREZWZpbml0aW9uO1xyXG59O1xyXG5cclxuRXZlbnREZWZpbml0aW9uSGVscGVyLmdldFRpbWVyRXZlbnREZWZpbml0aW9uID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiB0aGlzLmdldEV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbicpO1xyXG59O1xyXG5cclxuRXZlbnREZWZpbml0aW9uSGVscGVyLmdldE1lc3NhZ2VFdmVudERlZmluaXRpb24gPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgcmV0dXJuIHRoaXMuZ2V0RXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nKTtcclxufTtcclxuXHJcbkV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRTaWduYWxFdmVudERlZmluaXRpb24gPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgcmV0dXJuIHRoaXMuZ2V0RXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicpO1xyXG59O1xyXG5cclxuRXZlbnREZWZpbml0aW9uSGVscGVyLmdldEVycm9yRXZlbnREZWZpbml0aW9uID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiB0aGlzLmdldEV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbicpO1xyXG59O1xyXG5cclxuRXZlbnREZWZpbml0aW9uSGVscGVyLmdldEVzY2FsYXRpb25FdmVudERlZmluaXRpb24gPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgcmV0dXJuIHRoaXMuZ2V0RXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nKTtcclxufTtcclxuXHJcbkV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiB0aGlzLmdldEV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJyk7XHJcbn07XHJcblxyXG5FdmVudERlZmluaXRpb25IZWxwZXIuZ2V0TGlua0V2ZW50RGVmaW5pdGlvbiA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gdGhpcy5nZXRFdmVudERlZmluaXRpb24oZWxlbWVudCwgJ2JwbW46TGlua0V2ZW50RGVmaW5pdGlvbicpO1xyXG59O1xyXG5cclxuRXZlbnREZWZpbml0aW9uSGVscGVyLmdldENvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiB0aGlzLmdldEV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbicpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgY21kSGVscGVyID0gcmVxdWlyZSgnLi9DbWRIZWxwZXInKSxcclxuICAgIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuL0VsZW1lbnRIZWxwZXInKTtcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XHJcblxyXG52YXIgRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIgPSB7fTtcclxuXHJcbnZhciBnZXRFeHRlbnNpb25FbGVtZW50cyA9IGZ1bmN0aW9uKGJvKSB7XHJcbiAgcmV0dXJuIGJvLmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcclxufTtcclxuXHJcbkV4dGVuc2lvbkVsZW1lbnRzSGVscGVyLmdldEV4dGVuc2lvbkVsZW1lbnRzID0gZnVuY3Rpb24oYm8sIHR5cGUpIHtcclxuICB2YXIgZXh0ZW5zaW9uRWxlbWVudHMgPSBnZXRFeHRlbnNpb25FbGVtZW50cyhibyk7XHJcbiAgaWYgKHR5cGVvZiBleHRlbnNpb25FbGVtZW50cyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHZhciBleHRlbnNpb25WYWx1ZXMgPSBleHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpO1xyXG4gICAgaWYgKHR5cGVvZiBleHRlbnNpb25WYWx1ZXMgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIHZhciBlbGVtZW50cyA9IGV4dGVuc2lvblZhbHVlcy5maWx0ZXIoZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gaXModmFsdWUsIHR5cGUpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50cztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufTtcclxuXHJcbkV4dGVuc2lvbkVsZW1lbnRzSGVscGVyLmFkZEVudHJ5ID0gZnVuY3Rpb24oYm8sIGVsZW1lbnQsIGVudHJ5LCBicG1uRmFjdG9yeSkge1xyXG4gIHZhciBleHRlbnNpb25FbGVtZW50cyA9IGJvLmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcclxuXHJcbiAgLy8gaWYgdGhlcmUgaXMgbm8gZXh0ZW5zaW9uRWxlbWVudHMgbGlzdCwgY3JlYXRlIG9uZVxyXG4gIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcclxuICAgIC8vIFRPRE86IEFzayBEYW5pZWwgd2hpY2ggb3BlcmF0aW9uIGNvc3RzIG1vcmVcclxuICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywgeyB2YWx1ZXM6IFtlbnRyeV0gfSwgYm8sIGJwbW5GYWN0b3J5KTtcclxuICAgIHJldHVybiB7IGV4dGVuc2lvbkVsZW1lbnRzIDogZXh0ZW5zaW9uRWxlbWVudHMgfTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gYWRkIG5ldyBmYWlsZWRKb2JSZXRyeUV4dGVuc2lvbkVsZW1lbnQgdG8gZXhpc3RpbmcgZXh0ZW5zaW9uRWxlbWVudHMgbGlzdFxyXG4gICAgcmV0dXJuIGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgJ3ZhbHVlcycsIFtlbnRyeV0pO1xyXG4gIH1cclxufTtcclxuXHJcbkV4dGVuc2lvbkVsZW1lbnRzSGVscGVyLnJlbW92ZUVudHJ5ID0gZnVuY3Rpb24oYm8sIGVsZW1lbnQsIGVudHJ5KSB7XHJcbiAgdmFyIGV4dGVuc2lvbkVsZW1lbnRzID0gYm8uZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xyXG5cclxuICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XHJcblxyXG4gICAgLy8gcmV0dXJuIGFuIGVtcHR5IGNvbW1hbmQgd2hlbiB0aGVyZSBpcyBubyBleHRlbnNpb25FbGVtZW50cyBsaXN0XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY21kSGVscGVyLnJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsICd2YWx1ZXMnLCAnZXh0ZW5zaW9uRWxlbWVudHMnLCBbZW50cnldKTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXI7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBnZXRFeHRlbnNpb25FbGVtZW50cyA9IHJlcXVpcmUoJy4vRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKS5nZXRFeHRlbnNpb25FbGVtZW50cztcclxuXHJcbnZhciBGb3JtSGVscGVyID0ge307XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEZvcm1IZWxwZXI7XHJcblxyXG4vKipcclxuICogUmV0dXJuIGZvcm0gZGF0YSBmcm9tIGJ1c2luZXNzIG9iamVjdCBvciB1bmRlZmluZWQgaWYgbm9uZSBleGlzdFxyXG4gKlxyXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fHVuZGVmaW5lZH0gZm9ybURhdGFcclxuICpcclxuICog5q2k5pa55rOV5bqf5byDXHJcbiAqXHJcbiAqL1xyXG5Gb3JtSGVscGVyLmdldEZvcm1EYXRhID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gLyogdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHZhciBmb3JtRmllbGRzID0gZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sICdhY3Rpdml0aTpGb3JtUHJvcGVydHknKTtcclxuXHJcbiAgdmFyIGZvcm1EYXRhID0ge31cclxuXHJcbiAgaWYgKHR5cGVvZiBmb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHJldHVybiBmb3JtRGF0YVswXTtcclxuICB9Ki9cclxuIHJldHVybiB7fTtcclxufTtcclxuXHJcblxyXG4vKipcclxuICogUmV0dXJuIGFsbCBmb3JtIGZpZWxkcyBleGlzdGluZyBpbiB0aGUgYnVzaW5lc3Mgb2JqZWN0LCBhbmRcclxuICogYW4gZW1wdHkgYXJyYXkgaWYgbm9uZSBleGlzdC5cclxuICpcclxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7QXJyYXl9IGEgbGlzdCBvZiBmb3JtIGZpZWxkIG9iamVjdHNcclxuICovXHJcbkZvcm1IZWxwZXIuZ2V0Rm9ybUZpZWxkcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHJcbiAgLyoq55u05o6l6I635Y+WIEV4dGVuc2lvbkVsZW1lbnRz55qEIGFjdGl2aXRpOkZvcm1Qcm9wZXJ0eeWFg+e0oCovXHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHZhciBmb3JtRmllbGRzID0gZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sICdhY3Rpdml0aTpGb3JtUHJvcGVydHknKTtcclxuXHJcbiAgcmV0dXJuIGZvcm1GaWVsZHMgfHwgW107XHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIEdldCBhIGZvcm0gZmllbGQgZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0IGF0IGdpdmVuIGluZGV4XHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSB0aGUgZm9ybSBmaWVsZFxyXG4gKi9cclxuRm9ybUhlbHBlci5nZXRGb3JtRmllbGQgPSBmdW5jdGlvbihlbGVtZW50LCBpZHgpIHtcclxuXHJcbiAgdmFyIGZvcm1GaWVsZHMgPSB0aGlzLmdldEZvcm1GaWVsZHMoZWxlbWVudCk7XHJcblxyXG4gIHJldHVybiBmb3JtRmllbGRzW2lkeF07XHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIEdldCBhbGwgY29uc3RyYWludHMgZm9yIGEgc3BlY2lmaWMgZm9ybSBmaWVsZCBmcm9tIHRoZSBidXNpbmVzcyBvYmplY3RcclxuICpcclxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gZm9ybUZpZWxkXHJcbiAqXHJcbiAqIEByZXR1cm4ge0FycmF5PE1vZGRsZUVsZW1lbnQ+fSBhIGxpc3Qgb2YgY29uc3RyYWludCBvYmplY3RzXHJcbiAqL1xyXG5Gb3JtSGVscGVyLmdldENvbnN0cmFpbnRzID0gZnVuY3Rpb24oZm9ybUZpZWxkKSB7XHJcbiAgaWYgKGZvcm1GaWVsZCAmJiBmb3JtRmllbGQudmFsaWRhdGlvbiAmJiBmb3JtRmllbGQudmFsaWRhdGlvbi5jb25zdHJhaW50cykge1xyXG4gICAgcmV0dXJuIGZvcm1GaWVsZC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzO1xyXG4gIH1cclxuICByZXR1cm4gW107XHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIEdldCBhbGwgYWN0aXZpdGk6dmFsdWUgb2JqZWN0cyBmb3IgYSBzcGVjaWZpYyBmb3JtIGZpZWxkIGZyb20gdGhlIGJ1c2luZXNzIG9iamVjdFxyXG4gKlxyXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSBmb3JtRmllbGRcclxuICpcclxuICogQHJldHVybiB7QXJyYXk8TW9kZGxlRWxlbWVudD59IGEgbGlzdCBvZiBhY3Rpdml0aTp2YWx1ZSBvYmplY3RzXHJcbiAqL1xyXG5Gb3JtSGVscGVyLmdldEVudW1WYWx1ZXMgPSBmdW5jdGlvbihmb3JtRmllbGQpIHtcclxuICBpZiAoZm9ybUZpZWxkICYmIGZvcm1GaWVsZC52YWx1ZXMpIHtcclxuICAgIHJldHVybiBmb3JtRmllbGQudmFsdWVzO1xyXG4gIH1cclxuICByZXR1cm4gW107XHJcbn07XHJcblxyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgTW9kZWxVdGlsID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKSxcclxuICAgIGlzID0gTW9kZWxVdGlsLmlzLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSBNb2RlbFV0aWwuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgZXZlbnREZWZpbml0aW9uSGVscGVyID0gcmVxdWlyZSgnLi9FdmVudERlZmluaXRpb25IZWxwZXInKTtcclxudmFyIGV4dGVuc2lvbnNFbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi9FeHRlbnNpb25FbGVtZW50c0hlbHBlcicpO1xyXG5cclxudmFyIEltcGxlbWVudGF0aW9uVHlwZUhlbHBlciA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXI7XHJcblxyXG4vKipcclxuICogUmV0dXJucyAndHJ1ZScgaWYgdGhlIGdpdmVuIGVsZW1lbnQgaXMgJ2FjdGl2aXRpOlNlcnZpY2VUYXNrTGlrZSdcclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcclxuICovXHJcbkltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5pc1NlcnZpY2VUYXNrTGlrZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gaXMoZWxlbWVudCwgJ2FjdGl2aXRpOlNlcnZpY2VUYXNrTGlrZScpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgJ3RydWUnIGlmIHRoZSBnaXZlbiBlbGVtZW50IGlzICdhY3Rpdml0aTpEbW5DYXBhYmxlJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGEgYm9vbGVhbiB2YWx1ZVxyXG4gKi9cclxuSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzRG1uQ2FwYWJsZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gaXMoZWxlbWVudCwgJ2FjdGl2aXRpOkRtbkNhcGFibGUnKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zICd0cnVlJyBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyAnYWN0aXZpdGk6RXh0ZXJuYWxDYXBhYmxlJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGEgYm9vbGVhbiB2YWx1ZVxyXG4gKi9cclxuSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzRXh0ZXJuYWxDYXBhYmxlID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiBpcyhlbGVtZW50LCAnYWN0aXZpdGk6RXh0ZXJuYWxDYXBhYmxlJyk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyAndHJ1ZScgaWYgdGhlIGdpdmVuIGVsZW1lbnQgaXMgJ2FjdGl2aXRpOlRhc2tMaXN0ZW5lcidcclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcclxuICovXHJcbkltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5pc1Rhc2tMaXN0ZW5lciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gaXMoZWxlbWVudCwgJ2FjdGl2aXRpOlRhc2tMaXN0ZW5lcicpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgJ3RydWUnIGlmIHRoZSBnaXZlbiBlbGVtZW50IGlzICdhY3Rpdml0aTpFeGVjdXRpb25MaXN0ZW5lcidcclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcclxuICovXHJcbkltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5pc0V4ZWN1dGlvbkxpc3RlbmVyID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiBpcyhlbGVtZW50LCAnYWN0aXZpdGk6RXhlY3V0aW9uTGlzdGVuZXInKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zICd0cnVlJyBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyAnYWN0aXZpdGk6RXhlY3V0aW9uTGlzdGVuZXInIG9yXHJcbiAqICdhY3Rpdml0aTpUYXNrTGlzdGVuZXInXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYSBib29sZWFuIHZhbHVlXHJcbiAqL1xyXG5JbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuaXNMaXN0ZW5lciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gdGhpcy5pc1Rhc2tMaXN0ZW5lcihlbGVtZW50KSB8fCB0aGlzLmlzRXhlY3V0aW9uTGlzdGVuZXIoZWxlbWVudCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyAndHJ1ZScgaWYgdGhlIGdpdmVuIGVsZW1lbnQgaXMgJ2JwbW46U2VxdWVuY2VGbG93J1xyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGEgYm9vbGVhbiB2YWx1ZVxyXG4gKi9cclxuSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzU2VxdWVuY2VGbG93ID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpTZXF1ZW5jZUZsb3cnKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgYSAnYWN0aXZpdGk6U2VydmljZVRhc2tMaWtlJyBidXNpbmVzcyBvYmplY3QuXHJcbiAqXHJcbiAqIElmIHRoZSBnaXZlbiBlbGVtZW50IGlzIG5vdCBhICdhY3Rpdml0aTpTZXJ2aWNlVGFza0xpa2UnLCB0aGVuICdmYWxzZSdcclxuICogaXMgcmV0dXJuZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gdGhlICdhY3Rpdml0aTpTZXJ2aWNlVGFza0xpa2UnIGJ1c2luZXNzIG9iamVjdFxyXG4gKi9cclxuSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0ID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG5cclxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcpIHx8IGlzKGVsZW1lbnQsICdicG1uOkVuZEV2ZW50JykpIHtcclxuXHJcbiAgICAvLyBjaGFuZ2UgYnVzaW5lc3Mgb2JqZWN0IHRvICdtZXNzYWdlRXZlbnREZWZpbml0aW9uJyB3aGVuXHJcbiAgICAvLyB0aGUgZWxlbWVudCBpcyBhIG1lc3NhZ2UgaW50ZXJtZWRpYXRlIHRocm93IGV2ZW50IG9yIG1lc3NhZ2UgZW5kIGV2ZW50XHJcbiAgICAvLyBiZWNhdXNlIHRoZSBhY3Rpdml0aSBleHRlbnNpb25zIChlLmcuIGFjdGl2aXRpOmNsYXNzKSBhcmUgaW4gdGhlIG1lc3NhZ2VcclxuICAgIC8vIGV2ZW50IGRlZmluaXRpb24gdGFnIGFuZCBub3QgaW4gdGhlIGludGVybWVkaWF0ZSB0aHJvdyBldmVudCBvciBlbmQgZXZlbnQgdGFnXHJcbiAgICB2YXIgbWVzc2FnZUV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRNZXNzYWdlRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xyXG4gICAgaWYgKG1lc3NhZ2VFdmVudERlZmluaXRpb24pIHtcclxuICAgICAgZWxlbWVudCA9IG1lc3NhZ2VFdmVudERlZmluaXRpb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdGhpcy5pc1NlcnZpY2VUYXNrTGlrZShlbGVtZW50KSAmJiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaW1wbGVtZW50YXRpb24gdHlwZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudC5cclxuICpcclxuICogUG9zc2libGUgaW1wbGVtZW50YXRpb24gdHlwZXMgYXJlOlxyXG4gKiAtIGRtblxyXG4gKiAtIGNvbm5lY3RvclxyXG4gKiAtIGV4dGVybmFsXHJcbiAqIC0gY2xhc3NcclxuICogLSBleHByZXNzaW9uXHJcbiAqIC0gZGVsZWdhdGVFeHByZXNzaW9uXHJcbiAqIC0gc2NyaXB0XHJcbiAqIC0gb3IgdW5kZWZpbmVkLCB3aGVuIG5vIG1hdGNoaW5nIGltcGxlbWVudGF0aW9uIHR5cGUgaXMgZm91bmRcclxuICpcclxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7U3RyaW5nfSB0aGUgaW1wbGVtZW50YXRpb24gdHlwZVxyXG4gKi9cclxuSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldEltcGxlbWVudGF0aW9uVHlwZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuXHJcbiAgdmFyIGJvID0gdGhpcy5nZXRTZXJ2aWNlVGFza0xpa2VCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgaWYgKCFibykge1xyXG4gICAgaWYgKHRoaXMuaXNMaXN0ZW5lcihlbGVtZW50KSkge1xyXG4gICAgICBibyA9IGVsZW1lbnQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5pc0RtbkNhcGFibGUoYm8pKSB7XHJcbiAgICB2YXIgZGVjaXNpb25SZWYgPSBiby5nZXQoJ2FjdGl2aXRpOmRlY2lzaW9uUmVmJyk7XHJcbiAgICBpZiAodHlwZW9mIGRlY2lzaW9uUmVmICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICByZXR1cm4gJ2Rtbic7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5pc1NlcnZpY2VUYXNrTGlrZShibykpIHtcclxuICAgIHZhciBjb25uZWN0b3JzID0gZXh0ZW5zaW9uc0VsZW1lbnRIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sICdhY3Rpdml0aTpDb25uZWN0b3InKTtcclxuICAgIGlmICh0eXBlb2YgY29ubmVjdG9ycyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgcmV0dXJuICdjb25uZWN0b3InO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuaXNFeHRlcm5hbENhcGFibGUoYm8pKSB7XHJcbiAgICB2YXIgdHlwZSA9IGJvLmdldCgnYWN0aXZpdGk6dHlwZScpO1xyXG4gICAgaWYgKHR5cGUgPT09ICdleHRlcm5hbCcpIHtcclxuICAgICAgcmV0dXJuICdleHRlcm5hbCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YXIgY2xzID0gYm8uZ2V0KCdhY3Rpdml0aTpjbGFzcycpO1xyXG4gIGlmICh0eXBlb2YgY2xzICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgcmV0dXJuICdjbGFzcyc7XHJcbiAgfVxyXG5cclxuICB2YXIgZXhwcmVzc2lvbiA9IGJvLmdldCgnYWN0aXZpdGk6ZXhwcmVzc2lvbicpO1xyXG4gIGlmICh0eXBlb2YgZXhwcmVzc2lvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHJldHVybiAnZXhwcmVzc2lvbic7XHJcbiAgfVxyXG5cclxuICB2YXIgZGVsZWdhdGVFeHByZXNzaW9uID0gYm8uZ2V0KCdhY3Rpdml0aTpkZWxlZ2F0ZUV4cHJlc3Npb24nKTtcclxuICBpZiAodHlwZW9mIGRlbGVnYXRlRXhwcmVzc2lvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHJldHVybiAnZGVsZWdhdGVFeHByZXNzaW9uJztcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmlzTGlzdGVuZXIoYm8pKSB7XHJcbiAgICB2YXIgc2NyaXB0ID0gYm8uZ2V0KCdzY3JpcHQnKTtcclxuICAgIGlmICh0eXBlb2Ygc2NyaXB0ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICByZXR1cm4gJ3NjcmlwdCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIE1vZGVsVXRpbCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJyksXHJcbiAgICBpcyA9IE1vZGVsVXRpbC5pcyxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gTW9kZWxVdGlsLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxudmFyIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyID0gcmVxdWlyZSgnLi9FeHRlbnNpb25FbGVtZW50c0hlbHBlcicpLFxyXG4gICAgaW1wbGVtZW50YXRpb25UeXBlSGVscGVyID0gcmVxdWlyZSgnLi9JbXBsZW1lbnRhdGlvblR5cGVIZWxwZXInKTtcclxuXHJcbnZhciBJbnB1dE91dHB1dEhlbHBlciA9IHt9O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbnB1dE91dHB1dEhlbHBlcjtcclxuXHJcbmZ1bmN0aW9uIGdldEVsZW1lbnRzKGJvLCB0eXBlLCBwcm9wKSB7XHJcbiAgdmFyIGVsZW1zID0gZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sIHR5cGUpIHx8IFtdO1xyXG4gIHJldHVybiAhcHJvcCA/IGVsZW1zIDogKGVsZW1zWzBdIHx8IHt9KVtwcm9wXSB8fCBbXTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVycyhlbGVtZW50LCBwcm9wLCBpbnNpZGVDb25uZWN0b3IpIHtcclxuICB2YXIgaW5wdXRPdXRwdXQgPSBJbnB1dE91dHB1dEhlbHBlci5nZXRJbnB1dE91dHB1dChlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpO1xyXG4gIHJldHVybiAoaW5wdXRPdXRwdXQgJiYgaW5wdXRPdXRwdXQuZ2V0KHByb3ApKSB8fCBbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCBhIGlucHV0T3V0cHV0IGZyb20gdGhlIGJ1c2luZXNzIG9iamVjdFxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGluc2lkZUNvbm5lY3RvclxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSB0aGUgaW5wdXRPdXRwdXQgb2JqZWN0XHJcbiAqL1xyXG5JbnB1dE91dHB1dEhlbHBlci5nZXRJbnB1dE91dHB1dCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcikge1xyXG4gIGlmICghaW5zaWRlQ29ubmVjdG9yKSB7XHJcbiAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgIHJldHVybiAoZ2V0RWxlbWVudHMoYm8sICdhY3Rpdml0aTpJbnB1dE91dHB1dCcpIHx8IFtdKVswXTtcclxuICB9XHJcbiAgdmFyIGNvbm5lY3RvciA9IHRoaXMuZ2V0Q29ubmVjdG9yKGVsZW1lbnQpO1xyXG4gIHJldHVybiBjb25uZWN0b3IgJiYgY29ubmVjdG9yLmdldCgnaW5wdXRPdXRwdXQnKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgYSBjb25uZWN0b3IgZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0XHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gdGhlIGNvbm5lY3RvciBvYmplY3RcclxuICovXHJcbklucHV0T3V0cHV0SGVscGVyLmdldENvbm5lY3RvciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICB2YXIgYm8gPSBpbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgcmV0dXJuIGJvICYmIChnZXRFbGVtZW50cyhibywgJ2FjdGl2aXRpOkNvbm5lY3RvcicpIHx8IFtdKVswXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gYWxsIGlucHV0IHBhcmFtZXRlcnMgZXhpc3RpbmcgaW4gdGhlIGJ1c2luZXNzIG9iamVjdCwgYW5kXHJcbiAqIGFuIGVtcHR5IGFycmF5IGlmIG5vbmUgZXhpc3QuXHJcbiAqXHJcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGluc2lkZUNvbm5lY3RvclxyXG4gKlxyXG4gKiBAcmV0dXJuIHtBcnJheX0gYSBsaXN0IG9mIGlucHV0IHBhcmFtZXRlciBvYmplY3RzXHJcbiAqL1xyXG5JbnB1dE91dHB1dEhlbHBlci5nZXRJbnB1dFBhcmFtZXRlcnMgPSBmdW5jdGlvbihlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpIHtcclxuICByZXR1cm4gZ2V0UGFyYW1ldGVycy5hcHBseSh0aGlzLCBbIGVsZW1lbnQsICdpbnB1dFBhcmFtZXRlcnMnLCBpbnNpZGVDb25uZWN0b3IgXSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJuIGFsbCBvdXRwdXQgcGFyYW1ldGVycyBleGlzdGluZyBpbiB0aGUgYnVzaW5lc3Mgb2JqZWN0LCBhbmRcclxuICogYW4gZW1wdHkgYXJyYXkgaWYgbm9uZSBleGlzdC5cclxuICpcclxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICogQHBhcmFtICB7Ym9vbGVhbn0gaW5zaWRlQ29ubmVjdG9yXHJcbiAqXHJcbiAqIEByZXR1cm4ge0FycmF5fSBhIGxpc3Qgb2Ygb3V0cHV0IHBhcmFtZXRlciBvYmplY3RzXHJcbiAqL1xyXG5JbnB1dE91dHB1dEhlbHBlci5nZXRPdXRwdXRQYXJhbWV0ZXJzID0gZnVuY3Rpb24oZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSB7XHJcbiAgcmV0dXJuIGdldFBhcmFtZXRlcnMuYXBwbHkodGhpcywgWyBlbGVtZW50LCAnb3V0cHV0UGFyYW1ldGVycycsIGluc2lkZUNvbm5lY3RvciBdKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgYSBpbnB1dCBwYXJhbWV0ZXIgZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0IGF0IGdpdmVuIGluZGV4XHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICogQHBhcmFtICB7Ym9vbGVhbn0gaW5zaWRlQ29ubmVjdG9yXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gaW5wdXQgcGFyYW1ldGVyXHJcbiAqL1xyXG5JbnB1dE91dHB1dEhlbHBlci5nZXRJbnB1dFBhcmFtZXRlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvciwgaWR4KSB7XHJcbiAgcmV0dXJuIHRoaXMuZ2V0SW5wdXRQYXJhbWV0ZXJzKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvcilbaWR4XTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgYSBvdXRwdXQgcGFyYW1ldGVyIGZyb20gdGhlIGJ1c2luZXNzIG9iamVjdCBhdCBnaXZlbiBpbmRleFxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGluc2lkZUNvbm5lY3RvclxyXG4gKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9IG91dHB1dCBwYXJhbWV0ZXJcclxuICovXHJcbklucHV0T3V0cHV0SGVscGVyLmdldE91dHB1dFBhcmFtZXRlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvciwgaWR4KSB7XHJcbiAgcmV0dXJuIHRoaXMuZ2V0T3V0cHV0UGFyYW1ldGVycyhlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpW2lkeF07XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyAndHJ1ZScgaWYgdGhlIGdpdmVuIGVsZW1lbnQgc3VwcG9ydHMgaW5wdXRPdXRwdXRcclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0gIHtib29sZWFufSBpbnNpZGVDb25uZWN0b3JcclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYSBib29sZWFuIHZhbHVlXHJcbiAqL1xyXG5JbnB1dE91dHB1dEhlbHBlci5pc0lucHV0T3V0cHV0U3VwcG9ydGVkID0gZnVuY3Rpb24oZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSB7XHJcblxyXG4gIGlmIChpbnNpZGVDb25uZWN0b3IpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBpcyhibywgJ2JwbW46Rmxvd05vZGUnKSAmJiAhKFxyXG4gICAgICBpcyhibywgJ2JwbW46U3RhcnRFdmVudCcpIHx8XHJcbiAgICAgIGlzKGJvLCAnYnBtbjpHYXRld2F5JykgfHxcclxuICAgICAgaXMoYm8sICdicG1uOkJvdW5kYXJ5RXZlbnQnKSB8fFxyXG4gICAgICAoXHJcbiAgICAgICAgaXMoYm8sICdicG1uOlN1YlByb2Nlc3MnKSAmJiBiby5nZXQoJ3RyaWdnZXJlZEJ5RXZlbnQnKVxyXG4gICAgICApXHJcbiAgICApXHJcbiAgKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zICd0cnVlJyBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBzdXBwb3J0cyBvdXRwdXQgcGFyYW1ldGVyc1xyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGluc2lkZUNvbm5lY3RvclxyXG4gKlxyXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcclxuICovXHJcbklucHV0T3V0cHV0SGVscGVyLmFyZU91dHB1dFBhcmFtZXRlcnNTdXBwb3J0ZWQgPSBmdW5jdGlvbihlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpIHtcclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICByZXR1cm4gaW5zaWRlQ29ubmVjdG9yIHx8ICghaXMoYm8sICdicG1uOkVuZEV2ZW50JykgJiYgIWJvLmxvb3BDaGFyYWN0ZXJpc3RpY3MpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi9DbWRIZWxwZXInKTtcclxuXHJcblxyXG52YXIgUGFydGljaXBhbnRIZWxwZXIgPSB7fTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGFydGljaXBhbnRIZWxwZXI7XHJcblxyXG5QYXJ0aWNpcGFudEhlbHBlci5tb2RpZnlQcm9jZXNzQnVzaW5lc3NPYmplY3QgPSBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWVzKSB7XHJcbiAgaWYgKCFpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5nZXQoJ3Byb2Nlc3NSZWYnKSxcclxuICAgICAgcHJvcGVydGllcyA9IHt9O1xyXG5cclxuICBwcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IHZhbHVlc1twcm9wZXJ0eV07XHJcblxyXG4gIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHByb3BlcnRpZXMpO1xyXG59O1xyXG5cclxuUGFydGljaXBhbnRIZWxwZXIuZ2V0UHJvY2Vzc0J1c2luZXNzT2JqZWN0ID0gZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHlOYW1lKSB7XHJcbiAgaWYgKCFpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5nZXQoJ3Byb2Nlc3NSZWYnKSxcclxuICAgICAgcHJvcGVydGllcyA9IHt9O1xyXG5cclxuICBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSBiby5nZXQocHJvcGVydHlOYW1lKTtcclxuXHJcbiAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbn07IiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcclxuXHJcbnZhciBQcm9wZXJ0aWVzQWN0aXZhdG9yID0gcmVxdWlyZSgnLi4vLi4vUHJvcGVydGllc0FjdGl2YXRvcicpO1xyXG5cclxudmFyIGFzeW5jQ2FwYWJsZUhlbHBlciA9IHJlcXVpcmUoJy4uLy4uL2hlbHBlci9Bc3luY0NhcGFibGVIZWxwZXInKSxcclxuICAgIEltcGxlbWVudGF0aW9uVHlwZUhlbHBlciA9IHJlcXVpcmUoJy4uLy4uL2hlbHBlci9JbXBsZW1lbnRhdGlvblR5cGVIZWxwZXInKTtcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XHJcblxyXG4vLyBicG1uIHByb3BlcnRpZXNcclxudmFyIHByb2Nlc3NQcm9wcyA9IHJlcXVpcmUoJy4uLy4uL3Byb3ZpZGVyL2JwbW4vcGFydHMvUHJvY2Vzc1Byb3BzJyksXHJcbiAgICBldmVudFByb3BzID0gcmVxdWlyZSgnLi4vLi4vcHJvdmlkZXIvYnBtbi9wYXJ0cy9FdmVudFByb3BzJyksXHJcbiAgICBsaW5rUHJvcHMgPSByZXF1aXJlKCcuLi8uLi9wcm92aWRlci9icG1uL3BhcnRzL0xpbmtQcm9wcycpLFxyXG4gICAgZG9jdW1lbnRhdGlvblByb3BzID0gcmVxdWlyZSgnLi4vLi4vcHJvdmlkZXIvYnBtbi9wYXJ0cy9Eb2N1bWVudGF0aW9uUHJvcHMnKSxcclxuICAgIGlkUHJvcHMgPSByZXF1aXJlKCcuLi8uLi9wcm92aWRlci9icG1uL3BhcnRzL0lkUHJvcHMnKSxcclxuICAgIG5hbWVQcm9wcyA9IHJlcXVpcmUoJy4uLy4uL3Byb3ZpZGVyL2JwbW4vcGFydHMvTmFtZVByb3BzJyksXHJcbiAgICBleGVjdXRhYmxlUHJvcHMgPSByZXF1aXJlKCcuLi8uLi9wcm92aWRlci9icG1uL3BhcnRzL0V4ZWN1dGFibGVQcm9wcycpO1xyXG5cclxuLy8gYWN0aXZpdGkgcHJvcGVydGllc1xyXG52YXIgc2VydmljZVRhc2tEZWxlZ2F0ZVByb3BzID0gcmVxdWlyZSgnLi9wYXJ0cy9TZXJ2aWNlVGFza0RlbGVnYXRlUHJvcHMnKSxcclxuICAgIHVzZXJUYXNrUHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL1VzZXJUYXNrUHJvcHMnKSxcclxuICAgIGFzeW5jaHJvbm91c0NvbnRpbnVhdGlvblByb3BzID0gcmVxdWlyZSgnLi9wYXJ0cy9Bc3luY2hyb25vdXNDb250aW51YXRpb25Qcm9wcycpLFxyXG4gICAgY2FsbEFjdGl2aXR5UHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL0NhbGxBY3Rpdml0eVByb3BzJyksXHJcbiAgICBtdWx0aUluc3RhbmNlUHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL011bHRpSW5zdGFuY2VMb29wUHJvcHMnKSxcclxuICAgIGNvbmRpdGlvbmFsUHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL0NvbmRpdGlvbmFsUHJvcHMnKSxcclxuICAgIHNjcmlwdFByb3BzID0gcmVxdWlyZSgnLi9wYXJ0cy9TY3JpcHRUYXNrUHJvcHMnKSxcclxuICAgIGVycm9yUHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL0Vycm9yRXZlbnRQcm9wcycpLFxyXG4gICAgZm9ybVByb3BzID0gcmVxdWlyZSgnLi9wYXJ0cy9Gb3JtUHJvcHMnKSxcclxuICAgIHN0YXJ0RXZlbnRJbml0aWF0b3IgPSByZXF1aXJlKCcuL3BhcnRzL1N0YXJ0RXZlbnRJbml0aWF0b3InKSxcclxuICAgIHZhcmlhYmxlTWFwcGluZyA9IHJlcXVpcmUoJy4vcGFydHMvVmFyaWFibGVNYXBwaW5nUHJvcHMnKSxcclxuICAgIHZlcnNpb25UYWcgPSByZXF1aXJlKCcuL3BhcnRzL1ZlcnNpb25UYWdQcm9wcycpO1xyXG5cclxudmFyIGxpc3RlbmVyUHJvcHMgPSByZXF1aXJlKCcuL3BhcnRzL0xpc3RlbmVyUHJvcHMnKSxcclxuICAgIGxpc3RlbmVyRGV0YWlscyA9IHJlcXVpcmUoJy4vcGFydHMvTGlzdGVuZXJEZXRhaWxQcm9wcycpLFxyXG4gICAgbGlzdGVuZXJGaWVsZHMgPSByZXF1aXJlKCcuL3BhcnRzL0xpc3RlbmVyRmllbGRJbmplY3Rpb25Qcm9wcycpO1xyXG5cclxudmFyIGVsZW1lbnRUZW1wbGF0ZUNob29zZXJQcm9wcyA9IHJlcXVpcmUoJy4vZWxlbWVudC10ZW1wbGF0ZXMvcGFydHMvQ2hvb3NlclByb3BzJyksXHJcbiAgICBlbGVtZW50VGVtcGxhdGVDdXN0b21Qcm9wcyA9IHJlcXVpcmUoJy4vZWxlbWVudC10ZW1wbGF0ZXMvcGFydHMvQ3VzdG9tUHJvcHMnKTtcclxuXHJcbi8vIElucHV0L091dHB1dFxyXG52YXIgaW5wdXRPdXRwdXQgPSByZXF1aXJlKCcuL3BhcnRzL0lucHV0T3V0cHV0UHJvcHMnKSxcclxuICAgIGlucHV0T3V0cHV0UGFyYW1ldGVyID0gcmVxdWlyZSgnLi9wYXJ0cy9JbnB1dE91dHB1dFBhcmFtZXRlclByb3BzJyk7XHJcblxyXG4vLyBDb25uZWN0b3JcclxudmFyIGNvbm5lY3RvckRldGFpbHMgPSByZXF1aXJlKCcuL3BhcnRzL0Nvbm5lY3RvckRldGFpbFByb3BzJyksXHJcbiAgICBjb25uZWN0b3JJbnB1dE91dHB1dCA9IHJlcXVpcmUoJy4vcGFydHMvQ29ubmVjdG9ySW5wdXRPdXRwdXRQcm9wcycpLFxyXG4gICAgY29ubmVjdG9ySW5wdXRPdXRwdXRQYXJhbWV0ZXIgPSByZXF1aXJlKCcuL3BhcnRzL0Nvbm5lY3RvcklucHV0T3V0cHV0UGFyYW1ldGVyUHJvcHMnKTtcclxuXHJcbi8vIHByb3BlcnRpZXNcclxudmFyIHByb3BlcnRpZXMgPSByZXF1aXJlKCcuL3BhcnRzL1Byb3BlcnRpZXNQcm9wcycpO1xyXG5cclxuLy8gam9iIGNvbmZpZ3VyYXRpb25cclxudmFyIGpvYkNvbmZpZ3VyYXRpb24gPSByZXF1aXJlKCcuL3BhcnRzL0pvYkNvbmZpZ3VyYXRpb25Qcm9wcycpO1xyXG5cclxuLy8gaGlzdG9yeSB0aW1lIHRvIGxpdmVcclxudmFyIGhpc3RvcnlUaW1lVG9MaXZlID0gcmVxdWlyZSgnLi9wYXJ0cy9IaXN0b3J5VGltZVRvTGl2ZVByb3BzJyk7XHJcblxyXG4vLyBjYW5kaWRhdGUgc3RhcnRlciBncm91cHMvdXNlcnNcclxudmFyIGNhbmRpZGF0ZVN0YXJ0ZXIgPSByZXF1aXJlKCcuL3BhcnRzL0NhbmRpZGF0ZVN0YXJ0ZXJQcm9wcycpO1xyXG5cclxuLy8gdGFza2xpc3RcclxudmFyIHRhc2tsaXN0ID0gcmVxdWlyZSgnLi9wYXJ0cy9UYXNrbGlzdFByb3BzJyk7XHJcblxyXG4vLyBleHRlcm5hbCB0YXNrIGNvbmZpZ3VyYXRpb25cclxudmFyIGV4dGVybmFsVGFza0NvbmZpZ3VyYXRpb24gPSByZXF1aXJlKCcuL3BhcnRzL0V4dGVybmFsVGFza0NvbmZpZ3VyYXRpb25Qcm9wcycpO1xyXG5cclxuLy8gZmllbGQgaW5qZWN0aW9uXHJcbnZhciBmaWVsZEluamVjdGlvbnMgPSByZXF1aXJlKCcuL3BhcnRzL0ZpZWxkSW5qZWN0aW9uUHJvcHMnKTtcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBldmVudERlZmluaXRpb25IZWxwZXIgPSByZXF1aXJlKCcuLi8uLi9oZWxwZXIvRXZlbnREZWZpbml0aW9uSGVscGVyJyksXHJcbiAgICBpbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi9oZWxwZXIvSW1wbGVtZW50YXRpb25UeXBlSGVscGVyJyk7XHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbnZhciBpc0V4dGVybmFsVGFza1ByaW9yaXR5RW5hYmxlZCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgLy8gc2hvdyBvbmx5IGlmIGVsZW1lbnQgaXMgYSBwcm9jZXNzLCBhIHBhcnRpY2lwYW50IC4uLlxyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgfHwgaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBidXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKSkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICB2YXIgZXh0ZXJuYWxCbyA9IEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5nZXRTZXJ2aWNlVGFza0xpa2VCdXNpbmVzc09iamVjdChlbGVtZW50KSxcclxuICAgICAgaXNFeHRlcm5hbFRhc2sgPSBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0SW1wbGVtZW50YXRpb25UeXBlKGV4dGVybmFsQm8pID09PSAnZXh0ZXJuYWwnO1xyXG5cclxuICAvLyAuLi4gb3IgYW4gZXh0ZXJuYWwgdGFzayB3aXRoIHNlbGVjdGVkIGV4dGVybmFsIGltcGxlbWVudGF0aW9uIHR5cGVcclxuICByZXR1cm4gISFJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuaXNFeHRlcm5hbENhcGFibGUoZXh0ZXJuYWxCbykgJiYgaXNFeHRlcm5hbFRhc2s7XHJcbn07XHJcblxyXG52YXIgaXNKb2JDb25maWdFbmFibGVkID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UHJvY2VzcycpIHx8IGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgYnVzaW5lc3NPYmplY3QuZ2V0KCdwcm9jZXNzUmVmJykpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gYXN5bmMgYmVoYXZpb3JcclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICBpZiAoYXN5bmNDYXBhYmxlSGVscGVyLmlzQXN5bmNCZWZvcmUoYm8pIHx8IGFzeW5jQ2FwYWJsZUhlbHBlci5pc0FzeW5jQWZ0ZXIoYm8pKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIHRpbWVyIGRlZmluaXRpb25cclxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46RXZlbnQnKSkge1xyXG4gICAgcmV0dXJuICEhZXZlbnREZWZpbml0aW9uSGVscGVyLmdldFRpbWVyRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59O1xyXG5cclxudmFyIGdldElucHV0T3V0cHV0UGFyYW1ldGVyTGFiZWwgPSBmdW5jdGlvbihwYXJhbSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGlmIChpcyhwYXJhbSwgJ2FjdGl2aXRpOklucHV0UGFyYW1ldGVyJykpIHtcclxuICAgIHJldHVybiB0cmFuc2xhdGUoJ0lucHV0IFBhcmFtZXRlcicpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGlzKHBhcmFtLCAnYWN0aXZpdGk6T3V0cHV0UGFyYW1ldGVyJykpIHtcclxuICAgIHJldHVybiB0cmFuc2xhdGUoJ091dHB1dCBQYXJhbWV0ZXInKTtcclxuICB9XHJcblxyXG4gIHJldHVybiAnJztcclxufTtcclxuXHJcbnZhciBnZXRMaXN0ZW5lckxhYmVsID0gZnVuY3Rpb24ocGFyYW0sIHRyYW5zbGF0ZSkge1xyXG5cclxuICBpZiAoaXMocGFyYW0sICdhY3Rpdml0aTpFeGVjdXRpb25MaXN0ZW5lcicpKSB7XHJcbiAgICByZXR1cm4gdHJhbnNsYXRlKCdFeGVjdXRpb24gTGlzdGVuZXInKTtcclxuICB9XHJcblxyXG4gIGlmIChpcyhwYXJhbSwgJ2FjdGl2aXRpOlRhc2tMaXN0ZW5lcicpKSB7XHJcbiAgICByZXR1cm4gdHJhbnNsYXRlKCdUYXNrIExpc3RlbmVyJyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gJyc7XHJcbn07XHJcblxyXG52YXIgUFJPQ0VTU19LRVlfSElOVCA9ICdUaGlzIG1hcHMgdG8gdGhlIHByb2Nlc3MgZGVmaW5pdGlvbiBrZXkuJztcclxudmFyIFRBU0tfS0VZX0hJTlQgPSAnVGhpcyBtYXBzIHRvIHRoZSB0YXNrIGRlZmluaXRpb24ga2V5Lic7XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVHZW5lcmFsVGFiR3JvdXBzKFxyXG4gICAgZWxlbWVudCwgY2FudmFzLCBicG1uRmFjdG9yeSxcclxuICAgIGVsZW1lbnRSZWdpc3RyeSwgZWxlbWVudFRlbXBsYXRlcywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIC8vIHJlZmVyIHRvIHRhcmdldCBlbGVtZW50IGZvciBleHRlcm5hbCBsYWJlbHNcclxuICBlbGVtZW50ID0gZWxlbWVudC5sYWJlbFRhcmdldCB8fCBlbGVtZW50O1xyXG5cclxuICB2YXIgZ2VuZXJhbEdyb3VwID0ge1xyXG4gICAgaWQ6ICdnZW5lcmFsJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0dlbmVyYWwnKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuXHJcbiAgdmFyIGlkT3B0aW9ucztcclxuICB2YXIgcHJvY2Vzc09wdGlvbnM7XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykpIHtcclxuICAgIGlkT3B0aW9ucyA9IHsgZGVzY3JpcHRpb246IFBST0NFU1NfS0VZX0hJTlQgfTtcclxuICB9XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpVc2VyVGFzaycpKSB7XHJcbiAgICBpZE9wdGlvbnMgPSB7IGRlc2NyaXB0aW9uOiBUQVNLX0tFWV9ISU5UIH07XHJcbiAgfVxyXG5cclxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgcHJvY2Vzc09wdGlvbnMgPSB7IHByb2Nlc3NJZERlc2NyaXB0aW9uOiBQUk9DRVNTX0tFWV9ISU5UIH07XHJcbiAgfVxyXG5cclxuICBpZFByb3BzKGdlbmVyYWxHcm91cCwgZWxlbWVudCwgdHJhbnNsYXRlLCBpZE9wdGlvbnMpO1xyXG4gIG5hbWVQcm9wcyhnZW5lcmFsR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBjYW52YXMsIHRyYW5zbGF0ZSk7XHJcbiAgcHJvY2Vzc1Byb3BzKGdlbmVyYWxHcm91cCwgZWxlbWVudCwgdHJhbnNsYXRlLCBwcm9jZXNzT3B0aW9ucyk7XHJcbiAgdmVyc2lvblRhZyhnZW5lcmFsR3JvdXAsIGVsZW1lbnQsIHRyYW5zbGF0ZSk7XHJcbiAgZXhlY3V0YWJsZVByb3BzKGdlbmVyYWxHcm91cCwgZWxlbWVudCwgdHJhbnNsYXRlKTtcclxuICBlbGVtZW50VGVtcGxhdGVDaG9vc2VyUHJvcHMoZ2VuZXJhbEdyb3VwLCBlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzLCB0cmFuc2xhdGUpO1xyXG5cclxuICB2YXIgY3VzdG9tRmllbGRzR3JvdXBzID0gZWxlbWVudFRlbXBsYXRlQ3VzdG9tUHJvcHMoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcywgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcblxyXG4gIHZhciBkZXRhaWxzR3JvdXAgPSB7XHJcbiAgICBpZDogJ2RldGFpbHMnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRGV0YWlscycpLFxyXG4gICAgZW50cmllczogW11cclxuICB9O1xyXG4gIHNlcnZpY2VUYXNrRGVsZWdhdGVQcm9wcyhkZXRhaWxzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG4gIHVzZXJUYXNrUHJvcHMoZGV0YWlsc0dyb3VwLCBlbGVtZW50LCB0cmFuc2xhdGUpO1xyXG4gIHNjcmlwdFByb3BzKGRldGFpbHNHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcbiAgbGlua1Byb3BzKGRldGFpbHNHcm91cCwgZWxlbWVudCwgdHJhbnNsYXRlKTtcclxuICBjYWxsQWN0aXZpdHlQcm9wcyhkZXRhaWxzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG4gIGV2ZW50UHJvcHMoZGV0YWlsc0dyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpO1xyXG4gIGVycm9yUHJvcHMoZGV0YWlsc0dyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKTtcclxuICBjb25kaXRpb25hbFByb3BzKGRldGFpbHNHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcbiAgc3RhcnRFdmVudEluaXRpYXRvcihkZXRhaWxzR3JvdXAsIGVsZW1lbnQsIHRyYW5zbGF0ZSk7IC8vIHRoaXMgbXVzdCBiZSB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBkZXRhaWxzIGdyb3VwIVxyXG5cclxuICB2YXIgbXVsdGlJbnN0YW5jZUdyb3VwID0ge1xyXG4gICAgaWQ6ICdtdWx0aUluc3RhbmNlJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ011bHRpIEluc3RhbmNlJyksXHJcbiAgICBlbnRyaWVzOiBbXVxyXG4gIH07XHJcbiAgbXVsdGlJbnN0YW5jZVByb3BzKG11bHRpSW5zdGFuY2VHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcblxyXG4gIHZhciBhc3luY0dyb3VwID0ge1xyXG4gICAgaWQgOiAnYXN5bmMnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQXN5bmNocm9ub3VzIENvbnRpbnVhdGlvbnMnKSxcclxuICAgIGVudHJpZXMgOiBbXVxyXG4gIH07XHJcbiAgYXN5bmNocm9ub3VzQ29udGludWF0aW9uUHJvcHMoYXN5bmNHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcblxyXG4gIHZhciBqb2JDb25maWd1cmF0aW9uR3JvdXAgPSB7XHJcbiAgICBpZCA6ICdqb2JDb25maWd1cmF0aW9uJyxcclxuICAgIGxhYmVsIDogdHJhbnNsYXRlKCdKb2IgQ29uZmlndXJhdGlvbicpLFxyXG4gICAgZW50cmllcyA6IFtdLFxyXG4gICAgZW5hYmxlZDogaXNKb2JDb25maWdFbmFibGVkXHJcbiAgfTtcclxuICBqb2JDb25maWd1cmF0aW9uKGpvYkNvbmZpZ3VyYXRpb25Hcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcblxyXG4gIHZhciBleHRlcm5hbFRhc2tHcm91cCA9IHtcclxuICAgIGlkIDogJ2V4dGVybmFsVGFza0NvbmZpZ3VyYXRpb24nLFxyXG4gICAgbGFiZWwgOiB0cmFuc2xhdGUoJ0V4dGVybmFsIFRhc2sgQ29uZmlndXJhdGlvbicpLFxyXG4gICAgZW50cmllcyA6IFtdLFxyXG4gICAgZW5hYmxlZDogaXNFeHRlcm5hbFRhc2tQcmlvcml0eUVuYWJsZWRcclxuICB9O1xyXG4gIGV4dGVybmFsVGFza0NvbmZpZ3VyYXRpb24oZXh0ZXJuYWxUYXNrR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuXHJcbiAgdmFyIGNhbmRpZGF0ZVN0YXJ0ZXJHcm91cCA9IHtcclxuICAgIGlkOiAnY2FuZGlkYXRlU3RhcnRlckNvbmZpZ3VyYXRpb24nLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ2FuZGlkYXRlIFN0YXJ0ZXIgQ29uZmlndXJhdGlvbicpLFxyXG4gICAgZW50cmllczogW11cclxuICB9O1xyXG4gIGNhbmRpZGF0ZVN0YXJ0ZXIoY2FuZGlkYXRlU3RhcnRlckdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgdmFyIGhpc3RvcnlUaW1lVG9MaXZlR3JvdXAgPSB7XHJcbiAgICBpZDogJ2hpc3RvcnlDb25maWd1cmF0aW9uJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0hpc3RvcnkgQ29uZmlndXJhdGlvbicpLFxyXG4gICAgZW50cmllczogW11cclxuICB9O1xyXG4gIGhpc3RvcnlUaW1lVG9MaXZlKGhpc3RvcnlUaW1lVG9MaXZlR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuICB2YXIgdGFza2xpc3RHcm91cCA9IHtcclxuICAgIGlkOiAndGFza2xpc3QnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVGFza2xpc3QgQ29uZmlndXJhdGlvbicpLFxyXG4gICAgZW50cmllczogW11cclxuICB9O1xyXG4gIHRhc2tsaXN0KHRhc2tsaXN0R3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuICB2YXIgZG9jdW1lbnRhdGlvbkdyb3VwID0ge1xyXG4gICAgaWQ6ICdkb2N1bWVudGF0aW9uJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0RvY3VtZW50YXRpb24nKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuICBkb2N1bWVudGF0aW9uUHJvcHMoZG9jdW1lbnRhdGlvbkdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgdmFyIGdyb3VwcyA9IFtdO1xyXG4gIGdyb3Vwcy5wdXNoKGdlbmVyYWxHcm91cCk7XHJcbiAgY3VzdG9tRmllbGRzR3JvdXBzLmZvckVhY2goZnVuY3Rpb24oZ3JvdXApIHtcclxuICAgIGdyb3Vwcy5wdXNoKGdyb3VwKTtcclxuICB9KTtcclxuICBncm91cHMucHVzaChkZXRhaWxzR3JvdXApO1xyXG4gIGdyb3Vwcy5wdXNoKGV4dGVybmFsVGFza0dyb3VwKTtcclxuICBncm91cHMucHVzaChtdWx0aUluc3RhbmNlR3JvdXApO1xyXG4gIGdyb3Vwcy5wdXNoKGFzeW5jR3JvdXApO1xyXG4gIGdyb3Vwcy5wdXNoKGpvYkNvbmZpZ3VyYXRpb25Hcm91cCk7XHJcbiAgZ3JvdXBzLnB1c2goY2FuZGlkYXRlU3RhcnRlckdyb3VwKTtcclxuICBncm91cHMucHVzaChoaXN0b3J5VGltZVRvTGl2ZUdyb3VwKTtcclxuICBncm91cHMucHVzaCh0YXNrbGlzdEdyb3VwKTtcclxuICBncm91cHMucHVzaChkb2N1bWVudGF0aW9uR3JvdXApO1xyXG5cclxuICByZXR1cm4gZ3JvdXBzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVWYXJpYWJsZXNUYWJHcm91cHMoZWxlbWVudCwgYnBtbkZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKSB7XHJcbiAgdmFyIHZhcmlhYmxlc0dyb3VwID0ge1xyXG4gICAgaWQgOiAndmFyaWFibGVzJyxcclxuICAgIGxhYmVsIDogdHJhbnNsYXRlKCdWYXJpYWJsZXMnKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuICB2YXJpYWJsZU1hcHBpbmcodmFyaWFibGVzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuICByZXR1cm4gW1xyXG4gICAgdmFyaWFibGVzR3JvdXBcclxuICBdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVGb3Jtc1RhYkdyb3VwcyhlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpIHtcclxuICB2YXIgZm9ybUdyb3VwID0ge1xyXG4gICAgaWQgOiAnZm9ybXMnLFxyXG4gICAgbGFiZWwgOiB0cmFuc2xhdGUoJ0Zvcm1zJyksXHJcbiAgICBlbnRyaWVzOiBbXVxyXG4gIH07XHJcbiAgZm9ybVByb3BzKGZvcm1Hcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcblxyXG4gIHJldHVybiBbXHJcbiAgICBmb3JtR3JvdXBcclxuICBdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVMaXN0ZW5lcnNUYWJHcm91cHMoZWxlbWVudCwgYnBtbkZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBsaXN0ZW5lcnNHcm91cCA9IHtcclxuICAgIGlkIDogJ2xpc3RlbmVycycsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdMaXN0ZW5lcnMnKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuXHJcbiAgdmFyIG9wdGlvbnMgPSBsaXN0ZW5lclByb3BzKGxpc3RlbmVyc0dyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgdmFyIGxpc3RlbmVyRGV0YWlsc0dyb3VwID0ge1xyXG4gICAgaWQ6ICdsaXN0ZW5lci1kZXRhaWxzJyxcclxuICAgIGVudHJpZXM6IFtdLFxyXG4gICAgZW5hYmxlZDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gb3B0aW9ucy5nZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfSxcclxuICAgIGxhYmVsOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBwYXJhbSA9IG9wdGlvbnMuZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuIGdldExpc3RlbmVyTGFiZWwocGFyYW0sIHRyYW5zbGF0ZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgbGlzdGVuZXJEZXRhaWxzKGxpc3RlbmVyRGV0YWlsc0dyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKTtcclxuXHJcbiAgdmFyIGxpc3RlbmVyRmllbGRzR3JvdXAgPSB7XHJcbiAgICBpZDogJ2xpc3RlbmVyLWZpZWxkcycsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdGaWVsZCBJbmplY3Rpb24nKSxcclxuICAgIGVudHJpZXM6IFtdLFxyXG4gICAgZW5hYmxlZDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gb3B0aW9ucy5nZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGxpc3RlbmVyRmllbGRzKGxpc3RlbmVyRmllbGRzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpO1xyXG5cclxuICByZXR1cm4gW1xyXG4gICAgbGlzdGVuZXJzR3JvdXAsXHJcbiAgICBsaXN0ZW5lckRldGFpbHNHcm91cCxcclxuICAgIGxpc3RlbmVyRmllbGRzR3JvdXBcclxuICBdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVJbnB1dE91dHB1dFRhYkdyb3VwcyhlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGlucHV0T3V0cHV0R3JvdXAgPSB7XHJcbiAgICBpZDogJ2lucHV0LW91dHB1dCcsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdQYXJhbWV0ZXJzJyksXHJcbiAgICBlbnRyaWVzOiBbXVxyXG4gIH07XHJcblxyXG4gIHZhciBvcHRpb25zID0gaW5wdXRPdXRwdXQoaW5wdXRPdXRwdXRHcm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSk7XHJcblxyXG4gIHZhciBpbnB1dE91dHB1dFBhcmFtZXRlckdyb3VwID0ge1xyXG4gICAgaWQ6ICdpbnB1dC1vdXRwdXQtcGFyYW1ldGVyJyxcclxuICAgIGVudHJpZXM6IFtdLFxyXG4gICAgZW5hYmxlZDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gb3B0aW9ucy5nZXRTZWxlY3RlZFBhcmFtZXRlcihlbGVtZW50LCBub2RlKTtcclxuICAgIH0sXHJcbiAgICBsYWJlbDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgcGFyYW0gPSBvcHRpb25zLmdldFNlbGVjdGVkUGFyYW1ldGVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gZ2V0SW5wdXRPdXRwdXRQYXJhbWV0ZXJMYWJlbChwYXJhbSwgdHJhbnNsYXRlKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBpbnB1dE91dHB1dFBhcmFtZXRlcihpbnB1dE91dHB1dFBhcmFtZXRlckdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKTtcclxuXHJcbiAgcmV0dXJuIFtcclxuICAgIGlucHV0T3V0cHV0R3JvdXAsXHJcbiAgICBpbnB1dE91dHB1dFBhcmFtZXRlckdyb3VwXHJcbiAgXTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlQ29ubmVjdG9yVGFiR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSkge1xyXG4gIHZhciBjb25uZWN0b3JEZXRhaWxzR3JvdXAgPSB7XHJcbiAgICBpZDogJ2Nvbm5lY3Rvci1kZXRhaWxzJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0RldGFpbHMnKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuXHJcbiAgY29ubmVjdG9yRGV0YWlscyhjb25uZWN0b3JEZXRhaWxzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuICB2YXIgY29ubmVjdG9ySW5wdXRPdXRwdXRHcm91cCA9IHtcclxuICAgIGlkOiAnY29ubmVjdG9yLWlucHV0LW91dHB1dCcsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdJbnB1dC9PdXRwdXQnKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuXHJcbiAgdmFyIG9wdGlvbnMgPSBjb25uZWN0b3JJbnB1dE91dHB1dChjb25uZWN0b3JJbnB1dE91dHB1dEdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgdmFyIGNvbm5lY3RvcklucHV0T3V0cHV0UGFyYW1ldGVyR3JvdXAgPSB7XHJcbiAgICBpZDogJ2Nvbm5lY3Rvci1pbnB1dC1vdXRwdXQtcGFyYW1ldGVyJyxcclxuICAgIGVudHJpZXM6IFtdLFxyXG4gICAgZW5hYmxlZDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gb3B0aW9ucy5nZXRTZWxlY3RlZFBhcmFtZXRlcihlbGVtZW50LCBub2RlKTtcclxuICAgIH0sXHJcbiAgICBsYWJlbDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgcGFyYW0gPSBvcHRpb25zLmdldFNlbGVjdGVkUGFyYW1ldGVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gZ2V0SW5wdXRPdXRwdXRQYXJhbWV0ZXJMYWJlbChwYXJhbSwgdHJhbnNsYXRlKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25uZWN0b3JJbnB1dE91dHB1dFBhcmFtZXRlcihjb25uZWN0b3JJbnB1dE91dHB1dFBhcmFtZXRlckdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKTtcclxuXHJcbiAgcmV0dXJuIFtcclxuICAgIGNvbm5lY3RvckRldGFpbHNHcm91cCxcclxuICAgIGNvbm5lY3RvcklucHV0T3V0cHV0R3JvdXAsXHJcbiAgICBjb25uZWN0b3JJbnB1dE91dHB1dFBhcmFtZXRlckdyb3VwXHJcbiAgXTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlRmllbGRJbmplY3Rpb25zVGFiR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZmllbGRHcm91cCA9IHtcclxuICAgIGlkOiAnZmllbGQtaW5qZWN0aW9ucy1wcm9wZXJ0aWVzJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0ZpZWxkIEluamVjdGlvbnMnKSxcclxuICAgIGVudHJpZXM6IFtdXHJcbiAgfTtcclxuXHJcbiAgZmllbGRJbmplY3Rpb25zKGZpZWxkR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuICByZXR1cm4gW1xyXG4gICAgZmllbGRHcm91cFxyXG4gIF07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgcHJvcGVydGllc0dyb3VwID0ge1xyXG4gICAgaWQgOiAnZXh0ZW5zaW9uRWxlbWVudHMtcHJvcGVydGllcycsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdQcm9wZXJ0aWVzJyksXHJcbiAgICBlbnRyaWVzOiBbXVxyXG4gIH07XHJcbiAgcHJvcGVydGllcyhwcm9wZXJ0aWVzR3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpO1xyXG5cclxuICByZXR1cm4gW1xyXG4gICAgcHJvcGVydGllc0dyb3VwXHJcbiAgXTtcclxufVxyXG5cclxuLy8gYWN0aXZpdGkgUHJvcGVydGllcyBQcm92aWRlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxuLyoqXHJcbiAqIEEgcHJvcGVydGllcyBwcm92aWRlciBmb3IgYWN0aXZpdGkgcmVsYXRlZCBwcm9wZXJ0aWVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xyXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXHJcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XHJcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcclxuICogQHBhcmFtIHtFbGVtZW50VGVtcGxhdGVzfSBlbGVtZW50VGVtcGxhdGVzXHJcbiAqIEBwYXJhbSB7VHJhbnNsYXRlfSB0cmFuc2xhdGVcclxuICovXHJcbmZ1bmN0aW9uIEFjdGl2aXRpUHJvcGVydGllc1Byb3ZpZGVyKFxyXG4gICAgZXZlbnRCdXMsIGNhbnZhcywgYnBtbkZhY3RvcnksXHJcbiAgICBlbGVtZW50UmVnaXN0cnksIGVsZW1lbnRUZW1wbGF0ZXMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICBQcm9wZXJ0aWVzQWN0aXZhdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xyXG5cclxuICB0aGlzLmdldFRhYnMgPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcblxyXG4gICAgdmFyIGdlbmVyYWxUYWIgPSB7XHJcbiAgICAgIGlkOiAnZ2VuZXJhbCcsXHJcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0dlbmVyYWwnKSxcclxuICAgICAgZ3JvdXBzOiBjcmVhdGVHZW5lcmFsVGFiR3JvdXBzKFxyXG4gICAgICAgIGVsZW1lbnQsIGNhbnZhcywgYnBtbkZhY3RvcnksXHJcbiAgICAgICAgZWxlbWVudFJlZ2lzdHJ5LCBlbGVtZW50VGVtcGxhdGVzLCB0cmFuc2xhdGUpXHJcbiAgICB9O1xyXG5cclxuICAgIHZhciB2YXJpYWJsZXNUYWIgPSB7XHJcbiAgICAgIGlkOiAndmFyaWFibGVzJyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmFyaWFibGVzJyksXHJcbiAgICAgIGdyb3VwczogY3JlYXRlVmFyaWFibGVzVGFiR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSlcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGZvcm1zVGFiID0ge1xyXG4gICAgICBpZDogJ2Zvcm1zJyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnRm9ybXMnKSxcclxuICAgICAgZ3JvdXBzOiBjcmVhdGVGb3Jtc1RhYkdyb3VwcyhlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpXHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBsaXN0ZW5lcnNUYWIgPSB7XHJcbiAgICAgIGlkOiAnbGlzdGVuZXJzJyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnTGlzdGVuZXJzJyksXHJcbiAgICAgIGdyb3VwczogY3JlYXRlTGlzdGVuZXJzVGFiR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSksXHJcbiAgICAgIGVuYWJsZWQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gIWV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRMaW5rRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpXHJcbiAgICAgICAgICB8fCAoIWlzKGVsZW1lbnQsICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnKVxyXG4gICAgICAgICAgJiYgZXZlbnREZWZpbml0aW9uSGVscGVyLmdldExpbmtFdmVudERlZmluaXRpb24oZWxlbWVudCkpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBpbnB1dE91dHB1dFRhYiA9IHtcclxuICAgICAgaWQ6ICdpbnB1dC1vdXRwdXQnLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdJbnB1dC9PdXRwdXQnKSxcclxuICAgICAgZ3JvdXBzOiBjcmVhdGVJbnB1dE91dHB1dFRhYkdyb3VwcyhlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpXHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBjb25uZWN0b3JUYWIgPSB7XHJcbiAgICAgIGlkOiAnY29ubmVjdG9yJyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ29ubmVjdG9yJyksXHJcbiAgICAgIGdyb3VwczogY3JlYXRlQ29ubmVjdG9yVGFiR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSksXHJcbiAgICAgIGVuYWJsZWQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgYm8gPSBpbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgICAgcmV0dXJuIGJvICYmIGltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5nZXRJbXBsZW1lbnRhdGlvblR5cGUoYm8pID09PSAnY29ubmVjdG9yJztcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgZmllbGRJbmplY3Rpb25zVGFiID0ge1xyXG4gICAgICBpZDogJ2ZpZWxkLWluamVjdGlvbnMnLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdGaWVsZCBJbmplY3Rpb25zJyksXHJcbiAgICAgIGdyb3VwczogY3JlYXRlRmllbGRJbmplY3Rpb25zVGFiR3JvdXBzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSlcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGV4dGVuc2lvbnNUYWIgPSB7XHJcbiAgICAgIGlkOiAnZXh0ZW5zaW9uRWxlbWVudHMnLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdFeHRlbnNpb25zJyksXHJcbiAgICAgIGdyb3VwczogY3JlYXRlRXh0ZW5zaW9uRWxlbWVudHNHcm91cHMoZWxlbWVudCwgYnBtbkZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSwgdHJhbnNsYXRlKVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBnZW5lcmFsVGFiLFxyXG4gICAgICB2YXJpYWJsZXNUYWIsXHJcbiAgICAgIGNvbm5lY3RvclRhYixcclxuICAgICAgZm9ybXNUYWIsXHJcbiAgICAgIGxpc3RlbmVyc1RhYixcclxuICAgICAgaW5wdXRPdXRwdXRUYWIsXHJcbiAgICAgIGZpZWxkSW5qZWN0aW9uc1RhYixcclxuICAgICAgZXh0ZW5zaW9uc1RhYlxyXG4gICAgXTtcclxuICB9O1xyXG5cclxufVxyXG5cclxuQWN0aXZpdGlQcm9wZXJ0aWVzUHJvdmlkZXIuJGluamVjdCA9IFtcclxuICAnZXZlbnRCdXMnLFxyXG4gICdjYW52YXMnLFxyXG4gICdicG1uRmFjdG9yeScsXHJcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXHJcbiAgJ2VsZW1lbnRUZW1wbGF0ZXMnLFxyXG4gICd0cmFuc2xhdGUnXHJcbl07XHJcblxyXG5pbmhlcml0cyhBY3Rpdml0aVByb3BlcnRpZXNQcm92aWRlciwgUHJvcGVydGllc0FjdGl2YXRvcik7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEFjdGl2aXRpUHJvcGVydGllc1Byb3ZpZGVyO1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhbiBpbnB1dCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHRoZSBnaXZlblxyXG4gKiBiaW5kaW5nIGFuZCB2YWx1ZS5cclxuICpcclxuICogQHBhcmFtIHtQcm9wZXJ0eUJpbmRpbmd9IGJpbmRpbmdcclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXHJcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFBhcmFtZXRlcihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcclxuICB2YXIgc2NyaXB0Rm9ybWF0ID0gYmluZGluZy5zY3JpcHRGb3JtYXQsXHJcbiAgICAgIHBhcmFtZXRlclZhbHVlLFxyXG4gICAgICBwYXJhbWV0ZXJEZWZpbml0aW9uO1xyXG5cclxuICBpZiAoc2NyaXB0Rm9ybWF0KSB7XHJcbiAgICBwYXJhbWV0ZXJEZWZpbml0aW9uID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdhY3Rpdml0aTpTY3JpcHQnLCB7XHJcbiAgICAgIHNjcmlwdEZvcm1hdDogc2NyaXB0Rm9ybWF0LFxyXG4gICAgICB2YWx1ZTogdmFsdWVcclxuICAgIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBwYXJhbWV0ZXJWYWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGJwbW5GYWN0b3J5LmNyZWF0ZSgnYWN0aXZpdGk6SW5wdXRQYXJhbWV0ZXInLCB7XHJcbiAgICBuYW1lOiBiaW5kaW5nLm5hbWUsXHJcbiAgICB2YWx1ZTogcGFyYW1ldGVyVmFsdWUsXHJcbiAgICBkZWZpbml0aW9uOiBwYXJhbWV0ZXJEZWZpbml0aW9uXHJcbiAgfSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZUlucHV0UGFyYW1ldGVyID0gY3JlYXRlSW5wdXRQYXJhbWV0ZXI7XHJcblxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhbiBvdXRwdXQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW5cclxuICogYmluZGluZyBhbmQgdmFsdWUuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlT3V0cHV0UGFyYW1ldGVyKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSkge1xyXG4gIHZhciBzY3JpcHRGb3JtYXQgPSBiaW5kaW5nLnNjcmlwdEZvcm1hdCxcclxuICAgICAgcGFyYW1ldGVyVmFsdWUsXHJcbiAgICAgIHBhcmFtZXRlckRlZmluaXRpb247XHJcblxyXG4gIGlmIChzY3JpcHRGb3JtYXQpIHtcclxuICAgIHBhcmFtZXRlckRlZmluaXRpb24gPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOlNjcmlwdCcsIHtcclxuICAgICAgc2NyaXB0Rm9ybWF0OiBzY3JpcHRGb3JtYXQsXHJcbiAgICAgIHZhbHVlOiBiaW5kaW5nLnNvdXJjZVxyXG4gICAgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHBhcmFtZXRlclZhbHVlID0gYmluZGluZy5zb3VyY2U7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gYnBtbkZhY3RvcnkuY3JlYXRlKCdhY3Rpdml0aTpPdXRwdXRQYXJhbWV0ZXInLCB7XHJcbiAgICBuYW1lOiB2YWx1ZSxcclxuICAgIHZhbHVlOiBwYXJhbWV0ZXJWYWx1ZSxcclxuICAgIGRlZmluaXRpb246IHBhcmFtZXRlckRlZmluaXRpb25cclxuICB9KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuY3JlYXRlT3V0cHV0UGFyYW1ldGVyID0gY3JlYXRlT3V0cHV0UGFyYW1ldGVyO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYWN0aXZpdGkgcHJvcGVydHkgZnJvbSB0aGUgZ2l2ZW4gYmluZGluZy5cclxuICpcclxuICogQHBhcmFtIHtQcm9wZXJ0eUJpbmRpbmd9IGJpbmRpbmdcclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXHJcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aVByb3BlcnR5KGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSkge1xyXG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOlByb3BlcnR5Jywge1xyXG4gICAgbmFtZTogYmluZGluZy5uYW1lLFxyXG4gICAgdmFsdWU6IHZhbHVlIHx8ICcnXHJcbiAgfSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZUFjdGl2aXRpUHJvcGVydHkgPSBjcmVhdGVBY3Rpdml0aVByb3BlcnR5O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYWN0aXZpdGk6aW4gZWxlbWVudCBmcm9tIGdpdmVuIGJpbmRpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlQWN0aXZpdGlJbihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcclxuXHJcbiAgdmFyIHByb3BlcnRpZXMgPSBjcmVhdGVBY3Rpdml0aUluT3V0QXR0cnMoYmluZGluZywgdmFsdWUpO1xyXG5cclxuICByZXR1cm4gYnBtbkZhY3RvcnkuY3JlYXRlKCdhY3Rpdml0aTpJbicsIHByb3BlcnRpZXMpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVBY3Rpdml0aUluID0gY3JlYXRlQWN0aXZpdGlJbjtcclxuXHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFjdGl2aXRpOmluIHdpdGggYnVzaW5lc3NLZXkgZWxlbWVudCBmcm9tIGdpdmVuIGJpbmRpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlQWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcclxuICByZXR1cm4gYnBtbkZhY3RvcnkuY3JlYXRlKCdhY3Rpdml0aTpJbicsIHtcclxuICAgIGJ1c2luZXNzS2V5OiB2YWx1ZVxyXG4gIH0pO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVBY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5ID0gY3JlYXRlQWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleTtcclxuXHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFjdGl2aXRpOm91dCBlbGVtZW50IGZyb20gZ2l2ZW4gYmluZGluZy5cclxuICpcclxuICogQHBhcmFtIHtQcm9wZXJ0eUJpbmRpbmd9IGJpbmRpbmdcclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXHJcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aU91dChiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcclxuICB2YXIgcHJvcGVydGllcyA9IGNyZWF0ZUFjdGl2aXRpSW5PdXRBdHRycyhiaW5kaW5nLCB2YWx1ZSk7XHJcblxyXG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOk91dCcsIHByb3BlcnRpZXMpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVBY3Rpdml0aU91dCA9IGNyZWF0ZUFjdGl2aXRpT3V0O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYWN0aXZpdGk6ZXhlY3V0aW9uTGlzdGVuZXIgZWxlbWVudCBjb250YWluaW5nIGFuIGlubGluZSBzY3JpcHQgZnJvbSBnaXZlbiBiaW5kaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5QmluZGluZ30gYmluZGluZ1xyXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcclxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZUFjdGl2aXRpRXhlY3V0aW9uTGlzdGVuZXJTY3JpcHQoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KSB7XHJcbiAgdmFyIHNjcmlwdEZvcm1hdCA9IGJpbmRpbmcuc2NyaXB0Rm9ybWF0LFxyXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSxcclxuICAgICAgcGFyYW1ldGVyRGVmaW5pdGlvbjtcclxuXHJcbiAgaWYgKHNjcmlwdEZvcm1hdCkge1xyXG4gICAgcGFyYW1ldGVyRGVmaW5pdGlvbiA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYWN0aXZpdGk6U2NyaXB0Jywge1xyXG4gICAgICBzY3JpcHRGb3JtYXQ6IHNjcmlwdEZvcm1hdCxcclxuICAgICAgdmFsdWU6IHZhbHVlXHJcbiAgICB9KTtcclxuICB9IGVsc2Uge1xyXG4gICAgcGFyYW1ldGVyVmFsdWUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOkV4ZWN1dGlvbkxpc3RlbmVyJywge1xyXG4gICAgZXZlbnQ6IGJpbmRpbmcuZXZlbnQsXHJcbiAgICB2YWx1ZTogcGFyYW1ldGVyVmFsdWUsXHJcbiAgICBzY3JpcHQ6IHBhcmFtZXRlckRlZmluaXRpb25cclxuICB9KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuY3JlYXRlQWN0aXZpdGlFeGVjdXRpb25MaXN0ZW5lclNjcmlwdCA9IGNyZWF0ZUFjdGl2aXRpRXhlY3V0aW9uTGlzdGVuZXJTY3JpcHQ7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFjdGl2aXRpOmZpZWxkIGVsZW1lbnQgY29udGFpbmluZyBzdHJpbmcgb3IgZXhwcmVzc2lvbiBmcm9tIGdpdmVuIGJpbmRpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlQWN0aXZpdGlGaWVsZEluamVjdGlvbihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcclxuICB2YXIgREVGQVVMVF9QUk9QUyA9IHtcclxuICAgICdzdHJpbmcnOiB1bmRlZmluZWQsXHJcbiAgICAnZXhwcmVzc2lvbic6IHVuZGVmaW5lZCxcclxuICAgICduYW1lJzogdW5kZWZpbmVkXHJcbiAgfTtcclxuXHJcbiAgdmFyIHByb3BzID0gYXNzaWduKHt9LCBERUZBVUxUX1BST1BTKTtcclxuXHJcbiAgaWYgKCFiaW5kaW5nLmV4cHJlc3Npb24pIHtcclxuICAgIHByb3BzLnN0cmluZyA9IHZhbHVlO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBwcm9wcy5leHByZXNzaW9uID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByb3BzLm5hbWUgPSBiaW5kaW5nLm5hbWU7XHJcblxyXG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOkZpZWxkJywgcHJvcHMpO1xyXG59XHJcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZUFjdGl2aXRpRmllbGRJbmplY3Rpb24gPSBjcmVhdGVBY3Rpdml0aUZpZWxkSW5qZWN0aW9uO1xyXG5cclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBwcm9wZXJ0aWVzIGZvciBhY3Rpdml0aTppbiBhbmQgYWN0aXZpdGk6b3V0IHR5cGVzLlxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlQWN0aXZpdGlJbk91dEF0dHJzKGJpbmRpbmcsIHZhbHVlKSB7XHJcblxyXG4gIHZhciBwcm9wZXJ0aWVzID0ge307XHJcblxyXG4gIC8vIGFjdGl2aXRpOmluIHNvdXJjZShFeHByZXNzaW9uKSB0YXJnZXRcclxuICBpZiAoYmluZGluZy50YXJnZXQpIHtcclxuXHJcbiAgICBwcm9wZXJ0aWVzLnRhcmdldCA9IGJpbmRpbmcudGFyZ2V0O1xyXG5cclxuICAgIGlmIChiaW5kaW5nLmV4cHJlc3Npb24pIHtcclxuICAgICAgcHJvcGVydGllcy5zb3VyY2VFeHByZXNzaW9uID0gdmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwcm9wZXJ0aWVzLnNvdXJjZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH0gZWxzZVxyXG5cclxuICAvLyBhY3Rpdml0aTooaW58b3V0KSB2YXJpYWJsZXMgbG9jYWxcclxuICBpZiAoYmluZGluZy52YXJpYWJsZXMpIHtcclxuICAgIHByb3BlcnRpZXMudmFyaWFibGVzID0gJ2FsbCc7XHJcblxyXG4gICAgaWYgKGJpbmRpbmcudmFyaWFibGVzID09PSAnbG9jYWwnKSB7XHJcbiAgICAgIHByb3BlcnRpZXMubG9jYWwgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gYWN0aXZpdGk6b3V0IHNvdXJjZShFeHByZXNzaW9uKSB0YXJnZXRcclxuICBlbHNlIHtcclxuICAgIHByb3BlcnRpZXMudGFyZ2V0ID0gdmFsdWU7XHJcblxyXG4gICAgWyAnc291cmNlJywgJ3NvdXJjZUV4cHJlc3Npb24nIF0uZm9yRWFjaChmdW5jdGlvbihrKSB7XHJcbiAgICAgIGlmIChiaW5kaW5nW2tdKSB7XHJcbiAgICAgICAgcHJvcGVydGllc1trXSA9IGJpbmRpbmdba107XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbn1cclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcclxuXHJcbnZhciBnZXRUZW1wbGF0ZSA9IHJlcXVpcmUoJy4vSGVscGVyJykuZ2V0VGVtcGxhdGU7XHJcblxyXG52YXIgUHJvcGVydGllc0FjdGl2YXRvciA9IHJlcXVpcmUoJy4uLy4uLy4uL1Byb3BlcnRpZXNBY3RpdmF0b3InKTtcclxuXHJcbnZhciBISUdIRVJfUFJJT1JJVFkgPSAxMTAwO1xyXG5cclxuLyoqXHJcbiAqIEFwcGxpZXMgdGVtcGxhdGUgdmlzaWJpbGl0eSBzZXR0aW5ncy5cclxuICpcclxuICogQ29udHJvbGxlZCB1c2luZyBgZW50cmllc1Zpc2libGVgIG9uIHRlbXBsYXRlIGNvbmZpZyBvYmplY3Q6XHJcbiAqXHJcbiAqIGBgYGpzb25cclxuICogICAgIFwiZW50cmllc1Zpc2libGVcIjoge1xyXG4gKiAgICAgICBcIl9hbGxcIjogdHJ1ZXxmYWxzZSxcclxuICogICAgICAgXCJlbnRyeU5hbWVcIjogdHJ1ZXxmYWxzZSxcclxuICogICAgICAgLi4uXHJcbiAqICAgICB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xyXG4gKiBAcGFyYW0ge0VsZW1lbnRUZW1wbGF0ZXN9IGVsZW1lbnRUZW1wbGF0ZXNcclxuICovXHJcbmZ1bmN0aW9uIEN1c3RvbUVsZW1lbnRzUHJvcGVydGllc0FjdGl2YXRvcihldmVudEJ1cywgZWxlbWVudFRlbXBsYXRlcykge1xyXG4gIFByb3BlcnRpZXNBY3RpdmF0b3IuY2FsbCh0aGlzLCBldmVudEJ1cywgSElHSEVSX1BSSU9SSVRZKTtcclxuXHJcbiAgdGhpcy5pc0VudHJ5VmlzaWJsZSA9IGZ1bmN0aW9uKGVudHJ5LCBlbGVtZW50KSB7XHJcblxyXG4gICAgdmFyIHRlbXBsYXRlID0gZ2V0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcyk7XHJcblxyXG4gICAgaWYgKHRlbXBsYXRlICYmICFpc0VudHJ5VmlzaWJsZShlbnRyeSwgdGVtcGxhdGUpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICB0aGlzLmlzUHJvcGVydHlFZGl0YWJsZSA9IGZ1bmN0aW9uKGVudHJ5LCBwcm9wZXJ0eU5hbWUsIGVsZW1lbnQpIHtcclxuXHJcbiAgICB2YXIgdGVtcGxhdGUgPSBnZXRUZW1wbGF0ZShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzKTtcclxuXHJcbiAgICBpZiAodGVtcGxhdGUgJiYgIWlzRW50cnlFZGl0YWJsZShlbnRyeSwgdGVtcGxhdGUpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9O1xyXG59XHJcblxyXG5DdXN0b21FbGVtZW50c1Byb3BlcnRpZXNBY3RpdmF0b3IuJGluamVjdCA9IFsgJ2V2ZW50QnVzJywgJ2VsZW1lbnRUZW1wbGF0ZXMnIF07XHJcblxyXG5pbmhlcml0cyhDdXN0b21FbGVtZW50c1Byb3BlcnRpZXNBY3RpdmF0b3IsIFByb3BlcnRpZXNBY3RpdmF0b3IpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDdXN0b21FbGVtZW50c1Byb3BlcnRpZXNBY3RpdmF0b3I7XHJcblxyXG5cclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxudmFyIENVU1RPTV9QUk9QRVJUSUVTX1BBVFRFUk4gPSAvXmN1c3RvbS0vO1xyXG5cclxudmFyIERFRkFVTFRfRU5UUklFU19WSVNJQkxFID0ge1xyXG4gIF9hbGw6IGZhbHNlLFxyXG4gIGlkOiB0cnVlLFxyXG4gIG5hbWU6IHRydWVcclxufTtcclxuXHJcbmZ1bmN0aW9uIGlzQ3VzdG9tRW50cnkoZW50cnkpIHtcclxuICByZXR1cm4gQ1VTVE9NX1BST1BFUlRJRVNfUEFUVEVSTi50ZXN0KGVudHJ5LmlkKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNFbnRyeVZpc2libGUoZW50cnksIHRlbXBsYXRlKSB7XHJcblxyXG4gIHZhciBlbnRyeUlkID0gZW50cnkuaWQ7XHJcblxyXG4gIGlmIChlbnRyeUlkID09PSAnZWxlbWVudFRlbXBsYXRlLWNob29zZXInIHx8IGlzQ3VzdG9tRW50cnkoZW50cnkpKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHZhciBlbnRyaWVzVmlzaWJsZSA9IHRlbXBsYXRlLmVudHJpZXNWaXNpYmxlIHx8IERFRkFVTFRfRU5UUklFU19WSVNJQkxFO1xyXG5cclxuICBpZiAodHlwZW9mIGVudHJpZXNWaXNpYmxlID09PSAnYm9vbGVhbicpIHtcclxuICAgIHJldHVybiBlbnRyaWVzVmlzaWJsZTtcclxuICB9XHJcblxyXG4gIHZhciBkZWZhdWx0VmlzaWJsZSA9IGVudHJpZXNWaXNpYmxlLl9hbGwgfHwgZmFsc2UsXHJcbiAgICAgIGVudHJ5VmlzaWJsZSA9IGVudHJpZXNWaXNpYmxlW2VudHJ5SWRdO1xyXG5cclxuICAvLyBkID0gdHJ1ZSwgZSA9IGZhbHNlID0+IGZhbHNlXHJcbiAgLy8gZCA9IGZhbHNlLCBlID0gdHJ1ZSA9PiB0cnVlXHJcbiAgLy8gZCA9IGZhbHNlLCBlID0gZmFsc2VcclxuICByZXR1cm4gKFxyXG4gICAgKGRlZmF1bHRWaXNpYmxlID09PSB0cnVlICYmIGVudHJ5VmlzaWJsZSAhPT0gZmFsc2UpIHx8XHJcbiAgICAoZGVmYXVsdFZpc2libGUgPT09IGZhbHNlICYmIGVudHJ5VmlzaWJsZSA9PT0gdHJ1ZSlcclxuICApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0VudHJ5RWRpdGFibGUoZW50cnksIHRlbXBsYXRlKSB7XHJcblxyXG4gIHZhciBwcm9wZXJ0eTtcclxuXHJcbiAgaWYgKGlzQ3VzdG9tRW50cnkoZW50cnkpKSB7XHJcbiAgICBwcm9wZXJ0eSA9IGdldFByb3BlcnR5KHRlbXBsYXRlLCBlbnRyeSk7XHJcblxyXG4gICAgcmV0dXJuIHByb3BlcnR5ICYmIHByb3BlcnR5LmVkaXRhYmxlICE9PSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eSh0ZW1wbGF0ZSwgZW50cnkpIHtcclxuXHJcbiAgdmFyIGluZGV4O1xyXG4gIHZhciBpZHggPSBlbnRyeS5pZC5yZXBsYWNlKCdjdXN0b20tJyArIHRlbXBsYXRlLmlkICsgJy0nLCAnJyk7XHJcbiAgaWYgKGlkeC5pbmRleE9mKCctJykgIT09IC0xKSB7XHJcbiAgICB2YXIgaW5kZXhlcyA9IGlkeC5zcGxpdCgnLScpO1xyXG4gICAgaWYgKGluZGV4ZXMubGVuZ3RoID09IDIpIHtcclxuICAgICAgdmFyIHNjb3BlTmFtZSA9IGluZGV4ZXNbMF0ucmVwbGFjZSgvXy9nLCAnOicpO1xyXG4gICAgICBpbmRleCA9IHBhcnNlSW50KGluZGV4ZXNbMV0sIDEwKTtcclxuICAgICAgaWYgKHNjb3BlTmFtZSAmJiAhaXNOYU4oaW5kZXgpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlLnNjb3Blc1tzY29wZU5hbWVdLnByb3BlcnRpZXNbaW5kZXhdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGluZGV4ID0gcGFyc2VJbnQoaWR4LCAxMCk7XHJcbiAgICBpZiAoIWlzTmFOKGluZGV4KSkge1xyXG4gICAgICByZXR1cm4gdGVtcGxhdGUucHJvcGVydGllc1tpbmRleF07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBleHRyYWN0IHByb3BlcnR5IGluZGV4IGZvciBlbnRyeSA8JyArIGVudHJ5LmlkICsgJz4nKTtcclxufVxyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgdmFsdWVzID0gcmVxdWlyZSgnbG9kYXNoL3ZhbHVlcycpO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBndXkga25vd2luZyBhbGwgY29uZmlndXJlZCBlbGVtZW50IHRlbXBsYXRlcy5cclxuICpcclxuICogVGhpcyByZWdpc3RyeSB3b24ndCB2YWxpZGF0ZS4gVXNlIHRoZSB7QGxpbmsgVmFsaWRhdG9yfVxyXG4gKiB0byB2ZXJpZnkgYSB0ZW1wbGF0ZSBpcyB2YWxpZCBwcmlvciB0byBhZGRpbmcgaXQgdG9cclxuICogdGhpcyByZWdpc3RyeS5cclxuICovXHJcbmZ1bmN0aW9uIEVsZW1lbnRUZW1wbGF0ZXMoKSB7XHJcblxyXG4gIHRoaXMuX3RlbXBsYXRlcyA9IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBrbm93biBlbGVtZW50IHRlbXBsYXRlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXk8VGVtcGxhdGVEZXNjcmlwdG9yPn0gZGVzY3JpcHRvcnNcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0VsZW1lbnRUZW1wbGF0ZXN9XHJcbiAgICovXHJcbiAgdGhpcy5zZXQgPSBmdW5jdGlvbihkZXNjcmlwdG9ycykge1xyXG5cclxuICAgIHZhciB0ZW1wbGF0ZXMgPSB0aGlzLl90ZW1wbGF0ZXMgPSB7fTtcclxuXHJcbiAgICBkZXNjcmlwdG9ycy5mb3JFYWNoKGZ1bmN0aW9uKGRlc2NyaXB0b3IpIHtcclxuICAgICAgdGVtcGxhdGVzW2Rlc2NyaXB0b3IuaWRdID0gZGVzY3JpcHRvcjtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0ZW1wbGF0ZSBkZXNjcmlwdG9yIHdpdGggZ2l2ZW4gaWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gaWRcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge1RlbXBsYXRlRGVzY3JpcHRvcn1cclxuICAgKi9cclxuICB0aGlzLmdldCA9IGZ1bmN0aW9uKGlkKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVzW2lkXTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYWxsIGtub3duIHRlbXBsYXRlIGRlc2NyaXB0b3JzLlxyXG4gICAqXHJcbiAgICogQHJldHVybiB7QXJyYXk8VGVtcGxhdGVEZXNjcmlwdG9yPn1cclxuICAgKi9cclxuICB0aGlzLmdldEFsbCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHZhbHVlcyh0aGlzLl90ZW1wbGF0ZXMpO1xyXG4gIH07XHJcblxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVsZW1lbnRUZW1wbGF0ZXM7IiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIFZhbGlkYXRvciA9IHJlcXVpcmUoJy4vVmFsaWRhdG9yJyk7XHJcblxyXG4vKipcclxuICogVGhlIGd1eSByZXNwb25zaWJsZSBmb3IgdGVtcGxhdGUgbG9hZGluZy5cclxuICpcclxuICogUHJvdmlkZSB0aGUgYWN0dWFsIHRlbXBsYXRlcyB2aWEgdGhlIGBjb25maWcuZWxlbWVudFRlbXBsYXRlc2AuXHJcbiAqXHJcbiAqIFRoYXQgY29uZmlndXJhdGlvbiBjYW4gZWl0aGVyIGJlIGFuIGFycmF5IG9mIHRlbXBsYXRlXHJcbiAqIGRlc2NyaXB0b3JzIG9yIGEgbm9kZSBzdHlsZSBjYWxsYmFjayB0byByZXRyaWV2ZVxyXG4gKiB0aGUgdGVtcGxhdGVzIGFzeW5jaHJvbm91c2x5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5PFRlbXBsYXRlRGVzY3JpcHRvcj58RnVuY3Rpb259IGxvYWRUZW1wbGF0ZXNcclxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcclxuICogQHBhcmFtIHtFbGVtZW50VGVtcGxhdGVzfSBlbGVtZW50VGVtcGxhdGVzXHJcbiAqL1xyXG5mdW5jdGlvbiBFbGVtZW50VGVtcGxhdGVzTG9hZGVyKGxvYWRUZW1wbGF0ZXMsIGV2ZW50QnVzLCBlbGVtZW50VGVtcGxhdGVzKSB7XHJcbiAgdGhpcy5fbG9hZFRlbXBsYXRlcyA9IGxvYWRUZW1wbGF0ZXM7XHJcbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcclxuICB0aGlzLl9lbGVtZW50VGVtcGxhdGVzID0gZWxlbWVudFRlbXBsYXRlcztcclxuXHJcbiAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICBldmVudEJ1cy5vbignZGlhZ3JhbS5pbml0JywgZnVuY3Rpb24oKSB7XHJcbiAgICBzZWxmLnJlbG9hZCgpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVsZW1lbnRUZW1wbGF0ZXNMb2FkZXI7XHJcblxyXG5FbGVtZW50VGVtcGxhdGVzTG9hZGVyLiRpbmplY3QgPSBbXHJcbiAgJ2NvbmZpZy5lbGVtZW50VGVtcGxhdGVzJyxcclxuICAnZXZlbnRCdXMnLFxyXG4gICdlbGVtZW50VGVtcGxhdGVzJ1xyXG5dO1xyXG5cclxuXHJcbkVsZW1lbnRUZW1wbGF0ZXNMb2FkZXIucHJvdG90eXBlLnJlbG9hZCA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gIHZhciBsb2FkVGVtcGxhdGVzID0gdGhpcy5fbG9hZFRlbXBsYXRlcztcclxuXHJcbiAgLy8gbm8gdGVtcGxhdGVzIHNwZWNpZmllZFxyXG4gIGlmICh0eXBlb2YgbG9hZFRlbXBsYXRlcyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIC8vIHRlbXBsYXRlIGxvYWRlciBmdW5jdGlvbiBzcGVjaWZpZWRcclxuICBpZiAodHlwZW9mIGxvYWRUZW1wbGF0ZXMgPT09ICdmdW5jdGlvbicpIHtcclxuXHJcbiAgICByZXR1cm4gbG9hZFRlbXBsYXRlcyhmdW5jdGlvbihlcnIsIHRlbXBsYXRlcykge1xyXG5cclxuICAgICAgaWYgKGVycikge1xyXG4gICAgICAgIHJldHVybiBzZWxmLnRlbXBsYXRlRXJyb3JzKFsgZXJyIF0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZWxmLnNldFRlbXBsYXRlcyh0ZW1wbGF0ZXMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyB0ZW1wbGF0ZXMgYXJyYXkgc3BlY2lmaWVkXHJcbiAgaWYgKGxvYWRUZW1wbGF0ZXMubGVuZ3RoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXRUZW1wbGF0ZXMobG9hZFRlbXBsYXRlcyk7XHJcbiAgfVxyXG5cclxufTtcclxuXHJcbkVsZW1lbnRUZW1wbGF0ZXNMb2FkZXIucHJvdG90eXBlLnNldFRlbXBsYXRlcyA9IGZ1bmN0aW9uKHRlbXBsYXRlcykge1xyXG5cclxuICB2YXIgZWxlbWVudFRlbXBsYXRlcyA9IHRoaXMuX2VsZW1lbnRUZW1wbGF0ZXM7XHJcblxyXG4gIHZhciB2YWxpZGF0b3IgPSBuZXcgVmFsaWRhdG9yKCkuYWRkQWxsKHRlbXBsYXRlcyk7XHJcblxyXG4gIHZhciBlcnJvcnMgPSB2YWxpZGF0b3IuZ2V0RXJyb3JzKCksXHJcbiAgICAgIHZhbGlkVGVtcGxhdGVzID0gdmFsaWRhdG9yLmdldFZhbGlkVGVtcGxhdGVzKCk7XHJcblxyXG4gIGVsZW1lbnRUZW1wbGF0ZXMuc2V0KHZhbGlkVGVtcGxhdGVzKTtcclxuXHJcbiAgaWYgKGVycm9ycy5sZW5ndGgpIHtcclxuICAgIHRoaXMudGVtcGxhdGVFcnJvcnMoZXJyb3JzKTtcclxuICB9XHJcblxyXG4gIHRoaXMudGVtcGxhdGVzQ2hhbmdlZCgpO1xyXG59O1xyXG5cclxuRWxlbWVudFRlbXBsYXRlc0xvYWRlci5wcm90b3R5cGUudGVtcGxhdGVzQ2hhbmdlZCA9IGZ1bmN0aW9uKCkge1xyXG4gIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2VsZW1lbnRUZW1wbGF0ZXMuY2hhbmdlZCcpO1xyXG59O1xyXG5cclxuRWxlbWVudFRlbXBsYXRlc0xvYWRlci5wcm90b3R5cGUudGVtcGxhdGVFcnJvcnMgPSBmdW5jdGlvbihlcnJvcnMpIHtcclxuICB0aGlzLl9ldmVudEJ1cy5maXJlKCdlbGVtZW50VGVtcGxhdGVzLmVycm9ycycsIHtcclxuICAgIGVycm9yczogZXJyb3JzXHJcbiAgfSk7XHJcbn07IiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBpc0FueSA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsJykuaXNBbnk7XHJcblxyXG52YXIgZmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9maW5kJyk7XHJcblxyXG5cclxudmFyIFRFTVBMQVRFX0FUVFIgPSAnYWN0aXZpdGk6bW9kZWxlclRlbXBsYXRlJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgQlBNTiAyLjAgZXh0ZW5zaW9uIGF0dHJpYnV0ZSBuYW1lIHVuZGVyXHJcbiAqIHdoaWNoIHRoZSBlbGVtZW50IHRlbXBsYXRlIGlzIHN0b3JlZC5cclxuICpcclxuICogQHR5cGUge1N0cmluZ31cclxuICovXHJcbm1vZHVsZS5leHBvcnRzLlRFTVBMQVRFX0FUVFIgPSBURU1QTEFURV9BVFRSO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGVtcGxhdGUgaWQgZm9yIGEgZ2l2ZW4gZGlhZ3JhbSBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge1N0cmluZ31cclxuICovXHJcbmZ1bmN0aW9uIGdldFRlbXBsYXRlSWQoZWxlbWVudCkge1xyXG5cclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgaWYgKGJvKSB7XHJcbiAgICByZXR1cm4gYm8uZ2V0KFRFTVBMQVRFX0FUVFIpO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuZ2V0VGVtcGxhdGVJZCA9IGdldFRlbXBsYXRlSWQ7XHJcblxyXG5cclxuLyoqXHJcbiAqIEdldCB0ZW1wbGF0ZSBvZiBhIGdpdmVuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge0VsZW1lbnRUZW1wbGF0ZXN9IGVsZW1lbnRUZW1wbGF0ZXNcclxuICpcclxuICogQHJldHVybiB7VGVtcGxhdGVEZWZpbml0aW9ufVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcykge1xyXG4gIHZhciBpZCA9IGdldFRlbXBsYXRlSWQoZWxlbWVudCk7XHJcblxyXG4gIHJldHVybiBpZCAmJiBlbGVtZW50VGVtcGxhdGVzLmdldChpZCk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmdldFRlbXBsYXRlID0gZ2V0VGVtcGxhdGU7XHJcblxyXG4vKipcclxuICogR2V0IGRlZmF1bHQgdGVtcGxhdGUgZm9yIGEgZ2l2ZW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XHJcbiAqIEBwYXJhbSB7RWxlbWVudFRlbXBsYXRlc30gZWxlbWVudFRlbXBsYXRlc1xyXG4gKlxyXG4gKiBAcmV0dXJuIHtUZW1wbGF0ZURlZmluaXRpb259XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXREZWZhdWx0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcykge1xyXG5cclxuICAvLyByZXR1cm4gZmlyc3QgZGVmYXVsdCB0ZW1wbGF0ZSwgaWYgYW55IGV4aXN0c1xyXG4gIHJldHVybiAoXHJcbiAgICBlbGVtZW50VGVtcGxhdGVzLmdldEFsbCgpLmZpbHRlcihmdW5jdGlvbih0KSB7XHJcbiAgICAgIHJldHVybiBpc0FueShlbGVtZW50LCB0LmFwcGxpZXNUbykgJiYgdC5pc0RlZmF1bHQ7XHJcbiAgICB9KVxyXG4gIClbMF07XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmdldERlZmF1bHRUZW1wbGF0ZSA9IGdldERlZmF1bHRUZW1wbGF0ZTtcclxuXHJcblxyXG4vKipcclxuICogRmluZCBleHRlbnNpb24gd2l0aCBnaXZlbiB0eXBlIGluXHJcbiAqIEJQTU4gZWxlbWVudCwgZGlhZ3JhbSBlbGVtZW50IG9yIEV4dGVuc2lvbkVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudHxkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSB0aGUgZXh0ZW5zaW9uXHJcbiAqL1xyXG5mdW5jdGlvbiBmaW5kRXh0ZW5zaW9uKGVsZW1lbnQsIHR5cGUpIHtcclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgdmFyIGV4dGVuc2lvbkVsZW1lbnRzO1xyXG5cclxuICBpZiAoaXMoYm8sICdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJykpIHtcclxuICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gYm87XHJcbiAgfSBlbHNlIHtcclxuICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gYm8uZXh0ZW5zaW9uRWxlbWVudHM7XHJcbiAgfVxyXG5cclxuICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHJldHVybiBmaW5kKGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIGZ1bmN0aW9uKGUpIHtcclxuICAgIHJldHVybiBpcyhlLCB0eXBlKTtcclxuICB9KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuZmluZEV4dGVuc2lvbiA9IGZpbmRFeHRlbnNpb247XHJcblxyXG5cclxuZnVuY3Rpb24gZmluZEV4dGVuc2lvbnMoZWxlbWVudCwgdHlwZXMpIHtcclxuICB2YXIgZXh0ZW5zaW9uRWxlbWVudHMgPSBnZXRFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcclxuXHJcbiAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJykuZmlsdGVyKGZ1bmN0aW9uKGUpIHtcclxuICAgIHJldHVybiBpc0FueShlLCB0eXBlcyk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmZpbmRFeHRlbnNpb25zID0gZmluZEV4dGVuc2lvbnM7XHJcblxyXG5cclxuZnVuY3Rpb24gZmluZEFjdGl2aXRpSW5PdXQoZWxlbWVudCwgYmluZGluZykge1xyXG5cclxuICB2YXIgZXh0ZW5zaW9uRWxlbWVudHMgPSBnZXRFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcclxuXHJcbiAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgdmFyIG1hdGNoZXI7XHJcblxyXG4gIGlmIChiaW5kaW5nLnR5cGUgPT09ICdhY3Rpdml0aTppbicpIHtcclxuICAgIG1hdGNoZXIgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgIHJldHVybiBpcyhlLCAnYWN0aXZpdGk6SW4nKSAmJiBpc0luT3V0KGUsIGJpbmRpbmcpO1xyXG4gICAgfTtcclxuICB9IGVsc2VcclxuICBpZiAoYmluZGluZy50eXBlID09PSAnYWN0aXZpdGk6b3V0Jykge1xyXG4gICAgbWF0Y2hlciA9IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgcmV0dXJuIGlzKGUsICdhY3Rpdml0aTpPdXQnKSAmJiBpc0luT3V0KGUsIGJpbmRpbmcpO1xyXG4gICAgfTtcclxuICB9IGVsc2VcclxuICBpZiAoYmluZGluZy50eXBlID09PSAnYWN0aXZpdGk6aW46YnVzaW5lc3NLZXknKSB7XHJcbiAgICBtYXRjaGVyID0gZnVuY3Rpb24oZSkge1xyXG4gICAgICByZXR1cm4gaXMoZSwgJ2FjdGl2aXRpOkluJykgJiYgJ2J1c2luZXNzS2V5JyBpbiBlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJldHVybiBmaW5kKGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIG1hdGNoZXIpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5maW5kQWN0aXZpdGlJbk91dCA9IGZpbmRBY3Rpdml0aUluT3V0O1xyXG5cclxuZnVuY3Rpb24gZmluZEFjdGl2aXRpUHJvcGVydHkoYWN0aXZpdGlQcm9wZXJ0aWVzLCBiaW5kaW5nKSB7XHJcbiAgcmV0dXJuIGZpbmQoYWN0aXZpdGlQcm9wZXJ0aWVzLmdldCgndmFsdWVzJyksIGZ1bmN0aW9uKHApIHtcclxuICAgIHJldHVybiBwLm5hbWUgPT09IGJpbmRpbmcubmFtZTtcclxuICB9KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuZmluZEFjdGl2aXRpUHJvcGVydHkgPSBmaW5kQWN0aXZpdGlQcm9wZXJ0eTtcclxuXHJcblxyXG5mdW5jdGlvbiBmaW5kSW5wdXRQYXJhbWV0ZXIoaW5wdXRPdXRwdXQsIGJpbmRpbmcpIHtcclxuICB2YXIgcGFyYW1ldGVycyA9IGlucHV0T3V0cHV0LmdldCgnaW5wdXRQYXJhbWV0ZXJzJyk7XHJcblxyXG4gIHJldHVybiBmaW5kKHBhcmFtZXRlcnMsIGZ1bmN0aW9uKHApIHtcclxuICAgIHJldHVybiBwLm5hbWUgPT09IGJpbmRpbmcubmFtZTtcclxuICB9KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMuZmluZElucHV0UGFyYW1ldGVyID0gZmluZElucHV0UGFyYW1ldGVyO1xyXG5cclxuXHJcbmZ1bmN0aW9uIGZpbmRPdXRwdXRQYXJhbWV0ZXIoaW5wdXRPdXRwdXQsIGJpbmRpbmcpIHtcclxuICB2YXIgcGFyYW1ldGVycyA9IGlucHV0T3V0cHV0LmdldCgnb3V0cHV0UGFyYW1ldGVycycpO1xyXG5cclxuICByZXR1cm4gZmluZChwYXJhbWV0ZXJzLCBmdW5jdGlvbihwKSB7XHJcbiAgICB2YXIgdmFsdWUgPSBwLnZhbHVlO1xyXG5cclxuICAgIGlmICghYmluZGluZy5zY3JpcHRGb3JtYXQpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlID09PSBiaW5kaW5nLnNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZGVmaW5pdGlvbiA9IHAuZGVmaW5pdGlvbjtcclxuXHJcbiAgICBpZiAoIWRlZmluaXRpb24gfHwgYmluZGluZy5zY3JpcHRGb3JtYXQgIT09IGRlZmluaXRpb24uc2NyaXB0Rm9ybWF0KSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGVmaW5pdGlvbi52YWx1ZSA9PT0gYmluZGluZy5zb3VyY2U7XHJcbiAgfSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLmZpbmRPdXRwdXRQYXJhbWV0ZXIgPSBmaW5kT3V0cHV0UGFyYW1ldGVyO1xyXG5cclxuXHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCkge1xyXG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICBpZiAoaXMoYm8sICdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJykpIHtcclxuICAgIHJldHVybiBibztcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIGJvLmV4dGVuc2lvbkVsZW1lbnRzO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzSW5PdXQoZWxlbWVudCwgYmluZGluZykge1xyXG5cclxuICBpZiAoYmluZGluZy50eXBlID09PSAnYWN0aXZpdGk6aW4nKSB7XHJcbiAgICAvLyBmaW5kIGJhc2VkIG9uIHRhcmdldCBhdHRyaWJ1dGVcclxuICAgIGlmIChiaW5kaW5nLnRhcmdldCkge1xyXG4gICAgICByZXR1cm4gZWxlbWVudC50YXJnZXQgPT09IGJpbmRpbmcudGFyZ2V0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKGJpbmRpbmcudHlwZSA9PT0gJ2FjdGl2aXRpOm91dCcpIHtcclxuICAgIC8vIGZpbmQgYmFzZWQgb24gc291cmNlIC8gc291cmNlRXhwcmVzc2lvblxyXG4gICAgaWYgKGJpbmRpbmcuc291cmNlKSB7XHJcbiAgICAgIHJldHVybiBlbGVtZW50LnNvdXJjZSA9PT0gYmluZGluZy5zb3VyY2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGJpbmRpbmcuc291cmNlRXhwcmVzc2lvbikge1xyXG4gICAgICByZXR1cm4gZWxlbWVudC5zb3VyY2VFeHByZXNzaW9uID09PSBiaW5kaW5nLnNvdXJjZUV4cHJlc3Npb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmaW5kIGJhc2VkIHZhcmlhYmxlcyAvIGxvY2FsIGNvbWJpbmF0aW9uXHJcbiAgaWYgKGJpbmRpbmcudmFyaWFibGVzKSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC52YXJpYWJsZXMgPT09ICdhbGwnICYmIChcclxuICAgICAgYmluZGluZy52YXJpYWJsZXMgIT09ICdsb2NhbCcgfHwgZWxlbWVudC5sb2NhbFxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdsb2Rhc2gvaXNBcnJheScpO1xyXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCdsb2Rhc2gvaXNPYmplY3QnKTtcclxuXHJcbnZhciBEUk9QRE9XTl9UWVBFID0gJ0Ryb3Bkb3duJztcclxuXHJcbnZhciBWQUxJRF9UWVBFUyA9IFsgJ1N0cmluZycsICdUZXh0JywgJ0Jvb2xlYW4nLCAnSGlkZGVuJywgRFJPUERPV05fVFlQRSBdO1xyXG5cclxudmFyIFBST1BFUlRZX1RZUEUgPSAncHJvcGVydHknLFxyXG4gICAgQUNUSVZJVElfUFJPUEVSVFlfVFlQRSA9ICdhY3Rpdml0aTpwcm9wZXJ0eScsXHJcbiAgICBBQ1RJVklUSV9JTlBVVF9QQVJBTUVURVJfVFlQRSA9ICdhY3Rpdml0aTppbnB1dFBhcmFtZXRlcicsXHJcbiAgICBBQ1RJVklUSV9PVVRQVVRfUEFSQU1FVEVSX1RZUEUgPSAnYWN0aXZpdGk6b3V0cHV0UGFyYW1ldGVyJyxcclxuICAgIEFDVElWSVRJX0lOX1RZUEUgPSAnYWN0aXZpdGk6aW4nLFxyXG4gICAgQUNUSVZJVElfT1VUX1RZUEUgPSAnYWN0aXZpdGk6b3V0JyxcclxuICAgIEFDVElWSVRJX0lOX0JVU0lORVNTX0tFWV9UWVBFID0gJ2FjdGl2aXRpOmluOmJ1c2luZXNzS2V5JyxcclxuICAgIEFDVElWSVRJX0VYRUNVVElPTl9MSVNURU5FUiA9ICdhY3Rpdml0aTpleGVjdXRpb25MaXN0ZW5lcicsXHJcbiAgICBBQ1RJVklUSV9GSUVMRCA9ICdhY3Rpdml0aTpmaWVsZCc7XHJcblxyXG52YXIgVkFMSURfQklORElOR19UWVBFUyA9IFtcclxuICBQUk9QRVJUWV9UWVBFLFxyXG4gIEFDVElWSVRJX1BST1BFUlRZX1RZUEUsXHJcbiAgQUNUSVZJVElfSU5QVVRfUEFSQU1FVEVSX1RZUEUsXHJcbiAgQUNUSVZJVElfT1VUUFVUX1BBUkFNRVRFUl9UWVBFLFxyXG4gIEFDVElWSVRJX0lOX1RZUEUsXHJcbiAgQUNUSVZJVElfT1VUX1RZUEUsXHJcbiAgQUNUSVZJVElfSU5fQlVTSU5FU1NfS0VZX1RZUEUsXHJcbiAgQUNUSVZJVElfRVhFQ1VUSU9OX0xJU1RFTkVSLFxyXG4gIEFDVElWSVRJX0ZJRUxEXHJcbl07XHJcblxyXG5cclxuLyoqXHJcbiAqIEEgZWxlbWVudCB0ZW1wbGF0ZSB2YWxpZGF0b3IuXHJcbiAqL1xyXG5mdW5jdGlvbiBWYWxpZGF0b3IoKSB7XHJcblxyXG4gIHRoaXMuX3RlbXBsYXRlc0J5SWQgPSB7fTtcclxuXHJcbiAgdGhpcy5fdmFsaWRUZW1wbGF0ZXMgPSBbXTtcclxuICB0aGlzLl9lcnJvcnMgPSBbXTtcclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgdGhlIHRlbXBsYXRlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXk8VGVtcGxhdGVEZXNjcmlwdG9yPn0gdGVtcGxhdGVzXHJcbiAgICpcclxuICAgKiBAcmV0dXJuIHtWYWxpZGF0b3J9IHNlbGZcclxuICAgKi9cclxuICB0aGlzLmFkZEFsbCA9IGZ1bmN0aW9uKHRlbXBsYXRlcykge1xyXG5cclxuICAgIGlmICghaXNBcnJheSh0ZW1wbGF0ZXMpKSB7XHJcbiAgICAgIHRoaXMuX2xvZ0Vycm9yKCd0ZW1wbGF0ZXMgbXVzdCBiZSBbXScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGVtcGxhdGVzLmZvckVhY2godGhpcy5hZGQsIHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCB0aGUgZ2l2ZW4gZWxlbWVudCB0ZW1wbGF0ZSwgaWYgaXQgaXMgdmFsaWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1RlbXBsYXRlRGVzY3JpcHRvcn0gdGVtcGxhdGVcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge1ZhbGlkYXRvcn0gc2VsZlxyXG4gICAqL1xyXG4gIHRoaXMuYWRkID0gZnVuY3Rpb24odGVtcGxhdGUpIHtcclxuXHJcbiAgICB2YXIgZXJyID0gdGhpcy5fdmFsaWRhdGVUZW1wbGF0ZSh0ZW1wbGF0ZSk7XHJcblxyXG4gICAgaWYgKCFlcnIpIHtcclxuICAgICAgdGhpcy5fdGVtcGxhdGVzQnlJZFt0ZW1wbGF0ZS5pZF0gPSB0ZW1wbGF0ZTtcclxuXHJcbiAgICAgIHRoaXMuX3ZhbGlkVGVtcGxhdGVzLnB1c2godGVtcGxhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlIGdpdmVuIHRlbXBsYXRlIGFuZCByZXR1cm4gZXJyb3IgKGlmIGFueSkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1RlbXBsYXRlRGVzY3JpcHRvcn0gdGVtcGxhdGVcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0Vycm9yfSB2YWxpZGF0aW9uIGVycm9yLCBpZiBhbnlcclxuICAgKi9cclxuICB0aGlzLl92YWxpZGF0ZVRlbXBsYXRlID0gZnVuY3Rpb24odGVtcGxhdGUpIHtcclxuXHJcbiAgICB2YXIgZXJyLFxyXG4gICAgICAgIGlkID0gdGVtcGxhdGUuaWQsXHJcbiAgICAgICAgYXBwbGllc1RvID0gdGVtcGxhdGUuYXBwbGllc1RvLFxyXG4gICAgICAgIHByb3BlcnRpZXMgPSB0ZW1wbGF0ZS5wcm9wZXJ0aWVzLFxyXG4gICAgICAgIHNjb3BlcyA9IHRlbXBsYXRlLnNjb3BlcztcclxuXHJcbiAgICBpZiAoIWlkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9sb2dFcnJvcignbWlzc2luZyB0ZW1wbGF0ZSBpZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpZCBpbiB0aGlzLl90ZW1wbGF0ZXNCeUlkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9sb2dFcnJvcigndGVtcGxhdGUgaWQgPCcgKyBpZCArICc+IGFscmVhZHkgdXNlZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNBcnJheShhcHBsaWVzVG8pKSB7XHJcbiAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKCdtaXNzaW5nIGFwcGxpZXNUbz1bXScsIHRlbXBsYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzQXJyYXkocHJvcGVydGllcykpIHtcclxuICAgICAgZXJyID0gdGhpcy5fbG9nRXJyb3IoJ21pc3NpbmcgcHJvcGVydGllcz1bXScsIHRlbXBsYXRlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy5fdmFsaWRhdGVQcm9wZXJ0aWVzKHByb3BlcnRpZXMpKSB7XHJcbiAgICAgICAgZXJyID0gbmV3IEVycm9yKCdpbnZhbGlkIHByb3BlcnRpZXMnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzY29wZXMpIHtcclxuICAgICAgZXJyID0gdGhpcy5fdmFsaWRhdGVTY29wZXModGVtcGxhdGUsIHNjb3Blcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGVycjtcclxuICB9O1xyXG5cclxuICB0aGlzLl92YWxpZGF0ZVNjb3BlcyA9IGZ1bmN0aW9uKHRlbXBsYXRlLCBzY29wZXMpIHtcclxuXHJcbiAgICB2YXIgZXJyLFxyXG4gICAgICAgIHNjb3BlLFxyXG4gICAgICAgIHNjb3BlTmFtZTtcclxuXHJcbiAgICBpZiAoIWlzT2JqZWN0KHNjb3BlcykgfHwgaXNBcnJheShzY29wZXMpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9sb2dFcnJvcignaW52YWxpZCBzY29wZXMsIHNob3VsZCBiZSBzY29wZXM9e30nLCB0ZW1wbGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChzY29wZU5hbWUgaW4gc2NvcGVzKSB7XHJcbiAgICAgIHNjb3BlID0gc2NvcGVzW3Njb3BlTmFtZV07XHJcblxyXG4gICAgICBpZiAoIWlzT2JqZWN0KHNjb3BlKSB8fCBpc0FycmF5KHNjb3BlKSkge1xyXG4gICAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKCdpbnZhbGlkIHNjb3BlLCBzaG91bGQgYmUgc2NvcGU9e30nLCB0ZW1wbGF0ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghaXNBcnJheShzY29wZS5wcm9wZXJ0aWVzKSkge1xyXG4gICAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKFxyXG4gICAgICAgICAgJ21pc3NpbmcgcHJvcGVydGllcz1bXSBpbiBzY29wZSA8JyArIHNjb3BlTmFtZSArICc+JywgdGVtcGxhdGVcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5fdmFsaWRhdGVQcm9wZXJ0aWVzKHNjb3BlLnByb3BlcnRpZXMpKSB7XHJcbiAgICAgICAgICBlcnIgPSBuZXcgRXJyb3IoJ2ludmFsaWQgcHJvcGVydGllcyBpbiBzY29wZSA8JyArIHNjb3BlTmFtZSArICc+Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGVycjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZSBwcm9wZXJ0aWVzIGFuZCByZXR1cm4gZmFsc2UgaWYgYW55IGlzIGludmFsaWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5PFByb3BlcnR5RGVzY3JpcHRvcj59IHByb3BlcnRpZXNcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgYWxsIHByb3BlcnRpZXMgYXJlIHZhbGlkXHJcbiAgICovXHJcbiAgdGhpcy5fdmFsaWRhdGVQcm9wZXJ0aWVzID0gZnVuY3Rpb24ocHJvcGVydGllcykge1xyXG4gICAgdmFyIHZhbGlkUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZmlsdGVyKHRoaXMuX3ZhbGlkYXRlUHJvcGVydHksIHRoaXMpO1xyXG5cclxuICAgIHJldHVybiBwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gdmFsaWRQcm9wZXJ0aWVzLmxlbmd0aDtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZSBwcm9wZXJ0eSBhbmQgcmV0dXJuIGZhbHNlLCBpZiB0aGVyZSB3YXNcclxuICAgKiBhIHZhbGlkYXRpb24gZXJyb3IuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgcHJvcGVydHkgaXMgdmFsaWRcclxuICAgKi9cclxuICB0aGlzLl92YWxpZGF0ZVByb3BlcnR5ID0gZnVuY3Rpb24ocHJvcGVydHkpIHtcclxuXHJcbiAgICB2YXIgdHlwZSA9IHByb3BlcnR5LnR5cGUsXHJcbiAgICAgICAgYmluZGluZyA9IHByb3BlcnR5LmJpbmRpbmc7XHJcblxyXG4gICAgdmFyIGVycjtcclxuXHJcbiAgICB2YXIgYmluZGluZ1R5cGUgPSBiaW5kaW5nLnR5cGU7XHJcblxyXG4gICAgaWYgKFZBTElEX1RZUEVTLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XHJcbiAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKFxyXG4gICAgICAgICdpbnZhbGlkIHByb3BlcnR5IHR5cGUgPCcgKyB0eXBlICsgJz47ICcgK1xyXG4gICAgICAgICdtdXN0IGJlIGFueSBvZiB7ICcgKyBWQUxJRF9UWVBFUy5qb2luKCcsICcpICsgJyB9J1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlID09PSBEUk9QRE9XTl9UWVBFICYmIGJpbmRpbmdUeXBlICE9PSBBQ1RJVklUSV9FWEVDVVRJT05fTElTVEVORVIpIHtcclxuICAgICAgaWYgKCFpc0FycmF5KHByb3BlcnR5LmNob2ljZXMpKSB7XHJcbiAgICAgICAgZXJyID0gdGhpcy5fbG9nRXJyb3IoXHJcbiAgICAgICAgICAnbXVzdCBwcm92aWRlIGNob2ljZXM9W10gd2l0aCAnICsgRFJPUERPV05fVFlQRSArICcgdHlwZSdcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2VcclxuXHJcbiAgICAgIGlmICghcHJvcGVydHkuY2hvaWNlcy5ldmVyeShpc0Ryb3Bkb3duQ2hvaWNlVmFsaWQpKSB7XHJcbiAgICAgICAgZXJyID0gdGhpcy5fbG9nRXJyb3IoXHJcbiAgICAgICAgICAneyBuYW1lLCB2YWx1ZSB9IG11c3QgYmUgc3BlY2lmaWVkIGZvciAnICtcclxuICAgICAgICAgIERST1BET1dOX1RZUEUgKyAnIGNob2ljZXMnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghYmluZGluZykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fbG9nRXJyb3IoJ3Byb3BlcnR5IG1pc3NpbmcgYmluZGluZycpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChWQUxJRF9CSU5ESU5HX1RZUEVTLmluZGV4T2YoYmluZGluZ1R5cGUpID09PSAtMSkge1xyXG4gICAgICBlcnIgPSB0aGlzLl9sb2dFcnJvcihcclxuICAgICAgICAnaW52YWxpZCBwcm9wZXJ0eS5iaW5kaW5nIHR5cGUgPCcgKyBiaW5kaW5nVHlwZSArICc+OyAnICtcclxuICAgICAgICAnbXVzdCBiZSBhbnkgb2YgeyAnICsgVkFMSURfQklORElOR19UWVBFUy5qb2luKCcsICcpICsgJyB9J1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gUFJPUEVSVFlfVFlQRSB8fFxyXG4gICAgICAgIGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9QUk9QRVJUWV9UWVBFIHx8XHJcbiAgICAgICAgYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX0lOUFVUX1BBUkFNRVRFUl9UWVBFIHx8XHJcbiAgICAgICAgYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX0ZJRUxEKSB7XHJcblxyXG4gICAgICBpZiAoIWJpbmRpbmcubmFtZSkge1xyXG4gICAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKFxyXG4gICAgICAgICAgJ3Byb3BlcnR5LmJpbmRpbmcgPCcgKyBiaW5kaW5nVHlwZSArICc+IHJlcXVpcmVzIG5hbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfT1VUUFVUX1BBUkFNRVRFUl9UWVBFKSB7XHJcbiAgICAgIGlmICghYmluZGluZy5zb3VyY2UpIHtcclxuICAgICAgICBlcnIgPSB0aGlzLl9sb2dFcnJvcihcclxuICAgICAgICAgICdwcm9wZXJ0eS5iaW5kaW5nIDwnICsgYmluZGluZ1R5cGUgKyAnPiByZXF1aXJlcyBzb3VyY2UnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfSU5fVFlQRSkge1xyXG5cclxuICAgICAgaWYgKCFiaW5kaW5nLnZhcmlhYmxlcyAmJiAhYmluZGluZy50YXJnZXQpIHtcclxuICAgICAgICBlcnIgPSB0aGlzLl9sb2dFcnJvcihcclxuICAgICAgICAgICdwcm9wZXJ0eS5iaW5kaW5nIDwnICsgYmluZGluZ1R5cGUgKyAnPiByZXF1aXJlcyAnICtcclxuICAgICAgICAgICd2YXJpYWJsZXMgb3IgdGFyZ2V0J1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX09VVF9UWVBFKSB7XHJcblxyXG4gICAgICBpZiAoIWJpbmRpbmcudmFyaWFibGVzICYmICFiaW5kaW5nLnNvdXJjZSAmJiAhYmluZGluZy5zb3VyY2VFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgZXJyID0gdGhpcy5fbG9nRXJyb3IoXHJcbiAgICAgICAgICAncHJvcGVydHkuYmluZGluZyA8JyArIGJpbmRpbmdUeXBlICsgJz4gcmVxdWlyZXMgJyArXHJcbiAgICAgICAgICAndmFyaWFibGVzLCBzb3VyY2VFeHByZXNzaW9uIG9yIHNvdXJjZSdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9FWEVDVVRJT05fTElTVEVORVIpIHtcclxuXHJcbiAgICAgIGlmICh0eXBlICE9PSAnSGlkZGVuJykge1xyXG4gICAgICAgIGVyciA9IHRoaXMuX2xvZ0Vycm9yKFxyXG4gICAgICAgICAgJ2ludmFsaWQgcHJvcGVydHkgdHlwZSA8JyArIHR5cGUgKyAnPiBmb3IgJyArIEFDVElWSVRJX0VYRUNVVElPTl9MSVNURU5FUiArICc7ICcgK1xyXG4gICAgICAgICAgJ211c3QgYmUgPEhpZGRlbj4nXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAhZXJyO1xyXG4gIH07XHJcblxyXG5cclxuICB0aGlzLl9sb2dFcnJvciA9IGZ1bmN0aW9uKGVyciwgdGVtcGxhdGUpIHtcclxuXHJcbiAgICBpZiAodHlwZW9mIGVyciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgaWYgKHRlbXBsYXRlKSB7XHJcbiAgICAgICAgZXJyID0gJ3RlbXBsYXRlKGlkOiAnICsgdGVtcGxhdGUuaWQgKyAnKSAnICsgZXJyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBlcnIgPSBuZXcgRXJyb3IoZXJyKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9lcnJvcnMucHVzaChlcnIpO1xyXG5cclxuICAgIHJldHVybiBlcnI7XHJcbiAgfTtcclxuXHJcbiAgdGhpcy5nZXRFcnJvcnMgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9lcnJvcnM7XHJcbiAgfTtcclxuXHJcbiAgdGhpcy5nZXRWYWxpZFRlbXBsYXRlcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkVGVtcGxhdGVzO1xyXG4gIH07XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVmFsaWRhdG9yO1xyXG5cclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbmZ1bmN0aW9uIGlzRHJvcGRvd25DaG9pY2VWYWxpZChjKSB7XHJcbiAgcmV0dXJuICduYW1lJyBpbiBjICYmICd2YWx1ZScgaW4gYztcclxufVxyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZmluZEV4dGVuc2lvbiA9IHJlcXVpcmUoJy4uL0hlbHBlcicpLmZpbmRFeHRlbnNpb24sXHJcbiAgICBmaW5kRXh0ZW5zaW9ucyA9IHJlcXVpcmUoJy4uL0hlbHBlcicpLmZpbmRFeHRlbnNpb25zO1xyXG5cclxudmFyIGNyZWF0ZUFjdGl2aXRpUHJvcGVydHkgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aVByb3BlcnR5LFxyXG4gICAgY3JlYXRlSW5wdXRQYXJhbWV0ZXIgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVJbnB1dFBhcmFtZXRlcixcclxuICAgIGNyZWF0ZU91dHB1dFBhcmFtZXRlciA9IHJlcXVpcmUoJy4uL0NyZWF0ZUhlbHBlcicpLmNyZWF0ZU91dHB1dFBhcmFtZXRlcixcclxuICAgIGNyZWF0ZUFjdGl2aXRpSW4gPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aUluLFxyXG4gICAgY3JlYXRlQWN0aXZpdGlPdXQgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aU91dCxcclxuICAgIGNyZWF0ZUFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5LFxyXG4gICAgY3JlYXRlQWN0aXZpdGlFeGVjdXRpb25MaXN0ZW5lclNjcmlwdCA9IHJlcXVpcmUoJy4uL0NyZWF0ZUhlbHBlcicpLmNyZWF0ZUFjdGl2aXRpRXhlY3V0aW9uTGlzdGVuZXJTY3JpcHQsXHJcbiAgICBjcmVhdGVBY3Rpdml0aUZpZWxkSW5qZWN0aW9uID0gcmVxdWlyZSgnLi4vQ3JlYXRlSGVscGVyJykuY3JlYXRlQWN0aXZpdGlGaWVsZEluamVjdGlvbjtcclxuXHJcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKTtcclxuXHJcbnZhciBBQ1RJVklUSV9TRVJWSUNFX1RBU0tfTElLRSA9IFtcclxuICAnYWN0aXZpdGk6Y2xhc3MnLFxyXG4gICdhY3Rpdml0aTpkZWxlZ2F0ZUV4cHJlc3Npb24nLFxyXG4gICdhY3Rpdml0aTpleHByZXNzaW9uJ1xyXG5dO1xyXG5cclxuLyoqXHJcbiAqIEEgaGFuZGxlciB0aGF0IGNoYW5nZXMgdGhlIG1vZGVsaW5nIHRlbXBsYXRlIG9mIGEgQlBNTiBlbGVtZW50LlxyXG4gKi9cclxuZnVuY3Rpb24gQ2hhbmdlRWxlbWVudFRlbXBsYXRlSGFuZGxlcihtb2RlbGluZywgY29tbWFuZFN0YWNrLCBicG1uRmFjdG9yeSkge1xyXG5cclxuICBmdW5jdGlvbiBnZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpIHtcclxuXHJcbiAgICB2YXIgYm8gPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0O1xyXG5cclxuICAgIHZhciBleHRlbnNpb25FbGVtZW50cyA9IGJvLmV4dGVuc2lvbkVsZW1lbnRzO1xyXG5cclxuICAgIC8vIGFkZCBleHRlbnNpb24gZWxlbWVudHNcclxuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcclxuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XHJcbiAgICAgICAgdmFsdWVzOiBbXVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwge1xyXG4gICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzOiBleHRlbnNpb25FbGVtZW50c1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZXh0ZW5zaW9uRWxlbWVudHM7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1cGRhdGVNb2RlbGVyVGVtcGxhdGUoZWxlbWVudCwgbmV3VGVtcGxhdGUpIHtcclxuICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwge1xyXG4gICAgICAnYWN0aXZpdGk6bW9kZWxlclRlbXBsYXRlJzogbmV3VGVtcGxhdGUgJiYgbmV3VGVtcGxhdGUuaWRcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlSW9NYXBwaW5ncyhlbGVtZW50LCBuZXdUZW1wbGF0ZSwgY29udGV4dCkge1xyXG5cclxuICAgIHZhciBuZXdNYXBwaW5ncyA9IGNyZWF0ZUlucHV0T3V0cHV0TWFwcGluZ3MobmV3VGVtcGxhdGUsIGJwbW5GYWN0b3J5KSxcclxuICAgICAgICBvbGRNYXBwaW5ncztcclxuXHJcbiAgICBpZiAoIW5ld01hcHBpbmdzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29udGV4dCkge1xyXG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QnLCB7XHJcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICBidXNpbmVzc09iamVjdDogY29udGV4dCxcclxuICAgICAgICBwcm9wZXJ0aWVzOiB7IGlucHV0T3V0cHV0OiBuZXdNYXBwaW5ncyB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29udGV4dCA9IGdldE9yQ3JlYXRlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCk7XHJcbiAgICAgIG9sZE1hcHBpbmdzID0gZmluZEV4dGVuc2lvbihlbGVtZW50LCAnYWN0aXZpdGk6SW5wdXRPdXRwdXQnKTtcclxuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0LWxpc3QnLCB7XHJcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICBjdXJyZW50T2JqZWN0OiBjb250ZXh0LFxyXG4gICAgICAgIHByb3BlcnR5TmFtZTogJ3ZhbHVlcycsXHJcbiAgICAgICAgb2JqZWN0c1RvQWRkOiBbIG5ld01hcHBpbmdzIF0sXHJcbiAgICAgICAgb2JqZWN0c1RvUmVtb3ZlOiBvbGRNYXBwaW5ncyA/IFsgb2xkTWFwcGluZ3MgXSA6IFtdXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlQWN0aXZpdGlGaWVsZChlbGVtZW50LCBuZXdUZW1wbGF0ZSwgY29udGV4dCkge1xyXG5cclxuICAgIHZhciBuZXdNYXBwaW5ncyA9IGNyZWF0ZUFjdGl2aXRpRmllbGRJbmplY3Rpb25zKG5ld1RlbXBsYXRlLCBicG1uRmFjdG9yeSksXHJcbiAgICAgICAgb2xkTWFwcGluZ3M7XHJcblxyXG4gICAgaWYgKCFuZXdNYXBwaW5ncykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoY29udGV4dCkge1xyXG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QnLCB7XHJcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICBidXNpbmVzc09iamVjdDogY29udGV4dCxcclxuICAgICAgICBwcm9wZXJ0aWVzOiB7IGZpZWxkOiBuZXdNYXBwaW5ncyB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29udGV4dCA9IGdldE9yQ3JlYXRlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCk7XHJcbiAgICAgIG9sZE1hcHBpbmdzID0gZmluZEV4dGVuc2lvbnMoZWxlbWVudCwgWydhY3Rpdml0aTpGaWVsZCddKTtcclxuXHJcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0Jywge1xyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgY3VycmVudE9iamVjdDogY29udGV4dCxcclxuICAgICAgICBwcm9wZXJ0eU5hbWU6ICd2YWx1ZXMnLFxyXG4gICAgICAgIG9iamVjdHNUb0FkZDogbmV3TWFwcGluZ3MsXHJcbiAgICAgICAgb2JqZWN0c1RvUmVtb3ZlOiBvbGRNYXBwaW5ncyA/IG9sZE1hcHBpbmdzIDogW11cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlQWN0aXZpdGlQcm9wZXJ0aWVzKGVsZW1lbnQsIG5ld1RlbXBsYXRlLCBjb250ZXh0KSB7XHJcblxyXG4gICAgdmFyIG5ld1Byb3BlcnRpZXMgPSBjcmVhdGVBY3Rpdml0aVByb3BlcnRpZXMobmV3VGVtcGxhdGUsIGJwbW5GYWN0b3J5KSxcclxuICAgICAgICBvbGRQcm9wZXJ0aWVzO1xyXG5cclxuICAgIGlmICghbmV3UHJvcGVydGllcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbnRleHQpIHtcclxuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0Jywge1xyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgYnVzaW5lc3NPYmplY3Q6IGNvbnRleHQsXHJcbiAgICAgICAgcHJvcGVydGllczogeyBwcm9wZXJ0aWVzOiBuZXdQcm9wZXJ0aWVzIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb250ZXh0ID0gZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcclxuICAgICAgb2xkUHJvcGVydGllcyA9IGZpbmRFeHRlbnNpb24oZWxlbWVudCwgJ2FjdGl2aXRpOlByb3BlcnRpZXMnKTtcclxuXHJcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0Jywge1xyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgY3VycmVudE9iamVjdDogY29udGV4dCxcclxuICAgICAgICBwcm9wZXJ0eU5hbWU6ICd2YWx1ZXMnLFxyXG4gICAgICAgIG9iamVjdHNUb0FkZDogWyBuZXdQcm9wZXJ0aWVzIF0sXHJcbiAgICAgICAgb2JqZWN0c1RvUmVtb3ZlOiBvbGRQcm9wZXJ0aWVzID8gWyBvbGRQcm9wZXJ0aWVzIF0gOiBbXVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgbmV3VGVtcGxhdGUsIGNvbnRleHQpIHtcclxuXHJcbiAgICB2YXIgbmV3UHJvcGVydGllcyA9IGNyZWF0ZUJwbW5Qcm9wZXJ0eVVwZGF0ZXMobmV3VGVtcGxhdGUsIGJwbW5GYWN0b3J5KTtcclxuXHJcbiAgICB2YXIgbmV3UHJvcGVydGllc0NvdW50ID0gT2JqZWN0LmtleXMobmV3UHJvcGVydGllcykubGVuZ3RoO1xyXG5cclxuICAgIGlmICghbmV3UHJvcGVydGllc0NvdW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29udGV4dCkge1xyXG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QnLCB7XHJcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICBidXNpbmVzc09iamVjdDogY29udGV4dCxcclxuICAgICAgICBwcm9wZXJ0aWVzOiBuZXdQcm9wZXJ0aWVzXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBuZXdQcm9wZXJ0aWVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwZGF0ZUluT3V0KGVsZW1lbnQsIG5ld1RlbXBsYXRlLCBjb250ZXh0KSB7XHJcblxyXG4gICAgdmFyIG5ld0luT3V0ID0gY3JlYXRlQWN0aXZpdGlJbk91dChuZXdUZW1wbGF0ZSwgYnBtbkZhY3RvcnkpLFxyXG4gICAgICAgIG9sZEluT3V0O1xyXG5cclxuICAgIGlmICghbmV3SW5PdXQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb250ZXh0KSB7XHJcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdCcsIHtcclxuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICAgIGJ1c2luZXNzT2JqZWN0OiBjb250ZXh0LFxyXG4gICAgICAgIHByb3BlcnRpZXM6IHsgaW5vdXQ6IG5ld0luT3V0IH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb250ZXh0ID0gZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcclxuICAgICAgb2xkSW5PdXQgPSBmaW5kRXh0ZW5zaW9ucyhjb250ZXh0LCBbICdhY3Rpdml0aTpJbicsICdhY3Rpdml0aTpPdXQnIF0pO1xyXG5cclxuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0LWxpc3QnLCB7XHJcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICBjdXJyZW50T2JqZWN0OiBjb250ZXh0LFxyXG4gICAgICAgIHByb3BlcnR5TmFtZTogJ3ZhbHVlcycsXHJcbiAgICAgICAgb2JqZWN0c1RvQWRkOiBuZXdJbk91dCxcclxuICAgICAgICBvYmplY3RzVG9SZW1vdmU6IG9sZEluT3V0XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlRXhlY3V0aW9uTGlzdGVuZXIoZWxlbWVudCwgbmV3VGVtcGxhdGUsIGNvbnRleHQpIHtcclxuXHJcbiAgICB2YXIgbmV3RXhlY3V0aW9uTGlzdGVuZXJzID0gY3JlYXRlQWN0aXZpdGlFeGVjdXRpb25MaXN0ZW5lcnMobmV3VGVtcGxhdGUsIGJwbW5GYWN0b3J5KSxcclxuICAgICAgICBvbGRFeGVjdXRpb25zTGlzdGVuZXJzO1xyXG5cclxuICAgIGlmICghbmV3RXhlY3V0aW9uTGlzdGVuZXJzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbnRleHQpIHtcclxuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwudXBkYXRlLWJ1c2luZXNzb2JqZWN0Jywge1xyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgYnVzaW5lc3NPYmplY3Q6IGNvbnRleHQsXHJcbiAgICAgICAgcHJvcGVydGllczogeyBleGVjdXRpb25MaXN0ZW5lcjogbmV3RXhlY3V0aW9uTGlzdGVuZXJzIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb250ZXh0ID0gZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcclxuICAgICAgb2xkRXhlY3V0aW9uc0xpc3RlbmVycyA9IGZpbmRFeHRlbnNpb25zKGNvbnRleHQsIFsgJ2FjdGl2aXRpOkV4ZWN1dGlvbkxpc3RlbmVyJyBdKTtcclxuXHJcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLnVwZGF0ZS1idXNpbmVzc29iamVjdC1saXN0Jywge1xyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgY3VycmVudE9iamVjdDogY29udGV4dCxcclxuICAgICAgICBwcm9wZXJ0eU5hbWU6ICd2YWx1ZXMnLFxyXG4gICAgICAgIG9iamVjdHNUb0FkZDogbmV3RXhlY3V0aW9uTGlzdGVuZXJzLFxyXG4gICAgICAgIG9iamVjdHNUb1JlbW92ZTogb2xkRXhlY3V0aW9uc0xpc3RlbmVyc1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSAvIHJlY3JlYXRlIGEgc2NvcGVkIGVsZW1lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50IHRoZSBkaWFncmFtIHBhcmVudCBlbGVtZW50XHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IHNjb3BlTmFtZSBuYW1lIG9mIHRoZSBzY29wZSwgaS5lLiBhY3Rpdml0aTpDb25uZWN0b3JcclxuICAgKiBAcGFyYW0ge09iamVjdH0gc2NvcGVEZWZpbml0aW9uXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gdXBkYXRlU2NvcGVFbGVtZW50cyhlbGVtZW50LCBzY29wZU5hbWUsIHNjb3BlRGVmaW5pdGlvbikge1xyXG5cclxuICAgIHZhciBzY29wZUVsZW1lbnQgPSBicG1uRmFjdG9yeS5jcmVhdGUoc2NvcGVOYW1lKTtcclxuXHJcbiAgICAvLyB1cGRhdGUgYWN0aXZpdGk6aW5wdXRPdXRwdXRcclxuICAgIHVwZGF0ZUlvTWFwcGluZ3MoZWxlbWVudCwgc2NvcGVEZWZpbml0aW9uLCBzY29wZUVsZW1lbnQpO1xyXG5cclxuICAgIC8vIHVwZGF0ZSBhY3Rpdml0aTpmaWVsZFxyXG4gICAgdXBkYXRlQWN0aXZpdGlGaWVsZChlbGVtZW50LCBzY29wZURlZmluaXRpb24sIHNjb3BlRWxlbWVudCk7XHJcblxyXG4gICAgLy8gdXBkYXRlIGFjdGl2aXRpOnByb3BlcnRpZXNcclxuICAgIHVwZGF0ZUFjdGl2aXRpUHJvcGVydGllcyhlbGVtZW50LCBzY29wZURlZmluaXRpb24sIHNjb3BlRWxlbWVudCk7XHJcblxyXG4gICAgLy8gdXBkYXRlIG90aGVyIHByb3BlcnRpZXMgKGJwbW46Y29uZGl0aW9uLCBhY3Rpdml0aTphc3luYywgLi4uKVxyXG4gICAgdXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBzY29wZURlZmluaXRpb24sIHNjb3BlRWxlbWVudCk7XHJcblxyXG4gICAgLy8gdXBkYXRlIGFjdGl2aXRpOmluIGFuZCBhY3Rpdml0aTpvdXRcclxuICAgIHVwZGF0ZUluT3V0KGVsZW1lbnQsIHNjb3BlRGVmaW5pdGlvbiwgc2NvcGVFbGVtZW50KTtcclxuXHJcbiAgICAvLyB1cGRhdGUgYWN0aXZpdGk6ZXhlY3V0aW9uTGlzdGVuZXJcclxuICAgIHVwZGF0ZUV4ZWN1dGlvbkxpc3RlbmVyKGVsZW1lbnQsIHNjb3BlRGVmaW5pdGlvbiwgc2NvcGVFbGVtZW50KTtcclxuXHJcbiAgICB2YXIgZXh0ZW5zaW9uRWxlbWVudHMgPSBnZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpO1xyXG4gICAgdmFyIG9sZFNjb3BlID0gZmluZEV4dGVuc2lvbihleHRlbnNpb25FbGVtZW50cywgc2NvcGVOYW1lKTtcclxuXHJcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC51cGRhdGUtYnVzaW5lc3NvYmplY3QtbGlzdCcsIHtcclxuICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgY3VycmVudE9iamVjdDogZXh0ZW5zaW9uRWxlbWVudHMsXHJcbiAgICAgIHByb3BlcnR5TmFtZTogJ3ZhbHVlcycsXHJcbiAgICAgIG9iamVjdHNUb0FkZDogWyBzY29wZUVsZW1lbnQgXSxcclxuICAgICAgb2JqZWN0c1RvUmVtb3ZlOiBvbGRTY29wZSA/IFsgb2xkU2NvcGUgXSA6IFtdXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbXBvc2UgYW4gZWxlbWVudCB0ZW1wbGF0ZSBjaGFuZ2UgYWN0aW9uLCB1cGRhdGluZyBhbGxcclxuICAgKiBuZWNlc3NhcnkgdW5kZXJseWluZyBwcm9wZXJ0aWVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcclxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5lbGVtZW50XHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQub2xkVGVtcGxhdGVcclxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5uZXdUZW1wbGF0ZVxyXG4gICAqL1xyXG4gIHRoaXMucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuXHJcbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcclxuICAgICAgICBuZXdUZW1wbGF0ZSA9IGNvbnRleHQubmV3VGVtcGxhdGU7XHJcblxyXG4gICAgLy8gdXBkYXRlIGFjdGl2aXRpOm1vZGVsZXJUZW1wbGF0ZSBhdHRyaWJ1dGVcclxuICAgIHVwZGF0ZU1vZGVsZXJUZW1wbGF0ZShlbGVtZW50LCBuZXdUZW1wbGF0ZSk7XHJcblxyXG4gICAgaWYgKG5ld1RlbXBsYXRlKSB7XHJcblxyXG4gICAgICAvLyB1cGRhdGUgYWN0aXZpdGk6aW5wdXRPdXRwdXRcclxuICAgICAgdXBkYXRlSW9NYXBwaW5ncyhlbGVtZW50LCBuZXdUZW1wbGF0ZSk7XHJcblxyXG4gICAgICAvLyB1cGRhdGUgYWN0aXZpdGk6ZmllbGRcclxuICAgICAgdXBkYXRlQWN0aXZpdGlGaWVsZChlbGVtZW50LCBuZXdUZW1wbGF0ZSk7XHJcblxyXG4gICAgICAvLyB1cGRhdGUgYWN0aXZpdGk6cHJvcGVydGllc1xyXG4gICAgICB1cGRhdGVBY3Rpdml0aVByb3BlcnRpZXMoZWxlbWVudCwgbmV3VGVtcGxhdGUpO1xyXG5cclxuICAgICAgLy8gdXBkYXRlIG90aGVyIHByb3BlcnRpZXMgKGJwbW46Y29uZGl0aW9uLCBhY3Rpdml0aTphc3luYywgLi4uKVxyXG4gICAgICB1cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIG5ld1RlbXBsYXRlKTtcclxuXHJcbiAgICAgIC8vIHVwZGF0ZSBhY3Rpdml0aTppbiBhbmQgYWN0aXZpdGk6b3V0XHJcbiAgICAgIHVwZGF0ZUluT3V0KGVsZW1lbnQsIG5ld1RlbXBsYXRlKTtcclxuXHJcbiAgICAgIC8vIHVwZGF0ZSBhY3Rpdml0aTpleGVjdXRpb25MaXN0ZW5lclxyXG4gICAgICB1cGRhdGVFeGVjdXRpb25MaXN0ZW5lcihlbGVtZW50LCBuZXdUZW1wbGF0ZSk7XHJcblxyXG4gICAgICAvLyBsb29wIG9uIHNjb3BlcyBwcm9wZXJ0aWVzXHJcbiAgICAgIGZvckVhY2gobmV3VGVtcGxhdGUuc2NvcGVzLCBmdW5jdGlvbihzY29wZURlZmluaXRpb24sIHNjb3BlTmFtZSkge1xyXG4gICAgICAgIHVwZGF0ZVNjb3BlRWxlbWVudHMoZWxlbWVudCwgc2NvcGVOYW1lLCBzY29wZURlZmluaXRpb24pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgfTtcclxufVxyXG5cclxuQ2hhbmdlRWxlbWVudFRlbXBsYXRlSGFuZGxlci4kaW5qZWN0ID0gWyAnbW9kZWxpbmcnLCAnY29tbWFuZFN0YWNrJywgJ2JwbW5GYWN0b3J5JyBdO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBDaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyO1xyXG5cclxuXHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBjcmVhdGVCcG1uUHJvcGVydHlVcGRhdGVzKHRlbXBsYXRlLCBicG1uRmFjdG9yeSkge1xyXG5cclxuICB2YXIgcHJvcGVydHlVcGRhdGVzID0ge307XHJcblxyXG4gIHRlbXBsYXRlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwKSB7XHJcblxyXG4gICAgdmFyIGJpbmRpbmcgPSBwLmJpbmRpbmcsXHJcbiAgICAgICAgYmluZGluZ1RhcmdldCA9IGJpbmRpbmcubmFtZSxcclxuICAgICAgICBwcm9wZXJ0eVZhbHVlO1xyXG5cclxuICAgIGlmIChiaW5kaW5nLnR5cGUgPT09ICdwcm9wZXJ0eScpIHtcclxuXHJcbiAgICAgIGlmIChiaW5kaW5nVGFyZ2V0ID09PSAnY29uZGl0aW9uRXhwcmVzc2lvbicpIHtcclxuICAgICAgICBwcm9wZXJ0eVZhbHVlID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkZvcm1hbEV4cHJlc3Npb24nLCB7XHJcbiAgICAgICAgICBib2R5OiBwLnZhbHVlLFxyXG4gICAgICAgICAgbGFuZ3VhZ2U6IGJpbmRpbmcuc2NyaXB0Rm9ybWF0XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcHJvcGVydHlWYWx1ZSA9IHAudmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFzc2lnbmluZyBhY3Rpdml0aTphc3luYyB0byB0cnVlfGZhbHNlXHJcbiAgICAgIC8vIGFzc2lnbmluZyBicG1uOmNvbmRpdGlvbkV4cHJlc3Npb24gdG8geyAkdHlwZTogJ2JwbW46Rm9ybWFsRXhwcmVzc2lvbicsIC4uLiB9XHJcbiAgICAgIHByb3BlcnR5VXBkYXRlc1tiaW5kaW5nVGFyZ2V0XSA9IHByb3BlcnR5VmFsdWU7XHJcblxyXG4gICAgICAvLyBtYWtlIHN1cmUgd2UgdW5zZXQgb3RoZXIgXCJpbXBsZW1lbnRhdGlvbiB0eXBlc1wiXHJcbiAgICAgIC8vIHdoZW4gYXBwbHlpbmcgYSBhY3Rpdml0aTpjbGFzcyB0ZW1wbGF0ZSBvbnRvIGEgcHJlY29uZmlndXJlZFxyXG4gICAgICAvLyBhY3Rpdml0aTpkZWxlZ2F0ZUV4cHJlc3Npb24gZWxlbWVudFxyXG4gICAgICBpZiAoQUNUSVZJVElfU0VSVklDRV9UQVNLX0xJS0UuaW5kZXhPZihiaW5kaW5nVGFyZ2V0KSAhPT0gLTEpIHtcclxuICAgICAgICBBQ1RJVklUSV9TRVJWSUNFX1RBU0tfTElLRS5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApIHtcclxuICAgICAgICAgIGlmIChwcm9wICE9PSBiaW5kaW5nVGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHByb3BlcnR5VXBkYXRlc1twcm9wXSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gcHJvcGVydHlVcGRhdGVzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aUZpZWxkSW5qZWN0aW9ucyh0ZW1wbGF0ZSwgYnBtbkZhY3RvcnkpIHtcclxuICB2YXIgaW5qZWN0aW9ucyA9IFtdO1xyXG5cclxuICB0ZW1wbGF0ZS5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocCkge1xyXG4gICAgdmFyIGJpbmRpbmcgPSBwLmJpbmRpbmcsXHJcbiAgICAgICAgYmluZGluZ1R5cGUgPSBiaW5kaW5nLnR5cGU7XHJcbiAgICBpZiAoYmluZGluZ1R5cGUgPT09ICdhY3Rpdml0aTpmaWVsZCcpIHtcclxuICAgICAgaW5qZWN0aW9ucy5wdXNoKGNyZWF0ZUFjdGl2aXRpRmllbGRJbmplY3Rpb24oXHJcbiAgICAgICAgYmluZGluZywgcC52YWx1ZSwgYnBtbkZhY3RvcnlcclxuICAgICAgKSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGlmIChpbmplY3Rpb25zLmxlbmd0aCkge1xyXG4gICAgcmV0dXJuIGluamVjdGlvbnM7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aVByb3BlcnRpZXModGVtcGxhdGUsIGJwbW5GYWN0b3J5KSB7XHJcblxyXG4gIHZhciBwcm9wZXJ0aWVzID0gW107XHJcblxyXG4gIHRlbXBsYXRlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwKSB7XHJcbiAgICB2YXIgYmluZGluZyA9IHAuYmluZGluZyxcclxuICAgICAgICBiaW5kaW5nVHlwZSA9IGJpbmRpbmcudHlwZTtcclxuXHJcbiAgICBpZiAoYmluZGluZ1R5cGUgPT09ICdhY3Rpdml0aTpwcm9wZXJ0eScpIHtcclxuICAgICAgcHJvcGVydGllcy5wdXNoKGNyZWF0ZUFjdGl2aXRpUHJvcGVydHkoXHJcbiAgICAgICAgYmluZGluZywgcC52YWx1ZSwgYnBtbkZhY3RvcnlcclxuICAgICAgKSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCkge1xyXG4gICAgcmV0dXJuIGJwbW5GYWN0b3J5LmNyZWF0ZSgnYWN0aXZpdGk6UHJvcGVydGllcycsIHtcclxuICAgICAgdmFsdWVzOiBwcm9wZXJ0aWVzXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUlucHV0T3V0cHV0TWFwcGluZ3ModGVtcGxhdGUsIGJwbW5GYWN0b3J5KSB7XHJcblxyXG4gIHZhciBpbnB1dFBhcmFtZXRlcnMgPSBbXSxcclxuICAgICAgb3V0cHV0UGFyYW1ldGVycyA9IFtdO1xyXG5cclxuICB0ZW1wbGF0ZS5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocCkge1xyXG4gICAgdmFyIGJpbmRpbmcgPSBwLmJpbmRpbmcsXHJcbiAgICAgICAgYmluZGluZ1R5cGUgPSBiaW5kaW5nLnR5cGU7XHJcblxyXG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSAnYWN0aXZpdGk6aW5wdXRQYXJhbWV0ZXInKSB7XHJcbiAgICAgIGlucHV0UGFyYW1ldGVycy5wdXNoKGNyZWF0ZUlucHV0UGFyYW1ldGVyKFxyXG4gICAgICAgIGJpbmRpbmcsIHAudmFsdWUsIGJwbW5GYWN0b3J5XHJcbiAgICAgICkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gJ2FjdGl2aXRpOm91dHB1dFBhcmFtZXRlcicpIHtcclxuICAgICAgb3V0cHV0UGFyYW1ldGVycy5wdXNoKGNyZWF0ZU91dHB1dFBhcmFtZXRlcihcclxuICAgICAgICBiaW5kaW5nLCBwLnZhbHVlLCBicG1uRmFjdG9yeVxyXG4gICAgICApKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgLy8gZG8gd2UgbmVlZCB0byBjcmVhdGUgbmV3IGlvTWFwcGluZ3MgKD8pXHJcbiAgaWYgKG91dHB1dFBhcmFtZXRlcnMubGVuZ3RoIHx8IGlucHV0UGFyYW1ldGVycy5sZW5ndGgpIHtcclxuICAgIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOklucHV0T3V0cHV0Jywge1xyXG4gICAgICBpbnB1dFBhcmFtZXRlcnM6IGlucHV0UGFyYW1ldGVycyxcclxuICAgICAgb3V0cHV0UGFyYW1ldGVyczogb3V0cHV0UGFyYW1ldGVyc1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aUluT3V0KHRlbXBsYXRlLCBicG1uRmFjdG9yeSkge1xyXG5cclxuICB2YXIgaW5PdXRzID0gW107XHJcblxyXG4gIHRlbXBsYXRlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwKSB7XHJcbiAgICB2YXIgYmluZGluZyA9IHAuYmluZGluZyxcclxuICAgICAgICBiaW5kaW5nVHlwZSA9IGJpbmRpbmcudHlwZTtcclxuXHJcbiAgICBpZiAoYmluZGluZ1R5cGUgPT09ICdhY3Rpdml0aTppbicpIHtcclxuICAgICAgaW5PdXRzLnB1c2goY3JlYXRlQWN0aXZpdGlJbihcclxuICAgICAgICBiaW5kaW5nLCBwLnZhbHVlLCBicG1uRmFjdG9yeVxyXG4gICAgICApKTtcclxuICAgIH0gZWxzZVxyXG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSAnYWN0aXZpdGk6b3V0Jykge1xyXG4gICAgICBpbk91dHMucHVzaChjcmVhdGVBY3Rpdml0aU91dChcclxuICAgICAgICBiaW5kaW5nLCBwLnZhbHVlLCBicG1uRmFjdG9yeVxyXG4gICAgICApKTtcclxuICAgIH0gZWxzZVxyXG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSAnYWN0aXZpdGk6aW46YnVzaW5lc3NLZXknKSB7XHJcbiAgICAgIGluT3V0cy5wdXNoKGNyZWF0ZUFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkoXHJcbiAgICAgICAgYmluZGluZywgcC52YWx1ZSwgYnBtbkZhY3RvcnlcclxuICAgICAgKSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBpbk91dHM7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0aUV4ZWN1dGlvbkxpc3RlbmVycyh0ZW1wbGF0ZSwgYnBtbkZhY3RvcnkpIHtcclxuXHJcbiAgdmFyIGV4ZWN1dGlvbkxpc3RlbmVyID0gW107XHJcblxyXG4gIHRlbXBsYXRlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwKSB7XHJcbiAgICB2YXIgYmluZGluZyA9IHAuYmluZGluZyxcclxuICAgICAgICBiaW5kaW5nVHlwZSA9IGJpbmRpbmcudHlwZTtcclxuXHJcbiAgICBpZiAoYmluZGluZ1R5cGUgPT09ICdhY3Rpdml0aTpleGVjdXRpb25MaXN0ZW5lcicpIHtcclxuICAgICAgZXhlY3V0aW9uTGlzdGVuZXIucHVzaChjcmVhdGVBY3Rpdml0aUV4ZWN1dGlvbkxpc3RlbmVyU2NyaXB0KFxyXG4gICAgICAgIGJpbmRpbmcsIHAudmFsdWUsIGJwbW5GYWN0b3J5XHJcbiAgICAgICkpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gZXhlY3V0aW9uTGlzdGVuZXI7XHJcbn1cclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIENoYW5nZUVsZW1lbnRUZW1wbGF0ZUhhbmRsZXIgPSByZXF1aXJlKCcuL0NoYW5nZUVsZW1lbnRUZW1wbGF0ZUhhbmRsZXInKTtcclxuXHJcbnZhciBnZXRUZW1wbGF0ZSA9IHJlcXVpcmUoJy4uL0hlbHBlcicpLmdldFRlbXBsYXRlLFxyXG4gICAgZ2V0RGVmYXVsdFRlbXBsYXRlID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZ2V0RGVmYXVsdFRlbXBsYXRlO1xyXG5cclxuZnVuY3Rpb24gcmVnaXN0ZXJIYW5kbGVycyhjb21tYW5kU3RhY2ssIGVsZW1lbnRUZW1wbGF0ZXMsIGV2ZW50QnVzLCBlbGVtZW50UmVnaXN0cnkpIHtcclxuICBjb21tYW5kU3RhY2sucmVnaXN0ZXJIYW5kbGVyKFxyXG4gICAgJ3Byb3BlcnRpZXNQYW5lbC5hY3Rpdml0aS5jaGFuZ2VUZW1wbGF0ZScsXHJcbiAgICBDaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyXHJcbiAgKTtcclxuXHJcbiAgLy8gYXBwbHkgZGVmYXVsdCBlbGVtZW50IHRlbXBsYXRlcyBvbiBzaGFwZSBjcmVhdGlvblxyXG4gIGV2ZW50QnVzLm9uKFsgJ2NvbW1hbmRTdGFjay5zaGFwZS5jcmVhdGUucG9zdEV4ZWN1dGVkJyBdLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICBhcHBseURlZmF1bHRUZW1wbGF0ZShjb250ZXh0LmNvbnRleHQuc2hhcGUsIGVsZW1lbnRUZW1wbGF0ZXMsIGNvbW1hbmRTdGFjayk7XHJcbiAgfSk7XHJcblxyXG4gIC8vIGFwcGx5IGRlZmF1bHQgZWxlbWVudCB0ZW1wbGF0ZXMgb24gY29ubmVjdGlvbiBjcmVhdGlvblxyXG4gIGV2ZW50QnVzLm9uKFsgJ2NvbW1hbmRTdGFjay5jb25uZWN0aW9uLmNyZWF0ZS5wb3N0RXhlY3V0ZWQnIF0sIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgIGFwcGx5RGVmYXVsdFRlbXBsYXRlKGNvbnRleHQuY29udGV4dC5jb25uZWN0aW9uLCBlbGVtZW50VGVtcGxhdGVzLCBjb21tYW5kU3RhY2spO1xyXG4gIH0pO1xyXG59XHJcblxyXG5yZWdpc3RlckhhbmRsZXJzLiRpbmplY3QgPSBbICdjb21tYW5kU3RhY2snLCAnZWxlbWVudFRlbXBsYXRlcycsICdldmVudEJ1cycsICdlbGVtZW50UmVnaXN0cnknIF07XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgX19pbml0X186IFsgcmVnaXN0ZXJIYW5kbGVycyBdXHJcbn07XHJcblxyXG5cclxuZnVuY3Rpb24gYXBwbHlEZWZhdWx0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcywgY29tbWFuZFN0YWNrKSB7XHJcblxyXG4gIGlmICghZ2V0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcylcclxuICAgICAgJiYgZ2V0RGVmYXVsdFRlbXBsYXRlKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZXMpKSB7XHJcblxyXG4gICAgdmFyIGNvbW1hbmQgPSAncHJvcGVydGllc1BhbmVsLmFjdGl2aXRpLmNoYW5nZVRlbXBsYXRlJztcclxuICAgIHZhciBjb21tYW5kQ29udGV4dCA9IHtcclxuICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgbmV3VGVtcGxhdGU6IGdldERlZmF1bHRUZW1wbGF0ZShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzKVxyXG4gICAgfTtcclxuXHJcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZShjb21tYW5kLCBjb21tYW5kQ29udGV4dCk7XHJcbiAgfVxyXG59XHJcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xyXG4gIF9fZGVwZW5kc19fOiBbXHJcbiAgICByZXF1aXJlKCcuL2NtZC9pbmRleCcpLFxyXG4gICAgcmVxdWlyZSgnZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUnKS5kZWZhdWx0XHJcbiAgXSxcclxuICBfX2luaXRfXzogW1xyXG4gICAgJ2N1c3RvbUVsZW1lbnRzUHJvcGVydGllc0FjdGl2YXRvcicsXHJcbiAgICAnZWxlbWVudFRlbXBsYXRlc0xvYWRlcidcclxuICBdLFxyXG4gIGN1c3RvbUVsZW1lbnRzUHJvcGVydGllc0FjdGl2YXRvcjogWyAndHlwZScsIHJlcXVpcmUoJy4vQ3VzdG9tRWxlbWVudHNQcm9wZXJ0aWVzQWN0aXZhdG9yJykgXSxcclxuICBlbGVtZW50VGVtcGxhdGVzOiBbICd0eXBlJywgcmVxdWlyZSgnLi9FbGVtZW50VGVtcGxhdGVzJykgXSxcclxuICBlbGVtZW50VGVtcGxhdGVzTG9hZGVyOiBbICd0eXBlJywgcmVxdWlyZSgnLi9FbGVtZW50VGVtcGxhdGVzTG9hZGVyJykgXVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGdldFRlbXBsYXRlID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZ2V0VGVtcGxhdGUsXHJcbiAgICBnZXRUZW1wbGF0ZUlkID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZ2V0VGVtcGxhdGVJZDtcclxuXHJcbnZhciBmaW5kID0gcmVxdWlyZSgnbG9kYXNoL2ZpbmQnKTtcclxuXHJcbnZhciBURU1QTEFURV9BVFRSID0gcmVxdWlyZSgnLi4vSGVscGVyJykuVEVNUExBVEVfQVRUUjtcclxuXHJcbmZ1bmN0aW9uIGlzQW55KGVsZW1lbnQsIHR5cGVzKSB7XHJcbiAgcmV0dXJuIHR5cGVzLnJlZHVjZShmdW5jdGlvbihyZXN1bHQsIHR5cGUpIHtcclxuICAgIHJldHVybiByZXN1bHQgfHwgaXMoZWxlbWVudCwgdHlwZSk7XHJcbiAgfSwgZmFsc2UpO1xyXG59XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBvcHRpb25zID0gZ2V0VGVtcGxhdGVPcHRpb25zKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZXMsIHRyYW5zbGF0ZSk7XHJcblxyXG4gIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSAmJiAhb3B0aW9uc1swXS5pc0RlZmF1bHQpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIC8vIHNlbGVjdCBlbGVtZW50IHRlbXBsYXRlICh2aWEgZHJvcGRvd24pXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5zZWxlY3RCb3goe1xyXG4gICAgaWQ6ICdlbGVtZW50VGVtcGxhdGUtY2hvb3NlcicsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdFbGVtZW50IFRlbXBsYXRlJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnYWN0aXZpdGk6bW9kZWxlclRlbXBsYXRlJyxcclxuICAgIHNlbGVjdE9wdGlvbnM6IG9wdGlvbnMsXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnRpZXMpIHtcclxuICAgICAgcmV0dXJuIGFwcGx5VGVtcGxhdGUoZWxlbWVudCwgcHJvcGVydGllc1tURU1QTEFURV9BVFRSXSwgZWxlbWVudFRlbXBsYXRlcyk7XHJcbiAgICB9LFxyXG4gICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgdGVtcGxhdGUgPSBnZXRUZW1wbGF0ZShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzKTtcclxuXHJcbiAgICAgIHJldHVybiB0ZW1wbGF0ZSAmJiBpc0RlZmF1bHRUZW1wbGF0ZSh0ZW1wbGF0ZSk7XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxufTtcclxuXHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBhcHBseVRlbXBsYXRlKGVsZW1lbnQsIG5ld1RlbXBsYXRlSWQsIGVsZW1lbnRUZW1wbGF0ZXMpIHtcclxuXHJcbiAgLy8gY2xlYW51cFxyXG4gIC8vIGNsZWFyIGlucHV0IG91dHB1dCBtYXBwaW5nc1xyXG4gIC8vIHVuZG8gY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRlZmluZWQgaW4gdGVtcGxhdGVcclxuXHJcbiAgLy8gcmUtZXN0YWJsaXNoXHJcbiAgLy8gc2V0IGlucHV0IG91dHB1dCBtYXBwaW5nc1xyXG4gIC8vIGFwcGx5IGNoYW5nZXMgdG8gcHJvcGVydGllcyBhcyBkZWZpbmVkIGluIG5ldyB0ZW1wbGF0ZVxyXG5cclxuICB2YXIgb2xkVGVtcGxhdGUgPSBnZXRUZW1wbGF0ZShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzKSxcclxuICAgICAgbmV3VGVtcGxhdGUgPSBlbGVtZW50VGVtcGxhdGVzLmdldChuZXdUZW1wbGF0ZUlkKTtcclxuXHJcbiAgaWYgKG9sZFRlbXBsYXRlID09PSBuZXdUZW1wbGF0ZSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGNtZDogJ3Byb3BlcnRpZXNQYW5lbC5hY3Rpdml0aS5jaGFuZ2VUZW1wbGF0ZScsXHJcbiAgICBjb250ZXh0OiB7XHJcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgIG9sZFRlbXBsYXRlOiBvbGRUZW1wbGF0ZSxcclxuICAgICAgbmV3VGVtcGxhdGU6IG5ld1RlbXBsYXRlXHJcbiAgICB9XHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0VGVtcGxhdGVPcHRpb25zKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZXMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgY3VycmVudFRlbXBsYXRlSWQgPSBnZXRUZW1wbGF0ZUlkKGVsZW1lbnQpO1xyXG5cclxuICB2YXIgZW1wdHlPcHRpb24gPSB7XHJcbiAgICBuYW1lOiAnJyxcclxuICAgIHZhbHVlOiAnJ1xyXG4gIH07XHJcblxyXG4gIHZhciBhbGxPcHRpb25zID0gZWxlbWVudFRlbXBsYXRlcy5nZXRBbGwoKS5yZWR1Y2UoZnVuY3Rpb24odGVtcGxhdGVzLCB0KSB7XHJcbiAgICBpZiAoIWlzQW55KGVsZW1lbnQsIHQuYXBwbGllc1RvKSkge1xyXG4gICAgICByZXR1cm4gdGVtcGxhdGVzO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0ZW1wbGF0ZXMuY29uY2F0KHtcclxuICAgICAgbmFtZTogdHJhbnNsYXRlKHQubmFtZSksXHJcbiAgICAgIHZhbHVlOiB0LmlkLFxyXG4gICAgICBpc0RlZmF1bHQ6IHQuaXNEZWZhdWx0XHJcbiAgICB9KTtcclxuICB9LCBbIGVtcHR5T3B0aW9uIF0pO1xyXG5cclxuXHJcbiAgdmFyIGRlZmF1bHRPcHRpb24gPSBmaW5kKGFsbE9wdGlvbnMsIGZ1bmN0aW9uKG9wdGlvbikge1xyXG4gICAgcmV0dXJuIGlzRGVmYXVsdFRlbXBsYXRlKG9wdGlvbik7XHJcbiAgfSk7XHJcblxyXG4gIHZhciBjdXJyZW50T3B0aW9uID0gZmluZChhbGxPcHRpb25zLCBmdW5jdGlvbihvcHRpb24pIHtcclxuICAgIHJldHVybiBvcHRpb24udmFsdWUgPT09IGN1cnJlbnRUZW1wbGF0ZUlkO1xyXG4gIH0pO1xyXG5cclxuICBpZiAoY3VycmVudFRlbXBsYXRlSWQgJiYgIWN1cnJlbnRPcHRpb24pIHtcclxuICAgIGN1cnJlbnRPcHRpb24gPSB1bmtub3duVGVtcGxhdGUoY3VycmVudFRlbXBsYXRlSWQsIHRyYW5zbGF0ZSk7XHJcblxyXG4gICAgYWxsT3B0aW9ucy5wdXNoKGN1cnJlbnRPcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFkZWZhdWx0T3B0aW9uKSB7XHJcblxyXG4gICAgLy8gcmV0dXJuIGFsbCBvcHRpb25zLCBpbmNsdWRpbmcgZW1wdHlcclxuICAgIC8vIGFuZCBvcHRpb25hbGx5IHVua25vd25UZW1wbGF0ZSBvcHRpb25cclxuICAgIHJldHVybiBhbGxPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLy8gc3BlY2lhbCBsaW1pdGVkIGhhbmRsaW5nIGZvclxyXG4gIC8vIGRlZmF1bHQgb3B0aW9uc1xyXG5cclxuICB2YXIgb3B0aW9ucyA9IFtdO1xyXG5cclxuICAvLyBjdXJyZW50IHRlbXBsYXRlIG5vdCBzZXRcclxuICBpZiAoIWN1cnJlbnRUZW1wbGF0ZUlkKSB7XHJcbiAgICBvcHRpb25zLnB1c2goe1xyXG4gICAgICBuYW1lOiAnJyxcclxuICAgICAgdmFsdWU6ICcnXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIGN1cnJlbnQgdGVtcGxhdGUgbm90IGRlZmF1bHRcclxuICBpZiAoY3VycmVudE9wdGlvbiAmJiBjdXJyZW50T3B0aW9uICE9PSBkZWZhdWx0T3B0aW9uKSB7XHJcbiAgICBvcHRpb25zLnB1c2goY3VycmVudE9wdGlvbik7XHJcbiAgfVxyXG5cclxuICBvcHRpb25zLnB1c2goZGVmYXVsdE9wdGlvbik7XHJcblxyXG4gIC8vIFsgKGVtcHR5KSwgKGN1cnJlbnQpLCBkZWZhdWx0T3B0aW9uIF1cclxuICByZXR1cm4gb3B0aW9ucztcclxufVxyXG5cclxuZnVuY3Rpb24gdW5rbm93blRlbXBsYXRlKHRlbXBsYXRlSWQsIHRyYW5zbGF0ZSkge1xyXG4gIHJldHVybiB7XHJcbiAgICBuYW1lOiB0cmFuc2xhdGUoJ1t1bmtub3duIHRlbXBsYXRlOiB7dGVtcGxhdGVJZH1dJywgeyB0ZW1wbGF0ZUlkOiB0ZW1wbGF0ZUlkIH0pLFxyXG4gICAgdmFsdWU6IHRlbXBsYXRlSWRcclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0RlZmF1bHRUZW1wbGF0ZShlbGVtZW50VGVtcGxhdGUpIHtcclxuICByZXR1cm4gZWxlbWVudFRlbXBsYXRlLmlzRGVmYXVsdDtcclxufSIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcclxuICAgIGdldFRlbXBsYXRlID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZ2V0VGVtcGxhdGUsXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXHJcbiAgICBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKTtcclxuXHJcbnZhciBmaW5kRXh0ZW5zaW9uID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZmluZEV4dGVuc2lvbixcclxuICAgIGZpbmRFeHRlbnNpb25zID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZmluZEV4dGVuc2lvbnMsXHJcbiAgICBmaW5kSW5wdXRQYXJhbWV0ZXIgPSByZXF1aXJlKCcuLi9IZWxwZXInKS5maW5kSW5wdXRQYXJhbWV0ZXIsXHJcbiAgICBmaW5kT3V0cHV0UGFyYW1ldGVyID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZmluZE91dHB1dFBhcmFtZXRlcixcclxuICAgIGZpbmRBY3Rpdml0aVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vSGVscGVyJykuZmluZEFjdGl2aXRpUHJvcGVydHksXHJcbiAgICBmaW5kQWN0aXZpdGlJbk91dCA9IHJlcXVpcmUoJy4uL0hlbHBlcicpLmZpbmRBY3Rpdml0aUluT3V0O1xyXG5cclxudmFyIGNyZWF0ZUFjdGl2aXRpUHJvcGVydHkgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aVByb3BlcnR5LFxyXG4gICAgY3JlYXRlSW5wdXRQYXJhbWV0ZXIgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVJbnB1dFBhcmFtZXRlcixcclxuICAgIGNyZWF0ZU91dHB1dFBhcmFtZXRlciA9IHJlcXVpcmUoJy4uL0NyZWF0ZUhlbHBlcicpLmNyZWF0ZU91dHB1dFBhcmFtZXRlcixcclxuICAgIGNyZWF0ZUFjdGl2aXRpSW4gPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aUluLFxyXG4gICAgY3JlYXRlQWN0aXZpdGlPdXQgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aU91dCxcclxuICAgIGNyZWF0ZUFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkgPSByZXF1aXJlKCcuLi9DcmVhdGVIZWxwZXInKS5jcmVhdGVBY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5LFxyXG4gICAgY3JlYXRlQWN0aXZpdGlGaWVsZEluamVjdGlvbiA9IHJlcXVpcmUoJy4uL0NyZWF0ZUhlbHBlcicpLmNyZWF0ZUFjdGl2aXRpRmllbGRJbmplY3Rpb247XHJcblxyXG52YXIgQUNUSVZJVElfUFJPUEVSVFlfVFlQRSA9ICdhY3Rpdml0aTpwcm9wZXJ0eScsXHJcbiAgICBBQ1RJVklUSV9JTlBVVF9QQVJBTUVURVJfVFlQRSA9ICdhY3Rpdml0aTppbnB1dFBhcmFtZXRlcicsXHJcbiAgICBBQ1RJVklUSV9PVVRQVVRfUEFSQU1FVEVSX1RZUEUgPSAnYWN0aXZpdGk6b3V0cHV0UGFyYW1ldGVyJyxcclxuICAgIEFDVElWSVRJX0lOX1RZUEUgPSAnYWN0aXZpdGk6aW4nLFxyXG4gICAgQUNUSVZJVElfT1VUX1RZUEUgPSAnYWN0aXZpdGk6b3V0JyxcclxuICAgIEFDVElWSVRJX0lOX0JVU0lORVNTX0tFWV9UWVBFID0gJ2FjdGl2aXRpOmluOmJ1c2luZXNzS2V5JyxcclxuICAgIEFDVElWSVRJX0VYRUNVVElPTl9MSVNURU5FUl9UWVBFID0gJ2FjdGl2aXRpOmV4ZWN1dGlvbkxpc3RlbmVyJyxcclxuICAgIEFDVElWSVRJX0ZJRUxEID0gJ2FjdGl2aXRpOmZpZWxkJztcclxuXHJcbnZhciBCQVNJQ19NT0RETEVfVFlQRVMgPSBbXHJcbiAgJ0Jvb2xlYW4nLFxyXG4gICdJbnRlZ2VyJyxcclxuICAnU3RyaW5nJ1xyXG5dO1xyXG5cclxudmFyIEVYVEVOU0lPTl9CSU5ESU5HX1RZUEVTID0gW1xyXG4gIEFDVElWSVRJX1BST1BFUlRZX1RZUEUsXHJcbiAgQUNUSVZJVElfSU5QVVRfUEFSQU1FVEVSX1RZUEUsXHJcbiAgQUNUSVZJVElfT1VUUFVUX1BBUkFNRVRFUl9UWVBFLFxyXG4gIEFDVElWSVRJX0lOX1RZUEUsXHJcbiAgQUNUSVZJVElfT1VUX1RZUEUsXHJcbiAgQUNUSVZJVElfSU5fQlVTSU5FU1NfS0VZX1RZUEUsXHJcbiAgQUNUSVZJVElfRklFTERcclxuXTtcclxuXHJcbnZhciBJT19CSU5ESU5HX1RZUEVTID0gW1xyXG4gIEFDVElWSVRJX0lOUFVUX1BBUkFNRVRFUl9UWVBFLFxyXG4gIEFDVElWSVRJX09VVFBVVF9QQVJBTUVURVJfVFlQRVxyXG5dO1xyXG5cclxudmFyIElOX09VVF9CSU5ESU5HX1RZUEVTID0gW1xyXG4gIEFDVElWSVRJX0lOX1RZUEUsXHJcbiAgQUNUSVZJVElfT1VUX1RZUEUsXHJcbiAgQUNUSVZJVElfSU5fQlVTSU5FU1NfS0VZX1RZUEVcclxuXTtcclxuXHJcbi8qKlxyXG4gKiBJbmplY3RzIGN1c3RvbSBwcm9wZXJ0aWVzIGludG8gdGhlIGdpdmVuIGdyb3VwLlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqIEBwYXJhbSB7RWxlbWVudFRlbXBsYXRlc30gZWxlbWVudFRlbXBsYXRlc1xyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2xhdGVcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcywgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgdGVtcGxhdGUgPSBnZXRUZW1wbGF0ZShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzKTtcclxuXHJcbiAgaWYgKCF0ZW1wbGF0ZSkge1xyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgdmFyIHJlbmRlckN1c3RvbUZpZWxkID0gZnVuY3Rpb24oaWQsIHAsIGlkeCkge1xyXG4gICAgdmFyIHByb3BlcnR5VHlwZSA9IHAudHlwZTtcclxuXHJcbiAgICB2YXIgZW50cnlPcHRpb25zID0ge1xyXG4gICAgICBpZDogaWQsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBwLmRlc2NyaXB0aW9uLFxyXG4gICAgICBsYWJlbDogcC5sYWJlbCA/IHRyYW5zbGF0ZShwLmxhYmVsKSA6IHAubGFiZWwsXHJcbiAgICAgIG1vZGVsUHJvcGVydHk6IGlkLFxyXG4gICAgICBnZXQ6IHByb3BlcnR5R2V0dGVyKGlkLCBwKSxcclxuICAgICAgc2V0OiBwcm9wZXJ0eVNldHRlcihpZCwgcCwgYnBtbkZhY3RvcnkpLFxyXG4gICAgICB2YWxpZGF0ZTogcHJvcGVydHlWYWxpZGF0b3IoaWQsIHAsIHRyYW5zbGF0ZSlcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGVudHJ5O1xyXG5cclxuICAgIGlmIChwcm9wZXJ0eVR5cGUgPT09ICdCb29sZWFuJykge1xyXG4gICAgICBlbnRyeSA9IGVudHJ5RmFjdG9yeS5jaGVja2JveChlbnRyeU9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwcm9wZXJ0eVR5cGUgPT09ICdTdHJpbmcnKSB7XHJcbiAgICAgIGVudHJ5ID0gZW50cnlGYWN0b3J5LnRleHRGaWVsZChlbnRyeU9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwcm9wZXJ0eVR5cGUgPT09ICdUZXh0Jykge1xyXG4gICAgICBlbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0Qm94KGVudHJ5T3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHByb3BlcnR5VHlwZSA9PT0gJ0Ryb3Bkb3duJykge1xyXG4gICAgICBlbnRyeU9wdGlvbnMuc2VsZWN0T3B0aW9ucyA9IHAuY2hvaWNlcztcclxuXHJcbiAgICAgIGVudHJ5ID0gZW50cnlGYWN0b3J5LnNlbGVjdEJveChlbnRyeU9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBlbnRyeTtcclxuICB9O1xyXG5cclxuICB2YXIgZ3JvdXBzID0gW107XHJcbiAgdmFyIGlkLCBlbnRyeTtcclxuXHJcbiAgdmFyIGN1c3RvbUZpZWxkc0dyb3VwID0ge1xyXG4gICAgaWQ6ICdjdXN0b21GaWVsZCcsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDdXN0b20gRmllbGRzJyksXHJcbiAgICBlbnRyaWVzOiBbXVxyXG4gIH07XHJcbiAgdGVtcGxhdGUucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKHAsIGlkeCkge1xyXG5cclxuICAgIGlkID0gJ2N1c3RvbS0nICsgdGVtcGxhdGUuaWQgKyAnLScgKyBpZHg7XHJcblxyXG4gICAgZW50cnkgPSByZW5kZXJDdXN0b21GaWVsZChpZCwgcCwgaWR4KTtcclxuICAgIGlmIChlbnRyeSkge1xyXG4gICAgICBjdXN0b21GaWVsZHNHcm91cC5lbnRyaWVzLnB1c2goZW50cnkpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG4gIGlmIChjdXN0b21GaWVsZHNHcm91cC5lbnRyaWVzLmxlbmd0aCA+IDApIHtcclxuICAgIGdyb3Vwcy5wdXNoKGN1c3RvbUZpZWxkc0dyb3VwKTtcclxuICB9XHJcblxyXG4gIGlmICh0ZW1wbGF0ZS5zY29wZXMpIHtcclxuICAgIGZvciAodmFyIHNjb3BlTmFtZSBpbiB0ZW1wbGF0ZS5zY29wZXMpIHtcclxuXHJcbiAgICAgIHZhciBzY29wZSA9IHRlbXBsYXRlLnNjb3Blc1tzY29wZU5hbWVdO1xyXG4gICAgICB2YXIgaWRTY29wZU5hbWUgPSBzY29wZU5hbWUucmVwbGFjZSgvOi9nLCAnXycpO1xyXG5cclxuICAgICAgdmFyIGN1c3RvbVNjb3BlRmllbGRzR3JvdXAgPSB7XHJcbiAgICAgICAgaWQ6ICdjdXN0b21GaWVsZC0nICsgaWRTY29wZU5hbWUsXHJcbiAgICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ3VzdG9tIEZpZWxkcyBmb3Igc2NvcGU6ICcpICsgc2NvcGVOYW1lLFxyXG4gICAgICAgIGVudHJpZXM6IFtdXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBzY29wZS5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocCwgaWR4KSB7XHJcblxyXG4gICAgICAgIHZhciBwcm9wZXJ0eUlkID0gJ2N1c3RvbS0nICsgdGVtcGxhdGUuaWQgKyAnLScgKyBpZFNjb3BlTmFtZSArICctJyArIGlkeDtcclxuXHJcbiAgICAgICAgdmFyIHNjb3BlZFByb3BlcnR5ID0gcHJvcGVydHlXaXRoU2NvcGUocCwgc2NvcGVOYW1lKTtcclxuXHJcbiAgICAgICAgZW50cnkgPSByZW5kZXJDdXN0b21GaWVsZChwcm9wZXJ0eUlkLCBzY29wZWRQcm9wZXJ0eSwgaWR4KTtcclxuICAgICAgICBpZiAoZW50cnkpIHtcclxuICAgICAgICAgIGN1c3RvbVNjb3BlRmllbGRzR3JvdXAuZW50cmllcy5wdXNoKGVudHJ5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKGN1c3RvbVNjb3BlRmllbGRzR3JvdXAuZW50cmllcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZ3JvdXBzLnB1c2goY3VzdG9tU2NvcGVGaWVsZHNHcm91cCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBncm91cHM7XHJcbn07XHJcblxyXG5cclxuLy8gZ2V0dGVycywgc2V0dGVycyBhbmQgdmFsaWRhdG9ycyAvLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG4vKipcclxuICogUmV0dXJuIGEgZ2V0dGVyIHRoYXQgcmV0cmlldmVzIHRoZSBnaXZlbiBwcm9wZXJ0eS5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcclxuICogQHBhcmFtIHtQcm9wZXJ0eURlc2NyaXB0b3J9IHByb3BlcnR5XHJcbiAqXHJcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxyXG4gKi9cclxuZnVuY3Rpb24gcHJvcGVydHlHZXR0ZXIobmFtZSwgcHJvcGVydHkpIHtcclxuXHJcbiAgLyogZ2V0dGVyICovXHJcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldChlbGVtZW50KSB7XHJcbiAgICB2YXIgdmFsdWUgPSBnZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHByb3BlcnR5KTtcclxuXHJcbiAgICByZXR1cm4gb2JqZWN0V2l0aEtleShuYW1lLCB2YWx1ZSk7XHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiBhIHNldHRlciB0aGF0IHVwZGF0ZXMgdGhlIGdpdmVuIHByb3BlcnR5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcclxuICpcclxuICogQHJldHVybiB7RnVuY3Rpb259XHJcbiAqL1xyXG5mdW5jdGlvbiBwcm9wZXJ0eVNldHRlcihuYW1lLCBwcm9wZXJ0eSwgYnBtbkZhY3RvcnkpIHtcclxuXHJcbiAgLyogc2V0dGVyICovXHJcbiAgcmV0dXJuIGZ1bmN0aW9uIHNldChlbGVtZW50LCB2YWx1ZXMpIHtcclxuXHJcbiAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbbmFtZV07XHJcblxyXG4gICAgcmV0dXJuIHNldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCBicG1uRmFjdG9yeSk7XHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiBhIHZhbGlkYXRvciB0aGF0IGVuc3VyZXMgdGhlIHByb3BlcnR5IGlzIG9rLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNsYXRlXHJcbiAqXHJcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxyXG4gKi9cclxuZnVuY3Rpb24gcHJvcGVydHlWYWxpZGF0b3IobmFtZSwgcHJvcGVydHksIHRyYW5zbGF0ZSkge1xyXG5cclxuICAvKiB2YWxpZGF0b3IgKi9cclxuICByZXR1cm4gZnVuY3Rpb24gdmFsaWRhdGUoZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbbmFtZV07XHJcblxyXG4gICAgdmFyIGVycm9yID0gdmFsaWRhdGVWYWx1ZSh2YWx1ZSwgcHJvcGVydHksIHRyYW5zbGF0ZSk7XHJcblxyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiBvYmplY3RXaXRoS2V5KG5hbWUsIGVycm9yKTtcclxuICAgIH1cclxuICB9O1xyXG59XHJcblxyXG5cclxuLy8gZ2V0LCBzZXQgYW5kIHZhbGlkYXRlIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuLyoqXHJcbiAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBkZXNjcmlwdG9yLFxyXG4gKiBvbiB0aGUgcGFzc2VkIGRpYWdyYW0gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICpcclxuICogQHJldHVybiB7QW55fVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBwcm9wZXJ0eSkge1xyXG5cclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgdmFyIGJpbmRpbmcgPSBwcm9wZXJ0eS5iaW5kaW5nLFxyXG4gICAgICBzY29wZSA9IHByb3BlcnR5LnNjb3BlO1xyXG5cclxuICB2YXIgYmluZGluZ1R5cGUgPSBiaW5kaW5nLnR5cGUsXHJcbiAgICAgIGJpbmRpbmdOYW1lID0gYmluZGluZy5uYW1lO1xyXG5cclxuICB2YXIgcHJvcGVydHlWYWx1ZSA9IHByb3BlcnR5LnZhbHVlIHx8ICcnO1xyXG5cclxuICBpZiAoc2NvcGUpIHtcclxuICAgIGJvID0gZmluZEV4dGVuc2lvbihibywgc2NvcGUubmFtZSk7XHJcbiAgICBpZiAoIWJvKSB7XHJcbiAgICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gcHJvcGVydHlcclxuICBpZiAoYmluZGluZ1R5cGUgPT09ICdwcm9wZXJ0eScpIHtcclxuXHJcbiAgICB2YXIgdmFsdWUgPSBiby5nZXQoYmluZGluZ05hbWUpO1xyXG5cclxuICAgIGlmIChiaW5kaW5nTmFtZSA9PT0gJ2NvbmRpdGlvbkV4cHJlc3Npb24nKSB7XHJcbiAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZS5ib2R5O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIHJldHVybiBkZWZpbmVkIGRlZmF1bHRcclxuICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gcmV0dXJuIHZhbHVlOyBkZWZhdWx0IHRvIGRlZmluZWQgZGVmYXVsdFxyXG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyA/IHZhbHVlIDogcHJvcGVydHlWYWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhciBhY3Rpdml0aVByb3BlcnRpZXMsXHJcbiAgICAgIGFjdGl2aXRpUHJvcGVydHk7XHJcblxyXG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfUFJPUEVSVFlfVFlQRSkge1xyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIGFjdGl2aXRpUHJvcGVydGllcyA9IGJvLmdldCgncHJvcGVydGllcycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYWN0aXZpdGlQcm9wZXJ0aWVzID0gZmluZEV4dGVuc2lvbihibywgJ2FjdGl2aXRpOlByb3BlcnRpZXMnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYWN0aXZpdGlQcm9wZXJ0aWVzKSB7XHJcbiAgICAgIGFjdGl2aXRpUHJvcGVydHkgPSBmaW5kQWN0aXZpdGlQcm9wZXJ0eShhY3Rpdml0aVByb3BlcnRpZXMsIGJpbmRpbmcpO1xyXG5cclxuICAgICAgaWYgKGFjdGl2aXRpUHJvcGVydHkpIHtcclxuICAgICAgICByZXR1cm4gYWN0aXZpdGlQcm9wZXJ0eS52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlO1xyXG4gIH1cclxuXHJcbiAgdmFyIGlucHV0T3V0cHV0LFxyXG4gICAgICBpb1BhcmFtZXRlcjtcclxuXHJcbiAgaWYgKElPX0JJTkRJTkdfVFlQRVMuaW5kZXhPZihiaW5kaW5nVHlwZSkgIT09IC0xKSB7XHJcblxyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIGlucHV0T3V0cHV0ID0gYm8uZ2V0KCdpbnB1dE91dHB1dCcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW5wdXRPdXRwdXQgPSBmaW5kRXh0ZW5zaW9uKGJvLCAnYWN0aXZpdGk6SW5wdXRPdXRwdXQnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlucHV0T3V0cHV0KSB7XHJcbiAgICAgIC8vIGlvUGFyYW1ldGVyIGNhbm5vdCBleGlzdCB5ZXQsIHJldHVybiBwcm9wZXJ0eSB2YWx1ZVxyXG4gICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGFjdGl2aXRpIGlucHV0IHBhcmFtZXRlclxyXG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfSU5QVVRfUEFSQU1FVEVSX1RZUEUpIHtcclxuICAgIGlvUGFyYW1ldGVyID0gZmluZElucHV0UGFyYW1ldGVyKGlucHV0T3V0cHV0LCBiaW5kaW5nKTtcclxuXHJcbiAgICBpZiAoaW9QYXJhbWV0ZXIpIHtcclxuICAgICAgaWYgKGJpbmRpbmcuc2NyaXB0Rm9ybWF0KSB7XHJcbiAgICAgICAgaWYgKGlvUGFyYW1ldGVyLmRlZmluaXRpb24pIHtcclxuICAgICAgICAgIHJldHVybiBpb1BhcmFtZXRlci5kZWZpbml0aW9uLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gaW9QYXJhbWV0ZXIudmFsdWUgfHwgJyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8vIGFjdGl2aXRpIG91dHB1dCBwYXJhbWV0ZXJcclxuICBpZiAoYmluZGluZy50eXBlID09PSBBQ1RJVklUSV9PVVRQVVRfUEFSQU1FVEVSX1RZUEUpIHtcclxuICAgIGlvUGFyYW1ldGVyID0gZmluZE91dHB1dFBhcmFtZXRlcihpbnB1dE91dHB1dCwgYmluZGluZyk7XHJcblxyXG4gICAgaWYgKGlvUGFyYW1ldGVyKSB7XHJcbiAgICAgIHJldHVybiBpb1BhcmFtZXRlci5uYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlO1xyXG4gIH1cclxuXHJcblxyXG4gIHZhciBpb0VsZW1lbnQ7XHJcblxyXG4gIGlmIChJTl9PVVRfQklORElOR19UWVBFUy5pbmRleE9mKGJpbmRpbmdUeXBlKSAhPSAtMSkge1xyXG4gICAgaW9FbGVtZW50ID0gZmluZEFjdGl2aXRpSW5PdXQoYm8sIGJpbmRpbmcpO1xyXG5cclxuICAgIGlmIChpb0VsZW1lbnQpIHtcclxuICAgICAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9JTl9CVVNJTkVTU19LRVlfVFlQRSkge1xyXG4gICAgICAgIHJldHVybiBpb0VsZW1lbnQuYnVzaW5lc3NLZXk7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICBpZiAoYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX09VVF9UWVBFKSB7XHJcbiAgICAgICAgcmV0dXJuIGlvRWxlbWVudC50YXJnZXQ7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICBpZiAoYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX0lOX1RZUEUpIHtcclxuICAgICAgICByZXR1cm4gaW9FbGVtZW50W2JpbmRpbmcuZXhwcmVzc2lvbiA/ICdzb3VyY2VFeHByZXNzaW9uJyA6ICdzb3VyY2UnXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlO1xyXG4gIH1cclxuXHJcbiAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9FWEVDVVRJT05fTElTVEVORVJfVFlQRSkge1xyXG4gICAgdmFyIGV4ZWN1dGlvbkxpc3RlbmVyO1xyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIGV4ZWN1dGlvbkxpc3RlbmVyID0gYm8uZ2V0KCdleGVjdXRpb25MaXN0ZW5lcicpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZXhlY3V0aW9uTGlzdGVuZXIgPSBmaW5kRXh0ZW5zaW9uKGJvLCAnYWN0aXZpdGk6RXhlY3V0aW9uTGlzdGVuZXInKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZXhlY3V0aW9uTGlzdGVuZXIuc2NyaXB0LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgdmFyIGZpZWxkSW5qZWN0aW9uO1xyXG4gIGlmIChBQ1RJVklUSV9GSUVMRCA9PT0gYmluZGluZ1R5cGUpIHtcclxuICAgIHZhciBmaWVsZEluamVjdGlvbnMgPSBmaW5kRXh0ZW5zaW9ucyhibywgWyAnYWN0aXZpdGk6RmllbGQnIF0pO1xyXG4gICAgZmllbGRJbmplY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xyXG4gICAgICBpZiAoaXRlbS5uYW1lID09PSBiaW5kaW5nLm5hbWUpIHtcclxuICAgICAgICBmaWVsZEluamVjdGlvbiA9IGl0ZW07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKGZpZWxkSW5qZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmaWVsZEluamVjdGlvbi5zdHJpbmcgfHwgZmllbGRJbmplY3Rpb24uZXhwcmVzc2lvbjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRocm93IHVua25vd25Qcm9wZXJ0eUJpbmRpbmcocHJvcGVydHkpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5nZXRQcm9wZXJ0eVZhbHVlID0gZ2V0UHJvcGVydHlWYWx1ZTtcclxuXHJcblxyXG4vKipcclxuICogUmV0dXJuIGFuIHVwZGF0ZSBvcGVyYXRpb24gdGhhdCBjaGFuZ2VzIHRoZSBkaWFncmFtXHJcbiAqIGVsZW1lbnQncyBjdXN0b20gcHJvcGVydHkgdG8gdGhlIGdpdmVuIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgcmVzcG9uc2Ugb2YgdGhpcyBtZXRob2Qgd2lsbCBiZSBwcm9jZXNzZWQgdmlhXHJcbiAqIHtAbGluayBQcm9wZXJ0aWVzUGFuZWwjYXBwbHlDaGFuZ2VzfS5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXHJcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XHJcbiAqXHJcbiAqIEByZXR1cm4ge09iamVjdHxBcnJheTxPYmplY3Q+fSByZXN1bHRzIHRvIGJlIHByb2Nlc3NlZFxyXG4gKi9cclxuZnVuY3Rpb24gc2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUsIGJwbW5GYWN0b3J5KSB7XHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHZhciBiaW5kaW5nID0gcHJvcGVydHkuYmluZGluZyxcclxuICAgICAgc2NvcGUgPSBwcm9wZXJ0eS5zY29wZTtcclxuXHJcbiAgdmFyIGJpbmRpbmdUeXBlID0gYmluZGluZy50eXBlLFxyXG4gICAgICBiaW5kaW5nTmFtZSA9IGJpbmRpbmcubmFtZTtcclxuXHJcbiAgdmFyIHByb3BlcnR5VmFsdWU7XHJcblxyXG4gIHZhciB1cGRhdGVzID0gW107XHJcblxyXG4gIHZhciBleHRlbnNpb25FbGVtZW50cztcclxuXHJcbiAgaWYgKEVYVEVOU0lPTl9CSU5ESU5HX1RZUEVTLmluZGV4T2YoYmluZGluZ1R5cGUpICE9PSAtMSkge1xyXG4gICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBiby5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XHJcblxyXG4gICAgLy8gY3JlYXRlIGV4dGVuc2lvbiBlbGVtZW50cywgaWYgdGhleSBkbyBub3QgZXhpc3QgKHlldClcclxuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcclxuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCBudWxsLCBlbGVtZW50LCBicG1uRmFjdG9yeSk7XHJcblxyXG4gICAgICB1cGRhdGVzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KFxyXG4gICAgICAgIGVsZW1lbnQsIGJvLCBvYmplY3RXaXRoS2V5KCdleHRlbnNpb25FbGVtZW50cycsIGV4dGVuc2lvbkVsZW1lbnRzKVxyXG4gICAgICApKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmIChzY29wZSkge1xyXG4gICAgYm8gPSBmaW5kRXh0ZW5zaW9uKGJvLCBzY29wZS5uYW1lKTtcclxuICAgIGlmICghYm8pIHtcclxuICAgICAgYm8gPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoc2NvcGUubmFtZSwgbnVsbCwgZWxlbWVudCwgYnBtbkZhY3RvcnkpO1xyXG5cclxuICAgICAgdXBkYXRlcy5wdXNoKGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChcclxuICAgICAgICBibywgZXh0ZW5zaW9uRWxlbWVudHMsICd2YWx1ZXMnLCBbIGJvIF1cclxuICAgICAgKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBwcm9wZXJ0eVxyXG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gJ3Byb3BlcnR5Jykge1xyXG5cclxuICAgIGlmIChiaW5kaW5nTmFtZSA9PT0gJ2NvbmRpdGlvbkV4cHJlc3Npb24nKSB7XHJcblxyXG4gICAgICBwcm9wZXJ0eVZhbHVlID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdicG1uOkZvcm1hbEV4cHJlc3Npb24nLCB7XHJcbiAgICAgICAgYm9keTogdmFsdWUsXHJcbiAgICAgICAgbGFuZ3VhZ2U6IGJpbmRpbmcuc2NyaXB0Rm9ybWF0XHJcbiAgICAgIH0sIGJvLCBicG1uRmFjdG9yeSk7XHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgdmFyIG1vZGRsZVByb3BlcnR5RGVzY3JpcHRvciA9IGJvLiRkZXNjcmlwdG9yLnByb3BlcnRpZXNCeU5hbWVbYmluZGluZ05hbWVdO1xyXG5cclxuICAgICAgdmFyIG1vZGRsZVR5cGUgPSBtb2RkbGVQcm9wZXJ0eURlc2NyaXB0b3IudHlwZTtcclxuXHJcbiAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBvbmx5IHVwZGF0ZSBTdHJpbmcsIEludGVnZXIsIFJlYWwgYW5kXHJcbiAgICAgIC8vIEJvb2xlYW4gcHJvcGVydGllcyAoZG8gbm90IGFjY2lkZW50YWxseSBvdmVycmlkZSBjb21wbGV4IG9iamVjdHMuLi4pXHJcbiAgICAgIGlmIChCQVNJQ19NT0RETEVfVFlQRVMuaW5kZXhPZihtb2RkbGVUeXBlKSA9PT0gLTEpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBzZXQgbW9kZGxlIHR5cGUgPCcgKyBtb2RkbGVUeXBlICsgJz4nKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG1vZGRsZVR5cGUgPT09ICdCb29sZWFuJykge1xyXG4gICAgICAgIHByb3BlcnR5VmFsdWUgPSAhIXZhbHVlO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgaWYgKG1vZGRsZVR5cGUgPT09ICdJbnRlZ2VyJykge1xyXG4gICAgICAgIHByb3BlcnR5VmFsdWUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xyXG5cclxuICAgICAgICBpZiAoaXNOYU4ocHJvcGVydHlWYWx1ZSkpIHtcclxuICAgICAgICAgIC8vIGRvIG5vdCB3cml0ZSBOYU4gdmFsdWVcclxuICAgICAgICAgIHByb3BlcnR5VmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHByb3BlcnR5VmFsdWUgPSB2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChwcm9wZXJ0eVZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdXBkYXRlcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChcclxuICAgICAgICBlbGVtZW50LCBibywgb2JqZWN0V2l0aEtleShiaW5kaW5nTmFtZSwgcHJvcGVydHlWYWx1ZSlcclxuICAgICAgKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBhY3Rpdml0aTpwcm9wZXJ0eVxyXG4gIHZhciBhY3Rpdml0aVByb3BlcnRpZXMsXHJcbiAgICAgIGV4aXN0aW5nQWN0aXZpdGlQcm9wZXJ0eSxcclxuICAgICAgbmV3QWN0aXZpdGlQcm9wZXJ0eTtcclxuXHJcbiAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9QUk9QRVJUWV9UWVBFKSB7XHJcblxyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIGFjdGl2aXRpUHJvcGVydGllcyA9IGJvLmdldCgncHJvcGVydGllcycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYWN0aXZpdGlQcm9wZXJ0aWVzID0gZmluZEV4dGVuc2lvbihleHRlbnNpb25FbGVtZW50cywgJ2FjdGl2aXRpOlByb3BlcnRpZXMnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWFjdGl2aXRpUHJvcGVydGllcykge1xyXG4gICAgICBhY3Rpdml0aVByb3BlcnRpZXMgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2FjdGl2aXRpOlByb3BlcnRpZXMnLCBudWxsLCBibywgYnBtbkZhY3RvcnkpO1xyXG5cclxuICAgICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgICAgdXBkYXRlcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChcclxuICAgICAgICAgIGVsZW1lbnQsIGJvLCB7IHByb3BlcnRpZXM6IGFjdGl2aXRpUHJvcGVydGllcyB9XHJcbiAgICAgICAgKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdXBkYXRlcy5wdXNoKGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChcclxuICAgICAgICAgIGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCAndmFsdWVzJywgWyBhY3Rpdml0aVByb3BlcnRpZXMgXVxyXG4gICAgICAgICkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXhpc3RpbmdBY3Rpdml0aVByb3BlcnR5ID0gZmluZEFjdGl2aXRpUHJvcGVydHkoYWN0aXZpdGlQcm9wZXJ0aWVzLCBiaW5kaW5nKTtcclxuXHJcbiAgICBuZXdBY3Rpdml0aVByb3BlcnR5ID0gY3JlYXRlQWN0aXZpdGlQcm9wZXJ0eShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xyXG5cclxuICAgIHVwZGF0ZXMucHVzaChjbWRIZWxwZXIuYWRkQW5kUmVtb3ZlRWxlbWVudHNGcm9tTGlzdChcclxuICAgICAgZWxlbWVudCxcclxuICAgICAgYWN0aXZpdGlQcm9wZXJ0aWVzLFxyXG4gICAgICAndmFsdWVzJyxcclxuICAgICAgbnVsbCxcclxuICAgICAgWyBuZXdBY3Rpdml0aVByb3BlcnR5IF0sXHJcbiAgICAgIGV4aXN0aW5nQWN0aXZpdGlQcm9wZXJ0eSA/IFsgZXhpc3RpbmdBY3Rpdml0aVByb3BlcnR5IF0gOiBbXVxyXG4gICAgKSk7XHJcbiAgfVxyXG5cclxuICAvLyBhY3Rpdml0aTppbnB1dFBhcmFtZXRlclxyXG4gIC8vIGFjdGl2aXRpOm91dHB1dFBhcmFtZXRlclxyXG4gIHZhciBpbnB1dE91dHB1dCxcclxuICAgICAgZXhpc3RpbmdJb1BhcmFtZXRlcixcclxuICAgICAgbmV3SW9QYXJhbWV0ZXI7XHJcblxyXG4gIGlmIChJT19CSU5ESU5HX1RZUEVTLmluZGV4T2YoYmluZGluZ1R5cGUpICE9PSAtMSkge1xyXG5cclxuICAgIGlmIChzY29wZSkge1xyXG4gICAgICBpbnB1dE91dHB1dCA9IGJvLmdldCgnaW5wdXRPdXRwdXQnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlucHV0T3V0cHV0ID0gZmluZEV4dGVuc2lvbihleHRlbnNpb25FbGVtZW50cywgJ2FjdGl2aXRpOklucHV0T3V0cHV0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY3JlYXRlIGlucHV0T3V0cHV0IGVsZW1lbnQsIGlmIGl0IGRvIG5vdCBleGlzdCAoeWV0KVxyXG4gICAgaWYgKCFpbnB1dE91dHB1dCkge1xyXG4gICAgICBpbnB1dE91dHB1dCA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6SW5wdXRPdXRwdXQnLCBudWxsLCBibywgYnBtbkZhY3RvcnkpO1xyXG5cclxuICAgICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgICAgdXBkYXRlcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChcclxuICAgICAgICAgIGVsZW1lbnQsIGJvLCB7IGlucHV0T3V0cHV0OiBpbnB1dE91dHB1dCB9XHJcbiAgICAgICAgKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdXBkYXRlcy5wdXNoKGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChcclxuICAgICAgICAgIGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCAndmFsdWVzJywgaW5wdXRPdXRwdXRcclxuICAgICAgICApKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9JTlBVVF9QQVJBTUVURVJfVFlQRSkge1xyXG5cclxuICAgIGV4aXN0aW5nSW9QYXJhbWV0ZXIgPSBmaW5kSW5wdXRQYXJhbWV0ZXIoaW5wdXRPdXRwdXQsIGJpbmRpbmcpO1xyXG5cclxuICAgIG5ld0lvUGFyYW1ldGVyID0gY3JlYXRlSW5wdXRQYXJhbWV0ZXIoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KTtcclxuXHJcbiAgICB1cGRhdGVzLnB1c2goY21kSGVscGVyLmFkZEFuZFJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoXHJcbiAgICAgIGVsZW1lbnQsXHJcbiAgICAgIGlucHV0T3V0cHV0LFxyXG4gICAgICAnaW5wdXRQYXJhbWV0ZXJzJyxcclxuICAgICAgbnVsbCxcclxuICAgICAgWyBuZXdJb1BhcmFtZXRlciBdLFxyXG4gICAgICBleGlzdGluZ0lvUGFyYW1ldGVyID8gWyBleGlzdGluZ0lvUGFyYW1ldGVyIF0gOiBbXVxyXG4gICAgKSk7XHJcbiAgfVxyXG5cclxuICBpZiAoYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX09VVFBVVF9QQVJBTUVURVJfVFlQRSkge1xyXG5cclxuICAgIGV4aXN0aW5nSW9QYXJhbWV0ZXIgPSBmaW5kT3V0cHV0UGFyYW1ldGVyKGlucHV0T3V0cHV0LCBiaW5kaW5nKTtcclxuXHJcbiAgICBuZXdJb1BhcmFtZXRlciA9IGNyZWF0ZU91dHB1dFBhcmFtZXRlcihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xyXG5cclxuICAgIHVwZGF0ZXMucHVzaChjbWRIZWxwZXIuYWRkQW5kUmVtb3ZlRWxlbWVudHNGcm9tTGlzdChcclxuICAgICAgZWxlbWVudCxcclxuICAgICAgaW5wdXRPdXRwdXQsXHJcbiAgICAgICdvdXRwdXRQYXJhbWV0ZXJzJyxcclxuICAgICAgbnVsbCxcclxuICAgICAgWyBuZXdJb1BhcmFtZXRlciBdLFxyXG4gICAgICBleGlzdGluZ0lvUGFyYW1ldGVyID8gWyBleGlzdGluZ0lvUGFyYW1ldGVyIF0gOiBbXVxyXG4gICAgKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gYWN0aXZpdGk6aW5cclxuICAvLyBhY3Rpdml0aTpvdXRcclxuICAvLyBhY3Rpdml0aTppbjpidXNpbmVzc0tleVxyXG4gIHZhciBleGlzdGluZ0luT3V0LFxyXG4gICAgICBuZXdJbk91dDtcclxuXHJcbiAgaWYgKElOX09VVF9CSU5ESU5HX1RZUEVTLmluZGV4T2YoYmluZGluZ1R5cGUpICE9PSAtMSkge1xyXG5cclxuICAgIGV4aXN0aW5nSW5PdXQgPSBmaW5kQWN0aXZpdGlJbk91dChibywgYmluZGluZyk7XHJcblxyXG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSBBQ1RJVklUSV9JTl9UWVBFKSB7XHJcbiAgICAgIG5ld0luT3V0ID0gY3JlYXRlQWN0aXZpdGlJbihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xyXG4gICAgfSBlbHNlXHJcbiAgICBpZiAoYmluZGluZ1R5cGUgPT09IEFDVElWSVRJX09VVF9UWVBFKSB7XHJcbiAgICAgIG5ld0luT3V0ID0gY3JlYXRlQWN0aXZpdGlPdXQoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld0luT3V0ID0gY3JlYXRlQWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZXMucHVzaChjbWRIZWxwZXIuYWRkQW5kUmVtb3ZlRWxlbWVudHNGcm9tTGlzdChcclxuICAgICAgZWxlbWVudCxcclxuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMsXHJcbiAgICAgICd2YWx1ZXMnLFxyXG4gICAgICBudWxsLFxyXG4gICAgICBbIG5ld0luT3V0IF0sXHJcbiAgICAgIGV4aXN0aW5nSW5PdXQgPyBbIGV4aXN0aW5nSW5PdXQgXSA6IFtdXHJcbiAgICApKTtcclxuICB9XHJcblxyXG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gQUNUSVZJVElfRklFTEQpIHtcclxuICAgIHZhciBleGlzdGluZ0ZpZWxkSW5qZWN0aW9ucyA9IGZpbmRFeHRlbnNpb25zKGJvLCBbICdhY3Rpdml0aTpGaWVsZCcgXSk7XHJcbiAgICB2YXIgbmV3RmllbGRJbmplY3Rpb25zID0gW107XHJcblxyXG4gICAgaWYgKGV4aXN0aW5nRmllbGRJbmplY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgZXhpc3RpbmdGaWVsZEluamVjdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0ubmFtZSA9PT0gYmluZGluZy5uYW1lKSB7XHJcbiAgICAgICAgICBuZXdGaWVsZEluamVjdGlvbnMucHVzaChjcmVhdGVBY3Rpdml0aUZpZWxkSW5qZWN0aW9uKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuZXdGaWVsZEluamVjdGlvbnMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3RmllbGRJbmplY3Rpb25zLnB1c2goY3JlYXRlQWN0aXZpdGlGaWVsZEluamVjdGlvbihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVzLnB1c2goY21kSGVscGVyLmFkZEFuZFJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoXHJcbiAgICAgIGVsZW1lbnQsXHJcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRzLFxyXG4gICAgICAndmFsdWVzJyxcclxuICAgICAgbnVsbCxcclxuICAgICAgbmV3RmllbGRJbmplY3Rpb25zLFxyXG4gICAgICBleGlzdGluZ0ZpZWxkSW5qZWN0aW9ucyA/IGV4aXN0aW5nRmllbGRJbmplY3Rpb25zIDogW11cclxuICAgICkpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHVwZGF0ZXMubGVuZ3RoKSB7XHJcbiAgICByZXR1cm4gdXBkYXRlcztcclxuICB9XHJcblxyXG4gIC8vIHF1aWNrIHdhcm5pbmcgZm9yIGJldHRlciBkZWJ1Z2dpbmdcclxuICBjb25zb2xlLndhcm4oJ25vIHVwZGF0ZScsIGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLnNldFByb3BlcnR5VmFsdWUgPSBzZXRQcm9wZXJ0eVZhbHVlO1xyXG5cclxuLyoqXHJcbiAqIFZhbGlkYXRlIHZhbHVlIG9mIGEgZ2l2ZW4gcHJvcGVydHkuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNsYXRlXHJcbiAqXHJcbiAqIEByZXR1cm4ge09iamVjdH0gd2l0aCB2YWxpZGF0aW9uIGVycm9yc1xyXG4gKi9cclxuZnVuY3Rpb24gdmFsaWRhdGVWYWx1ZSh2YWx1ZSwgcHJvcGVydHksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgY29uc3RyYWludHMgPSBwcm9wZXJ0eS5jb25zdHJhaW50cyB8fCB7fTtcclxuXHJcbiAgaWYgKGNvbnN0cmFpbnRzLm5vdEVtcHR5ICYmIGlzRW1wdHkodmFsdWUpKSB7XHJcbiAgICByZXR1cm4gdHJhbnNsYXRlKCdNdXN0IG5vdCBiZSBlbXB0eScpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGNvbnN0cmFpbnRzLm1heExlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPiBjb25zdHJhaW50cy5tYXhMZW5ndGgpIHtcclxuICAgIHJldHVybiB0cmFuc2xhdGUoJ011c3QgaGF2ZSBtYXggbGVuZ3RoIHtsZW5ndGh9JywgeyBsZW5ndGg6IGNvbnN0cmFpbnRzLm1heExlbmd0aCB9KTtcclxuICB9XHJcblxyXG4gIGlmIChjb25zdHJhaW50cy5taW5MZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgY29uc3RyYWludHMubWluTGVuZ3RoKSB7XHJcbiAgICByZXR1cm4gdHJhbnNsYXRlKCdNdXN0IGhhdmUgbWluIGxlbmd0aCB7bGVuZ3RofScsIHsgbGVuZ3RoOiBjb25zdHJhaW50cy5taW5MZW5ndGggfSk7XHJcbiAgfVxyXG5cclxuICB2YXIgcGF0dGVybiA9IGNvbnN0cmFpbnRzLnBhdHRlcm4sXHJcbiAgICAgIG1lc3NhZ2U7XHJcblxyXG4gIGlmIChwYXR0ZXJuKSB7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykge1xyXG4gICAgICBtZXNzYWdlID0gcGF0dGVybi5tZXNzYWdlO1xyXG4gICAgICBwYXR0ZXJuID0gcGF0dGVybi52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW1hdGNoZXNQYXR0ZXJuKHZhbHVlLCBwYXR0ZXJuKSkge1xyXG4gICAgICByZXR1cm4gbWVzc2FnZSB8fCB0cmFuc2xhdGUoJ011c3QgbWF0Y2ggcGF0dGVybiB7cGF0dGVybn0nLCB7IHBhdHRlcm46IHBhdHRlcm4gfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gbWlzYyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbmZ1bmN0aW9uIHByb3BlcnR5V2l0aFNjb3BlKHByb3BlcnR5LCBzY29wZU5hbWUpIHtcclxuICBpZiAoIXNjb3BlTmFtZSkge1xyXG4gICAgcmV0dXJuIHByb3BlcnR5O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFzc2lnbih7fSwgcHJvcGVydHksIHtcclxuICAgIHNjb3BlOiB7XHJcbiAgICAgIG5hbWU6IHNjb3BlTmFtZVxyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJuIGFuIG9iamVjdCB3aXRoIGEgc2luZ2xlIGtleSAtPiB2YWx1ZSBhc3NvY2lhdGlvbi5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGtleVxyXG4gKiBAcGFyYW0ge0FueX0gdmFsdWVcclxuICpcclxuICogQHJldHVybiB7T2JqZWN0fVxyXG4gKi9cclxuZnVuY3Rpb24gb2JqZWN0V2l0aEtleShrZXksIHZhbHVlKSB7XHJcbiAgdmFyIG9iaiA9IHt9O1xyXG5cclxuICBvYmpba2V5XSA9IHZhbHVlO1xyXG5cclxuICByZXR1cm4gb2JqO1xyXG59XHJcblxyXG4vKipcclxuICogRG9lcyB0aGUgZ2l2ZW4gc3RyaW5nIG1hdGNoIHRoZSBzcGVjaWZpZWQgcGF0dGVybj9cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxyXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0dGVyblxyXG4gKlxyXG4gKiBAcmV0dXJuIHtCb29sZWFufVxyXG4gKi9cclxuZnVuY3Rpb24gbWF0Y2hlc1BhdHRlcm4oc3RyLCBwYXR0ZXJuKSB7XHJcbiAgdmFyIHJlZ2V4cCA9IG5ldyBSZWdFeHAocGF0dGVybik7XHJcblxyXG4gIHJldHVybiByZWdleHAudGVzdChzdHIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0VtcHR5KHN0cikge1xyXG4gIHJldHVybiAhc3RyIHx8IC9eXFxzKiQvLnRlc3Qoc3RyKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIG5ldyB7QGxpbmsgRXJyb3J9IGluZGljYXRpbmcgYW4gdW5rbm93blxyXG4gKiBwcm9wZXJ0eSBiaW5kaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcclxuICpcclxuICogQHJldHVybiB7RXJyb3J9XHJcbiAqL1xyXG5mdW5jdGlvbiB1bmtub3duUHJvcGVydHlCaW5kaW5nKHByb3BlcnR5KSB7XHJcbiAgdmFyIGJpbmRpbmcgPSBwcm9wZXJ0eS5iaW5kaW5nO1xyXG5cclxuICByZXR1cm4gbmV3IEVycm9yKCd1bmtub3duIGJpbmRpbmc6IDwnICsgYmluZGluZy50eXBlICsgJz4nKTtcclxufVxyXG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcclxuICBfX2RlcGVuZHNfXzogW1xyXG4gICAgcmVxdWlyZSgnLi9lbGVtZW50LXRlbXBsYXRlcy9pbmRleCcpLFxyXG4gICAgcmVxdWlyZSgnZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUnKS5kZWZhdWx0XHJcbiAgXSxcclxuICBfX2luaXRfXzogWyAncHJvcGVydGllc1Byb3ZpZGVyJyBdLFxyXG4gIHByb3BlcnRpZXNQcm92aWRlcjogWyAndHlwZScsIHJlcXVpcmUoJy4vQWN0aXZpdGlQcm9wZXJ0aWVzUHJvdmlkZXInKSBdXHJcbn07XHJcblxyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgYXN5bmNDb250aW51YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0FzeW5jQ29udGludWF0aW9uJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYWN0aXZpdGk6QXN5bmNDYXBhYmxlJykpIHtcclxuXHJcbiAgICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoYXN5bmNDb250aW51YXRpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGdldEJ1c2luZXNzT2JqZWN0XHJcbiAgICB9LCB0cmFuc2xhdGUpKTtcclxuXHJcbiAgfVxyXG59OyIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcbnZhciBjYWxsYWJsZSA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vQ2FsbGFibGUnKTtcclxuXHJcbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG52YXIgZmxhdHRlbkRlZXAgPSByZXF1aXJlKCdsb2Rhc2gvZmxhdHRlbkRlZXAnKTtcclxudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcclxuXHJcbmZ1bmN0aW9uIGdldENhbGxhYmxlVHlwZShlbGVtZW50KSB7XHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHZhciBib0NhbGxlZEVsZW1lbnQgPSBiby5nZXQoJ2NhbGxlZEVsZW1lbnQnKSxcclxuICAgICAgYm9DYXNlUmVmID0gYm8uZ2V0KCdhY3Rpdml0aTpjYXNlUmVmJyk7XHJcblxyXG4gIHZhciBjYWxsQWN0aXZpdHlUeXBlID0gJyc7XHJcbiAgaWYgKHR5cGVvZiBib0NhbGxlZEVsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBjYWxsQWN0aXZpdHlUeXBlID0gJ2JwbW4nO1xyXG4gIH0gZWxzZVxyXG5cclxuICBpZiAodHlwZW9mIGJvQ2FzZVJlZiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIGNhbGxBY3Rpdml0eVR5cGUgPSAnY21tbic7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY2FsbEFjdGl2aXR5VHlwZTtcclxufVxyXG5cclxudmFyIERFRkFVTFRfUFJPUFMgPSB7XHJcbiAgY2FsbGVkRWxlbWVudDogdW5kZWZpbmVkLFxyXG4gICdhY3Rpdml0aTpjYWxsZWRFbGVtZW50QmluZGluZyc6ICdsYXRlc3QnLFxyXG4gICdhY3Rpdml0aTpjYWxsZWRFbGVtZW50VmVyc2lvbic6IHVuZGVmaW5lZCxcclxuICAnYWN0aXZpdGk6Y2FsbGVkRWxlbWVudFRlbmFudElkJzogdW5kZWZpbmVkLFxyXG4gICdhY3Rpdml0aTp2YXJpYWJsZU1hcHBpbmdDbGFzcycgOiB1bmRlZmluZWQsXHJcbiAgJ2FjdGl2aXRpOnZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvbicgOiB1bmRlZmluZWQsXHJcbiAgJ2FjdGl2aXRpOmNhc2VSZWYnOiB1bmRlZmluZWQsXHJcbiAgJ2FjdGl2aXRpOmNhc2VCaW5kaW5nJzogJ2xhdGVzdCcsXHJcbiAgJ2FjdGl2aXRpOmNhc2VWZXJzaW9uJzogdW5kZWZpbmVkLFxyXG4gICdhY3Rpdml0aTpjYXNlVGVuYW50SWQnOiB1bmRlZmluZWRcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgaWYgKCFpcyhlbGVtZW50LCAnYWN0aXZpdGk6Q2FsbEFjdGl2aXR5JykpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3Rvcnkuc2VsZWN0Qm94KHtcclxuICAgIGlkIDogJ2NhbGxBY3Rpdml0eScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDYWxsQWN0aXZpdHkgVHlwZScpLFxyXG4gICAgc2VsZWN0T3B0aW9uczogW1xyXG4gICAgICB7IG5hbWU6ICdCUE1OJywgdmFsdWU6ICdicG1uJyB9LFxyXG4gICAgICB7IG5hbWU6ICdDTU1OJywgdmFsdWU6ICdjbW1uJyB9XHJcbiAgICBdLFxyXG4gICAgZW1wdHlQYXJhbWV0ZXI6IHRydWUsXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnY2FsbEFjdGl2aXR5VHlwZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgY2FsbEFjdGl2aXR5VHlwZTogZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciB0eXBlID0gdmFsdWVzLmNhbGxBY3Rpdml0eVR5cGU7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSBhc3NpZ24oe30sIERFRkFVTFRfUFJPUFMpO1xyXG5cclxuICAgICAgaWYgKHR5cGUgPT09ICdicG1uJykge1xyXG4gICAgICAgIHByb3BzLmNhbGxlZEVsZW1lbnQgPSAnJztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0eXBlID09PSAnY21tbicpIHtcclxuICAgICAgICBwcm9wc1snYWN0aXZpdGk6Y2FzZVJlZiddID0gJyc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGNhbGxhYmxlKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBnZXRDYWxsYWJsZVR5cGU6IGdldENhbGxhYmxlVHlwZVxyXG4gIH0sIHRyYW5zbGF0ZSkpO1xyXG5cclxuICBncm91cC5lbnRyaWVzID0gZmxhdHRlbkRlZXAoZ3JvdXAuZW50cmllcyk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgY2FuZGlkYXRlU3RhcnRlciA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vQ2FuZGlkYXRlU3RhcnRlcicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG4gIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICBpZiAoaXMoZWxlbWVudCwgJ2FjdGl2aXRpOlByb2Nlc3MnKSB8fFxyXG4gICAgICBpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmIGJ1c2luZXNzT2JqZWN0LmdldCgncHJvY2Vzc1JlZicpKSB7XHJcblxyXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGNhbmRpZGF0ZVN0YXJ0ZXIoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICAgICAgaWYgKCFpcyhibywgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGJvO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGJvLmdldCgncHJvY2Vzc1JlZicpO1xyXG4gICAgICB9XHJcbiAgICB9LCB0cmFuc2xhdGUpKTtcclxuXHJcbiAgfVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgaXNBbnkgPSByZXF1aXJlKCdicG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCcpLmlzQW55LFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgZXNjYXBlSFRNTCA9IHJlcXVpcmUoJy4uLy4uLy4uL1V0aWxzJykuZXNjYXBlSFRNTCxcclxuICAgIGRvbVF1ZXJ5ID0gcmVxdWlyZSgnbWluLWRvbScpLnF1ZXJ5LFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxyXG4gICAgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyksXHJcbiAgICBldmVudERlZmluaXRpb25IZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvRXZlbnREZWZpbml0aW9uSGVscGVyJyksXHJcbiAgICBzY3JpcHRJbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vU2NyaXB0Jyk7XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICBpZiAoIWJvKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICB2YXIgY29uZGl0aW9uYWxFdmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25IZWxwZXIuZ2V0Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24oZWxlbWVudCk7XHJcblxyXG4gIGlmICghKGlzKGVsZW1lbnQsICdicG1uOlNlcXVlbmNlRmxvdycpICYmIGlzQ29uZGl0aW9uYWxTb3VyY2UoZWxlbWVudC5zb3VyY2UpKVxyXG4gICAgJiYgIWNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICB2YXIgc2NyaXB0ID0gc2NyaXB0SW1wbGVtZW50YXRpb24oJ2xhbmd1YWdlJywgJ2JvZHknLCB0cnVlLCB0cmFuc2xhdGUpO1xyXG4gIGdyb3VwLmVudHJpZXMucHVzaCh7XHJcbiAgICBpZDogJ2NvbmRpdGlvbicsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDb25kaXRpb24nKSxcclxuICAgIGh0bWw6ICc8ZGl2IGNsYXNzPVwiYnBwLXJvd1wiPicgK1xyXG4gICAgICAgICAgICAgICc8bGFiZWwgZm9yPVwiY2FtLWNvbmRpdGlvbi10eXBlXCI+JysgZXNjYXBlSFRNTCh0cmFuc2xhdGUoJ0NvbmRpdGlvbiBUeXBlJykpICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJicHAtZmllbGQtd3JhcHBlclwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxzZWxlY3QgaWQ9XCJjYW0tY29uZGl0aW9uLXR5cGVcIiBuYW1lPVwiY29uZGl0aW9uVHlwZVwiIGRhdGEtdmFsdWU+JyArXHJcbiAgICAgICAgICAgICAgICAgICc8b3B0aW9uIHZhbHVlPVwiZXhwcmVzc2lvblwiPicrIGVzY2FwZUhUTUwodHJhbnNsYXRlKCdFeHByZXNzaW9uJykpICsgJzwvb3B0aW9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAnPG9wdGlvbiB2YWx1ZT1cInNjcmlwdFwiPicrIGVzY2FwZUhUTUwodHJhbnNsYXRlKCdTY3JpcHQnKSkgKyAnPC9vcHRpb24+JyArXHJcbiAgICAgICAgICAgICAgICAgICc8b3B0aW9uIHZhbHVlPVwiXCIgc2VsZWN0ZWQ+PC9vcHRpb24+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9zZWxlY3Q+JyArXHJcbiAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JyArXHJcblxyXG4gICAgICAgICAgICAvLyBleHByZXNzaW9uXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLXJvd1wiPicgK1xyXG4gICAgICAgICAgICAgICc8bGFiZWwgZm9yPVwiY2FtLWNvbmRpdGlvblwiIGRhdGEtc2hvdz1cImlzRXhwcmVzc2lvblwiPicgKyBlc2NhcGVIVE1MKHRyYW5zbGF0ZSgnRXhwcmVzc2lvbicpKSArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLXdyYXBwZXJcIiBkYXRhLXNob3c9XCJpc0V4cHJlc3Npb25cIj4nICtcclxuICAgICAgICAgICAgICAgICc8aW5wdXQgaWQ9XCJjYW0tY29uZGl0aW9uXCIgdHlwZT1cInRleHRcIiBuYW1lPVwiY29uZGl0aW9uXCIgLz4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIGNsYXNzPVwiY2xlYXJcIiBkYXRhLWFjdGlvbj1cImNsZWFyXCIgZGF0YS1zaG93PVwiY2FuQ2xlYXJcIj4nICtcclxuICAgICAgICAgICAgICAgICAgJzxzcGFuPlg8L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICc8ZGl2IGRhdGEtc2hvdz1cImlzU2NyaXB0XCI+JyArXHJcbiAgICAgICAgICAgICAgICBzY3JpcHQudGVtcGxhdGUgK1xyXG4gICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzwvZGl2PicsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgdmFyIGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uSGVscGVyLmdldENvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xyXG5cclxuICAgICAgdmFyIGNvbmRpdGlvbkV4cHJlc3Npb24gPSBjb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvblxyXG4gICAgICAgID8gY29uZGl0aW9uYWxFdmVudERlZmluaXRpb24uY29uZGl0aW9uXHJcbiAgICAgICAgOiBiby5jb25kaXRpb25FeHByZXNzaW9uO1xyXG5cclxuICAgICAgdmFyIHZhbHVlcyA9IHt9LFxyXG4gICAgICAgICAgY29uZGl0aW9uVHlwZSA9ICcnO1xyXG5cclxuICAgICAgaWYgKGNvbmRpdGlvbkV4cHJlc3Npb24pIHtcclxuICAgICAgICB2YXIgY29uZGl0aW9uTGFuZ3VhZ2UgPSBjb25kaXRpb25FeHByZXNzaW9uLmxhbmd1YWdlO1xyXG4gICAgICAgIGlmICh0eXBlb2YgY29uZGl0aW9uTGFuZ3VhZ2UgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICBjb25kaXRpb25UeXBlID0gJ3NjcmlwdCc7XHJcbiAgICAgICAgICB2YWx1ZXMgPSBzY3JpcHQuZ2V0KGVsZW1lbnQsIGNvbmRpdGlvbkV4cHJlc3Npb24pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25kaXRpb25UeXBlID0gJ2V4cHJlc3Npb24nO1xyXG4gICAgICAgICAgdmFsdWVzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbkV4cHJlc3Npb24uZ2V0KCdib2R5Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB2YWx1ZXMuY29uZGl0aW9uVHlwZSA9IGNvbmRpdGlvblR5cGU7XHJcblxyXG4gICAgICByZXR1cm4gdmFsdWVzO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIGNvbnRhaW5lckVsZW1lbnQpIHtcclxuICAgICAgdmFyIGNvbmRpdGlvblR5cGUgPSB2YWx1ZXMuY29uZGl0aW9uVHlwZTtcclxuICAgICAgdmFyIGNvbW1hbmRzID0gW107XHJcblxyXG4gICAgICB2YXIgY29uZGl0aW9uUHJvcHMgPSB7XHJcbiAgICAgICAgYm9keTogdW5kZWZpbmVkXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAoY29uZGl0aW9uVHlwZSA9PT0gJ3NjcmlwdCcpIHtcclxuICAgICAgICBjb25kaXRpb25Qcm9wcyA9IHNjcmlwdC5zZXQoZWxlbWVudCwgdmFsdWVzLCBjb250YWluZXJFbGVtZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgY29uZGl0aW9uID0gdmFsdWVzLmNvbmRpdGlvbjtcclxuXHJcbiAgICAgICAgY29uZGl0aW9uUHJvcHMuYm9keSA9IGNvbmRpdGlvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGNvbmRpdGlvbk9yQ29uZGl0aW9uRXhwcmVzc2lvbjtcclxuXHJcbiAgICAgIGlmIChjb25kaXRpb25UeXBlKSB7XHJcbiAgICAgICAgY29uZGl0aW9uT3JDb25kaXRpb25FeHByZXNzaW9uID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgJ2JwbW46Rm9ybWFsRXhwcmVzc2lvbicsXHJcbiAgICAgICAgICBjb25kaXRpb25Qcm9wcyxcclxuICAgICAgICAgIGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uIHx8IGJvLFxyXG4gICAgICAgICAgYnBtbkZhY3RvcnlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB2YXIgc291cmNlID0gZWxlbWVudC5zb3VyY2U7XHJcblxyXG4gICAgICAgIC8vIGlmIGRlZmF1bHQtZmxvdywgcmVtb3ZlIGRlZmF1bHQtcHJvcGVydHkgZnJvbSBzb3VyY2VcclxuICAgICAgICBpZiAoc291cmNlICYmIHNvdXJjZS5idXNpbmVzc09iamVjdC5kZWZhdWx0ID09PSBibykge1xyXG4gICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhzb3VyY2UsIHsgJ2RlZmF1bHQnOiB1bmRlZmluZWQgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHVwZGF0ZSA9IGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uXHJcbiAgICAgICAgPyB7IGNvbmRpdGlvbjogY29uZGl0aW9uT3JDb25kaXRpb25FeHByZXNzaW9uIH1cclxuICAgICAgICA6IHsgY29uZGl0aW9uRXhwcmVzc2lvbjogY29uZGl0aW9uT3JDb25kaXRpb25FeHByZXNzaW9uIH07XHJcblxyXG4gICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBjb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbiB8fCBibywgdXBkYXRlKSk7XHJcblxyXG4gICAgICByZXR1cm4gY29tbWFuZHM7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFyIHZhbGlkYXRpb25SZXN1bHQgPSB7fTtcclxuXHJcbiAgICAgIGlmICghdmFsdWVzLmNvbmRpdGlvbiAmJiB2YWx1ZXMuY29uZGl0aW9uVHlwZSA9PT0gJ2V4cHJlc3Npb24nKSB7XHJcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdC5jb25kaXRpb24gPSB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodmFsdWVzLmNvbmRpdGlvblR5cGUgPT09ICdzY3JpcHQnKSB7XHJcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IHNjcmlwdC52YWxpZGF0ZShlbGVtZW50LCB2YWx1ZXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdDtcclxuICAgIH0sXHJcblxyXG4gICAgaXNFeHByZXNzaW9uOiBmdW5jdGlvbihlbGVtZW50LCBpbnB1dE5vZGUpIHtcclxuICAgICAgdmFyIGNvbmRpdGlvblR5cGUgPSBkb21RdWVyeSgnc2VsZWN0W25hbWU9Y29uZGl0aW9uVHlwZV0nLCBpbnB1dE5vZGUpO1xyXG4gICAgICBpZiAoY29uZGl0aW9uVHlwZS5zZWxlY3RlZEluZGV4ID49IDApIHtcclxuICAgICAgICByZXR1cm4gY29uZGl0aW9uVHlwZS5vcHRpb25zW2NvbmRpdGlvblR5cGUuc2VsZWN0ZWRJbmRleF0udmFsdWUgPT09ICdleHByZXNzaW9uJztcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBpc1NjcmlwdDogZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlKSB7XHJcbiAgICAgIHZhciBjb25kaXRpb25UeXBlID0gZG9tUXVlcnkoJ3NlbGVjdFtuYW1lPWNvbmRpdGlvblR5cGVdJywgaW5wdXROb2RlKTtcclxuICAgICAgaWYgKGNvbmRpdGlvblR5cGUuc2VsZWN0ZWRJbmRleCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbmRpdGlvblR5cGUub3B0aW9uc1tjb25kaXRpb25UeXBlLnNlbGVjdGVkSW5kZXhdLnZhbHVlID09PSAnc2NyaXB0JztcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhcjogZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlKSB7XHJcbiAgICAgIC8vIGNsZWFyIHRleHQgaW5wdXRcclxuICAgICAgZG9tUXVlcnkoJ2lucHV0W25hbWU9Y29uZGl0aW9uXScsIGlucHV0Tm9kZSkudmFsdWU9Jyc7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgY2FuQ2xlYXI6IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSkge1xyXG4gICAgICB2YXIgaW5wdXQgPSBkb21RdWVyeSgnaW5wdXRbbmFtZT1jb25kaXRpb25dJywgaW5wdXROb2RlKTtcclxuXHJcbiAgICAgIHJldHVybiBpbnB1dC52YWx1ZSAhPT0gJyc7XHJcbiAgICB9LFxyXG5cclxuICAgIHNjcmlwdCA6IHNjcmlwdCxcclxuXHJcbiAgICBjc3NDbGFzc2VzOiBbICdicHAtdGV4dGZpZWxkJyBdXHJcbiAgfSk7XHJcbn07XHJcblxyXG5cclxuLy8gdXRpbGl0aWVzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG52YXIgQ09ORElUSU9OQUxfU09VUkNFUyA9IFtcclxuICAnYnBtbjpBY3Rpdml0eScsXHJcbiAgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheScsXHJcbiAgJ2JwbW46SW5jbHVzaXZlR2F0ZXdheScsXHJcbiAgJ2JwbW46Q29tcGxleEdhdGV3YXknXHJcbl07XHJcblxyXG5mdW5jdGlvbiBpc0NvbmRpdGlvbmFsU291cmNlKGVsZW1lbnQpIHtcclxuICByZXR1cm4gaXNBbnkoZWxlbWVudCwgQ09ORElUSU9OQUxfU09VUkNFUyk7XHJcbn1cclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIEltcGxlbWVudGF0aW9uVHlwZUhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9JbXBsZW1lbnRhdGlvblR5cGVIZWxwZXInKSxcclxuICAgIElucHV0T3V0cHV0SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0lucHV0T3V0cHV0SGVscGVyJyk7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbmZ1bmN0aW9uIGdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KSB7XHJcbiAgcmV0dXJuIEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5nZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpIHtcclxuICByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRDb25uZWN0b3IoYm8pIHtcclxuICByZXR1cm4gSW5wdXRPdXRwdXRIZWxwZXIuZ2V0Q29ubmVjdG9yKGJvKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNDb25uZWN0b3IoZWxlbWVudCkge1xyXG4gIHJldHVybiBnZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCkgPT09ICdjb25uZWN0b3InO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnY29ubmVjdG9ySWQnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ29ubmVjdG9yIElkJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnY29ubmVjdG9ySWQnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgdmFyIGNvbm5lY3RvciA9IGJvICYmIGdldENvbm5lY3Rvcihibyk7XHJcbiAgICAgIHZhciB2YWx1ZSA9IGNvbm5lY3RvciAmJiBjb25uZWN0b3IuZ2V0KCdjb25uZWN0b3JJZCcpO1xyXG4gICAgICByZXR1cm4geyBjb25uZWN0b3JJZDogdmFsdWUgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHZhciBjb25uZWN0b3IgPSBnZXRDb25uZWN0b3IoYm8pO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGNvbm5lY3Rvciwge1xyXG4gICAgICAgIGNvbm5lY3RvcklkOiB2YWx1ZXMuY29ubmVjdG9ySWQgfHwgdW5kZWZpbmVkXHJcbiAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHJldHVybiBpc0Nvbm5lY3RvcihlbGVtZW50KSAmJiAhdmFsdWVzLmNvbm5lY3RvcklkID8geyBjb25uZWN0b3JJZDogdHJhbnNsYXRlKCdNdXN0IHByb3ZpZGUgYSB2YWx1ZScpIH0gOiB7fTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhaXNDb25uZWN0b3IoZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XHJcblxyXG52YXIgaW5wdXRPdXRwdXRQYXJhbWV0ZXIgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0lucHV0T3V0cHV0UGFyYW1ldGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIG9wdGlvbnMgPSBhc3NpZ24oe1xyXG4gICAgaWRQcmVmaXg6ICdjb25uZWN0b3ItJyxcclxuICAgIGluc2lkZUNvbm5lY3RvcjogdHJ1ZVxyXG4gIH0sIG9wdGlvbnMpO1xyXG5cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoaW5wdXRPdXRwdXRQYXJhbWV0ZXIoZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkpO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlucHV0T3V0cHV0ID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9JbnB1dE91dHB1dCcpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgaW5wdXRPdXRwdXRFbnRyeSA9IGlucHV0T3V0cHV0KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBpZFByZWZpeDogJ2Nvbm5lY3Rvci0nLFxyXG4gICAgaW5zaWRlQ29ubmVjdG9yOiB0cnVlXHJcbiAgfSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGlucHV0T3V0cHV0RW50cnkuZW50cmllcyk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBnZXRTZWxlY3RlZFBhcmFtZXRlcjogaW5wdXRPdXRwdXRFbnRyeS5nZXRTZWxlY3RlZFBhcmFtZXRlclxyXG4gIH07XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgZXZlbnREZWZpbml0aW9uSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0V2ZW50RGVmaW5pdGlvbkhlbHBlcicpLFxyXG4gICAgZXJyb3IgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0Vycm9yRXZlbnREZWZpbml0aW9uJyk7XHJcblxyXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZXJyb3JFdmVudHMgPSBbXHJcbiAgICAnYnBtbjpTdGFydEV2ZW50JyxcclxuICAgICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxyXG4gICAgJ2JwbW46RW5kRXZlbnQnXHJcbiAgXTtcclxuXHJcbiAgZm9yRWFjaChlcnJvckV2ZW50cywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIGlmIChpcyhlbGVtZW50LCBldmVudCkpIHtcclxuXHJcbiAgICAgIHZhciBlcnJvckV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRFcnJvckV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcclxuXHJcbiAgICAgIGlmIChlcnJvckV2ZW50RGVmaW5pdGlvbikge1xyXG4gICAgICAgIHZhciBpc0NhdGNoaW5nRXJyb3JFdmVudCA9IGlzKGVsZW1lbnQsICdicG1uOlN0YXJ0RXZlbnQnKSB8fCBpcyAoZWxlbWVudCwgJ2JwbW46Qm91bmRhcnlFdmVudCcpO1xyXG5cclxuICAgICAgICB2YXIgc2hvd0Vycm9yQ29kZVZhcmlhYmxlID0gaXNDYXRjaGluZ0Vycm9yRXZlbnQsXHJcbiAgICAgICAgICAgIHNob3dFcnJvck1lc3NhZ2VWYXJpYWJsZSA9IGlzQ2F0Y2hpbmdFcnJvckV2ZW50O1xyXG5cclxuICAgICAgICBlcnJvcihcclxuICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgIGJwbW5GYWN0b3J5LFxyXG4gICAgICAgICAgZXJyb3JFdmVudERlZmluaXRpb24sXHJcbiAgICAgICAgICBzaG93RXJyb3JDb2RlVmFyaWFibGUsXHJcbiAgICAgICAgICBzaG93RXJyb3JNZXNzYWdlVmFyaWFibGUsXHJcbiAgICAgICAgICB0cmFuc2xhdGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgSW1wbGVtZW50YXRpb25UeXBlSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0ltcGxlbWVudGF0aW9uVHlwZUhlbHBlcicpO1xyXG5cclxudmFyIGV4dGVybmFsVGFza1ByaW9yaXR5ID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9FeHRlcm5hbFRhc2tQcmlvcml0eScpO1xyXG5cclxuZnVuY3Rpb24gZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCkge1xyXG4gIHZhciBibyA9IEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5nZXRTZXJ2aWNlVGFza0xpa2VCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgLy8gaWYgdGhlIGVsZW1lbnQgaXMgbm90IGEgc2VydmljZVRhc2tMaWtlIGVsZW1lbnQsIGZldGNoIHRoZSBub3JtYWwgYnVzaW5lc3Mgb2JqZWN0XHJcbiAgLy8gVGhpcyBhdm9pZHMgdGhlIGxvc3Mgb2YgdGhlIHByb2Nlc3MgLyBwYXJ0aWNpcGFudCBidXNpbmVzcyBvYmplY3RcclxuICBpZiAoIWJvKSB7XHJcbiAgICBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGJvO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBibyA9IGdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICBpZiAoIWJvKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpZiAoaXMoYm8sICdhY3Rpdml0aTpUYXNrUHJpb3JpemVkJykgfHwgKGlzKGJvLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSAmJiBiby5nZXQoJ3Byb2Nlc3NSZWYnKSkge1xyXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGV4dGVybmFsVGFza1ByaW9yaXR5KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICAgIGdldEJ1c2luZXNzT2JqZWN0OiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCFpcyhibywgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGJvO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYm8uZ2V0KCdwcm9jZXNzUmVmJyk7XHJcbiAgICAgIH1cclxuICAgIH0sIHRyYW5zbGF0ZSkpO1xyXG4gIH1cclxufTsiLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgSW1wbGVtZW50YXRpb25UeXBlSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0ltcGxlbWVudGF0aW9uVHlwZUhlbHBlcicpO1xyXG5cclxudmFyIGZpZWxkSW5qZWN0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9GaWVsZEluamVjdGlvbicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgYm8gPSBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIGlmICghYm8pIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHZhciBmaWVsZEluamVjdGlvbkVudHJ5ID0gZmllbGRJbmplY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSwgeyBidXNpbmVzc09iamVjdDogYm8gfSk7XHJcblxyXG4gIGlmIChmaWVsZEluamVjdGlvbkVudHJ5ICYmIGZpZWxkSW5qZWN0aW9uRW50cnkubGVuZ3RoID4gMCkge1xyXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGZpZWxkSW5qZWN0aW9uRW50cnkpO1xyXG4gIH1cclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBnZXRFeHRlbnNpb25FbGVtZW50cyA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9FeHRlbnNpb25FbGVtZW50c0hlbHBlcicpLmdldEV4dGVuc2lvbkVsZW1lbnRzLFxyXG4gICAgcmVtb3ZlRW50cnkgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKS5yZW1vdmVFbnRyeSxcclxuICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9FeHRlbnNpb25FbGVtZW50cycpLFxyXG4gICAgcHJvcGVydGllcyA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vUHJvcGVydGllcycpLFxyXG4gICAgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxyXG4gICAgZm9ybUhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9Gb3JtSGVscGVyJyksXHJcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL1V0aWxzJyksXHJcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBmaW5kID0gcmVxdWlyZSgnbG9kYXNoL2ZpbmQnKSxcclxuICAgIGVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpO1xyXG5cclxuZnVuY3Rpb24gZ2VuZXJhdGVWYWx1ZUlkKCkge1xyXG4gIHJldHVybiB1dGlscy5uZXh0SWQoJ1ZhbHVlXycpO1xyXG59XHJcblxyXG4vKipcclxuICogR2VuZXJhdGUgYSBmb3JtIGZpZWxkIHNwZWNpZmljIHRleHRGaWVsZCB1c2luZyBlbnRyeUZhY3RvcnkuXHJcbiAqXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5pZFxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMubGFiZWxcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLm1vZGVsUHJvcGVydHlcclxuICogQHBhcmFtICB7ZnVuY3Rpb259IG9wdGlvbnMudmFsaWRhdGVcclxuICpcclxuICogQHJldHVybiB7T2JqZWN0fSBhbiBlbnRyeUZhY3RvcnkudGV4dEZpZWxkIG9iamVjdFxyXG4gKi9cclxuZnVuY3Rpb24gZm9ybUZpZWxkVGV4dEZpZWxkKG9wdGlvbnMsIGdldFNlbGVjdGVkRm9ybUZpZWxkKSB7XHJcblxyXG4gIHZhciBpZCA9IG9wdGlvbnMuaWQsXHJcbiAgICAgIGxhYmVsID0gb3B0aW9ucy5sYWJlbCxcclxuICAgICAgbW9kZWxQcm9wZXJ0eSA9IG9wdGlvbnMubW9kZWxQcm9wZXJ0eSxcclxuICAgICAgdmFsaWRhdGUgPSBvcHRpb25zLnZhbGlkYXRlO1xyXG5cclxuICByZXR1cm4gZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogaWQsXHJcbiAgICBsYWJlbDogbGFiZWwsXHJcbiAgICBtb2RlbFByb3BlcnR5OiBtb2RlbFByb3BlcnR5LFxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpIHx8IHt9LFxyXG4gICAgICAgICAgdmFsdWVzID0ge307XHJcblxyXG4gICAgICB2YWx1ZXNbbW9kZWxQcm9wZXJ0eV0gPSBzZWxlY3RlZEZvcm1GaWVsZFttb2RlbFByb3BlcnR5XTtcclxuXHJcbiAgICAgIHJldHVybiB2YWx1ZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBjb21tYW5kcyA9IFtdO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnNldCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHZhciBjbWQgPSBvcHRpb25zLnNldChlbGVtZW50LCB2YWx1ZXMsIG5vZGUpO1xyXG5cclxuICAgICAgICBpZiAoY21kKSB7XHJcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgZm9ybUZpZWxkID0gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSksXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzID0ge307XHJcblxyXG4gICAgICBwcm9wZXJ0aWVzW21vZGVsUHJvcGVydHldID0gdmFsdWVzW21vZGVsUHJvcGVydHldIHx8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGZvcm1GaWVsZCwgcHJvcGVydGllcykpO1xyXG5cclxuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xyXG4gICAgfSxcclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfSxcclxuICAgIHZhbGlkYXRlOiB2YWxpZGF0ZVxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbnN1cmVGb3JtS2V5QW5kRGF0YVN1cHBvcnRlZChlbGVtZW50KSB7XHJcbiAgcmV0dXJuIChcclxuICAgIGlzKGVsZW1lbnQsICdicG1uOlN0YXJ0RXZlbnQnKSAmJiAhaXMoZWxlbWVudC5wYXJlbnQsICdicG1uOlN1YlByb2Nlc3MnKVxyXG4gICkgfHwgaXMoZWxlbWVudCwgJ2JwbW46VXNlclRhc2snKTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICBpZiAoIWVuc3VyZUZvcm1LZXlBbmREYXRhU3VwcG9ydGVkKGVsZW1lbnQpKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZm9ybSBmaWVsZCBxdWVyeWluZyB0aGUgZm9ybSBmaWVsZCBzZWxlY3QgYm94XHJcbiAgICogZnJvbSB0aGUgRE9NLlxyXG4gICAqXHJcbiAgICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICAgKiBAcGFyYW0gIHtET01FbGVtZW50fSBub2RlIC0gRE9NIGVsZW1lbnQgb2YgYW55IGZvcm0gZmllbGQgdGV4dCBpbnB1dFxyXG4gICAqXHJcbiAgICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBmb3JtIGZpZWxkXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSkge1xyXG4gICAgdmFyIHNlbGVjdGVkID0gZm9ybUZpZWxkc0VudHJ5LmdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUucGFyZW50Tm9kZSk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkLmlkeCA9PT0gLTEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmb3JtSGVscGVyLmdldEZvcm1GaWVsZChlbGVtZW50LCBzZWxlY3RlZC5pZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8gW0Zvcm1LZXldIGZvcm0ga2V5IHRleHQgaW5wdXQgZmllbGRcclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZCA6ICdmb3JtLWtleScsXHJcbiAgICBsYWJlbCA6IHRyYW5zbGF0ZSgnRm9ybSBLZXknKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdmb3JtS2V5JyxcclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZm9ybUtleTogYm8uZ2V0KCdhY3Rpdml0aTpmb3JtS2V5JylcclxuICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcclxuICAgICAgICAgIGZvcm1LZXkgPSB2YWx1ZXMuZm9ybUtleSB8fCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLCB7ICdhY3Rpdml0aTpmb3JtS2V5JzogZm9ybUtleSB9KTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG4gIC8vIFtGb3JtRGF0YV0gZm9ybSBmaWVsZCBzZWxlY3QgYm94XHJcbiAgdmFyIGZvcm1GaWVsZHNFbnRyeSA9IGV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBpZDogJ2Zvcm0tZmllbGRzJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Zvcm0gRmllbGRzJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnaWQnLFxyXG4gICAgcHJlZml4OiAnRm9ybVByb3BlcnR5JyxcclxuICAgIGNyZWF0ZUV4dGVuc2lvbkVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCB2YWx1ZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSwgY29tbWFuZHMgPSBbXTtcclxuXHJcbiAgICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcclxuICAgICAgICBleHRlbnNpb25FbGVtZW50cyA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHsgdmFsdWVzOiBbXSB9LCBibywgYnBtbkZhY3RvcnkpO1xyXG4gICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgeyBleHRlbnNpb25FbGVtZW50czogZXh0ZW5zaW9uRWxlbWVudHMgfSkpO1xyXG4gICAgICB9XHJcbiAgICAgLyogdmFyIGZvcm1EYXRhID0gZm9ybUhlbHBlci5nZXRGb3JtRGF0YShlbGVtZW50KTtcclxuXHJcbiAgICAgIGlmICghZm9ybURhdGEpIHtcclxuICAgICAgICBmb3JtRGF0YSA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6Rm9ybURhdGEnLCB7IGZpZWxkczogW10gfSwgZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5KTtcclxuICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5hZGRBbmRSZW1vdmVFbGVtZW50c0Zyb21MaXN0KFxyXG4gICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzLFxyXG4gICAgICAgICAgJ3ZhbHVlcycsXHJcbiAgICAgICAgICAnZXh0ZW5zaW9uRWxlbWVudHMnLFxyXG4gICAgICAgICAgW2Zvcm1EYXRhXSxcclxuICAgICAgICAgIFtdXHJcbiAgICAgICAgKSk7XHJcbiAgICAgIH0qL1xyXG4gICAgICAvKiphY3Rpdml0aSDmmK/lkJEgZXh0ZW5zaW9uRWxlbWVudHMg5LiL6L+95Yqg5YWD57Sg77yM6ICM5LiN5pivIGZvcm1EYXRhIOS4i++8jCovXHJcbiAgICAgIHZhciBmaWVsZCA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6Rm9ybVByb3BlcnR5JywgeyBpZDogdmFsdWUgfSwgZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5KTtcclxuICAgICAgaWYgKHR5cGVvZiBleHRlbnNpb25FbGVtZW50cy52YWx1ZXMgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIuYWRkRWxlbWVudHNUb2xpc3QoZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsICd2YWx1ZXMnLCBbIGZpZWxkIF0pKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywge1xyXG4gICAgICAgICAgICB2YWx1ZXM6IFsgZmllbGQgXVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY29tbWFuZHM7XHJcbiAgICB9LFxyXG4gICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIGZpZWxkcyA9IGZvcm1IZWxwZXIuZ2V0Rm9ybUZpZWxkcyhlbGVtZW50KTtcclxuICAgICAgdmFyIGVudHJ5ID0gZmllbGRzW2lkeF0sXHJcbiAgICAgICAgICBjb21tYW5kcyA9IFtdO1xyXG5cclxuICAgICAgaWYgKGZpZWxkcy5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgY29tbWFuZHMucHVzaChyZW1vdmVFbnRyeShnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSwgZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5yZW1vdmVFbGVtZW50c0Zyb21MaXN0KGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCAndmFsdWVzJywgbnVsbCwgW2VudHJ5XSkpO1xyXG4gICAgICAgLyogaWYgKGVudHJ5LmlkID09PSBmb3JtRGF0YS5nZXQoJ2J1c2luZXNzS2V5JykpIHtcclxuICAgICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCB7ICdidXNpbmVzc0tleSc6IHVuZGVmaW5lZCB9KSk7XHJcbiAgICAgICAgfSovXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjb21tYW5kcztcclxuICAgIH0sXHJcbiAgICBnZXRFeHRlbnNpb25FbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICByZXR1cm4gZm9ybUhlbHBlci5nZXRGb3JtRmllbGRzKGVsZW1lbnQpO1xyXG4gICAgfSxcclxuICAgIGhpZGVFeHRlbnNpb25FbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfSk7XHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGZvcm1GaWVsZHNFbnRyeSk7XHJcblxyXG5cclxuICAvLyBbRm9ybURhdGFdIEZvcm0gRmllbGQgbGFiZWxcclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LmxhYmVsKHtcclxuICAgIGlkOiAnZm9ybS1maWVsZC1oZWFkZXInLFxyXG4gICAgbGFiZWxUZXh0OiB0cmFuc2xhdGUoJ0Zvcm0gRmllbGQnKSxcclxuICAgIHNob3dMYWJlbDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gISFnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG4gIC8vIFtGb3JtRGF0YV0gZm9ybSBmaWVsZCBpZCB0ZXh0IGlucHV0IGZpZWxkXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS52YWxpZGF0aW9uQXdhcmVUZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdmb3JtLWZpZWxkLWlkJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0lEJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnaWQnLFxyXG5cclxuICAgIGdldFByb3BlcnR5OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpIHx8IHt9O1xyXG5cclxuICAgICAgcmV0dXJuIHNlbGVjdGVkRm9ybUZpZWxkLmlkO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRQcm9wZXJ0eTogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydGllcywgbm9kZSkge1xyXG4gICAgICB2YXIgZm9ybUZpZWxkID0gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGZvcm1GaWVsZCwgcHJvcGVydGllcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcblxyXG4gICAgICB2YXIgZm9ybUZpZWxkID0gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICBpZiAoZm9ybUZpZWxkKSB7XHJcblxyXG4gICAgICAgIHZhciBpZFZhbHVlID0gdmFsdWVzLmlkO1xyXG5cclxuICAgICAgICBpZiAoIWlkVmFsdWUgfHwgaWRWYWx1ZS50cmltKCkgPT09ICcnKSB7XHJcbiAgICAgICAgICByZXR1cm4geyBpZDogJ0Zvcm0gZmllbGQgaWQgbXVzdCBub3QgYmUgZW1wdHknIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZm9ybUZpZWxkcyA9IGZvcm1IZWxwZXIuZ2V0Rm9ybUZpZWxkcyhlbGVtZW50KTtcclxuXHJcbiAgICAgICAgdmFyIGV4aXN0aW5nRm9ybUZpZWxkID0gZmluZChmb3JtRmllbGRzLCBmdW5jdGlvbihmKSB7XHJcbiAgICAgICAgICByZXR1cm4gZiAhPT0gZm9ybUZpZWxkICYmIGYuaWQgPT09IGlkVmFsdWU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleGlzdGluZ0Zvcm1GaWVsZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgaWQ6ICdGb3JtIGZpZWxkIGlkIGFscmVhZHkgdXNlZCBpbiBmb3JtIGRhdGEuJyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcbiAgLy8gW0Zvcm1EYXRhXSBmb3JtIGZpZWxkIHR5cGUgY29tYm8gYm94XHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5jb21ib0JveCh7XHJcbiAgICBpZDogJ2Zvcm0tZmllbGQtdHlwZScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUeXBlJyksXHJcbiAgICBzZWxlY3RPcHRpb25zOiBbXHJcbiAgICAgIHsgbmFtZTogJ3N0cmluZycsIHZhbHVlOiAnc3RyaW5nJyB9LFxyXG4gICAgICB7IG5hbWU6ICdsb25nJywgdmFsdWU6ICdsb25nJyB9LFxyXG4gICAgICB7IG5hbWU6ICdib29sZWFuJywgdmFsdWU6ICdib29sZWFuJyB9LFxyXG4gICAgICB7IG5hbWU6ICdkYXRlJywgdmFsdWU6ICdkYXRlJyB9LFxyXG4gICAgICB7IG5hbWU6ICdlbnVtJywgdmFsdWU6ICdlbnVtJyB9XHJcbiAgICBdLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ3R5cGUnLFxyXG4gICAgZW1wdHlQYXJhbWV0ZXI6IHRydWUsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgaWYgKHNlbGVjdGVkRm9ybUZpZWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogc2VsZWN0ZWRGb3JtRmllbGQudHlwZSB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpLFxyXG4gICAgICAgICAgY29tbWFuZHMgPSBbXTtcclxuXHJcbiAgICAgIGlmIChzZWxlY3RlZEZvcm1GaWVsZC50eXBlID09PSAnZW51bScgJiYgdmFsdWVzLnR5cGUgIT09ICdlbnVtJykge1xyXG4gICAgICAgIC8vIGRlbGV0ZSBhY3Rpdml0aTp2YWx1ZSBvYmplY3RzIGZyb20gZm9ybUZpZWxkLnZhbHVlcyB3aGVuIHN3aXRjaGluZyBmcm9tIHR5cGUgZW51bVxyXG4gICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHNlbGVjdGVkRm9ybUZpZWxkLCB7IHZhbHVlczogdW5kZWZpbmVkIH0pKTtcclxuICAgICAgfVxyXG4gICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBzZWxlY3RlZEZvcm1GaWVsZCwgdmFsdWVzKSk7XHJcblxyXG4gICAgICByZXR1cm4gY29tbWFuZHM7XHJcbiAgICB9LFxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxuICAvLyBbRm9ybURhdGFdIGZvcm0gZmllbGQgbGFiZWwgdGV4dCBpbnB1dCBmaWVsZFxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChmb3JtRmllbGRUZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdmb3JtLWZpZWxkLWxhYmVsJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0xhYmVsJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnbGFiZWwnXHJcbiAgfSwgZ2V0U2VsZWN0ZWRGb3JtRmllbGQpKTtcclxuXHJcbiAgLy8gW0Zvcm1EYXRhXSBmb3JtIGZpZWxkIGRlZmF1bHRWYWx1ZSB0ZXh0IGlucHV0IGZpZWxkXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGZvcm1GaWVsZFRleHRGaWVsZCh7XHJcbiAgICBpZDogJ2Zvcm0tZmllbGQtZGVmYXVsdFZhbHVlJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0RlZmF1bHQgVmFsdWUnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdkZWZhdWx0VmFsdWUnXHJcbiAgfSwgZ2V0U2VsZWN0ZWRGb3JtRmllbGQpKTtcclxuXHJcblxyXG4gIC8vIFtGb3JtRGF0YV0gZm9ybSBmaWVsZCBlbnVtIHZhbHVlcyBsYWJlbFxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkubGFiZWwoe1xyXG4gICAgaWQ6ICdmb3JtLWZpZWxkLWVudW0tdmFsdWVzLWhlYWRlcicsXHJcbiAgICBsYWJlbFRleHQ6IHRyYW5zbGF0ZSgnVmFsdWVzJyksXHJcbiAgICBkaXZpZGVyOiB0cnVlLFxyXG4gICAgc2hvd0xhYmVsOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgcmV0dXJuIHNlbGVjdGVkRm9ybUZpZWxkICYmIHNlbGVjdGVkRm9ybUZpZWxkLnR5cGUgPT09ICdlbnVtJztcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG4gIC8vIFtGb3JtRGF0YV0gZm9ybSBmaWVsZCBlbnVtIHZhbHVlcyB0YWJsZVxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGFibGUoe1xyXG4gICAgaWQ6ICdmb3JtLWZpZWxkLWVudW0tdmFsdWVzJyxcclxuICAgIGxhYmVsczogWyB0cmFuc2xhdGUoJ0lkJyksIHRyYW5zbGF0ZSgnTmFtZScpIF0sXHJcbiAgICBtb2RlbFByb3BlcnRpZXM6IFsgJ2lkJywgJ25hbWUnIF0sXHJcbiAgICBhZGRMYWJlbDp0cmFuc2xhdGUoJ0FkZCBWYWx1ZScpLFxyXG4gICAgc2hvdzogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgc2VsZWN0ZWRGb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKTtcclxuXHJcbiAgICAgIHJldHVybiBzZWxlY3RlZEZvcm1GaWVsZCAmJiBzZWxlY3RlZEZvcm1GaWVsZC50eXBlID09PSAnZW51bSc7XHJcbiAgICB9LFxyXG4gICAgZ2V0RWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIHNlbGVjdGVkRm9ybUZpZWxkID0gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICByZXR1cm4gZm9ybUhlbHBlci5nZXRFbnVtVmFsdWVzKHNlbGVjdGVkRm9ybUZpZWxkKTtcclxuICAgIH0sXHJcbiAgICBhZGRFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpLFxyXG4gICAgICAgICAgaWQgPSBnZW5lcmF0ZVZhbHVlSWQoKTtcclxuXHJcbiAgICAgIHZhciBlbnVtVmFsdWUgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgJ2FjdGl2aXRpOlZhbHVlJyxcclxuICAgICAgICB7IGlkOiBpZCwgbmFtZTogdW5kZWZpbmVkIH0sXHJcbiAgICAgICAgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXHJcbiAgICAgICAgYnBtbkZhY3RvcnlcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIuYWRkRWxlbWVudHNUb2xpc3QoZWxlbWVudCwgc2VsZWN0ZWRGb3JtRmllbGQsICd2YWx1ZXMnLCBbZW51bVZhbHVlXSk7XHJcbiAgICB9LFxyXG4gICAgcmVtb3ZlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgaWR4KSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpLFxyXG4gICAgICAgICAgZW51bVZhbHVlID0gc2VsZWN0ZWRGb3JtRmllbGQudmFsdWVzW2lkeF07XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoZWxlbWVudCwgc2VsZWN0ZWRGb3JtRmllbGQsICd2YWx1ZXMnLCBudWxsLCBbZW51bVZhbHVlXSk7XHJcbiAgICB9LFxyXG4gICAgdXBkYXRlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUsIG5vZGUsIGlkeCkge1xyXG4gICAgICB2YXIgc2VsZWN0ZWRGb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKSxcclxuICAgICAgICAgIGVudW1WYWx1ZSA9IHNlbGVjdGVkRm9ybUZpZWxkLnZhbHVlc1tpZHhdO1xyXG5cclxuICAgICAgdmFsdWUubmFtZSA9IHZhbHVlLm5hbWUgfHwgdW5kZWZpbmVkO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGVudW1WYWx1ZSwgdmFsdWUpO1xyXG4gICAgfSxcclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSwgbm9kZSwgaWR4KSB7XHJcblxyXG4gICAgICB2YXIgc2VsZWN0ZWRGb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKSxcclxuICAgICAgICAgIGVudW1WYWx1ZSA9IHNlbGVjdGVkRm9ybUZpZWxkLnZhbHVlc1tpZHhdO1xyXG5cclxuICAgICAgaWYgKGVudW1WYWx1ZSkge1xyXG4gICAgICAgIC8vIGNoZWNrIGlmIGlkIGlzIHZhbGlkXHJcbiAgICAgICAgdmFyIHZhbGlkYXRpb25FcnJvciA9IHV0aWxzLmlzSWRWYWxpZChlbnVtVmFsdWUsIHZhbHVlLmlkLCB0cmFuc2xhdGUpO1xyXG5cclxuICAgICAgICBpZiAodmFsaWRhdGlvbkVycm9yKSB7XHJcbiAgICAgICAgICByZXR1cm4geyBpZDogdmFsaWRhdGlvbkVycm9yIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxuICAvLyBbRm9ybURhdGFdIFZhbGlkYXRpb24gbGFiZWxcclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LmxhYmVsKHtcclxuICAgIGlkOiAnZm9ybS1maWVsZC12YWxpZGF0aW9uLWhlYWRlcicsXHJcbiAgICBsYWJlbFRleHQ6IHRyYW5zbGF0ZSgnVmFsaWRhdGlvbicpLFxyXG4gICAgZGl2aWRlcjogdHJ1ZSxcclxuICAgIHNob3dMYWJlbDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gISFnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG4gIC8vIFtGb3JtRGF0YV0gZm9ybSBmaWVsZCBjb25zdHJhaW50cyB0YWJsZVxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGFibGUoe1xyXG4gICAgaWQ6ICdjb25zdHJhaW50cy1saXN0JyxcclxuICAgIG1vZGVsUHJvcGVydGllczogWyAnbmFtZScsICdjb25maWcnIF0sXHJcbiAgICBsYWJlbHM6IFsgdHJhbnNsYXRlKCdOYW1lJyksIHRyYW5zbGF0ZSgnQ29uZmlnJykgXSxcclxuICAgIGFkZExhYmVsOiB0cmFuc2xhdGUoJ0FkZCBDb25zdHJhaW50JyksXHJcbiAgICBnZXRFbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgZm9ybUZpZWxkID0gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICByZXR1cm4gZm9ybUhlbHBlci5nZXRDb25zdHJhaW50cyhmb3JtRmllbGQpO1xyXG4gICAgfSxcclxuICAgIGFkZEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuXHJcbiAgICAgIHZhciBjb21tYW5kcyA9IFtdLFxyXG4gICAgICAgICAgZm9ybUZpZWxkID0gZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSksXHJcbiAgICAgICAgICB2YWxpZGF0aW9uID0gZm9ybUZpZWxkLnZhbGlkYXRpb247XHJcblxyXG4gICAgICBpZiAoIXZhbGlkYXRpb24pIHtcclxuICAgICAgICAvLyBjcmVhdGUgdmFsaWRhdGlvbiBidXNpbmVzcyBvYmplY3QgYW5kIGFkZCBpdCB0byBmb3JtIGRhdGEsIGlmIGl0IGRvZXNuJ3QgZXhpc3RcclxuICAgICAgICB2YWxpZGF0aW9uID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdhY3Rpdml0aTpWYWxpZGF0aW9uJywge30sIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLCBicG1uRmFjdG9yeSk7XHJcblxyXG4gICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGZvcm1GaWVsZCwgeyAndmFsaWRhdGlvbic6IHZhbGlkYXRpb24gfSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgbmV3Q29uc3RyYWludCA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAnYWN0aXZpdGk6Q29uc3RyYWludCcsXHJcbiAgICAgICAgeyBuYW1lOiB1bmRlZmluZWQsIGNvbmZpZzogdW5kZWZpbmVkIH0sXHJcbiAgICAgICAgdmFsaWRhdGlvbixcclxuICAgICAgICBicG1uRmFjdG9yeVxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIuYWRkRWxlbWVudHNUb2xpc3QoZWxlbWVudCwgdmFsaWRhdGlvbiwgJ2NvbnN0cmFpbnRzJywgWyBuZXdDb25zdHJhaW50IF0pKTtcclxuXHJcbiAgICAgIHJldHVybiBjb21tYW5kcztcclxuICAgIH0sXHJcbiAgICB1cGRhdGVFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSwgbm9kZSwgaWR4KSB7XHJcbiAgICAgIHZhciBmb3JtRmllbGQgPSBnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKSxcclxuICAgICAgICAgIGNvbnN0cmFpbnQgPSBmb3JtSGVscGVyLmdldENvbnN0cmFpbnRzKGZvcm1GaWVsZClbaWR4XTtcclxuXHJcbiAgICAgIHZhbHVlLm5hbWUgPSB2YWx1ZS5uYW1lIHx8IHVuZGVmaW5lZDtcclxuICAgICAgdmFsdWUuY29uZmlnID0gdmFsdWUuY29uZmlnIHx8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgY29uc3RyYWludCwgdmFsdWUpO1xyXG4gICAgfSxcclxuICAgIHJlbW92ZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGlkeCkge1xyXG4gICAgICB2YXIgY29tbWFuZHMgPSBbXSxcclxuICAgICAgICAgIGZvcm1GaWVsZCA9IGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpLFxyXG4gICAgICAgICAgY29uc3RyYWludHMgPSBmb3JtSGVscGVyLmdldENvbnN0cmFpbnRzKGZvcm1GaWVsZCksXHJcbiAgICAgICAgICBjdXJyZW50Q29uc3RyYWludCA9IGNvbnN0cmFpbnRzW2lkeF07XHJcblxyXG4gICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5yZW1vdmVFbGVtZW50c0Zyb21MaXN0KFxyXG4gICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgZm9ybUZpZWxkLnZhbGlkYXRpb24sXHJcbiAgICAgICAgJ2NvbnN0cmFpbnRzJyxcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIFsgY3VycmVudENvbnN0cmFpbnQgXVxyXG4gICAgICApKTtcclxuXHJcbiAgICAgIGlmIChjb25zdHJhaW50cy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAvLyByZW1vdmUgYWN0aXZpdGk6dmFsaWRhdGlvbiBpZiB0aGUgbGFzdCBleGlzdGluZyBjb25zdHJhaW50IGhhcyBiZWVuIHJlbW92ZWRcclxuICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBmb3JtRmllbGQsIHsgdmFsaWRhdGlvbjogdW5kZWZpbmVkIH0pKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xyXG4gICAgfSxcclxuICAgIHNob3c6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuICEhZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxuICAvLyBbRm9ybURhdGFdIFByb3BlcnRpZXMgbGFiZWxcclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LmxhYmVsKHtcclxuICAgIGlkOiAnZm9ybS1maWVsZC1wcm9wZXJ0aWVzLWhlYWRlcicsXHJcbiAgICBsYWJlbFRleHQ6IHRyYW5zbGF0ZSgnUHJvcGVydGllcycpLFxyXG4gICAgZGl2aWRlcjogdHJ1ZSxcclxuICAgIHNob3dMYWJlbDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gISFnZXRTZWxlY3RlZEZvcm1GaWVsZChlbGVtZW50LCBub2RlKTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG4gIC8vIFtGb3JtRGF0YV0gYWN0aXZpdGk6cHJvcGVydGllcyB0YWJsZVxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChwcm9wZXJ0aWVzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBpZDogJ2Zvcm0tZmllbGQtcHJvcGVydGllcycsXHJcbiAgICBtb2RlbFByb3BlcnRpZXM6IFsgJ2lkJywgJ3ZhbHVlJyBdLFxyXG4gICAgbGFiZWxzOiBbIHRyYW5zbGF0ZSgnSWQnKSwgdHJhbnNsYXRlKCdWYWx1ZScpIF0sXHJcbiAgICBnZXRQYXJlbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIGdldFNlbGVjdGVkRm9ybUZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfSxcclxuICAgIHNob3c6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuICEhZ2V0U2VsZWN0ZWRGb3JtRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcbiAgfSwgdHJhbnNsYXRlKSk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgaGlzdG9yeVRpbWVUb0xpdmUgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0hpc3RvcnlUaW1lVG9MaXZlJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYWN0aXZpdGk6UHJvY2VzcycpIHx8XHJcbiAgICAgIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgYnVzaW5lc3NPYmplY3QuZ2V0KCdwcm9jZXNzUmVmJykpIHtcclxuXHJcbiAgICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoaGlzdG9yeVRpbWVUb0xpdmUoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICAgICAgaWYgKCFpcyhibywgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGJvO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGJvLmdldCgncHJvY2Vzc1JlZicpO1xyXG4gICAgICB9XHJcbiAgICB9LCB0cmFuc2xhdGUpKTtcclxuXHJcbiAgfVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaW5wdXRPdXRwdXRQYXJhbWV0ZXIgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0lucHV0T3V0cHV0UGFyYW1ldGVyJyk7XHJcblxyXG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoaW5wdXRPdXRwdXRQYXJhbWV0ZXIoZWxlbWVudCwgYnBtbkZhY3RvcnksIGFzc2lnbih7fSwgb3B0aW9ucyksIHRyYW5zbGF0ZSkpO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlucHV0T3V0cHV0ID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9JbnB1dE91dHB1dCcpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgaW5wdXRPdXRwdXRFbnRyeSA9IGlucHV0T3V0cHV0KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7fSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGlucHV0T3V0cHV0RW50cnkuZW50cmllcyk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBnZXRTZWxlY3RlZFBhcmFtZXRlcjogaW5wdXRPdXRwdXRFbnRyeS5nZXRTZWxlY3RlZFBhcmFtZXRlclxyXG4gIH07XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxudmFyIGpvYlByaW9yaXR5ID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9Kb2JQcmlvcml0eScpLFxyXG4gICAgam9iUmV0cnlUaW1lQ3ljbGUgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0pvYlJldHJ5VGltZUN5Y2xlJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYWN0aXZpdGk6Sm9iUHJpb3JpemVkJykgfHxcclxuICAgICAgaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBidXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKSkge1xyXG5cclxuICAgIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChqb2JQcmlvcml0eShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xyXG4gICAgICBnZXRCdXNpbmVzc09iamVjdDogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICAgICAgICBpZiAoIWlzKGJvLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XHJcbiAgICAgICAgICByZXR1cm4gYm87XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYm8uZ2V0KCdwcm9jZXNzUmVmJyk7XHJcbiAgICAgIH1cclxuICAgIH0sIHRyYW5zbGF0ZSkpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGlzKGVsZW1lbnQsICdhY3Rpdml0aTpBc3luY0NhcGFibGUnKSkge1xyXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGpvYlJldHJ5VGltZUN5Y2xlKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICAgIGdldEJ1c2luZXNzT2JqZWN0OiBnZXRCdXNpbmVzc09iamVjdFxyXG4gICAgfSwgdHJhbnNsYXRlKSk7XHJcbiAgfVxyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XHJcblxyXG52YXIgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxyXG4gICAgSW1wbGVtZW50YXRpb25UeXBlSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0ltcGxlbWVudGF0aW9uVHlwZUhlbHBlcicpLFxyXG5cclxuICAgIHNjcmlwdEltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9TY3JpcHQnKTtcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBMSVNURU5FUl9UWVBFX0xBQkVMID0ge1xyXG4gICAgY2xhc3M6IHRyYW5zbGF0ZSgnSmF2YSBDbGFzcycpLFxyXG4gICAgZXhwcmVzc2lvbjogdHJhbnNsYXRlKCdFeHByZXNzaW9uJyksXHJcbiAgICBkZWxlZ2F0ZUV4cHJlc3Npb246IHRyYW5zbGF0ZSgnRGVsZWdhdGUgRXhwcmVzc2lvbicpLFxyXG4gICAgc2NyaXB0OiB0cmFuc2xhdGUoJ1NjcmlwdCcpXHJcbiAgfTtcclxuXHJcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gIHZhciBnZXRTZWxlY3RlZExpc3RlbmVyID0gb3B0aW9ucy5nZXRTZWxlY3RlZExpc3RlbmVyO1xyXG5cclxuICB2YXIgY2xhc3NQcm9wID0gJ2NsYXNzJyxcclxuICAgICAgZXhwcmVzc2lvblByb3AgPSAnZXhwcmVzc2lvbicsXHJcbiAgICAgIGRlbGVnYXRlRXhwcmVzc2lvblByb3AgPSAnZGVsZWdhdGVFeHByZXNzaW9uJyxcclxuICAgICAgc2NyaXB0UHJvcCA9ICdzY3JpcHQnO1xyXG5cclxuICB2YXIgZXhlY3V0aW9uTGlzdGVuZXJFdmVudFR5cGVPcHRpb25zID0gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzU2VxdWVuY2VGbG93KGVsZW1lbnQpID8gW1xyXG4gICAgeyBuYW1lOiB0cmFuc2xhdGUoJ3Rha2UnKSwgdmFsdWU6ICd0YWtlJyB9XHJcbiAgXSA6IFtcclxuICAgIHsgbmFtZTogdHJhbnNsYXRlKCdzdGFydCcpLCB2YWx1ZTogJ3N0YXJ0JyB9LFxyXG4gICAgeyBuYW1lOiB0cmFuc2xhdGUoJ2VuZCcpLCB2YWx1ZTogJ2VuZCcgfVxyXG4gIF07XHJcblxyXG4gIHZhciB0YXNrTGlzdGVuZXJFdmVudFR5cGVPcHRpb25zID0gW1xyXG4gICAgeyBuYW1lOiB0cmFuc2xhdGUoJ2NyZWF0ZScpLCB2YWx1ZTogJ2NyZWF0ZScgfSxcclxuICAgIHsgbmFtZTogdHJhbnNsYXRlKCdhc3NpZ25tZW50JyksIHZhbHVlOiAnYXNzaWdubWVudCcgfSxcclxuICAgIHsgbmFtZTogdHJhbnNsYXRlKCdjb21wbGV0ZScpLCB2YWx1ZTogJ2NvbXBsZXRlJyB9LFxyXG4gICAgeyBuYW1lOiB0cmFuc2xhdGUoJ2RlbGV0ZScpLCB2YWx1ZTogJ2RlbGV0ZScgfVxyXG4gIF07XHJcblxyXG4gIHZhciBpc1NlbGVjdGVkID0gZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgcmV0dXJuIGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSk7XHJcbiAgfTtcclxuXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5zZWxlY3RCb3goe1xyXG4gICAgaWQ6ICdsaXN0ZW5lci1ldmVudC10eXBlJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0V2ZW50IFR5cGUnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdldmVudFR5cGUnLFxyXG4gICAgZW1wdHlQYXJhbWV0ZXI6IGZhbHNlLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG5cclxuXHJcbiAgICAgIHZhciBsaXN0ZW5lciA9IGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICB2YXIgZXZlbnRUeXBlID0gbGlzdGVuZXIgJiYgbGlzdGVuZXIuZ2V0KCdldmVudCcpO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBldmVudFR5cGU6IGV2ZW50VHlwZVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgZXZlbnRUeXBlID0gdmFsdWVzLmV2ZW50VHlwZTtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKSwgeyBldmVudDogZXZlbnRUeXBlIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZWxlY3RPcHRpb25zOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBldmVudFR5cGVPcHRpb25zO1xyXG5cclxuICAgICAgdmFyIHNlbGVjdGVkTGlzdGVuZXIgPSBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICBpZiAoSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzVGFza0xpc3RlbmVyKHNlbGVjdGVkTGlzdGVuZXIpKSB7XHJcbiAgICAgICAgZXZlbnRUeXBlT3B0aW9ucyA9IHRhc2tMaXN0ZW5lckV2ZW50VHlwZU9wdGlvbnM7XHJcbiAgICAgIH0gZWxzZSBpZiAoSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzRXhlY3V0aW9uTGlzdGVuZXIoc2VsZWN0ZWRMaXN0ZW5lcikpIHtcclxuICAgICAgICBldmVudFR5cGVPcHRpb25zID0gZXhlY3V0aW9uTGlzdGVuZXJFdmVudFR5cGVPcHRpb25zO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZXZlbnRUeXBlT3B0aW9ucztcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWlzU2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3Rvcnkuc2VsZWN0Qm94KHtcclxuICAgIGlkOiAnbGlzdGVuZXItdHlwZScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdMaXN0ZW5lciBUeXBlJyksXHJcbiAgICBzZWxlY3RPcHRpb25zOiBbXHJcbiAgICAgIHsgdmFsdWU6IGNsYXNzUHJvcCwgbmFtZTogdHJhbnNsYXRlKCdKYXZhIENsYXNzJykgfSxcclxuICAgICAgeyB2YWx1ZTogZXhwcmVzc2lvblByb3AsIG5hbWU6IHRyYW5zbGF0ZSgnRXhwcmVzc2lvbicpIH0sXHJcbiAgICAgIHsgdmFsdWU6IGRlbGVnYXRlRXhwcmVzc2lvblByb3AsIG5hbWU6IHRyYW5zbGF0ZSgnRGVsZWdhdGUgRXhwcmVzc2lvbicpIH0sXHJcbiAgICAgIHsgdmFsdWU6IHNjcmlwdFByb3AsIG5hbWU6IHRyYW5zbGF0ZSgnU2NyaXB0JykgfVxyXG4gICAgXSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdsaXN0ZW5lclR5cGUnLFxyXG4gICAgZW1wdHlQYXJhbWV0ZXI6IGZhbHNlLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgbGlzdGVuZXIgPSBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGxpc3RlbmVyVHlwZTogSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldEltcGxlbWVudGF0aW9uVHlwZShsaXN0ZW5lcilcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGxpc3RlbmVyID0gZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKSxcclxuICAgICAgICAgIGxpc3RlbmVyVHlwZSA9IHZhbHVlcy5saXN0ZW5lclR5cGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdXBkYXRlID0ge307XHJcblxyXG4gICAgICB1cGRhdGVbY2xhc3NQcm9wXSA9IGxpc3RlbmVyVHlwZSA9PT0gY2xhc3NQcm9wID8gJycgOiB1bmRlZmluZWQ7XHJcbiAgICAgIHVwZGF0ZVtleHByZXNzaW9uUHJvcF0gPSBsaXN0ZW5lclR5cGUgPT09IGV4cHJlc3Npb25Qcm9wID8gJycgOiB1bmRlZmluZWQ7XHJcbiAgICAgIHVwZGF0ZVtkZWxlZ2F0ZUV4cHJlc3Npb25Qcm9wXSA9IGxpc3RlbmVyVHlwZSA9PT0gZGVsZWdhdGVFeHByZXNzaW9uUHJvcCA/ICcnIDogdW5kZWZpbmVkO1xyXG4gICAgICB1cGRhdGVbc2NyaXB0UHJvcF0gPSBsaXN0ZW5lclR5cGUgPT09IHNjcmlwdFByb3AgPyBicG1uRmFjdG9yeS5jcmVhdGUoJ2FjdGl2aXRpOlNjcmlwdCcpIDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBsaXN0ZW5lciwgdXBkYXRlKTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhaXNTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgIH1cclxuXHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdsaXN0ZW5lci12YWx1ZScsXHJcbiAgICBkYXRhVmFsdWVMYWJlbDogJ2xpc3RlbmVyVmFsdWVMYWJlbCcsXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnbGlzdGVuZXJWYWx1ZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciB2YWx1ZSA9IHt9LFxyXG4gICAgICAgICAgbGlzdGVuZXIgPSBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpLFxyXG4gICAgICAgICAgbGlzdGVuZXJUeXBlID0gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldEltcGxlbWVudGF0aW9uVHlwZShsaXN0ZW5lcik7XHJcblxyXG4gICAgICB2YWx1ZS5saXN0ZW5lclZhbHVlTGFiZWwgPSBMSVNURU5FUl9UWVBFX0xBQkVMW2xpc3RlbmVyVHlwZV0gfHwgJyc7XHJcbiAgICAgIHZhbHVlLmxpc3RlbmVyVmFsdWUgPSAobGlzdGVuZXIgJiYgbGlzdGVuZXIuZ2V0KGxpc3RlbmVyVHlwZSkpIHx8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIHVwZGF0ZSA9IHt9LFxyXG4gICAgICAgICAgbGlzdGVuZXIgPSBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpLFxyXG4gICAgICAgICAgbGlzdGVuZXJUeXBlID0gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmdldEltcGxlbWVudGF0aW9uVHlwZShsaXN0ZW5lcik7XHJcblxyXG4gICAgICB1cGRhdGVbbGlzdGVuZXJUeXBlXSA9IHZhbHVlcy5saXN0ZW5lclZhbHVlIHx8ICcnO1xyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBsaXN0ZW5lciwgdXBkYXRlKTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBsaXN0ZW5lciA9IGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHJldHVybiAhbGlzdGVuZXIgfHwgbGlzdGVuZXIuc2NyaXB0O1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciB2YWx1ZSA9IHZhbHVlcy5saXN0ZW5lclZhbHVlLFxyXG4gICAgICAgICAgdmFsaWRhdGUgPSB7fTtcclxuXHJcbiAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICB2YWxpZGF0ZS5saXN0ZW5lclZhbHVlID0gdHJhbnNsYXRlKCdNdXN0IHByb3ZpZGUgYSB2YWx1ZScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdmFsaWRhdGU7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbiAgdmFyIHNjcmlwdCA9IHNjcmlwdEltcGxlbWVudGF0aW9uKCdzY3JpcHRGb3JtYXQnLCAndmFsdWUnLCB0cnVlLCB0cmFuc2xhdGUpO1xyXG5cclxuICBncm91cC5lbnRyaWVzLnB1c2goe1xyXG4gICAgaWQ6ICdsaXN0ZW5lci1zY3JpcHQtdmFsdWUnLFxyXG4gICAgaHRtbDogJzxkaXYgZGF0YS1zaG93PVwiaXNTY3JpcHRcIj4nICtcclxuICAgICAgICAgICAgc2NyaXB0LnRlbXBsYXRlICtcclxuICAgICAgICAgICc8L2Rpdj4nLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgbGlzdGVuZXIgPSBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gbGlzdGVuZXIgJiYgbGlzdGVuZXIuc2NyaXB0ID8gc2NyaXB0LmdldChlbGVtZW50LCBsaXN0ZW5lci5zY3JpcHQpIDoge307XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBsaXN0ZW5lciA9IGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHZhciB1cGRhdGUgPSBzY3JpcHQuc2V0KGVsZW1lbnQsIHZhbHVlcywgbGlzdGVuZXIpO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGxpc3RlbmVyLnNjcmlwdCwgdXBkYXRlKTtcclxuICAgIH0sXHJcblxyXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgbGlzdGVuZXIgPSBnZXRTZWxlY3RlZExpc3RlbmVyKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gbGlzdGVuZXIgJiYgbGlzdGVuZXIuc2NyaXB0ID8gc2NyaXB0LnZhbGlkYXRlKGVsZW1lbnQsIHZhbHVlcykgOiB7fTtcclxuICAgIH0sXHJcblxyXG4gICAgaXNTY3JpcHQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGxpc3RlbmVyID0gZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuIGxpc3RlbmVyICYmIGxpc3RlbmVyLnNjcmlwdDtcclxuICAgIH0sXHJcblxyXG4gICAgc2NyaXB0OiBzY3JpcHRcclxuXHJcbiAgfSk7XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xyXG5cclxudmFyIGZpZWxkSW5qZWN0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9GaWVsZEluamVjdGlvbicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICBvcHRpb25zID0gYXNzaWduKHtcclxuICAgIGlkUHJlZml4OiAnbGlzdGVuZXItJyxcclxuICAgIGluc2lkZUxpc3RlbmVyOiB0cnVlXHJcbiAgfSwgb3B0aW9ucyk7XHJcblxyXG4gIHZhciBmaWVsZEluamVjdGlvbkVudHJ5ID0gZmllbGRJbmplY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSwgb3B0aW9ucyk7XHJcblxyXG4gIGlmIChmaWVsZEluamVjdGlvbkVudHJ5ICYmIGZpZWxkSW5qZWN0aW9uRW50cnkubGVuZ3RoID4gMCkge1xyXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGZpZWxkSW5qZWN0aW9uRW50cnkpO1xyXG4gIH1cclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBsaXN0ZW5lciA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vTGlzdGVuZXInKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGxpc3RlbmVyRW50cnkgPSBsaXN0ZW5lcihlbGVtZW50LCBicG1uRmFjdG9yeSwge30sIHRyYW5zbGF0ZSk7XHJcblxyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChsaXN0ZW5lckVudHJ5LmVudHJpZXMpO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgZ2V0U2VsZWN0ZWRMaXN0ZW5lcjogbGlzdGVuZXJFbnRyeS5nZXRTZWxlY3RlZExpc3RlbmVyXHJcbiAgfTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XHJcblxyXG52YXIgbXVsdGlJbnN0YW5jZUxvb3BDaGFyYWN0ZXJpc3RpY3MgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL011bHRpSW5zdGFuY2VMb29wQ2hhcmFjdGVyaXN0aWNzJyk7XHJcblxyXG52YXIgam9iUmV0cnlUaW1lQ3ljbGUgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0pvYlJldHJ5VGltZUN5Y2xlJyksXHJcbiAgICBhc3luY0NvbnRpbnVhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vQXN5bmNDb250aW51YXRpb24nKTtcclxuXHJcblxyXG5mdW5jdGlvbiBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzKGVsZW1lbnQpIHtcclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICByZXR1cm4gYm8ubG9vcENoYXJhY3RlcmlzdGljcztcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGVuc3VyZU11bHRpSW5zdGFuY2VTdXBwb3J0ZWQoZWxlbWVudCkge1xyXG4gIHZhciBsb29wQ2hhcmFjdGVyaXN0aWNzID0gZ2V0TG9vcENoYXJhY3RlcmlzdGljcyhlbGVtZW50KTtcclxuICByZXR1cm4gISFsb29wQ2hhcmFjdGVyaXN0aWNzICYmIGlzKGxvb3BDaGFyYWN0ZXJpc3RpY3MsICdhY3Rpdml0aTpDb2xsZWN0YWJsZScpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGlmICghZW5zdXJlTXVsdGlJbnN0YW5jZVN1cHBvcnRlZChlbGVtZW50KSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgLy8gbXVsdGkgaW5zdGFuY2UgcHJvcGVydGllc1xyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChtdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcyhlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSk7XHJcblxyXG4gIC8vIGFzeW5jIGNvbnRpbnVhdGlvbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGFzeW5jQ29udGludWF0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBnZXRCdXNpbmVzc09iamVjdDogZ2V0TG9vcENoYXJhY3RlcmlzdGljcyxcclxuICAgIGlkUHJlZml4OiAnbXVsdGlJbnN0YW5jZS0nLFxyXG4gICAgbGFiZWxQcmVmaXg6IHRyYW5zbGF0ZSgnTXVsdGkgSW5zdGFuY2UgJylcclxuICB9LCB0cmFuc2xhdGUpKTtcclxuXHJcblxyXG4gIC8vIHJldHJ5IHRpbWUgY3ljbGUgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChqb2JSZXRyeVRpbWVDeWNsZShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGdldExvb3BDaGFyYWN0ZXJpc3RpY3MsXHJcbiAgICBpZFByZWZpeDogJ211bHRpSW5zdGFuY2UtJyxcclxuICAgIGxhYmVsUHJlZml4OiB0cmFuc2xhdGUoJ011bHRpIEluc3RhbmNlICcpXHJcbiAgfSwgdHJhbnNsYXRlKSk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBwcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9Qcm9wZXJ0aWVzJyksXHJcbiAgICBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBwcm9wZXJ0aWVzRW50cnkgPSBwcm9wZXJ0aWVzKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBpZDogJ3Byb3BlcnRpZXMnLFxyXG4gICAgbW9kZWxQcm9wZXJ0aWVzOiBbICduYW1lJywgJ3ZhbHVlJyBdLFxyXG4gICAgbGFiZWxzOiBbIHRyYW5zbGF0ZSgnTmFtZScpLCB0cmFuc2xhdGUoJ1ZhbHVlJykgXSxcclxuXHJcbiAgICBnZXRQYXJlbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGJvKSB7XHJcbiAgICAgIHJldHVybiBiby5leHRlbnNpb25FbGVtZW50cztcclxuICAgIH0sXHJcblxyXG4gICAgY3JlYXRlUGFyZW50OiBmdW5jdGlvbihlbGVtZW50LCBibykge1xyXG4gICAgICB2YXIgcGFyZW50ID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywgeyB2YWx1ZXM6IFtdIH0sIGJvLCBicG1uRmFjdG9yeSk7XHJcbiAgICAgIHZhciBjbWQgPSBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHsgZXh0ZW5zaW9uRWxlbWVudHM6IHBhcmVudCB9KTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBjbWQ6IGNtZCxcclxuICAgICAgICBwYXJlbnQ6IHBhcmVudFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH0sIHRyYW5zbGF0ZSk7XHJcblxyXG4gIGlmIChwcm9wZXJ0aWVzRW50cnkpIHtcclxuICAgIGdyb3VwLmVudHJpZXMucHVzaChwcm9wZXJ0aWVzRW50cnkpO1xyXG4gIH1cclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxyXG4gICAgc2NyaXB0SW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL1NjcmlwdCcpO1xyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcclxuICB2YXIgYm87XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpTY3JpcHRUYXNrJykpIHtcclxuICAgIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBpZiAoIWJvKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICB2YXIgc2NyaXB0ID0gc2NyaXB0SW1wbGVtZW50YXRpb24oJ3NjcmlwdEZvcm1hdCcsICdzY3JpcHQnLCBmYWxzZSwgdHJhbnNsYXRlKTtcclxuICBncm91cC5lbnRyaWVzLnB1c2goe1xyXG4gICAgaWQ6ICdzY3JpcHQtaW1wbGVtZW50YXRpb24nLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnU2NyaXB0JyksXHJcbiAgICBodG1sOiBzY3JpcHQudGVtcGxhdGUsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgIHJldHVybiBzY3JpcHQuZ2V0KGVsZW1lbnQsIGJvKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIGNvbnRhaW5lckVsZW1lbnQpIHtcclxuICAgICAgdmFyIHByb3BlcnRpZXMgPSBzY3JpcHQuc2V0KGVsZW1lbnQsIHZhbHVlcywgY29udGFpbmVyRWxlbWVudCk7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcHJvcGVydGllcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgcmV0dXJuIHNjcmlwdC52YWxpZGF0ZShlbGVtZW50LCB2YWx1ZXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzY3JpcHQgOiBzY3JpcHQsXHJcblxyXG4gICAgY3NzQ2xhc3NlczogWydicHAtdGV4dGZpZWxkJ11cclxuXHJcbiAgfSk7XHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkIDogJ3NjcmlwdFJlc3VsdFZhcmlhYmxlJyxcclxuICAgIGxhYmVsIDogdHJhbnNsYXRlKCdSZXN1bHQgVmFyaWFibGUnKSxcclxuICAgIG1vZGVsUHJvcGVydHkgOiAnc2NyaXB0UmVzdWx0VmFyaWFibGUnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHlOYW1lKSB7XHJcbiAgICAgIHZhciBib1Jlc3VsdFZhcmlhYmxlID0gYm8uZ2V0KCdhY3Rpdml0aTpyZXN1bHRWYXJpYWJsZScpO1xyXG5cclxuICAgICAgcmV0dXJuIHsgc2NyaXB0UmVzdWx0VmFyaWFibGUgOiBib1Jlc3VsdFZhcmlhYmxlIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBjb250YWluZXJFbGVtZW50KSB7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7XHJcbiAgICAgICAgJ2FjdGl2aXRpOnJlc3VsdFZhcmlhYmxlJzogdmFsdWVzLnNjcmlwdFJlc3VsdFZhcmlhYmxlLmxlbmd0aFxyXG4gICAgICAgICAgPyB2YWx1ZXMuc2NyaXB0UmVzdWx0VmFyaWFibGVcclxuICAgICAgICAgIDogdW5kZWZpbmVkXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9KSk7XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgSW1wbGVtZW50YXRpb25UeXBlSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0ltcGxlbWVudGF0aW9uVHlwZUhlbHBlcicpLFxyXG4gICAgSW5wdXRPdXRwdXRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvSW5wdXRPdXRwdXRIZWxwZXInKTtcclxuXHJcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL1V0aWxzJyksXHJcbiAgICBlc2NhcGVIVE1MID0gdXRpbHMuZXNjYXBlSFRNTCxcclxuICAgIHRyaWdnZXJDbGlja0V2ZW50ID0gdXRpbHMudHJpZ2dlckNsaWNrRXZlbnQ7XHJcblxyXG52YXIgaW1wbGVtZW50YXRpb25UeXBlID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9JbXBsZW1lbnRhdGlvblR5cGUnKSxcclxuICAgIGRlbGVnYXRlID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9EZWxlZ2F0ZScpLFxyXG4gICAgZXh0ZXJuYWwgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0V4dGVybmFsJyksXHJcbiAgICBjYWxsYWJsZSA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vQ2FsbGFibGUnKSxcclxuICAgIHJlc3VsdFZhcmlhYmxlID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9SZXN1bHRWYXJpYWJsZScpO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XHJcblxyXG52YXIgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnksXHJcbiAgICBkb21DbG9zZXN0ID0gcmVxdWlyZSgnbWluLWRvbScpLmNsb3Nlc3QsXHJcbiAgICBkb21DbGFzc2VzID0gcmVxdWlyZSgnbWluLWRvbScpLmNsYXNzZXM7XHJcblxyXG5mdW5jdGlvbiBnZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCkge1xyXG4gIHJldHVybiBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuZ2V0SW1wbGVtZW50YXRpb25UeXBlKGVsZW1lbnQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSB7XHJcbiAgcmV0dXJuIEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5nZXRTZXJ2aWNlVGFza0xpa2VCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNEbW5DYXBhYmxlKGVsZW1lbnQpIHtcclxuICByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzRG1uQ2FwYWJsZShlbGVtZW50KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNFeHRlcm5hbENhcGFibGUoZWxlbWVudCkge1xyXG4gIHJldHVybiBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuaXNFeHRlcm5hbENhcGFibGUoZWxlbWVudCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU2VydmljZVRhc2tMaWtlKGVsZW1lbnQpIHtcclxuICByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlSGVscGVyLmlzU2VydmljZVRhc2tMaWtlKGVsZW1lbnQpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGlmICghaXNTZXJ2aWNlVGFza0xpa2UoZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkpKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICB2YXIgaGFzRG1uU3VwcG9ydCA9IGlzRG1uQ2FwYWJsZShlbGVtZW50KTtcclxuICB2YXIgaGFzRXh0ZXJuYWxTdXBwb3J0ID0gaXNFeHRlcm5hbENhcGFibGUoZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkpO1xyXG5cclxuICAvLyBpbXBsZW1lbnRhdGlvbiB0eXBlIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoaW1wbGVtZW50YXRpb25UeXBlKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBnZXRCdXNpbmVzc09iamVjdDogZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBnZXRJbXBsZW1lbnRhdGlvblR5cGU6IGdldEltcGxlbWVudGF0aW9uVHlwZSxcclxuICAgIGhhc0RtblN1cHBvcnQ6IGhhc0RtblN1cHBvcnQsXHJcbiAgICBoYXNFeHRlcm5hbFN1cHBvcnQ6IGhhc0V4dGVybmFsU3VwcG9ydCxcclxuICAgIGhhc1NlcnZpY2VUYXNrTGlrZVN1cHBvcnQ6IHRydWVcclxuICB9LCB0cmFuc2xhdGUpKTtcclxuXHJcblxyXG4gIC8vIGRlbGVnYXRlIChjbGFzcywgZXhwcmVzc2lvbiwgZGVsZWdhdGVFeHByZXNzaW9uKSAvLy8vLy8vLy8vXHJcblxyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChkZWxlZ2F0ZShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgZ2V0SW1wbGVtZW50YXRpb25UeXBlOiBnZXRJbXBsZW1lbnRhdGlvblR5cGVcclxuICB9LCB0cmFuc2xhdGUpKTtcclxuXHJcblxyXG4gIC8vIHJlc3VsdCB2YXJpYWJsZSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQocmVzdWx0VmFyaWFibGUoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0OiBnZXRCdXNpbmVzc09iamVjdCxcclxuICAgIGdldEltcGxlbWVudGF0aW9uVHlwZTogZ2V0SW1wbGVtZW50YXRpb25UeXBlLFxyXG4gICAgaGlkZVJlc3VsdFZhcmlhYmxlOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiBnZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCkgIT09ICdleHByZXNzaW9uJztcclxuICAgIH1cclxuICB9LCB0cmFuc2xhdGUpKTtcclxuXHJcbiAgLy8gZXh0ZXJuYWwgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgaWYgKGhhc0V4dGVybmFsU3VwcG9ydCkge1xyXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGV4dGVybmFsKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICAgIGdldEJ1c2luZXNzT2JqZWN0OiBnZXRCdXNpbmVzc09iamVjdCxcclxuICAgICAgZ2V0SW1wbGVtZW50YXRpb25UeXBlOiBnZXRJbXBsZW1lbnRhdGlvblR5cGVcclxuICAgIH0sIHRyYW5zbGF0ZSkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIGRtbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICBpZiAoaGFzRG1uU3VwcG9ydCkge1xyXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGNhbGxhYmxlKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICAgIGdldENhbGxhYmxlVHlwZTogZ2V0SW1wbGVtZW50YXRpb25UeXBlXHJcbiAgICB9LCB0cmFuc2xhdGUpKTtcclxuICB9XHJcblxyXG5cclxuICAvLyBjb25uZWN0b3IgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIHZhciBpc0Nvbm5lY3RvciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgIHJldHVybiBnZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCkgPT09ICdjb25uZWN0b3InO1xyXG4gIH07XHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkubGluayh7XHJcbiAgICBpZDogJ2NvbmZpZ3VyZUNvbm5lY3RvckxpbmsnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ29uZmlndXJlIENvbm5lY3RvcicpLFxyXG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGV2ZW50KSB7XHJcblxyXG4gICAgICB2YXIgY29ubmVjdG9yVGFiRWwgPSBnZXRUYWJOb2RlKG5vZGUsICdjb25uZWN0b3InKTtcclxuXHJcbiAgICAgIGlmIChjb25uZWN0b3JUYWJFbCkge1xyXG4gICAgICAgIHRyaWdnZXJDbGlja0V2ZW50KGNvbm5lY3RvclRhYkVsKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gc3VwcHJlc3MgYWN0dWFsIGxpbmsgY2xpY2tcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuICAgIHNob3dMaW5rOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBsaW5rID0gZG9tUXVlcnkoJ2EnLCBub2RlKTtcclxuICAgICAgbGluay50ZXh0Q29udGVudCA9ICcnO1xyXG5cclxuICAgICAgZG9tQ2xhc3NlcyhsaW5rKS5yZW1vdmUoJ2JwcC1lcnJvci1tZXNzYWdlJyk7XHJcblxyXG4gICAgICBpZiAoaXNDb25uZWN0b3IoZWxlbWVudCkpIHtcclxuICAgICAgICB2YXIgY29ubmVjdG9ySWQgPSBJbnB1dE91dHB1dEhlbHBlci5nZXRDb25uZWN0b3IoZWxlbWVudCkuZ2V0KCdjb25uZWN0b3JJZCcpO1xyXG4gICAgICAgIGlmIChjb25uZWN0b3JJZCkge1xyXG4gICAgICAgICAgbGluay50ZXh0Q29udGVudCA9IHRyYW5zbGF0ZSgnQ29uZmlndXJlIENvbm5lY3RvcicpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsaW5rLmlubmVySFRNTCA9ICc8c3BhbiBjbGFzcz1cImJwcC1pY29uLXdhcm5pbmdcIj48L3NwYW4+ICcgKyBlc2NhcGVIVE1MKHRyYW5zbGF0ZSgnTXVzdCBjb25maWd1cmUgQ29ubmVjdG9yJykpO1xyXG4gICAgICAgICAgZG9tQ2xhc3NlcyhsaW5rKS5hZGQoJ2JwcC1lcnJvci1tZXNzYWdlJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcbn07XHJcblxyXG5cclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBnZXRUYWJOb2RlKGVsLCBpZCkge1xyXG4gIHZhciBjb250YWluZXJFbCA9IGRvbUNsb3Nlc3QoZWwsICcuYnBwLXByb3BlcnRpZXMtcGFuZWwnKTtcclxuXHJcbiAgcmV0dXJuIGRvbVF1ZXJ5KCdhW2RhdGEtdGFiLXRhcmdldD1cIicgKyBpZCArICdcIl0nLCBjb250YWluZXJFbCk7XHJcbn0iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIGlmICghYm8pIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYWN0aXZpdGk6SW5pdGlhdG9yJykgJiYgIWlzKGVsZW1lbnQucGFyZW50LCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcclxuICAgIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgICAgaWQ6ICdpbml0aWF0b3InLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdJbml0aWF0b3InKSxcclxuICAgICAgbW9kZWxQcm9wZXJ0eTogJ2luaXRpYXRvcidcclxuICAgIH0pKTtcclxuICB9XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgdGFza2xpc3QgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL1Rhc2tsaXN0Jyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlKSB7XHJcbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYWN0aXZpdGk6UHJvY2VzcycpIHx8XHJcbiAgICAgIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgYnVzaW5lc3NPYmplY3QuZ2V0KCdwcm9jZXNzUmVmJykpIHtcclxuXHJcbiAgICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQodGFza2xpc3QoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICAgICAgaWYgKCFpcyhibywgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGJvO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGJvLmdldCgncHJvY2Vzc1JlZicpO1xyXG4gICAgICB9XHJcbiAgICB9LCB0cmFuc2xhdGUpKTtcclxuXHJcbiAgfVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzLFxyXG4gICAgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCB0cmFuc2xhdGUpIHtcclxuICBpZiAoaXMoZWxlbWVudCwgJ2FjdGl2aXRpOkFzc2lnbmFibGUnKSkge1xyXG5cclxuICAgIC8vIEFzc2lnbmVlXHJcbiAgICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICAgIGlkIDogJ2Fzc2lnbmVlJyxcclxuICAgICAgbGFiZWwgOiB0cmFuc2xhdGUoJ0Fzc2lnbmVlJyksXHJcbiAgICAgIG1vZGVsUHJvcGVydHkgOiAnYXNzaWduZWUnXHJcbiAgICB9KSk7XHJcblxyXG4gICAgLy8gQ2FuZGlkYXRlIFVzZXJzXHJcbiAgICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICAgIGlkIDogJ2NhbmRpZGF0ZVVzZXJzJyxcclxuICAgICAgbGFiZWwgOiB0cmFuc2xhdGUoJ0NhbmRpZGF0ZSBVc2VycycpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5IDogJ2NhbmRpZGF0ZVVzZXJzJ1xyXG4gICAgfSkpO1xyXG5cclxuICAgIC8vIENhbmRpZGF0ZSBHcm91cHNcclxuICAgIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgICAgaWQgOiAnY2FuZGlkYXRlR3JvdXBzJyxcclxuICAgICAgbGFiZWwgOiB0cmFuc2xhdGUoJ0NhbmRpZGF0ZSBHcm91cHMnKSxcclxuICAgICAgbW9kZWxQcm9wZXJ0eSA6ICdjYW5kaWRhdGVHcm91cHMnXHJcbiAgICB9KSk7XHJcblxyXG4gICAgLy8gRHVlIERhdGVcclxuICAgIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgICAgaWQgOiAnZHVlRGF0ZScsXHJcbiAgICAgIGRlc2NyaXB0aW9uIDogdHJhbnNsYXRlKCdUaGUgZHVlIGRhdGUgYXMgYW4gRUwgZXhwcmVzc2lvbiAoZS5nLiAke3NvbWVEYXRlfSBvciBhbiBJU08gZGF0ZSAoZS5nLiAyMDE1LTA2LTI2VDA5OjU0OjAwKScpLFxyXG4gICAgICBsYWJlbCA6IHRyYW5zbGF0ZSgnRHVlIERhdGUnKSxcclxuICAgICAgbW9kZWxQcm9wZXJ0eSA6ICdkdWVEYXRlJ1xyXG4gICAgfSkpO1xyXG5cclxuICAgIC8vIEZvbGxvd1VwIERhdGVcclxuICAgIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgICAgaWQgOiAnZm9sbG93VXBEYXRlJyxcclxuICAgICAgZGVzY3JpcHRpb24gOiB0cmFuc2xhdGUoJ1RoZSBmb2xsb3cgdXAgZGF0ZSBhcyBhbiBFTCBleHByZXNzaW9uIChlLmcuICR7c29tZURhdGV9IG9yIGFuICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICdJU08gZGF0ZSAoZS5nLiAyMDE1LTA2LTI2VDA5OjU0OjAwKScpLFxyXG4gICAgICBsYWJlbCA6IHRyYW5zbGF0ZSgnRm9sbG93IFVwIERhdGUnKSxcclxuICAgICAgbW9kZWxQcm9wZXJ0eSA6ICdmb2xsb3dVcERhdGUnXHJcbiAgICB9KSk7XHJcblxyXG4gICAgLy8gcHJpb3JpdHlcclxuICAgIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgICAgaWQgOiAncHJpb3JpdHknLFxyXG4gICAgICBsYWJlbCA6IHRyYW5zbGF0ZSgnUHJpb3JpdHknKSxcclxuICAgICAgbW9kZWxQcm9wZXJ0eSA6ICdwcmlvcml0eSdcclxuICAgIH0pKTtcclxuICB9XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBpc0FueSA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsJykuaXNBbnksXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgZmlsdGVyID0gcmVxdWlyZSgnbG9kYXNoL2ZpbHRlcicpO1xyXG5cclxudmFyIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0V4dGVuc2lvbkVsZW1lbnRzSGVscGVyJyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXHJcbiAgICBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKSxcclxuICAgIGV2ZW50RGVmaW5pdGlvbkhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uL2hlbHBlci9FdmVudERlZmluaXRpb25IZWxwZXInKTtcclxuXHJcbnZhciBleHRlbnNpb25FbGVtZW50c0VudHJ5ID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9FeHRlbnNpb25FbGVtZW50cycpO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICAqIHJldHVybiBkZXBlbmQgb24gcGFyYW1ldGVyICd0eXBlJyBhY3Rpdml0aTppbiBvciBhY3Rpdml0aTpvdXQgZXh0ZW5zaW9uIGVsZW1lbnRzXHJcbiAgKi9cclxuZnVuY3Rpb24gZ2V0QWN0aXZpdGlJbk91dE1hcHBpbmdzKGVsZW1lbnQsIHR5cGUpIHtcclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgdmFyIHNpZ25hbEV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRTaWduYWxFdmVudERlZmluaXRpb24oYm8pO1xyXG5cclxuICByZXR1cm4gZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoc2lnbmFsRXZlbnREZWZpbml0aW9uIHx8IGJvLCB0eXBlKSB8fCBbXTtcclxufVxyXG5cclxuLyoqXHJcbiAgKiByZXR1cm4gZGVwZW5kIG9uIHBhcmFtZXRlciAndHlwZScgYWN0aXZpdGk6aW4gb3IgYWN0aXZpdGk6b3V0IGV4dGVuc2lvbiBlbGVtZW50c1xyXG4gICogd2l0aCBzb3VyY2Ugb3Igc291cmNlRXhwcmVzc2lvbiBhdHRyaWJ1dGVcclxuICAqL1xyXG5mdW5jdGlvbiBnZXRWYXJpYWJsZU1hcHBpbmdzKGVsZW1lbnQsIHR5cGUpIHtcclxuICB2YXIgYWN0aXZpdGlNYXBwaW5ncyA9IGdldEFjdGl2aXRpSW5PdXRNYXBwaW5ncyhlbGVtZW50LCB0eXBlKTtcclxuXHJcbiAgcmV0dXJuIGZpbHRlcihhY3Rpdml0aU1hcHBpbmdzLCBmdW5jdGlvbihtYXBwaW5nKSB7XHJcbiAgICByZXR1cm4gIW1hcHBpbmcuYnVzaW5lc3NLZXk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEluT3V0VHlwZShtYXBwaW5nKSB7XHJcbiAgdmFyIGluT3V0VHlwZSA9ICdzb3VyY2UnO1xyXG5cclxuICBpZiAobWFwcGluZy52YXJpYWJsZXMgPT09ICdhbGwnKSB7XHJcbiAgICBpbk91dFR5cGUgPSAndmFyaWFibGVzJztcclxuICB9XHJcbiAgZWxzZSBpZiAodHlwZW9mIG1hcHBpbmcuc291cmNlICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgaW5PdXRUeXBlID0gJ3NvdXJjZSc7XHJcbiAgfVxyXG4gIGVsc2UgaWYgKHR5cGVvZiBtYXBwaW5nLnNvdXJjZUV4cHJlc3Npb24gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBpbk91dFR5cGUgPSAnc291cmNlRXhwcmVzc2lvbic7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gaW5PdXRUeXBlO1xyXG59XHJcblxyXG52YXIgQUNUSVZJVElfSU5fRVhURU5TSU9OX0VMRU1FTlQgPSAnYWN0aXZpdGk6SW4nLFxyXG4gICAgQUNUSVZJVElfT1VUX0VYVEVOU0lPTl9FTEVNRU5UID0gJ2FjdGl2aXRpOk91dCc7XHJcblxyXG52YXIgV0hJVEVTUEFDRV9SRUdFWCA9IC9cXHMvO1xyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGluT3V0VHlwZU9wdGlvbnMgPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IHRyYW5zbGF0ZSgnU291cmNlJyksXHJcbiAgICAgIHZhbHVlOiAnc291cmNlJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogdHJhbnNsYXRlKCdTb3VyY2UgRXhwcmVzc2lvbicpLFxyXG4gICAgICB2YWx1ZTogJ3NvdXJjZUV4cHJlc3Npb24nXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiB0cmFuc2xhdGUoJ0FsbCcpLFxyXG4gICAgICB2YWx1ZTogJ3ZhcmlhYmxlcydcclxuICAgIH1cclxuICBdO1xyXG5cclxuICB2YXIgc2lnbmFsRXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uSGVscGVyLmdldFNpZ25hbEV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcclxuXHJcbiAgaWYgKCFpcyhlbGVtZW50LCAnYWN0aXZpdGk6Q2FsbEFjdGl2aXR5JykgJiYgIXNpZ25hbEV2ZW50RGVmaW5pdGlvbikge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKHNpZ25hbEV2ZW50RGVmaW5pdGlvbiAmJiAhKGlzQW55KGVsZW1lbnQsIFtcclxuICAgICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLFxyXG4gICAgJ2JwbW46RW5kRXZlbnQnXHJcbiAgXSkpKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICB2YXIgaXNTZWxlY3RlZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgIHJldHVybiAhIWdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gIH07XHJcblxyXG4gIHZhciBnZXRTZWxlY3RlZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgIHZhciBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xyXG4gICAgdmFyIHNlbGVjdGlvbiA9IGluRW50cnkuZ2V0U2VsZWN0ZWQoZWxlbWVudCwgcGFyZW50Tm9kZSk7XHJcblxyXG4gICAgdmFyIHBhcmFtZXRlciA9IGdldFZhcmlhYmxlTWFwcGluZ3MoZWxlbWVudCwgQUNUSVZJVElfSU5fRVhURU5TSU9OX0VMRU1FTlQpW3NlbGVjdGlvbi5pZHhdO1xyXG5cclxuICAgIGlmICghcGFyYW1ldGVyICYmIG91dEVudHJ5KSB7XHJcbiAgICAgIHNlbGVjdGlvbiA9IG91dEVudHJ5LmdldFNlbGVjdGVkKGVsZW1lbnQsIHBhcmVudE5vZGUpO1xyXG4gICAgICBwYXJhbWV0ZXIgPSBnZXRWYXJpYWJsZU1hcHBpbmdzKGVsZW1lbnQsIEFDVElWSVRJX09VVF9FWFRFTlNJT05fRUxFTUVOVClbc2VsZWN0aW9uLmlkeF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcclxuICB9O1xyXG5cclxuICB2YXIgc2V0T3B0aW9uTGFiZWxWYWx1ZSA9IGZ1bmN0aW9uKHR5cGUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBvcHRpb24sIHByb3BlcnR5LCB2YWx1ZSwgaWR4KSB7XHJcbiAgICAgIHZhciB2YXJpYWJsZU1hcHBpbmdzID0gZ2V0VmFyaWFibGVNYXBwaW5ncyhlbGVtZW50LCB0eXBlKTtcclxuICAgICAgdmFyIG1hcHBpbmdWYWx1ZSA9IHZhcmlhYmxlTWFwcGluZ3NbaWR4XTtcclxuICAgICAgdmFyIGxhYmVsID0gKG1hcHBpbmdWYWx1ZS50YXJnZXQgfHwgJzx1bmRlZmluZWQ+JykgKyAnIDo9ICc7XHJcbiAgICAgIHZhciBtYXBwaW5nVHlwZSA9IGdldEluT3V0VHlwZShtYXBwaW5nVmFsdWUpO1xyXG5cclxuICAgICAgaWYgKG1hcHBpbmdUeXBlID09PSAndmFyaWFibGVzJykge1xyXG4gICAgICAgIGxhYmVsID0gJ2FsbCc7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAobWFwcGluZ1R5cGUgPT09ICdzb3VyY2UnKSB7XHJcbiAgICAgICAgbGFiZWwgPSBsYWJlbCArIChtYXBwaW5nVmFsdWUuc291cmNlIHx8ICc8ZW1wdHk+Jyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAobWFwcGluZ1R5cGUgPT09ICdzb3VyY2VFeHByZXNzaW9uJykge1xyXG4gICAgICAgIGxhYmVsID0gbGFiZWwgKyAobWFwcGluZ1ZhbHVlLnNvdXJjZUV4cHJlc3Npb24gfHwgJzxlbXB0eT4nKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsYWJlbCA9IGxhYmVsICsgJzxlbXB0eT4nO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBvcHRpb24udGV4dCA9IGxhYmVsO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICB2YXIgbmV3RWxlbWVudCA9IGZ1bmN0aW9uKHR5cGUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgdmFsdWUpIHtcclxuICAgICAgdmFyIG5ld0VsZW0gPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQodHlwZSwgeyBzb3VyY2U6ICcnIH0sIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLmFkZEVsZW1lbnRzVG9saXN0KGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCAndmFsdWVzJywgWyBuZXdFbGVtIF0pO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICB2YXIgcmVtb3ZlRWxlbWVudCA9IGZ1bmN0aW9uKHR5cGUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgdmFsdWUsIGlkeCkge1xyXG4gICAgICB2YXIgdmFyaWFibGVzTWFwcGluZ3M9IGdldFZhcmlhYmxlTWFwcGluZ3MoZWxlbWVudCwgdHlwZSk7XHJcbiAgICAgIHZhciBtYXBwaW5nID0gdmFyaWFibGVzTWFwcGluZ3NbaWR4XTtcclxuXHJcbiAgICAgIGlmIChtYXBwaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyXHJcbiAgICAgICAgICAucmVtb3ZlRW50cnkoc2lnbmFsRXZlbnREZWZpbml0aW9uIHx8IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLCBlbGVtZW50LCBtYXBwaW5nKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICAvLyBpbiBtYXBwaW5nIGZvciBzb3VyY2UgYW5kIHNvdXJjZUV4cHJlc3Npb24gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIHZhciBpbkVudHJ5ID0gZXh0ZW5zaW9uRWxlbWVudHNFbnRyeShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xyXG4gICAgaWQ6ICd2YXJpYWJsZU1hcHBpbmctaW4nLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSW4gTWFwcGluZycpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ3NvdXJjZScsXHJcbiAgICBwcmVmaXg6ICdJbicsXHJcbiAgICBpZEdlbmVyYXRpb246IGZhbHNlLFxyXG4gICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgYnVzaW5lc3NPYmplY3Q6IHNpZ25hbEV2ZW50RGVmaW5pdGlvbiB8fCBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcclxuXHJcbiAgICBjcmVhdGVFeHRlbnNpb25FbGVtZW50OiBuZXdFbGVtZW50KEFDVElWSVRJX0lOX0VYVEVOU0lPTl9FTEVNRU5UKSxcclxuICAgIHJlbW92ZUV4dGVuc2lvbkVsZW1lbnQ6IHJlbW92ZUVsZW1lbnQoQUNUSVZJVElfSU5fRVhURU5TSU9OX0VMRU1FTlQpLFxyXG5cclxuICAgIGdldEV4dGVuc2lvbkVsZW1lbnRzOiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgIHJldHVybiBnZXRWYXJpYWJsZU1hcHBpbmdzKGVsZW1lbnQsIEFDVElWSVRJX0lOX0VYVEVOU0lPTl9FTEVNRU5UKTtcclxuICAgIH0sXHJcblxyXG4gICAgb25TZWxlY3Rpb25DaGFuZ2U6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGV2ZW50LCBzY29wZSkge1xyXG4gICAgICBvdXRFbnRyeSAmJiBvdXRFbnRyeS5kZXNlbGVjdChlbGVtZW50LCBub2RlLnBhcmVudE5vZGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRPcHRpb25MYWJlbFZhbHVlOiBzZXRPcHRpb25MYWJlbFZhbHVlKEFDVElWSVRJX0lOX0VYVEVOU0lPTl9FTEVNRU5UKVxyXG4gIH0pO1xyXG4gIGdyb3VwLmVudHJpZXMucHVzaChpbkVudHJ5KTtcclxuXHJcbiAgLy8gb3V0IG1hcHBpbmcgZm9yIHNvdXJjZSBhbmQgc291cmNlRXhwcmVzc2lvbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIGlmICghc2lnbmFsRXZlbnREZWZpbml0aW9uKSB7XHJcbiAgICB2YXIgb3V0RW50cnkgPSBleHRlbnNpb25FbGVtZW50c0VudHJ5KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICAgIGlkOiAndmFyaWFibGVNYXBwaW5nLW91dCcsXHJcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ091dCBNYXBwaW5nJyksXHJcbiAgICAgIG1vZGVsUHJvcGVydHk6ICdzb3VyY2UnLFxyXG4gICAgICBwcmVmaXg6ICdPdXQnLFxyXG4gICAgICBpZEdlbmVyYXRpb246IGZhbHNlLFxyXG4gICAgICByZXNpemFibGU6IHRydWUsXHJcblxyXG4gICAgICBjcmVhdGVFeHRlbnNpb25FbGVtZW50OiBuZXdFbGVtZW50KEFDVElWSVRJX09VVF9FWFRFTlNJT05fRUxFTUVOVCksXHJcbiAgICAgIHJlbW92ZUV4dGVuc2lvbkVsZW1lbnQ6IHJlbW92ZUVsZW1lbnQoQUNUSVZJVElfT1VUX0VYVEVOU0lPTl9FTEVNRU5UKSxcclxuXHJcbiAgICAgIGdldEV4dGVuc2lvbkVsZW1lbnRzOiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGdldFZhcmlhYmxlTWFwcGluZ3MoZWxlbWVudCwgQUNUSVZJVElfT1VUX0VYVEVOU0lPTl9FTEVNRU5UKTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIG9uU2VsZWN0aW9uQ2hhbmdlOiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBldmVudCwgc2NvcGUpIHtcclxuICAgICAgICBpbkVudHJ5LmRlc2VsZWN0KGVsZW1lbnQsIG5vZGUucGFyZW50Tm9kZSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBzZXRPcHRpb25MYWJlbFZhbHVlOiBzZXRPcHRpb25MYWJlbFZhbHVlKEFDVElWSVRJX09VVF9FWFRFTlNJT05fRUxFTUVOVClcclxuICAgIH0pO1xyXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKG91dEVudHJ5KTtcclxuICB9XHJcblxyXG4gIC8vIGxhYmVsIGZvciBzZWxlY3RlZCBtYXBwaW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5sYWJlbCh7XHJcbiAgICBpZDogJ3ZhcmlhYmxlTWFwcGluZy10eXBlTGFiZWwnLFxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBtYXBwaW5nID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICB2YXIgdmFsdWUgPSAnJztcclxuICAgICAgaWYgKGlzKG1hcHBpbmcsIEFDVElWSVRJX0lOX0VYVEVOU0lPTl9FTEVNRU5UKSkge1xyXG4gICAgICAgIHZhbHVlID0gdHJhbnNsYXRlKCdJbiBNYXBwaW5nJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoaXMobWFwcGluZywgQUNUSVZJVElfT1VUX0VYVEVOU0lPTl9FTEVNRU5UKSkge1xyXG4gICAgICAgIHZhbHVlID0gdHJhbnNsYXRlKCdPdXQgTWFwcGluZycpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGxhYmVsOiB2YWx1ZVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzaG93TGFiZWw6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIGlzU2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5zZWxlY3RCb3goe1xyXG4gICAgaWQ6ICd2YXJpYWJsZU1hcHBpbmctaW5PdXRUeXBlJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1R5cGUnKSxcclxuICAgIHNlbGVjdE9wdGlvbnM6IGluT3V0VHlwZU9wdGlvbnMsXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnaW5PdXRUeXBlJyxcclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgbWFwcGluZyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpIHx8IHt9O1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGluT3V0VHlwZTogZ2V0SW5PdXRUeXBlKG1hcHBpbmcpXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGluT3V0VHlwZSA9IHZhbHVlcy5pbk91dFR5cGU7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSB7XHJcbiAgICAgICAgJ3NvdXJjZScgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgJ3NvdXJjZUV4cHJlc3Npb24nIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICd2YXJpYWJsZXMnIDogdW5kZWZpbmVkXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAoaW5PdXRUeXBlID09PSAnc291cmNlJykge1xyXG4gICAgICAgIHByb3BzLnNvdXJjZSA9ICcnO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGluT3V0VHlwZSA9PT0gJ3NvdXJjZUV4cHJlc3Npb24nKSB7XHJcbiAgICAgICAgcHJvcHMuc291cmNlRXhwcmVzc2lvbiA9ICcnO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGluT3V0VHlwZSA9PT0gJ3ZhcmlhYmxlcycpIHtcclxuICAgICAgICBwcm9wcy52YXJpYWJsZXMgPSAnYWxsJztcclxuICAgICAgICBwcm9wcy50YXJnZXQgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBtYXBwaW5nID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgbWFwcGluZywgcHJvcHMpO1xyXG4gICAgfSxcclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWlzU2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAndmFyaWFibGVNYXBwaW5nLXNvdXJjZScsXHJcbiAgICBkYXRhVmFsdWVMYWJlbDogJ3NvdXJjZUxhYmVsJyxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdzb3VyY2UnLFxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBtYXBwaW5nID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSkgfHwge307XHJcblxyXG4gICAgICB2YXIgbGFiZWwgPSAnJztcclxuICAgICAgdmFyIGluT3V0VHlwZSA9IGdldEluT3V0VHlwZShtYXBwaW5nKTtcclxuICAgICAgaWYgKGluT3V0VHlwZSA9PT0gJ3NvdXJjZScpIHtcclxuICAgICAgICBsYWJlbCA9IHRyYW5zbGF0ZSgnU291cmNlJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoaW5PdXRUeXBlID09PSAnc291cmNlRXhwcmVzc2lvbicpIHtcclxuICAgICAgICBsYWJlbCA9IHRyYW5zbGF0ZSgnU291cmNlIEV4cHJlc3Npb24nKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBzb3VyY2U6IG1hcHBpbmdbaW5PdXRUeXBlXSxcclxuICAgICAgICBzb3VyY2VMYWJlbDogbGFiZWxcclxuICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YWx1ZXMuc291cmNlID0gdmFsdWVzLnNvdXJjZSB8fCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICB2YXIgbWFwcGluZyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICB2YXIgaW5PdXRUeXBlID0gZ2V0SW5PdXRUeXBlKG1hcHBpbmcpO1xyXG5cclxuICAgICAgdmFyIHByb3BzID0ge307XHJcbiAgICAgIHByb3BzW2luT3V0VHlwZV0gPSB2YWx1ZXMuc291cmNlIHx8ICcnO1xyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBtYXBwaW5nLCBwcm9wcyk7XHJcbiAgICB9LFxyXG4gICAgLy8gb25lIG9mIGJvdGggKHNvdXJjZSBvciBzb3VyY2VFeHByZXNzaW9uKSBtdXN0IGhhdmUgYSB2YWx1ZSB0byBtYWtlXHJcbiAgICAvLyB0aGUgY29uZmlndXJhdGlvbiBlYXNpZXIgYW5kIG1vcmUgdW5kZXJzdGFuZGFibGVcclxuICAgIC8vIGl0IGlzIG5vdCBlbmdpbmUgY29uZm9ybVxyXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgbWFwcGluZyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgdmFyIHZhbGlkYXRpb24gPSB7fTtcclxuICAgICAgaWYgKG1hcHBpbmcpIHtcclxuICAgICAgICBpZiAoIXZhbHVlcy5zb3VyY2UpIHtcclxuICAgICAgICAgIHZhbGlkYXRpb24uc291cmNlID1cclxuICAgICAgICAgIHZhbGlkYXRpb24uc291cmNlID0gdmFsdWVzLnNvdXJjZUxhYmVsID9cclxuICAgICAgICAgICAgdHJhbnNsYXRlKCdNYXBwaW5nIG11c3QgaGF2ZSBhIHt2YWx1ZX0nLCB7IHZhbHVlOiB2YWx1ZXMuc291cmNlTGFiZWwudG9Mb3dlckNhc2UoKSB9KSA6XHJcbiAgICAgICAgICAgIHRyYW5zbGF0ZSgnTWFwcGluZyBtdXN0IGhhdmUgYSB2YWx1ZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGluT3V0VHlwZSA9IGdldEluT3V0VHlwZShtYXBwaW5nKTtcclxuXHJcbiAgICAgICAgaWYgKFdISVRFU1BBQ0VfUkVHRVgudGVzdCh2YWx1ZXMuc291cmNlKSAmJiBpbk91dFR5cGUgIT09ICdzb3VyY2VFeHByZXNzaW9uJykge1xyXG4gICAgICAgICAgdmFsaWRhdGlvbi5zb3VyY2UgPSB0cmFuc2xhdGUoJ3tsYWJlbH0gbXVzdCBub3QgY29udGFpbiB3aGl0ZXNwYWNlJywgeyBsYWJlbDogdmFsdWVzLnNvdXJjZUxhYmVsIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHZhbGlkYXRpb247XHJcbiAgICB9LFxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZE1hcHBpbmcgPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuICFzZWxlY3RlZE1hcHBpbmcgfHwgKHNlbGVjdGVkTWFwcGluZyAmJiBzZWxlY3RlZE1hcHBpbmcudmFyaWFibGVzKTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG5cclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ3ZhcmlhYmxlTWFwcGluZy10YXJnZXQnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVGFyZ2V0JyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAndGFyZ2V0JyxcclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRhcmdldDogKGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpIHx8IHt9KS50YXJnZXRcclxuICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YWx1ZXMudGFyZ2V0ID0gdmFsdWVzLnRhcmdldCB8fCB1bmRlZmluZWQ7XHJcbiAgICAgIHZhciBtYXBwaW5nID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgbWFwcGluZywgdmFsdWVzKTtcclxuICAgIH0sXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBtYXBwaW5nID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICB2YXIgdmFsaWRhdGlvbiA9IHt9O1xyXG4gICAgICBpZiAobWFwcGluZykge1xyXG4gICAgICAgIHZhciBtYXBwaW5nVHlwZSA9IGdldEluT3V0VHlwZShtYXBwaW5nKTtcclxuXHJcbiAgICAgICAgaWYgKCF2YWx1ZXMudGFyZ2V0ICYmIG1hcHBpbmdUeXBlICE9PSAndmFyaWFibGVzJykge1xyXG4gICAgICAgICAgdmFsaWRhdGlvbi50YXJnZXQgPSB0cmFuc2xhdGUoJ01hcHBpbmcgbXVzdCBoYXZlIGEgdGFyZ2V0Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmFsdWVzLnRhcmdldFxyXG4gICAgICAgICAgJiYgV0hJVEVTUEFDRV9SRUdFWC50ZXN0KHZhbHVlcy50YXJnZXQpXHJcbiAgICAgICAgICAmJiBtYXBwaW5nVHlwZSAhPT0gJ3ZhcmlhYmxlcycpIHtcclxuICAgICAgICAgIHZhbGlkYXRpb24udGFyZ2V0ID0gdHJhbnNsYXRlKCdUYXJnZXQgbXVzdCBub3QgY29udGFpbiB3aGl0ZXNwYWNlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdmFsaWRhdGlvbjtcclxuICAgIH0sXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIHNlbGVjdGVkTWFwcGluZyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gIXNlbGVjdGVkTWFwcGluZyB8fCAoc2VsZWN0ZWRNYXBwaW5nICYmIHNlbGVjdGVkTWFwcGluZy52YXJpYWJsZXMpO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkuY2hlY2tib3goe1xyXG4gICAgaWQ6ICd2YXJpYWJsZU1hcHBpbmctbG9jYWwnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTG9jYWwnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdsb2NhbCcsXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBsb2NhbDogKGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpIHx8IHt9KS5sb2NhbFxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhbHVlcy5sb2NhbCA9IHZhbHVlcy5sb2NhbCB8fCBmYWxzZTtcclxuICAgICAgdmFyIG1hcHBpbmcgPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBtYXBwaW5nLCB2YWx1ZXMpO1xyXG4gICAgfSxcclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWlzU2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXHJcbiAgICBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIGlmICghYm8pIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgfHwgaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBiby5nZXQoJ3Byb2Nlc3NSZWYnKSkge1xyXG4gICAgdmFyIHZlcnNpb25UYWdFbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgICBpZDogJ3ZlcnNpb25UYWcnLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdWZXJzaW9uIFRhZycpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5OiAndmVyc2lvblRhZydcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGluIHBhcnRpY2lwYW50cyB3ZSBoYXZlIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBzZXQgYW5kIGdldFxyXG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcclxuICAgICAgdmVyc2lvblRhZ0VudHJ5LmdldCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgcHJvY2Vzc0JvID0gYm8uZ2V0KCdwcm9jZXNzUmVmJyk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB2ZXJzaW9uVGFnOiBwcm9jZXNzQm8uZ2V0KCdhY3Rpdml0aTp2ZXJzaW9uVGFnJylcclxuICAgICAgICB9O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgdmVyc2lvblRhZ0VudHJ5LnNldCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICAgIHZhciBwcm9jZXNzQm8gPSBiby5nZXQoJ3Byb2Nlc3NSZWYnKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBwcm9jZXNzQm8sIHtcclxuICAgICAgICAgICdhY3Rpdml0aTp2ZXJzaW9uVGFnJzogdmFsdWVzLnZlcnNpb25UYWcgfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKHZlcnNpb25UYWdFbnRyeSk7XHJcblxyXG4gIH1cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ2xvZGFzaC9hc3NpZ24nKTtcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xyXG5cclxudmFyIGFzeW5jQ2FwYWJsZUhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9Bc3luY0NhcGFibGVIZWxwZXInKSxcclxuICAgIGV2ZW50RGVmaW5pdGlvbkhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FdmVudERlZmluaXRpb25IZWxwZXInKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbmZ1bmN0aW9uIGlzQXN5bmNCZWZvcmUoYm8pIHtcclxuICByZXR1cm4gYXN5bmNDYXBhYmxlSGVscGVyLmlzQXN5bmNCZWZvcmUoYm8pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FzeW5jQWZ0ZXIoYm8pIHtcclxuICByZXR1cm4gYXN5bmNDYXBhYmxlSGVscGVyLmlzQXN5bmNBZnRlcihibyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzRXhjbHVzaXZlKGJvKSB7XHJcbiAgcmV0dXJuIGFzeW5jQ2FwYWJsZUhlbHBlci5pc0V4Y2x1c2l2ZShibyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGJvLCBlbGVtZW50KSB7XHJcbiAgcmV0dXJuIGFzeW5jQ2FwYWJsZUhlbHBlci5yZW1vdmVGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShibywgZWxlbWVudCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhblJlbW92ZUZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGVsZW1lbnQpIHtcclxuICByZXR1cm4gIWV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRUaW1lckV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBnZXRCdXNpbmVzc09iamVjdCA9IG9wdGlvbnMuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG4gIHZhciBpZFByZWZpeCA9IG9wdGlvbnMuaWRQcmVmaXggfHwgJycsXHJcbiAgICAgIGxhYmVsUHJlZml4ID0gb3B0aW9ucy5sYWJlbFByZWZpeCB8fCAnJztcclxuXHJcblxyXG4gIHZhciBhc3luY0JlZm9yZUVudHJ5ID0gZW50cnlGYWN0b3J5LmNoZWNrYm94KHtcclxuICAgIGlkOiBpZFByZWZpeCArICdhc3luY0JlZm9yZScsXHJcbiAgICBsYWJlbDogbGFiZWxQcmVmaXggKyB0cmFuc2xhdGUoJ0FzeW5jaHJvbm91cyBCZWZvcmUnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdhc3luY0JlZm9yZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGFzeW5jQmVmb3JlOiBpc0FzeW5jQmVmb3JlKGJvKVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgdmFyIGFzeW5jQmVmb3JlID0gISF2YWx1ZXMuYXN5bmNCZWZvcmU7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSB7XHJcbiAgICAgICAgJ2FjdGl2aXRpOmFzeW5jQmVmb3JlJzogYXN5bmNCZWZvcmUsXHJcbiAgICAgICAgJ2FjdGl2aXRpOmFzeW5jJzogZmFsc2VcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHZhciBjb21tYW5kcyA9IFtdO1xyXG4gICAgICBpZiAoIWlzQXN5bmNBZnRlcihibykgJiYgIWFzeW5jQmVmb3JlKSB7XHJcbiAgICAgICAgcHJvcHMgPSBhc3NpZ24oeyAnYWN0aXZpdGk6ZXhjbHVzaXZlJyA6IHRydWUgfSwgcHJvcHMpO1xyXG4gICAgICAgIGlmIChjYW5SZW1vdmVGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShlbGVtZW50KSkge1xyXG4gICAgICAgICAgY29tbWFuZHMucHVzaChyZW1vdmVGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShibywgZWxlbWVudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHByb3BzKSk7XHJcbiAgICAgIHJldHVybiBjb21tYW5kcztcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIHZhciBhc3luY0FmdGVyRW50cnkgPSBlbnRyeUZhY3RvcnkuY2hlY2tib3goe1xyXG4gICAgaWQ6IGlkUHJlZml4ICsgJ2FzeW5jQWZ0ZXInLFxyXG4gICAgbGFiZWw6IGxhYmVsUHJlZml4ICsgdHJhbnNsYXRlKCdBc3luY2hyb25vdXMgQWZ0ZXInKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdhc3luY0FmdGVyJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgYXN5bmNBZnRlcjogaXNBc3luY0FmdGVyKGJvKVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgdmFyIGFzeW5jQWZ0ZXIgPSAhIXZhbHVlcy5hc3luY0FmdGVyO1xyXG5cclxuICAgICAgdmFyIHByb3BzID0ge1xyXG4gICAgICAgICdhY3Rpdml0aTphc3luY0FmdGVyJzogYXN5bmNBZnRlclxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdmFyIGNvbW1hbmRzID0gW107XHJcbiAgICAgIGlmICghaXNBc3luY0JlZm9yZShibykgJiYgIWFzeW5jQWZ0ZXIpIHtcclxuICAgICAgICBwcm9wcyA9IGFzc2lnbih7ICdhY3Rpdml0aTpleGNsdXNpdmUnIDogdHJ1ZSB9LCBwcm9wcyk7XHJcbiAgICAgICAgaWYgKGNhblJlbW92ZUZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKHJlbW92ZUZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGJvLCBlbGVtZW50KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywgcHJvcHMpKTtcclxuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuXHJcbiAgdmFyIGV4Y2x1c2l2ZUVudHJ5ID0gZW50cnlGYWN0b3J5LmNoZWNrYm94KHtcclxuICAgIGlkOiBpZFByZWZpeCArICdleGNsdXNpdmUnLFxyXG4gICAgbGFiZWw6IGxhYmVsUHJlZml4ICsgdHJhbnNsYXRlKCdFeGNsdXNpdmUnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdleGNsdXNpdmUnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgcmV0dXJuIHsgZXhjbHVzaXZlOiBpc0V4Y2x1c2l2ZShibykgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHsgJ2FjdGl2aXRpOmV4Y2x1c2l2ZSc6ICEhdmFsdWVzLmV4Y2x1c2l2ZSB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4gYm8gJiYgIWlzQXN5bmNBZnRlcihibykgJiYgIWlzQXN5bmNCZWZvcmUoYm8pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gWyBhc3luY0JlZm9yZUVudHJ5LCBhc3luY0FmdGVyRW50cnksIGV4Y2x1c2l2ZUVudHJ5IF07XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXHJcbiAgICBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxyXG4gICAgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyksXHJcbiAgICBleHRlbnNpb25FbGVtZW50c0hlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FeHRlbnNpb25FbGVtZW50c0hlbHBlcicpO1xyXG5cclxuXHJcbnZhciByZXN1bHRWYXJpYWJsZSA9IHJlcXVpcmUoJy4vUmVzdWx0VmFyaWFibGUnKTtcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XHJcblxyXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XHJcblxyXG52YXIgYXR0cmlidXRlSW5mbyA9IHtcclxuICBicG1uOiB7XHJcbiAgICBlbGVtZW50OiAnY2FsbGVkRWxlbWVudCcsXHJcbiAgICBiaW5kaW5nOiAnYWN0aXZpdGk6Y2FsbGVkRWxlbWVudEJpbmRpbmcnLFxyXG4gICAgdmVyc2lvbjogJ2FjdGl2aXRpOmNhbGxlZEVsZW1lbnRWZXJzaW9uJyxcclxuICAgIHZlcnNpb25UYWc6ICdhY3Rpdml0aTpjYWxsZWRFbGVtZW50VmVyc2lvblRhZycsXHJcbiAgICB0ZW5hbnRJZDogJ2FjdGl2aXRpOmNhbGxlZEVsZW1lbnRUZW5hbnRJZCdcclxuICB9LFxyXG5cclxuICBjbW1uOiB7XHJcbiAgICBlbGVtZW50OiAnYWN0aXZpdGk6Y2FzZVJlZicsXHJcbiAgICBiaW5kaW5nOiAnYWN0aXZpdGk6Y2FzZUJpbmRpbmcnLFxyXG4gICAgdmVyc2lvbjogJ2FjdGl2aXRpOmNhc2VWZXJzaW9uJyxcclxuICAgIHRlbmFudElkOiAnYWN0aXZpdGk6Y2FzZVRlbmFudElkJ1xyXG4gIH0sXHJcblxyXG4gIGRtbjoge1xyXG4gICAgZWxlbWVudDogJ2FjdGl2aXRpOmRlY2lzaW9uUmVmJyxcclxuICAgIGJpbmRpbmc6ICdhY3Rpdml0aTpkZWNpc2lvblJlZkJpbmRpbmcnLFxyXG4gICAgdmVyc2lvbjogJ2FjdGl2aXRpOmRlY2lzaW9uUmVmVmVyc2lvbicsXHJcbiAgICB2ZXJzaW9uVGFnOiAnYWN0aXZpdGk6ZGVjaXNpb25SZWZWZXJzaW9uVGFnJyxcclxuICAgIHRlbmFudElkOiAnYWN0aXZpdGk6ZGVjaXNpb25SZWZUZW5hbnRJZCdcclxuICB9XHJcbn07XHJcblxyXG52YXIgbWFwRGVjaXNpb25SZXN1bHRPcHRpb25zID0gW1xyXG4gIHtcclxuICAgIG5hbWU6ICdzaW5nbGVFbnRyeSAoVHlwZWRWYWx1ZSknLFxyXG4gICAgdmFsdWU6ICdzaW5nbGVFbnRyeSdcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6J3NpbmdsZVJlc3VsdCAoTWFwPFN0cmluZywgT2JqZWN0PiknLFxyXG4gICAgdmFsdWU6J3NpbmdsZVJlc3VsdCdcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6J2NvbGxlY3RFbnRyaWVzIChMaXN0PE9iamVjdD4pJyxcclxuICAgIHZhbHVlOidjb2xsZWN0RW50cmllcydcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6J3Jlc3VsdExpc3QgKExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4pJyxcclxuICAgIHZhbHVlOidyZXN1bHRMaXN0J1xyXG4gIH1cclxuXTtcclxuXHJcbnZhciBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ09wdGlvbnMgPSBbXHJcbiAge1xyXG4gICAgbmFtZTogJ3ZhcmlhYmxlTWFwcGluZ0NsYXNzJyxcclxuICAgIHZhbHVlOiAndmFyaWFibGVNYXBwaW5nQ2xhc3MnXHJcbiAgfSxcclxuICB7XHJcbiAgICBuYW1lOiAndmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uJyxcclxuICAgIHZhbHVlOiAndmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uJ1xyXG4gIH1cclxuXTtcclxuXHJcbmZ1bmN0aW9uIGdldEFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkoZWxlbWVudCkge1xyXG4gIHZhciBhY3Rpdml0aUluID0gW10sXHJcbiAgICAgIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHZhciBhY3Rpdml0aUluUGFyYW1zID0gZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sICdhY3Rpdml0aTpJbicpO1xyXG4gIGlmIChhY3Rpdml0aUluUGFyYW1zKSB7XHJcbiAgICBmb3JFYWNoKGFjdGl2aXRpSW5QYXJhbXMsIGZ1bmN0aW9uKHBhcmFtKSB7XHJcbiAgICAgIGlmIChwYXJhbS5idXNpbmVzc0tleSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgYWN0aXZpdGlJbi5wdXNoKHBhcmFtKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJldHVybiBhY3Rpdml0aUluO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRCdXNpbmVzc0tleShlbGVtZW50LCB0ZXh0LCBicG1uRmFjdG9yeSkge1xyXG4gIHZhciBjb21tYW5kcyA9IFtdO1xyXG5cclxuICB2YXIgYWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleSA9IGdldEFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkoZWxlbWVudCk7XHJcblxyXG4gIGlmIChhY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5Lmxlbmd0aCkge1xyXG4gICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleVswXSwge1xyXG4gICAgICBidXNpbmVzc0tleTogdGV4dFxyXG4gICAgfSkpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcclxuICAgICAgICBleHRlbnNpb25FbGVtZW50cyA9IGJvLmV4dGVuc2lvbkVsZW1lbnRzO1xyXG5cclxuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcclxuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7IHZhbHVlczogW10gfSwgYm8sIGJwbW5GYWN0b3J5KTtcclxuICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7IGV4dGVuc2lvbkVsZW1lbnRzOiBleHRlbnNpb25FbGVtZW50cyB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGFjdGl2aXRpSW4gPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICdhY3Rpdml0aTpJbicsXHJcbiAgICAgIHsgJ2J1c2luZXNzS2V5JzogdGV4dCB9LFxyXG4gICAgICBleHRlbnNpb25FbGVtZW50cyxcclxuICAgICAgYnBtbkZhY3RvcnlcclxuICAgICk7XHJcblxyXG4gICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIuYWRkQW5kUmVtb3ZlRWxlbWVudHNGcm9tTGlzdChcclxuICAgICAgZWxlbWVudCxcclxuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMsXHJcbiAgICAgICd2YWx1ZXMnLFxyXG4gICAgICAnZXh0ZW5zaW9uRWxlbWVudHMnLFxyXG4gICAgICBbIGFjdGl2aXRpSW4gXSxbXVxyXG4gICAgKSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY29tbWFuZHM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlbGV0ZUJ1c2luZXNzS2V5KGVsZW1lbnQpIHtcclxuICB2YXIgYWN0aXZpdGlJbkV4dGVuc2lvbnMgPSBnZXRBY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5KGVsZW1lbnQpO1xyXG4gIHZhciBjb21tYW5kcyA9IFtdO1xyXG4gIGZvckVhY2goYWN0aXZpdGlJbkV4dGVuc2lvbnMsIGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgIGNvbW1hbmRzLnB1c2goZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIucmVtb3ZlRW50cnkoZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksIGVsZW1lbnQsIGVsZW0pKTtcclxuICB9KTtcclxuICByZXR1cm4gY29tbWFuZHM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU3VwcG9ydGVkQ2FsbGFibGVUeXBlKHR5cGUpIHtcclxuICByZXR1cm4gWyAnYnBtbicsICdjbW1uJywgJ2RtbicgXS5pbmRleE9mKHR5cGUpICE9PSAtMTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBiaW5kaW5nT3B0aW9ucyA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogdHJhbnNsYXRlKCdsYXRlc3QnKSxcclxuICAgICAgdmFsdWU6ICdsYXRlc3QnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiB0cmFuc2xhdGUoJ2RlcGxveW1lbnQnKSxcclxuICAgICAgdmFsdWU6ICdkZXBsb3ltZW50J1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogdHJhbnNsYXRlKCd2ZXJzaW9uJyksXHJcbiAgICAgIHZhbHVlOiAndmVyc2lvbidcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IHRyYW5zbGF0ZSgndmVyc2lvblRhZycpLFxyXG4gICAgICB2YWx1ZTogJ3ZlcnNpb25UYWcnXHJcbiAgICB9XHJcbiAgXTtcclxuXHJcbiAgdmFyIGdldENhbGxhYmxlVHlwZSA9IG9wdGlvbnMuZ2V0Q2FsbGFibGVUeXBlO1xyXG5cclxuICB2YXIgZW50cmllcyA9IFtdO1xyXG5cclxuICBmdW5jdGlvbiBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgcHJvcCkge1xyXG4gICAgdmFyIHR5cGUgPSBnZXRDYWxsYWJsZVR5cGUoZWxlbWVudCk7XHJcbiAgICByZXR1cm4gKGF0dHJpYnV0ZUluZm9bdHlwZV0gfHwge30pW3Byb3BdO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0Q2FsbEFjdGl2aXR5QmluZGluZ1ZhbHVlKGVsZW1lbnQpIHtcclxuICAgIHZhciB0eXBlID0gZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpO1xyXG4gICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICB2YXIgYXR0ciA9IChhdHRyaWJ1dGVJbmZvW3R5cGVdIHx8IHt9KS5iaW5kaW5nO1xyXG4gICAgcmV0dXJuIGJvLmdldChhdHRyKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldERlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZShlbGVtZW50KSB7XHJcbiAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICB2YXIgYm9WYXJpYWJsZU1hcHBpbmdDbGFzcyA9IGJvLmdldCgnYWN0aXZpdGk6dmFyaWFibGVNYXBwaW5nQ2xhc3MnKSxcclxuICAgICAgICBib1ZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvbiA9IGJvLmdldCgnYWN0aXZpdGk6dmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uJyk7XHJcblxyXG4gICAgdmFyIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZSA9ICcnO1xyXG4gICAgaWYgKHR5cGVvZiBib1ZhcmlhYmxlTWFwcGluZ0NsYXNzICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUgPSAndmFyaWFibGVNYXBwaW5nQ2xhc3MnO1xyXG4gICAgfSBlbHNlXHJcblxyXG4gICAgaWYgKHR5cGVvZiBib1ZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlID0gJ3ZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvbic7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZTtcclxuICB9XHJcblxyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ2NhbGxhYmxlLWVsZW1lbnQtcmVmJyxcclxuICAgIGRhdGFWYWx1ZUxhYmVsOiAnY2FsbGFibGVFbGVtZW50TGFiZWwnLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2NhbGxhYmxlRWxlbWVudFJlZicsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBjYWxsYWJsZUVsZW1lbnRSZWY7XHJcblxyXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAnZWxlbWVudCcpO1xyXG4gICAgICBpZiAoYXR0cikge1xyXG4gICAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICAgIGNhbGxhYmxlRWxlbWVudFJlZiA9IGJvLmdldChhdHRyKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGxhYmVsID0gJyc7XHJcbiAgICAgIHZhciB0eXBlID0gZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpO1xyXG4gICAgICBpZiAodHlwZSA9PT0gJ2JwbW4nKSB7XHJcbiAgICAgICAgbGFiZWwgPSB0cmFuc2xhdGUoJ0NhbGxlZCBFbGVtZW50Jyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ2NtbW4nKSB7XHJcbiAgICAgICAgbGFiZWwgPSB0cmFuc2xhdGUoJ0Nhc2UgUmVmJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ2RtbicpIHtcclxuICAgICAgICBsYWJlbCA9IHRyYW5zbGF0ZSgnRGVjaXNpb24gUmVmJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgY2FsbGFibGVFbGVtZW50UmVmOiBjYWxsYWJsZUVsZW1lbnRSZWYsXHJcbiAgICAgICAgY2FsbGFibGVFbGVtZW50TGFiZWw6IGxhYmVsXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBuZXdDYWxsYWJsZUVsZW1lbnRSZWYgPSB2YWx1ZXMuY2FsbGFibGVFbGVtZW50UmVmO1xyXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAnZWxlbWVudCcpO1xyXG5cclxuICAgICAgdmFyIHByb3BzID0ge307XHJcbiAgICAgIHByb3BzW2F0dHJdID0gbmV3Q2FsbGFibGVFbGVtZW50UmVmIHx8ICcnO1xyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHByb3BzKTtcclxuICAgIH0sXHJcblxyXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgZWxlbWVudFJlZiA9IHZhbHVlcy5jYWxsYWJsZUVsZW1lbnRSZWY7XHJcbiAgICAgIHZhciB0eXBlID0gZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4gaXNTdXBwb3J0ZWRDYWxsYWJsZVR5cGUodHlwZSkgJiYgIWVsZW1lbnRSZWYgPyB7IGNhbGxhYmxlRWxlbWVudFJlZjogdHJhbnNsYXRlKCdNdXN0IHByb3ZpZGUgYSB2YWx1ZScpIH0gOiB7fTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhaXNTdXBwb3J0ZWRDYWxsYWJsZVR5cGUoZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpKTtcclxuICAgIH1cclxuXHJcbiAgfSkpO1xyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnNlbGVjdEJveCh7XHJcbiAgICBpZDogJ2NhbGxhYmxlLWJpbmRpbmcnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQmluZGluZycpLFxyXG4gICAgc2VsZWN0T3B0aW9uczogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICB2YXIgdHlwZSA9IGdldENhbGxhYmxlVHlwZShlbGVtZW50KTtcclxuICAgICAgdmFyIG9wdGlvbnM7XHJcblxyXG4gICAgICBpZiAodHlwZSA9PT0gJ2NtbW4nKSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IGJpbmRpbmdPcHRpb25zLmZpbHRlcihmdW5jdGlvbihiaW5kaW5nT3B0aW9uKSB7XHJcbiAgICAgICAgICByZXR1cm4gYmluZGluZ09wdGlvbi52YWx1ZSAhPT0gJ3ZlcnNpb25UYWcnO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9wdGlvbnMgPSBiaW5kaW5nT3B0aW9ucztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gb3B0aW9ucztcclxuICAgIH0sXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnY2FsbGFibGVCaW5kaW5nJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGNhbGxhYmxlQmluZGluZztcclxuXHJcbiAgICAgIHZhciBhdHRyID0gZ2V0QXR0cmlidXRlKGVsZW1lbnQsICdiaW5kaW5nJyk7XHJcbiAgICAgIGlmIChhdHRyKSB7XHJcbiAgICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgICAgY2FsbGFibGVCaW5kaW5nID0gYm8uZ2V0KGF0dHIpIHx8ICdsYXRlc3QnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGNhbGxhYmxlQmluZGluZzogY2FsbGFibGVCaW5kaW5nXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBiaW5kaW5nID0gdmFsdWVzLmNhbGxhYmxlQmluZGluZztcclxuICAgICAgdmFyIGF0dHIgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ2JpbmRpbmcnKSxcclxuICAgICAgICAgIGF0dHJWZXIgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ3ZlcnNpb24nKSxcclxuICAgICAgICAgIGF0dHJWZXJUYWcgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ3ZlcnNpb25UYWcnKTtcclxuXHJcbiAgICAgIHZhciBwcm9wcyA9IHt9O1xyXG4gICAgICBwcm9wc1thdHRyXSA9IGJpbmRpbmc7XHJcblxyXG4gICAgICAvLyBzZXQgdmVyc2lvbiBhbmQgdmVyc2lvblRhZyB2YWx1ZXMgYWx3YXlzIHRvIHVuZGVmaW5lZCB0byBkZWxldGUgdGhlIGV4aXN0aW5nIHZhbHVlXHJcbiAgICAgIHByb3BzW2F0dHJWZXJdID0gdW5kZWZpbmVkO1xyXG4gICAgICBwcm9wc1thdHRyVmVyVGFnXSA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBwcm9wcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWlzU3VwcG9ydGVkQ2FsbGFibGVUeXBlKGdldENhbGxhYmxlVHlwZShlbGVtZW50KSk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdjYWxsYWJsZS12ZXJzaW9uJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1ZlcnNpb24nKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdjYWxsYWJsZVZlcnNpb24nLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgY2FsbGFibGVWZXJzaW9uO1xyXG5cclxuICAgICAgdmFyIGF0dHIgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ3ZlcnNpb24nKTtcclxuICAgICAgaWYgKGF0dHIpIHtcclxuICAgICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgICBjYWxsYWJsZVZlcnNpb24gPSBiby5nZXQoYXR0cik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgY2FsbGFibGVWZXJzaW9uOiBjYWxsYWJsZVZlcnNpb25cclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIHZlcnNpb24gPSB2YWx1ZXMuY2FsbGFibGVWZXJzaW9uO1xyXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAndmVyc2lvbicpO1xyXG5cclxuICAgICAgdmFyIHByb3BzID0ge307XHJcbiAgICAgIHByb3BzW2F0dHJdID0gdmVyc2lvbiB8fCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcHJvcHMpO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciB2ZXJzaW9uID0gdmFsdWVzLmNhbGxhYmxlVmVyc2lvbjtcclxuXHJcbiAgICAgIHZhciB0eXBlID0gZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGlzU3VwcG9ydGVkQ2FsbGFibGVUeXBlKHR5cGUpICYmXHJcbiAgICAgICAgZ2V0Q2FsbEFjdGl2aXR5QmluZGluZ1ZhbHVlKGVsZW1lbnQpID09PSAndmVyc2lvbicgJiYgKFxyXG4gICAgICAgICAgIXZlcnNpb24gPyB7IGNhbGxhYmxlVmVyc2lvbjogdHJhbnNsYXRlKCdNdXN0IHByb3ZpZGUgYSB2YWx1ZScpIH0gOiB7fVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciB0eXBlID0gZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4gIWlzU3VwcG9ydGVkQ2FsbGFibGVUeXBlKHR5cGUpIHx8IGdldENhbGxBY3Rpdml0eUJpbmRpbmdWYWx1ZShlbGVtZW50KSAhPT0gJ3ZlcnNpb24nO1xyXG4gICAgfVxyXG5cclxuICB9KSk7XHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnY2FsbGFibGUtdmVyc2lvbi10YWcnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmVyc2lvbiBUYWcnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICd2ZXJzaW9uVGFnJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIHZlcnNpb25UYWc7XHJcblxyXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAndmVyc2lvblRhZycpO1xyXG5cclxuICAgICAgaWYgKGF0dHIpIHtcclxuICAgICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICAgICAgdmVyc2lvblRhZyA9IGJvLmdldChhdHRyKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB2ZXJzaW9uVGFnOiB2ZXJzaW9uVGFnXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciB2ZXJzaW9uVGFnID0gdmFsdWVzLnZlcnNpb25UYWc7XHJcblxyXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAndmVyc2lvblRhZycpO1xyXG5cclxuICAgICAgdmFyIHByb3BzID0ge307XHJcblxyXG4gICAgICBwcm9wc1thdHRyXSA9IHZlcnNpb25UYWcgfHwgdW5kZWZpbmVkO1xyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHByb3BzKTtcclxuICAgIH0sXHJcblxyXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgdmVyc2lvblRhZyA9IHZhbHVlcy52ZXJzaW9uVGFnO1xyXG5cclxuICAgICAgdmFyIHR5cGUgPSBnZXRDYWxsYWJsZVR5cGUoZWxlbWVudCk7XHJcblxyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGlzU3VwcG9ydGVkQ2FsbGFibGVUeXBlKHR5cGUpICYmXHJcbiAgICAgICAgZ2V0Q2FsbEFjdGl2aXR5QmluZGluZ1ZhbHVlKGVsZW1lbnQpID09PSAndmVyc2lvblRhZycgJiYgKFxyXG4gICAgICAgICAgIXZlcnNpb25UYWcgPyB7IHZlcnNpb25UYWc6IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKSB9IDoge31cclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgdHlwZSA9IGdldENhbGxhYmxlVHlwZShlbGVtZW50KTtcclxuXHJcbiAgICAgIHJldHVybiAhaXNTdXBwb3J0ZWRDYWxsYWJsZVR5cGUodHlwZSkgfHwgZ2V0Q2FsbEFjdGl2aXR5QmluZGluZ1ZhbHVlKGVsZW1lbnQpICE9PSAndmVyc2lvblRhZyc7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICd0ZW5hbnQtaWQnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVGVuYW50IElkJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAndGVuYW50SWQnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgdGVuYW50SWQ7XHJcblxyXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAndGVuYW50SWQnKTtcclxuICAgICAgaWYgKGF0dHIpIHtcclxuICAgICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgICB0ZW5hbnRJZCA9IGJvLmdldChhdHRyKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0ZW5hbnRJZDogdGVuYW50SWRcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIHRlbmFudElkID0gdmFsdWVzLnRlbmFudElkO1xyXG4gICAgICB2YXIgYXR0ciA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAndGVuYW50SWQnKTtcclxuXHJcbiAgICAgIHZhciBwcm9wcyA9IHt9O1xyXG4gICAgICBwcm9wc1thdHRyXSA9IHRlbmFudElkIHx8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBwcm9wcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgdHlwZSA9IGdldENhbGxhYmxlVHlwZShlbGVtZW50KTtcclxuICAgICAgcmV0dXJuICFpc1N1cHBvcnRlZENhbGxhYmxlVHlwZSh0eXBlKTtcclxuICAgIH1cclxuXHJcbiAgfSkpO1xyXG5cclxuICBpZiAoaXMoZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksICdicG1uOkNhbGxBY3Rpdml0eScpKSB7XHJcbiAgICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LmNoZWNrYm94KHtcclxuICAgICAgaWQ6ICdjYWxsYWJsZS1idXNpbmVzcy1rZXknLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdCdXNpbmVzcyBLZXknKSxcclxuICAgICAgbW9kZWxQcm9wZXJ0eTogJ2NhbGxhYmxlQnVzaW5lc3NLZXknLFxyXG5cclxuICAgICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgICAgdmFyIGFjdGl2aXRpSW4gPSBnZXRBY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5KGVsZW1lbnQpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgY2FsbGFibGVCdXNpbmVzc0tleTogISEoYWN0aXZpdGlJbiAmJiBhY3Rpdml0aUluLmxlbmd0aCA+IDApXHJcbiAgICAgICAgfTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlcy5jYWxsYWJsZUJ1c2luZXNzS2V5KSB7XHJcbiAgICAgICAgICByZXR1cm4gc2V0QnVzaW5lc3NLZXkoZWxlbWVudCwgJyN7ZXhlY3V0aW9uLnByb2Nlc3NCdXNpbmVzc0tleX0nLCBicG1uRmFjdG9yeSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBkZWxldGVCdXNpbmVzc0tleShlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnYnVzaW5lc3Mta2V5LWV4cHJlc3Npb24nLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQnVzaW5lc3MgS2V5IEV4cHJlc3Npb24nKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdidXNpbmVzc0tleScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBhY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5ID0gZ2V0QWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleShlbGVtZW50KTtcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgYnVzaW5lc3NLZXk6IChcclxuICAgICAgICAgIGFjdGl2aXRpSW5XaXRoQnVzaW5lc3NLZXkubGVuZ3RoID9cclxuICAgICAgICAgICAgYWN0aXZpdGlJbldpdGhCdXNpbmVzc0tleVswXS5nZXQoJ2FjdGl2aXRpOmJ1c2luZXNzS2V5JykgOlxyXG4gICAgICAgICAgICB1bmRlZmluZWRcclxuICAgICAgICApXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBidXNpbmVzc0tleSA9IHZhbHVlcy5idXNpbmVzc0tleTtcclxuXHJcbiAgICAgIHJldHVybiBzZXRCdXNpbmVzc0tleShlbGVtZW50LCBidXNpbmVzc0tleSwgYnBtbkZhY3RvcnkpO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBidXNpbmVzc0tleSA9IHZhbHVlcy5idXNpbmVzc0tleTtcclxuXHJcbiAgICAgIHJldHVybiBidXNpbmVzc0tleSA9PT0gJycgPyB7IGJ1c2luZXNzS2V5OiB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJykgfSA6IHt9O1xyXG4gICAgfSxcclxuXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuICFnZXRBY3Rpdml0aUluV2l0aEJ1c2luZXNzS2V5KGVsZW1lbnQpLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgfSkpO1xyXG5cclxuICBlbnRyaWVzID0gZW50cmllcy5jb25jYXQocmVzdWx0VmFyaWFibGUoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgIGlkOiAnZG1uLXJlc3VsdFZhcmlhYmxlJyxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0OiBnZXRCdXNpbmVzc09iamVjdCxcclxuICAgIGdldEltcGxlbWVudGF0aW9uVHlwZTogZ2V0Q2FsbGFibGVUeXBlLFxyXG4gICAgaGlkZVJlc3VsdFZhcmlhYmxlOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiBnZXRDYWxsYWJsZVR5cGUoZWxlbWVudCkgIT09ICdkbW4nO1xyXG4gICAgfVxyXG4gIH0sIHRyYW5zbGF0ZSkpO1xyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnNlbGVjdEJveCh7XHJcbiAgICBpZDogJ2Rtbi1tYXAtZGVjaXNpb24tcmVzdWx0JyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ01hcCBEZWNpc2lvbiBSZXN1bHQnKSxcclxuICAgIHNlbGVjdE9wdGlvbnM6IG1hcERlY2lzaW9uUmVzdWx0T3B0aW9ucyxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdtYXBEZWNpc2lvblJlc3VsdCcsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIG1hcERlY2lzaW9uUmVzdWx0OiBiby5nZXQoJ2FjdGl2aXRpOm1hcERlY2lzaW9uUmVzdWx0JykgfHwgJ3Jlc3VsdExpc3QnXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7XHJcbiAgICAgICAgJ2FjdGl2aXRpOm1hcERlY2lzaW9uUmVzdWx0JzogdmFsdWVzLm1hcERlY2lzaW9uUmVzdWx0IHx8ICdyZXN1bHRMaXN0J1xyXG4gICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICB2YXIgcmVzdWx0VmFyaWFibGUgPSBiby5nZXQoJ2FjdGl2aXRpOnJlc3VsdFZhcmlhYmxlJyk7XHJcbiAgICAgIHJldHVybiAhKGdldENhbGxhYmxlVHlwZShlbGVtZW50KSA9PT0gJ2RtbicgJiYgdHlwZW9mIHJlc3VsdFZhcmlhYmxlICE9PSAndW5kZWZpbmVkJyk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3Rvcnkuc2VsZWN0Qm94KHtcclxuICAgIGlkOiAnZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0RlbGVnYXRlIFZhcmlhYmxlIE1hcHBpbmcnKSxcclxuICAgIHNlbGVjdE9wdGlvbnM6IGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nT3B0aW9ucyxcclxuICAgIGVtcHR5UGFyYW1ldGVyOiB0cnVlLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2RlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlIDogZ2V0RGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlKGVsZW1lbnQpXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUgPSB2YWx1ZXMuZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlO1xyXG5cclxuICAgICAgdmFyIHByb3BzID0ge1xyXG4gICAgICAgICdhY3Rpdml0aTp2YXJpYWJsZU1hcHBpbmdDbGFzcycgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgJ2FjdGl2aXRpOnZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvbicgOiB1bmRlZmluZWRcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmIChkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUgPT09ICd2YXJpYWJsZU1hcHBpbmdDbGFzcycpIHtcclxuICAgICAgICBwcm9wc1snYWN0aXZpdGk6dmFyaWFibGVNYXBwaW5nQ2xhc3MnXSA9ICcnO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZSA9PT0gJ3ZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvbicpIHtcclxuICAgICAgICBwcm9wc1snYWN0aXZpdGk6dmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uJ10gPSAnJztcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHByb3BzKTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAoZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpICE9PSAnYnBtbicpO1xyXG4gICAgfVxyXG5cclxuICB9KSk7XHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmcnLFxyXG4gICAgZGF0YVZhbHVlTGFiZWw6ICdkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ0xhYmVsJyxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZycsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICAgICAgdmFyIGxhYmVsID0gJyc7XHJcbiAgICAgIHZhciBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZyA9IHVuZGVmaW5lZDtcclxuICAgICAgdmFyIHR5cGUgPSBnZXREZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUoZWxlbWVudCk7XHJcblxyXG4gICAgICBpZiAodHlwZSA9PT0gJ3ZhcmlhYmxlTWFwcGluZ0NsYXNzJykge1xyXG4gICAgICAgIGxhYmVsID0gdHJhbnNsYXRlKCdDbGFzcycpO1xyXG4gICAgICAgIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nID0gYm8uZ2V0KCdhY3Rpdml0aTp2YXJpYWJsZU1hcHBpbmdDbGFzcycpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICd2YXJpYWJsZU1hcHBpbmdEZWxlZ2F0ZUV4cHJlc3Npb24nKSB7XHJcbiAgICAgICAgbGFiZWwgPSB0cmFuc2xhdGUoJ0RlbGVnYXRlIEV4cHJlc3Npb24nKTtcclxuICAgICAgICBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZyA9IGJvLmdldCgnYWN0aXZpdGk6dmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmc6IGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nLFxyXG4gICAgICAgIGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nTGFiZWw6IGxhYmVsXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZyA9IHZhbHVlcy5kZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZztcclxuXHJcbiAgICAgIHZhciBhdHRyID0gJ2FjdGl2aXRpOicgKyBnZXREZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUoZWxlbWVudCk7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSB7fTtcclxuICAgICAgcHJvcHNbYXR0cl0gPSBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZyB8fCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcHJvcHMpO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBkZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZyA9IHZhbHVlcy5kZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZztcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBnZXRDYWxsYWJsZVR5cGUoZWxlbWVudCkgPT09ICdicG1uJyAmJiAoXHJcbiAgICAgICAgICAhZGVsZWdhdGVWYXJpYWJsZU1hcHBpbmcgPyB7IGRlbGVnYXRlVmFyaWFibGVNYXBwaW5nOiB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJykgfSA6IHt9XHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfSxcclxuXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuICEoZ2V0Q2FsbGFibGVUeXBlKGVsZW1lbnQpID09PSAnYnBtbicgJiYgZ2V0RGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlKGVsZW1lbnQpICE9PSAnJyk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbiAgcmV0dXJuIGVudHJpZXM7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xyXG5cclxudmFyIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSBvcHRpb25zLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxuICB2YXIgY2FuZGlkYXRlU3RhcnRlckdyb3Vwc0VudHJ5ID0gZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ2NhbmRpZGF0ZVN0YXJ0ZXJHcm91cHMnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ2FuZGlkYXRlIFN0YXJ0ZXIgR3JvdXBzJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnY2FuZGlkYXRlU3RhcnRlckdyb3VwcycsXHJcbiAgICBkZXNjcmlwdGlvbjogdHJhbnNsYXRlKCdTcGVjaWZ5IG1vcmUgdGhhbiBvbmUgZ3JvdXAgYXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdC4nKSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHZhciBjYW5kaWRhdGVTdGFydGVyR3JvdXBzID0gYm8uZ2V0KCdhY3Rpdml0aTpjYW5kaWRhdGVTdGFydGVyR3JvdXBzJyk7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGNhbmRpZGF0ZVN0YXJ0ZXJHcm91cHM6IGNhbmRpZGF0ZVN0YXJ0ZXJHcm91cHMgPyBjYW5kaWRhdGVTdGFydGVyR3JvdXBzIDogJydcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHtcclxuICAgICAgICAnYWN0aXZpdGk6Y2FuZGlkYXRlU3RhcnRlckdyb3Vwcyc6IHZhbHVlcy5jYW5kaWRhdGVTdGFydGVyR3JvdXBzIHx8IHVuZGVmaW5lZFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIHZhciBjYW5kaWRhdGVTdGFydGVyVXNlcnNFbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdjYW5kaWRhdGVTdGFydGVyVXNlcnMnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ2FuZGlkYXRlIFN0YXJ0ZXIgVXNlcnMnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdjYW5kaWRhdGVTdGFydGVyVXNlcnMnLFxyXG4gICAgZGVzY3JpcHRpb246IHRyYW5zbGF0ZSgnU3BlY2lmeSBtb3JlIHRoYW4gb25lIHVzZXIgYXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdC4nKSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHZhciBjYW5kaWRhdGVTdGFydGVyVXNlcnMgPSBiby5nZXQoJ2FjdGl2aXRpOmNhbmRpZGF0ZVN0YXJ0ZXJVc2VycycpO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBjYW5kaWRhdGVTdGFydGVyVXNlcnM6IGNhbmRpZGF0ZVN0YXJ0ZXJVc2VycyA/IGNhbmRpZGF0ZVN0YXJ0ZXJVc2VycyA6ICcnXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLCB7XHJcbiAgICAgICAgJ2FjdGl2aXRpOmNhbmRpZGF0ZVN0YXJ0ZXJVc2Vycyc6IHZhbHVlcy5jYW5kaWRhdGVTdGFydGVyVXNlcnMgfHwgdW5kZWZpbmVkXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIFtcclxuICAgIGNhbmRpZGF0ZVN0YXJ0ZXJHcm91cHNFbnRyeSxcclxuICAgIGNhbmRpZGF0ZVN0YXJ0ZXJVc2Vyc0VudHJ5XHJcbiAgXTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG52YXIgREVMRUdBVEVfVFlQRVMgPSBbXHJcbiAgJ2NsYXNzJyxcclxuICAnZXhwcmVzc2lvbicsXHJcbiAgJ2RlbGVnYXRlRXhwcmVzc2lvbidcclxuXTtcclxuXHJcbnZhciBQUk9QRVJUSUVTID0ge1xyXG4gIGNsYXNzOiAnYWN0aXZpdGk6Y2xhc3MnLFxyXG4gIGV4cHJlc3Npb246ICdhY3Rpdml0aTpleHByZXNzaW9uJyxcclxuICBkZWxlZ2F0ZUV4cHJlc3Npb246ICdhY3Rpdml0aTpkZWxlZ2F0ZUV4cHJlc3Npb24nXHJcbn07XHJcblxyXG5mdW5jdGlvbiBpc0RlbGVnYXRlKHR5cGUpIHtcclxuICByZXR1cm4gREVMRUdBVEVfVFlQRVMuaW5kZXhPZih0eXBlKSAhPT0gLTE7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEF0dHJpYnV0ZSh0eXBlKSB7XHJcbiAgcmV0dXJuIFBST1BFUlRJRVNbdHlwZV07XHJcbn1cclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGdldEltcGxlbWVudGF0aW9uVHlwZSA9IG9wdGlvbnMuZ2V0SW1wbGVtZW50YXRpb25UeXBlLFxyXG4gICAgICBnZXRCdXNpbmVzc09iamVjdCA9IG9wdGlvbnMuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG4gIGZ1bmN0aW9uIGdldERlbGVnYXRpb25MYWJlbCh0eXBlKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgIGNhc2UgJ2NsYXNzJzpcclxuICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnSmF2YSBDbGFzcycpO1xyXG4gICAgY2FzZSAnZXhwcmVzc2lvbic6XHJcbiAgICAgIHJldHVybiB0cmFuc2xhdGUoJ0V4cHJlc3Npb24nKTtcclxuICAgIGNhc2UgJ2RlbGVnYXRlRXhwcmVzc2lvbic6XHJcbiAgICAgIHJldHVybiB0cmFuc2xhdGUoJ0RlbGVnYXRlIEV4cHJlc3Npb24nKTtcclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhciBkZWxlZ2F0ZUVudHJ5ID0gZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ2RlbGVnYXRlJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1ZhbHVlJyksXHJcbiAgICBkYXRhVmFsdWVMYWJlbDogJ2RlbGVnYXRpb25MYWJlbCcsXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnZGVsZWdhdGUnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgdmFyIHR5cGUgPSBnZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCk7XHJcbiAgICAgIHZhciBhdHRyID0gZ2V0QXR0cmlidXRlKHR5cGUpO1xyXG4gICAgICB2YXIgbGFiZWwgPSBnZXREZWxlZ2F0aW9uTGFiZWwodHlwZSk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZGVsZWdhdGU6IGJvLmdldChhdHRyKSxcclxuICAgICAgICBkZWxlZ2F0aW9uTGFiZWw6IGxhYmVsXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICB2YXIgdHlwZSA9IGdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KTtcclxuICAgICAgdmFyIGF0dHIgPSBnZXRBdHRyaWJ1dGUodHlwZSk7XHJcbiAgICAgIHZhciBwcm9wID0ge307XHJcbiAgICAgIHByb3BbYXR0cl0gPSB2YWx1ZXMuZGVsZWdhdGUgfHwgJyc7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHByb3ApO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHJldHVybiBpc0RlbGVnYXRlKGdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KSkgJiYgIXZhbHVlcy5kZWxlZ2F0ZSA/IHsgZGVsZWdhdGU6IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKSB9IDoge307XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWlzRGVsZWdhdGUoZ2V0SW1wbGVtZW50YXRpb25UeXBlKGVsZW1lbnQpKTtcclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBbIGRlbGVnYXRlRW50cnkgXTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxyXG4gICAgZWxlbWVudFJlZmVyZW5jZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vcHJvdmlkZXIvYnBtbi9wYXJ0cy9pbXBsZW1lbnRhdGlvbi9FbGVtZW50UmVmZXJlbmNlUHJvcGVydHknKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oXHJcbiAgICBncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIGVycm9yRXZlbnREZWZpbml0aW9uLFxyXG4gICAgc2hvd0Vycm9yQ29kZVZhcmlhYmxlLCBzaG93RXJyb3JNZXNzYWdlVmFyaWFibGUsIHRyYW5zbGF0ZVxyXG4pIHtcclxuXHJcblxyXG4gIHZhciBnZXRWYWx1ZSA9IGZ1bmN0aW9uKG1vZGVsUHJvcGVydHkpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgIHZhciBtb2RlbFByb3BlcnR5VmFsdWUgPSBlcnJvckV2ZW50RGVmaW5pdGlvbi5nZXQoJ2FjdGl2aXRpOicgKyBtb2RlbFByb3BlcnR5KTtcclxuICAgICAgdmFyIHZhbHVlID0ge307XHJcblxyXG4gICAgICB2YWx1ZVttb2RlbFByb3BlcnR5XSA9IG1vZGVsUHJvcGVydHlWYWx1ZTtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICB2YXIgc2V0VmFsdWUgPSBmdW5jdGlvbihtb2RlbFByb3BlcnR5KSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciBwcm9wcyA9IHt9O1xyXG5cclxuICAgICAgcHJvcHNbJ2FjdGl2aXRpOicgKyBtb2RlbFByb3BlcnR5XSA9IHZhbHVlc1ttb2RlbFByb3BlcnR5XSB8fCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGVycm9yRXZlbnREZWZpbml0aW9uLCBwcm9wcyk7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG5cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoXHJcbiAgICBlbGVtZW50UmVmZXJlbmNlUHJvcGVydHkoZWxlbWVudCwgZXJyb3JFdmVudERlZmluaXRpb24sIGJwbW5GYWN0b3J5LCB7XHJcbiAgICAgIGlkOiAnZXJyb3ItZWxlbWVudC1tZXNzYWdlJyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXJyb3IgTWVzc2FnZScpLFxyXG4gICAgICByZWZlcmVuY2VQcm9wZXJ0eTogJ2Vycm9yUmVmJyxcclxuICAgICAgbW9kZWxQcm9wZXJ0eTogJ2Vycm9yTWVzc2FnZSdcclxuICAgIH0pXHJcbiAgKTtcclxuXHJcbiAgaWYgKHNob3dFcnJvckNvZGVWYXJpYWJsZSkge1xyXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgICBpZDogJ2Vycm9yQ29kZVZhcmlhYmxlJyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXJyb3IgQ29kZSBWYXJpYWJsZScpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5IDogJ2Vycm9yQ29kZVZhcmlhYmxlJyxcclxuXHJcbiAgICAgIGdldDogZ2V0VmFsdWUoJ2Vycm9yQ29kZVZhcmlhYmxlJyksXHJcbiAgICAgIHNldDogc2V0VmFsdWUoJ2Vycm9yQ29kZVZhcmlhYmxlJylcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGlmIChzaG93RXJyb3JNZXNzYWdlVmFyaWFibGUpIHtcclxuICAgIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgICAgaWQ6ICdlcnJvck1lc3NhZ2VWYXJpYWJsZScsXHJcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Vycm9yIE1lc3NhZ2UgVmFyaWFibGUnKSxcclxuICAgICAgbW9kZWxQcm9wZXJ0eTogJ2Vycm9yTWVzc2FnZVZhcmlhYmxlJyxcclxuXHJcbiAgICAgIGdldDogZ2V0VmFsdWUoJ2Vycm9yTWVzc2FnZVZhcmlhYmxlJyksXHJcbiAgICAgIHNldDogc2V0VmFsdWUoJ2Vycm9yTWVzc2FnZVZhcmlhYmxlJylcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxudmFyIGRvbVF1ZXJ5ID0gcmVxdWlyZSgnbWluLWRvbScpLnF1ZXJ5LFxyXG4gICAgZG9tQ2xvc2VzdCA9IHJlcXVpcmUoJ21pbi1kb20nKS5jbG9zZXN0LFxyXG4gICAgZG9taWZ5ID0gcmVxdWlyZSgnbWluLWRvbScpLmRvbWlmeSxcclxuICAgIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpO1xyXG5cclxudmFyIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpLFxyXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9VdGlscycpLFxyXG4gICAgZXNjYXBlSFRNTCA9IHV0aWxzLmVzY2FwZUhUTUw7XHJcblxyXG5mdW5jdGlvbiBnZXRTZWxlY3RCb3gobm9kZSwgaWQpIHtcclxuICB2YXIgY3VycmVudFRhYiA9IGRvbUNsb3Nlc3Qobm9kZSwgJ2Rpdi5icHAtcHJvcGVydGllcy10YWInKTtcclxuICB2YXIgcXVlcnkgPSAnc2VsZWN0W25hbWU9c2VsZWN0ZWRFeHRlbnNpb25FbGVtZW50XScgKyAoaWQgPyAnW2lkPWNhbS1leHRlbnNpb25FbGVtZW50cy0nICsgaWQgKyAnXScgOiAnJyk7XHJcbiAgcmV0dXJuIGRvbVF1ZXJ5KHF1ZXJ5LCBjdXJyZW50VGFiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U2VsZWN0ZWQobm9kZSwgaWQpIHtcclxuICB2YXIgc2VsZWN0Qm94ID0gZ2V0U2VsZWN0Qm94KG5vZGUsIGlkKTtcclxuICByZXR1cm4ge1xyXG4gICAgdmFsdWU6IChzZWxlY3RCb3ggfHwge30pLnZhbHVlLFxyXG4gICAgaWR4OiAoc2VsZWN0Qm94IHx8IHt9KS5zZWxlY3RlZEluZGV4XHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2VuZXJhdGVFbGVtZW50SWQocHJlZml4KSB7XHJcbiAgcHJlZml4ID0gcHJlZml4ICsgJ18nO1xyXG4gIHJldHVybiB1dGlscy5uZXh0SWQocHJlZml4KTtcclxufVxyXG5cclxudmFyIENSRUFURV9FWFRFTlNJT05fRUxFTUVOVF9BQ1RJT04gPSAnY3JlYXRlLWV4dGVuc2lvbi1lbGVtZW50JyxcclxuICAgIFJFTU9WRV9FWFRFTlNJT05fRUxFTUVOVF9BQ1RJT04gPSAncmVtb3ZlLWV4dGVuc2lvbi1lbGVtZW50JztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgaWQgPSBvcHRpb25zLmlkLFxyXG4gICAgICBwcmVmaXggPSBvcHRpb25zLnByZWZpeCB8fCAnZWxlbScsXHJcbiAgICAgIGxhYmVsID0gb3B0aW9ucy5sYWJlbCB8fCBpZCxcclxuICAgICAgaWRHZW5lcmF0aW9uID0gKG9wdGlvbnMuaWRHZW5lcmF0aW9uID09PSBmYWxzZSkgPyBvcHRpb25zLmlkR2VuZXJhdGlvbiA6IHRydWUsXHJcbiAgICAgIGJ1c2luZXNzT2JqZWN0ID0gb3B0aW9ucy5idXNpbmVzc09iamVjdCB8fCBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgdmFyIG1vZGVsUHJvcGVydHkgPSBvcHRpb25zLm1vZGVsUHJvcGVydHkgfHwgJ2lkJztcclxuXHJcbiAgdmFyIGdldEVsZW1lbnRzID0gb3B0aW9ucy5nZXRFeHRlbnNpb25FbGVtZW50cztcclxuXHJcbiAgdmFyIGNyZWF0ZUVsZW1lbnQgPSBvcHRpb25zLmNyZWF0ZUV4dGVuc2lvbkVsZW1lbnQsXHJcbiAgICAgIGNhbkNyZWF0ZSA9IHR5cGVvZiBjcmVhdGVFbGVtZW50ID09PSAnZnVuY3Rpb24nO1xyXG5cclxuICB2YXIgcmVtb3ZlRWxlbWVudCA9IG9wdGlvbnMucmVtb3ZlRXh0ZW5zaW9uRWxlbWVudCxcclxuICAgICAgY2FuUmVtb3ZlID0gdHlwZW9mIHJlbW92ZUVsZW1lbnQgPT09ICdmdW5jdGlvbic7XHJcblxyXG4gIHZhciBvblNlbGVjdGlvbkNoYW5nZSA9IG9wdGlvbnMub25TZWxlY3Rpb25DaGFuZ2U7XHJcblxyXG4gIHZhciBoaWRlRWxlbWVudHMgPSBvcHRpb25zLmhpZGVFeHRlbnNpb25FbGVtZW50cyxcclxuICAgICAgY2FuQmVIaWRkZW4gPSB0eXBlb2YgaGlkZUVsZW1lbnRzID09PSAnZnVuY3Rpb24nO1xyXG5cclxuICB2YXIgc2V0T3B0aW9uTGFiZWxWYWx1ZSA9IG9wdGlvbnMuc2V0T3B0aW9uTGFiZWxWYWx1ZTtcclxuXHJcbiAgdmFyIGRlZmF1bHRTaXplID0gb3B0aW9ucy5zaXplIHx8IDUsXHJcbiAgICAgIHJlc2l6YWJsZSA9IG9wdGlvbnMucmVzaXphYmxlO1xyXG5cclxuICB2YXIgcmVmZXJlbmNlID0gb3B0aW9ucy5yZWZlcmVuY2UgfHwgdW5kZWZpbmVkO1xyXG5cclxuICB2YXIgc2VsZWN0aW9uQ2hhbmdlZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGV2ZW50LCBzY29wZSkge1xyXG4gICAgaWYgKHR5cGVvZiBvblNlbGVjdGlvbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICByZXR1cm4gb25TZWxlY3Rpb25DaGFuZ2UoZWxlbWVudCwgbm9kZSwgZXZlbnQsIHNjb3BlKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICB2YXIgY3JlYXRlT3B0aW9uID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIHJldHVybiAnPG9wdGlvbiB2YWx1ZT1cIicgKyBlc2NhcGVIVE1MKHZhbHVlKSArICdcIiBkYXRhLXZhbHVlIGRhdGEtbmFtZT1cImV4dGVuc2lvbkVsZW1lbnRWYWx1ZVwiPicgKyBlc2NhcGVIVE1MKHZhbHVlKSArICc8L29wdGlvbj4nO1xyXG4gIH07XHJcblxyXG4gIHZhciBpbml0U2VsZWN0aW9uU2l6ZSA9IGZ1bmN0aW9uKHNlbGVjdEJveCwgb3B0aW9uc0xlbmd0aCkge1xyXG4gICAgaWYgKHJlc2l6YWJsZSkge1xyXG4gICAgICBzZWxlY3RCb3guc2l6ZSA9IG9wdGlvbnNMZW5ndGggPiBkZWZhdWx0U2l6ZSA/IG9wdGlvbnNMZW5ndGggOiBkZWZhdWx0U2l6ZTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgaWQ6IGlkLFxyXG4gICAgaHRtbDogJzxkaXYgY2xhc3M9XCJicHAtcm93IGJwcC1lbGVtZW50LWxpc3RcIiAnICtcclxuICAgICAgICAgICAgKGNhbkJlSGlkZGVuID8gJ2RhdGEtc2hvdz1cImhpZGVFbGVtZW50c1wiJyA6ICcnKSArICc+JyArXHJcbiAgICAgICAgICAgICc8bGFiZWwgZm9yPVwiY2FtLWV4dGVuc2lvbkVsZW1lbnRzLScgKyBlc2NhcGVIVE1MKGlkKSArICdcIj4nICsgZXNjYXBlSFRNTChsYWJlbCkgKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJicHAtZmllbGQtd3JhcHBlclwiPicgK1xyXG4gICAgICAgICAgICAgICc8c2VsZWN0IGlkPVwiY2FtLWV4dGVuc2lvbkVsZW1lbnRzLScgKyBlc2NhcGVIVE1MKGlkKSArICdcIicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgJ25hbWU9XCJzZWxlY3RlZEV4dGVuc2lvbkVsZW1lbnRcIiAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICdzaXplPVwiJyArIGVzY2FwZUhUTUwoZGVmYXVsdFNpemUpICsgJ1wiICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtbGlzdC1lbnRyeS1jb250YWluZXIgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1vbi1jaGFuZ2U9XCJzZWxlY3RFbGVtZW50XCI+JyArXHJcbiAgICAgICAgICAgICAgJzwvc2VsZWN0PicgK1xyXG4gICAgICAgICAgICAgIChjYW5DcmVhdGUgPyAnPGJ1dHRvbiBjbGFzcz1cImFkZFwiICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZD1cImNhbS1leHRlbnNpb25FbGVtZW50cy1jcmVhdGUtJyArIGVzY2FwZUhUTUwoaWQpICsgJ1wiICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWFjdGlvbj1cImNyZWF0ZUVsZW1lbnRcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4+Kzwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgOiAnJykgK1xyXG4gICAgICAgICAgICAgIChjYW5SZW1vdmUgPyAnPGJ1dHRvbiBjbGFzcz1cImNsZWFyXCIgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkPVwiY2FtLWV4dGVuc2lvbkVsZW1lbnRzLXJlbW92ZS0nICsgZXNjYXBlSFRNTChpZCkgKyAnXCIgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtYWN0aW9uPVwicmVtb3ZlRWxlbWVudFwiICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWRpc2FibGU9XCJkaXNhYmxlUmVtb3ZlXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuPi08L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nIDogJycpICtcclxuICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgJzwvZGl2PicsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBlbGVtZW50cyA9IGdldEVsZW1lbnRzKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICBmb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtKSB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goe1xyXG4gICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudFZhbHVlOiBlbGVtLmdldChtb2RlbFByb3BlcnR5KVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHZhciBzZWxlY3RCb3ggPSBnZXRTZWxlY3RCb3gobm9kZS5wYXJlbnROb2RlLCBpZCk7XHJcbiAgICAgIGluaXRTZWxlY3Rpb25TaXplKHNlbGVjdEJveCwgcmVzdWx0Lmxlbmd0aCk7XHJcblxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgYWN0aW9uID0gdGhpcy5fX2FjdGlvbjtcclxuICAgICAgZGVsZXRlIHRoaXMuX19hY3Rpb247XHJcblxyXG4gICAgICBidXNpbmVzc09iamVjdCA9IGJ1c2luZXNzT2JqZWN0IHx8IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICAgICAgdmFyIGJvID1cclxuICAgICAgICAocmVmZXJlbmNlICYmIGJ1c2luZXNzT2JqZWN0LmdldChyZWZlcmVuY2UpKVxyXG4gICAgICAgICAgPyBidXNpbmVzc09iamVjdC5nZXQocmVmZXJlbmNlKVxyXG4gICAgICAgICAgOiBidXNpbmVzc09iamVjdDtcclxuXHJcbiAgICAgIHZhciBleHRlbnNpb25FbGVtZW50cyA9IGJvLmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcclxuXHJcbiAgICAgIGlmIChhY3Rpb24uaWQgPT09IENSRUFURV9FWFRFTlNJT05fRUxFTUVOVF9BQ1RJT04pIHtcclxuICAgICAgICB2YXIgY29tbWFuZHMgPSBbXTtcclxuICAgICAgICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XHJcbiAgICAgICAgICBleHRlbnNpb25FbGVtZW50cyA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHsgdmFsdWVzOiBbXSB9LCBibywgYnBtbkZhY3RvcnkpO1xyXG4gICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHsgZXh0ZW5zaW9uRWxlbWVudHM6IGV4dGVuc2lvbkVsZW1lbnRzIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29tbWFuZHMucHVzaChjcmVhdGVFbGVtZW50KGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCBhY3Rpb24udmFsdWUsIG5vZGUpKTtcclxuICAgICAgICByZXR1cm4gY29tbWFuZHM7XHJcblxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGFjdGlvbi5pZCA9PT0gUkVNT1ZFX0VYVEVOU0lPTl9FTEVNRU5UX0FDVElPTikge1xyXG4gICAgICAgIHJldHVybiByZW1vdmVFbGVtZW50KGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCBhY3Rpb24udmFsdWUsIGFjdGlvbi5pZHgsIG5vZGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBjcmVhdGVMaXN0RW50cnlUZW1wbGF0ZTogZnVuY3Rpb24odmFsdWUsIGluZGV4LCBzZWxlY3RCb3gpIHtcclxuICAgICAgaW5pdFNlbGVjdGlvblNpemUoc2VsZWN0Qm94LCBzZWxlY3RCb3gub3B0aW9ucy5sZW5ndGggKyAxKTtcclxuICAgICAgcmV0dXJuIGNyZWF0ZU9wdGlvbih2YWx1ZS5leHRlbnNpb25FbGVtZW50VmFsdWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBkZXNlbGVjdDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgc2VsZWN0Qm94ID0gZ2V0U2VsZWN0Qm94KG5vZGUsIGlkKTtcclxuICAgICAgc2VsZWN0Qm94LnNlbGVjdGVkSW5kZXggPSAtMTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0U2VsZWN0ZWQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIGdldFNlbGVjdGVkKG5vZGUsIGlkKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q29udHJvbFZhbHVlOiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBvcHRpb24sIHByb3BlcnR5LCB2YWx1ZSwgaWR4KSB7XHJcbiAgICAgIG5vZGUudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgIGlmICghc2V0T3B0aW9uTGFiZWxWYWx1ZSkge1xyXG4gICAgICAgIG5vZGUudGV4dCA9IHZhbHVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNldE9wdGlvbkxhYmVsVmFsdWUoZWxlbWVudCwgbm9kZSwgb3B0aW9uLCBwcm9wZXJ0eSwgdmFsdWUsIGlkeCk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY3JlYXRlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICAvLyBjcmVhdGUgb3B0aW9uIHRlbXBsYXRlXHJcbiAgICAgIHZhciBnZW5lcmF0ZWRJZDtcclxuICAgICAgaWYgKGlkR2VuZXJhdGlvbikge1xyXG4gICAgICAgIGdlbmVyYXRlZElkID0gZ2VuZXJhdGVFbGVtZW50SWQocHJlZml4KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHNlbGVjdEJveCA9IGdldFNlbGVjdEJveChub2RlLCBpZCk7XHJcbiAgICAgIHZhciB0ZW1wbGF0ZSA9IGRvbWlmeShjcmVhdGVPcHRpb24oZ2VuZXJhdGVkSWQpKTtcclxuXHJcbiAgICAgIC8vIGFkZCBuZXcgZW1wdHkgb3B0aW9uIGFzIGxhc3QgY2hpbGQgZWxlbWVudFxyXG4gICAgICBzZWxlY3RCb3guYXBwZW5kQ2hpbGQodGVtcGxhdGUpO1xyXG5cclxuICAgICAgLy8gc2VsZWN0IGxhc3QgY2hpbGQgZWxlbWVudFxyXG4gICAgICBzZWxlY3RCb3gubGFzdENoaWxkLnNlbGVjdGVkID0gJ3NlbGVjdGVkJztcclxuICAgICAgc2VsZWN0aW9uQ2hhbmdlZChlbGVtZW50LCBub2RlKTtcclxuXHJcbiAgICAgIC8vIHVwZGF0ZSBzZWxlY3QgYm94IHNpemVcclxuICAgICAgaW5pdFNlbGVjdGlvblNpemUoc2VsZWN0Qm94LCBzZWxlY3RCb3gub3B0aW9ucy5sZW5ndGgpO1xyXG5cclxuICAgICAgdGhpcy5fX2FjdGlvbiA9IHtcclxuICAgICAgICBpZDogQ1JFQVRFX0VYVEVOU0lPTl9FTEVNRU5UX0FDVElPTixcclxuICAgICAgICB2YWx1ZTogZ2VuZXJhdGVkSWRcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW1vdmVFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3Rpb24gPSBnZXRTZWxlY3RlZChub2RlLCBpZCk7XHJcblxyXG4gICAgICB2YXIgc2VsZWN0Qm94ID0gZ2V0U2VsZWN0Qm94KG5vZGUsIGlkKTtcclxuICAgICAgc2VsZWN0Qm94LnJlbW92ZUNoaWxkKHNlbGVjdEJveC5vcHRpb25zW3NlbGVjdGlvbi5pZHhdKTtcclxuXHJcbiAgICAgIC8vIHVwZGF0ZSBzZWxlY3QgYm94IHNpemVcclxuICAgICAgaW5pdFNlbGVjdGlvblNpemUoc2VsZWN0Qm94LCBzZWxlY3RCb3gub3B0aW9ucy5sZW5ndGgpO1xyXG5cclxuICAgICAgdGhpcy5fX2FjdGlvbiA9IHtcclxuICAgICAgICBpZDogUkVNT1ZFX0VYVEVOU0lPTl9FTEVNRU5UX0FDVElPTixcclxuICAgICAgICB2YWx1ZTogc2VsZWN0aW9uLnZhbHVlLFxyXG4gICAgICAgIGlkeDogc2VsZWN0aW9uLmlkeFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGVFbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCwgZW50cnlOb2RlLCBub2RlLCBzY29wZU5vZGUpIHtcclxuICAgICAgcmV0dXJuICFoaWRlRWxlbWVudHMoZWxlbWVudCwgZW50cnlOb2RlLCBub2RlLCBzY29wZU5vZGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBkaXNhYmxlUmVtb3ZlOiBmdW5jdGlvbihlbGVtZW50LCBlbnRyeU5vZGUsIG5vZGUsIHNjb3BlTm9kZSkge1xyXG4gICAgICByZXR1cm4gKGdldFNlbGVjdGVkKGVudHJ5Tm9kZSwgaWQpIHx8IHt9KS5pZHggPCAwO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZWxlY3RFbGVtZW50OiBzZWxlY3Rpb25DaGFuZ2VkXHJcbiAgfTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBnZXRJbXBsZW1lbnRhdGlvblR5cGUgPSBvcHRpb25zLmdldEltcGxlbWVudGF0aW9uVHlwZSxcclxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3QgPSBvcHRpb25zLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxuICBmdW5jdGlvbiBpc0V4dGVybmFsKGVsZW1lbnQpIHtcclxuICAgIHJldHVybiBnZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCkgPT09ICdleHRlcm5hbCc7XHJcbiAgfVxyXG5cclxuICB2YXIgdG9waWNFbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdleHRlcm5hbFRvcGljJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1RvcGljJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnZXh0ZXJuYWxUb3BpYycsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4geyBleHRlcm5hbFRvcGljOiBiby5nZXQoJ2FjdGl2aXRpOnRvcGljJykgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHtcclxuICAgICAgICAnYWN0aXZpdGk6dG9waWMnOiB2YWx1ZXMuZXh0ZXJuYWxUb3BpY1xyXG4gICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICByZXR1cm4gaXNFeHRlcm5hbChlbGVtZW50KSAmJiAhdmFsdWVzLmV4dGVybmFsVG9waWMgPyB7IGV4dGVybmFsVG9waWM6IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKSB9IDoge307XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gIWlzRXh0ZXJuYWwoZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gWyB0b3BpY0VudHJ5IF07XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gb3B0aW9ucy5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbiAgdmFyIGV4dGVybmFsVGFza1ByaW9yaXR5RW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnZXh0ZXJuYWxUYXNrUHJpb3JpdHknLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVGFzayBQcmlvcml0eScpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ3Rhc2tQcmlvcml0eScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRhc2tQcmlvcml0eTogYm8uZ2V0KCdhY3Rpdml0aTp0YXNrUHJpb3JpdHknKVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywge1xyXG4gICAgICAgICdhY3Rpdml0aTp0YXNrUHJpb3JpdHknOiB2YWx1ZXMudGFza1ByaW9yaXR5IHx8IHVuZGVmaW5lZFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBbIGV4dGVybmFsVGFza1ByaW9yaXR5RW50cnkgXTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBleHRlbnNpb25FbGVtZW50c0hlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FeHRlbnNpb25FbGVtZW50c0hlbHBlcicpLFxyXG4gICAgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9VdGlscycpO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XHJcblxyXG52YXIgZXh0ZW5zaW9uRWxlbWVudHNFbnRyeSA9IHJlcXVpcmUoJy4vRXh0ZW5zaW9uRWxlbWVudHMnKTtcclxuXHJcbnZhciBNb2RlbFV0aWwgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSBNb2RlbFV0aWwuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgYXNzaWduID0gcmVxdWlyZSgnbG9kYXNoL2Fzc2lnbicpO1xyXG5cclxuXHJcbnZhciBERUZBVUxUX1BST1BTID0ge1xyXG4gICdzdHJpbmdWYWx1ZSc6IHVuZGVmaW5lZCxcclxuICAnc3RyaW5nJzogdW5kZWZpbmVkLFxyXG4gICdleHByZXNzaW9uJzogdW5kZWZpbmVkXHJcbn07XHJcblxyXG52YXIgQUNUSVZJVElfRklFTERfRVhURU5TSU9OX0VMRU1FTlQgPSAnYWN0aXZpdGk6RmllbGQnO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgdHJhbnNsYXRlLCBvcHRpb25zKSB7XHJcblxyXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICB2YXIgaW5zaWRlTGlzdGVuZXIgPSAhIW9wdGlvbnMuaW5zaWRlTGlzdGVuZXIsXHJcbiAgICAgIGlkUHJlZml4ID0gb3B0aW9ucy5pZFByZWZpeCB8fCAnJyxcclxuICAgICAgZ2V0U2VsZWN0ZWRMaXN0ZW5lciA9IG9wdGlvbnMuZ2V0U2VsZWN0ZWRMaXN0ZW5lcixcclxuICAgICAgYnVzaW5lc3NPYmplY3QgPSBvcHRpb25zLmJ1c2luZXNzT2JqZWN0IHx8IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICB2YXIgZW50cmllcyA9IFtdO1xyXG5cclxuICB2YXIgaXNTZWxlY3RlZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgIHJldHVybiBnZXRTZWxlY3RlZEZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG4gIH07XHJcblxyXG4gIGZ1bmN0aW9uIGdldFNlbGVjdGVkRmllbGQoZWxlbWVudCwgbm9kZSkge1xyXG4gICAgdmFyIHNlbGVjdGVkID0gZmllbGRFbnRyeS5nZXRTZWxlY3RlZChlbGVtZW50LCBub2RlLnBhcmVudE5vZGUpO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZC5pZHggPT09IC0xKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZmllbGRzID0gZ2V0QWN0aXZpdGlGaWVsZHMoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgcmV0dXJuIGZpZWxkc1tzZWxlY3RlZC5pZHhdO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0QWN0aXZpdGlGaWVsZHMoZWxlbWVudCwgbm9kZSkge1xyXG4gICAgaWYgKCFpbnNpZGVMaXN0ZW5lcikge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGJ1c2luZXNzT2JqZWN0ICYmXHJcbiAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYnVzaW5lc3NPYmplY3QsIEFDVElWSVRJX0ZJRUxEX0VYVEVOU0lPTl9FTEVNRU5UKVxyXG4gICAgICApIHx8IFtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdldEFjdGl2aXRpTGlzdGVuZXJGaWVsZHMoZWxlbWVudCwgbm9kZSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXRBY3Rpdml0aUxpc3RlbmVyRmllbGRzKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgIHZhciBzZWxlY3RlZExpc3RlbmVyID0gZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKTtcclxuICAgIHJldHVybiBzZWxlY3RlZExpc3RlbmVyICYmIHNlbGVjdGVkTGlzdGVuZXIuZmllbGRzIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0RmllbGRUeXBlKGJvKSB7XHJcbiAgICB2YXIgZmllbGRUeXBlID0gJ3N0cmluZyc7XHJcblxyXG4gICAgdmFyIGV4cHJlc3Npb25WYWx1ZSA9IGJvICYmIGJvLmV4cHJlc3Npb247XHJcbiAgICB2YXIgc3RyaW5nVmFsdWUgPSBibyAmJiAoYm8uc3RyaW5nIHx8IGJvLnN0cmluZ1ZhbHVlKTtcclxuXHJcbiAgICBpZiAodHlwZW9mIHN0cmluZ1ZhbHVlICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICBmaWVsZFR5cGUgPSAnc3RyaW5nJztcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cHJlc3Npb25WYWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgZmllbGRUeXBlID0gJ2V4cHJlc3Npb24nO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaWVsZFR5cGU7XHJcbiAgfVxyXG5cclxuICB2YXIgc2V0T3B0aW9uTGFiZWxWYWx1ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIG9wdGlvbiwgcHJvcGVydHksIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIGFjdGl2aXRpRmllbGRzID0gZ2V0QWN0aXZpdGlGaWVsZHMoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHZhciBmaWVsZCA9IGFjdGl2aXRpRmllbGRzW2lkeF07XHJcblxyXG4gICAgICB2YWx1ZSA9IChmaWVsZC5uYW1lKSA/IGZpZWxkLm5hbWUgOiAnPGVtcHR5Pic7XHJcblxyXG4gICAgICB2YXIgbGFiZWwgPSBpZHggKyAnIDogJyArIHZhbHVlO1xyXG5cclxuICAgICAgb3B0aW9uLnRleHQgPSBsYWJlbDtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgdmFyIG5ld0VsZW1lbnQgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgdmFsdWUsIG5vZGUpIHtcclxuXHJcbiAgICAgIHZhciBwcm9wcyA9IHtcclxuICAgICAgICBuYW1lOiAnJyxcclxuICAgICAgICBzdHJpbmc6ICcnXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB2YXIgbmV3RmllbGRFbGVtO1xyXG5cclxuICAgICAgaWYgKCFpbnNpZGVMaXN0ZW5lcikge1xyXG5cclxuICAgICAgICBuZXdGaWVsZEVsZW0gPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoQUNUSVZJVElfRklFTERfRVhURU5TSU9OX0VMRU1FTlQsIHByb3BzLCBleHRlbnNpb25FbGVtZW50cywgYnBtbkZhY3RvcnkpO1xyXG4gICAgICAgIHJldHVybiBjbWRIZWxwZXIuYWRkRWxlbWVudHNUb2xpc3QoZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsICd2YWx1ZXMnLCBbIG5ld0ZpZWxkRWxlbSBdKTtcclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIHZhciBzZWxlY3RlZExpc3RlbmVyID0gZ2V0U2VsZWN0ZWRMaXN0ZW5lcihlbGVtZW50LCBub2RlKTtcclxuICAgICAgICBuZXdGaWVsZEVsZW0gPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoQUNUSVZJVElfRklFTERfRVhURU5TSU9OX0VMRU1FTlQsIHByb3BzLCBzZWxlY3RlZExpc3RlbmVyLCBicG1uRmFjdG9yeSk7XHJcbiAgICAgICAgcmV0dXJuIGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChlbGVtZW50LCBzZWxlY3RlZExpc3RlbmVyLCAnZmllbGRzJywgWyBuZXdGaWVsZEVsZW0gXSk7XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICB2YXIgcmVtb3ZlRWxlbWVudCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCB2YWx1ZSwgaWR4LCBub2RlKSB7XHJcbiAgICAgIHZhciBhY3Rpdml0aUZpZWxkcz0gZ2V0QWN0aXZpdGlGaWVsZHMoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHZhciBmaWVsZCA9IGFjdGl2aXRpRmllbGRzW2lkeF07XHJcbiAgICAgIGlmIChmaWVsZCkge1xyXG4gICAgICAgIGlmICghaW5zaWRlTGlzdGVuZXIpIHtcclxuICAgICAgICAgIHJldHVybiBleHRlbnNpb25FbGVtZW50c0hlbHBlci5yZW1vdmVFbnRyeShidXNpbmVzc09iamVjdCwgZWxlbWVudCwgZmllbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc2VsZWN0ZWRMaXN0ZW5lciA9IGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIGNtZEhlbHBlci5yZW1vdmVFbGVtZW50c0Zyb21MaXN0KGVsZW1lbnQsIHNlbGVjdGVkTGlzdGVuZXIsICdmaWVsZHMnLCBudWxsLCBbIGZpZWxkIF0pO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG5cclxuICB2YXIgZmllbGRFbnRyeSA9IGV4dGVuc2lvbkVsZW1lbnRzRW50cnkoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgIGlkIDogaWRQcmVmaXggKyAnZmllbGRzJyxcclxuICAgIGxhYmVsIDogdHJhbnNsYXRlKCdGaWVsZHMnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdmaWVsZE5hbWUnLFxyXG4gICAgaWRHZW5lcmF0aW9uOiAnZmFsc2UnLFxyXG5cclxuICAgIGJ1c2luZXNzT2JqZWN0OiBidXNpbmVzc09iamVjdCxcclxuXHJcbiAgICBjcmVhdGVFeHRlbnNpb25FbGVtZW50OiBuZXdFbGVtZW50KCksXHJcbiAgICByZW1vdmVFeHRlbnNpb25FbGVtZW50OiByZW1vdmVFbGVtZW50KCksXHJcblxyXG4gICAgZ2V0RXh0ZW5zaW9uRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIGdldEFjdGl2aXRpRmllbGRzKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRPcHRpb25MYWJlbFZhbHVlOiBzZXRPcHRpb25MYWJlbFZhbHVlKClcclxuXHJcbiAgfSk7XHJcbiAgZW50cmllcy5wdXNoKGZpZWxkRW50cnkpO1xyXG5cclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS52YWxpZGF0aW9uQXdhcmVUZXh0RmllbGQoe1xyXG4gICAgaWQ6IGlkUHJlZml4ICsgJ2ZpZWxkLW5hbWUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTmFtZScpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2ZpZWxkTmFtZScsXHJcblxyXG4gICAgZ2V0UHJvcGVydHk6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIChnZXRTZWxlY3RlZEZpZWxkKGVsZW1lbnQsIG5vZGUpIHx8IHt9KS5uYW1lO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRQcm9wZXJ0eTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZpZWxkID0gZ2V0U2VsZWN0ZWRGaWVsZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBzZWxlY3RlZEZpZWxkLCB7IG5hbWUgOiB2YWx1ZXMuZmllbGROYW1lIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICB2YXIgdmFsaWRhdGlvbiA9IHt9O1xyXG4gICAgICBpZiAoYm8pIHtcclxuICAgICAgICB2YXIgbmFtZVZhbHVlID0gdmFsdWVzLmZpZWxkTmFtZTtcclxuXHJcbiAgICAgICAgaWYgKG5hbWVWYWx1ZSkge1xyXG4gICAgICAgICAgaWYgKHV0aWxzLmNvbnRhaW5zU3BhY2UobmFtZVZhbHVlKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmZpZWxkTmFtZSA9IHRyYW5zbGF0ZSgnTmFtZSBtdXN0IG5vdCBjb250YWluIHNwYWNlcycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YWxpZGF0aW9uLmZpZWxkTmFtZSA9IHRyYW5zbGF0ZSgnUGFyYW1ldGVyIG11c3QgaGF2ZSBhIG5hbWUnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB2YWxpZGF0aW9uO1xyXG4gICAgfSxcclxuXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuICFpc1NlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfVxyXG5cclxuICB9KSk7XHJcblxyXG4gIHZhciBmaWVsZFR5cGVPcHRpb25zID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiB0cmFuc2xhdGUoJ1N0cmluZycpLFxyXG4gICAgICB2YWx1ZTogJ3N0cmluZydcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IHRyYW5zbGF0ZSgnRXhwcmVzc2lvbicpLFxyXG4gICAgICB2YWx1ZTogJ2V4cHJlc3Npb24nXHJcbiAgICB9XHJcbiAgXTtcclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5zZWxlY3RCb3goe1xyXG4gICAgaWQ6IGlkUHJlZml4ICsgJ2ZpZWxkLXR5cGUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVHlwZScpLFxyXG4gICAgc2VsZWN0T3B0aW9uczogZmllbGRUeXBlT3B0aW9ucyxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdmaWVsZFR5cGUnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZEZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgdmFyIGZpZWxkVHlwZSA9IGdldEZpZWxkVHlwZShibyk7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGZpZWxkVHlwZTogZmllbGRUeXBlXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBwcm9wcyA9IGFzc2lnbih7fSwgREVGQVVMVF9QUk9QUyk7XHJcblxyXG4gICAgICB2YXIgZmllbGRUeXBlID0gdmFsdWVzLmZpZWxkVHlwZTtcclxuXHJcbiAgICAgIGlmIChmaWVsZFR5cGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcHJvcHMuc3RyaW5nID0gJyc7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoZmllbGRUeXBlID09PSAnZXhwcmVzc2lvbicpIHtcclxuICAgICAgICBwcm9wcy5leHByZXNzaW9uID0gJyc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgZ2V0U2VsZWN0ZWRGaWVsZChlbGVtZW50LCBub2RlKSwgcHJvcHMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuICFpc1NlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfVxyXG5cclxuICB9KSk7XHJcblxyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRCb3goe1xyXG4gICAgaWQ6IGlkUHJlZml4ICsgJ2ZpZWxkLXZhbHVlJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1ZhbHVlJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnZmllbGRWYWx1ZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkRmllbGQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHZhciBmaWVsZFR5cGUgPSBnZXRGaWVsZFR5cGUoYm8pO1xyXG5cclxuICAgICAgdmFyIGZpZWxkVmFsdWU7XHJcblxyXG4gICAgICBpZiAoZmllbGRUeXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGZpZWxkVmFsdWUgPSBibyAmJiAoYm8uc3RyaW5nIHx8IGJvLnN0cmluZ1ZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChmaWVsZFR5cGUgPT09ICdleHByZXNzaW9uJykge1xyXG4gICAgICAgIGZpZWxkVmFsdWUgPSBibyAmJiBiby5leHByZXNzaW9uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGZpZWxkVmFsdWU6IGZpZWxkVmFsdWVcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWRGaWVsZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIGZpZWxkVHlwZSA9IGdldEZpZWxkVHlwZShibyk7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSBhc3NpZ24oe30sIERFRkFVTFRfUFJPUFMpO1xyXG5cclxuICAgICAgdmFyIGZpZWxkVmFsdWUgPSB2YWx1ZXMuZmllbGRWYWx1ZSB8fCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICBpZiAoZmllbGRUeXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHByb3BzLnN0cmluZyA9IGZpZWxkVmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoZmllbGRUeXBlID09PSAnZXhwcmVzc2lvbicpIHtcclxuICAgICAgICBwcm9wcy5leHByZXNzaW9uID0gZmllbGRWYWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywgcHJvcHMpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZEZpZWxkKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgdmFyIHZhbGlkYXRpb24gPSB7fTtcclxuICAgICAgaWYgKGJvKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZXMuZmllbGRWYWx1ZSkge1xyXG4gICAgICAgICAgdmFsaWRhdGlvbi5maWVsZFZhbHVlID0gdHJhbnNsYXRlKCdNdXN0IHByb3ZpZGUgYSB2YWx1ZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHZhbGlkYXRpb247XHJcbiAgICB9LFxyXG5cclxuICAgIHNob3c6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIGlzU2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbiAgcmV0dXJuIGVudHJpZXM7XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gb3B0aW9ucy5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbiAgdmFyIGhpc3RvcnlUaW1lVG9MaXZlRW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnaGlzdG9yeVRpbWVUb0xpdmUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSGlzdG9yeSBUaW1lIFRvIExpdmUnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdoaXN0b3J5VGltZVRvTGl2ZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICB2YXIgaGlzdG9yeVRpbWVUb0xpdmUgPSBiby5nZXQoJ2FjdGl2aXRpOmhpc3RvcnlUaW1lVG9MaXZlJyk7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGhpc3RvcnlUaW1lVG9MaXZlOiBoaXN0b3J5VGltZVRvTGl2ZSA/IGhpc3RvcnlUaW1lVG9MaXZlIDogJydcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHtcclxuICAgICAgICAnYWN0aXZpdGk6aGlzdG9yeVRpbWVUb0xpdmUnOiB2YWx1ZXMuaGlzdG9yeVRpbWVUb0xpdmUgfHwgdW5kZWZpbmVkXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIFsgaGlzdG9yeVRpbWVUb0xpdmVFbnRyeSBdO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKSxcclxuICAgIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0V4dGVuc2lvbkVsZW1lbnRzSGVscGVyJyksXHJcbiAgICBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKTtcclxuXHJcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XHJcbnZhciBtYXAgPSByZXF1aXJlKCdsb2Rhc2gvbWFwJyk7XHJcblxyXG52YXIgREVGQVVMVF9ERUxFR0FURV9QUk9QUyA9IFsgJ2NsYXNzJywgJ2V4cHJlc3Npb24nLCAnZGVsZWdhdGVFeHByZXNzaW9uJyBdO1xyXG5cclxudmFyIERFTEVHQVRFX1BST1BTID0ge1xyXG4gICdhY3Rpdml0aTpjbGFzcyc6IHVuZGVmaW5lZCxcclxuICAnYWN0aXZpdGk6ZXhwcmVzc2lvbic6IHVuZGVmaW5lZCxcclxuICAnYWN0aXZpdGk6ZGVsZWdhdGVFeHByZXNzaW9uJzogdW5kZWZpbmVkLFxyXG4gICdhY3Rpdml0aTpyZXN1bHRWYXJpYWJsZSc6IHVuZGVmaW5lZFxyXG59O1xyXG5cclxudmFyIERNTl9DQVBBQkxFX1BST1BTID0ge1xyXG4gICdhY3Rpdml0aTpkZWNpc2lvblJlZic6IHVuZGVmaW5lZCxcclxuICAnYWN0aXZpdGk6ZGVjaXNpb25SZWZCaW5kaW5nJzogJ2xhdGVzdCcsXHJcbiAgJ2FjdGl2aXRpOmRlY2lzaW9uUmVmVmVyc2lvbic6IHVuZGVmaW5lZCxcclxuICAnYWN0aXZpdGk6bWFwRGVjaXNpb25SZXN1bHQnOiAncmVzdWx0TGlzdCcsXHJcbiAgJ2FjdGl2aXRpOmRlY2lzaW9uUmVmVGVuYW50SWQnOiB1bmRlZmluZWRcclxufTtcclxuXHJcblxyXG52YXIgRVhURVJOQUxfQ0FQQUJMRV9QUk9QUyA9IHtcclxuICAnYWN0aXZpdGk6dHlwZSc6IHVuZGVmaW5lZCxcclxuICAnYWN0aXZpdGk6dG9waWMnOiB1bmRlZmluZWRcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgREVGQVVMVF9PUFRJT05TID0gW1xyXG4gICAgeyB2YWx1ZTogJ2NsYXNzJywgbmFtZTogdHJhbnNsYXRlKCdKYXZhIENsYXNzJykgfSxcclxuICAgIHsgdmFsdWU6ICdleHByZXNzaW9uJywgbmFtZTogdHJhbnNsYXRlKCdFeHByZXNzaW9uJykgfSxcclxuICAgIHsgdmFsdWU6ICdkZWxlZ2F0ZUV4cHJlc3Npb24nLCBuYW1lOiB0cmFuc2xhdGUoJ0RlbGVnYXRlIEV4cHJlc3Npb24nKSB9XHJcbiAgXTtcclxuXHJcbiAgdmFyIERNTl9PUFRJT04gPSBbXHJcbiAgICB7IHZhbHVlOiAnZG1uJywgbmFtZTogdHJhbnNsYXRlKCdETU4nKSB9XHJcbiAgXTtcclxuXHJcbiAgdmFyIEVYVEVSTkFMX09QVElPTiA9IFtcclxuICAgIHsgdmFsdWU6ICdleHRlcm5hbCcsIG5hbWU6IHRyYW5zbGF0ZSgnRXh0ZXJuYWwnKSB9XHJcbiAgXTtcclxuXHJcbiAgdmFyIENPTk5FQ1RPUl9PUFRJT04gPSBbXHJcbiAgICB7IHZhbHVlOiAnY29ubmVjdG9yJywgbmFtZTogdHJhbnNsYXRlKCdDb25uZWN0b3InKSB9XHJcbiAgXTtcclxuXHJcbiAgdmFyIFNDUklQVF9PUFRJT04gPSBbXHJcbiAgICB7IHZhbHVlOiAnc2NyaXB0JywgbmFtZTogdHJhbnNsYXRlKCdTY3JpcHQnKSB9XHJcbiAgXTtcclxuXHJcbiAgdmFyIGdldFR5cGUgPSBvcHRpb25zLmdldEltcGxlbWVudGF0aW9uVHlwZSxcclxuICAgICAgZ2V0QnVzaW5lc3NPYmplY3QgPSBvcHRpb25zLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxuICB2YXIgaGFzRG1uU3VwcG9ydCA9IG9wdGlvbnMuaGFzRG1uU3VwcG9ydCxcclxuICAgICAgaGFzRXh0ZXJuYWxTdXBwb3J0ID0gb3B0aW9ucy5oYXNFeHRlcm5hbFN1cHBvcnQsXHJcbiAgICAgIGhhc1NlcnZpY2VUYXNrTGlrZVN1cHBvcnQgPSBvcHRpb25zLmhhc1NlcnZpY2VUYXNrTGlrZVN1cHBvcnQsXHJcbiAgICAgIGhhc1NjcmlwdFN1cHBvcnQgPSBvcHRpb25zLmhhc1NjcmlwdFN1cHBvcnQ7XHJcblxyXG4gIHZhciBlbnRyaWVzID0gW107XHJcblxyXG4gIHZhciBzZWxlY3RPcHRpb25zID0gREVGQVVMVF9PUFRJT05TLmNvbmNhdChbXSk7XHJcblxyXG4gIGlmIChoYXNEbW5TdXBwb3J0KSB7XHJcbiAgICBzZWxlY3RPcHRpb25zID0gc2VsZWN0T3B0aW9ucy5jb25jYXQoRE1OX09QVElPTik7XHJcbiAgfVxyXG5cclxuICBpZiAoaGFzRXh0ZXJuYWxTdXBwb3J0KSB7XHJcbiAgICBzZWxlY3RPcHRpb25zID0gc2VsZWN0T3B0aW9ucy5jb25jYXQoRVhURVJOQUxfT1BUSU9OKTtcclxuICB9XHJcblxyXG4gIGlmIChoYXNTZXJ2aWNlVGFza0xpa2VTdXBwb3J0KSB7XHJcbiAgICBzZWxlY3RPcHRpb25zID0gc2VsZWN0T3B0aW9ucy5jb25jYXQoQ09OTkVDVE9SX09QVElPTik7XHJcbiAgfVxyXG5cclxuICBpZiAoaGFzU2NyaXB0U3VwcG9ydCkge1xyXG4gICAgc2VsZWN0T3B0aW9ucyA9IHNlbGVjdE9wdGlvbnMuY29uY2F0KFNDUklQVF9PUFRJT04pO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0T3B0aW9ucy5wdXNoKHsgdmFsdWU6ICcnIH0pO1xyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnNlbGVjdEJveCh7XHJcbiAgICBpZCA6ICdpbXBsZW1lbnRhdGlvbicsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdJbXBsZW1lbnRhdGlvbicpLFxyXG4gICAgc2VsZWN0T3B0aW9uczogc2VsZWN0T3B0aW9ucyxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdpbXBsVHlwZScsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaW1wbFR5cGU6IGdldFR5cGUoZWxlbWVudCkgfHwgJydcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHZhciBvbGRUeXBlID0gZ2V0VHlwZShlbGVtZW50KTtcclxuICAgICAgdmFyIG5ld1R5cGUgPSB2YWx1ZXMuaW1wbFR5cGU7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSBhc3NpZ24oe30sIERFTEVHQVRFX1BST1BTKTtcclxuXHJcbiAgICAgIGlmIChERUZBVUxUX0RFTEVHQVRFX1BST1BTLmluZGV4T2YobmV3VHlwZSkgIT09IC0xKSB7XHJcblxyXG4gICAgICAgIHZhciBuZXdWYWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmIChERUZBVUxUX0RFTEVHQVRFX1BST1BTLmluZGV4T2Yob2xkVHlwZSkgIT09IC0xKSB7XHJcbiAgICAgICAgICBuZXdWYWx1ZSA9IGJvLmdldCgnYWN0aXZpdGk6JyArIG9sZFR5cGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwcm9wc1snYWN0aXZpdGk6JyArIG5ld1R5cGVdID0gbmV3VmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChoYXNEbW5TdXBwb3J0KSB7XHJcbiAgICAgICAgcHJvcHMgPSBhc3NpZ24ocHJvcHMsIERNTl9DQVBBQkxFX1BST1BTKTtcclxuICAgICAgICBpZiAobmV3VHlwZSA9PT0gJ2RtbicpIHtcclxuICAgICAgICAgIHByb3BzWydhY3Rpdml0aTpkZWNpc2lvblJlZiddID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaGFzRXh0ZXJuYWxTdXBwb3J0KSB7XHJcbiAgICAgICAgcHJvcHMgPSBhc3NpZ24ocHJvcHMsIEVYVEVSTkFMX0NBUEFCTEVfUFJPUFMpO1xyXG4gICAgICAgIGlmIChuZXdUeXBlID09PSAnZXh0ZXJuYWwnKSB7XHJcbiAgICAgICAgICBwcm9wc1snYWN0aXZpdGk6dHlwZSddID0gJ2V4dGVybmFsJztcclxuICAgICAgICAgIHByb3BzWydhY3Rpdml0aTp0b3BpYyddID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaGFzU2NyaXB0U3VwcG9ydCkge1xyXG4gICAgICAgIHByb3BzWydhY3Rpdml0aTpzY3JpcHQnXSA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgaWYgKG5ld1R5cGUgPT09ICdzY3JpcHQnKSB7XHJcbiAgICAgICAgICBwcm9wc1snYWN0aXZpdGk6c2NyaXB0J10gPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2FjdGl2aXRpOlNjcmlwdCcsIHt9LCBibywgYnBtbkZhY3RvcnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGNvbW1hbmRzID0gW107XHJcbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLCBwcm9wcykpO1xyXG5cclxuICAgICAgaWYgKGhhc1NlcnZpY2VUYXNrTGlrZVN1cHBvcnQpIHtcclxuICAgICAgICB2YXIgY29ubmVjdG9ycyA9IGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyLmdldEV4dGVuc2lvbkVsZW1lbnRzKGJvLCAnYWN0aXZpdGk6Q29ubmVjdG9yJyk7XHJcbiAgICAgICAgY29tbWFuZHMucHVzaChtYXAoY29ubmVjdG9ycywgZnVuY3Rpb24oY29ubmVjdG9yKSB7XHJcbiAgICAgICAgICByZXR1cm4gZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIucmVtb3ZlRW50cnkoYm8sIGVsZW1lbnQsIGNvbm5lY3Rvcik7XHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICBpZiAobmV3VHlwZSA9PT0gJ2Nvbm5lY3RvcicpIHtcclxuICAgICAgICAgIHZhciBleHRlbnNpb25FbGVtZW50cyA9IGJvLmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcclxuICAgICAgICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcclxuICAgICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7IHZhbHVlczogW10gfSwgYm8sIGJwbW5GYWN0b3J5KTtcclxuICAgICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHsgZXh0ZW5zaW9uRWxlbWVudHM6IGV4dGVuc2lvbkVsZW1lbnRzIH0pKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHZhciBjb25uZWN0b3IgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoJ2FjdGl2aXRpOkNvbm5lY3RvcicsIHt9LCBleHRlbnNpb25FbGVtZW50cywgYnBtbkZhY3RvcnkpO1xyXG4gICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIuYWRkQW5kUmVtb3ZlRWxlbWVudHNGcm9tTGlzdChcclxuICAgICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHMsXHJcbiAgICAgICAgICAgICd2YWx1ZXMnLFxyXG4gICAgICAgICAgICAnZXh0ZW5zaW9uRWxlbWVudHMnLFxyXG4gICAgICAgICAgICBbIGNvbm5lY3RvciBdLFxyXG4gICAgICAgICAgICBbXVxyXG4gICAgICAgICAgKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gY29tbWFuZHM7XHJcblxyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcbiAgcmV0dXJuIGVudHJpZXM7XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxudmFyIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpLFxyXG4gICAgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKSxcclxuICAgIGlucHV0T3V0cHV0SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0lucHV0T3V0cHV0SGVscGVyJyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG52YXIgZXh0ZW5zaW9uRWxlbWVudHNFbnRyeSA9IHJlcXVpcmUoJy4vRXh0ZW5zaW9uRWxlbWVudHMnKTtcclxuXHJcblxyXG5mdW5jdGlvbiBnZXRJbnB1dE91dHB1dChlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpIHtcclxuICByZXR1cm4gaW5wdXRPdXRwdXRIZWxwZXIuZ2V0SW5wdXRPdXRwdXQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q29ubmVjdG9yKGVsZW1lbnQpIHtcclxuICByZXR1cm4gaW5wdXRPdXRwdXRIZWxwZXIuZ2V0Q29ubmVjdG9yKGVsZW1lbnQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRJbnB1dFBhcmFtZXRlcnMoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSB7XHJcbiAgcmV0dXJuIGlucHV0T3V0cHV0SGVscGVyLmdldElucHV0UGFyYW1ldGVycyhlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRPdXRwdXRQYXJhbWV0ZXJzKGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcikge1xyXG4gIHJldHVybiBpbnB1dE91dHB1dEhlbHBlci5nZXRPdXRwdXRQYXJhbWV0ZXJzKGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldElucHV0UGFyYW1ldGVyKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvciwgaWR4KSB7XHJcbiAgcmV0dXJuIGlucHV0T3V0cHV0SGVscGVyLmdldElucHV0UGFyYW1ldGVyKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvciwgaWR4KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0T3V0cHV0UGFyYW1ldGVyKGVsZW1lbnQsIGluc2lkZUNvbm5lY3RvciwgaWR4KSB7XHJcbiAgcmV0dXJuIGlucHV0T3V0cHV0SGVscGVyLmdldE91dHB1dFBhcmFtZXRlcihlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IsIGlkeCk7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIHBhcmVudCwgZmFjdG9yeSwgcHJvcGVydGllcykge1xyXG4gIHJldHVybiBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQodHlwZSwgcHJvcGVydGllcywgcGFyZW50LCBmYWN0b3J5KTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlSW5wdXRPdXRwdXQocGFyZW50LCBicG1uRmFjdG9yeSwgcHJvcGVydGllcykge1xyXG4gIHJldHVybiBjcmVhdGVFbGVtZW50KCdhY3Rpdml0aTpJbnB1dE91dHB1dCcsIHBhcmVudCwgYnBtbkZhY3RvcnksIHByb3BlcnRpZXMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVQYXJhbWV0ZXIodHlwZSwgcGFyZW50LCBicG1uRmFjdG9yeSwgcHJvcGVydGllcykge1xyXG4gIHJldHVybiBjcmVhdGVFbGVtZW50KHR5cGUsIHBhcmVudCwgYnBtbkZhY3RvcnksIHByb3BlcnRpZXMpO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gZW5zdXJlSW5wdXRPdXRwdXRTdXBwb3J0ZWQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSB7XHJcbiAgcmV0dXJuIGlucHV0T3V0cHV0SGVscGVyLmlzSW5wdXRPdXRwdXRTdXBwb3J0ZWQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZW5zdXJlT3V0cGFyYW1ldGVyU3VwcG9ydGVkKGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcikge1xyXG4gIHJldHVybiBpbnB1dE91dHB1dEhlbHBlci5hcmVPdXRwdXRQYXJhbWV0ZXJzU3VwcG9ydGVkKGVsZW1lbnQsIGluc2lkZUNvbm5lY3Rvcik7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgVFlQRV9MQUJFTCA9IHtcclxuICAgICdhY3Rpdml0aTpNYXAnOiB0cmFuc2xhdGUoJ01hcCcpLFxyXG4gICAgJ2FjdGl2aXRpOkxpc3QnOiB0cmFuc2xhdGUoJ0xpc3QnKSxcclxuICAgICdhY3Rpdml0aTpTY3JpcHQnOiB0cmFuc2xhdGUoJ1NjcmlwdCcpXHJcbiAgfTtcclxuXHJcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gIHZhciBpbnNpZGVDb25uZWN0b3IgPSAhIW9wdGlvbnMuaW5zaWRlQ29ubmVjdG9yLFxyXG4gICAgICBpZFByZWZpeCA9IG9wdGlvbnMuaWRQcmVmaXggfHwgJyc7XHJcblxyXG4gIHZhciBnZXRTZWxlY3RlZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgIHZhciBzZWxlY3Rpb24gPSAoaW5wdXRFbnRyeSAmJiBpbnB1dEVudHJ5LmdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpKSB8fCB7IGlkeDogLTEgfTtcclxuXHJcbiAgICB2YXIgcGFyYW1ldGVyID0gZ2V0SW5wdXRQYXJhbWV0ZXIoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yLCBzZWxlY3Rpb24uaWR4KTtcclxuICAgIGlmICghcGFyYW1ldGVyICYmIG91dHB1dEVudHJ5KSB7XHJcbiAgICAgIHNlbGVjdGlvbiA9IG91dHB1dEVudHJ5LmdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICBwYXJhbWV0ZXIgPSBnZXRPdXRwdXRQYXJhbWV0ZXIoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yLCBzZWxlY3Rpb24uaWR4KTtcclxuICAgIH1cclxuICAgIHJldHVybiBwYXJhbWV0ZXI7XHJcbiAgfTtcclxuXHJcbiAgdmFyIHJlc3VsdCA9IHtcclxuICAgIGdldFNlbGVjdGVkUGFyYW1ldGVyOiBnZXRTZWxlY3RlZFxyXG4gIH07XHJcblxyXG4gIHZhciBlbnRyaWVzID0gcmVzdWx0LmVudHJpZXMgPSBbXTtcclxuXHJcbiAgaWYgKCFlbnN1cmVJbnB1dE91dHB1dFN1cHBvcnRlZChlbGVtZW50KSkge1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHZhciBuZXdFbGVtZW50ID0gZnVuY3Rpb24odHlwZSwgcHJvcCwgZmFjdG9yeSkge1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgdmFsdWUpIHtcclxuICAgICAgdmFyIGNvbW1hbmRzID0gW107XHJcblxyXG4gICAgICB2YXIgaW5wdXRPdXRwdXQgPSBnZXRJbnB1dE91dHB1dChlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpO1xyXG4gICAgICBpZiAoIWlucHV0T3V0cHV0KSB7XHJcbiAgICAgICAgdmFyIHBhcmVudCA9ICFpbnNpZGVDb25uZWN0b3IgPyBleHRlbnNpb25FbGVtZW50cyA6IGdldENvbm5lY3RvcihlbGVtZW50KTtcclxuICAgICAgICBpbnB1dE91dHB1dCA9IGNyZWF0ZUlucHV0T3V0cHV0KHBhcmVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgICAgICAgIGlucHV0UGFyYW1ldGVyczogW10sXHJcbiAgICAgICAgICBvdXRwdXRQYXJhbWV0ZXJzOiBbXVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoIWluc2lkZUNvbm5lY3Rvcikge1xyXG4gICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIuYWRkQW5kUmVtb3ZlRWxlbWVudHNGcm9tTGlzdChcclxuICAgICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHMsXHJcbiAgICAgICAgICAgICd2YWx1ZXMnLFxyXG4gICAgICAgICAgICAnZXh0ZW5zaW9uRWxlbWVudHMnLFxyXG4gICAgICAgICAgICBbIGlucHV0T3V0cHV0IF0sXHJcbiAgICAgICAgICAgIFtdXHJcbiAgICAgICAgICApKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgcGFyZW50LCB7IGlucHV0T3V0cHV0OiBpbnB1dE91dHB1dCB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgbmV3RWxlbSA9IGNyZWF0ZVBhcmFtZXRlcih0eXBlLCBpbnB1dE91dHB1dCwgYnBtbkZhY3RvcnksIHsgbmFtZTogdmFsdWUgfSk7XHJcbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLmFkZEVsZW1lbnRzVG9saXN0KGVsZW1lbnQsIGlucHV0T3V0cHV0LCBwcm9wLCBbIG5ld0VsZW0gXSkpO1xyXG5cclxuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICB2YXIgcmVtb3ZlRWxlbWVudCA9IGZ1bmN0aW9uKGdldHRlciwgcHJvcCwgb3RoZXJQcm9wKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIGlucHV0T3V0cHV0ID0gZ2V0SW5wdXRPdXRwdXQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKTtcclxuICAgICAgdmFyIHBhcmFtZXRlciA9IGdldHRlcihlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IsIGlkeCk7XHJcblxyXG4gICAgICB2YXIgY29tbWFuZHMgPSBbXTtcclxuICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIucmVtb3ZlRWxlbWVudHNGcm9tTGlzdChlbGVtZW50LCBpbnB1dE91dHB1dCwgcHJvcCwgbnVsbCwgWyBwYXJhbWV0ZXIgXSkpO1xyXG5cclxuICAgICAgdmFyIGZpcnN0TGVuZ3RoID0gaW5wdXRPdXRwdXQuZ2V0KHByb3ApLmxlbmd0aC0xO1xyXG4gICAgICB2YXIgc2Vjb25kTGVuZ3RoID0gKGlucHV0T3V0cHV0LmdldChvdGhlclByb3ApIHx8IFtdKS5sZW5ndGg7XHJcblxyXG4gICAgICBpZiAoIWZpcnN0TGVuZ3RoICYmICFzZWNvbmRMZW5ndGgpIHtcclxuXHJcbiAgICAgICAgaWYgKCFpbnNpZGVDb25uZWN0b3IpIHtcclxuICAgICAgICAgIGNvbW1hbmRzLnB1c2goZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIucmVtb3ZlRW50cnkoZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksIGVsZW1lbnQsIGlucHV0T3V0cHV0KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZhciBjb25uZWN0b3IgPSBnZXRDb25uZWN0b3IoZWxlbWVudCk7XHJcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBjb25uZWN0b3IsIHsgaW5wdXRPdXRwdXQ6IHVuZGVmaW5lZCB9KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICB2YXIgc2V0T3B0aW9uTGFiZWxWYWx1ZSA9IGZ1bmN0aW9uKGdldHRlcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIG9wdGlvbiwgcHJvcGVydHksIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIHBhcmFtZXRlciA9IGdldHRlcihlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IsIGlkeCk7XHJcblxyXG4gICAgICB2YXIgc3VmZml4ID0gJ1RleHQnO1xyXG5cclxuICAgICAgdmFyIGRlZmluaXRpb24gPSBwYXJhbWV0ZXIuZ2V0KCdkZWZpbml0aW9uJyk7XHJcbiAgICAgIGlmICh0eXBlb2YgZGVmaW5pdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICB2YXIgdHlwZSA9IGRlZmluaXRpb24uJHR5cGU7XHJcbiAgICAgICAgc3VmZml4ID0gVFlQRV9MQUJFTFt0eXBlXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgb3B0aW9uLnRleHQgPSAodmFsdWUgfHwgJycpICsgJyA6ICcgKyBzdWZmaXg7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG5cclxuICAvLyBpbnB1dCBwYXJhbWV0ZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICB2YXIgaW5wdXRFbnRyeSA9IGV4dGVuc2lvbkVsZW1lbnRzRW50cnkoZWxlbWVudCwgYnBtbkZhY3RvcnksIHtcclxuICAgIGlkOiBpZFByZWZpeCArICdpbnB1dHMnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSW5wdXQgUGFyYW1ldGVycycpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ25hbWUnLFxyXG4gICAgcHJlZml4OiAnSW5wdXQnLFxyXG4gICAgcmVzaXphYmxlOiB0cnVlLFxyXG5cclxuICAgIGNyZWF0ZUV4dGVuc2lvbkVsZW1lbnQ6IG5ld0VsZW1lbnQoJ2FjdGl2aXRpOklucHV0UGFyYW1ldGVyJywgJ2lucHV0UGFyYW1ldGVycycpLFxyXG4gICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudDogcmVtb3ZlRWxlbWVudChnZXRJbnB1dFBhcmFtZXRlciwgJ2lucHV0UGFyYW1ldGVycycsICdvdXRwdXRQYXJhbWV0ZXJzJyksXHJcblxyXG4gICAgZ2V0RXh0ZW5zaW9uRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuIGdldElucHV0UGFyYW1ldGVycyhlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpO1xyXG4gICAgfSxcclxuXHJcbiAgICBvblNlbGVjdGlvbkNoYW5nZTogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgZXZlbnQsIHNjb3BlKSB7XHJcbiAgICAgIG91dHB1dEVudHJ5ICYmIG91dHB1dEVudHJ5LmRlc2VsZWN0KGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRPcHRpb25MYWJlbFZhbHVlOiBzZXRPcHRpb25MYWJlbFZhbHVlKGdldElucHV0UGFyYW1ldGVyKVxyXG5cclxuICB9KTtcclxuICBlbnRyaWVzLnB1c2goaW5wdXRFbnRyeSk7XHJcblxyXG5cclxuICAvLyBvdXRwdXQgcGFyYW1ldGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIGlmIChlbnN1cmVPdXRwYXJhbWV0ZXJTdXBwb3J0ZWQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSkge1xyXG4gICAgdmFyIG91dHB1dEVudHJ5ID0gZXh0ZW5zaW9uRWxlbWVudHNFbnRyeShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xyXG4gICAgICBpZDogaWRQcmVmaXggKyAnb3V0cHV0cycsXHJcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ091dHB1dCBQYXJhbWV0ZXJzJyksXHJcbiAgICAgIG1vZGVsUHJvcGVydHk6ICduYW1lJyxcclxuICAgICAgcHJlZml4OiAnT3V0cHV0JyxcclxuICAgICAgcmVzaXphYmxlOiB0cnVlLFxyXG5cclxuICAgICAgY3JlYXRlRXh0ZW5zaW9uRWxlbWVudDogbmV3RWxlbWVudCgnYWN0aXZpdGk6T3V0cHV0UGFyYW1ldGVyJywgJ291dHB1dFBhcmFtZXRlcnMnKSxcclxuICAgICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudDogcmVtb3ZlRWxlbWVudChnZXRPdXRwdXRQYXJhbWV0ZXIsICdvdXRwdXRQYXJhbWV0ZXJzJywgJ2lucHV0UGFyYW1ldGVycycpLFxyXG5cclxuICAgICAgZ2V0RXh0ZW5zaW9uRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZ2V0T3V0cHV0UGFyYW1ldGVycyhlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgb25TZWxlY3Rpb25DaGFuZ2U6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGV2ZW50LCBzY29wZSkge1xyXG4gICAgICAgIGlucHV0RW50cnkuZGVzZWxlY3QoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBzZXRPcHRpb25MYWJlbFZhbHVlOiBzZXRPcHRpb25MYWJlbFZhbHVlKGdldE91dHB1dFBhcmFtZXRlcilcclxuXHJcbiAgICB9KTtcclxuICAgIGVudHJpZXMucHVzaChvdXRwdXRFbnRyeSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmVzdWx0O1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcztcclxuXHJcbnZhciBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKSxcclxuICAgIGlucHV0T3V0cHV0SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0lucHV0T3V0cHV0SGVscGVyJyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXHJcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL1V0aWxzJyk7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIHNjcmlwdEltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9TY3JpcHQnKTtcclxuXHJcblxyXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIHBhcmVudCwgZmFjdG9yeSwgcHJvcGVydGllcykge1xyXG4gIHJldHVybiBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQodHlwZSwgcHJvcGVydGllcywgcGFyZW50LCBmYWN0b3J5KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTY3JpcHQoZWxlbSkge1xyXG4gIHJldHVybiBpcyhlbGVtLCAnYWN0aXZpdGk6U2NyaXB0Jyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTGlzdChlbGVtKSB7XHJcbiAgcmV0dXJuIGlzKGVsZW0sICdhY3Rpdml0aTpMaXN0Jyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTWFwKGVsZW0pIHtcclxuICByZXR1cm4gaXMoZWxlbSwgJ2FjdGl2aXRpOk1hcCcpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbnN1cmVJbnB1dE91dHB1dFN1cHBvcnRlZChlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpIHtcclxuICByZXR1cm4gaW5wdXRPdXRwdXRIZWxwZXIuaXNJbnB1dE91dHB1dFN1cHBvcnRlZChlbGVtZW50LCBpbnNpZGVDb25uZWN0b3IpO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIHR5cGVJbmZvID0ge1xyXG4gICAgJ2FjdGl2aXRpOk1hcCc6IHtcclxuICAgICAgdmFsdWU6ICdtYXAnLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdNYXAnKVxyXG4gICAgfSxcclxuICAgICdhY3Rpdml0aTpMaXN0Jzoge1xyXG4gICAgICB2YWx1ZTogJ2xpc3QnLFxyXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdMaXN0JylcclxuICAgIH0sXHJcbiAgICAnYWN0aXZpdGk6U2NyaXB0Jzoge1xyXG4gICAgICB2YWx1ZTogJ3NjcmlwdCcsXHJcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1NjcmlwdCcpXHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gIHZhciBpbnNpZGVDb25uZWN0b3IgPSAhIW9wdGlvbnMuaW5zaWRlQ29ubmVjdG9yLFxyXG4gICAgICBpZFByZWZpeCA9IG9wdGlvbnMuaWRQcmVmaXggfHwgJyc7XHJcblxyXG4gIHZhciBnZXRTZWxlY3RlZCA9IG9wdGlvbnMuZ2V0U2VsZWN0ZWRQYXJhbWV0ZXI7XHJcblxyXG4gIGlmICghZW5zdXJlSW5wdXRPdXRwdXRTdXBwb3J0ZWQoZWxlbWVudCwgaW5zaWRlQ29ubmVjdG9yKSkge1xyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgdmFyIGVudHJpZXMgPSBbXTtcclxuXHJcbiAgdmFyIGlzU2VsZWN0ZWQgPSBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8vIHBhcmFtZXRlciBuYW1lIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudmFsaWRhdGlvbkF3YXJlVGV4dEZpZWxkKHtcclxuICAgIGlkOiBpZFByZWZpeCArICdwYXJhbWV0ZXJOYW1lJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ05hbWUnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICduYW1lJyxcclxuXHJcbiAgICBnZXRQcm9wZXJ0eTogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4gKGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpIHx8IHt9KS5uYW1lO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRQcm9wZXJ0eTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBwYXJhbSA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHBhcmFtLCB2YWx1ZXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgdmFyIHZhbGlkYXRpb24gPSB7fTtcclxuICAgICAgaWYgKGJvKSB7XHJcbiAgICAgICAgdmFyIG5hbWVWYWx1ZSA9IHZhbHVlcy5uYW1lO1xyXG5cclxuICAgICAgICBpZiAobmFtZVZhbHVlKSB7XHJcbiAgICAgICAgICBpZiAodXRpbHMuY29udGFpbnNTcGFjZShuYW1lVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24ubmFtZSA9IHRyYW5zbGF0ZSgnTmFtZSBtdXN0IG5vdCBjb250YWluIHNwYWNlcycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YWxpZGF0aW9uLm5hbWUgPSB0cmFuc2xhdGUoJ1BhcmFtZXRlciBtdXN0IGhhdmUgYSBuYW1lJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdmFsaWRhdGlvbjtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhaXNTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG5cclxuICAvLyBwYXJhbWV0ZXIgdHlwZSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgdmFyIHNlbGVjdE9wdGlvbnMgPSBbXHJcbiAgICB7IHZhbHVlOiAndGV4dCcsIG5hbWU6IHRyYW5zbGF0ZSgnVGV4dCcpIH0sXHJcbiAgICB7IHZhbHVlOiAnc2NyaXB0JywgbmFtZTogdHJhbnNsYXRlKCdTY3JpcHQnKSB9LFxyXG4gICAgeyB2YWx1ZTogJ2xpc3QnLCBuYW1lOiB0cmFuc2xhdGUoJ0xpc3QnKSB9LFxyXG4gICAgeyB2YWx1ZTogJ21hcCcsIG5hbWU6IHRyYW5zbGF0ZSgnTWFwJykgfVxyXG4gIF07XHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3Rvcnkuc2VsZWN0Qm94KHtcclxuICAgIGlkIDogaWRQcmVmaXggKyAncGFyYW1ldGVyVHlwZScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUeXBlJyksXHJcbiAgICBzZWxlY3RPcHRpb25zOiBzZWxlY3RPcHRpb25zLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ3BhcmFtZXRlclR5cGUnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuXHJcbiAgICAgIHZhciBwYXJhbWV0ZXJUeXBlID0gJ3RleHQnO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBibyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICB2YXIgZGVmaW5pdGlvbiA9IGJvLmdldCgnZGVmaW5pdGlvbicpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgZGVmaW5pdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgIHZhciB0eXBlID0gZGVmaW5pdGlvbi4kdHlwZTtcclxuICAgICAgICAgIHBhcmFtZXRlclR5cGUgPSB0eXBlSW5mb1t0eXBlXS52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgcGFyYW1ldGVyVHlwZTogcGFyYW1ldGVyVHlwZVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuXHJcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgZGVmaW5pdGlvbjogdW5kZWZpbmVkXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB2YXIgY3JlYXRlUGFyYW1ldGVyVHlwZUVsZW0gPSBmdW5jdGlvbih0eXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQodHlwZSwgYm8sIGJwbW5GYWN0b3J5KTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHZhciBwYXJhbWV0ZXJUeXBlID0gdmFsdWVzLnBhcmFtZXRlclR5cGU7XHJcblxyXG4gICAgICBpZiAocGFyYW1ldGVyVHlwZSA9PT0gJ3NjcmlwdCcpIHtcclxuICAgICAgICBwcm9wZXJ0aWVzLmRlZmluaXRpb24gPSBjcmVhdGVQYXJhbWV0ZXJUeXBlRWxlbSgnYWN0aXZpdGk6U2NyaXB0Jyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAocGFyYW1ldGVyVHlwZSA9PT0gJ2xpc3QnKSB7XHJcbiAgICAgICAgcHJvcGVydGllcy5kZWZpbml0aW9uID0gY3JlYXRlUGFyYW1ldGVyVHlwZUVsZW0oJ2FjdGl2aXRpOkxpc3QnKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChwYXJhbWV0ZXJUeXBlID09PSAnbWFwJykge1xyXG4gICAgICAgIHByb3BlcnRpZXMuZGVmaW5pdGlvbiA9IGNyZWF0ZVBhcmFtZXRlclR5cGVFbGVtKCdhY3Rpdml0aTpNYXAnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBibywgcHJvcGVydGllcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNob3c6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIGlzU2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcblxyXG4gIC8vIHBhcmFtZXRlciB2YWx1ZSAodHlwZSA9IHRleHQpIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0Qm94KHtcclxuICAgIGlkIDogaWRQcmVmaXggKyAncGFyYW1ldGVyVHlwZS10ZXh0JyxcclxuICAgIGxhYmVsIDogdHJhbnNsYXRlKCdWYWx1ZScpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ3ZhbHVlJyxcclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHZhbHVlOiAoZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSkgfHwge30pLnZhbHVlXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBwYXJhbSA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICB2YWx1ZXMudmFsdWUgPSB2YWx1ZXMudmFsdWUgfHwgdW5kZWZpbmVkO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHBhcmFtLCB2YWx1ZXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzaG93OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gYm8gJiYgIWJvLmRlZmluaXRpb247XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcblxyXG4gIC8vIHBhcmFtZXRlciB2YWx1ZSAodHlwZSA9IHNjcmlwdCkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIHZhciBzY3JpcHQgPSBzY3JpcHRJbXBsZW1lbnRhdGlvbignc2NyaXB0Rm9ybWF0JywgJ3ZhbHVlJywgdHJ1ZSwgdHJhbnNsYXRlKTtcclxuICBlbnRyaWVzLnB1c2goe1xyXG4gICAgaWQ6IGlkUHJlZml4ICsgJ3BhcmFtZXRlclR5cGUtc2NyaXB0JyxcclxuICAgIGh0bWw6ICc8ZGl2IGRhdGEtc2hvdz1cImlzU2NyaXB0XCI+JyArXHJcbiAgICAgICAgICAgIHNjcmlwdC50ZW1wbGF0ZSArXHJcbiAgICAgICAgICAnPC9kaXY+JyxcclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuIGJvICYmIGlzU2NyaXB0KGJvLmRlZmluaXRpb24pID8gc2NyaXB0LmdldChlbGVtZW50LCBiby5kZWZpbml0aW9uKSA6IHt9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIHVwZGF0ZSA9IHNjcmlwdC5zZXQoZWxlbWVudCwgdmFsdWVzKTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBiby5kZWZpbml0aW9uLCB1cGRhdGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gYm8gJiYgaXNTY3JpcHQoYm8uZGVmaW5pdGlvbikgPyBzY3JpcHQudmFsaWRhdGUoZWxlbWVudCwgYm8uZGVmaW5pdGlvbikgOiB7fTtcclxuICAgIH0sXHJcblxyXG4gICAgaXNTY3JpcHQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHJldHVybiBibyAmJiBpc1NjcmlwdChiby5kZWZpbml0aW9uKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2NyaXB0OiBzY3JpcHRcclxuXHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyBwYXJhbWV0ZXIgdmFsdWUgKHR5cGUgPSBsaXN0KSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gIGVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGFibGUoe1xyXG4gICAgaWQ6IGlkUHJlZml4ICsgJ3BhcmFtZXRlclR5cGUtbGlzdCcsXHJcbiAgICBtb2RlbFByb3BlcnRpZXM6IFsgJ3ZhbHVlJyBdLFxyXG4gICAgbGFiZWxzOiBbIHRyYW5zbGF0ZSgnVmFsdWUnKSBdLFxyXG4gICAgYWRkTGFiZWw6IHRyYW5zbGF0ZSgnQWRkIFZhbHVlJyksXHJcblxyXG4gICAgZ2V0RWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcblxyXG4gICAgICBpZiAoYm8gJiYgaXNMaXN0KGJvLmRlZmluaXRpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIGJvLmRlZmluaXRpb24uaXRlbXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlLCBpZHgpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHZhciBpdGVtID0gYm8uZGVmaW5pdGlvbi5pdGVtc1tpZHhdO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGl0ZW0sIHZhbHVlcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGFkZEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHZhciBuZXdWYWx1ZSA9IGNyZWF0ZUVsZW1lbnQoJ2FjdGl2aXRpOlZhbHVlJywgYm8uZGVmaW5pdGlvbiwgYnBtbkZhY3RvcnksIHsgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChlbGVtZW50LCBiby5kZWZpbml0aW9uLCAnaXRlbXMnLCBbIG5ld1ZhbHVlIF0pO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW1vdmVFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBpZHgpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIucmVtb3ZlRWxlbWVudHNGcm9tTGlzdChlbGVtZW50LCBiby5kZWZpbml0aW9uLCAnaXRlbXMnLCBudWxsLCBbIGJvLmRlZmluaXRpb24uaXRlbXNbaWR4XSBdKTtcclxuICAgIH0sXHJcblxyXG4gICAgZWRpdGFibGU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIHByb3AsIGlkeCkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIGl0ZW0gPSBiby5kZWZpbml0aW9uLml0ZW1zW2lkeF07XHJcbiAgICAgIHJldHVybiAhaXNNYXAoaXRlbSkgJiYgIWlzTGlzdChpdGVtKSAmJiAhaXNTY3JpcHQoaXRlbSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldENvbnRyb2xWYWx1ZTogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgaW5wdXQsIHByb3AsIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSk7XHJcbiAgICAgIHZhciBpdGVtID0gYm8uZGVmaW5pdGlvbi5pdGVtc1tpZHhdO1xyXG5cclxuICAgICAgaWYgKCFpc01hcChpdGVtKSAmJiAhaXNMaXN0KGl0ZW0pICYmICFpc1NjcmlwdChpdGVtKSkge1xyXG4gICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW5wdXQudmFsdWUgPSB0eXBlSW5mb1tpdGVtLiR0eXBlXS5sYWJlbDtcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBzaG93OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICByZXR1cm4gYm8gJiYgYm8uZGVmaW5pdGlvbiAmJiBpc0xpc3QoYm8uZGVmaW5pdGlvbik7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcblxyXG4gIC8vIHBhcmFtZXRlciB2YWx1ZSAodHlwZSA9IG1hcCkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRhYmxlKHtcclxuICAgIGlkOiBpZFByZWZpeCArICdwYXJhbWV0ZXJUeXBlLW1hcCcsXHJcbiAgICBtb2RlbFByb3BlcnRpZXM6IFsgJ2tleScsICd2YWx1ZScgXSxcclxuICAgIGxhYmVsczogWyB0cmFuc2xhdGUoJ0tleScpLCB0cmFuc2xhdGUoJ1ZhbHVlJykgXSxcclxuICAgIGFkZExhYmVsOiB0cmFuc2xhdGUoJ0FkZCBFbnRyeScpLFxyXG5cclxuICAgIGdldEVsZW1lbnRzOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBibyA9IGdldFNlbGVjdGVkKGVsZW1lbnQsIG5vZGUpO1xyXG5cclxuICAgICAgaWYgKGJvICYmIGlzTWFwKGJvLmRlZmluaXRpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIGJvLmRlZmluaXRpb24uZW50cmllcztcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUsIGlkeCkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIGVudHJ5ID0gYm8uZGVmaW5pdGlvbi5lbnRyaWVzW2lkeF07XHJcblxyXG4gICAgICBpZiAoaXNNYXAoZW50cnkuZGVmaW5pdGlvbikgfHwgaXNMaXN0KGVudHJ5LmRlZmluaXRpb24pIHx8IGlzU2NyaXB0KGVudHJ5LmRlZmluaXRpb24pKSB7XHJcbiAgICAgICAgdmFsdWVzID0ge1xyXG4gICAgICAgICAga2V5OiB2YWx1ZXMua2V5XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBlbnRyeSwgdmFsdWVzKTtcclxuICAgIH0sXHJcblxyXG4gICAgYWRkRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIG5ld0VudHJ5ID0gY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6RW50cnknLCBiby5kZWZpbml0aW9uLCBicG1uRmFjdG9yeSwgeyBrZXk6IHVuZGVmaW5lZCwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChlbGVtZW50LCBiby5kZWZpbml0aW9uLCAnZW50cmllcycsIFsgbmV3RW50cnkgXSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbW92ZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIGlkeCkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci5yZW1vdmVFbGVtZW50c0Zyb21MaXN0KGVsZW1lbnQsIGJvLmRlZmluaXRpb24sICdlbnRyaWVzJywgbnVsbCwgWyBiby5kZWZpbml0aW9uLmVudHJpZXNbaWR4XSBdKTtcclxuICAgIH0sXHJcblxyXG4gICAgZWRpdGFibGU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUsIHByb3AsIGlkeCkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIGVudHJ5ID0gYm8uZGVmaW5pdGlvbi5lbnRyaWVzW2lkeF07XHJcbiAgICAgIHJldHVybiBwcm9wID09PSAna2V5JyB8fCAoIWlzTWFwKGVudHJ5LmRlZmluaXRpb24pICYmICFpc0xpc3QoZW50cnkuZGVmaW5pdGlvbikgJiYgIWlzU2NyaXB0KGVudHJ5LmRlZmluaXRpb24pKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q29udHJvbFZhbHVlOiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBpbnB1dCwgcHJvcCwgdmFsdWUsIGlkeCkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgdmFyIGVudHJ5ID0gYm8uZGVmaW5pdGlvbi5lbnRyaWVzW2lkeF07XHJcblxyXG4gICAgICBpZiAocHJvcCA9PT0gJ2tleScgfHwgKCFpc01hcChlbnRyeS5kZWZpbml0aW9uKSAmJiAhaXNMaXN0KGVudHJ5LmRlZmluaXRpb24pICYmICFpc1NjcmlwdChlbnRyeS5kZWZpbml0aW9uKSkpIHtcclxuICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlucHV0LnZhbHVlID0gdHlwZUluZm9bZW50cnkuZGVmaW5pdGlvbi4kdHlwZV0ubGFiZWw7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgc2hvdzogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgcmV0dXJuIGJvICYmIGJvLmRlZmluaXRpb24gJiYgaXNNYXAoYm8uZGVmaW5pdGlvbik7XHJcbiAgICB9XHJcblxyXG4gIH0pKTtcclxuXHJcbiAgcmV0dXJuIGVudHJpZXM7XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGdldEJ1c2luZXNzT2JqZWN0ID0gb3B0aW9ucy5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbiAgdmFyIGpvYlByaW9yaXR5RW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAnam9iUHJpb3JpdHknLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSm9iIFByaW9yaXR5JyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnam9iUHJpb3JpdHknLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBqb2JQcmlvcml0eTogYm8uZ2V0KCdhY3Rpdml0aTpqb2JQcmlvcml0eScpXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGJvLCB7XHJcbiAgICAgICAgJ2FjdGl2aXRpOmpvYlByaW9yaXR5JzogdmFsdWVzLmpvYlByaW9yaXR5IHx8IHVuZGVmaW5lZFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBbIGpvYlByaW9yaXR5RW50cnkgXTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXM7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcbnZhciBhc3luY0NhcGFibGVIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQXN5bmNDYXBhYmxlSGVscGVyJyk7XHJcblxyXG52YXIgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyksXHJcbiAgICBldmVudERlZmluaXRpb25IZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRXZlbnREZWZpbml0aW9uSGVscGVyJyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG5mdW5jdGlvbiBpc0FzeW5jQmVmb3JlKGJvKSB7XHJcbiAgcmV0dXJuIGFzeW5jQ2FwYWJsZUhlbHBlci5pc0FzeW5jQmVmb3JlKGJvKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc3luY0FmdGVyKGJvKSB7XHJcbiAgcmV0dXJuIGFzeW5jQ2FwYWJsZUhlbHBlci5pc0FzeW5jQWZ0ZXIoYm8pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShibykge1xyXG4gIHJldHVybiBhc3luY0NhcGFibGVIZWxwZXIuZ2V0RmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoYm8pO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShibywgZWxlbWVudCkge1xyXG4gIHJldHVybiBhc3luY0NhcGFibGVIZWxwZXIucmVtb3ZlRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoYm8sIGVsZW1lbnQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVFeHRlbnNpb25FbGVtZW50cyhwYXJlbnQsIGJwbW5GYWN0b3J5KSB7XHJcbiAgcmV0dXJuIGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHsgdmFsdWVzOiBbXSB9LCBwYXJlbnQsIGJwbW5GYWN0b3J5KTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUocGFyZW50LCBicG1uRmFjdG9yeSwgY3ljbGUpIHtcclxuICByZXR1cm4gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdhY3Rpdml0aTpGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZScsIHsgYm9keTogY3ljbGUgfSwgcGFyZW50LCBicG1uRmFjdG9yeSk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSBvcHRpb25zLmdldEJ1c2luZXNzT2JqZWN0O1xyXG5cclxuICB2YXIgaWRQcmVmaXggPSBvcHRpb25zLmlkUHJlZml4IHx8ICcnLFxyXG4gICAgICBsYWJlbFByZWZpeCA9IG9wdGlvbnMubGFiZWxQcmVmaXggfHwgJyc7XHJcblxyXG4gIHZhciByZXRyeVRpbWVDeWNsZUVudHJ5ID0gZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogaWRQcmVmaXggKyAncmV0cnlUaW1lQ3ljbGUnLFxyXG4gICAgbGFiZWw6IGxhYmVsUHJlZml4ICsgdHJhbnNsYXRlKCdSZXRyeSBUaW1lIEN5Y2xlJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnY3ljbGUnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgcmV0cnlUaW1lQ3ljbGUgPSBnZXRGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSk7XHJcbiAgICAgIHZhciB2YWx1ZSA9IHJldHJ5VGltZUN5Y2xlICYmIHJldHJ5VGltZUN5Y2xlLmdldCgnYm9keScpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGN5Y2xlOiB2YWx1ZVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgbmV3Q3ljbGUgPSB2YWx1ZXMuY3ljbGU7XHJcbiAgICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICAgICAgaWYgKG5ld0N5Y2xlID09PSAnJyB8fCB0eXBlb2YgbmV3Q3ljbGUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLy8gcmVtb3ZlIHJldHJ5IHRpbWUgY3ljbGUgZWxlbWVudChzKVxyXG4gICAgICAgIHJldHVybiByZW1vdmVGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShibywgZWxlbWVudCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciByZXRyeVRpbWVDeWNsZSA9IGdldEZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKGJvKTtcclxuXHJcbiAgICAgIGlmICghcmV0cnlUaW1lQ3ljbGUpIHtcclxuICAgICAgICAvLyBhZGQgbmV3IHJldHJ5IHRpbWUgY3ljbGUgZWxlbWVudFxyXG4gICAgICAgIHZhciBjb21tYW5kcyA9IFtdO1xyXG5cclxuICAgICAgICB2YXIgZXh0ZW5zaW9uRWxlbWVudHMgPSBiby5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XHJcbiAgICAgICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xyXG4gICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBjcmVhdGVFeHRlbnNpb25FbGVtZW50cyhibywgYnBtbkZhY3RvcnkpO1xyXG4gICAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHsgZXh0ZW5zaW9uRWxlbWVudHM6IGV4dGVuc2lvbkVsZW1lbnRzIH0pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHJ5VGltZUN5Y2xlID0gY3JlYXRlRmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5LCBuZXdDeWNsZSk7XHJcbiAgICAgICAgY29tbWFuZHMucHVzaChjbWRIZWxwZXIuYWRkQW5kUmVtb3ZlRWxlbWVudHNGcm9tTGlzdChcclxuICAgICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgICBleHRlbnNpb25FbGVtZW50cyxcclxuICAgICAgICAgICd2YWx1ZXMnLFxyXG4gICAgICAgICAgJ2V4dGVuc2lvbkVsZW1lbnRzJyxcclxuICAgICAgICAgIFsgcmV0cnlUaW1lQ3ljbGUgXSxcclxuICAgICAgICAgIFtdXHJcbiAgICAgICAgKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjb21tYW5kcztcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gdXBkYXRlIGV4aXN0aW5nIHJldHJ5IHRpbWUgY3ljbGUgZWxlbWVudFxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHJldHJ5VGltZUN5Y2xlLCB7IGJvZHk6IG5ld0N5Y2xlIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBoaWRkZW46IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gICAgICBpZiAoYm8gJiYgKGlzQXN5bmNCZWZvcmUoYm8pIHx8IGlzQXN5bmNBZnRlcihibykpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46RXZlbnQnKSkge1xyXG4gICAgICAgIHJldHVybiAhZXZlbnREZWZpbml0aW9uSGVscGVyLmdldFRpbWVyRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBbIHJldHJ5VGltZUN5Y2xlRW50cnkgXTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG52YXIgZXh0ZW5zaW9uRWxlbWVudHNFbnRyeSA9IHJlcXVpcmUoJy4vRXh0ZW5zaW9uRWxlbWVudHMnKSxcclxuICAgIGV4dGVuc2lvbkVsZW1lbnRzSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0V4dGVuc2lvbkVsZW1lbnRzSGVscGVyJyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXHJcbiAgICBlbGVtZW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0VsZW1lbnRIZWxwZXInKSxcclxuICAgIEltcGxlbWVudGF0aW9uVHlwZUhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9JbXBsZW1lbnRhdGlvblR5cGVIZWxwZXInKTtcclxuXHJcblxyXG5mdW5jdGlvbiBnZXRMaXN0ZW5lcnMoYm8sIHR5cGUpIHtcclxuICByZXR1cm4gYm8gJiYgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIuZ2V0RXh0ZW5zaW9uRWxlbWVudHMoYm8sIHR5cGUpIHx8IFtdO1xyXG59XHJcblxyXG52YXIgQUNUSVZJVElfRVhFQ1VUSU9OX0xJU1RFTkVSX0VMRU1FTlQgPSAnYWN0aXZpdGk6RXhlY3V0aW9uTGlzdGVuZXInO1xyXG52YXIgQUNUSVZJVElfVEFTS19MSVNURU5FUl9FTEVNRU5UID0gJ2FjdGl2aXRpOlRhc2tMaXN0ZW5lcic7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIExJU1RFTkVSX1RZUEVfTEFCRUwgPSB7XHJcbiAgICBjbGFzczogdHJhbnNsYXRlKCdKYXZhIENsYXNzJyksXHJcbiAgICBleHByZXNzaW9uOiB0cmFuc2xhdGUoJ0V4cHJlc3Npb24nKSxcclxuICAgIGRlbGVnYXRlRXhwcmVzc2lvbjogdHJhbnNsYXRlKCdEZWxlZ2F0ZSBFeHByZXNzaW9uJyksXHJcbiAgICBzY3JpcHQ6IHRyYW5zbGF0ZSgnU2NyaXB0JylcclxuICB9O1xyXG5cclxuICB2YXIgYm87XHJcblxyXG4gIHZhciByZXN1bHQgPSB7XHJcbiAgICBnZXRTZWxlY3RlZExpc3RlbmVyOiBnZXRTZWxlY3RlZExpc3RlbmVyXHJcbiAgfTtcclxuXHJcbiAgdmFyIGVudHJpZXMgPSByZXN1bHQuZW50cmllcyA9IFtdO1xyXG5cclxuICB2YXIgaXNTZXF1ZW5jZUZsb3cgPSBJbXBsZW1lbnRhdGlvblR5cGVIZWxwZXIuaXNTZXF1ZW5jZUZsb3coZWxlbWVudCk7XHJcblxyXG4gIGZ1bmN0aW9uIGdldFNlbGVjdGVkTGlzdGVuZXIoZWxlbWVudCwgbm9kZSkge1xyXG4gICAgdmFyIHNlbGVjdGlvbiA9IChleGVjdXRpb25MaXN0ZW5lckVudHJ5ICYmIGV4ZWN1dGlvbkxpc3RlbmVyRW50cnkuZ2V0U2VsZWN0ZWQoZWxlbWVudCwgbm9kZSkpIHx8IHsgaWR4OiAtMSB9O1xyXG5cclxuICAgIHZhciBsaXN0ZW5lciA9IGdldExpc3RlbmVycyhibywgQUNUSVZJVElfRVhFQ1VUSU9OX0xJU1RFTkVSX0VMRU1FTlQpW3NlbGVjdGlvbi5pZHhdO1xyXG4gICAgaWYgKCFsaXN0ZW5lciAmJiB0YXNrTGlzdGVuZXJFbnRyeSkge1xyXG4gICAgICBzZWxlY3Rpb24gPSB0YXNrTGlzdGVuZXJFbnRyeS5nZXRTZWxlY3RlZChlbGVtZW50LCBub2RlKTtcclxuICAgICAgbGlzdGVuZXIgPSBnZXRMaXN0ZW5lcnMoYm8sIEFDVElWSVRJX1RBU0tfTElTVEVORVJfRUxFTUVOVClbc2VsZWN0aW9uLmlkeF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGlzdGVuZXI7XHJcbiAgfVxyXG5cclxuICB2YXIgc2V0T3B0aW9uTGFiZWxWYWx1ZSA9IGZ1bmN0aW9uKHR5cGUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBvcHRpb24sIHByb3BlcnR5LCB2YWx1ZSwgaWR4KSB7XHJcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnMoYm8sIHR5cGUpO1xyXG4gICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaWR4XTtcclxuICAgICAgdmFyIGxpc3RlbmVyVHlwZSA9IEltcGxlbWVudGF0aW9uVHlwZUhlbHBlci5nZXRJbXBsZW1lbnRhdGlvblR5cGUobGlzdGVuZXIpO1xyXG5cclxuICAgICAgdmFyIGV2ZW50ID0gKGxpc3RlbmVyLmdldCgnZXZlbnQnKSkgPyBsaXN0ZW5lci5nZXQoJ2V2ZW50JykgOiAnPGVtcHR5Pic7XHJcblxyXG4gICAgICB2YXIgbGFiZWwgPSAoZXZlbnQgfHwgJyonKSArICcgOiAnICsgKExJU1RFTkVSX1RZUEVfTEFCRUxbbGlzdGVuZXJUeXBlXSB8fCAnJyk7XHJcblxyXG4gICAgICBvcHRpb24udGV4dCA9IGxhYmVsO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICB2YXIgbmV3RWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHR5cGUsIGluaXRpYWxFdmVudCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCB2YWx1ZSkge1xyXG4gICAgICB2YXIgcHJvcHMgPSB7XHJcbiAgICAgICAgZXZlbnQ6IGluaXRpYWxFdmVudCxcclxuICAgICAgICBjbGFzczogJydcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHZhciBuZXdFbGVtID0gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KHR5cGUsIHByb3BzLCBleHRlbnNpb25FbGVtZW50cywgYnBtbkZhY3RvcnkpO1xyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci5hZGRFbGVtZW50c1RvbGlzdChlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywgJ3ZhbHVlcycsIFsgbmV3RWxlbSBdKTtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgdmFyIHJlbW92ZUVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50LCB0eXBlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsIHZhbHVlLCBpZHgpIHtcclxuICAgICAgdmFyIGxpc3RlbmVycyA9IGdldExpc3RlbmVycyhibywgdHlwZSk7XHJcbiAgICAgIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpZHhdO1xyXG4gICAgICBpZiAobGlzdGVuZXIpIHtcclxuICAgICAgICByZXR1cm4gZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIucmVtb3ZlRW50cnkoYm8sIGVsZW1lbnQsIGxpc3RlbmVyKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9O1xyXG5cclxuXHJcbiAgLy8gRXhlY3V0aW9uIExpc3RlbmVyXHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpGbG93RWxlbWVudCcpIHx8IGlzKGVsZW1lbnQsICdicG1uOlByb2Nlc3MnKSB8fCBpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XHJcbiAgICBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcclxuICAgICAgZWxlbWVudCA9IGVsZW1lbnQucHJvY2Vzc1JlZjtcclxuICAgICAgYm8gPSBiby5nZXQoJ3Byb2Nlc3NSZWYnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYm8pIHtcclxuXHJcbiAgICAgIHZhciBleGVjdXRpb25MaXN0ZW5lckVudHJ5ID0gZXh0ZW5zaW9uRWxlbWVudHNFbnRyeShlbGVtZW50LCBicG1uRmFjdG9yeSwge1xyXG4gICAgICAgIGlkIDogJ2V4ZWN1dGlvbkxpc3RlbmVycycsXHJcbiAgICAgICAgbGFiZWwgOiB0cmFuc2xhdGUoJ0V4ZWN1dGlvbiBMaXN0ZW5lcicpLFxyXG4gICAgICAgIG1vZGVsUHJvcGVydHk6ICduYW1lJyxcclxuICAgICAgICBpZEdlbmVyYXRpb246ICdmYWxzZScsXHJcbiAgICAgICAgcmVmZXJlbmNlOiAncHJvY2Vzc1JlZicsXHJcblxyXG4gICAgICAgIGNyZWF0ZUV4dGVuc2lvbkVsZW1lbnQ6IG5ld0VsZW1lbnQoZWxlbWVudCwgQUNUSVZJVElfRVhFQ1VUSU9OX0xJU1RFTkVSX0VMRU1FTlQsIChpc1NlcXVlbmNlRmxvdykgPyAndGFrZScgOiAnc3RhcnQnKSxcclxuICAgICAgICByZW1vdmVFeHRlbnNpb25FbGVtZW50OiByZW1vdmVFbGVtZW50KGVsZW1lbnQsIEFDVElWSVRJX0VYRUNVVElPTl9MSVNURU5FUl9FTEVNRU5UKSxcclxuXHJcbiAgICAgICAgZ2V0RXh0ZW5zaW9uRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcnMoYm8sIEFDVElWSVRJX0VYRUNVVElPTl9MSVNURU5FUl9FTEVNRU5UKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBvblNlbGVjdGlvbkNoYW5nZTogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgZXZlbnQsIHNjb3BlKSB7XHJcbiAgICAgICAgICB0YXNrTGlzdGVuZXJFbnRyeSAmJiB0YXNrTGlzdGVuZXJFbnRyeS5kZXNlbGVjdChlbGVtZW50LCBub2RlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXRPcHRpb25MYWJlbFZhbHVlOiBzZXRPcHRpb25MYWJlbFZhbHVlKEFDVElWSVRJX0VYRUNVVElPTl9MSVNURU5FUl9FTEVNRU5UKVxyXG5cclxuICAgICAgfSk7XHJcbiAgICAgIGVudHJpZXMucHVzaChleGVjdXRpb25MaXN0ZW5lckVudHJ5KTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gVGFzayBMaXN0ZW5lclxyXG5cclxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46VXNlclRhc2snKSkge1xyXG4gICAgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICB2YXIgdGFza0xpc3RlbmVyRW50cnkgPSBleHRlbnNpb25FbGVtZW50c0VudHJ5KGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB7XHJcbiAgICAgIGlkIDogJ3Rhc2tMaXN0ZW5lcnMnLFxyXG4gICAgICBsYWJlbCA6IHRyYW5zbGF0ZSgnVGFzayBMaXN0ZW5lcicpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5OiAnbmFtZScsXHJcbiAgICAgIGlkR2VuZXJhdGlvbjogJ2ZhbHNlJyxcclxuXHJcbiAgICAgIGNyZWF0ZUV4dGVuc2lvbkVsZW1lbnQ6IG5ld0VsZW1lbnQoZWxlbWVudCwgQUNUSVZJVElfVEFTS19MSVNURU5FUl9FTEVNRU5ULCAnY3JlYXRlJyksXHJcbiAgICAgIHJlbW92ZUV4dGVuc2lvbkVsZW1lbnQ6IHJlbW92ZUVsZW1lbnQoZWxlbWVudCwgQUNUSVZJVElfVEFTS19MSVNURU5FUl9FTEVNRU5UKSxcclxuXHJcbiAgICAgIGdldEV4dGVuc2lvbkVsZW1lbnRzOiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGdldExpc3RlbmVycyhibywgQUNUSVZJVElfVEFTS19MSVNURU5FUl9FTEVNRU5UKTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIG9uU2VsZWN0aW9uQ2hhbmdlOiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBldmVudCwgc2NvcGUpIHtcclxuICAgICAgICBleGVjdXRpb25MaXN0ZW5lckVudHJ5LmRlc2VsZWN0KGVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgc2V0T3B0aW9uTGFiZWxWYWx1ZTogc2V0T3B0aW9uTGFiZWxWYWx1ZShBQ1RJVklUSV9UQVNLX0xJU1RFTkVSX0VMRU1FTlQpXHJcblxyXG4gICAgfSk7XHJcbiAgICBlbnRyaWVzLnB1c2godGFza0xpc3RlbmVyRW50cnkpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdDtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBlc2NhcGVIVE1MID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vVXRpbHMnKS5lc2NhcGVIVE1MO1xyXG5cclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xyXG5cclxudmFyIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xyXG5cclxudmFyIGRvbUNsYXNzZXMgPSByZXF1aXJlKCdtaW4tZG9tJykuY2xhc3NlcztcclxuXHJcbi8qKlxyXG4gKiBHZXQgYSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgbG9vcCBjaGFyYWN0ZXJpc3RpY3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5TmFtZVxyXG4gKlxyXG4gKiBAcmV0dXJuIHthbnl9IHRoZSBwcm9wZXJ0eSB2YWx1ZVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHlOYW1lKSB7XHJcbiAgdmFyIGxvb3BDaGFyYWN0ZXJpc3RpY3MgPSBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzKGVsZW1lbnQpO1xyXG4gIHJldHVybiBsb29wQ2hhcmFjdGVyaXN0aWNzICYmIGxvb3BDaGFyYWN0ZXJpc3RpY3MuZ2V0KHByb3BlcnR5TmFtZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIGJvZHkgb2YgYSBnaXZlbiBleHByZXNzaW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnQ8YnBtbjpGb3JtYWxFeHByZXNzaW9uPn0gZXhwcmVzc2lvblxyXG4gKlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBib2R5ICh2YWx1ZSkgb2YgdGhlIGV4cHJlc3Npb25cclxuICovXHJcbmZ1bmN0aW9uIGdldEJvZHkoZXhwcmVzc2lvbikge1xyXG4gIHJldHVybiBleHByZXNzaW9uICYmIGV4cHJlc3Npb24uZ2V0KCdib2R5Jyk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogR2V0IHRoZSBsb29wIGNoYXJhY3RlcmlzdGljcyBvZiBhbiBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnQ8YnBtbjpNdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcz59IHRoZSBsb29wIGNoYXJhY3RlcmlzdGljc1xyXG4gKi9cclxuZnVuY3Rpb24gZ2V0TG9vcENoYXJhY3RlcmlzdGljcyhlbGVtZW50KSB7XHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgcmV0dXJuIGJvLmxvb3BDaGFyYWN0ZXJpc3RpY3M7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIGxvb3AgY2FyZGluYWxpdHkgb2YgdGhlIGxvb3AgY2hhcmFjdGVyaXN0aWNzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnQ8YnBtbjpGb3JtYWxFeHByZXNzaW9uPn0gYW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGxvb3AgY2FyZGluYWxpdHlcclxuICovXHJcbmZ1bmN0aW9uIGdldExvb3BDYXJkaW5hbGl0eShlbGVtZW50KSB7XHJcbiAgcmV0dXJuIGdldFByb3BlcnR5KGVsZW1lbnQsICdsb29wQ2FyZGluYWxpdHknKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgbG9vcCBjYXJkaW5hbGl0eSB2YWx1ZSBvZiB0aGUgbG9vcCBjaGFyYWN0ZXJpc3RpY3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgbG9vcCBjYXJkaW5hbGl0eSB2YWx1ZVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0TG9vcENhcmRpbmFsaXR5VmFsdWUoZWxlbWVudCkge1xyXG4gIHZhciBsb29wQ2FyZGluYWxpdHkgPSBnZXRMb29wQ2FyZGluYWxpdHkoZWxlbWVudCk7XHJcbiAgcmV0dXJuIGdldEJvZHkobG9vcENhcmRpbmFsaXR5KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgY29tcGxldGlvbiBjb25kaXRpb24gb2YgdGhlIGxvb3AgY2hhcmFjdGVyaXN0aWNzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnQ8YnBtbjpGb3JtYWxFeHByZXNzaW9uPn0gYW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBsZXRpb24gY29uZGl0aW9uXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRDb21wbGV0aW9uQ29uZGl0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gZ2V0UHJvcGVydHkoZWxlbWVudCwgJ2NvbXBsZXRpb25Db25kaXRpb24nKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgY29tcGxldGlvbiBjb25kaXRpb24gdmFsdWUgb2YgdGhlIGxvb3AgY2hhcmFjdGVyaXN0aWNzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGNvbXBsZXRpb24gY29uZGl0aW9uIHZhbHVlXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRDb21wbGV0aW9uQ29uZGl0aW9uVmFsdWUoZWxlbWVudCkge1xyXG4gIHZhciBjb21wbGV0aW9uQ29uZGl0aW9uID0gZ2V0Q29tcGxldGlvbkNvbmRpdGlvbihlbGVtZW50KTtcclxuICByZXR1cm4gZ2V0Qm9keShjb21wbGV0aW9uQ29uZGl0aW9uKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgJ2FjdGl2aXRpOmNvbGxlY3Rpb24nIGF0dHJpYnV0ZSB2YWx1ZSBvZiB0aGUgbG9vcCBjaGFyYWN0ZXJpc3RpY3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgJ2FjdGl2aXRpOmNvbGxlY3Rpb24nIHZhbHVlXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRDb2xsZWN0aW9uKGVsZW1lbnQpIHtcclxuICByZXR1cm4gZ2V0UHJvcGVydHkoZWxlbWVudCwgJ2FjdGl2aXRpOmNvbGxlY3Rpb24nKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgJ2FjdGl2aXRpOmVsZW1lbnRWYXJpYWJsZScgYXR0cmlidXRlIHZhbHVlIG9mIHRoZSBsb29wIGNoYXJhY3RlcmlzdGljcy5cclxuICpcclxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSAnYWN0aXZpdGk6ZWxlbWVudFZhcmlhYmxlJyB2YWx1ZVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0RWxlbWVudFZhcmlhYmxlKGVsZW1lbnQpIHtcclxuICByZXR1cm4gZ2V0UHJvcGVydHkoZWxlbWVudCwgJ2FjdGl2aXRpOmVsZW1lbnRWYXJpYWJsZScpO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgJ2JwbW46Rm9ybWFsRXhwcmVzc2lvbicgZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBwYXJlbnRcclxuICogQHBhcmFtIHtzdHJpbmd9IGJvZHlcclxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcclxuICpcclxuICogQHJlc3VsdCB7TW9kZGxlRWxlbWVudDxicG1uOkZvcm1hbEV4cHJlc3Npb24+fSBhIGZvcm1hbCBleHByZXNzaW9uXHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVGb3JtYWxFeHByZXNzaW9uKHBhcmVudCwgYm9keSwgYnBtbkZhY3RvcnkpIHtcclxuICByZXR1cm4gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdicG1uOkZvcm1hbEV4cHJlc3Npb24nLCB7IGJvZHk6IGJvZHkgfSwgcGFyZW50LCBicG1uRmFjdG9yeSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVcGRhdGVzIGEgc3BlY2lmaWMgZm9ybWFsIGV4cHJlc3Npb24gb2YgdGhlIGxvb3AgY2hhcmFjdGVyaXN0aWNzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eU5hbWVcclxuICogQHBhcmFtIHtzdHJpbmd9IG5ld1ZhbHVlXHJcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XHJcbiAqL1xyXG5mdW5jdGlvbiB1cGRhdGVGb3JtYWxFeHByZXNzaW9uKGVsZW1lbnQsIHByb3BlcnR5TmFtZSwgbmV3VmFsdWUsIGJwbW5GYWN0b3J5KSB7XHJcbiAgdmFyIGxvb3BDaGFyYWN0ZXJpc3RpY3MgPSBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzKGVsZW1lbnQpO1xyXG5cclxuICB2YXIgZXhwcmVzc2lvblByb3BzID0ge307XHJcblxyXG4gIGlmICghbmV3VmFsdWUpIHtcclxuICAgIC8vIHJlbW92ZSBmb3JtYWwgZXhwcmVzc2lvblxyXG4gICAgZXhwcmVzc2lvblByb3BzW3Byb3BlcnR5TmFtZV0gPSB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGxvb3BDaGFyYWN0ZXJpc3RpY3MsIGV4cHJlc3Npb25Qcm9wcyk7XHJcbiAgfVxyXG5cclxuICB2YXIgZXhpc3RpbmdFeHByZXNzaW9uID0gbG9vcENoYXJhY3RlcmlzdGljcy5nZXQocHJvcGVydHlOYW1lKTtcclxuXHJcbiAgaWYgKCFleGlzdGluZ0V4cHJlc3Npb24pIHtcclxuICAgIC8vIGFkZCBmb3JtYWwgZXhwcmVzc2lvblxyXG4gICAgZXhwcmVzc2lvblByb3BzW3Byb3BlcnR5TmFtZV0gPSBjcmVhdGVGb3JtYWxFeHByZXNzaW9uKGxvb3BDaGFyYWN0ZXJpc3RpY3MsIG5ld1ZhbHVlLCBicG1uRmFjdG9yeSk7XHJcbiAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGxvb3BDaGFyYWN0ZXJpc3RpY3MsIGV4cHJlc3Npb25Qcm9wcyk7XHJcbiAgfVxyXG5cclxuICAvLyBlZGl0IGV4aXN0aW5nIGZvcm1hbCBleHByZXNzaW9uXHJcbiAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBleGlzdGluZ0V4cHJlc3Npb24sIHtcclxuICAgIGJvZHk6IG5ld1ZhbHVlXHJcbiAgfSk7XHJcbn1cclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGVudHJpZXMgPSBbXTtcclxuXHJcbiAgLy8gZXJyb3IgbWVzc2FnZSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICBlbnRyaWVzLnB1c2goe1xyXG4gICAgaWQ6ICdtdWx0aUluc3RhbmNlLWVycm9yTWVzc2FnZScsXHJcbiAgICBodG1sOiAnPGRpdiBkYXRhLXNob3c9XCJpc1ZhbGlkXCI+JyArXHJcbiAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJicHAtaWNvbi13YXJuaW5nXCI+PC9zcGFuPiAnICtcclxuICAgICAgICAgICAgIGVzY2FwZUhUTUwodHJhbnNsYXRlKCdNdXN0IHByb3ZpZGUgZWl0aGVyIGxvb3AgY2FyZGluYWxpdHkgb3IgY29sbGVjdGlvbicpKSArXHJcbiAgICAgICAgICAnPC9kaXY+JyxcclxuXHJcbiAgICBpc1ZhbGlkOiBmdW5jdGlvbihlbGVtZW50LCBub2RlLCBub3RpZmljYXRpb24sIHNjb3BlKSB7XHJcbiAgICAgIHZhciBsb29wQ2hhcmFjdGVyaXN0aWNzID0gZ2V0TG9vcENoYXJhY3RlcmlzdGljcyhlbGVtZW50KTtcclxuXHJcbiAgICAgIHZhciBpc1ZhbGlkID0gdHJ1ZTtcclxuICAgICAgaWYgKGxvb3BDaGFyYWN0ZXJpc3RpY3MpIHtcclxuICAgICAgICB2YXIgbG9vcENhcmRpbmFsaXR5ID0gZ2V0TG9vcENhcmRpbmFsaXR5VmFsdWUoZWxlbWVudCk7XHJcbiAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBnZXRDb2xsZWN0aW9uKGVsZW1lbnQpO1xyXG5cclxuICAgICAgICBpc1ZhbGlkID0gIWxvb3BDYXJkaW5hbGl0eSAmJiAhY29sbGVjdGlvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgZG9tQ2xhc3Nlcyhub2RlKS50b2dnbGUoJ2JwcC1oaWRkZW4nLCAhaXNWYWxpZCk7XHJcbiAgICAgIGRvbUNsYXNzZXMobm90aWZpY2F0aW9uKS50b2dnbGUoJ2JwcC1lcnJvci1tZXNzYWdlJywgaXNWYWxpZCk7XHJcblxyXG4gICAgICByZXR1cm4gaXNWYWxpZDtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgLy8gbG9vcCBjYXJkaW5hbGl0eSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ211bHRpSW5zdGFuY2UtbG9vcENhcmRpbmFsaXR5JyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0xvb3AgQ2FyZGluYWxpdHknKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdsb29wQ2FyZGluYWxpdHknLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGxvb3BDYXJkaW5hbGl0eTogZ2V0TG9vcENhcmRpbmFsaXR5VmFsdWUoZWxlbWVudClcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgcmV0dXJuIHVwZGF0ZUZvcm1hbEV4cHJlc3Npb24oZWxlbWVudCwgJ2xvb3BDYXJkaW5hbGl0eScsIHZhbHVlcy5sb29wQ2FyZGluYWxpdHksIGJwbW5GYWN0b3J5KTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG5cclxuICAvLyBjb2xsZWN0aW9uIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICBlbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ211bHRpSW5zdGFuY2UtY29sbGVjdGlvbicsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDb2xsZWN0aW9uJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnY29sbGVjdGlvbicsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgY29sbGVjdGlvbjogZ2V0Q29sbGVjdGlvbihlbGVtZW50KVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgbG9vcENoYXJhY3RlcmlzdGljcyA9IGdldExvb3BDaGFyYWN0ZXJpc3RpY3MoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgbG9vcENoYXJhY3RlcmlzdGljcywge1xyXG4gICAgICAgICdhY3Rpdml0aTpjb2xsZWN0aW9uJzogdmFsdWVzLmNvbGxlY3Rpb24gfHwgdW5kZWZpbmVkXHJcbiAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciBjb2xsZWN0aW9uID0gZ2V0Q29sbGVjdGlvbihlbGVtZW50KTtcclxuICAgICAgdmFyIGVsZW1lbnRWYXJpYWJsZSA9IGdldEVsZW1lbnRWYXJpYWJsZShlbGVtZW50KTtcclxuXHJcbiAgICAgIGlmICghY29sbGVjdGlvbiAmJiBlbGVtZW50VmFyaWFibGUpIHtcclxuICAgICAgICByZXR1cm4geyBjb2xsZWN0aW9uIDogJ011c3QgcHJvdmlkZSBhIHZhbHVlJyB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgLy8gZWxlbWVudCB2YXJpYWJsZSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdtdWx0aUluc3RhbmNlLWVsZW1lbnRWYXJpYWJsZScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdFbGVtZW50IFZhcmlhYmxlJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnZWxlbWVudFZhcmlhYmxlJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBlbGVtZW50VmFyaWFibGU6IGdldEVsZW1lbnRWYXJpYWJsZShlbGVtZW50KVxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgbG9vcENoYXJhY3RlcmlzdGljcyA9IGdldExvb3BDaGFyYWN0ZXJpc3RpY3MoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgbG9vcENoYXJhY3RlcmlzdGljcywge1xyXG4gICAgICAgICdhY3Rpdml0aTplbGVtZW50VmFyaWFibGUnOiB2YWx1ZXMuZWxlbWVudFZhcmlhYmxlIHx8IHVuZGVmaW5lZFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG5cclxuICAvLyBDb21wbGV0aW9uIENvbmRpdGlvbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6ICdtdWx0aUluc3RhbmNlLWNvbXBsZXRpb25Db25kaXRpb24nLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ29tcGxldGlvbiBDb25kaXRpb24nKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdjb21wbGV0aW9uQ29uZGl0aW9uJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBjb21wbGV0aW9uQ29uZGl0aW9uOiBnZXRDb21wbGV0aW9uQ29uZGl0aW9uVmFsdWUoZWxlbWVudClcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgcmV0dXJuIHVwZGF0ZUZvcm1hbEV4cHJlc3Npb24oZWxlbWVudCwgJ2NvbXBsZXRpb25Db25kaXRpb24nLCB2YWx1ZXMuY29tcGxldGlvbkNvbmRpdGlvbiwgYnBtbkZhY3RvcnkpO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcbiAgcmV0dXJuIGVudHJpZXM7XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzO1xyXG5cclxudmFyIGZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xyXG5cclxudmFyIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpLFxyXG4gICAgZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRXh0ZW5zaW9uRWxlbWVudHNIZWxwZXInKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKSxcclxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vVXRpbHMnKTtcclxuXHJcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyksXHJcbiAgICBmb3JFYWNoID0gcmVxdWlyZSgnbG9kYXNoL2ZvckVhY2gnKSxcclxuICAgIGZpbmQgPSByZXF1aXJlKCdsb2Rhc2gvZmluZCcpO1xyXG5cclxuZnVuY3Rpb24gZ2VuZXJhdGVQcm9wZXJ0eUlkKCkge1xyXG4gIHJldHVybiB1dGlscy5uZXh0SWQoJ1Byb3BlcnR5XycpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IGFsbCBhY3Rpdml0aTpwcm9wZXJ0eSBvYmplY3RzIGZvciBhIHNwZWNpZmljIGJ1c2luZXNzIG9iamVjdFxyXG4gKlxyXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSBwYXJlbnRcclxuICpcclxuICogQHJldHVybiB7QXJyYXk8TW9kZGxlRWxlbWVudD59IGEgbGlzdCBvZiBhY3Rpdml0aTpwcm9wZXJ0eSBvYmplY3RzXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eVZhbHVlcyhwYXJlbnQpIHtcclxuICB2YXIgcHJvcGVydGllcyA9IHBhcmVudCAmJiBnZXRQcm9wZXJ0aWVzRWxlbWVudChwYXJlbnQpO1xyXG4gIGlmIChwcm9wZXJ0aWVzICYmIHByb3BlcnRpZXMudmFsdWVzKSB7XHJcbiAgICByZXR1cm4gcHJvcGVydGllcy52YWx1ZXM7XHJcbiAgfVxyXG4gIHJldHVybiBbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCBhbGwgYWN0aXZpdGk6UHJvcGVydGllcyBvYmplY3QgZm9yIGEgc3BlY2lmaWMgYnVzaW5lc3Mgb2JqZWN0XHJcbiAqXHJcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IHBhcmVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSBhIGFjdGl2aXRpOlByb3BlcnRpZXMgb2JqZWN0XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRQcm9wZXJ0aWVzRWxlbWVudChlbGVtZW50KSB7XHJcbiAgaWYgKCFpc0V4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpKSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC5wcm9wZXJ0aWVzO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gZ2V0UHJvcGVydGllc0VsZW1lbnRJbnNpZGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgZmlyc3QgYWN0aXZpdGk6UHJvcGVydGllcyBvYmplY3QgZm9yIGEgc3BlY2lmaWMgYnBtbjpFeHRlbnNpb25FbGVtZW50c1xyXG4gKiBidXNpbmVzcyBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZXh0ZW5zaW9uRWxlbWVudHNcclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gYSBhY3Rpdml0aTpQcm9wZXJ0aWVzIG9iamVjdFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UHJvcGVydGllc0VsZW1lbnRJbnNpZGVFeHRlbnNpb25FbGVtZW50cyhleHRlbnNpb25FbGVtZW50cykge1xyXG4gIHJldHVybiBmaW5kKGV4dGVuc2lvbkVsZW1lbnRzLnZhbHVlcywgZnVuY3Rpb24oZWxlbSkge1xyXG4gICAgcmV0dXJuIGlzKGVsZW0sICdhY3Rpdml0aTpQcm9wZXJ0aWVzJyk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUsIGlmIHRoZSBnaXZlbiBidXNpbmVzcyBvYmplY3QgaXMgYSBicG1uOkV4dGVuc2lvbkVsZW1lbnRzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7Ym9vbGVhbn0gYSBib29sZWFuIHZhbHVlXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0V4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpIHtcclxuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGFjdGl2aXRpOnByb3BlcnR5IGVudHJ5IHVzaW5nIHRhYmxlRW50cnlGYWN0b3J5XHJcbiAqXHJcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XHJcbiAqIEBwYXJhbSAge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmlkXHJcbiAqIEBwYXJhbSAge0FycmF5PHN0cmluZz59IG9wdGlvbnMubW9kZWxQcm9wZXJ0aWVzXHJcbiAqIEBwYXJhbSAge0FycmF5PHN0cmluZz59IG9wdGlvbnMubGFiZWxzXHJcbiAqIEBwYXJhbSAge2Z1bmN0aW9ufSBvcHRpb25zLmdldFBhcmVudCBHZXRzIHRoZSBwYXJlbnQgYnVzaW5lc3Mgb2JqZWN0XHJcbiAqIEBwYXJhbSAge2Z1bmN0aW9ufSBvcHRpb25zLnNob3cgSW5kaWNhdGUgd2hlbiB0aGUgZW50cnkgd2lsbCBiZSBzaG93biwgc2hvdWxkIHJldHVybiBib29sZWFuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGdldFBhcmVudCA9IG9wdGlvbnMuZ2V0UGFyZW50O1xyXG5cclxuICB2YXIgbW9kZWxQcm9wZXJ0aWVzID0gb3B0aW9ucy5tb2RlbFByb3BlcnRpZXMsXHJcbiAgICAgIGNyZWF0ZVBhcmVudCA9IG9wdGlvbnMuY3JlYXRlUGFyZW50O1xyXG5cclxuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgYm8gPSBiby5nZXQoJ3Byb2Nlc3NSZWYnKTtcclxuICB9XHJcblxyXG4gIC8vIGJ1aWxkIHByb3BlcnRpZXMgZ3JvdXAgb25seSB3aGVuIHRoZSBwYXJ0aWNpcGFudCBoYXZlIGEgcHJvY2Vzc1JlZlxyXG4gIGlmICghYm8pIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGFzc2lnbihvcHRpb25zLCB7XHJcbiAgICBhZGRMYWJlbDogdHJhbnNsYXRlKCdBZGQgUHJvcGVydHknKSxcclxuICAgIGdldEVsZW1lbnRzOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBwYXJlbnQgPSBnZXRQYXJlbnQoZWxlbWVudCwgbm9kZSwgYm8pO1xyXG4gICAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZXMocGFyZW50KTtcclxuICAgIH0sXHJcbiAgICBhZGRFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciBjb21tYW5kcyA9IFtdLFxyXG4gICAgICAgICAgcGFyZW50ID0gZ2V0UGFyZW50KGVsZW1lbnQsIG5vZGUsIGJvKTtcclxuXHJcbiAgICAgIGlmICghcGFyZW50ICYmIHR5cGVvZiBjcmVhdGVQYXJlbnQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gY3JlYXRlUGFyZW50KGVsZW1lbnQsIGJvKTtcclxuICAgICAgICBwYXJlbnQgPSByZXN1bHQucGFyZW50O1xyXG4gICAgICAgIGNvbW1hbmRzLnB1c2gocmVzdWx0LmNtZCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0gZ2V0UHJvcGVydGllc0VsZW1lbnQocGFyZW50KTtcclxuICAgICAgaWYgKCFwcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgcHJvcGVydGllcyA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6UHJvcGVydGllcycsIHt9LCBwYXJlbnQsIGJwbW5GYWN0b3J5KTtcclxuXHJcbiAgICAgICAgaWYgKCFpc0V4dGVuc2lvbkVsZW1lbnRzKHBhcmVudCkpIHtcclxuICAgICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHBhcmVudCwgeyAncHJvcGVydGllcyc6IHByb3BlcnRpZXMgfSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5hZGRBbmRSZW1vdmVFbGVtZW50c0Zyb21MaXN0KFxyXG4gICAgICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgICAgICd2YWx1ZXMnLFxyXG4gICAgICAgICAgICAnZXh0ZW5zaW9uRWxlbWVudHMnLFxyXG4gICAgICAgICAgICBbIHByb3BlcnRpZXMgXSxcclxuICAgICAgICAgICAgW11cclxuICAgICAgICAgICkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHByb3BlcnR5UHJvcHMgPSB7fTtcclxuICAgICAgZm9yRWFjaChtb2RlbFByb3BlcnRpZXMsIGZ1bmN0aW9uKHByb3ApIHtcclxuICAgICAgICBwcm9wZXJ0eVByb3BzW3Byb3BdID0gdW5kZWZpbmVkO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIGNyZWF0ZSBpZCBpZiBuZWNlc3NhcnlcclxuICAgICAgaWYgKG1vZGVsUHJvcGVydGllcy5pbmRleE9mKCdpZCcpID49IDApIHtcclxuICAgICAgICBwcm9wZXJ0eVByb3BzLmlkID0gZ2VuZXJhdGVQcm9wZXJ0eUlkKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBwcm9wZXJ0eSA9IGVsZW1lbnRIZWxwZXIuY3JlYXRlRWxlbWVudCgnYWN0aXZpdGk6UHJvcGVydHknLCBwcm9wZXJ0eVByb3BzLCBwcm9wZXJ0aWVzLCBicG1uRmFjdG9yeSk7XHJcbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLmFkZEVsZW1lbnRzVG9saXN0KGVsZW1lbnQsIHByb3BlcnRpZXMsICd2YWx1ZXMnLCBbIHByb3BlcnR5IF0pKTtcclxuXHJcbiAgICAgIHJldHVybiBjb21tYW5kcztcclxuICAgIH0sXHJcbiAgICB1cGRhdGVFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSwgbm9kZSwgaWR4KSB7XHJcbiAgICAgIHZhciBwYXJlbnQgPSBnZXRQYXJlbnQoZWxlbWVudCwgbm9kZSwgYm8pLFxyXG4gICAgICAgICAgcHJvcGVydHkgPSBnZXRQcm9wZXJ0eVZhbHVlcyhwYXJlbnQpW2lkeF07XHJcblxyXG4gICAgICBmb3JFYWNoKG1vZGVsUHJvcGVydGllcywgZnVuY3Rpb24ocHJvcCkge1xyXG4gICAgICAgIHZhbHVlW3Byb3BdID0gdmFsdWVbcHJvcF0gfHwgdW5kZWZpbmVkO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlKTtcclxuICAgIH0sXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUsIG5vZGUsIGlkeCkge1xyXG4gICAgICAvLyB2YWxpZGF0ZSBpZCBpZiBuZWNlc3NhcnlcclxuICAgICAgaWYgKG1vZGVsUHJvcGVydGllcy5pbmRleE9mKCdpZCcpID49IDApIHtcclxuXHJcbiAgICAgICAgdmFyIHBhcmVudCA9IGdldFBhcmVudChlbGVtZW50LCBub2RlLCBibyksXHJcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBnZXRQcm9wZXJ0eVZhbHVlcyhwYXJlbnQpLFxyXG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaWR4XTtcclxuXHJcbiAgICAgICAgaWYgKHByb3BlcnR5KSB7XHJcbiAgICAgICAgICAvLyBjaGVjayBpZiBpZCBpcyB2YWxpZFxyXG4gICAgICAgICAgdmFyIHZhbGlkYXRpb25FcnJvciA9IHV0aWxzLmlzSWRWYWxpZChwcm9wZXJ0eSwgdmFsdWUuaWQsIHRyYW5zbGF0ZSk7XHJcblxyXG4gICAgICAgICAgaWYgKHZhbGlkYXRpb25FcnJvcikge1xyXG4gICAgICAgICAgICByZXR1cm4geyBpZDogdmFsaWRhdGlvbkVycm9yIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgcmVtb3ZlRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSwgaWR4KSB7XHJcbiAgICAgIHZhciBjb21tYW5kcyA9IFtdLFxyXG4gICAgICAgICAgcGFyZW50ID0gZ2V0UGFyZW50KGVsZW1lbnQsIG5vZGUsIGJvKSxcclxuICAgICAgICAgIHByb3BlcnRpZXMgPSBnZXRQcm9wZXJ0aWVzRWxlbWVudChwYXJlbnQpLFxyXG4gICAgICAgICAgcHJvcGVydHlWYWx1ZXMgPSBnZXRQcm9wZXJ0eVZhbHVlcyhwYXJlbnQpLFxyXG4gICAgICAgICAgY3VycmVudFByb3BlcnR5ID0gcHJvcGVydHlWYWx1ZXNbaWR4XTtcclxuXHJcbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnJlbW92ZUVsZW1lbnRzRnJvbUxpc3QoZWxlbWVudCwgcHJvcGVydGllcywgJ3ZhbHVlcycsIG51bGwsIFsgY3VycmVudFByb3BlcnR5IF0pKTtcclxuXHJcbiAgICAgIGlmIChwcm9wZXJ0eVZhbHVlcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAvLyByZW1vdmUgYWN0aXZpdGk6cHJvcGVydGllcyBpZiB0aGUgbGFzdCBleGlzdGluZyBwcm9wZXJ0eSBoYXMgYmVlbiByZW1vdmVkXHJcbiAgICAgICAgaWYgKCFpc0V4dGVuc2lvbkVsZW1lbnRzKHBhcmVudCkpIHtcclxuICAgICAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHBhcmVudCwgeyBwcm9wZXJ0aWVzOiB1bmRlZmluZWQgfSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmb3JFYWNoKHBhcmVudC52YWx1ZXMsIGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChpcyh2YWx1ZSwgJ2FjdGl2aXRpOlByb3BlcnRpZXMnKSkge1xyXG4gICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goZXh0ZW5zaW9uRWxlbWVudHNIZWxwZXIucmVtb3ZlRW50cnkoYm8sIGVsZW1lbnQsIHZhbHVlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gZmFjdG9yeS50YWJsZShvcHRpb25zKTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcztcclxuXHJcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdsb2Rhc2gvYXNzaWduJyk7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKSxcclxuICAgIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgYnBtbkZhY3RvcnksIG9wdGlvbnMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSBvcHRpb25zLmdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgICBoaWRlUmVzdWx0VmFyaWFibGUgPSBvcHRpb25zLmhpZGVSZXN1bHRWYXJpYWJsZSxcclxuICAgICAgaWQgPSBvcHRpb25zLmlkIHx8ICdyZXN1bHRWYXJpYWJsZSc7XHJcblxyXG5cclxuICB2YXIgcmVzdWx0VmFyaWFibGVFbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6IGlkLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnUmVzdWx0IFZhcmlhYmxlJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAncmVzdWx0VmFyaWFibGUnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgcmV0dXJuIHsgcmVzdWx0VmFyaWFibGU6IGJvLmdldCgnYWN0aXZpdGk6cmVzdWx0VmFyaWFibGUnKSB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcywgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICAgIHZhciByZXN1bHRWYXJpYWJsZSA9IHZhbHVlcy5yZXN1bHRWYXJpYWJsZSB8fCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSB7XHJcbiAgICAgICAgJ2FjdGl2aXRpOnJlc3VsdFZhcmlhYmxlJzogcmVzdWx0VmFyaWFibGVcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmIChpcyhibywgJ2FjdGl2aXRpOkRtbkNhcGFibGUnKSAmJiAhcmVzdWx0VmFyaWFibGUpIHtcclxuICAgICAgICBwcm9wcyA9IGFzc2lnbih7ICdhY3Rpdml0aTptYXBEZWNpc2lvblJlc3VsdCc6ICdyZXN1bHRMaXN0JyB9LCBwcm9wcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHByb3BzKTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgaGlkZVJlc3VsdFZhcmlhYmxlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIGhpZGVSZXN1bHRWYXJpYWJsZS5hcHBseShyZXN1bHRWYXJpYWJsZUVudHJ5LCBhcmd1bWVudHMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gWyByZXN1bHRWYXJpYWJsZUVudHJ5IF07XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnksXHJcbiAgICBlc2NhcGVIVE1MID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vVXRpbHMnKS5lc2NhcGVIVE1MLFxyXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9VdGlscycpO1xyXG5cclxuXHJcbmZ1bmN0aW9uIGdldFNjcmlwdFR5cGUobm9kZSkge1xyXG4gIHJldHVybiB1dGlscy5zZWxlY3RlZFR5cGUoJ3NlbGVjdFtuYW1lPXNjcmlwdFR5cGVdJywgbm9kZS5wYXJlbnRFbGVtZW50KTtcclxufVxyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oc2NyaXB0TGFuZ3VhZ2VQcm9wTmFtZSwgc2NyaXB0VmFsdWVQcm9wTmFtZSwgaXNGb3JtYXRSZXF1aXJlZCwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICB0ZW1wbGF0ZTpcclxuICAgICc8ZGl2IGNsYXNzPVwiYnBwLXJvdyBicHAtdGV4dGZpZWxkXCI+JyArXHJcbiAgICAgICc8bGFiZWwgZm9yPVwiY2FtLXNjcmlwdC1mb3JtYXRcIj4nICsgZXNjYXBlSFRNTCh0cmFuc2xhdGUoJ1NjcmlwdCBGb3JtYXQnKSkgKyAnPC9sYWJlbD4nICtcclxuICAgICAgJzxkaXYgY2xhc3M9XCJicHAtZmllbGQtd3JhcHBlclwiPicgK1xyXG4gICAgICAgICc8aW5wdXQgaWQ9XCJjYW0tc2NyaXB0LWZvcm1hdFwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNjcmlwdEZvcm1hdFwiIC8+JyArXHJcbiAgICAgICAgJzxidXR0b24gY2xhc3M9XCJjbGVhclwiIGRhdGEtYWN0aW9uPVwic2NyaXB0LmNsZWFyU2NyaXB0Rm9ybWF0XCIgZGF0YS1zaG93PVwic2NyaXB0LmNhbkNsZWFyU2NyaXB0Rm9ybWF0XCI+JyArXHJcbiAgICAgICAgICAnPHNwYW4+WDwvc3Bhbj4nICtcclxuICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICc8L2Rpdj4nICtcclxuICAgICc8L2Rpdj4nICtcclxuXHJcbiAgICAnPGRpdiBjbGFzcz1cImJwcC1yb3dcIj4nICtcclxuICAgICAgJzxsYWJlbCBmb3I9XCJjYW0tc2NyaXB0LXR5cGVcIj4nICsgZXNjYXBlSFRNTCh0cmFuc2xhdGUoJ1NjcmlwdCBUeXBlJykpICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLXdyYXBwZXJcIj4nICtcclxuICAgICAgICAnPHNlbGVjdCBpZD1cImNhbS1zY3JpcHQtdHlwZVwiIG5hbWU9XCJzY3JpcHRUeXBlXCIgZGF0YS12YWx1ZT4nICtcclxuICAgICAgICAgICc8b3B0aW9uIHZhbHVlPVwic2NyaXB0XCIgc2VsZWN0ZWQ+JyArIGVzY2FwZUhUTUwodHJhbnNsYXRlKCdJbmxpbmUgU2NyaXB0JykpICsgJzwvb3B0aW9uPicgK1xyXG4gICAgICAgICAgJzxvcHRpb24gdmFsdWU9XCJzY3JpcHRSZXNvdXJjZVwiPicgKyBlc2NhcGVIVE1MKHRyYW5zbGF0ZSgnRXh0ZXJuYWwgUmVzb3VyY2UnKSkgKyAnPC9vcHRpb24+JyArXHJcbiAgICAgICAgJzwvc2VsZWN0PicgK1xyXG4gICAgICAnPC9kaXY+JyArXHJcbiAgICAnPC9kaXY+JyArXHJcblxyXG4gICAgJzxkaXYgY2xhc3M9XCJicHAtcm93IGJwcC10ZXh0ZmllbGRcIj4nICtcclxuICAgICAgJzxsYWJlbCBmb3I9XCJjYW0tc2NyaXB0LXJlc291cmNlLXZhbFwiIGRhdGEtc2hvdz1cInNjcmlwdC5pc1NjcmlwdFJlc291cmNlXCI+JyArIGVzY2FwZUhUTUwodHJhbnNsYXRlKCdSZXNvdXJjZScpKSArICc8L2xhYmVsPicgK1xyXG4gICAgICAnPGRpdiBjbGFzcz1cImJwcC1maWVsZC13cmFwcGVyXCIgZGF0YS1zaG93PVwic2NyaXB0LmlzU2NyaXB0UmVzb3VyY2VcIj4nICtcclxuICAgICAgICAnPGlucHV0IGlkPVwiY2FtLXNjcmlwdC1yZXNvdXJjZS12YWxcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJzY3JpcHRSZXNvdXJjZVZhbHVlXCIgLz4nICtcclxuICAgICAgICAnPGJ1dHRvbiBjbGFzcz1cImNsZWFyXCIgZGF0YS1hY3Rpb249XCJzY3JpcHQuY2xlYXJTY3JpcHRSZXNvdXJjZVwiIGRhdGEtc2hvdz1cInNjcmlwdC5jYW5DbGVhclNjcmlwdFJlc291cmNlXCI+JyArXHJcbiAgICAgICAgICAnPHNwYW4+WDwvc3Bhbj4nICtcclxuICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICc8L2Rpdj4nICtcclxuICAgICc8L2Rpdj4nICtcclxuXHJcbiAgICAnPGRpdiBjbGFzcz1cImJwcC1yb3dcIj4nICtcclxuICAgICAgJzxsYWJlbCBmb3I9XCJjYW0tc2NyaXB0LXZhbFwiIGRhdGEtc2hvdz1cInNjcmlwdC5pc1NjcmlwdFwiPicgKyBlc2NhcGVIVE1MKHRyYW5zbGF0ZSgnU2NyaXB0JykpICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLXdyYXBwZXJcIiBkYXRhLXNob3c9XCJzY3JpcHQuaXNTY3JpcHRcIj4nICtcclxuICAgICAgICAnPHRleHRhcmVhIGlkPVwiY2FtLXNjcmlwdC12YWxcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJzY3JpcHRWYWx1ZVwiPjwvdGV4dGFyZWE+JyArXHJcbiAgICAgICc8L2Rpdj4nK1xyXG4gICAgJzwvZGl2PicsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBibykge1xyXG4gICAgICB2YXIgdmFsdWVzID0ge307XHJcblxyXG4gICAgICAvLyByZWFkIHZhbHVlcyBmcm9tIHhtbDpcclxuICAgICAgdmFyIGJvU2NyaXB0UmVzb3VyY2UgPSBiby5nZXQoJ2FjdGl2aXRpOnJlc291cmNlJyksXHJcbiAgICAgICAgICBib1NjcmlwdCA9IGJvLmdldChzY3JpcHRWYWx1ZVByb3BOYW1lKSxcclxuICAgICAgICAgIGJvU2NyaXB0Rm9ybWF0ID0gYm8uZ2V0KHNjcmlwdExhbmd1YWdlUHJvcE5hbWUpO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBib1NjcmlwdFJlc291cmNlICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHZhbHVlcy5zY3JpcHRSZXNvdXJjZVZhbHVlID0gYm9TY3JpcHRSZXNvdXJjZTtcclxuICAgICAgICB2YWx1ZXMuc2NyaXB0VHlwZSA9ICdzY3JpcHRSZXNvdXJjZSc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFsdWVzLnNjcmlwdFZhbHVlID0gYm9TY3JpcHQ7XHJcbiAgICAgICAgdmFsdWVzLnNjcmlwdFR5cGUgPSAnc2NyaXB0JztcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFsdWVzLnNjcmlwdEZvcm1hdCA9IGJvU2NyaXB0Rm9ybWF0O1xyXG5cclxuICAgICAgcmV0dXJuIHZhbHVlcztcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIGNvbnRhaW5lckVsZW1lbnQpIHtcclxuICAgICAgdmFyIHNjcmlwdEZvcm1hdCA9IHZhbHVlcy5zY3JpcHRGb3JtYXQsXHJcbiAgICAgICAgICBzY3JpcHRUeXBlID0gdmFsdWVzLnNjcmlwdFR5cGUsXHJcbiAgICAgICAgICBzY3JpcHRSZXNvdXJjZVZhbHVlID0gdmFsdWVzLnNjcmlwdFJlc291cmNlVmFsdWUsXHJcbiAgICAgICAgICBzY3JpcHRWYWx1ZSA9IHZhbHVlcy5zY3JpcHRWYWx1ZTtcclxuXHJcbiAgICAgIC8vIGluaXQgdXBkYXRlXHJcbiAgICAgIHZhciB1cGRhdGUgPSB7XHJcbiAgICAgICAgJ2FjdGl2aXRpOnJlc291cmNlJzogdW5kZWZpbmVkXHJcbiAgICAgIH07XHJcbiAgICAgIHVwZGF0ZVtzY3JpcHRWYWx1ZVByb3BOYW1lXSA9IHVuZGVmaW5lZDtcclxuICAgICAgdXBkYXRlW3NjcmlwdExhbmd1YWdlUHJvcE5hbWVdID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgaWYgKGlzRm9ybWF0UmVxdWlyZWQpIHtcclxuICAgICAgICAvLyBhbHdheXMgc2V0IGxhbmd1YWdlXHJcbiAgICAgICAgdXBkYXRlW3NjcmlwdExhbmd1YWdlUHJvcE5hbWVdID0gc2NyaXB0Rm9ybWF0IHx8ICcnO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgLy8gc2V0IGxhbmd1YWdlIG9ubHkgd2hlbiBzY3JpcHRGb3JtYXQgaGFzIGEgdmFsdWVcclxuICAgICAgaWYgKHNjcmlwdEZvcm1hdCAhPT0gJycpIHtcclxuICAgICAgICB1cGRhdGVbc2NyaXB0TGFuZ3VhZ2VQcm9wTmFtZV0gPSBzY3JpcHRGb3JtYXQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHNldCBlaXRoZXIgaW5saW5lIHNjcmlwdCBvciByZXNvdXJjZVxyXG4gICAgICBpZiAoJ3NjcmlwdFJlc291cmNlJyA9PT0gc2NyaXB0VHlwZSkge1xyXG4gICAgICAgIHVwZGF0ZVsnYWN0aXZpdGk6cmVzb3VyY2UnXSA9IHNjcmlwdFJlc291cmNlVmFsdWUgfHwgJyc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdXBkYXRlW3NjcmlwdFZhbHVlUHJvcE5hbWVdID0gc2NyaXB0VmFsdWUgfHwgJyc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB1cGRhdGU7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFyIHZhbGlkYXRpb25SZXN1bHQgPSB7fTtcclxuXHJcbiAgICAgIGlmICh2YWx1ZXMuc2NyaXB0VHlwZSA9PT0gJ3NjcmlwdCcgJiYgIXZhbHVlcy5zY3JpcHRWYWx1ZSkge1xyXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQuc2NyaXB0VmFsdWUgPSB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh2YWx1ZXMuc2NyaXB0VHlwZSA9PT0gJ3NjcmlwdFJlc291cmNlJyAmJiAhdmFsdWVzLnNjcmlwdFJlc291cmNlVmFsdWUpIHtcclxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0LnNjcmlwdFJlc291cmNlVmFsdWUgPSB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc0Zvcm1hdFJlcXVpcmVkICYmICghdmFsdWVzLnNjcmlwdEZvcm1hdCB8fCB2YWx1ZXMuc2NyaXB0Rm9ybWF0Lmxlbmd0aCA9PT0gMCkpIHtcclxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0LnNjcmlwdEZvcm1hdCA9IHRyYW5zbGF0ZSgnTXVzdCBwcm92aWRlIGEgdmFsdWUnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyU2NyaXB0Rm9ybWF0OiBmdW5jdGlvbihlbGVtZW50LCBpbnB1dE5vZGUsIGJ0bk5vZGUsIHNjb3BlTm9kZSkge1xyXG4gICAgICBkb21RdWVyeSgnaW5wdXRbbmFtZT1zY3JpcHRGb3JtYXRdJywgc2NvcGVOb2RlKS52YWx1ZT0nJztcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBjYW5DbGVhclNjcmlwdEZvcm1hdDogZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlLCBidG5Ob2RlLCBzY29wZU5vZGUpIHtcclxuICAgICAgdmFyIGlucHV0ID0gZG9tUXVlcnkoJ2lucHV0W25hbWU9c2NyaXB0Rm9ybWF0XScsIHNjb3BlTm9kZSk7XHJcblxyXG4gICAgICByZXR1cm4gaW5wdXQudmFsdWUgIT09ICcnO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhclNjcmlwdFJlc291cmNlOiBmdW5jdGlvbihlbGVtZW50LCBpbnB1dE5vZGUsIGJ0bk5vZGUsIHNjb3BlTm9kZSkge1xyXG4gICAgICBkb21RdWVyeSgnaW5wdXRbbmFtZT1zY3JpcHRSZXNvdXJjZVZhbHVlXScsIHNjb3BlTm9kZSkudmFsdWU9Jyc7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgY2FuQ2xlYXJTY3JpcHRSZXNvdXJjZTogZnVuY3Rpb24oZWxlbWVudCwgaW5wdXROb2RlLCBidG5Ob2RlLCBzY29wZU5vZGUpIHtcclxuICAgICAgdmFyIGlucHV0ID0gZG9tUXVlcnkoJ2lucHV0W25hbWU9c2NyaXB0UmVzb3VyY2VWYWx1ZV0nLCBzY29wZU5vZGUpO1xyXG5cclxuICAgICAgcmV0dXJuIGlucHV0LnZhbHVlICE9PSAnJztcclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXJTY3JpcHQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSwgYnRuTm9kZSwgc2NvcGVOb2RlKSB7XHJcbiAgICAgIGRvbVF1ZXJ5KCd0ZXh0YXJlYVtuYW1lPXNjcmlwdFZhbHVlXScsIHNjb3BlTm9kZSkudmFsdWU9Jyc7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgY2FuQ2xlYXJTY3JpcHQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSwgYnRuTm9kZSwgc2NvcGVOb2RlKSB7XHJcbiAgICAgIHZhciBpbnB1dCA9IGRvbVF1ZXJ5KCd0ZXh0YXJlYVtuYW1lPXNjcmlwdFZhbHVlXScsIHNjb3BlTm9kZSk7XHJcblxyXG4gICAgICByZXR1cm4gaW5wdXQudmFsdWUgIT09ICcnO1xyXG4gICAgfSxcclxuXHJcbiAgICBpc1NjcmlwdFJlc291cmNlOiBmdW5jdGlvbihlbGVtZW50LCBpbnB1dE5vZGUsIGJ0bk5vZGUsIHNjb3BlTm9kZSkge1xyXG4gICAgICB2YXIgc2NyaXB0VHlwZSA9IGdldFNjcmlwdFR5cGUoc2NvcGVOb2RlKTtcclxuICAgICAgcmV0dXJuIHNjcmlwdFR5cGUgPT09ICdzY3JpcHRSZXNvdXJjZSc7XHJcbiAgICB9LFxyXG5cclxuICAgIGlzU2NyaXB0OiBmdW5jdGlvbihlbGVtZW50LCBpbnB1dE5vZGUsIGJ0bk5vZGUsIHNjb3BlTm9kZSkge1xyXG4gICAgICB2YXIgc2NyaXB0VHlwZSA9IGdldFNjcmlwdFR5cGUoc2NvcGVOb2RlKTtcclxuICAgICAgcmV0dXJuIHNjcmlwdFR5cGUgPT09ICdzY3JpcHQnO1xyXG4gICAgfVxyXG5cclxuICB9O1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XHJcblxyXG52YXIgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBicG1uRmFjdG9yeSwgb3B0aW9ucywgdHJhbnNsYXRlKSB7XHJcblxyXG4gIHZhciBnZXRCdXNpbmVzc09iamVjdCA9IG9wdGlvbnMuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG4gIHZhciBpc1N0YXJ0YWJsZUluVGFza2xpc3RFbnRyeSA9IGVudHJ5RmFjdG9yeS5jaGVja2JveCh7XHJcbiAgICBpZDogJ2lzU3RhcnRhYmxlSW5UYXNrbGlzdCcsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdTdGFydGFibGUnKSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICdpc1N0YXJ0YWJsZUluVGFza2xpc3QnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuICAgICAgdmFyIGlzU3RhcnRhYmxlSW5UYXNrbGlzdCA9IGJvLmdldCgnYWN0aXZpdGk6aXNTdGFydGFibGVJblRhc2tsaXN0Jyk7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzU3RhcnRhYmxlSW5UYXNrbGlzdDogaXNTdGFydGFibGVJblRhc2tsaXN0ID8gaXNTdGFydGFibGVJblRhc2tsaXN0IDogJydcclxuICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMpIHtcclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgYm8sIHtcclxuICAgICAgICAnYWN0aXZpdGk6aXNTdGFydGFibGVJblRhc2tsaXN0JzogISF2YWx1ZXMuaXNTdGFydGFibGVJblRhc2tsaXN0XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIFtcclxuICAgIGlzU3RhcnRhYmxlSW5UYXNrbGlzdEVudHJ5XHJcbiAgXTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG52YXIgTW9kZWxVdGlsID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKSxcclxuICAgIGlzID0gTW9kZWxVdGlsLmlzLFxyXG4gICAgZ2V0QnVzaW5lc3NPYmplY3QgPSBNb2RlbFV0aWwuZ2V0QnVzaW5lc3NPYmplY3Q7XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgZ2V0VmFsdWUgPSBmdW5jdGlvbihidXNpbmVzc09iamVjdCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgdmFyIGRvY3VtZW50YXRpb25zID0gYnVzaW5lc3NPYmplY3QgJiYgYnVzaW5lc3NPYmplY3QuZ2V0KCdkb2N1bWVudGF0aW9uJyksXHJcbiAgICAgICAgICB0ZXh0ID0gKGRvY3VtZW50YXRpb25zICYmIGRvY3VtZW50YXRpb25zLmxlbmd0aCA+IDApID8gZG9jdW1lbnRhdGlvbnNbMF0udGV4dCA6ICcnO1xyXG5cclxuICAgICAgcmV0dXJuIHsgZG9jdW1lbnRhdGlvbjogdGV4dCB9O1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICB2YXIgc2V0VmFsdWUgPSBmdW5jdGlvbihidXNpbmVzc09iamVjdCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgbmV3T2JqZWN0TGlzdCA9IFtdO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZXMuZG9jdW1lbnRhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWVzLmRvY3VtZW50YXRpb24gIT09ICcnKSB7XHJcbiAgICAgICAgbmV3T2JqZWN0TGlzdC5wdXNoKGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpEb2N1bWVudGF0aW9uJywge1xyXG4gICAgICAgICAgdGV4dDogdmFsdWVzLmRvY3VtZW50YXRpb25cclxuICAgICAgICB9KSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIuc2V0TGlzdChlbGVtZW50LCBidXNpbmVzc09iamVjdCwgJ2RvY3VtZW50YXRpb24nLCBuZXdPYmplY3RMaXN0KTtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgLy8gRWxlbWVudCBEb2N1bWVudGF0aW9uXHJcbiAgdmFyIGVsZW1lbnREb2N1RW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEJveCh7XHJcbiAgICBpZDogJ2RvY3VtZW50YXRpb24nLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRWxlbWVudCBEb2N1bWVudGF0aW9uJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnZG9jdW1lbnRhdGlvbidcclxuICB9KTtcclxuXHJcbiAgZWxlbWVudERvY3VFbnRyeS5zZXQgPSBzZXRWYWx1ZShnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSk7XHJcblxyXG4gIGVsZW1lbnREb2N1RW50cnkuZ2V0ID0gZ2V0VmFsdWUoZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkpO1xyXG5cclxuICBncm91cC5lbnRyaWVzLnB1c2goZWxlbWVudERvY3VFbnRyeSk7XHJcblxyXG5cclxuICB2YXIgcHJvY2Vzc1JlZjtcclxuXHJcbiAgLy8gUHJvY2VzcyBEb2N1bWVudGF0aW9uIHdoZW4gaGF2aW5nIGEgQ29sbGFib3JhdGlvbiBEaWFncmFtXHJcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcclxuXHJcbiAgICBwcm9jZXNzUmVmID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkucHJvY2Vzc1JlZjtcclxuXHJcbiAgICAvLyBkbyBub3Qgc2hvdyBmb3IgY29sbGFwc2VkIFBvb2xzL1BhcnRpY2lwYW50c1xyXG4gICAgaWYgKHByb2Nlc3NSZWYpIHtcclxuICAgICAgdmFyIHByb2Nlc3NEb2N1RW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEJveCh7XHJcbiAgICAgICAgaWQ6ICdwcm9jZXNzLWRvY3VtZW50YXRpb24nLFxyXG4gICAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1Byb2Nlc3MgRG9jdW1lbnRhdGlvbicpLFxyXG4gICAgICAgIG1vZGVsUHJvcGVydHk6ICdkb2N1bWVudGF0aW9uJ1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHByb2Nlc3NEb2N1RW50cnkuc2V0ID0gc2V0VmFsdWUocHJvY2Vzc1JlZik7XHJcblxyXG4gICAgICBwcm9jZXNzRG9jdUVudHJ5LmdldCA9IGdldFZhbHVlKHByb2Nlc3NSZWYpO1xyXG5cclxuICAgICAgZ3JvdXAuZW50cmllcy5wdXNoKHByb2Nlc3NEb2N1RW50cnkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBpc0FueSA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsJykuaXNBbnksXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICBldmVudERlZmluaXRpb25IZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvRXZlbnREZWZpbml0aW9uSGVscGVyJyk7XHJcblxyXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XHJcblxyXG52YXIgbWVzc2FnZSA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vTWVzc2FnZUV2ZW50RGVmaW5pdGlvbicpLFxyXG4gICAgc2lnbmFsID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9TaWduYWxFdmVudERlZmluaXRpb24nKSxcclxuICAgIGVycm9yID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9FcnJvckV2ZW50RGVmaW5pdGlvbicpLFxyXG4gICAgZXNjYWxhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vRXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbicpLFxyXG4gICAgdGltZXIgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL1RpbWVyRXZlbnREZWZpbml0aW9uJyksXHJcbiAgICBjb21wZW5zYXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL0NvbXBlbnNhdGVFdmVudERlZmluaXRpb24nKSxcclxuICAgIGNvbmRpdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24vQ29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nKTtcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpIHtcclxuICB2YXIgZXZlbnRzID0gW1xyXG4gICAgJ2JwbW46U3RhcnRFdmVudCcsXHJcbiAgICAnYnBtbjpFbmRFdmVudCcsXHJcbiAgICAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JyxcclxuICAgICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxyXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCdcclxuICBdO1xyXG5cclxuICAvLyBNZXNzYWdlIGFuZCBTaWduYWwgRXZlbnQgRGVmaW5pdGlvblxyXG4gIGZvckVhY2goZXZlbnRzLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgaWYgKGlzKGVsZW1lbnQsIGV2ZW50KSkge1xyXG5cclxuICAgICAgdmFyIG1lc3NhZ2VFdmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25IZWxwZXIuZ2V0TWVzc2FnZUV2ZW50RGVmaW5pdGlvbihlbGVtZW50KSxcclxuICAgICAgICAgIHNpZ25hbEV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRTaWduYWxFdmVudERlZmluaXRpb24oZWxlbWVudCk7XHJcblxyXG4gICAgICBpZiAobWVzc2FnZUV2ZW50RGVmaW5pdGlvbikge1xyXG4gICAgICAgIG1lc3NhZ2UoZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBtZXNzYWdlRXZlbnREZWZpbml0aW9uLCB0cmFuc2xhdGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc2lnbmFsRXZlbnREZWZpbml0aW9uKSB7XHJcbiAgICAgICAgc2lnbmFsKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgc2lnbmFsRXZlbnREZWZpbml0aW9uLCB0cmFuc2xhdGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAvLyBTcGVjaWFsIENhc2U6IFJlY2VpdmUgVGFza1xyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpSZWNlaXZlVGFzaycpKSB7XHJcbiAgICBtZXNzYWdlKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksIHRyYW5zbGF0ZSk7XHJcbiAgfVxyXG5cclxuICAvLyBFcnJvciBFdmVudCBEZWZpbml0aW9uXHJcbiAgdmFyIGVycm9yRXZlbnRzID0gW1xyXG4gICAgJ2JwbW46U3RhcnRFdmVudCcsXHJcbiAgICAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcclxuICAgICdicG1uOkVuZEV2ZW50J1xyXG4gIF07XHJcblxyXG4gIGZvckVhY2goZXJyb3JFdmVudHMsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICBpZiAoaXMoZWxlbWVudCwgZXZlbnQpKSB7XHJcblxyXG4gICAgICB2YXIgZXJyb3JFdmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25IZWxwZXIuZ2V0RXJyb3JFdmVudERlZmluaXRpb24oZWxlbWVudCk7XHJcblxyXG4gICAgICBpZiAoZXJyb3JFdmVudERlZmluaXRpb24pIHtcclxuXHJcbiAgICAgICAgZXJyb3IoZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlcnJvckV2ZW50RGVmaW5pdGlvbiwgdHJhbnNsYXRlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAvLyBFc2NhbGF0aW9uIEV2ZW50IERlZmluaXRpb25cclxuICB2YXIgZXNjYWxhdGlvbkV2ZW50cyA9IFtcclxuICAgICdicG1uOlN0YXJ0RXZlbnQnLFxyXG4gICAgJ2JwbW46Qm91bmRhcnlFdmVudCcsXHJcbiAgICAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JyxcclxuICAgICdicG1uOkVuZEV2ZW50J1xyXG4gIF07XHJcblxyXG4gIGZvckVhY2goZXNjYWxhdGlvbkV2ZW50cywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIGlmIChpcyhlbGVtZW50LCBldmVudCkpIHtcclxuXHJcbiAgICAgIHZhciBzaG93RXNjYWxhdGlvbkNvZGVWYXJpYWJsZSA9IGlzKGVsZW1lbnQsICdicG1uOlN0YXJ0RXZlbnQnKSB8fCBpcyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50Jyk7XHJcblxyXG4gICAgICAvLyBnZXQgYnVzaW5lc3Mgb2JqZWN0XHJcbiAgICAgIHZhciBlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uSGVscGVyLmdldEVzY2FsYXRpb25FdmVudERlZmluaXRpb24oZWxlbWVudCk7XHJcblxyXG4gICAgICBpZiAoZXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbikge1xyXG4gICAgICAgIGVzY2FsYXRpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uLCBzaG93RXNjYWxhdGlvbkNvZGVWYXJpYWJsZSxcclxuICAgICAgICAgIHRyYW5zbGF0ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIC8vIFRpbWVyIEV2ZW50IERlZmluaXRpb25cclxuICB2YXIgdGltZXJFdmVudHMgPSBbXHJcbiAgICAnYnBtbjpTdGFydEV2ZW50JyxcclxuICAgICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxyXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCdcclxuICBdO1xyXG5cclxuICBmb3JFYWNoKHRpbWVyRXZlbnRzLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgaWYgKGlzKGVsZW1lbnQsIGV2ZW50KSkge1xyXG5cclxuICAgICAgLy8gZ2V0IGJ1c2luZXNzIG9iamVjdFxyXG4gICAgICB2YXIgdGltZXJFdmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25IZWxwZXIuZ2V0VGltZXJFdmVudERlZmluaXRpb24oZWxlbWVudCk7XHJcblxyXG4gICAgICBpZiAodGltZXJFdmVudERlZmluaXRpb24pIHtcclxuICAgICAgICB0aW1lcihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHRpbWVyRXZlbnREZWZpbml0aW9uLCB0cmFuc2xhdGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vIENvbXBlbnNhdGUgRXZlbnQgRGVmaW5pdGlvblxyXG4gIHZhciBjb21wZW5zYXRpb25FdmVudHMgPSBbXHJcbiAgICAnYnBtbjpFbmRFdmVudCcsXHJcbiAgICAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50J1xyXG4gIF07XHJcblxyXG4gIGZvckVhY2goY29tcGVuc2F0aW9uRXZlbnRzLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgaWYgKGlzKGVsZW1lbnQsIGV2ZW50KSkge1xyXG5cclxuICAgICAgLy8gZ2V0IGJ1c2luZXNzIG9iamVjdFxyXG4gICAgICB2YXIgY29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbkhlbHBlci5nZXRDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xyXG5cclxuICAgICAgaWYgKGNvbXBlbnNhdGVFdmVudERlZmluaXRpb24pIHtcclxuICAgICAgICBjb21wZW5zYXRpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBjb21wZW5zYXRlRXZlbnREZWZpbml0aW9uLCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIENvbmRpdGlvbmFsIEV2ZW50IERlZmluaXRpb25cclxuICB2YXIgY29uZGl0aW9uYWxFdmVudHMgPSBbXHJcbiAgICAnYnBtbjpTdGFydEV2ZW50JyxcclxuICAgICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxyXG4gICAgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXHJcbiAgICAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50J1xyXG4gIF07XHJcblxyXG4gIGlmIChpc0FueShlbGVtZW50LCBjb25kaXRpb25hbEV2ZW50cykpIHtcclxuXHJcbiAgICAvLyBnZXQgYnVzaW5lc3Mgb2JqZWN0XHJcbiAgICB2YXIgY29uZGl0aW9uYWxFdmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25IZWxwZXIuZ2V0Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24oZWxlbWVudCk7XHJcblxyXG4gICAgaWYgKGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uKSB7XHJcbiAgICAgIGNvbmRpdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uLCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xyXG5cclxudmFyIHBhcnRpY2lwYW50SGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL1BhcnRpY2lwYW50SGVscGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIGlmICghYm8pIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgfHwgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgYm8uZ2V0KCdwcm9jZXNzUmVmJykpKSB7XHJcblxyXG4gICAgdmFyIGV4ZWN1dGFibGVFbnRyeSA9IGVudHJ5RmFjdG9yeS5jaGVja2JveCh7XHJcbiAgICAgIGlkOiAncHJvY2Vzcy1pcy1leGVjdXRhYmxlJyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXhlY3V0YWJsZScpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5OiAnaXNFeGVjdXRhYmxlJ1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gaW4gcGFydGljaXBhbnRzIHdlIGhhdmUgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHNldCBhbmQgZ2V0XHJcbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xyXG4gICAgICBleGVjdXRhYmxlRW50cnkuZ2V0ID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBwYXJ0aWNpcGFudEhlbHBlci5nZXRQcm9jZXNzQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgJ2lzRXhlY3V0YWJsZScpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgZXhlY3V0YWJsZUVudHJ5LnNldCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICAgIHJldHVybiBwYXJ0aWNpcGFudEhlbHBlci5tb2RpZnlQcm9jZXNzQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgJ2lzRXhlY3V0YWJsZScsIHZhbHVlcyk7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKGV4ZWN1dGFibGVFbnRyeSk7XHJcbiAgfVxyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXHJcbiAgICBnZXRCdXNpbmVzc09iamVjdCA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL1V0aWxzJyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGdyb3VwLCBlbGVtZW50LCB0cmFuc2xhdGUsIG9wdGlvbnMpIHtcclxuXHJcbiAgdmFyIGRlc2NyaXB0aW9uID0gb3B0aW9ucyAmJiBvcHRpb25zLmRlc2NyaXB0aW9uO1xyXG5cclxuICAvLyBJZFxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudmFsaWRhdGlvbkF3YXJlVGV4dEZpZWxkKHtcclxuICAgIGlkOiAnaWQnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSWQnKSxcclxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiAmJiB0cmFuc2xhdGUoZGVzY3JpcHRpb24pLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2lkJyxcclxuICAgIGdldFByb3BlcnR5OiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgIHJldHVybiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5pZDtcclxuICAgIH0sXHJcbiAgICBzZXRQcm9wZXJ0eTogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydGllcykge1xyXG5cclxuICAgICAgZWxlbWVudCA9IGVsZW1lbnQubGFiZWxUYXJnZXQgfHwgZWxlbWVudDtcclxuXHJcbiAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBwcm9wZXJ0aWVzKTtcclxuICAgIH0sXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciBpZFZhbHVlID0gdmFsdWVzLmlkO1xyXG5cclxuICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gICAgICB2YXIgaWRFcnJvciA9IHV0aWxzLmlzSWRWYWxpZChibywgaWRWYWx1ZSwgdHJhbnNsYXRlKTtcclxuXHJcbiAgICAgIHJldHVybiBpZEVycm9yID8geyBpZDogaWRFcnJvciB9IDoge307XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcclxuICAgIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5JyksXHJcbiAgICBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJ2xvZGFzaC9mb3JFYWNoJyk7XHJcblxyXG5mdW5jdGlvbiBnZXRMaW5rRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcclxuXHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIHZhciBsaW5rRXZlbnREZWZpbml0aW9uID0gbnVsbDtcclxuICBpZiAoYm8uZXZlbnREZWZpbml0aW9ucykge1xyXG4gICAgZm9yRWFjaChiby5ldmVudERlZmluaXRpb25zLCBmdW5jdGlvbihldmVudERlZmluaXRpb24pIHtcclxuICAgICAgaWYgKGlzKGV2ZW50RGVmaW5pdGlvbiwgJ2JwbW46TGlua0V2ZW50RGVmaW5pdGlvbicpKSB7XHJcbiAgICAgICAgbGlua0V2ZW50RGVmaW5pdGlvbiA9IGV2ZW50RGVmaW5pdGlvbjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbGlua0V2ZW50RGVmaW5pdGlvbjtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgdHJhbnNsYXRlKSB7XHJcbiAgdmFyIGxpbmtFdmVudHMgPSBbICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLCAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyBdO1xyXG5cclxuICBmb3JFYWNoKGxpbmtFdmVudHMsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICBpZiAoaXMoZWxlbWVudCwgZXZlbnQpKSB7XHJcblxyXG4gICAgICB2YXIgbGlua0V2ZW50RGVmaW5pdGlvbiA9IGdldExpbmtFdmVudERlZmluaXRpb24oZWxlbWVudCk7XHJcblxyXG4gICAgICBpZiAobGlua0V2ZW50RGVmaW5pdGlvbikge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgICAgICAgaWQ6ICdsaW5rLWV2ZW50JyxcclxuICAgICAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0xpbmsgTmFtZScpLFxyXG4gICAgICAgICAgbW9kZWxQcm9wZXJ0eTogJ2xpbmstbmFtZSdcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZW50cnkuZ2V0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICByZXR1cm4geyAnbGluay1uYW1lJzogbGlua0V2ZW50RGVmaW5pdGlvbi5nZXQoJ25hbWUnKSB9O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGVudHJ5LnNldCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICAgICAgdmFyIG5ld1Byb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHZhbHVlc1snbGluay1uYW1lJ11cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGxpbmtFdmVudERlZmluaXRpb24sIG5ld1Byb3BlcnRpZXMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxufTtcclxuXHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBuYW1lRW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbi9OYW1lJyksXHJcbiAgICBjcmVhdGVDYXRlZ29yeVZhbHVlID0gcmVxdWlyZSgnLi4vLi4vLi4vaGVscGVyL0NhdGVnb3J5SGVscGVyJykuY3JlYXRlQ2F0ZWdvcnlWYWx1ZSxcclxuICAgIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdDtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBjYW52YXMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICBmdW5jdGlvbiBpbml0aWFsaXplQ2F0ZWdvcnkoc2VtYW50aWMpIHtcclxuICAgIHZhciByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpLFxyXG4gICAgICAgIGRlZmluaXRpb25zID0gZ2V0QnVzaW5lc3NPYmplY3Qocm9vdEVsZW1lbnQpLiRwYXJlbnQsXHJcbiAgICAgICAgY2F0ZWdvcnlWYWx1ZSA9IGNyZWF0ZUNhdGVnb3J5VmFsdWUoZGVmaW5pdGlvbnMsIGJwbW5GYWN0b3J5KTtcclxuXHJcbiAgICBzZW1hbnRpYy5jYXRlZ29yeVZhbHVlUmVmID0gY2F0ZWdvcnlWYWx1ZTtcclxuXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRHcm91cE5hbWUoZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcclxuICAgICAgICBjYXRlZ29yeVZhbHVlUmVmID0gYm8uY2F0ZWdvcnlWYWx1ZVJlZjtcclxuXHJcbiAgICBpZiAoIWNhdGVnb3J5VmFsdWVSZWYpIHtcclxuICAgICAgaW5pdGlhbGl6ZUNhdGVnb3J5KGJvKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBuZWVkcyBkaXJlY3QgY2FsbCB0byB1cGRhdGUgY2F0ZWdvcnlWYWx1ZSBwcm9wZXJseVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVMYWJlbCcsXHJcbiAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICAgIG5ld0xhYmVsOiB2YWx1ZXMuY2F0ZWdvcnlWYWx1ZVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0R3JvdXBOYW1lKGVsZW1lbnQpIHtcclxuICAgIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxyXG4gICAgICAgIHZhbHVlID0gKGJvLmNhdGVnb3J5VmFsdWVSZWYgfHwge30pLnZhbHVlO1xyXG5cclxuICAgIHJldHVybiB7IGNhdGVnb3J5VmFsdWU6IHZhbHVlIH07XHJcbiAgfVxyXG5cclxuICBpZiAoIWlzKGVsZW1lbnQsICdicG1uOkNvbGxhYm9yYXRpb24nKSkge1xyXG5cclxuICAgIHZhciBvcHRpb25zO1xyXG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcclxuICAgICAgb3B0aW9ucyA9IHsgbW9kZWxQcm9wZXJ0eTogJ3RleHQnLCBsYWJlbDogdHJhbnNsYXRlKCdUZXh0JykgfTtcclxuICAgIH0gZWxzZSBpZiAoaXMoZWxlbWVudCwgJ2JwbW46R3JvdXAnKSkge1xyXG4gICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgIG1vZGVsUHJvcGVydHk6ICdjYXRlZ29yeVZhbHVlJyxcclxuICAgICAgICBsYWJlbDogdHJhbnNsYXRlKCdDYXRlZ29yeSBWYWx1ZScpLFxyXG4gICAgICAgIGdldDogZ2V0R3JvdXBOYW1lLFxyXG4gICAgICAgIHNldDogc2V0R3JvdXBOYW1lXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbmFtZVxyXG4gICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KG5hbWVFbnRyeUZhY3RvcnkoZWxlbWVudCwgb3B0aW9ucywgdHJhbnNsYXRlKSk7XHJcblxyXG4gIH1cclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBpcyA9IHJlcXVpcmUoJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJykuaXMsXHJcbiAgICBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxyXG4gICAgcGFydGljaXBhbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXIvUGFydGljaXBhbnRIZWxwZXInKSxcclxuICAgIGdldEJ1c2luZXNzT2JqZWN0ID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5nZXRCdXNpbmVzc09iamVjdCxcclxuICAgIG5hbWVFbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uL05hbWUnKSxcclxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vVXRpbHMnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIHRyYW5zbGF0ZSwgb3B0aW9ucykge1xyXG4gIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICB2YXIgcHJvY2Vzc0lkRGVzY3JpcHRpb24gPSBvcHRpb25zICYmIG9wdGlvbnMucHJvY2Vzc0lkRGVzY3JpcHRpb247XHJcblxyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgfHwgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgYnVzaW5lc3NPYmplY3QuZ2V0KCdwcm9jZXNzUmVmJykpKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBwcm9jZXNzSWRcclxuICAgICAqL1xyXG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcclxuICAgICAgdmFyIGlkRW50cnkgPSBlbnRyeUZhY3RvcnkudmFsaWRhdGlvbkF3YXJlVGV4dEZpZWxkKHtcclxuICAgICAgICBpZDogJ3Byb2Nlc3MtaWQnLFxyXG4gICAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1Byb2Nlc3MgSWQnKSxcclxuICAgICAgICBkZXNjcmlwdGlvbjogcHJvY2Vzc0lkRGVzY3JpcHRpb24gJiYgdHJhbnNsYXRlKHByb2Nlc3NJZERlc2NyaXB0aW9uKSxcclxuICAgICAgICBtb2RlbFByb3BlcnR5OiAncHJvY2Vzc0lkJ1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIGluIHBhcnRpY2lwYW50cyB3ZSBoYXZlIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBzZXQgYW5kIGdldFxyXG4gICAgICBpZEVudHJ5LmdldCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgcHJvcGVydGllcyA9IHBhcnRpY2lwYW50SGVscGVyLmdldFByb2Nlc3NCdXNpbmVzc09iamVjdChlbGVtZW50LCAnaWQnKTtcclxuICAgICAgICByZXR1cm4geyBwcm9jZXNzSWQ6IHByb3BlcnRpZXMuaWQgfTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlkRW50cnkuc2V0ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcnRpY2lwYW50SGVscGVyLm1vZGlmeVByb2Nlc3NCdXNpbmVzc09iamVjdChlbGVtZW50LCAnaWQnLCB7IGlkOiB2YWx1ZXMucHJvY2Vzc0lkIH0pO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWRFbnRyeS52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICAgIHZhciBpZFZhbHVlID0gdmFsdWVzLnByb2Nlc3NJZDtcclxuXHJcbiAgICAgICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gICAgICAgIHZhciBwcm9jZXNzSWRFcnJvciA9IHV0aWxzLmlzSWRWYWxpZChiby5wcm9jZXNzUmVmLCBpZFZhbHVlLCB0cmFuc2xhdGUpO1xyXG5cclxuICAgICAgICByZXR1cm4gcHJvY2Vzc0lkRXJyb3IgPyB7IHByb2Nlc3NJZDogcHJvY2Vzc0lkRXJyb3IgfSA6IHt9O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgZ3JvdXAuZW50cmllcy5wdXNoKGlkRW50cnkpO1xyXG5cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBwcm9jZXNzIG5hbWVcclxuICAgICAgICovXHJcbiAgICAgIHZhciBwcm9jZXNzTmFtZUVudHJ5ID0gbmFtZUVudHJ5RmFjdG9yeShlbGVtZW50LCB7XHJcbiAgICAgICAgaWQ6ICdwcm9jZXNzLW5hbWUnLFxyXG4gICAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1Byb2Nlc3MgTmFtZScpXHJcbiAgICAgIH0pWzBdO1xyXG5cclxuICAgICAgLy8gaW4gcGFydGljaXBhbnRzIHdlIGhhdmUgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHNldCBhbmQgZ2V0XHJcbiAgICAgIHByb2Nlc3NOYW1lRW50cnkuZ2V0ID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBwYXJ0aWNpcGFudEhlbHBlci5nZXRQcm9jZXNzQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgJ25hbWUnKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHByb2Nlc3NOYW1lRW50cnkuc2V0ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcnRpY2lwYW50SGVscGVyLm1vZGlmeVByb2Nlc3NCdXNpbmVzc09iamVjdChlbGVtZW50LCAnbmFtZScsIHZhbHVlcyk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBncm91cC5lbnRyaWVzLnB1c2gocHJvY2Vzc05hbWVFbnRyeSk7XHJcbiAgICB9XHJcbiAgfVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZW50cnlGYWN0b3J5ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vZmFjdG9yeS9FbnRyeUZhY3RvcnknKTtcclxuXHJcbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyksXHJcbiAgICBldmVudERlZmluaXRpb25IZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRXZlbnREZWZpbml0aW9uSGVscGVyJyksXHJcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL1V0aWxzJyk7XHJcblxyXG52YXIgZ2V0QnVzaW5lc3NPYmplY3QgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmdldEJ1c2luZXNzT2JqZWN0LFxyXG4gICAgaXMgPSByZXF1aXJlKCdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCcpLmlzO1xyXG5cclxudmFyIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpLFxyXG4gICAgZmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9maW5kJyksXHJcbiAgICBmaWx0ZXIgPSByZXF1aXJlKCdsb2Rhc2gvZmlsdGVyJyk7XHJcblxyXG5cclxuZnVuY3Rpb24gZ2V0Q29udGFpbmVkQWN0aXZpdGllcyhlbGVtZW50KSB7XHJcbiAgcmV0dXJuIGdldEZsb3dFbGVtZW50cyhlbGVtZW50LCAnYnBtbjpBY3Rpdml0eScpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRDb250YWluZWRCb3VuZGFyeUV2ZW50cyhlbGVtZW50KSB7XHJcbiAgcmV0dXJuIGdldEZsb3dFbGVtZW50cyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50Jyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEZsb3dFbGVtZW50cyhlbGVtZW50LCB0eXBlKSB7XHJcbiAgcmV0dXJuIHV0aWxzLmZpbHRlckVsZW1lbnRzQnlUeXBlKGVsZW1lbnQuZmxvd0VsZW1lbnRzLCB0eXBlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNDb21wZW5zYXRpb25FdmVudEF0dGFjaGVkVG9BY3Rpdml0eShhY3Rpdml0eSwgYm91bmRhcnlFdmVudHMpIHtcclxuICB2YXIgYWN0aXZpdHlJZCA9IGFjdGl2aXR5LmlkO1xyXG4gIHZhciBib3VuZGFyeUV2ZW50ID0gZmluZChib3VuZGFyeUV2ZW50cywgZnVuY3Rpb24oYm91bmRhcnlFdmVudCkge1xyXG4gICAgdmFyIGNvbXBlbnNhdGVFdmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25IZWxwZXIuZ2V0Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbihib3VuZGFyeUV2ZW50KTtcclxuICAgIHZhciBhdHRhY2hlZFRvUmVmID0gYm91bmRhcnlFdmVudC5hdHRhY2hlZFRvUmVmO1xyXG4gICAgcmV0dXJuIGNvbXBlbnNhdGVFdmVudERlZmluaXRpb24gJiYgYXR0YWNoZWRUb1JlZiAmJiBhdHRhY2hlZFRvUmVmLmlkID09PSBhY3Rpdml0eUlkO1xyXG4gIH0pO1xyXG4gIHJldHVybiAhIWJvdW5kYXJ5RXZlbnQ7XHJcbn1cclxuXHJcbi8vIHN1YnByb2Nlc3M6IG9ubHkgd2hlbiBpdCBpcyBub3QgdHJpZ2dlcmVkQnlFdmVudFxyXG4vLyBhY3Rpdml0eTogb25seSB3aGVuIGl0IGF0dGFjaCBhIGNvbXBlbnNhdGlvbiBib3VuZGFyeSBldmVudFxyXG4vLyBjYWxsQWN0aXZpdHk6IG5vIGxpbWl0YXRpb25cclxuZnVuY3Rpb24gY2FuQWN0aXZpdHlCZUNvbXBlbnNhdGVkKGFjdGl2aXR5LCBib3VuZGFyeUV2ZW50cykge1xyXG4gIHJldHVybiAoaXMoYWN0aXZpdHksICdicG1uOlN1YlByb2Nlc3MnKSAmJiAhYWN0aXZpdHkudHJpZ2dlcmVkQnlFdmVudCkgfHxcclxuICAgICAgICAgIGlzKGFjdGl2aXR5LCAnYnBtbjpDYWxsQWN0aXZpdHknKSB8fFxyXG4gICAgICAgICAgaXNDb21wZW5zYXRpb25FdmVudEF0dGFjaGVkVG9BY3Rpdml0eShhY3Rpdml0eSwgYm91bmRhcnlFdmVudHMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRBY3Rpdml0aWVzRm9yQ29tcGVuc2F0aW9uKGVsZW1lbnQpIHtcclxuICB2YXIgYm91bmRhcnlFdmVudHMgPSBnZXRDb250YWluZWRCb3VuZGFyeUV2ZW50cyhlbGVtZW50KTtcclxuICByZXR1cm4gZmlsdGVyKGdldENvbnRhaW5lZEFjdGl2aXRpZXMoZWxlbWVudCksIGZ1bmN0aW9uKGFjdGl2aXR5KSB7XHJcbiAgICByZXR1cm4gY2FuQWN0aXZpdHlCZUNvbXBlbnNhdGVkKGFjdGl2aXR5LCBib3VuZGFyeUV2ZW50cyk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEFjdGl2aXRpZXNGb3JBY3Rpdml0eVJlZihlbGVtZW50KSB7XHJcbiAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcbiAgdmFyIHBhcmVudCA9IGJvLiRwYXJlbnQ7XHJcblxyXG4gIHZhciBhY3Rpdml0aWVzRm9yQWN0aXZpdHlSZWYgPSBnZXRBY3Rpdml0aWVzRm9yQ29tcGVuc2F0aW9uKHBhcmVudCk7XHJcblxyXG4gIC8vIGlmIHRocm93aW5nIGNvbXBlbnNhdGlvbiBldmVudCBpcyBpbiBhbiBldmVudCBzdWIgcHJvY2VzczpcclxuICAvLyBnZXQgYWxzbyBhbGwgYWN0aXZpdGllcyBvdXRzaWRlIG9mIHRoZSBldmVudCBzdWIgcHJvY2Vzc1xyXG4gIGlmIChpcyhwYXJlbnQsICdicG1uOlN1YlByb2Nlc3MnKSAmJiBwYXJlbnQudHJpZ2dlcmVkQnlFdmVudCkge1xyXG4gICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XHJcbiAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgIGFjdGl2aXRpZXNGb3JBY3Rpdml0eVJlZiA9IGFjdGl2aXRpZXNGb3JBY3Rpdml0eVJlZi5jb25jYXQoZ2V0QWN0aXZpdGllc0ZvckNvbXBlbnNhdGlvbihwYXJlbnQpKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICByZXR1cm4gYWN0aXZpdGllc0ZvckFjdGl2aXR5UmVmO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpdml0eVJlZk9wdGlvbnMoZWxlbWVudCkge1xyXG4gIHZhciBvcHRpb25zID0gWyB7IHZhbHVlOiAnJyB9IF07XHJcblxyXG4gIHZhciBhY3Rpdml0aWVzID0gZ2V0QWN0aXZpdGllc0ZvckFjdGl2aXR5UmVmKGVsZW1lbnQpO1xyXG4gIGZvckVhY2goYWN0aXZpdGllcywgZnVuY3Rpb24oYWN0aXZpdHkpIHtcclxuICAgIHZhciBhY3Rpdml0eUlkID0gYWN0aXZpdHkuaWQ7XHJcbiAgICB2YXIgbmFtZSA9IChhY3Rpdml0eS5uYW1lID8gKGFjdGl2aXR5Lm5hbWUgKyAnICcpIDogJycpICsgJyhpZD0nICsgYWN0aXZpdHlJZCArICcpJztcclxuICAgIG9wdGlvbnMucHVzaCh7IHZhbHVlOiBhY3Rpdml0eUlkLCBuYW1lOiBuYW1lIH0pO1xyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gb3B0aW9ucztcclxufVxyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBjb21wZW5zYXRlRXZlbnREZWZpbml0aW9uLCBlbGVtZW50UmVnaXN0cnksIHRyYW5zbGF0ZSkge1xyXG5cclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LmNoZWNrYm94KHtcclxuICAgIGlkOiAnd2FpdC1mb3ItY29tcGxldGlvbicsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdXYWl0IGZvciBDb21wbGV0aW9uJyksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnd2FpdEZvckNvbXBsZXRpb24nLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHdhaXRGb3JDb21wbGV0aW9uOiBjb21wZW5zYXRlRXZlbnREZWZpbml0aW9uLndhaXRGb3JDb21wbGV0aW9uXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhbHVlcy53YWl0Rm9yQ29tcGxldGlvbiA9IHZhbHVlcy53YWl0Rm9yQ29tcGxldGlvbiB8fCBmYWxzZTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBjb21wZW5zYXRlRXZlbnREZWZpbml0aW9uLCB2YWx1ZXMpO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcbiAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS5zZWxlY3RCb3goe1xyXG4gICAgaWQ6ICdhY3Rpdml0eS1yZWYnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQWN0aXZpdHkgUmVmJyksXHJcbiAgICBzZWxlY3RPcHRpb25zOiBjcmVhdGVBY3Rpdml0eVJlZk9wdGlvbnMoZWxlbWVudCksXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnYWN0aXZpdHlSZWYnLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgICB2YXIgYWN0aXZpdHlSZWYgPSBjb21wZW5zYXRlRXZlbnREZWZpbml0aW9uLmFjdGl2aXR5UmVmO1xyXG4gICAgICBhY3Rpdml0eVJlZiA9IGFjdGl2aXR5UmVmICYmIGFjdGl2aXR5UmVmLmlkO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGFjdGl2aXR5UmVmOiBhY3Rpdml0eVJlZiB8fCAnJ1xyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgYWN0aXZpdHlSZWYgPSB2YWx1ZXMuYWN0aXZpdHlSZWYgfHwgdW5kZWZpbmVkO1xyXG4gICAgICBhY3Rpdml0eVJlZiA9IGFjdGl2aXR5UmVmICYmIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnRSZWdpc3RyeS5nZXQoYWN0aXZpdHlSZWYpKTtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBjb21wZW5zYXRlRXZlbnREZWZpbml0aW9uLCB7XHJcbiAgICAgICAgYWN0aXZpdHlSZWY6IGFjdGl2aXR5UmVmXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xyXG5cclxudmFyIGlzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnKS5pcyxcclxuICAgIGlzRXZlbnRTdWJQcm9jZXNzID0gcmVxdWlyZSgnYnBtbi1qcy9saWIvdXRpbC9EaVV0aWwnKS5pc0V2ZW50U3ViUHJvY2VzcztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBjb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbiwgZWxlbWVudFJlZ2lzdHJ5LCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgdmFyIGdldFZhbHVlID0gZnVuY3Rpb24obW9kZWxQcm9wZXJ0eSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgdmFyIG1vZGVsUHJvcGVydHlWYWx1ZSA9IGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uLmdldCgnY2FtdW5kYTonICsgbW9kZWxQcm9wZXJ0eSk7XHJcbiAgICAgIHZhciB2YWx1ZSA9IHt9O1xyXG5cclxuICAgICAgdmFsdWVbbW9kZWxQcm9wZXJ0eV0gPSBtb2RlbFByb3BlcnR5VmFsdWU7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgdmFyIHNldFZhbHVlID0gZnVuY3Rpb24obW9kZWxQcm9wZXJ0eSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgcHJvcHMgPSB7fTtcclxuXHJcbiAgICAgIHByb3BzWydjYW11bmRhOicgKyBtb2RlbFByb3BlcnR5XSA9IHZhbHVlc1ttb2RlbFByb3BlcnR5XSB8fCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uLCBwcm9wcyk7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgIGlkOiAndmFyaWFibGVOYW1lJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1ZhcmlhYmxlIE5hbWUnKSxcclxuICAgIG1vZGVsUHJvcGVydHkgOiAndmFyaWFibGVOYW1lJyxcclxuXHJcbiAgICBnZXQ6IGdldFZhbHVlKCd2YXJpYWJsZU5hbWUnKSxcclxuICAgIHNldDogc2V0VmFsdWUoJ3ZhcmlhYmxlTmFtZScpXHJcbiAgfSkpO1xyXG5cclxuICB2YXIgaXNDb25kaXRpb25hbFN0YXJ0RXZlbnQgPVxyXG4gICAgaXMoZWxlbWVudCwgJ2JwbW46U3RhcnRFdmVudCcpICYmICFpc0V2ZW50U3ViUHJvY2VzcyhlbGVtZW50LnBhcmVudCk7XHJcblxyXG4gIGlmICghaXNDb25kaXRpb25hbFN0YXJ0RXZlbnQpIHtcclxuICAgIGdyb3VwLmVudHJpZXMucHVzaChlbnRyeUZhY3RvcnkudGV4dEZpZWxkKHtcclxuICAgICAgaWQ6ICd2YXJpYWJsZUV2ZW50JyxcclxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmFyaWFibGUgRXZlbnQnKSxcclxuICAgICAgZGVzY3JpcHRpb246IHRyYW5zbGF0ZSgnU3BlY2lmeSBtb3JlIHRoYW4gb25lIHZhcmlhYmxlIGNoYW5nZSBldmVudCBhcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0LicpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5IDogJ3ZhcmlhYmxlRXZlbnQnLFxyXG5cclxuICAgICAgZ2V0OiBnZXRWYWx1ZSgndmFyaWFibGVFdmVudCcpLFxyXG4gICAgICBzZXQ6IHNldFZhbHVlKCd2YXJpYWJsZUV2ZW50JylcclxuICAgIH0pKTtcclxuICB9XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpO1xyXG5cclxudmFyIGNtZEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9DbWRIZWxwZXInKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYW4gZW50cnkgdG8gbW9kaWZ5IGEgcHJvcGVydHkgb2YgYW4gZWxlbWVudCB3aGljaFxyXG4gKiBpcyByZWZlcmVuY2VkIGJ5IGEgZXZlbnQgZGVmaW5pdGlvbi5cclxuICpcclxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gZGVmaW5pdGlvblxyXG4gKiBAcGFyYW0gIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcclxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5pZCB0aGUgaWQgb2YgdGhlIGVudHJ5XHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5sYWJlbCB0aGUgbGFiZWwgb2YgdGhlIGVudHJ5XHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5yZWZlcmVuY2VQcm9wZXJ0eSB0aGUgbmFtZSBvZiByZWZlcmVuY2luZyBwcm9wZXJ0eVxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMubW9kZWxQcm9wZXJ0eSB0aGUgbmFtZSBvZiBwcm9wZXJ0eSB0byBtb2RpZnlcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLnNob3VsZFZhbGlkYXRlIGEgZmxhZyBpbmRpY2F0ZSB3aGV0aGVyIHRvIHZhbGlkYXRlIG9yIG5vdFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtBcnJheTxPYmplY3Q+fSByZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyB0aGUgZW50cmllc1xyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBkZWZpbml0aW9uLCBicG1uRmFjdG9yeSwgb3B0aW9ucykge1xyXG5cclxuICB2YXIgaWQgPSBvcHRpb25zLmlkIHx8ICdlbGVtZW50LXByb3BlcnR5JztcclxuICB2YXIgbGFiZWwgPSBvcHRpb25zLmxhYmVsO1xyXG4gIHZhciByZWZlcmVuY2VQcm9wZXJ0eSA9IG9wdGlvbnMucmVmZXJlbmNlUHJvcGVydHk7XHJcbiAgdmFyIG1vZGVsUHJvcGVydHkgPSBvcHRpb25zLm1vZGVsUHJvcGVydHkgfHwgJ25hbWUnO1xyXG4gIHZhciBzaG91bGRWYWxpZGF0ZSA9IG9wdGlvbnMuc2hvdWxkVmFsaWRhdGUgfHwgZmFsc2U7XHJcblxyXG4gIHZhciBlbnRyeSA9IGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgaWQ6IGlkLFxyXG4gICAgbGFiZWw6IGxhYmVsLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogbW9kZWxQcm9wZXJ0eSxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgdmFyIHJlZmVyZW5jZSA9IGRlZmluaXRpb24uZ2V0KHJlZmVyZW5jZVByb3BlcnR5KTtcclxuICAgICAgdmFyIHByb3BzID0ge307XHJcbiAgICAgIHByb3BzW21vZGVsUHJvcGVydHldID0gcmVmZXJlbmNlICYmIHJlZmVyZW5jZS5nZXQobW9kZWxQcm9wZXJ0eSk7XHJcbiAgICAgIHJldHVybiBwcm9wcztcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZXMsIG5vZGUpIHtcclxuICAgICAgdmFyIHJlZmVyZW5jZSA9IGRlZmluaXRpb24uZ2V0KHJlZmVyZW5jZVByb3BlcnR5KTtcclxuICAgICAgdmFyIHByb3BzID0ge307XHJcbiAgICAgIHByb3BzW21vZGVsUHJvcGVydHldID0gdmFsdWVzW21vZGVsUHJvcGVydHldIHx8IHVuZGVmaW5lZDtcclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCByZWZlcmVuY2UsIHByb3BzKTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZGVuOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHJldHVybiAhZGVmaW5pdGlvbi5nZXQocmVmZXJlbmNlUHJvcGVydHkpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBpZiAoc2hvdWxkVmFsaWRhdGUpIHtcclxuICAgIGVudHJ5LnZhbGlkYXRlID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzLCBub2RlKSB7XHJcbiAgICAgIHZhciByZWZlcmVuY2UgPSBkZWZpbml0aW9uLmdldChyZWZlcmVuY2VQcm9wZXJ0eSk7XHJcbiAgICAgIGlmIChyZWZlcmVuY2UgJiYgIXZhbHVlc1ttb2RlbFByb3BlcnR5XSkge1xyXG4gICAgICAgIHZhciB2YWxpZGF0aW9uRXJyb3JzID0ge307XHJcbiAgICAgICAgdmFsaWRhdGlvbkVycm9yc1ttb2RlbFByb3BlcnR5XSA9ICdNdXN0IHByb3ZpZGUgYSB2YWx1ZSc7XHJcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvcnM7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gWyBlbnRyeSBdO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZXZlbnREZWZpbml0aW9uUmVmZXJlbmNlID0gcmVxdWlyZSgnLi9FdmVudERlZmluaXRpb25SZWZlcmVuY2UnKSxcclxuICAgIGVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vRWxlbWVudFJlZmVyZW5jZVByb3BlcnR5Jyk7XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIGVycm9yRXZlbnREZWZpbml0aW9uLCB0cmFuc2xhdGUpIHtcclxuXHJcblxyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChldmVudERlZmluaXRpb25SZWZlcmVuY2UoZWxlbWVudCwgZXJyb3JFdmVudERlZmluaXRpb24sIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdFcnJvcicpLFxyXG4gICAgZWxlbWVudE5hbWU6ICdlcnJvcicsXHJcbiAgICBlbGVtZW50VHlwZTogJ2JwbW46RXJyb3InLFxyXG4gICAgcmVmZXJlbmNlUHJvcGVydHk6ICdlcnJvclJlZicsXHJcbiAgICBuZXdFbGVtZW50SWRQcmVmaXg6ICdFcnJvcl8nXHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eShlbGVtZW50LCBlcnJvckV2ZW50RGVmaW5pdGlvbiwgYnBtbkZhY3RvcnksIHtcclxuICAgIGlkOiAnZXJyb3ItZWxlbWVudC1uYW1lJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Vycm9yIE5hbWUnKSxcclxuICAgIHJlZmVyZW5jZVByb3BlcnR5OiAnZXJyb3JSZWYnLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ25hbWUnLFxyXG4gICAgc2hvdWxkVmFsaWRhdGU6IHRydWVcclxuICB9KSk7XHJcblxyXG5cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoZWxlbWVudFJlZmVyZW5jZVByb3BlcnR5KGVsZW1lbnQsIGVycm9yRXZlbnREZWZpbml0aW9uLCBicG1uRmFjdG9yeSwge1xyXG4gICAgaWQ6ICdlcnJvci1lbGVtZW50LWNvZGUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXJyb3IgQ29kZScpLFxyXG4gICAgcmVmZXJlbmNlUHJvcGVydHk6ICdlcnJvclJlZicsXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnZXJyb3JDb2RlJ1xyXG4gIH0pKTtcclxuXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBlbnRyeUZhY3RvcnkgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9mYWN0b3J5L0VudHJ5RmFjdG9yeScpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xyXG5cclxudmFyIGV2ZW50RGVmaW5pdGlvblJlZmVyZW5jZSA9IHJlcXVpcmUoJy4vRXZlbnREZWZpbml0aW9uUmVmZXJlbmNlJyksXHJcbiAgICBlbGVtZW50UmVmZXJlbmNlUHJvcGVydHkgPSByZXF1aXJlKCcuL0VsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eScpO1xyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uLCBzaG93RXNjYWxhdGlvbkNvZGVWYXJpYWJsZSwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChldmVudERlZmluaXRpb25SZWZlcmVuY2UoZWxlbWVudCwgZXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbiwgYnBtbkZhY3RvcnksIHtcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0VzY2FsYXRpb24nKSxcclxuICAgIGVsZW1lbnROYW1lOiAnZXNjYWxhdGlvbicsXHJcbiAgICBlbGVtZW50VHlwZTogJ2JwbW46RXNjYWxhdGlvbicsXHJcbiAgICByZWZlcmVuY2VQcm9wZXJ0eTogJ2VzY2FsYXRpb25SZWYnLFxyXG4gICAgbmV3RWxlbWVudElkUHJlZml4OiAnRXNjYWxhdGlvbl8nXHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eShlbGVtZW50LCBlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uLCBicG1uRmFjdG9yeSwge1xyXG4gICAgaWQ6ICdlc2NhbGF0aW9uLWVsZW1lbnQtbmFtZScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdFc2NhbGF0aW9uIE5hbWUnKSxcclxuICAgIHJlZmVyZW5jZVByb3BlcnR5OiAnZXNjYWxhdGlvblJlZicsXHJcbiAgICBtb2RlbFByb3BlcnR5OiAnbmFtZScsXHJcbiAgICBzaG91bGRWYWxpZGF0ZTogdHJ1ZVxyXG4gIH0pKTtcclxuXHJcblxyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChlbGVtZW50UmVmZXJlbmNlUHJvcGVydHkoZWxlbWVudCwgZXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbiwgYnBtbkZhY3RvcnksIHtcclxuICAgIGlkOiAnZXNjYWxhdGlvbi1lbGVtZW50LWNvZGUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXNjYWxhdGlvbiBDb2RlJyksXHJcbiAgICByZWZlcmVuY2VQcm9wZXJ0eTogJ2VzY2FsYXRpb25SZWYnLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ2VzY2FsYXRpb25Db2RlJ1xyXG4gIH0pKTtcclxuXHJcblxyXG4gIGlmIChzaG93RXNjYWxhdGlvbkNvZGVWYXJpYWJsZSkge1xyXG4gICAgZ3JvdXAuZW50cmllcy5wdXNoKGVudHJ5RmFjdG9yeS50ZXh0RmllbGQoe1xyXG4gICAgICBpZCA6ICdlc2NhbGF0aW9uQ29kZVZhcmlhYmxlJyxcclxuICAgICAgbGFiZWwgOiB0cmFuc2xhdGUoJ0VzY2FsYXRpb24gQ29kZSBWYXJpYWJsZScpLFxyXG4gICAgICBtb2RlbFByb3BlcnR5IDogJ2VzY2FsYXRpb25Db2RlVmFyaWFibGUnLFxyXG5cclxuICAgICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgICAgdmFyIGNvZGVWYXJpYWJsZSA9IGVzY2FsYXRpb25FdmVudERlZmluaXRpb24uZ2V0KCdjYW11bmRhOmVzY2FsYXRpb25Db2RlVmFyaWFibGUnKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgZXNjYWxhdGlvbkNvZGVWYXJpYWJsZTogY29kZVZhcmlhYmxlXHJcbiAgICAgICAgfTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCBlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uLCB7XHJcbiAgICAgICAgICAnY2FtdW5kYTplc2NhbGF0aW9uQ29kZVZhcmlhYmxlJzogdmFsdWVzLmVzY2FsYXRpb25Db2RlVmFyaWFibGUgfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBjbWRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvQ21kSGVscGVyJyk7XHJcblxyXG52YXIgZG9tUXVlcnkgPSByZXF1aXJlKCdtaW4tZG9tJykucXVlcnksXHJcbiAgICBkb21pZnkgPSByZXF1aXJlKCdtaW4tZG9tJykuZG9taWZ5LFxyXG4gICAgZG9tQXR0ciA9IHJlcXVpcmUoJ21pbi1kb20nKS5hdHRyO1xyXG5cclxudmFyIGZvckVhY2ggPSByZXF1aXJlKCdsb2Rhc2gvZm9yRWFjaCcpLFxyXG4gICAgZmluZCA9IHJlcXVpcmUoJ2xvZGFzaC9maW5kJyk7XHJcblxyXG52YXIgZWxlbWVudEhlbHBlciA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2hlbHBlci9FbGVtZW50SGVscGVyJyk7XHJcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL1V0aWxzJyksXHJcbiAgICBlc2NhcGVIVE1MID0gdXRpbHMuZXNjYXBlSFRNTDtcclxuXHJcbnZhciBzZWxlY3RvciA9ICdzZWxlY3RbbmFtZT1zZWxlY3RlZEVsZW1lbnRdJztcclxuXHJcbi8qKlxyXG4gKiBHZXQgc2VsZWN0IGJveCBjb250YWluaW5nIGFsbCBlbGVtZW50cy5cclxuICpcclxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXHJcbiAqXHJcbiAqIEByZXR1cm4ge0RPTUVsZW1lbnR9IHRoZSBzZWxlY3QgYm94XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTZWxlY3RCb3gobm9kZSkge1xyXG4gIHJldHVybiBkb21RdWVyeShzZWxlY3Rvciwgbm9kZS5wYXJlbnRFbGVtZW50KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEZpbmQgZWxlbWVudCBieSBnaXZlbiBpZC5cclxuICpcclxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBldmVudERlZmluaXRpb25cclxuICpcclxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gYW4gZWxlbWVudFxyXG4gKi9cclxuZnVuY3Rpb24gZmluZEVsZW1lbnRCeUlkKGV2ZW50RGVmaW5pdGlvbiwgdHlwZSwgaWQpIHtcclxuICB2YXIgZWxlbWVudHMgPSB1dGlscy5maW5kUm9vdEVsZW1lbnRzQnlUeXBlKGV2ZW50RGVmaW5pdGlvbiwgdHlwZSk7XHJcbiAgcmV0dXJuIGZpbmQoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgIHJldHVybiBlbGVtZW50LmlkID09PSBpZDtcclxuICB9KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhbiBlbnRyeSB0byBtb2RpZnkgdGhlIHJlZmVyZW5jZSB0byBhbiBlbGVtZW50IGZyb20gYW5cclxuICogZXZlbnQgZGVmaW5pdGlvbi5cclxuICpcclxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcclxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gZGVmaW5pdGlvblxyXG4gKiBAcGFyYW0gIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcclxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5sYWJlbCB0aGUgbGFiZWwgb2YgdGhlIGVudHJ5XHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5kZXNjcmlwdGlvbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGVudHJ5XHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5lbGVtZW50TmFtZSB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudFxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMuZWxlbWVudFR5cGUgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnRcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLnJlZmVyZW5jZVByb3BlcnR5IHRoZSBuYW1lIG9mIHJlZmVyZW5jaW5nIHByb3BlcnR5XHJcbiAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5uZXdFbGVtZW50SWRQcmVmaXggdGhlIHByZWZpeCBvZiBhIG5ldyBjcmVhdGVkIGVsZW1lbnRcclxuICpcclxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gcmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGVudHJpZXNcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZWxlbWVudCwgZGVmaW5pdGlvbiwgYnBtbkZhY3RvcnksIG9wdGlvbnMpIHtcclxuXHJcbiAgdmFyIGVsZW1lbnROYW1lID0gb3B0aW9ucy5lbGVtZW50TmFtZSB8fCAnJyxcclxuICAgICAgZWxlbWVudFR5cGUgPSBvcHRpb25zLmVsZW1lbnRUeXBlLFxyXG4gICAgICByZWZlcmVuY2VQcm9wZXJ0eSA9IG9wdGlvbnMucmVmZXJlbmNlUHJvcGVydHk7XHJcblxyXG4gIHZhciBuZXdFbGVtZW50SWRQcmVmaXggPSBvcHRpb25zLm5ld0VsZW1lbnRJZFByZWZpeCB8fCAnZWxlbV8nO1xyXG5cclxuICB2YXIgbGFiZWwgPSBvcHRpb25zLmxhYmVsIHx8ICcnLFxyXG4gICAgICBkZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRpb24gfHwgJyc7XHJcblxyXG4gIHZhciBlbnRyaWVzID0gW107XHJcblxyXG4gIGVudHJpZXMucHVzaCh7XHJcblxyXG4gICAgaWQ6ICdldmVudC1kZWZpbml0aW9ucy0nICsgZWxlbWVudE5hbWUsXHJcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXHJcbiAgICBodG1sOiAnPGRpdiBjbGFzcz1cImJwcC1yb3cgYnBwLXNlbGVjdFwiPicgK1xyXG4gICAgICAgICAgICAgJzxsYWJlbCBmb3I9XCJjYW11bmRhLScgKyBlc2NhcGVIVE1MKGVsZW1lbnROYW1lKSArICdcIj4nICsgZXNjYXBlSFRNTChsYWJlbCkgKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYnBwLWZpZWxkLXdyYXBwZXJcIj4nICtcclxuICAgICAgICAgICAgICAgJzxzZWxlY3QgaWQ9XCJjYW11bmRhLScgKyBlc2NhcGVIVE1MKGVsZW1lbnROYW1lKSArICdcIiBuYW1lPVwic2VsZWN0ZWRFbGVtZW50XCIgZGF0YS12YWx1ZT4nICtcclxuICAgICAgICAgICAgICAgJzwvc2VsZWN0PicgK1xyXG4gICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz1cImFkZFwiIGlkPVwiYWRkRWxlbWVudFwiIGRhdGEtYWN0aW9uPVwiYWRkRWxlbWVudFwiPjxzcGFuPis8L3NwYW4+PC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAnPC9kaXY+JyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGVudHJ5Tm9kZSkge1xyXG4gICAgICB1dGlscy51cGRhdGVPcHRpb25zRHJvcERvd24oc2VsZWN0b3IsIGRlZmluaXRpb24sIGVsZW1lbnRUeXBlLCBlbnRyeU5vZGUpO1xyXG4gICAgICB2YXIgcmVmZXJlbmNlID0gZGVmaW5pdGlvbi5nZXQocmVmZXJlbmNlUHJvcGVydHkpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHNlbGVjdGVkRWxlbWVudDogKHJlZmVyZW5jZSAmJiByZWZlcmVuY2UuaWQpIHx8ICcnXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciBzZWxlY3Rpb24gPSB2YWx1ZXMuc2VsZWN0ZWRFbGVtZW50O1xyXG5cclxuICAgICAgdmFyIHByb3BzID0ge307XHJcblxyXG4gICAgICBpZiAoIXNlbGVjdGlvbiB8fCB0eXBlb2Ygc2VsZWN0aW9uID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8vIHJlbW92ZSByZWZlcmVuY2UgdG8gZWxlbWVudFxyXG4gICAgICAgIHByb3BzW3JlZmVyZW5jZVByb3BlcnR5XSA9IHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm4gY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGRlZmluaXRpb24sIHByb3BzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGNvbW1hbmRzID0gW107XHJcblxyXG4gICAgICB2YXIgc2VsZWN0ZWRFbGVtZW50ID0gZmluZEVsZW1lbnRCeUlkKGRlZmluaXRpb24sIGVsZW1lbnRUeXBlLCBzZWxlY3Rpb24pO1xyXG4gICAgICBpZiAoIXNlbGVjdGVkRWxlbWVudCkge1xyXG4gICAgICAgIHZhciByb290ID0gdXRpbHMuZ2V0Um9vdChkZWZpbml0aW9uKTtcclxuXHJcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGVsZW1lbnRcclxuICAgICAgICBzZWxlY3RlZEVsZW1lbnQgPSBlbGVtZW50SGVscGVyLmNyZWF0ZUVsZW1lbnQoZWxlbWVudFR5cGUsIHsgbmFtZTogc2VsZWN0aW9uIH0sIHJvb3QsIGJwbW5GYWN0b3J5KTtcclxuICAgICAgICBjb21tYW5kcy5wdXNoKGNtZEhlbHBlci5hZGRBbmRSZW1vdmVFbGVtZW50c0Zyb21MaXN0KGVsZW1lbnQsIHJvb3QsICdyb290RWxlbWVudHMnLCBudWxsLCBbIHNlbGVjdGVkRWxlbWVudCBdKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHVwZGF0ZSByZWZlcmVuY2UgdG8gZWxlbWVudFxyXG4gICAgICBwcm9wc1tyZWZlcmVuY2VQcm9wZXJ0eV0gPSBzZWxlY3RlZEVsZW1lbnQ7XHJcbiAgICAgIGNvbW1hbmRzLnB1c2goY21kSGVscGVyLnVwZGF0ZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIGRlZmluaXRpb24sIHByb3BzKSk7XHJcblxyXG4gICAgICByZXR1cm4gY29tbWFuZHM7XHJcbiAgICB9LFxyXG5cclxuICAgIGFkZEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGlucHV0Tm9kZSkge1xyXG4gICAgICAvLyBub3RlOiB0aGlzIGdlbmVyYXRlZCBpZCB3aWxsIGJlIHVzZWQgYXMgbmFtZVxyXG4gICAgICAvLyBvZiB0aGUgZWxlbWVudCBhbmQgbm90IGFzIGlkXHJcbiAgICAgIHZhciBpZCA9IHV0aWxzLm5leHRJZChuZXdFbGVtZW50SWRQcmVmaXgpO1xyXG5cclxuICAgICAgdmFyIG9wdGlvblRlbXBsYXRlID0gZG9taWZ5KCc8b3B0aW9uIHZhbHVlPVwiJyArIGVzY2FwZUhUTUwoaWQpICsgJ1wiPiAoaWQ9Jytlc2NhcGVIVE1MKGlkKSsnKScgKyAnPC9vcHRpb24+Jyk7XHJcblxyXG4gICAgICAvLyBhZGQgbmV3IG9wdGlvblxyXG4gICAgICB2YXIgc2VsZWN0Qm94ID0gZ2V0U2VsZWN0Qm94KGlucHV0Tm9kZSk7XHJcbiAgICAgIHNlbGVjdEJveC5pbnNlcnRCZWZvcmUob3B0aW9uVGVtcGxhdGUsIHNlbGVjdEJveC5maXJzdENoaWxkKTtcclxuXHJcbiAgICAgIC8vIHNlbGVjdCBuZXcgZWxlbWVudCBpbiB0aGUgc2VsZWN0IGJveFxyXG4gICAgICBmb3JFYWNoKHNlbGVjdEJveCwgZnVuY3Rpb24ob3B0aW9uKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gaWQpIHtcclxuICAgICAgICAgIGRvbUF0dHIob3B0aW9uLCAnc2VsZWN0ZWQnLCAnc2VsZWN0ZWQnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZG9tQXR0cihvcHRpb24sICdzZWxlY3RlZCcsIG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBlbnRyaWVzO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGV2ZW50RGVmaW5pdGlvblJlZmVyZW5jZSA9IHJlcXVpcmUoJy4vRXZlbnREZWZpbml0aW9uUmVmZXJlbmNlJyksXHJcbiAgICBlbGVtZW50UmVmZXJlbmNlUHJvcGVydHkgPSByZXF1aXJlKCcuL0VsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eScpO1xyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZ3JvdXAsIGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBtZXNzYWdlRXZlbnREZWZpbml0aW9uLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGV2ZW50RGVmaW5pdGlvblJlZmVyZW5jZShlbGVtZW50LCBtZXNzYWdlRXZlbnREZWZpbml0aW9uLCBicG1uRmFjdG9yeSwge1xyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTWVzc2FnZScpLFxyXG4gICAgZWxlbWVudE5hbWU6ICdtZXNzYWdlJyxcclxuICAgIGVsZW1lbnRUeXBlOiAnYnBtbjpNZXNzYWdlJyxcclxuICAgIHJlZmVyZW5jZVByb3BlcnR5OiAnbWVzc2FnZVJlZicsXHJcbiAgICBuZXdFbGVtZW50SWRQcmVmaXg6ICdNZXNzYWdlXydcclxuICB9KSk7XHJcblxyXG5cclxuICBncm91cC5lbnRyaWVzID0gZ3JvdXAuZW50cmllcy5jb25jYXQoZWxlbWVudFJlZmVyZW5jZVByb3BlcnR5KGVsZW1lbnQsIG1lc3NhZ2VFdmVudERlZmluaXRpb24sIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBpZDogJ21lc3NhZ2UtZWxlbWVudC1uYW1lJyxcclxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ01lc3NhZ2UgTmFtZScpLFxyXG4gICAgcmVmZXJlbmNlUHJvcGVydHk6ICdtZXNzYWdlUmVmJyxcclxuICAgIG1vZGVsUHJvcGVydHk6ICduYW1lJyxcclxuICAgIHNob3VsZFZhbGlkYXRlOiB0cnVlXHJcbiAgfSkpO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFuIGVudHJ5IHRvIG1vZGlmeSB0aGUgbmFtZSBvZiBhbiBhbiBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxyXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmlkIHRoZSBpZCBvZiB0aGUgZW50cnlcclxuICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLmxhYmVsIHRoZSBsYWJlbCBvZiB0aGUgZW50cnlcclxuICpcclxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gcmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmdcclxuICogICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGVudHJ5IHRvIG1vZGlmeSB0aGUgbmFtZVxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zLCB0cmFuc2xhdGUpIHtcclxuXHJcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgdmFyIGlkID0gb3B0aW9ucy5pZCB8fCAnbmFtZScsXHJcbiAgICAgIGxhYmVsID0gb3B0aW9ucy5sYWJlbCB8fCB0cmFuc2xhdGUoJ05hbWUnKSxcclxuICAgICAgbW9kZWxQcm9wZXJ0eSA9IG9wdGlvbnMubW9kZWxQcm9wZXJ0eSB8fCAnbmFtZSc7XHJcblxyXG4gIHZhciBuYW1lRW50cnkgPSBlbnRyeUZhY3RvcnkudGV4dEJveCh7XHJcbiAgICBpZDogaWQsXHJcbiAgICBsYWJlbDogbGFiZWwsXHJcbiAgICBtb2RlbFByb3BlcnR5OiBtb2RlbFByb3BlcnR5LFxyXG4gICAgZ2V0OiBvcHRpb25zLmdldCxcclxuICAgIHNldDogb3B0aW9ucy5zZXRcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIFsgbmFtZUVudHJ5IF07XHJcblxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgZXZlbnREZWZpbml0aW9uUmVmZXJlbmNlID0gcmVxdWlyZSgnLi9FdmVudERlZmluaXRpb25SZWZlcmVuY2UnKSxcclxuICAgIGVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vRWxlbWVudFJlZmVyZW5jZVByb3BlcnR5Jyk7XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihncm91cCwgZWxlbWVudCwgYnBtbkZhY3RvcnksIHNpZ25hbEV2ZW50RGVmaW5pdGlvbiwgdHJhbnNsYXRlKSB7XHJcblxyXG4gIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChldmVudERlZmluaXRpb25SZWZlcmVuY2UoZWxlbWVudCwgc2lnbmFsRXZlbnREZWZpbml0aW9uLCBicG1uRmFjdG9yeSwge1xyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnU2lnbmFsJyksXHJcbiAgICBlbGVtZW50TmFtZTogJ3NpZ25hbCcsXHJcbiAgICBlbGVtZW50VHlwZTogJ2JwbW46U2lnbmFsJyxcclxuICAgIHJlZmVyZW5jZVByb3BlcnR5OiAnc2lnbmFsUmVmJyxcclxuICAgIG5ld0VsZW1lbnRJZFByZWZpeDogJ1NpZ25hbF8nXHJcbiAgfSkpO1xyXG5cclxuXHJcbiAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuY29uY2F0KGVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eShlbGVtZW50LCBzaWduYWxFdmVudERlZmluaXRpb24sIGJwbW5GYWN0b3J5LCB7XHJcbiAgICBpZDogJ3NpZ25hbC1lbGVtZW50LW5hbWUnLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnU2lnbmFsIE5hbWUnKSxcclxuICAgIHJlZmVyZW5jZVByb3BlcnR5OiAnc2lnbmFsUmVmJyxcclxuICAgIG1vZGVsUHJvcGVydHk6ICduYW1lJyxcclxuICAgIHNob3VsZFZhbGlkYXRlOiB0cnVlXHJcbiAgfSkpO1xyXG5cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIGVsZW1lbnRIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9oZWxwZXIvRWxlbWVudEhlbHBlcicpLFxyXG4gICAgY21kSGVscGVyID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vaGVscGVyL0NtZEhlbHBlcicpO1xyXG5cclxudmFyIGVudHJ5RmFjdG9yeSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL2ZhY3RvcnkvRW50cnlGYWN0b3J5Jyk7XHJcblxyXG4vKipcclxuICogR2V0IHRoZSB0aW1lciBkZWZpbml0aW9uIHR5cGUgZm9yIGEgZ2l2ZW4gdGltZXIgZXZlbnQgZGVmaW5pdGlvbi5cclxuICpcclxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50PGJwbW46VGltZXJFdmVudERlZmluaXRpb24+fSB0aW1lclxyXG4gKlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfSB0aGUgdGltZXIgZGVmaW5pdGlvbiB0eXBlXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUaW1lckRlZmluaXRpb25UeXBlKHRpbWVyKSB7XHJcbiAgdmFyIHRpbWVEYXRlID0gdGltZXIuZ2V0KCd0aW1lRGF0ZScpO1xyXG4gIGlmICh0eXBlb2YgdGltZURhdGUgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICByZXR1cm4gJ3RpbWVEYXRlJztcclxuICB9XHJcblxyXG4gIHZhciB0aW1lQ3ljbGUgPSB0aW1lci5nZXQoJ3RpbWVDeWNsZScpO1xyXG4gIGlmICh0eXBlb2YgdGltZUN5Y2xlICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgcmV0dXJuICd0aW1lQ3ljbGUnO1xyXG4gIH1cclxuXHJcbiAgdmFyIHRpbWVEdXJhdGlvbiA9IHRpbWVyLmdldCgndGltZUR1cmF0aW9uJyk7XHJcbiAgaWYgKHR5cGVvZiB0aW1lRHVyYXRpb24gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICByZXR1cm4gJ3RpbWVEdXJhdGlvbic7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyAnYnBtbjpGb3JtYWxFeHByZXNzaW9uJyBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IHBhcmVudFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9keVxyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50PGJwbW46Rm9ybWFsRXhwcmVzc2lvbj59IGEgZm9ybWFsIGV4cHJlc3Npb25cclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZUZvcm1hbEV4cHJlc3Npb24ocGFyZW50LCBib2R5LCBicG1uRmFjdG9yeSkge1xyXG4gIGJvZHkgPSBib2R5IHx8IHVuZGVmaW5lZDtcclxuICByZXR1cm4gZWxlbWVudEhlbHBlci5jcmVhdGVFbGVtZW50KCdicG1uOkZvcm1hbEV4cHJlc3Npb24nLCB7IGJvZHk6IGJvZHkgfSwgcGFyZW50LCBicG1uRmFjdG9yeSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFRpbWVyRXZlbnREZWZpbml0aW9uKGdyb3VwLCBlbGVtZW50LCBicG1uRmFjdG9yeSwgdGltZXJFdmVudERlZmluaXRpb24sIHRyYW5zbGF0ZSkge1xyXG5cclxuICB2YXIgc2VsZWN0T3B0aW9ucyA9IFtcclxuICAgIHsgdmFsdWU6ICd0aW1lRGF0ZScsIG5hbWU6IHRyYW5zbGF0ZSgnRGF0ZScpIH0sXHJcbiAgICB7IHZhbHVlOiAndGltZUR1cmF0aW9uJywgbmFtZTogdHJhbnNsYXRlKCdEdXJhdGlvbicpIH0sXHJcbiAgICB7IHZhbHVlOiAndGltZUN5Y2xlJywgbmFtZTogdHJhbnNsYXRlKCdDeWNsZScpIH1cclxuICBdO1xyXG5cclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnNlbGVjdEJveCh7XHJcbiAgICBpZDogJ3RpbWVyLWV2ZW50LWRlZmluaXRpb24tdHlwZScsXHJcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUaW1lciBEZWZpbml0aW9uIFR5cGUnKSxcclxuICAgIHNlbGVjdE9wdGlvbnM6IHNlbGVjdE9wdGlvbnMsXHJcbiAgICBlbXB0eVBhcmFtZXRlcjogdHJ1ZSxcclxuICAgIG1vZGVsUHJvcGVydHk6ICd0aW1lckRlZmluaXRpb25UeXBlJyxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0aW1lckRlZmluaXRpb25UeXBlOiBnZXRUaW1lckRlZmluaXRpb25UeXBlKHRpbWVyRXZlbnREZWZpbml0aW9uKSB8fCAnJ1xyXG4gICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlcykge1xyXG4gICAgICB2YXIgcHJvcHMgPSB7XHJcbiAgICAgICAgdGltZUR1cmF0aW9uOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdGltZURhdGU6IHVuZGVmaW5lZCxcclxuICAgICAgICB0aW1lQ3ljbGU6IHVuZGVmaW5lZFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdmFyIG5ld1R5cGUgPSB2YWx1ZXMudGltZXJEZWZpbml0aW9uVHlwZTtcclxuICAgICAgaWYgKHZhbHVlcy50aW1lckRlZmluaXRpb25UeXBlKSB7XHJcbiAgICAgICAgdmFyIG9sZFR5cGUgPSBnZXRUaW1lckRlZmluaXRpb25UeXBlKHRpbWVyRXZlbnREZWZpbml0aW9uKTtcclxuXHJcbiAgICAgICAgdmFyIHZhbHVlO1xyXG4gICAgICAgIGlmIChvbGRUeXBlKSB7XHJcbiAgICAgICAgICB2YXIgZGVmaW5pdGlvbiA9IHRpbWVyRXZlbnREZWZpbml0aW9uLmdldChvbGRUeXBlKTtcclxuICAgICAgICAgIHZhbHVlID0gZGVmaW5pdGlvbi5nZXQoJ2JvZHknKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByb3BzW25ld1R5cGVdID0gY3JlYXRlRm9ybWFsRXhwcmVzc2lvbih0aW1lckV2ZW50RGVmaW5pdGlvbiwgdmFsdWUsIGJwbW5GYWN0b3J5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNtZEhlbHBlci51cGRhdGVCdXNpbmVzc09iamVjdChlbGVtZW50LCB0aW1lckV2ZW50RGVmaW5pdGlvbiwgcHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICB9KSk7XHJcblxyXG5cclxuICBncm91cC5lbnRyaWVzLnB1c2goZW50cnlGYWN0b3J5LnRleHRGaWVsZCh7XHJcbiAgICBpZDogJ3RpbWVyLWV2ZW50LWRlZmluaXRpb24nLFxyXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVGltZXIgRGVmaW5pdGlvbicpLFxyXG4gICAgbW9kZWxQcm9wZXJ0eTogJ3RpbWVyRGVmaW5pdGlvbicsXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICAgIHZhciB0eXBlID0gZ2V0VGltZXJEZWZpbml0aW9uVHlwZSh0aW1lckV2ZW50RGVmaW5pdGlvbik7XHJcbiAgICAgIHZhciBkZWZpbml0aW9uID0gdHlwZSAmJiB0aW1lckV2ZW50RGVmaW5pdGlvbi5nZXQodHlwZSk7XHJcbiAgICAgIHZhciB2YWx1ZSA9IGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi5nZXQoJ2JvZHknKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0aW1lckRlZmluaXRpb246IHZhbHVlXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVzKSB7XHJcbiAgICAgIHZhciB0eXBlID0gZ2V0VGltZXJEZWZpbml0aW9uVHlwZSh0aW1lckV2ZW50RGVmaW5pdGlvbik7XHJcbiAgICAgIHZhciBkZWZpbml0aW9uID0gdHlwZSAmJiB0aW1lckV2ZW50RGVmaW5pdGlvbi5nZXQodHlwZSk7XHJcblxyXG4gICAgICBpZiAoZGVmaW5pdGlvbikge1xyXG4gICAgICAgIHJldHVybiBjbWRIZWxwZXIudXBkYXRlQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgZGVmaW5pdGlvbiwge1xyXG4gICAgICAgICAgYm9keTogdmFsdWVzLnRpbWVyRGVmaW5pdGlvbiB8fCB1bmRlZmluZWRcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICB2YXIgdHlwZSA9IGdldFRpbWVyRGVmaW5pdGlvblR5cGUodGltZXJFdmVudERlZmluaXRpb24pO1xyXG4gICAgICB2YXIgZGVmaW5pdGlvbiA9IHR5cGUgJiYgdGltZXJFdmVudERlZmluaXRpb24uZ2V0KHR5cGUpO1xyXG4gICAgICBpZiAoZGVmaW5pdGlvbikge1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGRlZmluaXRpb24uZ2V0KCdib2R5Jyk7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdGltZXJEZWZpbml0aW9uOiB0cmFuc2xhdGUoJ011c3QgcHJvdmlkZSBhIHZhbHVlJylcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGhpZGRlbjogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICByZXR1cm4gIWdldFRpbWVyRGVmaW5pdGlvblR5cGUodGltZXJFdmVudERlZmluaXRpb24pO1xyXG4gICAgfVxyXG5cclxuICB9KSk7XHJcblxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFRpbWVyRXZlbnREZWZpbml0aW9uO1xyXG4iLCIvKipcclxuICogQGRlc2NyaXB0aW9uIOWFqOWxgOWKn+iDveWwgeijhVxyXG4gKiBAYXV0aG9yIHpyXHJcbiAqIEB0eXBlIHt7cmVnaXN0ZXJGaWxlRHJvcCgqLCAqKTogdm9pZCwgc2F2ZUJwbW4oT2JqZWN0KTogdm9pZCwgaGFuZGxlRHJhZ092ZXIoKik6IHZvaWQsIHNldENvbG9yKE9iamVjdCk6IHZvaWQsIGRvd25Mb2FkKE9iamVjdCk6IHZvaWQsIHVwbG9hZChPYmplY3QsIE9iamVjdCwgT2JqZWN0KTogdm9pZCwgaGFuZGxlRmlsZVNlbGVjdCgqKTogdm9pZCwgc2V0RW5jb2RlZChPYmplY3QsIHN0cmluZywgc3RyaW5nKTogdm9pZCwgb3BlbkZyb21VcmwoT2JqZWN0LCBPYmplY3QsIE9iamVjdCwgc3RyaW5nKTogdm9pZCwgY3JlYXRlRGlhZ3JhbShzdHJpbmcsIE9iamVjdCwgT2JqZWN0KTogUHJvbWlzZTx2b2lkPiwgZ2V0VXJsUGFyYW06IHRvb2xzLmdldFVybFBhcmFtfX1cclxuICovXHJcblxyXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xyXG5jb25zdCBwcm9Ib3N0ID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgd2luZG93LmxvY2F0aW9uLmhvc3Q7XHJcbmNvbnN0IGhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdChcImJwbW5qc1wiKVswXTtcclxuY29uc3Qga2V5ID0gaHJlZi5zcGxpdCh3aW5kb3cubG9jYXRpb24uaG9zdClbMV07XHJcbmNvbnN0IHB1YmxpY3VybCA9IHByb0hvc3QgKyBrZXk7XHJcbmNvbnN0IHRvb2xzID0ge1xyXG4gICAgcmVnaXN0ZXJGaWxlRHJvcChjb250YWluZXIsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29udGFpbmVyLmdldCgwKS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRvb2xzLmhhbmRsZURyYWdPdmVyLCBmYWxzZSk7XHJcbiAgICAgICAgY29udGFpbmVyLmdldCgwKS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgdG9vbHMuaGFuZGxlRmlsZVNlbGVjdCwgZmFsc2UpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog6I635Y+W5Zyw5Z2A5qCP5Y+C5pWwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcclxuICAgICAqL1xyXG4gICAgZ2V0VXJsUGFyYW06IGZ1bmN0aW9uICh1cmwpIHtcclxuICAgICAgICB2YXIgb2JqZWN0ID0ge307XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKFwiP1wiKSAhPSAtMSkge1xyXG4gICAgICAgICAgICB2YXIgc3RyID0gdXJsLnNwbGl0KFwiP1wiKVsxXTtcclxuICAgICAgICAgICAgdmFyIHN0cnMgPSBzdHIuc3BsaXQoXCImXCIpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG9iamVjdFtzdHJzW2ldLnNwbGl0KFwiPVwiKVswXV0gPSBzdHJzW2ldLnNwbGl0KFwiPVwiKVsxXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBvYmplY3RcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFt1cmxdO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog6YCa6L+HeG1s5Yib5bu6YnBtblxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHhtbCDliJvlu7picG1zIHhtbFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGJwbW5Nb2RlbGVyIGJwbW7lr7nosaFcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBjb250YWluZXIg5a655Zmo5a+56LGhXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZURpYWdyYW0oeG1sLCBicG1uTW9kZWxlciwgY29udGFpbmVyKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgYnBtbk1vZGVsZXIuaW1wb3J0WE1MKHhtbCk7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5yZW1vdmVDbGFzcygnd2l0aC1lcnJvcicpLmFkZENsYXNzKCd3aXRoLWRpYWdyYW0nKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyLnJlbW92ZUNsYXNzKCd3aXRoLWRpYWdyYW0nKS5hZGRDbGFzcygnd2l0aC1lcnJvcicpO1xyXG4gICAgICAgICAgICBjb250YWluZXIuZmluZCgnLmVycm9yIHByZScpLnRleHQoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog6YCa6L+HSnNvbuiuvue9ruminOiJslxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGpzb24ganNvbiDlrZfnrKbkuLJcclxuICAgICAqL1xyXG4gICAgc2V0Q29sb3IoanNvbixicG1uTW9kZWxlcikge1xyXG4gICAgICAgIHZhciBtb2RlbGluZyA9IGJwbW5Nb2RlbGVyLmdldCgnbW9kZWxpbmcnKTtcclxuICAgICAgICB2YXIgZWxlbWVudFJlZ2lzdHJ5ID0gYnBtbk1vZGVsZXIuZ2V0KCdlbGVtZW50UmVnaXN0cnknKVxyXG4gICAgICAgIHZhciBlbGVtZW50VG9Db2xvciA9IGVsZW1lbnRSZWdpc3RyeS5nZXQoanNvbi5uYW1lKTtcclxuICAgICAgICBpZihlbGVtZW50VG9Db2xvcil7XHJcbiAgICAgICAgICAgIG1vZGVsaW5nLnNldENvbG9yKFtlbGVtZW50VG9Db2xvcl0sIHtcclxuICAgICAgICAgICAgICAgIHN0cm9rZToganNvbi5zdHJva2UsXHJcbiAgICAgICAgICAgICAgICBmaWxsOiBqc29uLmZpbGxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog5L+d5a2YYnBtbuWvueixoVxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGJwbW5Nb2RlbGVyIGJwbW7lr7nosaFcclxuICAgICAqL1xyXG4gICAgc2F2ZUJwbW4oYnBtbk1vZGVsZXIpIHtcclxuICAgICAgICBicG1uTW9kZWxlci5zYXZlWE1MKHsgZm9ybWF0OiB0cnVlIH0sIGZ1bmN0aW9uIChlcnIsIHhtbCkge1xyXG4gICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uc29sZS5lcnJvcign5L+d5a2Y5aSx6LSl77yM6K+36YeN6K+VJywgZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh4bWwpXHJcbiAgICAgICAgICAgIHZhciBwYXJhbT17XHJcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJpbmdCUE1OXCI6eG1sXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6IHB1YmxpY3VybCsncHJvY2Vzc0RlZmluaXRpb24vYWRkRGVwbG95bWVudEJ5U3RyaW5nJyxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOlwianNvblwiLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogcGFyYW0sXHJcbiAgICAgICAgICAgICAgICAvL2hlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmOCd9LFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHJlc3VsdC5tc2c9PSfmiJDlip8nKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHMuc3loaWRlKCdhbGVydCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCfkv53lrZjmiJDlip8nKVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGVydChyZXN1bHQubXNnKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDkuIvovb1icG1uXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYnBtbk1vZGVsZXIgYnBtbuWvueixoVxyXG4gICAgICovXHJcbiAgICBkb3duTG9hZChicG1uTW9kZWxlcikge1xyXG4gICAgICAgIHZhciBkb3dubG9hZExpbmsgPSAkKFwiI2Rvd25sb2FkQnBtblwiKVxyXG4gICAgICAgIGJwbW5Nb2RlbGVyLnNhdmVYTUwoeyBmb3JtYXQ6IHRydWUgfSwgZnVuY3Rpb24gKGVyciwgeG1sKSB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKCdjb3VsZCBub3Qgc2F2ZSBCUE1OIDIuMCBkaWFncmFtJywgZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0b29scy5zZXRFbmNvZGVkKGRvd25sb2FkTGluaywgJ2RpYWdyYW0uYnBtbicsIGVyciA/IG51bGwgOiB4bWwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog6L2s56CBeG1s5bm25LiL6L29XHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gbGluayDmjInpkq5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIOS4i+i9veWQjeensFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgYmFzZTY0WE1MXHJcbiAgICAgKi9cclxuICAgIHNldEVuY29kZWQobGluaywgbmFtZSwgZGF0YSkge1xyXG4gICAgICAgIHZhciBlbmNvZGVkRGF0YSA9IGVuY29kZVVSSUNvbXBvbmVudChkYXRhKTtcclxuICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICBsaW5rLmFkZENsYXNzKCdhY3RpdmUnKS5hdHRyKHtcclxuICAgICAgICAgICAgICAgICdocmVmJzogJ2RhdGE6YXBwbGljYXRpb24vYnBtbjIwLXhtbDtjaGFyc2V0PVVURi04LCcgKyBlbmNvZGVkRGF0YSxcclxuICAgICAgICAgICAgICAgICdkb3dubG9hZCc6IG5hbWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGluay5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog5LiK5LygYnBtblxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGJwbW5Nb2RlbGVyIGJwbW7lr7nosaFcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBjb250YWluZXIg5a655Zmo5a+56LGhXHJcbiAgICAgKi9cclxuICAgIHVwbG9hZChicG1uTW9kZWxlciwgY29udGFpbmVyKSB7XHJcbiAgICAgICAgdmFyIEZpbGVVcGxvYWQgPSBkb2N1bWVudC5teUZvcm0udXBsb2FkRmlsZS5maWxlc1swXTtcclxuICAgICAgICB2YXIgZm0gPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgICBmbS5hcHBlbmQoJ3Byb2Nlc3NGaWxlJywgRmlsZVVwbG9hZCk7XHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOiBwdWJsaWN1cmwrJ3Byb2Nlc3NEZWZpbml0aW9uL3VwbG9hZCcsXHJcbiAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICAgICAgZGF0YTogZm0sXHJcbiAgICAgICAgICAgIGFzeW5jOiBmYWxzZSxcclxuICAgICAgICAgICAgY29udGVudFR5cGU6IGZhbHNlLCAvL+emgeatouiuvue9ruivt+axguexu+Wei1xyXG4gICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsIC8v56aB5q2ianF1ZXJ55a+5REF0YeaVsOaNrueahOWkhOeQhizpu5jorqTkvJrlpITnkIZcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IHB1YmxpY3VybCsnYnBtbi8nICsgcmVzdWx0Lm9ialxyXG4gICAgICAgICAgICAgICAgdG9vbHMub3BlbkZyb21VcmwoYnBtbk1vZGVsZXIsIGNvbnRhaW5lciwgdXJsKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDmiZPlvIB4bWwgIFVybCDlnLDlnYBcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBicG1uTW9kZWxlciBicG1u5a+56LGhXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gY29udGFpbmVyIOWuueWZqOWvueixoVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybCB1cmzlnLDlnYBcclxuICAgICAqL1xyXG4gICAgb3BlbkZyb21VcmwoYnBtbk1vZGVsZXIsIGNvbnRhaW5lciwgdXJsKSB7XHJcbiAgICAgICAgJC5hamF4KHVybCwgeyBkYXRhVHlwZTogJ3RleHQnIH0pLmRvbmUoYXN5bmMgZnVuY3Rpb24gKHhtbCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgYnBtbk1vZGVsZXIuaW1wb3J0WE1MKHhtbCk7XHJcbiAgICAgICAgICAgICAgICBjb250YWluZXIucmVtb3ZlQ2xhc3MoJ3dpdGgtZXJyb3InKS5hZGRDbGFzcygnd2l0aC1kaWFncmFtJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDmiZPlvIDlvLnlh7rmoYZcclxuICAgICAqIEBwYXJhbSBpZFxyXG4gICAgICovXHJcbiAgICBzeW9wZW4oaWQpIHtcclxuICAgICAgICB2YXIgZG9tID0gJChcIiNcIiArIGlkKTtcclxuICAgICAgICB0aGlzLnN5Y2VudGVyKGRvbSk7XHJcbiAgICAgICAgZG9tLmFkZENsYXNzKG5hbWUpO1xyXG4gICAgICAgIGRvbS5zaG93KCk7XHJcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xyXG4gICAgICAgICQoXCIuc3ktbWFza1wiKS5mYWRlSW4oMzAwKVxyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhuYW1lKVxyXG4gICAgICAgIH0sIDMwMCk7XHJcblxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog6ZqQ6JeP5by55Ye65qGGXHJcbiAgICAgKiBAcGFyYW0gaWRcclxuICAgICAqL1xyXG4gICAgc3loaWRlKGlkKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBpZCA9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgIHZhciBkb20gPSAkKFwiLnN5LWFsZXJ0XCIpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGRvbSA9ICQoXCIjXCIgKyBpZClcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5hbWUgPSBkb20uYXR0cihcInN5LWxlYXZlXCIpO1xyXG4gICAgICAgIGRvbS5hZGRDbGFzcyhuYW1lKTtcclxuICAgICAgICAkKFwiLnN5LW1hc2tcIikuZmFkZU91dCgzMDApO1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGRvbS5oaWRlKCk7XHJcbiAgICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhuYW1lKTtcclxuICAgICAgICB9LCAzMDApXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDlvLnlh7rmoYblsYXkuK1cclxuICAgICAqIEBwYXJhbSBkb21cclxuICAgICAqL1xyXG4gICAgc3ljZW50ZXIoZG9tKSB7XHJcbiAgICAgICAgdmFyIG1ndG9wID0gcGFyc2VGbG9hdChkb20uaGVpZ2h0KCkgLyAyKTtcclxuICAgICAgICBkb20uY3NzKHtcclxuICAgICAgICAgICAgXCJ0b3BcIjogXCI1MCVcIixcclxuICAgICAgICAgICAgXCJtYXJnaW4tdG9wXCI6IFwiLVwiICsgbWd0b3AgKyBcInB4XCJcclxuICAgICAgICB9KVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICog5Yik5pat5piv5ZCm5piv5pWw57uEXHJcbiAgICAgKiBAcGFyYW0gdmFsdWVcclxuICAgICAqIEByZXR1cm5zIHthcmcgaXMgQXJyYXk8YW55Pnxib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc0FycmF5Rm4odmFsdWUpe1xyXG4gICAgICAgIGlmICh0eXBlb2YgQXJyYXkuaXNBcnJheSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IFwiW29iamVjdCBBcnJheV1cIjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDmoLnmja7mlbDmja7orr7nva7popzoibJcclxuICAgICAqIEBwYXJhbSBkYXRhXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9XHJcbiAgICAgKi9cclxuICAgIGdldEJ5Q29sb3IoZGF0YSl7XHJcblxyXG4gICAgICAgIHZhciBDb2xvckpzb249W11cclxuICAgICAgICBmb3IodmFyIGsgaW4gZGF0YVsnaGlnaExpbmUnXSl7XHJcbiAgICAgICAgICAgIHZhciBwYXI9e1xyXG4gICAgICAgICAgICAgICAgXCJuYW1lXCI6IGRhdGFbJ2hpZ2hMaW5lJ11ba10sXHJcbiAgICAgICAgICAgICAgICBcInN0cm9rZVwiOlwiZ3JlZW5cIixcclxuICAgICAgICAgICAgICAgIFwiZmlsbFwiOlwiZ3JlZW5cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIENvbG9ySnNvbi5wdXNoKHBhcilcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yKHZhciBrIGluIGRhdGFbJ2hpZ2hQb2ludCddKXtcclxuICAgICAgICAgICAgdmFyIHBhcj17XHJcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogZGF0YVsnaGlnaFBvaW50J11ba10sXHJcbiAgICAgICAgICAgICAgICBcInN0cm9rZVwiOlwiZ3JheVwiLFxyXG4gICAgICAgICAgICAgICAgXCJmaWxsXCI6XCIjZWFlOWU5XCJcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQ29sb3JKc29uLnB1c2gocGFyKVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IodmFyIGsgaW4gZGF0YVsnaURvJ10pe1xyXG4gICAgICAgICAgICB2YXIgcGFyPXtcclxuICAgICAgICAgICAgICAgIFwibmFtZVwiOiBkYXRhWydpRG8nXVtrXSxcclxuICAgICAgICAgICAgICAgIFwic3Ryb2tlXCI6XCJncmVlblwiLFxyXG4gICAgICAgICAgICAgICAgXCJmaWxsXCI6XCIjYTNkNjhlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBDb2xvckpzb24ucHVzaChwYXIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvcih2YXIgayBpbiBkYXRhWyd3YWl0aW5nVG9EbyddKXtcclxuICAgICAgICAgICAgdmFyIHBhcj17XHJcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogZGF0YVsnd2FpdGluZ1RvRG8nXVtrXSxcclxuICAgICAgICAgICAgICAgIFwic3Ryb2tlXCI6XCJncmVlblwiLFxyXG4gICAgICAgICAgICAgICAgXCJmaWxsXCI6XCJ5ZWxsb3dcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIENvbG9ySnNvbi5wdXNoKHBhcilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIENvbG9ySnNvblxyXG4gICAgfVxyXG59XHJcblxyXG5cclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCB0b29scyJdfQ== diff --git a/src/main/resources/resources/bpmnjs/dist/vendor/diagram-js.css b/src/main/resources/resources/bpmnjs/dist/vendor/diagram-js.css index dfeb640375a4255a74eba7cdbbe2676d3beeb5ff..aea7e9108ef81817080a56c92b23b04f92254bb2 100644 --- a/src/main/resources/resources/bpmnjs/dist/vendor/diagram-js.css +++ b/src/main/resources/resources/bpmnjs/dist/vendor/diagram-js.css @@ -1,3 +1,92 @@ +/** + * color definitions + */ +.djs-container { + --blue-base-65: #4d90ff; + --blue-base-65-opacity-30: rgba(77, 144, 255, 0.3); + --blue-darken-48: #005df7; + --blue-darken-55: #1a70ff; + --blue-lighten-82: #a2c5ff; + + --orange-base-60: #ffa533; + --orange-base-60-opacity-30: rgba(255, 165, 51, 0.3); + --orange-base-60-opacity-50: rgba(255, 165, 51, 0.5); + --orange-lighten-85: #ffddb3; + + --red-base-62: #ff3d3d; + --red-base-62-opacity-10: rgba(255, 61, 61, 0.1); + + --silver-darken-94: #efefef; + + --color-000000: #000000; + --color-000000-opacity-05: rgba(0, 0, 0, 0.05); + --color-000000-opacity-10: rgba(0, 0, 0, 0.1); + --color-333333: #333333; + --color-666666: #666666; + --color-aaaaaa: #aaaaaa; + --color-cccccc: #cccccc; + --color-cdcdcd: #cdcdcd; + --color-dddddd: #dddddd; + --color-f6f6f6: #f6f6f6; + --color-fafafa: #fafafa; + --color-fefefe: #fefefe; + --color-ffffff: #ffffff; + + --bendpoint-fill-color: var(--blue-base-65-opacity-30); + --bendpoint-stroke-color: var(--blue-base-65); + + --context-pad-entry-background-color: var(--color-fefefe); + --context-pad-entry-hover-background-color: var(--silver-darken-94); + + --element-dragger-color: var(--blue-base-65); + --element-hover-outline-fill-color: var(--blue-darken-48); + --element-selected-outline-stroke-color: var(--blue-base-65); + + --lasso-fill-color: var(--color-000000-opacity-05); + --lasso-stroke-color: var(--color-000000); + + --palette-entry-color: var(--color-333333); + --palette-entry-hover-color: var(--blue-darken-48); + --palette-entry-selected-color: var(--blue-base-65); + --palette-separator-color: var(--color-aaaaaa); + --palette-toggle-hover-background-color: var(--color-666666); + --palette-background-color: var(--color-fafafa); + --palette-border-color: var(--color-cccccc); + + --popup-body-background-color: var(--color-fefefe); + --popup-header-entry-selected-color: var(--blue-base-65); + --popup-header-entry-selected-background-color: var(--color-000000-opacity-10); + --popup-header-separator-color: var(--color-dddddd); + --popup-background-color: var(--color-fafafa); + --popup-border-color: var(--color-cccccc); + + --resizer-fill-color: var(--blue-base-65-opacity-30); + --resizer-stroke-color: var(--blue-base-65); + + --search-container-background-color: var(--color-fafafa); + --search-container-border-color: var(--blue-darken-55); + --search-container-box-shadow-color: var(--blue-lighten-82); + --search-container-box-shadow-inset-color: var(--color-cdcdcd); + --search-input-border-color: var(--color-cccccc); + --search-result-border-color: var(--color-aaaaaa); + --search-result-highlight-color: var(--color-000000); + --search-result-selected-color: var(--blue-base-65-opacity-30); + + --shape-attach-allowed-stroke-color: var(--blue-base-65); + --shape-connect-allowed-fill-color: var(--color-000000-opacity-05); + --shape-drop-allowed-fill-color: var(--color-000000-opacity-05); + --shape-drop-not-allowed-fill-color: var(--red-base-62-opacity-10); + --shape-resize-preview-stroke-color: var(--blue-base-65); + + --snap-line-stroke-color: var(--blue-base-65-opacity-30); + + --space-tool-crosshair-stroke-color: var(--color-000000); + + --tooltip-error-background-color: var(--red-base-62-opacity-10); + --tooltip-error-border-color: var(--red-base-62); + --tooltip-error-color: var(--red-base-62); +} + /** * outline styles */ @@ -10,65 +99,65 @@ .djs-element.hover .djs-outline, .djs-element.selected .djs-outline { visibility: visible; - shape-rendering: crispEdges; + shape-rendering: geometricPrecision; stroke-dasharray: 3,3; } .djs-element.selected .djs-outline { - stroke: #8888FF; + stroke: var(--element-selected-outline-stroke-color); stroke-width: 1px; } .djs-element.hover .djs-outline { - stroke: #FF8888; + stroke: var(--element-hover-outline-fill-color); stroke-width: 1px; } .djs-shape.connect-ok .djs-visual > :nth-child(1) { - fill: #DCFECC /* light-green */ !important; + fill: var(--shape-connect-allowed-fill-color) !important; } .djs-shape.connect-not-ok .djs-visual > :nth-child(1), .djs-shape.drop-not-ok .djs-visual > :nth-child(1) { - fill: #f9dee5 /* light-red */ !important; + fill: var(--shape-drop-not-allowed-fill-color) !important; } .djs-shape.new-parent .djs-visual > :nth-child(1) { - fill: #F7F9FF !important; + fill: var(--shape-drop-allowed-fill-color) !important; } svg.drop-not-ok { - background: #f9dee5 /* light-red */ !important; + background: var(--shape-drop-not-allowed-fill-color) !important; } svg.new-parent { - background: #F7F9FF /* light-blue */ !important; + background: var(--shape-drop-allowed-fill-color) !important; } .djs-connection.connect-ok .djs-visual > :nth-child(1), .djs-connection.drop-ok .djs-visual > :nth-child(1) { - stroke: #90DD5F /* light-green */ !important; + stroke: var(--shape-drop-allowed-fill-color) !important; } .djs-connection.connect-not-ok .djs-visual > :nth-child(1), .djs-connection.drop-not-ok .djs-visual > :nth-child(1) { - stroke: #E56283 /* light-red */ !important; + stroke: var(--shape-drop-not-allowed-fill-color) !important; } .drop-not-ok, .connect-not-ok { + stroke: var(--shape-attach-allowed-stroke-color) !important; cursor: not-allowed; } .djs-element.attach-ok .djs-visual > :nth-child(1) { stroke-width: 5px !important; - stroke: rgba(255, 116, 0, 0.7) !important; } .djs-frame.connect-not-ok .djs-visual > :nth-child(1), .djs-frame.drop-not-ok .djs-visual > :nth-child(1) { stroke-width: 3px !important; - stroke: #E56283 /* light-red */ !important; + stroke: var(--shape-drop-not-allowed-fill-color) !important; fill: none !important; } @@ -77,13 +166,12 @@ svg.new-parent { * */ .djs-lasso-overlay { - fill: rgb(255, 116, 0); - fill-opacity: 0.1; + fill: var(--lasso-fill-color); stroke-dasharray: 5 1 3 1; - stroke: rgb(255, 116, 0); + stroke: var(--lasso-stroke-color); - shape-rendering: crispEdges; + shape-rendering: geometricPrecision; pointer-events: none; } @@ -94,7 +182,7 @@ svg.new-parent { fill: none; stroke-dasharray: 5 1 3 1; - stroke: rgb(255, 116, 0); + stroke: var(--shape-resize-preview-stroke-color); pointer-events: none; } @@ -105,14 +193,16 @@ svg.new-parent { } .djs-resizer-visual { - fill: white; + fill: var(--resizer-fill-color);; stroke-width: 1px; - stroke: #BBB; + stroke-opacity: 0.5; + stroke: var(--resizer-stroke-color); shape-rendering: geometricprecision; } .djs-resizer:hover .djs-resizer-visual { - stroke: #555; + stroke: var(--resizer-stroke-color); + stroke-opacity: 1; } .djs-cursor-resize-ns, @@ -156,12 +246,12 @@ svg.new-parent { */ .djs-dragger * { fill: none !important; - stroke: rgb(255, 116, 0) !important; + stroke: var(--element-dragger-color) !important; } .djs-dragger tspan, .djs-dragger text { - fill: rgb(255, 116, 0) !important; + fill: var(--element-dragger-color) !important; stroke: none !important; } @@ -170,14 +260,14 @@ marker.djs-dragger path, marker.djs-dragger polygon, marker.djs-dragger polyline, marker.djs-dragger rect { - fill: rgb(255, 116, 0) !important; + fill: var(--element-dragger-color) !important; stroke: none !important; } marker.djs-dragger text, marker.djs-dragger tspan { fill: none !important; - stroke: rgb(255, 116, 0) !important; + stroke: var(--element-dragger-color) !important; } .djs-dragging { @@ -266,8 +356,7 @@ marker.djs-dragger tspan { * snapping */ .djs-snap-line { - stroke: rgb(255, 195, 66); - stroke: rgba(255, 195, 66, 0.50); + stroke: var(--snap-line-stroke-color); stroke-linecap: round; stroke-width: 2px; pointer-events: none; @@ -277,7 +366,7 @@ marker.djs-dragger tspan { * snapping */ .djs-crosshair { - stroke: #555; + stroke: var(--space-tool-crosshair-stroke-color); stroke-linecap: round; stroke-width: 1px; pointer-events: none; @@ -303,7 +392,7 @@ marker.djs-dragger tspan { padding-top: 5px; border: none; - border-bottom: solid 1px #DDD; + border-bottom: solid 1px var(--palette-separator-color); clear: both; } @@ -318,7 +407,7 @@ marker.djs-dragger tspan { .djs-palette .entry, .djs-palette .djs-palette-toggle { - color: #333; + color: var(--palette-entry-color); font-size: 30px; text-align: center; @@ -339,15 +428,15 @@ marker.djs-dragger tspan { } .djs-palette .djs-palette-toggle:hover { - background: #666; + background: var(--palette-toggle-hover-background-color); } .djs-palette .entry:hover { - color: rgb(255, 116, 0); + color: var(--palette-entry-hover-color); } .djs-palette .highlighted-entry { - color: rgb(255, 116, 0) !important; + color: var(--palette-entry-selected-color) !important; } .djs-palette .entry, @@ -404,8 +493,8 @@ marker.djs-dragger tspan { cursor: default; - background-color: #FEFEFE; - box-shadow: 0 0 2px 1px #FEFEFE; + background-color: var(--context-pad-entry-background-color); + box-shadow: 0 0 2px 1px var(--context-pad-entry-background-color); pointer-events: all; } @@ -414,7 +503,7 @@ marker.djs-dragger tspan { } .djs-context-pad .entry:hover { - background: rgb(255, 252, 176); + background: var(--context-pad-entry-hover-background-color); } .djs-context-pad.open { @@ -443,7 +532,7 @@ marker.djs-dragger tspan { .djs-popup .entry:hover, .djs-popup .entry.active:hover { - background: rgb(255, 252, 176); + background: var(--popup-header-entry-selected-background-color); } .djs-popup .entry.disabled { @@ -459,9 +548,9 @@ marker.djs-dragger tspan { } .djs-popup .djs-popup-header .entry.active { - color: rgb(255, 116, 0); - border: solid 1px rgb(255, 116, 0); - background-color: #F6F6F6; + color: var(--popup-header-entry-selected-color); + border: solid 1px var(--popup-header-entry-selected-color); + background-color: var(--popup-header-entry-selected-background-color); } .djs-popup-body .entry { @@ -473,11 +562,11 @@ marker.djs-dragger tspan { } .djs-popup-body { - background-color: #FEFEFE; + background-color: var(--popup-body-background-color); } .djs-popup-header { - border-bottom: 1px solid #DDD; + border-bottom: 1px solid var(--popup-header-separator-color); } .djs-popup-header .entry { @@ -492,9 +581,15 @@ marker.djs-dragger tspan { /** * popup / palette styles */ -.djs-popup, .djs-palette { - background: #FAFAFA; - border: solid 1px #CCC; +.djs-palette { + background: var(--palette-background-color); + border: solid 1px var(--palette-border-color); + border-radius: 2px; +} + +.djs-popup { + background: var(--popup-background-color); + border: solid 1px var(--popup-border-color); border-radius: 2px; } @@ -516,17 +611,23 @@ marker.djs-dragger tspan { * bendpoints */ .djs-segment-dragger .djs-visual { - fill: rgba(255, 255, 121, 0.2); + display: none; + + fill: var(--bendpoint-fill-color); + stroke: var(--bendpoint-stroke-color); stroke-width: 1px; stroke-opacity: 1; - stroke: rgba(255, 255, 121, 0.3); +} + +.djs-segment-dragger:hover .djs-visual { + display: block; } .djs-bendpoint .djs-visual { - fill: rgba(255, 255, 121, 0.8); + fill: var(--bendpoint-fill-color); + stroke: var(--bendpoint-stroke-color); stroke-width: 1px; stroke-opacity: 0.5; - stroke: black; } .djs-segment-dragger:hover, @@ -550,9 +651,9 @@ marker.djs-dragger tspan { .djs-segment-dragger.djs-dragging .djs-visual, .djs-bendpoint:hover .djs-visual, .djs-bendpoint.floating .djs-visual { - fill: yellow; - stroke-opacity: 0.5; - stroke: black; + fill: var(--bendpoint-fill-color); + stroke: var(--bendpoint-stroke-color); + stroke-opacity: 1; } .djs-bendpoint.floating .djs-hit { @@ -561,8 +662,8 @@ marker.djs-dragger tspan { .djs-segment-dragger .djs-hit, .djs-bendpoint .djs-hit { - pointer-events: all; fill: none; + pointer-events: all; } .djs-segment-dragger.horizontal .djs-hit { @@ -598,34 +699,22 @@ marker.djs-dragger tspan { opacity: 1.0; } -.djs-segment-dragger.djs-dragging .djs-visual, -.djs-bendpoint.djs-dragging .djs-visual { - fill: yellow; - stroke-opacity: 0.5; -} - /** * tooltips */ .djs-tooltip-error { - font-size: 11px; - line-height: 18px; - text-align: left; - - padding: 5px; - - opacity: 0.7; -} - -.djs-tooltip-error > * { width: 160px; + padding: 6px; - background: rgb(252, 236, 240); - color: rgb(158, 76, 76); - padding: 3px 7px; - border-radius: 5px; - border-left: solid 5px rgb(174, 73, 73); + background: var(--tooltip-error-background-color); + border: solid 1px var(--tooltip-error-border-color); + border-radius: 2px; + color: var(--tooltip-error-color); + font-size: 12px; + line-height: 16px; + + opacity: 0.75; } .djs-tooltip-error:hover { @@ -651,9 +740,10 @@ marker.djs-dragger tspan { font-size: 1.05em; opacity: 0.9; - background: #FAFAFA; - border: solid 1px #CCC; + background: var(--search-container-background-color); + border: solid 1px var(--search-container-border-color); border-radius: 2px; + box-shadow: 0 0 0 2px var(--search-container-box-shadow-color), 0 0 0 1px var(--search-container-box-shadow-inset-color) inset; } .djs-search-container:not(.open) { @@ -664,12 +754,12 @@ marker.djs-dragger tspan { font-size: 1.05em; width: 100%; padding: 6px 10px; - border: 1px solid #ccc; + border: 1px solid var(--search-input-border-color); } .djs-search-input input:focus { outline: none; - border-color: #52B415; + border-color: var(--search-input-border-color); } .djs-search-results { @@ -679,7 +769,6 @@ marker.djs-dragger tspan { } .djs-search-results:hover { - /*background: #fffdd7;*/ cursor: pointer; } @@ -687,12 +776,12 @@ marker.djs-dragger tspan { width: 100%; padding: 6px 10px; background: white; - border-bottom: solid 1px #AAA; + border-bottom: solid 1px var(--search-result-border-color); border-radius: 1px; } .djs-search-highlight { - color: black; + color: var(--search-result-highlight-color); } .djs-search-result-primary { @@ -705,20 +794,19 @@ marker.djs-dragger tspan { } .djs-search-result:hover { - background: #fdffd6; + background: var(--search-result-selected-color); } .djs-search-result-selected { - background: #fffcb0; + background: var(--search-result-selected-color); } .djs-search-result-selected:hover { - background: #f7f388; + background: var(--search-result-selected-color); } .djs-search-overlay { - background: yellow; - opacity: 0.3; + background: var(--search-result-selected-color); } /** diff --git a/src/main/resources/resources/bpmnjs/resources/activiti.json b/src/main/resources/resources/bpmnjs/resources/activiti.json index 3385c4ed9788ff07b925942076178d35c121e87c..c8d3ba0c4df30ae68e7b1bcce46a02cd79451a03 100644 --- a/src/main/resources/resources/bpmnjs/resources/activiti.json +++ b/src/main/resources/resources/bpmnjs/resources/activiti.json @@ -890,6 +890,16 @@ "name": "fields", "type": "Field", "isMany": true + }, + { + "name": "id", + "type": "String", + "isAttr": true + }, + { + "name": "eventDefinitions", + "type": "bpmn:TimerEventDefinition", + "isMany": true } ] }, @@ -961,7 +971,29 @@ ] }, { - "name": "FormProperty", + "name": "FormData", + "superClass": [ "Element" ], + "meta": { + "allowedIn": [ + "bpmn:StartEvent", + "bpmn:UserTask" + ] + }, + "properties": [ + { + "name": "fields", + "type": "FormField", + "isMany": true + }, + { + "name": "businessKey", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "FormField", "superClass": [ "Element" ], "properties": [ { diff --git a/src/main/resources/resources/bpmnjs/resources/properties-panel/provider/activiti/parts/implementation/FieldInjection.js b/src/main/resources/resources/bpmnjs/resources/properties-panel/provider/activiti/parts/implementation/FieldInjection.js index 01a363fbebd25ca34567ae836db043f24b2085ad..24f2922c4311c32634b315529bc311426b7d1154 100644 --- a/src/main/resources/resources/bpmnjs/resources/properties-panel/provider/activiti/parts/implementation/FieldInjection.js +++ b/src/main/resources/resources/bpmnjs/resources/properties-panel/provider/activiti/parts/implementation/FieldInjection.js @@ -22,7 +22,7 @@ var DEFAULT_PROPS = { 'expression': undefined }; -var ACTIVITI_FIELD_EXTENSION_ELEMENT = 'activiti:FormProperty'; +var ACTIVITI_FIELD_EXTENSION_ELEMENT = 'activiti:Field'; module.exports = function(element, bpmnFactory, translate, options) { diff --git a/src/main/resources/resources/bpmnjs/resources/tools.js b/src/main/resources/resources/bpmnjs/resources/tools.js index 004b3a1d6d6e1e8b42150dbe175caef101acbf7c..2c619767f5c88172db9531bb67507a7fcc0ef56b 100644 --- a/src/main/resources/resources/bpmnjs/resources/tools.js +++ b/src/main/resources/resources/bpmnjs/resources/tools.js @@ -5,35 +5,15 @@ */ import $ from 'jquery'; -import x2js from 'x2js'; const proHost = window.location.protocol + "//" + window.location.host; const href = window.location.href.split("bpmnjs")[0]; const key = href.split(window.location.host)[1]; const publicurl = proHost + key; -//const publicurl='http://localhost:8080'; - const $x2j= new x2js() const tools = { registerFileDrop(container, callback) { container.get(0).addEventListener('dragover', tools.handleDragOver, false); container.get(0).addEventListener('drop', tools.handleFileSelect, false); }, - handleFileSelect(e) { - e.stopPropagation(); - e.preventDefault(); - var files = e.dataTransfer.files; - var file = files[0]; - var reader = new FileReader(); - reader.onload = function (e) { - var xml = e.target.result; - callback(xml); - }; - reader.readAsText(file); - }, - handleDragOver(e) { - e.stopPropagation(); - e.preventDefault(); - e.dataTransfer.dropEffect = 'copy'; - }, /** * 获取地址栏参数 * @param {string} value @@ -85,14 +65,13 @@ const tools = { * 保存bpmn对象 * @param {object} bpmnModeler bpmn对象 */ - saveBpmn(bpmnModeler,text) { + saveBpmn(bpmnModeler) { bpmnModeler.saveXML({ format: true }, function (err, xml) { if (err) { return console.error('保存失败,请重试', err); } console.log(xml) var param={ - "deploymentName":text, "stringBPMN":xml } $.ajax({ @@ -120,7 +99,7 @@ const tools = { * @param {object} bpmnModeler bpmn对象 */ downLoad(bpmnModeler) { - var downloadLink = $("#saveBpmn") + var downloadLink = $("#downloadBpmn") bpmnModeler.saveXML({ format: true }, function (err, xml) { if (err) { return console.error('could not save BPMN 2.0 diagram', err); @@ -231,23 +210,6 @@ const tools = { "margin-top": "-" + mgtop + "px" }) }, - /** - * 修改camunda为activiti - * @param json - */ - camundaChangeActiviti(xmlfile){ - const objXML = xmlfile.replace(/camunda/gi,"activiti"); - return objXML; - }, - /** - * 修改activiti为camunda - * @param json - */ - acitvitiChangeCamunda(xmlfile){ - const objXML = xmlfile.replace(/activiti/gi,"camunda"); - return objXML; - }, - /** * 判断是否是数组 * @param value @@ -266,51 +228,40 @@ const tools = { * @returns {Array} */ getByColor(data){ + var ColorJson=[] - for(var i in data){ - switch (i) { - case "waitingToDo": - for(var k in data[i]){ - var par={ - "name": data[i][k], - "stroke":"green", - "fill":"yellow" - } - ColorJson.push(par) - } - break - case "highPoint": - for(var k in data[i]){ - var par={ - "name": data[i][k], - "stroke":"gray", - "fill":"#eae9e9" + for(var k in data['highLine']){ + var par={ + "name": data['highLine'][k], + "stroke":"green", + "fill":"green" + } + ColorJson.push(par) + } + for(var k in data['highPoint']){ + var par={ + "name": data['highPoint'][k], + "stroke":"gray", + "fill":"#eae9e9" - } - ColorJson.push(par) - } - break - case "iDo": - for(var k in data[i]){ - var par={ - "name": data[i][k], - "stroke":"green", - "fill":"#a3d68e" - } - ColorJson.push(par) - } - break - case "highLine": - for(var k in data[i]){ - var par={ - "name": data[i][k], - "stroke":"green", - "fill":"green" - } - ColorJson.push(par) - } - break } + ColorJson.push(par) + } + for(var k in data['iDo']){ + var par={ + "name": data['iDo'][k], + "stroke":"green", + "fill":"#a3d68e" + } + ColorJson.push(par) + } + for(var k in data['waitingToDo']){ + var par={ + "name": data['waitingToDo'][k], + "stroke":"green", + "fill":"yellow" + } + ColorJson.push(par) } return ColorJson }